Name: series-workflowmm44p Phase: Succeeded StartedAt: 2026-09-03 08:19:56 +0000 UTC FinishedAt: 2026-09-03 12:42:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmm44p[0] Phase: Succeeded StartedAt: 2026-09-03 08:19:56 +0000 UTC FinishedAt: 2026-09-03 09:03:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmm44p[0].run-triage Phase: Succeeded StartedAt: 2026-09-03 08:19:56 +0000 UTC FinishedAt: 2026-09-03 09:03:50 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NFC" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NFC" ], "series_id": "3f8fb361-e2bc-470c-bc0e-4883ece45c26" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "nfc_llcp_accept_unlink", "nfc_llcp_accept_dequeue", "nfc_llcp_local_put", "llcp_sock_accept", "llcp_sock_release", "nfc_llcp_register_device" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA5OjAyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GQyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25mY19sbGNwX2FjY2VwdF91bmxpbmsmIzM0OywKICAgICYjMzQ7bmZjX2xsY3BfYWNjZXB0X2RlcXVldWUmIzM0OywKICAgICYjMzQ7bmZjX2xsY3BfbG9jYWxfcHV0JiMzNDssCiAgICAmIzM0O2xsY3Bfc29ja19hY2NlcHQmIzM0OywKICAgICYjMzQ7bGxjcF9zb2NrX3JlbGVhc2UmIzM0OywKICAgICYjMzQ7bmZjX2xsY3BfcmVnaXN0ZXJfZGV2aWNlJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIHNvY2tldCBsaWZlY3ljbGUgbWFuYWdlbWVudCwgcmVmZXJlbmNlIGNvdW50aW5nLCBsb2NraW5nLCBhbmQgYXN5bmNocm9ub3VzIGNsZWFudXAgaW4gdGhlIE5GQyBMTENQIHN1YnN5c3RlbSAobmV0L25mYy9sbGNwX2NvcmUuYyBhbmQgbmV0L25mYy9sbGNwX3NvY2suYykuIFNwZWNpZmljYWxseSwgaXQgaW50cm9kdWNlcyBzYWZlIGxpc3QgcG9wcGluZyB3aXRoIHByb3BlciBzb2NrZXQgbG9ja2luZywgY29ycmVjdCByZWZlcmVuY2UgY291bnRpbmcgZm9yIGNoaWxkIHNvY2tldHMgaW4gdGhlIGFjY2VwdCBxdWV1ZSwgYW5kIHdvcmtxdWV1ZS1kZWZlcnJlZCByZWxlYXNlIG9mIHN0cnVjdCBuZmNfbGxjcF9sb2NhbC5cblxuVGhlc2UgY2hhbmdlcyBkZWFsIGV4Y2x1c2l2ZWx5IHdpdGggY29uY3VycmVuY3ksIHJlZmVyZW5jZSBjb3VudGluZywgYW5kIGxpZmVjeWNsZSBtYW5hZ2VtZW50IChyaXNrcyBvZiBVc2UtQWZ0ZXItRnJlZSwgcmFjZSBjb25kaXRpb25zLCBvciBkZWFkbG9ja3MpLCB3aGljaCBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUCBzYW5pdGl6ZXJzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgZGF0YSBjb3BpZWQgdG8gdXNlcnNwYWNlLCBkb2VzIG5vdCByZWFkIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMvYnVmZmVycywgYW5kIGRvZXMgbm90IGFsdGVyIGxlbmd0aCBvciBib3VuZHMgY2FsY3VsYXRpb25zLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlc29sdmVzIHJhY2UgY29uZGl0aW9ucywgaW1wcm9wZXIgc29ja2V0IGxvY2tpbmcsIGFuZCByZWZlcmVuY2UgY291bnRpbmcgaXNzdWVzIGluIHRoZSBORkMgTExDUCBzdWJzeXN0ZW0gYWNyb3NzIHNvY2tldCByZWxlYXNlLCBjb25uZWN0aW9uIGFjY2VwdGFuY2UsIGFuZCBsb2NhbCBkZXZpY2UgdGVhcmRvd24uIFRoZXNlIGNvZGUgcGF0aHMgYXJlIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIEFGX05GQyBzb2NrZXQgb3BlcmF0aW9ucyBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwOTowMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDhhNzI3ZWQ3MTIyZDU3NzRmMmQ1MmM4MzJlMTMyZmM3NWE2NDJhY2ZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAzIDA5OjAyOjIzIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9uZmMvbGxjcC5oIGIvbmV0L25mYy9sbGNwLmhcbmluZGV4IGQ4MzQ1ZWQ1N2M5NTQuLjIzYWU3YTAxMTJkMzcgMTAwNjQ0XG4tLS0gYS9uZXQvbmZjL2xsY3AuaFxuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25mYy9sbGNwLmhcbkBAIC05MSw2ICYjNDM7OTEsNyBAQCBzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwge1xuIFx0c3RydWN0IGhsaXN0X2hlYWQgcGVuZGluZ19zZHJlcXM7XG4gXHRzdHJ1Y3QgdGltZXJfbGlzdCBzZHJlcV90aW1lcjtcbiBcdHN0cnVjdCB3b3JrX3N0cnVjdCBzZHJlcV90aW1lb3V0X3dvcms7XG4mIzQzO1x0c3RydWN0IHdvcmtfc3RydWN0IHJlbGVhc2Vfd29yaztcbiBcdHU4IHNkcmVxX25leHRfdGlkO1xuIFxuIFx0Lyogc29ja2V0cyBhcnJheSAqL1xuZGlmZiAtLWdpdCBhL25ldC9uZmMvbGxjcF9jb3JlLmMgYi9uZXQvbmZjL2xsY3BfY29yZS5jXG5pbmRleCBiZDYzNjFlMmVmYTRmLi4yMzU1M2U3NDI2ZWMyIDEwMDY0NFxuLS0tIGEvbmV0L25mYy9sbGNwX2NvcmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25mYy9sbGNwX2NvcmUuY1xuQEAgLTIwLDYgJiM0MzsyMCw4IEBAIHN0YXRpYyBMSVNUX0hFQUQobGxjcF9kZXZpY2VzKTtcbiAvKiBQcm90ZWN0cyBsbGNwX2RldmljZXMgbGlzdCAqL1xuIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0sobGxjcF9kZXZpY2VzX2xvY2spO1xuIFxuJiM0MztzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmxsY3Bfd3E7XG4mIzQzO1xuIHN0YXRpYyB2b2lkIG5mY19sbGNwX3J4X3NrYihzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbiBcbiB2b2lkIG5mY19sbGNwX3NvY2tfbGluayhzdHJ1Y3QgbGxjcF9zb2NrX2xpc3QgKmwsIHN0cnVjdCBzb2NrICpzaylcbkBAIC02MywyMSAmIzQzOzY1LDMzIEBAIHN0YXRpYyB2b2lkIG5mY19sbGNwX3NvY2tldF9wdXJnZShzdHJ1Y3QgbmZjX2xsY3Bfc29jayAqc29jaylcbiBcdH1cbiB9XG4gXG4mIzQzO3N0YXRpYyBzdHJ1Y3Qgc29jayAqbmZjX2xsY3Bfc29ja19saXN0X3BvcChzdHJ1Y3QgbGxjcF9zb2NrX2xpc3QgKmwpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgc29jayAqc2s7XG4mIzQzO1xuJiM0MztcdHdyaXRlX2xvY2soXHUwMDI2bC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRzayA9IHNrX2hlYWQoXHUwMDI2bC1cdTAwM2VoZWFkKTtcbiYjNDM7XHRpZiAoc2spIHtcbiYjNDM7XHRcdHNvY2tfaG9sZChzayk7XG4mIzQzO1x0XHRza19kZWxfbm9kZV9pbml0KHNrKTtcbiYjNDM7XHR9XG4mIzQzO1x0d3JpdGVfdW5sb2NrKFx1MDAyNmwtXHUwMDNlbG9jayk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBzaztcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCBuZmNfbGxjcF9zb2NrZXRfcmVsZWFzZShzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsLCBib29sIGRldmljZSxcbiBcdFx0XHRcdCAgICBpbnQgZXJyKVxuIHtcbiBcdHN0cnVjdCBzb2NrICpzaztcbi1cdHN0cnVjdCBobGlzdF9ub2RlICp0bXA7XG4gXHRzdHJ1Y3QgbmZjX2xsY3Bfc29jayAqbGxjcF9zb2NrO1xuIFxuIFx0c2tiX3F1ZXVlX3B1cmdlKFx1MDAyNmxvY2FsLVx1MDAzZXR4X3F1ZXVlKTtcbiBcbi1cdHdyaXRlX2xvY2soXHUwMDI2bG9jYWwtXHUwMDNlc29ja2V0cy5sb2NrKTtcbi1cbi1cdHNrX2Zvcl9lYWNoX3NhZmUoc2ssIHRtcCwgXHUwMDI2bG9jYWwtXHUwMDNlc29ja2V0cy5oZWFkKSB7XG4mIzQzO1x0d2hpbGUgKChzayA9IG5mY19sbGNwX3NvY2tfbGlzdF9wb3AoXHUwMDI2bG9jYWwtXHUwMDNlc29ja2V0cykpKSB7XG4gXHRcdGxsY3Bfc29jayA9IG5mY19sbGNwX3NvY2soc2spO1xuIFxuLVx0XHRiaF9sb2NrX3NvY2soc2spO1xuJiM0MztcdFx0bG9ja19zb2NrKHNrKTtcbiBcbiBcdFx0bmZjX2xsY3Bfc29ja2V0X3B1cmdlKGxsY3Bfc29jayk7XG4gXG5AQCAtOTEsMTcgJiM0MzsxMDUsMjcgQEAgc3RhdGljIHZvaWQgbmZjX2xsY3Bfc29ja2V0X3JlbGVhc2Uoc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCwgYm9vbCBkZXZpY2UsXG4gXHRcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGxzaywgbixcbiBcdFx0XHRcdFx0XHQgXHUwMDI2bGxjcF9zb2NrLVx1MDAzZWFjY2VwdF9xdWV1ZSxcbiBcdFx0XHRcdFx0XHQgYWNjZXB0X3F1ZXVlKSB7XG4tXHRcdFx0XHRhY2NlcHRfc2sgPSBcdTAwMjZsc2stXHUwMDNlc2s7XG4tXHRcdFx0XHRiaF9sb2NrX3NvY2soYWNjZXB0X3NrKTtcbi1cbi1cdFx0XHRcdG5mY19sbGNwX2FjY2VwdF91bmxpbmsoYWNjZXB0X3NrKTtcbiYjNDM7XHRcdFx0XHRib29sIHB1dF9jcmVhdGlvbiA9IGZhbHNlO1xuIFxuLVx0XHRcdFx0aWYgKGVycilcbi1cdFx0XHRcdFx0YWNjZXB0X3NrLVx1MDAzZXNrX2VyciA9IGVycjtcbi1cdFx0XHRcdGFjY2VwdF9zay1cdTAwM2Vza19zdGF0ZSA9IExMQ1BfQ0xPU0VEO1xuLVx0XHRcdFx0YWNjZXB0X3NrLVx1MDAzZXNrX3N0YXRlX2NoYW5nZShzayk7XG4mIzQzO1x0XHRcdFx0YWNjZXB0X3NrID0gXHUwMDI2bHNrLVx1MDAzZXNrO1xuJiM0MztcdFx0XHRcdGxvY2tfc29ja19uZXN0ZWQoYWNjZXB0X3NrLFxuJiM0MztcdFx0XHRcdFx0XHQgU0lOR0xFX0RFUFRIX05FU1RJTkcpO1xuJiM0MztcbiYjNDM7XHRcdFx0XHRpZiAobmZjX2xsY3Bfc29jayhhY2NlcHRfc2spLVx1MDAzZXBhcmVudCA9PSBzaykge1xuJiM0MztcdFx0XHRcdFx0bmZjX2xsY3BfYWNjZXB0X3VubGluayhhY2NlcHRfc2spO1xuJiM0MztcdFx0XHRcdFx0bmZjX2xsY3Bfc29ja191bmxpbmsoXHUwMDI2bG9jYWwtXHUwMDNlc29ja2V0cywgYWNjZXB0X3NrKTtcbiYjNDM7XG4mIzQzO1x0XHRcdFx0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRcdFx0XHRhY2NlcHRfc2stXHUwMDNlc2tfZXJyID0gZXJyO1xuJiM0MztcdFx0XHRcdFx0YWNjZXB0X3NrLVx1MDAzZXNrX3N0YXRlID0gTExDUF9DTE9TRUQ7XG4mIzQzO1x0XHRcdFx0XHRhY2NlcHRfc2stXHUwMDNlc2tfc3RhdGVfY2hhbmdlKGFjY2VwdF9zayk7XG4mIzQzO1x0XHRcdFx0XHRzb2NrX29ycGhhbihhY2NlcHRfc2spO1xuJiM0MztcdFx0XHRcdFx0cHV0X2NyZWF0aW9uID0gdHJ1ZTtcbiYjNDM7XHRcdFx0XHR9XG4gXG4tXHRcdFx0XHRiaF91bmxvY2tfc29jayhhY2NlcHRfc2spO1xuJiM0MztcdFx0XHRcdHJlbGVhc2Vfc29jayhhY2NlcHRfc2spO1xuJiM0MztcdFx0XHRcdGlmIChwdXRfY3JlYXRpb24pXG4mIzQzO1x0XHRcdFx0XHRzb2NrX3B1dChhY2NlcHRfc2spOyAvKiBjcmVhdGlvbiByZWYgKi9cbiBcdFx0XHR9XG4gXHRcdH1cbiBcbkBAIC0xMTAsMjMgJiM0MzsxMzQsMTggQEAgc3RhdGljIHZvaWQgbmZjX2xsY3Bfc29ja2V0X3JlbGVhc2Uoc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCwgYm9vbCBkZXZpY2UsXG4gXHRcdHNrLVx1MDAzZXNrX3N0YXRlID0gTExDUF9DTE9TRUQ7XG4gXHRcdHNrLVx1MDAzZXNrX3N0YXRlX2NoYW5nZShzayk7XG4gXG4tXHRcdGJoX3VubG9ja19zb2NrKHNrKTtcbi1cbi1cdFx0c2tfZGVsX25vZGVfaW5pdChzayk7XG4mIzQzO1x0XHRyZWxlYXNlX3NvY2soc2spO1xuJiM0MztcdFx0c29ja19wdXQoc2spO1xuIFx0fVxuIFxuLVx0d3JpdGVfdW5sb2NrKFx1MDAyNmxvY2FsLVx1MDAzZXNvY2tldHMubG9jayk7XG4tXG4gXHQvKiBJZiB3ZSBzdGlsbCBoYXZlIGEgZGV2aWNlLCB3ZSBrZWVwIHRoZSBSQVcgc29ja2V0cyBhbGl2ZSAqL1xuIFx0aWYgKGRldmljZSA9PSB0cnVlKVxuIFx0XHRyZXR1cm47XG4gXG4tXHR3cml0ZV9sb2NrKFx1MDAyNmxvY2FsLVx1MDAzZXJhd19zb2NrZXRzLmxvY2spO1xuLVxuLVx0c2tfZm9yX2VhY2hfc2FmZShzaywgdG1wLCBcdTAwMjZsb2NhbC1cdTAwM2VyYXdfc29ja2V0cy5oZWFkKSB7XG4mIzQzO1x0d2hpbGUgKChzayA9IG5mY19sbGNwX3NvY2tfbGlzdF9wb3AoXHUwMDI2bG9jYWwtXHUwMDNlcmF3X3NvY2tldHMpKSkge1xuIFx0XHRsbGNwX3NvY2sgPSBuZmNfbGxjcF9zb2NrKHNrKTtcbiBcbi1cdFx0YmhfbG9ja19zb2NrKHNrKTtcbiYjNDM7XHRcdGxvY2tfc29jayhzayk7XG4gXG4gXHRcdG5mY19sbGNwX3NvY2tldF9wdXJnZShsbGNwX3NvY2spO1xuIFxuQEAgLTEzNSwyNiAmIzQzOzE1NCwyMCBAQCBzdGF0aWMgdm9pZCBuZmNfbGxjcF9zb2NrZXRfcmVsZWFzZShzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsLCBib29sIGRldmljZSxcbiBcdFx0c2stXHUwMDNlc2tfc3RhdGUgPSBMTENQX0NMT1NFRDtcbiBcdFx0c2stXHUwMDNlc2tfc3RhdGVfY2hhbmdlKHNrKTtcbiBcbi1cdFx0YmhfdW5sb2NrX3NvY2soc2spO1xuLVxuLVx0XHRza19kZWxfbm9kZV9pbml0KHNrKTtcbiYjNDM7XHRcdHJlbGVhc2Vfc29jayhzayk7XG4mIzQzO1x0XHRzb2NrX3B1dChzayk7XG4gXHR9XG4tXG4tXHR3cml0ZV91bmxvY2soXHUwMDI2bG9jYWwtXHUwMDNlcmF3X3NvY2tldHMubG9jayk7XG4gfVxuIFxuIHN0YXRpYyBzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKm5mY19sbGNwX2xvY2FsX2dldChzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsKVxuIHtcbi1cdC8qIFNpbmNlIHVzaW5nIG5mY19sbGNwX2xvY2FsIG1heSByZXN1bHQgaW4gdXNhZ2Ugb2YgbmZjX2Rldiwgd2hlbmV2ZXJcbi1cdCAqIHdlIGhvbGQgYSByZWZlcmVuY2UgdG8gbG9jYWwsIHdlIGFsc28gbmVlZCB0byBob2xkIGEgcmVmZXJlbmNlIHRvXG4tXHQgKiB0aGUgZGV2aWNlIHRvIGF2b2lkIFVBRi5cbi1cdCAqL1xuLVx0aWYgKCFuZmNfZ2V0X2RldmljZShsb2NhbC1cdTAwM2VkZXYtXHUwMDNlaWR4KSlcbiYjNDM7XHRpZiAoIWxvY2FsKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcbi1cdGtyZWZfZ2V0KFx1MDAyNmxvY2FsLVx1MDAzZXJlZik7XG4mIzQzO1x0aWYgKGtyZWZfZ2V0X3VubGVzc196ZXJvKFx1MDAyNmxvY2FsLVx1MDAzZXJlZikpXG4mIzQzO1x0XHRyZXR1cm4gbG9jYWw7XG4gXG4tXHRyZXR1cm4gbG9jYWw7XG4mIzQzO1x0cmV0dXJuIE5VTEw7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGxvY2FsX2NsZWFudXAoc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbClcbkBAIC0xNzIsMzAgJiM0MzsxODUsMzQgQEAgc3RhdGljIHZvaWQgbG9jYWxfY2xlYW51cChzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsKVxuIFx0bmZjX2xsY3BfZnJlZV9zZHBfdGx2X2xpc3QoXHUwMDI2bG9jYWwtXHUwMDNlcGVuZGluZ19zZHJlcXMpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBsb2NhbF9yZWxlYXNlKHN0cnVjdCBrcmVmICpyZWYpXG4mIzQzO3N0YXRpYyB2b2lkIGxvY2FsX3JlbGVhc2Vfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4ge1xuIFx0c3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbDtcbiYjNDM7XHRzdHJ1Y3QgbmZjX2RldiAqZGV2O1xuIFxuLVx0bG9jYWwgPSBjb250YWluZXJfb2YocmVmLCBzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwsIHJlZik7XG4mIzQzO1x0bG9jYWwgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IG5mY19sbGNwX2xvY2FsLCByZWxlYXNlX3dvcmspO1xuJiM0MztcdGRldiA9IGxvY2FsLVx1MDAzZWRldjtcbiBcbiBcdGxvY2FsX2NsZWFudXAobG9jYWwpO1xuIFx0a2ZyZWUobG9jYWwpO1xuJiM0MztcdG5mY19wdXRfZGV2aWNlKGRldik7XG4gfVxuIFxuLWludCBuZmNfbGxjcF9sb2NhbF9wdXQoc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbClcbiYjNDM7c3RhdGljIHZvaWQgbG9jYWxfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqcmVmKVxuIHtcbi1cdHN0cnVjdCBuZmNfZGV2ICpkZXY7XG4tXHRpbnQgcmV0O1xuJiM0MztcdHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWw7XG4gXG4tXHRpZiAobG9jYWwgPT0gTlVMTClcbi1cdFx0cmV0dXJuIDA7XG4mIzQzO1x0bG9jYWwgPSBjb250YWluZXJfb2YocmVmLCBzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwsIHJlZik7XG4gXG4tXHRkZXYgPSBsb2NhbC1cdTAwM2VkZXY7XG4mIzQzO1x0cXVldWVfd29yayhsbGNwX3dxLCBcdTAwMjZsb2NhbC1cdTAwM2VyZWxlYXNlX3dvcmspO1xuJiM0Mzt9XG4gXG4tXHRyZXQgPSBrcmVmX3B1dChcdTAwMjZsb2NhbC1cdTAwM2VyZWYsIGxvY2FsX3JlbGVhc2UpO1xuLVx0bmZjX3B1dF9kZXZpY2UoZGV2KTtcbiYjNDM7aW50IG5mY19sbGNwX2xvY2FsX3B1dChzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFsb2NhbClcbiYjNDM7XHRcdHJldHVybiAwO1xuIFxuLVx0cmV0dXJuIHJldDtcbiYjNDM7XHRyZXR1cm4ga3JlZl9wdXQoXHUwMDI2bG9jYWwtXHUwMDNlcmVmLCBsb2NhbF9yZWxlYXNlKTtcbiB9XG4gXG4gc3RhdGljIHN0cnVjdCBuZmNfbGxjcF9zb2NrICpuZmNfbGxjcF9zb2NrX2dldChzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsLFxuQEAgLTE3MDUsNiAmIzQzOzE3MjIsNyBAQCBpbnQgbmZjX2xsY3BfcmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCBuZmNfZGV2ICpuZGV2KVxuIFx0SU5JVF9XT1JLKFx1MDAyNmxvY2FsLVx1MDAzZXJ4X3dvcmssIG5mY19sbGNwX3J4X3dvcmspO1xuIFxuIFx0SU5JVF9XT1JLKFx1MDAyNmxvY2FsLVx1MDAzZXRpbWVvdXRfd29yaywgbmZjX2xsY3BfdGltZW91dF93b3JrKTtcbiYjNDM7XHRJTklUX1dPUksoXHUwMDI2bG9jYWwtXHUwMDNlcmVsZWFzZV93b3JrLCBsb2NhbF9yZWxlYXNlX3dvcmspO1xuIFxuIFx0cndsb2NrX2luaXQoXHUwMDI2bG9jYWwtXHUwMDNlc29ja2V0cy5sb2NrKTtcbiBcdHJ3bG9ja19pbml0KFx1MDAyNmxvY2FsLVx1MDAzZWNvbm5lY3Rpbmdfc29ja2V0cy5sb2NrKTtcbkBAIC0xNzQ4LDEwICYjNDM7MTc2NiwyMyBAQCB2b2lkIG5mY19sbGNwX3VucmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCBuZmNfZGV2ICpkZXYpXG4gXG4gaW50IF9faW5pdCBuZmNfbGxjcF9pbml0KHZvaWQpXG4ge1xuLVx0cmV0dXJuIG5mY19sbGNwX3NvY2tfaW5pdCgpO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGxsY3Bfd3EgPSBhbGxvY193b3JrcXVldWUoXCYjMzQ7bmZjX2xsY3Bfd3FcJiMzNDssIFdRX1VOQk9VTkQsIDApO1xuJiM0MztcdGlmICghbGxjcF93cSlcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBuZmNfbGxjcF9zb2NrX2luaXQoKTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRkZXN0cm95X3dvcmtxdWV1ZShsbGNwX3dxKTtcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiB9XG4gXG4gdm9pZCBuZmNfbGxjcF9leGl0KHZvaWQpXG4ge1xuIFx0bmZjX2xsY3Bfc29ja19leGl0KCk7XG4mIzQzO1x0ZGVzdHJveV93b3JrcXVldWUobGxjcF93cSk7XG4gfVxuZGlmZiAtLWdpdCBhL25ldC9uZmMvbGxjcF9zb2NrLmMgYi9uZXQvbmZjL2xsY3Bfc29jay5jXG5pbmRleCA1NTU4ZDhhNGQ0OGIzLi5jZTY4NzVlYjU4ZmJjIDEwMDY0NFxuLS0tIGEvbmV0L25mYy9sbGNwX3NvY2suY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25mYy9sbGNwX3NvY2suY1xuQEAgLTM5MiwxMSAmIzQzOzM5MiwxMiBAQCB2b2lkIG5mY19sbGNwX2FjY2VwdF91bmxpbmsoc3RydWN0IHNvY2sgKnNrKVxuIFxuIFx0cHJfZGVidWcoXCYjMzQ7c3RhdGUgJWRcXG5cJiMzNDssIHNrLVx1MDAzZXNrX3N0YXRlKTtcbiBcbi1cdGxpc3RfZGVsX2luaXQoXHUwMDI2bGxjcF9zb2NrLVx1MDAzZWFjY2VwdF9xdWV1ZSk7XG4tXHRza19hY2NlcHRxX3JlbW92ZWQobGxjcF9zb2NrLVx1MDAzZXBhcmVudCk7XG4tXHRsbGNwX3NvY2stXHUwMDNlcGFyZW50ID0gTlVMTDtcbi1cbi1cdHNvY2tfcHV0KHNrKTtcbiYjNDM7XHRpZiAobGxjcF9zb2NrLVx1MDAzZXBhcmVudCkge1xuJiM0MztcdFx0bGlzdF9kZWxfaW5pdChcdTAwMjZsbGNwX3NvY2stXHUwMDNlYWNjZXB0X3F1ZXVlKTtcbiYjNDM7XHRcdHNrX2FjY2VwdHFfcmVtb3ZlZChsbGNwX3NvY2stXHUwMDNlcGFyZW50KTtcbiYjNDM7XHRcdGxsY3Bfc29jay1cdTAwM2VwYXJlbnQgPSBOVUxMO1xuJiM0MztcdFx0c29ja19wdXQoc2spO1xuJiM0MztcdH1cbiB9XG4gXG4gdm9pZCBuZmNfbGxjcF9hY2NlcHRfZW5xdWV1ZShzdHJ1Y3Qgc29jayAqcGFyZW50LCBzdHJ1Y3Qgc29jayAqc2spXG5AQCAtNDIzLDEyICYjNDM7NDI0LDIwIEBAIHN0cnVjdCBzb2NrICpuZmNfbGxjcF9hY2NlcHRfZGVxdWV1ZShzdHJ1Y3Qgc29jayAqcGFyZW50LFxuIFxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGxzaywgbiwgXHUwMDI2bGxjcF9wYXJlbnQtXHUwMDNlYWNjZXB0X3F1ZXVlLFxuIFx0XHRcdFx0IGFjY2VwdF9xdWV1ZSkge1xuJiM0MztcdFx0c3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbDtcbiYjNDM7XG4gXHRcdHNrID0gXHUwMDI2bHNrLVx1MDAzZXNrO1xuLVx0XHRsb2NrX3NvY2soc2spO1xuJiM0MztcdFx0bG9ja19zb2NrX25lc3RlZChzaywgU0lOR0xFX0RFUFRIX05FU1RJTkcpO1xuIFxuIFx0XHRpZiAoc2stXHUwMDNlc2tfc3RhdGUgPT0gTExDUF9DTE9TRUQpIHtcbi1cdFx0XHRyZWxlYXNlX3NvY2soc2spO1xuJiM0MztcdFx0XHRsb2NhbCA9IG5mY19sbGNwX3NvY2soc2spLVx1MDAzZWxvY2FsO1xuJiM0MztcbiBcdFx0XHRuZmNfbGxjcF9hY2NlcHRfdW5saW5rKHNrKTtcbiYjNDM7XHRcdFx0aWYgKGxvY2FsKVxuJiM0MztcdFx0XHRcdG5mY19sbGNwX3NvY2tfdW5saW5rKFx1MDAyNmxvY2FsLVx1MDAzZXNvY2tldHMsIHNrKTtcbiYjNDM7XHRcdFx0c29ja19vcnBoYW4oc2spO1xuJiM0MztcdFx0XHRyZWxlYXNlX3NvY2soc2spO1xuJiM0MztcdFx0XHRzb2NrX3B1dChzayk7XG4gXHRcdFx0Y29udGludWU7XG4gXHRcdH1cbiBcbkBAIC00NjQsNyAmIzQzOzQ3Myw3IEBAIHN0YXRpYyBpbnQgbGxjcF9zb2NrX2FjY2VwdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2V0ICpuZXdzb2NrLFxuIFxuIFx0cHJfZGVidWcoXCYjMzQ7cGFyZW50ICVwXFxuXCYjMzQ7LCBzayk7XG4gXG4tXHRsb2NrX3NvY2tfbmVzdGVkKHNrLCBTSU5HTEVfREVQVEhfTkVTVElORyk7XG4mIzQzO1x0bG9ja19zb2NrKHNrKTtcbiBcbiBcdGlmIChzay1cdTAwM2Vza19zdGF0ZSAhPSBMTENQX0xJU1RFTikge1xuIFx0XHRyZXQgPSAtRUJBREZEO1xuQEAgLTQ5MCw3ICYjNDM7NDk5LDEyIEBAIHN0YXRpYyBpbnQgbGxjcF9zb2NrX2FjY2VwdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2V0ICpuZXdzb2NrLFxuIFxuIFx0XHRyZWxlYXNlX3NvY2soc2spO1xuIFx0XHR0aW1lbyA9IHNjaGVkdWxlX3RpbWVvdXQodGltZW8pO1xuLVx0XHRsb2NrX3NvY2tfbmVzdGVkKHNrLCBTSU5HTEVfREVQVEhfTkVTVElORyk7XG4mIzQzO1x0XHRsb2NrX3NvY2soc2spO1xuJiM0MztcbiYjNDM7XHRcdGlmIChzay1cdTAwM2Vza19zdGF0ZSAhPSBMTENQX0xJU1RFTikge1xuJiM0MztcdFx0XHRyZXQgPSAtRUJBREZEO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdH1cbiBcdH1cbiBcdF9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTtcbiBcdHJlbW92ZV93YWl0X3F1ZXVlKHNrX3NsZWVwKHNrKSwgXHUwMDI2d2FpdCk7XG5AQCAtNjI5LDEzICYjNDM7NjQzLDI0IEBAIHN0YXRpYyBpbnQgbGxjcF9zb2NrX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jaylcbiBcbiBcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGxzaywgbiwgXHUwMDI2bGxjcF9zb2NrLVx1MDAzZWFjY2VwdF9xdWV1ZSxcbiBcdFx0XHRcdFx0IGFjY2VwdF9xdWV1ZSkge1xuJiM0MztcdFx0XHRib29sIHB1dF9jcmVhdGlvbiA9IGZhbHNlO1xuJiM0MztcbiBcdFx0XHRhY2NlcHRfc2sgPSBcdTAwMjZsc2stXHUwMDNlc2s7XG4tXHRcdFx0bG9ja19zb2NrKGFjY2VwdF9zayk7XG4mIzQzO1x0XHRcdGxvY2tfc29ja19uZXN0ZWQoYWNjZXB0X3NrLCBTSU5HTEVfREVQVEhfTkVTVElORyk7XG4gXG4tXHRcdFx0bmZjX2xsY3Bfc2VuZF9kaXNjb25uZWN0KGxzayk7XG4tXHRcdFx0bmZjX2xsY3BfYWNjZXB0X3VubGluayhhY2NlcHRfc2spO1xuJiM0MztcdFx0XHRpZiAobmZjX2xsY3Bfc29jayhhY2NlcHRfc2spLVx1MDAzZXBhcmVudCA9PSBzaykge1xuJiM0MztcdFx0XHRcdG5mY19sbGNwX3NlbmRfZGlzY29ubmVjdChsc2spO1xuJiM0MztcdFx0XHRcdG5mY19sbGNwX2FjY2VwdF91bmxpbmsoYWNjZXB0X3NrKTtcbiYjNDM7XHRcdFx0XHRuZmNfbGxjcF9zb2NrX3VubGluayhcdTAwMjZsb2NhbC1cdTAwM2Vzb2NrZXRzLCBhY2NlcHRfc2spO1xuJiM0MztcbiYjNDM7XHRcdFx0XHRhY2NlcHRfc2stXHUwMDNlc2tfc3RhdGUgPSBMTENQX0NMT1NFRDtcbiYjNDM7XHRcdFx0XHRzb2NrX29ycGhhbihhY2NlcHRfc2spO1xuJiM0MztcdFx0XHRcdHB1dF9jcmVhdGlvbiA9IHRydWU7XG4mIzQzO1x0XHRcdH1cbiBcbiBcdFx0XHRyZWxlYXNlX3NvY2soYWNjZXB0X3NrKTtcbiYjNDM7XHRcdFx0aWYgKHB1dF9jcmVhdGlvbilcbiYjNDM7XHRcdFx0XHRzb2NrX3B1dChhY2NlcHRfc2spOyAvKiBjcmVhdGlvbiByZWYgKi9cbiBcdFx0fVxuIFx0fVxuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA5OjAyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GQyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25mY19sbGNwX2FjY2VwdF91bmxpbmsmIzM0OywKICAgICYjMzQ7bmZjX2xsY3BfYWNjZXB0X2RlcXVldWUmIzM0OywKICAgICYjMzQ7bmZjX2xsY3BfbG9jYWxfcHV0JiMzNDssCiAgICAmIzM0O2xsY3Bfc29ja19hY2NlcHQmIzM0OywKICAgICYjMzQ7bGxjcF9zb2NrX3JlbGVhc2UmIzM0OywKICAgICYjMzQ7bmZjX2xsY3BfcmVnaXN0ZXJfZGV2aWNlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlc29sdmVzIHJhY2UgY29uZGl0aW9ucywgaW1wcm9wZXIgc29ja2V0IGxvY2tpbmcsIGFuZCByZWZlcmVuY2UgY291bnRpbmcgaXNzdWVzIGluIHRoZSBORkMgTExDUCBzdWJzeXN0ZW0gYWNyb3NzIHNvY2tldCByZWxlYXNlLCBjb25uZWN0aW9uIGFjY2VwdGFuY2UsIGFuZCBsb2NhbCBkZXZpY2UgdGVhcmRvd24uIFRoZXNlIGNvZGUgcGF0aHMgYXJlIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIEFGX05GQyBzb2NrZXQgb3BlcmF0aW9ucyBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDhhNzI3ZWQ3MTIyZDU3NzRmMmQ1MmM4MzJlMTMyZmM3NWE2NDJhY2YKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IFNlcCAzIDA5OjAyOjIzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L25mYy9sbGNwLmggYi9uZXQvbmZjL2xsY3AuaAppbmRleCBkODM0NWVkNTdjOTU0Li4yM2FlN2EwMTEyZDM3IDEwMDY0NAotLS0gYS9uZXQvbmZjL2xsY3AuaAomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmZjL2xsY3AuaApAQCAtOTEsNiAmIzQzOzkxLDcgQEAgc3RydWN0IG5mY19sbGNwX2xvY2FsIHsKIAlzdHJ1Y3QgaGxpc3RfaGVhZCBwZW5kaW5nX3NkcmVxczsKIAlzdHJ1Y3QgdGltZXJfbGlzdCBzZHJlcV90aW1lcjsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgc2RyZXFfdGltZW91dF93b3JrOwomIzQzOwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgcmVsZWFzZV93b3JrOwogCXU4IHNkcmVxX25leHRfdGlkOwogCiAJLyogc29ja2V0cyBhcnJheSAqLwpkaWZmIC0tZ2l0IGEvbmV0L25mYy9sbGNwX2NvcmUuYyBiL25ldC9uZmMvbGxjcF9jb3JlLmMKaW5kZXggYmQ2MzYxZTJlZmE0Zi4uMjM1NTNlNzQyNmVjMiAxMDA2NDQKLS0tIGEvbmV0L25mYy9sbGNwX2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmZjL2xsY3BfY29yZS5jCkBAIC0yMCw2ICYjNDM7MjAsOCBAQCBzdGF0aWMgTElTVF9IRUFEKGxsY3BfZGV2aWNlcyk7CiAvKiBQcm90ZWN0cyBsbGNwX2RldmljZXMgbGlzdCAqLwogc3RhdGljIERFRklORV9TUElOTE9DSyhsbGNwX2RldmljZXNfbG9jayk7CiAKJiM0MztzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmxsY3Bfd3E7CiYjNDM7CiBzdGF0aWMgdm9pZCBuZmNfbGxjcF9yeF9za2Ioc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiAKIHZvaWQgbmZjX2xsY3Bfc29ja19saW5rKHN0cnVjdCBsbGNwX3NvY2tfbGlzdCAqbCwgc3RydWN0IHNvY2sgKnNrKQpAQCAtNjMsMjEgJiM0Mzs2NSwzMyBAQCBzdGF0aWMgdm9pZCBuZmNfbGxjcF9zb2NrZXRfcHVyZ2Uoc3RydWN0IG5mY19sbGNwX3NvY2sgKnNvY2spCiAJfQogfQogCiYjNDM7c3RhdGljIHN0cnVjdCBzb2NrICpuZmNfbGxjcF9zb2NrX2xpc3RfcG9wKHN0cnVjdCBsbGNwX3NvY2tfbGlzdCAqbCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBzb2NrICpzazsKJiM0MzsKJiM0MzsJd3JpdGVfbG9jaygmYW1wO2wtJmd0O2xvY2spOwomIzQzOwlzayA9IHNrX2hlYWQoJmFtcDtsLSZndDtoZWFkKTsKJiM0MzsJaWYgKHNrKSB7CiYjNDM7CQlzb2NrX2hvbGQoc2spOwomIzQzOwkJc2tfZGVsX25vZGVfaW5pdChzayk7CiYjNDM7CX0KJiM0MzsJd3JpdGVfdW5sb2NrKCZhbXA7bC0mZ3Q7bG9jayk7CiYjNDM7CiYjNDM7CXJldHVybiBzazsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCBuZmNfbGxjcF9zb2NrZXRfcmVsZWFzZShzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsLCBib29sIGRldmljZSwKIAkJCQkgICAgaW50IGVycikKIHsKIAlzdHJ1Y3Qgc29jayAqc2s7Ci0Jc3RydWN0IGhsaXN0X25vZGUgKnRtcDsKIAlzdHJ1Y3QgbmZjX2xsY3Bfc29jayAqbGxjcF9zb2NrOwogCiAJc2tiX3F1ZXVlX3B1cmdlKCZhbXA7bG9jYWwtJmd0O3R4X3F1ZXVlKTsKIAotCXdyaXRlX2xvY2soJmFtcDtsb2NhbC0mZ3Q7c29ja2V0cy5sb2NrKTsKLQotCXNrX2Zvcl9lYWNoX3NhZmUoc2ssIHRtcCwgJmFtcDtsb2NhbC0mZ3Q7c29ja2V0cy5oZWFkKSB7CiYjNDM7CXdoaWxlICgoc2sgPSBuZmNfbGxjcF9zb2NrX2xpc3RfcG9wKCZhbXA7bG9jYWwtJmd0O3NvY2tldHMpKSkgewogCQlsbGNwX3NvY2sgPSBuZmNfbGxjcF9zb2NrKHNrKTsKIAotCQliaF9sb2NrX3NvY2soc2spOwomIzQzOwkJbG9ja19zb2NrKHNrKTsKIAogCQluZmNfbGxjcF9zb2NrZXRfcHVyZ2UobGxjcF9zb2NrKTsKIApAQCAtOTEsMTcgJiM0MzsxMDUsMjcgQEAgc3RhdGljIHZvaWQgbmZjX2xsY3Bfc29ja2V0X3JlbGVhc2Uoc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCwgYm9vbCBkZXZpY2UsCiAJCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobHNrLCBuLAogCQkJCQkJICZhbXA7bGxjcF9zb2NrLSZndDthY2NlcHRfcXVldWUsCiAJCQkJCQkgYWNjZXB0X3F1ZXVlKSB7Ci0JCQkJYWNjZXB0X3NrID0gJmFtcDtsc2stJmd0O3NrOwotCQkJCWJoX2xvY2tfc29jayhhY2NlcHRfc2spOwotCi0JCQkJbmZjX2xsY3BfYWNjZXB0X3VubGluayhhY2NlcHRfc2spOwomIzQzOwkJCQlib29sIHB1dF9jcmVhdGlvbiA9IGZhbHNlOwogCi0JCQkJaWYgKGVycikKLQkJCQkJYWNjZXB0X3NrLSZndDtza19lcnIgPSBlcnI7Ci0JCQkJYWNjZXB0X3NrLSZndDtza19zdGF0ZSA9IExMQ1BfQ0xPU0VEOwotCQkJCWFjY2VwdF9zay0mZ3Q7c2tfc3RhdGVfY2hhbmdlKHNrKTsKJiM0MzsJCQkJYWNjZXB0X3NrID0gJmFtcDtsc2stJmd0O3NrOwomIzQzOwkJCQlsb2NrX3NvY2tfbmVzdGVkKGFjY2VwdF9zaywKJiM0MzsJCQkJCQkgU0lOR0xFX0RFUFRIX05FU1RJTkcpOwomIzQzOwomIzQzOwkJCQlpZiAobmZjX2xsY3Bfc29jayhhY2NlcHRfc2spLSZndDtwYXJlbnQgPT0gc2spIHsKJiM0MzsJCQkJCW5mY19sbGNwX2FjY2VwdF91bmxpbmsoYWNjZXB0X3NrKTsKJiM0MzsJCQkJCW5mY19sbGNwX3NvY2tfdW5saW5rKCZhbXA7bG9jYWwtJmd0O3NvY2tldHMsIGFjY2VwdF9zayk7CiYjNDM7CiYjNDM7CQkJCQlpZiAoZXJyKQomIzQzOwkJCQkJCWFjY2VwdF9zay0mZ3Q7c2tfZXJyID0gZXJyOwomIzQzOwkJCQkJYWNjZXB0X3NrLSZndDtza19zdGF0ZSA9IExMQ1BfQ0xPU0VEOwomIzQzOwkJCQkJYWNjZXB0X3NrLSZndDtza19zdGF0ZV9jaGFuZ2UoYWNjZXB0X3NrKTsKJiM0MzsJCQkJCXNvY2tfb3JwaGFuKGFjY2VwdF9zayk7CiYjNDM7CQkJCQlwdXRfY3JlYXRpb24gPSB0cnVlOwomIzQzOwkJCQl9CiAKLQkJCQliaF91bmxvY2tfc29jayhhY2NlcHRfc2spOwomIzQzOwkJCQlyZWxlYXNlX3NvY2soYWNjZXB0X3NrKTsKJiM0MzsJCQkJaWYgKHB1dF9jcmVhdGlvbikKJiM0MzsJCQkJCXNvY2tfcHV0KGFjY2VwdF9zayk7IC8qIGNyZWF0aW9uIHJlZiAqLwogCQkJfQogCQl9CiAKQEAgLTExMCwyMyAmIzQzOzEzNCwxOCBAQCBzdGF0aWMgdm9pZCBuZmNfbGxjcF9zb2NrZXRfcmVsZWFzZShzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsLCBib29sIGRldmljZSwKIAkJc2stJmd0O3NrX3N0YXRlID0gTExDUF9DTE9TRUQ7CiAJCXNrLSZndDtza19zdGF0ZV9jaGFuZ2Uoc2spOwogCi0JCWJoX3VubG9ja19zb2NrKHNrKTsKLQotCQlza19kZWxfbm9kZV9pbml0KHNrKTsKJiM0MzsJCXJlbGVhc2Vfc29jayhzayk7CiYjNDM7CQlzb2NrX3B1dChzayk7CiAJfQogCi0Jd3JpdGVfdW5sb2NrKCZhbXA7bG9jYWwtJmd0O3NvY2tldHMubG9jayk7Ci0KIAkvKiBJZiB3ZSBzdGlsbCBoYXZlIGEgZGV2aWNlLCB3ZSBrZWVwIHRoZSBSQVcgc29ja2V0cyBhbGl2ZSAqLwogCWlmIChkZXZpY2UgPT0gdHJ1ZSkKIAkJcmV0dXJuOwogCi0Jd3JpdGVfbG9jaygmYW1wO2xvY2FsLSZndDtyYXdfc29ja2V0cy5sb2NrKTsKLQotCXNrX2Zvcl9lYWNoX3NhZmUoc2ssIHRtcCwgJmFtcDtsb2NhbC0mZ3Q7cmF3X3NvY2tldHMuaGVhZCkgewomIzQzOwl3aGlsZSAoKHNrID0gbmZjX2xsY3Bfc29ja19saXN0X3BvcCgmYW1wO2xvY2FsLSZndDtyYXdfc29ja2V0cykpKSB7CiAJCWxsY3Bfc29jayA9IG5mY19sbGNwX3NvY2soc2spOwogCi0JCWJoX2xvY2tfc29jayhzayk7CiYjNDM7CQlsb2NrX3NvY2soc2spOwogCiAJCW5mY19sbGNwX3NvY2tldF9wdXJnZShsbGNwX3NvY2spOwogCkBAIC0xMzUsMjYgJiM0MzsxNTQsMjAgQEAgc3RhdGljIHZvaWQgbmZjX2xsY3Bfc29ja2V0X3JlbGVhc2Uoc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCwgYm9vbCBkZXZpY2UsCiAJCXNrLSZndDtza19zdGF0ZSA9IExMQ1BfQ0xPU0VEOwogCQlzay0mZ3Q7c2tfc3RhdGVfY2hhbmdlKHNrKTsKIAotCQliaF91bmxvY2tfc29jayhzayk7Ci0KLQkJc2tfZGVsX25vZGVfaW5pdChzayk7CiYjNDM7CQlyZWxlYXNlX3NvY2soc2spOwomIzQzOwkJc29ja19wdXQoc2spOwogCX0KLQotCXdyaXRlX3VubG9jaygmYW1wO2xvY2FsLSZndDtyYXdfc29ja2V0cy5sb2NrKTsKIH0KIAogc3RhdGljIHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbmZjX2xsY3BfbG9jYWxfZ2V0KHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwpCiB7Ci0JLyogU2luY2UgdXNpbmcgbmZjX2xsY3BfbG9jYWwgbWF5IHJlc3VsdCBpbiB1c2FnZSBvZiBuZmNfZGV2LCB3aGVuZXZlcgotCSAqIHdlIGhvbGQgYSByZWZlcmVuY2UgdG8gbG9jYWwsIHdlIGFsc28gbmVlZCB0byBob2xkIGEgcmVmZXJlbmNlIHRvCi0JICogdGhlIGRldmljZSB0byBhdm9pZCBVQUYuCi0JICovCi0JaWYgKCFuZmNfZ2V0X2RldmljZShsb2NhbC0mZ3Q7ZGV2LSZndDtpZHgpKQomIzQzOwlpZiAoIWxvY2FsKQogCQlyZXR1cm4gTlVMTDsKIAotCWtyZWZfZ2V0KCZhbXA7bG9jYWwtJmd0O3JlZik7CiYjNDM7CWlmIChrcmVmX2dldF91bmxlc3NfemVybygmYW1wO2xvY2FsLSZndDtyZWYpKQomIzQzOwkJcmV0dXJuIGxvY2FsOwogCi0JcmV0dXJuIGxvY2FsOwomIzQzOwlyZXR1cm4gTlVMTDsKIH0KIAogc3RhdGljIHZvaWQgbG9jYWxfY2xlYW51cChzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsKQpAQCAtMTcyLDMwICYjNDM7MTg1LDM0IEBAIHN0YXRpYyB2b2lkIGxvY2FsX2NsZWFudXAoc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCkKIAluZmNfbGxjcF9mcmVlX3NkcF90bHZfbGlzdCgmYW1wO2xvY2FsLSZndDtwZW5kaW5nX3NkcmVxcyk7CiB9CiAKLXN0YXRpYyB2b2lkIGxvY2FsX3JlbGVhc2Uoc3RydWN0IGtyZWYgKnJlZikKJiM0MztzdGF0aWMgdm9pZCBsb2NhbF9yZWxlYXNlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogCXN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWw7CiYjNDM7CXN0cnVjdCBuZmNfZGV2ICpkZXY7CiAKLQlsb2NhbCA9IGNvbnRhaW5lcl9vZihyZWYsIHN0cnVjdCBuZmNfbGxjcF9sb2NhbCwgcmVmKTsKJiM0MzsJbG9jYWwgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IG5mY19sbGNwX2xvY2FsLCByZWxlYXNlX3dvcmspOwomIzQzOwlkZXYgPSBsb2NhbC0mZ3Q7ZGV2OwogCiAJbG9jYWxfY2xlYW51cChsb2NhbCk7CiAJa2ZyZWUobG9jYWwpOwomIzQzOwluZmNfcHV0X2RldmljZShkZXYpOwogfQogCi1pbnQgbmZjX2xsY3BfbG9jYWxfcHV0KHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwpCiYjNDM7c3RhdGljIHZvaWQgbG9jYWxfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqcmVmKQogewotCXN0cnVjdCBuZmNfZGV2ICpkZXY7Ci0JaW50IHJldDsKJiM0MzsJc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbDsKIAotCWlmIChsb2NhbCA9PSBOVUxMKQotCQlyZXR1cm4gMDsKJiM0MzsJbG9jYWwgPSBjb250YWluZXJfb2YocmVmLCBzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwsIHJlZik7CiAKLQlkZXYgPSBsb2NhbC0mZ3Q7ZGV2OwomIzQzOwlxdWV1ZV93b3JrKGxsY3Bfd3EsICZhbXA7bG9jYWwtJmd0O3JlbGVhc2Vfd29yayk7CiYjNDM7fQogCi0JcmV0ID0ga3JlZl9wdXQoJmFtcDtsb2NhbC0mZ3Q7cmVmLCBsb2NhbF9yZWxlYXNlKTsKLQluZmNfcHV0X2RldmljZShkZXYpOwomIzQzO2ludCBuZmNfbGxjcF9sb2NhbF9wdXQoc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCkKJiM0Mzt7CiYjNDM7CWlmICghbG9jYWwpCiYjNDM7CQlyZXR1cm4gMDsKIAotCXJldHVybiByZXQ7CiYjNDM7CXJldHVybiBrcmVmX3B1dCgmYW1wO2xvY2FsLSZndDtyZWYsIGxvY2FsX3JlbGVhc2UpOwogfQogCiBzdGF0aWMgc3RydWN0IG5mY19sbGNwX3NvY2sgKm5mY19sbGNwX3NvY2tfZ2V0KHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwsCkBAIC0xNzA1LDYgJiM0MzsxNzIyLDcgQEAgaW50IG5mY19sbGNwX3JlZ2lzdGVyX2RldmljZShzdHJ1Y3QgbmZjX2RldiAqbmRldikKIAlJTklUX1dPUksoJmFtcDtsb2NhbC0mZ3Q7cnhfd29yaywgbmZjX2xsY3Bfcnhfd29yayk7CiAKIAlJTklUX1dPUksoJmFtcDtsb2NhbC0mZ3Q7dGltZW91dF93b3JrLCBuZmNfbGxjcF90aW1lb3V0X3dvcmspOwomIzQzOwlJTklUX1dPUksoJmFtcDtsb2NhbC0mZ3Q7cmVsZWFzZV93b3JrLCBsb2NhbF9yZWxlYXNlX3dvcmspOwogCiAJcndsb2NrX2luaXQoJmFtcDtsb2NhbC0mZ3Q7c29ja2V0cy5sb2NrKTsKIAlyd2xvY2tfaW5pdCgmYW1wO2xvY2FsLSZndDtjb25uZWN0aW5nX3NvY2tldHMubG9jayk7CkBAIC0xNzQ4LDEwICYjNDM7MTc2NiwyMyBAQCB2b2lkIG5mY19sbGNwX3VucmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCBuZmNfZGV2ICpkZXYpCiAKIGludCBfX2luaXQgbmZjX2xsY3BfaW5pdCh2b2lkKQogewotCXJldHVybiBuZmNfbGxjcF9zb2NrX2luaXQoKTsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJbGxjcF93cSA9IGFsbG9jX3dvcmtxdWV1ZSgmIzM0O25mY19sbGNwX3dxJiMzNDssIFdRX1VOQk9VTkQsIDApOwomIzQzOwlpZiAoIWxsY3Bfd3EpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJcmV0ID0gbmZjX2xsY3Bfc29ja19pbml0KCk7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCWRlc3Ryb3lfd29ya3F1ZXVlKGxsY3Bfd3EpOwomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKIH0KIAogdm9pZCBuZmNfbGxjcF9leGl0KHZvaWQpCiB7CiAJbmZjX2xsY3Bfc29ja19leGl0KCk7CiYjNDM7CWRlc3Ryb3lfd29ya3F1ZXVlKGxsY3Bfd3EpOwogfQpkaWZmIC0tZ2l0IGEvbmV0L25mYy9sbGNwX3NvY2suYyBiL25ldC9uZmMvbGxjcF9zb2NrLmMKaW5kZXggNTU1OGQ4YTRkNDhiMy4uY2U2ODc1ZWI1OGZiYyAxMDA2NDQKLS0tIGEvbmV0L25mYy9sbGNwX3NvY2suYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmZjL2xsY3Bfc29jay5jCkBAIC0zOTIsMTEgJiM0MzszOTIsMTIgQEAgdm9pZCBuZmNfbGxjcF9hY2NlcHRfdW5saW5rKHN0cnVjdCBzb2NrICpzaykKIAogCXByX2RlYnVnKCYjMzQ7c3RhdGUgJWRcbiYjMzQ7LCBzay0mZ3Q7c2tfc3RhdGUpOwogCi0JbGlzdF9kZWxfaW5pdCgmYW1wO2xsY3Bfc29jay0mZ3Q7YWNjZXB0X3F1ZXVlKTsKLQlza19hY2NlcHRxX3JlbW92ZWQobGxjcF9zb2NrLSZndDtwYXJlbnQpOwotCWxsY3Bfc29jay0mZ3Q7cGFyZW50ID0gTlVMTDsKLQotCXNvY2tfcHV0KHNrKTsKJiM0MzsJaWYgKGxsY3Bfc29jay0mZ3Q7cGFyZW50KSB7CiYjNDM7CQlsaXN0X2RlbF9pbml0KCZhbXA7bGxjcF9zb2NrLSZndDthY2NlcHRfcXVldWUpOwomIzQzOwkJc2tfYWNjZXB0cV9yZW1vdmVkKGxsY3Bfc29jay0mZ3Q7cGFyZW50KTsKJiM0MzsJCWxsY3Bfc29jay0mZ3Q7cGFyZW50ID0gTlVMTDsKJiM0MzsJCXNvY2tfcHV0KHNrKTsKJiM0MzsJfQogfQogCiB2b2lkIG5mY19sbGNwX2FjY2VwdF9lbnF1ZXVlKHN0cnVjdCBzb2NrICpwYXJlbnQsIHN0cnVjdCBzb2NrICpzaykKQEAgLTQyMywxMiAmIzQzOzQyNCwyMCBAQCBzdHJ1Y3Qgc29jayAqbmZjX2xsY3BfYWNjZXB0X2RlcXVldWUoc3RydWN0IHNvY2sgKnBhcmVudCwKIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShsc2ssIG4sICZhbXA7bGxjcF9wYXJlbnQtJmd0O2FjY2VwdF9xdWV1ZSwKIAkJCQkgYWNjZXB0X3F1ZXVlKSB7CiYjNDM7CQlzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsOwomIzQzOwogCQlzayA9ICZhbXA7bHNrLSZndDtzazsKLQkJbG9ja19zb2NrKHNrKTsKJiM0MzsJCWxvY2tfc29ja19uZXN0ZWQoc2ssIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTsKIAogCQlpZiAoc2stJmd0O3NrX3N0YXRlID09IExMQ1BfQ0xPU0VEKSB7Ci0JCQlyZWxlYXNlX3NvY2soc2spOwomIzQzOwkJCWxvY2FsID0gbmZjX2xsY3Bfc29jayhzayktJmd0O2xvY2FsOwomIzQzOwogCQkJbmZjX2xsY3BfYWNjZXB0X3VubGluayhzayk7CiYjNDM7CQkJaWYgKGxvY2FsKQomIzQzOwkJCQluZmNfbGxjcF9zb2NrX3VubGluaygmYW1wO2xvY2FsLSZndDtzb2NrZXRzLCBzayk7CiYjNDM7CQkJc29ja19vcnBoYW4oc2spOwomIzQzOwkJCXJlbGVhc2Vfc29jayhzayk7CiYjNDM7CQkJc29ja19wdXQoc2spOwogCQkJY29udGludWU7CiAJCX0KIApAQCAtNDY0LDcgJiM0Mzs0NzMsNyBAQCBzdGF0aWMgaW50IGxsY3Bfc29ja19hY2NlcHQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2tldCAqbmV3c29jaywKIAogCXByX2RlYnVnKCYjMzQ7cGFyZW50ICVwXG4mIzM0Oywgc2spOwogCi0JbG9ja19zb2NrX25lc3RlZChzaywgU0lOR0xFX0RFUFRIX05FU1RJTkcpOwomIzQzOwlsb2NrX3NvY2soc2spOwogCiAJaWYgKHNrLSZndDtza19zdGF0ZSAhPSBMTENQX0xJU1RFTikgewogCQlyZXQgPSAtRUJBREZEOwpAQCAtNDkwLDcgJiM0Mzs0OTksMTIgQEAgc3RhdGljIGludCBsbGNwX3NvY2tfYWNjZXB0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrZXQgKm5ld3NvY2ssCiAKIAkJcmVsZWFzZV9zb2NrKHNrKTsKIAkJdGltZW8gPSBzY2hlZHVsZV90aW1lb3V0KHRpbWVvKTsKLQkJbG9ja19zb2NrX25lc3RlZChzaywgU0lOR0xFX0RFUFRIX05FU1RJTkcpOwomIzQzOwkJbG9ja19zb2NrKHNrKTsKJiM0MzsKJiM0MzsJCWlmIChzay0mZ3Q7c2tfc3RhdGUgIT0gTExDUF9MSVNURU4pIHsKJiM0MzsJCQlyZXQgPSAtRUJBREZEOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJfQogCX0KIAlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CiAJcmVtb3ZlX3dhaXRfcXVldWUoc2tfc2xlZXAoc2spLCAmYW1wO3dhaXQpOwpAQCAtNjI5LDEzICYjNDM7NjQzLDI0IEBAIHN0YXRpYyBpbnQgbGxjcF9zb2NrX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jaykKIAogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobHNrLCBuLCAmYW1wO2xsY3Bfc29jay0mZ3Q7YWNjZXB0X3F1ZXVlLAogCQkJCQkgYWNjZXB0X3F1ZXVlKSB7CiYjNDM7CQkJYm9vbCBwdXRfY3JlYXRpb24gPSBmYWxzZTsKJiM0MzsKIAkJCWFjY2VwdF9zayA9ICZhbXA7bHNrLSZndDtzazsKLQkJCWxvY2tfc29jayhhY2NlcHRfc2spOwomIzQzOwkJCWxvY2tfc29ja19uZXN0ZWQoYWNjZXB0X3NrLCBTSU5HTEVfREVQVEhfTkVTVElORyk7CiAKLQkJCW5mY19sbGNwX3NlbmRfZGlzY29ubmVjdChsc2spOwotCQkJbmZjX2xsY3BfYWNjZXB0X3VubGluayhhY2NlcHRfc2spOwomIzQzOwkJCWlmIChuZmNfbGxjcF9zb2NrKGFjY2VwdF9zayktJmd0O3BhcmVudCA9PSBzaykgewomIzQzOwkJCQluZmNfbGxjcF9zZW5kX2Rpc2Nvbm5lY3QobHNrKTsKJiM0MzsJCQkJbmZjX2xsY3BfYWNjZXB0X3VubGluayhhY2NlcHRfc2spOwomIzQzOwkJCQluZmNfbGxjcF9zb2NrX3VubGluaygmYW1wO2xvY2FsLSZndDtzb2NrZXRzLCBhY2NlcHRfc2spOwomIzQzOwomIzQzOwkJCQlhY2NlcHRfc2stJmd0O3NrX3N0YXRlID0gTExDUF9DTE9TRUQ7CiYjNDM7CQkJCXNvY2tfb3JwaGFuKGFjY2VwdF9zayk7CiYjNDM7CQkJCXB1dF9jcmVhdGlvbiA9IHRydWU7CiYjNDM7CQkJfQogCiAJCQlyZWxlYXNlX3NvY2soYWNjZXB0X3NrKTsKJiM0MzsJCQlpZiAocHV0X2NyZWF0aW9uKQomIzQzOwkJCQlzb2NrX3B1dChhY2NlcHRfc2spOyAvKiBjcmVhdGlvbiByZWYgKi8KIAkJfQogCX0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwOTowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NzMyCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogNDA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgdGhlIE5GQyBMTENQIFBhdGNoOiBBIFF1aWNrIEFzc2Vzc21lbnQqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBwYXRjaCBhbmQgZmlndXJlIG91dCB0aGUgYmVzdCBhcHByb2FjaCBmb3IgZnV6emluZyBpdC4gRmlyc3QgdGhpbmdzIGZpcnN0OiB0aGUgcGF0Y2ggaW52b2x2ZXMgYG5ldC9uZmMvbGxjcC5oYCwgYG5ldC9uZmMvbGxjcF9jb3JlLmNgLCBhbmQgYG5ldC9uZmMvbGxjcF9zb2NrLmNgLiBUaGF0IHRlbGxzIG1lIHdlJiMzOTtyZSBsb29raW5nIGF0IGZpeGVzIGZvciBjb25jdXJyZW5jeSBhbmQgcmVmY291bnRpbmcgaXNzdWVzIHdpdGhpbiBORkMmIzM5O3MgTExDUCBzb2NrZXQgaGFuZGxpbmcsIHNwZWNpZmljYWxseSBhcm91bmQgZnVuY3Rpb25zIGxpa2UgYG5mY19sbGNwX3NvY2tldF9yZWxlYXNlYCwgYG5mY19sbGNwX3NvY2tfbGlzdF9wb3BgLCB2YXJpb3VzIGxvY2FsIHJlbGVhc2UgYW5kIHB1dCBmdW5jdGlvbnMsIGFjY2VwdC9kZXF1ZXVlIG9wZXJhdGlvbnMsIGFuZCB0aGUgaW50cm9kdWN0aW9uIG9mIGEgd29ya3F1ZXVlIChgbGxjcF93cWApIGZvciBkZWZlcnJlZCBsb2NhbCByZWxlYXNlcy4gVGhlIHNoaWZ0IGZyb20gYGJoX2xvY2tfc29ja2AgdG8gYGxvY2tfc29ja2AgZm9yIHNvY2tldCBsb2NraW5nIGlzIGEga2V5IGluZGljYXRvciBvZiBjb25jdXJyZW5jeSBjb25jZXJucyBiZWluZyBhZGRyZXNzZWQuIFRoZSBmaXggbGlrZWx5IHJldm9sdmVzIGFyb3VuZCBzb2NrX3B1dCBhbmQgc29ja19vcnBoYW4uCgpOb3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBjYW4gd2UgZXZlbiByZWFjaCB0aGlzIGNvZGUgd2l0aCBmdXp6aW5nPyBHb29kIG5ld3MsIGl0IGxvb2tzIGxpa2Ugc3l6a2FsbGVyIGFscmVhZHkgaGVhdmlseSBleGVyY2lzZXMgTkZDIGFuZCBMTENQIHNvY2tldHMuIFRoYXQgbWVhbnMgd2UgaGF2ZSBhIGNsZWFyIHBhdGggdXNpbmcgcmF3IHNvY2tldHMsIHZpcnR1YWwgZGV2aWNlcywgbmV0bGluayBpbnRlcmZhY2VzLCBhbmQgc3RhbmRhcmQgc29ja2V0IHN5c2NhbGxzLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgZnV6emluZyEKClRpbWUgdG8gY2hlY2sgdGhlIEtjb25maWcgc2V0dGluZ3MgaW4gYG5ldC9uZmMvYC4gR290dGEgY29uZmlybSB0aGUgcmVsZXZhbnQgb3B0aW9ucyBhcmUgZW5hYmxlZCBpbiBvdXIgZnV6emluZyBlbnZpcm9ubWVudC4gQmFzZWQgb24gdGhlIGZpbGUgY29udGV4dCwgdGhlIG1haW4gc3ltYm9scyBzaG91bGQgYmUgdGhlIGZ1bmN0aW9ucyBkZXNjcmliZWQgYWJvdmUuIEkgd2lsbCBuZWVkIHRvIGlkZW50aWZ5IHRoZSBmb2N1cyBzeW1ib2xzIGZvciB0aGlzIGFuYWx5c2lzLiBXaXRoIHRoaXMgaW5mb3JtYXRpb24sIEkgY2FuIGNyZWF0ZSBhbiBpbml0aWFsIGZ1enppbmcgY29uZmlnLCB3aGljaCBJIHdpbGwgdGhlbiByZWZpbmUgYmFzZWQgb24gZnV6emluZyByZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA5OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORkMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmZjJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZmMvS2NvbmZpZy01LVxubmV0L25mYy9LY29uZmlnOjY6bWVudWNvbmZpZyBORkNcbm5ldC9uZmMvS2NvbmZpZy03LVx0ZGVwZW5kcyBvbiBSRktJTEwgfHwgIVJGS0lMTFxuLS1cbm5ldC9uZmMvS2NvbmZpZy0xNi1cbm5ldC9uZmMvS2NvbmZpZzoxNzpjb25maWcgTkZDX0RJR0lUQUxcbm5ldC9uZmMvS2NvbmZpZy0xOC1cdGRlcGVuZHMgb24gTkZDXG4tLVxubmV0L25mYy9oY2kvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxubmV0L25mYy9oY2kvS2NvbmZpZzoyOmNvbmZpZyBORkNfSENJXG5uZXQvbmZjL2hjaS9LY29uZmlnLTMtXHRkZXBlbmRzIG9uIE5GQ1xuLS1cbm5ldC9uZmMvaGNpL0tjb25maWctMTAtXG5uZXQvbmZjL2hjaS9LY29uZmlnOjExOmNvbmZpZyBORkNfU0hETENcbm5ldC9uZmMvaGNpL0tjb25maWctMTItXHRkZXBlbmRzIG9uIE5GQ19IQ0lcbi0tXG5uZXQvbmZjL25jaS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5uZXQvbmZjL25jaS9LY29uZmlnOjI6Y29uZmlnIE5GQ19OQ0lcbm5ldC9uZmMvbmNpL0tjb25maWctMy1cdGRlcGVuZHMgb24gTkZDXG4tLVxubmV0L25mYy9uY2kvS2NvbmZpZy0xMi1cbm5ldC9uZmMvbmNpL0tjb25maWc6MTM6Y29uZmlnIE5GQ19OQ0lfU1BJXG5uZXQvbmZjL25jaS9LY29uZmlnLTE0LVx0ZGVwZW5kcyBvbiBORkNfTkNJIFx1MDAyNlx1MDAyNiBTUElcbi0tXG5uZXQvbmZjL25jaS9LY29uZmlnLTIzLVxubmV0L25mYy9uY2kvS2NvbmZpZzoyNDpjb25maWcgTkZDX05DSV9VQVJUXG5uZXQvbmZjL25jaS9LY29uZmlnLTI1LVx0ZGVwZW5kcyBvbiBORkNfTkNJIFx1MDAyNlx1MDAyNiBUVFlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwOTowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2OTM5CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgaXQ6CgoqKkRpdmluZyBpbnRvIHRoZSBORkMgRHJpdmVyIENvbmZpZ3VyYXRpb24qKgoKT2theSwgdGltZSB0byBnZXQgYSBoYW5kbGUgb24gdGhlIE5GQyBkcml2ZXIgc2l0dWF0aW9uLiBJJiMzOTtsbCBzdGFydCBieSB0YWtpbmcgYSBsb29rIGF0IGBuZXQvbmZjL0tjb25maWdgLiBUaGF0JiMzOTtzIHdoZXJlIGFsbCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBkZWZpbmVkLCByaWdodD8gSSB3YW50IHRvIHNlZSB3aGF0IGZlYXR1cmVzIGFyZSBhdmFpbGFibGUsIHdoYXQgZGVwZW5kZW5jaWVzIHRoZXJlIGFyZSwgYW5kIHdoYXQgdGhlIGRlZmF1bHQgc2V0dGluZ3MgbWlnaHQgYmUuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIG92ZXJ2aWV3IG9mIHRoZSBkZXNpZ24gc3BhY2UgYW5kIGhvdyBtdWNoIGZsZXhpYmlsaXR5IHdlIGhhdmUuIFRoZW4sIEkmIzM5O2xsIG1vdmUgb24gdG8gYG5ldC9uZmMvTWFrZWZpbGVgLiBUaGF0IHdpbGwgc2hvdyBtZSBob3cgdGhlIGRpZmZlcmVudCBzb3VyY2UgZmlsZXMgYXJlIGNvbXBpbGVkIGFuZCBsaW5rZWQsIHRoZSBidWlsZCB0YXJnZXRzLCBhbmQgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGJhc2VkIG9uIHRob3NlIEtjb25maWcgb3B0aW9ucyBJIGp1c3QgbG9va2VkIGF0LiBVbmRlcnN0YW5kaW5nIHRoZSBidWlsZCBwcm9jZXNzIGlzIGNyaXRpY2FsLCBlc3BlY2lhbGx5IHdoZW4gSSBnZXQgaW50byBjdXN0b21pemF0aW9uIGFuZCBwb3RlbnRpYWxseSBwYXRjaGluZyB0aGUgY29kZS4gSG9wZWZ1bGx5LCB0aGVzZSB0d28gZmlsZXMgd2lsbCBnaXZlIG1lIGEgc29saWQgZm91bmRhdGlvbiBmb3IgdW5kZXJzdGFuZGluZyB0aGUgZXhpc3RpbmcgTkZDIGRyaXZlciBpbmZyYXN0cnVjdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwOTowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZmMvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCNcbiAgIDM6XHQjIE5GQyBzdWJzeXN0ZW0gY29uZmlndXJhdGlvblxuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRtZW51Y29uZmlnIE5GQ1xuICAgNzpcdFx0ZGVwZW5kcyBvbiBSRktJTEwgfHwgIVJGS0lMTFxuICAgODpcdFx0dHJpc3RhdGUgXCYjMzQ7TkZDIHN1YnN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4gICA5Olx0XHRkZWZhdWx0IG5cbiAgMTA6XHRcdGhlbHBcbiAgMTE6XHRcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBidWlsZCBzdXBwb3J0IGZvciBORkMgKE5lYXIgZmllbGRcbiAgMTI6XHRcdCAgY29tbXVuaWNhdGlvbikgZGV2aWNlcy5cbiAgMTM6XHRcbiAgMTQ6XHRcdCAgVG8gY29tcGlsZSB0aGlzIHN1cHBvcnQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbFxuICAxNTpcdFx0ICBiZSBjYWxsZWQgbmZjLlxuICAxNjpcdFxuICAxNzpcdGNvbmZpZyBORkNfRElHSVRBTFxuICAxODpcdFx0ZGVwZW5kcyBvbiBORkNcbiAgMTk6XHRcdHNlbGVjdCBDUkNfQ0NJVFRcbiAgMjA6XHRcdHNlbGVjdCBDUkNfSVRVX1RcbiAgMjE6XHRcdHRyaXN0YXRlIFwmIzM0O05GQyBEaWdpdGFsIFByb3RvY29sIHN0YWNrIHN1cHBvcnRcJiMzNDtcbiAgMjI6XHRcdGRlZmF1bHQgblxuICAyMzpcdFx0aGVscFxuICAyNDpcdFx0ICBTYXkgWSBpZiB5b3Ugd2FudCB0byBidWlsZCBORkMgZGlnaXRhbCBwcm90b2NvbCBzdGFjayBzdXBwb3J0LlxuICAyNTpcdFx0ICBUaGlzIGlzIG5lZWRlZCBieSBORkMgY2hpcHNldHMgd2hvc2UgZmlybXdhcmUgb25seSBpbXBsZW1lbnRcbiAgMjY6XHRcdCAgdGhlIE5GQyBhbmFsb2cgbGF5ZXIuXG4gIDI3Olx0XG4gIDI4Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBzdXBwb3J0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGxcbiAgMjk6XHRcdCAgYmUgY2FsbGVkIG5mY19kaWdpdGFsLlxuICAzMDpcdFxuICAzMTpcdHNvdXJjZSBcJiMzNDtuZXQvbmZjL25jaS9LY29uZmlnXCYjMzQ7XG4gIDMyOlx0c291cmNlIFwmIzM0O25ldC9uZmMvaGNpL0tjb25maWdcJiMzNDtcbiAgMzM6XHRcbiAgMzQ6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZmMvS2NvbmZpZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA5OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc2MDgKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgdGhlIGBuZXQvbmZjL01ha2VmaWxlYCoqCgpPa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGUgYG5ldC9uZmMvTWFrZWZpbGVgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGdvaW5nIG9uIHdpdGggdGhlIE5GQyBzdGFjayBidWlsZC4gVGhpcyBpcyB0aGUgY2VudHJhbCBwb2ludCBmb3IgY29udHJvbGxpbmcgaG93IHRoZSBORkMga2VybmVsIG1vZHVsZXMgYXJlIGJ1aWx0LCBsaW5rZWQsIGFuZCBpbmNsdWRlZC4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IHNjYW4gaXQgdG8gZ3Jhc3AgdGhlIG92ZXJhbGwgc3RydWN0dXJlLiBJJiMzOTtsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBjb25kaXRpb25hbCBsb2dpYywgZXNwZWNpYWxseSBhcm91bmQga2VybmVsIHZlcnNpb24gY2hlY2tzLCBLY29uZmlnIG9wdGlvbnMsIGFuZCB0YXJnZXQtc3BlY2lmaWMgY29uZmlndXJhdGlvbnMsIGFzIHRoZXNlIGFyZSBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyBwb3J0YWJpbGl0eSBhbmQgZmVhdHVyZSBlbmFibGVtZW50LiBJJiMzOTttIGFsc28gbG9va2luZyBmb3IgZGVwZW5kZW5jaWVzIOKAkyB3aGF0IG90aGVyIE1ha2VmaWxlcyBvciBzb3VyY2UgZmlsZXMgYXJlIGluY2x1ZGVkLCBhbmQgd2hhdCBsaWJyYXJpZXMgYXJlIGxpbmtlZD8gS25vd2luZyB0aGlzIHdpbGwgaGVscCBpZGVudGlmeSBhbnkgcG90ZW50aWFsIGNvbmZsaWN0cyBvciBhcmVhcyB0aGF0IG5lZWQgbW9kaWZpY2F0aW9uIGZvciBteSBzcGVjaWZpYyBwbGF0Zm9ybS4gVWx0aW1hdGVseSwgSSYjMzk7bSBhaW1pbmcgdG8gZ2FpbiBhIHNvbGlkIGdyYXNwIG9mIHRoaXMgTWFrZWZpbGUmIzM5O3Mgcm9sZSBpbiB0aGUgbGFyZ2VyIGtlcm5lbCBidWlsZCBwcm9jZXNzIGFuZCBpZGVudGlmeSBhbnkgYXJlYXMgdGhhdCBtaWdodCBhZmZlY3QgbXkgYXJlYSBvZiB3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA5OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25mYy9NYWtlZmlsZSYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHQjXG4gICAzOlx0IyBNYWtlZmlsZSBmb3IgdGhlIExpbnV4IE5GQyBzdWJzeXN0ZW0uXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdG9iai0kKENPTkZJR19ORkMpICYjNDM7PSBuZmMub1xuICAgNzpcdG9iai0kKENPTkZJR19ORkNfTkNJKSAmIzQzOz0gbmNpL1xuICAgODpcdG9iai0kKENPTkZJR19ORkNfSENJKSAmIzQzOz0gaGNpL1xuICAgOTpcdG9iai0kKENPTkZJR19ORkNfRElHSVRBTCkgJiM0Mzs9IG5mY19kaWdpdGFsLm9cbiAgMTA6XHRcbiAgMTE6XHRuZmMtb2JqcyA6PSBjb3JlLm8gbmV0bGluay5vIGFmX25mYy5vIHJhd3NvY2subyBsbGNwX2NvcmUubyBsbGNwX2NvbW1hbmRzLm8gXFxcbiAgMTI6XHRcdFx0bGxjcF9zb2NrLm9cbiAgMTM6XHRcbiAgMTQ6XHRuZmNfZGlnaXRhbC1vYmpzIDo9IGRpZ2l0YWxfY29yZS5vIGRpZ2l0YWxfdGVjaG5vbG9neS5vIGRpZ2l0YWxfZGVwLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwOTowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MDg5CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhpbmtpbmcgcHJvY2VzczoKCioqSW52ZXN0aWdhdGluZyBORkMgTW9kdWxlIERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyBgbGxjcF9jb3JlLm9gIGFuZCBgbGxjcF9zb2NrLm9gIGFyZSBjbGVhcmx5IHBhcnQgb2YgdGhlIE5GQyBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBuZmMtb2Jqc2AgbGlzdC4gVGhhdCBtYWtlcyBzZW5zZSwgZXNwZWNpYWxseSBnaXZlbiB0aGVpciBuYW1lcy4gU2luY2UgSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYnVpbGQgc3lzdGVtLCBteSBuZXh0IHN0ZXAgaXMgdG8gZmlndXJlIG91dCB0aGUgbGFyZ2VyIGRlcGVuZGVuY2llcy4gSSBrbm93IE5GQyBpcyBhIGNvbmZpZ3VyYWJsZSBmZWF0dXJlLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBBcmUgdGhlcmUgb3RoZXIgcmVsYXRlZCBjb25maWd1cmF0aW9ucyBsaWtlIGBDT05GSUdfTkZDX1NJTWAgb3IganVzdCBgQ09ORklHX05GQ2AgdGhhdCBjb250cm9sIHdoZXRoZXIgdGhlc2UgbW9kdWxlcyBnZXQgY29tcGlsZWQgaW4/IEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB3aGF0IHR1cm5zIG9uIHRoZSBidWlsZCBmb3IgdGhvc2Ugb2JqZWN0cywgYW5kIHRoZSBiZXN0IHBsYWNlIHRvIGRvIHRoYXQgaXMgcHJvYmFibHkgdGhlIEtjb25maWcgZmlsZXMuIFRoZSBvbmUgaW4gYGRyaXZlcnMvbmZjL0tjb25maWdgIHNlZW1zIGxpa2UgdGhlIG9idmlvdXMgcGxhY2UgdG8gc3RhcnQuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBpbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDk6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25mYy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgTmVhciBGaWVsZCBDb21tdW5pY2F0aW9uIChORkMpIGRldmljZXNcbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0bWVudSBcJiMzNDtOZWFyIEZpZWxkIENvbW11bmljYXRpb24gKE5GQykgZGV2aWNlc1wmIzM0O1xuICAgNzpcdFx0ZGVwZW5kcyBvbiBORkNcbiAgIDg6XHRcbiAgIDk6XHRjb25maWcgTkZDX1RSRjc5NzBBXG4gIDEwOlx0XHR0cmlzdGF0ZSBcJiMzNDtUZXhhcyBJbnN0cnVtZW50cyBUUkY3OTcwYSBORkMgZHJpdmVyXCYjMzQ7XG4gIDExOlx0XHRkZXBlbmRzIG9uIFNQSSBcdTAwMjZcdTAwMjYgTkZDX0RJR0lUQUwgXHUwMDI2XHUwMDI2IEdQSU9MSUJcbiAgMTI6XHRcdGhlbHBcbiAgMTM6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgTkZDIGRyaXZlciBmb3IgVGV4YXMgSW5zdHJ1bWVudHMmIzM5OyBUUkY3OTcwYVxuICAxNDpcdFx0ICBkZXZpY2UuIFN1Y2ggZGV2aWNlIHN1cHBvcnRzIDUgZGlmZmVyZW50IHByb3RvY29sczogSVNPMTQ0NDNBLFxuICAxNTpcdFx0ICBJU08xNDQ0M0IsIEZlTGlDYSwgSVNPMTU2OTMgYW5kIElTTzE4MDAwLTMuXG4gIDE2Olx0XG4gIDE3Olx0XHQgIFNheSBZIGhlcmUgdG8gY29tcGlsZSBzdXBwb3J0IGZvciBUUkY3OTcwYSBpbnRvIHRoZSBrZXJuZWwgb3JcbiAgMTg6XHRcdCAgc2F5IE0gIHRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUuIFRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWRcbiAgMTk6XHRcdCAgdHJmNzk3MGEua28uXG4gIDIwOlx0XG4gIDIxOlx0Y29uZmlnIE5GQ19NRUlfUEhZXG4gIDIyOlx0XHR0cmlzdGF0ZSBcJiMzNDtNRUkgYnVzIE5GQyBkZXZpY2Ugc3VwcG9ydFwmIzM0O1xuICAyMzpcdFx0ZGVwZW5kcyBvbiBJTlRFTF9NRUkgXHUwMDI2XHUwMDI2IE5GQ19IQ0lcbiAgMjQ6XHRcdGhlbHBcbiAgMjU6XHRcdCAgVGhpcyBhZGRzIHN1cHBvcnQgdG8gdXNlIGFuIG1laSBidXMgbmZjIGRldmljZS4gU2VsZWN0IHRoaXMgaWYgeW91XG4gIDI2Olx0XHQgIHdpbGwgdXNlIGFuIEhDSSBORkMgZHJpdmVyIGZvciBhbiBORkMgY2hpcCBjb25uZWN0ZWQgYmVoaW5kIGFuXG4gIDI3Olx0XHQgIEludGVsJiMzOTtzIE1hbmFnZW1lbnQgRW5naW5lIGNoaXAuXG4gIDI4Olx0XG4gIDI5Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDMwOlx0XG4gIDMxOlx0Y29uZmlnIE5GQ19TSU1cbiAgMzI6XHRcdHRyaXN0YXRlIFwmIzM0O05GQyBoYXJkd2FyZSBzaW11bGF0b3IgZHJpdmVyXCYjMzQ7XG4gIDMzOlx0XHRkZXBlbmRzIG9uIE5GQ19ESUdJVEFMXG4gIDM0Olx0XHRoZWxwXG4gIDM1Olx0XHQgIFRoaXMgZHJpdmVyIGRlY2xhcmVzIHR3byB2aXJ0dWFsIE5GQyBkZXZpY2VzIHN1cHBvcnRpbmcgTkZDLURFUFxuICAzNjpcdFx0ICBwcm90b2NvbC4gQW4gTExDUCBjb25uZWN0aW9uIGNhbiBiZSBlc3RhYmxpc2hlZCBiZXR3ZWVuIHRoZW0gYW5kXG4gIDM3Olx0XHQgIGFsbCBwYWNrZXRzIHNlbnQgZnJvbSBvbmUgZGV2aWNlIGlzIHNlbnQgYmFjayB0byB0aGUgb3RoZXIsIGFjdGluZyBhc1xuICAzODpcdFx0ICBsb29wYmFjayBkZXZpY2VzLlxuICAzOTpcdFxuICA0MDpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICA0MTpcdFxuICA0MjpcdGNvbmZpZyBORkNfUE9SVDEwMFxuICA0MzpcdFx0dHJpc3RhdGUgXCYjMzQ7U29ueSBORkMgUG9ydC0xMDAgU2VyaWVzIFVTQiBkZXZpY2Ugc3VwcG9ydFwmIzM0O1xuICA0NDpcdFx0ZGVwZW5kcyBvbiBVU0JcbiAgNDU6XHRcdGRlcGVuZHMgb24gTkZDX0RJR0lUQUxcbiAgNDY6XHRcdGhlbHBcbiAgNDc6XHRcdCAgVGhpcyBhZGRzIHN1cHBvcnQgZm9yIFNvbnkgUG9ydC0xMDAgY2hpcCBiYXNlZCBVU0IgZGV2aWNlcyBzdWNoIGFzIHRoZVxuICA0ODpcdFx0ICBSQy1TMzgwIGRvbmdsZS5cbiAgNDk6XHRcbiAgNTA6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgNTE6XHRcbiAgNTI6XHRjb25maWcgTkZDX1ZJUlRVQUxfTkNJXG4gIDUzOlx0XHR0cmlzdGF0ZSBcJiMzNDtOQ0kgZGV2aWNlIHNpbXVsYXRvciBkcml2ZXJcJiMzNDtcbiAgNTQ6XHRcdGRlcGVuZHMgb24gTkZDX05DSVxuICA1NTpcdFx0aGVscFxuICA1NjpcdFx0ICBOQ0kgdmlydHVhbCBkZXZpY2Ugc2ltdWxhdGVzIGEgTkNJIGRldmljZSB0byB0aGUgdXNlci5cbiAgNTc6XHRcdCAgSXQgY2FuIGJlIHVzZWQgdG8gdmFsaWRhdGUgdGhlIE5DSSBtb2R1bGUgYW5kIGFwcGxpY2F0aW9ucy5cbiAgNTg6XHRcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgY29tbXVuaWNhdGlvbiBiZXR3ZWVuIHRoZSB2aXJ0dWFsIE5DSSBkZXZpY2UgYW5kXG4gIDU5Olx0XHQgIG1vZHVsZS5cbiAgNjA6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDk6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTI0NgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDM0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoJiMzOTtzIEltcGFjdCBvbiB0aGUgTkZDIExMQ1AgU3Vic3lzdGVtKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHF1aWNrbHkgaWRlbnRpZnkgd2hpY2ggc3ltYm9scyBoYXZlIGJlZW4gdG91Y2hlZC4gVGhlIG1vZGlmaWNhdGlvbiBpcyBpbiBgbmV0L25mYy9sbGNwX2NvcmUuY2AgYW5kIGBuZXQvbmZjL2xsY3Bfc29jay5jYC4gSSBzZWUgYSBtaXggb2Ygc3RhdGljIGFuZCBub24tc3RhdGljIGZ1bmN0aW9ucy4gU3BlY2lmaWNhbGx5LCB0aGUgbGlzdCBvZiBmdW5jdGlvbnMgaW4gYG5ldC9uZmMvbGxjcF9jb3JlLmNgIGhhcyBjYXVnaHQgbXkgZXllOiBgbmZjX2xsY3Bfc29ja19saXN0X3BvcGAsIGBuZmNfbGxjcF9zb2NrZXRfcmVsZWFzZWAsIGBuZmNfbGxjcF9sb2NhbF9nZXRgLCBgbG9jYWxfY2xlYW51cGAsIGBsb2NhbF9yZWxlYXNlX3dvcmtgLCBgbG9jYWxfcmVsZWFzZWAgYXJlIGFsbCBzdGF0aWMgYW5kIHNlZW0gZmFpcmx5IGNvbnRhaW5lZC4gSSB3aWxsIHdhbnQgdG8gY2hlY2sgaG93IHRoZXNlIHN0YXRpYyBpbnRlcm5hbCBmdW5jdGlvbnMgcmVsYXRlIHRvIHRoZSBvdmVyYWxsIGZsb3cgd2l0aGluIGVhY2ggZmlsZSwgYW5kIHBvc3NpYmx5LCBhY3Jvc3MgZWFjaCBvZiB0aGVzZSBmaWxlcy4KCk9uIHRoZSBvdGhlciBoYW5kLCBgbmZjX2xsY3BfbG9jYWxfcHV0YCBpcyBub24tc3RhdGljLCBzbyBpdCYjMzk7cyBwb3RlbnRpYWxseSBleHBvcnRlZCBvciBhdCBsZWFzdCB1c2VkIGFjcm9zcyBmaWxlcy4gVGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGEgY2xvc2VyIGxvb2ssIGFzIGlzIGBuZmNfbGxjcF9yZWdpc3Rlcl9kZXZpY2VgIGFuZCB0aGUgbW9kdWxlIGluaXRpYWxpemF0aW9uIGFuZCBleGl0IGZ1bmN0aW9ucyBgbmZjX2xsY3BfaW5pdGAgYW5kIGBuZmNfbGxjcF9leGl0YC4gSSYjMzk7bGwgd2FudCB0byB2ZXJpZnkgd2hhdCYjMzk7cyBjaGFuZ2VkIGluIHRob3NlIGluaXQvZXhpdCBjYWxscy4KClRoZW4sIG92ZXIgaW4gYG5ldC9uZmMvbGxjcF9zb2NrLmNgLCBJIHNlZSBgbmZjX2xsY3BfYWNjZXB0X3VubGlua2AgYW5kIGBuZmNfbGxjcF9hY2NlcHRfZGVxdWV1ZWAgYXJlIG5vbi1zdGF0aWMgYXMgd2VsbC4gQWxzbywgdGhlIHR3byBzdGF0aWMgZnVuY3Rpb25zIGBsbGNwX3NvY2tfYWNjZXB0YCBhbmQgYGxsY3Bfc29ja19yZWxlYXNlYCB1c2UgdGhlIGBwcm90b19vcHNgIHdoaWNoIGFyZSBsaWtlbHkgcG9pbnRlcnMgdG8gdGhlIGBuZmNfbGxjcF9hY2NlcHRgIGZ1bmN0aW9ucy4gVGhlc2UgdHdvIGFyZSB1c2VkIGFzIHBhcnQgb2YgdGhlIHNvY2tldCBvcGVyYXRpb25zLCB3aGljaCB3YXJyYW50cyBmdXJ0aGVyIGFuYWx5c2lzLgoKTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwcy4gTGV0JiMzOTtzIHNlZSBob3cgYG5mY19sbGNwX3NvY2tldF9yZWxlYXNlYCBpcyBiZWluZyB1c2VkIGluIHRoZSBjb250ZXh0IG9mIHNvY2tldCBvcGVyYXRpb25zLiBJIHNob3VsZCBzdGFydCBieSBncmVwcGluZyB0aGUgY29kZWJhc2UgZm9yIHRoZXNlIGNyaXRpY2FsIGZ1bmN0aW9uczogYG5mY19sbGNwX2xvY2FsX3B1dGAsIGBuZmNfbGxjcF9hY2NlcHRfdW5saW5rYCwgYW5kIGBuZmNfbGxjcF9hY2NlcHRfZGVxdWV1ZWAgdG8gc2VlIHdoZXJlIHRoZXkmIzM5O3JlIGNhbGxlZCBhbmQgaG93IHRoZXkgaW50ZXJhY3QuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIHBpY3R1cmUgb2YgdGhlIGZ1bmN0aW9uYWwgaW1wYWN0IG9mIHRoaXMgcGF0Y2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA5OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mY19sbGNwXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDE0NjggbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbm5ldC9uZmMvY29yZS5jPTI4MD1pbnQgbmZjX2RlcF9saW5rX3VwKHN0cnVjdCBuZmNfZGV2ICpkZXYsIGludCB0YXJnZXRfaW5kZXgsIHU4IGNvbW1fbW9kZSlcbi0tXG5uZXQvbmZjL2NvcmUuYy0zMDMtXG5uZXQvbmZjL2NvcmUuYzozMDQ6XHRnYiA9IG5mY19sbGNwX2dlbmVyYWxfYnl0ZXMoZGV2LCBcdTAwMjZnYl9sZW4pO1xubmV0L25mYy9jb3JlLmMtMzA1LVx0aWYgKGdiX2xlbiBcdTAwM2UgTkZDX01BWF9HVF9MRU4pIHtcbi0tXG5uZXQvbmZjL2NvcmUuYz0zMjc9aW50IG5mY19kZXBfbGlua19kb3duKHN0cnVjdCBuZmNfZGV2ICpkZXYpXG4tLVxubmV0L25mYy9jb3JlLmMtMzUyLVx0XHRkZXYtXHUwMDNlcmZfbW9kZSA9IE5GQ19SRl9OT05FO1xubmV0L25mYy9jb3JlLmM6MzUzOlx0XHRuZmNfbGxjcF9tYWNfaXNfZG93bihkZXYpO1xubmV0L25mYy9jb3JlLmMtMzU0LVx0XHRuZmNfZ2VubF9kZXBfbGlua19kb3duX2V2ZW50KGRldik7XG4tLVxubmV0L25mYy9jb3JlLmM9MzYzPWludCBuZmNfZGVwX2xpbmtfaXNfdXAoc3RydWN0IG5mY19kZXYgKmRldiwgdTMyIHRhcmdldF9pZHgsXG4tLVxubmV0L25mYy9jb3JlLmMtMzgwLVxubmV0L25mYy9jb3JlLmM6MzgxOlx0bmZjX2xsY3BfbWFjX2lzX3VwKGRldiwgdGFyZ2V0X2lkeCwgY29tbV9tb2RlLCByZl9tb2RlKTtcbm5ldC9uZmMvY29yZS5jLTM4Mi1cbi0tXG5uZXQvbmZjL2NvcmUuYz02Mzk9aW50IG5mY19zZXRfcmVtb3RlX2dlbmVyYWxfYnl0ZXMoc3RydWN0IG5mY19kZXYgKmRldiwgY29uc3QgdTggKmdiLCB1OCBnYl9sZW4pXG4tLVxubmV0L25mYy9jb3JlLmMtNjQyLVxubmV0L25mYy9jb3JlLmM6NjQzOlx0cmV0dXJuIG5mY19sbGNwX3NldF9yZW1vdGVfZ2IoZGV2LCBnYiwgZ2JfbGVuKTtcbm5ldC9uZmMvY29yZS5jLTY0NC19XG4tLVxubmV0L25mYy9jb3JlLmM9NjQ3PXU4ICpuZmNfZ2V0X2xvY2FsX2dlbmVyYWxfYnl0ZXMoc3RydWN0IG5mY19kZXYgKmRldiwgc2l6ZV90ICpnYl9sZW4pXG4tLVxubmV0L25mYy9jb3JlLmMtNjUwLVxubmV0L25mYy9jb3JlLmM6NjUxOlx0cmV0dXJuIG5mY19sbGNwX2dlbmVyYWxfYnl0ZXMoZGV2LCBnYl9sZW4pO1xubmV0L25mYy9jb3JlLmMtNjUyLX1cbi0tXG5uZXQvbmZjL2NvcmUuYz02NTU9aW50IG5mY190bV9kYXRhX3JlY2VpdmVkKHN0cnVjdCBuZmNfZGV2ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L25mYy9jb3JlLmMtNjYyLVxubmV0L25mYy9jb3JlLmM6NjYzOlx0cmV0dXJuIG5mY19sbGNwX2RhdGFfcmVjZWl2ZWQoZGV2LCBza2IpO1xubmV0L25mYy9jb3JlLmMtNjY0LX1cbi0tXG5uZXQvbmZjL2NvcmUuYz0xMTEwPWludCBuZmNfcmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCBuZmNfZGV2ICpkZXYpXG4tLVxubmV0L25mYy9jb3JlLmMtMTEyMy1cbm5ldC9uZmMvY29yZS5jOjExMjQ6XHRyYyA9IG5mY19sbGNwX3JlZ2lzdGVyX2RldmljZShkZXYpO1xubmV0L25mYy9jb3JlLmMtMTEyNS1cdGlmIChyYylcbi0tXG5uZXQvbmZjL2NvcmUuYz0xMTg2PXZvaWQgbmZjX3JlbW92ZV9kZXZpY2Uoc3RydWN0IG5mY19kZXYgKmRldilcbi0tXG5uZXQvbmZjL2NvcmUuYy0xMTkyLVxubmV0L25mYy9jb3JlLmM6MTE5MzpcdG5mY19sbGNwX3VucmVnaXN0ZXJfZGV2aWNlKGRldik7XG5uZXQvbmZjL2NvcmUuYy0xMTk0LVxuLS1cbm5ldC9uZmMvY29yZS5jPTEyMTQ9c3RhdGljIGludCBfX2luaXQgbmZjX2luaXQodm9pZClcbi0tXG5uZXQvbmZjL2NvcmUuYy0xMjM0LVxubmV0L25mYy9jb3JlLmM6MTIzNTpcdHJjID0gbmZjX2xsY3BfaW5pdCgpO1xubmV0L25mYy9jb3JlLmMtMTIzNi1cdGlmIChyYylcbi0tXG5uZXQvbmZjL2NvcmUuYy0xMjQ1LWVycl9hZl9uZmM6XG5uZXQvbmZjL2NvcmUuYzoxMjQ2Olx0bmZjX2xsY3BfZXhpdCgpO1xubmV0L25mYy9jb3JlLmMtMTI0Ny1lcnJfbGxjcF9zb2NrOlxuLS1cbm5ldC9uZmMvY29yZS5jPTEyNTY9c3RhdGljIHZvaWQgX19leGl0IG5mY19leGl0KHZvaWQpXG4tLVxubmV0L25mYy9jb3JlLmMtMTI1OC1cdGFmX25mY19leGl0KCk7XG5uZXQvbmZjL2NvcmUuYzoxMjU5Olx0bmZjX2xsY3BfZXhpdCgpO1xubmV0L25mYy9jb3JlLmMtMTI2MC1cdHJhd3NvY2tfZXhpdCgpO1xuLS1cbm5ldC9uZmMvbGxjcC5oPTY9ZW51bSBsbGNwX3N0YXRlIHtcbi0tXG5uZXQvbmZjL2xsY3AuaC0yOS1cbm5ldC9uZmMvbGxjcC5oOjMwOnN0cnVjdCBuZmNfbGxjcF9zb2NrO1xubmV0L25mYy9sbGNwLmgtMzEtXG5uZXQvbmZjL2xsY3AuaD0zMj1zdHJ1Y3QgbGxjcF9zb2NrX2xpc3Qge1xuLS1cbm5ldC9uZmMvbGxjcC5oLTM2LVxubmV0L25mYy9sbGNwLmg6Mzc6c3RydWN0IG5mY19sbGNwX3NkcF90bHYge1xubmV0L25mYy9sbGNwLmgtMzgtXHR1OCAqdGx2O1xuLS1cbm5ldC9uZmMvbGxjcC5oLTQ5LVxubmV0L25mYy9sbGNwLmg6NTA6c3RydWN0IG5mY19sbGNwX2xvY2FsIHtcbm5ldC9uZmMvbGxjcC5oLTUxLVx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xuLS1cbm5ldC9uZmMvbGxjcC5oLTEwMi1cbm5ldC9uZmMvbGxjcC5oOjEwMzpzdHJ1Y3QgbmZjX2xsY3Bfc29jayB7XG5uZXQvbmZjL2xsY3AuaC0xMDQtXHRzdHJ1Y3Qgc29jayBzaztcbm5ldC9uZmMvbGxjcC5oLTEwNS1cdHN0cnVjdCBuZmNfZGV2ICpkZXY7XG5uZXQvbmZjL2xsY3AuaDoxMDY6XHRzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsO1xubmV0L25mYy9sbGNwLmgtMTA3LVx0dTMyIHRhcmdldF9pZHg7XG4tLVxubmV0L25mYy9sbGNwLmgtMTQxLVxubmV0L25mYy9sbGNwLmg6MTQyOnN0cnVjdCBuZmNfbGxjcF91aV9jYiB7XG5uZXQvbmZjL2xsY3AuaC0xNDMtXHRfX3U4IGRzYXA7XG4tLVxubmV0L25mYy9sbGNwLmgtMTQ2LVxubmV0L25mYy9sbGNwLmg6MTQ3OiNkZWZpbmUgbmZjX2xsY3BfdWlfc2tiX2NiKF9fc2tiKSAoKHN0cnVjdCBuZmNfbGxjcF91aV9jYiAqKVx1MDAyNigoX19za2IpLVx1MDAzZWNiWzBdKSlcbm5ldC9uZmMvbGxjcC5oLTE0OC1cbm5ldC9uZmMvbGxjcC5oOjE0OTojZGVmaW5lIG5mY19sbGNwX3NvY2soc2spICgoc3RydWN0IG5mY19sbGNwX3NvY2sgKikgKHNrKSlcbm5ldC9uZmMvbGxjcC5oOjE1MDojZGVmaW5lIG5mY19sbGNwX2RldihzaykgIChuZmNfbGxjcF9zb2NrKChzaykpLVx1MDAzZWRldilcbm5ldC9uZmMvbGxjcC5oLTE1MS1cbi0tXG5uZXQvbmZjL2xsY3AuaC0yMDAtXG5uZXQvbmZjL2xsY3AuaDoyMDE6dm9pZCBuZmNfbGxjcF9zb2NrX2xpbmsoc3RydWN0IGxsY3Bfc29ja19saXN0ICpsLCBzdHJ1Y3Qgc29jayAqcyk7XG5uZXQvbmZjL2xsY3AuaDoyMDI6dm9pZCBuZmNfbGxjcF9zb2NrX3VubGluayhzdHJ1Y3QgbGxjcF9zb2NrX2xpc3QgKmwsIHN0cnVjdCBzb2NrICpzKTtcbm5ldC9uZmMvbGxjcC5oOjIwMzp2b2lkIG5mY19sbGNwX3NvY2tldF9yZW1vdGVfcGFyYW1faW5pdChzdHJ1Y3QgbmZjX2xsY3Bfc29jayAqc29jayk7XG5uZXQvbmZjL2xsY3AuaDoyMDQ6c3RydWN0IG5mY19sbGNwX2xvY2FsICpuZmNfbGxjcF9maW5kX2xvY2FsKHN0cnVjdCBuZmNfZGV2ICpkZXYpO1xubmV0L25mYy9sbGNwLmg6MjA1OmludCBuZmNfbGxjcF9sb2NhbF9wdXQoc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCk7XG5uZXQvbmZjL2xsY3AuaDoyMDY6dTggbmZjX2xsY3BfZ2V0X3NkcF9zc2FwKHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwsXG5uZXQvbmZjL2xsY3AuaDoyMDc6XHRcdFx0IHN0cnVjdCBuZmNfbGxjcF9zb2NrICpzb2NrKTtcbm5ldC9uZmMvbGxjcC5oOjIwODp1OCBuZmNfbGxjcF9nZXRfbG9jYWxfc3NhcChzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsKTtcbm5ldC9uZmMvbGxjcC5oOjIwOTp2b2lkIG5mY19sbGNwX3B1dF9zc2FwKHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwsIHU4IHNzYXApO1xubmV0L25mYy9sbGNwLmg6MjEwOmludCBuZmNfbGxjcF9xdWV1ZV9pX2ZyYW1lcyhzdHJ1Y3QgbmZjX2xsY3Bfc29jayAqc29jayk7XG5uZXQvbmZjL2xsY3AuaDoyMTE6dm9pZCBuZmNfbGxjcF9zZW5kX3RvX3Jhd19zb2NrKHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwsXG5uZXQvbmZjL2xsY3AuaC0yMTItXHRcdFx0ICAgICAgIHN0cnVjdCBza19idWZmICpza2IsIHU4IGRpcmVjdGlvbik7XG4tLVxubmV0L25mYy9sbGNwLmgtMjE0LS8qIFNvY2sgQVBJICovXG5uZXQvbmZjL2xsY3AuaDoyMTU6c3RydWN0IHNvY2sgKm5mY19sbGNwX3NvY2tfYWxsb2Moc3RydWN0IHNvY2tldCAqc29jaywgaW50IHR5cGUsIGdmcF90IGdmcCwgaW50IGtlcm4pO1xubmV0L25mYy9sbGNwLmg6MjE2OnZvaWQgbmZjX2xsY3Bfc29ja19mcmVlKHN0cnVjdCBuZmNfbGxjcF9zb2NrICpzb2NrKTtcbm5ldC9uZmMvbGxjcC5oOjIxNzp2b2lkIG5mY19sbGNwX2FjY2VwdF91bmxpbmsoc3RydWN0IHNvY2sgKnNrKTtcbm5ldC9uZmMvbGxjcC5oOjIxODp2b2lkIG5mY19sbGNwX2FjY2VwdF9lbnF1ZXVlKHN0cnVjdCBzb2NrICpwYXJlbnQsIHN0cnVjdCBzb2NrICpzayk7XG5uZXQvbmZjL2xsY3AuaDoyMTk6c3RydWN0IHNvY2sgKm5mY19sbGNwX2FjY2VwdF9kZXF1ZXVlKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2tldCAqbmV3c29jayk7XG5uZXQvbmZjL2xsY3AuaC0yMjAtXG5uZXQvbmZjL2xsY3AuaC0yMjEtLyogVExWIEFQSSAqL1xubmV0L25mYy9sbGNwLmg6MjIyOmludCBuZmNfbGxjcF9wYXJzZV9nYl90bHYoc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCxcbm5ldC9uZmMvbGxjcC5oLTIyMy1cdFx0XHQgIGNvbnN0IHU4ICp0bHZfYXJyYXksIHUxNiB0bHZfYXJyYXlfbGVuKTtcbm5ldC9uZmMvbGxjcC5oOjIyNDppbnQgbmZjX2xsY3BfcGFyc2VfY29ubmVjdGlvbl90bHYoc3RydWN0IG5mY19sbGNwX3NvY2sgKnNvY2ssXG5uZXQvbmZjL2xsY3AuaC0yMjUtXHRcdFx0XHQgIGNvbnN0IHU4ICp0bHZfYXJyYXksIHUxNiB0bHZfYXJyYXlfbGVuKTtcbi0tXG5uZXQvbmZjL2xsY3AuaC0yMjctLyogQ29tbWFuZHMgQVBJICovXG5uZXQvbmZjL2xsY3AuaDoyMjg6dm9pZCBuZmNfbGxjcF9yZWN2KHZvaWQgKmRhdGEsIHN0cnVjdCBza19idWZmICpza2IsIGludCBlcnIpO1xubmV0L25mYy9sbGNwLmg6MjI5OnU4ICpuZmNfbGxjcF9idWlsZF90bHYodTggdHlwZSwgY29uc3QgdTggKnZhbHVlLCB1OCB2YWx1ZV9sZW5ndGgsIHU4ICp0bHZfbGVuZ3RoKTtcbm5ldC9uZmMvbGxjcC5oOjIzMDpzdHJ1Y3QgbmZjX2xsY3Bfc2RwX3RsdiAqbmZjX2xsY3BfYnVpbGRfc2RyZXNfdGx2KHU4IHRpZCwgdTggc2FwKTtcbm5ldC9uZmMvbGxjcC5oOjIzMTpzdHJ1Y3QgbmZjX2xsY3Bfc2RwX3RsdiAqbmZjX2xsY3BfYnVpbGRfc2RyZXFfdGx2KHU4IHRpZCwgY29uc3QgY2hhciAqdXJpLFxubmV0L25mYy9sbGNwLmgtMjMyLVx0XHRcdFx0XHRcdCAgc2l6ZV90IHVyaV9sZW4pO1xubmV0L25mYy9sbGNwLmg6MjMzOnZvaWQgbmZjX2xsY3BfZnJlZV9zZHBfdGx2KHN0cnVjdCBuZmNfbGxjcF9zZHBfdGx2ICpzZHApO1xubmV0L25mYy9sbGNwLmg6MjM0OnZvaWQgbmZjX2xsY3BfZnJlZV9zZHBfdGx2X2xpc3Qoc3RydWN0IGhsaXN0X2hlYWQgKnNkcF9oZWFkKTtcbm5ldC9uZmMvbGxjcC5oOjIzNTp2b2lkIG5mY19sbGNwX3JlY3Yodm9pZCAqZGF0YSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGVycik7XG5uZXQvbmZjL2xsY3AuaDoyMzY6aW50IG5mY19sbGNwX3NlbmRfc3ltbShzdHJ1Y3QgbmZjX2RldiAqZGV2KTtcbm5ldC9uZmMvbGxjcC5oOjIzNzppbnQgbmZjX2xsY3Bfc2VuZF9jb25uZWN0KHN0cnVjdCBuZmNfbGxjcF9zb2NrICpzb2NrKTtcbm5ldC9uZmMvbGxjcC5oOjIzODppbnQgbmZjX2xsY3Bfc2VuZF9jYyhzdHJ1Y3QgbmZjX2xsY3Bfc29jayAqc29jayk7XG5uZXQvbmZjL2xsY3AuaDoyMzk6aW50IG5mY19sbGNwX3NlbmRfc25sX3NkcmVzKHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwsXG5uZXQvbmZjL2xsY3AuaC0yNDAtXHRcdFx0ICAgIHN0cnVjdCBobGlzdF9oZWFkICp0bHZfbGlzdCwgc2l6ZV90IHRsdnNfbGVuKTtcbm5ldC9uZmMvbGxjcC5oOjI0MTppbnQgbmZjX2xsY3Bfc2VuZF9zbmxfc2RyZXEoc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCxcbm5ldC9uZmMvbGxjcC5oLTI0Mi1cdFx0XHQgICAgc3RydWN0IGhsaXN0X2hlYWQgKnRsdl9saXN0LCBzaXplX3QgdGx2c19sZW4pO1xubmV0L25mYy9sbGNwLmg6MjQzOmludCBuZmNfbGxjcF9zZW5kX2RtKHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwsIHU4IHNzYXAsIHU4IGRzYXAsIHU4IHJlYXNvbik7XG5uZXQvbmZjL2xsY3AuaDoyNDQ6aW50IG5mY19sbGNwX3NlbmRfZGlzY29ubmVjdChzdHJ1Y3QgbmZjX2xsY3Bfc29jayAqc29jayk7XG5uZXQvbmZjL2xsY3AuaDoyNDU6aW50IG5mY19sbGNwX3NlbmRfaV9mcmFtZShzdHJ1Y3QgbmZjX2xsY3Bfc29jayAqc29jayxcbm5ldC9uZmMvbGxjcC5oLTI0Ni1cdFx0XHQgIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbik7XG5uZXQvbmZjL2xsY3AuaDoyNDc6aW50IG5mY19sbGNwX3NlbmRfdWlfZnJhbWUoc3RydWN0IG5mY19sbGNwX3NvY2sgKnNvY2ssIHU4IHNzYXAsIHU4IGRzYXAsXG5uZXQvbmZjL2xsY3AuaC0yNDgtXHRcdFx0ICAgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKTtcbm5ldC9uZmMvbGxjcC5oOjI0OTppbnQgbmZjX2xsY3Bfc2VuZF9ycihzdHJ1Y3QgbmZjX2xsY3Bfc29jayAqc29jayk7XG5uZXQvbmZjL2xsY3AuaC0yNTAtXG5uZXQvbmZjL2xsY3AuaC0yNTEtLyogU29ja2V0IEFQSSAqL1xubmV0L25mYy9sbGNwLmg6MjUyOmludCBfX2luaXQgbmZjX2xsY3Bfc29ja19pbml0KHZvaWQpO1xubmV0L25mYy9sbGNwLmg6MjUzOnZvaWQgbmZjX2xsY3Bfc29ja19leGl0KHZvaWQpO1xuLS1cbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jPTc0PXN0YXRpYyB1OCBsbGNwX3Rsdl9ydyhjb25zdCB1OCAqdGx2KVxuLS1cbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTc4LVxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmM6Nzk6dTggKm5mY19sbGNwX2J1aWxkX3Rsdih1OCB0eXBlLCBjb25zdCB1OCAqdmFsdWUsIHU4IHZhbHVlX2xlbmd0aCwgdTggKnRsdl9sZW5ndGgpXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy04MC17XG4tLVxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtMTA1LVxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmM6MTA2OnN0cnVjdCBuZmNfbGxjcF9zZHBfdGx2ICpuZmNfbGxjcF9idWlsZF9zZHJlc190bHYodTggdGlkLCB1OCBzYXApXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy0xMDcte1xubmV0L25mYy9sbGNwX2NvbW1hbmRzLmM6MTA4Olx0c3RydWN0IG5mY19sbGNwX3NkcF90bHYgKnNkcmVzO1xubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtMTA5LVx0dTggdmFsdWVbMl07XG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy0xMTAtXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYzoxMTE6XHRzZHJlcyA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBuZmNfbGxjcF9zZHBfdGx2KTtcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTExMi1cdGlmIChzZHJlcyA9PSBOVUxMKVxuLS1cbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTExNy1cbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jOjExODpcdHNkcmVzLVx1MDAzZXRsdiA9IG5mY19sbGNwX2J1aWxkX3RsdihMTENQX1RMVl9TRFJFUywgdmFsdWUsIDIsXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy0xMTktXHRcdFx0XHRcdFx1MDAyNnNkcmVzLVx1MDAzZXRsdl9sZW4pO1xuLS1cbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTEzMi1cbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jOjEzMzpzdHJ1Y3QgbmZjX2xsY3Bfc2RwX3RsdiAqbmZjX2xsY3BfYnVpbGRfc2RyZXFfdGx2KHU4IHRpZCwgY29uc3QgY2hhciAqdXJpLFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtMTM0LVx0XHRcdFx0XHRcdCAgc2l6ZV90IHVyaV9sZW4pXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy0xMzUte1xubmV0L25mYy9sbGNwX2NvbW1hbmRzLmM6MTM2Olx0c3RydWN0IG5mY19sbGNwX3NkcF90bHYgKnNkcmVxO1xubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtMTM3LVxuLS1cbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTE0My1cbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jOjE0NDpcdHNkcmVxID0ga3phbGxvY19vYmooc3RydWN0IG5mY19sbGNwX3NkcF90bHYpO1xubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtMTQ1LVx0aWYgKHNkcmVxID09IE5VTEwpXG4tLVxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtMTczLVxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmM6MTc0OnZvaWQgbmZjX2xsY3BfZnJlZV9zZHBfdGx2KHN0cnVjdCBuZmNfbGxjcF9zZHBfdGx2ICpzZHApXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy0xNzUte1xuLS1cbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTE3OS1cbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jOjE4MDp2b2lkIG5mY19sbGNwX2ZyZWVfc2RwX3Rsdl9saXN0KHN0cnVjdCBobGlzdF9oZWFkICpoZWFkKVxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtMTgxLXtcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jOjE4MjpcdHN0cnVjdCBuZmNfbGxjcF9zZHBfdGx2ICpzZHA7XG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy0xODMtXHRzdHJ1Y3QgaGxpc3Rfbm9kZSAqbjtcbi0tXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy0xODctXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYzoxODg6XHRcdG5mY19sbGNwX2ZyZWVfc2RwX3RsdihzZHApO1xubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtMTg5LVx0fVxuLS1cbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTE5MS1cbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jOjE5MjppbnQgbmZjX2xsY3BfcGFyc2VfZ2JfdGx2KHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwsXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy0xOTMtXHRcdFx0ICBjb25zdCB1OCAqdGx2X2FycmF5LCB1MTYgdGx2X2FycmF5X2xlbilcbi0tXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy0yNDgtXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYzoyNDk6aW50IG5mY19sbGNwX3BhcnNlX2Nvbm5lY3Rpb25fdGx2KHN0cnVjdCBuZmNfbGxjcF9zb2NrICpzb2NrLFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtMjUwLVx0XHRcdFx0ICBjb25zdCB1OCAqdGx2X2FycmF5LCB1MTYgdGx2X2FycmF5X2xlbilcbi0tXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYz0zMTQ9c3RhdGljIHN0cnVjdCBza19idWZmICpsbGNwX2FkZF90bHYoc3RydWN0IHNrX2J1ZmYgKnBkdSwgY29uc3QgdTggKnRsdixcbi0tXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy0zMjYtXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYzozMjc6c3RhdGljIHN0cnVjdCBza19idWZmICpsbGNwX2FsbG9jYXRlX3BkdShzdHJ1Y3QgbmZjX2xsY3Bfc29jayAqc29jayxcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTMyOC1cdFx0XHRcdFx0IHU4IGNtZCwgdTE2IHNpemUpXG4tLVxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtMzQ3LVxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmM6MzQ4OmludCBuZmNfbGxjcF9zZW5kX2Rpc2Nvbm5lY3Qoc3RydWN0IG5mY19sbGNwX3NvY2sgKnNvY2spXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy0zNDkte1xuLS1cbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTM1MS1cdHN0cnVjdCBuZmNfZGV2ICpkZXY7XG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYzozNTI6XHRzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsO1xubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtMzUzLVxuLS1cbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTM3MC1cbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jOjM3MTppbnQgbmZjX2xsY3Bfc2VuZF9zeW1tKHN0cnVjdCBuZmNfZGV2ICpkZXYpXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy0zNzIte1xubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtMzczLVx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jOjM3NDpcdHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWw7XG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy0zNzUtXHR1MTYgc2l6ZSA9IDA7XG4tLVxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtMzc3LVxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmM6Mzc4Olx0bG9jYWwgPSBuZmNfbGxjcF9maW5kX2xvY2FsKGRldik7XG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy0zNzktXHRpZiAobG9jYWwgPT0gTlVMTClcbi0tXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy0zOTYtXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYzozOTc6XHRuZmNfbGxjcF9zZW5kX3RvX3Jhd19zb2NrKGxvY2FsLCBza2IsIE5GQ19ESVJFQ1RJT05fVFgpO1xubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtMzk4LVxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtMzk5LVx0ZXJyID0gbmZjX2RhdGFfZXhjaGFuZ2UoZGV2LCBsb2NhbC1cdTAwM2V0YXJnZXRfaWR4LCBza2IsXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYzo0MDA6XHRcdFx0XHQgbmZjX2xsY3BfcmVjdiwgbG9jYWwpO1xubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtNDAxLW91dDpcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jOjQwMjpcdG5mY19sbGNwX2xvY2FsX3B1dChsb2NhbCk7XG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy00MDMtXHRyZXR1cm4gZXJyO1xuLS1cbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTQwNS1cbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jOjQwNjppbnQgbmZjX2xsY3Bfc2VuZF9jb25uZWN0KHN0cnVjdCBuZmNfbGxjcF9zb2NrICpzb2NrKVxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtNDA3LXtcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jOjQwODpcdHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWw7XG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy00MDktXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuLS1cbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTQyMy1cdGlmIChzb2NrLVx1MDAzZXNlcnZpY2VfbmFtZSAhPSBOVUxMKSB7XG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYzo0MjQ6XHRcdHNlcnZpY2VfbmFtZV90bHYgPSBuZmNfbGxjcF9idWlsZF90bHYoTExDUF9UTFZfU04sXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy00MjUtXHRcdFx0XHRcdFx0ICAgICAgc29jay1cdTAwM2VzZXJ2aWNlX25hbWUsXG4tLVxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtNDM5LVxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmM6NDQwOlx0bWl1eF90bHYgPSBuZmNfbGxjcF9idWlsZF90bHYoTExDUF9UTFZfTUlVWCwgKHU4ICopXHUwMDI2bWl1eCwgMCxcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTQ0MS1cdFx0XHRcdCAgICAgIFx1MDAyNm1pdXhfdGx2X2xlbmd0aCk7XG4tLVxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtNDQ3LVxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmM6NDQ4Olx0cndfdGx2ID0gbmZjX2xsY3BfYnVpbGRfdGx2KExMQ1BfVExWX1JXLCBcdTAwMjZydywgMCwgXHUwMDI2cndfdGx2X2xlbmd0aCk7XG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy00NDktXHRpZiAoIXJ3X3Rsdikge1xuLS1cbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTQ4MS1cbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jOjQ4MjppbnQgbmZjX2xsY3Bfc2VuZF9jYyhzdHJ1Y3QgbmZjX2xsY3Bfc29jayAqc29jaylcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTQ4My17XG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYzo0ODQ6XHRzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsO1xubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtNDg1LVx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbi0tXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy01MDEtXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYzo1MDI6XHRtaXV4X3RsdiA9IG5mY19sbGNwX2J1aWxkX3RsdihMTENQX1RMVl9NSVVYLCAodTggKilcdTAwMjZtaXV4LCAwLFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtNTAzLVx0XHRcdFx0ICAgICAgXHUwMDI2bWl1eF90bHZfbGVuZ3RoKTtcbi0tXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy01MDktXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYzo1MTA6XHRyd190bHYgPSBuZmNfbGxjcF9idWlsZF90bHYoTExDUF9UTFZfUlcsIFx1MDAyNnJ3LCAwLCBcdTAwMjZyd190bHZfbGVuZ3RoKTtcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTUxMS1cdGlmICghcndfdGx2KSB7XG4tLVxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtNTM5LVxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmM6NTQwOnN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqbmZjX2xsY3BfYWxsb2NhdGVfc25sKHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwsXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy01NDEtXHRcdFx0XHRcdCAgICAgc2l6ZV90IHRsdl9sZW5ndGgpXG4tLVxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtNTY4LVxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmM6NTY5OmludCBuZmNfbGxjcF9zZW5kX3NubF9zZHJlcyhzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsLFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtNTcwLVx0XHRcdCAgICBzdHJ1Y3QgaGxpc3RfaGVhZCAqdGx2X2xpc3QsIHNpemVfdCB0bHZzX2xlbilcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTU3MS17XG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYzo1NzI6XHRzdHJ1Y3QgbmZjX2xsY3Bfc2RwX3RsdiAqc2RwO1xubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtNTczLVx0c3RydWN0IGhsaXN0X25vZGUgKm47XG4tLVxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtNTc1LVxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmM6NTc2Olx0c2tiID0gbmZjX2xsY3BfYWxsb2NhdGVfc25sKGxvY2FsLCB0bHZzX2xlbik7XG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy01NzctXHRpZiAoSVNfRVJSKHNrYikpXG4tLVxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtNTg0LVxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmM6NTg1Olx0XHRuZmNfbGxjcF9mcmVlX3NkcF90bHYoc2RwKTtcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTU4Ni1cdH1cbi0tXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy01OTItXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYzo1OTM6aW50IG5mY19sbGNwX3NlbmRfc25sX3NkcmVxKHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwsXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy01OTQtXHRcdFx0ICAgIHN0cnVjdCBobGlzdF9oZWFkICp0bHZfbGlzdCwgc2l6ZV90IHRsdnNfbGVuKVxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtNTk1LXtcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jOjU5NjpcdHN0cnVjdCBuZmNfbGxjcF9zZHBfdGx2ICpzZHJlcTtcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTU5Ny1cdHN0cnVjdCBobGlzdF9ub2RlICpuO1xuLS1cbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTU5OS1cbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jOjYwMDpcdHNrYiA9IG5mY19sbGNwX2FsbG9jYXRlX3NubChsb2NhbCwgdGx2c19sZW4pO1xubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtNjAxLVx0aWYgKElTX0VSUihza2IpKVxuLS1cbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTYyNi1cbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jOjYyNzppbnQgbmZjX2xsY3Bfc2VuZF9kbShzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsLCB1OCBzc2FwLCB1OCBkc2FwLCB1OCByZWFzb24pXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy02Mjgte1xuLS1cbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTY1OS1cbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jOjY2MDppbnQgbmZjX2xsY3Bfc2VuZF9pX2ZyYW1lKHN0cnVjdCBuZmNfbGxjcF9zb2NrICpzb2NrLFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtNjYxLVx0XHRcdCAgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKVxuLS1cbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTY2NC1cdHN0cnVjdCBzb2NrICpzayA9IFx1MDAyNnNvY2stXHUwMDNlc2s7XG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYzo2NjU6XHRzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsO1xubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtNjY2LVx0c2l6ZV90IGZyYWdfbGVuID0gMCwgcmVtYWluaW5nX2xlbjtcbi0tXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy03MjktXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYzo3MzA6XHRcdG5mY19sbGNwX3F1ZXVlX2lfZnJhbWVzKHNvY2spO1xubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtNzMxLVxuLS1cbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTc0Mi1cbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jOjc0MzppbnQgbmZjX2xsY3Bfc2VuZF91aV9mcmFtZShzdHJ1Y3QgbmZjX2xsY3Bfc29jayAqc29jaywgdTggc3NhcCwgdTggZHNhcCxcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTc0NC1cdFx0XHQgICBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pXG4tLVxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtNzQ2LVx0c3RydWN0IHNrX2J1ZmYgKnBkdTtcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jOjc0NzpcdHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWw7XG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy03NDgtXHRzaXplX3QgZnJhZ19sZW4gPSAwLCByZW1haW5pbmdfbGVuO1xuLS1cbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTgyMS1cbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jOjgyMjppbnQgbmZjX2xsY3Bfc2VuZF9ycihzdHJ1Y3QgbmZjX2xsY3Bfc29jayAqc29jaylcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTgyMy17XG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy04MjQtXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xubmV0L25mYy9sbGNwX2NvbW1hbmRzLmM6ODI1Olx0c3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbDtcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTgyNi1cbi0tXG5uZXQvbmZjL2xsY3BfY29yZS5jPTIzPXN0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqbGxjcF93cTtcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMjQtXG5uZXQvbmZjL2xsY3BfY29yZS5jOjI1OnN0YXRpYyB2b2lkIG5mY19sbGNwX3J4X3NrYihzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMjYtXG5uZXQvbmZjL2xsY3BfY29yZS5jOjI3OnZvaWQgbmZjX2xsY3Bfc29ja19saW5rKHN0cnVjdCBsbGNwX3NvY2tfbGlzdCAqbCwgc3RydWN0IHNvY2sgKnNrKVxubmV0L25mYy9sbGNwX2NvcmUuYy0yOC17XG4tLVxubmV0L25mYy9sbGNwX2NvcmUuYy0zMy1cbm5ldC9uZmMvbGxjcF9jb3JlLmM6MzQ6dm9pZCBuZmNfbGxjcF9zb2NrX3VubGluayhzdHJ1Y3QgbGxjcF9zb2NrX2xpc3QgKmwsIHN0cnVjdCBzb2NrICpzaylcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMzUte1xuLS1cbm5ldC9uZmMvbGxjcF9jb3JlLmMtNDAtXG5uZXQvbmZjL2xsY3BfY29yZS5jOjQxOnZvaWQgbmZjX2xsY3Bfc29ja2V0X3JlbW90ZV9wYXJhbV9pbml0KHN0cnVjdCBuZmNfbGxjcF9zb2NrICpzb2NrKVxubmV0L25mYy9sbGNwX2NvcmUuYy00Mi17XG4tLVxubmV0L25mYy9sbGNwX2NvcmUuYy00Ni1cbm5ldC9uZmMvbGxjcF9jb3JlLmM6NDc6c3RhdGljIHZvaWQgbmZjX2xsY3Bfc29ja2V0X3B1cmdlKHN0cnVjdCBuZmNfbGxjcF9zb2NrICpzb2NrKVxubmV0L25mYy9sbGNwX2NvcmUuYy00OC17XG5uZXQvbmZjL2xsY3BfY29yZS5jOjQ5Olx0c3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCA9IHNvY2stXHUwMDNlbG9jYWw7XG5uZXQvbmZjL2xsY3BfY29yZS5jLTUwLVx0c3RydWN0IHNrX2J1ZmYgKnMsICp0bXA7XG4tLVxubmV0L25mYy9sbGNwX2NvcmUuYy02Ny1cbm5ldC9uZmMvbGxjcF9jb3JlLmM6Njg6c3RhdGljIHN0cnVjdCBzb2NrICpuZmNfbGxjcF9zb2NrX2xpc3RfcG9wKHN0cnVjdCBsbGNwX3NvY2tfbGlzdCAqbClcbm5ldC9uZmMvbGxjcF9jb3JlLmMtNjkte1xuLS1cbm5ldC9uZmMvbGxjcF9jb3JlLmMtODItXG5uZXQvbmZjL2xsY3BfY29yZS5jOjgzOnN0YXRpYyB2b2lkIG5mY19sbGNwX3NvY2tldF9yZWxlYXNlKHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwsIGJvb2wgZGV2aWNlLFxubmV0L25mYy9sbGNwX2NvcmUuYy04NC1cdFx0XHRcdCAgICBpbnQgZXJyKVxuLS1cbm5ldC9uZmMvbGxjcF9jb3JlLmMtODYtXHRzdHJ1Y3Qgc29jayAqc2s7XG5uZXQvbmZjL2xsY3BfY29yZS5jOjg3Olx0c3RydWN0IG5mY19sbGNwX3NvY2sgKmxsY3Bfc29jaztcbm5ldC9uZmMvbGxjcF9jb3JlLmMtODgtXG4tLVxubmV0L25mYy9sbGNwX2NvcmUuYy05MC1cbm5ldC9uZmMvbGxjcF9jb3JlLmM6OTE6XHR3aGlsZSAoKHNrID0gbmZjX2xsY3Bfc29ja19saXN0X3BvcChcdTAwMjZsb2NhbC1cdTAwM2Vzb2NrZXRzKSkpIHtcbm5ldC9uZmMvbGxjcF9jb3JlLmM6OTI6XHRcdGxsY3Bfc29jayA9IG5mY19sbGNwX3NvY2soc2spO1xubmV0L25mYy9sbGNwX2NvcmUuYy05My1cbi0tXG5uZXQvbmZjL2xsY3BfY29yZS5jLTk1LVxubmV0L25mYy9sbGNwX2NvcmUuYzo5NjpcdFx0bmZjX2xsY3Bfc29ja2V0X3B1cmdlKGxsY3Bfc29jayk7XG5uZXQvbmZjL2xsY3BfY29yZS5jLTk3LVxuLS1cbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTAxLVx0XHRpZiAoc2stXHUwMDNlc2tfc3RhdGUgPT0gTExDUF9MSVNURU4pIHtcbm5ldC9uZmMvbGxjcF9jb3JlLmM6MTAyOlx0XHRcdHN0cnVjdCBuZmNfbGxjcF9zb2NrICpsc2ssICpuO1xubmV0L25mYy9sbGNwX2NvcmUuYy0xMDMtXHRcdFx0c3RydWN0IHNvY2sgKmFjY2VwdF9zaztcbi0tXG5uZXQvbmZjL2xsY3BfY29yZS5jLTExMy1cbm5ldC9uZmMvbGxjcF9jb3JlLmM6MTE0Olx0XHRcdFx0aWYgKG5mY19sbGNwX3NvY2soYWNjZXB0X3NrKS1cdTAwM2VwYXJlbnQgPT0gc2spIHtcbm5ldC9uZmMvbGxjcF9jb3JlLmM6MTE1Olx0XHRcdFx0XHRuZmNfbGxjcF9hY2NlcHRfdW5saW5rKGFjY2VwdF9zayk7XG5uZXQvbmZjL2xsY3BfY29yZS5jOjExNjpcdFx0XHRcdFx0bmZjX2xsY3Bfc29ja191bmxpbmsoXHUwMDI2bG9jYWwtXHUwMDNlc29ja2V0cywgYWNjZXB0X3NrKTtcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTE3LVxuLS1cbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTQ0LVxubmV0L25mYy9sbGNwX2NvcmUuYzoxNDU6XHR3aGlsZSAoKHNrID0gbmZjX2xsY3Bfc29ja19saXN0X3BvcChcdTAwMjZsb2NhbC1cdTAwM2VyYXdfc29ja2V0cykpKSB7XG5uZXQvbmZjL2xsY3BfY29yZS5jOjE0NjpcdFx0bGxjcF9zb2NrID0gbmZjX2xsY3Bfc29jayhzayk7XG5uZXQvbmZjL2xsY3BfY29yZS5jLTE0Ny1cbi0tXG5uZXQvbmZjL2xsY3BfY29yZS5jLTE0OS1cbm5ldC9uZmMvbGxjcF9jb3JlLmM6MTUwOlx0XHRuZmNfbGxjcF9zb2NrZXRfcHVyZ2UobGxjcF9zb2NrKTtcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTUxLVxuLS1cbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTYxLVxubmV0L25mYy9sbGNwX2NvcmUuYzoxNjI6c3RhdGljIHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbmZjX2xsY3BfbG9jYWxfZ2V0KHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwpXG5uZXQvbmZjL2xsY3BfY29yZS5jLTE2My17XG4tLVxubmV0L25mYy9sbGNwX2NvcmUuYy0xNzItXG5uZXQvbmZjL2xsY3BfY29yZS5jOjE3MzpzdGF0aWMgdm9pZCBsb2NhbF9jbGVhbnVwKHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwpXG5uZXQvbmZjL2xsY3BfY29yZS5jLTE3NC17XG5uZXQvbmZjL2xsY3BfY29yZS5jOjE3NTpcdG5mY19sbGNwX3NvY2tldF9yZWxlYXNlKGxvY2FsLCBmYWxzZSwgRU5YSU8pO1xubmV0L25mYy9sbGNwX2NvcmUuYy0xNzYtXHR0aW1lcl9kZWxldGVfc3luYyhcdTAwMjZsb2NhbC1cdTAwM2VsaW5rX3RpbWVyKTtcbi0tXG5uZXQvbmZjL2xsY3BfY29yZS5jLTE4NC1cdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2bG9jYWwtXHUwMDNlc2RyZXFfdGltZW91dF93b3JrKTtcbm5ldC9uZmMvbGxjcF9jb3JlLmM6MTg1Olx0bmZjX2xsY3BfZnJlZV9zZHBfdGx2X2xpc3QoXHUwMDI2bG9jYWwtXHUwMDNlcGVuZGluZ19zZHJlcXMpO1xubmV0L25mYy9sbGNwX2NvcmUuYy0xODYtfVxuLS1cbm5ldC9uZmMvbGxjcF9jb3JlLmM9MTg4PXN0YXRpYyB2b2lkIGxvY2FsX3JlbGVhc2Vfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG5uZXQvbmZjL2xsY3BfY29yZS5jLTE4OS17XG5uZXQvbmZjL2xsY3BfY29yZS5jOjE5MDpcdHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWw7XG5uZXQvbmZjL2xsY3BfY29yZS5jLTE5MS1cdHN0cnVjdCBuZmNfZGV2ICpkZXY7XG5uZXQvbmZjL2xsY3BfY29yZS5jLTE5Mi1cbm5ldC9uZmMvbGxjcF9jb3JlLmM6MTkzOlx0bG9jYWwgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IG5mY19sbGNwX2xvY2FsLCByZWxlYXNlX3dvcmspO1xubmV0L25mYy9sbGNwX2NvcmUuYy0xOTQtXHRkZXYgPSBsb2NhbC1cdTAwM2VkZXY7XG4tLVxubmV0L25mYy9sbGNwX2NvcmUuYz0yMDE9c3RhdGljIHZvaWQgbG9jYWxfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqcmVmKVxubmV0L25mYy9sbGNwX2NvcmUuYy0yMDIte1xubmV0L25mYy9sbGNwX2NvcmUuYzoyMDM6XHRzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsO1xubmV0L25mYy9sbGNwX2NvcmUuYy0yMDQtXG5uZXQvbmZjL2xsY3BfY29yZS5jOjIwNTpcdGxvY2FsID0gY29udGFpbmVyX29mKHJlZiwgc3RydWN0IG5mY19sbGNwX2xvY2FsLCByZWYpO1xubmV0L25mYy9sbGNwX2NvcmUuYy0yMDYtXG4tLVxubmV0L25mYy9sbGNwX2NvcmUuYy0yMDktXG5uZXQvbmZjL2xsY3BfY29yZS5jOjIxMDppbnQgbmZjX2xsY3BfbG9jYWxfcHV0KHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwpXG5uZXQvbmZjL2xsY3BfY29yZS5jLTIxMS17XG4tLVxubmV0L25mYy9sbGNwX2NvcmUuYy0yMTctXG5uZXQvbmZjL2xsY3BfY29yZS5jOjIxODpzdGF0aWMgc3RydWN0IG5mY19sbGNwX3NvY2sgKm5mY19sbGNwX3NvY2tfZ2V0KHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwsXG5uZXQvbmZjL2xsY3BfY29yZS5jLTIxOS1cdFx0XHRcdFx0ICAgICAgIHU4IHNzYXAsIHU4IGRzYXApXG4tLVxubmV0L25mYy9sbGNwX2NvcmUuYy0yMjEtXHRzdHJ1Y3Qgc29jayAqc2s7XG5uZXQvbmZjL2xsY3BfY29yZS5jOjIyMjpcdHN0cnVjdCBuZmNfbGxjcF9zb2NrICpsbGNwX3NvY2ssICp0bXBfc29jaztcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMjIzLVxuLS1cbm5ldC9uZmMvbGxjcF9jb3JlLmMtMjMzLVx0c2tfZm9yX2VhY2goc2ssIFx1MDAyNmxvY2FsLVx1MDAzZXNvY2tldHMuaGVhZCkge1xubmV0L25mYy9sbGNwX2NvcmUuYzoyMzQ6XHRcdHRtcF9zb2NrID0gbmZjX2xsY3Bfc29jayhzayk7XG5uZXQvbmZjL2xsY3BfY29yZS5jLTIzNS1cbi0tXG5uZXQvbmZjL2xsY3BfY29yZS5jLTI0Ny1cbm5ldC9uZmMvbGxjcF9jb3JlLmM6MjQ4OnN0YXRpYyB2b2lkIG5mY19sbGNwX3NvY2tfcHV0KHN0cnVjdCBuZmNfbGxjcF9zb2NrICpzb2NrKVxubmV0L25mYy9sbGNwX2NvcmUuYy0yNDkte1xuLS1cbm5ldC9uZmMvbGxjcF9jb3JlLmMtMjUyLVxubmV0L25mYy9sbGNwX2NvcmUuYzoyNTM6c3RhdGljIHZvaWQgbmZjX2xsY3BfdGltZW91dF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMjU0LXtcbm5ldC9uZmMvbGxjcF9jb3JlLmM6MjU1Olx0c3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwsXG5uZXQvbmZjL2xsY3BfY29yZS5jLTI1Ni1cdFx0XHRcdFx0XHQgICAgdGltZW91dF93b3JrKTtcbi0tXG5uZXQvbmZjL2xsY3BfY29yZS5jLTI2MC1cbm5ldC9uZmMvbGxjcF9jb3JlLmM6MjYxOnN0YXRpYyB2b2lkIG5mY19sbGNwX3N5bW1fdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnQpXG5uZXQvbmZjL2xsY3BfY29yZS5jLTI2Mi17XG5uZXQvbmZjL2xsY3BfY29yZS5jOjI2MzpcdHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwgPSB0aW1lcl9jb250YWluZXJfb2YobG9jYWwsIHQsXG5uZXQvbmZjL2xsY3BfY29yZS5jLTI2NC1cdFx0XHRcdFx0XHRcdCAgbGlua190aW1lcik7XG4tLVxubmV0L25mYy9sbGNwX2NvcmUuYy0yNzAtXG5uZXQvbmZjL2xsY3BfY29yZS5jOjI3MTpzdGF0aWMgdm9pZCBuZmNfbGxjcF9zZHJlcV90aW1lb3V0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxubmV0L25mYy9sbGNwX2NvcmUuYy0yNzIte1xuLS1cbm5ldC9uZmMvbGxjcF9jb3JlLmMtMjc1LVx0c3RydWN0IGhsaXN0X25vZGUgKm47XG5uZXQvbmZjL2xsY3BfY29yZS5jOjI3NjpcdHN0cnVjdCBuZmNfbGxjcF9zZHBfdGx2ICpzZHA7XG5uZXQvbmZjL2xsY3BfY29yZS5jOjI3NzpcdHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IG5mY19sbGNwX2xvY2FsLFxubmV0L25mYy9sbGNwX2NvcmUuYy0yNzgtXHRcdFx0XHRcdFx0ICAgIHNkcmVxX3RpbWVvdXRfd29yayk7XG4tLVxubmV0L25mYy9sbGNwX2NvcmUuYy0zMDQtXG5uZXQvbmZjL2xsY3BfY29yZS5jOjMwNTpzdGF0aWMgdm9pZCBuZmNfbGxjcF9zZHJlcV90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdClcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMzA2LXtcbm5ldC9uZmMvbGxjcF9jb3JlLmM6MzA3Olx0c3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCA9IHRpbWVyX2NvbnRhaW5lcl9vZihsb2NhbCwgdCxcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMzA4LVx0XHRcdFx0XHRcdFx0ICBzZHJlcV90aW1lcik7XG4tLVxubmV0L25mYy9sbGNwX2NvcmUuYy0zMTItXG5uZXQvbmZjL2xsY3BfY29yZS5jOjMxMzpzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKm5mY19sbGNwX2ZpbmRfbG9jYWwoc3RydWN0IG5mY19kZXYgKmRldilcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMzE0LXtcbm5ldC9uZmMvbGxjcF9jb3JlLmM6MzE1Olx0c3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbDtcbm5ldC9uZmMvbGxjcF9jb3JlLmM6MzE2Olx0c3RydWN0IG5mY19sbGNwX2xvY2FsICpyZXMgPSBOVUxMO1xubmV0L25mYy9sbGNwX2NvcmUuYy0zMTctXG4tLVxubmV0L25mYy9sbGNwX2NvcmUuYy0zMjAtXHRcdGlmIChsb2NhbC1cdTAwM2VkZXYgPT0gZGV2KSB7XG5uZXQvbmZjL2xsY3BfY29yZS5jOjMyMTpcdFx0XHRyZXMgPSBuZmNfbGxjcF9sb2NhbF9nZXQobG9jYWwpO1xubmV0L25mYy9sbGNwX2NvcmUuYy0zMjItXHRcdFx0YnJlYWs7XG4tLVxubmV0L25mYy9sbGNwX2NvcmUuYy0zMjgtXG5uZXQvbmZjL2xsY3BfY29yZS5jOjMyOTpzdGF0aWMgc3RydWN0IG5mY19sbGNwX2xvY2FsICpuZmNfbGxjcF9yZW1vdmVfbG9jYWwoc3RydWN0IG5mY19kZXYgKmRldilcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMzMwLXtcbm5ldC9uZmMvbGxjcF9jb3JlLmM6MzMxOlx0c3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCwgKnRtcDtcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMzMyLVxuLS1cbm5ldC9uZmMvbGxjcF9jb3JlLmM9MzQ5PXN0YXRpYyBjaGFyICp3a3NbXSA9IHtcbi0tXG5uZXQvbmZjL2xsY3BfY29yZS5jLTM1Ni1cbm5ldC9uZmMvbGxjcF9jb3JlLmM6MzU3OnN0YXRpYyBpbnQgbmZjX2xsY3Bfd2tzX3NhcChjb25zdCBjaGFyICpzZXJ2aWNlX25hbWUsIHNpemVfdCBzZXJ2aWNlX25hbWVfbGVuKVxubmV0L25mYy9sbGNwX2NvcmUuYy0zNTgte1xuLS1cbm5ldC9uZmMvbGxjcF9jb3JlLmM9Mzc5PXN0YXRpY1xubmV0L25mYy9sbGNwX2NvcmUuYzozODA6c3RydWN0IG5mY19sbGNwX3NvY2sgKm5mY19sbGNwX3NvY2tfZnJvbV9zbihzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsLFxubmV0L25mYy9sbGNwX2NvcmUuYy0zODEtXHRcdFx0XHRcdCAgICBjb25zdCB1OCAqc24sIHNpemVfdCBzbl9sZW4sXG4tLVxubmV0L25mYy9sbGNwX2NvcmUuYy0zODQtXHRzdHJ1Y3Qgc29jayAqc2s7XG5uZXQvbmZjL2xsY3BfY29yZS5jOjM4NTpcdHN0cnVjdCBuZmNfbGxjcF9zb2NrICpsbGNwX3NvY2ssICp0bXBfc29jaztcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMzg2LVxuLS1cbm5ldC9uZmMvbGxjcF9jb3JlLmMtMzk2LVx0c2tfZm9yX2VhY2goc2ssIFx1MDAyNmxvY2FsLVx1MDAzZXNvY2tldHMuaGVhZCkge1xuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA5OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNDYwCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gYG5ldC9uZmMvbGxjcF9zb2NrLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVuZGFtZW50YWwgc29ja2V0IG1lY2hhbmlzbXMgYW5kIG9wZXJhdGlvbnMgZm9yIExMQ1AuIFRoaXMgbWVhbnMgSSYjMzk7bSBsb29raW5nIHNwZWNpZmljYWxseSBhdCB0aGUgZW50cnkgcG9pbnRzIGFuZCB0aGUgdW5kZXJseWluZyBvcGVyYXRpb25zIGRlZmluZWQgd2l0aGluIHRoaXMgZmlsZS4gSSB3YW50IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhlIExMQ1Agc29ja2V0IGxheWVyIGlzIHN0cnVjdHVyZWQsIHdoaWNoIHdpbGwgaGVscCBtZSBzZWUgdGhlIGFyY2hpdGVjdHVyZSBhcyBhIHdob2xlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwOTowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwcm90b19vcHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmZjJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZmMvbGxjcF9zb2NrLmM9ODYzPXN0YXRpYyBpbnQgbGxjcF9zb2NrX3JlY3Ztc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLFxuLS1cbm5ldC9uZmMvbGxjcF9zb2NrLmMtOTUxLVxubmV0L25mYy9sbGNwX3NvY2suYzo5NTI6c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgbGxjcF9zb2NrX29wcyA9IHtcbm5ldC9uZmMvbGxjcF9zb2NrLmMtOTUzLVx0LmZhbWlseSAgICAgICAgID0gUEZfTkZDLFxuLS1cbm5ldC9uZmMvbGxjcF9zb2NrLmMtOTcxLVxubmV0L25mYy9sbGNwX3NvY2suYzo5NzI6c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgbGxjcF9yYXdzb2NrX29wcyA9IHtcbm5ldC9uZmMvbGxjcF9zb2NrLmMtOTczLVx0LmZhbWlseSAgICAgICAgID0gUEZfTkZDLFxuLS1cbm5ldC9uZmMvcmF3c29jay5jPTI1Mj1zdGF0aWMgaW50IHJhd3NvY2tfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXG4tLVxubmV0L25mYy9yYXdzb2NrLmMtMjc4LVxubmV0L25mYy9yYXdzb2NrLmM6Mjc5OnN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHJhd3NvY2tfb3BzID0ge1xubmV0L25mYy9yYXdzb2NrLmMtMjgwLVx0LmZhbWlseSAgICAgICAgID0gUEZfTkZDLFxuLS1cbm5ldC9uZmMvcmF3c29jay5jLTI5Ni1cbm5ldC9uZmMvcmF3c29jay5jOjI5NzpzdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyByYXdzb2NrX3Jhd19vcHMgPSB7XG5uZXQvbmZjL3Jhd3NvY2suYy0yOTgtXHQuZmFtaWx5ICAgICAgICAgPSBQRl9ORkMsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA5OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxOTg1CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgTExDUCBTb2NrZXQgT3BlcmF0aW9ucyoqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSB0YWtpbmcgYSBjbG9zZSBsb29rIGF0IGBsbGNwX3NvY2tfb3BzYC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGhlYWRpbmcgb3ZlciB0byBgbmV0L25mYy9sbGNwX3NvY2suY2AuIEkga25vdyB0aGlzIGlzIHdoZXJlIHRoZSBjb3JlIHNvY2tldCBvcGVyYXRpb25zIGZvciB0aGUgTExDUCBwcm90b2NvbCBhcmUgaW1wbGVtZW50ZWQuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGZ1bmRhbWVudGFsIG1lY2hhbmljcywgYW5kIEkgc3VzcGVjdCB0aGVyZSBtaWdodCBiZSBzb21ldGhpbmcgaW50ZXJlc3RpbmcgdG8gZGlzc2VjdCBpbiB0aGUgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gZGV0YWlscyBoZXJlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3ZlIGdvdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDk6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmZjL2xsY3Bfc29jay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTQ1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQ1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA5NDU6XHRcdC8qIFNPQ0tfU0VRUEFDS0VUOiByZXR1cm4gcmVhbCBsZW5ndGggaWYgTVNHX1RSVU5DIGlzIHNldCAqL1xuIDk0NjpcdFx0aWYgKHNrLVx1MDAzZXNrX3R5cGUgPT0gU09DS19TRVFQQUNLRVQgXHUwMDI2XHUwMDI2IChmbGFncyBcdTAwMjYgTVNHX1RSVU5DKSlcbiA5NDc6XHRcdFx0Y29waWVkID0gcmxlbjtcbiA5NDg6XHRcbiA5NDk6XHRcdHJldHVybiBjb3BpZWQ7XG4gOTUwOlx0fVxuIDk1MTpcdFxuIDk1MjpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIGxsY3Bfc29ja19vcHMgPSB7XG4gOTUzOlx0XHQuZmFtaWx5ICAgICAgICAgPSBQRl9ORkMsXG4gOTU0Olx0XHQub3duZXIgICAgICAgICAgPSBUSElTX01PRFVMRSxcbiA5NTU6XHRcdC5iaW5kICAgICAgICAgICA9IGxsY3Bfc29ja19iaW5kLFxuIDk1NjpcdFx0LmNvbm5lY3QgICAgICAgID0gbGxjcF9zb2NrX2Nvbm5lY3QsXG4gOTU3Olx0XHQucmVsZWFzZSAgICAgICAgPSBsbGNwX3NvY2tfcmVsZWFzZSxcbiA5NTg6XHRcdC5zb2NrZXRwYWlyICAgICA9IHNvY2tfbm9fc29ja2V0cGFpcixcbiA5NTk6XHRcdC5hY2NlcHQgICAgICAgICA9IGxsY3Bfc29ja19hY2NlcHQsXG4gOTYwOlx0XHQuZ2V0bmFtZSAgICAgICAgPSBsbGNwX3NvY2tfZ2V0bmFtZSxcbiA5NjE6XHRcdC5wb2xsICAgICAgICAgICA9IGxsY3Bfc29ja19wb2xsLFxuIDk2MjpcdFx0LmlvY3RsICAgICAgICAgID0gc29ja19ub19pb2N0bCxcbiA5NjM6XHRcdC5saXN0ZW4gICAgICAgICA9IGxsY3Bfc29ja19saXN0ZW4sXG4gOTY0Olx0XHQuc2h1dGRvd24gICAgICAgPSBzb2NrX25vX3NodXRkb3duLFxuIDk2NTpcdFx0LnNldHNvY2tvcHQgICAgID0gbmZjX2xsY3Bfc2V0c29ja29wdCxcbiA5NjY6XHRcdC5nZXRzb2Nrb3B0ICAgICA9IG5mY19sbGNwX2dldHNvY2tvcHQsXG4gOTY3Olx0XHQuc2VuZG1zZyAgICAgICAgPSBsbGNwX3NvY2tfc2VuZG1zZyxcbiA5Njg6XHRcdC5yZWN2bXNnICAgICAgICA9IGxsY3Bfc29ja19yZWN2bXNnLFxuIDk2OTpcdFx0Lm1tYXAgICAgICAgICAgID0gc29ja19ub19tbWFwLFxuIDk3MDpcdH07XG4gOTcxOlx0XG4gOTcyOlx0c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgbGxjcF9yYXdzb2NrX29wcyA9IHtcbiA5NzM6XHRcdC5mYW1pbHkgICAgICAgICA9IFBGX05GQyxcbiA5NzQ6XHRcdC5vd25lciAgICAgICAgICA9IFRISVNfTU9EVUxFLFxuIDk3NTpcdFx0LmJpbmQgICAgICAgICAgID0gbGxjcF9yYXdfc29ja19iaW5kLFxuIDk3NjpcdFx0LmNvbm5lY3QgICAgICAgID0gc29ja19ub19jb25uZWN0LFxuIDk3NzpcdFx0LnJlbGVhc2UgICAgICAgID0gbGxjcF9zb2NrX3JlbGVhc2UsXG4gOTc4Olx0XHQuc29ja2V0cGFpciAgICAgPSBzb2NrX25vX3NvY2tldHBhaXIsXG4gOTc5Olx0XHQuYWNjZXB0ICAgICAgICAgPSBzb2NrX25vX2FjY2VwdCxcbiA5ODA6XHRcdC5nZXRuYW1lICAgICAgICA9IGxsY3Bfc29ja19nZXRuYW1lLFxuIDk4MTpcdFx0LnBvbGwgICAgICAgICAgID0gbGxjcF9zb2NrX3BvbGwsXG4gOTgyOlx0XHQuaW9jdGwgICAgICAgICAgPSBzb2NrX25vX2lvY3RsLFxuIDk4MzpcdFx0Lmxpc3RlbiAgICAgICAgID0gc29ja19ub19saXN0ZW4sXG4gOTg0Olx0XHQuc2h1dGRvd24gICAgICAgPSBzb2NrX25vX3NodXRkb3duLFxuIDk4NTpcdFx0LnNlbmRtc2cgICAgICAgID0gc29ja19ub19zZW5kbXNnLFxuIDk4NjpcdFx0LnJlY3Ztc2cgICAgICAgID0gbGxjcF9zb2NrX3JlY3Ztc2csXG4gOTg3Olx0XHQubW1hcCAgICAgICAgICAgPSBzb2NrX25vX21tYXAsXG4gOTg4Olx0fTtcbiA5ODk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDk6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI5NTcKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoYXQgcXVlcnksIGFzIGFuIGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyBORkMgU29ja2V0IFByb3RvY29sIENyZWF0aW9uKioKCkFscmlnaHQsIG15IGZpcnN0IGluc3RpbmN0IGhlcmUgaXMgdG8gZ2V0IGhhbmRzLW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgdW5kZXJseWluZyBtZWNoYW5pY3Mgb2YgaG93IHRoZXNlIE5GQyBzb2NrZXQgcHJvdG9jb2xzLCBzcGVjaWZpY2FsbHkgYE5GQ19TT0NLUFJPVE9fTExDUGAgYW5kIGBORkNfU09DS1BST1RPX1JBV2AsIGFyZSBhY3R1YWxseSBpbnN0YW50aWF0ZWQuIFNvLCBJJiMzOTttIGdvaW5nIHRvIGhlYWQgc3RyYWlnaHQgZm9yIGBhZl9uZmMuY2AuIFRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7ZCBleHBlY3QgdG8gZmluZCB0aGUgY29yZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCB0aGUgY3JlYXRpb24gcm91dGluZXMsIHRoZSBzb2NrZXQgZmFtaWx5LXNwZWNpZmljIGxvZ2ljLi4uIGFsbCB0aGUganVpY3kgYml0cy4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgY29kZSB0aGF0IGRlZmluZXMgaG93IHRoZXNlIE5GQy1zcGVjaWZpYyBzb2NrZXQgdHlwZXMgYXJlIGJyb3VnaHQgdG8gbGlmZSB3aXRoaW4gdGhlIGtlcm5lbC4gSXQmIzM5O3MgdGltZSB0byBnZXQgYSBnb29kIGdyaXAgb24gdGhlIGxvdy1sZXZlbCBkZXRhaWxzIG9mIHRoZSBzeXN0ZW0mIzM5O3MgTkZDIGNvbW11bmljYXRpb24gbWVjaGFuaXNtcy4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBmdW5jdGlvbiBjYWxscyByZXNwb25zaWJsZSBmb3IgaGFuZGxpbmcgc29ja2V0IGNyZWF0aW9uLCBiaW5kaW5nLCBhbmQgb3RoZXIgcmVsYXRlZCBvcGVyYXRpb25zIHNwZWNpZmljIHRvIHRoZXNlIE5GQyBwcm90b2NvbHMuIEZyb20gdGhlcmUsIEkgY2FuIGFuYWx5emUgaG93IHRoZSBkaWZmZXJlbnQgcHJvdG9jb2xzIGFyZSBoYW5kbGVkIHRvIHVuZGVyc3RhbmQgdGhlaXIgZGlmZmVyZW5jZXMgYW5kIHNpbWlsYXJpdGllcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDk6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TkZDX1NPQ0tQUk9UT19MTENQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25mYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmZjL2xsY3Bfc29jay5jPTEwMDk9c3RydWN0IHNvY2sgKm5mY19sbGNwX3NvY2tfYWxsb2Moc3RydWN0IHNvY2tldCAqc29jaywgaW50IHR5cGUsIGdmcF90IGdmcCwgaW50IGtlcm4pXG4tLVxubmV0L25mYy9sbGNwX3NvY2suYy0xMDIxLVx0c2stXHUwMDNlc2tfc3RhdGUgPSBMTENQX0NMT1NFRDtcbm5ldC9uZmMvbGxjcF9zb2NrLmM6MTAyMjpcdHNrLVx1MDAzZXNrX3Byb3RvY29sID0gTkZDX1NPQ0tQUk9UT19MTENQO1xubmV0L25mYy9sbGNwX3NvY2suYy0xMDIzLVx0c2stXHUwMDNlc2tfdHlwZSA9IHR5cGU7XG4tLVxubmV0L25mYy9sbGNwX3NvY2suYz0xMDg2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZjX3Byb3RvY29sIGxsY3BfbmZjX3Byb3RvID0ge1xubmV0L25mYy9sbGNwX3NvY2suYzoxMDg3Olx0LmlkXHQgID0gTkZDX1NPQ0tQUk9UT19MTENQLFxubmV0L25mYy9sbGNwX3NvY2suYy0xMDg4LVx0LnByb3RvICAgID0gXHUwMDI2bGxjcF9zb2NrX3Byb3RvLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwOTowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzUwOAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDEwOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIHdoYXQgSSYjMzk7bSB0aGlua2luZzoKCioqRXhhbWluaW5nIFNvY2tldCBNYW5hZ2VtZW50IGFuZCBMb2NhbCBEYXRhIEhhbmRsaW5nIGluIExMQ1AqKgoKUmlnaHQsIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBzb2NrZXQgcmVsZWFzZSBhbmQgYWNjZXB0IGZ1bmN0aW9ucyBwbGF5IG91dCBpbiB0aGlzIExMQ1AgaW1wbGVtZW50YXRpb24sIHNwZWNpZmljYWxseSBpbiByZWxhdGlvbiB0byBgbmZjX2xsY3BfbG9jYWxfcHV0YC4gSSB3YW50IGEgY2xlYXIgcGljdHVyZSBvZiB0aGUgY2FsbCBzdGFjayBhbmQgZGF0YSBmbG93IGludm9sdmVkLiBJIHNob3VsZCBsb29rIGNsb3NlbHkgYXQgZW50cnkgcG9pbnRzLCBwYXJ0aWN1bGFybHkgYGxsY3Bfc29ja19hY2NlcHRgLCBgbGxjcF9zb2NrX3JlbGVhc2VgLCBgbmZjX2xsY3BfYWNjZXB0X3VubGlua2AsIGBuZmNfbGxjcF9hY2NlcHRfZGVxdWV1ZWAsIGFuZCBhZ2FpbiwgYG5mY19sbGNwX2xvY2FsX3B1dGAuIFRoZXNlIGFyZSB0aGUga2V5IGZ1bmN0aW9ucyBJIHN1c3BlY3QgYXJlIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBtZWNoYW5pY3MuCgpJIHRoaW5rIGEgZ29vZCBzdGFydGluZyBwb2ludCBpcyB0byBmb2N1cyBvbiBgbGxjcF9zb2NrLmNgLCBzcGVjaWZpY2FsbHkgbGluZXMgMzkwIHRocm91Z2ggNTAwLiBUaGF0IHJhbmdlIHNob3VsZCBjb250YWluIHRoZSByZWxldmFudCBsb2dpYyBmb3IgdGhvc2UgY3JpdGljYWwgZnVuY3Rpb25zLCBhbmQgYnkgcmVhZGluZyB0aGlzIHNlY3Rpb24gY2FyZWZ1bGx5IEkgc2hvdWxkIGJlIGFibGUgdG8gZ2V0IGEgc29saWQgZ3Jhc3Agb2YgaG93IHRoaXMgYWxsIGNvbWVzIHRvZ2V0aGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwOTowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZmMvbGxjcF9zb2NrLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzOTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM5MDpcdHtcbiAzOTE6XHRcdHN0cnVjdCBuZmNfbGxjcF9zb2NrICpsbGNwX3NvY2sgPSBuZmNfbGxjcF9zb2NrKHNrKTtcbiAzOTI6XHRcbiAzOTM6XHRcdHByX2RlYnVnKFwmIzM0O3N0YXRlICVkXFxuXCYjMzQ7LCBzay1cdTAwM2Vza19zdGF0ZSk7XG4gMzk0Olx0XG4gMzk1Olx0XHRpZiAobGxjcF9zb2NrLVx1MDAzZXBhcmVudCkge1xuIDM5NjpcdFx0XHRsaXN0X2RlbF9pbml0KFx1MDAyNmxsY3Bfc29jay1cdTAwM2VhY2NlcHRfcXVldWUpO1xuIDM5NzpcdFx0XHRza19hY2NlcHRxX3JlbW92ZWQobGxjcF9zb2NrLVx1MDAzZXBhcmVudCk7XG4gMzk4Olx0XHRcdGxsY3Bfc29jay1cdTAwM2VwYXJlbnQgPSBOVUxMO1xuIDM5OTpcdFx0XHRzb2NrX3B1dChzayk7XG4gNDAwOlx0XHR9XG4gNDAxOlx0fVxuIDQwMjpcdFxuIDQwMzpcdHZvaWQgbmZjX2xsY3BfYWNjZXB0X2VucXVldWUoc3RydWN0IHNvY2sgKnBhcmVudCwgc3RydWN0IHNvY2sgKnNrKVxuIDQwNDpcdHtcbiA0MDU6XHRcdHN0cnVjdCBuZmNfbGxjcF9zb2NrICpsbGNwX3NvY2sgPSBuZmNfbGxjcF9zb2NrKHNrKTtcbiA0MDY6XHRcdHN0cnVjdCBuZmNfbGxjcF9zb2NrICpsbGNwX3NvY2tfcGFyZW50ID0gbmZjX2xsY3Bfc29jayhwYXJlbnQpO1xuIDQwNzpcdFxuIDQwODpcdFx0LyogTG9jayB3aWxsIGJlIGZyZWUgZnJvbSB1bmxpbmsgKi9cbiA0MDk6XHRcdHNvY2tfaG9sZChzayk7XG4gNDEwOlx0XG4gNDExOlx0XHRsaXN0X2FkZF90YWlsKFx1MDAyNmxsY3Bfc29jay1cdTAwM2VhY2NlcHRfcXVldWUsXG4gNDEyOlx0XHRcdCAgICAgIFx1MDAyNmxsY3Bfc29ja19wYXJlbnQtXHUwMDNlYWNjZXB0X3F1ZXVlKTtcbiA0MTM6XHRcdGxsY3Bfc29jay1cdTAwM2VwYXJlbnQgPSBwYXJlbnQ7XG4gNDE0Olx0XHRza19hY2NlcHRxX2FkZGVkKHBhcmVudCk7XG4gNDE1Olx0fVxuIDQxNjpcdFxuIDQxNzpcdHN0cnVjdCBzb2NrICpuZmNfbGxjcF9hY2NlcHRfZGVxdWV1ZShzdHJ1Y3Qgc29jayAqcGFyZW50LFxuIDQxODpcdFx0XHRcdFx0ICAgICBzdHJ1Y3Qgc29ja2V0ICpuZXdzb2NrKVxuIDQxOTpcdHtcbiA0MjA6XHRcdHN0cnVjdCBuZmNfbGxjcF9zb2NrICpsc2ssICpuLCAqbGxjcF9wYXJlbnQ7XG4gNDIxOlx0XHRzdHJ1Y3Qgc29jayAqc2s7XG4gNDIyOlx0XG4gNDIzOlx0XHRsbGNwX3BhcmVudCA9IG5mY19sbGNwX3NvY2socGFyZW50KTtcbiA0MjQ6XHRcbiA0MjU6XHRcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShsc2ssIG4sIFx1MDAyNmxsY3BfcGFyZW50LVx1MDAzZWFjY2VwdF9xdWV1ZSxcbiA0MjY6XHRcdFx0XHRcdCBhY2NlcHRfcXVldWUpIHtcbiA0Mjc6XHRcdFx0c3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbDtcbiA0Mjg6XHRcbiA0Mjk6XHRcdFx0c2sgPSBcdTAwMjZsc2stXHUwMDNlc2s7XG4gNDMwOlx0XHRcdGxvY2tfc29ja19uZXN0ZWQoc2ssIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTtcbiA0MzE6XHRcbiA0MzI6XHRcdFx0aWYgKHNrLVx1MDAzZXNrX3N0YXRlID09IExMQ1BfQ0xPU0VEKSB7XG4gNDMzOlx0XHRcdFx0bG9jYWwgPSBuZmNfbGxjcF9zb2NrKHNrKS1cdTAwM2Vsb2NhbDtcbiA0MzQ6XHRcbiA0MzU6XHRcdFx0XHRuZmNfbGxjcF9hY2NlcHRfdW5saW5rKHNrKTtcbiA0MzY6XHRcdFx0XHRpZiAobG9jYWwpXG4gNDM3Olx0XHRcdFx0XHRuZmNfbGxjcF9zb2NrX3VubGluayhcdTAwMjZsb2NhbC1cdTAwM2Vzb2NrZXRzLCBzayk7XG4gNDM4Olx0XHRcdFx0c29ja19vcnBoYW4oc2spO1xuIDQzOTpcdFx0XHRcdHJlbGVhc2Vfc29jayhzayk7XG4gNDQwOlx0XHRcdFx0c29ja19wdXQoc2spO1xuIDQ0MTpcdFx0XHRcdGNvbnRpbnVlO1xuIDQ0MjpcdFx0XHR9XG4gNDQzOlx0XG4gNDQ0Olx0XHRcdGlmIChzay1cdTAwM2Vza19zdGF0ZSA9PSBMTENQX0NPTk5FQ1RFRCB8fCAhbmV3c29jaykge1xuIDQ0NTpcdFx0XHRcdGxpc3RfZGVsX2luaXQoXHUwMDI2bHNrLVx1MDAzZWFjY2VwdF9xdWV1ZSk7XG4gNDQ2Olx0XHRcdFx0c29ja19wdXQoc2spO1xuIDQ0NzpcdFxuIDQ0ODpcdFx0XHRcdGlmIChuZXdzb2NrKVxuIDQ0OTpcdFx0XHRcdFx0c29ja19ncmFmdChzaywgbmV3c29jayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA5OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0ODEwCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgRGVlcGVyIGludG8gdGhlIExMQ1AgU29ja2V0IFJlbGVhc2UqKgoKT2theSwgSSYjMzk7dmUgYmVlbiB0cmFjaW5nIHRoaXMgbmV0d29yayBmdW5jdGlvbiwgYW5kIG5vdyBJIG5lZWQgdG8gZXhwYW5kIG15IHZpZXcgYW5kIGNoZWNrIG91dCBgbGxjcF9zb2NrX3JlbGVhc2VgLiBNeSBhbmFseXNpcyBpbmRpY2F0ZXMgaXQmIzM5O3MgbGlrZWx5IHJlc3BvbnNpYmxlIGZvciB0aGUgZ3JhY2VmdWwgc2h1dGRvd24gb2YgdGhlIExMQ1Agc29ja2V0LiBUaGVyZWZvcmUsIHVuZGVyc3RhbmRpbmcgdGhlIHJlbGVhc2UgbWVjaGFuaXNtcyBpcyBjcnVjaWFsLiBJIG5lZWQgdG8gc2VlIGV4YWN0bHkgaG93IHJlc291cmNlcyBhcmUgY2xlYW5lZCB1cCwgdGhlIGRhdGEgc3RydWN0dXJlcyBhcmUgZnJlZWQsIGFuZCBhbnkgcmVsZXZhbnQgc3RhdGUgdHJhbnNpdGlvbnMgYXJlIGhhbmRsZWQgd2hlbiBhIHNvY2tldCBpcyBjbG9zZWQgb3IgZGlzY29ubmVjdGVkLiBJIGV4cGVjdCBpdCB0byBpbnZvbHZlIHJlZmVyZW5jZSBjb3VudGluZywgcG90ZW50aWFsIGxvY2tpbmcvdW5sb2NraW5nLCBhbmQgcGVyaGFwcyB0aGUgc2lnbmFsaW5nIG9mIGNvbXBsZXRpb24gdG8gb3RoZXIgcGFydHMgb2YgdGhlIG5ldHdvcmsgc3RhY2suIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGFuZCBlcnJvciBoYW5kbGluZyB3aXRoaW4gdGhpcyBmdW5jdGlvbiwgYXMgdGhvc2UgY2FuIGJlIHBhcnRpY3VsYXJseSBuYXN0eSBpbiBuZXR3b3JrIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA5OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25mYy9sbGNwX3NvY2suYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjEwOlx0XG4gNjExOlx0XHRwcl9kZWJ1ZyhcJiMzNDttYXNrIDB4JXhcXG5cJiMzNDssIG1hc2spO1xuIDYxMjpcdFxuIDYxMzpcdFx0cmV0dXJuIG1hc2s7XG4gNjE0Olx0fVxuIDYxNTpcdFxuIDYxNjpcdHN0YXRpYyBpbnQgbGxjcF9zb2NrX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jaylcbiA2MTc6XHR7XG4gNjE4Olx0XHRzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLVx1MDAzZXNrO1xuIDYxOTpcdFx0c3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbDtcbiA2MjA6XHRcdHN0cnVjdCBuZmNfbGxjcF9zb2NrICpsbGNwX3NvY2sgPSBuZmNfbGxjcF9zb2NrKHNrKTtcbiA2MjE6XHRcdGludCBlcnIgPSAwO1xuIDYyMjpcdFxuIDYyMzpcdFx0aWYgKCFzaylcbiA2MjQ6XHRcdFx0cmV0dXJuIDA7XG4gNjI1Olx0XG4gNjI2Olx0XHRwcl9kZWJ1ZyhcJiMzNDslcFxcblwmIzM0Oywgc2spO1xuIDYyNzpcdFxuIDYyODpcdFx0bG9jYWwgPSBsbGNwX3NvY2stXHUwMDNlbG9jYWw7XG4gNjI5Olx0XHRpZiAobG9jYWwgPT0gTlVMTCkge1xuIDYzMDpcdFx0XHRlcnIgPSAtRU5PREVWO1xuIDYzMTpcdFx0XHRnb3RvIG91dDtcbiA2MzI6XHRcdH1cbiA2MzM6XHRcbiA2MzQ6XHRcdGxvY2tfc29jayhzayk7XG4gNjM1Olx0XG4gNjM2Olx0XHQvKiBTZW5kIGEgRElTQyAqL1xuIDYzNzpcdFx0aWYgKHNrLVx1MDAzZXNrX3N0YXRlID09IExMQ1BfQ09OTkVDVEVEKVxuIDYzODpcdFx0XHRuZmNfbGxjcF9zZW5kX2Rpc2Nvbm5lY3QobGxjcF9zb2NrKTtcbiA2Mzk6XHRcbiA2NDA6XHRcdGlmIChzay1cdTAwM2Vza19zdGF0ZSA9PSBMTENQX0xJU1RFTikge1xuIDY0MTpcdFx0XHRzdHJ1Y3QgbmZjX2xsY3Bfc29jayAqbHNrLCAqbjtcbiA2NDI6XHRcdFx0c3RydWN0IHNvY2sgKmFjY2VwdF9zaztcbiA2NDM6XHRcbiA2NDQ6XHRcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGxzaywgbiwgXHUwMDI2bGxjcF9zb2NrLVx1MDAzZWFjY2VwdF9xdWV1ZSxcbiA2NDU6XHRcdFx0XHRcdFx0IGFjY2VwdF9xdWV1ZSkge1xuIDY0NjpcdFx0XHRcdGJvb2wgcHV0X2NyZWF0aW9uID0gZmFsc2U7XG4gNjQ3Olx0XG4gNjQ4Olx0XHRcdFx0YWNjZXB0X3NrID0gXHUwMDI2bHNrLVx1MDAzZXNrO1xuIDY0OTpcdFx0XHRcdGxvY2tfc29ja19uZXN0ZWQoYWNjZXB0X3NrLCBTSU5HTEVfREVQVEhfTkVTVElORyk7XG4gNjUwOlx0XG4gNjUxOlx0XHRcdFx0aWYgKG5mY19sbGNwX3NvY2soYWNjZXB0X3NrKS1cdTAwM2VwYXJlbnQgPT0gc2spIHtcbiA2NTI6XHRcdFx0XHRcdG5mY19sbGNwX3NlbmRfZGlzY29ubmVjdChsc2spO1xuIDY1MzpcdFx0XHRcdFx0bmZjX2xsY3BfYWNjZXB0X3VubGluayhhY2NlcHRfc2spO1xuIDY1NDpcdFx0XHRcdFx0bmZjX2xsY3Bfc29ja191bmxpbmsoXHUwMDI2bG9jYWwtXHUwMDNlc29ja2V0cywgYWNjZXB0X3NrKTtcbiA2NTU6XHRcbiA2NTY6XHRcdFx0XHRcdGFjY2VwdF9zay1cdTAwM2Vza19zdGF0ZSA9IExMQ1BfQ0xPU0VEO1xuIDY1NzpcdFx0XHRcdFx0c29ja19vcnBoYW4oYWNjZXB0X3NrKTtcbiA2NTg6XHRcdFx0XHRcdHB1dF9jcmVhdGlvbiA9IHRydWU7XG4gNjU5Olx0XHRcdFx0fVxuIDY2MDpcdFxuIDY2MTpcdFx0XHRcdHJlbGVhc2Vfc29jayhhY2NlcHRfc2spO1xuIDY2MjpcdFx0XHRcdGlmIChwdXRfY3JlYXRpb24pXG4gNjYzOlx0XHRcdFx0XHRzb2NrX3B1dChhY2NlcHRfc2spOyAvKiBjcmVhdGlvbiByZWYgKi9cbiA2NjQ6XHRcdFx0fVxuIDY2NTpcdFx0fVxuIDY2NjpcdFxuIDY2NzpcdFx0aWYgKHNvY2stXHUwMDNldHlwZSA9PSBTT0NLX1JBVylcbiA2Njg6XHRcdFx0bmZjX2xsY3Bfc29ja191bmxpbmsoXHUwMDI2bG9jYWwtXHUwMDNlcmF3X3NvY2tldHMsIHNrKTtcbiA2Njk6XHRcdGVsc2UgaWYgKHNrLVx1MDAzZXNrX3N0YXRlID09IExMQ1BfQ09OTkVDVElORylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDk6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU5MTUKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAyOTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTkZDIFNvY2tldCBQYXRjaCYjMzk7cyBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGlzIGRpdmluZyBpbnRvIHRoZSBoZWFydCBvZiBORkMg4oCTIHNwZWNpZmljYWxseSB0aGUgc29ja2V0IGFuZCBMTENQIGxvZ2ljLCB0b3VjaGluZyBgbGxjcF9jb3JlLmNgIGFuZCBgbGxjcF9zb2NrLmNgLiBHaXZlbiB0aGF0IHN5emthbGxlciwgb3VyIHRydXN0eSB2aXJ0dWFsIGVudmlyb25tZW50LCBpcyBrbm93biB0byBoaXQgdGhlc2UgYXJlYXMgdmlhIE5GQyBzb2NrZXRzLCBuZXRsaW5rLCB2aXJ0dWFsIGRyaXZlcnMsIG9yIGV2ZW4gcmF3IEFGX05GQyBzb2NrZXRzLCBpdCYjMzk7cyBwcmV0dHkgY2xlYXIgdGhhdCB0aGlzIHBhdGNoIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4gVGhlIGBXb3J0aEZ1enppbmdgIGZsYWcgaXMgc2V0IHRvIHRydWU7IG5vIHF1ZXN0aW9uLgoKTm93LCBmb3IgZW5hYmxpbmcgdGhlIHJpZ2h0IGNvbmZpZ3VyYXRpb25zLCBJIG5lZWQgdG8gbWFrZSBzdXJlIHdlIGhhdmUgZXZlcnl0aGluZyBpbiBwbGFjZSB0byB0cmlnZ2VyIHRoZSBjaGFuZ2VzLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3MgZm9yIGBuZXQvbmZjL2AgYW5kIGBsbGNwYC4gTG9va2luZyBpbnRvIGBuZXQvbmZjL0tjb25maWdgLCBJIGNhbiBzZWUgYSBgbWVudWNvbmZpZyBORkNgIGRlcGVuZGVudCBvbiBgUkZLSUxMIHx8ICFSRktJTExgLiBUaGF0IG9uZSBpcyBpbXBvcnRhbnQuIEl0IGFsc28gaW5jbHVkZXMgdGhlIGxpbmUgYG9iai0kKENPTkZJR19ORkMpICYjNDM7PSBuZmMub2Agd2hpY2ggc2VlbXMgdG8gcHVsbCBpbiB0aGUgcmVsZXZhbnQgb2JqZWN0IGZpbGVzLiBEaWdnaW5nIGRlZXBlciBJIGNhbiBzZWUgYG5mYy1vYmpzYCBpbmNsdWRpbmcgYGxsY3BfY29yZS5vYCBhbmQgYGxsY3Bfc29jay5vYCB3aGljaCB3aWxsIG1ha2UgdGhpcyBwYXRjaCBkaXJlY3RseSByZWFjaGFibGUgd2l0aCBgQ09ORklHX05GQ2AuIFdoaWxlIHRoaW5ncyBsaWtlIGBORkNfU0lNYCBvciBgTkZDX0RJR0lUQUxgIG1pZ2h0IGJlIHVzZWZ1bCBpbiBhIHNwZWNpZmljIHNldHVwLCBgQ09ORklHX05GQ2AgbG9va3MgbGlrZSB0aGUgY3JpdGljYWwgb25lIGhlcmUgZm9yIGdldHRpbmcgYXQgdGhlIGNvcmUgY2hhbmdlcyBpbiBgbGxjcF9jb3JlLmNgIGFuZCBgbGxjcF9zb2NrLmNgLiBJIHNob3VsZCBhbHNvIHF1aWNrbHkgY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBvdGhlciByZWxldmFudCBjb25maWdzIGluIGVpdGhlciBgbmV0L25mYy9gIG9yIGBuZXQvS2NvbmZpZ2AgdGhhdCBtaWdodCBpbmZsdWVuY2UgdGhpbmdzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwOTowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzb3VyY2UgXCYjMzQ7bmV0L25mYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvS2NvbmZpZz00NDA9c291cmNlIFwmIzM0O25ldC9jZXBoL0tjb25maWdcJiMzNDtcbm5ldC9LY29uZmlnOjQ0MTpzb3VyY2UgXCYjMzQ7bmV0L25mYy9LY29uZmlnXCYjMzQ7XG5uZXQvS2NvbmZpZy00NDItc291cmNlIFwmIzM0O25ldC9wc2FtcGxlL0tjb25maWdcJiMzNDtcbi0tXG5uZXQvbmZjL0tjb25maWc9MTc9Y29uZmlnIE5GQ19ESUdJVEFMXG4tLVxubmV0L25mYy9LY29uZmlnLTMwLVxubmV0L25mYy9LY29uZmlnOjMxOnNvdXJjZSBcJiMzNDtuZXQvbmZjL25jaS9LY29uZmlnXCYjMzQ7XG5uZXQvbmZjL0tjb25maWc6MzI6c291cmNlIFwmIzM0O25ldC9uZmMvaGNpL0tjb25maWdcJiMzNDtcbm5ldC9uZmMvS2NvbmZpZy0zMy1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDk6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY3NzYKCQkJCQkJCW91dHB1dDogMTU2CgkJCQkJCQl0aG91Z2h0czogMTAwMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipORkMgTExDUCBTb2NrZXQgTWFuYWdlbWVudCBBbmFseXNpcyBmb3IgRnV6emluZyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgTkZDYCBpcyB0aGUga2V5IGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBJIHNlZSBpdCYjMzk7cyBkZWZpbmVkIGluIGBuZXQvbmZjL0tjb25maWdgLCBhbmQgaXQgZGVwZW5kcyBvbiBlaXRoZXIgYFJGS0lMTGAgb3IgdGhlIG5lZ2F0aW9uIG9mIGBSRktJTExgLCB3aGljaCBtYWtlcyBpdCB0aGUgcHJpbWFyeSBjb25maWcuIE5vdyBmb3IgdGhlIGNydWNpYWwgcGFydDogdGhlIHN5bWJvbHMuCgpJJiMzOTt2ZSBnb3QgYSBsaXN0IG9mIGZ1bmN0aW9ucyBhZmZlY3RlZCBieSB0aGlzIHBhdGNoIGFuZCBuZWVkIHRvIGRldGVybWluZSB3aGljaCBvbmVzIGFyZSAqcHJpbWUqIGZ1enppbmcgdGFyZ2V0cy4gSW50ZXJuYWwgc3RhdGljIGhlbHBlcnMgYXJlIG9mdGVuIGlubGluZWQsIHRodXMgbm90IGhhdmluZyBhIHNlcGFyYXRlIHN5bWJvbCBhZGRyZXNzOyB3ZSBkb24mIzM5O3Qgd2FudCB0aG9zZSBpbiBgRm9jdXNTeW1ib2xzYC4gQ29udmVyc2VseSwgZnVuY3Rpb25zIHdpdGggZXh0ZXJuYWwgbGlua2FnZSAqYXJlKiBzZXBhcmF0ZSBlbnRpdGllcyBpbiB0aGUga2VybmVsIGltYWdlLgoKSGVyZSYjMzk7cyB0aGUgYXBwcm9hY2ggSSYjMzk7bSB0YWtpbmc6IEkmIzM5O3ZlIGNhcmVmdWxseSByZXZpZXdlZCB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zIGFjcm9zcyBgbmV0L25mYy9sbGNwX2NvcmUuY2AgYW5kIGBuZXQvbmZjL2xsY3Bfc29jay5jYC4gSSBoYXZlIGRpc3Rpbmd1aXNoZWQgc3RhdGljIHZlcnN1cyBub24tc3RhdGljIGZ1bmN0aW9ucywgYW5kIGlkZW50aWZpZWQgbm9uLXN0YXRpYyBmdW5jdGlvbnMgb2YgaW50ZXJlc3Q6IGBuZmNfbGxjcF9sb2NhbF9wdXRgLCBgbmZjX2xsY3BfYWNjZXB0X3VubGlua2AsIGBuZmNfbGxjcF9hY2NlcHRfZGVxdWV1ZWAsIGBuZmNfbGxjcF9yZWdpc3Rlcl9kZXZpY2VgLCBhbmQgYSBmZXcgc3RhdGljIG9uZXM6IGBsbGNwX3NvY2tfYWNjZXB0YCBhbmQgYGxsY3Bfc29ja19yZWxlYXNlYC4gQWx0aG91Z2ggYGxsY3Bfc29ja19hY2NlcHRgIGFuZCBgbGxjcF9zb2NrX3JlbGVhc2VgIGFyZSBzdGF0aWMsIHRoZXkmIzM5O3JlIHBhcnQgb2YgYHN0cnVjdCBwcm90b19vcHNgIHdoaWNoIG1lYW5zIHRoZWlyIGFkZHJlc3NlcyBhcmUgKmRpc3RpbmN0KiBzeW1ib2xzLgoKQmFzZWQgb24gdGhlIGluc3RydWN0aW9ucywgSSYjMzk7dmUgbmFycm93ZWQgZG93biB0aGUgcmVsZXZhbnQgYEZvY3VzU3ltYm9sc2AgdG86CgoqICAgYG5mY19sbGNwX2FjY2VwdF91bmxpbmtgCiogICBgbmZjX2xsY3BfYWNjZXB0X2RlcXVldWVgCiogICBgbmZjX2xsY3BfbG9jYWxfcHV0YAoqICAgYGxsY3Bfc29ja19hY2NlcHRgCiogICBgbGxjcF9zb2NrX3JlbGVhc2VgCiogICBgbmZjX2xsY3BfcmVnaXN0ZXJfZGV2aWNlYAoKVGhlc2UgZnVuY3Rpb25zIHNlZW0gdGhlIG1vc3QgaW1wb3J0YW50IHRvIHRhcmdldC4KCkZpbmFsbHksIEkgbmVlZCB0byBzZXQgYEVuYWJsZUNvbmZpZ3NgIHRvIGVuc3VyZSB0aGUgTkZDIHN1YnN5c3RlbSBpcyBhY3RpdmUuIEdpdmVuIHRoZSBkZXBlbmRlbmN5IG9uIGBDT05GSUdfTkZDYCBpbiB0aGUga2VybmVsLCBzZXR0aW5nIGBFbmFibGVDb25maWdzYCB0byBgWyYjMzQ7TkZDJiMzNDtdYCBtYWtlcyBwZXJmZWN0IHNlbnNlLiBUaGlzIG1ha2VzIHN1cmUgdGhhdCBgbmV0L25mYy9sbGNwX2NvcmUuY2AgYW5kIGBuZXQvbmZjL2xsY3Bfc29jay5jYCBhcmUgYnVpbHQuCgpMZXQmIzM5O3MgZG8gYSBxdWljayBmaW5hbCByZXZpZXcgdG8gZG91YmxlLWNoZWNrOiBgV29ydGhGdXp6aW5nYCBzaG91bGQgYmUgdHJ1ZS4gVGhlIHJlYXNvbmluZyBzaG91bGQgZXhwbGFpbiB0aGF0IHRoaXMgYWRkcmVzc2VzIHBvdGVudGlhbCBjb25jdXJyZW5jeSBhbmQgcmVmZXJlbmNlLWNvdW50aW5nIGlzc3VlcyBpbiBORkMgTExDUCBzb2NrZXQgbWFuYWdlbWVudCByZWxhdGVkIHRvIGZ1bmN0aW9ucyBhc3NvY2lhdGVkIHdpdGggYWNjZXB0LCBkaXNjb25uZWN0LCBzb2NrZXQgcmVsZWFzZSwgYW5kIGxvY2FsIGRldmljZSB0ZWFyZG93bi4gYEZvY3VzU3ltYm9sc2AgYXJlIG5vbi1ob3QtcGF0aCBrZXJuZWwgZnVuY3Rpb25zLiBBbmQgZmluYWxseSwgYEVuYWJsZUNvbmZpZ3NgIGlzIGp1c3QgYFsmIzM0O05GQyYjMzQ7XWAuCgpPa2F5LCBJJiMzOTttIGNvbmZpZGVudCBpbiB0aGVzZSBmaW5kaW5ncy4gSXQmIzM5O3MgdGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA5OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORkMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZmNfbGxjcF9hY2NlcHRfdW5saW5rJiMzNDssCiAgICAmIzM0O25mY19sbGNwX2FjY2VwdF9kZXF1ZXVlJiMzNDssCiAgICAmIzM0O25mY19sbGNwX2xvY2FsX3B1dCYjMzQ7LAogICAgJiMzNDtsbGNwX3NvY2tfYWNjZXB0JiMzNDssCiAgICAmIzM0O2xsY3Bfc29ja19yZWxlYXNlJiMzNDssCiAgICAmIzM0O25mY19sbGNwX3JlZ2lzdGVyX2RldmljZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZXNvbHZlcyByYWNlIGNvbmRpdGlvbnMsIGltcHJvcGVyIHNvY2tldCBsb2NraW5nLCBhbmQgcmVmZXJlbmNlIGNvdW50aW5nIGlzc3VlcyBpbiB0aGUgTkZDIExMQ1Agc3Vic3lzdGVtIGFjcm9zcyBzb2NrZXQgcmVsZWFzZSwgY29ubmVjdGlvbiBhY2NlcHRhbmNlLCBhbmQgbG9jYWwgZGV2aWNlIHRlYXJkb3duLiBUaGVzZSBjb2RlIHBhdGhzIGFyZSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBBRl9ORkMgc29ja2V0IG9wZXJhdGlvbnMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GQyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25mY19sbGNwX2FjY2VwdF91bmxpbmsmIzM0OywKICAgICYjMzQ7bmZjX2xsY3BfYWNjZXB0X2RlcXVldWUmIzM0OywKICAgICYjMzQ7bmZjX2xsY3BfbG9jYWxfcHV0JiMzNDssCiAgICAmIzM0O2xsY3Bfc29ja19hY2NlcHQmIzM0OywKICAgICYjMzQ7bGxjcF9zb2NrX3JlbGVhc2UmIzM0OywKICAgICYjMzQ7bmZjX2xsY3BfcmVnaXN0ZXJfZGV2aWNlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlc29sdmVzIHJhY2UgY29uZGl0aW9ucywgaW1wcm9wZXIgc29ja2V0IGxvY2tpbmcsIGFuZCByZWZlcmVuY2UgY291bnRpbmcgaXNzdWVzIGluIHRoZSBORkMgTExDUCBzdWJzeXN0ZW0gYWNyb3NzIHNvY2tldCByZWxlYXNlLCBjb25uZWN0aW9uIGFjY2VwdGFuY2UsIGFuZCBsb2NhbCBkZXZpY2UgdGVhcmRvd24uIFRoZXNlIGNvZGUgcGF0aHMgYXJlIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIEFGX05GQyBzb2NrZXQgb3BlcmF0aW9ucyBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDk6MDM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwOTowMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBzb2NrZXQgbGlmZWN5Y2xlIG1hbmFnZW1lbnQsIHJlZmVyZW5jZSBjb3VudGluZywgbG9ja2luZywgYW5kIGFzeW5jaHJvbm91cyBjbGVhbnVwIGluIHRoZSBORkMgTExDUCBzdWJzeXN0ZW0gKG5ldC9uZmMvbGxjcF9jb3JlLmMgYW5kIG5ldC9uZmMvbGxjcF9zb2NrLmMpLiBTcGVjaWZpY2FsbHksIGl0IGludHJvZHVjZXMgc2FmZSBsaXN0IHBvcHBpbmcgd2l0aCBwcm9wZXIgc29ja2V0IGxvY2tpbmcsIGNvcnJlY3QgcmVmZXJlbmNlIGNvdW50aW5nIGZvciBjaGlsZCBzb2NrZXRzIGluIHRoZSBhY2NlcHQgcXVldWUsIGFuZCB3b3JrcXVldWUtZGVmZXJyZWQgcmVsZWFzZSBvZiBzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwuXG5cblRoZXNlIGNoYW5nZXMgZGVhbCBleGNsdXNpdmVseSB3aXRoIGNvbmN1cnJlbmN5LCByZWZlcmVuY2UgY291bnRpbmcsIGFuZCBsaWZlY3ljbGUgbWFuYWdlbWVudCAocmlza3Mgb2YgVXNlLUFmdGVyLUZyZWUsIHJhY2UgY29uZGl0aW9ucywgb3IgZGVhZGxvY2tzKSwgd2hpY2ggYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAgc2FuaXRpemVycy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IGRhdGEgY29waWVkIHRvIHVzZXJzcGFjZSwgZG9lcyBub3QgcmVhZCBvciBleHBvc2UgdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzL2J1ZmZlcnMsIGFuZCBkb2VzIG5vdCBhbHRlciBsZW5ndGggb3IgYm91bmRzIGNhbGN1bGF0aW9ucy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4YTcyN2VkNzEyMmQ1Nzc0ZjJkNTJjODMyZTEzMmZjNzVhNjQyYWNmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBTZXAgMyAwOTowMjoyMyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9uZmMvbGxjcC5oIGIvbmV0L25mYy9sbGNwLmgKaW5kZXggZDgzNDVlZDU3Yzk1NC4uMjNhZTdhMDExMmQzNyAxMDA2NDQKLS0tIGEvbmV0L25mYy9sbGNwLmgKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25mYy9sbGNwLmgKQEAgLTkxLDYgJiM0Mzs5MSw3IEBAIHN0cnVjdCBuZmNfbGxjcF9sb2NhbCB7CiAJc3RydWN0IGhsaXN0X2hlYWQgcGVuZGluZ19zZHJlcXM7CiAJc3RydWN0IHRpbWVyX2xpc3Qgc2RyZXFfdGltZXI7CiAJc3RydWN0IHdvcmtfc3RydWN0IHNkcmVxX3RpbWVvdXRfd29yazsKJiM0MzsJc3RydWN0IHdvcmtfc3RydWN0IHJlbGVhc2Vfd29yazsKIAl1OCBzZHJlcV9uZXh0X3RpZDsKIAogCS8qIHNvY2tldHMgYXJyYXkgKi8KZGlmZiAtLWdpdCBhL25ldC9uZmMvbGxjcF9jb3JlLmMgYi9uZXQvbmZjL2xsY3BfY29yZS5jCmluZGV4IGJkNjM2MWUyZWZhNGYuLjIzNTUzZTc0MjZlYzIgMTAwNjQ0Ci0tLSBhL25ldC9uZmMvbGxjcF9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25mYy9sbGNwX2NvcmUuYwpAQCAtMjAsNiAmIzQzOzIwLDggQEAgc3RhdGljIExJU1RfSEVBRChsbGNwX2RldmljZXMpOwogLyogUHJvdGVjdHMgbGxjcF9kZXZpY2VzIGxpc3QgKi8KIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0sobGxjcF9kZXZpY2VzX2xvY2spOwogCiYjNDM7c3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpsbGNwX3dxOwomIzQzOwogc3RhdGljIHZvaWQgbmZjX2xsY3Bfcnhfc2tiKHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwsIHN0cnVjdCBza19idWZmICpza2IpOwogCiB2b2lkIG5mY19sbGNwX3NvY2tfbGluayhzdHJ1Y3QgbGxjcF9zb2NrX2xpc3QgKmwsIHN0cnVjdCBzb2NrICpzaykKQEAgLTYzLDIxICYjNDM7NjUsMzMgQEAgc3RhdGljIHZvaWQgbmZjX2xsY3Bfc29ja2V0X3B1cmdlKHN0cnVjdCBuZmNfbGxjcF9zb2NrICpzb2NrKQogCX0KIH0KIAomIzQzO3N0YXRpYyBzdHJ1Y3Qgc29jayAqbmZjX2xsY3Bfc29ja19saXN0X3BvcChzdHJ1Y3QgbGxjcF9zb2NrX2xpc3QgKmwpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgc29jayAqc2s7CiYjNDM7CiYjNDM7CXdyaXRlX2xvY2soJmFtcDtsLSZndDtsb2NrKTsKJiM0MzsJc2sgPSBza19oZWFkKCZhbXA7bC0mZ3Q7aGVhZCk7CiYjNDM7CWlmIChzaykgewomIzQzOwkJc29ja19ob2xkKHNrKTsKJiM0MzsJCXNrX2RlbF9ub2RlX2luaXQoc2spOwomIzQzOwl9CiYjNDM7CXdyaXRlX3VubG9jaygmYW1wO2wtJmd0O2xvY2spOwomIzQzOwomIzQzOwlyZXR1cm4gc2s7CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgbmZjX2xsY3Bfc29ja2V0X3JlbGVhc2Uoc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCwgYm9vbCBkZXZpY2UsCiAJCQkJICAgIGludCBlcnIpCiB7CiAJc3RydWN0IHNvY2sgKnNrOwotCXN0cnVjdCBobGlzdF9ub2RlICp0bXA7CiAJc3RydWN0IG5mY19sbGNwX3NvY2sgKmxsY3Bfc29jazsKIAogCXNrYl9xdWV1ZV9wdXJnZSgmYW1wO2xvY2FsLSZndDt0eF9xdWV1ZSk7CiAKLQl3cml0ZV9sb2NrKCZhbXA7bG9jYWwtJmd0O3NvY2tldHMubG9jayk7Ci0KLQlza19mb3JfZWFjaF9zYWZlKHNrLCB0bXAsICZhbXA7bG9jYWwtJmd0O3NvY2tldHMuaGVhZCkgewomIzQzOwl3aGlsZSAoKHNrID0gbmZjX2xsY3Bfc29ja19saXN0X3BvcCgmYW1wO2xvY2FsLSZndDtzb2NrZXRzKSkpIHsKIAkJbGxjcF9zb2NrID0gbmZjX2xsY3Bfc29jayhzayk7CiAKLQkJYmhfbG9ja19zb2NrKHNrKTsKJiM0MzsJCWxvY2tfc29jayhzayk7CiAKIAkJbmZjX2xsY3Bfc29ja2V0X3B1cmdlKGxsY3Bfc29jayk7CiAKQEAgLTkxLDE3ICYjNDM7MTA1LDI3IEBAIHN0YXRpYyB2b2lkIG5mY19sbGNwX3NvY2tldF9yZWxlYXNlKHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwsIGJvb2wgZGV2aWNlLAogCQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGxzaywgbiwKIAkJCQkJCSAmYW1wO2xsY3Bfc29jay0mZ3Q7YWNjZXB0X3F1ZXVlLAogCQkJCQkJIGFjY2VwdF9xdWV1ZSkgewotCQkJCWFjY2VwdF9zayA9ICZhbXA7bHNrLSZndDtzazsKLQkJCQliaF9sb2NrX3NvY2soYWNjZXB0X3NrKTsKLQotCQkJCW5mY19sbGNwX2FjY2VwdF91bmxpbmsoYWNjZXB0X3NrKTsKJiM0MzsJCQkJYm9vbCBwdXRfY3JlYXRpb24gPSBmYWxzZTsKIAotCQkJCWlmIChlcnIpCi0JCQkJCWFjY2VwdF9zay0mZ3Q7c2tfZXJyID0gZXJyOwotCQkJCWFjY2VwdF9zay0mZ3Q7c2tfc3RhdGUgPSBMTENQX0NMT1NFRDsKLQkJCQlhY2NlcHRfc2stJmd0O3NrX3N0YXRlX2NoYW5nZShzayk7CiYjNDM7CQkJCWFjY2VwdF9zayA9ICZhbXA7bHNrLSZndDtzazsKJiM0MzsJCQkJbG9ja19zb2NrX25lc3RlZChhY2NlcHRfc2ssCiYjNDM7CQkJCQkJIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTsKJiM0MzsKJiM0MzsJCQkJaWYgKG5mY19sbGNwX3NvY2soYWNjZXB0X3NrKS0mZ3Q7cGFyZW50ID09IHNrKSB7CiYjNDM7CQkJCQluZmNfbGxjcF9hY2NlcHRfdW5saW5rKGFjY2VwdF9zayk7CiYjNDM7CQkJCQluZmNfbGxjcF9zb2NrX3VubGluaygmYW1wO2xvY2FsLSZndDtzb2NrZXRzLCBhY2NlcHRfc2spOwomIzQzOwomIzQzOwkJCQkJaWYgKGVycikKJiM0MzsJCQkJCQlhY2NlcHRfc2stJmd0O3NrX2VyciA9IGVycjsKJiM0MzsJCQkJCWFjY2VwdF9zay0mZ3Q7c2tfc3RhdGUgPSBMTENQX0NMT1NFRDsKJiM0MzsJCQkJCWFjY2VwdF9zay0mZ3Q7c2tfc3RhdGVfY2hhbmdlKGFjY2VwdF9zayk7CiYjNDM7CQkJCQlzb2NrX29ycGhhbihhY2NlcHRfc2spOwomIzQzOwkJCQkJcHV0X2NyZWF0aW9uID0gdHJ1ZTsKJiM0MzsJCQkJfQogCi0JCQkJYmhfdW5sb2NrX3NvY2soYWNjZXB0X3NrKTsKJiM0MzsJCQkJcmVsZWFzZV9zb2NrKGFjY2VwdF9zayk7CiYjNDM7CQkJCWlmIChwdXRfY3JlYXRpb24pCiYjNDM7CQkJCQlzb2NrX3B1dChhY2NlcHRfc2spOyAvKiBjcmVhdGlvbiByZWYgKi8KIAkJCX0KIAkJfQogCkBAIC0xMTAsMjMgJiM0MzsxMzQsMTggQEAgc3RhdGljIHZvaWQgbmZjX2xsY3Bfc29ja2V0X3JlbGVhc2Uoc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCwgYm9vbCBkZXZpY2UsCiAJCXNrLSZndDtza19zdGF0ZSA9IExMQ1BfQ0xPU0VEOwogCQlzay0mZ3Q7c2tfc3RhdGVfY2hhbmdlKHNrKTsKIAotCQliaF91bmxvY2tfc29jayhzayk7Ci0KLQkJc2tfZGVsX25vZGVfaW5pdChzayk7CiYjNDM7CQlyZWxlYXNlX3NvY2soc2spOwomIzQzOwkJc29ja19wdXQoc2spOwogCX0KIAotCXdyaXRlX3VubG9jaygmYW1wO2xvY2FsLSZndDtzb2NrZXRzLmxvY2spOwotCiAJLyogSWYgd2Ugc3RpbGwgaGF2ZSBhIGRldmljZSwgd2Uga2VlcCB0aGUgUkFXIHNvY2tldHMgYWxpdmUgKi8KIAlpZiAoZGV2aWNlID09IHRydWUpCiAJCXJldHVybjsKIAotCXdyaXRlX2xvY2soJmFtcDtsb2NhbC0mZ3Q7cmF3X3NvY2tldHMubG9jayk7Ci0KLQlza19mb3JfZWFjaF9zYWZlKHNrLCB0bXAsICZhbXA7bG9jYWwtJmd0O3Jhd19zb2NrZXRzLmhlYWQpIHsKJiM0MzsJd2hpbGUgKChzayA9IG5mY19sbGNwX3NvY2tfbGlzdF9wb3AoJmFtcDtsb2NhbC0mZ3Q7cmF3X3NvY2tldHMpKSkgewogCQlsbGNwX3NvY2sgPSBuZmNfbGxjcF9zb2NrKHNrKTsKIAotCQliaF9sb2NrX3NvY2soc2spOwomIzQzOwkJbG9ja19zb2NrKHNrKTsKIAogCQluZmNfbGxjcF9zb2NrZXRfcHVyZ2UobGxjcF9zb2NrKTsKIApAQCAtMTM1LDI2ICYjNDM7MTU0LDIwIEBAIHN0YXRpYyB2b2lkIG5mY19sbGNwX3NvY2tldF9yZWxlYXNlKHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwsIGJvb2wgZGV2aWNlLAogCQlzay0mZ3Q7c2tfc3RhdGUgPSBMTENQX0NMT1NFRDsKIAkJc2stJmd0O3NrX3N0YXRlX2NoYW5nZShzayk7CiAKLQkJYmhfdW5sb2NrX3NvY2soc2spOwotCi0JCXNrX2RlbF9ub2RlX2luaXQoc2spOwomIzQzOwkJcmVsZWFzZV9zb2NrKHNrKTsKJiM0MzsJCXNvY2tfcHV0KHNrKTsKIAl9Ci0KLQl3cml0ZV91bmxvY2soJmFtcDtsb2NhbC0mZ3Q7cmF3X3NvY2tldHMubG9jayk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKm5mY19sbGNwX2xvY2FsX2dldChzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsKQogewotCS8qIFNpbmNlIHVzaW5nIG5mY19sbGNwX2xvY2FsIG1heSByZXN1bHQgaW4gdXNhZ2Ugb2YgbmZjX2Rldiwgd2hlbmV2ZXIKLQkgKiB3ZSBob2xkIGEgcmVmZXJlbmNlIHRvIGxvY2FsLCB3ZSBhbHNvIG5lZWQgdG8gaG9sZCBhIHJlZmVyZW5jZSB0bwotCSAqIHRoZSBkZXZpY2UgdG8gYXZvaWQgVUFGLgotCSAqLwotCWlmICghbmZjX2dldF9kZXZpY2UobG9jYWwtJmd0O2Rldi0mZ3Q7aWR4KSkKJiM0MzsJaWYgKCFsb2NhbCkKIAkJcmV0dXJuIE5VTEw7CiAKLQlrcmVmX2dldCgmYW1wO2xvY2FsLSZndDtyZWYpOwomIzQzOwlpZiAoa3JlZl9nZXRfdW5sZXNzX3plcm8oJmFtcDtsb2NhbC0mZ3Q7cmVmKSkKJiM0MzsJCXJldHVybiBsb2NhbDsKIAotCXJldHVybiBsb2NhbDsKJiM0MzsJcmV0dXJuIE5VTEw7CiB9CiAKIHN0YXRpYyB2b2lkIGxvY2FsX2NsZWFudXAoc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCkKQEAgLTE3MiwzMCAmIzQzOzE4NSwzNCBAQCBzdGF0aWMgdm9pZCBsb2NhbF9jbGVhbnVwKHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwpCiAJbmZjX2xsY3BfZnJlZV9zZHBfdGx2X2xpc3QoJmFtcDtsb2NhbC0mZ3Q7cGVuZGluZ19zZHJlcXMpOwogfQogCi1zdGF0aWMgdm9pZCBsb2NhbF9yZWxlYXNlKHN0cnVjdCBrcmVmICpyZWYpCiYjNDM7c3RhdGljIHZvaWQgbG9jYWxfcmVsZWFzZV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKIAlzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsOwomIzQzOwlzdHJ1Y3QgbmZjX2RldiAqZGV2OwogCi0JbG9jYWwgPSBjb250YWluZXJfb2YocmVmLCBzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwsIHJlZik7CiYjNDM7CWxvY2FsID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBuZmNfbGxjcF9sb2NhbCwgcmVsZWFzZV93b3JrKTsKJiM0MzsJZGV2ID0gbG9jYWwtJmd0O2RldjsKIAogCWxvY2FsX2NsZWFudXAobG9jYWwpOwogCWtmcmVlKGxvY2FsKTsKJiM0MzsJbmZjX3B1dF9kZXZpY2UoZGV2KTsKIH0KIAotaW50IG5mY19sbGNwX2xvY2FsX3B1dChzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsKQomIzQzO3N0YXRpYyB2b2lkIGxvY2FsX3JlbGVhc2Uoc3RydWN0IGtyZWYgKnJlZikKIHsKLQlzdHJ1Y3QgbmZjX2RldiAqZGV2OwotCWludCByZXQ7CiYjNDM7CXN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWw7CiAKLQlpZiAobG9jYWwgPT0gTlVMTCkKLQkJcmV0dXJuIDA7CiYjNDM7CWxvY2FsID0gY29udGFpbmVyX29mKHJlZiwgc3RydWN0IG5mY19sbGNwX2xvY2FsLCByZWYpOwogCi0JZGV2ID0gbG9jYWwtJmd0O2RldjsKJiM0MzsJcXVldWVfd29yayhsbGNwX3dxLCAmYW1wO2xvY2FsLSZndDtyZWxlYXNlX3dvcmspOwomIzQzO30KIAotCXJldCA9IGtyZWZfcHV0KCZhbXA7bG9jYWwtJmd0O3JlZiwgbG9jYWxfcmVsZWFzZSk7Ci0JbmZjX3B1dF9kZXZpY2UoZGV2KTsKJiM0MztpbnQgbmZjX2xsY3BfbG9jYWxfcHV0KHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwpCiYjNDM7ewomIzQzOwlpZiAoIWxvY2FsKQomIzQzOwkJcmV0dXJuIDA7CiAKLQlyZXR1cm4gcmV0OwomIzQzOwlyZXR1cm4ga3JlZl9wdXQoJmFtcDtsb2NhbC0mZ3Q7cmVmLCBsb2NhbF9yZWxlYXNlKTsKIH0KIAogc3RhdGljIHN0cnVjdCBuZmNfbGxjcF9zb2NrICpuZmNfbGxjcF9zb2NrX2dldChzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsLApAQCAtMTcwNSw2ICYjNDM7MTcyMiw3IEBAIGludCBuZmNfbGxjcF9yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IG5mY19kZXYgKm5kZXYpCiAJSU5JVF9XT1JLKCZhbXA7bG9jYWwtJmd0O3J4X3dvcmssIG5mY19sbGNwX3J4X3dvcmspOwogCiAJSU5JVF9XT1JLKCZhbXA7bG9jYWwtJmd0O3RpbWVvdXRfd29yaywgbmZjX2xsY3BfdGltZW91dF93b3JrKTsKJiM0MzsJSU5JVF9XT1JLKCZhbXA7bG9jYWwtJmd0O3JlbGVhc2Vfd29yaywgbG9jYWxfcmVsZWFzZV93b3JrKTsKIAogCXJ3bG9ja19pbml0KCZhbXA7bG9jYWwtJmd0O3NvY2tldHMubG9jayk7CiAJcndsb2NrX2luaXQoJmFtcDtsb2NhbC0mZ3Q7Y29ubmVjdGluZ19zb2NrZXRzLmxvY2spOwpAQCAtMTc0OCwxMCAmIzQzOzE3NjYsMjMgQEAgdm9pZCBuZmNfbGxjcF91bnJlZ2lzdGVyX2RldmljZShzdHJ1Y3QgbmZjX2RldiAqZGV2KQogCiBpbnQgX19pbml0IG5mY19sbGNwX2luaXQodm9pZCkKIHsKLQlyZXR1cm4gbmZjX2xsY3Bfc29ja19pbml0KCk7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWxsY3Bfd3EgPSBhbGxvY193b3JrcXVldWUoJiMzNDtuZmNfbGxjcF93cSYjMzQ7LCBXUV9VTkJPVU5ELCAwKTsKJiM0MzsJaWYgKCFsbGNwX3dxKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CXJldCA9IG5mY19sbGNwX3NvY2tfaW5pdCgpOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlkZXN0cm95X3dvcmtxdWV1ZShsbGNwX3dxKTsKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiB9CiAKIHZvaWQgbmZjX2xsY3BfZXhpdCh2b2lkKQogewogCW5mY19sbGNwX3NvY2tfZXhpdCgpOwomIzQzOwlkZXN0cm95X3dvcmtxdWV1ZShsbGNwX3dxKTsKIH0KZGlmZiAtLWdpdCBhL25ldC9uZmMvbGxjcF9zb2NrLmMgYi9uZXQvbmZjL2xsY3Bfc29jay5jCmluZGV4IDU1NThkOGE0ZDQ4YjMuLmNlNjg3NWViNThmYmMgMTAwNjQ0Ci0tLSBhL25ldC9uZmMvbGxjcF9zb2NrLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25mYy9sbGNwX3NvY2suYwpAQCAtMzkyLDExICYjNDM7MzkyLDEyIEBAIHZvaWQgbmZjX2xsY3BfYWNjZXB0X3VubGluayhzdHJ1Y3Qgc29jayAqc2spCiAKIAlwcl9kZWJ1ZygmIzM0O3N0YXRlICVkXG4mIzM0Oywgc2stJmd0O3NrX3N0YXRlKTsKIAotCWxpc3RfZGVsX2luaXQoJmFtcDtsbGNwX3NvY2stJmd0O2FjY2VwdF9xdWV1ZSk7Ci0Jc2tfYWNjZXB0cV9yZW1vdmVkKGxsY3Bfc29jay0mZ3Q7cGFyZW50KTsKLQlsbGNwX3NvY2stJmd0O3BhcmVudCA9IE5VTEw7Ci0KLQlzb2NrX3B1dChzayk7CiYjNDM7CWlmIChsbGNwX3NvY2stJmd0O3BhcmVudCkgewomIzQzOwkJbGlzdF9kZWxfaW5pdCgmYW1wO2xsY3Bfc29jay0mZ3Q7YWNjZXB0X3F1ZXVlKTsKJiM0MzsJCXNrX2FjY2VwdHFfcmVtb3ZlZChsbGNwX3NvY2stJmd0O3BhcmVudCk7CiYjNDM7CQlsbGNwX3NvY2stJmd0O3BhcmVudCA9IE5VTEw7CiYjNDM7CQlzb2NrX3B1dChzayk7CiYjNDM7CX0KIH0KIAogdm9pZCBuZmNfbGxjcF9hY2NlcHRfZW5xdWV1ZShzdHJ1Y3Qgc29jayAqcGFyZW50LCBzdHJ1Y3Qgc29jayAqc2spCkBAIC00MjMsMTIgJiM0Mzs0MjQsMjAgQEAgc3RydWN0IHNvY2sgKm5mY19sbGNwX2FjY2VwdF9kZXF1ZXVlKHN0cnVjdCBzb2NrICpwYXJlbnQsCiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobHNrLCBuLCAmYW1wO2xsY3BfcGFyZW50LSZndDthY2NlcHRfcXVldWUsCiAJCQkJIGFjY2VwdF9xdWV1ZSkgewomIzQzOwkJc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbDsKJiM0MzsKIAkJc2sgPSAmYW1wO2xzay0mZ3Q7c2s7Ci0JCWxvY2tfc29jayhzayk7CiYjNDM7CQlsb2NrX3NvY2tfbmVzdGVkKHNrLCBTSU5HTEVfREVQVEhfTkVTVElORyk7CiAKIAkJaWYgKHNrLSZndDtza19zdGF0ZSA9PSBMTENQX0NMT1NFRCkgewotCQkJcmVsZWFzZV9zb2NrKHNrKTsKJiM0MzsJCQlsb2NhbCA9IG5mY19sbGNwX3NvY2soc2spLSZndDtsb2NhbDsKJiM0MzsKIAkJCW5mY19sbGNwX2FjY2VwdF91bmxpbmsoc2spOwomIzQzOwkJCWlmIChsb2NhbCkKJiM0MzsJCQkJbmZjX2xsY3Bfc29ja191bmxpbmsoJmFtcDtsb2NhbC0mZ3Q7c29ja2V0cywgc2spOwomIzQzOwkJCXNvY2tfb3JwaGFuKHNrKTsKJiM0MzsJCQlyZWxlYXNlX3NvY2soc2spOwomIzQzOwkJCXNvY2tfcHV0KHNrKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKQEAgLTQ2NCw3ICYjNDM7NDczLDcgQEAgc3RhdGljIGludCBsbGNwX3NvY2tfYWNjZXB0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrZXQgKm5ld3NvY2ssCiAKIAlwcl9kZWJ1ZygmIzM0O3BhcmVudCAlcFxuJiMzNDssIHNrKTsKIAotCWxvY2tfc29ja19uZXN0ZWQoc2ssIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTsKJiM0MzsJbG9ja19zb2NrKHNrKTsKIAogCWlmIChzay0mZ3Q7c2tfc3RhdGUgIT0gTExDUF9MSVNURU4pIHsKIAkJcmV0ID0gLUVCQURGRDsKQEAgLTQ5MCw3ICYjNDM7NDk5LDEyIEBAIHN0YXRpYyBpbnQgbGxjcF9zb2NrX2FjY2VwdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2V0ICpuZXdzb2NrLAogCiAJCXJlbGVhc2Vfc29jayhzayk7CiAJCXRpbWVvID0gc2NoZWR1bGVfdGltZW91dCh0aW1lbyk7Ci0JCWxvY2tfc29ja19uZXN0ZWQoc2ssIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTsKJiM0MzsJCWxvY2tfc29jayhzayk7CiYjNDM7CiYjNDM7CQlpZiAoc2stJmd0O3NrX3N0YXRlICE9IExMQ1BfTElTVEVOKSB7CiYjNDM7CQkJcmV0ID0gLUVCQURGRDsKJiM0MzsJCQlicmVhazsKJiM0MzsJCX0KIAl9CiAJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwogCXJlbW92ZV93YWl0X3F1ZXVlKHNrX3NsZWVwKHNrKSwgJmFtcDt3YWl0KTsKQEAgLTYyOSwxMyAmIzQzOzY0MywyNCBAQCBzdGF0aWMgaW50IGxsY3Bfc29ja19yZWxlYXNlKHN0cnVjdCBzb2NrZXQgKnNvY2spCiAKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGxzaywgbiwgJmFtcDtsbGNwX3NvY2stJmd0O2FjY2VwdF9xdWV1ZSwKIAkJCQkJIGFjY2VwdF9xdWV1ZSkgewomIzQzOwkJCWJvb2wgcHV0X2NyZWF0aW9uID0gZmFsc2U7CiYjNDM7CiAJCQlhY2NlcHRfc2sgPSAmYW1wO2xzay0mZ3Q7c2s7Ci0JCQlsb2NrX3NvY2soYWNjZXB0X3NrKTsKJiM0MzsJCQlsb2NrX3NvY2tfbmVzdGVkKGFjY2VwdF9zaywgU0lOR0xFX0RFUFRIX05FU1RJTkcpOwogCi0JCQluZmNfbGxjcF9zZW5kX2Rpc2Nvbm5lY3QobHNrKTsKLQkJCW5mY19sbGNwX2FjY2VwdF91bmxpbmsoYWNjZXB0X3NrKTsKJiM0MzsJCQlpZiAobmZjX2xsY3Bfc29jayhhY2NlcHRfc2spLSZndDtwYXJlbnQgPT0gc2spIHsKJiM0MzsJCQkJbmZjX2xsY3Bfc2VuZF9kaXNjb25uZWN0KGxzayk7CiYjNDM7CQkJCW5mY19sbGNwX2FjY2VwdF91bmxpbmsoYWNjZXB0X3NrKTsKJiM0MzsJCQkJbmZjX2xsY3Bfc29ja191bmxpbmsoJmFtcDtsb2NhbC0mZ3Q7c29ja2V0cywgYWNjZXB0X3NrKTsKJiM0MzsKJiM0MzsJCQkJYWNjZXB0X3NrLSZndDtza19zdGF0ZSA9IExMQ1BfQ0xPU0VEOwomIzQzOwkJCQlzb2NrX29ycGhhbihhY2NlcHRfc2spOwomIzQzOwkJCQlwdXRfY3JlYXRpb24gPSB0cnVlOwomIzQzOwkJCX0KIAogCQkJcmVsZWFzZV9zb2NrKGFjY2VwdF9zayk7CiYjNDM7CQkJaWYgKHB1dF9jcmVhdGlvbikKJiM0MzsJCQkJc29ja19wdXQoYWNjZXB0X3NrKTsgLyogY3JlYXRpb24gcmVmICovCiAJCX0KIAl9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA5OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU3MjkKCQkJCQkJCW91dHB1dDogMjA0CgkJCQkJCQl0aG91Z2h0czogMTAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBbmFseXNpcyBvZiBORkMgTExDUCBTb2NrZXQgTGlmZWN5Y2xlIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoZSBwYXRjaCB0b3VjaGVzIGBuZXQvbmZjL2xsY3AuaGAsIGBuZXQvbmZjL2xsY3BfY29yZS5jYCwgYW5kIGBuZXQvbmZjL2xsY3Bfc29jay5jYC4gTXkgaW5pdGlhbCByZWFkIGlzIHRoYXQgdGhpcyBpcyBhbGwgYWJvdXQgY2xlYW5pbmcgdXAgc29ja2V0IGxpZmVjeWNsZSwgcmVmZXJlbmNlIGNvdW50aW5nLCBzeW5jaHJvbml6YXRpb24sIGxvY2tpbmcsIGFuZCBVQUYvcmFjZSBjb25kaXRpb25zIHdpdGhpbiB0aGUgTkZDIExMQ1Agc3Vic3lzdGVtLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBwcmV2ZW50aW5nIHNpdHVhdGlvbnMgd2hlcmUgYSBzb2NrZXQsIGxvY2FsIGRldmljZSwgb3IgdGhlIGRldmljZSBpdHNlbGYgbWlnaHQgZ2V0IGZyZWVkIHdoaWxlIHN0aWxsIGluIHVzZSwgb3Igd2hlcmUgdGhlcmUgYXJlIHJhY2UgY29uZGl0aW9ucyBpbiB0aGUgYWNjZXB0IHF1ZXVlIG9yIGR1cmluZyBsb2NhbCBkZXZpY2UgcmVsZWFzZS4KClNwZWNpZmljYWxseSwgaXQgbG9va3MgbGlrZToKCjEuICBBIGByZWxlYXNlX3dvcmtgIGlzIGJlaW5nIGFkZGVkIHRvIGBuZmNfbGxjcF9sb2NhbGAgaW4gYGxsY3AuaGAuCjIuICBgbGxjcF93cWAgaXMgaW50cm9kdWNlZCBpbiBgbGxjcF9jb3JlLmNgIGZvciBhc3luY2hyb25vdXMgY2xlYW51cCBhbmQgd2Ugc2VlIHVwZGF0ZXMgdG8gYG5mY19sbGNwX3NvY2tldF9yZWxlYXNlYCwgYG5mY19sbGNwX2xvY2FsX2dldGAsIGFuZCBgbG9jYWxfcmVsZWFzZWAuIFRoZXJlJiMzOTtzIGEgY2xlYXIgZW1waGFzaXMgb24gc2FmZSBzb2NrZXQgcG9wcGluZyBhbmQgbG9ja2luZyB3aXRoIGBsb2NrX3NvY2tgIG5vdywgcmF0aGVyIHRoYW4gYGJoX2xvY2tfc29ja2AuIEl0JiMzOTtzIGhhbmRsaW5nIGFjY2VwdCBxdWV1ZSBjaGlsZCBzb2NrZXRzIHByb3Blcmx5ICh1bmxpbmtpbmcsIG9ycGhhbmluZywgZXRjLikuICBUaGUgYXN5bmNocm9ub3VzIGRlZmVycmFsIG9mIGBsb2NhbF9yZWxlYXNlX3dvcmtgIG9udG8gYGxsY3Bfd3FgIHNlZW1zIGNydWNpYWwuIEl0JiMzOTtzIHByb3Blcmx5IGluaXRpYWxpemluZyBgcmVsZWFzZV93b3JrYCBhbmQgYGxsY3Bfd3FgLgozLiAgSW4gYGxsY3Bfc29jay5jYCwgdGhlcmUgYXJlIGNoZWNrcyBmb3IgYGxsY3Bfc29jay0mZ3Q7cGFyZW50YCwgcHJvcGVyIHVubGlua2luZy9vcnBoYW5pbmcgd2hlbiBkZXF1ZXVpbmcgY2xvc2VkIHNvY2tldHMgZnJvbSBhY2NlcHQgcXVldWVzLCBhbmQgZml4ZXMgdG8gbG9ja2luZyBpbiBgbGxjcF9zb2NrX2FjY2VwdGAuIEFsc28sIGBsbGNwX3NvY2tfcmVsZWFzZWAgaGFuZGxlcyBhY2NlcHRfcXVldWUgc29ja2V0cyBjb3JyZWN0bHksIGRlYWxpbmcgd2l0aCBsb2NraW5nLCB1bmxpbmtpbmcsIG9ycGhhbmluZywgYW5kIHJlZmVyZW5jZSBjb3VudHMuCgpUaGUgY29yZSBvZiB0aGlzIHBhdGNoIHNlZW1zIHRvIGludm9sdmUgYSBmYWlybHkgdGhvcm91Z2ggb3ZlcmhhdWwgb2YgaG93IHNvY2tldHMgYXJlIG1hbmFnZWQsIHBhcnRpY3VsYXJseSBkdXJpbmcgdGhlaXIgcmVsZWFzZSBhbmQgaGFuZGxpbmcgb2YgYWNjZXB0IHF1ZXVlcy4gSXQgc2VlbXMgdG8gYmUgYWRkcmVzc2luZyBjb21tb24gY29uY3VycmVuY3kgaXNzdWVzLCBsb2NraW5nIGlzc3VlcywgYW5kIHJlZmVyZW5jZSBjb3VudGluZyBwcm9ibGVtcy4KCk5vdywgbXkgcHJpbWFyeSBjb25jZXJuIGlzIHdoZXRoZXIgdGhpcyBpbnRyb2R1Y2VzIG9yIGV4cG9zZXMgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBMZXQmIzM5O3MgbG9vayBhdCB0aGF0OgoKKiAgICoqYGNvcHlfdG9fdXNlcmAgb3IgYHB1dF91c2VyYD8qKiBObywgdGhlcmUgYXJlIG5vIGNoYW5nZXMgaGVyZS4KKiAgICoqTmV0bGluayBhdHRyaWJ1dGVzIG9yIGlvY3RsIG91dHB1dD8qKiBOby4KKiAgICoqUmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeT8qKiBOby4gVGhlIHBhdGNoIG9ubHkgdG91Y2hlcyB3b3JrIHN0cnVjdHMgKGluaXRpYWxpemVkIHdpdGggYElOSVRfV09SS2ApLCBhdG9taWMva3JlZnMsIHNvY2tldCBsaXN0cywgYW5kIGxvY2tpbmcgbWVjaGFuaXNtcy4KKiAgICoqQnVmZmVyIGJvdW5kcyBvciBkYXRhIGxlbmd0aHM/KiogTm8gYWx0ZXJhdGlvbnMgaGVyZS4KCkl0JiMzOTtzIGFsbCBhYm91dCByZWZlcmVuY2UgY291bnRpbmcsIGxpc3QgbWFuaXB1bGF0aW9uLCB3b3JrcXVldWUgZGVmZXJyYWwsIGFuZCBsb2NraW5nLiBUaGlzIHBhdGNoIHNwZWNpZmljYWxseSBzZWVtcyBmb2N1c2VkIG9uIGZpeGluZyBVQUZzLCByYWNlIGNvbmRpdGlvbnMsIGFuZCBwb3RlbnRpYWxseSBkZWFkbG9ja3MuIEtBU0FOIGFuZCBMT0NLREVQIGFyZSBnb2luZyB0byBjYXRjaCB0aGUga2luZCBvZiBidWdzIHRoYXQgdGhlIHBhdGNoIGFpbXMgdG8gZml4LgoKVGhpcyBwYXRjaCAqZG9lc24mIzM5O3QqIGludHJvZHVjZSBvciBleHBvc2UgYW55IG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gV2UgZG9uJiMzOTt0IG5lZWQgdG8gZW5hYmxlIEtNU0FOIGZvciB0aGlzLgoKU28sIHRoZSBLTVNBTlJlYXNvbmluZzoKCiogICBUaGUgcGF0Y2ggcHJpbWFyaWx5IGFkZHJlc3NlcyBzb2NrZXQgbGlmZWN5Y2xlLCByZWZlcmVuY2UgY291bnRpbmcsIGFuZCBsb2NraW5nIGlzc3VlcyB3aXRoaW4gYG5ldC9uZmMvbGxjcF9jb3JlLmNgIGFuZCBgbmV0L25mYy9sbGNwX3NvY2suY2AsIHBhcnRpY3VsYXJseSBhcm91bmQgTExDUCBzb2NrZXQgcmVsZWFzZSBhbmQgZGV2aWNlIHVucmVnaXN0cmF0aW9uLCBhaW1pbmcgdG8gcHJldmVudCByYWNlcywgZGVhZGxvY2tzLCBhbmQgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucy4KKiAgIEl0IG1vZGlmaWVzIHNvY2tldCB1bmxpbmtpbmcsIHVzZXMgYGxvY2tfc29ja2AsIGRlZmVycyBsb2NhbCBjbGVhbnVwIHVzaW5nIGBsbGNwX3dxYCwgYW5kIG1hbmFnZXMgc29ja2V0L2RldmljZSByZWZlcmVuY2UgY291bnRzLgoqICAgTm8gbmV3IG1lbW9yeSBidWZmZXJzIGFyZSBjb3BpZWQgdG8gdXNlcnNwYWNlLCBubyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGNvbnRhaW5pbmcgdW5pbml0aWFsaXplZCBmaWVsZHMgYXJlIHJlYWQsIGFuZCBubyBidWZmZXIgYm91bmRzIGFyZSBhbHRlcmVkLgoqICAgUG90ZW50aWFsIHJlZ3Jlc3Npb25zIChVQUYsIGRvdWJsZS1mcmVlLCBkZWFkbG9ja3MpIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBMT0NLREVQLgoqICAgVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDk6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIHNvY2tldCBsaWZlY3ljbGUgbWFuYWdlbWVudCwgcmVmZXJlbmNlIGNvdW50aW5nLCBsb2NraW5nLCBhbmQgYXN5bmNocm9ub3VzIGNsZWFudXAgaW4gdGhlIE5GQyBMTENQIHN1YnN5c3RlbSAobmV0L25mYy9sbGNwX2NvcmUuYyBhbmQgbmV0L25mYy9sbGNwX3NvY2suYykuIFNwZWNpZmljYWxseSwgaXQgaW50cm9kdWNlcyBzYWZlIGxpc3QgcG9wcGluZyB3aXRoIHByb3BlciBzb2NrZXQgbG9ja2luZywgY29ycmVjdCByZWZlcmVuY2UgY291bnRpbmcgZm9yIGNoaWxkIHNvY2tldHMgaW4gdGhlIGFjY2VwdCBxdWV1ZSwgYW5kIHdvcmtxdWV1ZS1kZWZlcnJlZCByZWxlYXNlIG9mIHN0cnVjdCBuZmNfbGxjcF9sb2NhbC5cblxuVGhlc2UgY2hhbmdlcyBkZWFsIGV4Y2x1c2l2ZWx5IHdpdGggY29uY3VycmVuY3ksIHJlZmVyZW5jZSBjb3VudGluZywgYW5kIGxpZmVjeWNsZSBtYW5hZ2VtZW50IChyaXNrcyBvZiBVc2UtQWZ0ZXItRnJlZSwgcmFjZSBjb25kaXRpb25zLCBvciBkZWFkbG9ja3MpLCB3aGljaCBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUCBzYW5pdGl6ZXJzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgZGF0YSBjb3BpZWQgdG8gdXNlcnNwYWNlLCBkb2VzIG5vdCByZWFkIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMvYnVmZmVycywgYW5kIGRvZXMgbm90IGFsdGVyIGxlbmd0aCBvciBib3VuZHMgY2FsY3VsYXRpb25zLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgc29ja2V0IGxpZmVjeWNsZSBtYW5hZ2VtZW50LCByZWZlcmVuY2UgY291bnRpbmcsIGxvY2tpbmcsIGFuZCBhc3luY2hyb25vdXMgY2xlYW51cCBpbiB0aGUgTkZDIExMQ1Agc3Vic3lzdGVtIChuZXQvbmZjL2xsY3BfY29yZS5jIGFuZCBuZXQvbmZjL2xsY3Bfc29jay5jKS4gU3BlY2lmaWNhbGx5LCBpdCBpbnRyb2R1Y2VzIHNhZmUgbGlzdCBwb3BwaW5nIHdpdGggcHJvcGVyIHNvY2tldCBsb2NraW5nLCBjb3JyZWN0IHJlZmVyZW5jZSBjb3VudGluZyBmb3IgY2hpbGQgc29ja2V0cyBpbiB0aGUgYWNjZXB0IHF1ZXVlLCBhbmQgd29ya3F1ZXVlLWRlZmVycmVkIHJlbGVhc2Ugb2Ygc3RydWN0IG5mY19sbGNwX2xvY2FsLlxuXG5UaGVzZSBjaGFuZ2VzIGRlYWwgZXhjbHVzaXZlbHkgd2l0aCBjb25jdXJyZW5jeSwgcmVmZXJlbmNlIGNvdW50aW5nLCBhbmQgbGlmZWN5Y2xlIG1hbmFnZW1lbnQgKHJpc2tzIG9mIFVzZS1BZnRlci1GcmVlLCByYWNlIGNvbmRpdGlvbnMsIG9yIGRlYWRsb2NrcyksIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQIHNhbml0aXplcnMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBkYXRhIGNvcGllZCB0byB1c2Vyc3BhY2UsIGRvZXMgbm90IHJlYWQgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcy9idWZmZXJzLCBhbmQgZG9lcyBub3QgYWx0ZXIgbGVuZ3RoIG9yIGJvdW5kcyBjYWxjdWxhdGlvbnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDNUMDk6MDI6MjUuNDI4MzkyODNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MzU2MDAwNDEyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORkNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZmNfbGxjcF9hY2NlcHRfdW5saW5rXCIsXG4gICAgXCJuZmNfbGxjcF9hY2NlcHRfZGVxdWV1ZVwiLFxuICAgIFwibmZjX2xsY3BfbG9jYWxfcHV0XCIsXG4gICAgXCJsbGNwX3NvY2tfYWNjZXB0XCIsXG4gICAgXCJsbGNwX3NvY2tfcmVsZWFzZVwiLFxuICAgIFwibmZjX2xsY3BfcmVnaXN0ZXJfZGV2aWNlXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgc29ja2V0IGxpZmVjeWNsZSBtYW5hZ2VtZW50LCByZWZlcmVuY2UgY291bnRpbmcsIGxvY2tpbmcsIGFuZCBhc3luY2hyb25vdXMgY2xlYW51cCBpbiB0aGUgTkZDIExMQ1Agc3Vic3lzdGVtIChuZXQvbmZjL2xsY3BfY29yZS5jIGFuZCBuZXQvbmZjL2xsY3Bfc29jay5jKS4gU3BlY2lmaWNhbGx5LCBpdCBpbnRyb2R1Y2VzIHNhZmUgbGlzdCBwb3BwaW5nIHdpdGggcHJvcGVyIHNvY2tldCBsb2NraW5nLCBjb3JyZWN0IHJlZmVyZW5jZSBjb3VudGluZyBmb3IgY2hpbGQgc29ja2V0cyBpbiB0aGUgYWNjZXB0IHF1ZXVlLCBhbmQgd29ya3F1ZXVlLWRlZmVycmVkIHJlbGVhc2Ugb2Ygc3RydWN0IG5mY19sbGNwX2xvY2FsLlxcblxcblRoZXNlIGNoYW5nZXMgZGVhbCBleGNsdXNpdmVseSB3aXRoIGNvbmN1cnJlbmN5LCByZWZlcmVuY2UgY291bnRpbmcsIGFuZCBsaWZlY3ljbGUgbWFuYWdlbWVudCAocmlza3Mgb2YgVXNlLUFmdGVyLUZyZWUsIHJhY2UgY29uZGl0aW9ucywgb3IgZGVhZGxvY2tzKSwgd2hpY2ggYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAgc2FuaXRpemVycy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IGRhdGEgY29waWVkIHRvIHVzZXJzcGFjZSwgZG9lcyBub3QgcmVhZCBvciBleHBvc2UgdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzL2J1ZmZlcnMsIGFuZCBkb2VzIG5vdCBhbHRlciBsZW5ndGggb3IgYm91bmRzIGNhbGN1bGF0aW9ucy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlc29sdmVzIHJhY2UgY29uZGl0aW9ucywgaW1wcm9wZXIgc29ja2V0IGxvY2tpbmcsIGFuZCByZWZlcmVuY2UgY291bnRpbmcgaXNzdWVzIGluIHRoZSBORkMgTExDUCBzdWJzeXN0ZW0gYWNyb3NzIHNvY2tldCByZWxlYXNlLCBjb25uZWN0aW9uIGFjY2VwdGFuY2UsIGFuZCBsb2NhbCBkZXZpY2UgdGVhcmRvd24uIFRoZXNlIGNvZGUgcGF0aHMgYXJlIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIEFGX05GQyBzb2NrZXQgb3BlcmF0aW9ucyBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDk6MDI6MjUuNDI4Mzk3NTRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNjA3MjI1MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA4YTcyN2VkNzEyMmQ1Nzc0ZjJkNTJjODMyZTEzMmZjNzVhNjQyYWNmXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgU2VwIDMgMDk6MDI6MjMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L25mYy9sbGNwLmggYi9uZXQvbmZjL2xsY3AuaFxcbmluZGV4IGQ4MzQ1ZWQ1N2M5NTQuLjIzYWU3YTAxMTJkMzcgMTAwNjQ0XFxuLS0tIGEvbmV0L25mYy9sbGNwLmhcXG4rKysgYi9uZXQvbmZjL2xsY3AuaFxcbkBAIC05MSw2ICs5MSw3IEBAIHN0cnVjdCBuZmNfbGxjcF9sb2NhbCB7XFxuIFxcdHN0cnVjdCBobGlzdF9oZWFkIHBlbmRpbmdfc2RyZXFzO1xcbiBcXHRzdHJ1Y3QgdGltZXJfbGlzdCBzZHJlcV90aW1lcjtcXG4gXFx0c3RydWN0IHdvcmtfc3RydWN0IHNkcmVxX3RpbWVvdXRfd29yaztcXG4rXFx0c3RydWN0IHdvcmtfc3RydWN0IHJlbGVhc2Vfd29yaztcXG4gXFx0dTggc2RyZXFfbmV4dF90aWQ7XFxuIFxcbiBcXHQvKiBzb2NrZXRzIGFycmF5ICovXFxuZGlmZiAtLWdpdCBhL25ldC9uZmMvbGxjcF9jb3JlLmMgYi9uZXQvbmZjL2xsY3BfY29yZS5jXFxuaW5kZXggYmQ2MzYxZTJlZmE0Zi4uMjM1NTNlNzQyNmVjMiAxMDA2NDRcXG4tLS0gYS9uZXQvbmZjL2xsY3BfY29yZS5jXFxuKysrIGIvbmV0L25mYy9sbGNwX2NvcmUuY1xcbkBAIC0yMCw2ICsyMCw4IEBAIHN0YXRpYyBMSVNUX0hFQUQobGxjcF9kZXZpY2VzKTtcXG4gLyogUHJvdGVjdHMgbGxjcF9kZXZpY2VzIGxpc3QgKi9cXG4gc3RhdGljIERFRklORV9TUElOTE9DSyhsbGNwX2RldmljZXNfbG9jayk7XFxuIFxcbitzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmxsY3Bfd3E7XFxuK1xcbiBzdGF0aWMgdm9pZCBuZmNfbGxjcF9yeF9za2Ioc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuIFxcbiB2b2lkIG5mY19sbGNwX3NvY2tfbGluayhzdHJ1Y3QgbGxjcF9zb2NrX2xpc3QgKmwsIHN0cnVjdCBzb2NrICpzaylcXG5AQCAtNjMsMjEgKzY1LDMzIEBAIHN0YXRpYyB2b2lkIG5mY19sbGNwX3NvY2tldF9wdXJnZShzdHJ1Y3QgbmZjX2xsY3Bfc29jayAqc29jaylcXG4gXFx0fVxcbiB9XFxuIFxcbitzdGF0aWMgc3RydWN0IHNvY2sgKm5mY19sbGNwX3NvY2tfbGlzdF9wb3Aoc3RydWN0IGxsY3Bfc29ja19saXN0ICpsKVxcbit7XFxuK1xcdHN0cnVjdCBzb2NrICpzaztcXG4rXFxuK1xcdHdyaXRlX2xvY2soXFx1MDAyNmwtXFx1MDAzZWxvY2spO1xcbitcXHRzayA9IHNrX2hlYWQoXFx1MDAyNmwtXFx1MDAzZWhlYWQpO1xcbitcXHRpZiAoc2spIHtcXG4rXFx0XFx0c29ja19ob2xkKHNrKTtcXG4rXFx0XFx0c2tfZGVsX25vZGVfaW5pdChzayk7XFxuK1xcdH1cXG4rXFx0d3JpdGVfdW5sb2NrKFxcdTAwMjZsLVxcdTAwM2Vsb2NrKTtcXG4rXFxuK1xcdHJldHVybiBzaztcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgbmZjX2xsY3Bfc29ja2V0X3JlbGVhc2Uoc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCwgYm9vbCBkZXZpY2UsXFxuIFxcdFxcdFxcdFxcdCAgICBpbnQgZXJyKVxcbiB7XFxuIFxcdHN0cnVjdCBzb2NrICpzaztcXG4tXFx0c3RydWN0IGhsaXN0X25vZGUgKnRtcDtcXG4gXFx0c3RydWN0IG5mY19sbGNwX3NvY2sgKmxsY3Bfc29jaztcXG4gXFxuIFxcdHNrYl9xdWV1ZV9wdXJnZShcXHUwMDI2bG9jYWwtXFx1MDAzZXR4X3F1ZXVlKTtcXG4gXFxuLVxcdHdyaXRlX2xvY2soXFx1MDAyNmxvY2FsLVxcdTAwM2Vzb2NrZXRzLmxvY2spO1xcbi1cXG4tXFx0c2tfZm9yX2VhY2hfc2FmZShzaywgdG1wLCBcXHUwMDI2bG9jYWwtXFx1MDAzZXNvY2tldHMuaGVhZCkge1xcbitcXHR3aGlsZSAoKHNrID0gbmZjX2xsY3Bfc29ja19saXN0X3BvcChcXHUwMDI2bG9jYWwtXFx1MDAzZXNvY2tldHMpKSkge1xcbiBcXHRcXHRsbGNwX3NvY2sgPSBuZmNfbGxjcF9zb2NrKHNrKTtcXG4gXFxuLVxcdFxcdGJoX2xvY2tfc29jayhzayk7XFxuK1xcdFxcdGxvY2tfc29jayhzayk7XFxuIFxcbiBcXHRcXHRuZmNfbGxjcF9zb2NrZXRfcHVyZ2UobGxjcF9zb2NrKTtcXG4gXFxuQEAgLTkxLDE3ICsxMDUsMjcgQEAgc3RhdGljIHZvaWQgbmZjX2xsY3Bfc29ja2V0X3JlbGVhc2Uoc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCwgYm9vbCBkZXZpY2UsXFxuIFxcdFxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShsc2ssIG4sXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCBcXHUwMDI2bGxjcF9zb2NrLVxcdTAwM2VhY2NlcHRfcXVldWUsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCBhY2NlcHRfcXVldWUpIHtcXG4tXFx0XFx0XFx0XFx0YWNjZXB0X3NrID0gXFx1MDAyNmxzay1cXHUwMDNlc2s7XFxuLVxcdFxcdFxcdFxcdGJoX2xvY2tfc29jayhhY2NlcHRfc2spO1xcbi1cXG4tXFx0XFx0XFx0XFx0bmZjX2xsY3BfYWNjZXB0X3VubGluayhhY2NlcHRfc2spO1xcbitcXHRcXHRcXHRcXHRib29sIHB1dF9jcmVhdGlvbiA9IGZhbHNlO1xcbiBcXG4tXFx0XFx0XFx0XFx0aWYgKGVycilcXG4tXFx0XFx0XFx0XFx0XFx0YWNjZXB0X3NrLVxcdTAwM2Vza19lcnIgPSBlcnI7XFxuLVxcdFxcdFxcdFxcdGFjY2VwdF9zay1cXHUwMDNlc2tfc3RhdGUgPSBMTENQX0NMT1NFRDtcXG4tXFx0XFx0XFx0XFx0YWNjZXB0X3NrLVxcdTAwM2Vza19zdGF0ZV9jaGFuZ2Uoc2spO1xcbitcXHRcXHRcXHRcXHRhY2NlcHRfc2sgPSBcXHUwMDI2bHNrLVxcdTAwM2VzaztcXG4rXFx0XFx0XFx0XFx0bG9ja19zb2NrX25lc3RlZChhY2NlcHRfc2ssXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCBTSU5HTEVfREVQVEhfTkVTVElORyk7XFxuK1xcbitcXHRcXHRcXHRcXHRpZiAobmZjX2xsY3Bfc29jayhhY2NlcHRfc2spLVxcdTAwM2VwYXJlbnQgPT0gc2spIHtcXG4rXFx0XFx0XFx0XFx0XFx0bmZjX2xsY3BfYWNjZXB0X3VubGluayhhY2NlcHRfc2spO1xcbitcXHRcXHRcXHRcXHRcXHRuZmNfbGxjcF9zb2NrX3VubGluayhcXHUwMDI2bG9jYWwtXFx1MDAzZXNvY2tldHMsIGFjY2VwdF9zayk7XFxuK1xcbitcXHRcXHRcXHRcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRcXHRcXHRcXHRhY2NlcHRfc2stXFx1MDAzZXNrX2VyciA9IGVycjtcXG4rXFx0XFx0XFx0XFx0XFx0YWNjZXB0X3NrLVxcdTAwM2Vza19zdGF0ZSA9IExMQ1BfQ0xPU0VEO1xcbitcXHRcXHRcXHRcXHRcXHRhY2NlcHRfc2stXFx1MDAzZXNrX3N0YXRlX2NoYW5nZShhY2NlcHRfc2spO1xcbitcXHRcXHRcXHRcXHRcXHRzb2NrX29ycGhhbihhY2NlcHRfc2spO1xcbitcXHRcXHRcXHRcXHRcXHRwdXRfY3JlYXRpb24gPSB0cnVlO1xcbitcXHRcXHRcXHRcXHR9XFxuIFxcbi1cXHRcXHRcXHRcXHRiaF91bmxvY2tfc29jayhhY2NlcHRfc2spO1xcbitcXHRcXHRcXHRcXHRyZWxlYXNlX3NvY2soYWNjZXB0X3NrKTtcXG4rXFx0XFx0XFx0XFx0aWYgKHB1dF9jcmVhdGlvbilcXG4rXFx0XFx0XFx0XFx0XFx0c29ja19wdXQoYWNjZXB0X3NrKTsgLyogY3JlYXRpb24gcmVmICovXFxuIFxcdFxcdFxcdH1cXG4gXFx0XFx0fVxcbiBcXG5AQCAtMTEwLDIzICsxMzQsMTggQEAgc3RhdGljIHZvaWQgbmZjX2xsY3Bfc29ja2V0X3JlbGVhc2Uoc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCwgYm9vbCBkZXZpY2UsXFxuIFxcdFxcdHNrLVxcdTAwM2Vza19zdGF0ZSA9IExMQ1BfQ0xPU0VEO1xcbiBcXHRcXHRzay1cXHUwMDNlc2tfc3RhdGVfY2hhbmdlKHNrKTtcXG4gXFxuLVxcdFxcdGJoX3VubG9ja19zb2NrKHNrKTtcXG4tXFxuLVxcdFxcdHNrX2RlbF9ub2RlX2luaXQoc2spO1xcbitcXHRcXHRyZWxlYXNlX3NvY2soc2spO1xcbitcXHRcXHRzb2NrX3B1dChzayk7XFxuIFxcdH1cXG4gXFxuLVxcdHdyaXRlX3VubG9jayhcXHUwMDI2bG9jYWwtXFx1MDAzZXNvY2tldHMubG9jayk7XFxuLVxcbiBcXHQvKiBJZiB3ZSBzdGlsbCBoYXZlIGEgZGV2aWNlLCB3ZSBrZWVwIHRoZSBSQVcgc29ja2V0cyBhbGl2ZSAqL1xcbiBcXHRpZiAoZGV2aWNlID09IHRydWUpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuLVxcdHdyaXRlX2xvY2soXFx1MDAyNmxvY2FsLVxcdTAwM2VyYXdfc29ja2V0cy5sb2NrKTtcXG4tXFxuLVxcdHNrX2Zvcl9lYWNoX3NhZmUoc2ssIHRtcCwgXFx1MDAyNmxvY2FsLVxcdTAwM2VyYXdfc29ja2V0cy5oZWFkKSB7XFxuK1xcdHdoaWxlICgoc2sgPSBuZmNfbGxjcF9zb2NrX2xpc3RfcG9wKFxcdTAwMjZsb2NhbC1cXHUwMDNlcmF3X3NvY2tldHMpKSkge1xcbiBcXHRcXHRsbGNwX3NvY2sgPSBuZmNfbGxjcF9zb2NrKHNrKTtcXG4gXFxuLVxcdFxcdGJoX2xvY2tfc29jayhzayk7XFxuK1xcdFxcdGxvY2tfc29jayhzayk7XFxuIFxcbiBcXHRcXHRuZmNfbGxjcF9zb2NrZXRfcHVyZ2UobGxjcF9zb2NrKTtcXG4gXFxuQEAgLTEzNSwyNiArMTU0LDIwIEBAIHN0YXRpYyB2b2lkIG5mY19sbGNwX3NvY2tldF9yZWxlYXNlKHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwsIGJvb2wgZGV2aWNlLFxcbiBcXHRcXHRzay1cXHUwMDNlc2tfc3RhdGUgPSBMTENQX0NMT1NFRDtcXG4gXFx0XFx0c2stXFx1MDAzZXNrX3N0YXRlX2NoYW5nZShzayk7XFxuIFxcbi1cXHRcXHRiaF91bmxvY2tfc29jayhzayk7XFxuLVxcbi1cXHRcXHRza19kZWxfbm9kZV9pbml0KHNrKTtcXG4rXFx0XFx0cmVsZWFzZV9zb2NrKHNrKTtcXG4rXFx0XFx0c29ja19wdXQoc2spO1xcbiBcXHR9XFxuLVxcbi1cXHR3cml0ZV91bmxvY2soXFx1MDAyNmxvY2FsLVxcdTAwM2VyYXdfc29ja2V0cy5sb2NrKTtcXG4gfVxcbiBcXG4gc3RhdGljIHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbmZjX2xsY3BfbG9jYWxfZ2V0KHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwpXFxuIHtcXG4tXFx0LyogU2luY2UgdXNpbmcgbmZjX2xsY3BfbG9jYWwgbWF5IHJlc3VsdCBpbiB1c2FnZSBvZiBuZmNfZGV2LCB3aGVuZXZlclxcbi1cXHQgKiB3ZSBob2xkIGEgcmVmZXJlbmNlIHRvIGxvY2FsLCB3ZSBhbHNvIG5lZWQgdG8gaG9sZCBhIHJlZmVyZW5jZSB0b1xcbi1cXHQgKiB0aGUgZGV2aWNlIHRvIGF2b2lkIFVBRi5cXG4tXFx0ICovXFxuLVxcdGlmICghbmZjX2dldF9kZXZpY2UobG9jYWwtXFx1MDAzZWRldi1cXHUwMDNlaWR4KSlcXG4rXFx0aWYgKCFsb2NhbClcXG4gXFx0XFx0cmV0dXJuIE5VTEw7XFxuIFxcbi1cXHRrcmVmX2dldChcXHUwMDI2bG9jYWwtXFx1MDAzZXJlZik7XFxuK1xcdGlmIChrcmVmX2dldF91bmxlc3NfemVybyhcXHUwMDI2bG9jYWwtXFx1MDAzZXJlZikpXFxuK1xcdFxcdHJldHVybiBsb2NhbDtcXG4gXFxuLVxcdHJldHVybiBsb2NhbDtcXG4rXFx0cmV0dXJuIE5VTEw7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIGxvY2FsX2NsZWFudXAoc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbClcXG5AQCAtMTcyLDMwICsxODUsMzQgQEAgc3RhdGljIHZvaWQgbG9jYWxfY2xlYW51cChzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsKVxcbiBcXHRuZmNfbGxjcF9mcmVlX3NkcF90bHZfbGlzdChcXHUwMDI2bG9jYWwtXFx1MDAzZXBlbmRpbmdfc2RyZXFzKTtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgbG9jYWxfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqcmVmKVxcbitzdGF0aWMgdm9pZCBsb2NhbF9yZWxlYXNlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbiB7XFxuIFxcdHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWw7XFxuK1xcdHN0cnVjdCBuZmNfZGV2ICpkZXY7XFxuIFxcbi1cXHRsb2NhbCA9IGNvbnRhaW5lcl9vZihyZWYsIHN0cnVjdCBuZmNfbGxjcF9sb2NhbCwgcmVmKTtcXG4rXFx0bG9jYWwgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IG5mY19sbGNwX2xvY2FsLCByZWxlYXNlX3dvcmspO1xcbitcXHRkZXYgPSBsb2NhbC1cXHUwMDNlZGV2O1xcbiBcXG4gXFx0bG9jYWxfY2xlYW51cChsb2NhbCk7XFxuIFxcdGtmcmVlKGxvY2FsKTtcXG4rXFx0bmZjX3B1dF9kZXZpY2UoZGV2KTtcXG4gfVxcbiBcXG4taW50IG5mY19sbGNwX2xvY2FsX3B1dChzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsKVxcbitzdGF0aWMgdm9pZCBsb2NhbF9yZWxlYXNlKHN0cnVjdCBrcmVmICpyZWYpXFxuIHtcXG4tXFx0c3RydWN0IG5mY19kZXYgKmRldjtcXG4tXFx0aW50IHJldDtcXG4rXFx0c3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbDtcXG4gXFxuLVxcdGlmIChsb2NhbCA9PSBOVUxMKVxcbi1cXHRcXHRyZXR1cm4gMDtcXG4rXFx0bG9jYWwgPSBjb250YWluZXJfb2YocmVmLCBzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwsIHJlZik7XFxuIFxcbi1cXHRkZXYgPSBsb2NhbC1cXHUwMDNlZGV2O1xcbitcXHRxdWV1ZV93b3JrKGxsY3Bfd3EsIFxcdTAwMjZsb2NhbC1cXHUwMDNlcmVsZWFzZV93b3JrKTtcXG4rfVxcbiBcXG4tXFx0cmV0ID0ga3JlZl9wdXQoXFx1MDAyNmxvY2FsLVxcdTAwM2VyZWYsIGxvY2FsX3JlbGVhc2UpO1xcbi1cXHRuZmNfcHV0X2RldmljZShkZXYpO1xcbitpbnQgbmZjX2xsY3BfbG9jYWxfcHV0KHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwpXFxuK3tcXG4rXFx0aWYgKCFsb2NhbClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuIFxcbi1cXHRyZXR1cm4gcmV0O1xcbitcXHRyZXR1cm4ga3JlZl9wdXQoXFx1MDAyNmxvY2FsLVxcdTAwM2VyZWYsIGxvY2FsX3JlbGVhc2UpO1xcbiB9XFxuIFxcbiBzdGF0aWMgc3RydWN0IG5mY19sbGNwX3NvY2sgKm5mY19sbGNwX3NvY2tfZ2V0KHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwsXFxuQEAgLTE3MDUsNiArMTcyMiw3IEBAIGludCBuZmNfbGxjcF9yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IG5mY19kZXYgKm5kZXYpXFxuIFxcdElOSVRfV09SSyhcXHUwMDI2bG9jYWwtXFx1MDAzZXJ4X3dvcmssIG5mY19sbGNwX3J4X3dvcmspO1xcbiBcXG4gXFx0SU5JVF9XT1JLKFxcdTAwMjZsb2NhbC1cXHUwMDNldGltZW91dF93b3JrLCBuZmNfbGxjcF90aW1lb3V0X3dvcmspO1xcbitcXHRJTklUX1dPUksoXFx1MDAyNmxvY2FsLVxcdTAwM2VyZWxlYXNlX3dvcmssIGxvY2FsX3JlbGVhc2Vfd29yayk7XFxuIFxcbiBcXHRyd2xvY2tfaW5pdChcXHUwMDI2bG9jYWwtXFx1MDAzZXNvY2tldHMubG9jayk7XFxuIFxcdHJ3bG9ja19pbml0KFxcdTAwMjZsb2NhbC1cXHUwMDNlY29ubmVjdGluZ19zb2NrZXRzLmxvY2spO1xcbkBAIC0xNzQ4LDEwICsxNzY2LDIzIEBAIHZvaWQgbmZjX2xsY3BfdW5yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IG5mY19kZXYgKmRldilcXG4gXFxuIGludCBfX2luaXQgbmZjX2xsY3BfaW5pdCh2b2lkKVxcbiB7XFxuLVxcdHJldHVybiBuZmNfbGxjcF9zb2NrX2luaXQoKTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGxsY3Bfd3EgPSBhbGxvY193b3JrcXVldWUoXFxcIm5mY19sbGNwX3dxXFxcIiwgV1FfVU5CT1VORCwgMCk7XFxuK1xcdGlmICghbGxjcF93cSlcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHRyZXQgPSBuZmNfbGxjcF9zb2NrX2luaXQoKTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRkZXN0cm95X3dvcmtxdWV1ZShsbGNwX3dxKTtcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuIHZvaWQgbmZjX2xsY3BfZXhpdCh2b2lkKVxcbiB7XFxuIFxcdG5mY19sbGNwX3NvY2tfZXhpdCgpO1xcbitcXHRkZXN0cm95X3dvcmtxdWV1ZShsbGNwX3dxKTtcXG4gfVxcbmRpZmYgLS1naXQgYS9uZXQvbmZjL2xsY3Bfc29jay5jIGIvbmV0L25mYy9sbGNwX3NvY2suY1xcbmluZGV4IDU1NThkOGE0ZDQ4YjMuLmNlNjg3NWViNThmYmMgMTAwNjQ0XFxuLS0tIGEvbmV0L25mYy9sbGNwX3NvY2suY1xcbisrKyBiL25ldC9uZmMvbGxjcF9zb2NrLmNcXG5AQCAtMzkyLDExICszOTIsMTIgQEAgdm9pZCBuZmNfbGxjcF9hY2NlcHRfdW5saW5rKHN0cnVjdCBzb2NrICpzaylcXG4gXFxuIFxcdHByX2RlYnVnKFxcXCJzdGF0ZSAlZFxcXFxuXFxcIiwgc2stXFx1MDAzZXNrX3N0YXRlKTtcXG4gXFxuLVxcdGxpc3RfZGVsX2luaXQoXFx1MDAyNmxsY3Bfc29jay1cXHUwMDNlYWNjZXB0X3F1ZXVlKTtcXG4tXFx0c2tfYWNjZXB0cV9yZW1vdmVkKGxsY3Bfc29jay1cXHUwMDNlcGFyZW50KTtcXG4tXFx0bGxjcF9zb2NrLVxcdTAwM2VwYXJlbnQgPSBOVUxMO1xcbi1cXG4tXFx0c29ja19wdXQoc2spO1xcbitcXHRpZiAobGxjcF9zb2NrLVxcdTAwM2VwYXJlbnQpIHtcXG4rXFx0XFx0bGlzdF9kZWxfaW5pdChcXHUwMDI2bGxjcF9zb2NrLVxcdTAwM2VhY2NlcHRfcXVldWUpO1xcbitcXHRcXHRza19hY2NlcHRxX3JlbW92ZWQobGxjcF9zb2NrLVxcdTAwM2VwYXJlbnQpO1xcbitcXHRcXHRsbGNwX3NvY2stXFx1MDAzZXBhcmVudCA9IE5VTEw7XFxuK1xcdFxcdHNvY2tfcHV0KHNrKTtcXG4rXFx0fVxcbiB9XFxuIFxcbiB2b2lkIG5mY19sbGNwX2FjY2VwdF9lbnF1ZXVlKHN0cnVjdCBzb2NrICpwYXJlbnQsIHN0cnVjdCBzb2NrICpzaylcXG5AQCAtNDIzLDEyICs0MjQsMjAgQEAgc3RydWN0IHNvY2sgKm5mY19sbGNwX2FjY2VwdF9kZXF1ZXVlKHN0cnVjdCBzb2NrICpwYXJlbnQsXFxuIFxcbiBcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobHNrLCBuLCBcXHUwMDI2bGxjcF9wYXJlbnQtXFx1MDAzZWFjY2VwdF9xdWV1ZSxcXG4gXFx0XFx0XFx0XFx0IGFjY2VwdF9xdWV1ZSkge1xcbitcXHRcXHRzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsO1xcbitcXG4gXFx0XFx0c2sgPSBcXHUwMDI2bHNrLVxcdTAwM2VzaztcXG4tXFx0XFx0bG9ja19zb2NrKHNrKTtcXG4rXFx0XFx0bG9ja19zb2NrX25lc3RlZChzaywgU0lOR0xFX0RFUFRIX05FU1RJTkcpO1xcbiBcXG4gXFx0XFx0aWYgKHNrLVxcdTAwM2Vza19zdGF0ZSA9PSBMTENQX0NMT1NFRCkge1xcbi1cXHRcXHRcXHRyZWxlYXNlX3NvY2soc2spO1xcbitcXHRcXHRcXHRsb2NhbCA9IG5mY19sbGNwX3NvY2soc2spLVxcdTAwM2Vsb2NhbDtcXG4rXFxuIFxcdFxcdFxcdG5mY19sbGNwX2FjY2VwdF91bmxpbmsoc2spO1xcbitcXHRcXHRcXHRpZiAobG9jYWwpXFxuK1xcdFxcdFxcdFxcdG5mY19sbGNwX3NvY2tfdW5saW5rKFxcdTAwMjZsb2NhbC1cXHUwMDNlc29ja2V0cywgc2spO1xcbitcXHRcXHRcXHRzb2NrX29ycGhhbihzayk7XFxuK1xcdFxcdFxcdHJlbGVhc2Vfc29jayhzayk7XFxuK1xcdFxcdFxcdHNvY2tfcHV0KHNrKTtcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdH1cXG4gXFxuQEAgLTQ2NCw3ICs0NzMsNyBAQCBzdGF0aWMgaW50IGxsY3Bfc29ja19hY2NlcHQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2tldCAqbmV3c29jayxcXG4gXFxuIFxcdHByX2RlYnVnKFxcXCJwYXJlbnQgJXBcXFxcblxcXCIsIHNrKTtcXG4gXFxuLVxcdGxvY2tfc29ja19uZXN0ZWQoc2ssIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTtcXG4rXFx0bG9ja19zb2NrKHNrKTtcXG4gXFxuIFxcdGlmIChzay1cXHUwMDNlc2tfc3RhdGUgIT0gTExDUF9MSVNURU4pIHtcXG4gXFx0XFx0cmV0ID0gLUVCQURGRDtcXG5AQCAtNDkwLDcgKzQ5OSwxMiBAQCBzdGF0aWMgaW50IGxsY3Bfc29ja19hY2NlcHQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2tldCAqbmV3c29jayxcXG4gXFxuIFxcdFxcdHJlbGVhc2Vfc29jayhzayk7XFxuIFxcdFxcdHRpbWVvID0gc2NoZWR1bGVfdGltZW91dCh0aW1lbyk7XFxuLVxcdFxcdGxvY2tfc29ja19uZXN0ZWQoc2ssIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTtcXG4rXFx0XFx0bG9ja19zb2NrKHNrKTtcXG4rXFxuK1xcdFxcdGlmIChzay1cXHUwMDNlc2tfc3RhdGUgIT0gTExDUF9MSVNURU4pIHtcXG4rXFx0XFx0XFx0cmV0ID0gLUVCQURGRDtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdH1cXG4gXFx0fVxcbiBcXHRfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7XFxuIFxcdHJlbW92ZV93YWl0X3F1ZXVlKHNrX3NsZWVwKHNrKSwgXFx1MDAyNndhaXQpO1xcbkBAIC02MjksMTMgKzY0MywyNCBAQCBzdGF0aWMgaW50IGxsY3Bfc29ja19yZWxlYXNlKHN0cnVjdCBzb2NrZXQgKnNvY2spXFxuIFxcbiBcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobHNrLCBuLCBcXHUwMDI2bGxjcF9zb2NrLVxcdTAwM2VhY2NlcHRfcXVldWUsXFxuIFxcdFxcdFxcdFxcdFxcdCBhY2NlcHRfcXVldWUpIHtcXG4rXFx0XFx0XFx0Ym9vbCBwdXRfY3JlYXRpb24gPSBmYWxzZTtcXG4rXFxuIFxcdFxcdFxcdGFjY2VwdF9zayA9IFxcdTAwMjZsc2stXFx1MDAzZXNrO1xcbi1cXHRcXHRcXHRsb2NrX3NvY2soYWNjZXB0X3NrKTtcXG4rXFx0XFx0XFx0bG9ja19zb2NrX25lc3RlZChhY2NlcHRfc2ssIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTtcXG4gXFxuLVxcdFxcdFxcdG5mY19sbGNwX3NlbmRfZGlzY29ubmVjdChsc2spO1xcbi1cXHRcXHRcXHRuZmNfbGxjcF9hY2NlcHRfdW5saW5rKGFjY2VwdF9zayk7XFxuK1xcdFxcdFxcdGlmIChuZmNfbGxjcF9zb2NrKGFjY2VwdF9zayktXFx1MDAzZXBhcmVudCA9PSBzaykge1xcbitcXHRcXHRcXHRcXHRuZmNfbGxjcF9zZW5kX2Rpc2Nvbm5lY3QobHNrKTtcXG4rXFx0XFx0XFx0XFx0bmZjX2xsY3BfYWNjZXB0X3VubGluayhhY2NlcHRfc2spO1xcbitcXHRcXHRcXHRcXHRuZmNfbGxjcF9zb2NrX3VubGluayhcXHUwMDI2bG9jYWwtXFx1MDAzZXNvY2tldHMsIGFjY2VwdF9zayk7XFxuK1xcbitcXHRcXHRcXHRcXHRhY2NlcHRfc2stXFx1MDAzZXNrX3N0YXRlID0gTExDUF9DTE9TRUQ7XFxuK1xcdFxcdFxcdFxcdHNvY2tfb3JwaGFuKGFjY2VwdF9zayk7XFxuK1xcdFxcdFxcdFxcdHB1dF9jcmVhdGlvbiA9IHRydWU7XFxuK1xcdFxcdFxcdH1cXG4gXFxuIFxcdFxcdFxcdHJlbGVhc2Vfc29jayhhY2NlcHRfc2spO1xcbitcXHRcXHRcXHRpZiAocHV0X2NyZWF0aW9uKVxcbitcXHRcXHRcXHRcXHRzb2NrX3B1dChhY2NlcHRfc2spOyAvKiBjcmVhdGlvbiByZWYgKi9cXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwOTowMjoyNi42ODk3NTY4NzlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjYyODEwNjMxMTI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GQ1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5mY19sbGNwX2FjY2VwdF91bmxpbmtcIixcbiAgICBcIm5mY19sbGNwX2FjY2VwdF9kZXF1ZXVlXCIsXG4gICAgXCJuZmNfbGxjcF9sb2NhbF9wdXRcIixcbiAgICBcImxsY3Bfc29ja19hY2NlcHRcIixcbiAgICBcImxsY3Bfc29ja19yZWxlYXNlXCIsXG4gICAgXCJuZmNfbGxjcF9yZWdpc3Rlcl9kZXZpY2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXNvbHZlcyByYWNlIGNvbmRpdGlvbnMsIGltcHJvcGVyIHNvY2tldCBsb2NraW5nLCBhbmQgcmVmZXJlbmNlIGNvdW50aW5nIGlzc3VlcyBpbiB0aGUgTkZDIExMQ1Agc3Vic3lzdGVtIGFjcm9zcyBzb2NrZXQgcmVsZWFzZSwgY29ubmVjdGlvbiBhY2NlcHRhbmNlLCBhbmQgbG9jYWwgZGV2aWNlIHRlYXJkb3duLiBUaGVzZSBjb2RlIHBhdGhzIGFyZSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBBRl9ORkMgc29ja2V0IG9wZXJhdGlvbnMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDhhNzI3ZWQ3MTIyZDU3NzRmMmQ1MmM4MzJlMTMyZmM3NWE2NDJhY2ZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAzIDA5OjAyOjIzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L25mYy9sbGNwLmggYi9uZXQvbmZjL2xsY3AuaFxuaW5kZXggZDgzNDVlZDU3Yzk1NC4uMjNhZTdhMDExMmQzNyAxMDA2NDRcbi0tLSBhL25ldC9uZmMvbGxjcC5oXG4rKysgYi9uZXQvbmZjL2xsY3AuaFxuQEAgLTkxLDYgKzkxLDcgQEAgc3RydWN0IG5mY19sbGNwX2xvY2FsIHtcbiBcdHN0cnVjdCBobGlzdF9oZWFkIHBlbmRpbmdfc2RyZXFzO1xuIFx0c3RydWN0IHRpbWVyX2xpc3Qgc2RyZXFfdGltZXI7XG4gXHRzdHJ1Y3Qgd29ya19zdHJ1Y3Qgc2RyZXFfdGltZW91dF93b3JrO1xuK1x0c3RydWN0IHdvcmtfc3RydWN0IHJlbGVhc2Vfd29yaztcbiBcdHU4IHNkcmVxX25leHRfdGlkO1xuIFxuIFx0Lyogc29ja2V0cyBhcnJheSAqL1xuZGlmZiAtLWdpdCBhL25ldC9uZmMvbGxjcF9jb3JlLmMgYi9uZXQvbmZjL2xsY3BfY29yZS5jXG5pbmRleCBiZDYzNjFlMmVmYTRmLi4yMzU1M2U3NDI2ZWMyIDEwMDY0NFxuLS0tIGEvbmV0L25mYy9sbGNwX2NvcmUuY1xuKysrIGIvbmV0L25mYy9sbGNwX2NvcmUuY1xuQEAgLTIwLDYgKzIwLDggQEAgc3RhdGljIExJU1RfSEVBRChsbGNwX2RldmljZXMpO1xuIC8qIFByb3RlY3RzIGxsY3BfZGV2aWNlcyBsaXN0ICovXG4gc3RhdGljIERFRklORV9TUElOTE9DSyhsbGNwX2RldmljZXNfbG9jayk7XG4gXG4rc3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpsbGNwX3dxO1xuK1xuIHN0YXRpYyB2b2lkIG5mY19sbGNwX3J4X3NrYihzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbiBcbiB2b2lkIG5mY19sbGNwX3NvY2tfbGluayhzdHJ1Y3QgbGxjcF9zb2NrX2xpc3QgKmwsIHN0cnVjdCBzb2NrICpzaylcbkBAIC02MywyMSArNjUsMzMgQEAgc3RhdGljIHZvaWQgbmZjX2xsY3Bfc29ja2V0X3B1cmdlKHN0cnVjdCBuZmNfbGxjcF9zb2NrICpzb2NrKVxuIFx0fVxuIH1cbiBcbitzdGF0aWMgc3RydWN0IHNvY2sgKm5mY19sbGNwX3NvY2tfbGlzdF9wb3Aoc3RydWN0IGxsY3Bfc29ja19saXN0ICpsKVxuK3tcbitcdHN0cnVjdCBzb2NrICpzaztcbitcbitcdHdyaXRlX2xvY2soXHUwMDI2bC1cdTAwM2Vsb2NrKTtcbitcdHNrID0gc2tfaGVhZChcdTAwMjZsLVx1MDAzZWhlYWQpO1xuK1x0aWYgKHNrKSB7XG4rXHRcdHNvY2tfaG9sZChzayk7XG4rXHRcdHNrX2RlbF9ub2RlX2luaXQoc2spO1xuK1x0fVxuK1x0d3JpdGVfdW5sb2NrKFx1MDAyNmwtXHUwMDNlbG9jayk7XG4rXG4rXHRyZXR1cm4gc2s7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIG5mY19sbGNwX3NvY2tldF9yZWxlYXNlKHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwsIGJvb2wgZGV2aWNlLFxuIFx0XHRcdFx0ICAgIGludCBlcnIpXG4ge1xuIFx0c3RydWN0IHNvY2sgKnNrO1xuLVx0c3RydWN0IGhsaXN0X25vZGUgKnRtcDtcbiBcdHN0cnVjdCBuZmNfbGxjcF9zb2NrICpsbGNwX3NvY2s7XG4gXG4gXHRza2JfcXVldWVfcHVyZ2UoXHUwMDI2bG9jYWwtXHUwMDNldHhfcXVldWUpO1xuIFxuLVx0d3JpdGVfbG9jayhcdTAwMjZsb2NhbC1cdTAwM2Vzb2NrZXRzLmxvY2spO1xuLVxuLVx0c2tfZm9yX2VhY2hfc2FmZShzaywgdG1wLCBcdTAwMjZsb2NhbC1cdTAwM2Vzb2NrZXRzLmhlYWQpIHtcbitcdHdoaWxlICgoc2sgPSBuZmNfbGxjcF9zb2NrX2xpc3RfcG9wKFx1MDAyNmxvY2FsLVx1MDAzZXNvY2tldHMpKSkge1xuIFx0XHRsbGNwX3NvY2sgPSBuZmNfbGxjcF9zb2NrKHNrKTtcbiBcbi1cdFx0YmhfbG9ja19zb2NrKHNrKTtcbitcdFx0bG9ja19zb2NrKHNrKTtcbiBcbiBcdFx0bmZjX2xsY3Bfc29ja2V0X3B1cmdlKGxsY3Bfc29jayk7XG4gXG5AQCAtOTEsMTcgKzEwNSwyNyBAQCBzdGF0aWMgdm9pZCBuZmNfbGxjcF9zb2NrZXRfcmVsZWFzZShzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsLCBib29sIGRldmljZSxcbiBcdFx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobHNrLCBuLFxuIFx0XHRcdFx0XHRcdCBcdTAwMjZsbGNwX3NvY2stXHUwMDNlYWNjZXB0X3F1ZXVlLFxuIFx0XHRcdFx0XHRcdCBhY2NlcHRfcXVldWUpIHtcbi1cdFx0XHRcdGFjY2VwdF9zayA9IFx1MDAyNmxzay1cdTAwM2Vzaztcbi1cdFx0XHRcdGJoX2xvY2tfc29jayhhY2NlcHRfc2spO1xuLVxuLVx0XHRcdFx0bmZjX2xsY3BfYWNjZXB0X3VubGluayhhY2NlcHRfc2spO1xuK1x0XHRcdFx0Ym9vbCBwdXRfY3JlYXRpb24gPSBmYWxzZTtcbiBcbi1cdFx0XHRcdGlmIChlcnIpXG4tXHRcdFx0XHRcdGFjY2VwdF9zay1cdTAwM2Vza19lcnIgPSBlcnI7XG4tXHRcdFx0XHRhY2NlcHRfc2stXHUwMDNlc2tfc3RhdGUgPSBMTENQX0NMT1NFRDtcbi1cdFx0XHRcdGFjY2VwdF9zay1cdTAwM2Vza19zdGF0ZV9jaGFuZ2Uoc2spO1xuK1x0XHRcdFx0YWNjZXB0X3NrID0gXHUwMDI2bHNrLVx1MDAzZXNrO1xuK1x0XHRcdFx0bG9ja19zb2NrX25lc3RlZChhY2NlcHRfc2ssXG4rXHRcdFx0XHRcdFx0IFNJTkdMRV9ERVBUSF9ORVNUSU5HKTtcbitcbitcdFx0XHRcdGlmIChuZmNfbGxjcF9zb2NrKGFjY2VwdF9zayktXHUwMDNlcGFyZW50ID09IHNrKSB7XG4rXHRcdFx0XHRcdG5mY19sbGNwX2FjY2VwdF91bmxpbmsoYWNjZXB0X3NrKTtcbitcdFx0XHRcdFx0bmZjX2xsY3Bfc29ja191bmxpbmsoXHUwMDI2bG9jYWwtXHUwMDNlc29ja2V0cywgYWNjZXB0X3NrKTtcbitcbitcdFx0XHRcdFx0aWYgKGVycilcbitcdFx0XHRcdFx0XHRhY2NlcHRfc2stXHUwMDNlc2tfZXJyID0gZXJyO1xuK1x0XHRcdFx0XHRhY2NlcHRfc2stXHUwMDNlc2tfc3RhdGUgPSBMTENQX0NMT1NFRDtcbitcdFx0XHRcdFx0YWNjZXB0X3NrLVx1MDAzZXNrX3N0YXRlX2NoYW5nZShhY2NlcHRfc2spO1xuK1x0XHRcdFx0XHRzb2NrX29ycGhhbihhY2NlcHRfc2spO1xuK1x0XHRcdFx0XHRwdXRfY3JlYXRpb24gPSB0cnVlO1xuK1x0XHRcdFx0fVxuIFxuLVx0XHRcdFx0YmhfdW5sb2NrX3NvY2soYWNjZXB0X3NrKTtcbitcdFx0XHRcdHJlbGVhc2Vfc29jayhhY2NlcHRfc2spO1xuK1x0XHRcdFx0aWYgKHB1dF9jcmVhdGlvbilcbitcdFx0XHRcdFx0c29ja19wdXQoYWNjZXB0X3NrKTsgLyogY3JlYXRpb24gcmVmICovXG4gXHRcdFx0fVxuIFx0XHR9XG4gXG5AQCAtMTEwLDIzICsxMzQsMTggQEAgc3RhdGljIHZvaWQgbmZjX2xsY3Bfc29ja2V0X3JlbGVhc2Uoc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCwgYm9vbCBkZXZpY2UsXG4gXHRcdHNrLVx1MDAzZXNrX3N0YXRlID0gTExDUF9DTE9TRUQ7XG4gXHRcdHNrLVx1MDAzZXNrX3N0YXRlX2NoYW5nZShzayk7XG4gXG4tXHRcdGJoX3VubG9ja19zb2NrKHNrKTtcbi1cbi1cdFx0c2tfZGVsX25vZGVfaW5pdChzayk7XG4rXHRcdHJlbGVhc2Vfc29jayhzayk7XG4rXHRcdHNvY2tfcHV0KHNrKTtcbiBcdH1cbiBcbi1cdHdyaXRlX3VubG9jayhcdTAwMjZsb2NhbC1cdTAwM2Vzb2NrZXRzLmxvY2spO1xuLVxuIFx0LyogSWYgd2Ugc3RpbGwgaGF2ZSBhIGRldmljZSwgd2Uga2VlcCB0aGUgUkFXIHNvY2tldHMgYWxpdmUgKi9cbiBcdGlmIChkZXZpY2UgPT0gdHJ1ZSlcbiBcdFx0cmV0dXJuO1xuIFxuLVx0d3JpdGVfbG9jayhcdTAwMjZsb2NhbC1cdTAwM2VyYXdfc29ja2V0cy5sb2NrKTtcbi1cbi1cdHNrX2Zvcl9lYWNoX3NhZmUoc2ssIHRtcCwgXHUwMDI2bG9jYWwtXHUwMDNlcmF3X3NvY2tldHMuaGVhZCkge1xuK1x0d2hpbGUgKChzayA9IG5mY19sbGNwX3NvY2tfbGlzdF9wb3AoXHUwMDI2bG9jYWwtXHUwMDNlcmF3X3NvY2tldHMpKSkge1xuIFx0XHRsbGNwX3NvY2sgPSBuZmNfbGxjcF9zb2NrKHNrKTtcbiBcbi1cdFx0YmhfbG9ja19zb2NrKHNrKTtcbitcdFx0bG9ja19zb2NrKHNrKTtcbiBcbiBcdFx0bmZjX2xsY3Bfc29ja2V0X3B1cmdlKGxsY3Bfc29jayk7XG4gXG5AQCAtMTM1LDI2ICsxNTQsMjAgQEAgc3RhdGljIHZvaWQgbmZjX2xsY3Bfc29ja2V0X3JlbGVhc2Uoc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCwgYm9vbCBkZXZpY2UsXG4gXHRcdHNrLVx1MDAzZXNrX3N0YXRlID0gTExDUF9DTE9TRUQ7XG4gXHRcdHNrLVx1MDAzZXNrX3N0YXRlX2NoYW5nZShzayk7XG4gXG4tXHRcdGJoX3VubG9ja19zb2NrKHNrKTtcbi1cbi1cdFx0c2tfZGVsX25vZGVfaW5pdChzayk7XG4rXHRcdHJlbGVhc2Vfc29jayhzayk7XG4rXHRcdHNvY2tfcHV0KHNrKTtcbiBcdH1cbi1cbi1cdHdyaXRlX3VubG9jayhcdTAwMjZsb2NhbC1cdTAwM2VyYXdfc29ja2V0cy5sb2NrKTtcbiB9XG4gXG4gc3RhdGljIHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbmZjX2xsY3BfbG9jYWxfZ2V0KHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwpXG4ge1xuLVx0LyogU2luY2UgdXNpbmcgbmZjX2xsY3BfbG9jYWwgbWF5IHJlc3VsdCBpbiB1c2FnZSBvZiBuZmNfZGV2LCB3aGVuZXZlclxuLVx0ICogd2UgaG9sZCBhIHJlZmVyZW5jZSB0byBsb2NhbCwgd2UgYWxzbyBuZWVkIHRvIGhvbGQgYSByZWZlcmVuY2UgdG9cbi1cdCAqIHRoZSBkZXZpY2UgdG8gYXZvaWQgVUFGLlxuLVx0ICovXG4tXHRpZiAoIW5mY19nZXRfZGV2aWNlKGxvY2FsLVx1MDAzZWRldi1cdTAwM2VpZHgpKVxuK1x0aWYgKCFsb2NhbClcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXG4tXHRrcmVmX2dldChcdTAwMjZsb2NhbC1cdTAwM2VyZWYpO1xuK1x0aWYgKGtyZWZfZ2V0X3VubGVzc196ZXJvKFx1MDAyNmxvY2FsLVx1MDAzZXJlZikpXG4rXHRcdHJldHVybiBsb2NhbDtcbiBcbi1cdHJldHVybiBsb2NhbDtcbitcdHJldHVybiBOVUxMO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBsb2NhbF9jbGVhbnVwKHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwpXG5AQCAtMTcyLDMwICsxODUsMzQgQEAgc3RhdGljIHZvaWQgbG9jYWxfY2xlYW51cChzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsKVxuIFx0bmZjX2xsY3BfZnJlZV9zZHBfdGx2X2xpc3QoXHUwMDI2bG9jYWwtXHUwMDNlcGVuZGluZ19zZHJlcXMpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBsb2NhbF9yZWxlYXNlKHN0cnVjdCBrcmVmICpyZWYpXG4rc3RhdGljIHZvaWQgbG9jYWxfcmVsZWFzZV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiB7XG4gXHRzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsO1xuK1x0c3RydWN0IG5mY19kZXYgKmRldjtcbiBcbi1cdGxvY2FsID0gY29udGFpbmVyX29mKHJlZiwgc3RydWN0IG5mY19sbGNwX2xvY2FsLCByZWYpO1xuK1x0bG9jYWwgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IG5mY19sbGNwX2xvY2FsLCByZWxlYXNlX3dvcmspO1xuK1x0ZGV2ID0gbG9jYWwtXHUwMDNlZGV2O1xuIFxuIFx0bG9jYWxfY2xlYW51cChsb2NhbCk7XG4gXHRrZnJlZShsb2NhbCk7XG4rXHRuZmNfcHV0X2RldmljZShkZXYpO1xuIH1cbiBcbi1pbnQgbmZjX2xsY3BfbG9jYWxfcHV0KHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwpXG4rc3RhdGljIHZvaWQgbG9jYWxfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqcmVmKVxuIHtcbi1cdHN0cnVjdCBuZmNfZGV2ICpkZXY7XG4tXHRpbnQgcmV0O1xuK1x0c3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbDtcbiBcbi1cdGlmIChsb2NhbCA9PSBOVUxMKVxuLVx0XHRyZXR1cm4gMDtcbitcdGxvY2FsID0gY29udGFpbmVyX29mKHJlZiwgc3RydWN0IG5mY19sbGNwX2xvY2FsLCByZWYpO1xuIFxuLVx0ZGV2ID0gbG9jYWwtXHUwMDNlZGV2O1xuK1x0cXVldWVfd29yayhsbGNwX3dxLCBcdTAwMjZsb2NhbC1cdTAwM2VyZWxlYXNlX3dvcmspO1xuK31cbiBcbi1cdHJldCA9IGtyZWZfcHV0KFx1MDAyNmxvY2FsLVx1MDAzZXJlZiwgbG9jYWxfcmVsZWFzZSk7XG4tXHRuZmNfcHV0X2RldmljZShkZXYpO1xuK2ludCBuZmNfbGxjcF9sb2NhbF9wdXQoc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbClcbit7XG4rXHRpZiAoIWxvY2FsKVxuK1x0XHRyZXR1cm4gMDtcbiBcbi1cdHJldHVybiByZXQ7XG4rXHRyZXR1cm4ga3JlZl9wdXQoXHUwMDI2bG9jYWwtXHUwMDNlcmVmLCBsb2NhbF9yZWxlYXNlKTtcbiB9XG4gXG4gc3RhdGljIHN0cnVjdCBuZmNfbGxjcF9zb2NrICpuZmNfbGxjcF9zb2NrX2dldChzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsLFxuQEAgLTE3MDUsNiArMTcyMiw3IEBAIGludCBuZmNfbGxjcF9yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IG5mY19kZXYgKm5kZXYpXG4gXHRJTklUX1dPUksoXHUwMDI2bG9jYWwtXHUwMDNlcnhfd29yaywgbmZjX2xsY3Bfcnhfd29yayk7XG4gXG4gXHRJTklUX1dPUksoXHUwMDI2bG9jYWwtXHUwMDNldGltZW91dF93b3JrLCBuZmNfbGxjcF90aW1lb3V0X3dvcmspO1xuK1x0SU5JVF9XT1JLKFx1MDAyNmxvY2FsLVx1MDAzZXJlbGVhc2Vfd29yaywgbG9jYWxfcmVsZWFzZV93b3JrKTtcbiBcbiBcdHJ3bG9ja19pbml0KFx1MDAyNmxvY2FsLVx1MDAzZXNvY2tldHMubG9jayk7XG4gXHRyd2xvY2tfaW5pdChcdTAwMjZsb2NhbC1cdTAwM2Vjb25uZWN0aW5nX3NvY2tldHMubG9jayk7XG5AQCAtMTc0OCwxMCArMTc2NiwyMyBAQCB2b2lkIG5mY19sbGNwX3VucmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCBuZmNfZGV2ICpkZXYpXG4gXG4gaW50IF9faW5pdCBuZmNfbGxjcF9pbml0KHZvaWQpXG4ge1xuLVx0cmV0dXJuIG5mY19sbGNwX3NvY2tfaW5pdCgpO1xuK1x0aW50IHJldDtcbitcbitcdGxsY3Bfd3EgPSBhbGxvY193b3JrcXVldWUoXCJuZmNfbGxjcF93cVwiLCBXUV9VTkJPVU5ELCAwKTtcbitcdGlmICghbGxjcF93cSlcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRyZXQgPSBuZmNfbGxjcF9zb2NrX2luaXQoKTtcbitcdGlmIChyZXQpIHtcbitcdFx0ZGVzdHJveV93b3JrcXVldWUobGxjcF93cSk7XG4rXHRcdHJldHVybiByZXQ7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbiB9XG4gXG4gdm9pZCBuZmNfbGxjcF9leGl0KHZvaWQpXG4ge1xuIFx0bmZjX2xsY3Bfc29ja19leGl0KCk7XG4rXHRkZXN0cm95X3dvcmtxdWV1ZShsbGNwX3dxKTtcbiB9XG5kaWZmIC0tZ2l0IGEvbmV0L25mYy9sbGNwX3NvY2suYyBiL25ldC9uZmMvbGxjcF9zb2NrLmNcbmluZGV4IDU1NThkOGE0ZDQ4YjMuLmNlNjg3NWViNThmYmMgMTAwNjQ0XG4tLS0gYS9uZXQvbmZjL2xsY3Bfc29jay5jXG4rKysgYi9uZXQvbmZjL2xsY3Bfc29jay5jXG5AQCAtMzkyLDExICszOTIsMTIgQEAgdm9pZCBuZmNfbGxjcF9hY2NlcHRfdW5saW5rKHN0cnVjdCBzb2NrICpzaylcbiBcbiBcdHByX2RlYnVnKFwic3RhdGUgJWRcXG5cIiwgc2stXHUwMDNlc2tfc3RhdGUpO1xuIFxuLVx0bGlzdF9kZWxfaW5pdChcdTAwMjZsbGNwX3NvY2stXHUwMDNlYWNjZXB0X3F1ZXVlKTtcbi1cdHNrX2FjY2VwdHFfcmVtb3ZlZChsbGNwX3NvY2stXHUwMDNlcGFyZW50KTtcbi1cdGxsY3Bfc29jay1cdTAwM2VwYXJlbnQgPSBOVUxMO1xuLVxuLVx0c29ja19wdXQoc2spO1xuK1x0aWYgKGxsY3Bfc29jay1cdTAwM2VwYXJlbnQpIHtcbitcdFx0bGlzdF9kZWxfaW5pdChcdTAwMjZsbGNwX3NvY2stXHUwMDNlYWNjZXB0X3F1ZXVlKTtcbitcdFx0c2tfYWNjZXB0cV9yZW1vdmVkKGxsY3Bfc29jay1cdTAwM2VwYXJlbnQpO1xuK1x0XHRsbGNwX3NvY2stXHUwMDNlcGFyZW50ID0gTlVMTDtcbitcdFx0c29ja19wdXQoc2spO1xuK1x0fVxuIH1cbiBcbiB2b2lkIG5mY19sbGNwX2FjY2VwdF9lbnF1ZXVlKHN0cnVjdCBzb2NrICpwYXJlbnQsIHN0cnVjdCBzb2NrICpzaylcbkBAIC00MjMsMTIgKzQyNCwyMCBAQCBzdHJ1Y3Qgc29jayAqbmZjX2xsY3BfYWNjZXB0X2RlcXVldWUoc3RydWN0IHNvY2sgKnBhcmVudCxcbiBcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShsc2ssIG4sIFx1MDAyNmxsY3BfcGFyZW50LVx1MDAzZWFjY2VwdF9xdWV1ZSxcbiBcdFx0XHRcdCBhY2NlcHRfcXVldWUpIHtcbitcdFx0c3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbDtcbitcbiBcdFx0c2sgPSBcdTAwMjZsc2stXHUwMDNlc2s7XG4tXHRcdGxvY2tfc29jayhzayk7XG4rXHRcdGxvY2tfc29ja19uZXN0ZWQoc2ssIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTtcbiBcbiBcdFx0aWYgKHNrLVx1MDAzZXNrX3N0YXRlID09IExMQ1BfQ0xPU0VEKSB7XG4tXHRcdFx0cmVsZWFzZV9zb2NrKHNrKTtcbitcdFx0XHRsb2NhbCA9IG5mY19sbGNwX3NvY2soc2spLVx1MDAzZWxvY2FsO1xuK1xuIFx0XHRcdG5mY19sbGNwX2FjY2VwdF91bmxpbmsoc2spO1xuK1x0XHRcdGlmIChsb2NhbClcbitcdFx0XHRcdG5mY19sbGNwX3NvY2tfdW5saW5rKFx1MDAyNmxvY2FsLVx1MDAzZXNvY2tldHMsIHNrKTtcbitcdFx0XHRzb2NrX29ycGhhbihzayk7XG4rXHRcdFx0cmVsZWFzZV9zb2NrKHNrKTtcbitcdFx0XHRzb2NrX3B1dChzayk7XG4gXHRcdFx0Y29udGludWU7XG4gXHRcdH1cbiBcbkBAIC00NjQsNyArNDczLDcgQEAgc3RhdGljIGludCBsbGNwX3NvY2tfYWNjZXB0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrZXQgKm5ld3NvY2ssXG4gXG4gXHRwcl9kZWJ1ZyhcInBhcmVudCAlcFxcblwiLCBzayk7XG4gXG4tXHRsb2NrX3NvY2tfbmVzdGVkKHNrLCBTSU5HTEVfREVQVEhfTkVTVElORyk7XG4rXHRsb2NrX3NvY2soc2spO1xuIFxuIFx0aWYgKHNrLVx1MDAzZXNrX3N0YXRlICE9IExMQ1BfTElTVEVOKSB7XG4gXHRcdHJldCA9IC1FQkFERkQ7XG5AQCAtNDkwLDcgKzQ5OSwxMiBAQCBzdGF0aWMgaW50IGxsY3Bfc29ja19hY2NlcHQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2tldCAqbmV3c29jayxcbiBcbiBcdFx0cmVsZWFzZV9zb2NrKHNrKTtcbiBcdFx0dGltZW8gPSBzY2hlZHVsZV90aW1lb3V0KHRpbWVvKTtcbi1cdFx0bG9ja19zb2NrX25lc3RlZChzaywgU0lOR0xFX0RFUFRIX05FU1RJTkcpO1xuK1x0XHRsb2NrX3NvY2soc2spO1xuK1xuK1x0XHRpZiAoc2stXHUwMDNlc2tfc3RhdGUgIT0gTExDUF9MSVNURU4pIHtcbitcdFx0XHRyZXQgPSAtRUJBREZEO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHR9XG4gXHR9XG4gXHRfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7XG4gXHRyZW1vdmVfd2FpdF9xdWV1ZShza19zbGVlcChzayksIFx1MDAyNndhaXQpO1xuQEAgLTYyOSwxMyArNjQzLDI0IEBAIHN0YXRpYyBpbnQgbGxjcF9zb2NrX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jaylcbiBcbiBcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGxzaywgbiwgXHUwMDI2bGxjcF9zb2NrLVx1MDAzZWFjY2VwdF9xdWV1ZSxcbiBcdFx0XHRcdFx0IGFjY2VwdF9xdWV1ZSkge1xuK1x0XHRcdGJvb2wgcHV0X2NyZWF0aW9uID0gZmFsc2U7XG4rXG4gXHRcdFx0YWNjZXB0X3NrID0gXHUwMDI2bHNrLVx1MDAzZXNrO1xuLVx0XHRcdGxvY2tfc29jayhhY2NlcHRfc2spO1xuK1x0XHRcdGxvY2tfc29ja19uZXN0ZWQoYWNjZXB0X3NrLCBTSU5HTEVfREVQVEhfTkVTVElORyk7XG4gXG4tXHRcdFx0bmZjX2xsY3Bfc2VuZF9kaXNjb25uZWN0KGxzayk7XG4tXHRcdFx0bmZjX2xsY3BfYWNjZXB0X3VubGluayhhY2NlcHRfc2spO1xuK1x0XHRcdGlmIChuZmNfbGxjcF9zb2NrKGFjY2VwdF9zayktXHUwMDNlcGFyZW50ID09IHNrKSB7XG4rXHRcdFx0XHRuZmNfbGxjcF9zZW5kX2Rpc2Nvbm5lY3QobHNrKTtcbitcdFx0XHRcdG5mY19sbGNwX2FjY2VwdF91bmxpbmsoYWNjZXB0X3NrKTtcbitcdFx0XHRcdG5mY19sbGNwX3NvY2tfdW5saW5rKFx1MDAyNmxvY2FsLVx1MDAzZXNvY2tldHMsIGFjY2VwdF9zayk7XG4rXG4rXHRcdFx0XHRhY2NlcHRfc2stXHUwMDNlc2tfc3RhdGUgPSBMTENQX0NMT1NFRDtcbitcdFx0XHRcdHNvY2tfb3JwaGFuKGFjY2VwdF9zayk7XG4rXHRcdFx0XHRwdXRfY3JlYXRpb24gPSB0cnVlO1xuK1x0XHRcdH1cbiBcbiBcdFx0XHRyZWxlYXNlX3NvY2soYWNjZXB0X3NrKTtcbitcdFx0XHRpZiAocHV0X2NyZWF0aW9uKVxuK1x0XHRcdFx0c29ja19wdXQoYWNjZXB0X3NrKTsgLyogY3JlYXRpb24gcmVmICovXG4gXHRcdH1cbiBcdH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA5OjAyOjI2LjY4OTc1ODI1OVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjExNDgwNzQxMzExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgdGhlIE5GQyBMTENQIFBhdGNoOiBBIFF1aWNrIEFzc2Vzc21lbnQqKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoaXMgcGF0Y2ggYW5kIGZpZ3VyZSBvdXQgdGhlIGJlc3QgYXBwcm9hY2ggZm9yIGZ1enppbmcgaXQuIEZpcnN0IHRoaW5ncyBmaXJzdDogdGhlIHBhdGNoIGludm9sdmVzIGBuZXQvbmZjL2xsY3AuaGAsIGBuZXQvbmZjL2xsY3BfY29yZS5jYCwgYW5kIGBuZXQvbmZjL2xsY3Bfc29jay5jYC4gVGhhdCB0ZWxscyBtZSB3ZSdyZSBsb29raW5nIGF0IGZpeGVzIGZvciBjb25jdXJyZW5jeSBhbmQgcmVmY291bnRpbmcgaXNzdWVzIHdpdGhpbiBORkMncyBMTENQIHNvY2tldCBoYW5kbGluZywgc3BlY2lmaWNhbGx5IGFyb3VuZCBmdW5jdGlvbnMgbGlrZSBgbmZjX2xsY3Bfc29ja2V0X3JlbGVhc2VgLCBgbmZjX2xsY3Bfc29ja19saXN0X3BvcGAsIHZhcmlvdXMgbG9jYWwgcmVsZWFzZSBhbmQgcHV0IGZ1bmN0aW9ucywgYWNjZXB0L2RlcXVldWUgb3BlcmF0aW9ucywgYW5kIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYSB3b3JrcXVldWUgKGBsbGNwX3dxYCkgZm9yIGRlZmVycmVkIGxvY2FsIHJlbGVhc2VzLiBUaGUgc2hpZnQgZnJvbSBgYmhfbG9ja19zb2NrYCB0byBgbG9ja19zb2NrYCBmb3Igc29ja2V0IGxvY2tpbmcgaXMgYSBrZXkgaW5kaWNhdG9yIG9mIGNvbmN1cnJlbmN5IGNvbmNlcm5zIGJlaW5nIGFkZHJlc3NlZC4gVGhlIGZpeCBsaWtlbHkgcmV2b2x2ZXMgYXJvdW5kIHNvY2tfcHV0IGFuZCBzb2NrX29ycGhhbi5cblxuTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogY2FuIHdlIGV2ZW4gcmVhY2ggdGhpcyBjb2RlIHdpdGggZnV6emluZz8gR29vZCBuZXdzLCBpdCBsb29rcyBsaWtlIHN5emthbGxlciBhbHJlYWR5IGhlYXZpbHkgZXhlcmNpc2VzIE5GQyBhbmQgTExDUCBzb2NrZXRzLiBUaGF0IG1lYW5zIHdlIGhhdmUgYSBjbGVhciBwYXRoIHVzaW5nIHJhdyBzb2NrZXRzLCB2aXJ0dWFsIGRldmljZXMsIG5ldGxpbmsgaW50ZXJmYWNlcywgYW5kIHN0YW5kYXJkIHNvY2tldCBzeXNjYWxscy4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgZnV6emluZyFcblxuVGltZSB0byBjaGVjayB0aGUgS2NvbmZpZyBzZXR0aW5ncyBpbiBgbmV0L25mYy9gLiBHb3R0YSBjb25maXJtIHRoZSByZWxldmFudCBvcHRpb25zIGFyZSBlbmFibGVkIGluIG91ciBmdXp6aW5nIGVudmlyb25tZW50LiBCYXNlZCBvbiB0aGUgZmlsZSBjb250ZXh0LCB0aGUgbWFpbiBzeW1ib2xzIHNob3VsZCBiZSB0aGUgZnVuY3Rpb25zIGRlc2NyaWJlZCBhYm92ZS4gSSB3aWxsIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGZvY3VzIHN5bWJvbHMgZm9yIHRoaXMgYW5hbHlzaXMuIFdpdGggdGhpcyBpbmZvcm1hdGlvbiwgSSBjYW4gY3JlYXRlIGFuIGluaXRpYWwgZnV6emluZyBjb25maWcsIHdoaWNoIEkgd2lsbCB0aGVuIHJlZmluZSBiYXNlZCBvbiBmdXp6aW5nIHJlc3VsdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3MzIsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MDksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwOTowMjozOC4xNzA1MDM0OVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTQ0Mzc1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkZDXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25mYy9LY29uZmlnLTUtXFxubmV0L25mYy9LY29uZmlnOjY6bWVudWNvbmZpZyBORkNcXG5uZXQvbmZjL0tjb25maWctNy1cXHRkZXBlbmRzIG9uIFJGS0lMTCB8fCAhUkZLSUxMXFxuLS1cXG5uZXQvbmZjL0tjb25maWctMTYtXFxubmV0L25mYy9LY29uZmlnOjE3OmNvbmZpZyBORkNfRElHSVRBTFxcbm5ldC9uZmMvS2NvbmZpZy0xOC1cXHRkZXBlbmRzIG9uIE5GQ1xcbi0tXFxubmV0L25mYy9oY2kvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbm5ldC9uZmMvaGNpL0tjb25maWc6Mjpjb25maWcgTkZDX0hDSVxcbm5ldC9uZmMvaGNpL0tjb25maWctMy1cXHRkZXBlbmRzIG9uIE5GQ1xcbi0tXFxubmV0L25mYy9oY2kvS2NvbmZpZy0xMC1cXG5uZXQvbmZjL2hjaS9LY29uZmlnOjExOmNvbmZpZyBORkNfU0hETENcXG5uZXQvbmZjL2hjaS9LY29uZmlnLTEyLVxcdGRlcGVuZHMgb24gTkZDX0hDSVxcbi0tXFxubmV0L25mYy9uY2kvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbm5ldC9uZmMvbmNpL0tjb25maWc6Mjpjb25maWcgTkZDX05DSVxcbm5ldC9uZmMvbmNpL0tjb25maWctMy1cXHRkZXBlbmRzIG9uIE5GQ1xcbi0tXFxubmV0L25mYy9uY2kvS2NvbmZpZy0xMi1cXG5uZXQvbmZjL25jaS9LY29uZmlnOjEzOmNvbmZpZyBORkNfTkNJX1NQSVxcbm5ldC9uZmMvbmNpL0tjb25maWctMTQtXFx0ZGVwZW5kcyBvbiBORkNfTkNJIFxcdTAwMjZcXHUwMDI2IFNQSVxcbi0tXFxubmV0L25mYy9uY2kvS2NvbmZpZy0yMy1cXG5uZXQvbmZjL25jaS9LY29uZmlnOjI0OmNvbmZpZyBORkNfTkNJX1VBUlRcXG5uZXQvbmZjL25jaS9LY29uZmlnLTI1LVxcdGRlcGVuZHMgb24gTkZDX05DSSBcXHUwMDI2XFx1MDAyNiBUVFlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDk6MDI6MzguMjE1OTUzMzZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNjQzMTA2NTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyBpdDpcblxuKipEaXZpbmcgaW50byB0aGUgTkZDIERyaXZlciBDb25maWd1cmF0aW9uKipcblxuT2theSwgdGltZSB0byBnZXQgYSBoYW5kbGUgb24gdGhlIE5GQyBkcml2ZXIgc2l0dWF0aW9uLiBJJ2xsIHN0YXJ0IGJ5IHRha2luZyBhIGxvb2sgYXQgYG5ldC9uZmMvS2NvbmZpZ2AuIFRoYXQncyB3aGVyZSBhbGwgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZGVmaW5lZCwgcmlnaHQ/IEkgd2FudCB0byBzZWUgd2hhdCBmZWF0dXJlcyBhcmUgYXZhaWxhYmxlLCB3aGF0IGRlcGVuZGVuY2llcyB0aGVyZSBhcmUsIGFuZCB3aGF0IHRoZSBkZWZhdWx0IHNldHRpbmdzIG1pZ2h0IGJlLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgZ29vZCBvdmVydmlldyBvZiB0aGUgZGVzaWduIHNwYWNlIGFuZCBob3cgbXVjaCBmbGV4aWJpbGl0eSB3ZSBoYXZlLiBUaGVuLCBJJ2xsIG1vdmUgb24gdG8gYG5ldC9uZmMvTWFrZWZpbGVgLiBUaGF0IHdpbGwgc2hvdyBtZSBob3cgdGhlIGRpZmZlcmVudCBzb3VyY2UgZmlsZXMgYXJlIGNvbXBpbGVkIGFuZCBsaW5rZWQsIHRoZSBidWlsZCB0YXJnZXRzLCBhbmQgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGJhc2VkIG9uIHRob3NlIEtjb25maWcgb3B0aW9ucyBJIGp1c3QgbG9va2VkIGF0LiBVbmRlcnN0YW5kaW5nIHRoZSBidWlsZCBwcm9jZXNzIGlzIGNyaXRpY2FsLCBlc3BlY2lhbGx5IHdoZW4gSSBnZXQgaW50byBjdXN0b21pemF0aW9uIGFuZCBwb3RlbnRpYWxseSBwYXRjaGluZyB0aGUgY29kZS4gSG9wZWZ1bGx5LCB0aGVzZSB0d28gZmlsZXMgd2lsbCBnaXZlIG1lIGEgc29saWQgZm91bmRhdGlvbiBmb3IgdW5kZXJzdGFuZGluZyB0aGUgZXhpc3RpbmcgTkZDIGRyaXZlciBpbmZyYXN0cnVjdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjkzOSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA5OjAyOjQxLjg1OTA2NTg4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzM0MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25mYy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIE5GQyBzdWJzeXN0ZW0gY29uZmlndXJhdGlvblxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRtZW51Y29uZmlnIE5GQ1xcbiAgIDc6XFx0XFx0ZGVwZW5kcyBvbiBSRktJTEwgfHwgIVJGS0lMTFxcbiAgIDg6XFx0XFx0dHJpc3RhdGUgXFxcIk5GQyBzdWJzeXN0ZW0gc3VwcG9ydFxcXCJcXG4gICA5OlxcdFxcdGRlZmF1bHQgblxcbiAgMTA6XFx0XFx0aGVscFxcbiAgMTE6XFx0XFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGJ1aWxkIHN1cHBvcnQgZm9yIE5GQyAoTmVhciBmaWVsZFxcbiAgMTI6XFx0XFx0ICBjb21tdW5pY2F0aW9uKSBkZXZpY2VzLlxcbiAgMTM6XFx0XFxuICAxNDpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBzdXBwb3J0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGxcXG4gIDE1OlxcdFxcdCAgYmUgY2FsbGVkIG5mYy5cXG4gIDE2OlxcdFxcbiAgMTc6XFx0Y29uZmlnIE5GQ19ESUdJVEFMXFxuICAxODpcXHRcXHRkZXBlbmRzIG9uIE5GQ1xcbiAgMTk6XFx0XFx0c2VsZWN0IENSQ19DQ0lUVFxcbiAgMjA6XFx0XFx0c2VsZWN0IENSQ19JVFVfVFxcbiAgMjE6XFx0XFx0dHJpc3RhdGUgXFxcIk5GQyBEaWdpdGFsIFByb3RvY29sIHN0YWNrIHN1cHBvcnRcXFwiXFxuICAyMjpcXHRcXHRkZWZhdWx0IG5cXG4gIDIzOlxcdFxcdGhlbHBcXG4gIDI0OlxcdFxcdCAgU2F5IFkgaWYgeW91IHdhbnQgdG8gYnVpbGQgTkZDIGRpZ2l0YWwgcHJvdG9jb2wgc3RhY2sgc3VwcG9ydC5cXG4gIDI1OlxcdFxcdCAgVGhpcyBpcyBuZWVkZWQgYnkgTkZDIGNoaXBzZXRzIHdob3NlIGZpcm13YXJlIG9ubHkgaW1wbGVtZW50XFxuICAyNjpcXHRcXHQgIHRoZSBORkMgYW5hbG9nIGxheWVyLlxcbiAgMjc6XFx0XFxuICAyODpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBzdXBwb3J0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGxcXG4gIDI5OlxcdFxcdCAgYmUgY2FsbGVkIG5mY19kaWdpdGFsLlxcbiAgMzA6XFx0XFxuICAzMTpcXHRzb3VyY2UgXFxcIm5ldC9uZmMvbmNpL0tjb25maWdcXFwiXFxuICAzMjpcXHRzb3VyY2UgXFxcIm5ldC9uZmMvaGNpL0tjb25maWdcXFwiXFxuICAzMzpcXHRcXG4gIDM0OlxcdHNvdXJjZSBcXFwiZHJpdmVycy9uZmMvS2NvbmZpZ1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDk6MDI6NDEuODU5MTQxNTRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0OTY0Mjk4Njk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgdGhlIGBuZXQvbmZjL01ha2VmaWxlYCoqXG5cbk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBgbmV0L25mYy9NYWtlZmlsZWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBnb2luZyBvbiB3aXRoIHRoZSBORkMgc3RhY2sgYnVpbGQuIFRoaXMgaXMgdGhlIGNlbnRyYWwgcG9pbnQgZm9yIGNvbnRyb2xsaW5nIGhvdyB0aGUgTkZDIGtlcm5lbCBtb2R1bGVzIGFyZSBidWlsdCwgbGlua2VkLCBhbmQgaW5jbHVkZWQuIEknbSBnb2luZyB0byBxdWlja2x5IHNjYW4gaXQgdG8gZ3Jhc3AgdGhlIG92ZXJhbGwgc3RydWN0dXJlLiBJJ2xsIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gYW55IGNvbmRpdGlvbmFsIGxvZ2ljLCBlc3BlY2lhbGx5IGFyb3VuZCBrZXJuZWwgdmVyc2lvbiBjaGVja3MsIEtjb25maWcgb3B0aW9ucywgYW5kIHRhcmdldC1zcGVjaWZpYyBjb25maWd1cmF0aW9ucywgYXMgdGhlc2UgYXJlIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIHBvcnRhYmlsaXR5IGFuZCBmZWF0dXJlIGVuYWJsZW1lbnQuIEknbSBhbHNvIGxvb2tpbmcgZm9yIGRlcGVuZGVuY2llcyDigJMgd2hhdCBvdGhlciBNYWtlZmlsZXMgb3Igc291cmNlIGZpbGVzIGFyZSBpbmNsdWRlZCwgYW5kIHdoYXQgbGlicmFyaWVzIGFyZSBsaW5rZWQ/IEtub3dpbmcgdGhpcyB3aWxsIGhlbHAgaWRlbnRpZnkgYW55IHBvdGVudGlhbCBjb25mbGljdHMgb3IgYXJlYXMgdGhhdCBuZWVkIG1vZGlmaWNhdGlvbiBmb3IgbXkgc3BlY2lmaWMgcGxhdGZvcm0uIFVsdGltYXRlbHksIEknbSBhaW1pbmcgdG8gZ2FpbiBhIHNvbGlkIGdyYXNwIG9mIHRoaXMgTWFrZWZpbGUncyByb2xlIGluIHRoZSBsYXJnZXIga2VybmVsIGJ1aWxkIHByb2Nlc3MgYW5kIGlkZW50aWZ5IGFueSBhcmVhcyB0aGF0IG1pZ2h0IGFmZmVjdCBteSBhcmVhIG9mIHdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc2MDgsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA5OjAyOjQ2LjgyMzQ0MzIyOFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2NjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZmMvTWFrZWZpbGVcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIE1ha2VmaWxlIGZvciB0aGUgTGludXggTkZDIHN1YnN5c3RlbS5cXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0b2JqLSQoQ09ORklHX05GQykgKz0gbmZjLm9cXG4gICA3OlxcdG9iai0kKENPTkZJR19ORkNfTkNJKSArPSBuY2kvXFxuICAgODpcXHRvYmotJChDT05GSUdfTkZDX0hDSSkgKz0gaGNpL1xcbiAgIDk6XFx0b2JqLSQoQ09ORklHX05GQ19ESUdJVEFMKSArPSBuZmNfZGlnaXRhbC5vXFxuICAxMDpcXHRcXG4gIDExOlxcdG5mYy1vYmpzIDo9IGNvcmUubyBuZXRsaW5rLm8gYWZfbmZjLm8gcmF3c29jay5vIGxsY3BfY29yZS5vIGxsY3BfY29tbWFuZHMubyBcXFxcXFxuICAxMjpcXHRcXHRcXHRsbGNwX3NvY2sub1xcbiAgMTM6XFx0XFxuICAxNDpcXHRuZmNfZGlnaXRhbC1vYmpzIDo9IGRpZ2l0YWxfY29yZS5vIGRpZ2l0YWxfdGVjaG5vbG9neS5vIGRpZ2l0YWxfZGVwLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDk6MDI6NDYuODIzNTIxNjI4WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzMzMTc1NDYxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRoaW5raW5nIHByb2Nlc3M6XG5cbioqSW52ZXN0aWdhdGluZyBORkMgTW9kdWxlIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIGBsbGNwX2NvcmUub2AgYW5kIGBsbGNwX3NvY2sub2AgYXJlIGNsZWFybHkgcGFydCBvZiB0aGUgTkZDIHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYG5mYy1vYmpzYCBsaXN0LiBUaGF0IG1ha2VzIHNlbnNlLCBlc3BlY2lhbGx5IGdpdmVuIHRoZWlyIG5hbWVzLiBTaW5jZSBJJ20gbG9va2luZyBhdCB0aGlzIGJ1aWxkIHN5c3RlbSwgbXkgbmV4dCBzdGVwIGlzIHRvIGZpZ3VyZSBvdXQgdGhlIGxhcmdlciBkZXBlbmRlbmNpZXMuIEkga25vdyBORkMgaXMgYSBjb25maWd1cmFibGUgZmVhdHVyZSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gQXJlIHRoZXJlIG90aGVyIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMgbGlrZSBgQ09ORklHX05GQ19TSU1gIG9yIGp1c3QgYENPTkZJR19ORkNgIHRoYXQgY29udHJvbCB3aGV0aGVyIHRoZXNlIG1vZHVsZXMgZ2V0IGNvbXBpbGVkIGluPyBJJ2xsIG5lZWQgdG8gY29uZmlybSB3aGF0IHR1cm5zIG9uIHRoZSBidWlsZCBmb3IgdGhvc2Ugb2JqZWN0cywgYW5kIHRoZSBiZXN0IHBsYWNlIHRvIGRvIHRoYXQgaXMgcHJvYmFibHkgdGhlIEtjb25maWcgZmlsZXMuIFRoZSBvbmUgaW4gYGRyaXZlcnMvbmZjL0tjb25maWdgIHNlZW1zIGxpa2UgdGhlIG9idmlvdXMgcGxhY2UgdG8gc3RhcnQuIExldCdzIHNlZSB3aGF0J3MgaW4gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgwODksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA5OjAyOjUwLjE1NTI3OTM4M1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDI4NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZmMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBOZWFyIEZpZWxkIENvbW11bmljYXRpb24gKE5GQykgZGV2aWNlc1xcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRtZW51IFxcXCJOZWFyIEZpZWxkIENvbW11bmljYXRpb24gKE5GQykgZGV2aWNlc1xcXCJcXG4gICA3OlxcdFxcdGRlcGVuZHMgb24gTkZDXFxuICAgODpcXHRcXG4gICA5OlxcdGNvbmZpZyBORkNfVFJGNzk3MEFcXG4gIDEwOlxcdFxcdHRyaXN0YXRlIFxcXCJUZXhhcyBJbnN0cnVtZW50cyBUUkY3OTcwYSBORkMgZHJpdmVyXFxcIlxcbiAgMTE6XFx0XFx0ZGVwZW5kcyBvbiBTUEkgXFx1MDAyNlxcdTAwMjYgTkZDX0RJR0lUQUwgXFx1MDAyNlxcdTAwMjYgR1BJT0xJQlxcbiAgMTI6XFx0XFx0aGVscFxcbiAgMTM6XFx0XFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBORkMgZHJpdmVyIGZvciBUZXhhcyBJbnN0cnVtZW50cycgVFJGNzk3MGFcXG4gIDE0OlxcdFxcdCAgZGV2aWNlLiBTdWNoIGRldmljZSBzdXBwb3J0cyA1IGRpZmZlcmVudCBwcm90b2NvbHM6IElTTzE0NDQzQSxcXG4gIDE1OlxcdFxcdCAgSVNPMTQ0NDNCLCBGZUxpQ2EsIElTTzE1NjkzIGFuZCBJU08xODAwMC0zLlxcbiAgMTY6XFx0XFxuICAxNzpcXHRcXHQgIFNheSBZIGhlcmUgdG8gY29tcGlsZSBzdXBwb3J0IGZvciBUUkY3OTcwYSBpbnRvIHRoZSBrZXJuZWwgb3JcXG4gIDE4OlxcdFxcdCAgc2F5IE0gIHRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUuIFRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWRcXG4gIDE5OlxcdFxcdCAgdHJmNzk3MGEua28uXFxuICAyMDpcXHRcXG4gIDIxOlxcdGNvbmZpZyBORkNfTUVJX1BIWVxcbiAgMjI6XFx0XFx0dHJpc3RhdGUgXFxcIk1FSSBidXMgTkZDIGRldmljZSBzdXBwb3J0XFxcIlxcbiAgMjM6XFx0XFx0ZGVwZW5kcyBvbiBJTlRFTF9NRUkgXFx1MDAyNlxcdTAwMjYgTkZDX0hDSVxcbiAgMjQ6XFx0XFx0aGVscFxcbiAgMjU6XFx0XFx0ICBUaGlzIGFkZHMgc3VwcG9ydCB0byB1c2UgYW4gbWVpIGJ1cyBuZmMgZGV2aWNlLiBTZWxlY3QgdGhpcyBpZiB5b3VcXG4gIDI2OlxcdFxcdCAgd2lsbCB1c2UgYW4gSENJIE5GQyBkcml2ZXIgZm9yIGFuIE5GQyBjaGlwIGNvbm5lY3RlZCBiZWhpbmQgYW5cXG4gIDI3OlxcdFxcdCAgSW50ZWwncyBNYW5hZ2VtZW50IEVuZ2luZSBjaGlwLlxcbiAgMjg6XFx0XFxuICAyOTpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICAzMDpcXHRcXG4gIDMxOlxcdGNvbmZpZyBORkNfU0lNXFxuICAzMjpcXHRcXHR0cmlzdGF0ZSBcXFwiTkZDIGhhcmR3YXJlIHNpbXVsYXRvciBkcml2ZXJcXFwiXFxuICAzMzpcXHRcXHRkZXBlbmRzIG9uIE5GQ19ESUdJVEFMXFxuICAzNDpcXHRcXHRoZWxwXFxuICAzNTpcXHRcXHQgIFRoaXMgZHJpdmVyIGRlY2xhcmVzIHR3byB2aXJ0dWFsIE5GQyBkZXZpY2VzIHN1cHBvcnRpbmcgTkZDLURFUFxcbiAgMzY6XFx0XFx0ICBwcm90b2NvbC4gQW4gTExDUCBjb25uZWN0aW9uIGNhbiBiZSBlc3RhYmxpc2hlZCBiZXR3ZWVuIHRoZW0gYW5kXFxuICAzNzpcXHRcXHQgIGFsbCBwYWNrZXRzIHNlbnQgZnJvbSBvbmUgZGV2aWNlIGlzIHNlbnQgYmFjayB0byB0aGUgb3RoZXIsIGFjdGluZyBhc1xcbiAgMzg6XFx0XFx0ICBsb29wYmFjayBkZXZpY2VzLlxcbiAgMzk6XFx0XFxuICA0MDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICA0MTpcXHRcXG4gIDQyOlxcdGNvbmZpZyBORkNfUE9SVDEwMFxcbiAgNDM6XFx0XFx0dHJpc3RhdGUgXFxcIlNvbnkgTkZDIFBvcnQtMTAwIFNlcmllcyBVU0IgZGV2aWNlIHN1cHBvcnRcXFwiXFxuICA0NDpcXHRcXHRkZXBlbmRzIG9uIFVTQlxcbiAgNDU6XFx0XFx0ZGVwZW5kcyBvbiBORkNfRElHSVRBTFxcbiAgNDY6XFx0XFx0aGVscFxcbiAgNDc6XFx0XFx0ICBUaGlzIGFkZHMgc3VwcG9ydCBmb3IgU29ueSBQb3J0LTEwMCBjaGlwIGJhc2VkIFVTQiBkZXZpY2VzIHN1Y2ggYXMgdGhlXFxuICA0ODpcXHRcXHQgIFJDLVMzODAgZG9uZ2xlLlxcbiAgNDk6XFx0XFxuICA1MDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICA1MTpcXHRcXG4gIDUyOlxcdGNvbmZpZyBORkNfVklSVFVBTF9OQ0lcXG4gIDUzOlxcdFxcdHRyaXN0YXRlIFxcXCJOQ0kgZGV2aWNlIHNpbXVsYXRvciBkcml2ZXJcXFwiXFxuICA1NDpcXHRcXHRkZXBlbmRzIG9uIE5GQ19OQ0lcXG4gIDU1OlxcdFxcdGhlbHBcXG4gIDU2OlxcdFxcdCAgTkNJIHZpcnR1YWwgZGV2aWNlIHNpbXVsYXRlcyBhIE5DSSBkZXZpY2UgdG8gdGhlIHVzZXIuXFxuICA1NzpcXHRcXHQgIEl0IGNhbiBiZSB1c2VkIHRvIHZhbGlkYXRlIHRoZSBOQ0kgbW9kdWxlIGFuZCBhcHBsaWNhdGlvbnMuXFxuICA1ODpcXHRcXHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIGNvbW11bmljYXRpb24gYmV0d2VlbiB0aGUgdmlydHVhbCBOQ0kgZGV2aWNlIGFuZFxcbiAgNTk6XFx0XFx0ICBtb2R1bGUuXFxuICA2MDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDk6MDI6NTAuMTU1Mzg2MzQzWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjcwNzM4MDY0MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCdzIEltcGFjdCBvbiB0aGUgTkZDIExMQ1AgU3Vic3lzdGVtKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBxdWlja2x5IGlkZW50aWZ5IHdoaWNoIHN5bWJvbHMgaGF2ZSBiZWVuIHRvdWNoZWQuIFRoZSBtb2RpZmljYXRpb24gaXMgaW4gYG5ldC9uZmMvbGxjcF9jb3JlLmNgIGFuZCBgbmV0L25mYy9sbGNwX3NvY2suY2AuIEkgc2VlIGEgbWl4IG9mIHN0YXRpYyBhbmQgbm9uLXN0YXRpYyBmdW5jdGlvbnMuIFNwZWNpZmljYWxseSwgdGhlIGxpc3Qgb2YgZnVuY3Rpb25zIGluIGBuZXQvbmZjL2xsY3BfY29yZS5jYCBoYXMgY2F1Z2h0IG15IGV5ZTogYG5mY19sbGNwX3NvY2tfbGlzdF9wb3BgLCBgbmZjX2xsY3Bfc29ja2V0X3JlbGVhc2VgLCBgbmZjX2xsY3BfbG9jYWxfZ2V0YCwgYGxvY2FsX2NsZWFudXBgLCBgbG9jYWxfcmVsZWFzZV93b3JrYCwgYGxvY2FsX3JlbGVhc2VgIGFyZSBhbGwgc3RhdGljIGFuZCBzZWVtIGZhaXJseSBjb250YWluZWQuIEkgd2lsbCB3YW50IHRvIGNoZWNrIGhvdyB0aGVzZSBzdGF0aWMgaW50ZXJuYWwgZnVuY3Rpb25zIHJlbGF0ZSB0byB0aGUgb3ZlcmFsbCBmbG93IHdpdGhpbiBlYWNoIGZpbGUsIGFuZCBwb3NzaWJseSwgYWNyb3NzIGVhY2ggb2YgdGhlc2UgZmlsZXMuXG5cbk9uIHRoZSBvdGhlciBoYW5kLCBgbmZjX2xsY3BfbG9jYWxfcHV0YCBpcyBub24tc3RhdGljLCBzbyBpdCdzIHBvdGVudGlhbGx5IGV4cG9ydGVkIG9yIGF0IGxlYXN0IHVzZWQgYWNyb3NzIGZpbGVzLiBUaGlzIGlzIGRlZmluaXRlbHkgd29ydGggYSBjbG9zZXIgbG9vaywgYXMgaXMgYG5mY19sbGNwX3JlZ2lzdGVyX2RldmljZWAgYW5kIHRoZSBtb2R1bGUgaW5pdGlhbGl6YXRpb24gYW5kIGV4aXQgZnVuY3Rpb25zIGBuZmNfbGxjcF9pbml0YCBhbmQgYG5mY19sbGNwX2V4aXRgLiBJJ2xsIHdhbnQgdG8gdmVyaWZ5IHdoYXQncyBjaGFuZ2VkIGluIHRob3NlIGluaXQvZXhpdCBjYWxscy5cblxuVGhlbiwgb3ZlciBpbiBgbmV0L25mYy9sbGNwX3NvY2suY2AsIEkgc2VlIGBuZmNfbGxjcF9hY2NlcHRfdW5saW5rYCBhbmQgYG5mY19sbGNwX2FjY2VwdF9kZXF1ZXVlYCBhcmUgbm9uLXN0YXRpYyBhcyB3ZWxsLiBBbHNvLCB0aGUgdHdvIHN0YXRpYyBmdW5jdGlvbnMgYGxsY3Bfc29ja19hY2NlcHRgIGFuZCBgbGxjcF9zb2NrX3JlbGVhc2VgIHVzZSB0aGUgYHByb3RvX29wc2Agd2hpY2ggYXJlIGxpa2VseSBwb2ludGVycyB0byB0aGUgYG5mY19sbGNwX2FjY2VwdGAgZnVuY3Rpb25zLiBUaGVzZSB0d28gYXJlIHVzZWQgYXMgcGFydCBvZiB0aGUgc29ja2V0IG9wZXJhdGlvbnMsIHdoaWNoIHdhcnJhbnRzIGZ1cnRoZXIgYW5hbHlzaXMuXG5cbk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcHMuIExldCdzIHNlZSBob3cgYG5mY19sbGNwX3NvY2tldF9yZWxlYXNlYCBpcyBiZWluZyB1c2VkIGluIHRoZSBjb250ZXh0IG9mIHNvY2tldCBvcGVyYXRpb25zLiBJIHNob3VsZCBzdGFydCBieSBncmVwcGluZyB0aGUgY29kZWJhc2UgZm9yIHRoZXNlIGNyaXRpY2FsIGZ1bmN0aW9uczogYG5mY19sbGNwX2xvY2FsX3B1dGAsIGBuZmNfbGxjcF9hY2NlcHRfdW5saW5rYCwgYW5kIGBuZmNfbGxjcF9hY2NlcHRfZGVxdWV1ZWAgdG8gc2VlIHdoZXJlIHRoZXkncmUgY2FsbGVkIGFuZCBob3cgdGhleSBpbnRlcmFjdC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgcGljdHVyZSBvZiB0aGUgZnVuY3Rpb25hbCBpbXBhY3Qgb2YgdGhpcyBwYXRjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTI0NiwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA5OjAyOjU3LjIyOTE5NjQzN1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg0MDk4NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZjX2xsY3BfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiXFxuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiAxNDY4IGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG5uZXQvbmZjL2NvcmUuYz0yODA9aW50IG5mY19kZXBfbGlua191cChzdHJ1Y3QgbmZjX2RldiAqZGV2LCBpbnQgdGFyZ2V0X2luZGV4LCB1OCBjb21tX21vZGUpXFxuLS1cXG5uZXQvbmZjL2NvcmUuYy0zMDMtXFxubmV0L25mYy9jb3JlLmM6MzA0OlxcdGdiID0gbmZjX2xsY3BfZ2VuZXJhbF9ieXRlcyhkZXYsIFxcdTAwMjZnYl9sZW4pO1xcbm5ldC9uZmMvY29yZS5jLTMwNS1cXHRpZiAoZ2JfbGVuIFxcdTAwM2UgTkZDX01BWF9HVF9MRU4pIHtcXG4tLVxcbm5ldC9uZmMvY29yZS5jPTMyNz1pbnQgbmZjX2RlcF9saW5rX2Rvd24oc3RydWN0IG5mY19kZXYgKmRldilcXG4tLVxcbm5ldC9uZmMvY29yZS5jLTM1Mi1cXHRcXHRkZXYtXFx1MDAzZXJmX21vZGUgPSBORkNfUkZfTk9ORTtcXG5uZXQvbmZjL2NvcmUuYzozNTM6XFx0XFx0bmZjX2xsY3BfbWFjX2lzX2Rvd24oZGV2KTtcXG5uZXQvbmZjL2NvcmUuYy0zNTQtXFx0XFx0bmZjX2dlbmxfZGVwX2xpbmtfZG93bl9ldmVudChkZXYpO1xcbi0tXFxubmV0L25mYy9jb3JlLmM9MzYzPWludCBuZmNfZGVwX2xpbmtfaXNfdXAoc3RydWN0IG5mY19kZXYgKmRldiwgdTMyIHRhcmdldF9pZHgsXFxuLS1cXG5uZXQvbmZjL2NvcmUuYy0zODAtXFxubmV0L25mYy9jb3JlLmM6MzgxOlxcdG5mY19sbGNwX21hY19pc191cChkZXYsIHRhcmdldF9pZHgsIGNvbW1fbW9kZSwgcmZfbW9kZSk7XFxubmV0L25mYy9jb3JlLmMtMzgyLVxcbi0tXFxubmV0L25mYy9jb3JlLmM9NjM5PWludCBuZmNfc2V0X3JlbW90ZV9nZW5lcmFsX2J5dGVzKHN0cnVjdCBuZmNfZGV2ICpkZXYsIGNvbnN0IHU4ICpnYiwgdTggZ2JfbGVuKVxcbi0tXFxubmV0L25mYy9jb3JlLmMtNjQyLVxcbm5ldC9uZmMvY29yZS5jOjY0MzpcXHRyZXR1cm4gbmZjX2xsY3Bfc2V0X3JlbW90ZV9nYihkZXYsIGdiLCBnYl9sZW4pO1xcbm5ldC9uZmMvY29yZS5jLTY0NC19XFxuLS1cXG5uZXQvbmZjL2NvcmUuYz02NDc9dTggKm5mY19nZXRfbG9jYWxfZ2VuZXJhbF9ieXRlcyhzdHJ1Y3QgbmZjX2RldiAqZGV2LCBzaXplX3QgKmdiX2xlbilcXG4tLVxcbm5ldC9uZmMvY29yZS5jLTY1MC1cXG5uZXQvbmZjL2NvcmUuYzo2NTE6XFx0cmV0dXJuIG5mY19sbGNwX2dlbmVyYWxfYnl0ZXMoZGV2LCBnYl9sZW4pO1xcbm5ldC9uZmMvY29yZS5jLTY1Mi19XFxuLS1cXG5uZXQvbmZjL2NvcmUuYz02NTU9aW50IG5mY190bV9kYXRhX3JlY2VpdmVkKHN0cnVjdCBuZmNfZGV2ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbmZjL2NvcmUuYy02NjItXFxubmV0L25mYy9jb3JlLmM6NjYzOlxcdHJldHVybiBuZmNfbGxjcF9kYXRhX3JlY2VpdmVkKGRldiwgc2tiKTtcXG5uZXQvbmZjL2NvcmUuYy02NjQtfVxcbi0tXFxubmV0L25mYy9jb3JlLmM9MTExMD1pbnQgbmZjX3JlZ2lzdGVyX2RldmljZShzdHJ1Y3QgbmZjX2RldiAqZGV2KVxcbi0tXFxubmV0L25mYy9jb3JlLmMtMTEyMy1cXG5uZXQvbmZjL2NvcmUuYzoxMTI0OlxcdHJjID0gbmZjX2xsY3BfcmVnaXN0ZXJfZGV2aWNlKGRldik7XFxubmV0L25mYy9jb3JlLmMtMTEyNS1cXHRpZiAocmMpXFxuLS1cXG5uZXQvbmZjL2NvcmUuYz0xMTg2PXZvaWQgbmZjX3JlbW92ZV9kZXZpY2Uoc3RydWN0IG5mY19kZXYgKmRldilcXG4tLVxcbm5ldC9uZmMvY29yZS5jLTExOTItXFxubmV0L25mYy9jb3JlLmM6MTE5MzpcXHRuZmNfbGxjcF91bnJlZ2lzdGVyX2RldmljZShkZXYpO1xcbm5ldC9uZmMvY29yZS5jLTExOTQtXFxuLS1cXG5uZXQvbmZjL2NvcmUuYz0xMjE0PXN0YXRpYyBpbnQgX19pbml0IG5mY19pbml0KHZvaWQpXFxuLS1cXG5uZXQvbmZjL2NvcmUuYy0xMjM0LVxcbm5ldC9uZmMvY29yZS5jOjEyMzU6XFx0cmMgPSBuZmNfbGxjcF9pbml0KCk7XFxubmV0L25mYy9jb3JlLmMtMTIzNi1cXHRpZiAocmMpXFxuLS1cXG5uZXQvbmZjL2NvcmUuYy0xMjQ1LWVycl9hZl9uZmM6XFxubmV0L25mYy9jb3JlLmM6MTI0NjpcXHRuZmNfbGxjcF9leGl0KCk7XFxubmV0L25mYy9jb3JlLmMtMTI0Ny1lcnJfbGxjcF9zb2NrOlxcbi0tXFxubmV0L25mYy9jb3JlLmM9MTI1Nj1zdGF0aWMgdm9pZCBfX2V4aXQgbmZjX2V4aXQodm9pZClcXG4tLVxcbm5ldC9uZmMvY29yZS5jLTEyNTgtXFx0YWZfbmZjX2V4aXQoKTtcXG5uZXQvbmZjL2NvcmUuYzoxMjU5OlxcdG5mY19sbGNwX2V4aXQoKTtcXG5uZXQvbmZjL2NvcmUuYy0xMjYwLVxcdHJhd3NvY2tfZXhpdCgpO1xcbi0tXFxubmV0L25mYy9sbGNwLmg9Nj1lbnVtIGxsY3Bfc3RhdGUge1xcbi0tXFxubmV0L25mYy9sbGNwLmgtMjktXFxubmV0L25mYy9sbGNwLmg6MzA6c3RydWN0IG5mY19sbGNwX3NvY2s7XFxubmV0L25mYy9sbGNwLmgtMzEtXFxubmV0L25mYy9sbGNwLmg9MzI9c3RydWN0IGxsY3Bfc29ja19saXN0IHtcXG4tLVxcbm5ldC9uZmMvbGxjcC5oLTM2LVxcbm5ldC9uZmMvbGxjcC5oOjM3OnN0cnVjdCBuZmNfbGxjcF9zZHBfdGx2IHtcXG5uZXQvbmZjL2xsY3AuaC0zOC1cXHR1OCAqdGx2O1xcbi0tXFxubmV0L25mYy9sbGNwLmgtNDktXFxubmV0L25mYy9sbGNwLmg6NTA6c3RydWN0IG5mY19sbGNwX2xvY2FsIHtcXG5uZXQvbmZjL2xsY3AuaC01MS1cXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XFxuLS1cXG5uZXQvbmZjL2xsY3AuaC0xMDItXFxubmV0L25mYy9sbGNwLmg6MTAzOnN0cnVjdCBuZmNfbGxjcF9zb2NrIHtcXG5uZXQvbmZjL2xsY3AuaC0xMDQtXFx0c3RydWN0IHNvY2sgc2s7XFxubmV0L25mYy9sbGNwLmgtMTA1LVxcdHN0cnVjdCBuZmNfZGV2ICpkZXY7XFxubmV0L25mYy9sbGNwLmg6MTA2OlxcdHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWw7XFxubmV0L25mYy9sbGNwLmgtMTA3LVxcdHUzMiB0YXJnZXRfaWR4O1xcbi0tXFxubmV0L25mYy9sbGNwLmgtMTQxLVxcbm5ldC9uZmMvbGxjcC5oOjE0MjpzdHJ1Y3QgbmZjX2xsY3BfdWlfY2Ige1xcbm5ldC9uZmMvbGxjcC5oLTE0My1cXHRfX3U4IGRzYXA7XFxuLS1cXG5uZXQvbmZjL2xsY3AuaC0xNDYtXFxubmV0L25mYy9sbGNwLmg6MTQ3OiNkZWZpbmUgbmZjX2xsY3BfdWlfc2tiX2NiKF9fc2tiKSAoKHN0cnVjdCBuZmNfbGxjcF91aV9jYiAqKVxcdTAwMjYoKF9fc2tiKS1cXHUwMDNlY2JbMF0pKVxcbm5ldC9uZmMvbGxjcC5oLTE0OC1cXG5uZXQvbmZjL2xsY3AuaDoxNDk6I2RlZmluZSBuZmNfbGxjcF9zb2NrKHNrKSAoKHN0cnVjdCBuZmNfbGxjcF9zb2NrICopIChzaykpXFxubmV0L25mYy9sbGNwLmg6MTUwOiNkZWZpbmUgbmZjX2xsY3BfZGV2KHNrKSAgKG5mY19sbGNwX3NvY2soKHNrKSktXFx1MDAzZWRldilcXG5uZXQvbmZjL2xsY3AuaC0xNTEtXFxuLS1cXG5uZXQvbmZjL2xsY3AuaC0yMDAtXFxubmV0L25mYy9sbGNwLmg6MjAxOnZvaWQgbmZjX2xsY3Bfc29ja19saW5rKHN0cnVjdCBsbGNwX3NvY2tfbGlzdCAqbCwgc3RydWN0IHNvY2sgKnMpO1xcbm5ldC9uZmMvbGxjcC5oOjIwMjp2b2lkIG5mY19sbGNwX3NvY2tfdW5saW5rKHN0cnVjdCBsbGNwX3NvY2tfbGlzdCAqbCwgc3RydWN0IHNvY2sgKnMpO1xcbm5ldC9uZmMvbGxjcC5oOjIwMzp2b2lkIG5mY19sbGNwX3NvY2tldF9yZW1vdGVfcGFyYW1faW5pdChzdHJ1Y3QgbmZjX2xsY3Bfc29jayAqc29jayk7XFxubmV0L25mYy9sbGNwLmg6MjA0OnN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbmZjX2xsY3BfZmluZF9sb2NhbChzdHJ1Y3QgbmZjX2RldiAqZGV2KTtcXG5uZXQvbmZjL2xsY3AuaDoyMDU6aW50IG5mY19sbGNwX2xvY2FsX3B1dChzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsKTtcXG5uZXQvbmZjL2xsY3AuaDoyMDY6dTggbmZjX2xsY3BfZ2V0X3NkcF9zc2FwKHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwsXFxubmV0L25mYy9sbGNwLmg6MjA3OlxcdFxcdFxcdCBzdHJ1Y3QgbmZjX2xsY3Bfc29jayAqc29jayk7XFxubmV0L25mYy9sbGNwLmg6MjA4OnU4IG5mY19sbGNwX2dldF9sb2NhbF9zc2FwKHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwpO1xcbm5ldC9uZmMvbGxjcC5oOjIwOTp2b2lkIG5mY19sbGNwX3B1dF9zc2FwKHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwsIHU4IHNzYXApO1xcbm5ldC9uZmMvbGxjcC5oOjIxMDppbnQgbmZjX2xsY3BfcXVldWVfaV9mcmFtZXMoc3RydWN0IG5mY19sbGNwX3NvY2sgKnNvY2spO1xcbm5ldC9uZmMvbGxjcC5oOjIxMTp2b2lkIG5mY19sbGNwX3NlbmRfdG9fcmF3X3NvY2soc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCxcXG5uZXQvbmZjL2xsY3AuaC0yMTItXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBza19idWZmICpza2IsIHU4IGRpcmVjdGlvbik7XFxuLS1cXG5uZXQvbmZjL2xsY3AuaC0yMTQtLyogU29jayBBUEkgKi9cXG5uZXQvbmZjL2xsY3AuaDoyMTU6c3RydWN0IHNvY2sgKm5mY19sbGNwX3NvY2tfYWxsb2Moc3RydWN0IHNvY2tldCAqc29jaywgaW50IHR5cGUsIGdmcF90IGdmcCwgaW50IGtlcm4pO1xcbm5ldC9uZmMvbGxjcC5oOjIxNjp2b2lkIG5mY19sbGNwX3NvY2tfZnJlZShzdHJ1Y3QgbmZjX2xsY3Bfc29jayAqc29jayk7XFxubmV0L25mYy9sbGNwLmg6MjE3OnZvaWQgbmZjX2xsY3BfYWNjZXB0X3VubGluayhzdHJ1Y3Qgc29jayAqc2spO1xcbm5ldC9uZmMvbGxjcC5oOjIxODp2b2lkIG5mY19sbGNwX2FjY2VwdF9lbnF1ZXVlKHN0cnVjdCBzb2NrICpwYXJlbnQsIHN0cnVjdCBzb2NrICpzayk7XFxubmV0L25mYy9sbGNwLmg6MjE5OnN0cnVjdCBzb2NrICpuZmNfbGxjcF9hY2NlcHRfZGVxdWV1ZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrZXQgKm5ld3NvY2spO1xcbm5ldC9uZmMvbGxjcC5oLTIyMC1cXG5uZXQvbmZjL2xsY3AuaC0yMjEtLyogVExWIEFQSSAqL1xcbm5ldC9uZmMvbGxjcC5oOjIyMjppbnQgbmZjX2xsY3BfcGFyc2VfZ2JfdGx2KHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwsXFxubmV0L25mYy9sbGNwLmgtMjIzLVxcdFxcdFxcdCAgY29uc3QgdTggKnRsdl9hcnJheSwgdTE2IHRsdl9hcnJheV9sZW4pO1xcbm5ldC9uZmMvbGxjcC5oOjIyNDppbnQgbmZjX2xsY3BfcGFyc2VfY29ubmVjdGlvbl90bHYoc3RydWN0IG5mY19sbGNwX3NvY2sgKnNvY2ssXFxubmV0L25mYy9sbGNwLmgtMjI1LVxcdFxcdFxcdFxcdCAgY29uc3QgdTggKnRsdl9hcnJheSwgdTE2IHRsdl9hcnJheV9sZW4pO1xcbi0tXFxubmV0L25mYy9sbGNwLmgtMjI3LS8qIENvbW1hbmRzIEFQSSAqL1xcbm5ldC9uZmMvbGxjcC5oOjIyODp2b2lkIG5mY19sbGNwX3JlY3Yodm9pZCAqZGF0YSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGVycik7XFxubmV0L25mYy9sbGNwLmg6MjI5OnU4ICpuZmNfbGxjcF9idWlsZF90bHYodTggdHlwZSwgY29uc3QgdTggKnZhbHVlLCB1OCB2YWx1ZV9sZW5ndGgsIHU4ICp0bHZfbGVuZ3RoKTtcXG5uZXQvbmZjL2xsY3AuaDoyMzA6c3RydWN0IG5mY19sbGNwX3NkcF90bHYgKm5mY19sbGNwX2J1aWxkX3NkcmVzX3Rsdih1OCB0aWQsIHU4IHNhcCk7XFxubmV0L25mYy9sbGNwLmg6MjMxOnN0cnVjdCBuZmNfbGxjcF9zZHBfdGx2ICpuZmNfbGxjcF9idWlsZF9zZHJlcV90bHYodTggdGlkLCBjb25zdCBjaGFyICp1cmksXFxubmV0L25mYy9sbGNwLmgtMjMyLVxcdFxcdFxcdFxcdFxcdFxcdCAgc2l6ZV90IHVyaV9sZW4pO1xcbm5ldC9uZmMvbGxjcC5oOjIzMzp2b2lkIG5mY19sbGNwX2ZyZWVfc2RwX3RsdihzdHJ1Y3QgbmZjX2xsY3Bfc2RwX3RsdiAqc2RwKTtcXG5uZXQvbmZjL2xsY3AuaDoyMzQ6dm9pZCBuZmNfbGxjcF9mcmVlX3NkcF90bHZfbGlzdChzdHJ1Y3QgaGxpc3RfaGVhZCAqc2RwX2hlYWQpO1xcbm5ldC9uZmMvbGxjcC5oOjIzNTp2b2lkIG5mY19sbGNwX3JlY3Yodm9pZCAqZGF0YSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGVycik7XFxubmV0L25mYy9sbGNwLmg6MjM2OmludCBuZmNfbGxjcF9zZW5kX3N5bW0oc3RydWN0IG5mY19kZXYgKmRldik7XFxubmV0L25mYy9sbGNwLmg6MjM3OmludCBuZmNfbGxjcF9zZW5kX2Nvbm5lY3Qoc3RydWN0IG5mY19sbGNwX3NvY2sgKnNvY2spO1xcbm5ldC9uZmMvbGxjcC5oOjIzODppbnQgbmZjX2xsY3Bfc2VuZF9jYyhzdHJ1Y3QgbmZjX2xsY3Bfc29jayAqc29jayk7XFxubmV0L25mYy9sbGNwLmg6MjM5OmludCBuZmNfbGxjcF9zZW5kX3NubF9zZHJlcyhzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsLFxcbm5ldC9uZmMvbGxjcC5oLTI0MC1cXHRcXHRcXHQgICAgc3RydWN0IGhsaXN0X2hlYWQgKnRsdl9saXN0LCBzaXplX3QgdGx2c19sZW4pO1xcbm5ldC9uZmMvbGxjcC5oOjI0MTppbnQgbmZjX2xsY3Bfc2VuZF9zbmxfc2RyZXEoc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCxcXG5uZXQvbmZjL2xsY3AuaC0yNDItXFx0XFx0XFx0ICAgIHN0cnVjdCBobGlzdF9oZWFkICp0bHZfbGlzdCwgc2l6ZV90IHRsdnNfbGVuKTtcXG5uZXQvbmZjL2xsY3AuaDoyNDM6aW50IG5mY19sbGNwX3NlbmRfZG0oc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCwgdTggc3NhcCwgdTggZHNhcCwgdTggcmVhc29uKTtcXG5uZXQvbmZjL2xsY3AuaDoyNDQ6aW50IG5mY19sbGNwX3NlbmRfZGlzY29ubmVjdChzdHJ1Y3QgbmZjX2xsY3Bfc29jayAqc29jayk7XFxubmV0L25mYy9sbGNwLmg6MjQ1OmludCBuZmNfbGxjcF9zZW5kX2lfZnJhbWUoc3RydWN0IG5mY19sbGNwX3NvY2sgKnNvY2ssXFxubmV0L25mYy9sbGNwLmgtMjQ2LVxcdFxcdFxcdCAgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKTtcXG5uZXQvbmZjL2xsY3AuaDoyNDc6aW50IG5mY19sbGNwX3NlbmRfdWlfZnJhbWUoc3RydWN0IG5mY19sbGNwX3NvY2sgKnNvY2ssIHU4IHNzYXAsIHU4IGRzYXAsXFxubmV0L25mYy9sbGNwLmgtMjQ4LVxcdFxcdFxcdCAgIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbik7XFxubmV0L25mYy9sbGNwLmg6MjQ5OmludCBuZmNfbGxjcF9zZW5kX3JyKHN0cnVjdCBuZmNfbGxjcF9zb2NrICpzb2NrKTtcXG5uZXQvbmZjL2xsY3AuaC0yNTAtXFxubmV0L25mYy9sbGNwLmgtMjUxLS8qIFNvY2tldCBBUEkgKi9cXG5uZXQvbmZjL2xsY3AuaDoyNTI6aW50IF9faW5pdCBuZmNfbGxjcF9zb2NrX2luaXQodm9pZCk7XFxubmV0L25mYy9sbGNwLmg6MjUzOnZvaWQgbmZjX2xsY3Bfc29ja19leGl0KHZvaWQpO1xcbi0tXFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmM9NzQ9c3RhdGljIHU4IGxsY3BfdGx2X3J3KGNvbnN0IHU4ICp0bHYpXFxuLS1cXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy03OC1cXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYzo3OTp1OCAqbmZjX2xsY3BfYnVpbGRfdGx2KHU4IHR5cGUsIGNvbnN0IHU4ICp2YWx1ZSwgdTggdmFsdWVfbGVuZ3RoLCB1OCAqdGx2X2xlbmd0aClcXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy04MC17XFxuLS1cXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy0xMDUtXFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmM6MTA2OnN0cnVjdCBuZmNfbGxjcF9zZHBfdGx2ICpuZmNfbGxjcF9idWlsZF9zZHJlc190bHYodTggdGlkLCB1OCBzYXApXFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtMTA3LXtcXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYzoxMDg6XFx0c3RydWN0IG5mY19sbGNwX3NkcF90bHYgKnNkcmVzO1xcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTEwOS1cXHR1OCB2YWx1ZVsyXTtcXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy0xMTAtXFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmM6MTExOlxcdHNkcmVzID0ga3phbGxvY19vYmooc3RydWN0IG5mY19sbGNwX3NkcF90bHYpO1xcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTExMi1cXHRpZiAoc2RyZXMgPT0gTlVMTClcXG4tLVxcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTExNy1cXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYzoxMTg6XFx0c2RyZXMtXFx1MDAzZXRsdiA9IG5mY19sbGNwX2J1aWxkX3RsdihMTENQX1RMVl9TRFJFUywgdmFsdWUsIDIsXFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtMTE5LVxcdFxcdFxcdFxcdFxcdFxcdTAwMjZzZHJlcy1cXHUwMDNldGx2X2xlbik7XFxuLS1cXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy0xMzItXFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmM6MTMzOnN0cnVjdCBuZmNfbGxjcF9zZHBfdGx2ICpuZmNfbGxjcF9idWlsZF9zZHJlcV90bHYodTggdGlkLCBjb25zdCBjaGFyICp1cmksXFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtMTM0LVxcdFxcdFxcdFxcdFxcdFxcdCAgc2l6ZV90IHVyaV9sZW4pXFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtMTM1LXtcXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYzoxMzY6XFx0c3RydWN0IG5mY19sbGNwX3NkcF90bHYgKnNkcmVxO1xcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTEzNy1cXG4tLVxcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTE0My1cXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYzoxNDQ6XFx0c2RyZXEgPSBremFsbG9jX29iaihzdHJ1Y3QgbmZjX2xsY3Bfc2RwX3Rsdik7XFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtMTQ1LVxcdGlmIChzZHJlcSA9PSBOVUxMKVxcbi0tXFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtMTczLVxcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jOjE3NDp2b2lkIG5mY19sbGNwX2ZyZWVfc2RwX3RsdihzdHJ1Y3QgbmZjX2xsY3Bfc2RwX3RsdiAqc2RwKVxcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTE3NS17XFxuLS1cXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy0xNzktXFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmM6MTgwOnZvaWQgbmZjX2xsY3BfZnJlZV9zZHBfdGx2X2xpc3Qoc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQpXFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtMTgxLXtcXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYzoxODI6XFx0c3RydWN0IG5mY19sbGNwX3NkcF90bHYgKnNkcDtcXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy0xODMtXFx0c3RydWN0IGhsaXN0X25vZGUgKm47XFxuLS1cXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy0xODctXFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmM6MTg4OlxcdFxcdG5mY19sbGNwX2ZyZWVfc2RwX3RsdihzZHApO1xcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTE4OS1cXHR9XFxuLS1cXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy0xOTEtXFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmM6MTkyOmludCBuZmNfbGxjcF9wYXJzZV9nYl90bHYoc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCxcXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy0xOTMtXFx0XFx0XFx0ICBjb25zdCB1OCAqdGx2X2FycmF5LCB1MTYgdGx2X2FycmF5X2xlbilcXG4tLVxcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTI0OC1cXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYzoyNDk6aW50IG5mY19sbGNwX3BhcnNlX2Nvbm5lY3Rpb25fdGx2KHN0cnVjdCBuZmNfbGxjcF9zb2NrICpzb2NrLFxcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTI1MC1cXHRcXHRcXHRcXHQgIGNvbnN0IHU4ICp0bHZfYXJyYXksIHUxNiB0bHZfYXJyYXlfbGVuKVxcbi0tXFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmM9MzE0PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqbGxjcF9hZGRfdGx2KHN0cnVjdCBza19idWZmICpwZHUsIGNvbnN0IHU4ICp0bHYsXFxuLS1cXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy0zMjYtXFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmM6MzI3OnN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqbGxjcF9hbGxvY2F0ZV9wZHUoc3RydWN0IG5mY19sbGNwX3NvY2sgKnNvY2ssXFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtMzI4LVxcdFxcdFxcdFxcdFxcdCB1OCBjbWQsIHUxNiBzaXplKVxcbi0tXFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtMzQ3LVxcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jOjM0ODppbnQgbmZjX2xsY3Bfc2VuZF9kaXNjb25uZWN0KHN0cnVjdCBuZmNfbGxjcF9zb2NrICpzb2NrKVxcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTM0OS17XFxuLS1cXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy0zNTEtXFx0c3RydWN0IG5mY19kZXYgKmRldjtcXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYzozNTI6XFx0c3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbDtcXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy0zNTMtXFxuLS1cXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy0zNzAtXFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmM6MzcxOmludCBuZmNfbGxjcF9zZW5kX3N5bW0oc3RydWN0IG5mY19kZXYgKmRldilcXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy0zNzIte1xcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTM3My1cXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jOjM3NDpcXHRzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsO1xcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTM3NS1cXHR1MTYgc2l6ZSA9IDA7XFxuLS1cXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy0zNzctXFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmM6Mzc4OlxcdGxvY2FsID0gbmZjX2xsY3BfZmluZF9sb2NhbChkZXYpO1xcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTM3OS1cXHRpZiAobG9jYWwgPT0gTlVMTClcXG4tLVxcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTM5Ni1cXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYzozOTc6XFx0bmZjX2xsY3Bfc2VuZF90b19yYXdfc29jayhsb2NhbCwgc2tiLCBORkNfRElSRUNUSU9OX1RYKTtcXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy0zOTgtXFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtMzk5LVxcdGVyciA9IG5mY19kYXRhX2V4Y2hhbmdlKGRldiwgbG9jYWwtXFx1MDAzZXRhcmdldF9pZHgsIHNrYixcXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYzo0MDA6XFx0XFx0XFx0XFx0IG5mY19sbGNwX3JlY3YsIGxvY2FsKTtcXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy00MDEtb3V0Olxcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jOjQwMjpcXHRuZmNfbGxjcF9sb2NhbF9wdXQobG9jYWwpO1xcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTQwMy1cXHRyZXR1cm4gZXJyO1xcbi0tXFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtNDA1LVxcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jOjQwNjppbnQgbmZjX2xsY3Bfc2VuZF9jb25uZWN0KHN0cnVjdCBuZmNfbGxjcF9zb2NrICpzb2NrKVxcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTQwNy17XFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmM6NDA4OlxcdHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWw7XFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtNDA5LVxcdHN0cnVjdCBza19idWZmICpza2I7XFxuLS1cXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy00MjMtXFx0aWYgKHNvY2stXFx1MDAzZXNlcnZpY2VfbmFtZSAhPSBOVUxMKSB7XFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmM6NDI0OlxcdFxcdHNlcnZpY2VfbmFtZV90bHYgPSBuZmNfbGxjcF9idWlsZF90bHYoTExDUF9UTFZfU04sXFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtNDI1LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIHNvY2stXFx1MDAzZXNlcnZpY2VfbmFtZSxcXG4tLVxcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTQzOS1cXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYzo0NDA6XFx0bWl1eF90bHYgPSBuZmNfbGxjcF9idWlsZF90bHYoTExDUF9UTFZfTUlVWCwgKHU4ICopXFx1MDAyNm1pdXgsIDAsXFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtNDQxLVxcdFxcdFxcdFxcdCAgICAgIFxcdTAwMjZtaXV4X3Rsdl9sZW5ndGgpO1xcbi0tXFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtNDQ3LVxcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jOjQ0ODpcXHRyd190bHYgPSBuZmNfbGxjcF9idWlsZF90bHYoTExDUF9UTFZfUlcsIFxcdTAwMjZydywgMCwgXFx1MDAyNnJ3X3Rsdl9sZW5ndGgpO1xcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTQ0OS1cXHRpZiAoIXJ3X3Rsdikge1xcbi0tXFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtNDgxLVxcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jOjQ4MjppbnQgbmZjX2xsY3Bfc2VuZF9jYyhzdHJ1Y3QgbmZjX2xsY3Bfc29jayAqc29jaylcXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy00ODMte1xcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jOjQ4NDpcXHRzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsO1xcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTQ4NS1cXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbi0tXFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtNTAxLVxcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jOjUwMjpcXHRtaXV4X3RsdiA9IG5mY19sbGNwX2J1aWxkX3RsdihMTENQX1RMVl9NSVVYLCAodTggKilcXHUwMDI2bWl1eCwgMCxcXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy01MDMtXFx0XFx0XFx0XFx0ICAgICAgXFx1MDAyNm1pdXhfdGx2X2xlbmd0aCk7XFxuLS1cXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy01MDktXFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmM6NTEwOlxcdHJ3X3RsdiA9IG5mY19sbGNwX2J1aWxkX3RsdihMTENQX1RMVl9SVywgXFx1MDAyNnJ3LCAwLCBcXHUwMDI2cndfdGx2X2xlbmd0aCk7XFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtNTExLVxcdGlmICghcndfdGx2KSB7XFxuLS1cXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy01MzktXFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmM6NTQwOnN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqbmZjX2xsY3BfYWxsb2NhdGVfc25sKHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwsXFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtNTQxLVxcdFxcdFxcdFxcdFxcdCAgICAgc2l6ZV90IHRsdl9sZW5ndGgpXFxuLS1cXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy01NjgtXFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmM6NTY5OmludCBuZmNfbGxjcF9zZW5kX3NubF9zZHJlcyhzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsLFxcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTU3MC1cXHRcXHRcXHQgICAgc3RydWN0IGhsaXN0X2hlYWQgKnRsdl9saXN0LCBzaXplX3QgdGx2c19sZW4pXFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtNTcxLXtcXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYzo1NzI6XFx0c3RydWN0IG5mY19sbGNwX3NkcF90bHYgKnNkcDtcXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy01NzMtXFx0c3RydWN0IGhsaXN0X25vZGUgKm47XFxuLS1cXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy01NzUtXFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmM6NTc2OlxcdHNrYiA9IG5mY19sbGNwX2FsbG9jYXRlX3NubChsb2NhbCwgdGx2c19sZW4pO1xcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTU3Ny1cXHRpZiAoSVNfRVJSKHNrYikpXFxuLS1cXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy01ODQtXFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmM6NTg1OlxcdFxcdG5mY19sbGNwX2ZyZWVfc2RwX3RsdihzZHApO1xcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTU4Ni1cXHR9XFxuLS1cXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy01OTItXFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmM6NTkzOmludCBuZmNfbGxjcF9zZW5kX3NubF9zZHJlcShzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsLFxcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTU5NC1cXHRcXHRcXHQgICAgc3RydWN0IGhsaXN0X2hlYWQgKnRsdl9saXN0LCBzaXplX3QgdGx2c19sZW4pXFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtNTk1LXtcXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYzo1OTY6XFx0c3RydWN0IG5mY19sbGNwX3NkcF90bHYgKnNkcmVxO1xcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTU5Ny1cXHRzdHJ1Y3QgaGxpc3Rfbm9kZSAqbjtcXG4tLVxcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTU5OS1cXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYzo2MDA6XFx0c2tiID0gbmZjX2xsY3BfYWxsb2NhdGVfc25sKGxvY2FsLCB0bHZzX2xlbik7XFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtNjAxLVxcdGlmIChJU19FUlIoc2tiKSlcXG4tLVxcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTYyNi1cXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYzo2Mjc6aW50IG5mY19sbGNwX3NlbmRfZG0oc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCwgdTggc3NhcCwgdTggZHNhcCwgdTggcmVhc29uKVxcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTYyOC17XFxuLS1cXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy02NTktXFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmM6NjYwOmludCBuZmNfbGxjcF9zZW5kX2lfZnJhbWUoc3RydWN0IG5mY19sbGNwX3NvY2sgKnNvY2ssXFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtNjYxLVxcdFxcdFxcdCAgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKVxcbi0tXFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtNjY0LVxcdHN0cnVjdCBzb2NrICpzayA9IFxcdTAwMjZzb2NrLVxcdTAwM2VzaztcXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYzo2NjU6XFx0c3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbDtcXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy02NjYtXFx0c2l6ZV90IGZyYWdfbGVuID0gMCwgcmVtYWluaW5nX2xlbjtcXG4tLVxcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTcyOS1cXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYzo3MzA6XFx0XFx0bmZjX2xsY3BfcXVldWVfaV9mcmFtZXMoc29jayk7XFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtNzMxLVxcbi0tXFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtNzQyLVxcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jOjc0MzppbnQgbmZjX2xsY3Bfc2VuZF91aV9mcmFtZShzdHJ1Y3QgbmZjX2xsY3Bfc29jayAqc29jaywgdTggc3NhcCwgdTggZHNhcCxcXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy03NDQtXFx0XFx0XFx0ICAgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKVxcbi0tXFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtNzQ2LVxcdHN0cnVjdCBza19idWZmICpwZHU7XFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmM6NzQ3OlxcdHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWw7XFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtNzQ4LVxcdHNpemVfdCBmcmFnX2xlbiA9IDAsIHJlbWFpbmluZ19sZW47XFxuLS1cXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy04MjEtXFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmM6ODIyOmludCBuZmNfbGxjcF9zZW5kX3JyKHN0cnVjdCBuZmNfbGxjcF9zb2NrICpzb2NrKVxcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTgyMy17XFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtODI0LVxcdHN0cnVjdCBza19idWZmICpza2I7XFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmM6ODI1OlxcdHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWw7XFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtODI2LVxcbi0tXFxubmV0L25mYy9sbGNwX2NvcmUuYz0yMz1zdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmxsY3Bfd3E7XFxubmV0L25mYy9sbGNwX2NvcmUuYy0yNC1cXG5uZXQvbmZjL2xsY3BfY29yZS5jOjI1OnN0YXRpYyB2b2lkIG5mY19sbGNwX3J4X3NrYihzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG5uZXQvbmZjL2xsY3BfY29yZS5jLTI2LVxcbm5ldC9uZmMvbGxjcF9jb3JlLmM6Mjc6dm9pZCBuZmNfbGxjcF9zb2NrX2xpbmsoc3RydWN0IGxsY3Bfc29ja19saXN0ICpsLCBzdHJ1Y3Qgc29jayAqc2spXFxubmV0L25mYy9sbGNwX2NvcmUuYy0yOC17XFxuLS1cXG5uZXQvbmZjL2xsY3BfY29yZS5jLTMzLVxcbm5ldC9uZmMvbGxjcF9jb3JlLmM6MzQ6dm9pZCBuZmNfbGxjcF9zb2NrX3VubGluayhzdHJ1Y3QgbGxjcF9zb2NrX2xpc3QgKmwsIHN0cnVjdCBzb2NrICpzaylcXG5uZXQvbmZjL2xsY3BfY29yZS5jLTM1LXtcXG4tLVxcbm5ldC9uZmMvbGxjcF9jb3JlLmMtNDAtXFxubmV0L25mYy9sbGNwX2NvcmUuYzo0MTp2b2lkIG5mY19sbGNwX3NvY2tldF9yZW1vdGVfcGFyYW1faW5pdChzdHJ1Y3QgbmZjX2xsY3Bfc29jayAqc29jaylcXG5uZXQvbmZjL2xsY3BfY29yZS5jLTQyLXtcXG4tLVxcbm5ldC9uZmMvbGxjcF9jb3JlLmMtNDYtXFxubmV0L25mYy9sbGNwX2NvcmUuYzo0NzpzdGF0aWMgdm9pZCBuZmNfbGxjcF9zb2NrZXRfcHVyZ2Uoc3RydWN0IG5mY19sbGNwX3NvY2sgKnNvY2spXFxubmV0L25mYy9sbGNwX2NvcmUuYy00OC17XFxubmV0L25mYy9sbGNwX2NvcmUuYzo0OTpcXHRzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsID0gc29jay1cXHUwMDNlbG9jYWw7XFxubmV0L25mYy9sbGNwX2NvcmUuYy01MC1cXHRzdHJ1Y3Qgc2tfYnVmZiAqcywgKnRtcDtcXG4tLVxcbm5ldC9uZmMvbGxjcF9jb3JlLmMtNjctXFxubmV0L25mYy9sbGNwX2NvcmUuYzo2ODpzdGF0aWMgc3RydWN0IHNvY2sgKm5mY19sbGNwX3NvY2tfbGlzdF9wb3Aoc3RydWN0IGxsY3Bfc29ja19saXN0ICpsKVxcbm5ldC9uZmMvbGxjcF9jb3JlLmMtNjkte1xcbi0tXFxubmV0L25mYy9sbGNwX2NvcmUuYy04Mi1cXG5uZXQvbmZjL2xsY3BfY29yZS5jOjgzOnN0YXRpYyB2b2lkIG5mY19sbGNwX3NvY2tldF9yZWxlYXNlKHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwsIGJvb2wgZGV2aWNlLFxcbm5ldC9uZmMvbGxjcF9jb3JlLmMtODQtXFx0XFx0XFx0XFx0ICAgIGludCBlcnIpXFxuLS1cXG5uZXQvbmZjL2xsY3BfY29yZS5jLTg2LVxcdHN0cnVjdCBzb2NrICpzaztcXG5uZXQvbmZjL2xsY3BfY29yZS5jOjg3OlxcdHN0cnVjdCBuZmNfbGxjcF9zb2NrICpsbGNwX3NvY2s7XFxubmV0L25mYy9sbGNwX2NvcmUuYy04OC1cXG4tLVxcbm5ldC9uZmMvbGxjcF9jb3JlLmMtOTAtXFxubmV0L25mYy9sbGNwX2NvcmUuYzo5MTpcXHR3aGlsZSAoKHNrID0gbmZjX2xsY3Bfc29ja19saXN0X3BvcChcXHUwMDI2bG9jYWwtXFx1MDAzZXNvY2tldHMpKSkge1xcbm5ldC9uZmMvbGxjcF9jb3JlLmM6OTI6XFx0XFx0bGxjcF9zb2NrID0gbmZjX2xsY3Bfc29jayhzayk7XFxubmV0L25mYy9sbGNwX2NvcmUuYy05My1cXG4tLVxcbm5ldC9uZmMvbGxjcF9jb3JlLmMtOTUtXFxubmV0L25mYy9sbGNwX2NvcmUuYzo5NjpcXHRcXHRuZmNfbGxjcF9zb2NrZXRfcHVyZ2UobGxjcF9zb2NrKTtcXG5uZXQvbmZjL2xsY3BfY29yZS5jLTk3LVxcbi0tXFxubmV0L25mYy9sbGNwX2NvcmUuYy0xMDEtXFx0XFx0aWYgKHNrLVxcdTAwM2Vza19zdGF0ZSA9PSBMTENQX0xJU1RFTikge1xcbm5ldC9uZmMvbGxjcF9jb3JlLmM6MTAyOlxcdFxcdFxcdHN0cnVjdCBuZmNfbGxjcF9zb2NrICpsc2ssICpuO1xcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTAzLVxcdFxcdFxcdHN0cnVjdCBzb2NrICphY2NlcHRfc2s7XFxuLS1cXG5uZXQvbmZjL2xsY3BfY29yZS5jLTExMy1cXG5uZXQvbmZjL2xsY3BfY29yZS5jOjExNDpcXHRcXHRcXHRcXHRpZiAobmZjX2xsY3Bfc29jayhhY2NlcHRfc2spLVxcdTAwM2VwYXJlbnQgPT0gc2spIHtcXG5uZXQvbmZjL2xsY3BfY29yZS5jOjExNTpcXHRcXHRcXHRcXHRcXHRuZmNfbGxjcF9hY2NlcHRfdW5saW5rKGFjY2VwdF9zayk7XFxubmV0L25mYy9sbGNwX2NvcmUuYzoxMTY6XFx0XFx0XFx0XFx0XFx0bmZjX2xsY3Bfc29ja191bmxpbmsoXFx1MDAyNmxvY2FsLVxcdTAwM2Vzb2NrZXRzLCBhY2NlcHRfc2spO1xcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTE3LVxcbi0tXFxubmV0L25mYy9sbGNwX2NvcmUuYy0xNDQtXFxubmV0L25mYy9sbGNwX2NvcmUuYzoxNDU6XFx0d2hpbGUgKChzayA9IG5mY19sbGNwX3NvY2tfbGlzdF9wb3AoXFx1MDAyNmxvY2FsLVxcdTAwM2VyYXdfc29ja2V0cykpKSB7XFxubmV0L25mYy9sbGNwX2NvcmUuYzoxNDY6XFx0XFx0bGxjcF9zb2NrID0gbmZjX2xsY3Bfc29jayhzayk7XFxubmV0L25mYy9sbGNwX2NvcmUuYy0xNDctXFxuLS1cXG5uZXQvbmZjL2xsY3BfY29yZS5jLTE0OS1cXG5uZXQvbmZjL2xsY3BfY29yZS5jOjE1MDpcXHRcXHRuZmNfbGxjcF9zb2NrZXRfcHVyZ2UobGxjcF9zb2NrKTtcXG5uZXQvbmZjL2xsY3BfY29yZS5jLTE1MS1cXG4tLVxcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTYxLVxcbm5ldC9uZmMvbGxjcF9jb3JlLmM6MTYyOnN0YXRpYyBzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKm5mY19sbGNwX2xvY2FsX2dldChzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsKVxcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTYzLXtcXG4tLVxcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTcyLVxcbm5ldC9uZmMvbGxjcF9jb3JlLmM6MTczOnN0YXRpYyB2b2lkIGxvY2FsX2NsZWFudXAoc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbClcXG5uZXQvbmZjL2xsY3BfY29yZS5jLTE3NC17XFxubmV0L25mYy9sbGNwX2NvcmUuYzoxNzU6XFx0bmZjX2xsY3Bfc29ja2V0X3JlbGVhc2UobG9jYWwsIGZhbHNlLCBFTlhJTyk7XFxubmV0L25mYy9sbGNwX2NvcmUuYy0xNzYtXFx0dGltZXJfZGVsZXRlX3N5bmMoXFx1MDAyNmxvY2FsLVxcdTAwM2VsaW5rX3RpbWVyKTtcXG4tLVxcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTg0LVxcdGNhbmNlbF93b3JrX3N5bmMoXFx1MDAyNmxvY2FsLVxcdTAwM2VzZHJlcV90aW1lb3V0X3dvcmspO1xcbm5ldC9uZmMvbGxjcF9jb3JlLmM6MTg1OlxcdG5mY19sbGNwX2ZyZWVfc2RwX3Rsdl9saXN0KFxcdTAwMjZsb2NhbC1cXHUwMDNlcGVuZGluZ19zZHJlcXMpO1xcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTg2LX1cXG4tLVxcbm5ldC9uZmMvbGxjcF9jb3JlLmM9MTg4PXN0YXRpYyB2b2lkIGxvY2FsX3JlbGVhc2Vfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxubmV0L25mYy9sbGNwX2NvcmUuYy0xODkte1xcbm5ldC9uZmMvbGxjcF9jb3JlLmM6MTkwOlxcdHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWw7XFxubmV0L25mYy9sbGNwX2NvcmUuYy0xOTEtXFx0c3RydWN0IG5mY19kZXYgKmRldjtcXG5uZXQvbmZjL2xsY3BfY29yZS5jLTE5Mi1cXG5uZXQvbmZjL2xsY3BfY29yZS5jOjE5MzpcXHRsb2NhbCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwsIHJlbGVhc2Vfd29yayk7XFxubmV0L25mYy9sbGNwX2NvcmUuYy0xOTQtXFx0ZGV2ID0gbG9jYWwtXFx1MDAzZWRldjtcXG4tLVxcbm5ldC9uZmMvbGxjcF9jb3JlLmM9MjAxPXN0YXRpYyB2b2lkIGxvY2FsX3JlbGVhc2Uoc3RydWN0IGtyZWYgKnJlZilcXG5uZXQvbmZjL2xsY3BfY29yZS5jLTIwMi17XFxubmV0L25mYy9sbGNwX2NvcmUuYzoyMDM6XFx0c3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbDtcXG5uZXQvbmZjL2xsY3BfY29yZS5jLTIwNC1cXG5uZXQvbmZjL2xsY3BfY29yZS5jOjIwNTpcXHRsb2NhbCA9IGNvbnRhaW5lcl9vZihyZWYsIHN0cnVjdCBuZmNfbGxjcF9sb2NhbCwgcmVmKTtcXG5uZXQvbmZjL2xsY3BfY29yZS5jLTIwNi1cXG4tLVxcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMjA5LVxcbm5ldC9uZmMvbGxjcF9jb3JlLmM6MjEwOmludCBuZmNfbGxjcF9sb2NhbF9wdXQoc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbClcXG5uZXQvbmZjL2xsY3BfY29yZS5jLTIxMS17XFxuLS1cXG5uZXQvbmZjL2xsY3BfY29yZS5jLTIxNy1cXG5uZXQvbmZjL2xsY3BfY29yZS5jOjIxODpzdGF0aWMgc3RydWN0IG5mY19sbGNwX3NvY2sgKm5mY19sbGNwX3NvY2tfZ2V0KHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwsXFxubmV0L25mYy9sbGNwX2NvcmUuYy0yMTktXFx0XFx0XFx0XFx0XFx0ICAgICAgIHU4IHNzYXAsIHU4IGRzYXApXFxuLS1cXG5uZXQvbmZjL2xsY3BfY29yZS5jLTIyMS1cXHRzdHJ1Y3Qgc29jayAqc2s7XFxubmV0L25mYy9sbGNwX2NvcmUuYzoyMjI6XFx0c3RydWN0IG5mY19sbGNwX3NvY2sgKmxsY3Bfc29jaywgKnRtcF9zb2NrO1xcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMjIzLVxcbi0tXFxubmV0L25mYy9sbGNwX2NvcmUuYy0yMzMtXFx0c2tfZm9yX2VhY2goc2ssIFxcdTAwMjZsb2NhbC1cXHUwMDNlc29ja2V0cy5oZWFkKSB7XFxubmV0L25mYy9sbGNwX2NvcmUuYzoyMzQ6XFx0XFx0dG1wX3NvY2sgPSBuZmNfbGxjcF9zb2NrKHNrKTtcXG5uZXQvbmZjL2xsY3BfY29yZS5jLTIzNS1cXG4tLVxcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMjQ3LVxcbm5ldC9uZmMvbGxjcF9jb3JlLmM6MjQ4OnN0YXRpYyB2b2lkIG5mY19sbGNwX3NvY2tfcHV0KHN0cnVjdCBuZmNfbGxjcF9zb2NrICpzb2NrKVxcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMjQ5LXtcXG4tLVxcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMjUyLVxcbm5ldC9uZmMvbGxjcF9jb3JlLmM6MjUzOnN0YXRpYyB2b2lkIG5mY19sbGNwX3RpbWVvdXRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxubmV0L25mYy9sbGNwX2NvcmUuYy0yNTQte1xcbm5ldC9uZmMvbGxjcF9jb3JlLmM6MjU1OlxcdHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IG5mY19sbGNwX2xvY2FsLFxcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMjU2LVxcdFxcdFxcdFxcdFxcdFxcdCAgICB0aW1lb3V0X3dvcmspO1xcbi0tXFxubmV0L25mYy9sbGNwX2NvcmUuYy0yNjAtXFxubmV0L25mYy9sbGNwX2NvcmUuYzoyNjE6c3RhdGljIHZvaWQgbmZjX2xsY3Bfc3ltbV90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdClcXG5uZXQvbmZjL2xsY3BfY29yZS5jLTI2Mi17XFxubmV0L25mYy9sbGNwX2NvcmUuYzoyNjM6XFx0c3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCA9IHRpbWVyX2NvbnRhaW5lcl9vZihsb2NhbCwgdCxcXG5uZXQvbmZjL2xsY3BfY29yZS5jLTI2NC1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgIGxpbmtfdGltZXIpO1xcbi0tXFxubmV0L25mYy9sbGNwX2NvcmUuYy0yNzAtXFxubmV0L25mYy9sbGNwX2NvcmUuYzoyNzE6c3RhdGljIHZvaWQgbmZjX2xsY3Bfc2RyZXFfdGltZW91dF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG5uZXQvbmZjL2xsY3BfY29yZS5jLTI3Mi17XFxuLS1cXG5uZXQvbmZjL2xsY3BfY29yZS5jLTI3NS1cXHRzdHJ1Y3QgaGxpc3Rfbm9kZSAqbjtcXG5uZXQvbmZjL2xsY3BfY29yZS5jOjI3NjpcXHRzdHJ1Y3QgbmZjX2xsY3Bfc2RwX3RsdiAqc2RwO1xcbm5ldC9uZmMvbGxjcF9jb3JlLmM6Mjc3OlxcdHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IG5mY19sbGNwX2xvY2FsLFxcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMjc4LVxcdFxcdFxcdFxcdFxcdFxcdCAgICBzZHJlcV90aW1lb3V0X3dvcmspO1xcbi0tXFxubmV0L25mYy9sbGNwX2NvcmUuYy0zMDQtXFxubmV0L25mYy9sbGNwX2NvcmUuYzozMDU6c3RhdGljIHZvaWQgbmZjX2xsY3Bfc2RyZXFfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnQpXFxubmV0L25mYy9sbGNwX2NvcmUuYy0zMDYte1xcbm5ldC9uZmMvbGxjcF9jb3JlLmM6MzA3OlxcdHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwgPSB0aW1lcl9jb250YWluZXJfb2YobG9jYWwsIHQsXFxubmV0L25mYy9sbGNwX2NvcmUuYy0zMDgtXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBzZHJlcV90aW1lcik7XFxuLS1cXG5uZXQvbmZjL2xsY3BfY29yZS5jLTMxMi1cXG5uZXQvbmZjL2xsY3BfY29yZS5jOjMxMzpzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKm5mY19sbGNwX2ZpbmRfbG9jYWwoc3RydWN0IG5mY19kZXYgKmRldilcXG5uZXQvbmZjL2xsY3BfY29yZS5jLTMxNC17XFxubmV0L25mYy9sbGNwX2NvcmUuYzozMTU6XFx0c3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbDtcXG5uZXQvbmZjL2xsY3BfY29yZS5jOjMxNjpcXHRzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKnJlcyA9IE5VTEw7XFxubmV0L25mYy9sbGNwX2NvcmUuYy0zMTctXFxuLS1cXG5uZXQvbmZjL2xsY3BfY29yZS5jLTMyMC1cXHRcXHRpZiAobG9jYWwtXFx1MDAzZWRldiA9PSBkZXYpIHtcXG5uZXQvbmZjL2xsY3BfY29yZS5jOjMyMTpcXHRcXHRcXHRyZXMgPSBuZmNfbGxjcF9sb2NhbF9nZXQobG9jYWwpO1xcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMzIyLVxcdFxcdFxcdGJyZWFrO1xcbi0tXFxubmV0L25mYy9sbGNwX2NvcmUuYy0zMjgtXFxubmV0L25mYy9sbGNwX2NvcmUuYzozMjk6c3RhdGljIHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbmZjX2xsY3BfcmVtb3ZlX2xvY2FsKHN0cnVjdCBuZmNfZGV2ICpkZXYpXFxubmV0L25mYy9sbGNwX2NvcmUuYy0zMzAte1xcbm5ldC9uZmMvbGxjcF9jb3JlLmM6MzMxOlxcdHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwsICp0bXA7XFxubmV0L25mYy9sbGNwX2NvcmUuYy0zMzItXFxuLS1cXG5uZXQvbmZjL2xsY3BfY29yZS5jPTM0OT1zdGF0aWMgY2hhciAqd2tzW10gPSB7XFxuLS1cXG5uZXQvbmZjL2xsY3BfY29yZS5jLTM1Ni1cXG5uZXQvbmZjL2xsY3BfY29yZS5jOjM1NzpzdGF0aWMgaW50IG5mY19sbGNwX3drc19zYXAoY29uc3QgY2hhciAqc2VydmljZV9uYW1lLCBzaXplX3Qgc2VydmljZV9uYW1lX2xlbilcXG5uZXQvbmZjL2xsY3BfY29yZS5jLTM1OC17XFxuLS1cXG5uZXQvbmZjL2xsY3BfY29yZS5jPTM3OT1zdGF0aWNcXG5uZXQvbmZjL2xsY3BfY29yZS5jOjM4MDpzdHJ1Y3QgbmZjX2xsY3Bfc29jayAqbmZjX2xsY3Bfc29ja19mcm9tX3NuKHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwsXFxubmV0L25mYy9sbGNwX2NvcmUuYy0zODEtXFx0XFx0XFx0XFx0XFx0ICAgIGNvbnN0IHU4ICpzbiwgc2l6ZV90IHNuX2xlbixcXG4tLVxcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMzg0LVxcdHN0cnVjdCBzb2NrICpzaztcXG5uZXQvbmZjL2xsY3BfY29yZS5jOjM4NTpcXHRzdHJ1Y3QgbmZjX2xsY3Bfc29jayAqbGxjcF9zb2NrLCAqdG1wX3NvY2s7XFxubmV0L25mYy9sbGNwX2NvcmUuYy0zODYtXFxuLS1cXG5uZXQvbmZjL2xsY3BfY29yZS5jLTM5Ni1cXHRza19mb3JfZWFjaChzaywgXFx1MDAyNmxvY2FsLVxcdTAwM2Vzb2NrZXRzLmhlYWQpIHtcXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDk6MDI6NTcuMjc3NjExMTk2WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMzMjQ1MTU0NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byBgbmV0L25mYy9sbGNwX3NvY2suY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdW5kYW1lbnRhbCBzb2NrZXQgbWVjaGFuaXNtcyBhbmQgb3BlcmF0aW9ucyBmb3IgTExDUC4gVGhpcyBtZWFucyBJJ20gbG9va2luZyBzcGVjaWZpY2FsbHkgYXQgdGhlIGVudHJ5IHBvaW50cyBhbmQgdGhlIHVuZGVybHlpbmcgb3BlcmF0aW9ucyBkZWZpbmVkIHdpdGhpbiB0aGlzIGZpbGUuIEkgd2FudCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRoZSBMTENQIHNvY2tldCBsYXllciBpcyBzdHJ1Y3R1cmVkLCB3aGljaCB3aWxsIGhlbHAgbWUgc2VlIHRoZSBhcmNoaXRlY3R1cmUgYXMgYSB3aG9sZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE0NjAsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwOTowMzowMC42MDIxMjk5MjJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NTk1MjY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInByb3RvX29wc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmZjXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZmMvbGxjcF9zb2NrLmM9ODYzPXN0YXRpYyBpbnQgbGxjcF9zb2NrX3JlY3Ztc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLFxcbi0tXFxubmV0L25mYy9sbGNwX3NvY2suYy05NTEtXFxubmV0L25mYy9sbGNwX3NvY2suYzo5NTI6c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgbGxjcF9zb2NrX29wcyA9IHtcXG5uZXQvbmZjL2xsY3Bfc29jay5jLTk1My1cXHQuZmFtaWx5ICAgICAgICAgPSBQRl9ORkMsXFxuLS1cXG5uZXQvbmZjL2xsY3Bfc29jay5jLTk3MS1cXG5uZXQvbmZjL2xsY3Bfc29jay5jOjk3MjpzdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBsbGNwX3Jhd3NvY2tfb3BzID0ge1xcbm5ldC9uZmMvbGxjcF9zb2NrLmMtOTczLVxcdC5mYW1pbHkgICAgICAgICA9IFBGX05GQyxcXG4tLVxcbm5ldC9uZmMvcmF3c29jay5jPTI1Mj1zdGF0aWMgaW50IHJhd3NvY2tfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXFxuLS1cXG5uZXQvbmZjL3Jhd3NvY2suYy0yNzgtXFxubmV0L25mYy9yYXdzb2NrLmM6Mjc5OnN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHJhd3NvY2tfb3BzID0ge1xcbm5ldC9uZmMvcmF3c29jay5jLTI4MC1cXHQuZmFtaWx5ICAgICAgICAgPSBQRl9ORkMsXFxuLS1cXG5uZXQvbmZjL3Jhd3NvY2suYy0yOTYtXFxubmV0L25mYy9yYXdzb2NrLmM6Mjk3OnN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHJhd3NvY2tfcmF3X29wcyA9IHtcXG5uZXQvbmZjL3Jhd3NvY2suYy0yOTgtXFx0LmZhbWlseSAgICAgICAgID0gUEZfTkZDLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwOTowMzowMC42NDY3MzE2NTFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzM3ODEwMjQ0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgTExDUCBTb2NrZXQgT3BlcmF0aW9ucyoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgdGFraW5nIGEgY2xvc2UgbG9vayBhdCBgbGxjcF9zb2NrX29wc2AuIFNwZWNpZmljYWxseSwgSSdtIGhlYWRpbmcgb3ZlciB0byBgbmV0L25mYy9sbGNwX3NvY2suY2AuIEkga25vdyB0aGlzIGlzIHdoZXJlIHRoZSBjb3JlIHNvY2tldCBvcGVyYXRpb25zIGZvciB0aGUgTExDUCBwcm90b2NvbCBhcmUgaW1wbGVtZW50ZWQuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGZ1bmRhbWVudGFsIG1lY2hhbmljcywgYW5kIEkgc3VzcGVjdCB0aGVyZSBtaWdodCBiZSBzb21ldGhpbmcgaW50ZXJlc3RpbmcgdG8gZGlzc2VjdCBpbiB0aGUgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gZGV0YWlscyBoZXJlLiBMZXQncyBzZWUgd2hhdCB3ZSd2ZSBnb3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxOTg1LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDk6MDM6MDQuMDI0ODM2NTA2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk5NTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZmMvbGxjcF9zb2NrLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTQ1LFxuICBcIkxpbmVDb3VudFwiOiA0NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgOTQ1OlxcdFxcdC8qIFNPQ0tfU0VRUEFDS0VUOiByZXR1cm4gcmVhbCBsZW5ndGggaWYgTVNHX1RSVU5DIGlzIHNldCAqL1xcbiA5NDY6XFx0XFx0aWYgKHNrLVxcdTAwM2Vza190eXBlID09IFNPQ0tfU0VRUEFDS0VUIFxcdTAwMjZcXHUwMDI2IChmbGFncyBcXHUwMDI2IE1TR19UUlVOQykpXFxuIDk0NzpcXHRcXHRcXHRjb3BpZWQgPSBybGVuO1xcbiA5NDg6XFx0XFxuIDk0OTpcXHRcXHRyZXR1cm4gY29waWVkO1xcbiA5NTA6XFx0fVxcbiA5NTE6XFx0XFxuIDk1MjpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBsbGNwX3NvY2tfb3BzID0ge1xcbiA5NTM6XFx0XFx0LmZhbWlseSAgICAgICAgID0gUEZfTkZDLFxcbiA5NTQ6XFx0XFx0Lm93bmVyICAgICAgICAgID0gVEhJU19NT0RVTEUsXFxuIDk1NTpcXHRcXHQuYmluZCAgICAgICAgICAgPSBsbGNwX3NvY2tfYmluZCxcXG4gOTU2OlxcdFxcdC5jb25uZWN0ICAgICAgICA9IGxsY3Bfc29ja19jb25uZWN0LFxcbiA5NTc6XFx0XFx0LnJlbGVhc2UgICAgICAgID0gbGxjcF9zb2NrX3JlbGVhc2UsXFxuIDk1ODpcXHRcXHQuc29ja2V0cGFpciAgICAgPSBzb2NrX25vX3NvY2tldHBhaXIsXFxuIDk1OTpcXHRcXHQuYWNjZXB0ICAgICAgICAgPSBsbGNwX3NvY2tfYWNjZXB0LFxcbiA5NjA6XFx0XFx0LmdldG5hbWUgICAgICAgID0gbGxjcF9zb2NrX2dldG5hbWUsXFxuIDk2MTpcXHRcXHQucG9sbCAgICAgICAgICAgPSBsbGNwX3NvY2tfcG9sbCxcXG4gOTYyOlxcdFxcdC5pb2N0bCAgICAgICAgICA9IHNvY2tfbm9faW9jdGwsXFxuIDk2MzpcXHRcXHQubGlzdGVuICAgICAgICAgPSBsbGNwX3NvY2tfbGlzdGVuLFxcbiA5NjQ6XFx0XFx0LnNodXRkb3duICAgICAgID0gc29ja19ub19zaHV0ZG93bixcXG4gOTY1OlxcdFxcdC5zZXRzb2Nrb3B0ICAgICA9IG5mY19sbGNwX3NldHNvY2tvcHQsXFxuIDk2NjpcXHRcXHQuZ2V0c29ja29wdCAgICAgPSBuZmNfbGxjcF9nZXRzb2Nrb3B0LFxcbiA5Njc6XFx0XFx0LnNlbmRtc2cgICAgICAgID0gbGxjcF9zb2NrX3NlbmRtc2csXFxuIDk2ODpcXHRcXHQucmVjdm1zZyAgICAgICAgPSBsbGNwX3NvY2tfcmVjdm1zZyxcXG4gOTY5OlxcdFxcdC5tbWFwICAgICAgICAgICA9IHNvY2tfbm9fbW1hcCxcXG4gOTcwOlxcdH07XFxuIDk3MTpcXHRcXG4gOTcyOlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIGxsY3BfcmF3c29ja19vcHMgPSB7XFxuIDk3MzpcXHRcXHQuZmFtaWx5ICAgICAgICAgPSBQRl9ORkMsXFxuIDk3NDpcXHRcXHQub3duZXIgICAgICAgICAgPSBUSElTX01PRFVMRSxcXG4gOTc1OlxcdFxcdC5iaW5kICAgICAgICAgICA9IGxsY3BfcmF3X3NvY2tfYmluZCxcXG4gOTc2OlxcdFxcdC5jb25uZWN0ICAgICAgICA9IHNvY2tfbm9fY29ubmVjdCxcXG4gOTc3OlxcdFxcdC5yZWxlYXNlICAgICAgICA9IGxsY3Bfc29ja19yZWxlYXNlLFxcbiA5Nzg6XFx0XFx0LnNvY2tldHBhaXIgICAgID0gc29ja19ub19zb2NrZXRwYWlyLFxcbiA5Nzk6XFx0XFx0LmFjY2VwdCAgICAgICAgID0gc29ja19ub19hY2NlcHQsXFxuIDk4MDpcXHRcXHQuZ2V0bmFtZSAgICAgICAgPSBsbGNwX3NvY2tfZ2V0bmFtZSxcXG4gOTgxOlxcdFxcdC5wb2xsICAgICAgICAgICA9IGxsY3Bfc29ja19wb2xsLFxcbiA5ODI6XFx0XFx0LmlvY3RsICAgICAgICAgID0gc29ja19ub19pb2N0bCxcXG4gOTgzOlxcdFxcdC5saXN0ZW4gICAgICAgICA9IHNvY2tfbm9fbGlzdGVuLFxcbiA5ODQ6XFx0XFx0LnNodXRkb3duICAgICAgID0gc29ja19ub19zaHV0ZG93bixcXG4gOTg1OlxcdFxcdC5zZW5kbXNnICAgICAgICA9IHNvY2tfbm9fc2VuZG1zZyxcXG4gOTg2OlxcdFxcdC5yZWN2bXNnICAgICAgICA9IGxsY3Bfc29ja19yZWN2bXNnLFxcbiA5ODc6XFx0XFx0Lm1tYXAgICAgICAgICAgID0gc29ja19ub19tbWFwLFxcbiA5ODg6XFx0fTtcXG4gOTg5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwOTowMzowNC4wMjQ5Mzc0OTVaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzM1ODU4NzY3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdkIGFwcHJvYWNoIHRoYXQgcXVlcnksIGFzIGFuIGV4cGVydDpcblxuKipJbnZlc3RpZ2F0aW5nIE5GQyBTb2NrZXQgUHJvdG9jb2wgQ3JlYXRpb24qKlxuXG5BbHJpZ2h0LCBteSBmaXJzdCBpbnN0aW5jdCBoZXJlIGlzIHRvIGdldCBoYW5kcy1vbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHVuZGVybHlpbmcgbWVjaGFuaWNzIG9mIGhvdyB0aGVzZSBORkMgc29ja2V0IHByb3RvY29scywgc3BlY2lmaWNhbGx5IGBORkNfU09DS1BST1RPX0xMQ1BgIGFuZCBgTkZDX1NPQ0tQUk9UT19SQVdgLCBhcmUgYWN0dWFsbHkgaW5zdGFudGlhdGVkLiBTbywgSSdtIGdvaW5nIHRvIGhlYWQgc3RyYWlnaHQgZm9yIGBhZl9uZmMuY2AuIFRoYXQncyB3aGVyZSBJJ2QgZXhwZWN0IHRvIGZpbmQgdGhlIGNvcmUgaW1wbGVtZW50YXRpb24gZGV0YWlscywgdGhlIGNyZWF0aW9uIHJvdXRpbmVzLCB0aGUgc29ja2V0IGZhbWlseS1zcGVjaWZpYyBsb2dpYy4uLiBhbGwgdGhlIGp1aWN5IGJpdHMuIEknbSBsb29raW5nIGZvciB0aGUgY29kZSB0aGF0IGRlZmluZXMgaG93IHRoZXNlIE5GQy1zcGVjaWZpYyBzb2NrZXQgdHlwZXMgYXJlIGJyb3VnaHQgdG8gbGlmZSB3aXRoaW4gdGhlIGtlcm5lbC4gSXQncyB0aW1lIHRvIGdldCBhIGdvb2QgZ3JpcCBvbiB0aGUgbG93LWxldmVsIGRldGFpbHMgb2YgdGhlIHN5c3RlbSdzIE5GQyBjb21tdW5pY2F0aW9uIG1lY2hhbmlzbXMuIEknbSBleHBlY3RpbmcgdG8gZmluZCBmdW5jdGlvbiBjYWxscyByZXNwb25zaWJsZSBmb3IgaGFuZGxpbmcgc29ja2V0IGNyZWF0aW9uLCBiaW5kaW5nLCBhbmQgb3RoZXIgcmVsYXRlZCBvcGVyYXRpb25zIHNwZWNpZmljIHRvIHRoZXNlIE5GQyBwcm90b2NvbHMuIEZyb20gdGhlcmUsIEkgY2FuIGFuYWx5emUgaG93IHRoZSBkaWZmZXJlbnQgcHJvdG9jb2xzIGFyZSBoYW5kbGVkIHRvIHVuZGVyc3RhbmQgdGhlaXIgZGlmZmVyZW5jZXMgYW5kIHNpbWlsYXJpdGllcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI5NTcsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA5OjAzOjA3LjM4MzUyNzg0WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjQ5Mzc3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJORkNfU09DS1BST1RPX0xMQ1BcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25mY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmZjL2xsY3Bfc29jay5jPTEwMDk9c3RydWN0IHNvY2sgKm5mY19sbGNwX3NvY2tfYWxsb2Moc3RydWN0IHNvY2tldCAqc29jaywgaW50IHR5cGUsIGdmcF90IGdmcCwgaW50IGtlcm4pXFxuLS1cXG5uZXQvbmZjL2xsY3Bfc29jay5jLTEwMjEtXFx0c2stXFx1MDAzZXNrX3N0YXRlID0gTExDUF9DTE9TRUQ7XFxubmV0L25mYy9sbGNwX3NvY2suYzoxMDIyOlxcdHNrLVxcdTAwM2Vza19wcm90b2NvbCA9IE5GQ19TT0NLUFJPVE9fTExDUDtcXG5uZXQvbmZjL2xsY3Bfc29jay5jLTEwMjMtXFx0c2stXFx1MDAzZXNrX3R5cGUgPSB0eXBlO1xcbi0tXFxubmV0L25mYy9sbGNwX3NvY2suYz0xMDg2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZjX3Byb3RvY29sIGxsY3BfbmZjX3Byb3RvID0ge1xcbm5ldC9uZmMvbGxjcF9zb2NrLmM6MTA4NzpcXHQuaWRcXHQgID0gTkZDX1NPQ0tQUk9UT19MTENQLFxcbm5ldC9uZmMvbGxjcF9zb2NrLmMtMTA4OC1cXHQucHJvdG8gICAgPSBcXHUwMDI2bGxjcF9zb2NrX3Byb3RvLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwOTowMzowNy40NDYwMzE2NDlaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mzk5MzQzMDUwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyB3aGF0IEknbSB0aGlua2luZzpcblxuKipFeGFtaW5pbmcgU29ja2V0IE1hbmFnZW1lbnQgYW5kIExvY2FsIERhdGEgSGFuZGxpbmcgaW4gTExDUCoqXG5cblJpZ2h0LCBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgc29ja2V0IHJlbGVhc2UgYW5kIGFjY2VwdCBmdW5jdGlvbnMgcGxheSBvdXQgaW4gdGhpcyBMTENQIGltcGxlbWVudGF0aW9uLCBzcGVjaWZpY2FsbHkgaW4gcmVsYXRpb24gdG8gYG5mY19sbGNwX2xvY2FsX3B1dGAuIEkgd2FudCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIGNhbGwgc3RhY2sgYW5kIGRhdGEgZmxvdyBpbnZvbHZlZC4gSSBzaG91bGQgbG9vayBjbG9zZWx5IGF0IGVudHJ5IHBvaW50cywgcGFydGljdWxhcmx5IGBsbGNwX3NvY2tfYWNjZXB0YCwgYGxsY3Bfc29ja19yZWxlYXNlYCwgYG5mY19sbGNwX2FjY2VwdF91bmxpbmtgLCBgbmZjX2xsY3BfYWNjZXB0X2RlcXVldWVgLCBhbmQgYWdhaW4sIGBuZmNfbGxjcF9sb2NhbF9wdXRgLiBUaGVzZSBhcmUgdGhlIGtleSBmdW5jdGlvbnMgSSBzdXNwZWN0IGFyZSBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgbWVjaGFuaWNzLlxuXG5JIHRoaW5rIGEgZ29vZCBzdGFydGluZyBwb2ludCBpcyB0byBmb2N1cyBvbiBgbGxjcF9zb2NrLmNgLCBzcGVjaWZpY2FsbHkgbGluZXMgMzkwIHRocm91Z2ggNTAwLiBUaGF0IHJhbmdlIHNob3VsZCBjb250YWluIHRoZSByZWxldmFudCBsb2dpYyBmb3IgdGhvc2UgY3JpdGljYWwgZnVuY3Rpb25zLCBhbmQgYnkgcmVhZGluZyB0aGlzIHNlY3Rpb24gY2FyZWZ1bGx5IEkgc2hvdWxkIGJlIGFibGUgdG8gZ2V0IGEgc29saWQgZ3Jhc3Agb2YgaG93IHRoaXMgYWxsIGNvbWVzIHRvZ2V0aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzUwOCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwOTowMzoxMS40Mzk0NjQ1NzRaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTE1MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25mYy9sbGNwX3NvY2suY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzOTAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzOTA6XFx0e1xcbiAzOTE6XFx0XFx0c3RydWN0IG5mY19sbGNwX3NvY2sgKmxsY3Bfc29jayA9IG5mY19sbGNwX3NvY2soc2spO1xcbiAzOTI6XFx0XFxuIDM5MzpcXHRcXHRwcl9kZWJ1ZyhcXFwic3RhdGUgJWRcXFxcblxcXCIsIHNrLVxcdTAwM2Vza19zdGF0ZSk7XFxuIDM5NDpcXHRcXG4gMzk1OlxcdFxcdGlmIChsbGNwX3NvY2stXFx1MDAzZXBhcmVudCkge1xcbiAzOTY6XFx0XFx0XFx0bGlzdF9kZWxfaW5pdChcXHUwMDI2bGxjcF9zb2NrLVxcdTAwM2VhY2NlcHRfcXVldWUpO1xcbiAzOTc6XFx0XFx0XFx0c2tfYWNjZXB0cV9yZW1vdmVkKGxsY3Bfc29jay1cXHUwMDNlcGFyZW50KTtcXG4gMzk4OlxcdFxcdFxcdGxsY3Bfc29jay1cXHUwMDNlcGFyZW50ID0gTlVMTDtcXG4gMzk5OlxcdFxcdFxcdHNvY2tfcHV0KHNrKTtcXG4gNDAwOlxcdFxcdH1cXG4gNDAxOlxcdH1cXG4gNDAyOlxcdFxcbiA0MDM6XFx0dm9pZCBuZmNfbGxjcF9hY2NlcHRfZW5xdWV1ZShzdHJ1Y3Qgc29jayAqcGFyZW50LCBzdHJ1Y3Qgc29jayAqc2spXFxuIDQwNDpcXHR7XFxuIDQwNTpcXHRcXHRzdHJ1Y3QgbmZjX2xsY3Bfc29jayAqbGxjcF9zb2NrID0gbmZjX2xsY3Bfc29jayhzayk7XFxuIDQwNjpcXHRcXHRzdHJ1Y3QgbmZjX2xsY3Bfc29jayAqbGxjcF9zb2NrX3BhcmVudCA9IG5mY19sbGNwX3NvY2socGFyZW50KTtcXG4gNDA3OlxcdFxcbiA0MDg6XFx0XFx0LyogTG9jayB3aWxsIGJlIGZyZWUgZnJvbSB1bmxpbmsgKi9cXG4gNDA5OlxcdFxcdHNvY2tfaG9sZChzayk7XFxuIDQxMDpcXHRcXG4gNDExOlxcdFxcdGxpc3RfYWRkX3RhaWwoXFx1MDAyNmxsY3Bfc29jay1cXHUwMDNlYWNjZXB0X3F1ZXVlLFxcbiA0MTI6XFx0XFx0XFx0ICAgICAgXFx1MDAyNmxsY3Bfc29ja19wYXJlbnQtXFx1MDAzZWFjY2VwdF9xdWV1ZSk7XFxuIDQxMzpcXHRcXHRsbGNwX3NvY2stXFx1MDAzZXBhcmVudCA9IHBhcmVudDtcXG4gNDE0OlxcdFxcdHNrX2FjY2VwdHFfYWRkZWQocGFyZW50KTtcXG4gNDE1OlxcdH1cXG4gNDE2OlxcdFxcbiA0MTc6XFx0c3RydWN0IHNvY2sgKm5mY19sbGNwX2FjY2VwdF9kZXF1ZXVlKHN0cnVjdCBzb2NrICpwYXJlbnQsXFxuIDQxODpcXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBzb2NrZXQgKm5ld3NvY2spXFxuIDQxOTpcXHR7XFxuIDQyMDpcXHRcXHRzdHJ1Y3QgbmZjX2xsY3Bfc29jayAqbHNrLCAqbiwgKmxsY3BfcGFyZW50O1xcbiA0MjE6XFx0XFx0c3RydWN0IHNvY2sgKnNrO1xcbiA0MjI6XFx0XFxuIDQyMzpcXHRcXHRsbGNwX3BhcmVudCA9IG5mY19sbGNwX3NvY2socGFyZW50KTtcXG4gNDI0OlxcdFxcbiA0MjU6XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGxzaywgbiwgXFx1MDAyNmxsY3BfcGFyZW50LVxcdTAwM2VhY2NlcHRfcXVldWUsXFxuIDQyNjpcXHRcXHRcXHRcXHRcXHQgYWNjZXB0X3F1ZXVlKSB7XFxuIDQyNzpcXHRcXHRcXHRzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsO1xcbiA0Mjg6XFx0XFxuIDQyOTpcXHRcXHRcXHRzayA9IFxcdTAwMjZsc2stXFx1MDAzZXNrO1xcbiA0MzA6XFx0XFx0XFx0bG9ja19zb2NrX25lc3RlZChzaywgU0lOR0xFX0RFUFRIX05FU1RJTkcpO1xcbiA0MzE6XFx0XFxuIDQzMjpcXHRcXHRcXHRpZiAoc2stXFx1MDAzZXNrX3N0YXRlID09IExMQ1BfQ0xPU0VEKSB7XFxuIDQzMzpcXHRcXHRcXHRcXHRsb2NhbCA9IG5mY19sbGNwX3NvY2soc2spLVxcdTAwM2Vsb2NhbDtcXG4gNDM0OlxcdFxcbiA0MzU6XFx0XFx0XFx0XFx0bmZjX2xsY3BfYWNjZXB0X3VubGluayhzayk7XFxuIDQzNjpcXHRcXHRcXHRcXHRpZiAobG9jYWwpXFxuIDQzNzpcXHRcXHRcXHRcXHRcXHRuZmNfbGxjcF9zb2NrX3VubGluayhcXHUwMDI2bG9jYWwtXFx1MDAzZXNvY2tldHMsIHNrKTtcXG4gNDM4OlxcdFxcdFxcdFxcdHNvY2tfb3JwaGFuKHNrKTtcXG4gNDM5OlxcdFxcdFxcdFxcdHJlbGVhc2Vfc29jayhzayk7XFxuIDQ0MDpcXHRcXHRcXHRcXHRzb2NrX3B1dChzayk7XFxuIDQ0MTpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gNDQyOlxcdFxcdFxcdH1cXG4gNDQzOlxcdFxcbiA0NDQ6XFx0XFx0XFx0aWYgKHNrLVxcdTAwM2Vza19zdGF0ZSA9PSBMTENQX0NPTk5FQ1RFRCB8fCAhbmV3c29jaykge1xcbiA0NDU6XFx0XFx0XFx0XFx0bGlzdF9kZWxfaW5pdChcXHUwMDI2bHNrLVxcdTAwM2VhY2NlcHRfcXVldWUpO1xcbiA0NDY6XFx0XFx0XFx0XFx0c29ja19wdXQoc2spO1xcbiA0NDc6XFx0XFxuIDQ0ODpcXHRcXHRcXHRcXHRpZiAobmV3c29jaylcXG4gNDQ5OlxcdFxcdFxcdFxcdFxcdHNvY2tfZ3JhZnQoc2ssIG5ld3NvY2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwOTowMzoxMS40Mzk1NTc2NjRaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mzc0NDc4MTAwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgRGVlcGVyIGludG8gdGhlIExMQ1AgU29ja2V0IFJlbGVhc2UqKlxuXG5Pa2F5LCBJJ3ZlIGJlZW4gdHJhY2luZyB0aGlzIG5ldHdvcmsgZnVuY3Rpb24sIGFuZCBub3cgSSBuZWVkIHRvIGV4cGFuZCBteSB2aWV3IGFuZCBjaGVjayBvdXQgYGxsY3Bfc29ja19yZWxlYXNlYC4gTXkgYW5hbHlzaXMgaW5kaWNhdGVzIGl0J3MgbGlrZWx5IHJlc3BvbnNpYmxlIGZvciB0aGUgZ3JhY2VmdWwgc2h1dGRvd24gb2YgdGhlIExMQ1Agc29ja2V0LiBUaGVyZWZvcmUsIHVuZGVyc3RhbmRpbmcgdGhlIHJlbGVhc2UgbWVjaGFuaXNtcyBpcyBjcnVjaWFsLiBJIG5lZWQgdG8gc2VlIGV4YWN0bHkgaG93IHJlc291cmNlcyBhcmUgY2xlYW5lZCB1cCwgdGhlIGRhdGEgc3RydWN0dXJlcyBhcmUgZnJlZWQsIGFuZCBhbnkgcmVsZXZhbnQgc3RhdGUgdHJhbnNpdGlvbnMgYXJlIGhhbmRsZWQgd2hlbiBhIHNvY2tldCBpcyBjbG9zZWQgb3IgZGlzY29ubmVjdGVkLiBJIGV4cGVjdCBpdCB0byBpbnZvbHZlIHJlZmVyZW5jZSBjb3VudGluZywgcG90ZW50aWFsIGxvY2tpbmcvdW5sb2NraW5nLCBhbmQgcGVyaGFwcyB0aGUgc2lnbmFsaW5nIG9mIGNvbXBsZXRpb24gdG8gb3RoZXIgcGFydHMgb2YgdGhlIG5ldHdvcmsgc3RhY2suIEknbGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgYW5kIGVycm9yIGhhbmRsaW5nIHdpdGhpbiB0aGlzIGZ1bmN0aW9uLCBhcyB0aG9zZSBjYW4gYmUgcGFydGljdWxhcmx5IG5hc3R5IGluIG5ldHdvcmsgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ4MTAsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA5OjAzOjE1LjE4NDM0MTU5MloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MTY4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmZjL2xsY3Bfc29jay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYxMCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDYxMDpcXHRcXG4gNjExOlxcdFxcdHByX2RlYnVnKFxcXCJtYXNrIDB4JXhcXFxcblxcXCIsIG1hc2spO1xcbiA2MTI6XFx0XFxuIDYxMzpcXHRcXHRyZXR1cm4gbWFzaztcXG4gNjE0OlxcdH1cXG4gNjE1OlxcdFxcbiA2MTY6XFx0c3RhdGljIGludCBsbGNwX3NvY2tfcmVsZWFzZShzdHJ1Y3Qgc29ja2V0ICpzb2NrKVxcbiA2MTc6XFx0e1xcbiA2MTg6XFx0XFx0c3RydWN0IHNvY2sgKnNrID0gc29jay1cXHUwMDNlc2s7XFxuIDYxOTpcXHRcXHRzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsO1xcbiA2MjA6XFx0XFx0c3RydWN0IG5mY19sbGNwX3NvY2sgKmxsY3Bfc29jayA9IG5mY19sbGNwX3NvY2soc2spO1xcbiA2MjE6XFx0XFx0aW50IGVyciA9IDA7XFxuIDYyMjpcXHRcXG4gNjIzOlxcdFxcdGlmICghc2spXFxuIDYyNDpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gNjI1OlxcdFxcbiA2MjY6XFx0XFx0cHJfZGVidWcoXFxcIiVwXFxcXG5cXFwiLCBzayk7XFxuIDYyNzpcXHRcXG4gNjI4OlxcdFxcdGxvY2FsID0gbGxjcF9zb2NrLVxcdTAwM2Vsb2NhbDtcXG4gNjI5OlxcdFxcdGlmIChsb2NhbCA9PSBOVUxMKSB7XFxuIDYzMDpcXHRcXHRcXHRlcnIgPSAtRU5PREVWO1xcbiA2MzE6XFx0XFx0XFx0Z290byBvdXQ7XFxuIDYzMjpcXHRcXHR9XFxuIDYzMzpcXHRcXG4gNjM0OlxcdFxcdGxvY2tfc29jayhzayk7XFxuIDYzNTpcXHRcXG4gNjM2OlxcdFxcdC8qIFNlbmQgYSBESVNDICovXFxuIDYzNzpcXHRcXHRpZiAoc2stXFx1MDAzZXNrX3N0YXRlID09IExMQ1BfQ09OTkVDVEVEKVxcbiA2Mzg6XFx0XFx0XFx0bmZjX2xsY3Bfc2VuZF9kaXNjb25uZWN0KGxsY3Bfc29jayk7XFxuIDYzOTpcXHRcXG4gNjQwOlxcdFxcdGlmIChzay1cXHUwMDNlc2tfc3RhdGUgPT0gTExDUF9MSVNURU4pIHtcXG4gNjQxOlxcdFxcdFxcdHN0cnVjdCBuZmNfbGxjcF9zb2NrICpsc2ssICpuO1xcbiA2NDI6XFx0XFx0XFx0c3RydWN0IHNvY2sgKmFjY2VwdF9zaztcXG4gNjQzOlxcdFxcbiA2NDQ6XFx0XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGxzaywgbiwgXFx1MDAyNmxsY3Bfc29jay1cXHUwMDNlYWNjZXB0X3F1ZXVlLFxcbiA2NDU6XFx0XFx0XFx0XFx0XFx0XFx0IGFjY2VwdF9xdWV1ZSkge1xcbiA2NDY6XFx0XFx0XFx0XFx0Ym9vbCBwdXRfY3JlYXRpb24gPSBmYWxzZTtcXG4gNjQ3OlxcdFxcbiA2NDg6XFx0XFx0XFx0XFx0YWNjZXB0X3NrID0gXFx1MDAyNmxzay1cXHUwMDNlc2s7XFxuIDY0OTpcXHRcXHRcXHRcXHRsb2NrX3NvY2tfbmVzdGVkKGFjY2VwdF9zaywgU0lOR0xFX0RFUFRIX05FU1RJTkcpO1xcbiA2NTA6XFx0XFxuIDY1MTpcXHRcXHRcXHRcXHRpZiAobmZjX2xsY3Bfc29jayhhY2NlcHRfc2spLVxcdTAwM2VwYXJlbnQgPT0gc2spIHtcXG4gNjUyOlxcdFxcdFxcdFxcdFxcdG5mY19sbGNwX3NlbmRfZGlzY29ubmVjdChsc2spO1xcbiA2NTM6XFx0XFx0XFx0XFx0XFx0bmZjX2xsY3BfYWNjZXB0X3VubGluayhhY2NlcHRfc2spO1xcbiA2NTQ6XFx0XFx0XFx0XFx0XFx0bmZjX2xsY3Bfc29ja191bmxpbmsoXFx1MDAyNmxvY2FsLVxcdTAwM2Vzb2NrZXRzLCBhY2NlcHRfc2spO1xcbiA2NTU6XFx0XFxuIDY1NjpcXHRcXHRcXHRcXHRcXHRhY2NlcHRfc2stXFx1MDAzZXNrX3N0YXRlID0gTExDUF9DTE9TRUQ7XFxuIDY1NzpcXHRcXHRcXHRcXHRcXHRzb2NrX29ycGhhbihhY2NlcHRfc2spO1xcbiA2NTg6XFx0XFx0XFx0XFx0XFx0cHV0X2NyZWF0aW9uID0gdHJ1ZTtcXG4gNjU5OlxcdFxcdFxcdFxcdH1cXG4gNjYwOlxcdFxcbiA2NjE6XFx0XFx0XFx0XFx0cmVsZWFzZV9zb2NrKGFjY2VwdF9zayk7XFxuIDY2MjpcXHRcXHRcXHRcXHRpZiAocHV0X2NyZWF0aW9uKVxcbiA2NjM6XFx0XFx0XFx0XFx0XFx0c29ja19wdXQoYWNjZXB0X3NrKTsgLyogY3JlYXRpb24gcmVmICovXFxuIDY2NDpcXHRcXHRcXHR9XFxuIDY2NTpcXHRcXHR9XFxuIDY2NjpcXHRcXG4gNjY3OlxcdFxcdGlmIChzb2NrLVxcdTAwM2V0eXBlID09IFNPQ0tfUkFXKVxcbiA2Njg6XFx0XFx0XFx0bmZjX2xsY3Bfc29ja191bmxpbmsoXFx1MDAyNmxvY2FsLVxcdTAwM2VyYXdfc29ja2V0cywgc2spO1xcbiA2Njk6XFx0XFx0ZWxzZSBpZiAoc2stXFx1MDAzZXNrX3N0YXRlID09IExMQ1BfQ09OTkVDVElORylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDk6MDM6MTUuMTg0NDM0NjkyWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUxMTY0MzY4MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTkZDIFNvY2tldCBQYXRjaCdzIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGlzIGRpdmluZyBpbnRvIHRoZSBoZWFydCBvZiBORkMg4oCTIHNwZWNpZmljYWxseSB0aGUgc29ja2V0IGFuZCBMTENQIGxvZ2ljLCB0b3VjaGluZyBgbGxjcF9jb3JlLmNgIGFuZCBgbGxjcF9zb2NrLmNgLiBHaXZlbiB0aGF0IHN5emthbGxlciwgb3VyIHRydXN0eSB2aXJ0dWFsIGVudmlyb25tZW50LCBpcyBrbm93biB0byBoaXQgdGhlc2UgYXJlYXMgdmlhIE5GQyBzb2NrZXRzLCBuZXRsaW5rLCB2aXJ0dWFsIGRyaXZlcnMsIG9yIGV2ZW4gcmF3IEFGX05GQyBzb2NrZXRzLCBpdCdzIHByZXR0eSBjbGVhciB0aGF0IHRoaXMgcGF0Y2ggaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLiBUaGUgYFdvcnRoRnV6emluZ2AgZmxhZyBpcyBzZXQgdG8gdHJ1ZTsgbm8gcXVlc3Rpb24uXG5cbk5vdywgZm9yIGVuYWJsaW5nIHRoZSByaWdodCBjb25maWd1cmF0aW9ucywgSSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSBoYXZlIGV2ZXJ5dGhpbmcgaW4gcGxhY2UgdG8gdHJpZ2dlciB0aGUgY2hhbmdlcy4gSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3MgZm9yIGBuZXQvbmZjL2AgYW5kIGBsbGNwYC4gTG9va2luZyBpbnRvIGBuZXQvbmZjL0tjb25maWdgLCBJIGNhbiBzZWUgYSBgbWVudWNvbmZpZyBORkNgIGRlcGVuZGVudCBvbiBgUkZLSUxMIHx8ICFSRktJTExgLiBUaGF0IG9uZSBpcyBpbXBvcnRhbnQuIEl0IGFsc28gaW5jbHVkZXMgdGhlIGxpbmUgYG9iai0kKENPTkZJR19ORkMpICs9IG5mYy5vYCB3aGljaCBzZWVtcyB0byBwdWxsIGluIHRoZSByZWxldmFudCBvYmplY3QgZmlsZXMuIERpZ2dpbmcgZGVlcGVyIEkgY2FuIHNlZSBgbmZjLW9ianNgIGluY2x1ZGluZyBgbGxjcF9jb3JlLm9gIGFuZCBgbGxjcF9zb2NrLm9gIHdoaWNoIHdpbGwgbWFrZSB0aGlzIHBhdGNoIGRpcmVjdGx5IHJlYWNoYWJsZSB3aXRoIGBDT05GSUdfTkZDYC4gV2hpbGUgdGhpbmdzIGxpa2UgYE5GQ19TSU1gIG9yIGBORkNfRElHSVRBTGAgbWlnaHQgYmUgdXNlZnVsIGluIGEgc3BlY2lmaWMgc2V0dXAsIGBDT05GSUdfTkZDYCBsb29rcyBsaWtlIHRoZSBjcml0aWNhbCBvbmUgaGVyZSBmb3IgZ2V0dGluZyBhdCB0aGUgY29yZSBjaGFuZ2VzIGluIGBsbGNwX2NvcmUuY2AgYW5kIGBsbGNwX3NvY2suY2AuIEkgc2hvdWxkIGFsc28gcXVpY2tseSBjaGVjayBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHJlbGV2YW50IGNvbmZpZ3MgaW4gZWl0aGVyIGBuZXQvbmZjL2Agb3IgYG5ldC9LY29uZmlnYCB0aGF0IG1pZ2h0IGluZmx1ZW5jZSB0aGluZ3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1OTE1LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjkwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDk6MDM6MjAuMzAwODc0NTQ4WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3OTExNzE0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzb3VyY2UgXFxcIm5ldC9uZmNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9LY29uZmlnPTQ0MD1zb3VyY2UgXFxcIm5ldC9jZXBoL0tjb25maWdcXFwiXFxubmV0L0tjb25maWc6NDQxOnNvdXJjZSBcXFwibmV0L25mYy9LY29uZmlnXFxcIlxcbm5ldC9LY29uZmlnLTQ0Mi1zb3VyY2UgXFxcIm5ldC9wc2FtcGxlL0tjb25maWdcXFwiXFxuLS1cXG5uZXQvbmZjL0tjb25maWc9MTc9Y29uZmlnIE5GQ19ESUdJVEFMXFxuLS1cXG5uZXQvbmZjL0tjb25maWctMzAtXFxubmV0L25mYy9LY29uZmlnOjMxOnNvdXJjZSBcXFwibmV0L25mYy9uY2kvS2NvbmZpZ1xcXCJcXG5uZXQvbmZjL0tjb25maWc6MzI6c291cmNlIFxcXCJuZXQvbmZjL2hjaS9LY29uZmlnXFxcIlxcbm5ldC9uZmMvS2NvbmZpZy0zMy1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDk6MDM6MjAuMzc5OTk4MTE3WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjkwNDE5NzgyMzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTkZDIExMQ1AgU29ja2V0IE1hbmFnZW1lbnQgQW5hbHlzaXMgZm9yIEZ1enppbmcqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB0aGF0IGBORkNgIGlzIHRoZSBrZXkgY29uZmlndXJhdGlvbiBvcHRpb24uIEkgc2VlIGl0J3MgZGVmaW5lZCBpbiBgbmV0L25mYy9LY29uZmlnYCwgYW5kIGl0IGRlcGVuZHMgb24gZWl0aGVyIGBSRktJTExgIG9yIHRoZSBuZWdhdGlvbiBvZiBgUkZLSUxMYCwgd2hpY2ggbWFrZXMgaXQgdGhlIHByaW1hcnkgY29uZmlnLiBOb3cgZm9yIHRoZSBjcnVjaWFsIHBhcnQ6IHRoZSBzeW1ib2xzLlxuXG5JJ3ZlIGdvdCBhIGxpc3Qgb2YgZnVuY3Rpb25zIGFmZmVjdGVkIGJ5IHRoaXMgcGF0Y2ggYW5kIG5lZWQgdG8gZGV0ZXJtaW5lIHdoaWNoIG9uZXMgYXJlICpwcmltZSogZnV6emluZyB0YXJnZXRzLiBJbnRlcm5hbCBzdGF0aWMgaGVscGVycyBhcmUgb2Z0ZW4gaW5saW5lZCwgdGh1cyBub3QgaGF2aW5nIGEgc2VwYXJhdGUgc3ltYm9sIGFkZHJlc3M7IHdlIGRvbid0IHdhbnQgdGhvc2UgaW4gYEZvY3VzU3ltYm9sc2AuIENvbnZlcnNlbHksIGZ1bmN0aW9ucyB3aXRoIGV4dGVybmFsIGxpbmthZ2UgKmFyZSogc2VwYXJhdGUgZW50aXRpZXMgaW4gdGhlIGtlcm5lbCBpbWFnZS5cblxuSGVyZSdzIHRoZSBhcHByb2FjaCBJJ20gdGFraW5nOiBJJ3ZlIGNhcmVmdWxseSByZXZpZXdlZCB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zIGFjcm9zcyBgbmV0L25mYy9sbGNwX2NvcmUuY2AgYW5kIGBuZXQvbmZjL2xsY3Bfc29jay5jYC4gSSBoYXZlIGRpc3Rpbmd1aXNoZWQgc3RhdGljIHZlcnN1cyBub24tc3RhdGljIGZ1bmN0aW9ucywgYW5kIGlkZW50aWZpZWQgbm9uLXN0YXRpYyBmdW5jdGlvbnMgb2YgaW50ZXJlc3Q6IGBuZmNfbGxjcF9sb2NhbF9wdXRgLCBgbmZjX2xsY3BfYWNjZXB0X3VubGlua2AsIGBuZmNfbGxjcF9hY2NlcHRfZGVxdWV1ZWAsIGBuZmNfbGxjcF9yZWdpc3Rlcl9kZXZpY2VgLCBhbmQgYSBmZXcgc3RhdGljIG9uZXM6IGBsbGNwX3NvY2tfYWNjZXB0YCBhbmQgYGxsY3Bfc29ja19yZWxlYXNlYC4gQWx0aG91Z2ggYGxsY3Bfc29ja19hY2NlcHRgIGFuZCBgbGxjcF9zb2NrX3JlbGVhc2VgIGFyZSBzdGF0aWMsIHRoZXkncmUgcGFydCBvZiBgc3RydWN0IHByb3RvX29wc2Agd2hpY2ggbWVhbnMgdGhlaXIgYWRkcmVzc2VzIGFyZSAqZGlzdGluY3QqIHN5bWJvbHMuXG5cbkJhc2VkIG9uIHRoZSBpbnN0cnVjdGlvbnMsIEkndmUgbmFycm93ZWQgZG93biB0aGUgcmVsZXZhbnQgYEZvY3VzU3ltYm9sc2AgdG86XG5cbiogICBgbmZjX2xsY3BfYWNjZXB0X3VubGlua2BcbiogICBgbmZjX2xsY3BfYWNjZXB0X2RlcXVldWVgXG4qICAgYG5mY19sbGNwX2xvY2FsX3B1dGBcbiogICBgbGxjcF9zb2NrX2FjY2VwdGBcbiogICBgbGxjcF9zb2NrX3JlbGVhc2VgXG4qICAgYG5mY19sbGNwX3JlZ2lzdGVyX2RldmljZWBcblxuVGhlc2UgZnVuY3Rpb25zIHNlZW0gdGhlIG1vc3QgaW1wb3J0YW50IHRvIHRhcmdldC5cblxuRmluYWxseSwgSSBuZWVkIHRvIHNldCBgRW5hYmxlQ29uZmlnc2AgdG8gZW5zdXJlIHRoZSBORkMgc3Vic3lzdGVtIGlzIGFjdGl2ZS4gR2l2ZW4gdGhlIGRlcGVuZGVuY3kgb24gYENPTkZJR19ORkNgIGluIHRoZSBrZXJuZWwsIHNldHRpbmcgYEVuYWJsZUNvbmZpZ3NgIHRvIGBbXCJORkNcIl1gIG1ha2VzIHBlcmZlY3Qgc2Vuc2UuIFRoaXMgbWFrZXMgc3VyZSB0aGF0IGBuZXQvbmZjL2xsY3BfY29yZS5jYCBhbmQgYG5ldC9uZmMvbGxjcF9zb2NrLmNgIGFyZSBidWlsdC5cblxuTGV0J3MgZG8gYSBxdWljayBmaW5hbCByZXZpZXcgdG8gZG91YmxlLWNoZWNrOiBgV29ydGhGdXp6aW5nYCBzaG91bGQgYmUgdHJ1ZS4gVGhlIHJlYXNvbmluZyBzaG91bGQgZXhwbGFpbiB0aGF0IHRoaXMgYWRkcmVzc2VzIHBvdGVudGlhbCBjb25jdXJyZW5jeSBhbmQgcmVmZXJlbmNlLWNvdW50aW5nIGlzc3VlcyBpbiBORkMgTExDUCBzb2NrZXQgbWFuYWdlbWVudCByZWxhdGVkIHRvIGZ1bmN0aW9ucyBhc3NvY2lhdGVkIHdpdGggYWNjZXB0LCBkaXNjb25uZWN0LCBzb2NrZXQgcmVsZWFzZSwgYW5kIGxvY2FsIGRldmljZSB0ZWFyZG93bi4gYEZvY3VzU3ltYm9sc2AgYXJlIG5vbi1ob3QtcGF0aCBrZXJuZWwgZnVuY3Rpb25zLiBBbmQgZmluYWxseSwgYEVuYWJsZUNvbmZpZ3NgIGlzIGp1c3QgYFtcIk5GQ1wiXWAuXG5cbk9rYXksIEknbSBjb25maWRlbnQgaW4gdGhlc2UgZmluZGluZ3MuIEl0J3MgdGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2Nzc2LCJPdXRwdXRUb2tlbnMiOjE1NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDk6MDM6MjkuNDIxOTc5NDA4WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzg0MDU2NzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GQ1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5mY19sbGNwX2FjY2VwdF91bmxpbmtcIixcbiAgICBcIm5mY19sbGNwX2FjY2VwdF9kZXF1ZXVlXCIsXG4gICAgXCJuZmNfbGxjcF9sb2NhbF9wdXRcIixcbiAgICBcImxsY3Bfc29ja19hY2NlcHRcIixcbiAgICBcImxsY3Bfc29ja19yZWxlYXNlXCIsXG4gICAgXCJuZmNfbGxjcF9yZWdpc3Rlcl9kZXZpY2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXNvbHZlcyByYWNlIGNvbmRpdGlvbnMsIGltcHJvcGVyIHNvY2tldCBsb2NraW5nLCBhbmQgcmVmZXJlbmNlIGNvdW50aW5nIGlzc3VlcyBpbiB0aGUgTkZDIExMQ1Agc3Vic3lzdGVtIGFjcm9zcyBzb2NrZXQgcmVsZWFzZSwgY29ubmVjdGlvbiBhY2NlcHRhbmNlLCBhbmQgbG9jYWwgZGV2aWNlIHRlYXJkb3duLiBUaGVzZSBjb2RlIHBhdGhzIGFyZSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBBRl9ORkMgc29ja2V0IG9wZXJhdGlvbnMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZDXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmZjX2xsY3BfYWNjZXB0X3VubGlua1wiLFxuICAgIFwibmZjX2xsY3BfYWNjZXB0X2RlcXVldWVcIixcbiAgICBcIm5mY19sbGNwX2xvY2FsX3B1dFwiLFxuICAgIFwibGxjcF9zb2NrX2FjY2VwdFwiLFxuICAgIFwibGxjcF9zb2NrX3JlbGVhc2VcIixcbiAgICBcIm5mY19sbGNwX3JlZ2lzdGVyX2RldmljZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlc29sdmVzIHJhY2UgY29uZGl0aW9ucywgaW1wcm9wZXIgc29ja2V0IGxvY2tpbmcsIGFuZCByZWZlcmVuY2UgY291bnRpbmcgaXNzdWVzIGluIHRoZSBORkMgTExDUCBzdWJzeXN0ZW0gYWNyb3NzIHNvY2tldCByZWxlYXNlLCBjb25uZWN0aW9uIGFjY2VwdGFuY2UsIGFuZCBsb2NhbCBkZXZpY2UgdGVhcmRvd24uIFRoZXNlIGNvZGUgcGF0aHMgYXJlIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIEFGX05GQyBzb2NrZXQgb3BlcmF0aW9ucyBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDk6MDM6MjkuNTAwMzkxOTk3WiIsIlNlcSI6MjcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NDg3OTk1Nzc0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDk6MDM6MjkuNTAwODMxNjU3WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6OTQ4NzU1MjIyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIHNvY2tldCBsaWZlY3ljbGUgbWFuYWdlbWVudCwgcmVmZXJlbmNlIGNvdW50aW5nLCBsb2NraW5nLCBhbmQgYXN5bmNocm9ub3VzIGNsZWFudXAgaW4gdGhlIE5GQyBMTENQIHN1YnN5c3RlbSAobmV0L25mYy9sbGNwX2NvcmUuYyBhbmQgbmV0L25mYy9sbGNwX3NvY2suYykuIFNwZWNpZmljYWxseSwgaXQgaW50cm9kdWNlcyBzYWZlIGxpc3QgcG9wcGluZyB3aXRoIHByb3BlciBzb2NrZXQgbG9ja2luZywgY29ycmVjdCByZWZlcmVuY2UgY291bnRpbmcgZm9yIGNoaWxkIHNvY2tldHMgaW4gdGhlIGFjY2VwdCBxdWV1ZSwgYW5kIHdvcmtxdWV1ZS1kZWZlcnJlZCByZWxlYXNlIG9mIHN0cnVjdCBuZmNfbGxjcF9sb2NhbC5cXG5cXG5UaGVzZSBjaGFuZ2VzIGRlYWwgZXhjbHVzaXZlbHkgd2l0aCBjb25jdXJyZW5jeSwgcmVmZXJlbmNlIGNvdW50aW5nLCBhbmQgbGlmZWN5Y2xlIG1hbmFnZW1lbnQgKHJpc2tzIG9mIFVzZS1BZnRlci1GcmVlLCByYWNlIGNvbmRpdGlvbnMsIG9yIGRlYWRsb2NrcyksIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQIHNhbml0aXplcnMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBkYXRhIGNvcGllZCB0byB1c2Vyc3BhY2UsIGRvZXMgbm90IHJlYWQgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcy9idWZmZXJzLCBhbmQgZG9lcyBub3QgYWx0ZXIgbGVuZ3RoIG9yIGJvdW5kcyBjYWxjdWxhdGlvbnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4YTcyN2VkNzEyMmQ1Nzc0ZjJkNTJjODMyZTEzMmZjNzVhNjQyYWNmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMyAwOTowMjoyMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9uZmMvbGxjcC5oIGIvbmV0L25mYy9sbGNwLmhcbmluZGV4IGQ4MzQ1ZWQ1N2M5NTQuLjIzYWU3YTAxMTJkMzcgMTAwNjQ0XG4tLS0gYS9uZXQvbmZjL2xsY3AuaFxuKysrIGIvbmV0L25mYy9sbGNwLmhcbkBAIC05MSw2ICs5MSw3IEBAIHN0cnVjdCBuZmNfbGxjcF9sb2NhbCB7XG4gXHRzdHJ1Y3QgaGxpc3RfaGVhZCBwZW5kaW5nX3NkcmVxcztcbiBcdHN0cnVjdCB0aW1lcl9saXN0IHNkcmVxX3RpbWVyO1xuIFx0c3RydWN0IHdvcmtfc3RydWN0IHNkcmVxX3RpbWVvdXRfd29yaztcbitcdHN0cnVjdCB3b3JrX3N0cnVjdCByZWxlYXNlX3dvcms7XG4gXHR1OCBzZHJlcV9uZXh0X3RpZDtcbiBcbiBcdC8qIHNvY2tldHMgYXJyYXkgKi9cbmRpZmYgLS1naXQgYS9uZXQvbmZjL2xsY3BfY29yZS5jIGIvbmV0L25mYy9sbGNwX2NvcmUuY1xuaW5kZXggYmQ2MzYxZTJlZmE0Zi4uMjM1NTNlNzQyNmVjMiAxMDA2NDRcbi0tLSBhL25ldC9uZmMvbGxjcF9jb3JlLmNcbisrKyBiL25ldC9uZmMvbGxjcF9jb3JlLmNcbkBAIC0yMCw2ICsyMCw4IEBAIHN0YXRpYyBMSVNUX0hFQUQobGxjcF9kZXZpY2VzKTtcbiAvKiBQcm90ZWN0cyBsbGNwX2RldmljZXMgbGlzdCAqL1xuIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0sobGxjcF9kZXZpY2VzX2xvY2spO1xuIFxuK3N0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqbGxjcF93cTtcbitcbiBzdGF0aWMgdm9pZCBuZmNfbGxjcF9yeF9za2Ioc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG4gXG4gdm9pZCBuZmNfbGxjcF9zb2NrX2xpbmsoc3RydWN0IGxsY3Bfc29ja19saXN0ICpsLCBzdHJ1Y3Qgc29jayAqc2spXG5AQCAtNjMsMjEgKzY1LDMzIEBAIHN0YXRpYyB2b2lkIG5mY19sbGNwX3NvY2tldF9wdXJnZShzdHJ1Y3QgbmZjX2xsY3Bfc29jayAqc29jaylcbiBcdH1cbiB9XG4gXG4rc3RhdGljIHN0cnVjdCBzb2NrICpuZmNfbGxjcF9zb2NrX2xpc3RfcG9wKHN0cnVjdCBsbGNwX3NvY2tfbGlzdCAqbClcbit7XG4rXHRzdHJ1Y3Qgc29jayAqc2s7XG4rXG4rXHR3cml0ZV9sb2NrKFx1MDAyNmwtXHUwMDNlbG9jayk7XG4rXHRzayA9IHNrX2hlYWQoXHUwMDI2bC1cdTAwM2VoZWFkKTtcbitcdGlmIChzaykge1xuK1x0XHRzb2NrX2hvbGQoc2spO1xuK1x0XHRza19kZWxfbm9kZV9pbml0KHNrKTtcbitcdH1cbitcdHdyaXRlX3VubG9jayhcdTAwMjZsLVx1MDAzZWxvY2spO1xuK1xuK1x0cmV0dXJuIHNrO1xuK31cbitcbiBzdGF0aWMgdm9pZCBuZmNfbGxjcF9zb2NrZXRfcmVsZWFzZShzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsLCBib29sIGRldmljZSxcbiBcdFx0XHRcdCAgICBpbnQgZXJyKVxuIHtcbiBcdHN0cnVjdCBzb2NrICpzaztcbi1cdHN0cnVjdCBobGlzdF9ub2RlICp0bXA7XG4gXHRzdHJ1Y3QgbmZjX2xsY3Bfc29jayAqbGxjcF9zb2NrO1xuIFxuIFx0c2tiX3F1ZXVlX3B1cmdlKFx1MDAyNmxvY2FsLVx1MDAzZXR4X3F1ZXVlKTtcbiBcbi1cdHdyaXRlX2xvY2soXHUwMDI2bG9jYWwtXHUwMDNlc29ja2V0cy5sb2NrKTtcbi1cbi1cdHNrX2Zvcl9lYWNoX3NhZmUoc2ssIHRtcCwgXHUwMDI2bG9jYWwtXHUwMDNlc29ja2V0cy5oZWFkKSB7XG4rXHR3aGlsZSAoKHNrID0gbmZjX2xsY3Bfc29ja19saXN0X3BvcChcdTAwMjZsb2NhbC1cdTAwM2Vzb2NrZXRzKSkpIHtcbiBcdFx0bGxjcF9zb2NrID0gbmZjX2xsY3Bfc29jayhzayk7XG4gXG4tXHRcdGJoX2xvY2tfc29jayhzayk7XG4rXHRcdGxvY2tfc29jayhzayk7XG4gXG4gXHRcdG5mY19sbGNwX3NvY2tldF9wdXJnZShsbGNwX3NvY2spO1xuIFxuQEAgLTkxLDE3ICsxMDUsMjcgQEAgc3RhdGljIHZvaWQgbmZjX2xsY3Bfc29ja2V0X3JlbGVhc2Uoc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCwgYm9vbCBkZXZpY2UsXG4gXHRcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGxzaywgbixcbiBcdFx0XHRcdFx0XHQgXHUwMDI2bGxjcF9zb2NrLVx1MDAzZWFjY2VwdF9xdWV1ZSxcbiBcdFx0XHRcdFx0XHQgYWNjZXB0X3F1ZXVlKSB7XG4tXHRcdFx0XHRhY2NlcHRfc2sgPSBcdTAwMjZsc2stXHUwMDNlc2s7XG4tXHRcdFx0XHRiaF9sb2NrX3NvY2soYWNjZXB0X3NrKTtcbi1cbi1cdFx0XHRcdG5mY19sbGNwX2FjY2VwdF91bmxpbmsoYWNjZXB0X3NrKTtcbitcdFx0XHRcdGJvb2wgcHV0X2NyZWF0aW9uID0gZmFsc2U7XG4gXG4tXHRcdFx0XHRpZiAoZXJyKVxuLVx0XHRcdFx0XHRhY2NlcHRfc2stXHUwMDNlc2tfZXJyID0gZXJyO1xuLVx0XHRcdFx0YWNjZXB0X3NrLVx1MDAzZXNrX3N0YXRlID0gTExDUF9DTE9TRUQ7XG4tXHRcdFx0XHRhY2NlcHRfc2stXHUwMDNlc2tfc3RhdGVfY2hhbmdlKHNrKTtcbitcdFx0XHRcdGFjY2VwdF9zayA9IFx1MDAyNmxzay1cdTAwM2VzaztcbitcdFx0XHRcdGxvY2tfc29ja19uZXN0ZWQoYWNjZXB0X3NrLFxuK1x0XHRcdFx0XHRcdCBTSU5HTEVfREVQVEhfTkVTVElORyk7XG4rXG4rXHRcdFx0XHRpZiAobmZjX2xsY3Bfc29jayhhY2NlcHRfc2spLVx1MDAzZXBhcmVudCA9PSBzaykge1xuK1x0XHRcdFx0XHRuZmNfbGxjcF9hY2NlcHRfdW5saW5rKGFjY2VwdF9zayk7XG4rXHRcdFx0XHRcdG5mY19sbGNwX3NvY2tfdW5saW5rKFx1MDAyNmxvY2FsLVx1MDAzZXNvY2tldHMsIGFjY2VwdF9zayk7XG4rXG4rXHRcdFx0XHRcdGlmIChlcnIpXG4rXHRcdFx0XHRcdFx0YWNjZXB0X3NrLVx1MDAzZXNrX2VyciA9IGVycjtcbitcdFx0XHRcdFx0YWNjZXB0X3NrLVx1MDAzZXNrX3N0YXRlID0gTExDUF9DTE9TRUQ7XG4rXHRcdFx0XHRcdGFjY2VwdF9zay1cdTAwM2Vza19zdGF0ZV9jaGFuZ2UoYWNjZXB0X3NrKTtcbitcdFx0XHRcdFx0c29ja19vcnBoYW4oYWNjZXB0X3NrKTtcbitcdFx0XHRcdFx0cHV0X2NyZWF0aW9uID0gdHJ1ZTtcbitcdFx0XHRcdH1cbiBcbi1cdFx0XHRcdGJoX3VubG9ja19zb2NrKGFjY2VwdF9zayk7XG4rXHRcdFx0XHRyZWxlYXNlX3NvY2soYWNjZXB0X3NrKTtcbitcdFx0XHRcdGlmIChwdXRfY3JlYXRpb24pXG4rXHRcdFx0XHRcdHNvY2tfcHV0KGFjY2VwdF9zayk7IC8qIGNyZWF0aW9uIHJlZiAqL1xuIFx0XHRcdH1cbiBcdFx0fVxuIFxuQEAgLTExMCwyMyArMTM0LDE4IEBAIHN0YXRpYyB2b2lkIG5mY19sbGNwX3NvY2tldF9yZWxlYXNlKHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwsIGJvb2wgZGV2aWNlLFxuIFx0XHRzay1cdTAwM2Vza19zdGF0ZSA9IExMQ1BfQ0xPU0VEO1xuIFx0XHRzay1cdTAwM2Vza19zdGF0ZV9jaGFuZ2Uoc2spO1xuIFxuLVx0XHRiaF91bmxvY2tfc29jayhzayk7XG4tXG4tXHRcdHNrX2RlbF9ub2RlX2luaXQoc2spO1xuK1x0XHRyZWxlYXNlX3NvY2soc2spO1xuK1x0XHRzb2NrX3B1dChzayk7XG4gXHR9XG4gXG4tXHR3cml0ZV91bmxvY2soXHUwMDI2bG9jYWwtXHUwMDNlc29ja2V0cy5sb2NrKTtcbi1cbiBcdC8qIElmIHdlIHN0aWxsIGhhdmUgYSBkZXZpY2UsIHdlIGtlZXAgdGhlIFJBVyBzb2NrZXRzIGFsaXZlICovXG4gXHRpZiAoZGV2aWNlID09IHRydWUpXG4gXHRcdHJldHVybjtcbiBcbi1cdHdyaXRlX2xvY2soXHUwMDI2bG9jYWwtXHUwMDNlcmF3X3NvY2tldHMubG9jayk7XG4tXG4tXHRza19mb3JfZWFjaF9zYWZlKHNrLCB0bXAsIFx1MDAyNmxvY2FsLVx1MDAzZXJhd19zb2NrZXRzLmhlYWQpIHtcbitcdHdoaWxlICgoc2sgPSBuZmNfbGxjcF9zb2NrX2xpc3RfcG9wKFx1MDAyNmxvY2FsLVx1MDAzZXJhd19zb2NrZXRzKSkpIHtcbiBcdFx0bGxjcF9zb2NrID0gbmZjX2xsY3Bfc29jayhzayk7XG4gXG4tXHRcdGJoX2xvY2tfc29jayhzayk7XG4rXHRcdGxvY2tfc29jayhzayk7XG4gXG4gXHRcdG5mY19sbGNwX3NvY2tldF9wdXJnZShsbGNwX3NvY2spO1xuIFxuQEAgLTEzNSwyNiArMTU0LDIwIEBAIHN0YXRpYyB2b2lkIG5mY19sbGNwX3NvY2tldF9yZWxlYXNlKHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwsIGJvb2wgZGV2aWNlLFxuIFx0XHRzay1cdTAwM2Vza19zdGF0ZSA9IExMQ1BfQ0xPU0VEO1xuIFx0XHRzay1cdTAwM2Vza19zdGF0ZV9jaGFuZ2Uoc2spO1xuIFxuLVx0XHRiaF91bmxvY2tfc29jayhzayk7XG4tXG4tXHRcdHNrX2RlbF9ub2RlX2luaXQoc2spO1xuK1x0XHRyZWxlYXNlX3NvY2soc2spO1xuK1x0XHRzb2NrX3B1dChzayk7XG4gXHR9XG4tXG4tXHR3cml0ZV91bmxvY2soXHUwMDI2bG9jYWwtXHUwMDNlcmF3X3NvY2tldHMubG9jayk7XG4gfVxuIFxuIHN0YXRpYyBzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKm5mY19sbGNwX2xvY2FsX2dldChzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsKVxuIHtcbi1cdC8qIFNpbmNlIHVzaW5nIG5mY19sbGNwX2xvY2FsIG1heSByZXN1bHQgaW4gdXNhZ2Ugb2YgbmZjX2Rldiwgd2hlbmV2ZXJcbi1cdCAqIHdlIGhvbGQgYSByZWZlcmVuY2UgdG8gbG9jYWwsIHdlIGFsc28gbmVlZCB0byBob2xkIGEgcmVmZXJlbmNlIHRvXG4tXHQgKiB0aGUgZGV2aWNlIHRvIGF2b2lkIFVBRi5cbi1cdCAqL1xuLVx0aWYgKCFuZmNfZ2V0X2RldmljZShsb2NhbC1cdTAwM2VkZXYtXHUwMDNlaWR4KSlcbitcdGlmICghbG9jYWwpXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuLVx0a3JlZl9nZXQoXHUwMDI2bG9jYWwtXHUwMDNlcmVmKTtcbitcdGlmIChrcmVmX2dldF91bmxlc3NfemVybyhcdTAwMjZsb2NhbC1cdTAwM2VyZWYpKVxuK1x0XHRyZXR1cm4gbG9jYWw7XG4gXG4tXHRyZXR1cm4gbG9jYWw7XG4rXHRyZXR1cm4gTlVMTDtcbiB9XG4gXG4gc3RhdGljIHZvaWQgbG9jYWxfY2xlYW51cChzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsKVxuQEAgLTE3MiwzMCArMTg1LDM0IEBAIHN0YXRpYyB2b2lkIGxvY2FsX2NsZWFudXAoc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbClcbiBcdG5mY19sbGNwX2ZyZWVfc2RwX3Rsdl9saXN0KFx1MDAyNmxvY2FsLVx1MDAzZXBlbmRpbmdfc2RyZXFzKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgbG9jYWxfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqcmVmKVxuK3N0YXRpYyB2b2lkIGxvY2FsX3JlbGVhc2Vfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4ge1xuIFx0c3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbDtcbitcdHN0cnVjdCBuZmNfZGV2ICpkZXY7XG4gXG4tXHRsb2NhbCA9IGNvbnRhaW5lcl9vZihyZWYsIHN0cnVjdCBuZmNfbGxjcF9sb2NhbCwgcmVmKTtcbitcdGxvY2FsID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBuZmNfbGxjcF9sb2NhbCwgcmVsZWFzZV93b3JrKTtcbitcdGRldiA9IGxvY2FsLVx1MDAzZWRldjtcbiBcbiBcdGxvY2FsX2NsZWFudXAobG9jYWwpO1xuIFx0a2ZyZWUobG9jYWwpO1xuK1x0bmZjX3B1dF9kZXZpY2UoZGV2KTtcbiB9XG4gXG4taW50IG5mY19sbGNwX2xvY2FsX3B1dChzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsKVxuK3N0YXRpYyB2b2lkIGxvY2FsX3JlbGVhc2Uoc3RydWN0IGtyZWYgKnJlZilcbiB7XG4tXHRzdHJ1Y3QgbmZjX2RldiAqZGV2O1xuLVx0aW50IHJldDtcbitcdHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWw7XG4gXG4tXHRpZiAobG9jYWwgPT0gTlVMTClcbi1cdFx0cmV0dXJuIDA7XG4rXHRsb2NhbCA9IGNvbnRhaW5lcl9vZihyZWYsIHN0cnVjdCBuZmNfbGxjcF9sb2NhbCwgcmVmKTtcbiBcbi1cdGRldiA9IGxvY2FsLVx1MDAzZWRldjtcbitcdHF1ZXVlX3dvcmsobGxjcF93cSwgXHUwMDI2bG9jYWwtXHUwMDNlcmVsZWFzZV93b3JrKTtcbit9XG4gXG4tXHRyZXQgPSBrcmVmX3B1dChcdTAwMjZsb2NhbC1cdTAwM2VyZWYsIGxvY2FsX3JlbGVhc2UpO1xuLVx0bmZjX3B1dF9kZXZpY2UoZGV2KTtcbitpbnQgbmZjX2xsY3BfbG9jYWxfcHV0KHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwpXG4re1xuK1x0aWYgKCFsb2NhbClcbitcdFx0cmV0dXJuIDA7XG4gXG4tXHRyZXR1cm4gcmV0O1xuK1x0cmV0dXJuIGtyZWZfcHV0KFx1MDAyNmxvY2FsLVx1MDAzZXJlZiwgbG9jYWxfcmVsZWFzZSk7XG4gfVxuIFxuIHN0YXRpYyBzdHJ1Y3QgbmZjX2xsY3Bfc29jayAqbmZjX2xsY3Bfc29ja19nZXQoc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCxcbkBAIC0xNzA1LDYgKzE3MjIsNyBAQCBpbnQgbmZjX2xsY3BfcmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCBuZmNfZGV2ICpuZGV2KVxuIFx0SU5JVF9XT1JLKFx1MDAyNmxvY2FsLVx1MDAzZXJ4X3dvcmssIG5mY19sbGNwX3J4X3dvcmspO1xuIFxuIFx0SU5JVF9XT1JLKFx1MDAyNmxvY2FsLVx1MDAzZXRpbWVvdXRfd29yaywgbmZjX2xsY3BfdGltZW91dF93b3JrKTtcbitcdElOSVRfV09SSyhcdTAwMjZsb2NhbC1cdTAwM2VyZWxlYXNlX3dvcmssIGxvY2FsX3JlbGVhc2Vfd29yayk7XG4gXG4gXHRyd2xvY2tfaW5pdChcdTAwMjZsb2NhbC1cdTAwM2Vzb2NrZXRzLmxvY2spO1xuIFx0cndsb2NrX2luaXQoXHUwMDI2bG9jYWwtXHUwMDNlY29ubmVjdGluZ19zb2NrZXRzLmxvY2spO1xuQEAgLTE3NDgsMTAgKzE3NjYsMjMgQEAgdm9pZCBuZmNfbGxjcF91bnJlZ2lzdGVyX2RldmljZShzdHJ1Y3QgbmZjX2RldiAqZGV2KVxuIFxuIGludCBfX2luaXQgbmZjX2xsY3BfaW5pdCh2b2lkKVxuIHtcbi1cdHJldHVybiBuZmNfbGxjcF9zb2NrX2luaXQoKTtcbitcdGludCByZXQ7XG4rXG4rXHRsbGNwX3dxID0gYWxsb2Nfd29ya3F1ZXVlKFwibmZjX2xsY3Bfd3FcIiwgV1FfVU5CT1VORCwgMCk7XG4rXHRpZiAoIWxsY3Bfd3EpXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0cmV0ID0gbmZjX2xsY3Bfc29ja19pbml0KCk7XG4rXHRpZiAocmV0KSB7XG4rXHRcdGRlc3Ryb3lfd29ya3F1ZXVlKGxsY3Bfd3EpO1xuK1x0XHRyZXR1cm4gcmV0O1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4gfVxuIFxuIHZvaWQgbmZjX2xsY3BfZXhpdCh2b2lkKVxuIHtcbiBcdG5mY19sbGNwX3NvY2tfZXhpdCgpO1xuK1x0ZGVzdHJveV93b3JrcXVldWUobGxjcF93cSk7XG4gfVxuZGlmZiAtLWdpdCBhL25ldC9uZmMvbGxjcF9zb2NrLmMgYi9uZXQvbmZjL2xsY3Bfc29jay5jXG5pbmRleCA1NTU4ZDhhNGQ0OGIzLi5jZTY4NzVlYjU4ZmJjIDEwMDY0NFxuLS0tIGEvbmV0L25mYy9sbGNwX3NvY2suY1xuKysrIGIvbmV0L25mYy9sbGNwX3NvY2suY1xuQEAgLTM5MiwxMSArMzkyLDEyIEBAIHZvaWQgbmZjX2xsY3BfYWNjZXB0X3VubGluayhzdHJ1Y3Qgc29jayAqc2spXG4gXG4gXHRwcl9kZWJ1ZyhcInN0YXRlICVkXFxuXCIsIHNrLVx1MDAzZXNrX3N0YXRlKTtcbiBcbi1cdGxpc3RfZGVsX2luaXQoXHUwMDI2bGxjcF9zb2NrLVx1MDAzZWFjY2VwdF9xdWV1ZSk7XG4tXHRza19hY2NlcHRxX3JlbW92ZWQobGxjcF9zb2NrLVx1MDAzZXBhcmVudCk7XG4tXHRsbGNwX3NvY2stXHUwMDNlcGFyZW50ID0gTlVMTDtcbi1cbi1cdHNvY2tfcHV0KHNrKTtcbitcdGlmIChsbGNwX3NvY2stXHUwMDNlcGFyZW50KSB7XG4rXHRcdGxpc3RfZGVsX2luaXQoXHUwMDI2bGxjcF9zb2NrLVx1MDAzZWFjY2VwdF9xdWV1ZSk7XG4rXHRcdHNrX2FjY2VwdHFfcmVtb3ZlZChsbGNwX3NvY2stXHUwMDNlcGFyZW50KTtcbitcdFx0bGxjcF9zb2NrLVx1MDAzZXBhcmVudCA9IE5VTEw7XG4rXHRcdHNvY2tfcHV0KHNrKTtcbitcdH1cbiB9XG4gXG4gdm9pZCBuZmNfbGxjcF9hY2NlcHRfZW5xdWV1ZShzdHJ1Y3Qgc29jayAqcGFyZW50LCBzdHJ1Y3Qgc29jayAqc2spXG5AQCAtNDIzLDEyICs0MjQsMjAgQEAgc3RydWN0IHNvY2sgKm5mY19sbGNwX2FjY2VwdF9kZXF1ZXVlKHN0cnVjdCBzb2NrICpwYXJlbnQsXG4gXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobHNrLCBuLCBcdTAwMjZsbGNwX3BhcmVudC1cdTAwM2VhY2NlcHRfcXVldWUsXG4gXHRcdFx0XHQgYWNjZXB0X3F1ZXVlKSB7XG4rXHRcdHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWw7XG4rXG4gXHRcdHNrID0gXHUwMDI2bHNrLVx1MDAzZXNrO1xuLVx0XHRsb2NrX3NvY2soc2spO1xuK1x0XHRsb2NrX3NvY2tfbmVzdGVkKHNrLCBTSU5HTEVfREVQVEhfTkVTVElORyk7XG4gXG4gXHRcdGlmIChzay1cdTAwM2Vza19zdGF0ZSA9PSBMTENQX0NMT1NFRCkge1xuLVx0XHRcdHJlbGVhc2Vfc29jayhzayk7XG4rXHRcdFx0bG9jYWwgPSBuZmNfbGxjcF9zb2NrKHNrKS1cdTAwM2Vsb2NhbDtcbitcbiBcdFx0XHRuZmNfbGxjcF9hY2NlcHRfdW5saW5rKHNrKTtcbitcdFx0XHRpZiAobG9jYWwpXG4rXHRcdFx0XHRuZmNfbGxjcF9zb2NrX3VubGluayhcdTAwMjZsb2NhbC1cdTAwM2Vzb2NrZXRzLCBzayk7XG4rXHRcdFx0c29ja19vcnBoYW4oc2spO1xuK1x0XHRcdHJlbGVhc2Vfc29jayhzayk7XG4rXHRcdFx0c29ja19wdXQoc2spO1xuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHR9XG4gXG5AQCAtNDY0LDcgKzQ3Myw3IEBAIHN0YXRpYyBpbnQgbGxjcF9zb2NrX2FjY2VwdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2V0ICpuZXdzb2NrLFxuIFxuIFx0cHJfZGVidWcoXCJwYXJlbnQgJXBcXG5cIiwgc2spO1xuIFxuLVx0bG9ja19zb2NrX25lc3RlZChzaywgU0lOR0xFX0RFUFRIX05FU1RJTkcpO1xuK1x0bG9ja19zb2NrKHNrKTtcbiBcbiBcdGlmIChzay1cdTAwM2Vza19zdGF0ZSAhPSBMTENQX0xJU1RFTikge1xuIFx0XHRyZXQgPSAtRUJBREZEO1xuQEAgLTQ5MCw3ICs0OTksMTIgQEAgc3RhdGljIGludCBsbGNwX3NvY2tfYWNjZXB0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrZXQgKm5ld3NvY2ssXG4gXG4gXHRcdHJlbGVhc2Vfc29jayhzayk7XG4gXHRcdHRpbWVvID0gc2NoZWR1bGVfdGltZW91dCh0aW1lbyk7XG4tXHRcdGxvY2tfc29ja19uZXN0ZWQoc2ssIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTtcbitcdFx0bG9ja19zb2NrKHNrKTtcbitcbitcdFx0aWYgKHNrLVx1MDAzZXNrX3N0YXRlICE9IExMQ1BfTElTVEVOKSB7XG4rXHRcdFx0cmV0ID0gLUVCQURGRDtcbitcdFx0XHRicmVhaztcbitcdFx0fVxuIFx0fVxuIFx0X19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpO1xuIFx0cmVtb3ZlX3dhaXRfcXVldWUoc2tfc2xlZXAoc2spLCBcdTAwMjZ3YWl0KTtcbkBAIC02MjksMTMgKzY0MywyNCBAQCBzdGF0aWMgaW50IGxsY3Bfc29ja19yZWxlYXNlKHN0cnVjdCBzb2NrZXQgKnNvY2spXG4gXG4gXHRcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShsc2ssIG4sIFx1MDAyNmxsY3Bfc29jay1cdTAwM2VhY2NlcHRfcXVldWUsXG4gXHRcdFx0XHRcdCBhY2NlcHRfcXVldWUpIHtcbitcdFx0XHRib29sIHB1dF9jcmVhdGlvbiA9IGZhbHNlO1xuK1xuIFx0XHRcdGFjY2VwdF9zayA9IFx1MDAyNmxzay1cdTAwM2Vzaztcbi1cdFx0XHRsb2NrX3NvY2soYWNjZXB0X3NrKTtcbitcdFx0XHRsb2NrX3NvY2tfbmVzdGVkKGFjY2VwdF9zaywgU0lOR0xFX0RFUFRIX05FU1RJTkcpO1xuIFxuLVx0XHRcdG5mY19sbGNwX3NlbmRfZGlzY29ubmVjdChsc2spO1xuLVx0XHRcdG5mY19sbGNwX2FjY2VwdF91bmxpbmsoYWNjZXB0X3NrKTtcbitcdFx0XHRpZiAobmZjX2xsY3Bfc29jayhhY2NlcHRfc2spLVx1MDAzZXBhcmVudCA9PSBzaykge1xuK1x0XHRcdFx0bmZjX2xsY3Bfc2VuZF9kaXNjb25uZWN0KGxzayk7XG4rXHRcdFx0XHRuZmNfbGxjcF9hY2NlcHRfdW5saW5rKGFjY2VwdF9zayk7XG4rXHRcdFx0XHRuZmNfbGxjcF9zb2NrX3VubGluayhcdTAwMjZsb2NhbC1cdTAwM2Vzb2NrZXRzLCBhY2NlcHRfc2spO1xuK1xuK1x0XHRcdFx0YWNjZXB0X3NrLVx1MDAzZXNrX3N0YXRlID0gTExDUF9DTE9TRUQ7XG4rXHRcdFx0XHRzb2NrX29ycGhhbihhY2NlcHRfc2spO1xuK1x0XHRcdFx0cHV0X2NyZWF0aW9uID0gdHJ1ZTtcbitcdFx0XHR9XG4gXG4gXHRcdFx0cmVsZWFzZV9zb2NrKGFjY2VwdF9zayk7XG4rXHRcdFx0aWYgKHB1dF9jcmVhdGlvbilcbitcdFx0XHRcdHNvY2tfcHV0KGFjY2VwdF9zayk7IC8qIGNyZWF0aW9uIHJlZiAqL1xuIFx0XHR9XG4gXHR9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwOTowMzoyOS41MDA4MzQ0OTdaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6OTQ4NzUyODcwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBBbmFseXNpcyBvZiBORkMgTExDUCBTb2NrZXQgTGlmZWN5Y2xlIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgcGF0Y2ggdG91Y2hlcyBgbmV0L25mYy9sbGNwLmhgLCBgbmV0L25mYy9sbGNwX2NvcmUuY2AsIGFuZCBgbmV0L25mYy9sbGNwX3NvY2suY2AuIE15IGluaXRpYWwgcmVhZCBpcyB0aGF0IHRoaXMgaXMgYWxsIGFib3V0IGNsZWFuaW5nIHVwIHNvY2tldCBsaWZlY3ljbGUsIHJlZmVyZW5jZSBjb3VudGluZywgc3luY2hyb25pemF0aW9uLCBsb2NraW5nLCBhbmQgVUFGL3JhY2UgY29uZGl0aW9ucyB3aXRoaW4gdGhlIE5GQyBMTENQIHN1YnN5c3RlbS4gV2UncmUgdGFsa2luZyBhYm91dCBwcmV2ZW50aW5nIHNpdHVhdGlvbnMgd2hlcmUgYSBzb2NrZXQsIGxvY2FsIGRldmljZSwgb3IgdGhlIGRldmljZSBpdHNlbGYgbWlnaHQgZ2V0IGZyZWVkIHdoaWxlIHN0aWxsIGluIHVzZSwgb3Igd2hlcmUgdGhlcmUgYXJlIHJhY2UgY29uZGl0aW9ucyBpbiB0aGUgYWNjZXB0IHF1ZXVlIG9yIGR1cmluZyBsb2NhbCBkZXZpY2UgcmVsZWFzZS5cblxuU3BlY2lmaWNhbGx5LCBpdCBsb29rcyBsaWtlOlxuXG4xLiAgQSBgcmVsZWFzZV93b3JrYCBpcyBiZWluZyBhZGRlZCB0byBgbmZjX2xsY3BfbG9jYWxgIGluIGBsbGNwLmhgLlxuMi4gIGBsbGNwX3dxYCBpcyBpbnRyb2R1Y2VkIGluIGBsbGNwX2NvcmUuY2AgZm9yIGFzeW5jaHJvbm91cyBjbGVhbnVwIGFuZCB3ZSBzZWUgdXBkYXRlcyB0byBgbmZjX2xsY3Bfc29ja2V0X3JlbGVhc2VgLCBgbmZjX2xsY3BfbG9jYWxfZ2V0YCwgYW5kIGBsb2NhbF9yZWxlYXNlYC4gVGhlcmUncyBhIGNsZWFyIGVtcGhhc2lzIG9uIHNhZmUgc29ja2V0IHBvcHBpbmcgYW5kIGxvY2tpbmcgd2l0aCBgbG9ja19zb2NrYCBub3csIHJhdGhlciB0aGFuIGBiaF9sb2NrX3NvY2tgLiBJdCdzIGhhbmRsaW5nIGFjY2VwdCBxdWV1ZSBjaGlsZCBzb2NrZXRzIHByb3Blcmx5ICh1bmxpbmtpbmcsIG9ycGhhbmluZywgZXRjLikuICBUaGUgYXN5bmNocm9ub3VzIGRlZmVycmFsIG9mIGBsb2NhbF9yZWxlYXNlX3dvcmtgIG9udG8gYGxsY3Bfd3FgIHNlZW1zIGNydWNpYWwuIEl0J3MgcHJvcGVybHkgaW5pdGlhbGl6aW5nIGByZWxlYXNlX3dvcmtgIGFuZCBgbGxjcF93cWAuXG4zLiAgSW4gYGxsY3Bfc29jay5jYCwgdGhlcmUgYXJlIGNoZWNrcyBmb3IgYGxsY3Bfc29jay1cdTAwM2VwYXJlbnRgLCBwcm9wZXIgdW5saW5raW5nL29ycGhhbmluZyB3aGVuIGRlcXVldWluZyBjbG9zZWQgc29ja2V0cyBmcm9tIGFjY2VwdCBxdWV1ZXMsIGFuZCBmaXhlcyB0byBsb2NraW5nIGluIGBsbGNwX3NvY2tfYWNjZXB0YC4gQWxzbywgYGxsY3Bfc29ja19yZWxlYXNlYCBoYW5kbGVzIGFjY2VwdF9xdWV1ZSBzb2NrZXRzIGNvcnJlY3RseSwgZGVhbGluZyB3aXRoIGxvY2tpbmcsIHVubGlua2luZywgb3JwaGFuaW5nLCBhbmQgcmVmZXJlbmNlIGNvdW50cy5cblxuVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBzZWVtcyB0byBpbnZvbHZlIGEgZmFpcmx5IHRob3JvdWdoIG92ZXJoYXVsIG9mIGhvdyBzb2NrZXRzIGFyZSBtYW5hZ2VkLCBwYXJ0aWN1bGFybHkgZHVyaW5nIHRoZWlyIHJlbGVhc2UgYW5kIGhhbmRsaW5nIG9mIGFjY2VwdCBxdWV1ZXMuIEl0IHNlZW1zIHRvIGJlIGFkZHJlc3NpbmcgY29tbW9uIGNvbmN1cnJlbmN5IGlzc3VlcywgbG9ja2luZyBpc3N1ZXMsIGFuZCByZWZlcmVuY2UgY291bnRpbmcgcHJvYmxlbXMuXG5cbk5vdywgbXkgcHJpbWFyeSBjb25jZXJuIGlzIHdoZXRoZXIgdGhpcyBpbnRyb2R1Y2VzIG9yIGV4cG9zZXMgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBMZXQncyBsb29rIGF0IHRoYXQ6XG5cbiogICAqKmBjb3B5X3RvX3VzZXJgIG9yIGBwdXRfdXNlcmA/KiogTm8sIHRoZXJlIGFyZSBubyBjaGFuZ2VzIGhlcmUuXG4qICAgKipOZXRsaW5rIGF0dHJpYnV0ZXMgb3IgaW9jdGwgb3V0cHV0PyoqIE5vLlxuKiAgICoqUmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeT8qKiBOby4gVGhlIHBhdGNoIG9ubHkgdG91Y2hlcyB3b3JrIHN0cnVjdHMgKGluaXRpYWxpemVkIHdpdGggYElOSVRfV09SS2ApLCBhdG9taWMva3JlZnMsIHNvY2tldCBsaXN0cywgYW5kIGxvY2tpbmcgbWVjaGFuaXNtcy5cbiogICAqKkJ1ZmZlciBib3VuZHMgb3IgZGF0YSBsZW5ndGhzPyoqIE5vIGFsdGVyYXRpb25zIGhlcmUuXG5cbkl0J3MgYWxsIGFib3V0IHJlZmVyZW5jZSBjb3VudGluZywgbGlzdCBtYW5pcHVsYXRpb24sIHdvcmtxdWV1ZSBkZWZlcnJhbCwgYW5kIGxvY2tpbmcuIFRoaXMgcGF0Y2ggc3BlY2lmaWNhbGx5IHNlZW1zIGZvY3VzZWQgb24gZml4aW5nIFVBRnMsIHJhY2UgY29uZGl0aW9ucywgYW5kIHBvdGVudGlhbGx5IGRlYWRsb2Nrcy4gS0FTQU4gYW5kIExPQ0tERVAgYXJlIGdvaW5nIHRvIGNhdGNoIHRoZSBraW5kIG9mIGJ1Z3MgdGhhdCB0aGUgcGF0Y2ggYWltcyB0byBmaXguXG5cblRoaXMgcGF0Y2ggKmRvZXNuJ3QqIGludHJvZHVjZSBvciBleHBvc2UgYW55IG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gV2UgZG9uJ3QgbmVlZCB0byBlbmFibGUgS01TQU4gZm9yIHRoaXMuXG5cblNvLCB0aGUgS01TQU5SZWFzb25pbmc6XG5cbiogICBUaGUgcGF0Y2ggcHJpbWFyaWx5IGFkZHJlc3NlcyBzb2NrZXQgbGlmZWN5Y2xlLCByZWZlcmVuY2UgY291bnRpbmcsIGFuZCBsb2NraW5nIGlzc3VlcyB3aXRoaW4gYG5ldC9uZmMvbGxjcF9jb3JlLmNgIGFuZCBgbmV0L25mYy9sbGNwX3NvY2suY2AsIHBhcnRpY3VsYXJseSBhcm91bmQgTExDUCBzb2NrZXQgcmVsZWFzZSBhbmQgZGV2aWNlIHVucmVnaXN0cmF0aW9uLCBhaW1pbmcgdG8gcHJldmVudCByYWNlcywgZGVhZGxvY2tzLCBhbmQgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucy5cbiogICBJdCBtb2RpZmllcyBzb2NrZXQgdW5saW5raW5nLCB1c2VzIGBsb2NrX3NvY2tgLCBkZWZlcnMgbG9jYWwgY2xlYW51cCB1c2luZyBgbGxjcF93cWAsIGFuZCBtYW5hZ2VzIHNvY2tldC9kZXZpY2UgcmVmZXJlbmNlIGNvdW50cy5cbiogICBObyBuZXcgbWVtb3J5IGJ1ZmZlcnMgYXJlIGNvcGllZCB0byB1c2Vyc3BhY2UsIG5vIG5ldyBkYXRhIHN0cnVjdHVyZXMgY29udGFpbmluZyB1bmluaXRpYWxpemVkIGZpZWxkcyBhcmUgcmVhZCwgYW5kIG5vIGJ1ZmZlciBib3VuZHMgYXJlIGFsdGVyZWQuXG4qICAgUG90ZW50aWFsIHJlZ3Jlc3Npb25zIChVQUYsIGRvdWJsZS1mcmVlLCBkZWFkbG9ja3MpIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBMT0NLREVQLlxuKiAgIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3MjksIk91dHB1dFRva2VucyI6MjA0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAzMCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA5OjAzOjM4Ljk4ODM2NjMxMVoiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1OTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIHNvY2tldCBsaWZlY3ljbGUgbWFuYWdlbWVudCwgcmVmZXJlbmNlIGNvdW50aW5nLCBsb2NraW5nLCBhbmQgYXN5bmNocm9ub3VzIGNsZWFudXAgaW4gdGhlIE5GQyBMTENQIHN1YnN5c3RlbSAobmV0L25mYy9sbGNwX2NvcmUuYyBhbmQgbmV0L25mYy9sbGNwX3NvY2suYykuIFNwZWNpZmljYWxseSwgaXQgaW50cm9kdWNlcyBzYWZlIGxpc3QgcG9wcGluZyB3aXRoIHByb3BlciBzb2NrZXQgbG9ja2luZywgY29ycmVjdCByZWZlcmVuY2UgY291bnRpbmcgZm9yIGNoaWxkIHNvY2tldHMgaW4gdGhlIGFjY2VwdCBxdWV1ZSwgYW5kIHdvcmtxdWV1ZS1kZWZlcnJlZCByZWxlYXNlIG9mIHN0cnVjdCBuZmNfbGxjcF9sb2NhbC5cXG5cXG5UaGVzZSBjaGFuZ2VzIGRlYWwgZXhjbHVzaXZlbHkgd2l0aCBjb25jdXJyZW5jeSwgcmVmZXJlbmNlIGNvdW50aW5nLCBhbmQgbGlmZWN5Y2xlIG1hbmFnZW1lbnQgKHJpc2tzIG9mIFVzZS1BZnRlci1GcmVlLCByYWNlIGNvbmRpdGlvbnMsIG9yIGRlYWRsb2NrcyksIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQIHNhbml0aXplcnMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBkYXRhIGNvcGllZCB0byB1c2Vyc3BhY2UsIGRvZXMgbm90IHJlYWQgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcy9idWZmZXJzLCBhbmQgZG9lcyBub3QgYWx0ZXIgbGVuZ3RoIG9yIGJvdW5kcyBjYWxjdWxhdGlvbnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgc29ja2V0IGxpZmVjeWNsZSBtYW5hZ2VtZW50LCByZWZlcmVuY2UgY291bnRpbmcsIGxvY2tpbmcsIGFuZCBhc3luY2hyb25vdXMgY2xlYW51cCBpbiB0aGUgTkZDIExMQ1Agc3Vic3lzdGVtIChuZXQvbmZjL2xsY3BfY29yZS5jIGFuZCBuZXQvbmZjL2xsY3Bfc29jay5jKS4gU3BlY2lmaWNhbGx5LCBpdCBpbnRyb2R1Y2VzIHNhZmUgbGlzdCBwb3BwaW5nIHdpdGggcHJvcGVyIHNvY2tldCBsb2NraW5nLCBjb3JyZWN0IHJlZmVyZW5jZSBjb3VudGluZyBmb3IgY2hpbGQgc29ja2V0cyBpbiB0aGUgYWNjZXB0IHF1ZXVlLCBhbmQgd29ya3F1ZXVlLWRlZmVycmVkIHJlbGVhc2Ugb2Ygc3RydWN0IG5mY19sbGNwX2xvY2FsLlxcblxcblRoZXNlIGNoYW5nZXMgZGVhbCBleGNsdXNpdmVseSB3aXRoIGNvbmN1cnJlbmN5LCByZWZlcmVuY2UgY291bnRpbmcsIGFuZCBsaWZlY3ljbGUgbWFuYWdlbWVudCAocmlza3Mgb2YgVXNlLUFmdGVyLUZyZWUsIHJhY2UgY29uZGl0aW9ucywgb3IgZGVhZGxvY2tzKSwgd2hpY2ggYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAgc2FuaXRpemVycy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IGRhdGEgY29waWVkIHRvIHVzZXJzcGFjZSwgZG9lcyBub3QgcmVhZCBvciBleHBvc2UgdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzL2J1ZmZlcnMsIGFuZCBkb2VzIG5vdCBhbHRlciBsZW5ndGggb3IgYm91bmRzIGNhbGN1bGF0aW9ucy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowmm44p[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-03 08:19:56 +0000 UTC FinishedAt: 2026-09-03 09:03:40 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NFC" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NFC" ], "series_id": "3f8fb361-e2bc-470c-bc0e-4883ece45c26" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "nfc_llcp_accept_unlink", "nfc_llcp_accept_dequeue", "nfc_llcp_local_put", "llcp_sock_accept", "llcp_sock_release", "nfc_llcp_register_device" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA5OjAyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GQyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25mY19sbGNwX2FjY2VwdF91bmxpbmsmIzM0OywKICAgICYjMzQ7bmZjX2xsY3BfYWNjZXB0X2RlcXVldWUmIzM0OywKICAgICYjMzQ7bmZjX2xsY3BfbG9jYWxfcHV0JiMzNDssCiAgICAmIzM0O2xsY3Bfc29ja19hY2NlcHQmIzM0OywKICAgICYjMzQ7bGxjcF9zb2NrX3JlbGVhc2UmIzM0OywKICAgICYjMzQ7bmZjX2xsY3BfcmVnaXN0ZXJfZGV2aWNlJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIHNvY2tldCBsaWZlY3ljbGUgbWFuYWdlbWVudCwgcmVmZXJlbmNlIGNvdW50aW5nLCBsb2NraW5nLCBhbmQgYXN5bmNocm9ub3VzIGNsZWFudXAgaW4gdGhlIE5GQyBMTENQIHN1YnN5c3RlbSAobmV0L25mYy9sbGNwX2NvcmUuYyBhbmQgbmV0L25mYy9sbGNwX3NvY2suYykuIFNwZWNpZmljYWxseSwgaXQgaW50cm9kdWNlcyBzYWZlIGxpc3QgcG9wcGluZyB3aXRoIHByb3BlciBzb2NrZXQgbG9ja2luZywgY29ycmVjdCByZWZlcmVuY2UgY291bnRpbmcgZm9yIGNoaWxkIHNvY2tldHMgaW4gdGhlIGFjY2VwdCBxdWV1ZSwgYW5kIHdvcmtxdWV1ZS1kZWZlcnJlZCByZWxlYXNlIG9mIHN0cnVjdCBuZmNfbGxjcF9sb2NhbC5cblxuVGhlc2UgY2hhbmdlcyBkZWFsIGV4Y2x1c2l2ZWx5IHdpdGggY29uY3VycmVuY3ksIHJlZmVyZW5jZSBjb3VudGluZywgYW5kIGxpZmVjeWNsZSBtYW5hZ2VtZW50IChyaXNrcyBvZiBVc2UtQWZ0ZXItRnJlZSwgcmFjZSBjb25kaXRpb25zLCBvciBkZWFkbG9ja3MpLCB3aGljaCBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUCBzYW5pdGl6ZXJzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgZGF0YSBjb3BpZWQgdG8gdXNlcnNwYWNlLCBkb2VzIG5vdCByZWFkIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMvYnVmZmVycywgYW5kIGRvZXMgbm90IGFsdGVyIGxlbmd0aCBvciBib3VuZHMgY2FsY3VsYXRpb25zLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlc29sdmVzIHJhY2UgY29uZGl0aW9ucywgaW1wcm9wZXIgc29ja2V0IGxvY2tpbmcsIGFuZCByZWZlcmVuY2UgY291bnRpbmcgaXNzdWVzIGluIHRoZSBORkMgTExDUCBzdWJzeXN0ZW0gYWNyb3NzIHNvY2tldCByZWxlYXNlLCBjb25uZWN0aW9uIGFjY2VwdGFuY2UsIGFuZCBsb2NhbCBkZXZpY2UgdGVhcmRvd24uIFRoZXNlIGNvZGUgcGF0aHMgYXJlIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIEFGX05GQyBzb2NrZXQgb3BlcmF0aW9ucyBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwOTowMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDhhNzI3ZWQ3MTIyZDU3NzRmMmQ1MmM4MzJlMTMyZmM3NWE2NDJhY2ZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAzIDA5OjAyOjIzIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9uZmMvbGxjcC5oIGIvbmV0L25mYy9sbGNwLmhcbmluZGV4IGQ4MzQ1ZWQ1N2M5NTQuLjIzYWU3YTAxMTJkMzcgMTAwNjQ0XG4tLS0gYS9uZXQvbmZjL2xsY3AuaFxuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25mYy9sbGNwLmhcbkBAIC05MSw2ICYjNDM7OTEsNyBAQCBzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwge1xuIFx0c3RydWN0IGhsaXN0X2hlYWQgcGVuZGluZ19zZHJlcXM7XG4gXHRzdHJ1Y3QgdGltZXJfbGlzdCBzZHJlcV90aW1lcjtcbiBcdHN0cnVjdCB3b3JrX3N0cnVjdCBzZHJlcV90aW1lb3V0X3dvcms7XG4mIzQzO1x0c3RydWN0IHdvcmtfc3RydWN0IHJlbGVhc2Vfd29yaztcbiBcdHU4IHNkcmVxX25leHRfdGlkO1xuIFxuIFx0Lyogc29ja2V0cyBhcnJheSAqL1xuZGlmZiAtLWdpdCBhL25ldC9uZmMvbGxjcF9jb3JlLmMgYi9uZXQvbmZjL2xsY3BfY29yZS5jXG5pbmRleCBiZDYzNjFlMmVmYTRmLi4yMzU1M2U3NDI2ZWMyIDEwMDY0NFxuLS0tIGEvbmV0L25mYy9sbGNwX2NvcmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25mYy9sbGNwX2NvcmUuY1xuQEAgLTIwLDYgJiM0MzsyMCw4IEBAIHN0YXRpYyBMSVNUX0hFQUQobGxjcF9kZXZpY2VzKTtcbiAvKiBQcm90ZWN0cyBsbGNwX2RldmljZXMgbGlzdCAqL1xuIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0sobGxjcF9kZXZpY2VzX2xvY2spO1xuIFxuJiM0MztzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmxsY3Bfd3E7XG4mIzQzO1xuIHN0YXRpYyB2b2lkIG5mY19sbGNwX3J4X3NrYihzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbiBcbiB2b2lkIG5mY19sbGNwX3NvY2tfbGluayhzdHJ1Y3QgbGxjcF9zb2NrX2xpc3QgKmwsIHN0cnVjdCBzb2NrICpzaylcbkBAIC02MywyMSAmIzQzOzY1LDMzIEBAIHN0YXRpYyB2b2lkIG5mY19sbGNwX3NvY2tldF9wdXJnZShzdHJ1Y3QgbmZjX2xsY3Bfc29jayAqc29jaylcbiBcdH1cbiB9XG4gXG4mIzQzO3N0YXRpYyBzdHJ1Y3Qgc29jayAqbmZjX2xsY3Bfc29ja19saXN0X3BvcChzdHJ1Y3QgbGxjcF9zb2NrX2xpc3QgKmwpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgc29jayAqc2s7XG4mIzQzO1xuJiM0MztcdHdyaXRlX2xvY2soXHUwMDI2bC1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRzayA9IHNrX2hlYWQoXHUwMDI2bC1cdTAwM2VoZWFkKTtcbiYjNDM7XHRpZiAoc2spIHtcbiYjNDM7XHRcdHNvY2tfaG9sZChzayk7XG4mIzQzO1x0XHRza19kZWxfbm9kZV9pbml0KHNrKTtcbiYjNDM7XHR9XG4mIzQzO1x0d3JpdGVfdW5sb2NrKFx1MDAyNmwtXHUwMDNlbG9jayk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBzaztcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCBuZmNfbGxjcF9zb2NrZXRfcmVsZWFzZShzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsLCBib29sIGRldmljZSxcbiBcdFx0XHRcdCAgICBpbnQgZXJyKVxuIHtcbiBcdHN0cnVjdCBzb2NrICpzaztcbi1cdHN0cnVjdCBobGlzdF9ub2RlICp0bXA7XG4gXHRzdHJ1Y3QgbmZjX2xsY3Bfc29jayAqbGxjcF9zb2NrO1xuIFxuIFx0c2tiX3F1ZXVlX3B1cmdlKFx1MDAyNmxvY2FsLVx1MDAzZXR4X3F1ZXVlKTtcbiBcbi1cdHdyaXRlX2xvY2soXHUwMDI2bG9jYWwtXHUwMDNlc29ja2V0cy5sb2NrKTtcbi1cbi1cdHNrX2Zvcl9lYWNoX3NhZmUoc2ssIHRtcCwgXHUwMDI2bG9jYWwtXHUwMDNlc29ja2V0cy5oZWFkKSB7XG4mIzQzO1x0d2hpbGUgKChzayA9IG5mY19sbGNwX3NvY2tfbGlzdF9wb3AoXHUwMDI2bG9jYWwtXHUwMDNlc29ja2V0cykpKSB7XG4gXHRcdGxsY3Bfc29jayA9IG5mY19sbGNwX3NvY2soc2spO1xuIFxuLVx0XHRiaF9sb2NrX3NvY2soc2spO1xuJiM0MztcdFx0bG9ja19zb2NrKHNrKTtcbiBcbiBcdFx0bmZjX2xsY3Bfc29ja2V0X3B1cmdlKGxsY3Bfc29jayk7XG4gXG5AQCAtOTEsMTcgJiM0MzsxMDUsMjcgQEAgc3RhdGljIHZvaWQgbmZjX2xsY3Bfc29ja2V0X3JlbGVhc2Uoc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCwgYm9vbCBkZXZpY2UsXG4gXHRcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGxzaywgbixcbiBcdFx0XHRcdFx0XHQgXHUwMDI2bGxjcF9zb2NrLVx1MDAzZWFjY2VwdF9xdWV1ZSxcbiBcdFx0XHRcdFx0XHQgYWNjZXB0X3F1ZXVlKSB7XG4tXHRcdFx0XHRhY2NlcHRfc2sgPSBcdTAwMjZsc2stXHUwMDNlc2s7XG4tXHRcdFx0XHRiaF9sb2NrX3NvY2soYWNjZXB0X3NrKTtcbi1cbi1cdFx0XHRcdG5mY19sbGNwX2FjY2VwdF91bmxpbmsoYWNjZXB0X3NrKTtcbiYjNDM7XHRcdFx0XHRib29sIHB1dF9jcmVhdGlvbiA9IGZhbHNlO1xuIFxuLVx0XHRcdFx0aWYgKGVycilcbi1cdFx0XHRcdFx0YWNjZXB0X3NrLVx1MDAzZXNrX2VyciA9IGVycjtcbi1cdFx0XHRcdGFjY2VwdF9zay1cdTAwM2Vza19zdGF0ZSA9IExMQ1BfQ0xPU0VEO1xuLVx0XHRcdFx0YWNjZXB0X3NrLVx1MDAzZXNrX3N0YXRlX2NoYW5nZShzayk7XG4mIzQzO1x0XHRcdFx0YWNjZXB0X3NrID0gXHUwMDI2bHNrLVx1MDAzZXNrO1xuJiM0MztcdFx0XHRcdGxvY2tfc29ja19uZXN0ZWQoYWNjZXB0X3NrLFxuJiM0MztcdFx0XHRcdFx0XHQgU0lOR0xFX0RFUFRIX05FU1RJTkcpO1xuJiM0MztcbiYjNDM7XHRcdFx0XHRpZiAobmZjX2xsY3Bfc29jayhhY2NlcHRfc2spLVx1MDAzZXBhcmVudCA9PSBzaykge1xuJiM0MztcdFx0XHRcdFx0bmZjX2xsY3BfYWNjZXB0X3VubGluayhhY2NlcHRfc2spO1xuJiM0MztcdFx0XHRcdFx0bmZjX2xsY3Bfc29ja191bmxpbmsoXHUwMDI2bG9jYWwtXHUwMDNlc29ja2V0cywgYWNjZXB0X3NrKTtcbiYjNDM7XG4mIzQzO1x0XHRcdFx0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRcdFx0XHRhY2NlcHRfc2stXHUwMDNlc2tfZXJyID0gZXJyO1xuJiM0MztcdFx0XHRcdFx0YWNjZXB0X3NrLVx1MDAzZXNrX3N0YXRlID0gTExDUF9DTE9TRUQ7XG4mIzQzO1x0XHRcdFx0XHRhY2NlcHRfc2stXHUwMDNlc2tfc3RhdGVfY2hhbmdlKGFjY2VwdF9zayk7XG4mIzQzO1x0XHRcdFx0XHRzb2NrX29ycGhhbihhY2NlcHRfc2spO1xuJiM0MztcdFx0XHRcdFx0cHV0X2NyZWF0aW9uID0gdHJ1ZTtcbiYjNDM7XHRcdFx0XHR9XG4gXG4tXHRcdFx0XHRiaF91bmxvY2tfc29jayhhY2NlcHRfc2spO1xuJiM0MztcdFx0XHRcdHJlbGVhc2Vfc29jayhhY2NlcHRfc2spO1xuJiM0MztcdFx0XHRcdGlmIChwdXRfY3JlYXRpb24pXG4mIzQzO1x0XHRcdFx0XHRzb2NrX3B1dChhY2NlcHRfc2spOyAvKiBjcmVhdGlvbiByZWYgKi9cbiBcdFx0XHR9XG4gXHRcdH1cbiBcbkBAIC0xMTAsMjMgJiM0MzsxMzQsMTggQEAgc3RhdGljIHZvaWQgbmZjX2xsY3Bfc29ja2V0X3JlbGVhc2Uoc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCwgYm9vbCBkZXZpY2UsXG4gXHRcdHNrLVx1MDAzZXNrX3N0YXRlID0gTExDUF9DTE9TRUQ7XG4gXHRcdHNrLVx1MDAzZXNrX3N0YXRlX2NoYW5nZShzayk7XG4gXG4tXHRcdGJoX3VubG9ja19zb2NrKHNrKTtcbi1cbi1cdFx0c2tfZGVsX25vZGVfaW5pdChzayk7XG4mIzQzO1x0XHRyZWxlYXNlX3NvY2soc2spO1xuJiM0MztcdFx0c29ja19wdXQoc2spO1xuIFx0fVxuIFxuLVx0d3JpdGVfdW5sb2NrKFx1MDAyNmxvY2FsLVx1MDAzZXNvY2tldHMubG9jayk7XG4tXG4gXHQvKiBJZiB3ZSBzdGlsbCBoYXZlIGEgZGV2aWNlLCB3ZSBrZWVwIHRoZSBSQVcgc29ja2V0cyBhbGl2ZSAqL1xuIFx0aWYgKGRldmljZSA9PSB0cnVlKVxuIFx0XHRyZXR1cm47XG4gXG4tXHR3cml0ZV9sb2NrKFx1MDAyNmxvY2FsLVx1MDAzZXJhd19zb2NrZXRzLmxvY2spO1xuLVxuLVx0c2tfZm9yX2VhY2hfc2FmZShzaywgdG1wLCBcdTAwMjZsb2NhbC1cdTAwM2VyYXdfc29ja2V0cy5oZWFkKSB7XG4mIzQzO1x0d2hpbGUgKChzayA9IG5mY19sbGNwX3NvY2tfbGlzdF9wb3AoXHUwMDI2bG9jYWwtXHUwMDNlcmF3X3NvY2tldHMpKSkge1xuIFx0XHRsbGNwX3NvY2sgPSBuZmNfbGxjcF9zb2NrKHNrKTtcbiBcbi1cdFx0YmhfbG9ja19zb2NrKHNrKTtcbiYjNDM7XHRcdGxvY2tfc29jayhzayk7XG4gXG4gXHRcdG5mY19sbGNwX3NvY2tldF9wdXJnZShsbGNwX3NvY2spO1xuIFxuQEAgLTEzNSwyNiAmIzQzOzE1NCwyMCBAQCBzdGF0aWMgdm9pZCBuZmNfbGxjcF9zb2NrZXRfcmVsZWFzZShzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsLCBib29sIGRldmljZSxcbiBcdFx0c2stXHUwMDNlc2tfc3RhdGUgPSBMTENQX0NMT1NFRDtcbiBcdFx0c2stXHUwMDNlc2tfc3RhdGVfY2hhbmdlKHNrKTtcbiBcbi1cdFx0YmhfdW5sb2NrX3NvY2soc2spO1xuLVxuLVx0XHRza19kZWxfbm9kZV9pbml0KHNrKTtcbiYjNDM7XHRcdHJlbGVhc2Vfc29jayhzayk7XG4mIzQzO1x0XHRzb2NrX3B1dChzayk7XG4gXHR9XG4tXG4tXHR3cml0ZV91bmxvY2soXHUwMDI2bG9jYWwtXHUwMDNlcmF3X3NvY2tldHMubG9jayk7XG4gfVxuIFxuIHN0YXRpYyBzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKm5mY19sbGNwX2xvY2FsX2dldChzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsKVxuIHtcbi1cdC8qIFNpbmNlIHVzaW5nIG5mY19sbGNwX2xvY2FsIG1heSByZXN1bHQgaW4gdXNhZ2Ugb2YgbmZjX2Rldiwgd2hlbmV2ZXJcbi1cdCAqIHdlIGhvbGQgYSByZWZlcmVuY2UgdG8gbG9jYWwsIHdlIGFsc28gbmVlZCB0byBob2xkIGEgcmVmZXJlbmNlIHRvXG4tXHQgKiB0aGUgZGV2aWNlIHRvIGF2b2lkIFVBRi5cbi1cdCAqL1xuLVx0aWYgKCFuZmNfZ2V0X2RldmljZShsb2NhbC1cdTAwM2VkZXYtXHUwMDNlaWR4KSlcbiYjNDM7XHRpZiAoIWxvY2FsKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcbi1cdGtyZWZfZ2V0KFx1MDAyNmxvY2FsLVx1MDAzZXJlZik7XG4mIzQzO1x0aWYgKGtyZWZfZ2V0X3VubGVzc196ZXJvKFx1MDAyNmxvY2FsLVx1MDAzZXJlZikpXG4mIzQzO1x0XHRyZXR1cm4gbG9jYWw7XG4gXG4tXHRyZXR1cm4gbG9jYWw7XG4mIzQzO1x0cmV0dXJuIE5VTEw7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGxvY2FsX2NsZWFudXAoc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbClcbkBAIC0xNzIsMzAgJiM0MzsxODUsMzQgQEAgc3RhdGljIHZvaWQgbG9jYWxfY2xlYW51cChzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsKVxuIFx0bmZjX2xsY3BfZnJlZV9zZHBfdGx2X2xpc3QoXHUwMDI2bG9jYWwtXHUwMDNlcGVuZGluZ19zZHJlcXMpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBsb2NhbF9yZWxlYXNlKHN0cnVjdCBrcmVmICpyZWYpXG4mIzQzO3N0YXRpYyB2b2lkIGxvY2FsX3JlbGVhc2Vfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4ge1xuIFx0c3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbDtcbiYjNDM7XHRzdHJ1Y3QgbmZjX2RldiAqZGV2O1xuIFxuLVx0bG9jYWwgPSBjb250YWluZXJfb2YocmVmLCBzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwsIHJlZik7XG4mIzQzO1x0bG9jYWwgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IG5mY19sbGNwX2xvY2FsLCByZWxlYXNlX3dvcmspO1xuJiM0MztcdGRldiA9IGxvY2FsLVx1MDAzZWRldjtcbiBcbiBcdGxvY2FsX2NsZWFudXAobG9jYWwpO1xuIFx0a2ZyZWUobG9jYWwpO1xuJiM0MztcdG5mY19wdXRfZGV2aWNlKGRldik7XG4gfVxuIFxuLWludCBuZmNfbGxjcF9sb2NhbF9wdXQoc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbClcbiYjNDM7c3RhdGljIHZvaWQgbG9jYWxfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqcmVmKVxuIHtcbi1cdHN0cnVjdCBuZmNfZGV2ICpkZXY7XG4tXHRpbnQgcmV0O1xuJiM0MztcdHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWw7XG4gXG4tXHRpZiAobG9jYWwgPT0gTlVMTClcbi1cdFx0cmV0dXJuIDA7XG4mIzQzO1x0bG9jYWwgPSBjb250YWluZXJfb2YocmVmLCBzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwsIHJlZik7XG4gXG4tXHRkZXYgPSBsb2NhbC1cdTAwM2VkZXY7XG4mIzQzO1x0cXVldWVfd29yayhsbGNwX3dxLCBcdTAwMjZsb2NhbC1cdTAwM2VyZWxlYXNlX3dvcmspO1xuJiM0Mzt9XG4gXG4tXHRyZXQgPSBrcmVmX3B1dChcdTAwMjZsb2NhbC1cdTAwM2VyZWYsIGxvY2FsX3JlbGVhc2UpO1xuLVx0bmZjX3B1dF9kZXZpY2UoZGV2KTtcbiYjNDM7aW50IG5mY19sbGNwX2xvY2FsX3B1dChzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFsb2NhbClcbiYjNDM7XHRcdHJldHVybiAwO1xuIFxuLVx0cmV0dXJuIHJldDtcbiYjNDM7XHRyZXR1cm4ga3JlZl9wdXQoXHUwMDI2bG9jYWwtXHUwMDNlcmVmLCBsb2NhbF9yZWxlYXNlKTtcbiB9XG4gXG4gc3RhdGljIHN0cnVjdCBuZmNfbGxjcF9zb2NrICpuZmNfbGxjcF9zb2NrX2dldChzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsLFxuQEAgLTE3MDUsNiAmIzQzOzE3MjIsNyBAQCBpbnQgbmZjX2xsY3BfcmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCBuZmNfZGV2ICpuZGV2KVxuIFx0SU5JVF9XT1JLKFx1MDAyNmxvY2FsLVx1MDAzZXJ4X3dvcmssIG5mY19sbGNwX3J4X3dvcmspO1xuIFxuIFx0SU5JVF9XT1JLKFx1MDAyNmxvY2FsLVx1MDAzZXRpbWVvdXRfd29yaywgbmZjX2xsY3BfdGltZW91dF93b3JrKTtcbiYjNDM7XHRJTklUX1dPUksoXHUwMDI2bG9jYWwtXHUwMDNlcmVsZWFzZV93b3JrLCBsb2NhbF9yZWxlYXNlX3dvcmspO1xuIFxuIFx0cndsb2NrX2luaXQoXHUwMDI2bG9jYWwtXHUwMDNlc29ja2V0cy5sb2NrKTtcbiBcdHJ3bG9ja19pbml0KFx1MDAyNmxvY2FsLVx1MDAzZWNvbm5lY3Rpbmdfc29ja2V0cy5sb2NrKTtcbkBAIC0xNzQ4LDEwICYjNDM7MTc2NiwyMyBAQCB2b2lkIG5mY19sbGNwX3VucmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCBuZmNfZGV2ICpkZXYpXG4gXG4gaW50IF9faW5pdCBuZmNfbGxjcF9pbml0KHZvaWQpXG4ge1xuLVx0cmV0dXJuIG5mY19sbGNwX3NvY2tfaW5pdCgpO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGxsY3Bfd3EgPSBhbGxvY193b3JrcXVldWUoXCYjMzQ7bmZjX2xsY3Bfd3FcJiMzNDssIFdRX1VOQk9VTkQsIDApO1xuJiM0MztcdGlmICghbGxjcF93cSlcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBuZmNfbGxjcF9zb2NrX2luaXQoKTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRkZXN0cm95X3dvcmtxdWV1ZShsbGNwX3dxKTtcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiB9XG4gXG4gdm9pZCBuZmNfbGxjcF9leGl0KHZvaWQpXG4ge1xuIFx0bmZjX2xsY3Bfc29ja19leGl0KCk7XG4mIzQzO1x0ZGVzdHJveV93b3JrcXVldWUobGxjcF93cSk7XG4gfVxuZGlmZiAtLWdpdCBhL25ldC9uZmMvbGxjcF9zb2NrLmMgYi9uZXQvbmZjL2xsY3Bfc29jay5jXG5pbmRleCA1NTU4ZDhhNGQ0OGIzLi5jZTY4NzVlYjU4ZmJjIDEwMDY0NFxuLS0tIGEvbmV0L25mYy9sbGNwX3NvY2suY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25mYy9sbGNwX3NvY2suY1xuQEAgLTM5MiwxMSAmIzQzOzM5MiwxMiBAQCB2b2lkIG5mY19sbGNwX2FjY2VwdF91bmxpbmsoc3RydWN0IHNvY2sgKnNrKVxuIFxuIFx0cHJfZGVidWcoXCYjMzQ7c3RhdGUgJWRcXG5cJiMzNDssIHNrLVx1MDAzZXNrX3N0YXRlKTtcbiBcbi1cdGxpc3RfZGVsX2luaXQoXHUwMDI2bGxjcF9zb2NrLVx1MDAzZWFjY2VwdF9xdWV1ZSk7XG4tXHRza19hY2NlcHRxX3JlbW92ZWQobGxjcF9zb2NrLVx1MDAzZXBhcmVudCk7XG4tXHRsbGNwX3NvY2stXHUwMDNlcGFyZW50ID0gTlVMTDtcbi1cbi1cdHNvY2tfcHV0KHNrKTtcbiYjNDM7XHRpZiAobGxjcF9zb2NrLVx1MDAzZXBhcmVudCkge1xuJiM0MztcdFx0bGlzdF9kZWxfaW5pdChcdTAwMjZsbGNwX3NvY2stXHUwMDNlYWNjZXB0X3F1ZXVlKTtcbiYjNDM7XHRcdHNrX2FjY2VwdHFfcmVtb3ZlZChsbGNwX3NvY2stXHUwMDNlcGFyZW50KTtcbiYjNDM7XHRcdGxsY3Bfc29jay1cdTAwM2VwYXJlbnQgPSBOVUxMO1xuJiM0MztcdFx0c29ja19wdXQoc2spO1xuJiM0MztcdH1cbiB9XG4gXG4gdm9pZCBuZmNfbGxjcF9hY2NlcHRfZW5xdWV1ZShzdHJ1Y3Qgc29jayAqcGFyZW50LCBzdHJ1Y3Qgc29jayAqc2spXG5AQCAtNDIzLDEyICYjNDM7NDI0LDIwIEBAIHN0cnVjdCBzb2NrICpuZmNfbGxjcF9hY2NlcHRfZGVxdWV1ZShzdHJ1Y3Qgc29jayAqcGFyZW50LFxuIFxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGxzaywgbiwgXHUwMDI2bGxjcF9wYXJlbnQtXHUwMDNlYWNjZXB0X3F1ZXVlLFxuIFx0XHRcdFx0IGFjY2VwdF9xdWV1ZSkge1xuJiM0MztcdFx0c3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbDtcbiYjNDM7XG4gXHRcdHNrID0gXHUwMDI2bHNrLVx1MDAzZXNrO1xuLVx0XHRsb2NrX3NvY2soc2spO1xuJiM0MztcdFx0bG9ja19zb2NrX25lc3RlZChzaywgU0lOR0xFX0RFUFRIX05FU1RJTkcpO1xuIFxuIFx0XHRpZiAoc2stXHUwMDNlc2tfc3RhdGUgPT0gTExDUF9DTE9TRUQpIHtcbi1cdFx0XHRyZWxlYXNlX3NvY2soc2spO1xuJiM0MztcdFx0XHRsb2NhbCA9IG5mY19sbGNwX3NvY2soc2spLVx1MDAzZWxvY2FsO1xuJiM0MztcbiBcdFx0XHRuZmNfbGxjcF9hY2NlcHRfdW5saW5rKHNrKTtcbiYjNDM7XHRcdFx0aWYgKGxvY2FsKVxuJiM0MztcdFx0XHRcdG5mY19sbGNwX3NvY2tfdW5saW5rKFx1MDAyNmxvY2FsLVx1MDAzZXNvY2tldHMsIHNrKTtcbiYjNDM7XHRcdFx0c29ja19vcnBoYW4oc2spO1xuJiM0MztcdFx0XHRyZWxlYXNlX3NvY2soc2spO1xuJiM0MztcdFx0XHRzb2NrX3B1dChzayk7XG4gXHRcdFx0Y29udGludWU7XG4gXHRcdH1cbiBcbkBAIC00NjQsNyAmIzQzOzQ3Myw3IEBAIHN0YXRpYyBpbnQgbGxjcF9zb2NrX2FjY2VwdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2V0ICpuZXdzb2NrLFxuIFxuIFx0cHJfZGVidWcoXCYjMzQ7cGFyZW50ICVwXFxuXCYjMzQ7LCBzayk7XG4gXG4tXHRsb2NrX3NvY2tfbmVzdGVkKHNrLCBTSU5HTEVfREVQVEhfTkVTVElORyk7XG4mIzQzO1x0bG9ja19zb2NrKHNrKTtcbiBcbiBcdGlmIChzay1cdTAwM2Vza19zdGF0ZSAhPSBMTENQX0xJU1RFTikge1xuIFx0XHRyZXQgPSAtRUJBREZEO1xuQEAgLTQ5MCw3ICYjNDM7NDk5LDEyIEBAIHN0YXRpYyBpbnQgbGxjcF9zb2NrX2FjY2VwdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2V0ICpuZXdzb2NrLFxuIFxuIFx0XHRyZWxlYXNlX3NvY2soc2spO1xuIFx0XHR0aW1lbyA9IHNjaGVkdWxlX3RpbWVvdXQodGltZW8pO1xuLVx0XHRsb2NrX3NvY2tfbmVzdGVkKHNrLCBTSU5HTEVfREVQVEhfTkVTVElORyk7XG4mIzQzO1x0XHRsb2NrX3NvY2soc2spO1xuJiM0MztcbiYjNDM7XHRcdGlmIChzay1cdTAwM2Vza19zdGF0ZSAhPSBMTENQX0xJU1RFTikge1xuJiM0MztcdFx0XHRyZXQgPSAtRUJBREZEO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdH1cbiBcdH1cbiBcdF9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTtcbiBcdHJlbW92ZV93YWl0X3F1ZXVlKHNrX3NsZWVwKHNrKSwgXHUwMDI2d2FpdCk7XG5AQCAtNjI5LDEzICYjNDM7NjQzLDI0IEBAIHN0YXRpYyBpbnQgbGxjcF9zb2NrX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jaylcbiBcbiBcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGxzaywgbiwgXHUwMDI2bGxjcF9zb2NrLVx1MDAzZWFjY2VwdF9xdWV1ZSxcbiBcdFx0XHRcdFx0IGFjY2VwdF9xdWV1ZSkge1xuJiM0MztcdFx0XHRib29sIHB1dF9jcmVhdGlvbiA9IGZhbHNlO1xuJiM0MztcbiBcdFx0XHRhY2NlcHRfc2sgPSBcdTAwMjZsc2stXHUwMDNlc2s7XG4tXHRcdFx0bG9ja19zb2NrKGFjY2VwdF9zayk7XG4mIzQzO1x0XHRcdGxvY2tfc29ja19uZXN0ZWQoYWNjZXB0X3NrLCBTSU5HTEVfREVQVEhfTkVTVElORyk7XG4gXG4tXHRcdFx0bmZjX2xsY3Bfc2VuZF9kaXNjb25uZWN0KGxzayk7XG4tXHRcdFx0bmZjX2xsY3BfYWNjZXB0X3VubGluayhhY2NlcHRfc2spO1xuJiM0MztcdFx0XHRpZiAobmZjX2xsY3Bfc29jayhhY2NlcHRfc2spLVx1MDAzZXBhcmVudCA9PSBzaykge1xuJiM0MztcdFx0XHRcdG5mY19sbGNwX3NlbmRfZGlzY29ubmVjdChsc2spO1xuJiM0MztcdFx0XHRcdG5mY19sbGNwX2FjY2VwdF91bmxpbmsoYWNjZXB0X3NrKTtcbiYjNDM7XHRcdFx0XHRuZmNfbGxjcF9zb2NrX3VubGluayhcdTAwMjZsb2NhbC1cdTAwM2Vzb2NrZXRzLCBhY2NlcHRfc2spO1xuJiM0MztcbiYjNDM7XHRcdFx0XHRhY2NlcHRfc2stXHUwMDNlc2tfc3RhdGUgPSBMTENQX0NMT1NFRDtcbiYjNDM7XHRcdFx0XHRzb2NrX29ycGhhbihhY2NlcHRfc2spO1xuJiM0MztcdFx0XHRcdHB1dF9jcmVhdGlvbiA9IHRydWU7XG4mIzQzO1x0XHRcdH1cbiBcbiBcdFx0XHRyZWxlYXNlX3NvY2soYWNjZXB0X3NrKTtcbiYjNDM7XHRcdFx0aWYgKHB1dF9jcmVhdGlvbilcbiYjNDM7XHRcdFx0XHRzb2NrX3B1dChhY2NlcHRfc2spOyAvKiBjcmVhdGlvbiByZWYgKi9cbiBcdFx0fVxuIFx0fVxuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA5OjAyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GQyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25mY19sbGNwX2FjY2VwdF91bmxpbmsmIzM0OywKICAgICYjMzQ7bmZjX2xsY3BfYWNjZXB0X2RlcXVldWUmIzM0OywKICAgICYjMzQ7bmZjX2xsY3BfbG9jYWxfcHV0JiMzNDssCiAgICAmIzM0O2xsY3Bfc29ja19hY2NlcHQmIzM0OywKICAgICYjMzQ7bGxjcF9zb2NrX3JlbGVhc2UmIzM0OywKICAgICYjMzQ7bmZjX2xsY3BfcmVnaXN0ZXJfZGV2aWNlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlc29sdmVzIHJhY2UgY29uZGl0aW9ucywgaW1wcm9wZXIgc29ja2V0IGxvY2tpbmcsIGFuZCByZWZlcmVuY2UgY291bnRpbmcgaXNzdWVzIGluIHRoZSBORkMgTExDUCBzdWJzeXN0ZW0gYWNyb3NzIHNvY2tldCByZWxlYXNlLCBjb25uZWN0aW9uIGFjY2VwdGFuY2UsIGFuZCBsb2NhbCBkZXZpY2UgdGVhcmRvd24uIFRoZXNlIGNvZGUgcGF0aHMgYXJlIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIEFGX05GQyBzb2NrZXQgb3BlcmF0aW9ucyBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDhhNzI3ZWQ3MTIyZDU3NzRmMmQ1MmM4MzJlMTMyZmM3NWE2NDJhY2YKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IFNlcCAzIDA5OjAyOjIzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L25mYy9sbGNwLmggYi9uZXQvbmZjL2xsY3AuaAppbmRleCBkODM0NWVkNTdjOTU0Li4yM2FlN2EwMTEyZDM3IDEwMDY0NAotLS0gYS9uZXQvbmZjL2xsY3AuaAomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmZjL2xsY3AuaApAQCAtOTEsNiAmIzQzOzkxLDcgQEAgc3RydWN0IG5mY19sbGNwX2xvY2FsIHsKIAlzdHJ1Y3QgaGxpc3RfaGVhZCBwZW5kaW5nX3NkcmVxczsKIAlzdHJ1Y3QgdGltZXJfbGlzdCBzZHJlcV90aW1lcjsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgc2RyZXFfdGltZW91dF93b3JrOwomIzQzOwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgcmVsZWFzZV93b3JrOwogCXU4IHNkcmVxX25leHRfdGlkOwogCiAJLyogc29ja2V0cyBhcnJheSAqLwpkaWZmIC0tZ2l0IGEvbmV0L25mYy9sbGNwX2NvcmUuYyBiL25ldC9uZmMvbGxjcF9jb3JlLmMKaW5kZXggYmQ2MzYxZTJlZmE0Zi4uMjM1NTNlNzQyNmVjMiAxMDA2NDQKLS0tIGEvbmV0L25mYy9sbGNwX2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmZjL2xsY3BfY29yZS5jCkBAIC0yMCw2ICYjNDM7MjAsOCBAQCBzdGF0aWMgTElTVF9IRUFEKGxsY3BfZGV2aWNlcyk7CiAvKiBQcm90ZWN0cyBsbGNwX2RldmljZXMgbGlzdCAqLwogc3RhdGljIERFRklORV9TUElOTE9DSyhsbGNwX2RldmljZXNfbG9jayk7CiAKJiM0MztzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmxsY3Bfd3E7CiYjNDM7CiBzdGF0aWMgdm9pZCBuZmNfbGxjcF9yeF9za2Ioc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiAKIHZvaWQgbmZjX2xsY3Bfc29ja19saW5rKHN0cnVjdCBsbGNwX3NvY2tfbGlzdCAqbCwgc3RydWN0IHNvY2sgKnNrKQpAQCAtNjMsMjEgJiM0Mzs2NSwzMyBAQCBzdGF0aWMgdm9pZCBuZmNfbGxjcF9zb2NrZXRfcHVyZ2Uoc3RydWN0IG5mY19sbGNwX3NvY2sgKnNvY2spCiAJfQogfQogCiYjNDM7c3RhdGljIHN0cnVjdCBzb2NrICpuZmNfbGxjcF9zb2NrX2xpc3RfcG9wKHN0cnVjdCBsbGNwX3NvY2tfbGlzdCAqbCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBzb2NrICpzazsKJiM0MzsKJiM0MzsJd3JpdGVfbG9jaygmYW1wO2wtJmd0O2xvY2spOwomIzQzOwlzayA9IHNrX2hlYWQoJmFtcDtsLSZndDtoZWFkKTsKJiM0MzsJaWYgKHNrKSB7CiYjNDM7CQlzb2NrX2hvbGQoc2spOwomIzQzOwkJc2tfZGVsX25vZGVfaW5pdChzayk7CiYjNDM7CX0KJiM0MzsJd3JpdGVfdW5sb2NrKCZhbXA7bC0mZ3Q7bG9jayk7CiYjNDM7CiYjNDM7CXJldHVybiBzazsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCBuZmNfbGxjcF9zb2NrZXRfcmVsZWFzZShzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsLCBib29sIGRldmljZSwKIAkJCQkgICAgaW50IGVycikKIHsKIAlzdHJ1Y3Qgc29jayAqc2s7Ci0Jc3RydWN0IGhsaXN0X25vZGUgKnRtcDsKIAlzdHJ1Y3QgbmZjX2xsY3Bfc29jayAqbGxjcF9zb2NrOwogCiAJc2tiX3F1ZXVlX3B1cmdlKCZhbXA7bG9jYWwtJmd0O3R4X3F1ZXVlKTsKIAotCXdyaXRlX2xvY2soJmFtcDtsb2NhbC0mZ3Q7c29ja2V0cy5sb2NrKTsKLQotCXNrX2Zvcl9lYWNoX3NhZmUoc2ssIHRtcCwgJmFtcDtsb2NhbC0mZ3Q7c29ja2V0cy5oZWFkKSB7CiYjNDM7CXdoaWxlICgoc2sgPSBuZmNfbGxjcF9zb2NrX2xpc3RfcG9wKCZhbXA7bG9jYWwtJmd0O3NvY2tldHMpKSkgewogCQlsbGNwX3NvY2sgPSBuZmNfbGxjcF9zb2NrKHNrKTsKIAotCQliaF9sb2NrX3NvY2soc2spOwomIzQzOwkJbG9ja19zb2NrKHNrKTsKIAogCQluZmNfbGxjcF9zb2NrZXRfcHVyZ2UobGxjcF9zb2NrKTsKIApAQCAtOTEsMTcgJiM0MzsxMDUsMjcgQEAgc3RhdGljIHZvaWQgbmZjX2xsY3Bfc29ja2V0X3JlbGVhc2Uoc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCwgYm9vbCBkZXZpY2UsCiAJCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobHNrLCBuLAogCQkJCQkJICZhbXA7bGxjcF9zb2NrLSZndDthY2NlcHRfcXVldWUsCiAJCQkJCQkgYWNjZXB0X3F1ZXVlKSB7Ci0JCQkJYWNjZXB0X3NrID0gJmFtcDtsc2stJmd0O3NrOwotCQkJCWJoX2xvY2tfc29jayhhY2NlcHRfc2spOwotCi0JCQkJbmZjX2xsY3BfYWNjZXB0X3VubGluayhhY2NlcHRfc2spOwomIzQzOwkJCQlib29sIHB1dF9jcmVhdGlvbiA9IGZhbHNlOwogCi0JCQkJaWYgKGVycikKLQkJCQkJYWNjZXB0X3NrLSZndDtza19lcnIgPSBlcnI7Ci0JCQkJYWNjZXB0X3NrLSZndDtza19zdGF0ZSA9IExMQ1BfQ0xPU0VEOwotCQkJCWFjY2VwdF9zay0mZ3Q7c2tfc3RhdGVfY2hhbmdlKHNrKTsKJiM0MzsJCQkJYWNjZXB0X3NrID0gJmFtcDtsc2stJmd0O3NrOwomIzQzOwkJCQlsb2NrX3NvY2tfbmVzdGVkKGFjY2VwdF9zaywKJiM0MzsJCQkJCQkgU0lOR0xFX0RFUFRIX05FU1RJTkcpOwomIzQzOwomIzQzOwkJCQlpZiAobmZjX2xsY3Bfc29jayhhY2NlcHRfc2spLSZndDtwYXJlbnQgPT0gc2spIHsKJiM0MzsJCQkJCW5mY19sbGNwX2FjY2VwdF91bmxpbmsoYWNjZXB0X3NrKTsKJiM0MzsJCQkJCW5mY19sbGNwX3NvY2tfdW5saW5rKCZhbXA7bG9jYWwtJmd0O3NvY2tldHMsIGFjY2VwdF9zayk7CiYjNDM7CiYjNDM7CQkJCQlpZiAoZXJyKQomIzQzOwkJCQkJCWFjY2VwdF9zay0mZ3Q7c2tfZXJyID0gZXJyOwomIzQzOwkJCQkJYWNjZXB0X3NrLSZndDtza19zdGF0ZSA9IExMQ1BfQ0xPU0VEOwomIzQzOwkJCQkJYWNjZXB0X3NrLSZndDtza19zdGF0ZV9jaGFuZ2UoYWNjZXB0X3NrKTsKJiM0MzsJCQkJCXNvY2tfb3JwaGFuKGFjY2VwdF9zayk7CiYjNDM7CQkJCQlwdXRfY3JlYXRpb24gPSB0cnVlOwomIzQzOwkJCQl9CiAKLQkJCQliaF91bmxvY2tfc29jayhhY2NlcHRfc2spOwomIzQzOwkJCQlyZWxlYXNlX3NvY2soYWNjZXB0X3NrKTsKJiM0MzsJCQkJaWYgKHB1dF9jcmVhdGlvbikKJiM0MzsJCQkJCXNvY2tfcHV0KGFjY2VwdF9zayk7IC8qIGNyZWF0aW9uIHJlZiAqLwogCQkJfQogCQl9CiAKQEAgLTExMCwyMyAmIzQzOzEzNCwxOCBAQCBzdGF0aWMgdm9pZCBuZmNfbGxjcF9zb2NrZXRfcmVsZWFzZShzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsLCBib29sIGRldmljZSwKIAkJc2stJmd0O3NrX3N0YXRlID0gTExDUF9DTE9TRUQ7CiAJCXNrLSZndDtza19zdGF0ZV9jaGFuZ2Uoc2spOwogCi0JCWJoX3VubG9ja19zb2NrKHNrKTsKLQotCQlza19kZWxfbm9kZV9pbml0KHNrKTsKJiM0MzsJCXJlbGVhc2Vfc29jayhzayk7CiYjNDM7CQlzb2NrX3B1dChzayk7CiAJfQogCi0Jd3JpdGVfdW5sb2NrKCZhbXA7bG9jYWwtJmd0O3NvY2tldHMubG9jayk7Ci0KIAkvKiBJZiB3ZSBzdGlsbCBoYXZlIGEgZGV2aWNlLCB3ZSBrZWVwIHRoZSBSQVcgc29ja2V0cyBhbGl2ZSAqLwogCWlmIChkZXZpY2UgPT0gdHJ1ZSkKIAkJcmV0dXJuOwogCi0Jd3JpdGVfbG9jaygmYW1wO2xvY2FsLSZndDtyYXdfc29ja2V0cy5sb2NrKTsKLQotCXNrX2Zvcl9lYWNoX3NhZmUoc2ssIHRtcCwgJmFtcDtsb2NhbC0mZ3Q7cmF3X3NvY2tldHMuaGVhZCkgewomIzQzOwl3aGlsZSAoKHNrID0gbmZjX2xsY3Bfc29ja19saXN0X3BvcCgmYW1wO2xvY2FsLSZndDtyYXdfc29ja2V0cykpKSB7CiAJCWxsY3Bfc29jayA9IG5mY19sbGNwX3NvY2soc2spOwogCi0JCWJoX2xvY2tfc29jayhzayk7CiYjNDM7CQlsb2NrX3NvY2soc2spOwogCiAJCW5mY19sbGNwX3NvY2tldF9wdXJnZShsbGNwX3NvY2spOwogCkBAIC0xMzUsMjYgJiM0MzsxNTQsMjAgQEAgc3RhdGljIHZvaWQgbmZjX2xsY3Bfc29ja2V0X3JlbGVhc2Uoc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCwgYm9vbCBkZXZpY2UsCiAJCXNrLSZndDtza19zdGF0ZSA9IExMQ1BfQ0xPU0VEOwogCQlzay0mZ3Q7c2tfc3RhdGVfY2hhbmdlKHNrKTsKIAotCQliaF91bmxvY2tfc29jayhzayk7Ci0KLQkJc2tfZGVsX25vZGVfaW5pdChzayk7CiYjNDM7CQlyZWxlYXNlX3NvY2soc2spOwomIzQzOwkJc29ja19wdXQoc2spOwogCX0KLQotCXdyaXRlX3VubG9jaygmYW1wO2xvY2FsLSZndDtyYXdfc29ja2V0cy5sb2NrKTsKIH0KIAogc3RhdGljIHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbmZjX2xsY3BfbG9jYWxfZ2V0KHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwpCiB7Ci0JLyogU2luY2UgdXNpbmcgbmZjX2xsY3BfbG9jYWwgbWF5IHJlc3VsdCBpbiB1c2FnZSBvZiBuZmNfZGV2LCB3aGVuZXZlcgotCSAqIHdlIGhvbGQgYSByZWZlcmVuY2UgdG8gbG9jYWwsIHdlIGFsc28gbmVlZCB0byBob2xkIGEgcmVmZXJlbmNlIHRvCi0JICogdGhlIGRldmljZSB0byBhdm9pZCBVQUYuCi0JICovCi0JaWYgKCFuZmNfZ2V0X2RldmljZShsb2NhbC0mZ3Q7ZGV2LSZndDtpZHgpKQomIzQzOwlpZiAoIWxvY2FsKQogCQlyZXR1cm4gTlVMTDsKIAotCWtyZWZfZ2V0KCZhbXA7bG9jYWwtJmd0O3JlZik7CiYjNDM7CWlmIChrcmVmX2dldF91bmxlc3NfemVybygmYW1wO2xvY2FsLSZndDtyZWYpKQomIzQzOwkJcmV0dXJuIGxvY2FsOwogCi0JcmV0dXJuIGxvY2FsOwomIzQzOwlyZXR1cm4gTlVMTDsKIH0KIAogc3RhdGljIHZvaWQgbG9jYWxfY2xlYW51cChzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsKQpAQCAtMTcyLDMwICYjNDM7MTg1LDM0IEBAIHN0YXRpYyB2b2lkIGxvY2FsX2NsZWFudXAoc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCkKIAluZmNfbGxjcF9mcmVlX3NkcF90bHZfbGlzdCgmYW1wO2xvY2FsLSZndDtwZW5kaW5nX3NkcmVxcyk7CiB9CiAKLXN0YXRpYyB2b2lkIGxvY2FsX3JlbGVhc2Uoc3RydWN0IGtyZWYgKnJlZikKJiM0MztzdGF0aWMgdm9pZCBsb2NhbF9yZWxlYXNlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogCXN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWw7CiYjNDM7CXN0cnVjdCBuZmNfZGV2ICpkZXY7CiAKLQlsb2NhbCA9IGNvbnRhaW5lcl9vZihyZWYsIHN0cnVjdCBuZmNfbGxjcF9sb2NhbCwgcmVmKTsKJiM0MzsJbG9jYWwgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IG5mY19sbGNwX2xvY2FsLCByZWxlYXNlX3dvcmspOwomIzQzOwlkZXYgPSBsb2NhbC0mZ3Q7ZGV2OwogCiAJbG9jYWxfY2xlYW51cChsb2NhbCk7CiAJa2ZyZWUobG9jYWwpOwomIzQzOwluZmNfcHV0X2RldmljZShkZXYpOwogfQogCi1pbnQgbmZjX2xsY3BfbG9jYWxfcHV0KHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwpCiYjNDM7c3RhdGljIHZvaWQgbG9jYWxfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqcmVmKQogewotCXN0cnVjdCBuZmNfZGV2ICpkZXY7Ci0JaW50IHJldDsKJiM0MzsJc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbDsKIAotCWlmIChsb2NhbCA9PSBOVUxMKQotCQlyZXR1cm4gMDsKJiM0MzsJbG9jYWwgPSBjb250YWluZXJfb2YocmVmLCBzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwsIHJlZik7CiAKLQlkZXYgPSBsb2NhbC0mZ3Q7ZGV2OwomIzQzOwlxdWV1ZV93b3JrKGxsY3Bfd3EsICZhbXA7bG9jYWwtJmd0O3JlbGVhc2Vfd29yayk7CiYjNDM7fQogCi0JcmV0ID0ga3JlZl9wdXQoJmFtcDtsb2NhbC0mZ3Q7cmVmLCBsb2NhbF9yZWxlYXNlKTsKLQluZmNfcHV0X2RldmljZShkZXYpOwomIzQzO2ludCBuZmNfbGxjcF9sb2NhbF9wdXQoc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCkKJiM0Mzt7CiYjNDM7CWlmICghbG9jYWwpCiYjNDM7CQlyZXR1cm4gMDsKIAotCXJldHVybiByZXQ7CiYjNDM7CXJldHVybiBrcmVmX3B1dCgmYW1wO2xvY2FsLSZndDtyZWYsIGxvY2FsX3JlbGVhc2UpOwogfQogCiBzdGF0aWMgc3RydWN0IG5mY19sbGNwX3NvY2sgKm5mY19sbGNwX3NvY2tfZ2V0KHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwsCkBAIC0xNzA1LDYgJiM0MzsxNzIyLDcgQEAgaW50IG5mY19sbGNwX3JlZ2lzdGVyX2RldmljZShzdHJ1Y3QgbmZjX2RldiAqbmRldikKIAlJTklUX1dPUksoJmFtcDtsb2NhbC0mZ3Q7cnhfd29yaywgbmZjX2xsY3Bfcnhfd29yayk7CiAKIAlJTklUX1dPUksoJmFtcDtsb2NhbC0mZ3Q7dGltZW91dF93b3JrLCBuZmNfbGxjcF90aW1lb3V0X3dvcmspOwomIzQzOwlJTklUX1dPUksoJmFtcDtsb2NhbC0mZ3Q7cmVsZWFzZV93b3JrLCBsb2NhbF9yZWxlYXNlX3dvcmspOwogCiAJcndsb2NrX2luaXQoJmFtcDtsb2NhbC0mZ3Q7c29ja2V0cy5sb2NrKTsKIAlyd2xvY2tfaW5pdCgmYW1wO2xvY2FsLSZndDtjb25uZWN0aW5nX3NvY2tldHMubG9jayk7CkBAIC0xNzQ4LDEwICYjNDM7MTc2NiwyMyBAQCB2b2lkIG5mY19sbGNwX3VucmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCBuZmNfZGV2ICpkZXYpCiAKIGludCBfX2luaXQgbmZjX2xsY3BfaW5pdCh2b2lkKQogewotCXJldHVybiBuZmNfbGxjcF9zb2NrX2luaXQoKTsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJbGxjcF93cSA9IGFsbG9jX3dvcmtxdWV1ZSgmIzM0O25mY19sbGNwX3dxJiMzNDssIFdRX1VOQk9VTkQsIDApOwomIzQzOwlpZiAoIWxsY3Bfd3EpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJcmV0ID0gbmZjX2xsY3Bfc29ja19pbml0KCk7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCWRlc3Ryb3lfd29ya3F1ZXVlKGxsY3Bfd3EpOwomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKIH0KIAogdm9pZCBuZmNfbGxjcF9leGl0KHZvaWQpCiB7CiAJbmZjX2xsY3Bfc29ja19leGl0KCk7CiYjNDM7CWRlc3Ryb3lfd29ya3F1ZXVlKGxsY3Bfd3EpOwogfQpkaWZmIC0tZ2l0IGEvbmV0L25mYy9sbGNwX3NvY2suYyBiL25ldC9uZmMvbGxjcF9zb2NrLmMKaW5kZXggNTU1OGQ4YTRkNDhiMy4uY2U2ODc1ZWI1OGZiYyAxMDA2NDQKLS0tIGEvbmV0L25mYy9sbGNwX3NvY2suYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmZjL2xsY3Bfc29jay5jCkBAIC0zOTIsMTEgJiM0MzszOTIsMTIgQEAgdm9pZCBuZmNfbGxjcF9hY2NlcHRfdW5saW5rKHN0cnVjdCBzb2NrICpzaykKIAogCXByX2RlYnVnKCYjMzQ7c3RhdGUgJWRcbiYjMzQ7LCBzay0mZ3Q7c2tfc3RhdGUpOwogCi0JbGlzdF9kZWxfaW5pdCgmYW1wO2xsY3Bfc29jay0mZ3Q7YWNjZXB0X3F1ZXVlKTsKLQlza19hY2NlcHRxX3JlbW92ZWQobGxjcF9zb2NrLSZndDtwYXJlbnQpOwotCWxsY3Bfc29jay0mZ3Q7cGFyZW50ID0gTlVMTDsKLQotCXNvY2tfcHV0KHNrKTsKJiM0MzsJaWYgKGxsY3Bfc29jay0mZ3Q7cGFyZW50KSB7CiYjNDM7CQlsaXN0X2RlbF9pbml0KCZhbXA7bGxjcF9zb2NrLSZndDthY2NlcHRfcXVldWUpOwomIzQzOwkJc2tfYWNjZXB0cV9yZW1vdmVkKGxsY3Bfc29jay0mZ3Q7cGFyZW50KTsKJiM0MzsJCWxsY3Bfc29jay0mZ3Q7cGFyZW50ID0gTlVMTDsKJiM0MzsJCXNvY2tfcHV0KHNrKTsKJiM0MzsJfQogfQogCiB2b2lkIG5mY19sbGNwX2FjY2VwdF9lbnF1ZXVlKHN0cnVjdCBzb2NrICpwYXJlbnQsIHN0cnVjdCBzb2NrICpzaykKQEAgLTQyMywxMiAmIzQzOzQyNCwyMCBAQCBzdHJ1Y3Qgc29jayAqbmZjX2xsY3BfYWNjZXB0X2RlcXVldWUoc3RydWN0IHNvY2sgKnBhcmVudCwKIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShsc2ssIG4sICZhbXA7bGxjcF9wYXJlbnQtJmd0O2FjY2VwdF9xdWV1ZSwKIAkJCQkgYWNjZXB0X3F1ZXVlKSB7CiYjNDM7CQlzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsOwomIzQzOwogCQlzayA9ICZhbXA7bHNrLSZndDtzazsKLQkJbG9ja19zb2NrKHNrKTsKJiM0MzsJCWxvY2tfc29ja19uZXN0ZWQoc2ssIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTsKIAogCQlpZiAoc2stJmd0O3NrX3N0YXRlID09IExMQ1BfQ0xPU0VEKSB7Ci0JCQlyZWxlYXNlX3NvY2soc2spOwomIzQzOwkJCWxvY2FsID0gbmZjX2xsY3Bfc29jayhzayktJmd0O2xvY2FsOwomIzQzOwogCQkJbmZjX2xsY3BfYWNjZXB0X3VubGluayhzayk7CiYjNDM7CQkJaWYgKGxvY2FsKQomIzQzOwkJCQluZmNfbGxjcF9zb2NrX3VubGluaygmYW1wO2xvY2FsLSZndDtzb2NrZXRzLCBzayk7CiYjNDM7CQkJc29ja19vcnBoYW4oc2spOwomIzQzOwkJCXJlbGVhc2Vfc29jayhzayk7CiYjNDM7CQkJc29ja19wdXQoc2spOwogCQkJY29udGludWU7CiAJCX0KIApAQCAtNDY0LDcgJiM0Mzs0NzMsNyBAQCBzdGF0aWMgaW50IGxsY3Bfc29ja19hY2NlcHQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2tldCAqbmV3c29jaywKIAogCXByX2RlYnVnKCYjMzQ7cGFyZW50ICVwXG4mIzM0Oywgc2spOwogCi0JbG9ja19zb2NrX25lc3RlZChzaywgU0lOR0xFX0RFUFRIX05FU1RJTkcpOwomIzQzOwlsb2NrX3NvY2soc2spOwogCiAJaWYgKHNrLSZndDtza19zdGF0ZSAhPSBMTENQX0xJU1RFTikgewogCQlyZXQgPSAtRUJBREZEOwpAQCAtNDkwLDcgJiM0Mzs0OTksMTIgQEAgc3RhdGljIGludCBsbGNwX3NvY2tfYWNjZXB0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrZXQgKm5ld3NvY2ssCiAKIAkJcmVsZWFzZV9zb2NrKHNrKTsKIAkJdGltZW8gPSBzY2hlZHVsZV90aW1lb3V0KHRpbWVvKTsKLQkJbG9ja19zb2NrX25lc3RlZChzaywgU0lOR0xFX0RFUFRIX05FU1RJTkcpOwomIzQzOwkJbG9ja19zb2NrKHNrKTsKJiM0MzsKJiM0MzsJCWlmIChzay0mZ3Q7c2tfc3RhdGUgIT0gTExDUF9MSVNURU4pIHsKJiM0MzsJCQlyZXQgPSAtRUJBREZEOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJfQogCX0KIAlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CiAJcmVtb3ZlX3dhaXRfcXVldWUoc2tfc2xlZXAoc2spLCAmYW1wO3dhaXQpOwpAQCAtNjI5LDEzICYjNDM7NjQzLDI0IEBAIHN0YXRpYyBpbnQgbGxjcF9zb2NrX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jaykKIAogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobHNrLCBuLCAmYW1wO2xsY3Bfc29jay0mZ3Q7YWNjZXB0X3F1ZXVlLAogCQkJCQkgYWNjZXB0X3F1ZXVlKSB7CiYjNDM7CQkJYm9vbCBwdXRfY3JlYXRpb24gPSBmYWxzZTsKJiM0MzsKIAkJCWFjY2VwdF9zayA9ICZhbXA7bHNrLSZndDtzazsKLQkJCWxvY2tfc29jayhhY2NlcHRfc2spOwomIzQzOwkJCWxvY2tfc29ja19uZXN0ZWQoYWNjZXB0X3NrLCBTSU5HTEVfREVQVEhfTkVTVElORyk7CiAKLQkJCW5mY19sbGNwX3NlbmRfZGlzY29ubmVjdChsc2spOwotCQkJbmZjX2xsY3BfYWNjZXB0X3VubGluayhhY2NlcHRfc2spOwomIzQzOwkJCWlmIChuZmNfbGxjcF9zb2NrKGFjY2VwdF9zayktJmd0O3BhcmVudCA9PSBzaykgewomIzQzOwkJCQluZmNfbGxjcF9zZW5kX2Rpc2Nvbm5lY3QobHNrKTsKJiM0MzsJCQkJbmZjX2xsY3BfYWNjZXB0X3VubGluayhhY2NlcHRfc2spOwomIzQzOwkJCQluZmNfbGxjcF9zb2NrX3VubGluaygmYW1wO2xvY2FsLSZndDtzb2NrZXRzLCBhY2NlcHRfc2spOwomIzQzOwomIzQzOwkJCQlhY2NlcHRfc2stJmd0O3NrX3N0YXRlID0gTExDUF9DTE9TRUQ7CiYjNDM7CQkJCXNvY2tfb3JwaGFuKGFjY2VwdF9zayk7CiYjNDM7CQkJCXB1dF9jcmVhdGlvbiA9IHRydWU7CiYjNDM7CQkJfQogCiAJCQlyZWxlYXNlX3NvY2soYWNjZXB0X3NrKTsKJiM0MzsJCQlpZiAocHV0X2NyZWF0aW9uKQomIzQzOwkJCQlzb2NrX3B1dChhY2NlcHRfc2spOyAvKiBjcmVhdGlvbiByZWYgKi8KIAkJfQogCX0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwOTowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NzMyCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogNDA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgdGhlIE5GQyBMTENQIFBhdGNoOiBBIFF1aWNrIEFzc2Vzc21lbnQqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBwYXRjaCBhbmQgZmlndXJlIG91dCB0aGUgYmVzdCBhcHByb2FjaCBmb3IgZnV6emluZyBpdC4gRmlyc3QgdGhpbmdzIGZpcnN0OiB0aGUgcGF0Y2ggaW52b2x2ZXMgYG5ldC9uZmMvbGxjcC5oYCwgYG5ldC9uZmMvbGxjcF9jb3JlLmNgLCBhbmQgYG5ldC9uZmMvbGxjcF9zb2NrLmNgLiBUaGF0IHRlbGxzIG1lIHdlJiMzOTtyZSBsb29raW5nIGF0IGZpeGVzIGZvciBjb25jdXJyZW5jeSBhbmQgcmVmY291bnRpbmcgaXNzdWVzIHdpdGhpbiBORkMmIzM5O3MgTExDUCBzb2NrZXQgaGFuZGxpbmcsIHNwZWNpZmljYWxseSBhcm91bmQgZnVuY3Rpb25zIGxpa2UgYG5mY19sbGNwX3NvY2tldF9yZWxlYXNlYCwgYG5mY19sbGNwX3NvY2tfbGlzdF9wb3BgLCB2YXJpb3VzIGxvY2FsIHJlbGVhc2UgYW5kIHB1dCBmdW5jdGlvbnMsIGFjY2VwdC9kZXF1ZXVlIG9wZXJhdGlvbnMsIGFuZCB0aGUgaW50cm9kdWN0aW9uIG9mIGEgd29ya3F1ZXVlIChgbGxjcF93cWApIGZvciBkZWZlcnJlZCBsb2NhbCByZWxlYXNlcy4gVGhlIHNoaWZ0IGZyb20gYGJoX2xvY2tfc29ja2AgdG8gYGxvY2tfc29ja2AgZm9yIHNvY2tldCBsb2NraW5nIGlzIGEga2V5IGluZGljYXRvciBvZiBjb25jdXJyZW5jeSBjb25jZXJucyBiZWluZyBhZGRyZXNzZWQuIFRoZSBmaXggbGlrZWx5IHJldm9sdmVzIGFyb3VuZCBzb2NrX3B1dCBhbmQgc29ja19vcnBoYW4uCgpOb3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBjYW4gd2UgZXZlbiByZWFjaCB0aGlzIGNvZGUgd2l0aCBmdXp6aW5nPyBHb29kIG5ld3MsIGl0IGxvb2tzIGxpa2Ugc3l6a2FsbGVyIGFscmVhZHkgaGVhdmlseSBleGVyY2lzZXMgTkZDIGFuZCBMTENQIHNvY2tldHMuIFRoYXQgbWVhbnMgd2UgaGF2ZSBhIGNsZWFyIHBhdGggdXNpbmcgcmF3IHNvY2tldHMsIHZpcnR1YWwgZGV2aWNlcywgbmV0bGluayBpbnRlcmZhY2VzLCBhbmQgc3RhbmRhcmQgc29ja2V0IHN5c2NhbGxzLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgZnV6emluZyEKClRpbWUgdG8gY2hlY2sgdGhlIEtjb25maWcgc2V0dGluZ3MgaW4gYG5ldC9uZmMvYC4gR290dGEgY29uZmlybSB0aGUgcmVsZXZhbnQgb3B0aW9ucyBhcmUgZW5hYmxlZCBpbiBvdXIgZnV6emluZyBlbnZpcm9ubWVudC4gQmFzZWQgb24gdGhlIGZpbGUgY29udGV4dCwgdGhlIG1haW4gc3ltYm9scyBzaG91bGQgYmUgdGhlIGZ1bmN0aW9ucyBkZXNjcmliZWQgYWJvdmUuIEkgd2lsbCBuZWVkIHRvIGlkZW50aWZ5IHRoZSBmb2N1cyBzeW1ib2xzIGZvciB0aGlzIGFuYWx5c2lzLiBXaXRoIHRoaXMgaW5mb3JtYXRpb24sIEkgY2FuIGNyZWF0ZSBhbiBpbml0aWFsIGZ1enppbmcgY29uZmlnLCB3aGljaCBJIHdpbGwgdGhlbiByZWZpbmUgYmFzZWQgb24gZnV6emluZyByZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA5OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORkMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmZjJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZmMvS2NvbmZpZy01LVxubmV0L25mYy9LY29uZmlnOjY6bWVudWNvbmZpZyBORkNcbm5ldC9uZmMvS2NvbmZpZy03LVx0ZGVwZW5kcyBvbiBSRktJTEwgfHwgIVJGS0lMTFxuLS1cbm5ldC9uZmMvS2NvbmZpZy0xNi1cbm5ldC9uZmMvS2NvbmZpZzoxNzpjb25maWcgTkZDX0RJR0lUQUxcbm5ldC9uZmMvS2NvbmZpZy0xOC1cdGRlcGVuZHMgb24gTkZDXG4tLVxubmV0L25mYy9oY2kvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxubmV0L25mYy9oY2kvS2NvbmZpZzoyOmNvbmZpZyBORkNfSENJXG5uZXQvbmZjL2hjaS9LY29uZmlnLTMtXHRkZXBlbmRzIG9uIE5GQ1xuLS1cbm5ldC9uZmMvaGNpL0tjb25maWctMTAtXG5uZXQvbmZjL2hjaS9LY29uZmlnOjExOmNvbmZpZyBORkNfU0hETENcbm5ldC9uZmMvaGNpL0tjb25maWctMTItXHRkZXBlbmRzIG9uIE5GQ19IQ0lcbi0tXG5uZXQvbmZjL25jaS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5uZXQvbmZjL25jaS9LY29uZmlnOjI6Y29uZmlnIE5GQ19OQ0lcbm5ldC9uZmMvbmNpL0tjb25maWctMy1cdGRlcGVuZHMgb24gTkZDXG4tLVxubmV0L25mYy9uY2kvS2NvbmZpZy0xMi1cbm5ldC9uZmMvbmNpL0tjb25maWc6MTM6Y29uZmlnIE5GQ19OQ0lfU1BJXG5uZXQvbmZjL25jaS9LY29uZmlnLTE0LVx0ZGVwZW5kcyBvbiBORkNfTkNJIFx1MDAyNlx1MDAyNiBTUElcbi0tXG5uZXQvbmZjL25jaS9LY29uZmlnLTIzLVxubmV0L25mYy9uY2kvS2NvbmZpZzoyNDpjb25maWcgTkZDX05DSV9VQVJUXG5uZXQvbmZjL25jaS9LY29uZmlnLTI1LVx0ZGVwZW5kcyBvbiBORkNfTkNJIFx1MDAyNlx1MDAyNiBUVFlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwOTowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2OTM5CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgaXQ6CgoqKkRpdmluZyBpbnRvIHRoZSBORkMgRHJpdmVyIENvbmZpZ3VyYXRpb24qKgoKT2theSwgdGltZSB0byBnZXQgYSBoYW5kbGUgb24gdGhlIE5GQyBkcml2ZXIgc2l0dWF0aW9uLiBJJiMzOTtsbCBzdGFydCBieSB0YWtpbmcgYSBsb29rIGF0IGBuZXQvbmZjL0tjb25maWdgLiBUaGF0JiMzOTtzIHdoZXJlIGFsbCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBkZWZpbmVkLCByaWdodD8gSSB3YW50IHRvIHNlZSB3aGF0IGZlYXR1cmVzIGFyZSBhdmFpbGFibGUsIHdoYXQgZGVwZW5kZW5jaWVzIHRoZXJlIGFyZSwgYW5kIHdoYXQgdGhlIGRlZmF1bHQgc2V0dGluZ3MgbWlnaHQgYmUuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIG92ZXJ2aWV3IG9mIHRoZSBkZXNpZ24gc3BhY2UgYW5kIGhvdyBtdWNoIGZsZXhpYmlsaXR5IHdlIGhhdmUuIFRoZW4sIEkmIzM5O2xsIG1vdmUgb24gdG8gYG5ldC9uZmMvTWFrZWZpbGVgLiBUaGF0IHdpbGwgc2hvdyBtZSBob3cgdGhlIGRpZmZlcmVudCBzb3VyY2UgZmlsZXMgYXJlIGNvbXBpbGVkIGFuZCBsaW5rZWQsIHRoZSBidWlsZCB0YXJnZXRzLCBhbmQgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGJhc2VkIG9uIHRob3NlIEtjb25maWcgb3B0aW9ucyBJIGp1c3QgbG9va2VkIGF0LiBVbmRlcnN0YW5kaW5nIHRoZSBidWlsZCBwcm9jZXNzIGlzIGNyaXRpY2FsLCBlc3BlY2lhbGx5IHdoZW4gSSBnZXQgaW50byBjdXN0b21pemF0aW9uIGFuZCBwb3RlbnRpYWxseSBwYXRjaGluZyB0aGUgY29kZS4gSG9wZWZ1bGx5LCB0aGVzZSB0d28gZmlsZXMgd2lsbCBnaXZlIG1lIGEgc29saWQgZm91bmRhdGlvbiBmb3IgdW5kZXJzdGFuZGluZyB0aGUgZXhpc3RpbmcgTkZDIGRyaXZlciBpbmZyYXN0cnVjdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwOTowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZmMvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCNcbiAgIDM6XHQjIE5GQyBzdWJzeXN0ZW0gY29uZmlndXJhdGlvblxuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRtZW51Y29uZmlnIE5GQ1xuICAgNzpcdFx0ZGVwZW5kcyBvbiBSRktJTEwgfHwgIVJGS0lMTFxuICAgODpcdFx0dHJpc3RhdGUgXCYjMzQ7TkZDIHN1YnN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4gICA5Olx0XHRkZWZhdWx0IG5cbiAgMTA6XHRcdGhlbHBcbiAgMTE6XHRcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBidWlsZCBzdXBwb3J0IGZvciBORkMgKE5lYXIgZmllbGRcbiAgMTI6XHRcdCAgY29tbXVuaWNhdGlvbikgZGV2aWNlcy5cbiAgMTM6XHRcbiAgMTQ6XHRcdCAgVG8gY29tcGlsZSB0aGlzIHN1cHBvcnQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbFxuICAxNTpcdFx0ICBiZSBjYWxsZWQgbmZjLlxuICAxNjpcdFxuICAxNzpcdGNvbmZpZyBORkNfRElHSVRBTFxuICAxODpcdFx0ZGVwZW5kcyBvbiBORkNcbiAgMTk6XHRcdHNlbGVjdCBDUkNfQ0NJVFRcbiAgMjA6XHRcdHNlbGVjdCBDUkNfSVRVX1RcbiAgMjE6XHRcdHRyaXN0YXRlIFwmIzM0O05GQyBEaWdpdGFsIFByb3RvY29sIHN0YWNrIHN1cHBvcnRcJiMzNDtcbiAgMjI6XHRcdGRlZmF1bHQgblxuICAyMzpcdFx0aGVscFxuICAyNDpcdFx0ICBTYXkgWSBpZiB5b3Ugd2FudCB0byBidWlsZCBORkMgZGlnaXRhbCBwcm90b2NvbCBzdGFjayBzdXBwb3J0LlxuICAyNTpcdFx0ICBUaGlzIGlzIG5lZWRlZCBieSBORkMgY2hpcHNldHMgd2hvc2UgZmlybXdhcmUgb25seSBpbXBsZW1lbnRcbiAgMjY6XHRcdCAgdGhlIE5GQyBhbmFsb2cgbGF5ZXIuXG4gIDI3Olx0XG4gIDI4Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBzdXBwb3J0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGxcbiAgMjk6XHRcdCAgYmUgY2FsbGVkIG5mY19kaWdpdGFsLlxuICAzMDpcdFxuICAzMTpcdHNvdXJjZSBcJiMzNDtuZXQvbmZjL25jaS9LY29uZmlnXCYjMzQ7XG4gIDMyOlx0c291cmNlIFwmIzM0O25ldC9uZmMvaGNpL0tjb25maWdcJiMzNDtcbiAgMzM6XHRcbiAgMzQ6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZmMvS2NvbmZpZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA5OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc2MDgKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgdGhlIGBuZXQvbmZjL01ha2VmaWxlYCoqCgpPa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGUgYG5ldC9uZmMvTWFrZWZpbGVgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGdvaW5nIG9uIHdpdGggdGhlIE5GQyBzdGFjayBidWlsZC4gVGhpcyBpcyB0aGUgY2VudHJhbCBwb2ludCBmb3IgY29udHJvbGxpbmcgaG93IHRoZSBORkMga2VybmVsIG1vZHVsZXMgYXJlIGJ1aWx0LCBsaW5rZWQsIGFuZCBpbmNsdWRlZC4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IHNjYW4gaXQgdG8gZ3Jhc3AgdGhlIG92ZXJhbGwgc3RydWN0dXJlLiBJJiMzOTtsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBjb25kaXRpb25hbCBsb2dpYywgZXNwZWNpYWxseSBhcm91bmQga2VybmVsIHZlcnNpb24gY2hlY2tzLCBLY29uZmlnIG9wdGlvbnMsIGFuZCB0YXJnZXQtc3BlY2lmaWMgY29uZmlndXJhdGlvbnMsIGFzIHRoZXNlIGFyZSBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyBwb3J0YWJpbGl0eSBhbmQgZmVhdHVyZSBlbmFibGVtZW50LiBJJiMzOTttIGFsc28gbG9va2luZyBmb3IgZGVwZW5kZW5jaWVzIOKAkyB3aGF0IG90aGVyIE1ha2VmaWxlcyBvciBzb3VyY2UgZmlsZXMgYXJlIGluY2x1ZGVkLCBhbmQgd2hhdCBsaWJyYXJpZXMgYXJlIGxpbmtlZD8gS25vd2luZyB0aGlzIHdpbGwgaGVscCBpZGVudGlmeSBhbnkgcG90ZW50aWFsIGNvbmZsaWN0cyBvciBhcmVhcyB0aGF0IG5lZWQgbW9kaWZpY2F0aW9uIGZvciBteSBzcGVjaWZpYyBwbGF0Zm9ybS4gVWx0aW1hdGVseSwgSSYjMzk7bSBhaW1pbmcgdG8gZ2FpbiBhIHNvbGlkIGdyYXNwIG9mIHRoaXMgTWFrZWZpbGUmIzM5O3Mgcm9sZSBpbiB0aGUgbGFyZ2VyIGtlcm5lbCBidWlsZCBwcm9jZXNzIGFuZCBpZGVudGlmeSBhbnkgYXJlYXMgdGhhdCBtaWdodCBhZmZlY3QgbXkgYXJlYSBvZiB3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA5OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25mYy9NYWtlZmlsZSYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHQjXG4gICAzOlx0IyBNYWtlZmlsZSBmb3IgdGhlIExpbnV4IE5GQyBzdWJzeXN0ZW0uXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdG9iai0kKENPTkZJR19ORkMpICYjNDM7PSBuZmMub1xuICAgNzpcdG9iai0kKENPTkZJR19ORkNfTkNJKSAmIzQzOz0gbmNpL1xuICAgODpcdG9iai0kKENPTkZJR19ORkNfSENJKSAmIzQzOz0gaGNpL1xuICAgOTpcdG9iai0kKENPTkZJR19ORkNfRElHSVRBTCkgJiM0Mzs9IG5mY19kaWdpdGFsLm9cbiAgMTA6XHRcbiAgMTE6XHRuZmMtb2JqcyA6PSBjb3JlLm8gbmV0bGluay5vIGFmX25mYy5vIHJhd3NvY2subyBsbGNwX2NvcmUubyBsbGNwX2NvbW1hbmRzLm8gXFxcbiAgMTI6XHRcdFx0bGxjcF9zb2NrLm9cbiAgMTM6XHRcbiAgMTQ6XHRuZmNfZGlnaXRhbC1vYmpzIDo9IGRpZ2l0YWxfY29yZS5vIGRpZ2l0YWxfdGVjaG5vbG9neS5vIGRpZ2l0YWxfZGVwLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwOTowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MDg5CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhpbmtpbmcgcHJvY2VzczoKCioqSW52ZXN0aWdhdGluZyBORkMgTW9kdWxlIERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyBgbGxjcF9jb3JlLm9gIGFuZCBgbGxjcF9zb2NrLm9gIGFyZSBjbGVhcmx5IHBhcnQgb2YgdGhlIE5GQyBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBuZmMtb2Jqc2AgbGlzdC4gVGhhdCBtYWtlcyBzZW5zZSwgZXNwZWNpYWxseSBnaXZlbiB0aGVpciBuYW1lcy4gU2luY2UgSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYnVpbGQgc3lzdGVtLCBteSBuZXh0IHN0ZXAgaXMgdG8gZmlndXJlIG91dCB0aGUgbGFyZ2VyIGRlcGVuZGVuY2llcy4gSSBrbm93IE5GQyBpcyBhIGNvbmZpZ3VyYWJsZSBmZWF0dXJlLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBBcmUgdGhlcmUgb3RoZXIgcmVsYXRlZCBjb25maWd1cmF0aW9ucyBsaWtlIGBDT05GSUdfTkZDX1NJTWAgb3IganVzdCBgQ09ORklHX05GQ2AgdGhhdCBjb250cm9sIHdoZXRoZXIgdGhlc2UgbW9kdWxlcyBnZXQgY29tcGlsZWQgaW4/IEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB3aGF0IHR1cm5zIG9uIHRoZSBidWlsZCBmb3IgdGhvc2Ugb2JqZWN0cywgYW5kIHRoZSBiZXN0IHBsYWNlIHRvIGRvIHRoYXQgaXMgcHJvYmFibHkgdGhlIEtjb25maWcgZmlsZXMuIFRoZSBvbmUgaW4gYGRyaXZlcnMvbmZjL0tjb25maWdgIHNlZW1zIGxpa2UgdGhlIG9idmlvdXMgcGxhY2UgdG8gc3RhcnQuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBpbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDk6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25mYy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgTmVhciBGaWVsZCBDb21tdW5pY2F0aW9uIChORkMpIGRldmljZXNcbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0bWVudSBcJiMzNDtOZWFyIEZpZWxkIENvbW11bmljYXRpb24gKE5GQykgZGV2aWNlc1wmIzM0O1xuICAgNzpcdFx0ZGVwZW5kcyBvbiBORkNcbiAgIDg6XHRcbiAgIDk6XHRjb25maWcgTkZDX1RSRjc5NzBBXG4gIDEwOlx0XHR0cmlzdGF0ZSBcJiMzNDtUZXhhcyBJbnN0cnVtZW50cyBUUkY3OTcwYSBORkMgZHJpdmVyXCYjMzQ7XG4gIDExOlx0XHRkZXBlbmRzIG9uIFNQSSBcdTAwMjZcdTAwMjYgTkZDX0RJR0lUQUwgXHUwMDI2XHUwMDI2IEdQSU9MSUJcbiAgMTI6XHRcdGhlbHBcbiAgMTM6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgTkZDIGRyaXZlciBmb3IgVGV4YXMgSW5zdHJ1bWVudHMmIzM5OyBUUkY3OTcwYVxuICAxNDpcdFx0ICBkZXZpY2UuIFN1Y2ggZGV2aWNlIHN1cHBvcnRzIDUgZGlmZmVyZW50IHByb3RvY29sczogSVNPMTQ0NDNBLFxuICAxNTpcdFx0ICBJU08xNDQ0M0IsIEZlTGlDYSwgSVNPMTU2OTMgYW5kIElTTzE4MDAwLTMuXG4gIDE2Olx0XG4gIDE3Olx0XHQgIFNheSBZIGhlcmUgdG8gY29tcGlsZSBzdXBwb3J0IGZvciBUUkY3OTcwYSBpbnRvIHRoZSBrZXJuZWwgb3JcbiAgMTg6XHRcdCAgc2F5IE0gIHRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUuIFRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWRcbiAgMTk6XHRcdCAgdHJmNzk3MGEua28uXG4gIDIwOlx0XG4gIDIxOlx0Y29uZmlnIE5GQ19NRUlfUEhZXG4gIDIyOlx0XHR0cmlzdGF0ZSBcJiMzNDtNRUkgYnVzIE5GQyBkZXZpY2Ugc3VwcG9ydFwmIzM0O1xuICAyMzpcdFx0ZGVwZW5kcyBvbiBJTlRFTF9NRUkgXHUwMDI2XHUwMDI2IE5GQ19IQ0lcbiAgMjQ6XHRcdGhlbHBcbiAgMjU6XHRcdCAgVGhpcyBhZGRzIHN1cHBvcnQgdG8gdXNlIGFuIG1laSBidXMgbmZjIGRldmljZS4gU2VsZWN0IHRoaXMgaWYgeW91XG4gIDI2Olx0XHQgIHdpbGwgdXNlIGFuIEhDSSBORkMgZHJpdmVyIGZvciBhbiBORkMgY2hpcCBjb25uZWN0ZWQgYmVoaW5kIGFuXG4gIDI3Olx0XHQgIEludGVsJiMzOTtzIE1hbmFnZW1lbnQgRW5naW5lIGNoaXAuXG4gIDI4Olx0XG4gIDI5Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDMwOlx0XG4gIDMxOlx0Y29uZmlnIE5GQ19TSU1cbiAgMzI6XHRcdHRyaXN0YXRlIFwmIzM0O05GQyBoYXJkd2FyZSBzaW11bGF0b3IgZHJpdmVyXCYjMzQ7XG4gIDMzOlx0XHRkZXBlbmRzIG9uIE5GQ19ESUdJVEFMXG4gIDM0Olx0XHRoZWxwXG4gIDM1Olx0XHQgIFRoaXMgZHJpdmVyIGRlY2xhcmVzIHR3byB2aXJ0dWFsIE5GQyBkZXZpY2VzIHN1cHBvcnRpbmcgTkZDLURFUFxuICAzNjpcdFx0ICBwcm90b2NvbC4gQW4gTExDUCBjb25uZWN0aW9uIGNhbiBiZSBlc3RhYmxpc2hlZCBiZXR3ZWVuIHRoZW0gYW5kXG4gIDM3Olx0XHQgIGFsbCBwYWNrZXRzIHNlbnQgZnJvbSBvbmUgZGV2aWNlIGlzIHNlbnQgYmFjayB0byB0aGUgb3RoZXIsIGFjdGluZyBhc1xuICAzODpcdFx0ICBsb29wYmFjayBkZXZpY2VzLlxuICAzOTpcdFxuICA0MDpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICA0MTpcdFxuICA0MjpcdGNvbmZpZyBORkNfUE9SVDEwMFxuICA0MzpcdFx0dHJpc3RhdGUgXCYjMzQ7U29ueSBORkMgUG9ydC0xMDAgU2VyaWVzIFVTQiBkZXZpY2Ugc3VwcG9ydFwmIzM0O1xuICA0NDpcdFx0ZGVwZW5kcyBvbiBVU0JcbiAgNDU6XHRcdGRlcGVuZHMgb24gTkZDX0RJR0lUQUxcbiAgNDY6XHRcdGhlbHBcbiAgNDc6XHRcdCAgVGhpcyBhZGRzIHN1cHBvcnQgZm9yIFNvbnkgUG9ydC0xMDAgY2hpcCBiYXNlZCBVU0IgZGV2aWNlcyBzdWNoIGFzIHRoZVxuICA0ODpcdFx0ICBSQy1TMzgwIGRvbmdsZS5cbiAgNDk6XHRcbiAgNTA6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgNTE6XHRcbiAgNTI6XHRjb25maWcgTkZDX1ZJUlRVQUxfTkNJXG4gIDUzOlx0XHR0cmlzdGF0ZSBcJiMzNDtOQ0kgZGV2aWNlIHNpbXVsYXRvciBkcml2ZXJcJiMzNDtcbiAgNTQ6XHRcdGRlcGVuZHMgb24gTkZDX05DSVxuICA1NTpcdFx0aGVscFxuICA1NjpcdFx0ICBOQ0kgdmlydHVhbCBkZXZpY2Ugc2ltdWxhdGVzIGEgTkNJIGRldmljZSB0byB0aGUgdXNlci5cbiAgNTc6XHRcdCAgSXQgY2FuIGJlIHVzZWQgdG8gdmFsaWRhdGUgdGhlIE5DSSBtb2R1bGUgYW5kIGFwcGxpY2F0aW9ucy5cbiAgNTg6XHRcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgY29tbXVuaWNhdGlvbiBiZXR3ZWVuIHRoZSB2aXJ0dWFsIE5DSSBkZXZpY2UgYW5kXG4gIDU5Olx0XHQgIG1vZHVsZS5cbiAgNjA6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDk6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTI0NgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDM0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoJiMzOTtzIEltcGFjdCBvbiB0aGUgTkZDIExMQ1AgU3Vic3lzdGVtKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHF1aWNrbHkgaWRlbnRpZnkgd2hpY2ggc3ltYm9scyBoYXZlIGJlZW4gdG91Y2hlZC4gVGhlIG1vZGlmaWNhdGlvbiBpcyBpbiBgbmV0L25mYy9sbGNwX2NvcmUuY2AgYW5kIGBuZXQvbmZjL2xsY3Bfc29jay5jYC4gSSBzZWUgYSBtaXggb2Ygc3RhdGljIGFuZCBub24tc3RhdGljIGZ1bmN0aW9ucy4gU3BlY2lmaWNhbGx5LCB0aGUgbGlzdCBvZiBmdW5jdGlvbnMgaW4gYG5ldC9uZmMvbGxjcF9jb3JlLmNgIGhhcyBjYXVnaHQgbXkgZXllOiBgbmZjX2xsY3Bfc29ja19saXN0X3BvcGAsIGBuZmNfbGxjcF9zb2NrZXRfcmVsZWFzZWAsIGBuZmNfbGxjcF9sb2NhbF9nZXRgLCBgbG9jYWxfY2xlYW51cGAsIGBsb2NhbF9yZWxlYXNlX3dvcmtgLCBgbG9jYWxfcmVsZWFzZWAgYXJlIGFsbCBzdGF0aWMgYW5kIHNlZW0gZmFpcmx5IGNvbnRhaW5lZC4gSSB3aWxsIHdhbnQgdG8gY2hlY2sgaG93IHRoZXNlIHN0YXRpYyBpbnRlcm5hbCBmdW5jdGlvbnMgcmVsYXRlIHRvIHRoZSBvdmVyYWxsIGZsb3cgd2l0aGluIGVhY2ggZmlsZSwgYW5kIHBvc3NpYmx5LCBhY3Jvc3MgZWFjaCBvZiB0aGVzZSBmaWxlcy4KCk9uIHRoZSBvdGhlciBoYW5kLCBgbmZjX2xsY3BfbG9jYWxfcHV0YCBpcyBub24tc3RhdGljLCBzbyBpdCYjMzk7cyBwb3RlbnRpYWxseSBleHBvcnRlZCBvciBhdCBsZWFzdCB1c2VkIGFjcm9zcyBmaWxlcy4gVGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGEgY2xvc2VyIGxvb2ssIGFzIGlzIGBuZmNfbGxjcF9yZWdpc3Rlcl9kZXZpY2VgIGFuZCB0aGUgbW9kdWxlIGluaXRpYWxpemF0aW9uIGFuZCBleGl0IGZ1bmN0aW9ucyBgbmZjX2xsY3BfaW5pdGAgYW5kIGBuZmNfbGxjcF9leGl0YC4gSSYjMzk7bGwgd2FudCB0byB2ZXJpZnkgd2hhdCYjMzk7cyBjaGFuZ2VkIGluIHRob3NlIGluaXQvZXhpdCBjYWxscy4KClRoZW4sIG92ZXIgaW4gYG5ldC9uZmMvbGxjcF9zb2NrLmNgLCBJIHNlZSBgbmZjX2xsY3BfYWNjZXB0X3VubGlua2AgYW5kIGBuZmNfbGxjcF9hY2NlcHRfZGVxdWV1ZWAgYXJlIG5vbi1zdGF0aWMgYXMgd2VsbC4gQWxzbywgdGhlIHR3byBzdGF0aWMgZnVuY3Rpb25zIGBsbGNwX3NvY2tfYWNjZXB0YCBhbmQgYGxsY3Bfc29ja19yZWxlYXNlYCB1c2UgdGhlIGBwcm90b19vcHNgIHdoaWNoIGFyZSBsaWtlbHkgcG9pbnRlcnMgdG8gdGhlIGBuZmNfbGxjcF9hY2NlcHRgIGZ1bmN0aW9ucy4gVGhlc2UgdHdvIGFyZSB1c2VkIGFzIHBhcnQgb2YgdGhlIHNvY2tldCBvcGVyYXRpb25zLCB3aGljaCB3YXJyYW50cyBmdXJ0aGVyIGFuYWx5c2lzLgoKTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwcy4gTGV0JiMzOTtzIHNlZSBob3cgYG5mY19sbGNwX3NvY2tldF9yZWxlYXNlYCBpcyBiZWluZyB1c2VkIGluIHRoZSBjb250ZXh0IG9mIHNvY2tldCBvcGVyYXRpb25zLiBJIHNob3VsZCBzdGFydCBieSBncmVwcGluZyB0aGUgY29kZWJhc2UgZm9yIHRoZXNlIGNyaXRpY2FsIGZ1bmN0aW9uczogYG5mY19sbGNwX2xvY2FsX3B1dGAsIGBuZmNfbGxjcF9hY2NlcHRfdW5saW5rYCwgYW5kIGBuZmNfbGxjcF9hY2NlcHRfZGVxdWV1ZWAgdG8gc2VlIHdoZXJlIHRoZXkmIzM5O3JlIGNhbGxlZCBhbmQgaG93IHRoZXkgaW50ZXJhY3QuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIHBpY3R1cmUgb2YgdGhlIGZ1bmN0aW9uYWwgaW1wYWN0IG9mIHRoaXMgcGF0Y2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA5OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mY19sbGNwXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDE0NjggbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbm5ldC9uZmMvY29yZS5jPTI4MD1pbnQgbmZjX2RlcF9saW5rX3VwKHN0cnVjdCBuZmNfZGV2ICpkZXYsIGludCB0YXJnZXRfaW5kZXgsIHU4IGNvbW1fbW9kZSlcbi0tXG5uZXQvbmZjL2NvcmUuYy0zMDMtXG5uZXQvbmZjL2NvcmUuYzozMDQ6XHRnYiA9IG5mY19sbGNwX2dlbmVyYWxfYnl0ZXMoZGV2LCBcdTAwMjZnYl9sZW4pO1xubmV0L25mYy9jb3JlLmMtMzA1LVx0aWYgKGdiX2xlbiBcdTAwM2UgTkZDX01BWF9HVF9MRU4pIHtcbi0tXG5uZXQvbmZjL2NvcmUuYz0zMjc9aW50IG5mY19kZXBfbGlua19kb3duKHN0cnVjdCBuZmNfZGV2ICpkZXYpXG4tLVxubmV0L25mYy9jb3JlLmMtMzUyLVx0XHRkZXYtXHUwMDNlcmZfbW9kZSA9IE5GQ19SRl9OT05FO1xubmV0L25mYy9jb3JlLmM6MzUzOlx0XHRuZmNfbGxjcF9tYWNfaXNfZG93bihkZXYpO1xubmV0L25mYy9jb3JlLmMtMzU0LVx0XHRuZmNfZ2VubF9kZXBfbGlua19kb3duX2V2ZW50KGRldik7XG4tLVxubmV0L25mYy9jb3JlLmM9MzYzPWludCBuZmNfZGVwX2xpbmtfaXNfdXAoc3RydWN0IG5mY19kZXYgKmRldiwgdTMyIHRhcmdldF9pZHgsXG4tLVxubmV0L25mYy9jb3JlLmMtMzgwLVxubmV0L25mYy9jb3JlLmM6MzgxOlx0bmZjX2xsY3BfbWFjX2lzX3VwKGRldiwgdGFyZ2V0X2lkeCwgY29tbV9tb2RlLCByZl9tb2RlKTtcbm5ldC9uZmMvY29yZS5jLTM4Mi1cbi0tXG5uZXQvbmZjL2NvcmUuYz02Mzk9aW50IG5mY19zZXRfcmVtb3RlX2dlbmVyYWxfYnl0ZXMoc3RydWN0IG5mY19kZXYgKmRldiwgY29uc3QgdTggKmdiLCB1OCBnYl9sZW4pXG4tLVxubmV0L25mYy9jb3JlLmMtNjQyLVxubmV0L25mYy9jb3JlLmM6NjQzOlx0cmV0dXJuIG5mY19sbGNwX3NldF9yZW1vdGVfZ2IoZGV2LCBnYiwgZ2JfbGVuKTtcbm5ldC9uZmMvY29yZS5jLTY0NC19XG4tLVxubmV0L25mYy9jb3JlLmM9NjQ3PXU4ICpuZmNfZ2V0X2xvY2FsX2dlbmVyYWxfYnl0ZXMoc3RydWN0IG5mY19kZXYgKmRldiwgc2l6ZV90ICpnYl9sZW4pXG4tLVxubmV0L25mYy9jb3JlLmMtNjUwLVxubmV0L25mYy9jb3JlLmM6NjUxOlx0cmV0dXJuIG5mY19sbGNwX2dlbmVyYWxfYnl0ZXMoZGV2LCBnYl9sZW4pO1xubmV0L25mYy9jb3JlLmMtNjUyLX1cbi0tXG5uZXQvbmZjL2NvcmUuYz02NTU9aW50IG5mY190bV9kYXRhX3JlY2VpdmVkKHN0cnVjdCBuZmNfZGV2ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L25mYy9jb3JlLmMtNjYyLVxubmV0L25mYy9jb3JlLmM6NjYzOlx0cmV0dXJuIG5mY19sbGNwX2RhdGFfcmVjZWl2ZWQoZGV2LCBza2IpO1xubmV0L25mYy9jb3JlLmMtNjY0LX1cbi0tXG5uZXQvbmZjL2NvcmUuYz0xMTEwPWludCBuZmNfcmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCBuZmNfZGV2ICpkZXYpXG4tLVxubmV0L25mYy9jb3JlLmMtMTEyMy1cbm5ldC9uZmMvY29yZS5jOjExMjQ6XHRyYyA9IG5mY19sbGNwX3JlZ2lzdGVyX2RldmljZShkZXYpO1xubmV0L25mYy9jb3JlLmMtMTEyNS1cdGlmIChyYylcbi0tXG5uZXQvbmZjL2NvcmUuYz0xMTg2PXZvaWQgbmZjX3JlbW92ZV9kZXZpY2Uoc3RydWN0IG5mY19kZXYgKmRldilcbi0tXG5uZXQvbmZjL2NvcmUuYy0xMTkyLVxubmV0L25mYy9jb3JlLmM6MTE5MzpcdG5mY19sbGNwX3VucmVnaXN0ZXJfZGV2aWNlKGRldik7XG5uZXQvbmZjL2NvcmUuYy0xMTk0LVxuLS1cbm5ldC9uZmMvY29yZS5jPTEyMTQ9c3RhdGljIGludCBfX2luaXQgbmZjX2luaXQodm9pZClcbi0tXG5uZXQvbmZjL2NvcmUuYy0xMjM0LVxubmV0L25mYy9jb3JlLmM6MTIzNTpcdHJjID0gbmZjX2xsY3BfaW5pdCgpO1xubmV0L25mYy9jb3JlLmMtMTIzNi1cdGlmIChyYylcbi0tXG5uZXQvbmZjL2NvcmUuYy0xMjQ1LWVycl9hZl9uZmM6XG5uZXQvbmZjL2NvcmUuYzoxMjQ2Olx0bmZjX2xsY3BfZXhpdCgpO1xubmV0L25mYy9jb3JlLmMtMTI0Ny1lcnJfbGxjcF9zb2NrOlxuLS1cbm5ldC9uZmMvY29yZS5jPTEyNTY9c3RhdGljIHZvaWQgX19leGl0IG5mY19leGl0KHZvaWQpXG4tLVxubmV0L25mYy9jb3JlLmMtMTI1OC1cdGFmX25mY19leGl0KCk7XG5uZXQvbmZjL2NvcmUuYzoxMjU5Olx0bmZjX2xsY3BfZXhpdCgpO1xubmV0L25mYy9jb3JlLmMtMTI2MC1cdHJhd3NvY2tfZXhpdCgpO1xuLS1cbm5ldC9uZmMvbGxjcC5oPTY9ZW51bSBsbGNwX3N0YXRlIHtcbi0tXG5uZXQvbmZjL2xsY3AuaC0yOS1cbm5ldC9uZmMvbGxjcC5oOjMwOnN0cnVjdCBuZmNfbGxjcF9zb2NrO1xubmV0L25mYy9sbGNwLmgtMzEtXG5uZXQvbmZjL2xsY3AuaD0zMj1zdHJ1Y3QgbGxjcF9zb2NrX2xpc3Qge1xuLS1cbm5ldC9uZmMvbGxjcC5oLTM2LVxubmV0L25mYy9sbGNwLmg6Mzc6c3RydWN0IG5mY19sbGNwX3NkcF90bHYge1xubmV0L25mYy9sbGNwLmgtMzgtXHR1OCAqdGx2O1xuLS1cbm5ldC9uZmMvbGxjcC5oLTQ5LVxubmV0L25mYy9sbGNwLmg6NTA6c3RydWN0IG5mY19sbGNwX2xvY2FsIHtcbm5ldC9uZmMvbGxjcC5oLTUxLVx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xuLS1cbm5ldC9uZmMvbGxjcC5oLTEwMi1cbm5ldC9uZmMvbGxjcC5oOjEwMzpzdHJ1Y3QgbmZjX2xsY3Bfc29jayB7XG5uZXQvbmZjL2xsY3AuaC0xMDQtXHRzdHJ1Y3Qgc29jayBzaztcbm5ldC9uZmMvbGxjcC5oLTEwNS1cdHN0cnVjdCBuZmNfZGV2ICpkZXY7XG5uZXQvbmZjL2xsY3AuaDoxMDY6XHRzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsO1xubmV0L25mYy9sbGNwLmgtMTA3LVx0dTMyIHRhcmdldF9pZHg7XG4tLVxubmV0L25mYy9sbGNwLmgtMTQxLVxubmV0L25mYy9sbGNwLmg6MTQyOnN0cnVjdCBuZmNfbGxjcF91aV9jYiB7XG5uZXQvbmZjL2xsY3AuaC0xNDMtXHRfX3U4IGRzYXA7XG4tLVxubmV0L25mYy9sbGNwLmgtMTQ2LVxubmV0L25mYy9sbGNwLmg6MTQ3OiNkZWZpbmUgbmZjX2xsY3BfdWlfc2tiX2NiKF9fc2tiKSAoKHN0cnVjdCBuZmNfbGxjcF91aV9jYiAqKVx1MDAyNigoX19za2IpLVx1MDAzZWNiWzBdKSlcbm5ldC9uZmMvbGxjcC5oLTE0OC1cbm5ldC9uZmMvbGxjcC5oOjE0OTojZGVmaW5lIG5mY19sbGNwX3NvY2soc2spICgoc3RydWN0IG5mY19sbGNwX3NvY2sgKikgKHNrKSlcbm5ldC9uZmMvbGxjcC5oOjE1MDojZGVmaW5lIG5mY19sbGNwX2RldihzaykgIChuZmNfbGxjcF9zb2NrKChzaykpLVx1MDAzZWRldilcbm5ldC9uZmMvbGxjcC5oLTE1MS1cbi0tXG5uZXQvbmZjL2xsY3AuaC0yMDAtXG5uZXQvbmZjL2xsY3AuaDoyMDE6dm9pZCBuZmNfbGxjcF9zb2NrX2xpbmsoc3RydWN0IGxsY3Bfc29ja19saXN0ICpsLCBzdHJ1Y3Qgc29jayAqcyk7XG5uZXQvbmZjL2xsY3AuaDoyMDI6dm9pZCBuZmNfbGxjcF9zb2NrX3VubGluayhzdHJ1Y3QgbGxjcF9zb2NrX2xpc3QgKmwsIHN0cnVjdCBzb2NrICpzKTtcbm5ldC9uZmMvbGxjcC5oOjIwMzp2b2lkIG5mY19sbGNwX3NvY2tldF9yZW1vdGVfcGFyYW1faW5pdChzdHJ1Y3QgbmZjX2xsY3Bfc29jayAqc29jayk7XG5uZXQvbmZjL2xsY3AuaDoyMDQ6c3RydWN0IG5mY19sbGNwX2xvY2FsICpuZmNfbGxjcF9maW5kX2xvY2FsKHN0cnVjdCBuZmNfZGV2ICpkZXYpO1xubmV0L25mYy9sbGNwLmg6MjA1OmludCBuZmNfbGxjcF9sb2NhbF9wdXQoc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCk7XG5uZXQvbmZjL2xsY3AuaDoyMDY6dTggbmZjX2xsY3BfZ2V0X3NkcF9zc2FwKHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwsXG5uZXQvbmZjL2xsY3AuaDoyMDc6XHRcdFx0IHN0cnVjdCBuZmNfbGxjcF9zb2NrICpzb2NrKTtcbm5ldC9uZmMvbGxjcC5oOjIwODp1OCBuZmNfbGxjcF9nZXRfbG9jYWxfc3NhcChzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsKTtcbm5ldC9uZmMvbGxjcC5oOjIwOTp2b2lkIG5mY19sbGNwX3B1dF9zc2FwKHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwsIHU4IHNzYXApO1xubmV0L25mYy9sbGNwLmg6MjEwOmludCBuZmNfbGxjcF9xdWV1ZV9pX2ZyYW1lcyhzdHJ1Y3QgbmZjX2xsY3Bfc29jayAqc29jayk7XG5uZXQvbmZjL2xsY3AuaDoyMTE6dm9pZCBuZmNfbGxjcF9zZW5kX3RvX3Jhd19zb2NrKHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwsXG5uZXQvbmZjL2xsY3AuaC0yMTItXHRcdFx0ICAgICAgIHN0cnVjdCBza19idWZmICpza2IsIHU4IGRpcmVjdGlvbik7XG4tLVxubmV0L25mYy9sbGNwLmgtMjE0LS8qIFNvY2sgQVBJICovXG5uZXQvbmZjL2xsY3AuaDoyMTU6c3RydWN0IHNvY2sgKm5mY19sbGNwX3NvY2tfYWxsb2Moc3RydWN0IHNvY2tldCAqc29jaywgaW50IHR5cGUsIGdmcF90IGdmcCwgaW50IGtlcm4pO1xubmV0L25mYy9sbGNwLmg6MjE2OnZvaWQgbmZjX2xsY3Bfc29ja19mcmVlKHN0cnVjdCBuZmNfbGxjcF9zb2NrICpzb2NrKTtcbm5ldC9uZmMvbGxjcC5oOjIxNzp2b2lkIG5mY19sbGNwX2FjY2VwdF91bmxpbmsoc3RydWN0IHNvY2sgKnNrKTtcbm5ldC9uZmMvbGxjcC5oOjIxODp2b2lkIG5mY19sbGNwX2FjY2VwdF9lbnF1ZXVlKHN0cnVjdCBzb2NrICpwYXJlbnQsIHN0cnVjdCBzb2NrICpzayk7XG5uZXQvbmZjL2xsY3AuaDoyMTk6c3RydWN0IHNvY2sgKm5mY19sbGNwX2FjY2VwdF9kZXF1ZXVlKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2tldCAqbmV3c29jayk7XG5uZXQvbmZjL2xsY3AuaC0yMjAtXG5uZXQvbmZjL2xsY3AuaC0yMjEtLyogVExWIEFQSSAqL1xubmV0L25mYy9sbGNwLmg6MjIyOmludCBuZmNfbGxjcF9wYXJzZV9nYl90bHYoc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCxcbm5ldC9uZmMvbGxjcC5oLTIyMy1cdFx0XHQgIGNvbnN0IHU4ICp0bHZfYXJyYXksIHUxNiB0bHZfYXJyYXlfbGVuKTtcbm5ldC9uZmMvbGxjcC5oOjIyNDppbnQgbmZjX2xsY3BfcGFyc2VfY29ubmVjdGlvbl90bHYoc3RydWN0IG5mY19sbGNwX3NvY2sgKnNvY2ssXG5uZXQvbmZjL2xsY3AuaC0yMjUtXHRcdFx0XHQgIGNvbnN0IHU4ICp0bHZfYXJyYXksIHUxNiB0bHZfYXJyYXlfbGVuKTtcbi0tXG5uZXQvbmZjL2xsY3AuaC0yMjctLyogQ29tbWFuZHMgQVBJICovXG5uZXQvbmZjL2xsY3AuaDoyMjg6dm9pZCBuZmNfbGxjcF9yZWN2KHZvaWQgKmRhdGEsIHN0cnVjdCBza19idWZmICpza2IsIGludCBlcnIpO1xubmV0L25mYy9sbGNwLmg6MjI5OnU4ICpuZmNfbGxjcF9idWlsZF90bHYodTggdHlwZSwgY29uc3QgdTggKnZhbHVlLCB1OCB2YWx1ZV9sZW5ndGgsIHU4ICp0bHZfbGVuZ3RoKTtcbm5ldC9uZmMvbGxjcC5oOjIzMDpzdHJ1Y3QgbmZjX2xsY3Bfc2RwX3RsdiAqbmZjX2xsY3BfYnVpbGRfc2RyZXNfdGx2KHU4IHRpZCwgdTggc2FwKTtcbm5ldC9uZmMvbGxjcC5oOjIzMTpzdHJ1Y3QgbmZjX2xsY3Bfc2RwX3RsdiAqbmZjX2xsY3BfYnVpbGRfc2RyZXFfdGx2KHU4IHRpZCwgY29uc3QgY2hhciAqdXJpLFxubmV0L25mYy9sbGNwLmgtMjMyLVx0XHRcdFx0XHRcdCAgc2l6ZV90IHVyaV9sZW4pO1xubmV0L25mYy9sbGNwLmg6MjMzOnZvaWQgbmZjX2xsY3BfZnJlZV9zZHBfdGx2KHN0cnVjdCBuZmNfbGxjcF9zZHBfdGx2ICpzZHApO1xubmV0L25mYy9sbGNwLmg6MjM0OnZvaWQgbmZjX2xsY3BfZnJlZV9zZHBfdGx2X2xpc3Qoc3RydWN0IGhsaXN0X2hlYWQgKnNkcF9oZWFkKTtcbm5ldC9uZmMvbGxjcC5oOjIzNTp2b2lkIG5mY19sbGNwX3JlY3Yodm9pZCAqZGF0YSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGVycik7XG5uZXQvbmZjL2xsY3AuaDoyMzY6aW50IG5mY19sbGNwX3NlbmRfc3ltbShzdHJ1Y3QgbmZjX2RldiAqZGV2KTtcbm5ldC9uZmMvbGxjcC5oOjIzNzppbnQgbmZjX2xsY3Bfc2VuZF9jb25uZWN0KHN0cnVjdCBuZmNfbGxjcF9zb2NrICpzb2NrKTtcbm5ldC9uZmMvbGxjcC5oOjIzODppbnQgbmZjX2xsY3Bfc2VuZF9jYyhzdHJ1Y3QgbmZjX2xsY3Bfc29jayAqc29jayk7XG5uZXQvbmZjL2xsY3AuaDoyMzk6aW50IG5mY19sbGNwX3NlbmRfc25sX3NkcmVzKHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwsXG5uZXQvbmZjL2xsY3AuaC0yNDAtXHRcdFx0ICAgIHN0cnVjdCBobGlzdF9oZWFkICp0bHZfbGlzdCwgc2l6ZV90IHRsdnNfbGVuKTtcbm5ldC9uZmMvbGxjcC5oOjI0MTppbnQgbmZjX2xsY3Bfc2VuZF9zbmxfc2RyZXEoc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCxcbm5ldC9uZmMvbGxjcC5oLTI0Mi1cdFx0XHQgICAgc3RydWN0IGhsaXN0X2hlYWQgKnRsdl9saXN0LCBzaXplX3QgdGx2c19sZW4pO1xubmV0L25mYy9sbGNwLmg6MjQzOmludCBuZmNfbGxjcF9zZW5kX2RtKHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwsIHU4IHNzYXAsIHU4IGRzYXAsIHU4IHJlYXNvbik7XG5uZXQvbmZjL2xsY3AuaDoyNDQ6aW50IG5mY19sbGNwX3NlbmRfZGlzY29ubmVjdChzdHJ1Y3QgbmZjX2xsY3Bfc29jayAqc29jayk7XG5uZXQvbmZjL2xsY3AuaDoyNDU6aW50IG5mY19sbGNwX3NlbmRfaV9mcmFtZShzdHJ1Y3QgbmZjX2xsY3Bfc29jayAqc29jayxcbm5ldC9uZmMvbGxjcC5oLTI0Ni1cdFx0XHQgIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbik7XG5uZXQvbmZjL2xsY3AuaDoyNDc6aW50IG5mY19sbGNwX3NlbmRfdWlfZnJhbWUoc3RydWN0IG5mY19sbGNwX3NvY2sgKnNvY2ssIHU4IHNzYXAsIHU4IGRzYXAsXG5uZXQvbmZjL2xsY3AuaC0yNDgtXHRcdFx0ICAgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKTtcbm5ldC9uZmMvbGxjcC5oOjI0OTppbnQgbmZjX2xsY3Bfc2VuZF9ycihzdHJ1Y3QgbmZjX2xsY3Bfc29jayAqc29jayk7XG5uZXQvbmZjL2xsY3AuaC0yNTAtXG5uZXQvbmZjL2xsY3AuaC0yNTEtLyogU29ja2V0IEFQSSAqL1xubmV0L25mYy9sbGNwLmg6MjUyOmludCBfX2luaXQgbmZjX2xsY3Bfc29ja19pbml0KHZvaWQpO1xubmV0L25mYy9sbGNwLmg6MjUzOnZvaWQgbmZjX2xsY3Bfc29ja19leGl0KHZvaWQpO1xuLS1cbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jPTc0PXN0YXRpYyB1OCBsbGNwX3Rsdl9ydyhjb25zdCB1OCAqdGx2KVxuLS1cbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTc4LVxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmM6Nzk6dTggKm5mY19sbGNwX2J1aWxkX3Rsdih1OCB0eXBlLCBjb25zdCB1OCAqdmFsdWUsIHU4IHZhbHVlX2xlbmd0aCwgdTggKnRsdl9sZW5ndGgpXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy04MC17XG4tLVxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtMTA1LVxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmM6MTA2OnN0cnVjdCBuZmNfbGxjcF9zZHBfdGx2ICpuZmNfbGxjcF9idWlsZF9zZHJlc190bHYodTggdGlkLCB1OCBzYXApXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy0xMDcte1xubmV0L25mYy9sbGNwX2NvbW1hbmRzLmM6MTA4Olx0c3RydWN0IG5mY19sbGNwX3NkcF90bHYgKnNkcmVzO1xubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtMTA5LVx0dTggdmFsdWVbMl07XG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy0xMTAtXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYzoxMTE6XHRzZHJlcyA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBuZmNfbGxjcF9zZHBfdGx2KTtcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTExMi1cdGlmIChzZHJlcyA9PSBOVUxMKVxuLS1cbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTExNy1cbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jOjExODpcdHNkcmVzLVx1MDAzZXRsdiA9IG5mY19sbGNwX2J1aWxkX3RsdihMTENQX1RMVl9TRFJFUywgdmFsdWUsIDIsXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy0xMTktXHRcdFx0XHRcdFx1MDAyNnNkcmVzLVx1MDAzZXRsdl9sZW4pO1xuLS1cbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTEzMi1cbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jOjEzMzpzdHJ1Y3QgbmZjX2xsY3Bfc2RwX3RsdiAqbmZjX2xsY3BfYnVpbGRfc2RyZXFfdGx2KHU4IHRpZCwgY29uc3QgY2hhciAqdXJpLFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtMTM0LVx0XHRcdFx0XHRcdCAgc2l6ZV90IHVyaV9sZW4pXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy0xMzUte1xubmV0L25mYy9sbGNwX2NvbW1hbmRzLmM6MTM2Olx0c3RydWN0IG5mY19sbGNwX3NkcF90bHYgKnNkcmVxO1xubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtMTM3LVxuLS1cbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTE0My1cbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jOjE0NDpcdHNkcmVxID0ga3phbGxvY19vYmooc3RydWN0IG5mY19sbGNwX3NkcF90bHYpO1xubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtMTQ1LVx0aWYgKHNkcmVxID09IE5VTEwpXG4tLVxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtMTczLVxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmM6MTc0OnZvaWQgbmZjX2xsY3BfZnJlZV9zZHBfdGx2KHN0cnVjdCBuZmNfbGxjcF9zZHBfdGx2ICpzZHApXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy0xNzUte1xuLS1cbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTE3OS1cbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jOjE4MDp2b2lkIG5mY19sbGNwX2ZyZWVfc2RwX3Rsdl9saXN0KHN0cnVjdCBobGlzdF9oZWFkICpoZWFkKVxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtMTgxLXtcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jOjE4MjpcdHN0cnVjdCBuZmNfbGxjcF9zZHBfdGx2ICpzZHA7XG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy0xODMtXHRzdHJ1Y3QgaGxpc3Rfbm9kZSAqbjtcbi0tXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy0xODctXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYzoxODg6XHRcdG5mY19sbGNwX2ZyZWVfc2RwX3RsdihzZHApO1xubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtMTg5LVx0fVxuLS1cbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTE5MS1cbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jOjE5MjppbnQgbmZjX2xsY3BfcGFyc2VfZ2JfdGx2KHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwsXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy0xOTMtXHRcdFx0ICBjb25zdCB1OCAqdGx2X2FycmF5LCB1MTYgdGx2X2FycmF5X2xlbilcbi0tXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy0yNDgtXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYzoyNDk6aW50IG5mY19sbGNwX3BhcnNlX2Nvbm5lY3Rpb25fdGx2KHN0cnVjdCBuZmNfbGxjcF9zb2NrICpzb2NrLFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtMjUwLVx0XHRcdFx0ICBjb25zdCB1OCAqdGx2X2FycmF5LCB1MTYgdGx2X2FycmF5X2xlbilcbi0tXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYz0zMTQ9c3RhdGljIHN0cnVjdCBza19idWZmICpsbGNwX2FkZF90bHYoc3RydWN0IHNrX2J1ZmYgKnBkdSwgY29uc3QgdTggKnRsdixcbi0tXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy0zMjYtXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYzozMjc6c3RhdGljIHN0cnVjdCBza19idWZmICpsbGNwX2FsbG9jYXRlX3BkdShzdHJ1Y3QgbmZjX2xsY3Bfc29jayAqc29jayxcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTMyOC1cdFx0XHRcdFx0IHU4IGNtZCwgdTE2IHNpemUpXG4tLVxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtMzQ3LVxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmM6MzQ4OmludCBuZmNfbGxjcF9zZW5kX2Rpc2Nvbm5lY3Qoc3RydWN0IG5mY19sbGNwX3NvY2sgKnNvY2spXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy0zNDkte1xuLS1cbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTM1MS1cdHN0cnVjdCBuZmNfZGV2ICpkZXY7XG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYzozNTI6XHRzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsO1xubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtMzUzLVxuLS1cbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTM3MC1cbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jOjM3MTppbnQgbmZjX2xsY3Bfc2VuZF9zeW1tKHN0cnVjdCBuZmNfZGV2ICpkZXYpXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy0zNzIte1xubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtMzczLVx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jOjM3NDpcdHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWw7XG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy0zNzUtXHR1MTYgc2l6ZSA9IDA7XG4tLVxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtMzc3LVxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmM6Mzc4Olx0bG9jYWwgPSBuZmNfbGxjcF9maW5kX2xvY2FsKGRldik7XG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy0zNzktXHRpZiAobG9jYWwgPT0gTlVMTClcbi0tXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy0zOTYtXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYzozOTc6XHRuZmNfbGxjcF9zZW5kX3RvX3Jhd19zb2NrKGxvY2FsLCBza2IsIE5GQ19ESVJFQ1RJT05fVFgpO1xubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtMzk4LVxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtMzk5LVx0ZXJyID0gbmZjX2RhdGFfZXhjaGFuZ2UoZGV2LCBsb2NhbC1cdTAwM2V0YXJnZXRfaWR4LCBza2IsXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYzo0MDA6XHRcdFx0XHQgbmZjX2xsY3BfcmVjdiwgbG9jYWwpO1xubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtNDAxLW91dDpcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jOjQwMjpcdG5mY19sbGNwX2xvY2FsX3B1dChsb2NhbCk7XG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy00MDMtXHRyZXR1cm4gZXJyO1xuLS1cbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTQwNS1cbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jOjQwNjppbnQgbmZjX2xsY3Bfc2VuZF9jb25uZWN0KHN0cnVjdCBuZmNfbGxjcF9zb2NrICpzb2NrKVxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtNDA3LXtcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jOjQwODpcdHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWw7XG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy00MDktXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuLS1cbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTQyMy1cdGlmIChzb2NrLVx1MDAzZXNlcnZpY2VfbmFtZSAhPSBOVUxMKSB7XG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYzo0MjQ6XHRcdHNlcnZpY2VfbmFtZV90bHYgPSBuZmNfbGxjcF9idWlsZF90bHYoTExDUF9UTFZfU04sXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy00MjUtXHRcdFx0XHRcdFx0ICAgICAgc29jay1cdTAwM2VzZXJ2aWNlX25hbWUsXG4tLVxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtNDM5LVxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmM6NDQwOlx0bWl1eF90bHYgPSBuZmNfbGxjcF9idWlsZF90bHYoTExDUF9UTFZfTUlVWCwgKHU4ICopXHUwMDI2bWl1eCwgMCxcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTQ0MS1cdFx0XHRcdCAgICAgIFx1MDAyNm1pdXhfdGx2X2xlbmd0aCk7XG4tLVxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtNDQ3LVxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmM6NDQ4Olx0cndfdGx2ID0gbmZjX2xsY3BfYnVpbGRfdGx2KExMQ1BfVExWX1JXLCBcdTAwMjZydywgMCwgXHUwMDI2cndfdGx2X2xlbmd0aCk7XG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy00NDktXHRpZiAoIXJ3X3Rsdikge1xuLS1cbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTQ4MS1cbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jOjQ4MjppbnQgbmZjX2xsY3Bfc2VuZF9jYyhzdHJ1Y3QgbmZjX2xsY3Bfc29jayAqc29jaylcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTQ4My17XG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYzo0ODQ6XHRzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsO1xubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtNDg1LVx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbi0tXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy01MDEtXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYzo1MDI6XHRtaXV4X3RsdiA9IG5mY19sbGNwX2J1aWxkX3RsdihMTENQX1RMVl9NSVVYLCAodTggKilcdTAwMjZtaXV4LCAwLFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtNTAzLVx0XHRcdFx0ICAgICAgXHUwMDI2bWl1eF90bHZfbGVuZ3RoKTtcbi0tXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy01MDktXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYzo1MTA6XHRyd190bHYgPSBuZmNfbGxjcF9idWlsZF90bHYoTExDUF9UTFZfUlcsIFx1MDAyNnJ3LCAwLCBcdTAwMjZyd190bHZfbGVuZ3RoKTtcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTUxMS1cdGlmICghcndfdGx2KSB7XG4tLVxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtNTM5LVxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmM6NTQwOnN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqbmZjX2xsY3BfYWxsb2NhdGVfc25sKHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwsXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy01NDEtXHRcdFx0XHRcdCAgICAgc2l6ZV90IHRsdl9sZW5ndGgpXG4tLVxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtNTY4LVxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmM6NTY5OmludCBuZmNfbGxjcF9zZW5kX3NubF9zZHJlcyhzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsLFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtNTcwLVx0XHRcdCAgICBzdHJ1Y3QgaGxpc3RfaGVhZCAqdGx2X2xpc3QsIHNpemVfdCB0bHZzX2xlbilcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTU3MS17XG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYzo1NzI6XHRzdHJ1Y3QgbmZjX2xsY3Bfc2RwX3RsdiAqc2RwO1xubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtNTczLVx0c3RydWN0IGhsaXN0X25vZGUgKm47XG4tLVxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtNTc1LVxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmM6NTc2Olx0c2tiID0gbmZjX2xsY3BfYWxsb2NhdGVfc25sKGxvY2FsLCB0bHZzX2xlbik7XG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy01NzctXHRpZiAoSVNfRVJSKHNrYikpXG4tLVxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtNTg0LVxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmM6NTg1Olx0XHRuZmNfbGxjcF9mcmVlX3NkcF90bHYoc2RwKTtcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTU4Ni1cdH1cbi0tXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy01OTItXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYzo1OTM6aW50IG5mY19sbGNwX3NlbmRfc25sX3NkcmVxKHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwsXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy01OTQtXHRcdFx0ICAgIHN0cnVjdCBobGlzdF9oZWFkICp0bHZfbGlzdCwgc2l6ZV90IHRsdnNfbGVuKVxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtNTk1LXtcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jOjU5NjpcdHN0cnVjdCBuZmNfbGxjcF9zZHBfdGx2ICpzZHJlcTtcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTU5Ny1cdHN0cnVjdCBobGlzdF9ub2RlICpuO1xuLS1cbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTU5OS1cbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jOjYwMDpcdHNrYiA9IG5mY19sbGNwX2FsbG9jYXRlX3NubChsb2NhbCwgdGx2c19sZW4pO1xubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtNjAxLVx0aWYgKElTX0VSUihza2IpKVxuLS1cbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTYyNi1cbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jOjYyNzppbnQgbmZjX2xsY3Bfc2VuZF9kbShzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsLCB1OCBzc2FwLCB1OCBkc2FwLCB1OCByZWFzb24pXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy02Mjgte1xuLS1cbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTY1OS1cbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jOjY2MDppbnQgbmZjX2xsY3Bfc2VuZF9pX2ZyYW1lKHN0cnVjdCBuZmNfbGxjcF9zb2NrICpzb2NrLFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtNjYxLVx0XHRcdCAgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKVxuLS1cbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTY2NC1cdHN0cnVjdCBzb2NrICpzayA9IFx1MDAyNnNvY2stXHUwMDNlc2s7XG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYzo2NjU6XHRzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsO1xubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtNjY2LVx0c2l6ZV90IGZyYWdfbGVuID0gMCwgcmVtYWluaW5nX2xlbjtcbi0tXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy03MjktXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYzo3MzA6XHRcdG5mY19sbGNwX3F1ZXVlX2lfZnJhbWVzKHNvY2spO1xubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtNzMxLVxuLS1cbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTc0Mi1cbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jOjc0MzppbnQgbmZjX2xsY3Bfc2VuZF91aV9mcmFtZShzdHJ1Y3QgbmZjX2xsY3Bfc29jayAqc29jaywgdTggc3NhcCwgdTggZHNhcCxcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTc0NC1cdFx0XHQgICBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pXG4tLVxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtNzQ2LVx0c3RydWN0IHNrX2J1ZmYgKnBkdTtcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jOjc0NzpcdHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWw7XG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy03NDgtXHRzaXplX3QgZnJhZ19sZW4gPSAwLCByZW1haW5pbmdfbGVuO1xuLS1cbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTgyMS1cbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jOjgyMjppbnQgbmZjX2xsY3Bfc2VuZF9ycihzdHJ1Y3QgbmZjX2xsY3Bfc29jayAqc29jaylcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTgyMy17XG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy04MjQtXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xubmV0L25mYy9sbGNwX2NvbW1hbmRzLmM6ODI1Olx0c3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbDtcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTgyNi1cbi0tXG5uZXQvbmZjL2xsY3BfY29yZS5jPTIzPXN0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqbGxjcF93cTtcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMjQtXG5uZXQvbmZjL2xsY3BfY29yZS5jOjI1OnN0YXRpYyB2b2lkIG5mY19sbGNwX3J4X3NrYihzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMjYtXG5uZXQvbmZjL2xsY3BfY29yZS5jOjI3OnZvaWQgbmZjX2xsY3Bfc29ja19saW5rKHN0cnVjdCBsbGNwX3NvY2tfbGlzdCAqbCwgc3RydWN0IHNvY2sgKnNrKVxubmV0L25mYy9sbGNwX2NvcmUuYy0yOC17XG4tLVxubmV0L25mYy9sbGNwX2NvcmUuYy0zMy1cbm5ldC9uZmMvbGxjcF9jb3JlLmM6MzQ6dm9pZCBuZmNfbGxjcF9zb2NrX3VubGluayhzdHJ1Y3QgbGxjcF9zb2NrX2xpc3QgKmwsIHN0cnVjdCBzb2NrICpzaylcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMzUte1xuLS1cbm5ldC9uZmMvbGxjcF9jb3JlLmMtNDAtXG5uZXQvbmZjL2xsY3BfY29yZS5jOjQxOnZvaWQgbmZjX2xsY3Bfc29ja2V0X3JlbW90ZV9wYXJhbV9pbml0KHN0cnVjdCBuZmNfbGxjcF9zb2NrICpzb2NrKVxubmV0L25mYy9sbGNwX2NvcmUuYy00Mi17XG4tLVxubmV0L25mYy9sbGNwX2NvcmUuYy00Ni1cbm5ldC9uZmMvbGxjcF9jb3JlLmM6NDc6c3RhdGljIHZvaWQgbmZjX2xsY3Bfc29ja2V0X3B1cmdlKHN0cnVjdCBuZmNfbGxjcF9zb2NrICpzb2NrKVxubmV0L25mYy9sbGNwX2NvcmUuYy00OC17XG5uZXQvbmZjL2xsY3BfY29yZS5jOjQ5Olx0c3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCA9IHNvY2stXHUwMDNlbG9jYWw7XG5uZXQvbmZjL2xsY3BfY29yZS5jLTUwLVx0c3RydWN0IHNrX2J1ZmYgKnMsICp0bXA7XG4tLVxubmV0L25mYy9sbGNwX2NvcmUuYy02Ny1cbm5ldC9uZmMvbGxjcF9jb3JlLmM6Njg6c3RhdGljIHN0cnVjdCBzb2NrICpuZmNfbGxjcF9zb2NrX2xpc3RfcG9wKHN0cnVjdCBsbGNwX3NvY2tfbGlzdCAqbClcbm5ldC9uZmMvbGxjcF9jb3JlLmMtNjkte1xuLS1cbm5ldC9uZmMvbGxjcF9jb3JlLmMtODItXG5uZXQvbmZjL2xsY3BfY29yZS5jOjgzOnN0YXRpYyB2b2lkIG5mY19sbGNwX3NvY2tldF9yZWxlYXNlKHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwsIGJvb2wgZGV2aWNlLFxubmV0L25mYy9sbGNwX2NvcmUuYy04NC1cdFx0XHRcdCAgICBpbnQgZXJyKVxuLS1cbm5ldC9uZmMvbGxjcF9jb3JlLmMtODYtXHRzdHJ1Y3Qgc29jayAqc2s7XG5uZXQvbmZjL2xsY3BfY29yZS5jOjg3Olx0c3RydWN0IG5mY19sbGNwX3NvY2sgKmxsY3Bfc29jaztcbm5ldC9uZmMvbGxjcF9jb3JlLmMtODgtXG4tLVxubmV0L25mYy9sbGNwX2NvcmUuYy05MC1cbm5ldC9uZmMvbGxjcF9jb3JlLmM6OTE6XHR3aGlsZSAoKHNrID0gbmZjX2xsY3Bfc29ja19saXN0X3BvcChcdTAwMjZsb2NhbC1cdTAwM2Vzb2NrZXRzKSkpIHtcbm5ldC9uZmMvbGxjcF9jb3JlLmM6OTI6XHRcdGxsY3Bfc29jayA9IG5mY19sbGNwX3NvY2soc2spO1xubmV0L25mYy9sbGNwX2NvcmUuYy05My1cbi0tXG5uZXQvbmZjL2xsY3BfY29yZS5jLTk1LVxubmV0L25mYy9sbGNwX2NvcmUuYzo5NjpcdFx0bmZjX2xsY3Bfc29ja2V0X3B1cmdlKGxsY3Bfc29jayk7XG5uZXQvbmZjL2xsY3BfY29yZS5jLTk3LVxuLS1cbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTAxLVx0XHRpZiAoc2stXHUwMDNlc2tfc3RhdGUgPT0gTExDUF9MSVNURU4pIHtcbm5ldC9uZmMvbGxjcF9jb3JlLmM6MTAyOlx0XHRcdHN0cnVjdCBuZmNfbGxjcF9zb2NrICpsc2ssICpuO1xubmV0L25mYy9sbGNwX2NvcmUuYy0xMDMtXHRcdFx0c3RydWN0IHNvY2sgKmFjY2VwdF9zaztcbi0tXG5uZXQvbmZjL2xsY3BfY29yZS5jLTExMy1cbm5ldC9uZmMvbGxjcF9jb3JlLmM6MTE0Olx0XHRcdFx0aWYgKG5mY19sbGNwX3NvY2soYWNjZXB0X3NrKS1cdTAwM2VwYXJlbnQgPT0gc2spIHtcbm5ldC9uZmMvbGxjcF9jb3JlLmM6MTE1Olx0XHRcdFx0XHRuZmNfbGxjcF9hY2NlcHRfdW5saW5rKGFjY2VwdF9zayk7XG5uZXQvbmZjL2xsY3BfY29yZS5jOjExNjpcdFx0XHRcdFx0bmZjX2xsY3Bfc29ja191bmxpbmsoXHUwMDI2bG9jYWwtXHUwMDNlc29ja2V0cywgYWNjZXB0X3NrKTtcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTE3LVxuLS1cbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTQ0LVxubmV0L25mYy9sbGNwX2NvcmUuYzoxNDU6XHR3aGlsZSAoKHNrID0gbmZjX2xsY3Bfc29ja19saXN0X3BvcChcdTAwMjZsb2NhbC1cdTAwM2VyYXdfc29ja2V0cykpKSB7XG5uZXQvbmZjL2xsY3BfY29yZS5jOjE0NjpcdFx0bGxjcF9zb2NrID0gbmZjX2xsY3Bfc29jayhzayk7XG5uZXQvbmZjL2xsY3BfY29yZS5jLTE0Ny1cbi0tXG5uZXQvbmZjL2xsY3BfY29yZS5jLTE0OS1cbm5ldC9uZmMvbGxjcF9jb3JlLmM6MTUwOlx0XHRuZmNfbGxjcF9zb2NrZXRfcHVyZ2UobGxjcF9zb2NrKTtcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTUxLVxuLS1cbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTYxLVxubmV0L25mYy9sbGNwX2NvcmUuYzoxNjI6c3RhdGljIHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbmZjX2xsY3BfbG9jYWxfZ2V0KHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwpXG5uZXQvbmZjL2xsY3BfY29yZS5jLTE2My17XG4tLVxubmV0L25mYy9sbGNwX2NvcmUuYy0xNzItXG5uZXQvbmZjL2xsY3BfY29yZS5jOjE3MzpzdGF0aWMgdm9pZCBsb2NhbF9jbGVhbnVwKHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwpXG5uZXQvbmZjL2xsY3BfY29yZS5jLTE3NC17XG5uZXQvbmZjL2xsY3BfY29yZS5jOjE3NTpcdG5mY19sbGNwX3NvY2tldF9yZWxlYXNlKGxvY2FsLCBmYWxzZSwgRU5YSU8pO1xubmV0L25mYy9sbGNwX2NvcmUuYy0xNzYtXHR0aW1lcl9kZWxldGVfc3luYyhcdTAwMjZsb2NhbC1cdTAwM2VsaW5rX3RpbWVyKTtcbi0tXG5uZXQvbmZjL2xsY3BfY29yZS5jLTE4NC1cdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2bG9jYWwtXHUwMDNlc2RyZXFfdGltZW91dF93b3JrKTtcbm5ldC9uZmMvbGxjcF9jb3JlLmM6MTg1Olx0bmZjX2xsY3BfZnJlZV9zZHBfdGx2X2xpc3QoXHUwMDI2bG9jYWwtXHUwMDNlcGVuZGluZ19zZHJlcXMpO1xubmV0L25mYy9sbGNwX2NvcmUuYy0xODYtfVxuLS1cbm5ldC9uZmMvbGxjcF9jb3JlLmM9MTg4PXN0YXRpYyB2b2lkIGxvY2FsX3JlbGVhc2Vfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG5uZXQvbmZjL2xsY3BfY29yZS5jLTE4OS17XG5uZXQvbmZjL2xsY3BfY29yZS5jOjE5MDpcdHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWw7XG5uZXQvbmZjL2xsY3BfY29yZS5jLTE5MS1cdHN0cnVjdCBuZmNfZGV2ICpkZXY7XG5uZXQvbmZjL2xsY3BfY29yZS5jLTE5Mi1cbm5ldC9uZmMvbGxjcF9jb3JlLmM6MTkzOlx0bG9jYWwgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IG5mY19sbGNwX2xvY2FsLCByZWxlYXNlX3dvcmspO1xubmV0L25mYy9sbGNwX2NvcmUuYy0xOTQtXHRkZXYgPSBsb2NhbC1cdTAwM2VkZXY7XG4tLVxubmV0L25mYy9sbGNwX2NvcmUuYz0yMDE9c3RhdGljIHZvaWQgbG9jYWxfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqcmVmKVxubmV0L25mYy9sbGNwX2NvcmUuYy0yMDIte1xubmV0L25mYy9sbGNwX2NvcmUuYzoyMDM6XHRzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsO1xubmV0L25mYy9sbGNwX2NvcmUuYy0yMDQtXG5uZXQvbmZjL2xsY3BfY29yZS5jOjIwNTpcdGxvY2FsID0gY29udGFpbmVyX29mKHJlZiwgc3RydWN0IG5mY19sbGNwX2xvY2FsLCByZWYpO1xubmV0L25mYy9sbGNwX2NvcmUuYy0yMDYtXG4tLVxubmV0L25mYy9sbGNwX2NvcmUuYy0yMDktXG5uZXQvbmZjL2xsY3BfY29yZS5jOjIxMDppbnQgbmZjX2xsY3BfbG9jYWxfcHV0KHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwpXG5uZXQvbmZjL2xsY3BfY29yZS5jLTIxMS17XG4tLVxubmV0L25mYy9sbGNwX2NvcmUuYy0yMTctXG5uZXQvbmZjL2xsY3BfY29yZS5jOjIxODpzdGF0aWMgc3RydWN0IG5mY19sbGNwX3NvY2sgKm5mY19sbGNwX3NvY2tfZ2V0KHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwsXG5uZXQvbmZjL2xsY3BfY29yZS5jLTIxOS1cdFx0XHRcdFx0ICAgICAgIHU4IHNzYXAsIHU4IGRzYXApXG4tLVxubmV0L25mYy9sbGNwX2NvcmUuYy0yMjEtXHRzdHJ1Y3Qgc29jayAqc2s7XG5uZXQvbmZjL2xsY3BfY29yZS5jOjIyMjpcdHN0cnVjdCBuZmNfbGxjcF9zb2NrICpsbGNwX3NvY2ssICp0bXBfc29jaztcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMjIzLVxuLS1cbm5ldC9uZmMvbGxjcF9jb3JlLmMtMjMzLVx0c2tfZm9yX2VhY2goc2ssIFx1MDAyNmxvY2FsLVx1MDAzZXNvY2tldHMuaGVhZCkge1xubmV0L25mYy9sbGNwX2NvcmUuYzoyMzQ6XHRcdHRtcF9zb2NrID0gbmZjX2xsY3Bfc29jayhzayk7XG5uZXQvbmZjL2xsY3BfY29yZS5jLTIzNS1cbi0tXG5uZXQvbmZjL2xsY3BfY29yZS5jLTI0Ny1cbm5ldC9uZmMvbGxjcF9jb3JlLmM6MjQ4OnN0YXRpYyB2b2lkIG5mY19sbGNwX3NvY2tfcHV0KHN0cnVjdCBuZmNfbGxjcF9zb2NrICpzb2NrKVxubmV0L25mYy9sbGNwX2NvcmUuYy0yNDkte1xuLS1cbm5ldC9uZmMvbGxjcF9jb3JlLmMtMjUyLVxubmV0L25mYy9sbGNwX2NvcmUuYzoyNTM6c3RhdGljIHZvaWQgbmZjX2xsY3BfdGltZW91dF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMjU0LXtcbm5ldC9uZmMvbGxjcF9jb3JlLmM6MjU1Olx0c3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwsXG5uZXQvbmZjL2xsY3BfY29yZS5jLTI1Ni1cdFx0XHRcdFx0XHQgICAgdGltZW91dF93b3JrKTtcbi0tXG5uZXQvbmZjL2xsY3BfY29yZS5jLTI2MC1cbm5ldC9uZmMvbGxjcF9jb3JlLmM6MjYxOnN0YXRpYyB2b2lkIG5mY19sbGNwX3N5bW1fdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnQpXG5uZXQvbmZjL2xsY3BfY29yZS5jLTI2Mi17XG5uZXQvbmZjL2xsY3BfY29yZS5jOjI2MzpcdHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwgPSB0aW1lcl9jb250YWluZXJfb2YobG9jYWwsIHQsXG5uZXQvbmZjL2xsY3BfY29yZS5jLTI2NC1cdFx0XHRcdFx0XHRcdCAgbGlua190aW1lcik7XG4tLVxubmV0L25mYy9sbGNwX2NvcmUuYy0yNzAtXG5uZXQvbmZjL2xsY3BfY29yZS5jOjI3MTpzdGF0aWMgdm9pZCBuZmNfbGxjcF9zZHJlcV90aW1lb3V0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxubmV0L25mYy9sbGNwX2NvcmUuYy0yNzIte1xuLS1cbm5ldC9uZmMvbGxjcF9jb3JlLmMtMjc1LVx0c3RydWN0IGhsaXN0X25vZGUgKm47XG5uZXQvbmZjL2xsY3BfY29yZS5jOjI3NjpcdHN0cnVjdCBuZmNfbGxjcF9zZHBfdGx2ICpzZHA7XG5uZXQvbmZjL2xsY3BfY29yZS5jOjI3NzpcdHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IG5mY19sbGNwX2xvY2FsLFxubmV0L25mYy9sbGNwX2NvcmUuYy0yNzgtXHRcdFx0XHRcdFx0ICAgIHNkcmVxX3RpbWVvdXRfd29yayk7XG4tLVxubmV0L25mYy9sbGNwX2NvcmUuYy0zMDQtXG5uZXQvbmZjL2xsY3BfY29yZS5jOjMwNTpzdGF0aWMgdm9pZCBuZmNfbGxjcF9zZHJlcV90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdClcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMzA2LXtcbm5ldC9uZmMvbGxjcF9jb3JlLmM6MzA3Olx0c3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCA9IHRpbWVyX2NvbnRhaW5lcl9vZihsb2NhbCwgdCxcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMzA4LVx0XHRcdFx0XHRcdFx0ICBzZHJlcV90aW1lcik7XG4tLVxubmV0L25mYy9sbGNwX2NvcmUuYy0zMTItXG5uZXQvbmZjL2xsY3BfY29yZS5jOjMxMzpzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKm5mY19sbGNwX2ZpbmRfbG9jYWwoc3RydWN0IG5mY19kZXYgKmRldilcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMzE0LXtcbm5ldC9uZmMvbGxjcF9jb3JlLmM6MzE1Olx0c3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbDtcbm5ldC9uZmMvbGxjcF9jb3JlLmM6MzE2Olx0c3RydWN0IG5mY19sbGNwX2xvY2FsICpyZXMgPSBOVUxMO1xubmV0L25mYy9sbGNwX2NvcmUuYy0zMTctXG4tLVxubmV0L25mYy9sbGNwX2NvcmUuYy0zMjAtXHRcdGlmIChsb2NhbC1cdTAwM2VkZXYgPT0gZGV2KSB7XG5uZXQvbmZjL2xsY3BfY29yZS5jOjMyMTpcdFx0XHRyZXMgPSBuZmNfbGxjcF9sb2NhbF9nZXQobG9jYWwpO1xubmV0L25mYy9sbGNwX2NvcmUuYy0zMjItXHRcdFx0YnJlYWs7XG4tLVxubmV0L25mYy9sbGNwX2NvcmUuYy0zMjgtXG5uZXQvbmZjL2xsY3BfY29yZS5jOjMyOTpzdGF0aWMgc3RydWN0IG5mY19sbGNwX2xvY2FsICpuZmNfbGxjcF9yZW1vdmVfbG9jYWwoc3RydWN0IG5mY19kZXYgKmRldilcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMzMwLXtcbm5ldC9uZmMvbGxjcF9jb3JlLmM6MzMxOlx0c3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCwgKnRtcDtcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMzMyLVxuLS1cbm5ldC9uZmMvbGxjcF9jb3JlLmM9MzQ5PXN0YXRpYyBjaGFyICp3a3NbXSA9IHtcbi0tXG5uZXQvbmZjL2xsY3BfY29yZS5jLTM1Ni1cbm5ldC9uZmMvbGxjcF9jb3JlLmM6MzU3OnN0YXRpYyBpbnQgbmZjX2xsY3Bfd2tzX3NhcChjb25zdCBjaGFyICpzZXJ2aWNlX25hbWUsIHNpemVfdCBzZXJ2aWNlX25hbWVfbGVuKVxubmV0L25mYy9sbGNwX2NvcmUuYy0zNTgte1xuLS1cbm5ldC9uZmMvbGxjcF9jb3JlLmM9Mzc5PXN0YXRpY1xubmV0L25mYy9sbGNwX2NvcmUuYzozODA6c3RydWN0IG5mY19sbGNwX3NvY2sgKm5mY19sbGNwX3NvY2tfZnJvbV9zbihzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsLFxubmV0L25mYy9sbGNwX2NvcmUuYy0zODEtXHRcdFx0XHRcdCAgICBjb25zdCB1OCAqc24sIHNpemVfdCBzbl9sZW4sXG4tLVxubmV0L25mYy9sbGNwX2NvcmUuYy0zODQtXHRzdHJ1Y3Qgc29jayAqc2s7XG5uZXQvbmZjL2xsY3BfY29yZS5jOjM4NTpcdHN0cnVjdCBuZmNfbGxjcF9zb2NrICpsbGNwX3NvY2ssICp0bXBfc29jaztcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMzg2LVxuLS1cbm5ldC9uZmMvbGxjcF9jb3JlLmMtMzk2LVx0c2tfZm9yX2VhY2goc2ssIFx1MDAyNmxvY2FsLVx1MDAzZXNvY2tldHMuaGVhZCkge1xuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA5OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNDYwCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gYG5ldC9uZmMvbGxjcF9zb2NrLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVuZGFtZW50YWwgc29ja2V0IG1lY2hhbmlzbXMgYW5kIG9wZXJhdGlvbnMgZm9yIExMQ1AuIFRoaXMgbWVhbnMgSSYjMzk7bSBsb29raW5nIHNwZWNpZmljYWxseSBhdCB0aGUgZW50cnkgcG9pbnRzIGFuZCB0aGUgdW5kZXJseWluZyBvcGVyYXRpb25zIGRlZmluZWQgd2l0aGluIHRoaXMgZmlsZS4gSSB3YW50IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhlIExMQ1Agc29ja2V0IGxheWVyIGlzIHN0cnVjdHVyZWQsIHdoaWNoIHdpbGwgaGVscCBtZSBzZWUgdGhlIGFyY2hpdGVjdHVyZSBhcyBhIHdob2xlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwOTowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwcm90b19vcHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmZjJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZmMvbGxjcF9zb2NrLmM9ODYzPXN0YXRpYyBpbnQgbGxjcF9zb2NrX3JlY3Ztc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLFxuLS1cbm5ldC9uZmMvbGxjcF9zb2NrLmMtOTUxLVxubmV0L25mYy9sbGNwX3NvY2suYzo5NTI6c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgbGxjcF9zb2NrX29wcyA9IHtcbm5ldC9uZmMvbGxjcF9zb2NrLmMtOTUzLVx0LmZhbWlseSAgICAgICAgID0gUEZfTkZDLFxuLS1cbm5ldC9uZmMvbGxjcF9zb2NrLmMtOTcxLVxubmV0L25mYy9sbGNwX3NvY2suYzo5NzI6c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgbGxjcF9yYXdzb2NrX29wcyA9IHtcbm5ldC9uZmMvbGxjcF9zb2NrLmMtOTczLVx0LmZhbWlseSAgICAgICAgID0gUEZfTkZDLFxuLS1cbm5ldC9uZmMvcmF3c29jay5jPTI1Mj1zdGF0aWMgaW50IHJhd3NvY2tfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXG4tLVxubmV0L25mYy9yYXdzb2NrLmMtMjc4LVxubmV0L25mYy9yYXdzb2NrLmM6Mjc5OnN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHJhd3NvY2tfb3BzID0ge1xubmV0L25mYy9yYXdzb2NrLmMtMjgwLVx0LmZhbWlseSAgICAgICAgID0gUEZfTkZDLFxuLS1cbm5ldC9uZmMvcmF3c29jay5jLTI5Ni1cbm5ldC9uZmMvcmF3c29jay5jOjI5NzpzdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyByYXdzb2NrX3Jhd19vcHMgPSB7XG5uZXQvbmZjL3Jhd3NvY2suYy0yOTgtXHQuZmFtaWx5ICAgICAgICAgPSBQRl9ORkMsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA5OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxOTg1CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgTExDUCBTb2NrZXQgT3BlcmF0aW9ucyoqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSB0YWtpbmcgYSBjbG9zZSBsb29rIGF0IGBsbGNwX3NvY2tfb3BzYC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGhlYWRpbmcgb3ZlciB0byBgbmV0L25mYy9sbGNwX3NvY2suY2AuIEkga25vdyB0aGlzIGlzIHdoZXJlIHRoZSBjb3JlIHNvY2tldCBvcGVyYXRpb25zIGZvciB0aGUgTExDUCBwcm90b2NvbCBhcmUgaW1wbGVtZW50ZWQuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGZ1bmRhbWVudGFsIG1lY2hhbmljcywgYW5kIEkgc3VzcGVjdCB0aGVyZSBtaWdodCBiZSBzb21ldGhpbmcgaW50ZXJlc3RpbmcgdG8gZGlzc2VjdCBpbiB0aGUgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gZGV0YWlscyBoZXJlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3ZlIGdvdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDk6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmZjL2xsY3Bfc29jay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTQ1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQ1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA5NDU6XHRcdC8qIFNPQ0tfU0VRUEFDS0VUOiByZXR1cm4gcmVhbCBsZW5ndGggaWYgTVNHX1RSVU5DIGlzIHNldCAqL1xuIDk0NjpcdFx0aWYgKHNrLVx1MDAzZXNrX3R5cGUgPT0gU09DS19TRVFQQUNLRVQgXHUwMDI2XHUwMDI2IChmbGFncyBcdTAwMjYgTVNHX1RSVU5DKSlcbiA5NDc6XHRcdFx0Y29waWVkID0gcmxlbjtcbiA5NDg6XHRcbiA5NDk6XHRcdHJldHVybiBjb3BpZWQ7XG4gOTUwOlx0fVxuIDk1MTpcdFxuIDk1MjpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIGxsY3Bfc29ja19vcHMgPSB7XG4gOTUzOlx0XHQuZmFtaWx5ICAgICAgICAgPSBQRl9ORkMsXG4gOTU0Olx0XHQub3duZXIgICAgICAgICAgPSBUSElTX01PRFVMRSxcbiA5NTU6XHRcdC5iaW5kICAgICAgICAgICA9IGxsY3Bfc29ja19iaW5kLFxuIDk1NjpcdFx0LmNvbm5lY3QgICAgICAgID0gbGxjcF9zb2NrX2Nvbm5lY3QsXG4gOTU3Olx0XHQucmVsZWFzZSAgICAgICAgPSBsbGNwX3NvY2tfcmVsZWFzZSxcbiA5NTg6XHRcdC5zb2NrZXRwYWlyICAgICA9IHNvY2tfbm9fc29ja2V0cGFpcixcbiA5NTk6XHRcdC5hY2NlcHQgICAgICAgICA9IGxsY3Bfc29ja19hY2NlcHQsXG4gOTYwOlx0XHQuZ2V0bmFtZSAgICAgICAgPSBsbGNwX3NvY2tfZ2V0bmFtZSxcbiA5NjE6XHRcdC5wb2xsICAgICAgICAgICA9IGxsY3Bfc29ja19wb2xsLFxuIDk2MjpcdFx0LmlvY3RsICAgICAgICAgID0gc29ja19ub19pb2N0bCxcbiA5NjM6XHRcdC5saXN0ZW4gICAgICAgICA9IGxsY3Bfc29ja19saXN0ZW4sXG4gOTY0Olx0XHQuc2h1dGRvd24gICAgICAgPSBzb2NrX25vX3NodXRkb3duLFxuIDk2NTpcdFx0LnNldHNvY2tvcHQgICAgID0gbmZjX2xsY3Bfc2V0c29ja29wdCxcbiA5NjY6XHRcdC5nZXRzb2Nrb3B0ICAgICA9IG5mY19sbGNwX2dldHNvY2tvcHQsXG4gOTY3Olx0XHQuc2VuZG1zZyAgICAgICAgPSBsbGNwX3NvY2tfc2VuZG1zZyxcbiA5Njg6XHRcdC5yZWN2bXNnICAgICAgICA9IGxsY3Bfc29ja19yZWN2bXNnLFxuIDk2OTpcdFx0Lm1tYXAgICAgICAgICAgID0gc29ja19ub19tbWFwLFxuIDk3MDpcdH07XG4gOTcxOlx0XG4gOTcyOlx0c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgbGxjcF9yYXdzb2NrX29wcyA9IHtcbiA5NzM6XHRcdC5mYW1pbHkgICAgICAgICA9IFBGX05GQyxcbiA5NzQ6XHRcdC5vd25lciAgICAgICAgICA9IFRISVNfTU9EVUxFLFxuIDk3NTpcdFx0LmJpbmQgICAgICAgICAgID0gbGxjcF9yYXdfc29ja19iaW5kLFxuIDk3NjpcdFx0LmNvbm5lY3QgICAgICAgID0gc29ja19ub19jb25uZWN0LFxuIDk3NzpcdFx0LnJlbGVhc2UgICAgICAgID0gbGxjcF9zb2NrX3JlbGVhc2UsXG4gOTc4Olx0XHQuc29ja2V0cGFpciAgICAgPSBzb2NrX25vX3NvY2tldHBhaXIsXG4gOTc5Olx0XHQuYWNjZXB0ICAgICAgICAgPSBzb2NrX25vX2FjY2VwdCxcbiA5ODA6XHRcdC5nZXRuYW1lICAgICAgICA9IGxsY3Bfc29ja19nZXRuYW1lLFxuIDk4MTpcdFx0LnBvbGwgICAgICAgICAgID0gbGxjcF9zb2NrX3BvbGwsXG4gOTgyOlx0XHQuaW9jdGwgICAgICAgICAgPSBzb2NrX25vX2lvY3RsLFxuIDk4MzpcdFx0Lmxpc3RlbiAgICAgICAgID0gc29ja19ub19saXN0ZW4sXG4gOTg0Olx0XHQuc2h1dGRvd24gICAgICAgPSBzb2NrX25vX3NodXRkb3duLFxuIDk4NTpcdFx0LnNlbmRtc2cgICAgICAgID0gc29ja19ub19zZW5kbXNnLFxuIDk4NjpcdFx0LnJlY3Ztc2cgICAgICAgID0gbGxjcF9zb2NrX3JlY3Ztc2csXG4gOTg3Olx0XHQubW1hcCAgICAgICAgICAgPSBzb2NrX25vX21tYXAsXG4gOTg4Olx0fTtcbiA5ODk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDk6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI5NTcKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoYXQgcXVlcnksIGFzIGFuIGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyBORkMgU29ja2V0IFByb3RvY29sIENyZWF0aW9uKioKCkFscmlnaHQsIG15IGZpcnN0IGluc3RpbmN0IGhlcmUgaXMgdG8gZ2V0IGhhbmRzLW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgdW5kZXJseWluZyBtZWNoYW5pY3Mgb2YgaG93IHRoZXNlIE5GQyBzb2NrZXQgcHJvdG9jb2xzLCBzcGVjaWZpY2FsbHkgYE5GQ19TT0NLUFJPVE9fTExDUGAgYW5kIGBORkNfU09DS1BST1RPX1JBV2AsIGFyZSBhY3R1YWxseSBpbnN0YW50aWF0ZWQuIFNvLCBJJiMzOTttIGdvaW5nIHRvIGhlYWQgc3RyYWlnaHQgZm9yIGBhZl9uZmMuY2AuIFRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7ZCBleHBlY3QgdG8gZmluZCB0aGUgY29yZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCB0aGUgY3JlYXRpb24gcm91dGluZXMsIHRoZSBzb2NrZXQgZmFtaWx5LXNwZWNpZmljIGxvZ2ljLi4uIGFsbCB0aGUganVpY3kgYml0cy4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgY29kZSB0aGF0IGRlZmluZXMgaG93IHRoZXNlIE5GQy1zcGVjaWZpYyBzb2NrZXQgdHlwZXMgYXJlIGJyb3VnaHQgdG8gbGlmZSB3aXRoaW4gdGhlIGtlcm5lbC4gSXQmIzM5O3MgdGltZSB0byBnZXQgYSBnb29kIGdyaXAgb24gdGhlIGxvdy1sZXZlbCBkZXRhaWxzIG9mIHRoZSBzeXN0ZW0mIzM5O3MgTkZDIGNvbW11bmljYXRpb24gbWVjaGFuaXNtcy4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBmdW5jdGlvbiBjYWxscyByZXNwb25zaWJsZSBmb3IgaGFuZGxpbmcgc29ja2V0IGNyZWF0aW9uLCBiaW5kaW5nLCBhbmQgb3RoZXIgcmVsYXRlZCBvcGVyYXRpb25zIHNwZWNpZmljIHRvIHRoZXNlIE5GQyBwcm90b2NvbHMuIEZyb20gdGhlcmUsIEkgY2FuIGFuYWx5emUgaG93IHRoZSBkaWZmZXJlbnQgcHJvdG9jb2xzIGFyZSBoYW5kbGVkIHRvIHVuZGVyc3RhbmQgdGhlaXIgZGlmZmVyZW5jZXMgYW5kIHNpbWlsYXJpdGllcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDk6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TkZDX1NPQ0tQUk9UT19MTENQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25mYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmZjL2xsY3Bfc29jay5jPTEwMDk9c3RydWN0IHNvY2sgKm5mY19sbGNwX3NvY2tfYWxsb2Moc3RydWN0IHNvY2tldCAqc29jaywgaW50IHR5cGUsIGdmcF90IGdmcCwgaW50IGtlcm4pXG4tLVxubmV0L25mYy9sbGNwX3NvY2suYy0xMDIxLVx0c2stXHUwMDNlc2tfc3RhdGUgPSBMTENQX0NMT1NFRDtcbm5ldC9uZmMvbGxjcF9zb2NrLmM6MTAyMjpcdHNrLVx1MDAzZXNrX3Byb3RvY29sID0gTkZDX1NPQ0tQUk9UT19MTENQO1xubmV0L25mYy9sbGNwX3NvY2suYy0xMDIzLVx0c2stXHUwMDNlc2tfdHlwZSA9IHR5cGU7XG4tLVxubmV0L25mYy9sbGNwX3NvY2suYz0xMDg2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZjX3Byb3RvY29sIGxsY3BfbmZjX3Byb3RvID0ge1xubmV0L25mYy9sbGNwX3NvY2suYzoxMDg3Olx0LmlkXHQgID0gTkZDX1NPQ0tQUk9UT19MTENQLFxubmV0L25mYy9sbGNwX3NvY2suYy0xMDg4LVx0LnByb3RvICAgID0gXHUwMDI2bGxjcF9zb2NrX3Byb3RvLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwOTowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzUwOAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDEwOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIHdoYXQgSSYjMzk7bSB0aGlua2luZzoKCioqRXhhbWluaW5nIFNvY2tldCBNYW5hZ2VtZW50IGFuZCBMb2NhbCBEYXRhIEhhbmRsaW5nIGluIExMQ1AqKgoKUmlnaHQsIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBzb2NrZXQgcmVsZWFzZSBhbmQgYWNjZXB0IGZ1bmN0aW9ucyBwbGF5IG91dCBpbiB0aGlzIExMQ1AgaW1wbGVtZW50YXRpb24sIHNwZWNpZmljYWxseSBpbiByZWxhdGlvbiB0byBgbmZjX2xsY3BfbG9jYWxfcHV0YC4gSSB3YW50IGEgY2xlYXIgcGljdHVyZSBvZiB0aGUgY2FsbCBzdGFjayBhbmQgZGF0YSBmbG93IGludm9sdmVkLiBJIHNob3VsZCBsb29rIGNsb3NlbHkgYXQgZW50cnkgcG9pbnRzLCBwYXJ0aWN1bGFybHkgYGxsY3Bfc29ja19hY2NlcHRgLCBgbGxjcF9zb2NrX3JlbGVhc2VgLCBgbmZjX2xsY3BfYWNjZXB0X3VubGlua2AsIGBuZmNfbGxjcF9hY2NlcHRfZGVxdWV1ZWAsIGFuZCBhZ2FpbiwgYG5mY19sbGNwX2xvY2FsX3B1dGAuIFRoZXNlIGFyZSB0aGUga2V5IGZ1bmN0aW9ucyBJIHN1c3BlY3QgYXJlIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBtZWNoYW5pY3MuCgpJIHRoaW5rIGEgZ29vZCBzdGFydGluZyBwb2ludCBpcyB0byBmb2N1cyBvbiBgbGxjcF9zb2NrLmNgLCBzcGVjaWZpY2FsbHkgbGluZXMgMzkwIHRocm91Z2ggNTAwLiBUaGF0IHJhbmdlIHNob3VsZCBjb250YWluIHRoZSByZWxldmFudCBsb2dpYyBmb3IgdGhvc2UgY3JpdGljYWwgZnVuY3Rpb25zLCBhbmQgYnkgcmVhZGluZyB0aGlzIHNlY3Rpb24gY2FyZWZ1bGx5IEkgc2hvdWxkIGJlIGFibGUgdG8gZ2V0IGEgc29saWQgZ3Jhc3Agb2YgaG93IHRoaXMgYWxsIGNvbWVzIHRvZ2V0aGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwOTowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZmMvbGxjcF9zb2NrLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzOTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM5MDpcdHtcbiAzOTE6XHRcdHN0cnVjdCBuZmNfbGxjcF9zb2NrICpsbGNwX3NvY2sgPSBuZmNfbGxjcF9zb2NrKHNrKTtcbiAzOTI6XHRcbiAzOTM6XHRcdHByX2RlYnVnKFwmIzM0O3N0YXRlICVkXFxuXCYjMzQ7LCBzay1cdTAwM2Vza19zdGF0ZSk7XG4gMzk0Olx0XG4gMzk1Olx0XHRpZiAobGxjcF9zb2NrLVx1MDAzZXBhcmVudCkge1xuIDM5NjpcdFx0XHRsaXN0X2RlbF9pbml0KFx1MDAyNmxsY3Bfc29jay1cdTAwM2VhY2NlcHRfcXVldWUpO1xuIDM5NzpcdFx0XHRza19hY2NlcHRxX3JlbW92ZWQobGxjcF9zb2NrLVx1MDAzZXBhcmVudCk7XG4gMzk4Olx0XHRcdGxsY3Bfc29jay1cdTAwM2VwYXJlbnQgPSBOVUxMO1xuIDM5OTpcdFx0XHRzb2NrX3B1dChzayk7XG4gNDAwOlx0XHR9XG4gNDAxOlx0fVxuIDQwMjpcdFxuIDQwMzpcdHZvaWQgbmZjX2xsY3BfYWNjZXB0X2VucXVldWUoc3RydWN0IHNvY2sgKnBhcmVudCwgc3RydWN0IHNvY2sgKnNrKVxuIDQwNDpcdHtcbiA0MDU6XHRcdHN0cnVjdCBuZmNfbGxjcF9zb2NrICpsbGNwX3NvY2sgPSBuZmNfbGxjcF9zb2NrKHNrKTtcbiA0MDY6XHRcdHN0cnVjdCBuZmNfbGxjcF9zb2NrICpsbGNwX3NvY2tfcGFyZW50ID0gbmZjX2xsY3Bfc29jayhwYXJlbnQpO1xuIDQwNzpcdFxuIDQwODpcdFx0LyogTG9jayB3aWxsIGJlIGZyZWUgZnJvbSB1bmxpbmsgKi9cbiA0MDk6XHRcdHNvY2tfaG9sZChzayk7XG4gNDEwOlx0XG4gNDExOlx0XHRsaXN0X2FkZF90YWlsKFx1MDAyNmxsY3Bfc29jay1cdTAwM2VhY2NlcHRfcXVldWUsXG4gNDEyOlx0XHRcdCAgICAgIFx1MDAyNmxsY3Bfc29ja19wYXJlbnQtXHUwMDNlYWNjZXB0X3F1ZXVlKTtcbiA0MTM6XHRcdGxsY3Bfc29jay1cdTAwM2VwYXJlbnQgPSBwYXJlbnQ7XG4gNDE0Olx0XHRza19hY2NlcHRxX2FkZGVkKHBhcmVudCk7XG4gNDE1Olx0fVxuIDQxNjpcdFxuIDQxNzpcdHN0cnVjdCBzb2NrICpuZmNfbGxjcF9hY2NlcHRfZGVxdWV1ZShzdHJ1Y3Qgc29jayAqcGFyZW50LFxuIDQxODpcdFx0XHRcdFx0ICAgICBzdHJ1Y3Qgc29ja2V0ICpuZXdzb2NrKVxuIDQxOTpcdHtcbiA0MjA6XHRcdHN0cnVjdCBuZmNfbGxjcF9zb2NrICpsc2ssICpuLCAqbGxjcF9wYXJlbnQ7XG4gNDIxOlx0XHRzdHJ1Y3Qgc29jayAqc2s7XG4gNDIyOlx0XG4gNDIzOlx0XHRsbGNwX3BhcmVudCA9IG5mY19sbGNwX3NvY2socGFyZW50KTtcbiA0MjQ6XHRcbiA0MjU6XHRcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShsc2ssIG4sIFx1MDAyNmxsY3BfcGFyZW50LVx1MDAzZWFjY2VwdF9xdWV1ZSxcbiA0MjY6XHRcdFx0XHRcdCBhY2NlcHRfcXVldWUpIHtcbiA0Mjc6XHRcdFx0c3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbDtcbiA0Mjg6XHRcbiA0Mjk6XHRcdFx0c2sgPSBcdTAwMjZsc2stXHUwMDNlc2s7XG4gNDMwOlx0XHRcdGxvY2tfc29ja19uZXN0ZWQoc2ssIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTtcbiA0MzE6XHRcbiA0MzI6XHRcdFx0aWYgKHNrLVx1MDAzZXNrX3N0YXRlID09IExMQ1BfQ0xPU0VEKSB7XG4gNDMzOlx0XHRcdFx0bG9jYWwgPSBuZmNfbGxjcF9zb2NrKHNrKS1cdTAwM2Vsb2NhbDtcbiA0MzQ6XHRcbiA0MzU6XHRcdFx0XHRuZmNfbGxjcF9hY2NlcHRfdW5saW5rKHNrKTtcbiA0MzY6XHRcdFx0XHRpZiAobG9jYWwpXG4gNDM3Olx0XHRcdFx0XHRuZmNfbGxjcF9zb2NrX3VubGluayhcdTAwMjZsb2NhbC1cdTAwM2Vzb2NrZXRzLCBzayk7XG4gNDM4Olx0XHRcdFx0c29ja19vcnBoYW4oc2spO1xuIDQzOTpcdFx0XHRcdHJlbGVhc2Vfc29jayhzayk7XG4gNDQwOlx0XHRcdFx0c29ja19wdXQoc2spO1xuIDQ0MTpcdFx0XHRcdGNvbnRpbnVlO1xuIDQ0MjpcdFx0XHR9XG4gNDQzOlx0XG4gNDQ0Olx0XHRcdGlmIChzay1cdTAwM2Vza19zdGF0ZSA9PSBMTENQX0NPTk5FQ1RFRCB8fCAhbmV3c29jaykge1xuIDQ0NTpcdFx0XHRcdGxpc3RfZGVsX2luaXQoXHUwMDI2bHNrLVx1MDAzZWFjY2VwdF9xdWV1ZSk7XG4gNDQ2Olx0XHRcdFx0c29ja19wdXQoc2spO1xuIDQ0NzpcdFxuIDQ0ODpcdFx0XHRcdGlmIChuZXdzb2NrKVxuIDQ0OTpcdFx0XHRcdFx0c29ja19ncmFmdChzaywgbmV3c29jayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA5OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0ODEwCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgRGVlcGVyIGludG8gdGhlIExMQ1AgU29ja2V0IFJlbGVhc2UqKgoKT2theSwgSSYjMzk7dmUgYmVlbiB0cmFjaW5nIHRoaXMgbmV0d29yayBmdW5jdGlvbiwgYW5kIG5vdyBJIG5lZWQgdG8gZXhwYW5kIG15IHZpZXcgYW5kIGNoZWNrIG91dCBgbGxjcF9zb2NrX3JlbGVhc2VgLiBNeSBhbmFseXNpcyBpbmRpY2F0ZXMgaXQmIzM5O3MgbGlrZWx5IHJlc3BvbnNpYmxlIGZvciB0aGUgZ3JhY2VmdWwgc2h1dGRvd24gb2YgdGhlIExMQ1Agc29ja2V0LiBUaGVyZWZvcmUsIHVuZGVyc3RhbmRpbmcgdGhlIHJlbGVhc2UgbWVjaGFuaXNtcyBpcyBjcnVjaWFsLiBJIG5lZWQgdG8gc2VlIGV4YWN0bHkgaG93IHJlc291cmNlcyBhcmUgY2xlYW5lZCB1cCwgdGhlIGRhdGEgc3RydWN0dXJlcyBhcmUgZnJlZWQsIGFuZCBhbnkgcmVsZXZhbnQgc3RhdGUgdHJhbnNpdGlvbnMgYXJlIGhhbmRsZWQgd2hlbiBhIHNvY2tldCBpcyBjbG9zZWQgb3IgZGlzY29ubmVjdGVkLiBJIGV4cGVjdCBpdCB0byBpbnZvbHZlIHJlZmVyZW5jZSBjb3VudGluZywgcG90ZW50aWFsIGxvY2tpbmcvdW5sb2NraW5nLCBhbmQgcGVyaGFwcyB0aGUgc2lnbmFsaW5nIG9mIGNvbXBsZXRpb24gdG8gb3RoZXIgcGFydHMgb2YgdGhlIG5ldHdvcmsgc3RhY2suIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGFuZCBlcnJvciBoYW5kbGluZyB3aXRoaW4gdGhpcyBmdW5jdGlvbiwgYXMgdGhvc2UgY2FuIGJlIHBhcnRpY3VsYXJseSBuYXN0eSBpbiBuZXR3b3JrIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA5OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25mYy9sbGNwX3NvY2suYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjEwOlx0XG4gNjExOlx0XHRwcl9kZWJ1ZyhcJiMzNDttYXNrIDB4JXhcXG5cJiMzNDssIG1hc2spO1xuIDYxMjpcdFxuIDYxMzpcdFx0cmV0dXJuIG1hc2s7XG4gNjE0Olx0fVxuIDYxNTpcdFxuIDYxNjpcdHN0YXRpYyBpbnQgbGxjcF9zb2NrX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jaylcbiA2MTc6XHR7XG4gNjE4Olx0XHRzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLVx1MDAzZXNrO1xuIDYxOTpcdFx0c3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbDtcbiA2MjA6XHRcdHN0cnVjdCBuZmNfbGxjcF9zb2NrICpsbGNwX3NvY2sgPSBuZmNfbGxjcF9zb2NrKHNrKTtcbiA2MjE6XHRcdGludCBlcnIgPSAwO1xuIDYyMjpcdFxuIDYyMzpcdFx0aWYgKCFzaylcbiA2MjQ6XHRcdFx0cmV0dXJuIDA7XG4gNjI1Olx0XG4gNjI2Olx0XHRwcl9kZWJ1ZyhcJiMzNDslcFxcblwmIzM0Oywgc2spO1xuIDYyNzpcdFxuIDYyODpcdFx0bG9jYWwgPSBsbGNwX3NvY2stXHUwMDNlbG9jYWw7XG4gNjI5Olx0XHRpZiAobG9jYWwgPT0gTlVMTCkge1xuIDYzMDpcdFx0XHRlcnIgPSAtRU5PREVWO1xuIDYzMTpcdFx0XHRnb3RvIG91dDtcbiA2MzI6XHRcdH1cbiA2MzM6XHRcbiA2MzQ6XHRcdGxvY2tfc29jayhzayk7XG4gNjM1Olx0XG4gNjM2Olx0XHQvKiBTZW5kIGEgRElTQyAqL1xuIDYzNzpcdFx0aWYgKHNrLVx1MDAzZXNrX3N0YXRlID09IExMQ1BfQ09OTkVDVEVEKVxuIDYzODpcdFx0XHRuZmNfbGxjcF9zZW5kX2Rpc2Nvbm5lY3QobGxjcF9zb2NrKTtcbiA2Mzk6XHRcbiA2NDA6XHRcdGlmIChzay1cdTAwM2Vza19zdGF0ZSA9PSBMTENQX0xJU1RFTikge1xuIDY0MTpcdFx0XHRzdHJ1Y3QgbmZjX2xsY3Bfc29jayAqbHNrLCAqbjtcbiA2NDI6XHRcdFx0c3RydWN0IHNvY2sgKmFjY2VwdF9zaztcbiA2NDM6XHRcbiA2NDQ6XHRcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGxzaywgbiwgXHUwMDI2bGxjcF9zb2NrLVx1MDAzZWFjY2VwdF9xdWV1ZSxcbiA2NDU6XHRcdFx0XHRcdFx0IGFjY2VwdF9xdWV1ZSkge1xuIDY0NjpcdFx0XHRcdGJvb2wgcHV0X2NyZWF0aW9uID0gZmFsc2U7XG4gNjQ3Olx0XG4gNjQ4Olx0XHRcdFx0YWNjZXB0X3NrID0gXHUwMDI2bHNrLVx1MDAzZXNrO1xuIDY0OTpcdFx0XHRcdGxvY2tfc29ja19uZXN0ZWQoYWNjZXB0X3NrLCBTSU5HTEVfREVQVEhfTkVTVElORyk7XG4gNjUwOlx0XG4gNjUxOlx0XHRcdFx0aWYgKG5mY19sbGNwX3NvY2soYWNjZXB0X3NrKS1cdTAwM2VwYXJlbnQgPT0gc2spIHtcbiA2NTI6XHRcdFx0XHRcdG5mY19sbGNwX3NlbmRfZGlzY29ubmVjdChsc2spO1xuIDY1MzpcdFx0XHRcdFx0bmZjX2xsY3BfYWNjZXB0X3VubGluayhhY2NlcHRfc2spO1xuIDY1NDpcdFx0XHRcdFx0bmZjX2xsY3Bfc29ja191bmxpbmsoXHUwMDI2bG9jYWwtXHUwMDNlc29ja2V0cywgYWNjZXB0X3NrKTtcbiA2NTU6XHRcbiA2NTY6XHRcdFx0XHRcdGFjY2VwdF9zay1cdTAwM2Vza19zdGF0ZSA9IExMQ1BfQ0xPU0VEO1xuIDY1NzpcdFx0XHRcdFx0c29ja19vcnBoYW4oYWNjZXB0X3NrKTtcbiA2NTg6XHRcdFx0XHRcdHB1dF9jcmVhdGlvbiA9IHRydWU7XG4gNjU5Olx0XHRcdFx0fVxuIDY2MDpcdFxuIDY2MTpcdFx0XHRcdHJlbGVhc2Vfc29jayhhY2NlcHRfc2spO1xuIDY2MjpcdFx0XHRcdGlmIChwdXRfY3JlYXRpb24pXG4gNjYzOlx0XHRcdFx0XHRzb2NrX3B1dChhY2NlcHRfc2spOyAvKiBjcmVhdGlvbiByZWYgKi9cbiA2NjQ6XHRcdFx0fVxuIDY2NTpcdFx0fVxuIDY2NjpcdFxuIDY2NzpcdFx0aWYgKHNvY2stXHUwMDNldHlwZSA9PSBTT0NLX1JBVylcbiA2Njg6XHRcdFx0bmZjX2xsY3Bfc29ja191bmxpbmsoXHUwMDI2bG9jYWwtXHUwMDNlcmF3X3NvY2tldHMsIHNrKTtcbiA2Njk6XHRcdGVsc2UgaWYgKHNrLVx1MDAzZXNrX3N0YXRlID09IExMQ1BfQ09OTkVDVElORylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDk6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU5MTUKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAyOTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTkZDIFNvY2tldCBQYXRjaCYjMzk7cyBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGlzIGRpdmluZyBpbnRvIHRoZSBoZWFydCBvZiBORkMg4oCTIHNwZWNpZmljYWxseSB0aGUgc29ja2V0IGFuZCBMTENQIGxvZ2ljLCB0b3VjaGluZyBgbGxjcF9jb3JlLmNgIGFuZCBgbGxjcF9zb2NrLmNgLiBHaXZlbiB0aGF0IHN5emthbGxlciwgb3VyIHRydXN0eSB2aXJ0dWFsIGVudmlyb25tZW50LCBpcyBrbm93biB0byBoaXQgdGhlc2UgYXJlYXMgdmlhIE5GQyBzb2NrZXRzLCBuZXRsaW5rLCB2aXJ0dWFsIGRyaXZlcnMsIG9yIGV2ZW4gcmF3IEFGX05GQyBzb2NrZXRzLCBpdCYjMzk7cyBwcmV0dHkgY2xlYXIgdGhhdCB0aGlzIHBhdGNoIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4gVGhlIGBXb3J0aEZ1enppbmdgIGZsYWcgaXMgc2V0IHRvIHRydWU7IG5vIHF1ZXN0aW9uLgoKTm93LCBmb3IgZW5hYmxpbmcgdGhlIHJpZ2h0IGNvbmZpZ3VyYXRpb25zLCBJIG5lZWQgdG8gbWFrZSBzdXJlIHdlIGhhdmUgZXZlcnl0aGluZyBpbiBwbGFjZSB0byB0cmlnZ2VyIHRoZSBjaGFuZ2VzLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3MgZm9yIGBuZXQvbmZjL2AgYW5kIGBsbGNwYC4gTG9va2luZyBpbnRvIGBuZXQvbmZjL0tjb25maWdgLCBJIGNhbiBzZWUgYSBgbWVudWNvbmZpZyBORkNgIGRlcGVuZGVudCBvbiBgUkZLSUxMIHx8ICFSRktJTExgLiBUaGF0IG9uZSBpcyBpbXBvcnRhbnQuIEl0IGFsc28gaW5jbHVkZXMgdGhlIGxpbmUgYG9iai0kKENPTkZJR19ORkMpICYjNDM7PSBuZmMub2Agd2hpY2ggc2VlbXMgdG8gcHVsbCBpbiB0aGUgcmVsZXZhbnQgb2JqZWN0IGZpbGVzLiBEaWdnaW5nIGRlZXBlciBJIGNhbiBzZWUgYG5mYy1vYmpzYCBpbmNsdWRpbmcgYGxsY3BfY29yZS5vYCBhbmQgYGxsY3Bfc29jay5vYCB3aGljaCB3aWxsIG1ha2UgdGhpcyBwYXRjaCBkaXJlY3RseSByZWFjaGFibGUgd2l0aCBgQ09ORklHX05GQ2AuIFdoaWxlIHRoaW5ncyBsaWtlIGBORkNfU0lNYCBvciBgTkZDX0RJR0lUQUxgIG1pZ2h0IGJlIHVzZWZ1bCBpbiBhIHNwZWNpZmljIHNldHVwLCBgQ09ORklHX05GQ2AgbG9va3MgbGlrZSB0aGUgY3JpdGljYWwgb25lIGhlcmUgZm9yIGdldHRpbmcgYXQgdGhlIGNvcmUgY2hhbmdlcyBpbiBgbGxjcF9jb3JlLmNgIGFuZCBgbGxjcF9zb2NrLmNgLiBJIHNob3VsZCBhbHNvIHF1aWNrbHkgY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBvdGhlciByZWxldmFudCBjb25maWdzIGluIGVpdGhlciBgbmV0L25mYy9gIG9yIGBuZXQvS2NvbmZpZ2AgdGhhdCBtaWdodCBpbmZsdWVuY2UgdGhpbmdzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwOTowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzb3VyY2UgXCYjMzQ7bmV0L25mYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvS2NvbmZpZz00NDA9c291cmNlIFwmIzM0O25ldC9jZXBoL0tjb25maWdcJiMzNDtcbm5ldC9LY29uZmlnOjQ0MTpzb3VyY2UgXCYjMzQ7bmV0L25mYy9LY29uZmlnXCYjMzQ7XG5uZXQvS2NvbmZpZy00NDItc291cmNlIFwmIzM0O25ldC9wc2FtcGxlL0tjb25maWdcJiMzNDtcbi0tXG5uZXQvbmZjL0tjb25maWc9MTc9Y29uZmlnIE5GQ19ESUdJVEFMXG4tLVxubmV0L25mYy9LY29uZmlnLTMwLVxubmV0L25mYy9LY29uZmlnOjMxOnNvdXJjZSBcJiMzNDtuZXQvbmZjL25jaS9LY29uZmlnXCYjMzQ7XG5uZXQvbmZjL0tjb25maWc6MzI6c291cmNlIFwmIzM0O25ldC9uZmMvaGNpL0tjb25maWdcJiMzNDtcbm5ldC9uZmMvS2NvbmZpZy0zMy1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDk6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY3NzYKCQkJCQkJCW91dHB1dDogMTU2CgkJCQkJCQl0aG91Z2h0czogMTAwMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipORkMgTExDUCBTb2NrZXQgTWFuYWdlbWVudCBBbmFseXNpcyBmb3IgRnV6emluZyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgTkZDYCBpcyB0aGUga2V5IGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBJIHNlZSBpdCYjMzk7cyBkZWZpbmVkIGluIGBuZXQvbmZjL0tjb25maWdgLCBhbmQgaXQgZGVwZW5kcyBvbiBlaXRoZXIgYFJGS0lMTGAgb3IgdGhlIG5lZ2F0aW9uIG9mIGBSRktJTExgLCB3aGljaCBtYWtlcyBpdCB0aGUgcHJpbWFyeSBjb25maWcuIE5vdyBmb3IgdGhlIGNydWNpYWwgcGFydDogdGhlIHN5bWJvbHMuCgpJJiMzOTt2ZSBnb3QgYSBsaXN0IG9mIGZ1bmN0aW9ucyBhZmZlY3RlZCBieSB0aGlzIHBhdGNoIGFuZCBuZWVkIHRvIGRldGVybWluZSB3aGljaCBvbmVzIGFyZSAqcHJpbWUqIGZ1enppbmcgdGFyZ2V0cy4gSW50ZXJuYWwgc3RhdGljIGhlbHBlcnMgYXJlIG9mdGVuIGlubGluZWQsIHRodXMgbm90IGhhdmluZyBhIHNlcGFyYXRlIHN5bWJvbCBhZGRyZXNzOyB3ZSBkb24mIzM5O3Qgd2FudCB0aG9zZSBpbiBgRm9jdXNTeW1ib2xzYC4gQ29udmVyc2VseSwgZnVuY3Rpb25zIHdpdGggZXh0ZXJuYWwgbGlua2FnZSAqYXJlKiBzZXBhcmF0ZSBlbnRpdGllcyBpbiB0aGUga2VybmVsIGltYWdlLgoKSGVyZSYjMzk7cyB0aGUgYXBwcm9hY2ggSSYjMzk7bSB0YWtpbmc6IEkmIzM5O3ZlIGNhcmVmdWxseSByZXZpZXdlZCB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zIGFjcm9zcyBgbmV0L25mYy9sbGNwX2NvcmUuY2AgYW5kIGBuZXQvbmZjL2xsY3Bfc29jay5jYC4gSSBoYXZlIGRpc3Rpbmd1aXNoZWQgc3RhdGljIHZlcnN1cyBub24tc3RhdGljIGZ1bmN0aW9ucywgYW5kIGlkZW50aWZpZWQgbm9uLXN0YXRpYyBmdW5jdGlvbnMgb2YgaW50ZXJlc3Q6IGBuZmNfbGxjcF9sb2NhbF9wdXRgLCBgbmZjX2xsY3BfYWNjZXB0X3VubGlua2AsIGBuZmNfbGxjcF9hY2NlcHRfZGVxdWV1ZWAsIGBuZmNfbGxjcF9yZWdpc3Rlcl9kZXZpY2VgLCBhbmQgYSBmZXcgc3RhdGljIG9uZXM6IGBsbGNwX3NvY2tfYWNjZXB0YCBhbmQgYGxsY3Bfc29ja19yZWxlYXNlYC4gQWx0aG91Z2ggYGxsY3Bfc29ja19hY2NlcHRgIGFuZCBgbGxjcF9zb2NrX3JlbGVhc2VgIGFyZSBzdGF0aWMsIHRoZXkmIzM5O3JlIHBhcnQgb2YgYHN0cnVjdCBwcm90b19vcHNgIHdoaWNoIG1lYW5zIHRoZWlyIGFkZHJlc3NlcyBhcmUgKmRpc3RpbmN0KiBzeW1ib2xzLgoKQmFzZWQgb24gdGhlIGluc3RydWN0aW9ucywgSSYjMzk7dmUgbmFycm93ZWQgZG93biB0aGUgcmVsZXZhbnQgYEZvY3VzU3ltYm9sc2AgdG86CgoqICAgYG5mY19sbGNwX2FjY2VwdF91bmxpbmtgCiogICBgbmZjX2xsY3BfYWNjZXB0X2RlcXVldWVgCiogICBgbmZjX2xsY3BfbG9jYWxfcHV0YAoqICAgYGxsY3Bfc29ja19hY2NlcHRgCiogICBgbGxjcF9zb2NrX3JlbGVhc2VgCiogICBgbmZjX2xsY3BfcmVnaXN0ZXJfZGV2aWNlYAoKVGhlc2UgZnVuY3Rpb25zIHNlZW0gdGhlIG1vc3QgaW1wb3J0YW50IHRvIHRhcmdldC4KCkZpbmFsbHksIEkgbmVlZCB0byBzZXQgYEVuYWJsZUNvbmZpZ3NgIHRvIGVuc3VyZSB0aGUgTkZDIHN1YnN5c3RlbSBpcyBhY3RpdmUuIEdpdmVuIHRoZSBkZXBlbmRlbmN5IG9uIGBDT05GSUdfTkZDYCBpbiB0aGUga2VybmVsLCBzZXR0aW5nIGBFbmFibGVDb25maWdzYCB0byBgWyYjMzQ7TkZDJiMzNDtdYCBtYWtlcyBwZXJmZWN0IHNlbnNlLiBUaGlzIG1ha2VzIHN1cmUgdGhhdCBgbmV0L25mYy9sbGNwX2NvcmUuY2AgYW5kIGBuZXQvbmZjL2xsY3Bfc29jay5jYCBhcmUgYnVpbHQuCgpMZXQmIzM5O3MgZG8gYSBxdWljayBmaW5hbCByZXZpZXcgdG8gZG91YmxlLWNoZWNrOiBgV29ydGhGdXp6aW5nYCBzaG91bGQgYmUgdHJ1ZS4gVGhlIHJlYXNvbmluZyBzaG91bGQgZXhwbGFpbiB0aGF0IHRoaXMgYWRkcmVzc2VzIHBvdGVudGlhbCBjb25jdXJyZW5jeSBhbmQgcmVmZXJlbmNlLWNvdW50aW5nIGlzc3VlcyBpbiBORkMgTExDUCBzb2NrZXQgbWFuYWdlbWVudCByZWxhdGVkIHRvIGZ1bmN0aW9ucyBhc3NvY2lhdGVkIHdpdGggYWNjZXB0LCBkaXNjb25uZWN0LCBzb2NrZXQgcmVsZWFzZSwgYW5kIGxvY2FsIGRldmljZSB0ZWFyZG93bi4gYEZvY3VzU3ltYm9sc2AgYXJlIG5vbi1ob3QtcGF0aCBrZXJuZWwgZnVuY3Rpb25zLiBBbmQgZmluYWxseSwgYEVuYWJsZUNvbmZpZ3NgIGlzIGp1c3QgYFsmIzM0O05GQyYjMzQ7XWAuCgpPa2F5LCBJJiMzOTttIGNvbmZpZGVudCBpbiB0aGVzZSBmaW5kaW5ncy4gSXQmIzM5O3MgdGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA5OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORkMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZmNfbGxjcF9hY2NlcHRfdW5saW5rJiMzNDssCiAgICAmIzM0O25mY19sbGNwX2FjY2VwdF9kZXF1ZXVlJiMzNDssCiAgICAmIzM0O25mY19sbGNwX2xvY2FsX3B1dCYjMzQ7LAogICAgJiMzNDtsbGNwX3NvY2tfYWNjZXB0JiMzNDssCiAgICAmIzM0O2xsY3Bfc29ja19yZWxlYXNlJiMzNDssCiAgICAmIzM0O25mY19sbGNwX3JlZ2lzdGVyX2RldmljZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZXNvbHZlcyByYWNlIGNvbmRpdGlvbnMsIGltcHJvcGVyIHNvY2tldCBsb2NraW5nLCBhbmQgcmVmZXJlbmNlIGNvdW50aW5nIGlzc3VlcyBpbiB0aGUgTkZDIExMQ1Agc3Vic3lzdGVtIGFjcm9zcyBzb2NrZXQgcmVsZWFzZSwgY29ubmVjdGlvbiBhY2NlcHRhbmNlLCBhbmQgbG9jYWwgZGV2aWNlIHRlYXJkb3duLiBUaGVzZSBjb2RlIHBhdGhzIGFyZSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBBRl9ORkMgc29ja2V0IG9wZXJhdGlvbnMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GQyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25mY19sbGNwX2FjY2VwdF91bmxpbmsmIzM0OywKICAgICYjMzQ7bmZjX2xsY3BfYWNjZXB0X2RlcXVldWUmIzM0OywKICAgICYjMzQ7bmZjX2xsY3BfbG9jYWxfcHV0JiMzNDssCiAgICAmIzM0O2xsY3Bfc29ja19hY2NlcHQmIzM0OywKICAgICYjMzQ7bGxjcF9zb2NrX3JlbGVhc2UmIzM0OywKICAgICYjMzQ7bmZjX2xsY3BfcmVnaXN0ZXJfZGV2aWNlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlc29sdmVzIHJhY2UgY29uZGl0aW9ucywgaW1wcm9wZXIgc29ja2V0IGxvY2tpbmcsIGFuZCByZWZlcmVuY2UgY291bnRpbmcgaXNzdWVzIGluIHRoZSBORkMgTExDUCBzdWJzeXN0ZW0gYWNyb3NzIHNvY2tldCByZWxlYXNlLCBjb25uZWN0aW9uIGFjY2VwdGFuY2UsIGFuZCBsb2NhbCBkZXZpY2UgdGVhcmRvd24uIFRoZXNlIGNvZGUgcGF0aHMgYXJlIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIEFGX05GQyBzb2NrZXQgb3BlcmF0aW9ucyBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDk6MDM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwOTowMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBzb2NrZXQgbGlmZWN5Y2xlIG1hbmFnZW1lbnQsIHJlZmVyZW5jZSBjb3VudGluZywgbG9ja2luZywgYW5kIGFzeW5jaHJvbm91cyBjbGVhbnVwIGluIHRoZSBORkMgTExDUCBzdWJzeXN0ZW0gKG5ldC9uZmMvbGxjcF9jb3JlLmMgYW5kIG5ldC9uZmMvbGxjcF9zb2NrLmMpLiBTcGVjaWZpY2FsbHksIGl0IGludHJvZHVjZXMgc2FmZSBsaXN0IHBvcHBpbmcgd2l0aCBwcm9wZXIgc29ja2V0IGxvY2tpbmcsIGNvcnJlY3QgcmVmZXJlbmNlIGNvdW50aW5nIGZvciBjaGlsZCBzb2NrZXRzIGluIHRoZSBhY2NlcHQgcXVldWUsIGFuZCB3b3JrcXVldWUtZGVmZXJyZWQgcmVsZWFzZSBvZiBzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwuXG5cblRoZXNlIGNoYW5nZXMgZGVhbCBleGNsdXNpdmVseSB3aXRoIGNvbmN1cnJlbmN5LCByZWZlcmVuY2UgY291bnRpbmcsIGFuZCBsaWZlY3ljbGUgbWFuYWdlbWVudCAocmlza3Mgb2YgVXNlLUFmdGVyLUZyZWUsIHJhY2UgY29uZGl0aW9ucywgb3IgZGVhZGxvY2tzKSwgd2hpY2ggYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAgc2FuaXRpemVycy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IGRhdGEgY29waWVkIHRvIHVzZXJzcGFjZSwgZG9lcyBub3QgcmVhZCBvciBleHBvc2UgdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzL2J1ZmZlcnMsIGFuZCBkb2VzIG5vdCBhbHRlciBsZW5ndGggb3IgYm91bmRzIGNhbGN1bGF0aW9ucy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4YTcyN2VkNzEyMmQ1Nzc0ZjJkNTJjODMyZTEzMmZjNzVhNjQyYWNmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBTZXAgMyAwOTowMjoyMyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9uZmMvbGxjcC5oIGIvbmV0L25mYy9sbGNwLmgKaW5kZXggZDgzNDVlZDU3Yzk1NC4uMjNhZTdhMDExMmQzNyAxMDA2NDQKLS0tIGEvbmV0L25mYy9sbGNwLmgKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25mYy9sbGNwLmgKQEAgLTkxLDYgJiM0Mzs5MSw3IEBAIHN0cnVjdCBuZmNfbGxjcF9sb2NhbCB7CiAJc3RydWN0IGhsaXN0X2hlYWQgcGVuZGluZ19zZHJlcXM7CiAJc3RydWN0IHRpbWVyX2xpc3Qgc2RyZXFfdGltZXI7CiAJc3RydWN0IHdvcmtfc3RydWN0IHNkcmVxX3RpbWVvdXRfd29yazsKJiM0MzsJc3RydWN0IHdvcmtfc3RydWN0IHJlbGVhc2Vfd29yazsKIAl1OCBzZHJlcV9uZXh0X3RpZDsKIAogCS8qIHNvY2tldHMgYXJyYXkgKi8KZGlmZiAtLWdpdCBhL25ldC9uZmMvbGxjcF9jb3JlLmMgYi9uZXQvbmZjL2xsY3BfY29yZS5jCmluZGV4IGJkNjM2MWUyZWZhNGYuLjIzNTUzZTc0MjZlYzIgMTAwNjQ0Ci0tLSBhL25ldC9uZmMvbGxjcF9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25mYy9sbGNwX2NvcmUuYwpAQCAtMjAsNiAmIzQzOzIwLDggQEAgc3RhdGljIExJU1RfSEVBRChsbGNwX2RldmljZXMpOwogLyogUHJvdGVjdHMgbGxjcF9kZXZpY2VzIGxpc3QgKi8KIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0sobGxjcF9kZXZpY2VzX2xvY2spOwogCiYjNDM7c3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpsbGNwX3dxOwomIzQzOwogc3RhdGljIHZvaWQgbmZjX2xsY3Bfcnhfc2tiKHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwsIHN0cnVjdCBza19idWZmICpza2IpOwogCiB2b2lkIG5mY19sbGNwX3NvY2tfbGluayhzdHJ1Y3QgbGxjcF9zb2NrX2xpc3QgKmwsIHN0cnVjdCBzb2NrICpzaykKQEAgLTYzLDIxICYjNDM7NjUsMzMgQEAgc3RhdGljIHZvaWQgbmZjX2xsY3Bfc29ja2V0X3B1cmdlKHN0cnVjdCBuZmNfbGxjcF9zb2NrICpzb2NrKQogCX0KIH0KIAomIzQzO3N0YXRpYyBzdHJ1Y3Qgc29jayAqbmZjX2xsY3Bfc29ja19saXN0X3BvcChzdHJ1Y3QgbGxjcF9zb2NrX2xpc3QgKmwpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgc29jayAqc2s7CiYjNDM7CiYjNDM7CXdyaXRlX2xvY2soJmFtcDtsLSZndDtsb2NrKTsKJiM0MzsJc2sgPSBza19oZWFkKCZhbXA7bC0mZ3Q7aGVhZCk7CiYjNDM7CWlmIChzaykgewomIzQzOwkJc29ja19ob2xkKHNrKTsKJiM0MzsJCXNrX2RlbF9ub2RlX2luaXQoc2spOwomIzQzOwl9CiYjNDM7CXdyaXRlX3VubG9jaygmYW1wO2wtJmd0O2xvY2spOwomIzQzOwomIzQzOwlyZXR1cm4gc2s7CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgbmZjX2xsY3Bfc29ja2V0X3JlbGVhc2Uoc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCwgYm9vbCBkZXZpY2UsCiAJCQkJICAgIGludCBlcnIpCiB7CiAJc3RydWN0IHNvY2sgKnNrOwotCXN0cnVjdCBobGlzdF9ub2RlICp0bXA7CiAJc3RydWN0IG5mY19sbGNwX3NvY2sgKmxsY3Bfc29jazsKIAogCXNrYl9xdWV1ZV9wdXJnZSgmYW1wO2xvY2FsLSZndDt0eF9xdWV1ZSk7CiAKLQl3cml0ZV9sb2NrKCZhbXA7bG9jYWwtJmd0O3NvY2tldHMubG9jayk7Ci0KLQlza19mb3JfZWFjaF9zYWZlKHNrLCB0bXAsICZhbXA7bG9jYWwtJmd0O3NvY2tldHMuaGVhZCkgewomIzQzOwl3aGlsZSAoKHNrID0gbmZjX2xsY3Bfc29ja19saXN0X3BvcCgmYW1wO2xvY2FsLSZndDtzb2NrZXRzKSkpIHsKIAkJbGxjcF9zb2NrID0gbmZjX2xsY3Bfc29jayhzayk7CiAKLQkJYmhfbG9ja19zb2NrKHNrKTsKJiM0MzsJCWxvY2tfc29jayhzayk7CiAKIAkJbmZjX2xsY3Bfc29ja2V0X3B1cmdlKGxsY3Bfc29jayk7CiAKQEAgLTkxLDE3ICYjNDM7MTA1LDI3IEBAIHN0YXRpYyB2b2lkIG5mY19sbGNwX3NvY2tldF9yZWxlYXNlKHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwsIGJvb2wgZGV2aWNlLAogCQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGxzaywgbiwKIAkJCQkJCSAmYW1wO2xsY3Bfc29jay0mZ3Q7YWNjZXB0X3F1ZXVlLAogCQkJCQkJIGFjY2VwdF9xdWV1ZSkgewotCQkJCWFjY2VwdF9zayA9ICZhbXA7bHNrLSZndDtzazsKLQkJCQliaF9sb2NrX3NvY2soYWNjZXB0X3NrKTsKLQotCQkJCW5mY19sbGNwX2FjY2VwdF91bmxpbmsoYWNjZXB0X3NrKTsKJiM0MzsJCQkJYm9vbCBwdXRfY3JlYXRpb24gPSBmYWxzZTsKIAotCQkJCWlmIChlcnIpCi0JCQkJCWFjY2VwdF9zay0mZ3Q7c2tfZXJyID0gZXJyOwotCQkJCWFjY2VwdF9zay0mZ3Q7c2tfc3RhdGUgPSBMTENQX0NMT1NFRDsKLQkJCQlhY2NlcHRfc2stJmd0O3NrX3N0YXRlX2NoYW5nZShzayk7CiYjNDM7CQkJCWFjY2VwdF9zayA9ICZhbXA7bHNrLSZndDtzazsKJiM0MzsJCQkJbG9ja19zb2NrX25lc3RlZChhY2NlcHRfc2ssCiYjNDM7CQkJCQkJIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTsKJiM0MzsKJiM0MzsJCQkJaWYgKG5mY19sbGNwX3NvY2soYWNjZXB0X3NrKS0mZ3Q7cGFyZW50ID09IHNrKSB7CiYjNDM7CQkJCQluZmNfbGxjcF9hY2NlcHRfdW5saW5rKGFjY2VwdF9zayk7CiYjNDM7CQkJCQluZmNfbGxjcF9zb2NrX3VubGluaygmYW1wO2xvY2FsLSZndDtzb2NrZXRzLCBhY2NlcHRfc2spOwomIzQzOwomIzQzOwkJCQkJaWYgKGVycikKJiM0MzsJCQkJCQlhY2NlcHRfc2stJmd0O3NrX2VyciA9IGVycjsKJiM0MzsJCQkJCWFjY2VwdF9zay0mZ3Q7c2tfc3RhdGUgPSBMTENQX0NMT1NFRDsKJiM0MzsJCQkJCWFjY2VwdF9zay0mZ3Q7c2tfc3RhdGVfY2hhbmdlKGFjY2VwdF9zayk7CiYjNDM7CQkJCQlzb2NrX29ycGhhbihhY2NlcHRfc2spOwomIzQzOwkJCQkJcHV0X2NyZWF0aW9uID0gdHJ1ZTsKJiM0MzsJCQkJfQogCi0JCQkJYmhfdW5sb2NrX3NvY2soYWNjZXB0X3NrKTsKJiM0MzsJCQkJcmVsZWFzZV9zb2NrKGFjY2VwdF9zayk7CiYjNDM7CQkJCWlmIChwdXRfY3JlYXRpb24pCiYjNDM7CQkJCQlzb2NrX3B1dChhY2NlcHRfc2spOyAvKiBjcmVhdGlvbiByZWYgKi8KIAkJCX0KIAkJfQogCkBAIC0xMTAsMjMgJiM0MzsxMzQsMTggQEAgc3RhdGljIHZvaWQgbmZjX2xsY3Bfc29ja2V0X3JlbGVhc2Uoc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCwgYm9vbCBkZXZpY2UsCiAJCXNrLSZndDtza19zdGF0ZSA9IExMQ1BfQ0xPU0VEOwogCQlzay0mZ3Q7c2tfc3RhdGVfY2hhbmdlKHNrKTsKIAotCQliaF91bmxvY2tfc29jayhzayk7Ci0KLQkJc2tfZGVsX25vZGVfaW5pdChzayk7CiYjNDM7CQlyZWxlYXNlX3NvY2soc2spOwomIzQzOwkJc29ja19wdXQoc2spOwogCX0KIAotCXdyaXRlX3VubG9jaygmYW1wO2xvY2FsLSZndDtzb2NrZXRzLmxvY2spOwotCiAJLyogSWYgd2Ugc3RpbGwgaGF2ZSBhIGRldmljZSwgd2Uga2VlcCB0aGUgUkFXIHNvY2tldHMgYWxpdmUgKi8KIAlpZiAoZGV2aWNlID09IHRydWUpCiAJCXJldHVybjsKIAotCXdyaXRlX2xvY2soJmFtcDtsb2NhbC0mZ3Q7cmF3X3NvY2tldHMubG9jayk7Ci0KLQlza19mb3JfZWFjaF9zYWZlKHNrLCB0bXAsICZhbXA7bG9jYWwtJmd0O3Jhd19zb2NrZXRzLmhlYWQpIHsKJiM0MzsJd2hpbGUgKChzayA9IG5mY19sbGNwX3NvY2tfbGlzdF9wb3AoJmFtcDtsb2NhbC0mZ3Q7cmF3X3NvY2tldHMpKSkgewogCQlsbGNwX3NvY2sgPSBuZmNfbGxjcF9zb2NrKHNrKTsKIAotCQliaF9sb2NrX3NvY2soc2spOwomIzQzOwkJbG9ja19zb2NrKHNrKTsKIAogCQluZmNfbGxjcF9zb2NrZXRfcHVyZ2UobGxjcF9zb2NrKTsKIApAQCAtMTM1LDI2ICYjNDM7MTU0LDIwIEBAIHN0YXRpYyB2b2lkIG5mY19sbGNwX3NvY2tldF9yZWxlYXNlKHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwsIGJvb2wgZGV2aWNlLAogCQlzay0mZ3Q7c2tfc3RhdGUgPSBMTENQX0NMT1NFRDsKIAkJc2stJmd0O3NrX3N0YXRlX2NoYW5nZShzayk7CiAKLQkJYmhfdW5sb2NrX3NvY2soc2spOwotCi0JCXNrX2RlbF9ub2RlX2luaXQoc2spOwomIzQzOwkJcmVsZWFzZV9zb2NrKHNrKTsKJiM0MzsJCXNvY2tfcHV0KHNrKTsKIAl9Ci0KLQl3cml0ZV91bmxvY2soJmFtcDtsb2NhbC0mZ3Q7cmF3X3NvY2tldHMubG9jayk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKm5mY19sbGNwX2xvY2FsX2dldChzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsKQogewotCS8qIFNpbmNlIHVzaW5nIG5mY19sbGNwX2xvY2FsIG1heSByZXN1bHQgaW4gdXNhZ2Ugb2YgbmZjX2Rldiwgd2hlbmV2ZXIKLQkgKiB3ZSBob2xkIGEgcmVmZXJlbmNlIHRvIGxvY2FsLCB3ZSBhbHNvIG5lZWQgdG8gaG9sZCBhIHJlZmVyZW5jZSB0bwotCSAqIHRoZSBkZXZpY2UgdG8gYXZvaWQgVUFGLgotCSAqLwotCWlmICghbmZjX2dldF9kZXZpY2UobG9jYWwtJmd0O2Rldi0mZ3Q7aWR4KSkKJiM0MzsJaWYgKCFsb2NhbCkKIAkJcmV0dXJuIE5VTEw7CiAKLQlrcmVmX2dldCgmYW1wO2xvY2FsLSZndDtyZWYpOwomIzQzOwlpZiAoa3JlZl9nZXRfdW5sZXNzX3plcm8oJmFtcDtsb2NhbC0mZ3Q7cmVmKSkKJiM0MzsJCXJldHVybiBsb2NhbDsKIAotCXJldHVybiBsb2NhbDsKJiM0MzsJcmV0dXJuIE5VTEw7CiB9CiAKIHN0YXRpYyB2b2lkIGxvY2FsX2NsZWFudXAoc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCkKQEAgLTE3MiwzMCAmIzQzOzE4NSwzNCBAQCBzdGF0aWMgdm9pZCBsb2NhbF9jbGVhbnVwKHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwpCiAJbmZjX2xsY3BfZnJlZV9zZHBfdGx2X2xpc3QoJmFtcDtsb2NhbC0mZ3Q7cGVuZGluZ19zZHJlcXMpOwogfQogCi1zdGF0aWMgdm9pZCBsb2NhbF9yZWxlYXNlKHN0cnVjdCBrcmVmICpyZWYpCiYjNDM7c3RhdGljIHZvaWQgbG9jYWxfcmVsZWFzZV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKIAlzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsOwomIzQzOwlzdHJ1Y3QgbmZjX2RldiAqZGV2OwogCi0JbG9jYWwgPSBjb250YWluZXJfb2YocmVmLCBzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwsIHJlZik7CiYjNDM7CWxvY2FsID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBuZmNfbGxjcF9sb2NhbCwgcmVsZWFzZV93b3JrKTsKJiM0MzsJZGV2ID0gbG9jYWwtJmd0O2RldjsKIAogCWxvY2FsX2NsZWFudXAobG9jYWwpOwogCWtmcmVlKGxvY2FsKTsKJiM0MzsJbmZjX3B1dF9kZXZpY2UoZGV2KTsKIH0KIAotaW50IG5mY19sbGNwX2xvY2FsX3B1dChzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsKQomIzQzO3N0YXRpYyB2b2lkIGxvY2FsX3JlbGVhc2Uoc3RydWN0IGtyZWYgKnJlZikKIHsKLQlzdHJ1Y3QgbmZjX2RldiAqZGV2OwotCWludCByZXQ7CiYjNDM7CXN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWw7CiAKLQlpZiAobG9jYWwgPT0gTlVMTCkKLQkJcmV0dXJuIDA7CiYjNDM7CWxvY2FsID0gY29udGFpbmVyX29mKHJlZiwgc3RydWN0IG5mY19sbGNwX2xvY2FsLCByZWYpOwogCi0JZGV2ID0gbG9jYWwtJmd0O2RldjsKJiM0MzsJcXVldWVfd29yayhsbGNwX3dxLCAmYW1wO2xvY2FsLSZndDtyZWxlYXNlX3dvcmspOwomIzQzO30KIAotCXJldCA9IGtyZWZfcHV0KCZhbXA7bG9jYWwtJmd0O3JlZiwgbG9jYWxfcmVsZWFzZSk7Ci0JbmZjX3B1dF9kZXZpY2UoZGV2KTsKJiM0MztpbnQgbmZjX2xsY3BfbG9jYWxfcHV0KHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwpCiYjNDM7ewomIzQzOwlpZiAoIWxvY2FsKQomIzQzOwkJcmV0dXJuIDA7CiAKLQlyZXR1cm4gcmV0OwomIzQzOwlyZXR1cm4ga3JlZl9wdXQoJmFtcDtsb2NhbC0mZ3Q7cmVmLCBsb2NhbF9yZWxlYXNlKTsKIH0KIAogc3RhdGljIHN0cnVjdCBuZmNfbGxjcF9zb2NrICpuZmNfbGxjcF9zb2NrX2dldChzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsLApAQCAtMTcwNSw2ICYjNDM7MTcyMiw3IEBAIGludCBuZmNfbGxjcF9yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IG5mY19kZXYgKm5kZXYpCiAJSU5JVF9XT1JLKCZhbXA7bG9jYWwtJmd0O3J4X3dvcmssIG5mY19sbGNwX3J4X3dvcmspOwogCiAJSU5JVF9XT1JLKCZhbXA7bG9jYWwtJmd0O3RpbWVvdXRfd29yaywgbmZjX2xsY3BfdGltZW91dF93b3JrKTsKJiM0MzsJSU5JVF9XT1JLKCZhbXA7bG9jYWwtJmd0O3JlbGVhc2Vfd29yaywgbG9jYWxfcmVsZWFzZV93b3JrKTsKIAogCXJ3bG9ja19pbml0KCZhbXA7bG9jYWwtJmd0O3NvY2tldHMubG9jayk7CiAJcndsb2NrX2luaXQoJmFtcDtsb2NhbC0mZ3Q7Y29ubmVjdGluZ19zb2NrZXRzLmxvY2spOwpAQCAtMTc0OCwxMCAmIzQzOzE3NjYsMjMgQEAgdm9pZCBuZmNfbGxjcF91bnJlZ2lzdGVyX2RldmljZShzdHJ1Y3QgbmZjX2RldiAqZGV2KQogCiBpbnQgX19pbml0IG5mY19sbGNwX2luaXQodm9pZCkKIHsKLQlyZXR1cm4gbmZjX2xsY3Bfc29ja19pbml0KCk7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWxsY3Bfd3EgPSBhbGxvY193b3JrcXVldWUoJiMzNDtuZmNfbGxjcF93cSYjMzQ7LCBXUV9VTkJPVU5ELCAwKTsKJiM0MzsJaWYgKCFsbGNwX3dxKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CXJldCA9IG5mY19sbGNwX3NvY2tfaW5pdCgpOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlkZXN0cm95X3dvcmtxdWV1ZShsbGNwX3dxKTsKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiB9CiAKIHZvaWQgbmZjX2xsY3BfZXhpdCh2b2lkKQogewogCW5mY19sbGNwX3NvY2tfZXhpdCgpOwomIzQzOwlkZXN0cm95X3dvcmtxdWV1ZShsbGNwX3dxKTsKIH0KZGlmZiAtLWdpdCBhL25ldC9uZmMvbGxjcF9zb2NrLmMgYi9uZXQvbmZjL2xsY3Bfc29jay5jCmluZGV4IDU1NThkOGE0ZDQ4YjMuLmNlNjg3NWViNThmYmMgMTAwNjQ0Ci0tLSBhL25ldC9uZmMvbGxjcF9zb2NrLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25mYy9sbGNwX3NvY2suYwpAQCAtMzkyLDExICYjNDM7MzkyLDEyIEBAIHZvaWQgbmZjX2xsY3BfYWNjZXB0X3VubGluayhzdHJ1Y3Qgc29jayAqc2spCiAKIAlwcl9kZWJ1ZygmIzM0O3N0YXRlICVkXG4mIzM0Oywgc2stJmd0O3NrX3N0YXRlKTsKIAotCWxpc3RfZGVsX2luaXQoJmFtcDtsbGNwX3NvY2stJmd0O2FjY2VwdF9xdWV1ZSk7Ci0Jc2tfYWNjZXB0cV9yZW1vdmVkKGxsY3Bfc29jay0mZ3Q7cGFyZW50KTsKLQlsbGNwX3NvY2stJmd0O3BhcmVudCA9IE5VTEw7Ci0KLQlzb2NrX3B1dChzayk7CiYjNDM7CWlmIChsbGNwX3NvY2stJmd0O3BhcmVudCkgewomIzQzOwkJbGlzdF9kZWxfaW5pdCgmYW1wO2xsY3Bfc29jay0mZ3Q7YWNjZXB0X3F1ZXVlKTsKJiM0MzsJCXNrX2FjY2VwdHFfcmVtb3ZlZChsbGNwX3NvY2stJmd0O3BhcmVudCk7CiYjNDM7CQlsbGNwX3NvY2stJmd0O3BhcmVudCA9IE5VTEw7CiYjNDM7CQlzb2NrX3B1dChzayk7CiYjNDM7CX0KIH0KIAogdm9pZCBuZmNfbGxjcF9hY2NlcHRfZW5xdWV1ZShzdHJ1Y3Qgc29jayAqcGFyZW50LCBzdHJ1Y3Qgc29jayAqc2spCkBAIC00MjMsMTIgJiM0Mzs0MjQsMjAgQEAgc3RydWN0IHNvY2sgKm5mY19sbGNwX2FjY2VwdF9kZXF1ZXVlKHN0cnVjdCBzb2NrICpwYXJlbnQsCiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobHNrLCBuLCAmYW1wO2xsY3BfcGFyZW50LSZndDthY2NlcHRfcXVldWUsCiAJCQkJIGFjY2VwdF9xdWV1ZSkgewomIzQzOwkJc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbDsKJiM0MzsKIAkJc2sgPSAmYW1wO2xzay0mZ3Q7c2s7Ci0JCWxvY2tfc29jayhzayk7CiYjNDM7CQlsb2NrX3NvY2tfbmVzdGVkKHNrLCBTSU5HTEVfREVQVEhfTkVTVElORyk7CiAKIAkJaWYgKHNrLSZndDtza19zdGF0ZSA9PSBMTENQX0NMT1NFRCkgewotCQkJcmVsZWFzZV9zb2NrKHNrKTsKJiM0MzsJCQlsb2NhbCA9IG5mY19sbGNwX3NvY2soc2spLSZndDtsb2NhbDsKJiM0MzsKIAkJCW5mY19sbGNwX2FjY2VwdF91bmxpbmsoc2spOwomIzQzOwkJCWlmIChsb2NhbCkKJiM0MzsJCQkJbmZjX2xsY3Bfc29ja191bmxpbmsoJmFtcDtsb2NhbC0mZ3Q7c29ja2V0cywgc2spOwomIzQzOwkJCXNvY2tfb3JwaGFuKHNrKTsKJiM0MzsJCQlyZWxlYXNlX3NvY2soc2spOwomIzQzOwkJCXNvY2tfcHV0KHNrKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKQEAgLTQ2NCw3ICYjNDM7NDczLDcgQEAgc3RhdGljIGludCBsbGNwX3NvY2tfYWNjZXB0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrZXQgKm5ld3NvY2ssCiAKIAlwcl9kZWJ1ZygmIzM0O3BhcmVudCAlcFxuJiMzNDssIHNrKTsKIAotCWxvY2tfc29ja19uZXN0ZWQoc2ssIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTsKJiM0MzsJbG9ja19zb2NrKHNrKTsKIAogCWlmIChzay0mZ3Q7c2tfc3RhdGUgIT0gTExDUF9MSVNURU4pIHsKIAkJcmV0ID0gLUVCQURGRDsKQEAgLTQ5MCw3ICYjNDM7NDk5LDEyIEBAIHN0YXRpYyBpbnQgbGxjcF9zb2NrX2FjY2VwdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2V0ICpuZXdzb2NrLAogCiAJCXJlbGVhc2Vfc29jayhzayk7CiAJCXRpbWVvID0gc2NoZWR1bGVfdGltZW91dCh0aW1lbyk7Ci0JCWxvY2tfc29ja19uZXN0ZWQoc2ssIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTsKJiM0MzsJCWxvY2tfc29jayhzayk7CiYjNDM7CiYjNDM7CQlpZiAoc2stJmd0O3NrX3N0YXRlICE9IExMQ1BfTElTVEVOKSB7CiYjNDM7CQkJcmV0ID0gLUVCQURGRDsKJiM0MzsJCQlicmVhazsKJiM0MzsJCX0KIAl9CiAJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwogCXJlbW92ZV93YWl0X3F1ZXVlKHNrX3NsZWVwKHNrKSwgJmFtcDt3YWl0KTsKQEAgLTYyOSwxMyAmIzQzOzY0MywyNCBAQCBzdGF0aWMgaW50IGxsY3Bfc29ja19yZWxlYXNlKHN0cnVjdCBzb2NrZXQgKnNvY2spCiAKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGxzaywgbiwgJmFtcDtsbGNwX3NvY2stJmd0O2FjY2VwdF9xdWV1ZSwKIAkJCQkJIGFjY2VwdF9xdWV1ZSkgewomIzQzOwkJCWJvb2wgcHV0X2NyZWF0aW9uID0gZmFsc2U7CiYjNDM7CiAJCQlhY2NlcHRfc2sgPSAmYW1wO2xzay0mZ3Q7c2s7Ci0JCQlsb2NrX3NvY2soYWNjZXB0X3NrKTsKJiM0MzsJCQlsb2NrX3NvY2tfbmVzdGVkKGFjY2VwdF9zaywgU0lOR0xFX0RFUFRIX05FU1RJTkcpOwogCi0JCQluZmNfbGxjcF9zZW5kX2Rpc2Nvbm5lY3QobHNrKTsKLQkJCW5mY19sbGNwX2FjY2VwdF91bmxpbmsoYWNjZXB0X3NrKTsKJiM0MzsJCQlpZiAobmZjX2xsY3Bfc29jayhhY2NlcHRfc2spLSZndDtwYXJlbnQgPT0gc2spIHsKJiM0MzsJCQkJbmZjX2xsY3Bfc2VuZF9kaXNjb25uZWN0KGxzayk7CiYjNDM7CQkJCW5mY19sbGNwX2FjY2VwdF91bmxpbmsoYWNjZXB0X3NrKTsKJiM0MzsJCQkJbmZjX2xsY3Bfc29ja191bmxpbmsoJmFtcDtsb2NhbC0mZ3Q7c29ja2V0cywgYWNjZXB0X3NrKTsKJiM0MzsKJiM0MzsJCQkJYWNjZXB0X3NrLSZndDtza19zdGF0ZSA9IExMQ1BfQ0xPU0VEOwomIzQzOwkJCQlzb2NrX29ycGhhbihhY2NlcHRfc2spOwomIzQzOwkJCQlwdXRfY3JlYXRpb24gPSB0cnVlOwomIzQzOwkJCX0KIAogCQkJcmVsZWFzZV9zb2NrKGFjY2VwdF9zayk7CiYjNDM7CQkJaWYgKHB1dF9jcmVhdGlvbikKJiM0MzsJCQkJc29ja19wdXQoYWNjZXB0X3NrKTsgLyogY3JlYXRpb24gcmVmICovCiAJCX0KIAl9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDA5OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU3MjkKCQkJCQkJCW91dHB1dDogMjA0CgkJCQkJCQl0aG91Z2h0czogMTAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBbmFseXNpcyBvZiBORkMgTExDUCBTb2NrZXQgTGlmZWN5Y2xlIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoZSBwYXRjaCB0b3VjaGVzIGBuZXQvbmZjL2xsY3AuaGAsIGBuZXQvbmZjL2xsY3BfY29yZS5jYCwgYW5kIGBuZXQvbmZjL2xsY3Bfc29jay5jYC4gTXkgaW5pdGlhbCByZWFkIGlzIHRoYXQgdGhpcyBpcyBhbGwgYWJvdXQgY2xlYW5pbmcgdXAgc29ja2V0IGxpZmVjeWNsZSwgcmVmZXJlbmNlIGNvdW50aW5nLCBzeW5jaHJvbml6YXRpb24sIGxvY2tpbmcsIGFuZCBVQUYvcmFjZSBjb25kaXRpb25zIHdpdGhpbiB0aGUgTkZDIExMQ1Agc3Vic3lzdGVtLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBwcmV2ZW50aW5nIHNpdHVhdGlvbnMgd2hlcmUgYSBzb2NrZXQsIGxvY2FsIGRldmljZSwgb3IgdGhlIGRldmljZSBpdHNlbGYgbWlnaHQgZ2V0IGZyZWVkIHdoaWxlIHN0aWxsIGluIHVzZSwgb3Igd2hlcmUgdGhlcmUgYXJlIHJhY2UgY29uZGl0aW9ucyBpbiB0aGUgYWNjZXB0IHF1ZXVlIG9yIGR1cmluZyBsb2NhbCBkZXZpY2UgcmVsZWFzZS4KClNwZWNpZmljYWxseSwgaXQgbG9va3MgbGlrZToKCjEuICBBIGByZWxlYXNlX3dvcmtgIGlzIGJlaW5nIGFkZGVkIHRvIGBuZmNfbGxjcF9sb2NhbGAgaW4gYGxsY3AuaGAuCjIuICBgbGxjcF93cWAgaXMgaW50cm9kdWNlZCBpbiBgbGxjcF9jb3JlLmNgIGZvciBhc3luY2hyb25vdXMgY2xlYW51cCBhbmQgd2Ugc2VlIHVwZGF0ZXMgdG8gYG5mY19sbGNwX3NvY2tldF9yZWxlYXNlYCwgYG5mY19sbGNwX2xvY2FsX2dldGAsIGFuZCBgbG9jYWxfcmVsZWFzZWAuIFRoZXJlJiMzOTtzIGEgY2xlYXIgZW1waGFzaXMgb24gc2FmZSBzb2NrZXQgcG9wcGluZyBhbmQgbG9ja2luZyB3aXRoIGBsb2NrX3NvY2tgIG5vdywgcmF0aGVyIHRoYW4gYGJoX2xvY2tfc29ja2AuIEl0JiMzOTtzIGhhbmRsaW5nIGFjY2VwdCBxdWV1ZSBjaGlsZCBzb2NrZXRzIHByb3Blcmx5ICh1bmxpbmtpbmcsIG9ycGhhbmluZywgZXRjLikuICBUaGUgYXN5bmNocm9ub3VzIGRlZmVycmFsIG9mIGBsb2NhbF9yZWxlYXNlX3dvcmtgIG9udG8gYGxsY3Bfd3FgIHNlZW1zIGNydWNpYWwuIEl0JiMzOTtzIHByb3Blcmx5IGluaXRpYWxpemluZyBgcmVsZWFzZV93b3JrYCBhbmQgYGxsY3Bfd3FgLgozLiAgSW4gYGxsY3Bfc29jay5jYCwgdGhlcmUgYXJlIGNoZWNrcyBmb3IgYGxsY3Bfc29jay0mZ3Q7cGFyZW50YCwgcHJvcGVyIHVubGlua2luZy9vcnBoYW5pbmcgd2hlbiBkZXF1ZXVpbmcgY2xvc2VkIHNvY2tldHMgZnJvbSBhY2NlcHQgcXVldWVzLCBhbmQgZml4ZXMgdG8gbG9ja2luZyBpbiBgbGxjcF9zb2NrX2FjY2VwdGAuIEFsc28sIGBsbGNwX3NvY2tfcmVsZWFzZWAgaGFuZGxlcyBhY2NlcHRfcXVldWUgc29ja2V0cyBjb3JyZWN0bHksIGRlYWxpbmcgd2l0aCBsb2NraW5nLCB1bmxpbmtpbmcsIG9ycGhhbmluZywgYW5kIHJlZmVyZW5jZSBjb3VudHMuCgpUaGUgY29yZSBvZiB0aGlzIHBhdGNoIHNlZW1zIHRvIGludm9sdmUgYSBmYWlybHkgdGhvcm91Z2ggb3ZlcmhhdWwgb2YgaG93IHNvY2tldHMgYXJlIG1hbmFnZWQsIHBhcnRpY3VsYXJseSBkdXJpbmcgdGhlaXIgcmVsZWFzZSBhbmQgaGFuZGxpbmcgb2YgYWNjZXB0IHF1ZXVlcy4gSXQgc2VlbXMgdG8gYmUgYWRkcmVzc2luZyBjb21tb24gY29uY3VycmVuY3kgaXNzdWVzLCBsb2NraW5nIGlzc3VlcywgYW5kIHJlZmVyZW5jZSBjb3VudGluZyBwcm9ibGVtcy4KCk5vdywgbXkgcHJpbWFyeSBjb25jZXJuIGlzIHdoZXRoZXIgdGhpcyBpbnRyb2R1Y2VzIG9yIGV4cG9zZXMgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBMZXQmIzM5O3MgbG9vayBhdCB0aGF0OgoKKiAgICoqYGNvcHlfdG9fdXNlcmAgb3IgYHB1dF91c2VyYD8qKiBObywgdGhlcmUgYXJlIG5vIGNoYW5nZXMgaGVyZS4KKiAgICoqTmV0bGluayBhdHRyaWJ1dGVzIG9yIGlvY3RsIG91dHB1dD8qKiBOby4KKiAgICoqUmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeT8qKiBOby4gVGhlIHBhdGNoIG9ubHkgdG91Y2hlcyB3b3JrIHN0cnVjdHMgKGluaXRpYWxpemVkIHdpdGggYElOSVRfV09SS2ApLCBhdG9taWMva3JlZnMsIHNvY2tldCBsaXN0cywgYW5kIGxvY2tpbmcgbWVjaGFuaXNtcy4KKiAgICoqQnVmZmVyIGJvdW5kcyBvciBkYXRhIGxlbmd0aHM/KiogTm8gYWx0ZXJhdGlvbnMgaGVyZS4KCkl0JiMzOTtzIGFsbCBhYm91dCByZWZlcmVuY2UgY291bnRpbmcsIGxpc3QgbWFuaXB1bGF0aW9uLCB3b3JrcXVldWUgZGVmZXJyYWwsIGFuZCBsb2NraW5nLiBUaGlzIHBhdGNoIHNwZWNpZmljYWxseSBzZWVtcyBmb2N1c2VkIG9uIGZpeGluZyBVQUZzLCByYWNlIGNvbmRpdGlvbnMsIGFuZCBwb3RlbnRpYWxseSBkZWFkbG9ja3MuIEtBU0FOIGFuZCBMT0NLREVQIGFyZSBnb2luZyB0byBjYXRjaCB0aGUga2luZCBvZiBidWdzIHRoYXQgdGhlIHBhdGNoIGFpbXMgdG8gZml4LgoKVGhpcyBwYXRjaCAqZG9lc24mIzM5O3QqIGludHJvZHVjZSBvciBleHBvc2UgYW55IG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gV2UgZG9uJiMzOTt0IG5lZWQgdG8gZW5hYmxlIEtNU0FOIGZvciB0aGlzLgoKU28sIHRoZSBLTVNBTlJlYXNvbmluZzoKCiogICBUaGUgcGF0Y2ggcHJpbWFyaWx5IGFkZHJlc3NlcyBzb2NrZXQgbGlmZWN5Y2xlLCByZWZlcmVuY2UgY291bnRpbmcsIGFuZCBsb2NraW5nIGlzc3VlcyB3aXRoaW4gYG5ldC9uZmMvbGxjcF9jb3JlLmNgIGFuZCBgbmV0L25mYy9sbGNwX3NvY2suY2AsIHBhcnRpY3VsYXJseSBhcm91bmQgTExDUCBzb2NrZXQgcmVsZWFzZSBhbmQgZGV2aWNlIHVucmVnaXN0cmF0aW9uLCBhaW1pbmcgdG8gcHJldmVudCByYWNlcywgZGVhZGxvY2tzLCBhbmQgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucy4KKiAgIEl0IG1vZGlmaWVzIHNvY2tldCB1bmxpbmtpbmcsIHVzZXMgYGxvY2tfc29ja2AsIGRlZmVycyBsb2NhbCBjbGVhbnVwIHVzaW5nIGBsbGNwX3dxYCwgYW5kIG1hbmFnZXMgc29ja2V0L2RldmljZSByZWZlcmVuY2UgY291bnRzLgoqICAgTm8gbmV3IG1lbW9yeSBidWZmZXJzIGFyZSBjb3BpZWQgdG8gdXNlcnNwYWNlLCBubyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGNvbnRhaW5pbmcgdW5pbml0aWFsaXplZCBmaWVsZHMgYXJlIHJlYWQsIGFuZCBubyBidWZmZXIgYm91bmRzIGFyZSBhbHRlcmVkLgoqICAgUG90ZW50aWFsIHJlZ3Jlc3Npb25zIChVQUYsIGRvdWJsZS1mcmVlLCBkZWFkbG9ja3MpIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBMT0NLREVQLgoqICAgVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDk6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIHNvY2tldCBsaWZlY3ljbGUgbWFuYWdlbWVudCwgcmVmZXJlbmNlIGNvdW50aW5nLCBsb2NraW5nLCBhbmQgYXN5bmNocm9ub3VzIGNsZWFudXAgaW4gdGhlIE5GQyBMTENQIHN1YnN5c3RlbSAobmV0L25mYy9sbGNwX2NvcmUuYyBhbmQgbmV0L25mYy9sbGNwX3NvY2suYykuIFNwZWNpZmljYWxseSwgaXQgaW50cm9kdWNlcyBzYWZlIGxpc3QgcG9wcGluZyB3aXRoIHByb3BlciBzb2NrZXQgbG9ja2luZywgY29ycmVjdCByZWZlcmVuY2UgY291bnRpbmcgZm9yIGNoaWxkIHNvY2tldHMgaW4gdGhlIGFjY2VwdCBxdWV1ZSwgYW5kIHdvcmtxdWV1ZS1kZWZlcnJlZCByZWxlYXNlIG9mIHN0cnVjdCBuZmNfbGxjcF9sb2NhbC5cblxuVGhlc2UgY2hhbmdlcyBkZWFsIGV4Y2x1c2l2ZWx5IHdpdGggY29uY3VycmVuY3ksIHJlZmVyZW5jZSBjb3VudGluZywgYW5kIGxpZmVjeWNsZSBtYW5hZ2VtZW50IChyaXNrcyBvZiBVc2UtQWZ0ZXItRnJlZSwgcmFjZSBjb25kaXRpb25zLCBvciBkZWFkbG9ja3MpLCB3aGljaCBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUCBzYW5pdGl6ZXJzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgZGF0YSBjb3BpZWQgdG8gdXNlcnNwYWNlLCBkb2VzIG5vdCByZWFkIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMvYnVmZmVycywgYW5kIGRvZXMgbm90IGFsdGVyIGxlbmd0aCBvciBib3VuZHMgY2FsY3VsYXRpb25zLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgc29ja2V0IGxpZmVjeWNsZSBtYW5hZ2VtZW50LCByZWZlcmVuY2UgY291bnRpbmcsIGxvY2tpbmcsIGFuZCBhc3luY2hyb25vdXMgY2xlYW51cCBpbiB0aGUgTkZDIExMQ1Agc3Vic3lzdGVtIChuZXQvbmZjL2xsY3BfY29yZS5jIGFuZCBuZXQvbmZjL2xsY3Bfc29jay5jKS4gU3BlY2lmaWNhbGx5LCBpdCBpbnRyb2R1Y2VzIHNhZmUgbGlzdCBwb3BwaW5nIHdpdGggcHJvcGVyIHNvY2tldCBsb2NraW5nLCBjb3JyZWN0IHJlZmVyZW5jZSBjb3VudGluZyBmb3IgY2hpbGQgc29ja2V0cyBpbiB0aGUgYWNjZXB0IHF1ZXVlLCBhbmQgd29ya3F1ZXVlLWRlZmVycmVkIHJlbGVhc2Ugb2Ygc3RydWN0IG5mY19sbGNwX2xvY2FsLlxuXG5UaGVzZSBjaGFuZ2VzIGRlYWwgZXhjbHVzaXZlbHkgd2l0aCBjb25jdXJyZW5jeSwgcmVmZXJlbmNlIGNvdW50aW5nLCBhbmQgbGlmZWN5Y2xlIG1hbmFnZW1lbnQgKHJpc2tzIG9mIFVzZS1BZnRlci1GcmVlLCByYWNlIGNvbmRpdGlvbnMsIG9yIGRlYWRsb2NrcyksIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQIHNhbml0aXplcnMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBkYXRhIGNvcGllZCB0byB1c2Vyc3BhY2UsIGRvZXMgbm90IHJlYWQgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcy9idWZmZXJzLCBhbmQgZG9lcyBub3QgYWx0ZXIgbGVuZ3RoIG9yIGJvdW5kcyBjYWxjdWxhdGlvbnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDNUMDk6MDI6MjUuNDI4MzkyODNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MzU2MDAwNDEyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORkNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZmNfbGxjcF9hY2NlcHRfdW5saW5rXCIsXG4gICAgXCJuZmNfbGxjcF9hY2NlcHRfZGVxdWV1ZVwiLFxuICAgIFwibmZjX2xsY3BfbG9jYWxfcHV0XCIsXG4gICAgXCJsbGNwX3NvY2tfYWNjZXB0XCIsXG4gICAgXCJsbGNwX3NvY2tfcmVsZWFzZVwiLFxuICAgIFwibmZjX2xsY3BfcmVnaXN0ZXJfZGV2aWNlXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgc29ja2V0IGxpZmVjeWNsZSBtYW5hZ2VtZW50LCByZWZlcmVuY2UgY291bnRpbmcsIGxvY2tpbmcsIGFuZCBhc3luY2hyb25vdXMgY2xlYW51cCBpbiB0aGUgTkZDIExMQ1Agc3Vic3lzdGVtIChuZXQvbmZjL2xsY3BfY29yZS5jIGFuZCBuZXQvbmZjL2xsY3Bfc29jay5jKS4gU3BlY2lmaWNhbGx5LCBpdCBpbnRyb2R1Y2VzIHNhZmUgbGlzdCBwb3BwaW5nIHdpdGggcHJvcGVyIHNvY2tldCBsb2NraW5nLCBjb3JyZWN0IHJlZmVyZW5jZSBjb3VudGluZyBmb3IgY2hpbGQgc29ja2V0cyBpbiB0aGUgYWNjZXB0IHF1ZXVlLCBhbmQgd29ya3F1ZXVlLWRlZmVycmVkIHJlbGVhc2Ugb2Ygc3RydWN0IG5mY19sbGNwX2xvY2FsLlxcblxcblRoZXNlIGNoYW5nZXMgZGVhbCBleGNsdXNpdmVseSB3aXRoIGNvbmN1cnJlbmN5LCByZWZlcmVuY2UgY291bnRpbmcsIGFuZCBsaWZlY3ljbGUgbWFuYWdlbWVudCAocmlza3Mgb2YgVXNlLUFmdGVyLUZyZWUsIHJhY2UgY29uZGl0aW9ucywgb3IgZGVhZGxvY2tzKSwgd2hpY2ggYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAgc2FuaXRpemVycy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IGRhdGEgY29waWVkIHRvIHVzZXJzcGFjZSwgZG9lcyBub3QgcmVhZCBvciBleHBvc2UgdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzL2J1ZmZlcnMsIGFuZCBkb2VzIG5vdCBhbHRlciBsZW5ndGggb3IgYm91bmRzIGNhbGN1bGF0aW9ucy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlc29sdmVzIHJhY2UgY29uZGl0aW9ucywgaW1wcm9wZXIgc29ja2V0IGxvY2tpbmcsIGFuZCByZWZlcmVuY2UgY291bnRpbmcgaXNzdWVzIGluIHRoZSBORkMgTExDUCBzdWJzeXN0ZW0gYWNyb3NzIHNvY2tldCByZWxlYXNlLCBjb25uZWN0aW9uIGFjY2VwdGFuY2UsIGFuZCBsb2NhbCBkZXZpY2UgdGVhcmRvd24uIFRoZXNlIGNvZGUgcGF0aHMgYXJlIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIEFGX05GQyBzb2NrZXQgb3BlcmF0aW9ucyBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDk6MDI6MjUuNDI4Mzk3NTRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNjA3MjI1MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA4YTcyN2VkNzEyMmQ1Nzc0ZjJkNTJjODMyZTEzMmZjNzVhNjQyYWNmXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgU2VwIDMgMDk6MDI6MjMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L25mYy9sbGNwLmggYi9uZXQvbmZjL2xsY3AuaFxcbmluZGV4IGQ4MzQ1ZWQ1N2M5NTQuLjIzYWU3YTAxMTJkMzcgMTAwNjQ0XFxuLS0tIGEvbmV0L25mYy9sbGNwLmhcXG4rKysgYi9uZXQvbmZjL2xsY3AuaFxcbkBAIC05MSw2ICs5MSw3IEBAIHN0cnVjdCBuZmNfbGxjcF9sb2NhbCB7XFxuIFxcdHN0cnVjdCBobGlzdF9oZWFkIHBlbmRpbmdfc2RyZXFzO1xcbiBcXHRzdHJ1Y3QgdGltZXJfbGlzdCBzZHJlcV90aW1lcjtcXG4gXFx0c3RydWN0IHdvcmtfc3RydWN0IHNkcmVxX3RpbWVvdXRfd29yaztcXG4rXFx0c3RydWN0IHdvcmtfc3RydWN0IHJlbGVhc2Vfd29yaztcXG4gXFx0dTggc2RyZXFfbmV4dF90aWQ7XFxuIFxcbiBcXHQvKiBzb2NrZXRzIGFycmF5ICovXFxuZGlmZiAtLWdpdCBhL25ldC9uZmMvbGxjcF9jb3JlLmMgYi9uZXQvbmZjL2xsY3BfY29yZS5jXFxuaW5kZXggYmQ2MzYxZTJlZmE0Zi4uMjM1NTNlNzQyNmVjMiAxMDA2NDRcXG4tLS0gYS9uZXQvbmZjL2xsY3BfY29yZS5jXFxuKysrIGIvbmV0L25mYy9sbGNwX2NvcmUuY1xcbkBAIC0yMCw2ICsyMCw4IEBAIHN0YXRpYyBMSVNUX0hFQUQobGxjcF9kZXZpY2VzKTtcXG4gLyogUHJvdGVjdHMgbGxjcF9kZXZpY2VzIGxpc3QgKi9cXG4gc3RhdGljIERFRklORV9TUElOTE9DSyhsbGNwX2RldmljZXNfbG9jayk7XFxuIFxcbitzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmxsY3Bfd3E7XFxuK1xcbiBzdGF0aWMgdm9pZCBuZmNfbGxjcF9yeF9za2Ioc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuIFxcbiB2b2lkIG5mY19sbGNwX3NvY2tfbGluayhzdHJ1Y3QgbGxjcF9zb2NrX2xpc3QgKmwsIHN0cnVjdCBzb2NrICpzaylcXG5AQCAtNjMsMjEgKzY1LDMzIEBAIHN0YXRpYyB2b2lkIG5mY19sbGNwX3NvY2tldF9wdXJnZShzdHJ1Y3QgbmZjX2xsY3Bfc29jayAqc29jaylcXG4gXFx0fVxcbiB9XFxuIFxcbitzdGF0aWMgc3RydWN0IHNvY2sgKm5mY19sbGNwX3NvY2tfbGlzdF9wb3Aoc3RydWN0IGxsY3Bfc29ja19saXN0ICpsKVxcbit7XFxuK1xcdHN0cnVjdCBzb2NrICpzaztcXG4rXFxuK1xcdHdyaXRlX2xvY2soXFx1MDAyNmwtXFx1MDAzZWxvY2spO1xcbitcXHRzayA9IHNrX2hlYWQoXFx1MDAyNmwtXFx1MDAzZWhlYWQpO1xcbitcXHRpZiAoc2spIHtcXG4rXFx0XFx0c29ja19ob2xkKHNrKTtcXG4rXFx0XFx0c2tfZGVsX25vZGVfaW5pdChzayk7XFxuK1xcdH1cXG4rXFx0d3JpdGVfdW5sb2NrKFxcdTAwMjZsLVxcdTAwM2Vsb2NrKTtcXG4rXFxuK1xcdHJldHVybiBzaztcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgbmZjX2xsY3Bfc29ja2V0X3JlbGVhc2Uoc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCwgYm9vbCBkZXZpY2UsXFxuIFxcdFxcdFxcdFxcdCAgICBpbnQgZXJyKVxcbiB7XFxuIFxcdHN0cnVjdCBzb2NrICpzaztcXG4tXFx0c3RydWN0IGhsaXN0X25vZGUgKnRtcDtcXG4gXFx0c3RydWN0IG5mY19sbGNwX3NvY2sgKmxsY3Bfc29jaztcXG4gXFxuIFxcdHNrYl9xdWV1ZV9wdXJnZShcXHUwMDI2bG9jYWwtXFx1MDAzZXR4X3F1ZXVlKTtcXG4gXFxuLVxcdHdyaXRlX2xvY2soXFx1MDAyNmxvY2FsLVxcdTAwM2Vzb2NrZXRzLmxvY2spO1xcbi1cXG4tXFx0c2tfZm9yX2VhY2hfc2FmZShzaywgdG1wLCBcXHUwMDI2bG9jYWwtXFx1MDAzZXNvY2tldHMuaGVhZCkge1xcbitcXHR3aGlsZSAoKHNrID0gbmZjX2xsY3Bfc29ja19saXN0X3BvcChcXHUwMDI2bG9jYWwtXFx1MDAzZXNvY2tldHMpKSkge1xcbiBcXHRcXHRsbGNwX3NvY2sgPSBuZmNfbGxjcF9zb2NrKHNrKTtcXG4gXFxuLVxcdFxcdGJoX2xvY2tfc29jayhzayk7XFxuK1xcdFxcdGxvY2tfc29jayhzayk7XFxuIFxcbiBcXHRcXHRuZmNfbGxjcF9zb2NrZXRfcHVyZ2UobGxjcF9zb2NrKTtcXG4gXFxuQEAgLTkxLDE3ICsxMDUsMjcgQEAgc3RhdGljIHZvaWQgbmZjX2xsY3Bfc29ja2V0X3JlbGVhc2Uoc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCwgYm9vbCBkZXZpY2UsXFxuIFxcdFxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShsc2ssIG4sXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCBcXHUwMDI2bGxjcF9zb2NrLVxcdTAwM2VhY2NlcHRfcXVldWUsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCBhY2NlcHRfcXVldWUpIHtcXG4tXFx0XFx0XFx0XFx0YWNjZXB0X3NrID0gXFx1MDAyNmxzay1cXHUwMDNlc2s7XFxuLVxcdFxcdFxcdFxcdGJoX2xvY2tfc29jayhhY2NlcHRfc2spO1xcbi1cXG4tXFx0XFx0XFx0XFx0bmZjX2xsY3BfYWNjZXB0X3VubGluayhhY2NlcHRfc2spO1xcbitcXHRcXHRcXHRcXHRib29sIHB1dF9jcmVhdGlvbiA9IGZhbHNlO1xcbiBcXG4tXFx0XFx0XFx0XFx0aWYgKGVycilcXG4tXFx0XFx0XFx0XFx0XFx0YWNjZXB0X3NrLVxcdTAwM2Vza19lcnIgPSBlcnI7XFxuLVxcdFxcdFxcdFxcdGFjY2VwdF9zay1cXHUwMDNlc2tfc3RhdGUgPSBMTENQX0NMT1NFRDtcXG4tXFx0XFx0XFx0XFx0YWNjZXB0X3NrLVxcdTAwM2Vza19zdGF0ZV9jaGFuZ2Uoc2spO1xcbitcXHRcXHRcXHRcXHRhY2NlcHRfc2sgPSBcXHUwMDI2bHNrLVxcdTAwM2VzaztcXG4rXFx0XFx0XFx0XFx0bG9ja19zb2NrX25lc3RlZChhY2NlcHRfc2ssXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCBTSU5HTEVfREVQVEhfTkVTVElORyk7XFxuK1xcbitcXHRcXHRcXHRcXHRpZiAobmZjX2xsY3Bfc29jayhhY2NlcHRfc2spLVxcdTAwM2VwYXJlbnQgPT0gc2spIHtcXG4rXFx0XFx0XFx0XFx0XFx0bmZjX2xsY3BfYWNjZXB0X3VubGluayhhY2NlcHRfc2spO1xcbitcXHRcXHRcXHRcXHRcXHRuZmNfbGxjcF9zb2NrX3VubGluayhcXHUwMDI2bG9jYWwtXFx1MDAzZXNvY2tldHMsIGFjY2VwdF9zayk7XFxuK1xcbitcXHRcXHRcXHRcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRcXHRcXHRcXHRhY2NlcHRfc2stXFx1MDAzZXNrX2VyciA9IGVycjtcXG4rXFx0XFx0XFx0XFx0XFx0YWNjZXB0X3NrLVxcdTAwM2Vza19zdGF0ZSA9IExMQ1BfQ0xPU0VEO1xcbitcXHRcXHRcXHRcXHRcXHRhY2NlcHRfc2stXFx1MDAzZXNrX3N0YXRlX2NoYW5nZShhY2NlcHRfc2spO1xcbitcXHRcXHRcXHRcXHRcXHRzb2NrX29ycGhhbihhY2NlcHRfc2spO1xcbitcXHRcXHRcXHRcXHRcXHRwdXRfY3JlYXRpb24gPSB0cnVlO1xcbitcXHRcXHRcXHRcXHR9XFxuIFxcbi1cXHRcXHRcXHRcXHRiaF91bmxvY2tfc29jayhhY2NlcHRfc2spO1xcbitcXHRcXHRcXHRcXHRyZWxlYXNlX3NvY2soYWNjZXB0X3NrKTtcXG4rXFx0XFx0XFx0XFx0aWYgKHB1dF9jcmVhdGlvbilcXG4rXFx0XFx0XFx0XFx0XFx0c29ja19wdXQoYWNjZXB0X3NrKTsgLyogY3JlYXRpb24gcmVmICovXFxuIFxcdFxcdFxcdH1cXG4gXFx0XFx0fVxcbiBcXG5AQCAtMTEwLDIzICsxMzQsMTggQEAgc3RhdGljIHZvaWQgbmZjX2xsY3Bfc29ja2V0X3JlbGVhc2Uoc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCwgYm9vbCBkZXZpY2UsXFxuIFxcdFxcdHNrLVxcdTAwM2Vza19zdGF0ZSA9IExMQ1BfQ0xPU0VEO1xcbiBcXHRcXHRzay1cXHUwMDNlc2tfc3RhdGVfY2hhbmdlKHNrKTtcXG4gXFxuLVxcdFxcdGJoX3VubG9ja19zb2NrKHNrKTtcXG4tXFxuLVxcdFxcdHNrX2RlbF9ub2RlX2luaXQoc2spO1xcbitcXHRcXHRyZWxlYXNlX3NvY2soc2spO1xcbitcXHRcXHRzb2NrX3B1dChzayk7XFxuIFxcdH1cXG4gXFxuLVxcdHdyaXRlX3VubG9jayhcXHUwMDI2bG9jYWwtXFx1MDAzZXNvY2tldHMubG9jayk7XFxuLVxcbiBcXHQvKiBJZiB3ZSBzdGlsbCBoYXZlIGEgZGV2aWNlLCB3ZSBrZWVwIHRoZSBSQVcgc29ja2V0cyBhbGl2ZSAqL1xcbiBcXHRpZiAoZGV2aWNlID09IHRydWUpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuLVxcdHdyaXRlX2xvY2soXFx1MDAyNmxvY2FsLVxcdTAwM2VyYXdfc29ja2V0cy5sb2NrKTtcXG4tXFxuLVxcdHNrX2Zvcl9lYWNoX3NhZmUoc2ssIHRtcCwgXFx1MDAyNmxvY2FsLVxcdTAwM2VyYXdfc29ja2V0cy5oZWFkKSB7XFxuK1xcdHdoaWxlICgoc2sgPSBuZmNfbGxjcF9zb2NrX2xpc3RfcG9wKFxcdTAwMjZsb2NhbC1cXHUwMDNlcmF3X3NvY2tldHMpKSkge1xcbiBcXHRcXHRsbGNwX3NvY2sgPSBuZmNfbGxjcF9zb2NrKHNrKTtcXG4gXFxuLVxcdFxcdGJoX2xvY2tfc29jayhzayk7XFxuK1xcdFxcdGxvY2tfc29jayhzayk7XFxuIFxcbiBcXHRcXHRuZmNfbGxjcF9zb2NrZXRfcHVyZ2UobGxjcF9zb2NrKTtcXG4gXFxuQEAgLTEzNSwyNiArMTU0LDIwIEBAIHN0YXRpYyB2b2lkIG5mY19sbGNwX3NvY2tldF9yZWxlYXNlKHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwsIGJvb2wgZGV2aWNlLFxcbiBcXHRcXHRzay1cXHUwMDNlc2tfc3RhdGUgPSBMTENQX0NMT1NFRDtcXG4gXFx0XFx0c2stXFx1MDAzZXNrX3N0YXRlX2NoYW5nZShzayk7XFxuIFxcbi1cXHRcXHRiaF91bmxvY2tfc29jayhzayk7XFxuLVxcbi1cXHRcXHRza19kZWxfbm9kZV9pbml0KHNrKTtcXG4rXFx0XFx0cmVsZWFzZV9zb2NrKHNrKTtcXG4rXFx0XFx0c29ja19wdXQoc2spO1xcbiBcXHR9XFxuLVxcbi1cXHR3cml0ZV91bmxvY2soXFx1MDAyNmxvY2FsLVxcdTAwM2VyYXdfc29ja2V0cy5sb2NrKTtcXG4gfVxcbiBcXG4gc3RhdGljIHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbmZjX2xsY3BfbG9jYWxfZ2V0KHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwpXFxuIHtcXG4tXFx0LyogU2luY2UgdXNpbmcgbmZjX2xsY3BfbG9jYWwgbWF5IHJlc3VsdCBpbiB1c2FnZSBvZiBuZmNfZGV2LCB3aGVuZXZlclxcbi1cXHQgKiB3ZSBob2xkIGEgcmVmZXJlbmNlIHRvIGxvY2FsLCB3ZSBhbHNvIG5lZWQgdG8gaG9sZCBhIHJlZmVyZW5jZSB0b1xcbi1cXHQgKiB0aGUgZGV2aWNlIHRvIGF2b2lkIFVBRi5cXG4tXFx0ICovXFxuLVxcdGlmICghbmZjX2dldF9kZXZpY2UobG9jYWwtXFx1MDAzZWRldi1cXHUwMDNlaWR4KSlcXG4rXFx0aWYgKCFsb2NhbClcXG4gXFx0XFx0cmV0dXJuIE5VTEw7XFxuIFxcbi1cXHRrcmVmX2dldChcXHUwMDI2bG9jYWwtXFx1MDAzZXJlZik7XFxuK1xcdGlmIChrcmVmX2dldF91bmxlc3NfemVybyhcXHUwMDI2bG9jYWwtXFx1MDAzZXJlZikpXFxuK1xcdFxcdHJldHVybiBsb2NhbDtcXG4gXFxuLVxcdHJldHVybiBsb2NhbDtcXG4rXFx0cmV0dXJuIE5VTEw7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIGxvY2FsX2NsZWFudXAoc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbClcXG5AQCAtMTcyLDMwICsxODUsMzQgQEAgc3RhdGljIHZvaWQgbG9jYWxfY2xlYW51cChzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsKVxcbiBcXHRuZmNfbGxjcF9mcmVlX3NkcF90bHZfbGlzdChcXHUwMDI2bG9jYWwtXFx1MDAzZXBlbmRpbmdfc2RyZXFzKTtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgbG9jYWxfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqcmVmKVxcbitzdGF0aWMgdm9pZCBsb2NhbF9yZWxlYXNlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbiB7XFxuIFxcdHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWw7XFxuK1xcdHN0cnVjdCBuZmNfZGV2ICpkZXY7XFxuIFxcbi1cXHRsb2NhbCA9IGNvbnRhaW5lcl9vZihyZWYsIHN0cnVjdCBuZmNfbGxjcF9sb2NhbCwgcmVmKTtcXG4rXFx0bG9jYWwgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IG5mY19sbGNwX2xvY2FsLCByZWxlYXNlX3dvcmspO1xcbitcXHRkZXYgPSBsb2NhbC1cXHUwMDNlZGV2O1xcbiBcXG4gXFx0bG9jYWxfY2xlYW51cChsb2NhbCk7XFxuIFxcdGtmcmVlKGxvY2FsKTtcXG4rXFx0bmZjX3B1dF9kZXZpY2UoZGV2KTtcXG4gfVxcbiBcXG4taW50IG5mY19sbGNwX2xvY2FsX3B1dChzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsKVxcbitzdGF0aWMgdm9pZCBsb2NhbF9yZWxlYXNlKHN0cnVjdCBrcmVmICpyZWYpXFxuIHtcXG4tXFx0c3RydWN0IG5mY19kZXYgKmRldjtcXG4tXFx0aW50IHJldDtcXG4rXFx0c3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbDtcXG4gXFxuLVxcdGlmIChsb2NhbCA9PSBOVUxMKVxcbi1cXHRcXHRyZXR1cm4gMDtcXG4rXFx0bG9jYWwgPSBjb250YWluZXJfb2YocmVmLCBzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwsIHJlZik7XFxuIFxcbi1cXHRkZXYgPSBsb2NhbC1cXHUwMDNlZGV2O1xcbitcXHRxdWV1ZV93b3JrKGxsY3Bfd3EsIFxcdTAwMjZsb2NhbC1cXHUwMDNlcmVsZWFzZV93b3JrKTtcXG4rfVxcbiBcXG4tXFx0cmV0ID0ga3JlZl9wdXQoXFx1MDAyNmxvY2FsLVxcdTAwM2VyZWYsIGxvY2FsX3JlbGVhc2UpO1xcbi1cXHRuZmNfcHV0X2RldmljZShkZXYpO1xcbitpbnQgbmZjX2xsY3BfbG9jYWxfcHV0KHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwpXFxuK3tcXG4rXFx0aWYgKCFsb2NhbClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuIFxcbi1cXHRyZXR1cm4gcmV0O1xcbitcXHRyZXR1cm4ga3JlZl9wdXQoXFx1MDAyNmxvY2FsLVxcdTAwM2VyZWYsIGxvY2FsX3JlbGVhc2UpO1xcbiB9XFxuIFxcbiBzdGF0aWMgc3RydWN0IG5mY19sbGNwX3NvY2sgKm5mY19sbGNwX3NvY2tfZ2V0KHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwsXFxuQEAgLTE3MDUsNiArMTcyMiw3IEBAIGludCBuZmNfbGxjcF9yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IG5mY19kZXYgKm5kZXYpXFxuIFxcdElOSVRfV09SSyhcXHUwMDI2bG9jYWwtXFx1MDAzZXJ4X3dvcmssIG5mY19sbGNwX3J4X3dvcmspO1xcbiBcXG4gXFx0SU5JVF9XT1JLKFxcdTAwMjZsb2NhbC1cXHUwMDNldGltZW91dF93b3JrLCBuZmNfbGxjcF90aW1lb3V0X3dvcmspO1xcbitcXHRJTklUX1dPUksoXFx1MDAyNmxvY2FsLVxcdTAwM2VyZWxlYXNlX3dvcmssIGxvY2FsX3JlbGVhc2Vfd29yayk7XFxuIFxcbiBcXHRyd2xvY2tfaW5pdChcXHUwMDI2bG9jYWwtXFx1MDAzZXNvY2tldHMubG9jayk7XFxuIFxcdHJ3bG9ja19pbml0KFxcdTAwMjZsb2NhbC1cXHUwMDNlY29ubmVjdGluZ19zb2NrZXRzLmxvY2spO1xcbkBAIC0xNzQ4LDEwICsxNzY2LDIzIEBAIHZvaWQgbmZjX2xsY3BfdW5yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IG5mY19kZXYgKmRldilcXG4gXFxuIGludCBfX2luaXQgbmZjX2xsY3BfaW5pdCh2b2lkKVxcbiB7XFxuLVxcdHJldHVybiBuZmNfbGxjcF9zb2NrX2luaXQoKTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGxsY3Bfd3EgPSBhbGxvY193b3JrcXVldWUoXFxcIm5mY19sbGNwX3dxXFxcIiwgV1FfVU5CT1VORCwgMCk7XFxuK1xcdGlmICghbGxjcF93cSlcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHRyZXQgPSBuZmNfbGxjcF9zb2NrX2luaXQoKTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRkZXN0cm95X3dvcmtxdWV1ZShsbGNwX3dxKTtcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuIHZvaWQgbmZjX2xsY3BfZXhpdCh2b2lkKVxcbiB7XFxuIFxcdG5mY19sbGNwX3NvY2tfZXhpdCgpO1xcbitcXHRkZXN0cm95X3dvcmtxdWV1ZShsbGNwX3dxKTtcXG4gfVxcbmRpZmYgLS1naXQgYS9uZXQvbmZjL2xsY3Bfc29jay5jIGIvbmV0L25mYy9sbGNwX3NvY2suY1xcbmluZGV4IDU1NThkOGE0ZDQ4YjMuLmNlNjg3NWViNThmYmMgMTAwNjQ0XFxuLS0tIGEvbmV0L25mYy9sbGNwX3NvY2suY1xcbisrKyBiL25ldC9uZmMvbGxjcF9zb2NrLmNcXG5AQCAtMzkyLDExICszOTIsMTIgQEAgdm9pZCBuZmNfbGxjcF9hY2NlcHRfdW5saW5rKHN0cnVjdCBzb2NrICpzaylcXG4gXFxuIFxcdHByX2RlYnVnKFxcXCJzdGF0ZSAlZFxcXFxuXFxcIiwgc2stXFx1MDAzZXNrX3N0YXRlKTtcXG4gXFxuLVxcdGxpc3RfZGVsX2luaXQoXFx1MDAyNmxsY3Bfc29jay1cXHUwMDNlYWNjZXB0X3F1ZXVlKTtcXG4tXFx0c2tfYWNjZXB0cV9yZW1vdmVkKGxsY3Bfc29jay1cXHUwMDNlcGFyZW50KTtcXG4tXFx0bGxjcF9zb2NrLVxcdTAwM2VwYXJlbnQgPSBOVUxMO1xcbi1cXG4tXFx0c29ja19wdXQoc2spO1xcbitcXHRpZiAobGxjcF9zb2NrLVxcdTAwM2VwYXJlbnQpIHtcXG4rXFx0XFx0bGlzdF9kZWxfaW5pdChcXHUwMDI2bGxjcF9zb2NrLVxcdTAwM2VhY2NlcHRfcXVldWUpO1xcbitcXHRcXHRza19hY2NlcHRxX3JlbW92ZWQobGxjcF9zb2NrLVxcdTAwM2VwYXJlbnQpO1xcbitcXHRcXHRsbGNwX3NvY2stXFx1MDAzZXBhcmVudCA9IE5VTEw7XFxuK1xcdFxcdHNvY2tfcHV0KHNrKTtcXG4rXFx0fVxcbiB9XFxuIFxcbiB2b2lkIG5mY19sbGNwX2FjY2VwdF9lbnF1ZXVlKHN0cnVjdCBzb2NrICpwYXJlbnQsIHN0cnVjdCBzb2NrICpzaylcXG5AQCAtNDIzLDEyICs0MjQsMjAgQEAgc3RydWN0IHNvY2sgKm5mY19sbGNwX2FjY2VwdF9kZXF1ZXVlKHN0cnVjdCBzb2NrICpwYXJlbnQsXFxuIFxcbiBcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobHNrLCBuLCBcXHUwMDI2bGxjcF9wYXJlbnQtXFx1MDAzZWFjY2VwdF9xdWV1ZSxcXG4gXFx0XFx0XFx0XFx0IGFjY2VwdF9xdWV1ZSkge1xcbitcXHRcXHRzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsO1xcbitcXG4gXFx0XFx0c2sgPSBcXHUwMDI2bHNrLVxcdTAwM2VzaztcXG4tXFx0XFx0bG9ja19zb2NrKHNrKTtcXG4rXFx0XFx0bG9ja19zb2NrX25lc3RlZChzaywgU0lOR0xFX0RFUFRIX05FU1RJTkcpO1xcbiBcXG4gXFx0XFx0aWYgKHNrLVxcdTAwM2Vza19zdGF0ZSA9PSBMTENQX0NMT1NFRCkge1xcbi1cXHRcXHRcXHRyZWxlYXNlX3NvY2soc2spO1xcbitcXHRcXHRcXHRsb2NhbCA9IG5mY19sbGNwX3NvY2soc2spLVxcdTAwM2Vsb2NhbDtcXG4rXFxuIFxcdFxcdFxcdG5mY19sbGNwX2FjY2VwdF91bmxpbmsoc2spO1xcbitcXHRcXHRcXHRpZiAobG9jYWwpXFxuK1xcdFxcdFxcdFxcdG5mY19sbGNwX3NvY2tfdW5saW5rKFxcdTAwMjZsb2NhbC1cXHUwMDNlc29ja2V0cywgc2spO1xcbitcXHRcXHRcXHRzb2NrX29ycGhhbihzayk7XFxuK1xcdFxcdFxcdHJlbGVhc2Vfc29jayhzayk7XFxuK1xcdFxcdFxcdHNvY2tfcHV0KHNrKTtcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdH1cXG4gXFxuQEAgLTQ2NCw3ICs0NzMsNyBAQCBzdGF0aWMgaW50IGxsY3Bfc29ja19hY2NlcHQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2tldCAqbmV3c29jayxcXG4gXFxuIFxcdHByX2RlYnVnKFxcXCJwYXJlbnQgJXBcXFxcblxcXCIsIHNrKTtcXG4gXFxuLVxcdGxvY2tfc29ja19uZXN0ZWQoc2ssIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTtcXG4rXFx0bG9ja19zb2NrKHNrKTtcXG4gXFxuIFxcdGlmIChzay1cXHUwMDNlc2tfc3RhdGUgIT0gTExDUF9MSVNURU4pIHtcXG4gXFx0XFx0cmV0ID0gLUVCQURGRDtcXG5AQCAtNDkwLDcgKzQ5OSwxMiBAQCBzdGF0aWMgaW50IGxsY3Bfc29ja19hY2NlcHQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2tldCAqbmV3c29jayxcXG4gXFxuIFxcdFxcdHJlbGVhc2Vfc29jayhzayk7XFxuIFxcdFxcdHRpbWVvID0gc2NoZWR1bGVfdGltZW91dCh0aW1lbyk7XFxuLVxcdFxcdGxvY2tfc29ja19uZXN0ZWQoc2ssIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTtcXG4rXFx0XFx0bG9ja19zb2NrKHNrKTtcXG4rXFxuK1xcdFxcdGlmIChzay1cXHUwMDNlc2tfc3RhdGUgIT0gTExDUF9MSVNURU4pIHtcXG4rXFx0XFx0XFx0cmV0ID0gLUVCQURGRDtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdH1cXG4gXFx0fVxcbiBcXHRfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7XFxuIFxcdHJlbW92ZV93YWl0X3F1ZXVlKHNrX3NsZWVwKHNrKSwgXFx1MDAyNndhaXQpO1xcbkBAIC02MjksMTMgKzY0MywyNCBAQCBzdGF0aWMgaW50IGxsY3Bfc29ja19yZWxlYXNlKHN0cnVjdCBzb2NrZXQgKnNvY2spXFxuIFxcbiBcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobHNrLCBuLCBcXHUwMDI2bGxjcF9zb2NrLVxcdTAwM2VhY2NlcHRfcXVldWUsXFxuIFxcdFxcdFxcdFxcdFxcdCBhY2NlcHRfcXVldWUpIHtcXG4rXFx0XFx0XFx0Ym9vbCBwdXRfY3JlYXRpb24gPSBmYWxzZTtcXG4rXFxuIFxcdFxcdFxcdGFjY2VwdF9zayA9IFxcdTAwMjZsc2stXFx1MDAzZXNrO1xcbi1cXHRcXHRcXHRsb2NrX3NvY2soYWNjZXB0X3NrKTtcXG4rXFx0XFx0XFx0bG9ja19zb2NrX25lc3RlZChhY2NlcHRfc2ssIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTtcXG4gXFxuLVxcdFxcdFxcdG5mY19sbGNwX3NlbmRfZGlzY29ubmVjdChsc2spO1xcbi1cXHRcXHRcXHRuZmNfbGxjcF9hY2NlcHRfdW5saW5rKGFjY2VwdF9zayk7XFxuK1xcdFxcdFxcdGlmIChuZmNfbGxjcF9zb2NrKGFjY2VwdF9zayktXFx1MDAzZXBhcmVudCA9PSBzaykge1xcbitcXHRcXHRcXHRcXHRuZmNfbGxjcF9zZW5kX2Rpc2Nvbm5lY3QobHNrKTtcXG4rXFx0XFx0XFx0XFx0bmZjX2xsY3BfYWNjZXB0X3VubGluayhhY2NlcHRfc2spO1xcbitcXHRcXHRcXHRcXHRuZmNfbGxjcF9zb2NrX3VubGluayhcXHUwMDI2bG9jYWwtXFx1MDAzZXNvY2tldHMsIGFjY2VwdF9zayk7XFxuK1xcbitcXHRcXHRcXHRcXHRhY2NlcHRfc2stXFx1MDAzZXNrX3N0YXRlID0gTExDUF9DTE9TRUQ7XFxuK1xcdFxcdFxcdFxcdHNvY2tfb3JwaGFuKGFjY2VwdF9zayk7XFxuK1xcdFxcdFxcdFxcdHB1dF9jcmVhdGlvbiA9IHRydWU7XFxuK1xcdFxcdFxcdH1cXG4gXFxuIFxcdFxcdFxcdHJlbGVhc2Vfc29jayhhY2NlcHRfc2spO1xcbitcXHRcXHRcXHRpZiAocHV0X2NyZWF0aW9uKVxcbitcXHRcXHRcXHRcXHRzb2NrX3B1dChhY2NlcHRfc2spOyAvKiBjcmVhdGlvbiByZWYgKi9cXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwOTowMjoyNi42ODk3NTY4NzlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjYyODEwNjMxMTI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GQ1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5mY19sbGNwX2FjY2VwdF91bmxpbmtcIixcbiAgICBcIm5mY19sbGNwX2FjY2VwdF9kZXF1ZXVlXCIsXG4gICAgXCJuZmNfbGxjcF9sb2NhbF9wdXRcIixcbiAgICBcImxsY3Bfc29ja19hY2NlcHRcIixcbiAgICBcImxsY3Bfc29ja19yZWxlYXNlXCIsXG4gICAgXCJuZmNfbGxjcF9yZWdpc3Rlcl9kZXZpY2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXNvbHZlcyByYWNlIGNvbmRpdGlvbnMsIGltcHJvcGVyIHNvY2tldCBsb2NraW5nLCBhbmQgcmVmZXJlbmNlIGNvdW50aW5nIGlzc3VlcyBpbiB0aGUgTkZDIExMQ1Agc3Vic3lzdGVtIGFjcm9zcyBzb2NrZXQgcmVsZWFzZSwgY29ubmVjdGlvbiBhY2NlcHRhbmNlLCBhbmQgbG9jYWwgZGV2aWNlIHRlYXJkb3duLiBUaGVzZSBjb2RlIHBhdGhzIGFyZSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBBRl9ORkMgc29ja2V0IG9wZXJhdGlvbnMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDhhNzI3ZWQ3MTIyZDU3NzRmMmQ1MmM4MzJlMTMyZmM3NWE2NDJhY2ZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAzIDA5OjAyOjIzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L25mYy9sbGNwLmggYi9uZXQvbmZjL2xsY3AuaFxuaW5kZXggZDgzNDVlZDU3Yzk1NC4uMjNhZTdhMDExMmQzNyAxMDA2NDRcbi0tLSBhL25ldC9uZmMvbGxjcC5oXG4rKysgYi9uZXQvbmZjL2xsY3AuaFxuQEAgLTkxLDYgKzkxLDcgQEAgc3RydWN0IG5mY19sbGNwX2xvY2FsIHtcbiBcdHN0cnVjdCBobGlzdF9oZWFkIHBlbmRpbmdfc2RyZXFzO1xuIFx0c3RydWN0IHRpbWVyX2xpc3Qgc2RyZXFfdGltZXI7XG4gXHRzdHJ1Y3Qgd29ya19zdHJ1Y3Qgc2RyZXFfdGltZW91dF93b3JrO1xuK1x0c3RydWN0IHdvcmtfc3RydWN0IHJlbGVhc2Vfd29yaztcbiBcdHU4IHNkcmVxX25leHRfdGlkO1xuIFxuIFx0Lyogc29ja2V0cyBhcnJheSAqL1xuZGlmZiAtLWdpdCBhL25ldC9uZmMvbGxjcF9jb3JlLmMgYi9uZXQvbmZjL2xsY3BfY29yZS5jXG5pbmRleCBiZDYzNjFlMmVmYTRmLi4yMzU1M2U3NDI2ZWMyIDEwMDY0NFxuLS0tIGEvbmV0L25mYy9sbGNwX2NvcmUuY1xuKysrIGIvbmV0L25mYy9sbGNwX2NvcmUuY1xuQEAgLTIwLDYgKzIwLDggQEAgc3RhdGljIExJU1RfSEVBRChsbGNwX2RldmljZXMpO1xuIC8qIFByb3RlY3RzIGxsY3BfZGV2aWNlcyBsaXN0ICovXG4gc3RhdGljIERFRklORV9TUElOTE9DSyhsbGNwX2RldmljZXNfbG9jayk7XG4gXG4rc3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpsbGNwX3dxO1xuK1xuIHN0YXRpYyB2b2lkIG5mY19sbGNwX3J4X3NrYihzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbiBcbiB2b2lkIG5mY19sbGNwX3NvY2tfbGluayhzdHJ1Y3QgbGxjcF9zb2NrX2xpc3QgKmwsIHN0cnVjdCBzb2NrICpzaylcbkBAIC02MywyMSArNjUsMzMgQEAgc3RhdGljIHZvaWQgbmZjX2xsY3Bfc29ja2V0X3B1cmdlKHN0cnVjdCBuZmNfbGxjcF9zb2NrICpzb2NrKVxuIFx0fVxuIH1cbiBcbitzdGF0aWMgc3RydWN0IHNvY2sgKm5mY19sbGNwX3NvY2tfbGlzdF9wb3Aoc3RydWN0IGxsY3Bfc29ja19saXN0ICpsKVxuK3tcbitcdHN0cnVjdCBzb2NrICpzaztcbitcbitcdHdyaXRlX2xvY2soXHUwMDI2bC1cdTAwM2Vsb2NrKTtcbitcdHNrID0gc2tfaGVhZChcdTAwMjZsLVx1MDAzZWhlYWQpO1xuK1x0aWYgKHNrKSB7XG4rXHRcdHNvY2tfaG9sZChzayk7XG4rXHRcdHNrX2RlbF9ub2RlX2luaXQoc2spO1xuK1x0fVxuK1x0d3JpdGVfdW5sb2NrKFx1MDAyNmwtXHUwMDNlbG9jayk7XG4rXG4rXHRyZXR1cm4gc2s7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIG5mY19sbGNwX3NvY2tldF9yZWxlYXNlKHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwsIGJvb2wgZGV2aWNlLFxuIFx0XHRcdFx0ICAgIGludCBlcnIpXG4ge1xuIFx0c3RydWN0IHNvY2sgKnNrO1xuLVx0c3RydWN0IGhsaXN0X25vZGUgKnRtcDtcbiBcdHN0cnVjdCBuZmNfbGxjcF9zb2NrICpsbGNwX3NvY2s7XG4gXG4gXHRza2JfcXVldWVfcHVyZ2UoXHUwMDI2bG9jYWwtXHUwMDNldHhfcXVldWUpO1xuIFxuLVx0d3JpdGVfbG9jayhcdTAwMjZsb2NhbC1cdTAwM2Vzb2NrZXRzLmxvY2spO1xuLVxuLVx0c2tfZm9yX2VhY2hfc2FmZShzaywgdG1wLCBcdTAwMjZsb2NhbC1cdTAwM2Vzb2NrZXRzLmhlYWQpIHtcbitcdHdoaWxlICgoc2sgPSBuZmNfbGxjcF9zb2NrX2xpc3RfcG9wKFx1MDAyNmxvY2FsLVx1MDAzZXNvY2tldHMpKSkge1xuIFx0XHRsbGNwX3NvY2sgPSBuZmNfbGxjcF9zb2NrKHNrKTtcbiBcbi1cdFx0YmhfbG9ja19zb2NrKHNrKTtcbitcdFx0bG9ja19zb2NrKHNrKTtcbiBcbiBcdFx0bmZjX2xsY3Bfc29ja2V0X3B1cmdlKGxsY3Bfc29jayk7XG4gXG5AQCAtOTEsMTcgKzEwNSwyNyBAQCBzdGF0aWMgdm9pZCBuZmNfbGxjcF9zb2NrZXRfcmVsZWFzZShzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsLCBib29sIGRldmljZSxcbiBcdFx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobHNrLCBuLFxuIFx0XHRcdFx0XHRcdCBcdTAwMjZsbGNwX3NvY2stXHUwMDNlYWNjZXB0X3F1ZXVlLFxuIFx0XHRcdFx0XHRcdCBhY2NlcHRfcXVldWUpIHtcbi1cdFx0XHRcdGFjY2VwdF9zayA9IFx1MDAyNmxzay1cdTAwM2Vzaztcbi1cdFx0XHRcdGJoX2xvY2tfc29jayhhY2NlcHRfc2spO1xuLVxuLVx0XHRcdFx0bmZjX2xsY3BfYWNjZXB0X3VubGluayhhY2NlcHRfc2spO1xuK1x0XHRcdFx0Ym9vbCBwdXRfY3JlYXRpb24gPSBmYWxzZTtcbiBcbi1cdFx0XHRcdGlmIChlcnIpXG4tXHRcdFx0XHRcdGFjY2VwdF9zay1cdTAwM2Vza19lcnIgPSBlcnI7XG4tXHRcdFx0XHRhY2NlcHRfc2stXHUwMDNlc2tfc3RhdGUgPSBMTENQX0NMT1NFRDtcbi1cdFx0XHRcdGFjY2VwdF9zay1cdTAwM2Vza19zdGF0ZV9jaGFuZ2Uoc2spO1xuK1x0XHRcdFx0YWNjZXB0X3NrID0gXHUwMDI2bHNrLVx1MDAzZXNrO1xuK1x0XHRcdFx0bG9ja19zb2NrX25lc3RlZChhY2NlcHRfc2ssXG4rXHRcdFx0XHRcdFx0IFNJTkdMRV9ERVBUSF9ORVNUSU5HKTtcbitcbitcdFx0XHRcdGlmIChuZmNfbGxjcF9zb2NrKGFjY2VwdF9zayktXHUwMDNlcGFyZW50ID09IHNrKSB7XG4rXHRcdFx0XHRcdG5mY19sbGNwX2FjY2VwdF91bmxpbmsoYWNjZXB0X3NrKTtcbitcdFx0XHRcdFx0bmZjX2xsY3Bfc29ja191bmxpbmsoXHUwMDI2bG9jYWwtXHUwMDNlc29ja2V0cywgYWNjZXB0X3NrKTtcbitcbitcdFx0XHRcdFx0aWYgKGVycilcbitcdFx0XHRcdFx0XHRhY2NlcHRfc2stXHUwMDNlc2tfZXJyID0gZXJyO1xuK1x0XHRcdFx0XHRhY2NlcHRfc2stXHUwMDNlc2tfc3RhdGUgPSBMTENQX0NMT1NFRDtcbitcdFx0XHRcdFx0YWNjZXB0X3NrLVx1MDAzZXNrX3N0YXRlX2NoYW5nZShhY2NlcHRfc2spO1xuK1x0XHRcdFx0XHRzb2NrX29ycGhhbihhY2NlcHRfc2spO1xuK1x0XHRcdFx0XHRwdXRfY3JlYXRpb24gPSB0cnVlO1xuK1x0XHRcdFx0fVxuIFxuLVx0XHRcdFx0YmhfdW5sb2NrX3NvY2soYWNjZXB0X3NrKTtcbitcdFx0XHRcdHJlbGVhc2Vfc29jayhhY2NlcHRfc2spO1xuK1x0XHRcdFx0aWYgKHB1dF9jcmVhdGlvbilcbitcdFx0XHRcdFx0c29ja19wdXQoYWNjZXB0X3NrKTsgLyogY3JlYXRpb24gcmVmICovXG4gXHRcdFx0fVxuIFx0XHR9XG4gXG5AQCAtMTEwLDIzICsxMzQsMTggQEAgc3RhdGljIHZvaWQgbmZjX2xsY3Bfc29ja2V0X3JlbGVhc2Uoc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCwgYm9vbCBkZXZpY2UsXG4gXHRcdHNrLVx1MDAzZXNrX3N0YXRlID0gTExDUF9DTE9TRUQ7XG4gXHRcdHNrLVx1MDAzZXNrX3N0YXRlX2NoYW5nZShzayk7XG4gXG4tXHRcdGJoX3VubG9ja19zb2NrKHNrKTtcbi1cbi1cdFx0c2tfZGVsX25vZGVfaW5pdChzayk7XG4rXHRcdHJlbGVhc2Vfc29jayhzayk7XG4rXHRcdHNvY2tfcHV0KHNrKTtcbiBcdH1cbiBcbi1cdHdyaXRlX3VubG9jayhcdTAwMjZsb2NhbC1cdTAwM2Vzb2NrZXRzLmxvY2spO1xuLVxuIFx0LyogSWYgd2Ugc3RpbGwgaGF2ZSBhIGRldmljZSwgd2Uga2VlcCB0aGUgUkFXIHNvY2tldHMgYWxpdmUgKi9cbiBcdGlmIChkZXZpY2UgPT0gdHJ1ZSlcbiBcdFx0cmV0dXJuO1xuIFxuLVx0d3JpdGVfbG9jayhcdTAwMjZsb2NhbC1cdTAwM2VyYXdfc29ja2V0cy5sb2NrKTtcbi1cbi1cdHNrX2Zvcl9lYWNoX3NhZmUoc2ssIHRtcCwgXHUwMDI2bG9jYWwtXHUwMDNlcmF3X3NvY2tldHMuaGVhZCkge1xuK1x0d2hpbGUgKChzayA9IG5mY19sbGNwX3NvY2tfbGlzdF9wb3AoXHUwMDI2bG9jYWwtXHUwMDNlcmF3X3NvY2tldHMpKSkge1xuIFx0XHRsbGNwX3NvY2sgPSBuZmNfbGxjcF9zb2NrKHNrKTtcbiBcbi1cdFx0YmhfbG9ja19zb2NrKHNrKTtcbitcdFx0bG9ja19zb2NrKHNrKTtcbiBcbiBcdFx0bmZjX2xsY3Bfc29ja2V0X3B1cmdlKGxsY3Bfc29jayk7XG4gXG5AQCAtMTM1LDI2ICsxNTQsMjAgQEAgc3RhdGljIHZvaWQgbmZjX2xsY3Bfc29ja2V0X3JlbGVhc2Uoc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCwgYm9vbCBkZXZpY2UsXG4gXHRcdHNrLVx1MDAzZXNrX3N0YXRlID0gTExDUF9DTE9TRUQ7XG4gXHRcdHNrLVx1MDAzZXNrX3N0YXRlX2NoYW5nZShzayk7XG4gXG4tXHRcdGJoX3VubG9ja19zb2NrKHNrKTtcbi1cbi1cdFx0c2tfZGVsX25vZGVfaW5pdChzayk7XG4rXHRcdHJlbGVhc2Vfc29jayhzayk7XG4rXHRcdHNvY2tfcHV0KHNrKTtcbiBcdH1cbi1cbi1cdHdyaXRlX3VubG9jayhcdTAwMjZsb2NhbC1cdTAwM2VyYXdfc29ja2V0cy5sb2NrKTtcbiB9XG4gXG4gc3RhdGljIHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbmZjX2xsY3BfbG9jYWxfZ2V0KHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwpXG4ge1xuLVx0LyogU2luY2UgdXNpbmcgbmZjX2xsY3BfbG9jYWwgbWF5IHJlc3VsdCBpbiB1c2FnZSBvZiBuZmNfZGV2LCB3aGVuZXZlclxuLVx0ICogd2UgaG9sZCBhIHJlZmVyZW5jZSB0byBsb2NhbCwgd2UgYWxzbyBuZWVkIHRvIGhvbGQgYSByZWZlcmVuY2UgdG9cbi1cdCAqIHRoZSBkZXZpY2UgdG8gYXZvaWQgVUFGLlxuLVx0ICovXG4tXHRpZiAoIW5mY19nZXRfZGV2aWNlKGxvY2FsLVx1MDAzZWRldi1cdTAwM2VpZHgpKVxuK1x0aWYgKCFsb2NhbClcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXG4tXHRrcmVmX2dldChcdTAwMjZsb2NhbC1cdTAwM2VyZWYpO1xuK1x0aWYgKGtyZWZfZ2V0X3VubGVzc196ZXJvKFx1MDAyNmxvY2FsLVx1MDAzZXJlZikpXG4rXHRcdHJldHVybiBsb2NhbDtcbiBcbi1cdHJldHVybiBsb2NhbDtcbitcdHJldHVybiBOVUxMO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBsb2NhbF9jbGVhbnVwKHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwpXG5AQCAtMTcyLDMwICsxODUsMzQgQEAgc3RhdGljIHZvaWQgbG9jYWxfY2xlYW51cChzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsKVxuIFx0bmZjX2xsY3BfZnJlZV9zZHBfdGx2X2xpc3QoXHUwMDI2bG9jYWwtXHUwMDNlcGVuZGluZ19zZHJlcXMpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBsb2NhbF9yZWxlYXNlKHN0cnVjdCBrcmVmICpyZWYpXG4rc3RhdGljIHZvaWQgbG9jYWxfcmVsZWFzZV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiB7XG4gXHRzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsO1xuK1x0c3RydWN0IG5mY19kZXYgKmRldjtcbiBcbi1cdGxvY2FsID0gY29udGFpbmVyX29mKHJlZiwgc3RydWN0IG5mY19sbGNwX2xvY2FsLCByZWYpO1xuK1x0bG9jYWwgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IG5mY19sbGNwX2xvY2FsLCByZWxlYXNlX3dvcmspO1xuK1x0ZGV2ID0gbG9jYWwtXHUwMDNlZGV2O1xuIFxuIFx0bG9jYWxfY2xlYW51cChsb2NhbCk7XG4gXHRrZnJlZShsb2NhbCk7XG4rXHRuZmNfcHV0X2RldmljZShkZXYpO1xuIH1cbiBcbi1pbnQgbmZjX2xsY3BfbG9jYWxfcHV0KHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwpXG4rc3RhdGljIHZvaWQgbG9jYWxfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqcmVmKVxuIHtcbi1cdHN0cnVjdCBuZmNfZGV2ICpkZXY7XG4tXHRpbnQgcmV0O1xuK1x0c3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbDtcbiBcbi1cdGlmIChsb2NhbCA9PSBOVUxMKVxuLVx0XHRyZXR1cm4gMDtcbitcdGxvY2FsID0gY29udGFpbmVyX29mKHJlZiwgc3RydWN0IG5mY19sbGNwX2xvY2FsLCByZWYpO1xuIFxuLVx0ZGV2ID0gbG9jYWwtXHUwMDNlZGV2O1xuK1x0cXVldWVfd29yayhsbGNwX3dxLCBcdTAwMjZsb2NhbC1cdTAwM2VyZWxlYXNlX3dvcmspO1xuK31cbiBcbi1cdHJldCA9IGtyZWZfcHV0KFx1MDAyNmxvY2FsLVx1MDAzZXJlZiwgbG9jYWxfcmVsZWFzZSk7XG4tXHRuZmNfcHV0X2RldmljZShkZXYpO1xuK2ludCBuZmNfbGxjcF9sb2NhbF9wdXQoc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbClcbit7XG4rXHRpZiAoIWxvY2FsKVxuK1x0XHRyZXR1cm4gMDtcbiBcbi1cdHJldHVybiByZXQ7XG4rXHRyZXR1cm4ga3JlZl9wdXQoXHUwMDI2bG9jYWwtXHUwMDNlcmVmLCBsb2NhbF9yZWxlYXNlKTtcbiB9XG4gXG4gc3RhdGljIHN0cnVjdCBuZmNfbGxjcF9zb2NrICpuZmNfbGxjcF9zb2NrX2dldChzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsLFxuQEAgLTE3MDUsNiArMTcyMiw3IEBAIGludCBuZmNfbGxjcF9yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IG5mY19kZXYgKm5kZXYpXG4gXHRJTklUX1dPUksoXHUwMDI2bG9jYWwtXHUwMDNlcnhfd29yaywgbmZjX2xsY3Bfcnhfd29yayk7XG4gXG4gXHRJTklUX1dPUksoXHUwMDI2bG9jYWwtXHUwMDNldGltZW91dF93b3JrLCBuZmNfbGxjcF90aW1lb3V0X3dvcmspO1xuK1x0SU5JVF9XT1JLKFx1MDAyNmxvY2FsLVx1MDAzZXJlbGVhc2Vfd29yaywgbG9jYWxfcmVsZWFzZV93b3JrKTtcbiBcbiBcdHJ3bG9ja19pbml0KFx1MDAyNmxvY2FsLVx1MDAzZXNvY2tldHMubG9jayk7XG4gXHRyd2xvY2tfaW5pdChcdTAwMjZsb2NhbC1cdTAwM2Vjb25uZWN0aW5nX3NvY2tldHMubG9jayk7XG5AQCAtMTc0OCwxMCArMTc2NiwyMyBAQCB2b2lkIG5mY19sbGNwX3VucmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCBuZmNfZGV2ICpkZXYpXG4gXG4gaW50IF9faW5pdCBuZmNfbGxjcF9pbml0KHZvaWQpXG4ge1xuLVx0cmV0dXJuIG5mY19sbGNwX3NvY2tfaW5pdCgpO1xuK1x0aW50IHJldDtcbitcbitcdGxsY3Bfd3EgPSBhbGxvY193b3JrcXVldWUoXCJuZmNfbGxjcF93cVwiLCBXUV9VTkJPVU5ELCAwKTtcbitcdGlmICghbGxjcF93cSlcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRyZXQgPSBuZmNfbGxjcF9zb2NrX2luaXQoKTtcbitcdGlmIChyZXQpIHtcbitcdFx0ZGVzdHJveV93b3JrcXVldWUobGxjcF93cSk7XG4rXHRcdHJldHVybiByZXQ7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbiB9XG4gXG4gdm9pZCBuZmNfbGxjcF9leGl0KHZvaWQpXG4ge1xuIFx0bmZjX2xsY3Bfc29ja19leGl0KCk7XG4rXHRkZXN0cm95X3dvcmtxdWV1ZShsbGNwX3dxKTtcbiB9XG5kaWZmIC0tZ2l0IGEvbmV0L25mYy9sbGNwX3NvY2suYyBiL25ldC9uZmMvbGxjcF9zb2NrLmNcbmluZGV4IDU1NThkOGE0ZDQ4YjMuLmNlNjg3NWViNThmYmMgMTAwNjQ0XG4tLS0gYS9uZXQvbmZjL2xsY3Bfc29jay5jXG4rKysgYi9uZXQvbmZjL2xsY3Bfc29jay5jXG5AQCAtMzkyLDExICszOTIsMTIgQEAgdm9pZCBuZmNfbGxjcF9hY2NlcHRfdW5saW5rKHN0cnVjdCBzb2NrICpzaylcbiBcbiBcdHByX2RlYnVnKFwic3RhdGUgJWRcXG5cIiwgc2stXHUwMDNlc2tfc3RhdGUpO1xuIFxuLVx0bGlzdF9kZWxfaW5pdChcdTAwMjZsbGNwX3NvY2stXHUwMDNlYWNjZXB0X3F1ZXVlKTtcbi1cdHNrX2FjY2VwdHFfcmVtb3ZlZChsbGNwX3NvY2stXHUwMDNlcGFyZW50KTtcbi1cdGxsY3Bfc29jay1cdTAwM2VwYXJlbnQgPSBOVUxMO1xuLVxuLVx0c29ja19wdXQoc2spO1xuK1x0aWYgKGxsY3Bfc29jay1cdTAwM2VwYXJlbnQpIHtcbitcdFx0bGlzdF9kZWxfaW5pdChcdTAwMjZsbGNwX3NvY2stXHUwMDNlYWNjZXB0X3F1ZXVlKTtcbitcdFx0c2tfYWNjZXB0cV9yZW1vdmVkKGxsY3Bfc29jay1cdTAwM2VwYXJlbnQpO1xuK1x0XHRsbGNwX3NvY2stXHUwMDNlcGFyZW50ID0gTlVMTDtcbitcdFx0c29ja19wdXQoc2spO1xuK1x0fVxuIH1cbiBcbiB2b2lkIG5mY19sbGNwX2FjY2VwdF9lbnF1ZXVlKHN0cnVjdCBzb2NrICpwYXJlbnQsIHN0cnVjdCBzb2NrICpzaylcbkBAIC00MjMsMTIgKzQyNCwyMCBAQCBzdHJ1Y3Qgc29jayAqbmZjX2xsY3BfYWNjZXB0X2RlcXVldWUoc3RydWN0IHNvY2sgKnBhcmVudCxcbiBcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShsc2ssIG4sIFx1MDAyNmxsY3BfcGFyZW50LVx1MDAzZWFjY2VwdF9xdWV1ZSxcbiBcdFx0XHRcdCBhY2NlcHRfcXVldWUpIHtcbitcdFx0c3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbDtcbitcbiBcdFx0c2sgPSBcdTAwMjZsc2stXHUwMDNlc2s7XG4tXHRcdGxvY2tfc29jayhzayk7XG4rXHRcdGxvY2tfc29ja19uZXN0ZWQoc2ssIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTtcbiBcbiBcdFx0aWYgKHNrLVx1MDAzZXNrX3N0YXRlID09IExMQ1BfQ0xPU0VEKSB7XG4tXHRcdFx0cmVsZWFzZV9zb2NrKHNrKTtcbitcdFx0XHRsb2NhbCA9IG5mY19sbGNwX3NvY2soc2spLVx1MDAzZWxvY2FsO1xuK1xuIFx0XHRcdG5mY19sbGNwX2FjY2VwdF91bmxpbmsoc2spO1xuK1x0XHRcdGlmIChsb2NhbClcbitcdFx0XHRcdG5mY19sbGNwX3NvY2tfdW5saW5rKFx1MDAyNmxvY2FsLVx1MDAzZXNvY2tldHMsIHNrKTtcbitcdFx0XHRzb2NrX29ycGhhbihzayk7XG4rXHRcdFx0cmVsZWFzZV9zb2NrKHNrKTtcbitcdFx0XHRzb2NrX3B1dChzayk7XG4gXHRcdFx0Y29udGludWU7XG4gXHRcdH1cbiBcbkBAIC00NjQsNyArNDczLDcgQEAgc3RhdGljIGludCBsbGNwX3NvY2tfYWNjZXB0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrZXQgKm5ld3NvY2ssXG4gXG4gXHRwcl9kZWJ1ZyhcInBhcmVudCAlcFxcblwiLCBzayk7XG4gXG4tXHRsb2NrX3NvY2tfbmVzdGVkKHNrLCBTSU5HTEVfREVQVEhfTkVTVElORyk7XG4rXHRsb2NrX3NvY2soc2spO1xuIFxuIFx0aWYgKHNrLVx1MDAzZXNrX3N0YXRlICE9IExMQ1BfTElTVEVOKSB7XG4gXHRcdHJldCA9IC1FQkFERkQ7XG5AQCAtNDkwLDcgKzQ5OSwxMiBAQCBzdGF0aWMgaW50IGxsY3Bfc29ja19hY2NlcHQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2tldCAqbmV3c29jayxcbiBcbiBcdFx0cmVsZWFzZV9zb2NrKHNrKTtcbiBcdFx0dGltZW8gPSBzY2hlZHVsZV90aW1lb3V0KHRpbWVvKTtcbi1cdFx0bG9ja19zb2NrX25lc3RlZChzaywgU0lOR0xFX0RFUFRIX05FU1RJTkcpO1xuK1x0XHRsb2NrX3NvY2soc2spO1xuK1xuK1x0XHRpZiAoc2stXHUwMDNlc2tfc3RhdGUgIT0gTExDUF9MSVNURU4pIHtcbitcdFx0XHRyZXQgPSAtRUJBREZEO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHR9XG4gXHR9XG4gXHRfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7XG4gXHRyZW1vdmVfd2FpdF9xdWV1ZShza19zbGVlcChzayksIFx1MDAyNndhaXQpO1xuQEAgLTYyOSwxMyArNjQzLDI0IEBAIHN0YXRpYyBpbnQgbGxjcF9zb2NrX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jaylcbiBcbiBcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGxzaywgbiwgXHUwMDI2bGxjcF9zb2NrLVx1MDAzZWFjY2VwdF9xdWV1ZSxcbiBcdFx0XHRcdFx0IGFjY2VwdF9xdWV1ZSkge1xuK1x0XHRcdGJvb2wgcHV0X2NyZWF0aW9uID0gZmFsc2U7XG4rXG4gXHRcdFx0YWNjZXB0X3NrID0gXHUwMDI2bHNrLVx1MDAzZXNrO1xuLVx0XHRcdGxvY2tfc29jayhhY2NlcHRfc2spO1xuK1x0XHRcdGxvY2tfc29ja19uZXN0ZWQoYWNjZXB0X3NrLCBTSU5HTEVfREVQVEhfTkVTVElORyk7XG4gXG4tXHRcdFx0bmZjX2xsY3Bfc2VuZF9kaXNjb25uZWN0KGxzayk7XG4tXHRcdFx0bmZjX2xsY3BfYWNjZXB0X3VubGluayhhY2NlcHRfc2spO1xuK1x0XHRcdGlmIChuZmNfbGxjcF9zb2NrKGFjY2VwdF9zayktXHUwMDNlcGFyZW50ID09IHNrKSB7XG4rXHRcdFx0XHRuZmNfbGxjcF9zZW5kX2Rpc2Nvbm5lY3QobHNrKTtcbitcdFx0XHRcdG5mY19sbGNwX2FjY2VwdF91bmxpbmsoYWNjZXB0X3NrKTtcbitcdFx0XHRcdG5mY19sbGNwX3NvY2tfdW5saW5rKFx1MDAyNmxvY2FsLVx1MDAzZXNvY2tldHMsIGFjY2VwdF9zayk7XG4rXG4rXHRcdFx0XHRhY2NlcHRfc2stXHUwMDNlc2tfc3RhdGUgPSBMTENQX0NMT1NFRDtcbitcdFx0XHRcdHNvY2tfb3JwaGFuKGFjY2VwdF9zayk7XG4rXHRcdFx0XHRwdXRfY3JlYXRpb24gPSB0cnVlO1xuK1x0XHRcdH1cbiBcbiBcdFx0XHRyZWxlYXNlX3NvY2soYWNjZXB0X3NrKTtcbitcdFx0XHRpZiAocHV0X2NyZWF0aW9uKVxuK1x0XHRcdFx0c29ja19wdXQoYWNjZXB0X3NrKTsgLyogY3JlYXRpb24gcmVmICovXG4gXHRcdH1cbiBcdH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA5OjAyOjI2LjY4OTc1ODI1OVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjExNDgwNzQxMzExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgdGhlIE5GQyBMTENQIFBhdGNoOiBBIFF1aWNrIEFzc2Vzc21lbnQqKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoaXMgcGF0Y2ggYW5kIGZpZ3VyZSBvdXQgdGhlIGJlc3QgYXBwcm9hY2ggZm9yIGZ1enppbmcgaXQuIEZpcnN0IHRoaW5ncyBmaXJzdDogdGhlIHBhdGNoIGludm9sdmVzIGBuZXQvbmZjL2xsY3AuaGAsIGBuZXQvbmZjL2xsY3BfY29yZS5jYCwgYW5kIGBuZXQvbmZjL2xsY3Bfc29jay5jYC4gVGhhdCB0ZWxscyBtZSB3ZSdyZSBsb29raW5nIGF0IGZpeGVzIGZvciBjb25jdXJyZW5jeSBhbmQgcmVmY291bnRpbmcgaXNzdWVzIHdpdGhpbiBORkMncyBMTENQIHNvY2tldCBoYW5kbGluZywgc3BlY2lmaWNhbGx5IGFyb3VuZCBmdW5jdGlvbnMgbGlrZSBgbmZjX2xsY3Bfc29ja2V0X3JlbGVhc2VgLCBgbmZjX2xsY3Bfc29ja19saXN0X3BvcGAsIHZhcmlvdXMgbG9jYWwgcmVsZWFzZSBhbmQgcHV0IGZ1bmN0aW9ucywgYWNjZXB0L2RlcXVldWUgb3BlcmF0aW9ucywgYW5kIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYSB3b3JrcXVldWUgKGBsbGNwX3dxYCkgZm9yIGRlZmVycmVkIGxvY2FsIHJlbGVhc2VzLiBUaGUgc2hpZnQgZnJvbSBgYmhfbG9ja19zb2NrYCB0byBgbG9ja19zb2NrYCBmb3Igc29ja2V0IGxvY2tpbmcgaXMgYSBrZXkgaW5kaWNhdG9yIG9mIGNvbmN1cnJlbmN5IGNvbmNlcm5zIGJlaW5nIGFkZHJlc3NlZC4gVGhlIGZpeCBsaWtlbHkgcmV2b2x2ZXMgYXJvdW5kIHNvY2tfcHV0IGFuZCBzb2NrX29ycGhhbi5cblxuTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogY2FuIHdlIGV2ZW4gcmVhY2ggdGhpcyBjb2RlIHdpdGggZnV6emluZz8gR29vZCBuZXdzLCBpdCBsb29rcyBsaWtlIHN5emthbGxlciBhbHJlYWR5IGhlYXZpbHkgZXhlcmNpc2VzIE5GQyBhbmQgTExDUCBzb2NrZXRzLiBUaGF0IG1lYW5zIHdlIGhhdmUgYSBjbGVhciBwYXRoIHVzaW5nIHJhdyBzb2NrZXRzLCB2aXJ0dWFsIGRldmljZXMsIG5ldGxpbmsgaW50ZXJmYWNlcywgYW5kIHN0YW5kYXJkIHNvY2tldCBzeXNjYWxscy4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgZnV6emluZyFcblxuVGltZSB0byBjaGVjayB0aGUgS2NvbmZpZyBzZXR0aW5ncyBpbiBgbmV0L25mYy9gLiBHb3R0YSBjb25maXJtIHRoZSByZWxldmFudCBvcHRpb25zIGFyZSBlbmFibGVkIGluIG91ciBmdXp6aW5nIGVudmlyb25tZW50LiBCYXNlZCBvbiB0aGUgZmlsZSBjb250ZXh0LCB0aGUgbWFpbiBzeW1ib2xzIHNob3VsZCBiZSB0aGUgZnVuY3Rpb25zIGRlc2NyaWJlZCBhYm92ZS4gSSB3aWxsIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGZvY3VzIHN5bWJvbHMgZm9yIHRoaXMgYW5hbHlzaXMuIFdpdGggdGhpcyBpbmZvcm1hdGlvbiwgSSBjYW4gY3JlYXRlIGFuIGluaXRpYWwgZnV6emluZyBjb25maWcsIHdoaWNoIEkgd2lsbCB0aGVuIHJlZmluZSBiYXNlZCBvbiBmdXp6aW5nIHJlc3VsdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3MzIsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MDksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwOTowMjozOC4xNzA1MDM0OVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTQ0Mzc1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkZDXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25mYy9LY29uZmlnLTUtXFxubmV0L25mYy9LY29uZmlnOjY6bWVudWNvbmZpZyBORkNcXG5uZXQvbmZjL0tjb25maWctNy1cXHRkZXBlbmRzIG9uIFJGS0lMTCB8fCAhUkZLSUxMXFxuLS1cXG5uZXQvbmZjL0tjb25maWctMTYtXFxubmV0L25mYy9LY29uZmlnOjE3OmNvbmZpZyBORkNfRElHSVRBTFxcbm5ldC9uZmMvS2NvbmZpZy0xOC1cXHRkZXBlbmRzIG9uIE5GQ1xcbi0tXFxubmV0L25mYy9oY2kvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbm5ldC9uZmMvaGNpL0tjb25maWc6Mjpjb25maWcgTkZDX0hDSVxcbm5ldC9uZmMvaGNpL0tjb25maWctMy1cXHRkZXBlbmRzIG9uIE5GQ1xcbi0tXFxubmV0L25mYy9oY2kvS2NvbmZpZy0xMC1cXG5uZXQvbmZjL2hjaS9LY29uZmlnOjExOmNvbmZpZyBORkNfU0hETENcXG5uZXQvbmZjL2hjaS9LY29uZmlnLTEyLVxcdGRlcGVuZHMgb24gTkZDX0hDSVxcbi0tXFxubmV0L25mYy9uY2kvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbm5ldC9uZmMvbmNpL0tjb25maWc6Mjpjb25maWcgTkZDX05DSVxcbm5ldC9uZmMvbmNpL0tjb25maWctMy1cXHRkZXBlbmRzIG9uIE5GQ1xcbi0tXFxubmV0L25mYy9uY2kvS2NvbmZpZy0xMi1cXG5uZXQvbmZjL25jaS9LY29uZmlnOjEzOmNvbmZpZyBORkNfTkNJX1NQSVxcbm5ldC9uZmMvbmNpL0tjb25maWctMTQtXFx0ZGVwZW5kcyBvbiBORkNfTkNJIFxcdTAwMjZcXHUwMDI2IFNQSVxcbi0tXFxubmV0L25mYy9uY2kvS2NvbmZpZy0yMy1cXG5uZXQvbmZjL25jaS9LY29uZmlnOjI0OmNvbmZpZyBORkNfTkNJX1VBUlRcXG5uZXQvbmZjL25jaS9LY29uZmlnLTI1LVxcdGRlcGVuZHMgb24gTkZDX05DSSBcXHUwMDI2XFx1MDAyNiBUVFlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDk6MDI6MzguMjE1OTUzMzZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNjQzMTA2NTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyBpdDpcblxuKipEaXZpbmcgaW50byB0aGUgTkZDIERyaXZlciBDb25maWd1cmF0aW9uKipcblxuT2theSwgdGltZSB0byBnZXQgYSBoYW5kbGUgb24gdGhlIE5GQyBkcml2ZXIgc2l0dWF0aW9uLiBJJ2xsIHN0YXJ0IGJ5IHRha2luZyBhIGxvb2sgYXQgYG5ldC9uZmMvS2NvbmZpZ2AuIFRoYXQncyB3aGVyZSBhbGwgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZGVmaW5lZCwgcmlnaHQ/IEkgd2FudCB0byBzZWUgd2hhdCBmZWF0dXJlcyBhcmUgYXZhaWxhYmxlLCB3aGF0IGRlcGVuZGVuY2llcyB0aGVyZSBhcmUsIGFuZCB3aGF0IHRoZSBkZWZhdWx0IHNldHRpbmdzIG1pZ2h0IGJlLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgZ29vZCBvdmVydmlldyBvZiB0aGUgZGVzaWduIHNwYWNlIGFuZCBob3cgbXVjaCBmbGV4aWJpbGl0eSB3ZSBoYXZlLiBUaGVuLCBJJ2xsIG1vdmUgb24gdG8gYG5ldC9uZmMvTWFrZWZpbGVgLiBUaGF0IHdpbGwgc2hvdyBtZSBob3cgdGhlIGRpZmZlcmVudCBzb3VyY2UgZmlsZXMgYXJlIGNvbXBpbGVkIGFuZCBsaW5rZWQsIHRoZSBidWlsZCB0YXJnZXRzLCBhbmQgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGJhc2VkIG9uIHRob3NlIEtjb25maWcgb3B0aW9ucyBJIGp1c3QgbG9va2VkIGF0LiBVbmRlcnN0YW5kaW5nIHRoZSBidWlsZCBwcm9jZXNzIGlzIGNyaXRpY2FsLCBlc3BlY2lhbGx5IHdoZW4gSSBnZXQgaW50byBjdXN0b21pemF0aW9uIGFuZCBwb3RlbnRpYWxseSBwYXRjaGluZyB0aGUgY29kZS4gSG9wZWZ1bGx5LCB0aGVzZSB0d28gZmlsZXMgd2lsbCBnaXZlIG1lIGEgc29saWQgZm91bmRhdGlvbiBmb3IgdW5kZXJzdGFuZGluZyB0aGUgZXhpc3RpbmcgTkZDIGRyaXZlciBpbmZyYXN0cnVjdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjkzOSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA5OjAyOjQxLjg1OTA2NTg4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzM0MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25mYy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIE5GQyBzdWJzeXN0ZW0gY29uZmlndXJhdGlvblxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRtZW51Y29uZmlnIE5GQ1xcbiAgIDc6XFx0XFx0ZGVwZW5kcyBvbiBSRktJTEwgfHwgIVJGS0lMTFxcbiAgIDg6XFx0XFx0dHJpc3RhdGUgXFxcIk5GQyBzdWJzeXN0ZW0gc3VwcG9ydFxcXCJcXG4gICA5OlxcdFxcdGRlZmF1bHQgblxcbiAgMTA6XFx0XFx0aGVscFxcbiAgMTE6XFx0XFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGJ1aWxkIHN1cHBvcnQgZm9yIE5GQyAoTmVhciBmaWVsZFxcbiAgMTI6XFx0XFx0ICBjb21tdW5pY2F0aW9uKSBkZXZpY2VzLlxcbiAgMTM6XFx0XFxuICAxNDpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBzdXBwb3J0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGxcXG4gIDE1OlxcdFxcdCAgYmUgY2FsbGVkIG5mYy5cXG4gIDE2OlxcdFxcbiAgMTc6XFx0Y29uZmlnIE5GQ19ESUdJVEFMXFxuICAxODpcXHRcXHRkZXBlbmRzIG9uIE5GQ1xcbiAgMTk6XFx0XFx0c2VsZWN0IENSQ19DQ0lUVFxcbiAgMjA6XFx0XFx0c2VsZWN0IENSQ19JVFVfVFxcbiAgMjE6XFx0XFx0dHJpc3RhdGUgXFxcIk5GQyBEaWdpdGFsIFByb3RvY29sIHN0YWNrIHN1cHBvcnRcXFwiXFxuICAyMjpcXHRcXHRkZWZhdWx0IG5cXG4gIDIzOlxcdFxcdGhlbHBcXG4gIDI0OlxcdFxcdCAgU2F5IFkgaWYgeW91IHdhbnQgdG8gYnVpbGQgTkZDIGRpZ2l0YWwgcHJvdG9jb2wgc3RhY2sgc3VwcG9ydC5cXG4gIDI1OlxcdFxcdCAgVGhpcyBpcyBuZWVkZWQgYnkgTkZDIGNoaXBzZXRzIHdob3NlIGZpcm13YXJlIG9ubHkgaW1wbGVtZW50XFxuICAyNjpcXHRcXHQgIHRoZSBORkMgYW5hbG9nIGxheWVyLlxcbiAgMjc6XFx0XFxuICAyODpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBzdXBwb3J0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGxcXG4gIDI5OlxcdFxcdCAgYmUgY2FsbGVkIG5mY19kaWdpdGFsLlxcbiAgMzA6XFx0XFxuICAzMTpcXHRzb3VyY2UgXFxcIm5ldC9uZmMvbmNpL0tjb25maWdcXFwiXFxuICAzMjpcXHRzb3VyY2UgXFxcIm5ldC9uZmMvaGNpL0tjb25maWdcXFwiXFxuICAzMzpcXHRcXG4gIDM0OlxcdHNvdXJjZSBcXFwiZHJpdmVycy9uZmMvS2NvbmZpZ1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDk6MDI6NDEuODU5MTQxNTRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0OTY0Mjk4Njk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgdGhlIGBuZXQvbmZjL01ha2VmaWxlYCoqXG5cbk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBgbmV0L25mYy9NYWtlZmlsZWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBnb2luZyBvbiB3aXRoIHRoZSBORkMgc3RhY2sgYnVpbGQuIFRoaXMgaXMgdGhlIGNlbnRyYWwgcG9pbnQgZm9yIGNvbnRyb2xsaW5nIGhvdyB0aGUgTkZDIGtlcm5lbCBtb2R1bGVzIGFyZSBidWlsdCwgbGlua2VkLCBhbmQgaW5jbHVkZWQuIEknbSBnb2luZyB0byBxdWlja2x5IHNjYW4gaXQgdG8gZ3Jhc3AgdGhlIG92ZXJhbGwgc3RydWN0dXJlLiBJJ2xsIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gYW55IGNvbmRpdGlvbmFsIGxvZ2ljLCBlc3BlY2lhbGx5IGFyb3VuZCBrZXJuZWwgdmVyc2lvbiBjaGVja3MsIEtjb25maWcgb3B0aW9ucywgYW5kIHRhcmdldC1zcGVjaWZpYyBjb25maWd1cmF0aW9ucywgYXMgdGhlc2UgYXJlIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIHBvcnRhYmlsaXR5IGFuZCBmZWF0dXJlIGVuYWJsZW1lbnQuIEknbSBhbHNvIGxvb2tpbmcgZm9yIGRlcGVuZGVuY2llcyDigJMgd2hhdCBvdGhlciBNYWtlZmlsZXMgb3Igc291cmNlIGZpbGVzIGFyZSBpbmNsdWRlZCwgYW5kIHdoYXQgbGlicmFyaWVzIGFyZSBsaW5rZWQ/IEtub3dpbmcgdGhpcyB3aWxsIGhlbHAgaWRlbnRpZnkgYW55IHBvdGVudGlhbCBjb25mbGljdHMgb3IgYXJlYXMgdGhhdCBuZWVkIG1vZGlmaWNhdGlvbiBmb3IgbXkgc3BlY2lmaWMgcGxhdGZvcm0uIFVsdGltYXRlbHksIEknbSBhaW1pbmcgdG8gZ2FpbiBhIHNvbGlkIGdyYXNwIG9mIHRoaXMgTWFrZWZpbGUncyByb2xlIGluIHRoZSBsYXJnZXIga2VybmVsIGJ1aWxkIHByb2Nlc3MgYW5kIGlkZW50aWZ5IGFueSBhcmVhcyB0aGF0IG1pZ2h0IGFmZmVjdCBteSBhcmVhIG9mIHdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc2MDgsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA5OjAyOjQ2LjgyMzQ0MzIyOFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2NjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZmMvTWFrZWZpbGVcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIE1ha2VmaWxlIGZvciB0aGUgTGludXggTkZDIHN1YnN5c3RlbS5cXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0b2JqLSQoQ09ORklHX05GQykgKz0gbmZjLm9cXG4gICA3OlxcdG9iai0kKENPTkZJR19ORkNfTkNJKSArPSBuY2kvXFxuICAgODpcXHRvYmotJChDT05GSUdfTkZDX0hDSSkgKz0gaGNpL1xcbiAgIDk6XFx0b2JqLSQoQ09ORklHX05GQ19ESUdJVEFMKSArPSBuZmNfZGlnaXRhbC5vXFxuICAxMDpcXHRcXG4gIDExOlxcdG5mYy1vYmpzIDo9IGNvcmUubyBuZXRsaW5rLm8gYWZfbmZjLm8gcmF3c29jay5vIGxsY3BfY29yZS5vIGxsY3BfY29tbWFuZHMubyBcXFxcXFxuICAxMjpcXHRcXHRcXHRsbGNwX3NvY2sub1xcbiAgMTM6XFx0XFxuICAxNDpcXHRuZmNfZGlnaXRhbC1vYmpzIDo9IGRpZ2l0YWxfY29yZS5vIGRpZ2l0YWxfdGVjaG5vbG9neS5vIGRpZ2l0YWxfZGVwLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDk6MDI6NDYuODIzNTIxNjI4WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzMzMTc1NDYxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRoaW5raW5nIHByb2Nlc3M6XG5cbioqSW52ZXN0aWdhdGluZyBORkMgTW9kdWxlIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIGBsbGNwX2NvcmUub2AgYW5kIGBsbGNwX3NvY2sub2AgYXJlIGNsZWFybHkgcGFydCBvZiB0aGUgTkZDIHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYG5mYy1vYmpzYCBsaXN0LiBUaGF0IG1ha2VzIHNlbnNlLCBlc3BlY2lhbGx5IGdpdmVuIHRoZWlyIG5hbWVzLiBTaW5jZSBJJ20gbG9va2luZyBhdCB0aGlzIGJ1aWxkIHN5c3RlbSwgbXkgbmV4dCBzdGVwIGlzIHRvIGZpZ3VyZSBvdXQgdGhlIGxhcmdlciBkZXBlbmRlbmNpZXMuIEkga25vdyBORkMgaXMgYSBjb25maWd1cmFibGUgZmVhdHVyZSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gQXJlIHRoZXJlIG90aGVyIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMgbGlrZSBgQ09ORklHX05GQ19TSU1gIG9yIGp1c3QgYENPTkZJR19ORkNgIHRoYXQgY29udHJvbCB3aGV0aGVyIHRoZXNlIG1vZHVsZXMgZ2V0IGNvbXBpbGVkIGluPyBJJ2xsIG5lZWQgdG8gY29uZmlybSB3aGF0IHR1cm5zIG9uIHRoZSBidWlsZCBmb3IgdGhvc2Ugb2JqZWN0cywgYW5kIHRoZSBiZXN0IHBsYWNlIHRvIGRvIHRoYXQgaXMgcHJvYmFibHkgdGhlIEtjb25maWcgZmlsZXMuIFRoZSBvbmUgaW4gYGRyaXZlcnMvbmZjL0tjb25maWdgIHNlZW1zIGxpa2UgdGhlIG9idmlvdXMgcGxhY2UgdG8gc3RhcnQuIExldCdzIHNlZSB3aGF0J3MgaW4gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgwODksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA5OjAyOjUwLjE1NTI3OTM4M1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDI4NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZmMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBOZWFyIEZpZWxkIENvbW11bmljYXRpb24gKE5GQykgZGV2aWNlc1xcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRtZW51IFxcXCJOZWFyIEZpZWxkIENvbW11bmljYXRpb24gKE5GQykgZGV2aWNlc1xcXCJcXG4gICA3OlxcdFxcdGRlcGVuZHMgb24gTkZDXFxuICAgODpcXHRcXG4gICA5OlxcdGNvbmZpZyBORkNfVFJGNzk3MEFcXG4gIDEwOlxcdFxcdHRyaXN0YXRlIFxcXCJUZXhhcyBJbnN0cnVtZW50cyBUUkY3OTcwYSBORkMgZHJpdmVyXFxcIlxcbiAgMTE6XFx0XFx0ZGVwZW5kcyBvbiBTUEkgXFx1MDAyNlxcdTAwMjYgTkZDX0RJR0lUQUwgXFx1MDAyNlxcdTAwMjYgR1BJT0xJQlxcbiAgMTI6XFx0XFx0aGVscFxcbiAgMTM6XFx0XFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBORkMgZHJpdmVyIGZvciBUZXhhcyBJbnN0cnVtZW50cycgVFJGNzk3MGFcXG4gIDE0OlxcdFxcdCAgZGV2aWNlLiBTdWNoIGRldmljZSBzdXBwb3J0cyA1IGRpZmZlcmVudCBwcm90b2NvbHM6IElTTzE0NDQzQSxcXG4gIDE1OlxcdFxcdCAgSVNPMTQ0NDNCLCBGZUxpQ2EsIElTTzE1NjkzIGFuZCBJU08xODAwMC0zLlxcbiAgMTY6XFx0XFxuICAxNzpcXHRcXHQgIFNheSBZIGhlcmUgdG8gY29tcGlsZSBzdXBwb3J0IGZvciBUUkY3OTcwYSBpbnRvIHRoZSBrZXJuZWwgb3JcXG4gIDE4OlxcdFxcdCAgc2F5IE0gIHRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUuIFRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWRcXG4gIDE5OlxcdFxcdCAgdHJmNzk3MGEua28uXFxuICAyMDpcXHRcXG4gIDIxOlxcdGNvbmZpZyBORkNfTUVJX1BIWVxcbiAgMjI6XFx0XFx0dHJpc3RhdGUgXFxcIk1FSSBidXMgTkZDIGRldmljZSBzdXBwb3J0XFxcIlxcbiAgMjM6XFx0XFx0ZGVwZW5kcyBvbiBJTlRFTF9NRUkgXFx1MDAyNlxcdTAwMjYgTkZDX0hDSVxcbiAgMjQ6XFx0XFx0aGVscFxcbiAgMjU6XFx0XFx0ICBUaGlzIGFkZHMgc3VwcG9ydCB0byB1c2UgYW4gbWVpIGJ1cyBuZmMgZGV2aWNlLiBTZWxlY3QgdGhpcyBpZiB5b3VcXG4gIDI2OlxcdFxcdCAgd2lsbCB1c2UgYW4gSENJIE5GQyBkcml2ZXIgZm9yIGFuIE5GQyBjaGlwIGNvbm5lY3RlZCBiZWhpbmQgYW5cXG4gIDI3OlxcdFxcdCAgSW50ZWwncyBNYW5hZ2VtZW50IEVuZ2luZSBjaGlwLlxcbiAgMjg6XFx0XFxuICAyOTpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICAzMDpcXHRcXG4gIDMxOlxcdGNvbmZpZyBORkNfU0lNXFxuICAzMjpcXHRcXHR0cmlzdGF0ZSBcXFwiTkZDIGhhcmR3YXJlIHNpbXVsYXRvciBkcml2ZXJcXFwiXFxuICAzMzpcXHRcXHRkZXBlbmRzIG9uIE5GQ19ESUdJVEFMXFxuICAzNDpcXHRcXHRoZWxwXFxuICAzNTpcXHRcXHQgIFRoaXMgZHJpdmVyIGRlY2xhcmVzIHR3byB2aXJ0dWFsIE5GQyBkZXZpY2VzIHN1cHBvcnRpbmcgTkZDLURFUFxcbiAgMzY6XFx0XFx0ICBwcm90b2NvbC4gQW4gTExDUCBjb25uZWN0aW9uIGNhbiBiZSBlc3RhYmxpc2hlZCBiZXR3ZWVuIHRoZW0gYW5kXFxuICAzNzpcXHRcXHQgIGFsbCBwYWNrZXRzIHNlbnQgZnJvbSBvbmUgZGV2aWNlIGlzIHNlbnQgYmFjayB0byB0aGUgb3RoZXIsIGFjdGluZyBhc1xcbiAgMzg6XFx0XFx0ICBsb29wYmFjayBkZXZpY2VzLlxcbiAgMzk6XFx0XFxuICA0MDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICA0MTpcXHRcXG4gIDQyOlxcdGNvbmZpZyBORkNfUE9SVDEwMFxcbiAgNDM6XFx0XFx0dHJpc3RhdGUgXFxcIlNvbnkgTkZDIFBvcnQtMTAwIFNlcmllcyBVU0IgZGV2aWNlIHN1cHBvcnRcXFwiXFxuICA0NDpcXHRcXHRkZXBlbmRzIG9uIFVTQlxcbiAgNDU6XFx0XFx0ZGVwZW5kcyBvbiBORkNfRElHSVRBTFxcbiAgNDY6XFx0XFx0aGVscFxcbiAgNDc6XFx0XFx0ICBUaGlzIGFkZHMgc3VwcG9ydCBmb3IgU29ueSBQb3J0LTEwMCBjaGlwIGJhc2VkIFVTQiBkZXZpY2VzIHN1Y2ggYXMgdGhlXFxuICA0ODpcXHRcXHQgIFJDLVMzODAgZG9uZ2xlLlxcbiAgNDk6XFx0XFxuICA1MDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICA1MTpcXHRcXG4gIDUyOlxcdGNvbmZpZyBORkNfVklSVFVBTF9OQ0lcXG4gIDUzOlxcdFxcdHRyaXN0YXRlIFxcXCJOQ0kgZGV2aWNlIHNpbXVsYXRvciBkcml2ZXJcXFwiXFxuICA1NDpcXHRcXHRkZXBlbmRzIG9uIE5GQ19OQ0lcXG4gIDU1OlxcdFxcdGhlbHBcXG4gIDU2OlxcdFxcdCAgTkNJIHZpcnR1YWwgZGV2aWNlIHNpbXVsYXRlcyBhIE5DSSBkZXZpY2UgdG8gdGhlIHVzZXIuXFxuICA1NzpcXHRcXHQgIEl0IGNhbiBiZSB1c2VkIHRvIHZhbGlkYXRlIHRoZSBOQ0kgbW9kdWxlIGFuZCBhcHBsaWNhdGlvbnMuXFxuICA1ODpcXHRcXHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIGNvbW11bmljYXRpb24gYmV0d2VlbiB0aGUgdmlydHVhbCBOQ0kgZGV2aWNlIGFuZFxcbiAgNTk6XFx0XFx0ICBtb2R1bGUuXFxuICA2MDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDk6MDI6NTAuMTU1Mzg2MzQzWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjcwNzM4MDY0MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCdzIEltcGFjdCBvbiB0aGUgTkZDIExMQ1AgU3Vic3lzdGVtKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBxdWlja2x5IGlkZW50aWZ5IHdoaWNoIHN5bWJvbHMgaGF2ZSBiZWVuIHRvdWNoZWQuIFRoZSBtb2RpZmljYXRpb24gaXMgaW4gYG5ldC9uZmMvbGxjcF9jb3JlLmNgIGFuZCBgbmV0L25mYy9sbGNwX3NvY2suY2AuIEkgc2VlIGEgbWl4IG9mIHN0YXRpYyBhbmQgbm9uLXN0YXRpYyBmdW5jdGlvbnMuIFNwZWNpZmljYWxseSwgdGhlIGxpc3Qgb2YgZnVuY3Rpb25zIGluIGBuZXQvbmZjL2xsY3BfY29yZS5jYCBoYXMgY2F1Z2h0IG15IGV5ZTogYG5mY19sbGNwX3NvY2tfbGlzdF9wb3BgLCBgbmZjX2xsY3Bfc29ja2V0X3JlbGVhc2VgLCBgbmZjX2xsY3BfbG9jYWxfZ2V0YCwgYGxvY2FsX2NsZWFudXBgLCBgbG9jYWxfcmVsZWFzZV93b3JrYCwgYGxvY2FsX3JlbGVhc2VgIGFyZSBhbGwgc3RhdGljIGFuZCBzZWVtIGZhaXJseSBjb250YWluZWQuIEkgd2lsbCB3YW50IHRvIGNoZWNrIGhvdyB0aGVzZSBzdGF0aWMgaW50ZXJuYWwgZnVuY3Rpb25zIHJlbGF0ZSB0byB0aGUgb3ZlcmFsbCBmbG93IHdpdGhpbiBlYWNoIGZpbGUsIGFuZCBwb3NzaWJseSwgYWNyb3NzIGVhY2ggb2YgdGhlc2UgZmlsZXMuXG5cbk9uIHRoZSBvdGhlciBoYW5kLCBgbmZjX2xsY3BfbG9jYWxfcHV0YCBpcyBub24tc3RhdGljLCBzbyBpdCdzIHBvdGVudGlhbGx5IGV4cG9ydGVkIG9yIGF0IGxlYXN0IHVzZWQgYWNyb3NzIGZpbGVzLiBUaGlzIGlzIGRlZmluaXRlbHkgd29ydGggYSBjbG9zZXIgbG9vaywgYXMgaXMgYG5mY19sbGNwX3JlZ2lzdGVyX2RldmljZWAgYW5kIHRoZSBtb2R1bGUgaW5pdGlhbGl6YXRpb24gYW5kIGV4aXQgZnVuY3Rpb25zIGBuZmNfbGxjcF9pbml0YCBhbmQgYG5mY19sbGNwX2V4aXRgLiBJJ2xsIHdhbnQgdG8gdmVyaWZ5IHdoYXQncyBjaGFuZ2VkIGluIHRob3NlIGluaXQvZXhpdCBjYWxscy5cblxuVGhlbiwgb3ZlciBpbiBgbmV0L25mYy9sbGNwX3NvY2suY2AsIEkgc2VlIGBuZmNfbGxjcF9hY2NlcHRfdW5saW5rYCBhbmQgYG5mY19sbGNwX2FjY2VwdF9kZXF1ZXVlYCBhcmUgbm9uLXN0YXRpYyBhcyB3ZWxsLiBBbHNvLCB0aGUgdHdvIHN0YXRpYyBmdW5jdGlvbnMgYGxsY3Bfc29ja19hY2NlcHRgIGFuZCBgbGxjcF9zb2NrX3JlbGVhc2VgIHVzZSB0aGUgYHByb3RvX29wc2Agd2hpY2ggYXJlIGxpa2VseSBwb2ludGVycyB0byB0aGUgYG5mY19sbGNwX2FjY2VwdGAgZnVuY3Rpb25zLiBUaGVzZSB0d28gYXJlIHVzZWQgYXMgcGFydCBvZiB0aGUgc29ja2V0IG9wZXJhdGlvbnMsIHdoaWNoIHdhcnJhbnRzIGZ1cnRoZXIgYW5hbHlzaXMuXG5cbk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcHMuIExldCdzIHNlZSBob3cgYG5mY19sbGNwX3NvY2tldF9yZWxlYXNlYCBpcyBiZWluZyB1c2VkIGluIHRoZSBjb250ZXh0IG9mIHNvY2tldCBvcGVyYXRpb25zLiBJIHNob3VsZCBzdGFydCBieSBncmVwcGluZyB0aGUgY29kZWJhc2UgZm9yIHRoZXNlIGNyaXRpY2FsIGZ1bmN0aW9uczogYG5mY19sbGNwX2xvY2FsX3B1dGAsIGBuZmNfbGxjcF9hY2NlcHRfdW5saW5rYCwgYW5kIGBuZmNfbGxjcF9hY2NlcHRfZGVxdWV1ZWAgdG8gc2VlIHdoZXJlIHRoZXkncmUgY2FsbGVkIGFuZCBob3cgdGhleSBpbnRlcmFjdC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgcGljdHVyZSBvZiB0aGUgZnVuY3Rpb25hbCBpbXBhY3Qgb2YgdGhpcyBwYXRjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTI0NiwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA5OjAyOjU3LjIyOTE5NjQzN1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg0MDk4NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZjX2xsY3BfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiXFxuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiAxNDY4IGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG5uZXQvbmZjL2NvcmUuYz0yODA9aW50IG5mY19kZXBfbGlua191cChzdHJ1Y3QgbmZjX2RldiAqZGV2LCBpbnQgdGFyZ2V0X2luZGV4LCB1OCBjb21tX21vZGUpXFxuLS1cXG5uZXQvbmZjL2NvcmUuYy0zMDMtXFxubmV0L25mYy9jb3JlLmM6MzA0OlxcdGdiID0gbmZjX2xsY3BfZ2VuZXJhbF9ieXRlcyhkZXYsIFxcdTAwMjZnYl9sZW4pO1xcbm5ldC9uZmMvY29yZS5jLTMwNS1cXHRpZiAoZ2JfbGVuIFxcdTAwM2UgTkZDX01BWF9HVF9MRU4pIHtcXG4tLVxcbm5ldC9uZmMvY29yZS5jPTMyNz1pbnQgbmZjX2RlcF9saW5rX2Rvd24oc3RydWN0IG5mY19kZXYgKmRldilcXG4tLVxcbm5ldC9uZmMvY29yZS5jLTM1Mi1cXHRcXHRkZXYtXFx1MDAzZXJmX21vZGUgPSBORkNfUkZfTk9ORTtcXG5uZXQvbmZjL2NvcmUuYzozNTM6XFx0XFx0bmZjX2xsY3BfbWFjX2lzX2Rvd24oZGV2KTtcXG5uZXQvbmZjL2NvcmUuYy0zNTQtXFx0XFx0bmZjX2dlbmxfZGVwX2xpbmtfZG93bl9ldmVudChkZXYpO1xcbi0tXFxubmV0L25mYy9jb3JlLmM9MzYzPWludCBuZmNfZGVwX2xpbmtfaXNfdXAoc3RydWN0IG5mY19kZXYgKmRldiwgdTMyIHRhcmdldF9pZHgsXFxuLS1cXG5uZXQvbmZjL2NvcmUuYy0zODAtXFxubmV0L25mYy9jb3JlLmM6MzgxOlxcdG5mY19sbGNwX21hY19pc191cChkZXYsIHRhcmdldF9pZHgsIGNvbW1fbW9kZSwgcmZfbW9kZSk7XFxubmV0L25mYy9jb3JlLmMtMzgyLVxcbi0tXFxubmV0L25mYy9jb3JlLmM9NjM5PWludCBuZmNfc2V0X3JlbW90ZV9nZW5lcmFsX2J5dGVzKHN0cnVjdCBuZmNfZGV2ICpkZXYsIGNvbnN0IHU4ICpnYiwgdTggZ2JfbGVuKVxcbi0tXFxubmV0L25mYy9jb3JlLmMtNjQyLVxcbm5ldC9uZmMvY29yZS5jOjY0MzpcXHRyZXR1cm4gbmZjX2xsY3Bfc2V0X3JlbW90ZV9nYihkZXYsIGdiLCBnYl9sZW4pO1xcbm5ldC9uZmMvY29yZS5jLTY0NC19XFxuLS1cXG5uZXQvbmZjL2NvcmUuYz02NDc9dTggKm5mY19nZXRfbG9jYWxfZ2VuZXJhbF9ieXRlcyhzdHJ1Y3QgbmZjX2RldiAqZGV2LCBzaXplX3QgKmdiX2xlbilcXG4tLVxcbm5ldC9uZmMvY29yZS5jLTY1MC1cXG5uZXQvbmZjL2NvcmUuYzo2NTE6XFx0cmV0dXJuIG5mY19sbGNwX2dlbmVyYWxfYnl0ZXMoZGV2LCBnYl9sZW4pO1xcbm5ldC9uZmMvY29yZS5jLTY1Mi19XFxuLS1cXG5uZXQvbmZjL2NvcmUuYz02NTU9aW50IG5mY190bV9kYXRhX3JlY2VpdmVkKHN0cnVjdCBuZmNfZGV2ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbmZjL2NvcmUuYy02NjItXFxubmV0L25mYy9jb3JlLmM6NjYzOlxcdHJldHVybiBuZmNfbGxjcF9kYXRhX3JlY2VpdmVkKGRldiwgc2tiKTtcXG5uZXQvbmZjL2NvcmUuYy02NjQtfVxcbi0tXFxubmV0L25mYy9jb3JlLmM9MTExMD1pbnQgbmZjX3JlZ2lzdGVyX2RldmljZShzdHJ1Y3QgbmZjX2RldiAqZGV2KVxcbi0tXFxubmV0L25mYy9jb3JlLmMtMTEyMy1cXG5uZXQvbmZjL2NvcmUuYzoxMTI0OlxcdHJjID0gbmZjX2xsY3BfcmVnaXN0ZXJfZGV2aWNlKGRldik7XFxubmV0L25mYy9jb3JlLmMtMTEyNS1cXHRpZiAocmMpXFxuLS1cXG5uZXQvbmZjL2NvcmUuYz0xMTg2PXZvaWQgbmZjX3JlbW92ZV9kZXZpY2Uoc3RydWN0IG5mY19kZXYgKmRldilcXG4tLVxcbm5ldC9uZmMvY29yZS5jLTExOTItXFxubmV0L25mYy9jb3JlLmM6MTE5MzpcXHRuZmNfbGxjcF91bnJlZ2lzdGVyX2RldmljZShkZXYpO1xcbm5ldC9uZmMvY29yZS5jLTExOTQtXFxuLS1cXG5uZXQvbmZjL2NvcmUuYz0xMjE0PXN0YXRpYyBpbnQgX19pbml0IG5mY19pbml0KHZvaWQpXFxuLS1cXG5uZXQvbmZjL2NvcmUuYy0xMjM0LVxcbm5ldC9uZmMvY29yZS5jOjEyMzU6XFx0cmMgPSBuZmNfbGxjcF9pbml0KCk7XFxubmV0L25mYy9jb3JlLmMtMTIzNi1cXHRpZiAocmMpXFxuLS1cXG5uZXQvbmZjL2NvcmUuYy0xMjQ1LWVycl9hZl9uZmM6XFxubmV0L25mYy9jb3JlLmM6MTI0NjpcXHRuZmNfbGxjcF9leGl0KCk7XFxubmV0L25mYy9jb3JlLmMtMTI0Ny1lcnJfbGxjcF9zb2NrOlxcbi0tXFxubmV0L25mYy9jb3JlLmM9MTI1Nj1zdGF0aWMgdm9pZCBfX2V4aXQgbmZjX2V4aXQodm9pZClcXG4tLVxcbm5ldC9uZmMvY29yZS5jLTEyNTgtXFx0YWZfbmZjX2V4aXQoKTtcXG5uZXQvbmZjL2NvcmUuYzoxMjU5OlxcdG5mY19sbGNwX2V4aXQoKTtcXG5uZXQvbmZjL2NvcmUuYy0xMjYwLVxcdHJhd3NvY2tfZXhpdCgpO1xcbi0tXFxubmV0L25mYy9sbGNwLmg9Nj1lbnVtIGxsY3Bfc3RhdGUge1xcbi0tXFxubmV0L25mYy9sbGNwLmgtMjktXFxubmV0L25mYy9sbGNwLmg6MzA6c3RydWN0IG5mY19sbGNwX3NvY2s7XFxubmV0L25mYy9sbGNwLmgtMzEtXFxubmV0L25mYy9sbGNwLmg9MzI9c3RydWN0IGxsY3Bfc29ja19saXN0IHtcXG4tLVxcbm5ldC9uZmMvbGxjcC5oLTM2LVxcbm5ldC9uZmMvbGxjcC5oOjM3OnN0cnVjdCBuZmNfbGxjcF9zZHBfdGx2IHtcXG5uZXQvbmZjL2xsY3AuaC0zOC1cXHR1OCAqdGx2O1xcbi0tXFxubmV0L25mYy9sbGNwLmgtNDktXFxubmV0L25mYy9sbGNwLmg6NTA6c3RydWN0IG5mY19sbGNwX2xvY2FsIHtcXG5uZXQvbmZjL2xsY3AuaC01MS1cXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XFxuLS1cXG5uZXQvbmZjL2xsY3AuaC0xMDItXFxubmV0L25mYy9sbGNwLmg6MTAzOnN0cnVjdCBuZmNfbGxjcF9zb2NrIHtcXG5uZXQvbmZjL2xsY3AuaC0xMDQtXFx0c3RydWN0IHNvY2sgc2s7XFxubmV0L25mYy9sbGNwLmgtMTA1LVxcdHN0cnVjdCBuZmNfZGV2ICpkZXY7XFxubmV0L25mYy9sbGNwLmg6MTA2OlxcdHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWw7XFxubmV0L25mYy9sbGNwLmgtMTA3LVxcdHUzMiB0YXJnZXRfaWR4O1xcbi0tXFxubmV0L25mYy9sbGNwLmgtMTQxLVxcbm5ldC9uZmMvbGxjcC5oOjE0MjpzdHJ1Y3QgbmZjX2xsY3BfdWlfY2Ige1xcbm5ldC9uZmMvbGxjcC5oLTE0My1cXHRfX3U4IGRzYXA7XFxuLS1cXG5uZXQvbmZjL2xsY3AuaC0xNDYtXFxubmV0L25mYy9sbGNwLmg6MTQ3OiNkZWZpbmUgbmZjX2xsY3BfdWlfc2tiX2NiKF9fc2tiKSAoKHN0cnVjdCBuZmNfbGxjcF91aV9jYiAqKVxcdTAwMjYoKF9fc2tiKS1cXHUwMDNlY2JbMF0pKVxcbm5ldC9uZmMvbGxjcC5oLTE0OC1cXG5uZXQvbmZjL2xsY3AuaDoxNDk6I2RlZmluZSBuZmNfbGxjcF9zb2NrKHNrKSAoKHN0cnVjdCBuZmNfbGxjcF9zb2NrICopIChzaykpXFxubmV0L25mYy9sbGNwLmg6MTUwOiNkZWZpbmUgbmZjX2xsY3BfZGV2KHNrKSAgKG5mY19sbGNwX3NvY2soKHNrKSktXFx1MDAzZWRldilcXG5uZXQvbmZjL2xsY3AuaC0xNTEtXFxuLS1cXG5uZXQvbmZjL2xsY3AuaC0yMDAtXFxubmV0L25mYy9sbGNwLmg6MjAxOnZvaWQgbmZjX2xsY3Bfc29ja19saW5rKHN0cnVjdCBsbGNwX3NvY2tfbGlzdCAqbCwgc3RydWN0IHNvY2sgKnMpO1xcbm5ldC9uZmMvbGxjcC5oOjIwMjp2b2lkIG5mY19sbGNwX3NvY2tfdW5saW5rKHN0cnVjdCBsbGNwX3NvY2tfbGlzdCAqbCwgc3RydWN0IHNvY2sgKnMpO1xcbm5ldC9uZmMvbGxjcC5oOjIwMzp2b2lkIG5mY19sbGNwX3NvY2tldF9yZW1vdGVfcGFyYW1faW5pdChzdHJ1Y3QgbmZjX2xsY3Bfc29jayAqc29jayk7XFxubmV0L25mYy9sbGNwLmg6MjA0OnN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbmZjX2xsY3BfZmluZF9sb2NhbChzdHJ1Y3QgbmZjX2RldiAqZGV2KTtcXG5uZXQvbmZjL2xsY3AuaDoyMDU6aW50IG5mY19sbGNwX2xvY2FsX3B1dChzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsKTtcXG5uZXQvbmZjL2xsY3AuaDoyMDY6dTggbmZjX2xsY3BfZ2V0X3NkcF9zc2FwKHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwsXFxubmV0L25mYy9sbGNwLmg6MjA3OlxcdFxcdFxcdCBzdHJ1Y3QgbmZjX2xsY3Bfc29jayAqc29jayk7XFxubmV0L25mYy9sbGNwLmg6MjA4OnU4IG5mY19sbGNwX2dldF9sb2NhbF9zc2FwKHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwpO1xcbm5ldC9uZmMvbGxjcC5oOjIwOTp2b2lkIG5mY19sbGNwX3B1dF9zc2FwKHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwsIHU4IHNzYXApO1xcbm5ldC9uZmMvbGxjcC5oOjIxMDppbnQgbmZjX2xsY3BfcXVldWVfaV9mcmFtZXMoc3RydWN0IG5mY19sbGNwX3NvY2sgKnNvY2spO1xcbm5ldC9uZmMvbGxjcC5oOjIxMTp2b2lkIG5mY19sbGNwX3NlbmRfdG9fcmF3X3NvY2soc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCxcXG5uZXQvbmZjL2xsY3AuaC0yMTItXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBza19idWZmICpza2IsIHU4IGRpcmVjdGlvbik7XFxuLS1cXG5uZXQvbmZjL2xsY3AuaC0yMTQtLyogU29jayBBUEkgKi9cXG5uZXQvbmZjL2xsY3AuaDoyMTU6c3RydWN0IHNvY2sgKm5mY19sbGNwX3NvY2tfYWxsb2Moc3RydWN0IHNvY2tldCAqc29jaywgaW50IHR5cGUsIGdmcF90IGdmcCwgaW50IGtlcm4pO1xcbm5ldC9uZmMvbGxjcC5oOjIxNjp2b2lkIG5mY19sbGNwX3NvY2tfZnJlZShzdHJ1Y3QgbmZjX2xsY3Bfc29jayAqc29jayk7XFxubmV0L25mYy9sbGNwLmg6MjE3OnZvaWQgbmZjX2xsY3BfYWNjZXB0X3VubGluayhzdHJ1Y3Qgc29jayAqc2spO1xcbm5ldC9uZmMvbGxjcC5oOjIxODp2b2lkIG5mY19sbGNwX2FjY2VwdF9lbnF1ZXVlKHN0cnVjdCBzb2NrICpwYXJlbnQsIHN0cnVjdCBzb2NrICpzayk7XFxubmV0L25mYy9sbGNwLmg6MjE5OnN0cnVjdCBzb2NrICpuZmNfbGxjcF9hY2NlcHRfZGVxdWV1ZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrZXQgKm5ld3NvY2spO1xcbm5ldC9uZmMvbGxjcC5oLTIyMC1cXG5uZXQvbmZjL2xsY3AuaC0yMjEtLyogVExWIEFQSSAqL1xcbm5ldC9uZmMvbGxjcC5oOjIyMjppbnQgbmZjX2xsY3BfcGFyc2VfZ2JfdGx2KHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwsXFxubmV0L25mYy9sbGNwLmgtMjIzLVxcdFxcdFxcdCAgY29uc3QgdTggKnRsdl9hcnJheSwgdTE2IHRsdl9hcnJheV9sZW4pO1xcbm5ldC9uZmMvbGxjcC5oOjIyNDppbnQgbmZjX2xsY3BfcGFyc2VfY29ubmVjdGlvbl90bHYoc3RydWN0IG5mY19sbGNwX3NvY2sgKnNvY2ssXFxubmV0L25mYy9sbGNwLmgtMjI1LVxcdFxcdFxcdFxcdCAgY29uc3QgdTggKnRsdl9hcnJheSwgdTE2IHRsdl9hcnJheV9sZW4pO1xcbi0tXFxubmV0L25mYy9sbGNwLmgtMjI3LS8qIENvbW1hbmRzIEFQSSAqL1xcbm5ldC9uZmMvbGxjcC5oOjIyODp2b2lkIG5mY19sbGNwX3JlY3Yodm9pZCAqZGF0YSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGVycik7XFxubmV0L25mYy9sbGNwLmg6MjI5OnU4ICpuZmNfbGxjcF9idWlsZF90bHYodTggdHlwZSwgY29uc3QgdTggKnZhbHVlLCB1OCB2YWx1ZV9sZW5ndGgsIHU4ICp0bHZfbGVuZ3RoKTtcXG5uZXQvbmZjL2xsY3AuaDoyMzA6c3RydWN0IG5mY19sbGNwX3NkcF90bHYgKm5mY19sbGNwX2J1aWxkX3NkcmVzX3Rsdih1OCB0aWQsIHU4IHNhcCk7XFxubmV0L25mYy9sbGNwLmg6MjMxOnN0cnVjdCBuZmNfbGxjcF9zZHBfdGx2ICpuZmNfbGxjcF9idWlsZF9zZHJlcV90bHYodTggdGlkLCBjb25zdCBjaGFyICp1cmksXFxubmV0L25mYy9sbGNwLmgtMjMyLVxcdFxcdFxcdFxcdFxcdFxcdCAgc2l6ZV90IHVyaV9sZW4pO1xcbm5ldC9uZmMvbGxjcC5oOjIzMzp2b2lkIG5mY19sbGNwX2ZyZWVfc2RwX3RsdihzdHJ1Y3QgbmZjX2xsY3Bfc2RwX3RsdiAqc2RwKTtcXG5uZXQvbmZjL2xsY3AuaDoyMzQ6dm9pZCBuZmNfbGxjcF9mcmVlX3NkcF90bHZfbGlzdChzdHJ1Y3QgaGxpc3RfaGVhZCAqc2RwX2hlYWQpO1xcbm5ldC9uZmMvbGxjcC5oOjIzNTp2b2lkIG5mY19sbGNwX3JlY3Yodm9pZCAqZGF0YSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGVycik7XFxubmV0L25mYy9sbGNwLmg6MjM2OmludCBuZmNfbGxjcF9zZW5kX3N5bW0oc3RydWN0IG5mY19kZXYgKmRldik7XFxubmV0L25mYy9sbGNwLmg6MjM3OmludCBuZmNfbGxjcF9zZW5kX2Nvbm5lY3Qoc3RydWN0IG5mY19sbGNwX3NvY2sgKnNvY2spO1xcbm5ldC9uZmMvbGxjcC5oOjIzODppbnQgbmZjX2xsY3Bfc2VuZF9jYyhzdHJ1Y3QgbmZjX2xsY3Bfc29jayAqc29jayk7XFxubmV0L25mYy9sbGNwLmg6MjM5OmludCBuZmNfbGxjcF9zZW5kX3NubF9zZHJlcyhzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsLFxcbm5ldC9uZmMvbGxjcC5oLTI0MC1cXHRcXHRcXHQgICAgc3RydWN0IGhsaXN0X2hlYWQgKnRsdl9saXN0LCBzaXplX3QgdGx2c19sZW4pO1xcbm5ldC9uZmMvbGxjcC5oOjI0MTppbnQgbmZjX2xsY3Bfc2VuZF9zbmxfc2RyZXEoc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCxcXG5uZXQvbmZjL2xsY3AuaC0yNDItXFx0XFx0XFx0ICAgIHN0cnVjdCBobGlzdF9oZWFkICp0bHZfbGlzdCwgc2l6ZV90IHRsdnNfbGVuKTtcXG5uZXQvbmZjL2xsY3AuaDoyNDM6aW50IG5mY19sbGNwX3NlbmRfZG0oc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCwgdTggc3NhcCwgdTggZHNhcCwgdTggcmVhc29uKTtcXG5uZXQvbmZjL2xsY3AuaDoyNDQ6aW50IG5mY19sbGNwX3NlbmRfZGlzY29ubmVjdChzdHJ1Y3QgbmZjX2xsY3Bfc29jayAqc29jayk7XFxubmV0L25mYy9sbGNwLmg6MjQ1OmludCBuZmNfbGxjcF9zZW5kX2lfZnJhbWUoc3RydWN0IG5mY19sbGNwX3NvY2sgKnNvY2ssXFxubmV0L25mYy9sbGNwLmgtMjQ2LVxcdFxcdFxcdCAgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKTtcXG5uZXQvbmZjL2xsY3AuaDoyNDc6aW50IG5mY19sbGNwX3NlbmRfdWlfZnJhbWUoc3RydWN0IG5mY19sbGNwX3NvY2sgKnNvY2ssIHU4IHNzYXAsIHU4IGRzYXAsXFxubmV0L25mYy9sbGNwLmgtMjQ4LVxcdFxcdFxcdCAgIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbik7XFxubmV0L25mYy9sbGNwLmg6MjQ5OmludCBuZmNfbGxjcF9zZW5kX3JyKHN0cnVjdCBuZmNfbGxjcF9zb2NrICpzb2NrKTtcXG5uZXQvbmZjL2xsY3AuaC0yNTAtXFxubmV0L25mYy9sbGNwLmgtMjUxLS8qIFNvY2tldCBBUEkgKi9cXG5uZXQvbmZjL2xsY3AuaDoyNTI6aW50IF9faW5pdCBuZmNfbGxjcF9zb2NrX2luaXQodm9pZCk7XFxubmV0L25mYy9sbGNwLmg6MjUzOnZvaWQgbmZjX2xsY3Bfc29ja19leGl0KHZvaWQpO1xcbi0tXFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmM9NzQ9c3RhdGljIHU4IGxsY3BfdGx2X3J3KGNvbnN0IHU4ICp0bHYpXFxuLS1cXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy03OC1cXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYzo3OTp1OCAqbmZjX2xsY3BfYnVpbGRfdGx2KHU4IHR5cGUsIGNvbnN0IHU4ICp2YWx1ZSwgdTggdmFsdWVfbGVuZ3RoLCB1OCAqdGx2X2xlbmd0aClcXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy04MC17XFxuLS1cXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy0xMDUtXFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmM6MTA2OnN0cnVjdCBuZmNfbGxjcF9zZHBfdGx2ICpuZmNfbGxjcF9idWlsZF9zZHJlc190bHYodTggdGlkLCB1OCBzYXApXFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtMTA3LXtcXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYzoxMDg6XFx0c3RydWN0IG5mY19sbGNwX3NkcF90bHYgKnNkcmVzO1xcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTEwOS1cXHR1OCB2YWx1ZVsyXTtcXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy0xMTAtXFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmM6MTExOlxcdHNkcmVzID0ga3phbGxvY19vYmooc3RydWN0IG5mY19sbGNwX3NkcF90bHYpO1xcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTExMi1cXHRpZiAoc2RyZXMgPT0gTlVMTClcXG4tLVxcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTExNy1cXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYzoxMTg6XFx0c2RyZXMtXFx1MDAzZXRsdiA9IG5mY19sbGNwX2J1aWxkX3RsdihMTENQX1RMVl9TRFJFUywgdmFsdWUsIDIsXFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtMTE5LVxcdFxcdFxcdFxcdFxcdFxcdTAwMjZzZHJlcy1cXHUwMDNldGx2X2xlbik7XFxuLS1cXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy0xMzItXFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmM6MTMzOnN0cnVjdCBuZmNfbGxjcF9zZHBfdGx2ICpuZmNfbGxjcF9idWlsZF9zZHJlcV90bHYodTggdGlkLCBjb25zdCBjaGFyICp1cmksXFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtMTM0LVxcdFxcdFxcdFxcdFxcdFxcdCAgc2l6ZV90IHVyaV9sZW4pXFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtMTM1LXtcXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYzoxMzY6XFx0c3RydWN0IG5mY19sbGNwX3NkcF90bHYgKnNkcmVxO1xcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTEzNy1cXG4tLVxcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTE0My1cXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYzoxNDQ6XFx0c2RyZXEgPSBremFsbG9jX29iaihzdHJ1Y3QgbmZjX2xsY3Bfc2RwX3Rsdik7XFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtMTQ1LVxcdGlmIChzZHJlcSA9PSBOVUxMKVxcbi0tXFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtMTczLVxcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jOjE3NDp2b2lkIG5mY19sbGNwX2ZyZWVfc2RwX3RsdihzdHJ1Y3QgbmZjX2xsY3Bfc2RwX3RsdiAqc2RwKVxcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTE3NS17XFxuLS1cXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy0xNzktXFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmM6MTgwOnZvaWQgbmZjX2xsY3BfZnJlZV9zZHBfdGx2X2xpc3Qoc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQpXFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtMTgxLXtcXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYzoxODI6XFx0c3RydWN0IG5mY19sbGNwX3NkcF90bHYgKnNkcDtcXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy0xODMtXFx0c3RydWN0IGhsaXN0X25vZGUgKm47XFxuLS1cXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy0xODctXFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmM6MTg4OlxcdFxcdG5mY19sbGNwX2ZyZWVfc2RwX3RsdihzZHApO1xcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTE4OS1cXHR9XFxuLS1cXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy0xOTEtXFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmM6MTkyOmludCBuZmNfbGxjcF9wYXJzZV9nYl90bHYoc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCxcXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy0xOTMtXFx0XFx0XFx0ICBjb25zdCB1OCAqdGx2X2FycmF5LCB1MTYgdGx2X2FycmF5X2xlbilcXG4tLVxcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTI0OC1cXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYzoyNDk6aW50IG5mY19sbGNwX3BhcnNlX2Nvbm5lY3Rpb25fdGx2KHN0cnVjdCBuZmNfbGxjcF9zb2NrICpzb2NrLFxcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTI1MC1cXHRcXHRcXHRcXHQgIGNvbnN0IHU4ICp0bHZfYXJyYXksIHUxNiB0bHZfYXJyYXlfbGVuKVxcbi0tXFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmM9MzE0PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqbGxjcF9hZGRfdGx2KHN0cnVjdCBza19idWZmICpwZHUsIGNvbnN0IHU4ICp0bHYsXFxuLS1cXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy0zMjYtXFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmM6MzI3OnN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqbGxjcF9hbGxvY2F0ZV9wZHUoc3RydWN0IG5mY19sbGNwX3NvY2sgKnNvY2ssXFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtMzI4LVxcdFxcdFxcdFxcdFxcdCB1OCBjbWQsIHUxNiBzaXplKVxcbi0tXFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtMzQ3LVxcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jOjM0ODppbnQgbmZjX2xsY3Bfc2VuZF9kaXNjb25uZWN0KHN0cnVjdCBuZmNfbGxjcF9zb2NrICpzb2NrKVxcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTM0OS17XFxuLS1cXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy0zNTEtXFx0c3RydWN0IG5mY19kZXYgKmRldjtcXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYzozNTI6XFx0c3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbDtcXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy0zNTMtXFxuLS1cXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy0zNzAtXFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmM6MzcxOmludCBuZmNfbGxjcF9zZW5kX3N5bW0oc3RydWN0IG5mY19kZXYgKmRldilcXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy0zNzIte1xcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTM3My1cXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jOjM3NDpcXHRzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsO1xcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTM3NS1cXHR1MTYgc2l6ZSA9IDA7XFxuLS1cXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy0zNzctXFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmM6Mzc4OlxcdGxvY2FsID0gbmZjX2xsY3BfZmluZF9sb2NhbChkZXYpO1xcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTM3OS1cXHRpZiAobG9jYWwgPT0gTlVMTClcXG4tLVxcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTM5Ni1cXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYzozOTc6XFx0bmZjX2xsY3Bfc2VuZF90b19yYXdfc29jayhsb2NhbCwgc2tiLCBORkNfRElSRUNUSU9OX1RYKTtcXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy0zOTgtXFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtMzk5LVxcdGVyciA9IG5mY19kYXRhX2V4Y2hhbmdlKGRldiwgbG9jYWwtXFx1MDAzZXRhcmdldF9pZHgsIHNrYixcXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYzo0MDA6XFx0XFx0XFx0XFx0IG5mY19sbGNwX3JlY3YsIGxvY2FsKTtcXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy00MDEtb3V0Olxcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jOjQwMjpcXHRuZmNfbGxjcF9sb2NhbF9wdXQobG9jYWwpO1xcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTQwMy1cXHRyZXR1cm4gZXJyO1xcbi0tXFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtNDA1LVxcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jOjQwNjppbnQgbmZjX2xsY3Bfc2VuZF9jb25uZWN0KHN0cnVjdCBuZmNfbGxjcF9zb2NrICpzb2NrKVxcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTQwNy17XFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmM6NDA4OlxcdHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWw7XFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtNDA5LVxcdHN0cnVjdCBza19idWZmICpza2I7XFxuLS1cXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy00MjMtXFx0aWYgKHNvY2stXFx1MDAzZXNlcnZpY2VfbmFtZSAhPSBOVUxMKSB7XFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmM6NDI0OlxcdFxcdHNlcnZpY2VfbmFtZV90bHYgPSBuZmNfbGxjcF9idWlsZF90bHYoTExDUF9UTFZfU04sXFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtNDI1LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIHNvY2stXFx1MDAzZXNlcnZpY2VfbmFtZSxcXG4tLVxcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTQzOS1cXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYzo0NDA6XFx0bWl1eF90bHYgPSBuZmNfbGxjcF9idWlsZF90bHYoTExDUF9UTFZfTUlVWCwgKHU4ICopXFx1MDAyNm1pdXgsIDAsXFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtNDQxLVxcdFxcdFxcdFxcdCAgICAgIFxcdTAwMjZtaXV4X3Rsdl9sZW5ndGgpO1xcbi0tXFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtNDQ3LVxcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jOjQ0ODpcXHRyd190bHYgPSBuZmNfbGxjcF9idWlsZF90bHYoTExDUF9UTFZfUlcsIFxcdTAwMjZydywgMCwgXFx1MDAyNnJ3X3Rsdl9sZW5ndGgpO1xcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTQ0OS1cXHRpZiAoIXJ3X3Rsdikge1xcbi0tXFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtNDgxLVxcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jOjQ4MjppbnQgbmZjX2xsY3Bfc2VuZF9jYyhzdHJ1Y3QgbmZjX2xsY3Bfc29jayAqc29jaylcXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy00ODMte1xcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jOjQ4NDpcXHRzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsO1xcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTQ4NS1cXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbi0tXFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtNTAxLVxcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jOjUwMjpcXHRtaXV4X3RsdiA9IG5mY19sbGNwX2J1aWxkX3RsdihMTENQX1RMVl9NSVVYLCAodTggKilcXHUwMDI2bWl1eCwgMCxcXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy01MDMtXFx0XFx0XFx0XFx0ICAgICAgXFx1MDAyNm1pdXhfdGx2X2xlbmd0aCk7XFxuLS1cXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy01MDktXFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmM6NTEwOlxcdHJ3X3RsdiA9IG5mY19sbGNwX2J1aWxkX3RsdihMTENQX1RMVl9SVywgXFx1MDAyNnJ3LCAwLCBcXHUwMDI2cndfdGx2X2xlbmd0aCk7XFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtNTExLVxcdGlmICghcndfdGx2KSB7XFxuLS1cXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy01MzktXFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmM6NTQwOnN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqbmZjX2xsY3BfYWxsb2NhdGVfc25sKHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwsXFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtNTQxLVxcdFxcdFxcdFxcdFxcdCAgICAgc2l6ZV90IHRsdl9sZW5ndGgpXFxuLS1cXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy01NjgtXFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmM6NTY5OmludCBuZmNfbGxjcF9zZW5kX3NubF9zZHJlcyhzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsLFxcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTU3MC1cXHRcXHRcXHQgICAgc3RydWN0IGhsaXN0X2hlYWQgKnRsdl9saXN0LCBzaXplX3QgdGx2c19sZW4pXFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtNTcxLXtcXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYzo1NzI6XFx0c3RydWN0IG5mY19sbGNwX3NkcF90bHYgKnNkcDtcXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy01NzMtXFx0c3RydWN0IGhsaXN0X25vZGUgKm47XFxuLS1cXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy01NzUtXFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmM6NTc2OlxcdHNrYiA9IG5mY19sbGNwX2FsbG9jYXRlX3NubChsb2NhbCwgdGx2c19sZW4pO1xcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTU3Ny1cXHRpZiAoSVNfRVJSKHNrYikpXFxuLS1cXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy01ODQtXFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmM6NTg1OlxcdFxcdG5mY19sbGNwX2ZyZWVfc2RwX3RsdihzZHApO1xcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTU4Ni1cXHR9XFxuLS1cXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy01OTItXFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmM6NTkzOmludCBuZmNfbGxjcF9zZW5kX3NubF9zZHJlcShzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsLFxcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTU5NC1cXHRcXHRcXHQgICAgc3RydWN0IGhsaXN0X2hlYWQgKnRsdl9saXN0LCBzaXplX3QgdGx2c19sZW4pXFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtNTk1LXtcXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYzo1OTY6XFx0c3RydWN0IG5mY19sbGNwX3NkcF90bHYgKnNkcmVxO1xcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTU5Ny1cXHRzdHJ1Y3QgaGxpc3Rfbm9kZSAqbjtcXG4tLVxcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTU5OS1cXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYzo2MDA6XFx0c2tiID0gbmZjX2xsY3BfYWxsb2NhdGVfc25sKGxvY2FsLCB0bHZzX2xlbik7XFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtNjAxLVxcdGlmIChJU19FUlIoc2tiKSlcXG4tLVxcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTYyNi1cXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYzo2Mjc6aW50IG5mY19sbGNwX3NlbmRfZG0oc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCwgdTggc3NhcCwgdTggZHNhcCwgdTggcmVhc29uKVxcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTYyOC17XFxuLS1cXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy02NTktXFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmM6NjYwOmludCBuZmNfbGxjcF9zZW5kX2lfZnJhbWUoc3RydWN0IG5mY19sbGNwX3NvY2sgKnNvY2ssXFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtNjYxLVxcdFxcdFxcdCAgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKVxcbi0tXFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtNjY0LVxcdHN0cnVjdCBzb2NrICpzayA9IFxcdTAwMjZzb2NrLVxcdTAwM2VzaztcXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYzo2NjU6XFx0c3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbDtcXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy02NjYtXFx0c2l6ZV90IGZyYWdfbGVuID0gMCwgcmVtYWluaW5nX2xlbjtcXG4tLVxcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTcyOS1cXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYzo3MzA6XFx0XFx0bmZjX2xsY3BfcXVldWVfaV9mcmFtZXMoc29jayk7XFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtNzMxLVxcbi0tXFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtNzQyLVxcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jOjc0MzppbnQgbmZjX2xsY3Bfc2VuZF91aV9mcmFtZShzdHJ1Y3QgbmZjX2xsY3Bfc29jayAqc29jaywgdTggc3NhcCwgdTggZHNhcCxcXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy03NDQtXFx0XFx0XFx0ICAgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKVxcbi0tXFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtNzQ2LVxcdHN0cnVjdCBza19idWZmICpwZHU7XFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmM6NzQ3OlxcdHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWw7XFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtNzQ4LVxcdHNpemVfdCBmcmFnX2xlbiA9IDAsIHJlbWFpbmluZ19sZW47XFxuLS1cXG5uZXQvbmZjL2xsY3BfY29tbWFuZHMuYy04MjEtXFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmM6ODIyOmludCBuZmNfbGxjcF9zZW5kX3JyKHN0cnVjdCBuZmNfbGxjcF9zb2NrICpzb2NrKVxcbm5ldC9uZmMvbGxjcF9jb21tYW5kcy5jLTgyMy17XFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtODI0LVxcdHN0cnVjdCBza19idWZmICpza2I7XFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmM6ODI1OlxcdHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWw7XFxubmV0L25mYy9sbGNwX2NvbW1hbmRzLmMtODI2LVxcbi0tXFxubmV0L25mYy9sbGNwX2NvcmUuYz0yMz1zdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmxsY3Bfd3E7XFxubmV0L25mYy9sbGNwX2NvcmUuYy0yNC1cXG5uZXQvbmZjL2xsY3BfY29yZS5jOjI1OnN0YXRpYyB2b2lkIG5mY19sbGNwX3J4X3NrYihzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG5uZXQvbmZjL2xsY3BfY29yZS5jLTI2LVxcbm5ldC9uZmMvbGxjcF9jb3JlLmM6Mjc6dm9pZCBuZmNfbGxjcF9zb2NrX2xpbmsoc3RydWN0IGxsY3Bfc29ja19saXN0ICpsLCBzdHJ1Y3Qgc29jayAqc2spXFxubmV0L25mYy9sbGNwX2NvcmUuYy0yOC17XFxuLS1cXG5uZXQvbmZjL2xsY3BfY29yZS5jLTMzLVxcbm5ldC9uZmMvbGxjcF9jb3JlLmM6MzQ6dm9pZCBuZmNfbGxjcF9zb2NrX3VubGluayhzdHJ1Y3QgbGxjcF9zb2NrX2xpc3QgKmwsIHN0cnVjdCBzb2NrICpzaylcXG5uZXQvbmZjL2xsY3BfY29yZS5jLTM1LXtcXG4tLVxcbm5ldC9uZmMvbGxjcF9jb3JlLmMtNDAtXFxubmV0L25mYy9sbGNwX2NvcmUuYzo0MTp2b2lkIG5mY19sbGNwX3NvY2tldF9yZW1vdGVfcGFyYW1faW5pdChzdHJ1Y3QgbmZjX2xsY3Bfc29jayAqc29jaylcXG5uZXQvbmZjL2xsY3BfY29yZS5jLTQyLXtcXG4tLVxcbm5ldC9uZmMvbGxjcF9jb3JlLmMtNDYtXFxubmV0L25mYy9sbGNwX2NvcmUuYzo0NzpzdGF0aWMgdm9pZCBuZmNfbGxjcF9zb2NrZXRfcHVyZ2Uoc3RydWN0IG5mY19sbGNwX3NvY2sgKnNvY2spXFxubmV0L25mYy9sbGNwX2NvcmUuYy00OC17XFxubmV0L25mYy9sbGNwX2NvcmUuYzo0OTpcXHRzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsID0gc29jay1cXHUwMDNlbG9jYWw7XFxubmV0L25mYy9sbGNwX2NvcmUuYy01MC1cXHRzdHJ1Y3Qgc2tfYnVmZiAqcywgKnRtcDtcXG4tLVxcbm5ldC9uZmMvbGxjcF9jb3JlLmMtNjctXFxubmV0L25mYy9sbGNwX2NvcmUuYzo2ODpzdGF0aWMgc3RydWN0IHNvY2sgKm5mY19sbGNwX3NvY2tfbGlzdF9wb3Aoc3RydWN0IGxsY3Bfc29ja19saXN0ICpsKVxcbm5ldC9uZmMvbGxjcF9jb3JlLmMtNjkte1xcbi0tXFxubmV0L25mYy9sbGNwX2NvcmUuYy04Mi1cXG5uZXQvbmZjL2xsY3BfY29yZS5jOjgzOnN0YXRpYyB2b2lkIG5mY19sbGNwX3NvY2tldF9yZWxlYXNlKHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwsIGJvb2wgZGV2aWNlLFxcbm5ldC9uZmMvbGxjcF9jb3JlLmMtODQtXFx0XFx0XFx0XFx0ICAgIGludCBlcnIpXFxuLS1cXG5uZXQvbmZjL2xsY3BfY29yZS5jLTg2LVxcdHN0cnVjdCBzb2NrICpzaztcXG5uZXQvbmZjL2xsY3BfY29yZS5jOjg3OlxcdHN0cnVjdCBuZmNfbGxjcF9zb2NrICpsbGNwX3NvY2s7XFxubmV0L25mYy9sbGNwX2NvcmUuYy04OC1cXG4tLVxcbm5ldC9uZmMvbGxjcF9jb3JlLmMtOTAtXFxubmV0L25mYy9sbGNwX2NvcmUuYzo5MTpcXHR3aGlsZSAoKHNrID0gbmZjX2xsY3Bfc29ja19saXN0X3BvcChcXHUwMDI2bG9jYWwtXFx1MDAzZXNvY2tldHMpKSkge1xcbm5ldC9uZmMvbGxjcF9jb3JlLmM6OTI6XFx0XFx0bGxjcF9zb2NrID0gbmZjX2xsY3Bfc29jayhzayk7XFxubmV0L25mYy9sbGNwX2NvcmUuYy05My1cXG4tLVxcbm5ldC9uZmMvbGxjcF9jb3JlLmMtOTUtXFxubmV0L25mYy9sbGNwX2NvcmUuYzo5NjpcXHRcXHRuZmNfbGxjcF9zb2NrZXRfcHVyZ2UobGxjcF9zb2NrKTtcXG5uZXQvbmZjL2xsY3BfY29yZS5jLTk3LVxcbi0tXFxubmV0L25mYy9sbGNwX2NvcmUuYy0xMDEtXFx0XFx0aWYgKHNrLVxcdTAwM2Vza19zdGF0ZSA9PSBMTENQX0xJU1RFTikge1xcbm5ldC9uZmMvbGxjcF9jb3JlLmM6MTAyOlxcdFxcdFxcdHN0cnVjdCBuZmNfbGxjcF9zb2NrICpsc2ssICpuO1xcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTAzLVxcdFxcdFxcdHN0cnVjdCBzb2NrICphY2NlcHRfc2s7XFxuLS1cXG5uZXQvbmZjL2xsY3BfY29yZS5jLTExMy1cXG5uZXQvbmZjL2xsY3BfY29yZS5jOjExNDpcXHRcXHRcXHRcXHRpZiAobmZjX2xsY3Bfc29jayhhY2NlcHRfc2spLVxcdTAwM2VwYXJlbnQgPT0gc2spIHtcXG5uZXQvbmZjL2xsY3BfY29yZS5jOjExNTpcXHRcXHRcXHRcXHRcXHRuZmNfbGxjcF9hY2NlcHRfdW5saW5rKGFjY2VwdF9zayk7XFxubmV0L25mYy9sbGNwX2NvcmUuYzoxMTY6XFx0XFx0XFx0XFx0XFx0bmZjX2xsY3Bfc29ja191bmxpbmsoXFx1MDAyNmxvY2FsLVxcdTAwM2Vzb2NrZXRzLCBhY2NlcHRfc2spO1xcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTE3LVxcbi0tXFxubmV0L25mYy9sbGNwX2NvcmUuYy0xNDQtXFxubmV0L25mYy9sbGNwX2NvcmUuYzoxNDU6XFx0d2hpbGUgKChzayA9IG5mY19sbGNwX3NvY2tfbGlzdF9wb3AoXFx1MDAyNmxvY2FsLVxcdTAwM2VyYXdfc29ja2V0cykpKSB7XFxubmV0L25mYy9sbGNwX2NvcmUuYzoxNDY6XFx0XFx0bGxjcF9zb2NrID0gbmZjX2xsY3Bfc29jayhzayk7XFxubmV0L25mYy9sbGNwX2NvcmUuYy0xNDctXFxuLS1cXG5uZXQvbmZjL2xsY3BfY29yZS5jLTE0OS1cXG5uZXQvbmZjL2xsY3BfY29yZS5jOjE1MDpcXHRcXHRuZmNfbGxjcF9zb2NrZXRfcHVyZ2UobGxjcF9zb2NrKTtcXG5uZXQvbmZjL2xsY3BfY29yZS5jLTE1MS1cXG4tLVxcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTYxLVxcbm5ldC9uZmMvbGxjcF9jb3JlLmM6MTYyOnN0YXRpYyBzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKm5mY19sbGNwX2xvY2FsX2dldChzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsKVxcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTYzLXtcXG4tLVxcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTcyLVxcbm5ldC9uZmMvbGxjcF9jb3JlLmM6MTczOnN0YXRpYyB2b2lkIGxvY2FsX2NsZWFudXAoc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbClcXG5uZXQvbmZjL2xsY3BfY29yZS5jLTE3NC17XFxubmV0L25mYy9sbGNwX2NvcmUuYzoxNzU6XFx0bmZjX2xsY3Bfc29ja2V0X3JlbGVhc2UobG9jYWwsIGZhbHNlLCBFTlhJTyk7XFxubmV0L25mYy9sbGNwX2NvcmUuYy0xNzYtXFx0dGltZXJfZGVsZXRlX3N5bmMoXFx1MDAyNmxvY2FsLVxcdTAwM2VsaW5rX3RpbWVyKTtcXG4tLVxcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTg0LVxcdGNhbmNlbF93b3JrX3N5bmMoXFx1MDAyNmxvY2FsLVxcdTAwM2VzZHJlcV90aW1lb3V0X3dvcmspO1xcbm5ldC9uZmMvbGxjcF9jb3JlLmM6MTg1OlxcdG5mY19sbGNwX2ZyZWVfc2RwX3Rsdl9saXN0KFxcdTAwMjZsb2NhbC1cXHUwMDNlcGVuZGluZ19zZHJlcXMpO1xcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMTg2LX1cXG4tLVxcbm5ldC9uZmMvbGxjcF9jb3JlLmM9MTg4PXN0YXRpYyB2b2lkIGxvY2FsX3JlbGVhc2Vfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxubmV0L25mYy9sbGNwX2NvcmUuYy0xODkte1xcbm5ldC9uZmMvbGxjcF9jb3JlLmM6MTkwOlxcdHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWw7XFxubmV0L25mYy9sbGNwX2NvcmUuYy0xOTEtXFx0c3RydWN0IG5mY19kZXYgKmRldjtcXG5uZXQvbmZjL2xsY3BfY29yZS5jLTE5Mi1cXG5uZXQvbmZjL2xsY3BfY29yZS5jOjE5MzpcXHRsb2NhbCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwsIHJlbGVhc2Vfd29yayk7XFxubmV0L25mYy9sbGNwX2NvcmUuYy0xOTQtXFx0ZGV2ID0gbG9jYWwtXFx1MDAzZWRldjtcXG4tLVxcbm5ldC9uZmMvbGxjcF9jb3JlLmM9MjAxPXN0YXRpYyB2b2lkIGxvY2FsX3JlbGVhc2Uoc3RydWN0IGtyZWYgKnJlZilcXG5uZXQvbmZjL2xsY3BfY29yZS5jLTIwMi17XFxubmV0L25mYy9sbGNwX2NvcmUuYzoyMDM6XFx0c3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbDtcXG5uZXQvbmZjL2xsY3BfY29yZS5jLTIwNC1cXG5uZXQvbmZjL2xsY3BfY29yZS5jOjIwNTpcXHRsb2NhbCA9IGNvbnRhaW5lcl9vZihyZWYsIHN0cnVjdCBuZmNfbGxjcF9sb2NhbCwgcmVmKTtcXG5uZXQvbmZjL2xsY3BfY29yZS5jLTIwNi1cXG4tLVxcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMjA5LVxcbm5ldC9uZmMvbGxjcF9jb3JlLmM6MjEwOmludCBuZmNfbGxjcF9sb2NhbF9wdXQoc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbClcXG5uZXQvbmZjL2xsY3BfY29yZS5jLTIxMS17XFxuLS1cXG5uZXQvbmZjL2xsY3BfY29yZS5jLTIxNy1cXG5uZXQvbmZjL2xsY3BfY29yZS5jOjIxODpzdGF0aWMgc3RydWN0IG5mY19sbGNwX3NvY2sgKm5mY19sbGNwX3NvY2tfZ2V0KHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwsXFxubmV0L25mYy9sbGNwX2NvcmUuYy0yMTktXFx0XFx0XFx0XFx0XFx0ICAgICAgIHU4IHNzYXAsIHU4IGRzYXApXFxuLS1cXG5uZXQvbmZjL2xsY3BfY29yZS5jLTIyMS1cXHRzdHJ1Y3Qgc29jayAqc2s7XFxubmV0L25mYy9sbGNwX2NvcmUuYzoyMjI6XFx0c3RydWN0IG5mY19sbGNwX3NvY2sgKmxsY3Bfc29jaywgKnRtcF9zb2NrO1xcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMjIzLVxcbi0tXFxubmV0L25mYy9sbGNwX2NvcmUuYy0yMzMtXFx0c2tfZm9yX2VhY2goc2ssIFxcdTAwMjZsb2NhbC1cXHUwMDNlc29ja2V0cy5oZWFkKSB7XFxubmV0L25mYy9sbGNwX2NvcmUuYzoyMzQ6XFx0XFx0dG1wX3NvY2sgPSBuZmNfbGxjcF9zb2NrKHNrKTtcXG5uZXQvbmZjL2xsY3BfY29yZS5jLTIzNS1cXG4tLVxcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMjQ3LVxcbm5ldC9uZmMvbGxjcF9jb3JlLmM6MjQ4OnN0YXRpYyB2b2lkIG5mY19sbGNwX3NvY2tfcHV0KHN0cnVjdCBuZmNfbGxjcF9zb2NrICpzb2NrKVxcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMjQ5LXtcXG4tLVxcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMjUyLVxcbm5ldC9uZmMvbGxjcF9jb3JlLmM6MjUzOnN0YXRpYyB2b2lkIG5mY19sbGNwX3RpbWVvdXRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxubmV0L25mYy9sbGNwX2NvcmUuYy0yNTQte1xcbm5ldC9uZmMvbGxjcF9jb3JlLmM6MjU1OlxcdHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IG5mY19sbGNwX2xvY2FsLFxcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMjU2LVxcdFxcdFxcdFxcdFxcdFxcdCAgICB0aW1lb3V0X3dvcmspO1xcbi0tXFxubmV0L25mYy9sbGNwX2NvcmUuYy0yNjAtXFxubmV0L25mYy9sbGNwX2NvcmUuYzoyNjE6c3RhdGljIHZvaWQgbmZjX2xsY3Bfc3ltbV90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdClcXG5uZXQvbmZjL2xsY3BfY29yZS5jLTI2Mi17XFxubmV0L25mYy9sbGNwX2NvcmUuYzoyNjM6XFx0c3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCA9IHRpbWVyX2NvbnRhaW5lcl9vZihsb2NhbCwgdCxcXG5uZXQvbmZjL2xsY3BfY29yZS5jLTI2NC1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgIGxpbmtfdGltZXIpO1xcbi0tXFxubmV0L25mYy9sbGNwX2NvcmUuYy0yNzAtXFxubmV0L25mYy9sbGNwX2NvcmUuYzoyNzE6c3RhdGljIHZvaWQgbmZjX2xsY3Bfc2RyZXFfdGltZW91dF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG5uZXQvbmZjL2xsY3BfY29yZS5jLTI3Mi17XFxuLS1cXG5uZXQvbmZjL2xsY3BfY29yZS5jLTI3NS1cXHRzdHJ1Y3QgaGxpc3Rfbm9kZSAqbjtcXG5uZXQvbmZjL2xsY3BfY29yZS5jOjI3NjpcXHRzdHJ1Y3QgbmZjX2xsY3Bfc2RwX3RsdiAqc2RwO1xcbm5ldC9uZmMvbGxjcF9jb3JlLmM6Mjc3OlxcdHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IG5mY19sbGNwX2xvY2FsLFxcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMjc4LVxcdFxcdFxcdFxcdFxcdFxcdCAgICBzZHJlcV90aW1lb3V0X3dvcmspO1xcbi0tXFxubmV0L25mYy9sbGNwX2NvcmUuYy0zMDQtXFxubmV0L25mYy9sbGNwX2NvcmUuYzozMDU6c3RhdGljIHZvaWQgbmZjX2xsY3Bfc2RyZXFfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnQpXFxubmV0L25mYy9sbGNwX2NvcmUuYy0zMDYte1xcbm5ldC9uZmMvbGxjcF9jb3JlLmM6MzA3OlxcdHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwgPSB0aW1lcl9jb250YWluZXJfb2YobG9jYWwsIHQsXFxubmV0L25mYy9sbGNwX2NvcmUuYy0zMDgtXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBzZHJlcV90aW1lcik7XFxuLS1cXG5uZXQvbmZjL2xsY3BfY29yZS5jLTMxMi1cXG5uZXQvbmZjL2xsY3BfY29yZS5jOjMxMzpzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKm5mY19sbGNwX2ZpbmRfbG9jYWwoc3RydWN0IG5mY19kZXYgKmRldilcXG5uZXQvbmZjL2xsY3BfY29yZS5jLTMxNC17XFxubmV0L25mYy9sbGNwX2NvcmUuYzozMTU6XFx0c3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbDtcXG5uZXQvbmZjL2xsY3BfY29yZS5jOjMxNjpcXHRzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKnJlcyA9IE5VTEw7XFxubmV0L25mYy9sbGNwX2NvcmUuYy0zMTctXFxuLS1cXG5uZXQvbmZjL2xsY3BfY29yZS5jLTMyMC1cXHRcXHRpZiAobG9jYWwtXFx1MDAzZWRldiA9PSBkZXYpIHtcXG5uZXQvbmZjL2xsY3BfY29yZS5jOjMyMTpcXHRcXHRcXHRyZXMgPSBuZmNfbGxjcF9sb2NhbF9nZXQobG9jYWwpO1xcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMzIyLVxcdFxcdFxcdGJyZWFrO1xcbi0tXFxubmV0L25mYy9sbGNwX2NvcmUuYy0zMjgtXFxubmV0L25mYy9sbGNwX2NvcmUuYzozMjk6c3RhdGljIHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbmZjX2xsY3BfcmVtb3ZlX2xvY2FsKHN0cnVjdCBuZmNfZGV2ICpkZXYpXFxubmV0L25mYy9sbGNwX2NvcmUuYy0zMzAte1xcbm5ldC9uZmMvbGxjcF9jb3JlLmM6MzMxOlxcdHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwsICp0bXA7XFxubmV0L25mYy9sbGNwX2NvcmUuYy0zMzItXFxuLS1cXG5uZXQvbmZjL2xsY3BfY29yZS5jPTM0OT1zdGF0aWMgY2hhciAqd2tzW10gPSB7XFxuLS1cXG5uZXQvbmZjL2xsY3BfY29yZS5jLTM1Ni1cXG5uZXQvbmZjL2xsY3BfY29yZS5jOjM1NzpzdGF0aWMgaW50IG5mY19sbGNwX3drc19zYXAoY29uc3QgY2hhciAqc2VydmljZV9uYW1lLCBzaXplX3Qgc2VydmljZV9uYW1lX2xlbilcXG5uZXQvbmZjL2xsY3BfY29yZS5jLTM1OC17XFxuLS1cXG5uZXQvbmZjL2xsY3BfY29yZS5jPTM3OT1zdGF0aWNcXG5uZXQvbmZjL2xsY3BfY29yZS5jOjM4MDpzdHJ1Y3QgbmZjX2xsY3Bfc29jayAqbmZjX2xsY3Bfc29ja19mcm9tX3NuKHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwsXFxubmV0L25mYy9sbGNwX2NvcmUuYy0zODEtXFx0XFx0XFx0XFx0XFx0ICAgIGNvbnN0IHU4ICpzbiwgc2l6ZV90IHNuX2xlbixcXG4tLVxcbm5ldC9uZmMvbGxjcF9jb3JlLmMtMzg0LVxcdHN0cnVjdCBzb2NrICpzaztcXG5uZXQvbmZjL2xsY3BfY29yZS5jOjM4NTpcXHRzdHJ1Y3QgbmZjX2xsY3Bfc29jayAqbGxjcF9zb2NrLCAqdG1wX3NvY2s7XFxubmV0L25mYy9sbGNwX2NvcmUuYy0zODYtXFxuLS1cXG5uZXQvbmZjL2xsY3BfY29yZS5jLTM5Ni1cXHRza19mb3JfZWFjaChzaywgXFx1MDAyNmxvY2FsLVxcdTAwM2Vzb2NrZXRzLmhlYWQpIHtcXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDk6MDI6NTcuMjc3NjExMTk2WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMzMjQ1MTU0NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byBgbmV0L25mYy9sbGNwX3NvY2suY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdW5kYW1lbnRhbCBzb2NrZXQgbWVjaGFuaXNtcyBhbmQgb3BlcmF0aW9ucyBmb3IgTExDUC4gVGhpcyBtZWFucyBJJ20gbG9va2luZyBzcGVjaWZpY2FsbHkgYXQgdGhlIGVudHJ5IHBvaW50cyBhbmQgdGhlIHVuZGVybHlpbmcgb3BlcmF0aW9ucyBkZWZpbmVkIHdpdGhpbiB0aGlzIGZpbGUuIEkgd2FudCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRoZSBMTENQIHNvY2tldCBsYXllciBpcyBzdHJ1Y3R1cmVkLCB3aGljaCB3aWxsIGhlbHAgbWUgc2VlIHRoZSBhcmNoaXRlY3R1cmUgYXMgYSB3aG9sZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE0NjAsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwOTowMzowMC42MDIxMjk5MjJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NTk1MjY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInByb3RvX29wc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmZjXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZmMvbGxjcF9zb2NrLmM9ODYzPXN0YXRpYyBpbnQgbGxjcF9zb2NrX3JlY3Ztc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLFxcbi0tXFxubmV0L25mYy9sbGNwX3NvY2suYy05NTEtXFxubmV0L25mYy9sbGNwX3NvY2suYzo5NTI6c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgbGxjcF9zb2NrX29wcyA9IHtcXG5uZXQvbmZjL2xsY3Bfc29jay5jLTk1My1cXHQuZmFtaWx5ICAgICAgICAgPSBQRl9ORkMsXFxuLS1cXG5uZXQvbmZjL2xsY3Bfc29jay5jLTk3MS1cXG5uZXQvbmZjL2xsY3Bfc29jay5jOjk3MjpzdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBsbGNwX3Jhd3NvY2tfb3BzID0ge1xcbm5ldC9uZmMvbGxjcF9zb2NrLmMtOTczLVxcdC5mYW1pbHkgICAgICAgICA9IFBGX05GQyxcXG4tLVxcbm5ldC9uZmMvcmF3c29jay5jPTI1Mj1zdGF0aWMgaW50IHJhd3NvY2tfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXFxuLS1cXG5uZXQvbmZjL3Jhd3NvY2suYy0yNzgtXFxubmV0L25mYy9yYXdzb2NrLmM6Mjc5OnN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHJhd3NvY2tfb3BzID0ge1xcbm5ldC9uZmMvcmF3c29jay5jLTI4MC1cXHQuZmFtaWx5ICAgICAgICAgPSBQRl9ORkMsXFxuLS1cXG5uZXQvbmZjL3Jhd3NvY2suYy0yOTYtXFxubmV0L25mYy9yYXdzb2NrLmM6Mjk3OnN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHJhd3NvY2tfcmF3X29wcyA9IHtcXG5uZXQvbmZjL3Jhd3NvY2suYy0yOTgtXFx0LmZhbWlseSAgICAgICAgID0gUEZfTkZDLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwOTowMzowMC42NDY3MzE2NTFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzM3ODEwMjQ0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgTExDUCBTb2NrZXQgT3BlcmF0aW9ucyoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgdGFraW5nIGEgY2xvc2UgbG9vayBhdCBgbGxjcF9zb2NrX29wc2AuIFNwZWNpZmljYWxseSwgSSdtIGhlYWRpbmcgb3ZlciB0byBgbmV0L25mYy9sbGNwX3NvY2suY2AuIEkga25vdyB0aGlzIGlzIHdoZXJlIHRoZSBjb3JlIHNvY2tldCBvcGVyYXRpb25zIGZvciB0aGUgTExDUCBwcm90b2NvbCBhcmUgaW1wbGVtZW50ZWQuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGZ1bmRhbWVudGFsIG1lY2hhbmljcywgYW5kIEkgc3VzcGVjdCB0aGVyZSBtaWdodCBiZSBzb21ldGhpbmcgaW50ZXJlc3RpbmcgdG8gZGlzc2VjdCBpbiB0aGUgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gZGV0YWlscyBoZXJlLiBMZXQncyBzZWUgd2hhdCB3ZSd2ZSBnb3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxOTg1LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDk6MDM6MDQuMDI0ODM2NTA2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk5NTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZmMvbGxjcF9zb2NrLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTQ1LFxuICBcIkxpbmVDb3VudFwiOiA0NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgOTQ1OlxcdFxcdC8qIFNPQ0tfU0VRUEFDS0VUOiByZXR1cm4gcmVhbCBsZW5ndGggaWYgTVNHX1RSVU5DIGlzIHNldCAqL1xcbiA5NDY6XFx0XFx0aWYgKHNrLVxcdTAwM2Vza190eXBlID09IFNPQ0tfU0VRUEFDS0VUIFxcdTAwMjZcXHUwMDI2IChmbGFncyBcXHUwMDI2IE1TR19UUlVOQykpXFxuIDk0NzpcXHRcXHRcXHRjb3BpZWQgPSBybGVuO1xcbiA5NDg6XFx0XFxuIDk0OTpcXHRcXHRyZXR1cm4gY29waWVkO1xcbiA5NTA6XFx0fVxcbiA5NTE6XFx0XFxuIDk1MjpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBsbGNwX3NvY2tfb3BzID0ge1xcbiA5NTM6XFx0XFx0LmZhbWlseSAgICAgICAgID0gUEZfTkZDLFxcbiA5NTQ6XFx0XFx0Lm93bmVyICAgICAgICAgID0gVEhJU19NT0RVTEUsXFxuIDk1NTpcXHRcXHQuYmluZCAgICAgICAgICAgPSBsbGNwX3NvY2tfYmluZCxcXG4gOTU2OlxcdFxcdC5jb25uZWN0ICAgICAgICA9IGxsY3Bfc29ja19jb25uZWN0LFxcbiA5NTc6XFx0XFx0LnJlbGVhc2UgICAgICAgID0gbGxjcF9zb2NrX3JlbGVhc2UsXFxuIDk1ODpcXHRcXHQuc29ja2V0cGFpciAgICAgPSBzb2NrX25vX3NvY2tldHBhaXIsXFxuIDk1OTpcXHRcXHQuYWNjZXB0ICAgICAgICAgPSBsbGNwX3NvY2tfYWNjZXB0LFxcbiA5NjA6XFx0XFx0LmdldG5hbWUgICAgICAgID0gbGxjcF9zb2NrX2dldG5hbWUsXFxuIDk2MTpcXHRcXHQucG9sbCAgICAgICAgICAgPSBsbGNwX3NvY2tfcG9sbCxcXG4gOTYyOlxcdFxcdC5pb2N0bCAgICAgICAgICA9IHNvY2tfbm9faW9jdGwsXFxuIDk2MzpcXHRcXHQubGlzdGVuICAgICAgICAgPSBsbGNwX3NvY2tfbGlzdGVuLFxcbiA5NjQ6XFx0XFx0LnNodXRkb3duICAgICAgID0gc29ja19ub19zaHV0ZG93bixcXG4gOTY1OlxcdFxcdC5zZXRzb2Nrb3B0ICAgICA9IG5mY19sbGNwX3NldHNvY2tvcHQsXFxuIDk2NjpcXHRcXHQuZ2V0c29ja29wdCAgICAgPSBuZmNfbGxjcF9nZXRzb2Nrb3B0LFxcbiA5Njc6XFx0XFx0LnNlbmRtc2cgICAgICAgID0gbGxjcF9zb2NrX3NlbmRtc2csXFxuIDk2ODpcXHRcXHQucmVjdm1zZyAgICAgICAgPSBsbGNwX3NvY2tfcmVjdm1zZyxcXG4gOTY5OlxcdFxcdC5tbWFwICAgICAgICAgICA9IHNvY2tfbm9fbW1hcCxcXG4gOTcwOlxcdH07XFxuIDk3MTpcXHRcXG4gOTcyOlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIGxsY3BfcmF3c29ja19vcHMgPSB7XFxuIDk3MzpcXHRcXHQuZmFtaWx5ICAgICAgICAgPSBQRl9ORkMsXFxuIDk3NDpcXHRcXHQub3duZXIgICAgICAgICAgPSBUSElTX01PRFVMRSxcXG4gOTc1OlxcdFxcdC5iaW5kICAgICAgICAgICA9IGxsY3BfcmF3X3NvY2tfYmluZCxcXG4gOTc2OlxcdFxcdC5jb25uZWN0ICAgICAgICA9IHNvY2tfbm9fY29ubmVjdCxcXG4gOTc3OlxcdFxcdC5yZWxlYXNlICAgICAgICA9IGxsY3Bfc29ja19yZWxlYXNlLFxcbiA5Nzg6XFx0XFx0LnNvY2tldHBhaXIgICAgID0gc29ja19ub19zb2NrZXRwYWlyLFxcbiA5Nzk6XFx0XFx0LmFjY2VwdCAgICAgICAgID0gc29ja19ub19hY2NlcHQsXFxuIDk4MDpcXHRcXHQuZ2V0bmFtZSAgICAgICAgPSBsbGNwX3NvY2tfZ2V0bmFtZSxcXG4gOTgxOlxcdFxcdC5wb2xsICAgICAgICAgICA9IGxsY3Bfc29ja19wb2xsLFxcbiA5ODI6XFx0XFx0LmlvY3RsICAgICAgICAgID0gc29ja19ub19pb2N0bCxcXG4gOTgzOlxcdFxcdC5saXN0ZW4gICAgICAgICA9IHNvY2tfbm9fbGlzdGVuLFxcbiA5ODQ6XFx0XFx0LnNodXRkb3duICAgICAgID0gc29ja19ub19zaHV0ZG93bixcXG4gOTg1OlxcdFxcdC5zZW5kbXNnICAgICAgICA9IHNvY2tfbm9fc2VuZG1zZyxcXG4gOTg2OlxcdFxcdC5yZWN2bXNnICAgICAgICA9IGxsY3Bfc29ja19yZWN2bXNnLFxcbiA5ODc6XFx0XFx0Lm1tYXAgICAgICAgICAgID0gc29ja19ub19tbWFwLFxcbiA5ODg6XFx0fTtcXG4gOTg5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwOTowMzowNC4wMjQ5Mzc0OTVaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzM1ODU4NzY3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdkIGFwcHJvYWNoIHRoYXQgcXVlcnksIGFzIGFuIGV4cGVydDpcblxuKipJbnZlc3RpZ2F0aW5nIE5GQyBTb2NrZXQgUHJvdG9jb2wgQ3JlYXRpb24qKlxuXG5BbHJpZ2h0LCBteSBmaXJzdCBpbnN0aW5jdCBoZXJlIGlzIHRvIGdldCBoYW5kcy1vbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHVuZGVybHlpbmcgbWVjaGFuaWNzIG9mIGhvdyB0aGVzZSBORkMgc29ja2V0IHByb3RvY29scywgc3BlY2lmaWNhbGx5IGBORkNfU09DS1BST1RPX0xMQ1BgIGFuZCBgTkZDX1NPQ0tQUk9UT19SQVdgLCBhcmUgYWN0dWFsbHkgaW5zdGFudGlhdGVkLiBTbywgSSdtIGdvaW5nIHRvIGhlYWQgc3RyYWlnaHQgZm9yIGBhZl9uZmMuY2AuIFRoYXQncyB3aGVyZSBJJ2QgZXhwZWN0IHRvIGZpbmQgdGhlIGNvcmUgaW1wbGVtZW50YXRpb24gZGV0YWlscywgdGhlIGNyZWF0aW9uIHJvdXRpbmVzLCB0aGUgc29ja2V0IGZhbWlseS1zcGVjaWZpYyBsb2dpYy4uLiBhbGwgdGhlIGp1aWN5IGJpdHMuIEknbSBsb29raW5nIGZvciB0aGUgY29kZSB0aGF0IGRlZmluZXMgaG93IHRoZXNlIE5GQy1zcGVjaWZpYyBzb2NrZXQgdHlwZXMgYXJlIGJyb3VnaHQgdG8gbGlmZSB3aXRoaW4gdGhlIGtlcm5lbC4gSXQncyB0aW1lIHRvIGdldCBhIGdvb2QgZ3JpcCBvbiB0aGUgbG93LWxldmVsIGRldGFpbHMgb2YgdGhlIHN5c3RlbSdzIE5GQyBjb21tdW5pY2F0aW9uIG1lY2hhbmlzbXMuIEknbSBleHBlY3RpbmcgdG8gZmluZCBmdW5jdGlvbiBjYWxscyByZXNwb25zaWJsZSBmb3IgaGFuZGxpbmcgc29ja2V0IGNyZWF0aW9uLCBiaW5kaW5nLCBhbmQgb3RoZXIgcmVsYXRlZCBvcGVyYXRpb25zIHNwZWNpZmljIHRvIHRoZXNlIE5GQyBwcm90b2NvbHMuIEZyb20gdGhlcmUsIEkgY2FuIGFuYWx5emUgaG93IHRoZSBkaWZmZXJlbnQgcHJvdG9jb2xzIGFyZSBoYW5kbGVkIHRvIHVuZGVyc3RhbmQgdGhlaXIgZGlmZmVyZW5jZXMgYW5kIHNpbWlsYXJpdGllcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI5NTcsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA5OjAzOjA3LjM4MzUyNzg0WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjQ5Mzc3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJORkNfU09DS1BST1RPX0xMQ1BcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25mY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmZjL2xsY3Bfc29jay5jPTEwMDk9c3RydWN0IHNvY2sgKm5mY19sbGNwX3NvY2tfYWxsb2Moc3RydWN0IHNvY2tldCAqc29jaywgaW50IHR5cGUsIGdmcF90IGdmcCwgaW50IGtlcm4pXFxuLS1cXG5uZXQvbmZjL2xsY3Bfc29jay5jLTEwMjEtXFx0c2stXFx1MDAzZXNrX3N0YXRlID0gTExDUF9DTE9TRUQ7XFxubmV0L25mYy9sbGNwX3NvY2suYzoxMDIyOlxcdHNrLVxcdTAwM2Vza19wcm90b2NvbCA9IE5GQ19TT0NLUFJPVE9fTExDUDtcXG5uZXQvbmZjL2xsY3Bfc29jay5jLTEwMjMtXFx0c2stXFx1MDAzZXNrX3R5cGUgPSB0eXBlO1xcbi0tXFxubmV0L25mYy9sbGNwX3NvY2suYz0xMDg2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZjX3Byb3RvY29sIGxsY3BfbmZjX3Byb3RvID0ge1xcbm5ldC9uZmMvbGxjcF9zb2NrLmM6MTA4NzpcXHQuaWRcXHQgID0gTkZDX1NPQ0tQUk9UT19MTENQLFxcbm5ldC9uZmMvbGxjcF9zb2NrLmMtMTA4OC1cXHQucHJvdG8gICAgPSBcXHUwMDI2bGxjcF9zb2NrX3Byb3RvLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwOTowMzowNy40NDYwMzE2NDlaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mzk5MzQzMDUwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyB3aGF0IEknbSB0aGlua2luZzpcblxuKipFeGFtaW5pbmcgU29ja2V0IE1hbmFnZW1lbnQgYW5kIExvY2FsIERhdGEgSGFuZGxpbmcgaW4gTExDUCoqXG5cblJpZ2h0LCBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgc29ja2V0IHJlbGVhc2UgYW5kIGFjY2VwdCBmdW5jdGlvbnMgcGxheSBvdXQgaW4gdGhpcyBMTENQIGltcGxlbWVudGF0aW9uLCBzcGVjaWZpY2FsbHkgaW4gcmVsYXRpb24gdG8gYG5mY19sbGNwX2xvY2FsX3B1dGAuIEkgd2FudCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIGNhbGwgc3RhY2sgYW5kIGRhdGEgZmxvdyBpbnZvbHZlZC4gSSBzaG91bGQgbG9vayBjbG9zZWx5IGF0IGVudHJ5IHBvaW50cywgcGFydGljdWxhcmx5IGBsbGNwX3NvY2tfYWNjZXB0YCwgYGxsY3Bfc29ja19yZWxlYXNlYCwgYG5mY19sbGNwX2FjY2VwdF91bmxpbmtgLCBgbmZjX2xsY3BfYWNjZXB0X2RlcXVldWVgLCBhbmQgYWdhaW4sIGBuZmNfbGxjcF9sb2NhbF9wdXRgLiBUaGVzZSBhcmUgdGhlIGtleSBmdW5jdGlvbnMgSSBzdXNwZWN0IGFyZSBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgbWVjaGFuaWNzLlxuXG5JIHRoaW5rIGEgZ29vZCBzdGFydGluZyBwb2ludCBpcyB0byBmb2N1cyBvbiBgbGxjcF9zb2NrLmNgLCBzcGVjaWZpY2FsbHkgbGluZXMgMzkwIHRocm91Z2ggNTAwLiBUaGF0IHJhbmdlIHNob3VsZCBjb250YWluIHRoZSByZWxldmFudCBsb2dpYyBmb3IgdGhvc2UgY3JpdGljYWwgZnVuY3Rpb25zLCBhbmQgYnkgcmVhZGluZyB0aGlzIHNlY3Rpb24gY2FyZWZ1bGx5IEkgc2hvdWxkIGJlIGFibGUgdG8gZ2V0IGEgc29saWQgZ3Jhc3Agb2YgaG93IHRoaXMgYWxsIGNvbWVzIHRvZ2V0aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzUwOCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwOTowMzoxMS40Mzk0NjQ1NzRaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTE1MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25mYy9sbGNwX3NvY2suY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzOTAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzOTA6XFx0e1xcbiAzOTE6XFx0XFx0c3RydWN0IG5mY19sbGNwX3NvY2sgKmxsY3Bfc29jayA9IG5mY19sbGNwX3NvY2soc2spO1xcbiAzOTI6XFx0XFxuIDM5MzpcXHRcXHRwcl9kZWJ1ZyhcXFwic3RhdGUgJWRcXFxcblxcXCIsIHNrLVxcdTAwM2Vza19zdGF0ZSk7XFxuIDM5NDpcXHRcXG4gMzk1OlxcdFxcdGlmIChsbGNwX3NvY2stXFx1MDAzZXBhcmVudCkge1xcbiAzOTY6XFx0XFx0XFx0bGlzdF9kZWxfaW5pdChcXHUwMDI2bGxjcF9zb2NrLVxcdTAwM2VhY2NlcHRfcXVldWUpO1xcbiAzOTc6XFx0XFx0XFx0c2tfYWNjZXB0cV9yZW1vdmVkKGxsY3Bfc29jay1cXHUwMDNlcGFyZW50KTtcXG4gMzk4OlxcdFxcdFxcdGxsY3Bfc29jay1cXHUwMDNlcGFyZW50ID0gTlVMTDtcXG4gMzk5OlxcdFxcdFxcdHNvY2tfcHV0KHNrKTtcXG4gNDAwOlxcdFxcdH1cXG4gNDAxOlxcdH1cXG4gNDAyOlxcdFxcbiA0MDM6XFx0dm9pZCBuZmNfbGxjcF9hY2NlcHRfZW5xdWV1ZShzdHJ1Y3Qgc29jayAqcGFyZW50LCBzdHJ1Y3Qgc29jayAqc2spXFxuIDQwNDpcXHR7XFxuIDQwNTpcXHRcXHRzdHJ1Y3QgbmZjX2xsY3Bfc29jayAqbGxjcF9zb2NrID0gbmZjX2xsY3Bfc29jayhzayk7XFxuIDQwNjpcXHRcXHRzdHJ1Y3QgbmZjX2xsY3Bfc29jayAqbGxjcF9zb2NrX3BhcmVudCA9IG5mY19sbGNwX3NvY2socGFyZW50KTtcXG4gNDA3OlxcdFxcbiA0MDg6XFx0XFx0LyogTG9jayB3aWxsIGJlIGZyZWUgZnJvbSB1bmxpbmsgKi9cXG4gNDA5OlxcdFxcdHNvY2tfaG9sZChzayk7XFxuIDQxMDpcXHRcXG4gNDExOlxcdFxcdGxpc3RfYWRkX3RhaWwoXFx1MDAyNmxsY3Bfc29jay1cXHUwMDNlYWNjZXB0X3F1ZXVlLFxcbiA0MTI6XFx0XFx0XFx0ICAgICAgXFx1MDAyNmxsY3Bfc29ja19wYXJlbnQtXFx1MDAzZWFjY2VwdF9xdWV1ZSk7XFxuIDQxMzpcXHRcXHRsbGNwX3NvY2stXFx1MDAzZXBhcmVudCA9IHBhcmVudDtcXG4gNDE0OlxcdFxcdHNrX2FjY2VwdHFfYWRkZWQocGFyZW50KTtcXG4gNDE1OlxcdH1cXG4gNDE2OlxcdFxcbiA0MTc6XFx0c3RydWN0IHNvY2sgKm5mY19sbGNwX2FjY2VwdF9kZXF1ZXVlKHN0cnVjdCBzb2NrICpwYXJlbnQsXFxuIDQxODpcXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBzb2NrZXQgKm5ld3NvY2spXFxuIDQxOTpcXHR7XFxuIDQyMDpcXHRcXHRzdHJ1Y3QgbmZjX2xsY3Bfc29jayAqbHNrLCAqbiwgKmxsY3BfcGFyZW50O1xcbiA0MjE6XFx0XFx0c3RydWN0IHNvY2sgKnNrO1xcbiA0MjI6XFx0XFxuIDQyMzpcXHRcXHRsbGNwX3BhcmVudCA9IG5mY19sbGNwX3NvY2socGFyZW50KTtcXG4gNDI0OlxcdFxcbiA0MjU6XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGxzaywgbiwgXFx1MDAyNmxsY3BfcGFyZW50LVxcdTAwM2VhY2NlcHRfcXVldWUsXFxuIDQyNjpcXHRcXHRcXHRcXHRcXHQgYWNjZXB0X3F1ZXVlKSB7XFxuIDQyNzpcXHRcXHRcXHRzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsO1xcbiA0Mjg6XFx0XFxuIDQyOTpcXHRcXHRcXHRzayA9IFxcdTAwMjZsc2stXFx1MDAzZXNrO1xcbiA0MzA6XFx0XFx0XFx0bG9ja19zb2NrX25lc3RlZChzaywgU0lOR0xFX0RFUFRIX05FU1RJTkcpO1xcbiA0MzE6XFx0XFxuIDQzMjpcXHRcXHRcXHRpZiAoc2stXFx1MDAzZXNrX3N0YXRlID09IExMQ1BfQ0xPU0VEKSB7XFxuIDQzMzpcXHRcXHRcXHRcXHRsb2NhbCA9IG5mY19sbGNwX3NvY2soc2spLVxcdTAwM2Vsb2NhbDtcXG4gNDM0OlxcdFxcbiA0MzU6XFx0XFx0XFx0XFx0bmZjX2xsY3BfYWNjZXB0X3VubGluayhzayk7XFxuIDQzNjpcXHRcXHRcXHRcXHRpZiAobG9jYWwpXFxuIDQzNzpcXHRcXHRcXHRcXHRcXHRuZmNfbGxjcF9zb2NrX3VubGluayhcXHUwMDI2bG9jYWwtXFx1MDAzZXNvY2tldHMsIHNrKTtcXG4gNDM4OlxcdFxcdFxcdFxcdHNvY2tfb3JwaGFuKHNrKTtcXG4gNDM5OlxcdFxcdFxcdFxcdHJlbGVhc2Vfc29jayhzayk7XFxuIDQ0MDpcXHRcXHRcXHRcXHRzb2NrX3B1dChzayk7XFxuIDQ0MTpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gNDQyOlxcdFxcdFxcdH1cXG4gNDQzOlxcdFxcbiA0NDQ6XFx0XFx0XFx0aWYgKHNrLVxcdTAwM2Vza19zdGF0ZSA9PSBMTENQX0NPTk5FQ1RFRCB8fCAhbmV3c29jaykge1xcbiA0NDU6XFx0XFx0XFx0XFx0bGlzdF9kZWxfaW5pdChcXHUwMDI2bHNrLVxcdTAwM2VhY2NlcHRfcXVldWUpO1xcbiA0NDY6XFx0XFx0XFx0XFx0c29ja19wdXQoc2spO1xcbiA0NDc6XFx0XFxuIDQ0ODpcXHRcXHRcXHRcXHRpZiAobmV3c29jaylcXG4gNDQ5OlxcdFxcdFxcdFxcdFxcdHNvY2tfZ3JhZnQoc2ssIG5ld3NvY2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwOTowMzoxMS40Mzk1NTc2NjRaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mzc0NDc4MTAwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgRGVlcGVyIGludG8gdGhlIExMQ1AgU29ja2V0IFJlbGVhc2UqKlxuXG5Pa2F5LCBJJ3ZlIGJlZW4gdHJhY2luZyB0aGlzIG5ldHdvcmsgZnVuY3Rpb24sIGFuZCBub3cgSSBuZWVkIHRvIGV4cGFuZCBteSB2aWV3IGFuZCBjaGVjayBvdXQgYGxsY3Bfc29ja19yZWxlYXNlYC4gTXkgYW5hbHlzaXMgaW5kaWNhdGVzIGl0J3MgbGlrZWx5IHJlc3BvbnNpYmxlIGZvciB0aGUgZ3JhY2VmdWwgc2h1dGRvd24gb2YgdGhlIExMQ1Agc29ja2V0LiBUaGVyZWZvcmUsIHVuZGVyc3RhbmRpbmcgdGhlIHJlbGVhc2UgbWVjaGFuaXNtcyBpcyBjcnVjaWFsLiBJIG5lZWQgdG8gc2VlIGV4YWN0bHkgaG93IHJlc291cmNlcyBhcmUgY2xlYW5lZCB1cCwgdGhlIGRhdGEgc3RydWN0dXJlcyBhcmUgZnJlZWQsIGFuZCBhbnkgcmVsZXZhbnQgc3RhdGUgdHJhbnNpdGlvbnMgYXJlIGhhbmRsZWQgd2hlbiBhIHNvY2tldCBpcyBjbG9zZWQgb3IgZGlzY29ubmVjdGVkLiBJIGV4cGVjdCBpdCB0byBpbnZvbHZlIHJlZmVyZW5jZSBjb3VudGluZywgcG90ZW50aWFsIGxvY2tpbmcvdW5sb2NraW5nLCBhbmQgcGVyaGFwcyB0aGUgc2lnbmFsaW5nIG9mIGNvbXBsZXRpb24gdG8gb3RoZXIgcGFydHMgb2YgdGhlIG5ldHdvcmsgc3RhY2suIEknbGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgYW5kIGVycm9yIGhhbmRsaW5nIHdpdGhpbiB0aGlzIGZ1bmN0aW9uLCBhcyB0aG9zZSBjYW4gYmUgcGFydGljdWxhcmx5IG5hc3R5IGluIG5ldHdvcmsgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ4MTAsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA5OjAzOjE1LjE4NDM0MTU5MloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MTY4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmZjL2xsY3Bfc29jay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYxMCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDYxMDpcXHRcXG4gNjExOlxcdFxcdHByX2RlYnVnKFxcXCJtYXNrIDB4JXhcXFxcblxcXCIsIG1hc2spO1xcbiA2MTI6XFx0XFxuIDYxMzpcXHRcXHRyZXR1cm4gbWFzaztcXG4gNjE0OlxcdH1cXG4gNjE1OlxcdFxcbiA2MTY6XFx0c3RhdGljIGludCBsbGNwX3NvY2tfcmVsZWFzZShzdHJ1Y3Qgc29ja2V0ICpzb2NrKVxcbiA2MTc6XFx0e1xcbiA2MTg6XFx0XFx0c3RydWN0IHNvY2sgKnNrID0gc29jay1cXHUwMDNlc2s7XFxuIDYxOTpcXHRcXHRzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsO1xcbiA2MjA6XFx0XFx0c3RydWN0IG5mY19sbGNwX3NvY2sgKmxsY3Bfc29jayA9IG5mY19sbGNwX3NvY2soc2spO1xcbiA2MjE6XFx0XFx0aW50IGVyciA9IDA7XFxuIDYyMjpcXHRcXG4gNjIzOlxcdFxcdGlmICghc2spXFxuIDYyNDpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gNjI1OlxcdFxcbiA2MjY6XFx0XFx0cHJfZGVidWcoXFxcIiVwXFxcXG5cXFwiLCBzayk7XFxuIDYyNzpcXHRcXG4gNjI4OlxcdFxcdGxvY2FsID0gbGxjcF9zb2NrLVxcdTAwM2Vsb2NhbDtcXG4gNjI5OlxcdFxcdGlmIChsb2NhbCA9PSBOVUxMKSB7XFxuIDYzMDpcXHRcXHRcXHRlcnIgPSAtRU5PREVWO1xcbiA2MzE6XFx0XFx0XFx0Z290byBvdXQ7XFxuIDYzMjpcXHRcXHR9XFxuIDYzMzpcXHRcXG4gNjM0OlxcdFxcdGxvY2tfc29jayhzayk7XFxuIDYzNTpcXHRcXG4gNjM2OlxcdFxcdC8qIFNlbmQgYSBESVNDICovXFxuIDYzNzpcXHRcXHRpZiAoc2stXFx1MDAzZXNrX3N0YXRlID09IExMQ1BfQ09OTkVDVEVEKVxcbiA2Mzg6XFx0XFx0XFx0bmZjX2xsY3Bfc2VuZF9kaXNjb25uZWN0KGxsY3Bfc29jayk7XFxuIDYzOTpcXHRcXG4gNjQwOlxcdFxcdGlmIChzay1cXHUwMDNlc2tfc3RhdGUgPT0gTExDUF9MSVNURU4pIHtcXG4gNjQxOlxcdFxcdFxcdHN0cnVjdCBuZmNfbGxjcF9zb2NrICpsc2ssICpuO1xcbiA2NDI6XFx0XFx0XFx0c3RydWN0IHNvY2sgKmFjY2VwdF9zaztcXG4gNjQzOlxcdFxcbiA2NDQ6XFx0XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGxzaywgbiwgXFx1MDAyNmxsY3Bfc29jay1cXHUwMDNlYWNjZXB0X3F1ZXVlLFxcbiA2NDU6XFx0XFx0XFx0XFx0XFx0XFx0IGFjY2VwdF9xdWV1ZSkge1xcbiA2NDY6XFx0XFx0XFx0XFx0Ym9vbCBwdXRfY3JlYXRpb24gPSBmYWxzZTtcXG4gNjQ3OlxcdFxcbiA2NDg6XFx0XFx0XFx0XFx0YWNjZXB0X3NrID0gXFx1MDAyNmxzay1cXHUwMDNlc2s7XFxuIDY0OTpcXHRcXHRcXHRcXHRsb2NrX3NvY2tfbmVzdGVkKGFjY2VwdF9zaywgU0lOR0xFX0RFUFRIX05FU1RJTkcpO1xcbiA2NTA6XFx0XFxuIDY1MTpcXHRcXHRcXHRcXHRpZiAobmZjX2xsY3Bfc29jayhhY2NlcHRfc2spLVxcdTAwM2VwYXJlbnQgPT0gc2spIHtcXG4gNjUyOlxcdFxcdFxcdFxcdFxcdG5mY19sbGNwX3NlbmRfZGlzY29ubmVjdChsc2spO1xcbiA2NTM6XFx0XFx0XFx0XFx0XFx0bmZjX2xsY3BfYWNjZXB0X3VubGluayhhY2NlcHRfc2spO1xcbiA2NTQ6XFx0XFx0XFx0XFx0XFx0bmZjX2xsY3Bfc29ja191bmxpbmsoXFx1MDAyNmxvY2FsLVxcdTAwM2Vzb2NrZXRzLCBhY2NlcHRfc2spO1xcbiA2NTU6XFx0XFxuIDY1NjpcXHRcXHRcXHRcXHRcXHRhY2NlcHRfc2stXFx1MDAzZXNrX3N0YXRlID0gTExDUF9DTE9TRUQ7XFxuIDY1NzpcXHRcXHRcXHRcXHRcXHRzb2NrX29ycGhhbihhY2NlcHRfc2spO1xcbiA2NTg6XFx0XFx0XFx0XFx0XFx0cHV0X2NyZWF0aW9uID0gdHJ1ZTtcXG4gNjU5OlxcdFxcdFxcdFxcdH1cXG4gNjYwOlxcdFxcbiA2NjE6XFx0XFx0XFx0XFx0cmVsZWFzZV9zb2NrKGFjY2VwdF9zayk7XFxuIDY2MjpcXHRcXHRcXHRcXHRpZiAocHV0X2NyZWF0aW9uKVxcbiA2NjM6XFx0XFx0XFx0XFx0XFx0c29ja19wdXQoYWNjZXB0X3NrKTsgLyogY3JlYXRpb24gcmVmICovXFxuIDY2NDpcXHRcXHRcXHR9XFxuIDY2NTpcXHRcXHR9XFxuIDY2NjpcXHRcXG4gNjY3OlxcdFxcdGlmIChzb2NrLVxcdTAwM2V0eXBlID09IFNPQ0tfUkFXKVxcbiA2Njg6XFx0XFx0XFx0bmZjX2xsY3Bfc29ja191bmxpbmsoXFx1MDAyNmxvY2FsLVxcdTAwM2VyYXdfc29ja2V0cywgc2spO1xcbiA2Njk6XFx0XFx0ZWxzZSBpZiAoc2stXFx1MDAzZXNrX3N0YXRlID09IExMQ1BfQ09OTkVDVElORylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDk6MDM6MTUuMTg0NDM0NjkyWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUxMTY0MzY4MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTkZDIFNvY2tldCBQYXRjaCdzIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGlzIGRpdmluZyBpbnRvIHRoZSBoZWFydCBvZiBORkMg4oCTIHNwZWNpZmljYWxseSB0aGUgc29ja2V0IGFuZCBMTENQIGxvZ2ljLCB0b3VjaGluZyBgbGxjcF9jb3JlLmNgIGFuZCBgbGxjcF9zb2NrLmNgLiBHaXZlbiB0aGF0IHN5emthbGxlciwgb3VyIHRydXN0eSB2aXJ0dWFsIGVudmlyb25tZW50LCBpcyBrbm93biB0byBoaXQgdGhlc2UgYXJlYXMgdmlhIE5GQyBzb2NrZXRzLCBuZXRsaW5rLCB2aXJ0dWFsIGRyaXZlcnMsIG9yIGV2ZW4gcmF3IEFGX05GQyBzb2NrZXRzLCBpdCdzIHByZXR0eSBjbGVhciB0aGF0IHRoaXMgcGF0Y2ggaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLiBUaGUgYFdvcnRoRnV6emluZ2AgZmxhZyBpcyBzZXQgdG8gdHJ1ZTsgbm8gcXVlc3Rpb24uXG5cbk5vdywgZm9yIGVuYWJsaW5nIHRoZSByaWdodCBjb25maWd1cmF0aW9ucywgSSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSBoYXZlIGV2ZXJ5dGhpbmcgaW4gcGxhY2UgdG8gdHJpZ2dlciB0aGUgY2hhbmdlcy4gSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3MgZm9yIGBuZXQvbmZjL2AgYW5kIGBsbGNwYC4gTG9va2luZyBpbnRvIGBuZXQvbmZjL0tjb25maWdgLCBJIGNhbiBzZWUgYSBgbWVudWNvbmZpZyBORkNgIGRlcGVuZGVudCBvbiBgUkZLSUxMIHx8ICFSRktJTExgLiBUaGF0IG9uZSBpcyBpbXBvcnRhbnQuIEl0IGFsc28gaW5jbHVkZXMgdGhlIGxpbmUgYG9iai0kKENPTkZJR19ORkMpICs9IG5mYy5vYCB3aGljaCBzZWVtcyB0byBwdWxsIGluIHRoZSByZWxldmFudCBvYmplY3QgZmlsZXMuIERpZ2dpbmcgZGVlcGVyIEkgY2FuIHNlZSBgbmZjLW9ianNgIGluY2x1ZGluZyBgbGxjcF9jb3JlLm9gIGFuZCBgbGxjcF9zb2NrLm9gIHdoaWNoIHdpbGwgbWFrZSB0aGlzIHBhdGNoIGRpcmVjdGx5IHJlYWNoYWJsZSB3aXRoIGBDT05GSUdfTkZDYC4gV2hpbGUgdGhpbmdzIGxpa2UgYE5GQ19TSU1gIG9yIGBORkNfRElHSVRBTGAgbWlnaHQgYmUgdXNlZnVsIGluIGEgc3BlY2lmaWMgc2V0dXAsIGBDT05GSUdfTkZDYCBsb29rcyBsaWtlIHRoZSBjcml0aWNhbCBvbmUgaGVyZSBmb3IgZ2V0dGluZyBhdCB0aGUgY29yZSBjaGFuZ2VzIGluIGBsbGNwX2NvcmUuY2AgYW5kIGBsbGNwX3NvY2suY2AuIEkgc2hvdWxkIGFsc28gcXVpY2tseSBjaGVjayBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHJlbGV2YW50IGNvbmZpZ3MgaW4gZWl0aGVyIGBuZXQvbmZjL2Agb3IgYG5ldC9LY29uZmlnYCB0aGF0IG1pZ2h0IGluZmx1ZW5jZSB0aGluZ3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1OTE1LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjkwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDk6MDM6MjAuMzAwODc0NTQ4WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3OTExNzE0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzb3VyY2UgXFxcIm5ldC9uZmNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9LY29uZmlnPTQ0MD1zb3VyY2UgXFxcIm5ldC9jZXBoL0tjb25maWdcXFwiXFxubmV0L0tjb25maWc6NDQxOnNvdXJjZSBcXFwibmV0L25mYy9LY29uZmlnXFxcIlxcbm5ldC9LY29uZmlnLTQ0Mi1zb3VyY2UgXFxcIm5ldC9wc2FtcGxlL0tjb25maWdcXFwiXFxuLS1cXG5uZXQvbmZjL0tjb25maWc9MTc9Y29uZmlnIE5GQ19ESUdJVEFMXFxuLS1cXG5uZXQvbmZjL0tjb25maWctMzAtXFxubmV0L25mYy9LY29uZmlnOjMxOnNvdXJjZSBcXFwibmV0L25mYy9uY2kvS2NvbmZpZ1xcXCJcXG5uZXQvbmZjL0tjb25maWc6MzI6c291cmNlIFxcXCJuZXQvbmZjL2hjaS9LY29uZmlnXFxcIlxcbm5ldC9uZmMvS2NvbmZpZy0zMy1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDk6MDM6MjAuMzc5OTk4MTE3WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjkwNDE5NzgyMzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTkZDIExMQ1AgU29ja2V0IE1hbmFnZW1lbnQgQW5hbHlzaXMgZm9yIEZ1enppbmcqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB0aGF0IGBORkNgIGlzIHRoZSBrZXkgY29uZmlndXJhdGlvbiBvcHRpb24uIEkgc2VlIGl0J3MgZGVmaW5lZCBpbiBgbmV0L25mYy9LY29uZmlnYCwgYW5kIGl0IGRlcGVuZHMgb24gZWl0aGVyIGBSRktJTExgIG9yIHRoZSBuZWdhdGlvbiBvZiBgUkZLSUxMYCwgd2hpY2ggbWFrZXMgaXQgdGhlIHByaW1hcnkgY29uZmlnLiBOb3cgZm9yIHRoZSBjcnVjaWFsIHBhcnQ6IHRoZSBzeW1ib2xzLlxuXG5JJ3ZlIGdvdCBhIGxpc3Qgb2YgZnVuY3Rpb25zIGFmZmVjdGVkIGJ5IHRoaXMgcGF0Y2ggYW5kIG5lZWQgdG8gZGV0ZXJtaW5lIHdoaWNoIG9uZXMgYXJlICpwcmltZSogZnV6emluZyB0YXJnZXRzLiBJbnRlcm5hbCBzdGF0aWMgaGVscGVycyBhcmUgb2Z0ZW4gaW5saW5lZCwgdGh1cyBub3QgaGF2aW5nIGEgc2VwYXJhdGUgc3ltYm9sIGFkZHJlc3M7IHdlIGRvbid0IHdhbnQgdGhvc2UgaW4gYEZvY3VzU3ltYm9sc2AuIENvbnZlcnNlbHksIGZ1bmN0aW9ucyB3aXRoIGV4dGVybmFsIGxpbmthZ2UgKmFyZSogc2VwYXJhdGUgZW50aXRpZXMgaW4gdGhlIGtlcm5lbCBpbWFnZS5cblxuSGVyZSdzIHRoZSBhcHByb2FjaCBJJ20gdGFraW5nOiBJJ3ZlIGNhcmVmdWxseSByZXZpZXdlZCB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zIGFjcm9zcyBgbmV0L25mYy9sbGNwX2NvcmUuY2AgYW5kIGBuZXQvbmZjL2xsY3Bfc29jay5jYC4gSSBoYXZlIGRpc3Rpbmd1aXNoZWQgc3RhdGljIHZlcnN1cyBub24tc3RhdGljIGZ1bmN0aW9ucywgYW5kIGlkZW50aWZpZWQgbm9uLXN0YXRpYyBmdW5jdGlvbnMgb2YgaW50ZXJlc3Q6IGBuZmNfbGxjcF9sb2NhbF9wdXRgLCBgbmZjX2xsY3BfYWNjZXB0X3VubGlua2AsIGBuZmNfbGxjcF9hY2NlcHRfZGVxdWV1ZWAsIGBuZmNfbGxjcF9yZWdpc3Rlcl9kZXZpY2VgLCBhbmQgYSBmZXcgc3RhdGljIG9uZXM6IGBsbGNwX3NvY2tfYWNjZXB0YCBhbmQgYGxsY3Bfc29ja19yZWxlYXNlYC4gQWx0aG91Z2ggYGxsY3Bfc29ja19hY2NlcHRgIGFuZCBgbGxjcF9zb2NrX3JlbGVhc2VgIGFyZSBzdGF0aWMsIHRoZXkncmUgcGFydCBvZiBgc3RydWN0IHByb3RvX29wc2Agd2hpY2ggbWVhbnMgdGhlaXIgYWRkcmVzc2VzIGFyZSAqZGlzdGluY3QqIHN5bWJvbHMuXG5cbkJhc2VkIG9uIHRoZSBpbnN0cnVjdGlvbnMsIEkndmUgbmFycm93ZWQgZG93biB0aGUgcmVsZXZhbnQgYEZvY3VzU3ltYm9sc2AgdG86XG5cbiogICBgbmZjX2xsY3BfYWNjZXB0X3VubGlua2BcbiogICBgbmZjX2xsY3BfYWNjZXB0X2RlcXVldWVgXG4qICAgYG5mY19sbGNwX2xvY2FsX3B1dGBcbiogICBgbGxjcF9zb2NrX2FjY2VwdGBcbiogICBgbGxjcF9zb2NrX3JlbGVhc2VgXG4qICAgYG5mY19sbGNwX3JlZ2lzdGVyX2RldmljZWBcblxuVGhlc2UgZnVuY3Rpb25zIHNlZW0gdGhlIG1vc3QgaW1wb3J0YW50IHRvIHRhcmdldC5cblxuRmluYWxseSwgSSBuZWVkIHRvIHNldCBgRW5hYmxlQ29uZmlnc2AgdG8gZW5zdXJlIHRoZSBORkMgc3Vic3lzdGVtIGlzIGFjdGl2ZS4gR2l2ZW4gdGhlIGRlcGVuZGVuY3kgb24gYENPTkZJR19ORkNgIGluIHRoZSBrZXJuZWwsIHNldHRpbmcgYEVuYWJsZUNvbmZpZ3NgIHRvIGBbXCJORkNcIl1gIG1ha2VzIHBlcmZlY3Qgc2Vuc2UuIFRoaXMgbWFrZXMgc3VyZSB0aGF0IGBuZXQvbmZjL2xsY3BfY29yZS5jYCBhbmQgYG5ldC9uZmMvbGxjcF9zb2NrLmNgIGFyZSBidWlsdC5cblxuTGV0J3MgZG8gYSBxdWljayBmaW5hbCByZXZpZXcgdG8gZG91YmxlLWNoZWNrOiBgV29ydGhGdXp6aW5nYCBzaG91bGQgYmUgdHJ1ZS4gVGhlIHJlYXNvbmluZyBzaG91bGQgZXhwbGFpbiB0aGF0IHRoaXMgYWRkcmVzc2VzIHBvdGVudGlhbCBjb25jdXJyZW5jeSBhbmQgcmVmZXJlbmNlLWNvdW50aW5nIGlzc3VlcyBpbiBORkMgTExDUCBzb2NrZXQgbWFuYWdlbWVudCByZWxhdGVkIHRvIGZ1bmN0aW9ucyBhc3NvY2lhdGVkIHdpdGggYWNjZXB0LCBkaXNjb25uZWN0LCBzb2NrZXQgcmVsZWFzZSwgYW5kIGxvY2FsIGRldmljZSB0ZWFyZG93bi4gYEZvY3VzU3ltYm9sc2AgYXJlIG5vbi1ob3QtcGF0aCBrZXJuZWwgZnVuY3Rpb25zLiBBbmQgZmluYWxseSwgYEVuYWJsZUNvbmZpZ3NgIGlzIGp1c3QgYFtcIk5GQ1wiXWAuXG5cbk9rYXksIEknbSBjb25maWRlbnQgaW4gdGhlc2UgZmluZGluZ3MuIEl0J3MgdGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2Nzc2LCJPdXRwdXRUb2tlbnMiOjE1NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDk6MDM6MjkuNDIxOTc5NDA4WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzg0MDU2NzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GQ1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5mY19sbGNwX2FjY2VwdF91bmxpbmtcIixcbiAgICBcIm5mY19sbGNwX2FjY2VwdF9kZXF1ZXVlXCIsXG4gICAgXCJuZmNfbGxjcF9sb2NhbF9wdXRcIixcbiAgICBcImxsY3Bfc29ja19hY2NlcHRcIixcbiAgICBcImxsY3Bfc29ja19yZWxlYXNlXCIsXG4gICAgXCJuZmNfbGxjcF9yZWdpc3Rlcl9kZXZpY2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXNvbHZlcyByYWNlIGNvbmRpdGlvbnMsIGltcHJvcGVyIHNvY2tldCBsb2NraW5nLCBhbmQgcmVmZXJlbmNlIGNvdW50aW5nIGlzc3VlcyBpbiB0aGUgTkZDIExMQ1Agc3Vic3lzdGVtIGFjcm9zcyBzb2NrZXQgcmVsZWFzZSwgY29ubmVjdGlvbiBhY2NlcHRhbmNlLCBhbmQgbG9jYWwgZGV2aWNlIHRlYXJkb3duLiBUaGVzZSBjb2RlIHBhdGhzIGFyZSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBBRl9ORkMgc29ja2V0IG9wZXJhdGlvbnMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZDXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmZjX2xsY3BfYWNjZXB0X3VubGlua1wiLFxuICAgIFwibmZjX2xsY3BfYWNjZXB0X2RlcXVldWVcIixcbiAgICBcIm5mY19sbGNwX2xvY2FsX3B1dFwiLFxuICAgIFwibGxjcF9zb2NrX2FjY2VwdFwiLFxuICAgIFwibGxjcF9zb2NrX3JlbGVhc2VcIixcbiAgICBcIm5mY19sbGNwX3JlZ2lzdGVyX2RldmljZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlc29sdmVzIHJhY2UgY29uZGl0aW9ucywgaW1wcm9wZXIgc29ja2V0IGxvY2tpbmcsIGFuZCByZWZlcmVuY2UgY291bnRpbmcgaXNzdWVzIGluIHRoZSBORkMgTExDUCBzdWJzeXN0ZW0gYWNyb3NzIHNvY2tldCByZWxlYXNlLCBjb25uZWN0aW9uIGFjY2VwdGFuY2UsIGFuZCBsb2NhbCBkZXZpY2UgdGVhcmRvd24uIFRoZXNlIGNvZGUgcGF0aHMgYXJlIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIEFGX05GQyBzb2NrZXQgb3BlcmF0aW9ucyBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDk6MDM6MjkuNTAwMzkxOTk3WiIsIlNlcSI6MjcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NDg3OTk1Nzc0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDk6MDM6MjkuNTAwODMxNjU3WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6OTQ4NzU1MjIyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIHNvY2tldCBsaWZlY3ljbGUgbWFuYWdlbWVudCwgcmVmZXJlbmNlIGNvdW50aW5nLCBsb2NraW5nLCBhbmQgYXN5bmNocm9ub3VzIGNsZWFudXAgaW4gdGhlIE5GQyBMTENQIHN1YnN5c3RlbSAobmV0L25mYy9sbGNwX2NvcmUuYyBhbmQgbmV0L25mYy9sbGNwX3NvY2suYykuIFNwZWNpZmljYWxseSwgaXQgaW50cm9kdWNlcyBzYWZlIGxpc3QgcG9wcGluZyB3aXRoIHByb3BlciBzb2NrZXQgbG9ja2luZywgY29ycmVjdCByZWZlcmVuY2UgY291bnRpbmcgZm9yIGNoaWxkIHNvY2tldHMgaW4gdGhlIGFjY2VwdCBxdWV1ZSwgYW5kIHdvcmtxdWV1ZS1kZWZlcnJlZCByZWxlYXNlIG9mIHN0cnVjdCBuZmNfbGxjcF9sb2NhbC5cXG5cXG5UaGVzZSBjaGFuZ2VzIGRlYWwgZXhjbHVzaXZlbHkgd2l0aCBjb25jdXJyZW5jeSwgcmVmZXJlbmNlIGNvdW50aW5nLCBhbmQgbGlmZWN5Y2xlIG1hbmFnZW1lbnQgKHJpc2tzIG9mIFVzZS1BZnRlci1GcmVlLCByYWNlIGNvbmRpdGlvbnMsIG9yIGRlYWRsb2NrcyksIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQIHNhbml0aXplcnMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBkYXRhIGNvcGllZCB0byB1c2Vyc3BhY2UsIGRvZXMgbm90IHJlYWQgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcy9idWZmZXJzLCBhbmQgZG9lcyBub3QgYWx0ZXIgbGVuZ3RoIG9yIGJvdW5kcyBjYWxjdWxhdGlvbnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4YTcyN2VkNzEyMmQ1Nzc0ZjJkNTJjODMyZTEzMmZjNzVhNjQyYWNmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMyAwOTowMjoyMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9uZmMvbGxjcC5oIGIvbmV0L25mYy9sbGNwLmhcbmluZGV4IGQ4MzQ1ZWQ1N2M5NTQuLjIzYWU3YTAxMTJkMzcgMTAwNjQ0XG4tLS0gYS9uZXQvbmZjL2xsY3AuaFxuKysrIGIvbmV0L25mYy9sbGNwLmhcbkBAIC05MSw2ICs5MSw3IEBAIHN0cnVjdCBuZmNfbGxjcF9sb2NhbCB7XG4gXHRzdHJ1Y3QgaGxpc3RfaGVhZCBwZW5kaW5nX3NkcmVxcztcbiBcdHN0cnVjdCB0aW1lcl9saXN0IHNkcmVxX3RpbWVyO1xuIFx0c3RydWN0IHdvcmtfc3RydWN0IHNkcmVxX3RpbWVvdXRfd29yaztcbitcdHN0cnVjdCB3b3JrX3N0cnVjdCByZWxlYXNlX3dvcms7XG4gXHR1OCBzZHJlcV9uZXh0X3RpZDtcbiBcbiBcdC8qIHNvY2tldHMgYXJyYXkgKi9cbmRpZmYgLS1naXQgYS9uZXQvbmZjL2xsY3BfY29yZS5jIGIvbmV0L25mYy9sbGNwX2NvcmUuY1xuaW5kZXggYmQ2MzYxZTJlZmE0Zi4uMjM1NTNlNzQyNmVjMiAxMDA2NDRcbi0tLSBhL25ldC9uZmMvbGxjcF9jb3JlLmNcbisrKyBiL25ldC9uZmMvbGxjcF9jb3JlLmNcbkBAIC0yMCw2ICsyMCw4IEBAIHN0YXRpYyBMSVNUX0hFQUQobGxjcF9kZXZpY2VzKTtcbiAvKiBQcm90ZWN0cyBsbGNwX2RldmljZXMgbGlzdCAqL1xuIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0sobGxjcF9kZXZpY2VzX2xvY2spO1xuIFxuK3N0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqbGxjcF93cTtcbitcbiBzdGF0aWMgdm9pZCBuZmNfbGxjcF9yeF9za2Ioc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG4gXG4gdm9pZCBuZmNfbGxjcF9zb2NrX2xpbmsoc3RydWN0IGxsY3Bfc29ja19saXN0ICpsLCBzdHJ1Y3Qgc29jayAqc2spXG5AQCAtNjMsMjEgKzY1LDMzIEBAIHN0YXRpYyB2b2lkIG5mY19sbGNwX3NvY2tldF9wdXJnZShzdHJ1Y3QgbmZjX2xsY3Bfc29jayAqc29jaylcbiBcdH1cbiB9XG4gXG4rc3RhdGljIHN0cnVjdCBzb2NrICpuZmNfbGxjcF9zb2NrX2xpc3RfcG9wKHN0cnVjdCBsbGNwX3NvY2tfbGlzdCAqbClcbit7XG4rXHRzdHJ1Y3Qgc29jayAqc2s7XG4rXG4rXHR3cml0ZV9sb2NrKFx1MDAyNmwtXHUwMDNlbG9jayk7XG4rXHRzayA9IHNrX2hlYWQoXHUwMDI2bC1cdTAwM2VoZWFkKTtcbitcdGlmIChzaykge1xuK1x0XHRzb2NrX2hvbGQoc2spO1xuK1x0XHRza19kZWxfbm9kZV9pbml0KHNrKTtcbitcdH1cbitcdHdyaXRlX3VubG9jayhcdTAwMjZsLVx1MDAzZWxvY2spO1xuK1xuK1x0cmV0dXJuIHNrO1xuK31cbitcbiBzdGF0aWMgdm9pZCBuZmNfbGxjcF9zb2NrZXRfcmVsZWFzZShzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsLCBib29sIGRldmljZSxcbiBcdFx0XHRcdCAgICBpbnQgZXJyKVxuIHtcbiBcdHN0cnVjdCBzb2NrICpzaztcbi1cdHN0cnVjdCBobGlzdF9ub2RlICp0bXA7XG4gXHRzdHJ1Y3QgbmZjX2xsY3Bfc29jayAqbGxjcF9zb2NrO1xuIFxuIFx0c2tiX3F1ZXVlX3B1cmdlKFx1MDAyNmxvY2FsLVx1MDAzZXR4X3F1ZXVlKTtcbiBcbi1cdHdyaXRlX2xvY2soXHUwMDI2bG9jYWwtXHUwMDNlc29ja2V0cy5sb2NrKTtcbi1cbi1cdHNrX2Zvcl9lYWNoX3NhZmUoc2ssIHRtcCwgXHUwMDI2bG9jYWwtXHUwMDNlc29ja2V0cy5oZWFkKSB7XG4rXHR3aGlsZSAoKHNrID0gbmZjX2xsY3Bfc29ja19saXN0X3BvcChcdTAwMjZsb2NhbC1cdTAwM2Vzb2NrZXRzKSkpIHtcbiBcdFx0bGxjcF9zb2NrID0gbmZjX2xsY3Bfc29jayhzayk7XG4gXG4tXHRcdGJoX2xvY2tfc29jayhzayk7XG4rXHRcdGxvY2tfc29jayhzayk7XG4gXG4gXHRcdG5mY19sbGNwX3NvY2tldF9wdXJnZShsbGNwX3NvY2spO1xuIFxuQEAgLTkxLDE3ICsxMDUsMjcgQEAgc3RhdGljIHZvaWQgbmZjX2xsY3Bfc29ja2V0X3JlbGVhc2Uoc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCwgYm9vbCBkZXZpY2UsXG4gXHRcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGxzaywgbixcbiBcdFx0XHRcdFx0XHQgXHUwMDI2bGxjcF9zb2NrLVx1MDAzZWFjY2VwdF9xdWV1ZSxcbiBcdFx0XHRcdFx0XHQgYWNjZXB0X3F1ZXVlKSB7XG4tXHRcdFx0XHRhY2NlcHRfc2sgPSBcdTAwMjZsc2stXHUwMDNlc2s7XG4tXHRcdFx0XHRiaF9sb2NrX3NvY2soYWNjZXB0X3NrKTtcbi1cbi1cdFx0XHRcdG5mY19sbGNwX2FjY2VwdF91bmxpbmsoYWNjZXB0X3NrKTtcbitcdFx0XHRcdGJvb2wgcHV0X2NyZWF0aW9uID0gZmFsc2U7XG4gXG4tXHRcdFx0XHRpZiAoZXJyKVxuLVx0XHRcdFx0XHRhY2NlcHRfc2stXHUwMDNlc2tfZXJyID0gZXJyO1xuLVx0XHRcdFx0YWNjZXB0X3NrLVx1MDAzZXNrX3N0YXRlID0gTExDUF9DTE9TRUQ7XG4tXHRcdFx0XHRhY2NlcHRfc2stXHUwMDNlc2tfc3RhdGVfY2hhbmdlKHNrKTtcbitcdFx0XHRcdGFjY2VwdF9zayA9IFx1MDAyNmxzay1cdTAwM2VzaztcbitcdFx0XHRcdGxvY2tfc29ja19uZXN0ZWQoYWNjZXB0X3NrLFxuK1x0XHRcdFx0XHRcdCBTSU5HTEVfREVQVEhfTkVTVElORyk7XG4rXG4rXHRcdFx0XHRpZiAobmZjX2xsY3Bfc29jayhhY2NlcHRfc2spLVx1MDAzZXBhcmVudCA9PSBzaykge1xuK1x0XHRcdFx0XHRuZmNfbGxjcF9hY2NlcHRfdW5saW5rKGFjY2VwdF9zayk7XG4rXHRcdFx0XHRcdG5mY19sbGNwX3NvY2tfdW5saW5rKFx1MDAyNmxvY2FsLVx1MDAzZXNvY2tldHMsIGFjY2VwdF9zayk7XG4rXG4rXHRcdFx0XHRcdGlmIChlcnIpXG4rXHRcdFx0XHRcdFx0YWNjZXB0X3NrLVx1MDAzZXNrX2VyciA9IGVycjtcbitcdFx0XHRcdFx0YWNjZXB0X3NrLVx1MDAzZXNrX3N0YXRlID0gTExDUF9DTE9TRUQ7XG4rXHRcdFx0XHRcdGFjY2VwdF9zay1cdTAwM2Vza19zdGF0ZV9jaGFuZ2UoYWNjZXB0X3NrKTtcbitcdFx0XHRcdFx0c29ja19vcnBoYW4oYWNjZXB0X3NrKTtcbitcdFx0XHRcdFx0cHV0X2NyZWF0aW9uID0gdHJ1ZTtcbitcdFx0XHRcdH1cbiBcbi1cdFx0XHRcdGJoX3VubG9ja19zb2NrKGFjY2VwdF9zayk7XG4rXHRcdFx0XHRyZWxlYXNlX3NvY2soYWNjZXB0X3NrKTtcbitcdFx0XHRcdGlmIChwdXRfY3JlYXRpb24pXG4rXHRcdFx0XHRcdHNvY2tfcHV0KGFjY2VwdF9zayk7IC8qIGNyZWF0aW9uIHJlZiAqL1xuIFx0XHRcdH1cbiBcdFx0fVxuIFxuQEAgLTExMCwyMyArMTM0LDE4IEBAIHN0YXRpYyB2b2lkIG5mY19sbGNwX3NvY2tldF9yZWxlYXNlKHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwsIGJvb2wgZGV2aWNlLFxuIFx0XHRzay1cdTAwM2Vza19zdGF0ZSA9IExMQ1BfQ0xPU0VEO1xuIFx0XHRzay1cdTAwM2Vza19zdGF0ZV9jaGFuZ2Uoc2spO1xuIFxuLVx0XHRiaF91bmxvY2tfc29jayhzayk7XG4tXG4tXHRcdHNrX2RlbF9ub2RlX2luaXQoc2spO1xuK1x0XHRyZWxlYXNlX3NvY2soc2spO1xuK1x0XHRzb2NrX3B1dChzayk7XG4gXHR9XG4gXG4tXHR3cml0ZV91bmxvY2soXHUwMDI2bG9jYWwtXHUwMDNlc29ja2V0cy5sb2NrKTtcbi1cbiBcdC8qIElmIHdlIHN0aWxsIGhhdmUgYSBkZXZpY2UsIHdlIGtlZXAgdGhlIFJBVyBzb2NrZXRzIGFsaXZlICovXG4gXHRpZiAoZGV2aWNlID09IHRydWUpXG4gXHRcdHJldHVybjtcbiBcbi1cdHdyaXRlX2xvY2soXHUwMDI2bG9jYWwtXHUwMDNlcmF3X3NvY2tldHMubG9jayk7XG4tXG4tXHRza19mb3JfZWFjaF9zYWZlKHNrLCB0bXAsIFx1MDAyNmxvY2FsLVx1MDAzZXJhd19zb2NrZXRzLmhlYWQpIHtcbitcdHdoaWxlICgoc2sgPSBuZmNfbGxjcF9zb2NrX2xpc3RfcG9wKFx1MDAyNmxvY2FsLVx1MDAzZXJhd19zb2NrZXRzKSkpIHtcbiBcdFx0bGxjcF9zb2NrID0gbmZjX2xsY3Bfc29jayhzayk7XG4gXG4tXHRcdGJoX2xvY2tfc29jayhzayk7XG4rXHRcdGxvY2tfc29jayhzayk7XG4gXG4gXHRcdG5mY19sbGNwX3NvY2tldF9wdXJnZShsbGNwX3NvY2spO1xuIFxuQEAgLTEzNSwyNiArMTU0LDIwIEBAIHN0YXRpYyB2b2lkIG5mY19sbGNwX3NvY2tldF9yZWxlYXNlKHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwsIGJvb2wgZGV2aWNlLFxuIFx0XHRzay1cdTAwM2Vza19zdGF0ZSA9IExMQ1BfQ0xPU0VEO1xuIFx0XHRzay1cdTAwM2Vza19zdGF0ZV9jaGFuZ2Uoc2spO1xuIFxuLVx0XHRiaF91bmxvY2tfc29jayhzayk7XG4tXG4tXHRcdHNrX2RlbF9ub2RlX2luaXQoc2spO1xuK1x0XHRyZWxlYXNlX3NvY2soc2spO1xuK1x0XHRzb2NrX3B1dChzayk7XG4gXHR9XG4tXG4tXHR3cml0ZV91bmxvY2soXHUwMDI2bG9jYWwtXHUwMDNlcmF3X3NvY2tldHMubG9jayk7XG4gfVxuIFxuIHN0YXRpYyBzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKm5mY19sbGNwX2xvY2FsX2dldChzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsKVxuIHtcbi1cdC8qIFNpbmNlIHVzaW5nIG5mY19sbGNwX2xvY2FsIG1heSByZXN1bHQgaW4gdXNhZ2Ugb2YgbmZjX2Rldiwgd2hlbmV2ZXJcbi1cdCAqIHdlIGhvbGQgYSByZWZlcmVuY2UgdG8gbG9jYWwsIHdlIGFsc28gbmVlZCB0byBob2xkIGEgcmVmZXJlbmNlIHRvXG4tXHQgKiB0aGUgZGV2aWNlIHRvIGF2b2lkIFVBRi5cbi1cdCAqL1xuLVx0aWYgKCFuZmNfZ2V0X2RldmljZShsb2NhbC1cdTAwM2VkZXYtXHUwMDNlaWR4KSlcbitcdGlmICghbG9jYWwpXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuLVx0a3JlZl9nZXQoXHUwMDI2bG9jYWwtXHUwMDNlcmVmKTtcbitcdGlmIChrcmVmX2dldF91bmxlc3NfemVybyhcdTAwMjZsb2NhbC1cdTAwM2VyZWYpKVxuK1x0XHRyZXR1cm4gbG9jYWw7XG4gXG4tXHRyZXR1cm4gbG9jYWw7XG4rXHRyZXR1cm4gTlVMTDtcbiB9XG4gXG4gc3RhdGljIHZvaWQgbG9jYWxfY2xlYW51cChzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsKVxuQEAgLTE3MiwzMCArMTg1LDM0IEBAIHN0YXRpYyB2b2lkIGxvY2FsX2NsZWFudXAoc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbClcbiBcdG5mY19sbGNwX2ZyZWVfc2RwX3Rsdl9saXN0KFx1MDAyNmxvY2FsLVx1MDAzZXBlbmRpbmdfc2RyZXFzKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgbG9jYWxfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqcmVmKVxuK3N0YXRpYyB2b2lkIGxvY2FsX3JlbGVhc2Vfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4ge1xuIFx0c3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbDtcbitcdHN0cnVjdCBuZmNfZGV2ICpkZXY7XG4gXG4tXHRsb2NhbCA9IGNvbnRhaW5lcl9vZihyZWYsIHN0cnVjdCBuZmNfbGxjcF9sb2NhbCwgcmVmKTtcbitcdGxvY2FsID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBuZmNfbGxjcF9sb2NhbCwgcmVsZWFzZV93b3JrKTtcbitcdGRldiA9IGxvY2FsLVx1MDAzZWRldjtcbiBcbiBcdGxvY2FsX2NsZWFudXAobG9jYWwpO1xuIFx0a2ZyZWUobG9jYWwpO1xuK1x0bmZjX3B1dF9kZXZpY2UoZGV2KTtcbiB9XG4gXG4taW50IG5mY19sbGNwX2xvY2FsX3B1dChzdHJ1Y3QgbmZjX2xsY3BfbG9jYWwgKmxvY2FsKVxuK3N0YXRpYyB2b2lkIGxvY2FsX3JlbGVhc2Uoc3RydWN0IGtyZWYgKnJlZilcbiB7XG4tXHRzdHJ1Y3QgbmZjX2RldiAqZGV2O1xuLVx0aW50IHJldDtcbitcdHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWw7XG4gXG4tXHRpZiAobG9jYWwgPT0gTlVMTClcbi1cdFx0cmV0dXJuIDA7XG4rXHRsb2NhbCA9IGNvbnRhaW5lcl9vZihyZWYsIHN0cnVjdCBuZmNfbGxjcF9sb2NhbCwgcmVmKTtcbiBcbi1cdGRldiA9IGxvY2FsLVx1MDAzZWRldjtcbitcdHF1ZXVlX3dvcmsobGxjcF93cSwgXHUwMDI2bG9jYWwtXHUwMDNlcmVsZWFzZV93b3JrKTtcbit9XG4gXG4tXHRyZXQgPSBrcmVmX3B1dChcdTAwMjZsb2NhbC1cdTAwM2VyZWYsIGxvY2FsX3JlbGVhc2UpO1xuLVx0bmZjX3B1dF9kZXZpY2UoZGV2KTtcbitpbnQgbmZjX2xsY3BfbG9jYWxfcHV0KHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWwpXG4re1xuK1x0aWYgKCFsb2NhbClcbitcdFx0cmV0dXJuIDA7XG4gXG4tXHRyZXR1cm4gcmV0O1xuK1x0cmV0dXJuIGtyZWZfcHV0KFx1MDAyNmxvY2FsLVx1MDAzZXJlZiwgbG9jYWxfcmVsZWFzZSk7XG4gfVxuIFxuIHN0YXRpYyBzdHJ1Y3QgbmZjX2xsY3Bfc29jayAqbmZjX2xsY3Bfc29ja19nZXQoc3RydWN0IG5mY19sbGNwX2xvY2FsICpsb2NhbCxcbkBAIC0xNzA1LDYgKzE3MjIsNyBAQCBpbnQgbmZjX2xsY3BfcmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCBuZmNfZGV2ICpuZGV2KVxuIFx0SU5JVF9XT1JLKFx1MDAyNmxvY2FsLVx1MDAzZXJ4X3dvcmssIG5mY19sbGNwX3J4X3dvcmspO1xuIFxuIFx0SU5JVF9XT1JLKFx1MDAyNmxvY2FsLVx1MDAzZXRpbWVvdXRfd29yaywgbmZjX2xsY3BfdGltZW91dF93b3JrKTtcbitcdElOSVRfV09SSyhcdTAwMjZsb2NhbC1cdTAwM2VyZWxlYXNlX3dvcmssIGxvY2FsX3JlbGVhc2Vfd29yayk7XG4gXG4gXHRyd2xvY2tfaW5pdChcdTAwMjZsb2NhbC1cdTAwM2Vzb2NrZXRzLmxvY2spO1xuIFx0cndsb2NrX2luaXQoXHUwMDI2bG9jYWwtXHUwMDNlY29ubmVjdGluZ19zb2NrZXRzLmxvY2spO1xuQEAgLTE3NDgsMTAgKzE3NjYsMjMgQEAgdm9pZCBuZmNfbGxjcF91bnJlZ2lzdGVyX2RldmljZShzdHJ1Y3QgbmZjX2RldiAqZGV2KVxuIFxuIGludCBfX2luaXQgbmZjX2xsY3BfaW5pdCh2b2lkKVxuIHtcbi1cdHJldHVybiBuZmNfbGxjcF9zb2NrX2luaXQoKTtcbitcdGludCByZXQ7XG4rXG4rXHRsbGNwX3dxID0gYWxsb2Nfd29ya3F1ZXVlKFwibmZjX2xsY3Bfd3FcIiwgV1FfVU5CT1VORCwgMCk7XG4rXHRpZiAoIWxsY3Bfd3EpXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0cmV0ID0gbmZjX2xsY3Bfc29ja19pbml0KCk7XG4rXHRpZiAocmV0KSB7XG4rXHRcdGRlc3Ryb3lfd29ya3F1ZXVlKGxsY3Bfd3EpO1xuK1x0XHRyZXR1cm4gcmV0O1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4gfVxuIFxuIHZvaWQgbmZjX2xsY3BfZXhpdCh2b2lkKVxuIHtcbiBcdG5mY19sbGNwX3NvY2tfZXhpdCgpO1xuK1x0ZGVzdHJveV93b3JrcXVldWUobGxjcF93cSk7XG4gfVxuZGlmZiAtLWdpdCBhL25ldC9uZmMvbGxjcF9zb2NrLmMgYi9uZXQvbmZjL2xsY3Bfc29jay5jXG5pbmRleCA1NTU4ZDhhNGQ0OGIzLi5jZTY4NzVlYjU4ZmJjIDEwMDY0NFxuLS0tIGEvbmV0L25mYy9sbGNwX3NvY2suY1xuKysrIGIvbmV0L25mYy9sbGNwX3NvY2suY1xuQEAgLTM5MiwxMSArMzkyLDEyIEBAIHZvaWQgbmZjX2xsY3BfYWNjZXB0X3VubGluayhzdHJ1Y3Qgc29jayAqc2spXG4gXG4gXHRwcl9kZWJ1ZyhcInN0YXRlICVkXFxuXCIsIHNrLVx1MDAzZXNrX3N0YXRlKTtcbiBcbi1cdGxpc3RfZGVsX2luaXQoXHUwMDI2bGxjcF9zb2NrLVx1MDAzZWFjY2VwdF9xdWV1ZSk7XG4tXHRza19hY2NlcHRxX3JlbW92ZWQobGxjcF9zb2NrLVx1MDAzZXBhcmVudCk7XG4tXHRsbGNwX3NvY2stXHUwMDNlcGFyZW50ID0gTlVMTDtcbi1cbi1cdHNvY2tfcHV0KHNrKTtcbitcdGlmIChsbGNwX3NvY2stXHUwMDNlcGFyZW50KSB7XG4rXHRcdGxpc3RfZGVsX2luaXQoXHUwMDI2bGxjcF9zb2NrLVx1MDAzZWFjY2VwdF9xdWV1ZSk7XG4rXHRcdHNrX2FjY2VwdHFfcmVtb3ZlZChsbGNwX3NvY2stXHUwMDNlcGFyZW50KTtcbitcdFx0bGxjcF9zb2NrLVx1MDAzZXBhcmVudCA9IE5VTEw7XG4rXHRcdHNvY2tfcHV0KHNrKTtcbitcdH1cbiB9XG4gXG4gdm9pZCBuZmNfbGxjcF9hY2NlcHRfZW5xdWV1ZShzdHJ1Y3Qgc29jayAqcGFyZW50LCBzdHJ1Y3Qgc29jayAqc2spXG5AQCAtNDIzLDEyICs0MjQsMjAgQEAgc3RydWN0IHNvY2sgKm5mY19sbGNwX2FjY2VwdF9kZXF1ZXVlKHN0cnVjdCBzb2NrICpwYXJlbnQsXG4gXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobHNrLCBuLCBcdTAwMjZsbGNwX3BhcmVudC1cdTAwM2VhY2NlcHRfcXVldWUsXG4gXHRcdFx0XHQgYWNjZXB0X3F1ZXVlKSB7XG4rXHRcdHN0cnVjdCBuZmNfbGxjcF9sb2NhbCAqbG9jYWw7XG4rXG4gXHRcdHNrID0gXHUwMDI2bHNrLVx1MDAzZXNrO1xuLVx0XHRsb2NrX3NvY2soc2spO1xuK1x0XHRsb2NrX3NvY2tfbmVzdGVkKHNrLCBTSU5HTEVfREVQVEhfTkVTVElORyk7XG4gXG4gXHRcdGlmIChzay1cdTAwM2Vza19zdGF0ZSA9PSBMTENQX0NMT1NFRCkge1xuLVx0XHRcdHJlbGVhc2Vfc29jayhzayk7XG4rXHRcdFx0bG9jYWwgPSBuZmNfbGxjcF9zb2NrKHNrKS1cdTAwM2Vsb2NhbDtcbitcbiBcdFx0XHRuZmNfbGxjcF9hY2NlcHRfdW5saW5rKHNrKTtcbitcdFx0XHRpZiAobG9jYWwpXG4rXHRcdFx0XHRuZmNfbGxjcF9zb2NrX3VubGluayhcdTAwMjZsb2NhbC1cdTAwM2Vzb2NrZXRzLCBzayk7XG4rXHRcdFx0c29ja19vcnBoYW4oc2spO1xuK1x0XHRcdHJlbGVhc2Vfc29jayhzayk7XG4rXHRcdFx0c29ja19wdXQoc2spO1xuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHR9XG4gXG5AQCAtNDY0LDcgKzQ3Myw3IEBAIHN0YXRpYyBpbnQgbGxjcF9zb2NrX2FjY2VwdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2V0ICpuZXdzb2NrLFxuIFxuIFx0cHJfZGVidWcoXCJwYXJlbnQgJXBcXG5cIiwgc2spO1xuIFxuLVx0bG9ja19zb2NrX25lc3RlZChzaywgU0lOR0xFX0RFUFRIX05FU1RJTkcpO1xuK1x0bG9ja19zb2NrKHNrKTtcbiBcbiBcdGlmIChzay1cdTAwM2Vza19zdGF0ZSAhPSBMTENQX0xJU1RFTikge1xuIFx0XHRyZXQgPSAtRUJBREZEO1xuQEAgLTQ5MCw3ICs0OTksMTIgQEAgc3RhdGljIGludCBsbGNwX3NvY2tfYWNjZXB0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrZXQgKm5ld3NvY2ssXG4gXG4gXHRcdHJlbGVhc2Vfc29jayhzayk7XG4gXHRcdHRpbWVvID0gc2NoZWR1bGVfdGltZW91dCh0aW1lbyk7XG4tXHRcdGxvY2tfc29ja19uZXN0ZWQoc2ssIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTtcbitcdFx0bG9ja19zb2NrKHNrKTtcbitcbitcdFx0aWYgKHNrLVx1MDAzZXNrX3N0YXRlICE9IExMQ1BfTElTVEVOKSB7XG4rXHRcdFx0cmV0ID0gLUVCQURGRDtcbitcdFx0XHRicmVhaztcbitcdFx0fVxuIFx0fVxuIFx0X19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpO1xuIFx0cmVtb3ZlX3dhaXRfcXVldWUoc2tfc2xlZXAoc2spLCBcdTAwMjZ3YWl0KTtcbkBAIC02MjksMTMgKzY0MywyNCBAQCBzdGF0aWMgaW50IGxsY3Bfc29ja19yZWxlYXNlKHN0cnVjdCBzb2NrZXQgKnNvY2spXG4gXG4gXHRcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShsc2ssIG4sIFx1MDAyNmxsY3Bfc29jay1cdTAwM2VhY2NlcHRfcXVldWUsXG4gXHRcdFx0XHRcdCBhY2NlcHRfcXVldWUpIHtcbitcdFx0XHRib29sIHB1dF9jcmVhdGlvbiA9IGZhbHNlO1xuK1xuIFx0XHRcdGFjY2VwdF9zayA9IFx1MDAyNmxzay1cdTAwM2Vzaztcbi1cdFx0XHRsb2NrX3NvY2soYWNjZXB0X3NrKTtcbitcdFx0XHRsb2NrX3NvY2tfbmVzdGVkKGFjY2VwdF9zaywgU0lOR0xFX0RFUFRIX05FU1RJTkcpO1xuIFxuLVx0XHRcdG5mY19sbGNwX3NlbmRfZGlzY29ubmVjdChsc2spO1xuLVx0XHRcdG5mY19sbGNwX2FjY2VwdF91bmxpbmsoYWNjZXB0X3NrKTtcbitcdFx0XHRpZiAobmZjX2xsY3Bfc29jayhhY2NlcHRfc2spLVx1MDAzZXBhcmVudCA9PSBzaykge1xuK1x0XHRcdFx0bmZjX2xsY3Bfc2VuZF9kaXNjb25uZWN0KGxzayk7XG4rXHRcdFx0XHRuZmNfbGxjcF9hY2NlcHRfdW5saW5rKGFjY2VwdF9zayk7XG4rXHRcdFx0XHRuZmNfbGxjcF9zb2NrX3VubGluayhcdTAwMjZsb2NhbC1cdTAwM2Vzb2NrZXRzLCBhY2NlcHRfc2spO1xuK1xuK1x0XHRcdFx0YWNjZXB0X3NrLVx1MDAzZXNrX3N0YXRlID0gTExDUF9DTE9TRUQ7XG4rXHRcdFx0XHRzb2NrX29ycGhhbihhY2NlcHRfc2spO1xuK1x0XHRcdFx0cHV0X2NyZWF0aW9uID0gdHJ1ZTtcbitcdFx0XHR9XG4gXG4gXHRcdFx0cmVsZWFzZV9zb2NrKGFjY2VwdF9zayk7XG4rXHRcdFx0aWYgKHB1dF9jcmVhdGlvbilcbitcdFx0XHRcdHNvY2tfcHV0KGFjY2VwdF9zayk7IC8qIGNyZWF0aW9uIHJlZiAqL1xuIFx0XHR9XG4gXHR9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwOTowMzoyOS41MDA4MzQ0OTdaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6OTQ4NzUyODcwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBBbmFseXNpcyBvZiBORkMgTExDUCBTb2NrZXQgTGlmZWN5Y2xlIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgcGF0Y2ggdG91Y2hlcyBgbmV0L25mYy9sbGNwLmhgLCBgbmV0L25mYy9sbGNwX2NvcmUuY2AsIGFuZCBgbmV0L25mYy9sbGNwX3NvY2suY2AuIE15IGluaXRpYWwgcmVhZCBpcyB0aGF0IHRoaXMgaXMgYWxsIGFib3V0IGNsZWFuaW5nIHVwIHNvY2tldCBsaWZlY3ljbGUsIHJlZmVyZW5jZSBjb3VudGluZywgc3luY2hyb25pemF0aW9uLCBsb2NraW5nLCBhbmQgVUFGL3JhY2UgY29uZGl0aW9ucyB3aXRoaW4gdGhlIE5GQyBMTENQIHN1YnN5c3RlbS4gV2UncmUgdGFsa2luZyBhYm91dCBwcmV2ZW50aW5nIHNpdHVhdGlvbnMgd2hlcmUgYSBzb2NrZXQsIGxvY2FsIGRldmljZSwgb3IgdGhlIGRldmljZSBpdHNlbGYgbWlnaHQgZ2V0IGZyZWVkIHdoaWxlIHN0aWxsIGluIHVzZSwgb3Igd2hlcmUgdGhlcmUgYXJlIHJhY2UgY29uZGl0aW9ucyBpbiB0aGUgYWNjZXB0IHF1ZXVlIG9yIGR1cmluZyBsb2NhbCBkZXZpY2UgcmVsZWFzZS5cblxuU3BlY2lmaWNhbGx5LCBpdCBsb29rcyBsaWtlOlxuXG4xLiAgQSBgcmVsZWFzZV93b3JrYCBpcyBiZWluZyBhZGRlZCB0byBgbmZjX2xsY3BfbG9jYWxgIGluIGBsbGNwLmhgLlxuMi4gIGBsbGNwX3dxYCBpcyBpbnRyb2R1Y2VkIGluIGBsbGNwX2NvcmUuY2AgZm9yIGFzeW5jaHJvbm91cyBjbGVhbnVwIGFuZCB3ZSBzZWUgdXBkYXRlcyB0byBgbmZjX2xsY3Bfc29ja2V0X3JlbGVhc2VgLCBgbmZjX2xsY3BfbG9jYWxfZ2V0YCwgYW5kIGBsb2NhbF9yZWxlYXNlYC4gVGhlcmUncyBhIGNsZWFyIGVtcGhhc2lzIG9uIHNhZmUgc29ja2V0IHBvcHBpbmcgYW5kIGxvY2tpbmcgd2l0aCBgbG9ja19zb2NrYCBub3csIHJhdGhlciB0aGFuIGBiaF9sb2NrX3NvY2tgLiBJdCdzIGhhbmRsaW5nIGFjY2VwdCBxdWV1ZSBjaGlsZCBzb2NrZXRzIHByb3Blcmx5ICh1bmxpbmtpbmcsIG9ycGhhbmluZywgZXRjLikuICBUaGUgYXN5bmNocm9ub3VzIGRlZmVycmFsIG9mIGBsb2NhbF9yZWxlYXNlX3dvcmtgIG9udG8gYGxsY3Bfd3FgIHNlZW1zIGNydWNpYWwuIEl0J3MgcHJvcGVybHkgaW5pdGlhbGl6aW5nIGByZWxlYXNlX3dvcmtgIGFuZCBgbGxjcF93cWAuXG4zLiAgSW4gYGxsY3Bfc29jay5jYCwgdGhlcmUgYXJlIGNoZWNrcyBmb3IgYGxsY3Bfc29jay1cdTAwM2VwYXJlbnRgLCBwcm9wZXIgdW5saW5raW5nL29ycGhhbmluZyB3aGVuIGRlcXVldWluZyBjbG9zZWQgc29ja2V0cyBmcm9tIGFjY2VwdCBxdWV1ZXMsIGFuZCBmaXhlcyB0byBsb2NraW5nIGluIGBsbGNwX3NvY2tfYWNjZXB0YC4gQWxzbywgYGxsY3Bfc29ja19yZWxlYXNlYCBoYW5kbGVzIGFjY2VwdF9xdWV1ZSBzb2NrZXRzIGNvcnJlY3RseSwgZGVhbGluZyB3aXRoIGxvY2tpbmcsIHVubGlua2luZywgb3JwaGFuaW5nLCBhbmQgcmVmZXJlbmNlIGNvdW50cy5cblxuVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBzZWVtcyB0byBpbnZvbHZlIGEgZmFpcmx5IHRob3JvdWdoIG92ZXJoYXVsIG9mIGhvdyBzb2NrZXRzIGFyZSBtYW5hZ2VkLCBwYXJ0aWN1bGFybHkgZHVyaW5nIHRoZWlyIHJlbGVhc2UgYW5kIGhhbmRsaW5nIG9mIGFjY2VwdCBxdWV1ZXMuIEl0IHNlZW1zIHRvIGJlIGFkZHJlc3NpbmcgY29tbW9uIGNvbmN1cnJlbmN5IGlzc3VlcywgbG9ja2luZyBpc3N1ZXMsIGFuZCByZWZlcmVuY2UgY291bnRpbmcgcHJvYmxlbXMuXG5cbk5vdywgbXkgcHJpbWFyeSBjb25jZXJuIGlzIHdoZXRoZXIgdGhpcyBpbnRyb2R1Y2VzIG9yIGV4cG9zZXMgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBMZXQncyBsb29rIGF0IHRoYXQ6XG5cbiogICAqKmBjb3B5X3RvX3VzZXJgIG9yIGBwdXRfdXNlcmA/KiogTm8sIHRoZXJlIGFyZSBubyBjaGFuZ2VzIGhlcmUuXG4qICAgKipOZXRsaW5rIGF0dHJpYnV0ZXMgb3IgaW9jdGwgb3V0cHV0PyoqIE5vLlxuKiAgICoqUmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeT8qKiBOby4gVGhlIHBhdGNoIG9ubHkgdG91Y2hlcyB3b3JrIHN0cnVjdHMgKGluaXRpYWxpemVkIHdpdGggYElOSVRfV09SS2ApLCBhdG9taWMva3JlZnMsIHNvY2tldCBsaXN0cywgYW5kIGxvY2tpbmcgbWVjaGFuaXNtcy5cbiogICAqKkJ1ZmZlciBib3VuZHMgb3IgZGF0YSBsZW5ndGhzPyoqIE5vIGFsdGVyYXRpb25zIGhlcmUuXG5cbkl0J3MgYWxsIGFib3V0IHJlZmVyZW5jZSBjb3VudGluZywgbGlzdCBtYW5pcHVsYXRpb24sIHdvcmtxdWV1ZSBkZWZlcnJhbCwgYW5kIGxvY2tpbmcuIFRoaXMgcGF0Y2ggc3BlY2lmaWNhbGx5IHNlZW1zIGZvY3VzZWQgb24gZml4aW5nIFVBRnMsIHJhY2UgY29uZGl0aW9ucywgYW5kIHBvdGVudGlhbGx5IGRlYWRsb2Nrcy4gS0FTQU4gYW5kIExPQ0tERVAgYXJlIGdvaW5nIHRvIGNhdGNoIHRoZSBraW5kIG9mIGJ1Z3MgdGhhdCB0aGUgcGF0Y2ggYWltcyB0byBmaXguXG5cblRoaXMgcGF0Y2ggKmRvZXNuJ3QqIGludHJvZHVjZSBvciBleHBvc2UgYW55IG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gV2UgZG9uJ3QgbmVlZCB0byBlbmFibGUgS01TQU4gZm9yIHRoaXMuXG5cblNvLCB0aGUgS01TQU5SZWFzb25pbmc6XG5cbiogICBUaGUgcGF0Y2ggcHJpbWFyaWx5IGFkZHJlc3NlcyBzb2NrZXQgbGlmZWN5Y2xlLCByZWZlcmVuY2UgY291bnRpbmcsIGFuZCBsb2NraW5nIGlzc3VlcyB3aXRoaW4gYG5ldC9uZmMvbGxjcF9jb3JlLmNgIGFuZCBgbmV0L25mYy9sbGNwX3NvY2suY2AsIHBhcnRpY3VsYXJseSBhcm91bmQgTExDUCBzb2NrZXQgcmVsZWFzZSBhbmQgZGV2aWNlIHVucmVnaXN0cmF0aW9uLCBhaW1pbmcgdG8gcHJldmVudCByYWNlcywgZGVhZGxvY2tzLCBhbmQgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucy5cbiogICBJdCBtb2RpZmllcyBzb2NrZXQgdW5saW5raW5nLCB1c2VzIGBsb2NrX3NvY2tgLCBkZWZlcnMgbG9jYWwgY2xlYW51cCB1c2luZyBgbGxjcF93cWAsIGFuZCBtYW5hZ2VzIHNvY2tldC9kZXZpY2UgcmVmZXJlbmNlIGNvdW50cy5cbiogICBObyBuZXcgbWVtb3J5IGJ1ZmZlcnMgYXJlIGNvcGllZCB0byB1c2Vyc3BhY2UsIG5vIG5ldyBkYXRhIHN0cnVjdHVyZXMgY29udGFpbmluZyB1bmluaXRpYWxpemVkIGZpZWxkcyBhcmUgcmVhZCwgYW5kIG5vIGJ1ZmZlciBib3VuZHMgYXJlIGFsdGVyZWQuXG4qICAgUG90ZW50aWFsIHJlZ3Jlc3Npb25zIChVQUYsIGRvdWJsZS1mcmVlLCBkZWFkbG9ja3MpIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBMT0NLREVQLlxuKiAgIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3MjksIk91dHB1dFRva2VucyI6MjA0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAzMCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDA5OjAzOjM4Ljk4ODM2NjMxMVoiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1OTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIHNvY2tldCBsaWZlY3ljbGUgbWFuYWdlbWVudCwgcmVmZXJlbmNlIGNvdW50aW5nLCBsb2NraW5nLCBhbmQgYXN5bmNocm9ub3VzIGNsZWFudXAgaW4gdGhlIE5GQyBMTENQIHN1YnN5c3RlbSAobmV0L25mYy9sbGNwX2NvcmUuYyBhbmQgbmV0L25mYy9sbGNwX3NvY2suYykuIFNwZWNpZmljYWxseSwgaXQgaW50cm9kdWNlcyBzYWZlIGxpc3QgcG9wcGluZyB3aXRoIHByb3BlciBzb2NrZXQgbG9ja2luZywgY29ycmVjdCByZWZlcmVuY2UgY291bnRpbmcgZm9yIGNoaWxkIHNvY2tldHMgaW4gdGhlIGFjY2VwdCBxdWV1ZSwgYW5kIHdvcmtxdWV1ZS1kZWZlcnJlZCByZWxlYXNlIG9mIHN0cnVjdCBuZmNfbGxjcF9sb2NhbC5cXG5cXG5UaGVzZSBjaGFuZ2VzIGRlYWwgZXhjbHVzaXZlbHkgd2l0aCBjb25jdXJyZW5jeSwgcmVmZXJlbmNlIGNvdW50aW5nLCBhbmQgbGlmZWN5Y2xlIG1hbmFnZW1lbnQgKHJpc2tzIG9mIFVzZS1BZnRlci1GcmVlLCByYWNlIGNvbmRpdGlvbnMsIG9yIGRlYWRsb2NrcyksIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQIHNhbml0aXplcnMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBkYXRhIGNvcGllZCB0byB1c2Vyc3BhY2UsIGRvZXMgbm90IHJlYWQgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcy9idWZmZXJzLCBhbmQgZG9lcyBub3QgYWx0ZXIgbGVuZ3RoIG9yIGJvdW5kcyBjYWxjdWxhdGlvbnMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgc29ja2V0IGxpZmVjeWNsZSBtYW5hZ2VtZW50LCByZWZlcmVuY2UgY291bnRpbmcsIGxvY2tpbmcsIGFuZCBhc3luY2hyb25vdXMgY2xlYW51cCBpbiB0aGUgTkZDIExMQ1Agc3Vic3lzdGVtIChuZXQvbmZjL2xsY3BfY29yZS5jIGFuZCBuZXQvbmZjL2xsY3Bfc29jay5jKS4gU3BlY2lmaWNhbGx5LCBpdCBpbnRyb2R1Y2VzIHNhZmUgbGlzdCBwb3BwaW5nIHdpdGggcHJvcGVyIHNvY2tldCBsb2NraW5nLCBjb3JyZWN0IHJlZmVyZW5jZSBjb3VudGluZyBmb3IgY2hpbGQgc29ja2V0cyBpbiB0aGUgYWNjZXB0IHF1ZXVlLCBhbmQgd29ya3F1ZXVlLWRlZmVycmVkIHJlbGVhc2Ugb2Ygc3RydWN0IG5mY19sbGNwX2xvY2FsLlxcblxcblRoZXNlIGNoYW5nZXMgZGVhbCBleGNsdXNpdmVseSB3aXRoIGNvbmN1cnJlbmN5LCByZWZlcmVuY2UgY291bnRpbmcsIGFuZCBsaWZlY3ljbGUgbWFuYWdlbWVudCAocmlza3Mgb2YgVXNlLUFmdGVyLUZyZWUsIHJhY2UgY29uZGl0aW9ucywgb3IgZGVhZGxvY2tzKSwgd2hpY2ggYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAgc2FuaXRpemVycy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IGRhdGEgY29waWVkIHRvIHVzZXJzcGFjZSwgZG9lcyBub3QgcmVhZCBvciBleHBvc2UgdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzL2J1ZmZlcnMsIGFuZCBkb2VzIG5vdCBhbHRlciBsZW5ndGggb3IgYm91bmRzIGNhbGN1bGF0aW9ucy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowmm44p[1] Phase: Succeeded StartedAt: 2026-09-03 09:03:50 +0000 UTC FinishedAt: 2026-09-03 09:03:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmm44p[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-03 09:03:50 +0000 UTC FinishedAt: 2026-09-03 09:03:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmm44p[2] Phase: Succeeded StartedAt: 2026-09-03 09:03:50 +0000 UTC FinishedAt: 2026-09-03 12:42:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmm44p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfc_llcp_accept_unlink","nfc_llcp_accept_dequeue","nfc_llcp_local_put","llcp_sock_accept","llcp_sock_release","nfc_llcp_register_device"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"3f8fb361-e2bc-470c-bc0e-4883ece45c26","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-03 09:03:50 +0000 UTC FinishedAt: 2026-09-03 12:42:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfc_llcp_accept_unlink","nfc_llcp_accept_dequeue","nfc_llcp_local_put","llcp_sock_accept","llcp_sock_release","nfc_llcp_register_device"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"3f8fb361-e2bc-470c-bc0e-4883ece45c26","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowmm44p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfc_llcp_accept_unlink","nfc_llcp_accept_dequeue","nfc_llcp_local_put","llcp_sock_accept","llcp_sock_release","nfc_llcp_register_device"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"3f8fb361-e2bc-470c-bc0e-4883ece45c26","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-03 09:03:50 +0000 UTC FinishedAt: 2026-09-03 09:04:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmm44p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfc_llcp_accept_unlink","nfc_llcp_accept_dequeue","nfc_llcp_local_put","llcp_sock_accept","llcp_sock_release","nfc_llcp_register_device"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"3f8fb361-e2bc-470c-bc0e-4883ece45c26","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-03 09:03:50 +0000 UTC FinishedAt: 2026-09-03 09:03:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowmm44p/series-workflowmm44p-convert-artifact-4194886103/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmm44p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfc_llcp_accept_unlink","nfc_llcp_accept_dequeue","nfc_llcp_local_put","llcp_sock_accept","llcp_sock_release","nfc_llcp_register_device"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"3f8fb361-e2bc-470c-bc0e-4883ece45c26","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-03 09:04:00 +0000 UTC FinishedAt: 2026-09-03 09:20:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmm44p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfc_llcp_accept_unlink","nfc_llcp_accept_dequeue","nfc_llcp_local_put","llcp_sock_accept","llcp_sock_release","nfc_llcp_register_device"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"3f8fb361-e2bc-470c-bc0e-4883ece45c26","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-03 09:04:00 +0000 UTC FinishedAt: 2026-09-03 09:20:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*490e960a-50d1-44d6-a337-ef0b78b4c924,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowmm44p/series-workflowmm44p-convert-artifact-4194886103/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "9e0ca0d6-1938-49d2-9868-c2e5f9ac4fc2", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowmm44p/series-workflowmm44p-build-action-1080123949/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmm44p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfc_llcp_accept_unlink","nfc_llcp_accept_dequeue","nfc_llcp_local_put","llcp_sock_accept","llcp_sock_release","nfc_llcp_register_device"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"3f8fb361-e2bc-470c-bc0e-4883ece45c26","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-03 09:04:00 +0000 UTC FinishedAt: 2026-09-03 09:19:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*490e960a-50d1-44d6-a337-ef0b78b4c924,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowmm44p/series-workflowmm44p-convert-artifact-4194886103/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "9e0ca0d6-1938-49d2-9868-c2e5f9ac4fc2", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowmm44p/series-workflowmm44p-build-action-1080123949/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmm44p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfc_llcp_accept_unlink","nfc_llcp_accept_dequeue","nfc_llcp_local_put","llcp_sock_accept","llcp_sock_release","nfc_llcp_register_device"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"3f8fb361-e2bc-470c-bc0e-4883ece45c26","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-03 09:20:09 +0000 UTC FinishedAt: 2026-09-03 09:20:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmm44p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfc_llcp_accept_unlink","nfc_llcp_accept_dequeue","nfc_llcp_local_put","llcp_sock_accept","llcp_sock_release","nfc_llcp_register_device"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"3f8fb361-e2bc-470c-bc0e-4883ece45c26","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-03 09:20:09 +0000 UTC FinishedAt: 2026-09-03 09:20:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmm44p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfc_llcp_accept_unlink","nfc_llcp_accept_dequeue","nfc_llcp_local_put","llcp_sock_accept","llcp_sock_release","nfc_llcp_register_device"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"3f8fb361-e2bc-470c-bc0e-4883ece45c26","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-03 09:20:09 +0000 UTC FinishedAt: 2026-09-03 09:20:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmm44p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfc_llcp_accept_unlink","nfc_llcp_accept_dequeue","nfc_llcp_local_put","llcp_sock_accept","llcp_sock_release","nfc_llcp_register_device"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"3f8fb361-e2bc-470c-bc0e-4883ece45c26","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-03 09:20:09 +0000 UTC FinishedAt: 2026-09-03 09:20:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"3f8fb361-e2bc-470c-bc0e-4883ece45c26","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowmm44p/series-workflowmm44p-convert-artifact-1061352198/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmm44p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfc_llcp_accept_unlink","nfc_llcp_accept_dequeue","nfc_llcp_local_put","llcp_sock_accept","llcp_sock_release","nfc_llcp_register_device"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"3f8fb361-e2bc-470c-bc0e-4883ece45c26","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-03 09:20:19 +0000 UTC FinishedAt: 2026-09-03 09:22:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmm44p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfc_llcp_accept_unlink","nfc_llcp_accept_dequeue","nfc_llcp_local_put","llcp_sock_accept","llcp_sock_release","nfc_llcp_register_device"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"3f8fb361-e2bc-470c-bc0e-4883ece45c26","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-03 09:20:19 +0000 UTC FinishedAt: 2026-09-03 09:21:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*9e0ca0d6-1938-49d2-9868-c2e5f9ac4fc2,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowmm44p/series-workflowmm44p-build-action-1080123949/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },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-workflowmm44p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfc_llcp_accept_unlink","nfc_llcp_accept_dequeue","nfc_llcp_local_put","llcp_sock_accept","llcp_sock_release","nfc_llcp_register_device"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"3f8fb361-e2bc-470c-bc0e-4883ece45c26","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-03 09:22:07 +0000 UTC FinishedAt: 2026-09-03 09:22:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmm44p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfc_llcp_accept_unlink","nfc_llcp_accept_dequeue","nfc_llcp_local_put","llcp_sock_accept","llcp_sock_release","nfc_llcp_register_device"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"3f8fb361-e2bc-470c-bc0e-4883ece45c26","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-03 09:22:07 +0000 UTC FinishedAt: 2026-09-03 09:22:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmm44p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfc_llcp_accept_unlink","nfc_llcp_accept_dequeue","nfc_llcp_local_put","llcp_sock_accept","llcp_sock_release","nfc_llcp_register_device"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"3f8fb361-e2bc-470c-bc0e-4883ece45c26","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-03 09:22:07 +0000 UTC FinishedAt: 2026-09-03 09:38:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmm44p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfc_llcp_accept_unlink","nfc_llcp_accept_dequeue","nfc_llcp_local_put","llcp_sock_accept","llcp_sock_release","nfc_llcp_register_device"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"3f8fb361-e2bc-470c-bc0e-4883ece45c26","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-03 09:22:07 +0000 UTC FinishedAt: 2026-09-03 09:38:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*490e960a-50d1-44d6-a337-ef0b78b4c924,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowmm44p/series-workflowmm44p-convert-artifact-1061352198/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "69c084cb-20d4-4e59-93c0-168b0861d342", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowmm44p/series-workflowmm44p-build-action-4174530890/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmm44p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfc_llcp_accept_unlink","nfc_llcp_accept_dequeue","nfc_llcp_local_put","llcp_sock_accept","llcp_sock_release","nfc_llcp_register_device"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"3f8fb361-e2bc-470c-bc0e-4883ece45c26","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-03 09:22:07 +0000 UTC FinishedAt: 2026-09-03 09:38:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*490e960a-50d1-44d6-a337-ef0b78b4c924,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowmm44p/series-workflowmm44p-convert-artifact-1061352198/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "69c084cb-20d4-4e59-93c0-168b0861d342", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowmm44p/series-workflowmm44p-build-action-4174530890/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmm44p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfc_llcp_accept_unlink","nfc_llcp_accept_dequeue","nfc_llcp_local_put","llcp_sock_accept","llcp_sock_release","nfc_llcp_register_device"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"3f8fb361-e2bc-470c-bc0e-4883ece45c26","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-03 09:38:19 +0000 UTC FinishedAt: 2026-09-03 09:38:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmm44p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfc_llcp_accept_unlink","nfc_llcp_accept_dequeue","nfc_llcp_local_put","llcp_sock_accept","llcp_sock_release","nfc_llcp_register_device"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"3f8fb361-e2bc-470c-bc0e-4883ece45c26","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-03 09:38:19 +0000 UTC FinishedAt: 2026-09-03 09:38:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmm44p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfc_llcp_accept_unlink","nfc_llcp_accept_dequeue","nfc_llcp_local_put","llcp_sock_accept","llcp_sock_release","nfc_llcp_register_device"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"3f8fb361-e2bc-470c-bc0e-4883ece45c26","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-03 09:38:19 +0000 UTC FinishedAt: 2026-09-03 09:40:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmm44p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfc_llcp_accept_unlink","nfc_llcp_accept_dequeue","nfc_llcp_local_put","llcp_sock_accept","llcp_sock_release","nfc_llcp_register_device"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"3f8fb361-e2bc-470c-bc0e-4883ece45c26","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-03 09:38:19 +0000 UTC FinishedAt: 2026-09-03 09:40:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*69c084cb-20d4-4e59-93c0-168b0861d342,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowmm44p/series-workflowmm44p-build-action-4174530890/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },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-workflowmm44p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfc_llcp_accept_unlink","nfc_llcp_accept_dequeue","nfc_llcp_local_put","llcp_sock_accept","llcp_sock_release","nfc_llcp_register_device"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"3f8fb361-e2bc-470c-bc0e-4883ece45c26","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-03 09:40:40 +0000 UTC FinishedAt: 2026-09-03 12:42:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmm44p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfc_llcp_accept_unlink","nfc_llcp_accept_dequeue","nfc_llcp_local_put","llcp_sock_accept","llcp_sock_release","nfc_llcp_register_device"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"3f8fb361-e2bc-470c-bc0e-4883ece45c26","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-03 09:40:40 +0000 UTC FinishedAt: 2026-09-03 12:42:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfc_llcp_accept_unlink","nfc_llcp_accept_dequeue","nfc_llcp_local_put","llcp_sock_accept","llcp_sock_release","nfc_llcp_register_device"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*9e0ca0d6-1938-49d2-9868-c2e5f9ac4fc2,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*69c084cb-20d4-4e59-93c0-168b0861d342,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowmm44p/series-workflowmm44p-build-action-1080123949/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowmm44p/series-workflowmm44p-build-action-4174530890/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowmm44p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfc_llcp_accept_unlink","nfc_llcp_accept_dequeue","nfc_llcp_local_put","llcp_sock_accept","llcp_sock_release","nfc_llcp_register_device"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"3f8fb361-e2bc-470c-bc0e-4883ece45c26","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-03 09:40:40 +0000 UTC FinishedAt: 2026-09-03 09:40:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmm44p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfc_llcp_accept_unlink","nfc_llcp_accept_dequeue","nfc_llcp_local_put","llcp_sock_accept","llcp_sock_release","nfc_llcp_register_device"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"3f8fb361-e2bc-470c-bc0e-4883ece45c26","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-03 09:40:40 +0000 UTC FinishedAt: 2026-09-03 09:40:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfc_llcp_accept_unlink","nfc_llcp_accept_dequeue","nfc_llcp_local_put","llcp_sock_accept","llcp_sock_release","nfc_llcp_register_device"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowmm44p/series-workflowmm44p-convert-artifact-3173913035/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmm44p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfc_llcp_accept_unlink","nfc_llcp_accept_dequeue","nfc_llcp_local_put","llcp_sock_accept","llcp_sock_release","nfc_llcp_register_device"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"3f8fb361-e2bc-470c-bc0e-4883ece45c26","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-03 09:40:40 +0000 UTC FinishedAt: 2026-09-03 09:40:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmm44p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfc_llcp_accept_unlink","nfc_llcp_accept_dequeue","nfc_llcp_local_put","llcp_sock_accept","llcp_sock_release","nfc_llcp_register_device"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"3f8fb361-e2bc-470c-bc0e-4883ece45c26","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-03 09:40:40 +0000 UTC FinishedAt: 2026-09-03 09:40:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmm44p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfc_llcp_accept_unlink","nfc_llcp_accept_dequeue","nfc_llcp_local_put","llcp_sock_accept","llcp_sock_release","nfc_llcp_register_device"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"3f8fb361-e2bc-470c-bc0e-4883ece45c26","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-03 09:40:40 +0000 UTC FinishedAt: 2026-09-03 09:40:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmm44p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfc_llcp_accept_unlink","nfc_llcp_accept_dequeue","nfc_llcp_local_put","llcp_sock_accept","llcp_sock_release","nfc_llcp_register_device"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"3f8fb361-e2bc-470c-bc0e-4883ece45c26","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-03 09:40:50 +0000 UTC FinishedAt: 2026-09-03 12:42:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmm44p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nfc_llcp_accept_unlink","nfc_llcp_accept_dequeue","nfc_llcp_local_put","llcp_sock_accept","llcp_sock_release","nfc_llcp_register_device"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"32b6ef9a5d0eca44f9cd91f52f4faa89f145a0de","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC"],"series_id":"3f8fb361-e2bc-470c-bc0e-4883ece45c26","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-03 09:40:50 +0000 UTC FinishedAt: 2026-09-03 12:42:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*9e0ca0d6-1938-49d2-9868-c2e5f9ac4fc2,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*69c084cb-20d4-4e59-93c0-168b0861d342,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowmm44p/series-workflowmm44p-build-action-1080123949/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowmm44p/series-workflowmm44p-build-action-4174530890/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowmm44p/series-workflowmm44p-convert-artifact-3173913035/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}