Name: series-workflowld6qn Phase: Failed StartedAt: 2026-07-30 09:59:44 +0000 UTC FinishedAt: 2026-07-30 10:04:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowld6qn[0] Phase: Succeeded StartedAt: 2026-07-30 09:59:44 +0000 UTC FinishedAt: 2026-07-30 10:04:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowld6qn[0].run-triage Phase: Succeeded StartedAt: 2026-07-30 09:59:44 +0000 UTC FinishedAt: 2026-07-30 10:04:07 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDEwOjAzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBBTUQvUGVuc2FuZG8gQ29yZSBTbWFydE5JQyBkcml2ZXIgKHBkc19jb3JlKSwgd2hpY2ggcmVxdWlyZXMgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4gVGhlcmVmb3JlLCB0aGUgY29kZSBpcyB1bnJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTA6MDM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA4ZmQ3ZGY5MzU4MzE2NDQ4NThmZTBkZWIzMzljNzg2ZDQ3YTdkODU3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMzAgMTA6MDM6NDQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L2FtZC9wZHNfY29yZS5yc3QgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvYW1kL3Bkc19jb3JlLnJzdFxuaW5kZXggOWU4YTE2YzQ0MTAyOS4uNDk0ODdhMzVjMTYzMiAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC9hbWQvcGRzX2NvcmUucnN0XG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvYW1kL3Bkc19jb3JlLnJzdFxuQEAgLTEwMiw2ICYjNDM7MTAyLDk1IEBAIGN1cnJlbnRseSBpbiB1c2UsIGFuZCB0aGF0IGJhbmsgd2lsbCB1c2VkIGZvciB0aGUgbmV4dCBib290OjpcbiAgICMgZGV2bGluayBkZXYgZmxhc2ggcGNpLzAwMDA6YjU6MDAuMCBcXFxuICAgICAgICAgICAgIGZpbGUgcGVuc2FuZG8vZHNjX2Z3XzEuNjMuMC0yMi50YXJcbiBcbiYjNDM7RmlybXdhcmUgTWFuYWdlbWVudCAoUExETSlcbiYjNDM7PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiYjNDM7XG4mIzQzO0Zpcm13YXJlIHRoYXQgc3VwcG9ydHMgUExETSBjYW4gYmUgdXBkYXRlZCB1c2luZyB0aGUgZGV2bGluayBmbGFzaCBjb21tYW5kXG4mIzQzO3dpdGggYSBQTERNIGZpcm13YXJlIHBhY2thZ2UuIFRoZSBlbnRpcmUgcGFja2FnZSBjYW4gYmUgdXBkYXRlZCBhdCBvbmNlOjpcbiYjNDM7XG4mIzQzOyAgIyBkZXZsaW5rIGRldiBmbGFzaCBwY2kvMDAwMDpiNTowMC4wIGZpbGUgZmlybXdhcmUucGxkbWZ3XG4mIzQzO1xuJiM0MztJbmRpdmlkdWFsIGNvbXBvbmVudHMgY2FuIGFsc28gYmUgdXBkYXRlZCBieSBzcGVjaWZ5aW5nIHRoZSBjb21wb25lbnQgbmFtZTo6XG4mIzQzO1xuJiM0MzsgICMgZGV2bGluayBkZXYgZmxhc2ggcGNpLzAwMDA6YjU6MDAuMCBcXFxuJiM0MzsgICAgICAgICAgICBmaWxlIGZpcm13YXJlLnBsZG1mdyBjb21wb25lbnQgZncuY3BsZFxuJiM0MztcbiYjNDM7UGVyLWNvbXBvbmVudCB1cGRhdGUgdXNlcyBkcml2ZXItZGVmaW5lZCBjb21wb25lbnQgbmFtZXMgKGZ3LCBmdy5jcGxkLFxuJiM0MztldGMuKS4gTm90IGFsbCBjb21wb25lbnRzIHN1cHBvcnQgcGVyLWNvbXBvbmVudCB1cGRhdGUgLVxuJiM0MztkZXZsaW5rIHdpbGwgcmVqZWN0IHRoZSByZXF1ZXN0IGlmIHRoZSBzcGVjaWZpZWQgY29tcG9uZW50IGNhbm5vdFxuJiM0MztiZSB1cGRhdGVkLlxuJiM0MztcbiYjNDM7R29sZCAocmVjb3ZlcnkpIGNvbXBvbmVudHMgY2FuIGJlIHVwZGF0ZWQgYnkgc3BlY2lmeWluZyB0aGUgYmFzZSBjb21wb25lbnRcbiYjNDM7bmFtZSAoZS5nLiwgYGBmd2BgIGZvciBgYGZ3LmdvbGRgYCkgd2l0aCBhIGdvbGRmdyBwYWNrYWdlIGZpbGUgd2hlbiB0aGVcbiYjNDM7ZGV2aWNlIHN1cHBvcnRzIHBlci1jb21wb25lbnQgdXBkYXRlLiBUaGUgYGAuZ29sZGBgIHN1ZmZpeCBpbiBkZXZsaW5rIGluZm9cbiYjNDM7b3V0cHV0IGluZGljYXRlcyB0aGUgZ29sZCBzbG90IHZlcnNpb24sIG5vdCBhIGZsYXNoIHRhcmdldC5cbiYjNDM7XG4mIzQzO0luZm8gdmVyc2lvbnMgKFBMRE0pXG4mIzQzOz09PT09PT09PT09PT09PT09PT09XG4mIzQzO1xuJiM0MztGaXJtd2FyZSB0aGF0IHN1cHBvcnRzIFBMRE0gcmVwb3J0cyBjb21wb25lbnQgdmVyc2lvbnMgdXNpbmcgZHJpdmVyLWRlZmluZWRcbiYjNDM7bmFtZXMuIFRoZSBkcml2ZXIgcmVwb3J0cyB0aGUgZm9sbG93aW5nIGNvbXBvbmVudCB2ZXJzaW9uczpcbiYjNDM7XG4mIzQzOy4uIGxpc3QtdGFibGU6OiBkZXZsaW5rIGluZm8gdmVyc2lvbnMgZm9yIFBMRE0tY2FwYWJsZSBmaXJtd2FyZVxuJiM0MzsgICA6d2lkdGhzOiA1IDUgOTBcbiYjNDM7XG4mIzQzOyAgICogLSBOYW1lXG4mIzQzOyAgICAgLSBUeXBlXG4mIzQzOyAgICAgLSBEZXNjcmlwdGlvblxuJiM0MzsgICAqIC0gYGBmd2BgXG4mIzQzOyAgICAgLSBydW5uaW5nLCBzdG9yZWRcbiYjNDM7ICAgICAtIE1haW4gZmlybXdhcmVcbiYjNDM7ICAgKiAtIGBgZncuZ29sZGBgXG4mIzQzOyAgICAgLSBzdG9yZWRcbiYjNDM7ICAgICAtIEdvbGQgKHJlY292ZXJ5KSBmaXJtd2FyZVxuJiM0MzsgICAqIC0gYGBmdy5ib290bG9hZGVyYGBcbiYjNDM7ICAgICAtIHJ1bm5pbmcsIHN0b3JlZFxuJiM0MzsgICAgIC0gQm9vdCBsb2FkZXJcbiYjNDM7ICAgKiAtIGBgZncuY3BsZGBgXG4mIzQzOyAgICAgLSBydW5uaW5nLCBzdG9yZWRcbiYjNDM7ICAgICAtIENQTERcbiYjNDM7ICAgKiAtIGBgZncuc2VjdXJlYGBcbiYjNDM7ICAgICAtIHJ1bm5pbmcsIHN0b3JlZFxuJiM0MzsgICAgIC0gU2VjdXJlIGJvb3QgZmlybXdhcmVcbiYjNDM7ICAgKiAtIGBgZncuZnBnYWBgXG4mIzQzOyAgICAgLSBydW5uaW5nLCBzdG9yZWRcbiYjNDM7ICAgICAtIEZQR0EgY29uZmlndXJhdGlvblxuJiM0MzsgICAqIC0gYGBmdy5zdWNgYFxuJiM0MzsgICAgIC0gcnVubmluZywgc3RvcmVkXG4mIzQzOyAgICAgLSBTeXN0ZW0gVW5pdCBDb250cm9sbGVyIGZpcm13YXJlXG4mIzQzOyAgICogLSBgYGZ3LnN1Yy5ib290bG9hZGVyYGBcbiYjNDM7ICAgICAtIHJ1bm5pbmcsIHN0b3JlZFxuJiM0MzsgICAgIC0gU3lzdGVtIFVuaXQgQ29udHJvbGxlciBib290bG9hZGVyXG4mIzQzOyAgICogLSBgYGZ3LnVib290YGBcbiYjNDM7ICAgICAtIHJ1bm5pbmcsIHN0b3JlZFxuJiM0MzsgICAgIC0gVS1Cb290IGJvb3Rsb2FkZXJcbiYjNDM7ICAgKiAtIGBgYXNpYy5pZGBgXG4mIzQzOyAgICAgLSBmaXhlZFxuJiM0MzsgICAgIC0gVGhlIEFTSUMgdHlwZSBmb3IgdGhpcyBkZXZpY2VcbiYjNDM7ICAgKiAtIGBgYXNpYy5yZXZgYFxuJiM0MzsgICAgIC0gZml4ZWRcbiYjNDM7ICAgICAtIFRoZSByZXZpc2lvbiBvZiB0aGUgQVNJQyBmb3IgdGhpcyBkZXZpY2VcbiYjNDM7XG4mIzQzO0V4YW1wbGUgb3V0cHV0OjpcbiYjNDM7XG4mIzQzOyAgJCBkZXZsaW5rIGRldiBpbmZvIHBjaS8wMDAwOjAwOjA1LjBcbiYjNDM7ICBwY2kvMDAwMDowMDowNS4wOlxuJiM0MzsgICAgZHJpdmVyIHBkc19jb3JlXG4mIzQzOyAgICBzZXJpYWxfbnVtYmVyIEZMTTE4NDIwMDczXG4mIzQzOyAgICB2ZXJzaW9uczpcbiYjNDM7ICAgICAgICBmaXhlZDpcbiYjNDM7ICAgICAgICAgIGFzaWMuaWQgMHgwXG4mIzQzOyAgICAgICAgICBhc2ljLnJldiAweDBcbiYjNDM7ICAgICAgICBydW5uaW5nOlxuJiM0MzsgICAgICAgICAgZncuYm9vdGxvYWRlciAxLjIuM1xuJiM0MzsgICAgICAgICAgZncgMS4zLjBcbiYjNDM7ICAgICAgICAgIGZ3LmNwbGQgMy4xOFxuJiM0MzsgICAgICAgIHN0b3JlZDpcbiYjNDM7ICAgICAgICAgIGZ3LmJvb3Rsb2FkZXIgMS4yLjNcbiYjNDM7ICAgICAgICAgIGZ3LmdvbGQgMS4yLjBcbiYjNDM7ICAgICAgICAgIGZ3IDEuMy4wXG4mIzQzOyAgICAgICAgICBmdy5jcGxkIDMuMThcbiYjNDM7XG4gSGVhbHRoIFJlcG9ydGVyc1xuID09PT09PT09PT09PT09PT1cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9LY29uZmlnXG5pbmRleCBlMzU5OTExNDFhMWEyLi43NDNlM2Q0YjZiOTRlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL0tjb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9LY29uZmlnXG5AQCAtMTcxLDYgJiM0MzsxNzEsNyBAQCBjb25maWcgUERTX0NPUkVcbiBcdGRlcGVuZHMgb24gNjRCSVQgXHUwMDI2XHUwMDI2IFBDSVxuIFx0c2VsZWN0IEFVWElMSUFSWV9CVVNcbiBcdHNlbGVjdCBORVRfREVWTElOS1xuJiM0MztcdHNlbGVjdCBQTERNRldcbiBcdGhlbHBcbiBcdCAgVGhpcyBlbmFibGVzIHRoZSBzdXBwb3J0IGZvciB0aGUgQU1EL1BlbnNhbmRvIENvcmUgZGV2aWNlIGZhbWlseSBvZlxuIFx0ICBhZGFwdGVycy4gIE1vcmUgc3BlY2lmaWMgaW5mb3JtYXRpb24gb24gdGhpcyBkcml2ZXIgY2FuIGJlXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL2NvcmUuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9jb3JlLmNcbmluZGV4IDA0ZWMyNTY5YzYxYzAuLjkyMmUzZWM4YWYxYjkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvY29yZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvY29yZS5jXG5AQCAtNDg5LDYgJiM0Mzs0ODksMTUgQEAgdm9pZCBwZHNjX3RlYXJkb3duKHN0cnVjdCBwZHNjICpwZHNjLCBib29sIHJlbW92aW5nKVxuIFx0XHRwZHNjX2RldmNtZF9yZXNldChwZHNjKTtcbiBcbiBcdHBjaV9jbGVhcl9tYXN0ZXIocGRzYy1cdTAwM2VwZGV2KTtcbiYjNDM7XHRpZiAoIXBkc2MtXHUwMDNlcGRldi1cdTAwM2Vpc192aXJ0Zm4pIHtcbiYjNDM7XHRcdHUxNiB2YWw7XG4mIzQzO1xuJiM0MztcdFx0LyogRmx1c2ggYW55IGluLWZsaWdodCBETUEgYmVmb3JlIGZyZWVpbmcgYnVmZmVycy5cbiYjNDM7XHRcdCAqIEEgY29uZmlnIHJlYWQgY29tcGxldGlvbiBjYW5ub3QgcmV0dXJuIHVudGlsIGFsbCBwcmlvclxuJiM0MztcdFx0ICogZGV2aWNlLWluaXRpYXRlZCBtZW1vcnkgd3JpdGVzIGhhdmUgY29tcGxldGVkLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRwY2lfcmVhZF9jb25maWdfd29yZChwZHNjLVx1MDAzZXBkZXYsIFBDSV9WRU5ET1JfSUQsIFx1MDAyNnZhbCk7XG4mIzQzO1x0fVxuIFxuIFx0cGRzY19jb3JlX3VuaW5pdChwZHNjKTtcbiBcbkBAIC00OTcsNiAmIzQzOzUwNiw4IEBAIHZvaWQgcGRzY190ZWFyZG93bihzdHJ1Y3QgcGRzYyAqcGRzYywgYm9vbCByZW1vdmluZylcbiBcdFx0cGRzYy1cdTAwM2V2aWZ0eXBlX3N0YXR1cyA9IE5VTEw7XG4gXHR9XG4gXG4mIzQzO1x0cGRzY19kZWJ1Z2ZzX2RlbF9ob3N0X21lbShwZHNjKTtcbiYjNDM7XHRwZHNjX2hvc3RfbWVtX2ZyZWUocGRzYyk7XG4gXHRwZHNjX2Rldl91bmluaXQocGRzYyk7XG4gXG4gXHRzZXRfYml0KFBEU0NfU19GV19ERUFELCBcdTAwMjZwZHNjLVx1MDAzZXN0YXRlKTtcbkBAIC01MDYsNiAmIzQzOzUxNyw4IEBAIGludCBwZHNjX3N0YXJ0KHN0cnVjdCBwZHNjICpwZHNjKVxuIHtcbiBcdHBkc19jb3JlX2ludHJfbWFzayhcdTAwMjZwZHNjLVx1MDAzZWludHJfY3RybFtwZHNjLVx1MDAzZWFkbWlucWNxLmludHhdLFxuIFx0XHRcdCAgIFBEU19DT1JFX0lOVFJfTUFTS19DTEVBUik7XG4mIzQzO1x0cGRzY19ob3N0X21lbV9hZGQocGRzYyk7XG4mIzQzO1x0cGRzY19kZWJ1Z2ZzX2FkZF9ob3N0X21lbShwZHNjKTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbkBAIC01ODcsNiAmIzQzOzYwMCw4IEBAIHZvaWQgcGRzY19md191cChzdHJ1Y3QgcGRzYyAqcGRzYylcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuJiM0MztcdHBkc2NfZndfY29tcG9uZW50c19pbnZhbGlkYXRlKHBkc2MpO1xuJiM0MztcbiBcdGVyciA9IHBkc2Nfc2V0dXAocGRzYywgUERTQ19TRVRVUF9SRUNPVkVSWSk7XG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIGVycl9vdXQ7XG5AQCAtNjcwLDMgJiM0Mzs2ODUsMTYxIEBAIHZvaWQgcGRzY19oZWFsdGhfdGhyZWFkKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBvdXRfdW5sb2NrOlxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnBkc2MtXHUwMDNlY29uZmlnX2xvY2spO1xuIH1cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHBkc2NfaG9zdF9tZW1fZGVsX29uZShzdHJ1Y3QgcGRzYyAqcGRzYywgdTE2IHRhZywgdTggcmVhc29uKVxuJiM0Mzt7XG4mIzQzO1x0dW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgY29tcCA9IHt9O1xuJiM0MztcdHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgY21kID0ge1xuJiM0MztcdFx0Lmhvc3RfbWVtLm9wY29kZSA9IFBEU19DT1JFX0NNRF9IT1NUX01FTSxcbiYjNDM7XHRcdC5ob3N0X21lbS5vcGVyID0gUERTX0NPUkVfSE9TVF9NRU1fREVMLFxuJiM0MztcdFx0Lmhvc3RfbWVtLnRhZyA9IGNwdV90b19sZTE2KHRhZyksXG4mIzQzO1x0XHQuaG9zdF9tZW0ucmVhc29uID0gcmVhc29uLFxuJiM0MztcdH07XG4mIzQzO1xuJiM0MztcdGRldl9kYmcocGRzYy1cdTAwM2VkZXYsIFwmIzM0O1NlbmRpbmcgZGV2Y21kIGZvciBtZW0gZGVsIHRhZyAlZFxcblwmIzM0OywgdGFnKTtcbiYjNDM7XHRwZHNjX2RldmNtZChwZHNjLCBcdTAwMjZjbWQsIFx1MDAyNmNvbXAsIHBkc2MtXHUwMDNlZGV2Y21kX3RpbWVvdXQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHBkc2NfaG9zdF9tZW1fYWRkX29uZShzdHJ1Y3QgcGRzYyAqcGRzYywgaW50IGluZGV4KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHBkc2NfaG9zdF9tZW0gKmhtID0gXHUwMDI2cGRzYy1cdTAwM2Vob3N0X21lbV9yZXFzW2luZGV4XTtcbiYjNDM7XHR1bmlvbiBwZHNfY29yZV9kZXZfY29tcCBjb21wID0ge307XG4mIzQzO1x0dW5pb24gcGRzX2NvcmVfZGV2X2NtZCBjbWQgPSB7fTtcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHRjbWQuaG9zdF9tZW0ub3Bjb2RlID0gUERTX0NPUkVfQ01EX0hPU1RfTUVNO1xuJiM0MztcdGNtZC5ob3N0X21lbS5vcGVyID0gUERTX0NPUkVfSE9TVF9NRU1fUVVFUlk7XG4mIzQzO1x0Y21kLmhvc3RfbWVtLmluZGV4ID0gY3B1X3RvX2xlMTYoaW5kZXgpO1xuJiM0MztcdGRldl9kYmcocGRzYy1cdTAwM2VkZXYsIFwmIzM0O1NlbmRpbmcgZGV2Y21kIGZvciBtZW0gcXVlcnkgaW5kZXggJWRcXG5cJiMzNDssIGluZGV4KTtcbiYjNDM7XHRlcnIgPSBwZHNjX2RldmNtZChwZHNjLCBcdTAwMjZjbWQsIFx1MDAyNmNvbXAsIHBkc2MtXHUwMDNlZGV2Y21kX3RpbWVvdXQpO1xuJiM0MztcdGlmIChlcnIgfHwgY29tcC5zdGF0dXMgIT0gUERTX1JDX1NVQ0NFU1MpIHtcbiYjNDM7XHRcdGRldl9lcnIocGRzYy1cdTAwM2VkZXYsIFwmIzM0O21lbSBxdWVyeSBmYWlsZWQgZXJyICVkIHN0YXR1cyAlZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ZXJyLCBjb21wLnN0YXR1cyk7XG4mIzQzO1x0XHRyZXR1cm4gZXJyID8gZXJyIDogLUVJTztcbiYjNDM7XHR9XG4mIzQzO1x0aG0tXHUwMDNlc2l6ZSA9IGxlMzJfdG9fY3B1KGNvbXAuaG9zdF9tZW0uc2l6ZSk7XG4mIzQzO1x0aG0tXHUwMDNldGFnID0gbGUxNl90b19jcHUoY29tcC5ob3N0X21lbS50YWcpO1xuJiM0MztcdGRldl9kYmcocGRzYy1cdTAwM2VkZXYsIFwmIzM0O21lbSBxdWVyeSByZXR1cm5lZCBzaXplICVkIHRhZyAlZFxcblwmIzM0OyxcbiYjNDM7XHRcdGhtLVx1MDAzZXNpemUsIGhtLVx1MDAzZXRhZyk7XG4mIzQzO1xuJiM0MztcdGlmICghaG0tXHUwMDNlc2l6ZSB8fCBobS1cdTAwM2VzaXplIFx1MDAzZSBQRFNDX0hPU1RfTUVNX01BWF9DT05USUcpIHtcbiYjNDM7XHRcdGRldl9lcnIocGRzYy1cdTAwM2VkZXYsIFwmIzM0O2ludmFsaWQgc2l6ZSAlZCBmb3IgdGFnICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRobS1cdTAwM2VzaXplLCBobS1cdTAwM2V0YWcpO1xuJiM0MztcdFx0ZXJyID0gLUVJTlZBTDtcbiYjNDM7XHRcdGdvdG8gZXJyX2RlbDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGhtLVx1MDAzZW9yZGVyID0gZ2V0X29yZGVyKGhtLVx1MDAzZXNpemUpO1xuJiM0MztcdGhtLVx1MDAzZXBnID0gYWxsb2NfcGFnZXMoR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8gfCBfX0dGUF9OT1dBUk4sIGhtLVx1MDAzZW9yZGVyKTtcbiYjNDM7XHRpZiAoIWhtLVx1MDAzZXBnKSB7XG4mIzQzO1x0XHRkZXZfd2FybihwZHNjLVx1MDAzZWRldiwgXCYjMzQ7YWxsb2Mgb3JkZXIgJWQgZmFpbGVkIGZvciB0YWcgJWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCBobS1cdTAwM2VvcmRlciwgaG0tXHUwMDNldGFnKTtcbiYjNDM7XHRcdGVyciA9IC1FTk9NRU07XG4mIzQzO1x0XHRnb3RvIGVycl9kZWw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRobS1cdTAwM2VwYSA9IGRtYV9tYXBfcGFnZShwZHNjLVx1MDAzZWRldiwgaG0tXHUwMDNlcGcsIDAsIGhtLVx1MDAzZXNpemUsXG4mIzQzO1x0XHRcdCAgICAgIERNQV9CSURJUkVDVElPTkFMKTtcbiYjNDM7XHRpZiAoZG1hX21hcHBpbmdfZXJyb3IocGRzYy1cdTAwM2VkZXYsIGhtLVx1MDAzZXBhKSkge1xuJiM0MztcdFx0ZGV2X2VycihwZHNjLVx1MDAzZWRldiwgXCYjMzQ7ZG1hIG1hcCBmYWlsZWQgZm9yIHRhZyAlZCBzaXplICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRobS1cdTAwM2V0YWcsIGhtLVx1MDAzZXNpemUpO1xuJiM0MztcdFx0X19mcmVlX3BhZ2VzKGhtLVx1MDAzZXBnLCBobS1cdTAwM2VvcmRlcik7XG4mIzQzO1x0XHRobS1cdTAwM2VwZyA9IE5VTEw7XG4mIzQzO1x0XHRlcnIgPSAtRUlPO1xuJiM0MztcdFx0Z290byBlcnJfZGVsO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogVHJhY2sgdGhpcyBhbGxvY2F0aW9uIHNvIHBkc2NfaG9zdF9tZW1fZnJlZSgpIGNhbiBjbGVhbiBpdCB1cCAqL1xuJiM0MztcdHBkc2MtXHUwMDNlbnVtX2hvc3RfbWVtX3JlcXMmIzQzOyYjNDM7O1xuJiM0MztcbiYjNDM7XHRtZW1zZXQoXHUwMDI2Y21kLCAwLCBzaXplb2YoY21kKSk7XG4mIzQzO1x0bWVtc2V0KFx1MDAyNmNvbXAsIDAsIHNpemVvZihjb21wKSk7XG4mIzQzO1x0Y21kLmhvc3RfbWVtLm9wY29kZSA9IFBEU19DT1JFX0NNRF9IT1NUX01FTTtcbiYjNDM7XHRjbWQuaG9zdF9tZW0ub3BlciA9IFBEU19DT1JFX0hPU1RfTUVNX0FERDtcbiYjNDM7XHRjbWQuaG9zdF9tZW0udGFnID0gY3B1X3RvX2xlMTYoaG0tXHUwMDNldGFnKTtcbiYjNDM7XHRjbWQuaG9zdF9tZW0uc2l6ZSA9IGNwdV90b19sZTMyKGhtLVx1MDAzZXNpemUpO1xuJiM0MztcdGNtZC5ob3N0X21lbS5idWZfcGEgPSBjcHVfdG9fbGU2NChobS1cdTAwM2VwYSk7XG4mIzQzO1xuJiM0MztcdGRldl9kYmcocGRzYy1cdTAwM2VkZXYsIFwmIzM0O1NlbmRpbmcgZGV2Y21kIGZvciBtZW0gYWRkIHRhZyAlZCBzaXplICVkIHBhICVwYWRcXG5cJiMzNDssXG4mIzQzO1x0XHRobS1cdTAwM2V0YWcsIGhtLVx1MDAzZXNpemUsIFx1MDAyNmhtLVx1MDAzZXBhKTtcbiYjNDM7XHRlcnIgPSBwZHNjX2RldmNtZChwZHNjLCBcdTAwMjZjbWQsIFx1MDAyNmNvbXAsIHBkc2MtXHUwMDNlZGV2Y21kX3RpbWVvdXQpO1xuJiM0MztcdGlmIChlcnIgfHwgY29tcC5zdGF0dXMgIT0gUERTX1JDX1NVQ0NFU1MpIHtcbiYjNDM7XHRcdGRldl9lcnIocGRzYy1cdTAwM2VkZXYsIFwmIzM0O21lbSBhZGQgZmFpbGVkIGVyciAlZCBzdGF0dXMgJWQgZm9yIHRhZyAlZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ZXJyLCBjb21wLnN0YXR1cywgaG0tXHUwMDNldGFnKTtcbiYjNDM7XHRcdGVyciA9IGVyciA/IGVyciA6IC1FSU87XG4mIzQzO1x0XHRnb3RvIGVycl9kZWw7XG4mIzQzO1x0fVxuJiM0MztcdGRldl9kYmcocGRzYy1cdTAwM2VkZXYsIFwmIzM0O21lbSBhZGQgY29tcGxldGVkIGZvciB0YWcgJWRcXG5cJiMzNDssIGhtLVx1MDAzZXRhZyk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7ZXJyX2RlbDpcbiYjNDM7XHQvKiBBZnRlciBNRU1fUVVFUlkgc3VjY2VlZHMsIGZpcm13YXJlIGV4cGVjdHMgTUVNX0FERCBvciBNRU1fREVMICovXG4mIzQzO1x0cGRzY19ob3N0X21lbV9kZWxfb25lKHBkc2MsIGhtLVx1MDAzZXRhZywgUERTX1JDX0VOT01FTSk7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCBwZHNjX2hvc3RfbWVtX2FkZChzdHJ1Y3QgcGRzYyAqcGRzYylcbiYjNDM7e1xuJiM0MztcdHVuaW9uIHBkc19jb3JlX2Rldl9jb21wIGNvbXAgPSB7fTtcbiYjNDM7XHR1bmlvbiBwZHNfY29yZV9kZXZfY21kIGNtZCA9IHt9O1xuJiM0MztcdHUxNiBjb3VudDtcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHRpZiAoIShwZHNjLVx1MDAzZWRldl9pZGVudC5jYXBhYmlsaXRpZXMgXHUwMDI2XG4mIzQzO1x0ICAgICBjcHVfdG9fbGU2NChQRFNfQ09SRV9ERVZfQ0FQX0hPU1RfTUVNKSkpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGNtZC5ob3N0X21lbS5vcGNvZGUgPSBQRFNfQ09SRV9DTURfSE9TVF9NRU07XG4mIzQzO1x0Y21kLmhvc3RfbWVtLm9wZXIgPSBQRFNfQ09SRV9IT1NUX01FTV9HRVRfQ09VTlQ7XG4mIzQzO1x0Y21kLmhvc3RfbWVtLmluZGV4ID0gY3B1X3RvX2xlMTYoUERTQ19IT1NUX01FTV9NQVhfQ09VTlQpO1xuJiM0MztcdGNtZC5ob3N0X21lbS5tYXhfY29udGlnID0gY3B1X3RvX2xlMzIoUERTQ19IT1NUX01FTV9NQVhfQ09OVElHKTtcbiYjNDM7XHRkZXZfZGJnKHBkc2MtXHUwMDNlZGV2LCBcJiMzNDtTZW5kaW5nIGRldmNtZCBmb3IgbWVtIGdldCBjb3VudCBtYXhfY29udGlnICV1XFxuXCYjMzQ7LFxuJiM0MztcdFx0UERTQ19IT1NUX01FTV9NQVhfQ09OVElHKTtcbiYjNDM7XHRlcnIgPSBwZHNjX2RldmNtZChwZHNjLCBcdTAwMjZjbWQsIFx1MDAyNmNvbXAsIHBkc2MtXHUwMDNlZGV2Y21kX3RpbWVvdXQpO1xuJiM0MztcdGlmIChlcnIgfHwgY29tcC5zdGF0dXMgIT0gUERTX1JDX1NVQ0NFU1MpIHtcbiYjNDM7XHRcdGRldl9lcnIocGRzYy1cdTAwM2VkZXYsIFwmIzM0O21lbSBnZXQgY291bnQgZmFpbGVkIGVyciAlZCBzdGF0dXMgJWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdGVyciwgY29tcC5zdGF0dXMpO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Y291bnQgPSBtaW4obGUxNl90b19jcHUoY29tcC5ob3N0X21lbS5jb3VudCksXG4mIzQzO1x0XHQgICAgUERTQ19IT1NUX01FTV9NQVhfQ09VTlQpO1xuJiM0MztcdGRldl9kYmcocGRzYy1cdTAwM2VkZXYsIFwmIzM0O21lbSBnZXQgY291bnQgcmV0dXJuZWQgY291bnQgJWRcXG5cJiMzNDssIGNvdW50KTtcbiYjNDM7XHRpZiAoY291bnQgPT0gMClcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0cGRzYy1cdTAwM2Vob3N0X21lbV9yZXFzID0ga3phbGxvY19vYmpzKCpwZHNjLVx1MDAzZWhvc3RfbWVtX3JlcXMsIGNvdW50LFxuJiM0MztcdFx0XHRcdFx0ICAgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCFwZHNjLVx1MDAzZWhvc3RfbWVtX3JlcXMpIHtcbiYjNDM7XHRcdGRldl9lcnIocGRzYy1cdTAwM2VkZXYsIFwmIzM0O2ZhaWxlZCB0byBhbGxvYyBob3N0X21lbV9yZXFzIGFycmF5XFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNvdW50OyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0ZXJyID0gcGRzY19ob3N0X21lbV9hZGRfb25lKHBkc2MsIGkpO1xuJiM0MztcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIHBkc2NfaG9zdF9tZW1fZnJlZShzdHJ1Y3QgcGRzYyAqcGRzYylcbiYjNDM7e1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHRpZiAoIXBkc2MtXHUwMDNlaG9zdF9tZW1fcmVxcylcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgcGRzYy1cdTAwM2VudW1faG9zdF9tZW1fcmVxczsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGRtYV91bm1hcF9wYWdlKHBkc2MtXHUwMDNlZGV2LCBwZHNjLVx1MDAzZWhvc3RfbWVtX3JlcXNbaV0ucGEsXG4mIzQzO1x0XHRcdCAgICAgICBwZHNjLVx1MDAzZWhvc3RfbWVtX3JlcXNbaV0uc2l6ZSxcbiYjNDM7XHRcdFx0ICAgICAgIERNQV9CSURJUkVDVElPTkFMKTtcbiYjNDM7XHRcdF9fZnJlZV9wYWdlcyhwZHNjLVx1MDAzZWhvc3RfbWVtX3JlcXNbaV0ucGcsXG4mIzQzO1x0XHRcdCAgICAgcGRzYy1cdTAwM2Vob3N0X21lbV9yZXFzW2ldLm9yZGVyKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGtmcmVlKHBkc2MtXHUwMDNlaG9zdF9tZW1fcmVxcyk7XG4mIzQzO1x0cGRzYy1cdTAwM2Vob3N0X21lbV9yZXFzID0gTlVMTDtcbiYjNDM7XHRwZHNjLVx1MDAzZW51bV9ob3N0X21lbV9yZXFzID0gMDtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9jb3JlLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvY29yZS5oXG5pbmRleCBiN2ZlOWFkNzMzNDk4Li43OTE3NTZhNTA4NzBlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL2NvcmUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL2NvcmUuaFxuQEAgLTUsNiAmIzQzOzUsNyBAQFxuICNkZWZpbmUgX1BEU0NfSF9cbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kZWJ1Z2ZzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbW16b25lLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvZGV2bGluay5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGRzL3Bkc19jb21tb24uaFx1MDAzZVxuQEAgLTIzLDYgJiM0MzsyNCwyMCBAQFxuICNkZWZpbmUgUERTQ19TRVRVUF9SRUNPVkVSWVx0ZmFsc2VcbiAjZGVmaW5lIFBEU0NfU0VUVVBfSU5JVFx0XHR0cnVlXG4gXG4mIzQzOy8qIFVzZSBmaXhlZCA0TUIgaW5zdGVhZCBvZiBQQUdFX1NJWkUgXHUwMDNjXHUwMDNjIE1BWF9QQUdFX09SREVSIHRvIGF2b2lkXG4mIzQzOyAqIGNwdV90b19sZTMyKCkgdHJ1bmNhdGlvbiBvbiBsYXJnZS1wYWdlIGNvbmZpZ3NcbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgUERTQ19IT1NUX01FTV9NQVhfQ09OVElHICg0ICogMTAyNCAqIDEwMjQpXG4mIzQzOyNkZWZpbmUgUERTQ19IT1NUX01FTV9NQVhfQ09VTlQgIDI1NlxuJiM0MztcbiYjNDM7c3RydWN0IHBkc2NfZGVmZXJyZWRfZG1hIHtcbiYjNDM7XHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XG4mIzQzO1x0ZG1hX2FkZHJfdCBkbWFfYWRkcjtcbiYjNDM7XHR2b2lkICp2YTtcbiYjNDM7XHRzaXplX3Qgc2l6ZTtcbiYjNDM7XHRlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXI7XG4mIzQzO307XG4mIzQzO1xuIHN0cnVjdCBwZHNjX2Rldl9iYXIge1xuIFx0dm9pZCBfX2lvbWVtICp2YWRkcjtcbiBcdHBoeXNfYWRkcl90IGJ1c19hZGRyO1xuQEAgLTE0MSw2ICYjNDM7MTU2LDE0IEBAIHN0cnVjdCBwZHNjX3ZpZnR5cGUge1xuIFx0c3RydWN0IHBkc19hdXhpbGlhcnlfZGV2ICpwYWRldjtcbiB9O1xuIFxuJiM0MztzdHJ1Y3QgcGRzY19ob3N0X21lbSB7XG4mIzQzO1x0dTMyIHNpemU7XG4mIzQzO1x0dTE2IHRhZztcbiYjNDM7XHR1OCBvcmRlcjtcbiYjNDM7XHRzdHJ1Y3QgcGFnZSAqcGc7XG4mIzQzO1x0ZG1hX2FkZHJfdCBwYTtcbiYjNDM7fTtcbiYjNDM7XG4gLyogTm8gc3RhdGUgZmxhZ3Mgc2V0IG1lYW5zIHdlIGFyZSBpbiBhIHN0ZWFkeSBydW5uaW5nIHN0YXRlICovXG4gZW51bSBwZHNjX3N0YXRlX2ZsYWdzIHtcbiBcdFBEU0NfU19GV19ERUFELFx0XHQgICAgLyogc3RvcHBlZCwgd2FpdCBvbiBzdGFydHVwIG9yIHJlY292ZXJ5ICovXG5AQCAtMTg1LDYgJiM0MzsyMDgsOCBAQCBzdHJ1Y3QgcGRzYyB7XG4gXHRzdHJ1Y3QgbXV0ZXggZGV2Y21kX2xvY2s7XHQvKiBsb2NrIGZvciBkZXZfY21kIG9wZXJhdGlvbnMgKi9cbiBcdHN0cnVjdCBtdXRleCBjb25maWdfbG9jaztcdC8qIGxvY2sgZm9yIGNvbmZpZ3VyYXRpb24gb3BlcmF0aW9ucyAqL1xuIFx0c3BpbmxvY2tfdCBhZG1pbnFfbG9jaztcdFx0LyogbG9jayBmb3IgYWRtaW5xIG9wZXJhdGlvbnMgKi9cbiYjNDM7XHRzdHJ1Y3QgbGlzdF9oZWFkIGRlZmVycmVkX2RtYV9saXN0O1xuJiM0MztcdHNwaW5sb2NrX3QgZGVmZXJyZWRfZG1hX2xvY2s7XHQvKiBsb2NrIGZvciBkZWZlcnJlZCBETUEgbGlzdCAqL1xuIFx0cmVmY291bnRfdCBhZG1pbnFfcmVmY250O1xuIFx0c3RydWN0IHBkc19jb3JlX2Rldl9pbmZvX3JlZ3MgX19pb21lbSAqaW5mb19yZWdzO1xuIFx0c3RydWN0IHBkc19jb3JlX2Rldl9jbWRfcmVncyBfX2lvbWVtICpjbWRfcmVncztcbkBAIC0xOTksNiAmIzQzOzIyNCwxMSBAQCBzdHJ1Y3QgcGRzYyB7XG4gXHR1NjQgbGFzdF9laWQ7XG4gXHRzdHJ1Y3QgcGRzY192aWZ0eXBlICp2aWZ0eXBlX3N0YXR1cztcbiBcdHN0cnVjdCB3b3JrX3N0cnVjdCBwY2lfcmVzZXRfd29yaztcbiYjNDM7XG4mIzQzO1x0c3RydWN0IHBkc2NfaG9zdF9tZW0gKmhvc3RfbWVtX3JlcXM7XG4mIzQzO1x0dTE2IG51bV9ob3N0X21lbV9yZXFzO1xuJiM0MztcbiYjNDM7XHRzdHJ1Y3QgcGRzX2NvcmVfY29tcG9uZW50X2xpc3RfaW5mbyBmd19jb21wb25lbnRzO1xuIH07XG4gXG4gLyoqIGVudW0gcGRzX2NvcmVfZGJlbGxfYml0cyAtIGJpdHdpc2UgY29tcG9zaXRpb24gb2YgZGJlbGwgdmFsdWVzLlxuQEAgLTI3NSwxNCAmIzQzOzMwNSwyNCBAQCB2b2lkIHBkc2NfZGVidWdmc19hZGRfdmlmdHlwZShzdHJ1Y3QgcGRzYyAqcGRzYyk7XG4gdm9pZCBwZHNjX2RlYnVnZnNfYWRkX2lycXMoc3RydWN0IHBkc2MgKnBkc2MpO1xuIHZvaWQgcGRzY19kZWJ1Z2ZzX2FkZF9xY3Eoc3RydWN0IHBkc2MgKnBkc2MsIHN0cnVjdCBwZHNjX3FjcSAqcWNxKTtcbiB2b2lkIHBkc2NfZGVidWdmc19kZWxfcWNxKHN0cnVjdCBwZHNjX3FjcSAqcWNxKTtcbiYjNDM7dm9pZCBwZHNjX2RlYnVnZnNfYWRkX2hvc3RfbWVtKHN0cnVjdCBwZHNjICpwZHNjKTtcbiYjNDM7dm9pZCBwZHNjX2RlYnVnZnNfZGVsX2hvc3RfbWVtKHN0cnVjdCBwZHNjICpwZHNjKTtcbiBcbiBpbnQgcGRzY19lcnJfdG9fZXJybm8oZW51bSBwZHNfY29yZV9zdGF0dXNfY29kZSBjb2RlKTtcbiBib29sIHBkc2NfaXNfZndfcnVubmluZyhzdHJ1Y3QgcGRzYyAqcGRzYyk7XG4gYm9vbCBwZHNjX2lzX2Z3X2dvb2Qoc3RydWN0IHBkc2MgKnBkc2MpO1xuIGludCBwZHNjX2RldmNtZChzdHJ1Y3QgcGRzYyAqcGRzYywgdW5pb24gcGRzX2NvcmVfZGV2X2NtZCAqY21kLFxuIFx0XHR1bmlvbiBwZHNfY29yZV9kZXZfY29tcCAqY29tcCwgaW50IG1heF9zZWNvbmRzKTtcbiYjNDM7aW50IHBkc2NfZGV2Y21kX3dpdGhfZGF0YShzdHJ1Y3QgcGRzYyAqcGRzYywgdW5pb24gcGRzX2NvcmVfZGV2X2NtZCAqY21kLFxuJiM0MztcdFx0XHQgIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBkYXRhX2xlbixcbiYjNDM7XHRcdFx0ICB1bmlvbiBwZHNfY29yZV9kZXZfY29tcCAqY29tcCwgaW50IG1heF9zZWNvbmRzKTtcbiYjNDM7aW50IHBkc2NfZGV2Y21kX3dpdGhfZGF0YV9ub21zZyhzdHJ1Y3QgcGRzYyAqcGRzYywgdW5pb24gcGRzX2NvcmVfZGV2X2NtZCAqY21kLFxuJiM0MztcdFx0XHRcdGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBkYXRhX2xlbixcbiYjNDM7XHRcdFx0XHR1bmlvbiBwZHNfY29yZV9kZXZfY29tcCAqY29tcCwgaW50IG1heF9zZWNvbmRzKTtcbiBpbnQgcGRzY19kZXZjbWRfbG9ja2VkKHN0cnVjdCBwZHNjICpwZHNjLCB1bmlvbiBwZHNfY29yZV9kZXZfY21kICpjbWQsXG4gXHRcdCAgICAgICB1bmlvbiBwZHNfY29yZV9kZXZfY29tcCAqY29tcCwgaW50IG1heF9zZWNvbmRzKTtcbiYjNDM7aW50IHBkc2NfZGV2Y21kX2xvY2tlZF9ub21zZyhzdHJ1Y3QgcGRzYyAqcGRzYywgdW5pb24gcGRzX2NvcmVfZGV2X2NtZCAqY21kLFxuJiM0MztcdFx0XHQgICAgIHVuaW9uIHBkc19jb3JlX2Rldl9jb21wICpjb21wLCBpbnQgbWF4X3NlY29uZHMpO1xuIGludCBwZHNjX2RldmNtZF9pbml0KHN0cnVjdCBwZHNjICpwZHNjKTtcbiBpbnQgcGRzY19kZXZjbWRfcmVzZXQoc3RydWN0IHBkc2MgKnBkc2MpO1xuIGludCBwZHNjX2Rldl9pbml0KHN0cnVjdCBwZHNjICpwZHNjKTtcbkBAIC0zMTUsMTEgJiM0MzszNTUsMjMgQEAgdm9pZCBwZHNjX3Byb2Nlc3NfYWRtaW5xKHN0cnVjdCBwZHNjX3FjcSAqcWNxKTtcbiB2b2lkIHBkc2Nfd29ya190aHJlYWQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcbiBpcnFyZXR1cm5fdCBwZHNjX2FkbWlucV9pc3IoaW50IGlycSwgdm9pZCAqZGF0YSk7XG4gXG4taW50IHBkc2NfZmlybXdhcmVfdXBkYXRlKHN0cnVjdCBwZHNjICpwZHNjLCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3LFxuJiM0MztpbnQgcGRzY19maXJtd2FyZV91cGRhdGUoc3RydWN0IHBkc2MgKnBkc2MsXG4mIzQzO1x0XHRcdCBzdHJ1Y3QgZGV2bGlua19mbGFzaF91cGRhdGVfcGFyYW1zICpwYXJhbXMsXG4gXHRcdFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG4mIzQzO2ludCBwZHNjX2dldF9jb21wb25lbnRfaW5mbyhzdHJ1Y3QgcGRzYyAqcGRzYyk7XG4mIzQzO2NvbnN0IGNoYXIgKnBkc2NfZndfdHlwZV90b19uYW1lKHU4IHR5cGUpO1xuJiM0Mzt2b2lkIHBkc2NfZndfY29tcG9uZW50c19pbnZhbGlkYXRlKHN0cnVjdCBwZHNjICpwZHNjKTtcbiBcbiB2b2lkIHBkc2NfZndfZG93bihzdHJ1Y3QgcGRzYyAqcGRzYyk7XG4gdm9pZCBwZHNjX2Z3X3VwKHN0cnVjdCBwZHNjICpwZHNjKTtcbiB2b2lkIHBkc2NfcGNpX3Jlc2V0X3RocmVhZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xuIFxuJiM0Mzt2b2lkIHBkc2NfaG9zdF9tZW1fYWRkKHN0cnVjdCBwZHNjICpwZHNjKTtcbiYjNDM7dm9pZCBwZHNjX2hvc3RfbWVtX2ZyZWUoc3RydWN0IHBkc2MgKnBkc2MpO1xuJiM0MztcbiYjNDM7dm9pZCBwZHNjX2RlZmVycmVkX2RtYV9hZGQoc3RydWN0IHBkc2MgKnBkc2MsIHN0cnVjdCBwZHNjX2RlZmVycmVkX2RtYSAqZW50cnksXG4mIzQzO1x0XHRcdCAgIGRtYV9hZGRyX3QgZG1hX2FkZHIsIHZvaWQgKnZhLCBzaXplX3Qgc2l6ZSxcbiYjNDM7XHRcdFx0ICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKTtcbiYjNDM7dm9pZCBwZHNjX2RlZmVycmVkX2RtYV9mcmVlKHN0cnVjdCBwZHNjICpwZHNjKTtcbiYjNDM7XG4gI2VuZGlmIC8qIF9QRFNDX0hfICovXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL2RlYnVnZnMuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9kZWJ1Z2ZzLmNcbmluZGV4IDgxMGEwY2Q5YmNhYzguLmVmMGExYjdkMTU5YjUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvZGVidWdmcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvZGVidWdmcy5jXG5AQCAtMTc4LDMgJiM0MzsxNzgsNDggQEAgdm9pZCBwZHNjX2RlYnVnZnNfZGVsX3FjcShzdHJ1Y3QgcGRzY19xY3EgKnFjcSlcbiBcdGRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZShxY3EtXHUwMDNlZGVudHJ5KTtcbiBcdHFjcS1cdTAwM2VkZW50cnkgPSBOVUxMO1xuIH1cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgaG9zdF9tZW1fc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwZHNjICpwZHNjID0gc2VxLVx1MDAzZXByaXZhdGU7XG4mIzQzO1x0c3RydWN0IHBkc2NfaG9zdF9tZW0gKmhtO1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHRpZiAoIXBkc2MtXHUwMDNlaG9zdF9tZW1fcmVxcyB8fCBwZHNjLVx1MDAzZW51bV9ob3N0X21lbV9yZXFzID09IDApIHtcbiYjNDM7XHRcdHNlcV9wdXRzKHNlcSwgXCYjMzQ7Tm8gaG9zdCBtZW1vcnkgYWxsb2NhdGVkXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0c2VxX3ByaW50ZihzZXEsIFwmIzM0O0hvc3QgbWVtb3J5IHJlcXVlc3RzOiAldVxcblxcblwmIzM0OyxcbiYjNDM7XHRcdCAgIHBkc2MtXHUwMDNlbnVtX2hvc3RfbWVtX3JlcXMpO1xuJiM0MztcdHNlcV9wdXRzKHNlcSwgXCYjMzQ7VGFnICAgIFNpemUgICAgICAgICBPcmRlciAgUEFcXG5cJiMzNDspO1xuJiM0MztcdHNlcV9wdXRzKHNlcSwgXCYjMzQ7LS0tICAgIC0tLS0gICAgICAgICAtLS0tLSAgLS1cXG5cJiMzNDspO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBwZHNjLVx1MDAzZW51bV9ob3N0X21lbV9yZXFzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aG0gPSBcdTAwMjZwZHNjLVx1MDAzZWhvc3RfbWVtX3JlcXNbaV07XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFobS1cdTAwM2VwZylcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0c2VxX3ByaW50ZihzZXEsIFwmIzM0OyUtNnUgJS0xMnUgJS02dSAlcGFkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgICBobS1cdTAwM2V0YWcsIGhtLVx1MDAzZXNpemUsIGhtLVx1MDAzZW9yZGVyLCBcdTAwMjZobS1cdTAwM2VwYSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztERUZJTkVfU0hPV19BVFRSSUJVVEUoaG9zdF9tZW0pO1xuJiM0MztcbiYjNDM7dm9pZCBwZHNjX2RlYnVnZnNfYWRkX2hvc3RfbWVtKHN0cnVjdCBwZHNjICpwZHNjKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCEocGRzYy1cdTAwM2VkZXZfaWRlbnQuY2FwYWJpbGl0aWVzIFx1MDAyNlxuJiM0MztcdCAgICAgY3B1X3RvX2xlNjQoUERTX0NPUkVfREVWX0NBUF9IT1NUX01FTSkpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFwmIzM0O2hvc3RfbWVtXCYjMzQ7LCAwNDAwLCBwZHNjLVx1MDAzZWRlbnRyeSxcbiYjNDM7XHRcdFx0ICAgIHBkc2MsIFx1MDAyNmhvc3RfbWVtX2ZvcHMpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIHBkc2NfZGVidWdmc19kZWxfaG9zdF9tZW0oc3RydWN0IHBkc2MgKnBkc2MpXG4mIzQzO3tcbiYjNDM7XHRkZWJ1Z2ZzX2xvb2t1cF9hbmRfcmVtb3ZlKFwmIzM0O2hvc3RfbWVtXCYjMzQ7LCBwZHNjLVx1MDAzZWRlbnRyeSk7XG4mIzQzO31cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvZGV2LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvZGV2LmNcbmluZGV4IGJkZWQ2YjMzMjg5Y2UuLmM1MDc3ODE3NWUyZjMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvZGV2LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9kZXYuY1xuQEAgLTEyNiw3ICYjNDM7MTI2LDggQEAgc3RhdGljIGNvbnN0IGNoYXIgKnBkc2NfZGV2Y21kX3N0cihpbnQgb3Bjb2RlKVxuIFx0fVxuIH1cbiBcbi1zdGF0aWMgaW50IHBkc2NfZGV2Y21kX3dhaXQoc3RydWN0IHBkc2MgKnBkc2MsIHU4IG9wY29kZSwgaW50IG1heF9zZWNvbmRzKVxuJiM0MztzdGF0aWMgaW50IF9fcGRzY19kZXZjbWRfd2FpdChzdHJ1Y3QgcGRzYyAqcGRzYywgdTggb3Bjb2RlLCBpbnQgbWF4X3NlY29uZHMsXG4mIzQzO1x0XHRcdCAgICAgIGNvbnN0IGJvb2wgZG9fbXNnKVxuIHtcbiBcdHN0cnVjdCBkZXZpY2UgKmRldiA9IHBkc2MtXHUwMDNlZGV2O1xuIFx0dW5zaWduZWQgbG9uZyBzdGFydF90aW1lO1xuQEAgLTE3OSw3ICYjNDM7MTgwLDcgQEAgc3RhdGljIGludCBwZHNjX2RldmNtZF93YWl0KHN0cnVjdCBwZHNjICpwZHNjLCB1OCBvcGNvZGUsIGludCBtYXhfc2Vjb25kcylcbiBcbiBcdHN0YXR1cyA9IHBkc2NfZGV2Y21kX3N0YXR1cyhwZHNjKTtcbiBcdGVyciA9IHBkc2NfZXJyX3RvX2Vycm5vKHN0YXR1cyk7XG4tXHRpZiAoZXJyIFx1MDAyNlx1MDAyNiBlcnIgIT0gLUVBR0FJTilcbiYjNDM7XHRpZiAoZG9fbXNnIFx1MDAyNlx1MDAyNiBlcnIgXHUwMDI2XHUwMDI2IGVyciAhPSAtRUFHQUlOKVxuIFx0XHRkZXZfZXJyKGRldiwgXCYjMzQ7REVWQ01EICVkICVzIGZhaWxlZCwgc3RhdHVzPSVkIGVyciAlZCAlcGVcXG5cJiMzNDssXG4gXHRcdFx0b3Bjb2RlLCBwZHNjX2RldmNtZF9zdHIob3Bjb2RlKSwgc3RhdHVzLCBlcnIsXG4gXHRcdFx0RVJSX1BUUihlcnIpKTtcbkBAIC0xODcsOCAmIzQzOzE4OCw5IEBAIHN0YXRpYyBpbnQgcGRzY19kZXZjbWRfd2FpdChzdHJ1Y3QgcGRzYyAqcGRzYywgdTggb3Bjb2RlLCBpbnQgbWF4X3NlY29uZHMpXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbi1pbnQgcGRzY19kZXZjbWRfbG9ja2VkKHN0cnVjdCBwZHNjICpwZHNjLCB1bmlvbiBwZHNfY29yZV9kZXZfY21kICpjbWQsXG4tXHRcdCAgICAgICB1bmlvbiBwZHNfY29yZV9kZXZfY29tcCAqY29tcCwgaW50IG1heF9zZWNvbmRzKVxuJiM0MztzdGF0aWMgaW50IF9fcGRzY19kZXZjbWRfbG9ja2VkKHN0cnVjdCBwZHNjICpwZHNjLCB1bmlvbiBwZHNfY29yZV9kZXZfY21kICpjbWQsXG4mIzQzO1x0XHRcdFx0dW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgKmNvbXAsIGludCBtYXhfc2Vjb25kcyxcbiYjNDM7XHRcdFx0XHRjb25zdCBib29sIGRvX21zZylcbiB7XG4gXHRpbnQgZXJyO1xuIFxuQEAgLTE5NywxNiAmIzQzOzE5OSw2MyBAQCBpbnQgcGRzY19kZXZjbWRfbG9ja2VkKHN0cnVjdCBwZHNjICpwZHNjLCB1bmlvbiBwZHNfY29yZV9kZXZfY21kICpjbWQsXG4gXG4gXHRtZW1jcHlfdG9pbyhcdTAwMjZwZHNjLVx1MDAzZWNtZF9yZWdzLVx1MDAzZWNtZCwgY21kLCBzaXplb2YoKmNtZCkpO1xuIFx0cGRzY19kZXZjbWRfZGJlbGwocGRzYyk7XG4tXHRlcnIgPSBwZHNjX2RldmNtZF93YWl0KHBkc2MsIGNtZC1cdTAwM2VvcGNvZGUsIG1heF9zZWNvbmRzKTtcbiYjNDM7XHRlcnIgPSBfX3Bkc2NfZGV2Y21kX3dhaXQocGRzYywgY21kLVx1MDAzZW9wY29kZSwgbWF4X3NlY29uZHMsIGRvX21zZyk7XG4gXG4gXHRpZiAoKGVyciA9PSAtRU5YSU8gfHwgZXJyID09IC1FVElNRURPVVQpIFx1MDAyNlx1MDAyNiBwZHNjLVx1MDAzZXdxKVxuIFx0XHRxdWV1ZV93b3JrKHBkc2MtXHUwMDNld3EsIFx1MDAyNnBkc2MtXHUwMDNlaGVhbHRoX3dvcmspO1xuIFx0ZWxzZVxuIFx0XHRtZW1jcHlfZnJvbWlvKGNvbXAsIFx1MDAyNnBkc2MtXHUwMDNlY21kX3JlZ3MtXHUwMDNlY29tcCwgc2l6ZW9mKCpjb21wKSk7XG4gXG4mIzQzO1x0aWYgKGVyciAhPSAtRVRJTUVET1VUIFx1MDAyNlx1MDAyNiBlcnIgIT0gLUVBR0FJTilcbiYjNDM7XHRcdHBkc2NfZGVmZXJyZWRfZG1hX2ZyZWUocGRzYyk7XG4mIzQzO1xuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4mIzQzO3ZvaWQgcGRzY19kZWZlcnJlZF9kbWFfYWRkKHN0cnVjdCBwZHNjICpwZHNjLCBzdHJ1Y3QgcGRzY19kZWZlcnJlZF9kbWEgKmVudHJ5LFxuJiM0MztcdFx0XHQgICBkbWFfYWRkcl90IGRtYV9hZGRyLCB2b2lkICp2YSwgc2l6ZV90IHNpemUsXG4mIzQzO1x0XHRcdCAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcilcbiYjNDM7e1xuJiM0MztcdGVudHJ5LVx1MDAzZWRtYV9hZGRyID0gZG1hX2FkZHI7XG4mIzQzO1x0ZW50cnktXHUwMDNldmEgPSB2YTtcbiYjNDM7XHRlbnRyeS1cdTAwM2VzaXplID0gc2l6ZTtcbiYjNDM7XHRlbnRyeS1cdTAwM2VkaXIgPSBkaXI7XG4mIzQzO1xuJiM0MztcdHNwaW5fbG9jayhcdTAwMjZwZHNjLVx1MDAzZWRlZmVycmVkX2RtYV9sb2NrKTtcbiYjNDM7XHRsaXN0X2FkZF90YWlsKFx1MDAyNmVudHJ5LVx1MDAzZWxpc3QsIFx1MDAyNnBkc2MtXHUwMDNlZGVmZXJyZWRfZG1hX2xpc3QpO1xuJiM0MztcdHNwaW5fdW5sb2NrKFx1MDAyNnBkc2MtXHUwMDNlZGVmZXJyZWRfZG1hX2xvY2spO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIHBkc2NfZGVmZXJyZWRfZG1hX2ZyZWUoc3RydWN0IHBkc2MgKnBkc2MpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcGRzY19kZWZlcnJlZF9kbWEgKmVudHJ5LCAqdG1wO1xuJiM0MztcdExJU1RfSEVBRChsb2NhbF9saXN0KTtcbiYjNDM7XG4mIzQzO1x0c3Bpbl9sb2NrKFx1MDAyNnBkc2MtXHUwMDNlZGVmZXJyZWRfZG1hX2xvY2spO1xuJiM0MztcdGxpc3Rfc3BsaWNlX2luaXQoXHUwMDI2cGRzYy1cdTAwM2VkZWZlcnJlZF9kbWFfbGlzdCwgXHUwMDI2bG9jYWxfbGlzdCk7XG4mIzQzO1x0c3Bpbl91bmxvY2soXHUwMDI2cGRzYy1cdTAwM2VkZWZlcnJlZF9kbWFfbG9jayk7XG4mIzQzO1xuJiM0MztcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShlbnRyeSwgdG1wLCBcdTAwMjZsb2NhbF9saXN0LCBsaXN0KSB7XG4mIzQzO1x0XHRkbWFfdW5tYXBfc2luZ2xlKHBkc2MtXHUwMDNlZGV2LCBlbnRyeS1cdTAwM2VkbWFfYWRkcixcbiYjNDM7XHRcdFx0XHQgZW50cnktXHUwMDNlc2l6ZSwgZW50cnktXHUwMDNlZGlyKTtcbiYjNDM7XHRcdGtmcmVlKGVudHJ5LVx1MDAzZXZhKTtcbiYjNDM7XHRcdGxpc3RfZGVsKFx1MDAyNmVudHJ5LVx1MDAzZWxpc3QpO1xuJiM0MztcdFx0a2ZyZWUoZW50cnkpO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IHBkc2NfZGV2Y21kX2xvY2tlZChzdHJ1Y3QgcGRzYyAqcGRzYywgdW5pb24gcGRzX2NvcmVfZGV2X2NtZCAqY21kLFxuJiM0MztcdFx0ICAgICAgIHVuaW9uIHBkc19jb3JlX2Rldl9jb21wICpjb21wLCBpbnQgbWF4X3NlY29uZHMpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gX19wZHNjX2RldmNtZF9sb2NrZWQocGRzYywgY21kLCBjb21wLCBtYXhfc2Vjb25kcywgdHJ1ZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBwZHNjX2RldmNtZF9sb2NrZWRfbm9tc2coc3RydWN0IHBkc2MgKnBkc2MsIHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgKmNtZCxcbiYjNDM7XHRcdFx0ICAgICB1bmlvbiBwZHNfY29yZV9kZXZfY29tcCAqY29tcCwgaW50IG1heF9zZWNvbmRzKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIF9fcGRzY19kZXZjbWRfbG9ja2VkKHBkc2MsIGNtZCwgY29tcCwgbWF4X3NlY29uZHMsIGZhbHNlKTtcbiYjNDM7fVxuJiM0MztcbiBpbnQgcGRzY19kZXZjbWQoc3RydWN0IHBkc2MgKnBkc2MsIHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgKmNtZCxcbiBcdFx0dW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgKmNvbXAsIGludCBtYXhfc2Vjb25kcylcbiB7XG5AQCAtMjE5LDYgJiM0MzsyNjgsNDcgQEAgaW50IHBkc2NfZGV2Y21kKHN0cnVjdCBwZHNjICpwZHNjLCB1bmlvbiBwZHNfY29yZV9kZXZfY21kICpjbWQsXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBfX3Bkc2NfZGV2Y21kX3dpdGhfZGF0YShzdHJ1Y3QgcGRzYyAqcGRzYyxcbiYjNDM7XHRcdFx0XHQgICB1bmlvbiBwZHNfY29yZV9kZXZfY21kICpjbWQsXG4mIzQzO1x0XHRcdFx0ICAgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGRhdGFfbGVuLFxuJiM0MztcdFx0XHRcdCAgIHVuaW9uIHBkc19jb3JlX2Rldl9jb21wICpjb21wLFxuJiM0MztcdFx0XHRcdCAgIGludCBtYXhfc2Vjb25kcywgYm9vbCBkb19tc2cpXG4mIzQzO3tcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNnBkc2MtXHUwMDNlZGV2Y21kX2xvY2spO1xuJiM0MztcdGlmICghcGRzYy1cdTAwM2VjbWRfcmVncykge1xuJiM0MztcdFx0ZXJyID0gLUVOWElPO1xuJiM0MztcdFx0Z290byB1bmxvY2s7XG4mIzQzO1x0fVxuJiM0MztcdGlmIChkYXRhX2xlbiBcdTAwM2Ugc2l6ZW9mKHBkc2MtXHUwMDNlY21kX3JlZ3MtXHUwMDNlZGF0YSkpIHtcbiYjNDM7XHRcdGVyciA9IC1FTk9TUEM7XG4mIzQzO1x0XHRnb3RvIHVubG9jaztcbiYjNDM7XHR9XG4mIzQzO1x0bWVtY3B5X3RvaW8oXHUwMDI2cGRzYy1cdTAwM2VjbWRfcmVncy1cdTAwM2VkYXRhLCBkYXRhLCBkYXRhX2xlbik7XG4mIzQzO1x0ZXJyID0gX19wZHNjX2RldmNtZF9sb2NrZWQocGRzYywgY21kLCBjb21wLCBtYXhfc2Vjb25kcywgZG9fbXNnKTtcbiYjNDM7dW5sb2NrOlxuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZwZHNjLVx1MDAzZWRldmNtZF9sb2NrKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IHBkc2NfZGV2Y21kX3dpdGhfZGF0YShzdHJ1Y3QgcGRzYyAqcGRzYywgdW5pb24gcGRzX2NvcmVfZGV2X2NtZCAqY21kLFxuJiM0MztcdFx0XHQgIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBkYXRhX2xlbixcbiYjNDM7XHRcdFx0ICB1bmlvbiBwZHNfY29yZV9kZXZfY29tcCAqY29tcCwgaW50IG1heF9zZWNvbmRzKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIF9fcGRzY19kZXZjbWRfd2l0aF9kYXRhKHBkc2MsIGNtZCwgZGF0YSwgZGF0YV9sZW4sXG4mIzQzO1x0XHRcdFx0ICAgICAgIGNvbXAsIG1heF9zZWNvbmRzLCB0cnVlKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IHBkc2NfZGV2Y21kX3dpdGhfZGF0YV9ub21zZyhzdHJ1Y3QgcGRzYyAqcGRzYywgdW5pb24gcGRzX2NvcmVfZGV2X2NtZCAqY21kLFxuJiM0MztcdFx0XHRcdGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBkYXRhX2xlbixcbiYjNDM7XHRcdFx0XHR1bmlvbiBwZHNfY29yZV9kZXZfY29tcCAqY29tcCwgaW50IG1heF9zZWNvbmRzKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIF9fcGRzY19kZXZjbWRfd2l0aF9kYXRhKHBkc2MsIGNtZCwgZGF0YSwgZGF0YV9sZW4sXG4mIzQzO1x0XHRcdFx0ICAgICAgIGNvbXAsIG1heF9zZWNvbmRzLCBmYWxzZSk7XG4mIzQzO31cbiYjNDM7XG4gaW50IHBkc2NfZGV2Y21kX2luaXQoc3RydWN0IHBkc2MgKnBkc2MpXG4ge1xuIFx0dW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgY29tcCA9IHt9O1xuQEAgLTI0MiwxNSAmIzQzOzMzMiwxNyBAQCBpbnQgcGRzY19kZXZjbWRfcmVzZXQoc3RydWN0IHBkc2MgKnBkc2MpXG4gXHRyZXR1cm4gcGRzY19kZXZjbWQocGRzYywgXHUwMDI2Y21kLCBcdTAwMjZjb21wLCBwZHNjLVx1MDAzZWRldmNtZF90aW1lb3V0KTtcbiB9XG4gXG4tc3RhdGljIGludCBwZHNjX2RldmNtZF9pZGVudGlmeV9sb2NrZWQoc3RydWN0IHBkc2MgKnBkc2MpXG4mIzQzO3N0YXRpYyBpbnQgcGRzY19kZXZjbWRfaWRlbnRpZnlfbG9ja2VkKHN0cnVjdCBwZHNjICpwZHNjLCB1OCBkcnZfaWRlbnRfdmVyLFxuJiM0MztcdFx0XHRcdCAgICAgICBib29sIGRvX21zZylcbiB7XG4gXHR1bmlvbiBwZHNfY29yZV9kZXZfY29tcCBjb21wID0ge307XG4gXHR1bmlvbiBwZHNfY29yZV9kZXZfY21kIGNtZCA9IHtcbiBcdFx0LmlkZW50aWZ5Lm9wY29kZSA9IFBEU19DT1JFX0NNRF9JREVOVElGWSxcbi1cdFx0LmlkZW50aWZ5LnZlciA9IFBEU19DT1JFX0lERU5USVRZX1ZFUlNJT05fMSxcbiYjNDM7XHRcdC5pZGVudGlmeS52ZXIgPSBkcnZfaWRlbnRfdmVyLFxuIFx0fTtcbiBcbi1cdHJldHVybiBwZHNjX2RldmNtZF9sb2NrZWQocGRzYywgXHUwMDI2Y21kLCBcdTAwMjZjb21wLCBwZHNjLVx1MDAzZWRldmNtZF90aW1lb3V0KTtcbiYjNDM7XHRyZXR1cm4gX19wZHNjX2RldmNtZF9sb2NrZWQocGRzYywgXHUwMDI2Y21kLCBcdTAwMjZjb21wLCBwZHNjLVx1MDAzZWRldmNtZF90aW1lb3V0LFxuJiM0MztcdFx0XHRcdCAgICBkb19tc2cpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBwZHNjX2luaXRfZGV2aW5mbyhzdHJ1Y3QgcGRzYyAqcGRzYylcbkBAIC0yNzMsOCAmIzQzOzM2NSw5IEBAIHN0YXRpYyB2b2lkIHBkc2NfaW5pdF9kZXZpbmZvKHN0cnVjdCBwZHNjICpwZHNjKVxuIFx0ZGV2X2RiZyhwZHNjLVx1MDAzZWRldiwgXCYjMzQ7ZndfdmVyc2lvbiAlc1xcblwmIzM0OywgcGRzYy1cdTAwM2VkZXZfaW5mby5md192ZXJzaW9uKTtcbiB9XG4gXG4tc3RhdGljIGludCBwZHNjX2lkZW50aWZ5KHN0cnVjdCBwZHNjICpwZHNjKVxuJiM0MztzdGF0aWMgaW50IHBkc2NfaWRlbnRpZnlfdmVyKHN0cnVjdCBwZHNjICpwZHNjLCB1OCBkcnZfaWRlbnRfdmVyKVxuIHtcbiYjNDM7XHRib29sIGRvX21zZyA9IGRydl9pZGVudF92ZXIgPT0gUERTX0NPUkVfSURFTlRJVFlfVkVSU0lPTl8xO1xuIFx0c3RydWN0IHBkc19jb3JlX2Rydl9pZGVudGl0eSBkcnYgPSB7fTtcbiBcdHNpemVfdCBzejtcbiBcdGludCBlcnI7XG5AQCAtMjk3LDE5ICYjNDM7MzkwLDIyIEBAIHN0YXRpYyBpbnQgcGRzY19pZGVudGlmeShzdHJ1Y3QgcGRzYyAqcGRzYylcbiBcdHN6ID0gbWluX3Qoc2l6ZV90LCBzaXplb2YoZHJ2KSwgc2l6ZW9mKHBkc2MtXHUwMDNlY21kX3JlZ3MtXHUwMDNlZGF0YSkpO1xuIFx0bWVtY3B5X3RvaW8oXHUwMDI2cGRzYy1cdTAwM2VjbWRfcmVncy1cdTAwM2VkYXRhLCBcdTAwMjZkcnYsIHN6KTtcbiBcbi1cdGVyciA9IHBkc2NfZGV2Y21kX2lkZW50aWZ5X2xvY2tlZChwZHNjKTtcbiYjNDM7XHRlcnIgPSBwZHNjX2RldmNtZF9pZGVudGlmeV9sb2NrZWQocGRzYywgZHJ2X2lkZW50X3ZlciwgZG9fbXNnKTtcbiBcdGlmICghZXJyKSB7XG4gXHRcdHN6ID0gbWluX3Qoc2l6ZV90LCBzaXplb2YocGRzYy1cdTAwM2VkZXZfaWRlbnQpLFxuIFx0XHRcdCAgIHNpemVvZihwZHNjLVx1MDAzZWNtZF9yZWdzLVx1MDAzZWRhdGEpKTtcbiBcdFx0bWVtY3B5X2Zyb21pbyhcdTAwMjZwZHNjLVx1MDAzZWRldl9pZGVudCwgXHUwMDI2cGRzYy1cdTAwM2VjbWRfcmVncy1cdTAwM2VkYXRhLCBzeik7XG4mIzQzO1xuJiM0MztcdFx0LyogVjEgZmlybXdhcmUgZG9lc24mIzM5O3Qgc2V0IGNhcGFiaWxpdGllcywgc28gdGhlIGZpZWxkIG1heVxuJiM0MztcdFx0ICogY29udGFpbiBnYXJiYWdlIGZyb20gdGhlIG91dGdvaW5nIGRyaXZlciBpZGVudGl0eS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKHBkc2MtXHUwMDNlZGV2X2lkZW50LnZlcnNpb24gXHUwMDNjIFBEU19DT1JFX0lERU5USVRZX1ZFUlNJT05fMilcbiYjNDM7XHRcdFx0cGRzYy1cdTAwM2VkZXZfaWRlbnQuY2FwYWJpbGl0aWVzID0gMDtcbiBcdH1cbiBcdG11dGV4X3VubG9jayhcdTAwMjZwZHNjLVx1MDAzZWRldmNtZF9sb2NrKTtcbiBcbi1cdGlmIChlcnIpIHtcbi1cdFx0ZGV2X2VycihwZHNjLVx1MDAzZWRldiwgXCYjMzQ7Q2Fubm90IGlkZW50aWZ5IGRldmljZTogJXBlXFxuXCYjMzQ7LFxuLVx0XHRcdEVSUl9QVFIoZXJyKSk7XG4mIzQzO1x0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbi1cdH1cbiBcbiBcdGlmIChpc3ByaW50KHBkc2MtXHUwMDNlZGV2X2luZm8uZndfdmVyc2lvblswXSkgXHUwMDI2XHUwMDI2XG4gXHQgICAgaXNhc2NpaShwZHNjLVx1MDAzZWRldl9pbmZvLmZ3X3ZlcnNpb25bMF0pKVxuQEAgLTMyNiw2ICYjNDM7NDIyLDI2IEBAIHN0YXRpYyBpbnQgcGRzY19pZGVudGlmeShzdHJ1Y3QgcGRzYyAqcGRzYylcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBwZHNjX2lkZW50aWZ5KHN0cnVjdCBwZHNjICpwZHNjKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0LyogT2xkZXIgZmlybXdhcmUgcmVqZWN0cyBhbnl0aGluZyBidXQgUERTX0NPUkVfSURFTlRJVFlfVkVSU0lPTl8xXG4mIzQzO1x0ICogd2l0aCBQRFNfUkNfRVZFUlNJT04gKC1FSU5WQUwpLCBzbyByZXRyeSB3aXRoIFYxIG9uIHZlcnNpb25cbiYjNDM7XHQgKiByZWplY3Rpb24uIERvbiYjMzk7dCByZXRyeSBvbiBvdGhlciBlcnJvcnMgbGlrZSAtRU5YSU8vLUVUSU1FRE9VVFxuJiM0MztcdCAqIHdoaWNoIGluZGljYXRlIGZpcm13YXJlIGlzIG5vdCBydW5uaW5nIG9yIGh1bmcuXG4mIzQzO1x0ICovXG4mIzQzO1x0ZXJyID0gcGRzY19pZGVudGlmeV92ZXIocGRzYywgUERTX0NPUkVfSURFTlRJVFlfVkVSU0lPTl8yKTtcbiYjNDM7XHRpZiAoZXJyID09IC1FSU5WQUwpXG4mIzQzO1x0XHRlcnIgPSBwZHNjX2lkZW50aWZ5X3ZlcihwZHNjLCBQRFNfQ09SRV9JREVOVElUWV9WRVJTSU9OXzEpO1xuJiM0MztcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0ZGV2X2VycihwZHNjLVx1MDAzZWRldiwgXCYjMzQ7Q2Fubm90IGlkZW50aWZ5IGRldmljZTogJXBlXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRFUlJfUFRSKGVycikpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZXJyO1xuJiM0Mzt9XG4mIzQzO1xuIHZvaWQgcGRzY19kZXZfdW5pbml0KHN0cnVjdCBwZHNjICpwZHNjKVxuIHtcbiBcdGlmIChwZHNjLVx1MDAzZWludHJfaW5mbykge1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9kZXZsaW5rLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvZGV2bGluay5jXG5pbmRleCA4YWRhZTdiMTg4OThkLi42M2ZlNDVlOTFmNzEwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL2RldmxpbmsuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL2RldmxpbmsuY1xuQEAgLTkwLDEzICYjNDM7OTAsMTEyIEBAIGludCBwZHNjX2RsX2ZsYXNoX3VwZGF0ZShzdHJ1Y3QgZGV2bGluayAqZGwsXG4ge1xuIFx0c3RydWN0IHBkc2MgKnBkc2MgPSBkZXZsaW5rX3ByaXYoZGwpO1xuIFxuLVx0aWYgKHBhcmFtcy1cdTAwM2Vjb21wb25lbnQpIHtcbi1cdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcbi1cdFx0XHRcdCAgIFwmIzM0O0NvbXBvbmVudCB1cGRhdGUgbm90IHN1cHBvcnRlZCBieSB0aGlzIGRldmljZVwmIzM0Oyk7XG4tXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHRyZXR1cm4gcGRzY19maXJtd2FyZV91cGRhdGUocGRzYywgcGFyYW1zLCBleHRhY2spO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHBkc2NfZGxfcmVwb3J0X2NvbXBvbmVudChzdHJ1Y3QgZGV2bGlua19pbmZvX3JlcSAqcmVxLFxuJiM0MztcdFx0XHRcdCAgICBzdHJ1Y3QgcGRzX2NvcmVfZndfY29tcG9uZW50X2luZm8gKmluZm8pXG4mIzQzO3tcbiYjNDM7XHRlbnVtIGRldmxpbmtfaW5mb192ZXJzaW9uX3R5cGUgdmVyX3R5cGU7XG4mIzQzO1x0dTE2IGZsYWdzID0gbGUxNl90b19jcHUoaW5mby1cdTAwM2VmbGFncyk7XG4mIzQzO1x0Y2hhciAqdmVyID0gaW5mby1cdTAwM2V2ZXJzaW9uO1xuJiM0MztcdGNvbnN0IGNoYXIgKm5hbWU7XG4mIzQzO1x0Y2hhciBidWZbMzJdO1xuJiM0MztcbiYjNDM7XHQvKiBNYWluIGZpcm13YXJlIGlzIHJlcG9ydGVkIGFzIGdlbmVyaWMgXCYjMzQ7ZndcJiMzNDsgKi9cbiYjNDM7XHRpZiAoaW5mby1cdTAwM2Vjb21wb25lbnRfdHlwZSA9PSBQRFNfQ09SRV9GV19UWVBFX01BSU4pIHtcbiYjNDM7XHRcdGlmIChpbmZvLVx1MDAzZXNsb3RfaWQgPT0gUERTX0NPUkVfRldfU0xPVF9HT0xEKVxuJiM0MztcdFx0XHRzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBcJiMzNDtmdy5nb2xkXCYjMzQ7KTtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0c25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgXCYjMzQ7ZndcJiMzNDspO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRuYW1lID0gcGRzY19md190eXBlX3RvX25hbWUoaW5mby1cdTAwM2Vjb21wb25lbnRfdHlwZSk7XG4mIzQzO1x0XHRpZiAoIW5hbWUpXG4mIzQzO1x0XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRcdGlmIChpbmZvLVx1MDAzZXNsb3RfaWQgPT0gUERTX0NPUkVfRldfU0xPVF9HT0xEKVxuJiM0MztcdFx0XHRzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBcJiMzNDtmdy4lcy5nb2xkXCYjMzQ7LCBuYW1lKTtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0c25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgXCYjMzQ7ZncuJXNcJiMzNDssIG5hbWUpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0dmVyX3R5cGUgPSBERVZMSU5LX0lORk9fVkVSU0lPTl9UWVBFX05PTkU7XG4mIzQzO1x0aWYgKGZsYWdzIFx1MDAyNiBQRFNfQ09SRV9GV19DT01QT05FTlRfSU5GT19GX1VQREFURV9CWV9OQU1FKVxuJiM0MztcdFx0dmVyX3R5cGUgPSBERVZMSU5LX0lORk9fVkVSU0lPTl9UWVBFX0NPTVBPTkVOVDtcbiYjNDM7XG4mIzQzO1x0aWYgKGZsYWdzIFx1MDAyNiBQRFNfQ09SRV9GV19DT01QT05FTlRfSU5GT19GX0ZJWEVEKSB7XG4mIzQzO1x0XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHRcdGVyciA9IGRldmxpbmtfaW5mb192ZXJzaW9uX2ZpeGVkX3B1dChyZXEsIGJ1ZiwgdmVyKTtcbiYjNDM7XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdHJldHVybiBlcnI7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoZmxhZ3MgXHUwMDI2IFBEU19DT1JFX0ZXX0NPTVBPTkVOVF9JTkZPX0ZfUlVOTklORykge1xuJiM0MztcdFx0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0XHRlcnIgPSBkZXZsaW5rX2luZm9fdmVyc2lvbl9ydW5uaW5nX3B1dF9leHQocmVxLCBidWYsXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgdmVyLCB2ZXJfdHlwZSk7XG4mIzQzO1x0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRyZXR1cm4gZXJyO1xuIFx0fVxuIFxuLVx0cmV0dXJuIHBkc2NfZmlybXdhcmVfdXBkYXRlKHBkc2MsIHBhcmFtcy1cdTAwM2VmdywgZXh0YWNrKTtcbiYjNDM7XHRpZiAoZmxhZ3MgXHUwMDI2IFBEU19DT1JFX0ZXX0NPTVBPTkVOVF9JTkZPX0ZfU1RBUlRVUCkge1xuJiM0MztcdFx0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0XHRlcnIgPSBkZXZsaW5rX2luZm9fdmVyc2lvbl9zdG9yZWRfcHV0X2V4dChyZXEsIGJ1ZixcbiYjNDM7XHRcdFx0XHRcdFx0XHQgIHZlciwgdmVyX3R5cGUpO1xuJiM0MztcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHBkc2NfZGxfcmVwb3J0X2Z3X3ZlcihzdHJ1Y3QgZGV2bGlua19pbmZvX3JlcSAqcmVxLCBjaGFyICpmd192ZXIpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gZGV2bGlua19pbmZvX3ZlcnNpb25fcnVubmluZ19wdXQocmVxLFxuJiM0MztcdFx0XHRcdFx0XHRERVZMSU5LX0lORk9fVkVSU0lPTl9HRU5FUklDX0ZXLFxuJiM0MztcdFx0XHRcdFx0XHRmd192ZXIpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHBkc2NfZGxfY29tcG9uZW50X2luZm9fZ2V0KHN0cnVjdCBkZXZsaW5rICpkbCxcbiYjNDM7XHRcdFx0XHQgICAgICBzdHJ1Y3QgZGV2bGlua19pbmZvX3JlcSAqcmVxLFxuJiM0MztcdFx0XHRcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwZHNjICpwZHNjID0gZGV2bGlua19wcml2KGRsKTtcbiYjNDM7XHR1OCBudW1fY29tcG9uZW50cztcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHQvKiBQYWlycyB3aXRoIFdSSVRFX09OQ0UgaW4gcGRzY19md19jb21wb25lbnRzX2ludmFsaWRhdGUoKS5cbiYjNDM7XHQgKiBVc2UgUkVBRF9PTkNFIHRvIGdldCBhIGNvbnNpc3RlbnQgc25hcHNob3Qgb2YgbnVtX2NvbXBvbmVudHMuXG4mIzQzO1x0ICogcGRzY19md19jb21wb25lbnRzX2ludmFsaWRhdGUoKSBjYW4gemVybyBpdCBjb25jdXJyZW50bHkgZHVyaW5nXG4mIzQzO1x0ICogZmlybXdhcmUgcmVjb3Zlcnk7IHVzaW5nIHRoZSBsb2NhbCBjb3B5IGF2b2lkcyBpdGVyYXRpbmcgemVyb1xuJiM0MztcdCAqIHRpbWVzIHdoZW4gd2UgYWxyZWFkeSBkZWNpZGVkIHRoZSBjYWNoZSB3YXMgdmFsaWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0bnVtX2NvbXBvbmVudHMgPSBSRUFEX09OQ0UocGRzYy1cdTAwM2Vmd19jb21wb25lbnRzLm51bV9jb21wb25lbnRzKTtcbiYjNDM7XHRpZiAoIW51bV9jb21wb25lbnRzKSB7XG4mIzQzO1x0XHRlcnIgPSBwZHNjX2dldF9jb21wb25lbnRfaW5mbyhwZHNjKTtcbiYjNDM7XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdHJldHVybiBwZHNjX2RsX3JlcG9ydF9md192ZXIocmVxLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgcGRzYy1cdTAwM2VkZXZfaW5mby5md192ZXJzaW9uKTtcbiYjNDM7XHRcdG51bV9jb21wb25lbnRzID0gUkVBRF9PTkNFKHBkc2MtXHUwMDNlZndfY29tcG9uZW50cy5udW1fY29tcG9uZW50cyk7XG4mIzQzO1x0XHRpZiAoIW51bV9jb21wb25lbnRzKVxuJiM0MztcdFx0XHRyZXR1cm4gcGRzY19kbF9yZXBvcnRfZndfdmVyKHJlcSxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgIHBkc2MtXHUwMDNlZGV2X2luZm8uZndfdmVyc2lvbik7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRudW1fY29tcG9uZW50cyA9IG1pbl90KHUxNiwgbnVtX2NvbXBvbmVudHMsXG4mIzQzO1x0XHRcdCAgICAgICBsZTE2X3RvX2NwdShwZHNjLVx1MDAzZWRldl9pZGVudC5tYXhfZndfc2xvdHMpKTtcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBudW1fY29tcG9uZW50czsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGVyciA9IHBkc2NfZGxfcmVwb3J0X2NvbXBvbmVudChyZXEsXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgXHUwMDI2cGRzYy1cdTAwM2Vmd19jb21wb25lbnRzLmluZm9baV0pO1xuJiM0MztcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuIH1cbiBcbiBzdGF0aWMgY2hhciAqZndfc2xvdG5hbWVzW10gPSB7XG5AQCAtMTA1LDggJiM0MzsyMDQsOSBAQCBzdGF0aWMgY2hhciAqZndfc2xvdG5hbWVzW10gPSB7XG4gXHRcJiMzNDtmdy5tYWluZndiXCYjMzQ7LFxuIH07XG4gXG4taW50IHBkc2NfZGxfaW5mb19nZXQoc3RydWN0IGRldmxpbmsgKmRsLCBzdHJ1Y3QgZGV2bGlua19pbmZvX3JlcSAqcmVxLFxuLVx0XHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiYjNDM7c3RhdGljIGludCBwZHNjX2RsX2Z3X2xpc3RfaW5mb19nZXQoc3RydWN0IGRldmxpbmsgKmRsLFxuJiM0MztcdFx0XHRcdCAgICBzdHJ1Y3QgZGV2bGlua19pbmZvX3JlcSAqcmVxLFxuJiM0MztcdFx0XHRcdCAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4ge1xuIFx0dW5pb24gcGRzX2NvcmVfZGV2X2NtZCBjbWQgPSB7XG4gXHRcdC5md19jb250cm9sLm9wY29kZSA9IFBEU19DT1JFX0NNRF9GV19DT05UUk9MLFxuQEAgLTE0MCwxMiAmIzQzOzI0MCw0MSBAQCBpbnQgcGRzY19kbF9pbmZvX2dldChzdHJ1Y3QgZGV2bGluayAqZGwsIHN0cnVjdCBkZXZsaW5rX2luZm9fcmVxICpyZXEsXG4gXHRcdFx0cmV0dXJuIGVycjtcbiBcdH1cbiBcbi1cdGVyciA9IGRldmxpbmtfaW5mb192ZXJzaW9uX3J1bm5pbmdfcHV0KHJlcSxcbi1cdFx0XHRcdFx0ICAgICAgIERFVkxJTktfSU5GT19WRVJTSU9OX0dFTkVSSUNfRlcsXG4tXHRcdFx0XHRcdCAgICAgICBwZHNjLVx1MDAzZWRldl9pbmZvLmZ3X3ZlcnNpb24pO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHBkc2NfZGxfaW5mb19nZXRfdjEoc3RydWN0IGRldmxpbmsgKmRsLFxuJiM0MztcdFx0XHQgICAgICAgc3RydWN0IGRldmxpbmtfaW5mb19yZXEgKnJlcSxcbiYjNDM7XHRcdFx0ICAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwZHNjICpwZHNjID0gZGV2bGlua19wcml2KGRsKTtcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBwZHNjX2RsX2Z3X2xpc3RfaW5mb19nZXQoZGwsIHJlcSwgZXh0YWNrKTtcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG4gXG4mIzQzO1x0LyogVmVyc2lvbiAxOiByZXBvcnQgZncgZnJvbSBkZXZfaW5mbyAocnVubmluZyBvbmx5KSAqL1xuJiM0MztcdHJldHVybiBwZHNjX2RsX3JlcG9ydF9md192ZXIocmVxLCBwZHNjLVx1MDAzZWRldl9pbmZvLmZ3X3ZlcnNpb24pO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgcGRzY19kbF9pbmZvX2dldChzdHJ1Y3QgZGV2bGluayAqZGwsIHN0cnVjdCBkZXZsaW5rX2luZm9fcmVxICpyZXEsXG4mIzQzO1x0XHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwZHNjICpwZHNjID0gZGV2bGlua19wcml2KGRsKTtcbiYjNDM7XHRjaGFyIGJ1ZlszMl07XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0aWYgKHBkc2MtXHUwMDNlZGV2X2lkZW50LnZlcnNpb24gXHUwMDNlPSBQRFNfQ09SRV9JREVOVElUWV9WRVJTSU9OXzIpIHtcbiYjNDM7XHRcdGVyciA9IHBkc2NfZGxfY29tcG9uZW50X2luZm9fZ2V0KGRsLCByZXEsIGV4dGFjayk7XG4mIzQzO1x0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRyZXR1cm4gZXJyO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRlcnIgPSBwZHNjX2RsX2luZm9fZ2V0X3YxKGRsLCByZXEsIGV4dGFjayk7XG4mIzQzO1x0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRyZXR1cm4gZXJyO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBcJiMzNDsweCV4XCYjMzQ7LCBwZHNjLVx1MDAzZWRldl9pbmZvLmFzaWNfdHlwZSk7XG4gXHRlcnIgPSBkZXZsaW5rX2luZm9fdmVyc2lvbl9maXhlZF9wdXQocmVxLFxuIFx0XHRcdFx0XHQgICAgIERFVkxJTktfSU5GT19WRVJTSU9OX0dFTkVSSUNfQVNJQ19JRCxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvZncuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9mdy5jXG5pbmRleCBmYTYyNjcxOWU2OGQxLi41Y2NmMDE3ZjZhZjQ3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL2Z3LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9mdy5jXG5AQCAtMSw2ICYjNDM7MSw5IEBAXG4gLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAvKiBDb3B5cmlnaHQoYykgMjAyMyBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMgKi9cbiBcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcGxkbWZ3LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvdm1hbGxvYy5oXHUwMDNlXG4mIzQzO1xuICNpbmNsdWRlIFwmIzM0O2NvcmUuaFwmIzM0O1xuIFxuIC8qIFRoZSB3b3JzdCBjYXNlIHdhaXQgZm9yIHRoZSBpbnN0YWxsIGFjdGl2aXR5IGlzIGFib3V0IDI1IG1pbnV0ZXMgd2hlblxuQEAgLTE0LDYgJiM0MzsxNyw1OCBAQFxuIC8qIE51bWJlciBvZiBwZXJpb2RpYyBsb2cgdXBkYXRlcyBkdXJpbmcgZncgZmlsZSBkb3dubG9hZCAqL1xuICNkZWZpbmUgUERTQ19GV19JTlRFUlZBTF9GUkFDVElPTlx0MzJcbiBcbiYjNDM7I2RlZmluZSBQRFNDX0ZXX0NPTVBPTkVOVF9QUkVGSVhcdFx0XCYjMzQ7ZncuXCYjMzQ7XG4mIzQzOyNkZWZpbmUgUERTQ19GV19DT01QT05FTlRfRlVMTF9OQU1FX0JVRkxFTiBcXFxuJiM0MztcdChzaXplb2YoUERTQ19GV19DT01QT05FTlRfUFJFRklYKSAmIzQzOyBQRFNfQ09SRV9GV19DT01QT05FTlRfTkFNRV9CVUZMRU4pXG4mIzQzO1xuJiM0MzsvKiBEcml2ZXItZGVmaW5lZCBjb21wb25lbnQgdHlwZSB0byBuYW1lIG1hcHBpbmcuXG4mIzQzOyAqIFBEU19DT1JFX0ZXX1RZUEVfTUFJTiBpcyBOVUxMIC0gaGFuZGxlZCBzcGVjaWFsbHkgYXMgXCYjMzQ7ZndcJiMzNDsgd2l0aG91dCBwcmVmaXguXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHBkc2NfZndfdHlwZV9uYW1lc1tdID0ge1xuJiM0MztcdFtQRFNfQ09SRV9GV19UWVBFX01BSU5dICAgICAgPSBOVUxMLFxuJiM0MztcdFtQRFNfQ09SRV9GV19UWVBFX0JPT1RdICAgICAgPSBcJiMzNDtib290bG9hZGVyXCYjMzQ7LFxuJiM0MztcdFtQRFNfQ09SRV9GV19UWVBFX0NQTERdICAgICAgPSBcJiMzNDtjcGxkXCYjMzQ7LFxuJiM0MztcdFtQRFNfQ09SRV9GV19UWVBFX1NFQ1VSRV0gICAgPSBcJiMzNDtzZWN1cmVcJiMzNDssXG4mIzQzO1x0W1BEU19DT1JFX0ZXX1RZUEVfRlBHQV0gICAgICA9IFwmIzM0O2ZwZ2FcJiMzNDssXG4mIzQzO1x0W1BEU19DT1JFX0ZXX1RZUEVfU1VDX01BSU5dICA9IFwmIzM0O3N1Y1wmIzM0OyxcbiYjNDM7XHRbUERTX0NPUkVfRldfVFlQRV9TVUNfQk9PVF0gID0gXCYjMzQ7c3VjLmJvb3Rsb2FkZXJcJiMzNDssXG4mIzQzO1x0W1BEU19DT1JFX0ZXX1RZUEVfVUJPT1RdICAgICA9IFwmIzM0O3Vib290XCYjMzQ7LFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7Y29uc3QgY2hhciAqcGRzY19md190eXBlX3RvX25hbWUodTggdHlwZSlcbiYjNDM7e1xuJiM0MztcdGlmICh0eXBlIFx1MDAzYyBBUlJBWV9TSVpFKHBkc2NfZndfdHlwZV9uYW1lcykgXHUwMDI2XHUwMDI2IHBkc2NfZndfdHlwZV9uYW1lc1t0eXBlXSlcbiYjNDM7XHRcdHJldHVybiBwZHNjX2Z3X3R5cGVfbmFtZXNbdHlwZV07XG4mIzQzO1x0cmV0dXJuIE5VTEw7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgcGRzY19md19jb21wb25lbnRzX2ludmFsaWRhdGUoc3RydWN0IHBkc2MgKnBkc2MpXG4mIzQzO3tcbiYjNDM7XHQvKiBQYWlycyB3aXRoIFJFQURfT05DRSBpbiBwZHNjX2RsX2NvbXBvbmVudF9pbmZvX2dldCgpICovXG4mIzQzO1x0V1JJVEVfT05DRShwZHNjLVx1MDAzZWZ3X2NvbXBvbmVudHMubnVtX2NvbXBvbmVudHMsIDApO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdTggcGRzY19uYW1lX3RvX2Z3X3R5cGUoY29uc3QgY2hhciAqbmFtZSlcbiYjNDM7e1xuJiM0MztcdHNpemVfdCBwcmVmaXhfbGVuO1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHQvKiBcJiMzNDtmd1wmIzM0OyB3aXRob3V0IHN1ZmZpeCBtYXBzIHRvIG1haW4gZmlybXdhcmUgKi9cbiYjNDM7XHRpZiAoIXN0cmNtcChuYW1lLCBcJiMzNDtmd1wmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm4gUERTX0NPUkVfRldfVFlQRV9NQUlOO1xuJiM0MztcbiYjNDM7XHRwcmVmaXhfbGVuID0gc3RyX2hhc19wcmVmaXgobmFtZSwgUERTQ19GV19DT01QT05FTlRfUFJFRklYKTtcbiYjNDM7XHRpZiAocHJlZml4X2xlbilcbiYjNDM7XHRcdG5hbWUgJiM0Mzs9IHByZWZpeF9sZW47XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDE7IGkgXHUwMDNjIEFSUkFZX1NJWkUocGRzY19md190eXBlX25hbWVzKTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGlmIChwZHNjX2Z3X3R5cGVfbmFtZXNbaV0gXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgIXN0cmNtcChuYW1lLCBwZHNjX2Z3X3R5cGVfbmFtZXNbaV0pKVxuJiM0MztcdFx0XHRyZXR1cm4gaTtcbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBwZHNjX2RldmNtZF9md19kb3dubG9hZF9sb2NrZWQoc3RydWN0IHBkc2MgKnBkc2MsIHU2NCBhZGRyLFxuIFx0XHRcdFx0XHQgIHUzMiBvZmZzZXQsIHUzMiBsZW5ndGgpXG4ge1xuQEAgLTIzLDcgJiM0Mzs3OCw3IEBAIHN0YXRpYyBpbnQgcGRzY19kZXZjbWRfZndfZG93bmxvYWRfbG9ja2VkKHN0cnVjdCBwZHNjICpwZHNjLCB1NjQgYWRkcixcbiBcdFx0LmZ3X2Rvd25sb2FkLmFkZHIgPSBjcHVfdG9fbGU2NChhZGRyKSxcbiBcdFx0LmZ3X2Rvd25sb2FkLmxlbmd0aCA9IGNwdV90b19sZTMyKGxlbmd0aCksXG4gXHR9O1xuLVx0dW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgY29tcDtcbiYjNDM7XHR1bmlvbiBwZHNfY29yZV9kZXZfY29tcCBjb21wID0ge307XG4gXG4gXHRyZXR1cm4gcGRzY19kZXZjbWRfbG9ja2VkKHBkc2MsIFx1MDAyNmNtZCwgXHUwMDI2Y29tcCwgcGRzYy1cdTAwM2VkZXZjbWRfdGltZW91dCk7XG4gfVxuQEAgLTk1LDkgJiM0MzsxNTAsMTIgQEAgc3RhdGljIGludCBwZHNjX2Z3X3N0YXR1c19sb25nX3dhaXQoc3RydWN0IHBkc2MgKnBkc2MsXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbi1pbnQgcGRzY19maXJtd2FyZV91cGRhdGUoc3RydWN0IHBkc2MgKnBkc2MsIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncsXG4tXHRcdFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiYjNDM7c3RhdGljIGludFxuJiM0MztwZHNjX2xlZ2FjeV9maXJtd2FyZV91cGRhdGUoc3RydWN0IHBkc2MgKnBkc2MsXG4mIzQzO1x0XHRcdCAgICBzdHJ1Y3QgZGV2bGlua19mbGFzaF91cGRhdGVfcGFyYW1zICpwYXJhbXMsXG4mIzQzO1x0XHRcdCAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4ge1xuJiM0MztcdGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncgPSBwYXJhbXMtXHUwMDNlZnc7XG4gXHR1MzIgYnVmX3N6LCBjb3B5X3N6LCBvZmZzZXQ7XG4gXHRzdHJ1Y3QgZGV2bGluayAqZGw7XG4gXHRpbnQgbmV4dF9pbnRlcnZhbDtcbkBAIC0xMDUsNiAmIzQzOzE2MywxMiBAQCBpbnQgcGRzY19maXJtd2FyZV91cGRhdGUoc3RydWN0IHBkc2MgKnBkc2MsIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncsXG4gXHRpbnQgZXJyID0gMDtcbiBcdGludCBmd19zbG90O1xuIFxuJiM0MztcdGlmIChwYXJhbXMtXHUwMDNlY29tcG9uZW50KSB7XG4mIzQzO1x0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxuJiM0MztcdFx0XHRcdCAgIFwmIzM0O0NvbXBvbmVudCB1cGRhdGUgbm90IHN1cHBvcnRlZCBieSB0aGlzIGRldmljZVwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0fVxuJiM0MztcbiBcdGRldl9pbmZvKHBkc2MtXHUwMDNlZGV2LCBcJiMzNDtJbnN0YWxsaW5nIGZpcm13YXJlXFxuXCYjMzQ7KTtcbiBcbiBcdGlmICghcGRzYy1cdTAwM2VjbWRfcmVncylcbkBAIC0xOTUsMyAmIzQzOzI1OSw3MjkgQEAgaW50IHBkc2NfZmlybXdhcmVfdXBkYXRlKHN0cnVjdCBwZHNjICpwZHNjLCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3LFxuIFx0XHRcdFx0XHRcdCAgIE5VTEwsIDAsIDApO1xuIFx0cmV0dXJuIGVycjtcbiB9XG4mIzQzO1xuJiM0MztzdHJ1Y3QgcGRzY19jb21wb25lbnRfcHJpdiB7XG4mIzQzO1x0dTE2IGNvbXBvbmVudF9pZDtcbiYjNDM7XHRib29sIHNraXA7XG4mIzQzO1x0c3RydWN0IGxpc3RfaGVhZCBsaXN0X2VudHJ5O1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RydWN0IHBkc19jb3JlX2Z3dV9wcml2IHtcbiYjNDM7XHRzdHJ1Y3QgcGxkbWZ3IGNvbnRleHQ7XG4mIzQzO1x0c3RydWN0IGRldmxpbmtfZmxhc2hfdXBkYXRlX3BhcmFtcyAqcGFyYW1zO1xuJiM0MztcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaztcbiYjNDM7XHRzdHJ1Y3QgcGRzYyAqcGRzYztcbiYjNDM7XHRzdHJ1Y3QgbGlzdF9oZWFkIGNvbXBvbmVudHM7XG4mIzQzO1x0Ym9vbCBjb21wb25lbnRfZm91bmQ7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBwZHNjX2ZyZWVfZnd1X3ByaXYoc3RydWN0IHBkc19jb3JlX2Z3dV9wcml2ICpwcml2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHBkc2NfY29tcG9uZW50X3ByaXYgKmNvbXBvbmVudF9wcml2LCAqdG1wO1xuJiM0MztcbiYjNDM7XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY29tcG9uZW50X3ByaXYsIHRtcCwgXHUwMDI2cHJpdi1cdTAwM2Vjb21wb25lbnRzLFxuJiM0MztcdFx0XHRcdCBsaXN0X2VudHJ5KSB7XG4mIzQzO1x0XHRsaXN0X2RlbChcdTAwMjZjb21wb25lbnRfcHJpdi1cdTAwM2VsaXN0X2VudHJ5KTtcbiYjNDM7XHRcdGtmcmVlKGNvbXBvbmVudF9wcml2KTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcGRzY19kZXZjbWRfbWF0Y2hfcmVjb3JkX2Rlc2Moc3RydWN0IHBkc2MgKnBkc2MsIHUxNiBkZXNjX3R5cGUsXG4mIzQzO1x0XHRcdFx0XHQgdTE2IGRlc2Nfc2l6ZSwgY29uc3QgdTggKmRlc2NfZGF0YSxcbiYjNDM7XHRcdFx0XHRcdCB1OCAqbWF0Y2gpXG4mIzQzO3tcbiYjNDM7XHR1bmlvbiBwZHNfY29yZV9kZXZfY21kIGNtZCA9IHtcbiYjNDM7XHRcdC5tYXRjaF9yZWNvcmRfZGVzYy5vcGNvZGUgPSBQRFNfQ09SRV9DTURfTUFUQ0hfUkVDT1JEX0RFU0MsXG4mIzQzO1x0XHQubWF0Y2hfcmVjb3JkX2Rlc2MudmVyID0gMSxcbiYjNDM7XHRcdC5tYXRjaF9yZWNvcmRfZGVzYy50eXBlID0gY3B1X3RvX2xlMTYoZGVzY190eXBlKSxcbiYjNDM7XHRcdC5tYXRjaF9yZWNvcmRfZGVzYy5zaXplID0gY3B1X3RvX2xlMTYoZGVzY19zaXplKSxcbiYjNDM7XHR9O1xuJiM0MztcdHVuaW9uIHBkc19jb3JlX2Rldl9jb21wIGNvbXAgPSB7fTtcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBwZHNjX2RldmNtZF93aXRoX2RhdGEocGRzYywgXHUwMDI2Y21kLCBkZXNjX2RhdGEsIGRlc2Nfc2l6ZSxcbiYjNDM7XHRcdFx0XHQgICAgXHUwMDI2Y29tcCwgcGRzYy1cdTAwM2VkZXZjbWRfdGltZW91dCk7XG4mIzQzO1x0Km1hdGNoID0gY29tcC5tYXRjaF9yZWNvcmRfZGVzYy5tYXRjaDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGJvb2wgcGRzY19tYXRjaF9yZWNvcmRfZGVzY3Moc3RydWN0IHBsZG1mdyAqY29udGV4dCxcbiYjNDM7XHRcdFx0XHQgICAgc3RydWN0IHBsZG1md19yZWNvcmQgKnJlY29yZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwZHNfY29yZV9md3VfcHJpdiAqcHJpdiA9XG4mIzQzO1x0XHRjb250YWluZXJfb2YoY29udGV4dCwgc3RydWN0IHBkc19jb3JlX2Z3dV9wcml2LCBjb250ZXh0KTtcbiYjNDM7XHRzdHJ1Y3QgcGRzYyAqcGRzYyA9IHByaXYtXHUwMDNlcGRzYztcbiYjNDM7XHRzdHJ1Y3QgcGxkbWZ3X2Rlc2NfdGx2ICpkZXNjO1xuJiM0MztcbiYjNDM7XHRpZiAoIXBsZG1md19vcF9wY2lfbWF0Y2hfcmVjb3JkKGNvbnRleHQsIHJlY29yZCkpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGxpc3RfZm9yX2VhY2hfZW50cnkoZGVzYywgXHUwMDI2cmVjb3JkLVx1MDAzZWRlc2NzLCBlbnRyeSkge1xuJiM0MztcdFx0dTggbWF0Y2g7XG4mIzQzO1x0XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHRcdHN3aXRjaCAoZGVzYy1cdTAwM2V0eXBlKSB7XG4mIzQzO1x0XHQvKiBza2lwIHR5cGVzIGNoZWNrZWQgaW4gcGxkbWZ3X29wX3BjaV9tYXRjaF9yZWNvcmQgKi9cbiYjNDM7XHRcdGNhc2UgUExETV9ERVNDX0lEX1BDSV9WRU5ET1JfSUQ6XG4mIzQzO1x0XHRjYXNlIFBMRE1fREVTQ19JRF9QQ0lfREVWSUNFX0lEOlxuJiM0MztcdFx0Y2FzZSBQTERNX0RFU0NfSURfUENJX1NVQlZFTkRPUl9JRDpcbiYjNDM7XHRcdGNhc2UgUExETV9ERVNDX0lEX1BDSV9TVUJERVZfSUQ6XG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGlmICghZGVzYy1cdTAwM2VzaXplKVxuJiM0MztcdFx0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdFx0ZXJyID0gcGRzY19kZXZjbWRfbWF0Y2hfcmVjb3JkX2Rlc2MocGRzYywgZGVzYy1cdTAwM2V0eXBlLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgZGVzYy1cdTAwM2VzaXplLCBkZXNjLVx1MDAzZWRhdGEsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICBcdTAwMjZtYXRjaCk7XG4mIzQzO1x0XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRcdGRldl9lcnIocGRzYy1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdFx0XCYjMzQ7bWF0Y2hfcmVjb3JkX2Rlc2MgZmFpbGVkIHR5cGU6IDB4JTA0eCBzaXplOiAldSwgZXJyICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdGRlc2MtXHUwMDNldHlwZSwgZGVzYy1cdTAwM2VzaXplLCBlcnIpO1xuJiM0MztcdFx0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHQvKiBhbGwgcmVjb3JkIGRlc2NyaXB0b3JzIG11c3QgbWF0Y2ggKi9cbiYjNDM7XHRcdGlmICghbWF0Y2gpXG4mIzQzO1x0XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiB0cnVlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHBkc2NfZGV2Y21kX3NlbmRfcGFja2FnZV9kYXRhKHN0cnVjdCBwZHNjICpwZHNjLCB1NjQgYWRkcixcbiYjNDM7XHRcdFx0XHRcdCB1MTYgbGVuZ3RoLCB1MTYgb2Zmc2V0LCB1MTYgdG90YWxfbGVuKVxuJiM0Mzt7XG4mIzQzO1x0dW5pb24gcGRzX2NvcmVfZGV2X2NtZCBjbWQgPSB7XG4mIzQzO1x0XHQuc2VuZF9wa2dfZGF0YS5vcGNvZGUgPSBQRFNfQ09SRV9DTURfU0VORF9QS0dfREFUQSxcbiYjNDM7XHRcdC5zZW5kX3BrZ19kYXRhLnZlciA9IDEsXG4mIzQzO1x0XHQuc2VuZF9wa2dfZGF0YS5kYXRhX3BhID0gY3B1X3RvX2xlNjQoYWRkciksXG4mIzQzO1x0XHQuc2VuZF9wa2dfZGF0YS5kYXRhX2xlbiA9IGNwdV90b19sZTE2KGxlbmd0aCksXG4mIzQzO1x0XHQuc2VuZF9wa2dfZGF0YS5vZmZzZXQgPSBjcHVfdG9fbGUxNihvZmZzZXQpLFxuJiM0MztcdFx0LnNlbmRfcGtnX2RhdGEudG90YWxfbGVuID0gY3B1X3RvX2xlMTYodG90YWxfbGVuKSxcbiYjNDM7XHR9O1xuJiM0MztcdHVuaW9uIHBkc19jb3JlX2Rldl9jb21wIGNvbXAgPSB7fTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHBkc2NfZGV2Y21kKHBkc2MsIFx1MDAyNmNtZCwgXHUwMDI2Y29tcCwgcGRzYy1cdTAwM2VkZXZjbWRfdGltZW91dCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcGRzY19zZW5kX3BhY2thZ2VfZGF0YShzdHJ1Y3QgcGxkbWZ3ICpjb250ZXh0LCBjb25zdCB1OCAqZGF0YSxcbiYjNDM7XHRcdFx0XHQgIHUxNiBsZW5ndGgpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcGRzX2NvcmVfZnd1X3ByaXYgKnByaXYgPVxuJiM0MztcdFx0Y29udGFpbmVyX29mKGNvbnRleHQsIHN0cnVjdCBwZHNfY29yZV9md3VfcHJpdiwgY29udGV4dCk7XG4mIzQzO1x0c3RydWN0IHBkc2NfZGVmZXJyZWRfZG1hICpkZWZlcnJlZDtcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBjb250ZXh0LVx1MDAzZWRldjtcbiYjNDM7XHRzdHJ1Y3QgcGRzYyAqcGRzYyA9IHByaXYtXHUwMDNlcGRzYztcbiYjNDM7XHRkbWFfYWRkcl90IGRtYV9hZGRyO1xuJiM0MztcdHU4ICpwYWNrYWdlX2RhdGE7XG4mIzQzO1x0dTMyIG9mZnNldDtcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHRpZiAoIWxlbmd0aClcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRkZWZlcnJlZCA9IGttYWxsb2Nfb2JqKCpkZWZlcnJlZCwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCFkZWZlcnJlZClcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiYjNDM7XHRwYWNrYWdlX2RhdGEgPSBrbWVtZHVwKGRhdGEsIGxlbmd0aCwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCFwYWNrYWdlX2RhdGEpIHtcbiYjNDM7XHRcdGtmcmVlKGRlZmVycmVkKTtcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZG1hX2FkZHIgPSBkbWFfbWFwX3NpbmdsZShkZXYsIHBhY2thZ2VfZGF0YSwgbGVuZ3RoLCBETUFfVE9fREVWSUNFKTtcbiYjNDM7XHRpZiAoZG1hX21hcHBpbmdfZXJyb3IoZGV2LCBkbWFfYWRkcikpIHtcbiYjNDM7XHRcdGRldl9lcnIoZGV2LCBcJiMzNDtGYWlsZWQgdG8gZG1hX21hcCBwYWNrYWdlX2RhdGEgbGVuZ3RoIDB4JXhcXG5cJiMzNDssXG4mIzQzO1x0XHRcdGxlbmd0aCk7XG4mIzQzO1x0XHRrZnJlZShwYWNrYWdlX2RhdGEpO1xuJiM0MztcdFx0a2ZyZWUoZGVmZXJyZWQpO1xuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRmb3IgKG9mZnNldCA9IDA7IG9mZnNldCBcdTAwM2MgbGVuZ3RoOyBvZmZzZXQgJiM0Mzs9IFBEU19QQUdFX1NJWkUpIHtcbiYjNDM7XHRcdHUzMiBjb3B5X3N6O1xuJiM0MztcbiYjNDM7XHRcdGNvcHlfc3ogPSBtaW5fdCh1bnNpZ25lZCBpbnQsIFBEU19QQUdFX1NJWkUsIGxlbmd0aCAtIG9mZnNldCk7XG4mIzQzO1x0XHRlcnIgPSBwZHNjX2RldmNtZF9zZW5kX3BhY2thZ2VfZGF0YShwZHNjLCBkbWFfYWRkciAmIzQzOyBvZmZzZXQsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICBjb3B5X3N6LCBvZmZzZXQsIGxlbmd0aCk7XG4mIzQzO1x0XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRcdE5MX1NFVF9FUlJfTVNHX01PRChwcml2LVx1MDAzZWV4dGFjayxcbiYjNDM7XHRcdFx0XHRcdCAgIFwmIzM0O0ZhaWxlZCB0byBzZW5kIHBhY2thZ2UgZGF0YVwmIzM0Oyk7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKGVyciA9PSAtRVRJTUVET1VUIHx8IGVyciA9PSAtRUFHQUlOKSB7XG4mIzQzO1x0XHRwZHNjX2RlZmVycmVkX2RtYV9hZGQocGRzYywgZGVmZXJyZWQsIGRtYV9hZGRyLFxuJiM0MztcdFx0XHRcdCAgICAgIHBhY2thZ2VfZGF0YSwgbGVuZ3RoLCBETUFfVE9fREVWSUNFKTtcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRrZnJlZShkZWZlcnJlZCk7XG4mIzQzO1x0ZG1hX3VubWFwX3NpbmdsZShkZXYsIGRtYV9hZGRyLCBsZW5ndGgsIERNQV9UT19ERVZJQ0UpO1xuJiM0MztcdGtmcmVlKHBhY2thZ2VfZGF0YSk7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGJvb2wgcGRzY19jb21wb25lbnRfdHlwZV9leGlzdHMoc3RydWN0IHBkc2MgKnBkc2MsIHU4IHR5cGUpXG4mIzQzO3tcbiYjNDM7XHRpbnQgaTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgcGRzYy1cdTAwM2Vmd19jb21wb25lbnRzLm51bV9jb21wb25lbnRzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aWYgKHBkc2MtXHUwMDNlZndfY29tcG9uZW50cy5pbmZvW2ldLmNvbXBvbmVudF90eXBlID09IHR5cGUpXG4mIzQzO1x0XHRcdHJldHVybiB0cnVlO1xuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIHBkc2NfY29tcG9uZW50X2lkX21hdGNoZXNfdHlwZShzdHJ1Y3QgcGRzYyAqcGRzYyxcbiYjNDM7XHRcdFx0XHRcdCAgIHU4IGNvbXBvbmVudF9pZCwgdTggdHlwZSlcbiYjNDM7e1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBwZHNjLVx1MDAzZWZ3X2NvbXBvbmVudHMubnVtX2NvbXBvbmVudHM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRzdHJ1Y3QgcGRzX2NvcmVfZndfY29tcG9uZW50X2luZm8gKmluZm8gPVxuJiM0MztcdFx0XHRcdTAwMjZwZHNjLVx1MDAzZWZ3X2NvbXBvbmVudHMuaW5mb1tpXTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoaW5mby1cdTAwM2VpZGVudGlmaWVyID09IGNvbXBvbmVudF9pZCBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICBpbmZvLVx1MDAzZWNvbXBvbmVudF90eXBlID09IHR5cGUpXG4mIzQzO1x0XHRcdHJldHVybiB0cnVlO1xuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB1OCBwZHNjX2dldF9jb21wb25lbnRfdHlwZV9ieV9pZChzdHJ1Y3QgcGRzYyAqcGRzYywgdTE2IGNvbXBvbmVudF9pZClcbiYjNDM7e1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBwZHNjLVx1MDAzZWZ3X2NvbXBvbmVudHMubnVtX2NvbXBvbmVudHM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRzdHJ1Y3QgcGRzX2NvcmVfZndfY29tcG9uZW50X2luZm8gKmluZm8gPVxuJiM0MztcdFx0XHRcdTAwMjZwZHNjLVx1MDAzZWZ3X2NvbXBvbmVudHMuaW5mb1tpXTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoaW5mby1cdTAwM2VpZGVudGlmaWVyID09IGNvbXBvbmVudF9pZClcbiYjNDM7XHRcdFx0cmV0dXJuIGluZm8tXHUwMDNlY29tcG9uZW50X3R5cGU7XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCBwZHNjX3NraXBfY29tcG9uZW50KHN0cnVjdCBwZHNfY29yZV9md3VfcHJpdiAqcHJpdixcbiYjNDM7XHRcdFx0XHR1MTYgY29tcG9uZW50X2lkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHBkc2NfY29tcG9uZW50X3ByaXYgKmNvbXBvbmVudF9wcml2O1xuJiM0MztcbiYjNDM7XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGNvbXBvbmVudF9wcml2LCBcdTAwMjZwcml2LVx1MDAzZWNvbXBvbmVudHMsIGxpc3RfZW50cnkpIHtcbiYjNDM7XHRcdGlmIChjb21wb25lbnRfcHJpdi1cdTAwM2Vjb21wb25lbnRfaWQgPT0gY29tcG9uZW50X2lkKVxuJiM0MztcdFx0XHRyZXR1cm4gY29tcG9uZW50X3ByaXYtXHUwMDNlc2tpcDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBmYWxzZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBwZHNjX3NlbmRfY29tcG9uZW50X3RhYmxlKHN0cnVjdCBwbGRtZncgKmNvbnRleHQsXG4mIzQzO1x0XHRcdFx0ICAgICBzdHJ1Y3QgcGxkbWZ3X2NvbXBvbmVudCAqY29tcG9uZW50LFxuJiM0MztcdFx0XHRcdCAgICAgdTggdHJhbnNmZXJfZmxhZylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwZHNfY29yZV9md3VfcHJpdiAqcHJpdiA9XG4mIzQzO1x0XHRjb250YWluZXJfb2YoY29udGV4dCwgc3RydWN0IHBkc19jb3JlX2Z3dV9wcml2LCBjb250ZXh0KTtcbiYjNDM7XHRzdHJ1Y3QgcGRzX2NvcmVfY29tcG9uZW50X3RibCAqY29tcG9uZW50X3RibDtcbiYjNDM7XHRzdHJ1Y3QgcGRzY19jb21wb25lbnRfcHJpdiAqY29tcG9uZW50X3ByaXY7XG4mIzQzO1x0c3RydWN0IGRldmljZSAqZGV2ID0gY29udGV4dC1cdTAwM2VkZXY7XG4mIzQzO1x0dW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgY29tcCA9IHt9O1xuJiM0MztcdHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgY21kID0ge307XG4mIzQzO1x0c3RydWN0IHBkc2MgKnBkc2MgPSBwcml2LVx1MDAzZXBkc2M7XG4mIzQzO1x0Ym9vbCBza2lwX2NvbXBvbmVudCA9IGZhbHNlO1xuJiM0MztcdHU4IHJlcXVlc3RlZF90eXBlID0gMDtcbiYjNDM7XHR1MTYgYnVmX3N6LCB0Ymxfc3o7XG4mIzQzO1x0aW50IGVyciA9IDA7XG4mIzQzO1xuJiM0MztcdGRldl9kYmcoZGV2LFxuJiM0MztcdFx0XCYjMzQ7Y29tcG9uZW50IG5hbWUgJXMgY2xhc3NpZmljYXRpb24gJXUgaWQgJXUgYWN0aXZhdGlvbl9tZXRob2QgJXUgdmVyX2xlbiAlZCB2ZXJfc3RyICUuKnMgaW5kZXggJXUgc2l6ZSAldSB0cmFuc2Zlcl9mbGFnIDB4JTAyeFxcblwmIzM0OyxcbiYjNDM7XHRcdHByaXYtXHUwMDNlcGFyYW1zLVx1MDAzZWNvbXBvbmVudCwgY29tcG9uZW50LVx1MDAzZWNsYXNzaWZpY2F0aW9uLFxuJiM0MztcdFx0Y29tcG9uZW50LVx1MDAzZWlkZW50aWZpZXIsIGNvbXBvbmVudC1cdTAwM2VhY3RpdmF0aW9uX21ldGhvZCxcbiYjNDM7XHRcdGNvbXBvbmVudC1cdTAwM2V2ZXJzaW9uX2xlbiwgY29tcG9uZW50LVx1MDAzZXZlcnNpb25fbGVuLFxuJiM0MztcdFx0Y29tcG9uZW50LVx1MDAzZXZlcnNpb25fc3RyaW5nLCBjb21wb25lbnQtXHUwMDNlaW5kZXgsXG4mIzQzO1x0XHRjb21wb25lbnQtXHUwMDNlY29tcG9uZW50X3NpemUsIHRyYW5zZmVyX2ZsYWcpO1xuJiM0MztcbiYjNDM7XHRjb21wb25lbnRfcHJpdiA9IGt6YWxsb2Nfb2JqKCpjb21wb25lbnRfcHJpdiwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCFjb21wb25lbnRfcHJpdilcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiYjNDM7XHRpZiAocHJpdi1cdTAwM2VwYXJhbXMtXHUwMDNlY29tcG9uZW50KSB7XG4mIzQzO1x0XHRyZXF1ZXN0ZWRfdHlwZSA9IHBkc2NfbmFtZV90b19md190eXBlKHByaXYtXHUwMDNlcGFyYW1zLVx1MDAzZWNvbXBvbmVudCk7XG4mIzQzO1x0XHRpZiAoY29tcG9uZW50LVx1MDAzZWlkZW50aWZpZXIgXHUwMDNlIFU4X01BWCB8fFxuJiM0MztcdFx0ICAgICFwZHNjX2NvbXBvbmVudF9pZF9tYXRjaGVzX3R5cGUocGRzYyxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgIGNvbXBvbmVudC1cdTAwM2VpZGVudGlmaWVyLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgcmVxdWVzdGVkX3R5cGUpKSB7XG4mIzQzO1x0XHRcdHNraXBfY29tcG9uZW50ID0gdHJ1ZTtcbiYjNDM7XHRcdFx0Z290byBhZGRfY29tcG9uZW50X3ByaXY7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRwcml2LVx1MDAzZWNvbXBvbmVudF9mb3VuZCA9IHRydWU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRidWZfc3ogPSBzaXplb2YocGRzYy1cdTAwM2VjbWRfcmVncy1cdTAwM2VkYXRhKTtcbiYjNDM7XHR0Ymxfc3ogPSBzdHJ1Y3Rfc2l6ZShjb21wb25lbnRfdGJsLCB2ZXJzaW9uX3N0cixcbiYjNDM7XHRcdFx0ICAgICBjb21wb25lbnQtXHUwMDNldmVyc2lvbl9sZW4pO1xuJiM0MztcdGlmICh0Ymxfc3ogXHUwMDNlIGJ1Zl9zeikge1xuJiM0MztcdFx0ZGV2X2VycihkZXYsIFwmIzM0O2NvbXBvbmVudF90Ymwgc2l6ZSAlZCB0b28gYmlnLCBtYXggc2l6ZTogJWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdHRibF9zeiwgYnVmX3N6KTtcbiYjNDM7XHRcdGVyciA9IC1FTk9TUEM7XG4mIzQzO1x0XHRnb3RvIGZyZWVfY29tcG9uZW50X3ByaXY7XG4mIzQzO1x0fVxuJiM0MztcdGNvbXBvbmVudF90YmwgPSBremFsbG9jKHRibF9zeiwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCFjb21wb25lbnRfdGJsKSB7XG4mIzQzO1x0XHRlcnIgPSAtRU5PTUVNO1xuJiM0MztcdFx0Z290byBmcmVlX2NvbXBvbmVudF9wcml2O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Y29tcG9uZW50X3RibC1cdTAwM2Vjb21wYXJpc29uX3N0YW1wID1cbiYjNDM7XHRcdGNwdV90b19sZTMyKGNvbXBvbmVudC1cdTAwM2Vjb21wYXJpc29uX3N0YW1wKTtcbiYjNDM7XHRjb21wb25lbnRfdGJsLVx1MDAzZWNsYXNzaWZpY2F0aW9uID0gY3B1X3RvX2xlMTYoY29tcG9uZW50LVx1MDAzZWNsYXNzaWZpY2F0aW9uKTtcbiYjNDM7XHRjb21wb25lbnRfdGJsLVx1MDAzZWlkZW50aWZpZXIgPSBjcHVfdG9fbGUxNihjb21wb25lbnQtXHUwMDNlaWRlbnRpZmllcik7XG4mIzQzO1x0Y29tcG9uZW50X3RibC1cdTAwM2V0cmFuc2Zlcl9mbGFnID0gdHJhbnNmZXJfZmxhZztcbiYjNDM7XHRjb21wb25lbnRfdGJsLVx1MDAzZXZlcnNpb25fc3RyX3R5cGUgPSBjb21wb25lbnQtXHUwMDNldmVyc2lvbl90eXBlO1xuJiM0MztcdGNvbXBvbmVudF90YmwtXHUwMDNldmVyc2lvbl9zdHJfbGVuID0gY29tcG9uZW50LVx1MDAzZXZlcnNpb25fbGVuO1xuJiM0MztcdG1lbWNweShjb21wb25lbnRfdGJsLVx1MDAzZXZlcnNpb25fc3RyLCBjb21wb25lbnQtXHUwMDNldmVyc2lvbl9zdHJpbmcsXG4mIzQzO1x0ICAgICAgIGNvbXBvbmVudC1cdTAwM2V2ZXJzaW9uX2xlbik7XG4mIzQzO1xuJiM0MztcdGNtZC5zZW5kX2NvbXBvbmVudF90Ymwub3Bjb2RlID0gUERTX0NPUkVfQ01EX1NFTkRfQ09NUE9ORU5UX1RCTDtcbiYjNDM7XHRjbWQuc2VuZF9jb21wb25lbnRfdGJsLnZlciA9IDE7XG4mIzQzO1x0Y21kLnNlbmRfY29tcG9uZW50X3RibC5zbG90X2lkID0gUERTX0NPUkVfRldfU0xPVF9JTlZBTElEO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBwZHNjX2RldmNtZF93aXRoX2RhdGEocGRzYywgXHUwMDI2Y21kLCBjb21wb25lbnRfdGJsLCB0Ymxfc3osXG4mIzQzO1x0XHRcdFx0ICAgIFx1MDAyNmNvbXAsIHBkc2MtXHUwMDNlZGV2Y21kX3RpbWVvdXQpO1xuJiM0MztcdGtmcmVlKGNvbXBvbmVudF90YmwpO1xuJiM0MztcdGlmIChlcnIpIHtcbiYjNDM7XHRcdGRldl9lcnIoZGV2LCBcJiMzNDtGYWlsZWQgc2VuZGluZyBjb21wb25lbnQgdGFibGU6ICVwZVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0RVJSX1BUUihlcnIpKTtcbiYjNDM7XHRcdGdvdG8gZnJlZV9jb21wb25lbnRfcHJpdjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHNraXBfY29tcG9uZW50ID0gY29tcC5zZW5kX2NvbXBvbmVudF90YmwucmVzcG9uc2UgPT0gMTtcbiYjNDM7XG4mIzQzO2FkZF9jb21wb25lbnRfcHJpdjpcbiYjNDM7XHRjb21wb25lbnRfcHJpdi1cdTAwM2Vza2lwID0gc2tpcF9jb21wb25lbnQ7XG4mIzQzO1x0Y29tcG9uZW50X3ByaXYtXHUwMDNlY29tcG9uZW50X2lkID0gY29tcG9uZW50LVx1MDAzZWlkZW50aWZpZXI7XG4mIzQzO1x0bGlzdF9hZGQoXHUwMDI2Y29tcG9uZW50X3ByaXYtXHUwMDNlbGlzdF9lbnRyeSwgXHUwMDI2cHJpdi1cdTAwM2Vjb21wb25lbnRzKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztmcmVlX2NvbXBvbmVudF9wcml2OlxuJiM0MztcdGtmcmVlKGNvbXBvbmVudF9wcml2KTtcbiYjNDM7XHRyZXR1cm4gZXJyO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgcGRzY19nZXRfY29tcG9uZW50X2luZm8oc3RydWN0IHBkc2MgKnBkc2MpXG4mIzQzO3tcbiYjNDM7XHR1bmlvbiBwZHNfY29yZV9kZXZfY21kIGNtZCA9IHtcbiYjNDM7XHRcdC5nZXRfY29tcG9uZW50X2luZm8ub3Bjb2RlID0gUERTX0NPUkVfQ01EX0dFVF9DT01QT05FTlRfSU5GTyxcbiYjNDM7XHRcdC5nZXRfY29tcG9uZW50X2luZm8udmVyID0gMSxcbiYjNDM7XHR9O1xuJiM0MztcdHN0cnVjdCBwZHNfY29yZV9jb21wb25lbnRfbGlzdF9pbmZvICpsaXN0X2luZm87XG4mIzQzO1x0c3RydWN0IHBkc2NfZGVmZXJyZWRfZG1hICpkZWZlcnJlZDtcbiYjNDM7XHR1bmlvbiBwZHNfY29yZV9kZXZfY29tcCBjb21wID0ge307XG4mIzQzO1x0ZG1hX2FkZHJfdCBkbWFfYWRkcjtcbiYjNDM7XHR1OCBudW1fY29tcG9uZW50cztcbiYjNDM7XHRpbnQgZXJyLCBpO1xuJiM0MztcbiYjNDM7XHRkZWZlcnJlZCA9IGttYWxsb2Nfb2JqKCpkZWZlcnJlZCk7XG4mIzQzO1x0aWYgKCFkZWZlcnJlZClcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiYjNDM7XHRsaXN0X2luZm8gPSBremFsbG9jKFBEU19QQUdFX1NJWkUsIEdGUF9LRVJORUwpO1xuJiM0MztcdGlmICghbGlzdF9pbmZvKSB7XG4mIzQzO1x0XHRrZnJlZShkZWZlcnJlZCk7XG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGRtYV9hZGRyID0gZG1hX21hcF9zaW5nbGUocGRzYy1cdTAwM2VkZXYsIGxpc3RfaW5mbywgUERTX1BBR0VfU0laRSxcbiYjNDM7XHRcdFx0XHQgIERNQV9GUk9NX0RFVklDRSk7XG4mIzQzO1x0aWYgKGRtYV9tYXBwaW5nX2Vycm9yKHBkc2MtXHUwMDNlZGV2LCBkbWFfYWRkcikpIHtcbiYjNDM7XHRcdGRldl9lcnIocGRzYy1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdFwmIzM0O0ZhaWxlZCB0byBkbWFfbWFwIGNvbXBvbmVudF9saXN0X2luZm8gbGVuZ3RoICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRQRFNfUEFHRV9TSVpFKTtcbiYjNDM7XHRcdGtmcmVlKGxpc3RfaW5mbyk7XG4mIzQzO1x0XHRrZnJlZShkZWZlcnJlZCk7XG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGNtZC5nZXRfY29tcG9uZW50X2luZm8uZGF0YV9sZW4gPSBjcHVfdG9fbGUxNihQRFNfUEFHRV9TSVpFKTtcbiYjNDM7XHRjbWQuZ2V0X2NvbXBvbmVudF9pbmZvLmRhdGFfcGEgPSBjcHVfdG9fbGU2NChkbWFfYWRkcik7XG4mIzQzO1xuJiM0MztcdGVyciA9IHBkc2NfZGV2Y21kKHBkc2MsIFx1MDAyNmNtZCwgXHUwMDI2Y29tcCwgcGRzYy1cdTAwM2VkZXZjbWRfdGltZW91dCAqIDIpO1xuJiM0MztcdGlmIChlcnIgPT0gLUVUSU1FRE9VVCB8fCBlcnIgPT0gLUVBR0FJTikge1xuJiM0MztcdFx0cGRzY19kZWZlcnJlZF9kbWFfYWRkKHBkc2MsIGRlZmVycmVkLCBkbWFfYWRkciwgbGlzdF9pbmZvLFxuJiM0MztcdFx0XHRcdCAgICAgIFBEU19QQUdFX1NJWkUsIERNQV9GUk9NX0RFVklDRSk7XG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0a2ZyZWUoZGVmZXJyZWQpO1xuJiM0MztcdGRtYV91bm1hcF9zaW5nbGUocGRzYy1cdTAwM2VkZXYsIGRtYV9hZGRyLCBQRFNfUEFHRV9TSVpFLCBETUFfRlJPTV9ERVZJQ0UpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0aWYgKGNvbXAuZ2V0X2NvbXBvbmVudF9pbmZvLnZlciA9PSAwKSB7XG4mIzQzO1x0XHQvKiBEb24mIzM5O3Qgc3VwcG9ydCBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IGFzIHZlcnNpb24gMCBoYXNcbiYjNDM7XHRcdCAqIGFsaWdubWVudCBpc3N1ZXMsIHNvIGdpdmUgYSBoaW50IHRvIHVzZXJzIHRvIHVwZGF0ZVxuJiM0MztcdFx0ICogdGhlaXIgZmlybXdhcmVcbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0ZGV2X3dhcm5fb25jZShwZHNjLVx1MDAzZWRldixcbiYjNDM7XHRcdFx0ICAgICAgXCYjMzQ7SW5jb21wYXRpYmxlIGdldF9jb21wb25lbnRfaW5mbyB2ZXJzaW9uICV1IHJlcG9ydGVkIGJ5IGZpcm13YXJlXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgICAgICBjb21wLmdldF9jb21wb25lbnRfaW5mby52ZXIpO1xuJiM0MztcdFx0ZXJyID0gMDtcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bnVtX2NvbXBvbmVudHMgPSBsaXN0X2luZm8tXHUwMDNlbnVtX2NvbXBvbmVudHM7XG4mIzQzO1x0aWYgKG51bV9jb21wb25lbnRzIFx1MDAzZSBQRFNfQ09SRV9GV19DT01QT05FTlRfTElTVF9MRU4pIHtcbiYjNDM7XHRcdGVyciA9IC1FTk9NRU07XG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHBkc2MtXHUwMDNlZndfY29tcG9uZW50cy5udW1fY29tcG9uZW50cyA9IG51bV9jb21wb25lbnRzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG51bV9jb21wb25lbnRzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0c3RydWN0IHBkc19jb3JlX2Z3X2NvbXBvbmVudF9pbmZvICppbmZvID1cbiYjNDM7XHRcdFx0XHUwMDI2cGRzYy1cdTAwM2Vmd19jb21wb25lbnRzLmluZm9baV07XG4mIzQzO1xuJiM0MztcdFx0bWVtY3B5KGluZm8sIFx1MDAyNmxpc3RfaW5mby1cdTAwM2VpbmZvW2ldLCBzaXplb2YoKmluZm8pKTtcbiYjNDM7XHRcdGluZm8tXHUwMDNldmVyc2lvbltQRFNfQ09SRV9GV19DT01QT05FTlRfVkVSX0JVRkxFTiAtIDFdID0gMDtcbiYjNDM7XHRcdGluZm8tXHUwMDNlbmFtZVtQRFNfQ09SRV9GV19DT01QT05FTlRfTkFNRV9CVUZMRU4gLSAxXSA9IDA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7b3V0OlxuJiM0MztcdGtmcmVlKGxpc3RfaW5mbyk7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBwZHNjX2RldmNtZF9zZW5kX2NvbXBvbmVudChzdHJ1Y3QgcGRzYyAqcGRzYyxcbiYjNDM7XHRcdFx0XHQgICAgICBzdHJ1Y3QgcGRzX2NvcmVfZmxhc2hfY29tcG9uZW50ICppbmZvLFxuJiM0MztcdFx0XHRcdCAgICAgIHUxNiBpbmZvX3N6LCBkbWFfYWRkcl90IGFkZHIsIHUzMiBsZW5ndGgsXG4mIzQzO1x0XHRcdFx0ICAgICAgdTMyIG9mZnNldCwgdTE2IHNsb3RfaWQsXG4mIzQzO1x0XHRcdFx0ICAgICAgdW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgKmNvbXApXG4mIzQzO3tcbiYjNDM7XHR1bmlvbiBwZHNfY29yZV9kZXZfY21kIGNtZCA9IHtcbiYjNDM7XHRcdC5zZW5kX2NvbXBvbmVudC5vcGNvZGUgPSBQRFNfQ09SRV9DTURfU0VORF9DT01QT05FTlQsXG4mIzQzO1x0XHQuc2VuZF9jb21wb25lbnQudmVyID0gMSxcbiYjNDM7XHRcdC5zZW5kX2NvbXBvbmVudC5vcGVyYXRpb24gPSBQRFNfQ09SRV9TRU5EX0NPTVBPTkVOVF9TVEFSVCxcbiYjNDM7XHRcdC5zZW5kX2NvbXBvbmVudC5kYXRhX3BhID0gY3B1X3RvX2xlNjQoYWRkciksXG4mIzQzO1x0XHQuc2VuZF9jb21wb25lbnQuZGF0YV9sZW4gPSBjcHVfdG9fbGUzMihsZW5ndGgpLFxuJiM0MztcdFx0LnNlbmRfY29tcG9uZW50Lm9mZnNldCA9IGNwdV90b19sZTMyKG9mZnNldCksXG4mIzQzO1x0XHQuc2VuZF9jb21wb25lbnQuc2xvdF9pZCA9IHNsb3RfaWQsXG4mIzQzO1x0fTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSAzMDAgKiBIWjtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHN0YXJ0X3RpbWU7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBlbmRfdGltZTtcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHRzdGFydF90aW1lID0gamlmZmllcztcbiYjNDM7XHRlbmRfdGltZSA9IHN0YXJ0X3RpbWUgJiM0MzsgdGltZW91dDtcbiYjNDM7XHRkbyB7XG4mIzQzO1x0XHQvKiBwcmV2ZW50IG5vaXN5L2JlbmlnbiBkZXZjbWQgZmFpbHVyZXMgKi9cbiYjNDM7XHRcdGVyciA9IHBkc2NfZGV2Y21kX3dpdGhfZGF0YV9ub21zZyhwZHNjLCBcdTAwMjZjbWQsIGluZm8sIGluZm9fc3osXG4mIzQzO1x0XHRcdFx0XHRcdCAgY29tcCwgNjApO1xuJiM0MztcdFx0aWYgKGVyciAhPSAtRUFHQUlOKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XG4mIzQzO1x0XHQvKiBpZiByZXF1aXJlZCwgc3Vic2VxdWVudCBjb21tYW5kcyBjaGVjayBzdGF0dXMgb2ZcbiYjNDM7XHRcdCAqIFBEU19DT1JFX0NNRF9TRU5EX0NPTVBPTkVOVCBjb21tYW5kLCB3aGljaCByZXR1cm5zXG4mIzQzO1x0XHQgKiBFQUdBSU4gd2hpbGUgdGhlIGNvbW1hbmQgaXMgc3RpbGwgcnVubmluZyxcbiYjNDM7XHRcdCAqIGVsc2Ugd2UgZ2V0IHRoZSBmaW5hbCBjb21tYW5kIHN0YXR1cy5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0Y21kLnNlbmRfY29tcG9uZW50Lm9wZXJhdGlvbiA9IFBEU19DT1JFX1NFTkRfQ09NUE9ORU5UX1NUQVRVUztcbiYjNDM7XHRcdG1zbGVlcCgyMCk7XG4mIzQzO1x0fSB3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgZW5kX3RpbWUpKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGVyciA9PSAtRUFHQUlOIHx8IGVyciA9PSAtRVRJTUVET1VUKVxuJiM0MztcdFx0ZGV2X2VycihwZHNjLVx1MDAzZWRldiwgXCYjMzQ7UERTX0NPUkVfQ01EX1NFTkRfQ09NUE9ORU5UIHRpbWVkIG91dFxcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBlcnI7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcGRzY19mbGFzaF9jb21wb25lbnRfY2h1bmsoc3RydWN0IHBkc2MgKnBkc2MsIHN0cnVjdCBkZXZpY2UgKmRldixcbiYjNDM7XHRcdFx0XHQgICAgICBzdHJ1Y3QgcGRzX2NvcmVfZmxhc2hfY29tcG9uZW50ICppbmZvLFxuJiM0MztcdFx0XHRcdCAgICAgIHUxNiBpbmZvX3N6LCBjb25zdCB1OCAqZGF0YSwgdTE2IGNvcHlfc3osXG4mIzQzO1x0XHRcdFx0ICAgICAgdTMyIG9mZnNldCwgdTggc2xvdF9pZCxcbiYjNDM7XHRcdFx0XHQgICAgICB1bmlvbiBwZHNfY29yZV9kZXZfY29tcCAqY29tcClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwZHNjX2RlZmVycmVkX2RtYSAqZGVmZXJyZWQ7XG4mIzQzO1x0ZG1hX2FkZHJfdCBkbWFfYWRkcjtcbiYjNDM7XHR1OCAqY29tcG9uZW50X2RhdGE7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0ZGVmZXJyZWQgPSBrbWFsbG9jX29iaigqZGVmZXJyZWQsIEdGUF9LRVJORUwpO1xuJiM0MztcdGlmICghZGVmZXJyZWQpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0Y29tcG9uZW50X2RhdGEgPSBrbWVtZHVwKGRhdGEsIGNvcHlfc3osIEdGUF9LRVJORUwpO1xuJiM0MztcdGlmICghY29tcG9uZW50X2RhdGEpIHtcbiYjNDM7XHRcdGtmcmVlKGRlZmVycmVkKTtcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZG1hX2FkZHIgPSBkbWFfbWFwX3NpbmdsZShkZXYsIGNvbXBvbmVudF9kYXRhLCBjb3B5X3N6LCBETUFfVE9fREVWSUNFKTtcbiYjNDM7XHRpZiAoZG1hX21hcHBpbmdfZXJyb3IoZGV2LCBkbWFfYWRkcikpIHtcbiYjNDM7XHRcdGRldl9lcnIoZGV2LFxuJiM0MztcdFx0XHRcJiMzNDtGYWlsZWQgdG8gZG1hX21hcCBjb21wb25lbnRfZGF0YSBhdCBvZmZzZXQgMHgleCBjb3B5X3N6IDB4JXhcXG5cJiMzNDssXG4mIzQzO1x0XHRcdG9mZnNldCwgY29weV9zeik7XG4mIzQzO1x0XHRrZnJlZShjb21wb25lbnRfZGF0YSk7XG4mIzQzO1x0XHRrZnJlZShkZWZlcnJlZCk7XG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGVyciA9IHBkc2NfZGV2Y21kX3NlbmRfY29tcG9uZW50KHBkc2MsIGluZm8sIGluZm9fc3osIGRtYV9hZGRyLFxuJiM0MztcdFx0XHRcdFx0IGNvcHlfc3osIG9mZnNldCwgc2xvdF9pZCwgY29tcCk7XG4mIzQzO1x0aWYgKGVyciA9PSAtRVRJTUVET1VUIHx8IGVyciA9PSAtRUFHQUlOKSB7XG4mIzQzO1x0XHRwZHNjX2RlZmVycmVkX2RtYV9hZGQocGRzYywgZGVmZXJyZWQsIGRtYV9hZGRyLFxuJiM0MztcdFx0XHRcdCAgICAgIGNvbXBvbmVudF9kYXRhLCBjb3B5X3N6LCBETUFfVE9fREVWSUNFKTtcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRrZnJlZShkZWZlcnJlZCk7XG4mIzQzO1x0ZG1hX3VubWFwX3NpbmdsZShkZXYsIGRtYV9hZGRyLCBjb3B5X3N6LCBETUFfVE9fREVWSUNFKTtcbiYjNDM7XHRrZnJlZShjb21wb25lbnRfZGF0YSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBlcnI7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcGRzY19mbGFzaF9jb21wb25lbnQoc3RydWN0IHBsZG1mdyAqY29udGV4dCxcbiYjNDM7XHRcdFx0XHRzdHJ1Y3QgcGxkbWZ3X2NvbXBvbmVudCAqY29tcG9uZW50KVxuJiM0Mzt7XG4mIzQzO1x0Y2hhciBjb21wb25lbnRfbmFtZV9idWZbUERTQ19GV19DT01QT05FTlRfRlVMTF9OQU1FX0JVRkxFTl07XG4mIzQzO1x0c3RydWN0IHBkc19jb3JlX2Z3dV9wcml2ICpwcml2ID1cbiYjNDM7XHRcdGNvbnRhaW5lcl9vZihjb250ZXh0LCBzdHJ1Y3QgcGRzX2NvcmVfZnd1X3ByaXYsIGNvbnRleHQpO1xuJiM0MztcdHN0cnVjdCBwZHNfY29yZV9mbGFzaF9jb21wb25lbnQgKmNvbXBvbmVudF9pbmZvO1xuJiM0MztcdGNvbnN0IGNoYXIgKmNvbXBvbmVudF9uYW1lID0gTlVMTDtcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBjb250ZXh0LVx1MDAzZWRldjtcbiYjNDM7XHRzdHJ1Y3QgcGRzYyAqcGRzYyA9IHByaXYtXHUwMDNlcGRzYztcbiYjNDM7XHR1MTYgYnVmX3N6LCBpbmZvX3N6O1xuJiM0MztcdHN0cnVjdCBkZXZsaW5rICpkbDtcbiYjNDM7XHR1OCBjb21wb25lbnRfdHlwZTtcbiYjNDM7XHR1MzIgdG90YWxfbGVuO1xuJiM0MztcdHUzMiBvZmZzZXQ7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0Y29tcG9uZW50X3R5cGUgPSBwZHNjX2dldF9jb21wb25lbnRfdHlwZV9ieV9pZChwZHNjLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgICAgY29tcG9uZW50LVx1MDAzZWlkZW50aWZpZXIpO1xuJiM0MztcdGlmIChjb21wb25lbnRfdHlwZSkge1xuJiM0MztcdFx0Y29uc3QgY2hhciAqdHlwZV9uYW1lID0gcGRzY19md190eXBlX3RvX25hbWUoY29tcG9uZW50X3R5cGUpO1xuJiM0MztcbiYjNDM7XHRcdGlmIChjb21wb25lbnRfdHlwZSA9PSBQRFNfQ09SRV9GV19UWVBFX01BSU4pIHtcbiYjNDM7XHRcdFx0Y29tcG9uZW50X25hbWUgPSBcJiMzNDtmd1wmIzM0OztcbiYjNDM7XHRcdH0gZWxzZSBpZiAodHlwZV9uYW1lKSB7XG4mIzQzO1x0XHRcdHNucHJpbnRmKGNvbXBvbmVudF9uYW1lX2J1Ziwgc2l6ZW9mKGNvbXBvbmVudF9uYW1lX2J1ZiksXG4mIzQzO1x0XHRcdFx0IFwmIzM0OyVzJXNcJiMzNDssIFBEU0NfRldfQ09NUE9ORU5UX1BSRUZJWCwgdHlwZV9uYW1lKTtcbiYjNDM7XHRcdFx0Y29tcG9uZW50X25hbWUgPSBjb21wb25lbnRfbmFtZV9idWY7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRkbCA9IHByaXZfdG9fZGV2bGluayhwZHNjKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHBkc2Nfc2tpcF9jb21wb25lbnQocHJpdiwgY29tcG9uZW50LVx1MDAzZWlkZW50aWZpZXIpKSB7XG4mIzQzO1x0XHRkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9zdGF0dXNfbm90aWZ5KGRsLCBcJiMzNDtTa2lwcGVkXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0XHQgICBjb21wb25lbnRfbmFtZSwgMCwgMCk7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHRvdGFsX2xlbiA9IGNvbXBvbmVudC1cdTAwM2Vjb21wb25lbnRfc2l6ZTtcbiYjNDM7XHRkZXZfZGJnKGRldixcbiYjNDM7XHRcdFwmIzM0O2NvbXBvbmVudCBuYW1lICVzIGNsYXNzICV1IGlkICV1IGFjdF9tZXRoICV1IHZlcl9zdHIgJS4qcyBpbmRleCAldSBzaXplICV1XFxuXCYjMzQ7LFxuJiM0MztcdFx0Y29tcG9uZW50X25hbWUgPzogXCYjMzQ7KHVua25vd24pXCYjMzQ7LCBjb21wb25lbnQtXHUwMDNlY2xhc3NpZmljYXRpb24sXG4mIzQzO1x0XHRjb21wb25lbnQtXHUwMDNlaWRlbnRpZmllciwgY29tcG9uZW50LVx1MDAzZWFjdGl2YXRpb25fbWV0aG9kLFxuJiM0MztcdFx0Y29tcG9uZW50LVx1MDAzZXZlcnNpb25fbGVuLCBjb21wb25lbnQtXHUwMDNldmVyc2lvbl9zdHJpbmcsXG4mIzQzO1x0XHRjb21wb25lbnQtXHUwMDNlaW5kZXgsIGNvbXBvbmVudC1cdTAwM2Vjb21wb25lbnRfc2l6ZSk7XG4mIzQzO1xuJiM0MztcdGJ1Zl9zeiA9IHNpemVvZihwZHNjLVx1MDAzZWNtZF9yZWdzLVx1MDAzZWRhdGEpO1xuJiM0MztcdGluZm9fc3ogPSBzdHJ1Y3Rfc2l6ZShjb21wb25lbnRfaW5mbywgdmVyc2lvbl9zdHIsXG4mIzQzO1x0XHRcdCAgICAgIGNvbXBvbmVudC1cdTAwM2V2ZXJzaW9uX2xlbik7XG4mIzQzO1x0aWYgKGluZm9fc3ogXHUwMDNlIGJ1Zl9zeikge1xuJiM0MztcdFx0ZGV2X2VycihkZXYsIFwmIzM0O2NvbXBvbmVudF9pbmZvIHNpemUgJWQgdG9vIGJpZywgbWF4IHNpemU6ICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRpbmZvX3N6LCBidWZfc3opO1xuJiM0MztcdFx0cmV0dXJuIC1FTk9TUEM7XG4mIzQzO1x0fVxuJiM0MztcdGNvbXBvbmVudF9pbmZvID0gdnphbGxvYyhpbmZvX3N6KTtcbiYjNDM7XHRpZiAoIWNvbXBvbmVudF9pbmZvKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdGNvbXBvbmVudF9pbmZvLVx1MDAzZWNvbXBhcmlzb25fc3RhbXAgPVxuJiM0MztcdFx0Y3B1X3RvX2xlMzIoY29tcG9uZW50LVx1MDAzZWNvbXBhcmlzb25fc3RhbXApO1xuJiM0MztcdGNvbXBvbmVudF9pbmZvLVx1MDAzZWltYWdlX3NpemUgPSBjcHVfdG9fbGUzMih0b3RhbF9sZW4pO1xuJiM0MztcdGNvbXBvbmVudF9pbmZvLVx1MDAzZWNsYXNzaWZpY2F0aW9uID0gY3B1X3RvX2xlMTYoY29tcG9uZW50LVx1MDAzZWNsYXNzaWZpY2F0aW9uKTtcbiYjNDM7XHRjb21wb25lbnRfaW5mby1cdTAwM2VpZGVudGlmaWVyID0gY3B1X3RvX2xlMTYoY29tcG9uZW50LVx1MDAzZWlkZW50aWZpZXIpO1xuJiM0MztcdGNvbXBvbmVudF9pbmZvLVx1MDAzZW9wdGlvbnMgPSBjcHVfdG9fbGUxNihjb21wb25lbnQtXHUwMDNlb3B0aW9ucyk7XG4mIzQzO1x0Y29tcG9uZW50X2luZm8tXHUwMDNldmVyc2lvbl9zdHJfdHlwZSA9IGNvbXBvbmVudC1cdTAwM2V2ZXJzaW9uX3R5cGU7XG4mIzQzO1x0Y29tcG9uZW50X2luZm8tXHUwMDNldmVyc2lvbl9zdHJfbGVuID0gY29tcG9uZW50LVx1MDAzZXZlcnNpb25fbGVuO1xuJiM0MztcdG1lbWNweShjb21wb25lbnRfaW5mby1cdTAwM2V2ZXJzaW9uX3N0ciwgY29tcG9uZW50LVx1MDAzZXZlcnNpb25fc3RyaW5nLFxuJiM0MztcdCAgICAgICBjb21wb25lbnQtXHUwMDNldmVyc2lvbl9sZW4pO1xuJiM0MztcbiYjNDM7XHRvZmZzZXQgPSAwO1xuJiM0MztcdHdoaWxlIChvZmZzZXQgXHUwMDNjIHRvdGFsX2xlbikge1xuJiM0MztcdFx0dW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgY29tcCA9IHt9O1xuJiM0MztcdFx0dTE2IGNvcHlfc3o7XG4mIzQzO1xuJiM0MztcdFx0Y29weV9zeiA9IG1pbl90KHVuc2lnbmVkIGludCwgUERTX1BBR0VfU0laRSxcbiYjNDM7XHRcdFx0XHR0b3RhbF9sZW4gLSBvZmZzZXQpO1xuJiM0MztcbiYjNDM7XHRcdGVyciA9IHBkc2NfZmxhc2hfY29tcG9uZW50X2NodW5rKHBkc2MsIGRldiwgY29tcG9uZW50X2luZm8sXG4mIzQzO1x0XHRcdFx0XHRcdCBpbmZvX3N6LFxuJiM0MztcdFx0XHRcdFx0XHQgY29tcG9uZW50LVx1MDAzZWNvbXBvbmVudF9kYXRhICYjNDM7XG4mIzQzO1x0XHRcdFx0XHRcdCBvZmZzZXQsIGNvcHlfc3osIG9mZnNldCxcbiYjNDM7XHRcdFx0XHRcdFx0IFBEU19DT1JFX0ZXX1NMT1RfSU5WQUxJRCxcbiYjNDM7XHRcdFx0XHRcdFx0IFx1MDAyNmNvbXApO1xuJiM0MztcdFx0aWYgKGVyciBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICBjb21wLnNlbmRfY29tcG9uZW50LmNvbXBhdF9yZXNwb25zZSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICAoY29tcC5zZW5kX2NvbXBvbmVudC5jb21wYXRfcmVzcG9uc2VfY29kZSA9PVxuJiM0MztcdFx0ICAgICBQRFNfQ09SRV9DT01QT05FTlRfU1RBTVBfSURFTlRJQ0FMIHx8XG4mIzQzO1x0XHQgICAgIGNvbXAuc2VuZF9jb21wb25lbnQuY29tcGF0X3Jlc3BvbnNlX2NvZGUgPT1cbiYjNDM7XHRcdCAgICAgUERTX0NPUkVfQ09NUE9ORU5UX1NUQU1QX0xPV0VSKSkge1xuJiM0MztcdFx0XHRlcnIgPSAwO1xuJiM0MztcdFx0XHRkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9zdGF0dXNfbm90aWZ5KGRsLCBcJiMzNDtTa2lwcGVkXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgIGNvbXBvbmVudF9uYW1lLFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgIDAsIDApO1xuJiM0MztcdFx0XHRnb3RvIHNraXBfY29tcG9uZW50O1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGlmIChlcnIpIHtcbiYjNDM7XHRcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKHByaXYtXHUwMDNlZXh0YWNrLFxuJiM0MztcdFx0XHRcdFx0ICAgXCYjMzQ7RmFpbGVkIHRvIGZsYXNoIGNvbXBvbmVudFwmIzM0Oyk7XG4mIzQzO1x0XHRcdGdvdG8gZXJyX291dDtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRvZmZzZXQgJiM0Mzs9IGNvcHlfc3o7XG4mIzQzO1x0XHRkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9zdGF0dXNfbm90aWZ5KGRsLFxuJiM0MztcdFx0XHRcdFx0XHQgICBcJiMzNDtFcmFzaW5nL0ZsYXNoaW5nXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0XHQgICBjb21wb25lbnRfbmFtZSwgb2Zmc2V0LFxuJiM0MztcdFx0XHRcdFx0XHQgICB0b3RhbF9sZW4pO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0dmZyZWUoY29tcG9uZW50X2luZm8pO1xuJiM0MztcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7ZXJyX291dDpcbiYjNDM7XHRkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9zdGF0dXNfbm90aWZ5KGRsLFxuJiM0MztcdFx0XHRcdFx0ICAgXCYjMzQ7RXJhc2luZy9GbGFzaGluZyBDb21wb25lbnQgRmFpbGVkXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0ICAgY29tcG9uZW50X25hbWUsIDAsIDApO1xuJiM0Mztza2lwX2NvbXBvbmVudDpcbiYjNDM7XHR2ZnJlZShjb21wb25lbnRfaW5mbyk7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBwZHNjX2RldmNtZF9maW5hbGl6ZV91cGRhdGUoc3RydWN0IHBkc2MgKnBkc2MpXG4mIzQzO3tcbiYjNDM7XHR1bmlvbiBwZHNfY29yZV9kZXZfY21kIGNtZCA9IHtcbiYjNDM7XHRcdC5maW5hbGl6ZV91cGRhdGUub3Bjb2RlID0gUERTX0NPUkVfQ01EX0ZJTkFMSVpFX1VQREFURSxcbiYjNDM7XHRcdC5maW5hbGl6ZV91cGRhdGUudmVyID0gMSxcbiYjNDM7XHR9O1xuJiM0MztcdHVuaW9uIHBkc19jb3JlX2Rldl9jb21wIGNvbXAgPSB7fTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHBkc2NfZGV2Y21kKHBkc2MsIFx1MDAyNmNtZCwgXHUwMDI2Y29tcCwgcGRzYy1cdTAwM2VkZXZjbWRfdGltZW91dCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcGRzY19maW5hbGl6ZV91cGRhdGUoc3RydWN0IHBsZG1mdyAqY29udGV4dClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwZHNfY29yZV9md3VfcHJpdiAqcHJpdiA9XG4mIzQzO1x0XHRjb250YWluZXJfb2YoY29udGV4dCwgc3RydWN0IHBkc19jb3JlX2Z3dV9wcml2LCBjb250ZXh0KTtcbiYjNDM7XHRjb25zdCBjaGFyICpjb21wb25lbnRfbmFtZSA9IHByaXYtXHUwMDNlcGFyYW1zLVx1MDAzZWNvbXBvbmVudDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHN0YXJ0X3RpbWUsIGVuZF90aW1lO1xuJiM0MztcdHN0cnVjdCBkZXZpY2UgKmRldiA9IGNvbnRleHQtXHUwMDNlZGV2O1xuJiM0MztcdHN0cnVjdCBwZHNjICpwZHNjID0gcHJpdi1cdTAwM2VwZHNjO1xuJiM0MztcdHN0cnVjdCBkZXZsaW5rICpkbDtcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHRkbCA9IHByaXZfdG9fZGV2bGluayhwZHNjKTtcbiYjNDM7XG4mIzQzO1x0c3RhcnRfdGltZSA9IGppZmZpZXM7XG4mIzQzO1x0ZW5kX3RpbWUgPSBzdGFydF90aW1lICYjNDM7IChQRFNDX0ZXX0lOU1RBTExfVElNRU9VVCAqIEhaKTtcbiYjNDM7XHRkbyB7XG4mIzQzO1x0XHRlcnIgPSBwZHNjX2RldmNtZF9maW5hbGl6ZV91cGRhdGUocGRzYyk7XG4mIzQzO1x0XHRpZiAoZXJyICE9IC1FQUdBSU4pXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRcdGRldl9kYmcoZGV2LCBcJiMzNDtyZXRyeWluZyBmaW5hbGl6ZV91cGRhdGU6ICVwZVxcblwmIzM0OywgRVJSX1BUUihlcnIpKTtcbiYjNDM7XHRcdG1zbGVlcCgyMCk7XG4mIzQzO1x0fSB3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgZW5kX3RpbWUpIFx1MDAyNlx1MDAyNiBlcnIgPT0gLUVBR0FJTik7XG4mIzQzO1xuJiM0MztcdGlmIChlcnIpIHtcbiYjNDM7XHRcdGRldmxpbmtfZmxhc2hfdXBkYXRlX3N0YXR1c19ub3RpZnkoZGwsIFwmIzM0O0ZpbmFsaXplIFVwZGF0ZSBGYWlsZWRcJiMzNDssXG4mIzQzO1x0XHRcdFx0XHRcdCAgIGNvbXBvbmVudF9uYW1lLCAwLCAwKTtcbiYjNDM7XHRcdE5MX1NFVF9FUlJfTVNHX01PRChwcml2LVx1MDAzZWV4dGFjaywgXCYjMzQ7RmluYWxpemUgdXBkYXRlIGZhaWxlZFwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZGV2bGlua19mbGFzaF91cGRhdGVfc3RhdHVzX25vdGlmeShkbCwgXCYjMzQ7RmluYWxpemVkIFVwZGF0ZVwmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdCAgIGNvbXBvbmVudF9uYW1lLCAwLCAwKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBwbGRtZndfb3BzIHBkc2NfcGxkbWZ3X29wcyA9IHtcbiYjNDM7XHQubWF0Y2hfcmVjb3JkID0gcGRzY19tYXRjaF9yZWNvcmRfZGVzY3MsXG4mIzQzO1x0LnNlbmRfcGFja2FnZV9kYXRhID0gcGRzY19zZW5kX3BhY2thZ2VfZGF0YSxcbiYjNDM7XHQuc2VuZF9jb21wb25lbnRfdGFibGUgPSBwZHNjX3NlbmRfY29tcG9uZW50X3RhYmxlLFxuJiM0MztcdC5mbGFzaF9jb21wb25lbnQgPSBwZHNjX2ZsYXNoX2NvbXBvbmVudCxcbiYjNDM7XHQuZmluYWxpemVfdXBkYXRlID0gcGRzY19maW5hbGl6ZV91cGRhdGVcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcGRzY19wbGRtX2Zpcm13YXJlX3VwZGF0ZShzdHJ1Y3QgcGRzYyAqcGRzYyxcbiYjNDM7XHRcdFx0XHQgICAgIHN0cnVjdCBkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9wYXJhbXMgKnBhcmFtcyxcbiYjNDM7XHRcdFx0XHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayxcbiYjNDM7XHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcGRzX2NvcmVfZnd1X3ByaXYgcHJpdiA9IHt9O1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdGlmICghcGRzYy1cdTAwM2Vmd19jb21wb25lbnRzLm51bV9jb21wb25lbnRzKSB7XG4mIzQzO1x0XHRlcnIgPSBwZHNjX2dldF9jb21wb25lbnRfaW5mbyhwZHNjKTtcbiYjNDM7XHRcdGlmIChlcnIpIHtcbiYjNDM7XHRcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcbiYjNDM7XHRcdFx0XHRcdCAgIFwmIzM0O0ZhaWxlZCB0byBnZXQgY29tcG9uZW50IGluZm9cJiMzNDspO1xuJiM0MztcdFx0XHRyZXR1cm4gZXJyO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHBhcmFtcy1cdTAwM2Vjb21wb25lbnQpIHtcbiYjNDM7XHRcdHU4IHR5cGUgPSBwZHNjX25hbWVfdG9fZndfdHlwZShwYXJhbXMtXHUwMDNlY29tcG9uZW50KTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoIXR5cGUgfHwgIXBkc2NfY29tcG9uZW50X3R5cGVfZXhpc3RzKHBkc2MsIHR5cGUpKSB7XG4mIzQzO1x0XHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFwmIzM0O1Vua25vd24gY29tcG9uZW50IG5hbWVcJiMzNDspO1xuJiM0MztcdFx0XHRyZXR1cm4gLUVOT0VOVDtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdElOSVRfTElTVF9IRUFEKFx1MDAyNnByaXYuY29tcG9uZW50cyk7XG4mIzQzO1x0cHJpdi5jb250ZXh0Lm9wcyA9IFx1MDAyNnBkc2NfcGxkbWZ3X29wcztcbiYjNDM7XHRwcml2LmNvbnRleHQuZGV2ID0gcGRzYy1cdTAwM2VkZXY7XG4mIzQzO1x0cHJpdi5wYXJhbXMgPSBwYXJhbXM7XG4mIzQzO1x0cHJpdi5leHRhY2sgPSBleHRhY2s7XG4mIzQzO1x0cHJpdi5wZHNjID0gcGRzYztcbiYjNDM7XG4mIzQzO1x0ZXJyID0gcGxkbWZ3X2ZsYXNoX2ltYWdlKFx1MDAyNnByaXYuY29udGV4dCwgZncpO1xuJiM0MztcdGlmICghZXJyIFx1MDAyNlx1MDAyNiBwYXJhbXMtXHUwMDNlY29tcG9uZW50IFx1MDAyNlx1MDAyNiAhcHJpdi5jb21wb25lbnRfZm91bmQpIHtcbiYjNDM7XHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXG4mIzQzO1x0XHRcdFx0ICAgXCYjMzQ7UmVxdWVzdGVkIGNvbXBvbmVudCBub3QgcHJlc2VudCBpbiBmaXJtd2FyZSBwYWNrYWdlXCYjMzQ7KTtcbiYjNDM7XHRcdGVyciA9IC1FTk9FTlQ7XG4mIzQzO1x0fVxuJiM0MztcdHBkc2NfZnJlZV9md3VfcHJpdihcdTAwMjZwcml2KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IHBkc2NfZmlybXdhcmVfdXBkYXRlKHN0cnVjdCBwZHNjICpwZHNjLFxuJiM0MztcdFx0XHQgc3RydWN0IGRldmxpbmtfZmxhc2hfdXBkYXRlX3BhcmFtcyAqcGFyYW1zLFxuJiM0MztcdFx0XHQgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0aWYgKHBkc2MtXHUwMDNlZGV2X2lkZW50LnZlcnNpb24gXHUwMDNlPSBQRFNfQ09SRV9JREVOVElUWV9WRVJTSU9OXzIgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIHBkc2MtXHUwMDNlZGV2X2lkZW50LmNhcGFiaWxpdGllcyBcdTAwMjZcbiYjNDM7XHRcdGNwdV90b19sZTY0KFBEU19DT1JFX0RFVl9DQVBfUExETV9GV19VUERBVEUpKVxuJiM0MztcdFx0ZXJyID0gcGRzY19wbGRtX2Zpcm13YXJlX3VwZGF0ZShwZHNjLCBwYXJhbXMsIGV4dGFjayxcbiYjNDM7XHRcdFx0XHRcdFx0cGFyYW1zLVx1MDAzZWZ3KTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRlcnIgPSBwZHNjX2xlZ2FjeV9maXJtd2FyZV91cGRhdGUocGRzYywgcGFyYW1zLCBleHRhY2spO1xuJiM0MztcbiYjNDM7XHQvKiBJbnZhbGlkYXRlIGNhY2hlZCBjb21wb25lbnQgaW5mbyBzbyBuZXh0IGluZm9fZ2V0IHJlZnJlc2hlcyAqL1xuJiM0MztcdHBkc2NfZndfY29tcG9uZW50c19pbnZhbGlkYXRlKHBkc2MpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZXJyO1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9tYWluLmNcbmluZGV4IDhkOTRhNGQ3MDM5NWUuLjVlMWIwNzg1MDE2M2IgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvbWFpbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvbWFpbi5jXG5AQCAtMjEsNiAmIzQzOzIxLDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHBkc2NfaWRfdGFibGVbXSA9IHtcbiB9O1xuIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBwZHNjX2lkX3RhYmxlKTtcbiBcbiYjNDM7c3RhdGljIHZvaWQgcGRzY19zdG9wX2hlYWx0aF90aHJlYWQoc3RydWN0IHBkc2MgKnBkc2MpO1xuJiM0MztcbiBzdGF0aWMgdm9pZCBwZHNjX3dkdGltZXJfY2Ioc3RydWN0IHRpbWVyX2xpc3QgKnQpXG4ge1xuIFx0c3RydWN0IHBkc2MgKnBkc2MgPSB0aW1lcl9jb250YWluZXJfb2YocGRzYywgdCwgd2R0aW1lcik7XG5AQCAtMzE1LDYgJiM0MzszMTcsNyBAQCBzdGF0aWMgaW50IHBkc2NfaW5pdF9wZihzdHJ1Y3QgcGRzYyAqcGRzYylcbiBcdFx0ZGVzdHJveV93b3JrcXVldWUocGRzYy1cdTAwM2V3cSk7XG4gXHRtdXRleF9kZXN0cm95KFx1MDAyNnBkc2MtXHUwMDNlY29uZmlnX2xvY2spO1xuIFx0bXV0ZXhfZGVzdHJveShcdTAwMjZwZHNjLVx1MDAzZWRldmNtZF9sb2NrKTtcbiYjNDM7XHRwZHNjX2RlZmVycmVkX2RtYV9mcmVlKHBkc2MpO1xuIFx0cGNpX2ZyZWVfaXJxX3ZlY3RvcnMocGRzYy1cdTAwM2VwZGV2KTtcbiBlcnJfb3V0X3VubWFwX2JhcnM6XG4gXHRwZHNjX3VubWFwX2JhcnMocGRzYyk7XG5AQCAtMzUzLDYgJiM0MzszNTYsOCBAQCBzdGF0aWMgaW50IHBkc2NfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXG4gXHRwZHNjLVx1MDAzZXBkZXYgPSBwZGV2O1xuIFx0cGRzYy1cdTAwM2VkZXYgPSBcdTAwMjZwZGV2LVx1MDAzZWRldjtcbiBcdHNldF9iaXQoUERTQ19TX0lOSVRJTkdfRFJJVkVSLCBcdTAwMjZwZHNjLVx1MDAzZXN0YXRlKTtcbiYjNDM7XHRJTklUX0xJU1RfSEVBRChcdTAwMjZwZHNjLVx1MDAzZWRlZmVycmVkX2RtYV9saXN0KTtcbiYjNDM7XHRzcGluX2xvY2tfaW5pdChcdTAwMjZwZHNjLVx1MDAzZWRlZmVycmVkX2RtYV9sb2NrKTtcbiBcdHBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBwZHNjKTtcbiBcdHBkc2NfZGVidWdmc19hZGRfZGV2KHBkc2MpO1xuIFxuQEAgLTQ1OCw2ICYjNDM7NDYzLDcgQEAgc3RhdGljIHZvaWQgcGRzY19yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gXHR9XG4gXG4gXHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XG4mIzQzO1x0cGRzY19kZWZlcnJlZF9kbWFfZnJlZShwZHNjKTtcbiBcbiBcdGlkYV9mcmVlKFx1MDAyNnBkc2NfaWRhLCBwZHNjLVx1MDAzZXVpZCk7XG4gXHRwZHNjX2RlYnVnZnNfZGVsX2RldihwZHNjKTtcbkBAIC01MDUsNiAmIzQzOzUxMSw3IEBAIHN0YXRpYyB2b2lkIHBkc2NfcmVzZXRfcHJlcGFyZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBcdHBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7XG4gXHRpZiAocGNpX2lzX2VuYWJsZWQocGRldikpXG4gXHRcdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcbiYjNDM7XHRwZHNjX2RlZmVycmVkX2RtYV9mcmVlKHBkc2MpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBwZHNjX3Jlc2V0X2RvbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wZHMvcGRzX2NvcmVfaWYuaCBiL2luY2x1ZGUvbGludXgvcGRzL3Bkc19jb3JlX2lmLmhcbmluZGV4IDE3YTg3YzFhNTVkN2MuLjkwMWUxZTYyOGY4OTAgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3Bkcy9wZHNfY29yZV9pZi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3Bkcy9wZHNfY29yZV9pZi5oXG5AQCAtNDAsNiAmIzQzOzQwLDE0IEBAIGVudW0gcGRzX2NvcmVfY21kX29wY29kZSB7XG4gXHRQRFNfQ09SRV9DTURfRldfRE9XTkxPQURcdD0gNCxcbiBcdFBEU19DT1JFX0NNRF9GV19DT05UUk9MXHRcdD0gNSxcbiBcbiYjNDM7XHRQRFNfQ09SRV9DTURfR0VUX0NPTVBPTkVOVF9JTkZPXHQ9IDYsXG4mIzQzO1x0UERTX0NPUkVfQ01EX1NFTkRfUEtHX0RBVEFcdD0gNyxcbiYjNDM7XHRQRFNfQ09SRV9DTURfU0VORF9DT01QT05FTlRfVEJMXHQ9IDgsXG4mIzQzO1x0UERTX0NPUkVfQ01EX1NFTkRfQ09NUE9ORU5UXHQ9IDksXG4mIzQzO1x0UERTX0NPUkVfQ01EX0ZJTkFMSVpFX1VQREFURVx0PSAxMCxcbiYjNDM7XHRQRFNfQ09SRV9DTURfTUFUQ0hfUkVDT1JEX0RFU0NcdD0gMTEsXG4mIzQzO1x0UERTX0NPUkVfQ01EX0hPU1RfTUVNXHRcdD0gMTIsXG4mIzQzO1xuIFx0LyogU1IvSU9WIGNvbW1hbmRzICovXG4gXHRQRFNfQ09SRV9DTURfVkZfR0VUQVRUUlx0XHQ9IDYwLFxuIFx0UERTX0NPUkVfQ01EX1ZGX1NFVEFUVFJcdFx0PSA2MSxcbkBAIC0xMDAsNiAmIzQzOzEwOCwxNiBAQCBzdHJ1Y3QgcGRzX2NvcmVfZHJ2X2lkZW50aXR5IHtcbiBcdGNoYXIgICBkcml2ZXJfdmVyX3N0clszMl07XG4gfTtcbiBcbiYjNDM7LyoqXG4mIzQzOyAqIGVudW0gcGRzX2NvcmVfZGV2X2NhcGFiaWxpdHkgLSBEZXZpY2UgY2FwYWJpbGl0aWVzXG4mIzQzOyAqIEBQRFNfQ09SRV9ERVZfQ0FQX1BMRE1fRldfVVBEQVRFOiBEZXZpY2Ugb25seSBzdXBwb3J0cyBGVyB1cGRhdGUgdmlhIFBMRE1cbiYjNDM7ICogQFBEU19DT1JFX0RFVl9DQVBfSE9TVF9NRU06IERldmljZSBzdXBwb3J0cyBob3N0IG1lbW9yeSBmb3IgZncgdXNlXG4mIzQzOyAqL1xuJiM0MztlbnVtIHBkc19jb3JlX2Rldl9jYXBhYmlsaXR5IHtcbiYjNDM7XHRQRFNfQ09SRV9ERVZfQ0FQX1BMRE1fRldfVVBEQVRFID0gQklUKDApLFxuJiM0MztcdFBEU19DT1JFX0RFVl9DQVBfSE9TVF9NRU0gPSBCSVQoMSksXG4mIzQzO307XG4mIzQzO1xuICNkZWZpbmUgUERTX0RFVl9UWVBFX01BWFx0MTZcbiAvKipcbiAgKiBzdHJ1Y3QgcGRzX2NvcmVfZGV2X2lkZW50aXR5IC0gRGV2aWNlIGlkZW50aXR5IGluZm9ybWF0aW9uXG5AQCAtMTE5LDYgJiM0MzsxMzcsMTEgQEAgc3RydWN0IHBkc19jb3JlX2Rydl9pZGVudGl0eSB7XG4gICpcdFx0ICAgICAgdmFsdWUgaW4gdXNlY3MgdG8gZGV2aWNlIHVuaXRzIHVzaW5nOlxuICAqXHRcdCAgICAgIGRldmljZSB1bml0cyA9IHVzZWNzICogbXVsdCAvIGRpdlxuICAqIEB2aWZfdHlwZXM6ICAgICAgICBIb3cgbWFueSBvZiBlYWNoIFZJRiBkZXZpY2UgdHlwZSBpcyBzdXBwb3J0ZWRcbiYjNDM7ICogQG1heF9md19zbG90czogICAgIE51bWJlciBvZiBmaXJtd2FyZSBjb21wb25lbnRzIHJlcG9ydGVkIGJ5IGRldmljZVxuJiM0MzsgKlx0XHQgICAgICBvbmx5IHN1cHBvcnRlZCBvbiB2ZXJzaW9uIFx1MDAzZT0gUERTX0NPUkVfSURFTlRJVFlfVkVSU0lPTl8yXG4mIzQzOyAqIEByc3ZkMjpcdCAgICAgIFdvcmQgYm91bmRhcnkgcGFkZGluZ1xuJiM0MzsgKiBAY2FwYWJpbGl0aWVzOiAgICAgRGV2aWNlIGNhcGFiaWxpdGllc1xuJiM0MzsgKlx0XHQgICAgICBvbmx5IHN1cHBvcnRlZCBvbiB2ZXJzaW9uIFx1MDAzZT0gUERTX0NPUkVfSURFTlRJVFlfVkVSU0lPTl8yXG4gICovXG4gc3RydWN0IHBkc19jb3JlX2Rldl9pZGVudGl0eSB7XG4gXHR1OCAgICAgdmVyc2lvbjtcbkBAIC0xMzEsOSAmIzQzOzE1NCwxMyBAQCBzdHJ1Y3QgcGRzX2NvcmVfZGV2X2lkZW50aXR5IHtcbiBcdF9fbGUzMiBpbnRyX2NvYWxfbXVsdDtcbiBcdF9fbGUzMiBpbnRyX2NvYWxfZGl2O1xuIFx0X19sZTE2IHZpZl90eXBlc1tQRFNfREVWX1RZUEVfTUFYXTtcbiYjNDM7XHRfX2xlMTYgbWF4X2Z3X3Nsb3RzO1xuJiM0MztcdHU4ICAgICByc3ZkMls2XTtcbiYjNDM7XHRfX2xlNjQgY2FwYWJpbGl0aWVzO1xuIH07XG4gXG4gI2RlZmluZSBQRFNfQ09SRV9JREVOVElUWV9WRVJTSU9OXzFcdDFcbiYjNDM7I2RlZmluZSBQRFNfQ09SRV9JREVOVElUWV9WRVJTSU9OXzJcdDJcbiBcbiAvKipcbiAgKiBzdHJ1Y3QgcGRzX2NvcmVfZGV2X2lkZW50aWZ5X2NtZCAtIERyaXZlci9kZXZpY2UgaWRlbnRpZnkgY29tbWFuZFxuQEAgLTI3NSwxMSAmIzQzOzMwMiwyMCBAQCBlbnVtIHBkc19jb3JlX2Z3X2NvbnRyb2xfb3BlciB7XG4gXHRQRFNfQ09SRV9GV19HRVRfTElTVCAgICAgICAgICAgICAgID0gNyxcbiB9O1xuIFxuJiM0MzsvKipcbiYjNDM7ICogZW51bSBwZHNfY29yZV9md19zbG90IC0gRmlybXdhcmUgc2xvdCBpZGVudGlmaWVyc1xuJiM0MzsgKiBAUERTX0NPUkVfRldfU0xPVF9JTlZBTElEOiBMZXQgZmlybXdhcmUgc2VsZWN0IHNsb3QgYmFzZWQgb24gcGFja2FnZSBtZXRhZGF0YVxuJiM0MzsgKiBAUERTX0NPUkVfRldfU0xPVF9BOiAgICAgICBQcmltYXJ5IGZpcm13YXJlIHNsb3QgQVxuJiM0MzsgKiBAUERTX0NPUkVfRldfU0xPVF9COiAgICAgICBQcmltYXJ5IGZpcm13YXJlIHNsb3QgQlxuJiM0MzsgKiBAUERTX0NPUkVfRldfU0xPVF9HT0xEOiAgICBHb2xkL3JlY292ZXJ5IGZpcm13YXJlIHNsb3RcbiYjNDM7ICogQFBEU19DT1JFX0ZXX1NMT1RfTUFYOiAgICAgU2VudGluZWwgdmFsdWUgaW5kaWNhdGluZyBubyBzbG90IHJlc29sdmVkXG4mIzQzOyAqL1xuIGVudW0gcGRzX2NvcmVfZndfc2xvdCB7XG4gXHRQRFNfQ09SRV9GV19TTE9UX0lOVkFMSUQgICAgPSAwLFxuIFx0UERTX0NPUkVfRldfU0xPVF9BXHQgICAgPSAxLFxuIFx0UERTX0NPUkVfRldfU0xPVF9CICAgICAgICAgID0gMixcbiBcdFBEU19DT1JFX0ZXX1NMT1RfR09MRCAgICAgICA9IDMsXG4mIzQzO1x0UERTX0NPUkVfRldfU0xPVF9NQVggICAgICAgID0gMHhmZixcbiB9O1xuIFxuIC8qKlxuQEAgLTQ0Niw2ICYjNDM7NDgyLDQyMyBAQCBzdHJ1Y3QgcGRzX2NvcmVfdmZfY3RybF9jb21wIHtcbiBcdHU4XHRzdGF0dXM7XG4gfTtcbiBcbiYjNDM7LyoqXG4mIzQzOyAqIHN0cnVjdCBwZHNfY29yZV9zZW5kX3BrZ19kYXRhX2NtZCAtIFNlbmQgcGFja2FnZSBkYXRhIGNvbW1hbmRcbiYjNDM7ICogQG9wY29kZTogT3Bjb2RlIFBEU19DT1JFX0NNRF9TRU5EX1BLR19EQVRBXG4mIzQzOyAqIEB2ZXI6IERyaXZlciYjMzk7cyBtYXggc3VwcG9ydCB2ZXJzaW9uIG9mIHRoaXMgY29tbWFuZFxuJiM0MzsgKiBAdG90YWxfbGVuOiBUb3RhbCBsZW5ndGggb2YgdGhlIHBhY2thZ2UgZGF0YVxuJiM0MzsgKiBAb2Zmc2V0OiBPZmZzZXQgaW4gdGhlIHBhY2thZ2UgZGF0YSwgbm9uLXplcm8gaWYgbXVsdGlwbGUgY29tbWFuZHMgYXJlXG4mIzQzOyAqXHQgICAgbmVlZGVkIGZvciBzZW5kaW5nIHRoZSBwYWNrYWdlIGRhdGFcbiYjNDM7ICogQGRhdGFfbGVuOiBMZW5ndGggb2YgZGF0YSBzdG9yZWQgYXQgZGF0YV9wYVxuJiM0MzsgKiBAZGF0YV9wYTogRGF0YSBwaHlzaWNhbCBhZGRyZXNzIGZvciBETUEgdG8gZGV2aWNlXG4mIzQzOyAqXG4mIzQzOyAqIFRoZSBwYWNrYWdlIGRhdGEgbWF5IGJlIHRvbyBsYXJnZSB0byBzdG9yZSBpbiBhIHNpbmdsZSBidWZmZXIsIHNvIG11bHRpcGxlXG4mIzQzOyAqIFBEU19DT1JFX0NNRF9TRU5EX1BLR19EQVRBIGRldmNtZHMgbWF5IGJlIG5lZWRlZC5cbiYjNDM7ICovXG4mIzQzO3N0cnVjdCBwZHNfY29yZV9zZW5kX3BrZ19kYXRhX2NtZCB7XG4mIzQzO1x0dTggb3Bjb2RlO1xuJiM0MztcdHU4IHZlcjtcbiYjNDM7XHRfX2xlMTYgdG90YWxfbGVuO1xuJiM0MztcdF9fbGUxNiBvZmZzZXQ7XG4mIzQzO1x0X19sZTE2IGRhdGFfbGVuO1xuJiM0MztcdF9fbGU2NCBkYXRhX3BhO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHN0cnVjdCBwZHNfY29yZV9zZW5kX3BrZ19kYXRhX2NvbXAgLSBTZW5kIHBhY2thZ2UgZGF0YSBjb21wbGV0aW9uXG4mIzQzOyAqIEBzdGF0dXM6IFN0YXR1cyBvZiB0aGUgY29tbWFuZCAoZW51bSBwZHNfY29yZV9zdGF0dXNfY29kZSlcbiYjNDM7ICogQHZlcjogRGV2aWNlJiMzOTtzIG1heCBzdXBwb3J0ZWQgdmVyc2lvbiBvZiB0aGlzIGNvbW1hbmRcbiYjNDM7ICogQHJzdmQ6IFdvcmQgYm91bmRhcnkgcGFkZGluZ1xuJiM0MzsgKi9cbiYjNDM7c3RydWN0IHBkc19jb3JlX3NlbmRfcGtnX2RhdGFfY29tcCB7XG4mIzQzO1x0dTggc3RhdHVzO1xuJiM0MztcdHU4IHZlcjtcbiYjNDM7XHR1OCByc3ZkWzJdO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHN0cnVjdCBwZHNfY29yZV9jb21wb25lbnRfdGJsIC0gQ29tcG9uZW50IHRhYmxlIGRldGFpbHNcbiYjNDM7ICogQGNvbXBhcmlzb25fc3RhbXA6IENvbXBhcmlzb24gc3RhbXAgdXNlZCBmb3IgY29tcG9uZW50IHZlcnNpb24gY2hlY2tzXG4mIzQzOyAqIEBjbGFzc2lmaWNhdGlvbjogVmVuZG9yIHNwZWNpZmljIGNsYXNzaWZpY2F0aW9uIGluZm9cbiYjNDM7ICogQGlkZW50aWZpZXI6IENvbXBvbmVudCYjMzk7cyBJRFxuJiM0MzsgKiBAdHJhbnNmZXJfZmxhZzogUGFydCBvZiB0aGUgY29tcG9uZW50IHRhYmxlIHRoaXMgcmVxdWVzdCByZXByZXNlbnRzXG4mIzQzOyAqIEB2ZXJzaW9uX3N0cl90eXBlOiBUaGUgdHlwZXMgb2Ygc3RyaW5ncyB1c2VkXG4mIzQzOyAqIEB2ZXJzaW9uX3N0cl9sZW46IExlbmd0aCBvZiBAdmVyc2lvbl9zdHJcbiYjNDM7ICogQHZlcnNpb25fc3RyOiBDb21wb25lbnQgdmVyc2lvbiBpbmZvcm1hdGlvblxuJiM0MzsgKi9cbiYjNDM7c3RydWN0IHBkc19jb3JlX2NvbXBvbmVudF90Ymwge1xuJiM0MztcdF9fbGUzMiBjb21wYXJpc29uX3N0YW1wO1xuJiM0MztcdF9fbGUxNiBjbGFzc2lmaWNhdGlvbjtcbiYjNDM7XHRfX2xlMTYgaWRlbnRpZmllcjtcbiYjNDM7XHR1OCAgICAgdHJhbnNmZXJfZmxhZztcbiYjNDM7XHR1OCAgICAgdmVyc2lvbl9zdHJfdHlwZTtcbiYjNDM7XHR1OCAgICAgdmVyc2lvbl9zdHJfbGVuO1xuJiM0MztcdHU4ICAgICB2ZXJzaW9uX3N0cltdO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHN0cnVjdCBwZHNfY29yZV9zZW5kX2NvbXBvbmVudF90YmxfY21kIC0gU2VuZCBjb21wb25lbnQgdGFibGUgY29tbWFuZFxuJiM0MzsgKiBAb3Bjb2RlOiBPcGNvZGUgUERTX0NPUkVfQ01EX1NFTkRfQ09NUE9ORU5UX1RCTFxuJiM0MzsgKiBAdmVyOiBEcml2ZXImIzM5O3MgbWF4IHN1cHBvcnQgdmVyc2lvbiBvZiB0aGlzIGNvbW1hbmRcbiYjNDM7ICogQHNsb3RfaWQ6IGVudW0gcGRzX2NvcmVfZndfc2xvdFxuJiM0MzsgKiBAcnN2ZDogV29yZCBib3VuZGFyeSBwYWRkaW5nXG4mIzQzOyAqXG4mIzQzOyAqIEV4cGVjdHMgdG8gZmluZCBjb21wb25lbnQgdGFibGUgaW5mbyAoc3RydWN0IHBkc19jb3JlX2NvbXBvbmVudF90YmwpXG4mIzQzOyAqIGluIGNtZF9yZWdzLVx1MDAzZWRhdGEuICBEcml2ZXIgc2hvdWxkIGtlZXAgdGhlIGRldmNtZCBpbnRlcmZhY2UgbG9ja2VkXG4mIzQzOyAqIHdoaWxlIHByZXBhcmluZyB0aGUgY29tcG9uZW50IHRhYmxlIGluZm8uXG4mIzQzOyAqL1xuJiM0MztzdHJ1Y3QgcGRzX2NvcmVfc2VuZF9jb21wb25lbnRfdGJsX2NtZCB7XG4mIzQzO1x0dTggb3Bjb2RlO1xuJiM0MztcdHU4IHZlcjtcbiYjNDM7XHR1OCBzbG90X2lkO1xuJiM0MztcdHU4IHJzdmQ7XG4mIzQzO307XG4mIzQzO1xuJiM0MztlbnVtIHBkc19jb3JlX2NvbXBvbmVudF9yZXNwX2NvZGUge1xuJiM0MztcdFBEU19DT1JFX0NPTVBPTkVOVF9WQUxJRCA9IDB4MCxcbiYjNDM7XHRQRFNfQ09SRV9DT01QT05FTlRfU1RBTVBfSURFTlRJQ0FMID0gMHgxLFxuJiM0MztcdFBEU19DT1JFX0NPTVBPTkVOVF9TVEFNUF9MT1dFUiA9IDB4MixcbiYjNDM7XHRQRFNfQ09SRV9DT01QT05FTlRfU1RBTVBfT1JfVkVSU0lPTl9JTlZBTElEID0gMHgzLFxuJiM0MztcdFBEU19DT1JFX0NPTVBPTkVOVF9DT05GTElDVCA9IDB4NCxcbiYjNDM7XHRQRFNfQ09SRV9DT01QT05FTlRfUFJFUkVRU19OT1RfTUVUID0gMHg1LFxuJiM0MztcdFBEU19DT1JFX0NPTVBPTkVOVF9OT1RfU1VQUE9SVEVEID0gMHg2LFxuJiM0MztcdFBEU19DT1JFX0NPTVBPTkVOVF9GV19UWVBFX0lOVkFMSUQgPSAweGQwLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHN0cnVjdCBwZHNfY29yZV9zZW5kX2NvbXBvbmVudF90YmxfY29tcCAtIFNlbmQgY29tcG9uZW50IHRhYmxlIGNvbXBsZXRpb25cbiYjNDM7ICogQHN0YXR1czogU3RhdHVzIG9mIHRoZSBjb21tYW5kIChlbnVtIHBkc19jb3JlX3N0YXR1c19jb2RlKVxuJiM0MzsgKiBAdmVyOiBEZXZpY2UmIzM5O3MgbWF4IHN1cHBvcnRlZCB2ZXJzaW9uIG9mIHRoaXMgY29tbWFuZFxuJiM0MzsgKiBAY29tcGxldGlvbl9jb2RlOiBDb21wb25lbnQgY29tcGxldGlvbiBjb2RlXG4mIzQzOyAqIEByZXNwb25zZTogQ29tcG9uZW50IHJlc3BvbnNlXG4mIzQzOyAqIEByZXNwb25zZV9jb2RlOiBDb21wb25lbnQgcmVzcG9uc2UgY29kZVxuJiM0MzsgKiBAc2xvdF9pZDogQWN0dWFsIHNsb3RfaWQgb2YgdGhlIGNvbXBvbmVudCAoZW51bSBwZHNfY29yZV9md19zbG90KVxuJiM0MzsgKiBAcnN2ZDogV29yZCBib3VuZGFyeSBwYWRkaW5nXG4mIzQzOyAqL1xuJiM0MztzdHJ1Y3QgcGRzX2NvcmVfc2VuZF9jb21wb25lbnRfdGJsX2NvbXAge1xuJiM0MztcdHU4IHN0YXR1cztcbiYjNDM7XHR1OCB2ZXI7XG4mIzQzO1x0dTggY29tcGxldGlvbl9jb2RlO1xuJiM0MztcdHU4IHJlc3BvbnNlO1xuJiM0MztcdHU4IHJlc3BvbnNlX2NvZGU7XG4mIzQzO1x0dTggc2xvdF9pZDtcbiYjNDM7XHR1OCByc3ZkWzJdO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGVudW0gcGRzX2NvcmVfc2VuZF9jb21wb25lbnRfb3AgLSBQRFNfQ09SRV9DTURfU0VORF9DT01QT05FTlQgb3BlcmF0aW9uXG4mIzQzOyAqIEBQRFNfQ09SRV9TRU5EX0NPTVBPTkVOVF9TVEFSVDogSW5pdGlhbCBvcGVyYXRpb24gdG8gc3RhcnQgdHJhbnNmZXJcbiYjNDM7ICogQFBEU19DT1JFX1NFTkRfQ09NUE9ORU5UX1NUQVRVUzogU3Vic2VxdWVudCBjYWxscyB0byBjaGVjayBvbiBzdGF0dXNcbiYjNDM7ICovXG4mIzQzO2VudW0gcGRzX2NvcmVfc2VuZF9jb21wb25lbnRfb3Age1xuJiM0MztcdFBEU19DT1JFX1NFTkRfQ09NUE9ORU5UX1NUQVJUID0gMCxcbiYjNDM7XHRQRFNfQ09SRV9TRU5EX0NPTVBPTkVOVF9TVEFUVVMgPSAxLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7I2RlZmluZSBQRFNfQ09SRV9GV19DT01QT05FTlRfSURfSU5WQUxJRCAweEZGRkZcbiYjNDM7LyoqXG4mIzQzOyAqIHN0cnVjdCBwZHNfY29yZV9mbGFzaF9jb21wb25lbnQgLSBDb21wb25lbnQgZGV0YWlsc1xuJiM0MzsgKiBAY29tcGFyaXNvbl9zdGFtcDogQ29tcGFyaXNvbiBzdGFtcCB1c2VkIGZvciBjb21wb25lbnQgdmVyc2lvbiBjaGVja3NcbiYjNDM7ICogQGltYWdlX3NpemU6IENvbXBvbmVudCBpbWFnZSBzaXplXG4mIzQzOyAqIEBjbGFzc2lmaWNhdGlvbjogVmVuZG9yIHNwZWNpZmljIGNsYXNzaWZpY2F0aW9uIGluZm9cbiYjNDM7ICogQGlkZW50aWZpZXI6IENvbXBvbmVudCYjMzk7cyBJRFxuJiM0MzsgKiBAb3B0aW9uczogQ29tcG9uZW50IG9wdGlvbnNcbiYjNDM7ICogQHJzdmQ6IFdvcmQgYm91bmRhcnkgcGFkZGluZ1xuJiM0MzsgKiBAdmVyc2lvbl9zdHJfdHlwZTogVGhlIHR5cGVzIG9mIHN0cmluZ3MgdXNlZFxuJiM0MzsgKiBAdmVyc2lvbl9zdHJfbGVuOiBMZW5ndGggb2YgQHZlcnNpb25fc3RyXG4mIzQzOyAqIEB2ZXJzaW9uX3N0cjogQ29tcG9uZW50IHZlcnNpb24gaW5mb3JtYXRpb25cbiYjNDM7ICovXG4mIzQzO3N0cnVjdCBwZHNfY29yZV9mbGFzaF9jb21wb25lbnQge1xuJiM0MztcdF9fbGUzMiBjb21wYXJpc29uX3N0YW1wO1xuJiM0MztcdF9fbGUzMiBpbWFnZV9zaXplO1xuJiM0MztcdF9fbGUxNiBjbGFzc2lmaWNhdGlvbjtcbiYjNDM7XHRfX2xlMTYgaWRlbnRpZmllcjtcbiYjNDM7XHRfX2xlMTYgb3B0aW9ucztcbiYjNDM7XHR1OCByc3ZkWzNdO1xuJiM0MztcdHU4IHZlcnNpb25fc3RyX3R5cGU7XG4mIzQzO1x0dTggdmVyc2lvbl9zdHJfbGVuO1xuJiM0MztcdHU4IHZlcnNpb25fc3RyW107XG4mIzQzO307XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogc3RydWN0IHBkc19jb3JlX3NlbmRfY29tcG9uZW50X2NtZCAtIFNlbmQgY29tcG9uZW50IGNvbW1hbmRcbiYjNDM7ICogQG9wY29kZTogT3Bjb2RlIFBEU19DT1JFX0NNRF9TRU5EX0NPTVBPTkVOVFxuJiM0MzsgKiBAdmVyOiBEcml2ZXImIzM5O3MgbWF4IHN1cHBvcnRlZCB2ZXJzaW9uIG9mIHRoaXMgY29tbWFuZFxuJiM0MzsgKiBAc2xvdF9pZDogZW51bSBwZHNfY29yZV9md19zbG90XG4mIzQzOyAqIEBvcGVyYXRpb246IGVudW0gcGRzX2NvcmVfc2VuZF9jb21wb25lbnRfb3BcbiYjNDM7ICogQG9mZnNldDogT2Zmc2V0IGludG8gdGhlIGNvbXBvbmVudCwgbm9uLXplcm8gaWYgbXVsdGlwbGUgY29tbWFuZHNcbiYjNDM7ICpcdCAgICBhcmUgbmVlZGVkIGZvciBhIHNpbmdsZSBjb21wb25lbnRcbiYjNDM7ICogQGRhdGFfbGVuOiBMZW5ndGggb2YgdGhpcyBwYXJ0IG9mIHRoZSBjb21wb25lbnQgc3RvcmVkIGF0IEBkYXRhX3BhXG4mIzQzOyAqIEByc3ZkOiBXb3JkIGJvdW5kYXJ5IHBhZGRpbmdcbiYjNDM7ICogQGRhdGFfcGE6IERNQSBhZGRyZXNzIG9mIHRoZSBjb21wb25lbnRcbiYjNDM7ICpcbiYjNDM7ICogQSBjb21wb25lbnQgbWF5IGJlIHRvbyBsYXJnZSB0byBzdG9yZSBpbiBhIHNpbmdsZSBidWZmZXIsIHNvIG11bHRpcGxlXG4mIzQzOyAqIFBEU19DT1JFX0NNRF9TRU5EX0NPTVBPTkVOVCBkZXZjbWRzIG1heSBiZSBuZWVkZWQuXG4mIzQzOyAqXG4mIzQzOyAqIEV4cGVjdHMgdG8gZmluZCBmbGFzaCBjb21wb25lbnQgaW5mbyAoc3RydWN0IHBkc19jb3JlX2ZsYXNoX2NvbXBvbmVudClcbiYjNDM7ICogaW4gY21kX3JlZ3MtXHUwMDNlZGF0YS4gRHJpdmVyIHNob3VsZCBrZWVwIHRoZSBkZXZjbWQgaW50ZXJmYWNlIGxvY2tlZFxuJiM0MzsgKiB3aGlsZSBwcmVwYXJpbmcgYW5kIHNlbmRpbmcgdGhlIGZsYXNoIGNvbXBvbmVudCBpbmZvLlxuJiM0MzsgKi9cbiYjNDM7c3RydWN0IHBkc19jb3JlX3NlbmRfY29tcG9uZW50X2NtZCB7XG4mIzQzO1x0dTggb3Bjb2RlO1xuJiM0MztcdHU4IHZlcjtcbiYjNDM7XHR1OCBzbG90X2lkO1xuJiM0MztcdHU4IG9wZXJhdGlvbjtcbiYjNDM7XHRfX2xlMzIgb2Zmc2V0O1xuJiM0MztcdF9fbGUzMiBkYXRhX2xlbjtcbiYjNDM7XHR1OCByc3ZkWzRdO1xuJiM0MztcdF9fbGU2NCBkYXRhX3BhO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHN0cnVjdCBwZHNfY29yZV9zZW5kX2NvbXBvbmVudF9jb21wIC0gU2VuZCBjb21wb25lbnQgY29tcGxldGlvblxuJiM0MzsgKiBAc3RhdHVzOiBTdGF0dXMgb2YgdGhlIGNvbW1hbmQgKGVudW0gcGRzX2NvcmVfc3RhdHVzX2NvZGUpXG4mIzQzOyAqIEB2ZXI6IERldmljZSYjMzk7cyBtYXggc3VwcG9ydGVkIHZlcnNpb24gb2YgdGhpcyBjb21tYW5kXG4mIzQzOyAqIEBjb21wbGV0aW9uX2NvZGU6IENvbXBsZXRpb24gY29kZVxuJiM0MzsgKiBAY29tcGF0X3Jlc3BvbnNlOiBDb21wYXRpYmlsaXR5IHJlc3BvbnNlICgwID0gQ29tcG9uZW50IGNhbiBiZSB1cGRhdGVkKVxuJiM0MzsgKiBAY29tcGF0X3Jlc3BvbnNlX2NvZGU6IENvbXBhdGliaWxpdHkgcmVzcG9uc2UgY29kZVxuJiM0MzsgKiBAcnN2ZDogV29yZCBib3VuZGFyeSBwYWRkaW5nXG4mIzQzOyAqL1xuJiM0MztzdHJ1Y3QgcGRzX2NvcmVfc2VuZF9jb21wb25lbnRfY29tcCB7XG4mIzQzO1x0dTggc3RhdHVzO1xuJiM0MztcdHU4IHZlcjtcbiYjNDM7XHR1OCBjb21wbGV0aW9uX2NvZGU7XG4mIzQzO1x0dTggY29tcGF0X3Jlc3BvbnNlO1xuJiM0MztcdHU4IGNvbXBhdF9yZXNwb25zZV9jb2RlO1xuJiM0MztcdHU4IHJzdmRbM107XG4mIzQzO307XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogZW51bSBwZHNfY29yZV9md19jb21wb25lbnRfdHlwZSAtIEZpcm13YXJlIGNvbXBvbmVudCB0eXBlXG4mIzQzOyAqIEBQRFNfQ09SRV9GV19UWVBFX1VOS05PV046IFVua25vd24gY29tcG9uZW50IHR5cGVcbiYjNDM7ICogQFBEU19DT1JFX0ZXX1RZUEVfTUFJTjogTWFpbiBmaXJtd2FyZVxuJiM0MzsgKiBAUERTX0NPUkVfRldfVFlQRV9CT09UOiBCb290IGxvYWRlclxuJiM0MzsgKiBAUERTX0NPUkVfRldfVFlQRV9DUExEOiBDUExEIGZpcm13YXJlXG4mIzQzOyAqIEBQRFNfQ09SRV9GV19UWVBFX1NFQ1VSRTogU2VjdXJlIGZpcm13YXJlXG4mIzQzOyAqIEBQRFNfQ09SRV9GV19UWVBFX0ZQR0E6IEZQR0EgY29uZmlndXJhdGlvblxuJiM0MzsgKiBAUERTX0NPUkVfRldfVFlQRV9TVUNfTUFJTjogU3lzdGVtIFVuaXQgQ29udHJvbGxlciBmaXJtd2FyZVxuJiM0MzsgKiBAUERTX0NPUkVfRldfVFlQRV9TVUNfQk9PVDogU3lzdGVtIFVuaXQgQ29udHJvbGxlciBib290bG9hZGVyXG4mIzQzOyAqIEBQRFNfQ09SRV9GV19UWVBFX1VCT09UOiBVLUJvb3QgYm9vdGxvYWRlclxuJiM0MzsgKlxuJiM0MzsgKiBHb2xkL3JlY292ZXJ5IHZhcmlhbnRzIGFyZSBpZGVudGlmaWVkIGJ5IHNsb3RfaWQgPT0gUERTX0NPUkVfRldfU0xPVF9HT0xEXG4mIzQzOyAqIGFuZCByZXBvcnRlZCB3aXRoIGEgXCYjMzQ7LmdvbGRcJiMzNDsgc3VmZml4IChlLmcuLCBmdy5nb2xkKS5cbiYjNDM7ICovXG4mIzQzO2VudW0gcGRzX2NvcmVfZndfY29tcG9uZW50X3R5cGUge1xuJiM0MztcdFBEU19DT1JFX0ZXX1RZUEVfVU5LTk9XTiAgID0gMCxcbiYjNDM7XHRQRFNfQ09SRV9GV19UWVBFX01BSU4gICAgICA9IDEsXG4mIzQzO1x0UERTX0NPUkVfRldfVFlQRV9CT09UICAgICAgPSAyLFxuJiM0MztcdFBEU19DT1JFX0ZXX1RZUEVfQ1BMRCAgICAgID0gMyxcbiYjNDM7XHRQRFNfQ09SRV9GV19UWVBFX1NFQ1VSRSAgICA9IDQsXG4mIzQzO1x0UERTX0NPUkVfRldfVFlQRV9GUEdBICAgICAgPSA1LFxuJiM0MztcdFBEU19DT1JFX0ZXX1RZUEVfU1VDX01BSU4gID0gNixcbiYjNDM7XHRQRFNfQ09SRV9GV19UWVBFX1NVQ19CT09UICA9IDcsXG4mIzQzO1x0UERTX0NPUkVfRldfVFlQRV9VQk9PVCAgICAgPSA4LFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGVudW0gcGRzX2NvcmVfY29tcG9uZW50X2luZm9fZmxhZ3MgLSBDb21wb25lbnQgaW5mbyBmbGFnc1xuJiM0MzsgKiBAUERTX0NPUkVfRldfQ09NUE9ORU5UX0lORk9fRl9SVU5OSU5HOiBDb21wb25lbnQgaXMgY3VycmVudGx5IHJ1bm5pbmdcbiYjNDM7ICogQFBEU19DT1JFX0ZXX0NPTVBPTkVOVF9JTkZPX0ZfU1RBUlRVUDogQ29tcG9uZW50IHZlcnNpb24gb24gbmV4dCBGVyBib290XG4mIzQzOyAqIEBQRFNfQ09SRV9GV19DT01QT05FTlRfSU5GT19GX0ZJWEVEOiBDb21wb25lbnQgaXMgZml4ZWQgYW5kIGNhbm5vdCBiZSB1cGRhdGVkXG4mIzQzOyAqIEBQRFNfQ09SRV9GV19DT01QT05FTlRfSU5GT19GX1VQREFURV9CWV9OQU1FOiBDb21wb25lbnQgY2FuIGJlIHVwZGF0ZWRcbiYjNDM7ICpcdGJ5IG5hbWVcbiYjNDM7ICovXG4mIzQzO2VudW0gcGRzX2NvcmVfY29tcG9uZW50X2luZm9fZmxhZ3Mge1xuJiM0MztcdFBEU19DT1JFX0ZXX0NPTVBPTkVOVF9JTkZPX0ZfUlVOTklORyA9IEJJVCgwKSxcbiYjNDM7XHRQRFNfQ09SRV9GV19DT01QT05FTlRfSU5GT19GX1NUQVJUVVAgPSBCSVQoMSksXG4mIzQzO1x0UERTX0NPUkVfRldfQ09NUE9ORU5UX0lORk9fRl9GSVhFRCA9IEJJVCgyKSxcbiYjNDM7XHRQRFNfQ09SRV9GV19DT01QT05FTlRfSU5GT19GX1VQREFURV9CWV9OQU1FID0gQklUKDMpLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHN0cnVjdCBwZHNfY29yZV9md19jb21wb25lbnRfaW5mbyAtIEdFVF9DT01QT05FTlRfSU5GTyBlbnRyeVxuJiM0MzsgKiBAbmFtZTogQ29tcG9uZW50JiMzOTtzIG5hbWVcbiYjNDM7ICogQGNvbXBvbmVudF90eXBlOiBlbnVtIHBkc19jb3JlX2Z3X2NvbXBvbmVudF90eXBlXG4mIzQzOyAqIEByc3ZkOiBXb3JkIGJvdW5kYXJ5IHBhZGRpbmdcbiYjNDM7ICogQGZsYWdzOiBlbnVtIHBkc19jb3JlX2NvbXBvbmVudF9pbmZvX2ZsYWdzXG4mIzQzOyAqIEBpZGVudGlmaWVyOiBDb21wb25lbnQmIzM5O3MgaWRlbnRpZmllclxuJiM0MzsgKiBAc2xvdF9pZDogQ29tcG9uZW50JiMzOTtzIHNsb3QgaWRlbnRpZmllclxuJiM0MzsgKiBAdmVyc2lvbjogQ29tcG9uZW50JiMzOTtzIHZlcnNpb25cbiYjNDM7ICovXG4mIzQzO3N0cnVjdCBwZHNfY29yZV9md19jb21wb25lbnRfaW5mbyB7XG4mIzQzOyNkZWZpbmUgUERTX0NPUkVfRldfQ09NUE9ORU5UX05BTUVfQlVGTEVOIDI0XG4mIzQzO1x0Y2hhciBuYW1lW1BEU19DT1JFX0ZXX0NPTVBPTkVOVF9OQU1FX0JVRkxFTl07XG4mIzQzO1x0dTggY29tcG9uZW50X3R5cGU7XG4mIzQzO1x0dTggcnN2ZFszXTtcbiYjNDM7XHRfX2xlMTYgZmxhZ3M7XG4mIzQzO1x0dTggaWRlbnRpZmllcjtcbiYjNDM7XHR1OCBzbG90X2lkO1xuJiM0MzsjZGVmaW5lIFBEU19DT1JFX0ZXX0NPTVBPTkVOVF9WRVJfQlVGTEVOIDMyXG4mIzQzO1x0Y2hhciB2ZXJzaW9uW1BEU19DT1JFX0ZXX0NPTVBPTkVOVF9WRVJfQlVGTEVOXTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOyNkZWZpbmUgUERTX0NPUkVfRldfQ09NUE9ORU5UX0xJU1RfTEVOXHQoKFBEU19QQUdFX1NJWkUgLSA4KSAvIFxcXG4mIzQzO1x0XHRzaXplb2Yoc3RydWN0IHBkc19jb3JlX2Z3X2NvbXBvbmVudF9pbmZvKSlcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBzdHJ1Y3QgcGRzX2NvcmVfY29tcG9uZW50X2xpc3RfaW5mbyAtIEdFVF9DT01QT05FTlRfSU5GTyBjb21wbGV0aW9uIGRhdGFcbiYjNDM7ICogQG51bV9jb21wb25lbnRzOiBOdW1iZXIgb2YgdmFsaWQgY29tcG9uZW50c1xuJiM0MzsgKiBAcnN2ZDogV29yZCBib3VuZGFyeSBwYWRkaW5nXG4mIzQzOyAqIEBpbmZvOiBMaXN0IG9mIHZhbGlkIGNvbXBvbmVudHNcbiYjNDM7ICovXG4mIzQzO3N0cnVjdCBwZHNfY29yZV9jb21wb25lbnRfbGlzdF9pbmZvIHtcbiYjNDM7XHR1OCBudW1fY29tcG9uZW50cztcbiYjNDM7XHR1OCByc3ZkWzddO1xuJiM0MztcdHN0cnVjdCBwZHNfY29yZV9md19jb21wb25lbnRfaW5mbyBpbmZvW1BEU19DT1JFX0ZXX0NPTVBPTkVOVF9MSVNUX0xFTl07XG4mIzQzO307XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogc3RydWN0IHBkc19jb3JlX2dldF9jb21wb25lbnRfaW5mb19jbWQgLSBHRVRfQ09NUE9ORU5UX0lORk8gY29tbWFuZFxuJiM0MzsgKiBAb3Bjb2RlOiBQRFNfQ09SRV9DTURfR0VUX0NPTVBPTkVOVF9JTkZPXG4mIzQzOyAqIEB2ZXI6IERyaXZlciYjMzk7cyBtYXggc3VwcG9ydGVkIHZlcnNpb24gb2YgdGhpcyBjb21tYW5kXG4mIzQzOyAqIEBkYXRhX2xlbjogTGVuZ3RoIG9mIGRhdGEgYXQgZGF0YV9wYVxuJiM0MzsgKiBAcnN2ZDogV29yZCBib3VuZGFyeSBwYWRkaW5nXG4mIzQzOyAqIEBkYXRhX3BhOiBETUEgYWRkcmVzcyBvZiBkYXRhXG4mIzQzOyAqXG4mIzQzOyAqIEZXIHBvcHVsYXRlcyBzdHJ1Y3QgcGRzX2NvcmVfY29tcG9uZW50X2xpc3RfaW5mbyBwb2ludGVkIHRvIGJ5IEBkYXRhX3BhXG4mIzQzOyAqL1xuJiM0MztzdHJ1Y3QgcGRzX2NvcmVfZ2V0X2NvbXBvbmVudF9pbmZvX2NtZCB7XG4mIzQzO1x0dTggb3Bjb2RlO1xuJiM0MztcdHU4IHZlcjtcbiYjNDM7XHRfX2xlMTYgZGF0YV9sZW47XG4mIzQzO1x0dTggcnN2ZFs0XTtcbiYjNDM7XHRfX2xlNjQgZGF0YV9wYTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBzdHJ1Y3QgcGRzX2NvcmVfZ2V0X2NvbXBvbmVudF9pbmZvX2NvbXAgLSBHRVRfQ09NUE9ORU5UX0lORk8gY29tcGxldGlvblxuJiM0MzsgKiBAc3RhdHVzOiBlbnVtIHBkc19jb3JlX3N0YXR1c19jb2RlXG4mIzQzOyAqIEB2ZXI6IERldmljZSYjMzk7cyBtYXggc3VwcG9ydGVkIHZlcnNpb24gb2YgdGhpcyBjb21tYW5kXG4mIzQzOyAqIEByc3ZkOiBXb3JkIGJvdW5kYXJ5IHBhZGRpbmdcbiYjNDM7ICovXG4mIzQzO3N0cnVjdCBwZHNfY29yZV9nZXRfY29tcG9uZW50X2luZm9fY29tcCB7XG4mIzQzO1x0dTggc3RhdHVzO1xuJiM0MztcdHU4IHZlcjtcbiYjNDM7XHR1OCByc3ZkWzJdO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHN0cnVjdCBwZHNfY29yZV9maW5hbGl6ZV91cGRhdGVfY21kIC0gRklOQUxJWkVfVVBEQVRFIGNvbW1hbmRcbiYjNDM7ICogQG9wY29kZTogUERTX0NPUkVfQ01EX0ZJTkFMSVpFX1VQREFURVxuJiM0MzsgKiBAdmVyOiBEcml2ZXImIzM5O3MgbWF4IHN1cHBvcnQgdmVyc2lvbiBvZiB0aGlzIGNvbW1hbmRcbiYjNDM7ICogQHJzdmQ6IFdvcmQgYm91bmRhcnkgcGFkZGluZ1xuJiM0MzsgKlxuJiM0MzsgKiBEcml2ZXIgc2VuZHMgYXQgdGhlIGVuZCBvZiB1cGRhdGluZyBhbGwgY29tcG9uZW50cyB0byBmaW5hbGl6ZSB0aGUgdXBkYXRlXG4mIzQzOyAqL1xuJiM0MztzdHJ1Y3QgcGRzX2NvcmVfZmluYWxpemVfdXBkYXRlX2NtZCB7XG4mIzQzO1x0dTggb3Bjb2RlO1xuJiM0MztcdHU4IHZlcjtcbiYjNDM7XHR1OCByc3ZkWzJdO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHN0cnVjdCBwZHNfY29yZV9maW5hbGl6ZV91cGRhdGVfY29tcCAtIEZJTkFMSVpFX1VQREFURSBjb21wbGV0aW9uXG4mIzQzOyAqIEBzdGF0dXM6IGVudW0gcGRzX2NvcmVfc3RhdHVzX2NvZGVcbiYjNDM7ICogQHZlcjogRGV2aWNlJiMzOTtzIG1heCBzdXBwb3J0ZWQgdmVyc2lvbiBvZiB0aGlzIGNvbW1hbmRcbiYjNDM7ICogQHJzdmQ6IFdvcmQgYm91bmRhcnkgcGFkZGluZ1xuJiM0MzsgKi9cbiYjNDM7c3RydWN0IHBkc19jb3JlX2ZpbmFsaXplX3VwZGF0ZV9jb21wIHtcbiYjNDM7XHR1OCBzdGF0dXM7XG4mIzQzO1x0dTggdmVyO1xuJiM0MztcdHU4IHJzdmRbMl07XG4mIzQzO307XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogc3RydWN0IHBkc19jb3JlX21hdGNoX3JlY29yZF9kZXNjX2NtZCAtIE1BVENIX1JFQ09SRF9ERVNDIGNvbW1hbmRcbiYjNDM7ICogQG9wY29kZTogUERTX0NPUkVfQ01EX01BVENIX1JFQ09SRF9ERVNDXG4mIzQzOyAqIEB2ZXI6IERyaXZlciYjMzk7cyBtYXggc3VwcG9ydGVkIHZlcnNpb24gb2YgdGhpcyBjb21tYW5kXG4mIzQzOyAqIEB0eXBlOiBQTERNIERlc2NyaXB0b3IgSWRlbnRpZmllciBUeXBlXG4mIzQzOyAqIEBzaXplOiBMZW5ndGggb2YgdGhlIERlc2NyaXB0b3IgSWRlbnRpZmllciBWYWx1ZVxuJiM0MzsgKiBAcnN2ZDogV29yZCBib3VuZGFyeSBwYWRkaW5nXG4mIzQzOyAqXG4mIzQzOyAqIEV4cGVjdHMgdG8gZmluZCB0aGUgRGVzY3JpcHRvciBJZGVudGlmaWVyIERhdGEgaW4gY21kX3JlZ3MtXHUwMDNlZGF0YS4gRHJpdmVyXG4mIzQzOyAqIHNob3VsZCBrZWVwIHRoZSBkZXZjbWQgaW50ZXJmYWNlIGxvY2tlZCB3aGlsZSBwcmVwYXJpbmcgYW5kIHNlbmRpbmcgdGhpc1xuJiM0MzsgKiBjb21tYW5kLlxuJiM0MzsgKi9cbiYjNDM7c3RydWN0IHBkc19jb3JlX21hdGNoX3JlY29yZF9kZXNjX2NtZCB7XG4mIzQzO1x0dTggb3Bjb2RlO1xuJiM0MztcdHU4IHZlcjtcbiYjNDM7XHRfX2xlMTYgdHlwZTtcbiYjNDM7XHRfX2xlMTYgc2l6ZTtcbiYjNDM7XHR1OCByc3ZkWzJdO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHN0cnVjdCBwZHNfY29yZV9tYXRjaF9yZWNvcmRfZGVzY19jb21wIC0gTUFUQ0hfUkVDT1JEX0RFU0MgY29tcGxldGlvblxuJiM0MzsgKiBAc3RhdHVzOiBlbnVtIHBkc19jb3JlX3N0YXR1c19jb2RlXG4mIzQzOyAqIEB2ZXI6IERldmljZSYjMzk7cyBtYXggc3VwcG9ydGVkIHZlcnNpb24gb2YgdGhpcyBjb21tYW5kXG4mIzQzOyAqIEBtYXRjaDogV2hldGhlciBvciBub3QgdGhlIFJlY29yZCBEZXNjcmlwdG9yIG1hdGNoZXMgdGhlIGRldmljZVxuJiM0MzsgKiBAcnN2ZDogV29yZCBib3VuZGFyeSBwYWRkaW5nXG4mIzQzOyAqXG4mIzQzOyAqIFdoZW4gc3RhdHVzIGlzIFBEU19SQ19TVUNDRVNTLCB0aGVuIEBtYXRjaCBpcyB2YWxpZCwgb3RoZXJ3aXNlIGl0JiMzOTtzXG4mIzQzOyAqIHVuZGVmaW5lZC5cbiYjNDM7ICovXG4mIzQzO3N0cnVjdCBwZHNfY29yZV9tYXRjaF9yZWNvcmRfZGVzY19jb21wIHtcbiYjNDM7XHR1OCBzdGF0dXM7XG4mIzQzO1x0dTggdmVyO1xuJiM0MztcdHU4IG1hdGNoO1xuJiM0MztcdHU4IHJzdmQ7XG4mIzQzO307XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogZW51bSBwZHNfY29yZV9ob3N0X21lbV9vcGVyIC0gSE9TVF9NRU0gc3ViLW9wZXJhdGlvbnNcbiYjNDM7ICogQFBEU19DT1JFX0hPU1RfTUVNX0dFVF9DT1VOVDogUXVlcnkgbnVtYmVyIG9mIG1lbW9yeSByZXF1ZXN0c1xuJiM0MzsgKiBAUERTX0NPUkVfSE9TVF9NRU1fUVVFUlk6ICAgICBRdWVyeSBkZXRhaWxzIG9mIGEgbWVtb3J5IHJlcXVlc3RcbiYjNDM7ICogQFBEU19DT1JFX0hPU1RfTUVNX0FERDogICAgICAgUHJvdmlkZSBhbGxvY2F0ZWQgbWVtb3J5IHRvIGZpcm13YXJlXG4mIzQzOyAqIEBQRFNfQ09SRV9IT1NUX01FTV9ERUw6ICAgICAgIE5vdGlmeSBmaXJtd2FyZSBvZiBtZW1vcnkgZGVhbGxvY2F0aW9uXG4mIzQzOyAqL1xuJiM0MztlbnVtIHBkc19jb3JlX2hvc3RfbWVtX29wZXIge1xuJiM0MztcdFBEU19DT1JFX0hPU1RfTUVNX0dFVF9DT1VOVFx0PSAwLFxuJiM0MztcdFBEU19DT1JFX0hPU1RfTUVNX1FVRVJZXHRcdD0gMSxcbiYjNDM7XHRQRFNfQ09SRV9IT1NUX01FTV9BRERcdFx0PSAyLFxuJiM0MztcdFBEU19DT1JFX0hPU1RfTUVNX0RFTFx0XHQ9IDMsXG4mIzQzO307XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogc3RydWN0IHBkc19jb3JlX2hvc3RfbWVtX2NtZCAtIEhPU1RfTUVNIGNvbW1hbmRcbiYjNDM7ICogQG9wY29kZTogICAgIE9wY29kZSBQRFNfQ09SRV9DTURfSE9TVF9NRU1cbiYjNDM7ICogQG9wZXI6ICAgICAgIE9wZXJhdGlvbiAoZW51bSBwZHNfY29yZV9ob3N0X21lbV9vcGVyKVxuJiM0MzsgKiBAaW5kZXg6ICAgICAgTWVtb3J5IHJlcXVlc3QgaW5kZXggKEdFVF9DT1VOVDogbWF4X2NvdW50LCBRVUVSWTogaW5kZXgpXG4mIzQzOyAqIEB0YWc6ICAgICAgICBUYWcgZm9yIHRoaXMgbWVtb3J5IHJlcXVlc3QgKEFERC9ERUwpXG4mIzQzOyAqIEByZWFzb246ICAgICBSZWFzb24gZm9yIGRlbGV0aW9uIChERUwgb25seSlcbiYjNDM7ICogQHJzdmQ6ICAgICAgIFJlc2VydmVkXG4mIzQzOyAqIEBtYXhfY29udGlnOiBNYXhpbXVtIGNvbnRpZ3VvdXMgbWVtb3J5IHNpemUgKEdFVF9DT1VOVCBvbmx5KVxuJiM0MzsgKiBAc2l6ZTogICAgICAgU2l6ZSBvZiBtZW1vcnkgaW4gYnl0ZXMgKEFERCBvbmx5KVxuJiM0MzsgKiBAYnVmX3BhOiAgICAgRE1BIGFkZHJlc3Mgb2YgbWVtb3J5IChBREQgb25seSlcbiYjNDM7ICpcbiYjNDM7ICogVW5pZmllZCBjb21tYW5kIGZvciBhbGwgaG9zdCBtZW1vcnkgb3BlcmF0aW9ucy4gRmllbGRzIGFyZSByZXVzZWRcbiYjNDM7ICogYWNyb3NzIG9wZXJhdGlvbnMgdG8gbWluaW1pemUgb3Bjb2RlIHNwYWNlIHVzYWdlLlxuJiM0MzsgKi9cbiYjNDM7c3RydWN0IHBkc19jb3JlX2hvc3RfbWVtX2NtZCB7XG4mIzQzO1x0dTggICAgIG9wY29kZTtcbiYjNDM7XHR1OCAgICAgb3BlcjtcbiYjNDM7XHRfX2xlMTYgaW5kZXg7XG4mIzQzO1x0X19sZTE2IHRhZztcbiYjNDM7XHR1OCAgICAgcmVhc29uO1xuJiM0MztcdHU4ICAgICByc3ZkO1xuJiM0MztcdF9fbGUzMiBtYXhfY29udGlnO1xuJiM0MztcdF9fbGUzMiBzaXplO1xuJiM0MztcdF9fbGU2NCBidWZfcGE7XG4mIzQzO307XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogc3RydWN0IHBkc19jb3JlX2hvc3RfbWVtX2NvbXAgLSBIT1NUX01FTSBjb21wbGV0aW9uXG4mIzQzOyAqIEBzdGF0dXM6ICAgICAgIFN0YXR1cyBvZiB0aGUgY29tbWFuZCAoZW51bSBwZHNfY29yZV9zdGF0dXNfY29kZSlcbiYjNDM7ICogQG9wZXI6ICAgICAgICAgT3BlcmF0aW9uIHRoYXQgd2FzIHBlcmZvcm1lZFxuJiM0MzsgKiBAY291bnQ6ICAgICAgICBOdW1iZXIgb2YgbWVtb3J5IHJlcXVlc3RzIChHRVRfQ09VTlQpXG4mIzQzOyAqIEBzaXplOiAgICAgICAgIFNpemUgb2YgbWVtb3J5IHJlcXVlc3QgaW4gYnl0ZXMgKFFVRVJZKVxuJiM0MzsgKiBAdGFnOiAgICAgICAgICBUYWcgZm9yIHRoaXMgbWVtb3J5IHJlcXVlc3QgKFFVRVJZL0RFTClcbiYjNDM7ICogQHJzdmQ6ICAgICAgICAgUmVzZXJ2ZWRcbiYjNDM7ICovXG4mIzQzO3N0cnVjdCBwZHNfY29yZV9ob3N0X21lbV9jb21wIHtcbiYjNDM7XHR1OCAgICAgc3RhdHVzO1xuJiM0MztcdHU4ICAgICBvcGVyO1xuJiM0MztcdF9fbGUxNiBjb3VudDtcbiYjNDM7XHRfX2xlMzIgc2l6ZTtcbiYjNDM7XHRfX2xlMTYgdGFnO1xuJiM0MztcdHU4ICAgICByc3ZkWzZdO1xuJiM0Mzt9O1xuJiM0MztcbiAvKlxuICAqIHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgLSBPdmVybGF5IG9mIGNvcmUgZGV2aWNlIGNvbW1hbmQgc3RydWN0dXJlc1xuICAqL1xuQEAgLTQ2Miw2ICYjNDM7OTE1LDE0IEBAIHVuaW9uIHBkc19jb3JlX2Rldl9jbWQge1xuIFx0c3RydWN0IHBkc19jb3JlX3ZmX3NldGF0dHJfY21kICAgdmZfc2V0YXR0cjtcbiBcdHN0cnVjdCBwZHNfY29yZV92Zl9nZXRhdHRyX2NtZCAgIHZmX2dldGF0dHI7XG4gXHRzdHJ1Y3QgcGRzX2NvcmVfdmZfY3RybF9jbWQgICAgICB2Zl9jdHJsO1xuJiM0MztcbiYjNDM7XHRzdHJ1Y3QgcGRzX2NvcmVfZ2V0X2NvbXBvbmVudF9pbmZvX2NtZCBnZXRfY29tcG9uZW50X2luZm87XG4mIzQzO1x0c3RydWN0IHBkc19jb3JlX3NlbmRfcGtnX2RhdGFfY21kICAgICAgc2VuZF9wa2dfZGF0YTtcbiYjNDM7XHRzdHJ1Y3QgcGRzX2NvcmVfc2VuZF9jb21wb25lbnRfdGJsX2NtZCBzZW5kX2NvbXBvbmVudF90Ymw7XG4mIzQzO1x0c3RydWN0IHBkc19jb3JlX3NlbmRfY29tcG9uZW50X2NtZCAgICAgc2VuZF9jb21wb25lbnQ7XG4mIzQzO1x0c3RydWN0IHBkc19jb3JlX2ZpbmFsaXplX3VwZGF0ZV9jbWQgICAgZmluYWxpemVfdXBkYXRlO1xuJiM0MztcdHN0cnVjdCBwZHNfY29yZV9tYXRjaF9yZWNvcmRfZGVzY19jbWQgIG1hdGNoX3JlY29yZF9kZXNjO1xuJiM0MztcdHN0cnVjdCBwZHNfY29yZV9ob3N0X21lbV9jbWQgICAgICAgICAgIGhvc3RfbWVtO1xuIH07XG4gXG4gLypcbkBAIC00ODAsNiAmIzQzOzk0MSwxNCBAQCB1bmlvbiBwZHNfY29yZV9kZXZfY29tcCB7XG4gXHRzdHJ1Y3QgcGRzX2NvcmVfdmZfc2V0YXR0cl9jb21wICAgdmZfc2V0YXR0cjtcbiBcdHN0cnVjdCBwZHNfY29yZV92Zl9nZXRhdHRyX2NvbXAgICB2Zl9nZXRhdHRyO1xuIFx0c3RydWN0IHBkc19jb3JlX3ZmX2N0cmxfY29tcCAgICAgIHZmX2N0cmw7XG4mIzQzO1xuJiM0MztcdHN0cnVjdCBwZHNfY29yZV9nZXRfY29tcG9uZW50X2luZm9fY29tcCBnZXRfY29tcG9uZW50X2luZm87XG4mIzQzO1x0c3RydWN0IHBkc19jb3JlX3NlbmRfcGtnX2RhdGFfY29tcCAgICAgIHNlbmRfcGtnX2RhdGE7XG4mIzQzO1x0c3RydWN0IHBkc19jb3JlX3NlbmRfY29tcG9uZW50X3RibF9jb21wIHNlbmRfY29tcG9uZW50X3RibDtcbiYjNDM7XHRzdHJ1Y3QgcGRzX2NvcmVfc2VuZF9jb21wb25lbnRfY29tcCAgICAgc2VuZF9jb21wb25lbnQ7XG4mIzQzO1x0c3RydWN0IHBkc19jb3JlX2ZpbmFsaXplX3VwZGF0ZV9jb21wICAgIGZpbmFsaXplX3VwZGF0ZTtcbiYjNDM7XHRzdHJ1Y3QgcGRzX2NvcmVfbWF0Y2hfcmVjb3JkX2Rlc2NfY29tcCAgbWF0Y2hfcmVjb3JkX2Rlc2M7XG4mIzQzO1x0c3RydWN0IHBkc19jb3JlX2hvc3RfbWVtX2NvbXAgICAgICAgICAgIGhvc3RfbWVtO1xuIH07XG4gXG4gLyoqXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTA6MDM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBBTUQvUGVuc2FuZG8gQ29yZSBTbWFydE5JQyBkcml2ZXIgKHBkc19jb3JlKSwgd2hpY2ggcmVxdWlyZXMgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4gVGhlcmVmb3JlLCB0aGUgY29kZSBpcyB1bnJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4ZmQ3ZGY5MzU4MzE2NDQ4NThmZTBkZWIzMzljNzg2ZDQ3YTdkODU3CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBKdWwgMzAgMTA6MDM6NDQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvYW1kL3Bkc19jb3JlLnJzdCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC9hbWQvcGRzX2NvcmUucnN0CmluZGV4IDllOGExNmM0NDEwMjkuLjQ5NDg3YTM1YzE2MzIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC9hbWQvcGRzX2NvcmUucnN0CiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC9hbWQvcGRzX2NvcmUucnN0CkBAIC0xMDIsNiAmIzQzOzEwMiw5NSBAQCBjdXJyZW50bHkgaW4gdXNlLCBhbmQgdGhhdCBiYW5rIHdpbGwgdXNlZCBmb3IgdGhlIG5leHQgYm9vdDo6CiAgICMgZGV2bGluayBkZXYgZmxhc2ggcGNpLzAwMDA6YjU6MDAuMCBcCiAgICAgICAgICAgICBmaWxlIHBlbnNhbmRvL2RzY19md18xLjYzLjAtMjIudGFyCiAKJiM0MztGaXJtd2FyZSBNYW5hZ2VtZW50IChQTERNKQomIzQzOz09PT09PT09PT09PT09PT09PT09PT09PT09CiYjNDM7CiYjNDM7RmlybXdhcmUgdGhhdCBzdXBwb3J0cyBQTERNIGNhbiBiZSB1cGRhdGVkIHVzaW5nIHRoZSBkZXZsaW5rIGZsYXNoIGNvbW1hbmQKJiM0Mzt3aXRoIGEgUExETSBmaXJtd2FyZSBwYWNrYWdlLiBUaGUgZW50aXJlIHBhY2thZ2UgY2FuIGJlIHVwZGF0ZWQgYXQgb25jZTo6CiYjNDM7CiYjNDM7ICAjIGRldmxpbmsgZGV2IGZsYXNoIHBjaS8wMDAwOmI1OjAwLjAgZmlsZSBmaXJtd2FyZS5wbGRtZncKJiM0MzsKJiM0MztJbmRpdmlkdWFsIGNvbXBvbmVudHMgY2FuIGFsc28gYmUgdXBkYXRlZCBieSBzcGVjaWZ5aW5nIHRoZSBjb21wb25lbnQgbmFtZTo6CiYjNDM7CiYjNDM7ICAjIGRldmxpbmsgZGV2IGZsYXNoIHBjaS8wMDAwOmI1OjAwLjAgXAomIzQzOyAgICAgICAgICAgIGZpbGUgZmlybXdhcmUucGxkbWZ3IGNvbXBvbmVudCBmdy5jcGxkCiYjNDM7CiYjNDM7UGVyLWNvbXBvbmVudCB1cGRhdGUgdXNlcyBkcml2ZXItZGVmaW5lZCBjb21wb25lbnQgbmFtZXMgKGZ3LCBmdy5jcGxkLAomIzQzO2V0Yy4pLiBOb3QgYWxsIGNvbXBvbmVudHMgc3VwcG9ydCBwZXItY29tcG9uZW50IHVwZGF0ZSAtCiYjNDM7ZGV2bGluayB3aWxsIHJlamVjdCB0aGUgcmVxdWVzdCBpZiB0aGUgc3BlY2lmaWVkIGNvbXBvbmVudCBjYW5ub3QKJiM0MztiZSB1cGRhdGVkLgomIzQzOwomIzQzO0dvbGQgKHJlY292ZXJ5KSBjb21wb25lbnRzIGNhbiBiZSB1cGRhdGVkIGJ5IHNwZWNpZnlpbmcgdGhlIGJhc2UgY29tcG9uZW50CiYjNDM7bmFtZSAoZS5nLiwgYGBmd2BgIGZvciBgYGZ3LmdvbGRgYCkgd2l0aCBhIGdvbGRmdyBwYWNrYWdlIGZpbGUgd2hlbiB0aGUKJiM0MztkZXZpY2Ugc3VwcG9ydHMgcGVyLWNvbXBvbmVudCB1cGRhdGUuIFRoZSBgYC5nb2xkYGAgc3VmZml4IGluIGRldmxpbmsgaW5mbwomIzQzO291dHB1dCBpbmRpY2F0ZXMgdGhlIGdvbGQgc2xvdCB2ZXJzaW9uLCBub3QgYSBmbGFzaCB0YXJnZXQuCiYjNDM7CiYjNDM7SW5mbyB2ZXJzaW9ucyAoUExETSkKJiM0Mzs9PT09PT09PT09PT09PT09PT09PQomIzQzOwomIzQzO0Zpcm13YXJlIHRoYXQgc3VwcG9ydHMgUExETSByZXBvcnRzIGNvbXBvbmVudCB2ZXJzaW9ucyB1c2luZyBkcml2ZXItZGVmaW5lZAomIzQzO25hbWVzLiBUaGUgZHJpdmVyIHJlcG9ydHMgdGhlIGZvbGxvd2luZyBjb21wb25lbnQgdmVyc2lvbnM6CiYjNDM7CiYjNDM7Li4gbGlzdC10YWJsZTo6IGRldmxpbmsgaW5mbyB2ZXJzaW9ucyBmb3IgUExETS1jYXBhYmxlIGZpcm13YXJlCiYjNDM7ICAgOndpZHRoczogNSA1IDkwCiYjNDM7CiYjNDM7ICAgKiAtIE5hbWUKJiM0MzsgICAgIC0gVHlwZQomIzQzOyAgICAgLSBEZXNjcmlwdGlvbgomIzQzOyAgICogLSBgYGZ3YGAKJiM0MzsgICAgIC0gcnVubmluZywgc3RvcmVkCiYjNDM7ICAgICAtIE1haW4gZmlybXdhcmUKJiM0MzsgICAqIC0gYGBmdy5nb2xkYGAKJiM0MzsgICAgIC0gc3RvcmVkCiYjNDM7ICAgICAtIEdvbGQgKHJlY292ZXJ5KSBmaXJtd2FyZQomIzQzOyAgICogLSBgYGZ3LmJvb3Rsb2FkZXJgYAomIzQzOyAgICAgLSBydW5uaW5nLCBzdG9yZWQKJiM0MzsgICAgIC0gQm9vdCBsb2FkZXIKJiM0MzsgICAqIC0gYGBmdy5jcGxkYGAKJiM0MzsgICAgIC0gcnVubmluZywgc3RvcmVkCiYjNDM7ICAgICAtIENQTEQKJiM0MzsgICAqIC0gYGBmdy5zZWN1cmVgYAomIzQzOyAgICAgLSBydW5uaW5nLCBzdG9yZWQKJiM0MzsgICAgIC0gU2VjdXJlIGJvb3QgZmlybXdhcmUKJiM0MzsgICAqIC0gYGBmdy5mcGdhYGAKJiM0MzsgICAgIC0gcnVubmluZywgc3RvcmVkCiYjNDM7ICAgICAtIEZQR0EgY29uZmlndXJhdGlvbgomIzQzOyAgICogLSBgYGZ3LnN1Y2BgCiYjNDM7ICAgICAtIHJ1bm5pbmcsIHN0b3JlZAomIzQzOyAgICAgLSBTeXN0ZW0gVW5pdCBDb250cm9sbGVyIGZpcm13YXJlCiYjNDM7ICAgKiAtIGBgZncuc3VjLmJvb3Rsb2FkZXJgYAomIzQzOyAgICAgLSBydW5uaW5nLCBzdG9yZWQKJiM0MzsgICAgIC0gU3lzdGVtIFVuaXQgQ29udHJvbGxlciBib290bG9hZGVyCiYjNDM7ICAgKiAtIGBgZncudWJvb3RgYAomIzQzOyAgICAgLSBydW5uaW5nLCBzdG9yZWQKJiM0MzsgICAgIC0gVS1Cb290IGJvb3Rsb2FkZXIKJiM0MzsgICAqIC0gYGBhc2ljLmlkYGAKJiM0MzsgICAgIC0gZml4ZWQKJiM0MzsgICAgIC0gVGhlIEFTSUMgdHlwZSBmb3IgdGhpcyBkZXZpY2UKJiM0MzsgICAqIC0gYGBhc2ljLnJldmBgCiYjNDM7ICAgICAtIGZpeGVkCiYjNDM7ICAgICAtIFRoZSByZXZpc2lvbiBvZiB0aGUgQVNJQyBmb3IgdGhpcyBkZXZpY2UKJiM0MzsKJiM0MztFeGFtcGxlIG91dHB1dDo6CiYjNDM7CiYjNDM7ICAkIGRldmxpbmsgZGV2IGluZm8gcGNpLzAwMDA6MDA6MDUuMAomIzQzOyAgcGNpLzAwMDA6MDA6MDUuMDoKJiM0MzsgICAgZHJpdmVyIHBkc19jb3JlCiYjNDM7ICAgIHNlcmlhbF9udW1iZXIgRkxNMTg0MjAwNzMKJiM0MzsgICAgdmVyc2lvbnM6CiYjNDM7ICAgICAgICBmaXhlZDoKJiM0MzsgICAgICAgICAgYXNpYy5pZCAweDAKJiM0MzsgICAgICAgICAgYXNpYy5yZXYgMHgwCiYjNDM7ICAgICAgICBydW5uaW5nOgomIzQzOyAgICAgICAgICBmdy5ib290bG9hZGVyIDEuMi4zCiYjNDM7ICAgICAgICAgIGZ3IDEuMy4wCiYjNDM7ICAgICAgICAgIGZ3LmNwbGQgMy4xOAomIzQzOyAgICAgICAgc3RvcmVkOgomIzQzOyAgICAgICAgICBmdy5ib290bG9hZGVyIDEuMi4zCiYjNDM7ICAgICAgICAgIGZ3LmdvbGQgMS4yLjAKJiM0MzsgICAgICAgICAgZncgMS4zLjAKJiM0MzsgICAgICAgICAgZncuY3BsZCAzLjE4CiYjNDM7CiBIZWFsdGggUmVwb3J0ZXJzCiA9PT09PT09PT09PT09PT09CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9LY29uZmlnIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL0tjb25maWcKaW5kZXggZTM1OTkxMTQxYTFhMi4uNzQzZTNkNGI2Yjk0ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL0tjb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL0tjb25maWcKQEAgLTE3MSw2ICYjNDM7MTcxLDcgQEAgY29uZmlnIFBEU19DT1JFCiAJZGVwZW5kcyBvbiA2NEJJVCAmYW1wOyZhbXA7IFBDSQogCXNlbGVjdCBBVVhJTElBUllfQlVTCiAJc2VsZWN0IE5FVF9ERVZMSU5LCiYjNDM7CXNlbGVjdCBQTERNRlcKIAloZWxwCiAJICBUaGlzIGVuYWJsZXMgdGhlIHN1cHBvcnQgZm9yIHRoZSBBTUQvUGVuc2FuZG8gQ29yZSBkZXZpY2UgZmFtaWx5IG9mCiAJICBhZGFwdGVycy4gIE1vcmUgc3BlY2lmaWMgaW5mb3JtYXRpb24gb24gdGhpcyBkcml2ZXIgY2FuIGJlCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvY29yZS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL2NvcmUuYwppbmRleCAwNGVjMjU2OWM2MWMwLi45MjJlM2VjOGFmMWI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9jb3JlLmMKQEAgLTQ4OSw2ICYjNDM7NDg5LDE1IEBAIHZvaWQgcGRzY190ZWFyZG93bihzdHJ1Y3QgcGRzYyAqcGRzYywgYm9vbCByZW1vdmluZykKIAkJcGRzY19kZXZjbWRfcmVzZXQocGRzYyk7CiAKIAlwY2lfY2xlYXJfbWFzdGVyKHBkc2MtJmd0O3BkZXYpOwomIzQzOwlpZiAoIXBkc2MtJmd0O3BkZXYtJmd0O2lzX3ZpcnRmbikgewomIzQzOwkJdTE2IHZhbDsKJiM0MzsKJiM0MzsJCS8qIEZsdXNoIGFueSBpbi1mbGlnaHQgRE1BIGJlZm9yZSBmcmVlaW5nIGJ1ZmZlcnMuCiYjNDM7CQkgKiBBIGNvbmZpZyByZWFkIGNvbXBsZXRpb24gY2Fubm90IHJldHVybiB1bnRpbCBhbGwgcHJpb3IKJiM0MzsJCSAqIGRldmljZS1pbml0aWF0ZWQgbWVtb3J5IHdyaXRlcyBoYXZlIGNvbXBsZXRlZC4KJiM0MzsJCSAqLwomIzQzOwkJcGNpX3JlYWRfY29uZmlnX3dvcmQocGRzYy0mZ3Q7cGRldiwgUENJX1ZFTkRPUl9JRCwgJmFtcDt2YWwpOwomIzQzOwl9CiAKIAlwZHNjX2NvcmVfdW5pbml0KHBkc2MpOwogCkBAIC00OTcsNiAmIzQzOzUwNiw4IEBAIHZvaWQgcGRzY190ZWFyZG93bihzdHJ1Y3QgcGRzYyAqcGRzYywgYm9vbCByZW1vdmluZykKIAkJcGRzYy0mZ3Q7dmlmdHlwZV9zdGF0dXMgPSBOVUxMOwogCX0KIAomIzQzOwlwZHNjX2RlYnVnZnNfZGVsX2hvc3RfbWVtKHBkc2MpOwomIzQzOwlwZHNjX2hvc3RfbWVtX2ZyZWUocGRzYyk7CiAJcGRzY19kZXZfdW5pbml0KHBkc2MpOwogCiAJc2V0X2JpdChQRFNDX1NfRldfREVBRCwgJmFtcDtwZHNjLSZndDtzdGF0ZSk7CkBAIC01MDYsNiAmIzQzOzUxNyw4IEBAIGludCBwZHNjX3N0YXJ0KHN0cnVjdCBwZHNjICpwZHNjKQogewogCXBkc19jb3JlX2ludHJfbWFzaygmYW1wO3Bkc2MtJmd0O2ludHJfY3RybFtwZHNjLSZndDthZG1pbnFjcS5pbnR4XSwKIAkJCSAgIFBEU19DT1JFX0lOVFJfTUFTS19DTEVBUik7CiYjNDM7CXBkc2NfaG9zdF9tZW1fYWRkKHBkc2MpOwomIzQzOwlwZHNjX2RlYnVnZnNfYWRkX2hvc3RfbWVtKHBkc2MpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC01ODcsNiAmIzQzOzYwMCw4IEBAIHZvaWQgcGRzY19md191cChzdHJ1Y3QgcGRzYyAqcGRzYykKIAkJcmV0dXJuOwogCX0KIAomIzQzOwlwZHNjX2Z3X2NvbXBvbmVudHNfaW52YWxpZGF0ZShwZHNjKTsKJiM0MzsKIAllcnIgPSBwZHNjX3NldHVwKHBkc2MsIFBEU0NfU0VUVVBfUkVDT1ZFUlkpOwogCWlmIChlcnIpCiAJCWdvdG8gZXJyX291dDsKQEAgLTY3MCwzICYjNDM7Njg1LDE2MSBAQCB2b2lkIHBkc2NfaGVhbHRoX3RocmVhZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiBvdXRfdW5sb2NrOgogCW11dGV4X3VubG9jaygmYW1wO3Bkc2MtJmd0O2NvbmZpZ19sb2NrKTsKIH0KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBwZHNjX2hvc3RfbWVtX2RlbF9vbmUoc3RydWN0IHBkc2MgKnBkc2MsIHUxNiB0YWcsIHU4IHJlYXNvbikKJiM0Mzt7CiYjNDM7CXVuaW9uIHBkc19jb3JlX2Rldl9jb21wIGNvbXAgPSB7fTsKJiM0MzsJdW5pb24gcGRzX2NvcmVfZGV2X2NtZCBjbWQgPSB7CiYjNDM7CQkuaG9zdF9tZW0ub3Bjb2RlID0gUERTX0NPUkVfQ01EX0hPU1RfTUVNLAomIzQzOwkJLmhvc3RfbWVtLm9wZXIgPSBQRFNfQ09SRV9IT1NUX01FTV9ERUwsCiYjNDM7CQkuaG9zdF9tZW0udGFnID0gY3B1X3RvX2xlMTYodGFnKSwKJiM0MzsJCS5ob3N0X21lbS5yZWFzb24gPSByZWFzb24sCiYjNDM7CX07CiYjNDM7CiYjNDM7CWRldl9kYmcocGRzYy0mZ3Q7ZGV2LCAmIzM0O1NlbmRpbmcgZGV2Y21kIGZvciBtZW0gZGVsIHRhZyAlZFxuJiMzNDssIHRhZyk7CiYjNDM7CXBkc2NfZGV2Y21kKHBkc2MsICZhbXA7Y21kLCAmYW1wO2NvbXAsIHBkc2MtJmd0O2RldmNtZF90aW1lb3V0KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBwZHNjX2hvc3RfbWVtX2FkZF9vbmUoc3RydWN0IHBkc2MgKnBkc2MsIGludCBpbmRleCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwZHNjX2hvc3RfbWVtICpobSA9ICZhbXA7cGRzYy0mZ3Q7aG9zdF9tZW1fcmVxc1tpbmRleF07CiYjNDM7CXVuaW9uIHBkc19jb3JlX2Rldl9jb21wIGNvbXAgPSB7fTsKJiM0MzsJdW5pb24gcGRzX2NvcmVfZGV2X2NtZCBjbWQgPSB7fTsKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJY21kLmhvc3RfbWVtLm9wY29kZSA9IFBEU19DT1JFX0NNRF9IT1NUX01FTTsKJiM0MzsJY21kLmhvc3RfbWVtLm9wZXIgPSBQRFNfQ09SRV9IT1NUX01FTV9RVUVSWTsKJiM0MzsJY21kLmhvc3RfbWVtLmluZGV4ID0gY3B1X3RvX2xlMTYoaW5kZXgpOwomIzQzOwlkZXZfZGJnKHBkc2MtJmd0O2RldiwgJiMzNDtTZW5kaW5nIGRldmNtZCBmb3IgbWVtIHF1ZXJ5IGluZGV4ICVkXG4mIzM0OywgaW5kZXgpOwomIzQzOwllcnIgPSBwZHNjX2RldmNtZChwZHNjLCAmYW1wO2NtZCwgJmFtcDtjb21wLCBwZHNjLSZndDtkZXZjbWRfdGltZW91dCk7CiYjNDM7CWlmIChlcnIgfHwgY29tcC5zdGF0dXMgIT0gUERTX1JDX1NVQ0NFU1MpIHsKJiM0MzsJCWRldl9lcnIocGRzYy0mZ3Q7ZGV2LCAmIzM0O21lbSBxdWVyeSBmYWlsZWQgZXJyICVkIHN0YXR1cyAlZFxuJiMzNDssCiYjNDM7CQkJZXJyLCBjb21wLnN0YXR1cyk7CiYjNDM7CQlyZXR1cm4gZXJyID8gZXJyIDogLUVJTzsKJiM0MzsJfQomIzQzOwlobS0mZ3Q7c2l6ZSA9IGxlMzJfdG9fY3B1KGNvbXAuaG9zdF9tZW0uc2l6ZSk7CiYjNDM7CWhtLSZndDt0YWcgPSBsZTE2X3RvX2NwdShjb21wLmhvc3RfbWVtLnRhZyk7CiYjNDM7CWRldl9kYmcocGRzYy0mZ3Q7ZGV2LCAmIzM0O21lbSBxdWVyeSByZXR1cm5lZCBzaXplICVkIHRhZyAlZFxuJiMzNDssCiYjNDM7CQlobS0mZ3Q7c2l6ZSwgaG0tJmd0O3RhZyk7CiYjNDM7CiYjNDM7CWlmICghaG0tJmd0O3NpemUgfHwgaG0tJmd0O3NpemUgJmd0OyBQRFNDX0hPU1RfTUVNX01BWF9DT05USUcpIHsKJiM0MzsJCWRldl9lcnIocGRzYy0mZ3Q7ZGV2LCAmIzM0O2ludmFsaWQgc2l6ZSAlZCBmb3IgdGFnICVkXG4mIzM0OywKJiM0MzsJCQlobS0mZ3Q7c2l6ZSwgaG0tJmd0O3RhZyk7CiYjNDM7CQllcnIgPSAtRUlOVkFMOwomIzQzOwkJZ290byBlcnJfZGVsOwomIzQzOwl9CiYjNDM7CiYjNDM7CWhtLSZndDtvcmRlciA9IGdldF9vcmRlcihobS0mZ3Q7c2l6ZSk7CiYjNDM7CWhtLSZndDtwZyA9IGFsbG9jX3BhZ2VzKEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPIHwgX19HRlBfTk9XQVJOLCBobS0mZ3Q7b3JkZXIpOwomIzQzOwlpZiAoIWhtLSZndDtwZykgewomIzQzOwkJZGV2X3dhcm4ocGRzYy0mZ3Q7ZGV2LCAmIzM0O2FsbG9jIG9yZGVyICVkIGZhaWxlZCBmb3IgdGFnICVkXG4mIzM0OywKJiM0MzsJCQkgaG0tJmd0O29yZGVyLCBobS0mZ3Q7dGFnKTsKJiM0MzsJCWVyciA9IC1FTk9NRU07CiYjNDM7CQlnb3RvIGVycl9kZWw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaG0tJmd0O3BhID0gZG1hX21hcF9wYWdlKHBkc2MtJmd0O2RldiwgaG0tJmd0O3BnLCAwLCBobS0mZ3Q7c2l6ZSwKJiM0MzsJCQkgICAgICBETUFfQklESVJFQ1RJT05BTCk7CiYjNDM7CWlmIChkbWFfbWFwcGluZ19lcnJvcihwZHNjLSZndDtkZXYsIGhtLSZndDtwYSkpIHsKJiM0MzsJCWRldl9lcnIocGRzYy0mZ3Q7ZGV2LCAmIzM0O2RtYSBtYXAgZmFpbGVkIGZvciB0YWcgJWQgc2l6ZSAlZFxuJiMzNDssCiYjNDM7CQkJaG0tJmd0O3RhZywgaG0tJmd0O3NpemUpOwomIzQzOwkJX19mcmVlX3BhZ2VzKGhtLSZndDtwZywgaG0tJmd0O29yZGVyKTsKJiM0MzsJCWhtLSZndDtwZyA9IE5VTEw7CiYjNDM7CQllcnIgPSAtRUlPOwomIzQzOwkJZ290byBlcnJfZGVsOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIFRyYWNrIHRoaXMgYWxsb2NhdGlvbiBzbyBwZHNjX2hvc3RfbWVtX2ZyZWUoKSBjYW4gY2xlYW4gaXQgdXAgKi8KJiM0MzsJcGRzYy0mZ3Q7bnVtX2hvc3RfbWVtX3JlcXMmIzQzOyYjNDM7OwomIzQzOwomIzQzOwltZW1zZXQoJmFtcDtjbWQsIDAsIHNpemVvZihjbWQpKTsKJiM0MzsJbWVtc2V0KCZhbXA7Y29tcCwgMCwgc2l6ZW9mKGNvbXApKTsKJiM0MzsJY21kLmhvc3RfbWVtLm9wY29kZSA9IFBEU19DT1JFX0NNRF9IT1NUX01FTTsKJiM0MzsJY21kLmhvc3RfbWVtLm9wZXIgPSBQRFNfQ09SRV9IT1NUX01FTV9BREQ7CiYjNDM7CWNtZC5ob3N0X21lbS50YWcgPSBjcHVfdG9fbGUxNihobS0mZ3Q7dGFnKTsKJiM0MzsJY21kLmhvc3RfbWVtLnNpemUgPSBjcHVfdG9fbGUzMihobS0mZ3Q7c2l6ZSk7CiYjNDM7CWNtZC5ob3N0X21lbS5idWZfcGEgPSBjcHVfdG9fbGU2NChobS0mZ3Q7cGEpOwomIzQzOwomIzQzOwlkZXZfZGJnKHBkc2MtJmd0O2RldiwgJiMzNDtTZW5kaW5nIGRldmNtZCBmb3IgbWVtIGFkZCB0YWcgJWQgc2l6ZSAlZCBwYSAlcGFkXG4mIzM0OywKJiM0MzsJCWhtLSZndDt0YWcsIGhtLSZndDtzaXplLCAmYW1wO2htLSZndDtwYSk7CiYjNDM7CWVyciA9IHBkc2NfZGV2Y21kKHBkc2MsICZhbXA7Y21kLCAmYW1wO2NvbXAsIHBkc2MtJmd0O2RldmNtZF90aW1lb3V0KTsKJiM0MzsJaWYgKGVyciB8fCBjb21wLnN0YXR1cyAhPSBQRFNfUkNfU1VDQ0VTUykgewomIzQzOwkJZGV2X2VycihwZHNjLSZndDtkZXYsICYjMzQ7bWVtIGFkZCBmYWlsZWQgZXJyICVkIHN0YXR1cyAlZCBmb3IgdGFnICVkXG4mIzM0OywKJiM0MzsJCQllcnIsIGNvbXAuc3RhdHVzLCBobS0mZ3Q7dGFnKTsKJiM0MzsJCWVyciA9IGVyciA/IGVyciA6IC1FSU87CiYjNDM7CQlnb3RvIGVycl9kZWw7CiYjNDM7CX0KJiM0MzsJZGV2X2RiZyhwZHNjLSZndDtkZXYsICYjMzQ7bWVtIGFkZCBjb21wbGV0ZWQgZm9yIHRhZyAlZFxuJiMzNDssIGhtLSZndDt0YWcpOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0MzsKJiM0MztlcnJfZGVsOgomIzQzOwkvKiBBZnRlciBNRU1fUVVFUlkgc3VjY2VlZHMsIGZpcm13YXJlIGV4cGVjdHMgTUVNX0FERCBvciBNRU1fREVMICovCiYjNDM7CXBkc2NfaG9zdF9tZW1fZGVsX29uZShwZHNjLCBobS0mZ3Q7dGFnLCBQRFNfUkNfRU5PTUVNKTsKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBwZHNjX2hvc3RfbWVtX2FkZChzdHJ1Y3QgcGRzYyAqcGRzYykKJiM0Mzt7CiYjNDM7CXVuaW9uIHBkc19jb3JlX2Rldl9jb21wIGNvbXAgPSB7fTsKJiM0MzsJdW5pb24gcGRzX2NvcmVfZGV2X2NtZCBjbWQgPSB7fTsKJiM0MzsJdTE2IGNvdW50OwomIzQzOwlpbnQgZXJyOwomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJaWYgKCEocGRzYy0mZ3Q7ZGV2X2lkZW50LmNhcGFiaWxpdGllcyAmYW1wOwomIzQzOwkgICAgIGNwdV90b19sZTY0KFBEU19DT1JFX0RFVl9DQVBfSE9TVF9NRU0pKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJY21kLmhvc3RfbWVtLm9wY29kZSA9IFBEU19DT1JFX0NNRF9IT1NUX01FTTsKJiM0MzsJY21kLmhvc3RfbWVtLm9wZXIgPSBQRFNfQ09SRV9IT1NUX01FTV9HRVRfQ09VTlQ7CiYjNDM7CWNtZC5ob3N0X21lbS5pbmRleCA9IGNwdV90b19sZTE2KFBEU0NfSE9TVF9NRU1fTUFYX0NPVU5UKTsKJiM0MzsJY21kLmhvc3RfbWVtLm1heF9jb250aWcgPSBjcHVfdG9fbGUzMihQRFNDX0hPU1RfTUVNX01BWF9DT05USUcpOwomIzQzOwlkZXZfZGJnKHBkc2MtJmd0O2RldiwgJiMzNDtTZW5kaW5nIGRldmNtZCBmb3IgbWVtIGdldCBjb3VudCBtYXhfY29udGlnICV1XG4mIzM0OywKJiM0MzsJCVBEU0NfSE9TVF9NRU1fTUFYX0NPTlRJRyk7CiYjNDM7CWVyciA9IHBkc2NfZGV2Y21kKHBkc2MsICZhbXA7Y21kLCAmYW1wO2NvbXAsIHBkc2MtJmd0O2RldmNtZF90aW1lb3V0KTsKJiM0MzsJaWYgKGVyciB8fCBjb21wLnN0YXR1cyAhPSBQRFNfUkNfU1VDQ0VTUykgewomIzQzOwkJZGV2X2VycihwZHNjLSZndDtkZXYsICYjMzQ7bWVtIGdldCBjb3VudCBmYWlsZWQgZXJyICVkIHN0YXR1cyAlZFxuJiMzNDssCiYjNDM7CQkJZXJyLCBjb21wLnN0YXR1cyk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJY291bnQgPSBtaW4obGUxNl90b19jcHUoY29tcC5ob3N0X21lbS5jb3VudCksCiYjNDM7CQkgICAgUERTQ19IT1NUX01FTV9NQVhfQ09VTlQpOwomIzQzOwlkZXZfZGJnKHBkc2MtJmd0O2RldiwgJiMzNDttZW0gZ2V0IGNvdW50IHJldHVybmVkIGNvdW50ICVkXG4mIzM0OywgY291bnQpOwomIzQzOwlpZiAoY291bnQgPT0gMCkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJcGRzYy0mZ3Q7aG9zdF9tZW1fcmVxcyA9IGt6YWxsb2Nfb2JqcygqcGRzYy0mZ3Q7aG9zdF9tZW1fcmVxcywgY291bnQsCiYjNDM7CQkJCQkgICBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCFwZHNjLSZndDtob3N0X21lbV9yZXFzKSB7CiYjNDM7CQlkZXZfZXJyKHBkc2MtJmd0O2RldiwgJiMzNDtmYWlsZWQgdG8gYWxsb2MgaG9zdF9tZW1fcmVxcyBhcnJheVxuJiMzNDspOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBjb3VudDsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWVyciA9IHBkc2NfaG9zdF9tZW1fYWRkX29uZShwZHNjLCBpKTsKJiM0MzsJCWlmIChlcnIpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBwZHNjX2hvc3RfbWVtX2ZyZWUoc3RydWN0IHBkc2MgKnBkc2MpCiYjNDM7ewomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJaWYgKCFwZHNjLSZndDtob3N0X21lbV9yZXFzKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgcGRzYy0mZ3Q7bnVtX2hvc3RfbWVtX3JlcXM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlkbWFfdW5tYXBfcGFnZShwZHNjLSZndDtkZXYsIHBkc2MtJmd0O2hvc3RfbWVtX3JlcXNbaV0ucGEsCiYjNDM7CQkJICAgICAgIHBkc2MtJmd0O2hvc3RfbWVtX3JlcXNbaV0uc2l6ZSwKJiM0MzsJCQkgICAgICAgRE1BX0JJRElSRUNUSU9OQUwpOwomIzQzOwkJX19mcmVlX3BhZ2VzKHBkc2MtJmd0O2hvc3RfbWVtX3JlcXNbaV0ucGcsCiYjNDM7CQkJICAgICBwZHNjLSZndDtob3N0X21lbV9yZXFzW2ldLm9yZGVyKTsKJiM0MzsJfQomIzQzOwomIzQzOwlrZnJlZShwZHNjLSZndDtob3N0X21lbV9yZXFzKTsKJiM0MzsJcGRzYy0mZ3Q7aG9zdF9tZW1fcmVxcyA9IE5VTEw7CiYjNDM7CXBkc2MtJmd0O251bV9ob3N0X21lbV9yZXFzID0gMDsKJiM0Mzt9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvY29yZS5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL2NvcmUuaAppbmRleCBiN2ZlOWFkNzMzNDk4Li43OTE3NTZhNTA4NzBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvY29yZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9jb3JlLmgKQEAgLTUsNiAmIzQzOzUsNyBAQAogI2RlZmluZSBfUERTQ19IXwogCiAjaW5jbHVkZSAmbHQ7bGludXgvZGVidWdmcy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9tbXpvbmUuaCZndDsKICNpbmNsdWRlICZsdDtuZXQvZGV2bGluay5oJmd0OwogCiAjaW5jbHVkZSAmbHQ7bGludXgvcGRzL3Bkc19jb21tb24uaCZndDsKQEAgLTIzLDYgJiM0MzsyNCwyMCBAQAogI2RlZmluZSBQRFNDX1NFVFVQX1JFQ09WRVJZCWZhbHNlCiAjZGVmaW5lIFBEU0NfU0VUVVBfSU5JVAkJdHJ1ZQogCiYjNDM7LyogVXNlIGZpeGVkIDRNQiBpbnN0ZWFkIG9mIFBBR0VfU0laRSAmbHQ7Jmx0OyBNQVhfUEFHRV9PUkRFUiB0byBhdm9pZAomIzQzOyAqIGNwdV90b19sZTMyKCkgdHJ1bmNhdGlvbiBvbiBsYXJnZS1wYWdlIGNvbmZpZ3MKJiM0MzsgKi8KJiM0MzsjZGVmaW5lIFBEU0NfSE9TVF9NRU1fTUFYX0NPTlRJRyAoNCAqIDEwMjQgKiAxMDI0KQomIzQzOyNkZWZpbmUgUERTQ19IT1NUX01FTV9NQVhfQ09VTlQgIDI1NgomIzQzOwomIzQzO3N0cnVjdCBwZHNjX2RlZmVycmVkX2RtYSB7CiYjNDM7CXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKJiM0MzsJZG1hX2FkZHJfdCBkbWFfYWRkcjsKJiM0MzsJdm9pZCAqdmE7CiYjNDM7CXNpemVfdCBzaXplOwomIzQzOwllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXI7CiYjNDM7fTsKJiM0MzsKIHN0cnVjdCBwZHNjX2Rldl9iYXIgewogCXZvaWQgX19pb21lbSAqdmFkZHI7CiAJcGh5c19hZGRyX3QgYnVzX2FkZHI7CkBAIC0xNDEsNiAmIzQzOzE1NiwxNCBAQCBzdHJ1Y3QgcGRzY192aWZ0eXBlIHsKIAlzdHJ1Y3QgcGRzX2F1eGlsaWFyeV9kZXYgKnBhZGV2OwogfTsKIAomIzQzO3N0cnVjdCBwZHNjX2hvc3RfbWVtIHsKJiM0MzsJdTMyIHNpemU7CiYjNDM7CXUxNiB0YWc7CiYjNDM7CXU4IG9yZGVyOwomIzQzOwlzdHJ1Y3QgcGFnZSAqcGc7CiYjNDM7CWRtYV9hZGRyX3QgcGE7CiYjNDM7fTsKJiM0MzsKIC8qIE5vIHN0YXRlIGZsYWdzIHNldCBtZWFucyB3ZSBhcmUgaW4gYSBzdGVhZHkgcnVubmluZyBzdGF0ZSAqLwogZW51bSBwZHNjX3N0YXRlX2ZsYWdzIHsKIAlQRFNDX1NfRldfREVBRCwJCSAgICAvKiBzdG9wcGVkLCB3YWl0IG9uIHN0YXJ0dXAgb3IgcmVjb3ZlcnkgKi8KQEAgLTE4NSw2ICYjNDM7MjA4LDggQEAgc3RydWN0IHBkc2MgewogCXN0cnVjdCBtdXRleCBkZXZjbWRfbG9jazsJLyogbG9jayBmb3IgZGV2X2NtZCBvcGVyYXRpb25zICovCiAJc3RydWN0IG11dGV4IGNvbmZpZ19sb2NrOwkvKiBsb2NrIGZvciBjb25maWd1cmF0aW9uIG9wZXJhdGlvbnMgKi8KIAlzcGlubG9ja190IGFkbWlucV9sb2NrOwkJLyogbG9jayBmb3IgYWRtaW5xIG9wZXJhdGlvbnMgKi8KJiM0MzsJc3RydWN0IGxpc3RfaGVhZCBkZWZlcnJlZF9kbWFfbGlzdDsKJiM0MzsJc3BpbmxvY2tfdCBkZWZlcnJlZF9kbWFfbG9jazsJLyogbG9jayBmb3IgZGVmZXJyZWQgRE1BIGxpc3QgKi8KIAlyZWZjb3VudF90IGFkbWlucV9yZWZjbnQ7CiAJc3RydWN0IHBkc19jb3JlX2Rldl9pbmZvX3JlZ3MgX19pb21lbSAqaW5mb19yZWdzOwogCXN0cnVjdCBwZHNfY29yZV9kZXZfY21kX3JlZ3MgX19pb21lbSAqY21kX3JlZ3M7CkBAIC0xOTksNiAmIzQzOzIyNCwxMSBAQCBzdHJ1Y3QgcGRzYyB7CiAJdTY0IGxhc3RfZWlkOwogCXN0cnVjdCBwZHNjX3ZpZnR5cGUgKnZpZnR5cGVfc3RhdHVzOwogCXN0cnVjdCB3b3JrX3N0cnVjdCBwY2lfcmVzZXRfd29yazsKJiM0MzsKJiM0MzsJc3RydWN0IHBkc2NfaG9zdF9tZW0gKmhvc3RfbWVtX3JlcXM7CiYjNDM7CXUxNiBudW1faG9zdF9tZW1fcmVxczsKJiM0MzsKJiM0MzsJc3RydWN0IHBkc19jb3JlX2NvbXBvbmVudF9saXN0X2luZm8gZndfY29tcG9uZW50czsKIH07CiAKIC8qKiBlbnVtIHBkc19jb3JlX2RiZWxsX2JpdHMgLSBiaXR3aXNlIGNvbXBvc2l0aW9uIG9mIGRiZWxsIHZhbHVlcy4KQEAgLTI3NSwxNCAmIzQzOzMwNSwyNCBAQCB2b2lkIHBkc2NfZGVidWdmc19hZGRfdmlmdHlwZShzdHJ1Y3QgcGRzYyAqcGRzYyk7CiB2b2lkIHBkc2NfZGVidWdmc19hZGRfaXJxcyhzdHJ1Y3QgcGRzYyAqcGRzYyk7CiB2b2lkIHBkc2NfZGVidWdmc19hZGRfcWNxKHN0cnVjdCBwZHNjICpwZHNjLCBzdHJ1Y3QgcGRzY19xY3EgKnFjcSk7CiB2b2lkIHBkc2NfZGVidWdmc19kZWxfcWNxKHN0cnVjdCBwZHNjX3FjcSAqcWNxKTsKJiM0Mzt2b2lkIHBkc2NfZGVidWdmc19hZGRfaG9zdF9tZW0oc3RydWN0IHBkc2MgKnBkc2MpOwomIzQzO3ZvaWQgcGRzY19kZWJ1Z2ZzX2RlbF9ob3N0X21lbShzdHJ1Y3QgcGRzYyAqcGRzYyk7CiAKIGludCBwZHNjX2Vycl90b19lcnJubyhlbnVtIHBkc19jb3JlX3N0YXR1c19jb2RlIGNvZGUpOwogYm9vbCBwZHNjX2lzX2Z3X3J1bm5pbmcoc3RydWN0IHBkc2MgKnBkc2MpOwogYm9vbCBwZHNjX2lzX2Z3X2dvb2Qoc3RydWN0IHBkc2MgKnBkc2MpOwogaW50IHBkc2NfZGV2Y21kKHN0cnVjdCBwZHNjICpwZHNjLCB1bmlvbiBwZHNfY29yZV9kZXZfY21kICpjbWQsCiAJCXVuaW9uIHBkc19jb3JlX2Rldl9jb21wICpjb21wLCBpbnQgbWF4X3NlY29uZHMpOwomIzQzO2ludCBwZHNjX2RldmNtZF93aXRoX2RhdGEoc3RydWN0IHBkc2MgKnBkc2MsIHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgKmNtZCwKJiM0MzsJCQkgIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBkYXRhX2xlbiwKJiM0MzsJCQkgIHVuaW9uIHBkc19jb3JlX2Rldl9jb21wICpjb21wLCBpbnQgbWF4X3NlY29uZHMpOwomIzQzO2ludCBwZHNjX2RldmNtZF93aXRoX2RhdGFfbm9tc2coc3RydWN0IHBkc2MgKnBkc2MsIHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgKmNtZCwKJiM0MzsJCQkJY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGRhdGFfbGVuLAomIzQzOwkJCQl1bmlvbiBwZHNfY29yZV9kZXZfY29tcCAqY29tcCwgaW50IG1heF9zZWNvbmRzKTsKIGludCBwZHNjX2RldmNtZF9sb2NrZWQoc3RydWN0IHBkc2MgKnBkc2MsIHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgKmNtZCwKIAkJICAgICAgIHVuaW9uIHBkc19jb3JlX2Rldl9jb21wICpjb21wLCBpbnQgbWF4X3NlY29uZHMpOwomIzQzO2ludCBwZHNjX2RldmNtZF9sb2NrZWRfbm9tc2coc3RydWN0IHBkc2MgKnBkc2MsIHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgKmNtZCwKJiM0MzsJCQkgICAgIHVuaW9uIHBkc19jb3JlX2Rldl9jb21wICpjb21wLCBpbnQgbWF4X3NlY29uZHMpOwogaW50IHBkc2NfZGV2Y21kX2luaXQoc3RydWN0IHBkc2MgKnBkc2MpOwogaW50IHBkc2NfZGV2Y21kX3Jlc2V0KHN0cnVjdCBwZHNjICpwZHNjKTsKIGludCBwZHNjX2Rldl9pbml0KHN0cnVjdCBwZHNjICpwZHNjKTsKQEAgLTMxNSwxMSAmIzQzOzM1NSwyMyBAQCB2b2lkIHBkc2NfcHJvY2Vzc19hZG1pbnEoc3RydWN0IHBkc2NfcWNxICpxY3EpOwogdm9pZCBwZHNjX3dvcmtfdGhyZWFkKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CiBpcnFyZXR1cm5fdCBwZHNjX2FkbWlucV9pc3IoaW50IGlycSwgdm9pZCAqZGF0YSk7CiAKLWludCBwZHNjX2Zpcm13YXJlX3VwZGF0ZShzdHJ1Y3QgcGRzYyAqcGRzYywgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdywKJiM0MztpbnQgcGRzY19maXJtd2FyZV91cGRhdGUoc3RydWN0IHBkc2MgKnBkc2MsCiYjNDM7CQkJIHN0cnVjdCBkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9wYXJhbXMgKnBhcmFtcywKIAkJCSBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spOwomIzQzO2ludCBwZHNjX2dldF9jb21wb25lbnRfaW5mbyhzdHJ1Y3QgcGRzYyAqcGRzYyk7CiYjNDM7Y29uc3QgY2hhciAqcGRzY19md190eXBlX3RvX25hbWUodTggdHlwZSk7CiYjNDM7dm9pZCBwZHNjX2Z3X2NvbXBvbmVudHNfaW52YWxpZGF0ZShzdHJ1Y3QgcGRzYyAqcGRzYyk7CiAKIHZvaWQgcGRzY19md19kb3duKHN0cnVjdCBwZHNjICpwZHNjKTsKIHZvaWQgcGRzY19md191cChzdHJ1Y3QgcGRzYyAqcGRzYyk7CiB2b2lkIHBkc2NfcGNpX3Jlc2V0X3RocmVhZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwogCiYjNDM7dm9pZCBwZHNjX2hvc3RfbWVtX2FkZChzdHJ1Y3QgcGRzYyAqcGRzYyk7CiYjNDM7dm9pZCBwZHNjX2hvc3RfbWVtX2ZyZWUoc3RydWN0IHBkc2MgKnBkc2MpOwomIzQzOwomIzQzO3ZvaWQgcGRzY19kZWZlcnJlZF9kbWFfYWRkKHN0cnVjdCBwZHNjICpwZHNjLCBzdHJ1Y3QgcGRzY19kZWZlcnJlZF9kbWEgKmVudHJ5LAomIzQzOwkJCSAgIGRtYV9hZGRyX3QgZG1hX2FkZHIsIHZvaWQgKnZhLCBzaXplX3Qgc2l6ZSwKJiM0MzsJCQkgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpOwomIzQzO3ZvaWQgcGRzY19kZWZlcnJlZF9kbWFfZnJlZShzdHJ1Y3QgcGRzYyAqcGRzYyk7CiYjNDM7CiAjZW5kaWYgLyogX1BEU0NfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9kZWJ1Z2ZzLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvZGVidWdmcy5jCmluZGV4IDgxMGEwY2Q5YmNhYzguLmVmMGExYjdkMTU5YjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9kZWJ1Z2ZzLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL2RlYnVnZnMuYwpAQCAtMTc4LDMgJiM0MzsxNzgsNDggQEAgdm9pZCBwZHNjX2RlYnVnZnNfZGVsX3FjcShzdHJ1Y3QgcGRzY19xY3EgKnFjcSkKIAlkZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmUocWNxLSZndDtkZW50cnkpOwogCXFjcS0mZ3Q7ZGVudHJ5ID0gTlVMTDsKIH0KJiM0MzsKJiM0MztzdGF0aWMgaW50IGhvc3RfbWVtX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcGRzYyAqcGRzYyA9IHNlcS0mZ3Q7cHJpdmF0ZTsKJiM0MzsJc3RydWN0IHBkc2NfaG9zdF9tZW0gKmhtOwomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJaWYgKCFwZHNjLSZndDtob3N0X21lbV9yZXFzIHx8IHBkc2MtJmd0O251bV9ob3N0X21lbV9yZXFzID09IDApIHsKJiM0MzsJCXNlcV9wdXRzKHNlcSwgJiMzNDtObyBob3N0IG1lbW9yeSBhbGxvY2F0ZWRcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CiYjNDM7CXNlcV9wcmludGYoc2VxLCAmIzM0O0hvc3QgbWVtb3J5IHJlcXVlc3RzOiAldVxuXG4mIzM0OywKJiM0MzsJCSAgIHBkc2MtJmd0O251bV9ob3N0X21lbV9yZXFzKTsKJiM0MzsJc2VxX3B1dHMoc2VxLCAmIzM0O1RhZyAgICBTaXplICAgICAgICAgT3JkZXIgIFBBXG4mIzM0Oyk7CiYjNDM7CXNlcV9wdXRzKHNlcSwgJiMzNDstLS0gICAgLS0tLSAgICAgICAgIC0tLS0tICAtLVxuJiMzNDspOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgcGRzYy0mZ3Q7bnVtX2hvc3RfbWVtX3JlcXM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlobSA9ICZhbXA7cGRzYy0mZ3Q7aG9zdF9tZW1fcmVxc1tpXTsKJiM0MzsKJiM0MzsJCWlmICghaG0tJmd0O3BnKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJc2VxX3ByaW50ZihzZXEsICYjMzQ7JS02dSAlLTEydSAlLTZ1ICVwYWRcbiYjMzQ7LAomIzQzOwkJCSAgIGhtLSZndDt0YWcsIGhtLSZndDtzaXplLCBobS0mZ3Q7b3JkZXIsICZhbXA7aG0tJmd0O3BhKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7REVGSU5FX1NIT1dfQVRUUklCVVRFKGhvc3RfbWVtKTsKJiM0MzsKJiM0Mzt2b2lkIHBkc2NfZGVidWdmc19hZGRfaG9zdF9tZW0oc3RydWN0IHBkc2MgKnBkc2MpCiYjNDM7ewomIzQzOwlpZiAoIShwZHNjLSZndDtkZXZfaWRlbnQuY2FwYWJpbGl0aWVzICZhbXA7CiYjNDM7CSAgICAgY3B1X3RvX2xlNjQoUERTX0NPUkVfREVWX0NBUF9IT1NUX01FTSkpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCYjMzQ7aG9zdF9tZW0mIzM0OywgMDQwMCwgcGRzYy0mZ3Q7ZGVudHJ5LAomIzQzOwkJCSAgICBwZHNjLCAmYW1wO2hvc3RfbWVtX2ZvcHMpOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIHBkc2NfZGVidWdmc19kZWxfaG9zdF9tZW0oc3RydWN0IHBkc2MgKnBkc2MpCiYjNDM7ewomIzQzOwlkZWJ1Z2ZzX2xvb2t1cF9hbmRfcmVtb3ZlKCYjMzQ7aG9zdF9tZW0mIzM0OywgcGRzYy0mZ3Q7ZGVudHJ5KTsKJiM0Mzt9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvZGV2LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvZGV2LmMKaW5kZXggYmRlZDZiMzMyODljZS4uYzUwNzc4MTc1ZTJmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL2Rldi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9kZXYuYwpAQCAtMTI2LDcgJiM0MzsxMjYsOCBAQCBzdGF0aWMgY29uc3QgY2hhciAqcGRzY19kZXZjbWRfc3RyKGludCBvcGNvZGUpCiAJfQogfQogCi1zdGF0aWMgaW50IHBkc2NfZGV2Y21kX3dhaXQoc3RydWN0IHBkc2MgKnBkc2MsIHU4IG9wY29kZSwgaW50IG1heF9zZWNvbmRzKQomIzQzO3N0YXRpYyBpbnQgX19wZHNjX2RldmNtZF93YWl0KHN0cnVjdCBwZHNjICpwZHNjLCB1OCBvcGNvZGUsIGludCBtYXhfc2Vjb25kcywKJiM0MzsJCQkgICAgICBjb25zdCBib29sIGRvX21zZykKIHsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBwZHNjLSZndDtkZXY7CiAJdW5zaWduZWQgbG9uZyBzdGFydF90aW1lOwpAQCAtMTc5LDcgJiM0MzsxODAsNyBAQCBzdGF0aWMgaW50IHBkc2NfZGV2Y21kX3dhaXQoc3RydWN0IHBkc2MgKnBkc2MsIHU4IG9wY29kZSwgaW50IG1heF9zZWNvbmRzKQogCiAJc3RhdHVzID0gcGRzY19kZXZjbWRfc3RhdHVzKHBkc2MpOwogCWVyciA9IHBkc2NfZXJyX3RvX2Vycm5vKHN0YXR1cyk7Ci0JaWYgKGVyciAmYW1wOyZhbXA7IGVyciAhPSAtRUFHQUlOKQomIzQzOwlpZiAoZG9fbXNnICZhbXA7JmFtcDsgZXJyICZhbXA7JmFtcDsgZXJyICE9IC1FQUdBSU4pCiAJCWRldl9lcnIoZGV2LCAmIzM0O0RFVkNNRCAlZCAlcyBmYWlsZWQsIHN0YXR1cz0lZCBlcnIgJWQgJXBlXG4mIzM0OywKIAkJCW9wY29kZSwgcGRzY19kZXZjbWRfc3RyKG9wY29kZSksIHN0YXR1cywgZXJyLAogCQkJRVJSX1BUUihlcnIpKTsKQEAgLTE4Nyw4ICYjNDM7MTg4LDkgQEAgc3RhdGljIGludCBwZHNjX2RldmNtZF93YWl0KHN0cnVjdCBwZHNjICpwZHNjLCB1OCBvcGNvZGUsIGludCBtYXhfc2Vjb25kcykKIAlyZXR1cm4gZXJyOwogfQogCi1pbnQgcGRzY19kZXZjbWRfbG9ja2VkKHN0cnVjdCBwZHNjICpwZHNjLCB1bmlvbiBwZHNfY29yZV9kZXZfY21kICpjbWQsCi0JCSAgICAgICB1bmlvbiBwZHNfY29yZV9kZXZfY29tcCAqY29tcCwgaW50IG1heF9zZWNvbmRzKQomIzQzO3N0YXRpYyBpbnQgX19wZHNjX2RldmNtZF9sb2NrZWQoc3RydWN0IHBkc2MgKnBkc2MsIHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgKmNtZCwKJiM0MzsJCQkJdW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgKmNvbXAsIGludCBtYXhfc2Vjb25kcywKJiM0MzsJCQkJY29uc3QgYm9vbCBkb19tc2cpCiB7CiAJaW50IGVycjsKIApAQCAtMTk3LDE2ICYjNDM7MTk5LDYzIEBAIGludCBwZHNjX2RldmNtZF9sb2NrZWQoc3RydWN0IHBkc2MgKnBkc2MsIHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgKmNtZCwKIAogCW1lbWNweV90b2lvKCZhbXA7cGRzYy0mZ3Q7Y21kX3JlZ3MtJmd0O2NtZCwgY21kLCBzaXplb2YoKmNtZCkpOwogCXBkc2NfZGV2Y21kX2RiZWxsKHBkc2MpOwotCWVyciA9IHBkc2NfZGV2Y21kX3dhaXQocGRzYywgY21kLSZndDtvcGNvZGUsIG1heF9zZWNvbmRzKTsKJiM0MzsJZXJyID0gX19wZHNjX2RldmNtZF93YWl0KHBkc2MsIGNtZC0mZ3Q7b3Bjb2RlLCBtYXhfc2Vjb25kcywgZG9fbXNnKTsKIAogCWlmICgoZXJyID09IC1FTlhJTyB8fCBlcnIgPT0gLUVUSU1FRE9VVCkgJmFtcDsmYW1wOyBwZHNjLSZndDt3cSkKIAkJcXVldWVfd29yayhwZHNjLSZndDt3cSwgJmFtcDtwZHNjLSZndDtoZWFsdGhfd29yayk7CiAJZWxzZQogCQltZW1jcHlfZnJvbWlvKGNvbXAsICZhbXA7cGRzYy0mZ3Q7Y21kX3JlZ3MtJmd0O2NvbXAsIHNpemVvZigqY29tcCkpOwogCiYjNDM7CWlmIChlcnIgIT0gLUVUSU1FRE9VVCAmYW1wOyZhbXA7IGVyciAhPSAtRUFHQUlOKQomIzQzOwkJcGRzY19kZWZlcnJlZF9kbWFfZnJlZShwZHNjKTsKJiM0MzsKIAlyZXR1cm4gZXJyOwogfQogCiYjNDM7dm9pZCBwZHNjX2RlZmVycmVkX2RtYV9hZGQoc3RydWN0IHBkc2MgKnBkc2MsIHN0cnVjdCBwZHNjX2RlZmVycmVkX2RtYSAqZW50cnksCiYjNDM7CQkJICAgZG1hX2FkZHJfdCBkbWFfYWRkciwgdm9pZCAqdmEsIHNpemVfdCBzaXplLAomIzQzOwkJCSAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKJiM0Mzt7CiYjNDM7CWVudHJ5LSZndDtkbWFfYWRkciA9IGRtYV9hZGRyOwomIzQzOwllbnRyeS0mZ3Q7dmEgPSB2YTsKJiM0MzsJZW50cnktJmd0O3NpemUgPSBzaXplOwomIzQzOwllbnRyeS0mZ3Q7ZGlyID0gZGlyOwomIzQzOwomIzQzOwlzcGluX2xvY2soJmFtcDtwZHNjLSZndDtkZWZlcnJlZF9kbWFfbG9jayk7CiYjNDM7CWxpc3RfYWRkX3RhaWwoJmFtcDtlbnRyeS0mZ3Q7bGlzdCwgJmFtcDtwZHNjLSZndDtkZWZlcnJlZF9kbWFfbGlzdCk7CiYjNDM7CXNwaW5fdW5sb2NrKCZhbXA7cGRzYy0mZ3Q7ZGVmZXJyZWRfZG1hX2xvY2spOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIHBkc2NfZGVmZXJyZWRfZG1hX2ZyZWUoc3RydWN0IHBkc2MgKnBkc2MpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcGRzY19kZWZlcnJlZF9kbWEgKmVudHJ5LCAqdG1wOwomIzQzOwlMSVNUX0hFQUQobG9jYWxfbGlzdCk7CiYjNDM7CiYjNDM7CXNwaW5fbG9jaygmYW1wO3Bkc2MtJmd0O2RlZmVycmVkX2RtYV9sb2NrKTsKJiM0MzsJbGlzdF9zcGxpY2VfaW5pdCgmYW1wO3Bkc2MtJmd0O2RlZmVycmVkX2RtYV9saXN0LCAmYW1wO2xvY2FsX2xpc3QpOwomIzQzOwlzcGluX3VubG9jaygmYW1wO3Bkc2MtJmd0O2RlZmVycmVkX2RtYV9sb2NrKTsKJiM0MzsKJiM0MzsJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGVudHJ5LCB0bXAsICZhbXA7bG9jYWxfbGlzdCwgbGlzdCkgewomIzQzOwkJZG1hX3VubWFwX3NpbmdsZShwZHNjLSZndDtkZXYsIGVudHJ5LSZndDtkbWFfYWRkciwKJiM0MzsJCQkJIGVudHJ5LSZndDtzaXplLCBlbnRyeS0mZ3Q7ZGlyKTsKJiM0MzsJCWtmcmVlKGVudHJ5LSZndDt2YSk7CiYjNDM7CQlsaXN0X2RlbCgmYW1wO2VudHJ5LSZndDtsaXN0KTsKJiM0MzsJCWtmcmVlKGVudHJ5KTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztpbnQgcGRzY19kZXZjbWRfbG9ja2VkKHN0cnVjdCBwZHNjICpwZHNjLCB1bmlvbiBwZHNfY29yZV9kZXZfY21kICpjbWQsCiYjNDM7CQkgICAgICAgdW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgKmNvbXAsIGludCBtYXhfc2Vjb25kcykKJiM0Mzt7CiYjNDM7CXJldHVybiBfX3Bkc2NfZGV2Y21kX2xvY2tlZChwZHNjLCBjbWQsIGNvbXAsIG1heF9zZWNvbmRzLCB0cnVlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IHBkc2NfZGV2Y21kX2xvY2tlZF9ub21zZyhzdHJ1Y3QgcGRzYyAqcGRzYywgdW5pb24gcGRzX2NvcmVfZGV2X2NtZCAqY21kLAomIzQzOwkJCSAgICAgdW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgKmNvbXAsIGludCBtYXhfc2Vjb25kcykKJiM0Mzt7CiYjNDM7CXJldHVybiBfX3Bkc2NfZGV2Y21kX2xvY2tlZChwZHNjLCBjbWQsIGNvbXAsIG1heF9zZWNvbmRzLCBmYWxzZSk7CiYjNDM7fQomIzQzOwogaW50IHBkc2NfZGV2Y21kKHN0cnVjdCBwZHNjICpwZHNjLCB1bmlvbiBwZHNfY29yZV9kZXZfY21kICpjbWQsCiAJCXVuaW9uIHBkc19jb3JlX2Rldl9jb21wICpjb21wLCBpbnQgbWF4X3NlY29uZHMpCiB7CkBAIC0yMTksNiAmIzQzOzI2OCw0NyBAQCBpbnQgcGRzY19kZXZjbWQoc3RydWN0IHBkc2MgKnBkc2MsIHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgKmNtZCwKIAlyZXR1cm4gZXJyOwogfQogCiYjNDM7c3RhdGljIGludCBfX3Bkc2NfZGV2Y21kX3dpdGhfZGF0YShzdHJ1Y3QgcGRzYyAqcGRzYywKJiM0MzsJCQkJICAgdW5pb24gcGRzX2NvcmVfZGV2X2NtZCAqY21kLAomIzQzOwkJCQkgICBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgZGF0YV9sZW4sCiYjNDM7CQkJCSAgIHVuaW9uIHBkc19jb3JlX2Rldl9jb21wICpjb21wLAomIzQzOwkJCQkgICBpbnQgbWF4X3NlY29uZHMsIGJvb2wgZG9fbXNnKQomIzQzO3sKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3Bkc2MtJmd0O2RldmNtZF9sb2NrKTsKJiM0MzsJaWYgKCFwZHNjLSZndDtjbWRfcmVncykgewomIzQzOwkJZXJyID0gLUVOWElPOwomIzQzOwkJZ290byB1bmxvY2s7CiYjNDM7CX0KJiM0MzsJaWYgKGRhdGFfbGVuICZndDsgc2l6ZW9mKHBkc2MtJmd0O2NtZF9yZWdzLSZndDtkYXRhKSkgewomIzQzOwkJZXJyID0gLUVOT1NQQzsKJiM0MzsJCWdvdG8gdW5sb2NrOwomIzQzOwl9CiYjNDM7CW1lbWNweV90b2lvKCZhbXA7cGRzYy0mZ3Q7Y21kX3JlZ3MtJmd0O2RhdGEsIGRhdGEsIGRhdGFfbGVuKTsKJiM0MzsJZXJyID0gX19wZHNjX2RldmNtZF9sb2NrZWQocGRzYywgY21kLCBjb21wLCBtYXhfc2Vjb25kcywgZG9fbXNnKTsKJiM0Mzt1bmxvY2s6CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO3Bkc2MtJmd0O2RldmNtZF9sb2NrKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IHBkc2NfZGV2Y21kX3dpdGhfZGF0YShzdHJ1Y3QgcGRzYyAqcGRzYywgdW5pb24gcGRzX2NvcmVfZGV2X2NtZCAqY21kLAomIzQzOwkJCSAgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGRhdGFfbGVuLAomIzQzOwkJCSAgdW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgKmNvbXAsIGludCBtYXhfc2Vjb25kcykKJiM0Mzt7CiYjNDM7CXJldHVybiBfX3Bkc2NfZGV2Y21kX3dpdGhfZGF0YShwZHNjLCBjbWQsIGRhdGEsIGRhdGFfbGVuLAomIzQzOwkJCQkgICAgICAgY29tcCwgbWF4X3NlY29uZHMsIHRydWUpOwomIzQzO30KJiM0MzsKJiM0MztpbnQgcGRzY19kZXZjbWRfd2l0aF9kYXRhX25vbXNnKHN0cnVjdCBwZHNjICpwZHNjLCB1bmlvbiBwZHNfY29yZV9kZXZfY21kICpjbWQsCiYjNDM7CQkJCWNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBkYXRhX2xlbiwKJiM0MzsJCQkJdW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgKmNvbXAsIGludCBtYXhfc2Vjb25kcykKJiM0Mzt7CiYjNDM7CXJldHVybiBfX3Bkc2NfZGV2Y21kX3dpdGhfZGF0YShwZHNjLCBjbWQsIGRhdGEsIGRhdGFfbGVuLAomIzQzOwkJCQkgICAgICAgY29tcCwgbWF4X3NlY29uZHMsIGZhbHNlKTsKJiM0Mzt9CiYjNDM7CiBpbnQgcGRzY19kZXZjbWRfaW5pdChzdHJ1Y3QgcGRzYyAqcGRzYykKIHsKIAl1bmlvbiBwZHNfY29yZV9kZXZfY29tcCBjb21wID0ge307CkBAIC0yNDIsMTUgJiM0MzszMzIsMTcgQEAgaW50IHBkc2NfZGV2Y21kX3Jlc2V0KHN0cnVjdCBwZHNjICpwZHNjKQogCXJldHVybiBwZHNjX2RldmNtZChwZHNjLCAmYW1wO2NtZCwgJmFtcDtjb21wLCBwZHNjLSZndDtkZXZjbWRfdGltZW91dCk7CiB9CiAKLXN0YXRpYyBpbnQgcGRzY19kZXZjbWRfaWRlbnRpZnlfbG9ja2VkKHN0cnVjdCBwZHNjICpwZHNjKQomIzQzO3N0YXRpYyBpbnQgcGRzY19kZXZjbWRfaWRlbnRpZnlfbG9ja2VkKHN0cnVjdCBwZHNjICpwZHNjLCB1OCBkcnZfaWRlbnRfdmVyLAomIzQzOwkJCQkgICAgICAgYm9vbCBkb19tc2cpCiB7CiAJdW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgY29tcCA9IHt9OwogCXVuaW9uIHBkc19jb3JlX2Rldl9jbWQgY21kID0gewogCQkuaWRlbnRpZnkub3Bjb2RlID0gUERTX0NPUkVfQ01EX0lERU5USUZZLAotCQkuaWRlbnRpZnkudmVyID0gUERTX0NPUkVfSURFTlRJVFlfVkVSU0lPTl8xLAomIzQzOwkJLmlkZW50aWZ5LnZlciA9IGRydl9pZGVudF92ZXIsCiAJfTsKIAotCXJldHVybiBwZHNjX2RldmNtZF9sb2NrZWQocGRzYywgJmFtcDtjbWQsICZhbXA7Y29tcCwgcGRzYy0mZ3Q7ZGV2Y21kX3RpbWVvdXQpOwomIzQzOwlyZXR1cm4gX19wZHNjX2RldmNtZF9sb2NrZWQocGRzYywgJmFtcDtjbWQsICZhbXA7Y29tcCwgcGRzYy0mZ3Q7ZGV2Y21kX3RpbWVvdXQsCiYjNDM7CQkJCSAgICBkb19tc2cpOwogfQogCiBzdGF0aWMgdm9pZCBwZHNjX2luaXRfZGV2aW5mbyhzdHJ1Y3QgcGRzYyAqcGRzYykKQEAgLTI3Myw4ICYjNDM7MzY1LDkgQEAgc3RhdGljIHZvaWQgcGRzY19pbml0X2RldmluZm8oc3RydWN0IHBkc2MgKnBkc2MpCiAJZGV2X2RiZyhwZHNjLSZndDtkZXYsICYjMzQ7ZndfdmVyc2lvbiAlc1xuJiMzNDssIHBkc2MtJmd0O2Rldl9pbmZvLmZ3X3ZlcnNpb24pOwogfQogCi1zdGF0aWMgaW50IHBkc2NfaWRlbnRpZnkoc3RydWN0IHBkc2MgKnBkc2MpCiYjNDM7c3RhdGljIGludCBwZHNjX2lkZW50aWZ5X3ZlcihzdHJ1Y3QgcGRzYyAqcGRzYywgdTggZHJ2X2lkZW50X3ZlcikKIHsKJiM0MzsJYm9vbCBkb19tc2cgPSBkcnZfaWRlbnRfdmVyID09IFBEU19DT1JFX0lERU5USVRZX1ZFUlNJT05fMTsKIAlzdHJ1Y3QgcGRzX2NvcmVfZHJ2X2lkZW50aXR5IGRydiA9IHt9OwogCXNpemVfdCBzejsKIAlpbnQgZXJyOwpAQCAtMjk3LDE5ICYjNDM7MzkwLDIyIEBAIHN0YXRpYyBpbnQgcGRzY19pZGVudGlmeShzdHJ1Y3QgcGRzYyAqcGRzYykKIAlzeiA9IG1pbl90KHNpemVfdCwgc2l6ZW9mKGRydiksIHNpemVvZihwZHNjLSZndDtjbWRfcmVncy0mZ3Q7ZGF0YSkpOwogCW1lbWNweV90b2lvKCZhbXA7cGRzYy0mZ3Q7Y21kX3JlZ3MtJmd0O2RhdGEsICZhbXA7ZHJ2LCBzeik7CiAKLQllcnIgPSBwZHNjX2RldmNtZF9pZGVudGlmeV9sb2NrZWQocGRzYyk7CiYjNDM7CWVyciA9IHBkc2NfZGV2Y21kX2lkZW50aWZ5X2xvY2tlZChwZHNjLCBkcnZfaWRlbnRfdmVyLCBkb19tc2cpOwogCWlmICghZXJyKSB7CiAJCXN6ID0gbWluX3Qoc2l6ZV90LCBzaXplb2YocGRzYy0mZ3Q7ZGV2X2lkZW50KSwKIAkJCSAgIHNpemVvZihwZHNjLSZndDtjbWRfcmVncy0mZ3Q7ZGF0YSkpOwogCQltZW1jcHlfZnJvbWlvKCZhbXA7cGRzYy0mZ3Q7ZGV2X2lkZW50LCAmYW1wO3Bkc2MtJmd0O2NtZF9yZWdzLSZndDtkYXRhLCBzeik7CiYjNDM7CiYjNDM7CQkvKiBWMSBmaXJtd2FyZSBkb2VzbiYjMzk7dCBzZXQgY2FwYWJpbGl0aWVzLCBzbyB0aGUgZmllbGQgbWF5CiYjNDM7CQkgKiBjb250YWluIGdhcmJhZ2UgZnJvbSB0aGUgb3V0Z29pbmcgZHJpdmVyIGlkZW50aXR5LgomIzQzOwkJICovCiYjNDM7CQlpZiAocGRzYy0mZ3Q7ZGV2X2lkZW50LnZlcnNpb24gJmx0OyBQRFNfQ09SRV9JREVOVElUWV9WRVJTSU9OXzIpCiYjNDM7CQkJcGRzYy0mZ3Q7ZGV2X2lkZW50LmNhcGFiaWxpdGllcyA9IDA7CiAJfQogCW11dGV4X3VubG9jaygmYW1wO3Bkc2MtJmd0O2RldmNtZF9sb2NrKTsKIAotCWlmIChlcnIpIHsKLQkJZGV2X2VycihwZHNjLSZndDtkZXYsICYjMzQ7Q2Fubm90IGlkZW50aWZ5IGRldmljZTogJXBlXG4mIzM0OywKLQkJCUVSUl9QVFIoZXJyKSk7CiYjNDM7CWlmIChlcnIpCiAJCXJldHVybiBlcnI7Ci0JfQogCiAJaWYgKGlzcHJpbnQocGRzYy0mZ3Q7ZGV2X2luZm8uZndfdmVyc2lvblswXSkgJmFtcDsmYW1wOwogCSAgICBpc2FzY2lpKHBkc2MtJmd0O2Rldl9pbmZvLmZ3X3ZlcnNpb25bMF0pKQpAQCAtMzI2LDYgJiM0Mzs0MjIsMjYgQEAgc3RhdGljIGludCBwZHNjX2lkZW50aWZ5KHN0cnVjdCBwZHNjICpwZHNjKQogCXJldHVybiAwOwogfQogCiYjNDM7c3RhdGljIGludCBwZHNjX2lkZW50aWZ5KHN0cnVjdCBwZHNjICpwZHNjKQomIzQzO3sKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJLyogT2xkZXIgZmlybXdhcmUgcmVqZWN0cyBhbnl0aGluZyBidXQgUERTX0NPUkVfSURFTlRJVFlfVkVSU0lPTl8xCiYjNDM7CSAqIHdpdGggUERTX1JDX0VWRVJTSU9OICgtRUlOVkFMKSwgc28gcmV0cnkgd2l0aCBWMSBvbiB2ZXJzaW9uCiYjNDM7CSAqIHJlamVjdGlvbi4gRG9uJiMzOTt0IHJldHJ5IG9uIG90aGVyIGVycm9ycyBsaWtlIC1FTlhJTy8tRVRJTUVET1VUCiYjNDM7CSAqIHdoaWNoIGluZGljYXRlIGZpcm13YXJlIGlzIG5vdCBydW5uaW5nIG9yIGh1bmcuCiYjNDM7CSAqLwomIzQzOwllcnIgPSBwZHNjX2lkZW50aWZ5X3ZlcihwZHNjLCBQRFNfQ09SRV9JREVOVElUWV9WRVJTSU9OXzIpOwomIzQzOwlpZiAoZXJyID09IC1FSU5WQUwpCiYjNDM7CQllcnIgPSBwZHNjX2lkZW50aWZ5X3ZlcihwZHNjLCBQRFNfQ09SRV9JREVOVElUWV9WRVJTSU9OXzEpOwomIzQzOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJZGV2X2VycihwZHNjLSZndDtkZXYsICYjMzQ7Q2Fubm90IGlkZW50aWZ5IGRldmljZTogJXBlXG4mIzM0OywKJiM0MzsJCQlFUlJfUFRSKGVycikpOwomIzQzOwomIzQzOwlyZXR1cm4gZXJyOwomIzQzO30KJiM0MzsKIHZvaWQgcGRzY19kZXZfdW5pbml0KHN0cnVjdCBwZHNjICpwZHNjKQogewogCWlmIChwZHNjLSZndDtpbnRyX2luZm8pIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9kZXZsaW5rLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvZGV2bGluay5jCmluZGV4IDhhZGFlN2IxODg5OGQuLjYzZmU0NWU5MWY3MTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9kZXZsaW5rLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL2RldmxpbmsuYwpAQCAtOTAsMTMgJiM0Mzs5MCwxMTIgQEAgaW50IHBkc2NfZGxfZmxhc2hfdXBkYXRlKHN0cnVjdCBkZXZsaW5rICpkbCwKIHsKIAlzdHJ1Y3QgcGRzYyAqcGRzYyA9IGRldmxpbmtfcHJpdihkbCk7CiAKLQlpZiAocGFyYW1zLSZndDtjb21wb25lbnQpIHsKLQkJTkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywKLQkJCQkgICAmIzM0O0NvbXBvbmVudCB1cGRhdGUgbm90IHN1cHBvcnRlZCBieSB0aGlzIGRldmljZSYjMzQ7KTsKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwlyZXR1cm4gcGRzY19maXJtd2FyZV91cGRhdGUocGRzYywgcGFyYW1zLCBleHRhY2spOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHBkc2NfZGxfcmVwb3J0X2NvbXBvbmVudChzdHJ1Y3QgZGV2bGlua19pbmZvX3JlcSAqcmVxLAomIzQzOwkJCQkgICAgc3RydWN0IHBkc19jb3JlX2Z3X2NvbXBvbmVudF9pbmZvICppbmZvKQomIzQzO3sKJiM0MzsJZW51bSBkZXZsaW5rX2luZm9fdmVyc2lvbl90eXBlIHZlcl90eXBlOwomIzQzOwl1MTYgZmxhZ3MgPSBsZTE2X3RvX2NwdShpbmZvLSZndDtmbGFncyk7CiYjNDM7CWNoYXIgKnZlciA9IGluZm8tJmd0O3ZlcnNpb247CiYjNDM7CWNvbnN0IGNoYXIgKm5hbWU7CiYjNDM7CWNoYXIgYnVmWzMyXTsKJiM0MzsKJiM0MzsJLyogTWFpbiBmaXJtd2FyZSBpcyByZXBvcnRlZCBhcyBnZW5lcmljICYjMzQ7ZncmIzM0OyAqLwomIzQzOwlpZiAoaW5mby0mZ3Q7Y29tcG9uZW50X3R5cGUgPT0gUERTX0NPUkVfRldfVFlQRV9NQUlOKSB7CiYjNDM7CQlpZiAoaW5mby0mZ3Q7c2xvdF9pZCA9PSBQRFNfQ09SRV9GV19TTE9UX0dPTEQpCiYjNDM7CQkJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgJiMzNDtmdy5nb2xkJiMzNDspOwomIzQzOwkJZWxzZQomIzQzOwkJCXNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICYjMzQ7ZncmIzM0Oyk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQluYW1lID0gcGRzY19md190eXBlX3RvX25hbWUoaW5mby0mZ3Q7Y29tcG9uZW50X3R5cGUpOwomIzQzOwkJaWYgKCFuYW1lKQomIzQzOwkJCXJldHVybiAwOwomIzQzOwomIzQzOwkJaWYgKGluZm8tJmd0O3Nsb3RfaWQgPT0gUERTX0NPUkVfRldfU0xPVF9HT0xEKQomIzQzOwkJCXNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICYjMzQ7ZncuJXMuZ29sZCYjMzQ7LCBuYW1lKTsKJiM0MzsJCWVsc2UKJiM0MzsJCQlzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAmIzM0O2Z3LiVzJiMzNDssIG5hbWUpOwomIzQzOwl9CiYjNDM7CiYjNDM7CXZlcl90eXBlID0gREVWTElOS19JTkZPX1ZFUlNJT05fVFlQRV9OT05FOwomIzQzOwlpZiAoZmxhZ3MgJmFtcDsgUERTX0NPUkVfRldfQ09NUE9ORU5UX0lORk9fRl9VUERBVEVfQllfTkFNRSkKJiM0MzsJCXZlcl90eXBlID0gREVWTElOS19JTkZPX1ZFUlNJT05fVFlQRV9DT01QT05FTlQ7CiYjNDM7CiYjNDM7CWlmIChmbGFncyAmYW1wOyBQRFNfQ09SRV9GV19DT01QT05FTlRfSU5GT19GX0ZJWEVEKSB7CiYjNDM7CQlpbnQgZXJyOwomIzQzOwomIzQzOwkJZXJyID0gZGV2bGlua19pbmZvX3ZlcnNpb25fZml4ZWRfcHV0KHJlcSwgYnVmLCB2ZXIpOwomIzQzOwkJaWYgKGVycikKJiM0MzsJCQlyZXR1cm4gZXJyOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChmbGFncyAmYW1wOyBQRFNfQ09SRV9GV19DT01QT05FTlRfSU5GT19GX1JVTk5JTkcpIHsKJiM0MzsJCWludCBlcnI7CiYjNDM7CiYjNDM7CQllcnIgPSBkZXZsaW5rX2luZm9fdmVyc2lvbl9ydW5uaW5nX3B1dF9leHQocmVxLCBidWYsCiYjNDM7CQkJCQkJCSAgIHZlciwgdmVyX3R5cGUpOwomIzQzOwkJaWYgKGVycikKJiM0MzsJCQlyZXR1cm4gZXJyOwogCX0KIAotCXJldHVybiBwZHNjX2Zpcm13YXJlX3VwZGF0ZShwZHNjLCBwYXJhbXMtJmd0O2Z3LCBleHRhY2spOwomIzQzOwlpZiAoZmxhZ3MgJmFtcDsgUERTX0NPUkVfRldfQ09NUE9ORU5UX0lORk9fRl9TVEFSVFVQKSB7CiYjNDM7CQlpbnQgZXJyOwomIzQzOwomIzQzOwkJZXJyID0gZGV2bGlua19pbmZvX3ZlcnNpb25fc3RvcmVkX3B1dF9leHQocmVxLCBidWYsCiYjNDM7CQkJCQkJCSAgdmVyLCB2ZXJfdHlwZSk7CiYjNDM7CQlpZiAoZXJyKQomIzQzOwkJCXJldHVybiBlcnI7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcGRzY19kbF9yZXBvcnRfZndfdmVyKHN0cnVjdCBkZXZsaW5rX2luZm9fcmVxICpyZXEsIGNoYXIgKmZ3X3ZlcikKJiM0Mzt7CiYjNDM7CXJldHVybiBkZXZsaW5rX2luZm9fdmVyc2lvbl9ydW5uaW5nX3B1dChyZXEsCiYjNDM7CQkJCQkJREVWTElOS19JTkZPX1ZFUlNJT05fR0VORVJJQ19GVywKJiM0MzsJCQkJCQlmd192ZXIpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHBkc2NfZGxfY29tcG9uZW50X2luZm9fZ2V0KHN0cnVjdCBkZXZsaW5rICpkbCwKJiM0MzsJCQkJICAgICAgc3RydWN0IGRldmxpbmtfaW5mb19yZXEgKnJlcSwKJiM0MzsJCQkJICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQomIzQzO3sKJiM0MzsJc3RydWN0IHBkc2MgKnBkc2MgPSBkZXZsaW5rX3ByaXYoZGwpOwomIzQzOwl1OCBudW1fY29tcG9uZW50czsKJiM0MzsJaW50IGVycjsKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CS8qIFBhaXJzIHdpdGggV1JJVEVfT05DRSBpbiBwZHNjX2Z3X2NvbXBvbmVudHNfaW52YWxpZGF0ZSgpLgomIzQzOwkgKiBVc2UgUkVBRF9PTkNFIHRvIGdldCBhIGNvbnNpc3RlbnQgc25hcHNob3Qgb2YgbnVtX2NvbXBvbmVudHMuCiYjNDM7CSAqIHBkc2NfZndfY29tcG9uZW50c19pbnZhbGlkYXRlKCkgY2FuIHplcm8gaXQgY29uY3VycmVudGx5IGR1cmluZwomIzQzOwkgKiBmaXJtd2FyZSByZWNvdmVyeTsgdXNpbmcgdGhlIGxvY2FsIGNvcHkgYXZvaWRzIGl0ZXJhdGluZyB6ZXJvCiYjNDM7CSAqIHRpbWVzIHdoZW4gd2UgYWxyZWFkeSBkZWNpZGVkIHRoZSBjYWNoZSB3YXMgdmFsaWQuCiYjNDM7CSAqLwomIzQzOwludW1fY29tcG9uZW50cyA9IFJFQURfT05DRShwZHNjLSZndDtmd19jb21wb25lbnRzLm51bV9jb21wb25lbnRzKTsKJiM0MzsJaWYgKCFudW1fY29tcG9uZW50cykgewomIzQzOwkJZXJyID0gcGRzY19nZXRfY29tcG9uZW50X2luZm8ocGRzYyk7CiYjNDM7CQlpZiAoZXJyKQomIzQzOwkJCXJldHVybiBwZHNjX2RsX3JlcG9ydF9md192ZXIocmVxLAomIzQzOwkJCQkJCSAgICBwZHNjLSZndDtkZXZfaW5mby5md192ZXJzaW9uKTsKJiM0MzsJCW51bV9jb21wb25lbnRzID0gUkVBRF9PTkNFKHBkc2MtJmd0O2Z3X2NvbXBvbmVudHMubnVtX2NvbXBvbmVudHMpOwomIzQzOwkJaWYgKCFudW1fY29tcG9uZW50cykKJiM0MzsJCQlyZXR1cm4gcGRzY19kbF9yZXBvcnRfZndfdmVyKHJlcSwKJiM0MzsJCQkJCQkgICAgcGRzYy0mZ3Q7ZGV2X2luZm8uZndfdmVyc2lvbik7CiYjNDM7CX0KJiM0MzsKJiM0MzsJbnVtX2NvbXBvbmVudHMgPSBtaW5fdCh1MTYsIG51bV9jb21wb25lbnRzLAomIzQzOwkJCSAgICAgICBsZTE2X3RvX2NwdShwZHNjLSZndDtkZXZfaWRlbnQubWF4X2Z3X3Nsb3RzKSk7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBudW1fY29tcG9uZW50czsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWVyciA9IHBkc2NfZGxfcmVwb3J0X2NvbXBvbmVudChyZXEsCiYjNDM7CQkJCQkgICAgICAgJmFtcDtwZHNjLSZndDtmd19jb21wb25lbnRzLmluZm9baV0pOwomIzQzOwkJaWYgKGVycikKJiM0MzsJCQlyZXR1cm4gZXJyOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwogfQogCiBzdGF0aWMgY2hhciAqZndfc2xvdG5hbWVzW10gPSB7CkBAIC0xMDUsOCAmIzQzOzIwNCw5IEBAIHN0YXRpYyBjaGFyICpmd19zbG90bmFtZXNbXSA9IHsKIAkmIzM0O2Z3Lm1haW5md2ImIzM0OywKIH07CiAKLWludCBwZHNjX2RsX2luZm9fZ2V0KHN0cnVjdCBkZXZsaW5rICpkbCwgc3RydWN0IGRldmxpbmtfaW5mb19yZXEgKnJlcSwKLQkJICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spCiYjNDM7c3RhdGljIGludCBwZHNjX2RsX2Z3X2xpc3RfaW5mb19nZXQoc3RydWN0IGRldmxpbmsgKmRsLAomIzQzOwkJCQkgICAgc3RydWN0IGRldmxpbmtfaW5mb19yZXEgKnJlcSwKJiM0MzsJCQkJICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaykKIHsKIAl1bmlvbiBwZHNfY29yZV9kZXZfY21kIGNtZCA9IHsKIAkJLmZ3X2NvbnRyb2wub3Bjb2RlID0gUERTX0NPUkVfQ01EX0ZXX0NPTlRST0wsCkBAIC0xNDAsMTIgJiM0MzsyNDAsNDEgQEAgaW50IHBkc2NfZGxfaW5mb19nZXQoc3RydWN0IGRldmxpbmsgKmRsLCBzdHJ1Y3QgZGV2bGlua19pbmZvX3JlcSAqcmVxLAogCQkJcmV0dXJuIGVycjsKIAl9CiAKLQllcnIgPSBkZXZsaW5rX2luZm9fdmVyc2lvbl9ydW5uaW5nX3B1dChyZXEsCi0JCQkJCSAgICAgICBERVZMSU5LX0lORk9fVkVSU0lPTl9HRU5FUklDX0ZXLAotCQkJCQkgICAgICAgcGRzYy0mZ3Q7ZGV2X2luZm8uZndfdmVyc2lvbik7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHBkc2NfZGxfaW5mb19nZXRfdjEoc3RydWN0IGRldmxpbmsgKmRsLAomIzQzOwkJCSAgICAgICBzdHJ1Y3QgZGV2bGlua19pbmZvX3JlcSAqcmVxLAomIzQzOwkJCSAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcGRzYyAqcGRzYyA9IGRldmxpbmtfcHJpdihkbCk7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CWVyciA9IHBkc2NfZGxfZndfbGlzdF9pbmZvX2dldChkbCwgcmVxLCBleHRhY2spOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKJiM0MzsJLyogVmVyc2lvbiAxOiByZXBvcnQgZncgZnJvbSBkZXZfaW5mbyAocnVubmluZyBvbmx5KSAqLwomIzQzOwlyZXR1cm4gcGRzY19kbF9yZXBvcnRfZndfdmVyKHJlcSwgcGRzYy0mZ3Q7ZGV2X2luZm8uZndfdmVyc2lvbik7CiYjNDM7fQomIzQzOwomIzQzO2ludCBwZHNjX2RsX2luZm9fZ2V0KHN0cnVjdCBkZXZsaW5rICpkbCwgc3RydWN0IGRldmxpbmtfaW5mb19yZXEgKnJlcSwKJiM0MzsJCSAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQomIzQzO3sKJiM0MzsJc3RydWN0IHBkc2MgKnBkc2MgPSBkZXZsaW5rX3ByaXYoZGwpOwomIzQzOwljaGFyIGJ1ZlszMl07CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CWlmIChwZHNjLSZndDtkZXZfaWRlbnQudmVyc2lvbiAmZ3Q7PSBQRFNfQ09SRV9JREVOVElUWV9WRVJTSU9OXzIpIHsKJiM0MzsJCWVyciA9IHBkc2NfZGxfY29tcG9uZW50X2luZm9fZ2V0KGRsLCByZXEsIGV4dGFjayk7CiYjNDM7CQlpZiAoZXJyKQomIzQzOwkJCXJldHVybiBlcnI7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQllcnIgPSBwZHNjX2RsX2luZm9fZ2V0X3YxKGRsLCByZXEsIGV4dGFjayk7CiYjNDM7CQlpZiAoZXJyKQomIzQzOwkJCXJldHVybiBlcnI7CiYjNDM7CX0KJiM0MzsKIAlzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAmIzM0OzB4JXgmIzM0OywgcGRzYy0mZ3Q7ZGV2X2luZm8uYXNpY190eXBlKTsKIAllcnIgPSBkZXZsaW5rX2luZm9fdmVyc2lvbl9maXhlZF9wdXQocmVxLAogCQkJCQkgICAgIERFVkxJTktfSU5GT19WRVJTSU9OX0dFTkVSSUNfQVNJQ19JRCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9mdy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL2Z3LmMKaW5kZXggZmE2MjY3MTllNjhkMS4uNWNjZjAxN2Y2YWY0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL2Z3LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL2Z3LmMKQEAgLTEsNiAmIzQzOzEsOSBAQAogLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKIC8qIENvcHlyaWdodChjKSAyMDIzIEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYyAqLwogCiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3BsZG1mdy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC92bWFsbG9jLmgmZ3Q7CiYjNDM7CiAjaW5jbHVkZSAmIzM0O2NvcmUuaCYjMzQ7CiAKIC8qIFRoZSB3b3JzdCBjYXNlIHdhaXQgZm9yIHRoZSBpbnN0YWxsIGFjdGl2aXR5IGlzIGFib3V0IDI1IG1pbnV0ZXMgd2hlbgpAQCAtMTQsNiAmIzQzOzE3LDU4IEBACiAvKiBOdW1iZXIgb2YgcGVyaW9kaWMgbG9nIHVwZGF0ZXMgZHVyaW5nIGZ3IGZpbGUgZG93bmxvYWQgKi8KICNkZWZpbmUgUERTQ19GV19JTlRFUlZBTF9GUkFDVElPTgkzMgogCiYjNDM7I2RlZmluZSBQRFNDX0ZXX0NPTVBPTkVOVF9QUkVGSVgJCSYjMzQ7ZncuJiMzNDsKJiM0MzsjZGVmaW5lIFBEU0NfRldfQ09NUE9ORU5UX0ZVTExfTkFNRV9CVUZMRU4gXAomIzQzOwkoc2l6ZW9mKFBEU0NfRldfQ09NUE9ORU5UX1BSRUZJWCkgJiM0MzsgUERTX0NPUkVfRldfQ09NUE9ORU5UX05BTUVfQlVGTEVOKQomIzQzOwomIzQzOy8qIERyaXZlci1kZWZpbmVkIGNvbXBvbmVudCB0eXBlIHRvIG5hbWUgbWFwcGluZy4KJiM0MzsgKiBQRFNfQ09SRV9GV19UWVBFX01BSU4gaXMgTlVMTCAtIGhhbmRsZWQgc3BlY2lhbGx5IGFzICYjMzQ7ZncmIzM0OyB3aXRob3V0IHByZWZpeC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHBkc2NfZndfdHlwZV9uYW1lc1tdID0gewomIzQzOwlbUERTX0NPUkVfRldfVFlQRV9NQUlOXSAgICAgID0gTlVMTCwKJiM0MzsJW1BEU19DT1JFX0ZXX1RZUEVfQk9PVF0gICAgICA9ICYjMzQ7Ym9vdGxvYWRlciYjMzQ7LAomIzQzOwlbUERTX0NPUkVfRldfVFlQRV9DUExEXSAgICAgID0gJiMzNDtjcGxkJiMzNDssCiYjNDM7CVtQRFNfQ09SRV9GV19UWVBFX1NFQ1VSRV0gICAgPSAmIzM0O3NlY3VyZSYjMzQ7LAomIzQzOwlbUERTX0NPUkVfRldfVFlQRV9GUEdBXSAgICAgID0gJiMzNDtmcGdhJiMzNDssCiYjNDM7CVtQRFNfQ09SRV9GV19UWVBFX1NVQ19NQUlOXSAgPSAmIzM0O3N1YyYjMzQ7LAomIzQzOwlbUERTX0NPUkVfRldfVFlQRV9TVUNfQk9PVF0gID0gJiMzNDtzdWMuYm9vdGxvYWRlciYjMzQ7LAomIzQzOwlbUERTX0NPUkVfRldfVFlQRV9VQk9PVF0gICAgID0gJiMzNDt1Ym9vdCYjMzQ7LAomIzQzO307CiYjNDM7CiYjNDM7Y29uc3QgY2hhciAqcGRzY19md190eXBlX3RvX25hbWUodTggdHlwZSkKJiM0Mzt7CiYjNDM7CWlmICh0eXBlICZsdDsgQVJSQVlfU0laRShwZHNjX2Z3X3R5cGVfbmFtZXMpICZhbXA7JmFtcDsgcGRzY19md190eXBlX25hbWVzW3R5cGVdKQomIzQzOwkJcmV0dXJuIHBkc2NfZndfdHlwZV9uYW1lc1t0eXBlXTsKJiM0MzsJcmV0dXJuIE5VTEw7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgcGRzY19md19jb21wb25lbnRzX2ludmFsaWRhdGUoc3RydWN0IHBkc2MgKnBkc2MpCiYjNDM7ewomIzQzOwkvKiBQYWlycyB3aXRoIFJFQURfT05DRSBpbiBwZHNjX2RsX2NvbXBvbmVudF9pbmZvX2dldCgpICovCiYjNDM7CVdSSVRFX09OQ0UocGRzYy0mZ3Q7ZndfY29tcG9uZW50cy5udW1fY29tcG9uZW50cywgMCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB1OCBwZHNjX25hbWVfdG9fZndfdHlwZShjb25zdCBjaGFyICpuYW1lKQomIzQzO3sKJiM0MzsJc2l6ZV90IHByZWZpeF9sZW47CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwkvKiAmIzM0O2Z3JiMzNDsgd2l0aG91dCBzdWZmaXggbWFwcyB0byBtYWluIGZpcm13YXJlICovCiYjNDM7CWlmICghc3RyY21wKG5hbWUsICYjMzQ7ZncmIzM0OykpCiYjNDM7CQlyZXR1cm4gUERTX0NPUkVfRldfVFlQRV9NQUlOOwomIzQzOwomIzQzOwlwcmVmaXhfbGVuID0gc3RyX2hhc19wcmVmaXgobmFtZSwgUERTQ19GV19DT01QT05FTlRfUFJFRklYKTsKJiM0MzsJaWYgKHByZWZpeF9sZW4pCiYjNDM7CQluYW1lICYjNDM7PSBwcmVmaXhfbGVuOwomIzQzOwomIzQzOwlmb3IgKGkgPSAxOyBpICZsdDsgQVJSQVlfU0laRShwZHNjX2Z3X3R5cGVfbmFtZXMpOyBpJiM0MzsmIzQzOykgewomIzQzOwkJaWYgKHBkc2NfZndfdHlwZV9uYW1lc1tpXSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgIXN0cmNtcChuYW1lLCBwZHNjX2Z3X3R5cGVfbmFtZXNbaV0pKQomIzQzOwkJCXJldHVybiBpOwomIzQzOwl9CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgcGRzY19kZXZjbWRfZndfZG93bmxvYWRfbG9ja2VkKHN0cnVjdCBwZHNjICpwZHNjLCB1NjQgYWRkciwKIAkJCQkJICB1MzIgb2Zmc2V0LCB1MzIgbGVuZ3RoKQogewpAQCAtMjMsNyAmIzQzOzc4LDcgQEAgc3RhdGljIGludCBwZHNjX2RldmNtZF9md19kb3dubG9hZF9sb2NrZWQoc3RydWN0IHBkc2MgKnBkc2MsIHU2NCBhZGRyLAogCQkuZndfZG93bmxvYWQuYWRkciA9IGNwdV90b19sZTY0KGFkZHIpLAogCQkuZndfZG93bmxvYWQubGVuZ3RoID0gY3B1X3RvX2xlMzIobGVuZ3RoKSwKIAl9OwotCXVuaW9uIHBkc19jb3JlX2Rldl9jb21wIGNvbXA7CiYjNDM7CXVuaW9uIHBkc19jb3JlX2Rldl9jb21wIGNvbXAgPSB7fTsKIAogCXJldHVybiBwZHNjX2RldmNtZF9sb2NrZWQocGRzYywgJmFtcDtjbWQsICZhbXA7Y29tcCwgcGRzYy0mZ3Q7ZGV2Y21kX3RpbWVvdXQpOwogfQpAQCAtOTUsOSAmIzQzOzE1MCwxMiBAQCBzdGF0aWMgaW50IHBkc2NfZndfc3RhdHVzX2xvbmdfd2FpdChzdHJ1Y3QgcGRzYyAqcGRzYywKIAlyZXR1cm4gZXJyOwogfQogCi1pbnQgcGRzY19maXJtd2FyZV91cGRhdGUoc3RydWN0IHBkc2MgKnBkc2MsIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncsCi0JCQkgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQomIzQzO3N0YXRpYyBpbnQKJiM0MztwZHNjX2xlZ2FjeV9maXJtd2FyZV91cGRhdGUoc3RydWN0IHBkc2MgKnBkc2MsCiYjNDM7CQkJICAgIHN0cnVjdCBkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9wYXJhbXMgKnBhcmFtcywKJiM0MzsJCQkgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQogewomIzQzOwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3ID0gcGFyYW1zLSZndDtmdzsKIAl1MzIgYnVmX3N6LCBjb3B5X3N6LCBvZmZzZXQ7CiAJc3RydWN0IGRldmxpbmsgKmRsOwogCWludCBuZXh0X2ludGVydmFsOwpAQCAtMTA1LDYgJiM0MzsxNjMsMTIgQEAgaW50IHBkc2NfZmlybXdhcmVfdXBkYXRlKHN0cnVjdCBwZHNjICpwZHNjLCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3LAogCWludCBlcnIgPSAwOwogCWludCBmd19zbG90OwogCiYjNDM7CWlmIChwYXJhbXMtJmd0O2NvbXBvbmVudCkgewomIzQzOwkJTkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywKJiM0MzsJCQkJICAgJiMzNDtDb21wb25lbnQgdXBkYXRlIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBkZXZpY2UmIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CX0KJiM0MzsKIAlkZXZfaW5mbyhwZHNjLSZndDtkZXYsICYjMzQ7SW5zdGFsbGluZyBmaXJtd2FyZVxuJiMzNDspOwogCiAJaWYgKCFwZHNjLSZndDtjbWRfcmVncykKQEAgLTE5NSwzICYjNDM7MjU5LDcyOSBAQCBpbnQgcGRzY19maXJtd2FyZV91cGRhdGUoc3RydWN0IHBkc2MgKnBkc2MsIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncsCiAJCQkJCQkgICBOVUxMLCAwLCAwKTsKIAlyZXR1cm4gZXJyOwogfQomIzQzOwomIzQzO3N0cnVjdCBwZHNjX2NvbXBvbmVudF9wcml2IHsKJiM0MzsJdTE2IGNvbXBvbmVudF9pZDsKJiM0MzsJYm9vbCBza2lwOwomIzQzOwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3RfZW50cnk7CiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgcGRzX2NvcmVfZnd1X3ByaXYgewomIzQzOwlzdHJ1Y3QgcGxkbWZ3IGNvbnRleHQ7CiYjNDM7CXN0cnVjdCBkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9wYXJhbXMgKnBhcmFtczsKJiM0MzsJc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrOwomIzQzOwlzdHJ1Y3QgcGRzYyAqcGRzYzsKJiM0MzsJc3RydWN0IGxpc3RfaGVhZCBjb21wb25lbnRzOwomIzQzOwlib29sIGNvbXBvbmVudF9mb3VuZDsKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHBkc2NfZnJlZV9md3VfcHJpdihzdHJ1Y3QgcGRzX2NvcmVfZnd1X3ByaXYgKnByaXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcGRzY19jb21wb25lbnRfcHJpdiAqY29tcG9uZW50X3ByaXYsICp0bXA7CiYjNDM7CiYjNDM7CWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjb21wb25lbnRfcHJpdiwgdG1wLCAmYW1wO3ByaXYtJmd0O2NvbXBvbmVudHMsCiYjNDM7CQkJCSBsaXN0X2VudHJ5KSB7CiYjNDM7CQlsaXN0X2RlbCgmYW1wO2NvbXBvbmVudF9wcml2LSZndDtsaXN0X2VudHJ5KTsKJiM0MzsJCWtmcmVlKGNvbXBvbmVudF9wcml2KTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHBkc2NfZGV2Y21kX21hdGNoX3JlY29yZF9kZXNjKHN0cnVjdCBwZHNjICpwZHNjLCB1MTYgZGVzY190eXBlLAomIzQzOwkJCQkJIHUxNiBkZXNjX3NpemUsIGNvbnN0IHU4ICpkZXNjX2RhdGEsCiYjNDM7CQkJCQkgdTggKm1hdGNoKQomIzQzO3sKJiM0MzsJdW5pb24gcGRzX2NvcmVfZGV2X2NtZCBjbWQgPSB7CiYjNDM7CQkubWF0Y2hfcmVjb3JkX2Rlc2Mub3Bjb2RlID0gUERTX0NPUkVfQ01EX01BVENIX1JFQ09SRF9ERVNDLAomIzQzOwkJLm1hdGNoX3JlY29yZF9kZXNjLnZlciA9IDEsCiYjNDM7CQkubWF0Y2hfcmVjb3JkX2Rlc2MudHlwZSA9IGNwdV90b19sZTE2KGRlc2NfdHlwZSksCiYjNDM7CQkubWF0Y2hfcmVjb3JkX2Rlc2Muc2l6ZSA9IGNwdV90b19sZTE2KGRlc2Nfc2l6ZSksCiYjNDM7CX07CiYjNDM7CXVuaW9uIHBkc19jb3JlX2Rldl9jb21wIGNvbXAgPSB7fTsKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJZXJyID0gcGRzY19kZXZjbWRfd2l0aF9kYXRhKHBkc2MsICZhbXA7Y21kLCBkZXNjX2RhdGEsIGRlc2Nfc2l6ZSwKJiM0MzsJCQkJICAgICZhbXA7Y29tcCwgcGRzYy0mZ3Q7ZGV2Y21kX3RpbWVvdXQpOwomIzQzOwkqbWF0Y2ggPSBjb21wLm1hdGNoX3JlY29yZF9kZXNjLm1hdGNoOwomIzQzOwomIzQzOwlyZXR1cm4gZXJyOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBwZHNjX21hdGNoX3JlY29yZF9kZXNjcyhzdHJ1Y3QgcGxkbWZ3ICpjb250ZXh0LAomIzQzOwkJCQkgICAgc3RydWN0IHBsZG1md19yZWNvcmQgKnJlY29yZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwZHNfY29yZV9md3VfcHJpdiAqcHJpdiA9CiYjNDM7CQljb250YWluZXJfb2YoY29udGV4dCwgc3RydWN0IHBkc19jb3JlX2Z3dV9wcml2LCBjb250ZXh0KTsKJiM0MzsJc3RydWN0IHBkc2MgKnBkc2MgPSBwcml2LSZndDtwZHNjOwomIzQzOwlzdHJ1Y3QgcGxkbWZ3X2Rlc2NfdGx2ICpkZXNjOwomIzQzOwomIzQzOwlpZiAoIXBsZG1md19vcF9wY2lfbWF0Y2hfcmVjb3JkKGNvbnRleHQsIHJlY29yZCkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CWxpc3RfZm9yX2VhY2hfZW50cnkoZGVzYywgJmFtcDtyZWNvcmQtJmd0O2Rlc2NzLCBlbnRyeSkgewomIzQzOwkJdTggbWF0Y2g7CiYjNDM7CQlpbnQgZXJyOwomIzQzOwomIzQzOwkJc3dpdGNoIChkZXNjLSZndDt0eXBlKSB7CiYjNDM7CQkvKiBza2lwIHR5cGVzIGNoZWNrZWQgaW4gcGxkbWZ3X29wX3BjaV9tYXRjaF9yZWNvcmQgKi8KJiM0MzsJCWNhc2UgUExETV9ERVNDX0lEX1BDSV9WRU5ET1JfSUQ6CiYjNDM7CQljYXNlIFBMRE1fREVTQ19JRF9QQ0lfREVWSUNFX0lEOgomIzQzOwkJY2FzZSBQTERNX0RFU0NfSURfUENJX1NVQlZFTkRPUl9JRDoKJiM0MzsJCWNhc2UgUExETV9ERVNDX0lEX1BDSV9TVUJERVZfSUQ6CiYjNDM7CQkJY29udGludWU7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlpZiAoIWRlc2MtJmd0O3NpemUpCiYjNDM7CQkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwkJZXJyID0gcGRzY19kZXZjbWRfbWF0Y2hfcmVjb3JkX2Rlc2MocGRzYywgZGVzYy0mZ3Q7dHlwZSwKJiM0MzsJCQkJCQkgICAgZGVzYy0mZ3Q7c2l6ZSwgZGVzYy0mZ3Q7ZGF0YSwKJiM0MzsJCQkJCQkgICAgJmFtcDttYXRjaCk7CiYjNDM7CQlpZiAoZXJyKSB7CiYjNDM7CQkJZGV2X2VycihwZHNjLSZndDtkZXYsCiYjNDM7CQkJCSYjMzQ7bWF0Y2hfcmVjb3JkX2Rlc2MgZmFpbGVkIHR5cGU6IDB4JTA0eCBzaXplOiAldSwgZXJyICVkXG4mIzM0OywKJiM0MzsJCQkJZGVzYy0mZ3Q7dHlwZSwgZGVzYy0mZ3Q7c2l6ZSwgZXJyKTsKJiM0MzsJCQlyZXR1cm4gZmFsc2U7CiYjNDM7CQl9CiYjNDM7CQkvKiBhbGwgcmVjb3JkIGRlc2NyaXB0b3JzIG11c3QgbWF0Y2ggKi8KJiM0MzsJCWlmICghbWF0Y2gpCiYjNDM7CQkJcmV0dXJuIGZhbHNlOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiB0cnVlOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHBkc2NfZGV2Y21kX3NlbmRfcGFja2FnZV9kYXRhKHN0cnVjdCBwZHNjICpwZHNjLCB1NjQgYWRkciwKJiM0MzsJCQkJCSB1MTYgbGVuZ3RoLCB1MTYgb2Zmc2V0LCB1MTYgdG90YWxfbGVuKQomIzQzO3sKJiM0MzsJdW5pb24gcGRzX2NvcmVfZGV2X2NtZCBjbWQgPSB7CiYjNDM7CQkuc2VuZF9wa2dfZGF0YS5vcGNvZGUgPSBQRFNfQ09SRV9DTURfU0VORF9QS0dfREFUQSwKJiM0MzsJCS5zZW5kX3BrZ19kYXRhLnZlciA9IDEsCiYjNDM7CQkuc2VuZF9wa2dfZGF0YS5kYXRhX3BhID0gY3B1X3RvX2xlNjQoYWRkciksCiYjNDM7CQkuc2VuZF9wa2dfZGF0YS5kYXRhX2xlbiA9IGNwdV90b19sZTE2KGxlbmd0aCksCiYjNDM7CQkuc2VuZF9wa2dfZGF0YS5vZmZzZXQgPSBjcHVfdG9fbGUxNihvZmZzZXQpLAomIzQzOwkJLnNlbmRfcGtnX2RhdGEudG90YWxfbGVuID0gY3B1X3RvX2xlMTYodG90YWxfbGVuKSwKJiM0MzsJfTsKJiM0MzsJdW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgY29tcCA9IHt9OwomIzQzOwomIzQzOwlyZXR1cm4gcGRzY19kZXZjbWQocGRzYywgJmFtcDtjbWQsICZhbXA7Y29tcCwgcGRzYy0mZ3Q7ZGV2Y21kX3RpbWVvdXQpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHBkc2Nfc2VuZF9wYWNrYWdlX2RhdGEoc3RydWN0IHBsZG1mdyAqY29udGV4dCwgY29uc3QgdTggKmRhdGEsCiYjNDM7CQkJCSAgdTE2IGxlbmd0aCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwZHNfY29yZV9md3VfcHJpdiAqcHJpdiA9CiYjNDM7CQljb250YWluZXJfb2YoY29udGV4dCwgc3RydWN0IHBkc19jb3JlX2Z3dV9wcml2LCBjb250ZXh0KTsKJiM0MzsJc3RydWN0IHBkc2NfZGVmZXJyZWRfZG1hICpkZWZlcnJlZDsKJiM0MzsJc3RydWN0IGRldmljZSAqZGV2ID0gY29udGV4dC0mZ3Q7ZGV2OwomIzQzOwlzdHJ1Y3QgcGRzYyAqcGRzYyA9IHByaXYtJmd0O3Bkc2M7CiYjNDM7CWRtYV9hZGRyX3QgZG1hX2FkZHI7CiYjNDM7CXU4ICpwYWNrYWdlX2RhdGE7CiYjNDM7CXUzMiBvZmZzZXQ7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CWlmICghbGVuZ3RoKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWRlZmVycmVkID0ga21hbGxvY19vYmooKmRlZmVycmVkLCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCFkZWZlcnJlZCkKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwlwYWNrYWdlX2RhdGEgPSBrbWVtZHVwKGRhdGEsIGxlbmd0aCwgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmICghcGFja2FnZV9kYXRhKSB7CiYjNDM7CQlrZnJlZShkZWZlcnJlZCk7CiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJfQomIzQzOwomIzQzOwlkbWFfYWRkciA9IGRtYV9tYXBfc2luZ2xlKGRldiwgcGFja2FnZV9kYXRhLCBsZW5ndGgsIERNQV9UT19ERVZJQ0UpOwomIzQzOwlpZiAoZG1hX21hcHBpbmdfZXJyb3IoZGV2LCBkbWFfYWRkcikpIHsKJiM0MzsJCWRldl9lcnIoZGV2LCAmIzM0O0ZhaWxlZCB0byBkbWFfbWFwIHBhY2thZ2VfZGF0YSBsZW5ndGggMHgleFxuJiMzNDssCiYjNDM7CQkJbGVuZ3RoKTsKJiM0MzsJCWtmcmVlKHBhY2thZ2VfZGF0YSk7CiYjNDM7CQlrZnJlZShkZWZlcnJlZCk7CiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJfQomIzQzOwomIzQzOwlmb3IgKG9mZnNldCA9IDA7IG9mZnNldCAmbHQ7IGxlbmd0aDsgb2Zmc2V0ICYjNDM7PSBQRFNfUEFHRV9TSVpFKSB7CiYjNDM7CQl1MzIgY29weV9zejsKJiM0MzsKJiM0MzsJCWNvcHlfc3ogPSBtaW5fdCh1bnNpZ25lZCBpbnQsIFBEU19QQUdFX1NJWkUsIGxlbmd0aCAtIG9mZnNldCk7CiYjNDM7CQllcnIgPSBwZHNjX2RldmNtZF9zZW5kX3BhY2thZ2VfZGF0YShwZHNjLCBkbWFfYWRkciAmIzQzOyBvZmZzZXQsCiYjNDM7CQkJCQkJICAgIGNvcHlfc3osIG9mZnNldCwgbGVuZ3RoKTsKJiM0MzsJCWlmIChlcnIpIHsKJiM0MzsJCQlOTF9TRVRfRVJSX01TR19NT0QocHJpdi0mZ3Q7ZXh0YWNrLAomIzQzOwkJCQkJICAgJiMzNDtGYWlsZWQgdG8gc2VuZCBwYWNrYWdlIGRhdGEmIzM0Oyk7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKGVyciA9PSAtRVRJTUVET1VUIHx8IGVyciA9PSAtRUFHQUlOKSB7CiYjNDM7CQlwZHNjX2RlZmVycmVkX2RtYV9hZGQocGRzYywgZGVmZXJyZWQsIGRtYV9hZGRyLAomIzQzOwkJCQkgICAgICBwYWNrYWdlX2RhdGEsIGxlbmd0aCwgRE1BX1RPX0RFVklDRSk7CiYjNDM7CQlyZXR1cm4gZXJyOwomIzQzOwl9CiYjNDM7CiYjNDM7CWtmcmVlKGRlZmVycmVkKTsKJiM0MzsJZG1hX3VubWFwX3NpbmdsZShkZXYsIGRtYV9hZGRyLCBsZW5ndGgsIERNQV9UT19ERVZJQ0UpOwomIzQzOwlrZnJlZShwYWNrYWdlX2RhdGEpOwomIzQzOwlyZXR1cm4gZXJyOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBwZHNjX2NvbXBvbmVudF90eXBlX2V4aXN0cyhzdHJ1Y3QgcGRzYyAqcGRzYywgdTggdHlwZSkKJiM0Mzt7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgcGRzYy0mZ3Q7ZndfY29tcG9uZW50cy5udW1fY29tcG9uZW50czsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWlmIChwZHNjLSZndDtmd19jb21wb25lbnRzLmluZm9baV0uY29tcG9uZW50X3R5cGUgPT0gdHlwZSkKJiM0MzsJCQlyZXR1cm4gdHJ1ZTsKJiM0MzsJfQomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIHBkc2NfY29tcG9uZW50X2lkX21hdGNoZXNfdHlwZShzdHJ1Y3QgcGRzYyAqcGRzYywKJiM0MzsJCQkJCSAgIHU4IGNvbXBvbmVudF9pZCwgdTggdHlwZSkKJiM0Mzt7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgcGRzYy0mZ3Q7ZndfY29tcG9uZW50cy5udW1fY29tcG9uZW50czsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXN0cnVjdCBwZHNfY29yZV9md19jb21wb25lbnRfaW5mbyAqaW5mbyA9CiYjNDM7CQkJJmFtcDtwZHNjLSZndDtmd19jb21wb25lbnRzLmluZm9baV07CiYjNDM7CiYjNDM7CQlpZiAoaW5mby0mZ3Q7aWRlbnRpZmllciA9PSBjb21wb25lbnRfaWQgJmFtcDsmYW1wOwomIzQzOwkJICAgIGluZm8tJmd0O2NvbXBvbmVudF90eXBlID09IHR5cGUpCiYjNDM7CQkJcmV0dXJuIHRydWU7CiYjNDM7CX0KJiM0MzsJcmV0dXJuIGZhbHNlOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdTggcGRzY19nZXRfY29tcG9uZW50X3R5cGVfYnlfaWQoc3RydWN0IHBkc2MgKnBkc2MsIHUxNiBjb21wb25lbnRfaWQpCiYjNDM7ewomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IHBkc2MtJmd0O2Z3X2NvbXBvbmVudHMubnVtX2NvbXBvbmVudHM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlzdHJ1Y3QgcGRzX2NvcmVfZndfY29tcG9uZW50X2luZm8gKmluZm8gPQomIzQzOwkJCSZhbXA7cGRzYy0mZ3Q7ZndfY29tcG9uZW50cy5pbmZvW2ldOwomIzQzOwomIzQzOwkJaWYgKGluZm8tJmd0O2lkZW50aWZpZXIgPT0gY29tcG9uZW50X2lkKQomIzQzOwkJCXJldHVybiBpbmZvLSZndDtjb21wb25lbnRfdHlwZTsKJiM0MzsJfQomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgcGRzY19za2lwX2NvbXBvbmVudChzdHJ1Y3QgcGRzX2NvcmVfZnd1X3ByaXYgKnByaXYsCiYjNDM7CQkJCXUxNiBjb21wb25lbnRfaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcGRzY19jb21wb25lbnRfcHJpdiAqY29tcG9uZW50X3ByaXY7CiYjNDM7CiYjNDM7CWxpc3RfZm9yX2VhY2hfZW50cnkoY29tcG9uZW50X3ByaXYsICZhbXA7cHJpdi0mZ3Q7Y29tcG9uZW50cywgbGlzdF9lbnRyeSkgewomIzQzOwkJaWYgKGNvbXBvbmVudF9wcml2LSZndDtjb21wb25lbnRfaWQgPT0gY29tcG9uZW50X2lkKQomIzQzOwkJCXJldHVybiBjb21wb25lbnRfcHJpdi0mZ3Q7c2tpcDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcGRzY19zZW5kX2NvbXBvbmVudF90YWJsZShzdHJ1Y3QgcGxkbWZ3ICpjb250ZXh0LAomIzQzOwkJCQkgICAgIHN0cnVjdCBwbGRtZndfY29tcG9uZW50ICpjb21wb25lbnQsCiYjNDM7CQkJCSAgICAgdTggdHJhbnNmZXJfZmxhZykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwZHNfY29yZV9md3VfcHJpdiAqcHJpdiA9CiYjNDM7CQljb250YWluZXJfb2YoY29udGV4dCwgc3RydWN0IHBkc19jb3JlX2Z3dV9wcml2LCBjb250ZXh0KTsKJiM0MzsJc3RydWN0IHBkc19jb3JlX2NvbXBvbmVudF90YmwgKmNvbXBvbmVudF90Ymw7CiYjNDM7CXN0cnVjdCBwZHNjX2NvbXBvbmVudF9wcml2ICpjb21wb25lbnRfcHJpdjsKJiM0MzsJc3RydWN0IGRldmljZSAqZGV2ID0gY29udGV4dC0mZ3Q7ZGV2OwomIzQzOwl1bmlvbiBwZHNfY29yZV9kZXZfY29tcCBjb21wID0ge307CiYjNDM7CXVuaW9uIHBkc19jb3JlX2Rldl9jbWQgY21kID0ge307CiYjNDM7CXN0cnVjdCBwZHNjICpwZHNjID0gcHJpdi0mZ3Q7cGRzYzsKJiM0MzsJYm9vbCBza2lwX2NvbXBvbmVudCA9IGZhbHNlOwomIzQzOwl1OCByZXF1ZXN0ZWRfdHlwZSA9IDA7CiYjNDM7CXUxNiBidWZfc3osIHRibF9zejsKJiM0MzsJaW50IGVyciA9IDA7CiYjNDM7CiYjNDM7CWRldl9kYmcoZGV2LAomIzQzOwkJJiMzNDtjb21wb25lbnQgbmFtZSAlcyBjbGFzc2lmaWNhdGlvbiAldSBpZCAldSBhY3RpdmF0aW9uX21ldGhvZCAldSB2ZXJfbGVuICVkIHZlcl9zdHIgJS4qcyBpbmRleCAldSBzaXplICV1IHRyYW5zZmVyX2ZsYWcgMHglMDJ4XG4mIzM0OywKJiM0MzsJCXByaXYtJmd0O3BhcmFtcy0mZ3Q7Y29tcG9uZW50LCBjb21wb25lbnQtJmd0O2NsYXNzaWZpY2F0aW9uLAomIzQzOwkJY29tcG9uZW50LSZndDtpZGVudGlmaWVyLCBjb21wb25lbnQtJmd0O2FjdGl2YXRpb25fbWV0aG9kLAomIzQzOwkJY29tcG9uZW50LSZndDt2ZXJzaW9uX2xlbiwgY29tcG9uZW50LSZndDt2ZXJzaW9uX2xlbiwKJiM0MzsJCWNvbXBvbmVudC0mZ3Q7dmVyc2lvbl9zdHJpbmcsIGNvbXBvbmVudC0mZ3Q7aW5kZXgsCiYjNDM7CQljb21wb25lbnQtJmd0O2NvbXBvbmVudF9zaXplLCB0cmFuc2Zlcl9mbGFnKTsKJiM0MzsKJiM0MzsJY29tcG9uZW50X3ByaXYgPSBremFsbG9jX29iaigqY29tcG9uZW50X3ByaXYsIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoIWNvbXBvbmVudF9wcml2KQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CWlmIChwcml2LSZndDtwYXJhbXMtJmd0O2NvbXBvbmVudCkgewomIzQzOwkJcmVxdWVzdGVkX3R5cGUgPSBwZHNjX25hbWVfdG9fZndfdHlwZShwcml2LSZndDtwYXJhbXMtJmd0O2NvbXBvbmVudCk7CiYjNDM7CQlpZiAoY29tcG9uZW50LSZndDtpZGVudGlmaWVyICZndDsgVThfTUFYIHx8CiYjNDM7CQkgICAgIXBkc2NfY29tcG9uZW50X2lkX21hdGNoZXNfdHlwZShwZHNjLAomIzQzOwkJCQkJCSAgICBjb21wb25lbnQtJmd0O2lkZW50aWZpZXIsCiYjNDM7CQkJCQkJICAgIHJlcXVlc3RlZF90eXBlKSkgewomIzQzOwkJCXNraXBfY29tcG9uZW50ID0gdHJ1ZTsKJiM0MzsJCQlnb3RvIGFkZF9jb21wb25lbnRfcHJpdjsKJiM0MzsJCX0KJiM0MzsJCXByaXYtJmd0O2NvbXBvbmVudF9mb3VuZCA9IHRydWU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJYnVmX3N6ID0gc2l6ZW9mKHBkc2MtJmd0O2NtZF9yZWdzLSZndDtkYXRhKTsKJiM0MzsJdGJsX3N6ID0gc3RydWN0X3NpemUoY29tcG9uZW50X3RibCwgdmVyc2lvbl9zdHIsCiYjNDM7CQkJICAgICBjb21wb25lbnQtJmd0O3ZlcnNpb25fbGVuKTsKJiM0MzsJaWYgKHRibF9zeiAmZ3Q7IGJ1Zl9zeikgewomIzQzOwkJZGV2X2VycihkZXYsICYjMzQ7Y29tcG9uZW50X3RibCBzaXplICVkIHRvbyBiaWcsIG1heCBzaXplOiAlZFxuJiMzNDssCiYjNDM7CQkJdGJsX3N6LCBidWZfc3opOwomIzQzOwkJZXJyID0gLUVOT1NQQzsKJiM0MzsJCWdvdG8gZnJlZV9jb21wb25lbnRfcHJpdjsKJiM0MzsJfQomIzQzOwljb21wb25lbnRfdGJsID0ga3phbGxvYyh0Ymxfc3osIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoIWNvbXBvbmVudF90YmwpIHsKJiM0MzsJCWVyciA9IC1FTk9NRU07CiYjNDM7CQlnb3RvIGZyZWVfY29tcG9uZW50X3ByaXY7CiYjNDM7CX0KJiM0MzsKJiM0MzsJY29tcG9uZW50X3RibC0mZ3Q7Y29tcGFyaXNvbl9zdGFtcCA9CiYjNDM7CQljcHVfdG9fbGUzMihjb21wb25lbnQtJmd0O2NvbXBhcmlzb25fc3RhbXApOwomIzQzOwljb21wb25lbnRfdGJsLSZndDtjbGFzc2lmaWNhdGlvbiA9IGNwdV90b19sZTE2KGNvbXBvbmVudC0mZ3Q7Y2xhc3NpZmljYXRpb24pOwomIzQzOwljb21wb25lbnRfdGJsLSZndDtpZGVudGlmaWVyID0gY3B1X3RvX2xlMTYoY29tcG9uZW50LSZndDtpZGVudGlmaWVyKTsKJiM0MzsJY29tcG9uZW50X3RibC0mZ3Q7dHJhbnNmZXJfZmxhZyA9IHRyYW5zZmVyX2ZsYWc7CiYjNDM7CWNvbXBvbmVudF90YmwtJmd0O3ZlcnNpb25fc3RyX3R5cGUgPSBjb21wb25lbnQtJmd0O3ZlcnNpb25fdHlwZTsKJiM0MzsJY29tcG9uZW50X3RibC0mZ3Q7dmVyc2lvbl9zdHJfbGVuID0gY29tcG9uZW50LSZndDt2ZXJzaW9uX2xlbjsKJiM0MzsJbWVtY3B5KGNvbXBvbmVudF90YmwtJmd0O3ZlcnNpb25fc3RyLCBjb21wb25lbnQtJmd0O3ZlcnNpb25fc3RyaW5nLAomIzQzOwkgICAgICAgY29tcG9uZW50LSZndDt2ZXJzaW9uX2xlbik7CiYjNDM7CiYjNDM7CWNtZC5zZW5kX2NvbXBvbmVudF90Ymwub3Bjb2RlID0gUERTX0NPUkVfQ01EX1NFTkRfQ09NUE9ORU5UX1RCTDsKJiM0MzsJY21kLnNlbmRfY29tcG9uZW50X3RibC52ZXIgPSAxOwomIzQzOwljbWQuc2VuZF9jb21wb25lbnRfdGJsLnNsb3RfaWQgPSBQRFNfQ09SRV9GV19TTE9UX0lOVkFMSUQ7CiYjNDM7CiYjNDM7CWVyciA9IHBkc2NfZGV2Y21kX3dpdGhfZGF0YShwZHNjLCAmYW1wO2NtZCwgY29tcG9uZW50X3RibCwgdGJsX3N6LAomIzQzOwkJCQkgICAgJmFtcDtjb21wLCBwZHNjLSZndDtkZXZjbWRfdGltZW91dCk7CiYjNDM7CWtmcmVlKGNvbXBvbmVudF90YmwpOwomIzQzOwlpZiAoZXJyKSB7CiYjNDM7CQlkZXZfZXJyKGRldiwgJiMzNDtGYWlsZWQgc2VuZGluZyBjb21wb25lbnQgdGFibGU6ICVwZVxuJiMzNDssCiYjNDM7CQkJRVJSX1BUUihlcnIpKTsKJiM0MzsJCWdvdG8gZnJlZV9jb21wb25lbnRfcHJpdjsKJiM0MzsJfQomIzQzOwomIzQzOwlza2lwX2NvbXBvbmVudCA9IGNvbXAuc2VuZF9jb21wb25lbnRfdGJsLnJlc3BvbnNlID09IDE7CiYjNDM7CiYjNDM7YWRkX2NvbXBvbmVudF9wcml2OgomIzQzOwljb21wb25lbnRfcHJpdi0mZ3Q7c2tpcCA9IHNraXBfY29tcG9uZW50OwomIzQzOwljb21wb25lbnRfcHJpdi0mZ3Q7Y29tcG9uZW50X2lkID0gY29tcG9uZW50LSZndDtpZGVudGlmaWVyOwomIzQzOwlsaXN0X2FkZCgmYW1wO2NvbXBvbmVudF9wcml2LSZndDtsaXN0X2VudHJ5LCAmYW1wO3ByaXYtJmd0O2NvbXBvbmVudHMpOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0MzsKJiM0MztmcmVlX2NvbXBvbmVudF9wcml2OgomIzQzOwlrZnJlZShjb21wb25lbnRfcHJpdik7CiYjNDM7CXJldHVybiBlcnI7CiYjNDM7fQomIzQzOwomIzQzO2ludCBwZHNjX2dldF9jb21wb25lbnRfaW5mbyhzdHJ1Y3QgcGRzYyAqcGRzYykKJiM0Mzt7CiYjNDM7CXVuaW9uIHBkc19jb3JlX2Rldl9jbWQgY21kID0gewomIzQzOwkJLmdldF9jb21wb25lbnRfaW5mby5vcGNvZGUgPSBQRFNfQ09SRV9DTURfR0VUX0NPTVBPTkVOVF9JTkZPLAomIzQzOwkJLmdldF9jb21wb25lbnRfaW5mby52ZXIgPSAxLAomIzQzOwl9OwomIzQzOwlzdHJ1Y3QgcGRzX2NvcmVfY29tcG9uZW50X2xpc3RfaW5mbyAqbGlzdF9pbmZvOwomIzQzOwlzdHJ1Y3QgcGRzY19kZWZlcnJlZF9kbWEgKmRlZmVycmVkOwomIzQzOwl1bmlvbiBwZHNfY29yZV9kZXZfY29tcCBjb21wID0ge307CiYjNDM7CWRtYV9hZGRyX3QgZG1hX2FkZHI7CiYjNDM7CXU4IG51bV9jb21wb25lbnRzOwomIzQzOwlpbnQgZXJyLCBpOwomIzQzOwomIzQzOwlkZWZlcnJlZCA9IGttYWxsb2Nfb2JqKCpkZWZlcnJlZCk7CiYjNDM7CWlmICghZGVmZXJyZWQpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJbGlzdF9pbmZvID0ga3phbGxvYyhQRFNfUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCFsaXN0X2luZm8pIHsKJiM0MzsJCWtmcmVlKGRlZmVycmVkKTsKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwl9CiYjNDM7CiYjNDM7CWRtYV9hZGRyID0gZG1hX21hcF9zaW5nbGUocGRzYy0mZ3Q7ZGV2LCBsaXN0X2luZm8sIFBEU19QQUdFX1NJWkUsCiYjNDM7CQkJCSAgRE1BX0ZST01fREVWSUNFKTsKJiM0MzsJaWYgKGRtYV9tYXBwaW5nX2Vycm9yKHBkc2MtJmd0O2RldiwgZG1hX2FkZHIpKSB7CiYjNDM7CQlkZXZfZXJyKHBkc2MtJmd0O2RldiwKJiM0MzsJCQkmIzM0O0ZhaWxlZCB0byBkbWFfbWFwIGNvbXBvbmVudF9saXN0X2luZm8gbGVuZ3RoICVkXG4mIzM0OywKJiM0MzsJCQlQRFNfUEFHRV9TSVpFKTsKJiM0MzsJCWtmcmVlKGxpc3RfaW5mbyk7CiYjNDM7CQlrZnJlZShkZWZlcnJlZCk7CiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJfQomIzQzOwomIzQzOwljbWQuZ2V0X2NvbXBvbmVudF9pbmZvLmRhdGFfbGVuID0gY3B1X3RvX2xlMTYoUERTX1BBR0VfU0laRSk7CiYjNDM7CWNtZC5nZXRfY29tcG9uZW50X2luZm8uZGF0YV9wYSA9IGNwdV90b19sZTY0KGRtYV9hZGRyKTsKJiM0MzsKJiM0MzsJZXJyID0gcGRzY19kZXZjbWQocGRzYywgJmFtcDtjbWQsICZhbXA7Y29tcCwgcGRzYy0mZ3Q7ZGV2Y21kX3RpbWVvdXQgKiAyKTsKJiM0MzsJaWYgKGVyciA9PSAtRVRJTUVET1VUIHx8IGVyciA9PSAtRUFHQUlOKSB7CiYjNDM7CQlwZHNjX2RlZmVycmVkX2RtYV9hZGQocGRzYywgZGVmZXJyZWQsIGRtYV9hZGRyLCBsaXN0X2luZm8sCiYjNDM7CQkJCSAgICAgIFBEU19QQUdFX1NJWkUsIERNQV9GUk9NX0RFVklDRSk7CiYjNDM7CQlyZXR1cm4gZXJyOwomIzQzOwl9CiYjNDM7CiYjNDM7CWtmcmVlKGRlZmVycmVkKTsKJiM0MzsJZG1hX3VubWFwX3NpbmdsZShwZHNjLSZndDtkZXYsIGRtYV9hZGRyLCBQRFNfUEFHRV9TSVpFLCBETUFfRlJPTV9ERVZJQ0UpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CWlmIChjb21wLmdldF9jb21wb25lbnRfaW5mby52ZXIgPT0gMCkgewomIzQzOwkJLyogRG9uJiMzOTt0IHN1cHBvcnQgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBhcyB2ZXJzaW9uIDAgaGFzCiYjNDM7CQkgKiBhbGlnbm1lbnQgaXNzdWVzLCBzbyBnaXZlIGEgaGludCB0byB1c2VycyB0byB1cGRhdGUKJiM0MzsJCSAqIHRoZWlyIGZpcm13YXJlCiYjNDM7CQkgKi8KJiM0MzsJCWRldl93YXJuX29uY2UocGRzYy0mZ3Q7ZGV2LAomIzQzOwkJCSAgICAgICYjMzQ7SW5jb21wYXRpYmxlIGdldF9jb21wb25lbnRfaW5mbyB2ZXJzaW9uICV1IHJlcG9ydGVkIGJ5IGZpcm13YXJlXG4mIzM0OywKJiM0MzsJCQkgICAgICBjb21wLmdldF9jb21wb25lbnRfaW5mby52ZXIpOwomIzQzOwkJZXJyID0gMDsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CW51bV9jb21wb25lbnRzID0gbGlzdF9pbmZvLSZndDtudW1fY29tcG9uZW50czsKJiM0MzsJaWYgKG51bV9jb21wb25lbnRzICZndDsgUERTX0NPUkVfRldfQ09NUE9ORU5UX0xJU1RfTEVOKSB7CiYjNDM7CQllcnIgPSAtRU5PTUVNOwomIzQzOwkJZ290byBvdXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcGRzYy0mZ3Q7ZndfY29tcG9uZW50cy5udW1fY29tcG9uZW50cyA9IG51bV9jb21wb25lbnRzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgbnVtX2NvbXBvbmVudHM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlzdHJ1Y3QgcGRzX2NvcmVfZndfY29tcG9uZW50X2luZm8gKmluZm8gPQomIzQzOwkJCSZhbXA7cGRzYy0mZ3Q7ZndfY29tcG9uZW50cy5pbmZvW2ldOwomIzQzOwomIzQzOwkJbWVtY3B5KGluZm8sICZhbXA7bGlzdF9pbmZvLSZndDtpbmZvW2ldLCBzaXplb2YoKmluZm8pKTsKJiM0MzsJCWluZm8tJmd0O3ZlcnNpb25bUERTX0NPUkVfRldfQ09NUE9ORU5UX1ZFUl9CVUZMRU4gLSAxXSA9IDA7CiYjNDM7CQlpbmZvLSZndDtuYW1lW1BEU19DT1JFX0ZXX0NPTVBPTkVOVF9OQU1FX0JVRkxFTiAtIDFdID0gMDsKJiM0MzsJfQomIzQzOwomIzQzO291dDoKJiM0MzsJa2ZyZWUobGlzdF9pbmZvKTsKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBwZHNjX2RldmNtZF9zZW5kX2NvbXBvbmVudChzdHJ1Y3QgcGRzYyAqcGRzYywKJiM0MzsJCQkJICAgICAgc3RydWN0IHBkc19jb3JlX2ZsYXNoX2NvbXBvbmVudCAqaW5mbywKJiM0MzsJCQkJICAgICAgdTE2IGluZm9fc3osIGRtYV9hZGRyX3QgYWRkciwgdTMyIGxlbmd0aCwKJiM0MzsJCQkJICAgICAgdTMyIG9mZnNldCwgdTE2IHNsb3RfaWQsCiYjNDM7CQkJCSAgICAgIHVuaW9uIHBkc19jb3JlX2Rldl9jb21wICpjb21wKQomIzQzO3sKJiM0MzsJdW5pb24gcGRzX2NvcmVfZGV2X2NtZCBjbWQgPSB7CiYjNDM7CQkuc2VuZF9jb21wb25lbnQub3Bjb2RlID0gUERTX0NPUkVfQ01EX1NFTkRfQ09NUE9ORU5ULAomIzQzOwkJLnNlbmRfY29tcG9uZW50LnZlciA9IDEsCiYjNDM7CQkuc2VuZF9jb21wb25lbnQub3BlcmF0aW9uID0gUERTX0NPUkVfU0VORF9DT01QT05FTlRfU1RBUlQsCiYjNDM7CQkuc2VuZF9jb21wb25lbnQuZGF0YV9wYSA9IGNwdV90b19sZTY0KGFkZHIpLAomIzQzOwkJLnNlbmRfY29tcG9uZW50LmRhdGFfbGVuID0gY3B1X3RvX2xlMzIobGVuZ3RoKSwKJiM0MzsJCS5zZW5kX2NvbXBvbmVudC5vZmZzZXQgPSBjcHVfdG9fbGUzMihvZmZzZXQpLAomIzQzOwkJLnNlbmRfY29tcG9uZW50LnNsb3RfaWQgPSBzbG90X2lkLAomIzQzOwl9OwomIzQzOwl1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSAzMDAgKiBIWjsKJiM0MzsJdW5zaWduZWQgbG9uZyBzdGFydF90aW1lOwomIzQzOwl1bnNpZ25lZCBsb25nIGVuZF90aW1lOwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwlzdGFydF90aW1lID0gamlmZmllczsKJiM0MzsJZW5kX3RpbWUgPSBzdGFydF90aW1lICYjNDM7IHRpbWVvdXQ7CiYjNDM7CWRvIHsKJiM0MzsJCS8qIHByZXZlbnQgbm9pc3kvYmVuaWduIGRldmNtZCBmYWlsdXJlcyAqLwomIzQzOwkJZXJyID0gcGRzY19kZXZjbWRfd2l0aF9kYXRhX25vbXNnKHBkc2MsICZhbXA7Y21kLCBpbmZvLCBpbmZvX3N6LAomIzQzOwkJCQkJCSAgY29tcCwgNjApOwomIzQzOwkJaWYgKGVyciAhPSAtRUFHQUlOKQomIzQzOwkJCWJyZWFrOwomIzQzOwomIzQzOwkJLyogaWYgcmVxdWlyZWQsIHN1YnNlcXVlbnQgY29tbWFuZHMgY2hlY2sgc3RhdHVzIG9mCiYjNDM7CQkgKiBQRFNfQ09SRV9DTURfU0VORF9DT01QT05FTlQgY29tbWFuZCwgd2hpY2ggcmV0dXJucwomIzQzOwkJICogRUFHQUlOIHdoaWxlIHRoZSBjb21tYW5kIGlzIHN0aWxsIHJ1bm5pbmcsCiYjNDM7CQkgKiBlbHNlIHdlIGdldCB0aGUgZmluYWwgY29tbWFuZCBzdGF0dXMuCiYjNDM7CQkgKi8KJiM0MzsJCWNtZC5zZW5kX2NvbXBvbmVudC5vcGVyYXRpb24gPSBQRFNfQ09SRV9TRU5EX0NPTVBPTkVOVF9TVEFUVVM7CiYjNDM7CQltc2xlZXAoMjApOwomIzQzOwl9IHdoaWxlICh0aW1lX2JlZm9yZShqaWZmaWVzLCBlbmRfdGltZSkpOwomIzQzOwomIzQzOwlpZiAoZXJyID09IC1FQUdBSU4gfHwgZXJyID09IC1FVElNRURPVVQpCiYjNDM7CQlkZXZfZXJyKHBkc2MtJmd0O2RldiwgJiMzNDtQRFNfQ09SRV9DTURfU0VORF9DT01QT05FTlQgdGltZWQgb3V0XG4mIzM0Oyk7CiYjNDM7CiYjNDM7CXJldHVybiBlcnI7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcGRzY19mbGFzaF9jb21wb25lbnRfY2h1bmsoc3RydWN0IHBkc2MgKnBkc2MsIHN0cnVjdCBkZXZpY2UgKmRldiwKJiM0MzsJCQkJICAgICAgc3RydWN0IHBkc19jb3JlX2ZsYXNoX2NvbXBvbmVudCAqaW5mbywKJiM0MzsJCQkJICAgICAgdTE2IGluZm9fc3osIGNvbnN0IHU4ICpkYXRhLCB1MTYgY29weV9zeiwKJiM0MzsJCQkJICAgICAgdTMyIG9mZnNldCwgdTggc2xvdF9pZCwKJiM0MzsJCQkJICAgICAgdW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgKmNvbXApCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcGRzY19kZWZlcnJlZF9kbWEgKmRlZmVycmVkOwomIzQzOwlkbWFfYWRkcl90IGRtYV9hZGRyOwomIzQzOwl1OCAqY29tcG9uZW50X2RhdGE7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CWRlZmVycmVkID0ga21hbGxvY19vYmooKmRlZmVycmVkLCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCFkZWZlcnJlZCkKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwljb21wb25lbnRfZGF0YSA9IGttZW1kdXAoZGF0YSwgY29weV9zeiwgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmICghY29tcG9uZW50X2RhdGEpIHsKJiM0MzsJCWtmcmVlKGRlZmVycmVkKTsKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwl9CiYjNDM7CiYjNDM7CWRtYV9hZGRyID0gZG1hX21hcF9zaW5nbGUoZGV2LCBjb21wb25lbnRfZGF0YSwgY29weV9zeiwgRE1BX1RPX0RFVklDRSk7CiYjNDM7CWlmIChkbWFfbWFwcGluZ19lcnJvcihkZXYsIGRtYV9hZGRyKSkgewomIzQzOwkJZGV2X2VycihkZXYsCiYjNDM7CQkJJiMzNDtGYWlsZWQgdG8gZG1hX21hcCBjb21wb25lbnRfZGF0YSBhdCBvZmZzZXQgMHgleCBjb3B5X3N6IDB4JXhcbiYjMzQ7LAomIzQzOwkJCW9mZnNldCwgY29weV9zeik7CiYjNDM7CQlrZnJlZShjb21wb25lbnRfZGF0YSk7CiYjNDM7CQlrZnJlZShkZWZlcnJlZCk7CiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJfQomIzQzOwomIzQzOwllcnIgPSBwZHNjX2RldmNtZF9zZW5kX2NvbXBvbmVudChwZHNjLCBpbmZvLCBpbmZvX3N6LCBkbWFfYWRkciwKJiM0MzsJCQkJCSBjb3B5X3N6LCBvZmZzZXQsIHNsb3RfaWQsIGNvbXApOwomIzQzOwlpZiAoZXJyID09IC1FVElNRURPVVQgfHwgZXJyID09IC1FQUdBSU4pIHsKJiM0MzsJCXBkc2NfZGVmZXJyZWRfZG1hX2FkZChwZHNjLCBkZWZlcnJlZCwgZG1hX2FkZHIsCiYjNDM7CQkJCSAgICAgIGNvbXBvbmVudF9kYXRhLCBjb3B5X3N6LCBETUFfVE9fREVWSUNFKTsKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CX0KJiM0MzsKJiM0MzsJa2ZyZWUoZGVmZXJyZWQpOwomIzQzOwlkbWFfdW5tYXBfc2luZ2xlKGRldiwgZG1hX2FkZHIsIGNvcHlfc3osIERNQV9UT19ERVZJQ0UpOwomIzQzOwlrZnJlZShjb21wb25lbnRfZGF0YSk7CiYjNDM7CiYjNDM7CXJldHVybiBlcnI7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcGRzY19mbGFzaF9jb21wb25lbnQoc3RydWN0IHBsZG1mdyAqY29udGV4dCwKJiM0MzsJCQkJc3RydWN0IHBsZG1md19jb21wb25lbnQgKmNvbXBvbmVudCkKJiM0Mzt7CiYjNDM7CWNoYXIgY29tcG9uZW50X25hbWVfYnVmW1BEU0NfRldfQ09NUE9ORU5UX0ZVTExfTkFNRV9CVUZMRU5dOwomIzQzOwlzdHJ1Y3QgcGRzX2NvcmVfZnd1X3ByaXYgKnByaXYgPQomIzQzOwkJY29udGFpbmVyX29mKGNvbnRleHQsIHN0cnVjdCBwZHNfY29yZV9md3VfcHJpdiwgY29udGV4dCk7CiYjNDM7CXN0cnVjdCBwZHNfY29yZV9mbGFzaF9jb21wb25lbnQgKmNvbXBvbmVudF9pbmZvOwomIzQzOwljb25zdCBjaGFyICpjb21wb25lbnRfbmFtZSA9IE5VTEw7CiYjNDM7CXN0cnVjdCBkZXZpY2UgKmRldiA9IGNvbnRleHQtJmd0O2RldjsKJiM0MzsJc3RydWN0IHBkc2MgKnBkc2MgPSBwcml2LSZndDtwZHNjOwomIzQzOwl1MTYgYnVmX3N6LCBpbmZvX3N6OwomIzQzOwlzdHJ1Y3QgZGV2bGluayAqZGw7CiYjNDM7CXU4IGNvbXBvbmVudF90eXBlOwomIzQzOwl1MzIgdG90YWxfbGVuOwomIzQzOwl1MzIgb2Zmc2V0OwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwljb21wb25lbnRfdHlwZSA9IHBkc2NfZ2V0X2NvbXBvbmVudF90eXBlX2J5X2lkKHBkc2MsCiYjNDM7CQkJCQkJICAgICAgIGNvbXBvbmVudC0mZ3Q7aWRlbnRpZmllcik7CiYjNDM7CWlmIChjb21wb25lbnRfdHlwZSkgewomIzQzOwkJY29uc3QgY2hhciAqdHlwZV9uYW1lID0gcGRzY19md190eXBlX3RvX25hbWUoY29tcG9uZW50X3R5cGUpOwomIzQzOwomIzQzOwkJaWYgKGNvbXBvbmVudF90eXBlID09IFBEU19DT1JFX0ZXX1RZUEVfTUFJTikgewomIzQzOwkJCWNvbXBvbmVudF9uYW1lID0gJiMzNDtmdyYjMzQ7OwomIzQzOwkJfSBlbHNlIGlmICh0eXBlX25hbWUpIHsKJiM0MzsJCQlzbnByaW50Zihjb21wb25lbnRfbmFtZV9idWYsIHNpemVvZihjb21wb25lbnRfbmFtZV9idWYpLAomIzQzOwkJCQkgJiMzNDslcyVzJiMzNDssIFBEU0NfRldfQ09NUE9ORU5UX1BSRUZJWCwgdHlwZV9uYW1lKTsKJiM0MzsJCQljb21wb25lbnRfbmFtZSA9IGNvbXBvbmVudF9uYW1lX2J1ZjsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlkbCA9IHByaXZfdG9fZGV2bGluayhwZHNjKTsKJiM0MzsKJiM0MzsJaWYgKHBkc2Nfc2tpcF9jb21wb25lbnQocHJpdiwgY29tcG9uZW50LSZndDtpZGVudGlmaWVyKSkgewomIzQzOwkJZGV2bGlua19mbGFzaF91cGRhdGVfc3RhdHVzX25vdGlmeShkbCwgJiMzNDtTa2lwcGVkJiMzNDssCiYjNDM7CQkJCQkJICAgY29tcG9uZW50X25hbWUsIDAsIDApOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJdG90YWxfbGVuID0gY29tcG9uZW50LSZndDtjb21wb25lbnRfc2l6ZTsKJiM0MzsJZGV2X2RiZyhkZXYsCiYjNDM7CQkmIzM0O2NvbXBvbmVudCBuYW1lICVzIGNsYXNzICV1IGlkICV1IGFjdF9tZXRoICV1IHZlcl9zdHIgJS4qcyBpbmRleCAldSBzaXplICV1XG4mIzM0OywKJiM0MzsJCWNvbXBvbmVudF9uYW1lID86ICYjMzQ7KHVua25vd24pJiMzNDssIGNvbXBvbmVudC0mZ3Q7Y2xhc3NpZmljYXRpb24sCiYjNDM7CQljb21wb25lbnQtJmd0O2lkZW50aWZpZXIsIGNvbXBvbmVudC0mZ3Q7YWN0aXZhdGlvbl9tZXRob2QsCiYjNDM7CQljb21wb25lbnQtJmd0O3ZlcnNpb25fbGVuLCBjb21wb25lbnQtJmd0O3ZlcnNpb25fc3RyaW5nLAomIzQzOwkJY29tcG9uZW50LSZndDtpbmRleCwgY29tcG9uZW50LSZndDtjb21wb25lbnRfc2l6ZSk7CiYjNDM7CiYjNDM7CWJ1Zl9zeiA9IHNpemVvZihwZHNjLSZndDtjbWRfcmVncy0mZ3Q7ZGF0YSk7CiYjNDM7CWluZm9fc3ogPSBzdHJ1Y3Rfc2l6ZShjb21wb25lbnRfaW5mbywgdmVyc2lvbl9zdHIsCiYjNDM7CQkJICAgICAgY29tcG9uZW50LSZndDt2ZXJzaW9uX2xlbik7CiYjNDM7CWlmIChpbmZvX3N6ICZndDsgYnVmX3N6KSB7CiYjNDM7CQlkZXZfZXJyKGRldiwgJiMzNDtjb21wb25lbnRfaW5mbyBzaXplICVkIHRvbyBiaWcsIG1heCBzaXplOiAlZFxuJiMzNDssCiYjNDM7CQkJaW5mb19zeiwgYnVmX3N6KTsKJiM0MzsJCXJldHVybiAtRU5PU1BDOwomIzQzOwl9CiYjNDM7CWNvbXBvbmVudF9pbmZvID0gdnphbGxvYyhpbmZvX3N6KTsKJiM0MzsJaWYgKCFjb21wb25lbnRfaW5mbykKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwljb21wb25lbnRfaW5mby0mZ3Q7Y29tcGFyaXNvbl9zdGFtcCA9CiYjNDM7CQljcHVfdG9fbGUzMihjb21wb25lbnQtJmd0O2NvbXBhcmlzb25fc3RhbXApOwomIzQzOwljb21wb25lbnRfaW5mby0mZ3Q7aW1hZ2Vfc2l6ZSA9IGNwdV90b19sZTMyKHRvdGFsX2xlbik7CiYjNDM7CWNvbXBvbmVudF9pbmZvLSZndDtjbGFzc2lmaWNhdGlvbiA9IGNwdV90b19sZTE2KGNvbXBvbmVudC0mZ3Q7Y2xhc3NpZmljYXRpb24pOwomIzQzOwljb21wb25lbnRfaW5mby0mZ3Q7aWRlbnRpZmllciA9IGNwdV90b19sZTE2KGNvbXBvbmVudC0mZ3Q7aWRlbnRpZmllcik7CiYjNDM7CWNvbXBvbmVudF9pbmZvLSZndDtvcHRpb25zID0gY3B1X3RvX2xlMTYoY29tcG9uZW50LSZndDtvcHRpb25zKTsKJiM0MzsJY29tcG9uZW50X2luZm8tJmd0O3ZlcnNpb25fc3RyX3R5cGUgPSBjb21wb25lbnQtJmd0O3ZlcnNpb25fdHlwZTsKJiM0MzsJY29tcG9uZW50X2luZm8tJmd0O3ZlcnNpb25fc3RyX2xlbiA9IGNvbXBvbmVudC0mZ3Q7dmVyc2lvbl9sZW47CiYjNDM7CW1lbWNweShjb21wb25lbnRfaW5mby0mZ3Q7dmVyc2lvbl9zdHIsIGNvbXBvbmVudC0mZ3Q7dmVyc2lvbl9zdHJpbmcsCiYjNDM7CSAgICAgICBjb21wb25lbnQtJmd0O3ZlcnNpb25fbGVuKTsKJiM0MzsKJiM0MzsJb2Zmc2V0ID0gMDsKJiM0MzsJd2hpbGUgKG9mZnNldCAmbHQ7IHRvdGFsX2xlbikgewomIzQzOwkJdW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgY29tcCA9IHt9OwomIzQzOwkJdTE2IGNvcHlfc3o7CiYjNDM7CiYjNDM7CQljb3B5X3N6ID0gbWluX3QodW5zaWduZWQgaW50LCBQRFNfUEFHRV9TSVpFLAomIzQzOwkJCQl0b3RhbF9sZW4gLSBvZmZzZXQpOwomIzQzOwomIzQzOwkJZXJyID0gcGRzY19mbGFzaF9jb21wb25lbnRfY2h1bmsocGRzYywgZGV2LCBjb21wb25lbnRfaW5mbywKJiM0MzsJCQkJCQkgaW5mb19zeiwKJiM0MzsJCQkJCQkgY29tcG9uZW50LSZndDtjb21wb25lbnRfZGF0YSAmIzQzOwomIzQzOwkJCQkJCSBvZmZzZXQsIGNvcHlfc3osIG9mZnNldCwKJiM0MzsJCQkJCQkgUERTX0NPUkVfRldfU0xPVF9JTlZBTElELAomIzQzOwkJCQkJCSAmYW1wO2NvbXApOwomIzQzOwkJaWYgKGVyciAmYW1wOyZhbXA7CiYjNDM7CQkgICAgY29tcC5zZW5kX2NvbXBvbmVudC5jb21wYXRfcmVzcG9uc2UgJmFtcDsmYW1wOwomIzQzOwkJICAgIChjb21wLnNlbmRfY29tcG9uZW50LmNvbXBhdF9yZXNwb25zZV9jb2RlID09CiYjNDM7CQkgICAgIFBEU19DT1JFX0NPTVBPTkVOVF9TVEFNUF9JREVOVElDQUwgfHwKJiM0MzsJCSAgICAgY29tcC5zZW5kX2NvbXBvbmVudC5jb21wYXRfcmVzcG9uc2VfY29kZSA9PQomIzQzOwkJICAgICBQRFNfQ09SRV9DT01QT05FTlRfU1RBTVBfTE9XRVIpKSB7CiYjNDM7CQkJZXJyID0gMDsKJiM0MzsJCQlkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9zdGF0dXNfbm90aWZ5KGRsLCAmIzM0O1NraXBwZWQmIzM0OywKJiM0MzsJCQkJCQkJICAgY29tcG9uZW50X25hbWUsCiYjNDM7CQkJCQkJCSAgIDAsIDApOwomIzQzOwkJCWdvdG8gc2tpcF9jb21wb25lbnQ7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlpZiAoZXJyKSB7CiYjNDM7CQkJTkxfU0VUX0VSUl9NU0dfTU9EKHByaXYtJmd0O2V4dGFjaywKJiM0MzsJCQkJCSAgICYjMzQ7RmFpbGVkIHRvIGZsYXNoIGNvbXBvbmVudCYjMzQ7KTsKJiM0MzsJCQlnb3RvIGVycl9vdXQ7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlvZmZzZXQgJiM0Mzs9IGNvcHlfc3o7CiYjNDM7CQlkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9zdGF0dXNfbm90aWZ5KGRsLAomIzQzOwkJCQkJCSAgICYjMzQ7RXJhc2luZy9GbGFzaGluZyYjMzQ7LAomIzQzOwkJCQkJCSAgIGNvbXBvbmVudF9uYW1lLCBvZmZzZXQsCiYjNDM7CQkJCQkJICAgdG90YWxfbGVuKTsKJiM0MzsJfQomIzQzOwomIzQzOwl2ZnJlZShjb21wb25lbnRfaW5mbyk7CiYjNDM7CXJldHVybiAwOwomIzQzOwomIzQzO2Vycl9vdXQ6CiYjNDM7CWRldmxpbmtfZmxhc2hfdXBkYXRlX3N0YXR1c19ub3RpZnkoZGwsCiYjNDM7CQkJCQkgICAmIzM0O0VyYXNpbmcvRmxhc2hpbmcgQ29tcG9uZW50IEZhaWxlZCYjMzQ7LAomIzQzOwkJCQkJICAgY29tcG9uZW50X25hbWUsIDAsIDApOwomIzQzO3NraXBfY29tcG9uZW50OgomIzQzOwl2ZnJlZShjb21wb25lbnRfaW5mbyk7CiYjNDM7CXJldHVybiBlcnI7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcGRzY19kZXZjbWRfZmluYWxpemVfdXBkYXRlKHN0cnVjdCBwZHNjICpwZHNjKQomIzQzO3sKJiM0MzsJdW5pb24gcGRzX2NvcmVfZGV2X2NtZCBjbWQgPSB7CiYjNDM7CQkuZmluYWxpemVfdXBkYXRlLm9wY29kZSA9IFBEU19DT1JFX0NNRF9GSU5BTElaRV9VUERBVEUsCiYjNDM7CQkuZmluYWxpemVfdXBkYXRlLnZlciA9IDEsCiYjNDM7CX07CiYjNDM7CXVuaW9uIHBkc19jb3JlX2Rldl9jb21wIGNvbXAgPSB7fTsKJiM0MzsKJiM0MzsJcmV0dXJuIHBkc2NfZGV2Y21kKHBkc2MsICZhbXA7Y21kLCAmYW1wO2NvbXAsIHBkc2MtJmd0O2RldmNtZF90aW1lb3V0KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBwZHNjX2ZpbmFsaXplX3VwZGF0ZShzdHJ1Y3QgcGxkbWZ3ICpjb250ZXh0KQomIzQzO3sKJiM0MzsJc3RydWN0IHBkc19jb3JlX2Z3dV9wcml2ICpwcml2ID0KJiM0MzsJCWNvbnRhaW5lcl9vZihjb250ZXh0LCBzdHJ1Y3QgcGRzX2NvcmVfZnd1X3ByaXYsIGNvbnRleHQpOwomIzQzOwljb25zdCBjaGFyICpjb21wb25lbnRfbmFtZSA9IHByaXYtJmd0O3BhcmFtcy0mZ3Q7Y29tcG9uZW50OwomIzQzOwl1bnNpZ25lZCBsb25nIHN0YXJ0X3RpbWUsIGVuZF90aW1lOwomIzQzOwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBjb250ZXh0LSZndDtkZXY7CiYjNDM7CXN0cnVjdCBwZHNjICpwZHNjID0gcHJpdi0mZ3Q7cGRzYzsKJiM0MzsJc3RydWN0IGRldmxpbmsgKmRsOwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwlkbCA9IHByaXZfdG9fZGV2bGluayhwZHNjKTsKJiM0MzsKJiM0MzsJc3RhcnRfdGltZSA9IGppZmZpZXM7CiYjNDM7CWVuZF90aW1lID0gc3RhcnRfdGltZSAmIzQzOyAoUERTQ19GV19JTlNUQUxMX1RJTUVPVVQgKiBIWik7CiYjNDM7CWRvIHsKJiM0MzsJCWVyciA9IHBkc2NfZGV2Y21kX2ZpbmFsaXplX3VwZGF0ZShwZHNjKTsKJiM0MzsJCWlmIChlcnIgIT0gLUVBR0FJTikKJiM0MzsJCQlicmVhazsKJiM0MzsKJiM0MzsJCWRldl9kYmcoZGV2LCAmIzM0O3JldHJ5aW5nIGZpbmFsaXplX3VwZGF0ZTogJXBlXG4mIzM0OywgRVJSX1BUUihlcnIpKTsKJiM0MzsJCW1zbGVlcCgyMCk7CiYjNDM7CX0gd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIGVuZF90aW1lKSAmYW1wOyZhbXA7IGVyciA9PSAtRUFHQUlOKTsKJiM0MzsKJiM0MzsJaWYgKGVycikgewomIzQzOwkJZGV2bGlua19mbGFzaF91cGRhdGVfc3RhdHVzX25vdGlmeShkbCwgJiMzNDtGaW5hbGl6ZSBVcGRhdGUgRmFpbGVkJiMzNDssCiYjNDM7CQkJCQkJICAgY29tcG9uZW50X25hbWUsIDAsIDApOwomIzQzOwkJTkxfU0VUX0VSUl9NU0dfTU9EKHByaXYtJmd0O2V4dGFjaywgJiMzNDtGaW5hbGl6ZSB1cGRhdGUgZmFpbGVkJiMzNDspOwomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsJfQomIzQzOwomIzQzOwlkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9zdGF0dXNfbm90aWZ5KGRsLCAmIzM0O0ZpbmFsaXplZCBVcGRhdGUmIzM0OywKJiM0MzsJCQkJCSAgIGNvbXBvbmVudF9uYW1lLCAwLCAwKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGxkbWZ3X29wcyBwZHNjX3BsZG1md19vcHMgPSB7CiYjNDM7CS5tYXRjaF9yZWNvcmQgPSBwZHNjX21hdGNoX3JlY29yZF9kZXNjcywKJiM0MzsJLnNlbmRfcGFja2FnZV9kYXRhID0gcGRzY19zZW5kX3BhY2thZ2VfZGF0YSwKJiM0MzsJLnNlbmRfY29tcG9uZW50X3RhYmxlID0gcGRzY19zZW5kX2NvbXBvbmVudF90YWJsZSwKJiM0MzsJLmZsYXNoX2NvbXBvbmVudCA9IHBkc2NfZmxhc2hfY29tcG9uZW50LAomIzQzOwkuZmluYWxpemVfdXBkYXRlID0gcGRzY19maW5hbGl6ZV91cGRhdGUKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBpbnQgcGRzY19wbGRtX2Zpcm13YXJlX3VwZGF0ZShzdHJ1Y3QgcGRzYyAqcGRzYywKJiM0MzsJCQkJICAgICBzdHJ1Y3QgZGV2bGlua19mbGFzaF91cGRhdGVfcGFyYW1zICpwYXJhbXMsCiYjNDM7CQkJCSAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrLAomIzQzOwkJCQkgICAgIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcGRzX2NvcmVfZnd1X3ByaXYgcHJpdiA9IHt9OwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwlpZiAoIXBkc2MtJmd0O2Z3X2NvbXBvbmVudHMubnVtX2NvbXBvbmVudHMpIHsKJiM0MzsJCWVyciA9IHBkc2NfZ2V0X2NvbXBvbmVudF9pbmZvKHBkc2MpOwomIzQzOwkJaWYgKGVycikgewomIzQzOwkJCU5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssCiYjNDM7CQkJCQkgICAmIzM0O0ZhaWxlZCB0byBnZXQgY29tcG9uZW50IGluZm8mIzM0Oyk7CiYjNDM7CQkJcmV0dXJuIGVycjsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlpZiAocGFyYW1zLSZndDtjb21wb25lbnQpIHsKJiM0MzsJCXU4IHR5cGUgPSBwZHNjX25hbWVfdG9fZndfdHlwZShwYXJhbXMtJmd0O2NvbXBvbmVudCk7CiYjNDM7CiYjNDM7CQlpZiAoIXR5cGUgfHwgIXBkc2NfY29tcG9uZW50X3R5cGVfZXhpc3RzKHBkc2MsIHR5cGUpKSB7CiYjNDM7CQkJTkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgJiMzNDtVbmtub3duIGNvbXBvbmVudCBuYW1lJiMzNDspOwomIzQzOwkJCXJldHVybiAtRU5PRU5UOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CUlOSVRfTElTVF9IRUFEKCZhbXA7cHJpdi5jb21wb25lbnRzKTsKJiM0MzsJcHJpdi5jb250ZXh0Lm9wcyA9ICZhbXA7cGRzY19wbGRtZndfb3BzOwomIzQzOwlwcml2LmNvbnRleHQuZGV2ID0gcGRzYy0mZ3Q7ZGV2OwomIzQzOwlwcml2LnBhcmFtcyA9IHBhcmFtczsKJiM0MzsJcHJpdi5leHRhY2sgPSBleHRhY2s7CiYjNDM7CXByaXYucGRzYyA9IHBkc2M7CiYjNDM7CiYjNDM7CWVyciA9IHBsZG1md19mbGFzaF9pbWFnZSgmYW1wO3ByaXYuY29udGV4dCwgZncpOwomIzQzOwlpZiAoIWVyciAmYW1wOyZhbXA7IHBhcmFtcy0mZ3Q7Y29tcG9uZW50ICZhbXA7JmFtcDsgIXByaXYuY29tcG9uZW50X2ZvdW5kKSB7CiYjNDM7CQlOTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLAomIzQzOwkJCQkgICAmIzM0O1JlcXVlc3RlZCBjb21wb25lbnQgbm90IHByZXNlbnQgaW4gZmlybXdhcmUgcGFja2FnZSYjMzQ7KTsKJiM0MzsJCWVyciA9IC1FTk9FTlQ7CiYjNDM7CX0KJiM0MzsJcGRzY19mcmVlX2Z3dV9wcml2KCZhbXA7cHJpdik7CiYjNDM7CiYjNDM7CXJldHVybiBlcnI7CiYjNDM7fQomIzQzOwomIzQzO2ludCBwZHNjX2Zpcm13YXJlX3VwZGF0ZShzdHJ1Y3QgcGRzYyAqcGRzYywKJiM0MzsJCQkgc3RydWN0IGRldmxpbmtfZmxhc2hfdXBkYXRlX3BhcmFtcyAqcGFyYW1zLAomIzQzOwkJCSBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spCiYjNDM7ewomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwlpZiAocGRzYy0mZ3Q7ZGV2X2lkZW50LnZlcnNpb24gJmd0Oz0gUERTX0NPUkVfSURFTlRJVFlfVkVSU0lPTl8yICZhbXA7JmFtcDsKJiM0MzsJICAgIHBkc2MtJmd0O2Rldl9pZGVudC5jYXBhYmlsaXRpZXMgJmFtcDsKJiM0MzsJCWNwdV90b19sZTY0KFBEU19DT1JFX0RFVl9DQVBfUExETV9GV19VUERBVEUpKQomIzQzOwkJZXJyID0gcGRzY19wbGRtX2Zpcm13YXJlX3VwZGF0ZShwZHNjLCBwYXJhbXMsIGV4dGFjaywKJiM0MzsJCQkJCQlwYXJhbXMtJmd0O2Z3KTsKJiM0MzsJZWxzZQomIzQzOwkJZXJyID0gcGRzY19sZWdhY3lfZmlybXdhcmVfdXBkYXRlKHBkc2MsIHBhcmFtcywgZXh0YWNrKTsKJiM0MzsKJiM0MzsJLyogSW52YWxpZGF0ZSBjYWNoZWQgY29tcG9uZW50IGluZm8gc28gbmV4dCBpbmZvX2dldCByZWZyZXNoZXMgKi8KJiM0MzsJcGRzY19md19jb21wb25lbnRzX2ludmFsaWRhdGUocGRzYyk7CiYjNDM7CiYjNDM7CXJldHVybiBlcnI7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9tYWluLmMKaW5kZXggOGQ5NGE0ZDcwMzk1ZS4uNWUxYjA3ODUwMTYzYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvbWFpbi5jCkBAIC0yMSw2ICYjNDM7MjEsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgcGRzY19pZF90YWJsZVtdID0gewogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBwZHNjX2lkX3RhYmxlKTsKIAomIzQzO3N0YXRpYyB2b2lkIHBkc2Nfc3RvcF9oZWFsdGhfdGhyZWFkKHN0cnVjdCBwZHNjICpwZHNjKTsKJiM0MzsKIHN0YXRpYyB2b2lkIHBkc2Nfd2R0aW1lcl9jYihzdHJ1Y3QgdGltZXJfbGlzdCAqdCkKIHsKIAlzdHJ1Y3QgcGRzYyAqcGRzYyA9IHRpbWVyX2NvbnRhaW5lcl9vZihwZHNjLCB0LCB3ZHRpbWVyKTsKQEAgLTMxNSw2ICYjNDM7MzE3LDcgQEAgc3RhdGljIGludCBwZHNjX2luaXRfcGYoc3RydWN0IHBkc2MgKnBkc2MpCiAJCWRlc3Ryb3lfd29ya3F1ZXVlKHBkc2MtJmd0O3dxKTsKIAltdXRleF9kZXN0cm95KCZhbXA7cGRzYy0mZ3Q7Y29uZmlnX2xvY2spOwogCW11dGV4X2Rlc3Ryb3koJmFtcDtwZHNjLSZndDtkZXZjbWRfbG9jayk7CiYjNDM7CXBkc2NfZGVmZXJyZWRfZG1hX2ZyZWUocGRzYyk7CiAJcGNpX2ZyZWVfaXJxX3ZlY3RvcnMocGRzYy0mZ3Q7cGRldik7CiBlcnJfb3V0X3VubWFwX2JhcnM6CiAJcGRzY191bm1hcF9iYXJzKHBkc2MpOwpAQCAtMzUzLDYgJiM0MzszNTYsOCBAQCBzdGF0aWMgaW50IHBkc2NfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCiAJcGRzYy0mZ3Q7cGRldiA9IHBkZXY7CiAJcGRzYy0mZ3Q7ZGV2ID0gJmFtcDtwZGV2LSZndDtkZXY7CiAJc2V0X2JpdChQRFNDX1NfSU5JVElOR19EUklWRVIsICZhbXA7cGRzYy0mZ3Q7c3RhdGUpOwomIzQzOwlJTklUX0xJU1RfSEVBRCgmYW1wO3Bkc2MtJmd0O2RlZmVycmVkX2RtYV9saXN0KTsKJiM0MzsJc3Bpbl9sb2NrX2luaXQoJmFtcDtwZHNjLSZndDtkZWZlcnJlZF9kbWFfbG9jayk7CiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIHBkc2MpOwogCXBkc2NfZGVidWdmc19hZGRfZGV2KHBkc2MpOwogCkBAIC00NTgsNiAmIzQzOzQ2Myw3IEBAIHN0YXRpYyB2b2lkIHBkc2NfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogCX0KIAogCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKJiM0MzsJcGRzY19kZWZlcnJlZF9kbWFfZnJlZShwZHNjKTsKIAogCWlkYV9mcmVlKCZhbXA7cGRzY19pZGEsIHBkc2MtJmd0O3VpZCk7CiAJcGRzY19kZWJ1Z2ZzX2RlbF9kZXYocGRzYyk7CkBAIC01MDUsNiAmIzQzOzUxMSw3IEBAIHN0YXRpYyB2b2lkIHBkc2NfcmVzZXRfcHJlcGFyZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIAlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOwogCWlmIChwY2lfaXNfZW5hYmxlZChwZGV2KSkKIAkJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwomIzQzOwlwZHNjX2RlZmVycmVkX2RtYV9mcmVlKHBkc2MpOwogfQogCiBzdGF0aWMgdm9pZCBwZHNjX3Jlc2V0X2RvbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Bkcy9wZHNfY29yZV9pZi5oIGIvaW5jbHVkZS9saW51eC9wZHMvcGRzX2NvcmVfaWYuaAppbmRleCAxN2E4N2MxYTU1ZDdjLi45MDFlMWU2MjhmODkwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3Bkcy9wZHNfY29yZV9pZi5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGRzL3Bkc19jb3JlX2lmLmgKQEAgLTQwLDYgJiM0Mzs0MCwxNCBAQCBlbnVtIHBkc19jb3JlX2NtZF9vcGNvZGUgewogCVBEU19DT1JFX0NNRF9GV19ET1dOTE9BRAk9IDQsCiAJUERTX0NPUkVfQ01EX0ZXX0NPTlRST0wJCT0gNSwKIAomIzQzOwlQRFNfQ09SRV9DTURfR0VUX0NPTVBPTkVOVF9JTkZPCT0gNiwKJiM0MzsJUERTX0NPUkVfQ01EX1NFTkRfUEtHX0RBVEEJPSA3LAomIzQzOwlQRFNfQ09SRV9DTURfU0VORF9DT01QT05FTlRfVEJMCT0gOCwKJiM0MzsJUERTX0NPUkVfQ01EX1NFTkRfQ09NUE9ORU5UCT0gOSwKJiM0MzsJUERTX0NPUkVfQ01EX0ZJTkFMSVpFX1VQREFURQk9IDEwLAomIzQzOwlQRFNfQ09SRV9DTURfTUFUQ0hfUkVDT1JEX0RFU0MJPSAxMSwKJiM0MzsJUERTX0NPUkVfQ01EX0hPU1RfTUVNCQk9IDEyLAomIzQzOwogCS8qIFNSL0lPViBjb21tYW5kcyAqLwogCVBEU19DT1JFX0NNRF9WRl9HRVRBVFRSCQk9IDYwLAogCVBEU19DT1JFX0NNRF9WRl9TRVRBVFRSCQk9IDYxLApAQCAtMTAwLDYgJiM0MzsxMDgsMTYgQEAgc3RydWN0IHBkc19jb3JlX2Rydl9pZGVudGl0eSB7CiAJY2hhciAgIGRyaXZlcl92ZXJfc3RyWzMyXTsKIH07CiAKJiM0MzsvKioKJiM0MzsgKiBlbnVtIHBkc19jb3JlX2Rldl9jYXBhYmlsaXR5IC0gRGV2aWNlIGNhcGFiaWxpdGllcwomIzQzOyAqIEBQRFNfQ09SRV9ERVZfQ0FQX1BMRE1fRldfVVBEQVRFOiBEZXZpY2Ugb25seSBzdXBwb3J0cyBGVyB1cGRhdGUgdmlhIFBMRE0KJiM0MzsgKiBAUERTX0NPUkVfREVWX0NBUF9IT1NUX01FTTogRGV2aWNlIHN1cHBvcnRzIGhvc3QgbWVtb3J5IGZvciBmdyB1c2UKJiM0MzsgKi8KJiM0MztlbnVtIHBkc19jb3JlX2Rldl9jYXBhYmlsaXR5IHsKJiM0MzsJUERTX0NPUkVfREVWX0NBUF9QTERNX0ZXX1VQREFURSA9IEJJVCgwKSwKJiM0MzsJUERTX0NPUkVfREVWX0NBUF9IT1NUX01FTSA9IEJJVCgxKSwKJiM0Mzt9OwomIzQzOwogI2RlZmluZSBQRFNfREVWX1RZUEVfTUFYCTE2CiAvKioKICAqIHN0cnVjdCBwZHNfY29yZV9kZXZfaWRlbnRpdHkgLSBEZXZpY2UgaWRlbnRpdHkgaW5mb3JtYXRpb24KQEAgLTExOSw2ICYjNDM7MTM3LDExIEBAIHN0cnVjdCBwZHNfY29yZV9kcnZfaWRlbnRpdHkgewogICoJCSAgICAgIHZhbHVlIGluIHVzZWNzIHRvIGRldmljZSB1bml0cyB1c2luZzoKICAqCQkgICAgICBkZXZpY2UgdW5pdHMgPSB1c2VjcyAqIG11bHQgLyBkaXYKICAqIEB2aWZfdHlwZXM6ICAgICAgICBIb3cgbWFueSBvZiBlYWNoIFZJRiBkZXZpY2UgdHlwZSBpcyBzdXBwb3J0ZWQKJiM0MzsgKiBAbWF4X2Z3X3Nsb3RzOiAgICAgTnVtYmVyIG9mIGZpcm13YXJlIGNvbXBvbmVudHMgcmVwb3J0ZWQgYnkgZGV2aWNlCiYjNDM7ICoJCSAgICAgIG9ubHkgc3VwcG9ydGVkIG9uIHZlcnNpb24gJmd0Oz0gUERTX0NPUkVfSURFTlRJVFlfVkVSU0lPTl8yCiYjNDM7ICogQHJzdmQyOgkgICAgICBXb3JkIGJvdW5kYXJ5IHBhZGRpbmcKJiM0MzsgKiBAY2FwYWJpbGl0aWVzOiAgICAgRGV2aWNlIGNhcGFiaWxpdGllcwomIzQzOyAqCQkgICAgICBvbmx5IHN1cHBvcnRlZCBvbiB2ZXJzaW9uICZndDs9IFBEU19DT1JFX0lERU5USVRZX1ZFUlNJT05fMgogICovCiBzdHJ1Y3QgcGRzX2NvcmVfZGV2X2lkZW50aXR5IHsKIAl1OCAgICAgdmVyc2lvbjsKQEAgLTEzMSw5ICYjNDM7MTU0LDEzIEBAIHN0cnVjdCBwZHNfY29yZV9kZXZfaWRlbnRpdHkgewogCV9fbGUzMiBpbnRyX2NvYWxfbXVsdDsKIAlfX2xlMzIgaW50cl9jb2FsX2RpdjsKIAlfX2xlMTYgdmlmX3R5cGVzW1BEU19ERVZfVFlQRV9NQVhdOwomIzQzOwlfX2xlMTYgbWF4X2Z3X3Nsb3RzOwomIzQzOwl1OCAgICAgcnN2ZDJbNl07CiYjNDM7CV9fbGU2NCBjYXBhYmlsaXRpZXM7CiB9OwogCiAjZGVmaW5lIFBEU19DT1JFX0lERU5USVRZX1ZFUlNJT05fMQkxCiYjNDM7I2RlZmluZSBQRFNfQ09SRV9JREVOVElUWV9WRVJTSU9OXzIJMgogCiAvKioKICAqIHN0cnVjdCBwZHNfY29yZV9kZXZfaWRlbnRpZnlfY21kIC0gRHJpdmVyL2RldmljZSBpZGVudGlmeSBjb21tYW5kCkBAIC0yNzUsMTEgJiM0MzszMDIsMjAgQEAgZW51bSBwZHNfY29yZV9md19jb250cm9sX29wZXIgewogCVBEU19DT1JFX0ZXX0dFVF9MSVNUICAgICAgICAgICAgICAgPSA3LAogfTsKIAomIzQzOy8qKgomIzQzOyAqIGVudW0gcGRzX2NvcmVfZndfc2xvdCAtIEZpcm13YXJlIHNsb3QgaWRlbnRpZmllcnMKJiM0MzsgKiBAUERTX0NPUkVfRldfU0xPVF9JTlZBTElEOiBMZXQgZmlybXdhcmUgc2VsZWN0IHNsb3QgYmFzZWQgb24gcGFja2FnZSBtZXRhZGF0YQomIzQzOyAqIEBQRFNfQ09SRV9GV19TTE9UX0E6ICAgICAgIFByaW1hcnkgZmlybXdhcmUgc2xvdCBBCiYjNDM7ICogQFBEU19DT1JFX0ZXX1NMT1RfQjogICAgICAgUHJpbWFyeSBmaXJtd2FyZSBzbG90IEIKJiM0MzsgKiBAUERTX0NPUkVfRldfU0xPVF9HT0xEOiAgICBHb2xkL3JlY292ZXJ5IGZpcm13YXJlIHNsb3QKJiM0MzsgKiBAUERTX0NPUkVfRldfU0xPVF9NQVg6ICAgICBTZW50aW5lbCB2YWx1ZSBpbmRpY2F0aW5nIG5vIHNsb3QgcmVzb2x2ZWQKJiM0MzsgKi8KIGVudW0gcGRzX2NvcmVfZndfc2xvdCB7CiAJUERTX0NPUkVfRldfU0xPVF9JTlZBTElEICAgID0gMCwKIAlQRFNfQ09SRV9GV19TTE9UX0EJICAgID0gMSwKIAlQRFNfQ09SRV9GV19TTE9UX0IgICAgICAgICAgPSAyLAogCVBEU19DT1JFX0ZXX1NMT1RfR09MRCAgICAgICA9IDMsCiYjNDM7CVBEU19DT1JFX0ZXX1NMT1RfTUFYICAgICAgICA9IDB4ZmYsCiB9OwogCiAvKioKQEAgLTQ0Niw2ICYjNDM7NDgyLDQyMyBAQCBzdHJ1Y3QgcGRzX2NvcmVfdmZfY3RybF9jb21wIHsKIAl1OAlzdGF0dXM7CiB9OwogCiYjNDM7LyoqCiYjNDM7ICogc3RydWN0IHBkc19jb3JlX3NlbmRfcGtnX2RhdGFfY21kIC0gU2VuZCBwYWNrYWdlIGRhdGEgY29tbWFuZAomIzQzOyAqIEBvcGNvZGU6IE9wY29kZSBQRFNfQ09SRV9DTURfU0VORF9QS0dfREFUQQomIzQzOyAqIEB2ZXI6IERyaXZlciYjMzk7cyBtYXggc3VwcG9ydCB2ZXJzaW9uIG9mIHRoaXMgY29tbWFuZAomIzQzOyAqIEB0b3RhbF9sZW46IFRvdGFsIGxlbmd0aCBvZiB0aGUgcGFja2FnZSBkYXRhCiYjNDM7ICogQG9mZnNldDogT2Zmc2V0IGluIHRoZSBwYWNrYWdlIGRhdGEsIG5vbi16ZXJvIGlmIG11bHRpcGxlIGNvbW1hbmRzIGFyZQomIzQzOyAqCSAgICBuZWVkZWQgZm9yIHNlbmRpbmcgdGhlIHBhY2thZ2UgZGF0YQomIzQzOyAqIEBkYXRhX2xlbjogTGVuZ3RoIG9mIGRhdGEgc3RvcmVkIGF0IGRhdGFfcGEKJiM0MzsgKiBAZGF0YV9wYTogRGF0YSBwaHlzaWNhbCBhZGRyZXNzIGZvciBETUEgdG8gZGV2aWNlCiYjNDM7ICoKJiM0MzsgKiBUaGUgcGFja2FnZSBkYXRhIG1heSBiZSB0b28gbGFyZ2UgdG8gc3RvcmUgaW4gYSBzaW5nbGUgYnVmZmVyLCBzbyBtdWx0aXBsZQomIzQzOyAqIFBEU19DT1JFX0NNRF9TRU5EX1BLR19EQVRBIGRldmNtZHMgbWF5IGJlIG5lZWRlZC4KJiM0MzsgKi8KJiM0MztzdHJ1Y3QgcGRzX2NvcmVfc2VuZF9wa2dfZGF0YV9jbWQgewomIzQzOwl1OCBvcGNvZGU7CiYjNDM7CXU4IHZlcjsKJiM0MzsJX19sZTE2IHRvdGFsX2xlbjsKJiM0MzsJX19sZTE2IG9mZnNldDsKJiM0MzsJX19sZTE2IGRhdGFfbGVuOwomIzQzOwlfX2xlNjQgZGF0YV9wYTsKJiM0Mzt9OwomIzQzOwomIzQzOy8qKgomIzQzOyAqIHN0cnVjdCBwZHNfY29yZV9zZW5kX3BrZ19kYXRhX2NvbXAgLSBTZW5kIHBhY2thZ2UgZGF0YSBjb21wbGV0aW9uCiYjNDM7ICogQHN0YXR1czogU3RhdHVzIG9mIHRoZSBjb21tYW5kIChlbnVtIHBkc19jb3JlX3N0YXR1c19jb2RlKQomIzQzOyAqIEB2ZXI6IERldmljZSYjMzk7cyBtYXggc3VwcG9ydGVkIHZlcnNpb24gb2YgdGhpcyBjb21tYW5kCiYjNDM7ICogQHJzdmQ6IFdvcmQgYm91bmRhcnkgcGFkZGluZwomIzQzOyAqLwomIzQzO3N0cnVjdCBwZHNfY29yZV9zZW5kX3BrZ19kYXRhX2NvbXAgewomIzQzOwl1OCBzdGF0dXM7CiYjNDM7CXU4IHZlcjsKJiM0MzsJdTggcnN2ZFsyXTsKJiM0Mzt9OwomIzQzOwomIzQzOy8qKgomIzQzOyAqIHN0cnVjdCBwZHNfY29yZV9jb21wb25lbnRfdGJsIC0gQ29tcG9uZW50IHRhYmxlIGRldGFpbHMKJiM0MzsgKiBAY29tcGFyaXNvbl9zdGFtcDogQ29tcGFyaXNvbiBzdGFtcCB1c2VkIGZvciBjb21wb25lbnQgdmVyc2lvbiBjaGVja3MKJiM0MzsgKiBAY2xhc3NpZmljYXRpb246IFZlbmRvciBzcGVjaWZpYyBjbGFzc2lmaWNhdGlvbiBpbmZvCiYjNDM7ICogQGlkZW50aWZpZXI6IENvbXBvbmVudCYjMzk7cyBJRAomIzQzOyAqIEB0cmFuc2Zlcl9mbGFnOiBQYXJ0IG9mIHRoZSBjb21wb25lbnQgdGFibGUgdGhpcyByZXF1ZXN0IHJlcHJlc2VudHMKJiM0MzsgKiBAdmVyc2lvbl9zdHJfdHlwZTogVGhlIHR5cGVzIG9mIHN0cmluZ3MgdXNlZAomIzQzOyAqIEB2ZXJzaW9uX3N0cl9sZW46IExlbmd0aCBvZiBAdmVyc2lvbl9zdHIKJiM0MzsgKiBAdmVyc2lvbl9zdHI6IENvbXBvbmVudCB2ZXJzaW9uIGluZm9ybWF0aW9uCiYjNDM7ICovCiYjNDM7c3RydWN0IHBkc19jb3JlX2NvbXBvbmVudF90YmwgewomIzQzOwlfX2xlMzIgY29tcGFyaXNvbl9zdGFtcDsKJiM0MzsJX19sZTE2IGNsYXNzaWZpY2F0aW9uOwomIzQzOwlfX2xlMTYgaWRlbnRpZmllcjsKJiM0MzsJdTggICAgIHRyYW5zZmVyX2ZsYWc7CiYjNDM7CXU4ICAgICB2ZXJzaW9uX3N0cl90eXBlOwomIzQzOwl1OCAgICAgdmVyc2lvbl9zdHJfbGVuOwomIzQzOwl1OCAgICAgdmVyc2lvbl9zdHJbXTsKJiM0Mzt9OwomIzQzOwomIzQzOy8qKgomIzQzOyAqIHN0cnVjdCBwZHNfY29yZV9zZW5kX2NvbXBvbmVudF90YmxfY21kIC0gU2VuZCBjb21wb25lbnQgdGFibGUgY29tbWFuZAomIzQzOyAqIEBvcGNvZGU6IE9wY29kZSBQRFNfQ09SRV9DTURfU0VORF9DT01QT05FTlRfVEJMCiYjNDM7ICogQHZlcjogRHJpdmVyJiMzOTtzIG1heCBzdXBwb3J0IHZlcnNpb24gb2YgdGhpcyBjb21tYW5kCiYjNDM7ICogQHNsb3RfaWQ6IGVudW0gcGRzX2NvcmVfZndfc2xvdAomIzQzOyAqIEByc3ZkOiBXb3JkIGJvdW5kYXJ5IHBhZGRpbmcKJiM0MzsgKgomIzQzOyAqIEV4cGVjdHMgdG8gZmluZCBjb21wb25lbnQgdGFibGUgaW5mbyAoc3RydWN0IHBkc19jb3JlX2NvbXBvbmVudF90YmwpCiYjNDM7ICogaW4gY21kX3JlZ3MtJmd0O2RhdGEuICBEcml2ZXIgc2hvdWxkIGtlZXAgdGhlIGRldmNtZCBpbnRlcmZhY2UgbG9ja2VkCiYjNDM7ICogd2hpbGUgcHJlcGFyaW5nIHRoZSBjb21wb25lbnQgdGFibGUgaW5mby4KJiM0MzsgKi8KJiM0MztzdHJ1Y3QgcGRzX2NvcmVfc2VuZF9jb21wb25lbnRfdGJsX2NtZCB7CiYjNDM7CXU4IG9wY29kZTsKJiM0MzsJdTggdmVyOwomIzQzOwl1OCBzbG90X2lkOwomIzQzOwl1OCByc3ZkOwomIzQzO307CiYjNDM7CiYjNDM7ZW51bSBwZHNfY29yZV9jb21wb25lbnRfcmVzcF9jb2RlIHsKJiM0MzsJUERTX0NPUkVfQ09NUE9ORU5UX1ZBTElEID0gMHgwLAomIzQzOwlQRFNfQ09SRV9DT01QT05FTlRfU1RBTVBfSURFTlRJQ0FMID0gMHgxLAomIzQzOwlQRFNfQ09SRV9DT01QT05FTlRfU1RBTVBfTE9XRVIgPSAweDIsCiYjNDM7CVBEU19DT1JFX0NPTVBPTkVOVF9TVEFNUF9PUl9WRVJTSU9OX0lOVkFMSUQgPSAweDMsCiYjNDM7CVBEU19DT1JFX0NPTVBPTkVOVF9DT05GTElDVCA9IDB4NCwKJiM0MzsJUERTX0NPUkVfQ09NUE9ORU5UX1BSRVJFUVNfTk9UX01FVCA9IDB4NSwKJiM0MzsJUERTX0NPUkVfQ09NUE9ORU5UX05PVF9TVVBQT1JURUQgPSAweDYsCiYjNDM7CVBEU19DT1JFX0NPTVBPTkVOVF9GV19UWVBFX0lOVkFMSUQgPSAweGQwLAomIzQzO307CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogc3RydWN0IHBkc19jb3JlX3NlbmRfY29tcG9uZW50X3RibF9jb21wIC0gU2VuZCBjb21wb25lbnQgdGFibGUgY29tcGxldGlvbgomIzQzOyAqIEBzdGF0dXM6IFN0YXR1cyBvZiB0aGUgY29tbWFuZCAoZW51bSBwZHNfY29yZV9zdGF0dXNfY29kZSkKJiM0MzsgKiBAdmVyOiBEZXZpY2UmIzM5O3MgbWF4IHN1cHBvcnRlZCB2ZXJzaW9uIG9mIHRoaXMgY29tbWFuZAomIzQzOyAqIEBjb21wbGV0aW9uX2NvZGU6IENvbXBvbmVudCBjb21wbGV0aW9uIGNvZGUKJiM0MzsgKiBAcmVzcG9uc2U6IENvbXBvbmVudCByZXNwb25zZQomIzQzOyAqIEByZXNwb25zZV9jb2RlOiBDb21wb25lbnQgcmVzcG9uc2UgY29kZQomIzQzOyAqIEBzbG90X2lkOiBBY3R1YWwgc2xvdF9pZCBvZiB0aGUgY29tcG9uZW50IChlbnVtIHBkc19jb3JlX2Z3X3Nsb3QpCiYjNDM7ICogQHJzdmQ6IFdvcmQgYm91bmRhcnkgcGFkZGluZwomIzQzOyAqLwomIzQzO3N0cnVjdCBwZHNfY29yZV9zZW5kX2NvbXBvbmVudF90YmxfY29tcCB7CiYjNDM7CXU4IHN0YXR1czsKJiM0MzsJdTggdmVyOwomIzQzOwl1OCBjb21wbGV0aW9uX2NvZGU7CiYjNDM7CXU4IHJlc3BvbnNlOwomIzQzOwl1OCByZXNwb25zZV9jb2RlOwomIzQzOwl1OCBzbG90X2lkOwomIzQzOwl1OCByc3ZkWzJdOwomIzQzO307CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogZW51bSBwZHNfY29yZV9zZW5kX2NvbXBvbmVudF9vcCAtIFBEU19DT1JFX0NNRF9TRU5EX0NPTVBPTkVOVCBvcGVyYXRpb24KJiM0MzsgKiBAUERTX0NPUkVfU0VORF9DT01QT05FTlRfU1RBUlQ6IEluaXRpYWwgb3BlcmF0aW9uIHRvIHN0YXJ0IHRyYW5zZmVyCiYjNDM7ICogQFBEU19DT1JFX1NFTkRfQ09NUE9ORU5UX1NUQVRVUzogU3Vic2VxdWVudCBjYWxscyB0byBjaGVjayBvbiBzdGF0dXMKJiM0MzsgKi8KJiM0MztlbnVtIHBkc19jb3JlX3NlbmRfY29tcG9uZW50X29wIHsKJiM0MzsJUERTX0NPUkVfU0VORF9DT01QT05FTlRfU1RBUlQgPSAwLAomIzQzOwlQRFNfQ09SRV9TRU5EX0NPTVBPTkVOVF9TVEFUVVMgPSAxLAomIzQzO307CiYjNDM7CiYjNDM7I2RlZmluZSBQRFNfQ09SRV9GV19DT01QT05FTlRfSURfSU5WQUxJRCAweEZGRkYKJiM0MzsvKioKJiM0MzsgKiBzdHJ1Y3QgcGRzX2NvcmVfZmxhc2hfY29tcG9uZW50IC0gQ29tcG9uZW50IGRldGFpbHMKJiM0MzsgKiBAY29tcGFyaXNvbl9zdGFtcDogQ29tcGFyaXNvbiBzdGFtcCB1c2VkIGZvciBjb21wb25lbnQgdmVyc2lvbiBjaGVja3MKJiM0MzsgKiBAaW1hZ2Vfc2l6ZTogQ29tcG9uZW50IGltYWdlIHNpemUKJiM0MzsgKiBAY2xhc3NpZmljYXRpb246IFZlbmRvciBzcGVjaWZpYyBjbGFzc2lmaWNhdGlvbiBpbmZvCiYjNDM7ICogQGlkZW50aWZpZXI6IENvbXBvbmVudCYjMzk7cyBJRAomIzQzOyAqIEBvcHRpb25zOiBDb21wb25lbnQgb3B0aW9ucwomIzQzOyAqIEByc3ZkOiBXb3JkIGJvdW5kYXJ5IHBhZGRpbmcKJiM0MzsgKiBAdmVyc2lvbl9zdHJfdHlwZTogVGhlIHR5cGVzIG9mIHN0cmluZ3MgdXNlZAomIzQzOyAqIEB2ZXJzaW9uX3N0cl9sZW46IExlbmd0aCBvZiBAdmVyc2lvbl9zdHIKJiM0MzsgKiBAdmVyc2lvbl9zdHI6IENvbXBvbmVudCB2ZXJzaW9uIGluZm9ybWF0aW9uCiYjNDM7ICovCiYjNDM7c3RydWN0IHBkc19jb3JlX2ZsYXNoX2NvbXBvbmVudCB7CiYjNDM7CV9fbGUzMiBjb21wYXJpc29uX3N0YW1wOwomIzQzOwlfX2xlMzIgaW1hZ2Vfc2l6ZTsKJiM0MzsJX19sZTE2IGNsYXNzaWZpY2F0aW9uOwomIzQzOwlfX2xlMTYgaWRlbnRpZmllcjsKJiM0MzsJX19sZTE2IG9wdGlvbnM7CiYjNDM7CXU4IHJzdmRbM107CiYjNDM7CXU4IHZlcnNpb25fc3RyX3R5cGU7CiYjNDM7CXU4IHZlcnNpb25fc3RyX2xlbjsKJiM0MzsJdTggdmVyc2lvbl9zdHJbXTsKJiM0Mzt9OwomIzQzOwomIzQzOy8qKgomIzQzOyAqIHN0cnVjdCBwZHNfY29yZV9zZW5kX2NvbXBvbmVudF9jbWQgLSBTZW5kIGNvbXBvbmVudCBjb21tYW5kCiYjNDM7ICogQG9wY29kZTogT3Bjb2RlIFBEU19DT1JFX0NNRF9TRU5EX0NPTVBPTkVOVAomIzQzOyAqIEB2ZXI6IERyaXZlciYjMzk7cyBtYXggc3VwcG9ydGVkIHZlcnNpb24gb2YgdGhpcyBjb21tYW5kCiYjNDM7ICogQHNsb3RfaWQ6IGVudW0gcGRzX2NvcmVfZndfc2xvdAomIzQzOyAqIEBvcGVyYXRpb246IGVudW0gcGRzX2NvcmVfc2VuZF9jb21wb25lbnRfb3AKJiM0MzsgKiBAb2Zmc2V0OiBPZmZzZXQgaW50byB0aGUgY29tcG9uZW50LCBub24temVybyBpZiBtdWx0aXBsZSBjb21tYW5kcwomIzQzOyAqCSAgICBhcmUgbmVlZGVkIGZvciBhIHNpbmdsZSBjb21wb25lbnQKJiM0MzsgKiBAZGF0YV9sZW46IExlbmd0aCBvZiB0aGlzIHBhcnQgb2YgdGhlIGNvbXBvbmVudCBzdG9yZWQgYXQgQGRhdGFfcGEKJiM0MzsgKiBAcnN2ZDogV29yZCBib3VuZGFyeSBwYWRkaW5nCiYjNDM7ICogQGRhdGFfcGE6IERNQSBhZGRyZXNzIG9mIHRoZSBjb21wb25lbnQKJiM0MzsgKgomIzQzOyAqIEEgY29tcG9uZW50IG1heSBiZSB0b28gbGFyZ2UgdG8gc3RvcmUgaW4gYSBzaW5nbGUgYnVmZmVyLCBzbyBtdWx0aXBsZQomIzQzOyAqIFBEU19DT1JFX0NNRF9TRU5EX0NPTVBPTkVOVCBkZXZjbWRzIG1heSBiZSBuZWVkZWQuCiYjNDM7ICoKJiM0MzsgKiBFeHBlY3RzIHRvIGZpbmQgZmxhc2ggY29tcG9uZW50IGluZm8gKHN0cnVjdCBwZHNfY29yZV9mbGFzaF9jb21wb25lbnQpCiYjNDM7ICogaW4gY21kX3JlZ3MtJmd0O2RhdGEuIERyaXZlciBzaG91bGQga2VlcCB0aGUgZGV2Y21kIGludGVyZmFjZSBsb2NrZWQKJiM0MzsgKiB3aGlsZSBwcmVwYXJpbmcgYW5kIHNlbmRpbmcgdGhlIGZsYXNoIGNvbXBvbmVudCBpbmZvLgomIzQzOyAqLwomIzQzO3N0cnVjdCBwZHNfY29yZV9zZW5kX2NvbXBvbmVudF9jbWQgewomIzQzOwl1OCBvcGNvZGU7CiYjNDM7CXU4IHZlcjsKJiM0MzsJdTggc2xvdF9pZDsKJiM0MzsJdTggb3BlcmF0aW9uOwomIzQzOwlfX2xlMzIgb2Zmc2V0OwomIzQzOwlfX2xlMzIgZGF0YV9sZW47CiYjNDM7CXU4IHJzdmRbNF07CiYjNDM7CV9fbGU2NCBkYXRhX3BhOwomIzQzO307CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogc3RydWN0IHBkc19jb3JlX3NlbmRfY29tcG9uZW50X2NvbXAgLSBTZW5kIGNvbXBvbmVudCBjb21wbGV0aW9uCiYjNDM7ICogQHN0YXR1czogU3RhdHVzIG9mIHRoZSBjb21tYW5kIChlbnVtIHBkc19jb3JlX3N0YXR1c19jb2RlKQomIzQzOyAqIEB2ZXI6IERldmljZSYjMzk7cyBtYXggc3VwcG9ydGVkIHZlcnNpb24gb2YgdGhpcyBjb21tYW5kCiYjNDM7ICogQGNvbXBsZXRpb25fY29kZTogQ29tcGxldGlvbiBjb2RlCiYjNDM7ICogQGNvbXBhdF9yZXNwb25zZTogQ29tcGF0aWJpbGl0eSByZXNwb25zZSAoMCA9IENvbXBvbmVudCBjYW4gYmUgdXBkYXRlZCkKJiM0MzsgKiBAY29tcGF0X3Jlc3BvbnNlX2NvZGU6IENvbXBhdGliaWxpdHkgcmVzcG9uc2UgY29kZQomIzQzOyAqIEByc3ZkOiBXb3JkIGJvdW5kYXJ5IHBhZGRpbmcKJiM0MzsgKi8KJiM0MztzdHJ1Y3QgcGRzX2NvcmVfc2VuZF9jb21wb25lbnRfY29tcCB7CiYjNDM7CXU4IHN0YXR1czsKJiM0MzsJdTggdmVyOwomIzQzOwl1OCBjb21wbGV0aW9uX2NvZGU7CiYjNDM7CXU4IGNvbXBhdF9yZXNwb25zZTsKJiM0MzsJdTggY29tcGF0X3Jlc3BvbnNlX2NvZGU7CiYjNDM7CXU4IHJzdmRbM107CiYjNDM7fTsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBlbnVtIHBkc19jb3JlX2Z3X2NvbXBvbmVudF90eXBlIC0gRmlybXdhcmUgY29tcG9uZW50IHR5cGUKJiM0MzsgKiBAUERTX0NPUkVfRldfVFlQRV9VTktOT1dOOiBVbmtub3duIGNvbXBvbmVudCB0eXBlCiYjNDM7ICogQFBEU19DT1JFX0ZXX1RZUEVfTUFJTjogTWFpbiBmaXJtd2FyZQomIzQzOyAqIEBQRFNfQ09SRV9GV19UWVBFX0JPT1Q6IEJvb3QgbG9hZGVyCiYjNDM7ICogQFBEU19DT1JFX0ZXX1RZUEVfQ1BMRDogQ1BMRCBmaXJtd2FyZQomIzQzOyAqIEBQRFNfQ09SRV9GV19UWVBFX1NFQ1VSRTogU2VjdXJlIGZpcm13YXJlCiYjNDM7ICogQFBEU19DT1JFX0ZXX1RZUEVfRlBHQTogRlBHQSBjb25maWd1cmF0aW9uCiYjNDM7ICogQFBEU19DT1JFX0ZXX1RZUEVfU1VDX01BSU46IFN5c3RlbSBVbml0IENvbnRyb2xsZXIgZmlybXdhcmUKJiM0MzsgKiBAUERTX0NPUkVfRldfVFlQRV9TVUNfQk9PVDogU3lzdGVtIFVuaXQgQ29udHJvbGxlciBib290bG9hZGVyCiYjNDM7ICogQFBEU19DT1JFX0ZXX1RZUEVfVUJPT1Q6IFUtQm9vdCBib290bG9hZGVyCiYjNDM7ICoKJiM0MzsgKiBHb2xkL3JlY292ZXJ5IHZhcmlhbnRzIGFyZSBpZGVudGlmaWVkIGJ5IHNsb3RfaWQgPT0gUERTX0NPUkVfRldfU0xPVF9HT0xECiYjNDM7ICogYW5kIHJlcG9ydGVkIHdpdGggYSAmIzM0Oy5nb2xkJiMzNDsgc3VmZml4IChlLmcuLCBmdy5nb2xkKS4KJiM0MzsgKi8KJiM0MztlbnVtIHBkc19jb3JlX2Z3X2NvbXBvbmVudF90eXBlIHsKJiM0MzsJUERTX0NPUkVfRldfVFlQRV9VTktOT1dOICAgPSAwLAomIzQzOwlQRFNfQ09SRV9GV19UWVBFX01BSU4gICAgICA9IDEsCiYjNDM7CVBEU19DT1JFX0ZXX1RZUEVfQk9PVCAgICAgID0gMiwKJiM0MzsJUERTX0NPUkVfRldfVFlQRV9DUExEICAgICAgPSAzLAomIzQzOwlQRFNfQ09SRV9GV19UWVBFX1NFQ1VSRSAgICA9IDQsCiYjNDM7CVBEU19DT1JFX0ZXX1RZUEVfRlBHQSAgICAgID0gNSwKJiM0MzsJUERTX0NPUkVfRldfVFlQRV9TVUNfTUFJTiAgPSA2LAomIzQzOwlQRFNfQ09SRV9GV19UWVBFX1NVQ19CT09UICA9IDcsCiYjNDM7CVBEU19DT1JFX0ZXX1RZUEVfVUJPT1QgICAgID0gOCwKJiM0Mzt9OwomIzQzOwomIzQzOy8qKgomIzQzOyAqIGVudW0gcGRzX2NvcmVfY29tcG9uZW50X2luZm9fZmxhZ3MgLSBDb21wb25lbnQgaW5mbyBmbGFncwomIzQzOyAqIEBQRFNfQ09SRV9GV19DT01QT05FTlRfSU5GT19GX1JVTk5JTkc6IENvbXBvbmVudCBpcyBjdXJyZW50bHkgcnVubmluZwomIzQzOyAqIEBQRFNfQ09SRV9GV19DT01QT05FTlRfSU5GT19GX1NUQVJUVVA6IENvbXBvbmVudCB2ZXJzaW9uIG9uIG5leHQgRlcgYm9vdAomIzQzOyAqIEBQRFNfQ09SRV9GV19DT01QT05FTlRfSU5GT19GX0ZJWEVEOiBDb21wb25lbnQgaXMgZml4ZWQgYW5kIGNhbm5vdCBiZSB1cGRhdGVkCiYjNDM7ICogQFBEU19DT1JFX0ZXX0NPTVBPTkVOVF9JTkZPX0ZfVVBEQVRFX0JZX05BTUU6IENvbXBvbmVudCBjYW4gYmUgdXBkYXRlZAomIzQzOyAqCWJ5IG5hbWUKJiM0MzsgKi8KJiM0MztlbnVtIHBkc19jb3JlX2NvbXBvbmVudF9pbmZvX2ZsYWdzIHsKJiM0MzsJUERTX0NPUkVfRldfQ09NUE9ORU5UX0lORk9fRl9SVU5OSU5HID0gQklUKDApLAomIzQzOwlQRFNfQ09SRV9GV19DT01QT05FTlRfSU5GT19GX1NUQVJUVVAgPSBCSVQoMSksCiYjNDM7CVBEU19DT1JFX0ZXX0NPTVBPTkVOVF9JTkZPX0ZfRklYRUQgPSBCSVQoMiksCiYjNDM7CVBEU19DT1JFX0ZXX0NPTVBPTkVOVF9JTkZPX0ZfVVBEQVRFX0JZX05BTUUgPSBCSVQoMyksCiYjNDM7fTsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBzdHJ1Y3QgcGRzX2NvcmVfZndfY29tcG9uZW50X2luZm8gLSBHRVRfQ09NUE9ORU5UX0lORk8gZW50cnkKJiM0MzsgKiBAbmFtZTogQ29tcG9uZW50JiMzOTtzIG5hbWUKJiM0MzsgKiBAY29tcG9uZW50X3R5cGU6IGVudW0gcGRzX2NvcmVfZndfY29tcG9uZW50X3R5cGUKJiM0MzsgKiBAcnN2ZDogV29yZCBib3VuZGFyeSBwYWRkaW5nCiYjNDM7ICogQGZsYWdzOiBlbnVtIHBkc19jb3JlX2NvbXBvbmVudF9pbmZvX2ZsYWdzCiYjNDM7ICogQGlkZW50aWZpZXI6IENvbXBvbmVudCYjMzk7cyBpZGVudGlmaWVyCiYjNDM7ICogQHNsb3RfaWQ6IENvbXBvbmVudCYjMzk7cyBzbG90IGlkZW50aWZpZXIKJiM0MzsgKiBAdmVyc2lvbjogQ29tcG9uZW50JiMzOTtzIHZlcnNpb24KJiM0MzsgKi8KJiM0MztzdHJ1Y3QgcGRzX2NvcmVfZndfY29tcG9uZW50X2luZm8gewomIzQzOyNkZWZpbmUgUERTX0NPUkVfRldfQ09NUE9ORU5UX05BTUVfQlVGTEVOIDI0CiYjNDM7CWNoYXIgbmFtZVtQRFNfQ09SRV9GV19DT01QT05FTlRfTkFNRV9CVUZMRU5dOwomIzQzOwl1OCBjb21wb25lbnRfdHlwZTsKJiM0MzsJdTggcnN2ZFszXTsKJiM0MzsJX19sZTE2IGZsYWdzOwomIzQzOwl1OCBpZGVudGlmaWVyOwomIzQzOwl1OCBzbG90X2lkOwomIzQzOyNkZWZpbmUgUERTX0NPUkVfRldfQ09NUE9ORU5UX1ZFUl9CVUZMRU4gMzIKJiM0MzsJY2hhciB2ZXJzaW9uW1BEU19DT1JFX0ZXX0NPTVBPTkVOVF9WRVJfQlVGTEVOXTsKJiM0Mzt9OwomIzQzOwomIzQzOyNkZWZpbmUgUERTX0NPUkVfRldfQ09NUE9ORU5UX0xJU1RfTEVOCSgoUERTX1BBR0VfU0laRSAtIDgpIC8gXAomIzQzOwkJc2l6ZW9mKHN0cnVjdCBwZHNfY29yZV9md19jb21wb25lbnRfaW5mbykpCiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogc3RydWN0IHBkc19jb3JlX2NvbXBvbmVudF9saXN0X2luZm8gLSBHRVRfQ09NUE9ORU5UX0lORk8gY29tcGxldGlvbiBkYXRhCiYjNDM7ICogQG51bV9jb21wb25lbnRzOiBOdW1iZXIgb2YgdmFsaWQgY29tcG9uZW50cwomIzQzOyAqIEByc3ZkOiBXb3JkIGJvdW5kYXJ5IHBhZGRpbmcKJiM0MzsgKiBAaW5mbzogTGlzdCBvZiB2YWxpZCBjb21wb25lbnRzCiYjNDM7ICovCiYjNDM7c3RydWN0IHBkc19jb3JlX2NvbXBvbmVudF9saXN0X2luZm8gewomIzQzOwl1OCBudW1fY29tcG9uZW50czsKJiM0MzsJdTggcnN2ZFs3XTsKJiM0MzsJc3RydWN0IHBkc19jb3JlX2Z3X2NvbXBvbmVudF9pbmZvIGluZm9bUERTX0NPUkVfRldfQ09NUE9ORU5UX0xJU1RfTEVOXTsKJiM0Mzt9OwomIzQzOwomIzQzOy8qKgomIzQzOyAqIHN0cnVjdCBwZHNfY29yZV9nZXRfY29tcG9uZW50X2luZm9fY21kIC0gR0VUX0NPTVBPTkVOVF9JTkZPIGNvbW1hbmQKJiM0MzsgKiBAb3Bjb2RlOiBQRFNfQ09SRV9DTURfR0VUX0NPTVBPTkVOVF9JTkZPCiYjNDM7ICogQHZlcjogRHJpdmVyJiMzOTtzIG1heCBzdXBwb3J0ZWQgdmVyc2lvbiBvZiB0aGlzIGNvbW1hbmQKJiM0MzsgKiBAZGF0YV9sZW46IExlbmd0aCBvZiBkYXRhIGF0IGRhdGFfcGEKJiM0MzsgKiBAcnN2ZDogV29yZCBib3VuZGFyeSBwYWRkaW5nCiYjNDM7ICogQGRhdGFfcGE6IERNQSBhZGRyZXNzIG9mIGRhdGEKJiM0MzsgKgomIzQzOyAqIEZXIHBvcHVsYXRlcyBzdHJ1Y3QgcGRzX2NvcmVfY29tcG9uZW50X2xpc3RfaW5mbyBwb2ludGVkIHRvIGJ5IEBkYXRhX3BhCiYjNDM7ICovCiYjNDM7c3RydWN0IHBkc19jb3JlX2dldF9jb21wb25lbnRfaW5mb19jbWQgewomIzQzOwl1OCBvcGNvZGU7CiYjNDM7CXU4IHZlcjsKJiM0MzsJX19sZTE2IGRhdGFfbGVuOwomIzQzOwl1OCByc3ZkWzRdOwomIzQzOwlfX2xlNjQgZGF0YV9wYTsKJiM0Mzt9OwomIzQzOwomIzQzOy8qKgomIzQzOyAqIHN0cnVjdCBwZHNfY29yZV9nZXRfY29tcG9uZW50X2luZm9fY29tcCAtIEdFVF9DT01QT05FTlRfSU5GTyBjb21wbGV0aW9uCiYjNDM7ICogQHN0YXR1czogZW51bSBwZHNfY29yZV9zdGF0dXNfY29kZQomIzQzOyAqIEB2ZXI6IERldmljZSYjMzk7cyBtYXggc3VwcG9ydGVkIHZlcnNpb24gb2YgdGhpcyBjb21tYW5kCiYjNDM7ICogQHJzdmQ6IFdvcmQgYm91bmRhcnkgcGFkZGluZwomIzQzOyAqLwomIzQzO3N0cnVjdCBwZHNfY29yZV9nZXRfY29tcG9uZW50X2luZm9fY29tcCB7CiYjNDM7CXU4IHN0YXR1czsKJiM0MzsJdTggdmVyOwomIzQzOwl1OCByc3ZkWzJdOwomIzQzO307CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogc3RydWN0IHBkc19jb3JlX2ZpbmFsaXplX3VwZGF0ZV9jbWQgLSBGSU5BTElaRV9VUERBVEUgY29tbWFuZAomIzQzOyAqIEBvcGNvZGU6IFBEU19DT1JFX0NNRF9GSU5BTElaRV9VUERBVEUKJiM0MzsgKiBAdmVyOiBEcml2ZXImIzM5O3MgbWF4IHN1cHBvcnQgdmVyc2lvbiBvZiB0aGlzIGNvbW1hbmQKJiM0MzsgKiBAcnN2ZDogV29yZCBib3VuZGFyeSBwYWRkaW5nCiYjNDM7ICoKJiM0MzsgKiBEcml2ZXIgc2VuZHMgYXQgdGhlIGVuZCBvZiB1cGRhdGluZyBhbGwgY29tcG9uZW50cyB0byBmaW5hbGl6ZSB0aGUgdXBkYXRlCiYjNDM7ICovCiYjNDM7c3RydWN0IHBkc19jb3JlX2ZpbmFsaXplX3VwZGF0ZV9jbWQgewomIzQzOwl1OCBvcGNvZGU7CiYjNDM7CXU4IHZlcjsKJiM0MzsJdTggcnN2ZFsyXTsKJiM0Mzt9OwomIzQzOwomIzQzOy8qKgomIzQzOyAqIHN0cnVjdCBwZHNfY29yZV9maW5hbGl6ZV91cGRhdGVfY29tcCAtIEZJTkFMSVpFX1VQREFURSBjb21wbGV0aW9uCiYjNDM7ICogQHN0YXR1czogZW51bSBwZHNfY29yZV9zdGF0dXNfY29kZQomIzQzOyAqIEB2ZXI6IERldmljZSYjMzk7cyBtYXggc3VwcG9ydGVkIHZlcnNpb24gb2YgdGhpcyBjb21tYW5kCiYjNDM7ICogQHJzdmQ6IFdvcmQgYm91bmRhcnkgcGFkZGluZwomIzQzOyAqLwomIzQzO3N0cnVjdCBwZHNfY29yZV9maW5hbGl6ZV91cGRhdGVfY29tcCB7CiYjNDM7CXU4IHN0YXR1czsKJiM0MzsJdTggdmVyOwomIzQzOwl1OCByc3ZkWzJdOwomIzQzO307CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogc3RydWN0IHBkc19jb3JlX21hdGNoX3JlY29yZF9kZXNjX2NtZCAtIE1BVENIX1JFQ09SRF9ERVNDIGNvbW1hbmQKJiM0MzsgKiBAb3Bjb2RlOiBQRFNfQ09SRV9DTURfTUFUQ0hfUkVDT1JEX0RFU0MKJiM0MzsgKiBAdmVyOiBEcml2ZXImIzM5O3MgbWF4IHN1cHBvcnRlZCB2ZXJzaW9uIG9mIHRoaXMgY29tbWFuZAomIzQzOyAqIEB0eXBlOiBQTERNIERlc2NyaXB0b3IgSWRlbnRpZmllciBUeXBlCiYjNDM7ICogQHNpemU6IExlbmd0aCBvZiB0aGUgRGVzY3JpcHRvciBJZGVudGlmaWVyIFZhbHVlCiYjNDM7ICogQHJzdmQ6IFdvcmQgYm91bmRhcnkgcGFkZGluZwomIzQzOyAqCiYjNDM7ICogRXhwZWN0cyB0byBmaW5kIHRoZSBEZXNjcmlwdG9yIElkZW50aWZpZXIgRGF0YSBpbiBjbWRfcmVncy0mZ3Q7ZGF0YS4gRHJpdmVyCiYjNDM7ICogc2hvdWxkIGtlZXAgdGhlIGRldmNtZCBpbnRlcmZhY2UgbG9ja2VkIHdoaWxlIHByZXBhcmluZyBhbmQgc2VuZGluZyB0aGlzCiYjNDM7ICogY29tbWFuZC4KJiM0MzsgKi8KJiM0MztzdHJ1Y3QgcGRzX2NvcmVfbWF0Y2hfcmVjb3JkX2Rlc2NfY21kIHsKJiM0MzsJdTggb3Bjb2RlOwomIzQzOwl1OCB2ZXI7CiYjNDM7CV9fbGUxNiB0eXBlOwomIzQzOwlfX2xlMTYgc2l6ZTsKJiM0MzsJdTggcnN2ZFsyXTsKJiM0Mzt9OwomIzQzOwomIzQzOy8qKgomIzQzOyAqIHN0cnVjdCBwZHNfY29yZV9tYXRjaF9yZWNvcmRfZGVzY19jb21wIC0gTUFUQ0hfUkVDT1JEX0RFU0MgY29tcGxldGlvbgomIzQzOyAqIEBzdGF0dXM6IGVudW0gcGRzX2NvcmVfc3RhdHVzX2NvZGUKJiM0MzsgKiBAdmVyOiBEZXZpY2UmIzM5O3MgbWF4IHN1cHBvcnRlZCB2ZXJzaW9uIG9mIHRoaXMgY29tbWFuZAomIzQzOyAqIEBtYXRjaDogV2hldGhlciBvciBub3QgdGhlIFJlY29yZCBEZXNjcmlwdG9yIG1hdGNoZXMgdGhlIGRldmljZQomIzQzOyAqIEByc3ZkOiBXb3JkIGJvdW5kYXJ5IHBhZGRpbmcKJiM0MzsgKgomIzQzOyAqIFdoZW4gc3RhdHVzIGlzIFBEU19SQ19TVUNDRVNTLCB0aGVuIEBtYXRjaCBpcyB2YWxpZCwgb3RoZXJ3aXNlIGl0JiMzOTtzCiYjNDM7ICogdW5kZWZpbmVkLgomIzQzOyAqLwomIzQzO3N0cnVjdCBwZHNfY29yZV9tYXRjaF9yZWNvcmRfZGVzY19jb21wIHsKJiM0MzsJdTggc3RhdHVzOwomIzQzOwl1OCB2ZXI7CiYjNDM7CXU4IG1hdGNoOwomIzQzOwl1OCByc3ZkOwomIzQzO307CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogZW51bSBwZHNfY29yZV9ob3N0X21lbV9vcGVyIC0gSE9TVF9NRU0gc3ViLW9wZXJhdGlvbnMKJiM0MzsgKiBAUERTX0NPUkVfSE9TVF9NRU1fR0VUX0NPVU5UOiBRdWVyeSBudW1iZXIgb2YgbWVtb3J5IHJlcXVlc3RzCiYjNDM7ICogQFBEU19DT1JFX0hPU1RfTUVNX1FVRVJZOiAgICAgUXVlcnkgZGV0YWlscyBvZiBhIG1lbW9yeSByZXF1ZXN0CiYjNDM7ICogQFBEU19DT1JFX0hPU1RfTUVNX0FERDogICAgICAgUHJvdmlkZSBhbGxvY2F0ZWQgbWVtb3J5IHRvIGZpcm13YXJlCiYjNDM7ICogQFBEU19DT1JFX0hPU1RfTUVNX0RFTDogICAgICAgTm90aWZ5IGZpcm13YXJlIG9mIG1lbW9yeSBkZWFsbG9jYXRpb24KJiM0MzsgKi8KJiM0MztlbnVtIHBkc19jb3JlX2hvc3RfbWVtX29wZXIgewomIzQzOwlQRFNfQ09SRV9IT1NUX01FTV9HRVRfQ09VTlQJPSAwLAomIzQzOwlQRFNfQ09SRV9IT1NUX01FTV9RVUVSWQkJPSAxLAomIzQzOwlQRFNfQ09SRV9IT1NUX01FTV9BREQJCT0gMiwKJiM0MzsJUERTX0NPUkVfSE9TVF9NRU1fREVMCQk9IDMsCiYjNDM7fTsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBzdHJ1Y3QgcGRzX2NvcmVfaG9zdF9tZW1fY21kIC0gSE9TVF9NRU0gY29tbWFuZAomIzQzOyAqIEBvcGNvZGU6ICAgICBPcGNvZGUgUERTX0NPUkVfQ01EX0hPU1RfTUVNCiYjNDM7ICogQG9wZXI6ICAgICAgIE9wZXJhdGlvbiAoZW51bSBwZHNfY29yZV9ob3N0X21lbV9vcGVyKQomIzQzOyAqIEBpbmRleDogICAgICBNZW1vcnkgcmVxdWVzdCBpbmRleCAoR0VUX0NPVU5UOiBtYXhfY291bnQsIFFVRVJZOiBpbmRleCkKJiM0MzsgKiBAdGFnOiAgICAgICAgVGFnIGZvciB0aGlzIG1lbW9yeSByZXF1ZXN0IChBREQvREVMKQomIzQzOyAqIEByZWFzb246ICAgICBSZWFzb24gZm9yIGRlbGV0aW9uIChERUwgb25seSkKJiM0MzsgKiBAcnN2ZDogICAgICAgUmVzZXJ2ZWQKJiM0MzsgKiBAbWF4X2NvbnRpZzogTWF4aW11bSBjb250aWd1b3VzIG1lbW9yeSBzaXplIChHRVRfQ09VTlQgb25seSkKJiM0MzsgKiBAc2l6ZTogICAgICAgU2l6ZSBvZiBtZW1vcnkgaW4gYnl0ZXMgKEFERCBvbmx5KQomIzQzOyAqIEBidWZfcGE6ICAgICBETUEgYWRkcmVzcyBvZiBtZW1vcnkgKEFERCBvbmx5KQomIzQzOyAqCiYjNDM7ICogVW5pZmllZCBjb21tYW5kIGZvciBhbGwgaG9zdCBtZW1vcnkgb3BlcmF0aW9ucy4gRmllbGRzIGFyZSByZXVzZWQKJiM0MzsgKiBhY3Jvc3Mgb3BlcmF0aW9ucyB0byBtaW5pbWl6ZSBvcGNvZGUgc3BhY2UgdXNhZ2UuCiYjNDM7ICovCiYjNDM7c3RydWN0IHBkc19jb3JlX2hvc3RfbWVtX2NtZCB7CiYjNDM7CXU4ICAgICBvcGNvZGU7CiYjNDM7CXU4ICAgICBvcGVyOwomIzQzOwlfX2xlMTYgaW5kZXg7CiYjNDM7CV9fbGUxNiB0YWc7CiYjNDM7CXU4ICAgICByZWFzb247CiYjNDM7CXU4ICAgICByc3ZkOwomIzQzOwlfX2xlMzIgbWF4X2NvbnRpZzsKJiM0MzsJX19sZTMyIHNpemU7CiYjNDM7CV9fbGU2NCBidWZfcGE7CiYjNDM7fTsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBzdHJ1Y3QgcGRzX2NvcmVfaG9zdF9tZW1fY29tcCAtIEhPU1RfTUVNIGNvbXBsZXRpb24KJiM0MzsgKiBAc3RhdHVzOiAgICAgICBTdGF0dXMgb2YgdGhlIGNvbW1hbmQgKGVudW0gcGRzX2NvcmVfc3RhdHVzX2NvZGUpCiYjNDM7ICogQG9wZXI6ICAgICAgICAgT3BlcmF0aW9uIHRoYXQgd2FzIHBlcmZvcm1lZAomIzQzOyAqIEBjb3VudDogICAgICAgIE51bWJlciBvZiBtZW1vcnkgcmVxdWVzdHMgKEdFVF9DT1VOVCkKJiM0MzsgKiBAc2l6ZTogICAgICAgICBTaXplIG9mIG1lbW9yeSByZXF1ZXN0IGluIGJ5dGVzIChRVUVSWSkKJiM0MzsgKiBAdGFnOiAgICAgICAgICBUYWcgZm9yIHRoaXMgbWVtb3J5IHJlcXVlc3QgKFFVRVJZL0RFTCkKJiM0MzsgKiBAcnN2ZDogICAgICAgICBSZXNlcnZlZAomIzQzOyAqLwomIzQzO3N0cnVjdCBwZHNfY29yZV9ob3N0X21lbV9jb21wIHsKJiM0MzsJdTggICAgIHN0YXR1czsKJiM0MzsJdTggICAgIG9wZXI7CiYjNDM7CV9fbGUxNiBjb3VudDsKJiM0MzsJX19sZTMyIHNpemU7CiYjNDM7CV9fbGUxNiB0YWc7CiYjNDM7CXU4ICAgICByc3ZkWzZdOwomIzQzO307CiYjNDM7CiAvKgogICogdW5pb24gcGRzX2NvcmVfZGV2X2NtZCAtIE92ZXJsYXkgb2YgY29yZSBkZXZpY2UgY29tbWFuZCBzdHJ1Y3R1cmVzCiAgKi8KQEAgLTQ2Miw2ICYjNDM7OTE1LDE0IEBAIHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgewogCXN0cnVjdCBwZHNfY29yZV92Zl9zZXRhdHRyX2NtZCAgIHZmX3NldGF0dHI7CiAJc3RydWN0IHBkc19jb3JlX3ZmX2dldGF0dHJfY21kICAgdmZfZ2V0YXR0cjsKIAlzdHJ1Y3QgcGRzX2NvcmVfdmZfY3RybF9jbWQgICAgICB2Zl9jdHJsOwomIzQzOwomIzQzOwlzdHJ1Y3QgcGRzX2NvcmVfZ2V0X2NvbXBvbmVudF9pbmZvX2NtZCBnZXRfY29tcG9uZW50X2luZm87CiYjNDM7CXN0cnVjdCBwZHNfY29yZV9zZW5kX3BrZ19kYXRhX2NtZCAgICAgIHNlbmRfcGtnX2RhdGE7CiYjNDM7CXN0cnVjdCBwZHNfY29yZV9zZW5kX2NvbXBvbmVudF90YmxfY21kIHNlbmRfY29tcG9uZW50X3RibDsKJiM0MzsJc3RydWN0IHBkc19jb3JlX3NlbmRfY29tcG9uZW50X2NtZCAgICAgc2VuZF9jb21wb25lbnQ7CiYjNDM7CXN0cnVjdCBwZHNfY29yZV9maW5hbGl6ZV91cGRhdGVfY21kICAgIGZpbmFsaXplX3VwZGF0ZTsKJiM0MzsJc3RydWN0IHBkc19jb3JlX21hdGNoX3JlY29yZF9kZXNjX2NtZCAgbWF0Y2hfcmVjb3JkX2Rlc2M7CiYjNDM7CXN0cnVjdCBwZHNfY29yZV9ob3N0X21lbV9jbWQgICAgICAgICAgIGhvc3RfbWVtOwogfTsKIAogLyoKQEAgLTQ4MCw2ICYjNDM7OTQxLDE0IEBAIHVuaW9uIHBkc19jb3JlX2Rldl9jb21wIHsKIAlzdHJ1Y3QgcGRzX2NvcmVfdmZfc2V0YXR0cl9jb21wICAgdmZfc2V0YXR0cjsKIAlzdHJ1Y3QgcGRzX2NvcmVfdmZfZ2V0YXR0cl9jb21wICAgdmZfZ2V0YXR0cjsKIAlzdHJ1Y3QgcGRzX2NvcmVfdmZfY3RybF9jb21wICAgICAgdmZfY3RybDsKJiM0MzsKJiM0MzsJc3RydWN0IHBkc19jb3JlX2dldF9jb21wb25lbnRfaW5mb19jb21wIGdldF9jb21wb25lbnRfaW5mbzsKJiM0MzsJc3RydWN0IHBkc19jb3JlX3NlbmRfcGtnX2RhdGFfY29tcCAgICAgIHNlbmRfcGtnX2RhdGE7CiYjNDM7CXN0cnVjdCBwZHNfY29yZV9zZW5kX2NvbXBvbmVudF90YmxfY29tcCBzZW5kX2NvbXBvbmVudF90Ymw7CiYjNDM7CXN0cnVjdCBwZHNfY29yZV9zZW5kX2NvbXBvbmVudF9jb21wICAgICBzZW5kX2NvbXBvbmVudDsKJiM0MzsJc3RydWN0IHBkc19jb3JlX2ZpbmFsaXplX3VwZGF0ZV9jb21wICAgIGZpbmFsaXplX3VwZGF0ZTsKJiM0MzsJc3RydWN0IHBkc19jb3JlX21hdGNoX3JlY29yZF9kZXNjX2NvbXAgIG1hdGNoX3JlY29yZF9kZXNjOwomIzQzOwlzdHJ1Y3QgcGRzX2NvcmVfaG9zdF9tZW1fY29tcCAgICAgICAgICAgaG9zdF9tZW07CiB9OwogCiAvKioKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTA6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzEwNjIKCQkJCQkJCW91dHB1dDogNzYKCQkJCQkJCXRob3VnaHRzOiA1NjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUGF0Y2ggQW5hbHlzaXM6IFBMRE0gRmlybXdhcmUgVXBkYXRlIGZvciBBTUQvUGVuc2FuZG8gQ29yZSBTbWFydE5JQyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCB0aGF0IGFkZHMgUExETSBmaXJtd2FyZSB1cGRhdGUgY2FwYWJpbGl0aWVzIHRvIHRoZSBBTUQvUGVuc2FuZG8gQ29yZSBkZXZpY2UgZmFtaWx5LCBzcGVjaWZpY2FsbHkgdW5kZXIgdGhlIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvYCBkaXJlY3RvcnkuIEl0JiMzOTtzIGFkZGluZyBzdXBwb3J0IGZvciB0aGluZ3MgbGlrZSBnZXR0aW5nIGNvbXBvbmVudCBpbmZvLCBzZW5kaW5nIHBhY2thZ2UgZGF0YSwgc2VuZGluZyBjb21wb25lbnQgdGFibGVzLCBhbmQgZmluYWxpemluZyB0aGUgdXBkYXRlIOKAkyBhbGwgdGhlIFBMRE0tcmVsYXRlZCBkZXZjbWRzLiBQbHVzLCBpdCYjMzk7cyBzZXR0aW5nIHVwIGhvc3QgbWVtb3J5IGFsbG9jYXRpb24gZm9yIHRoZSBmaXJtd2FyZSBpdHNlbGYuCgpCdXQsIGhvbGQgb24gYSBzZWNvbmQuLi4gbGV0IG1lIHJlLXJlYWQgdGhlIHByb21wdC4gSXQmIzM5O3MgbG9va2luZyBmb3IgY29uZGl0aW9ucyB0byAqbm90KiBmdXp6LiBBaCwgdGhlcmUgaXQgaXMhICYjMzQ7Q29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiYjMzQ7IEJpbmdvLgoKVGhlIHByb21wdCAqc3BlY2lmaWNhbGx5KiBuYW1lcyBgcGRzX2NvcmVgIGFzIGFuIGV4YW1wbGUgb2YgYSBTbWFydE5JQyBkcml2ZXIgdGhhdCYjMzk7cyBvZmYtbGltaXRzIGJlY2F1c2UgaXQgcmVxdWlyZXMgdGhhdCBzcGVjaWZpYyBoYXJkd2FyZSBzZXR1cC4gSSBkb24mIzM5O3QgbmVlZCB0byBvdmVydGhpbmsgdGhpcy4KCkp1c3QgdG8gYmUgY2VydGFpbiwgSSBxdWlja2x5IGRvdWJsZS1jaGVja2VkIHdoZXJlIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmc6IGBEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvYW1kL3Bkc19jb3JlLnJzdGAsIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvS2NvbmZpZ2AsIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvKmAsIGBpbmNsdWRlL2xpbnV4L3Bkcy9wZHNfY29yZV9pZi5oYC4gWWVwLCBpdCYjMzk7cyBhbGwgZGVlcGx5IGludGVydHdpbmVkIHdpdGggdGhhdCB2ZW5kb3Itc3BlY2lmaWMgYHBkc19jb3JlYCBkcml2ZXIuIE5vIGNoYW5jZSBvZiBnZXR0aW5nIHRoaXMgcGF0Y2ggdG8gcnVuIHdpdGhvdXQgdGhlIHBoeXNpY2FsIGhhcmR3YXJlLCBzbyB0aGF0JiMzOTtzIGEgKm5vKiB0byBmdXp6aW5nLgoKTXkgY29uY2x1c2lvbiBpczogdGhpcyBwYXRjaCBpcyB1bnJlYWNoYWJsZSBpbiBhIHN0YW5kYXJkIGZ1enppbmcgZW52aXJvbm1lbnQgZHVlIHRvIGl0cyBkZXBlbmRlbmNlIG9uIHRoZSBBTUQvUGVuc2FuZG8gQ29yZSBTbWFydE5JQyBhbmQgdGhlcmVmb3JlIEkgbmVlZCB0byBzZXQgYFdvcnRoRnV6emluZz1mYWxzZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTA6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQU1EL1BlbnNhbmRvIENvcmUgU21hcnROSUMgZHJpdmVyIChwZHNfY29yZSksIHdoaWNoIHJlcXVpcmVzIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIFRoZXJlZm9yZSwgdGhlIGNvZGUgaXMgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQU1EL1BlbnNhbmRvIENvcmUgU21hcnROSUMgZHJpdmVyIChwZHNfY29yZSksIHdoaWNoIHJlcXVpcmVzIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIFRoZXJlZm9yZSwgdGhlIGNvZGUgaXMgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMzBUMTA6MDM6NDUuNjkzMjg4MDc3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTk1NTYzMDU2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEFNRC9QZW5zYW5kbyBDb3JlIFNtYXJ0TklDIGRyaXZlciAocGRzX2NvcmUpLCB3aGljaCByZXF1aXJlcyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBUaGVyZWZvcmUsIHRoZSBjb2RlIGlzIHVucmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTA6MDM6NDUuNjkzMjkzNDE3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDA3NzY2NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA4ZmQ3ZGY5MzU4MzE2NDQ4NThmZTBkZWIzMzljNzg2ZDQ3YTdkODU3XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgSnVsIDMwIDEwOjAzOjQ0IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC9hbWQvcGRzX2NvcmUucnN0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L2FtZC9wZHNfY29yZS5yc3RcXG5pbmRleCA5ZThhMTZjNDQxMDI5Li40OTQ4N2EzNWMxNjMyIDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC9hbWQvcGRzX2NvcmUucnN0XFxuKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L2FtZC9wZHNfY29yZS5yc3RcXG5AQCAtMTAyLDYgKzEwMiw5NSBAQCBjdXJyZW50bHkgaW4gdXNlLCBhbmQgdGhhdCBiYW5rIHdpbGwgdXNlZCBmb3IgdGhlIG5leHQgYm9vdDo6XFxuICAgIyBkZXZsaW5rIGRldiBmbGFzaCBwY2kvMDAwMDpiNTowMC4wIFxcXFxcXG4gICAgICAgICAgICAgZmlsZSBwZW5zYW5kby9kc2NfZndfMS42My4wLTIyLnRhclxcbiBcXG4rRmlybXdhcmUgTWFuYWdlbWVudCAoUExETSlcXG4rPT09PT09PT09PT09PT09PT09PT09PT09PT1cXG4rXFxuK0Zpcm13YXJlIHRoYXQgc3VwcG9ydHMgUExETSBjYW4gYmUgdXBkYXRlZCB1c2luZyB0aGUgZGV2bGluayBmbGFzaCBjb21tYW5kXFxuK3dpdGggYSBQTERNIGZpcm13YXJlIHBhY2thZ2UuIFRoZSBlbnRpcmUgcGFja2FnZSBjYW4gYmUgdXBkYXRlZCBhdCBvbmNlOjpcXG4rXFxuKyAgIyBkZXZsaW5rIGRldiBmbGFzaCBwY2kvMDAwMDpiNTowMC4wIGZpbGUgZmlybXdhcmUucGxkbWZ3XFxuK1xcbitJbmRpdmlkdWFsIGNvbXBvbmVudHMgY2FuIGFsc28gYmUgdXBkYXRlZCBieSBzcGVjaWZ5aW5nIHRoZSBjb21wb25lbnQgbmFtZTo6XFxuK1xcbisgICMgZGV2bGluayBkZXYgZmxhc2ggcGNpLzAwMDA6YjU6MDAuMCBcXFxcXFxuKyAgICAgICAgICAgIGZpbGUgZmlybXdhcmUucGxkbWZ3IGNvbXBvbmVudCBmdy5jcGxkXFxuK1xcbitQZXItY29tcG9uZW50IHVwZGF0ZSB1c2VzIGRyaXZlci1kZWZpbmVkIGNvbXBvbmVudCBuYW1lcyAoZncsIGZ3LmNwbGQsXFxuK2V0Yy4pLiBOb3QgYWxsIGNvbXBvbmVudHMgc3VwcG9ydCBwZXItY29tcG9uZW50IHVwZGF0ZSAtXFxuK2Rldmxpbmsgd2lsbCByZWplY3QgdGhlIHJlcXVlc3QgaWYgdGhlIHNwZWNpZmllZCBjb21wb25lbnQgY2Fubm90XFxuK2JlIHVwZGF0ZWQuXFxuK1xcbitHb2xkIChyZWNvdmVyeSkgY29tcG9uZW50cyBjYW4gYmUgdXBkYXRlZCBieSBzcGVjaWZ5aW5nIHRoZSBiYXNlIGNvbXBvbmVudFxcbituYW1lIChlLmcuLCBgYGZ3YGAgZm9yIGBgZncuZ29sZGBgKSB3aXRoIGEgZ29sZGZ3IHBhY2thZ2UgZmlsZSB3aGVuIHRoZVxcbitkZXZpY2Ugc3VwcG9ydHMgcGVyLWNvbXBvbmVudCB1cGRhdGUuIFRoZSBgYC5nb2xkYGAgc3VmZml4IGluIGRldmxpbmsgaW5mb1xcbitvdXRwdXQgaW5kaWNhdGVzIHRoZSBnb2xkIHNsb3QgdmVyc2lvbiwgbm90IGEgZmxhc2ggdGFyZ2V0LlxcbitcXG4rSW5mbyB2ZXJzaW9ucyAoUExETSlcXG4rPT09PT09PT09PT09PT09PT09PT1cXG4rXFxuK0Zpcm13YXJlIHRoYXQgc3VwcG9ydHMgUExETSByZXBvcnRzIGNvbXBvbmVudCB2ZXJzaW9ucyB1c2luZyBkcml2ZXItZGVmaW5lZFxcbituYW1lcy4gVGhlIGRyaXZlciByZXBvcnRzIHRoZSBmb2xsb3dpbmcgY29tcG9uZW50IHZlcnNpb25zOlxcbitcXG4rLi4gbGlzdC10YWJsZTo6IGRldmxpbmsgaW5mbyB2ZXJzaW9ucyBmb3IgUExETS1jYXBhYmxlIGZpcm13YXJlXFxuKyAgIDp3aWR0aHM6IDUgNSA5MFxcbitcXG4rICAgKiAtIE5hbWVcXG4rICAgICAtIFR5cGVcXG4rICAgICAtIERlc2NyaXB0aW9uXFxuKyAgICogLSBgYGZ3YGBcXG4rICAgICAtIHJ1bm5pbmcsIHN0b3JlZFxcbisgICAgIC0gTWFpbiBmaXJtd2FyZVxcbisgICAqIC0gYGBmdy5nb2xkYGBcXG4rICAgICAtIHN0b3JlZFxcbisgICAgIC0gR29sZCAocmVjb3ZlcnkpIGZpcm13YXJlXFxuKyAgICogLSBgYGZ3LmJvb3Rsb2FkZXJgYFxcbisgICAgIC0gcnVubmluZywgc3RvcmVkXFxuKyAgICAgLSBCb290IGxvYWRlclxcbisgICAqIC0gYGBmdy5jcGxkYGBcXG4rICAgICAtIHJ1bm5pbmcsIHN0b3JlZFxcbisgICAgIC0gQ1BMRFxcbisgICAqIC0gYGBmdy5zZWN1cmVgYFxcbisgICAgIC0gcnVubmluZywgc3RvcmVkXFxuKyAgICAgLSBTZWN1cmUgYm9vdCBmaXJtd2FyZVxcbisgICAqIC0gYGBmdy5mcGdhYGBcXG4rICAgICAtIHJ1bm5pbmcsIHN0b3JlZFxcbisgICAgIC0gRlBHQSBjb25maWd1cmF0aW9uXFxuKyAgICogLSBgYGZ3LnN1Y2BgXFxuKyAgICAgLSBydW5uaW5nLCBzdG9yZWRcXG4rICAgICAtIFN5c3RlbSBVbml0IENvbnRyb2xsZXIgZmlybXdhcmVcXG4rICAgKiAtIGBgZncuc3VjLmJvb3Rsb2FkZXJgYFxcbisgICAgIC0gcnVubmluZywgc3RvcmVkXFxuKyAgICAgLSBTeXN0ZW0gVW5pdCBDb250cm9sbGVyIGJvb3Rsb2FkZXJcXG4rICAgKiAtIGBgZncudWJvb3RgYFxcbisgICAgIC0gcnVubmluZywgc3RvcmVkXFxuKyAgICAgLSBVLUJvb3QgYm9vdGxvYWRlclxcbisgICAqIC0gYGBhc2ljLmlkYGBcXG4rICAgICAtIGZpeGVkXFxuKyAgICAgLSBUaGUgQVNJQyB0eXBlIGZvciB0aGlzIGRldmljZVxcbisgICAqIC0gYGBhc2ljLnJldmBgXFxuKyAgICAgLSBmaXhlZFxcbisgICAgIC0gVGhlIHJldmlzaW9uIG9mIHRoZSBBU0lDIGZvciB0aGlzIGRldmljZVxcbitcXG4rRXhhbXBsZSBvdXRwdXQ6OlxcbitcXG4rICAkIGRldmxpbmsgZGV2IGluZm8gcGNpLzAwMDA6MDA6MDUuMFxcbisgIHBjaS8wMDAwOjAwOjA1LjA6XFxuKyAgICBkcml2ZXIgcGRzX2NvcmVcXG4rICAgIHNlcmlhbF9udW1iZXIgRkxNMTg0MjAwNzNcXG4rICAgIHZlcnNpb25zOlxcbisgICAgICAgIGZpeGVkOlxcbisgICAgICAgICAgYXNpYy5pZCAweDBcXG4rICAgICAgICAgIGFzaWMucmV2IDB4MFxcbisgICAgICAgIHJ1bm5pbmc6XFxuKyAgICAgICAgICBmdy5ib290bG9hZGVyIDEuMi4zXFxuKyAgICAgICAgICBmdyAxLjMuMFxcbisgICAgICAgICAgZncuY3BsZCAzLjE4XFxuKyAgICAgICAgc3RvcmVkOlxcbisgICAgICAgICAgZncuYm9vdGxvYWRlciAxLjIuM1xcbisgICAgICAgICAgZncuZ29sZCAxLjIuMFxcbisgICAgICAgICAgZncgMS4zLjBcXG4rICAgICAgICAgIGZ3LmNwbGQgMy4xOFxcbitcXG4gSGVhbHRoIFJlcG9ydGVyc1xcbiA9PT09PT09PT09PT09PT09XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9LY29uZmlnXFxuaW5kZXggZTM1OTkxMTQxYTFhMi4uNzQzZTNkNGI2Yjk0ZSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvS2NvbmZpZ1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9LY29uZmlnXFxuQEAgLTE3MSw2ICsxNzEsNyBAQCBjb25maWcgUERTX0NPUkVcXG4gXFx0ZGVwZW5kcyBvbiA2NEJJVCBcXHUwMDI2XFx1MDAyNiBQQ0lcXG4gXFx0c2VsZWN0IEFVWElMSUFSWV9CVVNcXG4gXFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxuK1xcdHNlbGVjdCBQTERNRldcXG4gXFx0aGVscFxcbiBcXHQgIFRoaXMgZW5hYmxlcyB0aGUgc3VwcG9ydCBmb3IgdGhlIEFNRC9QZW5zYW5kbyBDb3JlIGRldmljZSBmYW1pbHkgb2ZcXG4gXFx0ICBhZGFwdGVycy4gIE1vcmUgc3BlY2lmaWMgaW5mb3JtYXRpb24gb24gdGhpcyBkcml2ZXIgY2FuIGJlXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9jb3JlLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvY29yZS5jXFxuaW5kZXggMDRlYzI1NjljNjFjMC4uOTIyZTNlYzhhZjFiOSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvY29yZS5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL2NvcmUuY1xcbkBAIC00ODksNiArNDg5LDE1IEBAIHZvaWQgcGRzY190ZWFyZG93bihzdHJ1Y3QgcGRzYyAqcGRzYywgYm9vbCByZW1vdmluZylcXG4gXFx0XFx0cGRzY19kZXZjbWRfcmVzZXQocGRzYyk7XFxuIFxcbiBcXHRwY2lfY2xlYXJfbWFzdGVyKHBkc2MtXFx1MDAzZXBkZXYpO1xcbitcXHRpZiAoIXBkc2MtXFx1MDAzZXBkZXYtXFx1MDAzZWlzX3ZpcnRmbikge1xcbitcXHRcXHR1MTYgdmFsO1xcbitcXG4rXFx0XFx0LyogRmx1c2ggYW55IGluLWZsaWdodCBETUEgYmVmb3JlIGZyZWVpbmcgYnVmZmVycy5cXG4rXFx0XFx0ICogQSBjb25maWcgcmVhZCBjb21wbGV0aW9uIGNhbm5vdCByZXR1cm4gdW50aWwgYWxsIHByaW9yXFxuK1xcdFxcdCAqIGRldmljZS1pbml0aWF0ZWQgbWVtb3J5IHdyaXRlcyBoYXZlIGNvbXBsZXRlZC5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHBjaV9yZWFkX2NvbmZpZ193b3JkKHBkc2MtXFx1MDAzZXBkZXYsIFBDSV9WRU5ET1JfSUQsIFxcdTAwMjZ2YWwpO1xcbitcXHR9XFxuIFxcbiBcXHRwZHNjX2NvcmVfdW5pbml0KHBkc2MpO1xcbiBcXG5AQCAtNDk3LDYgKzUwNiw4IEBAIHZvaWQgcGRzY190ZWFyZG93bihzdHJ1Y3QgcGRzYyAqcGRzYywgYm9vbCByZW1vdmluZylcXG4gXFx0XFx0cGRzYy1cXHUwMDNldmlmdHlwZV9zdGF0dXMgPSBOVUxMO1xcbiBcXHR9XFxuIFxcbitcXHRwZHNjX2RlYnVnZnNfZGVsX2hvc3RfbWVtKHBkc2MpO1xcbitcXHRwZHNjX2hvc3RfbWVtX2ZyZWUocGRzYyk7XFxuIFxcdHBkc2NfZGV2X3VuaW5pdChwZHNjKTtcXG4gXFxuIFxcdHNldF9iaXQoUERTQ19TX0ZXX0RFQUQsIFxcdTAwMjZwZHNjLVxcdTAwM2VzdGF0ZSk7XFxuQEAgLTUwNiw2ICs1MTcsOCBAQCBpbnQgcGRzY19zdGFydChzdHJ1Y3QgcGRzYyAqcGRzYylcXG4ge1xcbiBcXHRwZHNfY29yZV9pbnRyX21hc2soXFx1MDAyNnBkc2MtXFx1MDAzZWludHJfY3RybFtwZHNjLVxcdTAwM2VhZG1pbnFjcS5pbnR4XSxcXG4gXFx0XFx0XFx0ICAgUERTX0NPUkVfSU5UUl9NQVNLX0NMRUFSKTtcXG4rXFx0cGRzY19ob3N0X21lbV9hZGQocGRzYyk7XFxuK1xcdHBkc2NfZGVidWdmc19hZGRfaG9zdF9tZW0ocGRzYyk7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbkBAIC01ODcsNiArNjAwLDggQEAgdm9pZCBwZHNjX2Z3X3VwKHN0cnVjdCBwZHNjICpwZHNjKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcdH1cXG4gXFxuK1xcdHBkc2NfZndfY29tcG9uZW50c19pbnZhbGlkYXRlKHBkc2MpO1xcbitcXG4gXFx0ZXJyID0gcGRzY19zZXR1cChwZHNjLCBQRFNDX1NFVFVQX1JFQ09WRVJZKTtcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0Z290byBlcnJfb3V0O1xcbkBAIC02NzAsMyArNjg1LDE2MSBAQCB2b2lkIHBkc2NfaGVhbHRoX3RocmVhZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuIG91dF91bmxvY2s6XFxuIFxcdG11dGV4X3VubG9jayhcXHUwMDI2cGRzYy1cXHUwMDNlY29uZmlnX2xvY2spO1xcbiB9XFxuK1xcbitzdGF0aWMgdm9pZCBwZHNjX2hvc3RfbWVtX2RlbF9vbmUoc3RydWN0IHBkc2MgKnBkc2MsIHUxNiB0YWcsIHU4IHJlYXNvbilcXG4re1xcbitcXHR1bmlvbiBwZHNfY29yZV9kZXZfY29tcCBjb21wID0ge307XFxuK1xcdHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgY21kID0ge1xcbitcXHRcXHQuaG9zdF9tZW0ub3Bjb2RlID0gUERTX0NPUkVfQ01EX0hPU1RfTUVNLFxcbitcXHRcXHQuaG9zdF9tZW0ub3BlciA9IFBEU19DT1JFX0hPU1RfTUVNX0RFTCxcXG4rXFx0XFx0Lmhvc3RfbWVtLnRhZyA9IGNwdV90b19sZTE2KHRhZyksXFxuK1xcdFxcdC5ob3N0X21lbS5yZWFzb24gPSByZWFzb24sXFxuK1xcdH07XFxuK1xcbitcXHRkZXZfZGJnKHBkc2MtXFx1MDAzZWRldiwgXFxcIlNlbmRpbmcgZGV2Y21kIGZvciBtZW0gZGVsIHRhZyAlZFxcXFxuXFxcIiwgdGFnKTtcXG4rXFx0cGRzY19kZXZjbWQocGRzYywgXFx1MDAyNmNtZCwgXFx1MDAyNmNvbXAsIHBkc2MtXFx1MDAzZWRldmNtZF90aW1lb3V0KTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBwZHNjX2hvc3RfbWVtX2FkZF9vbmUoc3RydWN0IHBkc2MgKnBkc2MsIGludCBpbmRleClcXG4re1xcbitcXHRzdHJ1Y3QgcGRzY19ob3N0X21lbSAqaG0gPSBcXHUwMDI2cGRzYy1cXHUwMDNlaG9zdF9tZW1fcmVxc1tpbmRleF07XFxuK1xcdHVuaW9uIHBkc19jb3JlX2Rldl9jb21wIGNvbXAgPSB7fTtcXG4rXFx0dW5pb24gcGRzX2NvcmVfZGV2X2NtZCBjbWQgPSB7fTtcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdGNtZC5ob3N0X21lbS5vcGNvZGUgPSBQRFNfQ09SRV9DTURfSE9TVF9NRU07XFxuK1xcdGNtZC5ob3N0X21lbS5vcGVyID0gUERTX0NPUkVfSE9TVF9NRU1fUVVFUlk7XFxuK1xcdGNtZC5ob3N0X21lbS5pbmRleCA9IGNwdV90b19sZTE2KGluZGV4KTtcXG4rXFx0ZGV2X2RiZyhwZHNjLVxcdTAwM2VkZXYsIFxcXCJTZW5kaW5nIGRldmNtZCBmb3IgbWVtIHF1ZXJ5IGluZGV4ICVkXFxcXG5cXFwiLCBpbmRleCk7XFxuK1xcdGVyciA9IHBkc2NfZGV2Y21kKHBkc2MsIFxcdTAwMjZjbWQsIFxcdTAwMjZjb21wLCBwZHNjLVxcdTAwM2VkZXZjbWRfdGltZW91dCk7XFxuK1xcdGlmIChlcnIgfHwgY29tcC5zdGF0dXMgIT0gUERTX1JDX1NVQ0NFU1MpIHtcXG4rXFx0XFx0ZGV2X2VycihwZHNjLVxcdTAwM2VkZXYsIFxcXCJtZW0gcXVlcnkgZmFpbGVkIGVyciAlZCBzdGF0dXMgJWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdGVyciwgY29tcC5zdGF0dXMpO1xcbitcXHRcXHRyZXR1cm4gZXJyID8gZXJyIDogLUVJTztcXG4rXFx0fVxcbitcXHRobS1cXHUwMDNlc2l6ZSA9IGxlMzJfdG9fY3B1KGNvbXAuaG9zdF9tZW0uc2l6ZSk7XFxuK1xcdGhtLVxcdTAwM2V0YWcgPSBsZTE2X3RvX2NwdShjb21wLmhvc3RfbWVtLnRhZyk7XFxuK1xcdGRldl9kYmcocGRzYy1cXHUwMDNlZGV2LCBcXFwibWVtIHF1ZXJ5IHJldHVybmVkIHNpemUgJWQgdGFnICVkXFxcXG5cXFwiLFxcbitcXHRcXHRobS1cXHUwMDNlc2l6ZSwgaG0tXFx1MDAzZXRhZyk7XFxuK1xcbitcXHRpZiAoIWhtLVxcdTAwM2VzaXplIHx8IGhtLVxcdTAwM2VzaXplIFxcdTAwM2UgUERTQ19IT1NUX01FTV9NQVhfQ09OVElHKSB7XFxuK1xcdFxcdGRldl9lcnIocGRzYy1cXHUwMDNlZGV2LCBcXFwiaW52YWxpZCBzaXplICVkIGZvciB0YWcgJWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdGhtLVxcdTAwM2VzaXplLCBobS1cXHUwMDNldGFnKTtcXG4rXFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4rXFx0XFx0Z290byBlcnJfZGVsO1xcbitcXHR9XFxuK1xcbitcXHRobS1cXHUwMDNlb3JkZXIgPSBnZXRfb3JkZXIoaG0tXFx1MDAzZXNpemUpO1xcbitcXHRobS1cXHUwMDNlcGcgPSBhbGxvY19wYWdlcyhHRlBfS0VSTkVMIHwgX19HRlBfWkVSTyB8IF9fR0ZQX05PV0FSTiwgaG0tXFx1MDAzZW9yZGVyKTtcXG4rXFx0aWYgKCFobS1cXHUwMDNlcGcpIHtcXG4rXFx0XFx0ZGV2X3dhcm4ocGRzYy1cXHUwMDNlZGV2LCBcXFwiYWxsb2Mgb3JkZXIgJWQgZmFpbGVkIGZvciB0YWcgJWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCBobS1cXHUwMDNlb3JkZXIsIGhtLVxcdTAwM2V0YWcpO1xcbitcXHRcXHRlcnIgPSAtRU5PTUVNO1xcbitcXHRcXHRnb3RvIGVycl9kZWw7XFxuK1xcdH1cXG4rXFxuK1xcdGhtLVxcdTAwM2VwYSA9IGRtYV9tYXBfcGFnZShwZHNjLVxcdTAwM2VkZXYsIGhtLVxcdTAwM2VwZywgMCwgaG0tXFx1MDAzZXNpemUsXFxuK1xcdFxcdFxcdCAgICAgIERNQV9CSURJUkVDVElPTkFMKTtcXG4rXFx0aWYgKGRtYV9tYXBwaW5nX2Vycm9yKHBkc2MtXFx1MDAzZWRldiwgaG0tXFx1MDAzZXBhKSkge1xcbitcXHRcXHRkZXZfZXJyKHBkc2MtXFx1MDAzZWRldiwgXFxcImRtYSBtYXAgZmFpbGVkIGZvciB0YWcgJWQgc2l6ZSAlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0aG0tXFx1MDAzZXRhZywgaG0tXFx1MDAzZXNpemUpO1xcbitcXHRcXHRfX2ZyZWVfcGFnZXMoaG0tXFx1MDAzZXBnLCBobS1cXHUwMDNlb3JkZXIpO1xcbitcXHRcXHRobS1cXHUwMDNlcGcgPSBOVUxMO1xcbitcXHRcXHRlcnIgPSAtRUlPO1xcbitcXHRcXHRnb3RvIGVycl9kZWw7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIFRyYWNrIHRoaXMgYWxsb2NhdGlvbiBzbyBwZHNjX2hvc3RfbWVtX2ZyZWUoKSBjYW4gY2xlYW4gaXQgdXAgKi9cXG4rXFx0cGRzYy1cXHUwMDNlbnVtX2hvc3RfbWVtX3JlcXMrKztcXG4rXFxuK1xcdG1lbXNldChcXHUwMDI2Y21kLCAwLCBzaXplb2YoY21kKSk7XFxuK1xcdG1lbXNldChcXHUwMDI2Y29tcCwgMCwgc2l6ZW9mKGNvbXApKTtcXG4rXFx0Y21kLmhvc3RfbWVtLm9wY29kZSA9IFBEU19DT1JFX0NNRF9IT1NUX01FTTtcXG4rXFx0Y21kLmhvc3RfbWVtLm9wZXIgPSBQRFNfQ09SRV9IT1NUX01FTV9BREQ7XFxuK1xcdGNtZC5ob3N0X21lbS50YWcgPSBjcHVfdG9fbGUxNihobS1cXHUwMDNldGFnKTtcXG4rXFx0Y21kLmhvc3RfbWVtLnNpemUgPSBjcHVfdG9fbGUzMihobS1cXHUwMDNlc2l6ZSk7XFxuK1xcdGNtZC5ob3N0X21lbS5idWZfcGEgPSBjcHVfdG9fbGU2NChobS1cXHUwMDNlcGEpO1xcbitcXG4rXFx0ZGV2X2RiZyhwZHNjLVxcdTAwM2VkZXYsIFxcXCJTZW5kaW5nIGRldmNtZCBmb3IgbWVtIGFkZCB0YWcgJWQgc2l6ZSAlZCBwYSAlcGFkXFxcXG5cXFwiLFxcbitcXHRcXHRobS1cXHUwMDNldGFnLCBobS1cXHUwMDNlc2l6ZSwgXFx1MDAyNmhtLVxcdTAwM2VwYSk7XFxuK1xcdGVyciA9IHBkc2NfZGV2Y21kKHBkc2MsIFxcdTAwMjZjbWQsIFxcdTAwMjZjb21wLCBwZHNjLVxcdTAwM2VkZXZjbWRfdGltZW91dCk7XFxuK1xcdGlmIChlcnIgfHwgY29tcC5zdGF0dXMgIT0gUERTX1JDX1NVQ0NFU1MpIHtcXG4rXFx0XFx0ZGV2X2VycihwZHNjLVxcdTAwM2VkZXYsIFxcXCJtZW0gYWRkIGZhaWxlZCBlcnIgJWQgc3RhdHVzICVkIGZvciB0YWcgJWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdGVyciwgY29tcC5zdGF0dXMsIGhtLVxcdTAwM2V0YWcpO1xcbitcXHRcXHRlcnIgPSBlcnIgPyBlcnIgOiAtRUlPO1xcbitcXHRcXHRnb3RvIGVycl9kZWw7XFxuK1xcdH1cXG4rXFx0ZGV2X2RiZyhwZHNjLVxcdTAwM2VkZXYsIFxcXCJtZW0gYWRkIGNvbXBsZXRlZCBmb3IgdGFnICVkXFxcXG5cXFwiLCBobS1cXHUwMDNldGFnKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbitcXG4rZXJyX2RlbDpcXG4rXFx0LyogQWZ0ZXIgTUVNX1FVRVJZIHN1Y2NlZWRzLCBmaXJtd2FyZSBleHBlY3RzIE1FTV9BREQgb3IgTUVNX0RFTCAqL1xcbitcXHRwZHNjX2hvc3RfbWVtX2RlbF9vbmUocGRzYywgaG0tXFx1MDAzZXRhZywgUERTX1JDX0VOT01FTSk7XFxuK1xcdHJldHVybiBlcnI7XFxuK31cXG4rXFxuK3ZvaWQgcGRzY19ob3N0X21lbV9hZGQoc3RydWN0IHBkc2MgKnBkc2MpXFxuK3tcXG4rXFx0dW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgY29tcCA9IHt9O1xcbitcXHR1bmlvbiBwZHNfY29yZV9kZXZfY21kIGNtZCA9IHt9O1xcbitcXHR1MTYgY291bnQ7XFxuK1xcdGludCBlcnI7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0aWYgKCEocGRzYy1cXHUwMDNlZGV2X2lkZW50LmNhcGFiaWxpdGllcyBcXHUwMDI2XFxuK1xcdCAgICAgY3B1X3RvX2xlNjQoUERTX0NPUkVfREVWX0NBUF9IT1NUX01FTSkpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRjbWQuaG9zdF9tZW0ub3Bjb2RlID0gUERTX0NPUkVfQ01EX0hPU1RfTUVNO1xcbitcXHRjbWQuaG9zdF9tZW0ub3BlciA9IFBEU19DT1JFX0hPU1RfTUVNX0dFVF9DT1VOVDtcXG4rXFx0Y21kLmhvc3RfbWVtLmluZGV4ID0gY3B1X3RvX2xlMTYoUERTQ19IT1NUX01FTV9NQVhfQ09VTlQpO1xcbitcXHRjbWQuaG9zdF9tZW0ubWF4X2NvbnRpZyA9IGNwdV90b19sZTMyKFBEU0NfSE9TVF9NRU1fTUFYX0NPTlRJRyk7XFxuK1xcdGRldl9kYmcocGRzYy1cXHUwMDNlZGV2LCBcXFwiU2VuZGluZyBkZXZjbWQgZm9yIG1lbSBnZXQgY291bnQgbWF4X2NvbnRpZyAldVxcXFxuXFxcIixcXG4rXFx0XFx0UERTQ19IT1NUX01FTV9NQVhfQ09OVElHKTtcXG4rXFx0ZXJyID0gcGRzY19kZXZjbWQocGRzYywgXFx1MDAyNmNtZCwgXFx1MDAyNmNvbXAsIHBkc2MtXFx1MDAzZWRldmNtZF90aW1lb3V0KTtcXG4rXFx0aWYgKGVyciB8fCBjb21wLnN0YXR1cyAhPSBQRFNfUkNfU1VDQ0VTUykge1xcbitcXHRcXHRkZXZfZXJyKHBkc2MtXFx1MDAzZWRldiwgXFxcIm1lbSBnZXQgY291bnQgZmFpbGVkIGVyciAlZCBzdGF0dXMgJWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdGVyciwgY29tcC5zdGF0dXMpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuK1xcdGNvdW50ID0gbWluKGxlMTZfdG9fY3B1KGNvbXAuaG9zdF9tZW0uY291bnQpLFxcbitcXHRcXHQgICAgUERTQ19IT1NUX01FTV9NQVhfQ09VTlQpO1xcbitcXHRkZXZfZGJnKHBkc2MtXFx1MDAzZWRldiwgXFxcIm1lbSBnZXQgY291bnQgcmV0dXJuZWQgY291bnQgJWRcXFxcblxcXCIsIGNvdW50KTtcXG4rXFx0aWYgKGNvdW50ID09IDApXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHBkc2MtXFx1MDAzZWhvc3RfbWVtX3JlcXMgPSBremFsbG9jX29ianMoKnBkc2MtXFx1MDAzZWhvc3RfbWVtX3JlcXMsIGNvdW50LFxcbitcXHRcXHRcXHRcXHRcXHQgICBHRlBfS0VSTkVMKTtcXG4rXFx0aWYgKCFwZHNjLVxcdTAwM2Vob3N0X21lbV9yZXFzKSB7XFxuK1xcdFxcdGRldl9lcnIocGRzYy1cXHUwMDNlZGV2LCBcXFwiZmFpbGVkIHRvIGFsbG9jIGhvc3RfbWVtX3JlcXMgYXJyYXlcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBjb3VudDsgaSsrKSB7XFxuK1xcdFxcdGVyciA9IHBkc2NfaG9zdF9tZW1fYWRkX29uZShwZHNjLCBpKTtcXG4rXFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4rfVxcbitcXG4rdm9pZCBwZHNjX2hvc3RfbWVtX2ZyZWUoc3RydWN0IHBkc2MgKnBkc2MpXFxuK3tcXG4rXFx0aW50IGk7XFxuK1xcbitcXHRpZiAoIXBkc2MtXFx1MDAzZWhvc3RfbWVtX3JlcXMpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBwZHNjLVxcdTAwM2VudW1faG9zdF9tZW1fcmVxczsgaSsrKSB7XFxuK1xcdFxcdGRtYV91bm1hcF9wYWdlKHBkc2MtXFx1MDAzZWRldiwgcGRzYy1cXHUwMDNlaG9zdF9tZW1fcmVxc1tpXS5wYSxcXG4rXFx0XFx0XFx0ICAgICAgIHBkc2MtXFx1MDAzZWhvc3RfbWVtX3JlcXNbaV0uc2l6ZSxcXG4rXFx0XFx0XFx0ICAgICAgIERNQV9CSURJUkVDVElPTkFMKTtcXG4rXFx0XFx0X19mcmVlX3BhZ2VzKHBkc2MtXFx1MDAzZWhvc3RfbWVtX3JlcXNbaV0ucGcsXFxuK1xcdFxcdFxcdCAgICAgcGRzYy1cXHUwMDNlaG9zdF9tZW1fcmVxc1tpXS5vcmRlcik7XFxuK1xcdH1cXG4rXFxuK1xcdGtmcmVlKHBkc2MtXFx1MDAzZWhvc3RfbWVtX3JlcXMpO1xcbitcXHRwZHNjLVxcdTAwM2Vob3N0X21lbV9yZXFzID0gTlVMTDtcXG4rXFx0cGRzYy1cXHUwMDNlbnVtX2hvc3RfbWVtX3JlcXMgPSAwO1xcbit9XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9jb3JlLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvY29yZS5oXFxuaW5kZXggYjdmZTlhZDczMzQ5OC4uNzkxNzU2YTUwODcwZSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvY29yZS5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL2NvcmUuaFxcbkBAIC01LDYgKzUsNyBAQFxcbiAjZGVmaW5lIF9QRFNDX0hfXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZGVidWdmcy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbW16b25lLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvZGV2bGluay5oXFx1MDAzZVxcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3Bkcy9wZHNfY29tbW9uLmhcXHUwMDNlXFxuQEAgLTIzLDYgKzI0LDIwIEBAXFxuICNkZWZpbmUgUERTQ19TRVRVUF9SRUNPVkVSWVxcdGZhbHNlXFxuICNkZWZpbmUgUERTQ19TRVRVUF9JTklUXFx0XFx0dHJ1ZVxcbiBcXG4rLyogVXNlIGZpeGVkIDRNQiBpbnN0ZWFkIG9mIFBBR0VfU0laRSBcXHUwMDNjXFx1MDAzYyBNQVhfUEFHRV9PUkRFUiB0byBhdm9pZFxcbisgKiBjcHVfdG9fbGUzMigpIHRydW5jYXRpb24gb24gbGFyZ2UtcGFnZSBjb25maWdzXFxuKyAqL1xcbisjZGVmaW5lIFBEU0NfSE9TVF9NRU1fTUFYX0NPTlRJRyAoNCAqIDEwMjQgKiAxMDI0KVxcbisjZGVmaW5lIFBEU0NfSE9TVF9NRU1fTUFYX0NPVU5UICAyNTZcXG4rXFxuK3N0cnVjdCBwZHNjX2RlZmVycmVkX2RtYSB7XFxuK1xcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcXG4rXFx0ZG1hX2FkZHJfdCBkbWFfYWRkcjtcXG4rXFx0dm9pZCAqdmE7XFxuK1xcdHNpemVfdCBzaXplO1xcbitcXHRlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXI7XFxuK307XFxuK1xcbiBzdHJ1Y3QgcGRzY19kZXZfYmFyIHtcXG4gXFx0dm9pZCBfX2lvbWVtICp2YWRkcjtcXG4gXFx0cGh5c19hZGRyX3QgYnVzX2FkZHI7XFxuQEAgLTE0MSw2ICsxNTYsMTQgQEAgc3RydWN0IHBkc2NfdmlmdHlwZSB7XFxuIFxcdHN0cnVjdCBwZHNfYXV4aWxpYXJ5X2RldiAqcGFkZXY7XFxuIH07XFxuIFxcbitzdHJ1Y3QgcGRzY19ob3N0X21lbSB7XFxuK1xcdHUzMiBzaXplO1xcbitcXHR1MTYgdGFnO1xcbitcXHR1OCBvcmRlcjtcXG4rXFx0c3RydWN0IHBhZ2UgKnBnO1xcbitcXHRkbWFfYWRkcl90IHBhO1xcbit9O1xcbitcXG4gLyogTm8gc3RhdGUgZmxhZ3Mgc2V0IG1lYW5zIHdlIGFyZSBpbiBhIHN0ZWFkeSBydW5uaW5nIHN0YXRlICovXFxuIGVudW0gcGRzY19zdGF0ZV9mbGFncyB7XFxuIFxcdFBEU0NfU19GV19ERUFELFxcdFxcdCAgICAvKiBzdG9wcGVkLCB3YWl0IG9uIHN0YXJ0dXAgb3IgcmVjb3ZlcnkgKi9cXG5AQCAtMTg1LDYgKzIwOCw4IEBAIHN0cnVjdCBwZHNjIHtcXG4gXFx0c3RydWN0IG11dGV4IGRldmNtZF9sb2NrO1xcdC8qIGxvY2sgZm9yIGRldl9jbWQgb3BlcmF0aW9ucyAqL1xcbiBcXHRzdHJ1Y3QgbXV0ZXggY29uZmlnX2xvY2s7XFx0LyogbG9jayBmb3IgY29uZmlndXJhdGlvbiBvcGVyYXRpb25zICovXFxuIFxcdHNwaW5sb2NrX3QgYWRtaW5xX2xvY2s7XFx0XFx0LyogbG9jayBmb3IgYWRtaW5xIG9wZXJhdGlvbnMgKi9cXG4rXFx0c3RydWN0IGxpc3RfaGVhZCBkZWZlcnJlZF9kbWFfbGlzdDtcXG4rXFx0c3BpbmxvY2tfdCBkZWZlcnJlZF9kbWFfbG9jaztcXHQvKiBsb2NrIGZvciBkZWZlcnJlZCBETUEgbGlzdCAqL1xcbiBcXHRyZWZjb3VudF90IGFkbWlucV9yZWZjbnQ7XFxuIFxcdHN0cnVjdCBwZHNfY29yZV9kZXZfaW5mb19yZWdzIF9faW9tZW0gKmluZm9fcmVncztcXG4gXFx0c3RydWN0IHBkc19jb3JlX2Rldl9jbWRfcmVncyBfX2lvbWVtICpjbWRfcmVncztcXG5AQCAtMTk5LDYgKzIyNCwxMSBAQCBzdHJ1Y3QgcGRzYyB7XFxuIFxcdHU2NCBsYXN0X2VpZDtcXG4gXFx0c3RydWN0IHBkc2NfdmlmdHlwZSAqdmlmdHlwZV9zdGF0dXM7XFxuIFxcdHN0cnVjdCB3b3JrX3N0cnVjdCBwY2lfcmVzZXRfd29yaztcXG4rXFxuK1xcdHN0cnVjdCBwZHNjX2hvc3RfbWVtICpob3N0X21lbV9yZXFzO1xcbitcXHR1MTYgbnVtX2hvc3RfbWVtX3JlcXM7XFxuK1xcbitcXHRzdHJ1Y3QgcGRzX2NvcmVfY29tcG9uZW50X2xpc3RfaW5mbyBmd19jb21wb25lbnRzO1xcbiB9O1xcbiBcXG4gLyoqIGVudW0gcGRzX2NvcmVfZGJlbGxfYml0cyAtIGJpdHdpc2UgY29tcG9zaXRpb24gb2YgZGJlbGwgdmFsdWVzLlxcbkBAIC0yNzUsMTQgKzMwNSwyNCBAQCB2b2lkIHBkc2NfZGVidWdmc19hZGRfdmlmdHlwZShzdHJ1Y3QgcGRzYyAqcGRzYyk7XFxuIHZvaWQgcGRzY19kZWJ1Z2ZzX2FkZF9pcnFzKHN0cnVjdCBwZHNjICpwZHNjKTtcXG4gdm9pZCBwZHNjX2RlYnVnZnNfYWRkX3FjcShzdHJ1Y3QgcGRzYyAqcGRzYywgc3RydWN0IHBkc2NfcWNxICpxY3EpO1xcbiB2b2lkIHBkc2NfZGVidWdmc19kZWxfcWNxKHN0cnVjdCBwZHNjX3FjcSAqcWNxKTtcXG4rdm9pZCBwZHNjX2RlYnVnZnNfYWRkX2hvc3RfbWVtKHN0cnVjdCBwZHNjICpwZHNjKTtcXG4rdm9pZCBwZHNjX2RlYnVnZnNfZGVsX2hvc3RfbWVtKHN0cnVjdCBwZHNjICpwZHNjKTtcXG4gXFxuIGludCBwZHNjX2Vycl90b19lcnJubyhlbnVtIHBkc19jb3JlX3N0YXR1c19jb2RlIGNvZGUpO1xcbiBib29sIHBkc2NfaXNfZndfcnVubmluZyhzdHJ1Y3QgcGRzYyAqcGRzYyk7XFxuIGJvb2wgcGRzY19pc19md19nb29kKHN0cnVjdCBwZHNjICpwZHNjKTtcXG4gaW50IHBkc2NfZGV2Y21kKHN0cnVjdCBwZHNjICpwZHNjLCB1bmlvbiBwZHNfY29yZV9kZXZfY21kICpjbWQsXFxuIFxcdFxcdHVuaW9uIHBkc19jb3JlX2Rldl9jb21wICpjb21wLCBpbnQgbWF4X3NlY29uZHMpO1xcbitpbnQgcGRzY19kZXZjbWRfd2l0aF9kYXRhKHN0cnVjdCBwZHNjICpwZHNjLCB1bmlvbiBwZHNfY29yZV9kZXZfY21kICpjbWQsXFxuK1xcdFxcdFxcdCAgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGRhdGFfbGVuLFxcbitcXHRcXHRcXHQgIHVuaW9uIHBkc19jb3JlX2Rldl9jb21wICpjb21wLCBpbnQgbWF4X3NlY29uZHMpO1xcbitpbnQgcGRzY19kZXZjbWRfd2l0aF9kYXRhX25vbXNnKHN0cnVjdCBwZHNjICpwZHNjLCB1bmlvbiBwZHNfY29yZV9kZXZfY21kICpjbWQsXFxuK1xcdFxcdFxcdFxcdGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBkYXRhX2xlbixcXG4rXFx0XFx0XFx0XFx0dW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgKmNvbXAsIGludCBtYXhfc2Vjb25kcyk7XFxuIGludCBwZHNjX2RldmNtZF9sb2NrZWQoc3RydWN0IHBkc2MgKnBkc2MsIHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgKmNtZCxcXG4gXFx0XFx0ICAgICAgIHVuaW9uIHBkc19jb3JlX2Rldl9jb21wICpjb21wLCBpbnQgbWF4X3NlY29uZHMpO1xcbitpbnQgcGRzY19kZXZjbWRfbG9ja2VkX25vbXNnKHN0cnVjdCBwZHNjICpwZHNjLCB1bmlvbiBwZHNfY29yZV9kZXZfY21kICpjbWQsXFxuK1xcdFxcdFxcdCAgICAgdW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgKmNvbXAsIGludCBtYXhfc2Vjb25kcyk7XFxuIGludCBwZHNjX2RldmNtZF9pbml0KHN0cnVjdCBwZHNjICpwZHNjKTtcXG4gaW50IHBkc2NfZGV2Y21kX3Jlc2V0KHN0cnVjdCBwZHNjICpwZHNjKTtcXG4gaW50IHBkc2NfZGV2X2luaXQoc3RydWN0IHBkc2MgKnBkc2MpO1xcbkBAIC0zMTUsMTEgKzM1NSwyMyBAQCB2b2lkIHBkc2NfcHJvY2Vzc19hZG1pbnEoc3RydWN0IHBkc2NfcWNxICpxY3EpO1xcbiB2b2lkIHBkc2Nfd29ya190aHJlYWQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcXG4gaXJxcmV0dXJuX3QgcGRzY19hZG1pbnFfaXNyKGludCBpcnEsIHZvaWQgKmRhdGEpO1xcbiBcXG4taW50IHBkc2NfZmlybXdhcmVfdXBkYXRlKHN0cnVjdCBwZHNjICpwZHNjLCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3LFxcbitpbnQgcGRzY19maXJtd2FyZV91cGRhdGUoc3RydWN0IHBkc2MgKnBkc2MsXFxuK1xcdFxcdFxcdCBzdHJ1Y3QgZGV2bGlua19mbGFzaF91cGRhdGVfcGFyYW1zICpwYXJhbXMsXFxuIFxcdFxcdFxcdCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xcbitpbnQgcGRzY19nZXRfY29tcG9uZW50X2luZm8oc3RydWN0IHBkc2MgKnBkc2MpO1xcbitjb25zdCBjaGFyICpwZHNjX2Z3X3R5cGVfdG9fbmFtZSh1OCB0eXBlKTtcXG4rdm9pZCBwZHNjX2Z3X2NvbXBvbmVudHNfaW52YWxpZGF0ZShzdHJ1Y3QgcGRzYyAqcGRzYyk7XFxuIFxcbiB2b2lkIHBkc2NfZndfZG93bihzdHJ1Y3QgcGRzYyAqcGRzYyk7XFxuIHZvaWQgcGRzY19md191cChzdHJ1Y3QgcGRzYyAqcGRzYyk7XFxuIHZvaWQgcGRzY19wY2lfcmVzZXRfdGhyZWFkKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XFxuIFxcbit2b2lkIHBkc2NfaG9zdF9tZW1fYWRkKHN0cnVjdCBwZHNjICpwZHNjKTtcXG4rdm9pZCBwZHNjX2hvc3RfbWVtX2ZyZWUoc3RydWN0IHBkc2MgKnBkc2MpO1xcbitcXG4rdm9pZCBwZHNjX2RlZmVycmVkX2RtYV9hZGQoc3RydWN0IHBkc2MgKnBkc2MsIHN0cnVjdCBwZHNjX2RlZmVycmVkX2RtYSAqZW50cnksXFxuK1xcdFxcdFxcdCAgIGRtYV9hZGRyX3QgZG1hX2FkZHIsIHZvaWQgKnZhLCBzaXplX3Qgc2l6ZSxcXG4rXFx0XFx0XFx0ICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKTtcXG4rdm9pZCBwZHNjX2RlZmVycmVkX2RtYV9mcmVlKHN0cnVjdCBwZHNjICpwZHNjKTtcXG4rXFxuICNlbmRpZiAvKiBfUERTQ19IXyAqL1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvZGVidWdmcy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL2RlYnVnZnMuY1xcbmluZGV4IDgxMGEwY2Q5YmNhYzguLmVmMGExYjdkMTU5YjUgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL2RlYnVnZnMuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9kZWJ1Z2ZzLmNcXG5AQCAtMTc4LDMgKzE3OCw0OCBAQCB2b2lkIHBkc2NfZGVidWdmc19kZWxfcWNxKHN0cnVjdCBwZHNjX3FjcSAqcWNxKVxcbiBcXHRkZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmUocWNxLVxcdTAwM2VkZW50cnkpO1xcbiBcXHRxY3EtXFx1MDAzZWRlbnRyeSA9IE5VTEw7XFxuIH1cXG4rXFxuK3N0YXRpYyBpbnQgaG9zdF9tZW1fc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcXG4re1xcbitcXHRzdHJ1Y3QgcGRzYyAqcGRzYyA9IHNlcS1cXHUwMDNlcHJpdmF0ZTtcXG4rXFx0c3RydWN0IHBkc2NfaG9zdF9tZW0gKmhtO1xcbitcXHRpbnQgaTtcXG4rXFxuK1xcdGlmICghcGRzYy1cXHUwMDNlaG9zdF9tZW1fcmVxcyB8fCBwZHNjLVxcdTAwM2VudW1faG9zdF9tZW1fcmVxcyA9PSAwKSB7XFxuK1xcdFxcdHNlcV9wdXRzKHNlcSwgXFxcIk5vIGhvc3QgbWVtb3J5IGFsbG9jYXRlZFxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHR9XFxuK1xcbitcXHRzZXFfcHJpbnRmKHNlcSwgXFxcIkhvc3QgbWVtb3J5IHJlcXVlc3RzOiAldVxcXFxuXFxcXG5cXFwiLFxcbitcXHRcXHQgICBwZHNjLVxcdTAwM2VudW1faG9zdF9tZW1fcmVxcyk7XFxuK1xcdHNlcV9wdXRzKHNlcSwgXFxcIlRhZyAgICBTaXplICAgICAgICAgT3JkZXIgIFBBXFxcXG5cXFwiKTtcXG4rXFx0c2VxX3B1dHMoc2VxLCBcXFwiLS0tICAgIC0tLS0gICAgICAgICAtLS0tLSAgLS1cXFxcblxcXCIpO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHBkc2MtXFx1MDAzZW51bV9ob3N0X21lbV9yZXFzOyBpKyspIHtcXG4rXFx0XFx0aG0gPSBcXHUwMDI2cGRzYy1cXHUwMDNlaG9zdF9tZW1fcmVxc1tpXTtcXG4rXFxuK1xcdFxcdGlmICghaG0tXFx1MDAzZXBnKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdHNlcV9wcmludGYoc2VxLCBcXFwiJS02dSAlLTEydSAlLTZ1ICVwYWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgIGhtLVxcdTAwM2V0YWcsIGhtLVxcdTAwM2VzaXplLCBobS1cXHUwMDNlb3JkZXIsIFxcdTAwMjZobS1cXHUwMDNlcGEpO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitERUZJTkVfU0hPV19BVFRSSUJVVEUoaG9zdF9tZW0pO1xcbitcXG4rdm9pZCBwZHNjX2RlYnVnZnNfYWRkX2hvc3RfbWVtKHN0cnVjdCBwZHNjICpwZHNjKVxcbit7XFxuK1xcdGlmICghKHBkc2MtXFx1MDAzZWRldl9pZGVudC5jYXBhYmlsaXRpZXMgXFx1MDAyNlxcbitcXHQgICAgIGNwdV90b19sZTY0KFBEU19DT1JFX0RFVl9DQVBfSE9TVF9NRU0pKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0ZGVidWdmc19jcmVhdGVfZmlsZShcXFwiaG9zdF9tZW1cXFwiLCAwNDAwLCBwZHNjLVxcdTAwM2VkZW50cnksXFxuK1xcdFxcdFxcdCAgICBwZHNjLCBcXHUwMDI2aG9zdF9tZW1fZm9wcyk7XFxuK31cXG4rXFxuK3ZvaWQgcGRzY19kZWJ1Z2ZzX2RlbF9ob3N0X21lbShzdHJ1Y3QgcGRzYyAqcGRzYylcXG4re1xcbitcXHRkZWJ1Z2ZzX2xvb2t1cF9hbmRfcmVtb3ZlKFxcXCJob3N0X21lbVxcXCIsIHBkc2MtXFx1MDAzZWRlbnRyeSk7XFxuK31cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL2Rldi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL2Rldi5jXFxuaW5kZXggYmRlZDZiMzMyODljZS4uYzUwNzc4MTc1ZTJmMyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvZGV2LmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvZGV2LmNcXG5AQCAtMTI2LDcgKzEyNiw4IEBAIHN0YXRpYyBjb25zdCBjaGFyICpwZHNjX2RldmNtZF9zdHIoaW50IG9wY29kZSlcXG4gXFx0fVxcbiB9XFxuIFxcbi1zdGF0aWMgaW50IHBkc2NfZGV2Y21kX3dhaXQoc3RydWN0IHBkc2MgKnBkc2MsIHU4IG9wY29kZSwgaW50IG1heF9zZWNvbmRzKVxcbitzdGF0aWMgaW50IF9fcGRzY19kZXZjbWRfd2FpdChzdHJ1Y3QgcGRzYyAqcGRzYywgdTggb3Bjb2RlLCBpbnQgbWF4X3NlY29uZHMsXFxuK1xcdFxcdFxcdCAgICAgIGNvbnN0IGJvb2wgZG9fbXNnKVxcbiB7XFxuIFxcdHN0cnVjdCBkZXZpY2UgKmRldiA9IHBkc2MtXFx1MDAzZWRldjtcXG4gXFx0dW5zaWduZWQgbG9uZyBzdGFydF90aW1lO1xcbkBAIC0xNzksNyArMTgwLDcgQEAgc3RhdGljIGludCBwZHNjX2RldmNtZF93YWl0KHN0cnVjdCBwZHNjICpwZHNjLCB1OCBvcGNvZGUsIGludCBtYXhfc2Vjb25kcylcXG4gXFxuIFxcdHN0YXR1cyA9IHBkc2NfZGV2Y21kX3N0YXR1cyhwZHNjKTtcXG4gXFx0ZXJyID0gcGRzY19lcnJfdG9fZXJybm8oc3RhdHVzKTtcXG4tXFx0aWYgKGVyciBcXHUwMDI2XFx1MDAyNiBlcnIgIT0gLUVBR0FJTilcXG4rXFx0aWYgKGRvX21zZyBcXHUwMDI2XFx1MDAyNiBlcnIgXFx1MDAyNlxcdTAwMjYgZXJyICE9IC1FQUdBSU4pXFxuIFxcdFxcdGRldl9lcnIoZGV2LCBcXFwiREVWQ01EICVkICVzIGZhaWxlZCwgc3RhdHVzPSVkIGVyciAlZCAlcGVcXFxcblxcXCIsXFxuIFxcdFxcdFxcdG9wY29kZSwgcGRzY19kZXZjbWRfc3RyKG9wY29kZSksIHN0YXR1cywgZXJyLFxcbiBcXHRcXHRcXHRFUlJfUFRSKGVycikpO1xcbkBAIC0xODcsOCArMTg4LDkgQEAgc3RhdGljIGludCBwZHNjX2RldmNtZF93YWl0KHN0cnVjdCBwZHNjICpwZHNjLCB1OCBvcGNvZGUsIGludCBtYXhfc2Vjb25kcylcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG4taW50IHBkc2NfZGV2Y21kX2xvY2tlZChzdHJ1Y3QgcGRzYyAqcGRzYywgdW5pb24gcGRzX2NvcmVfZGV2X2NtZCAqY21kLFxcbi1cXHRcXHQgICAgICAgdW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgKmNvbXAsIGludCBtYXhfc2Vjb25kcylcXG4rc3RhdGljIGludCBfX3Bkc2NfZGV2Y21kX2xvY2tlZChzdHJ1Y3QgcGRzYyAqcGRzYywgdW5pb24gcGRzX2NvcmVfZGV2X2NtZCAqY21kLFxcbitcXHRcXHRcXHRcXHR1bmlvbiBwZHNfY29yZV9kZXZfY29tcCAqY29tcCwgaW50IG1heF9zZWNvbmRzLFxcbitcXHRcXHRcXHRcXHRjb25zdCBib29sIGRvX21zZylcXG4ge1xcbiBcXHRpbnQgZXJyO1xcbiBcXG5AQCAtMTk3LDE2ICsxOTksNjMgQEAgaW50IHBkc2NfZGV2Y21kX2xvY2tlZChzdHJ1Y3QgcGRzYyAqcGRzYywgdW5pb24gcGRzX2NvcmVfZGV2X2NtZCAqY21kLFxcbiBcXG4gXFx0bWVtY3B5X3RvaW8oXFx1MDAyNnBkc2MtXFx1MDAzZWNtZF9yZWdzLVxcdTAwM2VjbWQsIGNtZCwgc2l6ZW9mKCpjbWQpKTtcXG4gXFx0cGRzY19kZXZjbWRfZGJlbGwocGRzYyk7XFxuLVxcdGVyciA9IHBkc2NfZGV2Y21kX3dhaXQocGRzYywgY21kLVxcdTAwM2VvcGNvZGUsIG1heF9zZWNvbmRzKTtcXG4rXFx0ZXJyID0gX19wZHNjX2RldmNtZF93YWl0KHBkc2MsIGNtZC1cXHUwMDNlb3Bjb2RlLCBtYXhfc2Vjb25kcywgZG9fbXNnKTtcXG4gXFxuIFxcdGlmICgoZXJyID09IC1FTlhJTyB8fCBlcnIgPT0gLUVUSU1FRE9VVCkgXFx1MDAyNlxcdTAwMjYgcGRzYy1cXHUwMDNld3EpXFxuIFxcdFxcdHF1ZXVlX3dvcmsocGRzYy1cXHUwMDNld3EsIFxcdTAwMjZwZHNjLVxcdTAwM2VoZWFsdGhfd29yayk7XFxuIFxcdGVsc2VcXG4gXFx0XFx0bWVtY3B5X2Zyb21pbyhjb21wLCBcXHUwMDI2cGRzYy1cXHUwMDNlY21kX3JlZ3MtXFx1MDAzZWNvbXAsIHNpemVvZigqY29tcCkpO1xcbiBcXG4rXFx0aWYgKGVyciAhPSAtRVRJTUVET1VUIFxcdTAwMjZcXHUwMDI2IGVyciAhPSAtRUFHQUlOKVxcbitcXHRcXHRwZHNjX2RlZmVycmVkX2RtYV9mcmVlKHBkc2MpO1xcbitcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG4rdm9pZCBwZHNjX2RlZmVycmVkX2RtYV9hZGQoc3RydWN0IHBkc2MgKnBkc2MsIHN0cnVjdCBwZHNjX2RlZmVycmVkX2RtYSAqZW50cnksXFxuK1xcdFxcdFxcdCAgIGRtYV9hZGRyX3QgZG1hX2FkZHIsIHZvaWQgKnZhLCBzaXplX3Qgc2l6ZSxcXG4rXFx0XFx0XFx0ICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKVxcbit7XFxuK1xcdGVudHJ5LVxcdTAwM2VkbWFfYWRkciA9IGRtYV9hZGRyO1xcbitcXHRlbnRyeS1cXHUwMDNldmEgPSB2YTtcXG4rXFx0ZW50cnktXFx1MDAzZXNpemUgPSBzaXplO1xcbitcXHRlbnRyeS1cXHUwMDNlZGlyID0gZGlyO1xcbitcXG4rXFx0c3Bpbl9sb2NrKFxcdTAwMjZwZHNjLVxcdTAwM2VkZWZlcnJlZF9kbWFfbG9jayk7XFxuK1xcdGxpc3RfYWRkX3RhaWwoXFx1MDAyNmVudHJ5LVxcdTAwM2VsaXN0LCBcXHUwMDI2cGRzYy1cXHUwMDNlZGVmZXJyZWRfZG1hX2xpc3QpO1xcbitcXHRzcGluX3VubG9jayhcXHUwMDI2cGRzYy1cXHUwMDNlZGVmZXJyZWRfZG1hX2xvY2spO1xcbit9XFxuK1xcbit2b2lkIHBkc2NfZGVmZXJyZWRfZG1hX2ZyZWUoc3RydWN0IHBkc2MgKnBkc2MpXFxuK3tcXG4rXFx0c3RydWN0IHBkc2NfZGVmZXJyZWRfZG1hICplbnRyeSwgKnRtcDtcXG4rXFx0TElTVF9IRUFEKGxvY2FsX2xpc3QpO1xcbitcXG4rXFx0c3Bpbl9sb2NrKFxcdTAwMjZwZHNjLVxcdTAwM2VkZWZlcnJlZF9kbWFfbG9jayk7XFxuK1xcdGxpc3Rfc3BsaWNlX2luaXQoXFx1MDAyNnBkc2MtXFx1MDAzZWRlZmVycmVkX2RtYV9saXN0LCBcXHUwMDI2bG9jYWxfbGlzdCk7XFxuK1xcdHNwaW5fdW5sb2NrKFxcdTAwMjZwZHNjLVxcdTAwM2VkZWZlcnJlZF9kbWFfbG9jayk7XFxuK1xcbitcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZW50cnksIHRtcCwgXFx1MDAyNmxvY2FsX2xpc3QsIGxpc3QpIHtcXG4rXFx0XFx0ZG1hX3VubWFwX3NpbmdsZShwZHNjLVxcdTAwM2VkZXYsIGVudHJ5LVxcdTAwM2VkbWFfYWRkcixcXG4rXFx0XFx0XFx0XFx0IGVudHJ5LVxcdTAwM2VzaXplLCBlbnRyeS1cXHUwMDNlZGlyKTtcXG4rXFx0XFx0a2ZyZWUoZW50cnktXFx1MDAzZXZhKTtcXG4rXFx0XFx0bGlzdF9kZWwoXFx1MDAyNmVudHJ5LVxcdTAwM2VsaXN0KTtcXG4rXFx0XFx0a2ZyZWUoZW50cnkpO1xcbitcXHR9XFxuK31cXG4rXFxuK2ludCBwZHNjX2RldmNtZF9sb2NrZWQoc3RydWN0IHBkc2MgKnBkc2MsIHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgKmNtZCxcXG4rXFx0XFx0ICAgICAgIHVuaW9uIHBkc19jb3JlX2Rldl9jb21wICpjb21wLCBpbnQgbWF4X3NlY29uZHMpXFxuK3tcXG4rXFx0cmV0dXJuIF9fcGRzY19kZXZjbWRfbG9ja2VkKHBkc2MsIGNtZCwgY29tcCwgbWF4X3NlY29uZHMsIHRydWUpO1xcbit9XFxuK1xcbitpbnQgcGRzY19kZXZjbWRfbG9ja2VkX25vbXNnKHN0cnVjdCBwZHNjICpwZHNjLCB1bmlvbiBwZHNfY29yZV9kZXZfY21kICpjbWQsXFxuK1xcdFxcdFxcdCAgICAgdW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgKmNvbXAsIGludCBtYXhfc2Vjb25kcylcXG4re1xcbitcXHRyZXR1cm4gX19wZHNjX2RldmNtZF9sb2NrZWQocGRzYywgY21kLCBjb21wLCBtYXhfc2Vjb25kcywgZmFsc2UpO1xcbit9XFxuK1xcbiBpbnQgcGRzY19kZXZjbWQoc3RydWN0IHBkc2MgKnBkc2MsIHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgKmNtZCxcXG4gXFx0XFx0dW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgKmNvbXAsIGludCBtYXhfc2Vjb25kcylcXG4ge1xcbkBAIC0yMTksNiArMjY4LDQ3IEBAIGludCBwZHNjX2RldmNtZChzdHJ1Y3QgcGRzYyAqcGRzYywgdW5pb24gcGRzX2NvcmVfZGV2X2NtZCAqY21kLFxcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IF9fcGRzY19kZXZjbWRfd2l0aF9kYXRhKHN0cnVjdCBwZHNjICpwZHNjLFxcbitcXHRcXHRcXHRcXHQgICB1bmlvbiBwZHNfY29yZV9kZXZfY21kICpjbWQsXFxuK1xcdFxcdFxcdFxcdCAgIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBkYXRhX2xlbixcXG4rXFx0XFx0XFx0XFx0ICAgdW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgKmNvbXAsXFxuK1xcdFxcdFxcdFxcdCAgIGludCBtYXhfc2Vjb25kcywgYm9vbCBkb19tc2cpXFxuK3tcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnBkc2MtXFx1MDAzZWRldmNtZF9sb2NrKTtcXG4rXFx0aWYgKCFwZHNjLVxcdTAwM2VjbWRfcmVncykge1xcbitcXHRcXHRlcnIgPSAtRU5YSU87XFxuK1xcdFxcdGdvdG8gdW5sb2NrO1xcbitcXHR9XFxuK1xcdGlmIChkYXRhX2xlbiBcXHUwMDNlIHNpemVvZihwZHNjLVxcdTAwM2VjbWRfcmVncy1cXHUwMDNlZGF0YSkpIHtcXG4rXFx0XFx0ZXJyID0gLUVOT1NQQztcXG4rXFx0XFx0Z290byB1bmxvY2s7XFxuK1xcdH1cXG4rXFx0bWVtY3B5X3RvaW8oXFx1MDAyNnBkc2MtXFx1MDAzZWNtZF9yZWdzLVxcdTAwM2VkYXRhLCBkYXRhLCBkYXRhX2xlbik7XFxuK1xcdGVyciA9IF9fcGRzY19kZXZjbWRfbG9ja2VkKHBkc2MsIGNtZCwgY29tcCwgbWF4X3NlY29uZHMsIGRvX21zZyk7XFxuK3VubG9jazpcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwZHNjLVxcdTAwM2VkZXZjbWRfbG9jayk7XFxuK1xcbitcXHRyZXR1cm4gZXJyO1xcbit9XFxuK1xcbitpbnQgcGRzY19kZXZjbWRfd2l0aF9kYXRhKHN0cnVjdCBwZHNjICpwZHNjLCB1bmlvbiBwZHNfY29yZV9kZXZfY21kICpjbWQsXFxuK1xcdFxcdFxcdCAgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGRhdGFfbGVuLFxcbitcXHRcXHRcXHQgIHVuaW9uIHBkc19jb3JlX2Rldl9jb21wICpjb21wLCBpbnQgbWF4X3NlY29uZHMpXFxuK3tcXG4rXFx0cmV0dXJuIF9fcGRzY19kZXZjbWRfd2l0aF9kYXRhKHBkc2MsIGNtZCwgZGF0YSwgZGF0YV9sZW4sXFxuK1xcdFxcdFxcdFxcdCAgICAgICBjb21wLCBtYXhfc2Vjb25kcywgdHJ1ZSk7XFxuK31cXG4rXFxuK2ludCBwZHNjX2RldmNtZF93aXRoX2RhdGFfbm9tc2coc3RydWN0IHBkc2MgKnBkc2MsIHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgKmNtZCxcXG4rXFx0XFx0XFx0XFx0Y29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGRhdGFfbGVuLFxcbitcXHRcXHRcXHRcXHR1bmlvbiBwZHNfY29yZV9kZXZfY29tcCAqY29tcCwgaW50IG1heF9zZWNvbmRzKVxcbit7XFxuK1xcdHJldHVybiBfX3Bkc2NfZGV2Y21kX3dpdGhfZGF0YShwZHNjLCBjbWQsIGRhdGEsIGRhdGFfbGVuLFxcbitcXHRcXHRcXHRcXHQgICAgICAgY29tcCwgbWF4X3NlY29uZHMsIGZhbHNlKTtcXG4rfVxcbitcXG4gaW50IHBkc2NfZGV2Y21kX2luaXQoc3RydWN0IHBkc2MgKnBkc2MpXFxuIHtcXG4gXFx0dW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgY29tcCA9IHt9O1xcbkBAIC0yNDIsMTUgKzMzMiwxNyBAQCBpbnQgcGRzY19kZXZjbWRfcmVzZXQoc3RydWN0IHBkc2MgKnBkc2MpXFxuIFxcdHJldHVybiBwZHNjX2RldmNtZChwZHNjLCBcXHUwMDI2Y21kLCBcXHUwMDI2Y29tcCwgcGRzYy1cXHUwMDNlZGV2Y21kX3RpbWVvdXQpO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IHBkc2NfZGV2Y21kX2lkZW50aWZ5X2xvY2tlZChzdHJ1Y3QgcGRzYyAqcGRzYylcXG4rc3RhdGljIGludCBwZHNjX2RldmNtZF9pZGVudGlmeV9sb2NrZWQoc3RydWN0IHBkc2MgKnBkc2MsIHU4IGRydl9pZGVudF92ZXIsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBib29sIGRvX21zZylcXG4ge1xcbiBcXHR1bmlvbiBwZHNfY29yZV9kZXZfY29tcCBjb21wID0ge307XFxuIFxcdHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgY21kID0ge1xcbiBcXHRcXHQuaWRlbnRpZnkub3Bjb2RlID0gUERTX0NPUkVfQ01EX0lERU5USUZZLFxcbi1cXHRcXHQuaWRlbnRpZnkudmVyID0gUERTX0NPUkVfSURFTlRJVFlfVkVSU0lPTl8xLFxcbitcXHRcXHQuaWRlbnRpZnkudmVyID0gZHJ2X2lkZW50X3ZlcixcXG4gXFx0fTtcXG4gXFxuLVxcdHJldHVybiBwZHNjX2RldmNtZF9sb2NrZWQocGRzYywgXFx1MDAyNmNtZCwgXFx1MDAyNmNvbXAsIHBkc2MtXFx1MDAzZWRldmNtZF90aW1lb3V0KTtcXG4rXFx0cmV0dXJuIF9fcGRzY19kZXZjbWRfbG9ja2VkKHBkc2MsIFxcdTAwMjZjbWQsIFxcdTAwMjZjb21wLCBwZHNjLVxcdTAwM2VkZXZjbWRfdGltZW91dCxcXG4rXFx0XFx0XFx0XFx0ICAgIGRvX21zZyk7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIHBkc2NfaW5pdF9kZXZpbmZvKHN0cnVjdCBwZHNjICpwZHNjKVxcbkBAIC0yNzMsOCArMzY1LDkgQEAgc3RhdGljIHZvaWQgcGRzY19pbml0X2RldmluZm8oc3RydWN0IHBkc2MgKnBkc2MpXFxuIFxcdGRldl9kYmcocGRzYy1cXHUwMDNlZGV2LCBcXFwiZndfdmVyc2lvbiAlc1xcXFxuXFxcIiwgcGRzYy1cXHUwMDNlZGV2X2luZm8uZndfdmVyc2lvbik7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgcGRzY19pZGVudGlmeShzdHJ1Y3QgcGRzYyAqcGRzYylcXG4rc3RhdGljIGludCBwZHNjX2lkZW50aWZ5X3ZlcihzdHJ1Y3QgcGRzYyAqcGRzYywgdTggZHJ2X2lkZW50X3ZlcilcXG4ge1xcbitcXHRib29sIGRvX21zZyA9IGRydl9pZGVudF92ZXIgPT0gUERTX0NPUkVfSURFTlRJVFlfVkVSU0lPTl8xO1xcbiBcXHRzdHJ1Y3QgcGRzX2NvcmVfZHJ2X2lkZW50aXR5IGRydiA9IHt9O1xcbiBcXHRzaXplX3Qgc3o7XFxuIFxcdGludCBlcnI7XFxuQEAgLTI5NywxOSArMzkwLDIyIEBAIHN0YXRpYyBpbnQgcGRzY19pZGVudGlmeShzdHJ1Y3QgcGRzYyAqcGRzYylcXG4gXFx0c3ogPSBtaW5fdChzaXplX3QsIHNpemVvZihkcnYpLCBzaXplb2YocGRzYy1cXHUwMDNlY21kX3JlZ3MtXFx1MDAzZWRhdGEpKTtcXG4gXFx0bWVtY3B5X3RvaW8oXFx1MDAyNnBkc2MtXFx1MDAzZWNtZF9yZWdzLVxcdTAwM2VkYXRhLCBcXHUwMDI2ZHJ2LCBzeik7XFxuIFxcbi1cXHRlcnIgPSBwZHNjX2RldmNtZF9pZGVudGlmeV9sb2NrZWQocGRzYyk7XFxuK1xcdGVyciA9IHBkc2NfZGV2Y21kX2lkZW50aWZ5X2xvY2tlZChwZHNjLCBkcnZfaWRlbnRfdmVyLCBkb19tc2cpO1xcbiBcXHRpZiAoIWVycikge1xcbiBcXHRcXHRzeiA9IG1pbl90KHNpemVfdCwgc2l6ZW9mKHBkc2MtXFx1MDAzZWRldl9pZGVudCksXFxuIFxcdFxcdFxcdCAgIHNpemVvZihwZHNjLVxcdTAwM2VjbWRfcmVncy1cXHUwMDNlZGF0YSkpO1xcbiBcXHRcXHRtZW1jcHlfZnJvbWlvKFxcdTAwMjZwZHNjLVxcdTAwM2VkZXZfaWRlbnQsIFxcdTAwMjZwZHNjLVxcdTAwM2VjbWRfcmVncy1cXHUwMDNlZGF0YSwgc3opO1xcbitcXG4rXFx0XFx0LyogVjEgZmlybXdhcmUgZG9lc24ndCBzZXQgY2FwYWJpbGl0aWVzLCBzbyB0aGUgZmllbGQgbWF5XFxuK1xcdFxcdCAqIGNvbnRhaW4gZ2FyYmFnZSBmcm9tIHRoZSBvdXRnb2luZyBkcml2ZXIgaWRlbnRpdHkuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAocGRzYy1cXHUwMDNlZGV2X2lkZW50LnZlcnNpb24gXFx1MDAzYyBQRFNfQ09SRV9JREVOVElUWV9WRVJTSU9OXzIpXFxuK1xcdFxcdFxcdHBkc2MtXFx1MDAzZWRldl9pZGVudC5jYXBhYmlsaXRpZXMgPSAwO1xcbiBcXHR9XFxuIFxcdG11dGV4X3VubG9jayhcXHUwMDI2cGRzYy1cXHUwMDNlZGV2Y21kX2xvY2spO1xcbiBcXG4tXFx0aWYgKGVycikge1xcbi1cXHRcXHRkZXZfZXJyKHBkc2MtXFx1MDAzZWRldiwgXFxcIkNhbm5vdCBpZGVudGlmeSBkZXZpY2U6ICVwZVxcXFxuXFxcIixcXG4tXFx0XFx0XFx0RVJSX1BUUihlcnIpKTtcXG4rXFx0aWYgKGVycilcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4tXFx0fVxcbiBcXG4gXFx0aWYgKGlzcHJpbnQocGRzYy1cXHUwMDNlZGV2X2luZm8uZndfdmVyc2lvblswXSkgXFx1MDAyNlxcdTAwMjZcXG4gXFx0ICAgIGlzYXNjaWkocGRzYy1cXHUwMDNlZGV2X2luZm8uZndfdmVyc2lvblswXSkpXFxuQEAgLTMyNiw2ICs0MjIsMjYgQEAgc3RhdGljIGludCBwZHNjX2lkZW50aWZ5KHN0cnVjdCBwZHNjICpwZHNjKVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rc3RhdGljIGludCBwZHNjX2lkZW50aWZ5KHN0cnVjdCBwZHNjICpwZHNjKVxcbit7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHQvKiBPbGRlciBmaXJtd2FyZSByZWplY3RzIGFueXRoaW5nIGJ1dCBQRFNfQ09SRV9JREVOVElUWV9WRVJTSU9OXzFcXG4rXFx0ICogd2l0aCBQRFNfUkNfRVZFUlNJT04gKC1FSU5WQUwpLCBzbyByZXRyeSB3aXRoIFYxIG9uIHZlcnNpb25cXG4rXFx0ICogcmVqZWN0aW9uLiBEb24ndCByZXRyeSBvbiBvdGhlciBlcnJvcnMgbGlrZSAtRU5YSU8vLUVUSU1FRE9VVFxcbitcXHQgKiB3aGljaCBpbmRpY2F0ZSBmaXJtd2FyZSBpcyBub3QgcnVubmluZyBvciBodW5nLlxcbitcXHQgKi9cXG4rXFx0ZXJyID0gcGRzY19pZGVudGlmeV92ZXIocGRzYywgUERTX0NPUkVfSURFTlRJVFlfVkVSU0lPTl8yKTtcXG4rXFx0aWYgKGVyciA9PSAtRUlOVkFMKVxcbitcXHRcXHRlcnIgPSBwZHNjX2lkZW50aWZ5X3ZlcihwZHNjLCBQRFNfQ09SRV9JREVOVElUWV9WRVJTSU9OXzEpO1xcbitcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0ZGV2X2VycihwZHNjLVxcdTAwM2VkZXYsIFxcXCJDYW5ub3QgaWRlbnRpZnkgZGV2aWNlOiAlcGVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdEVSUl9QVFIoZXJyKSk7XFxuK1xcbitcXHRyZXR1cm4gZXJyO1xcbit9XFxuK1xcbiB2b2lkIHBkc2NfZGV2X3VuaW5pdChzdHJ1Y3QgcGRzYyAqcGRzYylcXG4ge1xcbiBcXHRpZiAocGRzYy1cXHUwMDNlaW50cl9pbmZvKSB7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9kZXZsaW5rLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvZGV2bGluay5jXFxuaW5kZXggOGFkYWU3YjE4ODk4ZC4uNjNmZTQ1ZTkxZjcxMCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvZGV2bGluay5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL2RldmxpbmsuY1xcbkBAIC05MCwxMyArOTAsMTEyIEBAIGludCBwZHNjX2RsX2ZsYXNoX3VwZGF0ZShzdHJ1Y3QgZGV2bGluayAqZGwsXFxuIHtcXG4gXFx0c3RydWN0IHBkc2MgKnBkc2MgPSBkZXZsaW5rX3ByaXYoZGwpO1xcbiBcXG4tXFx0aWYgKHBhcmFtcy1cXHUwMDNlY29tcG9uZW50KSB7XFxuLVxcdFxcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXFxuLVxcdFxcdFxcdFxcdCAgIFxcXCJDb21wb25lbnQgdXBkYXRlIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBkZXZpY2VcXFwiKTtcXG4tXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHRyZXR1cm4gcGRzY19maXJtd2FyZV91cGRhdGUocGRzYywgcGFyYW1zLCBleHRhY2spO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHBkc2NfZGxfcmVwb3J0X2NvbXBvbmVudChzdHJ1Y3QgZGV2bGlua19pbmZvX3JlcSAqcmVxLFxcbitcXHRcXHRcXHRcXHQgICAgc3RydWN0IHBkc19jb3JlX2Z3X2NvbXBvbmVudF9pbmZvICppbmZvKVxcbit7XFxuK1xcdGVudW0gZGV2bGlua19pbmZvX3ZlcnNpb25fdHlwZSB2ZXJfdHlwZTtcXG4rXFx0dTE2IGZsYWdzID0gbGUxNl90b19jcHUoaW5mby1cXHUwMDNlZmxhZ3MpO1xcbitcXHRjaGFyICp2ZXIgPSBpbmZvLVxcdTAwM2V2ZXJzaW9uO1xcbitcXHRjb25zdCBjaGFyICpuYW1lO1xcbitcXHRjaGFyIGJ1ZlszMl07XFxuK1xcbitcXHQvKiBNYWluIGZpcm13YXJlIGlzIHJlcG9ydGVkIGFzIGdlbmVyaWMgXFxcImZ3XFxcIiAqL1xcbitcXHRpZiAoaW5mby1cXHUwMDNlY29tcG9uZW50X3R5cGUgPT0gUERTX0NPUkVfRldfVFlQRV9NQUlOKSB7XFxuK1xcdFxcdGlmIChpbmZvLVxcdTAwM2VzbG90X2lkID09IFBEU19DT1JFX0ZXX1NMT1RfR09MRClcXG4rXFx0XFx0XFx0c25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgXFxcImZ3LmdvbGRcXFwiKTtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBcXFwiZndcXFwiKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0bmFtZSA9IHBkc2NfZndfdHlwZV90b19uYW1lKGluZm8tXFx1MDAzZWNvbXBvbmVudF90eXBlKTtcXG4rXFx0XFx0aWYgKCFuYW1lKVxcbitcXHRcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdFxcdGlmIChpbmZvLVxcdTAwM2VzbG90X2lkID09IFBEU19DT1JFX0ZXX1NMT1RfR09MRClcXG4rXFx0XFx0XFx0c25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgXFxcImZ3LiVzLmdvbGRcXFwiLCBuYW1lKTtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBcXFwiZncuJXNcXFwiLCBuYW1lKTtcXG4rXFx0fVxcbitcXG4rXFx0dmVyX3R5cGUgPSBERVZMSU5LX0lORk9fVkVSU0lPTl9UWVBFX05PTkU7XFxuK1xcdGlmIChmbGFncyBcXHUwMDI2IFBEU19DT1JFX0ZXX0NPTVBPTkVOVF9JTkZPX0ZfVVBEQVRFX0JZX05BTUUpXFxuK1xcdFxcdHZlcl90eXBlID0gREVWTElOS19JTkZPX1ZFUlNJT05fVFlQRV9DT01QT05FTlQ7XFxuK1xcbitcXHRpZiAoZmxhZ3MgXFx1MDAyNiBQRFNfQ09SRV9GV19DT01QT05FTlRfSU5GT19GX0ZJWEVEKSB7XFxuK1xcdFxcdGludCBlcnI7XFxuK1xcbitcXHRcXHRlcnIgPSBkZXZsaW5rX2luZm9fdmVyc2lvbl9maXhlZF9wdXQocmVxLCBidWYsIHZlcik7XFxuK1xcdFxcdGlmIChlcnIpXFxuK1xcdFxcdFxcdHJldHVybiBlcnI7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChmbGFncyBcXHUwMDI2IFBEU19DT1JFX0ZXX0NPTVBPTkVOVF9JTkZPX0ZfUlVOTklORykge1xcbitcXHRcXHRpbnQgZXJyO1xcbitcXG4rXFx0XFx0ZXJyID0gZGV2bGlua19pbmZvX3ZlcnNpb25fcnVubmluZ19wdXRfZXh0KHJlcSwgYnVmLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICB2ZXIsIHZlcl90eXBlKTtcXG4rXFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gXFx0fVxcbiBcXG4tXFx0cmV0dXJuIHBkc2NfZmlybXdhcmVfdXBkYXRlKHBkc2MsIHBhcmFtcy1cXHUwMDNlZncsIGV4dGFjayk7XFxuK1xcdGlmIChmbGFncyBcXHUwMDI2IFBEU19DT1JFX0ZXX0NPTVBPTkVOVF9JTkZPX0ZfU1RBUlRVUCkge1xcbitcXHRcXHRpbnQgZXJyO1xcbitcXG4rXFx0XFx0ZXJyID0gZGV2bGlua19pbmZvX3ZlcnNpb25fc3RvcmVkX3B1dF9leHQocmVxLCBidWYsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgdmVyLCB2ZXJfdHlwZSk7XFxuK1xcdFxcdGlmIChlcnIpXFxuK1xcdFxcdFxcdHJldHVybiBlcnI7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHBkc2NfZGxfcmVwb3J0X2Z3X3ZlcihzdHJ1Y3QgZGV2bGlua19pbmZvX3JlcSAqcmVxLCBjaGFyICpmd192ZXIpXFxuK3tcXG4rXFx0cmV0dXJuIGRldmxpbmtfaW5mb192ZXJzaW9uX3J1bm5pbmdfcHV0KHJlcSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0REVWTElOS19JTkZPX1ZFUlNJT05fR0VORVJJQ19GVyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ZndfdmVyKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBwZHNjX2RsX2NvbXBvbmVudF9pbmZvX2dldChzdHJ1Y3QgZGV2bGluayAqZGwsXFxuK1xcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBkZXZsaW5rX2luZm9fcmVxICpyZXEsXFxuK1xcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4re1xcbitcXHRzdHJ1Y3QgcGRzYyAqcGRzYyA9IGRldmxpbmtfcHJpdihkbCk7XFxuK1xcdHU4IG51bV9jb21wb25lbnRzO1xcbitcXHRpbnQgZXJyO1xcbitcXHRpbnQgaTtcXG4rXFxuK1xcdC8qIFBhaXJzIHdpdGggV1JJVEVfT05DRSBpbiBwZHNjX2Z3X2NvbXBvbmVudHNfaW52YWxpZGF0ZSgpLlxcbitcXHQgKiBVc2UgUkVBRF9PTkNFIHRvIGdldCBhIGNvbnNpc3RlbnQgc25hcHNob3Qgb2YgbnVtX2NvbXBvbmVudHMuXFxuK1xcdCAqIHBkc2NfZndfY29tcG9uZW50c19pbnZhbGlkYXRlKCkgY2FuIHplcm8gaXQgY29uY3VycmVudGx5IGR1cmluZ1xcbitcXHQgKiBmaXJtd2FyZSByZWNvdmVyeTsgdXNpbmcgdGhlIGxvY2FsIGNvcHkgYXZvaWRzIGl0ZXJhdGluZyB6ZXJvXFxuK1xcdCAqIHRpbWVzIHdoZW4gd2UgYWxyZWFkeSBkZWNpZGVkIHRoZSBjYWNoZSB3YXMgdmFsaWQuXFxuK1xcdCAqL1xcbitcXHRudW1fY29tcG9uZW50cyA9IFJFQURfT05DRShwZHNjLVxcdTAwM2Vmd19jb21wb25lbnRzLm51bV9jb21wb25lbnRzKTtcXG4rXFx0aWYgKCFudW1fY29tcG9uZW50cykge1xcbitcXHRcXHRlcnIgPSBwZHNjX2dldF9jb21wb25lbnRfaW5mbyhwZHNjKTtcXG4rXFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0cmV0dXJuIHBkc2NfZGxfcmVwb3J0X2Z3X3ZlcihyZXEsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICBwZHNjLVxcdTAwM2VkZXZfaW5mby5md192ZXJzaW9uKTtcXG4rXFx0XFx0bnVtX2NvbXBvbmVudHMgPSBSRUFEX09OQ0UocGRzYy1cXHUwMDNlZndfY29tcG9uZW50cy5udW1fY29tcG9uZW50cyk7XFxuK1xcdFxcdGlmICghbnVtX2NvbXBvbmVudHMpXFxuK1xcdFxcdFxcdHJldHVybiBwZHNjX2RsX3JlcG9ydF9md192ZXIocmVxLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgcGRzYy1cXHUwMDNlZGV2X2luZm8uZndfdmVyc2lvbik7XFxuK1xcdH1cXG4rXFxuK1xcdG51bV9jb21wb25lbnRzID0gbWluX3QodTE2LCBudW1fY29tcG9uZW50cyxcXG4rXFx0XFx0XFx0ICAgICAgIGxlMTZfdG9fY3B1KHBkc2MtXFx1MDAzZWRldl9pZGVudC5tYXhfZndfc2xvdHMpKTtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG51bV9jb21wb25lbnRzOyBpKyspIHtcXG4rXFx0XFx0ZXJyID0gcGRzY19kbF9yZXBvcnRfY29tcG9uZW50KHJlcSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZwZHNjLVxcdTAwM2Vmd19jb21wb25lbnRzLmluZm9baV0pO1xcbitcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4gc3RhdGljIGNoYXIgKmZ3X3Nsb3RuYW1lc1tdID0ge1xcbkBAIC0xMDUsOCArMjA0LDkgQEAgc3RhdGljIGNoYXIgKmZ3X3Nsb3RuYW1lc1tdID0ge1xcbiBcXHRcXFwiZncubWFpbmZ3YlxcXCIsXFxuIH07XFxuIFxcbi1pbnQgcGRzY19kbF9pbmZvX2dldChzdHJ1Y3QgZGV2bGluayAqZGwsIHN0cnVjdCBkZXZsaW5rX2luZm9fcmVxICpyZXEsXFxuLVxcdFxcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbitzdGF0aWMgaW50IHBkc2NfZGxfZndfbGlzdF9pbmZvX2dldChzdHJ1Y3QgZGV2bGluayAqZGwsXFxuK1xcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgZGV2bGlua19pbmZvX3JlcSAqcmVxLFxcbitcXHRcXHRcXHRcXHQgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbiB7XFxuIFxcdHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgY21kID0ge1xcbiBcXHRcXHQuZndfY29udHJvbC5vcGNvZGUgPSBQRFNfQ09SRV9DTURfRldfQ09OVFJPTCxcXG5AQCAtMTQwLDEyICsyNDAsNDEgQEAgaW50IHBkc2NfZGxfaW5mb19nZXQoc3RydWN0IGRldmxpbmsgKmRsLCBzdHJ1Y3QgZGV2bGlua19pbmZvX3JlcSAqcmVxLFxcbiBcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXHR9XFxuIFxcbi1cXHRlcnIgPSBkZXZsaW5rX2luZm9fdmVyc2lvbl9ydW5uaW5nX3B1dChyZXEsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICAgICBERVZMSU5LX0lORk9fVkVSU0lPTl9HRU5FUklDX0ZXLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgICAgcGRzYy1cXHUwMDNlZGV2X2luZm8uZndfdmVyc2lvbik7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHBkc2NfZGxfaW5mb19nZXRfdjEoc3RydWN0IGRldmxpbmsgKmRsLFxcbitcXHRcXHRcXHQgICAgICAgc3RydWN0IGRldmxpbmtfaW5mb19yZXEgKnJlcSxcXG4rXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4re1xcbitcXHRzdHJ1Y3QgcGRzYyAqcGRzYyA9IGRldmxpbmtfcHJpdihkbCk7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHRlcnIgPSBwZHNjX2RsX2Z3X2xpc3RfaW5mb19nZXQoZGwsIHJlcSwgZXh0YWNrKTtcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4gXFxuK1xcdC8qIFZlcnNpb24gMTogcmVwb3J0IGZ3IGZyb20gZGV2X2luZm8gKHJ1bm5pbmcgb25seSkgKi9cXG4rXFx0cmV0dXJuIHBkc2NfZGxfcmVwb3J0X2Z3X3ZlcihyZXEsIHBkc2MtXFx1MDAzZWRldl9pbmZvLmZ3X3ZlcnNpb24pO1xcbit9XFxuK1xcbitpbnQgcGRzY19kbF9pbmZvX2dldChzdHJ1Y3QgZGV2bGluayAqZGwsIHN0cnVjdCBkZXZsaW5rX2luZm9fcmVxICpyZXEsXFxuK1xcdFxcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbit7XFxuK1xcdHN0cnVjdCBwZHNjICpwZHNjID0gZGV2bGlua19wcml2KGRsKTtcXG4rXFx0Y2hhciBidWZbMzJdO1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0aWYgKHBkc2MtXFx1MDAzZWRldl9pZGVudC52ZXJzaW9uIFxcdTAwM2U9IFBEU19DT1JFX0lERU5USVRZX1ZFUlNJT05fMikge1xcbitcXHRcXHRlcnIgPSBwZHNjX2RsX2NvbXBvbmVudF9pbmZvX2dldChkbCwgcmVxLCBleHRhY2spO1xcbitcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRlcnIgPSBwZHNjX2RsX2luZm9fZ2V0X3YxKGRsLCByZXEsIGV4dGFjayk7XFxuK1xcdFxcdGlmIChlcnIpXFxuK1xcdFxcdFxcdHJldHVybiBlcnI7XFxuK1xcdH1cXG4rXFxuIFxcdHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIFxcXCIweCV4XFxcIiwgcGRzYy1cXHUwMDNlZGV2X2luZm8uYXNpY190eXBlKTtcXG4gXFx0ZXJyID0gZGV2bGlua19pbmZvX3ZlcnNpb25fZml4ZWRfcHV0KHJlcSxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICBERVZMSU5LX0lORk9fVkVSU0lPTl9HRU5FUklDX0FTSUNfSUQsXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9mdy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL2Z3LmNcXG5pbmRleCBmYTYyNjcxOWU2OGQxLi41Y2NmMDE3ZjZhZjQ3IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9mdy5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL2Z3LmNcXG5AQCAtMSw2ICsxLDkgQEBcXG4gLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gLyogQ29weXJpZ2h0KGMpIDIwMjMgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jICovXFxuIFxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcGxkbWZ3LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC92bWFsbG9jLmhcXHUwMDNlXFxuK1xcbiAjaW5jbHVkZSBcXFwiY29yZS5oXFxcIlxcbiBcXG4gLyogVGhlIHdvcnN0IGNhc2Ugd2FpdCBmb3IgdGhlIGluc3RhbGwgYWN0aXZpdHkgaXMgYWJvdXQgMjUgbWludXRlcyB3aGVuXFxuQEAgLTE0LDYgKzE3LDU4IEBAXFxuIC8qIE51bWJlciBvZiBwZXJpb2RpYyBsb2cgdXBkYXRlcyBkdXJpbmcgZncgZmlsZSBkb3dubG9hZCAqL1xcbiAjZGVmaW5lIFBEU0NfRldfSU5URVJWQUxfRlJBQ1RJT05cXHQzMlxcbiBcXG4rI2RlZmluZSBQRFNDX0ZXX0NPTVBPTkVOVF9QUkVGSVhcXHRcXHRcXFwiZncuXFxcIlxcbisjZGVmaW5lIFBEU0NfRldfQ09NUE9ORU5UX0ZVTExfTkFNRV9CVUZMRU4gXFxcXFxcbitcXHQoc2l6ZW9mKFBEU0NfRldfQ09NUE9ORU5UX1BSRUZJWCkgKyBQRFNfQ09SRV9GV19DT01QT05FTlRfTkFNRV9CVUZMRU4pXFxuK1xcbisvKiBEcml2ZXItZGVmaW5lZCBjb21wb25lbnQgdHlwZSB0byBuYW1lIG1hcHBpbmcuXFxuKyAqIFBEU19DT1JFX0ZXX1RZUEVfTUFJTiBpcyBOVUxMIC0gaGFuZGxlZCBzcGVjaWFsbHkgYXMgXFxcImZ3XFxcIiB3aXRob3V0IHByZWZpeC5cXG4rICovXFxuK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgcGRzY19md190eXBlX25hbWVzW10gPSB7XFxuK1xcdFtQRFNfQ09SRV9GV19UWVBFX01BSU5dICAgICAgPSBOVUxMLFxcbitcXHRbUERTX0NPUkVfRldfVFlQRV9CT09UXSAgICAgID0gXFxcImJvb3Rsb2FkZXJcXFwiLFxcbitcXHRbUERTX0NPUkVfRldfVFlQRV9DUExEXSAgICAgID0gXFxcImNwbGRcXFwiLFxcbitcXHRbUERTX0NPUkVfRldfVFlQRV9TRUNVUkVdICAgID0gXFxcInNlY3VyZVxcXCIsXFxuK1xcdFtQRFNfQ09SRV9GV19UWVBFX0ZQR0FdICAgICAgPSBcXFwiZnBnYVxcXCIsXFxuK1xcdFtQRFNfQ09SRV9GV19UWVBFX1NVQ19NQUlOXSAgPSBcXFwic3VjXFxcIixcXG4rXFx0W1BEU19DT1JFX0ZXX1RZUEVfU1VDX0JPT1RdICA9IFxcXCJzdWMuYm9vdGxvYWRlclxcXCIsXFxuK1xcdFtQRFNfQ09SRV9GV19UWVBFX1VCT09UXSAgICAgPSBcXFwidWJvb3RcXFwiLFxcbit9O1xcbitcXG4rY29uc3QgY2hhciAqcGRzY19md190eXBlX3RvX25hbWUodTggdHlwZSlcXG4re1xcbitcXHRpZiAodHlwZSBcXHUwMDNjIEFSUkFZX1NJWkUocGRzY19md190eXBlX25hbWVzKSBcXHUwMDI2XFx1MDAyNiBwZHNjX2Z3X3R5cGVfbmFtZXNbdHlwZV0pXFxuK1xcdFxcdHJldHVybiBwZHNjX2Z3X3R5cGVfbmFtZXNbdHlwZV07XFxuK1xcdHJldHVybiBOVUxMO1xcbit9XFxuK1xcbit2b2lkIHBkc2NfZndfY29tcG9uZW50c19pbnZhbGlkYXRlKHN0cnVjdCBwZHNjICpwZHNjKVxcbit7XFxuK1xcdC8qIFBhaXJzIHdpdGggUkVBRF9PTkNFIGluIHBkc2NfZGxfY29tcG9uZW50X2luZm9fZ2V0KCkgKi9cXG4rXFx0V1JJVEVfT05DRShwZHNjLVxcdTAwM2Vmd19jb21wb25lbnRzLm51bV9jb21wb25lbnRzLCAwKTtcXG4rfVxcbitcXG4rc3RhdGljIHU4IHBkc2NfbmFtZV90b19md190eXBlKGNvbnN0IGNoYXIgKm5hbWUpXFxuK3tcXG4rXFx0c2l6ZV90IHByZWZpeF9sZW47XFxuK1xcdGludCBpO1xcbitcXG4rXFx0LyogXFxcImZ3XFxcIiB3aXRob3V0IHN1ZmZpeCBtYXBzIHRvIG1haW4gZmlybXdhcmUgKi9cXG4rXFx0aWYgKCFzdHJjbXAobmFtZSwgXFxcImZ3XFxcIikpXFxuK1xcdFxcdHJldHVybiBQRFNfQ09SRV9GV19UWVBFX01BSU47XFxuK1xcbitcXHRwcmVmaXhfbGVuID0gc3RyX2hhc19wcmVmaXgobmFtZSwgUERTQ19GV19DT01QT05FTlRfUFJFRklYKTtcXG4rXFx0aWYgKHByZWZpeF9sZW4pXFxuK1xcdFxcdG5hbWUgKz0gcHJlZml4X2xlbjtcXG4rXFxuK1xcdGZvciAoaSA9IDE7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKHBkc2NfZndfdHlwZV9uYW1lcyk7IGkrKykge1xcbitcXHRcXHRpZiAocGRzY19md190eXBlX25hbWVzW2ldIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICAhc3RyY21wKG5hbWUsIHBkc2NfZndfdHlwZV9uYW1lc1tpXSkpXFxuK1xcdFxcdFxcdHJldHVybiBpO1xcbitcXHR9XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IHBkc2NfZGV2Y21kX2Z3X2Rvd25sb2FkX2xvY2tlZChzdHJ1Y3QgcGRzYyAqcGRzYywgdTY0IGFkZHIsXFxuIFxcdFxcdFxcdFxcdFxcdCAgdTMyIG9mZnNldCwgdTMyIGxlbmd0aClcXG4ge1xcbkBAIC0yMyw3ICs3OCw3IEBAIHN0YXRpYyBpbnQgcGRzY19kZXZjbWRfZndfZG93bmxvYWRfbG9ja2VkKHN0cnVjdCBwZHNjICpwZHNjLCB1NjQgYWRkcixcXG4gXFx0XFx0LmZ3X2Rvd25sb2FkLmFkZHIgPSBjcHVfdG9fbGU2NChhZGRyKSxcXG4gXFx0XFx0LmZ3X2Rvd25sb2FkLmxlbmd0aCA9IGNwdV90b19sZTMyKGxlbmd0aCksXFxuIFxcdH07XFxuLVxcdHVuaW9uIHBkc19jb3JlX2Rldl9jb21wIGNvbXA7XFxuK1xcdHVuaW9uIHBkc19jb3JlX2Rldl9jb21wIGNvbXAgPSB7fTtcXG4gXFxuIFxcdHJldHVybiBwZHNjX2RldmNtZF9sb2NrZWQocGRzYywgXFx1MDAyNmNtZCwgXFx1MDAyNmNvbXAsIHBkc2MtXFx1MDAzZWRldmNtZF90aW1lb3V0KTtcXG4gfVxcbkBAIC05NSw5ICsxNTAsMTIgQEAgc3RhdGljIGludCBwZHNjX2Z3X3N0YXR1c19sb25nX3dhaXQoc3RydWN0IHBkc2MgKnBkc2MsXFxuIFxcdHJldHVybiBlcnI7XFxuIH1cXG4gXFxuLWludCBwZHNjX2Zpcm13YXJlX3VwZGF0ZShzdHJ1Y3QgcGRzYyAqcGRzYywgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdyxcXG4tXFx0XFx0XFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4rc3RhdGljIGludFxcbitwZHNjX2xlZ2FjeV9maXJtd2FyZV91cGRhdGUoc3RydWN0IHBkc2MgKnBkc2MsXFxuK1xcdFxcdFxcdCAgICBzdHJ1Y3QgZGV2bGlua19mbGFzaF91cGRhdGVfcGFyYW1zICpwYXJhbXMsXFxuK1xcdFxcdFxcdCAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuIHtcXG4rXFx0Y29uc3Qgc3RydWN0IGZpcm13YXJlICpmdyA9IHBhcmFtcy1cXHUwMDNlZnc7XFxuIFxcdHUzMiBidWZfc3osIGNvcHlfc3osIG9mZnNldDtcXG4gXFx0c3RydWN0IGRldmxpbmsgKmRsO1xcbiBcXHRpbnQgbmV4dF9pbnRlcnZhbDtcXG5AQCAtMTA1LDYgKzE2MywxMiBAQCBpbnQgcGRzY19maXJtd2FyZV91cGRhdGUoc3RydWN0IHBkc2MgKnBkc2MsIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncsXFxuIFxcdGludCBlcnIgPSAwO1xcbiBcXHRpbnQgZndfc2xvdDtcXG4gXFxuK1xcdGlmIChwYXJhbXMtXFx1MDAzZWNvbXBvbmVudCkge1xcbitcXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxcbitcXHRcXHRcXHRcXHQgICBcXFwiQ29tcG9uZW50IHVwZGF0ZSBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgZGV2aWNlXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0fVxcbitcXG4gXFx0ZGV2X2luZm8ocGRzYy1cXHUwMDNlZGV2LCBcXFwiSW5zdGFsbGluZyBmaXJtd2FyZVxcXFxuXFxcIik7XFxuIFxcbiBcXHRpZiAoIXBkc2MtXFx1MDAzZWNtZF9yZWdzKVxcbkBAIC0xOTUsMyArMjU5LDcyOSBAQCBpbnQgcGRzY19maXJtd2FyZV91cGRhdGUoc3RydWN0IHBkc2MgKnBkc2MsIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgIE5VTEwsIDAsIDApO1xcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuK1xcbitzdHJ1Y3QgcGRzY19jb21wb25lbnRfcHJpdiB7XFxuK1xcdHUxNiBjb21wb25lbnRfaWQ7XFxuK1xcdGJvb2wgc2tpcDtcXG4rXFx0c3RydWN0IGxpc3RfaGVhZCBsaXN0X2VudHJ5O1xcbit9O1xcbitcXG4rc3RydWN0IHBkc19jb3JlX2Z3dV9wcml2IHtcXG4rXFx0c3RydWN0IHBsZG1mdyBjb250ZXh0O1xcbitcXHRzdHJ1Y3QgZGV2bGlua19mbGFzaF91cGRhdGVfcGFyYW1zICpwYXJhbXM7XFxuK1xcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaztcXG4rXFx0c3RydWN0IHBkc2MgKnBkc2M7XFxuK1xcdHN0cnVjdCBsaXN0X2hlYWQgY29tcG9uZW50cztcXG4rXFx0Ym9vbCBjb21wb25lbnRfZm91bmQ7XFxuK307XFxuK1xcbitzdGF0aWMgdm9pZCBwZHNjX2ZyZWVfZnd1X3ByaXYoc3RydWN0IHBkc19jb3JlX2Z3dV9wcml2ICpwcml2KVxcbit7XFxuK1xcdHN0cnVjdCBwZHNjX2NvbXBvbmVudF9wcml2ICpjb21wb25lbnRfcHJpdiwgKnRtcDtcXG4rXFxuK1xcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjb21wb25lbnRfcHJpdiwgdG1wLCBcXHUwMDI2cHJpdi1cXHUwMDNlY29tcG9uZW50cyxcXG4rXFx0XFx0XFx0XFx0IGxpc3RfZW50cnkpIHtcXG4rXFx0XFx0bGlzdF9kZWwoXFx1MDAyNmNvbXBvbmVudF9wcml2LVxcdTAwM2VsaXN0X2VudHJ5KTtcXG4rXFx0XFx0a2ZyZWUoY29tcG9uZW50X3ByaXYpO1xcbitcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcGRzY19kZXZjbWRfbWF0Y2hfcmVjb3JkX2Rlc2Moc3RydWN0IHBkc2MgKnBkc2MsIHUxNiBkZXNjX3R5cGUsXFxuK1xcdFxcdFxcdFxcdFxcdCB1MTYgZGVzY19zaXplLCBjb25zdCB1OCAqZGVzY19kYXRhLFxcbitcXHRcXHRcXHRcXHRcXHQgdTggKm1hdGNoKVxcbit7XFxuK1xcdHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgY21kID0ge1xcbitcXHRcXHQubWF0Y2hfcmVjb3JkX2Rlc2Mub3Bjb2RlID0gUERTX0NPUkVfQ01EX01BVENIX1JFQ09SRF9ERVNDLFxcbitcXHRcXHQubWF0Y2hfcmVjb3JkX2Rlc2MudmVyID0gMSxcXG4rXFx0XFx0Lm1hdGNoX3JlY29yZF9kZXNjLnR5cGUgPSBjcHVfdG9fbGUxNihkZXNjX3R5cGUpLFxcbitcXHRcXHQubWF0Y2hfcmVjb3JkX2Rlc2Muc2l6ZSA9IGNwdV90b19sZTE2KGRlc2Nfc2l6ZSksXFxuK1xcdH07XFxuK1xcdHVuaW9uIHBkc19jb3JlX2Rldl9jb21wIGNvbXAgPSB7fTtcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdGVyciA9IHBkc2NfZGV2Y21kX3dpdGhfZGF0YShwZHNjLCBcXHUwMDI2Y21kLCBkZXNjX2RhdGEsIGRlc2Nfc2l6ZSxcXG4rXFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZjb21wLCBwZHNjLVxcdTAwM2VkZXZjbWRfdGltZW91dCk7XFxuK1xcdCptYXRjaCA9IGNvbXAubWF0Y2hfcmVjb3JkX2Rlc2MubWF0Y2g7XFxuK1xcbitcXHRyZXR1cm4gZXJyO1xcbit9XFxuK1xcbitzdGF0aWMgYm9vbCBwZHNjX21hdGNoX3JlY29yZF9kZXNjcyhzdHJ1Y3QgcGxkbWZ3ICpjb250ZXh0LFxcbitcXHRcXHRcXHRcXHQgICAgc3RydWN0IHBsZG1md19yZWNvcmQgKnJlY29yZClcXG4re1xcbitcXHRzdHJ1Y3QgcGRzX2NvcmVfZnd1X3ByaXYgKnByaXYgPVxcbitcXHRcXHRjb250YWluZXJfb2YoY29udGV4dCwgc3RydWN0IHBkc19jb3JlX2Z3dV9wcml2LCBjb250ZXh0KTtcXG4rXFx0c3RydWN0IHBkc2MgKnBkc2MgPSBwcml2LVxcdTAwM2VwZHNjO1xcbitcXHRzdHJ1Y3QgcGxkbWZ3X2Rlc2NfdGx2ICpkZXNjO1xcbitcXG4rXFx0aWYgKCFwbGRtZndfb3BfcGNpX21hdGNoX3JlY29yZChjb250ZXh0LCByZWNvcmQpKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGRlc2MsIFxcdTAwMjZyZWNvcmQtXFx1MDAzZWRlc2NzLCBlbnRyeSkge1xcbitcXHRcXHR1OCBtYXRjaDtcXG4rXFx0XFx0aW50IGVycjtcXG4rXFxuK1xcdFxcdHN3aXRjaCAoZGVzYy1cXHUwMDNldHlwZSkge1xcbitcXHRcXHQvKiBza2lwIHR5cGVzIGNoZWNrZWQgaW4gcGxkbWZ3X29wX3BjaV9tYXRjaF9yZWNvcmQgKi9cXG4rXFx0XFx0Y2FzZSBQTERNX0RFU0NfSURfUENJX1ZFTkRPUl9JRDpcXG4rXFx0XFx0Y2FzZSBQTERNX0RFU0NfSURfUENJX0RFVklDRV9JRDpcXG4rXFx0XFx0Y2FzZSBQTERNX0RFU0NfSURfUENJX1NVQlZFTkRPUl9JRDpcXG4rXFx0XFx0Y2FzZSBQTERNX0RFU0NfSURfUENJX1NVQkRFVl9JRDpcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGlmICghZGVzYy1cXHUwMDNlc2l6ZSlcXG4rXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0XFx0ZXJyID0gcGRzY19kZXZjbWRfbWF0Y2hfcmVjb3JkX2Rlc2MocGRzYywgZGVzYy1cXHUwMDNldHlwZSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgIGRlc2MtXFx1MDAzZXNpemUsIGRlc2MtXFx1MDAzZWRhdGEsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICBcXHUwMDI2bWF0Y2gpO1xcbitcXHRcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdFxcdGRldl9lcnIocGRzYy1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHRcXHRcXFwibWF0Y2hfcmVjb3JkX2Rlc2MgZmFpbGVkIHR5cGU6IDB4JTA0eCBzaXplOiAldSwgZXJyICVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHRkZXNjLVxcdTAwM2V0eXBlLCBkZXNjLVxcdTAwM2VzaXplLCBlcnIpO1xcbitcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdFxcdH1cXG4rXFx0XFx0LyogYWxsIHJlY29yZCBkZXNjcmlwdG9ycyBtdXN0IG1hdGNoICovXFxuK1xcdFxcdGlmICghbWF0Y2gpXFxuK1xcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIHRydWU7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcGRzY19kZXZjbWRfc2VuZF9wYWNrYWdlX2RhdGEoc3RydWN0IHBkc2MgKnBkc2MsIHU2NCBhZGRyLFxcbitcXHRcXHRcXHRcXHRcXHQgdTE2IGxlbmd0aCwgdTE2IG9mZnNldCwgdTE2IHRvdGFsX2xlbilcXG4re1xcbitcXHR1bmlvbiBwZHNfY29yZV9kZXZfY21kIGNtZCA9IHtcXG4rXFx0XFx0LnNlbmRfcGtnX2RhdGEub3Bjb2RlID0gUERTX0NPUkVfQ01EX1NFTkRfUEtHX0RBVEEsXFxuK1xcdFxcdC5zZW5kX3BrZ19kYXRhLnZlciA9IDEsXFxuK1xcdFxcdC5zZW5kX3BrZ19kYXRhLmRhdGFfcGEgPSBjcHVfdG9fbGU2NChhZGRyKSxcXG4rXFx0XFx0LnNlbmRfcGtnX2RhdGEuZGF0YV9sZW4gPSBjcHVfdG9fbGUxNihsZW5ndGgpLFxcbitcXHRcXHQuc2VuZF9wa2dfZGF0YS5vZmZzZXQgPSBjcHVfdG9fbGUxNihvZmZzZXQpLFxcbitcXHRcXHQuc2VuZF9wa2dfZGF0YS50b3RhbF9sZW4gPSBjcHVfdG9fbGUxNih0b3RhbF9sZW4pLFxcbitcXHR9O1xcbitcXHR1bmlvbiBwZHNfY29yZV9kZXZfY29tcCBjb21wID0ge307XFxuK1xcbitcXHRyZXR1cm4gcGRzY19kZXZjbWQocGRzYywgXFx1MDAyNmNtZCwgXFx1MDAyNmNvbXAsIHBkc2MtXFx1MDAzZWRldmNtZF90aW1lb3V0KTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBwZHNjX3NlbmRfcGFja2FnZV9kYXRhKHN0cnVjdCBwbGRtZncgKmNvbnRleHQsIGNvbnN0IHU4ICpkYXRhLFxcbitcXHRcXHRcXHRcXHQgIHUxNiBsZW5ndGgpXFxuK3tcXG4rXFx0c3RydWN0IHBkc19jb3JlX2Z3dV9wcml2ICpwcml2ID1cXG4rXFx0XFx0Y29udGFpbmVyX29mKGNvbnRleHQsIHN0cnVjdCBwZHNfY29yZV9md3VfcHJpdiwgY29udGV4dCk7XFxuK1xcdHN0cnVjdCBwZHNjX2RlZmVycmVkX2RtYSAqZGVmZXJyZWQ7XFxuK1xcdHN0cnVjdCBkZXZpY2UgKmRldiA9IGNvbnRleHQtXFx1MDAzZWRldjtcXG4rXFx0c3RydWN0IHBkc2MgKnBkc2MgPSBwcml2LVxcdTAwM2VwZHNjO1xcbitcXHRkbWFfYWRkcl90IGRtYV9hZGRyO1xcbitcXHR1OCAqcGFja2FnZV9kYXRhO1xcbitcXHR1MzIgb2Zmc2V0O1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0aWYgKCFsZW5ndGgpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0ZGVmZXJyZWQgPSBrbWFsbG9jX29iaigqZGVmZXJyZWQsIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoIWRlZmVycmVkKVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFxuK1xcdHBhY2thZ2VfZGF0YSA9IGttZW1kdXAoZGF0YSwgbGVuZ3RoLCBHRlBfS0VSTkVMKTtcXG4rXFx0aWYgKCFwYWNrYWdlX2RhdGEpIHtcXG4rXFx0XFx0a2ZyZWUoZGVmZXJyZWQpO1xcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0fVxcbitcXG4rXFx0ZG1hX2FkZHIgPSBkbWFfbWFwX3NpbmdsZShkZXYsIHBhY2thZ2VfZGF0YSwgbGVuZ3RoLCBETUFfVE9fREVWSUNFKTtcXG4rXFx0aWYgKGRtYV9tYXBwaW5nX2Vycm9yKGRldiwgZG1hX2FkZHIpKSB7XFxuK1xcdFxcdGRldl9lcnIoZGV2LCBcXFwiRmFpbGVkIHRvIGRtYV9tYXAgcGFja2FnZV9kYXRhIGxlbmd0aCAweCV4XFxcXG5cXFwiLFxcbitcXHRcXHRcXHRsZW5ndGgpO1xcbitcXHRcXHRrZnJlZShwYWNrYWdlX2RhdGEpO1xcbitcXHRcXHRrZnJlZShkZWZlcnJlZCk7XFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHR9XFxuK1xcbitcXHRmb3IgKG9mZnNldCA9IDA7IG9mZnNldCBcXHUwMDNjIGxlbmd0aDsgb2Zmc2V0ICs9IFBEU19QQUdFX1NJWkUpIHtcXG4rXFx0XFx0dTMyIGNvcHlfc3o7XFxuK1xcbitcXHRcXHRjb3B5X3N6ID0gbWluX3QodW5zaWduZWQgaW50LCBQRFNfUEFHRV9TSVpFLCBsZW5ndGggLSBvZmZzZXQpO1xcbitcXHRcXHRlcnIgPSBwZHNjX2RldmNtZF9zZW5kX3BhY2thZ2VfZGF0YShwZHNjLCBkbWFfYWRkciArIG9mZnNldCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgIGNvcHlfc3osIG9mZnNldCwgbGVuZ3RoKTtcXG4rXFx0XFx0aWYgKGVycikge1xcbitcXHRcXHRcXHROTF9TRVRfRVJSX01TR19NT0QocHJpdi1cXHUwMDNlZXh0YWNrLFxcbitcXHRcXHRcXHRcXHRcXHQgICBcXFwiRmFpbGVkIHRvIHNlbmQgcGFja2FnZSBkYXRhXFxcIik7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChlcnIgPT0gLUVUSU1FRE9VVCB8fCBlcnIgPT0gLUVBR0FJTikge1xcbitcXHRcXHRwZHNjX2RlZmVycmVkX2RtYV9hZGQocGRzYywgZGVmZXJyZWQsIGRtYV9hZGRyLFxcbitcXHRcXHRcXHRcXHQgICAgICBwYWNrYWdlX2RhdGEsIGxlbmd0aCwgRE1BX1RPX0RFVklDRSk7XFxuK1xcdFxcdHJldHVybiBlcnI7XFxuK1xcdH1cXG4rXFxuK1xcdGtmcmVlKGRlZmVycmVkKTtcXG4rXFx0ZG1hX3VubWFwX3NpbmdsZShkZXYsIGRtYV9hZGRyLCBsZW5ndGgsIERNQV9UT19ERVZJQ0UpO1xcbitcXHRrZnJlZShwYWNrYWdlX2RhdGEpO1xcbitcXHRyZXR1cm4gZXJyO1xcbit9XFxuK1xcbitzdGF0aWMgYm9vbCBwZHNjX2NvbXBvbmVudF90eXBlX2V4aXN0cyhzdHJ1Y3QgcGRzYyAqcGRzYywgdTggdHlwZSlcXG4re1xcbitcXHRpbnQgaTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBwZHNjLVxcdTAwM2Vmd19jb21wb25lbnRzLm51bV9jb21wb25lbnRzOyBpKyspIHtcXG4rXFx0XFx0aWYgKHBkc2MtXFx1MDAzZWZ3X2NvbXBvbmVudHMuaW5mb1tpXS5jb21wb25lbnRfdHlwZSA9PSB0eXBlKVxcbitcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0fVxcbitcXHRyZXR1cm4gZmFsc2U7XFxuK31cXG4rXFxuK3N0YXRpYyBib29sIHBkc2NfY29tcG9uZW50X2lkX21hdGNoZXNfdHlwZShzdHJ1Y3QgcGRzYyAqcGRzYyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgdTggY29tcG9uZW50X2lkLCB1OCB0eXBlKVxcbit7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHBkc2MtXFx1MDAzZWZ3X2NvbXBvbmVudHMubnVtX2NvbXBvbmVudHM7IGkrKykge1xcbitcXHRcXHRzdHJ1Y3QgcGRzX2NvcmVfZndfY29tcG9uZW50X2luZm8gKmluZm8gPVxcbitcXHRcXHRcXHRcXHUwMDI2cGRzYy1cXHUwMDNlZndfY29tcG9uZW50cy5pbmZvW2ldO1xcbitcXG4rXFx0XFx0aWYgKGluZm8tXFx1MDAzZWlkZW50aWZpZXIgPT0gY29tcG9uZW50X2lkIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICBpbmZvLVxcdTAwM2Vjb21wb25lbnRfdHlwZSA9PSB0eXBlKVxcbitcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0fVxcbitcXHRyZXR1cm4gZmFsc2U7XFxuK31cXG4rXFxuK3N0YXRpYyB1OCBwZHNjX2dldF9jb21wb25lbnRfdHlwZV9ieV9pZChzdHJ1Y3QgcGRzYyAqcGRzYywgdTE2IGNvbXBvbmVudF9pZClcXG4re1xcbitcXHRpbnQgaTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBwZHNjLVxcdTAwM2Vmd19jb21wb25lbnRzLm51bV9jb21wb25lbnRzOyBpKyspIHtcXG4rXFx0XFx0c3RydWN0IHBkc19jb3JlX2Z3X2NvbXBvbmVudF9pbmZvICppbmZvID1cXG4rXFx0XFx0XFx0XFx1MDAyNnBkc2MtXFx1MDAzZWZ3X2NvbXBvbmVudHMuaW5mb1tpXTtcXG4rXFxuK1xcdFxcdGlmIChpbmZvLVxcdTAwM2VpZGVudGlmaWVyID09IGNvbXBvbmVudF9pZClcXG4rXFx0XFx0XFx0cmV0dXJuIGluZm8tXFx1MDAzZWNvbXBvbmVudF90eXBlO1xcbitcXHR9XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgYm9vbCBwZHNjX3NraXBfY29tcG9uZW50KHN0cnVjdCBwZHNfY29yZV9md3VfcHJpdiAqcHJpdixcXG4rXFx0XFx0XFx0XFx0dTE2IGNvbXBvbmVudF9pZClcXG4re1xcbitcXHRzdHJ1Y3QgcGRzY19jb21wb25lbnRfcHJpdiAqY29tcG9uZW50X3ByaXY7XFxuK1xcbitcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGNvbXBvbmVudF9wcml2LCBcXHUwMDI2cHJpdi1cXHUwMDNlY29tcG9uZW50cywgbGlzdF9lbnRyeSkge1xcbitcXHRcXHRpZiAoY29tcG9uZW50X3ByaXYtXFx1MDAzZWNvbXBvbmVudF9pZCA9PSBjb21wb25lbnRfaWQpXFxuK1xcdFxcdFxcdHJldHVybiBjb21wb25lbnRfcHJpdi1cXHUwMDNlc2tpcDtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIGZhbHNlO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHBkc2Nfc2VuZF9jb21wb25lbnRfdGFibGUoc3RydWN0IHBsZG1mdyAqY29udGV4dCxcXG4rXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgcGxkbWZ3X2NvbXBvbmVudCAqY29tcG9uZW50LFxcbitcXHRcXHRcXHRcXHQgICAgIHU4IHRyYW5zZmVyX2ZsYWcpXFxuK3tcXG4rXFx0c3RydWN0IHBkc19jb3JlX2Z3dV9wcml2ICpwcml2ID1cXG4rXFx0XFx0Y29udGFpbmVyX29mKGNvbnRleHQsIHN0cnVjdCBwZHNfY29yZV9md3VfcHJpdiwgY29udGV4dCk7XFxuK1xcdHN0cnVjdCBwZHNfY29yZV9jb21wb25lbnRfdGJsICpjb21wb25lbnRfdGJsO1xcbitcXHRzdHJ1Y3QgcGRzY19jb21wb25lbnRfcHJpdiAqY29tcG9uZW50X3ByaXY7XFxuK1xcdHN0cnVjdCBkZXZpY2UgKmRldiA9IGNvbnRleHQtXFx1MDAzZWRldjtcXG4rXFx0dW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgY29tcCA9IHt9O1xcbitcXHR1bmlvbiBwZHNfY29yZV9kZXZfY21kIGNtZCA9IHt9O1xcbitcXHRzdHJ1Y3QgcGRzYyAqcGRzYyA9IHByaXYtXFx1MDAzZXBkc2M7XFxuK1xcdGJvb2wgc2tpcF9jb21wb25lbnQgPSBmYWxzZTtcXG4rXFx0dTggcmVxdWVzdGVkX3R5cGUgPSAwO1xcbitcXHR1MTYgYnVmX3N6LCB0Ymxfc3o7XFxuK1xcdGludCBlcnIgPSAwO1xcbitcXG4rXFx0ZGV2X2RiZyhkZXYsXFxuK1xcdFxcdFxcXCJjb21wb25lbnQgbmFtZSAlcyBjbGFzc2lmaWNhdGlvbiAldSBpZCAldSBhY3RpdmF0aW9uX21ldGhvZCAldSB2ZXJfbGVuICVkIHZlcl9zdHIgJS4qcyBpbmRleCAldSBzaXplICV1IHRyYW5zZmVyX2ZsYWcgMHglMDJ4XFxcXG5cXFwiLFxcbitcXHRcXHRwcml2LVxcdTAwM2VwYXJhbXMtXFx1MDAzZWNvbXBvbmVudCwgY29tcG9uZW50LVxcdTAwM2VjbGFzc2lmaWNhdGlvbixcXG4rXFx0XFx0Y29tcG9uZW50LVxcdTAwM2VpZGVudGlmaWVyLCBjb21wb25lbnQtXFx1MDAzZWFjdGl2YXRpb25fbWV0aG9kLFxcbitcXHRcXHRjb21wb25lbnQtXFx1MDAzZXZlcnNpb25fbGVuLCBjb21wb25lbnQtXFx1MDAzZXZlcnNpb25fbGVuLFxcbitcXHRcXHRjb21wb25lbnQtXFx1MDAzZXZlcnNpb25fc3RyaW5nLCBjb21wb25lbnQtXFx1MDAzZWluZGV4LFxcbitcXHRcXHRjb21wb25lbnQtXFx1MDAzZWNvbXBvbmVudF9zaXplLCB0cmFuc2Zlcl9mbGFnKTtcXG4rXFxuK1xcdGNvbXBvbmVudF9wcml2ID0ga3phbGxvY19vYmooKmNvbXBvbmVudF9wcml2LCBHRlBfS0VSTkVMKTtcXG4rXFx0aWYgKCFjb21wb25lbnRfcHJpdilcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHRpZiAocHJpdi1cXHUwMDNlcGFyYW1zLVxcdTAwM2Vjb21wb25lbnQpIHtcXG4rXFx0XFx0cmVxdWVzdGVkX3R5cGUgPSBwZHNjX25hbWVfdG9fZndfdHlwZShwcml2LVxcdTAwM2VwYXJhbXMtXFx1MDAzZWNvbXBvbmVudCk7XFxuK1xcdFxcdGlmIChjb21wb25lbnQtXFx1MDAzZWlkZW50aWZpZXIgXFx1MDAzZSBVOF9NQVggfHxcXG4rXFx0XFx0ICAgICFwZHNjX2NvbXBvbmVudF9pZF9tYXRjaGVzX3R5cGUocGRzYyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgIGNvbXBvbmVudC1cXHUwMDNlaWRlbnRpZmllcixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgIHJlcXVlc3RlZF90eXBlKSkge1xcbitcXHRcXHRcXHRza2lwX2NvbXBvbmVudCA9IHRydWU7XFxuK1xcdFxcdFxcdGdvdG8gYWRkX2NvbXBvbmVudF9wcml2O1xcbitcXHRcXHR9XFxuK1xcdFxcdHByaXYtXFx1MDAzZWNvbXBvbmVudF9mb3VuZCA9IHRydWU7XFxuK1xcdH1cXG4rXFxuK1xcdGJ1Zl9zeiA9IHNpemVvZihwZHNjLVxcdTAwM2VjbWRfcmVncy1cXHUwMDNlZGF0YSk7XFxuK1xcdHRibF9zeiA9IHN0cnVjdF9zaXplKGNvbXBvbmVudF90YmwsIHZlcnNpb25fc3RyLFxcbitcXHRcXHRcXHQgICAgIGNvbXBvbmVudC1cXHUwMDNldmVyc2lvbl9sZW4pO1xcbitcXHRpZiAodGJsX3N6IFxcdTAwM2UgYnVmX3N6KSB7XFxuK1xcdFxcdGRldl9lcnIoZGV2LCBcXFwiY29tcG9uZW50X3RibCBzaXplICVkIHRvbyBiaWcsIG1heCBzaXplOiAlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0dGJsX3N6LCBidWZfc3opO1xcbitcXHRcXHRlcnIgPSAtRU5PU1BDO1xcbitcXHRcXHRnb3RvIGZyZWVfY29tcG9uZW50X3ByaXY7XFxuK1xcdH1cXG4rXFx0Y29tcG9uZW50X3RibCA9IGt6YWxsb2ModGJsX3N6LCBHRlBfS0VSTkVMKTtcXG4rXFx0aWYgKCFjb21wb25lbnRfdGJsKSB7XFxuK1xcdFxcdGVyciA9IC1FTk9NRU07XFxuK1xcdFxcdGdvdG8gZnJlZV9jb21wb25lbnRfcHJpdjtcXG4rXFx0fVxcbitcXG4rXFx0Y29tcG9uZW50X3RibC1cXHUwMDNlY29tcGFyaXNvbl9zdGFtcCA9XFxuK1xcdFxcdGNwdV90b19sZTMyKGNvbXBvbmVudC1cXHUwMDNlY29tcGFyaXNvbl9zdGFtcCk7XFxuK1xcdGNvbXBvbmVudF90YmwtXFx1MDAzZWNsYXNzaWZpY2F0aW9uID0gY3B1X3RvX2xlMTYoY29tcG9uZW50LVxcdTAwM2VjbGFzc2lmaWNhdGlvbik7XFxuK1xcdGNvbXBvbmVudF90YmwtXFx1MDAzZWlkZW50aWZpZXIgPSBjcHVfdG9fbGUxNihjb21wb25lbnQtXFx1MDAzZWlkZW50aWZpZXIpO1xcbitcXHRjb21wb25lbnRfdGJsLVxcdTAwM2V0cmFuc2Zlcl9mbGFnID0gdHJhbnNmZXJfZmxhZztcXG4rXFx0Y29tcG9uZW50X3RibC1cXHUwMDNldmVyc2lvbl9zdHJfdHlwZSA9IGNvbXBvbmVudC1cXHUwMDNldmVyc2lvbl90eXBlO1xcbitcXHRjb21wb25lbnRfdGJsLVxcdTAwM2V2ZXJzaW9uX3N0cl9sZW4gPSBjb21wb25lbnQtXFx1MDAzZXZlcnNpb25fbGVuO1xcbitcXHRtZW1jcHkoY29tcG9uZW50X3RibC1cXHUwMDNldmVyc2lvbl9zdHIsIGNvbXBvbmVudC1cXHUwMDNldmVyc2lvbl9zdHJpbmcsXFxuK1xcdCAgICAgICBjb21wb25lbnQtXFx1MDAzZXZlcnNpb25fbGVuKTtcXG4rXFxuK1xcdGNtZC5zZW5kX2NvbXBvbmVudF90Ymwub3Bjb2RlID0gUERTX0NPUkVfQ01EX1NFTkRfQ09NUE9ORU5UX1RCTDtcXG4rXFx0Y21kLnNlbmRfY29tcG9uZW50X3RibC52ZXIgPSAxO1xcbitcXHRjbWQuc2VuZF9jb21wb25lbnRfdGJsLnNsb3RfaWQgPSBQRFNfQ09SRV9GV19TTE9UX0lOVkFMSUQ7XFxuK1xcbitcXHRlcnIgPSBwZHNjX2RldmNtZF93aXRoX2RhdGEocGRzYywgXFx1MDAyNmNtZCwgY29tcG9uZW50X3RibCwgdGJsX3N6LFxcbitcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmNvbXAsIHBkc2MtXFx1MDAzZWRldmNtZF90aW1lb3V0KTtcXG4rXFx0a2ZyZWUoY29tcG9uZW50X3RibCk7XFxuK1xcdGlmIChlcnIpIHtcXG4rXFx0XFx0ZGV2X2VycihkZXYsIFxcXCJGYWlsZWQgc2VuZGluZyBjb21wb25lbnQgdGFibGU6ICVwZVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0RVJSX1BUUihlcnIpKTtcXG4rXFx0XFx0Z290byBmcmVlX2NvbXBvbmVudF9wcml2O1xcbitcXHR9XFxuK1xcbitcXHRza2lwX2NvbXBvbmVudCA9IGNvbXAuc2VuZF9jb21wb25lbnRfdGJsLnJlc3BvbnNlID09IDE7XFxuK1xcbithZGRfY29tcG9uZW50X3ByaXY6XFxuK1xcdGNvbXBvbmVudF9wcml2LVxcdTAwM2Vza2lwID0gc2tpcF9jb21wb25lbnQ7XFxuK1xcdGNvbXBvbmVudF9wcml2LVxcdTAwM2Vjb21wb25lbnRfaWQgPSBjb21wb25lbnQtXFx1MDAzZWlkZW50aWZpZXI7XFxuK1xcdGxpc3RfYWRkKFxcdTAwMjZjb21wb25lbnRfcHJpdi1cXHUwMDNlbGlzdF9lbnRyeSwgXFx1MDAyNnByaXYtXFx1MDAzZWNvbXBvbmVudHMpO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK1xcbitmcmVlX2NvbXBvbmVudF9wcml2OlxcbitcXHRrZnJlZShjb21wb25lbnRfcHJpdik7XFxuK1xcdHJldHVybiBlcnI7XFxuK31cXG4rXFxuK2ludCBwZHNjX2dldF9jb21wb25lbnRfaW5mbyhzdHJ1Y3QgcGRzYyAqcGRzYylcXG4re1xcbitcXHR1bmlvbiBwZHNfY29yZV9kZXZfY21kIGNtZCA9IHtcXG4rXFx0XFx0LmdldF9jb21wb25lbnRfaW5mby5vcGNvZGUgPSBQRFNfQ09SRV9DTURfR0VUX0NPTVBPTkVOVF9JTkZPLFxcbitcXHRcXHQuZ2V0X2NvbXBvbmVudF9pbmZvLnZlciA9IDEsXFxuK1xcdH07XFxuK1xcdHN0cnVjdCBwZHNfY29yZV9jb21wb25lbnRfbGlzdF9pbmZvICpsaXN0X2luZm87XFxuK1xcdHN0cnVjdCBwZHNjX2RlZmVycmVkX2RtYSAqZGVmZXJyZWQ7XFxuK1xcdHVuaW9uIHBkc19jb3JlX2Rldl9jb21wIGNvbXAgPSB7fTtcXG4rXFx0ZG1hX2FkZHJfdCBkbWFfYWRkcjtcXG4rXFx0dTggbnVtX2NvbXBvbmVudHM7XFxuK1xcdGludCBlcnIsIGk7XFxuK1xcbitcXHRkZWZlcnJlZCA9IGttYWxsb2Nfb2JqKCpkZWZlcnJlZCk7XFxuK1xcdGlmICghZGVmZXJyZWQpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0bGlzdF9pbmZvID0ga3phbGxvYyhQRFNfUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTtcXG4rXFx0aWYgKCFsaXN0X2luZm8pIHtcXG4rXFx0XFx0a2ZyZWUoZGVmZXJyZWQpO1xcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0fVxcbitcXG4rXFx0ZG1hX2FkZHIgPSBkbWFfbWFwX3NpbmdsZShwZHNjLVxcdTAwM2VkZXYsIGxpc3RfaW5mbywgUERTX1BBR0VfU0laRSxcXG4rXFx0XFx0XFx0XFx0ICBETUFfRlJPTV9ERVZJQ0UpO1xcbitcXHRpZiAoZG1hX21hcHBpbmdfZXJyb3IocGRzYy1cXHUwMDNlZGV2LCBkbWFfYWRkcikpIHtcXG4rXFx0XFx0ZGV2X2VycihwZHNjLVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdFxcXCJGYWlsZWQgdG8gZG1hX21hcCBjb21wb25lbnRfbGlzdF9pbmZvIGxlbmd0aCAlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0UERTX1BBR0VfU0laRSk7XFxuK1xcdFxcdGtmcmVlKGxpc3RfaW5mbyk7XFxuK1xcdFxcdGtmcmVlKGRlZmVycmVkKTtcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcdH1cXG4rXFxuK1xcdGNtZC5nZXRfY29tcG9uZW50X2luZm8uZGF0YV9sZW4gPSBjcHVfdG9fbGUxNihQRFNfUEFHRV9TSVpFKTtcXG4rXFx0Y21kLmdldF9jb21wb25lbnRfaW5mby5kYXRhX3BhID0gY3B1X3RvX2xlNjQoZG1hX2FkZHIpO1xcbitcXG4rXFx0ZXJyID0gcGRzY19kZXZjbWQocGRzYywgXFx1MDAyNmNtZCwgXFx1MDAyNmNvbXAsIHBkc2MtXFx1MDAzZWRldmNtZF90aW1lb3V0ICogMik7XFxuK1xcdGlmIChlcnIgPT0gLUVUSU1FRE9VVCB8fCBlcnIgPT0gLUVBR0FJTikge1xcbitcXHRcXHRwZHNjX2RlZmVycmVkX2RtYV9hZGQocGRzYywgZGVmZXJyZWQsIGRtYV9hZGRyLCBsaXN0X2luZm8sXFxuK1xcdFxcdFxcdFxcdCAgICAgIFBEU19QQUdFX1NJWkUsIERNQV9GUk9NX0RFVklDRSk7XFxuK1xcdFxcdHJldHVybiBlcnI7XFxuK1xcdH1cXG4rXFxuK1xcdGtmcmVlKGRlZmVycmVkKTtcXG4rXFx0ZG1hX3VubWFwX3NpbmdsZShwZHNjLVxcdTAwM2VkZXYsIGRtYV9hZGRyLCBQRFNfUEFHRV9TSVpFLCBETUFfRlJPTV9ERVZJQ0UpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdGlmIChjb21wLmdldF9jb21wb25lbnRfaW5mby52ZXIgPT0gMCkge1xcbitcXHRcXHQvKiBEb24ndCBzdXBwb3J0IGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgYXMgdmVyc2lvbiAwIGhhc1xcbitcXHRcXHQgKiBhbGlnbm1lbnQgaXNzdWVzLCBzbyBnaXZlIGEgaGludCB0byB1c2VycyB0byB1cGRhdGVcXG4rXFx0XFx0ICogdGhlaXIgZmlybXdhcmVcXG4rXFx0XFx0ICovXFxuK1xcdFxcdGRldl93YXJuX29uY2UocGRzYy1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHQgICAgICBcXFwiSW5jb21wYXRpYmxlIGdldF9jb21wb25lbnRfaW5mbyB2ZXJzaW9uICV1IHJlcG9ydGVkIGJ5IGZpcm13YXJlXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICAgICBjb21wLmdldF9jb21wb25lbnRfaW5mby52ZXIpO1xcbitcXHRcXHRlcnIgPSAwO1xcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0fVxcbitcXG4rXFx0bnVtX2NvbXBvbmVudHMgPSBsaXN0X2luZm8tXFx1MDAzZW51bV9jb21wb25lbnRzO1xcbitcXHRpZiAobnVtX2NvbXBvbmVudHMgXFx1MDAzZSBQRFNfQ09SRV9GV19DT01QT05FTlRfTElTVF9MRU4pIHtcXG4rXFx0XFx0ZXJyID0gLUVOT01FTTtcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdH1cXG4rXFxuK1xcdHBkc2MtXFx1MDAzZWZ3X2NvbXBvbmVudHMubnVtX2NvbXBvbmVudHMgPSBudW1fY29tcG9uZW50cztcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG51bV9jb21wb25lbnRzOyBpKyspIHtcXG4rXFx0XFx0c3RydWN0IHBkc19jb3JlX2Z3X2NvbXBvbmVudF9pbmZvICppbmZvID1cXG4rXFx0XFx0XFx0XFx1MDAyNnBkc2MtXFx1MDAzZWZ3X2NvbXBvbmVudHMuaW5mb1tpXTtcXG4rXFxuK1xcdFxcdG1lbWNweShpbmZvLCBcXHUwMDI2bGlzdF9pbmZvLVxcdTAwM2VpbmZvW2ldLCBzaXplb2YoKmluZm8pKTtcXG4rXFx0XFx0aW5mby1cXHUwMDNldmVyc2lvbltQRFNfQ09SRV9GV19DT01QT05FTlRfVkVSX0JVRkxFTiAtIDFdID0gMDtcXG4rXFx0XFx0aW5mby1cXHUwMDNlbmFtZVtQRFNfQ09SRV9GV19DT01QT05FTlRfTkFNRV9CVUZMRU4gLSAxXSA9IDA7XFxuK1xcdH1cXG4rXFxuK291dDpcXG4rXFx0a2ZyZWUobGlzdF9pbmZvKTtcXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbitcXG4rc3RhdGljIGludCBwZHNjX2RldmNtZF9zZW5kX2NvbXBvbmVudChzdHJ1Y3QgcGRzYyAqcGRzYyxcXG4rXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHBkc19jb3JlX2ZsYXNoX2NvbXBvbmVudCAqaW5mbyxcXG4rXFx0XFx0XFx0XFx0ICAgICAgdTE2IGluZm9fc3osIGRtYV9hZGRyX3QgYWRkciwgdTMyIGxlbmd0aCxcXG4rXFx0XFx0XFx0XFx0ICAgICAgdTMyIG9mZnNldCwgdTE2IHNsb3RfaWQsXFxuK1xcdFxcdFxcdFxcdCAgICAgIHVuaW9uIHBkc19jb3JlX2Rldl9jb21wICpjb21wKVxcbit7XFxuK1xcdHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgY21kID0ge1xcbitcXHRcXHQuc2VuZF9jb21wb25lbnQub3Bjb2RlID0gUERTX0NPUkVfQ01EX1NFTkRfQ09NUE9ORU5ULFxcbitcXHRcXHQuc2VuZF9jb21wb25lbnQudmVyID0gMSxcXG4rXFx0XFx0LnNlbmRfY29tcG9uZW50Lm9wZXJhdGlvbiA9IFBEU19DT1JFX1NFTkRfQ09NUE9ORU5UX1NUQVJULFxcbitcXHRcXHQuc2VuZF9jb21wb25lbnQuZGF0YV9wYSA9IGNwdV90b19sZTY0KGFkZHIpLFxcbitcXHRcXHQuc2VuZF9jb21wb25lbnQuZGF0YV9sZW4gPSBjcHVfdG9fbGUzMihsZW5ndGgpLFxcbitcXHRcXHQuc2VuZF9jb21wb25lbnQub2Zmc2V0ID0gY3B1X3RvX2xlMzIob2Zmc2V0KSxcXG4rXFx0XFx0LnNlbmRfY29tcG9uZW50LnNsb3RfaWQgPSBzbG90X2lkLFxcbitcXHR9O1xcbitcXHR1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSAzMDAgKiBIWjtcXG4rXFx0dW5zaWduZWQgbG9uZyBzdGFydF90aW1lO1xcbitcXHR1bnNpZ25lZCBsb25nIGVuZF90aW1lO1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0c3RhcnRfdGltZSA9IGppZmZpZXM7XFxuK1xcdGVuZF90aW1lID0gc3RhcnRfdGltZSArIHRpbWVvdXQ7XFxuK1xcdGRvIHtcXG4rXFx0XFx0LyogcHJldmVudCBub2lzeS9iZW5pZ24gZGV2Y21kIGZhaWx1cmVzICovXFxuK1xcdFxcdGVyciA9IHBkc2NfZGV2Y21kX3dpdGhfZGF0YV9ub21zZyhwZHNjLCBcXHUwMDI2Y21kLCBpbmZvLCBpbmZvX3N6LFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgIGNvbXAsIDYwKTtcXG4rXFx0XFx0aWYgKGVyciAhPSAtRUFHQUlOKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFxuK1xcdFxcdC8qIGlmIHJlcXVpcmVkLCBzdWJzZXF1ZW50IGNvbW1hbmRzIGNoZWNrIHN0YXR1cyBvZlxcbitcXHRcXHQgKiBQRFNfQ09SRV9DTURfU0VORF9DT01QT05FTlQgY29tbWFuZCwgd2hpY2ggcmV0dXJuc1xcbitcXHRcXHQgKiBFQUdBSU4gd2hpbGUgdGhlIGNvbW1hbmQgaXMgc3RpbGwgcnVubmluZyxcXG4rXFx0XFx0ICogZWxzZSB3ZSBnZXQgdGhlIGZpbmFsIGNvbW1hbmQgc3RhdHVzLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0Y21kLnNlbmRfY29tcG9uZW50Lm9wZXJhdGlvbiA9IFBEU19DT1JFX1NFTkRfQ09NUE9ORU5UX1NUQVRVUztcXG4rXFx0XFx0bXNsZWVwKDIwKTtcXG4rXFx0fSB3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgZW5kX3RpbWUpKTtcXG4rXFxuK1xcdGlmIChlcnIgPT0gLUVBR0FJTiB8fCBlcnIgPT0gLUVUSU1FRE9VVClcXG4rXFx0XFx0ZGV2X2VycihwZHNjLVxcdTAwM2VkZXYsIFxcXCJQRFNfQ09SRV9DTURfU0VORF9DT01QT05FTlQgdGltZWQgb3V0XFxcXG5cXFwiKTtcXG4rXFxuK1xcdHJldHVybiBlcnI7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcGRzY19mbGFzaF9jb21wb25lbnRfY2h1bmsoc3RydWN0IHBkc2MgKnBkc2MsIHN0cnVjdCBkZXZpY2UgKmRldixcXG4rXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHBkc19jb3JlX2ZsYXNoX2NvbXBvbmVudCAqaW5mbyxcXG4rXFx0XFx0XFx0XFx0ICAgICAgdTE2IGluZm9fc3osIGNvbnN0IHU4ICpkYXRhLCB1MTYgY29weV9zeixcXG4rXFx0XFx0XFx0XFx0ICAgICAgdTMyIG9mZnNldCwgdTggc2xvdF9pZCxcXG4rXFx0XFx0XFx0XFx0ICAgICAgdW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgKmNvbXApXFxuK3tcXG4rXFx0c3RydWN0IHBkc2NfZGVmZXJyZWRfZG1hICpkZWZlcnJlZDtcXG4rXFx0ZG1hX2FkZHJfdCBkbWFfYWRkcjtcXG4rXFx0dTggKmNvbXBvbmVudF9kYXRhO1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0ZGVmZXJyZWQgPSBrbWFsbG9jX29iaigqZGVmZXJyZWQsIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoIWRlZmVycmVkKVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFxuK1xcdGNvbXBvbmVudF9kYXRhID0ga21lbWR1cChkYXRhLCBjb3B5X3N6LCBHRlBfS0VSTkVMKTtcXG4rXFx0aWYgKCFjb21wb25lbnRfZGF0YSkge1xcbitcXHRcXHRrZnJlZShkZWZlcnJlZCk7XFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHR9XFxuK1xcbitcXHRkbWFfYWRkciA9IGRtYV9tYXBfc2luZ2xlKGRldiwgY29tcG9uZW50X2RhdGEsIGNvcHlfc3osIERNQV9UT19ERVZJQ0UpO1xcbitcXHRpZiAoZG1hX21hcHBpbmdfZXJyb3IoZGV2LCBkbWFfYWRkcikpIHtcXG4rXFx0XFx0ZGV2X2VycihkZXYsXFxuK1xcdFxcdFxcdFxcXCJGYWlsZWQgdG8gZG1hX21hcCBjb21wb25lbnRfZGF0YSBhdCBvZmZzZXQgMHgleCBjb3B5X3N6IDB4JXhcXFxcblxcXCIsXFxuK1xcdFxcdFxcdG9mZnNldCwgY29weV9zeik7XFxuK1xcdFxcdGtmcmVlKGNvbXBvbmVudF9kYXRhKTtcXG4rXFx0XFx0a2ZyZWUoZGVmZXJyZWQpO1xcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0fVxcbitcXG4rXFx0ZXJyID0gcGRzY19kZXZjbWRfc2VuZF9jb21wb25lbnQocGRzYywgaW5mbywgaW5mb19zeiwgZG1hX2FkZHIsXFxuK1xcdFxcdFxcdFxcdFxcdCBjb3B5X3N6LCBvZmZzZXQsIHNsb3RfaWQsIGNvbXApO1xcbitcXHRpZiAoZXJyID09IC1FVElNRURPVVQgfHwgZXJyID09IC1FQUdBSU4pIHtcXG4rXFx0XFx0cGRzY19kZWZlcnJlZF9kbWFfYWRkKHBkc2MsIGRlZmVycmVkLCBkbWFfYWRkcixcXG4rXFx0XFx0XFx0XFx0ICAgICAgY29tcG9uZW50X2RhdGEsIGNvcHlfc3osIERNQV9UT19ERVZJQ0UpO1xcbitcXHRcXHRyZXR1cm4gZXJyO1xcbitcXHR9XFxuK1xcbitcXHRrZnJlZShkZWZlcnJlZCk7XFxuK1xcdGRtYV91bm1hcF9zaW5nbGUoZGV2LCBkbWFfYWRkciwgY29weV9zeiwgRE1BX1RPX0RFVklDRSk7XFxuK1xcdGtmcmVlKGNvbXBvbmVudF9kYXRhKTtcXG4rXFxuK1xcdHJldHVybiBlcnI7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcGRzY19mbGFzaF9jb21wb25lbnQoc3RydWN0IHBsZG1mdyAqY29udGV4dCxcXG4rXFx0XFx0XFx0XFx0c3RydWN0IHBsZG1md19jb21wb25lbnQgKmNvbXBvbmVudClcXG4re1xcbitcXHRjaGFyIGNvbXBvbmVudF9uYW1lX2J1ZltQRFNDX0ZXX0NPTVBPTkVOVF9GVUxMX05BTUVfQlVGTEVOXTtcXG4rXFx0c3RydWN0IHBkc19jb3JlX2Z3dV9wcml2ICpwcml2ID1cXG4rXFx0XFx0Y29udGFpbmVyX29mKGNvbnRleHQsIHN0cnVjdCBwZHNfY29yZV9md3VfcHJpdiwgY29udGV4dCk7XFxuK1xcdHN0cnVjdCBwZHNfY29yZV9mbGFzaF9jb21wb25lbnQgKmNvbXBvbmVudF9pbmZvO1xcbitcXHRjb25zdCBjaGFyICpjb21wb25lbnRfbmFtZSA9IE5VTEw7XFxuK1xcdHN0cnVjdCBkZXZpY2UgKmRldiA9IGNvbnRleHQtXFx1MDAzZWRldjtcXG4rXFx0c3RydWN0IHBkc2MgKnBkc2MgPSBwcml2LVxcdTAwM2VwZHNjO1xcbitcXHR1MTYgYnVmX3N6LCBpbmZvX3N6O1xcbitcXHRzdHJ1Y3QgZGV2bGluayAqZGw7XFxuK1xcdHU4IGNvbXBvbmVudF90eXBlO1xcbitcXHR1MzIgdG90YWxfbGVuO1xcbitcXHR1MzIgb2Zmc2V0O1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0Y29tcG9uZW50X3R5cGUgPSBwZHNjX2dldF9jb21wb25lbnRfdHlwZV9ieV9pZChwZHNjLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgY29tcG9uZW50LVxcdTAwM2VpZGVudGlmaWVyKTtcXG4rXFx0aWYgKGNvbXBvbmVudF90eXBlKSB7XFxuK1xcdFxcdGNvbnN0IGNoYXIgKnR5cGVfbmFtZSA9IHBkc2NfZndfdHlwZV90b19uYW1lKGNvbXBvbmVudF90eXBlKTtcXG4rXFxuK1xcdFxcdGlmIChjb21wb25lbnRfdHlwZSA9PSBQRFNfQ09SRV9GV19UWVBFX01BSU4pIHtcXG4rXFx0XFx0XFx0Y29tcG9uZW50X25hbWUgPSBcXFwiZndcXFwiO1xcbitcXHRcXHR9IGVsc2UgaWYgKHR5cGVfbmFtZSkge1xcbitcXHRcXHRcXHRzbnByaW50Zihjb21wb25lbnRfbmFtZV9idWYsIHNpemVvZihjb21wb25lbnRfbmFtZV9idWYpLFxcbitcXHRcXHRcXHRcXHQgXFxcIiVzJXNcXFwiLCBQRFNDX0ZXX0NPTVBPTkVOVF9QUkVGSVgsIHR5cGVfbmFtZSk7XFxuK1xcdFxcdFxcdGNvbXBvbmVudF9uYW1lID0gY29tcG9uZW50X25hbWVfYnVmO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdGRsID0gcHJpdl90b19kZXZsaW5rKHBkc2MpO1xcbitcXG4rXFx0aWYgKHBkc2Nfc2tpcF9jb21wb25lbnQocHJpdiwgY29tcG9uZW50LVxcdTAwM2VpZGVudGlmaWVyKSkge1xcbitcXHRcXHRkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9zdGF0dXNfbm90aWZ5KGRsLCBcXFwiU2tpcHBlZFxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgIGNvbXBvbmVudF9uYW1lLCAwLCAwKTtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFxuK1xcdHRvdGFsX2xlbiA9IGNvbXBvbmVudC1cXHUwMDNlY29tcG9uZW50X3NpemU7XFxuK1xcdGRldl9kYmcoZGV2LFxcbitcXHRcXHRcXFwiY29tcG9uZW50IG5hbWUgJXMgY2xhc3MgJXUgaWQgJXUgYWN0X21ldGggJXUgdmVyX3N0ciAlLipzIGluZGV4ICV1IHNpemUgJXVcXFxcblxcXCIsXFxuK1xcdFxcdGNvbXBvbmVudF9uYW1lID86IFxcXCIodW5rbm93bilcXFwiLCBjb21wb25lbnQtXFx1MDAzZWNsYXNzaWZpY2F0aW9uLFxcbitcXHRcXHRjb21wb25lbnQtXFx1MDAzZWlkZW50aWZpZXIsIGNvbXBvbmVudC1cXHUwMDNlYWN0aXZhdGlvbl9tZXRob2QsXFxuK1xcdFxcdGNvbXBvbmVudC1cXHUwMDNldmVyc2lvbl9sZW4sIGNvbXBvbmVudC1cXHUwMDNldmVyc2lvbl9zdHJpbmcsXFxuK1xcdFxcdGNvbXBvbmVudC1cXHUwMDNlaW5kZXgsIGNvbXBvbmVudC1cXHUwMDNlY29tcG9uZW50X3NpemUpO1xcbitcXG4rXFx0YnVmX3N6ID0gc2l6ZW9mKHBkc2MtXFx1MDAzZWNtZF9yZWdzLVxcdTAwM2VkYXRhKTtcXG4rXFx0aW5mb19zeiA9IHN0cnVjdF9zaXplKGNvbXBvbmVudF9pbmZvLCB2ZXJzaW9uX3N0cixcXG4rXFx0XFx0XFx0ICAgICAgY29tcG9uZW50LVxcdTAwM2V2ZXJzaW9uX2xlbik7XFxuK1xcdGlmIChpbmZvX3N6IFxcdTAwM2UgYnVmX3N6KSB7XFxuK1xcdFxcdGRldl9lcnIoZGV2LCBcXFwiY29tcG9uZW50X2luZm8gc2l6ZSAlZCB0b28gYmlnLCBtYXggc2l6ZTogJWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdGluZm9fc3osIGJ1Zl9zeik7XFxuK1xcdFxcdHJldHVybiAtRU5PU1BDO1xcbitcXHR9XFxuK1xcdGNvbXBvbmVudF9pbmZvID0gdnphbGxvYyhpbmZvX3N6KTtcXG4rXFx0aWYgKCFjb21wb25lbnRfaW5mbylcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHRjb21wb25lbnRfaW5mby1cXHUwMDNlY29tcGFyaXNvbl9zdGFtcCA9XFxuK1xcdFxcdGNwdV90b19sZTMyKGNvbXBvbmVudC1cXHUwMDNlY29tcGFyaXNvbl9zdGFtcCk7XFxuK1xcdGNvbXBvbmVudF9pbmZvLVxcdTAwM2VpbWFnZV9zaXplID0gY3B1X3RvX2xlMzIodG90YWxfbGVuKTtcXG4rXFx0Y29tcG9uZW50X2luZm8tXFx1MDAzZWNsYXNzaWZpY2F0aW9uID0gY3B1X3RvX2xlMTYoY29tcG9uZW50LVxcdTAwM2VjbGFzc2lmaWNhdGlvbik7XFxuK1xcdGNvbXBvbmVudF9pbmZvLVxcdTAwM2VpZGVudGlmaWVyID0gY3B1X3RvX2xlMTYoY29tcG9uZW50LVxcdTAwM2VpZGVudGlmaWVyKTtcXG4rXFx0Y29tcG9uZW50X2luZm8tXFx1MDAzZW9wdGlvbnMgPSBjcHVfdG9fbGUxNihjb21wb25lbnQtXFx1MDAzZW9wdGlvbnMpO1xcbitcXHRjb21wb25lbnRfaW5mby1cXHUwMDNldmVyc2lvbl9zdHJfdHlwZSA9IGNvbXBvbmVudC1cXHUwMDNldmVyc2lvbl90eXBlO1xcbitcXHRjb21wb25lbnRfaW5mby1cXHUwMDNldmVyc2lvbl9zdHJfbGVuID0gY29tcG9uZW50LVxcdTAwM2V2ZXJzaW9uX2xlbjtcXG4rXFx0bWVtY3B5KGNvbXBvbmVudF9pbmZvLVxcdTAwM2V2ZXJzaW9uX3N0ciwgY29tcG9uZW50LVxcdTAwM2V2ZXJzaW9uX3N0cmluZyxcXG4rXFx0ICAgICAgIGNvbXBvbmVudC1cXHUwMDNldmVyc2lvbl9sZW4pO1xcbitcXG4rXFx0b2Zmc2V0ID0gMDtcXG4rXFx0d2hpbGUgKG9mZnNldCBcXHUwMDNjIHRvdGFsX2xlbikge1xcbitcXHRcXHR1bmlvbiBwZHNfY29yZV9kZXZfY29tcCBjb21wID0ge307XFxuK1xcdFxcdHUxNiBjb3B5X3N6O1xcbitcXG4rXFx0XFx0Y29weV9zeiA9IG1pbl90KHVuc2lnbmVkIGludCwgUERTX1BBR0VfU0laRSxcXG4rXFx0XFx0XFx0XFx0dG90YWxfbGVuIC0gb2Zmc2V0KTtcXG4rXFxuK1xcdFxcdGVyciA9IHBkc2NfZmxhc2hfY29tcG9uZW50X2NodW5rKHBkc2MsIGRldiwgY29tcG9uZW50X2luZm8sXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCBpbmZvX3N6LFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgY29tcG9uZW50LVxcdTAwM2Vjb21wb25lbnRfZGF0YSArXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCBvZmZzZXQsIGNvcHlfc3osIG9mZnNldCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0IFBEU19DT1JFX0ZXX1NMT1RfSU5WQUxJRCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0IFxcdTAwMjZjb21wKTtcXG4rXFx0XFx0aWYgKGVyciBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgY29tcC5zZW5kX2NvbXBvbmVudC5jb21wYXRfcmVzcG9uc2UgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgIChjb21wLnNlbmRfY29tcG9uZW50LmNvbXBhdF9yZXNwb25zZV9jb2RlID09XFxuK1xcdFxcdCAgICAgUERTX0NPUkVfQ09NUE9ORU5UX1NUQU1QX0lERU5USUNBTCB8fFxcbitcXHRcXHQgICAgIGNvbXAuc2VuZF9jb21wb25lbnQuY29tcGF0X3Jlc3BvbnNlX2NvZGUgPT1cXG4rXFx0XFx0ICAgICBQRFNfQ09SRV9DT01QT05FTlRfU1RBTVBfTE9XRVIpKSB7XFxuK1xcdFxcdFxcdGVyciA9IDA7XFxuK1xcdFxcdFxcdGRldmxpbmtfZmxhc2hfdXBkYXRlX3N0YXR1c19ub3RpZnkoZGwsIFxcXCJTa2lwcGVkXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgY29tcG9uZW50X25hbWUsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIDAsIDApO1xcbitcXHRcXHRcXHRnb3RvIHNraXBfY29tcG9uZW50O1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdFxcdE5MX1NFVF9FUlJfTVNHX01PRChwcml2LVxcdTAwM2VleHRhY2ssXFxuK1xcdFxcdFxcdFxcdFxcdCAgIFxcXCJGYWlsZWQgdG8gZmxhc2ggY29tcG9uZW50XFxcIik7XFxuK1xcdFxcdFxcdGdvdG8gZXJyX291dDtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0b2Zmc2V0ICs9IGNvcHlfc3o7XFxuK1xcdFxcdGRldmxpbmtfZmxhc2hfdXBkYXRlX3N0YXR1c19ub3RpZnkoZGwsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgIFxcXCJFcmFzaW5nL0ZsYXNoaW5nXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgY29tcG9uZW50X25hbWUsIG9mZnNldCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgdG90YWxfbGVuKTtcXG4rXFx0fVxcbitcXG4rXFx0dmZyZWUoY29tcG9uZW50X2luZm8pO1xcbitcXHRyZXR1cm4gMDtcXG4rXFxuK2Vycl9vdXQ6XFxuK1xcdGRldmxpbmtfZmxhc2hfdXBkYXRlX3N0YXR1c19ub3RpZnkoZGwsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIFxcXCJFcmFzaW5nL0ZsYXNoaW5nIENvbXBvbmVudCBGYWlsZWRcXFwiLFxcbitcXHRcXHRcXHRcXHRcXHQgICBjb21wb25lbnRfbmFtZSwgMCwgMCk7XFxuK3NraXBfY29tcG9uZW50OlxcbitcXHR2ZnJlZShjb21wb25lbnRfaW5mbyk7XFxuK1xcdHJldHVybiBlcnI7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcGRzY19kZXZjbWRfZmluYWxpemVfdXBkYXRlKHN0cnVjdCBwZHNjICpwZHNjKVxcbit7XFxuK1xcdHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgY21kID0ge1xcbitcXHRcXHQuZmluYWxpemVfdXBkYXRlLm9wY29kZSA9IFBEU19DT1JFX0NNRF9GSU5BTElaRV9VUERBVEUsXFxuK1xcdFxcdC5maW5hbGl6ZV91cGRhdGUudmVyID0gMSxcXG4rXFx0fTtcXG4rXFx0dW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgY29tcCA9IHt9O1xcbitcXG4rXFx0cmV0dXJuIHBkc2NfZGV2Y21kKHBkc2MsIFxcdTAwMjZjbWQsIFxcdTAwMjZjb21wLCBwZHNjLVxcdTAwM2VkZXZjbWRfdGltZW91dCk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcGRzY19maW5hbGl6ZV91cGRhdGUoc3RydWN0IHBsZG1mdyAqY29udGV4dClcXG4re1xcbitcXHRzdHJ1Y3QgcGRzX2NvcmVfZnd1X3ByaXYgKnByaXYgPVxcbitcXHRcXHRjb250YWluZXJfb2YoY29udGV4dCwgc3RydWN0IHBkc19jb3JlX2Z3dV9wcml2LCBjb250ZXh0KTtcXG4rXFx0Y29uc3QgY2hhciAqY29tcG9uZW50X25hbWUgPSBwcml2LVxcdTAwM2VwYXJhbXMtXFx1MDAzZWNvbXBvbmVudDtcXG4rXFx0dW5zaWduZWQgbG9uZyBzdGFydF90aW1lLCBlbmRfdGltZTtcXG4rXFx0c3RydWN0IGRldmljZSAqZGV2ID0gY29udGV4dC1cXHUwMDNlZGV2O1xcbitcXHRzdHJ1Y3QgcGRzYyAqcGRzYyA9IHByaXYtXFx1MDAzZXBkc2M7XFxuK1xcdHN0cnVjdCBkZXZsaW5rICpkbDtcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdGRsID0gcHJpdl90b19kZXZsaW5rKHBkc2MpO1xcbitcXG4rXFx0c3RhcnRfdGltZSA9IGppZmZpZXM7XFxuK1xcdGVuZF90aW1lID0gc3RhcnRfdGltZSArIChQRFNDX0ZXX0lOU1RBTExfVElNRU9VVCAqIEhaKTtcXG4rXFx0ZG8ge1xcbitcXHRcXHRlcnIgPSBwZHNjX2RldmNtZF9maW5hbGl6ZV91cGRhdGUocGRzYyk7XFxuK1xcdFxcdGlmIChlcnIgIT0gLUVBR0FJTilcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcbitcXHRcXHRkZXZfZGJnKGRldiwgXFxcInJldHJ5aW5nIGZpbmFsaXplX3VwZGF0ZTogJXBlXFxcXG5cXFwiLCBFUlJfUFRSKGVycikpO1xcbitcXHRcXHRtc2xlZXAoMjApO1xcbitcXHR9IHdoaWxlICh0aW1lX2JlZm9yZShqaWZmaWVzLCBlbmRfdGltZSkgXFx1MDAyNlxcdTAwMjYgZXJyID09IC1FQUdBSU4pO1xcbitcXG4rXFx0aWYgKGVycikge1xcbitcXHRcXHRkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9zdGF0dXNfbm90aWZ5KGRsLCBcXFwiRmluYWxpemUgVXBkYXRlIEZhaWxlZFxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgIGNvbXBvbmVudF9uYW1lLCAwLCAwKTtcXG4rXFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKHByaXYtXFx1MDAzZWV4dGFjaywgXFxcIkZpbmFsaXplIHVwZGF0ZSBmYWlsZWRcXFwiKTtcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0fVxcbitcXG4rXFx0ZGV2bGlua19mbGFzaF91cGRhdGVfc3RhdHVzX25vdGlmeShkbCwgXFxcIkZpbmFsaXplZCBVcGRhdGVcXFwiLFxcbitcXHRcXHRcXHRcXHRcXHQgICBjb21wb25lbnRfbmFtZSwgMCwgMCk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IHBsZG1md19vcHMgcGRzY19wbGRtZndfb3BzID0ge1xcbitcXHQubWF0Y2hfcmVjb3JkID0gcGRzY19tYXRjaF9yZWNvcmRfZGVzY3MsXFxuK1xcdC5zZW5kX3BhY2thZ2VfZGF0YSA9IHBkc2Nfc2VuZF9wYWNrYWdlX2RhdGEsXFxuK1xcdC5zZW5kX2NvbXBvbmVudF90YWJsZSA9IHBkc2Nfc2VuZF9jb21wb25lbnRfdGFibGUsXFxuK1xcdC5mbGFzaF9jb21wb25lbnQgPSBwZHNjX2ZsYXNoX2NvbXBvbmVudCxcXG4rXFx0LmZpbmFsaXplX3VwZGF0ZSA9IHBkc2NfZmluYWxpemVfdXBkYXRlXFxuK307XFxuK1xcbitzdGF0aWMgaW50IHBkc2NfcGxkbV9maXJtd2FyZV91cGRhdGUoc3RydWN0IHBkc2MgKnBkc2MsXFxuK1xcdFxcdFxcdFxcdCAgICAgc3RydWN0IGRldmxpbmtfZmxhc2hfdXBkYXRlX3BhcmFtcyAqcGFyYW1zLFxcbitcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayxcXG4rXFx0XFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3KVxcbit7XFxuK1xcdHN0cnVjdCBwZHNfY29yZV9md3VfcHJpdiBwcml2ID0ge307XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHRpZiAoIXBkc2MtXFx1MDAzZWZ3X2NvbXBvbmVudHMubnVtX2NvbXBvbmVudHMpIHtcXG4rXFx0XFx0ZXJyID0gcGRzY19nZXRfY29tcG9uZW50X2luZm8ocGRzYyk7XFxuK1xcdFxcdGlmIChlcnIpIHtcXG4rXFx0XFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgXFxcIkZhaWxlZCB0byBnZXQgY29tcG9uZW50IGluZm9cXFwiKTtcXG4rXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRpZiAocGFyYW1zLVxcdTAwM2Vjb21wb25lbnQpIHtcXG4rXFx0XFx0dTggdHlwZSA9IHBkc2NfbmFtZV90b19md190eXBlKHBhcmFtcy1cXHUwMDNlY29tcG9uZW50KTtcXG4rXFxuK1xcdFxcdGlmICghdHlwZSB8fCAhcGRzY19jb21wb25lbnRfdHlwZV9leGlzdHMocGRzYywgdHlwZSkpIHtcXG4rXFx0XFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXFxcIlVua25vd24gY29tcG9uZW50IG5hbWVcXFwiKTtcXG4rXFx0XFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnByaXYuY29tcG9uZW50cyk7XFxuK1xcdHByaXYuY29udGV4dC5vcHMgPSBcXHUwMDI2cGRzY19wbGRtZndfb3BzO1xcbitcXHRwcml2LmNvbnRleHQuZGV2ID0gcGRzYy1cXHUwMDNlZGV2O1xcbitcXHRwcml2LnBhcmFtcyA9IHBhcmFtcztcXG4rXFx0cHJpdi5leHRhY2sgPSBleHRhY2s7XFxuK1xcdHByaXYucGRzYyA9IHBkc2M7XFxuK1xcbitcXHRlcnIgPSBwbGRtZndfZmxhc2hfaW1hZ2UoXFx1MDAyNnByaXYuY29udGV4dCwgZncpO1xcbitcXHRpZiAoIWVyciBcXHUwMDI2XFx1MDAyNiBwYXJhbXMtXFx1MDAzZWNvbXBvbmVudCBcXHUwMDI2XFx1MDAyNiAhcHJpdi5jb21wb25lbnRfZm91bmQpIHtcXG4rXFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcXG4rXFx0XFx0XFx0XFx0ICAgXFxcIlJlcXVlc3RlZCBjb21wb25lbnQgbm90IHByZXNlbnQgaW4gZmlybXdhcmUgcGFja2FnZVxcXCIpO1xcbitcXHRcXHRlcnIgPSAtRU5PRU5UO1xcbitcXHR9XFxuK1xcdHBkc2NfZnJlZV9md3VfcHJpdihcXHUwMDI2cHJpdik7XFxuK1xcbitcXHRyZXR1cm4gZXJyO1xcbit9XFxuK1xcbitpbnQgcGRzY19maXJtd2FyZV91cGRhdGUoc3RydWN0IHBkc2MgKnBkc2MsXFxuK1xcdFxcdFxcdCBzdHJ1Y3QgZGV2bGlua19mbGFzaF91cGRhdGVfcGFyYW1zICpwYXJhbXMsXFxuK1xcdFxcdFxcdCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuK3tcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdGlmIChwZHNjLVxcdTAwM2VkZXZfaWRlbnQudmVyc2lvbiBcXHUwMDNlPSBQRFNfQ09SRV9JREVOVElUWV9WRVJTSU9OXzIgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIHBkc2MtXFx1MDAzZWRldl9pZGVudC5jYXBhYmlsaXRpZXMgXFx1MDAyNlxcbitcXHRcXHRjcHVfdG9fbGU2NChQRFNfQ09SRV9ERVZfQ0FQX1BMRE1fRldfVVBEQVRFKSlcXG4rXFx0XFx0ZXJyID0gcGRzY19wbGRtX2Zpcm13YXJlX3VwZGF0ZShwZHNjLCBwYXJhbXMsIGV4dGFjayxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0cGFyYW1zLVxcdTAwM2Vmdyk7XFxuK1xcdGVsc2VcXG4rXFx0XFx0ZXJyID0gcGRzY19sZWdhY3lfZmlybXdhcmVfdXBkYXRlKHBkc2MsIHBhcmFtcywgZXh0YWNrKTtcXG4rXFxuK1xcdC8qIEludmFsaWRhdGUgY2FjaGVkIGNvbXBvbmVudCBpbmZvIHNvIG5leHQgaW5mb19nZXQgcmVmcmVzaGVzICovXFxuK1xcdHBkc2NfZndfY29tcG9uZW50c19pbnZhbGlkYXRlKHBkc2MpO1xcbitcXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL21haW4uY1xcbmluZGV4IDhkOTRhNGQ3MDM5NWUuLjVlMWIwNzg1MDE2M2IgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL21haW4uY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9tYWluLmNcXG5AQCAtMjEsNiArMjEsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgcGRzY19pZF90YWJsZVtdID0ge1xcbiB9O1xcbiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgcGRzY19pZF90YWJsZSk7XFxuIFxcbitzdGF0aWMgdm9pZCBwZHNjX3N0b3BfaGVhbHRoX3RocmVhZChzdHJ1Y3QgcGRzYyAqcGRzYyk7XFxuK1xcbiBzdGF0aWMgdm9pZCBwZHNjX3dkdGltZXJfY2Ioc3RydWN0IHRpbWVyX2xpc3QgKnQpXFxuIHtcXG4gXFx0c3RydWN0IHBkc2MgKnBkc2MgPSB0aW1lcl9jb250YWluZXJfb2YocGRzYywgdCwgd2R0aW1lcik7XFxuQEAgLTMxNSw2ICszMTcsNyBAQCBzdGF0aWMgaW50IHBkc2NfaW5pdF9wZihzdHJ1Y3QgcGRzYyAqcGRzYylcXG4gXFx0XFx0ZGVzdHJveV93b3JrcXVldWUocGRzYy1cXHUwMDNld3EpO1xcbiBcXHRtdXRleF9kZXN0cm95KFxcdTAwMjZwZHNjLVxcdTAwM2Vjb25maWdfbG9jayk7XFxuIFxcdG11dGV4X2Rlc3Ryb3koXFx1MDAyNnBkc2MtXFx1MDAzZWRldmNtZF9sb2NrKTtcXG4rXFx0cGRzY19kZWZlcnJlZF9kbWFfZnJlZShwZHNjKTtcXG4gXFx0cGNpX2ZyZWVfaXJxX3ZlY3RvcnMocGRzYy1cXHUwMDNlcGRldik7XFxuIGVycl9vdXRfdW5tYXBfYmFyczpcXG4gXFx0cGRzY191bm1hcF9iYXJzKHBkc2MpO1xcbkBAIC0zNTMsNiArMzU2LDggQEAgc3RhdGljIGludCBwZHNjX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxcbiBcXHRwZHNjLVxcdTAwM2VwZGV2ID0gcGRldjtcXG4gXFx0cGRzYy1cXHUwMDNlZGV2ID0gXFx1MDAyNnBkZXYtXFx1MDAzZWRldjtcXG4gXFx0c2V0X2JpdChQRFNDX1NfSU5JVElOR19EUklWRVIsIFxcdTAwMjZwZHNjLVxcdTAwM2VzdGF0ZSk7XFxuK1xcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZwZHNjLVxcdTAwM2VkZWZlcnJlZF9kbWFfbGlzdCk7XFxuK1xcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZwZHNjLVxcdTAwM2VkZWZlcnJlZF9kbWFfbG9jayk7XFxuIFxcdHBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBwZHNjKTtcXG4gXFx0cGRzY19kZWJ1Z2ZzX2FkZF9kZXYocGRzYyk7XFxuIFxcbkBAIC00NTgsNiArNDYzLDcgQEAgc3RhdGljIHZvaWQgcGRzY19yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuIFxcdH1cXG4gXFxuIFxcdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcXG4rXFx0cGRzY19kZWZlcnJlZF9kbWFfZnJlZShwZHNjKTtcXG4gXFxuIFxcdGlkYV9mcmVlKFxcdTAwMjZwZHNjX2lkYSwgcGRzYy1cXHUwMDNldWlkKTtcXG4gXFx0cGRzY19kZWJ1Z2ZzX2RlbF9kZXYocGRzYyk7XFxuQEAgLTUwNSw2ICs1MTEsNyBAQCBzdGF0aWMgdm9pZCBwZHNjX3Jlc2V0X3ByZXBhcmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuIFxcdHBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7XFxuIFxcdGlmIChwY2lfaXNfZW5hYmxlZChwZGV2KSlcXG4gXFx0XFx0cGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpO1xcbitcXHRwZHNjX2RlZmVycmVkX2RtYV9mcmVlKHBkc2MpO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBwZHNjX3Jlc2V0X2RvbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGRzL3Bkc19jb3JlX2lmLmggYi9pbmNsdWRlL2xpbnV4L3Bkcy9wZHNfY29yZV9pZi5oXFxuaW5kZXggMTdhODdjMWE1NWQ3Yy4uOTAxZTFlNjI4Zjg5MCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3Bkcy9wZHNfY29yZV9pZi5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9wZHMvcGRzX2NvcmVfaWYuaFxcbkBAIC00MCw2ICs0MCwxNCBAQCBlbnVtIHBkc19jb3JlX2NtZF9vcGNvZGUge1xcbiBcXHRQRFNfQ09SRV9DTURfRldfRE9XTkxPQURcXHQ9IDQsXFxuIFxcdFBEU19DT1JFX0NNRF9GV19DT05UUk9MXFx0XFx0PSA1LFxcbiBcXG4rXFx0UERTX0NPUkVfQ01EX0dFVF9DT01QT05FTlRfSU5GT1xcdD0gNixcXG4rXFx0UERTX0NPUkVfQ01EX1NFTkRfUEtHX0RBVEFcXHQ9IDcsXFxuK1xcdFBEU19DT1JFX0NNRF9TRU5EX0NPTVBPTkVOVF9UQkxcXHQ9IDgsXFxuK1xcdFBEU19DT1JFX0NNRF9TRU5EX0NPTVBPTkVOVFxcdD0gOSxcXG4rXFx0UERTX0NPUkVfQ01EX0ZJTkFMSVpFX1VQREFURVxcdD0gMTAsXFxuK1xcdFBEU19DT1JFX0NNRF9NQVRDSF9SRUNPUkRfREVTQ1xcdD0gMTEsXFxuK1xcdFBEU19DT1JFX0NNRF9IT1NUX01FTVxcdFxcdD0gMTIsXFxuK1xcbiBcXHQvKiBTUi9JT1YgY29tbWFuZHMgKi9cXG4gXFx0UERTX0NPUkVfQ01EX1ZGX0dFVEFUVFJcXHRcXHQ9IDYwLFxcbiBcXHRQRFNfQ09SRV9DTURfVkZfU0VUQVRUUlxcdFxcdD0gNjEsXFxuQEAgLTEwMCw2ICsxMDgsMTYgQEAgc3RydWN0IHBkc19jb3JlX2Rydl9pZGVudGl0eSB7XFxuIFxcdGNoYXIgICBkcml2ZXJfdmVyX3N0clszMl07XFxuIH07XFxuIFxcbisvKipcXG4rICogZW51bSBwZHNfY29yZV9kZXZfY2FwYWJpbGl0eSAtIERldmljZSBjYXBhYmlsaXRpZXNcXG4rICogQFBEU19DT1JFX0RFVl9DQVBfUExETV9GV19VUERBVEU6IERldmljZSBvbmx5IHN1cHBvcnRzIEZXIHVwZGF0ZSB2aWEgUExETVxcbisgKiBAUERTX0NPUkVfREVWX0NBUF9IT1NUX01FTTogRGV2aWNlIHN1cHBvcnRzIGhvc3QgbWVtb3J5IGZvciBmdyB1c2VcXG4rICovXFxuK2VudW0gcGRzX2NvcmVfZGV2X2NhcGFiaWxpdHkge1xcbitcXHRQRFNfQ09SRV9ERVZfQ0FQX1BMRE1fRldfVVBEQVRFID0gQklUKDApLFxcbitcXHRQRFNfQ09SRV9ERVZfQ0FQX0hPU1RfTUVNID0gQklUKDEpLFxcbit9O1xcbitcXG4gI2RlZmluZSBQRFNfREVWX1RZUEVfTUFYXFx0MTZcXG4gLyoqXFxuICAqIHN0cnVjdCBwZHNfY29yZV9kZXZfaWRlbnRpdHkgLSBEZXZpY2UgaWRlbnRpdHkgaW5mb3JtYXRpb25cXG5AQCAtMTE5LDYgKzEzNywxMSBAQCBzdHJ1Y3QgcGRzX2NvcmVfZHJ2X2lkZW50aXR5IHtcXG4gICpcXHRcXHQgICAgICB2YWx1ZSBpbiB1c2VjcyB0byBkZXZpY2UgdW5pdHMgdXNpbmc6XFxuICAqXFx0XFx0ICAgICAgZGV2aWNlIHVuaXRzID0gdXNlY3MgKiBtdWx0IC8gZGl2XFxuICAqIEB2aWZfdHlwZXM6ICAgICAgICBIb3cgbWFueSBvZiBlYWNoIFZJRiBkZXZpY2UgdHlwZSBpcyBzdXBwb3J0ZWRcXG4rICogQG1heF9md19zbG90czogICAgIE51bWJlciBvZiBmaXJtd2FyZSBjb21wb25lbnRzIHJlcG9ydGVkIGJ5IGRldmljZVxcbisgKlxcdFxcdCAgICAgIG9ubHkgc3VwcG9ydGVkIG9uIHZlcnNpb24gXFx1MDAzZT0gUERTX0NPUkVfSURFTlRJVFlfVkVSU0lPTl8yXFxuKyAqIEByc3ZkMjpcXHQgICAgICBXb3JkIGJvdW5kYXJ5IHBhZGRpbmdcXG4rICogQGNhcGFiaWxpdGllczogICAgIERldmljZSBjYXBhYmlsaXRpZXNcXG4rICpcXHRcXHQgICAgICBvbmx5IHN1cHBvcnRlZCBvbiB2ZXJzaW9uIFxcdTAwM2U9IFBEU19DT1JFX0lERU5USVRZX1ZFUlNJT05fMlxcbiAgKi9cXG4gc3RydWN0IHBkc19jb3JlX2Rldl9pZGVudGl0eSB7XFxuIFxcdHU4ICAgICB2ZXJzaW9uO1xcbkBAIC0xMzEsOSArMTU0LDEzIEBAIHN0cnVjdCBwZHNfY29yZV9kZXZfaWRlbnRpdHkge1xcbiBcXHRfX2xlMzIgaW50cl9jb2FsX211bHQ7XFxuIFxcdF9fbGUzMiBpbnRyX2NvYWxfZGl2O1xcbiBcXHRfX2xlMTYgdmlmX3R5cGVzW1BEU19ERVZfVFlQRV9NQVhdO1xcbitcXHRfX2xlMTYgbWF4X2Z3X3Nsb3RzO1xcbitcXHR1OCAgICAgcnN2ZDJbNl07XFxuK1xcdF9fbGU2NCBjYXBhYmlsaXRpZXM7XFxuIH07XFxuIFxcbiAjZGVmaW5lIFBEU19DT1JFX0lERU5USVRZX1ZFUlNJT05fMVxcdDFcXG4rI2RlZmluZSBQRFNfQ09SRV9JREVOVElUWV9WRVJTSU9OXzJcXHQyXFxuIFxcbiAvKipcXG4gICogc3RydWN0IHBkc19jb3JlX2Rldl9pZGVudGlmeV9jbWQgLSBEcml2ZXIvZGV2aWNlIGlkZW50aWZ5IGNvbW1hbmRcXG5AQCAtMjc1LDExICszMDIsMjAgQEAgZW51bSBwZHNfY29yZV9md19jb250cm9sX29wZXIge1xcbiBcXHRQRFNfQ09SRV9GV19HRVRfTElTVCAgICAgICAgICAgICAgID0gNyxcXG4gfTtcXG4gXFxuKy8qKlxcbisgKiBlbnVtIHBkc19jb3JlX2Z3X3Nsb3QgLSBGaXJtd2FyZSBzbG90IGlkZW50aWZpZXJzXFxuKyAqIEBQRFNfQ09SRV9GV19TTE9UX0lOVkFMSUQ6IExldCBmaXJtd2FyZSBzZWxlY3Qgc2xvdCBiYXNlZCBvbiBwYWNrYWdlIG1ldGFkYXRhXFxuKyAqIEBQRFNfQ09SRV9GV19TTE9UX0E6ICAgICAgIFByaW1hcnkgZmlybXdhcmUgc2xvdCBBXFxuKyAqIEBQRFNfQ09SRV9GV19TTE9UX0I6ICAgICAgIFByaW1hcnkgZmlybXdhcmUgc2xvdCBCXFxuKyAqIEBQRFNfQ09SRV9GV19TTE9UX0dPTEQ6ICAgIEdvbGQvcmVjb3ZlcnkgZmlybXdhcmUgc2xvdFxcbisgKiBAUERTX0NPUkVfRldfU0xPVF9NQVg6ICAgICBTZW50aW5lbCB2YWx1ZSBpbmRpY2F0aW5nIG5vIHNsb3QgcmVzb2x2ZWRcXG4rICovXFxuIGVudW0gcGRzX2NvcmVfZndfc2xvdCB7XFxuIFxcdFBEU19DT1JFX0ZXX1NMT1RfSU5WQUxJRCAgICA9IDAsXFxuIFxcdFBEU19DT1JFX0ZXX1NMT1RfQVxcdCAgICA9IDEsXFxuIFxcdFBEU19DT1JFX0ZXX1NMT1RfQiAgICAgICAgICA9IDIsXFxuIFxcdFBEU19DT1JFX0ZXX1NMT1RfR09MRCAgICAgICA9IDMsXFxuK1xcdFBEU19DT1JFX0ZXX1NMT1RfTUFYICAgICAgICA9IDB4ZmYsXFxuIH07XFxuIFxcbiAvKipcXG5AQCAtNDQ2LDYgKzQ4Miw0MjMgQEAgc3RydWN0IHBkc19jb3JlX3ZmX2N0cmxfY29tcCB7XFxuIFxcdHU4XFx0c3RhdHVzO1xcbiB9O1xcbiBcXG4rLyoqXFxuKyAqIHN0cnVjdCBwZHNfY29yZV9zZW5kX3BrZ19kYXRhX2NtZCAtIFNlbmQgcGFja2FnZSBkYXRhIGNvbW1hbmRcXG4rICogQG9wY29kZTogT3Bjb2RlIFBEU19DT1JFX0NNRF9TRU5EX1BLR19EQVRBXFxuKyAqIEB2ZXI6IERyaXZlcidzIG1heCBzdXBwb3J0IHZlcnNpb24gb2YgdGhpcyBjb21tYW5kXFxuKyAqIEB0b3RhbF9sZW46IFRvdGFsIGxlbmd0aCBvZiB0aGUgcGFja2FnZSBkYXRhXFxuKyAqIEBvZmZzZXQ6IE9mZnNldCBpbiB0aGUgcGFja2FnZSBkYXRhLCBub24temVybyBpZiBtdWx0aXBsZSBjb21tYW5kcyBhcmVcXG4rICpcXHQgICAgbmVlZGVkIGZvciBzZW5kaW5nIHRoZSBwYWNrYWdlIGRhdGFcXG4rICogQGRhdGFfbGVuOiBMZW5ndGggb2YgZGF0YSBzdG9yZWQgYXQgZGF0YV9wYVxcbisgKiBAZGF0YV9wYTogRGF0YSBwaHlzaWNhbCBhZGRyZXNzIGZvciBETUEgdG8gZGV2aWNlXFxuKyAqXFxuKyAqIFRoZSBwYWNrYWdlIGRhdGEgbWF5IGJlIHRvbyBsYXJnZSB0byBzdG9yZSBpbiBhIHNpbmdsZSBidWZmZXIsIHNvIG11bHRpcGxlXFxuKyAqIFBEU19DT1JFX0NNRF9TRU5EX1BLR19EQVRBIGRldmNtZHMgbWF5IGJlIG5lZWRlZC5cXG4rICovXFxuK3N0cnVjdCBwZHNfY29yZV9zZW5kX3BrZ19kYXRhX2NtZCB7XFxuK1xcdHU4IG9wY29kZTtcXG4rXFx0dTggdmVyO1xcbitcXHRfX2xlMTYgdG90YWxfbGVuO1xcbitcXHRfX2xlMTYgb2Zmc2V0O1xcbitcXHRfX2xlMTYgZGF0YV9sZW47XFxuK1xcdF9fbGU2NCBkYXRhX3BhO1xcbit9O1xcbitcXG4rLyoqXFxuKyAqIHN0cnVjdCBwZHNfY29yZV9zZW5kX3BrZ19kYXRhX2NvbXAgLSBTZW5kIHBhY2thZ2UgZGF0YSBjb21wbGV0aW9uXFxuKyAqIEBzdGF0dXM6IFN0YXR1cyBvZiB0aGUgY29tbWFuZCAoZW51bSBwZHNfY29yZV9zdGF0dXNfY29kZSlcXG4rICogQHZlcjogRGV2aWNlJ3MgbWF4IHN1cHBvcnRlZCB2ZXJzaW9uIG9mIHRoaXMgY29tbWFuZFxcbisgKiBAcnN2ZDogV29yZCBib3VuZGFyeSBwYWRkaW5nXFxuKyAqL1xcbitzdHJ1Y3QgcGRzX2NvcmVfc2VuZF9wa2dfZGF0YV9jb21wIHtcXG4rXFx0dTggc3RhdHVzO1xcbitcXHR1OCB2ZXI7XFxuK1xcdHU4IHJzdmRbMl07XFxuK307XFxuK1xcbisvKipcXG4rICogc3RydWN0IHBkc19jb3JlX2NvbXBvbmVudF90YmwgLSBDb21wb25lbnQgdGFibGUgZGV0YWlsc1xcbisgKiBAY29tcGFyaXNvbl9zdGFtcDogQ29tcGFyaXNvbiBzdGFtcCB1c2VkIGZvciBjb21wb25lbnQgdmVyc2lvbiBjaGVja3NcXG4rICogQGNsYXNzaWZpY2F0aW9uOiBWZW5kb3Igc3BlY2lmaWMgY2xhc3NpZmljYXRpb24gaW5mb1xcbisgKiBAaWRlbnRpZmllcjogQ29tcG9uZW50J3MgSURcXG4rICogQHRyYW5zZmVyX2ZsYWc6IFBhcnQgb2YgdGhlIGNvbXBvbmVudCB0YWJsZSB0aGlzIHJlcXVlc3QgcmVwcmVzZW50c1xcbisgKiBAdmVyc2lvbl9zdHJfdHlwZTogVGhlIHR5cGVzIG9mIHN0cmluZ3MgdXNlZFxcbisgKiBAdmVyc2lvbl9zdHJfbGVuOiBMZW5ndGggb2YgQHZlcnNpb25fc3RyXFxuKyAqIEB2ZXJzaW9uX3N0cjogQ29tcG9uZW50IHZlcnNpb24gaW5mb3JtYXRpb25cXG4rICovXFxuK3N0cnVjdCBwZHNfY29yZV9jb21wb25lbnRfdGJsIHtcXG4rXFx0X19sZTMyIGNvbXBhcmlzb25fc3RhbXA7XFxuK1xcdF9fbGUxNiBjbGFzc2lmaWNhdGlvbjtcXG4rXFx0X19sZTE2IGlkZW50aWZpZXI7XFxuK1xcdHU4ICAgICB0cmFuc2Zlcl9mbGFnO1xcbitcXHR1OCAgICAgdmVyc2lvbl9zdHJfdHlwZTtcXG4rXFx0dTggICAgIHZlcnNpb25fc3RyX2xlbjtcXG4rXFx0dTggICAgIHZlcnNpb25fc3RyW107XFxuK307XFxuK1xcbisvKipcXG4rICogc3RydWN0IHBkc19jb3JlX3NlbmRfY29tcG9uZW50X3RibF9jbWQgLSBTZW5kIGNvbXBvbmVudCB0YWJsZSBjb21tYW5kXFxuKyAqIEBvcGNvZGU6IE9wY29kZSBQRFNfQ09SRV9DTURfU0VORF9DT01QT05FTlRfVEJMXFxuKyAqIEB2ZXI6IERyaXZlcidzIG1heCBzdXBwb3J0IHZlcnNpb24gb2YgdGhpcyBjb21tYW5kXFxuKyAqIEBzbG90X2lkOiBlbnVtIHBkc19jb3JlX2Z3X3Nsb3RcXG4rICogQHJzdmQ6IFdvcmQgYm91bmRhcnkgcGFkZGluZ1xcbisgKlxcbisgKiBFeHBlY3RzIHRvIGZpbmQgY29tcG9uZW50IHRhYmxlIGluZm8gKHN0cnVjdCBwZHNfY29yZV9jb21wb25lbnRfdGJsKVxcbisgKiBpbiBjbWRfcmVncy1cXHUwMDNlZGF0YS4gIERyaXZlciBzaG91bGQga2VlcCB0aGUgZGV2Y21kIGludGVyZmFjZSBsb2NrZWRcXG4rICogd2hpbGUgcHJlcGFyaW5nIHRoZSBjb21wb25lbnQgdGFibGUgaW5mby5cXG4rICovXFxuK3N0cnVjdCBwZHNfY29yZV9zZW5kX2NvbXBvbmVudF90YmxfY21kIHtcXG4rXFx0dTggb3Bjb2RlO1xcbitcXHR1OCB2ZXI7XFxuK1xcdHU4IHNsb3RfaWQ7XFxuK1xcdHU4IHJzdmQ7XFxuK307XFxuK1xcbitlbnVtIHBkc19jb3JlX2NvbXBvbmVudF9yZXNwX2NvZGUge1xcbitcXHRQRFNfQ09SRV9DT01QT05FTlRfVkFMSUQgPSAweDAsXFxuK1xcdFBEU19DT1JFX0NPTVBPTkVOVF9TVEFNUF9JREVOVElDQUwgPSAweDEsXFxuK1xcdFBEU19DT1JFX0NPTVBPTkVOVF9TVEFNUF9MT1dFUiA9IDB4MixcXG4rXFx0UERTX0NPUkVfQ09NUE9ORU5UX1NUQU1QX09SX1ZFUlNJT05fSU5WQUxJRCA9IDB4MyxcXG4rXFx0UERTX0NPUkVfQ09NUE9ORU5UX0NPTkZMSUNUID0gMHg0LFxcbitcXHRQRFNfQ09SRV9DT01QT05FTlRfUFJFUkVRU19OT1RfTUVUID0gMHg1LFxcbitcXHRQRFNfQ09SRV9DT01QT05FTlRfTk9UX1NVUFBPUlRFRCA9IDB4NixcXG4rXFx0UERTX0NPUkVfQ09NUE9ORU5UX0ZXX1RZUEVfSU5WQUxJRCA9IDB4ZDAsXFxuK307XFxuK1xcbisvKipcXG4rICogc3RydWN0IHBkc19jb3JlX3NlbmRfY29tcG9uZW50X3RibF9jb21wIC0gU2VuZCBjb21wb25lbnQgdGFibGUgY29tcGxldGlvblxcbisgKiBAc3RhdHVzOiBTdGF0dXMgb2YgdGhlIGNvbW1hbmQgKGVudW0gcGRzX2NvcmVfc3RhdHVzX2NvZGUpXFxuKyAqIEB2ZXI6IERldmljZSdzIG1heCBzdXBwb3J0ZWQgdmVyc2lvbiBvZiB0aGlzIGNvbW1hbmRcXG4rICogQGNvbXBsZXRpb25fY29kZTogQ29tcG9uZW50IGNvbXBsZXRpb24gY29kZVxcbisgKiBAcmVzcG9uc2U6IENvbXBvbmVudCByZXNwb25zZVxcbisgKiBAcmVzcG9uc2VfY29kZTogQ29tcG9uZW50IHJlc3BvbnNlIGNvZGVcXG4rICogQHNsb3RfaWQ6IEFjdHVhbCBzbG90X2lkIG9mIHRoZSBjb21wb25lbnQgKGVudW0gcGRzX2NvcmVfZndfc2xvdClcXG4rICogQHJzdmQ6IFdvcmQgYm91bmRhcnkgcGFkZGluZ1xcbisgKi9cXG4rc3RydWN0IHBkc19jb3JlX3NlbmRfY29tcG9uZW50X3RibF9jb21wIHtcXG4rXFx0dTggc3RhdHVzO1xcbitcXHR1OCB2ZXI7XFxuK1xcdHU4IGNvbXBsZXRpb25fY29kZTtcXG4rXFx0dTggcmVzcG9uc2U7XFxuK1xcdHU4IHJlc3BvbnNlX2NvZGU7XFxuK1xcdHU4IHNsb3RfaWQ7XFxuK1xcdHU4IHJzdmRbMl07XFxuK307XFxuK1xcbisvKipcXG4rICogZW51bSBwZHNfY29yZV9zZW5kX2NvbXBvbmVudF9vcCAtIFBEU19DT1JFX0NNRF9TRU5EX0NPTVBPTkVOVCBvcGVyYXRpb25cXG4rICogQFBEU19DT1JFX1NFTkRfQ09NUE9ORU5UX1NUQVJUOiBJbml0aWFsIG9wZXJhdGlvbiB0byBzdGFydCB0cmFuc2ZlclxcbisgKiBAUERTX0NPUkVfU0VORF9DT01QT05FTlRfU1RBVFVTOiBTdWJzZXF1ZW50IGNhbGxzIHRvIGNoZWNrIG9uIHN0YXR1c1xcbisgKi9cXG4rZW51bSBwZHNfY29yZV9zZW5kX2NvbXBvbmVudF9vcCB7XFxuK1xcdFBEU19DT1JFX1NFTkRfQ09NUE9ORU5UX1NUQVJUID0gMCxcXG4rXFx0UERTX0NPUkVfU0VORF9DT01QT05FTlRfU1RBVFVTID0gMSxcXG4rfTtcXG4rXFxuKyNkZWZpbmUgUERTX0NPUkVfRldfQ09NUE9ORU5UX0lEX0lOVkFMSUQgMHhGRkZGXFxuKy8qKlxcbisgKiBzdHJ1Y3QgcGRzX2NvcmVfZmxhc2hfY29tcG9uZW50IC0gQ29tcG9uZW50IGRldGFpbHNcXG4rICogQGNvbXBhcmlzb25fc3RhbXA6IENvbXBhcmlzb24gc3RhbXAgdXNlZCBmb3IgY29tcG9uZW50IHZlcnNpb24gY2hlY2tzXFxuKyAqIEBpbWFnZV9zaXplOiBDb21wb25lbnQgaW1hZ2Ugc2l6ZVxcbisgKiBAY2xhc3NpZmljYXRpb246IFZlbmRvciBzcGVjaWZpYyBjbGFzc2lmaWNhdGlvbiBpbmZvXFxuKyAqIEBpZGVudGlmaWVyOiBDb21wb25lbnQncyBJRFxcbisgKiBAb3B0aW9uczogQ29tcG9uZW50IG9wdGlvbnNcXG4rICogQHJzdmQ6IFdvcmQgYm91bmRhcnkgcGFkZGluZ1xcbisgKiBAdmVyc2lvbl9zdHJfdHlwZTogVGhlIHR5cGVzIG9mIHN0cmluZ3MgdXNlZFxcbisgKiBAdmVyc2lvbl9zdHJfbGVuOiBMZW5ndGggb2YgQHZlcnNpb25fc3RyXFxuKyAqIEB2ZXJzaW9uX3N0cjogQ29tcG9uZW50IHZlcnNpb24gaW5mb3JtYXRpb25cXG4rICovXFxuK3N0cnVjdCBwZHNfY29yZV9mbGFzaF9jb21wb25lbnQge1xcbitcXHRfX2xlMzIgY29tcGFyaXNvbl9zdGFtcDtcXG4rXFx0X19sZTMyIGltYWdlX3NpemU7XFxuK1xcdF9fbGUxNiBjbGFzc2lmaWNhdGlvbjtcXG4rXFx0X19sZTE2IGlkZW50aWZpZXI7XFxuK1xcdF9fbGUxNiBvcHRpb25zO1xcbitcXHR1OCByc3ZkWzNdO1xcbitcXHR1OCB2ZXJzaW9uX3N0cl90eXBlO1xcbitcXHR1OCB2ZXJzaW9uX3N0cl9sZW47XFxuK1xcdHU4IHZlcnNpb25fc3RyW107XFxuK307XFxuK1xcbisvKipcXG4rICogc3RydWN0IHBkc19jb3JlX3NlbmRfY29tcG9uZW50X2NtZCAtIFNlbmQgY29tcG9uZW50IGNvbW1hbmRcXG4rICogQG9wY29kZTogT3Bjb2RlIFBEU19DT1JFX0NNRF9TRU5EX0NPTVBPTkVOVFxcbisgKiBAdmVyOiBEcml2ZXIncyBtYXggc3VwcG9ydGVkIHZlcnNpb24gb2YgdGhpcyBjb21tYW5kXFxuKyAqIEBzbG90X2lkOiBlbnVtIHBkc19jb3JlX2Z3X3Nsb3RcXG4rICogQG9wZXJhdGlvbjogZW51bSBwZHNfY29yZV9zZW5kX2NvbXBvbmVudF9vcFxcbisgKiBAb2Zmc2V0OiBPZmZzZXQgaW50byB0aGUgY29tcG9uZW50LCBub24temVybyBpZiBtdWx0aXBsZSBjb21tYW5kc1xcbisgKlxcdCAgICBhcmUgbmVlZGVkIGZvciBhIHNpbmdsZSBjb21wb25lbnRcXG4rICogQGRhdGFfbGVuOiBMZW5ndGggb2YgdGhpcyBwYXJ0IG9mIHRoZSBjb21wb25lbnQgc3RvcmVkIGF0IEBkYXRhX3BhXFxuKyAqIEByc3ZkOiBXb3JkIGJvdW5kYXJ5IHBhZGRpbmdcXG4rICogQGRhdGFfcGE6IERNQSBhZGRyZXNzIG9mIHRoZSBjb21wb25lbnRcXG4rICpcXG4rICogQSBjb21wb25lbnQgbWF5IGJlIHRvbyBsYXJnZSB0byBzdG9yZSBpbiBhIHNpbmdsZSBidWZmZXIsIHNvIG11bHRpcGxlXFxuKyAqIFBEU19DT1JFX0NNRF9TRU5EX0NPTVBPTkVOVCBkZXZjbWRzIG1heSBiZSBuZWVkZWQuXFxuKyAqXFxuKyAqIEV4cGVjdHMgdG8gZmluZCBmbGFzaCBjb21wb25lbnQgaW5mbyAoc3RydWN0IHBkc19jb3JlX2ZsYXNoX2NvbXBvbmVudClcXG4rICogaW4gY21kX3JlZ3MtXFx1MDAzZWRhdGEuIERyaXZlciBzaG91bGQga2VlcCB0aGUgZGV2Y21kIGludGVyZmFjZSBsb2NrZWRcXG4rICogd2hpbGUgcHJlcGFyaW5nIGFuZCBzZW5kaW5nIHRoZSBmbGFzaCBjb21wb25lbnQgaW5mby5cXG4rICovXFxuK3N0cnVjdCBwZHNfY29yZV9zZW5kX2NvbXBvbmVudF9jbWQge1xcbitcXHR1OCBvcGNvZGU7XFxuK1xcdHU4IHZlcjtcXG4rXFx0dTggc2xvdF9pZDtcXG4rXFx0dTggb3BlcmF0aW9uO1xcbitcXHRfX2xlMzIgb2Zmc2V0O1xcbitcXHRfX2xlMzIgZGF0YV9sZW47XFxuK1xcdHU4IHJzdmRbNF07XFxuK1xcdF9fbGU2NCBkYXRhX3BhO1xcbit9O1xcbitcXG4rLyoqXFxuKyAqIHN0cnVjdCBwZHNfY29yZV9zZW5kX2NvbXBvbmVudF9jb21wIC0gU2VuZCBjb21wb25lbnQgY29tcGxldGlvblxcbisgKiBAc3RhdHVzOiBTdGF0dXMgb2YgdGhlIGNvbW1hbmQgKGVudW0gcGRzX2NvcmVfc3RhdHVzX2NvZGUpXFxuKyAqIEB2ZXI6IERldmljZSdzIG1heCBzdXBwb3J0ZWQgdmVyc2lvbiBvZiB0aGlzIGNvbW1hbmRcXG4rICogQGNvbXBsZXRpb25fY29kZTogQ29tcGxldGlvbiBjb2RlXFxuKyAqIEBjb21wYXRfcmVzcG9uc2U6IENvbXBhdGliaWxpdHkgcmVzcG9uc2UgKDAgPSBDb21wb25lbnQgY2FuIGJlIHVwZGF0ZWQpXFxuKyAqIEBjb21wYXRfcmVzcG9uc2VfY29kZTogQ29tcGF0aWJpbGl0eSByZXNwb25zZSBjb2RlXFxuKyAqIEByc3ZkOiBXb3JkIGJvdW5kYXJ5IHBhZGRpbmdcXG4rICovXFxuK3N0cnVjdCBwZHNfY29yZV9zZW5kX2NvbXBvbmVudF9jb21wIHtcXG4rXFx0dTggc3RhdHVzO1xcbitcXHR1OCB2ZXI7XFxuK1xcdHU4IGNvbXBsZXRpb25fY29kZTtcXG4rXFx0dTggY29tcGF0X3Jlc3BvbnNlO1xcbitcXHR1OCBjb21wYXRfcmVzcG9uc2VfY29kZTtcXG4rXFx0dTggcnN2ZFszXTtcXG4rfTtcXG4rXFxuKy8qKlxcbisgKiBlbnVtIHBkc19jb3JlX2Z3X2NvbXBvbmVudF90eXBlIC0gRmlybXdhcmUgY29tcG9uZW50IHR5cGVcXG4rICogQFBEU19DT1JFX0ZXX1RZUEVfVU5LTk9XTjogVW5rbm93biBjb21wb25lbnQgdHlwZVxcbisgKiBAUERTX0NPUkVfRldfVFlQRV9NQUlOOiBNYWluIGZpcm13YXJlXFxuKyAqIEBQRFNfQ09SRV9GV19UWVBFX0JPT1Q6IEJvb3QgbG9hZGVyXFxuKyAqIEBQRFNfQ09SRV9GV19UWVBFX0NQTEQ6IENQTEQgZmlybXdhcmVcXG4rICogQFBEU19DT1JFX0ZXX1RZUEVfU0VDVVJFOiBTZWN1cmUgZmlybXdhcmVcXG4rICogQFBEU19DT1JFX0ZXX1RZUEVfRlBHQTogRlBHQSBjb25maWd1cmF0aW9uXFxuKyAqIEBQRFNfQ09SRV9GV19UWVBFX1NVQ19NQUlOOiBTeXN0ZW0gVW5pdCBDb250cm9sbGVyIGZpcm13YXJlXFxuKyAqIEBQRFNfQ09SRV9GV19UWVBFX1NVQ19CT09UOiBTeXN0ZW0gVW5pdCBDb250cm9sbGVyIGJvb3Rsb2FkZXJcXG4rICogQFBEU19DT1JFX0ZXX1RZUEVfVUJPT1Q6IFUtQm9vdCBib290bG9hZGVyXFxuKyAqXFxuKyAqIEdvbGQvcmVjb3ZlcnkgdmFyaWFudHMgYXJlIGlkZW50aWZpZWQgYnkgc2xvdF9pZCA9PSBQRFNfQ09SRV9GV19TTE9UX0dPTERcXG4rICogYW5kIHJlcG9ydGVkIHdpdGggYSBcXFwiLmdvbGRcXFwiIHN1ZmZpeCAoZS5nLiwgZncuZ29sZCkuXFxuKyAqL1xcbitlbnVtIHBkc19jb3JlX2Z3X2NvbXBvbmVudF90eXBlIHtcXG4rXFx0UERTX0NPUkVfRldfVFlQRV9VTktOT1dOICAgPSAwLFxcbitcXHRQRFNfQ09SRV9GV19UWVBFX01BSU4gICAgICA9IDEsXFxuK1xcdFBEU19DT1JFX0ZXX1RZUEVfQk9PVCAgICAgID0gMixcXG4rXFx0UERTX0NPUkVfRldfVFlQRV9DUExEICAgICAgPSAzLFxcbitcXHRQRFNfQ09SRV9GV19UWVBFX1NFQ1VSRSAgICA9IDQsXFxuK1xcdFBEU19DT1JFX0ZXX1RZUEVfRlBHQSAgICAgID0gNSxcXG4rXFx0UERTX0NPUkVfRldfVFlQRV9TVUNfTUFJTiAgPSA2LFxcbitcXHRQRFNfQ09SRV9GV19UWVBFX1NVQ19CT09UICA9IDcsXFxuK1xcdFBEU19DT1JFX0ZXX1RZUEVfVUJPT1QgICAgID0gOCxcXG4rfTtcXG4rXFxuKy8qKlxcbisgKiBlbnVtIHBkc19jb3JlX2NvbXBvbmVudF9pbmZvX2ZsYWdzIC0gQ29tcG9uZW50IGluZm8gZmxhZ3NcXG4rICogQFBEU19DT1JFX0ZXX0NPTVBPTkVOVF9JTkZPX0ZfUlVOTklORzogQ29tcG9uZW50IGlzIGN1cnJlbnRseSBydW5uaW5nXFxuKyAqIEBQRFNfQ09SRV9GV19DT01QT05FTlRfSU5GT19GX1NUQVJUVVA6IENvbXBvbmVudCB2ZXJzaW9uIG9uIG5leHQgRlcgYm9vdFxcbisgKiBAUERTX0NPUkVfRldfQ09NUE9ORU5UX0lORk9fRl9GSVhFRDogQ29tcG9uZW50IGlzIGZpeGVkIGFuZCBjYW5ub3QgYmUgdXBkYXRlZFxcbisgKiBAUERTX0NPUkVfRldfQ09NUE9ORU5UX0lORk9fRl9VUERBVEVfQllfTkFNRTogQ29tcG9uZW50IGNhbiBiZSB1cGRhdGVkXFxuKyAqXFx0YnkgbmFtZVxcbisgKi9cXG4rZW51bSBwZHNfY29yZV9jb21wb25lbnRfaW5mb19mbGFncyB7XFxuK1xcdFBEU19DT1JFX0ZXX0NPTVBPTkVOVF9JTkZPX0ZfUlVOTklORyA9IEJJVCgwKSxcXG4rXFx0UERTX0NPUkVfRldfQ09NUE9ORU5UX0lORk9fRl9TVEFSVFVQID0gQklUKDEpLFxcbitcXHRQRFNfQ09SRV9GV19DT01QT05FTlRfSU5GT19GX0ZJWEVEID0gQklUKDIpLFxcbitcXHRQRFNfQ09SRV9GV19DT01QT05FTlRfSU5GT19GX1VQREFURV9CWV9OQU1FID0gQklUKDMpLFxcbit9O1xcbitcXG4rLyoqXFxuKyAqIHN0cnVjdCBwZHNfY29yZV9md19jb21wb25lbnRfaW5mbyAtIEdFVF9DT01QT05FTlRfSU5GTyBlbnRyeVxcbisgKiBAbmFtZTogQ29tcG9uZW50J3MgbmFtZVxcbisgKiBAY29tcG9uZW50X3R5cGU6IGVudW0gcGRzX2NvcmVfZndfY29tcG9uZW50X3R5cGVcXG4rICogQHJzdmQ6IFdvcmQgYm91bmRhcnkgcGFkZGluZ1xcbisgKiBAZmxhZ3M6IGVudW0gcGRzX2NvcmVfY29tcG9uZW50X2luZm9fZmxhZ3NcXG4rICogQGlkZW50aWZpZXI6IENvbXBvbmVudCdzIGlkZW50aWZpZXJcXG4rICogQHNsb3RfaWQ6IENvbXBvbmVudCdzIHNsb3QgaWRlbnRpZmllclxcbisgKiBAdmVyc2lvbjogQ29tcG9uZW50J3MgdmVyc2lvblxcbisgKi9cXG4rc3RydWN0IHBkc19jb3JlX2Z3X2NvbXBvbmVudF9pbmZvIHtcXG4rI2RlZmluZSBQRFNfQ09SRV9GV19DT01QT05FTlRfTkFNRV9CVUZMRU4gMjRcXG4rXFx0Y2hhciBuYW1lW1BEU19DT1JFX0ZXX0NPTVBPTkVOVF9OQU1FX0JVRkxFTl07XFxuK1xcdHU4IGNvbXBvbmVudF90eXBlO1xcbitcXHR1OCByc3ZkWzNdO1xcbitcXHRfX2xlMTYgZmxhZ3M7XFxuK1xcdHU4IGlkZW50aWZpZXI7XFxuK1xcdHU4IHNsb3RfaWQ7XFxuKyNkZWZpbmUgUERTX0NPUkVfRldfQ09NUE9ORU5UX1ZFUl9CVUZMRU4gMzJcXG4rXFx0Y2hhciB2ZXJzaW9uW1BEU19DT1JFX0ZXX0NPTVBPTkVOVF9WRVJfQlVGTEVOXTtcXG4rfTtcXG4rXFxuKyNkZWZpbmUgUERTX0NPUkVfRldfQ09NUE9ORU5UX0xJU1RfTEVOXFx0KChQRFNfUEFHRV9TSVpFIC0gOCkgLyBcXFxcXFxuK1xcdFxcdHNpemVvZihzdHJ1Y3QgcGRzX2NvcmVfZndfY29tcG9uZW50X2luZm8pKVxcbitcXG4rLyoqXFxuKyAqIHN0cnVjdCBwZHNfY29yZV9jb21wb25lbnRfbGlzdF9pbmZvIC0gR0VUX0NPTVBPTkVOVF9JTkZPIGNvbXBsZXRpb24gZGF0YVxcbisgKiBAbnVtX2NvbXBvbmVudHM6IE51bWJlciBvZiB2YWxpZCBjb21wb25lbnRzXFxuKyAqIEByc3ZkOiBXb3JkIGJvdW5kYXJ5IHBhZGRpbmdcXG4rICogQGluZm86IExpc3Qgb2YgdmFsaWQgY29tcG9uZW50c1xcbisgKi9cXG4rc3RydWN0IHBkc19jb3JlX2NvbXBvbmVudF9saXN0X2luZm8ge1xcbitcXHR1OCBudW1fY29tcG9uZW50cztcXG4rXFx0dTggcnN2ZFs3XTtcXG4rXFx0c3RydWN0IHBkc19jb3JlX2Z3X2NvbXBvbmVudF9pbmZvIGluZm9bUERTX0NPUkVfRldfQ09NUE9ORU5UX0xJU1RfTEVOXTtcXG4rfTtcXG4rXFxuKy8qKlxcbisgKiBzdHJ1Y3QgcGRzX2NvcmVfZ2V0X2NvbXBvbmVudF9pbmZvX2NtZCAtIEdFVF9DT01QT05FTlRfSU5GTyBjb21tYW5kXFxuKyAqIEBvcGNvZGU6IFBEU19DT1JFX0NNRF9HRVRfQ09NUE9ORU5UX0lORk9cXG4rICogQHZlcjogRHJpdmVyJ3MgbWF4IHN1cHBvcnRlZCB2ZXJzaW9uIG9mIHRoaXMgY29tbWFuZFxcbisgKiBAZGF0YV9sZW46IExlbmd0aCBvZiBkYXRhIGF0IGRhdGFfcGFcXG4rICogQHJzdmQ6IFdvcmQgYm91bmRhcnkgcGFkZGluZ1xcbisgKiBAZGF0YV9wYTogRE1BIGFkZHJlc3Mgb2YgZGF0YVxcbisgKlxcbisgKiBGVyBwb3B1bGF0ZXMgc3RydWN0IHBkc19jb3JlX2NvbXBvbmVudF9saXN0X2luZm8gcG9pbnRlZCB0byBieSBAZGF0YV9wYVxcbisgKi9cXG4rc3RydWN0IHBkc19jb3JlX2dldF9jb21wb25lbnRfaW5mb19jbWQge1xcbitcXHR1OCBvcGNvZGU7XFxuK1xcdHU4IHZlcjtcXG4rXFx0X19sZTE2IGRhdGFfbGVuO1xcbitcXHR1OCByc3ZkWzRdO1xcbitcXHRfX2xlNjQgZGF0YV9wYTtcXG4rfTtcXG4rXFxuKy8qKlxcbisgKiBzdHJ1Y3QgcGRzX2NvcmVfZ2V0X2NvbXBvbmVudF9pbmZvX2NvbXAgLSBHRVRfQ09NUE9ORU5UX0lORk8gY29tcGxldGlvblxcbisgKiBAc3RhdHVzOiBlbnVtIHBkc19jb3JlX3N0YXR1c19jb2RlXFxuKyAqIEB2ZXI6IERldmljZSdzIG1heCBzdXBwb3J0ZWQgdmVyc2lvbiBvZiB0aGlzIGNvbW1hbmRcXG4rICogQHJzdmQ6IFdvcmQgYm91bmRhcnkgcGFkZGluZ1xcbisgKi9cXG4rc3RydWN0IHBkc19jb3JlX2dldF9jb21wb25lbnRfaW5mb19jb21wIHtcXG4rXFx0dTggc3RhdHVzO1xcbitcXHR1OCB2ZXI7XFxuK1xcdHU4IHJzdmRbMl07XFxuK307XFxuK1xcbisvKipcXG4rICogc3RydWN0IHBkc19jb3JlX2ZpbmFsaXplX3VwZGF0ZV9jbWQgLSBGSU5BTElaRV9VUERBVEUgY29tbWFuZFxcbisgKiBAb3Bjb2RlOiBQRFNfQ09SRV9DTURfRklOQUxJWkVfVVBEQVRFXFxuKyAqIEB2ZXI6IERyaXZlcidzIG1heCBzdXBwb3J0IHZlcnNpb24gb2YgdGhpcyBjb21tYW5kXFxuKyAqIEByc3ZkOiBXb3JkIGJvdW5kYXJ5IHBhZGRpbmdcXG4rICpcXG4rICogRHJpdmVyIHNlbmRzIGF0IHRoZSBlbmQgb2YgdXBkYXRpbmcgYWxsIGNvbXBvbmVudHMgdG8gZmluYWxpemUgdGhlIHVwZGF0ZVxcbisgKi9cXG4rc3RydWN0IHBkc19jb3JlX2ZpbmFsaXplX3VwZGF0ZV9jbWQge1xcbitcXHR1OCBvcGNvZGU7XFxuK1xcdHU4IHZlcjtcXG4rXFx0dTggcnN2ZFsyXTtcXG4rfTtcXG4rXFxuKy8qKlxcbisgKiBzdHJ1Y3QgcGRzX2NvcmVfZmluYWxpemVfdXBkYXRlX2NvbXAgLSBGSU5BTElaRV9VUERBVEUgY29tcGxldGlvblxcbisgKiBAc3RhdHVzOiBlbnVtIHBkc19jb3JlX3N0YXR1c19jb2RlXFxuKyAqIEB2ZXI6IERldmljZSdzIG1heCBzdXBwb3J0ZWQgdmVyc2lvbiBvZiB0aGlzIGNvbW1hbmRcXG4rICogQHJzdmQ6IFdvcmQgYm91bmRhcnkgcGFkZGluZ1xcbisgKi9cXG4rc3RydWN0IHBkc19jb3JlX2ZpbmFsaXplX3VwZGF0ZV9jb21wIHtcXG4rXFx0dTggc3RhdHVzO1xcbitcXHR1OCB2ZXI7XFxuK1xcdHU4IHJzdmRbMl07XFxuK307XFxuK1xcbisvKipcXG4rICogc3RydWN0IHBkc19jb3JlX21hdGNoX3JlY29yZF9kZXNjX2NtZCAtIE1BVENIX1JFQ09SRF9ERVNDIGNvbW1hbmRcXG4rICogQG9wY29kZTogUERTX0NPUkVfQ01EX01BVENIX1JFQ09SRF9ERVNDXFxuKyAqIEB2ZXI6IERyaXZlcidzIG1heCBzdXBwb3J0ZWQgdmVyc2lvbiBvZiB0aGlzIGNvbW1hbmRcXG4rICogQHR5cGU6IFBMRE0gRGVzY3JpcHRvciBJZGVudGlmaWVyIFR5cGVcXG4rICogQHNpemU6IExlbmd0aCBvZiB0aGUgRGVzY3JpcHRvciBJZGVudGlmaWVyIFZhbHVlXFxuKyAqIEByc3ZkOiBXb3JkIGJvdW5kYXJ5IHBhZGRpbmdcXG4rICpcXG4rICogRXhwZWN0cyB0byBmaW5kIHRoZSBEZXNjcmlwdG9yIElkZW50aWZpZXIgRGF0YSBpbiBjbWRfcmVncy1cXHUwMDNlZGF0YS4gRHJpdmVyXFxuKyAqIHNob3VsZCBrZWVwIHRoZSBkZXZjbWQgaW50ZXJmYWNlIGxvY2tlZCB3aGlsZSBwcmVwYXJpbmcgYW5kIHNlbmRpbmcgdGhpc1xcbisgKiBjb21tYW5kLlxcbisgKi9cXG4rc3RydWN0IHBkc19jb3JlX21hdGNoX3JlY29yZF9kZXNjX2NtZCB7XFxuK1xcdHU4IG9wY29kZTtcXG4rXFx0dTggdmVyO1xcbitcXHRfX2xlMTYgdHlwZTtcXG4rXFx0X19sZTE2IHNpemU7XFxuK1xcdHU4IHJzdmRbMl07XFxuK307XFxuK1xcbisvKipcXG4rICogc3RydWN0IHBkc19jb3JlX21hdGNoX3JlY29yZF9kZXNjX2NvbXAgLSBNQVRDSF9SRUNPUkRfREVTQyBjb21wbGV0aW9uXFxuKyAqIEBzdGF0dXM6IGVudW0gcGRzX2NvcmVfc3RhdHVzX2NvZGVcXG4rICogQHZlcjogRGV2aWNlJ3MgbWF4IHN1cHBvcnRlZCB2ZXJzaW9uIG9mIHRoaXMgY29tbWFuZFxcbisgKiBAbWF0Y2g6IFdoZXRoZXIgb3Igbm90IHRoZSBSZWNvcmQgRGVzY3JpcHRvciBtYXRjaGVzIHRoZSBkZXZpY2VcXG4rICogQHJzdmQ6IFdvcmQgYm91bmRhcnkgcGFkZGluZ1xcbisgKlxcbisgKiBXaGVuIHN0YXR1cyBpcyBQRFNfUkNfU1VDQ0VTUywgdGhlbiBAbWF0Y2ggaXMgdmFsaWQsIG90aGVyd2lzZSBpdCdzXFxuKyAqIHVuZGVmaW5lZC5cXG4rICovXFxuK3N0cnVjdCBwZHNfY29yZV9tYXRjaF9yZWNvcmRfZGVzY19jb21wIHtcXG4rXFx0dTggc3RhdHVzO1xcbitcXHR1OCB2ZXI7XFxuK1xcdHU4IG1hdGNoO1xcbitcXHR1OCByc3ZkO1xcbit9O1xcbitcXG4rLyoqXFxuKyAqIGVudW0gcGRzX2NvcmVfaG9zdF9tZW1fb3BlciAtIEhPU1RfTUVNIHN1Yi1vcGVyYXRpb25zXFxuKyAqIEBQRFNfQ09SRV9IT1NUX01FTV9HRVRfQ09VTlQ6IFF1ZXJ5IG51bWJlciBvZiBtZW1vcnkgcmVxdWVzdHNcXG4rICogQFBEU19DT1JFX0hPU1RfTUVNX1FVRVJZOiAgICAgUXVlcnkgZGV0YWlscyBvZiBhIG1lbW9yeSByZXF1ZXN0XFxuKyAqIEBQRFNfQ09SRV9IT1NUX01FTV9BREQ6ICAgICAgIFByb3ZpZGUgYWxsb2NhdGVkIG1lbW9yeSB0byBmaXJtd2FyZVxcbisgKiBAUERTX0NPUkVfSE9TVF9NRU1fREVMOiAgICAgICBOb3RpZnkgZmlybXdhcmUgb2YgbWVtb3J5IGRlYWxsb2NhdGlvblxcbisgKi9cXG4rZW51bSBwZHNfY29yZV9ob3N0X21lbV9vcGVyIHtcXG4rXFx0UERTX0NPUkVfSE9TVF9NRU1fR0VUX0NPVU5UXFx0PSAwLFxcbitcXHRQRFNfQ09SRV9IT1NUX01FTV9RVUVSWVxcdFxcdD0gMSxcXG4rXFx0UERTX0NPUkVfSE9TVF9NRU1fQUREXFx0XFx0PSAyLFxcbitcXHRQRFNfQ09SRV9IT1NUX01FTV9ERUxcXHRcXHQ9IDMsXFxuK307XFxuK1xcbisvKipcXG4rICogc3RydWN0IHBkc19jb3JlX2hvc3RfbWVtX2NtZCAtIEhPU1RfTUVNIGNvbW1hbmRcXG4rICogQG9wY29kZTogICAgIE9wY29kZSBQRFNfQ09SRV9DTURfSE9TVF9NRU1cXG4rICogQG9wZXI6ICAgICAgIE9wZXJhdGlvbiAoZW51bSBwZHNfY29yZV9ob3N0X21lbV9vcGVyKVxcbisgKiBAaW5kZXg6ICAgICAgTWVtb3J5IHJlcXVlc3QgaW5kZXggKEdFVF9DT1VOVDogbWF4X2NvdW50LCBRVUVSWTogaW5kZXgpXFxuKyAqIEB0YWc6ICAgICAgICBUYWcgZm9yIHRoaXMgbWVtb3J5IHJlcXVlc3QgKEFERC9ERUwpXFxuKyAqIEByZWFzb246ICAgICBSZWFzb24gZm9yIGRlbGV0aW9uIChERUwgb25seSlcXG4rICogQHJzdmQ6ICAgICAgIFJlc2VydmVkXFxuKyAqIEBtYXhfY29udGlnOiBNYXhpbXVtIGNvbnRpZ3VvdXMgbWVtb3J5IHNpemUgKEdFVF9DT1VOVCBvbmx5KVxcbisgKiBAc2l6ZTogICAgICAgU2l6ZSBvZiBtZW1vcnkgaW4gYnl0ZXMgKEFERCBvbmx5KVxcbisgKiBAYnVmX3BhOiAgICAgRE1BIGFkZHJlc3Mgb2YgbWVtb3J5IChBREQgb25seSlcXG4rICpcXG4rICogVW5pZmllZCBjb21tYW5kIGZvciBhbGwgaG9zdCBtZW1vcnkgb3BlcmF0aW9ucy4gRmllbGRzIGFyZSByZXVzZWRcXG4rICogYWNyb3NzIG9wZXJhdGlvbnMgdG8gbWluaW1pemUgb3Bjb2RlIHNwYWNlIHVzYWdlLlxcbisgKi9cXG4rc3RydWN0IHBkc19jb3JlX2hvc3RfbWVtX2NtZCB7XFxuK1xcdHU4ICAgICBvcGNvZGU7XFxuK1xcdHU4ICAgICBvcGVyO1xcbitcXHRfX2xlMTYgaW5kZXg7XFxuK1xcdF9fbGUxNiB0YWc7XFxuK1xcdHU4ICAgICByZWFzb247XFxuK1xcdHU4ICAgICByc3ZkO1xcbitcXHRfX2xlMzIgbWF4X2NvbnRpZztcXG4rXFx0X19sZTMyIHNpemU7XFxuK1xcdF9fbGU2NCBidWZfcGE7XFxuK307XFxuK1xcbisvKipcXG4rICogc3RydWN0IHBkc19jb3JlX2hvc3RfbWVtX2NvbXAgLSBIT1NUX01FTSBjb21wbGV0aW9uXFxuKyAqIEBzdGF0dXM6ICAgICAgIFN0YXR1cyBvZiB0aGUgY29tbWFuZCAoZW51bSBwZHNfY29yZV9zdGF0dXNfY29kZSlcXG4rICogQG9wZXI6ICAgICAgICAgT3BlcmF0aW9uIHRoYXQgd2FzIHBlcmZvcm1lZFxcbisgKiBAY291bnQ6ICAgICAgICBOdW1iZXIgb2YgbWVtb3J5IHJlcXVlc3RzIChHRVRfQ09VTlQpXFxuKyAqIEBzaXplOiAgICAgICAgIFNpemUgb2YgbWVtb3J5IHJlcXVlc3QgaW4gYnl0ZXMgKFFVRVJZKVxcbisgKiBAdGFnOiAgICAgICAgICBUYWcgZm9yIHRoaXMgbWVtb3J5IHJlcXVlc3QgKFFVRVJZL0RFTClcXG4rICogQHJzdmQ6ICAgICAgICAgUmVzZXJ2ZWRcXG4rICovXFxuK3N0cnVjdCBwZHNfY29yZV9ob3N0X21lbV9jb21wIHtcXG4rXFx0dTggICAgIHN0YXR1cztcXG4rXFx0dTggICAgIG9wZXI7XFxuK1xcdF9fbGUxNiBjb3VudDtcXG4rXFx0X19sZTMyIHNpemU7XFxuK1xcdF9fbGUxNiB0YWc7XFxuK1xcdHU4ICAgICByc3ZkWzZdO1xcbit9O1xcbitcXG4gLypcXG4gICogdW5pb24gcGRzX2NvcmVfZGV2X2NtZCAtIE92ZXJsYXkgb2YgY29yZSBkZXZpY2UgY29tbWFuZCBzdHJ1Y3R1cmVzXFxuICAqL1xcbkBAIC00NjIsNiArOTE1LDE0IEBAIHVuaW9uIHBkc19jb3JlX2Rldl9jbWQge1xcbiBcXHRzdHJ1Y3QgcGRzX2NvcmVfdmZfc2V0YXR0cl9jbWQgICB2Zl9zZXRhdHRyO1xcbiBcXHRzdHJ1Y3QgcGRzX2NvcmVfdmZfZ2V0YXR0cl9jbWQgICB2Zl9nZXRhdHRyO1xcbiBcXHRzdHJ1Y3QgcGRzX2NvcmVfdmZfY3RybF9jbWQgICAgICB2Zl9jdHJsO1xcbitcXG4rXFx0c3RydWN0IHBkc19jb3JlX2dldF9jb21wb25lbnRfaW5mb19jbWQgZ2V0X2NvbXBvbmVudF9pbmZvO1xcbitcXHRzdHJ1Y3QgcGRzX2NvcmVfc2VuZF9wa2dfZGF0YV9jbWQgICAgICBzZW5kX3BrZ19kYXRhO1xcbitcXHRzdHJ1Y3QgcGRzX2NvcmVfc2VuZF9jb21wb25lbnRfdGJsX2NtZCBzZW5kX2NvbXBvbmVudF90Ymw7XFxuK1xcdHN0cnVjdCBwZHNfY29yZV9zZW5kX2NvbXBvbmVudF9jbWQgICAgIHNlbmRfY29tcG9uZW50O1xcbitcXHRzdHJ1Y3QgcGRzX2NvcmVfZmluYWxpemVfdXBkYXRlX2NtZCAgICBmaW5hbGl6ZV91cGRhdGU7XFxuK1xcdHN0cnVjdCBwZHNfY29yZV9tYXRjaF9yZWNvcmRfZGVzY19jbWQgIG1hdGNoX3JlY29yZF9kZXNjO1xcbitcXHRzdHJ1Y3QgcGRzX2NvcmVfaG9zdF9tZW1fY21kICAgICAgICAgICBob3N0X21lbTtcXG4gfTtcXG4gXFxuIC8qXFxuQEAgLTQ4MCw2ICs5NDEsMTQgQEAgdW5pb24gcGRzX2NvcmVfZGV2X2NvbXAge1xcbiBcXHRzdHJ1Y3QgcGRzX2NvcmVfdmZfc2V0YXR0cl9jb21wICAgdmZfc2V0YXR0cjtcXG4gXFx0c3RydWN0IHBkc19jb3JlX3ZmX2dldGF0dHJfY29tcCAgIHZmX2dldGF0dHI7XFxuIFxcdHN0cnVjdCBwZHNfY29yZV92Zl9jdHJsX2NvbXAgICAgICB2Zl9jdHJsO1xcbitcXG4rXFx0c3RydWN0IHBkc19jb3JlX2dldF9jb21wb25lbnRfaW5mb19jb21wIGdldF9jb21wb25lbnRfaW5mbztcXG4rXFx0c3RydWN0IHBkc19jb3JlX3NlbmRfcGtnX2RhdGFfY29tcCAgICAgIHNlbmRfcGtnX2RhdGE7XFxuK1xcdHN0cnVjdCBwZHNfY29yZV9zZW5kX2NvbXBvbmVudF90YmxfY29tcCBzZW5kX2NvbXBvbmVudF90Ymw7XFxuK1xcdHN0cnVjdCBwZHNfY29yZV9zZW5kX2NvbXBvbmVudF9jb21wICAgICBzZW5kX2NvbXBvbmVudDtcXG4rXFx0c3RydWN0IHBkc19jb3JlX2ZpbmFsaXplX3VwZGF0ZV9jb21wICAgIGZpbmFsaXplX3VwZGF0ZTtcXG4rXFx0c3RydWN0IHBkc19jb3JlX21hdGNoX3JlY29yZF9kZXNjX2NvbXAgIG1hdGNoX3JlY29yZF9kZXNjO1xcbitcXHRzdHJ1Y3QgcGRzX2NvcmVfaG9zdF9tZW1fY29tcCAgICAgICAgICAgaG9zdF9tZW07XFxuIH07XFxuIFxcbiAvKipcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTA6MDM6NDYuMTk0NzA4MjQ4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6OTQ1NDIwMzY3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEFNRC9QZW5zYW5kbyBDb3JlIFNtYXJ0TklDIGRyaXZlciAocGRzX2NvcmUpLCB3aGljaCByZXF1aXJlcyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBUaGVyZWZvcmUsIHRoZSBjb2RlIGlzIHVucmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOGZkN2RmOTM1ODMxNjQ0ODU4ZmUwZGViMzM5Yzc4NmQ0N2E3ZDg1N1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDMwIDEwOjAzOjQ0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L2FtZC9wZHNfY29yZS5yc3QgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvYW1kL3Bkc19jb3JlLnJzdFxuaW5kZXggOWU4YTE2YzQ0MTAyOS4uNDk0ODdhMzVjMTYzMiAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC9hbWQvcGRzX2NvcmUucnN0XG4rKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvYW1kL3Bkc19jb3JlLnJzdFxuQEAgLTEwMiw2ICsxMDIsOTUgQEAgY3VycmVudGx5IGluIHVzZSwgYW5kIHRoYXQgYmFuayB3aWxsIHVzZWQgZm9yIHRoZSBuZXh0IGJvb3Q6OlxuICAgIyBkZXZsaW5rIGRldiBmbGFzaCBwY2kvMDAwMDpiNTowMC4wIFxcXG4gICAgICAgICAgICAgZmlsZSBwZW5zYW5kby9kc2NfZndfMS42My4wLTIyLnRhclxuIFxuK0Zpcm13YXJlIE1hbmFnZW1lbnQgKFBMRE0pXG4rPT09PT09PT09PT09PT09PT09PT09PT09PT1cbitcbitGaXJtd2FyZSB0aGF0IHN1cHBvcnRzIFBMRE0gY2FuIGJlIHVwZGF0ZWQgdXNpbmcgdGhlIGRldmxpbmsgZmxhc2ggY29tbWFuZFxuK3dpdGggYSBQTERNIGZpcm13YXJlIHBhY2thZ2UuIFRoZSBlbnRpcmUgcGFja2FnZSBjYW4gYmUgdXBkYXRlZCBhdCBvbmNlOjpcbitcbisgICMgZGV2bGluayBkZXYgZmxhc2ggcGNpLzAwMDA6YjU6MDAuMCBmaWxlIGZpcm13YXJlLnBsZG1md1xuK1xuK0luZGl2aWR1YWwgY29tcG9uZW50cyBjYW4gYWxzbyBiZSB1cGRhdGVkIGJ5IHNwZWNpZnlpbmcgdGhlIGNvbXBvbmVudCBuYW1lOjpcbitcbisgICMgZGV2bGluayBkZXYgZmxhc2ggcGNpLzAwMDA6YjU6MDAuMCBcXFxuKyAgICAgICAgICAgIGZpbGUgZmlybXdhcmUucGxkbWZ3IGNvbXBvbmVudCBmdy5jcGxkXG4rXG4rUGVyLWNvbXBvbmVudCB1cGRhdGUgdXNlcyBkcml2ZXItZGVmaW5lZCBjb21wb25lbnQgbmFtZXMgKGZ3LCBmdy5jcGxkLFxuK2V0Yy4pLiBOb3QgYWxsIGNvbXBvbmVudHMgc3VwcG9ydCBwZXItY29tcG9uZW50IHVwZGF0ZSAtXG4rZGV2bGluayB3aWxsIHJlamVjdCB0aGUgcmVxdWVzdCBpZiB0aGUgc3BlY2lmaWVkIGNvbXBvbmVudCBjYW5ub3RcbitiZSB1cGRhdGVkLlxuK1xuK0dvbGQgKHJlY292ZXJ5KSBjb21wb25lbnRzIGNhbiBiZSB1cGRhdGVkIGJ5IHNwZWNpZnlpbmcgdGhlIGJhc2UgY29tcG9uZW50XG4rbmFtZSAoZS5nLiwgYGBmd2BgIGZvciBgYGZ3LmdvbGRgYCkgd2l0aCBhIGdvbGRmdyBwYWNrYWdlIGZpbGUgd2hlbiB0aGVcbitkZXZpY2Ugc3VwcG9ydHMgcGVyLWNvbXBvbmVudCB1cGRhdGUuIFRoZSBgYC5nb2xkYGAgc3VmZml4IGluIGRldmxpbmsgaW5mb1xuK291dHB1dCBpbmRpY2F0ZXMgdGhlIGdvbGQgc2xvdCB2ZXJzaW9uLCBub3QgYSBmbGFzaCB0YXJnZXQuXG4rXG4rSW5mbyB2ZXJzaW9ucyAoUExETSlcbis9PT09PT09PT09PT09PT09PT09PVxuK1xuK0Zpcm13YXJlIHRoYXQgc3VwcG9ydHMgUExETSByZXBvcnRzIGNvbXBvbmVudCB2ZXJzaW9ucyB1c2luZyBkcml2ZXItZGVmaW5lZFxuK25hbWVzLiBUaGUgZHJpdmVyIHJlcG9ydHMgdGhlIGZvbGxvd2luZyBjb21wb25lbnQgdmVyc2lvbnM6XG4rXG4rLi4gbGlzdC10YWJsZTo6IGRldmxpbmsgaW5mbyB2ZXJzaW9ucyBmb3IgUExETS1jYXBhYmxlIGZpcm13YXJlXG4rICAgOndpZHRoczogNSA1IDkwXG4rXG4rICAgKiAtIE5hbWVcbisgICAgIC0gVHlwZVxuKyAgICAgLSBEZXNjcmlwdGlvblxuKyAgICogLSBgYGZ3YGBcbisgICAgIC0gcnVubmluZywgc3RvcmVkXG4rICAgICAtIE1haW4gZmlybXdhcmVcbisgICAqIC0gYGBmdy5nb2xkYGBcbisgICAgIC0gc3RvcmVkXG4rICAgICAtIEdvbGQgKHJlY292ZXJ5KSBmaXJtd2FyZVxuKyAgICogLSBgYGZ3LmJvb3Rsb2FkZXJgYFxuKyAgICAgLSBydW5uaW5nLCBzdG9yZWRcbisgICAgIC0gQm9vdCBsb2FkZXJcbisgICAqIC0gYGBmdy5jcGxkYGBcbisgICAgIC0gcnVubmluZywgc3RvcmVkXG4rICAgICAtIENQTERcbisgICAqIC0gYGBmdy5zZWN1cmVgYFxuKyAgICAgLSBydW5uaW5nLCBzdG9yZWRcbisgICAgIC0gU2VjdXJlIGJvb3QgZmlybXdhcmVcbisgICAqIC0gYGBmdy5mcGdhYGBcbisgICAgIC0gcnVubmluZywgc3RvcmVkXG4rICAgICAtIEZQR0EgY29uZmlndXJhdGlvblxuKyAgICogLSBgYGZ3LnN1Y2BgXG4rICAgICAtIHJ1bm5pbmcsIHN0b3JlZFxuKyAgICAgLSBTeXN0ZW0gVW5pdCBDb250cm9sbGVyIGZpcm13YXJlXG4rICAgKiAtIGBgZncuc3VjLmJvb3Rsb2FkZXJgYFxuKyAgICAgLSBydW5uaW5nLCBzdG9yZWRcbisgICAgIC0gU3lzdGVtIFVuaXQgQ29udHJvbGxlciBib290bG9hZGVyXG4rICAgKiAtIGBgZncudWJvb3RgYFxuKyAgICAgLSBydW5uaW5nLCBzdG9yZWRcbisgICAgIC0gVS1Cb290IGJvb3Rsb2FkZXJcbisgICAqIC0gYGBhc2ljLmlkYGBcbisgICAgIC0gZml4ZWRcbisgICAgIC0gVGhlIEFTSUMgdHlwZSBmb3IgdGhpcyBkZXZpY2VcbisgICAqIC0gYGBhc2ljLnJldmBgXG4rICAgICAtIGZpeGVkXG4rICAgICAtIFRoZSByZXZpc2lvbiBvZiB0aGUgQVNJQyBmb3IgdGhpcyBkZXZpY2VcbitcbitFeGFtcGxlIG91dHB1dDo6XG4rXG4rICAkIGRldmxpbmsgZGV2IGluZm8gcGNpLzAwMDA6MDA6MDUuMFxuKyAgcGNpLzAwMDA6MDA6MDUuMDpcbisgICAgZHJpdmVyIHBkc19jb3JlXG4rICAgIHNlcmlhbF9udW1iZXIgRkxNMTg0MjAwNzNcbisgICAgdmVyc2lvbnM6XG4rICAgICAgICBmaXhlZDpcbisgICAgICAgICAgYXNpYy5pZCAweDBcbisgICAgICAgICAgYXNpYy5yZXYgMHgwXG4rICAgICAgICBydW5uaW5nOlxuKyAgICAgICAgICBmdy5ib290bG9hZGVyIDEuMi4zXG4rICAgICAgICAgIGZ3IDEuMy4wXG4rICAgICAgICAgIGZ3LmNwbGQgMy4xOFxuKyAgICAgICAgc3RvcmVkOlxuKyAgICAgICAgICBmdy5ib290bG9hZGVyIDEuMi4zXG4rICAgICAgICAgIGZ3LmdvbGQgMS4yLjBcbisgICAgICAgICAgZncgMS4zLjBcbisgICAgICAgICAgZncuY3BsZCAzLjE4XG4rXG4gSGVhbHRoIFJlcG9ydGVyc1xuID09PT09PT09PT09PT09PT1cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9LY29uZmlnXG5pbmRleCBlMzU5OTExNDFhMWEyLi43NDNlM2Q0YjZiOTRlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL0tjb25maWdcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9LY29uZmlnXG5AQCAtMTcxLDYgKzE3MSw3IEBAIGNvbmZpZyBQRFNfQ09SRVxuIFx0ZGVwZW5kcyBvbiA2NEJJVCBcdTAwMjZcdTAwMjYgUENJXG4gXHRzZWxlY3QgQVVYSUxJQVJZX0JVU1xuIFx0c2VsZWN0IE5FVF9ERVZMSU5LXG4rXHRzZWxlY3QgUExETUZXXG4gXHRoZWxwXG4gXHQgIFRoaXMgZW5hYmxlcyB0aGUgc3VwcG9ydCBmb3IgdGhlIEFNRC9QZW5zYW5kbyBDb3JlIGRldmljZSBmYW1pbHkgb2ZcbiBcdCAgYWRhcHRlcnMuICBNb3JlIHNwZWNpZmljIGluZm9ybWF0aW9uIG9uIHRoaXMgZHJpdmVyIGNhbiBiZVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9jb3JlLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvY29yZS5jXG5pbmRleCAwNGVjMjU2OWM2MWMwLi45MjJlM2VjOGFmMWI5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL2NvcmUuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL2NvcmUuY1xuQEAgLTQ4OSw2ICs0ODksMTUgQEAgdm9pZCBwZHNjX3RlYXJkb3duKHN0cnVjdCBwZHNjICpwZHNjLCBib29sIHJlbW92aW5nKVxuIFx0XHRwZHNjX2RldmNtZF9yZXNldChwZHNjKTtcbiBcbiBcdHBjaV9jbGVhcl9tYXN0ZXIocGRzYy1cdTAwM2VwZGV2KTtcbitcdGlmICghcGRzYy1cdTAwM2VwZGV2LVx1MDAzZWlzX3ZpcnRmbikge1xuK1x0XHR1MTYgdmFsO1xuK1xuK1x0XHQvKiBGbHVzaCBhbnkgaW4tZmxpZ2h0IERNQSBiZWZvcmUgZnJlZWluZyBidWZmZXJzLlxuK1x0XHQgKiBBIGNvbmZpZyByZWFkIGNvbXBsZXRpb24gY2Fubm90IHJldHVybiB1bnRpbCBhbGwgcHJpb3JcbitcdFx0ICogZGV2aWNlLWluaXRpYXRlZCBtZW1vcnkgd3JpdGVzIGhhdmUgY29tcGxldGVkLlxuK1x0XHQgKi9cbitcdFx0cGNpX3JlYWRfY29uZmlnX3dvcmQocGRzYy1cdTAwM2VwZGV2LCBQQ0lfVkVORE9SX0lELCBcdTAwMjZ2YWwpO1xuK1x0fVxuIFxuIFx0cGRzY19jb3JlX3VuaW5pdChwZHNjKTtcbiBcbkBAIC00OTcsNiArNTA2LDggQEAgdm9pZCBwZHNjX3RlYXJkb3duKHN0cnVjdCBwZHNjICpwZHNjLCBib29sIHJlbW92aW5nKVxuIFx0XHRwZHNjLVx1MDAzZXZpZnR5cGVfc3RhdHVzID0gTlVMTDtcbiBcdH1cbiBcbitcdHBkc2NfZGVidWdmc19kZWxfaG9zdF9tZW0ocGRzYyk7XG4rXHRwZHNjX2hvc3RfbWVtX2ZyZWUocGRzYyk7XG4gXHRwZHNjX2Rldl91bmluaXQocGRzYyk7XG4gXG4gXHRzZXRfYml0KFBEU0NfU19GV19ERUFELCBcdTAwMjZwZHNjLVx1MDAzZXN0YXRlKTtcbkBAIC01MDYsNiArNTE3LDggQEAgaW50IHBkc2Nfc3RhcnQoc3RydWN0IHBkc2MgKnBkc2MpXG4ge1xuIFx0cGRzX2NvcmVfaW50cl9tYXNrKFx1MDAyNnBkc2MtXHUwMDNlaW50cl9jdHJsW3Bkc2MtXHUwMDNlYWRtaW5xY3EuaW50eF0sXG4gXHRcdFx0ICAgUERTX0NPUkVfSU5UUl9NQVNLX0NMRUFSKTtcbitcdHBkc2NfaG9zdF9tZW1fYWRkKHBkc2MpO1xuK1x0cGRzY19kZWJ1Z2ZzX2FkZF9ob3N0X21lbShwZHNjKTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbkBAIC01ODcsNiArNjAwLDggQEAgdm9pZCBwZHNjX2Z3X3VwKHN0cnVjdCBwZHNjICpwZHNjKVxuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG4rXHRwZHNjX2Z3X2NvbXBvbmVudHNfaW52YWxpZGF0ZShwZHNjKTtcbitcbiBcdGVyciA9IHBkc2Nfc2V0dXAocGRzYywgUERTQ19TRVRVUF9SRUNPVkVSWSk7XG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIGVycl9vdXQ7XG5AQCAtNjcwLDMgKzY4NSwxNjEgQEAgdm9pZCBwZHNjX2hlYWx0aF90aHJlYWQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIG91dF91bmxvY2s6XG4gXHRtdXRleF91bmxvY2soXHUwMDI2cGRzYy1cdTAwM2Vjb25maWdfbG9jayk7XG4gfVxuK1xuK3N0YXRpYyB2b2lkIHBkc2NfaG9zdF9tZW1fZGVsX29uZShzdHJ1Y3QgcGRzYyAqcGRzYywgdTE2IHRhZywgdTggcmVhc29uKVxuK3tcbitcdHVuaW9uIHBkc19jb3JlX2Rldl9jb21wIGNvbXAgPSB7fTtcbitcdHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgY21kID0ge1xuK1x0XHQuaG9zdF9tZW0ub3Bjb2RlID0gUERTX0NPUkVfQ01EX0hPU1RfTUVNLFxuK1x0XHQuaG9zdF9tZW0ub3BlciA9IFBEU19DT1JFX0hPU1RfTUVNX0RFTCxcbitcdFx0Lmhvc3RfbWVtLnRhZyA9IGNwdV90b19sZTE2KHRhZyksXG4rXHRcdC5ob3N0X21lbS5yZWFzb24gPSByZWFzb24sXG4rXHR9O1xuK1xuK1x0ZGV2X2RiZyhwZHNjLVx1MDAzZWRldiwgXCJTZW5kaW5nIGRldmNtZCBmb3IgbWVtIGRlbCB0YWcgJWRcXG5cIiwgdGFnKTtcbitcdHBkc2NfZGV2Y21kKHBkc2MsIFx1MDAyNmNtZCwgXHUwMDI2Y29tcCwgcGRzYy1cdTAwM2VkZXZjbWRfdGltZW91dCk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcGRzY19ob3N0X21lbV9hZGRfb25lKHN0cnVjdCBwZHNjICpwZHNjLCBpbnQgaW5kZXgpXG4re1xuK1x0c3RydWN0IHBkc2NfaG9zdF9tZW0gKmhtID0gXHUwMDI2cGRzYy1cdTAwM2Vob3N0X21lbV9yZXFzW2luZGV4XTtcbitcdHVuaW9uIHBkc19jb3JlX2Rldl9jb21wIGNvbXAgPSB7fTtcbitcdHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgY21kID0ge307XG4rXHRpbnQgZXJyO1xuK1xuK1x0Y21kLmhvc3RfbWVtLm9wY29kZSA9IFBEU19DT1JFX0NNRF9IT1NUX01FTTtcbitcdGNtZC5ob3N0X21lbS5vcGVyID0gUERTX0NPUkVfSE9TVF9NRU1fUVVFUlk7XG4rXHRjbWQuaG9zdF9tZW0uaW5kZXggPSBjcHVfdG9fbGUxNihpbmRleCk7XG4rXHRkZXZfZGJnKHBkc2MtXHUwMDNlZGV2LCBcIlNlbmRpbmcgZGV2Y21kIGZvciBtZW0gcXVlcnkgaW5kZXggJWRcXG5cIiwgaW5kZXgpO1xuK1x0ZXJyID0gcGRzY19kZXZjbWQocGRzYywgXHUwMDI2Y21kLCBcdTAwMjZjb21wLCBwZHNjLVx1MDAzZWRldmNtZF90aW1lb3V0KTtcbitcdGlmIChlcnIgfHwgY29tcC5zdGF0dXMgIT0gUERTX1JDX1NVQ0NFU1MpIHtcbitcdFx0ZGV2X2VycihwZHNjLVx1MDAzZWRldiwgXCJtZW0gcXVlcnkgZmFpbGVkIGVyciAlZCBzdGF0dXMgJWRcXG5cIixcbitcdFx0XHRlcnIsIGNvbXAuc3RhdHVzKTtcbitcdFx0cmV0dXJuIGVyciA/IGVyciA6IC1FSU87XG4rXHR9XG4rXHRobS1cdTAwM2VzaXplID0gbGUzMl90b19jcHUoY29tcC5ob3N0X21lbS5zaXplKTtcbitcdGhtLVx1MDAzZXRhZyA9IGxlMTZfdG9fY3B1KGNvbXAuaG9zdF9tZW0udGFnKTtcbitcdGRldl9kYmcocGRzYy1cdTAwM2VkZXYsIFwibWVtIHF1ZXJ5IHJldHVybmVkIHNpemUgJWQgdGFnICVkXFxuXCIsXG4rXHRcdGhtLVx1MDAzZXNpemUsIGhtLVx1MDAzZXRhZyk7XG4rXG4rXHRpZiAoIWhtLVx1MDAzZXNpemUgfHwgaG0tXHUwMDNlc2l6ZSBcdTAwM2UgUERTQ19IT1NUX01FTV9NQVhfQ09OVElHKSB7XG4rXHRcdGRldl9lcnIocGRzYy1cdTAwM2VkZXYsIFwiaW52YWxpZCBzaXplICVkIGZvciB0YWcgJWRcXG5cIixcbitcdFx0XHRobS1cdTAwM2VzaXplLCBobS1cdTAwM2V0YWcpO1xuK1x0XHRlcnIgPSAtRUlOVkFMO1xuK1x0XHRnb3RvIGVycl9kZWw7XG4rXHR9XG4rXG4rXHRobS1cdTAwM2VvcmRlciA9IGdldF9vcmRlcihobS1cdTAwM2VzaXplKTtcbitcdGhtLVx1MDAzZXBnID0gYWxsb2NfcGFnZXMoR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8gfCBfX0dGUF9OT1dBUk4sIGhtLVx1MDAzZW9yZGVyKTtcbitcdGlmICghaG0tXHUwMDNlcGcpIHtcbitcdFx0ZGV2X3dhcm4ocGRzYy1cdTAwM2VkZXYsIFwiYWxsb2Mgb3JkZXIgJWQgZmFpbGVkIGZvciB0YWcgJWRcXG5cIixcbitcdFx0XHQgaG0tXHUwMDNlb3JkZXIsIGhtLVx1MDAzZXRhZyk7XG4rXHRcdGVyciA9IC1FTk9NRU07XG4rXHRcdGdvdG8gZXJyX2RlbDtcbitcdH1cbitcbitcdGhtLVx1MDAzZXBhID0gZG1hX21hcF9wYWdlKHBkc2MtXHUwMDNlZGV2LCBobS1cdTAwM2VwZywgMCwgaG0tXHUwMDNlc2l6ZSxcbitcdFx0XHQgICAgICBETUFfQklESVJFQ1RJT05BTCk7XG4rXHRpZiAoZG1hX21hcHBpbmdfZXJyb3IocGRzYy1cdTAwM2VkZXYsIGhtLVx1MDAzZXBhKSkge1xuK1x0XHRkZXZfZXJyKHBkc2MtXHUwMDNlZGV2LCBcImRtYSBtYXAgZmFpbGVkIGZvciB0YWcgJWQgc2l6ZSAlZFxcblwiLFxuK1x0XHRcdGhtLVx1MDAzZXRhZywgaG0tXHUwMDNlc2l6ZSk7XG4rXHRcdF9fZnJlZV9wYWdlcyhobS1cdTAwM2VwZywgaG0tXHUwMDNlb3JkZXIpO1xuK1x0XHRobS1cdTAwM2VwZyA9IE5VTEw7XG4rXHRcdGVyciA9IC1FSU87XG4rXHRcdGdvdG8gZXJyX2RlbDtcbitcdH1cbitcbitcdC8qIFRyYWNrIHRoaXMgYWxsb2NhdGlvbiBzbyBwZHNjX2hvc3RfbWVtX2ZyZWUoKSBjYW4gY2xlYW4gaXQgdXAgKi9cbitcdHBkc2MtXHUwMDNlbnVtX2hvc3RfbWVtX3JlcXMrKztcbitcbitcdG1lbXNldChcdTAwMjZjbWQsIDAsIHNpemVvZihjbWQpKTtcbitcdG1lbXNldChcdTAwMjZjb21wLCAwLCBzaXplb2YoY29tcCkpO1xuK1x0Y21kLmhvc3RfbWVtLm9wY29kZSA9IFBEU19DT1JFX0NNRF9IT1NUX01FTTtcbitcdGNtZC5ob3N0X21lbS5vcGVyID0gUERTX0NPUkVfSE9TVF9NRU1fQUREO1xuK1x0Y21kLmhvc3RfbWVtLnRhZyA9IGNwdV90b19sZTE2KGhtLVx1MDAzZXRhZyk7XG4rXHRjbWQuaG9zdF9tZW0uc2l6ZSA9IGNwdV90b19sZTMyKGhtLVx1MDAzZXNpemUpO1xuK1x0Y21kLmhvc3RfbWVtLmJ1Zl9wYSA9IGNwdV90b19sZTY0KGhtLVx1MDAzZXBhKTtcbitcbitcdGRldl9kYmcocGRzYy1cdTAwM2VkZXYsIFwiU2VuZGluZyBkZXZjbWQgZm9yIG1lbSBhZGQgdGFnICVkIHNpemUgJWQgcGEgJXBhZFxcblwiLFxuK1x0XHRobS1cdTAwM2V0YWcsIGhtLVx1MDAzZXNpemUsIFx1MDAyNmhtLVx1MDAzZXBhKTtcbitcdGVyciA9IHBkc2NfZGV2Y21kKHBkc2MsIFx1MDAyNmNtZCwgXHUwMDI2Y29tcCwgcGRzYy1cdTAwM2VkZXZjbWRfdGltZW91dCk7XG4rXHRpZiAoZXJyIHx8IGNvbXAuc3RhdHVzICE9IFBEU19SQ19TVUNDRVNTKSB7XG4rXHRcdGRldl9lcnIocGRzYy1cdTAwM2VkZXYsIFwibWVtIGFkZCBmYWlsZWQgZXJyICVkIHN0YXR1cyAlZCBmb3IgdGFnICVkXFxuXCIsXG4rXHRcdFx0ZXJyLCBjb21wLnN0YXR1cywgaG0tXHUwMDNldGFnKTtcbitcdFx0ZXJyID0gZXJyID8gZXJyIDogLUVJTztcbitcdFx0Z290byBlcnJfZGVsO1xuK1x0fVxuK1x0ZGV2X2RiZyhwZHNjLVx1MDAzZWRldiwgXCJtZW0gYWRkIGNvbXBsZXRlZCBmb3IgdGFnICVkXFxuXCIsIGhtLVx1MDAzZXRhZyk7XG4rXG4rXHRyZXR1cm4gMDtcbitcbitlcnJfZGVsOlxuK1x0LyogQWZ0ZXIgTUVNX1FVRVJZIHN1Y2NlZWRzLCBmaXJtd2FyZSBleHBlY3RzIE1FTV9BREQgb3IgTUVNX0RFTCAqL1xuK1x0cGRzY19ob3N0X21lbV9kZWxfb25lKHBkc2MsIGhtLVx1MDAzZXRhZywgUERTX1JDX0VOT01FTSk7XG4rXHRyZXR1cm4gZXJyO1xuK31cbitcbit2b2lkIHBkc2NfaG9zdF9tZW1fYWRkKHN0cnVjdCBwZHNjICpwZHNjKVxuK3tcbitcdHVuaW9uIHBkc19jb3JlX2Rldl9jb21wIGNvbXAgPSB7fTtcbitcdHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgY21kID0ge307XG4rXHR1MTYgY291bnQ7XG4rXHRpbnQgZXJyO1xuK1x0aW50IGk7XG4rXG4rXHRpZiAoIShwZHNjLVx1MDAzZWRldl9pZGVudC5jYXBhYmlsaXRpZXMgXHUwMDI2XG4rXHQgICAgIGNwdV90b19sZTY0KFBEU19DT1JFX0RFVl9DQVBfSE9TVF9NRU0pKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0Y21kLmhvc3RfbWVtLm9wY29kZSA9IFBEU19DT1JFX0NNRF9IT1NUX01FTTtcbitcdGNtZC5ob3N0X21lbS5vcGVyID0gUERTX0NPUkVfSE9TVF9NRU1fR0VUX0NPVU5UO1xuK1x0Y21kLmhvc3RfbWVtLmluZGV4ID0gY3B1X3RvX2xlMTYoUERTQ19IT1NUX01FTV9NQVhfQ09VTlQpO1xuK1x0Y21kLmhvc3RfbWVtLm1heF9jb250aWcgPSBjcHVfdG9fbGUzMihQRFNDX0hPU1RfTUVNX01BWF9DT05USUcpO1xuK1x0ZGV2X2RiZyhwZHNjLVx1MDAzZWRldiwgXCJTZW5kaW5nIGRldmNtZCBmb3IgbWVtIGdldCBjb3VudCBtYXhfY29udGlnICV1XFxuXCIsXG4rXHRcdFBEU0NfSE9TVF9NRU1fTUFYX0NPTlRJRyk7XG4rXHRlcnIgPSBwZHNjX2RldmNtZChwZHNjLCBcdTAwMjZjbWQsIFx1MDAyNmNvbXAsIHBkc2MtXHUwMDNlZGV2Y21kX3RpbWVvdXQpO1xuK1x0aWYgKGVyciB8fCBjb21wLnN0YXR1cyAhPSBQRFNfUkNfU1VDQ0VTUykge1xuK1x0XHRkZXZfZXJyKHBkc2MtXHUwMDNlZGV2LCBcIm1lbSBnZXQgY291bnQgZmFpbGVkIGVyciAlZCBzdGF0dXMgJWRcXG5cIixcbitcdFx0XHRlcnIsIGNvbXAuc3RhdHVzKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0Y291bnQgPSBtaW4obGUxNl90b19jcHUoY29tcC5ob3N0X21lbS5jb3VudCksXG4rXHRcdCAgICBQRFNDX0hPU1RfTUVNX01BWF9DT1VOVCk7XG4rXHRkZXZfZGJnKHBkc2MtXHUwMDNlZGV2LCBcIm1lbSBnZXQgY291bnQgcmV0dXJuZWQgY291bnQgJWRcXG5cIiwgY291bnQpO1xuK1x0aWYgKGNvdW50ID09IDApXG4rXHRcdHJldHVybjtcbitcbitcdHBkc2MtXHUwMDNlaG9zdF9tZW1fcmVxcyA9IGt6YWxsb2Nfb2JqcygqcGRzYy1cdTAwM2Vob3N0X21lbV9yZXFzLCBjb3VudCxcbitcdFx0XHRcdFx0ICAgR0ZQX0tFUk5FTCk7XG4rXHRpZiAoIXBkc2MtXHUwMDNlaG9zdF9tZW1fcmVxcykge1xuK1x0XHRkZXZfZXJyKHBkc2MtXHUwMDNlZGV2LCBcImZhaWxlZCB0byBhbGxvYyBob3N0X21lbV9yZXFzIGFycmF5XFxuXCIpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBjb3VudDsgaSsrKSB7XG4rXHRcdGVyciA9IHBkc2NfaG9zdF9tZW1fYWRkX29uZShwZHNjLCBpKTtcbitcdFx0aWYgKGVycilcbitcdFx0XHRicmVhaztcbitcdH1cbit9XG4rXG4rdm9pZCBwZHNjX2hvc3RfbWVtX2ZyZWUoc3RydWN0IHBkc2MgKnBkc2MpXG4re1xuK1x0aW50IGk7XG4rXG4rXHRpZiAoIXBkc2MtXHUwMDNlaG9zdF9tZW1fcmVxcylcbitcdFx0cmV0dXJuO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgcGRzYy1cdTAwM2VudW1faG9zdF9tZW1fcmVxczsgaSsrKSB7XG4rXHRcdGRtYV91bm1hcF9wYWdlKHBkc2MtXHUwMDNlZGV2LCBwZHNjLVx1MDAzZWhvc3RfbWVtX3JlcXNbaV0ucGEsXG4rXHRcdFx0ICAgICAgIHBkc2MtXHUwMDNlaG9zdF9tZW1fcmVxc1tpXS5zaXplLFxuK1x0XHRcdCAgICAgICBETUFfQklESVJFQ1RJT05BTCk7XG4rXHRcdF9fZnJlZV9wYWdlcyhwZHNjLVx1MDAzZWhvc3RfbWVtX3JlcXNbaV0ucGcsXG4rXHRcdFx0ICAgICBwZHNjLVx1MDAzZWhvc3RfbWVtX3JlcXNbaV0ub3JkZXIpO1xuK1x0fVxuK1xuK1x0a2ZyZWUocGRzYy1cdTAwM2Vob3N0X21lbV9yZXFzKTtcbitcdHBkc2MtXHUwMDNlaG9zdF9tZW1fcmVxcyA9IE5VTEw7XG4rXHRwZHNjLVx1MDAzZW51bV9ob3N0X21lbV9yZXFzID0gMDtcbit9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL2NvcmUuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9jb3JlLmhcbmluZGV4IGI3ZmU5YWQ3MzM0OTguLjc5MTc1NmE1MDg3MGUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvY29yZS5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvY29yZS5oXG5AQCAtNSw2ICs1LDcgQEBcbiAjZGVmaW5lIF9QRFNDX0hfXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZGVidWdmcy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbW16b25lLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvZGV2bGluay5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGRzL3Bkc19jb21tb24uaFx1MDAzZVxuQEAgLTIzLDYgKzI0LDIwIEBAXG4gI2RlZmluZSBQRFNDX1NFVFVQX1JFQ09WRVJZXHRmYWxzZVxuICNkZWZpbmUgUERTQ19TRVRVUF9JTklUXHRcdHRydWVcbiBcbisvKiBVc2UgZml4ZWQgNE1CIGluc3RlYWQgb2YgUEFHRV9TSVpFIFx1MDAzY1x1MDAzYyBNQVhfUEFHRV9PUkRFUiB0byBhdm9pZFxuKyAqIGNwdV90b19sZTMyKCkgdHJ1bmNhdGlvbiBvbiBsYXJnZS1wYWdlIGNvbmZpZ3NcbisgKi9cbisjZGVmaW5lIFBEU0NfSE9TVF9NRU1fTUFYX0NPTlRJRyAoNCAqIDEwMjQgKiAxMDI0KVxuKyNkZWZpbmUgUERTQ19IT1NUX01FTV9NQVhfQ09VTlQgIDI1NlxuK1xuK3N0cnVjdCBwZHNjX2RlZmVycmVkX2RtYSB7XG4rXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XG4rXHRkbWFfYWRkcl90IGRtYV9hZGRyO1xuK1x0dm9pZCAqdmE7XG4rXHRzaXplX3Qgc2l6ZTtcbitcdGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcjtcbit9O1xuK1xuIHN0cnVjdCBwZHNjX2Rldl9iYXIge1xuIFx0dm9pZCBfX2lvbWVtICp2YWRkcjtcbiBcdHBoeXNfYWRkcl90IGJ1c19hZGRyO1xuQEAgLTE0MSw2ICsxNTYsMTQgQEAgc3RydWN0IHBkc2NfdmlmdHlwZSB7XG4gXHRzdHJ1Y3QgcGRzX2F1eGlsaWFyeV9kZXYgKnBhZGV2O1xuIH07XG4gXG4rc3RydWN0IHBkc2NfaG9zdF9tZW0ge1xuK1x0dTMyIHNpemU7XG4rXHR1MTYgdGFnO1xuK1x0dTggb3JkZXI7XG4rXHRzdHJ1Y3QgcGFnZSAqcGc7XG4rXHRkbWFfYWRkcl90IHBhO1xuK307XG4rXG4gLyogTm8gc3RhdGUgZmxhZ3Mgc2V0IG1lYW5zIHdlIGFyZSBpbiBhIHN0ZWFkeSBydW5uaW5nIHN0YXRlICovXG4gZW51bSBwZHNjX3N0YXRlX2ZsYWdzIHtcbiBcdFBEU0NfU19GV19ERUFELFx0XHQgICAgLyogc3RvcHBlZCwgd2FpdCBvbiBzdGFydHVwIG9yIHJlY292ZXJ5ICovXG5AQCAtMTg1LDYgKzIwOCw4IEBAIHN0cnVjdCBwZHNjIHtcbiBcdHN0cnVjdCBtdXRleCBkZXZjbWRfbG9jaztcdC8qIGxvY2sgZm9yIGRldl9jbWQgb3BlcmF0aW9ucyAqL1xuIFx0c3RydWN0IG11dGV4IGNvbmZpZ19sb2NrO1x0LyogbG9jayBmb3IgY29uZmlndXJhdGlvbiBvcGVyYXRpb25zICovXG4gXHRzcGlubG9ja190IGFkbWlucV9sb2NrO1x0XHQvKiBsb2NrIGZvciBhZG1pbnEgb3BlcmF0aW9ucyAqL1xuK1x0c3RydWN0IGxpc3RfaGVhZCBkZWZlcnJlZF9kbWFfbGlzdDtcbitcdHNwaW5sb2NrX3QgZGVmZXJyZWRfZG1hX2xvY2s7XHQvKiBsb2NrIGZvciBkZWZlcnJlZCBETUEgbGlzdCAqL1xuIFx0cmVmY291bnRfdCBhZG1pbnFfcmVmY250O1xuIFx0c3RydWN0IHBkc19jb3JlX2Rldl9pbmZvX3JlZ3MgX19pb21lbSAqaW5mb19yZWdzO1xuIFx0c3RydWN0IHBkc19jb3JlX2Rldl9jbWRfcmVncyBfX2lvbWVtICpjbWRfcmVncztcbkBAIC0xOTksNiArMjI0LDExIEBAIHN0cnVjdCBwZHNjIHtcbiBcdHU2NCBsYXN0X2VpZDtcbiBcdHN0cnVjdCBwZHNjX3ZpZnR5cGUgKnZpZnR5cGVfc3RhdHVzO1xuIFx0c3RydWN0IHdvcmtfc3RydWN0IHBjaV9yZXNldF93b3JrO1xuK1xuK1x0c3RydWN0IHBkc2NfaG9zdF9tZW0gKmhvc3RfbWVtX3JlcXM7XG4rXHR1MTYgbnVtX2hvc3RfbWVtX3JlcXM7XG4rXG4rXHRzdHJ1Y3QgcGRzX2NvcmVfY29tcG9uZW50X2xpc3RfaW5mbyBmd19jb21wb25lbnRzO1xuIH07XG4gXG4gLyoqIGVudW0gcGRzX2NvcmVfZGJlbGxfYml0cyAtIGJpdHdpc2UgY29tcG9zaXRpb24gb2YgZGJlbGwgdmFsdWVzLlxuQEAgLTI3NSwxNCArMzA1LDI0IEBAIHZvaWQgcGRzY19kZWJ1Z2ZzX2FkZF92aWZ0eXBlKHN0cnVjdCBwZHNjICpwZHNjKTtcbiB2b2lkIHBkc2NfZGVidWdmc19hZGRfaXJxcyhzdHJ1Y3QgcGRzYyAqcGRzYyk7XG4gdm9pZCBwZHNjX2RlYnVnZnNfYWRkX3FjcShzdHJ1Y3QgcGRzYyAqcGRzYywgc3RydWN0IHBkc2NfcWNxICpxY3EpO1xuIHZvaWQgcGRzY19kZWJ1Z2ZzX2RlbF9xY3Eoc3RydWN0IHBkc2NfcWNxICpxY3EpO1xuK3ZvaWQgcGRzY19kZWJ1Z2ZzX2FkZF9ob3N0X21lbShzdHJ1Y3QgcGRzYyAqcGRzYyk7XG4rdm9pZCBwZHNjX2RlYnVnZnNfZGVsX2hvc3RfbWVtKHN0cnVjdCBwZHNjICpwZHNjKTtcbiBcbiBpbnQgcGRzY19lcnJfdG9fZXJybm8oZW51bSBwZHNfY29yZV9zdGF0dXNfY29kZSBjb2RlKTtcbiBib29sIHBkc2NfaXNfZndfcnVubmluZyhzdHJ1Y3QgcGRzYyAqcGRzYyk7XG4gYm9vbCBwZHNjX2lzX2Z3X2dvb2Qoc3RydWN0IHBkc2MgKnBkc2MpO1xuIGludCBwZHNjX2RldmNtZChzdHJ1Y3QgcGRzYyAqcGRzYywgdW5pb24gcGRzX2NvcmVfZGV2X2NtZCAqY21kLFxuIFx0XHR1bmlvbiBwZHNfY29yZV9kZXZfY29tcCAqY29tcCwgaW50IG1heF9zZWNvbmRzKTtcbitpbnQgcGRzY19kZXZjbWRfd2l0aF9kYXRhKHN0cnVjdCBwZHNjICpwZHNjLCB1bmlvbiBwZHNfY29yZV9kZXZfY21kICpjbWQsXG4rXHRcdFx0ICBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgZGF0YV9sZW4sXG4rXHRcdFx0ICB1bmlvbiBwZHNfY29yZV9kZXZfY29tcCAqY29tcCwgaW50IG1heF9zZWNvbmRzKTtcbitpbnQgcGRzY19kZXZjbWRfd2l0aF9kYXRhX25vbXNnKHN0cnVjdCBwZHNjICpwZHNjLCB1bmlvbiBwZHNfY29yZV9kZXZfY21kICpjbWQsXG4rXHRcdFx0XHRjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgZGF0YV9sZW4sXG4rXHRcdFx0XHR1bmlvbiBwZHNfY29yZV9kZXZfY29tcCAqY29tcCwgaW50IG1heF9zZWNvbmRzKTtcbiBpbnQgcGRzY19kZXZjbWRfbG9ja2VkKHN0cnVjdCBwZHNjICpwZHNjLCB1bmlvbiBwZHNfY29yZV9kZXZfY21kICpjbWQsXG4gXHRcdCAgICAgICB1bmlvbiBwZHNfY29yZV9kZXZfY29tcCAqY29tcCwgaW50IG1heF9zZWNvbmRzKTtcbitpbnQgcGRzY19kZXZjbWRfbG9ja2VkX25vbXNnKHN0cnVjdCBwZHNjICpwZHNjLCB1bmlvbiBwZHNfY29yZV9kZXZfY21kICpjbWQsXG4rXHRcdFx0ICAgICB1bmlvbiBwZHNfY29yZV9kZXZfY29tcCAqY29tcCwgaW50IG1heF9zZWNvbmRzKTtcbiBpbnQgcGRzY19kZXZjbWRfaW5pdChzdHJ1Y3QgcGRzYyAqcGRzYyk7XG4gaW50IHBkc2NfZGV2Y21kX3Jlc2V0KHN0cnVjdCBwZHNjICpwZHNjKTtcbiBpbnQgcGRzY19kZXZfaW5pdChzdHJ1Y3QgcGRzYyAqcGRzYyk7XG5AQCAtMzE1LDExICszNTUsMjMgQEAgdm9pZCBwZHNjX3Byb2Nlc3NfYWRtaW5xKHN0cnVjdCBwZHNjX3FjcSAqcWNxKTtcbiB2b2lkIHBkc2Nfd29ya190aHJlYWQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcbiBpcnFyZXR1cm5fdCBwZHNjX2FkbWlucV9pc3IoaW50IGlycSwgdm9pZCAqZGF0YSk7XG4gXG4taW50IHBkc2NfZmlybXdhcmVfdXBkYXRlKHN0cnVjdCBwZHNjICpwZHNjLCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3LFxuK2ludCBwZHNjX2Zpcm13YXJlX3VwZGF0ZShzdHJ1Y3QgcGRzYyAqcGRzYyxcbitcdFx0XHQgc3RydWN0IGRldmxpbmtfZmxhc2hfdXBkYXRlX3BhcmFtcyAqcGFyYW1zLFxuIFx0XHRcdCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xuK2ludCBwZHNjX2dldF9jb21wb25lbnRfaW5mbyhzdHJ1Y3QgcGRzYyAqcGRzYyk7XG4rY29uc3QgY2hhciAqcGRzY19md190eXBlX3RvX25hbWUodTggdHlwZSk7XG4rdm9pZCBwZHNjX2Z3X2NvbXBvbmVudHNfaW52YWxpZGF0ZShzdHJ1Y3QgcGRzYyAqcGRzYyk7XG4gXG4gdm9pZCBwZHNjX2Z3X2Rvd24oc3RydWN0IHBkc2MgKnBkc2MpO1xuIHZvaWQgcGRzY19md191cChzdHJ1Y3QgcGRzYyAqcGRzYyk7XG4gdm9pZCBwZHNjX3BjaV9yZXNldF90aHJlYWQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcbiBcbit2b2lkIHBkc2NfaG9zdF9tZW1fYWRkKHN0cnVjdCBwZHNjICpwZHNjKTtcbit2b2lkIHBkc2NfaG9zdF9tZW1fZnJlZShzdHJ1Y3QgcGRzYyAqcGRzYyk7XG4rXG4rdm9pZCBwZHNjX2RlZmVycmVkX2RtYV9hZGQoc3RydWN0IHBkc2MgKnBkc2MsIHN0cnVjdCBwZHNjX2RlZmVycmVkX2RtYSAqZW50cnksXG4rXHRcdFx0ICAgZG1hX2FkZHJfdCBkbWFfYWRkciwgdm9pZCAqdmEsIHNpemVfdCBzaXplLFxuK1x0XHRcdCAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcik7XG4rdm9pZCBwZHNjX2RlZmVycmVkX2RtYV9mcmVlKHN0cnVjdCBwZHNjICpwZHNjKTtcbitcbiAjZW5kaWYgLyogX1BEU0NfSF8gKi9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvZGVidWdmcy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL2RlYnVnZnMuY1xuaW5kZXggODEwYTBjZDliY2FjOC4uZWYwYTFiN2QxNTliNSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9kZWJ1Z2ZzLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9kZWJ1Z2ZzLmNcbkBAIC0xNzgsMyArMTc4LDQ4IEBAIHZvaWQgcGRzY19kZWJ1Z2ZzX2RlbF9xY3Eoc3RydWN0IHBkc2NfcWNxICpxY3EpXG4gXHRkZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmUocWNxLVx1MDAzZWRlbnRyeSk7XG4gXHRxY3EtXHUwMDNlZGVudHJ5ID0gTlVMTDtcbiB9XG4rXG4rc3RhdGljIGludCBob3N0X21lbV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxuK3tcbitcdHN0cnVjdCBwZHNjICpwZHNjID0gc2VxLVx1MDAzZXByaXZhdGU7XG4rXHRzdHJ1Y3QgcGRzY19ob3N0X21lbSAqaG07XG4rXHRpbnQgaTtcbitcbitcdGlmICghcGRzYy1cdTAwM2Vob3N0X21lbV9yZXFzIHx8IHBkc2MtXHUwMDNlbnVtX2hvc3RfbWVtX3JlcXMgPT0gMCkge1xuK1x0XHRzZXFfcHV0cyhzZXEsIFwiTm8gaG9zdCBtZW1vcnkgYWxsb2NhdGVkXFxuXCIpO1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbitcbitcdHNlcV9wcmludGYoc2VxLCBcIkhvc3QgbWVtb3J5IHJlcXVlc3RzOiAldVxcblxcblwiLFxuK1x0XHQgICBwZHNjLVx1MDAzZW51bV9ob3N0X21lbV9yZXFzKTtcbitcdHNlcV9wdXRzKHNlcSwgXCJUYWcgICAgU2l6ZSAgICAgICAgIE9yZGVyICBQQVxcblwiKTtcbitcdHNlcV9wdXRzKHNlcSwgXCItLS0gICAgLS0tLSAgICAgICAgIC0tLS0tICAtLVxcblwiKTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHBkc2MtXHUwMDNlbnVtX2hvc3RfbWVtX3JlcXM7IGkrKykge1xuK1x0XHRobSA9IFx1MDAyNnBkc2MtXHUwMDNlaG9zdF9tZW1fcmVxc1tpXTtcbitcbitcdFx0aWYgKCFobS1cdTAwM2VwZylcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0c2VxX3ByaW50ZihzZXEsIFwiJS02dSAlLTEydSAlLTZ1ICVwYWRcXG5cIixcbitcdFx0XHQgICBobS1cdTAwM2V0YWcsIGhtLVx1MDAzZXNpemUsIGhtLVx1MDAzZW9yZGVyLCBcdTAwMjZobS1cdTAwM2VwYSk7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rREVGSU5FX1NIT1dfQVRUUklCVVRFKGhvc3RfbWVtKTtcbitcbit2b2lkIHBkc2NfZGVidWdmc19hZGRfaG9zdF9tZW0oc3RydWN0IHBkc2MgKnBkc2MpXG4re1xuK1x0aWYgKCEocGRzYy1cdTAwM2VkZXZfaWRlbnQuY2FwYWJpbGl0aWVzIFx1MDAyNlxuK1x0ICAgICBjcHVfdG9fbGU2NChQRFNfQ09SRV9ERVZfQ0FQX0hPU1RfTUVNKSkpXG4rXHRcdHJldHVybjtcbitcbitcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXCJob3N0X21lbVwiLCAwNDAwLCBwZHNjLVx1MDAzZWRlbnRyeSxcbitcdFx0XHQgICAgcGRzYywgXHUwMDI2aG9zdF9tZW1fZm9wcyk7XG4rfVxuK1xuK3ZvaWQgcGRzY19kZWJ1Z2ZzX2RlbF9ob3N0X21lbShzdHJ1Y3QgcGRzYyAqcGRzYylcbit7XG4rXHRkZWJ1Z2ZzX2xvb2t1cF9hbmRfcmVtb3ZlKFwiaG9zdF9tZW1cIiwgcGRzYy1cdTAwM2VkZW50cnkpO1xuK31cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvZGV2LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvZGV2LmNcbmluZGV4IGJkZWQ2YjMzMjg5Y2UuLmM1MDc3ODE3NWUyZjMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvZGV2LmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9kZXYuY1xuQEAgLTEyNiw3ICsxMjYsOCBAQCBzdGF0aWMgY29uc3QgY2hhciAqcGRzY19kZXZjbWRfc3RyKGludCBvcGNvZGUpXG4gXHR9XG4gfVxuIFxuLXN0YXRpYyBpbnQgcGRzY19kZXZjbWRfd2FpdChzdHJ1Y3QgcGRzYyAqcGRzYywgdTggb3Bjb2RlLCBpbnQgbWF4X3NlY29uZHMpXG4rc3RhdGljIGludCBfX3Bkc2NfZGV2Y21kX3dhaXQoc3RydWN0IHBkc2MgKnBkc2MsIHU4IG9wY29kZSwgaW50IG1heF9zZWNvbmRzLFxuK1x0XHRcdCAgICAgIGNvbnN0IGJvb2wgZG9fbXNnKVxuIHtcbiBcdHN0cnVjdCBkZXZpY2UgKmRldiA9IHBkc2MtXHUwMDNlZGV2O1xuIFx0dW5zaWduZWQgbG9uZyBzdGFydF90aW1lO1xuQEAgLTE3OSw3ICsxODAsNyBAQCBzdGF0aWMgaW50IHBkc2NfZGV2Y21kX3dhaXQoc3RydWN0IHBkc2MgKnBkc2MsIHU4IG9wY29kZSwgaW50IG1heF9zZWNvbmRzKVxuIFxuIFx0c3RhdHVzID0gcGRzY19kZXZjbWRfc3RhdHVzKHBkc2MpO1xuIFx0ZXJyID0gcGRzY19lcnJfdG9fZXJybm8oc3RhdHVzKTtcbi1cdGlmIChlcnIgXHUwMDI2XHUwMDI2IGVyciAhPSAtRUFHQUlOKVxuK1x0aWYgKGRvX21zZyBcdTAwMjZcdTAwMjYgZXJyIFx1MDAyNlx1MDAyNiBlcnIgIT0gLUVBR0FJTilcbiBcdFx0ZGV2X2VycihkZXYsIFwiREVWQ01EICVkICVzIGZhaWxlZCwgc3RhdHVzPSVkIGVyciAlZCAlcGVcXG5cIixcbiBcdFx0XHRvcGNvZGUsIHBkc2NfZGV2Y21kX3N0cihvcGNvZGUpLCBzdGF0dXMsIGVycixcbiBcdFx0XHRFUlJfUFRSKGVycikpO1xuQEAgLTE4Nyw4ICsxODgsOSBAQCBzdGF0aWMgaW50IHBkc2NfZGV2Y21kX3dhaXQoc3RydWN0IHBkc2MgKnBkc2MsIHU4IG9wY29kZSwgaW50IG1heF9zZWNvbmRzKVxuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4taW50IHBkc2NfZGV2Y21kX2xvY2tlZChzdHJ1Y3QgcGRzYyAqcGRzYywgdW5pb24gcGRzX2NvcmVfZGV2X2NtZCAqY21kLFxuLVx0XHQgICAgICAgdW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgKmNvbXAsIGludCBtYXhfc2Vjb25kcylcbitzdGF0aWMgaW50IF9fcGRzY19kZXZjbWRfbG9ja2VkKHN0cnVjdCBwZHNjICpwZHNjLCB1bmlvbiBwZHNfY29yZV9kZXZfY21kICpjbWQsXG4rXHRcdFx0XHR1bmlvbiBwZHNfY29yZV9kZXZfY29tcCAqY29tcCwgaW50IG1heF9zZWNvbmRzLFxuK1x0XHRcdFx0Y29uc3QgYm9vbCBkb19tc2cpXG4ge1xuIFx0aW50IGVycjtcbiBcbkBAIC0xOTcsMTYgKzE5OSw2MyBAQCBpbnQgcGRzY19kZXZjbWRfbG9ja2VkKHN0cnVjdCBwZHNjICpwZHNjLCB1bmlvbiBwZHNfY29yZV9kZXZfY21kICpjbWQsXG4gXG4gXHRtZW1jcHlfdG9pbyhcdTAwMjZwZHNjLVx1MDAzZWNtZF9yZWdzLVx1MDAzZWNtZCwgY21kLCBzaXplb2YoKmNtZCkpO1xuIFx0cGRzY19kZXZjbWRfZGJlbGwocGRzYyk7XG4tXHRlcnIgPSBwZHNjX2RldmNtZF93YWl0KHBkc2MsIGNtZC1cdTAwM2VvcGNvZGUsIG1heF9zZWNvbmRzKTtcbitcdGVyciA9IF9fcGRzY19kZXZjbWRfd2FpdChwZHNjLCBjbWQtXHUwMDNlb3Bjb2RlLCBtYXhfc2Vjb25kcywgZG9fbXNnKTtcbiBcbiBcdGlmICgoZXJyID09IC1FTlhJTyB8fCBlcnIgPT0gLUVUSU1FRE9VVCkgXHUwMDI2XHUwMDI2IHBkc2MtXHUwMDNld3EpXG4gXHRcdHF1ZXVlX3dvcmsocGRzYy1cdTAwM2V3cSwgXHUwMDI2cGRzYy1cdTAwM2VoZWFsdGhfd29yayk7XG4gXHRlbHNlXG4gXHRcdG1lbWNweV9mcm9taW8oY29tcCwgXHUwMDI2cGRzYy1cdTAwM2VjbWRfcmVncy1cdTAwM2Vjb21wLCBzaXplb2YoKmNvbXApKTtcbiBcbitcdGlmIChlcnIgIT0gLUVUSU1FRE9VVCBcdTAwMjZcdTAwMjYgZXJyICE9IC1FQUdBSU4pXG4rXHRcdHBkc2NfZGVmZXJyZWRfZG1hX2ZyZWUocGRzYyk7XG4rXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbit2b2lkIHBkc2NfZGVmZXJyZWRfZG1hX2FkZChzdHJ1Y3QgcGRzYyAqcGRzYywgc3RydWN0IHBkc2NfZGVmZXJyZWRfZG1hICplbnRyeSxcbitcdFx0XHQgICBkbWFfYWRkcl90IGRtYV9hZGRyLCB2b2lkICp2YSwgc2l6ZV90IHNpemUsXG4rXHRcdFx0ICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKVxuK3tcbitcdGVudHJ5LVx1MDAzZWRtYV9hZGRyID0gZG1hX2FkZHI7XG4rXHRlbnRyeS1cdTAwM2V2YSA9IHZhO1xuK1x0ZW50cnktXHUwMDNlc2l6ZSA9IHNpemU7XG4rXHRlbnRyeS1cdTAwM2VkaXIgPSBkaXI7XG4rXG4rXHRzcGluX2xvY2soXHUwMDI2cGRzYy1cdTAwM2VkZWZlcnJlZF9kbWFfbG9jayk7XG4rXHRsaXN0X2FkZF90YWlsKFx1MDAyNmVudHJ5LVx1MDAzZWxpc3QsIFx1MDAyNnBkc2MtXHUwMDNlZGVmZXJyZWRfZG1hX2xpc3QpO1xuK1x0c3Bpbl91bmxvY2soXHUwMDI2cGRzYy1cdTAwM2VkZWZlcnJlZF9kbWFfbG9jayk7XG4rfVxuK1xuK3ZvaWQgcGRzY19kZWZlcnJlZF9kbWFfZnJlZShzdHJ1Y3QgcGRzYyAqcGRzYylcbit7XG4rXHRzdHJ1Y3QgcGRzY19kZWZlcnJlZF9kbWEgKmVudHJ5LCAqdG1wO1xuK1x0TElTVF9IRUFEKGxvY2FsX2xpc3QpO1xuK1xuK1x0c3Bpbl9sb2NrKFx1MDAyNnBkc2MtXHUwMDNlZGVmZXJyZWRfZG1hX2xvY2spO1xuK1x0bGlzdF9zcGxpY2VfaW5pdChcdTAwMjZwZHNjLVx1MDAzZWRlZmVycmVkX2RtYV9saXN0LCBcdTAwMjZsb2NhbF9saXN0KTtcbitcdHNwaW5fdW5sb2NrKFx1MDAyNnBkc2MtXHUwMDNlZGVmZXJyZWRfZG1hX2xvY2spO1xuK1xuK1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGVudHJ5LCB0bXAsIFx1MDAyNmxvY2FsX2xpc3QsIGxpc3QpIHtcbitcdFx0ZG1hX3VubWFwX3NpbmdsZShwZHNjLVx1MDAzZWRldiwgZW50cnktXHUwMDNlZG1hX2FkZHIsXG4rXHRcdFx0XHQgZW50cnktXHUwMDNlc2l6ZSwgZW50cnktXHUwMDNlZGlyKTtcbitcdFx0a2ZyZWUoZW50cnktXHUwMDNldmEpO1xuK1x0XHRsaXN0X2RlbChcdTAwMjZlbnRyeS1cdTAwM2VsaXN0KTtcbitcdFx0a2ZyZWUoZW50cnkpO1xuK1x0fVxuK31cbitcbitpbnQgcGRzY19kZXZjbWRfbG9ja2VkKHN0cnVjdCBwZHNjICpwZHNjLCB1bmlvbiBwZHNfY29yZV9kZXZfY21kICpjbWQsXG4rXHRcdCAgICAgICB1bmlvbiBwZHNfY29yZV9kZXZfY29tcCAqY29tcCwgaW50IG1heF9zZWNvbmRzKVxuK3tcbitcdHJldHVybiBfX3Bkc2NfZGV2Y21kX2xvY2tlZChwZHNjLCBjbWQsIGNvbXAsIG1heF9zZWNvbmRzLCB0cnVlKTtcbit9XG4rXG4raW50IHBkc2NfZGV2Y21kX2xvY2tlZF9ub21zZyhzdHJ1Y3QgcGRzYyAqcGRzYywgdW5pb24gcGRzX2NvcmVfZGV2X2NtZCAqY21kLFxuK1x0XHRcdCAgICAgdW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgKmNvbXAsIGludCBtYXhfc2Vjb25kcylcbit7XG4rXHRyZXR1cm4gX19wZHNjX2RldmNtZF9sb2NrZWQocGRzYywgY21kLCBjb21wLCBtYXhfc2Vjb25kcywgZmFsc2UpO1xuK31cbitcbiBpbnQgcGRzY19kZXZjbWQoc3RydWN0IHBkc2MgKnBkc2MsIHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgKmNtZCxcbiBcdFx0dW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgKmNvbXAsIGludCBtYXhfc2Vjb25kcylcbiB7XG5AQCAtMjE5LDYgKzI2OCw0NyBAQCBpbnQgcGRzY19kZXZjbWQoc3RydWN0IHBkc2MgKnBkc2MsIHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgKmNtZCxcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuK3N0YXRpYyBpbnQgX19wZHNjX2RldmNtZF93aXRoX2RhdGEoc3RydWN0IHBkc2MgKnBkc2MsXG4rXHRcdFx0XHQgICB1bmlvbiBwZHNfY29yZV9kZXZfY21kICpjbWQsXG4rXHRcdFx0XHQgICBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgZGF0YV9sZW4sXG4rXHRcdFx0XHQgICB1bmlvbiBwZHNfY29yZV9kZXZfY29tcCAqY29tcCxcbitcdFx0XHRcdCAgIGludCBtYXhfc2Vjb25kcywgYm9vbCBkb19tc2cpXG4re1xuK1x0aW50IGVycjtcbitcbitcdG11dGV4X2xvY2soXHUwMDI2cGRzYy1cdTAwM2VkZXZjbWRfbG9jayk7XG4rXHRpZiAoIXBkc2MtXHUwMDNlY21kX3JlZ3MpIHtcbitcdFx0ZXJyID0gLUVOWElPO1xuK1x0XHRnb3RvIHVubG9jaztcbitcdH1cbitcdGlmIChkYXRhX2xlbiBcdTAwM2Ugc2l6ZW9mKHBkc2MtXHUwMDNlY21kX3JlZ3MtXHUwMDNlZGF0YSkpIHtcbitcdFx0ZXJyID0gLUVOT1NQQztcbitcdFx0Z290byB1bmxvY2s7XG4rXHR9XG4rXHRtZW1jcHlfdG9pbyhcdTAwMjZwZHNjLVx1MDAzZWNtZF9yZWdzLVx1MDAzZWRhdGEsIGRhdGEsIGRhdGFfbGVuKTtcbitcdGVyciA9IF9fcGRzY19kZXZjbWRfbG9ja2VkKHBkc2MsIGNtZCwgY29tcCwgbWF4X3NlY29uZHMsIGRvX21zZyk7XG4rdW5sb2NrOlxuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnBkc2MtXHUwMDNlZGV2Y21kX2xvY2spO1xuK1xuK1x0cmV0dXJuIGVycjtcbit9XG4rXG4raW50IHBkc2NfZGV2Y21kX3dpdGhfZGF0YShzdHJ1Y3QgcGRzYyAqcGRzYywgdW5pb24gcGRzX2NvcmVfZGV2X2NtZCAqY21kLFxuK1x0XHRcdCAgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGRhdGFfbGVuLFxuK1x0XHRcdCAgdW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgKmNvbXAsIGludCBtYXhfc2Vjb25kcylcbit7XG4rXHRyZXR1cm4gX19wZHNjX2RldmNtZF93aXRoX2RhdGEocGRzYywgY21kLCBkYXRhLCBkYXRhX2xlbixcbitcdFx0XHRcdCAgICAgICBjb21wLCBtYXhfc2Vjb25kcywgdHJ1ZSk7XG4rfVxuK1xuK2ludCBwZHNjX2RldmNtZF93aXRoX2RhdGFfbm9tc2coc3RydWN0IHBkc2MgKnBkc2MsIHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgKmNtZCxcbitcdFx0XHRcdGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBkYXRhX2xlbixcbitcdFx0XHRcdHVuaW9uIHBkc19jb3JlX2Rldl9jb21wICpjb21wLCBpbnQgbWF4X3NlY29uZHMpXG4re1xuK1x0cmV0dXJuIF9fcGRzY19kZXZjbWRfd2l0aF9kYXRhKHBkc2MsIGNtZCwgZGF0YSwgZGF0YV9sZW4sXG4rXHRcdFx0XHQgICAgICAgY29tcCwgbWF4X3NlY29uZHMsIGZhbHNlKTtcbit9XG4rXG4gaW50IHBkc2NfZGV2Y21kX2luaXQoc3RydWN0IHBkc2MgKnBkc2MpXG4ge1xuIFx0dW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgY29tcCA9IHt9O1xuQEAgLTI0MiwxNSArMzMyLDE3IEBAIGludCBwZHNjX2RldmNtZF9yZXNldChzdHJ1Y3QgcGRzYyAqcGRzYylcbiBcdHJldHVybiBwZHNjX2RldmNtZChwZHNjLCBcdTAwMjZjbWQsIFx1MDAyNmNvbXAsIHBkc2MtXHUwMDNlZGV2Y21kX3RpbWVvdXQpO1xuIH1cbiBcbi1zdGF0aWMgaW50IHBkc2NfZGV2Y21kX2lkZW50aWZ5X2xvY2tlZChzdHJ1Y3QgcGRzYyAqcGRzYylcbitzdGF0aWMgaW50IHBkc2NfZGV2Y21kX2lkZW50aWZ5X2xvY2tlZChzdHJ1Y3QgcGRzYyAqcGRzYywgdTggZHJ2X2lkZW50X3ZlcixcbitcdFx0XHRcdCAgICAgICBib29sIGRvX21zZylcbiB7XG4gXHR1bmlvbiBwZHNfY29yZV9kZXZfY29tcCBjb21wID0ge307XG4gXHR1bmlvbiBwZHNfY29yZV9kZXZfY21kIGNtZCA9IHtcbiBcdFx0LmlkZW50aWZ5Lm9wY29kZSA9IFBEU19DT1JFX0NNRF9JREVOVElGWSxcbi1cdFx0LmlkZW50aWZ5LnZlciA9IFBEU19DT1JFX0lERU5USVRZX1ZFUlNJT05fMSxcbitcdFx0LmlkZW50aWZ5LnZlciA9IGRydl9pZGVudF92ZXIsXG4gXHR9O1xuIFxuLVx0cmV0dXJuIHBkc2NfZGV2Y21kX2xvY2tlZChwZHNjLCBcdTAwMjZjbWQsIFx1MDAyNmNvbXAsIHBkc2MtXHUwMDNlZGV2Y21kX3RpbWVvdXQpO1xuK1x0cmV0dXJuIF9fcGRzY19kZXZjbWRfbG9ja2VkKHBkc2MsIFx1MDAyNmNtZCwgXHUwMDI2Y29tcCwgcGRzYy1cdTAwM2VkZXZjbWRfdGltZW91dCxcbitcdFx0XHRcdCAgICBkb19tc2cpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBwZHNjX2luaXRfZGV2aW5mbyhzdHJ1Y3QgcGRzYyAqcGRzYylcbkBAIC0yNzMsOCArMzY1LDkgQEAgc3RhdGljIHZvaWQgcGRzY19pbml0X2RldmluZm8oc3RydWN0IHBkc2MgKnBkc2MpXG4gXHRkZXZfZGJnKHBkc2MtXHUwMDNlZGV2LCBcImZ3X3ZlcnNpb24gJXNcXG5cIiwgcGRzYy1cdTAwM2VkZXZfaW5mby5md192ZXJzaW9uKTtcbiB9XG4gXG4tc3RhdGljIGludCBwZHNjX2lkZW50aWZ5KHN0cnVjdCBwZHNjICpwZHNjKVxuK3N0YXRpYyBpbnQgcGRzY19pZGVudGlmeV92ZXIoc3RydWN0IHBkc2MgKnBkc2MsIHU4IGRydl9pZGVudF92ZXIpXG4ge1xuK1x0Ym9vbCBkb19tc2cgPSBkcnZfaWRlbnRfdmVyID09IFBEU19DT1JFX0lERU5USVRZX1ZFUlNJT05fMTtcbiBcdHN0cnVjdCBwZHNfY29yZV9kcnZfaWRlbnRpdHkgZHJ2ID0ge307XG4gXHRzaXplX3Qgc3o7XG4gXHRpbnQgZXJyO1xuQEAgLTI5NywxOSArMzkwLDIyIEBAIHN0YXRpYyBpbnQgcGRzY19pZGVudGlmeShzdHJ1Y3QgcGRzYyAqcGRzYylcbiBcdHN6ID0gbWluX3Qoc2l6ZV90LCBzaXplb2YoZHJ2KSwgc2l6ZW9mKHBkc2MtXHUwMDNlY21kX3JlZ3MtXHUwMDNlZGF0YSkpO1xuIFx0bWVtY3B5X3RvaW8oXHUwMDI2cGRzYy1cdTAwM2VjbWRfcmVncy1cdTAwM2VkYXRhLCBcdTAwMjZkcnYsIHN6KTtcbiBcbi1cdGVyciA9IHBkc2NfZGV2Y21kX2lkZW50aWZ5X2xvY2tlZChwZHNjKTtcbitcdGVyciA9IHBkc2NfZGV2Y21kX2lkZW50aWZ5X2xvY2tlZChwZHNjLCBkcnZfaWRlbnRfdmVyLCBkb19tc2cpO1xuIFx0aWYgKCFlcnIpIHtcbiBcdFx0c3ogPSBtaW5fdChzaXplX3QsIHNpemVvZihwZHNjLVx1MDAzZWRldl9pZGVudCksXG4gXHRcdFx0ICAgc2l6ZW9mKHBkc2MtXHUwMDNlY21kX3JlZ3MtXHUwMDNlZGF0YSkpO1xuIFx0XHRtZW1jcHlfZnJvbWlvKFx1MDAyNnBkc2MtXHUwMDNlZGV2X2lkZW50LCBcdTAwMjZwZHNjLVx1MDAzZWNtZF9yZWdzLVx1MDAzZWRhdGEsIHN6KTtcbitcbitcdFx0LyogVjEgZmlybXdhcmUgZG9lc24ndCBzZXQgY2FwYWJpbGl0aWVzLCBzbyB0aGUgZmllbGQgbWF5XG4rXHRcdCAqIGNvbnRhaW4gZ2FyYmFnZSBmcm9tIHRoZSBvdXRnb2luZyBkcml2ZXIgaWRlbnRpdHkuXG4rXHRcdCAqL1xuK1x0XHRpZiAocGRzYy1cdTAwM2VkZXZfaWRlbnQudmVyc2lvbiBcdTAwM2MgUERTX0NPUkVfSURFTlRJVFlfVkVSU0lPTl8yKVxuK1x0XHRcdHBkc2MtXHUwMDNlZGV2X2lkZW50LmNhcGFiaWxpdGllcyA9IDA7XG4gXHR9XG4gXHRtdXRleF91bmxvY2soXHUwMDI2cGRzYy1cdTAwM2VkZXZjbWRfbG9jayk7XG4gXG4tXHRpZiAoZXJyKSB7XG4tXHRcdGRldl9lcnIocGRzYy1cdTAwM2VkZXYsIFwiQ2Fubm90IGlkZW50aWZ5IGRldmljZTogJXBlXFxuXCIsXG4tXHRcdFx0RVJSX1BUUihlcnIpKTtcbitcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG4tXHR9XG4gXG4gXHRpZiAoaXNwcmludChwZHNjLVx1MDAzZWRldl9pbmZvLmZ3X3ZlcnNpb25bMF0pIFx1MDAyNlx1MDAyNlxuIFx0ICAgIGlzYXNjaWkocGRzYy1cdTAwM2VkZXZfaW5mby5md192ZXJzaW9uWzBdKSlcbkBAIC0zMjYsNiArNDIyLDI2IEBAIHN0YXRpYyBpbnQgcGRzY19pZGVudGlmeShzdHJ1Y3QgcGRzYyAqcGRzYylcbiBcdHJldHVybiAwO1xuIH1cbiBcbitzdGF0aWMgaW50IHBkc2NfaWRlbnRpZnkoc3RydWN0IHBkc2MgKnBkc2MpXG4re1xuK1x0aW50IGVycjtcbitcbitcdC8qIE9sZGVyIGZpcm13YXJlIHJlamVjdHMgYW55dGhpbmcgYnV0IFBEU19DT1JFX0lERU5USVRZX1ZFUlNJT05fMVxuK1x0ICogd2l0aCBQRFNfUkNfRVZFUlNJT04gKC1FSU5WQUwpLCBzbyByZXRyeSB3aXRoIFYxIG9uIHZlcnNpb25cbitcdCAqIHJlamVjdGlvbi4gRG9uJ3QgcmV0cnkgb24gb3RoZXIgZXJyb3JzIGxpa2UgLUVOWElPLy1FVElNRURPVVRcbitcdCAqIHdoaWNoIGluZGljYXRlIGZpcm13YXJlIGlzIG5vdCBydW5uaW5nIG9yIGh1bmcuXG4rXHQgKi9cbitcdGVyciA9IHBkc2NfaWRlbnRpZnlfdmVyKHBkc2MsIFBEU19DT1JFX0lERU5USVRZX1ZFUlNJT05fMik7XG4rXHRpZiAoZXJyID09IC1FSU5WQUwpXG4rXHRcdGVyciA9IHBkc2NfaWRlbnRpZnlfdmVyKHBkc2MsIFBEU19DT1JFX0lERU5USVRZX1ZFUlNJT05fMSk7XG4rXG4rXHRpZiAoZXJyKVxuK1x0XHRkZXZfZXJyKHBkc2MtXHUwMDNlZGV2LCBcIkNhbm5vdCBpZGVudGlmeSBkZXZpY2U6ICVwZVxcblwiLFxuK1x0XHRcdEVSUl9QVFIoZXJyKSk7XG4rXG4rXHRyZXR1cm4gZXJyO1xuK31cbitcbiB2b2lkIHBkc2NfZGV2X3VuaW5pdChzdHJ1Y3QgcGRzYyAqcGRzYylcbiB7XG4gXHRpZiAocGRzYy1cdTAwM2VpbnRyX2luZm8pIHtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvZGV2bGluay5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL2RldmxpbmsuY1xuaW5kZXggOGFkYWU3YjE4ODk4ZC4uNjNmZTQ1ZTkxZjcxMCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9kZXZsaW5rLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9kZXZsaW5rLmNcbkBAIC05MCwxMyArOTAsMTEyIEBAIGludCBwZHNjX2RsX2ZsYXNoX3VwZGF0ZShzdHJ1Y3QgZGV2bGluayAqZGwsXG4ge1xuIFx0c3RydWN0IHBkc2MgKnBkc2MgPSBkZXZsaW5rX3ByaXYoZGwpO1xuIFxuLVx0aWYgKHBhcmFtcy1cdTAwM2Vjb21wb25lbnQpIHtcbi1cdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcbi1cdFx0XHRcdCAgIFwiQ29tcG9uZW50IHVwZGF0ZSBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgZGV2aWNlXCIpO1xuLVx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHRyZXR1cm4gcGRzY19maXJtd2FyZV91cGRhdGUocGRzYywgcGFyYW1zLCBleHRhY2spO1xuK31cbitcbitzdGF0aWMgaW50IHBkc2NfZGxfcmVwb3J0X2NvbXBvbmVudChzdHJ1Y3QgZGV2bGlua19pbmZvX3JlcSAqcmVxLFxuK1x0XHRcdFx0ICAgIHN0cnVjdCBwZHNfY29yZV9md19jb21wb25lbnRfaW5mbyAqaW5mbylcbit7XG4rXHRlbnVtIGRldmxpbmtfaW5mb192ZXJzaW9uX3R5cGUgdmVyX3R5cGU7XG4rXHR1MTYgZmxhZ3MgPSBsZTE2X3RvX2NwdShpbmZvLVx1MDAzZWZsYWdzKTtcbitcdGNoYXIgKnZlciA9IGluZm8tXHUwMDNldmVyc2lvbjtcbitcdGNvbnN0IGNoYXIgKm5hbWU7XG4rXHRjaGFyIGJ1ZlszMl07XG4rXG4rXHQvKiBNYWluIGZpcm13YXJlIGlzIHJlcG9ydGVkIGFzIGdlbmVyaWMgXCJmd1wiICovXG4rXHRpZiAoaW5mby1cdTAwM2Vjb21wb25lbnRfdHlwZSA9PSBQRFNfQ09SRV9GV19UWVBFX01BSU4pIHtcbitcdFx0aWYgKGluZm8tXHUwMDNlc2xvdF9pZCA9PSBQRFNfQ09SRV9GV19TTE9UX0dPTEQpXG4rXHRcdFx0c25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgXCJmdy5nb2xkXCIpO1xuK1x0XHRlbHNlXG4rXHRcdFx0c25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgXCJmd1wiKTtcbitcdH0gZWxzZSB7XG4rXHRcdG5hbWUgPSBwZHNjX2Z3X3R5cGVfdG9fbmFtZShpbmZvLVx1MDAzZWNvbXBvbmVudF90eXBlKTtcbitcdFx0aWYgKCFuYW1lKVxuK1x0XHRcdHJldHVybiAwO1xuK1xuK1x0XHRpZiAoaW5mby1cdTAwM2VzbG90X2lkID09IFBEU19DT1JFX0ZXX1NMT1RfR09MRClcbitcdFx0XHRzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBcImZ3LiVzLmdvbGRcIiwgbmFtZSk7XG4rXHRcdGVsc2VcbitcdFx0XHRzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBcImZ3LiVzXCIsIG5hbWUpO1xuK1x0fVxuK1xuK1x0dmVyX3R5cGUgPSBERVZMSU5LX0lORk9fVkVSU0lPTl9UWVBFX05PTkU7XG4rXHRpZiAoZmxhZ3MgXHUwMDI2IFBEU19DT1JFX0ZXX0NPTVBPTkVOVF9JTkZPX0ZfVVBEQVRFX0JZX05BTUUpXG4rXHRcdHZlcl90eXBlID0gREVWTElOS19JTkZPX1ZFUlNJT05fVFlQRV9DT01QT05FTlQ7XG4rXG4rXHRpZiAoZmxhZ3MgXHUwMDI2IFBEU19DT1JFX0ZXX0NPTVBPTkVOVF9JTkZPX0ZfRklYRUQpIHtcbitcdFx0aW50IGVycjtcbitcbitcdFx0ZXJyID0gZGV2bGlua19pbmZvX3ZlcnNpb25fZml4ZWRfcHV0KHJlcSwgYnVmLCB2ZXIpO1xuK1x0XHRpZiAoZXJyKVxuK1x0XHRcdHJldHVybiBlcnI7XG4rXHR9XG4rXG4rXHRpZiAoZmxhZ3MgXHUwMDI2IFBEU19DT1JFX0ZXX0NPTVBPTkVOVF9JTkZPX0ZfUlVOTklORykge1xuK1x0XHRpbnQgZXJyO1xuK1xuK1x0XHRlcnIgPSBkZXZsaW5rX2luZm9fdmVyc2lvbl9ydW5uaW5nX3B1dF9leHQocmVxLCBidWYsXG4rXHRcdFx0XHRcdFx0XHQgICB2ZXIsIHZlcl90eXBlKTtcbitcdFx0aWYgKGVycilcbitcdFx0XHRyZXR1cm4gZXJyO1xuIFx0fVxuIFxuLVx0cmV0dXJuIHBkc2NfZmlybXdhcmVfdXBkYXRlKHBkc2MsIHBhcmFtcy1cdTAwM2VmdywgZXh0YWNrKTtcbitcdGlmIChmbGFncyBcdTAwMjYgUERTX0NPUkVfRldfQ09NUE9ORU5UX0lORk9fRl9TVEFSVFVQKSB7XG4rXHRcdGludCBlcnI7XG4rXG4rXHRcdGVyciA9IGRldmxpbmtfaW5mb192ZXJzaW9uX3N0b3JlZF9wdXRfZXh0KHJlcSwgYnVmLFxuK1x0XHRcdFx0XHRcdFx0ICB2ZXIsIHZlcl90eXBlKTtcbitcdFx0aWYgKGVycilcbitcdFx0XHRyZXR1cm4gZXJyO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcGRzY19kbF9yZXBvcnRfZndfdmVyKHN0cnVjdCBkZXZsaW5rX2luZm9fcmVxICpyZXEsIGNoYXIgKmZ3X3Zlcilcbit7XG4rXHRyZXR1cm4gZGV2bGlua19pbmZvX3ZlcnNpb25fcnVubmluZ19wdXQocmVxLFxuK1x0XHRcdFx0XHRcdERFVkxJTktfSU5GT19WRVJTSU9OX0dFTkVSSUNfRlcsXG4rXHRcdFx0XHRcdFx0ZndfdmVyKTtcbit9XG4rXG4rc3RhdGljIGludCBwZHNjX2RsX2NvbXBvbmVudF9pbmZvX2dldChzdHJ1Y3QgZGV2bGluayAqZGwsXG4rXHRcdFx0XHQgICAgICBzdHJ1Y3QgZGV2bGlua19pbmZvX3JlcSAqcmVxLFxuK1x0XHRcdFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuK3tcbitcdHN0cnVjdCBwZHNjICpwZHNjID0gZGV2bGlua19wcml2KGRsKTtcbitcdHU4IG51bV9jb21wb25lbnRzO1xuK1x0aW50IGVycjtcbitcdGludCBpO1xuK1xuK1x0LyogUGFpcnMgd2l0aCBXUklURV9PTkNFIGluIHBkc2NfZndfY29tcG9uZW50c19pbnZhbGlkYXRlKCkuXG4rXHQgKiBVc2UgUkVBRF9PTkNFIHRvIGdldCBhIGNvbnNpc3RlbnQgc25hcHNob3Qgb2YgbnVtX2NvbXBvbmVudHMuXG4rXHQgKiBwZHNjX2Z3X2NvbXBvbmVudHNfaW52YWxpZGF0ZSgpIGNhbiB6ZXJvIGl0IGNvbmN1cnJlbnRseSBkdXJpbmdcbitcdCAqIGZpcm13YXJlIHJlY292ZXJ5OyB1c2luZyB0aGUgbG9jYWwgY29weSBhdm9pZHMgaXRlcmF0aW5nIHplcm9cbitcdCAqIHRpbWVzIHdoZW4gd2UgYWxyZWFkeSBkZWNpZGVkIHRoZSBjYWNoZSB3YXMgdmFsaWQuXG4rXHQgKi9cbitcdG51bV9jb21wb25lbnRzID0gUkVBRF9PTkNFKHBkc2MtXHUwMDNlZndfY29tcG9uZW50cy5udW1fY29tcG9uZW50cyk7XG4rXHRpZiAoIW51bV9jb21wb25lbnRzKSB7XG4rXHRcdGVyciA9IHBkc2NfZ2V0X2NvbXBvbmVudF9pbmZvKHBkc2MpO1xuK1x0XHRpZiAoZXJyKVxuK1x0XHRcdHJldHVybiBwZHNjX2RsX3JlcG9ydF9md192ZXIocmVxLFxuK1x0XHRcdFx0XHRcdCAgICBwZHNjLVx1MDAzZWRldl9pbmZvLmZ3X3ZlcnNpb24pO1xuK1x0XHRudW1fY29tcG9uZW50cyA9IFJFQURfT05DRShwZHNjLVx1MDAzZWZ3X2NvbXBvbmVudHMubnVtX2NvbXBvbmVudHMpO1xuK1x0XHRpZiAoIW51bV9jb21wb25lbnRzKVxuK1x0XHRcdHJldHVybiBwZHNjX2RsX3JlcG9ydF9md192ZXIocmVxLFxuK1x0XHRcdFx0XHRcdCAgICBwZHNjLVx1MDAzZWRldl9pbmZvLmZ3X3ZlcnNpb24pO1xuK1x0fVxuK1xuK1x0bnVtX2NvbXBvbmVudHMgPSBtaW5fdCh1MTYsIG51bV9jb21wb25lbnRzLFxuK1x0XHRcdCAgICAgICBsZTE2X3RvX2NwdShwZHNjLVx1MDAzZWRldl9pZGVudC5tYXhfZndfc2xvdHMpKTtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG51bV9jb21wb25lbnRzOyBpKyspIHtcbitcdFx0ZXJyID0gcGRzY19kbF9yZXBvcnRfY29tcG9uZW50KHJlcSxcbitcdFx0XHRcdFx0ICAgICAgIFx1MDAyNnBkc2MtXHUwMDNlZndfY29tcG9uZW50cy5pbmZvW2ldKTtcbitcdFx0aWYgKGVycilcbitcdFx0XHRyZXR1cm4gZXJyO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4gfVxuIFxuIHN0YXRpYyBjaGFyICpmd19zbG90bmFtZXNbXSA9IHtcbkBAIC0xMDUsOCArMjA0LDkgQEAgc3RhdGljIGNoYXIgKmZ3X3Nsb3RuYW1lc1tdID0ge1xuIFx0XCJmdy5tYWluZndiXCIsXG4gfTtcbiBcbi1pbnQgcGRzY19kbF9pbmZvX2dldChzdHJ1Y3QgZGV2bGluayAqZGwsIHN0cnVjdCBkZXZsaW5rX2luZm9fcmVxICpyZXEsXG4tXHRcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuK3N0YXRpYyBpbnQgcGRzY19kbF9md19saXN0X2luZm9fZ2V0KHN0cnVjdCBkZXZsaW5rICpkbCxcbitcdFx0XHRcdCAgICBzdHJ1Y3QgZGV2bGlua19pbmZvX3JlcSAqcmVxLFxuK1x0XHRcdFx0ICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiB7XG4gXHR1bmlvbiBwZHNfY29yZV9kZXZfY21kIGNtZCA9IHtcbiBcdFx0LmZ3X2NvbnRyb2wub3Bjb2RlID0gUERTX0NPUkVfQ01EX0ZXX0NPTlRST0wsXG5AQCAtMTQwLDEyICsyNDAsNDEgQEAgaW50IHBkc2NfZGxfaW5mb19nZXQoc3RydWN0IGRldmxpbmsgKmRsLCBzdHJ1Y3QgZGV2bGlua19pbmZvX3JlcSAqcmVxLFxuIFx0XHRcdHJldHVybiBlcnI7XG4gXHR9XG4gXG4tXHRlcnIgPSBkZXZsaW5rX2luZm9fdmVyc2lvbl9ydW5uaW5nX3B1dChyZXEsXG4tXHRcdFx0XHRcdCAgICAgICBERVZMSU5LX0lORk9fVkVSU0lPTl9HRU5FUklDX0ZXLFxuLVx0XHRcdFx0XHQgICAgICAgcGRzYy1cdTAwM2VkZXZfaW5mby5md192ZXJzaW9uKTtcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHBkc2NfZGxfaW5mb19nZXRfdjEoc3RydWN0IGRldmxpbmsgKmRsLFxuK1x0XHRcdCAgICAgICBzdHJ1Y3QgZGV2bGlua19pbmZvX3JlcSAqcmVxLFxuK1x0XHRcdCAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4re1xuK1x0c3RydWN0IHBkc2MgKnBkc2MgPSBkZXZsaW5rX3ByaXYoZGwpO1xuK1x0aW50IGVycjtcbitcbitcdGVyciA9IHBkc2NfZGxfZndfbGlzdF9pbmZvX2dldChkbCwgcmVxLCBleHRhY2spO1xuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbiBcbitcdC8qIFZlcnNpb24gMTogcmVwb3J0IGZ3IGZyb20gZGV2X2luZm8gKHJ1bm5pbmcgb25seSkgKi9cbitcdHJldHVybiBwZHNjX2RsX3JlcG9ydF9md192ZXIocmVxLCBwZHNjLVx1MDAzZWRldl9pbmZvLmZ3X3ZlcnNpb24pO1xuK31cbitcbitpbnQgcGRzY19kbF9pbmZvX2dldChzdHJ1Y3QgZGV2bGluayAqZGwsIHN0cnVjdCBkZXZsaW5rX2luZm9fcmVxICpyZXEsXG4rXHRcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuK3tcbitcdHN0cnVjdCBwZHNjICpwZHNjID0gZGV2bGlua19wcml2KGRsKTtcbitcdGNoYXIgYnVmWzMyXTtcbitcdGludCBlcnI7XG4rXG4rXHRpZiAocGRzYy1cdTAwM2VkZXZfaWRlbnQudmVyc2lvbiBcdTAwM2U9IFBEU19DT1JFX0lERU5USVRZX1ZFUlNJT05fMikge1xuK1x0XHRlcnIgPSBwZHNjX2RsX2NvbXBvbmVudF9pbmZvX2dldChkbCwgcmVxLCBleHRhY2spO1xuK1x0XHRpZiAoZXJyKVxuK1x0XHRcdHJldHVybiBlcnI7XG4rXHR9IGVsc2Uge1xuK1x0XHRlcnIgPSBwZHNjX2RsX2luZm9fZ2V0X3YxKGRsLCByZXEsIGV4dGFjayk7XG4rXHRcdGlmIChlcnIpXG4rXHRcdFx0cmV0dXJuIGVycjtcbitcdH1cbitcbiBcdHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIFwiMHgleFwiLCBwZHNjLVx1MDAzZWRldl9pbmZvLmFzaWNfdHlwZSk7XG4gXHRlcnIgPSBkZXZsaW5rX2luZm9fdmVyc2lvbl9maXhlZF9wdXQocmVxLFxuIFx0XHRcdFx0XHQgICAgIERFVkxJTktfSU5GT19WRVJTSU9OX0dFTkVSSUNfQVNJQ19JRCxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvZncuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9mdy5jXG5pbmRleCBmYTYyNjcxOWU2OGQxLi41Y2NmMDE3ZjZhZjQ3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL2Z3LmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9mdy5jXG5AQCAtMSw2ICsxLDkgQEBcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuIC8qIENvcHlyaWdodChjKSAyMDIzIEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYyAqL1xuIFxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BsZG1mdy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvdm1hbGxvYy5oXHUwMDNlXG4rXG4gI2luY2x1ZGUgXCJjb3JlLmhcIlxuIFxuIC8qIFRoZSB3b3JzdCBjYXNlIHdhaXQgZm9yIHRoZSBpbnN0YWxsIGFjdGl2aXR5IGlzIGFib3V0IDI1IG1pbnV0ZXMgd2hlblxuQEAgLTE0LDYgKzE3LDU4IEBAXG4gLyogTnVtYmVyIG9mIHBlcmlvZGljIGxvZyB1cGRhdGVzIGR1cmluZyBmdyBmaWxlIGRvd25sb2FkICovXG4gI2RlZmluZSBQRFNDX0ZXX0lOVEVSVkFMX0ZSQUNUSU9OXHQzMlxuIFxuKyNkZWZpbmUgUERTQ19GV19DT01QT05FTlRfUFJFRklYXHRcdFwiZncuXCJcbisjZGVmaW5lIFBEU0NfRldfQ09NUE9ORU5UX0ZVTExfTkFNRV9CVUZMRU4gXFxcbitcdChzaXplb2YoUERTQ19GV19DT01QT05FTlRfUFJFRklYKSArIFBEU19DT1JFX0ZXX0NPTVBPTkVOVF9OQU1FX0JVRkxFTilcbitcbisvKiBEcml2ZXItZGVmaW5lZCBjb21wb25lbnQgdHlwZSB0byBuYW1lIG1hcHBpbmcuXG4rICogUERTX0NPUkVfRldfVFlQRV9NQUlOIGlzIE5VTEwgLSBoYW5kbGVkIHNwZWNpYWxseSBhcyBcImZ3XCIgd2l0aG91dCBwcmVmaXguXG4rICovXG4rc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBwZHNjX2Z3X3R5cGVfbmFtZXNbXSA9IHtcbitcdFtQRFNfQ09SRV9GV19UWVBFX01BSU5dICAgICAgPSBOVUxMLFxuK1x0W1BEU19DT1JFX0ZXX1RZUEVfQk9PVF0gICAgICA9IFwiYm9vdGxvYWRlclwiLFxuK1x0W1BEU19DT1JFX0ZXX1RZUEVfQ1BMRF0gICAgICA9IFwiY3BsZFwiLFxuK1x0W1BEU19DT1JFX0ZXX1RZUEVfU0VDVVJFXSAgICA9IFwic2VjdXJlXCIsXG4rXHRbUERTX0NPUkVfRldfVFlQRV9GUEdBXSAgICAgID0gXCJmcGdhXCIsXG4rXHRbUERTX0NPUkVfRldfVFlQRV9TVUNfTUFJTl0gID0gXCJzdWNcIixcbitcdFtQRFNfQ09SRV9GV19UWVBFX1NVQ19CT09UXSAgPSBcInN1Yy5ib290bG9hZGVyXCIsXG4rXHRbUERTX0NPUkVfRldfVFlQRV9VQk9PVF0gICAgID0gXCJ1Ym9vdFwiLFxuK307XG4rXG4rY29uc3QgY2hhciAqcGRzY19md190eXBlX3RvX25hbWUodTggdHlwZSlcbit7XG4rXHRpZiAodHlwZSBcdTAwM2MgQVJSQVlfU0laRShwZHNjX2Z3X3R5cGVfbmFtZXMpIFx1MDAyNlx1MDAyNiBwZHNjX2Z3X3R5cGVfbmFtZXNbdHlwZV0pXG4rXHRcdHJldHVybiBwZHNjX2Z3X3R5cGVfbmFtZXNbdHlwZV07XG4rXHRyZXR1cm4gTlVMTDtcbit9XG4rXG4rdm9pZCBwZHNjX2Z3X2NvbXBvbmVudHNfaW52YWxpZGF0ZShzdHJ1Y3QgcGRzYyAqcGRzYylcbit7XG4rXHQvKiBQYWlycyB3aXRoIFJFQURfT05DRSBpbiBwZHNjX2RsX2NvbXBvbmVudF9pbmZvX2dldCgpICovXG4rXHRXUklURV9PTkNFKHBkc2MtXHUwMDNlZndfY29tcG9uZW50cy5udW1fY29tcG9uZW50cywgMCk7XG4rfVxuK1xuK3N0YXRpYyB1OCBwZHNjX25hbWVfdG9fZndfdHlwZShjb25zdCBjaGFyICpuYW1lKVxuK3tcbitcdHNpemVfdCBwcmVmaXhfbGVuO1xuK1x0aW50IGk7XG4rXG4rXHQvKiBcImZ3XCIgd2l0aG91dCBzdWZmaXggbWFwcyB0byBtYWluIGZpcm13YXJlICovXG4rXHRpZiAoIXN0cmNtcChuYW1lLCBcImZ3XCIpKVxuK1x0XHRyZXR1cm4gUERTX0NPUkVfRldfVFlQRV9NQUlOO1xuK1xuK1x0cHJlZml4X2xlbiA9IHN0cl9oYXNfcHJlZml4KG5hbWUsIFBEU0NfRldfQ09NUE9ORU5UX1BSRUZJWCk7XG4rXHRpZiAocHJlZml4X2xlbilcbitcdFx0bmFtZSArPSBwcmVmaXhfbGVuO1xuK1xuK1x0Zm9yIChpID0gMTsgaSBcdTAwM2MgQVJSQVlfU0laRShwZHNjX2Z3X3R5cGVfbmFtZXMpOyBpKyspIHtcbitcdFx0aWYgKHBkc2NfZndfdHlwZV9uYW1lc1tpXSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgICFzdHJjbXAobmFtZSwgcGRzY19md190eXBlX25hbWVzW2ldKSlcbitcdFx0XHRyZXR1cm4gaTtcbitcdH1cbitcdHJldHVybiAwO1xuK31cbitcbiBzdGF0aWMgaW50IHBkc2NfZGV2Y21kX2Z3X2Rvd25sb2FkX2xvY2tlZChzdHJ1Y3QgcGRzYyAqcGRzYywgdTY0IGFkZHIsXG4gXHRcdFx0XHRcdCAgdTMyIG9mZnNldCwgdTMyIGxlbmd0aClcbiB7XG5AQCAtMjMsNyArNzgsNyBAQCBzdGF0aWMgaW50IHBkc2NfZGV2Y21kX2Z3X2Rvd25sb2FkX2xvY2tlZChzdHJ1Y3QgcGRzYyAqcGRzYywgdTY0IGFkZHIsXG4gXHRcdC5md19kb3dubG9hZC5hZGRyID0gY3B1X3RvX2xlNjQoYWRkciksXG4gXHRcdC5md19kb3dubG9hZC5sZW5ndGggPSBjcHVfdG9fbGUzMihsZW5ndGgpLFxuIFx0fTtcbi1cdHVuaW9uIHBkc19jb3JlX2Rldl9jb21wIGNvbXA7XG4rXHR1bmlvbiBwZHNfY29yZV9kZXZfY29tcCBjb21wID0ge307XG4gXG4gXHRyZXR1cm4gcGRzY19kZXZjbWRfbG9ja2VkKHBkc2MsIFx1MDAyNmNtZCwgXHUwMDI2Y29tcCwgcGRzYy1cdTAwM2VkZXZjbWRfdGltZW91dCk7XG4gfVxuQEAgLTk1LDkgKzE1MCwxMiBAQCBzdGF0aWMgaW50IHBkc2NfZndfc3RhdHVzX2xvbmdfd2FpdChzdHJ1Y3QgcGRzYyAqcGRzYyxcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuLWludCBwZHNjX2Zpcm13YXJlX3VwZGF0ZShzdHJ1Y3QgcGRzYyAqcGRzYywgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdyxcbi1cdFx0XHQgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuK3N0YXRpYyBpbnRcbitwZHNjX2xlZ2FjeV9maXJtd2FyZV91cGRhdGUoc3RydWN0IHBkc2MgKnBkc2MsXG4rXHRcdFx0ICAgIHN0cnVjdCBkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9wYXJhbXMgKnBhcmFtcyxcbitcdFx0XHQgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIHtcbitcdGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncgPSBwYXJhbXMtXHUwMDNlZnc7XG4gXHR1MzIgYnVmX3N6LCBjb3B5X3N6LCBvZmZzZXQ7XG4gXHRzdHJ1Y3QgZGV2bGluayAqZGw7XG4gXHRpbnQgbmV4dF9pbnRlcnZhbDtcbkBAIC0xMDUsNiArMTYzLDEyIEBAIGludCBwZHNjX2Zpcm13YXJlX3VwZGF0ZShzdHJ1Y3QgcGRzYyAqcGRzYywgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdyxcbiBcdGludCBlcnIgPSAwO1xuIFx0aW50IGZ3X3Nsb3Q7XG4gXG4rXHRpZiAocGFyYW1zLVx1MDAzZWNvbXBvbmVudCkge1xuK1x0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxuK1x0XHRcdFx0ICAgXCJDb21wb25lbnQgdXBkYXRlIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBkZXZpY2VcIik7XG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdH1cbitcbiBcdGRldl9pbmZvKHBkc2MtXHUwMDNlZGV2LCBcIkluc3RhbGxpbmcgZmlybXdhcmVcXG5cIik7XG4gXG4gXHRpZiAoIXBkc2MtXHUwMDNlY21kX3JlZ3MpXG5AQCAtMTk1LDMgKzI1OSw3MjkgQEAgaW50IHBkc2NfZmlybXdhcmVfdXBkYXRlKHN0cnVjdCBwZHNjICpwZHNjLCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3LFxuIFx0XHRcdFx0XHRcdCAgIE5VTEwsIDAsIDApO1xuIFx0cmV0dXJuIGVycjtcbiB9XG4rXG4rc3RydWN0IHBkc2NfY29tcG9uZW50X3ByaXYge1xuK1x0dTE2IGNvbXBvbmVudF9pZDtcbitcdGJvb2wgc2tpcDtcbitcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdF9lbnRyeTtcbit9O1xuK1xuK3N0cnVjdCBwZHNfY29yZV9md3VfcHJpdiB7XG4rXHRzdHJ1Y3QgcGxkbWZ3IGNvbnRleHQ7XG4rXHRzdHJ1Y3QgZGV2bGlua19mbGFzaF91cGRhdGVfcGFyYW1zICpwYXJhbXM7XG4rXHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2s7XG4rXHRzdHJ1Y3QgcGRzYyAqcGRzYztcbitcdHN0cnVjdCBsaXN0X2hlYWQgY29tcG9uZW50cztcbitcdGJvb2wgY29tcG9uZW50X2ZvdW5kO1xuK307XG4rXG4rc3RhdGljIHZvaWQgcGRzY19mcmVlX2Z3dV9wcml2KHN0cnVjdCBwZHNfY29yZV9md3VfcHJpdiAqcHJpdilcbit7XG4rXHRzdHJ1Y3QgcGRzY19jb21wb25lbnRfcHJpdiAqY29tcG9uZW50X3ByaXYsICp0bXA7XG4rXG4rXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY29tcG9uZW50X3ByaXYsIHRtcCwgXHUwMDI2cHJpdi1cdTAwM2Vjb21wb25lbnRzLFxuK1x0XHRcdFx0IGxpc3RfZW50cnkpIHtcbitcdFx0bGlzdF9kZWwoXHUwMDI2Y29tcG9uZW50X3ByaXYtXHUwMDNlbGlzdF9lbnRyeSk7XG4rXHRcdGtmcmVlKGNvbXBvbmVudF9wcml2KTtcbitcdH1cbit9XG4rXG4rc3RhdGljIGludCBwZHNjX2RldmNtZF9tYXRjaF9yZWNvcmRfZGVzYyhzdHJ1Y3QgcGRzYyAqcGRzYywgdTE2IGRlc2NfdHlwZSxcbitcdFx0XHRcdFx0IHUxNiBkZXNjX3NpemUsIGNvbnN0IHU4ICpkZXNjX2RhdGEsXG4rXHRcdFx0XHRcdCB1OCAqbWF0Y2gpXG4re1xuK1x0dW5pb24gcGRzX2NvcmVfZGV2X2NtZCBjbWQgPSB7XG4rXHRcdC5tYXRjaF9yZWNvcmRfZGVzYy5vcGNvZGUgPSBQRFNfQ09SRV9DTURfTUFUQ0hfUkVDT1JEX0RFU0MsXG4rXHRcdC5tYXRjaF9yZWNvcmRfZGVzYy52ZXIgPSAxLFxuK1x0XHQubWF0Y2hfcmVjb3JkX2Rlc2MudHlwZSA9IGNwdV90b19sZTE2KGRlc2NfdHlwZSksXG4rXHRcdC5tYXRjaF9yZWNvcmRfZGVzYy5zaXplID0gY3B1X3RvX2xlMTYoZGVzY19zaXplKSxcbitcdH07XG4rXHR1bmlvbiBwZHNfY29yZV9kZXZfY29tcCBjb21wID0ge307XG4rXHRpbnQgZXJyO1xuK1xuK1x0ZXJyID0gcGRzY19kZXZjbWRfd2l0aF9kYXRhKHBkc2MsIFx1MDAyNmNtZCwgZGVzY19kYXRhLCBkZXNjX3NpemUsXG4rXHRcdFx0XHQgICAgXHUwMDI2Y29tcCwgcGRzYy1cdTAwM2VkZXZjbWRfdGltZW91dCk7XG4rXHQqbWF0Y2ggPSBjb21wLm1hdGNoX3JlY29yZF9kZXNjLm1hdGNoO1xuK1xuK1x0cmV0dXJuIGVycjtcbit9XG4rXG4rc3RhdGljIGJvb2wgcGRzY19tYXRjaF9yZWNvcmRfZGVzY3Moc3RydWN0IHBsZG1mdyAqY29udGV4dCxcbitcdFx0XHRcdCAgICBzdHJ1Y3QgcGxkbWZ3X3JlY29yZCAqcmVjb3JkKVxuK3tcbitcdHN0cnVjdCBwZHNfY29yZV9md3VfcHJpdiAqcHJpdiA9XG4rXHRcdGNvbnRhaW5lcl9vZihjb250ZXh0LCBzdHJ1Y3QgcGRzX2NvcmVfZnd1X3ByaXYsIGNvbnRleHQpO1xuK1x0c3RydWN0IHBkc2MgKnBkc2MgPSBwcml2LVx1MDAzZXBkc2M7XG4rXHRzdHJ1Y3QgcGxkbWZ3X2Rlc2NfdGx2ICpkZXNjO1xuK1xuK1x0aWYgKCFwbGRtZndfb3BfcGNpX21hdGNoX3JlY29yZChjb250ZXh0LCByZWNvcmQpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGRlc2MsIFx1MDAyNnJlY29yZC1cdTAwM2VkZXNjcywgZW50cnkpIHtcbitcdFx0dTggbWF0Y2g7XG4rXHRcdGludCBlcnI7XG4rXG4rXHRcdHN3aXRjaCAoZGVzYy1cdTAwM2V0eXBlKSB7XG4rXHRcdC8qIHNraXAgdHlwZXMgY2hlY2tlZCBpbiBwbGRtZndfb3BfcGNpX21hdGNoX3JlY29yZCAqL1xuK1x0XHRjYXNlIFBMRE1fREVTQ19JRF9QQ0lfVkVORE9SX0lEOlxuK1x0XHRjYXNlIFBMRE1fREVTQ19JRF9QQ0lfREVWSUNFX0lEOlxuK1x0XHRjYXNlIFBMRE1fREVTQ19JRF9QQ0lfU1VCVkVORE9SX0lEOlxuK1x0XHRjYXNlIFBMRE1fREVTQ19JRF9QQ0lfU1VCREVWX0lEOlxuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHR9XG4rXG4rXHRcdGlmICghZGVzYy1cdTAwM2VzaXplKVxuK1x0XHRcdHJldHVybiBmYWxzZTtcbitcbitcdFx0ZXJyID0gcGRzY19kZXZjbWRfbWF0Y2hfcmVjb3JkX2Rlc2MocGRzYywgZGVzYy1cdTAwM2V0eXBlLFxuK1x0XHRcdFx0XHRcdCAgICBkZXNjLVx1MDAzZXNpemUsIGRlc2MtXHUwMDNlZGF0YSxcbitcdFx0XHRcdFx0XHQgICAgXHUwMDI2bWF0Y2gpO1xuK1x0XHRpZiAoZXJyKSB7XG4rXHRcdFx0ZGV2X2VycihwZHNjLVx1MDAzZWRldixcbitcdFx0XHRcdFwibWF0Y2hfcmVjb3JkX2Rlc2MgZmFpbGVkIHR5cGU6IDB4JTA0eCBzaXplOiAldSwgZXJyICVkXFxuXCIsXG4rXHRcdFx0XHRkZXNjLVx1MDAzZXR5cGUsIGRlc2MtXHUwMDNlc2l6ZSwgZXJyKTtcbitcdFx0XHRyZXR1cm4gZmFsc2U7XG4rXHRcdH1cbitcdFx0LyogYWxsIHJlY29yZCBkZXNjcmlwdG9ycyBtdXN0IG1hdGNoICovXG4rXHRcdGlmICghbWF0Y2gpXG4rXHRcdFx0cmV0dXJuIGZhbHNlO1xuK1x0fVxuK1xuK1x0cmV0dXJuIHRydWU7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcGRzY19kZXZjbWRfc2VuZF9wYWNrYWdlX2RhdGEoc3RydWN0IHBkc2MgKnBkc2MsIHU2NCBhZGRyLFxuK1x0XHRcdFx0XHQgdTE2IGxlbmd0aCwgdTE2IG9mZnNldCwgdTE2IHRvdGFsX2xlbilcbit7XG4rXHR1bmlvbiBwZHNfY29yZV9kZXZfY21kIGNtZCA9IHtcbitcdFx0LnNlbmRfcGtnX2RhdGEub3Bjb2RlID0gUERTX0NPUkVfQ01EX1NFTkRfUEtHX0RBVEEsXG4rXHRcdC5zZW5kX3BrZ19kYXRhLnZlciA9IDEsXG4rXHRcdC5zZW5kX3BrZ19kYXRhLmRhdGFfcGEgPSBjcHVfdG9fbGU2NChhZGRyKSxcbitcdFx0LnNlbmRfcGtnX2RhdGEuZGF0YV9sZW4gPSBjcHVfdG9fbGUxNihsZW5ndGgpLFxuK1x0XHQuc2VuZF9wa2dfZGF0YS5vZmZzZXQgPSBjcHVfdG9fbGUxNihvZmZzZXQpLFxuK1x0XHQuc2VuZF9wa2dfZGF0YS50b3RhbF9sZW4gPSBjcHVfdG9fbGUxNih0b3RhbF9sZW4pLFxuK1x0fTtcbitcdHVuaW9uIHBkc19jb3JlX2Rldl9jb21wIGNvbXAgPSB7fTtcbitcbitcdHJldHVybiBwZHNjX2RldmNtZChwZHNjLCBcdTAwMjZjbWQsIFx1MDAyNmNvbXAsIHBkc2MtXHUwMDNlZGV2Y21kX3RpbWVvdXQpO1xuK31cbitcbitzdGF0aWMgaW50IHBkc2Nfc2VuZF9wYWNrYWdlX2RhdGEoc3RydWN0IHBsZG1mdyAqY29udGV4dCwgY29uc3QgdTggKmRhdGEsXG4rXHRcdFx0XHQgIHUxNiBsZW5ndGgpXG4re1xuK1x0c3RydWN0IHBkc19jb3JlX2Z3dV9wcml2ICpwcml2ID1cbitcdFx0Y29udGFpbmVyX29mKGNvbnRleHQsIHN0cnVjdCBwZHNfY29yZV9md3VfcHJpdiwgY29udGV4dCk7XG4rXHRzdHJ1Y3QgcGRzY19kZWZlcnJlZF9kbWEgKmRlZmVycmVkO1xuK1x0c3RydWN0IGRldmljZSAqZGV2ID0gY29udGV4dC1cdTAwM2VkZXY7XG4rXHRzdHJ1Y3QgcGRzYyAqcGRzYyA9IHByaXYtXHUwMDNlcGRzYztcbitcdGRtYV9hZGRyX3QgZG1hX2FkZHI7XG4rXHR1OCAqcGFja2FnZV9kYXRhO1xuK1x0dTMyIG9mZnNldDtcbitcdGludCBlcnI7XG4rXG4rXHRpZiAoIWxlbmd0aClcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRkZWZlcnJlZCA9IGttYWxsb2Nfb2JqKCpkZWZlcnJlZCwgR0ZQX0tFUk5FTCk7XG4rXHRpZiAoIWRlZmVycmVkKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdHBhY2thZ2VfZGF0YSA9IGttZW1kdXAoZGF0YSwgbGVuZ3RoLCBHRlBfS0VSTkVMKTtcbitcdGlmICghcGFja2FnZV9kYXRhKSB7XG4rXHRcdGtmcmVlKGRlZmVycmVkKTtcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXHR9XG4rXG4rXHRkbWFfYWRkciA9IGRtYV9tYXBfc2luZ2xlKGRldiwgcGFja2FnZV9kYXRhLCBsZW5ndGgsIERNQV9UT19ERVZJQ0UpO1xuK1x0aWYgKGRtYV9tYXBwaW5nX2Vycm9yKGRldiwgZG1hX2FkZHIpKSB7XG4rXHRcdGRldl9lcnIoZGV2LCBcIkZhaWxlZCB0byBkbWFfbWFwIHBhY2thZ2VfZGF0YSBsZW5ndGggMHgleFxcblwiLFxuK1x0XHRcdGxlbmd0aCk7XG4rXHRcdGtmcmVlKHBhY2thZ2VfZGF0YSk7XG4rXHRcdGtmcmVlKGRlZmVycmVkKTtcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXHR9XG4rXG4rXHRmb3IgKG9mZnNldCA9IDA7IG9mZnNldCBcdTAwM2MgbGVuZ3RoOyBvZmZzZXQgKz0gUERTX1BBR0VfU0laRSkge1xuK1x0XHR1MzIgY29weV9zejtcbitcbitcdFx0Y29weV9zeiA9IG1pbl90KHVuc2lnbmVkIGludCwgUERTX1BBR0VfU0laRSwgbGVuZ3RoIC0gb2Zmc2V0KTtcbitcdFx0ZXJyID0gcGRzY19kZXZjbWRfc2VuZF9wYWNrYWdlX2RhdGEocGRzYywgZG1hX2FkZHIgKyBvZmZzZXQsXG4rXHRcdFx0XHRcdFx0ICAgIGNvcHlfc3osIG9mZnNldCwgbGVuZ3RoKTtcbitcdFx0aWYgKGVycikge1xuK1x0XHRcdE5MX1NFVF9FUlJfTVNHX01PRChwcml2LVx1MDAzZWV4dGFjayxcbitcdFx0XHRcdFx0ICAgXCJGYWlsZWQgdG8gc2VuZCBwYWNrYWdlIGRhdGFcIik7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbitcdH1cbitcbitcdGlmIChlcnIgPT0gLUVUSU1FRE9VVCB8fCBlcnIgPT0gLUVBR0FJTikge1xuK1x0XHRwZHNjX2RlZmVycmVkX2RtYV9hZGQocGRzYywgZGVmZXJyZWQsIGRtYV9hZGRyLFxuK1x0XHRcdFx0ICAgICAgcGFja2FnZV9kYXRhLCBsZW5ndGgsIERNQV9UT19ERVZJQ0UpO1xuK1x0XHRyZXR1cm4gZXJyO1xuK1x0fVxuK1xuK1x0a2ZyZWUoZGVmZXJyZWQpO1xuK1x0ZG1hX3VubWFwX3NpbmdsZShkZXYsIGRtYV9hZGRyLCBsZW5ndGgsIERNQV9UT19ERVZJQ0UpO1xuK1x0a2ZyZWUocGFja2FnZV9kYXRhKTtcbitcdHJldHVybiBlcnI7XG4rfVxuK1xuK3N0YXRpYyBib29sIHBkc2NfY29tcG9uZW50X3R5cGVfZXhpc3RzKHN0cnVjdCBwZHNjICpwZHNjLCB1OCB0eXBlKVxuK3tcbitcdGludCBpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgcGRzYy1cdTAwM2Vmd19jb21wb25lbnRzLm51bV9jb21wb25lbnRzOyBpKyspIHtcbitcdFx0aWYgKHBkc2MtXHUwMDNlZndfY29tcG9uZW50cy5pbmZvW2ldLmNvbXBvbmVudF90eXBlID09IHR5cGUpXG4rXHRcdFx0cmV0dXJuIHRydWU7XG4rXHR9XG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuK3N0YXRpYyBib29sIHBkc2NfY29tcG9uZW50X2lkX21hdGNoZXNfdHlwZShzdHJ1Y3QgcGRzYyAqcGRzYyxcbitcdFx0XHRcdFx0ICAgdTggY29tcG9uZW50X2lkLCB1OCB0eXBlKVxuK3tcbitcdGludCBpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgcGRzYy1cdTAwM2Vmd19jb21wb25lbnRzLm51bV9jb21wb25lbnRzOyBpKyspIHtcbitcdFx0c3RydWN0IHBkc19jb3JlX2Z3X2NvbXBvbmVudF9pbmZvICppbmZvID1cbitcdFx0XHRcdTAwMjZwZHNjLVx1MDAzZWZ3X2NvbXBvbmVudHMuaW5mb1tpXTtcbitcbitcdFx0aWYgKGluZm8tXHUwMDNlaWRlbnRpZmllciA9PSBjb21wb25lbnRfaWQgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICBpbmZvLVx1MDAzZWNvbXBvbmVudF90eXBlID09IHR5cGUpXG4rXHRcdFx0cmV0dXJuIHRydWU7XG4rXHR9XG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuK3N0YXRpYyB1OCBwZHNjX2dldF9jb21wb25lbnRfdHlwZV9ieV9pZChzdHJ1Y3QgcGRzYyAqcGRzYywgdTE2IGNvbXBvbmVudF9pZClcbit7XG4rXHRpbnQgaTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHBkc2MtXHUwMDNlZndfY29tcG9uZW50cy5udW1fY29tcG9uZW50czsgaSsrKSB7XG4rXHRcdHN0cnVjdCBwZHNfY29yZV9md19jb21wb25lbnRfaW5mbyAqaW5mbyA9XG4rXHRcdFx0XHUwMDI2cGRzYy1cdTAwM2Vmd19jb21wb25lbnRzLmluZm9baV07XG4rXG4rXHRcdGlmIChpbmZvLVx1MDAzZWlkZW50aWZpZXIgPT0gY29tcG9uZW50X2lkKVxuK1x0XHRcdHJldHVybiBpbmZvLVx1MDAzZWNvbXBvbmVudF90eXBlO1xuK1x0fVxuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBib29sIHBkc2Nfc2tpcF9jb21wb25lbnQoc3RydWN0IHBkc19jb3JlX2Z3dV9wcml2ICpwcml2LFxuK1x0XHRcdFx0dTE2IGNvbXBvbmVudF9pZClcbit7XG4rXHRzdHJ1Y3QgcGRzY19jb21wb25lbnRfcHJpdiAqY29tcG9uZW50X3ByaXY7XG4rXG4rXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGNvbXBvbmVudF9wcml2LCBcdTAwMjZwcml2LVx1MDAzZWNvbXBvbmVudHMsIGxpc3RfZW50cnkpIHtcbitcdFx0aWYgKGNvbXBvbmVudF9wcml2LVx1MDAzZWNvbXBvbmVudF9pZCA9PSBjb21wb25lbnRfaWQpXG4rXHRcdFx0cmV0dXJuIGNvbXBvbmVudF9wcml2LVx1MDAzZXNraXA7XG4rXHR9XG4rXG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcGRzY19zZW5kX2NvbXBvbmVudF90YWJsZShzdHJ1Y3QgcGxkbWZ3ICpjb250ZXh0LFxuK1x0XHRcdFx0ICAgICBzdHJ1Y3QgcGxkbWZ3X2NvbXBvbmVudCAqY29tcG9uZW50LFxuK1x0XHRcdFx0ICAgICB1OCB0cmFuc2Zlcl9mbGFnKVxuK3tcbitcdHN0cnVjdCBwZHNfY29yZV9md3VfcHJpdiAqcHJpdiA9XG4rXHRcdGNvbnRhaW5lcl9vZihjb250ZXh0LCBzdHJ1Y3QgcGRzX2NvcmVfZnd1X3ByaXYsIGNvbnRleHQpO1xuK1x0c3RydWN0IHBkc19jb3JlX2NvbXBvbmVudF90YmwgKmNvbXBvbmVudF90Ymw7XG4rXHRzdHJ1Y3QgcGRzY19jb21wb25lbnRfcHJpdiAqY29tcG9uZW50X3ByaXY7XG4rXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBjb250ZXh0LVx1MDAzZWRldjtcbitcdHVuaW9uIHBkc19jb3JlX2Rldl9jb21wIGNvbXAgPSB7fTtcbitcdHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgY21kID0ge307XG4rXHRzdHJ1Y3QgcGRzYyAqcGRzYyA9IHByaXYtXHUwMDNlcGRzYztcbitcdGJvb2wgc2tpcF9jb21wb25lbnQgPSBmYWxzZTtcbitcdHU4IHJlcXVlc3RlZF90eXBlID0gMDtcbitcdHUxNiBidWZfc3osIHRibF9zejtcbitcdGludCBlcnIgPSAwO1xuK1xuK1x0ZGV2X2RiZyhkZXYsXG4rXHRcdFwiY29tcG9uZW50IG5hbWUgJXMgY2xhc3NpZmljYXRpb24gJXUgaWQgJXUgYWN0aXZhdGlvbl9tZXRob2QgJXUgdmVyX2xlbiAlZCB2ZXJfc3RyICUuKnMgaW5kZXggJXUgc2l6ZSAldSB0cmFuc2Zlcl9mbGFnIDB4JTAyeFxcblwiLFxuK1x0XHRwcml2LVx1MDAzZXBhcmFtcy1cdTAwM2Vjb21wb25lbnQsIGNvbXBvbmVudC1cdTAwM2VjbGFzc2lmaWNhdGlvbixcbitcdFx0Y29tcG9uZW50LVx1MDAzZWlkZW50aWZpZXIsIGNvbXBvbmVudC1cdTAwM2VhY3RpdmF0aW9uX21ldGhvZCxcbitcdFx0Y29tcG9uZW50LVx1MDAzZXZlcnNpb25fbGVuLCBjb21wb25lbnQtXHUwMDNldmVyc2lvbl9sZW4sXG4rXHRcdGNvbXBvbmVudC1cdTAwM2V2ZXJzaW9uX3N0cmluZywgY29tcG9uZW50LVx1MDAzZWluZGV4LFxuK1x0XHRjb21wb25lbnQtXHUwMDNlY29tcG9uZW50X3NpemUsIHRyYW5zZmVyX2ZsYWcpO1xuK1xuK1x0Y29tcG9uZW50X3ByaXYgPSBremFsbG9jX29iaigqY29tcG9uZW50X3ByaXYsIEdGUF9LRVJORUwpO1xuK1x0aWYgKCFjb21wb25lbnRfcHJpdilcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRpZiAocHJpdi1cdTAwM2VwYXJhbXMtXHUwMDNlY29tcG9uZW50KSB7XG4rXHRcdHJlcXVlc3RlZF90eXBlID0gcGRzY19uYW1lX3RvX2Z3X3R5cGUocHJpdi1cdTAwM2VwYXJhbXMtXHUwMDNlY29tcG9uZW50KTtcbitcdFx0aWYgKGNvbXBvbmVudC1cdTAwM2VpZGVudGlmaWVyIFx1MDAzZSBVOF9NQVggfHxcbitcdFx0ICAgICFwZHNjX2NvbXBvbmVudF9pZF9tYXRjaGVzX3R5cGUocGRzYyxcbitcdFx0XHRcdFx0XHQgICAgY29tcG9uZW50LVx1MDAzZWlkZW50aWZpZXIsXG4rXHRcdFx0XHRcdFx0ICAgIHJlcXVlc3RlZF90eXBlKSkge1xuK1x0XHRcdHNraXBfY29tcG9uZW50ID0gdHJ1ZTtcbitcdFx0XHRnb3RvIGFkZF9jb21wb25lbnRfcHJpdjtcbitcdFx0fVxuK1x0XHRwcml2LVx1MDAzZWNvbXBvbmVudF9mb3VuZCA9IHRydWU7XG4rXHR9XG4rXG4rXHRidWZfc3ogPSBzaXplb2YocGRzYy1cdTAwM2VjbWRfcmVncy1cdTAwM2VkYXRhKTtcbitcdHRibF9zeiA9IHN0cnVjdF9zaXplKGNvbXBvbmVudF90YmwsIHZlcnNpb25fc3RyLFxuK1x0XHRcdCAgICAgY29tcG9uZW50LVx1MDAzZXZlcnNpb25fbGVuKTtcbitcdGlmICh0Ymxfc3ogXHUwMDNlIGJ1Zl9zeikge1xuK1x0XHRkZXZfZXJyKGRldiwgXCJjb21wb25lbnRfdGJsIHNpemUgJWQgdG9vIGJpZywgbWF4IHNpemU6ICVkXFxuXCIsXG4rXHRcdFx0dGJsX3N6LCBidWZfc3opO1xuK1x0XHRlcnIgPSAtRU5PU1BDO1xuK1x0XHRnb3RvIGZyZWVfY29tcG9uZW50X3ByaXY7XG4rXHR9XG4rXHRjb21wb25lbnRfdGJsID0ga3phbGxvYyh0Ymxfc3osIEdGUF9LRVJORUwpO1xuK1x0aWYgKCFjb21wb25lbnRfdGJsKSB7XG4rXHRcdGVyciA9IC1FTk9NRU07XG4rXHRcdGdvdG8gZnJlZV9jb21wb25lbnRfcHJpdjtcbitcdH1cbitcbitcdGNvbXBvbmVudF90YmwtXHUwMDNlY29tcGFyaXNvbl9zdGFtcCA9XG4rXHRcdGNwdV90b19sZTMyKGNvbXBvbmVudC1cdTAwM2Vjb21wYXJpc29uX3N0YW1wKTtcbitcdGNvbXBvbmVudF90YmwtXHUwMDNlY2xhc3NpZmljYXRpb24gPSBjcHVfdG9fbGUxNihjb21wb25lbnQtXHUwMDNlY2xhc3NpZmljYXRpb24pO1xuK1x0Y29tcG9uZW50X3RibC1cdTAwM2VpZGVudGlmaWVyID0gY3B1X3RvX2xlMTYoY29tcG9uZW50LVx1MDAzZWlkZW50aWZpZXIpO1xuK1x0Y29tcG9uZW50X3RibC1cdTAwM2V0cmFuc2Zlcl9mbGFnID0gdHJhbnNmZXJfZmxhZztcbitcdGNvbXBvbmVudF90YmwtXHUwMDNldmVyc2lvbl9zdHJfdHlwZSA9IGNvbXBvbmVudC1cdTAwM2V2ZXJzaW9uX3R5cGU7XG4rXHRjb21wb25lbnRfdGJsLVx1MDAzZXZlcnNpb25fc3RyX2xlbiA9IGNvbXBvbmVudC1cdTAwM2V2ZXJzaW9uX2xlbjtcbitcdG1lbWNweShjb21wb25lbnRfdGJsLVx1MDAzZXZlcnNpb25fc3RyLCBjb21wb25lbnQtXHUwMDNldmVyc2lvbl9zdHJpbmcsXG4rXHQgICAgICAgY29tcG9uZW50LVx1MDAzZXZlcnNpb25fbGVuKTtcbitcbitcdGNtZC5zZW5kX2NvbXBvbmVudF90Ymwub3Bjb2RlID0gUERTX0NPUkVfQ01EX1NFTkRfQ09NUE9ORU5UX1RCTDtcbitcdGNtZC5zZW5kX2NvbXBvbmVudF90YmwudmVyID0gMTtcbitcdGNtZC5zZW5kX2NvbXBvbmVudF90Ymwuc2xvdF9pZCA9IFBEU19DT1JFX0ZXX1NMT1RfSU5WQUxJRDtcbitcbitcdGVyciA9IHBkc2NfZGV2Y21kX3dpdGhfZGF0YShwZHNjLCBcdTAwMjZjbWQsIGNvbXBvbmVudF90YmwsIHRibF9zeixcbitcdFx0XHRcdCAgICBcdTAwMjZjb21wLCBwZHNjLVx1MDAzZWRldmNtZF90aW1lb3V0KTtcbitcdGtmcmVlKGNvbXBvbmVudF90YmwpO1xuK1x0aWYgKGVycikge1xuK1x0XHRkZXZfZXJyKGRldiwgXCJGYWlsZWQgc2VuZGluZyBjb21wb25lbnQgdGFibGU6ICVwZVxcblwiLFxuK1x0XHRcdEVSUl9QVFIoZXJyKSk7XG4rXHRcdGdvdG8gZnJlZV9jb21wb25lbnRfcHJpdjtcbitcdH1cbitcbitcdHNraXBfY29tcG9uZW50ID0gY29tcC5zZW5kX2NvbXBvbmVudF90YmwucmVzcG9uc2UgPT0gMTtcbitcbithZGRfY29tcG9uZW50X3ByaXY6XG4rXHRjb21wb25lbnRfcHJpdi1cdTAwM2Vza2lwID0gc2tpcF9jb21wb25lbnQ7XG4rXHRjb21wb25lbnRfcHJpdi1cdTAwM2Vjb21wb25lbnRfaWQgPSBjb21wb25lbnQtXHUwMDNlaWRlbnRpZmllcjtcbitcdGxpc3RfYWRkKFx1MDAyNmNvbXBvbmVudF9wcml2LVx1MDAzZWxpc3RfZW50cnksIFx1MDAyNnByaXYtXHUwMDNlY29tcG9uZW50cyk7XG4rXG4rXHRyZXR1cm4gMDtcbitcbitmcmVlX2NvbXBvbmVudF9wcml2OlxuK1x0a2ZyZWUoY29tcG9uZW50X3ByaXYpO1xuK1x0cmV0dXJuIGVycjtcbit9XG4rXG4raW50IHBkc2NfZ2V0X2NvbXBvbmVudF9pbmZvKHN0cnVjdCBwZHNjICpwZHNjKVxuK3tcbitcdHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgY21kID0ge1xuK1x0XHQuZ2V0X2NvbXBvbmVudF9pbmZvLm9wY29kZSA9IFBEU19DT1JFX0NNRF9HRVRfQ09NUE9ORU5UX0lORk8sXG4rXHRcdC5nZXRfY29tcG9uZW50X2luZm8udmVyID0gMSxcbitcdH07XG4rXHRzdHJ1Y3QgcGRzX2NvcmVfY29tcG9uZW50X2xpc3RfaW5mbyAqbGlzdF9pbmZvO1xuK1x0c3RydWN0IHBkc2NfZGVmZXJyZWRfZG1hICpkZWZlcnJlZDtcbitcdHVuaW9uIHBkc19jb3JlX2Rldl9jb21wIGNvbXAgPSB7fTtcbitcdGRtYV9hZGRyX3QgZG1hX2FkZHI7XG4rXHR1OCBudW1fY29tcG9uZW50cztcbitcdGludCBlcnIsIGk7XG4rXG4rXHRkZWZlcnJlZCA9IGttYWxsb2Nfb2JqKCpkZWZlcnJlZCk7XG4rXHRpZiAoIWRlZmVycmVkKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdGxpc3RfaW5mbyA9IGt6YWxsb2MoUERTX1BBR0VfU0laRSwgR0ZQX0tFUk5FTCk7XG4rXHRpZiAoIWxpc3RfaW5mbykge1xuK1x0XHRrZnJlZShkZWZlcnJlZCk7XG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1x0fVxuK1xuK1x0ZG1hX2FkZHIgPSBkbWFfbWFwX3NpbmdsZShwZHNjLVx1MDAzZWRldiwgbGlzdF9pbmZvLCBQRFNfUEFHRV9TSVpFLFxuK1x0XHRcdFx0ICBETUFfRlJPTV9ERVZJQ0UpO1xuK1x0aWYgKGRtYV9tYXBwaW5nX2Vycm9yKHBkc2MtXHUwMDNlZGV2LCBkbWFfYWRkcikpIHtcbitcdFx0ZGV2X2VycihwZHNjLVx1MDAzZWRldixcbitcdFx0XHRcIkZhaWxlZCB0byBkbWFfbWFwIGNvbXBvbmVudF9saXN0X2luZm8gbGVuZ3RoICVkXFxuXCIsXG4rXHRcdFx0UERTX1BBR0VfU0laRSk7XG4rXHRcdGtmcmVlKGxpc3RfaW5mbyk7XG4rXHRcdGtmcmVlKGRlZmVycmVkKTtcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXHR9XG4rXG4rXHRjbWQuZ2V0X2NvbXBvbmVudF9pbmZvLmRhdGFfbGVuID0gY3B1X3RvX2xlMTYoUERTX1BBR0VfU0laRSk7XG4rXHRjbWQuZ2V0X2NvbXBvbmVudF9pbmZvLmRhdGFfcGEgPSBjcHVfdG9fbGU2NChkbWFfYWRkcik7XG4rXG4rXHRlcnIgPSBwZHNjX2RldmNtZChwZHNjLCBcdTAwMjZjbWQsIFx1MDAyNmNvbXAsIHBkc2MtXHUwMDNlZGV2Y21kX3RpbWVvdXQgKiAyKTtcbitcdGlmIChlcnIgPT0gLUVUSU1FRE9VVCB8fCBlcnIgPT0gLUVBR0FJTikge1xuK1x0XHRwZHNjX2RlZmVycmVkX2RtYV9hZGQocGRzYywgZGVmZXJyZWQsIGRtYV9hZGRyLCBsaXN0X2luZm8sXG4rXHRcdFx0XHQgICAgICBQRFNfUEFHRV9TSVpFLCBETUFfRlJPTV9ERVZJQ0UpO1xuK1x0XHRyZXR1cm4gZXJyO1xuK1x0fVxuK1xuK1x0a2ZyZWUoZGVmZXJyZWQpO1xuK1x0ZG1hX3VubWFwX3NpbmdsZShwZHNjLVx1MDAzZWRldiwgZG1hX2FkZHIsIFBEU19QQUdFX1NJWkUsIERNQV9GUk9NX0RFVklDRSk7XG4rXHRpZiAoZXJyKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdGlmIChjb21wLmdldF9jb21wb25lbnRfaW5mby52ZXIgPT0gMCkge1xuK1x0XHQvKiBEb24ndCBzdXBwb3J0IGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgYXMgdmVyc2lvbiAwIGhhc1xuK1x0XHQgKiBhbGlnbm1lbnQgaXNzdWVzLCBzbyBnaXZlIGEgaGludCB0byB1c2VycyB0byB1cGRhdGVcbitcdFx0ICogdGhlaXIgZmlybXdhcmVcbitcdFx0ICovXG4rXHRcdGRldl93YXJuX29uY2UocGRzYy1cdTAwM2VkZXYsXG4rXHRcdFx0ICAgICAgXCJJbmNvbXBhdGlibGUgZ2V0X2NvbXBvbmVudF9pbmZvIHZlcnNpb24gJXUgcmVwb3J0ZWQgYnkgZmlybXdhcmVcXG5cIixcbitcdFx0XHQgICAgICBjb21wLmdldF9jb21wb25lbnRfaW5mby52ZXIpO1xuK1x0XHRlcnIgPSAwO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcbitcdG51bV9jb21wb25lbnRzID0gbGlzdF9pbmZvLVx1MDAzZW51bV9jb21wb25lbnRzO1xuK1x0aWYgKG51bV9jb21wb25lbnRzIFx1MDAzZSBQRFNfQ09SRV9GV19DT01QT05FTlRfTElTVF9MRU4pIHtcbitcdFx0ZXJyID0gLUVOT01FTTtcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4rXG4rXHRwZHNjLVx1MDAzZWZ3X2NvbXBvbmVudHMubnVtX2NvbXBvbmVudHMgPSBudW1fY29tcG9uZW50cztcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG51bV9jb21wb25lbnRzOyBpKyspIHtcbitcdFx0c3RydWN0IHBkc19jb3JlX2Z3X2NvbXBvbmVudF9pbmZvICppbmZvID1cbitcdFx0XHRcdTAwMjZwZHNjLVx1MDAzZWZ3X2NvbXBvbmVudHMuaW5mb1tpXTtcbitcbitcdFx0bWVtY3B5KGluZm8sIFx1MDAyNmxpc3RfaW5mby1cdTAwM2VpbmZvW2ldLCBzaXplb2YoKmluZm8pKTtcbitcdFx0aW5mby1cdTAwM2V2ZXJzaW9uW1BEU19DT1JFX0ZXX0NPTVBPTkVOVF9WRVJfQlVGTEVOIC0gMV0gPSAwO1xuK1x0XHRpbmZvLVx1MDAzZW5hbWVbUERTX0NPUkVfRldfQ09NUE9ORU5UX05BTUVfQlVGTEVOIC0gMV0gPSAwO1xuK1x0fVxuK1xuK291dDpcbitcdGtmcmVlKGxpc3RfaW5mbyk7XG4rXHRyZXR1cm4gZXJyO1xuK31cbitcbitzdGF0aWMgaW50IHBkc2NfZGV2Y21kX3NlbmRfY29tcG9uZW50KHN0cnVjdCBwZHNjICpwZHNjLFxuK1x0XHRcdFx0ICAgICAgc3RydWN0IHBkc19jb3JlX2ZsYXNoX2NvbXBvbmVudCAqaW5mbyxcbitcdFx0XHRcdCAgICAgIHUxNiBpbmZvX3N6LCBkbWFfYWRkcl90IGFkZHIsIHUzMiBsZW5ndGgsXG4rXHRcdFx0XHQgICAgICB1MzIgb2Zmc2V0LCB1MTYgc2xvdF9pZCxcbitcdFx0XHRcdCAgICAgIHVuaW9uIHBkc19jb3JlX2Rldl9jb21wICpjb21wKVxuK3tcbitcdHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgY21kID0ge1xuK1x0XHQuc2VuZF9jb21wb25lbnQub3Bjb2RlID0gUERTX0NPUkVfQ01EX1NFTkRfQ09NUE9ORU5ULFxuK1x0XHQuc2VuZF9jb21wb25lbnQudmVyID0gMSxcbitcdFx0LnNlbmRfY29tcG9uZW50Lm9wZXJhdGlvbiA9IFBEU19DT1JFX1NFTkRfQ09NUE9ORU5UX1NUQVJULFxuK1x0XHQuc2VuZF9jb21wb25lbnQuZGF0YV9wYSA9IGNwdV90b19sZTY0KGFkZHIpLFxuK1x0XHQuc2VuZF9jb21wb25lbnQuZGF0YV9sZW4gPSBjcHVfdG9fbGUzMihsZW5ndGgpLFxuK1x0XHQuc2VuZF9jb21wb25lbnQub2Zmc2V0ID0gY3B1X3RvX2xlMzIob2Zmc2V0KSxcbitcdFx0LnNlbmRfY29tcG9uZW50LnNsb3RfaWQgPSBzbG90X2lkLFxuK1x0fTtcbitcdHVuc2lnbmVkIGxvbmcgdGltZW91dCA9IDMwMCAqIEhaO1xuK1x0dW5zaWduZWQgbG9uZyBzdGFydF90aW1lO1xuK1x0dW5zaWduZWQgbG9uZyBlbmRfdGltZTtcbitcdGludCBlcnI7XG4rXG4rXHRzdGFydF90aW1lID0gamlmZmllcztcbitcdGVuZF90aW1lID0gc3RhcnRfdGltZSArIHRpbWVvdXQ7XG4rXHRkbyB7XG4rXHRcdC8qIHByZXZlbnQgbm9pc3kvYmVuaWduIGRldmNtZCBmYWlsdXJlcyAqL1xuK1x0XHRlcnIgPSBwZHNjX2RldmNtZF93aXRoX2RhdGFfbm9tc2cocGRzYywgXHUwMDI2Y21kLCBpbmZvLCBpbmZvX3N6LFxuK1x0XHRcdFx0XHRcdCAgY29tcCwgNjApO1xuK1x0XHRpZiAoZXJyICE9IC1FQUdBSU4pXG4rXHRcdFx0YnJlYWs7XG4rXG4rXHRcdC8qIGlmIHJlcXVpcmVkLCBzdWJzZXF1ZW50IGNvbW1hbmRzIGNoZWNrIHN0YXR1cyBvZlxuK1x0XHQgKiBQRFNfQ09SRV9DTURfU0VORF9DT01QT05FTlQgY29tbWFuZCwgd2hpY2ggcmV0dXJuc1xuK1x0XHQgKiBFQUdBSU4gd2hpbGUgdGhlIGNvbW1hbmQgaXMgc3RpbGwgcnVubmluZyxcbitcdFx0ICogZWxzZSB3ZSBnZXQgdGhlIGZpbmFsIGNvbW1hbmQgc3RhdHVzLlxuK1x0XHQgKi9cbitcdFx0Y21kLnNlbmRfY29tcG9uZW50Lm9wZXJhdGlvbiA9IFBEU19DT1JFX1NFTkRfQ09NUE9ORU5UX1NUQVRVUztcbitcdFx0bXNsZWVwKDIwKTtcbitcdH0gd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIGVuZF90aW1lKSk7XG4rXG4rXHRpZiAoZXJyID09IC1FQUdBSU4gfHwgZXJyID09IC1FVElNRURPVVQpXG4rXHRcdGRldl9lcnIocGRzYy1cdTAwM2VkZXYsIFwiUERTX0NPUkVfQ01EX1NFTkRfQ09NUE9ORU5UIHRpbWVkIG91dFxcblwiKTtcbitcbitcdHJldHVybiBlcnI7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcGRzY19mbGFzaF9jb21wb25lbnRfY2h1bmsoc3RydWN0IHBkc2MgKnBkc2MsIHN0cnVjdCBkZXZpY2UgKmRldixcbitcdFx0XHRcdCAgICAgIHN0cnVjdCBwZHNfY29yZV9mbGFzaF9jb21wb25lbnQgKmluZm8sXG4rXHRcdFx0XHQgICAgICB1MTYgaW5mb19zeiwgY29uc3QgdTggKmRhdGEsIHUxNiBjb3B5X3N6LFxuK1x0XHRcdFx0ICAgICAgdTMyIG9mZnNldCwgdTggc2xvdF9pZCxcbitcdFx0XHRcdCAgICAgIHVuaW9uIHBkc19jb3JlX2Rldl9jb21wICpjb21wKVxuK3tcbitcdHN0cnVjdCBwZHNjX2RlZmVycmVkX2RtYSAqZGVmZXJyZWQ7XG4rXHRkbWFfYWRkcl90IGRtYV9hZGRyO1xuK1x0dTggKmNvbXBvbmVudF9kYXRhO1xuK1x0aW50IGVycjtcbitcbitcdGRlZmVycmVkID0ga21hbGxvY19vYmooKmRlZmVycmVkLCBHRlBfS0VSTkVMKTtcbitcdGlmICghZGVmZXJyZWQpXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0Y29tcG9uZW50X2RhdGEgPSBrbWVtZHVwKGRhdGEsIGNvcHlfc3osIEdGUF9LRVJORUwpO1xuK1x0aWYgKCFjb21wb25lbnRfZGF0YSkge1xuK1x0XHRrZnJlZShkZWZlcnJlZCk7XG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1x0fVxuK1xuK1x0ZG1hX2FkZHIgPSBkbWFfbWFwX3NpbmdsZShkZXYsIGNvbXBvbmVudF9kYXRhLCBjb3B5X3N6LCBETUFfVE9fREVWSUNFKTtcbitcdGlmIChkbWFfbWFwcGluZ19lcnJvcihkZXYsIGRtYV9hZGRyKSkge1xuK1x0XHRkZXZfZXJyKGRldixcbitcdFx0XHRcIkZhaWxlZCB0byBkbWFfbWFwIGNvbXBvbmVudF9kYXRhIGF0IG9mZnNldCAweCV4IGNvcHlfc3ogMHgleFxcblwiLFxuK1x0XHRcdG9mZnNldCwgY29weV9zeik7XG4rXHRcdGtmcmVlKGNvbXBvbmVudF9kYXRhKTtcbitcdFx0a2ZyZWUoZGVmZXJyZWQpO1xuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcdH1cbitcbitcdGVyciA9IHBkc2NfZGV2Y21kX3NlbmRfY29tcG9uZW50KHBkc2MsIGluZm8sIGluZm9fc3osIGRtYV9hZGRyLFxuK1x0XHRcdFx0XHQgY29weV9zeiwgb2Zmc2V0LCBzbG90X2lkLCBjb21wKTtcbitcdGlmIChlcnIgPT0gLUVUSU1FRE9VVCB8fCBlcnIgPT0gLUVBR0FJTikge1xuK1x0XHRwZHNjX2RlZmVycmVkX2RtYV9hZGQocGRzYywgZGVmZXJyZWQsIGRtYV9hZGRyLFxuK1x0XHRcdFx0ICAgICAgY29tcG9uZW50X2RhdGEsIGNvcHlfc3osIERNQV9UT19ERVZJQ0UpO1xuK1x0XHRyZXR1cm4gZXJyO1xuK1x0fVxuK1xuK1x0a2ZyZWUoZGVmZXJyZWQpO1xuK1x0ZG1hX3VubWFwX3NpbmdsZShkZXYsIGRtYV9hZGRyLCBjb3B5X3N6LCBETUFfVE9fREVWSUNFKTtcbitcdGtmcmVlKGNvbXBvbmVudF9kYXRhKTtcbitcbitcdHJldHVybiBlcnI7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcGRzY19mbGFzaF9jb21wb25lbnQoc3RydWN0IHBsZG1mdyAqY29udGV4dCxcbitcdFx0XHRcdHN0cnVjdCBwbGRtZndfY29tcG9uZW50ICpjb21wb25lbnQpXG4re1xuK1x0Y2hhciBjb21wb25lbnRfbmFtZV9idWZbUERTQ19GV19DT01QT05FTlRfRlVMTF9OQU1FX0JVRkxFTl07XG4rXHRzdHJ1Y3QgcGRzX2NvcmVfZnd1X3ByaXYgKnByaXYgPVxuK1x0XHRjb250YWluZXJfb2YoY29udGV4dCwgc3RydWN0IHBkc19jb3JlX2Z3dV9wcml2LCBjb250ZXh0KTtcbitcdHN0cnVjdCBwZHNfY29yZV9mbGFzaF9jb21wb25lbnQgKmNvbXBvbmVudF9pbmZvO1xuK1x0Y29uc3QgY2hhciAqY29tcG9uZW50X25hbWUgPSBOVUxMO1xuK1x0c3RydWN0IGRldmljZSAqZGV2ID0gY29udGV4dC1cdTAwM2VkZXY7XG4rXHRzdHJ1Y3QgcGRzYyAqcGRzYyA9IHByaXYtXHUwMDNlcGRzYztcbitcdHUxNiBidWZfc3osIGluZm9fc3o7XG4rXHRzdHJ1Y3QgZGV2bGluayAqZGw7XG4rXHR1OCBjb21wb25lbnRfdHlwZTtcbitcdHUzMiB0b3RhbF9sZW47XG4rXHR1MzIgb2Zmc2V0O1xuK1x0aW50IGVycjtcbitcbitcdGNvbXBvbmVudF90eXBlID0gcGRzY19nZXRfY29tcG9uZW50X3R5cGVfYnlfaWQocGRzYyxcbitcdFx0XHRcdFx0XHQgICAgICAgY29tcG9uZW50LVx1MDAzZWlkZW50aWZpZXIpO1xuK1x0aWYgKGNvbXBvbmVudF90eXBlKSB7XG4rXHRcdGNvbnN0IGNoYXIgKnR5cGVfbmFtZSA9IHBkc2NfZndfdHlwZV90b19uYW1lKGNvbXBvbmVudF90eXBlKTtcbitcbitcdFx0aWYgKGNvbXBvbmVudF90eXBlID09IFBEU19DT1JFX0ZXX1RZUEVfTUFJTikge1xuK1x0XHRcdGNvbXBvbmVudF9uYW1lID0gXCJmd1wiO1xuK1x0XHR9IGVsc2UgaWYgKHR5cGVfbmFtZSkge1xuK1x0XHRcdHNucHJpbnRmKGNvbXBvbmVudF9uYW1lX2J1Ziwgc2l6ZW9mKGNvbXBvbmVudF9uYW1lX2J1ZiksXG4rXHRcdFx0XHQgXCIlcyVzXCIsIFBEU0NfRldfQ09NUE9ORU5UX1BSRUZJWCwgdHlwZV9uYW1lKTtcbitcdFx0XHRjb21wb25lbnRfbmFtZSA9IGNvbXBvbmVudF9uYW1lX2J1ZjtcbitcdFx0fVxuK1x0fVxuK1xuK1x0ZGwgPSBwcml2X3RvX2RldmxpbmsocGRzYyk7XG4rXG4rXHRpZiAocGRzY19za2lwX2NvbXBvbmVudChwcml2LCBjb21wb25lbnQtXHUwMDNlaWRlbnRpZmllcikpIHtcbitcdFx0ZGV2bGlua19mbGFzaF91cGRhdGVfc3RhdHVzX25vdGlmeShkbCwgXCJTa2lwcGVkXCIsXG4rXHRcdFx0XHRcdFx0ICAgY29tcG9uZW50X25hbWUsIDAsIDApO1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbitcbitcdHRvdGFsX2xlbiA9IGNvbXBvbmVudC1cdTAwM2Vjb21wb25lbnRfc2l6ZTtcbitcdGRldl9kYmcoZGV2LFxuK1x0XHRcImNvbXBvbmVudCBuYW1lICVzIGNsYXNzICV1IGlkICV1IGFjdF9tZXRoICV1IHZlcl9zdHIgJS4qcyBpbmRleCAldSBzaXplICV1XFxuXCIsXG4rXHRcdGNvbXBvbmVudF9uYW1lID86IFwiKHVua25vd24pXCIsIGNvbXBvbmVudC1cdTAwM2VjbGFzc2lmaWNhdGlvbixcbitcdFx0Y29tcG9uZW50LVx1MDAzZWlkZW50aWZpZXIsIGNvbXBvbmVudC1cdTAwM2VhY3RpdmF0aW9uX21ldGhvZCxcbitcdFx0Y29tcG9uZW50LVx1MDAzZXZlcnNpb25fbGVuLCBjb21wb25lbnQtXHUwMDNldmVyc2lvbl9zdHJpbmcsXG4rXHRcdGNvbXBvbmVudC1cdTAwM2VpbmRleCwgY29tcG9uZW50LVx1MDAzZWNvbXBvbmVudF9zaXplKTtcbitcbitcdGJ1Zl9zeiA9IHNpemVvZihwZHNjLVx1MDAzZWNtZF9yZWdzLVx1MDAzZWRhdGEpO1xuK1x0aW5mb19zeiA9IHN0cnVjdF9zaXplKGNvbXBvbmVudF9pbmZvLCB2ZXJzaW9uX3N0cixcbitcdFx0XHQgICAgICBjb21wb25lbnQtXHUwMDNldmVyc2lvbl9sZW4pO1xuK1x0aWYgKGluZm9fc3ogXHUwMDNlIGJ1Zl9zeikge1xuK1x0XHRkZXZfZXJyKGRldiwgXCJjb21wb25lbnRfaW5mbyBzaXplICVkIHRvbyBiaWcsIG1heCBzaXplOiAlZFxcblwiLFxuK1x0XHRcdGluZm9fc3osIGJ1Zl9zeik7XG4rXHRcdHJldHVybiAtRU5PU1BDO1xuK1x0fVxuK1x0Y29tcG9uZW50X2luZm8gPSB2emFsbG9jKGluZm9fc3opO1xuK1x0aWYgKCFjb21wb25lbnRfaW5mbylcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRjb21wb25lbnRfaW5mby1cdTAwM2Vjb21wYXJpc29uX3N0YW1wID1cbitcdFx0Y3B1X3RvX2xlMzIoY29tcG9uZW50LVx1MDAzZWNvbXBhcmlzb25fc3RhbXApO1xuK1x0Y29tcG9uZW50X2luZm8tXHUwMDNlaW1hZ2Vfc2l6ZSA9IGNwdV90b19sZTMyKHRvdGFsX2xlbik7XG4rXHRjb21wb25lbnRfaW5mby1cdTAwM2VjbGFzc2lmaWNhdGlvbiA9IGNwdV90b19sZTE2KGNvbXBvbmVudC1cdTAwM2VjbGFzc2lmaWNhdGlvbik7XG4rXHRjb21wb25lbnRfaW5mby1cdTAwM2VpZGVudGlmaWVyID0gY3B1X3RvX2xlMTYoY29tcG9uZW50LVx1MDAzZWlkZW50aWZpZXIpO1xuK1x0Y29tcG9uZW50X2luZm8tXHUwMDNlb3B0aW9ucyA9IGNwdV90b19sZTE2KGNvbXBvbmVudC1cdTAwM2VvcHRpb25zKTtcbitcdGNvbXBvbmVudF9pbmZvLVx1MDAzZXZlcnNpb25fc3RyX3R5cGUgPSBjb21wb25lbnQtXHUwMDNldmVyc2lvbl90eXBlO1xuK1x0Y29tcG9uZW50X2luZm8tXHUwMDNldmVyc2lvbl9zdHJfbGVuID0gY29tcG9uZW50LVx1MDAzZXZlcnNpb25fbGVuO1xuK1x0bWVtY3B5KGNvbXBvbmVudF9pbmZvLVx1MDAzZXZlcnNpb25fc3RyLCBjb21wb25lbnQtXHUwMDNldmVyc2lvbl9zdHJpbmcsXG4rXHQgICAgICAgY29tcG9uZW50LVx1MDAzZXZlcnNpb25fbGVuKTtcbitcbitcdG9mZnNldCA9IDA7XG4rXHR3aGlsZSAob2Zmc2V0IFx1MDAzYyB0b3RhbF9sZW4pIHtcbitcdFx0dW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgY29tcCA9IHt9O1xuK1x0XHR1MTYgY29weV9zejtcbitcbitcdFx0Y29weV9zeiA9IG1pbl90KHVuc2lnbmVkIGludCwgUERTX1BBR0VfU0laRSxcbitcdFx0XHRcdHRvdGFsX2xlbiAtIG9mZnNldCk7XG4rXG4rXHRcdGVyciA9IHBkc2NfZmxhc2hfY29tcG9uZW50X2NodW5rKHBkc2MsIGRldiwgY29tcG9uZW50X2luZm8sXG4rXHRcdFx0XHRcdFx0IGluZm9fc3osXG4rXHRcdFx0XHRcdFx0IGNvbXBvbmVudC1cdTAwM2Vjb21wb25lbnRfZGF0YSArXG4rXHRcdFx0XHRcdFx0IG9mZnNldCwgY29weV9zeiwgb2Zmc2V0LFxuK1x0XHRcdFx0XHRcdCBQRFNfQ09SRV9GV19TTE9UX0lOVkFMSUQsXG4rXHRcdFx0XHRcdFx0IFx1MDAyNmNvbXApO1xuK1x0XHRpZiAoZXJyIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgY29tcC5zZW5kX2NvbXBvbmVudC5jb21wYXRfcmVzcG9uc2UgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAoY29tcC5zZW5kX2NvbXBvbmVudC5jb21wYXRfcmVzcG9uc2VfY29kZSA9PVxuK1x0XHQgICAgIFBEU19DT1JFX0NPTVBPTkVOVF9TVEFNUF9JREVOVElDQUwgfHxcbitcdFx0ICAgICBjb21wLnNlbmRfY29tcG9uZW50LmNvbXBhdF9yZXNwb25zZV9jb2RlID09XG4rXHRcdCAgICAgUERTX0NPUkVfQ09NUE9ORU5UX1NUQU1QX0xPV0VSKSkge1xuK1x0XHRcdGVyciA9IDA7XG4rXHRcdFx0ZGV2bGlua19mbGFzaF91cGRhdGVfc3RhdHVzX25vdGlmeShkbCwgXCJTa2lwcGVkXCIsXG4rXHRcdFx0XHRcdFx0XHQgICBjb21wb25lbnRfbmFtZSxcbitcdFx0XHRcdFx0XHRcdCAgIDAsIDApO1xuK1x0XHRcdGdvdG8gc2tpcF9jb21wb25lbnQ7XG4rXHRcdH1cbitcbitcdFx0aWYgKGVycikge1xuK1x0XHRcdE5MX1NFVF9FUlJfTVNHX01PRChwcml2LVx1MDAzZWV4dGFjayxcbitcdFx0XHRcdFx0ICAgXCJGYWlsZWQgdG8gZmxhc2ggY29tcG9uZW50XCIpO1xuK1x0XHRcdGdvdG8gZXJyX291dDtcbitcdFx0fVxuK1xuK1x0XHRvZmZzZXQgKz0gY29weV9zejtcbitcdFx0ZGV2bGlua19mbGFzaF91cGRhdGVfc3RhdHVzX25vdGlmeShkbCxcbitcdFx0XHRcdFx0XHQgICBcIkVyYXNpbmcvRmxhc2hpbmdcIixcbitcdFx0XHRcdFx0XHQgICBjb21wb25lbnRfbmFtZSwgb2Zmc2V0LFxuK1x0XHRcdFx0XHRcdCAgIHRvdGFsX2xlbik7XG4rXHR9XG4rXG4rXHR2ZnJlZShjb21wb25lbnRfaW5mbyk7XG4rXHRyZXR1cm4gMDtcbitcbitlcnJfb3V0OlxuK1x0ZGV2bGlua19mbGFzaF91cGRhdGVfc3RhdHVzX25vdGlmeShkbCxcbitcdFx0XHRcdFx0ICAgXCJFcmFzaW5nL0ZsYXNoaW5nIENvbXBvbmVudCBGYWlsZWRcIixcbitcdFx0XHRcdFx0ICAgY29tcG9uZW50X25hbWUsIDAsIDApO1xuK3NraXBfY29tcG9uZW50OlxuK1x0dmZyZWUoY29tcG9uZW50X2luZm8pO1xuK1x0cmV0dXJuIGVycjtcbit9XG4rXG4rc3RhdGljIGludCBwZHNjX2RldmNtZF9maW5hbGl6ZV91cGRhdGUoc3RydWN0IHBkc2MgKnBkc2MpXG4re1xuK1x0dW5pb24gcGRzX2NvcmVfZGV2X2NtZCBjbWQgPSB7XG4rXHRcdC5maW5hbGl6ZV91cGRhdGUub3Bjb2RlID0gUERTX0NPUkVfQ01EX0ZJTkFMSVpFX1VQREFURSxcbitcdFx0LmZpbmFsaXplX3VwZGF0ZS52ZXIgPSAxLFxuK1x0fTtcbitcdHVuaW9uIHBkc19jb3JlX2Rldl9jb21wIGNvbXAgPSB7fTtcbitcbitcdHJldHVybiBwZHNjX2RldmNtZChwZHNjLCBcdTAwMjZjbWQsIFx1MDAyNmNvbXAsIHBkc2MtXHUwMDNlZGV2Y21kX3RpbWVvdXQpO1xuK31cbitcbitzdGF0aWMgaW50IHBkc2NfZmluYWxpemVfdXBkYXRlKHN0cnVjdCBwbGRtZncgKmNvbnRleHQpXG4re1xuK1x0c3RydWN0IHBkc19jb3JlX2Z3dV9wcml2ICpwcml2ID1cbitcdFx0Y29udGFpbmVyX29mKGNvbnRleHQsIHN0cnVjdCBwZHNfY29yZV9md3VfcHJpdiwgY29udGV4dCk7XG4rXHRjb25zdCBjaGFyICpjb21wb25lbnRfbmFtZSA9IHByaXYtXHUwMDNlcGFyYW1zLVx1MDAzZWNvbXBvbmVudDtcbitcdHVuc2lnbmVkIGxvbmcgc3RhcnRfdGltZSwgZW5kX3RpbWU7XG4rXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBjb250ZXh0LVx1MDAzZWRldjtcbitcdHN0cnVjdCBwZHNjICpwZHNjID0gcHJpdi1cdTAwM2VwZHNjO1xuK1x0c3RydWN0IGRldmxpbmsgKmRsO1xuK1x0aW50IGVycjtcbitcbitcdGRsID0gcHJpdl90b19kZXZsaW5rKHBkc2MpO1xuK1xuK1x0c3RhcnRfdGltZSA9IGppZmZpZXM7XG4rXHRlbmRfdGltZSA9IHN0YXJ0X3RpbWUgKyAoUERTQ19GV19JTlNUQUxMX1RJTUVPVVQgKiBIWik7XG4rXHRkbyB7XG4rXHRcdGVyciA9IHBkc2NfZGV2Y21kX2ZpbmFsaXplX3VwZGF0ZShwZHNjKTtcbitcdFx0aWYgKGVyciAhPSAtRUFHQUlOKVxuK1x0XHRcdGJyZWFrO1xuK1xuK1x0XHRkZXZfZGJnKGRldiwgXCJyZXRyeWluZyBmaW5hbGl6ZV91cGRhdGU6ICVwZVxcblwiLCBFUlJfUFRSKGVycikpO1xuK1x0XHRtc2xlZXAoMjApO1xuK1x0fSB3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgZW5kX3RpbWUpIFx1MDAyNlx1MDAyNiBlcnIgPT0gLUVBR0FJTik7XG4rXG4rXHRpZiAoZXJyKSB7XG4rXHRcdGRldmxpbmtfZmxhc2hfdXBkYXRlX3N0YXR1c19ub3RpZnkoZGwsIFwiRmluYWxpemUgVXBkYXRlIEZhaWxlZFwiLFxuK1x0XHRcdFx0XHRcdCAgIGNvbXBvbmVudF9uYW1lLCAwLCAwKTtcbitcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKHByaXYtXHUwMDNlZXh0YWNrLCBcIkZpbmFsaXplIHVwZGF0ZSBmYWlsZWRcIik7XG4rXHRcdHJldHVybiBlcnI7XG4rXHR9XG4rXG4rXHRkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9zdGF0dXNfbm90aWZ5KGRsLCBcIkZpbmFsaXplZCBVcGRhdGVcIixcbitcdFx0XHRcdFx0ICAgY29tcG9uZW50X25hbWUsIDAsIDApO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGxkbWZ3X29wcyBwZHNjX3BsZG1md19vcHMgPSB7XG4rXHQubWF0Y2hfcmVjb3JkID0gcGRzY19tYXRjaF9yZWNvcmRfZGVzY3MsXG4rXHQuc2VuZF9wYWNrYWdlX2RhdGEgPSBwZHNjX3NlbmRfcGFja2FnZV9kYXRhLFxuK1x0LnNlbmRfY29tcG9uZW50X3RhYmxlID0gcGRzY19zZW5kX2NvbXBvbmVudF90YWJsZSxcbitcdC5mbGFzaF9jb21wb25lbnQgPSBwZHNjX2ZsYXNoX2NvbXBvbmVudCxcbitcdC5maW5hbGl6ZV91cGRhdGUgPSBwZHNjX2ZpbmFsaXplX3VwZGF0ZVxuK307XG4rXG4rc3RhdGljIGludCBwZHNjX3BsZG1fZmlybXdhcmVfdXBkYXRlKHN0cnVjdCBwZHNjICpwZHNjLFxuK1x0XHRcdFx0ICAgICBzdHJ1Y3QgZGV2bGlua19mbGFzaF91cGRhdGVfcGFyYW1zICpwYXJhbXMsXG4rXHRcdFx0XHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayxcbitcdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdylcbit7XG4rXHRzdHJ1Y3QgcGRzX2NvcmVfZnd1X3ByaXYgcHJpdiA9IHt9O1xuK1x0aW50IGVycjtcbitcbitcdGlmICghcGRzYy1cdTAwM2Vmd19jb21wb25lbnRzLm51bV9jb21wb25lbnRzKSB7XG4rXHRcdGVyciA9IHBkc2NfZ2V0X2NvbXBvbmVudF9pbmZvKHBkc2MpO1xuK1x0XHRpZiAoZXJyKSB7XG4rXHRcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcbitcdFx0XHRcdFx0ICAgXCJGYWlsZWQgdG8gZ2V0IGNvbXBvbmVudCBpbmZvXCIpO1xuK1x0XHRcdHJldHVybiBlcnI7XG4rXHRcdH1cbitcdH1cbitcbitcdGlmIChwYXJhbXMtXHUwMDNlY29tcG9uZW50KSB7XG4rXHRcdHU4IHR5cGUgPSBwZHNjX25hbWVfdG9fZndfdHlwZShwYXJhbXMtXHUwMDNlY29tcG9uZW50KTtcbitcbitcdFx0aWYgKCF0eXBlIHx8ICFwZHNjX2NvbXBvbmVudF90eXBlX2V4aXN0cyhwZHNjLCB0eXBlKSkge1xuK1x0XHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFwiVW5rbm93biBjb21wb25lbnQgbmFtZVwiKTtcbitcdFx0XHRyZXR1cm4gLUVOT0VOVDtcbitcdFx0fVxuK1x0fVxuK1xuK1x0SU5JVF9MSVNUX0hFQUQoXHUwMDI2cHJpdi5jb21wb25lbnRzKTtcbitcdHByaXYuY29udGV4dC5vcHMgPSBcdTAwMjZwZHNjX3BsZG1md19vcHM7XG4rXHRwcml2LmNvbnRleHQuZGV2ID0gcGRzYy1cdTAwM2VkZXY7XG4rXHRwcml2LnBhcmFtcyA9IHBhcmFtcztcbitcdHByaXYuZXh0YWNrID0gZXh0YWNrO1xuK1x0cHJpdi5wZHNjID0gcGRzYztcbitcbitcdGVyciA9IHBsZG1md19mbGFzaF9pbWFnZShcdTAwMjZwcml2LmNvbnRleHQsIGZ3KTtcbitcdGlmICghZXJyIFx1MDAyNlx1MDAyNiBwYXJhbXMtXHUwMDNlY29tcG9uZW50IFx1MDAyNlx1MDAyNiAhcHJpdi5jb21wb25lbnRfZm91bmQpIHtcbitcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcbitcdFx0XHRcdCAgIFwiUmVxdWVzdGVkIGNvbXBvbmVudCBub3QgcHJlc2VudCBpbiBmaXJtd2FyZSBwYWNrYWdlXCIpO1xuK1x0XHRlcnIgPSAtRU5PRU5UO1xuK1x0fVxuK1x0cGRzY19mcmVlX2Z3dV9wcml2KFx1MDAyNnByaXYpO1xuK1xuK1x0cmV0dXJuIGVycjtcbit9XG4rXG4raW50IHBkc2NfZmlybXdhcmVfdXBkYXRlKHN0cnVjdCBwZHNjICpwZHNjLFxuK1x0XHRcdCBzdHJ1Y3QgZGV2bGlua19mbGFzaF91cGRhdGVfcGFyYW1zICpwYXJhbXMsXG4rXHRcdFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbit7XG4rXHRpbnQgZXJyO1xuK1xuK1x0aWYgKHBkc2MtXHUwMDNlZGV2X2lkZW50LnZlcnNpb24gXHUwMDNlPSBQRFNfQ09SRV9JREVOVElUWV9WRVJTSU9OXzIgXHUwMDI2XHUwMDI2XG4rXHQgICAgcGRzYy1cdTAwM2VkZXZfaWRlbnQuY2FwYWJpbGl0aWVzIFx1MDAyNlxuK1x0XHRjcHVfdG9fbGU2NChQRFNfQ09SRV9ERVZfQ0FQX1BMRE1fRldfVVBEQVRFKSlcbitcdFx0ZXJyID0gcGRzY19wbGRtX2Zpcm13YXJlX3VwZGF0ZShwZHNjLCBwYXJhbXMsIGV4dGFjayxcbitcdFx0XHRcdFx0XHRwYXJhbXMtXHUwMDNlZncpO1xuK1x0ZWxzZVxuK1x0XHRlcnIgPSBwZHNjX2xlZ2FjeV9maXJtd2FyZV91cGRhdGUocGRzYywgcGFyYW1zLCBleHRhY2spO1xuK1xuK1x0LyogSW52YWxpZGF0ZSBjYWNoZWQgY29tcG9uZW50IGluZm8gc28gbmV4dCBpbmZvX2dldCByZWZyZXNoZXMgKi9cbitcdHBkc2NfZndfY29tcG9uZW50c19pbnZhbGlkYXRlKHBkc2MpO1xuK1xuK1x0cmV0dXJuIGVycjtcbit9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9tYWluLmNcbmluZGV4IDhkOTRhNGQ3MDM5NWUuLjVlMWIwNzg1MDE2M2IgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvbWFpbi5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvbWFpbi5jXG5AQCAtMjEsNiArMjEsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgcGRzY19pZF90YWJsZVtdID0ge1xuIH07XG4gTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHBkc2NfaWRfdGFibGUpO1xuIFxuK3N0YXRpYyB2b2lkIHBkc2Nfc3RvcF9oZWFsdGhfdGhyZWFkKHN0cnVjdCBwZHNjICpwZHNjKTtcbitcbiBzdGF0aWMgdm9pZCBwZHNjX3dkdGltZXJfY2Ioc3RydWN0IHRpbWVyX2xpc3QgKnQpXG4ge1xuIFx0c3RydWN0IHBkc2MgKnBkc2MgPSB0aW1lcl9jb250YWluZXJfb2YocGRzYywgdCwgd2R0aW1lcik7XG5AQCAtMzE1LDYgKzMxNyw3IEBAIHN0YXRpYyBpbnQgcGRzY19pbml0X3BmKHN0cnVjdCBwZHNjICpwZHNjKVxuIFx0XHRkZXN0cm95X3dvcmtxdWV1ZShwZHNjLVx1MDAzZXdxKTtcbiBcdG11dGV4X2Rlc3Ryb3koXHUwMDI2cGRzYy1cdTAwM2Vjb25maWdfbG9jayk7XG4gXHRtdXRleF9kZXN0cm95KFx1MDAyNnBkc2MtXHUwMDNlZGV2Y21kX2xvY2spO1xuK1x0cGRzY19kZWZlcnJlZF9kbWFfZnJlZShwZHNjKTtcbiBcdHBjaV9mcmVlX2lycV92ZWN0b3JzKHBkc2MtXHUwMDNlcGRldik7XG4gZXJyX291dF91bm1hcF9iYXJzOlxuIFx0cGRzY191bm1hcF9iYXJzKHBkc2MpO1xuQEAgLTM1Myw2ICszNTYsOCBAQCBzdGF0aWMgaW50IHBkc2NfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXG4gXHRwZHNjLVx1MDAzZXBkZXYgPSBwZGV2O1xuIFx0cGRzYy1cdTAwM2VkZXYgPSBcdTAwMjZwZGV2LVx1MDAzZWRldjtcbiBcdHNldF9iaXQoUERTQ19TX0lOSVRJTkdfRFJJVkVSLCBcdTAwMjZwZHNjLVx1MDAzZXN0YXRlKTtcbitcdElOSVRfTElTVF9IRUFEKFx1MDAyNnBkc2MtXHUwMDNlZGVmZXJyZWRfZG1hX2xpc3QpO1xuK1x0c3Bpbl9sb2NrX2luaXQoXHUwMDI2cGRzYy1cdTAwM2VkZWZlcnJlZF9kbWFfbG9jayk7XG4gXHRwY2lfc2V0X2RydmRhdGEocGRldiwgcGRzYyk7XG4gXHRwZHNjX2RlYnVnZnNfYWRkX2RldihwZHNjKTtcbiBcbkBAIC00NTgsNiArNDYzLDcgQEAgc3RhdGljIHZvaWQgcGRzY19yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gXHR9XG4gXG4gXHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XG4rXHRwZHNjX2RlZmVycmVkX2RtYV9mcmVlKHBkc2MpO1xuIFxuIFx0aWRhX2ZyZWUoXHUwMDI2cGRzY19pZGEsIHBkc2MtXHUwMDNldWlkKTtcbiBcdHBkc2NfZGVidWdmc19kZWxfZGV2KHBkc2MpO1xuQEAgLTUwNSw2ICs1MTEsNyBAQCBzdGF0aWMgdm9pZCBwZHNjX3Jlc2V0X3ByZXBhcmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gXHRwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpO1xuIFx0aWYgKHBjaV9pc19lbmFibGVkKHBkZXYpKVxuIFx0XHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XG4rXHRwZHNjX2RlZmVycmVkX2RtYV9mcmVlKHBkc2MpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBwZHNjX3Jlc2V0X2RvbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wZHMvcGRzX2NvcmVfaWYuaCBiL2luY2x1ZGUvbGludXgvcGRzL3Bkc19jb3JlX2lmLmhcbmluZGV4IDE3YTg3YzFhNTVkN2MuLjkwMWUxZTYyOGY4OTAgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3Bkcy9wZHNfY29yZV9pZi5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3Bkcy9wZHNfY29yZV9pZi5oXG5AQCAtNDAsNiArNDAsMTQgQEAgZW51bSBwZHNfY29yZV9jbWRfb3Bjb2RlIHtcbiBcdFBEU19DT1JFX0NNRF9GV19ET1dOTE9BRFx0PSA0LFxuIFx0UERTX0NPUkVfQ01EX0ZXX0NPTlRST0xcdFx0PSA1LFxuIFxuK1x0UERTX0NPUkVfQ01EX0dFVF9DT01QT05FTlRfSU5GT1x0PSA2LFxuK1x0UERTX0NPUkVfQ01EX1NFTkRfUEtHX0RBVEFcdD0gNyxcbitcdFBEU19DT1JFX0NNRF9TRU5EX0NPTVBPTkVOVF9UQkxcdD0gOCxcbitcdFBEU19DT1JFX0NNRF9TRU5EX0NPTVBPTkVOVFx0PSA5LFxuK1x0UERTX0NPUkVfQ01EX0ZJTkFMSVpFX1VQREFURVx0PSAxMCxcbitcdFBEU19DT1JFX0NNRF9NQVRDSF9SRUNPUkRfREVTQ1x0PSAxMSxcbitcdFBEU19DT1JFX0NNRF9IT1NUX01FTVx0XHQ9IDEyLFxuK1xuIFx0LyogU1IvSU9WIGNvbW1hbmRzICovXG4gXHRQRFNfQ09SRV9DTURfVkZfR0VUQVRUUlx0XHQ9IDYwLFxuIFx0UERTX0NPUkVfQ01EX1ZGX1NFVEFUVFJcdFx0PSA2MSxcbkBAIC0xMDAsNiArMTA4LDE2IEBAIHN0cnVjdCBwZHNfY29yZV9kcnZfaWRlbnRpdHkge1xuIFx0Y2hhciAgIGRyaXZlcl92ZXJfc3RyWzMyXTtcbiB9O1xuIFxuKy8qKlxuKyAqIGVudW0gcGRzX2NvcmVfZGV2X2NhcGFiaWxpdHkgLSBEZXZpY2UgY2FwYWJpbGl0aWVzXG4rICogQFBEU19DT1JFX0RFVl9DQVBfUExETV9GV19VUERBVEU6IERldmljZSBvbmx5IHN1cHBvcnRzIEZXIHVwZGF0ZSB2aWEgUExETVxuKyAqIEBQRFNfQ09SRV9ERVZfQ0FQX0hPU1RfTUVNOiBEZXZpY2Ugc3VwcG9ydHMgaG9zdCBtZW1vcnkgZm9yIGZ3IHVzZVxuKyAqL1xuK2VudW0gcGRzX2NvcmVfZGV2X2NhcGFiaWxpdHkge1xuK1x0UERTX0NPUkVfREVWX0NBUF9QTERNX0ZXX1VQREFURSA9IEJJVCgwKSxcbitcdFBEU19DT1JFX0RFVl9DQVBfSE9TVF9NRU0gPSBCSVQoMSksXG4rfTtcbitcbiAjZGVmaW5lIFBEU19ERVZfVFlQRV9NQVhcdDE2XG4gLyoqXG4gICogc3RydWN0IHBkc19jb3JlX2Rldl9pZGVudGl0eSAtIERldmljZSBpZGVudGl0eSBpbmZvcm1hdGlvblxuQEAgLTExOSw2ICsxMzcsMTEgQEAgc3RydWN0IHBkc19jb3JlX2Rydl9pZGVudGl0eSB7XG4gICpcdFx0ICAgICAgdmFsdWUgaW4gdXNlY3MgdG8gZGV2aWNlIHVuaXRzIHVzaW5nOlxuICAqXHRcdCAgICAgIGRldmljZSB1bml0cyA9IHVzZWNzICogbXVsdCAvIGRpdlxuICAqIEB2aWZfdHlwZXM6ICAgICAgICBIb3cgbWFueSBvZiBlYWNoIFZJRiBkZXZpY2UgdHlwZSBpcyBzdXBwb3J0ZWRcbisgKiBAbWF4X2Z3X3Nsb3RzOiAgICAgTnVtYmVyIG9mIGZpcm13YXJlIGNvbXBvbmVudHMgcmVwb3J0ZWQgYnkgZGV2aWNlXG4rICpcdFx0ICAgICAgb25seSBzdXBwb3J0ZWQgb24gdmVyc2lvbiBcdTAwM2U9IFBEU19DT1JFX0lERU5USVRZX1ZFUlNJT05fMlxuKyAqIEByc3ZkMjpcdCAgICAgIFdvcmQgYm91bmRhcnkgcGFkZGluZ1xuKyAqIEBjYXBhYmlsaXRpZXM6ICAgICBEZXZpY2UgY2FwYWJpbGl0aWVzXG4rICpcdFx0ICAgICAgb25seSBzdXBwb3J0ZWQgb24gdmVyc2lvbiBcdTAwM2U9IFBEU19DT1JFX0lERU5USVRZX1ZFUlNJT05fMlxuICAqL1xuIHN0cnVjdCBwZHNfY29yZV9kZXZfaWRlbnRpdHkge1xuIFx0dTggICAgIHZlcnNpb247XG5AQCAtMTMxLDkgKzE1NCwxMyBAQCBzdHJ1Y3QgcGRzX2NvcmVfZGV2X2lkZW50aXR5IHtcbiBcdF9fbGUzMiBpbnRyX2NvYWxfbXVsdDtcbiBcdF9fbGUzMiBpbnRyX2NvYWxfZGl2O1xuIFx0X19sZTE2IHZpZl90eXBlc1tQRFNfREVWX1RZUEVfTUFYXTtcbitcdF9fbGUxNiBtYXhfZndfc2xvdHM7XG4rXHR1OCAgICAgcnN2ZDJbNl07XG4rXHRfX2xlNjQgY2FwYWJpbGl0aWVzO1xuIH07XG4gXG4gI2RlZmluZSBQRFNfQ09SRV9JREVOVElUWV9WRVJTSU9OXzFcdDFcbisjZGVmaW5lIFBEU19DT1JFX0lERU5USVRZX1ZFUlNJT05fMlx0MlxuIFxuIC8qKlxuICAqIHN0cnVjdCBwZHNfY29yZV9kZXZfaWRlbnRpZnlfY21kIC0gRHJpdmVyL2RldmljZSBpZGVudGlmeSBjb21tYW5kXG5AQCAtMjc1LDExICszMDIsMjAgQEAgZW51bSBwZHNfY29yZV9md19jb250cm9sX29wZXIge1xuIFx0UERTX0NPUkVfRldfR0VUX0xJU1QgICAgICAgICAgICAgICA9IDcsXG4gfTtcbiBcbisvKipcbisgKiBlbnVtIHBkc19jb3JlX2Z3X3Nsb3QgLSBGaXJtd2FyZSBzbG90IGlkZW50aWZpZXJzXG4rICogQFBEU19DT1JFX0ZXX1NMT1RfSU5WQUxJRDogTGV0IGZpcm13YXJlIHNlbGVjdCBzbG90IGJhc2VkIG9uIHBhY2thZ2UgbWV0YWRhdGFcbisgKiBAUERTX0NPUkVfRldfU0xPVF9BOiAgICAgICBQcmltYXJ5IGZpcm13YXJlIHNsb3QgQVxuKyAqIEBQRFNfQ09SRV9GV19TTE9UX0I6ICAgICAgIFByaW1hcnkgZmlybXdhcmUgc2xvdCBCXG4rICogQFBEU19DT1JFX0ZXX1NMT1RfR09MRDogICAgR29sZC9yZWNvdmVyeSBmaXJtd2FyZSBzbG90XG4rICogQFBEU19DT1JFX0ZXX1NMT1RfTUFYOiAgICAgU2VudGluZWwgdmFsdWUgaW5kaWNhdGluZyBubyBzbG90IHJlc29sdmVkXG4rICovXG4gZW51bSBwZHNfY29yZV9md19zbG90IHtcbiBcdFBEU19DT1JFX0ZXX1NMT1RfSU5WQUxJRCAgICA9IDAsXG4gXHRQRFNfQ09SRV9GV19TTE9UX0FcdCAgICA9IDEsXG4gXHRQRFNfQ09SRV9GV19TTE9UX0IgICAgICAgICAgPSAyLFxuIFx0UERTX0NPUkVfRldfU0xPVF9HT0xEICAgICAgID0gMyxcbitcdFBEU19DT1JFX0ZXX1NMT1RfTUFYICAgICAgICA9IDB4ZmYsXG4gfTtcbiBcbiAvKipcbkBAIC00NDYsNiArNDgyLDQyMyBAQCBzdHJ1Y3QgcGRzX2NvcmVfdmZfY3RybF9jb21wIHtcbiBcdHU4XHRzdGF0dXM7XG4gfTtcbiBcbisvKipcbisgKiBzdHJ1Y3QgcGRzX2NvcmVfc2VuZF9wa2dfZGF0YV9jbWQgLSBTZW5kIHBhY2thZ2UgZGF0YSBjb21tYW5kXG4rICogQG9wY29kZTogT3Bjb2RlIFBEU19DT1JFX0NNRF9TRU5EX1BLR19EQVRBXG4rICogQHZlcjogRHJpdmVyJ3MgbWF4IHN1cHBvcnQgdmVyc2lvbiBvZiB0aGlzIGNvbW1hbmRcbisgKiBAdG90YWxfbGVuOiBUb3RhbCBsZW5ndGggb2YgdGhlIHBhY2thZ2UgZGF0YVxuKyAqIEBvZmZzZXQ6IE9mZnNldCBpbiB0aGUgcGFja2FnZSBkYXRhLCBub24temVybyBpZiBtdWx0aXBsZSBjb21tYW5kcyBhcmVcbisgKlx0ICAgIG5lZWRlZCBmb3Igc2VuZGluZyB0aGUgcGFja2FnZSBkYXRhXG4rICogQGRhdGFfbGVuOiBMZW5ndGggb2YgZGF0YSBzdG9yZWQgYXQgZGF0YV9wYVxuKyAqIEBkYXRhX3BhOiBEYXRhIHBoeXNpY2FsIGFkZHJlc3MgZm9yIERNQSB0byBkZXZpY2VcbisgKlxuKyAqIFRoZSBwYWNrYWdlIGRhdGEgbWF5IGJlIHRvbyBsYXJnZSB0byBzdG9yZSBpbiBhIHNpbmdsZSBidWZmZXIsIHNvIG11bHRpcGxlXG4rICogUERTX0NPUkVfQ01EX1NFTkRfUEtHX0RBVEEgZGV2Y21kcyBtYXkgYmUgbmVlZGVkLlxuKyAqL1xuK3N0cnVjdCBwZHNfY29yZV9zZW5kX3BrZ19kYXRhX2NtZCB7XG4rXHR1OCBvcGNvZGU7XG4rXHR1OCB2ZXI7XG4rXHRfX2xlMTYgdG90YWxfbGVuO1xuK1x0X19sZTE2IG9mZnNldDtcbitcdF9fbGUxNiBkYXRhX2xlbjtcbitcdF9fbGU2NCBkYXRhX3BhO1xuK307XG4rXG4rLyoqXG4rICogc3RydWN0IHBkc19jb3JlX3NlbmRfcGtnX2RhdGFfY29tcCAtIFNlbmQgcGFja2FnZSBkYXRhIGNvbXBsZXRpb25cbisgKiBAc3RhdHVzOiBTdGF0dXMgb2YgdGhlIGNvbW1hbmQgKGVudW0gcGRzX2NvcmVfc3RhdHVzX2NvZGUpXG4rICogQHZlcjogRGV2aWNlJ3MgbWF4IHN1cHBvcnRlZCB2ZXJzaW9uIG9mIHRoaXMgY29tbWFuZFxuKyAqIEByc3ZkOiBXb3JkIGJvdW5kYXJ5IHBhZGRpbmdcbisgKi9cbitzdHJ1Y3QgcGRzX2NvcmVfc2VuZF9wa2dfZGF0YV9jb21wIHtcbitcdHU4IHN0YXR1cztcbitcdHU4IHZlcjtcbitcdHU4IHJzdmRbMl07XG4rfTtcbitcbisvKipcbisgKiBzdHJ1Y3QgcGRzX2NvcmVfY29tcG9uZW50X3RibCAtIENvbXBvbmVudCB0YWJsZSBkZXRhaWxzXG4rICogQGNvbXBhcmlzb25fc3RhbXA6IENvbXBhcmlzb24gc3RhbXAgdXNlZCBmb3IgY29tcG9uZW50IHZlcnNpb24gY2hlY2tzXG4rICogQGNsYXNzaWZpY2F0aW9uOiBWZW5kb3Igc3BlY2lmaWMgY2xhc3NpZmljYXRpb24gaW5mb1xuKyAqIEBpZGVudGlmaWVyOiBDb21wb25lbnQncyBJRFxuKyAqIEB0cmFuc2Zlcl9mbGFnOiBQYXJ0IG9mIHRoZSBjb21wb25lbnQgdGFibGUgdGhpcyByZXF1ZXN0IHJlcHJlc2VudHNcbisgKiBAdmVyc2lvbl9zdHJfdHlwZTogVGhlIHR5cGVzIG9mIHN0cmluZ3MgdXNlZFxuKyAqIEB2ZXJzaW9uX3N0cl9sZW46IExlbmd0aCBvZiBAdmVyc2lvbl9zdHJcbisgKiBAdmVyc2lvbl9zdHI6IENvbXBvbmVudCB2ZXJzaW9uIGluZm9ybWF0aW9uXG4rICovXG4rc3RydWN0IHBkc19jb3JlX2NvbXBvbmVudF90Ymwge1xuK1x0X19sZTMyIGNvbXBhcmlzb25fc3RhbXA7XG4rXHRfX2xlMTYgY2xhc3NpZmljYXRpb247XG4rXHRfX2xlMTYgaWRlbnRpZmllcjtcbitcdHU4ICAgICB0cmFuc2Zlcl9mbGFnO1xuK1x0dTggICAgIHZlcnNpb25fc3RyX3R5cGU7XG4rXHR1OCAgICAgdmVyc2lvbl9zdHJfbGVuO1xuK1x0dTggICAgIHZlcnNpb25fc3RyW107XG4rfTtcbitcbisvKipcbisgKiBzdHJ1Y3QgcGRzX2NvcmVfc2VuZF9jb21wb25lbnRfdGJsX2NtZCAtIFNlbmQgY29tcG9uZW50IHRhYmxlIGNvbW1hbmRcbisgKiBAb3Bjb2RlOiBPcGNvZGUgUERTX0NPUkVfQ01EX1NFTkRfQ09NUE9ORU5UX1RCTFxuKyAqIEB2ZXI6IERyaXZlcidzIG1heCBzdXBwb3J0IHZlcnNpb24gb2YgdGhpcyBjb21tYW5kXG4rICogQHNsb3RfaWQ6IGVudW0gcGRzX2NvcmVfZndfc2xvdFxuKyAqIEByc3ZkOiBXb3JkIGJvdW5kYXJ5IHBhZGRpbmdcbisgKlxuKyAqIEV4cGVjdHMgdG8gZmluZCBjb21wb25lbnQgdGFibGUgaW5mbyAoc3RydWN0IHBkc19jb3JlX2NvbXBvbmVudF90YmwpXG4rICogaW4gY21kX3JlZ3MtXHUwMDNlZGF0YS4gIERyaXZlciBzaG91bGQga2VlcCB0aGUgZGV2Y21kIGludGVyZmFjZSBsb2NrZWRcbisgKiB3aGlsZSBwcmVwYXJpbmcgdGhlIGNvbXBvbmVudCB0YWJsZSBpbmZvLlxuKyAqL1xuK3N0cnVjdCBwZHNfY29yZV9zZW5kX2NvbXBvbmVudF90YmxfY21kIHtcbitcdHU4IG9wY29kZTtcbitcdHU4IHZlcjtcbitcdHU4IHNsb3RfaWQ7XG4rXHR1OCByc3ZkO1xuK307XG4rXG4rZW51bSBwZHNfY29yZV9jb21wb25lbnRfcmVzcF9jb2RlIHtcbitcdFBEU19DT1JFX0NPTVBPTkVOVF9WQUxJRCA9IDB4MCxcbitcdFBEU19DT1JFX0NPTVBPTkVOVF9TVEFNUF9JREVOVElDQUwgPSAweDEsXG4rXHRQRFNfQ09SRV9DT01QT05FTlRfU1RBTVBfTE9XRVIgPSAweDIsXG4rXHRQRFNfQ09SRV9DT01QT05FTlRfU1RBTVBfT1JfVkVSU0lPTl9JTlZBTElEID0gMHgzLFxuK1x0UERTX0NPUkVfQ09NUE9ORU5UX0NPTkZMSUNUID0gMHg0LFxuK1x0UERTX0NPUkVfQ09NUE9ORU5UX1BSRVJFUVNfTk9UX01FVCA9IDB4NSxcbitcdFBEU19DT1JFX0NPTVBPTkVOVF9OT1RfU1VQUE9SVEVEID0gMHg2LFxuK1x0UERTX0NPUkVfQ09NUE9ORU5UX0ZXX1RZUEVfSU5WQUxJRCA9IDB4ZDAsXG4rfTtcbitcbisvKipcbisgKiBzdHJ1Y3QgcGRzX2NvcmVfc2VuZF9jb21wb25lbnRfdGJsX2NvbXAgLSBTZW5kIGNvbXBvbmVudCB0YWJsZSBjb21wbGV0aW9uXG4rICogQHN0YXR1czogU3RhdHVzIG9mIHRoZSBjb21tYW5kIChlbnVtIHBkc19jb3JlX3N0YXR1c19jb2RlKVxuKyAqIEB2ZXI6IERldmljZSdzIG1heCBzdXBwb3J0ZWQgdmVyc2lvbiBvZiB0aGlzIGNvbW1hbmRcbisgKiBAY29tcGxldGlvbl9jb2RlOiBDb21wb25lbnQgY29tcGxldGlvbiBjb2RlXG4rICogQHJlc3BvbnNlOiBDb21wb25lbnQgcmVzcG9uc2VcbisgKiBAcmVzcG9uc2VfY29kZTogQ29tcG9uZW50IHJlc3BvbnNlIGNvZGVcbisgKiBAc2xvdF9pZDogQWN0dWFsIHNsb3RfaWQgb2YgdGhlIGNvbXBvbmVudCAoZW51bSBwZHNfY29yZV9md19zbG90KVxuKyAqIEByc3ZkOiBXb3JkIGJvdW5kYXJ5IHBhZGRpbmdcbisgKi9cbitzdHJ1Y3QgcGRzX2NvcmVfc2VuZF9jb21wb25lbnRfdGJsX2NvbXAge1xuK1x0dTggc3RhdHVzO1xuK1x0dTggdmVyO1xuK1x0dTggY29tcGxldGlvbl9jb2RlO1xuK1x0dTggcmVzcG9uc2U7XG4rXHR1OCByZXNwb25zZV9jb2RlO1xuK1x0dTggc2xvdF9pZDtcbitcdHU4IHJzdmRbMl07XG4rfTtcbitcbisvKipcbisgKiBlbnVtIHBkc19jb3JlX3NlbmRfY29tcG9uZW50X29wIC0gUERTX0NPUkVfQ01EX1NFTkRfQ09NUE9ORU5UIG9wZXJhdGlvblxuKyAqIEBQRFNfQ09SRV9TRU5EX0NPTVBPTkVOVF9TVEFSVDogSW5pdGlhbCBvcGVyYXRpb24gdG8gc3RhcnQgdHJhbnNmZXJcbisgKiBAUERTX0NPUkVfU0VORF9DT01QT05FTlRfU1RBVFVTOiBTdWJzZXF1ZW50IGNhbGxzIHRvIGNoZWNrIG9uIHN0YXR1c1xuKyAqL1xuK2VudW0gcGRzX2NvcmVfc2VuZF9jb21wb25lbnRfb3Age1xuK1x0UERTX0NPUkVfU0VORF9DT01QT05FTlRfU1RBUlQgPSAwLFxuK1x0UERTX0NPUkVfU0VORF9DT01QT05FTlRfU1RBVFVTID0gMSxcbit9O1xuK1xuKyNkZWZpbmUgUERTX0NPUkVfRldfQ09NUE9ORU5UX0lEX0lOVkFMSUQgMHhGRkZGXG4rLyoqXG4rICogc3RydWN0IHBkc19jb3JlX2ZsYXNoX2NvbXBvbmVudCAtIENvbXBvbmVudCBkZXRhaWxzXG4rICogQGNvbXBhcmlzb25fc3RhbXA6IENvbXBhcmlzb24gc3RhbXAgdXNlZCBmb3IgY29tcG9uZW50IHZlcnNpb24gY2hlY2tzXG4rICogQGltYWdlX3NpemU6IENvbXBvbmVudCBpbWFnZSBzaXplXG4rICogQGNsYXNzaWZpY2F0aW9uOiBWZW5kb3Igc3BlY2lmaWMgY2xhc3NpZmljYXRpb24gaW5mb1xuKyAqIEBpZGVudGlmaWVyOiBDb21wb25lbnQncyBJRFxuKyAqIEBvcHRpb25zOiBDb21wb25lbnQgb3B0aW9uc1xuKyAqIEByc3ZkOiBXb3JkIGJvdW5kYXJ5IHBhZGRpbmdcbisgKiBAdmVyc2lvbl9zdHJfdHlwZTogVGhlIHR5cGVzIG9mIHN0cmluZ3MgdXNlZFxuKyAqIEB2ZXJzaW9uX3N0cl9sZW46IExlbmd0aCBvZiBAdmVyc2lvbl9zdHJcbisgKiBAdmVyc2lvbl9zdHI6IENvbXBvbmVudCB2ZXJzaW9uIGluZm9ybWF0aW9uXG4rICovXG4rc3RydWN0IHBkc19jb3JlX2ZsYXNoX2NvbXBvbmVudCB7XG4rXHRfX2xlMzIgY29tcGFyaXNvbl9zdGFtcDtcbitcdF9fbGUzMiBpbWFnZV9zaXplO1xuK1x0X19sZTE2IGNsYXNzaWZpY2F0aW9uO1xuK1x0X19sZTE2IGlkZW50aWZpZXI7XG4rXHRfX2xlMTYgb3B0aW9ucztcbitcdHU4IHJzdmRbM107XG4rXHR1OCB2ZXJzaW9uX3N0cl90eXBlO1xuK1x0dTggdmVyc2lvbl9zdHJfbGVuO1xuK1x0dTggdmVyc2lvbl9zdHJbXTtcbit9O1xuK1xuKy8qKlxuKyAqIHN0cnVjdCBwZHNfY29yZV9zZW5kX2NvbXBvbmVudF9jbWQgLSBTZW5kIGNvbXBvbmVudCBjb21tYW5kXG4rICogQG9wY29kZTogT3Bjb2RlIFBEU19DT1JFX0NNRF9TRU5EX0NPTVBPTkVOVFxuKyAqIEB2ZXI6IERyaXZlcidzIG1heCBzdXBwb3J0ZWQgdmVyc2lvbiBvZiB0aGlzIGNvbW1hbmRcbisgKiBAc2xvdF9pZDogZW51bSBwZHNfY29yZV9md19zbG90XG4rICogQG9wZXJhdGlvbjogZW51bSBwZHNfY29yZV9zZW5kX2NvbXBvbmVudF9vcFxuKyAqIEBvZmZzZXQ6IE9mZnNldCBpbnRvIHRoZSBjb21wb25lbnQsIG5vbi16ZXJvIGlmIG11bHRpcGxlIGNvbW1hbmRzXG4rICpcdCAgICBhcmUgbmVlZGVkIGZvciBhIHNpbmdsZSBjb21wb25lbnRcbisgKiBAZGF0YV9sZW46IExlbmd0aCBvZiB0aGlzIHBhcnQgb2YgdGhlIGNvbXBvbmVudCBzdG9yZWQgYXQgQGRhdGFfcGFcbisgKiBAcnN2ZDogV29yZCBib3VuZGFyeSBwYWRkaW5nXG4rICogQGRhdGFfcGE6IERNQSBhZGRyZXNzIG9mIHRoZSBjb21wb25lbnRcbisgKlxuKyAqIEEgY29tcG9uZW50IG1heSBiZSB0b28gbGFyZ2UgdG8gc3RvcmUgaW4gYSBzaW5nbGUgYnVmZmVyLCBzbyBtdWx0aXBsZVxuKyAqIFBEU19DT1JFX0NNRF9TRU5EX0NPTVBPTkVOVCBkZXZjbWRzIG1heSBiZSBuZWVkZWQuXG4rICpcbisgKiBFeHBlY3RzIHRvIGZpbmQgZmxhc2ggY29tcG9uZW50IGluZm8gKHN0cnVjdCBwZHNfY29yZV9mbGFzaF9jb21wb25lbnQpXG4rICogaW4gY21kX3JlZ3MtXHUwMDNlZGF0YS4gRHJpdmVyIHNob3VsZCBrZWVwIHRoZSBkZXZjbWQgaW50ZXJmYWNlIGxvY2tlZFxuKyAqIHdoaWxlIHByZXBhcmluZyBhbmQgc2VuZGluZyB0aGUgZmxhc2ggY29tcG9uZW50IGluZm8uXG4rICovXG4rc3RydWN0IHBkc19jb3JlX3NlbmRfY29tcG9uZW50X2NtZCB7XG4rXHR1OCBvcGNvZGU7XG4rXHR1OCB2ZXI7XG4rXHR1OCBzbG90X2lkO1xuK1x0dTggb3BlcmF0aW9uO1xuK1x0X19sZTMyIG9mZnNldDtcbitcdF9fbGUzMiBkYXRhX2xlbjtcbitcdHU4IHJzdmRbNF07XG4rXHRfX2xlNjQgZGF0YV9wYTtcbit9O1xuK1xuKy8qKlxuKyAqIHN0cnVjdCBwZHNfY29yZV9zZW5kX2NvbXBvbmVudF9jb21wIC0gU2VuZCBjb21wb25lbnQgY29tcGxldGlvblxuKyAqIEBzdGF0dXM6IFN0YXR1cyBvZiB0aGUgY29tbWFuZCAoZW51bSBwZHNfY29yZV9zdGF0dXNfY29kZSlcbisgKiBAdmVyOiBEZXZpY2UncyBtYXggc3VwcG9ydGVkIHZlcnNpb24gb2YgdGhpcyBjb21tYW5kXG4rICogQGNvbXBsZXRpb25fY29kZTogQ29tcGxldGlvbiBjb2RlXG4rICogQGNvbXBhdF9yZXNwb25zZTogQ29tcGF0aWJpbGl0eSByZXNwb25zZSAoMCA9IENvbXBvbmVudCBjYW4gYmUgdXBkYXRlZClcbisgKiBAY29tcGF0X3Jlc3BvbnNlX2NvZGU6IENvbXBhdGliaWxpdHkgcmVzcG9uc2UgY29kZVxuKyAqIEByc3ZkOiBXb3JkIGJvdW5kYXJ5IHBhZGRpbmdcbisgKi9cbitzdHJ1Y3QgcGRzX2NvcmVfc2VuZF9jb21wb25lbnRfY29tcCB7XG4rXHR1OCBzdGF0dXM7XG4rXHR1OCB2ZXI7XG4rXHR1OCBjb21wbGV0aW9uX2NvZGU7XG4rXHR1OCBjb21wYXRfcmVzcG9uc2U7XG4rXHR1OCBjb21wYXRfcmVzcG9uc2VfY29kZTtcbitcdHU4IHJzdmRbM107XG4rfTtcbitcbisvKipcbisgKiBlbnVtIHBkc19jb3JlX2Z3X2NvbXBvbmVudF90eXBlIC0gRmlybXdhcmUgY29tcG9uZW50IHR5cGVcbisgKiBAUERTX0NPUkVfRldfVFlQRV9VTktOT1dOOiBVbmtub3duIGNvbXBvbmVudCB0eXBlXG4rICogQFBEU19DT1JFX0ZXX1RZUEVfTUFJTjogTWFpbiBmaXJtd2FyZVxuKyAqIEBQRFNfQ09SRV9GV19UWVBFX0JPT1Q6IEJvb3QgbG9hZGVyXG4rICogQFBEU19DT1JFX0ZXX1RZUEVfQ1BMRDogQ1BMRCBmaXJtd2FyZVxuKyAqIEBQRFNfQ09SRV9GV19UWVBFX1NFQ1VSRTogU2VjdXJlIGZpcm13YXJlXG4rICogQFBEU19DT1JFX0ZXX1RZUEVfRlBHQTogRlBHQSBjb25maWd1cmF0aW9uXG4rICogQFBEU19DT1JFX0ZXX1RZUEVfU1VDX01BSU46IFN5c3RlbSBVbml0IENvbnRyb2xsZXIgZmlybXdhcmVcbisgKiBAUERTX0NPUkVfRldfVFlQRV9TVUNfQk9PVDogU3lzdGVtIFVuaXQgQ29udHJvbGxlciBib290bG9hZGVyXG4rICogQFBEU19DT1JFX0ZXX1RZUEVfVUJPT1Q6IFUtQm9vdCBib290bG9hZGVyXG4rICpcbisgKiBHb2xkL3JlY292ZXJ5IHZhcmlhbnRzIGFyZSBpZGVudGlmaWVkIGJ5IHNsb3RfaWQgPT0gUERTX0NPUkVfRldfU0xPVF9HT0xEXG4rICogYW5kIHJlcG9ydGVkIHdpdGggYSBcIi5nb2xkXCIgc3VmZml4IChlLmcuLCBmdy5nb2xkKS5cbisgKi9cbitlbnVtIHBkc19jb3JlX2Z3X2NvbXBvbmVudF90eXBlIHtcbitcdFBEU19DT1JFX0ZXX1RZUEVfVU5LTk9XTiAgID0gMCxcbitcdFBEU19DT1JFX0ZXX1RZUEVfTUFJTiAgICAgID0gMSxcbitcdFBEU19DT1JFX0ZXX1RZUEVfQk9PVCAgICAgID0gMixcbitcdFBEU19DT1JFX0ZXX1RZUEVfQ1BMRCAgICAgID0gMyxcbitcdFBEU19DT1JFX0ZXX1RZUEVfU0VDVVJFICAgID0gNCxcbitcdFBEU19DT1JFX0ZXX1RZUEVfRlBHQSAgICAgID0gNSxcbitcdFBEU19DT1JFX0ZXX1RZUEVfU1VDX01BSU4gID0gNixcbitcdFBEU19DT1JFX0ZXX1RZUEVfU1VDX0JPT1QgID0gNyxcbitcdFBEU19DT1JFX0ZXX1RZUEVfVUJPT1QgICAgID0gOCxcbit9O1xuK1xuKy8qKlxuKyAqIGVudW0gcGRzX2NvcmVfY29tcG9uZW50X2luZm9fZmxhZ3MgLSBDb21wb25lbnQgaW5mbyBmbGFnc1xuKyAqIEBQRFNfQ09SRV9GV19DT01QT05FTlRfSU5GT19GX1JVTk5JTkc6IENvbXBvbmVudCBpcyBjdXJyZW50bHkgcnVubmluZ1xuKyAqIEBQRFNfQ09SRV9GV19DT01QT05FTlRfSU5GT19GX1NUQVJUVVA6IENvbXBvbmVudCB2ZXJzaW9uIG9uIG5leHQgRlcgYm9vdFxuKyAqIEBQRFNfQ09SRV9GV19DT01QT05FTlRfSU5GT19GX0ZJWEVEOiBDb21wb25lbnQgaXMgZml4ZWQgYW5kIGNhbm5vdCBiZSB1cGRhdGVkXG4rICogQFBEU19DT1JFX0ZXX0NPTVBPTkVOVF9JTkZPX0ZfVVBEQVRFX0JZX05BTUU6IENvbXBvbmVudCBjYW4gYmUgdXBkYXRlZFxuKyAqXHRieSBuYW1lXG4rICovXG4rZW51bSBwZHNfY29yZV9jb21wb25lbnRfaW5mb19mbGFncyB7XG4rXHRQRFNfQ09SRV9GV19DT01QT05FTlRfSU5GT19GX1JVTk5JTkcgPSBCSVQoMCksXG4rXHRQRFNfQ09SRV9GV19DT01QT05FTlRfSU5GT19GX1NUQVJUVVAgPSBCSVQoMSksXG4rXHRQRFNfQ09SRV9GV19DT01QT05FTlRfSU5GT19GX0ZJWEVEID0gQklUKDIpLFxuK1x0UERTX0NPUkVfRldfQ09NUE9ORU5UX0lORk9fRl9VUERBVEVfQllfTkFNRSA9IEJJVCgzKSxcbit9O1xuK1xuKy8qKlxuKyAqIHN0cnVjdCBwZHNfY29yZV9md19jb21wb25lbnRfaW5mbyAtIEdFVF9DT01QT05FTlRfSU5GTyBlbnRyeVxuKyAqIEBuYW1lOiBDb21wb25lbnQncyBuYW1lXG4rICogQGNvbXBvbmVudF90eXBlOiBlbnVtIHBkc19jb3JlX2Z3X2NvbXBvbmVudF90eXBlXG4rICogQHJzdmQ6IFdvcmQgYm91bmRhcnkgcGFkZGluZ1xuKyAqIEBmbGFnczogZW51bSBwZHNfY29yZV9jb21wb25lbnRfaW5mb19mbGFnc1xuKyAqIEBpZGVudGlmaWVyOiBDb21wb25lbnQncyBpZGVudGlmaWVyXG4rICogQHNsb3RfaWQ6IENvbXBvbmVudCdzIHNsb3QgaWRlbnRpZmllclxuKyAqIEB2ZXJzaW9uOiBDb21wb25lbnQncyB2ZXJzaW9uXG4rICovXG4rc3RydWN0IHBkc19jb3JlX2Z3X2NvbXBvbmVudF9pbmZvIHtcbisjZGVmaW5lIFBEU19DT1JFX0ZXX0NPTVBPTkVOVF9OQU1FX0JVRkxFTiAyNFxuK1x0Y2hhciBuYW1lW1BEU19DT1JFX0ZXX0NPTVBPTkVOVF9OQU1FX0JVRkxFTl07XG4rXHR1OCBjb21wb25lbnRfdHlwZTtcbitcdHU4IHJzdmRbM107XG4rXHRfX2xlMTYgZmxhZ3M7XG4rXHR1OCBpZGVudGlmaWVyO1xuK1x0dTggc2xvdF9pZDtcbisjZGVmaW5lIFBEU19DT1JFX0ZXX0NPTVBPTkVOVF9WRVJfQlVGTEVOIDMyXG4rXHRjaGFyIHZlcnNpb25bUERTX0NPUkVfRldfQ09NUE9ORU5UX1ZFUl9CVUZMRU5dO1xuK307XG4rXG4rI2RlZmluZSBQRFNfQ09SRV9GV19DT01QT05FTlRfTElTVF9MRU5cdCgoUERTX1BBR0VfU0laRSAtIDgpIC8gXFxcbitcdFx0c2l6ZW9mKHN0cnVjdCBwZHNfY29yZV9md19jb21wb25lbnRfaW5mbykpXG4rXG4rLyoqXG4rICogc3RydWN0IHBkc19jb3JlX2NvbXBvbmVudF9saXN0X2luZm8gLSBHRVRfQ09NUE9ORU5UX0lORk8gY29tcGxldGlvbiBkYXRhXG4rICogQG51bV9jb21wb25lbnRzOiBOdW1iZXIgb2YgdmFsaWQgY29tcG9uZW50c1xuKyAqIEByc3ZkOiBXb3JkIGJvdW5kYXJ5IHBhZGRpbmdcbisgKiBAaW5mbzogTGlzdCBvZiB2YWxpZCBjb21wb25lbnRzXG4rICovXG4rc3RydWN0IHBkc19jb3JlX2NvbXBvbmVudF9saXN0X2luZm8ge1xuK1x0dTggbnVtX2NvbXBvbmVudHM7XG4rXHR1OCByc3ZkWzddO1xuK1x0c3RydWN0IHBkc19jb3JlX2Z3X2NvbXBvbmVudF9pbmZvIGluZm9bUERTX0NPUkVfRldfQ09NUE9ORU5UX0xJU1RfTEVOXTtcbit9O1xuK1xuKy8qKlxuKyAqIHN0cnVjdCBwZHNfY29yZV9nZXRfY29tcG9uZW50X2luZm9fY21kIC0gR0VUX0NPTVBPTkVOVF9JTkZPIGNvbW1hbmRcbisgKiBAb3Bjb2RlOiBQRFNfQ09SRV9DTURfR0VUX0NPTVBPTkVOVF9JTkZPXG4rICogQHZlcjogRHJpdmVyJ3MgbWF4IHN1cHBvcnRlZCB2ZXJzaW9uIG9mIHRoaXMgY29tbWFuZFxuKyAqIEBkYXRhX2xlbjogTGVuZ3RoIG9mIGRhdGEgYXQgZGF0YV9wYVxuKyAqIEByc3ZkOiBXb3JkIGJvdW5kYXJ5IHBhZGRpbmdcbisgKiBAZGF0YV9wYTogRE1BIGFkZHJlc3Mgb2YgZGF0YVxuKyAqXG4rICogRlcgcG9wdWxhdGVzIHN0cnVjdCBwZHNfY29yZV9jb21wb25lbnRfbGlzdF9pbmZvIHBvaW50ZWQgdG8gYnkgQGRhdGFfcGFcbisgKi9cbitzdHJ1Y3QgcGRzX2NvcmVfZ2V0X2NvbXBvbmVudF9pbmZvX2NtZCB7XG4rXHR1OCBvcGNvZGU7XG4rXHR1OCB2ZXI7XG4rXHRfX2xlMTYgZGF0YV9sZW47XG4rXHR1OCByc3ZkWzRdO1xuK1x0X19sZTY0IGRhdGFfcGE7XG4rfTtcbitcbisvKipcbisgKiBzdHJ1Y3QgcGRzX2NvcmVfZ2V0X2NvbXBvbmVudF9pbmZvX2NvbXAgLSBHRVRfQ09NUE9ORU5UX0lORk8gY29tcGxldGlvblxuKyAqIEBzdGF0dXM6IGVudW0gcGRzX2NvcmVfc3RhdHVzX2NvZGVcbisgKiBAdmVyOiBEZXZpY2UncyBtYXggc3VwcG9ydGVkIHZlcnNpb24gb2YgdGhpcyBjb21tYW5kXG4rICogQHJzdmQ6IFdvcmQgYm91bmRhcnkgcGFkZGluZ1xuKyAqL1xuK3N0cnVjdCBwZHNfY29yZV9nZXRfY29tcG9uZW50X2luZm9fY29tcCB7XG4rXHR1OCBzdGF0dXM7XG4rXHR1OCB2ZXI7XG4rXHR1OCByc3ZkWzJdO1xuK307XG4rXG4rLyoqXG4rICogc3RydWN0IHBkc19jb3JlX2ZpbmFsaXplX3VwZGF0ZV9jbWQgLSBGSU5BTElaRV9VUERBVEUgY29tbWFuZFxuKyAqIEBvcGNvZGU6IFBEU19DT1JFX0NNRF9GSU5BTElaRV9VUERBVEVcbisgKiBAdmVyOiBEcml2ZXIncyBtYXggc3VwcG9ydCB2ZXJzaW9uIG9mIHRoaXMgY29tbWFuZFxuKyAqIEByc3ZkOiBXb3JkIGJvdW5kYXJ5IHBhZGRpbmdcbisgKlxuKyAqIERyaXZlciBzZW5kcyBhdCB0aGUgZW5kIG9mIHVwZGF0aW5nIGFsbCBjb21wb25lbnRzIHRvIGZpbmFsaXplIHRoZSB1cGRhdGVcbisgKi9cbitzdHJ1Y3QgcGRzX2NvcmVfZmluYWxpemVfdXBkYXRlX2NtZCB7XG4rXHR1OCBvcGNvZGU7XG4rXHR1OCB2ZXI7XG4rXHR1OCByc3ZkWzJdO1xuK307XG4rXG4rLyoqXG4rICogc3RydWN0IHBkc19jb3JlX2ZpbmFsaXplX3VwZGF0ZV9jb21wIC0gRklOQUxJWkVfVVBEQVRFIGNvbXBsZXRpb25cbisgKiBAc3RhdHVzOiBlbnVtIHBkc19jb3JlX3N0YXR1c19jb2RlXG4rICogQHZlcjogRGV2aWNlJ3MgbWF4IHN1cHBvcnRlZCB2ZXJzaW9uIG9mIHRoaXMgY29tbWFuZFxuKyAqIEByc3ZkOiBXb3JkIGJvdW5kYXJ5IHBhZGRpbmdcbisgKi9cbitzdHJ1Y3QgcGRzX2NvcmVfZmluYWxpemVfdXBkYXRlX2NvbXAge1xuK1x0dTggc3RhdHVzO1xuK1x0dTggdmVyO1xuK1x0dTggcnN2ZFsyXTtcbit9O1xuK1xuKy8qKlxuKyAqIHN0cnVjdCBwZHNfY29yZV9tYXRjaF9yZWNvcmRfZGVzY19jbWQgLSBNQVRDSF9SRUNPUkRfREVTQyBjb21tYW5kXG4rICogQG9wY29kZTogUERTX0NPUkVfQ01EX01BVENIX1JFQ09SRF9ERVNDXG4rICogQHZlcjogRHJpdmVyJ3MgbWF4IHN1cHBvcnRlZCB2ZXJzaW9uIG9mIHRoaXMgY29tbWFuZFxuKyAqIEB0eXBlOiBQTERNIERlc2NyaXB0b3IgSWRlbnRpZmllciBUeXBlXG4rICogQHNpemU6IExlbmd0aCBvZiB0aGUgRGVzY3JpcHRvciBJZGVudGlmaWVyIFZhbHVlXG4rICogQHJzdmQ6IFdvcmQgYm91bmRhcnkgcGFkZGluZ1xuKyAqXG4rICogRXhwZWN0cyB0byBmaW5kIHRoZSBEZXNjcmlwdG9yIElkZW50aWZpZXIgRGF0YSBpbiBjbWRfcmVncy1cdTAwM2VkYXRhLiBEcml2ZXJcbisgKiBzaG91bGQga2VlcCB0aGUgZGV2Y21kIGludGVyZmFjZSBsb2NrZWQgd2hpbGUgcHJlcGFyaW5nIGFuZCBzZW5kaW5nIHRoaXNcbisgKiBjb21tYW5kLlxuKyAqL1xuK3N0cnVjdCBwZHNfY29yZV9tYXRjaF9yZWNvcmRfZGVzY19jbWQge1xuK1x0dTggb3Bjb2RlO1xuK1x0dTggdmVyO1xuK1x0X19sZTE2IHR5cGU7XG4rXHRfX2xlMTYgc2l6ZTtcbitcdHU4IHJzdmRbMl07XG4rfTtcbitcbisvKipcbisgKiBzdHJ1Y3QgcGRzX2NvcmVfbWF0Y2hfcmVjb3JkX2Rlc2NfY29tcCAtIE1BVENIX1JFQ09SRF9ERVNDIGNvbXBsZXRpb25cbisgKiBAc3RhdHVzOiBlbnVtIHBkc19jb3JlX3N0YXR1c19jb2RlXG4rICogQHZlcjogRGV2aWNlJ3MgbWF4IHN1cHBvcnRlZCB2ZXJzaW9uIG9mIHRoaXMgY29tbWFuZFxuKyAqIEBtYXRjaDogV2hldGhlciBvciBub3QgdGhlIFJlY29yZCBEZXNjcmlwdG9yIG1hdGNoZXMgdGhlIGRldmljZVxuKyAqIEByc3ZkOiBXb3JkIGJvdW5kYXJ5IHBhZGRpbmdcbisgKlxuKyAqIFdoZW4gc3RhdHVzIGlzIFBEU19SQ19TVUNDRVNTLCB0aGVuIEBtYXRjaCBpcyB2YWxpZCwgb3RoZXJ3aXNlIGl0J3NcbisgKiB1bmRlZmluZWQuXG4rICovXG4rc3RydWN0IHBkc19jb3JlX21hdGNoX3JlY29yZF9kZXNjX2NvbXAge1xuK1x0dTggc3RhdHVzO1xuK1x0dTggdmVyO1xuK1x0dTggbWF0Y2g7XG4rXHR1OCByc3ZkO1xuK307XG4rXG4rLyoqXG4rICogZW51bSBwZHNfY29yZV9ob3N0X21lbV9vcGVyIC0gSE9TVF9NRU0gc3ViLW9wZXJhdGlvbnNcbisgKiBAUERTX0NPUkVfSE9TVF9NRU1fR0VUX0NPVU5UOiBRdWVyeSBudW1iZXIgb2YgbWVtb3J5IHJlcXVlc3RzXG4rICogQFBEU19DT1JFX0hPU1RfTUVNX1FVRVJZOiAgICAgUXVlcnkgZGV0YWlscyBvZiBhIG1lbW9yeSByZXF1ZXN0XG4rICogQFBEU19DT1JFX0hPU1RfTUVNX0FERDogICAgICAgUHJvdmlkZSBhbGxvY2F0ZWQgbWVtb3J5IHRvIGZpcm13YXJlXG4rICogQFBEU19DT1JFX0hPU1RfTUVNX0RFTDogICAgICAgTm90aWZ5IGZpcm13YXJlIG9mIG1lbW9yeSBkZWFsbG9jYXRpb25cbisgKi9cbitlbnVtIHBkc19jb3JlX2hvc3RfbWVtX29wZXIge1xuK1x0UERTX0NPUkVfSE9TVF9NRU1fR0VUX0NPVU5UXHQ9IDAsXG4rXHRQRFNfQ09SRV9IT1NUX01FTV9RVUVSWVx0XHQ9IDEsXG4rXHRQRFNfQ09SRV9IT1NUX01FTV9BRERcdFx0PSAyLFxuK1x0UERTX0NPUkVfSE9TVF9NRU1fREVMXHRcdD0gMyxcbit9O1xuK1xuKy8qKlxuKyAqIHN0cnVjdCBwZHNfY29yZV9ob3N0X21lbV9jbWQgLSBIT1NUX01FTSBjb21tYW5kXG4rICogQG9wY29kZTogICAgIE9wY29kZSBQRFNfQ09SRV9DTURfSE9TVF9NRU1cbisgKiBAb3BlcjogICAgICAgT3BlcmF0aW9uIChlbnVtIHBkc19jb3JlX2hvc3RfbWVtX29wZXIpXG4rICogQGluZGV4OiAgICAgIE1lbW9yeSByZXF1ZXN0IGluZGV4IChHRVRfQ09VTlQ6IG1heF9jb3VudCwgUVVFUlk6IGluZGV4KVxuKyAqIEB0YWc6ICAgICAgICBUYWcgZm9yIHRoaXMgbWVtb3J5IHJlcXVlc3QgKEFERC9ERUwpXG4rICogQHJlYXNvbjogICAgIFJlYXNvbiBmb3IgZGVsZXRpb24gKERFTCBvbmx5KVxuKyAqIEByc3ZkOiAgICAgICBSZXNlcnZlZFxuKyAqIEBtYXhfY29udGlnOiBNYXhpbXVtIGNvbnRpZ3VvdXMgbWVtb3J5IHNpemUgKEdFVF9DT1VOVCBvbmx5KVxuKyAqIEBzaXplOiAgICAgICBTaXplIG9mIG1lbW9yeSBpbiBieXRlcyAoQUREIG9ubHkpXG4rICogQGJ1Zl9wYTogICAgIERNQSBhZGRyZXNzIG9mIG1lbW9yeSAoQUREIG9ubHkpXG4rICpcbisgKiBVbmlmaWVkIGNvbW1hbmQgZm9yIGFsbCBob3N0IG1lbW9yeSBvcGVyYXRpb25zLiBGaWVsZHMgYXJlIHJldXNlZFxuKyAqIGFjcm9zcyBvcGVyYXRpb25zIHRvIG1pbmltaXplIG9wY29kZSBzcGFjZSB1c2FnZS5cbisgKi9cbitzdHJ1Y3QgcGRzX2NvcmVfaG9zdF9tZW1fY21kIHtcbitcdHU4ICAgICBvcGNvZGU7XG4rXHR1OCAgICAgb3BlcjtcbitcdF9fbGUxNiBpbmRleDtcbitcdF9fbGUxNiB0YWc7XG4rXHR1OCAgICAgcmVhc29uO1xuK1x0dTggICAgIHJzdmQ7XG4rXHRfX2xlMzIgbWF4X2NvbnRpZztcbitcdF9fbGUzMiBzaXplO1xuK1x0X19sZTY0IGJ1Zl9wYTtcbit9O1xuK1xuKy8qKlxuKyAqIHN0cnVjdCBwZHNfY29yZV9ob3N0X21lbV9jb21wIC0gSE9TVF9NRU0gY29tcGxldGlvblxuKyAqIEBzdGF0dXM6ICAgICAgIFN0YXR1cyBvZiB0aGUgY29tbWFuZCAoZW51bSBwZHNfY29yZV9zdGF0dXNfY29kZSlcbisgKiBAb3BlcjogICAgICAgICBPcGVyYXRpb24gdGhhdCB3YXMgcGVyZm9ybWVkXG4rICogQGNvdW50OiAgICAgICAgTnVtYmVyIG9mIG1lbW9yeSByZXF1ZXN0cyAoR0VUX0NPVU5UKVxuKyAqIEBzaXplOiAgICAgICAgIFNpemUgb2YgbWVtb3J5IHJlcXVlc3QgaW4gYnl0ZXMgKFFVRVJZKVxuKyAqIEB0YWc6ICAgICAgICAgIFRhZyBmb3IgdGhpcyBtZW1vcnkgcmVxdWVzdCAoUVVFUlkvREVMKVxuKyAqIEByc3ZkOiAgICAgICAgIFJlc2VydmVkXG4rICovXG4rc3RydWN0IHBkc19jb3JlX2hvc3RfbWVtX2NvbXAge1xuK1x0dTggICAgIHN0YXR1cztcbitcdHU4ICAgICBvcGVyO1xuK1x0X19sZTE2IGNvdW50O1xuK1x0X19sZTMyIHNpemU7XG4rXHRfX2xlMTYgdGFnO1xuK1x0dTggICAgIHJzdmRbNl07XG4rfTtcbitcbiAvKlxuICAqIHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgLSBPdmVybGF5IG9mIGNvcmUgZGV2aWNlIGNvbW1hbmQgc3RydWN0dXJlc1xuICAqL1xuQEAgLTQ2Miw2ICs5MTUsMTQgQEAgdW5pb24gcGRzX2NvcmVfZGV2X2NtZCB7XG4gXHRzdHJ1Y3QgcGRzX2NvcmVfdmZfc2V0YXR0cl9jbWQgICB2Zl9zZXRhdHRyO1xuIFx0c3RydWN0IHBkc19jb3JlX3ZmX2dldGF0dHJfY21kICAgdmZfZ2V0YXR0cjtcbiBcdHN0cnVjdCBwZHNfY29yZV92Zl9jdHJsX2NtZCAgICAgIHZmX2N0cmw7XG4rXG4rXHRzdHJ1Y3QgcGRzX2NvcmVfZ2V0X2NvbXBvbmVudF9pbmZvX2NtZCBnZXRfY29tcG9uZW50X2luZm87XG4rXHRzdHJ1Y3QgcGRzX2NvcmVfc2VuZF9wa2dfZGF0YV9jbWQgICAgICBzZW5kX3BrZ19kYXRhO1xuK1x0c3RydWN0IHBkc19jb3JlX3NlbmRfY29tcG9uZW50X3RibF9jbWQgc2VuZF9jb21wb25lbnRfdGJsO1xuK1x0c3RydWN0IHBkc19jb3JlX3NlbmRfY29tcG9uZW50X2NtZCAgICAgc2VuZF9jb21wb25lbnQ7XG4rXHRzdHJ1Y3QgcGRzX2NvcmVfZmluYWxpemVfdXBkYXRlX2NtZCAgICBmaW5hbGl6ZV91cGRhdGU7XG4rXHRzdHJ1Y3QgcGRzX2NvcmVfbWF0Y2hfcmVjb3JkX2Rlc2NfY21kICBtYXRjaF9yZWNvcmRfZGVzYztcbitcdHN0cnVjdCBwZHNfY29yZV9ob3N0X21lbV9jbWQgICAgICAgICAgIGhvc3RfbWVtO1xuIH07XG4gXG4gLypcbkBAIC00ODAsNiArOTQxLDE0IEBAIHVuaW9uIHBkc19jb3JlX2Rldl9jb21wIHtcbiBcdHN0cnVjdCBwZHNfY29yZV92Zl9zZXRhdHRyX2NvbXAgICB2Zl9zZXRhdHRyO1xuIFx0c3RydWN0IHBkc19jb3JlX3ZmX2dldGF0dHJfY29tcCAgIHZmX2dldGF0dHI7XG4gXHRzdHJ1Y3QgcGRzX2NvcmVfdmZfY3RybF9jb21wICAgICAgdmZfY3RybDtcbitcbitcdHN0cnVjdCBwZHNfY29yZV9nZXRfY29tcG9uZW50X2luZm9fY29tcCBnZXRfY29tcG9uZW50X2luZm87XG4rXHRzdHJ1Y3QgcGRzX2NvcmVfc2VuZF9wa2dfZGF0YV9jb21wICAgICAgc2VuZF9wa2dfZGF0YTtcbitcdHN0cnVjdCBwZHNfY29yZV9zZW5kX2NvbXBvbmVudF90YmxfY29tcCBzZW5kX2NvbXBvbmVudF90Ymw7XG4rXHRzdHJ1Y3QgcGRzX2NvcmVfc2VuZF9jb21wb25lbnRfY29tcCAgICAgc2VuZF9jb21wb25lbnQ7XG4rXHRzdHJ1Y3QgcGRzX2NvcmVfZmluYWxpemVfdXBkYXRlX2NvbXAgICAgZmluYWxpemVfdXBkYXRlO1xuK1x0c3RydWN0IHBkc19jb3JlX21hdGNoX3JlY29yZF9kZXNjX2NvbXAgIG1hdGNoX3JlY29yZF9kZXNjO1xuK1x0c3RydWN0IHBkc19jb3JlX2hvc3RfbWVtX2NvbXAgICAgICAgICAgIGhvc3RfbWVtO1xuIH07XG4gXG4gLyoqXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMDowMzo0Ni4xOTQ3MDkzNzhaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NDU0MTc5MjQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlBhdGNoIEFuYWx5c2lzOiBQTERNIEZpcm13YXJlIFVwZGF0ZSBmb3IgQU1EL1BlbnNhbmRvIENvcmUgU21hcnROSUMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIHRoYXQgYWRkcyBQTERNIGZpcm13YXJlIHVwZGF0ZSBjYXBhYmlsaXRpZXMgdG8gdGhlIEFNRC9QZW5zYW5kbyBDb3JlIGRldmljZSBmYW1pbHksIHNwZWNpZmljYWxseSB1bmRlciB0aGUgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9gIGRpcmVjdG9yeS4gSXQncyBhZGRpbmcgc3VwcG9ydCBmb3IgdGhpbmdzIGxpa2UgZ2V0dGluZyBjb21wb25lbnQgaW5mbywgc2VuZGluZyBwYWNrYWdlIGRhdGEsIHNlbmRpbmcgY29tcG9uZW50IHRhYmxlcywgYW5kIGZpbmFsaXppbmcgdGhlIHVwZGF0ZSDigJMgYWxsIHRoZSBQTERNLXJlbGF0ZWQgZGV2Y21kcy4gUGx1cywgaXQncyBzZXR0aW5nIHVwIGhvc3QgbWVtb3J5IGFsbG9jYXRpb24gZm9yIHRoZSBmaXJtd2FyZSBpdHNlbGYuXG5cbkJ1dCwgaG9sZCBvbiBhIHNlY29uZC4uLiBsZXQgbWUgcmUtcmVhZCB0aGUgcHJvbXB0LiBJdCdzIGxvb2tpbmcgZm9yIGNvbmRpdGlvbnMgdG8gKm5vdCogZnV6ei4gQWgsIHRoZXJlIGl0IGlzISBcIkNvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLCBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cIiBCaW5nby5cblxuVGhlIHByb21wdCAqc3BlY2lmaWNhbGx5KiBuYW1lcyBgcGRzX2NvcmVgIGFzIGFuIGV4YW1wbGUgb2YgYSBTbWFydE5JQyBkcml2ZXIgdGhhdCdzIG9mZi1saW1pdHMgYmVjYXVzZSBpdCByZXF1aXJlcyB0aGF0IHNwZWNpZmljIGhhcmR3YXJlIHNldHVwLiBJIGRvbid0IG5lZWQgdG8gb3ZlcnRoaW5rIHRoaXMuXG5cbkp1c3QgdG8gYmUgY2VydGFpbiwgSSBxdWlja2x5IGRvdWJsZS1jaGVja2VkIHdoZXJlIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmc6IGBEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvYW1kL3Bkc19jb3JlLnJzdGAsIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvS2NvbmZpZ2AsIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvKmAsIGBpbmNsdWRlL2xpbnV4L3Bkcy9wZHNfY29yZV9pZi5oYC4gWWVwLCBpdCdzIGFsbCBkZWVwbHkgaW50ZXJ0d2luZWQgd2l0aCB0aGF0IHZlbmRvci1zcGVjaWZpYyBgcGRzX2NvcmVgIGRyaXZlci4gTm8gY2hhbmNlIG9mIGdldHRpbmcgdGhpcyBwYXRjaCB0byBydW4gd2l0aG91dCB0aGUgcGh5c2ljYWwgaGFyZHdhcmUsIHNvIHRoYXQncyBhICpubyogdG8gZnV6emluZy5cblxuTXkgY29uY2x1c2lvbiBpczogdGhpcyBwYXRjaCBpcyB1bnJlYWNoYWJsZSBpbiBhIHN0YW5kYXJkIGZ1enppbmcgZW52aXJvbm1lbnQgZHVlIHRvIGl0cyBkZXBlbmRlbmNlIG9uIHRoZSBBTUQvUGVuc2FuZG8gQ29yZSBTbWFydE5JQyBhbmQgdGhlcmVmb3JlIEkgbmVlZCB0byBzZXQgYFdvcnRoRnV6emluZz1mYWxzZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxMDYyLCJPdXRwdXRUb2tlbnMiOjc2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTY2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTA6MDM6NTUuNjQ4ODkxOTU2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODkwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQU1EL1BlbnNhbmRvIENvcmUgU21hcnROSUMgZHJpdmVyIChwZHNfY29yZSksIHdoaWNoIHJlcXVpcmVzIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIFRoZXJlZm9yZSwgdGhlIGNvZGUgaXMgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQU1EL1BlbnNhbmRvIENvcmUgU21hcnROSUMgZHJpdmVyIChwZHNfY29yZSksIHdoaWNoIHJlcXVpcmVzIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIFRoZXJlZm9yZSwgdGhlIGNvZGUgaXMgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowld6qn[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-30 09:59:44 +0000 UTC FinishedAt: 2026-07-30 10:03:57 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDEwOjAzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBBTUQvUGVuc2FuZG8gQ29yZSBTbWFydE5JQyBkcml2ZXIgKHBkc19jb3JlKSwgd2hpY2ggcmVxdWlyZXMgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4gVGhlcmVmb3JlLCB0aGUgY29kZSBpcyB1bnJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTA6MDM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA4ZmQ3ZGY5MzU4MzE2NDQ4NThmZTBkZWIzMzljNzg2ZDQ3YTdkODU3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMzAgMTA6MDM6NDQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L2FtZC9wZHNfY29yZS5yc3QgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvYW1kL3Bkc19jb3JlLnJzdFxuaW5kZXggOWU4YTE2YzQ0MTAyOS4uNDk0ODdhMzVjMTYzMiAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC9hbWQvcGRzX2NvcmUucnN0XG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvYW1kL3Bkc19jb3JlLnJzdFxuQEAgLTEwMiw2ICYjNDM7MTAyLDk1IEBAIGN1cnJlbnRseSBpbiB1c2UsIGFuZCB0aGF0IGJhbmsgd2lsbCB1c2VkIGZvciB0aGUgbmV4dCBib290OjpcbiAgICMgZGV2bGluayBkZXYgZmxhc2ggcGNpLzAwMDA6YjU6MDAuMCBcXFxuICAgICAgICAgICAgIGZpbGUgcGVuc2FuZG8vZHNjX2Z3XzEuNjMuMC0yMi50YXJcbiBcbiYjNDM7RmlybXdhcmUgTWFuYWdlbWVudCAoUExETSlcbiYjNDM7PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiYjNDM7XG4mIzQzO0Zpcm13YXJlIHRoYXQgc3VwcG9ydHMgUExETSBjYW4gYmUgdXBkYXRlZCB1c2luZyB0aGUgZGV2bGluayBmbGFzaCBjb21tYW5kXG4mIzQzO3dpdGggYSBQTERNIGZpcm13YXJlIHBhY2thZ2UuIFRoZSBlbnRpcmUgcGFja2FnZSBjYW4gYmUgdXBkYXRlZCBhdCBvbmNlOjpcbiYjNDM7XG4mIzQzOyAgIyBkZXZsaW5rIGRldiBmbGFzaCBwY2kvMDAwMDpiNTowMC4wIGZpbGUgZmlybXdhcmUucGxkbWZ3XG4mIzQzO1xuJiM0MztJbmRpdmlkdWFsIGNvbXBvbmVudHMgY2FuIGFsc28gYmUgdXBkYXRlZCBieSBzcGVjaWZ5aW5nIHRoZSBjb21wb25lbnQgbmFtZTo6XG4mIzQzO1xuJiM0MzsgICMgZGV2bGluayBkZXYgZmxhc2ggcGNpLzAwMDA6YjU6MDAuMCBcXFxuJiM0MzsgICAgICAgICAgICBmaWxlIGZpcm13YXJlLnBsZG1mdyBjb21wb25lbnQgZncuY3BsZFxuJiM0MztcbiYjNDM7UGVyLWNvbXBvbmVudCB1cGRhdGUgdXNlcyBkcml2ZXItZGVmaW5lZCBjb21wb25lbnQgbmFtZXMgKGZ3LCBmdy5jcGxkLFxuJiM0MztldGMuKS4gTm90IGFsbCBjb21wb25lbnRzIHN1cHBvcnQgcGVyLWNvbXBvbmVudCB1cGRhdGUgLVxuJiM0MztkZXZsaW5rIHdpbGwgcmVqZWN0IHRoZSByZXF1ZXN0IGlmIHRoZSBzcGVjaWZpZWQgY29tcG9uZW50IGNhbm5vdFxuJiM0MztiZSB1cGRhdGVkLlxuJiM0MztcbiYjNDM7R29sZCAocmVjb3ZlcnkpIGNvbXBvbmVudHMgY2FuIGJlIHVwZGF0ZWQgYnkgc3BlY2lmeWluZyB0aGUgYmFzZSBjb21wb25lbnRcbiYjNDM7bmFtZSAoZS5nLiwgYGBmd2BgIGZvciBgYGZ3LmdvbGRgYCkgd2l0aCBhIGdvbGRmdyBwYWNrYWdlIGZpbGUgd2hlbiB0aGVcbiYjNDM7ZGV2aWNlIHN1cHBvcnRzIHBlci1jb21wb25lbnQgdXBkYXRlLiBUaGUgYGAuZ29sZGBgIHN1ZmZpeCBpbiBkZXZsaW5rIGluZm9cbiYjNDM7b3V0cHV0IGluZGljYXRlcyB0aGUgZ29sZCBzbG90IHZlcnNpb24sIG5vdCBhIGZsYXNoIHRhcmdldC5cbiYjNDM7XG4mIzQzO0luZm8gdmVyc2lvbnMgKFBMRE0pXG4mIzQzOz09PT09PT09PT09PT09PT09PT09XG4mIzQzO1xuJiM0MztGaXJtd2FyZSB0aGF0IHN1cHBvcnRzIFBMRE0gcmVwb3J0cyBjb21wb25lbnQgdmVyc2lvbnMgdXNpbmcgZHJpdmVyLWRlZmluZWRcbiYjNDM7bmFtZXMuIFRoZSBkcml2ZXIgcmVwb3J0cyB0aGUgZm9sbG93aW5nIGNvbXBvbmVudCB2ZXJzaW9uczpcbiYjNDM7XG4mIzQzOy4uIGxpc3QtdGFibGU6OiBkZXZsaW5rIGluZm8gdmVyc2lvbnMgZm9yIFBMRE0tY2FwYWJsZSBmaXJtd2FyZVxuJiM0MzsgICA6d2lkdGhzOiA1IDUgOTBcbiYjNDM7XG4mIzQzOyAgICogLSBOYW1lXG4mIzQzOyAgICAgLSBUeXBlXG4mIzQzOyAgICAgLSBEZXNjcmlwdGlvblxuJiM0MzsgICAqIC0gYGBmd2BgXG4mIzQzOyAgICAgLSBydW5uaW5nLCBzdG9yZWRcbiYjNDM7ICAgICAtIE1haW4gZmlybXdhcmVcbiYjNDM7ICAgKiAtIGBgZncuZ29sZGBgXG4mIzQzOyAgICAgLSBzdG9yZWRcbiYjNDM7ICAgICAtIEdvbGQgKHJlY292ZXJ5KSBmaXJtd2FyZVxuJiM0MzsgICAqIC0gYGBmdy5ib290bG9hZGVyYGBcbiYjNDM7ICAgICAtIHJ1bm5pbmcsIHN0b3JlZFxuJiM0MzsgICAgIC0gQm9vdCBsb2FkZXJcbiYjNDM7ICAgKiAtIGBgZncuY3BsZGBgXG4mIzQzOyAgICAgLSBydW5uaW5nLCBzdG9yZWRcbiYjNDM7ICAgICAtIENQTERcbiYjNDM7ICAgKiAtIGBgZncuc2VjdXJlYGBcbiYjNDM7ICAgICAtIHJ1bm5pbmcsIHN0b3JlZFxuJiM0MzsgICAgIC0gU2VjdXJlIGJvb3QgZmlybXdhcmVcbiYjNDM7ICAgKiAtIGBgZncuZnBnYWBgXG4mIzQzOyAgICAgLSBydW5uaW5nLCBzdG9yZWRcbiYjNDM7ICAgICAtIEZQR0EgY29uZmlndXJhdGlvblxuJiM0MzsgICAqIC0gYGBmdy5zdWNgYFxuJiM0MzsgICAgIC0gcnVubmluZywgc3RvcmVkXG4mIzQzOyAgICAgLSBTeXN0ZW0gVW5pdCBDb250cm9sbGVyIGZpcm13YXJlXG4mIzQzOyAgICogLSBgYGZ3LnN1Yy5ib290bG9hZGVyYGBcbiYjNDM7ICAgICAtIHJ1bm5pbmcsIHN0b3JlZFxuJiM0MzsgICAgIC0gU3lzdGVtIFVuaXQgQ29udHJvbGxlciBib290bG9hZGVyXG4mIzQzOyAgICogLSBgYGZ3LnVib290YGBcbiYjNDM7ICAgICAtIHJ1bm5pbmcsIHN0b3JlZFxuJiM0MzsgICAgIC0gVS1Cb290IGJvb3Rsb2FkZXJcbiYjNDM7ICAgKiAtIGBgYXNpYy5pZGBgXG4mIzQzOyAgICAgLSBmaXhlZFxuJiM0MzsgICAgIC0gVGhlIEFTSUMgdHlwZSBmb3IgdGhpcyBkZXZpY2VcbiYjNDM7ICAgKiAtIGBgYXNpYy5yZXZgYFxuJiM0MzsgICAgIC0gZml4ZWRcbiYjNDM7ICAgICAtIFRoZSByZXZpc2lvbiBvZiB0aGUgQVNJQyBmb3IgdGhpcyBkZXZpY2VcbiYjNDM7XG4mIzQzO0V4YW1wbGUgb3V0cHV0OjpcbiYjNDM7XG4mIzQzOyAgJCBkZXZsaW5rIGRldiBpbmZvIHBjaS8wMDAwOjAwOjA1LjBcbiYjNDM7ICBwY2kvMDAwMDowMDowNS4wOlxuJiM0MzsgICAgZHJpdmVyIHBkc19jb3JlXG4mIzQzOyAgICBzZXJpYWxfbnVtYmVyIEZMTTE4NDIwMDczXG4mIzQzOyAgICB2ZXJzaW9uczpcbiYjNDM7ICAgICAgICBmaXhlZDpcbiYjNDM7ICAgICAgICAgIGFzaWMuaWQgMHgwXG4mIzQzOyAgICAgICAgICBhc2ljLnJldiAweDBcbiYjNDM7ICAgICAgICBydW5uaW5nOlxuJiM0MzsgICAgICAgICAgZncuYm9vdGxvYWRlciAxLjIuM1xuJiM0MzsgICAgICAgICAgZncgMS4zLjBcbiYjNDM7ICAgICAgICAgIGZ3LmNwbGQgMy4xOFxuJiM0MzsgICAgICAgIHN0b3JlZDpcbiYjNDM7ICAgICAgICAgIGZ3LmJvb3Rsb2FkZXIgMS4yLjNcbiYjNDM7ICAgICAgICAgIGZ3LmdvbGQgMS4yLjBcbiYjNDM7ICAgICAgICAgIGZ3IDEuMy4wXG4mIzQzOyAgICAgICAgICBmdy5jcGxkIDMuMThcbiYjNDM7XG4gSGVhbHRoIFJlcG9ydGVyc1xuID09PT09PT09PT09PT09PT1cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9LY29uZmlnXG5pbmRleCBlMzU5OTExNDFhMWEyLi43NDNlM2Q0YjZiOTRlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL0tjb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9LY29uZmlnXG5AQCAtMTcxLDYgJiM0MzsxNzEsNyBAQCBjb25maWcgUERTX0NPUkVcbiBcdGRlcGVuZHMgb24gNjRCSVQgXHUwMDI2XHUwMDI2IFBDSVxuIFx0c2VsZWN0IEFVWElMSUFSWV9CVVNcbiBcdHNlbGVjdCBORVRfREVWTElOS1xuJiM0MztcdHNlbGVjdCBQTERNRldcbiBcdGhlbHBcbiBcdCAgVGhpcyBlbmFibGVzIHRoZSBzdXBwb3J0IGZvciB0aGUgQU1EL1BlbnNhbmRvIENvcmUgZGV2aWNlIGZhbWlseSBvZlxuIFx0ICBhZGFwdGVycy4gIE1vcmUgc3BlY2lmaWMgaW5mb3JtYXRpb24gb24gdGhpcyBkcml2ZXIgY2FuIGJlXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL2NvcmUuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9jb3JlLmNcbmluZGV4IDA0ZWMyNTY5YzYxYzAuLjkyMmUzZWM4YWYxYjkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvY29yZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvY29yZS5jXG5AQCAtNDg5LDYgJiM0Mzs0ODksMTUgQEAgdm9pZCBwZHNjX3RlYXJkb3duKHN0cnVjdCBwZHNjICpwZHNjLCBib29sIHJlbW92aW5nKVxuIFx0XHRwZHNjX2RldmNtZF9yZXNldChwZHNjKTtcbiBcbiBcdHBjaV9jbGVhcl9tYXN0ZXIocGRzYy1cdTAwM2VwZGV2KTtcbiYjNDM7XHRpZiAoIXBkc2MtXHUwMDNlcGRldi1cdTAwM2Vpc192aXJ0Zm4pIHtcbiYjNDM7XHRcdHUxNiB2YWw7XG4mIzQzO1xuJiM0MztcdFx0LyogRmx1c2ggYW55IGluLWZsaWdodCBETUEgYmVmb3JlIGZyZWVpbmcgYnVmZmVycy5cbiYjNDM7XHRcdCAqIEEgY29uZmlnIHJlYWQgY29tcGxldGlvbiBjYW5ub3QgcmV0dXJuIHVudGlsIGFsbCBwcmlvclxuJiM0MztcdFx0ICogZGV2aWNlLWluaXRpYXRlZCBtZW1vcnkgd3JpdGVzIGhhdmUgY29tcGxldGVkLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRwY2lfcmVhZF9jb25maWdfd29yZChwZHNjLVx1MDAzZXBkZXYsIFBDSV9WRU5ET1JfSUQsIFx1MDAyNnZhbCk7XG4mIzQzO1x0fVxuIFxuIFx0cGRzY19jb3JlX3VuaW5pdChwZHNjKTtcbiBcbkBAIC00OTcsNiAmIzQzOzUwNiw4IEBAIHZvaWQgcGRzY190ZWFyZG93bihzdHJ1Y3QgcGRzYyAqcGRzYywgYm9vbCByZW1vdmluZylcbiBcdFx0cGRzYy1cdTAwM2V2aWZ0eXBlX3N0YXR1cyA9IE5VTEw7XG4gXHR9XG4gXG4mIzQzO1x0cGRzY19kZWJ1Z2ZzX2RlbF9ob3N0X21lbShwZHNjKTtcbiYjNDM7XHRwZHNjX2hvc3RfbWVtX2ZyZWUocGRzYyk7XG4gXHRwZHNjX2Rldl91bmluaXQocGRzYyk7XG4gXG4gXHRzZXRfYml0KFBEU0NfU19GV19ERUFELCBcdTAwMjZwZHNjLVx1MDAzZXN0YXRlKTtcbkBAIC01MDYsNiAmIzQzOzUxNyw4IEBAIGludCBwZHNjX3N0YXJ0KHN0cnVjdCBwZHNjICpwZHNjKVxuIHtcbiBcdHBkc19jb3JlX2ludHJfbWFzayhcdTAwMjZwZHNjLVx1MDAzZWludHJfY3RybFtwZHNjLVx1MDAzZWFkbWlucWNxLmludHhdLFxuIFx0XHRcdCAgIFBEU19DT1JFX0lOVFJfTUFTS19DTEVBUik7XG4mIzQzO1x0cGRzY19ob3N0X21lbV9hZGQocGRzYyk7XG4mIzQzO1x0cGRzY19kZWJ1Z2ZzX2FkZF9ob3N0X21lbShwZHNjKTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbkBAIC01ODcsNiAmIzQzOzYwMCw4IEBAIHZvaWQgcGRzY19md191cChzdHJ1Y3QgcGRzYyAqcGRzYylcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuJiM0MztcdHBkc2NfZndfY29tcG9uZW50c19pbnZhbGlkYXRlKHBkc2MpO1xuJiM0MztcbiBcdGVyciA9IHBkc2Nfc2V0dXAocGRzYywgUERTQ19TRVRVUF9SRUNPVkVSWSk7XG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIGVycl9vdXQ7XG5AQCAtNjcwLDMgJiM0Mzs2ODUsMTYxIEBAIHZvaWQgcGRzY19oZWFsdGhfdGhyZWFkKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBvdXRfdW5sb2NrOlxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnBkc2MtXHUwMDNlY29uZmlnX2xvY2spO1xuIH1cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHBkc2NfaG9zdF9tZW1fZGVsX29uZShzdHJ1Y3QgcGRzYyAqcGRzYywgdTE2IHRhZywgdTggcmVhc29uKVxuJiM0Mzt7XG4mIzQzO1x0dW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgY29tcCA9IHt9O1xuJiM0MztcdHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgY21kID0ge1xuJiM0MztcdFx0Lmhvc3RfbWVtLm9wY29kZSA9IFBEU19DT1JFX0NNRF9IT1NUX01FTSxcbiYjNDM7XHRcdC5ob3N0X21lbS5vcGVyID0gUERTX0NPUkVfSE9TVF9NRU1fREVMLFxuJiM0MztcdFx0Lmhvc3RfbWVtLnRhZyA9IGNwdV90b19sZTE2KHRhZyksXG4mIzQzO1x0XHQuaG9zdF9tZW0ucmVhc29uID0gcmVhc29uLFxuJiM0MztcdH07XG4mIzQzO1xuJiM0MztcdGRldl9kYmcocGRzYy1cdTAwM2VkZXYsIFwmIzM0O1NlbmRpbmcgZGV2Y21kIGZvciBtZW0gZGVsIHRhZyAlZFxcblwmIzM0OywgdGFnKTtcbiYjNDM7XHRwZHNjX2RldmNtZChwZHNjLCBcdTAwMjZjbWQsIFx1MDAyNmNvbXAsIHBkc2MtXHUwMDNlZGV2Y21kX3RpbWVvdXQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHBkc2NfaG9zdF9tZW1fYWRkX29uZShzdHJ1Y3QgcGRzYyAqcGRzYywgaW50IGluZGV4KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHBkc2NfaG9zdF9tZW0gKmhtID0gXHUwMDI2cGRzYy1cdTAwM2Vob3N0X21lbV9yZXFzW2luZGV4XTtcbiYjNDM7XHR1bmlvbiBwZHNfY29yZV9kZXZfY29tcCBjb21wID0ge307XG4mIzQzO1x0dW5pb24gcGRzX2NvcmVfZGV2X2NtZCBjbWQgPSB7fTtcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHRjbWQuaG9zdF9tZW0ub3Bjb2RlID0gUERTX0NPUkVfQ01EX0hPU1RfTUVNO1xuJiM0MztcdGNtZC5ob3N0X21lbS5vcGVyID0gUERTX0NPUkVfSE9TVF9NRU1fUVVFUlk7XG4mIzQzO1x0Y21kLmhvc3RfbWVtLmluZGV4ID0gY3B1X3RvX2xlMTYoaW5kZXgpO1xuJiM0MztcdGRldl9kYmcocGRzYy1cdTAwM2VkZXYsIFwmIzM0O1NlbmRpbmcgZGV2Y21kIGZvciBtZW0gcXVlcnkgaW5kZXggJWRcXG5cJiMzNDssIGluZGV4KTtcbiYjNDM7XHRlcnIgPSBwZHNjX2RldmNtZChwZHNjLCBcdTAwMjZjbWQsIFx1MDAyNmNvbXAsIHBkc2MtXHUwMDNlZGV2Y21kX3RpbWVvdXQpO1xuJiM0MztcdGlmIChlcnIgfHwgY29tcC5zdGF0dXMgIT0gUERTX1JDX1NVQ0NFU1MpIHtcbiYjNDM7XHRcdGRldl9lcnIocGRzYy1cdTAwM2VkZXYsIFwmIzM0O21lbSBxdWVyeSBmYWlsZWQgZXJyICVkIHN0YXR1cyAlZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ZXJyLCBjb21wLnN0YXR1cyk7XG4mIzQzO1x0XHRyZXR1cm4gZXJyID8gZXJyIDogLUVJTztcbiYjNDM7XHR9XG4mIzQzO1x0aG0tXHUwMDNlc2l6ZSA9IGxlMzJfdG9fY3B1KGNvbXAuaG9zdF9tZW0uc2l6ZSk7XG4mIzQzO1x0aG0tXHUwMDNldGFnID0gbGUxNl90b19jcHUoY29tcC5ob3N0X21lbS50YWcpO1xuJiM0MztcdGRldl9kYmcocGRzYy1cdTAwM2VkZXYsIFwmIzM0O21lbSBxdWVyeSByZXR1cm5lZCBzaXplICVkIHRhZyAlZFxcblwmIzM0OyxcbiYjNDM7XHRcdGhtLVx1MDAzZXNpemUsIGhtLVx1MDAzZXRhZyk7XG4mIzQzO1xuJiM0MztcdGlmICghaG0tXHUwMDNlc2l6ZSB8fCBobS1cdTAwM2VzaXplIFx1MDAzZSBQRFNDX0hPU1RfTUVNX01BWF9DT05USUcpIHtcbiYjNDM7XHRcdGRldl9lcnIocGRzYy1cdTAwM2VkZXYsIFwmIzM0O2ludmFsaWQgc2l6ZSAlZCBmb3IgdGFnICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRobS1cdTAwM2VzaXplLCBobS1cdTAwM2V0YWcpO1xuJiM0MztcdFx0ZXJyID0gLUVJTlZBTDtcbiYjNDM7XHRcdGdvdG8gZXJyX2RlbDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGhtLVx1MDAzZW9yZGVyID0gZ2V0X29yZGVyKGhtLVx1MDAzZXNpemUpO1xuJiM0MztcdGhtLVx1MDAzZXBnID0gYWxsb2NfcGFnZXMoR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8gfCBfX0dGUF9OT1dBUk4sIGhtLVx1MDAzZW9yZGVyKTtcbiYjNDM7XHRpZiAoIWhtLVx1MDAzZXBnKSB7XG4mIzQzO1x0XHRkZXZfd2FybihwZHNjLVx1MDAzZWRldiwgXCYjMzQ7YWxsb2Mgb3JkZXIgJWQgZmFpbGVkIGZvciB0YWcgJWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCBobS1cdTAwM2VvcmRlciwgaG0tXHUwMDNldGFnKTtcbiYjNDM7XHRcdGVyciA9IC1FTk9NRU07XG4mIzQzO1x0XHRnb3RvIGVycl9kZWw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRobS1cdTAwM2VwYSA9IGRtYV9tYXBfcGFnZShwZHNjLVx1MDAzZWRldiwgaG0tXHUwMDNlcGcsIDAsIGhtLVx1MDAzZXNpemUsXG4mIzQzO1x0XHRcdCAgICAgIERNQV9CSURJUkVDVElPTkFMKTtcbiYjNDM7XHRpZiAoZG1hX21hcHBpbmdfZXJyb3IocGRzYy1cdTAwM2VkZXYsIGhtLVx1MDAzZXBhKSkge1xuJiM0MztcdFx0ZGV2X2VycihwZHNjLVx1MDAzZWRldiwgXCYjMzQ7ZG1hIG1hcCBmYWlsZWQgZm9yIHRhZyAlZCBzaXplICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRobS1cdTAwM2V0YWcsIGhtLVx1MDAzZXNpemUpO1xuJiM0MztcdFx0X19mcmVlX3BhZ2VzKGhtLVx1MDAzZXBnLCBobS1cdTAwM2VvcmRlcik7XG4mIzQzO1x0XHRobS1cdTAwM2VwZyA9IE5VTEw7XG4mIzQzO1x0XHRlcnIgPSAtRUlPO1xuJiM0MztcdFx0Z290byBlcnJfZGVsO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogVHJhY2sgdGhpcyBhbGxvY2F0aW9uIHNvIHBkc2NfaG9zdF9tZW1fZnJlZSgpIGNhbiBjbGVhbiBpdCB1cCAqL1xuJiM0MztcdHBkc2MtXHUwMDNlbnVtX2hvc3RfbWVtX3JlcXMmIzQzOyYjNDM7O1xuJiM0MztcbiYjNDM7XHRtZW1zZXQoXHUwMDI2Y21kLCAwLCBzaXplb2YoY21kKSk7XG4mIzQzO1x0bWVtc2V0KFx1MDAyNmNvbXAsIDAsIHNpemVvZihjb21wKSk7XG4mIzQzO1x0Y21kLmhvc3RfbWVtLm9wY29kZSA9IFBEU19DT1JFX0NNRF9IT1NUX01FTTtcbiYjNDM7XHRjbWQuaG9zdF9tZW0ub3BlciA9IFBEU19DT1JFX0hPU1RfTUVNX0FERDtcbiYjNDM7XHRjbWQuaG9zdF9tZW0udGFnID0gY3B1X3RvX2xlMTYoaG0tXHUwMDNldGFnKTtcbiYjNDM7XHRjbWQuaG9zdF9tZW0uc2l6ZSA9IGNwdV90b19sZTMyKGhtLVx1MDAzZXNpemUpO1xuJiM0MztcdGNtZC5ob3N0X21lbS5idWZfcGEgPSBjcHVfdG9fbGU2NChobS1cdTAwM2VwYSk7XG4mIzQzO1xuJiM0MztcdGRldl9kYmcocGRzYy1cdTAwM2VkZXYsIFwmIzM0O1NlbmRpbmcgZGV2Y21kIGZvciBtZW0gYWRkIHRhZyAlZCBzaXplICVkIHBhICVwYWRcXG5cJiMzNDssXG4mIzQzO1x0XHRobS1cdTAwM2V0YWcsIGhtLVx1MDAzZXNpemUsIFx1MDAyNmhtLVx1MDAzZXBhKTtcbiYjNDM7XHRlcnIgPSBwZHNjX2RldmNtZChwZHNjLCBcdTAwMjZjbWQsIFx1MDAyNmNvbXAsIHBkc2MtXHUwMDNlZGV2Y21kX3RpbWVvdXQpO1xuJiM0MztcdGlmIChlcnIgfHwgY29tcC5zdGF0dXMgIT0gUERTX1JDX1NVQ0NFU1MpIHtcbiYjNDM7XHRcdGRldl9lcnIocGRzYy1cdTAwM2VkZXYsIFwmIzM0O21lbSBhZGQgZmFpbGVkIGVyciAlZCBzdGF0dXMgJWQgZm9yIHRhZyAlZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ZXJyLCBjb21wLnN0YXR1cywgaG0tXHUwMDNldGFnKTtcbiYjNDM7XHRcdGVyciA9IGVyciA/IGVyciA6IC1FSU87XG4mIzQzO1x0XHRnb3RvIGVycl9kZWw7XG4mIzQzO1x0fVxuJiM0MztcdGRldl9kYmcocGRzYy1cdTAwM2VkZXYsIFwmIzM0O21lbSBhZGQgY29tcGxldGVkIGZvciB0YWcgJWRcXG5cJiMzNDssIGhtLVx1MDAzZXRhZyk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7ZXJyX2RlbDpcbiYjNDM7XHQvKiBBZnRlciBNRU1fUVVFUlkgc3VjY2VlZHMsIGZpcm13YXJlIGV4cGVjdHMgTUVNX0FERCBvciBNRU1fREVMICovXG4mIzQzO1x0cGRzY19ob3N0X21lbV9kZWxfb25lKHBkc2MsIGhtLVx1MDAzZXRhZywgUERTX1JDX0VOT01FTSk7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCBwZHNjX2hvc3RfbWVtX2FkZChzdHJ1Y3QgcGRzYyAqcGRzYylcbiYjNDM7e1xuJiM0MztcdHVuaW9uIHBkc19jb3JlX2Rldl9jb21wIGNvbXAgPSB7fTtcbiYjNDM7XHR1bmlvbiBwZHNfY29yZV9kZXZfY21kIGNtZCA9IHt9O1xuJiM0MztcdHUxNiBjb3VudDtcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHRpZiAoIShwZHNjLVx1MDAzZWRldl9pZGVudC5jYXBhYmlsaXRpZXMgXHUwMDI2XG4mIzQzO1x0ICAgICBjcHVfdG9fbGU2NChQRFNfQ09SRV9ERVZfQ0FQX0hPU1RfTUVNKSkpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGNtZC5ob3N0X21lbS5vcGNvZGUgPSBQRFNfQ09SRV9DTURfSE9TVF9NRU07XG4mIzQzO1x0Y21kLmhvc3RfbWVtLm9wZXIgPSBQRFNfQ09SRV9IT1NUX01FTV9HRVRfQ09VTlQ7XG4mIzQzO1x0Y21kLmhvc3RfbWVtLmluZGV4ID0gY3B1X3RvX2xlMTYoUERTQ19IT1NUX01FTV9NQVhfQ09VTlQpO1xuJiM0MztcdGNtZC5ob3N0X21lbS5tYXhfY29udGlnID0gY3B1X3RvX2xlMzIoUERTQ19IT1NUX01FTV9NQVhfQ09OVElHKTtcbiYjNDM7XHRkZXZfZGJnKHBkc2MtXHUwMDNlZGV2LCBcJiMzNDtTZW5kaW5nIGRldmNtZCBmb3IgbWVtIGdldCBjb3VudCBtYXhfY29udGlnICV1XFxuXCYjMzQ7LFxuJiM0MztcdFx0UERTQ19IT1NUX01FTV9NQVhfQ09OVElHKTtcbiYjNDM7XHRlcnIgPSBwZHNjX2RldmNtZChwZHNjLCBcdTAwMjZjbWQsIFx1MDAyNmNvbXAsIHBkc2MtXHUwMDNlZGV2Y21kX3RpbWVvdXQpO1xuJiM0MztcdGlmIChlcnIgfHwgY29tcC5zdGF0dXMgIT0gUERTX1JDX1NVQ0NFU1MpIHtcbiYjNDM7XHRcdGRldl9lcnIocGRzYy1cdTAwM2VkZXYsIFwmIzM0O21lbSBnZXQgY291bnQgZmFpbGVkIGVyciAlZCBzdGF0dXMgJWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdGVyciwgY29tcC5zdGF0dXMpO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Y291bnQgPSBtaW4obGUxNl90b19jcHUoY29tcC5ob3N0X21lbS5jb3VudCksXG4mIzQzO1x0XHQgICAgUERTQ19IT1NUX01FTV9NQVhfQ09VTlQpO1xuJiM0MztcdGRldl9kYmcocGRzYy1cdTAwM2VkZXYsIFwmIzM0O21lbSBnZXQgY291bnQgcmV0dXJuZWQgY291bnQgJWRcXG5cJiMzNDssIGNvdW50KTtcbiYjNDM7XHRpZiAoY291bnQgPT0gMClcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0cGRzYy1cdTAwM2Vob3N0X21lbV9yZXFzID0ga3phbGxvY19vYmpzKCpwZHNjLVx1MDAzZWhvc3RfbWVtX3JlcXMsIGNvdW50LFxuJiM0MztcdFx0XHRcdFx0ICAgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCFwZHNjLVx1MDAzZWhvc3RfbWVtX3JlcXMpIHtcbiYjNDM7XHRcdGRldl9lcnIocGRzYy1cdTAwM2VkZXYsIFwmIzM0O2ZhaWxlZCB0byBhbGxvYyBob3N0X21lbV9yZXFzIGFycmF5XFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNvdW50OyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0ZXJyID0gcGRzY19ob3N0X21lbV9hZGRfb25lKHBkc2MsIGkpO1xuJiM0MztcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIHBkc2NfaG9zdF9tZW1fZnJlZShzdHJ1Y3QgcGRzYyAqcGRzYylcbiYjNDM7e1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHRpZiAoIXBkc2MtXHUwMDNlaG9zdF9tZW1fcmVxcylcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgcGRzYy1cdTAwM2VudW1faG9zdF9tZW1fcmVxczsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGRtYV91bm1hcF9wYWdlKHBkc2MtXHUwMDNlZGV2LCBwZHNjLVx1MDAzZWhvc3RfbWVtX3JlcXNbaV0ucGEsXG4mIzQzO1x0XHRcdCAgICAgICBwZHNjLVx1MDAzZWhvc3RfbWVtX3JlcXNbaV0uc2l6ZSxcbiYjNDM7XHRcdFx0ICAgICAgIERNQV9CSURJUkVDVElPTkFMKTtcbiYjNDM7XHRcdF9fZnJlZV9wYWdlcyhwZHNjLVx1MDAzZWhvc3RfbWVtX3JlcXNbaV0ucGcsXG4mIzQzO1x0XHRcdCAgICAgcGRzYy1cdTAwM2Vob3N0X21lbV9yZXFzW2ldLm9yZGVyKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGtmcmVlKHBkc2MtXHUwMDNlaG9zdF9tZW1fcmVxcyk7XG4mIzQzO1x0cGRzYy1cdTAwM2Vob3N0X21lbV9yZXFzID0gTlVMTDtcbiYjNDM7XHRwZHNjLVx1MDAzZW51bV9ob3N0X21lbV9yZXFzID0gMDtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9jb3JlLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvY29yZS5oXG5pbmRleCBiN2ZlOWFkNzMzNDk4Li43OTE3NTZhNTA4NzBlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL2NvcmUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL2NvcmUuaFxuQEAgLTUsNiAmIzQzOzUsNyBAQFxuICNkZWZpbmUgX1BEU0NfSF9cbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kZWJ1Z2ZzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbW16b25lLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvZGV2bGluay5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGRzL3Bkc19jb21tb24uaFx1MDAzZVxuQEAgLTIzLDYgJiM0MzsyNCwyMCBAQFxuICNkZWZpbmUgUERTQ19TRVRVUF9SRUNPVkVSWVx0ZmFsc2VcbiAjZGVmaW5lIFBEU0NfU0VUVVBfSU5JVFx0XHR0cnVlXG4gXG4mIzQzOy8qIFVzZSBmaXhlZCA0TUIgaW5zdGVhZCBvZiBQQUdFX1NJWkUgXHUwMDNjXHUwMDNjIE1BWF9QQUdFX09SREVSIHRvIGF2b2lkXG4mIzQzOyAqIGNwdV90b19sZTMyKCkgdHJ1bmNhdGlvbiBvbiBsYXJnZS1wYWdlIGNvbmZpZ3NcbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgUERTQ19IT1NUX01FTV9NQVhfQ09OVElHICg0ICogMTAyNCAqIDEwMjQpXG4mIzQzOyNkZWZpbmUgUERTQ19IT1NUX01FTV9NQVhfQ09VTlQgIDI1NlxuJiM0MztcbiYjNDM7c3RydWN0IHBkc2NfZGVmZXJyZWRfZG1hIHtcbiYjNDM7XHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XG4mIzQzO1x0ZG1hX2FkZHJfdCBkbWFfYWRkcjtcbiYjNDM7XHR2b2lkICp2YTtcbiYjNDM7XHRzaXplX3Qgc2l6ZTtcbiYjNDM7XHRlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXI7XG4mIzQzO307XG4mIzQzO1xuIHN0cnVjdCBwZHNjX2Rldl9iYXIge1xuIFx0dm9pZCBfX2lvbWVtICp2YWRkcjtcbiBcdHBoeXNfYWRkcl90IGJ1c19hZGRyO1xuQEAgLTE0MSw2ICYjNDM7MTU2LDE0IEBAIHN0cnVjdCBwZHNjX3ZpZnR5cGUge1xuIFx0c3RydWN0IHBkc19hdXhpbGlhcnlfZGV2ICpwYWRldjtcbiB9O1xuIFxuJiM0MztzdHJ1Y3QgcGRzY19ob3N0X21lbSB7XG4mIzQzO1x0dTMyIHNpemU7XG4mIzQzO1x0dTE2IHRhZztcbiYjNDM7XHR1OCBvcmRlcjtcbiYjNDM7XHRzdHJ1Y3QgcGFnZSAqcGc7XG4mIzQzO1x0ZG1hX2FkZHJfdCBwYTtcbiYjNDM7fTtcbiYjNDM7XG4gLyogTm8gc3RhdGUgZmxhZ3Mgc2V0IG1lYW5zIHdlIGFyZSBpbiBhIHN0ZWFkeSBydW5uaW5nIHN0YXRlICovXG4gZW51bSBwZHNjX3N0YXRlX2ZsYWdzIHtcbiBcdFBEU0NfU19GV19ERUFELFx0XHQgICAgLyogc3RvcHBlZCwgd2FpdCBvbiBzdGFydHVwIG9yIHJlY292ZXJ5ICovXG5AQCAtMTg1LDYgJiM0MzsyMDgsOCBAQCBzdHJ1Y3QgcGRzYyB7XG4gXHRzdHJ1Y3QgbXV0ZXggZGV2Y21kX2xvY2s7XHQvKiBsb2NrIGZvciBkZXZfY21kIG9wZXJhdGlvbnMgKi9cbiBcdHN0cnVjdCBtdXRleCBjb25maWdfbG9jaztcdC8qIGxvY2sgZm9yIGNvbmZpZ3VyYXRpb24gb3BlcmF0aW9ucyAqL1xuIFx0c3BpbmxvY2tfdCBhZG1pbnFfbG9jaztcdFx0LyogbG9jayBmb3IgYWRtaW5xIG9wZXJhdGlvbnMgKi9cbiYjNDM7XHRzdHJ1Y3QgbGlzdF9oZWFkIGRlZmVycmVkX2RtYV9saXN0O1xuJiM0MztcdHNwaW5sb2NrX3QgZGVmZXJyZWRfZG1hX2xvY2s7XHQvKiBsb2NrIGZvciBkZWZlcnJlZCBETUEgbGlzdCAqL1xuIFx0cmVmY291bnRfdCBhZG1pbnFfcmVmY250O1xuIFx0c3RydWN0IHBkc19jb3JlX2Rldl9pbmZvX3JlZ3MgX19pb21lbSAqaW5mb19yZWdzO1xuIFx0c3RydWN0IHBkc19jb3JlX2Rldl9jbWRfcmVncyBfX2lvbWVtICpjbWRfcmVncztcbkBAIC0xOTksNiAmIzQzOzIyNCwxMSBAQCBzdHJ1Y3QgcGRzYyB7XG4gXHR1NjQgbGFzdF9laWQ7XG4gXHRzdHJ1Y3QgcGRzY192aWZ0eXBlICp2aWZ0eXBlX3N0YXR1cztcbiBcdHN0cnVjdCB3b3JrX3N0cnVjdCBwY2lfcmVzZXRfd29yaztcbiYjNDM7XG4mIzQzO1x0c3RydWN0IHBkc2NfaG9zdF9tZW0gKmhvc3RfbWVtX3JlcXM7XG4mIzQzO1x0dTE2IG51bV9ob3N0X21lbV9yZXFzO1xuJiM0MztcbiYjNDM7XHRzdHJ1Y3QgcGRzX2NvcmVfY29tcG9uZW50X2xpc3RfaW5mbyBmd19jb21wb25lbnRzO1xuIH07XG4gXG4gLyoqIGVudW0gcGRzX2NvcmVfZGJlbGxfYml0cyAtIGJpdHdpc2UgY29tcG9zaXRpb24gb2YgZGJlbGwgdmFsdWVzLlxuQEAgLTI3NSwxNCAmIzQzOzMwNSwyNCBAQCB2b2lkIHBkc2NfZGVidWdmc19hZGRfdmlmdHlwZShzdHJ1Y3QgcGRzYyAqcGRzYyk7XG4gdm9pZCBwZHNjX2RlYnVnZnNfYWRkX2lycXMoc3RydWN0IHBkc2MgKnBkc2MpO1xuIHZvaWQgcGRzY19kZWJ1Z2ZzX2FkZF9xY3Eoc3RydWN0IHBkc2MgKnBkc2MsIHN0cnVjdCBwZHNjX3FjcSAqcWNxKTtcbiB2b2lkIHBkc2NfZGVidWdmc19kZWxfcWNxKHN0cnVjdCBwZHNjX3FjcSAqcWNxKTtcbiYjNDM7dm9pZCBwZHNjX2RlYnVnZnNfYWRkX2hvc3RfbWVtKHN0cnVjdCBwZHNjICpwZHNjKTtcbiYjNDM7dm9pZCBwZHNjX2RlYnVnZnNfZGVsX2hvc3RfbWVtKHN0cnVjdCBwZHNjICpwZHNjKTtcbiBcbiBpbnQgcGRzY19lcnJfdG9fZXJybm8oZW51bSBwZHNfY29yZV9zdGF0dXNfY29kZSBjb2RlKTtcbiBib29sIHBkc2NfaXNfZndfcnVubmluZyhzdHJ1Y3QgcGRzYyAqcGRzYyk7XG4gYm9vbCBwZHNjX2lzX2Z3X2dvb2Qoc3RydWN0IHBkc2MgKnBkc2MpO1xuIGludCBwZHNjX2RldmNtZChzdHJ1Y3QgcGRzYyAqcGRzYywgdW5pb24gcGRzX2NvcmVfZGV2X2NtZCAqY21kLFxuIFx0XHR1bmlvbiBwZHNfY29yZV9kZXZfY29tcCAqY29tcCwgaW50IG1heF9zZWNvbmRzKTtcbiYjNDM7aW50IHBkc2NfZGV2Y21kX3dpdGhfZGF0YShzdHJ1Y3QgcGRzYyAqcGRzYywgdW5pb24gcGRzX2NvcmVfZGV2X2NtZCAqY21kLFxuJiM0MztcdFx0XHQgIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBkYXRhX2xlbixcbiYjNDM7XHRcdFx0ICB1bmlvbiBwZHNfY29yZV9kZXZfY29tcCAqY29tcCwgaW50IG1heF9zZWNvbmRzKTtcbiYjNDM7aW50IHBkc2NfZGV2Y21kX3dpdGhfZGF0YV9ub21zZyhzdHJ1Y3QgcGRzYyAqcGRzYywgdW5pb24gcGRzX2NvcmVfZGV2X2NtZCAqY21kLFxuJiM0MztcdFx0XHRcdGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBkYXRhX2xlbixcbiYjNDM7XHRcdFx0XHR1bmlvbiBwZHNfY29yZV9kZXZfY29tcCAqY29tcCwgaW50IG1heF9zZWNvbmRzKTtcbiBpbnQgcGRzY19kZXZjbWRfbG9ja2VkKHN0cnVjdCBwZHNjICpwZHNjLCB1bmlvbiBwZHNfY29yZV9kZXZfY21kICpjbWQsXG4gXHRcdCAgICAgICB1bmlvbiBwZHNfY29yZV9kZXZfY29tcCAqY29tcCwgaW50IG1heF9zZWNvbmRzKTtcbiYjNDM7aW50IHBkc2NfZGV2Y21kX2xvY2tlZF9ub21zZyhzdHJ1Y3QgcGRzYyAqcGRzYywgdW5pb24gcGRzX2NvcmVfZGV2X2NtZCAqY21kLFxuJiM0MztcdFx0XHQgICAgIHVuaW9uIHBkc19jb3JlX2Rldl9jb21wICpjb21wLCBpbnQgbWF4X3NlY29uZHMpO1xuIGludCBwZHNjX2RldmNtZF9pbml0KHN0cnVjdCBwZHNjICpwZHNjKTtcbiBpbnQgcGRzY19kZXZjbWRfcmVzZXQoc3RydWN0IHBkc2MgKnBkc2MpO1xuIGludCBwZHNjX2Rldl9pbml0KHN0cnVjdCBwZHNjICpwZHNjKTtcbkBAIC0zMTUsMTEgJiM0MzszNTUsMjMgQEAgdm9pZCBwZHNjX3Byb2Nlc3NfYWRtaW5xKHN0cnVjdCBwZHNjX3FjcSAqcWNxKTtcbiB2b2lkIHBkc2Nfd29ya190aHJlYWQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcbiBpcnFyZXR1cm5fdCBwZHNjX2FkbWlucV9pc3IoaW50IGlycSwgdm9pZCAqZGF0YSk7XG4gXG4taW50IHBkc2NfZmlybXdhcmVfdXBkYXRlKHN0cnVjdCBwZHNjICpwZHNjLCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3LFxuJiM0MztpbnQgcGRzY19maXJtd2FyZV91cGRhdGUoc3RydWN0IHBkc2MgKnBkc2MsXG4mIzQzO1x0XHRcdCBzdHJ1Y3QgZGV2bGlua19mbGFzaF91cGRhdGVfcGFyYW1zICpwYXJhbXMsXG4gXHRcdFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG4mIzQzO2ludCBwZHNjX2dldF9jb21wb25lbnRfaW5mbyhzdHJ1Y3QgcGRzYyAqcGRzYyk7XG4mIzQzO2NvbnN0IGNoYXIgKnBkc2NfZndfdHlwZV90b19uYW1lKHU4IHR5cGUpO1xuJiM0Mzt2b2lkIHBkc2NfZndfY29tcG9uZW50c19pbnZhbGlkYXRlKHN0cnVjdCBwZHNjICpwZHNjKTtcbiBcbiB2b2lkIHBkc2NfZndfZG93bihzdHJ1Y3QgcGRzYyAqcGRzYyk7XG4gdm9pZCBwZHNjX2Z3X3VwKHN0cnVjdCBwZHNjICpwZHNjKTtcbiB2b2lkIHBkc2NfcGNpX3Jlc2V0X3RocmVhZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xuIFxuJiM0Mzt2b2lkIHBkc2NfaG9zdF9tZW1fYWRkKHN0cnVjdCBwZHNjICpwZHNjKTtcbiYjNDM7dm9pZCBwZHNjX2hvc3RfbWVtX2ZyZWUoc3RydWN0IHBkc2MgKnBkc2MpO1xuJiM0MztcbiYjNDM7dm9pZCBwZHNjX2RlZmVycmVkX2RtYV9hZGQoc3RydWN0IHBkc2MgKnBkc2MsIHN0cnVjdCBwZHNjX2RlZmVycmVkX2RtYSAqZW50cnksXG4mIzQzO1x0XHRcdCAgIGRtYV9hZGRyX3QgZG1hX2FkZHIsIHZvaWQgKnZhLCBzaXplX3Qgc2l6ZSxcbiYjNDM7XHRcdFx0ICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKTtcbiYjNDM7dm9pZCBwZHNjX2RlZmVycmVkX2RtYV9mcmVlKHN0cnVjdCBwZHNjICpwZHNjKTtcbiYjNDM7XG4gI2VuZGlmIC8qIF9QRFNDX0hfICovXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL2RlYnVnZnMuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9kZWJ1Z2ZzLmNcbmluZGV4IDgxMGEwY2Q5YmNhYzguLmVmMGExYjdkMTU5YjUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvZGVidWdmcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvZGVidWdmcy5jXG5AQCAtMTc4LDMgJiM0MzsxNzgsNDggQEAgdm9pZCBwZHNjX2RlYnVnZnNfZGVsX3FjcShzdHJ1Y3QgcGRzY19xY3EgKnFjcSlcbiBcdGRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZShxY3EtXHUwMDNlZGVudHJ5KTtcbiBcdHFjcS1cdTAwM2VkZW50cnkgPSBOVUxMO1xuIH1cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgaG9zdF9tZW1fc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwZHNjICpwZHNjID0gc2VxLVx1MDAzZXByaXZhdGU7XG4mIzQzO1x0c3RydWN0IHBkc2NfaG9zdF9tZW0gKmhtO1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHRpZiAoIXBkc2MtXHUwMDNlaG9zdF9tZW1fcmVxcyB8fCBwZHNjLVx1MDAzZW51bV9ob3N0X21lbV9yZXFzID09IDApIHtcbiYjNDM7XHRcdHNlcV9wdXRzKHNlcSwgXCYjMzQ7Tm8gaG9zdCBtZW1vcnkgYWxsb2NhdGVkXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0c2VxX3ByaW50ZihzZXEsIFwmIzM0O0hvc3QgbWVtb3J5IHJlcXVlc3RzOiAldVxcblxcblwmIzM0OyxcbiYjNDM7XHRcdCAgIHBkc2MtXHUwMDNlbnVtX2hvc3RfbWVtX3JlcXMpO1xuJiM0MztcdHNlcV9wdXRzKHNlcSwgXCYjMzQ7VGFnICAgIFNpemUgICAgICAgICBPcmRlciAgUEFcXG5cJiMzNDspO1xuJiM0MztcdHNlcV9wdXRzKHNlcSwgXCYjMzQ7LS0tICAgIC0tLS0gICAgICAgICAtLS0tLSAgLS1cXG5cJiMzNDspO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBwZHNjLVx1MDAzZW51bV9ob3N0X21lbV9yZXFzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aG0gPSBcdTAwMjZwZHNjLVx1MDAzZWhvc3RfbWVtX3JlcXNbaV07XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFobS1cdTAwM2VwZylcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0c2VxX3ByaW50ZihzZXEsIFwmIzM0OyUtNnUgJS0xMnUgJS02dSAlcGFkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgICBobS1cdTAwM2V0YWcsIGhtLVx1MDAzZXNpemUsIGhtLVx1MDAzZW9yZGVyLCBcdTAwMjZobS1cdTAwM2VwYSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztERUZJTkVfU0hPV19BVFRSSUJVVEUoaG9zdF9tZW0pO1xuJiM0MztcbiYjNDM7dm9pZCBwZHNjX2RlYnVnZnNfYWRkX2hvc3RfbWVtKHN0cnVjdCBwZHNjICpwZHNjKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCEocGRzYy1cdTAwM2VkZXZfaWRlbnQuY2FwYWJpbGl0aWVzIFx1MDAyNlxuJiM0MztcdCAgICAgY3B1X3RvX2xlNjQoUERTX0NPUkVfREVWX0NBUF9IT1NUX01FTSkpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlKFwmIzM0O2hvc3RfbWVtXCYjMzQ7LCAwNDAwLCBwZHNjLVx1MDAzZWRlbnRyeSxcbiYjNDM7XHRcdFx0ICAgIHBkc2MsIFx1MDAyNmhvc3RfbWVtX2ZvcHMpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIHBkc2NfZGVidWdmc19kZWxfaG9zdF9tZW0oc3RydWN0IHBkc2MgKnBkc2MpXG4mIzQzO3tcbiYjNDM7XHRkZWJ1Z2ZzX2xvb2t1cF9hbmRfcmVtb3ZlKFwmIzM0O2hvc3RfbWVtXCYjMzQ7LCBwZHNjLVx1MDAzZWRlbnRyeSk7XG4mIzQzO31cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvZGV2LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvZGV2LmNcbmluZGV4IGJkZWQ2YjMzMjg5Y2UuLmM1MDc3ODE3NWUyZjMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvZGV2LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9kZXYuY1xuQEAgLTEyNiw3ICYjNDM7MTI2LDggQEAgc3RhdGljIGNvbnN0IGNoYXIgKnBkc2NfZGV2Y21kX3N0cihpbnQgb3Bjb2RlKVxuIFx0fVxuIH1cbiBcbi1zdGF0aWMgaW50IHBkc2NfZGV2Y21kX3dhaXQoc3RydWN0IHBkc2MgKnBkc2MsIHU4IG9wY29kZSwgaW50IG1heF9zZWNvbmRzKVxuJiM0MztzdGF0aWMgaW50IF9fcGRzY19kZXZjbWRfd2FpdChzdHJ1Y3QgcGRzYyAqcGRzYywgdTggb3Bjb2RlLCBpbnQgbWF4X3NlY29uZHMsXG4mIzQzO1x0XHRcdCAgICAgIGNvbnN0IGJvb2wgZG9fbXNnKVxuIHtcbiBcdHN0cnVjdCBkZXZpY2UgKmRldiA9IHBkc2MtXHUwMDNlZGV2O1xuIFx0dW5zaWduZWQgbG9uZyBzdGFydF90aW1lO1xuQEAgLTE3OSw3ICYjNDM7MTgwLDcgQEAgc3RhdGljIGludCBwZHNjX2RldmNtZF93YWl0KHN0cnVjdCBwZHNjICpwZHNjLCB1OCBvcGNvZGUsIGludCBtYXhfc2Vjb25kcylcbiBcbiBcdHN0YXR1cyA9IHBkc2NfZGV2Y21kX3N0YXR1cyhwZHNjKTtcbiBcdGVyciA9IHBkc2NfZXJyX3RvX2Vycm5vKHN0YXR1cyk7XG4tXHRpZiAoZXJyIFx1MDAyNlx1MDAyNiBlcnIgIT0gLUVBR0FJTilcbiYjNDM7XHRpZiAoZG9fbXNnIFx1MDAyNlx1MDAyNiBlcnIgXHUwMDI2XHUwMDI2IGVyciAhPSAtRUFHQUlOKVxuIFx0XHRkZXZfZXJyKGRldiwgXCYjMzQ7REVWQ01EICVkICVzIGZhaWxlZCwgc3RhdHVzPSVkIGVyciAlZCAlcGVcXG5cJiMzNDssXG4gXHRcdFx0b3Bjb2RlLCBwZHNjX2RldmNtZF9zdHIob3Bjb2RlKSwgc3RhdHVzLCBlcnIsXG4gXHRcdFx0RVJSX1BUUihlcnIpKTtcbkBAIC0xODcsOCAmIzQzOzE4OCw5IEBAIHN0YXRpYyBpbnQgcGRzY19kZXZjbWRfd2FpdChzdHJ1Y3QgcGRzYyAqcGRzYywgdTggb3Bjb2RlLCBpbnQgbWF4X3NlY29uZHMpXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbi1pbnQgcGRzY19kZXZjbWRfbG9ja2VkKHN0cnVjdCBwZHNjICpwZHNjLCB1bmlvbiBwZHNfY29yZV9kZXZfY21kICpjbWQsXG4tXHRcdCAgICAgICB1bmlvbiBwZHNfY29yZV9kZXZfY29tcCAqY29tcCwgaW50IG1heF9zZWNvbmRzKVxuJiM0MztzdGF0aWMgaW50IF9fcGRzY19kZXZjbWRfbG9ja2VkKHN0cnVjdCBwZHNjICpwZHNjLCB1bmlvbiBwZHNfY29yZV9kZXZfY21kICpjbWQsXG4mIzQzO1x0XHRcdFx0dW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgKmNvbXAsIGludCBtYXhfc2Vjb25kcyxcbiYjNDM7XHRcdFx0XHRjb25zdCBib29sIGRvX21zZylcbiB7XG4gXHRpbnQgZXJyO1xuIFxuQEAgLTE5NywxNiAmIzQzOzE5OSw2MyBAQCBpbnQgcGRzY19kZXZjbWRfbG9ja2VkKHN0cnVjdCBwZHNjICpwZHNjLCB1bmlvbiBwZHNfY29yZV9kZXZfY21kICpjbWQsXG4gXG4gXHRtZW1jcHlfdG9pbyhcdTAwMjZwZHNjLVx1MDAzZWNtZF9yZWdzLVx1MDAzZWNtZCwgY21kLCBzaXplb2YoKmNtZCkpO1xuIFx0cGRzY19kZXZjbWRfZGJlbGwocGRzYyk7XG4tXHRlcnIgPSBwZHNjX2RldmNtZF93YWl0KHBkc2MsIGNtZC1cdTAwM2VvcGNvZGUsIG1heF9zZWNvbmRzKTtcbiYjNDM7XHRlcnIgPSBfX3Bkc2NfZGV2Y21kX3dhaXQocGRzYywgY21kLVx1MDAzZW9wY29kZSwgbWF4X3NlY29uZHMsIGRvX21zZyk7XG4gXG4gXHRpZiAoKGVyciA9PSAtRU5YSU8gfHwgZXJyID09IC1FVElNRURPVVQpIFx1MDAyNlx1MDAyNiBwZHNjLVx1MDAzZXdxKVxuIFx0XHRxdWV1ZV93b3JrKHBkc2MtXHUwMDNld3EsIFx1MDAyNnBkc2MtXHUwMDNlaGVhbHRoX3dvcmspO1xuIFx0ZWxzZVxuIFx0XHRtZW1jcHlfZnJvbWlvKGNvbXAsIFx1MDAyNnBkc2MtXHUwMDNlY21kX3JlZ3MtXHUwMDNlY29tcCwgc2l6ZW9mKCpjb21wKSk7XG4gXG4mIzQzO1x0aWYgKGVyciAhPSAtRVRJTUVET1VUIFx1MDAyNlx1MDAyNiBlcnIgIT0gLUVBR0FJTilcbiYjNDM7XHRcdHBkc2NfZGVmZXJyZWRfZG1hX2ZyZWUocGRzYyk7XG4mIzQzO1xuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4mIzQzO3ZvaWQgcGRzY19kZWZlcnJlZF9kbWFfYWRkKHN0cnVjdCBwZHNjICpwZHNjLCBzdHJ1Y3QgcGRzY19kZWZlcnJlZF9kbWEgKmVudHJ5LFxuJiM0MztcdFx0XHQgICBkbWFfYWRkcl90IGRtYV9hZGRyLCB2b2lkICp2YSwgc2l6ZV90IHNpemUsXG4mIzQzO1x0XHRcdCAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcilcbiYjNDM7e1xuJiM0MztcdGVudHJ5LVx1MDAzZWRtYV9hZGRyID0gZG1hX2FkZHI7XG4mIzQzO1x0ZW50cnktXHUwMDNldmEgPSB2YTtcbiYjNDM7XHRlbnRyeS1cdTAwM2VzaXplID0gc2l6ZTtcbiYjNDM7XHRlbnRyeS1cdTAwM2VkaXIgPSBkaXI7XG4mIzQzO1xuJiM0MztcdHNwaW5fbG9jayhcdTAwMjZwZHNjLVx1MDAzZWRlZmVycmVkX2RtYV9sb2NrKTtcbiYjNDM7XHRsaXN0X2FkZF90YWlsKFx1MDAyNmVudHJ5LVx1MDAzZWxpc3QsIFx1MDAyNnBkc2MtXHUwMDNlZGVmZXJyZWRfZG1hX2xpc3QpO1xuJiM0MztcdHNwaW5fdW5sb2NrKFx1MDAyNnBkc2MtXHUwMDNlZGVmZXJyZWRfZG1hX2xvY2spO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIHBkc2NfZGVmZXJyZWRfZG1hX2ZyZWUoc3RydWN0IHBkc2MgKnBkc2MpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcGRzY19kZWZlcnJlZF9kbWEgKmVudHJ5LCAqdG1wO1xuJiM0MztcdExJU1RfSEVBRChsb2NhbF9saXN0KTtcbiYjNDM7XG4mIzQzO1x0c3Bpbl9sb2NrKFx1MDAyNnBkc2MtXHUwMDNlZGVmZXJyZWRfZG1hX2xvY2spO1xuJiM0MztcdGxpc3Rfc3BsaWNlX2luaXQoXHUwMDI2cGRzYy1cdTAwM2VkZWZlcnJlZF9kbWFfbGlzdCwgXHUwMDI2bG9jYWxfbGlzdCk7XG4mIzQzO1x0c3Bpbl91bmxvY2soXHUwMDI2cGRzYy1cdTAwM2VkZWZlcnJlZF9kbWFfbG9jayk7XG4mIzQzO1xuJiM0MztcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShlbnRyeSwgdG1wLCBcdTAwMjZsb2NhbF9saXN0LCBsaXN0KSB7XG4mIzQzO1x0XHRkbWFfdW5tYXBfc2luZ2xlKHBkc2MtXHUwMDNlZGV2LCBlbnRyeS1cdTAwM2VkbWFfYWRkcixcbiYjNDM7XHRcdFx0XHQgZW50cnktXHUwMDNlc2l6ZSwgZW50cnktXHUwMDNlZGlyKTtcbiYjNDM7XHRcdGtmcmVlKGVudHJ5LVx1MDAzZXZhKTtcbiYjNDM7XHRcdGxpc3RfZGVsKFx1MDAyNmVudHJ5LVx1MDAzZWxpc3QpO1xuJiM0MztcdFx0a2ZyZWUoZW50cnkpO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IHBkc2NfZGV2Y21kX2xvY2tlZChzdHJ1Y3QgcGRzYyAqcGRzYywgdW5pb24gcGRzX2NvcmVfZGV2X2NtZCAqY21kLFxuJiM0MztcdFx0ICAgICAgIHVuaW9uIHBkc19jb3JlX2Rldl9jb21wICpjb21wLCBpbnQgbWF4X3NlY29uZHMpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gX19wZHNjX2RldmNtZF9sb2NrZWQocGRzYywgY21kLCBjb21wLCBtYXhfc2Vjb25kcywgdHJ1ZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBwZHNjX2RldmNtZF9sb2NrZWRfbm9tc2coc3RydWN0IHBkc2MgKnBkc2MsIHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgKmNtZCxcbiYjNDM7XHRcdFx0ICAgICB1bmlvbiBwZHNfY29yZV9kZXZfY29tcCAqY29tcCwgaW50IG1heF9zZWNvbmRzKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIF9fcGRzY19kZXZjbWRfbG9ja2VkKHBkc2MsIGNtZCwgY29tcCwgbWF4X3NlY29uZHMsIGZhbHNlKTtcbiYjNDM7fVxuJiM0MztcbiBpbnQgcGRzY19kZXZjbWQoc3RydWN0IHBkc2MgKnBkc2MsIHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgKmNtZCxcbiBcdFx0dW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgKmNvbXAsIGludCBtYXhfc2Vjb25kcylcbiB7XG5AQCAtMjE5LDYgJiM0MzsyNjgsNDcgQEAgaW50IHBkc2NfZGV2Y21kKHN0cnVjdCBwZHNjICpwZHNjLCB1bmlvbiBwZHNfY29yZV9kZXZfY21kICpjbWQsXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBfX3Bkc2NfZGV2Y21kX3dpdGhfZGF0YShzdHJ1Y3QgcGRzYyAqcGRzYyxcbiYjNDM7XHRcdFx0XHQgICB1bmlvbiBwZHNfY29yZV9kZXZfY21kICpjbWQsXG4mIzQzO1x0XHRcdFx0ICAgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGRhdGFfbGVuLFxuJiM0MztcdFx0XHRcdCAgIHVuaW9uIHBkc19jb3JlX2Rldl9jb21wICpjb21wLFxuJiM0MztcdFx0XHRcdCAgIGludCBtYXhfc2Vjb25kcywgYm9vbCBkb19tc2cpXG4mIzQzO3tcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNnBkc2MtXHUwMDNlZGV2Y21kX2xvY2spO1xuJiM0MztcdGlmICghcGRzYy1cdTAwM2VjbWRfcmVncykge1xuJiM0MztcdFx0ZXJyID0gLUVOWElPO1xuJiM0MztcdFx0Z290byB1bmxvY2s7XG4mIzQzO1x0fVxuJiM0MztcdGlmIChkYXRhX2xlbiBcdTAwM2Ugc2l6ZW9mKHBkc2MtXHUwMDNlY21kX3JlZ3MtXHUwMDNlZGF0YSkpIHtcbiYjNDM7XHRcdGVyciA9IC1FTk9TUEM7XG4mIzQzO1x0XHRnb3RvIHVubG9jaztcbiYjNDM7XHR9XG4mIzQzO1x0bWVtY3B5X3RvaW8oXHUwMDI2cGRzYy1cdTAwM2VjbWRfcmVncy1cdTAwM2VkYXRhLCBkYXRhLCBkYXRhX2xlbik7XG4mIzQzO1x0ZXJyID0gX19wZHNjX2RldmNtZF9sb2NrZWQocGRzYywgY21kLCBjb21wLCBtYXhfc2Vjb25kcywgZG9fbXNnKTtcbiYjNDM7dW5sb2NrOlxuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZwZHNjLVx1MDAzZWRldmNtZF9sb2NrKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IHBkc2NfZGV2Y21kX3dpdGhfZGF0YShzdHJ1Y3QgcGRzYyAqcGRzYywgdW5pb24gcGRzX2NvcmVfZGV2X2NtZCAqY21kLFxuJiM0MztcdFx0XHQgIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBkYXRhX2xlbixcbiYjNDM7XHRcdFx0ICB1bmlvbiBwZHNfY29yZV9kZXZfY29tcCAqY29tcCwgaW50IG1heF9zZWNvbmRzKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIF9fcGRzY19kZXZjbWRfd2l0aF9kYXRhKHBkc2MsIGNtZCwgZGF0YSwgZGF0YV9sZW4sXG4mIzQzO1x0XHRcdFx0ICAgICAgIGNvbXAsIG1heF9zZWNvbmRzLCB0cnVlKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IHBkc2NfZGV2Y21kX3dpdGhfZGF0YV9ub21zZyhzdHJ1Y3QgcGRzYyAqcGRzYywgdW5pb24gcGRzX2NvcmVfZGV2X2NtZCAqY21kLFxuJiM0MztcdFx0XHRcdGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBkYXRhX2xlbixcbiYjNDM7XHRcdFx0XHR1bmlvbiBwZHNfY29yZV9kZXZfY29tcCAqY29tcCwgaW50IG1heF9zZWNvbmRzKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIF9fcGRzY19kZXZjbWRfd2l0aF9kYXRhKHBkc2MsIGNtZCwgZGF0YSwgZGF0YV9sZW4sXG4mIzQzO1x0XHRcdFx0ICAgICAgIGNvbXAsIG1heF9zZWNvbmRzLCBmYWxzZSk7XG4mIzQzO31cbiYjNDM7XG4gaW50IHBkc2NfZGV2Y21kX2luaXQoc3RydWN0IHBkc2MgKnBkc2MpXG4ge1xuIFx0dW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgY29tcCA9IHt9O1xuQEAgLTI0MiwxNSAmIzQzOzMzMiwxNyBAQCBpbnQgcGRzY19kZXZjbWRfcmVzZXQoc3RydWN0IHBkc2MgKnBkc2MpXG4gXHRyZXR1cm4gcGRzY19kZXZjbWQocGRzYywgXHUwMDI2Y21kLCBcdTAwMjZjb21wLCBwZHNjLVx1MDAzZWRldmNtZF90aW1lb3V0KTtcbiB9XG4gXG4tc3RhdGljIGludCBwZHNjX2RldmNtZF9pZGVudGlmeV9sb2NrZWQoc3RydWN0IHBkc2MgKnBkc2MpXG4mIzQzO3N0YXRpYyBpbnQgcGRzY19kZXZjbWRfaWRlbnRpZnlfbG9ja2VkKHN0cnVjdCBwZHNjICpwZHNjLCB1OCBkcnZfaWRlbnRfdmVyLFxuJiM0MztcdFx0XHRcdCAgICAgICBib29sIGRvX21zZylcbiB7XG4gXHR1bmlvbiBwZHNfY29yZV9kZXZfY29tcCBjb21wID0ge307XG4gXHR1bmlvbiBwZHNfY29yZV9kZXZfY21kIGNtZCA9IHtcbiBcdFx0LmlkZW50aWZ5Lm9wY29kZSA9IFBEU19DT1JFX0NNRF9JREVOVElGWSxcbi1cdFx0LmlkZW50aWZ5LnZlciA9IFBEU19DT1JFX0lERU5USVRZX1ZFUlNJT05fMSxcbiYjNDM7XHRcdC5pZGVudGlmeS52ZXIgPSBkcnZfaWRlbnRfdmVyLFxuIFx0fTtcbiBcbi1cdHJldHVybiBwZHNjX2RldmNtZF9sb2NrZWQocGRzYywgXHUwMDI2Y21kLCBcdTAwMjZjb21wLCBwZHNjLVx1MDAzZWRldmNtZF90aW1lb3V0KTtcbiYjNDM7XHRyZXR1cm4gX19wZHNjX2RldmNtZF9sb2NrZWQocGRzYywgXHUwMDI2Y21kLCBcdTAwMjZjb21wLCBwZHNjLVx1MDAzZWRldmNtZF90aW1lb3V0LFxuJiM0MztcdFx0XHRcdCAgICBkb19tc2cpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBwZHNjX2luaXRfZGV2aW5mbyhzdHJ1Y3QgcGRzYyAqcGRzYylcbkBAIC0yNzMsOCAmIzQzOzM2NSw5IEBAIHN0YXRpYyB2b2lkIHBkc2NfaW5pdF9kZXZpbmZvKHN0cnVjdCBwZHNjICpwZHNjKVxuIFx0ZGV2X2RiZyhwZHNjLVx1MDAzZWRldiwgXCYjMzQ7ZndfdmVyc2lvbiAlc1xcblwmIzM0OywgcGRzYy1cdTAwM2VkZXZfaW5mby5md192ZXJzaW9uKTtcbiB9XG4gXG4tc3RhdGljIGludCBwZHNjX2lkZW50aWZ5KHN0cnVjdCBwZHNjICpwZHNjKVxuJiM0MztzdGF0aWMgaW50IHBkc2NfaWRlbnRpZnlfdmVyKHN0cnVjdCBwZHNjICpwZHNjLCB1OCBkcnZfaWRlbnRfdmVyKVxuIHtcbiYjNDM7XHRib29sIGRvX21zZyA9IGRydl9pZGVudF92ZXIgPT0gUERTX0NPUkVfSURFTlRJVFlfVkVSU0lPTl8xO1xuIFx0c3RydWN0IHBkc19jb3JlX2Rydl9pZGVudGl0eSBkcnYgPSB7fTtcbiBcdHNpemVfdCBzejtcbiBcdGludCBlcnI7XG5AQCAtMjk3LDE5ICYjNDM7MzkwLDIyIEBAIHN0YXRpYyBpbnQgcGRzY19pZGVudGlmeShzdHJ1Y3QgcGRzYyAqcGRzYylcbiBcdHN6ID0gbWluX3Qoc2l6ZV90LCBzaXplb2YoZHJ2KSwgc2l6ZW9mKHBkc2MtXHUwMDNlY21kX3JlZ3MtXHUwMDNlZGF0YSkpO1xuIFx0bWVtY3B5X3RvaW8oXHUwMDI2cGRzYy1cdTAwM2VjbWRfcmVncy1cdTAwM2VkYXRhLCBcdTAwMjZkcnYsIHN6KTtcbiBcbi1cdGVyciA9IHBkc2NfZGV2Y21kX2lkZW50aWZ5X2xvY2tlZChwZHNjKTtcbiYjNDM7XHRlcnIgPSBwZHNjX2RldmNtZF9pZGVudGlmeV9sb2NrZWQocGRzYywgZHJ2X2lkZW50X3ZlciwgZG9fbXNnKTtcbiBcdGlmICghZXJyKSB7XG4gXHRcdHN6ID0gbWluX3Qoc2l6ZV90LCBzaXplb2YocGRzYy1cdTAwM2VkZXZfaWRlbnQpLFxuIFx0XHRcdCAgIHNpemVvZihwZHNjLVx1MDAzZWNtZF9yZWdzLVx1MDAzZWRhdGEpKTtcbiBcdFx0bWVtY3B5X2Zyb21pbyhcdTAwMjZwZHNjLVx1MDAzZWRldl9pZGVudCwgXHUwMDI2cGRzYy1cdTAwM2VjbWRfcmVncy1cdTAwM2VkYXRhLCBzeik7XG4mIzQzO1xuJiM0MztcdFx0LyogVjEgZmlybXdhcmUgZG9lc24mIzM5O3Qgc2V0IGNhcGFiaWxpdGllcywgc28gdGhlIGZpZWxkIG1heVxuJiM0MztcdFx0ICogY29udGFpbiBnYXJiYWdlIGZyb20gdGhlIG91dGdvaW5nIGRyaXZlciBpZGVudGl0eS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKHBkc2MtXHUwMDNlZGV2X2lkZW50LnZlcnNpb24gXHUwMDNjIFBEU19DT1JFX0lERU5USVRZX1ZFUlNJT05fMilcbiYjNDM7XHRcdFx0cGRzYy1cdTAwM2VkZXZfaWRlbnQuY2FwYWJpbGl0aWVzID0gMDtcbiBcdH1cbiBcdG11dGV4X3VubG9jayhcdTAwMjZwZHNjLVx1MDAzZWRldmNtZF9sb2NrKTtcbiBcbi1cdGlmIChlcnIpIHtcbi1cdFx0ZGV2X2VycihwZHNjLVx1MDAzZWRldiwgXCYjMzQ7Q2Fubm90IGlkZW50aWZ5IGRldmljZTogJXBlXFxuXCYjMzQ7LFxuLVx0XHRcdEVSUl9QVFIoZXJyKSk7XG4mIzQzO1x0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbi1cdH1cbiBcbiBcdGlmIChpc3ByaW50KHBkc2MtXHUwMDNlZGV2X2luZm8uZndfdmVyc2lvblswXSkgXHUwMDI2XHUwMDI2XG4gXHQgICAgaXNhc2NpaShwZHNjLVx1MDAzZWRldl9pbmZvLmZ3X3ZlcnNpb25bMF0pKVxuQEAgLTMyNiw2ICYjNDM7NDIyLDI2IEBAIHN0YXRpYyBpbnQgcGRzY19pZGVudGlmeShzdHJ1Y3QgcGRzYyAqcGRzYylcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBwZHNjX2lkZW50aWZ5KHN0cnVjdCBwZHNjICpwZHNjKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0LyogT2xkZXIgZmlybXdhcmUgcmVqZWN0cyBhbnl0aGluZyBidXQgUERTX0NPUkVfSURFTlRJVFlfVkVSU0lPTl8xXG4mIzQzO1x0ICogd2l0aCBQRFNfUkNfRVZFUlNJT04gKC1FSU5WQUwpLCBzbyByZXRyeSB3aXRoIFYxIG9uIHZlcnNpb25cbiYjNDM7XHQgKiByZWplY3Rpb24uIERvbiYjMzk7dCByZXRyeSBvbiBvdGhlciBlcnJvcnMgbGlrZSAtRU5YSU8vLUVUSU1FRE9VVFxuJiM0MztcdCAqIHdoaWNoIGluZGljYXRlIGZpcm13YXJlIGlzIG5vdCBydW5uaW5nIG9yIGh1bmcuXG4mIzQzO1x0ICovXG4mIzQzO1x0ZXJyID0gcGRzY19pZGVudGlmeV92ZXIocGRzYywgUERTX0NPUkVfSURFTlRJVFlfVkVSU0lPTl8yKTtcbiYjNDM7XHRpZiAoZXJyID09IC1FSU5WQUwpXG4mIzQzO1x0XHRlcnIgPSBwZHNjX2lkZW50aWZ5X3ZlcihwZHNjLCBQRFNfQ09SRV9JREVOVElUWV9WRVJTSU9OXzEpO1xuJiM0MztcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0ZGV2X2VycihwZHNjLVx1MDAzZWRldiwgXCYjMzQ7Q2Fubm90IGlkZW50aWZ5IGRldmljZTogJXBlXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRFUlJfUFRSKGVycikpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZXJyO1xuJiM0Mzt9XG4mIzQzO1xuIHZvaWQgcGRzY19kZXZfdW5pbml0KHN0cnVjdCBwZHNjICpwZHNjKVxuIHtcbiBcdGlmIChwZHNjLVx1MDAzZWludHJfaW5mbykge1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9kZXZsaW5rLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvZGV2bGluay5jXG5pbmRleCA4YWRhZTdiMTg4OThkLi42M2ZlNDVlOTFmNzEwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL2RldmxpbmsuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL2RldmxpbmsuY1xuQEAgLTkwLDEzICYjNDM7OTAsMTEyIEBAIGludCBwZHNjX2RsX2ZsYXNoX3VwZGF0ZShzdHJ1Y3QgZGV2bGluayAqZGwsXG4ge1xuIFx0c3RydWN0IHBkc2MgKnBkc2MgPSBkZXZsaW5rX3ByaXYoZGwpO1xuIFxuLVx0aWYgKHBhcmFtcy1cdTAwM2Vjb21wb25lbnQpIHtcbi1cdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcbi1cdFx0XHRcdCAgIFwmIzM0O0NvbXBvbmVudCB1cGRhdGUgbm90IHN1cHBvcnRlZCBieSB0aGlzIGRldmljZVwmIzM0Oyk7XG4tXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHRyZXR1cm4gcGRzY19maXJtd2FyZV91cGRhdGUocGRzYywgcGFyYW1zLCBleHRhY2spO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHBkc2NfZGxfcmVwb3J0X2NvbXBvbmVudChzdHJ1Y3QgZGV2bGlua19pbmZvX3JlcSAqcmVxLFxuJiM0MztcdFx0XHRcdCAgICBzdHJ1Y3QgcGRzX2NvcmVfZndfY29tcG9uZW50X2luZm8gKmluZm8pXG4mIzQzO3tcbiYjNDM7XHRlbnVtIGRldmxpbmtfaW5mb192ZXJzaW9uX3R5cGUgdmVyX3R5cGU7XG4mIzQzO1x0dTE2IGZsYWdzID0gbGUxNl90b19jcHUoaW5mby1cdTAwM2VmbGFncyk7XG4mIzQzO1x0Y2hhciAqdmVyID0gaW5mby1cdTAwM2V2ZXJzaW9uO1xuJiM0MztcdGNvbnN0IGNoYXIgKm5hbWU7XG4mIzQzO1x0Y2hhciBidWZbMzJdO1xuJiM0MztcbiYjNDM7XHQvKiBNYWluIGZpcm13YXJlIGlzIHJlcG9ydGVkIGFzIGdlbmVyaWMgXCYjMzQ7ZndcJiMzNDsgKi9cbiYjNDM7XHRpZiAoaW5mby1cdTAwM2Vjb21wb25lbnRfdHlwZSA9PSBQRFNfQ09SRV9GV19UWVBFX01BSU4pIHtcbiYjNDM7XHRcdGlmIChpbmZvLVx1MDAzZXNsb3RfaWQgPT0gUERTX0NPUkVfRldfU0xPVF9HT0xEKVxuJiM0MztcdFx0XHRzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBcJiMzNDtmdy5nb2xkXCYjMzQ7KTtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0c25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgXCYjMzQ7ZndcJiMzNDspO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRuYW1lID0gcGRzY19md190eXBlX3RvX25hbWUoaW5mby1cdTAwM2Vjb21wb25lbnRfdHlwZSk7XG4mIzQzO1x0XHRpZiAoIW5hbWUpXG4mIzQzO1x0XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRcdGlmIChpbmZvLVx1MDAzZXNsb3RfaWQgPT0gUERTX0NPUkVfRldfU0xPVF9HT0xEKVxuJiM0MztcdFx0XHRzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBcJiMzNDtmdy4lcy5nb2xkXCYjMzQ7LCBuYW1lKTtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0c25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgXCYjMzQ7ZncuJXNcJiMzNDssIG5hbWUpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0dmVyX3R5cGUgPSBERVZMSU5LX0lORk9fVkVSU0lPTl9UWVBFX05PTkU7XG4mIzQzO1x0aWYgKGZsYWdzIFx1MDAyNiBQRFNfQ09SRV9GV19DT01QT05FTlRfSU5GT19GX1VQREFURV9CWV9OQU1FKVxuJiM0MztcdFx0dmVyX3R5cGUgPSBERVZMSU5LX0lORk9fVkVSU0lPTl9UWVBFX0NPTVBPTkVOVDtcbiYjNDM7XG4mIzQzO1x0aWYgKGZsYWdzIFx1MDAyNiBQRFNfQ09SRV9GV19DT01QT05FTlRfSU5GT19GX0ZJWEVEKSB7XG4mIzQzO1x0XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHRcdGVyciA9IGRldmxpbmtfaW5mb192ZXJzaW9uX2ZpeGVkX3B1dChyZXEsIGJ1ZiwgdmVyKTtcbiYjNDM7XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdHJldHVybiBlcnI7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoZmxhZ3MgXHUwMDI2IFBEU19DT1JFX0ZXX0NPTVBPTkVOVF9JTkZPX0ZfUlVOTklORykge1xuJiM0MztcdFx0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0XHRlcnIgPSBkZXZsaW5rX2luZm9fdmVyc2lvbl9ydW5uaW5nX3B1dF9leHQocmVxLCBidWYsXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgdmVyLCB2ZXJfdHlwZSk7XG4mIzQzO1x0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRyZXR1cm4gZXJyO1xuIFx0fVxuIFxuLVx0cmV0dXJuIHBkc2NfZmlybXdhcmVfdXBkYXRlKHBkc2MsIHBhcmFtcy1cdTAwM2VmdywgZXh0YWNrKTtcbiYjNDM7XHRpZiAoZmxhZ3MgXHUwMDI2IFBEU19DT1JFX0ZXX0NPTVBPTkVOVF9JTkZPX0ZfU1RBUlRVUCkge1xuJiM0MztcdFx0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0XHRlcnIgPSBkZXZsaW5rX2luZm9fdmVyc2lvbl9zdG9yZWRfcHV0X2V4dChyZXEsIGJ1ZixcbiYjNDM7XHRcdFx0XHRcdFx0XHQgIHZlciwgdmVyX3R5cGUpO1xuJiM0MztcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHBkc2NfZGxfcmVwb3J0X2Z3X3ZlcihzdHJ1Y3QgZGV2bGlua19pbmZvX3JlcSAqcmVxLCBjaGFyICpmd192ZXIpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gZGV2bGlua19pbmZvX3ZlcnNpb25fcnVubmluZ19wdXQocmVxLFxuJiM0MztcdFx0XHRcdFx0XHRERVZMSU5LX0lORk9fVkVSU0lPTl9HRU5FUklDX0ZXLFxuJiM0MztcdFx0XHRcdFx0XHRmd192ZXIpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHBkc2NfZGxfY29tcG9uZW50X2luZm9fZ2V0KHN0cnVjdCBkZXZsaW5rICpkbCxcbiYjNDM7XHRcdFx0XHQgICAgICBzdHJ1Y3QgZGV2bGlua19pbmZvX3JlcSAqcmVxLFxuJiM0MztcdFx0XHRcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwZHNjICpwZHNjID0gZGV2bGlua19wcml2KGRsKTtcbiYjNDM7XHR1OCBudW1fY29tcG9uZW50cztcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHQvKiBQYWlycyB3aXRoIFdSSVRFX09OQ0UgaW4gcGRzY19md19jb21wb25lbnRzX2ludmFsaWRhdGUoKS5cbiYjNDM7XHQgKiBVc2UgUkVBRF9PTkNFIHRvIGdldCBhIGNvbnNpc3RlbnQgc25hcHNob3Qgb2YgbnVtX2NvbXBvbmVudHMuXG4mIzQzO1x0ICogcGRzY19md19jb21wb25lbnRzX2ludmFsaWRhdGUoKSBjYW4gemVybyBpdCBjb25jdXJyZW50bHkgZHVyaW5nXG4mIzQzO1x0ICogZmlybXdhcmUgcmVjb3Zlcnk7IHVzaW5nIHRoZSBsb2NhbCBjb3B5IGF2b2lkcyBpdGVyYXRpbmcgemVyb1xuJiM0MztcdCAqIHRpbWVzIHdoZW4gd2UgYWxyZWFkeSBkZWNpZGVkIHRoZSBjYWNoZSB3YXMgdmFsaWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0bnVtX2NvbXBvbmVudHMgPSBSRUFEX09OQ0UocGRzYy1cdTAwM2Vmd19jb21wb25lbnRzLm51bV9jb21wb25lbnRzKTtcbiYjNDM7XHRpZiAoIW51bV9jb21wb25lbnRzKSB7XG4mIzQzO1x0XHRlcnIgPSBwZHNjX2dldF9jb21wb25lbnRfaW5mbyhwZHNjKTtcbiYjNDM7XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdHJldHVybiBwZHNjX2RsX3JlcG9ydF9md192ZXIocmVxLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgcGRzYy1cdTAwM2VkZXZfaW5mby5md192ZXJzaW9uKTtcbiYjNDM7XHRcdG51bV9jb21wb25lbnRzID0gUkVBRF9PTkNFKHBkc2MtXHUwMDNlZndfY29tcG9uZW50cy5udW1fY29tcG9uZW50cyk7XG4mIzQzO1x0XHRpZiAoIW51bV9jb21wb25lbnRzKVxuJiM0MztcdFx0XHRyZXR1cm4gcGRzY19kbF9yZXBvcnRfZndfdmVyKHJlcSxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgIHBkc2MtXHUwMDNlZGV2X2luZm8uZndfdmVyc2lvbik7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRudW1fY29tcG9uZW50cyA9IG1pbl90KHUxNiwgbnVtX2NvbXBvbmVudHMsXG4mIzQzO1x0XHRcdCAgICAgICBsZTE2X3RvX2NwdShwZHNjLVx1MDAzZWRldl9pZGVudC5tYXhfZndfc2xvdHMpKTtcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBudW1fY29tcG9uZW50czsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGVyciA9IHBkc2NfZGxfcmVwb3J0X2NvbXBvbmVudChyZXEsXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgXHUwMDI2cGRzYy1cdTAwM2Vmd19jb21wb25lbnRzLmluZm9baV0pO1xuJiM0MztcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuIH1cbiBcbiBzdGF0aWMgY2hhciAqZndfc2xvdG5hbWVzW10gPSB7XG5AQCAtMTA1LDggJiM0MzsyMDQsOSBAQCBzdGF0aWMgY2hhciAqZndfc2xvdG5hbWVzW10gPSB7XG4gXHRcJiMzNDtmdy5tYWluZndiXCYjMzQ7LFxuIH07XG4gXG4taW50IHBkc2NfZGxfaW5mb19nZXQoc3RydWN0IGRldmxpbmsgKmRsLCBzdHJ1Y3QgZGV2bGlua19pbmZvX3JlcSAqcmVxLFxuLVx0XHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiYjNDM7c3RhdGljIGludCBwZHNjX2RsX2Z3X2xpc3RfaW5mb19nZXQoc3RydWN0IGRldmxpbmsgKmRsLFxuJiM0MztcdFx0XHRcdCAgICBzdHJ1Y3QgZGV2bGlua19pbmZvX3JlcSAqcmVxLFxuJiM0MztcdFx0XHRcdCAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4ge1xuIFx0dW5pb24gcGRzX2NvcmVfZGV2X2NtZCBjbWQgPSB7XG4gXHRcdC5md19jb250cm9sLm9wY29kZSA9IFBEU19DT1JFX0NNRF9GV19DT05UUk9MLFxuQEAgLTE0MCwxMiAmIzQzOzI0MCw0MSBAQCBpbnQgcGRzY19kbF9pbmZvX2dldChzdHJ1Y3QgZGV2bGluayAqZGwsIHN0cnVjdCBkZXZsaW5rX2luZm9fcmVxICpyZXEsXG4gXHRcdFx0cmV0dXJuIGVycjtcbiBcdH1cbiBcbi1cdGVyciA9IGRldmxpbmtfaW5mb192ZXJzaW9uX3J1bm5pbmdfcHV0KHJlcSxcbi1cdFx0XHRcdFx0ICAgICAgIERFVkxJTktfSU5GT19WRVJTSU9OX0dFTkVSSUNfRlcsXG4tXHRcdFx0XHRcdCAgICAgICBwZHNjLVx1MDAzZWRldl9pbmZvLmZ3X3ZlcnNpb24pO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHBkc2NfZGxfaW5mb19nZXRfdjEoc3RydWN0IGRldmxpbmsgKmRsLFxuJiM0MztcdFx0XHQgICAgICAgc3RydWN0IGRldmxpbmtfaW5mb19yZXEgKnJlcSxcbiYjNDM7XHRcdFx0ICAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwZHNjICpwZHNjID0gZGV2bGlua19wcml2KGRsKTtcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBwZHNjX2RsX2Z3X2xpc3RfaW5mb19nZXQoZGwsIHJlcSwgZXh0YWNrKTtcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG4gXG4mIzQzO1x0LyogVmVyc2lvbiAxOiByZXBvcnQgZncgZnJvbSBkZXZfaW5mbyAocnVubmluZyBvbmx5KSAqL1xuJiM0MztcdHJldHVybiBwZHNjX2RsX3JlcG9ydF9md192ZXIocmVxLCBwZHNjLVx1MDAzZWRldl9pbmZvLmZ3X3ZlcnNpb24pO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgcGRzY19kbF9pbmZvX2dldChzdHJ1Y3QgZGV2bGluayAqZGwsIHN0cnVjdCBkZXZsaW5rX2luZm9fcmVxICpyZXEsXG4mIzQzO1x0XHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwZHNjICpwZHNjID0gZGV2bGlua19wcml2KGRsKTtcbiYjNDM7XHRjaGFyIGJ1ZlszMl07XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0aWYgKHBkc2MtXHUwMDNlZGV2X2lkZW50LnZlcnNpb24gXHUwMDNlPSBQRFNfQ09SRV9JREVOVElUWV9WRVJTSU9OXzIpIHtcbiYjNDM7XHRcdGVyciA9IHBkc2NfZGxfY29tcG9uZW50X2luZm9fZ2V0KGRsLCByZXEsIGV4dGFjayk7XG4mIzQzO1x0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRyZXR1cm4gZXJyO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRlcnIgPSBwZHNjX2RsX2luZm9fZ2V0X3YxKGRsLCByZXEsIGV4dGFjayk7XG4mIzQzO1x0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRyZXR1cm4gZXJyO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBcJiMzNDsweCV4XCYjMzQ7LCBwZHNjLVx1MDAzZWRldl9pbmZvLmFzaWNfdHlwZSk7XG4gXHRlcnIgPSBkZXZsaW5rX2luZm9fdmVyc2lvbl9maXhlZF9wdXQocmVxLFxuIFx0XHRcdFx0XHQgICAgIERFVkxJTktfSU5GT19WRVJTSU9OX0dFTkVSSUNfQVNJQ19JRCxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvZncuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9mdy5jXG5pbmRleCBmYTYyNjcxOWU2OGQxLi41Y2NmMDE3ZjZhZjQ3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL2Z3LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9mdy5jXG5AQCAtMSw2ICYjNDM7MSw5IEBAXG4gLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAvKiBDb3B5cmlnaHQoYykgMjAyMyBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMgKi9cbiBcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcGxkbWZ3LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvdm1hbGxvYy5oXHUwMDNlXG4mIzQzO1xuICNpbmNsdWRlIFwmIzM0O2NvcmUuaFwmIzM0O1xuIFxuIC8qIFRoZSB3b3JzdCBjYXNlIHdhaXQgZm9yIHRoZSBpbnN0YWxsIGFjdGl2aXR5IGlzIGFib3V0IDI1IG1pbnV0ZXMgd2hlblxuQEAgLTE0LDYgJiM0MzsxNyw1OCBAQFxuIC8qIE51bWJlciBvZiBwZXJpb2RpYyBsb2cgdXBkYXRlcyBkdXJpbmcgZncgZmlsZSBkb3dubG9hZCAqL1xuICNkZWZpbmUgUERTQ19GV19JTlRFUlZBTF9GUkFDVElPTlx0MzJcbiBcbiYjNDM7I2RlZmluZSBQRFNDX0ZXX0NPTVBPTkVOVF9QUkVGSVhcdFx0XCYjMzQ7ZncuXCYjMzQ7XG4mIzQzOyNkZWZpbmUgUERTQ19GV19DT01QT05FTlRfRlVMTF9OQU1FX0JVRkxFTiBcXFxuJiM0MztcdChzaXplb2YoUERTQ19GV19DT01QT05FTlRfUFJFRklYKSAmIzQzOyBQRFNfQ09SRV9GV19DT01QT05FTlRfTkFNRV9CVUZMRU4pXG4mIzQzO1xuJiM0MzsvKiBEcml2ZXItZGVmaW5lZCBjb21wb25lbnQgdHlwZSB0byBuYW1lIG1hcHBpbmcuXG4mIzQzOyAqIFBEU19DT1JFX0ZXX1RZUEVfTUFJTiBpcyBOVUxMIC0gaGFuZGxlZCBzcGVjaWFsbHkgYXMgXCYjMzQ7ZndcJiMzNDsgd2l0aG91dCBwcmVmaXguXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHBkc2NfZndfdHlwZV9uYW1lc1tdID0ge1xuJiM0MztcdFtQRFNfQ09SRV9GV19UWVBFX01BSU5dICAgICAgPSBOVUxMLFxuJiM0MztcdFtQRFNfQ09SRV9GV19UWVBFX0JPT1RdICAgICAgPSBcJiMzNDtib290bG9hZGVyXCYjMzQ7LFxuJiM0MztcdFtQRFNfQ09SRV9GV19UWVBFX0NQTERdICAgICAgPSBcJiMzNDtjcGxkXCYjMzQ7LFxuJiM0MztcdFtQRFNfQ09SRV9GV19UWVBFX1NFQ1VSRV0gICAgPSBcJiMzNDtzZWN1cmVcJiMzNDssXG4mIzQzO1x0W1BEU19DT1JFX0ZXX1RZUEVfRlBHQV0gICAgICA9IFwmIzM0O2ZwZ2FcJiMzNDssXG4mIzQzO1x0W1BEU19DT1JFX0ZXX1RZUEVfU1VDX01BSU5dICA9IFwmIzM0O3N1Y1wmIzM0OyxcbiYjNDM7XHRbUERTX0NPUkVfRldfVFlQRV9TVUNfQk9PVF0gID0gXCYjMzQ7c3VjLmJvb3Rsb2FkZXJcJiMzNDssXG4mIzQzO1x0W1BEU19DT1JFX0ZXX1RZUEVfVUJPT1RdICAgICA9IFwmIzM0O3Vib290XCYjMzQ7LFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7Y29uc3QgY2hhciAqcGRzY19md190eXBlX3RvX25hbWUodTggdHlwZSlcbiYjNDM7e1xuJiM0MztcdGlmICh0eXBlIFx1MDAzYyBBUlJBWV9TSVpFKHBkc2NfZndfdHlwZV9uYW1lcykgXHUwMDI2XHUwMDI2IHBkc2NfZndfdHlwZV9uYW1lc1t0eXBlXSlcbiYjNDM7XHRcdHJldHVybiBwZHNjX2Z3X3R5cGVfbmFtZXNbdHlwZV07XG4mIzQzO1x0cmV0dXJuIE5VTEw7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgcGRzY19md19jb21wb25lbnRzX2ludmFsaWRhdGUoc3RydWN0IHBkc2MgKnBkc2MpXG4mIzQzO3tcbiYjNDM7XHQvKiBQYWlycyB3aXRoIFJFQURfT05DRSBpbiBwZHNjX2RsX2NvbXBvbmVudF9pbmZvX2dldCgpICovXG4mIzQzO1x0V1JJVEVfT05DRShwZHNjLVx1MDAzZWZ3X2NvbXBvbmVudHMubnVtX2NvbXBvbmVudHMsIDApO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdTggcGRzY19uYW1lX3RvX2Z3X3R5cGUoY29uc3QgY2hhciAqbmFtZSlcbiYjNDM7e1xuJiM0MztcdHNpemVfdCBwcmVmaXhfbGVuO1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHQvKiBcJiMzNDtmd1wmIzM0OyB3aXRob3V0IHN1ZmZpeCBtYXBzIHRvIG1haW4gZmlybXdhcmUgKi9cbiYjNDM7XHRpZiAoIXN0cmNtcChuYW1lLCBcJiMzNDtmd1wmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm4gUERTX0NPUkVfRldfVFlQRV9NQUlOO1xuJiM0MztcbiYjNDM7XHRwcmVmaXhfbGVuID0gc3RyX2hhc19wcmVmaXgobmFtZSwgUERTQ19GV19DT01QT05FTlRfUFJFRklYKTtcbiYjNDM7XHRpZiAocHJlZml4X2xlbilcbiYjNDM7XHRcdG5hbWUgJiM0Mzs9IHByZWZpeF9sZW47XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDE7IGkgXHUwMDNjIEFSUkFZX1NJWkUocGRzY19md190eXBlX25hbWVzKTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGlmIChwZHNjX2Z3X3R5cGVfbmFtZXNbaV0gXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgIXN0cmNtcChuYW1lLCBwZHNjX2Z3X3R5cGVfbmFtZXNbaV0pKVxuJiM0MztcdFx0XHRyZXR1cm4gaTtcbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBwZHNjX2RldmNtZF9md19kb3dubG9hZF9sb2NrZWQoc3RydWN0IHBkc2MgKnBkc2MsIHU2NCBhZGRyLFxuIFx0XHRcdFx0XHQgIHUzMiBvZmZzZXQsIHUzMiBsZW5ndGgpXG4ge1xuQEAgLTIzLDcgJiM0Mzs3OCw3IEBAIHN0YXRpYyBpbnQgcGRzY19kZXZjbWRfZndfZG93bmxvYWRfbG9ja2VkKHN0cnVjdCBwZHNjICpwZHNjLCB1NjQgYWRkcixcbiBcdFx0LmZ3X2Rvd25sb2FkLmFkZHIgPSBjcHVfdG9fbGU2NChhZGRyKSxcbiBcdFx0LmZ3X2Rvd25sb2FkLmxlbmd0aCA9IGNwdV90b19sZTMyKGxlbmd0aCksXG4gXHR9O1xuLVx0dW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgY29tcDtcbiYjNDM7XHR1bmlvbiBwZHNfY29yZV9kZXZfY29tcCBjb21wID0ge307XG4gXG4gXHRyZXR1cm4gcGRzY19kZXZjbWRfbG9ja2VkKHBkc2MsIFx1MDAyNmNtZCwgXHUwMDI2Y29tcCwgcGRzYy1cdTAwM2VkZXZjbWRfdGltZW91dCk7XG4gfVxuQEAgLTk1LDkgJiM0MzsxNTAsMTIgQEAgc3RhdGljIGludCBwZHNjX2Z3X3N0YXR1c19sb25nX3dhaXQoc3RydWN0IHBkc2MgKnBkc2MsXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbi1pbnQgcGRzY19maXJtd2FyZV91cGRhdGUoc3RydWN0IHBkc2MgKnBkc2MsIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncsXG4tXHRcdFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiYjNDM7c3RhdGljIGludFxuJiM0MztwZHNjX2xlZ2FjeV9maXJtd2FyZV91cGRhdGUoc3RydWN0IHBkc2MgKnBkc2MsXG4mIzQzO1x0XHRcdCAgICBzdHJ1Y3QgZGV2bGlua19mbGFzaF91cGRhdGVfcGFyYW1zICpwYXJhbXMsXG4mIzQzO1x0XHRcdCAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4ge1xuJiM0MztcdGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncgPSBwYXJhbXMtXHUwMDNlZnc7XG4gXHR1MzIgYnVmX3N6LCBjb3B5X3N6LCBvZmZzZXQ7XG4gXHRzdHJ1Y3QgZGV2bGluayAqZGw7XG4gXHRpbnQgbmV4dF9pbnRlcnZhbDtcbkBAIC0xMDUsNiAmIzQzOzE2MywxMiBAQCBpbnQgcGRzY19maXJtd2FyZV91cGRhdGUoc3RydWN0IHBkc2MgKnBkc2MsIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncsXG4gXHRpbnQgZXJyID0gMDtcbiBcdGludCBmd19zbG90O1xuIFxuJiM0MztcdGlmIChwYXJhbXMtXHUwMDNlY29tcG9uZW50KSB7XG4mIzQzO1x0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxuJiM0MztcdFx0XHRcdCAgIFwmIzM0O0NvbXBvbmVudCB1cGRhdGUgbm90IHN1cHBvcnRlZCBieSB0aGlzIGRldmljZVwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0fVxuJiM0MztcbiBcdGRldl9pbmZvKHBkc2MtXHUwMDNlZGV2LCBcJiMzNDtJbnN0YWxsaW5nIGZpcm13YXJlXFxuXCYjMzQ7KTtcbiBcbiBcdGlmICghcGRzYy1cdTAwM2VjbWRfcmVncylcbkBAIC0xOTUsMyAmIzQzOzI1OSw3MjkgQEAgaW50IHBkc2NfZmlybXdhcmVfdXBkYXRlKHN0cnVjdCBwZHNjICpwZHNjLCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3LFxuIFx0XHRcdFx0XHRcdCAgIE5VTEwsIDAsIDApO1xuIFx0cmV0dXJuIGVycjtcbiB9XG4mIzQzO1xuJiM0MztzdHJ1Y3QgcGRzY19jb21wb25lbnRfcHJpdiB7XG4mIzQzO1x0dTE2IGNvbXBvbmVudF9pZDtcbiYjNDM7XHRib29sIHNraXA7XG4mIzQzO1x0c3RydWN0IGxpc3RfaGVhZCBsaXN0X2VudHJ5O1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RydWN0IHBkc19jb3JlX2Z3dV9wcml2IHtcbiYjNDM7XHRzdHJ1Y3QgcGxkbWZ3IGNvbnRleHQ7XG4mIzQzO1x0c3RydWN0IGRldmxpbmtfZmxhc2hfdXBkYXRlX3BhcmFtcyAqcGFyYW1zO1xuJiM0MztcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaztcbiYjNDM7XHRzdHJ1Y3QgcGRzYyAqcGRzYztcbiYjNDM7XHRzdHJ1Y3QgbGlzdF9oZWFkIGNvbXBvbmVudHM7XG4mIzQzO1x0Ym9vbCBjb21wb25lbnRfZm91bmQ7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBwZHNjX2ZyZWVfZnd1X3ByaXYoc3RydWN0IHBkc19jb3JlX2Z3dV9wcml2ICpwcml2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHBkc2NfY29tcG9uZW50X3ByaXYgKmNvbXBvbmVudF9wcml2LCAqdG1wO1xuJiM0MztcbiYjNDM7XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY29tcG9uZW50X3ByaXYsIHRtcCwgXHUwMDI2cHJpdi1cdTAwM2Vjb21wb25lbnRzLFxuJiM0MztcdFx0XHRcdCBsaXN0X2VudHJ5KSB7XG4mIzQzO1x0XHRsaXN0X2RlbChcdTAwMjZjb21wb25lbnRfcHJpdi1cdTAwM2VsaXN0X2VudHJ5KTtcbiYjNDM7XHRcdGtmcmVlKGNvbXBvbmVudF9wcml2KTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcGRzY19kZXZjbWRfbWF0Y2hfcmVjb3JkX2Rlc2Moc3RydWN0IHBkc2MgKnBkc2MsIHUxNiBkZXNjX3R5cGUsXG4mIzQzO1x0XHRcdFx0XHQgdTE2IGRlc2Nfc2l6ZSwgY29uc3QgdTggKmRlc2NfZGF0YSxcbiYjNDM7XHRcdFx0XHRcdCB1OCAqbWF0Y2gpXG4mIzQzO3tcbiYjNDM7XHR1bmlvbiBwZHNfY29yZV9kZXZfY21kIGNtZCA9IHtcbiYjNDM7XHRcdC5tYXRjaF9yZWNvcmRfZGVzYy5vcGNvZGUgPSBQRFNfQ09SRV9DTURfTUFUQ0hfUkVDT1JEX0RFU0MsXG4mIzQzO1x0XHQubWF0Y2hfcmVjb3JkX2Rlc2MudmVyID0gMSxcbiYjNDM7XHRcdC5tYXRjaF9yZWNvcmRfZGVzYy50eXBlID0gY3B1X3RvX2xlMTYoZGVzY190eXBlKSxcbiYjNDM7XHRcdC5tYXRjaF9yZWNvcmRfZGVzYy5zaXplID0gY3B1X3RvX2xlMTYoZGVzY19zaXplKSxcbiYjNDM7XHR9O1xuJiM0MztcdHVuaW9uIHBkc19jb3JlX2Rldl9jb21wIGNvbXAgPSB7fTtcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBwZHNjX2RldmNtZF93aXRoX2RhdGEocGRzYywgXHUwMDI2Y21kLCBkZXNjX2RhdGEsIGRlc2Nfc2l6ZSxcbiYjNDM7XHRcdFx0XHQgICAgXHUwMDI2Y29tcCwgcGRzYy1cdTAwM2VkZXZjbWRfdGltZW91dCk7XG4mIzQzO1x0Km1hdGNoID0gY29tcC5tYXRjaF9yZWNvcmRfZGVzYy5tYXRjaDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGJvb2wgcGRzY19tYXRjaF9yZWNvcmRfZGVzY3Moc3RydWN0IHBsZG1mdyAqY29udGV4dCxcbiYjNDM7XHRcdFx0XHQgICAgc3RydWN0IHBsZG1md19yZWNvcmQgKnJlY29yZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwZHNfY29yZV9md3VfcHJpdiAqcHJpdiA9XG4mIzQzO1x0XHRjb250YWluZXJfb2YoY29udGV4dCwgc3RydWN0IHBkc19jb3JlX2Z3dV9wcml2LCBjb250ZXh0KTtcbiYjNDM7XHRzdHJ1Y3QgcGRzYyAqcGRzYyA9IHByaXYtXHUwMDNlcGRzYztcbiYjNDM7XHRzdHJ1Y3QgcGxkbWZ3X2Rlc2NfdGx2ICpkZXNjO1xuJiM0MztcbiYjNDM7XHRpZiAoIXBsZG1md19vcF9wY2lfbWF0Y2hfcmVjb3JkKGNvbnRleHQsIHJlY29yZCkpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGxpc3RfZm9yX2VhY2hfZW50cnkoZGVzYywgXHUwMDI2cmVjb3JkLVx1MDAzZWRlc2NzLCBlbnRyeSkge1xuJiM0MztcdFx0dTggbWF0Y2g7XG4mIzQzO1x0XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHRcdHN3aXRjaCAoZGVzYy1cdTAwM2V0eXBlKSB7XG4mIzQzO1x0XHQvKiBza2lwIHR5cGVzIGNoZWNrZWQgaW4gcGxkbWZ3X29wX3BjaV9tYXRjaF9yZWNvcmQgKi9cbiYjNDM7XHRcdGNhc2UgUExETV9ERVNDX0lEX1BDSV9WRU5ET1JfSUQ6XG4mIzQzO1x0XHRjYXNlIFBMRE1fREVTQ19JRF9QQ0lfREVWSUNFX0lEOlxuJiM0MztcdFx0Y2FzZSBQTERNX0RFU0NfSURfUENJX1NVQlZFTkRPUl9JRDpcbiYjNDM7XHRcdGNhc2UgUExETV9ERVNDX0lEX1BDSV9TVUJERVZfSUQ6XG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGlmICghZGVzYy1cdTAwM2VzaXplKVxuJiM0MztcdFx0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdFx0ZXJyID0gcGRzY19kZXZjbWRfbWF0Y2hfcmVjb3JkX2Rlc2MocGRzYywgZGVzYy1cdTAwM2V0eXBlLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgZGVzYy1cdTAwM2VzaXplLCBkZXNjLVx1MDAzZWRhdGEsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICBcdTAwMjZtYXRjaCk7XG4mIzQzO1x0XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRcdGRldl9lcnIocGRzYy1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdFx0XCYjMzQ7bWF0Y2hfcmVjb3JkX2Rlc2MgZmFpbGVkIHR5cGU6IDB4JTA0eCBzaXplOiAldSwgZXJyICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdGRlc2MtXHUwMDNldHlwZSwgZGVzYy1cdTAwM2VzaXplLCBlcnIpO1xuJiM0MztcdFx0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHQvKiBhbGwgcmVjb3JkIGRlc2NyaXB0b3JzIG11c3QgbWF0Y2ggKi9cbiYjNDM7XHRcdGlmICghbWF0Y2gpXG4mIzQzO1x0XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiB0cnVlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHBkc2NfZGV2Y21kX3NlbmRfcGFja2FnZV9kYXRhKHN0cnVjdCBwZHNjICpwZHNjLCB1NjQgYWRkcixcbiYjNDM7XHRcdFx0XHRcdCB1MTYgbGVuZ3RoLCB1MTYgb2Zmc2V0LCB1MTYgdG90YWxfbGVuKVxuJiM0Mzt7XG4mIzQzO1x0dW5pb24gcGRzX2NvcmVfZGV2X2NtZCBjbWQgPSB7XG4mIzQzO1x0XHQuc2VuZF9wa2dfZGF0YS5vcGNvZGUgPSBQRFNfQ09SRV9DTURfU0VORF9QS0dfREFUQSxcbiYjNDM7XHRcdC5zZW5kX3BrZ19kYXRhLnZlciA9IDEsXG4mIzQzO1x0XHQuc2VuZF9wa2dfZGF0YS5kYXRhX3BhID0gY3B1X3RvX2xlNjQoYWRkciksXG4mIzQzO1x0XHQuc2VuZF9wa2dfZGF0YS5kYXRhX2xlbiA9IGNwdV90b19sZTE2KGxlbmd0aCksXG4mIzQzO1x0XHQuc2VuZF9wa2dfZGF0YS5vZmZzZXQgPSBjcHVfdG9fbGUxNihvZmZzZXQpLFxuJiM0MztcdFx0LnNlbmRfcGtnX2RhdGEudG90YWxfbGVuID0gY3B1X3RvX2xlMTYodG90YWxfbGVuKSxcbiYjNDM7XHR9O1xuJiM0MztcdHVuaW9uIHBkc19jb3JlX2Rldl9jb21wIGNvbXAgPSB7fTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHBkc2NfZGV2Y21kKHBkc2MsIFx1MDAyNmNtZCwgXHUwMDI2Y29tcCwgcGRzYy1cdTAwM2VkZXZjbWRfdGltZW91dCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcGRzY19zZW5kX3BhY2thZ2VfZGF0YShzdHJ1Y3QgcGxkbWZ3ICpjb250ZXh0LCBjb25zdCB1OCAqZGF0YSxcbiYjNDM7XHRcdFx0XHQgIHUxNiBsZW5ndGgpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcGRzX2NvcmVfZnd1X3ByaXYgKnByaXYgPVxuJiM0MztcdFx0Y29udGFpbmVyX29mKGNvbnRleHQsIHN0cnVjdCBwZHNfY29yZV9md3VfcHJpdiwgY29udGV4dCk7XG4mIzQzO1x0c3RydWN0IHBkc2NfZGVmZXJyZWRfZG1hICpkZWZlcnJlZDtcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBjb250ZXh0LVx1MDAzZWRldjtcbiYjNDM7XHRzdHJ1Y3QgcGRzYyAqcGRzYyA9IHByaXYtXHUwMDNlcGRzYztcbiYjNDM7XHRkbWFfYWRkcl90IGRtYV9hZGRyO1xuJiM0MztcdHU4ICpwYWNrYWdlX2RhdGE7XG4mIzQzO1x0dTMyIG9mZnNldDtcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHRpZiAoIWxlbmd0aClcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRkZWZlcnJlZCA9IGttYWxsb2Nfb2JqKCpkZWZlcnJlZCwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCFkZWZlcnJlZClcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiYjNDM7XHRwYWNrYWdlX2RhdGEgPSBrbWVtZHVwKGRhdGEsIGxlbmd0aCwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCFwYWNrYWdlX2RhdGEpIHtcbiYjNDM7XHRcdGtmcmVlKGRlZmVycmVkKTtcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZG1hX2FkZHIgPSBkbWFfbWFwX3NpbmdsZShkZXYsIHBhY2thZ2VfZGF0YSwgbGVuZ3RoLCBETUFfVE9fREVWSUNFKTtcbiYjNDM7XHRpZiAoZG1hX21hcHBpbmdfZXJyb3IoZGV2LCBkbWFfYWRkcikpIHtcbiYjNDM7XHRcdGRldl9lcnIoZGV2LCBcJiMzNDtGYWlsZWQgdG8gZG1hX21hcCBwYWNrYWdlX2RhdGEgbGVuZ3RoIDB4JXhcXG5cJiMzNDssXG4mIzQzO1x0XHRcdGxlbmd0aCk7XG4mIzQzO1x0XHRrZnJlZShwYWNrYWdlX2RhdGEpO1xuJiM0MztcdFx0a2ZyZWUoZGVmZXJyZWQpO1xuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRmb3IgKG9mZnNldCA9IDA7IG9mZnNldCBcdTAwM2MgbGVuZ3RoOyBvZmZzZXQgJiM0Mzs9IFBEU19QQUdFX1NJWkUpIHtcbiYjNDM7XHRcdHUzMiBjb3B5X3N6O1xuJiM0MztcbiYjNDM7XHRcdGNvcHlfc3ogPSBtaW5fdCh1bnNpZ25lZCBpbnQsIFBEU19QQUdFX1NJWkUsIGxlbmd0aCAtIG9mZnNldCk7XG4mIzQzO1x0XHRlcnIgPSBwZHNjX2RldmNtZF9zZW5kX3BhY2thZ2VfZGF0YShwZHNjLCBkbWFfYWRkciAmIzQzOyBvZmZzZXQsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICBjb3B5X3N6LCBvZmZzZXQsIGxlbmd0aCk7XG4mIzQzO1x0XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRcdE5MX1NFVF9FUlJfTVNHX01PRChwcml2LVx1MDAzZWV4dGFjayxcbiYjNDM7XHRcdFx0XHRcdCAgIFwmIzM0O0ZhaWxlZCB0byBzZW5kIHBhY2thZ2UgZGF0YVwmIzM0Oyk7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKGVyciA9PSAtRVRJTUVET1VUIHx8IGVyciA9PSAtRUFHQUlOKSB7XG4mIzQzO1x0XHRwZHNjX2RlZmVycmVkX2RtYV9hZGQocGRzYywgZGVmZXJyZWQsIGRtYV9hZGRyLFxuJiM0MztcdFx0XHRcdCAgICAgIHBhY2thZ2VfZGF0YSwgbGVuZ3RoLCBETUFfVE9fREVWSUNFKTtcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRrZnJlZShkZWZlcnJlZCk7XG4mIzQzO1x0ZG1hX3VubWFwX3NpbmdsZShkZXYsIGRtYV9hZGRyLCBsZW5ndGgsIERNQV9UT19ERVZJQ0UpO1xuJiM0MztcdGtmcmVlKHBhY2thZ2VfZGF0YSk7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGJvb2wgcGRzY19jb21wb25lbnRfdHlwZV9leGlzdHMoc3RydWN0IHBkc2MgKnBkc2MsIHU4IHR5cGUpXG4mIzQzO3tcbiYjNDM7XHRpbnQgaTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgcGRzYy1cdTAwM2Vmd19jb21wb25lbnRzLm51bV9jb21wb25lbnRzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aWYgKHBkc2MtXHUwMDNlZndfY29tcG9uZW50cy5pbmZvW2ldLmNvbXBvbmVudF90eXBlID09IHR5cGUpXG4mIzQzO1x0XHRcdHJldHVybiB0cnVlO1xuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIHBkc2NfY29tcG9uZW50X2lkX21hdGNoZXNfdHlwZShzdHJ1Y3QgcGRzYyAqcGRzYyxcbiYjNDM7XHRcdFx0XHRcdCAgIHU4IGNvbXBvbmVudF9pZCwgdTggdHlwZSlcbiYjNDM7e1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBwZHNjLVx1MDAzZWZ3X2NvbXBvbmVudHMubnVtX2NvbXBvbmVudHM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRzdHJ1Y3QgcGRzX2NvcmVfZndfY29tcG9uZW50X2luZm8gKmluZm8gPVxuJiM0MztcdFx0XHRcdTAwMjZwZHNjLVx1MDAzZWZ3X2NvbXBvbmVudHMuaW5mb1tpXTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoaW5mby1cdTAwM2VpZGVudGlmaWVyID09IGNvbXBvbmVudF9pZCBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICBpbmZvLVx1MDAzZWNvbXBvbmVudF90eXBlID09IHR5cGUpXG4mIzQzO1x0XHRcdHJldHVybiB0cnVlO1xuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB1OCBwZHNjX2dldF9jb21wb25lbnRfdHlwZV9ieV9pZChzdHJ1Y3QgcGRzYyAqcGRzYywgdTE2IGNvbXBvbmVudF9pZClcbiYjNDM7e1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBwZHNjLVx1MDAzZWZ3X2NvbXBvbmVudHMubnVtX2NvbXBvbmVudHM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRzdHJ1Y3QgcGRzX2NvcmVfZndfY29tcG9uZW50X2luZm8gKmluZm8gPVxuJiM0MztcdFx0XHRcdTAwMjZwZHNjLVx1MDAzZWZ3X2NvbXBvbmVudHMuaW5mb1tpXTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoaW5mby1cdTAwM2VpZGVudGlmaWVyID09IGNvbXBvbmVudF9pZClcbiYjNDM7XHRcdFx0cmV0dXJuIGluZm8tXHUwMDNlY29tcG9uZW50X3R5cGU7XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCBwZHNjX3NraXBfY29tcG9uZW50KHN0cnVjdCBwZHNfY29yZV9md3VfcHJpdiAqcHJpdixcbiYjNDM7XHRcdFx0XHR1MTYgY29tcG9uZW50X2lkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHBkc2NfY29tcG9uZW50X3ByaXYgKmNvbXBvbmVudF9wcml2O1xuJiM0MztcbiYjNDM7XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGNvbXBvbmVudF9wcml2LCBcdTAwMjZwcml2LVx1MDAzZWNvbXBvbmVudHMsIGxpc3RfZW50cnkpIHtcbiYjNDM7XHRcdGlmIChjb21wb25lbnRfcHJpdi1cdTAwM2Vjb21wb25lbnRfaWQgPT0gY29tcG9uZW50X2lkKVxuJiM0MztcdFx0XHRyZXR1cm4gY29tcG9uZW50X3ByaXYtXHUwMDNlc2tpcDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBmYWxzZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBwZHNjX3NlbmRfY29tcG9uZW50X3RhYmxlKHN0cnVjdCBwbGRtZncgKmNvbnRleHQsXG4mIzQzO1x0XHRcdFx0ICAgICBzdHJ1Y3QgcGxkbWZ3X2NvbXBvbmVudCAqY29tcG9uZW50LFxuJiM0MztcdFx0XHRcdCAgICAgdTggdHJhbnNmZXJfZmxhZylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwZHNfY29yZV9md3VfcHJpdiAqcHJpdiA9XG4mIzQzO1x0XHRjb250YWluZXJfb2YoY29udGV4dCwgc3RydWN0IHBkc19jb3JlX2Z3dV9wcml2LCBjb250ZXh0KTtcbiYjNDM7XHRzdHJ1Y3QgcGRzX2NvcmVfY29tcG9uZW50X3RibCAqY29tcG9uZW50X3RibDtcbiYjNDM7XHRzdHJ1Y3QgcGRzY19jb21wb25lbnRfcHJpdiAqY29tcG9uZW50X3ByaXY7XG4mIzQzO1x0c3RydWN0IGRldmljZSAqZGV2ID0gY29udGV4dC1cdTAwM2VkZXY7XG4mIzQzO1x0dW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgY29tcCA9IHt9O1xuJiM0MztcdHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgY21kID0ge307XG4mIzQzO1x0c3RydWN0IHBkc2MgKnBkc2MgPSBwcml2LVx1MDAzZXBkc2M7XG4mIzQzO1x0Ym9vbCBza2lwX2NvbXBvbmVudCA9IGZhbHNlO1xuJiM0MztcdHU4IHJlcXVlc3RlZF90eXBlID0gMDtcbiYjNDM7XHR1MTYgYnVmX3N6LCB0Ymxfc3o7XG4mIzQzO1x0aW50IGVyciA9IDA7XG4mIzQzO1xuJiM0MztcdGRldl9kYmcoZGV2LFxuJiM0MztcdFx0XCYjMzQ7Y29tcG9uZW50IG5hbWUgJXMgY2xhc3NpZmljYXRpb24gJXUgaWQgJXUgYWN0aXZhdGlvbl9tZXRob2QgJXUgdmVyX2xlbiAlZCB2ZXJfc3RyICUuKnMgaW5kZXggJXUgc2l6ZSAldSB0cmFuc2Zlcl9mbGFnIDB4JTAyeFxcblwmIzM0OyxcbiYjNDM7XHRcdHByaXYtXHUwMDNlcGFyYW1zLVx1MDAzZWNvbXBvbmVudCwgY29tcG9uZW50LVx1MDAzZWNsYXNzaWZpY2F0aW9uLFxuJiM0MztcdFx0Y29tcG9uZW50LVx1MDAzZWlkZW50aWZpZXIsIGNvbXBvbmVudC1cdTAwM2VhY3RpdmF0aW9uX21ldGhvZCxcbiYjNDM7XHRcdGNvbXBvbmVudC1cdTAwM2V2ZXJzaW9uX2xlbiwgY29tcG9uZW50LVx1MDAzZXZlcnNpb25fbGVuLFxuJiM0MztcdFx0Y29tcG9uZW50LVx1MDAzZXZlcnNpb25fc3RyaW5nLCBjb21wb25lbnQtXHUwMDNlaW5kZXgsXG4mIzQzO1x0XHRjb21wb25lbnQtXHUwMDNlY29tcG9uZW50X3NpemUsIHRyYW5zZmVyX2ZsYWcpO1xuJiM0MztcbiYjNDM7XHRjb21wb25lbnRfcHJpdiA9IGt6YWxsb2Nfb2JqKCpjb21wb25lbnRfcHJpdiwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCFjb21wb25lbnRfcHJpdilcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiYjNDM7XHRpZiAocHJpdi1cdTAwM2VwYXJhbXMtXHUwMDNlY29tcG9uZW50KSB7XG4mIzQzO1x0XHRyZXF1ZXN0ZWRfdHlwZSA9IHBkc2NfbmFtZV90b19md190eXBlKHByaXYtXHUwMDNlcGFyYW1zLVx1MDAzZWNvbXBvbmVudCk7XG4mIzQzO1x0XHRpZiAoY29tcG9uZW50LVx1MDAzZWlkZW50aWZpZXIgXHUwMDNlIFU4X01BWCB8fFxuJiM0MztcdFx0ICAgICFwZHNjX2NvbXBvbmVudF9pZF9tYXRjaGVzX3R5cGUocGRzYyxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgIGNvbXBvbmVudC1cdTAwM2VpZGVudGlmaWVyLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgcmVxdWVzdGVkX3R5cGUpKSB7XG4mIzQzO1x0XHRcdHNraXBfY29tcG9uZW50ID0gdHJ1ZTtcbiYjNDM7XHRcdFx0Z290byBhZGRfY29tcG9uZW50X3ByaXY7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRwcml2LVx1MDAzZWNvbXBvbmVudF9mb3VuZCA9IHRydWU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRidWZfc3ogPSBzaXplb2YocGRzYy1cdTAwM2VjbWRfcmVncy1cdTAwM2VkYXRhKTtcbiYjNDM7XHR0Ymxfc3ogPSBzdHJ1Y3Rfc2l6ZShjb21wb25lbnRfdGJsLCB2ZXJzaW9uX3N0cixcbiYjNDM7XHRcdFx0ICAgICBjb21wb25lbnQtXHUwMDNldmVyc2lvbl9sZW4pO1xuJiM0MztcdGlmICh0Ymxfc3ogXHUwMDNlIGJ1Zl9zeikge1xuJiM0MztcdFx0ZGV2X2VycihkZXYsIFwmIzM0O2NvbXBvbmVudF90Ymwgc2l6ZSAlZCB0b28gYmlnLCBtYXggc2l6ZTogJWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdHRibF9zeiwgYnVmX3N6KTtcbiYjNDM7XHRcdGVyciA9IC1FTk9TUEM7XG4mIzQzO1x0XHRnb3RvIGZyZWVfY29tcG9uZW50X3ByaXY7XG4mIzQzO1x0fVxuJiM0MztcdGNvbXBvbmVudF90YmwgPSBremFsbG9jKHRibF9zeiwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCFjb21wb25lbnRfdGJsKSB7XG4mIzQzO1x0XHRlcnIgPSAtRU5PTUVNO1xuJiM0MztcdFx0Z290byBmcmVlX2NvbXBvbmVudF9wcml2O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Y29tcG9uZW50X3RibC1cdTAwM2Vjb21wYXJpc29uX3N0YW1wID1cbiYjNDM7XHRcdGNwdV90b19sZTMyKGNvbXBvbmVudC1cdTAwM2Vjb21wYXJpc29uX3N0YW1wKTtcbiYjNDM7XHRjb21wb25lbnRfdGJsLVx1MDAzZWNsYXNzaWZpY2F0aW9uID0gY3B1X3RvX2xlMTYoY29tcG9uZW50LVx1MDAzZWNsYXNzaWZpY2F0aW9uKTtcbiYjNDM7XHRjb21wb25lbnRfdGJsLVx1MDAzZWlkZW50aWZpZXIgPSBjcHVfdG9fbGUxNihjb21wb25lbnQtXHUwMDNlaWRlbnRpZmllcik7XG4mIzQzO1x0Y29tcG9uZW50X3RibC1cdTAwM2V0cmFuc2Zlcl9mbGFnID0gdHJhbnNmZXJfZmxhZztcbiYjNDM7XHRjb21wb25lbnRfdGJsLVx1MDAzZXZlcnNpb25fc3RyX3R5cGUgPSBjb21wb25lbnQtXHUwMDNldmVyc2lvbl90eXBlO1xuJiM0MztcdGNvbXBvbmVudF90YmwtXHUwMDNldmVyc2lvbl9zdHJfbGVuID0gY29tcG9uZW50LVx1MDAzZXZlcnNpb25fbGVuO1xuJiM0MztcdG1lbWNweShjb21wb25lbnRfdGJsLVx1MDAzZXZlcnNpb25fc3RyLCBjb21wb25lbnQtXHUwMDNldmVyc2lvbl9zdHJpbmcsXG4mIzQzO1x0ICAgICAgIGNvbXBvbmVudC1cdTAwM2V2ZXJzaW9uX2xlbik7XG4mIzQzO1xuJiM0MztcdGNtZC5zZW5kX2NvbXBvbmVudF90Ymwub3Bjb2RlID0gUERTX0NPUkVfQ01EX1NFTkRfQ09NUE9ORU5UX1RCTDtcbiYjNDM7XHRjbWQuc2VuZF9jb21wb25lbnRfdGJsLnZlciA9IDE7XG4mIzQzO1x0Y21kLnNlbmRfY29tcG9uZW50X3RibC5zbG90X2lkID0gUERTX0NPUkVfRldfU0xPVF9JTlZBTElEO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBwZHNjX2RldmNtZF93aXRoX2RhdGEocGRzYywgXHUwMDI2Y21kLCBjb21wb25lbnRfdGJsLCB0Ymxfc3osXG4mIzQzO1x0XHRcdFx0ICAgIFx1MDAyNmNvbXAsIHBkc2MtXHUwMDNlZGV2Y21kX3RpbWVvdXQpO1xuJiM0MztcdGtmcmVlKGNvbXBvbmVudF90YmwpO1xuJiM0MztcdGlmIChlcnIpIHtcbiYjNDM7XHRcdGRldl9lcnIoZGV2LCBcJiMzNDtGYWlsZWQgc2VuZGluZyBjb21wb25lbnQgdGFibGU6ICVwZVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0RVJSX1BUUihlcnIpKTtcbiYjNDM7XHRcdGdvdG8gZnJlZV9jb21wb25lbnRfcHJpdjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHNraXBfY29tcG9uZW50ID0gY29tcC5zZW5kX2NvbXBvbmVudF90YmwucmVzcG9uc2UgPT0gMTtcbiYjNDM7XG4mIzQzO2FkZF9jb21wb25lbnRfcHJpdjpcbiYjNDM7XHRjb21wb25lbnRfcHJpdi1cdTAwM2Vza2lwID0gc2tpcF9jb21wb25lbnQ7XG4mIzQzO1x0Y29tcG9uZW50X3ByaXYtXHUwMDNlY29tcG9uZW50X2lkID0gY29tcG9uZW50LVx1MDAzZWlkZW50aWZpZXI7XG4mIzQzO1x0bGlzdF9hZGQoXHUwMDI2Y29tcG9uZW50X3ByaXYtXHUwMDNlbGlzdF9lbnRyeSwgXHUwMDI2cHJpdi1cdTAwM2Vjb21wb25lbnRzKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztmcmVlX2NvbXBvbmVudF9wcml2OlxuJiM0MztcdGtmcmVlKGNvbXBvbmVudF9wcml2KTtcbiYjNDM7XHRyZXR1cm4gZXJyO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgcGRzY19nZXRfY29tcG9uZW50X2luZm8oc3RydWN0IHBkc2MgKnBkc2MpXG4mIzQzO3tcbiYjNDM7XHR1bmlvbiBwZHNfY29yZV9kZXZfY21kIGNtZCA9IHtcbiYjNDM7XHRcdC5nZXRfY29tcG9uZW50X2luZm8ub3Bjb2RlID0gUERTX0NPUkVfQ01EX0dFVF9DT01QT05FTlRfSU5GTyxcbiYjNDM7XHRcdC5nZXRfY29tcG9uZW50X2luZm8udmVyID0gMSxcbiYjNDM7XHR9O1xuJiM0MztcdHN0cnVjdCBwZHNfY29yZV9jb21wb25lbnRfbGlzdF9pbmZvICpsaXN0X2luZm87XG4mIzQzO1x0c3RydWN0IHBkc2NfZGVmZXJyZWRfZG1hICpkZWZlcnJlZDtcbiYjNDM7XHR1bmlvbiBwZHNfY29yZV9kZXZfY29tcCBjb21wID0ge307XG4mIzQzO1x0ZG1hX2FkZHJfdCBkbWFfYWRkcjtcbiYjNDM7XHR1OCBudW1fY29tcG9uZW50cztcbiYjNDM7XHRpbnQgZXJyLCBpO1xuJiM0MztcbiYjNDM7XHRkZWZlcnJlZCA9IGttYWxsb2Nfb2JqKCpkZWZlcnJlZCk7XG4mIzQzO1x0aWYgKCFkZWZlcnJlZClcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiYjNDM7XHRsaXN0X2luZm8gPSBremFsbG9jKFBEU19QQUdFX1NJWkUsIEdGUF9LRVJORUwpO1xuJiM0MztcdGlmICghbGlzdF9pbmZvKSB7XG4mIzQzO1x0XHRrZnJlZShkZWZlcnJlZCk7XG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGRtYV9hZGRyID0gZG1hX21hcF9zaW5nbGUocGRzYy1cdTAwM2VkZXYsIGxpc3RfaW5mbywgUERTX1BBR0VfU0laRSxcbiYjNDM7XHRcdFx0XHQgIERNQV9GUk9NX0RFVklDRSk7XG4mIzQzO1x0aWYgKGRtYV9tYXBwaW5nX2Vycm9yKHBkc2MtXHUwMDNlZGV2LCBkbWFfYWRkcikpIHtcbiYjNDM7XHRcdGRldl9lcnIocGRzYy1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdFwmIzM0O0ZhaWxlZCB0byBkbWFfbWFwIGNvbXBvbmVudF9saXN0X2luZm8gbGVuZ3RoICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRQRFNfUEFHRV9TSVpFKTtcbiYjNDM7XHRcdGtmcmVlKGxpc3RfaW5mbyk7XG4mIzQzO1x0XHRrZnJlZShkZWZlcnJlZCk7XG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGNtZC5nZXRfY29tcG9uZW50X2luZm8uZGF0YV9sZW4gPSBjcHVfdG9fbGUxNihQRFNfUEFHRV9TSVpFKTtcbiYjNDM7XHRjbWQuZ2V0X2NvbXBvbmVudF9pbmZvLmRhdGFfcGEgPSBjcHVfdG9fbGU2NChkbWFfYWRkcik7XG4mIzQzO1xuJiM0MztcdGVyciA9IHBkc2NfZGV2Y21kKHBkc2MsIFx1MDAyNmNtZCwgXHUwMDI2Y29tcCwgcGRzYy1cdTAwM2VkZXZjbWRfdGltZW91dCAqIDIpO1xuJiM0MztcdGlmIChlcnIgPT0gLUVUSU1FRE9VVCB8fCBlcnIgPT0gLUVBR0FJTikge1xuJiM0MztcdFx0cGRzY19kZWZlcnJlZF9kbWFfYWRkKHBkc2MsIGRlZmVycmVkLCBkbWFfYWRkciwgbGlzdF9pbmZvLFxuJiM0MztcdFx0XHRcdCAgICAgIFBEU19QQUdFX1NJWkUsIERNQV9GUk9NX0RFVklDRSk7XG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0a2ZyZWUoZGVmZXJyZWQpO1xuJiM0MztcdGRtYV91bm1hcF9zaW5nbGUocGRzYy1cdTAwM2VkZXYsIGRtYV9hZGRyLCBQRFNfUEFHRV9TSVpFLCBETUFfRlJPTV9ERVZJQ0UpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0aWYgKGNvbXAuZ2V0X2NvbXBvbmVudF9pbmZvLnZlciA9PSAwKSB7XG4mIzQzO1x0XHQvKiBEb24mIzM5O3Qgc3VwcG9ydCBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IGFzIHZlcnNpb24gMCBoYXNcbiYjNDM7XHRcdCAqIGFsaWdubWVudCBpc3N1ZXMsIHNvIGdpdmUgYSBoaW50IHRvIHVzZXJzIHRvIHVwZGF0ZVxuJiM0MztcdFx0ICogdGhlaXIgZmlybXdhcmVcbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0ZGV2X3dhcm5fb25jZShwZHNjLVx1MDAzZWRldixcbiYjNDM7XHRcdFx0ICAgICAgXCYjMzQ7SW5jb21wYXRpYmxlIGdldF9jb21wb25lbnRfaW5mbyB2ZXJzaW9uICV1IHJlcG9ydGVkIGJ5IGZpcm13YXJlXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgICAgICBjb21wLmdldF9jb21wb25lbnRfaW5mby52ZXIpO1xuJiM0MztcdFx0ZXJyID0gMDtcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bnVtX2NvbXBvbmVudHMgPSBsaXN0X2luZm8tXHUwMDNlbnVtX2NvbXBvbmVudHM7XG4mIzQzO1x0aWYgKG51bV9jb21wb25lbnRzIFx1MDAzZSBQRFNfQ09SRV9GV19DT01QT05FTlRfTElTVF9MRU4pIHtcbiYjNDM7XHRcdGVyciA9IC1FTk9NRU07XG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHBkc2MtXHUwMDNlZndfY29tcG9uZW50cy5udW1fY29tcG9uZW50cyA9IG51bV9jb21wb25lbnRzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG51bV9jb21wb25lbnRzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0c3RydWN0IHBkc19jb3JlX2Z3X2NvbXBvbmVudF9pbmZvICppbmZvID1cbiYjNDM7XHRcdFx0XHUwMDI2cGRzYy1cdTAwM2Vmd19jb21wb25lbnRzLmluZm9baV07XG4mIzQzO1xuJiM0MztcdFx0bWVtY3B5KGluZm8sIFx1MDAyNmxpc3RfaW5mby1cdTAwM2VpbmZvW2ldLCBzaXplb2YoKmluZm8pKTtcbiYjNDM7XHRcdGluZm8tXHUwMDNldmVyc2lvbltQRFNfQ09SRV9GV19DT01QT05FTlRfVkVSX0JVRkxFTiAtIDFdID0gMDtcbiYjNDM7XHRcdGluZm8tXHUwMDNlbmFtZVtQRFNfQ09SRV9GV19DT01QT05FTlRfTkFNRV9CVUZMRU4gLSAxXSA9IDA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7b3V0OlxuJiM0MztcdGtmcmVlKGxpc3RfaW5mbyk7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBwZHNjX2RldmNtZF9zZW5kX2NvbXBvbmVudChzdHJ1Y3QgcGRzYyAqcGRzYyxcbiYjNDM7XHRcdFx0XHQgICAgICBzdHJ1Y3QgcGRzX2NvcmVfZmxhc2hfY29tcG9uZW50ICppbmZvLFxuJiM0MztcdFx0XHRcdCAgICAgIHUxNiBpbmZvX3N6LCBkbWFfYWRkcl90IGFkZHIsIHUzMiBsZW5ndGgsXG4mIzQzO1x0XHRcdFx0ICAgICAgdTMyIG9mZnNldCwgdTE2IHNsb3RfaWQsXG4mIzQzO1x0XHRcdFx0ICAgICAgdW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgKmNvbXApXG4mIzQzO3tcbiYjNDM7XHR1bmlvbiBwZHNfY29yZV9kZXZfY21kIGNtZCA9IHtcbiYjNDM7XHRcdC5zZW5kX2NvbXBvbmVudC5vcGNvZGUgPSBQRFNfQ09SRV9DTURfU0VORF9DT01QT05FTlQsXG4mIzQzO1x0XHQuc2VuZF9jb21wb25lbnQudmVyID0gMSxcbiYjNDM7XHRcdC5zZW5kX2NvbXBvbmVudC5vcGVyYXRpb24gPSBQRFNfQ09SRV9TRU5EX0NPTVBPTkVOVF9TVEFSVCxcbiYjNDM7XHRcdC5zZW5kX2NvbXBvbmVudC5kYXRhX3BhID0gY3B1X3RvX2xlNjQoYWRkciksXG4mIzQzO1x0XHQuc2VuZF9jb21wb25lbnQuZGF0YV9sZW4gPSBjcHVfdG9fbGUzMihsZW5ndGgpLFxuJiM0MztcdFx0LnNlbmRfY29tcG9uZW50Lm9mZnNldCA9IGNwdV90b19sZTMyKG9mZnNldCksXG4mIzQzO1x0XHQuc2VuZF9jb21wb25lbnQuc2xvdF9pZCA9IHNsb3RfaWQsXG4mIzQzO1x0fTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSAzMDAgKiBIWjtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHN0YXJ0X3RpbWU7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBlbmRfdGltZTtcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHRzdGFydF90aW1lID0gamlmZmllcztcbiYjNDM7XHRlbmRfdGltZSA9IHN0YXJ0X3RpbWUgJiM0MzsgdGltZW91dDtcbiYjNDM7XHRkbyB7XG4mIzQzO1x0XHQvKiBwcmV2ZW50IG5vaXN5L2JlbmlnbiBkZXZjbWQgZmFpbHVyZXMgKi9cbiYjNDM7XHRcdGVyciA9IHBkc2NfZGV2Y21kX3dpdGhfZGF0YV9ub21zZyhwZHNjLCBcdTAwMjZjbWQsIGluZm8sIGluZm9fc3osXG4mIzQzO1x0XHRcdFx0XHRcdCAgY29tcCwgNjApO1xuJiM0MztcdFx0aWYgKGVyciAhPSAtRUFHQUlOKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XG4mIzQzO1x0XHQvKiBpZiByZXF1aXJlZCwgc3Vic2VxdWVudCBjb21tYW5kcyBjaGVjayBzdGF0dXMgb2ZcbiYjNDM7XHRcdCAqIFBEU19DT1JFX0NNRF9TRU5EX0NPTVBPTkVOVCBjb21tYW5kLCB3aGljaCByZXR1cm5zXG4mIzQzO1x0XHQgKiBFQUdBSU4gd2hpbGUgdGhlIGNvbW1hbmQgaXMgc3RpbGwgcnVubmluZyxcbiYjNDM7XHRcdCAqIGVsc2Ugd2UgZ2V0IHRoZSBmaW5hbCBjb21tYW5kIHN0YXR1cy5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0Y21kLnNlbmRfY29tcG9uZW50Lm9wZXJhdGlvbiA9IFBEU19DT1JFX1NFTkRfQ09NUE9ORU5UX1NUQVRVUztcbiYjNDM7XHRcdG1zbGVlcCgyMCk7XG4mIzQzO1x0fSB3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgZW5kX3RpbWUpKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGVyciA9PSAtRUFHQUlOIHx8IGVyciA9PSAtRVRJTUVET1VUKVxuJiM0MztcdFx0ZGV2X2VycihwZHNjLVx1MDAzZWRldiwgXCYjMzQ7UERTX0NPUkVfQ01EX1NFTkRfQ09NUE9ORU5UIHRpbWVkIG91dFxcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBlcnI7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcGRzY19mbGFzaF9jb21wb25lbnRfY2h1bmsoc3RydWN0IHBkc2MgKnBkc2MsIHN0cnVjdCBkZXZpY2UgKmRldixcbiYjNDM7XHRcdFx0XHQgICAgICBzdHJ1Y3QgcGRzX2NvcmVfZmxhc2hfY29tcG9uZW50ICppbmZvLFxuJiM0MztcdFx0XHRcdCAgICAgIHUxNiBpbmZvX3N6LCBjb25zdCB1OCAqZGF0YSwgdTE2IGNvcHlfc3osXG4mIzQzO1x0XHRcdFx0ICAgICAgdTMyIG9mZnNldCwgdTggc2xvdF9pZCxcbiYjNDM7XHRcdFx0XHQgICAgICB1bmlvbiBwZHNfY29yZV9kZXZfY29tcCAqY29tcClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwZHNjX2RlZmVycmVkX2RtYSAqZGVmZXJyZWQ7XG4mIzQzO1x0ZG1hX2FkZHJfdCBkbWFfYWRkcjtcbiYjNDM7XHR1OCAqY29tcG9uZW50X2RhdGE7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0ZGVmZXJyZWQgPSBrbWFsbG9jX29iaigqZGVmZXJyZWQsIEdGUF9LRVJORUwpO1xuJiM0MztcdGlmICghZGVmZXJyZWQpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0Y29tcG9uZW50X2RhdGEgPSBrbWVtZHVwKGRhdGEsIGNvcHlfc3osIEdGUF9LRVJORUwpO1xuJiM0MztcdGlmICghY29tcG9uZW50X2RhdGEpIHtcbiYjNDM7XHRcdGtmcmVlKGRlZmVycmVkKTtcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZG1hX2FkZHIgPSBkbWFfbWFwX3NpbmdsZShkZXYsIGNvbXBvbmVudF9kYXRhLCBjb3B5X3N6LCBETUFfVE9fREVWSUNFKTtcbiYjNDM7XHRpZiAoZG1hX21hcHBpbmdfZXJyb3IoZGV2LCBkbWFfYWRkcikpIHtcbiYjNDM7XHRcdGRldl9lcnIoZGV2LFxuJiM0MztcdFx0XHRcJiMzNDtGYWlsZWQgdG8gZG1hX21hcCBjb21wb25lbnRfZGF0YSBhdCBvZmZzZXQgMHgleCBjb3B5X3N6IDB4JXhcXG5cJiMzNDssXG4mIzQzO1x0XHRcdG9mZnNldCwgY29weV9zeik7XG4mIzQzO1x0XHRrZnJlZShjb21wb25lbnRfZGF0YSk7XG4mIzQzO1x0XHRrZnJlZShkZWZlcnJlZCk7XG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGVyciA9IHBkc2NfZGV2Y21kX3NlbmRfY29tcG9uZW50KHBkc2MsIGluZm8sIGluZm9fc3osIGRtYV9hZGRyLFxuJiM0MztcdFx0XHRcdFx0IGNvcHlfc3osIG9mZnNldCwgc2xvdF9pZCwgY29tcCk7XG4mIzQzO1x0aWYgKGVyciA9PSAtRVRJTUVET1VUIHx8IGVyciA9PSAtRUFHQUlOKSB7XG4mIzQzO1x0XHRwZHNjX2RlZmVycmVkX2RtYV9hZGQocGRzYywgZGVmZXJyZWQsIGRtYV9hZGRyLFxuJiM0MztcdFx0XHRcdCAgICAgIGNvbXBvbmVudF9kYXRhLCBjb3B5X3N6LCBETUFfVE9fREVWSUNFKTtcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRrZnJlZShkZWZlcnJlZCk7XG4mIzQzO1x0ZG1hX3VubWFwX3NpbmdsZShkZXYsIGRtYV9hZGRyLCBjb3B5X3N6LCBETUFfVE9fREVWSUNFKTtcbiYjNDM7XHRrZnJlZShjb21wb25lbnRfZGF0YSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBlcnI7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcGRzY19mbGFzaF9jb21wb25lbnQoc3RydWN0IHBsZG1mdyAqY29udGV4dCxcbiYjNDM7XHRcdFx0XHRzdHJ1Y3QgcGxkbWZ3X2NvbXBvbmVudCAqY29tcG9uZW50KVxuJiM0Mzt7XG4mIzQzO1x0Y2hhciBjb21wb25lbnRfbmFtZV9idWZbUERTQ19GV19DT01QT05FTlRfRlVMTF9OQU1FX0JVRkxFTl07XG4mIzQzO1x0c3RydWN0IHBkc19jb3JlX2Z3dV9wcml2ICpwcml2ID1cbiYjNDM7XHRcdGNvbnRhaW5lcl9vZihjb250ZXh0LCBzdHJ1Y3QgcGRzX2NvcmVfZnd1X3ByaXYsIGNvbnRleHQpO1xuJiM0MztcdHN0cnVjdCBwZHNfY29yZV9mbGFzaF9jb21wb25lbnQgKmNvbXBvbmVudF9pbmZvO1xuJiM0MztcdGNvbnN0IGNoYXIgKmNvbXBvbmVudF9uYW1lID0gTlVMTDtcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBjb250ZXh0LVx1MDAzZWRldjtcbiYjNDM7XHRzdHJ1Y3QgcGRzYyAqcGRzYyA9IHByaXYtXHUwMDNlcGRzYztcbiYjNDM7XHR1MTYgYnVmX3N6LCBpbmZvX3N6O1xuJiM0MztcdHN0cnVjdCBkZXZsaW5rICpkbDtcbiYjNDM7XHR1OCBjb21wb25lbnRfdHlwZTtcbiYjNDM7XHR1MzIgdG90YWxfbGVuO1xuJiM0MztcdHUzMiBvZmZzZXQ7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0Y29tcG9uZW50X3R5cGUgPSBwZHNjX2dldF9jb21wb25lbnRfdHlwZV9ieV9pZChwZHNjLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgICAgY29tcG9uZW50LVx1MDAzZWlkZW50aWZpZXIpO1xuJiM0MztcdGlmIChjb21wb25lbnRfdHlwZSkge1xuJiM0MztcdFx0Y29uc3QgY2hhciAqdHlwZV9uYW1lID0gcGRzY19md190eXBlX3RvX25hbWUoY29tcG9uZW50X3R5cGUpO1xuJiM0MztcbiYjNDM7XHRcdGlmIChjb21wb25lbnRfdHlwZSA9PSBQRFNfQ09SRV9GV19UWVBFX01BSU4pIHtcbiYjNDM7XHRcdFx0Y29tcG9uZW50X25hbWUgPSBcJiMzNDtmd1wmIzM0OztcbiYjNDM7XHRcdH0gZWxzZSBpZiAodHlwZV9uYW1lKSB7XG4mIzQzO1x0XHRcdHNucHJpbnRmKGNvbXBvbmVudF9uYW1lX2J1Ziwgc2l6ZW9mKGNvbXBvbmVudF9uYW1lX2J1ZiksXG4mIzQzO1x0XHRcdFx0IFwmIzM0OyVzJXNcJiMzNDssIFBEU0NfRldfQ09NUE9ORU5UX1BSRUZJWCwgdHlwZV9uYW1lKTtcbiYjNDM7XHRcdFx0Y29tcG9uZW50X25hbWUgPSBjb21wb25lbnRfbmFtZV9idWY7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRkbCA9IHByaXZfdG9fZGV2bGluayhwZHNjKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHBkc2Nfc2tpcF9jb21wb25lbnQocHJpdiwgY29tcG9uZW50LVx1MDAzZWlkZW50aWZpZXIpKSB7XG4mIzQzO1x0XHRkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9zdGF0dXNfbm90aWZ5KGRsLCBcJiMzNDtTa2lwcGVkXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0XHQgICBjb21wb25lbnRfbmFtZSwgMCwgMCk7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHRvdGFsX2xlbiA9IGNvbXBvbmVudC1cdTAwM2Vjb21wb25lbnRfc2l6ZTtcbiYjNDM7XHRkZXZfZGJnKGRldixcbiYjNDM7XHRcdFwmIzM0O2NvbXBvbmVudCBuYW1lICVzIGNsYXNzICV1IGlkICV1IGFjdF9tZXRoICV1IHZlcl9zdHIgJS4qcyBpbmRleCAldSBzaXplICV1XFxuXCYjMzQ7LFxuJiM0MztcdFx0Y29tcG9uZW50X25hbWUgPzogXCYjMzQ7KHVua25vd24pXCYjMzQ7LCBjb21wb25lbnQtXHUwMDNlY2xhc3NpZmljYXRpb24sXG4mIzQzO1x0XHRjb21wb25lbnQtXHUwMDNlaWRlbnRpZmllciwgY29tcG9uZW50LVx1MDAzZWFjdGl2YXRpb25fbWV0aG9kLFxuJiM0MztcdFx0Y29tcG9uZW50LVx1MDAzZXZlcnNpb25fbGVuLCBjb21wb25lbnQtXHUwMDNldmVyc2lvbl9zdHJpbmcsXG4mIzQzO1x0XHRjb21wb25lbnQtXHUwMDNlaW5kZXgsIGNvbXBvbmVudC1cdTAwM2Vjb21wb25lbnRfc2l6ZSk7XG4mIzQzO1xuJiM0MztcdGJ1Zl9zeiA9IHNpemVvZihwZHNjLVx1MDAzZWNtZF9yZWdzLVx1MDAzZWRhdGEpO1xuJiM0MztcdGluZm9fc3ogPSBzdHJ1Y3Rfc2l6ZShjb21wb25lbnRfaW5mbywgdmVyc2lvbl9zdHIsXG4mIzQzO1x0XHRcdCAgICAgIGNvbXBvbmVudC1cdTAwM2V2ZXJzaW9uX2xlbik7XG4mIzQzO1x0aWYgKGluZm9fc3ogXHUwMDNlIGJ1Zl9zeikge1xuJiM0MztcdFx0ZGV2X2VycihkZXYsIFwmIzM0O2NvbXBvbmVudF9pbmZvIHNpemUgJWQgdG9vIGJpZywgbWF4IHNpemU6ICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRpbmZvX3N6LCBidWZfc3opO1xuJiM0MztcdFx0cmV0dXJuIC1FTk9TUEM7XG4mIzQzO1x0fVxuJiM0MztcdGNvbXBvbmVudF9pbmZvID0gdnphbGxvYyhpbmZvX3N6KTtcbiYjNDM7XHRpZiAoIWNvbXBvbmVudF9pbmZvKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdGNvbXBvbmVudF9pbmZvLVx1MDAzZWNvbXBhcmlzb25fc3RhbXAgPVxuJiM0MztcdFx0Y3B1X3RvX2xlMzIoY29tcG9uZW50LVx1MDAzZWNvbXBhcmlzb25fc3RhbXApO1xuJiM0MztcdGNvbXBvbmVudF9pbmZvLVx1MDAzZWltYWdlX3NpemUgPSBjcHVfdG9fbGUzMih0b3RhbF9sZW4pO1xuJiM0MztcdGNvbXBvbmVudF9pbmZvLVx1MDAzZWNsYXNzaWZpY2F0aW9uID0gY3B1X3RvX2xlMTYoY29tcG9uZW50LVx1MDAzZWNsYXNzaWZpY2F0aW9uKTtcbiYjNDM7XHRjb21wb25lbnRfaW5mby1cdTAwM2VpZGVudGlmaWVyID0gY3B1X3RvX2xlMTYoY29tcG9uZW50LVx1MDAzZWlkZW50aWZpZXIpO1xuJiM0MztcdGNvbXBvbmVudF9pbmZvLVx1MDAzZW9wdGlvbnMgPSBjcHVfdG9fbGUxNihjb21wb25lbnQtXHUwMDNlb3B0aW9ucyk7XG4mIzQzO1x0Y29tcG9uZW50X2luZm8tXHUwMDNldmVyc2lvbl9zdHJfdHlwZSA9IGNvbXBvbmVudC1cdTAwM2V2ZXJzaW9uX3R5cGU7XG4mIzQzO1x0Y29tcG9uZW50X2luZm8tXHUwMDNldmVyc2lvbl9zdHJfbGVuID0gY29tcG9uZW50LVx1MDAzZXZlcnNpb25fbGVuO1xuJiM0MztcdG1lbWNweShjb21wb25lbnRfaW5mby1cdTAwM2V2ZXJzaW9uX3N0ciwgY29tcG9uZW50LVx1MDAzZXZlcnNpb25fc3RyaW5nLFxuJiM0MztcdCAgICAgICBjb21wb25lbnQtXHUwMDNldmVyc2lvbl9sZW4pO1xuJiM0MztcbiYjNDM7XHRvZmZzZXQgPSAwO1xuJiM0MztcdHdoaWxlIChvZmZzZXQgXHUwMDNjIHRvdGFsX2xlbikge1xuJiM0MztcdFx0dW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgY29tcCA9IHt9O1xuJiM0MztcdFx0dTE2IGNvcHlfc3o7XG4mIzQzO1xuJiM0MztcdFx0Y29weV9zeiA9IG1pbl90KHVuc2lnbmVkIGludCwgUERTX1BBR0VfU0laRSxcbiYjNDM7XHRcdFx0XHR0b3RhbF9sZW4gLSBvZmZzZXQpO1xuJiM0MztcbiYjNDM7XHRcdGVyciA9IHBkc2NfZmxhc2hfY29tcG9uZW50X2NodW5rKHBkc2MsIGRldiwgY29tcG9uZW50X2luZm8sXG4mIzQzO1x0XHRcdFx0XHRcdCBpbmZvX3N6LFxuJiM0MztcdFx0XHRcdFx0XHQgY29tcG9uZW50LVx1MDAzZWNvbXBvbmVudF9kYXRhICYjNDM7XG4mIzQzO1x0XHRcdFx0XHRcdCBvZmZzZXQsIGNvcHlfc3osIG9mZnNldCxcbiYjNDM7XHRcdFx0XHRcdFx0IFBEU19DT1JFX0ZXX1NMT1RfSU5WQUxJRCxcbiYjNDM7XHRcdFx0XHRcdFx0IFx1MDAyNmNvbXApO1xuJiM0MztcdFx0aWYgKGVyciBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICBjb21wLnNlbmRfY29tcG9uZW50LmNvbXBhdF9yZXNwb25zZSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICAoY29tcC5zZW5kX2NvbXBvbmVudC5jb21wYXRfcmVzcG9uc2VfY29kZSA9PVxuJiM0MztcdFx0ICAgICBQRFNfQ09SRV9DT01QT05FTlRfU1RBTVBfSURFTlRJQ0FMIHx8XG4mIzQzO1x0XHQgICAgIGNvbXAuc2VuZF9jb21wb25lbnQuY29tcGF0X3Jlc3BvbnNlX2NvZGUgPT1cbiYjNDM7XHRcdCAgICAgUERTX0NPUkVfQ09NUE9ORU5UX1NUQU1QX0xPV0VSKSkge1xuJiM0MztcdFx0XHRlcnIgPSAwO1xuJiM0MztcdFx0XHRkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9zdGF0dXNfbm90aWZ5KGRsLCBcJiMzNDtTa2lwcGVkXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgIGNvbXBvbmVudF9uYW1lLFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgIDAsIDApO1xuJiM0MztcdFx0XHRnb3RvIHNraXBfY29tcG9uZW50O1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGlmIChlcnIpIHtcbiYjNDM7XHRcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKHByaXYtXHUwMDNlZXh0YWNrLFxuJiM0MztcdFx0XHRcdFx0ICAgXCYjMzQ7RmFpbGVkIHRvIGZsYXNoIGNvbXBvbmVudFwmIzM0Oyk7XG4mIzQzO1x0XHRcdGdvdG8gZXJyX291dDtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRvZmZzZXQgJiM0Mzs9IGNvcHlfc3o7XG4mIzQzO1x0XHRkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9zdGF0dXNfbm90aWZ5KGRsLFxuJiM0MztcdFx0XHRcdFx0XHQgICBcJiMzNDtFcmFzaW5nL0ZsYXNoaW5nXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0XHQgICBjb21wb25lbnRfbmFtZSwgb2Zmc2V0LFxuJiM0MztcdFx0XHRcdFx0XHQgICB0b3RhbF9sZW4pO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0dmZyZWUoY29tcG9uZW50X2luZm8pO1xuJiM0MztcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7ZXJyX291dDpcbiYjNDM7XHRkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9zdGF0dXNfbm90aWZ5KGRsLFxuJiM0MztcdFx0XHRcdFx0ICAgXCYjMzQ7RXJhc2luZy9GbGFzaGluZyBDb21wb25lbnQgRmFpbGVkXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0ICAgY29tcG9uZW50X25hbWUsIDAsIDApO1xuJiM0Mztza2lwX2NvbXBvbmVudDpcbiYjNDM7XHR2ZnJlZShjb21wb25lbnRfaW5mbyk7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBwZHNjX2RldmNtZF9maW5hbGl6ZV91cGRhdGUoc3RydWN0IHBkc2MgKnBkc2MpXG4mIzQzO3tcbiYjNDM7XHR1bmlvbiBwZHNfY29yZV9kZXZfY21kIGNtZCA9IHtcbiYjNDM7XHRcdC5maW5hbGl6ZV91cGRhdGUub3Bjb2RlID0gUERTX0NPUkVfQ01EX0ZJTkFMSVpFX1VQREFURSxcbiYjNDM7XHRcdC5maW5hbGl6ZV91cGRhdGUudmVyID0gMSxcbiYjNDM7XHR9O1xuJiM0MztcdHVuaW9uIHBkc19jb3JlX2Rldl9jb21wIGNvbXAgPSB7fTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHBkc2NfZGV2Y21kKHBkc2MsIFx1MDAyNmNtZCwgXHUwMDI2Y29tcCwgcGRzYy1cdTAwM2VkZXZjbWRfdGltZW91dCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcGRzY19maW5hbGl6ZV91cGRhdGUoc3RydWN0IHBsZG1mdyAqY29udGV4dClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwZHNfY29yZV9md3VfcHJpdiAqcHJpdiA9XG4mIzQzO1x0XHRjb250YWluZXJfb2YoY29udGV4dCwgc3RydWN0IHBkc19jb3JlX2Z3dV9wcml2LCBjb250ZXh0KTtcbiYjNDM7XHRjb25zdCBjaGFyICpjb21wb25lbnRfbmFtZSA9IHByaXYtXHUwMDNlcGFyYW1zLVx1MDAzZWNvbXBvbmVudDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHN0YXJ0X3RpbWUsIGVuZF90aW1lO1xuJiM0MztcdHN0cnVjdCBkZXZpY2UgKmRldiA9IGNvbnRleHQtXHUwMDNlZGV2O1xuJiM0MztcdHN0cnVjdCBwZHNjICpwZHNjID0gcHJpdi1cdTAwM2VwZHNjO1xuJiM0MztcdHN0cnVjdCBkZXZsaW5rICpkbDtcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHRkbCA9IHByaXZfdG9fZGV2bGluayhwZHNjKTtcbiYjNDM7XG4mIzQzO1x0c3RhcnRfdGltZSA9IGppZmZpZXM7XG4mIzQzO1x0ZW5kX3RpbWUgPSBzdGFydF90aW1lICYjNDM7IChQRFNDX0ZXX0lOU1RBTExfVElNRU9VVCAqIEhaKTtcbiYjNDM7XHRkbyB7XG4mIzQzO1x0XHRlcnIgPSBwZHNjX2RldmNtZF9maW5hbGl6ZV91cGRhdGUocGRzYyk7XG4mIzQzO1x0XHRpZiAoZXJyICE9IC1FQUdBSU4pXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRcdGRldl9kYmcoZGV2LCBcJiMzNDtyZXRyeWluZyBmaW5hbGl6ZV91cGRhdGU6ICVwZVxcblwmIzM0OywgRVJSX1BUUihlcnIpKTtcbiYjNDM7XHRcdG1zbGVlcCgyMCk7XG4mIzQzO1x0fSB3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgZW5kX3RpbWUpIFx1MDAyNlx1MDAyNiBlcnIgPT0gLUVBR0FJTik7XG4mIzQzO1xuJiM0MztcdGlmIChlcnIpIHtcbiYjNDM7XHRcdGRldmxpbmtfZmxhc2hfdXBkYXRlX3N0YXR1c19ub3RpZnkoZGwsIFwmIzM0O0ZpbmFsaXplIFVwZGF0ZSBGYWlsZWRcJiMzNDssXG4mIzQzO1x0XHRcdFx0XHRcdCAgIGNvbXBvbmVudF9uYW1lLCAwLCAwKTtcbiYjNDM7XHRcdE5MX1NFVF9FUlJfTVNHX01PRChwcml2LVx1MDAzZWV4dGFjaywgXCYjMzQ7RmluYWxpemUgdXBkYXRlIGZhaWxlZFwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZGV2bGlua19mbGFzaF91cGRhdGVfc3RhdHVzX25vdGlmeShkbCwgXCYjMzQ7RmluYWxpemVkIFVwZGF0ZVwmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdCAgIGNvbXBvbmVudF9uYW1lLCAwLCAwKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBwbGRtZndfb3BzIHBkc2NfcGxkbWZ3X29wcyA9IHtcbiYjNDM7XHQubWF0Y2hfcmVjb3JkID0gcGRzY19tYXRjaF9yZWNvcmRfZGVzY3MsXG4mIzQzO1x0LnNlbmRfcGFja2FnZV9kYXRhID0gcGRzY19zZW5kX3BhY2thZ2VfZGF0YSxcbiYjNDM7XHQuc2VuZF9jb21wb25lbnRfdGFibGUgPSBwZHNjX3NlbmRfY29tcG9uZW50X3RhYmxlLFxuJiM0MztcdC5mbGFzaF9jb21wb25lbnQgPSBwZHNjX2ZsYXNoX2NvbXBvbmVudCxcbiYjNDM7XHQuZmluYWxpemVfdXBkYXRlID0gcGRzY19maW5hbGl6ZV91cGRhdGVcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcGRzY19wbGRtX2Zpcm13YXJlX3VwZGF0ZShzdHJ1Y3QgcGRzYyAqcGRzYyxcbiYjNDM7XHRcdFx0XHQgICAgIHN0cnVjdCBkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9wYXJhbXMgKnBhcmFtcyxcbiYjNDM7XHRcdFx0XHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayxcbiYjNDM7XHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcGRzX2NvcmVfZnd1X3ByaXYgcHJpdiA9IHt9O1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdGlmICghcGRzYy1cdTAwM2Vmd19jb21wb25lbnRzLm51bV9jb21wb25lbnRzKSB7XG4mIzQzO1x0XHRlcnIgPSBwZHNjX2dldF9jb21wb25lbnRfaW5mbyhwZHNjKTtcbiYjNDM7XHRcdGlmIChlcnIpIHtcbiYjNDM7XHRcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcbiYjNDM7XHRcdFx0XHRcdCAgIFwmIzM0O0ZhaWxlZCB0byBnZXQgY29tcG9uZW50IGluZm9cJiMzNDspO1xuJiM0MztcdFx0XHRyZXR1cm4gZXJyO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHBhcmFtcy1cdTAwM2Vjb21wb25lbnQpIHtcbiYjNDM7XHRcdHU4IHR5cGUgPSBwZHNjX25hbWVfdG9fZndfdHlwZShwYXJhbXMtXHUwMDNlY29tcG9uZW50KTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoIXR5cGUgfHwgIXBkc2NfY29tcG9uZW50X3R5cGVfZXhpc3RzKHBkc2MsIHR5cGUpKSB7XG4mIzQzO1x0XHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFwmIzM0O1Vua25vd24gY29tcG9uZW50IG5hbWVcJiMzNDspO1xuJiM0MztcdFx0XHRyZXR1cm4gLUVOT0VOVDtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdElOSVRfTElTVF9IRUFEKFx1MDAyNnByaXYuY29tcG9uZW50cyk7XG4mIzQzO1x0cHJpdi5jb250ZXh0Lm9wcyA9IFx1MDAyNnBkc2NfcGxkbWZ3X29wcztcbiYjNDM7XHRwcml2LmNvbnRleHQuZGV2ID0gcGRzYy1cdTAwM2VkZXY7XG4mIzQzO1x0cHJpdi5wYXJhbXMgPSBwYXJhbXM7XG4mIzQzO1x0cHJpdi5leHRhY2sgPSBleHRhY2s7XG4mIzQzO1x0cHJpdi5wZHNjID0gcGRzYztcbiYjNDM7XG4mIzQzO1x0ZXJyID0gcGxkbWZ3X2ZsYXNoX2ltYWdlKFx1MDAyNnByaXYuY29udGV4dCwgZncpO1xuJiM0MztcdGlmICghZXJyIFx1MDAyNlx1MDAyNiBwYXJhbXMtXHUwMDNlY29tcG9uZW50IFx1MDAyNlx1MDAyNiAhcHJpdi5jb21wb25lbnRfZm91bmQpIHtcbiYjNDM7XHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXG4mIzQzO1x0XHRcdFx0ICAgXCYjMzQ7UmVxdWVzdGVkIGNvbXBvbmVudCBub3QgcHJlc2VudCBpbiBmaXJtd2FyZSBwYWNrYWdlXCYjMzQ7KTtcbiYjNDM7XHRcdGVyciA9IC1FTk9FTlQ7XG4mIzQzO1x0fVxuJiM0MztcdHBkc2NfZnJlZV9md3VfcHJpdihcdTAwMjZwcml2KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IHBkc2NfZmlybXdhcmVfdXBkYXRlKHN0cnVjdCBwZHNjICpwZHNjLFxuJiM0MztcdFx0XHQgc3RydWN0IGRldmxpbmtfZmxhc2hfdXBkYXRlX3BhcmFtcyAqcGFyYW1zLFxuJiM0MztcdFx0XHQgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0aWYgKHBkc2MtXHUwMDNlZGV2X2lkZW50LnZlcnNpb24gXHUwMDNlPSBQRFNfQ09SRV9JREVOVElUWV9WRVJTSU9OXzIgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIHBkc2MtXHUwMDNlZGV2X2lkZW50LmNhcGFiaWxpdGllcyBcdTAwMjZcbiYjNDM7XHRcdGNwdV90b19sZTY0KFBEU19DT1JFX0RFVl9DQVBfUExETV9GV19VUERBVEUpKVxuJiM0MztcdFx0ZXJyID0gcGRzY19wbGRtX2Zpcm13YXJlX3VwZGF0ZShwZHNjLCBwYXJhbXMsIGV4dGFjayxcbiYjNDM7XHRcdFx0XHRcdFx0cGFyYW1zLVx1MDAzZWZ3KTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRlcnIgPSBwZHNjX2xlZ2FjeV9maXJtd2FyZV91cGRhdGUocGRzYywgcGFyYW1zLCBleHRhY2spO1xuJiM0MztcbiYjNDM7XHQvKiBJbnZhbGlkYXRlIGNhY2hlZCBjb21wb25lbnQgaW5mbyBzbyBuZXh0IGluZm9fZ2V0IHJlZnJlc2hlcyAqL1xuJiM0MztcdHBkc2NfZndfY29tcG9uZW50c19pbnZhbGlkYXRlKHBkc2MpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZXJyO1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9tYWluLmNcbmluZGV4IDhkOTRhNGQ3MDM5NWUuLjVlMWIwNzg1MDE2M2IgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvbWFpbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvbWFpbi5jXG5AQCAtMjEsNiAmIzQzOzIxLDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHBkc2NfaWRfdGFibGVbXSA9IHtcbiB9O1xuIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBwZHNjX2lkX3RhYmxlKTtcbiBcbiYjNDM7c3RhdGljIHZvaWQgcGRzY19zdG9wX2hlYWx0aF90aHJlYWQoc3RydWN0IHBkc2MgKnBkc2MpO1xuJiM0MztcbiBzdGF0aWMgdm9pZCBwZHNjX3dkdGltZXJfY2Ioc3RydWN0IHRpbWVyX2xpc3QgKnQpXG4ge1xuIFx0c3RydWN0IHBkc2MgKnBkc2MgPSB0aW1lcl9jb250YWluZXJfb2YocGRzYywgdCwgd2R0aW1lcik7XG5AQCAtMzE1LDYgJiM0MzszMTcsNyBAQCBzdGF0aWMgaW50IHBkc2NfaW5pdF9wZihzdHJ1Y3QgcGRzYyAqcGRzYylcbiBcdFx0ZGVzdHJveV93b3JrcXVldWUocGRzYy1cdTAwM2V3cSk7XG4gXHRtdXRleF9kZXN0cm95KFx1MDAyNnBkc2MtXHUwMDNlY29uZmlnX2xvY2spO1xuIFx0bXV0ZXhfZGVzdHJveShcdTAwMjZwZHNjLVx1MDAzZWRldmNtZF9sb2NrKTtcbiYjNDM7XHRwZHNjX2RlZmVycmVkX2RtYV9mcmVlKHBkc2MpO1xuIFx0cGNpX2ZyZWVfaXJxX3ZlY3RvcnMocGRzYy1cdTAwM2VwZGV2KTtcbiBlcnJfb3V0X3VubWFwX2JhcnM6XG4gXHRwZHNjX3VubWFwX2JhcnMocGRzYyk7XG5AQCAtMzUzLDYgJiM0MzszNTYsOCBAQCBzdGF0aWMgaW50IHBkc2NfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXG4gXHRwZHNjLVx1MDAzZXBkZXYgPSBwZGV2O1xuIFx0cGRzYy1cdTAwM2VkZXYgPSBcdTAwMjZwZGV2LVx1MDAzZWRldjtcbiBcdHNldF9iaXQoUERTQ19TX0lOSVRJTkdfRFJJVkVSLCBcdTAwMjZwZHNjLVx1MDAzZXN0YXRlKTtcbiYjNDM7XHRJTklUX0xJU1RfSEVBRChcdTAwMjZwZHNjLVx1MDAzZWRlZmVycmVkX2RtYV9saXN0KTtcbiYjNDM7XHRzcGluX2xvY2tfaW5pdChcdTAwMjZwZHNjLVx1MDAzZWRlZmVycmVkX2RtYV9sb2NrKTtcbiBcdHBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBwZHNjKTtcbiBcdHBkc2NfZGVidWdmc19hZGRfZGV2KHBkc2MpO1xuIFxuQEAgLTQ1OCw2ICYjNDM7NDYzLDcgQEAgc3RhdGljIHZvaWQgcGRzY19yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gXHR9XG4gXG4gXHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XG4mIzQzO1x0cGRzY19kZWZlcnJlZF9kbWFfZnJlZShwZHNjKTtcbiBcbiBcdGlkYV9mcmVlKFx1MDAyNnBkc2NfaWRhLCBwZHNjLVx1MDAzZXVpZCk7XG4gXHRwZHNjX2RlYnVnZnNfZGVsX2RldihwZHNjKTtcbkBAIC01MDUsNiAmIzQzOzUxMSw3IEBAIHN0YXRpYyB2b2lkIHBkc2NfcmVzZXRfcHJlcGFyZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBcdHBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7XG4gXHRpZiAocGNpX2lzX2VuYWJsZWQocGRldikpXG4gXHRcdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcbiYjNDM7XHRwZHNjX2RlZmVycmVkX2RtYV9mcmVlKHBkc2MpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBwZHNjX3Jlc2V0X2RvbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wZHMvcGRzX2NvcmVfaWYuaCBiL2luY2x1ZGUvbGludXgvcGRzL3Bkc19jb3JlX2lmLmhcbmluZGV4IDE3YTg3YzFhNTVkN2MuLjkwMWUxZTYyOGY4OTAgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3Bkcy9wZHNfY29yZV9pZi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3Bkcy9wZHNfY29yZV9pZi5oXG5AQCAtNDAsNiAmIzQzOzQwLDE0IEBAIGVudW0gcGRzX2NvcmVfY21kX29wY29kZSB7XG4gXHRQRFNfQ09SRV9DTURfRldfRE9XTkxPQURcdD0gNCxcbiBcdFBEU19DT1JFX0NNRF9GV19DT05UUk9MXHRcdD0gNSxcbiBcbiYjNDM7XHRQRFNfQ09SRV9DTURfR0VUX0NPTVBPTkVOVF9JTkZPXHQ9IDYsXG4mIzQzO1x0UERTX0NPUkVfQ01EX1NFTkRfUEtHX0RBVEFcdD0gNyxcbiYjNDM7XHRQRFNfQ09SRV9DTURfU0VORF9DT01QT05FTlRfVEJMXHQ9IDgsXG4mIzQzO1x0UERTX0NPUkVfQ01EX1NFTkRfQ09NUE9ORU5UXHQ9IDksXG4mIzQzO1x0UERTX0NPUkVfQ01EX0ZJTkFMSVpFX1VQREFURVx0PSAxMCxcbiYjNDM7XHRQRFNfQ09SRV9DTURfTUFUQ0hfUkVDT1JEX0RFU0NcdD0gMTEsXG4mIzQzO1x0UERTX0NPUkVfQ01EX0hPU1RfTUVNXHRcdD0gMTIsXG4mIzQzO1xuIFx0LyogU1IvSU9WIGNvbW1hbmRzICovXG4gXHRQRFNfQ09SRV9DTURfVkZfR0VUQVRUUlx0XHQ9IDYwLFxuIFx0UERTX0NPUkVfQ01EX1ZGX1NFVEFUVFJcdFx0PSA2MSxcbkBAIC0xMDAsNiAmIzQzOzEwOCwxNiBAQCBzdHJ1Y3QgcGRzX2NvcmVfZHJ2X2lkZW50aXR5IHtcbiBcdGNoYXIgICBkcml2ZXJfdmVyX3N0clszMl07XG4gfTtcbiBcbiYjNDM7LyoqXG4mIzQzOyAqIGVudW0gcGRzX2NvcmVfZGV2X2NhcGFiaWxpdHkgLSBEZXZpY2UgY2FwYWJpbGl0aWVzXG4mIzQzOyAqIEBQRFNfQ09SRV9ERVZfQ0FQX1BMRE1fRldfVVBEQVRFOiBEZXZpY2Ugb25seSBzdXBwb3J0cyBGVyB1cGRhdGUgdmlhIFBMRE1cbiYjNDM7ICogQFBEU19DT1JFX0RFVl9DQVBfSE9TVF9NRU06IERldmljZSBzdXBwb3J0cyBob3N0IG1lbW9yeSBmb3IgZncgdXNlXG4mIzQzOyAqL1xuJiM0MztlbnVtIHBkc19jb3JlX2Rldl9jYXBhYmlsaXR5IHtcbiYjNDM7XHRQRFNfQ09SRV9ERVZfQ0FQX1BMRE1fRldfVVBEQVRFID0gQklUKDApLFxuJiM0MztcdFBEU19DT1JFX0RFVl9DQVBfSE9TVF9NRU0gPSBCSVQoMSksXG4mIzQzO307XG4mIzQzO1xuICNkZWZpbmUgUERTX0RFVl9UWVBFX01BWFx0MTZcbiAvKipcbiAgKiBzdHJ1Y3QgcGRzX2NvcmVfZGV2X2lkZW50aXR5IC0gRGV2aWNlIGlkZW50aXR5IGluZm9ybWF0aW9uXG5AQCAtMTE5LDYgJiM0MzsxMzcsMTEgQEAgc3RydWN0IHBkc19jb3JlX2Rydl9pZGVudGl0eSB7XG4gICpcdFx0ICAgICAgdmFsdWUgaW4gdXNlY3MgdG8gZGV2aWNlIHVuaXRzIHVzaW5nOlxuICAqXHRcdCAgICAgIGRldmljZSB1bml0cyA9IHVzZWNzICogbXVsdCAvIGRpdlxuICAqIEB2aWZfdHlwZXM6ICAgICAgICBIb3cgbWFueSBvZiBlYWNoIFZJRiBkZXZpY2UgdHlwZSBpcyBzdXBwb3J0ZWRcbiYjNDM7ICogQG1heF9md19zbG90czogICAgIE51bWJlciBvZiBmaXJtd2FyZSBjb21wb25lbnRzIHJlcG9ydGVkIGJ5IGRldmljZVxuJiM0MzsgKlx0XHQgICAgICBvbmx5IHN1cHBvcnRlZCBvbiB2ZXJzaW9uIFx1MDAzZT0gUERTX0NPUkVfSURFTlRJVFlfVkVSU0lPTl8yXG4mIzQzOyAqIEByc3ZkMjpcdCAgICAgIFdvcmQgYm91bmRhcnkgcGFkZGluZ1xuJiM0MzsgKiBAY2FwYWJpbGl0aWVzOiAgICAgRGV2aWNlIGNhcGFiaWxpdGllc1xuJiM0MzsgKlx0XHQgICAgICBvbmx5IHN1cHBvcnRlZCBvbiB2ZXJzaW9uIFx1MDAzZT0gUERTX0NPUkVfSURFTlRJVFlfVkVSU0lPTl8yXG4gICovXG4gc3RydWN0IHBkc19jb3JlX2Rldl9pZGVudGl0eSB7XG4gXHR1OCAgICAgdmVyc2lvbjtcbkBAIC0xMzEsOSAmIzQzOzE1NCwxMyBAQCBzdHJ1Y3QgcGRzX2NvcmVfZGV2X2lkZW50aXR5IHtcbiBcdF9fbGUzMiBpbnRyX2NvYWxfbXVsdDtcbiBcdF9fbGUzMiBpbnRyX2NvYWxfZGl2O1xuIFx0X19sZTE2IHZpZl90eXBlc1tQRFNfREVWX1RZUEVfTUFYXTtcbiYjNDM7XHRfX2xlMTYgbWF4X2Z3X3Nsb3RzO1xuJiM0MztcdHU4ICAgICByc3ZkMls2XTtcbiYjNDM7XHRfX2xlNjQgY2FwYWJpbGl0aWVzO1xuIH07XG4gXG4gI2RlZmluZSBQRFNfQ09SRV9JREVOVElUWV9WRVJTSU9OXzFcdDFcbiYjNDM7I2RlZmluZSBQRFNfQ09SRV9JREVOVElUWV9WRVJTSU9OXzJcdDJcbiBcbiAvKipcbiAgKiBzdHJ1Y3QgcGRzX2NvcmVfZGV2X2lkZW50aWZ5X2NtZCAtIERyaXZlci9kZXZpY2UgaWRlbnRpZnkgY29tbWFuZFxuQEAgLTI3NSwxMSAmIzQzOzMwMiwyMCBAQCBlbnVtIHBkc19jb3JlX2Z3X2NvbnRyb2xfb3BlciB7XG4gXHRQRFNfQ09SRV9GV19HRVRfTElTVCAgICAgICAgICAgICAgID0gNyxcbiB9O1xuIFxuJiM0MzsvKipcbiYjNDM7ICogZW51bSBwZHNfY29yZV9md19zbG90IC0gRmlybXdhcmUgc2xvdCBpZGVudGlmaWVyc1xuJiM0MzsgKiBAUERTX0NPUkVfRldfU0xPVF9JTlZBTElEOiBMZXQgZmlybXdhcmUgc2VsZWN0IHNsb3QgYmFzZWQgb24gcGFja2FnZSBtZXRhZGF0YVxuJiM0MzsgKiBAUERTX0NPUkVfRldfU0xPVF9BOiAgICAgICBQcmltYXJ5IGZpcm13YXJlIHNsb3QgQVxuJiM0MzsgKiBAUERTX0NPUkVfRldfU0xPVF9COiAgICAgICBQcmltYXJ5IGZpcm13YXJlIHNsb3QgQlxuJiM0MzsgKiBAUERTX0NPUkVfRldfU0xPVF9HT0xEOiAgICBHb2xkL3JlY292ZXJ5IGZpcm13YXJlIHNsb3RcbiYjNDM7ICogQFBEU19DT1JFX0ZXX1NMT1RfTUFYOiAgICAgU2VudGluZWwgdmFsdWUgaW5kaWNhdGluZyBubyBzbG90IHJlc29sdmVkXG4mIzQzOyAqL1xuIGVudW0gcGRzX2NvcmVfZndfc2xvdCB7XG4gXHRQRFNfQ09SRV9GV19TTE9UX0lOVkFMSUQgICAgPSAwLFxuIFx0UERTX0NPUkVfRldfU0xPVF9BXHQgICAgPSAxLFxuIFx0UERTX0NPUkVfRldfU0xPVF9CICAgICAgICAgID0gMixcbiBcdFBEU19DT1JFX0ZXX1NMT1RfR09MRCAgICAgICA9IDMsXG4mIzQzO1x0UERTX0NPUkVfRldfU0xPVF9NQVggICAgICAgID0gMHhmZixcbiB9O1xuIFxuIC8qKlxuQEAgLTQ0Niw2ICYjNDM7NDgyLDQyMyBAQCBzdHJ1Y3QgcGRzX2NvcmVfdmZfY3RybF9jb21wIHtcbiBcdHU4XHRzdGF0dXM7XG4gfTtcbiBcbiYjNDM7LyoqXG4mIzQzOyAqIHN0cnVjdCBwZHNfY29yZV9zZW5kX3BrZ19kYXRhX2NtZCAtIFNlbmQgcGFja2FnZSBkYXRhIGNvbW1hbmRcbiYjNDM7ICogQG9wY29kZTogT3Bjb2RlIFBEU19DT1JFX0NNRF9TRU5EX1BLR19EQVRBXG4mIzQzOyAqIEB2ZXI6IERyaXZlciYjMzk7cyBtYXggc3VwcG9ydCB2ZXJzaW9uIG9mIHRoaXMgY29tbWFuZFxuJiM0MzsgKiBAdG90YWxfbGVuOiBUb3RhbCBsZW5ndGggb2YgdGhlIHBhY2thZ2UgZGF0YVxuJiM0MzsgKiBAb2Zmc2V0OiBPZmZzZXQgaW4gdGhlIHBhY2thZ2UgZGF0YSwgbm9uLXplcm8gaWYgbXVsdGlwbGUgY29tbWFuZHMgYXJlXG4mIzQzOyAqXHQgICAgbmVlZGVkIGZvciBzZW5kaW5nIHRoZSBwYWNrYWdlIGRhdGFcbiYjNDM7ICogQGRhdGFfbGVuOiBMZW5ndGggb2YgZGF0YSBzdG9yZWQgYXQgZGF0YV9wYVxuJiM0MzsgKiBAZGF0YV9wYTogRGF0YSBwaHlzaWNhbCBhZGRyZXNzIGZvciBETUEgdG8gZGV2aWNlXG4mIzQzOyAqXG4mIzQzOyAqIFRoZSBwYWNrYWdlIGRhdGEgbWF5IGJlIHRvbyBsYXJnZSB0byBzdG9yZSBpbiBhIHNpbmdsZSBidWZmZXIsIHNvIG11bHRpcGxlXG4mIzQzOyAqIFBEU19DT1JFX0NNRF9TRU5EX1BLR19EQVRBIGRldmNtZHMgbWF5IGJlIG5lZWRlZC5cbiYjNDM7ICovXG4mIzQzO3N0cnVjdCBwZHNfY29yZV9zZW5kX3BrZ19kYXRhX2NtZCB7XG4mIzQzO1x0dTggb3Bjb2RlO1xuJiM0MztcdHU4IHZlcjtcbiYjNDM7XHRfX2xlMTYgdG90YWxfbGVuO1xuJiM0MztcdF9fbGUxNiBvZmZzZXQ7XG4mIzQzO1x0X19sZTE2IGRhdGFfbGVuO1xuJiM0MztcdF9fbGU2NCBkYXRhX3BhO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHN0cnVjdCBwZHNfY29yZV9zZW5kX3BrZ19kYXRhX2NvbXAgLSBTZW5kIHBhY2thZ2UgZGF0YSBjb21wbGV0aW9uXG4mIzQzOyAqIEBzdGF0dXM6IFN0YXR1cyBvZiB0aGUgY29tbWFuZCAoZW51bSBwZHNfY29yZV9zdGF0dXNfY29kZSlcbiYjNDM7ICogQHZlcjogRGV2aWNlJiMzOTtzIG1heCBzdXBwb3J0ZWQgdmVyc2lvbiBvZiB0aGlzIGNvbW1hbmRcbiYjNDM7ICogQHJzdmQ6IFdvcmQgYm91bmRhcnkgcGFkZGluZ1xuJiM0MzsgKi9cbiYjNDM7c3RydWN0IHBkc19jb3JlX3NlbmRfcGtnX2RhdGFfY29tcCB7XG4mIzQzO1x0dTggc3RhdHVzO1xuJiM0MztcdHU4IHZlcjtcbiYjNDM7XHR1OCByc3ZkWzJdO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHN0cnVjdCBwZHNfY29yZV9jb21wb25lbnRfdGJsIC0gQ29tcG9uZW50IHRhYmxlIGRldGFpbHNcbiYjNDM7ICogQGNvbXBhcmlzb25fc3RhbXA6IENvbXBhcmlzb24gc3RhbXAgdXNlZCBmb3IgY29tcG9uZW50IHZlcnNpb24gY2hlY2tzXG4mIzQzOyAqIEBjbGFzc2lmaWNhdGlvbjogVmVuZG9yIHNwZWNpZmljIGNsYXNzaWZpY2F0aW9uIGluZm9cbiYjNDM7ICogQGlkZW50aWZpZXI6IENvbXBvbmVudCYjMzk7cyBJRFxuJiM0MzsgKiBAdHJhbnNmZXJfZmxhZzogUGFydCBvZiB0aGUgY29tcG9uZW50IHRhYmxlIHRoaXMgcmVxdWVzdCByZXByZXNlbnRzXG4mIzQzOyAqIEB2ZXJzaW9uX3N0cl90eXBlOiBUaGUgdHlwZXMgb2Ygc3RyaW5ncyB1c2VkXG4mIzQzOyAqIEB2ZXJzaW9uX3N0cl9sZW46IExlbmd0aCBvZiBAdmVyc2lvbl9zdHJcbiYjNDM7ICogQHZlcnNpb25fc3RyOiBDb21wb25lbnQgdmVyc2lvbiBpbmZvcm1hdGlvblxuJiM0MzsgKi9cbiYjNDM7c3RydWN0IHBkc19jb3JlX2NvbXBvbmVudF90Ymwge1xuJiM0MztcdF9fbGUzMiBjb21wYXJpc29uX3N0YW1wO1xuJiM0MztcdF9fbGUxNiBjbGFzc2lmaWNhdGlvbjtcbiYjNDM7XHRfX2xlMTYgaWRlbnRpZmllcjtcbiYjNDM7XHR1OCAgICAgdHJhbnNmZXJfZmxhZztcbiYjNDM7XHR1OCAgICAgdmVyc2lvbl9zdHJfdHlwZTtcbiYjNDM7XHR1OCAgICAgdmVyc2lvbl9zdHJfbGVuO1xuJiM0MztcdHU4ICAgICB2ZXJzaW9uX3N0cltdO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHN0cnVjdCBwZHNfY29yZV9zZW5kX2NvbXBvbmVudF90YmxfY21kIC0gU2VuZCBjb21wb25lbnQgdGFibGUgY29tbWFuZFxuJiM0MzsgKiBAb3Bjb2RlOiBPcGNvZGUgUERTX0NPUkVfQ01EX1NFTkRfQ09NUE9ORU5UX1RCTFxuJiM0MzsgKiBAdmVyOiBEcml2ZXImIzM5O3MgbWF4IHN1cHBvcnQgdmVyc2lvbiBvZiB0aGlzIGNvbW1hbmRcbiYjNDM7ICogQHNsb3RfaWQ6IGVudW0gcGRzX2NvcmVfZndfc2xvdFxuJiM0MzsgKiBAcnN2ZDogV29yZCBib3VuZGFyeSBwYWRkaW5nXG4mIzQzOyAqXG4mIzQzOyAqIEV4cGVjdHMgdG8gZmluZCBjb21wb25lbnQgdGFibGUgaW5mbyAoc3RydWN0IHBkc19jb3JlX2NvbXBvbmVudF90YmwpXG4mIzQzOyAqIGluIGNtZF9yZWdzLVx1MDAzZWRhdGEuICBEcml2ZXIgc2hvdWxkIGtlZXAgdGhlIGRldmNtZCBpbnRlcmZhY2UgbG9ja2VkXG4mIzQzOyAqIHdoaWxlIHByZXBhcmluZyB0aGUgY29tcG9uZW50IHRhYmxlIGluZm8uXG4mIzQzOyAqL1xuJiM0MztzdHJ1Y3QgcGRzX2NvcmVfc2VuZF9jb21wb25lbnRfdGJsX2NtZCB7XG4mIzQzO1x0dTggb3Bjb2RlO1xuJiM0MztcdHU4IHZlcjtcbiYjNDM7XHR1OCBzbG90X2lkO1xuJiM0MztcdHU4IHJzdmQ7XG4mIzQzO307XG4mIzQzO1xuJiM0MztlbnVtIHBkc19jb3JlX2NvbXBvbmVudF9yZXNwX2NvZGUge1xuJiM0MztcdFBEU19DT1JFX0NPTVBPTkVOVF9WQUxJRCA9IDB4MCxcbiYjNDM7XHRQRFNfQ09SRV9DT01QT05FTlRfU1RBTVBfSURFTlRJQ0FMID0gMHgxLFxuJiM0MztcdFBEU19DT1JFX0NPTVBPTkVOVF9TVEFNUF9MT1dFUiA9IDB4MixcbiYjNDM7XHRQRFNfQ09SRV9DT01QT05FTlRfU1RBTVBfT1JfVkVSU0lPTl9JTlZBTElEID0gMHgzLFxuJiM0MztcdFBEU19DT1JFX0NPTVBPTkVOVF9DT05GTElDVCA9IDB4NCxcbiYjNDM7XHRQRFNfQ09SRV9DT01QT05FTlRfUFJFUkVRU19OT1RfTUVUID0gMHg1LFxuJiM0MztcdFBEU19DT1JFX0NPTVBPTkVOVF9OT1RfU1VQUE9SVEVEID0gMHg2LFxuJiM0MztcdFBEU19DT1JFX0NPTVBPTkVOVF9GV19UWVBFX0lOVkFMSUQgPSAweGQwLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHN0cnVjdCBwZHNfY29yZV9zZW5kX2NvbXBvbmVudF90YmxfY29tcCAtIFNlbmQgY29tcG9uZW50IHRhYmxlIGNvbXBsZXRpb25cbiYjNDM7ICogQHN0YXR1czogU3RhdHVzIG9mIHRoZSBjb21tYW5kIChlbnVtIHBkc19jb3JlX3N0YXR1c19jb2RlKVxuJiM0MzsgKiBAdmVyOiBEZXZpY2UmIzM5O3MgbWF4IHN1cHBvcnRlZCB2ZXJzaW9uIG9mIHRoaXMgY29tbWFuZFxuJiM0MzsgKiBAY29tcGxldGlvbl9jb2RlOiBDb21wb25lbnQgY29tcGxldGlvbiBjb2RlXG4mIzQzOyAqIEByZXNwb25zZTogQ29tcG9uZW50IHJlc3BvbnNlXG4mIzQzOyAqIEByZXNwb25zZV9jb2RlOiBDb21wb25lbnQgcmVzcG9uc2UgY29kZVxuJiM0MzsgKiBAc2xvdF9pZDogQWN0dWFsIHNsb3RfaWQgb2YgdGhlIGNvbXBvbmVudCAoZW51bSBwZHNfY29yZV9md19zbG90KVxuJiM0MzsgKiBAcnN2ZDogV29yZCBib3VuZGFyeSBwYWRkaW5nXG4mIzQzOyAqL1xuJiM0MztzdHJ1Y3QgcGRzX2NvcmVfc2VuZF9jb21wb25lbnRfdGJsX2NvbXAge1xuJiM0MztcdHU4IHN0YXR1cztcbiYjNDM7XHR1OCB2ZXI7XG4mIzQzO1x0dTggY29tcGxldGlvbl9jb2RlO1xuJiM0MztcdHU4IHJlc3BvbnNlO1xuJiM0MztcdHU4IHJlc3BvbnNlX2NvZGU7XG4mIzQzO1x0dTggc2xvdF9pZDtcbiYjNDM7XHR1OCByc3ZkWzJdO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGVudW0gcGRzX2NvcmVfc2VuZF9jb21wb25lbnRfb3AgLSBQRFNfQ09SRV9DTURfU0VORF9DT01QT05FTlQgb3BlcmF0aW9uXG4mIzQzOyAqIEBQRFNfQ09SRV9TRU5EX0NPTVBPTkVOVF9TVEFSVDogSW5pdGlhbCBvcGVyYXRpb24gdG8gc3RhcnQgdHJhbnNmZXJcbiYjNDM7ICogQFBEU19DT1JFX1NFTkRfQ09NUE9ORU5UX1NUQVRVUzogU3Vic2VxdWVudCBjYWxscyB0byBjaGVjayBvbiBzdGF0dXNcbiYjNDM7ICovXG4mIzQzO2VudW0gcGRzX2NvcmVfc2VuZF9jb21wb25lbnRfb3Age1xuJiM0MztcdFBEU19DT1JFX1NFTkRfQ09NUE9ORU5UX1NUQVJUID0gMCxcbiYjNDM7XHRQRFNfQ09SRV9TRU5EX0NPTVBPTkVOVF9TVEFUVVMgPSAxLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7I2RlZmluZSBQRFNfQ09SRV9GV19DT01QT05FTlRfSURfSU5WQUxJRCAweEZGRkZcbiYjNDM7LyoqXG4mIzQzOyAqIHN0cnVjdCBwZHNfY29yZV9mbGFzaF9jb21wb25lbnQgLSBDb21wb25lbnQgZGV0YWlsc1xuJiM0MzsgKiBAY29tcGFyaXNvbl9zdGFtcDogQ29tcGFyaXNvbiBzdGFtcCB1c2VkIGZvciBjb21wb25lbnQgdmVyc2lvbiBjaGVja3NcbiYjNDM7ICogQGltYWdlX3NpemU6IENvbXBvbmVudCBpbWFnZSBzaXplXG4mIzQzOyAqIEBjbGFzc2lmaWNhdGlvbjogVmVuZG9yIHNwZWNpZmljIGNsYXNzaWZpY2F0aW9uIGluZm9cbiYjNDM7ICogQGlkZW50aWZpZXI6IENvbXBvbmVudCYjMzk7cyBJRFxuJiM0MzsgKiBAb3B0aW9uczogQ29tcG9uZW50IG9wdGlvbnNcbiYjNDM7ICogQHJzdmQ6IFdvcmQgYm91bmRhcnkgcGFkZGluZ1xuJiM0MzsgKiBAdmVyc2lvbl9zdHJfdHlwZTogVGhlIHR5cGVzIG9mIHN0cmluZ3MgdXNlZFxuJiM0MzsgKiBAdmVyc2lvbl9zdHJfbGVuOiBMZW5ndGggb2YgQHZlcnNpb25fc3RyXG4mIzQzOyAqIEB2ZXJzaW9uX3N0cjogQ29tcG9uZW50IHZlcnNpb24gaW5mb3JtYXRpb25cbiYjNDM7ICovXG4mIzQzO3N0cnVjdCBwZHNfY29yZV9mbGFzaF9jb21wb25lbnQge1xuJiM0MztcdF9fbGUzMiBjb21wYXJpc29uX3N0YW1wO1xuJiM0MztcdF9fbGUzMiBpbWFnZV9zaXplO1xuJiM0MztcdF9fbGUxNiBjbGFzc2lmaWNhdGlvbjtcbiYjNDM7XHRfX2xlMTYgaWRlbnRpZmllcjtcbiYjNDM7XHRfX2xlMTYgb3B0aW9ucztcbiYjNDM7XHR1OCByc3ZkWzNdO1xuJiM0MztcdHU4IHZlcnNpb25fc3RyX3R5cGU7XG4mIzQzO1x0dTggdmVyc2lvbl9zdHJfbGVuO1xuJiM0MztcdHU4IHZlcnNpb25fc3RyW107XG4mIzQzO307XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogc3RydWN0IHBkc19jb3JlX3NlbmRfY29tcG9uZW50X2NtZCAtIFNlbmQgY29tcG9uZW50IGNvbW1hbmRcbiYjNDM7ICogQG9wY29kZTogT3Bjb2RlIFBEU19DT1JFX0NNRF9TRU5EX0NPTVBPTkVOVFxuJiM0MzsgKiBAdmVyOiBEcml2ZXImIzM5O3MgbWF4IHN1cHBvcnRlZCB2ZXJzaW9uIG9mIHRoaXMgY29tbWFuZFxuJiM0MzsgKiBAc2xvdF9pZDogZW51bSBwZHNfY29yZV9md19zbG90XG4mIzQzOyAqIEBvcGVyYXRpb246IGVudW0gcGRzX2NvcmVfc2VuZF9jb21wb25lbnRfb3BcbiYjNDM7ICogQG9mZnNldDogT2Zmc2V0IGludG8gdGhlIGNvbXBvbmVudCwgbm9uLXplcm8gaWYgbXVsdGlwbGUgY29tbWFuZHNcbiYjNDM7ICpcdCAgICBhcmUgbmVlZGVkIGZvciBhIHNpbmdsZSBjb21wb25lbnRcbiYjNDM7ICogQGRhdGFfbGVuOiBMZW5ndGggb2YgdGhpcyBwYXJ0IG9mIHRoZSBjb21wb25lbnQgc3RvcmVkIGF0IEBkYXRhX3BhXG4mIzQzOyAqIEByc3ZkOiBXb3JkIGJvdW5kYXJ5IHBhZGRpbmdcbiYjNDM7ICogQGRhdGFfcGE6IERNQSBhZGRyZXNzIG9mIHRoZSBjb21wb25lbnRcbiYjNDM7ICpcbiYjNDM7ICogQSBjb21wb25lbnQgbWF5IGJlIHRvbyBsYXJnZSB0byBzdG9yZSBpbiBhIHNpbmdsZSBidWZmZXIsIHNvIG11bHRpcGxlXG4mIzQzOyAqIFBEU19DT1JFX0NNRF9TRU5EX0NPTVBPTkVOVCBkZXZjbWRzIG1heSBiZSBuZWVkZWQuXG4mIzQzOyAqXG4mIzQzOyAqIEV4cGVjdHMgdG8gZmluZCBmbGFzaCBjb21wb25lbnQgaW5mbyAoc3RydWN0IHBkc19jb3JlX2ZsYXNoX2NvbXBvbmVudClcbiYjNDM7ICogaW4gY21kX3JlZ3MtXHUwMDNlZGF0YS4gRHJpdmVyIHNob3VsZCBrZWVwIHRoZSBkZXZjbWQgaW50ZXJmYWNlIGxvY2tlZFxuJiM0MzsgKiB3aGlsZSBwcmVwYXJpbmcgYW5kIHNlbmRpbmcgdGhlIGZsYXNoIGNvbXBvbmVudCBpbmZvLlxuJiM0MzsgKi9cbiYjNDM7c3RydWN0IHBkc19jb3JlX3NlbmRfY29tcG9uZW50X2NtZCB7XG4mIzQzO1x0dTggb3Bjb2RlO1xuJiM0MztcdHU4IHZlcjtcbiYjNDM7XHR1OCBzbG90X2lkO1xuJiM0MztcdHU4IG9wZXJhdGlvbjtcbiYjNDM7XHRfX2xlMzIgb2Zmc2V0O1xuJiM0MztcdF9fbGUzMiBkYXRhX2xlbjtcbiYjNDM7XHR1OCByc3ZkWzRdO1xuJiM0MztcdF9fbGU2NCBkYXRhX3BhO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHN0cnVjdCBwZHNfY29yZV9zZW5kX2NvbXBvbmVudF9jb21wIC0gU2VuZCBjb21wb25lbnQgY29tcGxldGlvblxuJiM0MzsgKiBAc3RhdHVzOiBTdGF0dXMgb2YgdGhlIGNvbW1hbmQgKGVudW0gcGRzX2NvcmVfc3RhdHVzX2NvZGUpXG4mIzQzOyAqIEB2ZXI6IERldmljZSYjMzk7cyBtYXggc3VwcG9ydGVkIHZlcnNpb24gb2YgdGhpcyBjb21tYW5kXG4mIzQzOyAqIEBjb21wbGV0aW9uX2NvZGU6IENvbXBsZXRpb24gY29kZVxuJiM0MzsgKiBAY29tcGF0X3Jlc3BvbnNlOiBDb21wYXRpYmlsaXR5IHJlc3BvbnNlICgwID0gQ29tcG9uZW50IGNhbiBiZSB1cGRhdGVkKVxuJiM0MzsgKiBAY29tcGF0X3Jlc3BvbnNlX2NvZGU6IENvbXBhdGliaWxpdHkgcmVzcG9uc2UgY29kZVxuJiM0MzsgKiBAcnN2ZDogV29yZCBib3VuZGFyeSBwYWRkaW5nXG4mIzQzOyAqL1xuJiM0MztzdHJ1Y3QgcGRzX2NvcmVfc2VuZF9jb21wb25lbnRfY29tcCB7XG4mIzQzO1x0dTggc3RhdHVzO1xuJiM0MztcdHU4IHZlcjtcbiYjNDM7XHR1OCBjb21wbGV0aW9uX2NvZGU7XG4mIzQzO1x0dTggY29tcGF0X3Jlc3BvbnNlO1xuJiM0MztcdHU4IGNvbXBhdF9yZXNwb25zZV9jb2RlO1xuJiM0MztcdHU4IHJzdmRbM107XG4mIzQzO307XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogZW51bSBwZHNfY29yZV9md19jb21wb25lbnRfdHlwZSAtIEZpcm13YXJlIGNvbXBvbmVudCB0eXBlXG4mIzQzOyAqIEBQRFNfQ09SRV9GV19UWVBFX1VOS05PV046IFVua25vd24gY29tcG9uZW50IHR5cGVcbiYjNDM7ICogQFBEU19DT1JFX0ZXX1RZUEVfTUFJTjogTWFpbiBmaXJtd2FyZVxuJiM0MzsgKiBAUERTX0NPUkVfRldfVFlQRV9CT09UOiBCb290IGxvYWRlclxuJiM0MzsgKiBAUERTX0NPUkVfRldfVFlQRV9DUExEOiBDUExEIGZpcm13YXJlXG4mIzQzOyAqIEBQRFNfQ09SRV9GV19UWVBFX1NFQ1VSRTogU2VjdXJlIGZpcm13YXJlXG4mIzQzOyAqIEBQRFNfQ09SRV9GV19UWVBFX0ZQR0E6IEZQR0EgY29uZmlndXJhdGlvblxuJiM0MzsgKiBAUERTX0NPUkVfRldfVFlQRV9TVUNfTUFJTjogU3lzdGVtIFVuaXQgQ29udHJvbGxlciBmaXJtd2FyZVxuJiM0MzsgKiBAUERTX0NPUkVfRldfVFlQRV9TVUNfQk9PVDogU3lzdGVtIFVuaXQgQ29udHJvbGxlciBib290bG9hZGVyXG4mIzQzOyAqIEBQRFNfQ09SRV9GV19UWVBFX1VCT09UOiBVLUJvb3QgYm9vdGxvYWRlclxuJiM0MzsgKlxuJiM0MzsgKiBHb2xkL3JlY292ZXJ5IHZhcmlhbnRzIGFyZSBpZGVudGlmaWVkIGJ5IHNsb3RfaWQgPT0gUERTX0NPUkVfRldfU0xPVF9HT0xEXG4mIzQzOyAqIGFuZCByZXBvcnRlZCB3aXRoIGEgXCYjMzQ7LmdvbGRcJiMzNDsgc3VmZml4IChlLmcuLCBmdy5nb2xkKS5cbiYjNDM7ICovXG4mIzQzO2VudW0gcGRzX2NvcmVfZndfY29tcG9uZW50X3R5cGUge1xuJiM0MztcdFBEU19DT1JFX0ZXX1RZUEVfVU5LTk9XTiAgID0gMCxcbiYjNDM7XHRQRFNfQ09SRV9GV19UWVBFX01BSU4gICAgICA9IDEsXG4mIzQzO1x0UERTX0NPUkVfRldfVFlQRV9CT09UICAgICAgPSAyLFxuJiM0MztcdFBEU19DT1JFX0ZXX1RZUEVfQ1BMRCAgICAgID0gMyxcbiYjNDM7XHRQRFNfQ09SRV9GV19UWVBFX1NFQ1VSRSAgICA9IDQsXG4mIzQzO1x0UERTX0NPUkVfRldfVFlQRV9GUEdBICAgICAgPSA1LFxuJiM0MztcdFBEU19DT1JFX0ZXX1RZUEVfU1VDX01BSU4gID0gNixcbiYjNDM7XHRQRFNfQ09SRV9GV19UWVBFX1NVQ19CT09UICA9IDcsXG4mIzQzO1x0UERTX0NPUkVfRldfVFlQRV9VQk9PVCAgICAgPSA4LFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGVudW0gcGRzX2NvcmVfY29tcG9uZW50X2luZm9fZmxhZ3MgLSBDb21wb25lbnQgaW5mbyBmbGFnc1xuJiM0MzsgKiBAUERTX0NPUkVfRldfQ09NUE9ORU5UX0lORk9fRl9SVU5OSU5HOiBDb21wb25lbnQgaXMgY3VycmVudGx5IHJ1bm5pbmdcbiYjNDM7ICogQFBEU19DT1JFX0ZXX0NPTVBPTkVOVF9JTkZPX0ZfU1RBUlRVUDogQ29tcG9uZW50IHZlcnNpb24gb24gbmV4dCBGVyBib290XG4mIzQzOyAqIEBQRFNfQ09SRV9GV19DT01QT05FTlRfSU5GT19GX0ZJWEVEOiBDb21wb25lbnQgaXMgZml4ZWQgYW5kIGNhbm5vdCBiZSB1cGRhdGVkXG4mIzQzOyAqIEBQRFNfQ09SRV9GV19DT01QT05FTlRfSU5GT19GX1VQREFURV9CWV9OQU1FOiBDb21wb25lbnQgY2FuIGJlIHVwZGF0ZWRcbiYjNDM7ICpcdGJ5IG5hbWVcbiYjNDM7ICovXG4mIzQzO2VudW0gcGRzX2NvcmVfY29tcG9uZW50X2luZm9fZmxhZ3Mge1xuJiM0MztcdFBEU19DT1JFX0ZXX0NPTVBPTkVOVF9JTkZPX0ZfUlVOTklORyA9IEJJVCgwKSxcbiYjNDM7XHRQRFNfQ09SRV9GV19DT01QT05FTlRfSU5GT19GX1NUQVJUVVAgPSBCSVQoMSksXG4mIzQzO1x0UERTX0NPUkVfRldfQ09NUE9ORU5UX0lORk9fRl9GSVhFRCA9IEJJVCgyKSxcbiYjNDM7XHRQRFNfQ09SRV9GV19DT01QT05FTlRfSU5GT19GX1VQREFURV9CWV9OQU1FID0gQklUKDMpLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHN0cnVjdCBwZHNfY29yZV9md19jb21wb25lbnRfaW5mbyAtIEdFVF9DT01QT05FTlRfSU5GTyBlbnRyeVxuJiM0MzsgKiBAbmFtZTogQ29tcG9uZW50JiMzOTtzIG5hbWVcbiYjNDM7ICogQGNvbXBvbmVudF90eXBlOiBlbnVtIHBkc19jb3JlX2Z3X2NvbXBvbmVudF90eXBlXG4mIzQzOyAqIEByc3ZkOiBXb3JkIGJvdW5kYXJ5IHBhZGRpbmdcbiYjNDM7ICogQGZsYWdzOiBlbnVtIHBkc19jb3JlX2NvbXBvbmVudF9pbmZvX2ZsYWdzXG4mIzQzOyAqIEBpZGVudGlmaWVyOiBDb21wb25lbnQmIzM5O3MgaWRlbnRpZmllclxuJiM0MzsgKiBAc2xvdF9pZDogQ29tcG9uZW50JiMzOTtzIHNsb3QgaWRlbnRpZmllclxuJiM0MzsgKiBAdmVyc2lvbjogQ29tcG9uZW50JiMzOTtzIHZlcnNpb25cbiYjNDM7ICovXG4mIzQzO3N0cnVjdCBwZHNfY29yZV9md19jb21wb25lbnRfaW5mbyB7XG4mIzQzOyNkZWZpbmUgUERTX0NPUkVfRldfQ09NUE9ORU5UX05BTUVfQlVGTEVOIDI0XG4mIzQzO1x0Y2hhciBuYW1lW1BEU19DT1JFX0ZXX0NPTVBPTkVOVF9OQU1FX0JVRkxFTl07XG4mIzQzO1x0dTggY29tcG9uZW50X3R5cGU7XG4mIzQzO1x0dTggcnN2ZFszXTtcbiYjNDM7XHRfX2xlMTYgZmxhZ3M7XG4mIzQzO1x0dTggaWRlbnRpZmllcjtcbiYjNDM7XHR1OCBzbG90X2lkO1xuJiM0MzsjZGVmaW5lIFBEU19DT1JFX0ZXX0NPTVBPTkVOVF9WRVJfQlVGTEVOIDMyXG4mIzQzO1x0Y2hhciB2ZXJzaW9uW1BEU19DT1JFX0ZXX0NPTVBPTkVOVF9WRVJfQlVGTEVOXTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOyNkZWZpbmUgUERTX0NPUkVfRldfQ09NUE9ORU5UX0xJU1RfTEVOXHQoKFBEU19QQUdFX1NJWkUgLSA4KSAvIFxcXG4mIzQzO1x0XHRzaXplb2Yoc3RydWN0IHBkc19jb3JlX2Z3X2NvbXBvbmVudF9pbmZvKSlcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBzdHJ1Y3QgcGRzX2NvcmVfY29tcG9uZW50X2xpc3RfaW5mbyAtIEdFVF9DT01QT05FTlRfSU5GTyBjb21wbGV0aW9uIGRhdGFcbiYjNDM7ICogQG51bV9jb21wb25lbnRzOiBOdW1iZXIgb2YgdmFsaWQgY29tcG9uZW50c1xuJiM0MzsgKiBAcnN2ZDogV29yZCBib3VuZGFyeSBwYWRkaW5nXG4mIzQzOyAqIEBpbmZvOiBMaXN0IG9mIHZhbGlkIGNvbXBvbmVudHNcbiYjNDM7ICovXG4mIzQzO3N0cnVjdCBwZHNfY29yZV9jb21wb25lbnRfbGlzdF9pbmZvIHtcbiYjNDM7XHR1OCBudW1fY29tcG9uZW50cztcbiYjNDM7XHR1OCByc3ZkWzddO1xuJiM0MztcdHN0cnVjdCBwZHNfY29yZV9md19jb21wb25lbnRfaW5mbyBpbmZvW1BEU19DT1JFX0ZXX0NPTVBPTkVOVF9MSVNUX0xFTl07XG4mIzQzO307XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogc3RydWN0IHBkc19jb3JlX2dldF9jb21wb25lbnRfaW5mb19jbWQgLSBHRVRfQ09NUE9ORU5UX0lORk8gY29tbWFuZFxuJiM0MzsgKiBAb3Bjb2RlOiBQRFNfQ09SRV9DTURfR0VUX0NPTVBPTkVOVF9JTkZPXG4mIzQzOyAqIEB2ZXI6IERyaXZlciYjMzk7cyBtYXggc3VwcG9ydGVkIHZlcnNpb24gb2YgdGhpcyBjb21tYW5kXG4mIzQzOyAqIEBkYXRhX2xlbjogTGVuZ3RoIG9mIGRhdGEgYXQgZGF0YV9wYVxuJiM0MzsgKiBAcnN2ZDogV29yZCBib3VuZGFyeSBwYWRkaW5nXG4mIzQzOyAqIEBkYXRhX3BhOiBETUEgYWRkcmVzcyBvZiBkYXRhXG4mIzQzOyAqXG4mIzQzOyAqIEZXIHBvcHVsYXRlcyBzdHJ1Y3QgcGRzX2NvcmVfY29tcG9uZW50X2xpc3RfaW5mbyBwb2ludGVkIHRvIGJ5IEBkYXRhX3BhXG4mIzQzOyAqL1xuJiM0MztzdHJ1Y3QgcGRzX2NvcmVfZ2V0X2NvbXBvbmVudF9pbmZvX2NtZCB7XG4mIzQzO1x0dTggb3Bjb2RlO1xuJiM0MztcdHU4IHZlcjtcbiYjNDM7XHRfX2xlMTYgZGF0YV9sZW47XG4mIzQzO1x0dTggcnN2ZFs0XTtcbiYjNDM7XHRfX2xlNjQgZGF0YV9wYTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBzdHJ1Y3QgcGRzX2NvcmVfZ2V0X2NvbXBvbmVudF9pbmZvX2NvbXAgLSBHRVRfQ09NUE9ORU5UX0lORk8gY29tcGxldGlvblxuJiM0MzsgKiBAc3RhdHVzOiBlbnVtIHBkc19jb3JlX3N0YXR1c19jb2RlXG4mIzQzOyAqIEB2ZXI6IERldmljZSYjMzk7cyBtYXggc3VwcG9ydGVkIHZlcnNpb24gb2YgdGhpcyBjb21tYW5kXG4mIzQzOyAqIEByc3ZkOiBXb3JkIGJvdW5kYXJ5IHBhZGRpbmdcbiYjNDM7ICovXG4mIzQzO3N0cnVjdCBwZHNfY29yZV9nZXRfY29tcG9uZW50X2luZm9fY29tcCB7XG4mIzQzO1x0dTggc3RhdHVzO1xuJiM0MztcdHU4IHZlcjtcbiYjNDM7XHR1OCByc3ZkWzJdO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHN0cnVjdCBwZHNfY29yZV9maW5hbGl6ZV91cGRhdGVfY21kIC0gRklOQUxJWkVfVVBEQVRFIGNvbW1hbmRcbiYjNDM7ICogQG9wY29kZTogUERTX0NPUkVfQ01EX0ZJTkFMSVpFX1VQREFURVxuJiM0MzsgKiBAdmVyOiBEcml2ZXImIzM5O3MgbWF4IHN1cHBvcnQgdmVyc2lvbiBvZiB0aGlzIGNvbW1hbmRcbiYjNDM7ICogQHJzdmQ6IFdvcmQgYm91bmRhcnkgcGFkZGluZ1xuJiM0MzsgKlxuJiM0MzsgKiBEcml2ZXIgc2VuZHMgYXQgdGhlIGVuZCBvZiB1cGRhdGluZyBhbGwgY29tcG9uZW50cyB0byBmaW5hbGl6ZSB0aGUgdXBkYXRlXG4mIzQzOyAqL1xuJiM0MztzdHJ1Y3QgcGRzX2NvcmVfZmluYWxpemVfdXBkYXRlX2NtZCB7XG4mIzQzO1x0dTggb3Bjb2RlO1xuJiM0MztcdHU4IHZlcjtcbiYjNDM7XHR1OCByc3ZkWzJdO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHN0cnVjdCBwZHNfY29yZV9maW5hbGl6ZV91cGRhdGVfY29tcCAtIEZJTkFMSVpFX1VQREFURSBjb21wbGV0aW9uXG4mIzQzOyAqIEBzdGF0dXM6IGVudW0gcGRzX2NvcmVfc3RhdHVzX2NvZGVcbiYjNDM7ICogQHZlcjogRGV2aWNlJiMzOTtzIG1heCBzdXBwb3J0ZWQgdmVyc2lvbiBvZiB0aGlzIGNvbW1hbmRcbiYjNDM7ICogQHJzdmQ6IFdvcmQgYm91bmRhcnkgcGFkZGluZ1xuJiM0MzsgKi9cbiYjNDM7c3RydWN0IHBkc19jb3JlX2ZpbmFsaXplX3VwZGF0ZV9jb21wIHtcbiYjNDM7XHR1OCBzdGF0dXM7XG4mIzQzO1x0dTggdmVyO1xuJiM0MztcdHU4IHJzdmRbMl07XG4mIzQzO307XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogc3RydWN0IHBkc19jb3JlX21hdGNoX3JlY29yZF9kZXNjX2NtZCAtIE1BVENIX1JFQ09SRF9ERVNDIGNvbW1hbmRcbiYjNDM7ICogQG9wY29kZTogUERTX0NPUkVfQ01EX01BVENIX1JFQ09SRF9ERVNDXG4mIzQzOyAqIEB2ZXI6IERyaXZlciYjMzk7cyBtYXggc3VwcG9ydGVkIHZlcnNpb24gb2YgdGhpcyBjb21tYW5kXG4mIzQzOyAqIEB0eXBlOiBQTERNIERlc2NyaXB0b3IgSWRlbnRpZmllciBUeXBlXG4mIzQzOyAqIEBzaXplOiBMZW5ndGggb2YgdGhlIERlc2NyaXB0b3IgSWRlbnRpZmllciBWYWx1ZVxuJiM0MzsgKiBAcnN2ZDogV29yZCBib3VuZGFyeSBwYWRkaW5nXG4mIzQzOyAqXG4mIzQzOyAqIEV4cGVjdHMgdG8gZmluZCB0aGUgRGVzY3JpcHRvciBJZGVudGlmaWVyIERhdGEgaW4gY21kX3JlZ3MtXHUwMDNlZGF0YS4gRHJpdmVyXG4mIzQzOyAqIHNob3VsZCBrZWVwIHRoZSBkZXZjbWQgaW50ZXJmYWNlIGxvY2tlZCB3aGlsZSBwcmVwYXJpbmcgYW5kIHNlbmRpbmcgdGhpc1xuJiM0MzsgKiBjb21tYW5kLlxuJiM0MzsgKi9cbiYjNDM7c3RydWN0IHBkc19jb3JlX21hdGNoX3JlY29yZF9kZXNjX2NtZCB7XG4mIzQzO1x0dTggb3Bjb2RlO1xuJiM0MztcdHU4IHZlcjtcbiYjNDM7XHRfX2xlMTYgdHlwZTtcbiYjNDM7XHRfX2xlMTYgc2l6ZTtcbiYjNDM7XHR1OCByc3ZkWzJdO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHN0cnVjdCBwZHNfY29yZV9tYXRjaF9yZWNvcmRfZGVzY19jb21wIC0gTUFUQ0hfUkVDT1JEX0RFU0MgY29tcGxldGlvblxuJiM0MzsgKiBAc3RhdHVzOiBlbnVtIHBkc19jb3JlX3N0YXR1c19jb2RlXG4mIzQzOyAqIEB2ZXI6IERldmljZSYjMzk7cyBtYXggc3VwcG9ydGVkIHZlcnNpb24gb2YgdGhpcyBjb21tYW5kXG4mIzQzOyAqIEBtYXRjaDogV2hldGhlciBvciBub3QgdGhlIFJlY29yZCBEZXNjcmlwdG9yIG1hdGNoZXMgdGhlIGRldmljZVxuJiM0MzsgKiBAcnN2ZDogV29yZCBib3VuZGFyeSBwYWRkaW5nXG4mIzQzOyAqXG4mIzQzOyAqIFdoZW4gc3RhdHVzIGlzIFBEU19SQ19TVUNDRVNTLCB0aGVuIEBtYXRjaCBpcyB2YWxpZCwgb3RoZXJ3aXNlIGl0JiMzOTtzXG4mIzQzOyAqIHVuZGVmaW5lZC5cbiYjNDM7ICovXG4mIzQzO3N0cnVjdCBwZHNfY29yZV9tYXRjaF9yZWNvcmRfZGVzY19jb21wIHtcbiYjNDM7XHR1OCBzdGF0dXM7XG4mIzQzO1x0dTggdmVyO1xuJiM0MztcdHU4IG1hdGNoO1xuJiM0MztcdHU4IHJzdmQ7XG4mIzQzO307XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogZW51bSBwZHNfY29yZV9ob3N0X21lbV9vcGVyIC0gSE9TVF9NRU0gc3ViLW9wZXJhdGlvbnNcbiYjNDM7ICogQFBEU19DT1JFX0hPU1RfTUVNX0dFVF9DT1VOVDogUXVlcnkgbnVtYmVyIG9mIG1lbW9yeSByZXF1ZXN0c1xuJiM0MzsgKiBAUERTX0NPUkVfSE9TVF9NRU1fUVVFUlk6ICAgICBRdWVyeSBkZXRhaWxzIG9mIGEgbWVtb3J5IHJlcXVlc3RcbiYjNDM7ICogQFBEU19DT1JFX0hPU1RfTUVNX0FERDogICAgICAgUHJvdmlkZSBhbGxvY2F0ZWQgbWVtb3J5IHRvIGZpcm13YXJlXG4mIzQzOyAqIEBQRFNfQ09SRV9IT1NUX01FTV9ERUw6ICAgICAgIE5vdGlmeSBmaXJtd2FyZSBvZiBtZW1vcnkgZGVhbGxvY2F0aW9uXG4mIzQzOyAqL1xuJiM0MztlbnVtIHBkc19jb3JlX2hvc3RfbWVtX29wZXIge1xuJiM0MztcdFBEU19DT1JFX0hPU1RfTUVNX0dFVF9DT1VOVFx0PSAwLFxuJiM0MztcdFBEU19DT1JFX0hPU1RfTUVNX1FVRVJZXHRcdD0gMSxcbiYjNDM7XHRQRFNfQ09SRV9IT1NUX01FTV9BRERcdFx0PSAyLFxuJiM0MztcdFBEU19DT1JFX0hPU1RfTUVNX0RFTFx0XHQ9IDMsXG4mIzQzO307XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogc3RydWN0IHBkc19jb3JlX2hvc3RfbWVtX2NtZCAtIEhPU1RfTUVNIGNvbW1hbmRcbiYjNDM7ICogQG9wY29kZTogICAgIE9wY29kZSBQRFNfQ09SRV9DTURfSE9TVF9NRU1cbiYjNDM7ICogQG9wZXI6ICAgICAgIE9wZXJhdGlvbiAoZW51bSBwZHNfY29yZV9ob3N0X21lbV9vcGVyKVxuJiM0MzsgKiBAaW5kZXg6ICAgICAgTWVtb3J5IHJlcXVlc3QgaW5kZXggKEdFVF9DT1VOVDogbWF4X2NvdW50LCBRVUVSWTogaW5kZXgpXG4mIzQzOyAqIEB0YWc6ICAgICAgICBUYWcgZm9yIHRoaXMgbWVtb3J5IHJlcXVlc3QgKEFERC9ERUwpXG4mIzQzOyAqIEByZWFzb246ICAgICBSZWFzb24gZm9yIGRlbGV0aW9uIChERUwgb25seSlcbiYjNDM7ICogQHJzdmQ6ICAgICAgIFJlc2VydmVkXG4mIzQzOyAqIEBtYXhfY29udGlnOiBNYXhpbXVtIGNvbnRpZ3VvdXMgbWVtb3J5IHNpemUgKEdFVF9DT1VOVCBvbmx5KVxuJiM0MzsgKiBAc2l6ZTogICAgICAgU2l6ZSBvZiBtZW1vcnkgaW4gYnl0ZXMgKEFERCBvbmx5KVxuJiM0MzsgKiBAYnVmX3BhOiAgICAgRE1BIGFkZHJlc3Mgb2YgbWVtb3J5IChBREQgb25seSlcbiYjNDM7ICpcbiYjNDM7ICogVW5pZmllZCBjb21tYW5kIGZvciBhbGwgaG9zdCBtZW1vcnkgb3BlcmF0aW9ucy4gRmllbGRzIGFyZSByZXVzZWRcbiYjNDM7ICogYWNyb3NzIG9wZXJhdGlvbnMgdG8gbWluaW1pemUgb3Bjb2RlIHNwYWNlIHVzYWdlLlxuJiM0MzsgKi9cbiYjNDM7c3RydWN0IHBkc19jb3JlX2hvc3RfbWVtX2NtZCB7XG4mIzQzO1x0dTggICAgIG9wY29kZTtcbiYjNDM7XHR1OCAgICAgb3BlcjtcbiYjNDM7XHRfX2xlMTYgaW5kZXg7XG4mIzQzO1x0X19sZTE2IHRhZztcbiYjNDM7XHR1OCAgICAgcmVhc29uO1xuJiM0MztcdHU4ICAgICByc3ZkO1xuJiM0MztcdF9fbGUzMiBtYXhfY29udGlnO1xuJiM0MztcdF9fbGUzMiBzaXplO1xuJiM0MztcdF9fbGU2NCBidWZfcGE7XG4mIzQzO307XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogc3RydWN0IHBkc19jb3JlX2hvc3RfbWVtX2NvbXAgLSBIT1NUX01FTSBjb21wbGV0aW9uXG4mIzQzOyAqIEBzdGF0dXM6ICAgICAgIFN0YXR1cyBvZiB0aGUgY29tbWFuZCAoZW51bSBwZHNfY29yZV9zdGF0dXNfY29kZSlcbiYjNDM7ICogQG9wZXI6ICAgICAgICAgT3BlcmF0aW9uIHRoYXQgd2FzIHBlcmZvcm1lZFxuJiM0MzsgKiBAY291bnQ6ICAgICAgICBOdW1iZXIgb2YgbWVtb3J5IHJlcXVlc3RzIChHRVRfQ09VTlQpXG4mIzQzOyAqIEBzaXplOiAgICAgICAgIFNpemUgb2YgbWVtb3J5IHJlcXVlc3QgaW4gYnl0ZXMgKFFVRVJZKVxuJiM0MzsgKiBAdGFnOiAgICAgICAgICBUYWcgZm9yIHRoaXMgbWVtb3J5IHJlcXVlc3QgKFFVRVJZL0RFTClcbiYjNDM7ICogQHJzdmQ6ICAgICAgICAgUmVzZXJ2ZWRcbiYjNDM7ICovXG4mIzQzO3N0cnVjdCBwZHNfY29yZV9ob3N0X21lbV9jb21wIHtcbiYjNDM7XHR1OCAgICAgc3RhdHVzO1xuJiM0MztcdHU4ICAgICBvcGVyO1xuJiM0MztcdF9fbGUxNiBjb3VudDtcbiYjNDM7XHRfX2xlMzIgc2l6ZTtcbiYjNDM7XHRfX2xlMTYgdGFnO1xuJiM0MztcdHU4ICAgICByc3ZkWzZdO1xuJiM0Mzt9O1xuJiM0MztcbiAvKlxuICAqIHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgLSBPdmVybGF5IG9mIGNvcmUgZGV2aWNlIGNvbW1hbmQgc3RydWN0dXJlc1xuICAqL1xuQEAgLTQ2Miw2ICYjNDM7OTE1LDE0IEBAIHVuaW9uIHBkc19jb3JlX2Rldl9jbWQge1xuIFx0c3RydWN0IHBkc19jb3JlX3ZmX3NldGF0dHJfY21kICAgdmZfc2V0YXR0cjtcbiBcdHN0cnVjdCBwZHNfY29yZV92Zl9nZXRhdHRyX2NtZCAgIHZmX2dldGF0dHI7XG4gXHRzdHJ1Y3QgcGRzX2NvcmVfdmZfY3RybF9jbWQgICAgICB2Zl9jdHJsO1xuJiM0MztcbiYjNDM7XHRzdHJ1Y3QgcGRzX2NvcmVfZ2V0X2NvbXBvbmVudF9pbmZvX2NtZCBnZXRfY29tcG9uZW50X2luZm87XG4mIzQzO1x0c3RydWN0IHBkc19jb3JlX3NlbmRfcGtnX2RhdGFfY21kICAgICAgc2VuZF9wa2dfZGF0YTtcbiYjNDM7XHRzdHJ1Y3QgcGRzX2NvcmVfc2VuZF9jb21wb25lbnRfdGJsX2NtZCBzZW5kX2NvbXBvbmVudF90Ymw7XG4mIzQzO1x0c3RydWN0IHBkc19jb3JlX3NlbmRfY29tcG9uZW50X2NtZCAgICAgc2VuZF9jb21wb25lbnQ7XG4mIzQzO1x0c3RydWN0IHBkc19jb3JlX2ZpbmFsaXplX3VwZGF0ZV9jbWQgICAgZmluYWxpemVfdXBkYXRlO1xuJiM0MztcdHN0cnVjdCBwZHNfY29yZV9tYXRjaF9yZWNvcmRfZGVzY19jbWQgIG1hdGNoX3JlY29yZF9kZXNjO1xuJiM0MztcdHN0cnVjdCBwZHNfY29yZV9ob3N0X21lbV9jbWQgICAgICAgICAgIGhvc3RfbWVtO1xuIH07XG4gXG4gLypcbkBAIC00ODAsNiAmIzQzOzk0MSwxNCBAQCB1bmlvbiBwZHNfY29yZV9kZXZfY29tcCB7XG4gXHRzdHJ1Y3QgcGRzX2NvcmVfdmZfc2V0YXR0cl9jb21wICAgdmZfc2V0YXR0cjtcbiBcdHN0cnVjdCBwZHNfY29yZV92Zl9nZXRhdHRyX2NvbXAgICB2Zl9nZXRhdHRyO1xuIFx0c3RydWN0IHBkc19jb3JlX3ZmX2N0cmxfY29tcCAgICAgIHZmX2N0cmw7XG4mIzQzO1xuJiM0MztcdHN0cnVjdCBwZHNfY29yZV9nZXRfY29tcG9uZW50X2luZm9fY29tcCBnZXRfY29tcG9uZW50X2luZm87XG4mIzQzO1x0c3RydWN0IHBkc19jb3JlX3NlbmRfcGtnX2RhdGFfY29tcCAgICAgIHNlbmRfcGtnX2RhdGE7XG4mIzQzO1x0c3RydWN0IHBkc19jb3JlX3NlbmRfY29tcG9uZW50X3RibF9jb21wIHNlbmRfY29tcG9uZW50X3RibDtcbiYjNDM7XHRzdHJ1Y3QgcGRzX2NvcmVfc2VuZF9jb21wb25lbnRfY29tcCAgICAgc2VuZF9jb21wb25lbnQ7XG4mIzQzO1x0c3RydWN0IHBkc19jb3JlX2ZpbmFsaXplX3VwZGF0ZV9jb21wICAgIGZpbmFsaXplX3VwZGF0ZTtcbiYjNDM7XHRzdHJ1Y3QgcGRzX2NvcmVfbWF0Y2hfcmVjb3JkX2Rlc2NfY29tcCAgbWF0Y2hfcmVjb3JkX2Rlc2M7XG4mIzQzO1x0c3RydWN0IHBkc19jb3JlX2hvc3RfbWVtX2NvbXAgICAgICAgICAgIGhvc3RfbWVtO1xuIH07XG4gXG4gLyoqXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTA6MDM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBBTUQvUGVuc2FuZG8gQ29yZSBTbWFydE5JQyBkcml2ZXIgKHBkc19jb3JlKSwgd2hpY2ggcmVxdWlyZXMgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4gVGhlcmVmb3JlLCB0aGUgY29kZSBpcyB1bnJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4ZmQ3ZGY5MzU4MzE2NDQ4NThmZTBkZWIzMzljNzg2ZDQ3YTdkODU3CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBKdWwgMzAgMTA6MDM6NDQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvYW1kL3Bkc19jb3JlLnJzdCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC9hbWQvcGRzX2NvcmUucnN0CmluZGV4IDllOGExNmM0NDEwMjkuLjQ5NDg3YTM1YzE2MzIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC9hbWQvcGRzX2NvcmUucnN0CiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC9hbWQvcGRzX2NvcmUucnN0CkBAIC0xMDIsNiAmIzQzOzEwMiw5NSBAQCBjdXJyZW50bHkgaW4gdXNlLCBhbmQgdGhhdCBiYW5rIHdpbGwgdXNlZCBmb3IgdGhlIG5leHQgYm9vdDo6CiAgICMgZGV2bGluayBkZXYgZmxhc2ggcGNpLzAwMDA6YjU6MDAuMCBcCiAgICAgICAgICAgICBmaWxlIHBlbnNhbmRvL2RzY19md18xLjYzLjAtMjIudGFyCiAKJiM0MztGaXJtd2FyZSBNYW5hZ2VtZW50IChQTERNKQomIzQzOz09PT09PT09PT09PT09PT09PT09PT09PT09CiYjNDM7CiYjNDM7RmlybXdhcmUgdGhhdCBzdXBwb3J0cyBQTERNIGNhbiBiZSB1cGRhdGVkIHVzaW5nIHRoZSBkZXZsaW5rIGZsYXNoIGNvbW1hbmQKJiM0Mzt3aXRoIGEgUExETSBmaXJtd2FyZSBwYWNrYWdlLiBUaGUgZW50aXJlIHBhY2thZ2UgY2FuIGJlIHVwZGF0ZWQgYXQgb25jZTo6CiYjNDM7CiYjNDM7ICAjIGRldmxpbmsgZGV2IGZsYXNoIHBjaS8wMDAwOmI1OjAwLjAgZmlsZSBmaXJtd2FyZS5wbGRtZncKJiM0MzsKJiM0MztJbmRpdmlkdWFsIGNvbXBvbmVudHMgY2FuIGFsc28gYmUgdXBkYXRlZCBieSBzcGVjaWZ5aW5nIHRoZSBjb21wb25lbnQgbmFtZTo6CiYjNDM7CiYjNDM7ICAjIGRldmxpbmsgZGV2IGZsYXNoIHBjaS8wMDAwOmI1OjAwLjAgXAomIzQzOyAgICAgICAgICAgIGZpbGUgZmlybXdhcmUucGxkbWZ3IGNvbXBvbmVudCBmdy5jcGxkCiYjNDM7CiYjNDM7UGVyLWNvbXBvbmVudCB1cGRhdGUgdXNlcyBkcml2ZXItZGVmaW5lZCBjb21wb25lbnQgbmFtZXMgKGZ3LCBmdy5jcGxkLAomIzQzO2V0Yy4pLiBOb3QgYWxsIGNvbXBvbmVudHMgc3VwcG9ydCBwZXItY29tcG9uZW50IHVwZGF0ZSAtCiYjNDM7ZGV2bGluayB3aWxsIHJlamVjdCB0aGUgcmVxdWVzdCBpZiB0aGUgc3BlY2lmaWVkIGNvbXBvbmVudCBjYW5ub3QKJiM0MztiZSB1cGRhdGVkLgomIzQzOwomIzQzO0dvbGQgKHJlY292ZXJ5KSBjb21wb25lbnRzIGNhbiBiZSB1cGRhdGVkIGJ5IHNwZWNpZnlpbmcgdGhlIGJhc2UgY29tcG9uZW50CiYjNDM7bmFtZSAoZS5nLiwgYGBmd2BgIGZvciBgYGZ3LmdvbGRgYCkgd2l0aCBhIGdvbGRmdyBwYWNrYWdlIGZpbGUgd2hlbiB0aGUKJiM0MztkZXZpY2Ugc3VwcG9ydHMgcGVyLWNvbXBvbmVudCB1cGRhdGUuIFRoZSBgYC5nb2xkYGAgc3VmZml4IGluIGRldmxpbmsgaW5mbwomIzQzO291dHB1dCBpbmRpY2F0ZXMgdGhlIGdvbGQgc2xvdCB2ZXJzaW9uLCBub3QgYSBmbGFzaCB0YXJnZXQuCiYjNDM7CiYjNDM7SW5mbyB2ZXJzaW9ucyAoUExETSkKJiM0Mzs9PT09PT09PT09PT09PT09PT09PQomIzQzOwomIzQzO0Zpcm13YXJlIHRoYXQgc3VwcG9ydHMgUExETSByZXBvcnRzIGNvbXBvbmVudCB2ZXJzaW9ucyB1c2luZyBkcml2ZXItZGVmaW5lZAomIzQzO25hbWVzLiBUaGUgZHJpdmVyIHJlcG9ydHMgdGhlIGZvbGxvd2luZyBjb21wb25lbnQgdmVyc2lvbnM6CiYjNDM7CiYjNDM7Li4gbGlzdC10YWJsZTo6IGRldmxpbmsgaW5mbyB2ZXJzaW9ucyBmb3IgUExETS1jYXBhYmxlIGZpcm13YXJlCiYjNDM7ICAgOndpZHRoczogNSA1IDkwCiYjNDM7CiYjNDM7ICAgKiAtIE5hbWUKJiM0MzsgICAgIC0gVHlwZQomIzQzOyAgICAgLSBEZXNjcmlwdGlvbgomIzQzOyAgICogLSBgYGZ3YGAKJiM0MzsgICAgIC0gcnVubmluZywgc3RvcmVkCiYjNDM7ICAgICAtIE1haW4gZmlybXdhcmUKJiM0MzsgICAqIC0gYGBmdy5nb2xkYGAKJiM0MzsgICAgIC0gc3RvcmVkCiYjNDM7ICAgICAtIEdvbGQgKHJlY292ZXJ5KSBmaXJtd2FyZQomIzQzOyAgICogLSBgYGZ3LmJvb3Rsb2FkZXJgYAomIzQzOyAgICAgLSBydW5uaW5nLCBzdG9yZWQKJiM0MzsgICAgIC0gQm9vdCBsb2FkZXIKJiM0MzsgICAqIC0gYGBmdy5jcGxkYGAKJiM0MzsgICAgIC0gcnVubmluZywgc3RvcmVkCiYjNDM7ICAgICAtIENQTEQKJiM0MzsgICAqIC0gYGBmdy5zZWN1cmVgYAomIzQzOyAgICAgLSBydW5uaW5nLCBzdG9yZWQKJiM0MzsgICAgIC0gU2VjdXJlIGJvb3QgZmlybXdhcmUKJiM0MzsgICAqIC0gYGBmdy5mcGdhYGAKJiM0MzsgICAgIC0gcnVubmluZywgc3RvcmVkCiYjNDM7ICAgICAtIEZQR0EgY29uZmlndXJhdGlvbgomIzQzOyAgICogLSBgYGZ3LnN1Y2BgCiYjNDM7ICAgICAtIHJ1bm5pbmcsIHN0b3JlZAomIzQzOyAgICAgLSBTeXN0ZW0gVW5pdCBDb250cm9sbGVyIGZpcm13YXJlCiYjNDM7ICAgKiAtIGBgZncuc3VjLmJvb3Rsb2FkZXJgYAomIzQzOyAgICAgLSBydW5uaW5nLCBzdG9yZWQKJiM0MzsgICAgIC0gU3lzdGVtIFVuaXQgQ29udHJvbGxlciBib290bG9hZGVyCiYjNDM7ICAgKiAtIGBgZncudWJvb3RgYAomIzQzOyAgICAgLSBydW5uaW5nLCBzdG9yZWQKJiM0MzsgICAgIC0gVS1Cb290IGJvb3Rsb2FkZXIKJiM0MzsgICAqIC0gYGBhc2ljLmlkYGAKJiM0MzsgICAgIC0gZml4ZWQKJiM0MzsgICAgIC0gVGhlIEFTSUMgdHlwZSBmb3IgdGhpcyBkZXZpY2UKJiM0MzsgICAqIC0gYGBhc2ljLnJldmBgCiYjNDM7ICAgICAtIGZpeGVkCiYjNDM7ICAgICAtIFRoZSByZXZpc2lvbiBvZiB0aGUgQVNJQyBmb3IgdGhpcyBkZXZpY2UKJiM0MzsKJiM0MztFeGFtcGxlIG91dHB1dDo6CiYjNDM7CiYjNDM7ICAkIGRldmxpbmsgZGV2IGluZm8gcGNpLzAwMDA6MDA6MDUuMAomIzQzOyAgcGNpLzAwMDA6MDA6MDUuMDoKJiM0MzsgICAgZHJpdmVyIHBkc19jb3JlCiYjNDM7ICAgIHNlcmlhbF9udW1iZXIgRkxNMTg0MjAwNzMKJiM0MzsgICAgdmVyc2lvbnM6CiYjNDM7ICAgICAgICBmaXhlZDoKJiM0MzsgICAgICAgICAgYXNpYy5pZCAweDAKJiM0MzsgICAgICAgICAgYXNpYy5yZXYgMHgwCiYjNDM7ICAgICAgICBydW5uaW5nOgomIzQzOyAgICAgICAgICBmdy5ib290bG9hZGVyIDEuMi4zCiYjNDM7ICAgICAgICAgIGZ3IDEuMy4wCiYjNDM7ICAgICAgICAgIGZ3LmNwbGQgMy4xOAomIzQzOyAgICAgICAgc3RvcmVkOgomIzQzOyAgICAgICAgICBmdy5ib290bG9hZGVyIDEuMi4zCiYjNDM7ICAgICAgICAgIGZ3LmdvbGQgMS4yLjAKJiM0MzsgICAgICAgICAgZncgMS4zLjAKJiM0MzsgICAgICAgICAgZncuY3BsZCAzLjE4CiYjNDM7CiBIZWFsdGggUmVwb3J0ZXJzCiA9PT09PT09PT09PT09PT09CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9LY29uZmlnIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL0tjb25maWcKaW5kZXggZTM1OTkxMTQxYTFhMi4uNzQzZTNkNGI2Yjk0ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL0tjb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL0tjb25maWcKQEAgLTE3MSw2ICYjNDM7MTcxLDcgQEAgY29uZmlnIFBEU19DT1JFCiAJZGVwZW5kcyBvbiA2NEJJVCAmYW1wOyZhbXA7IFBDSQogCXNlbGVjdCBBVVhJTElBUllfQlVTCiAJc2VsZWN0IE5FVF9ERVZMSU5LCiYjNDM7CXNlbGVjdCBQTERNRlcKIAloZWxwCiAJICBUaGlzIGVuYWJsZXMgdGhlIHN1cHBvcnQgZm9yIHRoZSBBTUQvUGVuc2FuZG8gQ29yZSBkZXZpY2UgZmFtaWx5IG9mCiAJICBhZGFwdGVycy4gIE1vcmUgc3BlY2lmaWMgaW5mb3JtYXRpb24gb24gdGhpcyBkcml2ZXIgY2FuIGJlCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvY29yZS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL2NvcmUuYwppbmRleCAwNGVjMjU2OWM2MWMwLi45MjJlM2VjOGFmMWI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9jb3JlLmMKQEAgLTQ4OSw2ICYjNDM7NDg5LDE1IEBAIHZvaWQgcGRzY190ZWFyZG93bihzdHJ1Y3QgcGRzYyAqcGRzYywgYm9vbCByZW1vdmluZykKIAkJcGRzY19kZXZjbWRfcmVzZXQocGRzYyk7CiAKIAlwY2lfY2xlYXJfbWFzdGVyKHBkc2MtJmd0O3BkZXYpOwomIzQzOwlpZiAoIXBkc2MtJmd0O3BkZXYtJmd0O2lzX3ZpcnRmbikgewomIzQzOwkJdTE2IHZhbDsKJiM0MzsKJiM0MzsJCS8qIEZsdXNoIGFueSBpbi1mbGlnaHQgRE1BIGJlZm9yZSBmcmVlaW5nIGJ1ZmZlcnMuCiYjNDM7CQkgKiBBIGNvbmZpZyByZWFkIGNvbXBsZXRpb24gY2Fubm90IHJldHVybiB1bnRpbCBhbGwgcHJpb3IKJiM0MzsJCSAqIGRldmljZS1pbml0aWF0ZWQgbWVtb3J5IHdyaXRlcyBoYXZlIGNvbXBsZXRlZC4KJiM0MzsJCSAqLwomIzQzOwkJcGNpX3JlYWRfY29uZmlnX3dvcmQocGRzYy0mZ3Q7cGRldiwgUENJX1ZFTkRPUl9JRCwgJmFtcDt2YWwpOwomIzQzOwl9CiAKIAlwZHNjX2NvcmVfdW5pbml0KHBkc2MpOwogCkBAIC00OTcsNiAmIzQzOzUwNiw4IEBAIHZvaWQgcGRzY190ZWFyZG93bihzdHJ1Y3QgcGRzYyAqcGRzYywgYm9vbCByZW1vdmluZykKIAkJcGRzYy0mZ3Q7dmlmdHlwZV9zdGF0dXMgPSBOVUxMOwogCX0KIAomIzQzOwlwZHNjX2RlYnVnZnNfZGVsX2hvc3RfbWVtKHBkc2MpOwomIzQzOwlwZHNjX2hvc3RfbWVtX2ZyZWUocGRzYyk7CiAJcGRzY19kZXZfdW5pbml0KHBkc2MpOwogCiAJc2V0X2JpdChQRFNDX1NfRldfREVBRCwgJmFtcDtwZHNjLSZndDtzdGF0ZSk7CkBAIC01MDYsNiAmIzQzOzUxNyw4IEBAIGludCBwZHNjX3N0YXJ0KHN0cnVjdCBwZHNjICpwZHNjKQogewogCXBkc19jb3JlX2ludHJfbWFzaygmYW1wO3Bkc2MtJmd0O2ludHJfY3RybFtwZHNjLSZndDthZG1pbnFjcS5pbnR4XSwKIAkJCSAgIFBEU19DT1JFX0lOVFJfTUFTS19DTEVBUik7CiYjNDM7CXBkc2NfaG9zdF9tZW1fYWRkKHBkc2MpOwomIzQzOwlwZHNjX2RlYnVnZnNfYWRkX2hvc3RfbWVtKHBkc2MpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC01ODcsNiAmIzQzOzYwMCw4IEBAIHZvaWQgcGRzY19md191cChzdHJ1Y3QgcGRzYyAqcGRzYykKIAkJcmV0dXJuOwogCX0KIAomIzQzOwlwZHNjX2Z3X2NvbXBvbmVudHNfaW52YWxpZGF0ZShwZHNjKTsKJiM0MzsKIAllcnIgPSBwZHNjX3NldHVwKHBkc2MsIFBEU0NfU0VUVVBfUkVDT1ZFUlkpOwogCWlmIChlcnIpCiAJCWdvdG8gZXJyX291dDsKQEAgLTY3MCwzICYjNDM7Njg1LDE2MSBAQCB2b2lkIHBkc2NfaGVhbHRoX3RocmVhZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiBvdXRfdW5sb2NrOgogCW11dGV4X3VubG9jaygmYW1wO3Bkc2MtJmd0O2NvbmZpZ19sb2NrKTsKIH0KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBwZHNjX2hvc3RfbWVtX2RlbF9vbmUoc3RydWN0IHBkc2MgKnBkc2MsIHUxNiB0YWcsIHU4IHJlYXNvbikKJiM0Mzt7CiYjNDM7CXVuaW9uIHBkc19jb3JlX2Rldl9jb21wIGNvbXAgPSB7fTsKJiM0MzsJdW5pb24gcGRzX2NvcmVfZGV2X2NtZCBjbWQgPSB7CiYjNDM7CQkuaG9zdF9tZW0ub3Bjb2RlID0gUERTX0NPUkVfQ01EX0hPU1RfTUVNLAomIzQzOwkJLmhvc3RfbWVtLm9wZXIgPSBQRFNfQ09SRV9IT1NUX01FTV9ERUwsCiYjNDM7CQkuaG9zdF9tZW0udGFnID0gY3B1X3RvX2xlMTYodGFnKSwKJiM0MzsJCS5ob3N0X21lbS5yZWFzb24gPSByZWFzb24sCiYjNDM7CX07CiYjNDM7CiYjNDM7CWRldl9kYmcocGRzYy0mZ3Q7ZGV2LCAmIzM0O1NlbmRpbmcgZGV2Y21kIGZvciBtZW0gZGVsIHRhZyAlZFxuJiMzNDssIHRhZyk7CiYjNDM7CXBkc2NfZGV2Y21kKHBkc2MsICZhbXA7Y21kLCAmYW1wO2NvbXAsIHBkc2MtJmd0O2RldmNtZF90aW1lb3V0KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBwZHNjX2hvc3RfbWVtX2FkZF9vbmUoc3RydWN0IHBkc2MgKnBkc2MsIGludCBpbmRleCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwZHNjX2hvc3RfbWVtICpobSA9ICZhbXA7cGRzYy0mZ3Q7aG9zdF9tZW1fcmVxc1tpbmRleF07CiYjNDM7CXVuaW9uIHBkc19jb3JlX2Rldl9jb21wIGNvbXAgPSB7fTsKJiM0MzsJdW5pb24gcGRzX2NvcmVfZGV2X2NtZCBjbWQgPSB7fTsKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJY21kLmhvc3RfbWVtLm9wY29kZSA9IFBEU19DT1JFX0NNRF9IT1NUX01FTTsKJiM0MzsJY21kLmhvc3RfbWVtLm9wZXIgPSBQRFNfQ09SRV9IT1NUX01FTV9RVUVSWTsKJiM0MzsJY21kLmhvc3RfbWVtLmluZGV4ID0gY3B1X3RvX2xlMTYoaW5kZXgpOwomIzQzOwlkZXZfZGJnKHBkc2MtJmd0O2RldiwgJiMzNDtTZW5kaW5nIGRldmNtZCBmb3IgbWVtIHF1ZXJ5IGluZGV4ICVkXG4mIzM0OywgaW5kZXgpOwomIzQzOwllcnIgPSBwZHNjX2RldmNtZChwZHNjLCAmYW1wO2NtZCwgJmFtcDtjb21wLCBwZHNjLSZndDtkZXZjbWRfdGltZW91dCk7CiYjNDM7CWlmIChlcnIgfHwgY29tcC5zdGF0dXMgIT0gUERTX1JDX1NVQ0NFU1MpIHsKJiM0MzsJCWRldl9lcnIocGRzYy0mZ3Q7ZGV2LCAmIzM0O21lbSBxdWVyeSBmYWlsZWQgZXJyICVkIHN0YXR1cyAlZFxuJiMzNDssCiYjNDM7CQkJZXJyLCBjb21wLnN0YXR1cyk7CiYjNDM7CQlyZXR1cm4gZXJyID8gZXJyIDogLUVJTzsKJiM0MzsJfQomIzQzOwlobS0mZ3Q7c2l6ZSA9IGxlMzJfdG9fY3B1KGNvbXAuaG9zdF9tZW0uc2l6ZSk7CiYjNDM7CWhtLSZndDt0YWcgPSBsZTE2X3RvX2NwdShjb21wLmhvc3RfbWVtLnRhZyk7CiYjNDM7CWRldl9kYmcocGRzYy0mZ3Q7ZGV2LCAmIzM0O21lbSBxdWVyeSByZXR1cm5lZCBzaXplICVkIHRhZyAlZFxuJiMzNDssCiYjNDM7CQlobS0mZ3Q7c2l6ZSwgaG0tJmd0O3RhZyk7CiYjNDM7CiYjNDM7CWlmICghaG0tJmd0O3NpemUgfHwgaG0tJmd0O3NpemUgJmd0OyBQRFNDX0hPU1RfTUVNX01BWF9DT05USUcpIHsKJiM0MzsJCWRldl9lcnIocGRzYy0mZ3Q7ZGV2LCAmIzM0O2ludmFsaWQgc2l6ZSAlZCBmb3IgdGFnICVkXG4mIzM0OywKJiM0MzsJCQlobS0mZ3Q7c2l6ZSwgaG0tJmd0O3RhZyk7CiYjNDM7CQllcnIgPSAtRUlOVkFMOwomIzQzOwkJZ290byBlcnJfZGVsOwomIzQzOwl9CiYjNDM7CiYjNDM7CWhtLSZndDtvcmRlciA9IGdldF9vcmRlcihobS0mZ3Q7c2l6ZSk7CiYjNDM7CWhtLSZndDtwZyA9IGFsbG9jX3BhZ2VzKEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPIHwgX19HRlBfTk9XQVJOLCBobS0mZ3Q7b3JkZXIpOwomIzQzOwlpZiAoIWhtLSZndDtwZykgewomIzQzOwkJZGV2X3dhcm4ocGRzYy0mZ3Q7ZGV2LCAmIzM0O2FsbG9jIG9yZGVyICVkIGZhaWxlZCBmb3IgdGFnICVkXG4mIzM0OywKJiM0MzsJCQkgaG0tJmd0O29yZGVyLCBobS0mZ3Q7dGFnKTsKJiM0MzsJCWVyciA9IC1FTk9NRU07CiYjNDM7CQlnb3RvIGVycl9kZWw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaG0tJmd0O3BhID0gZG1hX21hcF9wYWdlKHBkc2MtJmd0O2RldiwgaG0tJmd0O3BnLCAwLCBobS0mZ3Q7c2l6ZSwKJiM0MzsJCQkgICAgICBETUFfQklESVJFQ1RJT05BTCk7CiYjNDM7CWlmIChkbWFfbWFwcGluZ19lcnJvcihwZHNjLSZndDtkZXYsIGhtLSZndDtwYSkpIHsKJiM0MzsJCWRldl9lcnIocGRzYy0mZ3Q7ZGV2LCAmIzM0O2RtYSBtYXAgZmFpbGVkIGZvciB0YWcgJWQgc2l6ZSAlZFxuJiMzNDssCiYjNDM7CQkJaG0tJmd0O3RhZywgaG0tJmd0O3NpemUpOwomIzQzOwkJX19mcmVlX3BhZ2VzKGhtLSZndDtwZywgaG0tJmd0O29yZGVyKTsKJiM0MzsJCWhtLSZndDtwZyA9IE5VTEw7CiYjNDM7CQllcnIgPSAtRUlPOwomIzQzOwkJZ290byBlcnJfZGVsOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIFRyYWNrIHRoaXMgYWxsb2NhdGlvbiBzbyBwZHNjX2hvc3RfbWVtX2ZyZWUoKSBjYW4gY2xlYW4gaXQgdXAgKi8KJiM0MzsJcGRzYy0mZ3Q7bnVtX2hvc3RfbWVtX3JlcXMmIzQzOyYjNDM7OwomIzQzOwomIzQzOwltZW1zZXQoJmFtcDtjbWQsIDAsIHNpemVvZihjbWQpKTsKJiM0MzsJbWVtc2V0KCZhbXA7Y29tcCwgMCwgc2l6ZW9mKGNvbXApKTsKJiM0MzsJY21kLmhvc3RfbWVtLm9wY29kZSA9IFBEU19DT1JFX0NNRF9IT1NUX01FTTsKJiM0MzsJY21kLmhvc3RfbWVtLm9wZXIgPSBQRFNfQ09SRV9IT1NUX01FTV9BREQ7CiYjNDM7CWNtZC5ob3N0X21lbS50YWcgPSBjcHVfdG9fbGUxNihobS0mZ3Q7dGFnKTsKJiM0MzsJY21kLmhvc3RfbWVtLnNpemUgPSBjcHVfdG9fbGUzMihobS0mZ3Q7c2l6ZSk7CiYjNDM7CWNtZC5ob3N0X21lbS5idWZfcGEgPSBjcHVfdG9fbGU2NChobS0mZ3Q7cGEpOwomIzQzOwomIzQzOwlkZXZfZGJnKHBkc2MtJmd0O2RldiwgJiMzNDtTZW5kaW5nIGRldmNtZCBmb3IgbWVtIGFkZCB0YWcgJWQgc2l6ZSAlZCBwYSAlcGFkXG4mIzM0OywKJiM0MzsJCWhtLSZndDt0YWcsIGhtLSZndDtzaXplLCAmYW1wO2htLSZndDtwYSk7CiYjNDM7CWVyciA9IHBkc2NfZGV2Y21kKHBkc2MsICZhbXA7Y21kLCAmYW1wO2NvbXAsIHBkc2MtJmd0O2RldmNtZF90aW1lb3V0KTsKJiM0MzsJaWYgKGVyciB8fCBjb21wLnN0YXR1cyAhPSBQRFNfUkNfU1VDQ0VTUykgewomIzQzOwkJZGV2X2VycihwZHNjLSZndDtkZXYsICYjMzQ7bWVtIGFkZCBmYWlsZWQgZXJyICVkIHN0YXR1cyAlZCBmb3IgdGFnICVkXG4mIzM0OywKJiM0MzsJCQllcnIsIGNvbXAuc3RhdHVzLCBobS0mZ3Q7dGFnKTsKJiM0MzsJCWVyciA9IGVyciA/IGVyciA6IC1FSU87CiYjNDM7CQlnb3RvIGVycl9kZWw7CiYjNDM7CX0KJiM0MzsJZGV2X2RiZyhwZHNjLSZndDtkZXYsICYjMzQ7bWVtIGFkZCBjb21wbGV0ZWQgZm9yIHRhZyAlZFxuJiMzNDssIGhtLSZndDt0YWcpOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0MzsKJiM0MztlcnJfZGVsOgomIzQzOwkvKiBBZnRlciBNRU1fUVVFUlkgc3VjY2VlZHMsIGZpcm13YXJlIGV4cGVjdHMgTUVNX0FERCBvciBNRU1fREVMICovCiYjNDM7CXBkc2NfaG9zdF9tZW1fZGVsX29uZShwZHNjLCBobS0mZ3Q7dGFnLCBQRFNfUkNfRU5PTUVNKTsKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBwZHNjX2hvc3RfbWVtX2FkZChzdHJ1Y3QgcGRzYyAqcGRzYykKJiM0Mzt7CiYjNDM7CXVuaW9uIHBkc19jb3JlX2Rldl9jb21wIGNvbXAgPSB7fTsKJiM0MzsJdW5pb24gcGRzX2NvcmVfZGV2X2NtZCBjbWQgPSB7fTsKJiM0MzsJdTE2IGNvdW50OwomIzQzOwlpbnQgZXJyOwomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJaWYgKCEocGRzYy0mZ3Q7ZGV2X2lkZW50LmNhcGFiaWxpdGllcyAmYW1wOwomIzQzOwkgICAgIGNwdV90b19sZTY0KFBEU19DT1JFX0RFVl9DQVBfSE9TVF9NRU0pKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJY21kLmhvc3RfbWVtLm9wY29kZSA9IFBEU19DT1JFX0NNRF9IT1NUX01FTTsKJiM0MzsJY21kLmhvc3RfbWVtLm9wZXIgPSBQRFNfQ09SRV9IT1NUX01FTV9HRVRfQ09VTlQ7CiYjNDM7CWNtZC5ob3N0X21lbS5pbmRleCA9IGNwdV90b19sZTE2KFBEU0NfSE9TVF9NRU1fTUFYX0NPVU5UKTsKJiM0MzsJY21kLmhvc3RfbWVtLm1heF9jb250aWcgPSBjcHVfdG9fbGUzMihQRFNDX0hPU1RfTUVNX01BWF9DT05USUcpOwomIzQzOwlkZXZfZGJnKHBkc2MtJmd0O2RldiwgJiMzNDtTZW5kaW5nIGRldmNtZCBmb3IgbWVtIGdldCBjb3VudCBtYXhfY29udGlnICV1XG4mIzM0OywKJiM0MzsJCVBEU0NfSE9TVF9NRU1fTUFYX0NPTlRJRyk7CiYjNDM7CWVyciA9IHBkc2NfZGV2Y21kKHBkc2MsICZhbXA7Y21kLCAmYW1wO2NvbXAsIHBkc2MtJmd0O2RldmNtZF90aW1lb3V0KTsKJiM0MzsJaWYgKGVyciB8fCBjb21wLnN0YXR1cyAhPSBQRFNfUkNfU1VDQ0VTUykgewomIzQzOwkJZGV2X2VycihwZHNjLSZndDtkZXYsICYjMzQ7bWVtIGdldCBjb3VudCBmYWlsZWQgZXJyICVkIHN0YXR1cyAlZFxuJiMzNDssCiYjNDM7CQkJZXJyLCBjb21wLnN0YXR1cyk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJY291bnQgPSBtaW4obGUxNl90b19jcHUoY29tcC5ob3N0X21lbS5jb3VudCksCiYjNDM7CQkgICAgUERTQ19IT1NUX01FTV9NQVhfQ09VTlQpOwomIzQzOwlkZXZfZGJnKHBkc2MtJmd0O2RldiwgJiMzNDttZW0gZ2V0IGNvdW50IHJldHVybmVkIGNvdW50ICVkXG4mIzM0OywgY291bnQpOwomIzQzOwlpZiAoY291bnQgPT0gMCkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJcGRzYy0mZ3Q7aG9zdF9tZW1fcmVxcyA9IGt6YWxsb2Nfb2JqcygqcGRzYy0mZ3Q7aG9zdF9tZW1fcmVxcywgY291bnQsCiYjNDM7CQkJCQkgICBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCFwZHNjLSZndDtob3N0X21lbV9yZXFzKSB7CiYjNDM7CQlkZXZfZXJyKHBkc2MtJmd0O2RldiwgJiMzNDtmYWlsZWQgdG8gYWxsb2MgaG9zdF9tZW1fcmVxcyBhcnJheVxuJiMzNDspOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBjb3VudDsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWVyciA9IHBkc2NfaG9zdF9tZW1fYWRkX29uZShwZHNjLCBpKTsKJiM0MzsJCWlmIChlcnIpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBwZHNjX2hvc3RfbWVtX2ZyZWUoc3RydWN0IHBkc2MgKnBkc2MpCiYjNDM7ewomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJaWYgKCFwZHNjLSZndDtob3N0X21lbV9yZXFzKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgcGRzYy0mZ3Q7bnVtX2hvc3RfbWVtX3JlcXM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlkbWFfdW5tYXBfcGFnZShwZHNjLSZndDtkZXYsIHBkc2MtJmd0O2hvc3RfbWVtX3JlcXNbaV0ucGEsCiYjNDM7CQkJICAgICAgIHBkc2MtJmd0O2hvc3RfbWVtX3JlcXNbaV0uc2l6ZSwKJiM0MzsJCQkgICAgICAgRE1BX0JJRElSRUNUSU9OQUwpOwomIzQzOwkJX19mcmVlX3BhZ2VzKHBkc2MtJmd0O2hvc3RfbWVtX3JlcXNbaV0ucGcsCiYjNDM7CQkJICAgICBwZHNjLSZndDtob3N0X21lbV9yZXFzW2ldLm9yZGVyKTsKJiM0MzsJfQomIzQzOwomIzQzOwlrZnJlZShwZHNjLSZndDtob3N0X21lbV9yZXFzKTsKJiM0MzsJcGRzYy0mZ3Q7aG9zdF9tZW1fcmVxcyA9IE5VTEw7CiYjNDM7CXBkc2MtJmd0O251bV9ob3N0X21lbV9yZXFzID0gMDsKJiM0Mzt9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvY29yZS5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL2NvcmUuaAppbmRleCBiN2ZlOWFkNzMzNDk4Li43OTE3NTZhNTA4NzBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvY29yZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9jb3JlLmgKQEAgLTUsNiAmIzQzOzUsNyBAQAogI2RlZmluZSBfUERTQ19IXwogCiAjaW5jbHVkZSAmbHQ7bGludXgvZGVidWdmcy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9tbXpvbmUuaCZndDsKICNpbmNsdWRlICZsdDtuZXQvZGV2bGluay5oJmd0OwogCiAjaW5jbHVkZSAmbHQ7bGludXgvcGRzL3Bkc19jb21tb24uaCZndDsKQEAgLTIzLDYgJiM0MzsyNCwyMCBAQAogI2RlZmluZSBQRFNDX1NFVFVQX1JFQ09WRVJZCWZhbHNlCiAjZGVmaW5lIFBEU0NfU0VUVVBfSU5JVAkJdHJ1ZQogCiYjNDM7LyogVXNlIGZpeGVkIDRNQiBpbnN0ZWFkIG9mIFBBR0VfU0laRSAmbHQ7Jmx0OyBNQVhfUEFHRV9PUkRFUiB0byBhdm9pZAomIzQzOyAqIGNwdV90b19sZTMyKCkgdHJ1bmNhdGlvbiBvbiBsYXJnZS1wYWdlIGNvbmZpZ3MKJiM0MzsgKi8KJiM0MzsjZGVmaW5lIFBEU0NfSE9TVF9NRU1fTUFYX0NPTlRJRyAoNCAqIDEwMjQgKiAxMDI0KQomIzQzOyNkZWZpbmUgUERTQ19IT1NUX01FTV9NQVhfQ09VTlQgIDI1NgomIzQzOwomIzQzO3N0cnVjdCBwZHNjX2RlZmVycmVkX2RtYSB7CiYjNDM7CXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKJiM0MzsJZG1hX2FkZHJfdCBkbWFfYWRkcjsKJiM0MzsJdm9pZCAqdmE7CiYjNDM7CXNpemVfdCBzaXplOwomIzQzOwllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXI7CiYjNDM7fTsKJiM0MzsKIHN0cnVjdCBwZHNjX2Rldl9iYXIgewogCXZvaWQgX19pb21lbSAqdmFkZHI7CiAJcGh5c19hZGRyX3QgYnVzX2FkZHI7CkBAIC0xNDEsNiAmIzQzOzE1NiwxNCBAQCBzdHJ1Y3QgcGRzY192aWZ0eXBlIHsKIAlzdHJ1Y3QgcGRzX2F1eGlsaWFyeV9kZXYgKnBhZGV2OwogfTsKIAomIzQzO3N0cnVjdCBwZHNjX2hvc3RfbWVtIHsKJiM0MzsJdTMyIHNpemU7CiYjNDM7CXUxNiB0YWc7CiYjNDM7CXU4IG9yZGVyOwomIzQzOwlzdHJ1Y3QgcGFnZSAqcGc7CiYjNDM7CWRtYV9hZGRyX3QgcGE7CiYjNDM7fTsKJiM0MzsKIC8qIE5vIHN0YXRlIGZsYWdzIHNldCBtZWFucyB3ZSBhcmUgaW4gYSBzdGVhZHkgcnVubmluZyBzdGF0ZSAqLwogZW51bSBwZHNjX3N0YXRlX2ZsYWdzIHsKIAlQRFNDX1NfRldfREVBRCwJCSAgICAvKiBzdG9wcGVkLCB3YWl0IG9uIHN0YXJ0dXAgb3IgcmVjb3ZlcnkgKi8KQEAgLTE4NSw2ICYjNDM7MjA4LDggQEAgc3RydWN0IHBkc2MgewogCXN0cnVjdCBtdXRleCBkZXZjbWRfbG9jazsJLyogbG9jayBmb3IgZGV2X2NtZCBvcGVyYXRpb25zICovCiAJc3RydWN0IG11dGV4IGNvbmZpZ19sb2NrOwkvKiBsb2NrIGZvciBjb25maWd1cmF0aW9uIG9wZXJhdGlvbnMgKi8KIAlzcGlubG9ja190IGFkbWlucV9sb2NrOwkJLyogbG9jayBmb3IgYWRtaW5xIG9wZXJhdGlvbnMgKi8KJiM0MzsJc3RydWN0IGxpc3RfaGVhZCBkZWZlcnJlZF9kbWFfbGlzdDsKJiM0MzsJc3BpbmxvY2tfdCBkZWZlcnJlZF9kbWFfbG9jazsJLyogbG9jayBmb3IgZGVmZXJyZWQgRE1BIGxpc3QgKi8KIAlyZWZjb3VudF90IGFkbWlucV9yZWZjbnQ7CiAJc3RydWN0IHBkc19jb3JlX2Rldl9pbmZvX3JlZ3MgX19pb21lbSAqaW5mb19yZWdzOwogCXN0cnVjdCBwZHNfY29yZV9kZXZfY21kX3JlZ3MgX19pb21lbSAqY21kX3JlZ3M7CkBAIC0xOTksNiAmIzQzOzIyNCwxMSBAQCBzdHJ1Y3QgcGRzYyB7CiAJdTY0IGxhc3RfZWlkOwogCXN0cnVjdCBwZHNjX3ZpZnR5cGUgKnZpZnR5cGVfc3RhdHVzOwogCXN0cnVjdCB3b3JrX3N0cnVjdCBwY2lfcmVzZXRfd29yazsKJiM0MzsKJiM0MzsJc3RydWN0IHBkc2NfaG9zdF9tZW0gKmhvc3RfbWVtX3JlcXM7CiYjNDM7CXUxNiBudW1faG9zdF9tZW1fcmVxczsKJiM0MzsKJiM0MzsJc3RydWN0IHBkc19jb3JlX2NvbXBvbmVudF9saXN0X2luZm8gZndfY29tcG9uZW50czsKIH07CiAKIC8qKiBlbnVtIHBkc19jb3JlX2RiZWxsX2JpdHMgLSBiaXR3aXNlIGNvbXBvc2l0aW9uIG9mIGRiZWxsIHZhbHVlcy4KQEAgLTI3NSwxNCAmIzQzOzMwNSwyNCBAQCB2b2lkIHBkc2NfZGVidWdmc19hZGRfdmlmdHlwZShzdHJ1Y3QgcGRzYyAqcGRzYyk7CiB2b2lkIHBkc2NfZGVidWdmc19hZGRfaXJxcyhzdHJ1Y3QgcGRzYyAqcGRzYyk7CiB2b2lkIHBkc2NfZGVidWdmc19hZGRfcWNxKHN0cnVjdCBwZHNjICpwZHNjLCBzdHJ1Y3QgcGRzY19xY3EgKnFjcSk7CiB2b2lkIHBkc2NfZGVidWdmc19kZWxfcWNxKHN0cnVjdCBwZHNjX3FjcSAqcWNxKTsKJiM0Mzt2b2lkIHBkc2NfZGVidWdmc19hZGRfaG9zdF9tZW0oc3RydWN0IHBkc2MgKnBkc2MpOwomIzQzO3ZvaWQgcGRzY19kZWJ1Z2ZzX2RlbF9ob3N0X21lbShzdHJ1Y3QgcGRzYyAqcGRzYyk7CiAKIGludCBwZHNjX2Vycl90b19lcnJubyhlbnVtIHBkc19jb3JlX3N0YXR1c19jb2RlIGNvZGUpOwogYm9vbCBwZHNjX2lzX2Z3X3J1bm5pbmcoc3RydWN0IHBkc2MgKnBkc2MpOwogYm9vbCBwZHNjX2lzX2Z3X2dvb2Qoc3RydWN0IHBkc2MgKnBkc2MpOwogaW50IHBkc2NfZGV2Y21kKHN0cnVjdCBwZHNjICpwZHNjLCB1bmlvbiBwZHNfY29yZV9kZXZfY21kICpjbWQsCiAJCXVuaW9uIHBkc19jb3JlX2Rldl9jb21wICpjb21wLCBpbnQgbWF4X3NlY29uZHMpOwomIzQzO2ludCBwZHNjX2RldmNtZF93aXRoX2RhdGEoc3RydWN0IHBkc2MgKnBkc2MsIHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgKmNtZCwKJiM0MzsJCQkgIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBkYXRhX2xlbiwKJiM0MzsJCQkgIHVuaW9uIHBkc19jb3JlX2Rldl9jb21wICpjb21wLCBpbnQgbWF4X3NlY29uZHMpOwomIzQzO2ludCBwZHNjX2RldmNtZF93aXRoX2RhdGFfbm9tc2coc3RydWN0IHBkc2MgKnBkc2MsIHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgKmNtZCwKJiM0MzsJCQkJY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGRhdGFfbGVuLAomIzQzOwkJCQl1bmlvbiBwZHNfY29yZV9kZXZfY29tcCAqY29tcCwgaW50IG1heF9zZWNvbmRzKTsKIGludCBwZHNjX2RldmNtZF9sb2NrZWQoc3RydWN0IHBkc2MgKnBkc2MsIHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgKmNtZCwKIAkJICAgICAgIHVuaW9uIHBkc19jb3JlX2Rldl9jb21wICpjb21wLCBpbnQgbWF4X3NlY29uZHMpOwomIzQzO2ludCBwZHNjX2RldmNtZF9sb2NrZWRfbm9tc2coc3RydWN0IHBkc2MgKnBkc2MsIHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgKmNtZCwKJiM0MzsJCQkgICAgIHVuaW9uIHBkc19jb3JlX2Rldl9jb21wICpjb21wLCBpbnQgbWF4X3NlY29uZHMpOwogaW50IHBkc2NfZGV2Y21kX2luaXQoc3RydWN0IHBkc2MgKnBkc2MpOwogaW50IHBkc2NfZGV2Y21kX3Jlc2V0KHN0cnVjdCBwZHNjICpwZHNjKTsKIGludCBwZHNjX2Rldl9pbml0KHN0cnVjdCBwZHNjICpwZHNjKTsKQEAgLTMxNSwxMSAmIzQzOzM1NSwyMyBAQCB2b2lkIHBkc2NfcHJvY2Vzc19hZG1pbnEoc3RydWN0IHBkc2NfcWNxICpxY3EpOwogdm9pZCBwZHNjX3dvcmtfdGhyZWFkKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CiBpcnFyZXR1cm5fdCBwZHNjX2FkbWlucV9pc3IoaW50IGlycSwgdm9pZCAqZGF0YSk7CiAKLWludCBwZHNjX2Zpcm13YXJlX3VwZGF0ZShzdHJ1Y3QgcGRzYyAqcGRzYywgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdywKJiM0MztpbnQgcGRzY19maXJtd2FyZV91cGRhdGUoc3RydWN0IHBkc2MgKnBkc2MsCiYjNDM7CQkJIHN0cnVjdCBkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9wYXJhbXMgKnBhcmFtcywKIAkJCSBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spOwomIzQzO2ludCBwZHNjX2dldF9jb21wb25lbnRfaW5mbyhzdHJ1Y3QgcGRzYyAqcGRzYyk7CiYjNDM7Y29uc3QgY2hhciAqcGRzY19md190eXBlX3RvX25hbWUodTggdHlwZSk7CiYjNDM7dm9pZCBwZHNjX2Z3X2NvbXBvbmVudHNfaW52YWxpZGF0ZShzdHJ1Y3QgcGRzYyAqcGRzYyk7CiAKIHZvaWQgcGRzY19md19kb3duKHN0cnVjdCBwZHNjICpwZHNjKTsKIHZvaWQgcGRzY19md191cChzdHJ1Y3QgcGRzYyAqcGRzYyk7CiB2b2lkIHBkc2NfcGNpX3Jlc2V0X3RocmVhZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwogCiYjNDM7dm9pZCBwZHNjX2hvc3RfbWVtX2FkZChzdHJ1Y3QgcGRzYyAqcGRzYyk7CiYjNDM7dm9pZCBwZHNjX2hvc3RfbWVtX2ZyZWUoc3RydWN0IHBkc2MgKnBkc2MpOwomIzQzOwomIzQzO3ZvaWQgcGRzY19kZWZlcnJlZF9kbWFfYWRkKHN0cnVjdCBwZHNjICpwZHNjLCBzdHJ1Y3QgcGRzY19kZWZlcnJlZF9kbWEgKmVudHJ5LAomIzQzOwkJCSAgIGRtYV9hZGRyX3QgZG1hX2FkZHIsIHZvaWQgKnZhLCBzaXplX3Qgc2l6ZSwKJiM0MzsJCQkgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpOwomIzQzO3ZvaWQgcGRzY19kZWZlcnJlZF9kbWFfZnJlZShzdHJ1Y3QgcGRzYyAqcGRzYyk7CiYjNDM7CiAjZW5kaWYgLyogX1BEU0NfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9kZWJ1Z2ZzLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvZGVidWdmcy5jCmluZGV4IDgxMGEwY2Q5YmNhYzguLmVmMGExYjdkMTU5YjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9kZWJ1Z2ZzLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL2RlYnVnZnMuYwpAQCAtMTc4LDMgJiM0MzsxNzgsNDggQEAgdm9pZCBwZHNjX2RlYnVnZnNfZGVsX3FjcShzdHJ1Y3QgcGRzY19xY3EgKnFjcSkKIAlkZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmUocWNxLSZndDtkZW50cnkpOwogCXFjcS0mZ3Q7ZGVudHJ5ID0gTlVMTDsKIH0KJiM0MzsKJiM0MztzdGF0aWMgaW50IGhvc3RfbWVtX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcGRzYyAqcGRzYyA9IHNlcS0mZ3Q7cHJpdmF0ZTsKJiM0MzsJc3RydWN0IHBkc2NfaG9zdF9tZW0gKmhtOwomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJaWYgKCFwZHNjLSZndDtob3N0X21lbV9yZXFzIHx8IHBkc2MtJmd0O251bV9ob3N0X21lbV9yZXFzID09IDApIHsKJiM0MzsJCXNlcV9wdXRzKHNlcSwgJiMzNDtObyBob3N0IG1lbW9yeSBhbGxvY2F0ZWRcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CiYjNDM7CXNlcV9wcmludGYoc2VxLCAmIzM0O0hvc3QgbWVtb3J5IHJlcXVlc3RzOiAldVxuXG4mIzM0OywKJiM0MzsJCSAgIHBkc2MtJmd0O251bV9ob3N0X21lbV9yZXFzKTsKJiM0MzsJc2VxX3B1dHMoc2VxLCAmIzM0O1RhZyAgICBTaXplICAgICAgICAgT3JkZXIgIFBBXG4mIzM0Oyk7CiYjNDM7CXNlcV9wdXRzKHNlcSwgJiMzNDstLS0gICAgLS0tLSAgICAgICAgIC0tLS0tICAtLVxuJiMzNDspOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgcGRzYy0mZ3Q7bnVtX2hvc3RfbWVtX3JlcXM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlobSA9ICZhbXA7cGRzYy0mZ3Q7aG9zdF9tZW1fcmVxc1tpXTsKJiM0MzsKJiM0MzsJCWlmICghaG0tJmd0O3BnKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJc2VxX3ByaW50ZihzZXEsICYjMzQ7JS02dSAlLTEydSAlLTZ1ICVwYWRcbiYjMzQ7LAomIzQzOwkJCSAgIGhtLSZndDt0YWcsIGhtLSZndDtzaXplLCBobS0mZ3Q7b3JkZXIsICZhbXA7aG0tJmd0O3BhKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7REVGSU5FX1NIT1dfQVRUUklCVVRFKGhvc3RfbWVtKTsKJiM0MzsKJiM0Mzt2b2lkIHBkc2NfZGVidWdmc19hZGRfaG9zdF9tZW0oc3RydWN0IHBkc2MgKnBkc2MpCiYjNDM7ewomIzQzOwlpZiAoIShwZHNjLSZndDtkZXZfaWRlbnQuY2FwYWJpbGl0aWVzICZhbXA7CiYjNDM7CSAgICAgY3B1X3RvX2xlNjQoUERTX0NPUkVfREVWX0NBUF9IT1NUX01FTSkpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCYjMzQ7aG9zdF9tZW0mIzM0OywgMDQwMCwgcGRzYy0mZ3Q7ZGVudHJ5LAomIzQzOwkJCSAgICBwZHNjLCAmYW1wO2hvc3RfbWVtX2ZvcHMpOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIHBkc2NfZGVidWdmc19kZWxfaG9zdF9tZW0oc3RydWN0IHBkc2MgKnBkc2MpCiYjNDM7ewomIzQzOwlkZWJ1Z2ZzX2xvb2t1cF9hbmRfcmVtb3ZlKCYjMzQ7aG9zdF9tZW0mIzM0OywgcGRzYy0mZ3Q7ZGVudHJ5KTsKJiM0Mzt9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvZGV2LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvZGV2LmMKaW5kZXggYmRlZDZiMzMyODljZS4uYzUwNzc4MTc1ZTJmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL2Rldi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9kZXYuYwpAQCAtMTI2LDcgJiM0MzsxMjYsOCBAQCBzdGF0aWMgY29uc3QgY2hhciAqcGRzY19kZXZjbWRfc3RyKGludCBvcGNvZGUpCiAJfQogfQogCi1zdGF0aWMgaW50IHBkc2NfZGV2Y21kX3dhaXQoc3RydWN0IHBkc2MgKnBkc2MsIHU4IG9wY29kZSwgaW50IG1heF9zZWNvbmRzKQomIzQzO3N0YXRpYyBpbnQgX19wZHNjX2RldmNtZF93YWl0KHN0cnVjdCBwZHNjICpwZHNjLCB1OCBvcGNvZGUsIGludCBtYXhfc2Vjb25kcywKJiM0MzsJCQkgICAgICBjb25zdCBib29sIGRvX21zZykKIHsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBwZHNjLSZndDtkZXY7CiAJdW5zaWduZWQgbG9uZyBzdGFydF90aW1lOwpAQCAtMTc5LDcgJiM0MzsxODAsNyBAQCBzdGF0aWMgaW50IHBkc2NfZGV2Y21kX3dhaXQoc3RydWN0IHBkc2MgKnBkc2MsIHU4IG9wY29kZSwgaW50IG1heF9zZWNvbmRzKQogCiAJc3RhdHVzID0gcGRzY19kZXZjbWRfc3RhdHVzKHBkc2MpOwogCWVyciA9IHBkc2NfZXJyX3RvX2Vycm5vKHN0YXR1cyk7Ci0JaWYgKGVyciAmYW1wOyZhbXA7IGVyciAhPSAtRUFHQUlOKQomIzQzOwlpZiAoZG9fbXNnICZhbXA7JmFtcDsgZXJyICZhbXA7JmFtcDsgZXJyICE9IC1FQUdBSU4pCiAJCWRldl9lcnIoZGV2LCAmIzM0O0RFVkNNRCAlZCAlcyBmYWlsZWQsIHN0YXR1cz0lZCBlcnIgJWQgJXBlXG4mIzM0OywKIAkJCW9wY29kZSwgcGRzY19kZXZjbWRfc3RyKG9wY29kZSksIHN0YXR1cywgZXJyLAogCQkJRVJSX1BUUihlcnIpKTsKQEAgLTE4Nyw4ICYjNDM7MTg4LDkgQEAgc3RhdGljIGludCBwZHNjX2RldmNtZF93YWl0KHN0cnVjdCBwZHNjICpwZHNjLCB1OCBvcGNvZGUsIGludCBtYXhfc2Vjb25kcykKIAlyZXR1cm4gZXJyOwogfQogCi1pbnQgcGRzY19kZXZjbWRfbG9ja2VkKHN0cnVjdCBwZHNjICpwZHNjLCB1bmlvbiBwZHNfY29yZV9kZXZfY21kICpjbWQsCi0JCSAgICAgICB1bmlvbiBwZHNfY29yZV9kZXZfY29tcCAqY29tcCwgaW50IG1heF9zZWNvbmRzKQomIzQzO3N0YXRpYyBpbnQgX19wZHNjX2RldmNtZF9sb2NrZWQoc3RydWN0IHBkc2MgKnBkc2MsIHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgKmNtZCwKJiM0MzsJCQkJdW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgKmNvbXAsIGludCBtYXhfc2Vjb25kcywKJiM0MzsJCQkJY29uc3QgYm9vbCBkb19tc2cpCiB7CiAJaW50IGVycjsKIApAQCAtMTk3LDE2ICYjNDM7MTk5LDYzIEBAIGludCBwZHNjX2RldmNtZF9sb2NrZWQoc3RydWN0IHBkc2MgKnBkc2MsIHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgKmNtZCwKIAogCW1lbWNweV90b2lvKCZhbXA7cGRzYy0mZ3Q7Y21kX3JlZ3MtJmd0O2NtZCwgY21kLCBzaXplb2YoKmNtZCkpOwogCXBkc2NfZGV2Y21kX2RiZWxsKHBkc2MpOwotCWVyciA9IHBkc2NfZGV2Y21kX3dhaXQocGRzYywgY21kLSZndDtvcGNvZGUsIG1heF9zZWNvbmRzKTsKJiM0MzsJZXJyID0gX19wZHNjX2RldmNtZF93YWl0KHBkc2MsIGNtZC0mZ3Q7b3Bjb2RlLCBtYXhfc2Vjb25kcywgZG9fbXNnKTsKIAogCWlmICgoZXJyID09IC1FTlhJTyB8fCBlcnIgPT0gLUVUSU1FRE9VVCkgJmFtcDsmYW1wOyBwZHNjLSZndDt3cSkKIAkJcXVldWVfd29yayhwZHNjLSZndDt3cSwgJmFtcDtwZHNjLSZndDtoZWFsdGhfd29yayk7CiAJZWxzZQogCQltZW1jcHlfZnJvbWlvKGNvbXAsICZhbXA7cGRzYy0mZ3Q7Y21kX3JlZ3MtJmd0O2NvbXAsIHNpemVvZigqY29tcCkpOwogCiYjNDM7CWlmIChlcnIgIT0gLUVUSU1FRE9VVCAmYW1wOyZhbXA7IGVyciAhPSAtRUFHQUlOKQomIzQzOwkJcGRzY19kZWZlcnJlZF9kbWFfZnJlZShwZHNjKTsKJiM0MzsKIAlyZXR1cm4gZXJyOwogfQogCiYjNDM7dm9pZCBwZHNjX2RlZmVycmVkX2RtYV9hZGQoc3RydWN0IHBkc2MgKnBkc2MsIHN0cnVjdCBwZHNjX2RlZmVycmVkX2RtYSAqZW50cnksCiYjNDM7CQkJICAgZG1hX2FkZHJfdCBkbWFfYWRkciwgdm9pZCAqdmEsIHNpemVfdCBzaXplLAomIzQzOwkJCSAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKJiM0Mzt7CiYjNDM7CWVudHJ5LSZndDtkbWFfYWRkciA9IGRtYV9hZGRyOwomIzQzOwllbnRyeS0mZ3Q7dmEgPSB2YTsKJiM0MzsJZW50cnktJmd0O3NpemUgPSBzaXplOwomIzQzOwllbnRyeS0mZ3Q7ZGlyID0gZGlyOwomIzQzOwomIzQzOwlzcGluX2xvY2soJmFtcDtwZHNjLSZndDtkZWZlcnJlZF9kbWFfbG9jayk7CiYjNDM7CWxpc3RfYWRkX3RhaWwoJmFtcDtlbnRyeS0mZ3Q7bGlzdCwgJmFtcDtwZHNjLSZndDtkZWZlcnJlZF9kbWFfbGlzdCk7CiYjNDM7CXNwaW5fdW5sb2NrKCZhbXA7cGRzYy0mZ3Q7ZGVmZXJyZWRfZG1hX2xvY2spOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIHBkc2NfZGVmZXJyZWRfZG1hX2ZyZWUoc3RydWN0IHBkc2MgKnBkc2MpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcGRzY19kZWZlcnJlZF9kbWEgKmVudHJ5LCAqdG1wOwomIzQzOwlMSVNUX0hFQUQobG9jYWxfbGlzdCk7CiYjNDM7CiYjNDM7CXNwaW5fbG9jaygmYW1wO3Bkc2MtJmd0O2RlZmVycmVkX2RtYV9sb2NrKTsKJiM0MzsJbGlzdF9zcGxpY2VfaW5pdCgmYW1wO3Bkc2MtJmd0O2RlZmVycmVkX2RtYV9saXN0LCAmYW1wO2xvY2FsX2xpc3QpOwomIzQzOwlzcGluX3VubG9jaygmYW1wO3Bkc2MtJmd0O2RlZmVycmVkX2RtYV9sb2NrKTsKJiM0MzsKJiM0MzsJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGVudHJ5LCB0bXAsICZhbXA7bG9jYWxfbGlzdCwgbGlzdCkgewomIzQzOwkJZG1hX3VubWFwX3NpbmdsZShwZHNjLSZndDtkZXYsIGVudHJ5LSZndDtkbWFfYWRkciwKJiM0MzsJCQkJIGVudHJ5LSZndDtzaXplLCBlbnRyeS0mZ3Q7ZGlyKTsKJiM0MzsJCWtmcmVlKGVudHJ5LSZndDt2YSk7CiYjNDM7CQlsaXN0X2RlbCgmYW1wO2VudHJ5LSZndDtsaXN0KTsKJiM0MzsJCWtmcmVlKGVudHJ5KTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztpbnQgcGRzY19kZXZjbWRfbG9ja2VkKHN0cnVjdCBwZHNjICpwZHNjLCB1bmlvbiBwZHNfY29yZV9kZXZfY21kICpjbWQsCiYjNDM7CQkgICAgICAgdW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgKmNvbXAsIGludCBtYXhfc2Vjb25kcykKJiM0Mzt7CiYjNDM7CXJldHVybiBfX3Bkc2NfZGV2Y21kX2xvY2tlZChwZHNjLCBjbWQsIGNvbXAsIG1heF9zZWNvbmRzLCB0cnVlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IHBkc2NfZGV2Y21kX2xvY2tlZF9ub21zZyhzdHJ1Y3QgcGRzYyAqcGRzYywgdW5pb24gcGRzX2NvcmVfZGV2X2NtZCAqY21kLAomIzQzOwkJCSAgICAgdW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgKmNvbXAsIGludCBtYXhfc2Vjb25kcykKJiM0Mzt7CiYjNDM7CXJldHVybiBfX3Bkc2NfZGV2Y21kX2xvY2tlZChwZHNjLCBjbWQsIGNvbXAsIG1heF9zZWNvbmRzLCBmYWxzZSk7CiYjNDM7fQomIzQzOwogaW50IHBkc2NfZGV2Y21kKHN0cnVjdCBwZHNjICpwZHNjLCB1bmlvbiBwZHNfY29yZV9kZXZfY21kICpjbWQsCiAJCXVuaW9uIHBkc19jb3JlX2Rldl9jb21wICpjb21wLCBpbnQgbWF4X3NlY29uZHMpCiB7CkBAIC0yMTksNiAmIzQzOzI2OCw0NyBAQCBpbnQgcGRzY19kZXZjbWQoc3RydWN0IHBkc2MgKnBkc2MsIHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgKmNtZCwKIAlyZXR1cm4gZXJyOwogfQogCiYjNDM7c3RhdGljIGludCBfX3Bkc2NfZGV2Y21kX3dpdGhfZGF0YShzdHJ1Y3QgcGRzYyAqcGRzYywKJiM0MzsJCQkJICAgdW5pb24gcGRzX2NvcmVfZGV2X2NtZCAqY21kLAomIzQzOwkJCQkgICBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgZGF0YV9sZW4sCiYjNDM7CQkJCSAgIHVuaW9uIHBkc19jb3JlX2Rldl9jb21wICpjb21wLAomIzQzOwkJCQkgICBpbnQgbWF4X3NlY29uZHMsIGJvb2wgZG9fbXNnKQomIzQzO3sKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3Bkc2MtJmd0O2RldmNtZF9sb2NrKTsKJiM0MzsJaWYgKCFwZHNjLSZndDtjbWRfcmVncykgewomIzQzOwkJZXJyID0gLUVOWElPOwomIzQzOwkJZ290byB1bmxvY2s7CiYjNDM7CX0KJiM0MzsJaWYgKGRhdGFfbGVuICZndDsgc2l6ZW9mKHBkc2MtJmd0O2NtZF9yZWdzLSZndDtkYXRhKSkgewomIzQzOwkJZXJyID0gLUVOT1NQQzsKJiM0MzsJCWdvdG8gdW5sb2NrOwomIzQzOwl9CiYjNDM7CW1lbWNweV90b2lvKCZhbXA7cGRzYy0mZ3Q7Y21kX3JlZ3MtJmd0O2RhdGEsIGRhdGEsIGRhdGFfbGVuKTsKJiM0MzsJZXJyID0gX19wZHNjX2RldmNtZF9sb2NrZWQocGRzYywgY21kLCBjb21wLCBtYXhfc2Vjb25kcywgZG9fbXNnKTsKJiM0Mzt1bmxvY2s6CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO3Bkc2MtJmd0O2RldmNtZF9sb2NrKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IHBkc2NfZGV2Y21kX3dpdGhfZGF0YShzdHJ1Y3QgcGRzYyAqcGRzYywgdW5pb24gcGRzX2NvcmVfZGV2X2NtZCAqY21kLAomIzQzOwkJCSAgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGRhdGFfbGVuLAomIzQzOwkJCSAgdW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgKmNvbXAsIGludCBtYXhfc2Vjb25kcykKJiM0Mzt7CiYjNDM7CXJldHVybiBfX3Bkc2NfZGV2Y21kX3dpdGhfZGF0YShwZHNjLCBjbWQsIGRhdGEsIGRhdGFfbGVuLAomIzQzOwkJCQkgICAgICAgY29tcCwgbWF4X3NlY29uZHMsIHRydWUpOwomIzQzO30KJiM0MzsKJiM0MztpbnQgcGRzY19kZXZjbWRfd2l0aF9kYXRhX25vbXNnKHN0cnVjdCBwZHNjICpwZHNjLCB1bmlvbiBwZHNfY29yZV9kZXZfY21kICpjbWQsCiYjNDM7CQkJCWNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBkYXRhX2xlbiwKJiM0MzsJCQkJdW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgKmNvbXAsIGludCBtYXhfc2Vjb25kcykKJiM0Mzt7CiYjNDM7CXJldHVybiBfX3Bkc2NfZGV2Y21kX3dpdGhfZGF0YShwZHNjLCBjbWQsIGRhdGEsIGRhdGFfbGVuLAomIzQzOwkJCQkgICAgICAgY29tcCwgbWF4X3NlY29uZHMsIGZhbHNlKTsKJiM0Mzt9CiYjNDM7CiBpbnQgcGRzY19kZXZjbWRfaW5pdChzdHJ1Y3QgcGRzYyAqcGRzYykKIHsKIAl1bmlvbiBwZHNfY29yZV9kZXZfY29tcCBjb21wID0ge307CkBAIC0yNDIsMTUgJiM0MzszMzIsMTcgQEAgaW50IHBkc2NfZGV2Y21kX3Jlc2V0KHN0cnVjdCBwZHNjICpwZHNjKQogCXJldHVybiBwZHNjX2RldmNtZChwZHNjLCAmYW1wO2NtZCwgJmFtcDtjb21wLCBwZHNjLSZndDtkZXZjbWRfdGltZW91dCk7CiB9CiAKLXN0YXRpYyBpbnQgcGRzY19kZXZjbWRfaWRlbnRpZnlfbG9ja2VkKHN0cnVjdCBwZHNjICpwZHNjKQomIzQzO3N0YXRpYyBpbnQgcGRzY19kZXZjbWRfaWRlbnRpZnlfbG9ja2VkKHN0cnVjdCBwZHNjICpwZHNjLCB1OCBkcnZfaWRlbnRfdmVyLAomIzQzOwkJCQkgICAgICAgYm9vbCBkb19tc2cpCiB7CiAJdW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgY29tcCA9IHt9OwogCXVuaW9uIHBkc19jb3JlX2Rldl9jbWQgY21kID0gewogCQkuaWRlbnRpZnkub3Bjb2RlID0gUERTX0NPUkVfQ01EX0lERU5USUZZLAotCQkuaWRlbnRpZnkudmVyID0gUERTX0NPUkVfSURFTlRJVFlfVkVSU0lPTl8xLAomIzQzOwkJLmlkZW50aWZ5LnZlciA9IGRydl9pZGVudF92ZXIsCiAJfTsKIAotCXJldHVybiBwZHNjX2RldmNtZF9sb2NrZWQocGRzYywgJmFtcDtjbWQsICZhbXA7Y29tcCwgcGRzYy0mZ3Q7ZGV2Y21kX3RpbWVvdXQpOwomIzQzOwlyZXR1cm4gX19wZHNjX2RldmNtZF9sb2NrZWQocGRzYywgJmFtcDtjbWQsICZhbXA7Y29tcCwgcGRzYy0mZ3Q7ZGV2Y21kX3RpbWVvdXQsCiYjNDM7CQkJCSAgICBkb19tc2cpOwogfQogCiBzdGF0aWMgdm9pZCBwZHNjX2luaXRfZGV2aW5mbyhzdHJ1Y3QgcGRzYyAqcGRzYykKQEAgLTI3Myw4ICYjNDM7MzY1LDkgQEAgc3RhdGljIHZvaWQgcGRzY19pbml0X2RldmluZm8oc3RydWN0IHBkc2MgKnBkc2MpCiAJZGV2X2RiZyhwZHNjLSZndDtkZXYsICYjMzQ7ZndfdmVyc2lvbiAlc1xuJiMzNDssIHBkc2MtJmd0O2Rldl9pbmZvLmZ3X3ZlcnNpb24pOwogfQogCi1zdGF0aWMgaW50IHBkc2NfaWRlbnRpZnkoc3RydWN0IHBkc2MgKnBkc2MpCiYjNDM7c3RhdGljIGludCBwZHNjX2lkZW50aWZ5X3ZlcihzdHJ1Y3QgcGRzYyAqcGRzYywgdTggZHJ2X2lkZW50X3ZlcikKIHsKJiM0MzsJYm9vbCBkb19tc2cgPSBkcnZfaWRlbnRfdmVyID09IFBEU19DT1JFX0lERU5USVRZX1ZFUlNJT05fMTsKIAlzdHJ1Y3QgcGRzX2NvcmVfZHJ2X2lkZW50aXR5IGRydiA9IHt9OwogCXNpemVfdCBzejsKIAlpbnQgZXJyOwpAQCAtMjk3LDE5ICYjNDM7MzkwLDIyIEBAIHN0YXRpYyBpbnQgcGRzY19pZGVudGlmeShzdHJ1Y3QgcGRzYyAqcGRzYykKIAlzeiA9IG1pbl90KHNpemVfdCwgc2l6ZW9mKGRydiksIHNpemVvZihwZHNjLSZndDtjbWRfcmVncy0mZ3Q7ZGF0YSkpOwogCW1lbWNweV90b2lvKCZhbXA7cGRzYy0mZ3Q7Y21kX3JlZ3MtJmd0O2RhdGEsICZhbXA7ZHJ2LCBzeik7CiAKLQllcnIgPSBwZHNjX2RldmNtZF9pZGVudGlmeV9sb2NrZWQocGRzYyk7CiYjNDM7CWVyciA9IHBkc2NfZGV2Y21kX2lkZW50aWZ5X2xvY2tlZChwZHNjLCBkcnZfaWRlbnRfdmVyLCBkb19tc2cpOwogCWlmICghZXJyKSB7CiAJCXN6ID0gbWluX3Qoc2l6ZV90LCBzaXplb2YocGRzYy0mZ3Q7ZGV2X2lkZW50KSwKIAkJCSAgIHNpemVvZihwZHNjLSZndDtjbWRfcmVncy0mZ3Q7ZGF0YSkpOwogCQltZW1jcHlfZnJvbWlvKCZhbXA7cGRzYy0mZ3Q7ZGV2X2lkZW50LCAmYW1wO3Bkc2MtJmd0O2NtZF9yZWdzLSZndDtkYXRhLCBzeik7CiYjNDM7CiYjNDM7CQkvKiBWMSBmaXJtd2FyZSBkb2VzbiYjMzk7dCBzZXQgY2FwYWJpbGl0aWVzLCBzbyB0aGUgZmllbGQgbWF5CiYjNDM7CQkgKiBjb250YWluIGdhcmJhZ2UgZnJvbSB0aGUgb3V0Z29pbmcgZHJpdmVyIGlkZW50aXR5LgomIzQzOwkJICovCiYjNDM7CQlpZiAocGRzYy0mZ3Q7ZGV2X2lkZW50LnZlcnNpb24gJmx0OyBQRFNfQ09SRV9JREVOVElUWV9WRVJTSU9OXzIpCiYjNDM7CQkJcGRzYy0mZ3Q7ZGV2X2lkZW50LmNhcGFiaWxpdGllcyA9IDA7CiAJfQogCW11dGV4X3VubG9jaygmYW1wO3Bkc2MtJmd0O2RldmNtZF9sb2NrKTsKIAotCWlmIChlcnIpIHsKLQkJZGV2X2VycihwZHNjLSZndDtkZXYsICYjMzQ7Q2Fubm90IGlkZW50aWZ5IGRldmljZTogJXBlXG4mIzM0OywKLQkJCUVSUl9QVFIoZXJyKSk7CiYjNDM7CWlmIChlcnIpCiAJCXJldHVybiBlcnI7Ci0JfQogCiAJaWYgKGlzcHJpbnQocGRzYy0mZ3Q7ZGV2X2luZm8uZndfdmVyc2lvblswXSkgJmFtcDsmYW1wOwogCSAgICBpc2FzY2lpKHBkc2MtJmd0O2Rldl9pbmZvLmZ3X3ZlcnNpb25bMF0pKQpAQCAtMzI2LDYgJiM0Mzs0MjIsMjYgQEAgc3RhdGljIGludCBwZHNjX2lkZW50aWZ5KHN0cnVjdCBwZHNjICpwZHNjKQogCXJldHVybiAwOwogfQogCiYjNDM7c3RhdGljIGludCBwZHNjX2lkZW50aWZ5KHN0cnVjdCBwZHNjICpwZHNjKQomIzQzO3sKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJLyogT2xkZXIgZmlybXdhcmUgcmVqZWN0cyBhbnl0aGluZyBidXQgUERTX0NPUkVfSURFTlRJVFlfVkVSU0lPTl8xCiYjNDM7CSAqIHdpdGggUERTX1JDX0VWRVJTSU9OICgtRUlOVkFMKSwgc28gcmV0cnkgd2l0aCBWMSBvbiB2ZXJzaW9uCiYjNDM7CSAqIHJlamVjdGlvbi4gRG9uJiMzOTt0IHJldHJ5IG9uIG90aGVyIGVycm9ycyBsaWtlIC1FTlhJTy8tRVRJTUVET1VUCiYjNDM7CSAqIHdoaWNoIGluZGljYXRlIGZpcm13YXJlIGlzIG5vdCBydW5uaW5nIG9yIGh1bmcuCiYjNDM7CSAqLwomIzQzOwllcnIgPSBwZHNjX2lkZW50aWZ5X3ZlcihwZHNjLCBQRFNfQ09SRV9JREVOVElUWV9WRVJTSU9OXzIpOwomIzQzOwlpZiAoZXJyID09IC1FSU5WQUwpCiYjNDM7CQllcnIgPSBwZHNjX2lkZW50aWZ5X3ZlcihwZHNjLCBQRFNfQ09SRV9JREVOVElUWV9WRVJTSU9OXzEpOwomIzQzOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJZGV2X2VycihwZHNjLSZndDtkZXYsICYjMzQ7Q2Fubm90IGlkZW50aWZ5IGRldmljZTogJXBlXG4mIzM0OywKJiM0MzsJCQlFUlJfUFRSKGVycikpOwomIzQzOwomIzQzOwlyZXR1cm4gZXJyOwomIzQzO30KJiM0MzsKIHZvaWQgcGRzY19kZXZfdW5pbml0KHN0cnVjdCBwZHNjICpwZHNjKQogewogCWlmIChwZHNjLSZndDtpbnRyX2luZm8pIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9kZXZsaW5rLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvZGV2bGluay5jCmluZGV4IDhhZGFlN2IxODg5OGQuLjYzZmU0NWU5MWY3MTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9kZXZsaW5rLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL2RldmxpbmsuYwpAQCAtOTAsMTMgJiM0Mzs5MCwxMTIgQEAgaW50IHBkc2NfZGxfZmxhc2hfdXBkYXRlKHN0cnVjdCBkZXZsaW5rICpkbCwKIHsKIAlzdHJ1Y3QgcGRzYyAqcGRzYyA9IGRldmxpbmtfcHJpdihkbCk7CiAKLQlpZiAocGFyYW1zLSZndDtjb21wb25lbnQpIHsKLQkJTkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywKLQkJCQkgICAmIzM0O0NvbXBvbmVudCB1cGRhdGUgbm90IHN1cHBvcnRlZCBieSB0aGlzIGRldmljZSYjMzQ7KTsKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwlyZXR1cm4gcGRzY19maXJtd2FyZV91cGRhdGUocGRzYywgcGFyYW1zLCBleHRhY2spOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHBkc2NfZGxfcmVwb3J0X2NvbXBvbmVudChzdHJ1Y3QgZGV2bGlua19pbmZvX3JlcSAqcmVxLAomIzQzOwkJCQkgICAgc3RydWN0IHBkc19jb3JlX2Z3X2NvbXBvbmVudF9pbmZvICppbmZvKQomIzQzO3sKJiM0MzsJZW51bSBkZXZsaW5rX2luZm9fdmVyc2lvbl90eXBlIHZlcl90eXBlOwomIzQzOwl1MTYgZmxhZ3MgPSBsZTE2X3RvX2NwdShpbmZvLSZndDtmbGFncyk7CiYjNDM7CWNoYXIgKnZlciA9IGluZm8tJmd0O3ZlcnNpb247CiYjNDM7CWNvbnN0IGNoYXIgKm5hbWU7CiYjNDM7CWNoYXIgYnVmWzMyXTsKJiM0MzsKJiM0MzsJLyogTWFpbiBmaXJtd2FyZSBpcyByZXBvcnRlZCBhcyBnZW5lcmljICYjMzQ7ZncmIzM0OyAqLwomIzQzOwlpZiAoaW5mby0mZ3Q7Y29tcG9uZW50X3R5cGUgPT0gUERTX0NPUkVfRldfVFlQRV9NQUlOKSB7CiYjNDM7CQlpZiAoaW5mby0mZ3Q7c2xvdF9pZCA9PSBQRFNfQ09SRV9GV19TTE9UX0dPTEQpCiYjNDM7CQkJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgJiMzNDtmdy5nb2xkJiMzNDspOwomIzQzOwkJZWxzZQomIzQzOwkJCXNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICYjMzQ7ZncmIzM0Oyk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQluYW1lID0gcGRzY19md190eXBlX3RvX25hbWUoaW5mby0mZ3Q7Y29tcG9uZW50X3R5cGUpOwomIzQzOwkJaWYgKCFuYW1lKQomIzQzOwkJCXJldHVybiAwOwomIzQzOwomIzQzOwkJaWYgKGluZm8tJmd0O3Nsb3RfaWQgPT0gUERTX0NPUkVfRldfU0xPVF9HT0xEKQomIzQzOwkJCXNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICYjMzQ7ZncuJXMuZ29sZCYjMzQ7LCBuYW1lKTsKJiM0MzsJCWVsc2UKJiM0MzsJCQlzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAmIzM0O2Z3LiVzJiMzNDssIG5hbWUpOwomIzQzOwl9CiYjNDM7CiYjNDM7CXZlcl90eXBlID0gREVWTElOS19JTkZPX1ZFUlNJT05fVFlQRV9OT05FOwomIzQzOwlpZiAoZmxhZ3MgJmFtcDsgUERTX0NPUkVfRldfQ09NUE9ORU5UX0lORk9fRl9VUERBVEVfQllfTkFNRSkKJiM0MzsJCXZlcl90eXBlID0gREVWTElOS19JTkZPX1ZFUlNJT05fVFlQRV9DT01QT05FTlQ7CiYjNDM7CiYjNDM7CWlmIChmbGFncyAmYW1wOyBQRFNfQ09SRV9GV19DT01QT05FTlRfSU5GT19GX0ZJWEVEKSB7CiYjNDM7CQlpbnQgZXJyOwomIzQzOwomIzQzOwkJZXJyID0gZGV2bGlua19pbmZvX3ZlcnNpb25fZml4ZWRfcHV0KHJlcSwgYnVmLCB2ZXIpOwomIzQzOwkJaWYgKGVycikKJiM0MzsJCQlyZXR1cm4gZXJyOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChmbGFncyAmYW1wOyBQRFNfQ09SRV9GV19DT01QT05FTlRfSU5GT19GX1JVTk5JTkcpIHsKJiM0MzsJCWludCBlcnI7CiYjNDM7CiYjNDM7CQllcnIgPSBkZXZsaW5rX2luZm9fdmVyc2lvbl9ydW5uaW5nX3B1dF9leHQocmVxLCBidWYsCiYjNDM7CQkJCQkJCSAgIHZlciwgdmVyX3R5cGUpOwomIzQzOwkJaWYgKGVycikKJiM0MzsJCQlyZXR1cm4gZXJyOwogCX0KIAotCXJldHVybiBwZHNjX2Zpcm13YXJlX3VwZGF0ZShwZHNjLCBwYXJhbXMtJmd0O2Z3LCBleHRhY2spOwomIzQzOwlpZiAoZmxhZ3MgJmFtcDsgUERTX0NPUkVfRldfQ09NUE9ORU5UX0lORk9fRl9TVEFSVFVQKSB7CiYjNDM7CQlpbnQgZXJyOwomIzQzOwomIzQzOwkJZXJyID0gZGV2bGlua19pbmZvX3ZlcnNpb25fc3RvcmVkX3B1dF9leHQocmVxLCBidWYsCiYjNDM7CQkJCQkJCSAgdmVyLCB2ZXJfdHlwZSk7CiYjNDM7CQlpZiAoZXJyKQomIzQzOwkJCXJldHVybiBlcnI7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcGRzY19kbF9yZXBvcnRfZndfdmVyKHN0cnVjdCBkZXZsaW5rX2luZm9fcmVxICpyZXEsIGNoYXIgKmZ3X3ZlcikKJiM0Mzt7CiYjNDM7CXJldHVybiBkZXZsaW5rX2luZm9fdmVyc2lvbl9ydW5uaW5nX3B1dChyZXEsCiYjNDM7CQkJCQkJREVWTElOS19JTkZPX1ZFUlNJT05fR0VORVJJQ19GVywKJiM0MzsJCQkJCQlmd192ZXIpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHBkc2NfZGxfY29tcG9uZW50X2luZm9fZ2V0KHN0cnVjdCBkZXZsaW5rICpkbCwKJiM0MzsJCQkJICAgICAgc3RydWN0IGRldmxpbmtfaW5mb19yZXEgKnJlcSwKJiM0MzsJCQkJICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQomIzQzO3sKJiM0MzsJc3RydWN0IHBkc2MgKnBkc2MgPSBkZXZsaW5rX3ByaXYoZGwpOwomIzQzOwl1OCBudW1fY29tcG9uZW50czsKJiM0MzsJaW50IGVycjsKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CS8qIFBhaXJzIHdpdGggV1JJVEVfT05DRSBpbiBwZHNjX2Z3X2NvbXBvbmVudHNfaW52YWxpZGF0ZSgpLgomIzQzOwkgKiBVc2UgUkVBRF9PTkNFIHRvIGdldCBhIGNvbnNpc3RlbnQgc25hcHNob3Qgb2YgbnVtX2NvbXBvbmVudHMuCiYjNDM7CSAqIHBkc2NfZndfY29tcG9uZW50c19pbnZhbGlkYXRlKCkgY2FuIHplcm8gaXQgY29uY3VycmVudGx5IGR1cmluZwomIzQzOwkgKiBmaXJtd2FyZSByZWNvdmVyeTsgdXNpbmcgdGhlIGxvY2FsIGNvcHkgYXZvaWRzIGl0ZXJhdGluZyB6ZXJvCiYjNDM7CSAqIHRpbWVzIHdoZW4gd2UgYWxyZWFkeSBkZWNpZGVkIHRoZSBjYWNoZSB3YXMgdmFsaWQuCiYjNDM7CSAqLwomIzQzOwludW1fY29tcG9uZW50cyA9IFJFQURfT05DRShwZHNjLSZndDtmd19jb21wb25lbnRzLm51bV9jb21wb25lbnRzKTsKJiM0MzsJaWYgKCFudW1fY29tcG9uZW50cykgewomIzQzOwkJZXJyID0gcGRzY19nZXRfY29tcG9uZW50X2luZm8ocGRzYyk7CiYjNDM7CQlpZiAoZXJyKQomIzQzOwkJCXJldHVybiBwZHNjX2RsX3JlcG9ydF9md192ZXIocmVxLAomIzQzOwkJCQkJCSAgICBwZHNjLSZndDtkZXZfaW5mby5md192ZXJzaW9uKTsKJiM0MzsJCW51bV9jb21wb25lbnRzID0gUkVBRF9PTkNFKHBkc2MtJmd0O2Z3X2NvbXBvbmVudHMubnVtX2NvbXBvbmVudHMpOwomIzQzOwkJaWYgKCFudW1fY29tcG9uZW50cykKJiM0MzsJCQlyZXR1cm4gcGRzY19kbF9yZXBvcnRfZndfdmVyKHJlcSwKJiM0MzsJCQkJCQkgICAgcGRzYy0mZ3Q7ZGV2X2luZm8uZndfdmVyc2lvbik7CiYjNDM7CX0KJiM0MzsKJiM0MzsJbnVtX2NvbXBvbmVudHMgPSBtaW5fdCh1MTYsIG51bV9jb21wb25lbnRzLAomIzQzOwkJCSAgICAgICBsZTE2X3RvX2NwdShwZHNjLSZndDtkZXZfaWRlbnQubWF4X2Z3X3Nsb3RzKSk7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBudW1fY29tcG9uZW50czsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWVyciA9IHBkc2NfZGxfcmVwb3J0X2NvbXBvbmVudChyZXEsCiYjNDM7CQkJCQkgICAgICAgJmFtcDtwZHNjLSZndDtmd19jb21wb25lbnRzLmluZm9baV0pOwomIzQzOwkJaWYgKGVycikKJiM0MzsJCQlyZXR1cm4gZXJyOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwogfQogCiBzdGF0aWMgY2hhciAqZndfc2xvdG5hbWVzW10gPSB7CkBAIC0xMDUsOCAmIzQzOzIwNCw5IEBAIHN0YXRpYyBjaGFyICpmd19zbG90bmFtZXNbXSA9IHsKIAkmIzM0O2Z3Lm1haW5md2ImIzM0OywKIH07CiAKLWludCBwZHNjX2RsX2luZm9fZ2V0KHN0cnVjdCBkZXZsaW5rICpkbCwgc3RydWN0IGRldmxpbmtfaW5mb19yZXEgKnJlcSwKLQkJICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spCiYjNDM7c3RhdGljIGludCBwZHNjX2RsX2Z3X2xpc3RfaW5mb19nZXQoc3RydWN0IGRldmxpbmsgKmRsLAomIzQzOwkJCQkgICAgc3RydWN0IGRldmxpbmtfaW5mb19yZXEgKnJlcSwKJiM0MzsJCQkJICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaykKIHsKIAl1bmlvbiBwZHNfY29yZV9kZXZfY21kIGNtZCA9IHsKIAkJLmZ3X2NvbnRyb2wub3Bjb2RlID0gUERTX0NPUkVfQ01EX0ZXX0NPTlRST0wsCkBAIC0xNDAsMTIgJiM0MzsyNDAsNDEgQEAgaW50IHBkc2NfZGxfaW5mb19nZXQoc3RydWN0IGRldmxpbmsgKmRsLCBzdHJ1Y3QgZGV2bGlua19pbmZvX3JlcSAqcmVxLAogCQkJcmV0dXJuIGVycjsKIAl9CiAKLQllcnIgPSBkZXZsaW5rX2luZm9fdmVyc2lvbl9ydW5uaW5nX3B1dChyZXEsCi0JCQkJCSAgICAgICBERVZMSU5LX0lORk9fVkVSU0lPTl9HRU5FUklDX0ZXLAotCQkJCQkgICAgICAgcGRzYy0mZ3Q7ZGV2X2luZm8uZndfdmVyc2lvbik7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHBkc2NfZGxfaW5mb19nZXRfdjEoc3RydWN0IGRldmxpbmsgKmRsLAomIzQzOwkJCSAgICAgICBzdHJ1Y3QgZGV2bGlua19pbmZvX3JlcSAqcmVxLAomIzQzOwkJCSAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcGRzYyAqcGRzYyA9IGRldmxpbmtfcHJpdihkbCk7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CWVyciA9IHBkc2NfZGxfZndfbGlzdF9pbmZvX2dldChkbCwgcmVxLCBleHRhY2spOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKJiM0MzsJLyogVmVyc2lvbiAxOiByZXBvcnQgZncgZnJvbSBkZXZfaW5mbyAocnVubmluZyBvbmx5KSAqLwomIzQzOwlyZXR1cm4gcGRzY19kbF9yZXBvcnRfZndfdmVyKHJlcSwgcGRzYy0mZ3Q7ZGV2X2luZm8uZndfdmVyc2lvbik7CiYjNDM7fQomIzQzOwomIzQzO2ludCBwZHNjX2RsX2luZm9fZ2V0KHN0cnVjdCBkZXZsaW5rICpkbCwgc3RydWN0IGRldmxpbmtfaW5mb19yZXEgKnJlcSwKJiM0MzsJCSAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQomIzQzO3sKJiM0MzsJc3RydWN0IHBkc2MgKnBkc2MgPSBkZXZsaW5rX3ByaXYoZGwpOwomIzQzOwljaGFyIGJ1ZlszMl07CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CWlmIChwZHNjLSZndDtkZXZfaWRlbnQudmVyc2lvbiAmZ3Q7PSBQRFNfQ09SRV9JREVOVElUWV9WRVJTSU9OXzIpIHsKJiM0MzsJCWVyciA9IHBkc2NfZGxfY29tcG9uZW50X2luZm9fZ2V0KGRsLCByZXEsIGV4dGFjayk7CiYjNDM7CQlpZiAoZXJyKQomIzQzOwkJCXJldHVybiBlcnI7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQllcnIgPSBwZHNjX2RsX2luZm9fZ2V0X3YxKGRsLCByZXEsIGV4dGFjayk7CiYjNDM7CQlpZiAoZXJyKQomIzQzOwkJCXJldHVybiBlcnI7CiYjNDM7CX0KJiM0MzsKIAlzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAmIzM0OzB4JXgmIzM0OywgcGRzYy0mZ3Q7ZGV2X2luZm8uYXNpY190eXBlKTsKIAllcnIgPSBkZXZsaW5rX2luZm9fdmVyc2lvbl9maXhlZF9wdXQocmVxLAogCQkJCQkgICAgIERFVkxJTktfSU5GT19WRVJTSU9OX0dFTkVSSUNfQVNJQ19JRCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9mdy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL2Z3LmMKaW5kZXggZmE2MjY3MTllNjhkMS4uNWNjZjAxN2Y2YWY0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL2Z3LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL2Z3LmMKQEAgLTEsNiAmIzQzOzEsOSBAQAogLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKIC8qIENvcHlyaWdodChjKSAyMDIzIEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYyAqLwogCiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3BsZG1mdy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC92bWFsbG9jLmgmZ3Q7CiYjNDM7CiAjaW5jbHVkZSAmIzM0O2NvcmUuaCYjMzQ7CiAKIC8qIFRoZSB3b3JzdCBjYXNlIHdhaXQgZm9yIHRoZSBpbnN0YWxsIGFjdGl2aXR5IGlzIGFib3V0IDI1IG1pbnV0ZXMgd2hlbgpAQCAtMTQsNiAmIzQzOzE3LDU4IEBACiAvKiBOdW1iZXIgb2YgcGVyaW9kaWMgbG9nIHVwZGF0ZXMgZHVyaW5nIGZ3IGZpbGUgZG93bmxvYWQgKi8KICNkZWZpbmUgUERTQ19GV19JTlRFUlZBTF9GUkFDVElPTgkzMgogCiYjNDM7I2RlZmluZSBQRFNDX0ZXX0NPTVBPTkVOVF9QUkVGSVgJCSYjMzQ7ZncuJiMzNDsKJiM0MzsjZGVmaW5lIFBEU0NfRldfQ09NUE9ORU5UX0ZVTExfTkFNRV9CVUZMRU4gXAomIzQzOwkoc2l6ZW9mKFBEU0NfRldfQ09NUE9ORU5UX1BSRUZJWCkgJiM0MzsgUERTX0NPUkVfRldfQ09NUE9ORU5UX05BTUVfQlVGTEVOKQomIzQzOwomIzQzOy8qIERyaXZlci1kZWZpbmVkIGNvbXBvbmVudCB0eXBlIHRvIG5hbWUgbWFwcGluZy4KJiM0MzsgKiBQRFNfQ09SRV9GV19UWVBFX01BSU4gaXMgTlVMTCAtIGhhbmRsZWQgc3BlY2lhbGx5IGFzICYjMzQ7ZncmIzM0OyB3aXRob3V0IHByZWZpeC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHBkc2NfZndfdHlwZV9uYW1lc1tdID0gewomIzQzOwlbUERTX0NPUkVfRldfVFlQRV9NQUlOXSAgICAgID0gTlVMTCwKJiM0MzsJW1BEU19DT1JFX0ZXX1RZUEVfQk9PVF0gICAgICA9ICYjMzQ7Ym9vdGxvYWRlciYjMzQ7LAomIzQzOwlbUERTX0NPUkVfRldfVFlQRV9DUExEXSAgICAgID0gJiMzNDtjcGxkJiMzNDssCiYjNDM7CVtQRFNfQ09SRV9GV19UWVBFX1NFQ1VSRV0gICAgPSAmIzM0O3NlY3VyZSYjMzQ7LAomIzQzOwlbUERTX0NPUkVfRldfVFlQRV9GUEdBXSAgICAgID0gJiMzNDtmcGdhJiMzNDssCiYjNDM7CVtQRFNfQ09SRV9GV19UWVBFX1NVQ19NQUlOXSAgPSAmIzM0O3N1YyYjMzQ7LAomIzQzOwlbUERTX0NPUkVfRldfVFlQRV9TVUNfQk9PVF0gID0gJiMzNDtzdWMuYm9vdGxvYWRlciYjMzQ7LAomIzQzOwlbUERTX0NPUkVfRldfVFlQRV9VQk9PVF0gICAgID0gJiMzNDt1Ym9vdCYjMzQ7LAomIzQzO307CiYjNDM7CiYjNDM7Y29uc3QgY2hhciAqcGRzY19md190eXBlX3RvX25hbWUodTggdHlwZSkKJiM0Mzt7CiYjNDM7CWlmICh0eXBlICZsdDsgQVJSQVlfU0laRShwZHNjX2Z3X3R5cGVfbmFtZXMpICZhbXA7JmFtcDsgcGRzY19md190eXBlX25hbWVzW3R5cGVdKQomIzQzOwkJcmV0dXJuIHBkc2NfZndfdHlwZV9uYW1lc1t0eXBlXTsKJiM0MzsJcmV0dXJuIE5VTEw7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgcGRzY19md19jb21wb25lbnRzX2ludmFsaWRhdGUoc3RydWN0IHBkc2MgKnBkc2MpCiYjNDM7ewomIzQzOwkvKiBQYWlycyB3aXRoIFJFQURfT05DRSBpbiBwZHNjX2RsX2NvbXBvbmVudF9pbmZvX2dldCgpICovCiYjNDM7CVdSSVRFX09OQ0UocGRzYy0mZ3Q7ZndfY29tcG9uZW50cy5udW1fY29tcG9uZW50cywgMCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB1OCBwZHNjX25hbWVfdG9fZndfdHlwZShjb25zdCBjaGFyICpuYW1lKQomIzQzO3sKJiM0MzsJc2l6ZV90IHByZWZpeF9sZW47CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwkvKiAmIzM0O2Z3JiMzNDsgd2l0aG91dCBzdWZmaXggbWFwcyB0byBtYWluIGZpcm13YXJlICovCiYjNDM7CWlmICghc3RyY21wKG5hbWUsICYjMzQ7ZncmIzM0OykpCiYjNDM7CQlyZXR1cm4gUERTX0NPUkVfRldfVFlQRV9NQUlOOwomIzQzOwomIzQzOwlwcmVmaXhfbGVuID0gc3RyX2hhc19wcmVmaXgobmFtZSwgUERTQ19GV19DT01QT05FTlRfUFJFRklYKTsKJiM0MzsJaWYgKHByZWZpeF9sZW4pCiYjNDM7CQluYW1lICYjNDM7PSBwcmVmaXhfbGVuOwomIzQzOwomIzQzOwlmb3IgKGkgPSAxOyBpICZsdDsgQVJSQVlfU0laRShwZHNjX2Z3X3R5cGVfbmFtZXMpOyBpJiM0MzsmIzQzOykgewomIzQzOwkJaWYgKHBkc2NfZndfdHlwZV9uYW1lc1tpXSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgIXN0cmNtcChuYW1lLCBwZHNjX2Z3X3R5cGVfbmFtZXNbaV0pKQomIzQzOwkJCXJldHVybiBpOwomIzQzOwl9CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgcGRzY19kZXZjbWRfZndfZG93bmxvYWRfbG9ja2VkKHN0cnVjdCBwZHNjICpwZHNjLCB1NjQgYWRkciwKIAkJCQkJICB1MzIgb2Zmc2V0LCB1MzIgbGVuZ3RoKQogewpAQCAtMjMsNyAmIzQzOzc4LDcgQEAgc3RhdGljIGludCBwZHNjX2RldmNtZF9md19kb3dubG9hZF9sb2NrZWQoc3RydWN0IHBkc2MgKnBkc2MsIHU2NCBhZGRyLAogCQkuZndfZG93bmxvYWQuYWRkciA9IGNwdV90b19sZTY0KGFkZHIpLAogCQkuZndfZG93bmxvYWQubGVuZ3RoID0gY3B1X3RvX2xlMzIobGVuZ3RoKSwKIAl9OwotCXVuaW9uIHBkc19jb3JlX2Rldl9jb21wIGNvbXA7CiYjNDM7CXVuaW9uIHBkc19jb3JlX2Rldl9jb21wIGNvbXAgPSB7fTsKIAogCXJldHVybiBwZHNjX2RldmNtZF9sb2NrZWQocGRzYywgJmFtcDtjbWQsICZhbXA7Y29tcCwgcGRzYy0mZ3Q7ZGV2Y21kX3RpbWVvdXQpOwogfQpAQCAtOTUsOSAmIzQzOzE1MCwxMiBAQCBzdGF0aWMgaW50IHBkc2NfZndfc3RhdHVzX2xvbmdfd2FpdChzdHJ1Y3QgcGRzYyAqcGRzYywKIAlyZXR1cm4gZXJyOwogfQogCi1pbnQgcGRzY19maXJtd2FyZV91cGRhdGUoc3RydWN0IHBkc2MgKnBkc2MsIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncsCi0JCQkgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQomIzQzO3N0YXRpYyBpbnQKJiM0MztwZHNjX2xlZ2FjeV9maXJtd2FyZV91cGRhdGUoc3RydWN0IHBkc2MgKnBkc2MsCiYjNDM7CQkJICAgIHN0cnVjdCBkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9wYXJhbXMgKnBhcmFtcywKJiM0MzsJCQkgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQogewomIzQzOwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3ID0gcGFyYW1zLSZndDtmdzsKIAl1MzIgYnVmX3N6LCBjb3B5X3N6LCBvZmZzZXQ7CiAJc3RydWN0IGRldmxpbmsgKmRsOwogCWludCBuZXh0X2ludGVydmFsOwpAQCAtMTA1LDYgJiM0MzsxNjMsMTIgQEAgaW50IHBkc2NfZmlybXdhcmVfdXBkYXRlKHN0cnVjdCBwZHNjICpwZHNjLCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3LAogCWludCBlcnIgPSAwOwogCWludCBmd19zbG90OwogCiYjNDM7CWlmIChwYXJhbXMtJmd0O2NvbXBvbmVudCkgewomIzQzOwkJTkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywKJiM0MzsJCQkJICAgJiMzNDtDb21wb25lbnQgdXBkYXRlIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBkZXZpY2UmIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CX0KJiM0MzsKIAlkZXZfaW5mbyhwZHNjLSZndDtkZXYsICYjMzQ7SW5zdGFsbGluZyBmaXJtd2FyZVxuJiMzNDspOwogCiAJaWYgKCFwZHNjLSZndDtjbWRfcmVncykKQEAgLTE5NSwzICYjNDM7MjU5LDcyOSBAQCBpbnQgcGRzY19maXJtd2FyZV91cGRhdGUoc3RydWN0IHBkc2MgKnBkc2MsIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncsCiAJCQkJCQkgICBOVUxMLCAwLCAwKTsKIAlyZXR1cm4gZXJyOwogfQomIzQzOwomIzQzO3N0cnVjdCBwZHNjX2NvbXBvbmVudF9wcml2IHsKJiM0MzsJdTE2IGNvbXBvbmVudF9pZDsKJiM0MzsJYm9vbCBza2lwOwomIzQzOwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3RfZW50cnk7CiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgcGRzX2NvcmVfZnd1X3ByaXYgewomIzQzOwlzdHJ1Y3QgcGxkbWZ3IGNvbnRleHQ7CiYjNDM7CXN0cnVjdCBkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9wYXJhbXMgKnBhcmFtczsKJiM0MzsJc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrOwomIzQzOwlzdHJ1Y3QgcGRzYyAqcGRzYzsKJiM0MzsJc3RydWN0IGxpc3RfaGVhZCBjb21wb25lbnRzOwomIzQzOwlib29sIGNvbXBvbmVudF9mb3VuZDsKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHBkc2NfZnJlZV9md3VfcHJpdihzdHJ1Y3QgcGRzX2NvcmVfZnd1X3ByaXYgKnByaXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcGRzY19jb21wb25lbnRfcHJpdiAqY29tcG9uZW50X3ByaXYsICp0bXA7CiYjNDM7CiYjNDM7CWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjb21wb25lbnRfcHJpdiwgdG1wLCAmYW1wO3ByaXYtJmd0O2NvbXBvbmVudHMsCiYjNDM7CQkJCSBsaXN0X2VudHJ5KSB7CiYjNDM7CQlsaXN0X2RlbCgmYW1wO2NvbXBvbmVudF9wcml2LSZndDtsaXN0X2VudHJ5KTsKJiM0MzsJCWtmcmVlKGNvbXBvbmVudF9wcml2KTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHBkc2NfZGV2Y21kX21hdGNoX3JlY29yZF9kZXNjKHN0cnVjdCBwZHNjICpwZHNjLCB1MTYgZGVzY190eXBlLAomIzQzOwkJCQkJIHUxNiBkZXNjX3NpemUsIGNvbnN0IHU4ICpkZXNjX2RhdGEsCiYjNDM7CQkJCQkgdTggKm1hdGNoKQomIzQzO3sKJiM0MzsJdW5pb24gcGRzX2NvcmVfZGV2X2NtZCBjbWQgPSB7CiYjNDM7CQkubWF0Y2hfcmVjb3JkX2Rlc2Mub3Bjb2RlID0gUERTX0NPUkVfQ01EX01BVENIX1JFQ09SRF9ERVNDLAomIzQzOwkJLm1hdGNoX3JlY29yZF9kZXNjLnZlciA9IDEsCiYjNDM7CQkubWF0Y2hfcmVjb3JkX2Rlc2MudHlwZSA9IGNwdV90b19sZTE2KGRlc2NfdHlwZSksCiYjNDM7CQkubWF0Y2hfcmVjb3JkX2Rlc2Muc2l6ZSA9IGNwdV90b19sZTE2KGRlc2Nfc2l6ZSksCiYjNDM7CX07CiYjNDM7CXVuaW9uIHBkc19jb3JlX2Rldl9jb21wIGNvbXAgPSB7fTsKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJZXJyID0gcGRzY19kZXZjbWRfd2l0aF9kYXRhKHBkc2MsICZhbXA7Y21kLCBkZXNjX2RhdGEsIGRlc2Nfc2l6ZSwKJiM0MzsJCQkJICAgICZhbXA7Y29tcCwgcGRzYy0mZ3Q7ZGV2Y21kX3RpbWVvdXQpOwomIzQzOwkqbWF0Y2ggPSBjb21wLm1hdGNoX3JlY29yZF9kZXNjLm1hdGNoOwomIzQzOwomIzQzOwlyZXR1cm4gZXJyOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBwZHNjX21hdGNoX3JlY29yZF9kZXNjcyhzdHJ1Y3QgcGxkbWZ3ICpjb250ZXh0LAomIzQzOwkJCQkgICAgc3RydWN0IHBsZG1md19yZWNvcmQgKnJlY29yZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwZHNfY29yZV9md3VfcHJpdiAqcHJpdiA9CiYjNDM7CQljb250YWluZXJfb2YoY29udGV4dCwgc3RydWN0IHBkc19jb3JlX2Z3dV9wcml2LCBjb250ZXh0KTsKJiM0MzsJc3RydWN0IHBkc2MgKnBkc2MgPSBwcml2LSZndDtwZHNjOwomIzQzOwlzdHJ1Y3QgcGxkbWZ3X2Rlc2NfdGx2ICpkZXNjOwomIzQzOwomIzQzOwlpZiAoIXBsZG1md19vcF9wY2lfbWF0Y2hfcmVjb3JkKGNvbnRleHQsIHJlY29yZCkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CWxpc3RfZm9yX2VhY2hfZW50cnkoZGVzYywgJmFtcDtyZWNvcmQtJmd0O2Rlc2NzLCBlbnRyeSkgewomIzQzOwkJdTggbWF0Y2g7CiYjNDM7CQlpbnQgZXJyOwomIzQzOwomIzQzOwkJc3dpdGNoIChkZXNjLSZndDt0eXBlKSB7CiYjNDM7CQkvKiBza2lwIHR5cGVzIGNoZWNrZWQgaW4gcGxkbWZ3X29wX3BjaV9tYXRjaF9yZWNvcmQgKi8KJiM0MzsJCWNhc2UgUExETV9ERVNDX0lEX1BDSV9WRU5ET1JfSUQ6CiYjNDM7CQljYXNlIFBMRE1fREVTQ19JRF9QQ0lfREVWSUNFX0lEOgomIzQzOwkJY2FzZSBQTERNX0RFU0NfSURfUENJX1NVQlZFTkRPUl9JRDoKJiM0MzsJCWNhc2UgUExETV9ERVNDX0lEX1BDSV9TVUJERVZfSUQ6CiYjNDM7CQkJY29udGludWU7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlpZiAoIWRlc2MtJmd0O3NpemUpCiYjNDM7CQkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwkJZXJyID0gcGRzY19kZXZjbWRfbWF0Y2hfcmVjb3JkX2Rlc2MocGRzYywgZGVzYy0mZ3Q7dHlwZSwKJiM0MzsJCQkJCQkgICAgZGVzYy0mZ3Q7c2l6ZSwgZGVzYy0mZ3Q7ZGF0YSwKJiM0MzsJCQkJCQkgICAgJmFtcDttYXRjaCk7CiYjNDM7CQlpZiAoZXJyKSB7CiYjNDM7CQkJZGV2X2VycihwZHNjLSZndDtkZXYsCiYjNDM7CQkJCSYjMzQ7bWF0Y2hfcmVjb3JkX2Rlc2MgZmFpbGVkIHR5cGU6IDB4JTA0eCBzaXplOiAldSwgZXJyICVkXG4mIzM0OywKJiM0MzsJCQkJZGVzYy0mZ3Q7dHlwZSwgZGVzYy0mZ3Q7c2l6ZSwgZXJyKTsKJiM0MzsJCQlyZXR1cm4gZmFsc2U7CiYjNDM7CQl9CiYjNDM7CQkvKiBhbGwgcmVjb3JkIGRlc2NyaXB0b3JzIG11c3QgbWF0Y2ggKi8KJiM0MzsJCWlmICghbWF0Y2gpCiYjNDM7CQkJcmV0dXJuIGZhbHNlOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiB0cnVlOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHBkc2NfZGV2Y21kX3NlbmRfcGFja2FnZV9kYXRhKHN0cnVjdCBwZHNjICpwZHNjLCB1NjQgYWRkciwKJiM0MzsJCQkJCSB1MTYgbGVuZ3RoLCB1MTYgb2Zmc2V0LCB1MTYgdG90YWxfbGVuKQomIzQzO3sKJiM0MzsJdW5pb24gcGRzX2NvcmVfZGV2X2NtZCBjbWQgPSB7CiYjNDM7CQkuc2VuZF9wa2dfZGF0YS5vcGNvZGUgPSBQRFNfQ09SRV9DTURfU0VORF9QS0dfREFUQSwKJiM0MzsJCS5zZW5kX3BrZ19kYXRhLnZlciA9IDEsCiYjNDM7CQkuc2VuZF9wa2dfZGF0YS5kYXRhX3BhID0gY3B1X3RvX2xlNjQoYWRkciksCiYjNDM7CQkuc2VuZF9wa2dfZGF0YS5kYXRhX2xlbiA9IGNwdV90b19sZTE2KGxlbmd0aCksCiYjNDM7CQkuc2VuZF9wa2dfZGF0YS5vZmZzZXQgPSBjcHVfdG9fbGUxNihvZmZzZXQpLAomIzQzOwkJLnNlbmRfcGtnX2RhdGEudG90YWxfbGVuID0gY3B1X3RvX2xlMTYodG90YWxfbGVuKSwKJiM0MzsJfTsKJiM0MzsJdW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgY29tcCA9IHt9OwomIzQzOwomIzQzOwlyZXR1cm4gcGRzY19kZXZjbWQocGRzYywgJmFtcDtjbWQsICZhbXA7Y29tcCwgcGRzYy0mZ3Q7ZGV2Y21kX3RpbWVvdXQpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHBkc2Nfc2VuZF9wYWNrYWdlX2RhdGEoc3RydWN0IHBsZG1mdyAqY29udGV4dCwgY29uc3QgdTggKmRhdGEsCiYjNDM7CQkJCSAgdTE2IGxlbmd0aCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwZHNfY29yZV9md3VfcHJpdiAqcHJpdiA9CiYjNDM7CQljb250YWluZXJfb2YoY29udGV4dCwgc3RydWN0IHBkc19jb3JlX2Z3dV9wcml2LCBjb250ZXh0KTsKJiM0MzsJc3RydWN0IHBkc2NfZGVmZXJyZWRfZG1hICpkZWZlcnJlZDsKJiM0MzsJc3RydWN0IGRldmljZSAqZGV2ID0gY29udGV4dC0mZ3Q7ZGV2OwomIzQzOwlzdHJ1Y3QgcGRzYyAqcGRzYyA9IHByaXYtJmd0O3Bkc2M7CiYjNDM7CWRtYV9hZGRyX3QgZG1hX2FkZHI7CiYjNDM7CXU4ICpwYWNrYWdlX2RhdGE7CiYjNDM7CXUzMiBvZmZzZXQ7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CWlmICghbGVuZ3RoKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWRlZmVycmVkID0ga21hbGxvY19vYmooKmRlZmVycmVkLCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCFkZWZlcnJlZCkKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwlwYWNrYWdlX2RhdGEgPSBrbWVtZHVwKGRhdGEsIGxlbmd0aCwgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmICghcGFja2FnZV9kYXRhKSB7CiYjNDM7CQlrZnJlZShkZWZlcnJlZCk7CiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJfQomIzQzOwomIzQzOwlkbWFfYWRkciA9IGRtYV9tYXBfc2luZ2xlKGRldiwgcGFja2FnZV9kYXRhLCBsZW5ndGgsIERNQV9UT19ERVZJQ0UpOwomIzQzOwlpZiAoZG1hX21hcHBpbmdfZXJyb3IoZGV2LCBkbWFfYWRkcikpIHsKJiM0MzsJCWRldl9lcnIoZGV2LCAmIzM0O0ZhaWxlZCB0byBkbWFfbWFwIHBhY2thZ2VfZGF0YSBsZW5ndGggMHgleFxuJiMzNDssCiYjNDM7CQkJbGVuZ3RoKTsKJiM0MzsJCWtmcmVlKHBhY2thZ2VfZGF0YSk7CiYjNDM7CQlrZnJlZShkZWZlcnJlZCk7CiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJfQomIzQzOwomIzQzOwlmb3IgKG9mZnNldCA9IDA7IG9mZnNldCAmbHQ7IGxlbmd0aDsgb2Zmc2V0ICYjNDM7PSBQRFNfUEFHRV9TSVpFKSB7CiYjNDM7CQl1MzIgY29weV9zejsKJiM0MzsKJiM0MzsJCWNvcHlfc3ogPSBtaW5fdCh1bnNpZ25lZCBpbnQsIFBEU19QQUdFX1NJWkUsIGxlbmd0aCAtIG9mZnNldCk7CiYjNDM7CQllcnIgPSBwZHNjX2RldmNtZF9zZW5kX3BhY2thZ2VfZGF0YShwZHNjLCBkbWFfYWRkciAmIzQzOyBvZmZzZXQsCiYjNDM7CQkJCQkJICAgIGNvcHlfc3osIG9mZnNldCwgbGVuZ3RoKTsKJiM0MzsJCWlmIChlcnIpIHsKJiM0MzsJCQlOTF9TRVRfRVJSX01TR19NT0QocHJpdi0mZ3Q7ZXh0YWNrLAomIzQzOwkJCQkJICAgJiMzNDtGYWlsZWQgdG8gc2VuZCBwYWNrYWdlIGRhdGEmIzM0Oyk7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKGVyciA9PSAtRVRJTUVET1VUIHx8IGVyciA9PSAtRUFHQUlOKSB7CiYjNDM7CQlwZHNjX2RlZmVycmVkX2RtYV9hZGQocGRzYywgZGVmZXJyZWQsIGRtYV9hZGRyLAomIzQzOwkJCQkgICAgICBwYWNrYWdlX2RhdGEsIGxlbmd0aCwgRE1BX1RPX0RFVklDRSk7CiYjNDM7CQlyZXR1cm4gZXJyOwomIzQzOwl9CiYjNDM7CiYjNDM7CWtmcmVlKGRlZmVycmVkKTsKJiM0MzsJZG1hX3VubWFwX3NpbmdsZShkZXYsIGRtYV9hZGRyLCBsZW5ndGgsIERNQV9UT19ERVZJQ0UpOwomIzQzOwlrZnJlZShwYWNrYWdlX2RhdGEpOwomIzQzOwlyZXR1cm4gZXJyOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBwZHNjX2NvbXBvbmVudF90eXBlX2V4aXN0cyhzdHJ1Y3QgcGRzYyAqcGRzYywgdTggdHlwZSkKJiM0Mzt7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgcGRzYy0mZ3Q7ZndfY29tcG9uZW50cy5udW1fY29tcG9uZW50czsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWlmIChwZHNjLSZndDtmd19jb21wb25lbnRzLmluZm9baV0uY29tcG9uZW50X3R5cGUgPT0gdHlwZSkKJiM0MzsJCQlyZXR1cm4gdHJ1ZTsKJiM0MzsJfQomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIHBkc2NfY29tcG9uZW50X2lkX21hdGNoZXNfdHlwZShzdHJ1Y3QgcGRzYyAqcGRzYywKJiM0MzsJCQkJCSAgIHU4IGNvbXBvbmVudF9pZCwgdTggdHlwZSkKJiM0Mzt7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgcGRzYy0mZ3Q7ZndfY29tcG9uZW50cy5udW1fY29tcG9uZW50czsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXN0cnVjdCBwZHNfY29yZV9md19jb21wb25lbnRfaW5mbyAqaW5mbyA9CiYjNDM7CQkJJmFtcDtwZHNjLSZndDtmd19jb21wb25lbnRzLmluZm9baV07CiYjNDM7CiYjNDM7CQlpZiAoaW5mby0mZ3Q7aWRlbnRpZmllciA9PSBjb21wb25lbnRfaWQgJmFtcDsmYW1wOwomIzQzOwkJICAgIGluZm8tJmd0O2NvbXBvbmVudF90eXBlID09IHR5cGUpCiYjNDM7CQkJcmV0dXJuIHRydWU7CiYjNDM7CX0KJiM0MzsJcmV0dXJuIGZhbHNlOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdTggcGRzY19nZXRfY29tcG9uZW50X3R5cGVfYnlfaWQoc3RydWN0IHBkc2MgKnBkc2MsIHUxNiBjb21wb25lbnRfaWQpCiYjNDM7ewomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IHBkc2MtJmd0O2Z3X2NvbXBvbmVudHMubnVtX2NvbXBvbmVudHM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlzdHJ1Y3QgcGRzX2NvcmVfZndfY29tcG9uZW50X2luZm8gKmluZm8gPQomIzQzOwkJCSZhbXA7cGRzYy0mZ3Q7ZndfY29tcG9uZW50cy5pbmZvW2ldOwomIzQzOwomIzQzOwkJaWYgKGluZm8tJmd0O2lkZW50aWZpZXIgPT0gY29tcG9uZW50X2lkKQomIzQzOwkJCXJldHVybiBpbmZvLSZndDtjb21wb25lbnRfdHlwZTsKJiM0MzsJfQomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgcGRzY19za2lwX2NvbXBvbmVudChzdHJ1Y3QgcGRzX2NvcmVfZnd1X3ByaXYgKnByaXYsCiYjNDM7CQkJCXUxNiBjb21wb25lbnRfaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcGRzY19jb21wb25lbnRfcHJpdiAqY29tcG9uZW50X3ByaXY7CiYjNDM7CiYjNDM7CWxpc3RfZm9yX2VhY2hfZW50cnkoY29tcG9uZW50X3ByaXYsICZhbXA7cHJpdi0mZ3Q7Y29tcG9uZW50cywgbGlzdF9lbnRyeSkgewomIzQzOwkJaWYgKGNvbXBvbmVudF9wcml2LSZndDtjb21wb25lbnRfaWQgPT0gY29tcG9uZW50X2lkKQomIzQzOwkJCXJldHVybiBjb21wb25lbnRfcHJpdi0mZ3Q7c2tpcDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcGRzY19zZW5kX2NvbXBvbmVudF90YWJsZShzdHJ1Y3QgcGxkbWZ3ICpjb250ZXh0LAomIzQzOwkJCQkgICAgIHN0cnVjdCBwbGRtZndfY29tcG9uZW50ICpjb21wb25lbnQsCiYjNDM7CQkJCSAgICAgdTggdHJhbnNmZXJfZmxhZykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwZHNfY29yZV9md3VfcHJpdiAqcHJpdiA9CiYjNDM7CQljb250YWluZXJfb2YoY29udGV4dCwgc3RydWN0IHBkc19jb3JlX2Z3dV9wcml2LCBjb250ZXh0KTsKJiM0MzsJc3RydWN0IHBkc19jb3JlX2NvbXBvbmVudF90YmwgKmNvbXBvbmVudF90Ymw7CiYjNDM7CXN0cnVjdCBwZHNjX2NvbXBvbmVudF9wcml2ICpjb21wb25lbnRfcHJpdjsKJiM0MzsJc3RydWN0IGRldmljZSAqZGV2ID0gY29udGV4dC0mZ3Q7ZGV2OwomIzQzOwl1bmlvbiBwZHNfY29yZV9kZXZfY29tcCBjb21wID0ge307CiYjNDM7CXVuaW9uIHBkc19jb3JlX2Rldl9jbWQgY21kID0ge307CiYjNDM7CXN0cnVjdCBwZHNjICpwZHNjID0gcHJpdi0mZ3Q7cGRzYzsKJiM0MzsJYm9vbCBza2lwX2NvbXBvbmVudCA9IGZhbHNlOwomIzQzOwl1OCByZXF1ZXN0ZWRfdHlwZSA9IDA7CiYjNDM7CXUxNiBidWZfc3osIHRibF9zejsKJiM0MzsJaW50IGVyciA9IDA7CiYjNDM7CiYjNDM7CWRldl9kYmcoZGV2LAomIzQzOwkJJiMzNDtjb21wb25lbnQgbmFtZSAlcyBjbGFzc2lmaWNhdGlvbiAldSBpZCAldSBhY3RpdmF0aW9uX21ldGhvZCAldSB2ZXJfbGVuICVkIHZlcl9zdHIgJS4qcyBpbmRleCAldSBzaXplICV1IHRyYW5zZmVyX2ZsYWcgMHglMDJ4XG4mIzM0OywKJiM0MzsJCXByaXYtJmd0O3BhcmFtcy0mZ3Q7Y29tcG9uZW50LCBjb21wb25lbnQtJmd0O2NsYXNzaWZpY2F0aW9uLAomIzQzOwkJY29tcG9uZW50LSZndDtpZGVudGlmaWVyLCBjb21wb25lbnQtJmd0O2FjdGl2YXRpb25fbWV0aG9kLAomIzQzOwkJY29tcG9uZW50LSZndDt2ZXJzaW9uX2xlbiwgY29tcG9uZW50LSZndDt2ZXJzaW9uX2xlbiwKJiM0MzsJCWNvbXBvbmVudC0mZ3Q7dmVyc2lvbl9zdHJpbmcsIGNvbXBvbmVudC0mZ3Q7aW5kZXgsCiYjNDM7CQljb21wb25lbnQtJmd0O2NvbXBvbmVudF9zaXplLCB0cmFuc2Zlcl9mbGFnKTsKJiM0MzsKJiM0MzsJY29tcG9uZW50X3ByaXYgPSBremFsbG9jX29iaigqY29tcG9uZW50X3ByaXYsIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoIWNvbXBvbmVudF9wcml2KQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CWlmIChwcml2LSZndDtwYXJhbXMtJmd0O2NvbXBvbmVudCkgewomIzQzOwkJcmVxdWVzdGVkX3R5cGUgPSBwZHNjX25hbWVfdG9fZndfdHlwZShwcml2LSZndDtwYXJhbXMtJmd0O2NvbXBvbmVudCk7CiYjNDM7CQlpZiAoY29tcG9uZW50LSZndDtpZGVudGlmaWVyICZndDsgVThfTUFYIHx8CiYjNDM7CQkgICAgIXBkc2NfY29tcG9uZW50X2lkX21hdGNoZXNfdHlwZShwZHNjLAomIzQzOwkJCQkJCSAgICBjb21wb25lbnQtJmd0O2lkZW50aWZpZXIsCiYjNDM7CQkJCQkJICAgIHJlcXVlc3RlZF90eXBlKSkgewomIzQzOwkJCXNraXBfY29tcG9uZW50ID0gdHJ1ZTsKJiM0MzsJCQlnb3RvIGFkZF9jb21wb25lbnRfcHJpdjsKJiM0MzsJCX0KJiM0MzsJCXByaXYtJmd0O2NvbXBvbmVudF9mb3VuZCA9IHRydWU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJYnVmX3N6ID0gc2l6ZW9mKHBkc2MtJmd0O2NtZF9yZWdzLSZndDtkYXRhKTsKJiM0MzsJdGJsX3N6ID0gc3RydWN0X3NpemUoY29tcG9uZW50X3RibCwgdmVyc2lvbl9zdHIsCiYjNDM7CQkJICAgICBjb21wb25lbnQtJmd0O3ZlcnNpb25fbGVuKTsKJiM0MzsJaWYgKHRibF9zeiAmZ3Q7IGJ1Zl9zeikgewomIzQzOwkJZGV2X2VycihkZXYsICYjMzQ7Y29tcG9uZW50X3RibCBzaXplICVkIHRvbyBiaWcsIG1heCBzaXplOiAlZFxuJiMzNDssCiYjNDM7CQkJdGJsX3N6LCBidWZfc3opOwomIzQzOwkJZXJyID0gLUVOT1NQQzsKJiM0MzsJCWdvdG8gZnJlZV9jb21wb25lbnRfcHJpdjsKJiM0MzsJfQomIzQzOwljb21wb25lbnRfdGJsID0ga3phbGxvYyh0Ymxfc3osIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoIWNvbXBvbmVudF90YmwpIHsKJiM0MzsJCWVyciA9IC1FTk9NRU07CiYjNDM7CQlnb3RvIGZyZWVfY29tcG9uZW50X3ByaXY7CiYjNDM7CX0KJiM0MzsKJiM0MzsJY29tcG9uZW50X3RibC0mZ3Q7Y29tcGFyaXNvbl9zdGFtcCA9CiYjNDM7CQljcHVfdG9fbGUzMihjb21wb25lbnQtJmd0O2NvbXBhcmlzb25fc3RhbXApOwomIzQzOwljb21wb25lbnRfdGJsLSZndDtjbGFzc2lmaWNhdGlvbiA9IGNwdV90b19sZTE2KGNvbXBvbmVudC0mZ3Q7Y2xhc3NpZmljYXRpb24pOwomIzQzOwljb21wb25lbnRfdGJsLSZndDtpZGVudGlmaWVyID0gY3B1X3RvX2xlMTYoY29tcG9uZW50LSZndDtpZGVudGlmaWVyKTsKJiM0MzsJY29tcG9uZW50X3RibC0mZ3Q7dHJhbnNmZXJfZmxhZyA9IHRyYW5zZmVyX2ZsYWc7CiYjNDM7CWNvbXBvbmVudF90YmwtJmd0O3ZlcnNpb25fc3RyX3R5cGUgPSBjb21wb25lbnQtJmd0O3ZlcnNpb25fdHlwZTsKJiM0MzsJY29tcG9uZW50X3RibC0mZ3Q7dmVyc2lvbl9zdHJfbGVuID0gY29tcG9uZW50LSZndDt2ZXJzaW9uX2xlbjsKJiM0MzsJbWVtY3B5KGNvbXBvbmVudF90YmwtJmd0O3ZlcnNpb25fc3RyLCBjb21wb25lbnQtJmd0O3ZlcnNpb25fc3RyaW5nLAomIzQzOwkgICAgICAgY29tcG9uZW50LSZndDt2ZXJzaW9uX2xlbik7CiYjNDM7CiYjNDM7CWNtZC5zZW5kX2NvbXBvbmVudF90Ymwub3Bjb2RlID0gUERTX0NPUkVfQ01EX1NFTkRfQ09NUE9ORU5UX1RCTDsKJiM0MzsJY21kLnNlbmRfY29tcG9uZW50X3RibC52ZXIgPSAxOwomIzQzOwljbWQuc2VuZF9jb21wb25lbnRfdGJsLnNsb3RfaWQgPSBQRFNfQ09SRV9GV19TTE9UX0lOVkFMSUQ7CiYjNDM7CiYjNDM7CWVyciA9IHBkc2NfZGV2Y21kX3dpdGhfZGF0YShwZHNjLCAmYW1wO2NtZCwgY29tcG9uZW50X3RibCwgdGJsX3N6LAomIzQzOwkJCQkgICAgJmFtcDtjb21wLCBwZHNjLSZndDtkZXZjbWRfdGltZW91dCk7CiYjNDM7CWtmcmVlKGNvbXBvbmVudF90YmwpOwomIzQzOwlpZiAoZXJyKSB7CiYjNDM7CQlkZXZfZXJyKGRldiwgJiMzNDtGYWlsZWQgc2VuZGluZyBjb21wb25lbnQgdGFibGU6ICVwZVxuJiMzNDssCiYjNDM7CQkJRVJSX1BUUihlcnIpKTsKJiM0MzsJCWdvdG8gZnJlZV9jb21wb25lbnRfcHJpdjsKJiM0MzsJfQomIzQzOwomIzQzOwlza2lwX2NvbXBvbmVudCA9IGNvbXAuc2VuZF9jb21wb25lbnRfdGJsLnJlc3BvbnNlID09IDE7CiYjNDM7CiYjNDM7YWRkX2NvbXBvbmVudF9wcml2OgomIzQzOwljb21wb25lbnRfcHJpdi0mZ3Q7c2tpcCA9IHNraXBfY29tcG9uZW50OwomIzQzOwljb21wb25lbnRfcHJpdi0mZ3Q7Y29tcG9uZW50X2lkID0gY29tcG9uZW50LSZndDtpZGVudGlmaWVyOwomIzQzOwlsaXN0X2FkZCgmYW1wO2NvbXBvbmVudF9wcml2LSZndDtsaXN0X2VudHJ5LCAmYW1wO3ByaXYtJmd0O2NvbXBvbmVudHMpOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0MzsKJiM0MztmcmVlX2NvbXBvbmVudF9wcml2OgomIzQzOwlrZnJlZShjb21wb25lbnRfcHJpdik7CiYjNDM7CXJldHVybiBlcnI7CiYjNDM7fQomIzQzOwomIzQzO2ludCBwZHNjX2dldF9jb21wb25lbnRfaW5mbyhzdHJ1Y3QgcGRzYyAqcGRzYykKJiM0Mzt7CiYjNDM7CXVuaW9uIHBkc19jb3JlX2Rldl9jbWQgY21kID0gewomIzQzOwkJLmdldF9jb21wb25lbnRfaW5mby5vcGNvZGUgPSBQRFNfQ09SRV9DTURfR0VUX0NPTVBPTkVOVF9JTkZPLAomIzQzOwkJLmdldF9jb21wb25lbnRfaW5mby52ZXIgPSAxLAomIzQzOwl9OwomIzQzOwlzdHJ1Y3QgcGRzX2NvcmVfY29tcG9uZW50X2xpc3RfaW5mbyAqbGlzdF9pbmZvOwomIzQzOwlzdHJ1Y3QgcGRzY19kZWZlcnJlZF9kbWEgKmRlZmVycmVkOwomIzQzOwl1bmlvbiBwZHNfY29yZV9kZXZfY29tcCBjb21wID0ge307CiYjNDM7CWRtYV9hZGRyX3QgZG1hX2FkZHI7CiYjNDM7CXU4IG51bV9jb21wb25lbnRzOwomIzQzOwlpbnQgZXJyLCBpOwomIzQzOwomIzQzOwlkZWZlcnJlZCA9IGttYWxsb2Nfb2JqKCpkZWZlcnJlZCk7CiYjNDM7CWlmICghZGVmZXJyZWQpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJbGlzdF9pbmZvID0ga3phbGxvYyhQRFNfUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCFsaXN0X2luZm8pIHsKJiM0MzsJCWtmcmVlKGRlZmVycmVkKTsKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwl9CiYjNDM7CiYjNDM7CWRtYV9hZGRyID0gZG1hX21hcF9zaW5nbGUocGRzYy0mZ3Q7ZGV2LCBsaXN0X2luZm8sIFBEU19QQUdFX1NJWkUsCiYjNDM7CQkJCSAgRE1BX0ZST01fREVWSUNFKTsKJiM0MzsJaWYgKGRtYV9tYXBwaW5nX2Vycm9yKHBkc2MtJmd0O2RldiwgZG1hX2FkZHIpKSB7CiYjNDM7CQlkZXZfZXJyKHBkc2MtJmd0O2RldiwKJiM0MzsJCQkmIzM0O0ZhaWxlZCB0byBkbWFfbWFwIGNvbXBvbmVudF9saXN0X2luZm8gbGVuZ3RoICVkXG4mIzM0OywKJiM0MzsJCQlQRFNfUEFHRV9TSVpFKTsKJiM0MzsJCWtmcmVlKGxpc3RfaW5mbyk7CiYjNDM7CQlrZnJlZShkZWZlcnJlZCk7CiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJfQomIzQzOwomIzQzOwljbWQuZ2V0X2NvbXBvbmVudF9pbmZvLmRhdGFfbGVuID0gY3B1X3RvX2xlMTYoUERTX1BBR0VfU0laRSk7CiYjNDM7CWNtZC5nZXRfY29tcG9uZW50X2luZm8uZGF0YV9wYSA9IGNwdV90b19sZTY0KGRtYV9hZGRyKTsKJiM0MzsKJiM0MzsJZXJyID0gcGRzY19kZXZjbWQocGRzYywgJmFtcDtjbWQsICZhbXA7Y29tcCwgcGRzYy0mZ3Q7ZGV2Y21kX3RpbWVvdXQgKiAyKTsKJiM0MzsJaWYgKGVyciA9PSAtRVRJTUVET1VUIHx8IGVyciA9PSAtRUFHQUlOKSB7CiYjNDM7CQlwZHNjX2RlZmVycmVkX2RtYV9hZGQocGRzYywgZGVmZXJyZWQsIGRtYV9hZGRyLCBsaXN0X2luZm8sCiYjNDM7CQkJCSAgICAgIFBEU19QQUdFX1NJWkUsIERNQV9GUk9NX0RFVklDRSk7CiYjNDM7CQlyZXR1cm4gZXJyOwomIzQzOwl9CiYjNDM7CiYjNDM7CWtmcmVlKGRlZmVycmVkKTsKJiM0MzsJZG1hX3VubWFwX3NpbmdsZShwZHNjLSZndDtkZXYsIGRtYV9hZGRyLCBQRFNfUEFHRV9TSVpFLCBETUFfRlJPTV9ERVZJQ0UpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CWlmIChjb21wLmdldF9jb21wb25lbnRfaW5mby52ZXIgPT0gMCkgewomIzQzOwkJLyogRG9uJiMzOTt0IHN1cHBvcnQgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBhcyB2ZXJzaW9uIDAgaGFzCiYjNDM7CQkgKiBhbGlnbm1lbnQgaXNzdWVzLCBzbyBnaXZlIGEgaGludCB0byB1c2VycyB0byB1cGRhdGUKJiM0MzsJCSAqIHRoZWlyIGZpcm13YXJlCiYjNDM7CQkgKi8KJiM0MzsJCWRldl93YXJuX29uY2UocGRzYy0mZ3Q7ZGV2LAomIzQzOwkJCSAgICAgICYjMzQ7SW5jb21wYXRpYmxlIGdldF9jb21wb25lbnRfaW5mbyB2ZXJzaW9uICV1IHJlcG9ydGVkIGJ5IGZpcm13YXJlXG4mIzM0OywKJiM0MzsJCQkgICAgICBjb21wLmdldF9jb21wb25lbnRfaW5mby52ZXIpOwomIzQzOwkJZXJyID0gMDsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CW51bV9jb21wb25lbnRzID0gbGlzdF9pbmZvLSZndDtudW1fY29tcG9uZW50czsKJiM0MzsJaWYgKG51bV9jb21wb25lbnRzICZndDsgUERTX0NPUkVfRldfQ09NUE9ORU5UX0xJU1RfTEVOKSB7CiYjNDM7CQllcnIgPSAtRU5PTUVNOwomIzQzOwkJZ290byBvdXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcGRzYy0mZ3Q7ZndfY29tcG9uZW50cy5udW1fY29tcG9uZW50cyA9IG51bV9jb21wb25lbnRzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgbnVtX2NvbXBvbmVudHM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlzdHJ1Y3QgcGRzX2NvcmVfZndfY29tcG9uZW50X2luZm8gKmluZm8gPQomIzQzOwkJCSZhbXA7cGRzYy0mZ3Q7ZndfY29tcG9uZW50cy5pbmZvW2ldOwomIzQzOwomIzQzOwkJbWVtY3B5KGluZm8sICZhbXA7bGlzdF9pbmZvLSZndDtpbmZvW2ldLCBzaXplb2YoKmluZm8pKTsKJiM0MzsJCWluZm8tJmd0O3ZlcnNpb25bUERTX0NPUkVfRldfQ09NUE9ORU5UX1ZFUl9CVUZMRU4gLSAxXSA9IDA7CiYjNDM7CQlpbmZvLSZndDtuYW1lW1BEU19DT1JFX0ZXX0NPTVBPTkVOVF9OQU1FX0JVRkxFTiAtIDFdID0gMDsKJiM0MzsJfQomIzQzOwomIzQzO291dDoKJiM0MzsJa2ZyZWUobGlzdF9pbmZvKTsKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBwZHNjX2RldmNtZF9zZW5kX2NvbXBvbmVudChzdHJ1Y3QgcGRzYyAqcGRzYywKJiM0MzsJCQkJICAgICAgc3RydWN0IHBkc19jb3JlX2ZsYXNoX2NvbXBvbmVudCAqaW5mbywKJiM0MzsJCQkJICAgICAgdTE2IGluZm9fc3osIGRtYV9hZGRyX3QgYWRkciwgdTMyIGxlbmd0aCwKJiM0MzsJCQkJICAgICAgdTMyIG9mZnNldCwgdTE2IHNsb3RfaWQsCiYjNDM7CQkJCSAgICAgIHVuaW9uIHBkc19jb3JlX2Rldl9jb21wICpjb21wKQomIzQzO3sKJiM0MzsJdW5pb24gcGRzX2NvcmVfZGV2X2NtZCBjbWQgPSB7CiYjNDM7CQkuc2VuZF9jb21wb25lbnQub3Bjb2RlID0gUERTX0NPUkVfQ01EX1NFTkRfQ09NUE9ORU5ULAomIzQzOwkJLnNlbmRfY29tcG9uZW50LnZlciA9IDEsCiYjNDM7CQkuc2VuZF9jb21wb25lbnQub3BlcmF0aW9uID0gUERTX0NPUkVfU0VORF9DT01QT05FTlRfU1RBUlQsCiYjNDM7CQkuc2VuZF9jb21wb25lbnQuZGF0YV9wYSA9IGNwdV90b19sZTY0KGFkZHIpLAomIzQzOwkJLnNlbmRfY29tcG9uZW50LmRhdGFfbGVuID0gY3B1X3RvX2xlMzIobGVuZ3RoKSwKJiM0MzsJCS5zZW5kX2NvbXBvbmVudC5vZmZzZXQgPSBjcHVfdG9fbGUzMihvZmZzZXQpLAomIzQzOwkJLnNlbmRfY29tcG9uZW50LnNsb3RfaWQgPSBzbG90X2lkLAomIzQzOwl9OwomIzQzOwl1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSAzMDAgKiBIWjsKJiM0MzsJdW5zaWduZWQgbG9uZyBzdGFydF90aW1lOwomIzQzOwl1bnNpZ25lZCBsb25nIGVuZF90aW1lOwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwlzdGFydF90aW1lID0gamlmZmllczsKJiM0MzsJZW5kX3RpbWUgPSBzdGFydF90aW1lICYjNDM7IHRpbWVvdXQ7CiYjNDM7CWRvIHsKJiM0MzsJCS8qIHByZXZlbnQgbm9pc3kvYmVuaWduIGRldmNtZCBmYWlsdXJlcyAqLwomIzQzOwkJZXJyID0gcGRzY19kZXZjbWRfd2l0aF9kYXRhX25vbXNnKHBkc2MsICZhbXA7Y21kLCBpbmZvLCBpbmZvX3N6LAomIzQzOwkJCQkJCSAgY29tcCwgNjApOwomIzQzOwkJaWYgKGVyciAhPSAtRUFHQUlOKQomIzQzOwkJCWJyZWFrOwomIzQzOwomIzQzOwkJLyogaWYgcmVxdWlyZWQsIHN1YnNlcXVlbnQgY29tbWFuZHMgY2hlY2sgc3RhdHVzIG9mCiYjNDM7CQkgKiBQRFNfQ09SRV9DTURfU0VORF9DT01QT05FTlQgY29tbWFuZCwgd2hpY2ggcmV0dXJucwomIzQzOwkJICogRUFHQUlOIHdoaWxlIHRoZSBjb21tYW5kIGlzIHN0aWxsIHJ1bm5pbmcsCiYjNDM7CQkgKiBlbHNlIHdlIGdldCB0aGUgZmluYWwgY29tbWFuZCBzdGF0dXMuCiYjNDM7CQkgKi8KJiM0MzsJCWNtZC5zZW5kX2NvbXBvbmVudC5vcGVyYXRpb24gPSBQRFNfQ09SRV9TRU5EX0NPTVBPTkVOVF9TVEFUVVM7CiYjNDM7CQltc2xlZXAoMjApOwomIzQzOwl9IHdoaWxlICh0aW1lX2JlZm9yZShqaWZmaWVzLCBlbmRfdGltZSkpOwomIzQzOwomIzQzOwlpZiAoZXJyID09IC1FQUdBSU4gfHwgZXJyID09IC1FVElNRURPVVQpCiYjNDM7CQlkZXZfZXJyKHBkc2MtJmd0O2RldiwgJiMzNDtQRFNfQ09SRV9DTURfU0VORF9DT01QT05FTlQgdGltZWQgb3V0XG4mIzM0Oyk7CiYjNDM7CiYjNDM7CXJldHVybiBlcnI7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcGRzY19mbGFzaF9jb21wb25lbnRfY2h1bmsoc3RydWN0IHBkc2MgKnBkc2MsIHN0cnVjdCBkZXZpY2UgKmRldiwKJiM0MzsJCQkJICAgICAgc3RydWN0IHBkc19jb3JlX2ZsYXNoX2NvbXBvbmVudCAqaW5mbywKJiM0MzsJCQkJICAgICAgdTE2IGluZm9fc3osIGNvbnN0IHU4ICpkYXRhLCB1MTYgY29weV9zeiwKJiM0MzsJCQkJICAgICAgdTMyIG9mZnNldCwgdTggc2xvdF9pZCwKJiM0MzsJCQkJICAgICAgdW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgKmNvbXApCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcGRzY19kZWZlcnJlZF9kbWEgKmRlZmVycmVkOwomIzQzOwlkbWFfYWRkcl90IGRtYV9hZGRyOwomIzQzOwl1OCAqY29tcG9uZW50X2RhdGE7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CWRlZmVycmVkID0ga21hbGxvY19vYmooKmRlZmVycmVkLCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCFkZWZlcnJlZCkKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwljb21wb25lbnRfZGF0YSA9IGttZW1kdXAoZGF0YSwgY29weV9zeiwgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmICghY29tcG9uZW50X2RhdGEpIHsKJiM0MzsJCWtmcmVlKGRlZmVycmVkKTsKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwl9CiYjNDM7CiYjNDM7CWRtYV9hZGRyID0gZG1hX21hcF9zaW5nbGUoZGV2LCBjb21wb25lbnRfZGF0YSwgY29weV9zeiwgRE1BX1RPX0RFVklDRSk7CiYjNDM7CWlmIChkbWFfbWFwcGluZ19lcnJvcihkZXYsIGRtYV9hZGRyKSkgewomIzQzOwkJZGV2X2VycihkZXYsCiYjNDM7CQkJJiMzNDtGYWlsZWQgdG8gZG1hX21hcCBjb21wb25lbnRfZGF0YSBhdCBvZmZzZXQgMHgleCBjb3B5X3N6IDB4JXhcbiYjMzQ7LAomIzQzOwkJCW9mZnNldCwgY29weV9zeik7CiYjNDM7CQlrZnJlZShjb21wb25lbnRfZGF0YSk7CiYjNDM7CQlrZnJlZShkZWZlcnJlZCk7CiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJfQomIzQzOwomIzQzOwllcnIgPSBwZHNjX2RldmNtZF9zZW5kX2NvbXBvbmVudChwZHNjLCBpbmZvLCBpbmZvX3N6LCBkbWFfYWRkciwKJiM0MzsJCQkJCSBjb3B5X3N6LCBvZmZzZXQsIHNsb3RfaWQsIGNvbXApOwomIzQzOwlpZiAoZXJyID09IC1FVElNRURPVVQgfHwgZXJyID09IC1FQUdBSU4pIHsKJiM0MzsJCXBkc2NfZGVmZXJyZWRfZG1hX2FkZChwZHNjLCBkZWZlcnJlZCwgZG1hX2FkZHIsCiYjNDM7CQkJCSAgICAgIGNvbXBvbmVudF9kYXRhLCBjb3B5X3N6LCBETUFfVE9fREVWSUNFKTsKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CX0KJiM0MzsKJiM0MzsJa2ZyZWUoZGVmZXJyZWQpOwomIzQzOwlkbWFfdW5tYXBfc2luZ2xlKGRldiwgZG1hX2FkZHIsIGNvcHlfc3osIERNQV9UT19ERVZJQ0UpOwomIzQzOwlrZnJlZShjb21wb25lbnRfZGF0YSk7CiYjNDM7CiYjNDM7CXJldHVybiBlcnI7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcGRzY19mbGFzaF9jb21wb25lbnQoc3RydWN0IHBsZG1mdyAqY29udGV4dCwKJiM0MzsJCQkJc3RydWN0IHBsZG1md19jb21wb25lbnQgKmNvbXBvbmVudCkKJiM0Mzt7CiYjNDM7CWNoYXIgY29tcG9uZW50X25hbWVfYnVmW1BEU0NfRldfQ09NUE9ORU5UX0ZVTExfTkFNRV9CVUZMRU5dOwomIzQzOwlzdHJ1Y3QgcGRzX2NvcmVfZnd1X3ByaXYgKnByaXYgPQomIzQzOwkJY29udGFpbmVyX29mKGNvbnRleHQsIHN0cnVjdCBwZHNfY29yZV9md3VfcHJpdiwgY29udGV4dCk7CiYjNDM7CXN0cnVjdCBwZHNfY29yZV9mbGFzaF9jb21wb25lbnQgKmNvbXBvbmVudF9pbmZvOwomIzQzOwljb25zdCBjaGFyICpjb21wb25lbnRfbmFtZSA9IE5VTEw7CiYjNDM7CXN0cnVjdCBkZXZpY2UgKmRldiA9IGNvbnRleHQtJmd0O2RldjsKJiM0MzsJc3RydWN0IHBkc2MgKnBkc2MgPSBwcml2LSZndDtwZHNjOwomIzQzOwl1MTYgYnVmX3N6LCBpbmZvX3N6OwomIzQzOwlzdHJ1Y3QgZGV2bGluayAqZGw7CiYjNDM7CXU4IGNvbXBvbmVudF90eXBlOwomIzQzOwl1MzIgdG90YWxfbGVuOwomIzQzOwl1MzIgb2Zmc2V0OwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwljb21wb25lbnRfdHlwZSA9IHBkc2NfZ2V0X2NvbXBvbmVudF90eXBlX2J5X2lkKHBkc2MsCiYjNDM7CQkJCQkJICAgICAgIGNvbXBvbmVudC0mZ3Q7aWRlbnRpZmllcik7CiYjNDM7CWlmIChjb21wb25lbnRfdHlwZSkgewomIzQzOwkJY29uc3QgY2hhciAqdHlwZV9uYW1lID0gcGRzY19md190eXBlX3RvX25hbWUoY29tcG9uZW50X3R5cGUpOwomIzQzOwomIzQzOwkJaWYgKGNvbXBvbmVudF90eXBlID09IFBEU19DT1JFX0ZXX1RZUEVfTUFJTikgewomIzQzOwkJCWNvbXBvbmVudF9uYW1lID0gJiMzNDtmdyYjMzQ7OwomIzQzOwkJfSBlbHNlIGlmICh0eXBlX25hbWUpIHsKJiM0MzsJCQlzbnByaW50Zihjb21wb25lbnRfbmFtZV9idWYsIHNpemVvZihjb21wb25lbnRfbmFtZV9idWYpLAomIzQzOwkJCQkgJiMzNDslcyVzJiMzNDssIFBEU0NfRldfQ09NUE9ORU5UX1BSRUZJWCwgdHlwZV9uYW1lKTsKJiM0MzsJCQljb21wb25lbnRfbmFtZSA9IGNvbXBvbmVudF9uYW1lX2J1ZjsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlkbCA9IHByaXZfdG9fZGV2bGluayhwZHNjKTsKJiM0MzsKJiM0MzsJaWYgKHBkc2Nfc2tpcF9jb21wb25lbnQocHJpdiwgY29tcG9uZW50LSZndDtpZGVudGlmaWVyKSkgewomIzQzOwkJZGV2bGlua19mbGFzaF91cGRhdGVfc3RhdHVzX25vdGlmeShkbCwgJiMzNDtTa2lwcGVkJiMzNDssCiYjNDM7CQkJCQkJICAgY29tcG9uZW50X25hbWUsIDAsIDApOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJdG90YWxfbGVuID0gY29tcG9uZW50LSZndDtjb21wb25lbnRfc2l6ZTsKJiM0MzsJZGV2X2RiZyhkZXYsCiYjNDM7CQkmIzM0O2NvbXBvbmVudCBuYW1lICVzIGNsYXNzICV1IGlkICV1IGFjdF9tZXRoICV1IHZlcl9zdHIgJS4qcyBpbmRleCAldSBzaXplICV1XG4mIzM0OywKJiM0MzsJCWNvbXBvbmVudF9uYW1lID86ICYjMzQ7KHVua25vd24pJiMzNDssIGNvbXBvbmVudC0mZ3Q7Y2xhc3NpZmljYXRpb24sCiYjNDM7CQljb21wb25lbnQtJmd0O2lkZW50aWZpZXIsIGNvbXBvbmVudC0mZ3Q7YWN0aXZhdGlvbl9tZXRob2QsCiYjNDM7CQljb21wb25lbnQtJmd0O3ZlcnNpb25fbGVuLCBjb21wb25lbnQtJmd0O3ZlcnNpb25fc3RyaW5nLAomIzQzOwkJY29tcG9uZW50LSZndDtpbmRleCwgY29tcG9uZW50LSZndDtjb21wb25lbnRfc2l6ZSk7CiYjNDM7CiYjNDM7CWJ1Zl9zeiA9IHNpemVvZihwZHNjLSZndDtjbWRfcmVncy0mZ3Q7ZGF0YSk7CiYjNDM7CWluZm9fc3ogPSBzdHJ1Y3Rfc2l6ZShjb21wb25lbnRfaW5mbywgdmVyc2lvbl9zdHIsCiYjNDM7CQkJICAgICAgY29tcG9uZW50LSZndDt2ZXJzaW9uX2xlbik7CiYjNDM7CWlmIChpbmZvX3N6ICZndDsgYnVmX3N6KSB7CiYjNDM7CQlkZXZfZXJyKGRldiwgJiMzNDtjb21wb25lbnRfaW5mbyBzaXplICVkIHRvbyBiaWcsIG1heCBzaXplOiAlZFxuJiMzNDssCiYjNDM7CQkJaW5mb19zeiwgYnVmX3N6KTsKJiM0MzsJCXJldHVybiAtRU5PU1BDOwomIzQzOwl9CiYjNDM7CWNvbXBvbmVudF9pbmZvID0gdnphbGxvYyhpbmZvX3N6KTsKJiM0MzsJaWYgKCFjb21wb25lbnRfaW5mbykKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwljb21wb25lbnRfaW5mby0mZ3Q7Y29tcGFyaXNvbl9zdGFtcCA9CiYjNDM7CQljcHVfdG9fbGUzMihjb21wb25lbnQtJmd0O2NvbXBhcmlzb25fc3RhbXApOwomIzQzOwljb21wb25lbnRfaW5mby0mZ3Q7aW1hZ2Vfc2l6ZSA9IGNwdV90b19sZTMyKHRvdGFsX2xlbik7CiYjNDM7CWNvbXBvbmVudF9pbmZvLSZndDtjbGFzc2lmaWNhdGlvbiA9IGNwdV90b19sZTE2KGNvbXBvbmVudC0mZ3Q7Y2xhc3NpZmljYXRpb24pOwomIzQzOwljb21wb25lbnRfaW5mby0mZ3Q7aWRlbnRpZmllciA9IGNwdV90b19sZTE2KGNvbXBvbmVudC0mZ3Q7aWRlbnRpZmllcik7CiYjNDM7CWNvbXBvbmVudF9pbmZvLSZndDtvcHRpb25zID0gY3B1X3RvX2xlMTYoY29tcG9uZW50LSZndDtvcHRpb25zKTsKJiM0MzsJY29tcG9uZW50X2luZm8tJmd0O3ZlcnNpb25fc3RyX3R5cGUgPSBjb21wb25lbnQtJmd0O3ZlcnNpb25fdHlwZTsKJiM0MzsJY29tcG9uZW50X2luZm8tJmd0O3ZlcnNpb25fc3RyX2xlbiA9IGNvbXBvbmVudC0mZ3Q7dmVyc2lvbl9sZW47CiYjNDM7CW1lbWNweShjb21wb25lbnRfaW5mby0mZ3Q7dmVyc2lvbl9zdHIsIGNvbXBvbmVudC0mZ3Q7dmVyc2lvbl9zdHJpbmcsCiYjNDM7CSAgICAgICBjb21wb25lbnQtJmd0O3ZlcnNpb25fbGVuKTsKJiM0MzsKJiM0MzsJb2Zmc2V0ID0gMDsKJiM0MzsJd2hpbGUgKG9mZnNldCAmbHQ7IHRvdGFsX2xlbikgewomIzQzOwkJdW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgY29tcCA9IHt9OwomIzQzOwkJdTE2IGNvcHlfc3o7CiYjNDM7CiYjNDM7CQljb3B5X3N6ID0gbWluX3QodW5zaWduZWQgaW50LCBQRFNfUEFHRV9TSVpFLAomIzQzOwkJCQl0b3RhbF9sZW4gLSBvZmZzZXQpOwomIzQzOwomIzQzOwkJZXJyID0gcGRzY19mbGFzaF9jb21wb25lbnRfY2h1bmsocGRzYywgZGV2LCBjb21wb25lbnRfaW5mbywKJiM0MzsJCQkJCQkgaW5mb19zeiwKJiM0MzsJCQkJCQkgY29tcG9uZW50LSZndDtjb21wb25lbnRfZGF0YSAmIzQzOwomIzQzOwkJCQkJCSBvZmZzZXQsIGNvcHlfc3osIG9mZnNldCwKJiM0MzsJCQkJCQkgUERTX0NPUkVfRldfU0xPVF9JTlZBTElELAomIzQzOwkJCQkJCSAmYW1wO2NvbXApOwomIzQzOwkJaWYgKGVyciAmYW1wOyZhbXA7CiYjNDM7CQkgICAgY29tcC5zZW5kX2NvbXBvbmVudC5jb21wYXRfcmVzcG9uc2UgJmFtcDsmYW1wOwomIzQzOwkJICAgIChjb21wLnNlbmRfY29tcG9uZW50LmNvbXBhdF9yZXNwb25zZV9jb2RlID09CiYjNDM7CQkgICAgIFBEU19DT1JFX0NPTVBPTkVOVF9TVEFNUF9JREVOVElDQUwgfHwKJiM0MzsJCSAgICAgY29tcC5zZW5kX2NvbXBvbmVudC5jb21wYXRfcmVzcG9uc2VfY29kZSA9PQomIzQzOwkJICAgICBQRFNfQ09SRV9DT01QT05FTlRfU1RBTVBfTE9XRVIpKSB7CiYjNDM7CQkJZXJyID0gMDsKJiM0MzsJCQlkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9zdGF0dXNfbm90aWZ5KGRsLCAmIzM0O1NraXBwZWQmIzM0OywKJiM0MzsJCQkJCQkJICAgY29tcG9uZW50X25hbWUsCiYjNDM7CQkJCQkJCSAgIDAsIDApOwomIzQzOwkJCWdvdG8gc2tpcF9jb21wb25lbnQ7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlpZiAoZXJyKSB7CiYjNDM7CQkJTkxfU0VUX0VSUl9NU0dfTU9EKHByaXYtJmd0O2V4dGFjaywKJiM0MzsJCQkJCSAgICYjMzQ7RmFpbGVkIHRvIGZsYXNoIGNvbXBvbmVudCYjMzQ7KTsKJiM0MzsJCQlnb3RvIGVycl9vdXQ7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlvZmZzZXQgJiM0Mzs9IGNvcHlfc3o7CiYjNDM7CQlkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9zdGF0dXNfbm90aWZ5KGRsLAomIzQzOwkJCQkJCSAgICYjMzQ7RXJhc2luZy9GbGFzaGluZyYjMzQ7LAomIzQzOwkJCQkJCSAgIGNvbXBvbmVudF9uYW1lLCBvZmZzZXQsCiYjNDM7CQkJCQkJICAgdG90YWxfbGVuKTsKJiM0MzsJfQomIzQzOwomIzQzOwl2ZnJlZShjb21wb25lbnRfaW5mbyk7CiYjNDM7CXJldHVybiAwOwomIzQzOwomIzQzO2Vycl9vdXQ6CiYjNDM7CWRldmxpbmtfZmxhc2hfdXBkYXRlX3N0YXR1c19ub3RpZnkoZGwsCiYjNDM7CQkJCQkgICAmIzM0O0VyYXNpbmcvRmxhc2hpbmcgQ29tcG9uZW50IEZhaWxlZCYjMzQ7LAomIzQzOwkJCQkJICAgY29tcG9uZW50X25hbWUsIDAsIDApOwomIzQzO3NraXBfY29tcG9uZW50OgomIzQzOwl2ZnJlZShjb21wb25lbnRfaW5mbyk7CiYjNDM7CXJldHVybiBlcnI7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcGRzY19kZXZjbWRfZmluYWxpemVfdXBkYXRlKHN0cnVjdCBwZHNjICpwZHNjKQomIzQzO3sKJiM0MzsJdW5pb24gcGRzX2NvcmVfZGV2X2NtZCBjbWQgPSB7CiYjNDM7CQkuZmluYWxpemVfdXBkYXRlLm9wY29kZSA9IFBEU19DT1JFX0NNRF9GSU5BTElaRV9VUERBVEUsCiYjNDM7CQkuZmluYWxpemVfdXBkYXRlLnZlciA9IDEsCiYjNDM7CX07CiYjNDM7CXVuaW9uIHBkc19jb3JlX2Rldl9jb21wIGNvbXAgPSB7fTsKJiM0MzsKJiM0MzsJcmV0dXJuIHBkc2NfZGV2Y21kKHBkc2MsICZhbXA7Y21kLCAmYW1wO2NvbXAsIHBkc2MtJmd0O2RldmNtZF90aW1lb3V0KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBwZHNjX2ZpbmFsaXplX3VwZGF0ZShzdHJ1Y3QgcGxkbWZ3ICpjb250ZXh0KQomIzQzO3sKJiM0MzsJc3RydWN0IHBkc19jb3JlX2Z3dV9wcml2ICpwcml2ID0KJiM0MzsJCWNvbnRhaW5lcl9vZihjb250ZXh0LCBzdHJ1Y3QgcGRzX2NvcmVfZnd1X3ByaXYsIGNvbnRleHQpOwomIzQzOwljb25zdCBjaGFyICpjb21wb25lbnRfbmFtZSA9IHByaXYtJmd0O3BhcmFtcy0mZ3Q7Y29tcG9uZW50OwomIzQzOwl1bnNpZ25lZCBsb25nIHN0YXJ0X3RpbWUsIGVuZF90aW1lOwomIzQzOwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBjb250ZXh0LSZndDtkZXY7CiYjNDM7CXN0cnVjdCBwZHNjICpwZHNjID0gcHJpdi0mZ3Q7cGRzYzsKJiM0MzsJc3RydWN0IGRldmxpbmsgKmRsOwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwlkbCA9IHByaXZfdG9fZGV2bGluayhwZHNjKTsKJiM0MzsKJiM0MzsJc3RhcnRfdGltZSA9IGppZmZpZXM7CiYjNDM7CWVuZF90aW1lID0gc3RhcnRfdGltZSAmIzQzOyAoUERTQ19GV19JTlNUQUxMX1RJTUVPVVQgKiBIWik7CiYjNDM7CWRvIHsKJiM0MzsJCWVyciA9IHBkc2NfZGV2Y21kX2ZpbmFsaXplX3VwZGF0ZShwZHNjKTsKJiM0MzsJCWlmIChlcnIgIT0gLUVBR0FJTikKJiM0MzsJCQlicmVhazsKJiM0MzsKJiM0MzsJCWRldl9kYmcoZGV2LCAmIzM0O3JldHJ5aW5nIGZpbmFsaXplX3VwZGF0ZTogJXBlXG4mIzM0OywgRVJSX1BUUihlcnIpKTsKJiM0MzsJCW1zbGVlcCgyMCk7CiYjNDM7CX0gd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIGVuZF90aW1lKSAmYW1wOyZhbXA7IGVyciA9PSAtRUFHQUlOKTsKJiM0MzsKJiM0MzsJaWYgKGVycikgewomIzQzOwkJZGV2bGlua19mbGFzaF91cGRhdGVfc3RhdHVzX25vdGlmeShkbCwgJiMzNDtGaW5hbGl6ZSBVcGRhdGUgRmFpbGVkJiMzNDssCiYjNDM7CQkJCQkJICAgY29tcG9uZW50X25hbWUsIDAsIDApOwomIzQzOwkJTkxfU0VUX0VSUl9NU0dfTU9EKHByaXYtJmd0O2V4dGFjaywgJiMzNDtGaW5hbGl6ZSB1cGRhdGUgZmFpbGVkJiMzNDspOwomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsJfQomIzQzOwomIzQzOwlkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9zdGF0dXNfbm90aWZ5KGRsLCAmIzM0O0ZpbmFsaXplZCBVcGRhdGUmIzM0OywKJiM0MzsJCQkJCSAgIGNvbXBvbmVudF9uYW1lLCAwLCAwKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGxkbWZ3X29wcyBwZHNjX3BsZG1md19vcHMgPSB7CiYjNDM7CS5tYXRjaF9yZWNvcmQgPSBwZHNjX21hdGNoX3JlY29yZF9kZXNjcywKJiM0MzsJLnNlbmRfcGFja2FnZV9kYXRhID0gcGRzY19zZW5kX3BhY2thZ2VfZGF0YSwKJiM0MzsJLnNlbmRfY29tcG9uZW50X3RhYmxlID0gcGRzY19zZW5kX2NvbXBvbmVudF90YWJsZSwKJiM0MzsJLmZsYXNoX2NvbXBvbmVudCA9IHBkc2NfZmxhc2hfY29tcG9uZW50LAomIzQzOwkuZmluYWxpemVfdXBkYXRlID0gcGRzY19maW5hbGl6ZV91cGRhdGUKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBpbnQgcGRzY19wbGRtX2Zpcm13YXJlX3VwZGF0ZShzdHJ1Y3QgcGRzYyAqcGRzYywKJiM0MzsJCQkJICAgICBzdHJ1Y3QgZGV2bGlua19mbGFzaF91cGRhdGVfcGFyYW1zICpwYXJhbXMsCiYjNDM7CQkJCSAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrLAomIzQzOwkJCQkgICAgIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcGRzX2NvcmVfZnd1X3ByaXYgcHJpdiA9IHt9OwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwlpZiAoIXBkc2MtJmd0O2Z3X2NvbXBvbmVudHMubnVtX2NvbXBvbmVudHMpIHsKJiM0MzsJCWVyciA9IHBkc2NfZ2V0X2NvbXBvbmVudF9pbmZvKHBkc2MpOwomIzQzOwkJaWYgKGVycikgewomIzQzOwkJCU5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssCiYjNDM7CQkJCQkgICAmIzM0O0ZhaWxlZCB0byBnZXQgY29tcG9uZW50IGluZm8mIzM0Oyk7CiYjNDM7CQkJcmV0dXJuIGVycjsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlpZiAocGFyYW1zLSZndDtjb21wb25lbnQpIHsKJiM0MzsJCXU4IHR5cGUgPSBwZHNjX25hbWVfdG9fZndfdHlwZShwYXJhbXMtJmd0O2NvbXBvbmVudCk7CiYjNDM7CiYjNDM7CQlpZiAoIXR5cGUgfHwgIXBkc2NfY29tcG9uZW50X3R5cGVfZXhpc3RzKHBkc2MsIHR5cGUpKSB7CiYjNDM7CQkJTkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgJiMzNDtVbmtub3duIGNvbXBvbmVudCBuYW1lJiMzNDspOwomIzQzOwkJCXJldHVybiAtRU5PRU5UOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CUlOSVRfTElTVF9IRUFEKCZhbXA7cHJpdi5jb21wb25lbnRzKTsKJiM0MzsJcHJpdi5jb250ZXh0Lm9wcyA9ICZhbXA7cGRzY19wbGRtZndfb3BzOwomIzQzOwlwcml2LmNvbnRleHQuZGV2ID0gcGRzYy0mZ3Q7ZGV2OwomIzQzOwlwcml2LnBhcmFtcyA9IHBhcmFtczsKJiM0MzsJcHJpdi5leHRhY2sgPSBleHRhY2s7CiYjNDM7CXByaXYucGRzYyA9IHBkc2M7CiYjNDM7CiYjNDM7CWVyciA9IHBsZG1md19mbGFzaF9pbWFnZSgmYW1wO3ByaXYuY29udGV4dCwgZncpOwomIzQzOwlpZiAoIWVyciAmYW1wOyZhbXA7IHBhcmFtcy0mZ3Q7Y29tcG9uZW50ICZhbXA7JmFtcDsgIXByaXYuY29tcG9uZW50X2ZvdW5kKSB7CiYjNDM7CQlOTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLAomIzQzOwkJCQkgICAmIzM0O1JlcXVlc3RlZCBjb21wb25lbnQgbm90IHByZXNlbnQgaW4gZmlybXdhcmUgcGFja2FnZSYjMzQ7KTsKJiM0MzsJCWVyciA9IC1FTk9FTlQ7CiYjNDM7CX0KJiM0MzsJcGRzY19mcmVlX2Z3dV9wcml2KCZhbXA7cHJpdik7CiYjNDM7CiYjNDM7CXJldHVybiBlcnI7CiYjNDM7fQomIzQzOwomIzQzO2ludCBwZHNjX2Zpcm13YXJlX3VwZGF0ZShzdHJ1Y3QgcGRzYyAqcGRzYywKJiM0MzsJCQkgc3RydWN0IGRldmxpbmtfZmxhc2hfdXBkYXRlX3BhcmFtcyAqcGFyYW1zLAomIzQzOwkJCSBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spCiYjNDM7ewomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwlpZiAocGRzYy0mZ3Q7ZGV2X2lkZW50LnZlcnNpb24gJmd0Oz0gUERTX0NPUkVfSURFTlRJVFlfVkVSU0lPTl8yICZhbXA7JmFtcDsKJiM0MzsJICAgIHBkc2MtJmd0O2Rldl9pZGVudC5jYXBhYmlsaXRpZXMgJmFtcDsKJiM0MzsJCWNwdV90b19sZTY0KFBEU19DT1JFX0RFVl9DQVBfUExETV9GV19VUERBVEUpKQomIzQzOwkJZXJyID0gcGRzY19wbGRtX2Zpcm13YXJlX3VwZGF0ZShwZHNjLCBwYXJhbXMsIGV4dGFjaywKJiM0MzsJCQkJCQlwYXJhbXMtJmd0O2Z3KTsKJiM0MzsJZWxzZQomIzQzOwkJZXJyID0gcGRzY19sZWdhY3lfZmlybXdhcmVfdXBkYXRlKHBkc2MsIHBhcmFtcywgZXh0YWNrKTsKJiM0MzsKJiM0MzsJLyogSW52YWxpZGF0ZSBjYWNoZWQgY29tcG9uZW50IGluZm8gc28gbmV4dCBpbmZvX2dldCByZWZyZXNoZXMgKi8KJiM0MzsJcGRzY19md19jb21wb25lbnRzX2ludmFsaWRhdGUocGRzYyk7CiYjNDM7CiYjNDM7CXJldHVybiBlcnI7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9tYWluLmMKaW5kZXggOGQ5NGE0ZDcwMzk1ZS4uNWUxYjA3ODUwMTYzYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvbWFpbi5jCkBAIC0yMSw2ICYjNDM7MjEsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgcGRzY19pZF90YWJsZVtdID0gewogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBwZHNjX2lkX3RhYmxlKTsKIAomIzQzO3N0YXRpYyB2b2lkIHBkc2Nfc3RvcF9oZWFsdGhfdGhyZWFkKHN0cnVjdCBwZHNjICpwZHNjKTsKJiM0MzsKIHN0YXRpYyB2b2lkIHBkc2Nfd2R0aW1lcl9jYihzdHJ1Y3QgdGltZXJfbGlzdCAqdCkKIHsKIAlzdHJ1Y3QgcGRzYyAqcGRzYyA9IHRpbWVyX2NvbnRhaW5lcl9vZihwZHNjLCB0LCB3ZHRpbWVyKTsKQEAgLTMxNSw2ICYjNDM7MzE3LDcgQEAgc3RhdGljIGludCBwZHNjX2luaXRfcGYoc3RydWN0IHBkc2MgKnBkc2MpCiAJCWRlc3Ryb3lfd29ya3F1ZXVlKHBkc2MtJmd0O3dxKTsKIAltdXRleF9kZXN0cm95KCZhbXA7cGRzYy0mZ3Q7Y29uZmlnX2xvY2spOwogCW11dGV4X2Rlc3Ryb3koJmFtcDtwZHNjLSZndDtkZXZjbWRfbG9jayk7CiYjNDM7CXBkc2NfZGVmZXJyZWRfZG1hX2ZyZWUocGRzYyk7CiAJcGNpX2ZyZWVfaXJxX3ZlY3RvcnMocGRzYy0mZ3Q7cGRldik7CiBlcnJfb3V0X3VubWFwX2JhcnM6CiAJcGRzY191bm1hcF9iYXJzKHBkc2MpOwpAQCAtMzUzLDYgJiM0MzszNTYsOCBAQCBzdGF0aWMgaW50IHBkc2NfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCiAJcGRzYy0mZ3Q7cGRldiA9IHBkZXY7CiAJcGRzYy0mZ3Q7ZGV2ID0gJmFtcDtwZGV2LSZndDtkZXY7CiAJc2V0X2JpdChQRFNDX1NfSU5JVElOR19EUklWRVIsICZhbXA7cGRzYy0mZ3Q7c3RhdGUpOwomIzQzOwlJTklUX0xJU1RfSEVBRCgmYW1wO3Bkc2MtJmd0O2RlZmVycmVkX2RtYV9saXN0KTsKJiM0MzsJc3Bpbl9sb2NrX2luaXQoJmFtcDtwZHNjLSZndDtkZWZlcnJlZF9kbWFfbG9jayk7CiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIHBkc2MpOwogCXBkc2NfZGVidWdmc19hZGRfZGV2KHBkc2MpOwogCkBAIC00NTgsNiAmIzQzOzQ2Myw3IEBAIHN0YXRpYyB2b2lkIHBkc2NfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogCX0KIAogCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKJiM0MzsJcGRzY19kZWZlcnJlZF9kbWFfZnJlZShwZHNjKTsKIAogCWlkYV9mcmVlKCZhbXA7cGRzY19pZGEsIHBkc2MtJmd0O3VpZCk7CiAJcGRzY19kZWJ1Z2ZzX2RlbF9kZXYocGRzYyk7CkBAIC01MDUsNiAmIzQzOzUxMSw3IEBAIHN0YXRpYyB2b2lkIHBkc2NfcmVzZXRfcHJlcGFyZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIAlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOwogCWlmIChwY2lfaXNfZW5hYmxlZChwZGV2KSkKIAkJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwomIzQzOwlwZHNjX2RlZmVycmVkX2RtYV9mcmVlKHBkc2MpOwogfQogCiBzdGF0aWMgdm9pZCBwZHNjX3Jlc2V0X2RvbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Bkcy9wZHNfY29yZV9pZi5oIGIvaW5jbHVkZS9saW51eC9wZHMvcGRzX2NvcmVfaWYuaAppbmRleCAxN2E4N2MxYTU1ZDdjLi45MDFlMWU2MjhmODkwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3Bkcy9wZHNfY29yZV9pZi5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGRzL3Bkc19jb3JlX2lmLmgKQEAgLTQwLDYgJiM0Mzs0MCwxNCBAQCBlbnVtIHBkc19jb3JlX2NtZF9vcGNvZGUgewogCVBEU19DT1JFX0NNRF9GV19ET1dOTE9BRAk9IDQsCiAJUERTX0NPUkVfQ01EX0ZXX0NPTlRST0wJCT0gNSwKIAomIzQzOwlQRFNfQ09SRV9DTURfR0VUX0NPTVBPTkVOVF9JTkZPCT0gNiwKJiM0MzsJUERTX0NPUkVfQ01EX1NFTkRfUEtHX0RBVEEJPSA3LAomIzQzOwlQRFNfQ09SRV9DTURfU0VORF9DT01QT05FTlRfVEJMCT0gOCwKJiM0MzsJUERTX0NPUkVfQ01EX1NFTkRfQ09NUE9ORU5UCT0gOSwKJiM0MzsJUERTX0NPUkVfQ01EX0ZJTkFMSVpFX1VQREFURQk9IDEwLAomIzQzOwlQRFNfQ09SRV9DTURfTUFUQ0hfUkVDT1JEX0RFU0MJPSAxMSwKJiM0MzsJUERTX0NPUkVfQ01EX0hPU1RfTUVNCQk9IDEyLAomIzQzOwogCS8qIFNSL0lPViBjb21tYW5kcyAqLwogCVBEU19DT1JFX0NNRF9WRl9HRVRBVFRSCQk9IDYwLAogCVBEU19DT1JFX0NNRF9WRl9TRVRBVFRSCQk9IDYxLApAQCAtMTAwLDYgJiM0MzsxMDgsMTYgQEAgc3RydWN0IHBkc19jb3JlX2Rydl9pZGVudGl0eSB7CiAJY2hhciAgIGRyaXZlcl92ZXJfc3RyWzMyXTsKIH07CiAKJiM0MzsvKioKJiM0MzsgKiBlbnVtIHBkc19jb3JlX2Rldl9jYXBhYmlsaXR5IC0gRGV2aWNlIGNhcGFiaWxpdGllcwomIzQzOyAqIEBQRFNfQ09SRV9ERVZfQ0FQX1BMRE1fRldfVVBEQVRFOiBEZXZpY2Ugb25seSBzdXBwb3J0cyBGVyB1cGRhdGUgdmlhIFBMRE0KJiM0MzsgKiBAUERTX0NPUkVfREVWX0NBUF9IT1NUX01FTTogRGV2aWNlIHN1cHBvcnRzIGhvc3QgbWVtb3J5IGZvciBmdyB1c2UKJiM0MzsgKi8KJiM0MztlbnVtIHBkc19jb3JlX2Rldl9jYXBhYmlsaXR5IHsKJiM0MzsJUERTX0NPUkVfREVWX0NBUF9QTERNX0ZXX1VQREFURSA9IEJJVCgwKSwKJiM0MzsJUERTX0NPUkVfREVWX0NBUF9IT1NUX01FTSA9IEJJVCgxKSwKJiM0Mzt9OwomIzQzOwogI2RlZmluZSBQRFNfREVWX1RZUEVfTUFYCTE2CiAvKioKICAqIHN0cnVjdCBwZHNfY29yZV9kZXZfaWRlbnRpdHkgLSBEZXZpY2UgaWRlbnRpdHkgaW5mb3JtYXRpb24KQEAgLTExOSw2ICYjNDM7MTM3LDExIEBAIHN0cnVjdCBwZHNfY29yZV9kcnZfaWRlbnRpdHkgewogICoJCSAgICAgIHZhbHVlIGluIHVzZWNzIHRvIGRldmljZSB1bml0cyB1c2luZzoKICAqCQkgICAgICBkZXZpY2UgdW5pdHMgPSB1c2VjcyAqIG11bHQgLyBkaXYKICAqIEB2aWZfdHlwZXM6ICAgICAgICBIb3cgbWFueSBvZiBlYWNoIFZJRiBkZXZpY2UgdHlwZSBpcyBzdXBwb3J0ZWQKJiM0MzsgKiBAbWF4X2Z3X3Nsb3RzOiAgICAgTnVtYmVyIG9mIGZpcm13YXJlIGNvbXBvbmVudHMgcmVwb3J0ZWQgYnkgZGV2aWNlCiYjNDM7ICoJCSAgICAgIG9ubHkgc3VwcG9ydGVkIG9uIHZlcnNpb24gJmd0Oz0gUERTX0NPUkVfSURFTlRJVFlfVkVSU0lPTl8yCiYjNDM7ICogQHJzdmQyOgkgICAgICBXb3JkIGJvdW5kYXJ5IHBhZGRpbmcKJiM0MzsgKiBAY2FwYWJpbGl0aWVzOiAgICAgRGV2aWNlIGNhcGFiaWxpdGllcwomIzQzOyAqCQkgICAgICBvbmx5IHN1cHBvcnRlZCBvbiB2ZXJzaW9uICZndDs9IFBEU19DT1JFX0lERU5USVRZX1ZFUlNJT05fMgogICovCiBzdHJ1Y3QgcGRzX2NvcmVfZGV2X2lkZW50aXR5IHsKIAl1OCAgICAgdmVyc2lvbjsKQEAgLTEzMSw5ICYjNDM7MTU0LDEzIEBAIHN0cnVjdCBwZHNfY29yZV9kZXZfaWRlbnRpdHkgewogCV9fbGUzMiBpbnRyX2NvYWxfbXVsdDsKIAlfX2xlMzIgaW50cl9jb2FsX2RpdjsKIAlfX2xlMTYgdmlmX3R5cGVzW1BEU19ERVZfVFlQRV9NQVhdOwomIzQzOwlfX2xlMTYgbWF4X2Z3X3Nsb3RzOwomIzQzOwl1OCAgICAgcnN2ZDJbNl07CiYjNDM7CV9fbGU2NCBjYXBhYmlsaXRpZXM7CiB9OwogCiAjZGVmaW5lIFBEU19DT1JFX0lERU5USVRZX1ZFUlNJT05fMQkxCiYjNDM7I2RlZmluZSBQRFNfQ09SRV9JREVOVElUWV9WRVJTSU9OXzIJMgogCiAvKioKICAqIHN0cnVjdCBwZHNfY29yZV9kZXZfaWRlbnRpZnlfY21kIC0gRHJpdmVyL2RldmljZSBpZGVudGlmeSBjb21tYW5kCkBAIC0yNzUsMTEgJiM0MzszMDIsMjAgQEAgZW51bSBwZHNfY29yZV9md19jb250cm9sX29wZXIgewogCVBEU19DT1JFX0ZXX0dFVF9MSVNUICAgICAgICAgICAgICAgPSA3LAogfTsKIAomIzQzOy8qKgomIzQzOyAqIGVudW0gcGRzX2NvcmVfZndfc2xvdCAtIEZpcm13YXJlIHNsb3QgaWRlbnRpZmllcnMKJiM0MzsgKiBAUERTX0NPUkVfRldfU0xPVF9JTlZBTElEOiBMZXQgZmlybXdhcmUgc2VsZWN0IHNsb3QgYmFzZWQgb24gcGFja2FnZSBtZXRhZGF0YQomIzQzOyAqIEBQRFNfQ09SRV9GV19TTE9UX0E6ICAgICAgIFByaW1hcnkgZmlybXdhcmUgc2xvdCBBCiYjNDM7ICogQFBEU19DT1JFX0ZXX1NMT1RfQjogICAgICAgUHJpbWFyeSBmaXJtd2FyZSBzbG90IEIKJiM0MzsgKiBAUERTX0NPUkVfRldfU0xPVF9HT0xEOiAgICBHb2xkL3JlY292ZXJ5IGZpcm13YXJlIHNsb3QKJiM0MzsgKiBAUERTX0NPUkVfRldfU0xPVF9NQVg6ICAgICBTZW50aW5lbCB2YWx1ZSBpbmRpY2F0aW5nIG5vIHNsb3QgcmVzb2x2ZWQKJiM0MzsgKi8KIGVudW0gcGRzX2NvcmVfZndfc2xvdCB7CiAJUERTX0NPUkVfRldfU0xPVF9JTlZBTElEICAgID0gMCwKIAlQRFNfQ09SRV9GV19TTE9UX0EJICAgID0gMSwKIAlQRFNfQ09SRV9GV19TTE9UX0IgICAgICAgICAgPSAyLAogCVBEU19DT1JFX0ZXX1NMT1RfR09MRCAgICAgICA9IDMsCiYjNDM7CVBEU19DT1JFX0ZXX1NMT1RfTUFYICAgICAgICA9IDB4ZmYsCiB9OwogCiAvKioKQEAgLTQ0Niw2ICYjNDM7NDgyLDQyMyBAQCBzdHJ1Y3QgcGRzX2NvcmVfdmZfY3RybF9jb21wIHsKIAl1OAlzdGF0dXM7CiB9OwogCiYjNDM7LyoqCiYjNDM7ICogc3RydWN0IHBkc19jb3JlX3NlbmRfcGtnX2RhdGFfY21kIC0gU2VuZCBwYWNrYWdlIGRhdGEgY29tbWFuZAomIzQzOyAqIEBvcGNvZGU6IE9wY29kZSBQRFNfQ09SRV9DTURfU0VORF9QS0dfREFUQQomIzQzOyAqIEB2ZXI6IERyaXZlciYjMzk7cyBtYXggc3VwcG9ydCB2ZXJzaW9uIG9mIHRoaXMgY29tbWFuZAomIzQzOyAqIEB0b3RhbF9sZW46IFRvdGFsIGxlbmd0aCBvZiB0aGUgcGFja2FnZSBkYXRhCiYjNDM7ICogQG9mZnNldDogT2Zmc2V0IGluIHRoZSBwYWNrYWdlIGRhdGEsIG5vbi16ZXJvIGlmIG11bHRpcGxlIGNvbW1hbmRzIGFyZQomIzQzOyAqCSAgICBuZWVkZWQgZm9yIHNlbmRpbmcgdGhlIHBhY2thZ2UgZGF0YQomIzQzOyAqIEBkYXRhX2xlbjogTGVuZ3RoIG9mIGRhdGEgc3RvcmVkIGF0IGRhdGFfcGEKJiM0MzsgKiBAZGF0YV9wYTogRGF0YSBwaHlzaWNhbCBhZGRyZXNzIGZvciBETUEgdG8gZGV2aWNlCiYjNDM7ICoKJiM0MzsgKiBUaGUgcGFja2FnZSBkYXRhIG1heSBiZSB0b28gbGFyZ2UgdG8gc3RvcmUgaW4gYSBzaW5nbGUgYnVmZmVyLCBzbyBtdWx0aXBsZQomIzQzOyAqIFBEU19DT1JFX0NNRF9TRU5EX1BLR19EQVRBIGRldmNtZHMgbWF5IGJlIG5lZWRlZC4KJiM0MzsgKi8KJiM0MztzdHJ1Y3QgcGRzX2NvcmVfc2VuZF9wa2dfZGF0YV9jbWQgewomIzQzOwl1OCBvcGNvZGU7CiYjNDM7CXU4IHZlcjsKJiM0MzsJX19sZTE2IHRvdGFsX2xlbjsKJiM0MzsJX19sZTE2IG9mZnNldDsKJiM0MzsJX19sZTE2IGRhdGFfbGVuOwomIzQzOwlfX2xlNjQgZGF0YV9wYTsKJiM0Mzt9OwomIzQzOwomIzQzOy8qKgomIzQzOyAqIHN0cnVjdCBwZHNfY29yZV9zZW5kX3BrZ19kYXRhX2NvbXAgLSBTZW5kIHBhY2thZ2UgZGF0YSBjb21wbGV0aW9uCiYjNDM7ICogQHN0YXR1czogU3RhdHVzIG9mIHRoZSBjb21tYW5kIChlbnVtIHBkc19jb3JlX3N0YXR1c19jb2RlKQomIzQzOyAqIEB2ZXI6IERldmljZSYjMzk7cyBtYXggc3VwcG9ydGVkIHZlcnNpb24gb2YgdGhpcyBjb21tYW5kCiYjNDM7ICogQHJzdmQ6IFdvcmQgYm91bmRhcnkgcGFkZGluZwomIzQzOyAqLwomIzQzO3N0cnVjdCBwZHNfY29yZV9zZW5kX3BrZ19kYXRhX2NvbXAgewomIzQzOwl1OCBzdGF0dXM7CiYjNDM7CXU4IHZlcjsKJiM0MzsJdTggcnN2ZFsyXTsKJiM0Mzt9OwomIzQzOwomIzQzOy8qKgomIzQzOyAqIHN0cnVjdCBwZHNfY29yZV9jb21wb25lbnRfdGJsIC0gQ29tcG9uZW50IHRhYmxlIGRldGFpbHMKJiM0MzsgKiBAY29tcGFyaXNvbl9zdGFtcDogQ29tcGFyaXNvbiBzdGFtcCB1c2VkIGZvciBjb21wb25lbnQgdmVyc2lvbiBjaGVja3MKJiM0MzsgKiBAY2xhc3NpZmljYXRpb246IFZlbmRvciBzcGVjaWZpYyBjbGFzc2lmaWNhdGlvbiBpbmZvCiYjNDM7ICogQGlkZW50aWZpZXI6IENvbXBvbmVudCYjMzk7cyBJRAomIzQzOyAqIEB0cmFuc2Zlcl9mbGFnOiBQYXJ0IG9mIHRoZSBjb21wb25lbnQgdGFibGUgdGhpcyByZXF1ZXN0IHJlcHJlc2VudHMKJiM0MzsgKiBAdmVyc2lvbl9zdHJfdHlwZTogVGhlIHR5cGVzIG9mIHN0cmluZ3MgdXNlZAomIzQzOyAqIEB2ZXJzaW9uX3N0cl9sZW46IExlbmd0aCBvZiBAdmVyc2lvbl9zdHIKJiM0MzsgKiBAdmVyc2lvbl9zdHI6IENvbXBvbmVudCB2ZXJzaW9uIGluZm9ybWF0aW9uCiYjNDM7ICovCiYjNDM7c3RydWN0IHBkc19jb3JlX2NvbXBvbmVudF90YmwgewomIzQzOwlfX2xlMzIgY29tcGFyaXNvbl9zdGFtcDsKJiM0MzsJX19sZTE2IGNsYXNzaWZpY2F0aW9uOwomIzQzOwlfX2xlMTYgaWRlbnRpZmllcjsKJiM0MzsJdTggICAgIHRyYW5zZmVyX2ZsYWc7CiYjNDM7CXU4ICAgICB2ZXJzaW9uX3N0cl90eXBlOwomIzQzOwl1OCAgICAgdmVyc2lvbl9zdHJfbGVuOwomIzQzOwl1OCAgICAgdmVyc2lvbl9zdHJbXTsKJiM0Mzt9OwomIzQzOwomIzQzOy8qKgomIzQzOyAqIHN0cnVjdCBwZHNfY29yZV9zZW5kX2NvbXBvbmVudF90YmxfY21kIC0gU2VuZCBjb21wb25lbnQgdGFibGUgY29tbWFuZAomIzQzOyAqIEBvcGNvZGU6IE9wY29kZSBQRFNfQ09SRV9DTURfU0VORF9DT01QT05FTlRfVEJMCiYjNDM7ICogQHZlcjogRHJpdmVyJiMzOTtzIG1heCBzdXBwb3J0IHZlcnNpb24gb2YgdGhpcyBjb21tYW5kCiYjNDM7ICogQHNsb3RfaWQ6IGVudW0gcGRzX2NvcmVfZndfc2xvdAomIzQzOyAqIEByc3ZkOiBXb3JkIGJvdW5kYXJ5IHBhZGRpbmcKJiM0MzsgKgomIzQzOyAqIEV4cGVjdHMgdG8gZmluZCBjb21wb25lbnQgdGFibGUgaW5mbyAoc3RydWN0IHBkc19jb3JlX2NvbXBvbmVudF90YmwpCiYjNDM7ICogaW4gY21kX3JlZ3MtJmd0O2RhdGEuICBEcml2ZXIgc2hvdWxkIGtlZXAgdGhlIGRldmNtZCBpbnRlcmZhY2UgbG9ja2VkCiYjNDM7ICogd2hpbGUgcHJlcGFyaW5nIHRoZSBjb21wb25lbnQgdGFibGUgaW5mby4KJiM0MzsgKi8KJiM0MztzdHJ1Y3QgcGRzX2NvcmVfc2VuZF9jb21wb25lbnRfdGJsX2NtZCB7CiYjNDM7CXU4IG9wY29kZTsKJiM0MzsJdTggdmVyOwomIzQzOwl1OCBzbG90X2lkOwomIzQzOwl1OCByc3ZkOwomIzQzO307CiYjNDM7CiYjNDM7ZW51bSBwZHNfY29yZV9jb21wb25lbnRfcmVzcF9jb2RlIHsKJiM0MzsJUERTX0NPUkVfQ09NUE9ORU5UX1ZBTElEID0gMHgwLAomIzQzOwlQRFNfQ09SRV9DT01QT05FTlRfU1RBTVBfSURFTlRJQ0FMID0gMHgxLAomIzQzOwlQRFNfQ09SRV9DT01QT05FTlRfU1RBTVBfTE9XRVIgPSAweDIsCiYjNDM7CVBEU19DT1JFX0NPTVBPTkVOVF9TVEFNUF9PUl9WRVJTSU9OX0lOVkFMSUQgPSAweDMsCiYjNDM7CVBEU19DT1JFX0NPTVBPTkVOVF9DT05GTElDVCA9IDB4NCwKJiM0MzsJUERTX0NPUkVfQ09NUE9ORU5UX1BSRVJFUVNfTk9UX01FVCA9IDB4NSwKJiM0MzsJUERTX0NPUkVfQ09NUE9ORU5UX05PVF9TVVBQT1JURUQgPSAweDYsCiYjNDM7CVBEU19DT1JFX0NPTVBPTkVOVF9GV19UWVBFX0lOVkFMSUQgPSAweGQwLAomIzQzO307CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogc3RydWN0IHBkc19jb3JlX3NlbmRfY29tcG9uZW50X3RibF9jb21wIC0gU2VuZCBjb21wb25lbnQgdGFibGUgY29tcGxldGlvbgomIzQzOyAqIEBzdGF0dXM6IFN0YXR1cyBvZiB0aGUgY29tbWFuZCAoZW51bSBwZHNfY29yZV9zdGF0dXNfY29kZSkKJiM0MzsgKiBAdmVyOiBEZXZpY2UmIzM5O3MgbWF4IHN1cHBvcnRlZCB2ZXJzaW9uIG9mIHRoaXMgY29tbWFuZAomIzQzOyAqIEBjb21wbGV0aW9uX2NvZGU6IENvbXBvbmVudCBjb21wbGV0aW9uIGNvZGUKJiM0MzsgKiBAcmVzcG9uc2U6IENvbXBvbmVudCByZXNwb25zZQomIzQzOyAqIEByZXNwb25zZV9jb2RlOiBDb21wb25lbnQgcmVzcG9uc2UgY29kZQomIzQzOyAqIEBzbG90X2lkOiBBY3R1YWwgc2xvdF9pZCBvZiB0aGUgY29tcG9uZW50IChlbnVtIHBkc19jb3JlX2Z3X3Nsb3QpCiYjNDM7ICogQHJzdmQ6IFdvcmQgYm91bmRhcnkgcGFkZGluZwomIzQzOyAqLwomIzQzO3N0cnVjdCBwZHNfY29yZV9zZW5kX2NvbXBvbmVudF90YmxfY29tcCB7CiYjNDM7CXU4IHN0YXR1czsKJiM0MzsJdTggdmVyOwomIzQzOwl1OCBjb21wbGV0aW9uX2NvZGU7CiYjNDM7CXU4IHJlc3BvbnNlOwomIzQzOwl1OCByZXNwb25zZV9jb2RlOwomIzQzOwl1OCBzbG90X2lkOwomIzQzOwl1OCByc3ZkWzJdOwomIzQzO307CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogZW51bSBwZHNfY29yZV9zZW5kX2NvbXBvbmVudF9vcCAtIFBEU19DT1JFX0NNRF9TRU5EX0NPTVBPTkVOVCBvcGVyYXRpb24KJiM0MzsgKiBAUERTX0NPUkVfU0VORF9DT01QT05FTlRfU1RBUlQ6IEluaXRpYWwgb3BlcmF0aW9uIHRvIHN0YXJ0IHRyYW5zZmVyCiYjNDM7ICogQFBEU19DT1JFX1NFTkRfQ09NUE9ORU5UX1NUQVRVUzogU3Vic2VxdWVudCBjYWxscyB0byBjaGVjayBvbiBzdGF0dXMKJiM0MzsgKi8KJiM0MztlbnVtIHBkc19jb3JlX3NlbmRfY29tcG9uZW50X29wIHsKJiM0MzsJUERTX0NPUkVfU0VORF9DT01QT05FTlRfU1RBUlQgPSAwLAomIzQzOwlQRFNfQ09SRV9TRU5EX0NPTVBPTkVOVF9TVEFUVVMgPSAxLAomIzQzO307CiYjNDM7CiYjNDM7I2RlZmluZSBQRFNfQ09SRV9GV19DT01QT05FTlRfSURfSU5WQUxJRCAweEZGRkYKJiM0MzsvKioKJiM0MzsgKiBzdHJ1Y3QgcGRzX2NvcmVfZmxhc2hfY29tcG9uZW50IC0gQ29tcG9uZW50IGRldGFpbHMKJiM0MzsgKiBAY29tcGFyaXNvbl9zdGFtcDogQ29tcGFyaXNvbiBzdGFtcCB1c2VkIGZvciBjb21wb25lbnQgdmVyc2lvbiBjaGVja3MKJiM0MzsgKiBAaW1hZ2Vfc2l6ZTogQ29tcG9uZW50IGltYWdlIHNpemUKJiM0MzsgKiBAY2xhc3NpZmljYXRpb246IFZlbmRvciBzcGVjaWZpYyBjbGFzc2lmaWNhdGlvbiBpbmZvCiYjNDM7ICogQGlkZW50aWZpZXI6IENvbXBvbmVudCYjMzk7cyBJRAomIzQzOyAqIEBvcHRpb25zOiBDb21wb25lbnQgb3B0aW9ucwomIzQzOyAqIEByc3ZkOiBXb3JkIGJvdW5kYXJ5IHBhZGRpbmcKJiM0MzsgKiBAdmVyc2lvbl9zdHJfdHlwZTogVGhlIHR5cGVzIG9mIHN0cmluZ3MgdXNlZAomIzQzOyAqIEB2ZXJzaW9uX3N0cl9sZW46IExlbmd0aCBvZiBAdmVyc2lvbl9zdHIKJiM0MzsgKiBAdmVyc2lvbl9zdHI6IENvbXBvbmVudCB2ZXJzaW9uIGluZm9ybWF0aW9uCiYjNDM7ICovCiYjNDM7c3RydWN0IHBkc19jb3JlX2ZsYXNoX2NvbXBvbmVudCB7CiYjNDM7CV9fbGUzMiBjb21wYXJpc29uX3N0YW1wOwomIzQzOwlfX2xlMzIgaW1hZ2Vfc2l6ZTsKJiM0MzsJX19sZTE2IGNsYXNzaWZpY2F0aW9uOwomIzQzOwlfX2xlMTYgaWRlbnRpZmllcjsKJiM0MzsJX19sZTE2IG9wdGlvbnM7CiYjNDM7CXU4IHJzdmRbM107CiYjNDM7CXU4IHZlcnNpb25fc3RyX3R5cGU7CiYjNDM7CXU4IHZlcnNpb25fc3RyX2xlbjsKJiM0MzsJdTggdmVyc2lvbl9zdHJbXTsKJiM0Mzt9OwomIzQzOwomIzQzOy8qKgomIzQzOyAqIHN0cnVjdCBwZHNfY29yZV9zZW5kX2NvbXBvbmVudF9jbWQgLSBTZW5kIGNvbXBvbmVudCBjb21tYW5kCiYjNDM7ICogQG9wY29kZTogT3Bjb2RlIFBEU19DT1JFX0NNRF9TRU5EX0NPTVBPTkVOVAomIzQzOyAqIEB2ZXI6IERyaXZlciYjMzk7cyBtYXggc3VwcG9ydGVkIHZlcnNpb24gb2YgdGhpcyBjb21tYW5kCiYjNDM7ICogQHNsb3RfaWQ6IGVudW0gcGRzX2NvcmVfZndfc2xvdAomIzQzOyAqIEBvcGVyYXRpb246IGVudW0gcGRzX2NvcmVfc2VuZF9jb21wb25lbnRfb3AKJiM0MzsgKiBAb2Zmc2V0OiBPZmZzZXQgaW50byB0aGUgY29tcG9uZW50LCBub24temVybyBpZiBtdWx0aXBsZSBjb21tYW5kcwomIzQzOyAqCSAgICBhcmUgbmVlZGVkIGZvciBhIHNpbmdsZSBjb21wb25lbnQKJiM0MzsgKiBAZGF0YV9sZW46IExlbmd0aCBvZiB0aGlzIHBhcnQgb2YgdGhlIGNvbXBvbmVudCBzdG9yZWQgYXQgQGRhdGFfcGEKJiM0MzsgKiBAcnN2ZDogV29yZCBib3VuZGFyeSBwYWRkaW5nCiYjNDM7ICogQGRhdGFfcGE6IERNQSBhZGRyZXNzIG9mIHRoZSBjb21wb25lbnQKJiM0MzsgKgomIzQzOyAqIEEgY29tcG9uZW50IG1heSBiZSB0b28gbGFyZ2UgdG8gc3RvcmUgaW4gYSBzaW5nbGUgYnVmZmVyLCBzbyBtdWx0aXBsZQomIzQzOyAqIFBEU19DT1JFX0NNRF9TRU5EX0NPTVBPTkVOVCBkZXZjbWRzIG1heSBiZSBuZWVkZWQuCiYjNDM7ICoKJiM0MzsgKiBFeHBlY3RzIHRvIGZpbmQgZmxhc2ggY29tcG9uZW50IGluZm8gKHN0cnVjdCBwZHNfY29yZV9mbGFzaF9jb21wb25lbnQpCiYjNDM7ICogaW4gY21kX3JlZ3MtJmd0O2RhdGEuIERyaXZlciBzaG91bGQga2VlcCB0aGUgZGV2Y21kIGludGVyZmFjZSBsb2NrZWQKJiM0MzsgKiB3aGlsZSBwcmVwYXJpbmcgYW5kIHNlbmRpbmcgdGhlIGZsYXNoIGNvbXBvbmVudCBpbmZvLgomIzQzOyAqLwomIzQzO3N0cnVjdCBwZHNfY29yZV9zZW5kX2NvbXBvbmVudF9jbWQgewomIzQzOwl1OCBvcGNvZGU7CiYjNDM7CXU4IHZlcjsKJiM0MzsJdTggc2xvdF9pZDsKJiM0MzsJdTggb3BlcmF0aW9uOwomIzQzOwlfX2xlMzIgb2Zmc2V0OwomIzQzOwlfX2xlMzIgZGF0YV9sZW47CiYjNDM7CXU4IHJzdmRbNF07CiYjNDM7CV9fbGU2NCBkYXRhX3BhOwomIzQzO307CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogc3RydWN0IHBkc19jb3JlX3NlbmRfY29tcG9uZW50X2NvbXAgLSBTZW5kIGNvbXBvbmVudCBjb21wbGV0aW9uCiYjNDM7ICogQHN0YXR1czogU3RhdHVzIG9mIHRoZSBjb21tYW5kIChlbnVtIHBkc19jb3JlX3N0YXR1c19jb2RlKQomIzQzOyAqIEB2ZXI6IERldmljZSYjMzk7cyBtYXggc3VwcG9ydGVkIHZlcnNpb24gb2YgdGhpcyBjb21tYW5kCiYjNDM7ICogQGNvbXBsZXRpb25fY29kZTogQ29tcGxldGlvbiBjb2RlCiYjNDM7ICogQGNvbXBhdF9yZXNwb25zZTogQ29tcGF0aWJpbGl0eSByZXNwb25zZSAoMCA9IENvbXBvbmVudCBjYW4gYmUgdXBkYXRlZCkKJiM0MzsgKiBAY29tcGF0X3Jlc3BvbnNlX2NvZGU6IENvbXBhdGliaWxpdHkgcmVzcG9uc2UgY29kZQomIzQzOyAqIEByc3ZkOiBXb3JkIGJvdW5kYXJ5IHBhZGRpbmcKJiM0MzsgKi8KJiM0MztzdHJ1Y3QgcGRzX2NvcmVfc2VuZF9jb21wb25lbnRfY29tcCB7CiYjNDM7CXU4IHN0YXR1czsKJiM0MzsJdTggdmVyOwomIzQzOwl1OCBjb21wbGV0aW9uX2NvZGU7CiYjNDM7CXU4IGNvbXBhdF9yZXNwb25zZTsKJiM0MzsJdTggY29tcGF0X3Jlc3BvbnNlX2NvZGU7CiYjNDM7CXU4IHJzdmRbM107CiYjNDM7fTsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBlbnVtIHBkc19jb3JlX2Z3X2NvbXBvbmVudF90eXBlIC0gRmlybXdhcmUgY29tcG9uZW50IHR5cGUKJiM0MzsgKiBAUERTX0NPUkVfRldfVFlQRV9VTktOT1dOOiBVbmtub3duIGNvbXBvbmVudCB0eXBlCiYjNDM7ICogQFBEU19DT1JFX0ZXX1RZUEVfTUFJTjogTWFpbiBmaXJtd2FyZQomIzQzOyAqIEBQRFNfQ09SRV9GV19UWVBFX0JPT1Q6IEJvb3QgbG9hZGVyCiYjNDM7ICogQFBEU19DT1JFX0ZXX1RZUEVfQ1BMRDogQ1BMRCBmaXJtd2FyZQomIzQzOyAqIEBQRFNfQ09SRV9GV19UWVBFX1NFQ1VSRTogU2VjdXJlIGZpcm13YXJlCiYjNDM7ICogQFBEU19DT1JFX0ZXX1RZUEVfRlBHQTogRlBHQSBjb25maWd1cmF0aW9uCiYjNDM7ICogQFBEU19DT1JFX0ZXX1RZUEVfU1VDX01BSU46IFN5c3RlbSBVbml0IENvbnRyb2xsZXIgZmlybXdhcmUKJiM0MzsgKiBAUERTX0NPUkVfRldfVFlQRV9TVUNfQk9PVDogU3lzdGVtIFVuaXQgQ29udHJvbGxlciBib290bG9hZGVyCiYjNDM7ICogQFBEU19DT1JFX0ZXX1RZUEVfVUJPT1Q6IFUtQm9vdCBib290bG9hZGVyCiYjNDM7ICoKJiM0MzsgKiBHb2xkL3JlY292ZXJ5IHZhcmlhbnRzIGFyZSBpZGVudGlmaWVkIGJ5IHNsb3RfaWQgPT0gUERTX0NPUkVfRldfU0xPVF9HT0xECiYjNDM7ICogYW5kIHJlcG9ydGVkIHdpdGggYSAmIzM0Oy5nb2xkJiMzNDsgc3VmZml4IChlLmcuLCBmdy5nb2xkKS4KJiM0MzsgKi8KJiM0MztlbnVtIHBkc19jb3JlX2Z3X2NvbXBvbmVudF90eXBlIHsKJiM0MzsJUERTX0NPUkVfRldfVFlQRV9VTktOT1dOICAgPSAwLAomIzQzOwlQRFNfQ09SRV9GV19UWVBFX01BSU4gICAgICA9IDEsCiYjNDM7CVBEU19DT1JFX0ZXX1RZUEVfQk9PVCAgICAgID0gMiwKJiM0MzsJUERTX0NPUkVfRldfVFlQRV9DUExEICAgICAgPSAzLAomIzQzOwlQRFNfQ09SRV9GV19UWVBFX1NFQ1VSRSAgICA9IDQsCiYjNDM7CVBEU19DT1JFX0ZXX1RZUEVfRlBHQSAgICAgID0gNSwKJiM0MzsJUERTX0NPUkVfRldfVFlQRV9TVUNfTUFJTiAgPSA2LAomIzQzOwlQRFNfQ09SRV9GV19UWVBFX1NVQ19CT09UICA9IDcsCiYjNDM7CVBEU19DT1JFX0ZXX1RZUEVfVUJPT1QgICAgID0gOCwKJiM0Mzt9OwomIzQzOwomIzQzOy8qKgomIzQzOyAqIGVudW0gcGRzX2NvcmVfY29tcG9uZW50X2luZm9fZmxhZ3MgLSBDb21wb25lbnQgaW5mbyBmbGFncwomIzQzOyAqIEBQRFNfQ09SRV9GV19DT01QT05FTlRfSU5GT19GX1JVTk5JTkc6IENvbXBvbmVudCBpcyBjdXJyZW50bHkgcnVubmluZwomIzQzOyAqIEBQRFNfQ09SRV9GV19DT01QT05FTlRfSU5GT19GX1NUQVJUVVA6IENvbXBvbmVudCB2ZXJzaW9uIG9uIG5leHQgRlcgYm9vdAomIzQzOyAqIEBQRFNfQ09SRV9GV19DT01QT05FTlRfSU5GT19GX0ZJWEVEOiBDb21wb25lbnQgaXMgZml4ZWQgYW5kIGNhbm5vdCBiZSB1cGRhdGVkCiYjNDM7ICogQFBEU19DT1JFX0ZXX0NPTVBPTkVOVF9JTkZPX0ZfVVBEQVRFX0JZX05BTUU6IENvbXBvbmVudCBjYW4gYmUgdXBkYXRlZAomIzQzOyAqCWJ5IG5hbWUKJiM0MzsgKi8KJiM0MztlbnVtIHBkc19jb3JlX2NvbXBvbmVudF9pbmZvX2ZsYWdzIHsKJiM0MzsJUERTX0NPUkVfRldfQ09NUE9ORU5UX0lORk9fRl9SVU5OSU5HID0gQklUKDApLAomIzQzOwlQRFNfQ09SRV9GV19DT01QT05FTlRfSU5GT19GX1NUQVJUVVAgPSBCSVQoMSksCiYjNDM7CVBEU19DT1JFX0ZXX0NPTVBPTkVOVF9JTkZPX0ZfRklYRUQgPSBCSVQoMiksCiYjNDM7CVBEU19DT1JFX0ZXX0NPTVBPTkVOVF9JTkZPX0ZfVVBEQVRFX0JZX05BTUUgPSBCSVQoMyksCiYjNDM7fTsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBzdHJ1Y3QgcGRzX2NvcmVfZndfY29tcG9uZW50X2luZm8gLSBHRVRfQ09NUE9ORU5UX0lORk8gZW50cnkKJiM0MzsgKiBAbmFtZTogQ29tcG9uZW50JiMzOTtzIG5hbWUKJiM0MzsgKiBAY29tcG9uZW50X3R5cGU6IGVudW0gcGRzX2NvcmVfZndfY29tcG9uZW50X3R5cGUKJiM0MzsgKiBAcnN2ZDogV29yZCBib3VuZGFyeSBwYWRkaW5nCiYjNDM7ICogQGZsYWdzOiBlbnVtIHBkc19jb3JlX2NvbXBvbmVudF9pbmZvX2ZsYWdzCiYjNDM7ICogQGlkZW50aWZpZXI6IENvbXBvbmVudCYjMzk7cyBpZGVudGlmaWVyCiYjNDM7ICogQHNsb3RfaWQ6IENvbXBvbmVudCYjMzk7cyBzbG90IGlkZW50aWZpZXIKJiM0MzsgKiBAdmVyc2lvbjogQ29tcG9uZW50JiMzOTtzIHZlcnNpb24KJiM0MzsgKi8KJiM0MztzdHJ1Y3QgcGRzX2NvcmVfZndfY29tcG9uZW50X2luZm8gewomIzQzOyNkZWZpbmUgUERTX0NPUkVfRldfQ09NUE9ORU5UX05BTUVfQlVGTEVOIDI0CiYjNDM7CWNoYXIgbmFtZVtQRFNfQ09SRV9GV19DT01QT05FTlRfTkFNRV9CVUZMRU5dOwomIzQzOwl1OCBjb21wb25lbnRfdHlwZTsKJiM0MzsJdTggcnN2ZFszXTsKJiM0MzsJX19sZTE2IGZsYWdzOwomIzQzOwl1OCBpZGVudGlmaWVyOwomIzQzOwl1OCBzbG90X2lkOwomIzQzOyNkZWZpbmUgUERTX0NPUkVfRldfQ09NUE9ORU5UX1ZFUl9CVUZMRU4gMzIKJiM0MzsJY2hhciB2ZXJzaW9uW1BEU19DT1JFX0ZXX0NPTVBPTkVOVF9WRVJfQlVGTEVOXTsKJiM0Mzt9OwomIzQzOwomIzQzOyNkZWZpbmUgUERTX0NPUkVfRldfQ09NUE9ORU5UX0xJU1RfTEVOCSgoUERTX1BBR0VfU0laRSAtIDgpIC8gXAomIzQzOwkJc2l6ZW9mKHN0cnVjdCBwZHNfY29yZV9md19jb21wb25lbnRfaW5mbykpCiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogc3RydWN0IHBkc19jb3JlX2NvbXBvbmVudF9saXN0X2luZm8gLSBHRVRfQ09NUE9ORU5UX0lORk8gY29tcGxldGlvbiBkYXRhCiYjNDM7ICogQG51bV9jb21wb25lbnRzOiBOdW1iZXIgb2YgdmFsaWQgY29tcG9uZW50cwomIzQzOyAqIEByc3ZkOiBXb3JkIGJvdW5kYXJ5IHBhZGRpbmcKJiM0MzsgKiBAaW5mbzogTGlzdCBvZiB2YWxpZCBjb21wb25lbnRzCiYjNDM7ICovCiYjNDM7c3RydWN0IHBkc19jb3JlX2NvbXBvbmVudF9saXN0X2luZm8gewomIzQzOwl1OCBudW1fY29tcG9uZW50czsKJiM0MzsJdTggcnN2ZFs3XTsKJiM0MzsJc3RydWN0IHBkc19jb3JlX2Z3X2NvbXBvbmVudF9pbmZvIGluZm9bUERTX0NPUkVfRldfQ09NUE9ORU5UX0xJU1RfTEVOXTsKJiM0Mzt9OwomIzQzOwomIzQzOy8qKgomIzQzOyAqIHN0cnVjdCBwZHNfY29yZV9nZXRfY29tcG9uZW50X2luZm9fY21kIC0gR0VUX0NPTVBPTkVOVF9JTkZPIGNvbW1hbmQKJiM0MzsgKiBAb3Bjb2RlOiBQRFNfQ09SRV9DTURfR0VUX0NPTVBPTkVOVF9JTkZPCiYjNDM7ICogQHZlcjogRHJpdmVyJiMzOTtzIG1heCBzdXBwb3J0ZWQgdmVyc2lvbiBvZiB0aGlzIGNvbW1hbmQKJiM0MzsgKiBAZGF0YV9sZW46IExlbmd0aCBvZiBkYXRhIGF0IGRhdGFfcGEKJiM0MzsgKiBAcnN2ZDogV29yZCBib3VuZGFyeSBwYWRkaW5nCiYjNDM7ICogQGRhdGFfcGE6IERNQSBhZGRyZXNzIG9mIGRhdGEKJiM0MzsgKgomIzQzOyAqIEZXIHBvcHVsYXRlcyBzdHJ1Y3QgcGRzX2NvcmVfY29tcG9uZW50X2xpc3RfaW5mbyBwb2ludGVkIHRvIGJ5IEBkYXRhX3BhCiYjNDM7ICovCiYjNDM7c3RydWN0IHBkc19jb3JlX2dldF9jb21wb25lbnRfaW5mb19jbWQgewomIzQzOwl1OCBvcGNvZGU7CiYjNDM7CXU4IHZlcjsKJiM0MzsJX19sZTE2IGRhdGFfbGVuOwomIzQzOwl1OCByc3ZkWzRdOwomIzQzOwlfX2xlNjQgZGF0YV9wYTsKJiM0Mzt9OwomIzQzOwomIzQzOy8qKgomIzQzOyAqIHN0cnVjdCBwZHNfY29yZV9nZXRfY29tcG9uZW50X2luZm9fY29tcCAtIEdFVF9DT01QT05FTlRfSU5GTyBjb21wbGV0aW9uCiYjNDM7ICogQHN0YXR1czogZW51bSBwZHNfY29yZV9zdGF0dXNfY29kZQomIzQzOyAqIEB2ZXI6IERldmljZSYjMzk7cyBtYXggc3VwcG9ydGVkIHZlcnNpb24gb2YgdGhpcyBjb21tYW5kCiYjNDM7ICogQHJzdmQ6IFdvcmQgYm91bmRhcnkgcGFkZGluZwomIzQzOyAqLwomIzQzO3N0cnVjdCBwZHNfY29yZV9nZXRfY29tcG9uZW50X2luZm9fY29tcCB7CiYjNDM7CXU4IHN0YXR1czsKJiM0MzsJdTggdmVyOwomIzQzOwl1OCByc3ZkWzJdOwomIzQzO307CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogc3RydWN0IHBkc19jb3JlX2ZpbmFsaXplX3VwZGF0ZV9jbWQgLSBGSU5BTElaRV9VUERBVEUgY29tbWFuZAomIzQzOyAqIEBvcGNvZGU6IFBEU19DT1JFX0NNRF9GSU5BTElaRV9VUERBVEUKJiM0MzsgKiBAdmVyOiBEcml2ZXImIzM5O3MgbWF4IHN1cHBvcnQgdmVyc2lvbiBvZiB0aGlzIGNvbW1hbmQKJiM0MzsgKiBAcnN2ZDogV29yZCBib3VuZGFyeSBwYWRkaW5nCiYjNDM7ICoKJiM0MzsgKiBEcml2ZXIgc2VuZHMgYXQgdGhlIGVuZCBvZiB1cGRhdGluZyBhbGwgY29tcG9uZW50cyB0byBmaW5hbGl6ZSB0aGUgdXBkYXRlCiYjNDM7ICovCiYjNDM7c3RydWN0IHBkc19jb3JlX2ZpbmFsaXplX3VwZGF0ZV9jbWQgewomIzQzOwl1OCBvcGNvZGU7CiYjNDM7CXU4IHZlcjsKJiM0MzsJdTggcnN2ZFsyXTsKJiM0Mzt9OwomIzQzOwomIzQzOy8qKgomIzQzOyAqIHN0cnVjdCBwZHNfY29yZV9maW5hbGl6ZV91cGRhdGVfY29tcCAtIEZJTkFMSVpFX1VQREFURSBjb21wbGV0aW9uCiYjNDM7ICogQHN0YXR1czogZW51bSBwZHNfY29yZV9zdGF0dXNfY29kZQomIzQzOyAqIEB2ZXI6IERldmljZSYjMzk7cyBtYXggc3VwcG9ydGVkIHZlcnNpb24gb2YgdGhpcyBjb21tYW5kCiYjNDM7ICogQHJzdmQ6IFdvcmQgYm91bmRhcnkgcGFkZGluZwomIzQzOyAqLwomIzQzO3N0cnVjdCBwZHNfY29yZV9maW5hbGl6ZV91cGRhdGVfY29tcCB7CiYjNDM7CXU4IHN0YXR1czsKJiM0MzsJdTggdmVyOwomIzQzOwl1OCByc3ZkWzJdOwomIzQzO307CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogc3RydWN0IHBkc19jb3JlX21hdGNoX3JlY29yZF9kZXNjX2NtZCAtIE1BVENIX1JFQ09SRF9ERVNDIGNvbW1hbmQKJiM0MzsgKiBAb3Bjb2RlOiBQRFNfQ09SRV9DTURfTUFUQ0hfUkVDT1JEX0RFU0MKJiM0MzsgKiBAdmVyOiBEcml2ZXImIzM5O3MgbWF4IHN1cHBvcnRlZCB2ZXJzaW9uIG9mIHRoaXMgY29tbWFuZAomIzQzOyAqIEB0eXBlOiBQTERNIERlc2NyaXB0b3IgSWRlbnRpZmllciBUeXBlCiYjNDM7ICogQHNpemU6IExlbmd0aCBvZiB0aGUgRGVzY3JpcHRvciBJZGVudGlmaWVyIFZhbHVlCiYjNDM7ICogQHJzdmQ6IFdvcmQgYm91bmRhcnkgcGFkZGluZwomIzQzOyAqCiYjNDM7ICogRXhwZWN0cyB0byBmaW5kIHRoZSBEZXNjcmlwdG9yIElkZW50aWZpZXIgRGF0YSBpbiBjbWRfcmVncy0mZ3Q7ZGF0YS4gRHJpdmVyCiYjNDM7ICogc2hvdWxkIGtlZXAgdGhlIGRldmNtZCBpbnRlcmZhY2UgbG9ja2VkIHdoaWxlIHByZXBhcmluZyBhbmQgc2VuZGluZyB0aGlzCiYjNDM7ICogY29tbWFuZC4KJiM0MzsgKi8KJiM0MztzdHJ1Y3QgcGRzX2NvcmVfbWF0Y2hfcmVjb3JkX2Rlc2NfY21kIHsKJiM0MzsJdTggb3Bjb2RlOwomIzQzOwl1OCB2ZXI7CiYjNDM7CV9fbGUxNiB0eXBlOwomIzQzOwlfX2xlMTYgc2l6ZTsKJiM0MzsJdTggcnN2ZFsyXTsKJiM0Mzt9OwomIzQzOwomIzQzOy8qKgomIzQzOyAqIHN0cnVjdCBwZHNfY29yZV9tYXRjaF9yZWNvcmRfZGVzY19jb21wIC0gTUFUQ0hfUkVDT1JEX0RFU0MgY29tcGxldGlvbgomIzQzOyAqIEBzdGF0dXM6IGVudW0gcGRzX2NvcmVfc3RhdHVzX2NvZGUKJiM0MzsgKiBAdmVyOiBEZXZpY2UmIzM5O3MgbWF4IHN1cHBvcnRlZCB2ZXJzaW9uIG9mIHRoaXMgY29tbWFuZAomIzQzOyAqIEBtYXRjaDogV2hldGhlciBvciBub3QgdGhlIFJlY29yZCBEZXNjcmlwdG9yIG1hdGNoZXMgdGhlIGRldmljZQomIzQzOyAqIEByc3ZkOiBXb3JkIGJvdW5kYXJ5IHBhZGRpbmcKJiM0MzsgKgomIzQzOyAqIFdoZW4gc3RhdHVzIGlzIFBEU19SQ19TVUNDRVNTLCB0aGVuIEBtYXRjaCBpcyB2YWxpZCwgb3RoZXJ3aXNlIGl0JiMzOTtzCiYjNDM7ICogdW5kZWZpbmVkLgomIzQzOyAqLwomIzQzO3N0cnVjdCBwZHNfY29yZV9tYXRjaF9yZWNvcmRfZGVzY19jb21wIHsKJiM0MzsJdTggc3RhdHVzOwomIzQzOwl1OCB2ZXI7CiYjNDM7CXU4IG1hdGNoOwomIzQzOwl1OCByc3ZkOwomIzQzO307CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogZW51bSBwZHNfY29yZV9ob3N0X21lbV9vcGVyIC0gSE9TVF9NRU0gc3ViLW9wZXJhdGlvbnMKJiM0MzsgKiBAUERTX0NPUkVfSE9TVF9NRU1fR0VUX0NPVU5UOiBRdWVyeSBudW1iZXIgb2YgbWVtb3J5IHJlcXVlc3RzCiYjNDM7ICogQFBEU19DT1JFX0hPU1RfTUVNX1FVRVJZOiAgICAgUXVlcnkgZGV0YWlscyBvZiBhIG1lbW9yeSByZXF1ZXN0CiYjNDM7ICogQFBEU19DT1JFX0hPU1RfTUVNX0FERDogICAgICAgUHJvdmlkZSBhbGxvY2F0ZWQgbWVtb3J5IHRvIGZpcm13YXJlCiYjNDM7ICogQFBEU19DT1JFX0hPU1RfTUVNX0RFTDogICAgICAgTm90aWZ5IGZpcm13YXJlIG9mIG1lbW9yeSBkZWFsbG9jYXRpb24KJiM0MzsgKi8KJiM0MztlbnVtIHBkc19jb3JlX2hvc3RfbWVtX29wZXIgewomIzQzOwlQRFNfQ09SRV9IT1NUX01FTV9HRVRfQ09VTlQJPSAwLAomIzQzOwlQRFNfQ09SRV9IT1NUX01FTV9RVUVSWQkJPSAxLAomIzQzOwlQRFNfQ09SRV9IT1NUX01FTV9BREQJCT0gMiwKJiM0MzsJUERTX0NPUkVfSE9TVF9NRU1fREVMCQk9IDMsCiYjNDM7fTsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBzdHJ1Y3QgcGRzX2NvcmVfaG9zdF9tZW1fY21kIC0gSE9TVF9NRU0gY29tbWFuZAomIzQzOyAqIEBvcGNvZGU6ICAgICBPcGNvZGUgUERTX0NPUkVfQ01EX0hPU1RfTUVNCiYjNDM7ICogQG9wZXI6ICAgICAgIE9wZXJhdGlvbiAoZW51bSBwZHNfY29yZV9ob3N0X21lbV9vcGVyKQomIzQzOyAqIEBpbmRleDogICAgICBNZW1vcnkgcmVxdWVzdCBpbmRleCAoR0VUX0NPVU5UOiBtYXhfY291bnQsIFFVRVJZOiBpbmRleCkKJiM0MzsgKiBAdGFnOiAgICAgICAgVGFnIGZvciB0aGlzIG1lbW9yeSByZXF1ZXN0IChBREQvREVMKQomIzQzOyAqIEByZWFzb246ICAgICBSZWFzb24gZm9yIGRlbGV0aW9uIChERUwgb25seSkKJiM0MzsgKiBAcnN2ZDogICAgICAgUmVzZXJ2ZWQKJiM0MzsgKiBAbWF4X2NvbnRpZzogTWF4aW11bSBjb250aWd1b3VzIG1lbW9yeSBzaXplIChHRVRfQ09VTlQgb25seSkKJiM0MzsgKiBAc2l6ZTogICAgICAgU2l6ZSBvZiBtZW1vcnkgaW4gYnl0ZXMgKEFERCBvbmx5KQomIzQzOyAqIEBidWZfcGE6ICAgICBETUEgYWRkcmVzcyBvZiBtZW1vcnkgKEFERCBvbmx5KQomIzQzOyAqCiYjNDM7ICogVW5pZmllZCBjb21tYW5kIGZvciBhbGwgaG9zdCBtZW1vcnkgb3BlcmF0aW9ucy4gRmllbGRzIGFyZSByZXVzZWQKJiM0MzsgKiBhY3Jvc3Mgb3BlcmF0aW9ucyB0byBtaW5pbWl6ZSBvcGNvZGUgc3BhY2UgdXNhZ2UuCiYjNDM7ICovCiYjNDM7c3RydWN0IHBkc19jb3JlX2hvc3RfbWVtX2NtZCB7CiYjNDM7CXU4ICAgICBvcGNvZGU7CiYjNDM7CXU4ICAgICBvcGVyOwomIzQzOwlfX2xlMTYgaW5kZXg7CiYjNDM7CV9fbGUxNiB0YWc7CiYjNDM7CXU4ICAgICByZWFzb247CiYjNDM7CXU4ICAgICByc3ZkOwomIzQzOwlfX2xlMzIgbWF4X2NvbnRpZzsKJiM0MzsJX19sZTMyIHNpemU7CiYjNDM7CV9fbGU2NCBidWZfcGE7CiYjNDM7fTsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBzdHJ1Y3QgcGRzX2NvcmVfaG9zdF9tZW1fY29tcCAtIEhPU1RfTUVNIGNvbXBsZXRpb24KJiM0MzsgKiBAc3RhdHVzOiAgICAgICBTdGF0dXMgb2YgdGhlIGNvbW1hbmQgKGVudW0gcGRzX2NvcmVfc3RhdHVzX2NvZGUpCiYjNDM7ICogQG9wZXI6ICAgICAgICAgT3BlcmF0aW9uIHRoYXQgd2FzIHBlcmZvcm1lZAomIzQzOyAqIEBjb3VudDogICAgICAgIE51bWJlciBvZiBtZW1vcnkgcmVxdWVzdHMgKEdFVF9DT1VOVCkKJiM0MzsgKiBAc2l6ZTogICAgICAgICBTaXplIG9mIG1lbW9yeSByZXF1ZXN0IGluIGJ5dGVzIChRVUVSWSkKJiM0MzsgKiBAdGFnOiAgICAgICAgICBUYWcgZm9yIHRoaXMgbWVtb3J5IHJlcXVlc3QgKFFVRVJZL0RFTCkKJiM0MzsgKiBAcnN2ZDogICAgICAgICBSZXNlcnZlZAomIzQzOyAqLwomIzQzO3N0cnVjdCBwZHNfY29yZV9ob3N0X21lbV9jb21wIHsKJiM0MzsJdTggICAgIHN0YXR1czsKJiM0MzsJdTggICAgIG9wZXI7CiYjNDM7CV9fbGUxNiBjb3VudDsKJiM0MzsJX19sZTMyIHNpemU7CiYjNDM7CV9fbGUxNiB0YWc7CiYjNDM7CXU4ICAgICByc3ZkWzZdOwomIzQzO307CiYjNDM7CiAvKgogICogdW5pb24gcGRzX2NvcmVfZGV2X2NtZCAtIE92ZXJsYXkgb2YgY29yZSBkZXZpY2UgY29tbWFuZCBzdHJ1Y3R1cmVzCiAgKi8KQEAgLTQ2Miw2ICYjNDM7OTE1LDE0IEBAIHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgewogCXN0cnVjdCBwZHNfY29yZV92Zl9zZXRhdHRyX2NtZCAgIHZmX3NldGF0dHI7CiAJc3RydWN0IHBkc19jb3JlX3ZmX2dldGF0dHJfY21kICAgdmZfZ2V0YXR0cjsKIAlzdHJ1Y3QgcGRzX2NvcmVfdmZfY3RybF9jbWQgICAgICB2Zl9jdHJsOwomIzQzOwomIzQzOwlzdHJ1Y3QgcGRzX2NvcmVfZ2V0X2NvbXBvbmVudF9pbmZvX2NtZCBnZXRfY29tcG9uZW50X2luZm87CiYjNDM7CXN0cnVjdCBwZHNfY29yZV9zZW5kX3BrZ19kYXRhX2NtZCAgICAgIHNlbmRfcGtnX2RhdGE7CiYjNDM7CXN0cnVjdCBwZHNfY29yZV9zZW5kX2NvbXBvbmVudF90YmxfY21kIHNlbmRfY29tcG9uZW50X3RibDsKJiM0MzsJc3RydWN0IHBkc19jb3JlX3NlbmRfY29tcG9uZW50X2NtZCAgICAgc2VuZF9jb21wb25lbnQ7CiYjNDM7CXN0cnVjdCBwZHNfY29yZV9maW5hbGl6ZV91cGRhdGVfY21kICAgIGZpbmFsaXplX3VwZGF0ZTsKJiM0MzsJc3RydWN0IHBkc19jb3JlX21hdGNoX3JlY29yZF9kZXNjX2NtZCAgbWF0Y2hfcmVjb3JkX2Rlc2M7CiYjNDM7CXN0cnVjdCBwZHNfY29yZV9ob3N0X21lbV9jbWQgICAgICAgICAgIGhvc3RfbWVtOwogfTsKIAogLyoKQEAgLTQ4MCw2ICYjNDM7OTQxLDE0IEBAIHVuaW9uIHBkc19jb3JlX2Rldl9jb21wIHsKIAlzdHJ1Y3QgcGRzX2NvcmVfdmZfc2V0YXR0cl9jb21wICAgdmZfc2V0YXR0cjsKIAlzdHJ1Y3QgcGRzX2NvcmVfdmZfZ2V0YXR0cl9jb21wICAgdmZfZ2V0YXR0cjsKIAlzdHJ1Y3QgcGRzX2NvcmVfdmZfY3RybF9jb21wICAgICAgdmZfY3RybDsKJiM0MzsKJiM0MzsJc3RydWN0IHBkc19jb3JlX2dldF9jb21wb25lbnRfaW5mb19jb21wIGdldF9jb21wb25lbnRfaW5mbzsKJiM0MzsJc3RydWN0IHBkc19jb3JlX3NlbmRfcGtnX2RhdGFfY29tcCAgICAgIHNlbmRfcGtnX2RhdGE7CiYjNDM7CXN0cnVjdCBwZHNfY29yZV9zZW5kX2NvbXBvbmVudF90YmxfY29tcCBzZW5kX2NvbXBvbmVudF90Ymw7CiYjNDM7CXN0cnVjdCBwZHNfY29yZV9zZW5kX2NvbXBvbmVudF9jb21wICAgICBzZW5kX2NvbXBvbmVudDsKJiM0MzsJc3RydWN0IHBkc19jb3JlX2ZpbmFsaXplX3VwZGF0ZV9jb21wICAgIGZpbmFsaXplX3VwZGF0ZTsKJiM0MzsJc3RydWN0IHBkc19jb3JlX21hdGNoX3JlY29yZF9kZXNjX2NvbXAgIG1hdGNoX3JlY29yZF9kZXNjOwomIzQzOwlzdHJ1Y3QgcGRzX2NvcmVfaG9zdF9tZW1fY29tcCAgICAgICAgICAgaG9zdF9tZW07CiB9OwogCiAvKioKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTA6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzEwNjIKCQkJCQkJCW91dHB1dDogNzYKCQkJCQkJCXRob3VnaHRzOiA1NjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUGF0Y2ggQW5hbHlzaXM6IFBMRE0gRmlybXdhcmUgVXBkYXRlIGZvciBBTUQvUGVuc2FuZG8gQ29yZSBTbWFydE5JQyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCB0aGF0IGFkZHMgUExETSBmaXJtd2FyZSB1cGRhdGUgY2FwYWJpbGl0aWVzIHRvIHRoZSBBTUQvUGVuc2FuZG8gQ29yZSBkZXZpY2UgZmFtaWx5LCBzcGVjaWZpY2FsbHkgdW5kZXIgdGhlIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvYCBkaXJlY3RvcnkuIEl0JiMzOTtzIGFkZGluZyBzdXBwb3J0IGZvciB0aGluZ3MgbGlrZSBnZXR0aW5nIGNvbXBvbmVudCBpbmZvLCBzZW5kaW5nIHBhY2thZ2UgZGF0YSwgc2VuZGluZyBjb21wb25lbnQgdGFibGVzLCBhbmQgZmluYWxpemluZyB0aGUgdXBkYXRlIOKAkyBhbGwgdGhlIFBMRE0tcmVsYXRlZCBkZXZjbWRzLiBQbHVzLCBpdCYjMzk7cyBzZXR0aW5nIHVwIGhvc3QgbWVtb3J5IGFsbG9jYXRpb24gZm9yIHRoZSBmaXJtd2FyZSBpdHNlbGYuCgpCdXQsIGhvbGQgb24gYSBzZWNvbmQuLi4gbGV0IG1lIHJlLXJlYWQgdGhlIHByb21wdC4gSXQmIzM5O3MgbG9va2luZyBmb3IgY29uZGl0aW9ucyB0byAqbm90KiBmdXp6LiBBaCwgdGhlcmUgaXQgaXMhICYjMzQ7Q29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiYjMzQ7IEJpbmdvLgoKVGhlIHByb21wdCAqc3BlY2lmaWNhbGx5KiBuYW1lcyBgcGRzX2NvcmVgIGFzIGFuIGV4YW1wbGUgb2YgYSBTbWFydE5JQyBkcml2ZXIgdGhhdCYjMzk7cyBvZmYtbGltaXRzIGJlY2F1c2UgaXQgcmVxdWlyZXMgdGhhdCBzcGVjaWZpYyBoYXJkd2FyZSBzZXR1cC4gSSBkb24mIzM5O3QgbmVlZCB0byBvdmVydGhpbmsgdGhpcy4KCkp1c3QgdG8gYmUgY2VydGFpbiwgSSBxdWlja2x5IGRvdWJsZS1jaGVja2VkIHdoZXJlIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmc6IGBEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvYW1kL3Bkc19jb3JlLnJzdGAsIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvS2NvbmZpZ2AsIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvKmAsIGBpbmNsdWRlL2xpbnV4L3Bkcy9wZHNfY29yZV9pZi5oYC4gWWVwLCBpdCYjMzk7cyBhbGwgZGVlcGx5IGludGVydHdpbmVkIHdpdGggdGhhdCB2ZW5kb3Itc3BlY2lmaWMgYHBkc19jb3JlYCBkcml2ZXIuIE5vIGNoYW5jZSBvZiBnZXR0aW5nIHRoaXMgcGF0Y2ggdG8gcnVuIHdpdGhvdXQgdGhlIHBoeXNpY2FsIGhhcmR3YXJlLCBzbyB0aGF0JiMzOTtzIGEgKm5vKiB0byBmdXp6aW5nLgoKTXkgY29uY2x1c2lvbiBpczogdGhpcyBwYXRjaCBpcyB1bnJlYWNoYWJsZSBpbiBhIHN0YW5kYXJkIGZ1enppbmcgZW52aXJvbm1lbnQgZHVlIHRvIGl0cyBkZXBlbmRlbmNlIG9uIHRoZSBBTUQvUGVuc2FuZG8gQ29yZSBTbWFydE5JQyBhbmQgdGhlcmVmb3JlIEkgbmVlZCB0byBzZXQgYFdvcnRoRnV6emluZz1mYWxzZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTA6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQU1EL1BlbnNhbmRvIENvcmUgU21hcnROSUMgZHJpdmVyIChwZHNfY29yZSksIHdoaWNoIHJlcXVpcmVzIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIFRoZXJlZm9yZSwgdGhlIGNvZGUgaXMgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQU1EL1BlbnNhbmRvIENvcmUgU21hcnROSUMgZHJpdmVyIChwZHNfY29yZSksIHdoaWNoIHJlcXVpcmVzIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIFRoZXJlZm9yZSwgdGhlIGNvZGUgaXMgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMzBUMTA6MDM6NDUuNjkzMjg4MDc3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTk1NTYzMDU2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEFNRC9QZW5zYW5kbyBDb3JlIFNtYXJ0TklDIGRyaXZlciAocGRzX2NvcmUpLCB3aGljaCByZXF1aXJlcyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBUaGVyZWZvcmUsIHRoZSBjb2RlIGlzIHVucmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTA6MDM6NDUuNjkzMjkzNDE3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDA3NzY2NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA4ZmQ3ZGY5MzU4MzE2NDQ4NThmZTBkZWIzMzljNzg2ZDQ3YTdkODU3XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgSnVsIDMwIDEwOjAzOjQ0IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC9hbWQvcGRzX2NvcmUucnN0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L2FtZC9wZHNfY29yZS5yc3RcXG5pbmRleCA5ZThhMTZjNDQxMDI5Li40OTQ4N2EzNWMxNjMyIDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC9hbWQvcGRzX2NvcmUucnN0XFxuKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L2FtZC9wZHNfY29yZS5yc3RcXG5AQCAtMTAyLDYgKzEwMiw5NSBAQCBjdXJyZW50bHkgaW4gdXNlLCBhbmQgdGhhdCBiYW5rIHdpbGwgdXNlZCBmb3IgdGhlIG5leHQgYm9vdDo6XFxuICAgIyBkZXZsaW5rIGRldiBmbGFzaCBwY2kvMDAwMDpiNTowMC4wIFxcXFxcXG4gICAgICAgICAgICAgZmlsZSBwZW5zYW5kby9kc2NfZndfMS42My4wLTIyLnRhclxcbiBcXG4rRmlybXdhcmUgTWFuYWdlbWVudCAoUExETSlcXG4rPT09PT09PT09PT09PT09PT09PT09PT09PT1cXG4rXFxuK0Zpcm13YXJlIHRoYXQgc3VwcG9ydHMgUExETSBjYW4gYmUgdXBkYXRlZCB1c2luZyB0aGUgZGV2bGluayBmbGFzaCBjb21tYW5kXFxuK3dpdGggYSBQTERNIGZpcm13YXJlIHBhY2thZ2UuIFRoZSBlbnRpcmUgcGFja2FnZSBjYW4gYmUgdXBkYXRlZCBhdCBvbmNlOjpcXG4rXFxuKyAgIyBkZXZsaW5rIGRldiBmbGFzaCBwY2kvMDAwMDpiNTowMC4wIGZpbGUgZmlybXdhcmUucGxkbWZ3XFxuK1xcbitJbmRpdmlkdWFsIGNvbXBvbmVudHMgY2FuIGFsc28gYmUgdXBkYXRlZCBieSBzcGVjaWZ5aW5nIHRoZSBjb21wb25lbnQgbmFtZTo6XFxuK1xcbisgICMgZGV2bGluayBkZXYgZmxhc2ggcGNpLzAwMDA6YjU6MDAuMCBcXFxcXFxuKyAgICAgICAgICAgIGZpbGUgZmlybXdhcmUucGxkbWZ3IGNvbXBvbmVudCBmdy5jcGxkXFxuK1xcbitQZXItY29tcG9uZW50IHVwZGF0ZSB1c2VzIGRyaXZlci1kZWZpbmVkIGNvbXBvbmVudCBuYW1lcyAoZncsIGZ3LmNwbGQsXFxuK2V0Yy4pLiBOb3QgYWxsIGNvbXBvbmVudHMgc3VwcG9ydCBwZXItY29tcG9uZW50IHVwZGF0ZSAtXFxuK2Rldmxpbmsgd2lsbCByZWplY3QgdGhlIHJlcXVlc3QgaWYgdGhlIHNwZWNpZmllZCBjb21wb25lbnQgY2Fubm90XFxuK2JlIHVwZGF0ZWQuXFxuK1xcbitHb2xkIChyZWNvdmVyeSkgY29tcG9uZW50cyBjYW4gYmUgdXBkYXRlZCBieSBzcGVjaWZ5aW5nIHRoZSBiYXNlIGNvbXBvbmVudFxcbituYW1lIChlLmcuLCBgYGZ3YGAgZm9yIGBgZncuZ29sZGBgKSB3aXRoIGEgZ29sZGZ3IHBhY2thZ2UgZmlsZSB3aGVuIHRoZVxcbitkZXZpY2Ugc3VwcG9ydHMgcGVyLWNvbXBvbmVudCB1cGRhdGUuIFRoZSBgYC5nb2xkYGAgc3VmZml4IGluIGRldmxpbmsgaW5mb1xcbitvdXRwdXQgaW5kaWNhdGVzIHRoZSBnb2xkIHNsb3QgdmVyc2lvbiwgbm90IGEgZmxhc2ggdGFyZ2V0LlxcbitcXG4rSW5mbyB2ZXJzaW9ucyAoUExETSlcXG4rPT09PT09PT09PT09PT09PT09PT1cXG4rXFxuK0Zpcm13YXJlIHRoYXQgc3VwcG9ydHMgUExETSByZXBvcnRzIGNvbXBvbmVudCB2ZXJzaW9ucyB1c2luZyBkcml2ZXItZGVmaW5lZFxcbituYW1lcy4gVGhlIGRyaXZlciByZXBvcnRzIHRoZSBmb2xsb3dpbmcgY29tcG9uZW50IHZlcnNpb25zOlxcbitcXG4rLi4gbGlzdC10YWJsZTo6IGRldmxpbmsgaW5mbyB2ZXJzaW9ucyBmb3IgUExETS1jYXBhYmxlIGZpcm13YXJlXFxuKyAgIDp3aWR0aHM6IDUgNSA5MFxcbitcXG4rICAgKiAtIE5hbWVcXG4rICAgICAtIFR5cGVcXG4rICAgICAtIERlc2NyaXB0aW9uXFxuKyAgICogLSBgYGZ3YGBcXG4rICAgICAtIHJ1bm5pbmcsIHN0b3JlZFxcbisgICAgIC0gTWFpbiBmaXJtd2FyZVxcbisgICAqIC0gYGBmdy5nb2xkYGBcXG4rICAgICAtIHN0b3JlZFxcbisgICAgIC0gR29sZCAocmVjb3ZlcnkpIGZpcm13YXJlXFxuKyAgICogLSBgYGZ3LmJvb3Rsb2FkZXJgYFxcbisgICAgIC0gcnVubmluZywgc3RvcmVkXFxuKyAgICAgLSBCb290IGxvYWRlclxcbisgICAqIC0gYGBmdy5jcGxkYGBcXG4rICAgICAtIHJ1bm5pbmcsIHN0b3JlZFxcbisgICAgIC0gQ1BMRFxcbisgICAqIC0gYGBmdy5zZWN1cmVgYFxcbisgICAgIC0gcnVubmluZywgc3RvcmVkXFxuKyAgICAgLSBTZWN1cmUgYm9vdCBmaXJtd2FyZVxcbisgICAqIC0gYGBmdy5mcGdhYGBcXG4rICAgICAtIHJ1bm5pbmcsIHN0b3JlZFxcbisgICAgIC0gRlBHQSBjb25maWd1cmF0aW9uXFxuKyAgICogLSBgYGZ3LnN1Y2BgXFxuKyAgICAgLSBydW5uaW5nLCBzdG9yZWRcXG4rICAgICAtIFN5c3RlbSBVbml0IENvbnRyb2xsZXIgZmlybXdhcmVcXG4rICAgKiAtIGBgZncuc3VjLmJvb3Rsb2FkZXJgYFxcbisgICAgIC0gcnVubmluZywgc3RvcmVkXFxuKyAgICAgLSBTeXN0ZW0gVW5pdCBDb250cm9sbGVyIGJvb3Rsb2FkZXJcXG4rICAgKiAtIGBgZncudWJvb3RgYFxcbisgICAgIC0gcnVubmluZywgc3RvcmVkXFxuKyAgICAgLSBVLUJvb3QgYm9vdGxvYWRlclxcbisgICAqIC0gYGBhc2ljLmlkYGBcXG4rICAgICAtIGZpeGVkXFxuKyAgICAgLSBUaGUgQVNJQyB0eXBlIGZvciB0aGlzIGRldmljZVxcbisgICAqIC0gYGBhc2ljLnJldmBgXFxuKyAgICAgLSBmaXhlZFxcbisgICAgIC0gVGhlIHJldmlzaW9uIG9mIHRoZSBBU0lDIGZvciB0aGlzIGRldmljZVxcbitcXG4rRXhhbXBsZSBvdXRwdXQ6OlxcbitcXG4rICAkIGRldmxpbmsgZGV2IGluZm8gcGNpLzAwMDA6MDA6MDUuMFxcbisgIHBjaS8wMDAwOjAwOjA1LjA6XFxuKyAgICBkcml2ZXIgcGRzX2NvcmVcXG4rICAgIHNlcmlhbF9udW1iZXIgRkxNMTg0MjAwNzNcXG4rICAgIHZlcnNpb25zOlxcbisgICAgICAgIGZpeGVkOlxcbisgICAgICAgICAgYXNpYy5pZCAweDBcXG4rICAgICAgICAgIGFzaWMucmV2IDB4MFxcbisgICAgICAgIHJ1bm5pbmc6XFxuKyAgICAgICAgICBmdy5ib290bG9hZGVyIDEuMi4zXFxuKyAgICAgICAgICBmdyAxLjMuMFxcbisgICAgICAgICAgZncuY3BsZCAzLjE4XFxuKyAgICAgICAgc3RvcmVkOlxcbisgICAgICAgICAgZncuYm9vdGxvYWRlciAxLjIuM1xcbisgICAgICAgICAgZncuZ29sZCAxLjIuMFxcbisgICAgICAgICAgZncgMS4zLjBcXG4rICAgICAgICAgIGZ3LmNwbGQgMy4xOFxcbitcXG4gSGVhbHRoIFJlcG9ydGVyc1xcbiA9PT09PT09PT09PT09PT09XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9LY29uZmlnXFxuaW5kZXggZTM1OTkxMTQxYTFhMi4uNzQzZTNkNGI2Yjk0ZSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvS2NvbmZpZ1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9LY29uZmlnXFxuQEAgLTE3MSw2ICsxNzEsNyBAQCBjb25maWcgUERTX0NPUkVcXG4gXFx0ZGVwZW5kcyBvbiA2NEJJVCBcXHUwMDI2XFx1MDAyNiBQQ0lcXG4gXFx0c2VsZWN0IEFVWElMSUFSWV9CVVNcXG4gXFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxuK1xcdHNlbGVjdCBQTERNRldcXG4gXFx0aGVscFxcbiBcXHQgIFRoaXMgZW5hYmxlcyB0aGUgc3VwcG9ydCBmb3IgdGhlIEFNRC9QZW5zYW5kbyBDb3JlIGRldmljZSBmYW1pbHkgb2ZcXG4gXFx0ICBhZGFwdGVycy4gIE1vcmUgc3BlY2lmaWMgaW5mb3JtYXRpb24gb24gdGhpcyBkcml2ZXIgY2FuIGJlXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9jb3JlLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvY29yZS5jXFxuaW5kZXggMDRlYzI1NjljNjFjMC4uOTIyZTNlYzhhZjFiOSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvY29yZS5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL2NvcmUuY1xcbkBAIC00ODksNiArNDg5LDE1IEBAIHZvaWQgcGRzY190ZWFyZG93bihzdHJ1Y3QgcGRzYyAqcGRzYywgYm9vbCByZW1vdmluZylcXG4gXFx0XFx0cGRzY19kZXZjbWRfcmVzZXQocGRzYyk7XFxuIFxcbiBcXHRwY2lfY2xlYXJfbWFzdGVyKHBkc2MtXFx1MDAzZXBkZXYpO1xcbitcXHRpZiAoIXBkc2MtXFx1MDAzZXBkZXYtXFx1MDAzZWlzX3ZpcnRmbikge1xcbitcXHRcXHR1MTYgdmFsO1xcbitcXG4rXFx0XFx0LyogRmx1c2ggYW55IGluLWZsaWdodCBETUEgYmVmb3JlIGZyZWVpbmcgYnVmZmVycy5cXG4rXFx0XFx0ICogQSBjb25maWcgcmVhZCBjb21wbGV0aW9uIGNhbm5vdCByZXR1cm4gdW50aWwgYWxsIHByaW9yXFxuK1xcdFxcdCAqIGRldmljZS1pbml0aWF0ZWQgbWVtb3J5IHdyaXRlcyBoYXZlIGNvbXBsZXRlZC5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHBjaV9yZWFkX2NvbmZpZ193b3JkKHBkc2MtXFx1MDAzZXBkZXYsIFBDSV9WRU5ET1JfSUQsIFxcdTAwMjZ2YWwpO1xcbitcXHR9XFxuIFxcbiBcXHRwZHNjX2NvcmVfdW5pbml0KHBkc2MpO1xcbiBcXG5AQCAtNDk3LDYgKzUwNiw4IEBAIHZvaWQgcGRzY190ZWFyZG93bihzdHJ1Y3QgcGRzYyAqcGRzYywgYm9vbCByZW1vdmluZylcXG4gXFx0XFx0cGRzYy1cXHUwMDNldmlmdHlwZV9zdGF0dXMgPSBOVUxMO1xcbiBcXHR9XFxuIFxcbitcXHRwZHNjX2RlYnVnZnNfZGVsX2hvc3RfbWVtKHBkc2MpO1xcbitcXHRwZHNjX2hvc3RfbWVtX2ZyZWUocGRzYyk7XFxuIFxcdHBkc2NfZGV2X3VuaW5pdChwZHNjKTtcXG4gXFxuIFxcdHNldF9iaXQoUERTQ19TX0ZXX0RFQUQsIFxcdTAwMjZwZHNjLVxcdTAwM2VzdGF0ZSk7XFxuQEAgLTUwNiw2ICs1MTcsOCBAQCBpbnQgcGRzY19zdGFydChzdHJ1Y3QgcGRzYyAqcGRzYylcXG4ge1xcbiBcXHRwZHNfY29yZV9pbnRyX21hc2soXFx1MDAyNnBkc2MtXFx1MDAzZWludHJfY3RybFtwZHNjLVxcdTAwM2VhZG1pbnFjcS5pbnR4XSxcXG4gXFx0XFx0XFx0ICAgUERTX0NPUkVfSU5UUl9NQVNLX0NMRUFSKTtcXG4rXFx0cGRzY19ob3N0X21lbV9hZGQocGRzYyk7XFxuK1xcdHBkc2NfZGVidWdmc19hZGRfaG9zdF9tZW0ocGRzYyk7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbkBAIC01ODcsNiArNjAwLDggQEAgdm9pZCBwZHNjX2Z3X3VwKHN0cnVjdCBwZHNjICpwZHNjKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcdH1cXG4gXFxuK1xcdHBkc2NfZndfY29tcG9uZW50c19pbnZhbGlkYXRlKHBkc2MpO1xcbitcXG4gXFx0ZXJyID0gcGRzY19zZXR1cChwZHNjLCBQRFNDX1NFVFVQX1JFQ09WRVJZKTtcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0Z290byBlcnJfb3V0O1xcbkBAIC02NzAsMyArNjg1LDE2MSBAQCB2b2lkIHBkc2NfaGVhbHRoX3RocmVhZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuIG91dF91bmxvY2s6XFxuIFxcdG11dGV4X3VubG9jayhcXHUwMDI2cGRzYy1cXHUwMDNlY29uZmlnX2xvY2spO1xcbiB9XFxuK1xcbitzdGF0aWMgdm9pZCBwZHNjX2hvc3RfbWVtX2RlbF9vbmUoc3RydWN0IHBkc2MgKnBkc2MsIHUxNiB0YWcsIHU4IHJlYXNvbilcXG4re1xcbitcXHR1bmlvbiBwZHNfY29yZV9kZXZfY29tcCBjb21wID0ge307XFxuK1xcdHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgY21kID0ge1xcbitcXHRcXHQuaG9zdF9tZW0ub3Bjb2RlID0gUERTX0NPUkVfQ01EX0hPU1RfTUVNLFxcbitcXHRcXHQuaG9zdF9tZW0ub3BlciA9IFBEU19DT1JFX0hPU1RfTUVNX0RFTCxcXG4rXFx0XFx0Lmhvc3RfbWVtLnRhZyA9IGNwdV90b19sZTE2KHRhZyksXFxuK1xcdFxcdC5ob3N0X21lbS5yZWFzb24gPSByZWFzb24sXFxuK1xcdH07XFxuK1xcbitcXHRkZXZfZGJnKHBkc2MtXFx1MDAzZWRldiwgXFxcIlNlbmRpbmcgZGV2Y21kIGZvciBtZW0gZGVsIHRhZyAlZFxcXFxuXFxcIiwgdGFnKTtcXG4rXFx0cGRzY19kZXZjbWQocGRzYywgXFx1MDAyNmNtZCwgXFx1MDAyNmNvbXAsIHBkc2MtXFx1MDAzZWRldmNtZF90aW1lb3V0KTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBwZHNjX2hvc3RfbWVtX2FkZF9vbmUoc3RydWN0IHBkc2MgKnBkc2MsIGludCBpbmRleClcXG4re1xcbitcXHRzdHJ1Y3QgcGRzY19ob3N0X21lbSAqaG0gPSBcXHUwMDI2cGRzYy1cXHUwMDNlaG9zdF9tZW1fcmVxc1tpbmRleF07XFxuK1xcdHVuaW9uIHBkc19jb3JlX2Rldl9jb21wIGNvbXAgPSB7fTtcXG4rXFx0dW5pb24gcGRzX2NvcmVfZGV2X2NtZCBjbWQgPSB7fTtcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdGNtZC5ob3N0X21lbS5vcGNvZGUgPSBQRFNfQ09SRV9DTURfSE9TVF9NRU07XFxuK1xcdGNtZC5ob3N0X21lbS5vcGVyID0gUERTX0NPUkVfSE9TVF9NRU1fUVVFUlk7XFxuK1xcdGNtZC5ob3N0X21lbS5pbmRleCA9IGNwdV90b19sZTE2KGluZGV4KTtcXG4rXFx0ZGV2X2RiZyhwZHNjLVxcdTAwM2VkZXYsIFxcXCJTZW5kaW5nIGRldmNtZCBmb3IgbWVtIHF1ZXJ5IGluZGV4ICVkXFxcXG5cXFwiLCBpbmRleCk7XFxuK1xcdGVyciA9IHBkc2NfZGV2Y21kKHBkc2MsIFxcdTAwMjZjbWQsIFxcdTAwMjZjb21wLCBwZHNjLVxcdTAwM2VkZXZjbWRfdGltZW91dCk7XFxuK1xcdGlmIChlcnIgfHwgY29tcC5zdGF0dXMgIT0gUERTX1JDX1NVQ0NFU1MpIHtcXG4rXFx0XFx0ZGV2X2VycihwZHNjLVxcdTAwM2VkZXYsIFxcXCJtZW0gcXVlcnkgZmFpbGVkIGVyciAlZCBzdGF0dXMgJWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdGVyciwgY29tcC5zdGF0dXMpO1xcbitcXHRcXHRyZXR1cm4gZXJyID8gZXJyIDogLUVJTztcXG4rXFx0fVxcbitcXHRobS1cXHUwMDNlc2l6ZSA9IGxlMzJfdG9fY3B1KGNvbXAuaG9zdF9tZW0uc2l6ZSk7XFxuK1xcdGhtLVxcdTAwM2V0YWcgPSBsZTE2X3RvX2NwdShjb21wLmhvc3RfbWVtLnRhZyk7XFxuK1xcdGRldl9kYmcocGRzYy1cXHUwMDNlZGV2LCBcXFwibWVtIHF1ZXJ5IHJldHVybmVkIHNpemUgJWQgdGFnICVkXFxcXG5cXFwiLFxcbitcXHRcXHRobS1cXHUwMDNlc2l6ZSwgaG0tXFx1MDAzZXRhZyk7XFxuK1xcbitcXHRpZiAoIWhtLVxcdTAwM2VzaXplIHx8IGhtLVxcdTAwM2VzaXplIFxcdTAwM2UgUERTQ19IT1NUX01FTV9NQVhfQ09OVElHKSB7XFxuK1xcdFxcdGRldl9lcnIocGRzYy1cXHUwMDNlZGV2LCBcXFwiaW52YWxpZCBzaXplICVkIGZvciB0YWcgJWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdGhtLVxcdTAwM2VzaXplLCBobS1cXHUwMDNldGFnKTtcXG4rXFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4rXFx0XFx0Z290byBlcnJfZGVsO1xcbitcXHR9XFxuK1xcbitcXHRobS1cXHUwMDNlb3JkZXIgPSBnZXRfb3JkZXIoaG0tXFx1MDAzZXNpemUpO1xcbitcXHRobS1cXHUwMDNlcGcgPSBhbGxvY19wYWdlcyhHRlBfS0VSTkVMIHwgX19HRlBfWkVSTyB8IF9fR0ZQX05PV0FSTiwgaG0tXFx1MDAzZW9yZGVyKTtcXG4rXFx0aWYgKCFobS1cXHUwMDNlcGcpIHtcXG4rXFx0XFx0ZGV2X3dhcm4ocGRzYy1cXHUwMDNlZGV2LCBcXFwiYWxsb2Mgb3JkZXIgJWQgZmFpbGVkIGZvciB0YWcgJWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCBobS1cXHUwMDNlb3JkZXIsIGhtLVxcdTAwM2V0YWcpO1xcbitcXHRcXHRlcnIgPSAtRU5PTUVNO1xcbitcXHRcXHRnb3RvIGVycl9kZWw7XFxuK1xcdH1cXG4rXFxuK1xcdGhtLVxcdTAwM2VwYSA9IGRtYV9tYXBfcGFnZShwZHNjLVxcdTAwM2VkZXYsIGhtLVxcdTAwM2VwZywgMCwgaG0tXFx1MDAzZXNpemUsXFxuK1xcdFxcdFxcdCAgICAgIERNQV9CSURJUkVDVElPTkFMKTtcXG4rXFx0aWYgKGRtYV9tYXBwaW5nX2Vycm9yKHBkc2MtXFx1MDAzZWRldiwgaG0tXFx1MDAzZXBhKSkge1xcbitcXHRcXHRkZXZfZXJyKHBkc2MtXFx1MDAzZWRldiwgXFxcImRtYSBtYXAgZmFpbGVkIGZvciB0YWcgJWQgc2l6ZSAlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0aG0tXFx1MDAzZXRhZywgaG0tXFx1MDAzZXNpemUpO1xcbitcXHRcXHRfX2ZyZWVfcGFnZXMoaG0tXFx1MDAzZXBnLCBobS1cXHUwMDNlb3JkZXIpO1xcbitcXHRcXHRobS1cXHUwMDNlcGcgPSBOVUxMO1xcbitcXHRcXHRlcnIgPSAtRUlPO1xcbitcXHRcXHRnb3RvIGVycl9kZWw7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIFRyYWNrIHRoaXMgYWxsb2NhdGlvbiBzbyBwZHNjX2hvc3RfbWVtX2ZyZWUoKSBjYW4gY2xlYW4gaXQgdXAgKi9cXG4rXFx0cGRzYy1cXHUwMDNlbnVtX2hvc3RfbWVtX3JlcXMrKztcXG4rXFxuK1xcdG1lbXNldChcXHUwMDI2Y21kLCAwLCBzaXplb2YoY21kKSk7XFxuK1xcdG1lbXNldChcXHUwMDI2Y29tcCwgMCwgc2l6ZW9mKGNvbXApKTtcXG4rXFx0Y21kLmhvc3RfbWVtLm9wY29kZSA9IFBEU19DT1JFX0NNRF9IT1NUX01FTTtcXG4rXFx0Y21kLmhvc3RfbWVtLm9wZXIgPSBQRFNfQ09SRV9IT1NUX01FTV9BREQ7XFxuK1xcdGNtZC5ob3N0X21lbS50YWcgPSBjcHVfdG9fbGUxNihobS1cXHUwMDNldGFnKTtcXG4rXFx0Y21kLmhvc3RfbWVtLnNpemUgPSBjcHVfdG9fbGUzMihobS1cXHUwMDNlc2l6ZSk7XFxuK1xcdGNtZC5ob3N0X21lbS5idWZfcGEgPSBjcHVfdG9fbGU2NChobS1cXHUwMDNlcGEpO1xcbitcXG4rXFx0ZGV2X2RiZyhwZHNjLVxcdTAwM2VkZXYsIFxcXCJTZW5kaW5nIGRldmNtZCBmb3IgbWVtIGFkZCB0YWcgJWQgc2l6ZSAlZCBwYSAlcGFkXFxcXG5cXFwiLFxcbitcXHRcXHRobS1cXHUwMDNldGFnLCBobS1cXHUwMDNlc2l6ZSwgXFx1MDAyNmhtLVxcdTAwM2VwYSk7XFxuK1xcdGVyciA9IHBkc2NfZGV2Y21kKHBkc2MsIFxcdTAwMjZjbWQsIFxcdTAwMjZjb21wLCBwZHNjLVxcdTAwM2VkZXZjbWRfdGltZW91dCk7XFxuK1xcdGlmIChlcnIgfHwgY29tcC5zdGF0dXMgIT0gUERTX1JDX1NVQ0NFU1MpIHtcXG4rXFx0XFx0ZGV2X2VycihwZHNjLVxcdTAwM2VkZXYsIFxcXCJtZW0gYWRkIGZhaWxlZCBlcnIgJWQgc3RhdHVzICVkIGZvciB0YWcgJWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdGVyciwgY29tcC5zdGF0dXMsIGhtLVxcdTAwM2V0YWcpO1xcbitcXHRcXHRlcnIgPSBlcnIgPyBlcnIgOiAtRUlPO1xcbitcXHRcXHRnb3RvIGVycl9kZWw7XFxuK1xcdH1cXG4rXFx0ZGV2X2RiZyhwZHNjLVxcdTAwM2VkZXYsIFxcXCJtZW0gYWRkIGNvbXBsZXRlZCBmb3IgdGFnICVkXFxcXG5cXFwiLCBobS1cXHUwMDNldGFnKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbitcXG4rZXJyX2RlbDpcXG4rXFx0LyogQWZ0ZXIgTUVNX1FVRVJZIHN1Y2NlZWRzLCBmaXJtd2FyZSBleHBlY3RzIE1FTV9BREQgb3IgTUVNX0RFTCAqL1xcbitcXHRwZHNjX2hvc3RfbWVtX2RlbF9vbmUocGRzYywgaG0tXFx1MDAzZXRhZywgUERTX1JDX0VOT01FTSk7XFxuK1xcdHJldHVybiBlcnI7XFxuK31cXG4rXFxuK3ZvaWQgcGRzY19ob3N0X21lbV9hZGQoc3RydWN0IHBkc2MgKnBkc2MpXFxuK3tcXG4rXFx0dW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgY29tcCA9IHt9O1xcbitcXHR1bmlvbiBwZHNfY29yZV9kZXZfY21kIGNtZCA9IHt9O1xcbitcXHR1MTYgY291bnQ7XFxuK1xcdGludCBlcnI7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0aWYgKCEocGRzYy1cXHUwMDNlZGV2X2lkZW50LmNhcGFiaWxpdGllcyBcXHUwMDI2XFxuK1xcdCAgICAgY3B1X3RvX2xlNjQoUERTX0NPUkVfREVWX0NBUF9IT1NUX01FTSkpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRjbWQuaG9zdF9tZW0ub3Bjb2RlID0gUERTX0NPUkVfQ01EX0hPU1RfTUVNO1xcbitcXHRjbWQuaG9zdF9tZW0ub3BlciA9IFBEU19DT1JFX0hPU1RfTUVNX0dFVF9DT1VOVDtcXG4rXFx0Y21kLmhvc3RfbWVtLmluZGV4ID0gY3B1X3RvX2xlMTYoUERTQ19IT1NUX01FTV9NQVhfQ09VTlQpO1xcbitcXHRjbWQuaG9zdF9tZW0ubWF4X2NvbnRpZyA9IGNwdV90b19sZTMyKFBEU0NfSE9TVF9NRU1fTUFYX0NPTlRJRyk7XFxuK1xcdGRldl9kYmcocGRzYy1cXHUwMDNlZGV2LCBcXFwiU2VuZGluZyBkZXZjbWQgZm9yIG1lbSBnZXQgY291bnQgbWF4X2NvbnRpZyAldVxcXFxuXFxcIixcXG4rXFx0XFx0UERTQ19IT1NUX01FTV9NQVhfQ09OVElHKTtcXG4rXFx0ZXJyID0gcGRzY19kZXZjbWQocGRzYywgXFx1MDAyNmNtZCwgXFx1MDAyNmNvbXAsIHBkc2MtXFx1MDAzZWRldmNtZF90aW1lb3V0KTtcXG4rXFx0aWYgKGVyciB8fCBjb21wLnN0YXR1cyAhPSBQRFNfUkNfU1VDQ0VTUykge1xcbitcXHRcXHRkZXZfZXJyKHBkc2MtXFx1MDAzZWRldiwgXFxcIm1lbSBnZXQgY291bnQgZmFpbGVkIGVyciAlZCBzdGF0dXMgJWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdGVyciwgY29tcC5zdGF0dXMpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuK1xcdGNvdW50ID0gbWluKGxlMTZfdG9fY3B1KGNvbXAuaG9zdF9tZW0uY291bnQpLFxcbitcXHRcXHQgICAgUERTQ19IT1NUX01FTV9NQVhfQ09VTlQpO1xcbitcXHRkZXZfZGJnKHBkc2MtXFx1MDAzZWRldiwgXFxcIm1lbSBnZXQgY291bnQgcmV0dXJuZWQgY291bnQgJWRcXFxcblxcXCIsIGNvdW50KTtcXG4rXFx0aWYgKGNvdW50ID09IDApXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHBkc2MtXFx1MDAzZWhvc3RfbWVtX3JlcXMgPSBremFsbG9jX29ianMoKnBkc2MtXFx1MDAzZWhvc3RfbWVtX3JlcXMsIGNvdW50LFxcbitcXHRcXHRcXHRcXHRcXHQgICBHRlBfS0VSTkVMKTtcXG4rXFx0aWYgKCFwZHNjLVxcdTAwM2Vob3N0X21lbV9yZXFzKSB7XFxuK1xcdFxcdGRldl9lcnIocGRzYy1cXHUwMDNlZGV2LCBcXFwiZmFpbGVkIHRvIGFsbG9jIGhvc3RfbWVtX3JlcXMgYXJyYXlcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBjb3VudDsgaSsrKSB7XFxuK1xcdFxcdGVyciA9IHBkc2NfaG9zdF9tZW1fYWRkX29uZShwZHNjLCBpKTtcXG4rXFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4rfVxcbitcXG4rdm9pZCBwZHNjX2hvc3RfbWVtX2ZyZWUoc3RydWN0IHBkc2MgKnBkc2MpXFxuK3tcXG4rXFx0aW50IGk7XFxuK1xcbitcXHRpZiAoIXBkc2MtXFx1MDAzZWhvc3RfbWVtX3JlcXMpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBwZHNjLVxcdTAwM2VudW1faG9zdF9tZW1fcmVxczsgaSsrKSB7XFxuK1xcdFxcdGRtYV91bm1hcF9wYWdlKHBkc2MtXFx1MDAzZWRldiwgcGRzYy1cXHUwMDNlaG9zdF9tZW1fcmVxc1tpXS5wYSxcXG4rXFx0XFx0XFx0ICAgICAgIHBkc2MtXFx1MDAzZWhvc3RfbWVtX3JlcXNbaV0uc2l6ZSxcXG4rXFx0XFx0XFx0ICAgICAgIERNQV9CSURJUkVDVElPTkFMKTtcXG4rXFx0XFx0X19mcmVlX3BhZ2VzKHBkc2MtXFx1MDAzZWhvc3RfbWVtX3JlcXNbaV0ucGcsXFxuK1xcdFxcdFxcdCAgICAgcGRzYy1cXHUwMDNlaG9zdF9tZW1fcmVxc1tpXS5vcmRlcik7XFxuK1xcdH1cXG4rXFxuK1xcdGtmcmVlKHBkc2MtXFx1MDAzZWhvc3RfbWVtX3JlcXMpO1xcbitcXHRwZHNjLVxcdTAwM2Vob3N0X21lbV9yZXFzID0gTlVMTDtcXG4rXFx0cGRzYy1cXHUwMDNlbnVtX2hvc3RfbWVtX3JlcXMgPSAwO1xcbit9XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9jb3JlLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvY29yZS5oXFxuaW5kZXggYjdmZTlhZDczMzQ5OC4uNzkxNzU2YTUwODcwZSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvY29yZS5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL2NvcmUuaFxcbkBAIC01LDYgKzUsNyBAQFxcbiAjZGVmaW5lIF9QRFNDX0hfXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZGVidWdmcy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbW16b25lLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvZGV2bGluay5oXFx1MDAzZVxcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3Bkcy9wZHNfY29tbW9uLmhcXHUwMDNlXFxuQEAgLTIzLDYgKzI0LDIwIEBAXFxuICNkZWZpbmUgUERTQ19TRVRVUF9SRUNPVkVSWVxcdGZhbHNlXFxuICNkZWZpbmUgUERTQ19TRVRVUF9JTklUXFx0XFx0dHJ1ZVxcbiBcXG4rLyogVXNlIGZpeGVkIDRNQiBpbnN0ZWFkIG9mIFBBR0VfU0laRSBcXHUwMDNjXFx1MDAzYyBNQVhfUEFHRV9PUkRFUiB0byBhdm9pZFxcbisgKiBjcHVfdG9fbGUzMigpIHRydW5jYXRpb24gb24gbGFyZ2UtcGFnZSBjb25maWdzXFxuKyAqL1xcbisjZGVmaW5lIFBEU0NfSE9TVF9NRU1fTUFYX0NPTlRJRyAoNCAqIDEwMjQgKiAxMDI0KVxcbisjZGVmaW5lIFBEU0NfSE9TVF9NRU1fTUFYX0NPVU5UICAyNTZcXG4rXFxuK3N0cnVjdCBwZHNjX2RlZmVycmVkX2RtYSB7XFxuK1xcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcXG4rXFx0ZG1hX2FkZHJfdCBkbWFfYWRkcjtcXG4rXFx0dm9pZCAqdmE7XFxuK1xcdHNpemVfdCBzaXplO1xcbitcXHRlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXI7XFxuK307XFxuK1xcbiBzdHJ1Y3QgcGRzY19kZXZfYmFyIHtcXG4gXFx0dm9pZCBfX2lvbWVtICp2YWRkcjtcXG4gXFx0cGh5c19hZGRyX3QgYnVzX2FkZHI7XFxuQEAgLTE0MSw2ICsxNTYsMTQgQEAgc3RydWN0IHBkc2NfdmlmdHlwZSB7XFxuIFxcdHN0cnVjdCBwZHNfYXV4aWxpYXJ5X2RldiAqcGFkZXY7XFxuIH07XFxuIFxcbitzdHJ1Y3QgcGRzY19ob3N0X21lbSB7XFxuK1xcdHUzMiBzaXplO1xcbitcXHR1MTYgdGFnO1xcbitcXHR1OCBvcmRlcjtcXG4rXFx0c3RydWN0IHBhZ2UgKnBnO1xcbitcXHRkbWFfYWRkcl90IHBhO1xcbit9O1xcbitcXG4gLyogTm8gc3RhdGUgZmxhZ3Mgc2V0IG1lYW5zIHdlIGFyZSBpbiBhIHN0ZWFkeSBydW5uaW5nIHN0YXRlICovXFxuIGVudW0gcGRzY19zdGF0ZV9mbGFncyB7XFxuIFxcdFBEU0NfU19GV19ERUFELFxcdFxcdCAgICAvKiBzdG9wcGVkLCB3YWl0IG9uIHN0YXJ0dXAgb3IgcmVjb3ZlcnkgKi9cXG5AQCAtMTg1LDYgKzIwOCw4IEBAIHN0cnVjdCBwZHNjIHtcXG4gXFx0c3RydWN0IG11dGV4IGRldmNtZF9sb2NrO1xcdC8qIGxvY2sgZm9yIGRldl9jbWQgb3BlcmF0aW9ucyAqL1xcbiBcXHRzdHJ1Y3QgbXV0ZXggY29uZmlnX2xvY2s7XFx0LyogbG9jayBmb3IgY29uZmlndXJhdGlvbiBvcGVyYXRpb25zICovXFxuIFxcdHNwaW5sb2NrX3QgYWRtaW5xX2xvY2s7XFx0XFx0LyogbG9jayBmb3IgYWRtaW5xIG9wZXJhdGlvbnMgKi9cXG4rXFx0c3RydWN0IGxpc3RfaGVhZCBkZWZlcnJlZF9kbWFfbGlzdDtcXG4rXFx0c3BpbmxvY2tfdCBkZWZlcnJlZF9kbWFfbG9jaztcXHQvKiBsb2NrIGZvciBkZWZlcnJlZCBETUEgbGlzdCAqL1xcbiBcXHRyZWZjb3VudF90IGFkbWlucV9yZWZjbnQ7XFxuIFxcdHN0cnVjdCBwZHNfY29yZV9kZXZfaW5mb19yZWdzIF9faW9tZW0gKmluZm9fcmVncztcXG4gXFx0c3RydWN0IHBkc19jb3JlX2Rldl9jbWRfcmVncyBfX2lvbWVtICpjbWRfcmVncztcXG5AQCAtMTk5LDYgKzIyNCwxMSBAQCBzdHJ1Y3QgcGRzYyB7XFxuIFxcdHU2NCBsYXN0X2VpZDtcXG4gXFx0c3RydWN0IHBkc2NfdmlmdHlwZSAqdmlmdHlwZV9zdGF0dXM7XFxuIFxcdHN0cnVjdCB3b3JrX3N0cnVjdCBwY2lfcmVzZXRfd29yaztcXG4rXFxuK1xcdHN0cnVjdCBwZHNjX2hvc3RfbWVtICpob3N0X21lbV9yZXFzO1xcbitcXHR1MTYgbnVtX2hvc3RfbWVtX3JlcXM7XFxuK1xcbitcXHRzdHJ1Y3QgcGRzX2NvcmVfY29tcG9uZW50X2xpc3RfaW5mbyBmd19jb21wb25lbnRzO1xcbiB9O1xcbiBcXG4gLyoqIGVudW0gcGRzX2NvcmVfZGJlbGxfYml0cyAtIGJpdHdpc2UgY29tcG9zaXRpb24gb2YgZGJlbGwgdmFsdWVzLlxcbkBAIC0yNzUsMTQgKzMwNSwyNCBAQCB2b2lkIHBkc2NfZGVidWdmc19hZGRfdmlmdHlwZShzdHJ1Y3QgcGRzYyAqcGRzYyk7XFxuIHZvaWQgcGRzY19kZWJ1Z2ZzX2FkZF9pcnFzKHN0cnVjdCBwZHNjICpwZHNjKTtcXG4gdm9pZCBwZHNjX2RlYnVnZnNfYWRkX3FjcShzdHJ1Y3QgcGRzYyAqcGRzYywgc3RydWN0IHBkc2NfcWNxICpxY3EpO1xcbiB2b2lkIHBkc2NfZGVidWdmc19kZWxfcWNxKHN0cnVjdCBwZHNjX3FjcSAqcWNxKTtcXG4rdm9pZCBwZHNjX2RlYnVnZnNfYWRkX2hvc3RfbWVtKHN0cnVjdCBwZHNjICpwZHNjKTtcXG4rdm9pZCBwZHNjX2RlYnVnZnNfZGVsX2hvc3RfbWVtKHN0cnVjdCBwZHNjICpwZHNjKTtcXG4gXFxuIGludCBwZHNjX2Vycl90b19lcnJubyhlbnVtIHBkc19jb3JlX3N0YXR1c19jb2RlIGNvZGUpO1xcbiBib29sIHBkc2NfaXNfZndfcnVubmluZyhzdHJ1Y3QgcGRzYyAqcGRzYyk7XFxuIGJvb2wgcGRzY19pc19md19nb29kKHN0cnVjdCBwZHNjICpwZHNjKTtcXG4gaW50IHBkc2NfZGV2Y21kKHN0cnVjdCBwZHNjICpwZHNjLCB1bmlvbiBwZHNfY29yZV9kZXZfY21kICpjbWQsXFxuIFxcdFxcdHVuaW9uIHBkc19jb3JlX2Rldl9jb21wICpjb21wLCBpbnQgbWF4X3NlY29uZHMpO1xcbitpbnQgcGRzY19kZXZjbWRfd2l0aF9kYXRhKHN0cnVjdCBwZHNjICpwZHNjLCB1bmlvbiBwZHNfY29yZV9kZXZfY21kICpjbWQsXFxuK1xcdFxcdFxcdCAgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGRhdGFfbGVuLFxcbitcXHRcXHRcXHQgIHVuaW9uIHBkc19jb3JlX2Rldl9jb21wICpjb21wLCBpbnQgbWF4X3NlY29uZHMpO1xcbitpbnQgcGRzY19kZXZjbWRfd2l0aF9kYXRhX25vbXNnKHN0cnVjdCBwZHNjICpwZHNjLCB1bmlvbiBwZHNfY29yZV9kZXZfY21kICpjbWQsXFxuK1xcdFxcdFxcdFxcdGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBkYXRhX2xlbixcXG4rXFx0XFx0XFx0XFx0dW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgKmNvbXAsIGludCBtYXhfc2Vjb25kcyk7XFxuIGludCBwZHNjX2RldmNtZF9sb2NrZWQoc3RydWN0IHBkc2MgKnBkc2MsIHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgKmNtZCxcXG4gXFx0XFx0ICAgICAgIHVuaW9uIHBkc19jb3JlX2Rldl9jb21wICpjb21wLCBpbnQgbWF4X3NlY29uZHMpO1xcbitpbnQgcGRzY19kZXZjbWRfbG9ja2VkX25vbXNnKHN0cnVjdCBwZHNjICpwZHNjLCB1bmlvbiBwZHNfY29yZV9kZXZfY21kICpjbWQsXFxuK1xcdFxcdFxcdCAgICAgdW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgKmNvbXAsIGludCBtYXhfc2Vjb25kcyk7XFxuIGludCBwZHNjX2RldmNtZF9pbml0KHN0cnVjdCBwZHNjICpwZHNjKTtcXG4gaW50IHBkc2NfZGV2Y21kX3Jlc2V0KHN0cnVjdCBwZHNjICpwZHNjKTtcXG4gaW50IHBkc2NfZGV2X2luaXQoc3RydWN0IHBkc2MgKnBkc2MpO1xcbkBAIC0zMTUsMTEgKzM1NSwyMyBAQCB2b2lkIHBkc2NfcHJvY2Vzc19hZG1pbnEoc3RydWN0IHBkc2NfcWNxICpxY3EpO1xcbiB2b2lkIHBkc2Nfd29ya190aHJlYWQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcXG4gaXJxcmV0dXJuX3QgcGRzY19hZG1pbnFfaXNyKGludCBpcnEsIHZvaWQgKmRhdGEpO1xcbiBcXG4taW50IHBkc2NfZmlybXdhcmVfdXBkYXRlKHN0cnVjdCBwZHNjICpwZHNjLCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3LFxcbitpbnQgcGRzY19maXJtd2FyZV91cGRhdGUoc3RydWN0IHBkc2MgKnBkc2MsXFxuK1xcdFxcdFxcdCBzdHJ1Y3QgZGV2bGlua19mbGFzaF91cGRhdGVfcGFyYW1zICpwYXJhbXMsXFxuIFxcdFxcdFxcdCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xcbitpbnQgcGRzY19nZXRfY29tcG9uZW50X2luZm8oc3RydWN0IHBkc2MgKnBkc2MpO1xcbitjb25zdCBjaGFyICpwZHNjX2Z3X3R5cGVfdG9fbmFtZSh1OCB0eXBlKTtcXG4rdm9pZCBwZHNjX2Z3X2NvbXBvbmVudHNfaW52YWxpZGF0ZShzdHJ1Y3QgcGRzYyAqcGRzYyk7XFxuIFxcbiB2b2lkIHBkc2NfZndfZG93bihzdHJ1Y3QgcGRzYyAqcGRzYyk7XFxuIHZvaWQgcGRzY19md191cChzdHJ1Y3QgcGRzYyAqcGRzYyk7XFxuIHZvaWQgcGRzY19wY2lfcmVzZXRfdGhyZWFkKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XFxuIFxcbit2b2lkIHBkc2NfaG9zdF9tZW1fYWRkKHN0cnVjdCBwZHNjICpwZHNjKTtcXG4rdm9pZCBwZHNjX2hvc3RfbWVtX2ZyZWUoc3RydWN0IHBkc2MgKnBkc2MpO1xcbitcXG4rdm9pZCBwZHNjX2RlZmVycmVkX2RtYV9hZGQoc3RydWN0IHBkc2MgKnBkc2MsIHN0cnVjdCBwZHNjX2RlZmVycmVkX2RtYSAqZW50cnksXFxuK1xcdFxcdFxcdCAgIGRtYV9hZGRyX3QgZG1hX2FkZHIsIHZvaWQgKnZhLCBzaXplX3Qgc2l6ZSxcXG4rXFx0XFx0XFx0ICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKTtcXG4rdm9pZCBwZHNjX2RlZmVycmVkX2RtYV9mcmVlKHN0cnVjdCBwZHNjICpwZHNjKTtcXG4rXFxuICNlbmRpZiAvKiBfUERTQ19IXyAqL1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvZGVidWdmcy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL2RlYnVnZnMuY1xcbmluZGV4IDgxMGEwY2Q5YmNhYzguLmVmMGExYjdkMTU5YjUgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL2RlYnVnZnMuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9kZWJ1Z2ZzLmNcXG5AQCAtMTc4LDMgKzE3OCw0OCBAQCB2b2lkIHBkc2NfZGVidWdmc19kZWxfcWNxKHN0cnVjdCBwZHNjX3FjcSAqcWNxKVxcbiBcXHRkZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmUocWNxLVxcdTAwM2VkZW50cnkpO1xcbiBcXHRxY3EtXFx1MDAzZWRlbnRyeSA9IE5VTEw7XFxuIH1cXG4rXFxuK3N0YXRpYyBpbnQgaG9zdF9tZW1fc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcXG4re1xcbitcXHRzdHJ1Y3QgcGRzYyAqcGRzYyA9IHNlcS1cXHUwMDNlcHJpdmF0ZTtcXG4rXFx0c3RydWN0IHBkc2NfaG9zdF9tZW0gKmhtO1xcbitcXHRpbnQgaTtcXG4rXFxuK1xcdGlmICghcGRzYy1cXHUwMDNlaG9zdF9tZW1fcmVxcyB8fCBwZHNjLVxcdTAwM2VudW1faG9zdF9tZW1fcmVxcyA9PSAwKSB7XFxuK1xcdFxcdHNlcV9wdXRzKHNlcSwgXFxcIk5vIGhvc3QgbWVtb3J5IGFsbG9jYXRlZFxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHR9XFxuK1xcbitcXHRzZXFfcHJpbnRmKHNlcSwgXFxcIkhvc3QgbWVtb3J5IHJlcXVlc3RzOiAldVxcXFxuXFxcXG5cXFwiLFxcbitcXHRcXHQgICBwZHNjLVxcdTAwM2VudW1faG9zdF9tZW1fcmVxcyk7XFxuK1xcdHNlcV9wdXRzKHNlcSwgXFxcIlRhZyAgICBTaXplICAgICAgICAgT3JkZXIgIFBBXFxcXG5cXFwiKTtcXG4rXFx0c2VxX3B1dHMoc2VxLCBcXFwiLS0tICAgIC0tLS0gICAgICAgICAtLS0tLSAgLS1cXFxcblxcXCIpO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHBkc2MtXFx1MDAzZW51bV9ob3N0X21lbV9yZXFzOyBpKyspIHtcXG4rXFx0XFx0aG0gPSBcXHUwMDI2cGRzYy1cXHUwMDNlaG9zdF9tZW1fcmVxc1tpXTtcXG4rXFxuK1xcdFxcdGlmICghaG0tXFx1MDAzZXBnKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdHNlcV9wcmludGYoc2VxLCBcXFwiJS02dSAlLTEydSAlLTZ1ICVwYWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgIGhtLVxcdTAwM2V0YWcsIGhtLVxcdTAwM2VzaXplLCBobS1cXHUwMDNlb3JkZXIsIFxcdTAwMjZobS1cXHUwMDNlcGEpO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitERUZJTkVfU0hPV19BVFRSSUJVVEUoaG9zdF9tZW0pO1xcbitcXG4rdm9pZCBwZHNjX2RlYnVnZnNfYWRkX2hvc3RfbWVtKHN0cnVjdCBwZHNjICpwZHNjKVxcbit7XFxuK1xcdGlmICghKHBkc2MtXFx1MDAzZWRldl9pZGVudC5jYXBhYmlsaXRpZXMgXFx1MDAyNlxcbitcXHQgICAgIGNwdV90b19sZTY0KFBEU19DT1JFX0RFVl9DQVBfSE9TVF9NRU0pKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0ZGVidWdmc19jcmVhdGVfZmlsZShcXFwiaG9zdF9tZW1cXFwiLCAwNDAwLCBwZHNjLVxcdTAwM2VkZW50cnksXFxuK1xcdFxcdFxcdCAgICBwZHNjLCBcXHUwMDI2aG9zdF9tZW1fZm9wcyk7XFxuK31cXG4rXFxuK3ZvaWQgcGRzY19kZWJ1Z2ZzX2RlbF9ob3N0X21lbShzdHJ1Y3QgcGRzYyAqcGRzYylcXG4re1xcbitcXHRkZWJ1Z2ZzX2xvb2t1cF9hbmRfcmVtb3ZlKFxcXCJob3N0X21lbVxcXCIsIHBkc2MtXFx1MDAzZWRlbnRyeSk7XFxuK31cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL2Rldi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL2Rldi5jXFxuaW5kZXggYmRlZDZiMzMyODljZS4uYzUwNzc4MTc1ZTJmMyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvZGV2LmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvZGV2LmNcXG5AQCAtMTI2LDcgKzEyNiw4IEBAIHN0YXRpYyBjb25zdCBjaGFyICpwZHNjX2RldmNtZF9zdHIoaW50IG9wY29kZSlcXG4gXFx0fVxcbiB9XFxuIFxcbi1zdGF0aWMgaW50IHBkc2NfZGV2Y21kX3dhaXQoc3RydWN0IHBkc2MgKnBkc2MsIHU4IG9wY29kZSwgaW50IG1heF9zZWNvbmRzKVxcbitzdGF0aWMgaW50IF9fcGRzY19kZXZjbWRfd2FpdChzdHJ1Y3QgcGRzYyAqcGRzYywgdTggb3Bjb2RlLCBpbnQgbWF4X3NlY29uZHMsXFxuK1xcdFxcdFxcdCAgICAgIGNvbnN0IGJvb2wgZG9fbXNnKVxcbiB7XFxuIFxcdHN0cnVjdCBkZXZpY2UgKmRldiA9IHBkc2MtXFx1MDAzZWRldjtcXG4gXFx0dW5zaWduZWQgbG9uZyBzdGFydF90aW1lO1xcbkBAIC0xNzksNyArMTgwLDcgQEAgc3RhdGljIGludCBwZHNjX2RldmNtZF93YWl0KHN0cnVjdCBwZHNjICpwZHNjLCB1OCBvcGNvZGUsIGludCBtYXhfc2Vjb25kcylcXG4gXFxuIFxcdHN0YXR1cyA9IHBkc2NfZGV2Y21kX3N0YXR1cyhwZHNjKTtcXG4gXFx0ZXJyID0gcGRzY19lcnJfdG9fZXJybm8oc3RhdHVzKTtcXG4tXFx0aWYgKGVyciBcXHUwMDI2XFx1MDAyNiBlcnIgIT0gLUVBR0FJTilcXG4rXFx0aWYgKGRvX21zZyBcXHUwMDI2XFx1MDAyNiBlcnIgXFx1MDAyNlxcdTAwMjYgZXJyICE9IC1FQUdBSU4pXFxuIFxcdFxcdGRldl9lcnIoZGV2LCBcXFwiREVWQ01EICVkICVzIGZhaWxlZCwgc3RhdHVzPSVkIGVyciAlZCAlcGVcXFxcblxcXCIsXFxuIFxcdFxcdFxcdG9wY29kZSwgcGRzY19kZXZjbWRfc3RyKG9wY29kZSksIHN0YXR1cywgZXJyLFxcbiBcXHRcXHRcXHRFUlJfUFRSKGVycikpO1xcbkBAIC0xODcsOCArMTg4LDkgQEAgc3RhdGljIGludCBwZHNjX2RldmNtZF93YWl0KHN0cnVjdCBwZHNjICpwZHNjLCB1OCBvcGNvZGUsIGludCBtYXhfc2Vjb25kcylcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG4taW50IHBkc2NfZGV2Y21kX2xvY2tlZChzdHJ1Y3QgcGRzYyAqcGRzYywgdW5pb24gcGRzX2NvcmVfZGV2X2NtZCAqY21kLFxcbi1cXHRcXHQgICAgICAgdW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgKmNvbXAsIGludCBtYXhfc2Vjb25kcylcXG4rc3RhdGljIGludCBfX3Bkc2NfZGV2Y21kX2xvY2tlZChzdHJ1Y3QgcGRzYyAqcGRzYywgdW5pb24gcGRzX2NvcmVfZGV2X2NtZCAqY21kLFxcbitcXHRcXHRcXHRcXHR1bmlvbiBwZHNfY29yZV9kZXZfY29tcCAqY29tcCwgaW50IG1heF9zZWNvbmRzLFxcbitcXHRcXHRcXHRcXHRjb25zdCBib29sIGRvX21zZylcXG4ge1xcbiBcXHRpbnQgZXJyO1xcbiBcXG5AQCAtMTk3LDE2ICsxOTksNjMgQEAgaW50IHBkc2NfZGV2Y21kX2xvY2tlZChzdHJ1Y3QgcGRzYyAqcGRzYywgdW5pb24gcGRzX2NvcmVfZGV2X2NtZCAqY21kLFxcbiBcXG4gXFx0bWVtY3B5X3RvaW8oXFx1MDAyNnBkc2MtXFx1MDAzZWNtZF9yZWdzLVxcdTAwM2VjbWQsIGNtZCwgc2l6ZW9mKCpjbWQpKTtcXG4gXFx0cGRzY19kZXZjbWRfZGJlbGwocGRzYyk7XFxuLVxcdGVyciA9IHBkc2NfZGV2Y21kX3dhaXQocGRzYywgY21kLVxcdTAwM2VvcGNvZGUsIG1heF9zZWNvbmRzKTtcXG4rXFx0ZXJyID0gX19wZHNjX2RldmNtZF93YWl0KHBkc2MsIGNtZC1cXHUwMDNlb3Bjb2RlLCBtYXhfc2Vjb25kcywgZG9fbXNnKTtcXG4gXFxuIFxcdGlmICgoZXJyID09IC1FTlhJTyB8fCBlcnIgPT0gLUVUSU1FRE9VVCkgXFx1MDAyNlxcdTAwMjYgcGRzYy1cXHUwMDNld3EpXFxuIFxcdFxcdHF1ZXVlX3dvcmsocGRzYy1cXHUwMDNld3EsIFxcdTAwMjZwZHNjLVxcdTAwM2VoZWFsdGhfd29yayk7XFxuIFxcdGVsc2VcXG4gXFx0XFx0bWVtY3B5X2Zyb21pbyhjb21wLCBcXHUwMDI2cGRzYy1cXHUwMDNlY21kX3JlZ3MtXFx1MDAzZWNvbXAsIHNpemVvZigqY29tcCkpO1xcbiBcXG4rXFx0aWYgKGVyciAhPSAtRVRJTUVET1VUIFxcdTAwMjZcXHUwMDI2IGVyciAhPSAtRUFHQUlOKVxcbitcXHRcXHRwZHNjX2RlZmVycmVkX2RtYV9mcmVlKHBkc2MpO1xcbitcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG4rdm9pZCBwZHNjX2RlZmVycmVkX2RtYV9hZGQoc3RydWN0IHBkc2MgKnBkc2MsIHN0cnVjdCBwZHNjX2RlZmVycmVkX2RtYSAqZW50cnksXFxuK1xcdFxcdFxcdCAgIGRtYV9hZGRyX3QgZG1hX2FkZHIsIHZvaWQgKnZhLCBzaXplX3Qgc2l6ZSxcXG4rXFx0XFx0XFx0ICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKVxcbit7XFxuK1xcdGVudHJ5LVxcdTAwM2VkbWFfYWRkciA9IGRtYV9hZGRyO1xcbitcXHRlbnRyeS1cXHUwMDNldmEgPSB2YTtcXG4rXFx0ZW50cnktXFx1MDAzZXNpemUgPSBzaXplO1xcbitcXHRlbnRyeS1cXHUwMDNlZGlyID0gZGlyO1xcbitcXG4rXFx0c3Bpbl9sb2NrKFxcdTAwMjZwZHNjLVxcdTAwM2VkZWZlcnJlZF9kbWFfbG9jayk7XFxuK1xcdGxpc3RfYWRkX3RhaWwoXFx1MDAyNmVudHJ5LVxcdTAwM2VsaXN0LCBcXHUwMDI2cGRzYy1cXHUwMDNlZGVmZXJyZWRfZG1hX2xpc3QpO1xcbitcXHRzcGluX3VubG9jayhcXHUwMDI2cGRzYy1cXHUwMDNlZGVmZXJyZWRfZG1hX2xvY2spO1xcbit9XFxuK1xcbit2b2lkIHBkc2NfZGVmZXJyZWRfZG1hX2ZyZWUoc3RydWN0IHBkc2MgKnBkc2MpXFxuK3tcXG4rXFx0c3RydWN0IHBkc2NfZGVmZXJyZWRfZG1hICplbnRyeSwgKnRtcDtcXG4rXFx0TElTVF9IRUFEKGxvY2FsX2xpc3QpO1xcbitcXG4rXFx0c3Bpbl9sb2NrKFxcdTAwMjZwZHNjLVxcdTAwM2VkZWZlcnJlZF9kbWFfbG9jayk7XFxuK1xcdGxpc3Rfc3BsaWNlX2luaXQoXFx1MDAyNnBkc2MtXFx1MDAzZWRlZmVycmVkX2RtYV9saXN0LCBcXHUwMDI2bG9jYWxfbGlzdCk7XFxuK1xcdHNwaW5fdW5sb2NrKFxcdTAwMjZwZHNjLVxcdTAwM2VkZWZlcnJlZF9kbWFfbG9jayk7XFxuK1xcbitcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZW50cnksIHRtcCwgXFx1MDAyNmxvY2FsX2xpc3QsIGxpc3QpIHtcXG4rXFx0XFx0ZG1hX3VubWFwX3NpbmdsZShwZHNjLVxcdTAwM2VkZXYsIGVudHJ5LVxcdTAwM2VkbWFfYWRkcixcXG4rXFx0XFx0XFx0XFx0IGVudHJ5LVxcdTAwM2VzaXplLCBlbnRyeS1cXHUwMDNlZGlyKTtcXG4rXFx0XFx0a2ZyZWUoZW50cnktXFx1MDAzZXZhKTtcXG4rXFx0XFx0bGlzdF9kZWwoXFx1MDAyNmVudHJ5LVxcdTAwM2VsaXN0KTtcXG4rXFx0XFx0a2ZyZWUoZW50cnkpO1xcbitcXHR9XFxuK31cXG4rXFxuK2ludCBwZHNjX2RldmNtZF9sb2NrZWQoc3RydWN0IHBkc2MgKnBkc2MsIHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgKmNtZCxcXG4rXFx0XFx0ICAgICAgIHVuaW9uIHBkc19jb3JlX2Rldl9jb21wICpjb21wLCBpbnQgbWF4X3NlY29uZHMpXFxuK3tcXG4rXFx0cmV0dXJuIF9fcGRzY19kZXZjbWRfbG9ja2VkKHBkc2MsIGNtZCwgY29tcCwgbWF4X3NlY29uZHMsIHRydWUpO1xcbit9XFxuK1xcbitpbnQgcGRzY19kZXZjbWRfbG9ja2VkX25vbXNnKHN0cnVjdCBwZHNjICpwZHNjLCB1bmlvbiBwZHNfY29yZV9kZXZfY21kICpjbWQsXFxuK1xcdFxcdFxcdCAgICAgdW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgKmNvbXAsIGludCBtYXhfc2Vjb25kcylcXG4re1xcbitcXHRyZXR1cm4gX19wZHNjX2RldmNtZF9sb2NrZWQocGRzYywgY21kLCBjb21wLCBtYXhfc2Vjb25kcywgZmFsc2UpO1xcbit9XFxuK1xcbiBpbnQgcGRzY19kZXZjbWQoc3RydWN0IHBkc2MgKnBkc2MsIHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgKmNtZCxcXG4gXFx0XFx0dW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgKmNvbXAsIGludCBtYXhfc2Vjb25kcylcXG4ge1xcbkBAIC0yMTksNiArMjY4LDQ3IEBAIGludCBwZHNjX2RldmNtZChzdHJ1Y3QgcGRzYyAqcGRzYywgdW5pb24gcGRzX2NvcmVfZGV2X2NtZCAqY21kLFxcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IF9fcGRzY19kZXZjbWRfd2l0aF9kYXRhKHN0cnVjdCBwZHNjICpwZHNjLFxcbitcXHRcXHRcXHRcXHQgICB1bmlvbiBwZHNfY29yZV9kZXZfY21kICpjbWQsXFxuK1xcdFxcdFxcdFxcdCAgIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBkYXRhX2xlbixcXG4rXFx0XFx0XFx0XFx0ICAgdW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgKmNvbXAsXFxuK1xcdFxcdFxcdFxcdCAgIGludCBtYXhfc2Vjb25kcywgYm9vbCBkb19tc2cpXFxuK3tcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnBkc2MtXFx1MDAzZWRldmNtZF9sb2NrKTtcXG4rXFx0aWYgKCFwZHNjLVxcdTAwM2VjbWRfcmVncykge1xcbitcXHRcXHRlcnIgPSAtRU5YSU87XFxuK1xcdFxcdGdvdG8gdW5sb2NrO1xcbitcXHR9XFxuK1xcdGlmIChkYXRhX2xlbiBcXHUwMDNlIHNpemVvZihwZHNjLVxcdTAwM2VjbWRfcmVncy1cXHUwMDNlZGF0YSkpIHtcXG4rXFx0XFx0ZXJyID0gLUVOT1NQQztcXG4rXFx0XFx0Z290byB1bmxvY2s7XFxuK1xcdH1cXG4rXFx0bWVtY3B5X3RvaW8oXFx1MDAyNnBkc2MtXFx1MDAzZWNtZF9yZWdzLVxcdTAwM2VkYXRhLCBkYXRhLCBkYXRhX2xlbik7XFxuK1xcdGVyciA9IF9fcGRzY19kZXZjbWRfbG9ja2VkKHBkc2MsIGNtZCwgY29tcCwgbWF4X3NlY29uZHMsIGRvX21zZyk7XFxuK3VubG9jazpcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwZHNjLVxcdTAwM2VkZXZjbWRfbG9jayk7XFxuK1xcbitcXHRyZXR1cm4gZXJyO1xcbit9XFxuK1xcbitpbnQgcGRzY19kZXZjbWRfd2l0aF9kYXRhKHN0cnVjdCBwZHNjICpwZHNjLCB1bmlvbiBwZHNfY29yZV9kZXZfY21kICpjbWQsXFxuK1xcdFxcdFxcdCAgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGRhdGFfbGVuLFxcbitcXHRcXHRcXHQgIHVuaW9uIHBkc19jb3JlX2Rldl9jb21wICpjb21wLCBpbnQgbWF4X3NlY29uZHMpXFxuK3tcXG4rXFx0cmV0dXJuIF9fcGRzY19kZXZjbWRfd2l0aF9kYXRhKHBkc2MsIGNtZCwgZGF0YSwgZGF0YV9sZW4sXFxuK1xcdFxcdFxcdFxcdCAgICAgICBjb21wLCBtYXhfc2Vjb25kcywgdHJ1ZSk7XFxuK31cXG4rXFxuK2ludCBwZHNjX2RldmNtZF93aXRoX2RhdGFfbm9tc2coc3RydWN0IHBkc2MgKnBkc2MsIHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgKmNtZCxcXG4rXFx0XFx0XFx0XFx0Y29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGRhdGFfbGVuLFxcbitcXHRcXHRcXHRcXHR1bmlvbiBwZHNfY29yZV9kZXZfY29tcCAqY29tcCwgaW50IG1heF9zZWNvbmRzKVxcbit7XFxuK1xcdHJldHVybiBfX3Bkc2NfZGV2Y21kX3dpdGhfZGF0YShwZHNjLCBjbWQsIGRhdGEsIGRhdGFfbGVuLFxcbitcXHRcXHRcXHRcXHQgICAgICAgY29tcCwgbWF4X3NlY29uZHMsIGZhbHNlKTtcXG4rfVxcbitcXG4gaW50IHBkc2NfZGV2Y21kX2luaXQoc3RydWN0IHBkc2MgKnBkc2MpXFxuIHtcXG4gXFx0dW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgY29tcCA9IHt9O1xcbkBAIC0yNDIsMTUgKzMzMiwxNyBAQCBpbnQgcGRzY19kZXZjbWRfcmVzZXQoc3RydWN0IHBkc2MgKnBkc2MpXFxuIFxcdHJldHVybiBwZHNjX2RldmNtZChwZHNjLCBcXHUwMDI2Y21kLCBcXHUwMDI2Y29tcCwgcGRzYy1cXHUwMDNlZGV2Y21kX3RpbWVvdXQpO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IHBkc2NfZGV2Y21kX2lkZW50aWZ5X2xvY2tlZChzdHJ1Y3QgcGRzYyAqcGRzYylcXG4rc3RhdGljIGludCBwZHNjX2RldmNtZF9pZGVudGlmeV9sb2NrZWQoc3RydWN0IHBkc2MgKnBkc2MsIHU4IGRydl9pZGVudF92ZXIsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBib29sIGRvX21zZylcXG4ge1xcbiBcXHR1bmlvbiBwZHNfY29yZV9kZXZfY29tcCBjb21wID0ge307XFxuIFxcdHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgY21kID0ge1xcbiBcXHRcXHQuaWRlbnRpZnkub3Bjb2RlID0gUERTX0NPUkVfQ01EX0lERU5USUZZLFxcbi1cXHRcXHQuaWRlbnRpZnkudmVyID0gUERTX0NPUkVfSURFTlRJVFlfVkVSU0lPTl8xLFxcbitcXHRcXHQuaWRlbnRpZnkudmVyID0gZHJ2X2lkZW50X3ZlcixcXG4gXFx0fTtcXG4gXFxuLVxcdHJldHVybiBwZHNjX2RldmNtZF9sb2NrZWQocGRzYywgXFx1MDAyNmNtZCwgXFx1MDAyNmNvbXAsIHBkc2MtXFx1MDAzZWRldmNtZF90aW1lb3V0KTtcXG4rXFx0cmV0dXJuIF9fcGRzY19kZXZjbWRfbG9ja2VkKHBkc2MsIFxcdTAwMjZjbWQsIFxcdTAwMjZjb21wLCBwZHNjLVxcdTAwM2VkZXZjbWRfdGltZW91dCxcXG4rXFx0XFx0XFx0XFx0ICAgIGRvX21zZyk7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIHBkc2NfaW5pdF9kZXZpbmZvKHN0cnVjdCBwZHNjICpwZHNjKVxcbkBAIC0yNzMsOCArMzY1LDkgQEAgc3RhdGljIHZvaWQgcGRzY19pbml0X2RldmluZm8oc3RydWN0IHBkc2MgKnBkc2MpXFxuIFxcdGRldl9kYmcocGRzYy1cXHUwMDNlZGV2LCBcXFwiZndfdmVyc2lvbiAlc1xcXFxuXFxcIiwgcGRzYy1cXHUwMDNlZGV2X2luZm8uZndfdmVyc2lvbik7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgcGRzY19pZGVudGlmeShzdHJ1Y3QgcGRzYyAqcGRzYylcXG4rc3RhdGljIGludCBwZHNjX2lkZW50aWZ5X3ZlcihzdHJ1Y3QgcGRzYyAqcGRzYywgdTggZHJ2X2lkZW50X3ZlcilcXG4ge1xcbitcXHRib29sIGRvX21zZyA9IGRydl9pZGVudF92ZXIgPT0gUERTX0NPUkVfSURFTlRJVFlfVkVSU0lPTl8xO1xcbiBcXHRzdHJ1Y3QgcGRzX2NvcmVfZHJ2X2lkZW50aXR5IGRydiA9IHt9O1xcbiBcXHRzaXplX3Qgc3o7XFxuIFxcdGludCBlcnI7XFxuQEAgLTI5NywxOSArMzkwLDIyIEBAIHN0YXRpYyBpbnQgcGRzY19pZGVudGlmeShzdHJ1Y3QgcGRzYyAqcGRzYylcXG4gXFx0c3ogPSBtaW5fdChzaXplX3QsIHNpemVvZihkcnYpLCBzaXplb2YocGRzYy1cXHUwMDNlY21kX3JlZ3MtXFx1MDAzZWRhdGEpKTtcXG4gXFx0bWVtY3B5X3RvaW8oXFx1MDAyNnBkc2MtXFx1MDAzZWNtZF9yZWdzLVxcdTAwM2VkYXRhLCBcXHUwMDI2ZHJ2LCBzeik7XFxuIFxcbi1cXHRlcnIgPSBwZHNjX2RldmNtZF9pZGVudGlmeV9sb2NrZWQocGRzYyk7XFxuK1xcdGVyciA9IHBkc2NfZGV2Y21kX2lkZW50aWZ5X2xvY2tlZChwZHNjLCBkcnZfaWRlbnRfdmVyLCBkb19tc2cpO1xcbiBcXHRpZiAoIWVycikge1xcbiBcXHRcXHRzeiA9IG1pbl90KHNpemVfdCwgc2l6ZW9mKHBkc2MtXFx1MDAzZWRldl9pZGVudCksXFxuIFxcdFxcdFxcdCAgIHNpemVvZihwZHNjLVxcdTAwM2VjbWRfcmVncy1cXHUwMDNlZGF0YSkpO1xcbiBcXHRcXHRtZW1jcHlfZnJvbWlvKFxcdTAwMjZwZHNjLVxcdTAwM2VkZXZfaWRlbnQsIFxcdTAwMjZwZHNjLVxcdTAwM2VjbWRfcmVncy1cXHUwMDNlZGF0YSwgc3opO1xcbitcXG4rXFx0XFx0LyogVjEgZmlybXdhcmUgZG9lc24ndCBzZXQgY2FwYWJpbGl0aWVzLCBzbyB0aGUgZmllbGQgbWF5XFxuK1xcdFxcdCAqIGNvbnRhaW4gZ2FyYmFnZSBmcm9tIHRoZSBvdXRnb2luZyBkcml2ZXIgaWRlbnRpdHkuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAocGRzYy1cXHUwMDNlZGV2X2lkZW50LnZlcnNpb24gXFx1MDAzYyBQRFNfQ09SRV9JREVOVElUWV9WRVJTSU9OXzIpXFxuK1xcdFxcdFxcdHBkc2MtXFx1MDAzZWRldl9pZGVudC5jYXBhYmlsaXRpZXMgPSAwO1xcbiBcXHR9XFxuIFxcdG11dGV4X3VubG9jayhcXHUwMDI2cGRzYy1cXHUwMDNlZGV2Y21kX2xvY2spO1xcbiBcXG4tXFx0aWYgKGVycikge1xcbi1cXHRcXHRkZXZfZXJyKHBkc2MtXFx1MDAzZWRldiwgXFxcIkNhbm5vdCBpZGVudGlmeSBkZXZpY2U6ICVwZVxcXFxuXFxcIixcXG4tXFx0XFx0XFx0RVJSX1BUUihlcnIpKTtcXG4rXFx0aWYgKGVycilcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4tXFx0fVxcbiBcXG4gXFx0aWYgKGlzcHJpbnQocGRzYy1cXHUwMDNlZGV2X2luZm8uZndfdmVyc2lvblswXSkgXFx1MDAyNlxcdTAwMjZcXG4gXFx0ICAgIGlzYXNjaWkocGRzYy1cXHUwMDNlZGV2X2luZm8uZndfdmVyc2lvblswXSkpXFxuQEAgLTMyNiw2ICs0MjIsMjYgQEAgc3RhdGljIGludCBwZHNjX2lkZW50aWZ5KHN0cnVjdCBwZHNjICpwZHNjKVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rc3RhdGljIGludCBwZHNjX2lkZW50aWZ5KHN0cnVjdCBwZHNjICpwZHNjKVxcbit7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHQvKiBPbGRlciBmaXJtd2FyZSByZWplY3RzIGFueXRoaW5nIGJ1dCBQRFNfQ09SRV9JREVOVElUWV9WRVJTSU9OXzFcXG4rXFx0ICogd2l0aCBQRFNfUkNfRVZFUlNJT04gKC1FSU5WQUwpLCBzbyByZXRyeSB3aXRoIFYxIG9uIHZlcnNpb25cXG4rXFx0ICogcmVqZWN0aW9uLiBEb24ndCByZXRyeSBvbiBvdGhlciBlcnJvcnMgbGlrZSAtRU5YSU8vLUVUSU1FRE9VVFxcbitcXHQgKiB3aGljaCBpbmRpY2F0ZSBmaXJtd2FyZSBpcyBub3QgcnVubmluZyBvciBodW5nLlxcbitcXHQgKi9cXG4rXFx0ZXJyID0gcGRzY19pZGVudGlmeV92ZXIocGRzYywgUERTX0NPUkVfSURFTlRJVFlfVkVSU0lPTl8yKTtcXG4rXFx0aWYgKGVyciA9PSAtRUlOVkFMKVxcbitcXHRcXHRlcnIgPSBwZHNjX2lkZW50aWZ5X3ZlcihwZHNjLCBQRFNfQ09SRV9JREVOVElUWV9WRVJTSU9OXzEpO1xcbitcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0ZGV2X2VycihwZHNjLVxcdTAwM2VkZXYsIFxcXCJDYW5ub3QgaWRlbnRpZnkgZGV2aWNlOiAlcGVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdEVSUl9QVFIoZXJyKSk7XFxuK1xcbitcXHRyZXR1cm4gZXJyO1xcbit9XFxuK1xcbiB2b2lkIHBkc2NfZGV2X3VuaW5pdChzdHJ1Y3QgcGRzYyAqcGRzYylcXG4ge1xcbiBcXHRpZiAocGRzYy1cXHUwMDNlaW50cl9pbmZvKSB7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9kZXZsaW5rLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvZGV2bGluay5jXFxuaW5kZXggOGFkYWU3YjE4ODk4ZC4uNjNmZTQ1ZTkxZjcxMCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvZGV2bGluay5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL2RldmxpbmsuY1xcbkBAIC05MCwxMyArOTAsMTEyIEBAIGludCBwZHNjX2RsX2ZsYXNoX3VwZGF0ZShzdHJ1Y3QgZGV2bGluayAqZGwsXFxuIHtcXG4gXFx0c3RydWN0IHBkc2MgKnBkc2MgPSBkZXZsaW5rX3ByaXYoZGwpO1xcbiBcXG4tXFx0aWYgKHBhcmFtcy1cXHUwMDNlY29tcG9uZW50KSB7XFxuLVxcdFxcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXFxuLVxcdFxcdFxcdFxcdCAgIFxcXCJDb21wb25lbnQgdXBkYXRlIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBkZXZpY2VcXFwiKTtcXG4tXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHRyZXR1cm4gcGRzY19maXJtd2FyZV91cGRhdGUocGRzYywgcGFyYW1zLCBleHRhY2spO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHBkc2NfZGxfcmVwb3J0X2NvbXBvbmVudChzdHJ1Y3QgZGV2bGlua19pbmZvX3JlcSAqcmVxLFxcbitcXHRcXHRcXHRcXHQgICAgc3RydWN0IHBkc19jb3JlX2Z3X2NvbXBvbmVudF9pbmZvICppbmZvKVxcbit7XFxuK1xcdGVudW0gZGV2bGlua19pbmZvX3ZlcnNpb25fdHlwZSB2ZXJfdHlwZTtcXG4rXFx0dTE2IGZsYWdzID0gbGUxNl90b19jcHUoaW5mby1cXHUwMDNlZmxhZ3MpO1xcbitcXHRjaGFyICp2ZXIgPSBpbmZvLVxcdTAwM2V2ZXJzaW9uO1xcbitcXHRjb25zdCBjaGFyICpuYW1lO1xcbitcXHRjaGFyIGJ1ZlszMl07XFxuK1xcbitcXHQvKiBNYWluIGZpcm13YXJlIGlzIHJlcG9ydGVkIGFzIGdlbmVyaWMgXFxcImZ3XFxcIiAqL1xcbitcXHRpZiAoaW5mby1cXHUwMDNlY29tcG9uZW50X3R5cGUgPT0gUERTX0NPUkVfRldfVFlQRV9NQUlOKSB7XFxuK1xcdFxcdGlmIChpbmZvLVxcdTAwM2VzbG90X2lkID09IFBEU19DT1JFX0ZXX1NMT1RfR09MRClcXG4rXFx0XFx0XFx0c25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgXFxcImZ3LmdvbGRcXFwiKTtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBcXFwiZndcXFwiKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0bmFtZSA9IHBkc2NfZndfdHlwZV90b19uYW1lKGluZm8tXFx1MDAzZWNvbXBvbmVudF90eXBlKTtcXG4rXFx0XFx0aWYgKCFuYW1lKVxcbitcXHRcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdFxcdGlmIChpbmZvLVxcdTAwM2VzbG90X2lkID09IFBEU19DT1JFX0ZXX1NMT1RfR09MRClcXG4rXFx0XFx0XFx0c25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgXFxcImZ3LiVzLmdvbGRcXFwiLCBuYW1lKTtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBcXFwiZncuJXNcXFwiLCBuYW1lKTtcXG4rXFx0fVxcbitcXG4rXFx0dmVyX3R5cGUgPSBERVZMSU5LX0lORk9fVkVSU0lPTl9UWVBFX05PTkU7XFxuK1xcdGlmIChmbGFncyBcXHUwMDI2IFBEU19DT1JFX0ZXX0NPTVBPTkVOVF9JTkZPX0ZfVVBEQVRFX0JZX05BTUUpXFxuK1xcdFxcdHZlcl90eXBlID0gREVWTElOS19JTkZPX1ZFUlNJT05fVFlQRV9DT01QT05FTlQ7XFxuK1xcbitcXHRpZiAoZmxhZ3MgXFx1MDAyNiBQRFNfQ09SRV9GV19DT01QT05FTlRfSU5GT19GX0ZJWEVEKSB7XFxuK1xcdFxcdGludCBlcnI7XFxuK1xcbitcXHRcXHRlcnIgPSBkZXZsaW5rX2luZm9fdmVyc2lvbl9maXhlZF9wdXQocmVxLCBidWYsIHZlcik7XFxuK1xcdFxcdGlmIChlcnIpXFxuK1xcdFxcdFxcdHJldHVybiBlcnI7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChmbGFncyBcXHUwMDI2IFBEU19DT1JFX0ZXX0NPTVBPTkVOVF9JTkZPX0ZfUlVOTklORykge1xcbitcXHRcXHRpbnQgZXJyO1xcbitcXG4rXFx0XFx0ZXJyID0gZGV2bGlua19pbmZvX3ZlcnNpb25fcnVubmluZ19wdXRfZXh0KHJlcSwgYnVmLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICB2ZXIsIHZlcl90eXBlKTtcXG4rXFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gXFx0fVxcbiBcXG4tXFx0cmV0dXJuIHBkc2NfZmlybXdhcmVfdXBkYXRlKHBkc2MsIHBhcmFtcy1cXHUwMDNlZncsIGV4dGFjayk7XFxuK1xcdGlmIChmbGFncyBcXHUwMDI2IFBEU19DT1JFX0ZXX0NPTVBPTkVOVF9JTkZPX0ZfU1RBUlRVUCkge1xcbitcXHRcXHRpbnQgZXJyO1xcbitcXG4rXFx0XFx0ZXJyID0gZGV2bGlua19pbmZvX3ZlcnNpb25fc3RvcmVkX3B1dF9leHQocmVxLCBidWYsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgdmVyLCB2ZXJfdHlwZSk7XFxuK1xcdFxcdGlmIChlcnIpXFxuK1xcdFxcdFxcdHJldHVybiBlcnI7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHBkc2NfZGxfcmVwb3J0X2Z3X3ZlcihzdHJ1Y3QgZGV2bGlua19pbmZvX3JlcSAqcmVxLCBjaGFyICpmd192ZXIpXFxuK3tcXG4rXFx0cmV0dXJuIGRldmxpbmtfaW5mb192ZXJzaW9uX3J1bm5pbmdfcHV0KHJlcSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0REVWTElOS19JTkZPX1ZFUlNJT05fR0VORVJJQ19GVyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ZndfdmVyKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBwZHNjX2RsX2NvbXBvbmVudF9pbmZvX2dldChzdHJ1Y3QgZGV2bGluayAqZGwsXFxuK1xcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBkZXZsaW5rX2luZm9fcmVxICpyZXEsXFxuK1xcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4re1xcbitcXHRzdHJ1Y3QgcGRzYyAqcGRzYyA9IGRldmxpbmtfcHJpdihkbCk7XFxuK1xcdHU4IG51bV9jb21wb25lbnRzO1xcbitcXHRpbnQgZXJyO1xcbitcXHRpbnQgaTtcXG4rXFxuK1xcdC8qIFBhaXJzIHdpdGggV1JJVEVfT05DRSBpbiBwZHNjX2Z3X2NvbXBvbmVudHNfaW52YWxpZGF0ZSgpLlxcbitcXHQgKiBVc2UgUkVBRF9PTkNFIHRvIGdldCBhIGNvbnNpc3RlbnQgc25hcHNob3Qgb2YgbnVtX2NvbXBvbmVudHMuXFxuK1xcdCAqIHBkc2NfZndfY29tcG9uZW50c19pbnZhbGlkYXRlKCkgY2FuIHplcm8gaXQgY29uY3VycmVudGx5IGR1cmluZ1xcbitcXHQgKiBmaXJtd2FyZSByZWNvdmVyeTsgdXNpbmcgdGhlIGxvY2FsIGNvcHkgYXZvaWRzIGl0ZXJhdGluZyB6ZXJvXFxuK1xcdCAqIHRpbWVzIHdoZW4gd2UgYWxyZWFkeSBkZWNpZGVkIHRoZSBjYWNoZSB3YXMgdmFsaWQuXFxuK1xcdCAqL1xcbitcXHRudW1fY29tcG9uZW50cyA9IFJFQURfT05DRShwZHNjLVxcdTAwM2Vmd19jb21wb25lbnRzLm51bV9jb21wb25lbnRzKTtcXG4rXFx0aWYgKCFudW1fY29tcG9uZW50cykge1xcbitcXHRcXHRlcnIgPSBwZHNjX2dldF9jb21wb25lbnRfaW5mbyhwZHNjKTtcXG4rXFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0cmV0dXJuIHBkc2NfZGxfcmVwb3J0X2Z3X3ZlcihyZXEsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICBwZHNjLVxcdTAwM2VkZXZfaW5mby5md192ZXJzaW9uKTtcXG4rXFx0XFx0bnVtX2NvbXBvbmVudHMgPSBSRUFEX09OQ0UocGRzYy1cXHUwMDNlZndfY29tcG9uZW50cy5udW1fY29tcG9uZW50cyk7XFxuK1xcdFxcdGlmICghbnVtX2NvbXBvbmVudHMpXFxuK1xcdFxcdFxcdHJldHVybiBwZHNjX2RsX3JlcG9ydF9md192ZXIocmVxLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgcGRzYy1cXHUwMDNlZGV2X2luZm8uZndfdmVyc2lvbik7XFxuK1xcdH1cXG4rXFxuK1xcdG51bV9jb21wb25lbnRzID0gbWluX3QodTE2LCBudW1fY29tcG9uZW50cyxcXG4rXFx0XFx0XFx0ICAgICAgIGxlMTZfdG9fY3B1KHBkc2MtXFx1MDAzZWRldl9pZGVudC5tYXhfZndfc2xvdHMpKTtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG51bV9jb21wb25lbnRzOyBpKyspIHtcXG4rXFx0XFx0ZXJyID0gcGRzY19kbF9yZXBvcnRfY29tcG9uZW50KHJlcSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZwZHNjLVxcdTAwM2Vmd19jb21wb25lbnRzLmluZm9baV0pO1xcbitcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4gc3RhdGljIGNoYXIgKmZ3X3Nsb3RuYW1lc1tdID0ge1xcbkBAIC0xMDUsOCArMjA0LDkgQEAgc3RhdGljIGNoYXIgKmZ3X3Nsb3RuYW1lc1tdID0ge1xcbiBcXHRcXFwiZncubWFpbmZ3YlxcXCIsXFxuIH07XFxuIFxcbi1pbnQgcGRzY19kbF9pbmZvX2dldChzdHJ1Y3QgZGV2bGluayAqZGwsIHN0cnVjdCBkZXZsaW5rX2luZm9fcmVxICpyZXEsXFxuLVxcdFxcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbitzdGF0aWMgaW50IHBkc2NfZGxfZndfbGlzdF9pbmZvX2dldChzdHJ1Y3QgZGV2bGluayAqZGwsXFxuK1xcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgZGV2bGlua19pbmZvX3JlcSAqcmVxLFxcbitcXHRcXHRcXHRcXHQgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbiB7XFxuIFxcdHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgY21kID0ge1xcbiBcXHRcXHQuZndfY29udHJvbC5vcGNvZGUgPSBQRFNfQ09SRV9DTURfRldfQ09OVFJPTCxcXG5AQCAtMTQwLDEyICsyNDAsNDEgQEAgaW50IHBkc2NfZGxfaW5mb19nZXQoc3RydWN0IGRldmxpbmsgKmRsLCBzdHJ1Y3QgZGV2bGlua19pbmZvX3JlcSAqcmVxLFxcbiBcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXHR9XFxuIFxcbi1cXHRlcnIgPSBkZXZsaW5rX2luZm9fdmVyc2lvbl9ydW5uaW5nX3B1dChyZXEsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICAgICBERVZMSU5LX0lORk9fVkVSU0lPTl9HRU5FUklDX0ZXLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgICAgcGRzYy1cXHUwMDNlZGV2X2luZm8uZndfdmVyc2lvbik7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHBkc2NfZGxfaW5mb19nZXRfdjEoc3RydWN0IGRldmxpbmsgKmRsLFxcbitcXHRcXHRcXHQgICAgICAgc3RydWN0IGRldmxpbmtfaW5mb19yZXEgKnJlcSxcXG4rXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4re1xcbitcXHRzdHJ1Y3QgcGRzYyAqcGRzYyA9IGRldmxpbmtfcHJpdihkbCk7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHRlcnIgPSBwZHNjX2RsX2Z3X2xpc3RfaW5mb19nZXQoZGwsIHJlcSwgZXh0YWNrKTtcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4gXFxuK1xcdC8qIFZlcnNpb24gMTogcmVwb3J0IGZ3IGZyb20gZGV2X2luZm8gKHJ1bm5pbmcgb25seSkgKi9cXG4rXFx0cmV0dXJuIHBkc2NfZGxfcmVwb3J0X2Z3X3ZlcihyZXEsIHBkc2MtXFx1MDAzZWRldl9pbmZvLmZ3X3ZlcnNpb24pO1xcbit9XFxuK1xcbitpbnQgcGRzY19kbF9pbmZvX2dldChzdHJ1Y3QgZGV2bGluayAqZGwsIHN0cnVjdCBkZXZsaW5rX2luZm9fcmVxICpyZXEsXFxuK1xcdFxcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbit7XFxuK1xcdHN0cnVjdCBwZHNjICpwZHNjID0gZGV2bGlua19wcml2KGRsKTtcXG4rXFx0Y2hhciBidWZbMzJdO1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0aWYgKHBkc2MtXFx1MDAzZWRldl9pZGVudC52ZXJzaW9uIFxcdTAwM2U9IFBEU19DT1JFX0lERU5USVRZX1ZFUlNJT05fMikge1xcbitcXHRcXHRlcnIgPSBwZHNjX2RsX2NvbXBvbmVudF9pbmZvX2dldChkbCwgcmVxLCBleHRhY2spO1xcbitcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRlcnIgPSBwZHNjX2RsX2luZm9fZ2V0X3YxKGRsLCByZXEsIGV4dGFjayk7XFxuK1xcdFxcdGlmIChlcnIpXFxuK1xcdFxcdFxcdHJldHVybiBlcnI7XFxuK1xcdH1cXG4rXFxuIFxcdHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIFxcXCIweCV4XFxcIiwgcGRzYy1cXHUwMDNlZGV2X2luZm8uYXNpY190eXBlKTtcXG4gXFx0ZXJyID0gZGV2bGlua19pbmZvX3ZlcnNpb25fZml4ZWRfcHV0KHJlcSxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICBERVZMSU5LX0lORk9fVkVSU0lPTl9HRU5FUklDX0FTSUNfSUQsXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9mdy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL2Z3LmNcXG5pbmRleCBmYTYyNjcxOWU2OGQxLi41Y2NmMDE3ZjZhZjQ3IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9mdy5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL2Z3LmNcXG5AQCAtMSw2ICsxLDkgQEBcXG4gLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gLyogQ29weXJpZ2h0KGMpIDIwMjMgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jICovXFxuIFxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcGxkbWZ3LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC92bWFsbG9jLmhcXHUwMDNlXFxuK1xcbiAjaW5jbHVkZSBcXFwiY29yZS5oXFxcIlxcbiBcXG4gLyogVGhlIHdvcnN0IGNhc2Ugd2FpdCBmb3IgdGhlIGluc3RhbGwgYWN0aXZpdHkgaXMgYWJvdXQgMjUgbWludXRlcyB3aGVuXFxuQEAgLTE0LDYgKzE3LDU4IEBAXFxuIC8qIE51bWJlciBvZiBwZXJpb2RpYyBsb2cgdXBkYXRlcyBkdXJpbmcgZncgZmlsZSBkb3dubG9hZCAqL1xcbiAjZGVmaW5lIFBEU0NfRldfSU5URVJWQUxfRlJBQ1RJT05cXHQzMlxcbiBcXG4rI2RlZmluZSBQRFNDX0ZXX0NPTVBPTkVOVF9QUkVGSVhcXHRcXHRcXFwiZncuXFxcIlxcbisjZGVmaW5lIFBEU0NfRldfQ09NUE9ORU5UX0ZVTExfTkFNRV9CVUZMRU4gXFxcXFxcbitcXHQoc2l6ZW9mKFBEU0NfRldfQ09NUE9ORU5UX1BSRUZJWCkgKyBQRFNfQ09SRV9GV19DT01QT05FTlRfTkFNRV9CVUZMRU4pXFxuK1xcbisvKiBEcml2ZXItZGVmaW5lZCBjb21wb25lbnQgdHlwZSB0byBuYW1lIG1hcHBpbmcuXFxuKyAqIFBEU19DT1JFX0ZXX1RZUEVfTUFJTiBpcyBOVUxMIC0gaGFuZGxlZCBzcGVjaWFsbHkgYXMgXFxcImZ3XFxcIiB3aXRob3V0IHByZWZpeC5cXG4rICovXFxuK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgcGRzY19md190eXBlX25hbWVzW10gPSB7XFxuK1xcdFtQRFNfQ09SRV9GV19UWVBFX01BSU5dICAgICAgPSBOVUxMLFxcbitcXHRbUERTX0NPUkVfRldfVFlQRV9CT09UXSAgICAgID0gXFxcImJvb3Rsb2FkZXJcXFwiLFxcbitcXHRbUERTX0NPUkVfRldfVFlQRV9DUExEXSAgICAgID0gXFxcImNwbGRcXFwiLFxcbitcXHRbUERTX0NPUkVfRldfVFlQRV9TRUNVUkVdICAgID0gXFxcInNlY3VyZVxcXCIsXFxuK1xcdFtQRFNfQ09SRV9GV19UWVBFX0ZQR0FdICAgICAgPSBcXFwiZnBnYVxcXCIsXFxuK1xcdFtQRFNfQ09SRV9GV19UWVBFX1NVQ19NQUlOXSAgPSBcXFwic3VjXFxcIixcXG4rXFx0W1BEU19DT1JFX0ZXX1RZUEVfU1VDX0JPT1RdICA9IFxcXCJzdWMuYm9vdGxvYWRlclxcXCIsXFxuK1xcdFtQRFNfQ09SRV9GV19UWVBFX1VCT09UXSAgICAgPSBcXFwidWJvb3RcXFwiLFxcbit9O1xcbitcXG4rY29uc3QgY2hhciAqcGRzY19md190eXBlX3RvX25hbWUodTggdHlwZSlcXG4re1xcbitcXHRpZiAodHlwZSBcXHUwMDNjIEFSUkFZX1NJWkUocGRzY19md190eXBlX25hbWVzKSBcXHUwMDI2XFx1MDAyNiBwZHNjX2Z3X3R5cGVfbmFtZXNbdHlwZV0pXFxuK1xcdFxcdHJldHVybiBwZHNjX2Z3X3R5cGVfbmFtZXNbdHlwZV07XFxuK1xcdHJldHVybiBOVUxMO1xcbit9XFxuK1xcbit2b2lkIHBkc2NfZndfY29tcG9uZW50c19pbnZhbGlkYXRlKHN0cnVjdCBwZHNjICpwZHNjKVxcbit7XFxuK1xcdC8qIFBhaXJzIHdpdGggUkVBRF9PTkNFIGluIHBkc2NfZGxfY29tcG9uZW50X2luZm9fZ2V0KCkgKi9cXG4rXFx0V1JJVEVfT05DRShwZHNjLVxcdTAwM2Vmd19jb21wb25lbnRzLm51bV9jb21wb25lbnRzLCAwKTtcXG4rfVxcbitcXG4rc3RhdGljIHU4IHBkc2NfbmFtZV90b19md190eXBlKGNvbnN0IGNoYXIgKm5hbWUpXFxuK3tcXG4rXFx0c2l6ZV90IHByZWZpeF9sZW47XFxuK1xcdGludCBpO1xcbitcXG4rXFx0LyogXFxcImZ3XFxcIiB3aXRob3V0IHN1ZmZpeCBtYXBzIHRvIG1haW4gZmlybXdhcmUgKi9cXG4rXFx0aWYgKCFzdHJjbXAobmFtZSwgXFxcImZ3XFxcIikpXFxuK1xcdFxcdHJldHVybiBQRFNfQ09SRV9GV19UWVBFX01BSU47XFxuK1xcbitcXHRwcmVmaXhfbGVuID0gc3RyX2hhc19wcmVmaXgobmFtZSwgUERTQ19GV19DT01QT05FTlRfUFJFRklYKTtcXG4rXFx0aWYgKHByZWZpeF9sZW4pXFxuK1xcdFxcdG5hbWUgKz0gcHJlZml4X2xlbjtcXG4rXFxuK1xcdGZvciAoaSA9IDE7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKHBkc2NfZndfdHlwZV9uYW1lcyk7IGkrKykge1xcbitcXHRcXHRpZiAocGRzY19md190eXBlX25hbWVzW2ldIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICAhc3RyY21wKG5hbWUsIHBkc2NfZndfdHlwZV9uYW1lc1tpXSkpXFxuK1xcdFxcdFxcdHJldHVybiBpO1xcbitcXHR9XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IHBkc2NfZGV2Y21kX2Z3X2Rvd25sb2FkX2xvY2tlZChzdHJ1Y3QgcGRzYyAqcGRzYywgdTY0IGFkZHIsXFxuIFxcdFxcdFxcdFxcdFxcdCAgdTMyIG9mZnNldCwgdTMyIGxlbmd0aClcXG4ge1xcbkBAIC0yMyw3ICs3OCw3IEBAIHN0YXRpYyBpbnQgcGRzY19kZXZjbWRfZndfZG93bmxvYWRfbG9ja2VkKHN0cnVjdCBwZHNjICpwZHNjLCB1NjQgYWRkcixcXG4gXFx0XFx0LmZ3X2Rvd25sb2FkLmFkZHIgPSBjcHVfdG9fbGU2NChhZGRyKSxcXG4gXFx0XFx0LmZ3X2Rvd25sb2FkLmxlbmd0aCA9IGNwdV90b19sZTMyKGxlbmd0aCksXFxuIFxcdH07XFxuLVxcdHVuaW9uIHBkc19jb3JlX2Rldl9jb21wIGNvbXA7XFxuK1xcdHVuaW9uIHBkc19jb3JlX2Rldl9jb21wIGNvbXAgPSB7fTtcXG4gXFxuIFxcdHJldHVybiBwZHNjX2RldmNtZF9sb2NrZWQocGRzYywgXFx1MDAyNmNtZCwgXFx1MDAyNmNvbXAsIHBkc2MtXFx1MDAzZWRldmNtZF90aW1lb3V0KTtcXG4gfVxcbkBAIC05NSw5ICsxNTAsMTIgQEAgc3RhdGljIGludCBwZHNjX2Z3X3N0YXR1c19sb25nX3dhaXQoc3RydWN0IHBkc2MgKnBkc2MsXFxuIFxcdHJldHVybiBlcnI7XFxuIH1cXG4gXFxuLWludCBwZHNjX2Zpcm13YXJlX3VwZGF0ZShzdHJ1Y3QgcGRzYyAqcGRzYywgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdyxcXG4tXFx0XFx0XFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4rc3RhdGljIGludFxcbitwZHNjX2xlZ2FjeV9maXJtd2FyZV91cGRhdGUoc3RydWN0IHBkc2MgKnBkc2MsXFxuK1xcdFxcdFxcdCAgICBzdHJ1Y3QgZGV2bGlua19mbGFzaF91cGRhdGVfcGFyYW1zICpwYXJhbXMsXFxuK1xcdFxcdFxcdCAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuIHtcXG4rXFx0Y29uc3Qgc3RydWN0IGZpcm13YXJlICpmdyA9IHBhcmFtcy1cXHUwMDNlZnc7XFxuIFxcdHUzMiBidWZfc3osIGNvcHlfc3osIG9mZnNldDtcXG4gXFx0c3RydWN0IGRldmxpbmsgKmRsO1xcbiBcXHRpbnQgbmV4dF9pbnRlcnZhbDtcXG5AQCAtMTA1LDYgKzE2MywxMiBAQCBpbnQgcGRzY19maXJtd2FyZV91cGRhdGUoc3RydWN0IHBkc2MgKnBkc2MsIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncsXFxuIFxcdGludCBlcnIgPSAwO1xcbiBcXHRpbnQgZndfc2xvdDtcXG4gXFxuK1xcdGlmIChwYXJhbXMtXFx1MDAzZWNvbXBvbmVudCkge1xcbitcXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxcbitcXHRcXHRcXHRcXHQgICBcXFwiQ29tcG9uZW50IHVwZGF0ZSBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgZGV2aWNlXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0fVxcbitcXG4gXFx0ZGV2X2luZm8ocGRzYy1cXHUwMDNlZGV2LCBcXFwiSW5zdGFsbGluZyBmaXJtd2FyZVxcXFxuXFxcIik7XFxuIFxcbiBcXHRpZiAoIXBkc2MtXFx1MDAzZWNtZF9yZWdzKVxcbkBAIC0xOTUsMyArMjU5LDcyOSBAQCBpbnQgcGRzY19maXJtd2FyZV91cGRhdGUoc3RydWN0IHBkc2MgKnBkc2MsIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgIE5VTEwsIDAsIDApO1xcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuK1xcbitzdHJ1Y3QgcGRzY19jb21wb25lbnRfcHJpdiB7XFxuK1xcdHUxNiBjb21wb25lbnRfaWQ7XFxuK1xcdGJvb2wgc2tpcDtcXG4rXFx0c3RydWN0IGxpc3RfaGVhZCBsaXN0X2VudHJ5O1xcbit9O1xcbitcXG4rc3RydWN0IHBkc19jb3JlX2Z3dV9wcml2IHtcXG4rXFx0c3RydWN0IHBsZG1mdyBjb250ZXh0O1xcbitcXHRzdHJ1Y3QgZGV2bGlua19mbGFzaF91cGRhdGVfcGFyYW1zICpwYXJhbXM7XFxuK1xcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaztcXG4rXFx0c3RydWN0IHBkc2MgKnBkc2M7XFxuK1xcdHN0cnVjdCBsaXN0X2hlYWQgY29tcG9uZW50cztcXG4rXFx0Ym9vbCBjb21wb25lbnRfZm91bmQ7XFxuK307XFxuK1xcbitzdGF0aWMgdm9pZCBwZHNjX2ZyZWVfZnd1X3ByaXYoc3RydWN0IHBkc19jb3JlX2Z3dV9wcml2ICpwcml2KVxcbit7XFxuK1xcdHN0cnVjdCBwZHNjX2NvbXBvbmVudF9wcml2ICpjb21wb25lbnRfcHJpdiwgKnRtcDtcXG4rXFxuK1xcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjb21wb25lbnRfcHJpdiwgdG1wLCBcXHUwMDI2cHJpdi1cXHUwMDNlY29tcG9uZW50cyxcXG4rXFx0XFx0XFx0XFx0IGxpc3RfZW50cnkpIHtcXG4rXFx0XFx0bGlzdF9kZWwoXFx1MDAyNmNvbXBvbmVudF9wcml2LVxcdTAwM2VsaXN0X2VudHJ5KTtcXG4rXFx0XFx0a2ZyZWUoY29tcG9uZW50X3ByaXYpO1xcbitcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcGRzY19kZXZjbWRfbWF0Y2hfcmVjb3JkX2Rlc2Moc3RydWN0IHBkc2MgKnBkc2MsIHUxNiBkZXNjX3R5cGUsXFxuK1xcdFxcdFxcdFxcdFxcdCB1MTYgZGVzY19zaXplLCBjb25zdCB1OCAqZGVzY19kYXRhLFxcbitcXHRcXHRcXHRcXHRcXHQgdTggKm1hdGNoKVxcbit7XFxuK1xcdHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgY21kID0ge1xcbitcXHRcXHQubWF0Y2hfcmVjb3JkX2Rlc2Mub3Bjb2RlID0gUERTX0NPUkVfQ01EX01BVENIX1JFQ09SRF9ERVNDLFxcbitcXHRcXHQubWF0Y2hfcmVjb3JkX2Rlc2MudmVyID0gMSxcXG4rXFx0XFx0Lm1hdGNoX3JlY29yZF9kZXNjLnR5cGUgPSBjcHVfdG9fbGUxNihkZXNjX3R5cGUpLFxcbitcXHRcXHQubWF0Y2hfcmVjb3JkX2Rlc2Muc2l6ZSA9IGNwdV90b19sZTE2KGRlc2Nfc2l6ZSksXFxuK1xcdH07XFxuK1xcdHVuaW9uIHBkc19jb3JlX2Rldl9jb21wIGNvbXAgPSB7fTtcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdGVyciA9IHBkc2NfZGV2Y21kX3dpdGhfZGF0YShwZHNjLCBcXHUwMDI2Y21kLCBkZXNjX2RhdGEsIGRlc2Nfc2l6ZSxcXG4rXFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZjb21wLCBwZHNjLVxcdTAwM2VkZXZjbWRfdGltZW91dCk7XFxuK1xcdCptYXRjaCA9IGNvbXAubWF0Y2hfcmVjb3JkX2Rlc2MubWF0Y2g7XFxuK1xcbitcXHRyZXR1cm4gZXJyO1xcbit9XFxuK1xcbitzdGF0aWMgYm9vbCBwZHNjX21hdGNoX3JlY29yZF9kZXNjcyhzdHJ1Y3QgcGxkbWZ3ICpjb250ZXh0LFxcbitcXHRcXHRcXHRcXHQgICAgc3RydWN0IHBsZG1md19yZWNvcmQgKnJlY29yZClcXG4re1xcbitcXHRzdHJ1Y3QgcGRzX2NvcmVfZnd1X3ByaXYgKnByaXYgPVxcbitcXHRcXHRjb250YWluZXJfb2YoY29udGV4dCwgc3RydWN0IHBkc19jb3JlX2Z3dV9wcml2LCBjb250ZXh0KTtcXG4rXFx0c3RydWN0IHBkc2MgKnBkc2MgPSBwcml2LVxcdTAwM2VwZHNjO1xcbitcXHRzdHJ1Y3QgcGxkbWZ3X2Rlc2NfdGx2ICpkZXNjO1xcbitcXG4rXFx0aWYgKCFwbGRtZndfb3BfcGNpX21hdGNoX3JlY29yZChjb250ZXh0LCByZWNvcmQpKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGRlc2MsIFxcdTAwMjZyZWNvcmQtXFx1MDAzZWRlc2NzLCBlbnRyeSkge1xcbitcXHRcXHR1OCBtYXRjaDtcXG4rXFx0XFx0aW50IGVycjtcXG4rXFxuK1xcdFxcdHN3aXRjaCAoZGVzYy1cXHUwMDNldHlwZSkge1xcbitcXHRcXHQvKiBza2lwIHR5cGVzIGNoZWNrZWQgaW4gcGxkbWZ3X29wX3BjaV9tYXRjaF9yZWNvcmQgKi9cXG4rXFx0XFx0Y2FzZSBQTERNX0RFU0NfSURfUENJX1ZFTkRPUl9JRDpcXG4rXFx0XFx0Y2FzZSBQTERNX0RFU0NfSURfUENJX0RFVklDRV9JRDpcXG4rXFx0XFx0Y2FzZSBQTERNX0RFU0NfSURfUENJX1NVQlZFTkRPUl9JRDpcXG4rXFx0XFx0Y2FzZSBQTERNX0RFU0NfSURfUENJX1NVQkRFVl9JRDpcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGlmICghZGVzYy1cXHUwMDNlc2l6ZSlcXG4rXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0XFx0ZXJyID0gcGRzY19kZXZjbWRfbWF0Y2hfcmVjb3JkX2Rlc2MocGRzYywgZGVzYy1cXHUwMDNldHlwZSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgIGRlc2MtXFx1MDAzZXNpemUsIGRlc2MtXFx1MDAzZWRhdGEsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICBcXHUwMDI2bWF0Y2gpO1xcbitcXHRcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdFxcdGRldl9lcnIocGRzYy1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHRcXHRcXFwibWF0Y2hfcmVjb3JkX2Rlc2MgZmFpbGVkIHR5cGU6IDB4JTA0eCBzaXplOiAldSwgZXJyICVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHRkZXNjLVxcdTAwM2V0eXBlLCBkZXNjLVxcdTAwM2VzaXplLCBlcnIpO1xcbitcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdFxcdH1cXG4rXFx0XFx0LyogYWxsIHJlY29yZCBkZXNjcmlwdG9ycyBtdXN0IG1hdGNoICovXFxuK1xcdFxcdGlmICghbWF0Y2gpXFxuK1xcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIHRydWU7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcGRzY19kZXZjbWRfc2VuZF9wYWNrYWdlX2RhdGEoc3RydWN0IHBkc2MgKnBkc2MsIHU2NCBhZGRyLFxcbitcXHRcXHRcXHRcXHRcXHQgdTE2IGxlbmd0aCwgdTE2IG9mZnNldCwgdTE2IHRvdGFsX2xlbilcXG4re1xcbitcXHR1bmlvbiBwZHNfY29yZV9kZXZfY21kIGNtZCA9IHtcXG4rXFx0XFx0LnNlbmRfcGtnX2RhdGEub3Bjb2RlID0gUERTX0NPUkVfQ01EX1NFTkRfUEtHX0RBVEEsXFxuK1xcdFxcdC5zZW5kX3BrZ19kYXRhLnZlciA9IDEsXFxuK1xcdFxcdC5zZW5kX3BrZ19kYXRhLmRhdGFfcGEgPSBjcHVfdG9fbGU2NChhZGRyKSxcXG4rXFx0XFx0LnNlbmRfcGtnX2RhdGEuZGF0YV9sZW4gPSBjcHVfdG9fbGUxNihsZW5ndGgpLFxcbitcXHRcXHQuc2VuZF9wa2dfZGF0YS5vZmZzZXQgPSBjcHVfdG9fbGUxNihvZmZzZXQpLFxcbitcXHRcXHQuc2VuZF9wa2dfZGF0YS50b3RhbF9sZW4gPSBjcHVfdG9fbGUxNih0b3RhbF9sZW4pLFxcbitcXHR9O1xcbitcXHR1bmlvbiBwZHNfY29yZV9kZXZfY29tcCBjb21wID0ge307XFxuK1xcbitcXHRyZXR1cm4gcGRzY19kZXZjbWQocGRzYywgXFx1MDAyNmNtZCwgXFx1MDAyNmNvbXAsIHBkc2MtXFx1MDAzZWRldmNtZF90aW1lb3V0KTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBwZHNjX3NlbmRfcGFja2FnZV9kYXRhKHN0cnVjdCBwbGRtZncgKmNvbnRleHQsIGNvbnN0IHU4ICpkYXRhLFxcbitcXHRcXHRcXHRcXHQgIHUxNiBsZW5ndGgpXFxuK3tcXG4rXFx0c3RydWN0IHBkc19jb3JlX2Z3dV9wcml2ICpwcml2ID1cXG4rXFx0XFx0Y29udGFpbmVyX29mKGNvbnRleHQsIHN0cnVjdCBwZHNfY29yZV9md3VfcHJpdiwgY29udGV4dCk7XFxuK1xcdHN0cnVjdCBwZHNjX2RlZmVycmVkX2RtYSAqZGVmZXJyZWQ7XFxuK1xcdHN0cnVjdCBkZXZpY2UgKmRldiA9IGNvbnRleHQtXFx1MDAzZWRldjtcXG4rXFx0c3RydWN0IHBkc2MgKnBkc2MgPSBwcml2LVxcdTAwM2VwZHNjO1xcbitcXHRkbWFfYWRkcl90IGRtYV9hZGRyO1xcbitcXHR1OCAqcGFja2FnZV9kYXRhO1xcbitcXHR1MzIgb2Zmc2V0O1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0aWYgKCFsZW5ndGgpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0ZGVmZXJyZWQgPSBrbWFsbG9jX29iaigqZGVmZXJyZWQsIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoIWRlZmVycmVkKVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFxuK1xcdHBhY2thZ2VfZGF0YSA9IGttZW1kdXAoZGF0YSwgbGVuZ3RoLCBHRlBfS0VSTkVMKTtcXG4rXFx0aWYgKCFwYWNrYWdlX2RhdGEpIHtcXG4rXFx0XFx0a2ZyZWUoZGVmZXJyZWQpO1xcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0fVxcbitcXG4rXFx0ZG1hX2FkZHIgPSBkbWFfbWFwX3NpbmdsZShkZXYsIHBhY2thZ2VfZGF0YSwgbGVuZ3RoLCBETUFfVE9fREVWSUNFKTtcXG4rXFx0aWYgKGRtYV9tYXBwaW5nX2Vycm9yKGRldiwgZG1hX2FkZHIpKSB7XFxuK1xcdFxcdGRldl9lcnIoZGV2LCBcXFwiRmFpbGVkIHRvIGRtYV9tYXAgcGFja2FnZV9kYXRhIGxlbmd0aCAweCV4XFxcXG5cXFwiLFxcbitcXHRcXHRcXHRsZW5ndGgpO1xcbitcXHRcXHRrZnJlZShwYWNrYWdlX2RhdGEpO1xcbitcXHRcXHRrZnJlZShkZWZlcnJlZCk7XFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHR9XFxuK1xcbitcXHRmb3IgKG9mZnNldCA9IDA7IG9mZnNldCBcXHUwMDNjIGxlbmd0aDsgb2Zmc2V0ICs9IFBEU19QQUdFX1NJWkUpIHtcXG4rXFx0XFx0dTMyIGNvcHlfc3o7XFxuK1xcbitcXHRcXHRjb3B5X3N6ID0gbWluX3QodW5zaWduZWQgaW50LCBQRFNfUEFHRV9TSVpFLCBsZW5ndGggLSBvZmZzZXQpO1xcbitcXHRcXHRlcnIgPSBwZHNjX2RldmNtZF9zZW5kX3BhY2thZ2VfZGF0YShwZHNjLCBkbWFfYWRkciArIG9mZnNldCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgIGNvcHlfc3osIG9mZnNldCwgbGVuZ3RoKTtcXG4rXFx0XFx0aWYgKGVycikge1xcbitcXHRcXHRcXHROTF9TRVRfRVJSX01TR19NT0QocHJpdi1cXHUwMDNlZXh0YWNrLFxcbitcXHRcXHRcXHRcXHRcXHQgICBcXFwiRmFpbGVkIHRvIHNlbmQgcGFja2FnZSBkYXRhXFxcIik7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChlcnIgPT0gLUVUSU1FRE9VVCB8fCBlcnIgPT0gLUVBR0FJTikge1xcbitcXHRcXHRwZHNjX2RlZmVycmVkX2RtYV9hZGQocGRzYywgZGVmZXJyZWQsIGRtYV9hZGRyLFxcbitcXHRcXHRcXHRcXHQgICAgICBwYWNrYWdlX2RhdGEsIGxlbmd0aCwgRE1BX1RPX0RFVklDRSk7XFxuK1xcdFxcdHJldHVybiBlcnI7XFxuK1xcdH1cXG4rXFxuK1xcdGtmcmVlKGRlZmVycmVkKTtcXG4rXFx0ZG1hX3VubWFwX3NpbmdsZShkZXYsIGRtYV9hZGRyLCBsZW5ndGgsIERNQV9UT19ERVZJQ0UpO1xcbitcXHRrZnJlZShwYWNrYWdlX2RhdGEpO1xcbitcXHRyZXR1cm4gZXJyO1xcbit9XFxuK1xcbitzdGF0aWMgYm9vbCBwZHNjX2NvbXBvbmVudF90eXBlX2V4aXN0cyhzdHJ1Y3QgcGRzYyAqcGRzYywgdTggdHlwZSlcXG4re1xcbitcXHRpbnQgaTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBwZHNjLVxcdTAwM2Vmd19jb21wb25lbnRzLm51bV9jb21wb25lbnRzOyBpKyspIHtcXG4rXFx0XFx0aWYgKHBkc2MtXFx1MDAzZWZ3X2NvbXBvbmVudHMuaW5mb1tpXS5jb21wb25lbnRfdHlwZSA9PSB0eXBlKVxcbitcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0fVxcbitcXHRyZXR1cm4gZmFsc2U7XFxuK31cXG4rXFxuK3N0YXRpYyBib29sIHBkc2NfY29tcG9uZW50X2lkX21hdGNoZXNfdHlwZShzdHJ1Y3QgcGRzYyAqcGRzYyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgdTggY29tcG9uZW50X2lkLCB1OCB0eXBlKVxcbit7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHBkc2MtXFx1MDAzZWZ3X2NvbXBvbmVudHMubnVtX2NvbXBvbmVudHM7IGkrKykge1xcbitcXHRcXHRzdHJ1Y3QgcGRzX2NvcmVfZndfY29tcG9uZW50X2luZm8gKmluZm8gPVxcbitcXHRcXHRcXHRcXHUwMDI2cGRzYy1cXHUwMDNlZndfY29tcG9uZW50cy5pbmZvW2ldO1xcbitcXG4rXFx0XFx0aWYgKGluZm8tXFx1MDAzZWlkZW50aWZpZXIgPT0gY29tcG9uZW50X2lkIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICBpbmZvLVxcdTAwM2Vjb21wb25lbnRfdHlwZSA9PSB0eXBlKVxcbitcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0fVxcbitcXHRyZXR1cm4gZmFsc2U7XFxuK31cXG4rXFxuK3N0YXRpYyB1OCBwZHNjX2dldF9jb21wb25lbnRfdHlwZV9ieV9pZChzdHJ1Y3QgcGRzYyAqcGRzYywgdTE2IGNvbXBvbmVudF9pZClcXG4re1xcbitcXHRpbnQgaTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBwZHNjLVxcdTAwM2Vmd19jb21wb25lbnRzLm51bV9jb21wb25lbnRzOyBpKyspIHtcXG4rXFx0XFx0c3RydWN0IHBkc19jb3JlX2Z3X2NvbXBvbmVudF9pbmZvICppbmZvID1cXG4rXFx0XFx0XFx0XFx1MDAyNnBkc2MtXFx1MDAzZWZ3X2NvbXBvbmVudHMuaW5mb1tpXTtcXG4rXFxuK1xcdFxcdGlmIChpbmZvLVxcdTAwM2VpZGVudGlmaWVyID09IGNvbXBvbmVudF9pZClcXG4rXFx0XFx0XFx0cmV0dXJuIGluZm8tXFx1MDAzZWNvbXBvbmVudF90eXBlO1xcbitcXHR9XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgYm9vbCBwZHNjX3NraXBfY29tcG9uZW50KHN0cnVjdCBwZHNfY29yZV9md3VfcHJpdiAqcHJpdixcXG4rXFx0XFx0XFx0XFx0dTE2IGNvbXBvbmVudF9pZClcXG4re1xcbitcXHRzdHJ1Y3QgcGRzY19jb21wb25lbnRfcHJpdiAqY29tcG9uZW50X3ByaXY7XFxuK1xcbitcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGNvbXBvbmVudF9wcml2LCBcXHUwMDI2cHJpdi1cXHUwMDNlY29tcG9uZW50cywgbGlzdF9lbnRyeSkge1xcbitcXHRcXHRpZiAoY29tcG9uZW50X3ByaXYtXFx1MDAzZWNvbXBvbmVudF9pZCA9PSBjb21wb25lbnRfaWQpXFxuK1xcdFxcdFxcdHJldHVybiBjb21wb25lbnRfcHJpdi1cXHUwMDNlc2tpcDtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIGZhbHNlO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHBkc2Nfc2VuZF9jb21wb25lbnRfdGFibGUoc3RydWN0IHBsZG1mdyAqY29udGV4dCxcXG4rXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgcGxkbWZ3X2NvbXBvbmVudCAqY29tcG9uZW50LFxcbitcXHRcXHRcXHRcXHQgICAgIHU4IHRyYW5zZmVyX2ZsYWcpXFxuK3tcXG4rXFx0c3RydWN0IHBkc19jb3JlX2Z3dV9wcml2ICpwcml2ID1cXG4rXFx0XFx0Y29udGFpbmVyX29mKGNvbnRleHQsIHN0cnVjdCBwZHNfY29yZV9md3VfcHJpdiwgY29udGV4dCk7XFxuK1xcdHN0cnVjdCBwZHNfY29yZV9jb21wb25lbnRfdGJsICpjb21wb25lbnRfdGJsO1xcbitcXHRzdHJ1Y3QgcGRzY19jb21wb25lbnRfcHJpdiAqY29tcG9uZW50X3ByaXY7XFxuK1xcdHN0cnVjdCBkZXZpY2UgKmRldiA9IGNvbnRleHQtXFx1MDAzZWRldjtcXG4rXFx0dW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgY29tcCA9IHt9O1xcbitcXHR1bmlvbiBwZHNfY29yZV9kZXZfY21kIGNtZCA9IHt9O1xcbitcXHRzdHJ1Y3QgcGRzYyAqcGRzYyA9IHByaXYtXFx1MDAzZXBkc2M7XFxuK1xcdGJvb2wgc2tpcF9jb21wb25lbnQgPSBmYWxzZTtcXG4rXFx0dTggcmVxdWVzdGVkX3R5cGUgPSAwO1xcbitcXHR1MTYgYnVmX3N6LCB0Ymxfc3o7XFxuK1xcdGludCBlcnIgPSAwO1xcbitcXG4rXFx0ZGV2X2RiZyhkZXYsXFxuK1xcdFxcdFxcXCJjb21wb25lbnQgbmFtZSAlcyBjbGFzc2lmaWNhdGlvbiAldSBpZCAldSBhY3RpdmF0aW9uX21ldGhvZCAldSB2ZXJfbGVuICVkIHZlcl9zdHIgJS4qcyBpbmRleCAldSBzaXplICV1IHRyYW5zZmVyX2ZsYWcgMHglMDJ4XFxcXG5cXFwiLFxcbitcXHRcXHRwcml2LVxcdTAwM2VwYXJhbXMtXFx1MDAzZWNvbXBvbmVudCwgY29tcG9uZW50LVxcdTAwM2VjbGFzc2lmaWNhdGlvbixcXG4rXFx0XFx0Y29tcG9uZW50LVxcdTAwM2VpZGVudGlmaWVyLCBjb21wb25lbnQtXFx1MDAzZWFjdGl2YXRpb25fbWV0aG9kLFxcbitcXHRcXHRjb21wb25lbnQtXFx1MDAzZXZlcnNpb25fbGVuLCBjb21wb25lbnQtXFx1MDAzZXZlcnNpb25fbGVuLFxcbitcXHRcXHRjb21wb25lbnQtXFx1MDAzZXZlcnNpb25fc3RyaW5nLCBjb21wb25lbnQtXFx1MDAzZWluZGV4LFxcbitcXHRcXHRjb21wb25lbnQtXFx1MDAzZWNvbXBvbmVudF9zaXplLCB0cmFuc2Zlcl9mbGFnKTtcXG4rXFxuK1xcdGNvbXBvbmVudF9wcml2ID0ga3phbGxvY19vYmooKmNvbXBvbmVudF9wcml2LCBHRlBfS0VSTkVMKTtcXG4rXFx0aWYgKCFjb21wb25lbnRfcHJpdilcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHRpZiAocHJpdi1cXHUwMDNlcGFyYW1zLVxcdTAwM2Vjb21wb25lbnQpIHtcXG4rXFx0XFx0cmVxdWVzdGVkX3R5cGUgPSBwZHNjX25hbWVfdG9fZndfdHlwZShwcml2LVxcdTAwM2VwYXJhbXMtXFx1MDAzZWNvbXBvbmVudCk7XFxuK1xcdFxcdGlmIChjb21wb25lbnQtXFx1MDAzZWlkZW50aWZpZXIgXFx1MDAzZSBVOF9NQVggfHxcXG4rXFx0XFx0ICAgICFwZHNjX2NvbXBvbmVudF9pZF9tYXRjaGVzX3R5cGUocGRzYyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgIGNvbXBvbmVudC1cXHUwMDNlaWRlbnRpZmllcixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgIHJlcXVlc3RlZF90eXBlKSkge1xcbitcXHRcXHRcXHRza2lwX2NvbXBvbmVudCA9IHRydWU7XFxuK1xcdFxcdFxcdGdvdG8gYWRkX2NvbXBvbmVudF9wcml2O1xcbitcXHRcXHR9XFxuK1xcdFxcdHByaXYtXFx1MDAzZWNvbXBvbmVudF9mb3VuZCA9IHRydWU7XFxuK1xcdH1cXG4rXFxuK1xcdGJ1Zl9zeiA9IHNpemVvZihwZHNjLVxcdTAwM2VjbWRfcmVncy1cXHUwMDNlZGF0YSk7XFxuK1xcdHRibF9zeiA9IHN0cnVjdF9zaXplKGNvbXBvbmVudF90YmwsIHZlcnNpb25fc3RyLFxcbitcXHRcXHRcXHQgICAgIGNvbXBvbmVudC1cXHUwMDNldmVyc2lvbl9sZW4pO1xcbitcXHRpZiAodGJsX3N6IFxcdTAwM2UgYnVmX3N6KSB7XFxuK1xcdFxcdGRldl9lcnIoZGV2LCBcXFwiY29tcG9uZW50X3RibCBzaXplICVkIHRvbyBiaWcsIG1heCBzaXplOiAlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0dGJsX3N6LCBidWZfc3opO1xcbitcXHRcXHRlcnIgPSAtRU5PU1BDO1xcbitcXHRcXHRnb3RvIGZyZWVfY29tcG9uZW50X3ByaXY7XFxuK1xcdH1cXG4rXFx0Y29tcG9uZW50X3RibCA9IGt6YWxsb2ModGJsX3N6LCBHRlBfS0VSTkVMKTtcXG4rXFx0aWYgKCFjb21wb25lbnRfdGJsKSB7XFxuK1xcdFxcdGVyciA9IC1FTk9NRU07XFxuK1xcdFxcdGdvdG8gZnJlZV9jb21wb25lbnRfcHJpdjtcXG4rXFx0fVxcbitcXG4rXFx0Y29tcG9uZW50X3RibC1cXHUwMDNlY29tcGFyaXNvbl9zdGFtcCA9XFxuK1xcdFxcdGNwdV90b19sZTMyKGNvbXBvbmVudC1cXHUwMDNlY29tcGFyaXNvbl9zdGFtcCk7XFxuK1xcdGNvbXBvbmVudF90YmwtXFx1MDAzZWNsYXNzaWZpY2F0aW9uID0gY3B1X3RvX2xlMTYoY29tcG9uZW50LVxcdTAwM2VjbGFzc2lmaWNhdGlvbik7XFxuK1xcdGNvbXBvbmVudF90YmwtXFx1MDAzZWlkZW50aWZpZXIgPSBjcHVfdG9fbGUxNihjb21wb25lbnQtXFx1MDAzZWlkZW50aWZpZXIpO1xcbitcXHRjb21wb25lbnRfdGJsLVxcdTAwM2V0cmFuc2Zlcl9mbGFnID0gdHJhbnNmZXJfZmxhZztcXG4rXFx0Y29tcG9uZW50X3RibC1cXHUwMDNldmVyc2lvbl9zdHJfdHlwZSA9IGNvbXBvbmVudC1cXHUwMDNldmVyc2lvbl90eXBlO1xcbitcXHRjb21wb25lbnRfdGJsLVxcdTAwM2V2ZXJzaW9uX3N0cl9sZW4gPSBjb21wb25lbnQtXFx1MDAzZXZlcnNpb25fbGVuO1xcbitcXHRtZW1jcHkoY29tcG9uZW50X3RibC1cXHUwMDNldmVyc2lvbl9zdHIsIGNvbXBvbmVudC1cXHUwMDNldmVyc2lvbl9zdHJpbmcsXFxuK1xcdCAgICAgICBjb21wb25lbnQtXFx1MDAzZXZlcnNpb25fbGVuKTtcXG4rXFxuK1xcdGNtZC5zZW5kX2NvbXBvbmVudF90Ymwub3Bjb2RlID0gUERTX0NPUkVfQ01EX1NFTkRfQ09NUE9ORU5UX1RCTDtcXG4rXFx0Y21kLnNlbmRfY29tcG9uZW50X3RibC52ZXIgPSAxO1xcbitcXHRjbWQuc2VuZF9jb21wb25lbnRfdGJsLnNsb3RfaWQgPSBQRFNfQ09SRV9GV19TTE9UX0lOVkFMSUQ7XFxuK1xcbitcXHRlcnIgPSBwZHNjX2RldmNtZF93aXRoX2RhdGEocGRzYywgXFx1MDAyNmNtZCwgY29tcG9uZW50X3RibCwgdGJsX3N6LFxcbitcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmNvbXAsIHBkc2MtXFx1MDAzZWRldmNtZF90aW1lb3V0KTtcXG4rXFx0a2ZyZWUoY29tcG9uZW50X3RibCk7XFxuK1xcdGlmIChlcnIpIHtcXG4rXFx0XFx0ZGV2X2VycihkZXYsIFxcXCJGYWlsZWQgc2VuZGluZyBjb21wb25lbnQgdGFibGU6ICVwZVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0RVJSX1BUUihlcnIpKTtcXG4rXFx0XFx0Z290byBmcmVlX2NvbXBvbmVudF9wcml2O1xcbitcXHR9XFxuK1xcbitcXHRza2lwX2NvbXBvbmVudCA9IGNvbXAuc2VuZF9jb21wb25lbnRfdGJsLnJlc3BvbnNlID09IDE7XFxuK1xcbithZGRfY29tcG9uZW50X3ByaXY6XFxuK1xcdGNvbXBvbmVudF9wcml2LVxcdTAwM2Vza2lwID0gc2tpcF9jb21wb25lbnQ7XFxuK1xcdGNvbXBvbmVudF9wcml2LVxcdTAwM2Vjb21wb25lbnRfaWQgPSBjb21wb25lbnQtXFx1MDAzZWlkZW50aWZpZXI7XFxuK1xcdGxpc3RfYWRkKFxcdTAwMjZjb21wb25lbnRfcHJpdi1cXHUwMDNlbGlzdF9lbnRyeSwgXFx1MDAyNnByaXYtXFx1MDAzZWNvbXBvbmVudHMpO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK1xcbitmcmVlX2NvbXBvbmVudF9wcml2OlxcbitcXHRrZnJlZShjb21wb25lbnRfcHJpdik7XFxuK1xcdHJldHVybiBlcnI7XFxuK31cXG4rXFxuK2ludCBwZHNjX2dldF9jb21wb25lbnRfaW5mbyhzdHJ1Y3QgcGRzYyAqcGRzYylcXG4re1xcbitcXHR1bmlvbiBwZHNfY29yZV9kZXZfY21kIGNtZCA9IHtcXG4rXFx0XFx0LmdldF9jb21wb25lbnRfaW5mby5vcGNvZGUgPSBQRFNfQ09SRV9DTURfR0VUX0NPTVBPTkVOVF9JTkZPLFxcbitcXHRcXHQuZ2V0X2NvbXBvbmVudF9pbmZvLnZlciA9IDEsXFxuK1xcdH07XFxuK1xcdHN0cnVjdCBwZHNfY29yZV9jb21wb25lbnRfbGlzdF9pbmZvICpsaXN0X2luZm87XFxuK1xcdHN0cnVjdCBwZHNjX2RlZmVycmVkX2RtYSAqZGVmZXJyZWQ7XFxuK1xcdHVuaW9uIHBkc19jb3JlX2Rldl9jb21wIGNvbXAgPSB7fTtcXG4rXFx0ZG1hX2FkZHJfdCBkbWFfYWRkcjtcXG4rXFx0dTggbnVtX2NvbXBvbmVudHM7XFxuK1xcdGludCBlcnIsIGk7XFxuK1xcbitcXHRkZWZlcnJlZCA9IGttYWxsb2Nfb2JqKCpkZWZlcnJlZCk7XFxuK1xcdGlmICghZGVmZXJyZWQpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0bGlzdF9pbmZvID0ga3phbGxvYyhQRFNfUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTtcXG4rXFx0aWYgKCFsaXN0X2luZm8pIHtcXG4rXFx0XFx0a2ZyZWUoZGVmZXJyZWQpO1xcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0fVxcbitcXG4rXFx0ZG1hX2FkZHIgPSBkbWFfbWFwX3NpbmdsZShwZHNjLVxcdTAwM2VkZXYsIGxpc3RfaW5mbywgUERTX1BBR0VfU0laRSxcXG4rXFx0XFx0XFx0XFx0ICBETUFfRlJPTV9ERVZJQ0UpO1xcbitcXHRpZiAoZG1hX21hcHBpbmdfZXJyb3IocGRzYy1cXHUwMDNlZGV2LCBkbWFfYWRkcikpIHtcXG4rXFx0XFx0ZGV2X2VycihwZHNjLVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdFxcXCJGYWlsZWQgdG8gZG1hX21hcCBjb21wb25lbnRfbGlzdF9pbmZvIGxlbmd0aCAlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0UERTX1BBR0VfU0laRSk7XFxuK1xcdFxcdGtmcmVlKGxpc3RfaW5mbyk7XFxuK1xcdFxcdGtmcmVlKGRlZmVycmVkKTtcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcdH1cXG4rXFxuK1xcdGNtZC5nZXRfY29tcG9uZW50X2luZm8uZGF0YV9sZW4gPSBjcHVfdG9fbGUxNihQRFNfUEFHRV9TSVpFKTtcXG4rXFx0Y21kLmdldF9jb21wb25lbnRfaW5mby5kYXRhX3BhID0gY3B1X3RvX2xlNjQoZG1hX2FkZHIpO1xcbitcXG4rXFx0ZXJyID0gcGRzY19kZXZjbWQocGRzYywgXFx1MDAyNmNtZCwgXFx1MDAyNmNvbXAsIHBkc2MtXFx1MDAzZWRldmNtZF90aW1lb3V0ICogMik7XFxuK1xcdGlmIChlcnIgPT0gLUVUSU1FRE9VVCB8fCBlcnIgPT0gLUVBR0FJTikge1xcbitcXHRcXHRwZHNjX2RlZmVycmVkX2RtYV9hZGQocGRzYywgZGVmZXJyZWQsIGRtYV9hZGRyLCBsaXN0X2luZm8sXFxuK1xcdFxcdFxcdFxcdCAgICAgIFBEU19QQUdFX1NJWkUsIERNQV9GUk9NX0RFVklDRSk7XFxuK1xcdFxcdHJldHVybiBlcnI7XFxuK1xcdH1cXG4rXFxuK1xcdGtmcmVlKGRlZmVycmVkKTtcXG4rXFx0ZG1hX3VubWFwX3NpbmdsZShwZHNjLVxcdTAwM2VkZXYsIGRtYV9hZGRyLCBQRFNfUEFHRV9TSVpFLCBETUFfRlJPTV9ERVZJQ0UpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdGlmIChjb21wLmdldF9jb21wb25lbnRfaW5mby52ZXIgPT0gMCkge1xcbitcXHRcXHQvKiBEb24ndCBzdXBwb3J0IGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgYXMgdmVyc2lvbiAwIGhhc1xcbitcXHRcXHQgKiBhbGlnbm1lbnQgaXNzdWVzLCBzbyBnaXZlIGEgaGludCB0byB1c2VycyB0byB1cGRhdGVcXG4rXFx0XFx0ICogdGhlaXIgZmlybXdhcmVcXG4rXFx0XFx0ICovXFxuK1xcdFxcdGRldl93YXJuX29uY2UocGRzYy1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHQgICAgICBcXFwiSW5jb21wYXRpYmxlIGdldF9jb21wb25lbnRfaW5mbyB2ZXJzaW9uICV1IHJlcG9ydGVkIGJ5IGZpcm13YXJlXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICAgICBjb21wLmdldF9jb21wb25lbnRfaW5mby52ZXIpO1xcbitcXHRcXHRlcnIgPSAwO1xcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0fVxcbitcXG4rXFx0bnVtX2NvbXBvbmVudHMgPSBsaXN0X2luZm8tXFx1MDAzZW51bV9jb21wb25lbnRzO1xcbitcXHRpZiAobnVtX2NvbXBvbmVudHMgXFx1MDAzZSBQRFNfQ09SRV9GV19DT01QT05FTlRfTElTVF9MRU4pIHtcXG4rXFx0XFx0ZXJyID0gLUVOT01FTTtcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdH1cXG4rXFxuK1xcdHBkc2MtXFx1MDAzZWZ3X2NvbXBvbmVudHMubnVtX2NvbXBvbmVudHMgPSBudW1fY29tcG9uZW50cztcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG51bV9jb21wb25lbnRzOyBpKyspIHtcXG4rXFx0XFx0c3RydWN0IHBkc19jb3JlX2Z3X2NvbXBvbmVudF9pbmZvICppbmZvID1cXG4rXFx0XFx0XFx0XFx1MDAyNnBkc2MtXFx1MDAzZWZ3X2NvbXBvbmVudHMuaW5mb1tpXTtcXG4rXFxuK1xcdFxcdG1lbWNweShpbmZvLCBcXHUwMDI2bGlzdF9pbmZvLVxcdTAwM2VpbmZvW2ldLCBzaXplb2YoKmluZm8pKTtcXG4rXFx0XFx0aW5mby1cXHUwMDNldmVyc2lvbltQRFNfQ09SRV9GV19DT01QT05FTlRfVkVSX0JVRkxFTiAtIDFdID0gMDtcXG4rXFx0XFx0aW5mby1cXHUwMDNlbmFtZVtQRFNfQ09SRV9GV19DT01QT05FTlRfTkFNRV9CVUZMRU4gLSAxXSA9IDA7XFxuK1xcdH1cXG4rXFxuK291dDpcXG4rXFx0a2ZyZWUobGlzdF9pbmZvKTtcXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbitcXG4rc3RhdGljIGludCBwZHNjX2RldmNtZF9zZW5kX2NvbXBvbmVudChzdHJ1Y3QgcGRzYyAqcGRzYyxcXG4rXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHBkc19jb3JlX2ZsYXNoX2NvbXBvbmVudCAqaW5mbyxcXG4rXFx0XFx0XFx0XFx0ICAgICAgdTE2IGluZm9fc3osIGRtYV9hZGRyX3QgYWRkciwgdTMyIGxlbmd0aCxcXG4rXFx0XFx0XFx0XFx0ICAgICAgdTMyIG9mZnNldCwgdTE2IHNsb3RfaWQsXFxuK1xcdFxcdFxcdFxcdCAgICAgIHVuaW9uIHBkc19jb3JlX2Rldl9jb21wICpjb21wKVxcbit7XFxuK1xcdHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgY21kID0ge1xcbitcXHRcXHQuc2VuZF9jb21wb25lbnQub3Bjb2RlID0gUERTX0NPUkVfQ01EX1NFTkRfQ09NUE9ORU5ULFxcbitcXHRcXHQuc2VuZF9jb21wb25lbnQudmVyID0gMSxcXG4rXFx0XFx0LnNlbmRfY29tcG9uZW50Lm9wZXJhdGlvbiA9IFBEU19DT1JFX1NFTkRfQ09NUE9ORU5UX1NUQVJULFxcbitcXHRcXHQuc2VuZF9jb21wb25lbnQuZGF0YV9wYSA9IGNwdV90b19sZTY0KGFkZHIpLFxcbitcXHRcXHQuc2VuZF9jb21wb25lbnQuZGF0YV9sZW4gPSBjcHVfdG9fbGUzMihsZW5ndGgpLFxcbitcXHRcXHQuc2VuZF9jb21wb25lbnQub2Zmc2V0ID0gY3B1X3RvX2xlMzIob2Zmc2V0KSxcXG4rXFx0XFx0LnNlbmRfY29tcG9uZW50LnNsb3RfaWQgPSBzbG90X2lkLFxcbitcXHR9O1xcbitcXHR1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSAzMDAgKiBIWjtcXG4rXFx0dW5zaWduZWQgbG9uZyBzdGFydF90aW1lO1xcbitcXHR1bnNpZ25lZCBsb25nIGVuZF90aW1lO1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0c3RhcnRfdGltZSA9IGppZmZpZXM7XFxuK1xcdGVuZF90aW1lID0gc3RhcnRfdGltZSArIHRpbWVvdXQ7XFxuK1xcdGRvIHtcXG4rXFx0XFx0LyogcHJldmVudCBub2lzeS9iZW5pZ24gZGV2Y21kIGZhaWx1cmVzICovXFxuK1xcdFxcdGVyciA9IHBkc2NfZGV2Y21kX3dpdGhfZGF0YV9ub21zZyhwZHNjLCBcXHUwMDI2Y21kLCBpbmZvLCBpbmZvX3N6LFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgIGNvbXAsIDYwKTtcXG4rXFx0XFx0aWYgKGVyciAhPSAtRUFHQUlOKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFxuK1xcdFxcdC8qIGlmIHJlcXVpcmVkLCBzdWJzZXF1ZW50IGNvbW1hbmRzIGNoZWNrIHN0YXR1cyBvZlxcbitcXHRcXHQgKiBQRFNfQ09SRV9DTURfU0VORF9DT01QT05FTlQgY29tbWFuZCwgd2hpY2ggcmV0dXJuc1xcbitcXHRcXHQgKiBFQUdBSU4gd2hpbGUgdGhlIGNvbW1hbmQgaXMgc3RpbGwgcnVubmluZyxcXG4rXFx0XFx0ICogZWxzZSB3ZSBnZXQgdGhlIGZpbmFsIGNvbW1hbmQgc3RhdHVzLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0Y21kLnNlbmRfY29tcG9uZW50Lm9wZXJhdGlvbiA9IFBEU19DT1JFX1NFTkRfQ09NUE9ORU5UX1NUQVRVUztcXG4rXFx0XFx0bXNsZWVwKDIwKTtcXG4rXFx0fSB3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgZW5kX3RpbWUpKTtcXG4rXFxuK1xcdGlmIChlcnIgPT0gLUVBR0FJTiB8fCBlcnIgPT0gLUVUSU1FRE9VVClcXG4rXFx0XFx0ZGV2X2VycihwZHNjLVxcdTAwM2VkZXYsIFxcXCJQRFNfQ09SRV9DTURfU0VORF9DT01QT05FTlQgdGltZWQgb3V0XFxcXG5cXFwiKTtcXG4rXFxuK1xcdHJldHVybiBlcnI7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcGRzY19mbGFzaF9jb21wb25lbnRfY2h1bmsoc3RydWN0IHBkc2MgKnBkc2MsIHN0cnVjdCBkZXZpY2UgKmRldixcXG4rXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHBkc19jb3JlX2ZsYXNoX2NvbXBvbmVudCAqaW5mbyxcXG4rXFx0XFx0XFx0XFx0ICAgICAgdTE2IGluZm9fc3osIGNvbnN0IHU4ICpkYXRhLCB1MTYgY29weV9zeixcXG4rXFx0XFx0XFx0XFx0ICAgICAgdTMyIG9mZnNldCwgdTggc2xvdF9pZCxcXG4rXFx0XFx0XFx0XFx0ICAgICAgdW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgKmNvbXApXFxuK3tcXG4rXFx0c3RydWN0IHBkc2NfZGVmZXJyZWRfZG1hICpkZWZlcnJlZDtcXG4rXFx0ZG1hX2FkZHJfdCBkbWFfYWRkcjtcXG4rXFx0dTggKmNvbXBvbmVudF9kYXRhO1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0ZGVmZXJyZWQgPSBrbWFsbG9jX29iaigqZGVmZXJyZWQsIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoIWRlZmVycmVkKVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFxuK1xcdGNvbXBvbmVudF9kYXRhID0ga21lbWR1cChkYXRhLCBjb3B5X3N6LCBHRlBfS0VSTkVMKTtcXG4rXFx0aWYgKCFjb21wb25lbnRfZGF0YSkge1xcbitcXHRcXHRrZnJlZShkZWZlcnJlZCk7XFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHR9XFxuK1xcbitcXHRkbWFfYWRkciA9IGRtYV9tYXBfc2luZ2xlKGRldiwgY29tcG9uZW50X2RhdGEsIGNvcHlfc3osIERNQV9UT19ERVZJQ0UpO1xcbitcXHRpZiAoZG1hX21hcHBpbmdfZXJyb3IoZGV2LCBkbWFfYWRkcikpIHtcXG4rXFx0XFx0ZGV2X2VycihkZXYsXFxuK1xcdFxcdFxcdFxcXCJGYWlsZWQgdG8gZG1hX21hcCBjb21wb25lbnRfZGF0YSBhdCBvZmZzZXQgMHgleCBjb3B5X3N6IDB4JXhcXFxcblxcXCIsXFxuK1xcdFxcdFxcdG9mZnNldCwgY29weV9zeik7XFxuK1xcdFxcdGtmcmVlKGNvbXBvbmVudF9kYXRhKTtcXG4rXFx0XFx0a2ZyZWUoZGVmZXJyZWQpO1xcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0fVxcbitcXG4rXFx0ZXJyID0gcGRzY19kZXZjbWRfc2VuZF9jb21wb25lbnQocGRzYywgaW5mbywgaW5mb19zeiwgZG1hX2FkZHIsXFxuK1xcdFxcdFxcdFxcdFxcdCBjb3B5X3N6LCBvZmZzZXQsIHNsb3RfaWQsIGNvbXApO1xcbitcXHRpZiAoZXJyID09IC1FVElNRURPVVQgfHwgZXJyID09IC1FQUdBSU4pIHtcXG4rXFx0XFx0cGRzY19kZWZlcnJlZF9kbWFfYWRkKHBkc2MsIGRlZmVycmVkLCBkbWFfYWRkcixcXG4rXFx0XFx0XFx0XFx0ICAgICAgY29tcG9uZW50X2RhdGEsIGNvcHlfc3osIERNQV9UT19ERVZJQ0UpO1xcbitcXHRcXHRyZXR1cm4gZXJyO1xcbitcXHR9XFxuK1xcbitcXHRrZnJlZShkZWZlcnJlZCk7XFxuK1xcdGRtYV91bm1hcF9zaW5nbGUoZGV2LCBkbWFfYWRkciwgY29weV9zeiwgRE1BX1RPX0RFVklDRSk7XFxuK1xcdGtmcmVlKGNvbXBvbmVudF9kYXRhKTtcXG4rXFxuK1xcdHJldHVybiBlcnI7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcGRzY19mbGFzaF9jb21wb25lbnQoc3RydWN0IHBsZG1mdyAqY29udGV4dCxcXG4rXFx0XFx0XFx0XFx0c3RydWN0IHBsZG1md19jb21wb25lbnQgKmNvbXBvbmVudClcXG4re1xcbitcXHRjaGFyIGNvbXBvbmVudF9uYW1lX2J1ZltQRFNDX0ZXX0NPTVBPTkVOVF9GVUxMX05BTUVfQlVGTEVOXTtcXG4rXFx0c3RydWN0IHBkc19jb3JlX2Z3dV9wcml2ICpwcml2ID1cXG4rXFx0XFx0Y29udGFpbmVyX29mKGNvbnRleHQsIHN0cnVjdCBwZHNfY29yZV9md3VfcHJpdiwgY29udGV4dCk7XFxuK1xcdHN0cnVjdCBwZHNfY29yZV9mbGFzaF9jb21wb25lbnQgKmNvbXBvbmVudF9pbmZvO1xcbitcXHRjb25zdCBjaGFyICpjb21wb25lbnRfbmFtZSA9IE5VTEw7XFxuK1xcdHN0cnVjdCBkZXZpY2UgKmRldiA9IGNvbnRleHQtXFx1MDAzZWRldjtcXG4rXFx0c3RydWN0IHBkc2MgKnBkc2MgPSBwcml2LVxcdTAwM2VwZHNjO1xcbitcXHR1MTYgYnVmX3N6LCBpbmZvX3N6O1xcbitcXHRzdHJ1Y3QgZGV2bGluayAqZGw7XFxuK1xcdHU4IGNvbXBvbmVudF90eXBlO1xcbitcXHR1MzIgdG90YWxfbGVuO1xcbitcXHR1MzIgb2Zmc2V0O1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0Y29tcG9uZW50X3R5cGUgPSBwZHNjX2dldF9jb21wb25lbnRfdHlwZV9ieV9pZChwZHNjLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgY29tcG9uZW50LVxcdTAwM2VpZGVudGlmaWVyKTtcXG4rXFx0aWYgKGNvbXBvbmVudF90eXBlKSB7XFxuK1xcdFxcdGNvbnN0IGNoYXIgKnR5cGVfbmFtZSA9IHBkc2NfZndfdHlwZV90b19uYW1lKGNvbXBvbmVudF90eXBlKTtcXG4rXFxuK1xcdFxcdGlmIChjb21wb25lbnRfdHlwZSA9PSBQRFNfQ09SRV9GV19UWVBFX01BSU4pIHtcXG4rXFx0XFx0XFx0Y29tcG9uZW50X25hbWUgPSBcXFwiZndcXFwiO1xcbitcXHRcXHR9IGVsc2UgaWYgKHR5cGVfbmFtZSkge1xcbitcXHRcXHRcXHRzbnByaW50Zihjb21wb25lbnRfbmFtZV9idWYsIHNpemVvZihjb21wb25lbnRfbmFtZV9idWYpLFxcbitcXHRcXHRcXHRcXHQgXFxcIiVzJXNcXFwiLCBQRFNDX0ZXX0NPTVBPTkVOVF9QUkVGSVgsIHR5cGVfbmFtZSk7XFxuK1xcdFxcdFxcdGNvbXBvbmVudF9uYW1lID0gY29tcG9uZW50X25hbWVfYnVmO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdGRsID0gcHJpdl90b19kZXZsaW5rKHBkc2MpO1xcbitcXG4rXFx0aWYgKHBkc2Nfc2tpcF9jb21wb25lbnQocHJpdiwgY29tcG9uZW50LVxcdTAwM2VpZGVudGlmaWVyKSkge1xcbitcXHRcXHRkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9zdGF0dXNfbm90aWZ5KGRsLCBcXFwiU2tpcHBlZFxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgIGNvbXBvbmVudF9uYW1lLCAwLCAwKTtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFxuK1xcdHRvdGFsX2xlbiA9IGNvbXBvbmVudC1cXHUwMDNlY29tcG9uZW50X3NpemU7XFxuK1xcdGRldl9kYmcoZGV2LFxcbitcXHRcXHRcXFwiY29tcG9uZW50IG5hbWUgJXMgY2xhc3MgJXUgaWQgJXUgYWN0X21ldGggJXUgdmVyX3N0ciAlLipzIGluZGV4ICV1IHNpemUgJXVcXFxcblxcXCIsXFxuK1xcdFxcdGNvbXBvbmVudF9uYW1lID86IFxcXCIodW5rbm93bilcXFwiLCBjb21wb25lbnQtXFx1MDAzZWNsYXNzaWZpY2F0aW9uLFxcbitcXHRcXHRjb21wb25lbnQtXFx1MDAzZWlkZW50aWZpZXIsIGNvbXBvbmVudC1cXHUwMDNlYWN0aXZhdGlvbl9tZXRob2QsXFxuK1xcdFxcdGNvbXBvbmVudC1cXHUwMDNldmVyc2lvbl9sZW4sIGNvbXBvbmVudC1cXHUwMDNldmVyc2lvbl9zdHJpbmcsXFxuK1xcdFxcdGNvbXBvbmVudC1cXHUwMDNlaW5kZXgsIGNvbXBvbmVudC1cXHUwMDNlY29tcG9uZW50X3NpemUpO1xcbitcXG4rXFx0YnVmX3N6ID0gc2l6ZW9mKHBkc2MtXFx1MDAzZWNtZF9yZWdzLVxcdTAwM2VkYXRhKTtcXG4rXFx0aW5mb19zeiA9IHN0cnVjdF9zaXplKGNvbXBvbmVudF9pbmZvLCB2ZXJzaW9uX3N0cixcXG4rXFx0XFx0XFx0ICAgICAgY29tcG9uZW50LVxcdTAwM2V2ZXJzaW9uX2xlbik7XFxuK1xcdGlmIChpbmZvX3N6IFxcdTAwM2UgYnVmX3N6KSB7XFxuK1xcdFxcdGRldl9lcnIoZGV2LCBcXFwiY29tcG9uZW50X2luZm8gc2l6ZSAlZCB0b28gYmlnLCBtYXggc2l6ZTogJWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdGluZm9fc3osIGJ1Zl9zeik7XFxuK1xcdFxcdHJldHVybiAtRU5PU1BDO1xcbitcXHR9XFxuK1xcdGNvbXBvbmVudF9pbmZvID0gdnphbGxvYyhpbmZvX3N6KTtcXG4rXFx0aWYgKCFjb21wb25lbnRfaW5mbylcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHRjb21wb25lbnRfaW5mby1cXHUwMDNlY29tcGFyaXNvbl9zdGFtcCA9XFxuK1xcdFxcdGNwdV90b19sZTMyKGNvbXBvbmVudC1cXHUwMDNlY29tcGFyaXNvbl9zdGFtcCk7XFxuK1xcdGNvbXBvbmVudF9pbmZvLVxcdTAwM2VpbWFnZV9zaXplID0gY3B1X3RvX2xlMzIodG90YWxfbGVuKTtcXG4rXFx0Y29tcG9uZW50X2luZm8tXFx1MDAzZWNsYXNzaWZpY2F0aW9uID0gY3B1X3RvX2xlMTYoY29tcG9uZW50LVxcdTAwM2VjbGFzc2lmaWNhdGlvbik7XFxuK1xcdGNvbXBvbmVudF9pbmZvLVxcdTAwM2VpZGVudGlmaWVyID0gY3B1X3RvX2xlMTYoY29tcG9uZW50LVxcdTAwM2VpZGVudGlmaWVyKTtcXG4rXFx0Y29tcG9uZW50X2luZm8tXFx1MDAzZW9wdGlvbnMgPSBjcHVfdG9fbGUxNihjb21wb25lbnQtXFx1MDAzZW9wdGlvbnMpO1xcbitcXHRjb21wb25lbnRfaW5mby1cXHUwMDNldmVyc2lvbl9zdHJfdHlwZSA9IGNvbXBvbmVudC1cXHUwMDNldmVyc2lvbl90eXBlO1xcbitcXHRjb21wb25lbnRfaW5mby1cXHUwMDNldmVyc2lvbl9zdHJfbGVuID0gY29tcG9uZW50LVxcdTAwM2V2ZXJzaW9uX2xlbjtcXG4rXFx0bWVtY3B5KGNvbXBvbmVudF9pbmZvLVxcdTAwM2V2ZXJzaW9uX3N0ciwgY29tcG9uZW50LVxcdTAwM2V2ZXJzaW9uX3N0cmluZyxcXG4rXFx0ICAgICAgIGNvbXBvbmVudC1cXHUwMDNldmVyc2lvbl9sZW4pO1xcbitcXG4rXFx0b2Zmc2V0ID0gMDtcXG4rXFx0d2hpbGUgKG9mZnNldCBcXHUwMDNjIHRvdGFsX2xlbikge1xcbitcXHRcXHR1bmlvbiBwZHNfY29yZV9kZXZfY29tcCBjb21wID0ge307XFxuK1xcdFxcdHUxNiBjb3B5X3N6O1xcbitcXG4rXFx0XFx0Y29weV9zeiA9IG1pbl90KHVuc2lnbmVkIGludCwgUERTX1BBR0VfU0laRSxcXG4rXFx0XFx0XFx0XFx0dG90YWxfbGVuIC0gb2Zmc2V0KTtcXG4rXFxuK1xcdFxcdGVyciA9IHBkc2NfZmxhc2hfY29tcG9uZW50X2NodW5rKHBkc2MsIGRldiwgY29tcG9uZW50X2luZm8sXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCBpbmZvX3N6LFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgY29tcG9uZW50LVxcdTAwM2Vjb21wb25lbnRfZGF0YSArXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCBvZmZzZXQsIGNvcHlfc3osIG9mZnNldCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0IFBEU19DT1JFX0ZXX1NMT1RfSU5WQUxJRCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0IFxcdTAwMjZjb21wKTtcXG4rXFx0XFx0aWYgKGVyciBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgY29tcC5zZW5kX2NvbXBvbmVudC5jb21wYXRfcmVzcG9uc2UgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgIChjb21wLnNlbmRfY29tcG9uZW50LmNvbXBhdF9yZXNwb25zZV9jb2RlID09XFxuK1xcdFxcdCAgICAgUERTX0NPUkVfQ09NUE9ORU5UX1NUQU1QX0lERU5USUNBTCB8fFxcbitcXHRcXHQgICAgIGNvbXAuc2VuZF9jb21wb25lbnQuY29tcGF0X3Jlc3BvbnNlX2NvZGUgPT1cXG4rXFx0XFx0ICAgICBQRFNfQ09SRV9DT01QT05FTlRfU1RBTVBfTE9XRVIpKSB7XFxuK1xcdFxcdFxcdGVyciA9IDA7XFxuK1xcdFxcdFxcdGRldmxpbmtfZmxhc2hfdXBkYXRlX3N0YXR1c19ub3RpZnkoZGwsIFxcXCJTa2lwcGVkXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgY29tcG9uZW50X25hbWUsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIDAsIDApO1xcbitcXHRcXHRcXHRnb3RvIHNraXBfY29tcG9uZW50O1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdFxcdE5MX1NFVF9FUlJfTVNHX01PRChwcml2LVxcdTAwM2VleHRhY2ssXFxuK1xcdFxcdFxcdFxcdFxcdCAgIFxcXCJGYWlsZWQgdG8gZmxhc2ggY29tcG9uZW50XFxcIik7XFxuK1xcdFxcdFxcdGdvdG8gZXJyX291dDtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0b2Zmc2V0ICs9IGNvcHlfc3o7XFxuK1xcdFxcdGRldmxpbmtfZmxhc2hfdXBkYXRlX3N0YXR1c19ub3RpZnkoZGwsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgIFxcXCJFcmFzaW5nL0ZsYXNoaW5nXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgY29tcG9uZW50X25hbWUsIG9mZnNldCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgdG90YWxfbGVuKTtcXG4rXFx0fVxcbitcXG4rXFx0dmZyZWUoY29tcG9uZW50X2luZm8pO1xcbitcXHRyZXR1cm4gMDtcXG4rXFxuK2Vycl9vdXQ6XFxuK1xcdGRldmxpbmtfZmxhc2hfdXBkYXRlX3N0YXR1c19ub3RpZnkoZGwsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIFxcXCJFcmFzaW5nL0ZsYXNoaW5nIENvbXBvbmVudCBGYWlsZWRcXFwiLFxcbitcXHRcXHRcXHRcXHRcXHQgICBjb21wb25lbnRfbmFtZSwgMCwgMCk7XFxuK3NraXBfY29tcG9uZW50OlxcbitcXHR2ZnJlZShjb21wb25lbnRfaW5mbyk7XFxuK1xcdHJldHVybiBlcnI7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcGRzY19kZXZjbWRfZmluYWxpemVfdXBkYXRlKHN0cnVjdCBwZHNjICpwZHNjKVxcbit7XFxuK1xcdHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgY21kID0ge1xcbitcXHRcXHQuZmluYWxpemVfdXBkYXRlLm9wY29kZSA9IFBEU19DT1JFX0NNRF9GSU5BTElaRV9VUERBVEUsXFxuK1xcdFxcdC5maW5hbGl6ZV91cGRhdGUudmVyID0gMSxcXG4rXFx0fTtcXG4rXFx0dW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgY29tcCA9IHt9O1xcbitcXG4rXFx0cmV0dXJuIHBkc2NfZGV2Y21kKHBkc2MsIFxcdTAwMjZjbWQsIFxcdTAwMjZjb21wLCBwZHNjLVxcdTAwM2VkZXZjbWRfdGltZW91dCk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcGRzY19maW5hbGl6ZV91cGRhdGUoc3RydWN0IHBsZG1mdyAqY29udGV4dClcXG4re1xcbitcXHRzdHJ1Y3QgcGRzX2NvcmVfZnd1X3ByaXYgKnByaXYgPVxcbitcXHRcXHRjb250YWluZXJfb2YoY29udGV4dCwgc3RydWN0IHBkc19jb3JlX2Z3dV9wcml2LCBjb250ZXh0KTtcXG4rXFx0Y29uc3QgY2hhciAqY29tcG9uZW50X25hbWUgPSBwcml2LVxcdTAwM2VwYXJhbXMtXFx1MDAzZWNvbXBvbmVudDtcXG4rXFx0dW5zaWduZWQgbG9uZyBzdGFydF90aW1lLCBlbmRfdGltZTtcXG4rXFx0c3RydWN0IGRldmljZSAqZGV2ID0gY29udGV4dC1cXHUwMDNlZGV2O1xcbitcXHRzdHJ1Y3QgcGRzYyAqcGRzYyA9IHByaXYtXFx1MDAzZXBkc2M7XFxuK1xcdHN0cnVjdCBkZXZsaW5rICpkbDtcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdGRsID0gcHJpdl90b19kZXZsaW5rKHBkc2MpO1xcbitcXG4rXFx0c3RhcnRfdGltZSA9IGppZmZpZXM7XFxuK1xcdGVuZF90aW1lID0gc3RhcnRfdGltZSArIChQRFNDX0ZXX0lOU1RBTExfVElNRU9VVCAqIEhaKTtcXG4rXFx0ZG8ge1xcbitcXHRcXHRlcnIgPSBwZHNjX2RldmNtZF9maW5hbGl6ZV91cGRhdGUocGRzYyk7XFxuK1xcdFxcdGlmIChlcnIgIT0gLUVBR0FJTilcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcbitcXHRcXHRkZXZfZGJnKGRldiwgXFxcInJldHJ5aW5nIGZpbmFsaXplX3VwZGF0ZTogJXBlXFxcXG5cXFwiLCBFUlJfUFRSKGVycikpO1xcbitcXHRcXHRtc2xlZXAoMjApO1xcbitcXHR9IHdoaWxlICh0aW1lX2JlZm9yZShqaWZmaWVzLCBlbmRfdGltZSkgXFx1MDAyNlxcdTAwMjYgZXJyID09IC1FQUdBSU4pO1xcbitcXG4rXFx0aWYgKGVycikge1xcbitcXHRcXHRkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9zdGF0dXNfbm90aWZ5KGRsLCBcXFwiRmluYWxpemUgVXBkYXRlIEZhaWxlZFxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgIGNvbXBvbmVudF9uYW1lLCAwLCAwKTtcXG4rXFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKHByaXYtXFx1MDAzZWV4dGFjaywgXFxcIkZpbmFsaXplIHVwZGF0ZSBmYWlsZWRcXFwiKTtcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0fVxcbitcXG4rXFx0ZGV2bGlua19mbGFzaF91cGRhdGVfc3RhdHVzX25vdGlmeShkbCwgXFxcIkZpbmFsaXplZCBVcGRhdGVcXFwiLFxcbitcXHRcXHRcXHRcXHRcXHQgICBjb21wb25lbnRfbmFtZSwgMCwgMCk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IHBsZG1md19vcHMgcGRzY19wbGRtZndfb3BzID0ge1xcbitcXHQubWF0Y2hfcmVjb3JkID0gcGRzY19tYXRjaF9yZWNvcmRfZGVzY3MsXFxuK1xcdC5zZW5kX3BhY2thZ2VfZGF0YSA9IHBkc2Nfc2VuZF9wYWNrYWdlX2RhdGEsXFxuK1xcdC5zZW5kX2NvbXBvbmVudF90YWJsZSA9IHBkc2Nfc2VuZF9jb21wb25lbnRfdGFibGUsXFxuK1xcdC5mbGFzaF9jb21wb25lbnQgPSBwZHNjX2ZsYXNoX2NvbXBvbmVudCxcXG4rXFx0LmZpbmFsaXplX3VwZGF0ZSA9IHBkc2NfZmluYWxpemVfdXBkYXRlXFxuK307XFxuK1xcbitzdGF0aWMgaW50IHBkc2NfcGxkbV9maXJtd2FyZV91cGRhdGUoc3RydWN0IHBkc2MgKnBkc2MsXFxuK1xcdFxcdFxcdFxcdCAgICAgc3RydWN0IGRldmxpbmtfZmxhc2hfdXBkYXRlX3BhcmFtcyAqcGFyYW1zLFxcbitcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayxcXG4rXFx0XFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3KVxcbit7XFxuK1xcdHN0cnVjdCBwZHNfY29yZV9md3VfcHJpdiBwcml2ID0ge307XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHRpZiAoIXBkc2MtXFx1MDAzZWZ3X2NvbXBvbmVudHMubnVtX2NvbXBvbmVudHMpIHtcXG4rXFx0XFx0ZXJyID0gcGRzY19nZXRfY29tcG9uZW50X2luZm8ocGRzYyk7XFxuK1xcdFxcdGlmIChlcnIpIHtcXG4rXFx0XFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgXFxcIkZhaWxlZCB0byBnZXQgY29tcG9uZW50IGluZm9cXFwiKTtcXG4rXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRpZiAocGFyYW1zLVxcdTAwM2Vjb21wb25lbnQpIHtcXG4rXFx0XFx0dTggdHlwZSA9IHBkc2NfbmFtZV90b19md190eXBlKHBhcmFtcy1cXHUwMDNlY29tcG9uZW50KTtcXG4rXFxuK1xcdFxcdGlmICghdHlwZSB8fCAhcGRzY19jb21wb25lbnRfdHlwZV9leGlzdHMocGRzYywgdHlwZSkpIHtcXG4rXFx0XFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXFxcIlVua25vd24gY29tcG9uZW50IG5hbWVcXFwiKTtcXG4rXFx0XFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnByaXYuY29tcG9uZW50cyk7XFxuK1xcdHByaXYuY29udGV4dC5vcHMgPSBcXHUwMDI2cGRzY19wbGRtZndfb3BzO1xcbitcXHRwcml2LmNvbnRleHQuZGV2ID0gcGRzYy1cXHUwMDNlZGV2O1xcbitcXHRwcml2LnBhcmFtcyA9IHBhcmFtcztcXG4rXFx0cHJpdi5leHRhY2sgPSBleHRhY2s7XFxuK1xcdHByaXYucGRzYyA9IHBkc2M7XFxuK1xcbitcXHRlcnIgPSBwbGRtZndfZmxhc2hfaW1hZ2UoXFx1MDAyNnByaXYuY29udGV4dCwgZncpO1xcbitcXHRpZiAoIWVyciBcXHUwMDI2XFx1MDAyNiBwYXJhbXMtXFx1MDAzZWNvbXBvbmVudCBcXHUwMDI2XFx1MDAyNiAhcHJpdi5jb21wb25lbnRfZm91bmQpIHtcXG4rXFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcXG4rXFx0XFx0XFx0XFx0ICAgXFxcIlJlcXVlc3RlZCBjb21wb25lbnQgbm90IHByZXNlbnQgaW4gZmlybXdhcmUgcGFja2FnZVxcXCIpO1xcbitcXHRcXHRlcnIgPSAtRU5PRU5UO1xcbitcXHR9XFxuK1xcdHBkc2NfZnJlZV9md3VfcHJpdihcXHUwMDI2cHJpdik7XFxuK1xcbitcXHRyZXR1cm4gZXJyO1xcbit9XFxuK1xcbitpbnQgcGRzY19maXJtd2FyZV91cGRhdGUoc3RydWN0IHBkc2MgKnBkc2MsXFxuK1xcdFxcdFxcdCBzdHJ1Y3QgZGV2bGlua19mbGFzaF91cGRhdGVfcGFyYW1zICpwYXJhbXMsXFxuK1xcdFxcdFxcdCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuK3tcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdGlmIChwZHNjLVxcdTAwM2VkZXZfaWRlbnQudmVyc2lvbiBcXHUwMDNlPSBQRFNfQ09SRV9JREVOVElUWV9WRVJTSU9OXzIgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIHBkc2MtXFx1MDAzZWRldl9pZGVudC5jYXBhYmlsaXRpZXMgXFx1MDAyNlxcbitcXHRcXHRjcHVfdG9fbGU2NChQRFNfQ09SRV9ERVZfQ0FQX1BMRE1fRldfVVBEQVRFKSlcXG4rXFx0XFx0ZXJyID0gcGRzY19wbGRtX2Zpcm13YXJlX3VwZGF0ZShwZHNjLCBwYXJhbXMsIGV4dGFjayxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0cGFyYW1zLVxcdTAwM2Vmdyk7XFxuK1xcdGVsc2VcXG4rXFx0XFx0ZXJyID0gcGRzY19sZWdhY3lfZmlybXdhcmVfdXBkYXRlKHBkc2MsIHBhcmFtcywgZXh0YWNrKTtcXG4rXFxuK1xcdC8qIEludmFsaWRhdGUgY2FjaGVkIGNvbXBvbmVudCBpbmZvIHNvIG5leHQgaW5mb19nZXQgcmVmcmVzaGVzICovXFxuK1xcdHBkc2NfZndfY29tcG9uZW50c19pbnZhbGlkYXRlKHBkc2MpO1xcbitcXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL21haW4uY1xcbmluZGV4IDhkOTRhNGQ3MDM5NWUuLjVlMWIwNzg1MDE2M2IgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL21haW4uY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9tYWluLmNcXG5AQCAtMjEsNiArMjEsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgcGRzY19pZF90YWJsZVtdID0ge1xcbiB9O1xcbiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgcGRzY19pZF90YWJsZSk7XFxuIFxcbitzdGF0aWMgdm9pZCBwZHNjX3N0b3BfaGVhbHRoX3RocmVhZChzdHJ1Y3QgcGRzYyAqcGRzYyk7XFxuK1xcbiBzdGF0aWMgdm9pZCBwZHNjX3dkdGltZXJfY2Ioc3RydWN0IHRpbWVyX2xpc3QgKnQpXFxuIHtcXG4gXFx0c3RydWN0IHBkc2MgKnBkc2MgPSB0aW1lcl9jb250YWluZXJfb2YocGRzYywgdCwgd2R0aW1lcik7XFxuQEAgLTMxNSw2ICszMTcsNyBAQCBzdGF0aWMgaW50IHBkc2NfaW5pdF9wZihzdHJ1Y3QgcGRzYyAqcGRzYylcXG4gXFx0XFx0ZGVzdHJveV93b3JrcXVldWUocGRzYy1cXHUwMDNld3EpO1xcbiBcXHRtdXRleF9kZXN0cm95KFxcdTAwMjZwZHNjLVxcdTAwM2Vjb25maWdfbG9jayk7XFxuIFxcdG11dGV4X2Rlc3Ryb3koXFx1MDAyNnBkc2MtXFx1MDAzZWRldmNtZF9sb2NrKTtcXG4rXFx0cGRzY19kZWZlcnJlZF9kbWFfZnJlZShwZHNjKTtcXG4gXFx0cGNpX2ZyZWVfaXJxX3ZlY3RvcnMocGRzYy1cXHUwMDNlcGRldik7XFxuIGVycl9vdXRfdW5tYXBfYmFyczpcXG4gXFx0cGRzY191bm1hcF9iYXJzKHBkc2MpO1xcbkBAIC0zNTMsNiArMzU2LDggQEAgc3RhdGljIGludCBwZHNjX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxcbiBcXHRwZHNjLVxcdTAwM2VwZGV2ID0gcGRldjtcXG4gXFx0cGRzYy1cXHUwMDNlZGV2ID0gXFx1MDAyNnBkZXYtXFx1MDAzZWRldjtcXG4gXFx0c2V0X2JpdChQRFNDX1NfSU5JVElOR19EUklWRVIsIFxcdTAwMjZwZHNjLVxcdTAwM2VzdGF0ZSk7XFxuK1xcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZwZHNjLVxcdTAwM2VkZWZlcnJlZF9kbWFfbGlzdCk7XFxuK1xcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZwZHNjLVxcdTAwM2VkZWZlcnJlZF9kbWFfbG9jayk7XFxuIFxcdHBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBwZHNjKTtcXG4gXFx0cGRzY19kZWJ1Z2ZzX2FkZF9kZXYocGRzYyk7XFxuIFxcbkBAIC00NTgsNiArNDYzLDcgQEAgc3RhdGljIHZvaWQgcGRzY19yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuIFxcdH1cXG4gXFxuIFxcdHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTtcXG4rXFx0cGRzY19kZWZlcnJlZF9kbWFfZnJlZShwZHNjKTtcXG4gXFxuIFxcdGlkYV9mcmVlKFxcdTAwMjZwZHNjX2lkYSwgcGRzYy1cXHUwMDNldWlkKTtcXG4gXFx0cGRzY19kZWJ1Z2ZzX2RlbF9kZXYocGRzYyk7XFxuQEAgLTUwNSw2ICs1MTEsNyBAQCBzdGF0aWMgdm9pZCBwZHNjX3Jlc2V0X3ByZXBhcmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuIFxcdHBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7XFxuIFxcdGlmIChwY2lfaXNfZW5hYmxlZChwZGV2KSlcXG4gXFx0XFx0cGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpO1xcbitcXHRwZHNjX2RlZmVycmVkX2RtYV9mcmVlKHBkc2MpO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBwZHNjX3Jlc2V0X2RvbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGRzL3Bkc19jb3JlX2lmLmggYi9pbmNsdWRlL2xpbnV4L3Bkcy9wZHNfY29yZV9pZi5oXFxuaW5kZXggMTdhODdjMWE1NWQ3Yy4uOTAxZTFlNjI4Zjg5MCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3Bkcy9wZHNfY29yZV9pZi5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9wZHMvcGRzX2NvcmVfaWYuaFxcbkBAIC00MCw2ICs0MCwxNCBAQCBlbnVtIHBkc19jb3JlX2NtZF9vcGNvZGUge1xcbiBcXHRQRFNfQ09SRV9DTURfRldfRE9XTkxPQURcXHQ9IDQsXFxuIFxcdFBEU19DT1JFX0NNRF9GV19DT05UUk9MXFx0XFx0PSA1LFxcbiBcXG4rXFx0UERTX0NPUkVfQ01EX0dFVF9DT01QT05FTlRfSU5GT1xcdD0gNixcXG4rXFx0UERTX0NPUkVfQ01EX1NFTkRfUEtHX0RBVEFcXHQ9IDcsXFxuK1xcdFBEU19DT1JFX0NNRF9TRU5EX0NPTVBPTkVOVF9UQkxcXHQ9IDgsXFxuK1xcdFBEU19DT1JFX0NNRF9TRU5EX0NPTVBPTkVOVFxcdD0gOSxcXG4rXFx0UERTX0NPUkVfQ01EX0ZJTkFMSVpFX1VQREFURVxcdD0gMTAsXFxuK1xcdFBEU19DT1JFX0NNRF9NQVRDSF9SRUNPUkRfREVTQ1xcdD0gMTEsXFxuK1xcdFBEU19DT1JFX0NNRF9IT1NUX01FTVxcdFxcdD0gMTIsXFxuK1xcbiBcXHQvKiBTUi9JT1YgY29tbWFuZHMgKi9cXG4gXFx0UERTX0NPUkVfQ01EX1ZGX0dFVEFUVFJcXHRcXHQ9IDYwLFxcbiBcXHRQRFNfQ09SRV9DTURfVkZfU0VUQVRUUlxcdFxcdD0gNjEsXFxuQEAgLTEwMCw2ICsxMDgsMTYgQEAgc3RydWN0IHBkc19jb3JlX2Rydl9pZGVudGl0eSB7XFxuIFxcdGNoYXIgICBkcml2ZXJfdmVyX3N0clszMl07XFxuIH07XFxuIFxcbisvKipcXG4rICogZW51bSBwZHNfY29yZV9kZXZfY2FwYWJpbGl0eSAtIERldmljZSBjYXBhYmlsaXRpZXNcXG4rICogQFBEU19DT1JFX0RFVl9DQVBfUExETV9GV19VUERBVEU6IERldmljZSBvbmx5IHN1cHBvcnRzIEZXIHVwZGF0ZSB2aWEgUExETVxcbisgKiBAUERTX0NPUkVfREVWX0NBUF9IT1NUX01FTTogRGV2aWNlIHN1cHBvcnRzIGhvc3QgbWVtb3J5IGZvciBmdyB1c2VcXG4rICovXFxuK2VudW0gcGRzX2NvcmVfZGV2X2NhcGFiaWxpdHkge1xcbitcXHRQRFNfQ09SRV9ERVZfQ0FQX1BMRE1fRldfVVBEQVRFID0gQklUKDApLFxcbitcXHRQRFNfQ09SRV9ERVZfQ0FQX0hPU1RfTUVNID0gQklUKDEpLFxcbit9O1xcbitcXG4gI2RlZmluZSBQRFNfREVWX1RZUEVfTUFYXFx0MTZcXG4gLyoqXFxuICAqIHN0cnVjdCBwZHNfY29yZV9kZXZfaWRlbnRpdHkgLSBEZXZpY2UgaWRlbnRpdHkgaW5mb3JtYXRpb25cXG5AQCAtMTE5LDYgKzEzNywxMSBAQCBzdHJ1Y3QgcGRzX2NvcmVfZHJ2X2lkZW50aXR5IHtcXG4gICpcXHRcXHQgICAgICB2YWx1ZSBpbiB1c2VjcyB0byBkZXZpY2UgdW5pdHMgdXNpbmc6XFxuICAqXFx0XFx0ICAgICAgZGV2aWNlIHVuaXRzID0gdXNlY3MgKiBtdWx0IC8gZGl2XFxuICAqIEB2aWZfdHlwZXM6ICAgICAgICBIb3cgbWFueSBvZiBlYWNoIFZJRiBkZXZpY2UgdHlwZSBpcyBzdXBwb3J0ZWRcXG4rICogQG1heF9md19zbG90czogICAgIE51bWJlciBvZiBmaXJtd2FyZSBjb21wb25lbnRzIHJlcG9ydGVkIGJ5IGRldmljZVxcbisgKlxcdFxcdCAgICAgIG9ubHkgc3VwcG9ydGVkIG9uIHZlcnNpb24gXFx1MDAzZT0gUERTX0NPUkVfSURFTlRJVFlfVkVSU0lPTl8yXFxuKyAqIEByc3ZkMjpcXHQgICAgICBXb3JkIGJvdW5kYXJ5IHBhZGRpbmdcXG4rICogQGNhcGFiaWxpdGllczogICAgIERldmljZSBjYXBhYmlsaXRpZXNcXG4rICpcXHRcXHQgICAgICBvbmx5IHN1cHBvcnRlZCBvbiB2ZXJzaW9uIFxcdTAwM2U9IFBEU19DT1JFX0lERU5USVRZX1ZFUlNJT05fMlxcbiAgKi9cXG4gc3RydWN0IHBkc19jb3JlX2Rldl9pZGVudGl0eSB7XFxuIFxcdHU4ICAgICB2ZXJzaW9uO1xcbkBAIC0xMzEsOSArMTU0LDEzIEBAIHN0cnVjdCBwZHNfY29yZV9kZXZfaWRlbnRpdHkge1xcbiBcXHRfX2xlMzIgaW50cl9jb2FsX211bHQ7XFxuIFxcdF9fbGUzMiBpbnRyX2NvYWxfZGl2O1xcbiBcXHRfX2xlMTYgdmlmX3R5cGVzW1BEU19ERVZfVFlQRV9NQVhdO1xcbitcXHRfX2xlMTYgbWF4X2Z3X3Nsb3RzO1xcbitcXHR1OCAgICAgcnN2ZDJbNl07XFxuK1xcdF9fbGU2NCBjYXBhYmlsaXRpZXM7XFxuIH07XFxuIFxcbiAjZGVmaW5lIFBEU19DT1JFX0lERU5USVRZX1ZFUlNJT05fMVxcdDFcXG4rI2RlZmluZSBQRFNfQ09SRV9JREVOVElUWV9WRVJTSU9OXzJcXHQyXFxuIFxcbiAvKipcXG4gICogc3RydWN0IHBkc19jb3JlX2Rldl9pZGVudGlmeV9jbWQgLSBEcml2ZXIvZGV2aWNlIGlkZW50aWZ5IGNvbW1hbmRcXG5AQCAtMjc1LDExICszMDIsMjAgQEAgZW51bSBwZHNfY29yZV9md19jb250cm9sX29wZXIge1xcbiBcXHRQRFNfQ09SRV9GV19HRVRfTElTVCAgICAgICAgICAgICAgID0gNyxcXG4gfTtcXG4gXFxuKy8qKlxcbisgKiBlbnVtIHBkc19jb3JlX2Z3X3Nsb3QgLSBGaXJtd2FyZSBzbG90IGlkZW50aWZpZXJzXFxuKyAqIEBQRFNfQ09SRV9GV19TTE9UX0lOVkFMSUQ6IExldCBmaXJtd2FyZSBzZWxlY3Qgc2xvdCBiYXNlZCBvbiBwYWNrYWdlIG1ldGFkYXRhXFxuKyAqIEBQRFNfQ09SRV9GV19TTE9UX0E6ICAgICAgIFByaW1hcnkgZmlybXdhcmUgc2xvdCBBXFxuKyAqIEBQRFNfQ09SRV9GV19TTE9UX0I6ICAgICAgIFByaW1hcnkgZmlybXdhcmUgc2xvdCBCXFxuKyAqIEBQRFNfQ09SRV9GV19TTE9UX0dPTEQ6ICAgIEdvbGQvcmVjb3ZlcnkgZmlybXdhcmUgc2xvdFxcbisgKiBAUERTX0NPUkVfRldfU0xPVF9NQVg6ICAgICBTZW50aW5lbCB2YWx1ZSBpbmRpY2F0aW5nIG5vIHNsb3QgcmVzb2x2ZWRcXG4rICovXFxuIGVudW0gcGRzX2NvcmVfZndfc2xvdCB7XFxuIFxcdFBEU19DT1JFX0ZXX1NMT1RfSU5WQUxJRCAgICA9IDAsXFxuIFxcdFBEU19DT1JFX0ZXX1NMT1RfQVxcdCAgICA9IDEsXFxuIFxcdFBEU19DT1JFX0ZXX1NMT1RfQiAgICAgICAgICA9IDIsXFxuIFxcdFBEU19DT1JFX0ZXX1NMT1RfR09MRCAgICAgICA9IDMsXFxuK1xcdFBEU19DT1JFX0ZXX1NMT1RfTUFYICAgICAgICA9IDB4ZmYsXFxuIH07XFxuIFxcbiAvKipcXG5AQCAtNDQ2LDYgKzQ4Miw0MjMgQEAgc3RydWN0IHBkc19jb3JlX3ZmX2N0cmxfY29tcCB7XFxuIFxcdHU4XFx0c3RhdHVzO1xcbiB9O1xcbiBcXG4rLyoqXFxuKyAqIHN0cnVjdCBwZHNfY29yZV9zZW5kX3BrZ19kYXRhX2NtZCAtIFNlbmQgcGFja2FnZSBkYXRhIGNvbW1hbmRcXG4rICogQG9wY29kZTogT3Bjb2RlIFBEU19DT1JFX0NNRF9TRU5EX1BLR19EQVRBXFxuKyAqIEB2ZXI6IERyaXZlcidzIG1heCBzdXBwb3J0IHZlcnNpb24gb2YgdGhpcyBjb21tYW5kXFxuKyAqIEB0b3RhbF9sZW46IFRvdGFsIGxlbmd0aCBvZiB0aGUgcGFja2FnZSBkYXRhXFxuKyAqIEBvZmZzZXQ6IE9mZnNldCBpbiB0aGUgcGFja2FnZSBkYXRhLCBub24temVybyBpZiBtdWx0aXBsZSBjb21tYW5kcyBhcmVcXG4rICpcXHQgICAgbmVlZGVkIGZvciBzZW5kaW5nIHRoZSBwYWNrYWdlIGRhdGFcXG4rICogQGRhdGFfbGVuOiBMZW5ndGggb2YgZGF0YSBzdG9yZWQgYXQgZGF0YV9wYVxcbisgKiBAZGF0YV9wYTogRGF0YSBwaHlzaWNhbCBhZGRyZXNzIGZvciBETUEgdG8gZGV2aWNlXFxuKyAqXFxuKyAqIFRoZSBwYWNrYWdlIGRhdGEgbWF5IGJlIHRvbyBsYXJnZSB0byBzdG9yZSBpbiBhIHNpbmdsZSBidWZmZXIsIHNvIG11bHRpcGxlXFxuKyAqIFBEU19DT1JFX0NNRF9TRU5EX1BLR19EQVRBIGRldmNtZHMgbWF5IGJlIG5lZWRlZC5cXG4rICovXFxuK3N0cnVjdCBwZHNfY29yZV9zZW5kX3BrZ19kYXRhX2NtZCB7XFxuK1xcdHU4IG9wY29kZTtcXG4rXFx0dTggdmVyO1xcbitcXHRfX2xlMTYgdG90YWxfbGVuO1xcbitcXHRfX2xlMTYgb2Zmc2V0O1xcbitcXHRfX2xlMTYgZGF0YV9sZW47XFxuK1xcdF9fbGU2NCBkYXRhX3BhO1xcbit9O1xcbitcXG4rLyoqXFxuKyAqIHN0cnVjdCBwZHNfY29yZV9zZW5kX3BrZ19kYXRhX2NvbXAgLSBTZW5kIHBhY2thZ2UgZGF0YSBjb21wbGV0aW9uXFxuKyAqIEBzdGF0dXM6IFN0YXR1cyBvZiB0aGUgY29tbWFuZCAoZW51bSBwZHNfY29yZV9zdGF0dXNfY29kZSlcXG4rICogQHZlcjogRGV2aWNlJ3MgbWF4IHN1cHBvcnRlZCB2ZXJzaW9uIG9mIHRoaXMgY29tbWFuZFxcbisgKiBAcnN2ZDogV29yZCBib3VuZGFyeSBwYWRkaW5nXFxuKyAqL1xcbitzdHJ1Y3QgcGRzX2NvcmVfc2VuZF9wa2dfZGF0YV9jb21wIHtcXG4rXFx0dTggc3RhdHVzO1xcbitcXHR1OCB2ZXI7XFxuK1xcdHU4IHJzdmRbMl07XFxuK307XFxuK1xcbisvKipcXG4rICogc3RydWN0IHBkc19jb3JlX2NvbXBvbmVudF90YmwgLSBDb21wb25lbnQgdGFibGUgZGV0YWlsc1xcbisgKiBAY29tcGFyaXNvbl9zdGFtcDogQ29tcGFyaXNvbiBzdGFtcCB1c2VkIGZvciBjb21wb25lbnQgdmVyc2lvbiBjaGVja3NcXG4rICogQGNsYXNzaWZpY2F0aW9uOiBWZW5kb3Igc3BlY2lmaWMgY2xhc3NpZmljYXRpb24gaW5mb1xcbisgKiBAaWRlbnRpZmllcjogQ29tcG9uZW50J3MgSURcXG4rICogQHRyYW5zZmVyX2ZsYWc6IFBhcnQgb2YgdGhlIGNvbXBvbmVudCB0YWJsZSB0aGlzIHJlcXVlc3QgcmVwcmVzZW50c1xcbisgKiBAdmVyc2lvbl9zdHJfdHlwZTogVGhlIHR5cGVzIG9mIHN0cmluZ3MgdXNlZFxcbisgKiBAdmVyc2lvbl9zdHJfbGVuOiBMZW5ndGggb2YgQHZlcnNpb25fc3RyXFxuKyAqIEB2ZXJzaW9uX3N0cjogQ29tcG9uZW50IHZlcnNpb24gaW5mb3JtYXRpb25cXG4rICovXFxuK3N0cnVjdCBwZHNfY29yZV9jb21wb25lbnRfdGJsIHtcXG4rXFx0X19sZTMyIGNvbXBhcmlzb25fc3RhbXA7XFxuK1xcdF9fbGUxNiBjbGFzc2lmaWNhdGlvbjtcXG4rXFx0X19sZTE2IGlkZW50aWZpZXI7XFxuK1xcdHU4ICAgICB0cmFuc2Zlcl9mbGFnO1xcbitcXHR1OCAgICAgdmVyc2lvbl9zdHJfdHlwZTtcXG4rXFx0dTggICAgIHZlcnNpb25fc3RyX2xlbjtcXG4rXFx0dTggICAgIHZlcnNpb25fc3RyW107XFxuK307XFxuK1xcbisvKipcXG4rICogc3RydWN0IHBkc19jb3JlX3NlbmRfY29tcG9uZW50X3RibF9jbWQgLSBTZW5kIGNvbXBvbmVudCB0YWJsZSBjb21tYW5kXFxuKyAqIEBvcGNvZGU6IE9wY29kZSBQRFNfQ09SRV9DTURfU0VORF9DT01QT05FTlRfVEJMXFxuKyAqIEB2ZXI6IERyaXZlcidzIG1heCBzdXBwb3J0IHZlcnNpb24gb2YgdGhpcyBjb21tYW5kXFxuKyAqIEBzbG90X2lkOiBlbnVtIHBkc19jb3JlX2Z3X3Nsb3RcXG4rICogQHJzdmQ6IFdvcmQgYm91bmRhcnkgcGFkZGluZ1xcbisgKlxcbisgKiBFeHBlY3RzIHRvIGZpbmQgY29tcG9uZW50IHRhYmxlIGluZm8gKHN0cnVjdCBwZHNfY29yZV9jb21wb25lbnRfdGJsKVxcbisgKiBpbiBjbWRfcmVncy1cXHUwMDNlZGF0YS4gIERyaXZlciBzaG91bGQga2VlcCB0aGUgZGV2Y21kIGludGVyZmFjZSBsb2NrZWRcXG4rICogd2hpbGUgcHJlcGFyaW5nIHRoZSBjb21wb25lbnQgdGFibGUgaW5mby5cXG4rICovXFxuK3N0cnVjdCBwZHNfY29yZV9zZW5kX2NvbXBvbmVudF90YmxfY21kIHtcXG4rXFx0dTggb3Bjb2RlO1xcbitcXHR1OCB2ZXI7XFxuK1xcdHU4IHNsb3RfaWQ7XFxuK1xcdHU4IHJzdmQ7XFxuK307XFxuK1xcbitlbnVtIHBkc19jb3JlX2NvbXBvbmVudF9yZXNwX2NvZGUge1xcbitcXHRQRFNfQ09SRV9DT01QT05FTlRfVkFMSUQgPSAweDAsXFxuK1xcdFBEU19DT1JFX0NPTVBPTkVOVF9TVEFNUF9JREVOVElDQUwgPSAweDEsXFxuK1xcdFBEU19DT1JFX0NPTVBPTkVOVF9TVEFNUF9MT1dFUiA9IDB4MixcXG4rXFx0UERTX0NPUkVfQ09NUE9ORU5UX1NUQU1QX09SX1ZFUlNJT05fSU5WQUxJRCA9IDB4MyxcXG4rXFx0UERTX0NPUkVfQ09NUE9ORU5UX0NPTkZMSUNUID0gMHg0LFxcbitcXHRQRFNfQ09SRV9DT01QT05FTlRfUFJFUkVRU19OT1RfTUVUID0gMHg1LFxcbitcXHRQRFNfQ09SRV9DT01QT05FTlRfTk9UX1NVUFBPUlRFRCA9IDB4NixcXG4rXFx0UERTX0NPUkVfQ09NUE9ORU5UX0ZXX1RZUEVfSU5WQUxJRCA9IDB4ZDAsXFxuK307XFxuK1xcbisvKipcXG4rICogc3RydWN0IHBkc19jb3JlX3NlbmRfY29tcG9uZW50X3RibF9jb21wIC0gU2VuZCBjb21wb25lbnQgdGFibGUgY29tcGxldGlvblxcbisgKiBAc3RhdHVzOiBTdGF0dXMgb2YgdGhlIGNvbW1hbmQgKGVudW0gcGRzX2NvcmVfc3RhdHVzX2NvZGUpXFxuKyAqIEB2ZXI6IERldmljZSdzIG1heCBzdXBwb3J0ZWQgdmVyc2lvbiBvZiB0aGlzIGNvbW1hbmRcXG4rICogQGNvbXBsZXRpb25fY29kZTogQ29tcG9uZW50IGNvbXBsZXRpb24gY29kZVxcbisgKiBAcmVzcG9uc2U6IENvbXBvbmVudCByZXNwb25zZVxcbisgKiBAcmVzcG9uc2VfY29kZTogQ29tcG9uZW50IHJlc3BvbnNlIGNvZGVcXG4rICogQHNsb3RfaWQ6IEFjdHVhbCBzbG90X2lkIG9mIHRoZSBjb21wb25lbnQgKGVudW0gcGRzX2NvcmVfZndfc2xvdClcXG4rICogQHJzdmQ6IFdvcmQgYm91bmRhcnkgcGFkZGluZ1xcbisgKi9cXG4rc3RydWN0IHBkc19jb3JlX3NlbmRfY29tcG9uZW50X3RibF9jb21wIHtcXG4rXFx0dTggc3RhdHVzO1xcbitcXHR1OCB2ZXI7XFxuK1xcdHU4IGNvbXBsZXRpb25fY29kZTtcXG4rXFx0dTggcmVzcG9uc2U7XFxuK1xcdHU4IHJlc3BvbnNlX2NvZGU7XFxuK1xcdHU4IHNsb3RfaWQ7XFxuK1xcdHU4IHJzdmRbMl07XFxuK307XFxuK1xcbisvKipcXG4rICogZW51bSBwZHNfY29yZV9zZW5kX2NvbXBvbmVudF9vcCAtIFBEU19DT1JFX0NNRF9TRU5EX0NPTVBPTkVOVCBvcGVyYXRpb25cXG4rICogQFBEU19DT1JFX1NFTkRfQ09NUE9ORU5UX1NUQVJUOiBJbml0aWFsIG9wZXJhdGlvbiB0byBzdGFydCB0cmFuc2ZlclxcbisgKiBAUERTX0NPUkVfU0VORF9DT01QT05FTlRfU1RBVFVTOiBTdWJzZXF1ZW50IGNhbGxzIHRvIGNoZWNrIG9uIHN0YXR1c1xcbisgKi9cXG4rZW51bSBwZHNfY29yZV9zZW5kX2NvbXBvbmVudF9vcCB7XFxuK1xcdFBEU19DT1JFX1NFTkRfQ09NUE9ORU5UX1NUQVJUID0gMCxcXG4rXFx0UERTX0NPUkVfU0VORF9DT01QT05FTlRfU1RBVFVTID0gMSxcXG4rfTtcXG4rXFxuKyNkZWZpbmUgUERTX0NPUkVfRldfQ09NUE9ORU5UX0lEX0lOVkFMSUQgMHhGRkZGXFxuKy8qKlxcbisgKiBzdHJ1Y3QgcGRzX2NvcmVfZmxhc2hfY29tcG9uZW50IC0gQ29tcG9uZW50IGRldGFpbHNcXG4rICogQGNvbXBhcmlzb25fc3RhbXA6IENvbXBhcmlzb24gc3RhbXAgdXNlZCBmb3IgY29tcG9uZW50IHZlcnNpb24gY2hlY2tzXFxuKyAqIEBpbWFnZV9zaXplOiBDb21wb25lbnQgaW1hZ2Ugc2l6ZVxcbisgKiBAY2xhc3NpZmljYXRpb246IFZlbmRvciBzcGVjaWZpYyBjbGFzc2lmaWNhdGlvbiBpbmZvXFxuKyAqIEBpZGVudGlmaWVyOiBDb21wb25lbnQncyBJRFxcbisgKiBAb3B0aW9uczogQ29tcG9uZW50IG9wdGlvbnNcXG4rICogQHJzdmQ6IFdvcmQgYm91bmRhcnkgcGFkZGluZ1xcbisgKiBAdmVyc2lvbl9zdHJfdHlwZTogVGhlIHR5cGVzIG9mIHN0cmluZ3MgdXNlZFxcbisgKiBAdmVyc2lvbl9zdHJfbGVuOiBMZW5ndGggb2YgQHZlcnNpb25fc3RyXFxuKyAqIEB2ZXJzaW9uX3N0cjogQ29tcG9uZW50IHZlcnNpb24gaW5mb3JtYXRpb25cXG4rICovXFxuK3N0cnVjdCBwZHNfY29yZV9mbGFzaF9jb21wb25lbnQge1xcbitcXHRfX2xlMzIgY29tcGFyaXNvbl9zdGFtcDtcXG4rXFx0X19sZTMyIGltYWdlX3NpemU7XFxuK1xcdF9fbGUxNiBjbGFzc2lmaWNhdGlvbjtcXG4rXFx0X19sZTE2IGlkZW50aWZpZXI7XFxuK1xcdF9fbGUxNiBvcHRpb25zO1xcbitcXHR1OCByc3ZkWzNdO1xcbitcXHR1OCB2ZXJzaW9uX3N0cl90eXBlO1xcbitcXHR1OCB2ZXJzaW9uX3N0cl9sZW47XFxuK1xcdHU4IHZlcnNpb25fc3RyW107XFxuK307XFxuK1xcbisvKipcXG4rICogc3RydWN0IHBkc19jb3JlX3NlbmRfY29tcG9uZW50X2NtZCAtIFNlbmQgY29tcG9uZW50IGNvbW1hbmRcXG4rICogQG9wY29kZTogT3Bjb2RlIFBEU19DT1JFX0NNRF9TRU5EX0NPTVBPTkVOVFxcbisgKiBAdmVyOiBEcml2ZXIncyBtYXggc3VwcG9ydGVkIHZlcnNpb24gb2YgdGhpcyBjb21tYW5kXFxuKyAqIEBzbG90X2lkOiBlbnVtIHBkc19jb3JlX2Z3X3Nsb3RcXG4rICogQG9wZXJhdGlvbjogZW51bSBwZHNfY29yZV9zZW5kX2NvbXBvbmVudF9vcFxcbisgKiBAb2Zmc2V0OiBPZmZzZXQgaW50byB0aGUgY29tcG9uZW50LCBub24temVybyBpZiBtdWx0aXBsZSBjb21tYW5kc1xcbisgKlxcdCAgICBhcmUgbmVlZGVkIGZvciBhIHNpbmdsZSBjb21wb25lbnRcXG4rICogQGRhdGFfbGVuOiBMZW5ndGggb2YgdGhpcyBwYXJ0IG9mIHRoZSBjb21wb25lbnQgc3RvcmVkIGF0IEBkYXRhX3BhXFxuKyAqIEByc3ZkOiBXb3JkIGJvdW5kYXJ5IHBhZGRpbmdcXG4rICogQGRhdGFfcGE6IERNQSBhZGRyZXNzIG9mIHRoZSBjb21wb25lbnRcXG4rICpcXG4rICogQSBjb21wb25lbnQgbWF5IGJlIHRvbyBsYXJnZSB0byBzdG9yZSBpbiBhIHNpbmdsZSBidWZmZXIsIHNvIG11bHRpcGxlXFxuKyAqIFBEU19DT1JFX0NNRF9TRU5EX0NPTVBPTkVOVCBkZXZjbWRzIG1heSBiZSBuZWVkZWQuXFxuKyAqXFxuKyAqIEV4cGVjdHMgdG8gZmluZCBmbGFzaCBjb21wb25lbnQgaW5mbyAoc3RydWN0IHBkc19jb3JlX2ZsYXNoX2NvbXBvbmVudClcXG4rICogaW4gY21kX3JlZ3MtXFx1MDAzZWRhdGEuIERyaXZlciBzaG91bGQga2VlcCB0aGUgZGV2Y21kIGludGVyZmFjZSBsb2NrZWRcXG4rICogd2hpbGUgcHJlcGFyaW5nIGFuZCBzZW5kaW5nIHRoZSBmbGFzaCBjb21wb25lbnQgaW5mby5cXG4rICovXFxuK3N0cnVjdCBwZHNfY29yZV9zZW5kX2NvbXBvbmVudF9jbWQge1xcbitcXHR1OCBvcGNvZGU7XFxuK1xcdHU4IHZlcjtcXG4rXFx0dTggc2xvdF9pZDtcXG4rXFx0dTggb3BlcmF0aW9uO1xcbitcXHRfX2xlMzIgb2Zmc2V0O1xcbitcXHRfX2xlMzIgZGF0YV9sZW47XFxuK1xcdHU4IHJzdmRbNF07XFxuK1xcdF9fbGU2NCBkYXRhX3BhO1xcbit9O1xcbitcXG4rLyoqXFxuKyAqIHN0cnVjdCBwZHNfY29yZV9zZW5kX2NvbXBvbmVudF9jb21wIC0gU2VuZCBjb21wb25lbnQgY29tcGxldGlvblxcbisgKiBAc3RhdHVzOiBTdGF0dXMgb2YgdGhlIGNvbW1hbmQgKGVudW0gcGRzX2NvcmVfc3RhdHVzX2NvZGUpXFxuKyAqIEB2ZXI6IERldmljZSdzIG1heCBzdXBwb3J0ZWQgdmVyc2lvbiBvZiB0aGlzIGNvbW1hbmRcXG4rICogQGNvbXBsZXRpb25fY29kZTogQ29tcGxldGlvbiBjb2RlXFxuKyAqIEBjb21wYXRfcmVzcG9uc2U6IENvbXBhdGliaWxpdHkgcmVzcG9uc2UgKDAgPSBDb21wb25lbnQgY2FuIGJlIHVwZGF0ZWQpXFxuKyAqIEBjb21wYXRfcmVzcG9uc2VfY29kZTogQ29tcGF0aWJpbGl0eSByZXNwb25zZSBjb2RlXFxuKyAqIEByc3ZkOiBXb3JkIGJvdW5kYXJ5IHBhZGRpbmdcXG4rICovXFxuK3N0cnVjdCBwZHNfY29yZV9zZW5kX2NvbXBvbmVudF9jb21wIHtcXG4rXFx0dTggc3RhdHVzO1xcbitcXHR1OCB2ZXI7XFxuK1xcdHU4IGNvbXBsZXRpb25fY29kZTtcXG4rXFx0dTggY29tcGF0X3Jlc3BvbnNlO1xcbitcXHR1OCBjb21wYXRfcmVzcG9uc2VfY29kZTtcXG4rXFx0dTggcnN2ZFszXTtcXG4rfTtcXG4rXFxuKy8qKlxcbisgKiBlbnVtIHBkc19jb3JlX2Z3X2NvbXBvbmVudF90eXBlIC0gRmlybXdhcmUgY29tcG9uZW50IHR5cGVcXG4rICogQFBEU19DT1JFX0ZXX1RZUEVfVU5LTk9XTjogVW5rbm93biBjb21wb25lbnQgdHlwZVxcbisgKiBAUERTX0NPUkVfRldfVFlQRV9NQUlOOiBNYWluIGZpcm13YXJlXFxuKyAqIEBQRFNfQ09SRV9GV19UWVBFX0JPT1Q6IEJvb3QgbG9hZGVyXFxuKyAqIEBQRFNfQ09SRV9GV19UWVBFX0NQTEQ6IENQTEQgZmlybXdhcmVcXG4rICogQFBEU19DT1JFX0ZXX1RZUEVfU0VDVVJFOiBTZWN1cmUgZmlybXdhcmVcXG4rICogQFBEU19DT1JFX0ZXX1RZUEVfRlBHQTogRlBHQSBjb25maWd1cmF0aW9uXFxuKyAqIEBQRFNfQ09SRV9GV19UWVBFX1NVQ19NQUlOOiBTeXN0ZW0gVW5pdCBDb250cm9sbGVyIGZpcm13YXJlXFxuKyAqIEBQRFNfQ09SRV9GV19UWVBFX1NVQ19CT09UOiBTeXN0ZW0gVW5pdCBDb250cm9sbGVyIGJvb3Rsb2FkZXJcXG4rICogQFBEU19DT1JFX0ZXX1RZUEVfVUJPT1Q6IFUtQm9vdCBib290bG9hZGVyXFxuKyAqXFxuKyAqIEdvbGQvcmVjb3ZlcnkgdmFyaWFudHMgYXJlIGlkZW50aWZpZWQgYnkgc2xvdF9pZCA9PSBQRFNfQ09SRV9GV19TTE9UX0dPTERcXG4rICogYW5kIHJlcG9ydGVkIHdpdGggYSBcXFwiLmdvbGRcXFwiIHN1ZmZpeCAoZS5nLiwgZncuZ29sZCkuXFxuKyAqL1xcbitlbnVtIHBkc19jb3JlX2Z3X2NvbXBvbmVudF90eXBlIHtcXG4rXFx0UERTX0NPUkVfRldfVFlQRV9VTktOT1dOICAgPSAwLFxcbitcXHRQRFNfQ09SRV9GV19UWVBFX01BSU4gICAgICA9IDEsXFxuK1xcdFBEU19DT1JFX0ZXX1RZUEVfQk9PVCAgICAgID0gMixcXG4rXFx0UERTX0NPUkVfRldfVFlQRV9DUExEICAgICAgPSAzLFxcbitcXHRQRFNfQ09SRV9GV19UWVBFX1NFQ1VSRSAgICA9IDQsXFxuK1xcdFBEU19DT1JFX0ZXX1RZUEVfRlBHQSAgICAgID0gNSxcXG4rXFx0UERTX0NPUkVfRldfVFlQRV9TVUNfTUFJTiAgPSA2LFxcbitcXHRQRFNfQ09SRV9GV19UWVBFX1NVQ19CT09UICA9IDcsXFxuK1xcdFBEU19DT1JFX0ZXX1RZUEVfVUJPT1QgICAgID0gOCxcXG4rfTtcXG4rXFxuKy8qKlxcbisgKiBlbnVtIHBkc19jb3JlX2NvbXBvbmVudF9pbmZvX2ZsYWdzIC0gQ29tcG9uZW50IGluZm8gZmxhZ3NcXG4rICogQFBEU19DT1JFX0ZXX0NPTVBPTkVOVF9JTkZPX0ZfUlVOTklORzogQ29tcG9uZW50IGlzIGN1cnJlbnRseSBydW5uaW5nXFxuKyAqIEBQRFNfQ09SRV9GV19DT01QT05FTlRfSU5GT19GX1NUQVJUVVA6IENvbXBvbmVudCB2ZXJzaW9uIG9uIG5leHQgRlcgYm9vdFxcbisgKiBAUERTX0NPUkVfRldfQ09NUE9ORU5UX0lORk9fRl9GSVhFRDogQ29tcG9uZW50IGlzIGZpeGVkIGFuZCBjYW5ub3QgYmUgdXBkYXRlZFxcbisgKiBAUERTX0NPUkVfRldfQ09NUE9ORU5UX0lORk9fRl9VUERBVEVfQllfTkFNRTogQ29tcG9uZW50IGNhbiBiZSB1cGRhdGVkXFxuKyAqXFx0YnkgbmFtZVxcbisgKi9cXG4rZW51bSBwZHNfY29yZV9jb21wb25lbnRfaW5mb19mbGFncyB7XFxuK1xcdFBEU19DT1JFX0ZXX0NPTVBPTkVOVF9JTkZPX0ZfUlVOTklORyA9IEJJVCgwKSxcXG4rXFx0UERTX0NPUkVfRldfQ09NUE9ORU5UX0lORk9fRl9TVEFSVFVQID0gQklUKDEpLFxcbitcXHRQRFNfQ09SRV9GV19DT01QT05FTlRfSU5GT19GX0ZJWEVEID0gQklUKDIpLFxcbitcXHRQRFNfQ09SRV9GV19DT01QT05FTlRfSU5GT19GX1VQREFURV9CWV9OQU1FID0gQklUKDMpLFxcbit9O1xcbitcXG4rLyoqXFxuKyAqIHN0cnVjdCBwZHNfY29yZV9md19jb21wb25lbnRfaW5mbyAtIEdFVF9DT01QT05FTlRfSU5GTyBlbnRyeVxcbisgKiBAbmFtZTogQ29tcG9uZW50J3MgbmFtZVxcbisgKiBAY29tcG9uZW50X3R5cGU6IGVudW0gcGRzX2NvcmVfZndfY29tcG9uZW50X3R5cGVcXG4rICogQHJzdmQ6IFdvcmQgYm91bmRhcnkgcGFkZGluZ1xcbisgKiBAZmxhZ3M6IGVudW0gcGRzX2NvcmVfY29tcG9uZW50X2luZm9fZmxhZ3NcXG4rICogQGlkZW50aWZpZXI6IENvbXBvbmVudCdzIGlkZW50aWZpZXJcXG4rICogQHNsb3RfaWQ6IENvbXBvbmVudCdzIHNsb3QgaWRlbnRpZmllclxcbisgKiBAdmVyc2lvbjogQ29tcG9uZW50J3MgdmVyc2lvblxcbisgKi9cXG4rc3RydWN0IHBkc19jb3JlX2Z3X2NvbXBvbmVudF9pbmZvIHtcXG4rI2RlZmluZSBQRFNfQ09SRV9GV19DT01QT05FTlRfTkFNRV9CVUZMRU4gMjRcXG4rXFx0Y2hhciBuYW1lW1BEU19DT1JFX0ZXX0NPTVBPTkVOVF9OQU1FX0JVRkxFTl07XFxuK1xcdHU4IGNvbXBvbmVudF90eXBlO1xcbitcXHR1OCByc3ZkWzNdO1xcbitcXHRfX2xlMTYgZmxhZ3M7XFxuK1xcdHU4IGlkZW50aWZpZXI7XFxuK1xcdHU4IHNsb3RfaWQ7XFxuKyNkZWZpbmUgUERTX0NPUkVfRldfQ09NUE9ORU5UX1ZFUl9CVUZMRU4gMzJcXG4rXFx0Y2hhciB2ZXJzaW9uW1BEU19DT1JFX0ZXX0NPTVBPTkVOVF9WRVJfQlVGTEVOXTtcXG4rfTtcXG4rXFxuKyNkZWZpbmUgUERTX0NPUkVfRldfQ09NUE9ORU5UX0xJU1RfTEVOXFx0KChQRFNfUEFHRV9TSVpFIC0gOCkgLyBcXFxcXFxuK1xcdFxcdHNpemVvZihzdHJ1Y3QgcGRzX2NvcmVfZndfY29tcG9uZW50X2luZm8pKVxcbitcXG4rLyoqXFxuKyAqIHN0cnVjdCBwZHNfY29yZV9jb21wb25lbnRfbGlzdF9pbmZvIC0gR0VUX0NPTVBPTkVOVF9JTkZPIGNvbXBsZXRpb24gZGF0YVxcbisgKiBAbnVtX2NvbXBvbmVudHM6IE51bWJlciBvZiB2YWxpZCBjb21wb25lbnRzXFxuKyAqIEByc3ZkOiBXb3JkIGJvdW5kYXJ5IHBhZGRpbmdcXG4rICogQGluZm86IExpc3Qgb2YgdmFsaWQgY29tcG9uZW50c1xcbisgKi9cXG4rc3RydWN0IHBkc19jb3JlX2NvbXBvbmVudF9saXN0X2luZm8ge1xcbitcXHR1OCBudW1fY29tcG9uZW50cztcXG4rXFx0dTggcnN2ZFs3XTtcXG4rXFx0c3RydWN0IHBkc19jb3JlX2Z3X2NvbXBvbmVudF9pbmZvIGluZm9bUERTX0NPUkVfRldfQ09NUE9ORU5UX0xJU1RfTEVOXTtcXG4rfTtcXG4rXFxuKy8qKlxcbisgKiBzdHJ1Y3QgcGRzX2NvcmVfZ2V0X2NvbXBvbmVudF9pbmZvX2NtZCAtIEdFVF9DT01QT05FTlRfSU5GTyBjb21tYW5kXFxuKyAqIEBvcGNvZGU6IFBEU19DT1JFX0NNRF9HRVRfQ09NUE9ORU5UX0lORk9cXG4rICogQHZlcjogRHJpdmVyJ3MgbWF4IHN1cHBvcnRlZCB2ZXJzaW9uIG9mIHRoaXMgY29tbWFuZFxcbisgKiBAZGF0YV9sZW46IExlbmd0aCBvZiBkYXRhIGF0IGRhdGFfcGFcXG4rICogQHJzdmQ6IFdvcmQgYm91bmRhcnkgcGFkZGluZ1xcbisgKiBAZGF0YV9wYTogRE1BIGFkZHJlc3Mgb2YgZGF0YVxcbisgKlxcbisgKiBGVyBwb3B1bGF0ZXMgc3RydWN0IHBkc19jb3JlX2NvbXBvbmVudF9saXN0X2luZm8gcG9pbnRlZCB0byBieSBAZGF0YV9wYVxcbisgKi9cXG4rc3RydWN0IHBkc19jb3JlX2dldF9jb21wb25lbnRfaW5mb19jbWQge1xcbitcXHR1OCBvcGNvZGU7XFxuK1xcdHU4IHZlcjtcXG4rXFx0X19sZTE2IGRhdGFfbGVuO1xcbitcXHR1OCByc3ZkWzRdO1xcbitcXHRfX2xlNjQgZGF0YV9wYTtcXG4rfTtcXG4rXFxuKy8qKlxcbisgKiBzdHJ1Y3QgcGRzX2NvcmVfZ2V0X2NvbXBvbmVudF9pbmZvX2NvbXAgLSBHRVRfQ09NUE9ORU5UX0lORk8gY29tcGxldGlvblxcbisgKiBAc3RhdHVzOiBlbnVtIHBkc19jb3JlX3N0YXR1c19jb2RlXFxuKyAqIEB2ZXI6IERldmljZSdzIG1heCBzdXBwb3J0ZWQgdmVyc2lvbiBvZiB0aGlzIGNvbW1hbmRcXG4rICogQHJzdmQ6IFdvcmQgYm91bmRhcnkgcGFkZGluZ1xcbisgKi9cXG4rc3RydWN0IHBkc19jb3JlX2dldF9jb21wb25lbnRfaW5mb19jb21wIHtcXG4rXFx0dTggc3RhdHVzO1xcbitcXHR1OCB2ZXI7XFxuK1xcdHU4IHJzdmRbMl07XFxuK307XFxuK1xcbisvKipcXG4rICogc3RydWN0IHBkc19jb3JlX2ZpbmFsaXplX3VwZGF0ZV9jbWQgLSBGSU5BTElaRV9VUERBVEUgY29tbWFuZFxcbisgKiBAb3Bjb2RlOiBQRFNfQ09SRV9DTURfRklOQUxJWkVfVVBEQVRFXFxuKyAqIEB2ZXI6IERyaXZlcidzIG1heCBzdXBwb3J0IHZlcnNpb24gb2YgdGhpcyBjb21tYW5kXFxuKyAqIEByc3ZkOiBXb3JkIGJvdW5kYXJ5IHBhZGRpbmdcXG4rICpcXG4rICogRHJpdmVyIHNlbmRzIGF0IHRoZSBlbmQgb2YgdXBkYXRpbmcgYWxsIGNvbXBvbmVudHMgdG8gZmluYWxpemUgdGhlIHVwZGF0ZVxcbisgKi9cXG4rc3RydWN0IHBkc19jb3JlX2ZpbmFsaXplX3VwZGF0ZV9jbWQge1xcbitcXHR1OCBvcGNvZGU7XFxuK1xcdHU4IHZlcjtcXG4rXFx0dTggcnN2ZFsyXTtcXG4rfTtcXG4rXFxuKy8qKlxcbisgKiBzdHJ1Y3QgcGRzX2NvcmVfZmluYWxpemVfdXBkYXRlX2NvbXAgLSBGSU5BTElaRV9VUERBVEUgY29tcGxldGlvblxcbisgKiBAc3RhdHVzOiBlbnVtIHBkc19jb3JlX3N0YXR1c19jb2RlXFxuKyAqIEB2ZXI6IERldmljZSdzIG1heCBzdXBwb3J0ZWQgdmVyc2lvbiBvZiB0aGlzIGNvbW1hbmRcXG4rICogQHJzdmQ6IFdvcmQgYm91bmRhcnkgcGFkZGluZ1xcbisgKi9cXG4rc3RydWN0IHBkc19jb3JlX2ZpbmFsaXplX3VwZGF0ZV9jb21wIHtcXG4rXFx0dTggc3RhdHVzO1xcbitcXHR1OCB2ZXI7XFxuK1xcdHU4IHJzdmRbMl07XFxuK307XFxuK1xcbisvKipcXG4rICogc3RydWN0IHBkc19jb3JlX21hdGNoX3JlY29yZF9kZXNjX2NtZCAtIE1BVENIX1JFQ09SRF9ERVNDIGNvbW1hbmRcXG4rICogQG9wY29kZTogUERTX0NPUkVfQ01EX01BVENIX1JFQ09SRF9ERVNDXFxuKyAqIEB2ZXI6IERyaXZlcidzIG1heCBzdXBwb3J0ZWQgdmVyc2lvbiBvZiB0aGlzIGNvbW1hbmRcXG4rICogQHR5cGU6IFBMRE0gRGVzY3JpcHRvciBJZGVudGlmaWVyIFR5cGVcXG4rICogQHNpemU6IExlbmd0aCBvZiB0aGUgRGVzY3JpcHRvciBJZGVudGlmaWVyIFZhbHVlXFxuKyAqIEByc3ZkOiBXb3JkIGJvdW5kYXJ5IHBhZGRpbmdcXG4rICpcXG4rICogRXhwZWN0cyB0byBmaW5kIHRoZSBEZXNjcmlwdG9yIElkZW50aWZpZXIgRGF0YSBpbiBjbWRfcmVncy1cXHUwMDNlZGF0YS4gRHJpdmVyXFxuKyAqIHNob3VsZCBrZWVwIHRoZSBkZXZjbWQgaW50ZXJmYWNlIGxvY2tlZCB3aGlsZSBwcmVwYXJpbmcgYW5kIHNlbmRpbmcgdGhpc1xcbisgKiBjb21tYW5kLlxcbisgKi9cXG4rc3RydWN0IHBkc19jb3JlX21hdGNoX3JlY29yZF9kZXNjX2NtZCB7XFxuK1xcdHU4IG9wY29kZTtcXG4rXFx0dTggdmVyO1xcbitcXHRfX2xlMTYgdHlwZTtcXG4rXFx0X19sZTE2IHNpemU7XFxuK1xcdHU4IHJzdmRbMl07XFxuK307XFxuK1xcbisvKipcXG4rICogc3RydWN0IHBkc19jb3JlX21hdGNoX3JlY29yZF9kZXNjX2NvbXAgLSBNQVRDSF9SRUNPUkRfREVTQyBjb21wbGV0aW9uXFxuKyAqIEBzdGF0dXM6IGVudW0gcGRzX2NvcmVfc3RhdHVzX2NvZGVcXG4rICogQHZlcjogRGV2aWNlJ3MgbWF4IHN1cHBvcnRlZCB2ZXJzaW9uIG9mIHRoaXMgY29tbWFuZFxcbisgKiBAbWF0Y2g6IFdoZXRoZXIgb3Igbm90IHRoZSBSZWNvcmQgRGVzY3JpcHRvciBtYXRjaGVzIHRoZSBkZXZpY2VcXG4rICogQHJzdmQ6IFdvcmQgYm91bmRhcnkgcGFkZGluZ1xcbisgKlxcbisgKiBXaGVuIHN0YXR1cyBpcyBQRFNfUkNfU1VDQ0VTUywgdGhlbiBAbWF0Y2ggaXMgdmFsaWQsIG90aGVyd2lzZSBpdCdzXFxuKyAqIHVuZGVmaW5lZC5cXG4rICovXFxuK3N0cnVjdCBwZHNfY29yZV9tYXRjaF9yZWNvcmRfZGVzY19jb21wIHtcXG4rXFx0dTggc3RhdHVzO1xcbitcXHR1OCB2ZXI7XFxuK1xcdHU4IG1hdGNoO1xcbitcXHR1OCByc3ZkO1xcbit9O1xcbitcXG4rLyoqXFxuKyAqIGVudW0gcGRzX2NvcmVfaG9zdF9tZW1fb3BlciAtIEhPU1RfTUVNIHN1Yi1vcGVyYXRpb25zXFxuKyAqIEBQRFNfQ09SRV9IT1NUX01FTV9HRVRfQ09VTlQ6IFF1ZXJ5IG51bWJlciBvZiBtZW1vcnkgcmVxdWVzdHNcXG4rICogQFBEU19DT1JFX0hPU1RfTUVNX1FVRVJZOiAgICAgUXVlcnkgZGV0YWlscyBvZiBhIG1lbW9yeSByZXF1ZXN0XFxuKyAqIEBQRFNfQ09SRV9IT1NUX01FTV9BREQ6ICAgICAgIFByb3ZpZGUgYWxsb2NhdGVkIG1lbW9yeSB0byBmaXJtd2FyZVxcbisgKiBAUERTX0NPUkVfSE9TVF9NRU1fREVMOiAgICAgICBOb3RpZnkgZmlybXdhcmUgb2YgbWVtb3J5IGRlYWxsb2NhdGlvblxcbisgKi9cXG4rZW51bSBwZHNfY29yZV9ob3N0X21lbV9vcGVyIHtcXG4rXFx0UERTX0NPUkVfSE9TVF9NRU1fR0VUX0NPVU5UXFx0PSAwLFxcbitcXHRQRFNfQ09SRV9IT1NUX01FTV9RVUVSWVxcdFxcdD0gMSxcXG4rXFx0UERTX0NPUkVfSE9TVF9NRU1fQUREXFx0XFx0PSAyLFxcbitcXHRQRFNfQ09SRV9IT1NUX01FTV9ERUxcXHRcXHQ9IDMsXFxuK307XFxuK1xcbisvKipcXG4rICogc3RydWN0IHBkc19jb3JlX2hvc3RfbWVtX2NtZCAtIEhPU1RfTUVNIGNvbW1hbmRcXG4rICogQG9wY29kZTogICAgIE9wY29kZSBQRFNfQ09SRV9DTURfSE9TVF9NRU1cXG4rICogQG9wZXI6ICAgICAgIE9wZXJhdGlvbiAoZW51bSBwZHNfY29yZV9ob3N0X21lbV9vcGVyKVxcbisgKiBAaW5kZXg6ICAgICAgTWVtb3J5IHJlcXVlc3QgaW5kZXggKEdFVF9DT1VOVDogbWF4X2NvdW50LCBRVUVSWTogaW5kZXgpXFxuKyAqIEB0YWc6ICAgICAgICBUYWcgZm9yIHRoaXMgbWVtb3J5IHJlcXVlc3QgKEFERC9ERUwpXFxuKyAqIEByZWFzb246ICAgICBSZWFzb24gZm9yIGRlbGV0aW9uIChERUwgb25seSlcXG4rICogQHJzdmQ6ICAgICAgIFJlc2VydmVkXFxuKyAqIEBtYXhfY29udGlnOiBNYXhpbXVtIGNvbnRpZ3VvdXMgbWVtb3J5IHNpemUgKEdFVF9DT1VOVCBvbmx5KVxcbisgKiBAc2l6ZTogICAgICAgU2l6ZSBvZiBtZW1vcnkgaW4gYnl0ZXMgKEFERCBvbmx5KVxcbisgKiBAYnVmX3BhOiAgICAgRE1BIGFkZHJlc3Mgb2YgbWVtb3J5IChBREQgb25seSlcXG4rICpcXG4rICogVW5pZmllZCBjb21tYW5kIGZvciBhbGwgaG9zdCBtZW1vcnkgb3BlcmF0aW9ucy4gRmllbGRzIGFyZSByZXVzZWRcXG4rICogYWNyb3NzIG9wZXJhdGlvbnMgdG8gbWluaW1pemUgb3Bjb2RlIHNwYWNlIHVzYWdlLlxcbisgKi9cXG4rc3RydWN0IHBkc19jb3JlX2hvc3RfbWVtX2NtZCB7XFxuK1xcdHU4ICAgICBvcGNvZGU7XFxuK1xcdHU4ICAgICBvcGVyO1xcbitcXHRfX2xlMTYgaW5kZXg7XFxuK1xcdF9fbGUxNiB0YWc7XFxuK1xcdHU4ICAgICByZWFzb247XFxuK1xcdHU4ICAgICByc3ZkO1xcbitcXHRfX2xlMzIgbWF4X2NvbnRpZztcXG4rXFx0X19sZTMyIHNpemU7XFxuK1xcdF9fbGU2NCBidWZfcGE7XFxuK307XFxuK1xcbisvKipcXG4rICogc3RydWN0IHBkc19jb3JlX2hvc3RfbWVtX2NvbXAgLSBIT1NUX01FTSBjb21wbGV0aW9uXFxuKyAqIEBzdGF0dXM6ICAgICAgIFN0YXR1cyBvZiB0aGUgY29tbWFuZCAoZW51bSBwZHNfY29yZV9zdGF0dXNfY29kZSlcXG4rICogQG9wZXI6ICAgICAgICAgT3BlcmF0aW9uIHRoYXQgd2FzIHBlcmZvcm1lZFxcbisgKiBAY291bnQ6ICAgICAgICBOdW1iZXIgb2YgbWVtb3J5IHJlcXVlc3RzIChHRVRfQ09VTlQpXFxuKyAqIEBzaXplOiAgICAgICAgIFNpemUgb2YgbWVtb3J5IHJlcXVlc3QgaW4gYnl0ZXMgKFFVRVJZKVxcbisgKiBAdGFnOiAgICAgICAgICBUYWcgZm9yIHRoaXMgbWVtb3J5IHJlcXVlc3QgKFFVRVJZL0RFTClcXG4rICogQHJzdmQ6ICAgICAgICAgUmVzZXJ2ZWRcXG4rICovXFxuK3N0cnVjdCBwZHNfY29yZV9ob3N0X21lbV9jb21wIHtcXG4rXFx0dTggICAgIHN0YXR1cztcXG4rXFx0dTggICAgIG9wZXI7XFxuK1xcdF9fbGUxNiBjb3VudDtcXG4rXFx0X19sZTMyIHNpemU7XFxuK1xcdF9fbGUxNiB0YWc7XFxuK1xcdHU4ICAgICByc3ZkWzZdO1xcbit9O1xcbitcXG4gLypcXG4gICogdW5pb24gcGRzX2NvcmVfZGV2X2NtZCAtIE92ZXJsYXkgb2YgY29yZSBkZXZpY2UgY29tbWFuZCBzdHJ1Y3R1cmVzXFxuICAqL1xcbkBAIC00NjIsNiArOTE1LDE0IEBAIHVuaW9uIHBkc19jb3JlX2Rldl9jbWQge1xcbiBcXHRzdHJ1Y3QgcGRzX2NvcmVfdmZfc2V0YXR0cl9jbWQgICB2Zl9zZXRhdHRyO1xcbiBcXHRzdHJ1Y3QgcGRzX2NvcmVfdmZfZ2V0YXR0cl9jbWQgICB2Zl9nZXRhdHRyO1xcbiBcXHRzdHJ1Y3QgcGRzX2NvcmVfdmZfY3RybF9jbWQgICAgICB2Zl9jdHJsO1xcbitcXG4rXFx0c3RydWN0IHBkc19jb3JlX2dldF9jb21wb25lbnRfaW5mb19jbWQgZ2V0X2NvbXBvbmVudF9pbmZvO1xcbitcXHRzdHJ1Y3QgcGRzX2NvcmVfc2VuZF9wa2dfZGF0YV9jbWQgICAgICBzZW5kX3BrZ19kYXRhO1xcbitcXHRzdHJ1Y3QgcGRzX2NvcmVfc2VuZF9jb21wb25lbnRfdGJsX2NtZCBzZW5kX2NvbXBvbmVudF90Ymw7XFxuK1xcdHN0cnVjdCBwZHNfY29yZV9zZW5kX2NvbXBvbmVudF9jbWQgICAgIHNlbmRfY29tcG9uZW50O1xcbitcXHRzdHJ1Y3QgcGRzX2NvcmVfZmluYWxpemVfdXBkYXRlX2NtZCAgICBmaW5hbGl6ZV91cGRhdGU7XFxuK1xcdHN0cnVjdCBwZHNfY29yZV9tYXRjaF9yZWNvcmRfZGVzY19jbWQgIG1hdGNoX3JlY29yZF9kZXNjO1xcbitcXHRzdHJ1Y3QgcGRzX2NvcmVfaG9zdF9tZW1fY21kICAgICAgICAgICBob3N0X21lbTtcXG4gfTtcXG4gXFxuIC8qXFxuQEAgLTQ4MCw2ICs5NDEsMTQgQEAgdW5pb24gcGRzX2NvcmVfZGV2X2NvbXAge1xcbiBcXHRzdHJ1Y3QgcGRzX2NvcmVfdmZfc2V0YXR0cl9jb21wICAgdmZfc2V0YXR0cjtcXG4gXFx0c3RydWN0IHBkc19jb3JlX3ZmX2dldGF0dHJfY29tcCAgIHZmX2dldGF0dHI7XFxuIFxcdHN0cnVjdCBwZHNfY29yZV92Zl9jdHJsX2NvbXAgICAgICB2Zl9jdHJsO1xcbitcXG4rXFx0c3RydWN0IHBkc19jb3JlX2dldF9jb21wb25lbnRfaW5mb19jb21wIGdldF9jb21wb25lbnRfaW5mbztcXG4rXFx0c3RydWN0IHBkc19jb3JlX3NlbmRfcGtnX2RhdGFfY29tcCAgICAgIHNlbmRfcGtnX2RhdGE7XFxuK1xcdHN0cnVjdCBwZHNfY29yZV9zZW5kX2NvbXBvbmVudF90YmxfY29tcCBzZW5kX2NvbXBvbmVudF90Ymw7XFxuK1xcdHN0cnVjdCBwZHNfY29yZV9zZW5kX2NvbXBvbmVudF9jb21wICAgICBzZW5kX2NvbXBvbmVudDtcXG4rXFx0c3RydWN0IHBkc19jb3JlX2ZpbmFsaXplX3VwZGF0ZV9jb21wICAgIGZpbmFsaXplX3VwZGF0ZTtcXG4rXFx0c3RydWN0IHBkc19jb3JlX21hdGNoX3JlY29yZF9kZXNjX2NvbXAgIG1hdGNoX3JlY29yZF9kZXNjO1xcbitcXHRzdHJ1Y3QgcGRzX2NvcmVfaG9zdF9tZW1fY29tcCAgICAgICAgICAgaG9zdF9tZW07XFxuIH07XFxuIFxcbiAvKipcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTA6MDM6NDYuMTk0NzA4MjQ4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6OTQ1NDIwMzY3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEFNRC9QZW5zYW5kbyBDb3JlIFNtYXJ0TklDIGRyaXZlciAocGRzX2NvcmUpLCB3aGljaCByZXF1aXJlcyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBUaGVyZWZvcmUsIHRoZSBjb2RlIGlzIHVucmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOGZkN2RmOTM1ODMxNjQ0ODU4ZmUwZGViMzM5Yzc4NmQ0N2E3ZDg1N1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDMwIDEwOjAzOjQ0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L2FtZC9wZHNfY29yZS5yc3QgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvYW1kL3Bkc19jb3JlLnJzdFxuaW5kZXggOWU4YTE2YzQ0MTAyOS4uNDk0ODdhMzVjMTYzMiAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC9hbWQvcGRzX2NvcmUucnN0XG4rKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvYW1kL3Bkc19jb3JlLnJzdFxuQEAgLTEwMiw2ICsxMDIsOTUgQEAgY3VycmVudGx5IGluIHVzZSwgYW5kIHRoYXQgYmFuayB3aWxsIHVzZWQgZm9yIHRoZSBuZXh0IGJvb3Q6OlxuICAgIyBkZXZsaW5rIGRldiBmbGFzaCBwY2kvMDAwMDpiNTowMC4wIFxcXG4gICAgICAgICAgICAgZmlsZSBwZW5zYW5kby9kc2NfZndfMS42My4wLTIyLnRhclxuIFxuK0Zpcm13YXJlIE1hbmFnZW1lbnQgKFBMRE0pXG4rPT09PT09PT09PT09PT09PT09PT09PT09PT1cbitcbitGaXJtd2FyZSB0aGF0IHN1cHBvcnRzIFBMRE0gY2FuIGJlIHVwZGF0ZWQgdXNpbmcgdGhlIGRldmxpbmsgZmxhc2ggY29tbWFuZFxuK3dpdGggYSBQTERNIGZpcm13YXJlIHBhY2thZ2UuIFRoZSBlbnRpcmUgcGFja2FnZSBjYW4gYmUgdXBkYXRlZCBhdCBvbmNlOjpcbitcbisgICMgZGV2bGluayBkZXYgZmxhc2ggcGNpLzAwMDA6YjU6MDAuMCBmaWxlIGZpcm13YXJlLnBsZG1md1xuK1xuK0luZGl2aWR1YWwgY29tcG9uZW50cyBjYW4gYWxzbyBiZSB1cGRhdGVkIGJ5IHNwZWNpZnlpbmcgdGhlIGNvbXBvbmVudCBuYW1lOjpcbitcbisgICMgZGV2bGluayBkZXYgZmxhc2ggcGNpLzAwMDA6YjU6MDAuMCBcXFxuKyAgICAgICAgICAgIGZpbGUgZmlybXdhcmUucGxkbWZ3IGNvbXBvbmVudCBmdy5jcGxkXG4rXG4rUGVyLWNvbXBvbmVudCB1cGRhdGUgdXNlcyBkcml2ZXItZGVmaW5lZCBjb21wb25lbnQgbmFtZXMgKGZ3LCBmdy5jcGxkLFxuK2V0Yy4pLiBOb3QgYWxsIGNvbXBvbmVudHMgc3VwcG9ydCBwZXItY29tcG9uZW50IHVwZGF0ZSAtXG4rZGV2bGluayB3aWxsIHJlamVjdCB0aGUgcmVxdWVzdCBpZiB0aGUgc3BlY2lmaWVkIGNvbXBvbmVudCBjYW5ub3RcbitiZSB1cGRhdGVkLlxuK1xuK0dvbGQgKHJlY292ZXJ5KSBjb21wb25lbnRzIGNhbiBiZSB1cGRhdGVkIGJ5IHNwZWNpZnlpbmcgdGhlIGJhc2UgY29tcG9uZW50XG4rbmFtZSAoZS5nLiwgYGBmd2BgIGZvciBgYGZ3LmdvbGRgYCkgd2l0aCBhIGdvbGRmdyBwYWNrYWdlIGZpbGUgd2hlbiB0aGVcbitkZXZpY2Ugc3VwcG9ydHMgcGVyLWNvbXBvbmVudCB1cGRhdGUuIFRoZSBgYC5nb2xkYGAgc3VmZml4IGluIGRldmxpbmsgaW5mb1xuK291dHB1dCBpbmRpY2F0ZXMgdGhlIGdvbGQgc2xvdCB2ZXJzaW9uLCBub3QgYSBmbGFzaCB0YXJnZXQuXG4rXG4rSW5mbyB2ZXJzaW9ucyAoUExETSlcbis9PT09PT09PT09PT09PT09PT09PVxuK1xuK0Zpcm13YXJlIHRoYXQgc3VwcG9ydHMgUExETSByZXBvcnRzIGNvbXBvbmVudCB2ZXJzaW9ucyB1c2luZyBkcml2ZXItZGVmaW5lZFxuK25hbWVzLiBUaGUgZHJpdmVyIHJlcG9ydHMgdGhlIGZvbGxvd2luZyBjb21wb25lbnQgdmVyc2lvbnM6XG4rXG4rLi4gbGlzdC10YWJsZTo6IGRldmxpbmsgaW5mbyB2ZXJzaW9ucyBmb3IgUExETS1jYXBhYmxlIGZpcm13YXJlXG4rICAgOndpZHRoczogNSA1IDkwXG4rXG4rICAgKiAtIE5hbWVcbisgICAgIC0gVHlwZVxuKyAgICAgLSBEZXNjcmlwdGlvblxuKyAgICogLSBgYGZ3YGBcbisgICAgIC0gcnVubmluZywgc3RvcmVkXG4rICAgICAtIE1haW4gZmlybXdhcmVcbisgICAqIC0gYGBmdy5nb2xkYGBcbisgICAgIC0gc3RvcmVkXG4rICAgICAtIEdvbGQgKHJlY292ZXJ5KSBmaXJtd2FyZVxuKyAgICogLSBgYGZ3LmJvb3Rsb2FkZXJgYFxuKyAgICAgLSBydW5uaW5nLCBzdG9yZWRcbisgICAgIC0gQm9vdCBsb2FkZXJcbisgICAqIC0gYGBmdy5jcGxkYGBcbisgICAgIC0gcnVubmluZywgc3RvcmVkXG4rICAgICAtIENQTERcbisgICAqIC0gYGBmdy5zZWN1cmVgYFxuKyAgICAgLSBydW5uaW5nLCBzdG9yZWRcbisgICAgIC0gU2VjdXJlIGJvb3QgZmlybXdhcmVcbisgICAqIC0gYGBmdy5mcGdhYGBcbisgICAgIC0gcnVubmluZywgc3RvcmVkXG4rICAgICAtIEZQR0EgY29uZmlndXJhdGlvblxuKyAgICogLSBgYGZ3LnN1Y2BgXG4rICAgICAtIHJ1bm5pbmcsIHN0b3JlZFxuKyAgICAgLSBTeXN0ZW0gVW5pdCBDb250cm9sbGVyIGZpcm13YXJlXG4rICAgKiAtIGBgZncuc3VjLmJvb3Rsb2FkZXJgYFxuKyAgICAgLSBydW5uaW5nLCBzdG9yZWRcbisgICAgIC0gU3lzdGVtIFVuaXQgQ29udHJvbGxlciBib290bG9hZGVyXG4rICAgKiAtIGBgZncudWJvb3RgYFxuKyAgICAgLSBydW5uaW5nLCBzdG9yZWRcbisgICAgIC0gVS1Cb290IGJvb3Rsb2FkZXJcbisgICAqIC0gYGBhc2ljLmlkYGBcbisgICAgIC0gZml4ZWRcbisgICAgIC0gVGhlIEFTSUMgdHlwZSBmb3IgdGhpcyBkZXZpY2VcbisgICAqIC0gYGBhc2ljLnJldmBgXG4rICAgICAtIGZpeGVkXG4rICAgICAtIFRoZSByZXZpc2lvbiBvZiB0aGUgQVNJQyBmb3IgdGhpcyBkZXZpY2VcbitcbitFeGFtcGxlIG91dHB1dDo6XG4rXG4rICAkIGRldmxpbmsgZGV2IGluZm8gcGNpLzAwMDA6MDA6MDUuMFxuKyAgcGNpLzAwMDA6MDA6MDUuMDpcbisgICAgZHJpdmVyIHBkc19jb3JlXG4rICAgIHNlcmlhbF9udW1iZXIgRkxNMTg0MjAwNzNcbisgICAgdmVyc2lvbnM6XG4rICAgICAgICBmaXhlZDpcbisgICAgICAgICAgYXNpYy5pZCAweDBcbisgICAgICAgICAgYXNpYy5yZXYgMHgwXG4rICAgICAgICBydW5uaW5nOlxuKyAgICAgICAgICBmdy5ib290bG9hZGVyIDEuMi4zXG4rICAgICAgICAgIGZ3IDEuMy4wXG4rICAgICAgICAgIGZ3LmNwbGQgMy4xOFxuKyAgICAgICAgc3RvcmVkOlxuKyAgICAgICAgICBmdy5ib290bG9hZGVyIDEuMi4zXG4rICAgICAgICAgIGZ3LmdvbGQgMS4yLjBcbisgICAgICAgICAgZncgMS4zLjBcbisgICAgICAgICAgZncuY3BsZCAzLjE4XG4rXG4gSGVhbHRoIFJlcG9ydGVyc1xuID09PT09PT09PT09PT09PT1cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9LY29uZmlnXG5pbmRleCBlMzU5OTExNDFhMWEyLi43NDNlM2Q0YjZiOTRlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL0tjb25maWdcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9LY29uZmlnXG5AQCAtMTcxLDYgKzE3MSw3IEBAIGNvbmZpZyBQRFNfQ09SRVxuIFx0ZGVwZW5kcyBvbiA2NEJJVCBcdTAwMjZcdTAwMjYgUENJXG4gXHRzZWxlY3QgQVVYSUxJQVJZX0JVU1xuIFx0c2VsZWN0IE5FVF9ERVZMSU5LXG4rXHRzZWxlY3QgUExETUZXXG4gXHRoZWxwXG4gXHQgIFRoaXMgZW5hYmxlcyB0aGUgc3VwcG9ydCBmb3IgdGhlIEFNRC9QZW5zYW5kbyBDb3JlIGRldmljZSBmYW1pbHkgb2ZcbiBcdCAgYWRhcHRlcnMuICBNb3JlIHNwZWNpZmljIGluZm9ybWF0aW9uIG9uIHRoaXMgZHJpdmVyIGNhbiBiZVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9jb3JlLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvY29yZS5jXG5pbmRleCAwNGVjMjU2OWM2MWMwLi45MjJlM2VjOGFmMWI5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL2NvcmUuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL2NvcmUuY1xuQEAgLTQ4OSw2ICs0ODksMTUgQEAgdm9pZCBwZHNjX3RlYXJkb3duKHN0cnVjdCBwZHNjICpwZHNjLCBib29sIHJlbW92aW5nKVxuIFx0XHRwZHNjX2RldmNtZF9yZXNldChwZHNjKTtcbiBcbiBcdHBjaV9jbGVhcl9tYXN0ZXIocGRzYy1cdTAwM2VwZGV2KTtcbitcdGlmICghcGRzYy1cdTAwM2VwZGV2LVx1MDAzZWlzX3ZpcnRmbikge1xuK1x0XHR1MTYgdmFsO1xuK1xuK1x0XHQvKiBGbHVzaCBhbnkgaW4tZmxpZ2h0IERNQSBiZWZvcmUgZnJlZWluZyBidWZmZXJzLlxuK1x0XHQgKiBBIGNvbmZpZyByZWFkIGNvbXBsZXRpb24gY2Fubm90IHJldHVybiB1bnRpbCBhbGwgcHJpb3JcbitcdFx0ICogZGV2aWNlLWluaXRpYXRlZCBtZW1vcnkgd3JpdGVzIGhhdmUgY29tcGxldGVkLlxuK1x0XHQgKi9cbitcdFx0cGNpX3JlYWRfY29uZmlnX3dvcmQocGRzYy1cdTAwM2VwZGV2LCBQQ0lfVkVORE9SX0lELCBcdTAwMjZ2YWwpO1xuK1x0fVxuIFxuIFx0cGRzY19jb3JlX3VuaW5pdChwZHNjKTtcbiBcbkBAIC00OTcsNiArNTA2LDggQEAgdm9pZCBwZHNjX3RlYXJkb3duKHN0cnVjdCBwZHNjICpwZHNjLCBib29sIHJlbW92aW5nKVxuIFx0XHRwZHNjLVx1MDAzZXZpZnR5cGVfc3RhdHVzID0gTlVMTDtcbiBcdH1cbiBcbitcdHBkc2NfZGVidWdmc19kZWxfaG9zdF9tZW0ocGRzYyk7XG4rXHRwZHNjX2hvc3RfbWVtX2ZyZWUocGRzYyk7XG4gXHRwZHNjX2Rldl91bmluaXQocGRzYyk7XG4gXG4gXHRzZXRfYml0KFBEU0NfU19GV19ERUFELCBcdTAwMjZwZHNjLVx1MDAzZXN0YXRlKTtcbkBAIC01MDYsNiArNTE3LDggQEAgaW50IHBkc2Nfc3RhcnQoc3RydWN0IHBkc2MgKnBkc2MpXG4ge1xuIFx0cGRzX2NvcmVfaW50cl9tYXNrKFx1MDAyNnBkc2MtXHUwMDNlaW50cl9jdHJsW3Bkc2MtXHUwMDNlYWRtaW5xY3EuaW50eF0sXG4gXHRcdFx0ICAgUERTX0NPUkVfSU5UUl9NQVNLX0NMRUFSKTtcbitcdHBkc2NfaG9zdF9tZW1fYWRkKHBkc2MpO1xuK1x0cGRzY19kZWJ1Z2ZzX2FkZF9ob3N0X21lbShwZHNjKTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbkBAIC01ODcsNiArNjAwLDggQEAgdm9pZCBwZHNjX2Z3X3VwKHN0cnVjdCBwZHNjICpwZHNjKVxuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG4rXHRwZHNjX2Z3X2NvbXBvbmVudHNfaW52YWxpZGF0ZShwZHNjKTtcbitcbiBcdGVyciA9IHBkc2Nfc2V0dXAocGRzYywgUERTQ19TRVRVUF9SRUNPVkVSWSk7XG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIGVycl9vdXQ7XG5AQCAtNjcwLDMgKzY4NSwxNjEgQEAgdm9pZCBwZHNjX2hlYWx0aF90aHJlYWQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIG91dF91bmxvY2s6XG4gXHRtdXRleF91bmxvY2soXHUwMDI2cGRzYy1cdTAwM2Vjb25maWdfbG9jayk7XG4gfVxuK1xuK3N0YXRpYyB2b2lkIHBkc2NfaG9zdF9tZW1fZGVsX29uZShzdHJ1Y3QgcGRzYyAqcGRzYywgdTE2IHRhZywgdTggcmVhc29uKVxuK3tcbitcdHVuaW9uIHBkc19jb3JlX2Rldl9jb21wIGNvbXAgPSB7fTtcbitcdHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgY21kID0ge1xuK1x0XHQuaG9zdF9tZW0ub3Bjb2RlID0gUERTX0NPUkVfQ01EX0hPU1RfTUVNLFxuK1x0XHQuaG9zdF9tZW0ub3BlciA9IFBEU19DT1JFX0hPU1RfTUVNX0RFTCxcbitcdFx0Lmhvc3RfbWVtLnRhZyA9IGNwdV90b19sZTE2KHRhZyksXG4rXHRcdC5ob3N0X21lbS5yZWFzb24gPSByZWFzb24sXG4rXHR9O1xuK1xuK1x0ZGV2X2RiZyhwZHNjLVx1MDAzZWRldiwgXCJTZW5kaW5nIGRldmNtZCBmb3IgbWVtIGRlbCB0YWcgJWRcXG5cIiwgdGFnKTtcbitcdHBkc2NfZGV2Y21kKHBkc2MsIFx1MDAyNmNtZCwgXHUwMDI2Y29tcCwgcGRzYy1cdTAwM2VkZXZjbWRfdGltZW91dCk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcGRzY19ob3N0X21lbV9hZGRfb25lKHN0cnVjdCBwZHNjICpwZHNjLCBpbnQgaW5kZXgpXG4re1xuK1x0c3RydWN0IHBkc2NfaG9zdF9tZW0gKmhtID0gXHUwMDI2cGRzYy1cdTAwM2Vob3N0X21lbV9yZXFzW2luZGV4XTtcbitcdHVuaW9uIHBkc19jb3JlX2Rldl9jb21wIGNvbXAgPSB7fTtcbitcdHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgY21kID0ge307XG4rXHRpbnQgZXJyO1xuK1xuK1x0Y21kLmhvc3RfbWVtLm9wY29kZSA9IFBEU19DT1JFX0NNRF9IT1NUX01FTTtcbitcdGNtZC5ob3N0X21lbS5vcGVyID0gUERTX0NPUkVfSE9TVF9NRU1fUVVFUlk7XG4rXHRjbWQuaG9zdF9tZW0uaW5kZXggPSBjcHVfdG9fbGUxNihpbmRleCk7XG4rXHRkZXZfZGJnKHBkc2MtXHUwMDNlZGV2LCBcIlNlbmRpbmcgZGV2Y21kIGZvciBtZW0gcXVlcnkgaW5kZXggJWRcXG5cIiwgaW5kZXgpO1xuK1x0ZXJyID0gcGRzY19kZXZjbWQocGRzYywgXHUwMDI2Y21kLCBcdTAwMjZjb21wLCBwZHNjLVx1MDAzZWRldmNtZF90aW1lb3V0KTtcbitcdGlmIChlcnIgfHwgY29tcC5zdGF0dXMgIT0gUERTX1JDX1NVQ0NFU1MpIHtcbitcdFx0ZGV2X2VycihwZHNjLVx1MDAzZWRldiwgXCJtZW0gcXVlcnkgZmFpbGVkIGVyciAlZCBzdGF0dXMgJWRcXG5cIixcbitcdFx0XHRlcnIsIGNvbXAuc3RhdHVzKTtcbitcdFx0cmV0dXJuIGVyciA/IGVyciA6IC1FSU87XG4rXHR9XG4rXHRobS1cdTAwM2VzaXplID0gbGUzMl90b19jcHUoY29tcC5ob3N0X21lbS5zaXplKTtcbitcdGhtLVx1MDAzZXRhZyA9IGxlMTZfdG9fY3B1KGNvbXAuaG9zdF9tZW0udGFnKTtcbitcdGRldl9kYmcocGRzYy1cdTAwM2VkZXYsIFwibWVtIHF1ZXJ5IHJldHVybmVkIHNpemUgJWQgdGFnICVkXFxuXCIsXG4rXHRcdGhtLVx1MDAzZXNpemUsIGhtLVx1MDAzZXRhZyk7XG4rXG4rXHRpZiAoIWhtLVx1MDAzZXNpemUgfHwgaG0tXHUwMDNlc2l6ZSBcdTAwM2UgUERTQ19IT1NUX01FTV9NQVhfQ09OVElHKSB7XG4rXHRcdGRldl9lcnIocGRzYy1cdTAwM2VkZXYsIFwiaW52YWxpZCBzaXplICVkIGZvciB0YWcgJWRcXG5cIixcbitcdFx0XHRobS1cdTAwM2VzaXplLCBobS1cdTAwM2V0YWcpO1xuK1x0XHRlcnIgPSAtRUlOVkFMO1xuK1x0XHRnb3RvIGVycl9kZWw7XG4rXHR9XG4rXG4rXHRobS1cdTAwM2VvcmRlciA9IGdldF9vcmRlcihobS1cdTAwM2VzaXplKTtcbitcdGhtLVx1MDAzZXBnID0gYWxsb2NfcGFnZXMoR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8gfCBfX0dGUF9OT1dBUk4sIGhtLVx1MDAzZW9yZGVyKTtcbitcdGlmICghaG0tXHUwMDNlcGcpIHtcbitcdFx0ZGV2X3dhcm4ocGRzYy1cdTAwM2VkZXYsIFwiYWxsb2Mgb3JkZXIgJWQgZmFpbGVkIGZvciB0YWcgJWRcXG5cIixcbitcdFx0XHQgaG0tXHUwMDNlb3JkZXIsIGhtLVx1MDAzZXRhZyk7XG4rXHRcdGVyciA9IC1FTk9NRU07XG4rXHRcdGdvdG8gZXJyX2RlbDtcbitcdH1cbitcbitcdGhtLVx1MDAzZXBhID0gZG1hX21hcF9wYWdlKHBkc2MtXHUwMDNlZGV2LCBobS1cdTAwM2VwZywgMCwgaG0tXHUwMDNlc2l6ZSxcbitcdFx0XHQgICAgICBETUFfQklESVJFQ1RJT05BTCk7XG4rXHRpZiAoZG1hX21hcHBpbmdfZXJyb3IocGRzYy1cdTAwM2VkZXYsIGhtLVx1MDAzZXBhKSkge1xuK1x0XHRkZXZfZXJyKHBkc2MtXHUwMDNlZGV2LCBcImRtYSBtYXAgZmFpbGVkIGZvciB0YWcgJWQgc2l6ZSAlZFxcblwiLFxuK1x0XHRcdGhtLVx1MDAzZXRhZywgaG0tXHUwMDNlc2l6ZSk7XG4rXHRcdF9fZnJlZV9wYWdlcyhobS1cdTAwM2VwZywgaG0tXHUwMDNlb3JkZXIpO1xuK1x0XHRobS1cdTAwM2VwZyA9IE5VTEw7XG4rXHRcdGVyciA9IC1FSU87XG4rXHRcdGdvdG8gZXJyX2RlbDtcbitcdH1cbitcbitcdC8qIFRyYWNrIHRoaXMgYWxsb2NhdGlvbiBzbyBwZHNjX2hvc3RfbWVtX2ZyZWUoKSBjYW4gY2xlYW4gaXQgdXAgKi9cbitcdHBkc2MtXHUwMDNlbnVtX2hvc3RfbWVtX3JlcXMrKztcbitcbitcdG1lbXNldChcdTAwMjZjbWQsIDAsIHNpemVvZihjbWQpKTtcbitcdG1lbXNldChcdTAwMjZjb21wLCAwLCBzaXplb2YoY29tcCkpO1xuK1x0Y21kLmhvc3RfbWVtLm9wY29kZSA9IFBEU19DT1JFX0NNRF9IT1NUX01FTTtcbitcdGNtZC5ob3N0X21lbS5vcGVyID0gUERTX0NPUkVfSE9TVF9NRU1fQUREO1xuK1x0Y21kLmhvc3RfbWVtLnRhZyA9IGNwdV90b19sZTE2KGhtLVx1MDAzZXRhZyk7XG4rXHRjbWQuaG9zdF9tZW0uc2l6ZSA9IGNwdV90b19sZTMyKGhtLVx1MDAzZXNpemUpO1xuK1x0Y21kLmhvc3RfbWVtLmJ1Zl9wYSA9IGNwdV90b19sZTY0KGhtLVx1MDAzZXBhKTtcbitcbitcdGRldl9kYmcocGRzYy1cdTAwM2VkZXYsIFwiU2VuZGluZyBkZXZjbWQgZm9yIG1lbSBhZGQgdGFnICVkIHNpemUgJWQgcGEgJXBhZFxcblwiLFxuK1x0XHRobS1cdTAwM2V0YWcsIGhtLVx1MDAzZXNpemUsIFx1MDAyNmhtLVx1MDAzZXBhKTtcbitcdGVyciA9IHBkc2NfZGV2Y21kKHBkc2MsIFx1MDAyNmNtZCwgXHUwMDI2Y29tcCwgcGRzYy1cdTAwM2VkZXZjbWRfdGltZW91dCk7XG4rXHRpZiAoZXJyIHx8IGNvbXAuc3RhdHVzICE9IFBEU19SQ19TVUNDRVNTKSB7XG4rXHRcdGRldl9lcnIocGRzYy1cdTAwM2VkZXYsIFwibWVtIGFkZCBmYWlsZWQgZXJyICVkIHN0YXR1cyAlZCBmb3IgdGFnICVkXFxuXCIsXG4rXHRcdFx0ZXJyLCBjb21wLnN0YXR1cywgaG0tXHUwMDNldGFnKTtcbitcdFx0ZXJyID0gZXJyID8gZXJyIDogLUVJTztcbitcdFx0Z290byBlcnJfZGVsO1xuK1x0fVxuK1x0ZGV2X2RiZyhwZHNjLVx1MDAzZWRldiwgXCJtZW0gYWRkIGNvbXBsZXRlZCBmb3IgdGFnICVkXFxuXCIsIGhtLVx1MDAzZXRhZyk7XG4rXG4rXHRyZXR1cm4gMDtcbitcbitlcnJfZGVsOlxuK1x0LyogQWZ0ZXIgTUVNX1FVRVJZIHN1Y2NlZWRzLCBmaXJtd2FyZSBleHBlY3RzIE1FTV9BREQgb3IgTUVNX0RFTCAqL1xuK1x0cGRzY19ob3N0X21lbV9kZWxfb25lKHBkc2MsIGhtLVx1MDAzZXRhZywgUERTX1JDX0VOT01FTSk7XG4rXHRyZXR1cm4gZXJyO1xuK31cbitcbit2b2lkIHBkc2NfaG9zdF9tZW1fYWRkKHN0cnVjdCBwZHNjICpwZHNjKVxuK3tcbitcdHVuaW9uIHBkc19jb3JlX2Rldl9jb21wIGNvbXAgPSB7fTtcbitcdHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgY21kID0ge307XG4rXHR1MTYgY291bnQ7XG4rXHRpbnQgZXJyO1xuK1x0aW50IGk7XG4rXG4rXHRpZiAoIShwZHNjLVx1MDAzZWRldl9pZGVudC5jYXBhYmlsaXRpZXMgXHUwMDI2XG4rXHQgICAgIGNwdV90b19sZTY0KFBEU19DT1JFX0RFVl9DQVBfSE9TVF9NRU0pKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0Y21kLmhvc3RfbWVtLm9wY29kZSA9IFBEU19DT1JFX0NNRF9IT1NUX01FTTtcbitcdGNtZC5ob3N0X21lbS5vcGVyID0gUERTX0NPUkVfSE9TVF9NRU1fR0VUX0NPVU5UO1xuK1x0Y21kLmhvc3RfbWVtLmluZGV4ID0gY3B1X3RvX2xlMTYoUERTQ19IT1NUX01FTV9NQVhfQ09VTlQpO1xuK1x0Y21kLmhvc3RfbWVtLm1heF9jb250aWcgPSBjcHVfdG9fbGUzMihQRFNDX0hPU1RfTUVNX01BWF9DT05USUcpO1xuK1x0ZGV2X2RiZyhwZHNjLVx1MDAzZWRldiwgXCJTZW5kaW5nIGRldmNtZCBmb3IgbWVtIGdldCBjb3VudCBtYXhfY29udGlnICV1XFxuXCIsXG4rXHRcdFBEU0NfSE9TVF9NRU1fTUFYX0NPTlRJRyk7XG4rXHRlcnIgPSBwZHNjX2RldmNtZChwZHNjLCBcdTAwMjZjbWQsIFx1MDAyNmNvbXAsIHBkc2MtXHUwMDNlZGV2Y21kX3RpbWVvdXQpO1xuK1x0aWYgKGVyciB8fCBjb21wLnN0YXR1cyAhPSBQRFNfUkNfU1VDQ0VTUykge1xuK1x0XHRkZXZfZXJyKHBkc2MtXHUwMDNlZGV2LCBcIm1lbSBnZXQgY291bnQgZmFpbGVkIGVyciAlZCBzdGF0dXMgJWRcXG5cIixcbitcdFx0XHRlcnIsIGNvbXAuc3RhdHVzKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0Y291bnQgPSBtaW4obGUxNl90b19jcHUoY29tcC5ob3N0X21lbS5jb3VudCksXG4rXHRcdCAgICBQRFNDX0hPU1RfTUVNX01BWF9DT1VOVCk7XG4rXHRkZXZfZGJnKHBkc2MtXHUwMDNlZGV2LCBcIm1lbSBnZXQgY291bnQgcmV0dXJuZWQgY291bnQgJWRcXG5cIiwgY291bnQpO1xuK1x0aWYgKGNvdW50ID09IDApXG4rXHRcdHJldHVybjtcbitcbitcdHBkc2MtXHUwMDNlaG9zdF9tZW1fcmVxcyA9IGt6YWxsb2Nfb2JqcygqcGRzYy1cdTAwM2Vob3N0X21lbV9yZXFzLCBjb3VudCxcbitcdFx0XHRcdFx0ICAgR0ZQX0tFUk5FTCk7XG4rXHRpZiAoIXBkc2MtXHUwMDNlaG9zdF9tZW1fcmVxcykge1xuK1x0XHRkZXZfZXJyKHBkc2MtXHUwMDNlZGV2LCBcImZhaWxlZCB0byBhbGxvYyBob3N0X21lbV9yZXFzIGFycmF5XFxuXCIpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBjb3VudDsgaSsrKSB7XG4rXHRcdGVyciA9IHBkc2NfaG9zdF9tZW1fYWRkX29uZShwZHNjLCBpKTtcbitcdFx0aWYgKGVycilcbitcdFx0XHRicmVhaztcbitcdH1cbit9XG4rXG4rdm9pZCBwZHNjX2hvc3RfbWVtX2ZyZWUoc3RydWN0IHBkc2MgKnBkc2MpXG4re1xuK1x0aW50IGk7XG4rXG4rXHRpZiAoIXBkc2MtXHUwMDNlaG9zdF9tZW1fcmVxcylcbitcdFx0cmV0dXJuO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgcGRzYy1cdTAwM2VudW1faG9zdF9tZW1fcmVxczsgaSsrKSB7XG4rXHRcdGRtYV91bm1hcF9wYWdlKHBkc2MtXHUwMDNlZGV2LCBwZHNjLVx1MDAzZWhvc3RfbWVtX3JlcXNbaV0ucGEsXG4rXHRcdFx0ICAgICAgIHBkc2MtXHUwMDNlaG9zdF9tZW1fcmVxc1tpXS5zaXplLFxuK1x0XHRcdCAgICAgICBETUFfQklESVJFQ1RJT05BTCk7XG4rXHRcdF9fZnJlZV9wYWdlcyhwZHNjLVx1MDAzZWhvc3RfbWVtX3JlcXNbaV0ucGcsXG4rXHRcdFx0ICAgICBwZHNjLVx1MDAzZWhvc3RfbWVtX3JlcXNbaV0ub3JkZXIpO1xuK1x0fVxuK1xuK1x0a2ZyZWUocGRzYy1cdTAwM2Vob3N0X21lbV9yZXFzKTtcbitcdHBkc2MtXHUwMDNlaG9zdF9tZW1fcmVxcyA9IE5VTEw7XG4rXHRwZHNjLVx1MDAzZW51bV9ob3N0X21lbV9yZXFzID0gMDtcbit9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL2NvcmUuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9jb3JlLmhcbmluZGV4IGI3ZmU5YWQ3MzM0OTguLjc5MTc1NmE1MDg3MGUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvY29yZS5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvY29yZS5oXG5AQCAtNSw2ICs1LDcgQEBcbiAjZGVmaW5lIF9QRFNDX0hfXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZGVidWdmcy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbW16b25lLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvZGV2bGluay5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGRzL3Bkc19jb21tb24uaFx1MDAzZVxuQEAgLTIzLDYgKzI0LDIwIEBAXG4gI2RlZmluZSBQRFNDX1NFVFVQX1JFQ09WRVJZXHRmYWxzZVxuICNkZWZpbmUgUERTQ19TRVRVUF9JTklUXHRcdHRydWVcbiBcbisvKiBVc2UgZml4ZWQgNE1CIGluc3RlYWQgb2YgUEFHRV9TSVpFIFx1MDAzY1x1MDAzYyBNQVhfUEFHRV9PUkRFUiB0byBhdm9pZFxuKyAqIGNwdV90b19sZTMyKCkgdHJ1bmNhdGlvbiBvbiBsYXJnZS1wYWdlIGNvbmZpZ3NcbisgKi9cbisjZGVmaW5lIFBEU0NfSE9TVF9NRU1fTUFYX0NPTlRJRyAoNCAqIDEwMjQgKiAxMDI0KVxuKyNkZWZpbmUgUERTQ19IT1NUX01FTV9NQVhfQ09VTlQgIDI1NlxuK1xuK3N0cnVjdCBwZHNjX2RlZmVycmVkX2RtYSB7XG4rXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XG4rXHRkbWFfYWRkcl90IGRtYV9hZGRyO1xuK1x0dm9pZCAqdmE7XG4rXHRzaXplX3Qgc2l6ZTtcbitcdGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcjtcbit9O1xuK1xuIHN0cnVjdCBwZHNjX2Rldl9iYXIge1xuIFx0dm9pZCBfX2lvbWVtICp2YWRkcjtcbiBcdHBoeXNfYWRkcl90IGJ1c19hZGRyO1xuQEAgLTE0MSw2ICsxNTYsMTQgQEAgc3RydWN0IHBkc2NfdmlmdHlwZSB7XG4gXHRzdHJ1Y3QgcGRzX2F1eGlsaWFyeV9kZXYgKnBhZGV2O1xuIH07XG4gXG4rc3RydWN0IHBkc2NfaG9zdF9tZW0ge1xuK1x0dTMyIHNpemU7XG4rXHR1MTYgdGFnO1xuK1x0dTggb3JkZXI7XG4rXHRzdHJ1Y3QgcGFnZSAqcGc7XG4rXHRkbWFfYWRkcl90IHBhO1xuK307XG4rXG4gLyogTm8gc3RhdGUgZmxhZ3Mgc2V0IG1lYW5zIHdlIGFyZSBpbiBhIHN0ZWFkeSBydW5uaW5nIHN0YXRlICovXG4gZW51bSBwZHNjX3N0YXRlX2ZsYWdzIHtcbiBcdFBEU0NfU19GV19ERUFELFx0XHQgICAgLyogc3RvcHBlZCwgd2FpdCBvbiBzdGFydHVwIG9yIHJlY292ZXJ5ICovXG5AQCAtMTg1LDYgKzIwOCw4IEBAIHN0cnVjdCBwZHNjIHtcbiBcdHN0cnVjdCBtdXRleCBkZXZjbWRfbG9jaztcdC8qIGxvY2sgZm9yIGRldl9jbWQgb3BlcmF0aW9ucyAqL1xuIFx0c3RydWN0IG11dGV4IGNvbmZpZ19sb2NrO1x0LyogbG9jayBmb3IgY29uZmlndXJhdGlvbiBvcGVyYXRpb25zICovXG4gXHRzcGlubG9ja190IGFkbWlucV9sb2NrO1x0XHQvKiBsb2NrIGZvciBhZG1pbnEgb3BlcmF0aW9ucyAqL1xuK1x0c3RydWN0IGxpc3RfaGVhZCBkZWZlcnJlZF9kbWFfbGlzdDtcbitcdHNwaW5sb2NrX3QgZGVmZXJyZWRfZG1hX2xvY2s7XHQvKiBsb2NrIGZvciBkZWZlcnJlZCBETUEgbGlzdCAqL1xuIFx0cmVmY291bnRfdCBhZG1pbnFfcmVmY250O1xuIFx0c3RydWN0IHBkc19jb3JlX2Rldl9pbmZvX3JlZ3MgX19pb21lbSAqaW5mb19yZWdzO1xuIFx0c3RydWN0IHBkc19jb3JlX2Rldl9jbWRfcmVncyBfX2lvbWVtICpjbWRfcmVncztcbkBAIC0xOTksNiArMjI0LDExIEBAIHN0cnVjdCBwZHNjIHtcbiBcdHU2NCBsYXN0X2VpZDtcbiBcdHN0cnVjdCBwZHNjX3ZpZnR5cGUgKnZpZnR5cGVfc3RhdHVzO1xuIFx0c3RydWN0IHdvcmtfc3RydWN0IHBjaV9yZXNldF93b3JrO1xuK1xuK1x0c3RydWN0IHBkc2NfaG9zdF9tZW0gKmhvc3RfbWVtX3JlcXM7XG4rXHR1MTYgbnVtX2hvc3RfbWVtX3JlcXM7XG4rXG4rXHRzdHJ1Y3QgcGRzX2NvcmVfY29tcG9uZW50X2xpc3RfaW5mbyBmd19jb21wb25lbnRzO1xuIH07XG4gXG4gLyoqIGVudW0gcGRzX2NvcmVfZGJlbGxfYml0cyAtIGJpdHdpc2UgY29tcG9zaXRpb24gb2YgZGJlbGwgdmFsdWVzLlxuQEAgLTI3NSwxNCArMzA1LDI0IEBAIHZvaWQgcGRzY19kZWJ1Z2ZzX2FkZF92aWZ0eXBlKHN0cnVjdCBwZHNjICpwZHNjKTtcbiB2b2lkIHBkc2NfZGVidWdmc19hZGRfaXJxcyhzdHJ1Y3QgcGRzYyAqcGRzYyk7XG4gdm9pZCBwZHNjX2RlYnVnZnNfYWRkX3FjcShzdHJ1Y3QgcGRzYyAqcGRzYywgc3RydWN0IHBkc2NfcWNxICpxY3EpO1xuIHZvaWQgcGRzY19kZWJ1Z2ZzX2RlbF9xY3Eoc3RydWN0IHBkc2NfcWNxICpxY3EpO1xuK3ZvaWQgcGRzY19kZWJ1Z2ZzX2FkZF9ob3N0X21lbShzdHJ1Y3QgcGRzYyAqcGRzYyk7XG4rdm9pZCBwZHNjX2RlYnVnZnNfZGVsX2hvc3RfbWVtKHN0cnVjdCBwZHNjICpwZHNjKTtcbiBcbiBpbnQgcGRzY19lcnJfdG9fZXJybm8oZW51bSBwZHNfY29yZV9zdGF0dXNfY29kZSBjb2RlKTtcbiBib29sIHBkc2NfaXNfZndfcnVubmluZyhzdHJ1Y3QgcGRzYyAqcGRzYyk7XG4gYm9vbCBwZHNjX2lzX2Z3X2dvb2Qoc3RydWN0IHBkc2MgKnBkc2MpO1xuIGludCBwZHNjX2RldmNtZChzdHJ1Y3QgcGRzYyAqcGRzYywgdW5pb24gcGRzX2NvcmVfZGV2X2NtZCAqY21kLFxuIFx0XHR1bmlvbiBwZHNfY29yZV9kZXZfY29tcCAqY29tcCwgaW50IG1heF9zZWNvbmRzKTtcbitpbnQgcGRzY19kZXZjbWRfd2l0aF9kYXRhKHN0cnVjdCBwZHNjICpwZHNjLCB1bmlvbiBwZHNfY29yZV9kZXZfY21kICpjbWQsXG4rXHRcdFx0ICBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgZGF0YV9sZW4sXG4rXHRcdFx0ICB1bmlvbiBwZHNfY29yZV9kZXZfY29tcCAqY29tcCwgaW50IG1heF9zZWNvbmRzKTtcbitpbnQgcGRzY19kZXZjbWRfd2l0aF9kYXRhX25vbXNnKHN0cnVjdCBwZHNjICpwZHNjLCB1bmlvbiBwZHNfY29yZV9kZXZfY21kICpjbWQsXG4rXHRcdFx0XHRjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgZGF0YV9sZW4sXG4rXHRcdFx0XHR1bmlvbiBwZHNfY29yZV9kZXZfY29tcCAqY29tcCwgaW50IG1heF9zZWNvbmRzKTtcbiBpbnQgcGRzY19kZXZjbWRfbG9ja2VkKHN0cnVjdCBwZHNjICpwZHNjLCB1bmlvbiBwZHNfY29yZV9kZXZfY21kICpjbWQsXG4gXHRcdCAgICAgICB1bmlvbiBwZHNfY29yZV9kZXZfY29tcCAqY29tcCwgaW50IG1heF9zZWNvbmRzKTtcbitpbnQgcGRzY19kZXZjbWRfbG9ja2VkX25vbXNnKHN0cnVjdCBwZHNjICpwZHNjLCB1bmlvbiBwZHNfY29yZV9kZXZfY21kICpjbWQsXG4rXHRcdFx0ICAgICB1bmlvbiBwZHNfY29yZV9kZXZfY29tcCAqY29tcCwgaW50IG1heF9zZWNvbmRzKTtcbiBpbnQgcGRzY19kZXZjbWRfaW5pdChzdHJ1Y3QgcGRzYyAqcGRzYyk7XG4gaW50IHBkc2NfZGV2Y21kX3Jlc2V0KHN0cnVjdCBwZHNjICpwZHNjKTtcbiBpbnQgcGRzY19kZXZfaW5pdChzdHJ1Y3QgcGRzYyAqcGRzYyk7XG5AQCAtMzE1LDExICszNTUsMjMgQEAgdm9pZCBwZHNjX3Byb2Nlc3NfYWRtaW5xKHN0cnVjdCBwZHNjX3FjcSAqcWNxKTtcbiB2b2lkIHBkc2Nfd29ya190aHJlYWQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcbiBpcnFyZXR1cm5fdCBwZHNjX2FkbWlucV9pc3IoaW50IGlycSwgdm9pZCAqZGF0YSk7XG4gXG4taW50IHBkc2NfZmlybXdhcmVfdXBkYXRlKHN0cnVjdCBwZHNjICpwZHNjLCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3LFxuK2ludCBwZHNjX2Zpcm13YXJlX3VwZGF0ZShzdHJ1Y3QgcGRzYyAqcGRzYyxcbitcdFx0XHQgc3RydWN0IGRldmxpbmtfZmxhc2hfdXBkYXRlX3BhcmFtcyAqcGFyYW1zLFxuIFx0XHRcdCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xuK2ludCBwZHNjX2dldF9jb21wb25lbnRfaW5mbyhzdHJ1Y3QgcGRzYyAqcGRzYyk7XG4rY29uc3QgY2hhciAqcGRzY19md190eXBlX3RvX25hbWUodTggdHlwZSk7XG4rdm9pZCBwZHNjX2Z3X2NvbXBvbmVudHNfaW52YWxpZGF0ZShzdHJ1Y3QgcGRzYyAqcGRzYyk7XG4gXG4gdm9pZCBwZHNjX2Z3X2Rvd24oc3RydWN0IHBkc2MgKnBkc2MpO1xuIHZvaWQgcGRzY19md191cChzdHJ1Y3QgcGRzYyAqcGRzYyk7XG4gdm9pZCBwZHNjX3BjaV9yZXNldF90aHJlYWQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcbiBcbit2b2lkIHBkc2NfaG9zdF9tZW1fYWRkKHN0cnVjdCBwZHNjICpwZHNjKTtcbit2b2lkIHBkc2NfaG9zdF9tZW1fZnJlZShzdHJ1Y3QgcGRzYyAqcGRzYyk7XG4rXG4rdm9pZCBwZHNjX2RlZmVycmVkX2RtYV9hZGQoc3RydWN0IHBkc2MgKnBkc2MsIHN0cnVjdCBwZHNjX2RlZmVycmVkX2RtYSAqZW50cnksXG4rXHRcdFx0ICAgZG1hX2FkZHJfdCBkbWFfYWRkciwgdm9pZCAqdmEsIHNpemVfdCBzaXplLFxuK1x0XHRcdCAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcik7XG4rdm9pZCBwZHNjX2RlZmVycmVkX2RtYV9mcmVlKHN0cnVjdCBwZHNjICpwZHNjKTtcbitcbiAjZW5kaWYgLyogX1BEU0NfSF8gKi9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvZGVidWdmcy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL2RlYnVnZnMuY1xuaW5kZXggODEwYTBjZDliY2FjOC4uZWYwYTFiN2QxNTliNSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9kZWJ1Z2ZzLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9kZWJ1Z2ZzLmNcbkBAIC0xNzgsMyArMTc4LDQ4IEBAIHZvaWQgcGRzY19kZWJ1Z2ZzX2RlbF9xY3Eoc3RydWN0IHBkc2NfcWNxICpxY3EpXG4gXHRkZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmUocWNxLVx1MDAzZWRlbnRyeSk7XG4gXHRxY3EtXHUwMDNlZGVudHJ5ID0gTlVMTDtcbiB9XG4rXG4rc3RhdGljIGludCBob3N0X21lbV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxuK3tcbitcdHN0cnVjdCBwZHNjICpwZHNjID0gc2VxLVx1MDAzZXByaXZhdGU7XG4rXHRzdHJ1Y3QgcGRzY19ob3N0X21lbSAqaG07XG4rXHRpbnQgaTtcbitcbitcdGlmICghcGRzYy1cdTAwM2Vob3N0X21lbV9yZXFzIHx8IHBkc2MtXHUwMDNlbnVtX2hvc3RfbWVtX3JlcXMgPT0gMCkge1xuK1x0XHRzZXFfcHV0cyhzZXEsIFwiTm8gaG9zdCBtZW1vcnkgYWxsb2NhdGVkXFxuXCIpO1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbitcbitcdHNlcV9wcmludGYoc2VxLCBcIkhvc3QgbWVtb3J5IHJlcXVlc3RzOiAldVxcblxcblwiLFxuK1x0XHQgICBwZHNjLVx1MDAzZW51bV9ob3N0X21lbV9yZXFzKTtcbitcdHNlcV9wdXRzKHNlcSwgXCJUYWcgICAgU2l6ZSAgICAgICAgIE9yZGVyICBQQVxcblwiKTtcbitcdHNlcV9wdXRzKHNlcSwgXCItLS0gICAgLS0tLSAgICAgICAgIC0tLS0tICAtLVxcblwiKTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHBkc2MtXHUwMDNlbnVtX2hvc3RfbWVtX3JlcXM7IGkrKykge1xuK1x0XHRobSA9IFx1MDAyNnBkc2MtXHUwMDNlaG9zdF9tZW1fcmVxc1tpXTtcbitcbitcdFx0aWYgKCFobS1cdTAwM2VwZylcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0c2VxX3ByaW50ZihzZXEsIFwiJS02dSAlLTEydSAlLTZ1ICVwYWRcXG5cIixcbitcdFx0XHQgICBobS1cdTAwM2V0YWcsIGhtLVx1MDAzZXNpemUsIGhtLVx1MDAzZW9yZGVyLCBcdTAwMjZobS1cdTAwM2VwYSk7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rREVGSU5FX1NIT1dfQVRUUklCVVRFKGhvc3RfbWVtKTtcbitcbit2b2lkIHBkc2NfZGVidWdmc19hZGRfaG9zdF9tZW0oc3RydWN0IHBkc2MgKnBkc2MpXG4re1xuK1x0aWYgKCEocGRzYy1cdTAwM2VkZXZfaWRlbnQuY2FwYWJpbGl0aWVzIFx1MDAyNlxuK1x0ICAgICBjcHVfdG9fbGU2NChQRFNfQ09SRV9ERVZfQ0FQX0hPU1RfTUVNKSkpXG4rXHRcdHJldHVybjtcbitcbitcdGRlYnVnZnNfY3JlYXRlX2ZpbGUoXCJob3N0X21lbVwiLCAwNDAwLCBwZHNjLVx1MDAzZWRlbnRyeSxcbitcdFx0XHQgICAgcGRzYywgXHUwMDI2aG9zdF9tZW1fZm9wcyk7XG4rfVxuK1xuK3ZvaWQgcGRzY19kZWJ1Z2ZzX2RlbF9ob3N0X21lbShzdHJ1Y3QgcGRzYyAqcGRzYylcbit7XG4rXHRkZWJ1Z2ZzX2xvb2t1cF9hbmRfcmVtb3ZlKFwiaG9zdF9tZW1cIiwgcGRzYy1cdTAwM2VkZW50cnkpO1xuK31cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvZGV2LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvZGV2LmNcbmluZGV4IGJkZWQ2YjMzMjg5Y2UuLmM1MDc3ODE3NWUyZjMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvZGV2LmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9kZXYuY1xuQEAgLTEyNiw3ICsxMjYsOCBAQCBzdGF0aWMgY29uc3QgY2hhciAqcGRzY19kZXZjbWRfc3RyKGludCBvcGNvZGUpXG4gXHR9XG4gfVxuIFxuLXN0YXRpYyBpbnQgcGRzY19kZXZjbWRfd2FpdChzdHJ1Y3QgcGRzYyAqcGRzYywgdTggb3Bjb2RlLCBpbnQgbWF4X3NlY29uZHMpXG4rc3RhdGljIGludCBfX3Bkc2NfZGV2Y21kX3dhaXQoc3RydWN0IHBkc2MgKnBkc2MsIHU4IG9wY29kZSwgaW50IG1heF9zZWNvbmRzLFxuK1x0XHRcdCAgICAgIGNvbnN0IGJvb2wgZG9fbXNnKVxuIHtcbiBcdHN0cnVjdCBkZXZpY2UgKmRldiA9IHBkc2MtXHUwMDNlZGV2O1xuIFx0dW5zaWduZWQgbG9uZyBzdGFydF90aW1lO1xuQEAgLTE3OSw3ICsxODAsNyBAQCBzdGF0aWMgaW50IHBkc2NfZGV2Y21kX3dhaXQoc3RydWN0IHBkc2MgKnBkc2MsIHU4IG9wY29kZSwgaW50IG1heF9zZWNvbmRzKVxuIFxuIFx0c3RhdHVzID0gcGRzY19kZXZjbWRfc3RhdHVzKHBkc2MpO1xuIFx0ZXJyID0gcGRzY19lcnJfdG9fZXJybm8oc3RhdHVzKTtcbi1cdGlmIChlcnIgXHUwMDI2XHUwMDI2IGVyciAhPSAtRUFHQUlOKVxuK1x0aWYgKGRvX21zZyBcdTAwMjZcdTAwMjYgZXJyIFx1MDAyNlx1MDAyNiBlcnIgIT0gLUVBR0FJTilcbiBcdFx0ZGV2X2VycihkZXYsIFwiREVWQ01EICVkICVzIGZhaWxlZCwgc3RhdHVzPSVkIGVyciAlZCAlcGVcXG5cIixcbiBcdFx0XHRvcGNvZGUsIHBkc2NfZGV2Y21kX3N0cihvcGNvZGUpLCBzdGF0dXMsIGVycixcbiBcdFx0XHRFUlJfUFRSKGVycikpO1xuQEAgLTE4Nyw4ICsxODgsOSBAQCBzdGF0aWMgaW50IHBkc2NfZGV2Y21kX3dhaXQoc3RydWN0IHBkc2MgKnBkc2MsIHU4IG9wY29kZSwgaW50IG1heF9zZWNvbmRzKVxuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4taW50IHBkc2NfZGV2Y21kX2xvY2tlZChzdHJ1Y3QgcGRzYyAqcGRzYywgdW5pb24gcGRzX2NvcmVfZGV2X2NtZCAqY21kLFxuLVx0XHQgICAgICAgdW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgKmNvbXAsIGludCBtYXhfc2Vjb25kcylcbitzdGF0aWMgaW50IF9fcGRzY19kZXZjbWRfbG9ja2VkKHN0cnVjdCBwZHNjICpwZHNjLCB1bmlvbiBwZHNfY29yZV9kZXZfY21kICpjbWQsXG4rXHRcdFx0XHR1bmlvbiBwZHNfY29yZV9kZXZfY29tcCAqY29tcCwgaW50IG1heF9zZWNvbmRzLFxuK1x0XHRcdFx0Y29uc3QgYm9vbCBkb19tc2cpXG4ge1xuIFx0aW50IGVycjtcbiBcbkBAIC0xOTcsMTYgKzE5OSw2MyBAQCBpbnQgcGRzY19kZXZjbWRfbG9ja2VkKHN0cnVjdCBwZHNjICpwZHNjLCB1bmlvbiBwZHNfY29yZV9kZXZfY21kICpjbWQsXG4gXG4gXHRtZW1jcHlfdG9pbyhcdTAwMjZwZHNjLVx1MDAzZWNtZF9yZWdzLVx1MDAzZWNtZCwgY21kLCBzaXplb2YoKmNtZCkpO1xuIFx0cGRzY19kZXZjbWRfZGJlbGwocGRzYyk7XG4tXHRlcnIgPSBwZHNjX2RldmNtZF93YWl0KHBkc2MsIGNtZC1cdTAwM2VvcGNvZGUsIG1heF9zZWNvbmRzKTtcbitcdGVyciA9IF9fcGRzY19kZXZjbWRfd2FpdChwZHNjLCBjbWQtXHUwMDNlb3Bjb2RlLCBtYXhfc2Vjb25kcywgZG9fbXNnKTtcbiBcbiBcdGlmICgoZXJyID09IC1FTlhJTyB8fCBlcnIgPT0gLUVUSU1FRE9VVCkgXHUwMDI2XHUwMDI2IHBkc2MtXHUwMDNld3EpXG4gXHRcdHF1ZXVlX3dvcmsocGRzYy1cdTAwM2V3cSwgXHUwMDI2cGRzYy1cdTAwM2VoZWFsdGhfd29yayk7XG4gXHRlbHNlXG4gXHRcdG1lbWNweV9mcm9taW8oY29tcCwgXHUwMDI2cGRzYy1cdTAwM2VjbWRfcmVncy1cdTAwM2Vjb21wLCBzaXplb2YoKmNvbXApKTtcbiBcbitcdGlmIChlcnIgIT0gLUVUSU1FRE9VVCBcdTAwMjZcdTAwMjYgZXJyICE9IC1FQUdBSU4pXG4rXHRcdHBkc2NfZGVmZXJyZWRfZG1hX2ZyZWUocGRzYyk7XG4rXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbit2b2lkIHBkc2NfZGVmZXJyZWRfZG1hX2FkZChzdHJ1Y3QgcGRzYyAqcGRzYywgc3RydWN0IHBkc2NfZGVmZXJyZWRfZG1hICplbnRyeSxcbitcdFx0XHQgICBkbWFfYWRkcl90IGRtYV9hZGRyLCB2b2lkICp2YSwgc2l6ZV90IHNpemUsXG4rXHRcdFx0ICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKVxuK3tcbitcdGVudHJ5LVx1MDAzZWRtYV9hZGRyID0gZG1hX2FkZHI7XG4rXHRlbnRyeS1cdTAwM2V2YSA9IHZhO1xuK1x0ZW50cnktXHUwMDNlc2l6ZSA9IHNpemU7XG4rXHRlbnRyeS1cdTAwM2VkaXIgPSBkaXI7XG4rXG4rXHRzcGluX2xvY2soXHUwMDI2cGRzYy1cdTAwM2VkZWZlcnJlZF9kbWFfbG9jayk7XG4rXHRsaXN0X2FkZF90YWlsKFx1MDAyNmVudHJ5LVx1MDAzZWxpc3QsIFx1MDAyNnBkc2MtXHUwMDNlZGVmZXJyZWRfZG1hX2xpc3QpO1xuK1x0c3Bpbl91bmxvY2soXHUwMDI2cGRzYy1cdTAwM2VkZWZlcnJlZF9kbWFfbG9jayk7XG4rfVxuK1xuK3ZvaWQgcGRzY19kZWZlcnJlZF9kbWFfZnJlZShzdHJ1Y3QgcGRzYyAqcGRzYylcbit7XG4rXHRzdHJ1Y3QgcGRzY19kZWZlcnJlZF9kbWEgKmVudHJ5LCAqdG1wO1xuK1x0TElTVF9IRUFEKGxvY2FsX2xpc3QpO1xuK1xuK1x0c3Bpbl9sb2NrKFx1MDAyNnBkc2MtXHUwMDNlZGVmZXJyZWRfZG1hX2xvY2spO1xuK1x0bGlzdF9zcGxpY2VfaW5pdChcdTAwMjZwZHNjLVx1MDAzZWRlZmVycmVkX2RtYV9saXN0LCBcdTAwMjZsb2NhbF9saXN0KTtcbitcdHNwaW5fdW5sb2NrKFx1MDAyNnBkc2MtXHUwMDNlZGVmZXJyZWRfZG1hX2xvY2spO1xuK1xuK1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGVudHJ5LCB0bXAsIFx1MDAyNmxvY2FsX2xpc3QsIGxpc3QpIHtcbitcdFx0ZG1hX3VubWFwX3NpbmdsZShwZHNjLVx1MDAzZWRldiwgZW50cnktXHUwMDNlZG1hX2FkZHIsXG4rXHRcdFx0XHQgZW50cnktXHUwMDNlc2l6ZSwgZW50cnktXHUwMDNlZGlyKTtcbitcdFx0a2ZyZWUoZW50cnktXHUwMDNldmEpO1xuK1x0XHRsaXN0X2RlbChcdTAwMjZlbnRyeS1cdTAwM2VsaXN0KTtcbitcdFx0a2ZyZWUoZW50cnkpO1xuK1x0fVxuK31cbitcbitpbnQgcGRzY19kZXZjbWRfbG9ja2VkKHN0cnVjdCBwZHNjICpwZHNjLCB1bmlvbiBwZHNfY29yZV9kZXZfY21kICpjbWQsXG4rXHRcdCAgICAgICB1bmlvbiBwZHNfY29yZV9kZXZfY29tcCAqY29tcCwgaW50IG1heF9zZWNvbmRzKVxuK3tcbitcdHJldHVybiBfX3Bkc2NfZGV2Y21kX2xvY2tlZChwZHNjLCBjbWQsIGNvbXAsIG1heF9zZWNvbmRzLCB0cnVlKTtcbit9XG4rXG4raW50IHBkc2NfZGV2Y21kX2xvY2tlZF9ub21zZyhzdHJ1Y3QgcGRzYyAqcGRzYywgdW5pb24gcGRzX2NvcmVfZGV2X2NtZCAqY21kLFxuK1x0XHRcdCAgICAgdW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgKmNvbXAsIGludCBtYXhfc2Vjb25kcylcbit7XG4rXHRyZXR1cm4gX19wZHNjX2RldmNtZF9sb2NrZWQocGRzYywgY21kLCBjb21wLCBtYXhfc2Vjb25kcywgZmFsc2UpO1xuK31cbitcbiBpbnQgcGRzY19kZXZjbWQoc3RydWN0IHBkc2MgKnBkc2MsIHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgKmNtZCxcbiBcdFx0dW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgKmNvbXAsIGludCBtYXhfc2Vjb25kcylcbiB7XG5AQCAtMjE5LDYgKzI2OCw0NyBAQCBpbnQgcGRzY19kZXZjbWQoc3RydWN0IHBkc2MgKnBkc2MsIHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgKmNtZCxcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuK3N0YXRpYyBpbnQgX19wZHNjX2RldmNtZF93aXRoX2RhdGEoc3RydWN0IHBkc2MgKnBkc2MsXG4rXHRcdFx0XHQgICB1bmlvbiBwZHNfY29yZV9kZXZfY21kICpjbWQsXG4rXHRcdFx0XHQgICBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgZGF0YV9sZW4sXG4rXHRcdFx0XHQgICB1bmlvbiBwZHNfY29yZV9kZXZfY29tcCAqY29tcCxcbitcdFx0XHRcdCAgIGludCBtYXhfc2Vjb25kcywgYm9vbCBkb19tc2cpXG4re1xuK1x0aW50IGVycjtcbitcbitcdG11dGV4X2xvY2soXHUwMDI2cGRzYy1cdTAwM2VkZXZjbWRfbG9jayk7XG4rXHRpZiAoIXBkc2MtXHUwMDNlY21kX3JlZ3MpIHtcbitcdFx0ZXJyID0gLUVOWElPO1xuK1x0XHRnb3RvIHVubG9jaztcbitcdH1cbitcdGlmIChkYXRhX2xlbiBcdTAwM2Ugc2l6ZW9mKHBkc2MtXHUwMDNlY21kX3JlZ3MtXHUwMDNlZGF0YSkpIHtcbitcdFx0ZXJyID0gLUVOT1NQQztcbitcdFx0Z290byB1bmxvY2s7XG4rXHR9XG4rXHRtZW1jcHlfdG9pbyhcdTAwMjZwZHNjLVx1MDAzZWNtZF9yZWdzLVx1MDAzZWRhdGEsIGRhdGEsIGRhdGFfbGVuKTtcbitcdGVyciA9IF9fcGRzY19kZXZjbWRfbG9ja2VkKHBkc2MsIGNtZCwgY29tcCwgbWF4X3NlY29uZHMsIGRvX21zZyk7XG4rdW5sb2NrOlxuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnBkc2MtXHUwMDNlZGV2Y21kX2xvY2spO1xuK1xuK1x0cmV0dXJuIGVycjtcbit9XG4rXG4raW50IHBkc2NfZGV2Y21kX3dpdGhfZGF0YShzdHJ1Y3QgcGRzYyAqcGRzYywgdW5pb24gcGRzX2NvcmVfZGV2X2NtZCAqY21kLFxuK1x0XHRcdCAgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGRhdGFfbGVuLFxuK1x0XHRcdCAgdW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgKmNvbXAsIGludCBtYXhfc2Vjb25kcylcbit7XG4rXHRyZXR1cm4gX19wZHNjX2RldmNtZF93aXRoX2RhdGEocGRzYywgY21kLCBkYXRhLCBkYXRhX2xlbixcbitcdFx0XHRcdCAgICAgICBjb21wLCBtYXhfc2Vjb25kcywgdHJ1ZSk7XG4rfVxuK1xuK2ludCBwZHNjX2RldmNtZF93aXRoX2RhdGFfbm9tc2coc3RydWN0IHBkc2MgKnBkc2MsIHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgKmNtZCxcbitcdFx0XHRcdGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBkYXRhX2xlbixcbitcdFx0XHRcdHVuaW9uIHBkc19jb3JlX2Rldl9jb21wICpjb21wLCBpbnQgbWF4X3NlY29uZHMpXG4re1xuK1x0cmV0dXJuIF9fcGRzY19kZXZjbWRfd2l0aF9kYXRhKHBkc2MsIGNtZCwgZGF0YSwgZGF0YV9sZW4sXG4rXHRcdFx0XHQgICAgICAgY29tcCwgbWF4X3NlY29uZHMsIGZhbHNlKTtcbit9XG4rXG4gaW50IHBkc2NfZGV2Y21kX2luaXQoc3RydWN0IHBkc2MgKnBkc2MpXG4ge1xuIFx0dW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgY29tcCA9IHt9O1xuQEAgLTI0MiwxNSArMzMyLDE3IEBAIGludCBwZHNjX2RldmNtZF9yZXNldChzdHJ1Y3QgcGRzYyAqcGRzYylcbiBcdHJldHVybiBwZHNjX2RldmNtZChwZHNjLCBcdTAwMjZjbWQsIFx1MDAyNmNvbXAsIHBkc2MtXHUwMDNlZGV2Y21kX3RpbWVvdXQpO1xuIH1cbiBcbi1zdGF0aWMgaW50IHBkc2NfZGV2Y21kX2lkZW50aWZ5X2xvY2tlZChzdHJ1Y3QgcGRzYyAqcGRzYylcbitzdGF0aWMgaW50IHBkc2NfZGV2Y21kX2lkZW50aWZ5X2xvY2tlZChzdHJ1Y3QgcGRzYyAqcGRzYywgdTggZHJ2X2lkZW50X3ZlcixcbitcdFx0XHRcdCAgICAgICBib29sIGRvX21zZylcbiB7XG4gXHR1bmlvbiBwZHNfY29yZV9kZXZfY29tcCBjb21wID0ge307XG4gXHR1bmlvbiBwZHNfY29yZV9kZXZfY21kIGNtZCA9IHtcbiBcdFx0LmlkZW50aWZ5Lm9wY29kZSA9IFBEU19DT1JFX0NNRF9JREVOVElGWSxcbi1cdFx0LmlkZW50aWZ5LnZlciA9IFBEU19DT1JFX0lERU5USVRZX1ZFUlNJT05fMSxcbitcdFx0LmlkZW50aWZ5LnZlciA9IGRydl9pZGVudF92ZXIsXG4gXHR9O1xuIFxuLVx0cmV0dXJuIHBkc2NfZGV2Y21kX2xvY2tlZChwZHNjLCBcdTAwMjZjbWQsIFx1MDAyNmNvbXAsIHBkc2MtXHUwMDNlZGV2Y21kX3RpbWVvdXQpO1xuK1x0cmV0dXJuIF9fcGRzY19kZXZjbWRfbG9ja2VkKHBkc2MsIFx1MDAyNmNtZCwgXHUwMDI2Y29tcCwgcGRzYy1cdTAwM2VkZXZjbWRfdGltZW91dCxcbitcdFx0XHRcdCAgICBkb19tc2cpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBwZHNjX2luaXRfZGV2aW5mbyhzdHJ1Y3QgcGRzYyAqcGRzYylcbkBAIC0yNzMsOCArMzY1LDkgQEAgc3RhdGljIHZvaWQgcGRzY19pbml0X2RldmluZm8oc3RydWN0IHBkc2MgKnBkc2MpXG4gXHRkZXZfZGJnKHBkc2MtXHUwMDNlZGV2LCBcImZ3X3ZlcnNpb24gJXNcXG5cIiwgcGRzYy1cdTAwM2VkZXZfaW5mby5md192ZXJzaW9uKTtcbiB9XG4gXG4tc3RhdGljIGludCBwZHNjX2lkZW50aWZ5KHN0cnVjdCBwZHNjICpwZHNjKVxuK3N0YXRpYyBpbnQgcGRzY19pZGVudGlmeV92ZXIoc3RydWN0IHBkc2MgKnBkc2MsIHU4IGRydl9pZGVudF92ZXIpXG4ge1xuK1x0Ym9vbCBkb19tc2cgPSBkcnZfaWRlbnRfdmVyID09IFBEU19DT1JFX0lERU5USVRZX1ZFUlNJT05fMTtcbiBcdHN0cnVjdCBwZHNfY29yZV9kcnZfaWRlbnRpdHkgZHJ2ID0ge307XG4gXHRzaXplX3Qgc3o7XG4gXHRpbnQgZXJyO1xuQEAgLTI5NywxOSArMzkwLDIyIEBAIHN0YXRpYyBpbnQgcGRzY19pZGVudGlmeShzdHJ1Y3QgcGRzYyAqcGRzYylcbiBcdHN6ID0gbWluX3Qoc2l6ZV90LCBzaXplb2YoZHJ2KSwgc2l6ZW9mKHBkc2MtXHUwMDNlY21kX3JlZ3MtXHUwMDNlZGF0YSkpO1xuIFx0bWVtY3B5X3RvaW8oXHUwMDI2cGRzYy1cdTAwM2VjbWRfcmVncy1cdTAwM2VkYXRhLCBcdTAwMjZkcnYsIHN6KTtcbiBcbi1cdGVyciA9IHBkc2NfZGV2Y21kX2lkZW50aWZ5X2xvY2tlZChwZHNjKTtcbitcdGVyciA9IHBkc2NfZGV2Y21kX2lkZW50aWZ5X2xvY2tlZChwZHNjLCBkcnZfaWRlbnRfdmVyLCBkb19tc2cpO1xuIFx0aWYgKCFlcnIpIHtcbiBcdFx0c3ogPSBtaW5fdChzaXplX3QsIHNpemVvZihwZHNjLVx1MDAzZWRldl9pZGVudCksXG4gXHRcdFx0ICAgc2l6ZW9mKHBkc2MtXHUwMDNlY21kX3JlZ3MtXHUwMDNlZGF0YSkpO1xuIFx0XHRtZW1jcHlfZnJvbWlvKFx1MDAyNnBkc2MtXHUwMDNlZGV2X2lkZW50LCBcdTAwMjZwZHNjLVx1MDAzZWNtZF9yZWdzLVx1MDAzZWRhdGEsIHN6KTtcbitcbitcdFx0LyogVjEgZmlybXdhcmUgZG9lc24ndCBzZXQgY2FwYWJpbGl0aWVzLCBzbyB0aGUgZmllbGQgbWF5XG4rXHRcdCAqIGNvbnRhaW4gZ2FyYmFnZSBmcm9tIHRoZSBvdXRnb2luZyBkcml2ZXIgaWRlbnRpdHkuXG4rXHRcdCAqL1xuK1x0XHRpZiAocGRzYy1cdTAwM2VkZXZfaWRlbnQudmVyc2lvbiBcdTAwM2MgUERTX0NPUkVfSURFTlRJVFlfVkVSU0lPTl8yKVxuK1x0XHRcdHBkc2MtXHUwMDNlZGV2X2lkZW50LmNhcGFiaWxpdGllcyA9IDA7XG4gXHR9XG4gXHRtdXRleF91bmxvY2soXHUwMDI2cGRzYy1cdTAwM2VkZXZjbWRfbG9jayk7XG4gXG4tXHRpZiAoZXJyKSB7XG4tXHRcdGRldl9lcnIocGRzYy1cdTAwM2VkZXYsIFwiQ2Fubm90IGlkZW50aWZ5IGRldmljZTogJXBlXFxuXCIsXG4tXHRcdFx0RVJSX1BUUihlcnIpKTtcbitcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG4tXHR9XG4gXG4gXHRpZiAoaXNwcmludChwZHNjLVx1MDAzZWRldl9pbmZvLmZ3X3ZlcnNpb25bMF0pIFx1MDAyNlx1MDAyNlxuIFx0ICAgIGlzYXNjaWkocGRzYy1cdTAwM2VkZXZfaW5mby5md192ZXJzaW9uWzBdKSlcbkBAIC0zMjYsNiArNDIyLDI2IEBAIHN0YXRpYyBpbnQgcGRzY19pZGVudGlmeShzdHJ1Y3QgcGRzYyAqcGRzYylcbiBcdHJldHVybiAwO1xuIH1cbiBcbitzdGF0aWMgaW50IHBkc2NfaWRlbnRpZnkoc3RydWN0IHBkc2MgKnBkc2MpXG4re1xuK1x0aW50IGVycjtcbitcbitcdC8qIE9sZGVyIGZpcm13YXJlIHJlamVjdHMgYW55dGhpbmcgYnV0IFBEU19DT1JFX0lERU5USVRZX1ZFUlNJT05fMVxuK1x0ICogd2l0aCBQRFNfUkNfRVZFUlNJT04gKC1FSU5WQUwpLCBzbyByZXRyeSB3aXRoIFYxIG9uIHZlcnNpb25cbitcdCAqIHJlamVjdGlvbi4gRG9uJ3QgcmV0cnkgb24gb3RoZXIgZXJyb3JzIGxpa2UgLUVOWElPLy1FVElNRURPVVRcbitcdCAqIHdoaWNoIGluZGljYXRlIGZpcm13YXJlIGlzIG5vdCBydW5uaW5nIG9yIGh1bmcuXG4rXHQgKi9cbitcdGVyciA9IHBkc2NfaWRlbnRpZnlfdmVyKHBkc2MsIFBEU19DT1JFX0lERU5USVRZX1ZFUlNJT05fMik7XG4rXHRpZiAoZXJyID09IC1FSU5WQUwpXG4rXHRcdGVyciA9IHBkc2NfaWRlbnRpZnlfdmVyKHBkc2MsIFBEU19DT1JFX0lERU5USVRZX1ZFUlNJT05fMSk7XG4rXG4rXHRpZiAoZXJyKVxuK1x0XHRkZXZfZXJyKHBkc2MtXHUwMDNlZGV2LCBcIkNhbm5vdCBpZGVudGlmeSBkZXZpY2U6ICVwZVxcblwiLFxuK1x0XHRcdEVSUl9QVFIoZXJyKSk7XG4rXG4rXHRyZXR1cm4gZXJyO1xuK31cbitcbiB2b2lkIHBkc2NfZGV2X3VuaW5pdChzdHJ1Y3QgcGRzYyAqcGRzYylcbiB7XG4gXHRpZiAocGRzYy1cdTAwM2VpbnRyX2luZm8pIHtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvZGV2bGluay5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL2RldmxpbmsuY1xuaW5kZXggOGFkYWU3YjE4ODk4ZC4uNjNmZTQ1ZTkxZjcxMCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9kZXZsaW5rLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9kZXZsaW5rLmNcbkBAIC05MCwxMyArOTAsMTEyIEBAIGludCBwZHNjX2RsX2ZsYXNoX3VwZGF0ZShzdHJ1Y3QgZGV2bGluayAqZGwsXG4ge1xuIFx0c3RydWN0IHBkc2MgKnBkc2MgPSBkZXZsaW5rX3ByaXYoZGwpO1xuIFxuLVx0aWYgKHBhcmFtcy1cdTAwM2Vjb21wb25lbnQpIHtcbi1cdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcbi1cdFx0XHRcdCAgIFwiQ29tcG9uZW50IHVwZGF0ZSBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgZGV2aWNlXCIpO1xuLVx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHRyZXR1cm4gcGRzY19maXJtd2FyZV91cGRhdGUocGRzYywgcGFyYW1zLCBleHRhY2spO1xuK31cbitcbitzdGF0aWMgaW50IHBkc2NfZGxfcmVwb3J0X2NvbXBvbmVudChzdHJ1Y3QgZGV2bGlua19pbmZvX3JlcSAqcmVxLFxuK1x0XHRcdFx0ICAgIHN0cnVjdCBwZHNfY29yZV9md19jb21wb25lbnRfaW5mbyAqaW5mbylcbit7XG4rXHRlbnVtIGRldmxpbmtfaW5mb192ZXJzaW9uX3R5cGUgdmVyX3R5cGU7XG4rXHR1MTYgZmxhZ3MgPSBsZTE2X3RvX2NwdShpbmZvLVx1MDAzZWZsYWdzKTtcbitcdGNoYXIgKnZlciA9IGluZm8tXHUwMDNldmVyc2lvbjtcbitcdGNvbnN0IGNoYXIgKm5hbWU7XG4rXHRjaGFyIGJ1ZlszMl07XG4rXG4rXHQvKiBNYWluIGZpcm13YXJlIGlzIHJlcG9ydGVkIGFzIGdlbmVyaWMgXCJmd1wiICovXG4rXHRpZiAoaW5mby1cdTAwM2Vjb21wb25lbnRfdHlwZSA9PSBQRFNfQ09SRV9GV19UWVBFX01BSU4pIHtcbitcdFx0aWYgKGluZm8tXHUwMDNlc2xvdF9pZCA9PSBQRFNfQ09SRV9GV19TTE9UX0dPTEQpXG4rXHRcdFx0c25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgXCJmdy5nb2xkXCIpO1xuK1x0XHRlbHNlXG4rXHRcdFx0c25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgXCJmd1wiKTtcbitcdH0gZWxzZSB7XG4rXHRcdG5hbWUgPSBwZHNjX2Z3X3R5cGVfdG9fbmFtZShpbmZvLVx1MDAzZWNvbXBvbmVudF90eXBlKTtcbitcdFx0aWYgKCFuYW1lKVxuK1x0XHRcdHJldHVybiAwO1xuK1xuK1x0XHRpZiAoaW5mby1cdTAwM2VzbG90X2lkID09IFBEU19DT1JFX0ZXX1NMT1RfR09MRClcbitcdFx0XHRzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBcImZ3LiVzLmdvbGRcIiwgbmFtZSk7XG4rXHRcdGVsc2VcbitcdFx0XHRzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBcImZ3LiVzXCIsIG5hbWUpO1xuK1x0fVxuK1xuK1x0dmVyX3R5cGUgPSBERVZMSU5LX0lORk9fVkVSU0lPTl9UWVBFX05PTkU7XG4rXHRpZiAoZmxhZ3MgXHUwMDI2IFBEU19DT1JFX0ZXX0NPTVBPTkVOVF9JTkZPX0ZfVVBEQVRFX0JZX05BTUUpXG4rXHRcdHZlcl90eXBlID0gREVWTElOS19JTkZPX1ZFUlNJT05fVFlQRV9DT01QT05FTlQ7XG4rXG4rXHRpZiAoZmxhZ3MgXHUwMDI2IFBEU19DT1JFX0ZXX0NPTVBPTkVOVF9JTkZPX0ZfRklYRUQpIHtcbitcdFx0aW50IGVycjtcbitcbitcdFx0ZXJyID0gZGV2bGlua19pbmZvX3ZlcnNpb25fZml4ZWRfcHV0KHJlcSwgYnVmLCB2ZXIpO1xuK1x0XHRpZiAoZXJyKVxuK1x0XHRcdHJldHVybiBlcnI7XG4rXHR9XG4rXG4rXHRpZiAoZmxhZ3MgXHUwMDI2IFBEU19DT1JFX0ZXX0NPTVBPTkVOVF9JTkZPX0ZfUlVOTklORykge1xuK1x0XHRpbnQgZXJyO1xuK1xuK1x0XHRlcnIgPSBkZXZsaW5rX2luZm9fdmVyc2lvbl9ydW5uaW5nX3B1dF9leHQocmVxLCBidWYsXG4rXHRcdFx0XHRcdFx0XHQgICB2ZXIsIHZlcl90eXBlKTtcbitcdFx0aWYgKGVycilcbitcdFx0XHRyZXR1cm4gZXJyO1xuIFx0fVxuIFxuLVx0cmV0dXJuIHBkc2NfZmlybXdhcmVfdXBkYXRlKHBkc2MsIHBhcmFtcy1cdTAwM2VmdywgZXh0YWNrKTtcbitcdGlmIChmbGFncyBcdTAwMjYgUERTX0NPUkVfRldfQ09NUE9ORU5UX0lORk9fRl9TVEFSVFVQKSB7XG4rXHRcdGludCBlcnI7XG4rXG4rXHRcdGVyciA9IGRldmxpbmtfaW5mb192ZXJzaW9uX3N0b3JlZF9wdXRfZXh0KHJlcSwgYnVmLFxuK1x0XHRcdFx0XHRcdFx0ICB2ZXIsIHZlcl90eXBlKTtcbitcdFx0aWYgKGVycilcbitcdFx0XHRyZXR1cm4gZXJyO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcGRzY19kbF9yZXBvcnRfZndfdmVyKHN0cnVjdCBkZXZsaW5rX2luZm9fcmVxICpyZXEsIGNoYXIgKmZ3X3Zlcilcbit7XG4rXHRyZXR1cm4gZGV2bGlua19pbmZvX3ZlcnNpb25fcnVubmluZ19wdXQocmVxLFxuK1x0XHRcdFx0XHRcdERFVkxJTktfSU5GT19WRVJTSU9OX0dFTkVSSUNfRlcsXG4rXHRcdFx0XHRcdFx0ZndfdmVyKTtcbit9XG4rXG4rc3RhdGljIGludCBwZHNjX2RsX2NvbXBvbmVudF9pbmZvX2dldChzdHJ1Y3QgZGV2bGluayAqZGwsXG4rXHRcdFx0XHQgICAgICBzdHJ1Y3QgZGV2bGlua19pbmZvX3JlcSAqcmVxLFxuK1x0XHRcdFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuK3tcbitcdHN0cnVjdCBwZHNjICpwZHNjID0gZGV2bGlua19wcml2KGRsKTtcbitcdHU4IG51bV9jb21wb25lbnRzO1xuK1x0aW50IGVycjtcbitcdGludCBpO1xuK1xuK1x0LyogUGFpcnMgd2l0aCBXUklURV9PTkNFIGluIHBkc2NfZndfY29tcG9uZW50c19pbnZhbGlkYXRlKCkuXG4rXHQgKiBVc2UgUkVBRF9PTkNFIHRvIGdldCBhIGNvbnNpc3RlbnQgc25hcHNob3Qgb2YgbnVtX2NvbXBvbmVudHMuXG4rXHQgKiBwZHNjX2Z3X2NvbXBvbmVudHNfaW52YWxpZGF0ZSgpIGNhbiB6ZXJvIGl0IGNvbmN1cnJlbnRseSBkdXJpbmdcbitcdCAqIGZpcm13YXJlIHJlY292ZXJ5OyB1c2luZyB0aGUgbG9jYWwgY29weSBhdm9pZHMgaXRlcmF0aW5nIHplcm9cbitcdCAqIHRpbWVzIHdoZW4gd2UgYWxyZWFkeSBkZWNpZGVkIHRoZSBjYWNoZSB3YXMgdmFsaWQuXG4rXHQgKi9cbitcdG51bV9jb21wb25lbnRzID0gUkVBRF9PTkNFKHBkc2MtXHUwMDNlZndfY29tcG9uZW50cy5udW1fY29tcG9uZW50cyk7XG4rXHRpZiAoIW51bV9jb21wb25lbnRzKSB7XG4rXHRcdGVyciA9IHBkc2NfZ2V0X2NvbXBvbmVudF9pbmZvKHBkc2MpO1xuK1x0XHRpZiAoZXJyKVxuK1x0XHRcdHJldHVybiBwZHNjX2RsX3JlcG9ydF9md192ZXIocmVxLFxuK1x0XHRcdFx0XHRcdCAgICBwZHNjLVx1MDAzZWRldl9pbmZvLmZ3X3ZlcnNpb24pO1xuK1x0XHRudW1fY29tcG9uZW50cyA9IFJFQURfT05DRShwZHNjLVx1MDAzZWZ3X2NvbXBvbmVudHMubnVtX2NvbXBvbmVudHMpO1xuK1x0XHRpZiAoIW51bV9jb21wb25lbnRzKVxuK1x0XHRcdHJldHVybiBwZHNjX2RsX3JlcG9ydF9md192ZXIocmVxLFxuK1x0XHRcdFx0XHRcdCAgICBwZHNjLVx1MDAzZWRldl9pbmZvLmZ3X3ZlcnNpb24pO1xuK1x0fVxuK1xuK1x0bnVtX2NvbXBvbmVudHMgPSBtaW5fdCh1MTYsIG51bV9jb21wb25lbnRzLFxuK1x0XHRcdCAgICAgICBsZTE2X3RvX2NwdShwZHNjLVx1MDAzZWRldl9pZGVudC5tYXhfZndfc2xvdHMpKTtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG51bV9jb21wb25lbnRzOyBpKyspIHtcbitcdFx0ZXJyID0gcGRzY19kbF9yZXBvcnRfY29tcG9uZW50KHJlcSxcbitcdFx0XHRcdFx0ICAgICAgIFx1MDAyNnBkc2MtXHUwMDNlZndfY29tcG9uZW50cy5pbmZvW2ldKTtcbitcdFx0aWYgKGVycilcbitcdFx0XHRyZXR1cm4gZXJyO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4gfVxuIFxuIHN0YXRpYyBjaGFyICpmd19zbG90bmFtZXNbXSA9IHtcbkBAIC0xMDUsOCArMjA0LDkgQEAgc3RhdGljIGNoYXIgKmZ3X3Nsb3RuYW1lc1tdID0ge1xuIFx0XCJmdy5tYWluZndiXCIsXG4gfTtcbiBcbi1pbnQgcGRzY19kbF9pbmZvX2dldChzdHJ1Y3QgZGV2bGluayAqZGwsIHN0cnVjdCBkZXZsaW5rX2luZm9fcmVxICpyZXEsXG4tXHRcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuK3N0YXRpYyBpbnQgcGRzY19kbF9md19saXN0X2luZm9fZ2V0KHN0cnVjdCBkZXZsaW5rICpkbCxcbitcdFx0XHRcdCAgICBzdHJ1Y3QgZGV2bGlua19pbmZvX3JlcSAqcmVxLFxuK1x0XHRcdFx0ICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiB7XG4gXHR1bmlvbiBwZHNfY29yZV9kZXZfY21kIGNtZCA9IHtcbiBcdFx0LmZ3X2NvbnRyb2wub3Bjb2RlID0gUERTX0NPUkVfQ01EX0ZXX0NPTlRST0wsXG5AQCAtMTQwLDEyICsyNDAsNDEgQEAgaW50IHBkc2NfZGxfaW5mb19nZXQoc3RydWN0IGRldmxpbmsgKmRsLCBzdHJ1Y3QgZGV2bGlua19pbmZvX3JlcSAqcmVxLFxuIFx0XHRcdHJldHVybiBlcnI7XG4gXHR9XG4gXG4tXHRlcnIgPSBkZXZsaW5rX2luZm9fdmVyc2lvbl9ydW5uaW5nX3B1dChyZXEsXG4tXHRcdFx0XHRcdCAgICAgICBERVZMSU5LX0lORk9fVkVSU0lPTl9HRU5FUklDX0ZXLFxuLVx0XHRcdFx0XHQgICAgICAgcGRzYy1cdTAwM2VkZXZfaW5mby5md192ZXJzaW9uKTtcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHBkc2NfZGxfaW5mb19nZXRfdjEoc3RydWN0IGRldmxpbmsgKmRsLFxuK1x0XHRcdCAgICAgICBzdHJ1Y3QgZGV2bGlua19pbmZvX3JlcSAqcmVxLFxuK1x0XHRcdCAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4re1xuK1x0c3RydWN0IHBkc2MgKnBkc2MgPSBkZXZsaW5rX3ByaXYoZGwpO1xuK1x0aW50IGVycjtcbitcbitcdGVyciA9IHBkc2NfZGxfZndfbGlzdF9pbmZvX2dldChkbCwgcmVxLCBleHRhY2spO1xuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbiBcbitcdC8qIFZlcnNpb24gMTogcmVwb3J0IGZ3IGZyb20gZGV2X2luZm8gKHJ1bm5pbmcgb25seSkgKi9cbitcdHJldHVybiBwZHNjX2RsX3JlcG9ydF9md192ZXIocmVxLCBwZHNjLVx1MDAzZWRldl9pbmZvLmZ3X3ZlcnNpb24pO1xuK31cbitcbitpbnQgcGRzY19kbF9pbmZvX2dldChzdHJ1Y3QgZGV2bGluayAqZGwsIHN0cnVjdCBkZXZsaW5rX2luZm9fcmVxICpyZXEsXG4rXHRcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuK3tcbitcdHN0cnVjdCBwZHNjICpwZHNjID0gZGV2bGlua19wcml2KGRsKTtcbitcdGNoYXIgYnVmWzMyXTtcbitcdGludCBlcnI7XG4rXG4rXHRpZiAocGRzYy1cdTAwM2VkZXZfaWRlbnQudmVyc2lvbiBcdTAwM2U9IFBEU19DT1JFX0lERU5USVRZX1ZFUlNJT05fMikge1xuK1x0XHRlcnIgPSBwZHNjX2RsX2NvbXBvbmVudF9pbmZvX2dldChkbCwgcmVxLCBleHRhY2spO1xuK1x0XHRpZiAoZXJyKVxuK1x0XHRcdHJldHVybiBlcnI7XG4rXHR9IGVsc2Uge1xuK1x0XHRlcnIgPSBwZHNjX2RsX2luZm9fZ2V0X3YxKGRsLCByZXEsIGV4dGFjayk7XG4rXHRcdGlmIChlcnIpXG4rXHRcdFx0cmV0dXJuIGVycjtcbitcdH1cbitcbiBcdHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIFwiMHgleFwiLCBwZHNjLVx1MDAzZWRldl9pbmZvLmFzaWNfdHlwZSk7XG4gXHRlcnIgPSBkZXZsaW5rX2luZm9fdmVyc2lvbl9maXhlZF9wdXQocmVxLFxuIFx0XHRcdFx0XHQgICAgIERFVkxJTktfSU5GT19WRVJTSU9OX0dFTkVSSUNfQVNJQ19JRCxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvZncuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9mdy5jXG5pbmRleCBmYTYyNjcxOWU2OGQxLi41Y2NmMDE3ZjZhZjQ3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL2Z3LmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9mdy5jXG5AQCAtMSw2ICsxLDkgQEBcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuIC8qIENvcHlyaWdodChjKSAyMDIzIEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYyAqL1xuIFxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BsZG1mdy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvdm1hbGxvYy5oXHUwMDNlXG4rXG4gI2luY2x1ZGUgXCJjb3JlLmhcIlxuIFxuIC8qIFRoZSB3b3JzdCBjYXNlIHdhaXQgZm9yIHRoZSBpbnN0YWxsIGFjdGl2aXR5IGlzIGFib3V0IDI1IG1pbnV0ZXMgd2hlblxuQEAgLTE0LDYgKzE3LDU4IEBAXG4gLyogTnVtYmVyIG9mIHBlcmlvZGljIGxvZyB1cGRhdGVzIGR1cmluZyBmdyBmaWxlIGRvd25sb2FkICovXG4gI2RlZmluZSBQRFNDX0ZXX0lOVEVSVkFMX0ZSQUNUSU9OXHQzMlxuIFxuKyNkZWZpbmUgUERTQ19GV19DT01QT05FTlRfUFJFRklYXHRcdFwiZncuXCJcbisjZGVmaW5lIFBEU0NfRldfQ09NUE9ORU5UX0ZVTExfTkFNRV9CVUZMRU4gXFxcbitcdChzaXplb2YoUERTQ19GV19DT01QT05FTlRfUFJFRklYKSArIFBEU19DT1JFX0ZXX0NPTVBPTkVOVF9OQU1FX0JVRkxFTilcbitcbisvKiBEcml2ZXItZGVmaW5lZCBjb21wb25lbnQgdHlwZSB0byBuYW1lIG1hcHBpbmcuXG4rICogUERTX0NPUkVfRldfVFlQRV9NQUlOIGlzIE5VTEwgLSBoYW5kbGVkIHNwZWNpYWxseSBhcyBcImZ3XCIgd2l0aG91dCBwcmVmaXguXG4rICovXG4rc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBwZHNjX2Z3X3R5cGVfbmFtZXNbXSA9IHtcbitcdFtQRFNfQ09SRV9GV19UWVBFX01BSU5dICAgICAgPSBOVUxMLFxuK1x0W1BEU19DT1JFX0ZXX1RZUEVfQk9PVF0gICAgICA9IFwiYm9vdGxvYWRlclwiLFxuK1x0W1BEU19DT1JFX0ZXX1RZUEVfQ1BMRF0gICAgICA9IFwiY3BsZFwiLFxuK1x0W1BEU19DT1JFX0ZXX1RZUEVfU0VDVVJFXSAgICA9IFwic2VjdXJlXCIsXG4rXHRbUERTX0NPUkVfRldfVFlQRV9GUEdBXSAgICAgID0gXCJmcGdhXCIsXG4rXHRbUERTX0NPUkVfRldfVFlQRV9TVUNfTUFJTl0gID0gXCJzdWNcIixcbitcdFtQRFNfQ09SRV9GV19UWVBFX1NVQ19CT09UXSAgPSBcInN1Yy5ib290bG9hZGVyXCIsXG4rXHRbUERTX0NPUkVfRldfVFlQRV9VQk9PVF0gICAgID0gXCJ1Ym9vdFwiLFxuK307XG4rXG4rY29uc3QgY2hhciAqcGRzY19md190eXBlX3RvX25hbWUodTggdHlwZSlcbit7XG4rXHRpZiAodHlwZSBcdTAwM2MgQVJSQVlfU0laRShwZHNjX2Z3X3R5cGVfbmFtZXMpIFx1MDAyNlx1MDAyNiBwZHNjX2Z3X3R5cGVfbmFtZXNbdHlwZV0pXG4rXHRcdHJldHVybiBwZHNjX2Z3X3R5cGVfbmFtZXNbdHlwZV07XG4rXHRyZXR1cm4gTlVMTDtcbit9XG4rXG4rdm9pZCBwZHNjX2Z3X2NvbXBvbmVudHNfaW52YWxpZGF0ZShzdHJ1Y3QgcGRzYyAqcGRzYylcbit7XG4rXHQvKiBQYWlycyB3aXRoIFJFQURfT05DRSBpbiBwZHNjX2RsX2NvbXBvbmVudF9pbmZvX2dldCgpICovXG4rXHRXUklURV9PTkNFKHBkc2MtXHUwMDNlZndfY29tcG9uZW50cy5udW1fY29tcG9uZW50cywgMCk7XG4rfVxuK1xuK3N0YXRpYyB1OCBwZHNjX25hbWVfdG9fZndfdHlwZShjb25zdCBjaGFyICpuYW1lKVxuK3tcbitcdHNpemVfdCBwcmVmaXhfbGVuO1xuK1x0aW50IGk7XG4rXG4rXHQvKiBcImZ3XCIgd2l0aG91dCBzdWZmaXggbWFwcyB0byBtYWluIGZpcm13YXJlICovXG4rXHRpZiAoIXN0cmNtcChuYW1lLCBcImZ3XCIpKVxuK1x0XHRyZXR1cm4gUERTX0NPUkVfRldfVFlQRV9NQUlOO1xuK1xuK1x0cHJlZml4X2xlbiA9IHN0cl9oYXNfcHJlZml4KG5hbWUsIFBEU0NfRldfQ09NUE9ORU5UX1BSRUZJWCk7XG4rXHRpZiAocHJlZml4X2xlbilcbitcdFx0bmFtZSArPSBwcmVmaXhfbGVuO1xuK1xuK1x0Zm9yIChpID0gMTsgaSBcdTAwM2MgQVJSQVlfU0laRShwZHNjX2Z3X3R5cGVfbmFtZXMpOyBpKyspIHtcbitcdFx0aWYgKHBkc2NfZndfdHlwZV9uYW1lc1tpXSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgICFzdHJjbXAobmFtZSwgcGRzY19md190eXBlX25hbWVzW2ldKSlcbitcdFx0XHRyZXR1cm4gaTtcbitcdH1cbitcdHJldHVybiAwO1xuK31cbitcbiBzdGF0aWMgaW50IHBkc2NfZGV2Y21kX2Z3X2Rvd25sb2FkX2xvY2tlZChzdHJ1Y3QgcGRzYyAqcGRzYywgdTY0IGFkZHIsXG4gXHRcdFx0XHRcdCAgdTMyIG9mZnNldCwgdTMyIGxlbmd0aClcbiB7XG5AQCAtMjMsNyArNzgsNyBAQCBzdGF0aWMgaW50IHBkc2NfZGV2Y21kX2Z3X2Rvd25sb2FkX2xvY2tlZChzdHJ1Y3QgcGRzYyAqcGRzYywgdTY0IGFkZHIsXG4gXHRcdC5md19kb3dubG9hZC5hZGRyID0gY3B1X3RvX2xlNjQoYWRkciksXG4gXHRcdC5md19kb3dubG9hZC5sZW5ndGggPSBjcHVfdG9fbGUzMihsZW5ndGgpLFxuIFx0fTtcbi1cdHVuaW9uIHBkc19jb3JlX2Rldl9jb21wIGNvbXA7XG4rXHR1bmlvbiBwZHNfY29yZV9kZXZfY29tcCBjb21wID0ge307XG4gXG4gXHRyZXR1cm4gcGRzY19kZXZjbWRfbG9ja2VkKHBkc2MsIFx1MDAyNmNtZCwgXHUwMDI2Y29tcCwgcGRzYy1cdTAwM2VkZXZjbWRfdGltZW91dCk7XG4gfVxuQEAgLTk1LDkgKzE1MCwxMiBAQCBzdGF0aWMgaW50IHBkc2NfZndfc3RhdHVzX2xvbmdfd2FpdChzdHJ1Y3QgcGRzYyAqcGRzYyxcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuLWludCBwZHNjX2Zpcm13YXJlX3VwZGF0ZShzdHJ1Y3QgcGRzYyAqcGRzYywgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdyxcbi1cdFx0XHQgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuK3N0YXRpYyBpbnRcbitwZHNjX2xlZ2FjeV9maXJtd2FyZV91cGRhdGUoc3RydWN0IHBkc2MgKnBkc2MsXG4rXHRcdFx0ICAgIHN0cnVjdCBkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9wYXJhbXMgKnBhcmFtcyxcbitcdFx0XHQgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIHtcbitcdGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncgPSBwYXJhbXMtXHUwMDNlZnc7XG4gXHR1MzIgYnVmX3N6LCBjb3B5X3N6LCBvZmZzZXQ7XG4gXHRzdHJ1Y3QgZGV2bGluayAqZGw7XG4gXHRpbnQgbmV4dF9pbnRlcnZhbDtcbkBAIC0xMDUsNiArMTYzLDEyIEBAIGludCBwZHNjX2Zpcm13YXJlX3VwZGF0ZShzdHJ1Y3QgcGRzYyAqcGRzYywgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdyxcbiBcdGludCBlcnIgPSAwO1xuIFx0aW50IGZ3X3Nsb3Q7XG4gXG4rXHRpZiAocGFyYW1zLVx1MDAzZWNvbXBvbmVudCkge1xuK1x0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxuK1x0XHRcdFx0ICAgXCJDb21wb25lbnQgdXBkYXRlIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBkZXZpY2VcIik7XG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdH1cbitcbiBcdGRldl9pbmZvKHBkc2MtXHUwMDNlZGV2LCBcIkluc3RhbGxpbmcgZmlybXdhcmVcXG5cIik7XG4gXG4gXHRpZiAoIXBkc2MtXHUwMDNlY21kX3JlZ3MpXG5AQCAtMTk1LDMgKzI1OSw3MjkgQEAgaW50IHBkc2NfZmlybXdhcmVfdXBkYXRlKHN0cnVjdCBwZHNjICpwZHNjLCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3LFxuIFx0XHRcdFx0XHRcdCAgIE5VTEwsIDAsIDApO1xuIFx0cmV0dXJuIGVycjtcbiB9XG4rXG4rc3RydWN0IHBkc2NfY29tcG9uZW50X3ByaXYge1xuK1x0dTE2IGNvbXBvbmVudF9pZDtcbitcdGJvb2wgc2tpcDtcbitcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdF9lbnRyeTtcbit9O1xuK1xuK3N0cnVjdCBwZHNfY29yZV9md3VfcHJpdiB7XG4rXHRzdHJ1Y3QgcGxkbWZ3IGNvbnRleHQ7XG4rXHRzdHJ1Y3QgZGV2bGlua19mbGFzaF91cGRhdGVfcGFyYW1zICpwYXJhbXM7XG4rXHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2s7XG4rXHRzdHJ1Y3QgcGRzYyAqcGRzYztcbitcdHN0cnVjdCBsaXN0X2hlYWQgY29tcG9uZW50cztcbitcdGJvb2wgY29tcG9uZW50X2ZvdW5kO1xuK307XG4rXG4rc3RhdGljIHZvaWQgcGRzY19mcmVlX2Z3dV9wcml2KHN0cnVjdCBwZHNfY29yZV9md3VfcHJpdiAqcHJpdilcbit7XG4rXHRzdHJ1Y3QgcGRzY19jb21wb25lbnRfcHJpdiAqY29tcG9uZW50X3ByaXYsICp0bXA7XG4rXG4rXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY29tcG9uZW50X3ByaXYsIHRtcCwgXHUwMDI2cHJpdi1cdTAwM2Vjb21wb25lbnRzLFxuK1x0XHRcdFx0IGxpc3RfZW50cnkpIHtcbitcdFx0bGlzdF9kZWwoXHUwMDI2Y29tcG9uZW50X3ByaXYtXHUwMDNlbGlzdF9lbnRyeSk7XG4rXHRcdGtmcmVlKGNvbXBvbmVudF9wcml2KTtcbitcdH1cbit9XG4rXG4rc3RhdGljIGludCBwZHNjX2RldmNtZF9tYXRjaF9yZWNvcmRfZGVzYyhzdHJ1Y3QgcGRzYyAqcGRzYywgdTE2IGRlc2NfdHlwZSxcbitcdFx0XHRcdFx0IHUxNiBkZXNjX3NpemUsIGNvbnN0IHU4ICpkZXNjX2RhdGEsXG4rXHRcdFx0XHRcdCB1OCAqbWF0Y2gpXG4re1xuK1x0dW5pb24gcGRzX2NvcmVfZGV2X2NtZCBjbWQgPSB7XG4rXHRcdC5tYXRjaF9yZWNvcmRfZGVzYy5vcGNvZGUgPSBQRFNfQ09SRV9DTURfTUFUQ0hfUkVDT1JEX0RFU0MsXG4rXHRcdC5tYXRjaF9yZWNvcmRfZGVzYy52ZXIgPSAxLFxuK1x0XHQubWF0Y2hfcmVjb3JkX2Rlc2MudHlwZSA9IGNwdV90b19sZTE2KGRlc2NfdHlwZSksXG4rXHRcdC5tYXRjaF9yZWNvcmRfZGVzYy5zaXplID0gY3B1X3RvX2xlMTYoZGVzY19zaXplKSxcbitcdH07XG4rXHR1bmlvbiBwZHNfY29yZV9kZXZfY29tcCBjb21wID0ge307XG4rXHRpbnQgZXJyO1xuK1xuK1x0ZXJyID0gcGRzY19kZXZjbWRfd2l0aF9kYXRhKHBkc2MsIFx1MDAyNmNtZCwgZGVzY19kYXRhLCBkZXNjX3NpemUsXG4rXHRcdFx0XHQgICAgXHUwMDI2Y29tcCwgcGRzYy1cdTAwM2VkZXZjbWRfdGltZW91dCk7XG4rXHQqbWF0Y2ggPSBjb21wLm1hdGNoX3JlY29yZF9kZXNjLm1hdGNoO1xuK1xuK1x0cmV0dXJuIGVycjtcbit9XG4rXG4rc3RhdGljIGJvb2wgcGRzY19tYXRjaF9yZWNvcmRfZGVzY3Moc3RydWN0IHBsZG1mdyAqY29udGV4dCxcbitcdFx0XHRcdCAgICBzdHJ1Y3QgcGxkbWZ3X3JlY29yZCAqcmVjb3JkKVxuK3tcbitcdHN0cnVjdCBwZHNfY29yZV9md3VfcHJpdiAqcHJpdiA9XG4rXHRcdGNvbnRhaW5lcl9vZihjb250ZXh0LCBzdHJ1Y3QgcGRzX2NvcmVfZnd1X3ByaXYsIGNvbnRleHQpO1xuK1x0c3RydWN0IHBkc2MgKnBkc2MgPSBwcml2LVx1MDAzZXBkc2M7XG4rXHRzdHJ1Y3QgcGxkbWZ3X2Rlc2NfdGx2ICpkZXNjO1xuK1xuK1x0aWYgKCFwbGRtZndfb3BfcGNpX21hdGNoX3JlY29yZChjb250ZXh0LCByZWNvcmQpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGRlc2MsIFx1MDAyNnJlY29yZC1cdTAwM2VkZXNjcywgZW50cnkpIHtcbitcdFx0dTggbWF0Y2g7XG4rXHRcdGludCBlcnI7XG4rXG4rXHRcdHN3aXRjaCAoZGVzYy1cdTAwM2V0eXBlKSB7XG4rXHRcdC8qIHNraXAgdHlwZXMgY2hlY2tlZCBpbiBwbGRtZndfb3BfcGNpX21hdGNoX3JlY29yZCAqL1xuK1x0XHRjYXNlIFBMRE1fREVTQ19JRF9QQ0lfVkVORE9SX0lEOlxuK1x0XHRjYXNlIFBMRE1fREVTQ19JRF9QQ0lfREVWSUNFX0lEOlxuK1x0XHRjYXNlIFBMRE1fREVTQ19JRF9QQ0lfU1VCVkVORE9SX0lEOlxuK1x0XHRjYXNlIFBMRE1fREVTQ19JRF9QQ0lfU1VCREVWX0lEOlxuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHR9XG4rXG4rXHRcdGlmICghZGVzYy1cdTAwM2VzaXplKVxuK1x0XHRcdHJldHVybiBmYWxzZTtcbitcbitcdFx0ZXJyID0gcGRzY19kZXZjbWRfbWF0Y2hfcmVjb3JkX2Rlc2MocGRzYywgZGVzYy1cdTAwM2V0eXBlLFxuK1x0XHRcdFx0XHRcdCAgICBkZXNjLVx1MDAzZXNpemUsIGRlc2MtXHUwMDNlZGF0YSxcbitcdFx0XHRcdFx0XHQgICAgXHUwMDI2bWF0Y2gpO1xuK1x0XHRpZiAoZXJyKSB7XG4rXHRcdFx0ZGV2X2VycihwZHNjLVx1MDAzZWRldixcbitcdFx0XHRcdFwibWF0Y2hfcmVjb3JkX2Rlc2MgZmFpbGVkIHR5cGU6IDB4JTA0eCBzaXplOiAldSwgZXJyICVkXFxuXCIsXG4rXHRcdFx0XHRkZXNjLVx1MDAzZXR5cGUsIGRlc2MtXHUwMDNlc2l6ZSwgZXJyKTtcbitcdFx0XHRyZXR1cm4gZmFsc2U7XG4rXHRcdH1cbitcdFx0LyogYWxsIHJlY29yZCBkZXNjcmlwdG9ycyBtdXN0IG1hdGNoICovXG4rXHRcdGlmICghbWF0Y2gpXG4rXHRcdFx0cmV0dXJuIGZhbHNlO1xuK1x0fVxuK1xuK1x0cmV0dXJuIHRydWU7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcGRzY19kZXZjbWRfc2VuZF9wYWNrYWdlX2RhdGEoc3RydWN0IHBkc2MgKnBkc2MsIHU2NCBhZGRyLFxuK1x0XHRcdFx0XHQgdTE2IGxlbmd0aCwgdTE2IG9mZnNldCwgdTE2IHRvdGFsX2xlbilcbit7XG4rXHR1bmlvbiBwZHNfY29yZV9kZXZfY21kIGNtZCA9IHtcbitcdFx0LnNlbmRfcGtnX2RhdGEub3Bjb2RlID0gUERTX0NPUkVfQ01EX1NFTkRfUEtHX0RBVEEsXG4rXHRcdC5zZW5kX3BrZ19kYXRhLnZlciA9IDEsXG4rXHRcdC5zZW5kX3BrZ19kYXRhLmRhdGFfcGEgPSBjcHVfdG9fbGU2NChhZGRyKSxcbitcdFx0LnNlbmRfcGtnX2RhdGEuZGF0YV9sZW4gPSBjcHVfdG9fbGUxNihsZW5ndGgpLFxuK1x0XHQuc2VuZF9wa2dfZGF0YS5vZmZzZXQgPSBjcHVfdG9fbGUxNihvZmZzZXQpLFxuK1x0XHQuc2VuZF9wa2dfZGF0YS50b3RhbF9sZW4gPSBjcHVfdG9fbGUxNih0b3RhbF9sZW4pLFxuK1x0fTtcbitcdHVuaW9uIHBkc19jb3JlX2Rldl9jb21wIGNvbXAgPSB7fTtcbitcbitcdHJldHVybiBwZHNjX2RldmNtZChwZHNjLCBcdTAwMjZjbWQsIFx1MDAyNmNvbXAsIHBkc2MtXHUwMDNlZGV2Y21kX3RpbWVvdXQpO1xuK31cbitcbitzdGF0aWMgaW50IHBkc2Nfc2VuZF9wYWNrYWdlX2RhdGEoc3RydWN0IHBsZG1mdyAqY29udGV4dCwgY29uc3QgdTggKmRhdGEsXG4rXHRcdFx0XHQgIHUxNiBsZW5ndGgpXG4re1xuK1x0c3RydWN0IHBkc19jb3JlX2Z3dV9wcml2ICpwcml2ID1cbitcdFx0Y29udGFpbmVyX29mKGNvbnRleHQsIHN0cnVjdCBwZHNfY29yZV9md3VfcHJpdiwgY29udGV4dCk7XG4rXHRzdHJ1Y3QgcGRzY19kZWZlcnJlZF9kbWEgKmRlZmVycmVkO1xuK1x0c3RydWN0IGRldmljZSAqZGV2ID0gY29udGV4dC1cdTAwM2VkZXY7XG4rXHRzdHJ1Y3QgcGRzYyAqcGRzYyA9IHByaXYtXHUwMDNlcGRzYztcbitcdGRtYV9hZGRyX3QgZG1hX2FkZHI7XG4rXHR1OCAqcGFja2FnZV9kYXRhO1xuK1x0dTMyIG9mZnNldDtcbitcdGludCBlcnI7XG4rXG4rXHRpZiAoIWxlbmd0aClcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRkZWZlcnJlZCA9IGttYWxsb2Nfb2JqKCpkZWZlcnJlZCwgR0ZQX0tFUk5FTCk7XG4rXHRpZiAoIWRlZmVycmVkKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdHBhY2thZ2VfZGF0YSA9IGttZW1kdXAoZGF0YSwgbGVuZ3RoLCBHRlBfS0VSTkVMKTtcbitcdGlmICghcGFja2FnZV9kYXRhKSB7XG4rXHRcdGtmcmVlKGRlZmVycmVkKTtcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXHR9XG4rXG4rXHRkbWFfYWRkciA9IGRtYV9tYXBfc2luZ2xlKGRldiwgcGFja2FnZV9kYXRhLCBsZW5ndGgsIERNQV9UT19ERVZJQ0UpO1xuK1x0aWYgKGRtYV9tYXBwaW5nX2Vycm9yKGRldiwgZG1hX2FkZHIpKSB7XG4rXHRcdGRldl9lcnIoZGV2LCBcIkZhaWxlZCB0byBkbWFfbWFwIHBhY2thZ2VfZGF0YSBsZW5ndGggMHgleFxcblwiLFxuK1x0XHRcdGxlbmd0aCk7XG4rXHRcdGtmcmVlKHBhY2thZ2VfZGF0YSk7XG4rXHRcdGtmcmVlKGRlZmVycmVkKTtcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXHR9XG4rXG4rXHRmb3IgKG9mZnNldCA9IDA7IG9mZnNldCBcdTAwM2MgbGVuZ3RoOyBvZmZzZXQgKz0gUERTX1BBR0VfU0laRSkge1xuK1x0XHR1MzIgY29weV9zejtcbitcbitcdFx0Y29weV9zeiA9IG1pbl90KHVuc2lnbmVkIGludCwgUERTX1BBR0VfU0laRSwgbGVuZ3RoIC0gb2Zmc2V0KTtcbitcdFx0ZXJyID0gcGRzY19kZXZjbWRfc2VuZF9wYWNrYWdlX2RhdGEocGRzYywgZG1hX2FkZHIgKyBvZmZzZXQsXG4rXHRcdFx0XHRcdFx0ICAgIGNvcHlfc3osIG9mZnNldCwgbGVuZ3RoKTtcbitcdFx0aWYgKGVycikge1xuK1x0XHRcdE5MX1NFVF9FUlJfTVNHX01PRChwcml2LVx1MDAzZWV4dGFjayxcbitcdFx0XHRcdFx0ICAgXCJGYWlsZWQgdG8gc2VuZCBwYWNrYWdlIGRhdGFcIik7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbitcdH1cbitcbitcdGlmIChlcnIgPT0gLUVUSU1FRE9VVCB8fCBlcnIgPT0gLUVBR0FJTikge1xuK1x0XHRwZHNjX2RlZmVycmVkX2RtYV9hZGQocGRzYywgZGVmZXJyZWQsIGRtYV9hZGRyLFxuK1x0XHRcdFx0ICAgICAgcGFja2FnZV9kYXRhLCBsZW5ndGgsIERNQV9UT19ERVZJQ0UpO1xuK1x0XHRyZXR1cm4gZXJyO1xuK1x0fVxuK1xuK1x0a2ZyZWUoZGVmZXJyZWQpO1xuK1x0ZG1hX3VubWFwX3NpbmdsZShkZXYsIGRtYV9hZGRyLCBsZW5ndGgsIERNQV9UT19ERVZJQ0UpO1xuK1x0a2ZyZWUocGFja2FnZV9kYXRhKTtcbitcdHJldHVybiBlcnI7XG4rfVxuK1xuK3N0YXRpYyBib29sIHBkc2NfY29tcG9uZW50X3R5cGVfZXhpc3RzKHN0cnVjdCBwZHNjICpwZHNjLCB1OCB0eXBlKVxuK3tcbitcdGludCBpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgcGRzYy1cdTAwM2Vmd19jb21wb25lbnRzLm51bV9jb21wb25lbnRzOyBpKyspIHtcbitcdFx0aWYgKHBkc2MtXHUwMDNlZndfY29tcG9uZW50cy5pbmZvW2ldLmNvbXBvbmVudF90eXBlID09IHR5cGUpXG4rXHRcdFx0cmV0dXJuIHRydWU7XG4rXHR9XG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuK3N0YXRpYyBib29sIHBkc2NfY29tcG9uZW50X2lkX21hdGNoZXNfdHlwZShzdHJ1Y3QgcGRzYyAqcGRzYyxcbitcdFx0XHRcdFx0ICAgdTggY29tcG9uZW50X2lkLCB1OCB0eXBlKVxuK3tcbitcdGludCBpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgcGRzYy1cdTAwM2Vmd19jb21wb25lbnRzLm51bV9jb21wb25lbnRzOyBpKyspIHtcbitcdFx0c3RydWN0IHBkc19jb3JlX2Z3X2NvbXBvbmVudF9pbmZvICppbmZvID1cbitcdFx0XHRcdTAwMjZwZHNjLVx1MDAzZWZ3X2NvbXBvbmVudHMuaW5mb1tpXTtcbitcbitcdFx0aWYgKGluZm8tXHUwMDNlaWRlbnRpZmllciA9PSBjb21wb25lbnRfaWQgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICBpbmZvLVx1MDAzZWNvbXBvbmVudF90eXBlID09IHR5cGUpXG4rXHRcdFx0cmV0dXJuIHRydWU7XG4rXHR9XG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuK3N0YXRpYyB1OCBwZHNjX2dldF9jb21wb25lbnRfdHlwZV9ieV9pZChzdHJ1Y3QgcGRzYyAqcGRzYywgdTE2IGNvbXBvbmVudF9pZClcbit7XG4rXHRpbnQgaTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHBkc2MtXHUwMDNlZndfY29tcG9uZW50cy5udW1fY29tcG9uZW50czsgaSsrKSB7XG4rXHRcdHN0cnVjdCBwZHNfY29yZV9md19jb21wb25lbnRfaW5mbyAqaW5mbyA9XG4rXHRcdFx0XHUwMDI2cGRzYy1cdTAwM2Vmd19jb21wb25lbnRzLmluZm9baV07XG4rXG4rXHRcdGlmIChpbmZvLVx1MDAzZWlkZW50aWZpZXIgPT0gY29tcG9uZW50X2lkKVxuK1x0XHRcdHJldHVybiBpbmZvLVx1MDAzZWNvbXBvbmVudF90eXBlO1xuK1x0fVxuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBib29sIHBkc2Nfc2tpcF9jb21wb25lbnQoc3RydWN0IHBkc19jb3JlX2Z3dV9wcml2ICpwcml2LFxuK1x0XHRcdFx0dTE2IGNvbXBvbmVudF9pZClcbit7XG4rXHRzdHJ1Y3QgcGRzY19jb21wb25lbnRfcHJpdiAqY29tcG9uZW50X3ByaXY7XG4rXG4rXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGNvbXBvbmVudF9wcml2LCBcdTAwMjZwcml2LVx1MDAzZWNvbXBvbmVudHMsIGxpc3RfZW50cnkpIHtcbitcdFx0aWYgKGNvbXBvbmVudF9wcml2LVx1MDAzZWNvbXBvbmVudF9pZCA9PSBjb21wb25lbnRfaWQpXG4rXHRcdFx0cmV0dXJuIGNvbXBvbmVudF9wcml2LVx1MDAzZXNraXA7XG4rXHR9XG4rXG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcGRzY19zZW5kX2NvbXBvbmVudF90YWJsZShzdHJ1Y3QgcGxkbWZ3ICpjb250ZXh0LFxuK1x0XHRcdFx0ICAgICBzdHJ1Y3QgcGxkbWZ3X2NvbXBvbmVudCAqY29tcG9uZW50LFxuK1x0XHRcdFx0ICAgICB1OCB0cmFuc2Zlcl9mbGFnKVxuK3tcbitcdHN0cnVjdCBwZHNfY29yZV9md3VfcHJpdiAqcHJpdiA9XG4rXHRcdGNvbnRhaW5lcl9vZihjb250ZXh0LCBzdHJ1Y3QgcGRzX2NvcmVfZnd1X3ByaXYsIGNvbnRleHQpO1xuK1x0c3RydWN0IHBkc19jb3JlX2NvbXBvbmVudF90YmwgKmNvbXBvbmVudF90Ymw7XG4rXHRzdHJ1Y3QgcGRzY19jb21wb25lbnRfcHJpdiAqY29tcG9uZW50X3ByaXY7XG4rXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBjb250ZXh0LVx1MDAzZWRldjtcbitcdHVuaW9uIHBkc19jb3JlX2Rldl9jb21wIGNvbXAgPSB7fTtcbitcdHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgY21kID0ge307XG4rXHRzdHJ1Y3QgcGRzYyAqcGRzYyA9IHByaXYtXHUwMDNlcGRzYztcbitcdGJvb2wgc2tpcF9jb21wb25lbnQgPSBmYWxzZTtcbitcdHU4IHJlcXVlc3RlZF90eXBlID0gMDtcbitcdHUxNiBidWZfc3osIHRibF9zejtcbitcdGludCBlcnIgPSAwO1xuK1xuK1x0ZGV2X2RiZyhkZXYsXG4rXHRcdFwiY29tcG9uZW50IG5hbWUgJXMgY2xhc3NpZmljYXRpb24gJXUgaWQgJXUgYWN0aXZhdGlvbl9tZXRob2QgJXUgdmVyX2xlbiAlZCB2ZXJfc3RyICUuKnMgaW5kZXggJXUgc2l6ZSAldSB0cmFuc2Zlcl9mbGFnIDB4JTAyeFxcblwiLFxuK1x0XHRwcml2LVx1MDAzZXBhcmFtcy1cdTAwM2Vjb21wb25lbnQsIGNvbXBvbmVudC1cdTAwM2VjbGFzc2lmaWNhdGlvbixcbitcdFx0Y29tcG9uZW50LVx1MDAzZWlkZW50aWZpZXIsIGNvbXBvbmVudC1cdTAwM2VhY3RpdmF0aW9uX21ldGhvZCxcbitcdFx0Y29tcG9uZW50LVx1MDAzZXZlcnNpb25fbGVuLCBjb21wb25lbnQtXHUwMDNldmVyc2lvbl9sZW4sXG4rXHRcdGNvbXBvbmVudC1cdTAwM2V2ZXJzaW9uX3N0cmluZywgY29tcG9uZW50LVx1MDAzZWluZGV4LFxuK1x0XHRjb21wb25lbnQtXHUwMDNlY29tcG9uZW50X3NpemUsIHRyYW5zZmVyX2ZsYWcpO1xuK1xuK1x0Y29tcG9uZW50X3ByaXYgPSBremFsbG9jX29iaigqY29tcG9uZW50X3ByaXYsIEdGUF9LRVJORUwpO1xuK1x0aWYgKCFjb21wb25lbnRfcHJpdilcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRpZiAocHJpdi1cdTAwM2VwYXJhbXMtXHUwMDNlY29tcG9uZW50KSB7XG4rXHRcdHJlcXVlc3RlZF90eXBlID0gcGRzY19uYW1lX3RvX2Z3X3R5cGUocHJpdi1cdTAwM2VwYXJhbXMtXHUwMDNlY29tcG9uZW50KTtcbitcdFx0aWYgKGNvbXBvbmVudC1cdTAwM2VpZGVudGlmaWVyIFx1MDAzZSBVOF9NQVggfHxcbitcdFx0ICAgICFwZHNjX2NvbXBvbmVudF9pZF9tYXRjaGVzX3R5cGUocGRzYyxcbitcdFx0XHRcdFx0XHQgICAgY29tcG9uZW50LVx1MDAzZWlkZW50aWZpZXIsXG4rXHRcdFx0XHRcdFx0ICAgIHJlcXVlc3RlZF90eXBlKSkge1xuK1x0XHRcdHNraXBfY29tcG9uZW50ID0gdHJ1ZTtcbitcdFx0XHRnb3RvIGFkZF9jb21wb25lbnRfcHJpdjtcbitcdFx0fVxuK1x0XHRwcml2LVx1MDAzZWNvbXBvbmVudF9mb3VuZCA9IHRydWU7XG4rXHR9XG4rXG4rXHRidWZfc3ogPSBzaXplb2YocGRzYy1cdTAwM2VjbWRfcmVncy1cdTAwM2VkYXRhKTtcbitcdHRibF9zeiA9IHN0cnVjdF9zaXplKGNvbXBvbmVudF90YmwsIHZlcnNpb25fc3RyLFxuK1x0XHRcdCAgICAgY29tcG9uZW50LVx1MDAzZXZlcnNpb25fbGVuKTtcbitcdGlmICh0Ymxfc3ogXHUwMDNlIGJ1Zl9zeikge1xuK1x0XHRkZXZfZXJyKGRldiwgXCJjb21wb25lbnRfdGJsIHNpemUgJWQgdG9vIGJpZywgbWF4IHNpemU6ICVkXFxuXCIsXG4rXHRcdFx0dGJsX3N6LCBidWZfc3opO1xuK1x0XHRlcnIgPSAtRU5PU1BDO1xuK1x0XHRnb3RvIGZyZWVfY29tcG9uZW50X3ByaXY7XG4rXHR9XG4rXHRjb21wb25lbnRfdGJsID0ga3phbGxvYyh0Ymxfc3osIEdGUF9LRVJORUwpO1xuK1x0aWYgKCFjb21wb25lbnRfdGJsKSB7XG4rXHRcdGVyciA9IC1FTk9NRU07XG4rXHRcdGdvdG8gZnJlZV9jb21wb25lbnRfcHJpdjtcbitcdH1cbitcbitcdGNvbXBvbmVudF90YmwtXHUwMDNlY29tcGFyaXNvbl9zdGFtcCA9XG4rXHRcdGNwdV90b19sZTMyKGNvbXBvbmVudC1cdTAwM2Vjb21wYXJpc29uX3N0YW1wKTtcbitcdGNvbXBvbmVudF90YmwtXHUwMDNlY2xhc3NpZmljYXRpb24gPSBjcHVfdG9fbGUxNihjb21wb25lbnQtXHUwMDNlY2xhc3NpZmljYXRpb24pO1xuK1x0Y29tcG9uZW50X3RibC1cdTAwM2VpZGVudGlmaWVyID0gY3B1X3RvX2xlMTYoY29tcG9uZW50LVx1MDAzZWlkZW50aWZpZXIpO1xuK1x0Y29tcG9uZW50X3RibC1cdTAwM2V0cmFuc2Zlcl9mbGFnID0gdHJhbnNmZXJfZmxhZztcbitcdGNvbXBvbmVudF90YmwtXHUwMDNldmVyc2lvbl9zdHJfdHlwZSA9IGNvbXBvbmVudC1cdTAwM2V2ZXJzaW9uX3R5cGU7XG4rXHRjb21wb25lbnRfdGJsLVx1MDAzZXZlcnNpb25fc3RyX2xlbiA9IGNvbXBvbmVudC1cdTAwM2V2ZXJzaW9uX2xlbjtcbitcdG1lbWNweShjb21wb25lbnRfdGJsLVx1MDAzZXZlcnNpb25fc3RyLCBjb21wb25lbnQtXHUwMDNldmVyc2lvbl9zdHJpbmcsXG4rXHQgICAgICAgY29tcG9uZW50LVx1MDAzZXZlcnNpb25fbGVuKTtcbitcbitcdGNtZC5zZW5kX2NvbXBvbmVudF90Ymwub3Bjb2RlID0gUERTX0NPUkVfQ01EX1NFTkRfQ09NUE9ORU5UX1RCTDtcbitcdGNtZC5zZW5kX2NvbXBvbmVudF90YmwudmVyID0gMTtcbitcdGNtZC5zZW5kX2NvbXBvbmVudF90Ymwuc2xvdF9pZCA9IFBEU19DT1JFX0ZXX1NMT1RfSU5WQUxJRDtcbitcbitcdGVyciA9IHBkc2NfZGV2Y21kX3dpdGhfZGF0YShwZHNjLCBcdTAwMjZjbWQsIGNvbXBvbmVudF90YmwsIHRibF9zeixcbitcdFx0XHRcdCAgICBcdTAwMjZjb21wLCBwZHNjLVx1MDAzZWRldmNtZF90aW1lb3V0KTtcbitcdGtmcmVlKGNvbXBvbmVudF90YmwpO1xuK1x0aWYgKGVycikge1xuK1x0XHRkZXZfZXJyKGRldiwgXCJGYWlsZWQgc2VuZGluZyBjb21wb25lbnQgdGFibGU6ICVwZVxcblwiLFxuK1x0XHRcdEVSUl9QVFIoZXJyKSk7XG4rXHRcdGdvdG8gZnJlZV9jb21wb25lbnRfcHJpdjtcbitcdH1cbitcbitcdHNraXBfY29tcG9uZW50ID0gY29tcC5zZW5kX2NvbXBvbmVudF90YmwucmVzcG9uc2UgPT0gMTtcbitcbithZGRfY29tcG9uZW50X3ByaXY6XG4rXHRjb21wb25lbnRfcHJpdi1cdTAwM2Vza2lwID0gc2tpcF9jb21wb25lbnQ7XG4rXHRjb21wb25lbnRfcHJpdi1cdTAwM2Vjb21wb25lbnRfaWQgPSBjb21wb25lbnQtXHUwMDNlaWRlbnRpZmllcjtcbitcdGxpc3RfYWRkKFx1MDAyNmNvbXBvbmVudF9wcml2LVx1MDAzZWxpc3RfZW50cnksIFx1MDAyNnByaXYtXHUwMDNlY29tcG9uZW50cyk7XG4rXG4rXHRyZXR1cm4gMDtcbitcbitmcmVlX2NvbXBvbmVudF9wcml2OlxuK1x0a2ZyZWUoY29tcG9uZW50X3ByaXYpO1xuK1x0cmV0dXJuIGVycjtcbit9XG4rXG4raW50IHBkc2NfZ2V0X2NvbXBvbmVudF9pbmZvKHN0cnVjdCBwZHNjICpwZHNjKVxuK3tcbitcdHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgY21kID0ge1xuK1x0XHQuZ2V0X2NvbXBvbmVudF9pbmZvLm9wY29kZSA9IFBEU19DT1JFX0NNRF9HRVRfQ09NUE9ORU5UX0lORk8sXG4rXHRcdC5nZXRfY29tcG9uZW50X2luZm8udmVyID0gMSxcbitcdH07XG4rXHRzdHJ1Y3QgcGRzX2NvcmVfY29tcG9uZW50X2xpc3RfaW5mbyAqbGlzdF9pbmZvO1xuK1x0c3RydWN0IHBkc2NfZGVmZXJyZWRfZG1hICpkZWZlcnJlZDtcbitcdHVuaW9uIHBkc19jb3JlX2Rldl9jb21wIGNvbXAgPSB7fTtcbitcdGRtYV9hZGRyX3QgZG1hX2FkZHI7XG4rXHR1OCBudW1fY29tcG9uZW50cztcbitcdGludCBlcnIsIGk7XG4rXG4rXHRkZWZlcnJlZCA9IGttYWxsb2Nfb2JqKCpkZWZlcnJlZCk7XG4rXHRpZiAoIWRlZmVycmVkKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdGxpc3RfaW5mbyA9IGt6YWxsb2MoUERTX1BBR0VfU0laRSwgR0ZQX0tFUk5FTCk7XG4rXHRpZiAoIWxpc3RfaW5mbykge1xuK1x0XHRrZnJlZShkZWZlcnJlZCk7XG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1x0fVxuK1xuK1x0ZG1hX2FkZHIgPSBkbWFfbWFwX3NpbmdsZShwZHNjLVx1MDAzZWRldiwgbGlzdF9pbmZvLCBQRFNfUEFHRV9TSVpFLFxuK1x0XHRcdFx0ICBETUFfRlJPTV9ERVZJQ0UpO1xuK1x0aWYgKGRtYV9tYXBwaW5nX2Vycm9yKHBkc2MtXHUwMDNlZGV2LCBkbWFfYWRkcikpIHtcbitcdFx0ZGV2X2VycihwZHNjLVx1MDAzZWRldixcbitcdFx0XHRcIkZhaWxlZCB0byBkbWFfbWFwIGNvbXBvbmVudF9saXN0X2luZm8gbGVuZ3RoICVkXFxuXCIsXG4rXHRcdFx0UERTX1BBR0VfU0laRSk7XG4rXHRcdGtmcmVlKGxpc3RfaW5mbyk7XG4rXHRcdGtmcmVlKGRlZmVycmVkKTtcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXHR9XG4rXG4rXHRjbWQuZ2V0X2NvbXBvbmVudF9pbmZvLmRhdGFfbGVuID0gY3B1X3RvX2xlMTYoUERTX1BBR0VfU0laRSk7XG4rXHRjbWQuZ2V0X2NvbXBvbmVudF9pbmZvLmRhdGFfcGEgPSBjcHVfdG9fbGU2NChkbWFfYWRkcik7XG4rXG4rXHRlcnIgPSBwZHNjX2RldmNtZChwZHNjLCBcdTAwMjZjbWQsIFx1MDAyNmNvbXAsIHBkc2MtXHUwMDNlZGV2Y21kX3RpbWVvdXQgKiAyKTtcbitcdGlmIChlcnIgPT0gLUVUSU1FRE9VVCB8fCBlcnIgPT0gLUVBR0FJTikge1xuK1x0XHRwZHNjX2RlZmVycmVkX2RtYV9hZGQocGRzYywgZGVmZXJyZWQsIGRtYV9hZGRyLCBsaXN0X2luZm8sXG4rXHRcdFx0XHQgICAgICBQRFNfUEFHRV9TSVpFLCBETUFfRlJPTV9ERVZJQ0UpO1xuK1x0XHRyZXR1cm4gZXJyO1xuK1x0fVxuK1xuK1x0a2ZyZWUoZGVmZXJyZWQpO1xuK1x0ZG1hX3VubWFwX3NpbmdsZShwZHNjLVx1MDAzZWRldiwgZG1hX2FkZHIsIFBEU19QQUdFX1NJWkUsIERNQV9GUk9NX0RFVklDRSk7XG4rXHRpZiAoZXJyKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdGlmIChjb21wLmdldF9jb21wb25lbnRfaW5mby52ZXIgPT0gMCkge1xuK1x0XHQvKiBEb24ndCBzdXBwb3J0IGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgYXMgdmVyc2lvbiAwIGhhc1xuK1x0XHQgKiBhbGlnbm1lbnQgaXNzdWVzLCBzbyBnaXZlIGEgaGludCB0byB1c2VycyB0byB1cGRhdGVcbitcdFx0ICogdGhlaXIgZmlybXdhcmVcbitcdFx0ICovXG4rXHRcdGRldl93YXJuX29uY2UocGRzYy1cdTAwM2VkZXYsXG4rXHRcdFx0ICAgICAgXCJJbmNvbXBhdGlibGUgZ2V0X2NvbXBvbmVudF9pbmZvIHZlcnNpb24gJXUgcmVwb3J0ZWQgYnkgZmlybXdhcmVcXG5cIixcbitcdFx0XHQgICAgICBjb21wLmdldF9jb21wb25lbnRfaW5mby52ZXIpO1xuK1x0XHRlcnIgPSAwO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcbitcdG51bV9jb21wb25lbnRzID0gbGlzdF9pbmZvLVx1MDAzZW51bV9jb21wb25lbnRzO1xuK1x0aWYgKG51bV9jb21wb25lbnRzIFx1MDAzZSBQRFNfQ09SRV9GV19DT01QT05FTlRfTElTVF9MRU4pIHtcbitcdFx0ZXJyID0gLUVOT01FTTtcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4rXG4rXHRwZHNjLVx1MDAzZWZ3X2NvbXBvbmVudHMubnVtX2NvbXBvbmVudHMgPSBudW1fY29tcG9uZW50cztcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG51bV9jb21wb25lbnRzOyBpKyspIHtcbitcdFx0c3RydWN0IHBkc19jb3JlX2Z3X2NvbXBvbmVudF9pbmZvICppbmZvID1cbitcdFx0XHRcdTAwMjZwZHNjLVx1MDAzZWZ3X2NvbXBvbmVudHMuaW5mb1tpXTtcbitcbitcdFx0bWVtY3B5KGluZm8sIFx1MDAyNmxpc3RfaW5mby1cdTAwM2VpbmZvW2ldLCBzaXplb2YoKmluZm8pKTtcbitcdFx0aW5mby1cdTAwM2V2ZXJzaW9uW1BEU19DT1JFX0ZXX0NPTVBPTkVOVF9WRVJfQlVGTEVOIC0gMV0gPSAwO1xuK1x0XHRpbmZvLVx1MDAzZW5hbWVbUERTX0NPUkVfRldfQ09NUE9ORU5UX05BTUVfQlVGTEVOIC0gMV0gPSAwO1xuK1x0fVxuK1xuK291dDpcbitcdGtmcmVlKGxpc3RfaW5mbyk7XG4rXHRyZXR1cm4gZXJyO1xuK31cbitcbitzdGF0aWMgaW50IHBkc2NfZGV2Y21kX3NlbmRfY29tcG9uZW50KHN0cnVjdCBwZHNjICpwZHNjLFxuK1x0XHRcdFx0ICAgICAgc3RydWN0IHBkc19jb3JlX2ZsYXNoX2NvbXBvbmVudCAqaW5mbyxcbitcdFx0XHRcdCAgICAgIHUxNiBpbmZvX3N6LCBkbWFfYWRkcl90IGFkZHIsIHUzMiBsZW5ndGgsXG4rXHRcdFx0XHQgICAgICB1MzIgb2Zmc2V0LCB1MTYgc2xvdF9pZCxcbitcdFx0XHRcdCAgICAgIHVuaW9uIHBkc19jb3JlX2Rldl9jb21wICpjb21wKVxuK3tcbitcdHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgY21kID0ge1xuK1x0XHQuc2VuZF9jb21wb25lbnQub3Bjb2RlID0gUERTX0NPUkVfQ01EX1NFTkRfQ09NUE9ORU5ULFxuK1x0XHQuc2VuZF9jb21wb25lbnQudmVyID0gMSxcbitcdFx0LnNlbmRfY29tcG9uZW50Lm9wZXJhdGlvbiA9IFBEU19DT1JFX1NFTkRfQ09NUE9ORU5UX1NUQVJULFxuK1x0XHQuc2VuZF9jb21wb25lbnQuZGF0YV9wYSA9IGNwdV90b19sZTY0KGFkZHIpLFxuK1x0XHQuc2VuZF9jb21wb25lbnQuZGF0YV9sZW4gPSBjcHVfdG9fbGUzMihsZW5ndGgpLFxuK1x0XHQuc2VuZF9jb21wb25lbnQub2Zmc2V0ID0gY3B1X3RvX2xlMzIob2Zmc2V0KSxcbitcdFx0LnNlbmRfY29tcG9uZW50LnNsb3RfaWQgPSBzbG90X2lkLFxuK1x0fTtcbitcdHVuc2lnbmVkIGxvbmcgdGltZW91dCA9IDMwMCAqIEhaO1xuK1x0dW5zaWduZWQgbG9uZyBzdGFydF90aW1lO1xuK1x0dW5zaWduZWQgbG9uZyBlbmRfdGltZTtcbitcdGludCBlcnI7XG4rXG4rXHRzdGFydF90aW1lID0gamlmZmllcztcbitcdGVuZF90aW1lID0gc3RhcnRfdGltZSArIHRpbWVvdXQ7XG4rXHRkbyB7XG4rXHRcdC8qIHByZXZlbnQgbm9pc3kvYmVuaWduIGRldmNtZCBmYWlsdXJlcyAqL1xuK1x0XHRlcnIgPSBwZHNjX2RldmNtZF93aXRoX2RhdGFfbm9tc2cocGRzYywgXHUwMDI2Y21kLCBpbmZvLCBpbmZvX3N6LFxuK1x0XHRcdFx0XHRcdCAgY29tcCwgNjApO1xuK1x0XHRpZiAoZXJyICE9IC1FQUdBSU4pXG4rXHRcdFx0YnJlYWs7XG4rXG4rXHRcdC8qIGlmIHJlcXVpcmVkLCBzdWJzZXF1ZW50IGNvbW1hbmRzIGNoZWNrIHN0YXR1cyBvZlxuK1x0XHQgKiBQRFNfQ09SRV9DTURfU0VORF9DT01QT05FTlQgY29tbWFuZCwgd2hpY2ggcmV0dXJuc1xuK1x0XHQgKiBFQUdBSU4gd2hpbGUgdGhlIGNvbW1hbmQgaXMgc3RpbGwgcnVubmluZyxcbitcdFx0ICogZWxzZSB3ZSBnZXQgdGhlIGZpbmFsIGNvbW1hbmQgc3RhdHVzLlxuK1x0XHQgKi9cbitcdFx0Y21kLnNlbmRfY29tcG9uZW50Lm9wZXJhdGlvbiA9IFBEU19DT1JFX1NFTkRfQ09NUE9ORU5UX1NUQVRVUztcbitcdFx0bXNsZWVwKDIwKTtcbitcdH0gd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIGVuZF90aW1lKSk7XG4rXG4rXHRpZiAoZXJyID09IC1FQUdBSU4gfHwgZXJyID09IC1FVElNRURPVVQpXG4rXHRcdGRldl9lcnIocGRzYy1cdTAwM2VkZXYsIFwiUERTX0NPUkVfQ01EX1NFTkRfQ09NUE9ORU5UIHRpbWVkIG91dFxcblwiKTtcbitcbitcdHJldHVybiBlcnI7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcGRzY19mbGFzaF9jb21wb25lbnRfY2h1bmsoc3RydWN0IHBkc2MgKnBkc2MsIHN0cnVjdCBkZXZpY2UgKmRldixcbitcdFx0XHRcdCAgICAgIHN0cnVjdCBwZHNfY29yZV9mbGFzaF9jb21wb25lbnQgKmluZm8sXG4rXHRcdFx0XHQgICAgICB1MTYgaW5mb19zeiwgY29uc3QgdTggKmRhdGEsIHUxNiBjb3B5X3N6LFxuK1x0XHRcdFx0ICAgICAgdTMyIG9mZnNldCwgdTggc2xvdF9pZCxcbitcdFx0XHRcdCAgICAgIHVuaW9uIHBkc19jb3JlX2Rldl9jb21wICpjb21wKVxuK3tcbitcdHN0cnVjdCBwZHNjX2RlZmVycmVkX2RtYSAqZGVmZXJyZWQ7XG4rXHRkbWFfYWRkcl90IGRtYV9hZGRyO1xuK1x0dTggKmNvbXBvbmVudF9kYXRhO1xuK1x0aW50IGVycjtcbitcbitcdGRlZmVycmVkID0ga21hbGxvY19vYmooKmRlZmVycmVkLCBHRlBfS0VSTkVMKTtcbitcdGlmICghZGVmZXJyZWQpXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0Y29tcG9uZW50X2RhdGEgPSBrbWVtZHVwKGRhdGEsIGNvcHlfc3osIEdGUF9LRVJORUwpO1xuK1x0aWYgKCFjb21wb25lbnRfZGF0YSkge1xuK1x0XHRrZnJlZShkZWZlcnJlZCk7XG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1x0fVxuK1xuK1x0ZG1hX2FkZHIgPSBkbWFfbWFwX3NpbmdsZShkZXYsIGNvbXBvbmVudF9kYXRhLCBjb3B5X3N6LCBETUFfVE9fREVWSUNFKTtcbitcdGlmIChkbWFfbWFwcGluZ19lcnJvcihkZXYsIGRtYV9hZGRyKSkge1xuK1x0XHRkZXZfZXJyKGRldixcbitcdFx0XHRcIkZhaWxlZCB0byBkbWFfbWFwIGNvbXBvbmVudF9kYXRhIGF0IG9mZnNldCAweCV4IGNvcHlfc3ogMHgleFxcblwiLFxuK1x0XHRcdG9mZnNldCwgY29weV9zeik7XG4rXHRcdGtmcmVlKGNvbXBvbmVudF9kYXRhKTtcbitcdFx0a2ZyZWUoZGVmZXJyZWQpO1xuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcdH1cbitcbitcdGVyciA9IHBkc2NfZGV2Y21kX3NlbmRfY29tcG9uZW50KHBkc2MsIGluZm8sIGluZm9fc3osIGRtYV9hZGRyLFxuK1x0XHRcdFx0XHQgY29weV9zeiwgb2Zmc2V0LCBzbG90X2lkLCBjb21wKTtcbitcdGlmIChlcnIgPT0gLUVUSU1FRE9VVCB8fCBlcnIgPT0gLUVBR0FJTikge1xuK1x0XHRwZHNjX2RlZmVycmVkX2RtYV9hZGQocGRzYywgZGVmZXJyZWQsIGRtYV9hZGRyLFxuK1x0XHRcdFx0ICAgICAgY29tcG9uZW50X2RhdGEsIGNvcHlfc3osIERNQV9UT19ERVZJQ0UpO1xuK1x0XHRyZXR1cm4gZXJyO1xuK1x0fVxuK1xuK1x0a2ZyZWUoZGVmZXJyZWQpO1xuK1x0ZG1hX3VubWFwX3NpbmdsZShkZXYsIGRtYV9hZGRyLCBjb3B5X3N6LCBETUFfVE9fREVWSUNFKTtcbitcdGtmcmVlKGNvbXBvbmVudF9kYXRhKTtcbitcbitcdHJldHVybiBlcnI7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcGRzY19mbGFzaF9jb21wb25lbnQoc3RydWN0IHBsZG1mdyAqY29udGV4dCxcbitcdFx0XHRcdHN0cnVjdCBwbGRtZndfY29tcG9uZW50ICpjb21wb25lbnQpXG4re1xuK1x0Y2hhciBjb21wb25lbnRfbmFtZV9idWZbUERTQ19GV19DT01QT05FTlRfRlVMTF9OQU1FX0JVRkxFTl07XG4rXHRzdHJ1Y3QgcGRzX2NvcmVfZnd1X3ByaXYgKnByaXYgPVxuK1x0XHRjb250YWluZXJfb2YoY29udGV4dCwgc3RydWN0IHBkc19jb3JlX2Z3dV9wcml2LCBjb250ZXh0KTtcbitcdHN0cnVjdCBwZHNfY29yZV9mbGFzaF9jb21wb25lbnQgKmNvbXBvbmVudF9pbmZvO1xuK1x0Y29uc3QgY2hhciAqY29tcG9uZW50X25hbWUgPSBOVUxMO1xuK1x0c3RydWN0IGRldmljZSAqZGV2ID0gY29udGV4dC1cdTAwM2VkZXY7XG4rXHRzdHJ1Y3QgcGRzYyAqcGRzYyA9IHByaXYtXHUwMDNlcGRzYztcbitcdHUxNiBidWZfc3osIGluZm9fc3o7XG4rXHRzdHJ1Y3QgZGV2bGluayAqZGw7XG4rXHR1OCBjb21wb25lbnRfdHlwZTtcbitcdHUzMiB0b3RhbF9sZW47XG4rXHR1MzIgb2Zmc2V0O1xuK1x0aW50IGVycjtcbitcbitcdGNvbXBvbmVudF90eXBlID0gcGRzY19nZXRfY29tcG9uZW50X3R5cGVfYnlfaWQocGRzYyxcbitcdFx0XHRcdFx0XHQgICAgICAgY29tcG9uZW50LVx1MDAzZWlkZW50aWZpZXIpO1xuK1x0aWYgKGNvbXBvbmVudF90eXBlKSB7XG4rXHRcdGNvbnN0IGNoYXIgKnR5cGVfbmFtZSA9IHBkc2NfZndfdHlwZV90b19uYW1lKGNvbXBvbmVudF90eXBlKTtcbitcbitcdFx0aWYgKGNvbXBvbmVudF90eXBlID09IFBEU19DT1JFX0ZXX1RZUEVfTUFJTikge1xuK1x0XHRcdGNvbXBvbmVudF9uYW1lID0gXCJmd1wiO1xuK1x0XHR9IGVsc2UgaWYgKHR5cGVfbmFtZSkge1xuK1x0XHRcdHNucHJpbnRmKGNvbXBvbmVudF9uYW1lX2J1Ziwgc2l6ZW9mKGNvbXBvbmVudF9uYW1lX2J1ZiksXG4rXHRcdFx0XHQgXCIlcyVzXCIsIFBEU0NfRldfQ09NUE9ORU5UX1BSRUZJWCwgdHlwZV9uYW1lKTtcbitcdFx0XHRjb21wb25lbnRfbmFtZSA9IGNvbXBvbmVudF9uYW1lX2J1ZjtcbitcdFx0fVxuK1x0fVxuK1xuK1x0ZGwgPSBwcml2X3RvX2RldmxpbmsocGRzYyk7XG4rXG4rXHRpZiAocGRzY19za2lwX2NvbXBvbmVudChwcml2LCBjb21wb25lbnQtXHUwMDNlaWRlbnRpZmllcikpIHtcbitcdFx0ZGV2bGlua19mbGFzaF91cGRhdGVfc3RhdHVzX25vdGlmeShkbCwgXCJTa2lwcGVkXCIsXG4rXHRcdFx0XHRcdFx0ICAgY29tcG9uZW50X25hbWUsIDAsIDApO1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbitcbitcdHRvdGFsX2xlbiA9IGNvbXBvbmVudC1cdTAwM2Vjb21wb25lbnRfc2l6ZTtcbitcdGRldl9kYmcoZGV2LFxuK1x0XHRcImNvbXBvbmVudCBuYW1lICVzIGNsYXNzICV1IGlkICV1IGFjdF9tZXRoICV1IHZlcl9zdHIgJS4qcyBpbmRleCAldSBzaXplICV1XFxuXCIsXG4rXHRcdGNvbXBvbmVudF9uYW1lID86IFwiKHVua25vd24pXCIsIGNvbXBvbmVudC1cdTAwM2VjbGFzc2lmaWNhdGlvbixcbitcdFx0Y29tcG9uZW50LVx1MDAzZWlkZW50aWZpZXIsIGNvbXBvbmVudC1cdTAwM2VhY3RpdmF0aW9uX21ldGhvZCxcbitcdFx0Y29tcG9uZW50LVx1MDAzZXZlcnNpb25fbGVuLCBjb21wb25lbnQtXHUwMDNldmVyc2lvbl9zdHJpbmcsXG4rXHRcdGNvbXBvbmVudC1cdTAwM2VpbmRleCwgY29tcG9uZW50LVx1MDAzZWNvbXBvbmVudF9zaXplKTtcbitcbitcdGJ1Zl9zeiA9IHNpemVvZihwZHNjLVx1MDAzZWNtZF9yZWdzLVx1MDAzZWRhdGEpO1xuK1x0aW5mb19zeiA9IHN0cnVjdF9zaXplKGNvbXBvbmVudF9pbmZvLCB2ZXJzaW9uX3N0cixcbitcdFx0XHQgICAgICBjb21wb25lbnQtXHUwMDNldmVyc2lvbl9sZW4pO1xuK1x0aWYgKGluZm9fc3ogXHUwMDNlIGJ1Zl9zeikge1xuK1x0XHRkZXZfZXJyKGRldiwgXCJjb21wb25lbnRfaW5mbyBzaXplICVkIHRvbyBiaWcsIG1heCBzaXplOiAlZFxcblwiLFxuK1x0XHRcdGluZm9fc3osIGJ1Zl9zeik7XG4rXHRcdHJldHVybiAtRU5PU1BDO1xuK1x0fVxuK1x0Y29tcG9uZW50X2luZm8gPSB2emFsbG9jKGluZm9fc3opO1xuK1x0aWYgKCFjb21wb25lbnRfaW5mbylcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRjb21wb25lbnRfaW5mby1cdTAwM2Vjb21wYXJpc29uX3N0YW1wID1cbitcdFx0Y3B1X3RvX2xlMzIoY29tcG9uZW50LVx1MDAzZWNvbXBhcmlzb25fc3RhbXApO1xuK1x0Y29tcG9uZW50X2luZm8tXHUwMDNlaW1hZ2Vfc2l6ZSA9IGNwdV90b19sZTMyKHRvdGFsX2xlbik7XG4rXHRjb21wb25lbnRfaW5mby1cdTAwM2VjbGFzc2lmaWNhdGlvbiA9IGNwdV90b19sZTE2KGNvbXBvbmVudC1cdTAwM2VjbGFzc2lmaWNhdGlvbik7XG4rXHRjb21wb25lbnRfaW5mby1cdTAwM2VpZGVudGlmaWVyID0gY3B1X3RvX2xlMTYoY29tcG9uZW50LVx1MDAzZWlkZW50aWZpZXIpO1xuK1x0Y29tcG9uZW50X2luZm8tXHUwMDNlb3B0aW9ucyA9IGNwdV90b19sZTE2KGNvbXBvbmVudC1cdTAwM2VvcHRpb25zKTtcbitcdGNvbXBvbmVudF9pbmZvLVx1MDAzZXZlcnNpb25fc3RyX3R5cGUgPSBjb21wb25lbnQtXHUwMDNldmVyc2lvbl90eXBlO1xuK1x0Y29tcG9uZW50X2luZm8tXHUwMDNldmVyc2lvbl9zdHJfbGVuID0gY29tcG9uZW50LVx1MDAzZXZlcnNpb25fbGVuO1xuK1x0bWVtY3B5KGNvbXBvbmVudF9pbmZvLVx1MDAzZXZlcnNpb25fc3RyLCBjb21wb25lbnQtXHUwMDNldmVyc2lvbl9zdHJpbmcsXG4rXHQgICAgICAgY29tcG9uZW50LVx1MDAzZXZlcnNpb25fbGVuKTtcbitcbitcdG9mZnNldCA9IDA7XG4rXHR3aGlsZSAob2Zmc2V0IFx1MDAzYyB0b3RhbF9sZW4pIHtcbitcdFx0dW5pb24gcGRzX2NvcmVfZGV2X2NvbXAgY29tcCA9IHt9O1xuK1x0XHR1MTYgY29weV9zejtcbitcbitcdFx0Y29weV9zeiA9IG1pbl90KHVuc2lnbmVkIGludCwgUERTX1BBR0VfU0laRSxcbitcdFx0XHRcdHRvdGFsX2xlbiAtIG9mZnNldCk7XG4rXG4rXHRcdGVyciA9IHBkc2NfZmxhc2hfY29tcG9uZW50X2NodW5rKHBkc2MsIGRldiwgY29tcG9uZW50X2luZm8sXG4rXHRcdFx0XHRcdFx0IGluZm9fc3osXG4rXHRcdFx0XHRcdFx0IGNvbXBvbmVudC1cdTAwM2Vjb21wb25lbnRfZGF0YSArXG4rXHRcdFx0XHRcdFx0IG9mZnNldCwgY29weV9zeiwgb2Zmc2V0LFxuK1x0XHRcdFx0XHRcdCBQRFNfQ09SRV9GV19TTE9UX0lOVkFMSUQsXG4rXHRcdFx0XHRcdFx0IFx1MDAyNmNvbXApO1xuK1x0XHRpZiAoZXJyIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgY29tcC5zZW5kX2NvbXBvbmVudC5jb21wYXRfcmVzcG9uc2UgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAoY29tcC5zZW5kX2NvbXBvbmVudC5jb21wYXRfcmVzcG9uc2VfY29kZSA9PVxuK1x0XHQgICAgIFBEU19DT1JFX0NPTVBPTkVOVF9TVEFNUF9JREVOVElDQUwgfHxcbitcdFx0ICAgICBjb21wLnNlbmRfY29tcG9uZW50LmNvbXBhdF9yZXNwb25zZV9jb2RlID09XG4rXHRcdCAgICAgUERTX0NPUkVfQ09NUE9ORU5UX1NUQU1QX0xPV0VSKSkge1xuK1x0XHRcdGVyciA9IDA7XG4rXHRcdFx0ZGV2bGlua19mbGFzaF91cGRhdGVfc3RhdHVzX25vdGlmeShkbCwgXCJTa2lwcGVkXCIsXG4rXHRcdFx0XHRcdFx0XHQgICBjb21wb25lbnRfbmFtZSxcbitcdFx0XHRcdFx0XHRcdCAgIDAsIDApO1xuK1x0XHRcdGdvdG8gc2tpcF9jb21wb25lbnQ7XG4rXHRcdH1cbitcbitcdFx0aWYgKGVycikge1xuK1x0XHRcdE5MX1NFVF9FUlJfTVNHX01PRChwcml2LVx1MDAzZWV4dGFjayxcbitcdFx0XHRcdFx0ICAgXCJGYWlsZWQgdG8gZmxhc2ggY29tcG9uZW50XCIpO1xuK1x0XHRcdGdvdG8gZXJyX291dDtcbitcdFx0fVxuK1xuK1x0XHRvZmZzZXQgKz0gY29weV9zejtcbitcdFx0ZGV2bGlua19mbGFzaF91cGRhdGVfc3RhdHVzX25vdGlmeShkbCxcbitcdFx0XHRcdFx0XHQgICBcIkVyYXNpbmcvRmxhc2hpbmdcIixcbitcdFx0XHRcdFx0XHQgICBjb21wb25lbnRfbmFtZSwgb2Zmc2V0LFxuK1x0XHRcdFx0XHRcdCAgIHRvdGFsX2xlbik7XG4rXHR9XG4rXG4rXHR2ZnJlZShjb21wb25lbnRfaW5mbyk7XG4rXHRyZXR1cm4gMDtcbitcbitlcnJfb3V0OlxuK1x0ZGV2bGlua19mbGFzaF91cGRhdGVfc3RhdHVzX25vdGlmeShkbCxcbitcdFx0XHRcdFx0ICAgXCJFcmFzaW5nL0ZsYXNoaW5nIENvbXBvbmVudCBGYWlsZWRcIixcbitcdFx0XHRcdFx0ICAgY29tcG9uZW50X25hbWUsIDAsIDApO1xuK3NraXBfY29tcG9uZW50OlxuK1x0dmZyZWUoY29tcG9uZW50X2luZm8pO1xuK1x0cmV0dXJuIGVycjtcbit9XG4rXG4rc3RhdGljIGludCBwZHNjX2RldmNtZF9maW5hbGl6ZV91cGRhdGUoc3RydWN0IHBkc2MgKnBkc2MpXG4re1xuK1x0dW5pb24gcGRzX2NvcmVfZGV2X2NtZCBjbWQgPSB7XG4rXHRcdC5maW5hbGl6ZV91cGRhdGUub3Bjb2RlID0gUERTX0NPUkVfQ01EX0ZJTkFMSVpFX1VQREFURSxcbitcdFx0LmZpbmFsaXplX3VwZGF0ZS52ZXIgPSAxLFxuK1x0fTtcbitcdHVuaW9uIHBkc19jb3JlX2Rldl9jb21wIGNvbXAgPSB7fTtcbitcbitcdHJldHVybiBwZHNjX2RldmNtZChwZHNjLCBcdTAwMjZjbWQsIFx1MDAyNmNvbXAsIHBkc2MtXHUwMDNlZGV2Y21kX3RpbWVvdXQpO1xuK31cbitcbitzdGF0aWMgaW50IHBkc2NfZmluYWxpemVfdXBkYXRlKHN0cnVjdCBwbGRtZncgKmNvbnRleHQpXG4re1xuK1x0c3RydWN0IHBkc19jb3JlX2Z3dV9wcml2ICpwcml2ID1cbitcdFx0Y29udGFpbmVyX29mKGNvbnRleHQsIHN0cnVjdCBwZHNfY29yZV9md3VfcHJpdiwgY29udGV4dCk7XG4rXHRjb25zdCBjaGFyICpjb21wb25lbnRfbmFtZSA9IHByaXYtXHUwMDNlcGFyYW1zLVx1MDAzZWNvbXBvbmVudDtcbitcdHVuc2lnbmVkIGxvbmcgc3RhcnRfdGltZSwgZW5kX3RpbWU7XG4rXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBjb250ZXh0LVx1MDAzZWRldjtcbitcdHN0cnVjdCBwZHNjICpwZHNjID0gcHJpdi1cdTAwM2VwZHNjO1xuK1x0c3RydWN0IGRldmxpbmsgKmRsO1xuK1x0aW50IGVycjtcbitcbitcdGRsID0gcHJpdl90b19kZXZsaW5rKHBkc2MpO1xuK1xuK1x0c3RhcnRfdGltZSA9IGppZmZpZXM7XG4rXHRlbmRfdGltZSA9IHN0YXJ0X3RpbWUgKyAoUERTQ19GV19JTlNUQUxMX1RJTUVPVVQgKiBIWik7XG4rXHRkbyB7XG4rXHRcdGVyciA9IHBkc2NfZGV2Y21kX2ZpbmFsaXplX3VwZGF0ZShwZHNjKTtcbitcdFx0aWYgKGVyciAhPSAtRUFHQUlOKVxuK1x0XHRcdGJyZWFrO1xuK1xuK1x0XHRkZXZfZGJnKGRldiwgXCJyZXRyeWluZyBmaW5hbGl6ZV91cGRhdGU6ICVwZVxcblwiLCBFUlJfUFRSKGVycikpO1xuK1x0XHRtc2xlZXAoMjApO1xuK1x0fSB3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgZW5kX3RpbWUpIFx1MDAyNlx1MDAyNiBlcnIgPT0gLUVBR0FJTik7XG4rXG4rXHRpZiAoZXJyKSB7XG4rXHRcdGRldmxpbmtfZmxhc2hfdXBkYXRlX3N0YXR1c19ub3RpZnkoZGwsIFwiRmluYWxpemUgVXBkYXRlIEZhaWxlZFwiLFxuK1x0XHRcdFx0XHRcdCAgIGNvbXBvbmVudF9uYW1lLCAwLCAwKTtcbitcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKHByaXYtXHUwMDNlZXh0YWNrLCBcIkZpbmFsaXplIHVwZGF0ZSBmYWlsZWRcIik7XG4rXHRcdHJldHVybiBlcnI7XG4rXHR9XG4rXG4rXHRkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9zdGF0dXNfbm90aWZ5KGRsLCBcIkZpbmFsaXplZCBVcGRhdGVcIixcbitcdFx0XHRcdFx0ICAgY29tcG9uZW50X25hbWUsIDAsIDApO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGxkbWZ3X29wcyBwZHNjX3BsZG1md19vcHMgPSB7XG4rXHQubWF0Y2hfcmVjb3JkID0gcGRzY19tYXRjaF9yZWNvcmRfZGVzY3MsXG4rXHQuc2VuZF9wYWNrYWdlX2RhdGEgPSBwZHNjX3NlbmRfcGFja2FnZV9kYXRhLFxuK1x0LnNlbmRfY29tcG9uZW50X3RhYmxlID0gcGRzY19zZW5kX2NvbXBvbmVudF90YWJsZSxcbitcdC5mbGFzaF9jb21wb25lbnQgPSBwZHNjX2ZsYXNoX2NvbXBvbmVudCxcbitcdC5maW5hbGl6ZV91cGRhdGUgPSBwZHNjX2ZpbmFsaXplX3VwZGF0ZVxuK307XG4rXG4rc3RhdGljIGludCBwZHNjX3BsZG1fZmlybXdhcmVfdXBkYXRlKHN0cnVjdCBwZHNjICpwZHNjLFxuK1x0XHRcdFx0ICAgICBzdHJ1Y3QgZGV2bGlua19mbGFzaF91cGRhdGVfcGFyYW1zICpwYXJhbXMsXG4rXHRcdFx0XHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayxcbitcdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdylcbit7XG4rXHRzdHJ1Y3QgcGRzX2NvcmVfZnd1X3ByaXYgcHJpdiA9IHt9O1xuK1x0aW50IGVycjtcbitcbitcdGlmICghcGRzYy1cdTAwM2Vmd19jb21wb25lbnRzLm51bV9jb21wb25lbnRzKSB7XG4rXHRcdGVyciA9IHBkc2NfZ2V0X2NvbXBvbmVudF9pbmZvKHBkc2MpO1xuK1x0XHRpZiAoZXJyKSB7XG4rXHRcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcbitcdFx0XHRcdFx0ICAgXCJGYWlsZWQgdG8gZ2V0IGNvbXBvbmVudCBpbmZvXCIpO1xuK1x0XHRcdHJldHVybiBlcnI7XG4rXHRcdH1cbitcdH1cbitcbitcdGlmIChwYXJhbXMtXHUwMDNlY29tcG9uZW50KSB7XG4rXHRcdHU4IHR5cGUgPSBwZHNjX25hbWVfdG9fZndfdHlwZShwYXJhbXMtXHUwMDNlY29tcG9uZW50KTtcbitcbitcdFx0aWYgKCF0eXBlIHx8ICFwZHNjX2NvbXBvbmVudF90eXBlX2V4aXN0cyhwZHNjLCB0eXBlKSkge1xuK1x0XHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFwiVW5rbm93biBjb21wb25lbnQgbmFtZVwiKTtcbitcdFx0XHRyZXR1cm4gLUVOT0VOVDtcbitcdFx0fVxuK1x0fVxuK1xuK1x0SU5JVF9MSVNUX0hFQUQoXHUwMDI2cHJpdi5jb21wb25lbnRzKTtcbitcdHByaXYuY29udGV4dC5vcHMgPSBcdTAwMjZwZHNjX3BsZG1md19vcHM7XG4rXHRwcml2LmNvbnRleHQuZGV2ID0gcGRzYy1cdTAwM2VkZXY7XG4rXHRwcml2LnBhcmFtcyA9IHBhcmFtcztcbitcdHByaXYuZXh0YWNrID0gZXh0YWNrO1xuK1x0cHJpdi5wZHNjID0gcGRzYztcbitcbitcdGVyciA9IHBsZG1md19mbGFzaF9pbWFnZShcdTAwMjZwcml2LmNvbnRleHQsIGZ3KTtcbitcdGlmICghZXJyIFx1MDAyNlx1MDAyNiBwYXJhbXMtXHUwMDNlY29tcG9uZW50IFx1MDAyNlx1MDAyNiAhcHJpdi5jb21wb25lbnRfZm91bmQpIHtcbitcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcbitcdFx0XHRcdCAgIFwiUmVxdWVzdGVkIGNvbXBvbmVudCBub3QgcHJlc2VudCBpbiBmaXJtd2FyZSBwYWNrYWdlXCIpO1xuK1x0XHRlcnIgPSAtRU5PRU5UO1xuK1x0fVxuK1x0cGRzY19mcmVlX2Z3dV9wcml2KFx1MDAyNnByaXYpO1xuK1xuK1x0cmV0dXJuIGVycjtcbit9XG4rXG4raW50IHBkc2NfZmlybXdhcmVfdXBkYXRlKHN0cnVjdCBwZHNjICpwZHNjLFxuK1x0XHRcdCBzdHJ1Y3QgZGV2bGlua19mbGFzaF91cGRhdGVfcGFyYW1zICpwYXJhbXMsXG4rXHRcdFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbit7XG4rXHRpbnQgZXJyO1xuK1xuK1x0aWYgKHBkc2MtXHUwMDNlZGV2X2lkZW50LnZlcnNpb24gXHUwMDNlPSBQRFNfQ09SRV9JREVOVElUWV9WRVJTSU9OXzIgXHUwMDI2XHUwMDI2XG4rXHQgICAgcGRzYy1cdTAwM2VkZXZfaWRlbnQuY2FwYWJpbGl0aWVzIFx1MDAyNlxuK1x0XHRjcHVfdG9fbGU2NChQRFNfQ09SRV9ERVZfQ0FQX1BMRE1fRldfVVBEQVRFKSlcbitcdFx0ZXJyID0gcGRzY19wbGRtX2Zpcm13YXJlX3VwZGF0ZShwZHNjLCBwYXJhbXMsIGV4dGFjayxcbitcdFx0XHRcdFx0XHRwYXJhbXMtXHUwMDNlZncpO1xuK1x0ZWxzZVxuK1x0XHRlcnIgPSBwZHNjX2xlZ2FjeV9maXJtd2FyZV91cGRhdGUocGRzYywgcGFyYW1zLCBleHRhY2spO1xuK1xuK1x0LyogSW52YWxpZGF0ZSBjYWNoZWQgY29tcG9uZW50IGluZm8gc28gbmV4dCBpbmZvX2dldCByZWZyZXNoZXMgKi9cbitcdHBkc2NfZndfY29tcG9uZW50c19pbnZhbGlkYXRlKHBkc2MpO1xuK1xuK1x0cmV0dXJuIGVycjtcbit9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3Bkc19jb3JlL21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9tYWluLmNcbmluZGV4IDhkOTRhNGQ3MDM5NWUuLjVlMWIwNzg1MDE2M2IgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvbWFpbi5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvbWFpbi5jXG5AQCAtMjEsNiArMjEsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgcGRzY19pZF90YWJsZVtdID0ge1xuIH07XG4gTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHBkc2NfaWRfdGFibGUpO1xuIFxuK3N0YXRpYyB2b2lkIHBkc2Nfc3RvcF9oZWFsdGhfdGhyZWFkKHN0cnVjdCBwZHNjICpwZHNjKTtcbitcbiBzdGF0aWMgdm9pZCBwZHNjX3dkdGltZXJfY2Ioc3RydWN0IHRpbWVyX2xpc3QgKnQpXG4ge1xuIFx0c3RydWN0IHBkc2MgKnBkc2MgPSB0aW1lcl9jb250YWluZXJfb2YocGRzYywgdCwgd2R0aW1lcik7XG5AQCAtMzE1LDYgKzMxNyw3IEBAIHN0YXRpYyBpbnQgcGRzY19pbml0X3BmKHN0cnVjdCBwZHNjICpwZHNjKVxuIFx0XHRkZXN0cm95X3dvcmtxdWV1ZShwZHNjLVx1MDAzZXdxKTtcbiBcdG11dGV4X2Rlc3Ryb3koXHUwMDI2cGRzYy1cdTAwM2Vjb25maWdfbG9jayk7XG4gXHRtdXRleF9kZXN0cm95KFx1MDAyNnBkc2MtXHUwMDNlZGV2Y21kX2xvY2spO1xuK1x0cGRzY19kZWZlcnJlZF9kbWFfZnJlZShwZHNjKTtcbiBcdHBjaV9mcmVlX2lycV92ZWN0b3JzKHBkc2MtXHUwMDNlcGRldik7XG4gZXJyX291dF91bm1hcF9iYXJzOlxuIFx0cGRzY191bm1hcF9iYXJzKHBkc2MpO1xuQEAgLTM1Myw2ICszNTYsOCBAQCBzdGF0aWMgaW50IHBkc2NfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXG4gXHRwZHNjLVx1MDAzZXBkZXYgPSBwZGV2O1xuIFx0cGRzYy1cdTAwM2VkZXYgPSBcdTAwMjZwZGV2LVx1MDAzZWRldjtcbiBcdHNldF9iaXQoUERTQ19TX0lOSVRJTkdfRFJJVkVSLCBcdTAwMjZwZHNjLVx1MDAzZXN0YXRlKTtcbitcdElOSVRfTElTVF9IRUFEKFx1MDAyNnBkc2MtXHUwMDNlZGVmZXJyZWRfZG1hX2xpc3QpO1xuK1x0c3Bpbl9sb2NrX2luaXQoXHUwMDI2cGRzYy1cdTAwM2VkZWZlcnJlZF9kbWFfbG9jayk7XG4gXHRwY2lfc2V0X2RydmRhdGEocGRldiwgcGRzYyk7XG4gXHRwZHNjX2RlYnVnZnNfYWRkX2RldihwZHNjKTtcbiBcbkBAIC00NTgsNiArNDYzLDcgQEAgc3RhdGljIHZvaWQgcGRzY19yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gXHR9XG4gXG4gXHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XG4rXHRwZHNjX2RlZmVycmVkX2RtYV9mcmVlKHBkc2MpO1xuIFxuIFx0aWRhX2ZyZWUoXHUwMDI2cGRzY19pZGEsIHBkc2MtXHUwMDNldWlkKTtcbiBcdHBkc2NfZGVidWdmc19kZWxfZGV2KHBkc2MpO1xuQEAgLTUwNSw2ICs1MTEsNyBAQCBzdGF0aWMgdm9pZCBwZHNjX3Jlc2V0X3ByZXBhcmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gXHRwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpO1xuIFx0aWYgKHBjaV9pc19lbmFibGVkKHBkZXYpKVxuIFx0XHRwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7XG4rXHRwZHNjX2RlZmVycmVkX2RtYV9mcmVlKHBkc2MpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBwZHNjX3Jlc2V0X2RvbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wZHMvcGRzX2NvcmVfaWYuaCBiL2luY2x1ZGUvbGludXgvcGRzL3Bkc19jb3JlX2lmLmhcbmluZGV4IDE3YTg3YzFhNTVkN2MuLjkwMWUxZTYyOGY4OTAgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3Bkcy9wZHNfY29yZV9pZi5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3Bkcy9wZHNfY29yZV9pZi5oXG5AQCAtNDAsNiArNDAsMTQgQEAgZW51bSBwZHNfY29yZV9jbWRfb3Bjb2RlIHtcbiBcdFBEU19DT1JFX0NNRF9GV19ET1dOTE9BRFx0PSA0LFxuIFx0UERTX0NPUkVfQ01EX0ZXX0NPTlRST0xcdFx0PSA1LFxuIFxuK1x0UERTX0NPUkVfQ01EX0dFVF9DT01QT05FTlRfSU5GT1x0PSA2LFxuK1x0UERTX0NPUkVfQ01EX1NFTkRfUEtHX0RBVEFcdD0gNyxcbitcdFBEU19DT1JFX0NNRF9TRU5EX0NPTVBPTkVOVF9UQkxcdD0gOCxcbitcdFBEU19DT1JFX0NNRF9TRU5EX0NPTVBPTkVOVFx0PSA5LFxuK1x0UERTX0NPUkVfQ01EX0ZJTkFMSVpFX1VQREFURVx0PSAxMCxcbitcdFBEU19DT1JFX0NNRF9NQVRDSF9SRUNPUkRfREVTQ1x0PSAxMSxcbitcdFBEU19DT1JFX0NNRF9IT1NUX01FTVx0XHQ9IDEyLFxuK1xuIFx0LyogU1IvSU9WIGNvbW1hbmRzICovXG4gXHRQRFNfQ09SRV9DTURfVkZfR0VUQVRUUlx0XHQ9IDYwLFxuIFx0UERTX0NPUkVfQ01EX1ZGX1NFVEFUVFJcdFx0PSA2MSxcbkBAIC0xMDAsNiArMTA4LDE2IEBAIHN0cnVjdCBwZHNfY29yZV9kcnZfaWRlbnRpdHkge1xuIFx0Y2hhciAgIGRyaXZlcl92ZXJfc3RyWzMyXTtcbiB9O1xuIFxuKy8qKlxuKyAqIGVudW0gcGRzX2NvcmVfZGV2X2NhcGFiaWxpdHkgLSBEZXZpY2UgY2FwYWJpbGl0aWVzXG4rICogQFBEU19DT1JFX0RFVl9DQVBfUExETV9GV19VUERBVEU6IERldmljZSBvbmx5IHN1cHBvcnRzIEZXIHVwZGF0ZSB2aWEgUExETVxuKyAqIEBQRFNfQ09SRV9ERVZfQ0FQX0hPU1RfTUVNOiBEZXZpY2Ugc3VwcG9ydHMgaG9zdCBtZW1vcnkgZm9yIGZ3IHVzZVxuKyAqL1xuK2VudW0gcGRzX2NvcmVfZGV2X2NhcGFiaWxpdHkge1xuK1x0UERTX0NPUkVfREVWX0NBUF9QTERNX0ZXX1VQREFURSA9IEJJVCgwKSxcbitcdFBEU19DT1JFX0RFVl9DQVBfSE9TVF9NRU0gPSBCSVQoMSksXG4rfTtcbitcbiAjZGVmaW5lIFBEU19ERVZfVFlQRV9NQVhcdDE2XG4gLyoqXG4gICogc3RydWN0IHBkc19jb3JlX2Rldl9pZGVudGl0eSAtIERldmljZSBpZGVudGl0eSBpbmZvcm1hdGlvblxuQEAgLTExOSw2ICsxMzcsMTEgQEAgc3RydWN0IHBkc19jb3JlX2Rydl9pZGVudGl0eSB7XG4gICpcdFx0ICAgICAgdmFsdWUgaW4gdXNlY3MgdG8gZGV2aWNlIHVuaXRzIHVzaW5nOlxuICAqXHRcdCAgICAgIGRldmljZSB1bml0cyA9IHVzZWNzICogbXVsdCAvIGRpdlxuICAqIEB2aWZfdHlwZXM6ICAgICAgICBIb3cgbWFueSBvZiBlYWNoIFZJRiBkZXZpY2UgdHlwZSBpcyBzdXBwb3J0ZWRcbisgKiBAbWF4X2Z3X3Nsb3RzOiAgICAgTnVtYmVyIG9mIGZpcm13YXJlIGNvbXBvbmVudHMgcmVwb3J0ZWQgYnkgZGV2aWNlXG4rICpcdFx0ICAgICAgb25seSBzdXBwb3J0ZWQgb24gdmVyc2lvbiBcdTAwM2U9IFBEU19DT1JFX0lERU5USVRZX1ZFUlNJT05fMlxuKyAqIEByc3ZkMjpcdCAgICAgIFdvcmQgYm91bmRhcnkgcGFkZGluZ1xuKyAqIEBjYXBhYmlsaXRpZXM6ICAgICBEZXZpY2UgY2FwYWJpbGl0aWVzXG4rICpcdFx0ICAgICAgb25seSBzdXBwb3J0ZWQgb24gdmVyc2lvbiBcdTAwM2U9IFBEU19DT1JFX0lERU5USVRZX1ZFUlNJT05fMlxuICAqL1xuIHN0cnVjdCBwZHNfY29yZV9kZXZfaWRlbnRpdHkge1xuIFx0dTggICAgIHZlcnNpb247XG5AQCAtMTMxLDkgKzE1NCwxMyBAQCBzdHJ1Y3QgcGRzX2NvcmVfZGV2X2lkZW50aXR5IHtcbiBcdF9fbGUzMiBpbnRyX2NvYWxfbXVsdDtcbiBcdF9fbGUzMiBpbnRyX2NvYWxfZGl2O1xuIFx0X19sZTE2IHZpZl90eXBlc1tQRFNfREVWX1RZUEVfTUFYXTtcbitcdF9fbGUxNiBtYXhfZndfc2xvdHM7XG4rXHR1OCAgICAgcnN2ZDJbNl07XG4rXHRfX2xlNjQgY2FwYWJpbGl0aWVzO1xuIH07XG4gXG4gI2RlZmluZSBQRFNfQ09SRV9JREVOVElUWV9WRVJTSU9OXzFcdDFcbisjZGVmaW5lIFBEU19DT1JFX0lERU5USVRZX1ZFUlNJT05fMlx0MlxuIFxuIC8qKlxuICAqIHN0cnVjdCBwZHNfY29yZV9kZXZfaWRlbnRpZnlfY21kIC0gRHJpdmVyL2RldmljZSBpZGVudGlmeSBjb21tYW5kXG5AQCAtMjc1LDExICszMDIsMjAgQEAgZW51bSBwZHNfY29yZV9md19jb250cm9sX29wZXIge1xuIFx0UERTX0NPUkVfRldfR0VUX0xJU1QgICAgICAgICAgICAgICA9IDcsXG4gfTtcbiBcbisvKipcbisgKiBlbnVtIHBkc19jb3JlX2Z3X3Nsb3QgLSBGaXJtd2FyZSBzbG90IGlkZW50aWZpZXJzXG4rICogQFBEU19DT1JFX0ZXX1NMT1RfSU5WQUxJRDogTGV0IGZpcm13YXJlIHNlbGVjdCBzbG90IGJhc2VkIG9uIHBhY2thZ2UgbWV0YWRhdGFcbisgKiBAUERTX0NPUkVfRldfU0xPVF9BOiAgICAgICBQcmltYXJ5IGZpcm13YXJlIHNsb3QgQVxuKyAqIEBQRFNfQ09SRV9GV19TTE9UX0I6ICAgICAgIFByaW1hcnkgZmlybXdhcmUgc2xvdCBCXG4rICogQFBEU19DT1JFX0ZXX1NMT1RfR09MRDogICAgR29sZC9yZWNvdmVyeSBmaXJtd2FyZSBzbG90XG4rICogQFBEU19DT1JFX0ZXX1NMT1RfTUFYOiAgICAgU2VudGluZWwgdmFsdWUgaW5kaWNhdGluZyBubyBzbG90IHJlc29sdmVkXG4rICovXG4gZW51bSBwZHNfY29yZV9md19zbG90IHtcbiBcdFBEU19DT1JFX0ZXX1NMT1RfSU5WQUxJRCAgICA9IDAsXG4gXHRQRFNfQ09SRV9GV19TTE9UX0FcdCAgICA9IDEsXG4gXHRQRFNfQ09SRV9GV19TTE9UX0IgICAgICAgICAgPSAyLFxuIFx0UERTX0NPUkVfRldfU0xPVF9HT0xEICAgICAgID0gMyxcbitcdFBEU19DT1JFX0ZXX1NMT1RfTUFYICAgICAgICA9IDB4ZmYsXG4gfTtcbiBcbiAvKipcbkBAIC00NDYsNiArNDgyLDQyMyBAQCBzdHJ1Y3QgcGRzX2NvcmVfdmZfY3RybF9jb21wIHtcbiBcdHU4XHRzdGF0dXM7XG4gfTtcbiBcbisvKipcbisgKiBzdHJ1Y3QgcGRzX2NvcmVfc2VuZF9wa2dfZGF0YV9jbWQgLSBTZW5kIHBhY2thZ2UgZGF0YSBjb21tYW5kXG4rICogQG9wY29kZTogT3Bjb2RlIFBEU19DT1JFX0NNRF9TRU5EX1BLR19EQVRBXG4rICogQHZlcjogRHJpdmVyJ3MgbWF4IHN1cHBvcnQgdmVyc2lvbiBvZiB0aGlzIGNvbW1hbmRcbisgKiBAdG90YWxfbGVuOiBUb3RhbCBsZW5ndGggb2YgdGhlIHBhY2thZ2UgZGF0YVxuKyAqIEBvZmZzZXQ6IE9mZnNldCBpbiB0aGUgcGFja2FnZSBkYXRhLCBub24temVybyBpZiBtdWx0aXBsZSBjb21tYW5kcyBhcmVcbisgKlx0ICAgIG5lZWRlZCBmb3Igc2VuZGluZyB0aGUgcGFja2FnZSBkYXRhXG4rICogQGRhdGFfbGVuOiBMZW5ndGggb2YgZGF0YSBzdG9yZWQgYXQgZGF0YV9wYVxuKyAqIEBkYXRhX3BhOiBEYXRhIHBoeXNpY2FsIGFkZHJlc3MgZm9yIERNQSB0byBkZXZpY2VcbisgKlxuKyAqIFRoZSBwYWNrYWdlIGRhdGEgbWF5IGJlIHRvbyBsYXJnZSB0byBzdG9yZSBpbiBhIHNpbmdsZSBidWZmZXIsIHNvIG11bHRpcGxlXG4rICogUERTX0NPUkVfQ01EX1NFTkRfUEtHX0RBVEEgZGV2Y21kcyBtYXkgYmUgbmVlZGVkLlxuKyAqL1xuK3N0cnVjdCBwZHNfY29yZV9zZW5kX3BrZ19kYXRhX2NtZCB7XG4rXHR1OCBvcGNvZGU7XG4rXHR1OCB2ZXI7XG4rXHRfX2xlMTYgdG90YWxfbGVuO1xuK1x0X19sZTE2IG9mZnNldDtcbitcdF9fbGUxNiBkYXRhX2xlbjtcbitcdF9fbGU2NCBkYXRhX3BhO1xuK307XG4rXG4rLyoqXG4rICogc3RydWN0IHBkc19jb3JlX3NlbmRfcGtnX2RhdGFfY29tcCAtIFNlbmQgcGFja2FnZSBkYXRhIGNvbXBsZXRpb25cbisgKiBAc3RhdHVzOiBTdGF0dXMgb2YgdGhlIGNvbW1hbmQgKGVudW0gcGRzX2NvcmVfc3RhdHVzX2NvZGUpXG4rICogQHZlcjogRGV2aWNlJ3MgbWF4IHN1cHBvcnRlZCB2ZXJzaW9uIG9mIHRoaXMgY29tbWFuZFxuKyAqIEByc3ZkOiBXb3JkIGJvdW5kYXJ5IHBhZGRpbmdcbisgKi9cbitzdHJ1Y3QgcGRzX2NvcmVfc2VuZF9wa2dfZGF0YV9jb21wIHtcbitcdHU4IHN0YXR1cztcbitcdHU4IHZlcjtcbitcdHU4IHJzdmRbMl07XG4rfTtcbitcbisvKipcbisgKiBzdHJ1Y3QgcGRzX2NvcmVfY29tcG9uZW50X3RibCAtIENvbXBvbmVudCB0YWJsZSBkZXRhaWxzXG4rICogQGNvbXBhcmlzb25fc3RhbXA6IENvbXBhcmlzb24gc3RhbXAgdXNlZCBmb3IgY29tcG9uZW50IHZlcnNpb24gY2hlY2tzXG4rICogQGNsYXNzaWZpY2F0aW9uOiBWZW5kb3Igc3BlY2lmaWMgY2xhc3NpZmljYXRpb24gaW5mb1xuKyAqIEBpZGVudGlmaWVyOiBDb21wb25lbnQncyBJRFxuKyAqIEB0cmFuc2Zlcl9mbGFnOiBQYXJ0IG9mIHRoZSBjb21wb25lbnQgdGFibGUgdGhpcyByZXF1ZXN0IHJlcHJlc2VudHNcbisgKiBAdmVyc2lvbl9zdHJfdHlwZTogVGhlIHR5cGVzIG9mIHN0cmluZ3MgdXNlZFxuKyAqIEB2ZXJzaW9uX3N0cl9sZW46IExlbmd0aCBvZiBAdmVyc2lvbl9zdHJcbisgKiBAdmVyc2lvbl9zdHI6IENvbXBvbmVudCB2ZXJzaW9uIGluZm9ybWF0aW9uXG4rICovXG4rc3RydWN0IHBkc19jb3JlX2NvbXBvbmVudF90Ymwge1xuK1x0X19sZTMyIGNvbXBhcmlzb25fc3RhbXA7XG4rXHRfX2xlMTYgY2xhc3NpZmljYXRpb247XG4rXHRfX2xlMTYgaWRlbnRpZmllcjtcbitcdHU4ICAgICB0cmFuc2Zlcl9mbGFnO1xuK1x0dTggICAgIHZlcnNpb25fc3RyX3R5cGU7XG4rXHR1OCAgICAgdmVyc2lvbl9zdHJfbGVuO1xuK1x0dTggICAgIHZlcnNpb25fc3RyW107XG4rfTtcbitcbisvKipcbisgKiBzdHJ1Y3QgcGRzX2NvcmVfc2VuZF9jb21wb25lbnRfdGJsX2NtZCAtIFNlbmQgY29tcG9uZW50IHRhYmxlIGNvbW1hbmRcbisgKiBAb3Bjb2RlOiBPcGNvZGUgUERTX0NPUkVfQ01EX1NFTkRfQ09NUE9ORU5UX1RCTFxuKyAqIEB2ZXI6IERyaXZlcidzIG1heCBzdXBwb3J0IHZlcnNpb24gb2YgdGhpcyBjb21tYW5kXG4rICogQHNsb3RfaWQ6IGVudW0gcGRzX2NvcmVfZndfc2xvdFxuKyAqIEByc3ZkOiBXb3JkIGJvdW5kYXJ5IHBhZGRpbmdcbisgKlxuKyAqIEV4cGVjdHMgdG8gZmluZCBjb21wb25lbnQgdGFibGUgaW5mbyAoc3RydWN0IHBkc19jb3JlX2NvbXBvbmVudF90YmwpXG4rICogaW4gY21kX3JlZ3MtXHUwMDNlZGF0YS4gIERyaXZlciBzaG91bGQga2VlcCB0aGUgZGV2Y21kIGludGVyZmFjZSBsb2NrZWRcbisgKiB3aGlsZSBwcmVwYXJpbmcgdGhlIGNvbXBvbmVudCB0YWJsZSBpbmZvLlxuKyAqL1xuK3N0cnVjdCBwZHNfY29yZV9zZW5kX2NvbXBvbmVudF90YmxfY21kIHtcbitcdHU4IG9wY29kZTtcbitcdHU4IHZlcjtcbitcdHU4IHNsb3RfaWQ7XG4rXHR1OCByc3ZkO1xuK307XG4rXG4rZW51bSBwZHNfY29yZV9jb21wb25lbnRfcmVzcF9jb2RlIHtcbitcdFBEU19DT1JFX0NPTVBPTkVOVF9WQUxJRCA9IDB4MCxcbitcdFBEU19DT1JFX0NPTVBPTkVOVF9TVEFNUF9JREVOVElDQUwgPSAweDEsXG4rXHRQRFNfQ09SRV9DT01QT05FTlRfU1RBTVBfTE9XRVIgPSAweDIsXG4rXHRQRFNfQ09SRV9DT01QT05FTlRfU1RBTVBfT1JfVkVSU0lPTl9JTlZBTElEID0gMHgzLFxuK1x0UERTX0NPUkVfQ09NUE9ORU5UX0NPTkZMSUNUID0gMHg0LFxuK1x0UERTX0NPUkVfQ09NUE9ORU5UX1BSRVJFUVNfTk9UX01FVCA9IDB4NSxcbitcdFBEU19DT1JFX0NPTVBPTkVOVF9OT1RfU1VQUE9SVEVEID0gMHg2LFxuK1x0UERTX0NPUkVfQ09NUE9ORU5UX0ZXX1RZUEVfSU5WQUxJRCA9IDB4ZDAsXG4rfTtcbitcbisvKipcbisgKiBzdHJ1Y3QgcGRzX2NvcmVfc2VuZF9jb21wb25lbnRfdGJsX2NvbXAgLSBTZW5kIGNvbXBvbmVudCB0YWJsZSBjb21wbGV0aW9uXG4rICogQHN0YXR1czogU3RhdHVzIG9mIHRoZSBjb21tYW5kIChlbnVtIHBkc19jb3JlX3N0YXR1c19jb2RlKVxuKyAqIEB2ZXI6IERldmljZSdzIG1heCBzdXBwb3J0ZWQgdmVyc2lvbiBvZiB0aGlzIGNvbW1hbmRcbisgKiBAY29tcGxldGlvbl9jb2RlOiBDb21wb25lbnQgY29tcGxldGlvbiBjb2RlXG4rICogQHJlc3BvbnNlOiBDb21wb25lbnQgcmVzcG9uc2VcbisgKiBAcmVzcG9uc2VfY29kZTogQ29tcG9uZW50IHJlc3BvbnNlIGNvZGVcbisgKiBAc2xvdF9pZDogQWN0dWFsIHNsb3RfaWQgb2YgdGhlIGNvbXBvbmVudCAoZW51bSBwZHNfY29yZV9md19zbG90KVxuKyAqIEByc3ZkOiBXb3JkIGJvdW5kYXJ5IHBhZGRpbmdcbisgKi9cbitzdHJ1Y3QgcGRzX2NvcmVfc2VuZF9jb21wb25lbnRfdGJsX2NvbXAge1xuK1x0dTggc3RhdHVzO1xuK1x0dTggdmVyO1xuK1x0dTggY29tcGxldGlvbl9jb2RlO1xuK1x0dTggcmVzcG9uc2U7XG4rXHR1OCByZXNwb25zZV9jb2RlO1xuK1x0dTggc2xvdF9pZDtcbitcdHU4IHJzdmRbMl07XG4rfTtcbitcbisvKipcbisgKiBlbnVtIHBkc19jb3JlX3NlbmRfY29tcG9uZW50X29wIC0gUERTX0NPUkVfQ01EX1NFTkRfQ09NUE9ORU5UIG9wZXJhdGlvblxuKyAqIEBQRFNfQ09SRV9TRU5EX0NPTVBPTkVOVF9TVEFSVDogSW5pdGlhbCBvcGVyYXRpb24gdG8gc3RhcnQgdHJhbnNmZXJcbisgKiBAUERTX0NPUkVfU0VORF9DT01QT05FTlRfU1RBVFVTOiBTdWJzZXF1ZW50IGNhbGxzIHRvIGNoZWNrIG9uIHN0YXR1c1xuKyAqL1xuK2VudW0gcGRzX2NvcmVfc2VuZF9jb21wb25lbnRfb3Age1xuK1x0UERTX0NPUkVfU0VORF9DT01QT05FTlRfU1RBUlQgPSAwLFxuK1x0UERTX0NPUkVfU0VORF9DT01QT05FTlRfU1RBVFVTID0gMSxcbit9O1xuK1xuKyNkZWZpbmUgUERTX0NPUkVfRldfQ09NUE9ORU5UX0lEX0lOVkFMSUQgMHhGRkZGXG4rLyoqXG4rICogc3RydWN0IHBkc19jb3JlX2ZsYXNoX2NvbXBvbmVudCAtIENvbXBvbmVudCBkZXRhaWxzXG4rICogQGNvbXBhcmlzb25fc3RhbXA6IENvbXBhcmlzb24gc3RhbXAgdXNlZCBmb3IgY29tcG9uZW50IHZlcnNpb24gY2hlY2tzXG4rICogQGltYWdlX3NpemU6IENvbXBvbmVudCBpbWFnZSBzaXplXG4rICogQGNsYXNzaWZpY2F0aW9uOiBWZW5kb3Igc3BlY2lmaWMgY2xhc3NpZmljYXRpb24gaW5mb1xuKyAqIEBpZGVudGlmaWVyOiBDb21wb25lbnQncyBJRFxuKyAqIEBvcHRpb25zOiBDb21wb25lbnQgb3B0aW9uc1xuKyAqIEByc3ZkOiBXb3JkIGJvdW5kYXJ5IHBhZGRpbmdcbisgKiBAdmVyc2lvbl9zdHJfdHlwZTogVGhlIHR5cGVzIG9mIHN0cmluZ3MgdXNlZFxuKyAqIEB2ZXJzaW9uX3N0cl9sZW46IExlbmd0aCBvZiBAdmVyc2lvbl9zdHJcbisgKiBAdmVyc2lvbl9zdHI6IENvbXBvbmVudCB2ZXJzaW9uIGluZm9ybWF0aW9uXG4rICovXG4rc3RydWN0IHBkc19jb3JlX2ZsYXNoX2NvbXBvbmVudCB7XG4rXHRfX2xlMzIgY29tcGFyaXNvbl9zdGFtcDtcbitcdF9fbGUzMiBpbWFnZV9zaXplO1xuK1x0X19sZTE2IGNsYXNzaWZpY2F0aW9uO1xuK1x0X19sZTE2IGlkZW50aWZpZXI7XG4rXHRfX2xlMTYgb3B0aW9ucztcbitcdHU4IHJzdmRbM107XG4rXHR1OCB2ZXJzaW9uX3N0cl90eXBlO1xuK1x0dTggdmVyc2lvbl9zdHJfbGVuO1xuK1x0dTggdmVyc2lvbl9zdHJbXTtcbit9O1xuK1xuKy8qKlxuKyAqIHN0cnVjdCBwZHNfY29yZV9zZW5kX2NvbXBvbmVudF9jbWQgLSBTZW5kIGNvbXBvbmVudCBjb21tYW5kXG4rICogQG9wY29kZTogT3Bjb2RlIFBEU19DT1JFX0NNRF9TRU5EX0NPTVBPTkVOVFxuKyAqIEB2ZXI6IERyaXZlcidzIG1heCBzdXBwb3J0ZWQgdmVyc2lvbiBvZiB0aGlzIGNvbW1hbmRcbisgKiBAc2xvdF9pZDogZW51bSBwZHNfY29yZV9md19zbG90XG4rICogQG9wZXJhdGlvbjogZW51bSBwZHNfY29yZV9zZW5kX2NvbXBvbmVudF9vcFxuKyAqIEBvZmZzZXQ6IE9mZnNldCBpbnRvIHRoZSBjb21wb25lbnQsIG5vbi16ZXJvIGlmIG11bHRpcGxlIGNvbW1hbmRzXG4rICpcdCAgICBhcmUgbmVlZGVkIGZvciBhIHNpbmdsZSBjb21wb25lbnRcbisgKiBAZGF0YV9sZW46IExlbmd0aCBvZiB0aGlzIHBhcnQgb2YgdGhlIGNvbXBvbmVudCBzdG9yZWQgYXQgQGRhdGFfcGFcbisgKiBAcnN2ZDogV29yZCBib3VuZGFyeSBwYWRkaW5nXG4rICogQGRhdGFfcGE6IERNQSBhZGRyZXNzIG9mIHRoZSBjb21wb25lbnRcbisgKlxuKyAqIEEgY29tcG9uZW50IG1heSBiZSB0b28gbGFyZ2UgdG8gc3RvcmUgaW4gYSBzaW5nbGUgYnVmZmVyLCBzbyBtdWx0aXBsZVxuKyAqIFBEU19DT1JFX0NNRF9TRU5EX0NPTVBPTkVOVCBkZXZjbWRzIG1heSBiZSBuZWVkZWQuXG4rICpcbisgKiBFeHBlY3RzIHRvIGZpbmQgZmxhc2ggY29tcG9uZW50IGluZm8gKHN0cnVjdCBwZHNfY29yZV9mbGFzaF9jb21wb25lbnQpXG4rICogaW4gY21kX3JlZ3MtXHUwMDNlZGF0YS4gRHJpdmVyIHNob3VsZCBrZWVwIHRoZSBkZXZjbWQgaW50ZXJmYWNlIGxvY2tlZFxuKyAqIHdoaWxlIHByZXBhcmluZyBhbmQgc2VuZGluZyB0aGUgZmxhc2ggY29tcG9uZW50IGluZm8uXG4rICovXG4rc3RydWN0IHBkc19jb3JlX3NlbmRfY29tcG9uZW50X2NtZCB7XG4rXHR1OCBvcGNvZGU7XG4rXHR1OCB2ZXI7XG4rXHR1OCBzbG90X2lkO1xuK1x0dTggb3BlcmF0aW9uO1xuK1x0X19sZTMyIG9mZnNldDtcbitcdF9fbGUzMiBkYXRhX2xlbjtcbitcdHU4IHJzdmRbNF07XG4rXHRfX2xlNjQgZGF0YV9wYTtcbit9O1xuK1xuKy8qKlxuKyAqIHN0cnVjdCBwZHNfY29yZV9zZW5kX2NvbXBvbmVudF9jb21wIC0gU2VuZCBjb21wb25lbnQgY29tcGxldGlvblxuKyAqIEBzdGF0dXM6IFN0YXR1cyBvZiB0aGUgY29tbWFuZCAoZW51bSBwZHNfY29yZV9zdGF0dXNfY29kZSlcbisgKiBAdmVyOiBEZXZpY2UncyBtYXggc3VwcG9ydGVkIHZlcnNpb24gb2YgdGhpcyBjb21tYW5kXG4rICogQGNvbXBsZXRpb25fY29kZTogQ29tcGxldGlvbiBjb2RlXG4rICogQGNvbXBhdF9yZXNwb25zZTogQ29tcGF0aWJpbGl0eSByZXNwb25zZSAoMCA9IENvbXBvbmVudCBjYW4gYmUgdXBkYXRlZClcbisgKiBAY29tcGF0X3Jlc3BvbnNlX2NvZGU6IENvbXBhdGliaWxpdHkgcmVzcG9uc2UgY29kZVxuKyAqIEByc3ZkOiBXb3JkIGJvdW5kYXJ5IHBhZGRpbmdcbisgKi9cbitzdHJ1Y3QgcGRzX2NvcmVfc2VuZF9jb21wb25lbnRfY29tcCB7XG4rXHR1OCBzdGF0dXM7XG4rXHR1OCB2ZXI7XG4rXHR1OCBjb21wbGV0aW9uX2NvZGU7XG4rXHR1OCBjb21wYXRfcmVzcG9uc2U7XG4rXHR1OCBjb21wYXRfcmVzcG9uc2VfY29kZTtcbitcdHU4IHJzdmRbM107XG4rfTtcbitcbisvKipcbisgKiBlbnVtIHBkc19jb3JlX2Z3X2NvbXBvbmVudF90eXBlIC0gRmlybXdhcmUgY29tcG9uZW50IHR5cGVcbisgKiBAUERTX0NPUkVfRldfVFlQRV9VTktOT1dOOiBVbmtub3duIGNvbXBvbmVudCB0eXBlXG4rICogQFBEU19DT1JFX0ZXX1RZUEVfTUFJTjogTWFpbiBmaXJtd2FyZVxuKyAqIEBQRFNfQ09SRV9GV19UWVBFX0JPT1Q6IEJvb3QgbG9hZGVyXG4rICogQFBEU19DT1JFX0ZXX1RZUEVfQ1BMRDogQ1BMRCBmaXJtd2FyZVxuKyAqIEBQRFNfQ09SRV9GV19UWVBFX1NFQ1VSRTogU2VjdXJlIGZpcm13YXJlXG4rICogQFBEU19DT1JFX0ZXX1RZUEVfRlBHQTogRlBHQSBjb25maWd1cmF0aW9uXG4rICogQFBEU19DT1JFX0ZXX1RZUEVfU1VDX01BSU46IFN5c3RlbSBVbml0IENvbnRyb2xsZXIgZmlybXdhcmVcbisgKiBAUERTX0NPUkVfRldfVFlQRV9TVUNfQk9PVDogU3lzdGVtIFVuaXQgQ29udHJvbGxlciBib290bG9hZGVyXG4rICogQFBEU19DT1JFX0ZXX1RZUEVfVUJPT1Q6IFUtQm9vdCBib290bG9hZGVyXG4rICpcbisgKiBHb2xkL3JlY292ZXJ5IHZhcmlhbnRzIGFyZSBpZGVudGlmaWVkIGJ5IHNsb3RfaWQgPT0gUERTX0NPUkVfRldfU0xPVF9HT0xEXG4rICogYW5kIHJlcG9ydGVkIHdpdGggYSBcIi5nb2xkXCIgc3VmZml4IChlLmcuLCBmdy5nb2xkKS5cbisgKi9cbitlbnVtIHBkc19jb3JlX2Z3X2NvbXBvbmVudF90eXBlIHtcbitcdFBEU19DT1JFX0ZXX1RZUEVfVU5LTk9XTiAgID0gMCxcbitcdFBEU19DT1JFX0ZXX1RZUEVfTUFJTiAgICAgID0gMSxcbitcdFBEU19DT1JFX0ZXX1RZUEVfQk9PVCAgICAgID0gMixcbitcdFBEU19DT1JFX0ZXX1RZUEVfQ1BMRCAgICAgID0gMyxcbitcdFBEU19DT1JFX0ZXX1RZUEVfU0VDVVJFICAgID0gNCxcbitcdFBEU19DT1JFX0ZXX1RZUEVfRlBHQSAgICAgID0gNSxcbitcdFBEU19DT1JFX0ZXX1RZUEVfU1VDX01BSU4gID0gNixcbitcdFBEU19DT1JFX0ZXX1RZUEVfU1VDX0JPT1QgID0gNyxcbitcdFBEU19DT1JFX0ZXX1RZUEVfVUJPT1QgICAgID0gOCxcbit9O1xuK1xuKy8qKlxuKyAqIGVudW0gcGRzX2NvcmVfY29tcG9uZW50X2luZm9fZmxhZ3MgLSBDb21wb25lbnQgaW5mbyBmbGFnc1xuKyAqIEBQRFNfQ09SRV9GV19DT01QT05FTlRfSU5GT19GX1JVTk5JTkc6IENvbXBvbmVudCBpcyBjdXJyZW50bHkgcnVubmluZ1xuKyAqIEBQRFNfQ09SRV9GV19DT01QT05FTlRfSU5GT19GX1NUQVJUVVA6IENvbXBvbmVudCB2ZXJzaW9uIG9uIG5leHQgRlcgYm9vdFxuKyAqIEBQRFNfQ09SRV9GV19DT01QT05FTlRfSU5GT19GX0ZJWEVEOiBDb21wb25lbnQgaXMgZml4ZWQgYW5kIGNhbm5vdCBiZSB1cGRhdGVkXG4rICogQFBEU19DT1JFX0ZXX0NPTVBPTkVOVF9JTkZPX0ZfVVBEQVRFX0JZX05BTUU6IENvbXBvbmVudCBjYW4gYmUgdXBkYXRlZFxuKyAqXHRieSBuYW1lXG4rICovXG4rZW51bSBwZHNfY29yZV9jb21wb25lbnRfaW5mb19mbGFncyB7XG4rXHRQRFNfQ09SRV9GV19DT01QT05FTlRfSU5GT19GX1JVTk5JTkcgPSBCSVQoMCksXG4rXHRQRFNfQ09SRV9GV19DT01QT05FTlRfSU5GT19GX1NUQVJUVVAgPSBCSVQoMSksXG4rXHRQRFNfQ09SRV9GV19DT01QT05FTlRfSU5GT19GX0ZJWEVEID0gQklUKDIpLFxuK1x0UERTX0NPUkVfRldfQ09NUE9ORU5UX0lORk9fRl9VUERBVEVfQllfTkFNRSA9IEJJVCgzKSxcbit9O1xuK1xuKy8qKlxuKyAqIHN0cnVjdCBwZHNfY29yZV9md19jb21wb25lbnRfaW5mbyAtIEdFVF9DT01QT05FTlRfSU5GTyBlbnRyeVxuKyAqIEBuYW1lOiBDb21wb25lbnQncyBuYW1lXG4rICogQGNvbXBvbmVudF90eXBlOiBlbnVtIHBkc19jb3JlX2Z3X2NvbXBvbmVudF90eXBlXG4rICogQHJzdmQ6IFdvcmQgYm91bmRhcnkgcGFkZGluZ1xuKyAqIEBmbGFnczogZW51bSBwZHNfY29yZV9jb21wb25lbnRfaW5mb19mbGFnc1xuKyAqIEBpZGVudGlmaWVyOiBDb21wb25lbnQncyBpZGVudGlmaWVyXG4rICogQHNsb3RfaWQ6IENvbXBvbmVudCdzIHNsb3QgaWRlbnRpZmllclxuKyAqIEB2ZXJzaW9uOiBDb21wb25lbnQncyB2ZXJzaW9uXG4rICovXG4rc3RydWN0IHBkc19jb3JlX2Z3X2NvbXBvbmVudF9pbmZvIHtcbisjZGVmaW5lIFBEU19DT1JFX0ZXX0NPTVBPTkVOVF9OQU1FX0JVRkxFTiAyNFxuK1x0Y2hhciBuYW1lW1BEU19DT1JFX0ZXX0NPTVBPTkVOVF9OQU1FX0JVRkxFTl07XG4rXHR1OCBjb21wb25lbnRfdHlwZTtcbitcdHU4IHJzdmRbM107XG4rXHRfX2xlMTYgZmxhZ3M7XG4rXHR1OCBpZGVudGlmaWVyO1xuK1x0dTggc2xvdF9pZDtcbisjZGVmaW5lIFBEU19DT1JFX0ZXX0NPTVBPTkVOVF9WRVJfQlVGTEVOIDMyXG4rXHRjaGFyIHZlcnNpb25bUERTX0NPUkVfRldfQ09NUE9ORU5UX1ZFUl9CVUZMRU5dO1xuK307XG4rXG4rI2RlZmluZSBQRFNfQ09SRV9GV19DT01QT05FTlRfTElTVF9MRU5cdCgoUERTX1BBR0VfU0laRSAtIDgpIC8gXFxcbitcdFx0c2l6ZW9mKHN0cnVjdCBwZHNfY29yZV9md19jb21wb25lbnRfaW5mbykpXG4rXG4rLyoqXG4rICogc3RydWN0IHBkc19jb3JlX2NvbXBvbmVudF9saXN0X2luZm8gLSBHRVRfQ09NUE9ORU5UX0lORk8gY29tcGxldGlvbiBkYXRhXG4rICogQG51bV9jb21wb25lbnRzOiBOdW1iZXIgb2YgdmFsaWQgY29tcG9uZW50c1xuKyAqIEByc3ZkOiBXb3JkIGJvdW5kYXJ5IHBhZGRpbmdcbisgKiBAaW5mbzogTGlzdCBvZiB2YWxpZCBjb21wb25lbnRzXG4rICovXG4rc3RydWN0IHBkc19jb3JlX2NvbXBvbmVudF9saXN0X2luZm8ge1xuK1x0dTggbnVtX2NvbXBvbmVudHM7XG4rXHR1OCByc3ZkWzddO1xuK1x0c3RydWN0IHBkc19jb3JlX2Z3X2NvbXBvbmVudF9pbmZvIGluZm9bUERTX0NPUkVfRldfQ09NUE9ORU5UX0xJU1RfTEVOXTtcbit9O1xuK1xuKy8qKlxuKyAqIHN0cnVjdCBwZHNfY29yZV9nZXRfY29tcG9uZW50X2luZm9fY21kIC0gR0VUX0NPTVBPTkVOVF9JTkZPIGNvbW1hbmRcbisgKiBAb3Bjb2RlOiBQRFNfQ09SRV9DTURfR0VUX0NPTVBPTkVOVF9JTkZPXG4rICogQHZlcjogRHJpdmVyJ3MgbWF4IHN1cHBvcnRlZCB2ZXJzaW9uIG9mIHRoaXMgY29tbWFuZFxuKyAqIEBkYXRhX2xlbjogTGVuZ3RoIG9mIGRhdGEgYXQgZGF0YV9wYVxuKyAqIEByc3ZkOiBXb3JkIGJvdW5kYXJ5IHBhZGRpbmdcbisgKiBAZGF0YV9wYTogRE1BIGFkZHJlc3Mgb2YgZGF0YVxuKyAqXG4rICogRlcgcG9wdWxhdGVzIHN0cnVjdCBwZHNfY29yZV9jb21wb25lbnRfbGlzdF9pbmZvIHBvaW50ZWQgdG8gYnkgQGRhdGFfcGFcbisgKi9cbitzdHJ1Y3QgcGRzX2NvcmVfZ2V0X2NvbXBvbmVudF9pbmZvX2NtZCB7XG4rXHR1OCBvcGNvZGU7XG4rXHR1OCB2ZXI7XG4rXHRfX2xlMTYgZGF0YV9sZW47XG4rXHR1OCByc3ZkWzRdO1xuK1x0X19sZTY0IGRhdGFfcGE7XG4rfTtcbitcbisvKipcbisgKiBzdHJ1Y3QgcGRzX2NvcmVfZ2V0X2NvbXBvbmVudF9pbmZvX2NvbXAgLSBHRVRfQ09NUE9ORU5UX0lORk8gY29tcGxldGlvblxuKyAqIEBzdGF0dXM6IGVudW0gcGRzX2NvcmVfc3RhdHVzX2NvZGVcbisgKiBAdmVyOiBEZXZpY2UncyBtYXggc3VwcG9ydGVkIHZlcnNpb24gb2YgdGhpcyBjb21tYW5kXG4rICogQHJzdmQ6IFdvcmQgYm91bmRhcnkgcGFkZGluZ1xuKyAqL1xuK3N0cnVjdCBwZHNfY29yZV9nZXRfY29tcG9uZW50X2luZm9fY29tcCB7XG4rXHR1OCBzdGF0dXM7XG4rXHR1OCB2ZXI7XG4rXHR1OCByc3ZkWzJdO1xuK307XG4rXG4rLyoqXG4rICogc3RydWN0IHBkc19jb3JlX2ZpbmFsaXplX3VwZGF0ZV9jbWQgLSBGSU5BTElaRV9VUERBVEUgY29tbWFuZFxuKyAqIEBvcGNvZGU6IFBEU19DT1JFX0NNRF9GSU5BTElaRV9VUERBVEVcbisgKiBAdmVyOiBEcml2ZXIncyBtYXggc3VwcG9ydCB2ZXJzaW9uIG9mIHRoaXMgY29tbWFuZFxuKyAqIEByc3ZkOiBXb3JkIGJvdW5kYXJ5IHBhZGRpbmdcbisgKlxuKyAqIERyaXZlciBzZW5kcyBhdCB0aGUgZW5kIG9mIHVwZGF0aW5nIGFsbCBjb21wb25lbnRzIHRvIGZpbmFsaXplIHRoZSB1cGRhdGVcbisgKi9cbitzdHJ1Y3QgcGRzX2NvcmVfZmluYWxpemVfdXBkYXRlX2NtZCB7XG4rXHR1OCBvcGNvZGU7XG4rXHR1OCB2ZXI7XG4rXHR1OCByc3ZkWzJdO1xuK307XG4rXG4rLyoqXG4rICogc3RydWN0IHBkc19jb3JlX2ZpbmFsaXplX3VwZGF0ZV9jb21wIC0gRklOQUxJWkVfVVBEQVRFIGNvbXBsZXRpb25cbisgKiBAc3RhdHVzOiBlbnVtIHBkc19jb3JlX3N0YXR1c19jb2RlXG4rICogQHZlcjogRGV2aWNlJ3MgbWF4IHN1cHBvcnRlZCB2ZXJzaW9uIG9mIHRoaXMgY29tbWFuZFxuKyAqIEByc3ZkOiBXb3JkIGJvdW5kYXJ5IHBhZGRpbmdcbisgKi9cbitzdHJ1Y3QgcGRzX2NvcmVfZmluYWxpemVfdXBkYXRlX2NvbXAge1xuK1x0dTggc3RhdHVzO1xuK1x0dTggdmVyO1xuK1x0dTggcnN2ZFsyXTtcbit9O1xuK1xuKy8qKlxuKyAqIHN0cnVjdCBwZHNfY29yZV9tYXRjaF9yZWNvcmRfZGVzY19jbWQgLSBNQVRDSF9SRUNPUkRfREVTQyBjb21tYW5kXG4rICogQG9wY29kZTogUERTX0NPUkVfQ01EX01BVENIX1JFQ09SRF9ERVNDXG4rICogQHZlcjogRHJpdmVyJ3MgbWF4IHN1cHBvcnRlZCB2ZXJzaW9uIG9mIHRoaXMgY29tbWFuZFxuKyAqIEB0eXBlOiBQTERNIERlc2NyaXB0b3IgSWRlbnRpZmllciBUeXBlXG4rICogQHNpemU6IExlbmd0aCBvZiB0aGUgRGVzY3JpcHRvciBJZGVudGlmaWVyIFZhbHVlXG4rICogQHJzdmQ6IFdvcmQgYm91bmRhcnkgcGFkZGluZ1xuKyAqXG4rICogRXhwZWN0cyB0byBmaW5kIHRoZSBEZXNjcmlwdG9yIElkZW50aWZpZXIgRGF0YSBpbiBjbWRfcmVncy1cdTAwM2VkYXRhLiBEcml2ZXJcbisgKiBzaG91bGQga2VlcCB0aGUgZGV2Y21kIGludGVyZmFjZSBsb2NrZWQgd2hpbGUgcHJlcGFyaW5nIGFuZCBzZW5kaW5nIHRoaXNcbisgKiBjb21tYW5kLlxuKyAqL1xuK3N0cnVjdCBwZHNfY29yZV9tYXRjaF9yZWNvcmRfZGVzY19jbWQge1xuK1x0dTggb3Bjb2RlO1xuK1x0dTggdmVyO1xuK1x0X19sZTE2IHR5cGU7XG4rXHRfX2xlMTYgc2l6ZTtcbitcdHU4IHJzdmRbMl07XG4rfTtcbitcbisvKipcbisgKiBzdHJ1Y3QgcGRzX2NvcmVfbWF0Y2hfcmVjb3JkX2Rlc2NfY29tcCAtIE1BVENIX1JFQ09SRF9ERVNDIGNvbXBsZXRpb25cbisgKiBAc3RhdHVzOiBlbnVtIHBkc19jb3JlX3N0YXR1c19jb2RlXG4rICogQHZlcjogRGV2aWNlJ3MgbWF4IHN1cHBvcnRlZCB2ZXJzaW9uIG9mIHRoaXMgY29tbWFuZFxuKyAqIEBtYXRjaDogV2hldGhlciBvciBub3QgdGhlIFJlY29yZCBEZXNjcmlwdG9yIG1hdGNoZXMgdGhlIGRldmljZVxuKyAqIEByc3ZkOiBXb3JkIGJvdW5kYXJ5IHBhZGRpbmdcbisgKlxuKyAqIFdoZW4gc3RhdHVzIGlzIFBEU19SQ19TVUNDRVNTLCB0aGVuIEBtYXRjaCBpcyB2YWxpZCwgb3RoZXJ3aXNlIGl0J3NcbisgKiB1bmRlZmluZWQuXG4rICovXG4rc3RydWN0IHBkc19jb3JlX21hdGNoX3JlY29yZF9kZXNjX2NvbXAge1xuK1x0dTggc3RhdHVzO1xuK1x0dTggdmVyO1xuK1x0dTggbWF0Y2g7XG4rXHR1OCByc3ZkO1xuK307XG4rXG4rLyoqXG4rICogZW51bSBwZHNfY29yZV9ob3N0X21lbV9vcGVyIC0gSE9TVF9NRU0gc3ViLW9wZXJhdGlvbnNcbisgKiBAUERTX0NPUkVfSE9TVF9NRU1fR0VUX0NPVU5UOiBRdWVyeSBudW1iZXIgb2YgbWVtb3J5IHJlcXVlc3RzXG4rICogQFBEU19DT1JFX0hPU1RfTUVNX1FVRVJZOiAgICAgUXVlcnkgZGV0YWlscyBvZiBhIG1lbW9yeSByZXF1ZXN0XG4rICogQFBEU19DT1JFX0hPU1RfTUVNX0FERDogICAgICAgUHJvdmlkZSBhbGxvY2F0ZWQgbWVtb3J5IHRvIGZpcm13YXJlXG4rICogQFBEU19DT1JFX0hPU1RfTUVNX0RFTDogICAgICAgTm90aWZ5IGZpcm13YXJlIG9mIG1lbW9yeSBkZWFsbG9jYXRpb25cbisgKi9cbitlbnVtIHBkc19jb3JlX2hvc3RfbWVtX29wZXIge1xuK1x0UERTX0NPUkVfSE9TVF9NRU1fR0VUX0NPVU5UXHQ9IDAsXG4rXHRQRFNfQ09SRV9IT1NUX01FTV9RVUVSWVx0XHQ9IDEsXG4rXHRQRFNfQ09SRV9IT1NUX01FTV9BRERcdFx0PSAyLFxuK1x0UERTX0NPUkVfSE9TVF9NRU1fREVMXHRcdD0gMyxcbit9O1xuK1xuKy8qKlxuKyAqIHN0cnVjdCBwZHNfY29yZV9ob3N0X21lbV9jbWQgLSBIT1NUX01FTSBjb21tYW5kXG4rICogQG9wY29kZTogICAgIE9wY29kZSBQRFNfQ09SRV9DTURfSE9TVF9NRU1cbisgKiBAb3BlcjogICAgICAgT3BlcmF0aW9uIChlbnVtIHBkc19jb3JlX2hvc3RfbWVtX29wZXIpXG4rICogQGluZGV4OiAgICAgIE1lbW9yeSByZXF1ZXN0IGluZGV4IChHRVRfQ09VTlQ6IG1heF9jb3VudCwgUVVFUlk6IGluZGV4KVxuKyAqIEB0YWc6ICAgICAgICBUYWcgZm9yIHRoaXMgbWVtb3J5IHJlcXVlc3QgKEFERC9ERUwpXG4rICogQHJlYXNvbjogICAgIFJlYXNvbiBmb3IgZGVsZXRpb24gKERFTCBvbmx5KVxuKyAqIEByc3ZkOiAgICAgICBSZXNlcnZlZFxuKyAqIEBtYXhfY29udGlnOiBNYXhpbXVtIGNvbnRpZ3VvdXMgbWVtb3J5IHNpemUgKEdFVF9DT1VOVCBvbmx5KVxuKyAqIEBzaXplOiAgICAgICBTaXplIG9mIG1lbW9yeSBpbiBieXRlcyAoQUREIG9ubHkpXG4rICogQGJ1Zl9wYTogICAgIERNQSBhZGRyZXNzIG9mIG1lbW9yeSAoQUREIG9ubHkpXG4rICpcbisgKiBVbmlmaWVkIGNvbW1hbmQgZm9yIGFsbCBob3N0IG1lbW9yeSBvcGVyYXRpb25zLiBGaWVsZHMgYXJlIHJldXNlZFxuKyAqIGFjcm9zcyBvcGVyYXRpb25zIHRvIG1pbmltaXplIG9wY29kZSBzcGFjZSB1c2FnZS5cbisgKi9cbitzdHJ1Y3QgcGRzX2NvcmVfaG9zdF9tZW1fY21kIHtcbitcdHU4ICAgICBvcGNvZGU7XG4rXHR1OCAgICAgb3BlcjtcbitcdF9fbGUxNiBpbmRleDtcbitcdF9fbGUxNiB0YWc7XG4rXHR1OCAgICAgcmVhc29uO1xuK1x0dTggICAgIHJzdmQ7XG4rXHRfX2xlMzIgbWF4X2NvbnRpZztcbitcdF9fbGUzMiBzaXplO1xuK1x0X19sZTY0IGJ1Zl9wYTtcbit9O1xuK1xuKy8qKlxuKyAqIHN0cnVjdCBwZHNfY29yZV9ob3N0X21lbV9jb21wIC0gSE9TVF9NRU0gY29tcGxldGlvblxuKyAqIEBzdGF0dXM6ICAgICAgIFN0YXR1cyBvZiB0aGUgY29tbWFuZCAoZW51bSBwZHNfY29yZV9zdGF0dXNfY29kZSlcbisgKiBAb3BlcjogICAgICAgICBPcGVyYXRpb24gdGhhdCB3YXMgcGVyZm9ybWVkXG4rICogQGNvdW50OiAgICAgICAgTnVtYmVyIG9mIG1lbW9yeSByZXF1ZXN0cyAoR0VUX0NPVU5UKVxuKyAqIEBzaXplOiAgICAgICAgIFNpemUgb2YgbWVtb3J5IHJlcXVlc3QgaW4gYnl0ZXMgKFFVRVJZKVxuKyAqIEB0YWc6ICAgICAgICAgIFRhZyBmb3IgdGhpcyBtZW1vcnkgcmVxdWVzdCAoUVVFUlkvREVMKVxuKyAqIEByc3ZkOiAgICAgICAgIFJlc2VydmVkXG4rICovXG4rc3RydWN0IHBkc19jb3JlX2hvc3RfbWVtX2NvbXAge1xuK1x0dTggICAgIHN0YXR1cztcbitcdHU4ICAgICBvcGVyO1xuK1x0X19sZTE2IGNvdW50O1xuK1x0X19sZTMyIHNpemU7XG4rXHRfX2xlMTYgdGFnO1xuK1x0dTggICAgIHJzdmRbNl07XG4rfTtcbitcbiAvKlxuICAqIHVuaW9uIHBkc19jb3JlX2Rldl9jbWQgLSBPdmVybGF5IG9mIGNvcmUgZGV2aWNlIGNvbW1hbmQgc3RydWN0dXJlc1xuICAqL1xuQEAgLTQ2Miw2ICs5MTUsMTQgQEAgdW5pb24gcGRzX2NvcmVfZGV2X2NtZCB7XG4gXHRzdHJ1Y3QgcGRzX2NvcmVfdmZfc2V0YXR0cl9jbWQgICB2Zl9zZXRhdHRyO1xuIFx0c3RydWN0IHBkc19jb3JlX3ZmX2dldGF0dHJfY21kICAgdmZfZ2V0YXR0cjtcbiBcdHN0cnVjdCBwZHNfY29yZV92Zl9jdHJsX2NtZCAgICAgIHZmX2N0cmw7XG4rXG4rXHRzdHJ1Y3QgcGRzX2NvcmVfZ2V0X2NvbXBvbmVudF9pbmZvX2NtZCBnZXRfY29tcG9uZW50X2luZm87XG4rXHRzdHJ1Y3QgcGRzX2NvcmVfc2VuZF9wa2dfZGF0YV9jbWQgICAgICBzZW5kX3BrZ19kYXRhO1xuK1x0c3RydWN0IHBkc19jb3JlX3NlbmRfY29tcG9uZW50X3RibF9jbWQgc2VuZF9jb21wb25lbnRfdGJsO1xuK1x0c3RydWN0IHBkc19jb3JlX3NlbmRfY29tcG9uZW50X2NtZCAgICAgc2VuZF9jb21wb25lbnQ7XG4rXHRzdHJ1Y3QgcGRzX2NvcmVfZmluYWxpemVfdXBkYXRlX2NtZCAgICBmaW5hbGl6ZV91cGRhdGU7XG4rXHRzdHJ1Y3QgcGRzX2NvcmVfbWF0Y2hfcmVjb3JkX2Rlc2NfY21kICBtYXRjaF9yZWNvcmRfZGVzYztcbitcdHN0cnVjdCBwZHNfY29yZV9ob3N0X21lbV9jbWQgICAgICAgICAgIGhvc3RfbWVtO1xuIH07XG4gXG4gLypcbkBAIC00ODAsNiArOTQxLDE0IEBAIHVuaW9uIHBkc19jb3JlX2Rldl9jb21wIHtcbiBcdHN0cnVjdCBwZHNfY29yZV92Zl9zZXRhdHRyX2NvbXAgICB2Zl9zZXRhdHRyO1xuIFx0c3RydWN0IHBkc19jb3JlX3ZmX2dldGF0dHJfY29tcCAgIHZmX2dldGF0dHI7XG4gXHRzdHJ1Y3QgcGRzX2NvcmVfdmZfY3RybF9jb21wICAgICAgdmZfY3RybDtcbitcbitcdHN0cnVjdCBwZHNfY29yZV9nZXRfY29tcG9uZW50X2luZm9fY29tcCBnZXRfY29tcG9uZW50X2luZm87XG4rXHRzdHJ1Y3QgcGRzX2NvcmVfc2VuZF9wa2dfZGF0YV9jb21wICAgICAgc2VuZF9wa2dfZGF0YTtcbitcdHN0cnVjdCBwZHNfY29yZV9zZW5kX2NvbXBvbmVudF90YmxfY29tcCBzZW5kX2NvbXBvbmVudF90Ymw7XG4rXHRzdHJ1Y3QgcGRzX2NvcmVfc2VuZF9jb21wb25lbnRfY29tcCAgICAgc2VuZF9jb21wb25lbnQ7XG4rXHRzdHJ1Y3QgcGRzX2NvcmVfZmluYWxpemVfdXBkYXRlX2NvbXAgICAgZmluYWxpemVfdXBkYXRlO1xuK1x0c3RydWN0IHBkc19jb3JlX21hdGNoX3JlY29yZF9kZXNjX2NvbXAgIG1hdGNoX3JlY29yZF9kZXNjO1xuK1x0c3RydWN0IHBkc19jb3JlX2hvc3RfbWVtX2NvbXAgICAgICAgICAgIGhvc3RfbWVtO1xuIH07XG4gXG4gLyoqXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxMDowMzo0Ni4xOTQ3MDkzNzhaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NDU0MTc5MjQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlBhdGNoIEFuYWx5c2lzOiBQTERNIEZpcm13YXJlIFVwZGF0ZSBmb3IgQU1EL1BlbnNhbmRvIENvcmUgU21hcnROSUMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIHRoYXQgYWRkcyBQTERNIGZpcm13YXJlIHVwZGF0ZSBjYXBhYmlsaXRpZXMgdG8gdGhlIEFNRC9QZW5zYW5kbyBDb3JlIGRldmljZSBmYW1pbHksIHNwZWNpZmljYWxseSB1bmRlciB0aGUgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wZHNfY29yZS9gIGRpcmVjdG9yeS4gSXQncyBhZGRpbmcgc3VwcG9ydCBmb3IgdGhpbmdzIGxpa2UgZ2V0dGluZyBjb21wb25lbnQgaW5mbywgc2VuZGluZyBwYWNrYWdlIGRhdGEsIHNlbmRpbmcgY29tcG9uZW50IHRhYmxlcywgYW5kIGZpbmFsaXppbmcgdGhlIHVwZGF0ZSDigJMgYWxsIHRoZSBQTERNLXJlbGF0ZWQgZGV2Y21kcy4gUGx1cywgaXQncyBzZXR0aW5nIHVwIGhvc3QgbWVtb3J5IGFsbG9jYXRpb24gZm9yIHRoZSBmaXJtd2FyZSBpdHNlbGYuXG5cbkJ1dCwgaG9sZCBvbiBhIHNlY29uZC4uLiBsZXQgbWUgcmUtcmVhZCB0aGUgcHJvbXB0LiBJdCdzIGxvb2tpbmcgZm9yIGNvbmRpdGlvbnMgdG8gKm5vdCogZnV6ei4gQWgsIHRoZXJlIGl0IGlzISBcIkNvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLCBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cIiBCaW5nby5cblxuVGhlIHByb21wdCAqc3BlY2lmaWNhbGx5KiBuYW1lcyBgcGRzX2NvcmVgIGFzIGFuIGV4YW1wbGUgb2YgYSBTbWFydE5JQyBkcml2ZXIgdGhhdCdzIG9mZi1saW1pdHMgYmVjYXVzZSBpdCByZXF1aXJlcyB0aGF0IHNwZWNpZmljIGhhcmR3YXJlIHNldHVwLiBJIGRvbid0IG5lZWQgdG8gb3ZlcnRoaW5rIHRoaXMuXG5cbkp1c3QgdG8gYmUgY2VydGFpbiwgSSBxdWlja2x5IGRvdWJsZS1jaGVja2VkIHdoZXJlIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmc6IGBEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvYW1kL3Bkc19jb3JlLnJzdGAsIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvS2NvbmZpZ2AsIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGRzX2NvcmUvKmAsIGBpbmNsdWRlL2xpbnV4L3Bkcy9wZHNfY29yZV9pZi5oYC4gWWVwLCBpdCdzIGFsbCBkZWVwbHkgaW50ZXJ0d2luZWQgd2l0aCB0aGF0IHZlbmRvci1zcGVjaWZpYyBgcGRzX2NvcmVgIGRyaXZlci4gTm8gY2hhbmNlIG9mIGdldHRpbmcgdGhpcyBwYXRjaCB0byBydW4gd2l0aG91dCB0aGUgcGh5c2ljYWwgaGFyZHdhcmUsIHNvIHRoYXQncyBhICpubyogdG8gZnV6emluZy5cblxuTXkgY29uY2x1c2lvbiBpczogdGhpcyBwYXRjaCBpcyB1bnJlYWNoYWJsZSBpbiBhIHN0YW5kYXJkIGZ1enppbmcgZW52aXJvbm1lbnQgZHVlIHRvIGl0cyBkZXBlbmRlbmNlIG9uIHRoZSBBTUQvUGVuc2FuZG8gQ29yZSBTbWFydE5JQyBhbmQgdGhlcmVmb3JlIEkgbmVlZCB0byBzZXQgYFdvcnRoRnV6emluZz1mYWxzZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxMDYyLCJPdXRwdXRUb2tlbnMiOjc2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTY2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTA6MDM6NTUuNjQ4ODkxOTU2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODkwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQU1EL1BlbnNhbmRvIENvcmUgU21hcnROSUMgZHJpdmVyIChwZHNfY29yZSksIHdoaWNoIHJlcXVpcmVzIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIFRoZXJlZm9yZSwgdGhlIGNvZGUgaXMgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQU1EL1BlbnNhbmRvIENvcmUgU21hcnROSUMgZHJpdmVyIChwZHNfY29yZSksIHdoaWNoIHJlcXVpcmVzIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIFRoZXJlZm9yZSwgdGhlIGNvZGUgaXMgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowld6qn[1] Phase: Running StartedAt: 2026-07-30 10:04:07 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowld6qn[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-07-30 10:04:07 +0000 UTC FinishedAt: 2026-07-30 10:04:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}