Name: series-workflowsjsnr Phase: Running StartedAt: 2026-06-29 18:35:23 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsjsnr[0] Phase: Running StartedAt: 2026-06-29 18:35:23 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsjsnr[0].run-triage Phase: Running StartedAt: 2026-06-29 18:35:24 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsjsnr[0].run-triage(0) Phase: Running StartedAt: 2026-06-29 18:35:24 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "b85966adbf5de0668a815c6e3527f87e0c387fb4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ENIC", "PCI_IOV" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "b85966adbf5de0668a815c6e3527f87e0c387fb4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ENIC", "PCI_IOV" ], "series_id": "48a8f9e7-e69a-49a3-b2ab-adb47eaa4e7a" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "enic_admin_channel_open", "enic_admin_channel_close", "enic_admin_wq_cq_service", "enic_admin_rq_cq_service", "enic_mbox_send_msg", "enic_mbox_vf_capability_check", "enic_mbox_vf_register", "enic_mbox_vf_unregister", "enic_mbox_recv_handler", "enic_mbox_pf_process_msg", "enic_mbox_vf_process_msg" ], "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+CgkJCTx0ZD4yMDI2LzA2LzI5IDE4OjQyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VOSUMmIzM0OywKICAgICYjMzQ7UENJX0lPViYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2VuaWNfYWRtaW5fY2hhbm5lbF9vcGVuJiMzNDssCiAgICAmIzM0O2VuaWNfYWRtaW5fY2hhbm5lbF9jbG9zZSYjMzQ7LAogICAgJiMzNDtlbmljX2FkbWluX3dxX2NxX3NlcnZpY2UmIzM0OywKICAgICYjMzQ7ZW5pY19hZG1pbl9ycV9jcV9zZXJ2aWNlJiMzNDssCiAgICAmIzM0O2VuaWNfbWJveF9zZW5kX21zZyYjMzQ7LAogICAgJiMzNDtlbmljX21ib3hfdmZfY2FwYWJpbGl0eV9jaGVjayYjMzQ7LAogICAgJiMzNDtlbmljX21ib3hfdmZfcmVnaXN0ZXImIzM0OywKICAgICYjMzQ7ZW5pY19tYm94X3ZmX3VucmVnaXN0ZXImIzM0OywKICAgICYjMzQ7ZW5pY19tYm94X3JlY3ZfaGFuZGxlciYjMzQ7LAogICAgJiMzNDtlbmljX21ib3hfcGZfcHJvY2Vzc19tc2cmIzM0OywKICAgICYjMzQ7ZW5pY19tYm94X3ZmX3Byb2Nlc3NfbXNnJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgYWRtaW4gY2hhbm5lbCBhbmQgbWFpbGJveCBwcm90b2NvbCBmb3IgUEYtVkYgY29tbXVuaWNhdGlvbiBpbiB0aGUgQ2lzY28gVklDIEV0aGVybmV0IE5JQyBkcml2ZXIgKGVuaWMpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBkcml2ZXIgbG9naWMgYW5kIGNhbiBiZSB0ZXN0ZWQgdXNpbmcgc3l6a2FsbGVyJiMzOTtzIFBDSSBmdXp6aW5nIGNhcGFiaWxpdGllcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxODo0MjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDMxM2JkNTMxNzY0YTliZmE1MTRlYmM0Njg3MzllM2NkZWU5NjBlNmRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1biAyOSAxODo0MjowNiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9NYWtlZmlsZVxuaW5kZXggYTk2YjgzMzJlNmUyYTguLmUzOGFhZjM0YzE0ODM5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9NYWtlZmlsZVxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9NYWtlZmlsZVxuQEAgLTMsNSAmIzQzOzMsNiBAQCBvYmotJChDT05GSUdfRU5JQykgOj0gZW5pYy5vXG4gXG4gZW5pYy15IDo9IGVuaWNfbWFpbi5vIHZuaWNfY3EubyB2bmljX2ludHIubyB2bmljX3dxLm8gXFxcbiBcdGVuaWNfcmVzLm8gZW5pY19kZXYubyBlbmljX3BwLm8gdm5pY19kZXYubyB2bmljX3JxLm8gdm5pY192aWMubyBcXFxuLVx0ZW5pY19ldGh0b29sLm8gZW5pY19hcGkubyBlbmljX2Nsc2YubyBlbmljX3JxLm8gZW5pY193cS5vXG4mIzQzO1x0ZW5pY19ldGh0b29sLm8gZW5pY19hcGkubyBlbmljX2Nsc2YubyBlbmljX3JxLm8gZW5pY193cS5vIFxcXG4mIzQzO1x0ZW5pY19hZG1pbi5vIGVuaWNfbWJveC5vXG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWMuaFxuaW5kZXggMDg0NzI0MjBmM2ExZmQuLjYyYjg5NDE0ODlkNzczIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pYy5oXG5AQCAtMjU2LDEwICYjNDM7MjU2LDEwIEBAIHN0cnVjdCBlbmljIHtcbiBcdHN0cnVjdCBlbmljX3J4X2NvYWwgcnhfY29hbGVzY2Vfc2V0dGluZztcbiBcdHUzMiByeF9jb2FsZXNjZV91c2VjcztcbiBcdHUzMiB0eF9jb2FsZXNjZV91c2Vjcztcbi0jaWZkZWYgQ09ORklHX1BDSV9JT1ZcbiBcdHUxNiBudW1fdmZzO1xuLSNlbmRpZlxuIFx0ZW51bSBlbmljX3ZmX3R5cGUgdmZfdHlwZTtcbiYjNDM7XHRib29sIHZmX3JlZ2lzdGVyZWQ7XG4mIzQzO1x0dTMyIHBmX2NhcF92ZXJzaW9uO1xuIFx0dW5zaWduZWQgaW50IGVuYWJsZV9jb3VudDtcbiBcdHNwaW5sb2NrX3QgZW5pY19hcGlfbG9jaztcbiBcdGJvb2wgZW5pY19hcGlfYnVzeTtcbkBAIC0yOTIsMTAgJiM0MzsyOTIsNDUgQEAgc3RydWN0IGVuaWMge1xuIFxuIFx0LyogQWRtaW4gY2hhbm5lbCByZXNvdXJjZXMgZm9yIFNSLUlPViBNQk9YICovXG4gXHRib29sIGhhc19hZG1pbl9jaGFubmVsO1xuJiM0MztcdC8qIHRydWUgb25seSB3aGlsZSB0aGUgYWRtaW4gV1EvUlEvQ1EgYXJlIGFsbG9jYXRlZCBhbmQgZW5hYmxlZDsgZ2F0ZXNcbiYjNDM7XHQgKiBlbmljX2FkbWluX2NoYW5uZWxfY2xvc2UoKSBzbyBpdCBpcyBhIG5vLW9wIGFmdGVyIGEgZmFpbGVkIChyZSlvcGVuXG4mIzQzO1x0ICogbGVmdCB0aGUgcmVzb3VyY2VzIGZyZWVkLlxuJiM0MztcdCAqL1xuJiM0MztcdGJvb2wgYWRtaW5fY2hhbl91cDtcbiYjNDM7XHQvKiBzZXQgb24gc2VuZCB0aW1lb3V0OyBjbGVhcmVkIG9uIGNoYW5uZWwgcmUtb3BlbiAqL1xuJiM0MztcdGJvb2wgbWJveF9zZW5kX2Rpc2FibGVkO1xuIFx0c3RydWN0IHZuaWNfd3EgYWRtaW5fd3E7XG4gXHRzdHJ1Y3Qgdm5pY19ycSBhZG1pbl9ycTtcbiBcdHN0cnVjdCB2bmljX2NxIGFkbWluX2NxWzJdO1xuIFx0c3RydWN0IHZuaWNfaW50ciBhZG1pbl9pbnRyO1xuJiM0MztcdHN0cnVjdCB3b3JrX3N0cnVjdCBhZG1pbl9wb2xsX3dvcms7XG4mIzQzO1x0dW5zaWduZWQgaW50IGFkbWluX2ludHJfaW5kZXg7XG4mIzQzO1x0c3RydWN0IHdvcmtfc3RydWN0IGxpbmtfbm90aWZ5X3dvcms7XG4mIzQzO1x0c3RydWN0IHdvcmtfc3RydWN0IGFkbWluX21zZ193b3JrO1xuJiM0MztcdHNwaW5sb2NrX3QgYWRtaW5fbXNnX2xvY2s7XHQvKiBwcm90ZWN0cyBhZG1pbl9tc2dfbGlzdCAqL1xuJiM0MztcdHN0cnVjdCBsaXN0X2hlYWQgYWRtaW5fbXNnX2xpc3Q7XG4mIzQzO1x0dW5zaWduZWQgaW50IGFkbWluX21zZ19jb3VudDtcdC8qIGN1cnJlbnQgZGVwdGggb2YgYWRtaW5fbXNnX2xpc3QgKi9cbiYjNDM7XHR2b2lkICgqYWRtaW5fcnFfaGFuZGxlcikoc3RydWN0IGVuaWMgKmVuaWMsIHZvaWQgKmJ1ZixcbiYjNDM7XHRcdFx0XHQgdW5zaWduZWQgaW50IGxlbik7XG4mIzQzO1xuJiM0MztcdC8qIE1CT1ggcHJvdG9jb2wgc3RhdGUg4oCUIG1ib3hfbG9jayBzZXJpYWxpemVzIGFkbWluIFdRIHNlbmRzICovXG4mIzQzO1x0c3RydWN0IG11dGV4IG1ib3hfbG9jaztcbiYjNDM7XHR1NjQgbWJveF9tc2dfbnVtO1xuJiM0MztcdC8qIE1CT1ggcmVxdWVzdC1yZXBseSBzdGF0ZS4gIFdyaXR0ZW4gYnkgdGhlIHByb2Nlc3MtY29udGV4dCByZXF1ZXN0XG4mIzQzO1x0ICogaGVscGVycyAoY2FwYWJpbGl0eS9yZWdpc3Rlci91bnJlZ2lzdGVyKSBhbmQgcmVhZC9jbGVhcmVkIGJ5IHRoZVxuJiM0MztcdCAqIGFkbWluX21zZ193b3JrIHJlY2VpdmUgaGFuZGxlcnMuICBObyBleHBsaWNpdCBsb2NrIGlzIG5lZWRlZCBiZWNhdXNlXG4mIzQzO1x0ICogb25seSBvbmUgcmVxdWVzdCBpcyBpbiBmbGlnaHQgYXQgYSB0aW1lOiByZXF1ZXN0ZXJzIHJ1biB1bmRlciBSVE5MIG9yXG4mIzQzO1x0ICogc2luZ2xlLXRocmVhZGVkIHByb2JlL3JlbW92ZSwgc28gZWFjaCByZXF1ZXN0IGlzIHNlcmlhbGl6ZWQgYW5kIGl0c1xuJiM0MztcdCAqIHJlcGx5IGNvbXBsZXRlcyBtYm94X2NvbXAgYmVmb3JlIHRoZSBuZXh0IHJlcXVlc3QgaXMgaXNzdWVkLlxuJiM0MztcdCAqL1xuJiM0MztcdHN0cnVjdCBjb21wbGV0aW9uIG1ib3hfY29tcDtcbiYjNDM7XHR1OCBtYm94X2V4cGVjdGVkX3JlcGx5O1xuJiM0MztcdGJvb2wgbWJveF9pbml0aWFsaXplZDtcbiYjNDM7XG4mIzQzO1x0LyogUEY6IHBlci1WRiBNQk9YIHN0YXRlLCBhbGxvY2F0ZWQgd2hlbiBTUklPViBWMiBpcyBlbmFibGVkICovXG4mIzQzO1x0c3RydWN0IGVuaWNfdmZfc3RhdGUge1xuJiM0MztcdFx0Ym9vbCByZWdpc3RlcmVkO1xuJiM0MztcdH0gKnZmX3N0YXRlO1xuIH07XG4gXG4gc3RhdGljIGlubGluZSBzdHJ1Y3QgbmV0X2RldmljZSAqdm5pY19nZXRfbmV0ZGV2KHN0cnVjdCB2bmljX2RldiAqdmRldilcbkBAIC00MTcsNiAmIzQzOzQ1Miw3IEBAIHZvaWQgZW5pY19yZXNldF9hZGRyX2xpc3RzKHN0cnVjdCBlbmljICplbmljKTtcbiBpbnQgZW5pY19zcmlvdl9lbmFibGVkKHN0cnVjdCBlbmljICplbmljKTtcbiBpbnQgZW5pY19pc192YWxpZF92ZihzdHJ1Y3QgZW5pYyAqZW5pYywgaW50IHZmKTtcbiBpbnQgZW5pY19pc19keW5hbWljKHN0cnVjdCBlbmljICplbmljKTtcbiYjNDM7aW50IGVuaWNfaXNfc3Jpb3ZfdmZfdjIoc3RydWN0IGVuaWMgKmVuaWMpO1xuIHZvaWQgZW5pY19zZXRfZXRodG9vbF9vcHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7XG4gaW50IF9fZW5pY19zZXRfcnNza2V5KHN0cnVjdCBlbmljICplbmljKTtcbiB2b2lkIGVuaWNfZXh0X2NxKHN0cnVjdCBlbmljICplbmljKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfYWRtaW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19hZG1pbi5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjI0MjY0NGZhMmNiZjkwXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfYWRtaW4uY1xuQEAgLTAsMCAmIzQzOzEsNjI2IEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiYjNDM7Ly8gQ29weXJpZ2h0IDIwMjUgQ2lzY28gU3lzdGVtcywgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2tlcm5lbC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGRldmljZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2RtYS1tYXBwaW5nLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvaW50ZXJydXB0LmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3ZuaWNfZGV2LmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7dm5pY193cS5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3ZuaWNfcnEuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDt2bmljX2NxLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7dm5pY19pbnRyLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7dm5pY19yZXNvdXJjZS5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3ZuaWNfZGV2Y21kLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7ZW5pYy5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2VuaWNfYWRtaW4uaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtjcV9kZXNjLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7Y3FfZW5ldF9kZXNjLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7d3FfZW5ldF9kZXNjLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7cnFfZW5ldF9kZXNjLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7ZW5pY19tYm94LmhcJiMzNDtcbiYjNDM7XG4mIzQzOy8qIENsZWFuIHVwIGFueSBhZG1pbiBXUSBidWZmZXJzIHN0aWxsIGhlbGQgYnkgaGFyZHdhcmUgYXQgY2xvc2UgdGltZS5cbiYjNDM7ICogTm9ybWFsbHkgYnVmZmVycyBhcmUgZnJlZWQgaW5saW5lIGFmdGVyIHNlbmQgY29tcGxldGlvbiwgYnV0IGEgdGltZWQtb3V0XG4mIzQzOyAqIHNlbmQgaW50ZW50aW9uYWxseSBsZWF2ZXMgdGhlIGJ1ZmZlciBsaXZlIHVudGlsIHRoZSBxdWV1ZSBpcyBzdG9wcGVkLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgZW5pY19hZG1pbl93cV9idWZfY2xlYW4oc3RydWN0IHZuaWNfd3EgKndxLFxuJiM0MztcdFx0XHRcdCAgICBzdHJ1Y3Qgdm5pY193cV9idWYgKmJ1ZilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBlbmljICplbmljID0gdm5pY19kZXZfcHJpdih3cS1cdTAwM2V2ZGV2KTtcbiYjNDM7XG4mIzQzO1x0aWYgKGJ1Zi1cdTAwM2Vvc19idWYpIHtcbiYjNDM7XHRcdGRtYV91bm1hcF9zaW5nbGUoXHUwMDI2ZW5pYy1cdTAwM2VwZGV2LVx1MDAzZWRldiwgYnVmLVx1MDAzZWRtYV9hZGRyLFxuJiM0MztcdFx0XHRcdCBidWYtXHUwMDNlbGVuLCBETUFfVE9fREVWSUNFKTtcbiYjNDM7XHRcdGtmcmVlKGJ1Zi1cdTAwM2Vvc19idWYpO1xuJiM0MztcdFx0YnVmLVx1MDAzZW9zX2J1ZiA9IE5VTEw7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBlbmljX2FkbWluX3JxX2J1Zl9jbGVhbihzdHJ1Y3Qgdm5pY19ycSAqcnEsXG4mIzQzO1x0XHRcdFx0ICAgIHN0cnVjdCB2bmljX3JxX2J1ZiAqYnVmKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGVuaWMgKmVuaWMgPSB2bmljX2Rldl9wcml2KHJxLVx1MDAzZXZkZXYpO1xuJiM0MztcbiYjNDM7XHRpZiAoIWJ1Zi1cdTAwM2Vvc19idWYpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGRtYV91bm1hcF9zaW5nbGUoXHUwMDI2ZW5pYy1cdTAwM2VwZGV2LVx1MDAzZWRldiwgYnVmLVx1MDAzZWRtYV9hZGRyLCBidWYtXHUwMDNlbGVuLFxuJiM0MztcdFx0XHQgRE1BX0ZST01fREVWSUNFKTtcbiYjNDM7XHRrZnJlZShidWYtXHUwMDNlb3NfYnVmKTtcbiYjNDM7XHRidWYtXHUwMDNlb3NfYnVmID0gTlVMTDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBlbmljX2FkbWluX3JxX3Bvc3Rfb25lKHN0cnVjdCBlbmljICplbmljLCBnZnBfdCBnZnApXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgdm5pY19ycSAqcnEgPSBcdTAwMjZlbmljLVx1MDAzZWFkbWluX3JxO1xuJiM0MztcdHN0cnVjdCBycV9lbmV0X2Rlc2MgKmRlc2M7XG4mIzQzO1x0ZG1hX2FkZHJfdCBkbWFfYWRkcjtcbiYjNDM7XHR2b2lkICpidWY7XG4mIzQzO1xuJiM0MztcdGJ1ZiA9IGttYWxsb2MoRU5JQ19BRE1JTl9CVUZfU0laRSwgZ2ZwKTtcbiYjNDM7XHRpZiAoIWJ1ZilcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiYjNDM7XHRkbWFfYWRkciA9IGRtYV9tYXBfc2luZ2xlKFx1MDAyNmVuaWMtXHUwMDNlcGRldi1cdTAwM2VkZXYsIGJ1ZiwgRU5JQ19BRE1JTl9CVUZfU0laRSxcbiYjNDM7XHRcdFx0XHQgIERNQV9GUk9NX0RFVklDRSk7XG4mIzQzO1x0aWYgKGRtYV9tYXBwaW5nX2Vycm9yKFx1MDAyNmVuaWMtXHUwMDNlcGRldi1cdTAwM2VkZXYsIGRtYV9hZGRyKSkge1xuJiM0MztcdFx0a2ZyZWUoYnVmKTtcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZGVzYyA9IHZuaWNfcnFfbmV4dF9kZXNjKHJxKTtcbiYjNDM7XHRycV9lbmV0X2Rlc2NfZW5jKGRlc2MsICh1NjQpZG1hX2FkZHIgfCBWTklDX1BBRERSX1RBUkdFVCxcbiYjNDM7XHRcdFx0IFJRX0VORVRfVFlQRV9PTkxZX1NPUCwgRU5JQ19BRE1JTl9CVUZfU0laRSk7XG4mIzQzO1x0dm5pY19ycV9wb3N0KHJxLCBidWYsIDAsIGRtYV9hZGRyLCBFTklDX0FETUlOX0JVRl9TSVpFLCAwKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgZW5pY19hZG1pbl9ycV9maWxsKHN0cnVjdCBlbmljICplbmljLCBnZnBfdCBnZnApXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgdm5pY19ycSAqcnEgPSBcdTAwMjZlbmljLVx1MDAzZWFkbWluX3JxO1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdHdoaWxlICh2bmljX3JxX2Rlc2NfYXZhaWwocnEpIFx1MDAzZSAwKSB7XG4mIzQzO1x0XHRlcnIgPSBlbmljX2FkbWluX3JxX3Bvc3Rfb25lKGVuaWMsIGdmcCk7XG4mIzQzO1x0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRyZXR1cm4gZXJyO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGVuaWNfYWRtaW5fcnFfZHJhaW4oc3RydWN0IGVuaWMgKmVuaWMpXG4mIzQzO3tcbiYjNDM7XHR2bmljX3JxX2NsZWFuKFx1MDAyNmVuaWMtXHUwMDNlYWRtaW5fcnEsIGVuaWNfYWRtaW5fcnFfYnVmX2NsZWFuKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHVuc2lnbmVkIGludCBlbmljX2FkbWluX2NxX2NvbG9yKHZvaWQgKmNxX2Rlc2MsIHVuc2lnbmVkIGludCBkZXNjX3NpemUpXG4mIzQzO3tcbiYjNDM7XHR1OCB0eXBlX2NvbG9yID0gKigodTggKiljcV9kZXNjICYjNDM7IGRlc2Nfc2l6ZSAtIDEpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gKHR5cGVfY29sb3IgXHUwMDNlXHUwMDNlIENRX0RFU0NfQ09MT1JfU0hJRlQpIFx1MDAyNiBDUV9ERVNDX0NPTE9SX01BU0s7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3Vuc2lnbmVkIGludCBlbmljX2FkbWluX3dxX2NxX3NlcnZpY2Uoc3RydWN0IGVuaWMgKmVuaWMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgdm5pY19jcSAqY3EgPSBcdTAwMjZlbmljLVx1MDAzZWFkbWluX2NxWzBdO1xuJiM0MztcdHVuc2lnbmVkIGludCB3b3JrID0gMDtcbiYjNDM7XHR2b2lkICpkZXNjO1xuJiM0MztcbiYjNDM7XHRkZXNjID0gdm5pY19jcV90b19jbGVhbihjcSk7XG4mIzQzO1x0d2hpbGUgKGVuaWNfYWRtaW5fY3FfY29sb3IoZGVzYywgY3EtXHUwMDNlcmluZy5kZXNjX3NpemUpICE9XG4mIzQzO1x0ICAgICAgIGNxLVx1MDAzZWxhc3RfY29sb3IpIHtcbiYjNDM7XHRcdHZuaWNfY3FfaW5jX3RvX2NsZWFuKGNxKTtcbiYjNDM7XHRcdHdvcmsmIzQzOyYjNDM7O1xuJiM0MztcdFx0ZGVzYyA9IHZuaWNfY3FfdG9fY2xlYW4oY3EpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHdvcms7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIFVwcGVyIGJvdW5kIG9uIHBlbmRpbmcgYWRtaW4gbWVzc2FnZXMuICBBIGJ1Z2d5IG9yIGhvc3RpbGUgVkYgY291bGQgZmxvb2RcbiYjNDM7ICogdGhlIFBGIGFkbWluIGNoYW5uZWwgZmFzdGVyIHRoYW4gYWRtaW5fbXNnX3dvcmsgZHJhaW5zIGl0OyBjYXAgdGhlIGJhY2tsb2dcbiYjNDM7ICogc28gYSBndWVzdCBjYW5ub3QgZHJpdmUgdGhlIGhvc3Qgb3V0IG9mIG1lbW9yeS5cbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgRU5JQ19BRE1JTl9NU0dfTUFYXHQyNTZcbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGVuaWNfYWRtaW5fbXNnX2VucXVldWUoc3RydWN0IGVuaWMgKmVuaWMsIHZvaWQgKmJ1ZixcbiYjNDM7XHRcdFx0XHQgICB1bnNpZ25lZCBpbnQgbGVuKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGVuaWNfYWRtaW5fbXNnICptc2c7XG4mIzQzO1xuJiM0MztcdG1zZyA9IGttYWxsb2Moc3RydWN0X3NpemUobXNnLCBkYXRhLCBsZW4pLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRpZiAoIW1zZylcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0bXNnLVx1MDAzZWxlbiA9IGxlbjtcbiYjNDM7XHRtZW1jcHkobXNnLVx1MDAzZWRhdGEsIGJ1ZiwgbGVuKTtcbiYjNDM7XG4mIzQzO1x0c3Bpbl9sb2NrKFx1MDAyNmVuaWMtXHUwMDNlYWRtaW5fbXNnX2xvY2spO1xuJiM0MztcdGlmIChlbmljLVx1MDAzZWFkbWluX21zZ19jb3VudCBcdTAwM2U9IEVOSUNfQURNSU5fTVNHX01BWCkge1xuJiM0MztcdFx0c3Bpbl91bmxvY2soXHUwMDI2ZW5pYy1cdTAwM2VhZG1pbl9tc2dfbG9jayk7XG4mIzQzO1x0XHRrZnJlZShtc2cpO1xuJiM0MztcdFx0aWYgKG5ldF9yYXRlbGltaXQoKSlcbiYjNDM7XHRcdFx0bmV0ZGV2X3dhcm4oZW5pYy1cdTAwM2VuZXRkZXYsXG4mIzQzO1x0XHRcdFx0ICAgIFwmIzM0O2FkbWluIG1zZyBiYWNrbG9nIGZ1bGwgKCV1KTsgZHJvcHBpbmdcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgIEVOSUNfQURNSU5fTVNHX01BWCk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcdGxpc3RfYWRkX3RhaWwoXHUwMDI2bXNnLVx1MDAzZWxpc3QsIFx1MDAyNmVuaWMtXHUwMDNlYWRtaW5fbXNnX2xpc3QpO1xuJiM0MztcdGVuaWMtXHUwMDNlYWRtaW5fbXNnX2NvdW50JiM0MzsmIzQzOztcbiYjNDM7XHRzcGluX3VubG9jayhcdTAwMjZlbmljLVx1MDAzZWFkbWluX21zZ19sb2NrKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dW5zaWduZWQgaW50IGVuaWNfYWRtaW5fcnFfY3Ffc2VydmljZShzdHJ1Y3QgZW5pYyAqZW5pYylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB2bmljX2NxICpjcSA9IFx1MDAyNmVuaWMtXHUwMDNlYWRtaW5fY3FbMV07XG4mIzQzO1x0c3RydWN0IHZuaWNfcnEgKnJxID0gXHUwMDI2ZW5pYy1cdTAwM2VhZG1pbl9ycTtcbiYjNDM7XHRzdHJ1Y3QgY3FfZW5ldF9ycV9kZXNjICpycV9kZXNjO1xuJiM0MztcdHN0cnVjdCB2bmljX3JxX2J1ZiAqYnVmO1xuJiM0MztcdHUxNiBid2YsIGJ5dGVzX3dyaXR0ZW47XG4mIzQzO1x0dW5zaWduZWQgaW50IHdvcmsgPSAwO1xuJiM0MztcdHZvaWQgKmRlc2M7XG4mIzQzO1xuJiM0MztcdC8qIFRoZSBhZG1pbiBSUSBhbmQgaXRzIENRIGZvcm0gYSBzaW5nbGUgaW4tb3JkZXIgY2hhbm5lbDogZmlybXdhcmVcbiYjNDM7XHQgKiBwb3N0cyBleGFjdGx5IG9uZSBDUUUgcGVyIGNvbnN1bWVkIFJRIGRlc2NyaXB0b3IsIGluIHN1Ym1pc3Npb25cbiYjNDM7XHQgKiBvcmRlci4gIEVhY2ggQ1FFIHRoZXJlZm9yZSBwYWlycyB3aXRoIHJxLVx1MDAzZXRvX2NsZWFuIGJlbG93IHdpdGhvdXQgYVxuJiM0MztcdCAqIGNvbXBsZXRlZF9pbmRleCBjcm9zcy1jaGVjaywgbWlycm9yaW5nIHRoZSBpbi1vcmRlciBhc3N1bXB0aW9uIG9mXG4mIzQzO1x0ICogdGhlIG1haW4gZW5pYyBSWCBwYXRoLlxuJiM0MztcdCAqL1xuJiM0MztcdGRlc2MgPSB2bmljX2NxX3RvX2NsZWFuKGNxKTtcbiYjNDM7XHR3aGlsZSAoZW5pY19hZG1pbl9jcV9jb2xvcihkZXNjLCBjcS1cdTAwM2VyaW5nLmRlc2Nfc2l6ZSkgIT1cbiYjNDM7XHQgICAgICAgY3EtXHUwMDNlbGFzdF9jb2xvcikge1xuJiM0MztcdFx0LyogRW5zdXJlIERNQSBkZXNjcmlwdG9yIGZpZWxkcyBhcmUgcmVhZCBhZnRlclxuJiM0MztcdFx0ICogdGhlIGNvbG9yL3ZhbGlkIGNoZWNrLiAgZG1hX3JtYigpIGlzIHRoZVxuJiM0MztcdFx0ICogY29ycmVjdCBiYXJyaWVyIGZvciBETUEtd3JpdHRlbiBkZXNjcmlwdG9ycy5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0ZG1hX3JtYigpO1xuJiM0MztcdFx0YnVmID0gcnEtXHUwMDNldG9fY2xlYW47XG4mIzQzO1xuJiM0MztcdFx0LyogRGVjb2RlIHRoZSBhY3R1YWwgbnVtYmVyIG9mIGJ5dGVzIGhhcmR3YXJlIHdyb3RlIGludG9cbiYjNDM7XHRcdCAqIHRoZSBSWCBidWZmZXIuICBidWYtXHUwMDNlbGVuIGlzIHRoZSBzdGF0aWMgYWxsb2NhdGlvbiBzaXplXG4mIzQzO1x0XHQgKiAoRU5JQ19BRE1JTl9CVUZfU0laRSkgYW5kIHdvdWxkIGV4cG9zZSB1bmluaXRpYWxpc2VkXG4mIzQzO1x0XHQgKiBoZWFwIG1lbW9yeSBiZXlvbmQgdGhlIHJlYWwgcGF5bG9hZC4gIGJ5dGVzX3dyaXR0ZW5fZmxhZ3NcbiYjNDM7XHRcdCAqIGlzIGF0IHRoZSBzYW1lIG9mZnNldCBpbiBldmVyeSBjcV9lbmV0X3JxX2Rlc2NbXzMyfF82NF1cbiYjNDM7XHRcdCAqIHZhcmlhbnQuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHJxX2Rlc2MgPSBkZXNjO1xuJiM0MztcdFx0YndmID0gbGUxNl90b19jcHUocnFfZGVzYy1cdTAwM2VieXRlc193cml0dGVuX2ZsYWdzKTtcbiYjNDM7XHRcdGJ5dGVzX3dyaXR0ZW4gPSBid2YgXHUwMDI2IENRX0VORVRfUlFfREVTQ19CWVRFU19XUklUVEVOX01BU0s7XG4mIzQzO1x0XHRpZiAoYnl0ZXNfd3JpdHRlbiBcdTAwM2UgYnVmLVx1MDAzZWxlbilcbiYjNDM7XHRcdFx0Z290byBuZXh0X2Rlc2M7XG4mIzQzO1xuJiM0MztcdFx0ZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoXHUwMDI2ZW5pYy1cdTAwM2VwZGV2LVx1MDAzZWRldixcbiYjNDM7XHRcdFx0XHRcdGJ1Zi1cdTAwM2VkbWFfYWRkciwgYnVmLVx1MDAzZWxlbixcbiYjNDM7XHRcdFx0XHRcdERNQV9GUk9NX0RFVklDRSk7XG4mIzQzO1xuJiM0MztcdFx0LyogRHJvcCBvbiBoYXJkd2FyZSBlcnJvciBpbmRpY2F0aW9ucy4gIEFkbWluIG1lc3NhZ2VzXG4mIzQzO1x0XHQgKiBhcmUgaW50ZXJuYWwgdG8gdGhlIFZJQywgbm90IHJlY2VpdmVkIG92ZXIgdGhlIHdpcmUuXG4mIzQzO1x0XHQgKiBGaXJtd2FyZSBzZXRzIFRSVU5DQVRFRCB3aGVuIHRoZSBtZXNzYWdlIGRvZXMgbm90IGZpdFxuJiM0MztcdFx0ICogaW4gdGhlIHBvc3RlZCBidWZmZXIsIGFuZCBGQ1NfT0sgaXMgYWx3YXlzIHNldCBvblxuJiM0MztcdFx0ICogaGVhbHRoeSBhZG1pbiBjb21wbGV0aW9ucy5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKGJ3ZiBcdTAwMjYgQ1FfRU5FVF9SUV9ERVNDX0ZMQUdTX1RSVU5DQVRFRCkge1xuJiM0MztcdFx0XHRuZXRkZXZfd2Fybl9vbmNlKGVuaWMtXHUwMDNlbmV0ZGV2LFxuJiM0MztcdFx0XHRcdFx0IFwmIzM0O2FkbWluIFJROiB0cnVuY2F0ZWQgbWVzc2FnZSBkcm9wcGVkXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0Z290byBuZXh0X2Rlc2M7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRpZiAoIShycV9kZXNjLVx1MDAzZWZsYWdzIFx1MDAyNiBDUV9FTkVUX1JRX0RFU0NfRkxBR1NfRkNTX09LKSkge1xuJiM0MztcdFx0XHRuZXRkZXZfd2Fybl9vbmNlKGVuaWMtXHUwMDNlbmV0ZGV2LFxuJiM0MztcdFx0XHRcdFx0IFwmIzM0O2FkbWluIFJROiBiYWQgRkNTLCBkcm9wcGluZyBtZXNzYWdlXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0Z290byBuZXh0X2Rlc2M7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0aWYgKGVuaWMtXHUwMDNlYWRtaW5fcnFfaGFuZGxlcikge1xuJiM0MztcdFx0XHR1MTYgc2VuZGVyX3ZsYW47XG4mIzQzO1xuJiM0MztcdFx0XHQvKiBGaXJtd2FyZSBzZXRzIHRoZSBDUSBWTEFOIGZpZWxkIHRvIGlkZW50aWZ5IHRoZVxuJiM0MztcdFx0XHQgKiBzZW5kZXI6IDAgPSBQRiwgMS1iYXNlZCA9IFZGIGluZGV4LiAgT3ZlcndyaXRlXG4mIzQzO1x0XHRcdCAqIHRoZSB1bnRydXN0ZWQgc3JjX3ZuaWNfaWQgaW4gdGhlIE1CT1ggaGVhZGVyIHdpdGhcbiYjNDM7XHRcdFx0ICogdGhlIGhhcmR3YXJlLXZlcmlmaWVkIHZhbHVlLlxuJiM0MztcdFx0XHQgKi9cbiYjNDM7XHRcdFx0c2VuZGVyX3ZsYW4gPSBsZTE2X3RvX2NwdShycV9kZXNjLVx1MDAzZXZsYW4pO1xuJiM0MztcdFx0XHRpZiAoYnl0ZXNfd3JpdHRlbiBcdTAwM2U9IHNpemVvZihzdHJ1Y3QgZW5pY19tYm94X2hkcikpIHtcbiYjNDM7XHRcdFx0XHRzdHJ1Y3QgZW5pY19tYm94X2hkciAqaGRyID0gYnVmLVx1MDAzZW9zX2J1ZjtcbiYjNDM7XG4mIzQzO1x0XHRcdFx0aGRyLVx1MDAzZXNyY192bmljX2lkID0gKHNlbmRlcl92bGFuID09IDApID9cbiYjNDM7XHRcdFx0XHRcdGNwdV90b19sZTE2KEVOSUNfTUJPWF9EU1RfUEYpIDpcbiYjNDM7XHRcdFx0XHRcdGNwdV90b19sZTE2KHNlbmRlcl92bGFuIC0gMSk7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRcdGVuaWNfYWRtaW5fbXNnX2VucXVldWUoZW5pYywgYnVmLVx1MDAzZW9zX2J1ZixcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBieXRlc193cml0dGVuKTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO25leHRfZGVzYzpcbiYjNDM7XHRcdGVuaWNfYWRtaW5fcnFfYnVmX2NsZWFuKHJxLCBycS1cdTAwM2V0b19jbGVhbik7XG4mIzQzO1x0XHRycS1cdTAwM2V0b19jbGVhbiA9IHJxLVx1MDAzZXRvX2NsZWFuLVx1MDAzZW5leHQ7XG4mIzQzO1x0XHRycS1cdTAwM2VyaW5nLmRlc2NfYXZhaWwmIzQzOyYjNDM7O1xuJiM0MztcbiYjNDM7XHRcdHZuaWNfY3FfaW5jX3RvX2NsZWFuKGNxKTtcbiYjNDM7XHRcdHdvcmsmIzQzOyYjNDM7O1xuJiM0MztcdFx0ZGVzYyA9IHZuaWNfY3FfdG9fY2xlYW4oY3EpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKGVuaWNfYWRtaW5fcnFfZmlsbChlbmljLCBHRlBfS0VSTkVMKSBcdTAwMjZcdTAwMjYgbmV0X3JhdGVsaW1pdCgpKVxuJiM0MztcdFx0bmV0ZGV2X3dhcm4oZW5pYy1cdTAwM2VuZXRkZXYsXG4mIzQzO1x0XHRcdCAgICBcJiMzNDthZG1pbiBSUSByZWZpbGwgZmFpbGVkXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHdvcms7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpcnFyZXR1cm5fdCBlbmljX2FkbWluX2lzcl9tc2l4KGludCBpcnEsIHZvaWQgKmRhdGEpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZW5pYyAqZW5pYyA9IGRhdGE7XG4mIzQzO1xuJiM0MztcdHNjaGVkdWxlX3dvcmsoXHUwMDI2ZW5pYy1cdTAwM2VhZG1pbl9wb2xsX3dvcmspO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gSVJRX0hBTkRMRUQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGVuaWNfYWRtaW5fbXNnX3dvcmtfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZW5pYyAqZW5pYyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZW5pYywgYWRtaW5fbXNnX3dvcmspO1xuJiM0MztcdHN0cnVjdCBlbmljX2FkbWluX21zZyAqbXNnLCAqdG1wO1xuJiM0MztcdExJU1RfSEVBRChsb2NhbF9saXN0KTtcbiYjNDM7XG4mIzQzO1x0c3Bpbl9sb2NrX2JoKFx1MDAyNmVuaWMtXHUwMDNlYWRtaW5fbXNnX2xvY2spO1xuJiM0MztcdGxpc3Rfc3BsaWNlX2luaXQoXHUwMDI2ZW5pYy1cdTAwM2VhZG1pbl9tc2dfbGlzdCwgXHUwMDI2bG9jYWxfbGlzdCk7XG4mIzQzO1x0ZW5pYy1cdTAwM2VhZG1pbl9tc2dfY291bnQgPSAwO1xuJiM0MztcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmVuaWMtXHUwMDNlYWRtaW5fbXNnX2xvY2spO1xuJiM0MztcbiYjNDM7XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobXNnLCB0bXAsIFx1MDAyNmxvY2FsX2xpc3QsIGxpc3QpIHtcbiYjNDM7XHRcdGlmIChlbmljLVx1MDAzZWFkbWluX3JxX2hhbmRsZXIpXG4mIzQzO1x0XHRcdGVuaWMtXHUwMDNlYWRtaW5fcnFfaGFuZGxlcihlbmljLCBtc2ctXHUwMDNlZGF0YSwgbXNnLVx1MDAzZWxlbik7XG4mIzQzO1x0XHRsaXN0X2RlbChcdTAwMjZtc2ctXHUwMDNlbGlzdCk7XG4mIzQzO1x0XHRrZnJlZShtc2cpO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgZW5pY19hZG1pbl9wb2xsX3dvcmtfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZW5pYyAqZW5pYyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZW5pYywgYWRtaW5fcG9sbF93b3JrKTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgY3JlZGl0cztcbiYjNDM7XHR1bnNpZ25lZCBpbnQgcnFfd29yaztcbiYjNDM7XG4mIzQzO1x0Y3JlZGl0cyA9IHZuaWNfaW50cl9jcmVkaXRzKFx1MDAyNmVuaWMtXHUwMDNlYWRtaW5faW50cik7XG4mIzQzO1xuJiM0MztcdHJxX3dvcmsgPSBlbmljX2FkbWluX3JxX2NxX3NlcnZpY2UoZW5pYyk7XG4mIzQzO1xuJiM0MztcdGlmIChycV93b3JrIFx1MDAzZSAwKVxuJiM0MztcdFx0c2NoZWR1bGVfd29yayhcdTAwMjZlbmljLVx1MDAzZWFkbWluX21zZ193b3JrKTtcbiYjNDM7XG4mIzQzO1x0dm5pY19pbnRyX3JldHVybl9jcmVkaXRzKFx1MDAyNmVuaWMtXHUwMDNlYWRtaW5faW50cixcbiYjNDM7XHRcdFx0XHQgY3JlZGl0cyA/OiAxLFxuJiM0MztcdFx0XHRcdCAxIC8qIHVubWFzayAqLywgMCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgZW5pY19hZG1pbl9zZXR1cF9pbnRyKHN0cnVjdCBlbmljICplbmljKVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgaW50IGludHJfaW5kZXggPSBlbmljLVx1MDAzZWludHJfY291bnQ7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0aWYgKHZuaWNfZGV2X2dldF9pbnRyX21vZGUoZW5pYy1cdTAwM2V2ZGV2KSAhPSBWTklDX0RFVl9JTlRSX01PREVfTVNJWCB8fFxuJiM0MztcdCAgICBpbnRyX2luZGV4IFx1MDAzZT0gZW5pYy1cdTAwM2VpbnRyX2F2YWlsKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9ERVY7XG4mIzQzO1xuJiM0MztcdC8qIFRoZSBhZG1pbiBJTlRSIHVzZXMgYSBzbG90IGluIHRoZSBzYW1lIFJFU19UWVBFX0lOVFJfQ1RSTFxuJiM0MztcdCAqIHN0cmlkZWQgYXJyYXkgb2YgcGVyLXZlY3RvciBjb250cm9sIGJsb2NrcyAobWFzaywgY29hbGVzY2luZ1xuJiM0MztcdCAqIHRpbWVyLCBjcmVkaXQgcmV0dXJuKSB0aGF0IHRoZSBkYXRhLXBhdGggSVJRcyBvY2N1cHkgaW4gQkFSMC5cbiYjNDM7XHQgKiB2bmljX2ludHJfYWxsb2MoKSBkZWZhdWx0cyB0byBSRVNfVFlQRV9JTlRSX0NUUkwsIHdoaWNoIGlzIHdoYXRcbiYjNDM7XHQgKiB3ZSB3YW50IGhlcmUuXG4mIzQzO1x0ICovXG4mIzQzO1x0ZXJyID0gdm5pY19pbnRyX2FsbG9jKGVuaWMtXHUwMDNldmRldiwgXHUwMDI2ZW5pYy1cdTAwM2VhZG1pbl9pbnRyLCBpbnRyX2luZGV4KTtcbiYjNDM7XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRuZXRkZXZfd2FybihlbmljLVx1MDAzZW5ldGRldixcbiYjNDM7XHRcdFx0ICAgIFwmIzM0O0ZhaWxlZCB0byBhbGxvYyBhZG1pbiBpbnRyIGF0IGluZGV4ICV1OiAlZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgIGludHJfaW5kZXgsIGVycik7XG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZW5pYy1cdTAwM2VhZG1pbl9pbnRyX2luZGV4ID0gaW50cl9pbmRleDtcbiYjNDM7XG4mIzQzO1x0LyogQSBWMiBWRiBvcGVucyB0aGUgYWRtaW4gY2hhbm5lbCBkdXJpbmcgcHJvYmUsIGJlZm9yZVxuJiM0MztcdCAqIHJlZ2lzdGVyX25ldGRldigpIHJlc29sdmVzIHRoZSBcJiMzNDtldGglZFwmIzM0OyBuYW1lIHRlbXBsYXRlLCBzbyB1c2luZ1xuJiM0MztcdCAqIG5ldGRldi1cdTAwM2VuYW1lIGhlcmUgd291bGQgcmVnaXN0ZXIgdGhlIGxpdGVyYWwgXCYjMzQ7ZXRoJWQtYWRtaW5cJiMzNDsgaW5cbiYjNDM7XHQgKiAvcHJvYy9pbnRlcnJ1cHRzLiAgVXNlIHRoZSBhbHJlYWR5LXN0YWJsZSBQQ0kgZGV2aWNlIG5hbWUgaW5zdGVhZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRzbnByaW50ZihlbmljLVx1MDAzZW1zaXhbaW50cl9pbmRleF0uZGV2bmFtZSxcbiYjNDM7XHRcdCBzaXplb2YoZW5pYy1cdTAwM2Vtc2l4W2ludHJfaW5kZXhdLmRldm5hbWUpLFxuJiM0MztcdFx0IFwmIzM0OyVzLWFkbWluXCYjMzQ7LCBwY2lfbmFtZShlbmljLVx1MDAzZXBkZXYpKTtcbiYjNDM7XHRlbmljLVx1MDAzZW1zaXhbaW50cl9pbmRleF0uaXNyID0gZW5pY19hZG1pbl9pc3JfbXNpeDtcbiYjNDM7XHRlbmljLVx1MDAzZW1zaXhbaW50cl9pbmRleF0uZGV2aWQgPSBlbmljO1xuJiM0MztcbiYjNDM7XHRlcnIgPSByZXF1ZXN0X2lycShlbmljLVx1MDAzZW1zaXhfZW50cnlbaW50cl9pbmRleF0udmVjdG9yLFxuJiM0MztcdFx0XHQgIGVuaWMtXHUwMDNlbXNpeFtpbnRyX2luZGV4XS5pc3IsIDAsXG4mIzQzO1x0XHRcdCAgZW5pYy1cdTAwM2Vtc2l4W2ludHJfaW5kZXhdLmRldm5hbWUsXG4mIzQzO1x0XHRcdCAgZW5pYy1cdTAwM2Vtc2l4W2ludHJfaW5kZXhdLmRldmlkKTtcbiYjNDM7XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRuZXRkZXZfd2FybihlbmljLVx1MDAzZW5ldGRldixcbiYjNDM7XHRcdFx0ICAgIFwmIzM0O0ZhaWxlZCB0byByZXF1ZXN0IGFkbWluIE1TSS1YIGlycTogJWRcXG5cJiMzNDssIGVycik7XG4mIzQzO1x0XHR2bmljX2ludHJfZnJlZShcdTAwMjZlbmljLVx1MDAzZWFkbWluX2ludHIpO1xuJiM0MztcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGVuaWMtXHUwMDNlbXNpeFtpbnRyX2luZGV4XS5yZXF1ZXN0ZWQgPSAxO1xuJiM0MztcbiYjNDM7XHRuZXRkZXZfZGJnKGVuaWMtXHUwMDNlbmV0ZGV2LFxuJiM0MztcdFx0ICAgXCYjMzQ7YWRtaW4gY2hhbm5lbCB1c2luZyBNU0ktWCBpbnRlcnJ1cHQgKGluZGV4ICV1KVxcblwmIzM0OyxcbiYjNDM7XHRcdCAgIGludHJfaW5kZXgpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgZW5pY19hZG1pbl90ZWFyZG93bl9pbnRyKHN0cnVjdCBlbmljICplbmljKVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgaW50IGludHJfaW5kZXggPSBlbmljLVx1MDAzZWFkbWluX2ludHJfaW5kZXg7XG4mIzQzO1xuJiM0MztcdGZyZWVfaXJxKGVuaWMtXHUwMDNlbXNpeF9lbnRyeVtpbnRyX2luZGV4XS52ZWN0b3IsXG4mIzQzO1x0XHQgZW5pYy1cdTAwM2Vtc2l4W2ludHJfaW5kZXhdLmRldmlkKTtcbiYjNDM7XHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNmVuaWMtXHUwMDNlYWRtaW5fcG9sbF93b3JrKTtcbiYjNDM7XHRlbmljLVx1MDAzZW1zaXhbaW50cl9pbmRleF0ucmVxdWVzdGVkID0gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBlbmljX2FkbWluX3FwX3R5cGVfc2V0KHN0cnVjdCBlbmljICplbmljLCB1MzIgZW5hYmxlKVxuJiM0Mzt7XG4mIzQzO1x0dTY0IGEwID0gUVBfVFlQRV9BRE1JTiwgYTEgPSBlbmFibGU7XG4mIzQzO1x0aW50IHdhaXQgPSAxMDAwO1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdHNwaW5fbG9ja19iaChcdTAwMjZlbmljLVx1MDAzZWRldmNtZF9sb2NrKTtcbiYjNDM7XHRlcnIgPSB2bmljX2Rldl9jbWQoZW5pYy1cdTAwM2V2ZGV2LCBDTURfUVBfVFlQRV9TRVQsIFx1MDAyNmEwLCBcdTAwMjZhMSwgd2FpdCk7XG4mIzQzO1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2ZW5pYy1cdTAwM2VkZXZjbWRfbG9jayk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBlcnI7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgZW5pY19hZG1pbl9hbGxvY19yZXNvdXJjZXMoc3RydWN0IGVuaWMgKmVuaWMpXG4mIzQzO3tcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHRlcnIgPSB2bmljX3dxX2FsbG9jX3dpdGhfdHlwZShlbmljLVx1MDAzZXZkZXYsIFx1MDAyNmVuaWMtXHUwMDNlYWRtaW5fd3EsIDAsXG4mIzQzO1x0XHRcdFx0ICAgICAgRU5JQ19BRE1JTl9ERVNDX0NPVU5ULFxuJiM0MztcdFx0XHRcdCAgICAgIHNpemVvZihzdHJ1Y3Qgd3FfZW5ldF9kZXNjKSxcbiYjNDM7XHRcdFx0XHQgICAgICBSRVNfVFlQRV9BRE1JTl9XUSk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4mIzQzO1xuJiM0MztcdGVyciA9IHZuaWNfcnFfYWxsb2Nfd2l0aF90eXBlKGVuaWMtXHUwMDNldmRldiwgXHUwMDI2ZW5pYy1cdTAwM2VhZG1pbl9ycSwgMCxcbiYjNDM7XHRcdFx0XHQgICAgICBFTklDX0FETUlOX0RFU0NfQ09VTlQsXG4mIzQzO1x0XHRcdFx0ICAgICAgc2l6ZW9mKHN0cnVjdCBycV9lbmV0X2Rlc2MpLFxuJiM0MztcdFx0XHRcdCAgICAgIFJFU19UWVBFX0FETUlOX1JRKTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0Z290byBmcmVlX3dxO1xuJiM0MztcbiYjNDM7XHQvKiBhZG1pbl9jcVswXSBpcyB0aGUgV1EgY29tcGxldGlvbiBxdWV1ZS4gIFdRIENRRXMgYXJlIGFsd2F5c1xuJiM0MztcdCAqIDE2IGJ5dGVzIHdpZGU7IGZpcm13YXJlIGFsd2F5cyB3cml0ZXMgMTYtYnl0ZSBDUUVzIGZvciBXUVxuJiM0MztcdCAqIGNvbXBsZXRpb25zIG9uIGV2ZXJ5IFdRLCBpbmNsdWRpbmcgdGhlIGFkbWluIGNoYW5uZWwgV1EuXG4mIzQzO1x0ICogVXNlIHNpemVvZihzdHJ1Y3QgY3FfZGVzYykgYWNjb3JkaW5nbHkuXG4mIzQzO1x0ICovXG4mIzQzO1x0ZXJyID0gdm5pY19jcV9hbGxvY193aXRoX3R5cGUoZW5pYy1cdTAwM2V2ZGV2LCBcdTAwMjZlbmljLVx1MDAzZWFkbWluX2NxWzBdLCAwLFxuJiM0MztcdFx0XHRcdCAgICAgIEVOSUNfQURNSU5fREVTQ19DT1VOVCxcbiYjNDM7XHRcdFx0XHQgICAgICBzaXplb2Yoc3RydWN0IGNxX2Rlc2MpLFxuJiM0MztcdFx0XHRcdCAgICAgIFJFU19UWVBFX0FETUlOX0NRKTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0Z290byBmcmVlX3JxO1xuJiM0MztcbiYjNDM7XHQvKiBhZG1pbl9jcVsxXSBpcyB0aGUgUlEgY29tcGxldGlvbiBxdWV1ZS4gIEl0cyBkZXNjcmlwdG9yIHNpemVcbiYjNDM7XHQgKiBtdXN0IG1hdGNoIHdoYXQgZmlybXdhcmUgd3JpdGVzLiAgZW5pY19leHRfY3EoKSBjYWxsZWQgZWFybGllclxuJiM0MztcdCAqIGluIHByb2JlIGlzc3VlcyBDTURfQ1FfRU5UUllfU0laRV9TRVQgZm9yIFZOSUNfUlFfQUxMLFxuJiM0MztcdCAqIHByb2dyYW1taW5nIGZpcm13YXJlIHRvIHdyaXRlIENRIGVudHJpZXMgb2YgKDE2IFx1MDAzY1x1MDAzYyBlbmljLVx1MDAzZWV4dF9jcSlcbiYjNDM7XHQgKiBieXRlcyBmb3IgZXZlcnkgUlEgQ1Egb24gdGhlIHZOSUMsIGluY2x1ZGluZyB0aGUgYWRtaW4gUlEgQ1EuXG4mIzQzO1x0ICogQWxsb2NhdGluZyB3aXRoIHRoZSBzYW1lIHNpemUga2VlcHMgdGhlIGhvc3QgcG9sbGVyIGFuZFxuJiM0MztcdCAqIGZpcm13YXJlIGluIGxvY2tzdGVwOlxuJiM0MztcdCAqXG4mIzQzO1x0ICogICAtIFRoZSBjb2xvci92YWxpZCBiaXQgbGl2ZXMgYXQgYnl0ZSAoZGVzY19zaXplIC0gMSkgb2YgZXZlcnlcbiYjNDM7XHQgKiAgICAgY3FfZW5ldF9ycV9kZXNjW18zMnxfNjRdIHZhcmlhbnQsIHNvIGVuaWNfYWRtaW5fY3FfY29sb3IoKVxuJiM0MztcdCAqICAgICByZWFkcyBpdCBmcm9tIHRoZSBjb3JyZWN0IG9mZnNldC5cbiYjNDM7XHQgKiAgIC0gT25seSB0aGUgZmlyc3QgMTUgYnl0ZXMgb2YgdGhlIGRlc2NyaXB0b3IgKHZsYW4sXG4mIzQzO1x0ICogICAgIGJ5dGVzX3dyaXR0ZW5fZmxhZ3MsIC4uLikgYXJlIGFjY2Vzc2VkIGJ5IHRoZSBhZG1pbiBwYXRoO1xuJiM0MztcdCAqICAgICB0aGVzZSBmaWVsZHMgYXJlIGlkZW50aWNhbCBhY3Jvc3MgYWxsIHRocmVlIHZhcmlhbnRzIChzZWVcbiYjNDM7XHQgKiAgICAgY29tbWVudCBpbiBlbmljX3JxLmMgYWJvdmUgY3FfZW5ldF9ycV9kZXNjX2RlYygpKS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRlcnIgPSB2bmljX2NxX2FsbG9jX3dpdGhfdHlwZShlbmljLVx1MDAzZXZkZXYsIFx1MDAyNmVuaWMtXHUwMDNlYWRtaW5fY3FbMV0sIDEsXG4mIzQzO1x0XHRcdFx0ICAgICAgRU5JQ19BRE1JTl9ERVNDX0NPVU5ULFxuJiM0MztcdFx0XHRcdCAgICAgIDE2IFx1MDAzY1x1MDAzYyBlbmljLVx1MDAzZWV4dF9jcSxcbiYjNDM7XHRcdFx0XHQgICAgICBSRVNfVFlQRV9BRE1JTl9DUSk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdGdvdG8gZnJlZV9jcTA7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7ZnJlZV9jcTA6XG4mIzQzO1x0dm5pY19jcV9mcmVlKFx1MDAyNmVuaWMtXHUwMDNlYWRtaW5fY3FbMF0pO1xuJiM0MztmcmVlX3JxOlxuJiM0MztcdHZuaWNfcnFfZnJlZShcdTAwMjZlbmljLVx1MDAzZWFkbWluX3JxKTtcbiYjNDM7ZnJlZV93cTpcbiYjNDM7XHR2bmljX3dxX2ZyZWUoXHUwMDI2ZW5pYy1cdTAwM2VhZG1pbl93cSk7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgZW5pY19hZG1pbl9mcmVlX3Jlc291cmNlcyhzdHJ1Y3QgZW5pYyAqZW5pYylcbiYjNDM7e1xuJiM0MztcdHZuaWNfaW50cl9mcmVlKFx1MDAyNmVuaWMtXHUwMDNlYWRtaW5faW50cik7XG4mIzQzO1x0dm5pY19jcV9mcmVlKFx1MDAyNmVuaWMtXHUwMDNlYWRtaW5fY3FbMV0pO1xuJiM0MztcdHZuaWNfY3FfZnJlZShcdTAwMjZlbmljLVx1MDAzZWFkbWluX2NxWzBdKTtcbiYjNDM7XHR2bmljX3JxX2ZyZWUoXHUwMDI2ZW5pYy1cdTAwM2VhZG1pbl9ycSk7XG4mIzQzO1x0dm5pY193cV9mcmVlKFx1MDAyNmVuaWMtXHUwMDNlYWRtaW5fd3EpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBlbmljX2FkbWluX2luaXRfcmVzb3VyY2VzKHN0cnVjdCBlbmljICplbmljKVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgaW50IGludHJfb2Zmc2V0ID0gZW5pYy1cdTAwM2VhZG1pbl9pbnRyX2luZGV4O1xuJiM0MztcbiYjNDM7XHR2bmljX3dxX2luaXQoXHUwMDI2ZW5pYy1cdTAwM2VhZG1pbl93cSxcbiYjNDM7XHRcdCAgICAgMCwgMCwgMCk7IC8qIGNxX2luZGV4LCBlcnJfaW50cl9lbmFibGUsIGVycl9pbnRyX29mZnNldCAqL1xuJiM0MztcdHZuaWNfcnFfaW5pdChcdTAwMjZlbmljLVx1MDAzZWFkbWluX3JxLFxuJiM0MztcdFx0ICAgICAxLCAwLCAwKTsgLyogY3FfaW5kZXgsIGVycl9pbnRyX2VuYWJsZSwgZXJyX2ludHJfb2Zmc2V0ICovXG4mIzQzO1x0dm5pY19jcV9pbml0KFx1MDAyNmVuaWMtXHUwMDNlYWRtaW5fY3FbMF0sXG4mIzQzO1x0XHQgICAgIFZOSUNfQ1FfRkNfRElTQUJMRSxcbiYjNDM7XHRcdCAgICAgVk5JQ19DUV9DT0xPUl9FTkFCTEUsXG4mIzQzO1x0XHQgICAgIDAsIDAsIDEsIC8qIGNxX2hlYWQsIGNxX3RhaWwsIGNxX3RhaWxfY29sb3IgKi9cbiYjNDM7XHRcdCAgICAgVk5JQ19DUV9JTlRSX0RJU0FCTEUsIC8qIHBvbGxlZCBzeW5jaHJvbm91c2x5IGJ5IG1ib3ggc2VuZCAqL1xuJiM0MztcdFx0ICAgICBWTklDX0NRX0VOVFJZX0VOQUJMRSxcbiYjNDM7XHRcdCAgICAgVk5JQ19DUV9NU0dfRElTQUJMRSxcbiYjNDM7XHRcdCAgICAgaW50cl9vZmZzZXQsXG4mIzQzO1x0XHQgICAgIDAgLyogY3FfbWVzc2FnZV9hZGRyICovKTtcbiYjNDM7XHR2bmljX2NxX2luaXQoXHUwMDI2ZW5pYy1cdTAwM2VhZG1pbl9jcVsxXSxcbiYjNDM7XHRcdCAgICAgVk5JQ19DUV9GQ19ESVNBQkxFLFxuJiM0MztcdFx0ICAgICBWTklDX0NRX0NPTE9SX0VOQUJMRSxcbiYjNDM7XHRcdCAgICAgMCwgMCwgMSwgLyogY3FfaGVhZCwgY3FfdGFpbCwgY3FfdGFpbF9jb2xvciAqL1xuJiM0MztcdFx0ICAgICBWTklDX0NRX0lOVFJfRU5BQkxFLFxuJiM0MztcdFx0ICAgICBWTklDX0NRX0VOVFJZX0VOQUJMRSxcbiYjNDM7XHRcdCAgICAgVk5JQ19DUV9NU0dfRElTQUJMRSxcbiYjNDM7XHRcdCAgICAgaW50cl9vZmZzZXQsXG4mIzQzO1x0XHQgICAgIDAgLyogY3FfbWVzc2FnZV9hZGRyICovKTtcbiYjNDM7XHQvKiBjb2FsZXNjaW5nX3RpbWVyLCBjb2FsZXNjaW5nX3R5cGUsIG1hc2tfb25fYXNzZXJ0aW9uICovXG4mIzQzO1x0dm5pY19pbnRyX2luaXQoXHUwMDI2ZW5pYy1cdTAwM2VhZG1pbl9pbnRyLFxuJiM0MztcdFx0ICAgICAgIDAsIDAsIDEpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBlbmljX2FkbWluX21zZ19kcmFpbihzdHJ1Y3QgZW5pYyAqZW5pYylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBlbmljX2FkbWluX21zZyAqbXNnLCAqdG1wO1xuJiM0MztcbiYjNDM7XHRzcGluX2xvY2tfYmgoXHUwMDI2ZW5pYy1cdTAwM2VhZG1pbl9tc2dfbG9jayk7XG4mIzQzO1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG1zZywgdG1wLCBcdTAwMjZlbmljLVx1MDAzZWFkbWluX21zZ19saXN0LCBsaXN0KSB7XG4mIzQzO1x0XHRsaXN0X2RlbChcdTAwMjZtc2ctXHUwMDNlbGlzdCk7XG4mIzQzO1x0XHRrZnJlZShtc2cpO1xuJiM0MztcdH1cbiYjNDM7XHRlbmljLVx1MDAzZWFkbWluX21zZ19jb3VudCA9IDA7XG4mIzQzO1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2ZW5pYy1cdTAwM2VhZG1pbl9tc2dfbG9jayk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBlbmljX2FkbWluX2NoYW5uZWxfb3BlbihzdHJ1Y3QgZW5pYyAqZW5pYylcbiYjNDM7e1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdGlmICghZW5pYy1cdTAwM2VoYXNfYWRtaW5fY2hhbm5lbClcbiYjNDM7XHRcdHJldHVybiAtRU5PREVWO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBlbmljX2FkbWluX2FsbG9jX3Jlc291cmNlcyhlbmljKTtcbiYjNDM7XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRuZXRkZXZfZXJyKGVuaWMtXHUwMDNlbmV0ZGV2LFxuJiM0MztcdFx0XHQgICBcJiMzNDtGYWlsZWQgdG8gYWxsb2MgYWRtaW4gY2hhbm5lbCByZXNvdXJjZXM6ICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgICBlcnIpO1xuJiM0MztcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHNwaW5fbG9ja19pbml0KFx1MDAyNmVuaWMtXHUwMDNlYWRtaW5fbXNnX2xvY2spO1xuJiM0MztcdElOSVRfTElTVF9IRUFEKFx1MDAyNmVuaWMtXHUwMDNlYWRtaW5fbXNnX2xpc3QpO1xuJiM0MztcdElOSVRfV09SSyhcdTAwMjZlbmljLVx1MDAzZWFkbWluX21zZ193b3JrLCBlbmljX2FkbWluX21zZ193b3JrX2hhbmRsZXIpO1xuJiM0MztcdElOSVRfV09SSyhcdTAwMjZlbmljLVx1MDAzZWFkbWluX3BvbGxfd29yaywgZW5pY19hZG1pbl9wb2xsX3dvcmtfaGFuZGxlcik7XG4mIzQzO1xuJiM0MztcdGVyciA9IGVuaWNfYWRtaW5fc2V0dXBfaW50cihlbmljKTtcbiYjNDM7XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRuZXRkZXZfZXJyKGVuaWMtXHUwMDNlbmV0ZGV2LFxuJiM0MztcdFx0XHQgICBcJiMzNDtBZG1pbiBjaGFubmVsIHJlcXVpcmVzIE1TSS1YLCBTUi1JT1YgdW5hdmFpbGFibGU6ICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgICBlcnIpO1xuJiM0MztcdFx0Z290byBmcmVlX3Jlc291cmNlcztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGVuaWNfYWRtaW5faW5pdF9yZXNvdXJjZXMoZW5pYyk7XG4mIzQzO1xuJiM0MztcdHZuaWNfd3FfZW5hYmxlKFx1MDAyNmVuaWMtXHUwMDNlYWRtaW5fd3EpO1xuJiM0MztcdHZuaWNfcnFfZW5hYmxlKFx1MDAyNmVuaWMtXHUwMDNlYWRtaW5fcnEpO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBlbmljX2FkbWluX3JxX2ZpbGwoZW5pYywgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKGVycikge1xuJiM0MztcdFx0bmV0ZGV2X2VycihlbmljLVx1MDAzZW5ldGRldixcbiYjNDM7XHRcdFx0ICAgXCYjMzQ7RmFpbGVkIHRvIGZpbGwgYWRtaW4gUlEgYnVmZmVyczogJWRcXG5cJiMzNDssIGVycik7XG4mIzQzO1x0XHRnb3RvIGRpc2FibGVfcXVldWVzO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZXJyID0gZW5pY19hZG1pbl9xcF90eXBlX3NldChlbmljLCBRUF9FTkFCTEUpO1xuJiM0MztcdGlmIChlcnIpIHtcbiYjNDM7XHRcdG5ldGRldl9lcnIoZW5pYy1cdTAwM2VuZXRkZXYsXG4mIzQzO1x0XHRcdCAgIFwmIzM0O0ZhaWxlZCB0byBzZXQgYWRtaW4gUVAgdHlwZTogJWRcXG5cJiMzNDssIGVycik7XG4mIzQzO1x0XHRnb3RvIGRpc2FibGVfcXVldWVzO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0dm5pY19pbnRyX3VubWFzayhcdTAwMjZlbmljLVx1MDAzZWFkbWluX2ludHIpO1xuJiM0MztcbiYjNDM7XHQvKiBPbmx5IG5vdyB0aGF0IHRoZSBhZG1pbiBXUS9SUS9DUSBhbmQgaW50ZXJydXB0IGFyZSBmdWxseSBhbGxvY2F0ZWQsXG4mIzQzO1x0ICogcHJvZ3JhbW1lZCBhbmQgZW5hYmxlZCBpcyBpdCBzYWZlIHRvIGFsbG93IE1CT1ggc2VuZHMuICBDbGVhcmluZyB0aGlzXG4mIzQzO1x0ICogZWFybGllciBvcGVuZWQgYSB3aW5kb3cgd2hlcmUgYSBjb25jdXJyZW50IHNlbmRlciAoZS5nLiBsaW5rLW5vdGlmeVxuJiM0MztcdCAqIHdvcmsgc2NoZWR1bGVkIGJ5IGEgcG9zdC1yZXNldCBsaW5rLXVwKSBjb3VsZCBjYWxsIGVuaWNfbWJveF9zZW5kX21zZygpXG4mIzQzO1x0ICogYWdhaW5zdCBhIG5vdC15ZXQtYWxsb2NhdGVkIGFkbWluX3dxIGFuZCBjcmFzaC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRXUklURV9PTkNFKGVuaWMtXHUwMDNlbWJveF9zZW5kX2Rpc2FibGVkLCBmYWxzZSk7XG4mIzQzO1xuJiM0MztcdG5ldGRldl9kYmcoZW5pYy1cdTAwM2VuZXRkZXYsXG4mIzQzO1x0XHQgICBcJiMzNDthZG1pbiBjaGFubmVsIG9wZW46IGludHI9JXUgd3FfYXZhaWw9JXUgcnFfYXZhaWw9JXUgY3EwX2NvbG9yPSV1IGNxMV9jb2xvcj0ldVxcblwmIzM0OyxcbiYjNDM7XHRcdCAgIGVuaWMtXHUwMDNlYWRtaW5faW50cl9pbmRleCxcbiYjNDM7XHRcdCAgIHZuaWNfd3FfZGVzY19hdmFpbChcdTAwMjZlbmljLVx1MDAzZWFkbWluX3dxKSxcbiYjNDM7XHRcdCAgIHZuaWNfcnFfZGVzY19hdmFpbChcdTAwMjZlbmljLVx1MDAzZWFkbWluX3JxKSxcbiYjNDM7XHRcdCAgIGVuaWMtXHUwMDNlYWRtaW5fY3FbMF0ubGFzdF9jb2xvcixcbiYjNDM7XHRcdCAgIGVuaWMtXHUwMDNlYWRtaW5fY3FbMV0ubGFzdF9jb2xvcik7XG4mIzQzO1xuJiM0MztcdGVuaWMtXHUwMDNlYWRtaW5fY2hhbl91cCA9IHRydWU7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7ZGlzYWJsZV9xdWV1ZXM6XG4mIzQzO1x0ZW5pY19hZG1pbl90ZWFyZG93bl9pbnRyKGVuaWMpO1xuJiM0MztcdGVuaWNfYWRtaW5fcXBfdHlwZV9zZXQoZW5pYywgUVBfRElTQUJMRSk7XG4mIzQzO1x0aWYgKHZuaWNfd3FfZGlzYWJsZShcdTAwMjZlbmljLVx1MDAzZWFkbWluX3dxKSlcbiYjNDM7XHRcdG5ldGRldl93YXJuKGVuaWMtXHUwMDNlbmV0ZGV2LCBcJiMzNDtGYWlsZWQgdG8gZGlzYWJsZSBhZG1pbiBXUVxcblwmIzM0Oyk7XG4mIzQzO1x0aWYgKHZuaWNfcnFfZGlzYWJsZShcdTAwMjZlbmljLVx1MDAzZWFkbWluX3JxKSlcbiYjNDM7XHRcdG5ldGRldl93YXJuKGVuaWMtXHUwMDNlbmV0ZGV2LCBcJiMzNDtGYWlsZWQgdG8gZGlzYWJsZSBhZG1pbiBSUVxcblwmIzM0Oyk7XG4mIzQzO1x0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZlbmljLVx1MDAzZWFkbWluX21zZ193b3JrKTtcbiYjNDM7XHRlbmljX2FkbWluX21zZ19kcmFpbihlbmljKTtcbiYjNDM7XHRlbmljX2FkbWluX3JxX2RyYWluKGVuaWMpO1xuJiM0MztmcmVlX3Jlc291cmNlczpcbiYjNDM7XHRlbmljX2FkbWluX2ZyZWVfcmVzb3VyY2VzKGVuaWMpO1xuJiM0MztcdHJldHVybiBlcnI7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgZW5pY19hZG1pbl9jaGFubmVsX2Nsb3NlKHN0cnVjdCBlbmljICplbmljKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0aWYgKCFlbmljLVx1MDAzZWhhc19hZG1pbl9jaGFubmVsKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHQvKiBOb3RoaW5nIHRvIHRlYXIgZG93biBpZiB0aGUgY2hhbm5lbCB3YXMgbmV2ZXIgKHJlKW9wZW5lZCwgZS5nLiBhXG4mIzQzO1x0ICogZmFpbGVkIGVuaWNfYWRtaW5fY2hhbm5lbF9vcGVuKCkgaW4gcHJvYmUgb3IgaW4gdGhlIHJlc2V0IHBhdGg7XG4mIzQzO1x0ICogb3RoZXJ3aXNlIHRoZSBkaXNhYmxlL2NsZWFuIGNhbGxzIGJlbG93IGRlcmVmZXJlbmNlIGZyZWVkIHJlc291cmNlcy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIWVuaWMtXHUwMDNlYWRtaW5fY2hhbl91cClcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0V1JJVEVfT05DRShlbmljLVx1MDAzZW1ib3hfc2VuZF9kaXNhYmxlZCwgdHJ1ZSk7XG4mIzQzO1xuJiM0MztcdG5ldGRldl9kYmcoZW5pYy1cdTAwM2VuZXRkZXYsIFwmIzM0O2FkbWluIGNoYW5uZWwgY2xvc2VcXG5cJiMzNDspO1xuJiM0MztcbiYjNDM7XHR2bmljX2ludHJfbWFzayhcdTAwMjZlbmljLVx1MDAzZWFkbWluX2ludHIpO1xuJiM0MztcdGVuaWNfYWRtaW5fdGVhcmRvd25faW50cihlbmljKTtcbiYjNDM7XHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNmVuaWMtXHUwMDNlbGlua19ub3RpZnlfd29yayk7XG4mIzQzO1x0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZlbmljLVx1MDAzZWFkbWluX21zZ193b3JrKTtcbiYjNDM7XHRlbmljX2FkbWluX21zZ19kcmFpbihlbmljKTtcbiYjNDM7XG4mIzQzO1x0ZW5pY19hZG1pbl9xcF90eXBlX3NldChlbmljLCBRUF9ESVNBQkxFKTtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gdm5pY193cV9kaXNhYmxlKFx1MDAyNmVuaWMtXHUwMDNlYWRtaW5fd3EpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRuZXRkZXZfd2FybihlbmljLVx1MDAzZW5ldGRldixcbiYjNDM7XHRcdFx0ICAgIFwmIzM0O0ZhaWxlZCB0byBkaXNhYmxlIGFkbWluIFdROiAlZFxcblwmIzM0OywgZXJyKTtcbiYjNDM7XHRlcnIgPSB2bmljX3JxX2Rpc2FibGUoXHUwMDI2ZW5pYy1cdTAwM2VhZG1pbl9ycSk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdG5ldGRldl93YXJuKGVuaWMtXHUwMDNlbmV0ZGV2LFxuJiM0MztcdFx0XHQgICAgXCYjMzQ7RmFpbGVkIHRvIGRpc2FibGUgYWRtaW4gUlE6ICVkXFxuXCYjMzQ7LCBlcnIpO1xuJiM0MztcbiYjNDM7XHR2bmljX3dxX2NsZWFuKFx1MDAyNmVuaWMtXHUwMDNlYWRtaW5fd3EsIGVuaWNfYWRtaW5fd3FfYnVmX2NsZWFuKTtcbiYjNDM7XHRlbmljX2FkbWluX3JxX2RyYWluKGVuaWMpO1xuJiM0MztcdHZuaWNfY3FfY2xlYW4oXHUwMDI2ZW5pYy1cdTAwM2VhZG1pbl9jcVswXSk7XG4mIzQzO1x0dm5pY19jcV9jbGVhbihcdTAwMjZlbmljLVx1MDAzZWFkbWluX2NxWzFdKTtcbiYjNDM7XHR2bmljX2ludHJfY2xlYW4oXHUwMDI2ZW5pYy1cdTAwM2VhZG1pbl9pbnRyKTtcbiYjNDM7XG4mIzQzO1x0ZW5pYy1cdTAwM2VhZG1pbl9ycV9oYW5kbGVyID0gTlVMTDtcbiYjNDM7XHRlbmljX2FkbWluX2ZyZWVfcmVzb3VyY2VzKGVuaWMpO1xuJiM0MztcbiYjNDM7XHRlbmljLVx1MDAzZWFkbWluX2NoYW5fdXAgPSBmYWxzZTtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19hZG1pbi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX2FkbWluLmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uNjJjODAyMjBiMGNhY2Ncbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19hZG1pbi5oXG5AQCAtMCwwICYjNDM7MSwyNyBAQFxuJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovXG4mIzQzOy8qIENvcHlyaWdodCAyMDI1IENpc2NvIFN5c3RlbXMsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICovXG4mIzQzO1xuJiM0MzsjaWZuZGVmIF9FTklDX0FETUlOX0hfXG4mIzQzOyNkZWZpbmUgX0VOSUNfQURNSU5fSF9cbiYjNDM7XG4mIzQzOyNkZWZpbmUgRU5JQ19BRE1JTl9ERVNDX0NPVU5UXHQ2NFxuJiM0MzsjZGVmaW5lIEVOSUNfQURNSU5fQlVGX1NJWkVcdDIwNDhcbiYjNDM7XG4mIzQzO3N0cnVjdCBlbmljO1xuJiM0MztcbiYjNDM7LyogV3JhcHBlciBmb3IgcmVjZWl2ZWQgYWRtaW4gbWVzc2FnZXMgcXVldWVkIGZvciBkZWZlcnJlZCBwcm9jZXNzaW5nLlxuJiM0MzsgKiBUaGUgYWRtaW4gQ1EgcG9sbCB3b3JrIGhhbmRsZXIgZW5xdWV1ZXMgdGhlc2U7IGEgc2VwYXJhdGUgd29yayBoYW5kbGVyXG4mIzQzOyAqIHByb2Nlc3NlcyB0aGVtIHdoZXJlIHNsZWVwaW5nIChtdXRleCwgR0ZQX0tFUk5FTCkgaXMgc2FmZS5cbiYjNDM7ICovXG4mIzQzO3N0cnVjdCBlbmljX2FkbWluX21zZyB7XG4mIzQzO1x0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xuJiM0MztcdHVuc2lnbmVkIGludCBsZW47XG4mIzQzO1x0dTggZGF0YVtdIF9fYWxpZ25lZCg4KTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO2ludCBlbmljX2FkbWluX2NoYW5uZWxfb3BlbihzdHJ1Y3QgZW5pYyAqZW5pYyk7XG4mIzQzO3ZvaWQgZW5pY19hZG1pbl9jaGFubmVsX2Nsb3NlKHN0cnVjdCBlbmljICplbmljKTtcbiYjNDM7dW5zaWduZWQgaW50IGVuaWNfYWRtaW5fd3FfY3Ffc2VydmljZShzdHJ1Y3QgZW5pYyAqZW5pYyk7XG4mIzQzO3Vuc2lnbmVkIGludCBlbmljX2FkbWluX3JxX2NxX3NlcnZpY2Uoc3RydWN0IGVuaWMgKmVuaWMpO1xuJiM0MztcbiYjNDM7I2VuZGlmIC8qIF9FTklDX0FETUlOX0hfICovXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19tYWluLmNcbmluZGV4IGU3MTI1YjgxODA4Nzk5Li5kZTkwMzMyZGM0MGNjNyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19tYWluLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19tYWluLmNcbkBAIC02MCw2ICYjNDM7NjAsOCBAQFxuICNpbmNsdWRlIFwmIzM0O2VuaWNfY2xzZi5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7ZW5pY19ycS5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7ZW5pY193cS5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2VuaWNfYWRtaW4uaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtlbmljX21ib3guaFwmIzM0O1xuIFxuICNkZWZpbmUgRU5JQ19OT1RJRllfVElNRVJfUEVSSU9EXHQoMiAqIEhaKVxuIFxuQEAgLTMxNCw2ICYjNDM7MzE2LDExIEBAIHN0YXRpYyBpbnQgZW5pY19pc19zcmlvdl92ZihzdHJ1Y3QgZW5pYyAqZW5pYylcbiBcdCAgICAgICBlbmljLVx1MDAzZXBkZXYtXHUwMDNlZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfQ0lTQ09fVklDX0VORVRfVkZfVjI7XG4gfVxuIFxuJiM0MztpbnQgZW5pY19pc19zcmlvdl92Zl92MihzdHJ1Y3QgZW5pYyAqZW5pYylcbiYjNDM7e1xuJiM0MztcdHJldHVybiBlbmljLVx1MDAzZXBkZXYtXHUwMDNlZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfQ0lTQ09fVklDX0VORVRfVkZfVjI7XG4mIzQzO31cbiYjNDM7XG4gaW50IGVuaWNfaXNfdmFsaWRfdmYoc3RydWN0IGVuaWMgKmVuaWMsIGludCB2ZilcbiB7XG4gI2lmZGVmIENPTkZJR19QQ0lfSU9WXG5AQCAtNDExLDYgJiM0Mzs0MTgsMjQgQEAgc3RhdGljIHZvaWQgZW5pY19zZXRfcnhfY29hbF9zZXR0aW5nKHN0cnVjdCBlbmljICplbmljKVxuIFx0cnhfY29hbC1cdTAwM2V1c2VfYWRhcHRpdmVfcnhfY29hbGVzY2UgPSAxO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgZW5pY19saW5rX25vdGlmeV93b3JrX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGVuaWMgKmVuaWMgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGVuaWMsXG4mIzQzO1x0XHRcdFx0XHQgbGlua19ub3RpZnlfd29yayk7XG4mIzQzO1x0dTMyIHN0YXRlO1xuJiM0MztcdHUxNiBpO1xuJiM0MztcbiYjNDM7XHRpZiAoIWVuaWNfc3Jpb3ZfZW5hYmxlZChlbmljKSB8fCAhZW5pYy1cdTAwM2V2Zl9zdGF0ZSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0c3RhdGUgPSBuZXRpZl9jYXJyaWVyX29rKGVuaWMtXHUwMDNlbmV0ZGV2KSA/XG4mIzQzO1x0XHRFTklDX01CT1hfTElOS19TVEFURV9FTkFCTEUgOlxuJiM0MztcdFx0RU5JQ19NQk9YX0xJTktfU1RBVEVfRElTQUJMRTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgZW5pYy1cdTAwM2VudW1fdmZzOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdGVuaWNfbWJveF9zZW5kX2xpbmtfc3RhdGUoZW5pYywgaSwgc3RhdGUpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIGVuaWNfbGlua19jaGVjayhzdHJ1Y3QgZW5pYyAqZW5pYylcbiB7XG4gXHRpbnQgbGlua19zdGF0dXMgPSB2bmljX2Rldl9saW5rX3N0YXR1cyhlbmljLVx1MDAzZXZkZXYpO1xuQEAgLTQyMCw5ICYjNDM7NDQ1LDEzIEBAIHN0YXRpYyB2b2lkIGVuaWNfbGlua19jaGVjayhzdHJ1Y3QgZW5pYyAqZW5pYylcbiBcdFx0bmV0ZGV2X2luZm8oZW5pYy1cdTAwM2VuZXRkZXYsIFwmIzM0O0xpbmsgVVBcXG5cJiMzNDspO1xuIFx0XHRuZXRpZl9jYXJyaWVyX29uKGVuaWMtXHUwMDNlbmV0ZGV2KTtcbiBcdFx0ZW5pY19zZXRfcnhfY29hbF9zZXR0aW5nKGVuaWMpO1xuJiM0MztcdFx0aWYgKGVuaWNfc3Jpb3ZfZW5hYmxlZChlbmljKSBcdTAwMjZcdTAwMjYgZW5pYy1cdTAwM2V2Zl9zdGF0ZSlcbiYjNDM7XHRcdFx0c2NoZWR1bGVfd29yayhcdTAwMjZlbmljLVx1MDAzZWxpbmtfbm90aWZ5X3dvcmspO1xuIFx0fSBlbHNlIGlmICghbGlua19zdGF0dXMgXHUwMDI2XHUwMDI2IGNhcnJpZXJfb2spIHtcbiBcdFx0bmV0ZGV2X2luZm8oZW5pYy1cdTAwM2VuZXRkZXYsIFwmIzM0O0xpbmsgRE9XTlxcblwmIzM0Oyk7XG4gXHRcdG5ldGlmX2NhcnJpZXJfb2ZmKGVuaWMtXHUwMDNlbmV0ZGV2KTtcbiYjNDM7XHRcdGlmIChlbmljX3NyaW92X2VuYWJsZWQoZW5pYykgXHUwMDI2XHUwMDI2IGVuaWMtXHUwMDNldmZfc3RhdGUpXG4mIzQzO1x0XHRcdHNjaGVkdWxlX3dvcmsoXHUwMDI2ZW5pYy1cdTAwM2VsaW5rX25vdGlmeV93b3JrKTtcbiBcdH1cbiB9XG4gXG5AQCAtMjE0Miw2ICYjNDM7MjE3MSw1NyBAQCBzdGF0aWMgdm9pZCBlbmljX3NldF9hcGlfYnVzeShzdHJ1Y3QgZW5pYyAqZW5pYywgYm9vbCBidXN5KVxuIFx0c3Bpbl91bmxvY2soXHUwMDI2ZW5pYy1cdTAwM2VlbmljX2FwaV9sb2NrKTtcbiB9XG4gXG4mIzQzOy8qIFRoZSBhZG1pbi9NQk9YIGNoYW5uZWwgZXhpc3RzIG9uIGEgVjIgUEYgd2hpbGUgU1ItSU9WIGlzIGVuYWJsZWQgYW5kIG9uXG4mIzQzOyAqIGV2ZXJ5IFYyIFZGLiAgQSByZXNldCB3aXBlcyB0aGUgYWRtaW4gV1EvUlEvQ1EsIHNvIHN1Y2ggZGV2aWNlcyBtdXN0IHRlYXJcbiYjNDM7ICogdGhlIGNoYW5uZWwgZG93biBiZWZvcmUgdGhlIHJlc2V0IGFuZCByZS1lc3RhYmxpc2ggaXQgYWZ0ZXJ3YXJkcy5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBib29sIGVuaWNfaGFzX2FkbWluX2NoYW4oc3RydWN0IGVuaWMgKmVuaWMpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gZW5pY19pc19zcmlvdl92Zl92MihlbmljKSB8fFxuJiM0MztcdCAgICAgICAoZW5pY19zcmlvdl9lbmFibGVkKGVuaWMpIFx1MDAyNlx1MDAyNiBlbmljLVx1MDAzZXZmX3R5cGUgPT0gRU5JQ19WRl9UWVBFX1YyKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogUmUtZXN0YWJsaXNoIHRoZSBhZG1pbi9NQk9YIGNoYW5uZWwgYWZ0ZXIgYSByZXNldCBoYXMgcmUtY3JlYXRlZCB0aGUgZGF0YVxuJiM0MzsgKiBwYXRoLiAgTWlycm9ycyB0aGUgcmVsZXZhbnQgcGFydCBvZiB0aGUgcHJvYmUgLyBTUi1JT1YtZW5hYmxlIHNlcXVlbmNlOlxuJiM0MzsgKiByZW9wZW4gdGhlIGNoYW5uZWwgYW5kIHJlaW5pdGlhbGlzZSBNQk9YLCB0aGVuIGZvciBhIFZGIHJlLXJ1biB0aGUgUEZcbiYjNDM7ICogaGFuZHNoYWtlIChpdHMgYWRtaW4gUVAgYW5kIFBGLXNpZGUgcmVnaXN0cmF0aW9uIHdlcmUgdG9ybiBkb3duIGJ5IHRoZVxuJiM0MzsgKiByZXNldCksIG9yIGZvciBhIFBGIHJlLXB1c2ggdGhlIGN1cnJlbnQgbGluayBzdGF0ZSB0byByZWdpc3RlcmVkIFZGcy5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIGVuaWNfYWRtaW5fY2hhbl9yZW9wZW4oc3RydWN0IGVuaWMgKmVuaWMpXG4mIzQzO3tcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBlbmljX2FkbWluX2NoYW5uZWxfb3BlbihlbmljKTtcbiYjNDM7XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRuZXRkZXZfZXJyKGVuaWMtXHUwMDNlbmV0ZGV2LFxuJiM0MztcdFx0XHQgICBcJiMzNDthZG1pbiBjaGFubmVsIHJlb3BlbiBhZnRlciByZXNldCBmYWlsZWQ6ICVkXFxuXCYjMzQ7LCBlcnIpO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZW5pY19tYm94X2luaXQoZW5pYyk7XG4mIzQzO1xuJiM0MztcdGlmIChlbmljX2lzX3NyaW92X3ZmX3YyKGVuaWMpKSB7XG4mIzQzO1x0XHRlcnIgPSBlbmljX21ib3hfdmZfY2FwYWJpbGl0eV9jaGVjayhlbmljKTtcbiYjNDM7XHRcdGlmIChlcnIpIHtcbiYjNDM7XHRcdFx0bmV0ZGV2X2VycihlbmljLVx1MDAzZW5ldGRldixcbiYjNDM7XHRcdFx0XHQgICBcJiMzNDtNQk9YIGNhcGFiaWxpdHkgY2hlY2sgYWZ0ZXIgcmVzZXQgZmFpbGVkOiAlZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICBlcnIpO1xuJiM0MztcdFx0XHRyZXR1cm47XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRlcnIgPSBlbmljX21ib3hfdmZfcmVnaXN0ZXIoZW5pYyk7XG4mIzQzO1x0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRuZXRkZXZfZXJyKGVuaWMtXHUwMDNlbmV0ZGV2LFxuJiM0MztcdFx0XHRcdCAgIFwmIzM0O01CT1ggVkYgcmUtcmVnaXN0cmF0aW9uIGFmdGVyIHJlc2V0IGZhaWxlZDogJWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgZXJyKTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0LyogVGhlIGxpbmsgY2FtZSBiYWNrIHVwIGR1cmluZyBlbmljX29wZW4oKSBhYm92ZSB3aGlsZSBNQk9YXG4mIzQzO1x0XHQgKiBzZW5kcyB3ZXJlIHN0aWxsIGRpc2FibGVkIChjaGFubmVsIG5vdCB5ZXQgcmVvcGVuZWQpLCBzbyB0aGF0XG4mIzQzO1x0XHQgKiBsaW5rLW5vdGlmeSB3YXMgZHJvcHBlZC4gIFJlLXB1c2ggY3VycmVudCBsaW5rIHN0YXRlIG5vdy5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0c2NoZWR1bGVfd29yayhcdTAwMjZlbmljLVx1MDAzZWxpbmtfbm90aWZ5X3dvcmspO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCBlbmljX3Jlc2V0KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiB7XG4gXHRzdHJ1Y3QgZW5pYyAqZW5pYyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZW5pYywgcmVzZXQpO1xuQEAgLTIxNTQsMTUgJiM0MzsyMjM0LDM0IEBAIHN0YXRpYyB2b2lkIGVuaWNfcmVzZXQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFx0LyogU3RvcCBhbnkgYWN0aXZpdHkgZnJvbSBpbmZpbmliYW5kICovXG4gXHRlbmljX3NldF9hcGlfYnVzeShlbmljLCB0cnVlKTtcbiBcbiYjNDM7XHQvKiBGdWxseSB0ZWFyIGRvd24gdGhlIFYyIGFkbWluL01CT1ggY2hhbm5lbCBiZWZvcmUgdGhlIHNvZnQgcmVzZXQuXG4mIzQzO1x0ICogVGhlIHJlc2V0IHdpcGVzIGFsbCBoYXJkd2FyZSBxdWV1ZXMgaW5jbHVkaW5nIHRoZSBhZG1pbiBXUS9SUTtcbiYjNDM7XHQgKiBjbG9zaW5nIGZpcnN0IHRlbGxzIGZpcm13YXJlIHRvIHN0b3AgdGhlIGFkbWluIFFQIChzbyBpdCBubyBsb25nZXJcbiYjNDM7XHQgKiBETUFzIGZyb20gdGhlIGFib3V0LXRvLWJlLXJlc2V0IHJpbmdzKSBhbmQgZnJlZXMgdGhlIGFkbWluIHJlc291cmNlc1xuJiM0MztcdCAqIHNvIHRoZXkgYXJlIGNsZWFubHkgcmUtYWxsb2NhdGVkIGFmdGVyd2FyZHMuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGVuaWNfaGFzX2FkbWluX2NoYW4oZW5pYykpXG4mIzQzO1x0XHRlbmljX2FkbWluX2NoYW5uZWxfY2xvc2UoZW5pYyk7XG4mIzQzO1xuIFx0ZW5pY19zdG9wKGVuaWMtXHUwMDNlbmV0ZGV2KTtcbiYjNDM7XG4gXHRlbmljX2Rldl9zb2Z0X3Jlc2V0KGVuaWMpO1xuIFx0ZW5pY19yZXNldF9hZGRyX2xpc3RzKGVuaWMpO1xuIFx0ZW5pY19pbml0X3ZuaWNfcmVzb3VyY2VzKGVuaWMpO1xuIFx0ZW5pY19zZXRfcnNzX25pY19jZmcoZW5pYyk7XG4gXHRlbmljX2Rldl9zZXRfaWdfdmxhbl9yZXdyaXRlX21vZGUoZW5pYyk7XG4gXHRlbmljX2V4dF9jcShlbmljKTtcbiYjNDM7XG4gXHRlbmljX29wZW4oZW5pYy1cdTAwM2VuZXRkZXYpO1xuIFxuJiM0MztcdC8qIFJlLWVzdGFibGlzaCB0aGUgYWRtaW4vTUJPWCBjaGFubmVsIGFmdGVyIHRoZSBkYXRhIHBhdGggaXMgYmFjayB1cC5cbiYjNDM7XHQgKiBJdCB3YXMgZnVsbHkgdG9ybiBkb3duIGJ5IGVuaWNfYWRtaW5fY2hhbm5lbF9jbG9zZSgpIGFib3ZlO1xuJiM0MztcdCAqIGVuaWNfYWRtaW5fY2hhbl9yZW9wZW4oKSByZW9wZW5zIGl0IGFuZCwgZm9yIGEgUEYgcmUtcHVzaGVzIGxpbmtcbiYjNDM7XHQgKiBzdGF0ZSwgb3IgZm9yIGEgVkYgcmUtcnVucyB0aGUgcHJvYmUtdGltZSBQRiBoYW5kc2hha2UuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGVuaWNfaGFzX2FkbWluX2NoYW4oZW5pYykpXG4mIzQzO1x0XHRlbmljX2FkbWluX2NoYW5fcmVvcGVuKGVuaWMpO1xuJiM0MztcbiBcdC8qIEFsbG93IGluZmluaWJhbmQgdG8gZmlkZGxlIHdpdGggdGhlIGRldmljZSBhZ2FpbiAqL1xuIFx0ZW5pY19zZXRfYXBpX2J1c3koZW5pYywgZmFsc2UpO1xuIFxuQEAgLTIxODAsMTYgJiM0MzsyMjc5LDMzIEBAIHN0YXRpYyB2b2lkIGVuaWNfdHhfaGFuZ19yZXNldChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gXHQvKiBTdG9wIGFueSBhY3Rpdml0eSBmcm9tIGluZmluaWJhbmQgKi9cbiBcdGVuaWNfc2V0X2FwaV9idXN5KGVuaWMsIHRydWUpO1xuIFxuJiM0MztcdC8qIEZ1bGx5IHRlYXIgZG93biB0aGUgVjIgYWRtaW4vTUJPWCBjaGFubmVsIGJlZm9yZSB0aGUgaGFuZyByZXNldCwgZm9yXG4mIzQzO1x0ICogdGhlIHNhbWUgcmVhc29uIGFzIHRoZSBzb2Z0IHJlc2V0IHBhdGg6IHN0b3AgdGhlIGFkbWluIFFQIGFuZCBmcmVlXG4mIzQzO1x0ICogdGhlIGFkbWluIHJlc291cmNlcyBiZWZvcmUgdGhlIGhhcmR3YXJlIHF1ZXVlcyBhcmUgd2lwZWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGVuaWNfaGFzX2FkbWluX2NoYW4oZW5pYykpXG4mIzQzO1x0XHRlbmljX2FkbWluX2NoYW5uZWxfY2xvc2UoZW5pYyk7XG4mIzQzO1xuIFx0ZW5pY19kZXZfaGFuZ19ub3RpZnkoZW5pYyk7XG4gXHRlbmljX3N0b3AoZW5pYy1cdTAwM2VuZXRkZXYpO1xuJiM0MztcbiBcdGVuaWNfZGV2X2hhbmdfcmVzZXQoZW5pYyk7XG4gXHRlbmljX3Jlc2V0X2FkZHJfbGlzdHMoZW5pYyk7XG4gXHRlbmljX2luaXRfdm5pY19yZXNvdXJjZXMoZW5pYyk7XG4gXHRlbmljX3NldF9yc3NfbmljX2NmZyhlbmljKTtcbiBcdGVuaWNfZGV2X3NldF9pZ192bGFuX3Jld3JpdGVfbW9kZShlbmljKTtcbiBcdGVuaWNfZXh0X2NxKGVuaWMpO1xuJiM0MztcbiBcdGVuaWNfb3BlbihlbmljLVx1MDAzZW5ldGRldik7XG4gXG4mIzQzO1x0LyogUmUtZXN0YWJsaXNoIHRoZSBhZG1pbi9NQk9YIGNoYW5uZWwgYWZ0ZXIgdGhlIGRhdGEgcGF0aCBpcyBiYWNrIHVwLlxuJiM0MztcdCAqIEl0IHdhcyBmdWxseSB0b3JuIGRvd24gYnkgZW5pY19hZG1pbl9jaGFubmVsX2Nsb3NlKCkgYWJvdmU7XG4mIzQzO1x0ICogZW5pY19hZG1pbl9jaGFuX3Jlb3BlbigpIHJlb3BlbnMgaXQgYW5kLCBmb3IgYSBQRiByZS1wdXNoZXMgbGlua1xuJiM0MztcdCAqIHN0YXRlLCBvciBmb3IgYSBWRiByZS1ydW5zIHRoZSBwcm9iZS10aW1lIFBGIGhhbmRzaGFrZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoZW5pY19oYXNfYWRtaW5fY2hhbihlbmljKSlcbiYjNDM7XHRcdGVuaWNfYWRtaW5fY2hhbl9yZW9wZW4oZW5pYyk7XG4mIzQzO1xuIFx0LyogQWxsb3cgaW5maW5pYmFuZCB0byBmaWRkbGUgd2l0aCB0aGUgZGV2aWNlIGFnYWluICovXG4gXHRlbmljX3NldF9hcGlfYnVzeShlbmljLCBmYWxzZSk7XG4gXG5AQCAtMjIwMCw2ICYjNDM7MjMxNiw4IEBAIHN0YXRpYyB2b2lkIGVuaWNfdHhfaGFuZ19yZXNldChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gXG4gc3RhdGljIGludCBlbmljX3NldF9pbnRyX21vZGUoc3RydWN0IGVuaWMgKmVuaWMpXG4ge1xuJiM0MztcdHVuc2lnbmVkIGludCBhZG1pbl9yZXNlcnZlID0gZW5pYy1cdTAwM2VoYXNfYWRtaW5fY2hhbm5lbCA/IDEgOiAwO1xuJiM0MztcdHVuc2lnbmVkIGludCBtaW5faW50ciA9IEVOSUNfTVNJWF9NSU5fSU5UUiAmIzQzOyBhZG1pbl9yZXNlcnZlO1xuIFx0dW5zaWduZWQgaW50IGk7XG4gXHRpbnQgbnVtX2ludHI7XG4gXG5AQCAtMjIxMCwxMiAmIzQzOzIzMjgsMTIgQEAgc3RhdGljIGludCBlbmljX3NldF9pbnRyX21vZGUoc3RydWN0IGVuaWMgKmVuaWMpXG4gXHQgKi9cbiBcbiBcdGlmIChlbmljLVx1MDAzZWNvbmZpZy5pbnRyX21vZGUgXHUwMDNjIDEgXHUwMDI2XHUwMDI2XG4tXHQgICAgZW5pYy1cdTAwM2VpbnRyX2F2YWlsIFx1MDAzZT0gRU5JQ19NU0lYX01JTl9JTlRSKSB7XG4mIzQzO1x0ICAgIGVuaWMtXHUwMDNlaW50cl9hdmFpbCBcdTAwM2U9IG1pbl9pbnRyKSB7XG4gXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGVuaWMtXHUwMDNlaW50cl9hdmFpbDsgaSYjNDM7JiM0MzspXG4gXHRcdFx0ZW5pYy1cdTAwM2Vtc2l4X2VudHJ5W2ldLmVudHJ5ID0gaTtcbiBcbiBcdFx0bnVtX2ludHIgPSBwY2lfZW5hYmxlX21zaXhfcmFuZ2UoZW5pYy1cdTAwM2VwZGV2LCBlbmljLVx1MDAzZW1zaXhfZW50cnksXG4tXHRcdFx0XHRcdFx0IEVOSUNfTVNJWF9NSU5fSU5UUixcbiYjNDM7XHRcdFx0XHRcdFx0IG1pbl9pbnRyLFxuIFx0XHRcdFx0XHRcdCBlbmljLVx1MDAzZWludHJfYXZhaWwpO1xuIFx0XHRpZiAobnVtX2ludHIgXHUwMDNlIDApIHtcbiBcdFx0XHR2bmljX2Rldl9zZXRfaW50cl9tb2RlKGVuaWMtXHUwMDNldmRldixcbkBAIC0yMzEwLDE2ICYjNDM7MjQyOCwyNyBAQCBzdGF0aWMgaW50IGVuaWNfYWRqdXN0X3Jlc291cmNlcyhzdHJ1Y3QgZW5pYyAqZW5pYylcbiBcdFx0ZW5pYy1cdTAwM2VjcV9jb3VudCA9IDI7XG4gXHRcdGVuaWMtXHUwMDNlaW50cl9jb3VudCA9IGVuaWMtXHUwMDNlaW50cl9hdmFpbDtcbiBcdFx0YnJlYWs7XG4tXHRjYXNlIFZOSUNfREVWX0lOVFJfTU9ERV9NU0lYOlxuJiM0MztcdGNhc2UgVk5JQ19ERVZfSU5UUl9NT0RFX01TSVg6IHtcbiBcdFx0LyogQWRqdXN0IHRoZSBudW1iZXIgb2Ygd3FzL3Jxcy9jcXMvaW50ZXJydXB0cyB0aGF0IHdpbGwgYmVcbi1cdFx0ICogdXNlZCBiYXNlZCBvbiB3aGljaCByZXNvdXJjZSBpcyB0aGUgbW9zdCBjb25zdHJhaW5lZFxuJiM0MztcdFx0ICogdXNlZCBiYXNlZCBvbiB3aGljaCByZXNvdXJjZSBpcyB0aGUgbW9zdCBjb25zdHJhaW5lZC5cbiYjNDM7XHRcdCAqIFJlc2VydmUgb25lIGV4dHJhIE1TSS1YIHNsb3QgZm9yIHRoZSBhZG1pbiBjaGFubmVsIElOVFJcbiYjNDM7XHRcdCAqIHdoZW4gaGFzX2FkbWluX2NoYW5uZWwgaXMgc2V0IHNvIHRoYXRcbiYjNDM7XHRcdCAqIGVuaWNfYWRtaW5fc2V0dXBfaW50cigpIGNhbiBhbGxvY2F0ZSBhdCBpbnRyX2NvdW50XG4mIzQzO1x0XHQgKiB3aXRoaW4gdGhlIGludHJfYXZhaWwgYm91bmRzIGV2ZW4gd2hlbiB0aGUgZGF0YSBxdWV1ZVxuJiM0MztcdFx0ICogY291bnQgaXMgbWF4ZWQgb3V0LiAgaW50cl9jb3VudCBjb3VudHMgb25seSB0aGUgZGF0YS1wYXRoXG4mIzQzO1x0XHQgKiBJUlFzIChyZWdpc3RlcmVkIGJ5IGVuaWNfcmVxdWVzdF9pbnRyKCkpOyB0aGUgYWRtaW4gSU5UUlxuJiM0MztcdFx0ICogbGl2ZXMgYXQgbXNpeCBpbmRleCBpbnRyX2NvdW50IGFuZCBpcyBzZXQgdXAgbGF0ZXIgYnlcbiYjNDM7XHRcdCAqIGVuaWNfYWRtaW5fc2V0dXBfaW50cigpLlxuIFx0XHQgKi9cbiYjNDM7XHRcdHVuc2lnbmVkIGludCBhZG1pbl9yZXNlcnZlID0gZW5pYy1cdTAwM2VoYXNfYWRtaW5fY2hhbm5lbCA/IDEgOiAwO1xuJiM0MztcbiBcdFx0d3FfYXZhaWwgPSBtaW4oZW5pYy1cdTAwM2V3cV9hdmFpbCwgRU5JQ19XUV9NQVgpO1xuIFx0XHRycV9kZWZhdWx0ID0gbWF4KG5ldGlmX2dldF9udW1fZGVmYXVsdF9yc3NfcXVldWVzKCksXG4gXHRcdFx0XHQgRU5JQ19SUV9NSU5fREVGQVVMVCk7XG4gXHRcdHJxX2F2YWlsID0gbWluMyhlbmljLVx1MDAzZXJxX2F2YWlsLCBFTklDX1JRX01BWCwgcnFfZGVmYXVsdCk7XG4gXHRcdG1heF9xdWV1ZXMgPSBtaW4oZW5pYy1cdTAwM2VjcV9hdmFpbCxcbi1cdFx0XHRcdCBlbmljLVx1MDAzZWludHJfYXZhaWwgLSBFTklDX01TSVhfUkVTRVJWRURfSU5UUik7XG4mIzQzO1x0XHRcdFx0IGVuaWMtXHUwMDNlaW50cl9hdmFpbCAtIEVOSUNfTVNJWF9SRVNFUlZFRF9JTlRSIC1cbiYjNDM7XHRcdFx0XHQgYWRtaW5fcmVzZXJ2ZSk7XG4gXHRcdGlmICh3cV9hdmFpbCAmIzQzOyBycV9hdmFpbCBcdTAwM2M9IG1heF9xdWV1ZXMpIHtcbiBcdFx0XHRlbmljLVx1MDAzZXJxX2NvdW50ID0gcnFfYXZhaWw7XG4gXHRcdFx0ZW5pYy1cdTAwM2V3cV9jb3VudCA9IHdxX2F2YWlsO1xuQEAgLTIzMzcsNiAmIzQzOzI0NjYsNyBAQCBzdGF0aWMgaW50IGVuaWNfYWRqdXN0X3Jlc291cmNlcyhzdHJ1Y3QgZW5pYyAqZW5pYylcbiBcdFx0ZW5pYy1cdTAwM2VpbnRyX2NvdW50ID0gZW5pYy1cdTAwM2VjcV9jb3VudCAmIzQzOyBFTklDX01TSVhfUkVTRVJWRURfSU5UUjtcbiBcbiBcdFx0YnJlYWs7XG4mIzQzO1x0fVxuIFx0ZGVmYXVsdDpcbiBcdFx0ZGV2X2VycihlbmljX2dldF9kZXYoZW5pYyksIFwmIzM0O1Vua25vd24gaW50ZXJydXB0IG1vZGVcXG5cJiMzNDspO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbkBAIC0yNjQxLDggJiM0MzsyNzcxLDEwIEBAIHN0YXRpYyB2b2lkIGVuaWNfaW91bm1hcChzdHJ1Y3QgZW5pYyAqZW5pYylcbiBzdGF0aWMgdm9pZCBlbmljX3NyaW92X2RldGVjdF92Zl90eXBlKHN0cnVjdCBlbmljICplbmljKVxuIHtcbiBcdHN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gZW5pYy1cdTAwM2VwZGV2O1xuLVx0aW50IHBvcztcbiYjNDM7XHR1NjQgc3VwcG9ydGVkX3ZlcnNpb25zLCBhMSA9IDA7XG4gXHR1MTYgdmZfZGV2X2lkO1xuJiM0MztcdGludCBwb3M7XG4mIzQzO1x0aW50IGVycjtcbiBcbiBcdGlmIChlbmljX2lzX3NyaW92X3ZmKGVuaWMpIHx8IGVuaWNfaXNfZHluYW1pYyhlbmljKSlcbiBcdFx0cmV0dXJuO1xuQEAgLTI2NjksNiAmIzQzOzI4MDEsMTQ5IEBAIHN0YXRpYyB2b2lkIGVuaWNfc3Jpb3ZfZGV0ZWN0X3ZmX3R5cGUoc3RydWN0IGVuaWMgKmVuaWMpXG4gXHRcdGVuaWMtXHUwMDNldmZfdHlwZSA9IEVOSUNfVkZfVFlQRV9OT05FO1xuIFx0XHRicmVhaztcbiBcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKGVuaWMtXHUwMDNldmZfdHlwZSAhPSBFTklDX1ZGX1RZUEVfVjIpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdC8qIEEgc3VjY2Vzc2Z1bCBjb21tYW5kIG1lYW5zIGZpcm13YXJlIHJlY29nbml6ZXNcbiYjNDM7XHQgKiBWSUNfRkVBVFVSRV9TUklPVjsgc3VwcG9ydGVkX3ZlcnNpb25zIGlzIGF2YWlsYWJsZVxuJiM0MztcdCAqIGZvciBzdWItZmVhdHVyZSB2ZXJzaW9uaW5nIGluIHRoZSBmdXR1cmUuXG4mIzQzO1x0ICovXG4mIzQzO1x0ZXJyID0gdm5pY19kZXZfZ2V0X3N1cHBvcnRlZF9mZWF0dXJlX3ZlcihlbmljLVx1MDAzZXZkZXYsXG4mIzQzO1x0XHRcdFx0XHRcdCBWSUNfRkVBVFVSRV9TUklPVixcbiYjNDM7XHRcdFx0XHRcdFx0IFx1MDAyNnN1cHBvcnRlZF92ZXJzaW9ucyxcbiYjNDM7XHRcdFx0XHRcdFx0IFx1MDAyNmExKTtcbiYjNDM7XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRkZXZfd2FybihcdTAwMjZwZGV2LVx1MDAzZWRldixcbiYjNDM7XHRcdFx0IFwmIzM0O1NSLUlPViBWMiBub3Qgc3VwcG9ydGVkIGJ5IGN1cnJlbnQgZmlybXdhcmUuIFVwZ3JhZGUgdG8gVklDIEZXIDUuMyg0LjcyKSBvciBoaWdoZXIuXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdGVuaWMtXHUwMDNldmZfdHlwZSA9IEVOSUNfVkZfVFlQRV9OT05FO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBfX21heWJlX3VudXNlZFxuJiM0MztlbmljX3NyaW92X3YyX2VuYWJsZShzdHJ1Y3QgZW5pYyAqZW5pYywgaW50IG51bV92ZnMpXG4mIzQzO3tcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHRpZiAoIWVuaWMtXHUwMDNlaGFzX2FkbWluX2NoYW5uZWwpIHtcbiYjNDM7XHRcdG5ldGRldl9lcnIoZW5pYy1cdTAwM2VuZXRkZXYsXG4mIzQzO1x0XHRcdCAgIFwmIzM0O1YyIFNSLUlPViByZXF1aXJlcyBhZG1pbiBjaGFubmVsIHJlc291cmNlc1xcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRlbmljLVx1MDAzZXZmX3N0YXRlID0ga2NhbGxvYyhudW1fdmZzLCBzaXplb2YoKmVuaWMtXHUwMDNldmZfc3RhdGUpLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRpZiAoIWVuaWMtXHUwMDNldmZfc3RhdGUpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gZW5pY19hZG1pbl9jaGFubmVsX29wZW4oZW5pYyk7XG4mIzQzO1x0aWYgKGVycikge1xuJiM0MztcdFx0bmV0ZGV2X2VycihlbmljLVx1MDAzZW5ldGRldixcbiYjNDM7XHRcdFx0ICAgXCYjMzQ7RmFpbGVkIHRvIG9wZW4gYWRtaW4gY2hhbm5lbDogJWRcXG5cJiMzNDssIGVycik7XG4mIzQzO1x0XHRnb3RvIGZyZWVfdmZfc3RhdGU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRlbmljX21ib3hfaW5pdChlbmljKTtcbiYjNDM7XG4mIzQzO1x0ZW5pYy1cdTAwM2VudW1fdmZzID0gbnVtX3ZmcztcbiYjNDM7XG4mIzQzO1x0ZXJyID0gcGNpX2VuYWJsZV9zcmlvdihlbmljLVx1MDAzZXBkZXYsIG51bV92ZnMpO1xuJiM0MztcdGlmIChlcnIpIHtcbiYjNDM7XHRcdG5ldGRldl9lcnIoZW5pYy1cdTAwM2VuZXRkZXYsXG4mIzQzO1x0XHRcdCAgIFwmIzM0O3BjaV9lbmFibGVfc3Jpb3YgZmFpbGVkOiAlZFxcblwmIzM0OywgZXJyKTtcbiYjNDM7XHRcdGdvdG8gY2xvc2VfYWRtaW47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRlbmljLVx1MDAzZXByaXZfZmxhZ3MgfD0gRU5JQ19TUklPVl9FTkFCTEVEO1xuJiM0MztcdHJldHVybiBudW1fdmZzO1xuJiM0MztcbiYjNDM7Y2xvc2VfYWRtaW46XG4mIzQzO1x0ZW5pYy1cdTAwM2VudW1fdmZzID0gMDtcbiYjNDM7XHRlbmljX2FkbWluX2NoYW5uZWxfY2xvc2UoZW5pYyk7XG4mIzQzO2ZyZWVfdmZfc3RhdGU6XG4mIzQzO1x0a2ZyZWUoZW5pYy1cdTAwM2V2Zl9zdGF0ZSk7XG4mIzQzO1x0ZW5pYy1cdTAwM2V2Zl9zdGF0ZSA9IE5VTEw7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgZW5pY19zcmlvdl92Ml9kaXNhYmxlKHN0cnVjdCBlbmljICplbmljKVxuJiM0Mzt7XG4mIzQzO1x0LyogU3RvcCBuZXcgVkYgbGluay1zdGF0ZSBicm9hZGNhc3RzIGJlZm9yZSB0ZWFyaW5nIGRvd24gdmZfc3RhdGUuXG4mIzQzO1x0ICogQ2xlYXJpbmcgRU5JQ19TUklPVl9FTkFCTEVEIG1ha2VzIGVuaWNfbGlua19jaGVjaygpIChjYWxsZWQgZnJvbVxuJiM0MztcdCAqIHRoZSBub3RpZnkgdGltZXIvSVNSKSBza2lwIHRoZSBWRiBub3RpZnkgcGF0aCwgYW5kIGNhbmNlbGxpbmdcbiYjNDM7XHQgKiBsaW5rX25vdGlmeV93b3JrIGVuc3VyZXMgYW55IGFscmVhZHktcXVldWVkIGJyb2FkY2FzdCBoYXMgZmluaXNoZWRcbiYjNDM7XHQgKiBiZWZvcmUgdmZfc3RhdGUgaXMgZnJlZWQsIGNsb3NpbmcgYSB1c2UtYWZ0ZXItZnJlZSB3aW5kb3cuXG4mIzQzO1x0ICovXG4mIzQzO1x0ZW5pYy1cdTAwM2Vwcml2X2ZsYWdzIFx1MDAyNj0gfkVOSUNfU1JJT1ZfRU5BQkxFRDtcbiYjNDM7XHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNmVuaWMtXHUwMDNlbGlua19ub3RpZnlfd29yayk7XG4mIzQzO1xuJiM0MztcdHBjaV9kaXNhYmxlX3NyaW92KGVuaWMtXHUwMDNlcGRldik7XG4mIzQzO1x0ZW5pY19hZG1pbl9jaGFubmVsX2Nsb3NlKGVuaWMpO1xuJiM0MztcdGtmcmVlKGVuaWMtXHUwMDNldmZfc3RhdGUpO1xuJiM0MztcdGVuaWMtXHUwMDNldmZfc3RhdGUgPSBOVUxMO1xuJiM0MztcdGVuaWMtXHUwMDNlbnVtX3ZmcyA9IDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgX19tYXliZV91bnVzZWRcbiYjNDM7ZW5pY19zcmlvdl9jb25maWd1cmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBudW1fdmZzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgZW5pYyAqZW5pYyA9IG5ldGRldl9wcml2KG5ldGRldik7XG4mIzQzO1x0c3RydWN0IGVuaWNfcG9ydF9wcm9maWxlICpwcDtcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHRpZiAobnVtX3ZmcyBcdTAwM2UgMCkge1xuJiM0MztcdFx0aWYgKGVuaWMtXHUwMDNlY29uZmlnLm1xX3N1YnZuaWNfY291bnQpIHtcbiYjNDM7XHRcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4mIzQzO1x0XHRcdFx0ICAgXCYjMzQ7U1ItSU9WIG5vdCBzdXBwb3J0ZWQgd2l0aCBtdWx0aS1xdWV1ZSBzdWItdm5pY3NcXG5cJiMzNDspO1xuJiM0MztcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0aWYgKGVuaWMtXHUwMDNldmZfdHlwZSA9PSBFTklDX1ZGX1RZUEVfTk9ORSkge1xuJiM0MztcdFx0XHRuZXRkZXZfZXJyKG5ldGRldixcbiYjNDM7XHRcdFx0XHQgICBcJiMzNDtTUi1JT1Ygbm90IHN1cHBvcnRlZCBvbiB0aGlzIGZpcm13YXJlIHZlcnNpb25cXG5cJiMzNDspO1xuJiM0MztcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0aWYgKGVuaWMtXHUwMDNldmZfdHlwZSA9PSBFTklDX1ZGX1RZUEVfVjIpXG4mIzQzO1x0XHRcdHJldHVybiBlbmljX3NyaW92X3YyX2VuYWJsZShlbmljLCBudW1fdmZzKTtcbiYjNDM7XG4mIzQzO1x0XHRwcCA9IGtjYWxsb2MobnVtX3Zmcywgc2l6ZW9mKCpwcCksIEdGUF9LRVJORUwpO1xuJiM0MztcdFx0aWYgKCFwcClcbiYjNDM7XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdFx0ZXJyID0gcGNpX2VuYWJsZV9zcmlvdihwZGV2LCBudW1fdmZzKTtcbiYjNDM7XHRcdGlmIChlcnIpIHtcbiYjNDM7XHRcdFx0a2ZyZWUocHApO1xuJiM0MztcdFx0XHRyZXR1cm4gZXJyO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGtmcmVlKGVuaWMtXHUwMDNlcHApO1xuJiM0MztcdFx0ZW5pYy1cdTAwM2VwcCA9IHBwO1xuJiM0MztcdFx0ZW5pYy1cdTAwM2VudW1fdmZzID0gbnVtX3ZmcztcbiYjNDM7XHRcdGVuaWMtXHUwMDNlcHJpdl9mbGFncyB8PSBFTklDX1NSSU9WX0VOQUJMRUQ7XG4mIzQzO1x0XHRyZXR1cm4gbnVtX3ZmcztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICghZW5pY19zcmlvdl9lbmFibGVkKGVuaWMpKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGlmIChlbmljLVx1MDAzZXZmX3R5cGUgPT0gRU5JQ19WRl9UWVBFX1YyKSB7XG4mIzQzO1x0XHRlbmljX3NyaW92X3YyX2Rpc2FibGUoZW5pYyk7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHBwID0ga3phbGxvY19vYmooKmVuaWMtXHUwMDNlcHAsIEdGUF9LRVJORUwpO1xuJiM0MztcdGlmICghcHApXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0cGNpX2Rpc2FibGVfc3Jpb3YocGRldik7XG4mIzQzO1x0ZW5pYy1cdTAwM2VudW1fdmZzID0gMDtcbiYjNDM7XHRlbmljLVx1MDAzZXByaXZfZmxhZ3MgXHUwMDI2PSB+RU5JQ19TUklPVl9FTkFCTEVEO1xuJiM0MztcbiYjNDM7XHRrZnJlZShlbmljLVx1MDAzZXBwKTtcbiYjNDM7XHRlbmljLVx1MDAzZXBwID0gcHA7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuIH1cbiAjZW5kaWZcbiBcbkBAIC0yNzY4LDEyICYjNDM7MzA0MywxOCBAQCBzdGF0aWMgaW50IGVuaWNfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXG4gXHRcdGdvdG8gZXJyX291dF92bmljX3VucmVnaXN0ZXI7XG4gXG4gI2lmZGVmIENPTkZJR19QQ0lfSU9WXG4tXHQvKiBHZXQgbnVtYmVyIG9mIHN1YnZuaWNzICovXG4mIzQzO1x0ZW5pY19zcmlvdl9kZXRlY3RfdmZfdHlwZShlbmljKTtcbiYjNDM7XG4mIzQzO1x0LyogQXV0by1lbmFibGUgU1ItSU9WIGlmIFZGcyB3ZXJlIHByZS1jb25maWd1cmVkIChlLmcuIGF0IGJvb3QpLlxuJiM0MztcdCAqIFYyIFZGcyByZXF1aXJlIHRoZSBhZG1pbiBjaGFubmVsLCB3aGljaCBpcyBub3QgeWV0IHNldCB1cCBhdCBwcm9iZVxuJiM0MztcdCAqIHRpbWU7IHVzZSBzeXNmcyAoZW5pY19zcmlvdl9jb25maWd1cmUpIHRvIGVuYWJsZSBWMiBTUi1JT1YgaW5zdGVhZC5cbiYjNDM7XHQgKi9cbiBcdHBvcyA9IHBjaV9maW5kX2V4dF9jYXBhYmlsaXR5KHBkZXYsIFBDSV9FWFRfQ0FQX0lEX1NSSU9WKTtcbiBcdGlmIChwb3MpIHtcbiBcdFx0cGNpX3JlYWRfY29uZmlnX3dvcmQocGRldiwgcG9zICYjNDM7IFBDSV9TUklPVl9UT1RBTF9WRixcbiBcdFx0XHRcdTAwMjZlbmljLVx1MDAzZW51bV92ZnMpO1xuLVx0XHRpZiAoZW5pYy1cdTAwM2VudW1fdmZzKSB7XG4mIzQzO1x0XHRpZiAoZW5pYy1cdTAwM2VudW1fdmZzIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIGVuaWMtXHUwMDNldmZfdHlwZSAhPSBFTklDX1ZGX1RZUEVfVjIpIHtcbiBcdFx0XHRlcnIgPSBwY2lfZW5hYmxlX3NyaW92KHBkZXYsIGVuaWMtXHUwMDNlbnVtX3Zmcyk7XG4gXHRcdFx0aWYgKGVycikge1xuIFx0XHRcdFx0ZGV2X2VycihkZXYsIFwmIzM0O1NSSU9WIGVuYWJsZSBmYWlsZWQsIGFib3J0aW5nLlwmIzM0O1xuQEAgLTI3ODUsNyAmIzQzOzMwNjYsNiBAQCBzdGF0aWMgaW50IGVuaWNfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXG4gXHRcdFx0bnVtX3BwcyA9IGVuaWMtXHUwMDNlbnVtX3ZmcztcbiBcdFx0fVxuIFx0fVxuLVx0ZW5pY19zcmlvdl9kZXRlY3RfdmZfdHlwZShlbmljKTtcbiAjZW5kaWZcbiBcbiBcdC8qIEFsbG9jYXRlIHN0cnVjdHVyZSBmb3IgcG9ydCBwcm9maWxlcyAqL1xuQEAgLTI4NTAsNiAmIzQzOzMxMzAsNDQgQEAgc3RhdGljIGludCBlbmljX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxuIFx0XHRnb3RvIGVycl9vdXRfZGV2X2Nsb3NlO1xuIFx0fVxuIFxuJiM0MztcdC8qIEluaXRpYWxpc2UgbGlua19ub3RpZnlfd29yayBiZWZvcmUgdGhlIFYyLVZGIGFkbWluLW9wZW4gYmxvY2sgYmVsb3c6XG4mIzQzO1x0ICogaXRzIGVycm9yIHBhdGggKGVycl9vdXRfYWRtaW5fY2xvc2UgLVx1MDAzZSBlbmljX2FkbWluX2NoYW5uZWxfY2xvc2UoKSAtXHUwMDNlXG4mIzQzO1x0ICogY2FuY2VsX3dvcmtfc3luYygpKSB3b3VsZCBvdGhlcndpc2UgYWN0IG9uIGFuIHVuaW5pdGlhbGlzZWQgd29yay5cbiYjNDM7XHQgKi9cbiYjNDM7XHRJTklUX1dPUksoXHUwMDI2ZW5pYy1cdTAwM2VsaW5rX25vdGlmeV93b3JrLCBlbmljX2xpbmtfbm90aWZ5X3dvcmtfaGFuZGxlcik7XG4mIzQzO1xuJiM0MztcdC8qIFYyIFZGOiBvcGVuIGFkbWluIGNoYW5uZWwgYW5kIHJlZ2lzdGVyIHdpdGggUEYuXG4mIzQzO1x0ICogTXVzdCBoYXBwZW4gYmVmb3JlIHJlZ2lzdGVyX25ldGRldiBzbyB0aGUgVkYgaXMgZnVsbHlcbiYjNDM7XHQgKiBpbml0aWFsaXplZCBiZWZvcmUgdGhlIGludGVyZmFjZSBpcyB2aXNpYmxlIHRvIHVzZXJzcGFjZS5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIGFkbWluX2NoYW5uZWxfb3BlbigpIHJ1bnMgYmVmb3JlIGVuaWNfbWJveF9pbml0KCkgaW5zdGFsbHNcbiYjNDM7XHQgKiB0aGUgcmVjZWl2ZSBoYW5kbGVyLiAgVGhpcyBpcyBzYWZlIGJlY2F1c2VcbiYjNDM7XHQgKiBlbmljX2FkbWluX3JxX2NxX3NlcnZpY2UoKSBjaGVja3MgYWRtaW5fcnFfaGFuZGxlciBiZWZvcmVcbiYjNDM7XHQgKiBlbnF1ZXVpbmcgYW55IHJlY2VpdmVkIGJ1ZmZlciwgc28gaW50ZXJydXB0cyB0aGF0IGZpcmVcbiYjNDM7XHQgKiBiZXR3ZWVuIG9wZW4gYW5kIG1ib3hfaW5pdCBhcmUgaGFybWxlc3NseSBkaXNjYXJkZWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGVuaWNfaXNfc3Jpb3ZfdmZfdjIoZW5pYykpIHtcbiYjNDM7XHRcdGVyciA9IGVuaWNfYWRtaW5fY2hhbm5lbF9vcGVuKGVuaWMpO1xuJiM0MztcdFx0aWYgKGVycikge1xuJiM0MztcdFx0XHRkZXZfZXJyKGRldixcbiYjNDM7XHRcdFx0XHRcJiMzNDtGYWlsZWQgdG8gb3BlbiBhZG1pbiBjaGFubmVsOiAlZFxcblwmIzM0OywgZXJyKTtcbiYjNDM7XHRcdFx0Z290byBlcnJfb3V0X2Rldl9kZWluaXQ7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRlbmljX21ib3hfaW5pdChlbmljKTtcbiYjNDM7XHRcdGVyciA9IGVuaWNfbWJveF92Zl9jYXBhYmlsaXR5X2NoZWNrKGVuaWMpO1xuJiM0MztcdFx0aWYgKGVycikge1xuJiM0MztcdFx0XHRkZXZfZXJyKGRldixcbiYjNDM7XHRcdFx0XHRcJiMzNDtNQk9YIGNhcGFiaWxpdHkgY2hlY2sgZmFpbGVkOiAlZFxcblwmIzM0OywgZXJyKTtcbiYjNDM7XHRcdFx0Z290byBlcnJfb3V0X2FkbWluX2Nsb3NlO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0ZXJyID0gZW5pY19tYm94X3ZmX3JlZ2lzdGVyKGVuaWMpO1xuJiM0MztcdFx0aWYgKGVycikge1xuJiM0MztcdFx0XHRkZXZfZXJyKGRldixcbiYjNDM7XHRcdFx0XHRcJiMzNDtNQk9YIFZGIHJlZ2lzdHJhdGlvbiBmYWlsZWQ6ICVkXFxuXCYjMzQ7LCBlcnIpO1xuJiM0MztcdFx0XHRnb3RvIGVycl9vdXRfYWRtaW5fY2xvc2U7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiBcdG5ldGlmX3NldF9yZWFsX251bV90eF9xdWV1ZXMobmV0ZGV2LCBlbmljLVx1MDAzZXdxX2NvdW50KTtcbiBcdG5ldGlmX3NldF9yZWFsX251bV9yeF9xdWV1ZXMobmV0ZGV2LCBlbmljLVx1MDAzZXJxX2NvdW50KTtcbiBcbkBAIC0yODc0LDcgJiM0MzszMTkyLDcgQEAgc3RhdGljIGludCBlbmljX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxuIFx0ZXJyID0gZW5pY19zZXRfbWFjX2FkZHIobmV0ZGV2LCBlbmljLVx1MDAzZW1hY19hZGRyKTtcbiBcdGlmIChlcnIpIHtcbiBcdFx0ZGV2X2VycihkZXYsIFwmIzM0O0ludmFsaWQgTUFDIGFkZHJlc3MsIGFib3J0aW5nXFxuXCYjMzQ7KTtcbi1cdFx0Z290byBlcnJfb3V0X2Rldl9kZWluaXQ7XG4mIzQzO1x0XHRnb3RvIGVycl9vdXRfYWRtaW5fY2xvc2U7XG4gXHR9XG4gXG4gXHRlbmljLVx1MDAzZXR4X2NvYWxlc2NlX3VzZWNzID0gZW5pYy1cdTAwM2Vjb25maWcuaW50cl90aW1lcl91c2VjO1xuQEAgLTI5NzIsMTEgJiM0MzszMjkwLDIzIEBAIHN0YXRpYyBpbnQgZW5pY19wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcbiBcdGVyciA9IHJlZ2lzdGVyX25ldGRldihuZXRkZXYpO1xuIFx0aWYgKGVycikge1xuIFx0XHRkZXZfZXJyKGRldiwgXCYjMzQ7Q2Fubm90IHJlZ2lzdGVyIG5ldCBkZXZpY2UsIGFib3J0aW5nXFxuXCYjMzQ7KTtcbi1cdFx0Z290byBlcnJfb3V0X2Rldl9kZWluaXQ7XG4mIzQzO1x0XHRnb3RvIGVycl9vdXRfYWRtaW5fY2xvc2U7XG4gXHR9XG4gXG4gXHRyZXR1cm4gMDtcbiBcbiYjNDM7ZXJyX291dF9hZG1pbl9jbG9zZTpcbiYjNDM7XHRpZiAoZW5pY19pc19zcmlvdl92Zl92MihlbmljKSkge1xuJiM0MztcdFx0aWYgKGVuaWMtXHUwMDNldmZfcmVnaXN0ZXJlZCkge1xuJiM0MztcdFx0XHRpbnQgdW5yZWdfZXJyID0gZW5pY19tYm94X3ZmX3VucmVnaXN0ZXIoZW5pYyk7XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAodW5yZWdfZXJyKVxuJiM0MztcdFx0XHRcdG5ldGRldl93YXJuKG5ldGRldixcbiYjNDM7XHRcdFx0XHRcdCAgICBcJiMzNDtGYWlsZWQgdG8gdW5yZWdpc3RlciBmcm9tIFBGOiAlZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdCAgICB1bnJlZ19lcnIpO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0ZW5pY19hZG1pbl9jaGFubmVsX2Nsb3NlKGVuaWMpO1xuJiM0MztcdH1cbiBlcnJfb3V0X2Rldl9kZWluaXQ6XG4gXHRlbmljX2Rldl9kZWluaXQoZW5pYyk7XG4gZXJyX291dF9kZXZfY2xvc2U6XG5AQCAtMzAxMiwxNiAmIzQzOzMzNDIsNDIgQEAgc3RhdGljIHZvaWQgZW5pY19yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gXHRcdHN0cnVjdCBlbmljICplbmljID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiBcbiBcdFx0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZlbmljLVx1MDAzZXJlc2V0KTtcbiYjNDM7XHRcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2ZW5pYy1cdTAwM2V0eF9oYW5nX3Jlc2V0KTtcbiBcdFx0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZlbmljLVx1MDAzZWNoYW5nZV9tdHVfd29yayk7XG4mIzQzO1xuJiM0MztcdFx0LyogQ2xvc2UgdGhlIGFkbWluIGNoYW5uZWwgYW5kIHVucmVnaXN0ZXIgZnJvbSB0aGUgUEYgYmVmb3JlXG4mIzQzO1x0XHQgKiB1bnJlZ2lzdGVyX25ldGRldigpIHRvIHByZXZlbnQgYSBsYXRlIFBGIG5vdGlmaWNhdGlvbiBmcm9tXG4mIzQzO1x0XHQgKiB0b3VjaGluZyBhIG5ldGRldiB0aGF0IGhhcyBiZWVuIGZyZWVkLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAoZW5pY19pc19zcmlvdl92Zl92MihlbmljKSkge1xuJiM0MztcdFx0XHRpZiAoZW5pYy1cdTAwM2V2Zl9yZWdpc3RlcmVkKSB7XG4mIzQzO1x0XHRcdFx0aW50IHVucmVnX2VyciA9IGVuaWNfbWJveF92Zl91bnJlZ2lzdGVyKGVuaWMpO1xuJiM0MztcbiYjNDM7XHRcdFx0XHRpZiAodW5yZWdfZXJyKVxuJiM0MztcdFx0XHRcdFx0bmV0ZGV2X3dhcm4obmV0ZGV2LFxuJiM0MztcdFx0XHRcdFx0XHQgICAgXCYjMzQ7RmFpbGVkIHRvIHVucmVnaXN0ZXIgZnJvbSBQRjogJWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0XHRcdCAgICB1bnJlZ19lcnIpO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHRcdGVuaWNfYWRtaW5fY2hhbm5lbF9jbG9zZShlbmljKTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4gXHRcdHVucmVnaXN0ZXJfbmV0ZGV2KG5ldGRldik7XG4tXHRcdGVuaWNfZGV2X2RlaW5pdChlbmljKTtcbi1cdFx0dm5pY19kZXZfY2xvc2UoZW5pYy1cdTAwM2V2ZGV2KTtcbiYjNDM7XHRcdC8qIHVucmVnaXN0ZXJfbmV0ZGV2KCkgLVx1MDAzZSBlbmljX3N0b3AoKSBzdG9wcyB0aGUgbm90aWZ5IHRpbWVyLCBzb1xuJiM0MztcdFx0ICogbm8gbmV3IGxpbmtfbm90aWZ5X3dvcmsgY2FuIGJlIHF1ZXVlZCBwYXN0IHRoaXMgcG9pbnQuICBDYW5jZWxcbiYjNDM7XHRcdCAqIHVuY29uZGl0aW9uYWxseSB0byBjb3ZlciB0aGUgbmFycm93IHdpbmRvdyB3aGVyZVxuJiM0MztcdFx0ICogZW5pY19saW5rX2NoZWNrKCkgc2NoZWR1bGVkIGl0IGp1c3QgYXMgU1ItSU9WIHdhcyBkaXNhYmxlZC5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZlbmljLVx1MDAzZWxpbmtfbm90aWZ5X3dvcmspO1xuICNpZmRlZiBDT05GSUdfUENJX0lPVlxuIFx0XHRpZiAoZW5pY19zcmlvdl9lbmFibGVkKGVuaWMpKSB7XG4tXHRcdFx0cGNpX2Rpc2FibGVfc3Jpb3YocGRldik7XG4tXHRcdFx0ZW5pYy1cdTAwM2Vwcml2X2ZsYWdzIFx1MDAyNj0gfkVOSUNfU1JJT1ZfRU5BQkxFRDtcbiYjNDM7XHRcdFx0aWYgKGVuaWMtXHUwMDNldmZfdHlwZSA9PSBFTklDX1ZGX1RZUEVfVjIpXG4mIzQzO1x0XHRcdFx0ZW5pY19zcmlvdl92Ml9kaXNhYmxlKGVuaWMpO1xuJiM0MztcdFx0XHRlbHNlXG4mIzQzO1x0XHRcdFx0cGNpX2Rpc2FibGVfc3Jpb3YocGRldik7XG4gXHRcdH1cbiAjZW5kaWZcbiYjNDM7XHRcdGVuaWNfZGV2X2RlaW5pdChlbmljKTtcbiYjNDM7XHRcdHZuaWNfZGV2X2Nsb3NlKGVuaWMtXHUwMDNldmRldik7XG4gXHRcdGtmcmVlKGVuaWMtXHUwMDNlcHApO1xuIFx0XHR2bmljX2Rldl91bnJlZ2lzdGVyKGVuaWMtXHUwMDNldmRldik7XG4gXHRcdGVuaWNfaW91bm1hcChlbmljKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfbWJveC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21ib3guY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi41Y2RhZjVhMGU1MjQ2N1xuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21ib3guY1xuQEAgLTAsMCAmIzQzOzEsNjQwIEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiYjNDM7Ly8gQ29weXJpZ2h0IDIwMjUgQ2lzY28gU3lzdGVtcywgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2tlcm5lbC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGRldmljZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2RtYS1tYXBwaW5nLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZGVsYXkuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9jb21wbGV0aW9uLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3ZuaWNfZGV2LmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7dm5pY193cS5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3ZuaWNfY3EuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtlbmljLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7ZW5pY19hZG1pbi5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2VuaWNfbWJveC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3dxX2VuZXRfZGVzYy5oXCYjMzQ7XG4mIzQzO1xuJiM0MzsjZGVmaW5lIEVOSUNfTUJPWF9QT0xMX1RJTUVPVVRfVVNcdDUwMDAwMDBcbiYjNDM7I2RlZmluZSBFTklDX01CT1hfUE9MTF9JTlRFUlZBTF9VU1x0MTAwXG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBlbmljX21ib3hfZmlsbF9oZHIoc3RydWN0IGVuaWMgKmVuaWMsIHN0cnVjdCBlbmljX21ib3hfaGRyICpoZHIsXG4mIzQzO1x0XHRcdCAgICAgICB1OCBtc2dfdHlwZSwgdTE2IGRzdF92bmljX2lkLCB1MTYgbXNnX2xlbilcbiYjNDM7e1xuJiM0MztcdG1lbXNldChoZHIsIDAsIHNpemVvZigqaGRyKSk7XG4mIzQzO1x0aGRyLVx1MDAzZWRzdF92bmljX2lkID0gY3B1X3RvX2xlMTYoZHN0X3ZuaWNfaWQpO1xuJiM0MztcdGhkci1cdTAwM2Vtc2dfdHlwZSA9IG1zZ190eXBlO1xuJiM0MztcdGhkci1cdTAwM2Vtc2dfbGVuID0gY3B1X3RvX2xlMTYobXNnX2xlbik7XG4mIzQzO1x0aGRyLVx1MDAzZW1zZ19udW0gPSBjcHVfdG9fbGU2NCgmIzQzOyYjNDM7ZW5pYy1cdTAwM2VtYm94X21zZ19udW0pO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgZW5pY19tYm94X3NlbmRfbXNnKHN0cnVjdCBlbmljICplbmljLCB1OCBtc2dfdHlwZSwgdTE2IGRzdF92bmljX2lkLFxuJiM0MztcdFx0ICAgICAgIHZvaWQgKnBheWxvYWQsIHUxNiBwYXlsb2FkX2xlbilcbiYjNDM7e1xuJiM0MztcdHUxNiB0b3RhbF9sZW4gPSBzaXplb2Yoc3RydWN0IGVuaWNfbWJveF9oZHIpICYjNDM7IHBheWxvYWRfbGVuO1xuJiM0MztcdHN0cnVjdCB2bmljX3dxICp3cSA9IFx1MDAyNmVuaWMtXHUwMDNlYWRtaW5fd3E7XG4mIzQzO1x0c3RydWN0IHdxX2VuZXRfZGVzYyAqZGVzYztcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHRpbWVvdXQ7XG4mIzQzO1x0ZG1hX2FkZHJfdCBkbWFfYWRkcjtcbiYjNDM7XHR1MTYgdmxhbl90YWc7XG4mIzQzO1x0dm9pZCAqYnVmO1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdC8qIFNlcmlhbGl6ZSBNQk9YIHNlbmRzLiBUaGUgYWRtaW4gY2hhbm5lbCBpcyBhIGxvdy1mcmVxdWVuY3lcbiYjNDM7XHQgKiBjb250cm9sIHBhdGg7IGhvbGRpbmcgdGhlIG11dGV4IGFjcm9zcyB0aGUgcG9sbCBpcyBhY2NlcHRhYmxlLlxuJiM0MztcdCAqL1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2ZW5pYy1cdTAwM2VtYm94X2xvY2spO1xuJiM0MztcbiYjNDM7XHRpZiAoIWVuaWMtXHUwMDNlaGFzX2FkbWluX2NoYW5uZWwgfHwgUkVBRF9PTkNFKGVuaWMtXHUwMDNlbWJveF9zZW5kX2Rpc2FibGVkKSkge1xuJiM0MztcdFx0ZXJyID0gLUVOT0RFVjtcbiYjNDM7XHRcdGdvdG8gdW5sb2NrO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHZuaWNfd3FfZGVzY19hdmFpbCh3cSkgPT0gMCkge1xuJiM0MztcdFx0ZXJyID0gLUVOT1NQQztcbiYjNDM7XHRcdGdvdG8gdW5sb2NrO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0YnVmID0ga21hbGxvYyh0b3RhbF9sZW4sIEdGUF9LRVJORUwpO1xuJiM0MztcdGlmICghYnVmKSB7XG4mIzQzO1x0XHRlcnIgPSAtRU5PTUVNO1xuJiM0MztcdFx0Z290byB1bmxvY2s7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRlbmljX21ib3hfZmlsbF9oZHIoZW5pYywgYnVmLCBtc2dfdHlwZSwgZHN0X3ZuaWNfaWQsIHRvdGFsX2xlbik7XG4mIzQzO1x0aWYgKHBheWxvYWRfbGVuKSB7XG4mIzQzO1x0XHR2b2lkICpkc3QgPSBidWYgJiM0Mzsgc2l6ZW9mKHN0cnVjdCBlbmljX21ib3hfaGRyKTtcbiYjNDM7XG4mIzQzO1x0XHRtZW1jcHkoZHN0LCBwYXlsb2FkLCBwYXlsb2FkX2xlbik7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRkbWFfYWRkciA9IGRtYV9tYXBfc2luZ2xlKFx1MDAyNmVuaWMtXHUwMDNlcGRldi1cdTAwM2VkZXYsIGJ1ZiwgdG90YWxfbGVuLFxuJiM0MztcdFx0XHRcdCAgRE1BX1RPX0RFVklDRSk7XG4mIzQzO1x0aWYgKGRtYV9tYXBwaW5nX2Vycm9yKFx1MDAyNmVuaWMtXHUwMDNlcGRldi1cdTAwM2VkZXYsIGRtYV9hZGRyKSkge1xuJiM0MztcdFx0a2ZyZWUoYnVmKTtcbiYjNDM7XHRcdGVyciA9IC1FTk9NRU07XG4mIzQzO1x0XHRnb3RvIHVubG9jaztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIEZpcm13YXJlIHVzZXMgdmxhbiBmaWVsZCBmb3Igcm91dGluZzogMCA9IFBGLCAxLWJhc2VkID0gVkYgaW5kZXggKi9cbiYjNDM7XHRpZiAoZHN0X3ZuaWNfaWQgPT0gRU5JQ19NQk9YX0RTVF9QRilcbiYjNDM7XHRcdHZsYW5fdGFnID0gMDtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHR2bGFuX3RhZyA9IGRzdF92bmljX2lkICYjNDM7IDE7XG4mIzQzO1xuJiM0MztcdGRlc2MgPSB2bmljX3dxX25leHRfZGVzYyh3cSk7XG4mIzQzO1x0d3FfZW5ldF9kZXNjX2VuYyhkZXNjLCAodTY0KWRtYV9hZGRyIHwgVk5JQ19QQUREUl9UQVJHRVQsXG4mIzQzO1x0XHRcdCB0b3RhbF9sZW4sXG4mIzQzO1x0XHRcdCAwLCAwLCAwLCAgICAgICAvKiBtc3MsIGhkcl9sZW4sIG9mZmxvYWRfbW9kZSAqL1xuJiM0MztcdFx0XHQgMSwgMSwgICAgICAgICAgLyogZW9wLCBjcV9lbnRyeSAqL1xuJiM0MztcdFx0XHQgMCwgICAgICAgICAgICAgLyogZmNvZV9lbmNhcCAqL1xuJiM0MztcdFx0XHQgMSwgdmxhbl90YWcsICAgLyogdmxhbl90YWdfaW5zZXJ0LCB2bGFuX3RhZyAqL1xuJiM0MztcdFx0XHQgMCk7ICAgICAgICAgICAgLyogbG9vcGJhY2sgKi9cbiYjNDM7XHR2bmljX3dxX3Bvc3Qod3EsIGJ1ZiwgZG1hX2FkZHIsIHRvdGFsX2xlbixcbiYjNDM7XHRcdCAgICAgMSwgMSwgICAgICAgICAgICAgIC8qIHNvcCwgZW9wICovXG4mIzQzO1x0XHQgICAgIDEsIDEsICAgICAgICAgICAgICAvKiBkZXNjX3NraXBfY250LCBjcV9lbnRyeSAqL1xuJiM0MztcdFx0ICAgICAwLCAwKTsgICAgICAgICAgICAgLyogY29tcHJlc3NlZF9zZW5kLCB3cmlkICovXG4mIzQzO1x0dm5pY193cV9kb29yYmVsbCh3cSk7XG4mIzQzO1xuJiM0MztcdHRpbWVvdXQgPSBqaWZmaWVzICYjNDM7IHVzZWNzX3RvX2ppZmZpZXMoRU5JQ19NQk9YX1BPTExfVElNRU9VVF9VUyk7XG4mIzQzO1x0ZXJyID0gLUVUSU1FRE9VVDtcbiYjNDM7XHR3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgdGltZW91dCkpIHtcbiYjNDM7XHRcdGlmIChlbmljX2FkbWluX3dxX2NxX3NlcnZpY2UoZW5pYykpIHtcbiYjNDM7XHRcdFx0ZXJyID0gMDtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHR1c2xlZXBfcmFuZ2UoRU5JQ19NQk9YX1BPTExfSU5URVJWQUxfVVMsXG4mIzQzO1x0XHRcdCAgICAgRU5JQ19NQk9YX1BPTExfSU5URVJWQUxfVVMgJiM0MzsgNTApO1xuJiM0MztcdH1cbiYjNDM7XHQvKiBGaW5hbCBjaGVjayBpbiBjYXNlIGNvbXBsZXRpb24gYXJyaXZlZCBkdXJpbmcgdGhlIGxhc3Qgc2xlZXAgKi9cbiYjNDM7XHRpZiAoZXJyIFx1MDAyNlx1MDAyNiBlbmljX2FkbWluX3dxX2NxX3NlcnZpY2UoZW5pYykpXG4mIzQzO1x0XHRlcnIgPSAwO1xuJiM0MztcbiYjNDM7XHRpZiAoIWVycikge1xuJiM0MztcdFx0d3EtXHUwMDNldG9fY2xlYW4gPSB3cS1cdTAwM2V0b19jbGVhbi1cdTAwM2VuZXh0O1xuJiM0MztcdFx0d3EtXHUwMDNlcmluZy5kZXNjX2F2YWlsJiM0MzsmIzQzOztcbiYjNDM7XHRcdGRtYV91bm1hcF9zaW5nbGUoXHUwMDI2ZW5pYy1cdTAwM2VwZGV2LVx1MDAzZWRldiwgZG1hX2FkZHIsIHRvdGFsX2xlbixcbiYjNDM7XHRcdFx0XHQgRE1BX1RPX0RFVklDRSk7XG4mIzQzO1x0XHRrZnJlZShidWYpO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRuZXRkZXZfZXJyKGVuaWMtXHUwMDNlbmV0ZGV2LFxuJiM0MztcdFx0XHQgICBcJiMzNDtNQk9YIHNlbmQgdGltZWQgb3V0ICh0eXBlICV1IGRzdCAldSksIGRpc2FibGluZyBjaGFubmVsXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgICBtc2dfdHlwZSwgZHN0X3ZuaWNfaWQpO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIFRoZSBXUSBkZXNjcmlwdG9yIGlzIHN0aWxsIGxpdmUgaW4gaGFyZHdhcmUuIERvIG5vdCB1bm1hcFxuJiM0MztcdFx0ICogb3IgZnJlZSB0aGUgYnVmZmVyOiB0aGUgZGV2aWNlIG1heSBzdGlsbCBETUEgZnJvbSBkbWFfYWRkci5cbiYjNDM7XHRcdCAqIE1hcmsgdGhlIGNoYW5uZWwgdW51c2FibGUgc28gbm8gZnVydGhlciBzZW5kcyBhcmUgYXR0ZW1wdGVkLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRXUklURV9PTkNFKGVuaWMtXHUwMDNlbWJveF9zZW5kX2Rpc2FibGVkLCB0cnVlKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdG5ldGRldl9kYmcoZW5pYy1cdTAwM2VuZXRkZXYsXG4mIzQzO1x0XHQgICBcJiMzNDtNQk9YIHNlbmQgbXNnX3R5cGUgJXUgZHN0ICV1IHZsYW4gJXUgZXJyICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0ICAgbXNnX3R5cGUsIGRzdF92bmljX2lkLCB2bGFuX3RhZywgZXJyKTtcbiYjNDM7dW5sb2NrOlxuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZlbmljLVx1MDAzZW1ib3hfbG9jayk7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBlbmljX21ib3hfd2FpdF9yZXBseShzdHJ1Y3QgZW5pYyAqZW5pYywgdW5zaWduZWQgbG9uZyB0aW1lb3V0X21zKVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBsZWZ0O1xuJiM0MztcbiYjNDM7XHRsZWZ0ID0gd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KFx1MDAyNmVuaWMtXHUwMDNlbWJveF9jb21wLFxuJiM0MztcdFx0XHRcdFx0ICAgbXNlY3NfdG9famlmZmllcyh0aW1lb3V0X21zKSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBsZWZ0ID8gMCA6IC1FVElNRURPVVQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBlbmljX21ib3hfc2VuZF9saW5rX3N0YXRlKHN0cnVjdCBlbmljICplbmljLCB1MTYgdmZfaWQsIHUzMiBsaW5rX3N0YXRlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGVuaWNfbWJveF9wZl9saW5rX3N0YXRlX25vdGlmX21zZyBub3RpZiA9IHt9O1xuJiM0MztcbiYjNDM7XHRpZiAoIWVuaWMtXHUwMDNldmZfc3RhdGUgfHwgdmZfaWQgXHUwMDNlPSBlbmljLVx1MDAzZW51bV92ZnMgfHxcbiYjNDM7XHQgICAgIWVuaWMtXHUwMDNldmZfc3RhdGVbdmZfaWRdLnJlZ2lzdGVyZWQpIHtcbiYjNDM7XHRcdG5ldGRldl9kYmcoZW5pYy1cdTAwM2VuZXRkZXYsXG4mIzQzO1x0XHRcdCAgIFwmIzM0O01CT1g6IHNraXAgbGluayBzdGF0ZSB0byB1bnJlZ2lzdGVyZWQgVkYgJXVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgIHZmX2lkKTtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bm90aWYubGlua19zdGF0ZSA9IGNwdV90b19sZTMyKGxpbmtfc3RhdGUpO1xuJiM0MztcdHJldHVybiBlbmljX21ib3hfc2VuZF9tc2coZW5pYywgRU5JQ19NQk9YX1BGX0xJTktfU1RBVEVfTk9USUYsIHZmX2lkLFxuJiM0MztcdFx0XHRcdCAgXHUwMDI2bm90aWYsIHNpemVvZihub3RpZikpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGVuaWNfbWJveF9wZl9oYW5kbGVfY2FwYWJpbGl0eShzdHJ1Y3QgZW5pYyAqZW5pYywgdm9pZCAqbXNnLFxuJiM0MztcdFx0XHRcdFx0ICB1MTYgdmZfaWQsIHU2NCBtc2dfbnVtKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGVuaWNfbWJveF92Zl9jYXBhYmlsaXR5X3JlcGx5X21zZyByZXBseSA9IHt9O1xuJiM0MztcbiYjNDM7XHRyZXBseS5yZXBseS5yZXRfbWFqb3IgPSBjcHVfdG9fbGUxNigwKTtcbiYjNDM7XHRyZXBseS52ZXJzaW9uID0gY3B1X3RvX2xlMzIoRU5JQ19NQk9YX0NBUF9WRVJTSU9OXzEpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZW5pY19tYm94X3NlbmRfbXNnKGVuaWMsIEVOSUNfTUJPWF9WRl9DQVBBQklMSVRZX1JFUExZLCB2Zl9pZCxcbiYjNDM7XHRcdFx0XHQgIFx1MDAyNnJlcGx5LCBzaXplb2YocmVwbHkpKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBlbmljX21ib3hfcGZfaGFuZGxlX3JlZ2lzdGVyKHN0cnVjdCBlbmljICplbmljLCB2b2lkICptc2csXG4mIzQzO1x0XHRcdFx0XHR1MTYgdmZfaWQsIHU2NCBtc2dfbnVtKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGVuaWNfbWJveF92Zl9yZWdpc3Rlcl9yZXBseV9tc2cgcmVwbHkgPSB7fTtcbiYjNDM7XHR1MzIgbGlua19zdGF0ZTtcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHRpZiAoIWVuaWMtXHUwMDNldmZfc3RhdGUgfHwgdmZfaWQgXHUwMDNlPSBlbmljLVx1MDAzZW51bV92ZnMpIHtcbiYjNDM7XHRcdGlmIChuZXRfcmF0ZWxpbWl0KCkpXG4mIzQzO1x0XHRcdG5ldGRldl93YXJuKGVuaWMtXHUwMDNlbmV0ZGV2LFxuJiM0MztcdFx0XHRcdCAgICBcJiMzNDtNQk9YOiByZWdpc3RlciBmcm9tIGludmFsaWQgVkYgJXVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgIHZmX2lkKTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogVkYgcmUtcmVnaXN0ZXJpbmcgKGUuZy4gZ3Vlc3QgcmVib290IHdpdGhvdXQgY2xlYW4gdW5yZWdpc3Rlcik6XG4mIzQzO1x0ICogbWFyayB0aGUgcHJldmlvdXMgcmVnaXN0cmF0aW9uIGluYWN0aXZlIGJlZm9yZSBhY2NlcHRpbmcgdGhlIG5ldyBvbmUuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGVuaWMtXHUwMDNldmZfc3RhdGVbdmZfaWRdLnJlZ2lzdGVyZWQpIHtcbiYjNDM7XHRcdG5ldGRldl9kYmcoZW5pYy1cdTAwM2VuZXRkZXYsXG4mIzQzO1x0XHRcdCAgIFwmIzM0O01CT1g6IFZGICV1IHJlLXJlZ2lzdGVyLCBjbGVhbmluZyBwcmV2aW91cyBzdGF0ZVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgdmZfaWQpO1xuJiM0MztcdFx0ZW5pYy1cdTAwM2V2Zl9zdGF0ZVt2Zl9pZF0ucmVnaXN0ZXJlZCA9IGZhbHNlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmVwbHkucmVwbHkucmV0X21ham9yID0gY3B1X3RvX2xlMTYoMCk7XG4mIzQzO1x0ZXJyID0gZW5pY19tYm94X3NlbmRfbXNnKGVuaWMsIEVOSUNfTUJPWF9WRl9SRUdJU1RFUl9SRVBMWSwgdmZfaWQsXG4mIzQzO1x0XHRcdFx0IFx1MDAyNnJlcGx5LCBzaXplb2YocmVwbHkpKTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0cmV0dXJuIGVycjtcbiYjNDM7XG4mIzQzO1x0ZW5pYy1cdTAwM2V2Zl9zdGF0ZVt2Zl9pZF0ucmVnaXN0ZXJlZCA9IHRydWU7XG4mIzQzO1x0aWYgKG5ldF9yYXRlbGltaXQoKSlcbiYjNDM7XHRcdG5ldGRldl9pbmZvKGVuaWMtXHUwMDNlbmV0ZGV2LCBcJiMzNDtWRiAldSByZWdpc3RlcmVkIHZpYSBNQk9YXFxuXCYjMzQ7LCB2Zl9pZCk7XG4mIzQzO1xuJiM0MztcdGxpbmtfc3RhdGUgPSBuZXRpZl9jYXJyaWVyX29rKGVuaWMtXHUwMDNlbmV0ZGV2KSA/XG4mIzQzO1x0XHRFTklDX01CT1hfTElOS19TVEFURV9FTkFCTEUgOlxuJiM0MztcdFx0RU5JQ19NQk9YX0xJTktfU1RBVEVfRElTQUJMRTtcbiYjNDM7XHRlcnIgPSBlbmljX21ib3hfc2VuZF9saW5rX3N0YXRlKGVuaWMsIHZmX2lkLCBsaW5rX3N0YXRlKTtcbiYjNDM7XHRpZiAoZXJyIFx1MDAyNlx1MDAyNiBuZXRfcmF0ZWxpbWl0KCkpXG4mIzQzO1x0XHRuZXRkZXZfd2FybihlbmljLVx1MDAzZW5ldGRldixcbiYjNDM7XHRcdFx0ICAgIFwmIzM0O1ZGICV1OiBmYWlsZWQgdG8gc2VuZCBpbml0aWFsIGxpbmsgc3RhdGU6ICVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgICAgdmZfaWQsIGVycik7XG4mIzQzO1x0LyogUmVnaXN0cmF0aW9uIHN1Y2NlZWRlZDsgaW5pdGlhbCBsaW5rIHN0YXRlIG5vdGlmaWNhdGlvbiBzZW50XG4mIzQzO1x0ICogYWJvdmUuICBTdWJzZXF1ZW50IGxpbmsgc3RhdGUgY2hhbmdlcyBhcmUgc2VudCBmcm9tIHRoZSBQRlxuJiM0MztcdCAqIHdoZW4gZW5pY19saW5rX2NoZWNrKCkgZGV0ZWN0cyBjYXJyaWVyIGNoYW5nZXMuXG4mIzQzO1x0ICovXG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgZW5pY19tYm94X3BmX2hhbmRsZV91bnJlZ2lzdGVyKHN0cnVjdCBlbmljICplbmljLCB2b2lkICptc2csXG4mIzQzO1x0XHRcdFx0XHQgIHUxNiB2Zl9pZCwgdTY0IG1zZ19udW0pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZW5pY19tYm94X3ZmX3JlZ2lzdGVyX3JlcGx5X21zZyByZXBseSA9IHt9O1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdGlmICghZW5pYy1cdTAwM2V2Zl9zdGF0ZSB8fCB2Zl9pZCBcdTAwM2U9IGVuaWMtXHUwMDNlbnVtX3Zmcykge1xuJiM0MztcdFx0aWYgKG5ldF9yYXRlbGltaXQoKSlcbiYjNDM7XHRcdFx0bmV0ZGV2X3dhcm4oZW5pYy1cdTAwM2VuZXRkZXYsXG4mIzQzO1x0XHRcdFx0ICAgIFwmIzM0O01CT1g6IHVucmVnaXN0ZXIgZnJvbSBpbnZhbGlkIFZGICV1XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgICB2Zl9pZCk7XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIFZGIGlzIHVubG9hZGluZzsgY2xlYXIgbG9jYWwgc3RhdGUgcmVnYXJkbGVzcyBvZiB3aGV0aGVyXG4mIzQzO1x0ICogdGhlIHJlcGx5IGlzIHN1Y2Nlc3NmdWxseSBkZWxpdmVyZWQgdG8gYXZvaWQgdGhlIFBGIHRyZWF0aW5nXG4mIzQzO1x0ICogYSBkZWFkIFZGIGFzIHN0aWxsIHJlZ2lzdGVyZWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0ZW5pYy1cdTAwM2V2Zl9zdGF0ZVt2Zl9pZF0ucmVnaXN0ZXJlZCA9IGZhbHNlO1xuJiM0MztcbiYjNDM7XHRyZXBseS5yZXBseS5yZXRfbWFqb3IgPSBjcHVfdG9fbGUxNigwKTtcbiYjNDM7XHRlcnIgPSBlbmljX21ib3hfc2VuZF9tc2coZW5pYywgRU5JQ19NQk9YX1ZGX1VOUkVHSVNURVJfUkVQTFksIHZmX2lkLFxuJiM0MztcdFx0XHRcdCBcdTAwMjZyZXBseSwgc2l6ZW9mKHJlcGx5KSk7XG4mIzQzO1xuJiM0MztcdGlmIChuZXRfcmF0ZWxpbWl0KCkpXG4mIzQzO1x0XHRuZXRkZXZfaW5mbyhlbmljLVx1MDAzZW5ldGRldixcbiYjNDM7XHRcdFx0ICAgIFwmIzM0O1ZGICV1IHVucmVnaXN0ZXJlZCB2aWEgTUJPWFxcblwmIzM0OywgdmZfaWQpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZXJyO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBlbmljX21ib3hfcGZfcHJvY2Vzc19tc2coc3RydWN0IGVuaWMgKmVuaWMsXG4mIzQzO1x0XHRcdFx0ICAgICBzdHJ1Y3QgZW5pY19tYm94X2hkciAqaGRyLCB2b2lkICpwYXlsb2FkKVxuJiM0Mzt7XG4mIzQzO1x0dTE2IHZmX2lkID0gbGUxNl90b19jcHUoaGRyLVx1MDAzZXNyY192bmljX2lkKTtcbiYjNDM7XHR1MTYgbXNnX2xlbiA9IGxlMTZfdG9fY3B1KGhkci1cdTAwM2Vtc2dfbGVuKTtcbiYjNDM7XHRpbnQgZXJyID0gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFlbmljLVx1MDAzZXZmX3N0YXRlKSB7XG4mIzQzO1x0XHRuZXRkZXZfZGJnKGVuaWMtXHUwMDNlbmV0ZGV2LFxuJiM0MztcdFx0XHQgICBcJiMzNDtNQk9YOiBQRiByZWNlaXZlZCBtc2cgYnV0IFNSSU9WIG5vdCBhY3RpdmVcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHZmX2lkIFx1MDAzZT0gZW5pYy1cdTAwM2VudW1fdmZzKSB7XG4mIzQzO1x0XHRpZiAobmV0X3JhdGVsaW1pdCgpKVxuJiM0MztcdFx0XHRuZXRkZXZfd2FybihlbmljLVx1MDAzZW5ldGRldixcbiYjNDM7XHRcdFx0XHQgICAgXCYjMzQ7TUJPWDogUEYgcmVjZWl2ZWQgbXNnIGZyb20gaW52YWxpZCBWRiAldVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICAgdmZfaWQpO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0c3dpdGNoIChoZHItXHUwMDNlbXNnX3R5cGUpIHtcbiYjNDM7XHRjYXNlIEVOSUNfTUJPWF9WRl9DQVBBQklMSVRZX1JFUVVFU1Q6XG4mIzQzO1x0XHRlcnIgPSBlbmljX21ib3hfcGZfaGFuZGxlX2NhcGFiaWxpdHkoZW5pYywgcGF5bG9hZCwgdmZfaWQsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgbGU2NF90b19jcHUoaGRyLVx1MDAzZW1zZ19udW0pKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgRU5JQ19NQk9YX1ZGX1JFR0lTVEVSX1JFUVVFU1Q6XG4mIzQzO1x0XHRlcnIgPSBlbmljX21ib3hfcGZfaGFuZGxlX3JlZ2lzdGVyKGVuaWMsIHBheWxvYWQsIHZmX2lkLFxuJiM0MztcdFx0XHRcdFx0XHQgICBsZTY0X3RvX2NwdShoZHItXHUwMDNlbXNnX251bSkpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBFTklDX01CT1hfVkZfVU5SRUdJU1RFUl9SRVFVRVNUOlxuJiM0MztcdFx0ZXJyID0gZW5pY19tYm94X3BmX2hhbmRsZV91bnJlZ2lzdGVyKGVuaWMsIHBheWxvYWQsIHZmX2lkLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgIGxlNjRfdG9fY3B1KGhkci1cdTAwM2Vtc2dfbnVtKSk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIEVOSUNfTUJPWF9QRl9MSU5LX1NUQVRFX0FDSzoge1xuJiM0MztcdFx0c3RydWN0IGVuaWNfbWJveF9wZl9saW5rX3N0YXRlX2Fja19tc2cgKmFjayA9IHBheWxvYWQ7XG4mIzQzO1xuJiM0MztcdFx0aWYgKG1zZ19sZW4gXHUwMDNjIHNpemVvZigqaGRyKSAmIzQzOyBzaXplb2YoKmFjaykpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0aWYgKGxlMTZfdG9fY3B1KGFjay1cdTAwM2VhY2sucmV0X21ham9yKSBcdTAwMjZcdTAwMjYgbmV0X3JhdGVsaW1pdCgpKVxuJiM0MztcdFx0XHRuZXRkZXZfd2FybihlbmljLVx1MDAzZW5ldGRldixcbiYjNDM7XHRcdFx0XHQgICAgXCYjMzQ7TUJPWDogVkYgJXUgbGluayBzdGF0ZSBBQ0sgZXJyb3IgJXUvJXVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgIHZmX2lkLFxuJiM0MztcdFx0XHRcdCAgICBsZTE2X3RvX2NwdShhY2stXHUwMDNlYWNrLnJldF9tYWpvciksXG4mIzQzO1x0XHRcdFx0ICAgIGxlMTZfdG9fY3B1KGFjay1cdTAwM2VhY2sucmV0X21pbm9yKSk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdG5ldGRldl9kYmcoZW5pYy1cdTAwM2VuZXRkZXYsXG4mIzQzO1x0XHRcdCAgIFwmIzM0O01CT1g6IFBGIHVuaGFuZGxlZCBtc2cgdHlwZSAldSBmcm9tIFZGICV1XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgICBoZHItXHUwMDNlbXNnX3R5cGUsIHZmX2lkKTtcbiYjNDM7XHRcdGVyciA9IC1FT1BOT1RTVVBQO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoZXJyIFx1MDAyNlx1MDAyNiBuZXRfcmF0ZWxpbWl0KCkpXG4mIzQzO1x0XHRuZXRkZXZfd2FybihlbmljLVx1MDAzZW5ldGRldixcbiYjNDM7XHRcdFx0ICAgIFwmIzM0O01CT1g6IFBGIGhhbmRsZXIgZm9yIG1zZyB0eXBlICV1IGZyb20gVkYgJXUgZmFpbGVkOiAlZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgIGhkci1cdTAwM2Vtc2dfdHlwZSwgdmZfaWQsIGVycik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGVuaWNfbWJveF92Zl9oYW5kbGVfY2FwYWJpbGl0eV9yZXBseShzdHJ1Y3QgZW5pYyAqZW5pYyxcbiYjNDM7XHRcdFx0XHRcdFx0IHZvaWQgKnBheWxvYWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZW5pY19tYm94X3ZmX2NhcGFiaWxpdHlfcmVwbHlfbXNnICpyZXBseSA9IHBheWxvYWQ7XG4mIzQzO1xuJiM0MztcdGlmIChlbmljLVx1MDAzZW1ib3hfZXhwZWN0ZWRfcmVwbHkgIT0gRU5JQ19NQk9YX1ZGX0NBUEFCSUxJVFlfUkVQTFkpIHtcbiYjNDM7XHRcdG5ldGRldl93YXJuKGVuaWMtXHUwMDNlbmV0ZGV2LFxuJiM0MztcdFx0XHQgICAgXCYjMzQ7TUJPWDogc3RhbGUgY2FwYWJpbGl0eSByZXBseSAoZXhwZWN0ZWQgJXUpLCBkcm9wXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgICAgZW5pYy1cdTAwM2VtYm94X2V4cGVjdGVkX3JlcGx5KTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChsZTE2X3RvX2NwdShyZXBseS1cdTAwM2VyZXBseS5yZXRfbWFqb3IpID09IDApXG4mIzQzO1x0XHRlbmljLVx1MDAzZXBmX2NhcF92ZXJzaW9uID0gbGUzMl90b19jcHUocmVwbHktXHUwMDNldmVyc2lvbik7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0bmV0ZGV2X3dhcm4oZW5pYy1cdTAwM2VuZXRkZXYsXG4mIzQzO1x0XHRcdCAgICBcJiMzNDtNQk9YOiBQRiByZWplY3RlZCBjYXBhYmlsaXR5IHJlcXVlc3Q6ICV1LyV1XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgICAgbGUxNl90b19jcHUocmVwbHktXHUwMDNlcmVwbHkucmV0X21ham9yKSxcbiYjNDM7XHRcdFx0ICAgIGxlMTZfdG9fY3B1KHJlcGx5LVx1MDAzZXJlcGx5LnJldF9taW5vcikpO1xuJiM0MztcdGNvbXBsZXRlKFx1MDAyNmVuaWMtXHUwMDNlbWJveF9jb21wKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgZW5pY19tYm94X3ZmX2hhbmRsZV9yZWdpc3Rlcl9yZXBseShzdHJ1Y3QgZW5pYyAqZW5pYyxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICB2b2lkICpwYXlsb2FkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGVuaWNfbWJveF92Zl9yZWdpc3Rlcl9yZXBseV9tc2cgKnJlcGx5ID0gcGF5bG9hZDtcbiYjNDM7XG4mIzQzO1x0aWYgKGVuaWMtXHUwMDNlbWJveF9leHBlY3RlZF9yZXBseSAhPSBFTklDX01CT1hfVkZfUkVHSVNURVJfUkVQTFkpIHtcbiYjNDM7XHRcdG5ldGRldl93YXJuKGVuaWMtXHUwMDNlbmV0ZGV2LFxuJiM0MztcdFx0XHQgICAgXCYjMzQ7TUJPWDogc3RhbGUgcmVnaXN0ZXIgcmVwbHkgKGV4cGVjdGVkICV1KSwgZHJvcFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgIGVuaWMtXHUwMDNlbWJveF9leHBlY3RlZF9yZXBseSk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAobGUxNl90b19jcHUocmVwbHktXHUwMDNlcmVwbHkucmV0X21ham9yKSkge1xuJiM0MztcdFx0bmV0ZGV2X3dhcm4oZW5pYy1cdTAwM2VuZXRkZXYsXG4mIzQzO1x0XHRcdCAgICBcJiMzNDtNQk9YOiBWRiByZWdpc3RlciByZWplY3RlZCBieSBQRjogJXUvJXVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgICBsZTE2X3RvX2NwdShyZXBseS1cdTAwM2VyZXBseS5yZXRfbWFqb3IpLFxuJiM0MztcdFx0XHQgICAgbGUxNl90b19jcHUocmVwbHktXHUwMDNlcmVwbHkucmV0X21pbm9yKSk7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGVuaWMtXHUwMDNldmZfcmVnaXN0ZXJlZCA9IHRydWU7XG4mIzQzO1x0fVxuJiM0MztcdGNvbXBsZXRlKFx1MDAyNmVuaWMtXHUwMDNlbWJveF9jb21wKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgZW5pY19tYm94X3ZmX2hhbmRsZV91bnJlZ2lzdGVyX3JlcGx5KHN0cnVjdCBlbmljICplbmljLFxuJiM0MztcdFx0XHRcdFx0XHQgdm9pZCAqcGF5bG9hZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBlbmljX21ib3hfdmZfcmVnaXN0ZXJfcmVwbHlfbXNnICpyZXBseSA9IHBheWxvYWQ7XG4mIzQzO1xuJiM0MztcdGlmIChlbmljLVx1MDAzZW1ib3hfZXhwZWN0ZWRfcmVwbHkgIT0gRU5JQ19NQk9YX1ZGX1VOUkVHSVNURVJfUkVQTFkpIHtcbiYjNDM7XHRcdG5ldGRldl93YXJuKGVuaWMtXHUwMDNlbmV0ZGV2LFxuJiM0MztcdFx0XHQgICAgXCYjMzQ7TUJPWDogc3RhbGUgdW5yZWdpc3RlciByZXBseSAoZXhwZWN0ZWQgJXUpLCBkcm9wXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgICAgZW5pYy1cdTAwM2VtYm94X2V4cGVjdGVkX3JlcGx5KTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChsZTE2X3RvX2NwdShyZXBseS1cdTAwM2VyZXBseS5yZXRfbWFqb3IpKSB7XG4mIzQzO1x0XHRuZXRkZXZfd2FybihlbmljLVx1MDAzZW5ldGRldixcbiYjNDM7XHRcdFx0ICAgIFwmIzM0O01CT1g6IFZGIHVucmVnaXN0ZXIgcmVqZWN0ZWQgYnkgUEY6ICV1LyV1XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgICAgbGUxNl90b19jcHUocmVwbHktXHUwMDNlcmVwbHkucmV0X21ham9yKSxcbiYjNDM7XHRcdFx0ICAgIGxlMTZfdG9fY3B1KHJlcGx5LVx1MDAzZXJlcGx5LnJldF9taW5vcikpO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRlbmljLVx1MDAzZXZmX3JlZ2lzdGVyZWQgPSBmYWxzZTtcbiYjNDM7XHR9XG4mIzQzO1x0Y29tcGxldGUoXHUwMDI2ZW5pYy1cdTAwM2VtYm94X2NvbXApO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBlbmljX21ib3hfdmZfaGFuZGxlX2xpbmtfc3RhdGUoc3RydWN0IGVuaWMgKmVuaWMsIHZvaWQgKnBheWxvYWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZW5pY19tYm94X3BmX2xpbmtfc3RhdGVfbm90aWZfbXNnICpub3RpZiA9IHBheWxvYWQ7XG4mIzQzO1x0c3RydWN0IGVuaWNfbWJveF9wZl9saW5rX3N0YXRlX2Fja19tc2cgYWNrID0ge307XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0c3dpdGNoIChsZTMyX3RvX2NwdShub3RpZi1cdTAwM2VsaW5rX3N0YXRlKSkge1xuJiM0MztcdGNhc2UgRU5JQ19NQk9YX0xJTktfU1RBVEVfRU5BQkxFOlxuJiM0MztcdFx0aWYgKCFuZXRpZl9jYXJyaWVyX29rKGVuaWMtXHUwMDNlbmV0ZGV2KSlcbiYjNDM7XHRcdFx0bmV0aWZfY2Fycmllcl9vbihlbmljLVx1MDAzZW5ldGRldik7XG4mIzQzO1x0XHRuZXRkZXZfZGJnKGVuaWMtXHUwMDNlbmV0ZGV2LCBcJiMzNDtNQk9YOiBsaW5rIHN0YXRlIC1cdTAwM2UgVVBcXG5cJiMzNDspO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBFTklDX01CT1hfTElOS19TVEFURV9ESVNBQkxFOlxuJiM0MztcdFx0aWYgKG5ldGlmX2NhcnJpZXJfb2soZW5pYy1cdTAwM2VuZXRkZXYpKVxuJiM0MztcdFx0XHRuZXRpZl9jYXJyaWVyX29mZihlbmljLVx1MDAzZW5ldGRldik7XG4mIzQzO1x0XHRuZXRkZXZfZGJnKGVuaWMtXHUwMDNlbmV0ZGV2LCBcJiMzNDtNQk9YOiBsaW5rIHN0YXRlIC1cdTAwM2UgRE9XTlxcblwmIzM0Oyk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0bmV0ZGV2X3dhcm4oZW5pYy1cdTAwM2VuZXRkZXYsIFwmIzM0O01CT1g6IHVua25vd24gbGluayBzdGF0ZSAldVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgIGxlMzJfdG9fY3B1KG5vdGlmLVx1MDAzZWxpbmtfc3RhdGUpKTtcbiYjNDM7XHRcdGFjay5hY2sucmV0X21ham9yID0gY3B1X3RvX2xlMTYoRU5JQ19NQk9YX0VSUl9HRU5FUklDKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZXJyID0gZW5pY19tYm94X3NlbmRfbXNnKGVuaWMsIEVOSUNfTUJPWF9QRl9MSU5LX1NUQVRFX0FDSyxcbiYjNDM7XHRcdFx0XHQgRU5JQ19NQk9YX0RTVF9QRiwgXHUwMDI2YWNrLCBzaXplb2YoYWNrKSk7XG4mIzQzO1x0aWYgKGVyciBcdTAwMjZcdTAwMjYgbmV0X3JhdGVsaW1pdCgpKVxuJiM0MztcdFx0bmV0ZGV2X3dhcm4oZW5pYy1cdTAwM2VuZXRkZXYsXG4mIzQzO1x0XHRcdCAgICBcJiMzNDtNQk9YOiBmYWlsZWQgdG8gc2VuZCBsaW5rIHN0YXRlIEFDSzogJWRcXG5cJiMzNDssIGVycik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIGVuaWNfbWJveF92Zl9wYXlsb2FkX29rKHN0cnVjdCBlbmljICplbmljLCB1OCBtc2dfdHlwZSxcbiYjNDM7XHRcdFx0XHQgICAgdTE2IHBheWxvYWRfbGVuLCBzaXplX3QgbWluX2xlbilcbiYjNDM7e1xuJiM0MztcdGlmIChwYXlsb2FkX2xlbiBcdTAwM2MgbWluX2xlbikge1xuJiM0MztcdFx0bmV0ZGV2X3dhcm4oZW5pYy1cdTAwM2VuZXRkZXYsXG4mIzQzO1x0XHRcdCAgICBcJiMzNDtNQk9YOiBzaG9ydCBwYXlsb2FkIGZvciB0eXBlICV1ICgldSBcdTAwM2MgJXp1KVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgIG1zZ190eXBlLCBwYXlsb2FkX2xlbiwgbWluX2xlbik7XG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiB0cnVlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBlbmljX21ib3hfdmZfcHJvY2Vzc19tc2coc3RydWN0IGVuaWMgKmVuaWMsXG4mIzQzO1x0XHRcdFx0ICAgICBzdHJ1Y3QgZW5pY19tYm94X2hkciAqaGRyLCB2b2lkICpwYXlsb2FkLFxuJiM0MztcdFx0XHRcdCAgICAgdTE2IHBheWxvYWRfbGVuKVxuJiM0Mzt7XG4mIzQzO1x0c3dpdGNoIChoZHItXHUwMDNlbXNnX3R5cGUpIHtcbiYjNDM7XHRjYXNlIEVOSUNfTUJPWF9WRl9DQVBBQklMSVRZX1JFUExZOiB7XG4mIzQzO1x0XHRzaXplX3QgZXhwID0gc2l6ZW9mKHN0cnVjdCBlbmljX21ib3hfdmZfY2FwYWJpbGl0eV9yZXBseV9tc2cpO1xuJiM0MztcbiYjNDM7XHRcdGlmICghZW5pY19tYm94X3ZmX3BheWxvYWRfb2soZW5pYywgaGRyLVx1MDAzZW1zZ190eXBlLFxuJiM0MztcdFx0XHRcdFx0ICAgICBwYXlsb2FkX2xlbiwgZXhwKSlcbiYjNDM7XHRcdFx0cmV0dXJuO1xuJiM0MztcdFx0ZW5pY19tYm94X3ZmX2hhbmRsZV9jYXBhYmlsaXR5X3JlcGx5KGVuaWMsIHBheWxvYWQpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0MztcdGNhc2UgRU5JQ19NQk9YX1ZGX1JFR0lTVEVSX1JFUExZOiB7XG4mIzQzO1x0XHRzaXplX3QgZXhwID0gc2l6ZW9mKHN0cnVjdCBlbmljX21ib3hfdmZfcmVnaXN0ZXJfcmVwbHlfbXNnKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoIWVuaWNfbWJveF92Zl9wYXlsb2FkX29rKGVuaWMsIGhkci1cdTAwM2Vtc2dfdHlwZSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgcGF5bG9hZF9sZW4sIGV4cCkpXG4mIzQzO1x0XHRcdHJldHVybjtcbiYjNDM7XHRcdGVuaWNfbWJveF92Zl9oYW5kbGVfcmVnaXN0ZXJfcmVwbHkoZW5pYywgcGF5bG9hZCk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO1x0Y2FzZSBFTklDX01CT1hfVkZfVU5SRUdJU1RFUl9SRVBMWToge1xuJiM0MztcdFx0c2l6ZV90IGV4cCA9IHNpemVvZihzdHJ1Y3QgZW5pY19tYm94X3ZmX3JlZ2lzdGVyX3JlcGx5X21zZyk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFlbmljX21ib3hfdmZfcGF5bG9hZF9vayhlbmljLCBoZHItXHUwMDNlbXNnX3R5cGUsXG4mIzQzO1x0XHRcdFx0XHQgICAgIHBheWxvYWRfbGVuLCBleHApKVxuJiM0MztcdFx0XHRyZXR1cm47XG4mIzQzO1x0XHRlbmljX21ib3hfdmZfaGFuZGxlX3VucmVnaXN0ZXJfcmVwbHkoZW5pYywgcGF5bG9hZCk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO1x0Y2FzZSBFTklDX01CT1hfUEZfTElOS19TVEFURV9OT1RJRjoge1xuJiM0MztcdFx0c2l6ZV90IGV4cCA9IHNpemVvZihzdHJ1Y3QgZW5pY19tYm94X3BmX2xpbmtfc3RhdGVfbm90aWZfbXNnKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoIWVuaWNfbWJveF92Zl9wYXlsb2FkX29rKGVuaWMsIGhkci1cdTAwM2Vtc2dfdHlwZSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgcGF5bG9hZF9sZW4sIGV4cCkpXG4mIzQzO1x0XHRcdHJldHVybjtcbiYjNDM7XHRcdGVuaWNfbWJveF92Zl9oYW5kbGVfbGlua19zdGF0ZShlbmljLCBwYXlsb2FkKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdH1cbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0bmV0ZGV2X2RiZyhlbmljLVx1MDAzZW5ldGRldixcbiYjNDM7XHRcdFx0ICAgXCYjMzQ7TUJPWDogVkYgdW5oYW5kbGVkIG1zZyB0eXBlICV1XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgICBoZHItXHUwMDNlbXNnX3R5cGUpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBlbmljX21ib3hfcmVjdl9oYW5kbGVyKHN0cnVjdCBlbmljICplbmljLCB2b2lkICpidWYsXG4mIzQzO1x0XHRcdFx0ICAgdW5zaWduZWQgaW50IGxlbilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBlbmljX21ib3hfaGRyICpoZHIgPSBidWY7XG4mIzQzO1x0dm9pZCAqcGF5bG9hZDtcbiYjNDM7XHR1MTYgbXNnX2xlbjtcbiYjNDM7XG4mIzQzO1x0aWYgKGxlbiBcdTAwM2Mgc2l6ZW9mKCpoZHIpKSB7XG4mIzQzO1x0XHRpZiAobmV0X3JhdGVsaW1pdCgpKVxuJiM0MztcdFx0XHRuZXRkZXZfd2FybihlbmljLVx1MDAzZW5ldGRldixcbiYjNDM7XHRcdFx0XHQgICAgXCYjMzQ7TUJPWDogdHJ1bmNhdGVkIG1lc3NhZ2UgKGxlbiAldSBcdTAwM2MgJXp1KVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICAgbGVuLCBzaXplb2YoKmhkcikpO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKGhkci1cdTAwM2Vtc2dfdHlwZSBcdTAwM2U9IEVOSUNfTUJPWF9NQVgpIHtcbiYjNDM7XHRcdGlmIChuZXRfcmF0ZWxpbWl0KCkpXG4mIzQzO1x0XHRcdG5ldGRldl93YXJuKGVuaWMtXHUwMDNlbmV0ZGV2LFxuJiM0MztcdFx0XHRcdCAgICBcJiMzNDtNQk9YOiB1bmtub3duIG1zZyB0eXBlICV1XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgICBoZHItXHUwMDNlbXNnX3R5cGUpO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bXNnX2xlbiA9IGxlMTZfdG9fY3B1KGhkci1cdTAwM2Vtc2dfbGVuKTtcbiYjNDM7XHRpZiAobXNnX2xlbiBcdTAwM2Mgc2l6ZW9mKCpoZHIpIHx8IG1zZ19sZW4gXHUwMDNlIGxlbikge1xuJiM0MztcdFx0aWYgKG5ldF9yYXRlbGltaXQoKSlcbiYjNDM7XHRcdFx0bmV0ZGV2X3dhcm4oZW5pYy1cdTAwM2VuZXRkZXYsXG4mIzQzO1x0XHRcdFx0ICAgIFwmIzM0O01CT1g6IGludmFsaWQgbXNnX2xlbiAldSAoYnVmIGxlbiAldSlcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgIG1zZ19sZW4sIGxlbik7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRuZXRkZXZfZGJnKGVuaWMtXHUwMDNlbmV0ZGV2LFxuJiM0MztcdFx0ICAgXCYjMzQ7TUJPWCByZWN2OiB0eXBlICV1IGZyb20gdm5pYyAldSBsZW4gJXVcXG5cJiMzNDssXG4mIzQzO1x0XHQgICBoZHItXHUwMDNlbXNnX3R5cGUsIGxlMTZfdG9fY3B1KGhkci1cdTAwM2VzcmNfdm5pY19pZCksIG1zZ19sZW4pO1xuJiM0MztcbiYjNDM7XHRwYXlsb2FkID0gYnVmICYjNDM7IHNpemVvZigqaGRyKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGVuaWMtXHUwMDNldmZfc3RhdGUpIHtcbiYjNDM7XHRcdGVuaWNfbWJveF9wZl9wcm9jZXNzX21zZyhlbmljLCBoZHIsIHBheWxvYWQpO1xuJiM0MztcdH0gZWxzZSBpZiAobGUxNl90b19jcHUoaGRyLVx1MDAzZXNyY192bmljX2lkKSA9PSBFTklDX01CT1hfRFNUX1BGKSB7XG4mIzQzO1x0XHQvKiBzcmNfdm5pY19pZCB3YXMgb3ZlcndyaXR0ZW4gZnJvbSB0aGUgaGFyZHdhcmUtdmVyaWZpZWQgQ1FcbiYjNDM7XHRcdCAqIFZMQU4gc2VuZGVyIGZpZWxkLCBzbyBhIFZGIG9ubHkgYWNjZXB0cyBtZXNzYWdlcyB0aGF0IHRoZVxuJiM0MztcdFx0ICogYWRhcHRlciBhdHRyaWJ1dGVzIHRvIHRoZSBQRi4gIEl0cyBzb2xlIGFkbWluLWNoYW5uZWwgcGVlciBpc1xuJiM0MztcdFx0ICogdGhlIFBGOyBkcm9wIGFueXRoaW5nIGVsc2UgYXMgYSBzcG9vZmVkIG5vdGlmaWNhdGlvbi5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0ZW5pY19tYm94X3ZmX3Byb2Nlc3NfbXNnKGVuaWMsIGhkciwgcGF5bG9hZCxcbiYjNDM7XHRcdFx0XHRcdCBtc2dfbGVuIC0gKHUxNilzaXplb2YoKmhkcikpO1xuJiM0MztcdH0gZWxzZSBpZiAobmV0X3JhdGVsaW1pdCgpKSB7XG4mIzQzO1x0XHRuZXRkZXZfd2FybihlbmljLVx1MDAzZW5ldGRldixcbiYjNDM7XHRcdFx0ICAgIFwmIzM0O01CT1g6IFZGIGRyb3BwaW5nIG5vbi1QRiBtZXNzYWdlIGZyb20gdm5pYyAldVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgIGxlMTZfdG9fY3B1KGhkci1cdTAwM2VzcmNfdm5pY19pZCkpO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IGVuaWNfbWJveF92Zl9jYXBhYmlsaXR5X2NoZWNrKHN0cnVjdCBlbmljICplbmljKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGVuaWNfbWJveF92Zl9jYXBhYmlsaXR5X21zZyByZXEgPSB7fTtcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHRlbmljLVx1MDAzZXBmX2NhcF92ZXJzaW9uID0gMDtcbiYjNDM7XHRyZWluaXRfY29tcGxldGlvbihcdTAwMjZlbmljLVx1MDAzZW1ib3hfY29tcCk7XG4mIzQzO1x0ZW5pYy1cdTAwM2VtYm94X2V4cGVjdGVkX3JlcGx5ID0gRU5JQ19NQk9YX1ZGX0NBUEFCSUxJVFlfUkVQTFk7XG4mIzQzO1x0cmVxLnZlcnNpb24gPSBjcHVfdG9fbGUzMihFTklDX01CT1hfQ0FQX1ZFUlNJT05fMSk7XG4mIzQzO1xuJiM0MztcdGVyciA9IGVuaWNfbWJveF9zZW5kX21zZyhlbmljLCBFTklDX01CT1hfVkZfQ0FQQUJJTElUWV9SRVFVRVNULFxuJiM0MztcdFx0XHRcdCBFTklDX01CT1hfRFNUX1BGLCBcdTAwMjZyZXEsIHNpemVvZihyZXEpKTtcbiYjNDM7XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRlbmljLVx1MDAzZW1ib3hfZXhwZWN0ZWRfcmVwbHkgPSAwO1xuJiM0MztcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGVyciA9IGVuaWNfbWJveF93YWl0X3JlcGx5KGVuaWMsIDMwMDApO1xuJiM0MztcdGVuaWMtXHUwMDNlbWJveF9leHBlY3RlZF9yZXBseSA9IDA7XG4mIzQzO1x0aWYgKGVycikge1xuJiM0MztcdFx0bmV0ZGV2X3dhcm4oZW5pYy1cdTAwM2VuZXRkZXYsXG4mIzQzO1x0XHRcdCAgICBcJiMzNDtNQk9YOiBubyBjYXBhYmlsaXR5IHJlcGx5IGZyb20gUEZcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChlbmljLVx1MDAzZXBmX2NhcF92ZXJzaW9uIFx1MDAzYyBFTklDX01CT1hfQ0FQX1ZFUlNJT05fMSkge1xuJiM0MztcdFx0bmV0ZGV2X3dhcm4oZW5pYy1cdTAwM2VuZXRkZXYsXG4mIzQzO1x0XHRcdCAgICBcJiMzNDtNQk9YOiBQRiB2ZXJzaW9uICV1IHRvbyBvbGRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCAgICBlbmljLVx1MDAzZXBmX2NhcF92ZXJzaW9uKTtcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgZW5pY19tYm94X3ZmX3JlZ2lzdGVyKHN0cnVjdCBlbmljICplbmljKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0ZW5pYy1cdTAwM2V2Zl9yZWdpc3RlcmVkID0gZmFsc2U7XG4mIzQzO1x0cmVpbml0X2NvbXBsZXRpb24oXHUwMDI2ZW5pYy1cdTAwM2VtYm94X2NvbXApO1xuJiM0MztcdGVuaWMtXHUwMDNlbWJveF9leHBlY3RlZF9yZXBseSA9IEVOSUNfTUJPWF9WRl9SRUdJU1RFUl9SRVBMWTtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gZW5pY19tYm94X3NlbmRfbXNnKGVuaWMsIEVOSUNfTUJPWF9WRl9SRUdJU1RFUl9SRVFVRVNULFxuJiM0MztcdFx0XHRcdCBFTklDX01CT1hfRFNUX1BGLCBOVUxMLCAwKTtcbiYjNDM7XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRlbmljLVx1MDAzZW1ib3hfZXhwZWN0ZWRfcmVwbHkgPSAwO1xuJiM0MztcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGVyciA9IGVuaWNfbWJveF93YWl0X3JlcGx5KGVuaWMsIDMwMDApO1xuJiM0MztcdGVuaWMtXHUwMDNlbWJveF9leHBlY3RlZF9yZXBseSA9IDA7XG4mIzQzO1x0aWYgKGVycikge1xuJiM0MztcdFx0bmV0ZGV2X3dhcm4oZW5pYy1cdTAwM2VuZXRkZXYsXG4mIzQzO1x0XHRcdCAgICBcJiMzNDtNQk9YOiBWRiByZWdpc3RyYXRpb24gd2l0aCBQRiB0aW1lZCBvdXRcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICghZW5pYy1cdTAwM2V2Zl9yZWdpc3RlcmVkKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9ERVY7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgZW5pY19tYm94X3ZmX3VucmVnaXN0ZXIoc3RydWN0IGVuaWMgKmVuaWMpXG4mIzQzO3tcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHRpZiAoIWVuaWMtXHUwMDNldmZfcmVnaXN0ZXJlZClcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRyZWluaXRfY29tcGxldGlvbihcdTAwMjZlbmljLVx1MDAzZW1ib3hfY29tcCk7XG4mIzQzO1x0ZW5pYy1cdTAwM2VtYm94X2V4cGVjdGVkX3JlcGx5ID0gRU5JQ19NQk9YX1ZGX1VOUkVHSVNURVJfUkVQTFk7XG4mIzQzO1xuJiM0MztcdGVyciA9IGVuaWNfbWJveF9zZW5kX21zZyhlbmljLCBFTklDX01CT1hfVkZfVU5SRUdJU1RFUl9SRVFVRVNULFxuJiM0MztcdFx0XHRcdCBFTklDX01CT1hfRFNUX1BGLCBOVUxMLCAwKTtcbiYjNDM7XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRlbmljLVx1MDAzZW1ib3hfZXhwZWN0ZWRfcmVwbHkgPSAwO1xuJiM0MztcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGVyciA9IGVuaWNfbWJveF93YWl0X3JlcGx5KGVuaWMsIDMwMDApO1xuJiM0MztcdGVuaWMtXHUwMDNlbWJveF9leHBlY3RlZF9yZXBseSA9IDA7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4mIzQzO1x0aWYgKGVuaWMtXHUwMDNldmZfcmVnaXN0ZXJlZClcbiYjNDM7XHRcdHJldHVybiAtRUFDQ0VTO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIGVuaWNfbWJveF9pbml0KHN0cnVjdCBlbmljICplbmljKVxuJiM0Mzt7XG4mIzQzO1x0LyogbWJveF9sb2NrIGFuZCBtYm94X2NvbXAgbXVzdCBiZSBpbml0aWFsaXplZCBleGFjdGx5IG9uY2UgcGVyXG4mIzQzO1x0ICogZGV2aWNlIGxpZmV0aW1lOyB0aGUgUEYgc3Jpb3ZfY29uZmlndXJlIHBhdGggY2FuIHJlLWVudGVyIHRoaXNcbiYjNDM7XHQgKiBvbiBlYWNoIGVuYWJsZSBjeWNsZSB3aGVyZSB0aGVzZSBwcmltaXRpdmVzIGFyZSBhbHJlYWR5IHNldCB1cC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIWVuaWMtXHUwMDNlbWJveF9pbml0aWFsaXplZCkge1xuJiM0MztcdFx0bXV0ZXhfaW5pdChcdTAwMjZlbmljLVx1MDAzZW1ib3hfbG9jayk7XG4mIzQzO1x0XHRpbml0X2NvbXBsZXRpb24oXHUwMDI2ZW5pYy1cdTAwM2VtYm94X2NvbXApO1xuJiM0MztcdFx0ZW5pYy1cdTAwM2VtYm94X2luaXRpYWxpemVkID0gdHJ1ZTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0cmVpbml0X2NvbXBsZXRpb24oXHUwMDI2ZW5pYy1cdTAwM2VtYm94X2NvbXApO1xuJiM0MztcdH1cbiYjNDM7XHRlbmljLVx1MDAzZW1ib3hfbXNnX251bSA9IDA7XG4mIzQzO1x0ZW5pYy1cdTAwM2VhZG1pbl9ycV9oYW5kbGVyID0gZW5pY19tYm94X3JlY3ZfaGFuZGxlcjtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19tYm94LmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfbWJveC5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjE1ZTMwZWUyYjBlZDk1XG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfbWJveC5oXG5AQCAtMCwwICYjNDM7MSw5NSBAQFxuJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovXG4mIzQzOy8qIENvcHlyaWdodCAyMDI1IENpc2NvIFN5c3RlbXMsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICovXG4mIzQzO1xuJiM0MzsjaWZuZGVmIF9FTklDX01CT1hfSF9cbiYjNDM7I2RlZmluZSBfRU5JQ19NQk9YX0hfXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogTWFpbGJveCBwcm90b2NvbCBmb3IgUEYtVkYgY29tbXVuaWNhdGlvbiBvdmVyIHRoZSBhZG1pbiBjaGFubmVsLlxuJiM0MzsgKlxuJiM0MzsgKiBFdmVuIG51bWJlcnMgYXJlIHJlcXVlc3RzLCBvZGQgbnVtYmVycyBhcmUgcmVwbGllcy9hY2tzLlxuJiM0MzsgKiBUaGUgcHJlZml4IGluZGljYXRlcyB0aGUgaW5pdGlhdG9yOiBWRl8gPSBWRi1pbml0aWF0ZWQsIFBGXyA9IFBGLWluaXRpYXRlZC5cbiYjNDM7ICovXG4mIzQzO2VudW0gZW5pY19tYm94X21zZ190eXBlIHtcbiYjNDM7XHRFTklDX01CT1hfVkZfQ0FQQUJJTElUWV9SRVFVRVNUXHRcdD0gMCxcbiYjNDM7XHRFTklDX01CT1hfVkZfQ0FQQUJJTElUWV9SRVBMWVx0XHQ9IDEsXG4mIzQzO1x0RU5JQ19NQk9YX1ZGX1JFR0lTVEVSX1JFUVVFU1RcdFx0PSAyLFxuJiM0MztcdEVOSUNfTUJPWF9WRl9SRUdJU1RFUl9SRVBMWVx0XHQ9IDMsXG4mIzQzO1x0RU5JQ19NQk9YX1ZGX1VOUkVHSVNURVJfUkVRVUVTVFx0XHQ9IDQsXG4mIzQzO1x0RU5JQ19NQk9YX1ZGX1VOUkVHSVNURVJfUkVQTFlcdFx0PSA1LFxuJiM0MztcdEVOSUNfTUJPWF9QRl9MSU5LX1NUQVRFX05PVElGXHRcdD0gNixcbiYjNDM7XHRFTklDX01CT1hfUEZfTElOS19TVEFURV9BQ0tcdFx0PSA3LFxuJiM0MztcdEVOSUNfTUJPWF9NQVhcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0cnVjdCBlbmljX21ib3hfaGRyIHtcbiYjNDM7XHRfX2xlMTYgc3JjX3ZuaWNfaWQ7XG4mIzQzO1x0X19sZTE2IGRzdF92bmljX2lkO1xuJiM0MztcdHU4IG1zZ190eXBlO1xuJiM0MztcdHU4IGZsYWdzO1xuJiM0MztcdF9fbGUxNiBtc2dfbGVuO1xuJiM0MztcdF9fbGU2NCBtc2dfbnVtO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RydWN0IGVuaWNfbWJveF9nZW5lcmljX3JlcGx5IHtcbiYjNDM7XHRfX2xlMTYgcmV0X21ham9yO1xuJiM0MztcdF9fbGUxNiByZXRfbWlub3I7XG4mIzQzO307XG4mIzQzO1xuJiM0MzsjZGVmaW5lIEVOSUNfTUJPWF9FUlJfR0VORVJJQ1x0XHRCSVQoMClcbiYjNDM7I2RlZmluZSBFTklDX01CT1hfRVJSX1ZGX05PVF9SRUdJU1RFUkVEXHRCSVQoMSlcbiYjNDM7I2RlZmluZSBFTklDX01CT1hfRVJSX01TR19OT1RfU1VQUE9SVEVEXHRCSVQoMilcbiYjNDM7XG4mIzQzOy8qIEVOSUNfTUJPWF9WRl9DQVBBQklMSVRZX1JFUVVFU1QgLyBfUkVQTFkgKi9cbiYjNDM7I2RlZmluZSBFTklDX01CT1hfQ0FQX1ZFUlNJT05fMFx0XHQwXG4mIzQzOyNkZWZpbmUgRU5JQ19NQk9YX0NBUF9WRVJTSU9OXzFcdFx0MVxuJiM0MztcbiYjNDM7c3RydWN0IGVuaWNfbWJveF92Zl9jYXBhYmlsaXR5X21zZyB7XG4mIzQzO1x0X19sZTMyIHZlcnNpb247XG4mIzQzO1x0X19sZTMyIHJlc2VydmVkWzMyXTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOy8qIFRoZSBlbWJlZGRlZCBlbmljX21ib3hfZ2VuZXJpY19yZXBseSBoYXMgMi1ieXRlIGFsaWdubWVudCwgYnV0IHRoZVxuJiM0MzsgKiBfX2xlMzIgbWVtYmVycyBnaXZlIHRoaXMgc3RydWN0IDQtYnl0ZSBuYXR1cmFsIGFsaWdubWVudC4gIFJlY2VpdmVcbiYjNDM7ICogYnVmZmVycyBjb21lIGZyb20ga21hbGxvYyAoXHUwMDNlPSA4LWJ5dGUgYWxpZ25lZCksIHNvIHRoZXJlIGlzIG5vXG4mIzQzOyAqIG1pc2FsaWduZWQgYWNjZXNzIHJpc2sgd2hlbiBjYXN0aW5nIGZyb20gdGhlIHJlY2VpdmUgYnVmZmVyLlxuJiM0MzsgKi9cbiYjNDM7c3RydWN0IGVuaWNfbWJveF92Zl9jYXBhYmlsaXR5X3JlcGx5X21zZyB7XG4mIzQzO1x0c3RydWN0IGVuaWNfbWJveF9nZW5lcmljX3JlcGx5IHJlcGx5O1xuJiM0MztcdF9fbGUzMiB2ZXJzaW9uO1xuJiM0MztcdF9fbGUzMiByZXNlcnZlZFszMl07XG4mIzQzO307XG4mIzQzO1xuJiM0MzsvKiBFTklDX01CT1hfVkZfUkVHSVNURVIgLyBfVU5SRUdJU1RFUiAqL1xuJiM0MztzdHJ1Y3QgZW5pY19tYm94X3ZmX3JlZ2lzdGVyX3JlcGx5X21zZyB7XG4mIzQzO1x0c3RydWN0IGVuaWNfbWJveF9nZW5lcmljX3JlcGx5IHJlcGx5O1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7LyogRU5JQ19NQk9YX1BGX0xJTktfU1RBVEVfTk9USUYgLyBfQUNLICovXG4mIzQzOyNkZWZpbmUgRU5JQ19NQk9YX0xJTktfU1RBVEVfRElTQUJMRVx0MFxuJiM0MzsjZGVmaW5lIEVOSUNfTUJPWF9MSU5LX1NUQVRFX0VOQUJMRVx0MVxuJiM0MztcbiYjNDM7c3RydWN0IGVuaWNfbWJveF9wZl9saW5rX3N0YXRlX25vdGlmX21zZyB7XG4mIzQzO1x0X19sZTMyIGxpbmtfc3RhdGU7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdHJ1Y3QgZW5pY19tYm94X3BmX2xpbmtfc3RhdGVfYWNrX21zZyB7XG4mIzQzO1x0c3RydWN0IGVuaWNfbWJveF9nZW5lcmljX3JlcGx5IGFjaztcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOyNkZWZpbmUgRU5JQ19NQk9YX0RTVF9QRlx0MHhGRkZGXG4mIzQzO1xuJiM0MztzdHJ1Y3QgZW5pYztcbiYjNDM7XG4mIzQzO3ZvaWQgZW5pY19tYm94X2luaXQoc3RydWN0IGVuaWMgKmVuaWMpO1xuJiM0MztpbnQgZW5pY19tYm94X3NlbmRfbXNnKHN0cnVjdCBlbmljICplbmljLCB1OCBtc2dfdHlwZSwgdTE2IGRzdF92bmljX2lkLFxuJiM0MztcdFx0ICAgICAgIHZvaWQgKnBheWxvYWQsIHUxNiBwYXlsb2FkX2xlbik7XG4mIzQzO2ludCBlbmljX21ib3hfc2VuZF9saW5rX3N0YXRlKHN0cnVjdCBlbmljICplbmljLCB1MTYgdmZfaWQsIHUzMiBsaW5rX3N0YXRlKTtcbiYjNDM7aW50IGVuaWNfbWJveF92Zl9jYXBhYmlsaXR5X2NoZWNrKHN0cnVjdCBlbmljICplbmljKTtcbiYjNDM7aW50IGVuaWNfbWJveF92Zl9yZWdpc3RlcihzdHJ1Y3QgZW5pYyAqZW5pYyk7XG4mIzQzO2ludCBlbmljX21ib3hfdmZfdW5yZWdpc3RlcihzdHJ1Y3QgZW5pYyAqZW5pYyk7XG4mIzQzO1xuJiM0MzsjZW5kaWYgLyogX0VOSUNfTUJPWF9IXyAqL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19wcC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX3BwLmNcbmluZGV4IDQ3MjBhOTUyNzI1ZDAwLi4zZjYxMWUyNDBjMjU2YyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19wcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfcHAuY1xuQEAgLTI1LDYgJiM0MzsyNSwxMSBAQCBpbnQgZW5pY19pc192YWxpZF9wcF92ZihzdHJ1Y3QgZW5pYyAqZW5pYywgaW50IHZmLCBpbnQgKmVycilcbiBcdGlmICh2ZiAhPSBQT1JUX1NFTEZfVkYpIHtcbiAjaWZkZWYgQ09ORklHX1BDSV9JT1ZcbiBcdFx0aWYgKGVuaWNfc3Jpb3ZfZW5hYmxlZChlbmljKSkge1xuJiM0MztcdFx0XHQvKiBWMiBTUi1JT1YgdXNlcyBNQk9YLCBub3QgcG9ydCBwcm9maWxlcyAqL1xuJiM0MztcdFx0XHRpZiAoZW5pYy1cdTAwM2V2Zl90eXBlID09IEVOSUNfVkZfVFlQRV9WMikge1xuJiM0MztcdFx0XHRcdCplcnIgPSAtRU9QTk9UU1VQUDtcbiYjNDM7XHRcdFx0XHRnb3RvIGVycl9vdXQ7XG4mIzQzO1x0XHRcdH1cbiBcdFx0XHRpZiAodmYgXHUwMDNjIDAgfHwgdmYgXHUwMDNlPSBlbmljLVx1MDAzZW51bV92ZnMpIHtcbiBcdFx0XHRcdCplcnIgPSAtRUlOVkFMO1xuIFx0XHRcdFx0Z290byBlcnJfb3V0O1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19yZXMuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19yZXMuY1xuaW5kZXggMmI3NTQ1ZDZhNjdmZGMuLjc0Y2QyZWUzYWY1Y2I3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX3Jlcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfcmVzLmNcbkBAIC01OSw2ICYjNDM7NTksNyBAQCBpbnQgZW5pY19nZXRfdm5pY19jb25maWcoc3RydWN0IGVuaWMgKmVuaWMpXG4gXHRHRVRfQ09ORklHKGludHJfdGltZXJfdXNlYyk7XG4gXHRHRVRfQ09ORklHKGxvb3BfdGFnKTtcbiBcdEdFVF9DT05GSUcobnVtX2FyZnMpO1xuJiM0MztcdEdFVF9DT05GSUcobXFfc3Vidm5pY19jb3VudCk7XG4gXHRHRVRfQ09ORklHKG1heF9ycV9yaW5nKTtcbiBcdEdFVF9DT05GSUcobWF4X3dxX3JpbmcpO1xuIFx0R0VUX0NPTkZJRyhtYXhfY3FfcmluZyk7XG5AQCAtMjEwLDcgJiM0MzsyMTEsOCBAQCB2b2lkIGVuaWNfZ2V0X3Jlc19jb3VudHMoc3RydWN0IGVuaWMgKmVuaWMpXG4gXHRcdHZuaWNfZGV2X2dldF9yZXNfY291bnQoZW5pYy1cdTAwM2V2ZGV2LCBSRVNfVFlQRV9BRE1JTl9SUSkgXHUwMDNlPSAxIFx1MDAyNlx1MDAyNlxuIFx0XHR2bmljX2Rldl9nZXRfcmVzX2NvdW50KGVuaWMtXHUwMDNldmRldiwgUkVTX1RZUEVfQURNSU5fQ1EpIFx1MDAzZT1cbiBcdFx0XHRBUlJBWV9TSVpFKGVuaWMtXHUwMDNlYWRtaW5fY3EpIFx1MDAyNlx1MDAyNlxuLVx0XHR2bmljX2Rldl9nZXRfcmVzX2NvdW50KGVuaWMtXHUwMDNldmRldiwgUkVTX1RZUEVfU1JJT1ZfSU5UUikgXHUwMDNlPSAxO1xuJiM0MztcdFx0KGVuaWNfaXNfc3Jpb3ZfdmZfdjIoZW5pYykgfHxcbiYjNDM7XHRcdCB2bmljX2Rldl9nZXRfcmVzX2NvdW50KGVuaWMtXHUwMDNldmRldiwgUkVTX1RZUEVfU1JJT1ZfSU5UUikgXHUwMDNlPSAxKTtcbiBcbiBcdGRldl9pbmZvKGVuaWNfZ2V0X2RldihlbmljKSxcbiBcdFx0XCYjMzQ7dk5JQyByZXNvdXJjZXMgYXZhaWw6IHdxICVkIHJxICVkIGNxICVkIGludHIgJWQgYWRtaW4gJXNcXG5cJiMzNDssXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy92bmljX2NxLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL3ZuaWNfY3EuaFxuaW5kZXggZDQ2ZDRkMmVmNmJiYWMuLjM1ZmZhMzIzMDcxMzA1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy92bmljX2NxLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvdm5pY19jcS5oXG5AQCAtNzYsNiAmIzQzOzc2LDE1IEBAIGludCB2bmljX2NxX2FsbG9jKHN0cnVjdCB2bmljX2RldiAqdmRldiwgc3RydWN0IHZuaWNfY3EgKmNxLCB1bnNpZ25lZCBpbnQgaW5kZXgsXG4gaW50IHZuaWNfY3FfYWxsb2Nfd2l0aF90eXBlKHN0cnVjdCB2bmljX2RldiAqdmRldiwgc3RydWN0IHZuaWNfY3EgKmNxLFxuIFx0XHRcdCAgICB1bnNpZ25lZCBpbnQgaW5kZXgsIHVuc2lnbmVkIGludCBkZXNjX2NvdW50LFxuIFx0XHRcdCAgICB1bnNpZ25lZCBpbnQgZGVzY19zaXplLCB1bnNpZ25lZCBpbnQgcmVzX3R5cGUpO1xuJiM0MzsjZGVmaW5lIFZOSUNfQ1FfRkNfRU5BQkxFXHQxXG4mIzQzOyNkZWZpbmUgVk5JQ19DUV9GQ19ESVNBQkxFXHQwXG4mIzQzOyNkZWZpbmUgVk5JQ19DUV9DT0xPUl9FTkFCTEVcdDFcbiYjNDM7I2RlZmluZSBWTklDX0NRX0lOVFJfRU5BQkxFXHQxXG4mIzQzOyNkZWZpbmUgVk5JQ19DUV9JTlRSX0RJU0FCTEVcdDBcbiYjNDM7I2RlZmluZSBWTklDX0NRX0VOVFJZX0VOQUJMRVx0MVxuJiM0MzsjZGVmaW5lIFZOSUNfQ1FfTVNHX0VOQUJMRVx0MVxuJiM0MzsjZGVmaW5lIFZOSUNfQ1FfTVNHX0RJU0FCTEVcdDBcbiYjNDM7XG4gdm9pZCB2bmljX2NxX2luaXQoc3RydWN0IHZuaWNfY3EgKmNxLCB1bnNpZ25lZCBpbnQgZmxvd19jb250cm9sX2VuYWJsZSxcbiBcdHVuc2lnbmVkIGludCBjb2xvcl9lbmFibGUsIHVuc2lnbmVkIGludCBjcV9oZWFkLCB1bnNpZ25lZCBpbnQgY3FfdGFpbCxcbiBcdHVuc2lnbmVkIGludCBjcV90YWlsX2NvbG9yLCB1bnNpZ25lZCBpbnQgaW50ZXJydXB0X2VuYWJsZSxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL3ZuaWNfZGV2Y21kLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL3ZuaWNfZGV2Y21kLmhcbmluZGV4IDYwNWVmMTdmOTY3ZTRhLi45MGNhMDY2OTFlYmQ2MyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvdm5pY19kZXZjbWQuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy92bmljX2RldmNtZC5oXG5AQCAtNDU1LDggJiM0Mzs0NTUsMTkgQEAgZW51bSB2bmljX2RldmNtZF9jbWQge1xuIFx0ICovXG4gXHRDTURfQ1FfRU5UUllfU0laRV9TRVQgPSBfQ01EQyhfQ01EX0RJUl9XUklURSwgX0NNRF9WVFlQRV9FTkVULCA5MCksXG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBTZXQgcXVldWUgcGFpciB0eXBlIChhZG1pbiBvciBkYXRhKVxuJiM0MztcdCAqIGluOiAodTMyKSBhMCA9IHF1ZXVlIHBhaXIgdHlwZSAoMCA9IGFkbWluLCAxID0gZGF0YSlcbiYjNDM7XHQgKiBpbjogKHUzMikgYTEgPSBlbmFibGUgKDEpIC8gZGlzYWJsZSAoMClcbiYjNDM7XHQgKi9cbiYjNDM7XHRDTURfUVBfVFlQRV9TRVQgPSBfQ01EQyhfQ01EX0RJUl9XUklURSwgX0NNRF9WVFlQRV9FTkVULCA5NyksXG4gfTtcbiBcbiYjNDM7I2RlZmluZSBRUF9UWVBFX0FETUlOXHQwXG4mIzQzOyNkZWZpbmUgUVBfVFlQRV9EQVRBXHQxXG4mIzQzOyNkZWZpbmUgUVBfRU5BQkxFXHQxXG4mIzQzOyNkZWZpbmUgUVBfRElTQUJMRVx0MFxuJiM0MztcbiAvKiBDTURfRU5BQkxFMiBmbGFncyAqL1xuICNkZWZpbmUgQ01EX0VOQUJMRTJfU1RBTkRCWSAweDBcbiAjZGVmaW5lIENNRF9FTkFCTEUyX0FDVElWRSAgMHgxXG5AQCAtNzM0LDYgJiM0Mzs3NDUsOCBAQCBlbnVtIHZpY19mZWF0dXJlX3Qge1xuIFx0VklDX0ZFQVRVUkVfVlhMQU4sXG4gXHRWSUNfRkVBVFVSRV9SRE1BLFxuIFx0VklDX0ZFQVRVUkVfVlhMQU5fUEFUQ0gsXG4mIzQzO1x0Lyogc2xvdCAzIHJlc2VydmVkIGZvciBmaXJtd2FyZSBWSUNfRkVBVFVSRV9QVFAgKi9cbiYjNDM7XHRWSUNfRkVBVFVSRV9TUklPVlx0PSA0LFxuIFx0VklDX0ZFQVRVUkVfTUFYLFxuIH07XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy92bmljX2VuZXQuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvdm5pY19lbmV0LmhcbmluZGV4IDllOGU4NjI2MmEzZmVhLi41MTlkMjk2OTk5MGIxOCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvdm5pY19lbmV0LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvdm5pY19lbmV0LmhcbkBAIC0yMSw3ICYjNDM7MjEsOSBAQCBzdHJ1Y3Qgdm5pY19lbmV0X2NvbmZpZyB7XG4gXHR1MTYgbG9vcF90YWc7XG4gXHR1MTYgdmZfcnFfY291bnQ7XG4gXHR1MTYgbnVtX2FyZnM7XG4tXHR1OCByZXNlcnZlZFs2Nl07XG4mIzQzO1x0dTggcmVzZXJ2ZWQxWzMyXTtcbiYjNDM7XHR1MTYgbXFfc3Vidm5pY19jb3VudDtcbiYjNDM7XHR1OCByZXNlcnZlZDJbMzJdO1xuIFx0dTMyIG1heF9ycV9yaW5nO1x0Ly8gTUFYIFJRIHJpbmcgc2l6ZVxuIFx0dTMyIG1heF93cV9yaW5nO1x0Ly8gTUFYIFdRIHJpbmcgc2l6ZVxuIFx0dTMyIG1heF9jcV9yaW5nO1x0Ly8gTUFYIENRIHJpbmcgc2l6ZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE4OjQyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VOSUMmIzM0OywKICAgICYjMzQ7UENJX0lPViYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2VuaWNfYWRtaW5fY2hhbm5lbF9vcGVuJiMzNDssCiAgICAmIzM0O2VuaWNfYWRtaW5fY2hhbm5lbF9jbG9zZSYjMzQ7LAogICAgJiMzNDtlbmljX2FkbWluX3dxX2NxX3NlcnZpY2UmIzM0OywKICAgICYjMzQ7ZW5pY19hZG1pbl9ycV9jcV9zZXJ2aWNlJiMzNDssCiAgICAmIzM0O2VuaWNfbWJveF9zZW5kX21zZyYjMzQ7LAogICAgJiMzNDtlbmljX21ib3hfdmZfY2FwYWJpbGl0eV9jaGVjayYjMzQ7LAogICAgJiMzNDtlbmljX21ib3hfdmZfcmVnaXN0ZXImIzM0OywKICAgICYjMzQ7ZW5pY19tYm94X3ZmX3VucmVnaXN0ZXImIzM0OywKICAgICYjMzQ7ZW5pY19tYm94X3JlY3ZfaGFuZGxlciYjMzQ7LAogICAgJiMzNDtlbmljX21ib3hfcGZfcHJvY2Vzc19tc2cmIzM0OywKICAgICYjMzQ7ZW5pY19tYm94X3ZmX3Byb2Nlc3NfbXNnJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgYWRtaW4gY2hhbm5lbCBhbmQgbWFpbGJveCBwcm90b2NvbCBmb3IgUEYtVkYgY29tbXVuaWNhdGlvbiBpbiB0aGUgQ2lzY28gVklDIEV0aGVybmV0IE5JQyBkcml2ZXIgKGVuaWMpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBkcml2ZXIgbG9naWMgYW5kIGNhbiBiZSB0ZXN0ZWQgdXNpbmcgc3l6a2FsbGVyJiMzOTtzIFBDSSBmdXp6aW5nIGNhcGFiaWxpdGllcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMzEzYmQ1MzE3NjRhOWJmYTUxNGViYzQ2ODczOWUzY2RlZTk2MGU2ZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gSnVuIDI5IDE4OjQyOjA2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvTWFrZWZpbGUKaW5kZXggYTk2YjgzMzJlNmUyYTguLmUzOGFhZjM0YzE0ODM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvTWFrZWZpbGUKQEAgLTMsNSAmIzQzOzMsNiBAQCBvYmotJChDT05GSUdfRU5JQykgOj0gZW5pYy5vCiAKIGVuaWMteSA6PSBlbmljX21haW4ubyB2bmljX2NxLm8gdm5pY19pbnRyLm8gdm5pY193cS5vIFwKIAllbmljX3Jlcy5vIGVuaWNfZGV2Lm8gZW5pY19wcC5vIHZuaWNfZGV2Lm8gdm5pY19ycS5vIHZuaWNfdmljLm8gXAotCWVuaWNfZXRodG9vbC5vIGVuaWNfYXBpLm8gZW5pY19jbHNmLm8gZW5pY19ycS5vIGVuaWNfd3EubwomIzQzOwllbmljX2V0aHRvb2wubyBlbmljX2FwaS5vIGVuaWNfY2xzZi5vIGVuaWNfcnEubyBlbmljX3dxLm8gXAomIzQzOwllbmljX2FkbWluLm8gZW5pY19tYm94Lm8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWMuaAppbmRleCAwODQ3MjQyMGYzYTFmZC4uNjJiODk0MTQ4OWQ3NzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pYy5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pYy5oCkBAIC0yNTYsMTAgJiM0MzsyNTYsMTAgQEAgc3RydWN0IGVuaWMgewogCXN0cnVjdCBlbmljX3J4X2NvYWwgcnhfY29hbGVzY2Vfc2V0dGluZzsKIAl1MzIgcnhfY29hbGVzY2VfdXNlY3M7CiAJdTMyIHR4X2NvYWxlc2NlX3VzZWNzOwotI2lmZGVmIENPTkZJR19QQ0lfSU9WCiAJdTE2IG51bV92ZnM7Ci0jZW5kaWYKIAllbnVtIGVuaWNfdmZfdHlwZSB2Zl90eXBlOwomIzQzOwlib29sIHZmX3JlZ2lzdGVyZWQ7CiYjNDM7CXUzMiBwZl9jYXBfdmVyc2lvbjsKIAl1bnNpZ25lZCBpbnQgZW5hYmxlX2NvdW50OwogCXNwaW5sb2NrX3QgZW5pY19hcGlfbG9jazsKIAlib29sIGVuaWNfYXBpX2J1c3k7CkBAIC0yOTIsMTAgJiM0MzsyOTIsNDUgQEAgc3RydWN0IGVuaWMgewogCiAJLyogQWRtaW4gY2hhbm5lbCByZXNvdXJjZXMgZm9yIFNSLUlPViBNQk9YICovCiAJYm9vbCBoYXNfYWRtaW5fY2hhbm5lbDsKJiM0MzsJLyogdHJ1ZSBvbmx5IHdoaWxlIHRoZSBhZG1pbiBXUS9SUS9DUSBhcmUgYWxsb2NhdGVkIGFuZCBlbmFibGVkOyBnYXRlcwomIzQzOwkgKiBlbmljX2FkbWluX2NoYW5uZWxfY2xvc2UoKSBzbyBpdCBpcyBhIG5vLW9wIGFmdGVyIGEgZmFpbGVkIChyZSlvcGVuCiYjNDM7CSAqIGxlZnQgdGhlIHJlc291cmNlcyBmcmVlZC4KJiM0MzsJICovCiYjNDM7CWJvb2wgYWRtaW5fY2hhbl91cDsKJiM0MzsJLyogc2V0IG9uIHNlbmQgdGltZW91dDsgY2xlYXJlZCBvbiBjaGFubmVsIHJlLW9wZW4gKi8KJiM0MzsJYm9vbCBtYm94X3NlbmRfZGlzYWJsZWQ7CiAJc3RydWN0IHZuaWNfd3EgYWRtaW5fd3E7CiAJc3RydWN0IHZuaWNfcnEgYWRtaW5fcnE7CiAJc3RydWN0IHZuaWNfY3EgYWRtaW5fY3FbMl07CiAJc3RydWN0IHZuaWNfaW50ciBhZG1pbl9pbnRyOwomIzQzOwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgYWRtaW5fcG9sbF93b3JrOwomIzQzOwl1bnNpZ25lZCBpbnQgYWRtaW5faW50cl9pbmRleDsKJiM0MzsJc3RydWN0IHdvcmtfc3RydWN0IGxpbmtfbm90aWZ5X3dvcms7CiYjNDM7CXN0cnVjdCB3b3JrX3N0cnVjdCBhZG1pbl9tc2dfd29yazsKJiM0MzsJc3BpbmxvY2tfdCBhZG1pbl9tc2dfbG9jazsJLyogcHJvdGVjdHMgYWRtaW5fbXNnX2xpc3QgKi8KJiM0MzsJc3RydWN0IGxpc3RfaGVhZCBhZG1pbl9tc2dfbGlzdDsKJiM0MzsJdW5zaWduZWQgaW50IGFkbWluX21zZ19jb3VudDsJLyogY3VycmVudCBkZXB0aCBvZiBhZG1pbl9tc2dfbGlzdCAqLwomIzQzOwl2b2lkICgqYWRtaW5fcnFfaGFuZGxlcikoc3RydWN0IGVuaWMgKmVuaWMsIHZvaWQgKmJ1ZiwKJiM0MzsJCQkJIHVuc2lnbmVkIGludCBsZW4pOwomIzQzOwomIzQzOwkvKiBNQk9YIHByb3RvY29sIHN0YXRlIOKAlCBtYm94X2xvY2sgc2VyaWFsaXplcyBhZG1pbiBXUSBzZW5kcyAqLwomIzQzOwlzdHJ1Y3QgbXV0ZXggbWJveF9sb2NrOwomIzQzOwl1NjQgbWJveF9tc2dfbnVtOwomIzQzOwkvKiBNQk9YIHJlcXVlc3QtcmVwbHkgc3RhdGUuICBXcml0dGVuIGJ5IHRoZSBwcm9jZXNzLWNvbnRleHQgcmVxdWVzdAomIzQzOwkgKiBoZWxwZXJzIChjYXBhYmlsaXR5L3JlZ2lzdGVyL3VucmVnaXN0ZXIpIGFuZCByZWFkL2NsZWFyZWQgYnkgdGhlCiYjNDM7CSAqIGFkbWluX21zZ193b3JrIHJlY2VpdmUgaGFuZGxlcnMuICBObyBleHBsaWNpdCBsb2NrIGlzIG5lZWRlZCBiZWNhdXNlCiYjNDM7CSAqIG9ubHkgb25lIHJlcXVlc3QgaXMgaW4gZmxpZ2h0IGF0IGEgdGltZTogcmVxdWVzdGVycyBydW4gdW5kZXIgUlROTCBvcgomIzQzOwkgKiBzaW5nbGUtdGhyZWFkZWQgcHJvYmUvcmVtb3ZlLCBzbyBlYWNoIHJlcXVlc3QgaXMgc2VyaWFsaXplZCBhbmQgaXRzCiYjNDM7CSAqIHJlcGx5IGNvbXBsZXRlcyBtYm94X2NvbXAgYmVmb3JlIHRoZSBuZXh0IHJlcXVlc3QgaXMgaXNzdWVkLgomIzQzOwkgKi8KJiM0MzsJc3RydWN0IGNvbXBsZXRpb24gbWJveF9jb21wOwomIzQzOwl1OCBtYm94X2V4cGVjdGVkX3JlcGx5OwomIzQzOwlib29sIG1ib3hfaW5pdGlhbGl6ZWQ7CiYjNDM7CiYjNDM7CS8qIFBGOiBwZXItVkYgTUJPWCBzdGF0ZSwgYWxsb2NhdGVkIHdoZW4gU1JJT1YgVjIgaXMgZW5hYmxlZCAqLwomIzQzOwlzdHJ1Y3QgZW5pY192Zl9zdGF0ZSB7CiYjNDM7CQlib29sIHJlZ2lzdGVyZWQ7CiYjNDM7CX0gKnZmX3N0YXRlOwogfTsKIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgbmV0X2RldmljZSAqdm5pY19nZXRfbmV0ZGV2KHN0cnVjdCB2bmljX2RldiAqdmRldikKQEAgLTQxNyw2ICYjNDM7NDUyLDcgQEAgdm9pZCBlbmljX3Jlc2V0X2FkZHJfbGlzdHMoc3RydWN0IGVuaWMgKmVuaWMpOwogaW50IGVuaWNfc3Jpb3ZfZW5hYmxlZChzdHJ1Y3QgZW5pYyAqZW5pYyk7CiBpbnQgZW5pY19pc192YWxpZF92ZihzdHJ1Y3QgZW5pYyAqZW5pYywgaW50IHZmKTsKIGludCBlbmljX2lzX2R5bmFtaWMoc3RydWN0IGVuaWMgKmVuaWMpOwomIzQzO2ludCBlbmljX2lzX3NyaW92X3ZmX3YyKHN0cnVjdCBlbmljICplbmljKTsKIHZvaWQgZW5pY19zZXRfZXRodG9vbF9vcHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7CiBpbnQgX19lbmljX3NldF9yc3NrZXkoc3RydWN0IGVuaWMgKmVuaWMpOwogdm9pZCBlbmljX2V4dF9jcShzdHJ1Y3QgZW5pYyAqZW5pYyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfYWRtaW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19hZG1pbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi4yNDI2NDRmYTJjYmY5MAotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19hZG1pbi5jCkBAIC0wLDAgJiM0MzsxLDYyNiBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKJiM0MzsvLyBDb3B5cmlnaHQgMjAyNSBDaXNjbyBTeXN0ZW1zLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9rZXJuZWwuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbmV0ZGV2aWNlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2RtYS1tYXBwaW5nLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2ludGVycnVwdC5oJmd0OwomIzQzOwomIzQzOyNpbmNsdWRlICYjMzQ7dm5pY19kZXYuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDt2bmljX3dxLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7dm5pY19ycS5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O3ZuaWNfY3EuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDt2bmljX2ludHIuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDt2bmljX3Jlc291cmNlLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7dm5pY19kZXZjbWQuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtlbmljLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7ZW5pY19hZG1pbi5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2NxX2Rlc2MuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtjcV9lbmV0X2Rlc2MuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDt3cV9lbmV0X2Rlc2MuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtycV9lbmV0X2Rlc2MuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtlbmljX21ib3guaCYjMzQ7CiYjNDM7CiYjNDM7LyogQ2xlYW4gdXAgYW55IGFkbWluIFdRIGJ1ZmZlcnMgc3RpbGwgaGVsZCBieSBoYXJkd2FyZSBhdCBjbG9zZSB0aW1lLgomIzQzOyAqIE5vcm1hbGx5IGJ1ZmZlcnMgYXJlIGZyZWVkIGlubGluZSBhZnRlciBzZW5kIGNvbXBsZXRpb24sIGJ1dCBhIHRpbWVkLW91dAomIzQzOyAqIHNlbmQgaW50ZW50aW9uYWxseSBsZWF2ZXMgdGhlIGJ1ZmZlciBsaXZlIHVudGlsIHRoZSBxdWV1ZSBpcyBzdG9wcGVkLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIGVuaWNfYWRtaW5fd3FfYnVmX2NsZWFuKHN0cnVjdCB2bmljX3dxICp3cSwKJiM0MzsJCQkJICAgIHN0cnVjdCB2bmljX3dxX2J1ZiAqYnVmKQomIzQzO3sKJiM0MzsJc3RydWN0IGVuaWMgKmVuaWMgPSB2bmljX2Rldl9wcml2KHdxLSZndDt2ZGV2KTsKJiM0MzsKJiM0MzsJaWYgKGJ1Zi0mZ3Q7b3NfYnVmKSB7CiYjNDM7CQlkbWFfdW5tYXBfc2luZ2xlKCZhbXA7ZW5pYy0mZ3Q7cGRldi0mZ3Q7ZGV2LCBidWYtJmd0O2RtYV9hZGRyLAomIzQzOwkJCQkgYnVmLSZndDtsZW4sIERNQV9UT19ERVZJQ0UpOwomIzQzOwkJa2ZyZWUoYnVmLSZndDtvc19idWYpOwomIzQzOwkJYnVmLSZndDtvc19idWYgPSBOVUxMOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGVuaWNfYWRtaW5fcnFfYnVmX2NsZWFuKHN0cnVjdCB2bmljX3JxICpycSwKJiM0MzsJCQkJICAgIHN0cnVjdCB2bmljX3JxX2J1ZiAqYnVmKQomIzQzO3sKJiM0MzsJc3RydWN0IGVuaWMgKmVuaWMgPSB2bmljX2Rldl9wcml2KHJxLSZndDt2ZGV2KTsKJiM0MzsKJiM0MzsJaWYgKCFidWYtJmd0O29zX2J1ZikKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJZG1hX3VubWFwX3NpbmdsZSgmYW1wO2VuaWMtJmd0O3BkZXYtJmd0O2RldiwgYnVmLSZndDtkbWFfYWRkciwgYnVmLSZndDtsZW4sCiYjNDM7CQkJIERNQV9GUk9NX0RFVklDRSk7CiYjNDM7CWtmcmVlKGJ1Zi0mZ3Q7b3NfYnVmKTsKJiM0MzsJYnVmLSZndDtvc19idWYgPSBOVUxMOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGVuaWNfYWRtaW5fcnFfcG9zdF9vbmUoc3RydWN0IGVuaWMgKmVuaWMsIGdmcF90IGdmcCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB2bmljX3JxICpycSA9ICZhbXA7ZW5pYy0mZ3Q7YWRtaW5fcnE7CiYjNDM7CXN0cnVjdCBycV9lbmV0X2Rlc2MgKmRlc2M7CiYjNDM7CWRtYV9hZGRyX3QgZG1hX2FkZHI7CiYjNDM7CXZvaWQgKmJ1ZjsKJiM0MzsKJiM0MzsJYnVmID0ga21hbGxvYyhFTklDX0FETUlOX0JVRl9TSVpFLCBnZnApOwomIzQzOwlpZiAoIWJ1ZikKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwlkbWFfYWRkciA9IGRtYV9tYXBfc2luZ2xlKCZhbXA7ZW5pYy0mZ3Q7cGRldi0mZ3Q7ZGV2LCBidWYsIEVOSUNfQURNSU5fQlVGX1NJWkUsCiYjNDM7CQkJCSAgRE1BX0ZST01fREVWSUNFKTsKJiM0MzsJaWYgKGRtYV9tYXBwaW5nX2Vycm9yKCZhbXA7ZW5pYy0mZ3Q7cGRldi0mZ3Q7ZGV2LCBkbWFfYWRkcikpIHsKJiM0MzsJCWtmcmVlKGJ1Zik7CiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJfQomIzQzOwomIzQzOwlkZXNjID0gdm5pY19ycV9uZXh0X2Rlc2MocnEpOwomIzQzOwlycV9lbmV0X2Rlc2NfZW5jKGRlc2MsICh1NjQpZG1hX2FkZHIgfCBWTklDX1BBRERSX1RBUkdFVCwKJiM0MzsJCQkgUlFfRU5FVF9UWVBFX09OTFlfU09QLCBFTklDX0FETUlOX0JVRl9TSVpFKTsKJiM0MzsJdm5pY19ycV9wb3N0KHJxLCBidWYsIDAsIGRtYV9hZGRyLCBFTklDX0FETUlOX0JVRl9TSVpFLCAwKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgZW5pY19hZG1pbl9ycV9maWxsKHN0cnVjdCBlbmljICplbmljLCBnZnBfdCBnZnApCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgdm5pY19ycSAqcnEgPSAmYW1wO2VuaWMtJmd0O2FkbWluX3JxOwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwl3aGlsZSAodm5pY19ycV9kZXNjX2F2YWlsKHJxKSAmZ3Q7IDApIHsKJiM0MzsJCWVyciA9IGVuaWNfYWRtaW5fcnFfcG9zdF9vbmUoZW5pYywgZ2ZwKTsKJiM0MzsJCWlmIChlcnIpCiYjNDM7CQkJcmV0dXJuIGVycjsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgZW5pY19hZG1pbl9ycV9kcmFpbihzdHJ1Y3QgZW5pYyAqZW5pYykKJiM0Mzt7CiYjNDM7CXZuaWNfcnFfY2xlYW4oJmFtcDtlbmljLSZndDthZG1pbl9ycSwgZW5pY19hZG1pbl9ycV9idWZfY2xlYW4pOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdW5zaWduZWQgaW50IGVuaWNfYWRtaW5fY3FfY29sb3Iodm9pZCAqY3FfZGVzYywgdW5zaWduZWQgaW50IGRlc2Nfc2l6ZSkKJiM0Mzt7CiYjNDM7CXU4IHR5cGVfY29sb3IgPSAqKCh1OCAqKWNxX2Rlc2MgJiM0MzsgZGVzY19zaXplIC0gMSk7CiYjNDM7CiYjNDM7CXJldHVybiAodHlwZV9jb2xvciAmZ3Q7Jmd0OyBDUV9ERVNDX0NPTE9SX1NISUZUKSAmYW1wOyBDUV9ERVNDX0NPTE9SX01BU0s7CiYjNDM7fQomIzQzOwomIzQzO3Vuc2lnbmVkIGludCBlbmljX2FkbWluX3dxX2NxX3NlcnZpY2Uoc3RydWN0IGVuaWMgKmVuaWMpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgdm5pY19jcSAqY3EgPSAmYW1wO2VuaWMtJmd0O2FkbWluX2NxWzBdOwomIzQzOwl1bnNpZ25lZCBpbnQgd29yayA9IDA7CiYjNDM7CXZvaWQgKmRlc2M7CiYjNDM7CiYjNDM7CWRlc2MgPSB2bmljX2NxX3RvX2NsZWFuKGNxKTsKJiM0MzsJd2hpbGUgKGVuaWNfYWRtaW5fY3FfY29sb3IoZGVzYywgY3EtJmd0O3JpbmcuZGVzY19zaXplKSAhPQomIzQzOwkgICAgICAgY3EtJmd0O2xhc3RfY29sb3IpIHsKJiM0MzsJCXZuaWNfY3FfaW5jX3RvX2NsZWFuKGNxKTsKJiM0MzsJCXdvcmsmIzQzOyYjNDM7OwomIzQzOwkJZGVzYyA9IHZuaWNfY3FfdG9fY2xlYW4oY3EpOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiB3b3JrOwomIzQzO30KJiM0MzsKJiM0MzsvKiBVcHBlciBib3VuZCBvbiBwZW5kaW5nIGFkbWluIG1lc3NhZ2VzLiAgQSBidWdneSBvciBob3N0aWxlIFZGIGNvdWxkIGZsb29kCiYjNDM7ICogdGhlIFBGIGFkbWluIGNoYW5uZWwgZmFzdGVyIHRoYW4gYWRtaW5fbXNnX3dvcmsgZHJhaW5zIGl0OyBjYXAgdGhlIGJhY2tsb2cKJiM0MzsgKiBzbyBhIGd1ZXN0IGNhbm5vdCBkcml2ZSB0aGUgaG9zdCBvdXQgb2YgbWVtb3J5LgomIzQzOyAqLwomIzQzOyNkZWZpbmUgRU5JQ19BRE1JTl9NU0dfTUFYCTI1NgomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGVuaWNfYWRtaW5fbXNnX2VucXVldWUoc3RydWN0IGVuaWMgKmVuaWMsIHZvaWQgKmJ1ZiwKJiM0MzsJCQkJICAgdW5zaWduZWQgaW50IGxlbikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBlbmljX2FkbWluX21zZyAqbXNnOwomIzQzOwomIzQzOwltc2cgPSBrbWFsbG9jKHN0cnVjdF9zaXplKG1zZywgZGF0YSwgbGVuKSwgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmICghbXNnKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwltc2ctJmd0O2xlbiA9IGxlbjsKJiM0MzsJbWVtY3B5KG1zZy0mZ3Q7ZGF0YSwgYnVmLCBsZW4pOwomIzQzOwomIzQzOwlzcGluX2xvY2soJmFtcDtlbmljLSZndDthZG1pbl9tc2dfbG9jayk7CiYjNDM7CWlmIChlbmljLSZndDthZG1pbl9tc2dfY291bnQgJmd0Oz0gRU5JQ19BRE1JTl9NU0dfTUFYKSB7CiYjNDM7CQlzcGluX3VubG9jaygmYW1wO2VuaWMtJmd0O2FkbWluX21zZ19sb2NrKTsKJiM0MzsJCWtmcmVlKG1zZyk7CiYjNDM7CQlpZiAobmV0X3JhdGVsaW1pdCgpKQomIzQzOwkJCW5ldGRldl93YXJuKGVuaWMtJmd0O25ldGRldiwKJiM0MzsJCQkJICAgICYjMzQ7YWRtaW4gbXNnIGJhY2tsb2cgZnVsbCAoJXUpOyBkcm9wcGluZ1xuJiMzNDssCiYjNDM7CQkJCSAgICBFTklDX0FETUlOX01TR19NQVgpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CWxpc3RfYWRkX3RhaWwoJmFtcDttc2ctJmd0O2xpc3QsICZhbXA7ZW5pYy0mZ3Q7YWRtaW5fbXNnX2xpc3QpOwomIzQzOwllbmljLSZndDthZG1pbl9tc2dfY291bnQmIzQzOyYjNDM7OwomIzQzOwlzcGluX3VubG9jaygmYW1wO2VuaWMtJmd0O2FkbWluX21zZ19sb2NrKTsKJiM0Mzt9CiYjNDM7CiYjNDM7dW5zaWduZWQgaW50IGVuaWNfYWRtaW5fcnFfY3Ffc2VydmljZShzdHJ1Y3QgZW5pYyAqZW5pYykKJiM0Mzt7CiYjNDM7CXN0cnVjdCB2bmljX2NxICpjcSA9ICZhbXA7ZW5pYy0mZ3Q7YWRtaW5fY3FbMV07CiYjNDM7CXN0cnVjdCB2bmljX3JxICpycSA9ICZhbXA7ZW5pYy0mZ3Q7YWRtaW5fcnE7CiYjNDM7CXN0cnVjdCBjcV9lbmV0X3JxX2Rlc2MgKnJxX2Rlc2M7CiYjNDM7CXN0cnVjdCB2bmljX3JxX2J1ZiAqYnVmOwomIzQzOwl1MTYgYndmLCBieXRlc193cml0dGVuOwomIzQzOwl1bnNpZ25lZCBpbnQgd29yayA9IDA7CiYjNDM7CXZvaWQgKmRlc2M7CiYjNDM7CiYjNDM7CS8qIFRoZSBhZG1pbiBSUSBhbmQgaXRzIENRIGZvcm0gYSBzaW5nbGUgaW4tb3JkZXIgY2hhbm5lbDogZmlybXdhcmUKJiM0MzsJICogcG9zdHMgZXhhY3RseSBvbmUgQ1FFIHBlciBjb25zdW1lZCBSUSBkZXNjcmlwdG9yLCBpbiBzdWJtaXNzaW9uCiYjNDM7CSAqIG9yZGVyLiAgRWFjaCBDUUUgdGhlcmVmb3JlIHBhaXJzIHdpdGggcnEtJmd0O3RvX2NsZWFuIGJlbG93IHdpdGhvdXQgYQomIzQzOwkgKiBjb21wbGV0ZWRfaW5kZXggY3Jvc3MtY2hlY2ssIG1pcnJvcmluZyB0aGUgaW4tb3JkZXIgYXNzdW1wdGlvbiBvZgomIzQzOwkgKiB0aGUgbWFpbiBlbmljIFJYIHBhdGguCiYjNDM7CSAqLwomIzQzOwlkZXNjID0gdm5pY19jcV90b19jbGVhbihjcSk7CiYjNDM7CXdoaWxlIChlbmljX2FkbWluX2NxX2NvbG9yKGRlc2MsIGNxLSZndDtyaW5nLmRlc2Nfc2l6ZSkgIT0KJiM0MzsJICAgICAgIGNxLSZndDtsYXN0X2NvbG9yKSB7CiYjNDM7CQkvKiBFbnN1cmUgRE1BIGRlc2NyaXB0b3IgZmllbGRzIGFyZSByZWFkIGFmdGVyCiYjNDM7CQkgKiB0aGUgY29sb3IvdmFsaWQgY2hlY2suICBkbWFfcm1iKCkgaXMgdGhlCiYjNDM7CQkgKiBjb3JyZWN0IGJhcnJpZXIgZm9yIERNQS13cml0dGVuIGRlc2NyaXB0b3JzLgomIzQzOwkJICovCiYjNDM7CQlkbWFfcm1iKCk7CiYjNDM7CQlidWYgPSBycS0mZ3Q7dG9fY2xlYW47CiYjNDM7CiYjNDM7CQkvKiBEZWNvZGUgdGhlIGFjdHVhbCBudW1iZXIgb2YgYnl0ZXMgaGFyZHdhcmUgd3JvdGUgaW50bwomIzQzOwkJICogdGhlIFJYIGJ1ZmZlci4gIGJ1Zi0mZ3Q7bGVuIGlzIHRoZSBzdGF0aWMgYWxsb2NhdGlvbiBzaXplCiYjNDM7CQkgKiAoRU5JQ19BRE1JTl9CVUZfU0laRSkgYW5kIHdvdWxkIGV4cG9zZSB1bmluaXRpYWxpc2VkCiYjNDM7CQkgKiBoZWFwIG1lbW9yeSBiZXlvbmQgdGhlIHJlYWwgcGF5bG9hZC4gIGJ5dGVzX3dyaXR0ZW5fZmxhZ3MKJiM0MzsJCSAqIGlzIGF0IHRoZSBzYW1lIG9mZnNldCBpbiBldmVyeSBjcV9lbmV0X3JxX2Rlc2NbXzMyfF82NF0KJiM0MzsJCSAqIHZhcmlhbnQuCiYjNDM7CQkgKi8KJiM0MzsJCXJxX2Rlc2MgPSBkZXNjOwomIzQzOwkJYndmID0gbGUxNl90b19jcHUocnFfZGVzYy0mZ3Q7Ynl0ZXNfd3JpdHRlbl9mbGFncyk7CiYjNDM7CQlieXRlc193cml0dGVuID0gYndmICZhbXA7IENRX0VORVRfUlFfREVTQ19CWVRFU19XUklUVEVOX01BU0s7CiYjNDM7CQlpZiAoYnl0ZXNfd3JpdHRlbiAmZ3Q7IGJ1Zi0mZ3Q7bGVuKQomIzQzOwkJCWdvdG8gbmV4dF9kZXNjOwomIzQzOwomIzQzOwkJZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoJmFtcDtlbmljLSZndDtwZGV2LSZndDtkZXYsCiYjNDM7CQkJCQlidWYtJmd0O2RtYV9hZGRyLCBidWYtJmd0O2xlbiwKJiM0MzsJCQkJCURNQV9GUk9NX0RFVklDRSk7CiYjNDM7CiYjNDM7CQkvKiBEcm9wIG9uIGhhcmR3YXJlIGVycm9yIGluZGljYXRpb25zLiAgQWRtaW4gbWVzc2FnZXMKJiM0MzsJCSAqIGFyZSBpbnRlcm5hbCB0byB0aGUgVklDLCBub3QgcmVjZWl2ZWQgb3ZlciB0aGUgd2lyZS4KJiM0MzsJCSAqIEZpcm13YXJlIHNldHMgVFJVTkNBVEVEIHdoZW4gdGhlIG1lc3NhZ2UgZG9lcyBub3QgZml0CiYjNDM7CQkgKiBpbiB0aGUgcG9zdGVkIGJ1ZmZlciwgYW5kIEZDU19PSyBpcyBhbHdheXMgc2V0IG9uCiYjNDM7CQkgKiBoZWFsdGh5IGFkbWluIGNvbXBsZXRpb25zLgomIzQzOwkJICovCiYjNDM7CQlpZiAoYndmICZhbXA7IENRX0VORVRfUlFfREVTQ19GTEFHU19UUlVOQ0FURUQpIHsKJiM0MzsJCQluZXRkZXZfd2Fybl9vbmNlKGVuaWMtJmd0O25ldGRldiwKJiM0MzsJCQkJCSAmIzM0O2FkbWluIFJROiB0cnVuY2F0ZWQgbWVzc2FnZSBkcm9wcGVkXG4mIzM0Oyk7CiYjNDM7CQkJZ290byBuZXh0X2Rlc2M7CiYjNDM7CQl9CiYjNDM7CQlpZiAoIShycV9kZXNjLSZndDtmbGFncyAmYW1wOyBDUV9FTkVUX1JRX0RFU0NfRkxBR1NfRkNTX09LKSkgewomIzQzOwkJCW5ldGRldl93YXJuX29uY2UoZW5pYy0mZ3Q7bmV0ZGV2LAomIzQzOwkJCQkJICYjMzQ7YWRtaW4gUlE6IGJhZCBGQ1MsIGRyb3BwaW5nIG1lc3NhZ2VcbiYjMzQ7KTsKJiM0MzsJCQlnb3RvIG5leHRfZGVzYzsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWlmIChlbmljLSZndDthZG1pbl9ycV9oYW5kbGVyKSB7CiYjNDM7CQkJdTE2IHNlbmRlcl92bGFuOwomIzQzOwomIzQzOwkJCS8qIEZpcm13YXJlIHNldHMgdGhlIENRIFZMQU4gZmllbGQgdG8gaWRlbnRpZnkgdGhlCiYjNDM7CQkJICogc2VuZGVyOiAwID0gUEYsIDEtYmFzZWQgPSBWRiBpbmRleC4gIE92ZXJ3cml0ZQomIzQzOwkJCSAqIHRoZSB1bnRydXN0ZWQgc3JjX3ZuaWNfaWQgaW4gdGhlIE1CT1ggaGVhZGVyIHdpdGgKJiM0MzsJCQkgKiB0aGUgaGFyZHdhcmUtdmVyaWZpZWQgdmFsdWUuCiYjNDM7CQkJICovCiYjNDM7CQkJc2VuZGVyX3ZsYW4gPSBsZTE2X3RvX2NwdShycV9kZXNjLSZndDt2bGFuKTsKJiM0MzsJCQlpZiAoYnl0ZXNfd3JpdHRlbiAmZ3Q7PSBzaXplb2Yoc3RydWN0IGVuaWNfbWJveF9oZHIpKSB7CiYjNDM7CQkJCXN0cnVjdCBlbmljX21ib3hfaGRyICpoZHIgPSBidWYtJmd0O29zX2J1ZjsKJiM0MzsKJiM0MzsJCQkJaGRyLSZndDtzcmNfdm5pY19pZCA9IChzZW5kZXJfdmxhbiA9PSAwKSA/CiYjNDM7CQkJCQljcHVfdG9fbGUxNihFTklDX01CT1hfRFNUX1BGKSA6CiYjNDM7CQkJCQljcHVfdG9fbGUxNihzZW5kZXJfdmxhbiAtIDEpOwomIzQzOwkJCX0KJiM0MzsKJiM0MzsJCQllbmljX2FkbWluX21zZ19lbnF1ZXVlKGVuaWMsIGJ1Zi0mZ3Q7b3NfYnVmLAomIzQzOwkJCQkJICAgICAgIGJ5dGVzX3dyaXR0ZW4pOwomIzQzOwkJfQomIzQzOwomIzQzO25leHRfZGVzYzoKJiM0MzsJCWVuaWNfYWRtaW5fcnFfYnVmX2NsZWFuKHJxLCBycS0mZ3Q7dG9fY2xlYW4pOwomIzQzOwkJcnEtJmd0O3RvX2NsZWFuID0gcnEtJmd0O3RvX2NsZWFuLSZndDtuZXh0OwomIzQzOwkJcnEtJmd0O3JpbmcuZGVzY19hdmFpbCYjNDM7JiM0Mzs7CiYjNDM7CiYjNDM7CQl2bmljX2NxX2luY190b19jbGVhbihjcSk7CiYjNDM7CQl3b3JrJiM0MzsmIzQzOzsKJiM0MzsJCWRlc2MgPSB2bmljX2NxX3RvX2NsZWFuKGNxKTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoZW5pY19hZG1pbl9ycV9maWxsKGVuaWMsIEdGUF9LRVJORUwpICZhbXA7JmFtcDsgbmV0X3JhdGVsaW1pdCgpKQomIzQzOwkJbmV0ZGV2X3dhcm4oZW5pYy0mZ3Q7bmV0ZGV2LAomIzQzOwkJCSAgICAmIzM0O2FkbWluIFJRIHJlZmlsbCBmYWlsZWRcbiYjMzQ7KTsKJiM0MzsKJiM0MzsJcmV0dXJuIHdvcms7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpcnFyZXR1cm5fdCBlbmljX2FkbWluX2lzcl9tc2l4KGludCBpcnEsIHZvaWQgKmRhdGEpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZW5pYyAqZW5pYyA9IGRhdGE7CiYjNDM7CiYjNDM7CXNjaGVkdWxlX3dvcmsoJmFtcDtlbmljLSZndDthZG1pbl9wb2xsX3dvcmspOwomIzQzOwomIzQzOwlyZXR1cm4gSVJRX0hBTkRMRUQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGVuaWNfYWRtaW5fbXNnX3dvcmtfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZW5pYyAqZW5pYyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZW5pYywgYWRtaW5fbXNnX3dvcmspOwomIzQzOwlzdHJ1Y3QgZW5pY19hZG1pbl9tc2cgKm1zZywgKnRtcDsKJiM0MzsJTElTVF9IRUFEKGxvY2FsX2xpc3QpOwomIzQzOwomIzQzOwlzcGluX2xvY2tfYmgoJmFtcDtlbmljLSZndDthZG1pbl9tc2dfbG9jayk7CiYjNDM7CWxpc3Rfc3BsaWNlX2luaXQoJmFtcDtlbmljLSZndDthZG1pbl9tc2dfbGlzdCwgJmFtcDtsb2NhbF9saXN0KTsKJiM0MzsJZW5pYy0mZ3Q7YWRtaW5fbXNnX2NvdW50ID0gMDsKJiM0MzsJc3Bpbl91bmxvY2tfYmgoJmFtcDtlbmljLSZndDthZG1pbl9tc2dfbG9jayk7CiYjNDM7CiYjNDM7CWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShtc2csIHRtcCwgJmFtcDtsb2NhbF9saXN0LCBsaXN0KSB7CiYjNDM7CQlpZiAoZW5pYy0mZ3Q7YWRtaW5fcnFfaGFuZGxlcikKJiM0MzsJCQllbmljLSZndDthZG1pbl9ycV9oYW5kbGVyKGVuaWMsIG1zZy0mZ3Q7ZGF0YSwgbXNnLSZndDtsZW4pOwomIzQzOwkJbGlzdF9kZWwoJmFtcDttc2ctJmd0O2xpc3QpOwomIzQzOwkJa2ZyZWUobXNnKTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBlbmljX2FkbWluX3BvbGxfd29ya19oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBlbmljICplbmljID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBlbmljLCBhZG1pbl9wb2xsX3dvcmspOwomIzQzOwl1bnNpZ25lZCBpbnQgY3JlZGl0czsKJiM0MzsJdW5zaWduZWQgaW50IHJxX3dvcms7CiYjNDM7CiYjNDM7CWNyZWRpdHMgPSB2bmljX2ludHJfY3JlZGl0cygmYW1wO2VuaWMtJmd0O2FkbWluX2ludHIpOwomIzQzOwomIzQzOwlycV93b3JrID0gZW5pY19hZG1pbl9ycV9jcV9zZXJ2aWNlKGVuaWMpOwomIzQzOwomIzQzOwlpZiAocnFfd29yayAmZ3Q7IDApCiYjNDM7CQlzY2hlZHVsZV93b3JrKCZhbXA7ZW5pYy0mZ3Q7YWRtaW5fbXNnX3dvcmspOwomIzQzOwomIzQzOwl2bmljX2ludHJfcmV0dXJuX2NyZWRpdHMoJmFtcDtlbmljLSZndDthZG1pbl9pbnRyLAomIzQzOwkJCQkgY3JlZGl0cyA/OiAxLAomIzQzOwkJCQkgMSAvKiB1bm1hc2sgKi8sIDApOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGVuaWNfYWRtaW5fc2V0dXBfaW50cihzdHJ1Y3QgZW5pYyAqZW5pYykKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGludCBpbnRyX2luZGV4ID0gZW5pYy0mZ3Q7aW50cl9jb3VudDsKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJaWYgKHZuaWNfZGV2X2dldF9pbnRyX21vZGUoZW5pYy0mZ3Q7dmRldikgIT0gVk5JQ19ERVZfSU5UUl9NT0RFX01TSVggfHwKJiM0MzsJICAgIGludHJfaW5kZXggJmd0Oz0gZW5pYy0mZ3Q7aW50cl9hdmFpbCkKJiM0MzsJCXJldHVybiAtRU5PREVWOwomIzQzOwomIzQzOwkvKiBUaGUgYWRtaW4gSU5UUiB1c2VzIGEgc2xvdCBpbiB0aGUgc2FtZSBSRVNfVFlQRV9JTlRSX0NUUkwKJiM0MzsJICogc3RyaWRlZCBhcnJheSBvZiBwZXItdmVjdG9yIGNvbnRyb2wgYmxvY2tzIChtYXNrLCBjb2FsZXNjaW5nCiYjNDM7CSAqIHRpbWVyLCBjcmVkaXQgcmV0dXJuKSB0aGF0IHRoZSBkYXRhLXBhdGggSVJRcyBvY2N1cHkgaW4gQkFSMC4KJiM0MzsJICogdm5pY19pbnRyX2FsbG9jKCkgZGVmYXVsdHMgdG8gUkVTX1RZUEVfSU5UUl9DVFJMLCB3aGljaCBpcyB3aGF0CiYjNDM7CSAqIHdlIHdhbnQgaGVyZS4KJiM0MzsJICovCiYjNDM7CWVyciA9IHZuaWNfaW50cl9hbGxvYyhlbmljLSZndDt2ZGV2LCAmYW1wO2VuaWMtJmd0O2FkbWluX2ludHIsIGludHJfaW5kZXgpOwomIzQzOwlpZiAoZXJyKSB7CiYjNDM7CQluZXRkZXZfd2FybihlbmljLSZndDtuZXRkZXYsCiYjNDM7CQkJICAgICYjMzQ7RmFpbGVkIHRvIGFsbG9jIGFkbWluIGludHIgYXQgaW5kZXggJXU6ICVkXG4mIzM0OywKJiM0MzsJCQkgICAgaW50cl9pbmRleCwgZXJyKTsKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZW5pYy0mZ3Q7YWRtaW5faW50cl9pbmRleCA9IGludHJfaW5kZXg7CiYjNDM7CiYjNDM7CS8qIEEgVjIgVkYgb3BlbnMgdGhlIGFkbWluIGNoYW5uZWwgZHVyaW5nIHByb2JlLCBiZWZvcmUKJiM0MzsJICogcmVnaXN0ZXJfbmV0ZGV2KCkgcmVzb2x2ZXMgdGhlICYjMzQ7ZXRoJWQmIzM0OyBuYW1lIHRlbXBsYXRlLCBzbyB1c2luZwomIzQzOwkgKiBuZXRkZXYtJmd0O25hbWUgaGVyZSB3b3VsZCByZWdpc3RlciB0aGUgbGl0ZXJhbCAmIzM0O2V0aCVkLWFkbWluJiMzNDsgaW4KJiM0MzsJICogL3Byb2MvaW50ZXJydXB0cy4gIFVzZSB0aGUgYWxyZWFkeS1zdGFibGUgUENJIGRldmljZSBuYW1lIGluc3RlYWQuCiYjNDM7CSAqLwomIzQzOwlzbnByaW50ZihlbmljLSZndDttc2l4W2ludHJfaW5kZXhdLmRldm5hbWUsCiYjNDM7CQkgc2l6ZW9mKGVuaWMtJmd0O21zaXhbaW50cl9pbmRleF0uZGV2bmFtZSksCiYjNDM7CQkgJiMzNDslcy1hZG1pbiYjMzQ7LCBwY2lfbmFtZShlbmljLSZndDtwZGV2KSk7CiYjNDM7CWVuaWMtJmd0O21zaXhbaW50cl9pbmRleF0uaXNyID0gZW5pY19hZG1pbl9pc3JfbXNpeDsKJiM0MzsJZW5pYy0mZ3Q7bXNpeFtpbnRyX2luZGV4XS5kZXZpZCA9IGVuaWM7CiYjNDM7CiYjNDM7CWVyciA9IHJlcXVlc3RfaXJxKGVuaWMtJmd0O21zaXhfZW50cnlbaW50cl9pbmRleF0udmVjdG9yLAomIzQzOwkJCSAgZW5pYy0mZ3Q7bXNpeFtpbnRyX2luZGV4XS5pc3IsIDAsCiYjNDM7CQkJICBlbmljLSZndDttc2l4W2ludHJfaW5kZXhdLmRldm5hbWUsCiYjNDM7CQkJICBlbmljLSZndDttc2l4W2ludHJfaW5kZXhdLmRldmlkKTsKJiM0MzsJaWYgKGVycikgewomIzQzOwkJbmV0ZGV2X3dhcm4oZW5pYy0mZ3Q7bmV0ZGV2LAomIzQzOwkJCSAgICAmIzM0O0ZhaWxlZCB0byByZXF1ZXN0IGFkbWluIE1TSS1YIGlycTogJWRcbiYjMzQ7LCBlcnIpOwomIzQzOwkJdm5pY19pbnRyX2ZyZWUoJmFtcDtlbmljLSZndDthZG1pbl9pbnRyKTsKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZW5pYy0mZ3Q7bXNpeFtpbnRyX2luZGV4XS5yZXF1ZXN0ZWQgPSAxOwomIzQzOwomIzQzOwluZXRkZXZfZGJnKGVuaWMtJmd0O25ldGRldiwKJiM0MzsJCSAgICYjMzQ7YWRtaW4gY2hhbm5lbCB1c2luZyBNU0ktWCBpbnRlcnJ1cHQgKGluZGV4ICV1KVxuJiMzNDssCiYjNDM7CQkgICBpbnRyX2luZGV4KTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGVuaWNfYWRtaW5fdGVhcmRvd25faW50cihzdHJ1Y3QgZW5pYyAqZW5pYykKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGludCBpbnRyX2luZGV4ID0gZW5pYy0mZ3Q7YWRtaW5faW50cl9pbmRleDsKJiM0MzsKJiM0MzsJZnJlZV9pcnEoZW5pYy0mZ3Q7bXNpeF9lbnRyeVtpbnRyX2luZGV4XS52ZWN0b3IsCiYjNDM7CQkgZW5pYy0mZ3Q7bXNpeFtpbnRyX2luZGV4XS5kZXZpZCk7CiYjNDM7CWNhbmNlbF93b3JrX3N5bmMoJmFtcDtlbmljLSZndDthZG1pbl9wb2xsX3dvcmspOwomIzQzOwllbmljLSZndDttc2l4W2ludHJfaW5kZXhdLnJlcXVlc3RlZCA9IDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgZW5pY19hZG1pbl9xcF90eXBlX3NldChzdHJ1Y3QgZW5pYyAqZW5pYywgdTMyIGVuYWJsZSkKJiM0Mzt7CiYjNDM7CXU2NCBhMCA9IFFQX1RZUEVfQURNSU4sIGExID0gZW5hYmxlOwomIzQzOwlpbnQgd2FpdCA9IDEwMDA7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CXNwaW5fbG9ja19iaCgmYW1wO2VuaWMtJmd0O2RldmNtZF9sb2NrKTsKJiM0MzsJZXJyID0gdm5pY19kZXZfY21kKGVuaWMtJmd0O3ZkZXYsIENNRF9RUF9UWVBFX1NFVCwgJmFtcDthMCwgJmFtcDthMSwgd2FpdCk7CiYjNDM7CXNwaW5fdW5sb2NrX2JoKCZhbXA7ZW5pYy0mZ3Q7ZGV2Y21kX2xvY2spOwomIzQzOwomIzQzOwlyZXR1cm4gZXJyOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGVuaWNfYWRtaW5fYWxsb2NfcmVzb3VyY2VzKHN0cnVjdCBlbmljICplbmljKQomIzQzO3sKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJZXJyID0gdm5pY193cV9hbGxvY193aXRoX3R5cGUoZW5pYy0mZ3Q7dmRldiwgJmFtcDtlbmljLSZndDthZG1pbl93cSwgMCwKJiM0MzsJCQkJICAgICAgRU5JQ19BRE1JTl9ERVNDX0NPVU5ULAomIzQzOwkJCQkgICAgICBzaXplb2Yoc3RydWN0IHdxX2VuZXRfZGVzYyksCiYjNDM7CQkJCSAgICAgIFJFU19UWVBFX0FETUlOX1dRKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CiYjNDM7CWVyciA9IHZuaWNfcnFfYWxsb2Nfd2l0aF90eXBlKGVuaWMtJmd0O3ZkZXYsICZhbXA7ZW5pYy0mZ3Q7YWRtaW5fcnEsIDAsCiYjNDM7CQkJCSAgICAgIEVOSUNfQURNSU5fREVTQ19DT1VOVCwKJiM0MzsJCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBycV9lbmV0X2Rlc2MpLAomIzQzOwkJCQkgICAgICBSRVNfVFlQRV9BRE1JTl9SUSk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlnb3RvIGZyZWVfd3E7CiYjNDM7CiYjNDM7CS8qIGFkbWluX2NxWzBdIGlzIHRoZSBXUSBjb21wbGV0aW9uIHF1ZXVlLiAgV1EgQ1FFcyBhcmUgYWx3YXlzCiYjNDM7CSAqIDE2IGJ5dGVzIHdpZGU7IGZpcm13YXJlIGFsd2F5cyB3cml0ZXMgMTYtYnl0ZSBDUUVzIGZvciBXUQomIzQzOwkgKiBjb21wbGV0aW9ucyBvbiBldmVyeSBXUSwgaW5jbHVkaW5nIHRoZSBhZG1pbiBjaGFubmVsIFdRLgomIzQzOwkgKiBVc2Ugc2l6ZW9mKHN0cnVjdCBjcV9kZXNjKSBhY2NvcmRpbmdseS4KJiM0MzsJICovCiYjNDM7CWVyciA9IHZuaWNfY3FfYWxsb2Nfd2l0aF90eXBlKGVuaWMtJmd0O3ZkZXYsICZhbXA7ZW5pYy0mZ3Q7YWRtaW5fY3FbMF0sIDAsCiYjNDM7CQkJCSAgICAgIEVOSUNfQURNSU5fREVTQ19DT1VOVCwKJiM0MzsJCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBjcV9kZXNjKSwKJiM0MzsJCQkJICAgICAgUkVTX1RZUEVfQURNSU5fQ1EpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJZ290byBmcmVlX3JxOwomIzQzOwomIzQzOwkvKiBhZG1pbl9jcVsxXSBpcyB0aGUgUlEgY29tcGxldGlvbiBxdWV1ZS4gIEl0cyBkZXNjcmlwdG9yIHNpemUKJiM0MzsJICogbXVzdCBtYXRjaCB3aGF0IGZpcm13YXJlIHdyaXRlcy4gIGVuaWNfZXh0X2NxKCkgY2FsbGVkIGVhcmxpZXIKJiM0MzsJICogaW4gcHJvYmUgaXNzdWVzIENNRF9DUV9FTlRSWV9TSVpFX1NFVCBmb3IgVk5JQ19SUV9BTEwsCiYjNDM7CSAqIHByb2dyYW1taW5nIGZpcm13YXJlIHRvIHdyaXRlIENRIGVudHJpZXMgb2YgKDE2ICZsdDsmbHQ7IGVuaWMtJmd0O2V4dF9jcSkKJiM0MzsJICogYnl0ZXMgZm9yIGV2ZXJ5IFJRIENRIG9uIHRoZSB2TklDLCBpbmNsdWRpbmcgdGhlIGFkbWluIFJRIENRLgomIzQzOwkgKiBBbGxvY2F0aW5nIHdpdGggdGhlIHNhbWUgc2l6ZSBrZWVwcyB0aGUgaG9zdCBwb2xsZXIgYW5kCiYjNDM7CSAqIGZpcm13YXJlIGluIGxvY2tzdGVwOgomIzQzOwkgKgomIzQzOwkgKiAgIC0gVGhlIGNvbG9yL3ZhbGlkIGJpdCBsaXZlcyBhdCBieXRlIChkZXNjX3NpemUgLSAxKSBvZiBldmVyeQomIzQzOwkgKiAgICAgY3FfZW5ldF9ycV9kZXNjW18zMnxfNjRdIHZhcmlhbnQsIHNvIGVuaWNfYWRtaW5fY3FfY29sb3IoKQomIzQzOwkgKiAgICAgcmVhZHMgaXQgZnJvbSB0aGUgY29ycmVjdCBvZmZzZXQuCiYjNDM7CSAqICAgLSBPbmx5IHRoZSBmaXJzdCAxNSBieXRlcyBvZiB0aGUgZGVzY3JpcHRvciAodmxhbiwKJiM0MzsJICogICAgIGJ5dGVzX3dyaXR0ZW5fZmxhZ3MsIC4uLikgYXJlIGFjY2Vzc2VkIGJ5IHRoZSBhZG1pbiBwYXRoOwomIzQzOwkgKiAgICAgdGhlc2UgZmllbGRzIGFyZSBpZGVudGljYWwgYWNyb3NzIGFsbCB0aHJlZSB2YXJpYW50cyAoc2VlCiYjNDM7CSAqICAgICBjb21tZW50IGluIGVuaWNfcnEuYyBhYm92ZSBjcV9lbmV0X3JxX2Rlc2NfZGVjKCkpLgomIzQzOwkgKi8KJiM0MzsJZXJyID0gdm5pY19jcV9hbGxvY193aXRoX3R5cGUoZW5pYy0mZ3Q7dmRldiwgJmFtcDtlbmljLSZndDthZG1pbl9jcVsxXSwgMSwKJiM0MzsJCQkJICAgICAgRU5JQ19BRE1JTl9ERVNDX0NPVU5ULAomIzQzOwkJCQkgICAgICAxNiAmbHQ7Jmx0OyBlbmljLSZndDtleHRfY3EsCiYjNDM7CQkJCSAgICAgIFJFU19UWVBFX0FETUlOX0NRKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCWdvdG8gZnJlZV9jcTA7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzOwomIzQzO2ZyZWVfY3EwOgomIzQzOwl2bmljX2NxX2ZyZWUoJmFtcDtlbmljLSZndDthZG1pbl9jcVswXSk7CiYjNDM7ZnJlZV9ycToKJiM0MzsJdm5pY19ycV9mcmVlKCZhbXA7ZW5pYy0mZ3Q7YWRtaW5fcnEpOwomIzQzO2ZyZWVfd3E6CiYjNDM7CXZuaWNfd3FfZnJlZSgmYW1wO2VuaWMtJmd0O2FkbWluX3dxKTsKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgZW5pY19hZG1pbl9mcmVlX3Jlc291cmNlcyhzdHJ1Y3QgZW5pYyAqZW5pYykKJiM0Mzt7CiYjNDM7CXZuaWNfaW50cl9mcmVlKCZhbXA7ZW5pYy0mZ3Q7YWRtaW5faW50cik7CiYjNDM7CXZuaWNfY3FfZnJlZSgmYW1wO2VuaWMtJmd0O2FkbWluX2NxWzFdKTsKJiM0MzsJdm5pY19jcV9mcmVlKCZhbXA7ZW5pYy0mZ3Q7YWRtaW5fY3FbMF0pOwomIzQzOwl2bmljX3JxX2ZyZWUoJmFtcDtlbmljLSZndDthZG1pbl9ycSk7CiYjNDM7CXZuaWNfd3FfZnJlZSgmYW1wO2VuaWMtJmd0O2FkbWluX3dxKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgZW5pY19hZG1pbl9pbml0X3Jlc291cmNlcyhzdHJ1Y3QgZW5pYyAqZW5pYykKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGludCBpbnRyX29mZnNldCA9IGVuaWMtJmd0O2FkbWluX2ludHJfaW5kZXg7CiYjNDM7CiYjNDM7CXZuaWNfd3FfaW5pdCgmYW1wO2VuaWMtJmd0O2FkbWluX3dxLAomIzQzOwkJICAgICAwLCAwLCAwKTsgLyogY3FfaW5kZXgsIGVycl9pbnRyX2VuYWJsZSwgZXJyX2ludHJfb2Zmc2V0ICovCiYjNDM7CXZuaWNfcnFfaW5pdCgmYW1wO2VuaWMtJmd0O2FkbWluX3JxLAomIzQzOwkJICAgICAxLCAwLCAwKTsgLyogY3FfaW5kZXgsIGVycl9pbnRyX2VuYWJsZSwgZXJyX2ludHJfb2Zmc2V0ICovCiYjNDM7CXZuaWNfY3FfaW5pdCgmYW1wO2VuaWMtJmd0O2FkbWluX2NxWzBdLAomIzQzOwkJICAgICBWTklDX0NRX0ZDX0RJU0FCTEUsCiYjNDM7CQkgICAgIFZOSUNfQ1FfQ09MT1JfRU5BQkxFLAomIzQzOwkJICAgICAwLCAwLCAxLCAvKiBjcV9oZWFkLCBjcV90YWlsLCBjcV90YWlsX2NvbG9yICovCiYjNDM7CQkgICAgIFZOSUNfQ1FfSU5UUl9ESVNBQkxFLCAvKiBwb2xsZWQgc3luY2hyb25vdXNseSBieSBtYm94IHNlbmQgKi8KJiM0MzsJCSAgICAgVk5JQ19DUV9FTlRSWV9FTkFCTEUsCiYjNDM7CQkgICAgIFZOSUNfQ1FfTVNHX0RJU0FCTEUsCiYjNDM7CQkgICAgIGludHJfb2Zmc2V0LAomIzQzOwkJICAgICAwIC8qIGNxX21lc3NhZ2VfYWRkciAqLyk7CiYjNDM7CXZuaWNfY3FfaW5pdCgmYW1wO2VuaWMtJmd0O2FkbWluX2NxWzFdLAomIzQzOwkJICAgICBWTklDX0NRX0ZDX0RJU0FCTEUsCiYjNDM7CQkgICAgIFZOSUNfQ1FfQ09MT1JfRU5BQkxFLAomIzQzOwkJICAgICAwLCAwLCAxLCAvKiBjcV9oZWFkLCBjcV90YWlsLCBjcV90YWlsX2NvbG9yICovCiYjNDM7CQkgICAgIFZOSUNfQ1FfSU5UUl9FTkFCTEUsCiYjNDM7CQkgICAgIFZOSUNfQ1FfRU5UUllfRU5BQkxFLAomIzQzOwkJICAgICBWTklDX0NRX01TR19ESVNBQkxFLAomIzQzOwkJICAgICBpbnRyX29mZnNldCwKJiM0MzsJCSAgICAgMCAvKiBjcV9tZXNzYWdlX2FkZHIgKi8pOwomIzQzOwkvKiBjb2FsZXNjaW5nX3RpbWVyLCBjb2FsZXNjaW5nX3R5cGUsIG1hc2tfb25fYXNzZXJ0aW9uICovCiYjNDM7CXZuaWNfaW50cl9pbml0KCZhbXA7ZW5pYy0mZ3Q7YWRtaW5faW50ciwKJiM0MzsJCSAgICAgICAwLCAwLCAxKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgZW5pY19hZG1pbl9tc2dfZHJhaW4oc3RydWN0IGVuaWMgKmVuaWMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZW5pY19hZG1pbl9tc2cgKm1zZywgKnRtcDsKJiM0MzsKJiM0MzsJc3Bpbl9sb2NrX2JoKCZhbXA7ZW5pYy0mZ3Q7YWRtaW5fbXNnX2xvY2spOwomIzQzOwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobXNnLCB0bXAsICZhbXA7ZW5pYy0mZ3Q7YWRtaW5fbXNnX2xpc3QsIGxpc3QpIHsKJiM0MzsJCWxpc3RfZGVsKCZhbXA7bXNnLSZndDtsaXN0KTsKJiM0MzsJCWtmcmVlKG1zZyk7CiYjNDM7CX0KJiM0MzsJZW5pYy0mZ3Q7YWRtaW5fbXNnX2NvdW50ID0gMDsKJiM0MzsJc3Bpbl91bmxvY2tfYmgoJmFtcDtlbmljLSZndDthZG1pbl9tc2dfbG9jayk7CiYjNDM7fQomIzQzOwomIzQzO2ludCBlbmljX2FkbWluX2NoYW5uZWxfb3BlbihzdHJ1Y3QgZW5pYyAqZW5pYykKJiM0Mzt7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CWlmICghZW5pYy0mZ3Q7aGFzX2FkbWluX2NoYW5uZWwpCiYjNDM7CQlyZXR1cm4gLUVOT0RFVjsKJiM0MzsKJiM0MzsJZXJyID0gZW5pY19hZG1pbl9hbGxvY19yZXNvdXJjZXMoZW5pYyk7CiYjNDM7CWlmIChlcnIpIHsKJiM0MzsJCW5ldGRldl9lcnIoZW5pYy0mZ3Q7bmV0ZGV2LAomIzQzOwkJCSAgICYjMzQ7RmFpbGVkIHRvIGFsbG9jIGFkbWluIGNoYW5uZWwgcmVzb3VyY2VzOiAlZFxuJiMzNDssCiYjNDM7CQkJICAgZXJyKTsKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CX0KJiM0MzsKJiM0MzsJc3Bpbl9sb2NrX2luaXQoJmFtcDtlbmljLSZndDthZG1pbl9tc2dfbG9jayk7CiYjNDM7CUlOSVRfTElTVF9IRUFEKCZhbXA7ZW5pYy0mZ3Q7YWRtaW5fbXNnX2xpc3QpOwomIzQzOwlJTklUX1dPUksoJmFtcDtlbmljLSZndDthZG1pbl9tc2dfd29yaywgZW5pY19hZG1pbl9tc2dfd29ya19oYW5kbGVyKTsKJiM0MzsJSU5JVF9XT1JLKCZhbXA7ZW5pYy0mZ3Q7YWRtaW5fcG9sbF93b3JrLCBlbmljX2FkbWluX3BvbGxfd29ya19oYW5kbGVyKTsKJiM0MzsKJiM0MzsJZXJyID0gZW5pY19hZG1pbl9zZXR1cF9pbnRyKGVuaWMpOwomIzQzOwlpZiAoZXJyKSB7CiYjNDM7CQluZXRkZXZfZXJyKGVuaWMtJmd0O25ldGRldiwKJiM0MzsJCQkgICAmIzM0O0FkbWluIGNoYW5uZWwgcmVxdWlyZXMgTVNJLVgsIFNSLUlPViB1bmF2YWlsYWJsZTogJWRcbiYjMzQ7LAomIzQzOwkJCSAgIGVycik7CiYjNDM7CQlnb3RvIGZyZWVfcmVzb3VyY2VzOwomIzQzOwl9CiYjNDM7CiYjNDM7CWVuaWNfYWRtaW5faW5pdF9yZXNvdXJjZXMoZW5pYyk7CiYjNDM7CiYjNDM7CXZuaWNfd3FfZW5hYmxlKCZhbXA7ZW5pYy0mZ3Q7YWRtaW5fd3EpOwomIzQzOwl2bmljX3JxX2VuYWJsZSgmYW1wO2VuaWMtJmd0O2FkbWluX3JxKTsKJiM0MzsKJiM0MzsJZXJyID0gZW5pY19hZG1pbl9ycV9maWxsKGVuaWMsIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoZXJyKSB7CiYjNDM7CQluZXRkZXZfZXJyKGVuaWMtJmd0O25ldGRldiwKJiM0MzsJCQkgICAmIzM0O0ZhaWxlZCB0byBmaWxsIGFkbWluIFJRIGJ1ZmZlcnM6ICVkXG4mIzM0OywgZXJyKTsKJiM0MzsJCWdvdG8gZGlzYWJsZV9xdWV1ZXM7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZXJyID0gZW5pY19hZG1pbl9xcF90eXBlX3NldChlbmljLCBRUF9FTkFCTEUpOwomIzQzOwlpZiAoZXJyKSB7CiYjNDM7CQluZXRkZXZfZXJyKGVuaWMtJmd0O25ldGRldiwKJiM0MzsJCQkgICAmIzM0O0ZhaWxlZCB0byBzZXQgYWRtaW4gUVAgdHlwZTogJWRcbiYjMzQ7LCBlcnIpOwomIzQzOwkJZ290byBkaXNhYmxlX3F1ZXVlczsKJiM0MzsJfQomIzQzOwomIzQzOwl2bmljX2ludHJfdW5tYXNrKCZhbXA7ZW5pYy0mZ3Q7YWRtaW5faW50cik7CiYjNDM7CiYjNDM7CS8qIE9ubHkgbm93IHRoYXQgdGhlIGFkbWluIFdRL1JRL0NRIGFuZCBpbnRlcnJ1cHQgYXJlIGZ1bGx5IGFsbG9jYXRlZCwKJiM0MzsJICogcHJvZ3JhbW1lZCBhbmQgZW5hYmxlZCBpcyBpdCBzYWZlIHRvIGFsbG93IE1CT1ggc2VuZHMuICBDbGVhcmluZyB0aGlzCiYjNDM7CSAqIGVhcmxpZXIgb3BlbmVkIGEgd2luZG93IHdoZXJlIGEgY29uY3VycmVudCBzZW5kZXIgKGUuZy4gbGluay1ub3RpZnkKJiM0MzsJICogd29yayBzY2hlZHVsZWQgYnkgYSBwb3N0LXJlc2V0IGxpbmstdXApIGNvdWxkIGNhbGwgZW5pY19tYm94X3NlbmRfbXNnKCkKJiM0MzsJICogYWdhaW5zdCBhIG5vdC15ZXQtYWxsb2NhdGVkIGFkbWluX3dxIGFuZCBjcmFzaC4KJiM0MzsJICovCiYjNDM7CVdSSVRFX09OQ0UoZW5pYy0mZ3Q7bWJveF9zZW5kX2Rpc2FibGVkLCBmYWxzZSk7CiYjNDM7CiYjNDM7CW5ldGRldl9kYmcoZW5pYy0mZ3Q7bmV0ZGV2LAomIzQzOwkJICAgJiMzNDthZG1pbiBjaGFubmVsIG9wZW46IGludHI9JXUgd3FfYXZhaWw9JXUgcnFfYXZhaWw9JXUgY3EwX2NvbG9yPSV1IGNxMV9jb2xvcj0ldVxuJiMzNDssCiYjNDM7CQkgICBlbmljLSZndDthZG1pbl9pbnRyX2luZGV4LAomIzQzOwkJICAgdm5pY193cV9kZXNjX2F2YWlsKCZhbXA7ZW5pYy0mZ3Q7YWRtaW5fd3EpLAomIzQzOwkJICAgdm5pY19ycV9kZXNjX2F2YWlsKCZhbXA7ZW5pYy0mZ3Q7YWRtaW5fcnEpLAomIzQzOwkJICAgZW5pYy0mZ3Q7YWRtaW5fY3FbMF0ubGFzdF9jb2xvciwKJiM0MzsJCSAgIGVuaWMtJmd0O2FkbWluX2NxWzFdLmxhc3RfY29sb3IpOwomIzQzOwomIzQzOwllbmljLSZndDthZG1pbl9jaGFuX3VwID0gdHJ1ZTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7CiYjNDM7ZGlzYWJsZV9xdWV1ZXM6CiYjNDM7CWVuaWNfYWRtaW5fdGVhcmRvd25faW50cihlbmljKTsKJiM0MzsJZW5pY19hZG1pbl9xcF90eXBlX3NldChlbmljLCBRUF9ESVNBQkxFKTsKJiM0MzsJaWYgKHZuaWNfd3FfZGlzYWJsZSgmYW1wO2VuaWMtJmd0O2FkbWluX3dxKSkKJiM0MzsJCW5ldGRldl93YXJuKGVuaWMtJmd0O25ldGRldiwgJiMzNDtGYWlsZWQgdG8gZGlzYWJsZSBhZG1pbiBXUVxuJiMzNDspOwomIzQzOwlpZiAodm5pY19ycV9kaXNhYmxlKCZhbXA7ZW5pYy0mZ3Q7YWRtaW5fcnEpKQomIzQzOwkJbmV0ZGV2X3dhcm4oZW5pYy0mZ3Q7bmV0ZGV2LCAmIzM0O0ZhaWxlZCB0byBkaXNhYmxlIGFkbWluIFJRXG4mIzM0Oyk7CiYjNDM7CWNhbmNlbF93b3JrX3N5bmMoJmFtcDtlbmljLSZndDthZG1pbl9tc2dfd29yayk7CiYjNDM7CWVuaWNfYWRtaW5fbXNnX2RyYWluKGVuaWMpOwomIzQzOwllbmljX2FkbWluX3JxX2RyYWluKGVuaWMpOwomIzQzO2ZyZWVfcmVzb3VyY2VzOgomIzQzOwllbmljX2FkbWluX2ZyZWVfcmVzb3VyY2VzKGVuaWMpOwomIzQzOwlyZXR1cm4gZXJyOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIGVuaWNfYWRtaW5fY2hhbm5lbF9jbG9zZShzdHJ1Y3QgZW5pYyAqZW5pYykKJiM0Mzt7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CWlmICghZW5pYy0mZ3Q7aGFzX2FkbWluX2NoYW5uZWwpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CS8qIE5vdGhpbmcgdG8gdGVhciBkb3duIGlmIHRoZSBjaGFubmVsIHdhcyBuZXZlciAocmUpb3BlbmVkLCBlLmcuIGEKJiM0MzsJICogZmFpbGVkIGVuaWNfYWRtaW5fY2hhbm5lbF9vcGVuKCkgaW4gcHJvYmUgb3IgaW4gdGhlIHJlc2V0IHBhdGg7CiYjNDM7CSAqIG90aGVyd2lzZSB0aGUgZGlzYWJsZS9jbGVhbiBjYWxscyBiZWxvdyBkZXJlZmVyZW5jZSBmcmVlZCByZXNvdXJjZXMuCiYjNDM7CSAqLwomIzQzOwlpZiAoIWVuaWMtJmd0O2FkbWluX2NoYW5fdXApCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CVdSSVRFX09OQ0UoZW5pYy0mZ3Q7bWJveF9zZW5kX2Rpc2FibGVkLCB0cnVlKTsKJiM0MzsKJiM0MzsJbmV0ZGV2X2RiZyhlbmljLSZndDtuZXRkZXYsICYjMzQ7YWRtaW4gY2hhbm5lbCBjbG9zZVxuJiMzNDspOwomIzQzOwomIzQzOwl2bmljX2ludHJfbWFzaygmYW1wO2VuaWMtJmd0O2FkbWluX2ludHIpOwomIzQzOwllbmljX2FkbWluX3RlYXJkb3duX2ludHIoZW5pYyk7CiYjNDM7CWNhbmNlbF93b3JrX3N5bmMoJmFtcDtlbmljLSZndDtsaW5rX25vdGlmeV93b3JrKTsKJiM0MzsJY2FuY2VsX3dvcmtfc3luYygmYW1wO2VuaWMtJmd0O2FkbWluX21zZ193b3JrKTsKJiM0MzsJZW5pY19hZG1pbl9tc2dfZHJhaW4oZW5pYyk7CiYjNDM7CiYjNDM7CWVuaWNfYWRtaW5fcXBfdHlwZV9zZXQoZW5pYywgUVBfRElTQUJMRSk7CiYjNDM7CiYjNDM7CWVyciA9IHZuaWNfd3FfZGlzYWJsZSgmYW1wO2VuaWMtJmd0O2FkbWluX3dxKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCW5ldGRldl93YXJuKGVuaWMtJmd0O25ldGRldiwKJiM0MzsJCQkgICAgJiMzNDtGYWlsZWQgdG8gZGlzYWJsZSBhZG1pbiBXUTogJWRcbiYjMzQ7LCBlcnIpOwomIzQzOwllcnIgPSB2bmljX3JxX2Rpc2FibGUoJmFtcDtlbmljLSZndDthZG1pbl9ycSk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQluZXRkZXZfd2FybihlbmljLSZndDtuZXRkZXYsCiYjNDM7CQkJICAgICYjMzQ7RmFpbGVkIHRvIGRpc2FibGUgYWRtaW4gUlE6ICVkXG4mIzM0OywgZXJyKTsKJiM0MzsKJiM0MzsJdm5pY193cV9jbGVhbigmYW1wO2VuaWMtJmd0O2FkbWluX3dxLCBlbmljX2FkbWluX3dxX2J1Zl9jbGVhbik7CiYjNDM7CWVuaWNfYWRtaW5fcnFfZHJhaW4oZW5pYyk7CiYjNDM7CXZuaWNfY3FfY2xlYW4oJmFtcDtlbmljLSZndDthZG1pbl9jcVswXSk7CiYjNDM7CXZuaWNfY3FfY2xlYW4oJmFtcDtlbmljLSZndDthZG1pbl9jcVsxXSk7CiYjNDM7CXZuaWNfaW50cl9jbGVhbigmYW1wO2VuaWMtJmd0O2FkbWluX2ludHIpOwomIzQzOwomIzQzOwllbmljLSZndDthZG1pbl9ycV9oYW5kbGVyID0gTlVMTDsKJiM0MzsJZW5pY19hZG1pbl9mcmVlX3Jlc291cmNlcyhlbmljKTsKJiM0MzsKJiM0MzsJZW5pYy0mZ3Q7YWRtaW5fY2hhbl91cCA9IGZhbHNlOwomIzQzO30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19hZG1pbi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX2FkbWluLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLjYyYzgwMjIwYjBjYWNjCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX2FkbWluLmgKQEAgLTAsMCAmIzQzOzEsMjcgQEAKJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovCiYjNDM7LyogQ29weXJpZ2h0IDIwMjUgQ2lzY28gU3lzdGVtcywgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gKi8KJiM0MzsKJiM0MzsjaWZuZGVmIF9FTklDX0FETUlOX0hfCiYjNDM7I2RlZmluZSBfRU5JQ19BRE1JTl9IXwomIzQzOwomIzQzOyNkZWZpbmUgRU5JQ19BRE1JTl9ERVNDX0NPVU5UCTY0CiYjNDM7I2RlZmluZSBFTklDX0FETUlOX0JVRl9TSVpFCTIwNDgKJiM0MzsKJiM0MztzdHJ1Y3QgZW5pYzsKJiM0MzsKJiM0MzsvKiBXcmFwcGVyIGZvciByZWNlaXZlZCBhZG1pbiBtZXNzYWdlcyBxdWV1ZWQgZm9yIGRlZmVycmVkIHByb2Nlc3NpbmcuCiYjNDM7ICogVGhlIGFkbWluIENRIHBvbGwgd29yayBoYW5kbGVyIGVucXVldWVzIHRoZXNlOyBhIHNlcGFyYXRlIHdvcmsgaGFuZGxlcgomIzQzOyAqIHByb2Nlc3NlcyB0aGVtIHdoZXJlIHNsZWVwaW5nIChtdXRleCwgR0ZQX0tFUk5FTCkgaXMgc2FmZS4KJiM0MzsgKi8KJiM0MztzdHJ1Y3QgZW5pY19hZG1pbl9tc2cgewomIzQzOwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiYjNDM7CXVuc2lnbmVkIGludCBsZW47CiYjNDM7CXU4IGRhdGFbXSBfX2FsaWduZWQoOCk7CiYjNDM7fTsKJiM0MzsKJiM0MztpbnQgZW5pY19hZG1pbl9jaGFubmVsX29wZW4oc3RydWN0IGVuaWMgKmVuaWMpOwomIzQzO3ZvaWQgZW5pY19hZG1pbl9jaGFubmVsX2Nsb3NlKHN0cnVjdCBlbmljICplbmljKTsKJiM0Mzt1bnNpZ25lZCBpbnQgZW5pY19hZG1pbl93cV9jcV9zZXJ2aWNlKHN0cnVjdCBlbmljICplbmljKTsKJiM0Mzt1bnNpZ25lZCBpbnQgZW5pY19hZG1pbl9ycV9jcV9zZXJ2aWNlKHN0cnVjdCBlbmljICplbmljKTsKJiM0MzsKJiM0MzsjZW5kaWYgLyogX0VOSUNfQURNSU5fSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfbWFpbi5jCmluZGV4IGU3MTI1YjgxODA4Nzk5Li5kZTkwMzMyZGM0MGNjNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfbWFpbi5jCkBAIC02MCw2ICYjNDM7NjAsOCBAQAogI2luY2x1ZGUgJiMzNDtlbmljX2Nsc2YuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2VuaWNfcnEuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2VuaWNfd3EuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtlbmljX2FkbWluLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7ZW5pY19tYm94LmgmIzM0OwogCiAjZGVmaW5lIEVOSUNfTk9USUZZX1RJTUVSX1BFUklPRAkoMiAqIEhaKQogCkBAIC0zMTQsNiAmIzQzOzMxNiwxMSBAQCBzdGF0aWMgaW50IGVuaWNfaXNfc3Jpb3ZfdmYoc3RydWN0IGVuaWMgKmVuaWMpCiAJICAgICAgIGVuaWMtJmd0O3BkZXYtJmd0O2RldmljZSA9PSBQQ0lfREVWSUNFX0lEX0NJU0NPX1ZJQ19FTkVUX1ZGX1YyOwogfQogCiYjNDM7aW50IGVuaWNfaXNfc3Jpb3ZfdmZfdjIoc3RydWN0IGVuaWMgKmVuaWMpCiYjNDM7ewomIzQzOwlyZXR1cm4gZW5pYy0mZ3Q7cGRldi0mZ3Q7ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfQ0lTQ09fVklDX0VORVRfVkZfVjI7CiYjNDM7fQomIzQzOwogaW50IGVuaWNfaXNfdmFsaWRfdmYoc3RydWN0IGVuaWMgKmVuaWMsIGludCB2ZikKIHsKICNpZmRlZiBDT05GSUdfUENJX0lPVgpAQCAtNDExLDYgJiM0Mzs0MTgsMjQgQEAgc3RhdGljIHZvaWQgZW5pY19zZXRfcnhfY29hbF9zZXR0aW5nKHN0cnVjdCBlbmljICplbmljKQogCXJ4X2NvYWwtJmd0O3VzZV9hZGFwdGl2ZV9yeF9jb2FsZXNjZSA9IDE7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBlbmljX2xpbmtfbm90aWZ5X3dvcmtfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZW5pYyAqZW5pYyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZW5pYywKJiM0MzsJCQkJCSBsaW5rX25vdGlmeV93b3JrKTsKJiM0MzsJdTMyIHN0YXRlOwomIzQzOwl1MTYgaTsKJiM0MzsKJiM0MzsJaWYgKCFlbmljX3NyaW92X2VuYWJsZWQoZW5pYykgfHwgIWVuaWMtJmd0O3ZmX3N0YXRlKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlzdGF0ZSA9IG5ldGlmX2NhcnJpZXJfb2soZW5pYy0mZ3Q7bmV0ZGV2KSA/CiYjNDM7CQlFTklDX01CT1hfTElOS19TVEFURV9FTkFCTEUgOgomIzQzOwkJRU5JQ19NQk9YX0xJTktfU1RBVEVfRElTQUJMRTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IGVuaWMtJmd0O251bV92ZnM7IGkmIzQzOyYjNDM7KQomIzQzOwkJZW5pY19tYm94X3NlbmRfbGlua19zdGF0ZShlbmljLCBpLCBzdGF0ZSk7CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgZW5pY19saW5rX2NoZWNrKHN0cnVjdCBlbmljICplbmljKQogewogCWludCBsaW5rX3N0YXR1cyA9IHZuaWNfZGV2X2xpbmtfc3RhdHVzKGVuaWMtJmd0O3ZkZXYpOwpAQCAtNDIwLDkgJiM0Mzs0NDUsMTMgQEAgc3RhdGljIHZvaWQgZW5pY19saW5rX2NoZWNrKHN0cnVjdCBlbmljICplbmljKQogCQluZXRkZXZfaW5mbyhlbmljLSZndDtuZXRkZXYsICYjMzQ7TGluayBVUFxuJiMzNDspOwogCQluZXRpZl9jYXJyaWVyX29uKGVuaWMtJmd0O25ldGRldik7CiAJCWVuaWNfc2V0X3J4X2NvYWxfc2V0dGluZyhlbmljKTsKJiM0MzsJCWlmIChlbmljX3NyaW92X2VuYWJsZWQoZW5pYykgJmFtcDsmYW1wOyBlbmljLSZndDt2Zl9zdGF0ZSkKJiM0MzsJCQlzY2hlZHVsZV93b3JrKCZhbXA7ZW5pYy0mZ3Q7bGlua19ub3RpZnlfd29yayk7CiAJfSBlbHNlIGlmICghbGlua19zdGF0dXMgJmFtcDsmYW1wOyBjYXJyaWVyX29rKSB7CiAJCW5ldGRldl9pbmZvKGVuaWMtJmd0O25ldGRldiwgJiMzNDtMaW5rIERPV05cbiYjMzQ7KTsKIAkJbmV0aWZfY2Fycmllcl9vZmYoZW5pYy0mZ3Q7bmV0ZGV2KTsKJiM0MzsJCWlmIChlbmljX3NyaW92X2VuYWJsZWQoZW5pYykgJmFtcDsmYW1wOyBlbmljLSZndDt2Zl9zdGF0ZSkKJiM0MzsJCQlzY2hlZHVsZV93b3JrKCZhbXA7ZW5pYy0mZ3Q7bGlua19ub3RpZnlfd29yayk7CiAJfQogfQogCkBAIC0yMTQyLDYgJiM0MzsyMTcxLDU3IEBAIHN0YXRpYyB2b2lkIGVuaWNfc2V0X2FwaV9idXN5KHN0cnVjdCBlbmljICplbmljLCBib29sIGJ1c3kpCiAJc3Bpbl91bmxvY2soJmFtcDtlbmljLSZndDtlbmljX2FwaV9sb2NrKTsKIH0KIAomIzQzOy8qIFRoZSBhZG1pbi9NQk9YIGNoYW5uZWwgZXhpc3RzIG9uIGEgVjIgUEYgd2hpbGUgU1ItSU9WIGlzIGVuYWJsZWQgYW5kIG9uCiYjNDM7ICogZXZlcnkgVjIgVkYuICBBIHJlc2V0IHdpcGVzIHRoZSBhZG1pbiBXUS9SUS9DUSwgc28gc3VjaCBkZXZpY2VzIG11c3QgdGVhcgomIzQzOyAqIHRoZSBjaGFubmVsIGRvd24gYmVmb3JlIHRoZSByZXNldCBhbmQgcmUtZXN0YWJsaXNoIGl0IGFmdGVyd2FyZHMuCiYjNDM7ICovCiYjNDM7c3RhdGljIGJvb2wgZW5pY19oYXNfYWRtaW5fY2hhbihzdHJ1Y3QgZW5pYyAqZW5pYykKJiM0Mzt7CiYjNDM7CXJldHVybiBlbmljX2lzX3NyaW92X3ZmX3YyKGVuaWMpIHx8CiYjNDM7CSAgICAgICAoZW5pY19zcmlvdl9lbmFibGVkKGVuaWMpICZhbXA7JmFtcDsgZW5pYy0mZ3Q7dmZfdHlwZSA9PSBFTklDX1ZGX1RZUEVfVjIpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBSZS1lc3RhYmxpc2ggdGhlIGFkbWluL01CT1ggY2hhbm5lbCBhZnRlciBhIHJlc2V0IGhhcyByZS1jcmVhdGVkIHRoZSBkYXRhCiYjNDM7ICogcGF0aC4gIE1pcnJvcnMgdGhlIHJlbGV2YW50IHBhcnQgb2YgdGhlIHByb2JlIC8gU1ItSU9WLWVuYWJsZSBzZXF1ZW5jZToKJiM0MzsgKiByZW9wZW4gdGhlIGNoYW5uZWwgYW5kIHJlaW5pdGlhbGlzZSBNQk9YLCB0aGVuIGZvciBhIFZGIHJlLXJ1biB0aGUgUEYKJiM0MzsgKiBoYW5kc2hha2UgKGl0cyBhZG1pbiBRUCBhbmQgUEYtc2lkZSByZWdpc3RyYXRpb24gd2VyZSB0b3JuIGRvd24gYnkgdGhlCiYjNDM7ICogcmVzZXQpLCBvciBmb3IgYSBQRiByZS1wdXNoIHRoZSBjdXJyZW50IGxpbmsgc3RhdGUgdG8gcmVnaXN0ZXJlZCBWRnMuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgZW5pY19hZG1pbl9jaGFuX3Jlb3BlbihzdHJ1Y3QgZW5pYyAqZW5pYykKJiM0Mzt7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CWVyciA9IGVuaWNfYWRtaW5fY2hhbm5lbF9vcGVuKGVuaWMpOwomIzQzOwlpZiAoZXJyKSB7CiYjNDM7CQluZXRkZXZfZXJyKGVuaWMtJmd0O25ldGRldiwKJiM0MzsJCQkgICAmIzM0O2FkbWluIGNoYW5uZWwgcmVvcGVuIGFmdGVyIHJlc2V0IGZhaWxlZDogJWRcbiYjMzQ7LCBlcnIpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CWVuaWNfbWJveF9pbml0KGVuaWMpOwomIzQzOwomIzQzOwlpZiAoZW5pY19pc19zcmlvdl92Zl92MihlbmljKSkgewomIzQzOwkJZXJyID0gZW5pY19tYm94X3ZmX2NhcGFiaWxpdHlfY2hlY2soZW5pYyk7CiYjNDM7CQlpZiAoZXJyKSB7CiYjNDM7CQkJbmV0ZGV2X2VycihlbmljLSZndDtuZXRkZXYsCiYjNDM7CQkJCSAgICYjMzQ7TUJPWCBjYXBhYmlsaXR5IGNoZWNrIGFmdGVyIHJlc2V0IGZhaWxlZDogJWRcbiYjMzQ7LAomIzQzOwkJCQkgICBlcnIpOwomIzQzOwkJCXJldHVybjsKJiM0MzsJCX0KJiM0MzsJCWVyciA9IGVuaWNfbWJveF92Zl9yZWdpc3RlcihlbmljKTsKJiM0MzsJCWlmIChlcnIpCiYjNDM7CQkJbmV0ZGV2X2VycihlbmljLSZndDtuZXRkZXYsCiYjNDM7CQkJCSAgICYjMzQ7TUJPWCBWRiByZS1yZWdpc3RyYXRpb24gYWZ0ZXIgcmVzZXQgZmFpbGVkOiAlZFxuJiMzNDssCiYjNDM7CQkJCSAgIGVycik7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQkvKiBUaGUgbGluayBjYW1lIGJhY2sgdXAgZHVyaW5nIGVuaWNfb3BlbigpIGFib3ZlIHdoaWxlIE1CT1gKJiM0MzsJCSAqIHNlbmRzIHdlcmUgc3RpbGwgZGlzYWJsZWQgKGNoYW5uZWwgbm90IHlldCByZW9wZW5lZCksIHNvIHRoYXQKJiM0MzsJCSAqIGxpbmstbm90aWZ5IHdhcyBkcm9wcGVkLiAgUmUtcHVzaCBjdXJyZW50IGxpbmsgc3RhdGUgbm93LgomIzQzOwkJICovCiYjNDM7CQlzY2hlZHVsZV93b3JrKCZhbXA7ZW5pYy0mZ3Q7bGlua19ub3RpZnlfd29yayk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCBlbmljX3Jlc2V0KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKIAlzdHJ1Y3QgZW5pYyAqZW5pYyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZW5pYywgcmVzZXQpOwpAQCAtMjE1NCwxNSAmIzQzOzIyMzQsMzQgQEAgc3RhdGljIHZvaWQgZW5pY19yZXNldChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiAJLyogU3RvcCBhbnkgYWN0aXZpdHkgZnJvbSBpbmZpbmliYW5kICovCiAJZW5pY19zZXRfYXBpX2J1c3koZW5pYywgdHJ1ZSk7CiAKJiM0MzsJLyogRnVsbHkgdGVhciBkb3duIHRoZSBWMiBhZG1pbi9NQk9YIGNoYW5uZWwgYmVmb3JlIHRoZSBzb2Z0IHJlc2V0LgomIzQzOwkgKiBUaGUgcmVzZXQgd2lwZXMgYWxsIGhhcmR3YXJlIHF1ZXVlcyBpbmNsdWRpbmcgdGhlIGFkbWluIFdRL1JROwomIzQzOwkgKiBjbG9zaW5nIGZpcnN0IHRlbGxzIGZpcm13YXJlIHRvIHN0b3AgdGhlIGFkbWluIFFQIChzbyBpdCBubyBsb25nZXIKJiM0MzsJICogRE1BcyBmcm9tIHRoZSBhYm91dC10by1iZS1yZXNldCByaW5ncykgYW5kIGZyZWVzIHRoZSBhZG1pbiByZXNvdXJjZXMKJiM0MzsJICogc28gdGhleSBhcmUgY2xlYW5seSByZS1hbGxvY2F0ZWQgYWZ0ZXJ3YXJkcy4KJiM0MzsJICovCiYjNDM7CWlmIChlbmljX2hhc19hZG1pbl9jaGFuKGVuaWMpKQomIzQzOwkJZW5pY19hZG1pbl9jaGFubmVsX2Nsb3NlKGVuaWMpOwomIzQzOwogCWVuaWNfc3RvcChlbmljLSZndDtuZXRkZXYpOwomIzQzOwogCWVuaWNfZGV2X3NvZnRfcmVzZXQoZW5pYyk7CiAJZW5pY19yZXNldF9hZGRyX2xpc3RzKGVuaWMpOwogCWVuaWNfaW5pdF92bmljX3Jlc291cmNlcyhlbmljKTsKIAllbmljX3NldF9yc3NfbmljX2NmZyhlbmljKTsKIAllbmljX2Rldl9zZXRfaWdfdmxhbl9yZXdyaXRlX21vZGUoZW5pYyk7CiAJZW5pY19leHRfY3EoZW5pYyk7CiYjNDM7CiAJZW5pY19vcGVuKGVuaWMtJmd0O25ldGRldik7CiAKJiM0MzsJLyogUmUtZXN0YWJsaXNoIHRoZSBhZG1pbi9NQk9YIGNoYW5uZWwgYWZ0ZXIgdGhlIGRhdGEgcGF0aCBpcyBiYWNrIHVwLgomIzQzOwkgKiBJdCB3YXMgZnVsbHkgdG9ybiBkb3duIGJ5IGVuaWNfYWRtaW5fY2hhbm5lbF9jbG9zZSgpIGFib3ZlOwomIzQzOwkgKiBlbmljX2FkbWluX2NoYW5fcmVvcGVuKCkgcmVvcGVucyBpdCBhbmQsIGZvciBhIFBGIHJlLXB1c2hlcyBsaW5rCiYjNDM7CSAqIHN0YXRlLCBvciBmb3IgYSBWRiByZS1ydW5zIHRoZSBwcm9iZS10aW1lIFBGIGhhbmRzaGFrZS4KJiM0MzsJICovCiYjNDM7CWlmIChlbmljX2hhc19hZG1pbl9jaGFuKGVuaWMpKQomIzQzOwkJZW5pY19hZG1pbl9jaGFuX3Jlb3BlbihlbmljKTsKJiM0MzsKIAkvKiBBbGxvdyBpbmZpbmliYW5kIHRvIGZpZGRsZSB3aXRoIHRoZSBkZXZpY2UgYWdhaW4gKi8KIAllbmljX3NldF9hcGlfYnVzeShlbmljLCBmYWxzZSk7CiAKQEAgLTIxODAsMTYgJiM0MzsyMjc5LDMzIEBAIHN0YXRpYyB2b2lkIGVuaWNfdHhfaGFuZ19yZXNldChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiAJLyogU3RvcCBhbnkgYWN0aXZpdHkgZnJvbSBpbmZpbmliYW5kICovCiAJZW5pY19zZXRfYXBpX2J1c3koZW5pYywgdHJ1ZSk7CiAKJiM0MzsJLyogRnVsbHkgdGVhciBkb3duIHRoZSBWMiBhZG1pbi9NQk9YIGNoYW5uZWwgYmVmb3JlIHRoZSBoYW5nIHJlc2V0LCBmb3IKJiM0MzsJICogdGhlIHNhbWUgcmVhc29uIGFzIHRoZSBzb2Z0IHJlc2V0IHBhdGg6IHN0b3AgdGhlIGFkbWluIFFQIGFuZCBmcmVlCiYjNDM7CSAqIHRoZSBhZG1pbiByZXNvdXJjZXMgYmVmb3JlIHRoZSBoYXJkd2FyZSBxdWV1ZXMgYXJlIHdpcGVkLgomIzQzOwkgKi8KJiM0MzsJaWYgKGVuaWNfaGFzX2FkbWluX2NoYW4oZW5pYykpCiYjNDM7CQllbmljX2FkbWluX2NoYW5uZWxfY2xvc2UoZW5pYyk7CiYjNDM7CiAJZW5pY19kZXZfaGFuZ19ub3RpZnkoZW5pYyk7CiAJZW5pY19zdG9wKGVuaWMtJmd0O25ldGRldik7CiYjNDM7CiAJZW5pY19kZXZfaGFuZ19yZXNldChlbmljKTsKIAllbmljX3Jlc2V0X2FkZHJfbGlzdHMoZW5pYyk7CiAJZW5pY19pbml0X3ZuaWNfcmVzb3VyY2VzKGVuaWMpOwogCWVuaWNfc2V0X3Jzc19uaWNfY2ZnKGVuaWMpOwogCWVuaWNfZGV2X3NldF9pZ192bGFuX3Jld3JpdGVfbW9kZShlbmljKTsKIAllbmljX2V4dF9jcShlbmljKTsKJiM0MzsKIAllbmljX29wZW4oZW5pYy0mZ3Q7bmV0ZGV2KTsKIAomIzQzOwkvKiBSZS1lc3RhYmxpc2ggdGhlIGFkbWluL01CT1ggY2hhbm5lbCBhZnRlciB0aGUgZGF0YSBwYXRoIGlzIGJhY2sgdXAuCiYjNDM7CSAqIEl0IHdhcyBmdWxseSB0b3JuIGRvd24gYnkgZW5pY19hZG1pbl9jaGFubmVsX2Nsb3NlKCkgYWJvdmU7CiYjNDM7CSAqIGVuaWNfYWRtaW5fY2hhbl9yZW9wZW4oKSByZW9wZW5zIGl0IGFuZCwgZm9yIGEgUEYgcmUtcHVzaGVzIGxpbmsKJiM0MzsJICogc3RhdGUsIG9yIGZvciBhIFZGIHJlLXJ1bnMgdGhlIHByb2JlLXRpbWUgUEYgaGFuZHNoYWtlLgomIzQzOwkgKi8KJiM0MzsJaWYgKGVuaWNfaGFzX2FkbWluX2NoYW4oZW5pYykpCiYjNDM7CQllbmljX2FkbWluX2NoYW5fcmVvcGVuKGVuaWMpOwomIzQzOwogCS8qIEFsbG93IGluZmluaWJhbmQgdG8gZmlkZGxlIHdpdGggdGhlIGRldmljZSBhZ2FpbiAqLwogCWVuaWNfc2V0X2FwaV9idXN5KGVuaWMsIGZhbHNlKTsKIApAQCAtMjIwMCw2ICYjNDM7MjMxNiw4IEBAIHN0YXRpYyB2b2lkIGVuaWNfdHhfaGFuZ19yZXNldChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiAKIHN0YXRpYyBpbnQgZW5pY19zZXRfaW50cl9tb2RlKHN0cnVjdCBlbmljICplbmljKQogewomIzQzOwl1bnNpZ25lZCBpbnQgYWRtaW5fcmVzZXJ2ZSA9IGVuaWMtJmd0O2hhc19hZG1pbl9jaGFubmVsID8gMSA6IDA7CiYjNDM7CXVuc2lnbmVkIGludCBtaW5faW50ciA9IEVOSUNfTVNJWF9NSU5fSU5UUiAmIzQzOyBhZG1pbl9yZXNlcnZlOwogCXVuc2lnbmVkIGludCBpOwogCWludCBudW1faW50cjsKIApAQCAtMjIxMCwxMiAmIzQzOzIzMjgsMTIgQEAgc3RhdGljIGludCBlbmljX3NldF9pbnRyX21vZGUoc3RydWN0IGVuaWMgKmVuaWMpCiAJICovCiAKIAlpZiAoZW5pYy0mZ3Q7Y29uZmlnLmludHJfbW9kZSAmbHQ7IDEgJmFtcDsmYW1wOwotCSAgICBlbmljLSZndDtpbnRyX2F2YWlsICZndDs9IEVOSUNfTVNJWF9NSU5fSU5UUikgewomIzQzOwkgICAgZW5pYy0mZ3Q7aW50cl9hdmFpbCAmZ3Q7PSBtaW5faW50cikgewogCQlmb3IgKGkgPSAwOyBpICZsdDsgZW5pYy0mZ3Q7aW50cl9hdmFpbDsgaSYjNDM7JiM0MzspCiAJCQllbmljLSZndDttc2l4X2VudHJ5W2ldLmVudHJ5ID0gaTsKIAogCQludW1faW50ciA9IHBjaV9lbmFibGVfbXNpeF9yYW5nZShlbmljLSZndDtwZGV2LCBlbmljLSZndDttc2l4X2VudHJ5LAotCQkJCQkJIEVOSUNfTVNJWF9NSU5fSU5UUiwKJiM0MzsJCQkJCQkgbWluX2ludHIsCiAJCQkJCQkgZW5pYy0mZ3Q7aW50cl9hdmFpbCk7CiAJCWlmIChudW1faW50ciAmZ3Q7IDApIHsKIAkJCXZuaWNfZGV2X3NldF9pbnRyX21vZGUoZW5pYy0mZ3Q7dmRldiwKQEAgLTIzMTAsMTYgJiM0MzsyNDI4LDI3IEBAIHN0YXRpYyBpbnQgZW5pY19hZGp1c3RfcmVzb3VyY2VzKHN0cnVjdCBlbmljICplbmljKQogCQllbmljLSZndDtjcV9jb3VudCA9IDI7CiAJCWVuaWMtJmd0O2ludHJfY291bnQgPSBlbmljLSZndDtpbnRyX2F2YWlsOwogCQlicmVhazsKLQljYXNlIFZOSUNfREVWX0lOVFJfTU9ERV9NU0lYOgomIzQzOwljYXNlIFZOSUNfREVWX0lOVFJfTU9ERV9NU0lYOiB7CiAJCS8qIEFkanVzdCB0aGUgbnVtYmVyIG9mIHdxcy9ycXMvY3FzL2ludGVycnVwdHMgdGhhdCB3aWxsIGJlCi0JCSAqIHVzZWQgYmFzZWQgb24gd2hpY2ggcmVzb3VyY2UgaXMgdGhlIG1vc3QgY29uc3RyYWluZWQKJiM0MzsJCSAqIHVzZWQgYmFzZWQgb24gd2hpY2ggcmVzb3VyY2UgaXMgdGhlIG1vc3QgY29uc3RyYWluZWQuCiYjNDM7CQkgKiBSZXNlcnZlIG9uZSBleHRyYSBNU0ktWCBzbG90IGZvciB0aGUgYWRtaW4gY2hhbm5lbCBJTlRSCiYjNDM7CQkgKiB3aGVuIGhhc19hZG1pbl9jaGFubmVsIGlzIHNldCBzbyB0aGF0CiYjNDM7CQkgKiBlbmljX2FkbWluX3NldHVwX2ludHIoKSBjYW4gYWxsb2NhdGUgYXQgaW50cl9jb3VudAomIzQzOwkJICogd2l0aGluIHRoZSBpbnRyX2F2YWlsIGJvdW5kcyBldmVuIHdoZW4gdGhlIGRhdGEgcXVldWUKJiM0MzsJCSAqIGNvdW50IGlzIG1heGVkIG91dC4gIGludHJfY291bnQgY291bnRzIG9ubHkgdGhlIGRhdGEtcGF0aAomIzQzOwkJICogSVJRcyAocmVnaXN0ZXJlZCBieSBlbmljX3JlcXVlc3RfaW50cigpKTsgdGhlIGFkbWluIElOVFIKJiM0MzsJCSAqIGxpdmVzIGF0IG1zaXggaW5kZXggaW50cl9jb3VudCBhbmQgaXMgc2V0IHVwIGxhdGVyIGJ5CiYjNDM7CQkgKiBlbmljX2FkbWluX3NldHVwX2ludHIoKS4KIAkJICovCiYjNDM7CQl1bnNpZ25lZCBpbnQgYWRtaW5fcmVzZXJ2ZSA9IGVuaWMtJmd0O2hhc19hZG1pbl9jaGFubmVsID8gMSA6IDA7CiYjNDM7CiAJCXdxX2F2YWlsID0gbWluKGVuaWMtJmd0O3dxX2F2YWlsLCBFTklDX1dRX01BWCk7CiAJCXJxX2RlZmF1bHQgPSBtYXgobmV0aWZfZ2V0X251bV9kZWZhdWx0X3Jzc19xdWV1ZXMoKSwKIAkJCQkgRU5JQ19SUV9NSU5fREVGQVVMVCk7CiAJCXJxX2F2YWlsID0gbWluMyhlbmljLSZndDtycV9hdmFpbCwgRU5JQ19SUV9NQVgsIHJxX2RlZmF1bHQpOwogCQltYXhfcXVldWVzID0gbWluKGVuaWMtJmd0O2NxX2F2YWlsLAotCQkJCSBlbmljLSZndDtpbnRyX2F2YWlsIC0gRU5JQ19NU0lYX1JFU0VSVkVEX0lOVFIpOwomIzQzOwkJCQkgZW5pYy0mZ3Q7aW50cl9hdmFpbCAtIEVOSUNfTVNJWF9SRVNFUlZFRF9JTlRSIC0KJiM0MzsJCQkJIGFkbWluX3Jlc2VydmUpOwogCQlpZiAod3FfYXZhaWwgJiM0MzsgcnFfYXZhaWwgJmx0Oz0gbWF4X3F1ZXVlcykgewogCQkJZW5pYy0mZ3Q7cnFfY291bnQgPSBycV9hdmFpbDsKIAkJCWVuaWMtJmd0O3dxX2NvdW50ID0gd3FfYXZhaWw7CkBAIC0yMzM3LDYgJiM0MzsyNDY2LDcgQEAgc3RhdGljIGludCBlbmljX2FkanVzdF9yZXNvdXJjZXMoc3RydWN0IGVuaWMgKmVuaWMpCiAJCWVuaWMtJmd0O2ludHJfY291bnQgPSBlbmljLSZndDtjcV9jb3VudCAmIzQzOyBFTklDX01TSVhfUkVTRVJWRURfSU5UUjsKIAogCQlicmVhazsKJiM0MzsJfQogCWRlZmF1bHQ6CiAJCWRldl9lcnIoZW5pY19nZXRfZGV2KGVuaWMpLCAmIzM0O1Vua25vd24gaW50ZXJydXB0IG1vZGVcbiYjMzQ7KTsKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0yNjQxLDggJiM0MzsyNzcxLDEwIEBAIHN0YXRpYyB2b2lkIGVuaWNfaW91bm1hcChzdHJ1Y3QgZW5pYyAqZW5pYykKIHN0YXRpYyB2b2lkIGVuaWNfc3Jpb3ZfZGV0ZWN0X3ZmX3R5cGUoc3RydWN0IGVuaWMgKmVuaWMpCiB7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBlbmljLSZndDtwZGV2OwotCWludCBwb3M7CiYjNDM7CXU2NCBzdXBwb3J0ZWRfdmVyc2lvbnMsIGExID0gMDsKIAl1MTYgdmZfZGV2X2lkOwomIzQzOwlpbnQgcG9zOwomIzQzOwlpbnQgZXJyOwogCiAJaWYgKGVuaWNfaXNfc3Jpb3ZfdmYoZW5pYykgfHwgZW5pY19pc19keW5hbWljKGVuaWMpKQogCQlyZXR1cm47CkBAIC0yNjY5LDYgJiM0MzsyODAxLDE0OSBAQCBzdGF0aWMgdm9pZCBlbmljX3NyaW92X2RldGVjdF92Zl90eXBlKHN0cnVjdCBlbmljICplbmljKQogCQllbmljLSZndDt2Zl90eXBlID0gRU5JQ19WRl9UWVBFX05PTkU7CiAJCWJyZWFrOwogCX0KJiM0MzsKJiM0MzsJaWYgKGVuaWMtJmd0O3ZmX3R5cGUgIT0gRU5JQ19WRl9UWVBFX1YyKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwkvKiBBIHN1Y2Nlc3NmdWwgY29tbWFuZCBtZWFucyBmaXJtd2FyZSByZWNvZ25pemVzCiYjNDM7CSAqIFZJQ19GRUFUVVJFX1NSSU9WOyBzdXBwb3J0ZWRfdmVyc2lvbnMgaXMgYXZhaWxhYmxlCiYjNDM7CSAqIGZvciBzdWItZmVhdHVyZSB2ZXJzaW9uaW5nIGluIHRoZSBmdXR1cmUuCiYjNDM7CSAqLwomIzQzOwllcnIgPSB2bmljX2Rldl9nZXRfc3VwcG9ydGVkX2ZlYXR1cmVfdmVyKGVuaWMtJmd0O3ZkZXYsCiYjNDM7CQkJCQkJIFZJQ19GRUFUVVJFX1NSSU9WLAomIzQzOwkJCQkJCSAmYW1wO3N1cHBvcnRlZF92ZXJzaW9ucywKJiM0MzsJCQkJCQkgJmFtcDthMSk7CiYjNDM7CWlmIChlcnIpIHsKJiM0MzsJCWRldl93YXJuKCZhbXA7cGRldi0mZ3Q7ZGV2LAomIzQzOwkJCSAmIzM0O1NSLUlPViBWMiBub3Qgc3VwcG9ydGVkIGJ5IGN1cnJlbnQgZmlybXdhcmUuIFVwZ3JhZGUgdG8gVklDIEZXIDUuMyg0LjcyKSBvciBoaWdoZXIuXG4mIzM0Oyk7CiYjNDM7CQllbmljLSZndDt2Zl90eXBlID0gRU5JQ19WRl9UWVBFX05PTkU7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBfX21heWJlX3VudXNlZAomIzQzO2VuaWNfc3Jpb3ZfdjJfZW5hYmxlKHN0cnVjdCBlbmljICplbmljLCBpbnQgbnVtX3ZmcykKJiM0Mzt7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CWlmICghZW5pYy0mZ3Q7aGFzX2FkbWluX2NoYW5uZWwpIHsKJiM0MzsJCW5ldGRldl9lcnIoZW5pYy0mZ3Q7bmV0ZGV2LAomIzQzOwkJCSAgICYjMzQ7VjIgU1ItSU9WIHJlcXVpcmVzIGFkbWluIGNoYW5uZWwgcmVzb3VyY2VzXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZW5pYy0mZ3Q7dmZfc3RhdGUgPSBrY2FsbG9jKG51bV92ZnMsIHNpemVvZigqZW5pYy0mZ3Q7dmZfc3RhdGUpLCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCFlbmljLSZndDt2Zl9zdGF0ZSkKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwllcnIgPSBlbmljX2FkbWluX2NoYW5uZWxfb3BlbihlbmljKTsKJiM0MzsJaWYgKGVycikgewomIzQzOwkJbmV0ZGV2X2VycihlbmljLSZndDtuZXRkZXYsCiYjNDM7CQkJICAgJiMzNDtGYWlsZWQgdG8gb3BlbiBhZG1pbiBjaGFubmVsOiAlZFxuJiMzNDssIGVycik7CiYjNDM7CQlnb3RvIGZyZWVfdmZfc3RhdGU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZW5pY19tYm94X2luaXQoZW5pYyk7CiYjNDM7CiYjNDM7CWVuaWMtJmd0O251bV92ZnMgPSBudW1fdmZzOwomIzQzOwomIzQzOwllcnIgPSBwY2lfZW5hYmxlX3NyaW92KGVuaWMtJmd0O3BkZXYsIG51bV92ZnMpOwomIzQzOwlpZiAoZXJyKSB7CiYjNDM7CQluZXRkZXZfZXJyKGVuaWMtJmd0O25ldGRldiwKJiM0MzsJCQkgICAmIzM0O3BjaV9lbmFibGVfc3Jpb3YgZmFpbGVkOiAlZFxuJiMzNDssIGVycik7CiYjNDM7CQlnb3RvIGNsb3NlX2FkbWluOwomIzQzOwl9CiYjNDM7CiYjNDM7CWVuaWMtJmd0O3ByaXZfZmxhZ3MgfD0gRU5JQ19TUklPVl9FTkFCTEVEOwomIzQzOwlyZXR1cm4gbnVtX3ZmczsKJiM0MzsKJiM0MztjbG9zZV9hZG1pbjoKJiM0MzsJZW5pYy0mZ3Q7bnVtX3ZmcyA9IDA7CiYjNDM7CWVuaWNfYWRtaW5fY2hhbm5lbF9jbG9zZShlbmljKTsKJiM0MztmcmVlX3ZmX3N0YXRlOgomIzQzOwlrZnJlZShlbmljLSZndDt2Zl9zdGF0ZSk7CiYjNDM7CWVuaWMtJmd0O3ZmX3N0YXRlID0gTlVMTDsKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgZW5pY19zcmlvdl92Ml9kaXNhYmxlKHN0cnVjdCBlbmljICplbmljKQomIzQzO3sKJiM0MzsJLyogU3RvcCBuZXcgVkYgbGluay1zdGF0ZSBicm9hZGNhc3RzIGJlZm9yZSB0ZWFyaW5nIGRvd24gdmZfc3RhdGUuCiYjNDM7CSAqIENsZWFyaW5nIEVOSUNfU1JJT1ZfRU5BQkxFRCBtYWtlcyBlbmljX2xpbmtfY2hlY2soKSAoY2FsbGVkIGZyb20KJiM0MzsJICogdGhlIG5vdGlmeSB0aW1lci9JU1IpIHNraXAgdGhlIFZGIG5vdGlmeSBwYXRoLCBhbmQgY2FuY2VsbGluZwomIzQzOwkgKiBsaW5rX25vdGlmeV93b3JrIGVuc3VyZXMgYW55IGFscmVhZHktcXVldWVkIGJyb2FkY2FzdCBoYXMgZmluaXNoZWQKJiM0MzsJICogYmVmb3JlIHZmX3N0YXRlIGlzIGZyZWVkLCBjbG9zaW5nIGEgdXNlLWFmdGVyLWZyZWUgd2luZG93LgomIzQzOwkgKi8KJiM0MzsJZW5pYy0mZ3Q7cHJpdl9mbGFncyAmYW1wOz0gfkVOSUNfU1JJT1ZfRU5BQkxFRDsKJiM0MzsJY2FuY2VsX3dvcmtfc3luYygmYW1wO2VuaWMtJmd0O2xpbmtfbm90aWZ5X3dvcmspOwomIzQzOwomIzQzOwlwY2lfZGlzYWJsZV9zcmlvdihlbmljLSZndDtwZGV2KTsKJiM0MzsJZW5pY19hZG1pbl9jaGFubmVsX2Nsb3NlKGVuaWMpOwomIzQzOwlrZnJlZShlbmljLSZndDt2Zl9zdGF0ZSk7CiYjNDM7CWVuaWMtJmd0O3ZmX3N0YXRlID0gTlVMTDsKJiM0MzsJZW5pYy0mZ3Q7bnVtX3ZmcyA9IDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgX19tYXliZV91bnVzZWQKJiM0MztlbmljX3NyaW92X2NvbmZpZ3VyZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG51bV92ZnMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwomIzQzOwlzdHJ1Y3QgZW5pYyAqZW5pYyA9IG5ldGRldl9wcml2KG5ldGRldik7CiYjNDM7CXN0cnVjdCBlbmljX3BvcnRfcHJvZmlsZSAqcHA7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CWlmIChudW1fdmZzICZndDsgMCkgewomIzQzOwkJaWYgKGVuaWMtJmd0O2NvbmZpZy5tcV9zdWJ2bmljX2NvdW50KSB7CiYjNDM7CQkJbmV0ZGV2X2VycihuZXRkZXYsCiYjNDM7CQkJCSAgICYjMzQ7U1ItSU9WIG5vdCBzdXBwb3J0ZWQgd2l0aCBtdWx0aS1xdWV1ZSBzdWItdm5pY3NcbiYjMzQ7KTsKJiM0MzsJCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlpZiAoZW5pYy0mZ3Q7dmZfdHlwZSA9PSBFTklDX1ZGX1RZUEVfTk9ORSkgewomIzQzOwkJCW5ldGRldl9lcnIobmV0ZGV2LAomIzQzOwkJCQkgICAmIzM0O1NSLUlPViBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgZmlybXdhcmUgdmVyc2lvblxuJiMzNDspOwomIzQzOwkJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWlmIChlbmljLSZndDt2Zl90eXBlID09IEVOSUNfVkZfVFlQRV9WMikKJiM0MzsJCQlyZXR1cm4gZW5pY19zcmlvdl92Ml9lbmFibGUoZW5pYywgbnVtX3Zmcyk7CiYjNDM7CiYjNDM7CQlwcCA9IGtjYWxsb2MobnVtX3Zmcywgc2l6ZW9mKCpwcCksIEdGUF9LRVJORUwpOwomIzQzOwkJaWYgKCFwcCkKJiM0MzsJCQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJCWVyciA9IHBjaV9lbmFibGVfc3Jpb3YocGRldiwgbnVtX3Zmcyk7CiYjNDM7CQlpZiAoZXJyKSB7CiYjNDM7CQkJa2ZyZWUocHApOwomIzQzOwkJCXJldHVybiBlcnI7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlrZnJlZShlbmljLSZndDtwcCk7CiYjNDM7CQllbmljLSZndDtwcCA9IHBwOwomIzQzOwkJZW5pYy0mZ3Q7bnVtX3ZmcyA9IG51bV92ZnM7CiYjNDM7CQllbmljLSZndDtwcml2X2ZsYWdzIHw9IEVOSUNfU1JJT1ZfRU5BQkxFRDsKJiM0MzsJCXJldHVybiBudW1fdmZzOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICghZW5pY19zcmlvdl9lbmFibGVkKGVuaWMpKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWlmIChlbmljLSZndDt2Zl90eXBlID09IEVOSUNfVkZfVFlQRV9WMikgewomIzQzOwkJZW5pY19zcmlvdl92Ml9kaXNhYmxlKGVuaWMpOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcHAgPSBremFsbG9jX29iaigqZW5pYy0mZ3Q7cHAsIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoIXBwKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CXBjaV9kaXNhYmxlX3NyaW92KHBkZXYpOwomIzQzOwllbmljLSZndDtudW1fdmZzID0gMDsKJiM0MzsJZW5pYy0mZ3Q7cHJpdl9mbGFncyAmYW1wOz0gfkVOSUNfU1JJT1ZfRU5BQkxFRDsKJiM0MzsKJiM0MzsJa2ZyZWUoZW5pYy0mZ3Q7cHApOwomIzQzOwllbmljLSZndDtwcCA9IHBwOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKIH0KICNlbmRpZgogCkBAIC0yNzY4LDEyICYjNDM7MzA0MywxOCBAQCBzdGF0aWMgaW50IGVuaWNfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCiAJCWdvdG8gZXJyX291dF92bmljX3VucmVnaXN0ZXI7CiAKICNpZmRlZiBDT05GSUdfUENJX0lPVgotCS8qIEdldCBudW1iZXIgb2Ygc3Vidm5pY3MgKi8KJiM0MzsJZW5pY19zcmlvdl9kZXRlY3RfdmZfdHlwZShlbmljKTsKJiM0MzsKJiM0MzsJLyogQXV0by1lbmFibGUgU1ItSU9WIGlmIFZGcyB3ZXJlIHByZS1jb25maWd1cmVkIChlLmcuIGF0IGJvb3QpLgomIzQzOwkgKiBWMiBWRnMgcmVxdWlyZSB0aGUgYWRtaW4gY2hhbm5lbCwgd2hpY2ggaXMgbm90IHlldCBzZXQgdXAgYXQgcHJvYmUKJiM0MzsJICogdGltZTsgdXNlIHN5c2ZzIChlbmljX3NyaW92X2NvbmZpZ3VyZSkgdG8gZW5hYmxlIFYyIFNSLUlPViBpbnN0ZWFkLgomIzQzOwkgKi8KIAlwb3MgPSBwY2lfZmluZF9leHRfY2FwYWJpbGl0eShwZGV2LCBQQ0lfRVhUX0NBUF9JRF9TUklPVik7CiAJaWYgKHBvcykgewogCQlwY2lfcmVhZF9jb25maWdfd29yZChwZGV2LCBwb3MgJiM0MzsgUENJX1NSSU9WX1RPVEFMX1ZGLAogCQkJJmFtcDtlbmljLSZndDtudW1fdmZzKTsKLQkJaWYgKGVuaWMtJmd0O251bV92ZnMpIHsKJiM0MzsJCWlmIChlbmljLSZndDtudW1fdmZzICZhbXA7JmFtcDsKJiM0MzsJCSAgICBlbmljLSZndDt2Zl90eXBlICE9IEVOSUNfVkZfVFlQRV9WMikgewogCQkJZXJyID0gcGNpX2VuYWJsZV9zcmlvdihwZGV2LCBlbmljLSZndDtudW1fdmZzKTsKIAkJCWlmIChlcnIpIHsKIAkJCQlkZXZfZXJyKGRldiwgJiMzNDtTUklPViBlbmFibGUgZmFpbGVkLCBhYm9ydGluZy4mIzM0OwpAQCAtMjc4NSw3ICYjNDM7MzA2Niw2IEBAIHN0YXRpYyBpbnQgZW5pY19wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKIAkJCW51bV9wcHMgPSBlbmljLSZndDtudW1fdmZzOwogCQl9CiAJfQotCWVuaWNfc3Jpb3ZfZGV0ZWN0X3ZmX3R5cGUoZW5pYyk7CiAjZW5kaWYKIAogCS8qIEFsbG9jYXRlIHN0cnVjdHVyZSBmb3IgcG9ydCBwcm9maWxlcyAqLwpAQCAtMjg1MCw2ICYjNDM7MzEzMCw0NCBAQCBzdGF0aWMgaW50IGVuaWNfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCiAJCWdvdG8gZXJyX291dF9kZXZfY2xvc2U7CiAJfQogCiYjNDM7CS8qIEluaXRpYWxpc2UgbGlua19ub3RpZnlfd29yayBiZWZvcmUgdGhlIFYyLVZGIGFkbWluLW9wZW4gYmxvY2sgYmVsb3c6CiYjNDM7CSAqIGl0cyBlcnJvciBwYXRoIChlcnJfb3V0X2FkbWluX2Nsb3NlIC0mZ3Q7IGVuaWNfYWRtaW5fY2hhbm5lbF9jbG9zZSgpIC0mZ3Q7CiYjNDM7CSAqIGNhbmNlbF93b3JrX3N5bmMoKSkgd291bGQgb3RoZXJ3aXNlIGFjdCBvbiBhbiB1bmluaXRpYWxpc2VkIHdvcmsuCiYjNDM7CSAqLwomIzQzOwlJTklUX1dPUksoJmFtcDtlbmljLSZndDtsaW5rX25vdGlmeV93b3JrLCBlbmljX2xpbmtfbm90aWZ5X3dvcmtfaGFuZGxlcik7CiYjNDM7CiYjNDM7CS8qIFYyIFZGOiBvcGVuIGFkbWluIGNoYW5uZWwgYW5kIHJlZ2lzdGVyIHdpdGggUEYuCiYjNDM7CSAqIE11c3QgaGFwcGVuIGJlZm9yZSByZWdpc3Rlcl9uZXRkZXYgc28gdGhlIFZGIGlzIGZ1bGx5CiYjNDM7CSAqIGluaXRpYWxpemVkIGJlZm9yZSB0aGUgaW50ZXJmYWNlIGlzIHZpc2libGUgdG8gdXNlcnNwYWNlLgomIzQzOwkgKgomIzQzOwkgKiBhZG1pbl9jaGFubmVsX29wZW4oKSBydW5zIGJlZm9yZSBlbmljX21ib3hfaW5pdCgpIGluc3RhbGxzCiYjNDM7CSAqIHRoZSByZWNlaXZlIGhhbmRsZXIuICBUaGlzIGlzIHNhZmUgYmVjYXVzZQomIzQzOwkgKiBlbmljX2FkbWluX3JxX2NxX3NlcnZpY2UoKSBjaGVja3MgYWRtaW5fcnFfaGFuZGxlciBiZWZvcmUKJiM0MzsJICogZW5xdWV1aW5nIGFueSByZWNlaXZlZCBidWZmZXIsIHNvIGludGVycnVwdHMgdGhhdCBmaXJlCiYjNDM7CSAqIGJldHdlZW4gb3BlbiBhbmQgbWJveF9pbml0IGFyZSBoYXJtbGVzc2x5IGRpc2NhcmRlZC4KJiM0MzsJICovCiYjNDM7CWlmIChlbmljX2lzX3NyaW92X3ZmX3YyKGVuaWMpKSB7CiYjNDM7CQllcnIgPSBlbmljX2FkbWluX2NoYW5uZWxfb3BlbihlbmljKTsKJiM0MzsJCWlmIChlcnIpIHsKJiM0MzsJCQlkZXZfZXJyKGRldiwKJiM0MzsJCQkJJiMzNDtGYWlsZWQgdG8gb3BlbiBhZG1pbiBjaGFubmVsOiAlZFxuJiMzNDssIGVycik7CiYjNDM7CQkJZ290byBlcnJfb3V0X2Rldl9kZWluaXQ7CiYjNDM7CQl9CiYjNDM7CQllbmljX21ib3hfaW5pdChlbmljKTsKJiM0MzsJCWVyciA9IGVuaWNfbWJveF92Zl9jYXBhYmlsaXR5X2NoZWNrKGVuaWMpOwomIzQzOwkJaWYgKGVycikgewomIzQzOwkJCWRldl9lcnIoZGV2LAomIzQzOwkJCQkmIzM0O01CT1ggY2FwYWJpbGl0eSBjaGVjayBmYWlsZWQ6ICVkXG4mIzM0OywgZXJyKTsKJiM0MzsJCQlnb3RvIGVycl9vdXRfYWRtaW5fY2xvc2U7CiYjNDM7CQl9CiYjNDM7CQllcnIgPSBlbmljX21ib3hfdmZfcmVnaXN0ZXIoZW5pYyk7CiYjNDM7CQlpZiAoZXJyKSB7CiYjNDM7CQkJZGV2X2VycihkZXYsCiYjNDM7CQkJCSYjMzQ7TUJPWCBWRiByZWdpc3RyYXRpb24gZmFpbGVkOiAlZFxuJiMzNDssIGVycik7CiYjNDM7CQkJZ290byBlcnJfb3V0X2FkbWluX2Nsb3NlOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiAJbmV0aWZfc2V0X3JlYWxfbnVtX3R4X3F1ZXVlcyhuZXRkZXYsIGVuaWMtJmd0O3dxX2NvdW50KTsKIAluZXRpZl9zZXRfcmVhbF9udW1fcnhfcXVldWVzKG5ldGRldiwgZW5pYy0mZ3Q7cnFfY291bnQpOwogCkBAIC0yODc0LDcgJiM0MzszMTkyLDcgQEAgc3RhdGljIGludCBlbmljX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQogCWVyciA9IGVuaWNfc2V0X21hY19hZGRyKG5ldGRldiwgZW5pYy0mZ3Q7bWFjX2FkZHIpOwogCWlmIChlcnIpIHsKIAkJZGV2X2VycihkZXYsICYjMzQ7SW52YWxpZCBNQUMgYWRkcmVzcywgYWJvcnRpbmdcbiYjMzQ7KTsKLQkJZ290byBlcnJfb3V0X2Rldl9kZWluaXQ7CiYjNDM7CQlnb3RvIGVycl9vdXRfYWRtaW5fY2xvc2U7CiAJfQogCiAJZW5pYy0mZ3Q7dHhfY29hbGVzY2VfdXNlY3MgPSBlbmljLSZndDtjb25maWcuaW50cl90aW1lcl91c2VjOwpAQCAtMjk3MiwxMSAmIzQzOzMyOTAsMjMgQEAgc3RhdGljIGludCBlbmljX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQogCWVyciA9IHJlZ2lzdGVyX25ldGRldihuZXRkZXYpOwogCWlmIChlcnIpIHsKIAkJZGV2X2VycihkZXYsICYjMzQ7Q2Fubm90IHJlZ2lzdGVyIG5ldCBkZXZpY2UsIGFib3J0aW5nXG4mIzM0Oyk7Ci0JCWdvdG8gZXJyX291dF9kZXZfZGVpbml0OwomIzQzOwkJZ290byBlcnJfb3V0X2FkbWluX2Nsb3NlOwogCX0KIAogCXJldHVybiAwOwogCiYjNDM7ZXJyX291dF9hZG1pbl9jbG9zZToKJiM0MzsJaWYgKGVuaWNfaXNfc3Jpb3ZfdmZfdjIoZW5pYykpIHsKJiM0MzsJCWlmIChlbmljLSZndDt2Zl9yZWdpc3RlcmVkKSB7CiYjNDM7CQkJaW50IHVucmVnX2VyciA9IGVuaWNfbWJveF92Zl91bnJlZ2lzdGVyKGVuaWMpOwomIzQzOwomIzQzOwkJCWlmICh1bnJlZ19lcnIpCiYjNDM7CQkJCW5ldGRldl93YXJuKG5ldGRldiwKJiM0MzsJCQkJCSAgICAmIzM0O0ZhaWxlZCB0byB1bnJlZ2lzdGVyIGZyb20gUEY6ICVkXG4mIzM0OywKJiM0MzsJCQkJCSAgICB1bnJlZ19lcnIpOwomIzQzOwkJfQomIzQzOwkJZW5pY19hZG1pbl9jaGFubmVsX2Nsb3NlKGVuaWMpOwomIzQzOwl9CiBlcnJfb3V0X2Rldl9kZWluaXQ6CiAJZW5pY19kZXZfZGVpbml0KGVuaWMpOwogZXJyX291dF9kZXZfY2xvc2U6CkBAIC0zMDEyLDE2ICYjNDM7MzM0Miw0MiBAQCBzdGF0aWMgdm9pZCBlbmljX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIAkJc3RydWN0IGVuaWMgKmVuaWMgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCiAJCWNhbmNlbF93b3JrX3N5bmMoJmFtcDtlbmljLSZndDtyZXNldCk7CiYjNDM7CQljYW5jZWxfd29ya19zeW5jKCZhbXA7ZW5pYy0mZ3Q7dHhfaGFuZ19yZXNldCk7CiAJCWNhbmNlbF93b3JrX3N5bmMoJmFtcDtlbmljLSZndDtjaGFuZ2VfbXR1X3dvcmspOwomIzQzOwomIzQzOwkJLyogQ2xvc2UgdGhlIGFkbWluIGNoYW5uZWwgYW5kIHVucmVnaXN0ZXIgZnJvbSB0aGUgUEYgYmVmb3JlCiYjNDM7CQkgKiB1bnJlZ2lzdGVyX25ldGRldigpIHRvIHByZXZlbnQgYSBsYXRlIFBGIG5vdGlmaWNhdGlvbiBmcm9tCiYjNDM7CQkgKiB0b3VjaGluZyBhIG5ldGRldiB0aGF0IGhhcyBiZWVuIGZyZWVkLgomIzQzOwkJICovCiYjNDM7CQlpZiAoZW5pY19pc19zcmlvdl92Zl92MihlbmljKSkgewomIzQzOwkJCWlmIChlbmljLSZndDt2Zl9yZWdpc3RlcmVkKSB7CiYjNDM7CQkJCWludCB1bnJlZ19lcnIgPSBlbmljX21ib3hfdmZfdW5yZWdpc3RlcihlbmljKTsKJiM0MzsKJiM0MzsJCQkJaWYgKHVucmVnX2VycikKJiM0MzsJCQkJCW5ldGRldl93YXJuKG5ldGRldiwKJiM0MzsJCQkJCQkgICAgJiMzNDtGYWlsZWQgdG8gdW5yZWdpc3RlciBmcm9tIFBGOiAlZFxuJiMzNDssCiYjNDM7CQkJCQkJICAgIHVucmVnX2Vycik7CiYjNDM7CQkJfQomIzQzOwkJCWVuaWNfYWRtaW5fY2hhbm5lbF9jbG9zZShlbmljKTsKJiM0MzsJCX0KJiM0MzsKIAkJdW5yZWdpc3Rlcl9uZXRkZXYobmV0ZGV2KTsKLQkJZW5pY19kZXZfZGVpbml0KGVuaWMpOwotCQl2bmljX2Rldl9jbG9zZShlbmljLSZndDt2ZGV2KTsKJiM0MzsJCS8qIHVucmVnaXN0ZXJfbmV0ZGV2KCkgLSZndDsgZW5pY19zdG9wKCkgc3RvcHMgdGhlIG5vdGlmeSB0aW1lciwgc28KJiM0MzsJCSAqIG5vIG5ldyBsaW5rX25vdGlmeV93b3JrIGNhbiBiZSBxdWV1ZWQgcGFzdCB0aGlzIHBvaW50LiAgQ2FuY2VsCiYjNDM7CQkgKiB1bmNvbmRpdGlvbmFsbHkgdG8gY292ZXIgdGhlIG5hcnJvdyB3aW5kb3cgd2hlcmUKJiM0MzsJCSAqIGVuaWNfbGlua19jaGVjaygpIHNjaGVkdWxlZCBpdCBqdXN0IGFzIFNSLUlPViB3YXMgZGlzYWJsZWQuCiYjNDM7CQkgKi8KJiM0MzsJCWNhbmNlbF93b3JrX3N5bmMoJmFtcDtlbmljLSZndDtsaW5rX25vdGlmeV93b3JrKTsKICNpZmRlZiBDT05GSUdfUENJX0lPVgogCQlpZiAoZW5pY19zcmlvdl9lbmFibGVkKGVuaWMpKSB7Ci0JCQlwY2lfZGlzYWJsZV9zcmlvdihwZGV2KTsKLQkJCWVuaWMtJmd0O3ByaXZfZmxhZ3MgJmFtcDs9IH5FTklDX1NSSU9WX0VOQUJMRUQ7CiYjNDM7CQkJaWYgKGVuaWMtJmd0O3ZmX3R5cGUgPT0gRU5JQ19WRl9UWVBFX1YyKQomIzQzOwkJCQllbmljX3NyaW92X3YyX2Rpc2FibGUoZW5pYyk7CiYjNDM7CQkJZWxzZQomIzQzOwkJCQlwY2lfZGlzYWJsZV9zcmlvdihwZGV2KTsKIAkJfQogI2VuZGlmCiYjNDM7CQllbmljX2Rldl9kZWluaXQoZW5pYyk7CiYjNDM7CQl2bmljX2Rldl9jbG9zZShlbmljLSZndDt2ZGV2KTsKIAkJa2ZyZWUoZW5pYy0mZ3Q7cHApOwogCQl2bmljX2Rldl91bnJlZ2lzdGVyKGVuaWMtJmd0O3ZkZXYpOwogCQllbmljX2lvdW5tYXAoZW5pYyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfbWJveC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21ib3guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uNWNkYWY1YTBlNTI0NjcKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfbWJveC5jCkBAIC0wLDAgJiM0MzsxLDY0MCBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKJiM0MzsvLyBDb3B5cmlnaHQgMjAyNSBDaXNjbyBTeXN0ZW1zLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9rZXJuZWwuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbmV0ZGV2aWNlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2RtYS1tYXBwaW5nLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2RlbGF5LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2NvbXBsZXRpb24uaCZndDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0O3ZuaWNfZGV2LmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7dm5pY193cS5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O3ZuaWNfY3EuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtlbmljLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7ZW5pY19hZG1pbi5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2VuaWNfbWJveC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O3dxX2VuZXRfZGVzYy5oJiMzNDsKJiM0MzsKJiM0MzsjZGVmaW5lIEVOSUNfTUJPWF9QT0xMX1RJTUVPVVRfVVMJNTAwMDAwMAomIzQzOyNkZWZpbmUgRU5JQ19NQk9YX1BPTExfSU5URVJWQUxfVVMJMTAwCiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgZW5pY19tYm94X2ZpbGxfaGRyKHN0cnVjdCBlbmljICplbmljLCBzdHJ1Y3QgZW5pY19tYm94X2hkciAqaGRyLAomIzQzOwkJCSAgICAgICB1OCBtc2dfdHlwZSwgdTE2IGRzdF92bmljX2lkLCB1MTYgbXNnX2xlbikKJiM0Mzt7CiYjNDM7CW1lbXNldChoZHIsIDAsIHNpemVvZigqaGRyKSk7CiYjNDM7CWhkci0mZ3Q7ZHN0X3ZuaWNfaWQgPSBjcHVfdG9fbGUxNihkc3Rfdm5pY19pZCk7CiYjNDM7CWhkci0mZ3Q7bXNnX3R5cGUgPSBtc2dfdHlwZTsKJiM0MzsJaGRyLSZndDttc2dfbGVuID0gY3B1X3RvX2xlMTYobXNnX2xlbik7CiYjNDM7CWhkci0mZ3Q7bXNnX251bSA9IGNwdV90b19sZTY0KCYjNDM7JiM0MztlbmljLSZndDttYm94X21zZ19udW0pOwomIzQzO30KJiM0MzsKJiM0MztpbnQgZW5pY19tYm94X3NlbmRfbXNnKHN0cnVjdCBlbmljICplbmljLCB1OCBtc2dfdHlwZSwgdTE2IGRzdF92bmljX2lkLAomIzQzOwkJICAgICAgIHZvaWQgKnBheWxvYWQsIHUxNiBwYXlsb2FkX2xlbikKJiM0Mzt7CiYjNDM7CXUxNiB0b3RhbF9sZW4gPSBzaXplb2Yoc3RydWN0IGVuaWNfbWJveF9oZHIpICYjNDM7IHBheWxvYWRfbGVuOwomIzQzOwlzdHJ1Y3Qgdm5pY193cSAqd3EgPSAmYW1wO2VuaWMtJmd0O2FkbWluX3dxOwomIzQzOwlzdHJ1Y3Qgd3FfZW5ldF9kZXNjICpkZXNjOwomIzQzOwl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CiYjNDM7CWRtYV9hZGRyX3QgZG1hX2FkZHI7CiYjNDM7CXUxNiB2bGFuX3RhZzsKJiM0MzsJdm9pZCAqYnVmOwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwkvKiBTZXJpYWxpemUgTUJPWCBzZW5kcy4gVGhlIGFkbWluIGNoYW5uZWwgaXMgYSBsb3ctZnJlcXVlbmN5CiYjNDM7CSAqIGNvbnRyb2wgcGF0aDsgaG9sZGluZyB0aGUgbXV0ZXggYWNyb3NzIHRoZSBwb2xsIGlzIGFjY2VwdGFibGUuCiYjNDM7CSAqLwomIzQzOwltdXRleF9sb2NrKCZhbXA7ZW5pYy0mZ3Q7bWJveF9sb2NrKTsKJiM0MzsKJiM0MzsJaWYgKCFlbmljLSZndDtoYXNfYWRtaW5fY2hhbm5lbCB8fCBSRUFEX09OQ0UoZW5pYy0mZ3Q7bWJveF9zZW5kX2Rpc2FibGVkKSkgewomIzQzOwkJZXJyID0gLUVOT0RFVjsKJiM0MzsJCWdvdG8gdW5sb2NrOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICh2bmljX3dxX2Rlc2NfYXZhaWwod3EpID09IDApIHsKJiM0MzsJCWVyciA9IC1FTk9TUEM7CiYjNDM7CQlnb3RvIHVubG9jazsKJiM0MzsJfQomIzQzOwomIzQzOwlidWYgPSBrbWFsbG9jKHRvdGFsX2xlbiwgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmICghYnVmKSB7CiYjNDM7CQllcnIgPSAtRU5PTUVNOwomIzQzOwkJZ290byB1bmxvY2s7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZW5pY19tYm94X2ZpbGxfaGRyKGVuaWMsIGJ1ZiwgbXNnX3R5cGUsIGRzdF92bmljX2lkLCB0b3RhbF9sZW4pOwomIzQzOwlpZiAocGF5bG9hZF9sZW4pIHsKJiM0MzsJCXZvaWQgKmRzdCA9IGJ1ZiAmIzQzOyBzaXplb2Yoc3RydWN0IGVuaWNfbWJveF9oZHIpOwomIzQzOwomIzQzOwkJbWVtY3B5KGRzdCwgcGF5bG9hZCwgcGF5bG9hZF9sZW4pOwomIzQzOwl9CiYjNDM7CiYjNDM7CWRtYV9hZGRyID0gZG1hX21hcF9zaW5nbGUoJmFtcDtlbmljLSZndDtwZGV2LSZndDtkZXYsIGJ1ZiwgdG90YWxfbGVuLAomIzQzOwkJCQkgIERNQV9UT19ERVZJQ0UpOwomIzQzOwlpZiAoZG1hX21hcHBpbmdfZXJyb3IoJmFtcDtlbmljLSZndDtwZGV2LSZndDtkZXYsIGRtYV9hZGRyKSkgewomIzQzOwkJa2ZyZWUoYnVmKTsKJiM0MzsJCWVyciA9IC1FTk9NRU07CiYjNDM7CQlnb3RvIHVubG9jazsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBGaXJtd2FyZSB1c2VzIHZsYW4gZmllbGQgZm9yIHJvdXRpbmc6IDAgPSBQRiwgMS1iYXNlZCA9IFZGIGluZGV4ICovCiYjNDM7CWlmIChkc3Rfdm5pY19pZCA9PSBFTklDX01CT1hfRFNUX1BGKQomIzQzOwkJdmxhbl90YWcgPSAwOwomIzQzOwllbHNlCiYjNDM7CQl2bGFuX3RhZyA9IGRzdF92bmljX2lkICYjNDM7IDE7CiYjNDM7CiYjNDM7CWRlc2MgPSB2bmljX3dxX25leHRfZGVzYyh3cSk7CiYjNDM7CXdxX2VuZXRfZGVzY19lbmMoZGVzYywgKHU2NClkbWFfYWRkciB8IFZOSUNfUEFERFJfVEFSR0VULAomIzQzOwkJCSB0b3RhbF9sZW4sCiYjNDM7CQkJIDAsIDAsIDAsICAgICAgIC8qIG1zcywgaGRyX2xlbiwgb2ZmbG9hZF9tb2RlICovCiYjNDM7CQkJIDEsIDEsICAgICAgICAgIC8qIGVvcCwgY3FfZW50cnkgKi8KJiM0MzsJCQkgMCwgICAgICAgICAgICAgLyogZmNvZV9lbmNhcCAqLwomIzQzOwkJCSAxLCB2bGFuX3RhZywgICAvKiB2bGFuX3RhZ19pbnNlcnQsIHZsYW5fdGFnICovCiYjNDM7CQkJIDApOyAgICAgICAgICAgIC8qIGxvb3BiYWNrICovCiYjNDM7CXZuaWNfd3FfcG9zdCh3cSwgYnVmLCBkbWFfYWRkciwgdG90YWxfbGVuLAomIzQzOwkJICAgICAxLCAxLCAgICAgICAgICAgICAgLyogc29wLCBlb3AgKi8KJiM0MzsJCSAgICAgMSwgMSwgICAgICAgICAgICAgIC8qIGRlc2Nfc2tpcF9jbnQsIGNxX2VudHJ5ICovCiYjNDM7CQkgICAgIDAsIDApOyAgICAgICAgICAgICAvKiBjb21wcmVzc2VkX3NlbmQsIHdyaWQgKi8KJiM0MzsJdm5pY193cV9kb29yYmVsbCh3cSk7CiYjNDM7CiYjNDM7CXRpbWVvdXQgPSBqaWZmaWVzICYjNDM7IHVzZWNzX3RvX2ppZmZpZXMoRU5JQ19NQk9YX1BPTExfVElNRU9VVF9VUyk7CiYjNDM7CWVyciA9IC1FVElNRURPVVQ7CiYjNDM7CXdoaWxlICh0aW1lX2JlZm9yZShqaWZmaWVzLCB0aW1lb3V0KSkgewomIzQzOwkJaWYgKGVuaWNfYWRtaW5fd3FfY3Ffc2VydmljZShlbmljKSkgewomIzQzOwkJCWVyciA9IDA7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQl9CiYjNDM7CQl1c2xlZXBfcmFuZ2UoRU5JQ19NQk9YX1BPTExfSU5URVJWQUxfVVMsCiYjNDM7CQkJICAgICBFTklDX01CT1hfUE9MTF9JTlRFUlZBTF9VUyAmIzQzOyA1MCk7CiYjNDM7CX0KJiM0MzsJLyogRmluYWwgY2hlY2sgaW4gY2FzZSBjb21wbGV0aW9uIGFycml2ZWQgZHVyaW5nIHRoZSBsYXN0IHNsZWVwICovCiYjNDM7CWlmIChlcnIgJmFtcDsmYW1wOyBlbmljX2FkbWluX3dxX2NxX3NlcnZpY2UoZW5pYykpCiYjNDM7CQllcnIgPSAwOwomIzQzOwomIzQzOwlpZiAoIWVycikgewomIzQzOwkJd3EtJmd0O3RvX2NsZWFuID0gd3EtJmd0O3RvX2NsZWFuLSZndDtuZXh0OwomIzQzOwkJd3EtJmd0O3JpbmcuZGVzY19hdmFpbCYjNDM7JiM0Mzs7CiYjNDM7CQlkbWFfdW5tYXBfc2luZ2xlKCZhbXA7ZW5pYy0mZ3Q7cGRldi0mZ3Q7ZGV2LCBkbWFfYWRkciwgdG90YWxfbGVuLAomIzQzOwkJCQkgRE1BX1RPX0RFVklDRSk7CiYjNDM7CQlrZnJlZShidWYpOwomIzQzOwl9IGVsc2UgewomIzQzOwkJbmV0ZGV2X2VycihlbmljLSZndDtuZXRkZXYsCiYjNDM7CQkJICAgJiMzNDtNQk9YIHNlbmQgdGltZWQgb3V0ICh0eXBlICV1IGRzdCAldSksIGRpc2FibGluZyBjaGFubmVsXG4mIzM0OywKJiM0MzsJCQkgICBtc2dfdHlwZSwgZHN0X3ZuaWNfaWQpOwomIzQzOwkJLyoKJiM0MzsJCSAqIFRoZSBXUSBkZXNjcmlwdG9yIGlzIHN0aWxsIGxpdmUgaW4gaGFyZHdhcmUuIERvIG5vdCB1bm1hcAomIzQzOwkJICogb3IgZnJlZSB0aGUgYnVmZmVyOiB0aGUgZGV2aWNlIG1heSBzdGlsbCBETUEgZnJvbSBkbWFfYWRkci4KJiM0MzsJCSAqIE1hcmsgdGhlIGNoYW5uZWwgdW51c2FibGUgc28gbm8gZnVydGhlciBzZW5kcyBhcmUgYXR0ZW1wdGVkLgomIzQzOwkJICovCiYjNDM7CQlXUklURV9PTkNFKGVuaWMtJmd0O21ib3hfc2VuZF9kaXNhYmxlZCwgdHJ1ZSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJbmV0ZGV2X2RiZyhlbmljLSZndDtuZXRkZXYsCiYjNDM7CQkgICAmIzM0O01CT1ggc2VuZCBtc2dfdHlwZSAldSBkc3QgJXUgdmxhbiAldSBlcnIgJWRcbiYjMzQ7LAomIzQzOwkJICAgbXNnX3R5cGUsIGRzdF92bmljX2lkLCB2bGFuX3RhZywgZXJyKTsKJiM0Mzt1bmxvY2s6CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO2VuaWMtJmd0O21ib3hfbG9jayk7CiYjNDM7CXJldHVybiBlcnI7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgZW5pY19tYm94X3dhaXRfcmVwbHkoc3RydWN0IGVuaWMgKmVuaWMsIHVuc2lnbmVkIGxvbmcgdGltZW91dF9tcykKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGxvbmcgbGVmdDsKJiM0MzsKJiM0MzsJbGVmdCA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmYW1wO2VuaWMtJmd0O21ib3hfY29tcCwKJiM0MzsJCQkJCSAgIG1zZWNzX3RvX2ppZmZpZXModGltZW91dF9tcykpOwomIzQzOwomIzQzOwlyZXR1cm4gbGVmdCA/IDAgOiAtRVRJTUVET1VUOwomIzQzO30KJiM0MzsKJiM0MztpbnQgZW5pY19tYm94X3NlbmRfbGlua19zdGF0ZShzdHJ1Y3QgZW5pYyAqZW5pYywgdTE2IHZmX2lkLCB1MzIgbGlua19zdGF0ZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBlbmljX21ib3hfcGZfbGlua19zdGF0ZV9ub3RpZl9tc2cgbm90aWYgPSB7fTsKJiM0MzsKJiM0MzsJaWYgKCFlbmljLSZndDt2Zl9zdGF0ZSB8fCB2Zl9pZCAmZ3Q7PSBlbmljLSZndDtudW1fdmZzIHx8CiYjNDM7CSAgICAhZW5pYy0mZ3Q7dmZfc3RhdGVbdmZfaWRdLnJlZ2lzdGVyZWQpIHsKJiM0MzsJCW5ldGRldl9kYmcoZW5pYy0mZ3Q7bmV0ZGV2LAomIzQzOwkJCSAgICYjMzQ7TUJPWDogc2tpcCBsaW5rIHN0YXRlIHRvIHVucmVnaXN0ZXJlZCBWRiAldVxuJiMzNDssCiYjNDM7CQkJICAgdmZfaWQpOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJbm90aWYubGlua19zdGF0ZSA9IGNwdV90b19sZTMyKGxpbmtfc3RhdGUpOwomIzQzOwlyZXR1cm4gZW5pY19tYm94X3NlbmRfbXNnKGVuaWMsIEVOSUNfTUJPWF9QRl9MSU5LX1NUQVRFX05PVElGLCB2Zl9pZCwKJiM0MzsJCQkJICAmYW1wO25vdGlmLCBzaXplb2Yobm90aWYpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBlbmljX21ib3hfcGZfaGFuZGxlX2NhcGFiaWxpdHkoc3RydWN0IGVuaWMgKmVuaWMsIHZvaWQgKm1zZywKJiM0MzsJCQkJCSAgdTE2IHZmX2lkLCB1NjQgbXNnX251bSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBlbmljX21ib3hfdmZfY2FwYWJpbGl0eV9yZXBseV9tc2cgcmVwbHkgPSB7fTsKJiM0MzsKJiM0MzsJcmVwbHkucmVwbHkucmV0X21ham9yID0gY3B1X3RvX2xlMTYoMCk7CiYjNDM7CXJlcGx5LnZlcnNpb24gPSBjcHVfdG9fbGUzMihFTklDX01CT1hfQ0FQX1ZFUlNJT05fMSk7CiYjNDM7CiYjNDM7CXJldHVybiBlbmljX21ib3hfc2VuZF9tc2coZW5pYywgRU5JQ19NQk9YX1ZGX0NBUEFCSUxJVFlfUkVQTFksIHZmX2lkLAomIzQzOwkJCQkgICZhbXA7cmVwbHksIHNpemVvZihyZXBseSkpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGVuaWNfbWJveF9wZl9oYW5kbGVfcmVnaXN0ZXIoc3RydWN0IGVuaWMgKmVuaWMsIHZvaWQgKm1zZywKJiM0MzsJCQkJCXUxNiB2Zl9pZCwgdTY0IG1zZ19udW0pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZW5pY19tYm94X3ZmX3JlZ2lzdGVyX3JlcGx5X21zZyByZXBseSA9IHt9OwomIzQzOwl1MzIgbGlua19zdGF0ZTsKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJaWYgKCFlbmljLSZndDt2Zl9zdGF0ZSB8fCB2Zl9pZCAmZ3Q7PSBlbmljLSZndDtudW1fdmZzKSB7CiYjNDM7CQlpZiAobmV0X3JhdGVsaW1pdCgpKQomIzQzOwkJCW5ldGRldl93YXJuKGVuaWMtJmd0O25ldGRldiwKJiM0MzsJCQkJICAgICYjMzQ7TUJPWDogcmVnaXN0ZXIgZnJvbSBpbnZhbGlkIFZGICV1XG4mIzM0OywKJiM0MzsJCQkJICAgIHZmX2lkKTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIFZGIHJlLXJlZ2lzdGVyaW5nIChlLmcuIGd1ZXN0IHJlYm9vdCB3aXRob3V0IGNsZWFuIHVucmVnaXN0ZXIpOgomIzQzOwkgKiBtYXJrIHRoZSBwcmV2aW91cyByZWdpc3RyYXRpb24gaW5hY3RpdmUgYmVmb3JlIGFjY2VwdGluZyB0aGUgbmV3IG9uZS4KJiM0MzsJICovCiYjNDM7CWlmIChlbmljLSZndDt2Zl9zdGF0ZVt2Zl9pZF0ucmVnaXN0ZXJlZCkgewomIzQzOwkJbmV0ZGV2X2RiZyhlbmljLSZndDtuZXRkZXYsCiYjNDM7CQkJICAgJiMzNDtNQk9YOiBWRiAldSByZS1yZWdpc3RlciwgY2xlYW5pbmcgcHJldmlvdXMgc3RhdGVcbiYjMzQ7LAomIzQzOwkJCSAgIHZmX2lkKTsKJiM0MzsJCWVuaWMtJmd0O3ZmX3N0YXRlW3ZmX2lkXS5yZWdpc3RlcmVkID0gZmFsc2U7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmVwbHkucmVwbHkucmV0X21ham9yID0gY3B1X3RvX2xlMTYoMCk7CiYjNDM7CWVyciA9IGVuaWNfbWJveF9zZW5kX21zZyhlbmljLCBFTklDX01CT1hfVkZfUkVHSVNURVJfUkVQTFksIHZmX2lkLAomIzQzOwkJCQkgJmFtcDtyZXBseSwgc2l6ZW9mKHJlcGx5KSk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlyZXR1cm4gZXJyOwomIzQzOwomIzQzOwllbmljLSZndDt2Zl9zdGF0ZVt2Zl9pZF0ucmVnaXN0ZXJlZCA9IHRydWU7CiYjNDM7CWlmIChuZXRfcmF0ZWxpbWl0KCkpCiYjNDM7CQluZXRkZXZfaW5mbyhlbmljLSZndDtuZXRkZXYsICYjMzQ7VkYgJXUgcmVnaXN0ZXJlZCB2aWEgTUJPWFxuJiMzNDssIHZmX2lkKTsKJiM0MzsKJiM0MzsJbGlua19zdGF0ZSA9IG5ldGlmX2NhcnJpZXJfb2soZW5pYy0mZ3Q7bmV0ZGV2KSA/CiYjNDM7CQlFTklDX01CT1hfTElOS19TVEFURV9FTkFCTEUgOgomIzQzOwkJRU5JQ19NQk9YX0xJTktfU1RBVEVfRElTQUJMRTsKJiM0MzsJZXJyID0gZW5pY19tYm94X3NlbmRfbGlua19zdGF0ZShlbmljLCB2Zl9pZCwgbGlua19zdGF0ZSk7CiYjNDM7CWlmIChlcnIgJmFtcDsmYW1wOyBuZXRfcmF0ZWxpbWl0KCkpCiYjNDM7CQluZXRkZXZfd2FybihlbmljLSZndDtuZXRkZXYsCiYjNDM7CQkJICAgICYjMzQ7VkYgJXU6IGZhaWxlZCB0byBzZW5kIGluaXRpYWwgbGluayBzdGF0ZTogJWRcbiYjMzQ7LAomIzQzOwkJCSAgICB2Zl9pZCwgZXJyKTsKJiM0MzsJLyogUmVnaXN0cmF0aW9uIHN1Y2NlZWRlZDsgaW5pdGlhbCBsaW5rIHN0YXRlIG5vdGlmaWNhdGlvbiBzZW50CiYjNDM7CSAqIGFib3ZlLiAgU3Vic2VxdWVudCBsaW5rIHN0YXRlIGNoYW5nZXMgYXJlIHNlbnQgZnJvbSB0aGUgUEYKJiM0MzsJICogd2hlbiBlbmljX2xpbmtfY2hlY2soKSBkZXRlY3RzIGNhcnJpZXIgY2hhbmdlcy4KJiM0MzsJICovCiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGVuaWNfbWJveF9wZl9oYW5kbGVfdW5yZWdpc3RlcihzdHJ1Y3QgZW5pYyAqZW5pYywgdm9pZCAqbXNnLAomIzQzOwkJCQkJICB1MTYgdmZfaWQsIHU2NCBtc2dfbnVtKQomIzQzO3sKJiM0MzsJc3RydWN0IGVuaWNfbWJveF92Zl9yZWdpc3Rlcl9yZXBseV9tc2cgcmVwbHkgPSB7fTsKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJaWYgKCFlbmljLSZndDt2Zl9zdGF0ZSB8fCB2Zl9pZCAmZ3Q7PSBlbmljLSZndDtudW1fdmZzKSB7CiYjNDM7CQlpZiAobmV0X3JhdGVsaW1pdCgpKQomIzQzOwkJCW5ldGRldl93YXJuKGVuaWMtJmd0O25ldGRldiwKJiM0MzsJCQkJICAgICYjMzQ7TUJPWDogdW5yZWdpc3RlciBmcm9tIGludmFsaWQgVkYgJXVcbiYjMzQ7LAomIzQzOwkJCQkgICAgdmZfaWQpOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogVkYgaXMgdW5sb2FkaW5nOyBjbGVhciBsb2NhbCBzdGF0ZSByZWdhcmRsZXNzIG9mIHdoZXRoZXIKJiM0MzsJICogdGhlIHJlcGx5IGlzIHN1Y2Nlc3NmdWxseSBkZWxpdmVyZWQgdG8gYXZvaWQgdGhlIFBGIHRyZWF0aW5nCiYjNDM7CSAqIGEgZGVhZCBWRiBhcyBzdGlsbCByZWdpc3RlcmVkLgomIzQzOwkgKi8KJiM0MzsJZW5pYy0mZ3Q7dmZfc3RhdGVbdmZfaWRdLnJlZ2lzdGVyZWQgPSBmYWxzZTsKJiM0MzsKJiM0MzsJcmVwbHkucmVwbHkucmV0X21ham9yID0gY3B1X3RvX2xlMTYoMCk7CiYjNDM7CWVyciA9IGVuaWNfbWJveF9zZW5kX21zZyhlbmljLCBFTklDX01CT1hfVkZfVU5SRUdJU1RFUl9SRVBMWSwgdmZfaWQsCiYjNDM7CQkJCSAmYW1wO3JlcGx5LCBzaXplb2YocmVwbHkpKTsKJiM0MzsKJiM0MzsJaWYgKG5ldF9yYXRlbGltaXQoKSkKJiM0MzsJCW5ldGRldl9pbmZvKGVuaWMtJmd0O25ldGRldiwKJiM0MzsJCQkgICAgJiMzNDtWRiAldSB1bnJlZ2lzdGVyZWQgdmlhIE1CT1hcbiYjMzQ7LCB2Zl9pZCk7CiYjNDM7CiYjNDM7CXJldHVybiBlcnI7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGVuaWNfbWJveF9wZl9wcm9jZXNzX21zZyhzdHJ1Y3QgZW5pYyAqZW5pYywKJiM0MzsJCQkJICAgICBzdHJ1Y3QgZW5pY19tYm94X2hkciAqaGRyLCB2b2lkICpwYXlsb2FkKQomIzQzO3sKJiM0MzsJdTE2IHZmX2lkID0gbGUxNl90b19jcHUoaGRyLSZndDtzcmNfdm5pY19pZCk7CiYjNDM7CXUxNiBtc2dfbGVuID0gbGUxNl90b19jcHUoaGRyLSZndDttc2dfbGVuKTsKJiM0MzsJaW50IGVyciA9IDA7CiYjNDM7CiYjNDM7CWlmICghZW5pYy0mZ3Q7dmZfc3RhdGUpIHsKJiM0MzsJCW5ldGRldl9kYmcoZW5pYy0mZ3Q7bmV0ZGV2LAomIzQzOwkJCSAgICYjMzQ7TUJPWDogUEYgcmVjZWl2ZWQgbXNnIGJ1dCBTUklPViBub3QgYWN0aXZlXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHZmX2lkICZndDs9IGVuaWMtJmd0O251bV92ZnMpIHsKJiM0MzsJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCiYjNDM7CQkJbmV0ZGV2X3dhcm4oZW5pYy0mZ3Q7bmV0ZGV2LAomIzQzOwkJCQkgICAgJiMzNDtNQk9YOiBQRiByZWNlaXZlZCBtc2cgZnJvbSBpbnZhbGlkIFZGICV1XG4mIzM0OywKJiM0MzsJCQkJICAgIHZmX2lkKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwlzd2l0Y2ggKGhkci0mZ3Q7bXNnX3R5cGUpIHsKJiM0MzsJY2FzZSBFTklDX01CT1hfVkZfQ0FQQUJJTElUWV9SRVFVRVNUOgomIzQzOwkJZXJyID0gZW5pY19tYm94X3BmX2hhbmRsZV9jYXBhYmlsaXR5KGVuaWMsIHBheWxvYWQsIHZmX2lkLAomIzQzOwkJCQkJCSAgICAgbGU2NF90b19jcHUoaGRyLSZndDttc2dfbnVtKSk7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBFTklDX01CT1hfVkZfUkVHSVNURVJfUkVRVUVTVDoKJiM0MzsJCWVyciA9IGVuaWNfbWJveF9wZl9oYW5kbGVfcmVnaXN0ZXIoZW5pYywgcGF5bG9hZCwgdmZfaWQsCiYjNDM7CQkJCQkJICAgbGU2NF90b19jcHUoaGRyLSZndDttc2dfbnVtKSk7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBFTklDX01CT1hfVkZfVU5SRUdJU1RFUl9SRVFVRVNUOgomIzQzOwkJZXJyID0gZW5pY19tYm94X3BmX2hhbmRsZV91bnJlZ2lzdGVyKGVuaWMsIHBheWxvYWQsIHZmX2lkLAomIzQzOwkJCQkJCSAgICAgbGU2NF90b19jcHUoaGRyLSZndDttc2dfbnVtKSk7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBFTklDX01CT1hfUEZfTElOS19TVEFURV9BQ0s6IHsKJiM0MzsJCXN0cnVjdCBlbmljX21ib3hfcGZfbGlua19zdGF0ZV9hY2tfbXNnICphY2sgPSBwYXlsb2FkOwomIzQzOwomIzQzOwkJaWYgKG1zZ19sZW4gJmx0OyBzaXplb2YoKmhkcikgJiM0Mzsgc2l6ZW9mKCphY2spKQomIzQzOwkJCWJyZWFrOwomIzQzOwkJaWYgKGxlMTZfdG9fY3B1KGFjay0mZ3Q7YWNrLnJldF9tYWpvcikgJmFtcDsmYW1wOyBuZXRfcmF0ZWxpbWl0KCkpCiYjNDM7CQkJbmV0ZGV2X3dhcm4oZW5pYy0mZ3Q7bmV0ZGV2LAomIzQzOwkJCQkgICAgJiMzNDtNQk9YOiBWRiAldSBsaW5rIHN0YXRlIEFDSyBlcnJvciAldS8ldVxuJiMzNDssCiYjNDM7CQkJCSAgICB2Zl9pZCwKJiM0MzsJCQkJICAgIGxlMTZfdG9fY3B1KGFjay0mZ3Q7YWNrLnJldF9tYWpvciksCiYjNDM7CQkJCSAgICBsZTE2X3RvX2NwdShhY2stJmd0O2Fjay5yZXRfbWlub3IpKTsKJiM0MzsJCWJyZWFrOwomIzQzOwl9CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQluZXRkZXZfZGJnKGVuaWMtJmd0O25ldGRldiwKJiM0MzsJCQkgICAmIzM0O01CT1g6IFBGIHVuaGFuZGxlZCBtc2cgdHlwZSAldSBmcm9tIFZGICV1XG4mIzM0OywKJiM0MzsJCQkgICBoZHItJmd0O21zZ190eXBlLCB2Zl9pZCk7CiYjNDM7CQllcnIgPSAtRU9QTk9UU1VQUDsKJiM0MzsJCWJyZWFrOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChlcnIgJmFtcDsmYW1wOyBuZXRfcmF0ZWxpbWl0KCkpCiYjNDM7CQluZXRkZXZfd2FybihlbmljLSZndDtuZXRkZXYsCiYjNDM7CQkJICAgICYjMzQ7TUJPWDogUEYgaGFuZGxlciBmb3IgbXNnIHR5cGUgJXUgZnJvbSBWRiAldSBmYWlsZWQ6ICVkXG4mIzM0OywKJiM0MzsJCQkgICAgaGRyLSZndDttc2dfdHlwZSwgdmZfaWQsIGVycik7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGVuaWNfbWJveF92Zl9oYW5kbGVfY2FwYWJpbGl0eV9yZXBseShzdHJ1Y3QgZW5pYyAqZW5pYywKJiM0MzsJCQkJCQkgdm9pZCAqcGF5bG9hZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBlbmljX21ib3hfdmZfY2FwYWJpbGl0eV9yZXBseV9tc2cgKnJlcGx5ID0gcGF5bG9hZDsKJiM0MzsKJiM0MzsJaWYgKGVuaWMtJmd0O21ib3hfZXhwZWN0ZWRfcmVwbHkgIT0gRU5JQ19NQk9YX1ZGX0NBUEFCSUxJVFlfUkVQTFkpIHsKJiM0MzsJCW5ldGRldl93YXJuKGVuaWMtJmd0O25ldGRldiwKJiM0MzsJCQkgICAgJiMzNDtNQk9YOiBzdGFsZSBjYXBhYmlsaXR5IHJlcGx5IChleHBlY3RlZCAldSksIGRyb3BcbiYjMzQ7LAomIzQzOwkJCSAgICBlbmljLSZndDttYm94X2V4cGVjdGVkX3JlcGx5KTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAobGUxNl90b19jcHUocmVwbHktJmd0O3JlcGx5LnJldF9tYWpvcikgPT0gMCkKJiM0MzsJCWVuaWMtJmd0O3BmX2NhcF92ZXJzaW9uID0gbGUzMl90b19jcHUocmVwbHktJmd0O3ZlcnNpb24pOwomIzQzOwllbHNlCiYjNDM7CQluZXRkZXZfd2FybihlbmljLSZndDtuZXRkZXYsCiYjNDM7CQkJICAgICYjMzQ7TUJPWDogUEYgcmVqZWN0ZWQgY2FwYWJpbGl0eSByZXF1ZXN0OiAldS8ldVxuJiMzNDssCiYjNDM7CQkJICAgIGxlMTZfdG9fY3B1KHJlcGx5LSZndDtyZXBseS5yZXRfbWFqb3IpLAomIzQzOwkJCSAgICBsZTE2X3RvX2NwdShyZXBseS0mZ3Q7cmVwbHkucmV0X21pbm9yKSk7CiYjNDM7CWNvbXBsZXRlKCZhbXA7ZW5pYy0mZ3Q7bWJveF9jb21wKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgZW5pY19tYm94X3ZmX2hhbmRsZV9yZWdpc3Rlcl9yZXBseShzdHJ1Y3QgZW5pYyAqZW5pYywKJiM0MzsJCQkJCSAgICAgICB2b2lkICpwYXlsb2FkKQomIzQzO3sKJiM0MzsJc3RydWN0IGVuaWNfbWJveF92Zl9yZWdpc3Rlcl9yZXBseV9tc2cgKnJlcGx5ID0gcGF5bG9hZDsKJiM0MzsKJiM0MzsJaWYgKGVuaWMtJmd0O21ib3hfZXhwZWN0ZWRfcmVwbHkgIT0gRU5JQ19NQk9YX1ZGX1JFR0lTVEVSX1JFUExZKSB7CiYjNDM7CQluZXRkZXZfd2FybihlbmljLSZndDtuZXRkZXYsCiYjNDM7CQkJICAgICYjMzQ7TUJPWDogc3RhbGUgcmVnaXN0ZXIgcmVwbHkgKGV4cGVjdGVkICV1KSwgZHJvcFxuJiMzNDssCiYjNDM7CQkJICAgIGVuaWMtJmd0O21ib3hfZXhwZWN0ZWRfcmVwbHkpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChsZTE2X3RvX2NwdShyZXBseS0mZ3Q7cmVwbHkucmV0X21ham9yKSkgewomIzQzOwkJbmV0ZGV2X3dhcm4oZW5pYy0mZ3Q7bmV0ZGV2LAomIzQzOwkJCSAgICAmIzM0O01CT1g6IFZGIHJlZ2lzdGVyIHJlamVjdGVkIGJ5IFBGOiAldS8ldVxuJiMzNDssCiYjNDM7CQkJICAgIGxlMTZfdG9fY3B1KHJlcGx5LSZndDtyZXBseS5yZXRfbWFqb3IpLAomIzQzOwkJCSAgICBsZTE2X3RvX2NwdShyZXBseS0mZ3Q7cmVwbHkucmV0X21pbm9yKSk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQllbmljLSZndDt2Zl9yZWdpc3RlcmVkID0gdHJ1ZTsKJiM0MzsJfQomIzQzOwljb21wbGV0ZSgmYW1wO2VuaWMtJmd0O21ib3hfY29tcCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGVuaWNfbWJveF92Zl9oYW5kbGVfdW5yZWdpc3Rlcl9yZXBseShzdHJ1Y3QgZW5pYyAqZW5pYywKJiM0MzsJCQkJCQkgdm9pZCAqcGF5bG9hZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBlbmljX21ib3hfdmZfcmVnaXN0ZXJfcmVwbHlfbXNnICpyZXBseSA9IHBheWxvYWQ7CiYjNDM7CiYjNDM7CWlmIChlbmljLSZndDttYm94X2V4cGVjdGVkX3JlcGx5ICE9IEVOSUNfTUJPWF9WRl9VTlJFR0lTVEVSX1JFUExZKSB7CiYjNDM7CQluZXRkZXZfd2FybihlbmljLSZndDtuZXRkZXYsCiYjNDM7CQkJICAgICYjMzQ7TUJPWDogc3RhbGUgdW5yZWdpc3RlciByZXBseSAoZXhwZWN0ZWQgJXUpLCBkcm9wXG4mIzM0OywKJiM0MzsJCQkgICAgZW5pYy0mZ3Q7bWJveF9leHBlY3RlZF9yZXBseSk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKGxlMTZfdG9fY3B1KHJlcGx5LSZndDtyZXBseS5yZXRfbWFqb3IpKSB7CiYjNDM7CQluZXRkZXZfd2FybihlbmljLSZndDtuZXRkZXYsCiYjNDM7CQkJICAgICYjMzQ7TUJPWDogVkYgdW5yZWdpc3RlciByZWplY3RlZCBieSBQRjogJXUvJXVcbiYjMzQ7LAomIzQzOwkJCSAgICBsZTE2X3RvX2NwdShyZXBseS0mZ3Q7cmVwbHkucmV0X21ham9yKSwKJiM0MzsJCQkgICAgbGUxNl90b19jcHUocmVwbHktJmd0O3JlcGx5LnJldF9taW5vcikpOwomIzQzOwl9IGVsc2UgewomIzQzOwkJZW5pYy0mZ3Q7dmZfcmVnaXN0ZXJlZCA9IGZhbHNlOwomIzQzOwl9CiYjNDM7CWNvbXBsZXRlKCZhbXA7ZW5pYy0mZ3Q7bWJveF9jb21wKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgZW5pY19tYm94X3ZmX2hhbmRsZV9saW5rX3N0YXRlKHN0cnVjdCBlbmljICplbmljLCB2b2lkICpwYXlsb2FkKQomIzQzO3sKJiM0MzsJc3RydWN0IGVuaWNfbWJveF9wZl9saW5rX3N0YXRlX25vdGlmX21zZyAqbm90aWYgPSBwYXlsb2FkOwomIzQzOwlzdHJ1Y3QgZW5pY19tYm94X3BmX2xpbmtfc3RhdGVfYWNrX21zZyBhY2sgPSB7fTsKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJc3dpdGNoIChsZTMyX3RvX2NwdShub3RpZi0mZ3Q7bGlua19zdGF0ZSkpIHsKJiM0MzsJY2FzZSBFTklDX01CT1hfTElOS19TVEFURV9FTkFCTEU6CiYjNDM7CQlpZiAoIW5ldGlmX2NhcnJpZXJfb2soZW5pYy0mZ3Q7bmV0ZGV2KSkKJiM0MzsJCQluZXRpZl9jYXJyaWVyX29uKGVuaWMtJmd0O25ldGRldik7CiYjNDM7CQluZXRkZXZfZGJnKGVuaWMtJmd0O25ldGRldiwgJiMzNDtNQk9YOiBsaW5rIHN0YXRlIC0mZ3Q7IFVQXG4mIzM0Oyk7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBFTklDX01CT1hfTElOS19TVEFURV9ESVNBQkxFOgomIzQzOwkJaWYgKG5ldGlmX2NhcnJpZXJfb2soZW5pYy0mZ3Q7bmV0ZGV2KSkKJiM0MzsJCQluZXRpZl9jYXJyaWVyX29mZihlbmljLSZndDtuZXRkZXYpOwomIzQzOwkJbmV0ZGV2X2RiZyhlbmljLSZndDtuZXRkZXYsICYjMzQ7TUJPWDogbGluayBzdGF0ZSAtJmd0OyBET1dOXG4mIzM0Oyk7CiYjNDM7CQlicmVhazsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCW5ldGRldl93YXJuKGVuaWMtJmd0O25ldGRldiwgJiMzNDtNQk9YOiB1bmtub3duIGxpbmsgc3RhdGUgJXVcbiYjMzQ7LAomIzQzOwkJCSAgICBsZTMyX3RvX2NwdShub3RpZi0mZ3Q7bGlua19zdGF0ZSkpOwomIzQzOwkJYWNrLmFjay5yZXRfbWFqb3IgPSBjcHVfdG9fbGUxNihFTklDX01CT1hfRVJSX0dFTkVSSUMpOwomIzQzOwkJYnJlYWs7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZXJyID0gZW5pY19tYm94X3NlbmRfbXNnKGVuaWMsIEVOSUNfTUJPWF9QRl9MSU5LX1NUQVRFX0FDSywKJiM0MzsJCQkJIEVOSUNfTUJPWF9EU1RfUEYsICZhbXA7YWNrLCBzaXplb2YoYWNrKSk7CiYjNDM7CWlmIChlcnIgJmFtcDsmYW1wOyBuZXRfcmF0ZWxpbWl0KCkpCiYjNDM7CQluZXRkZXZfd2FybihlbmljLSZndDtuZXRkZXYsCiYjNDM7CQkJICAgICYjMzQ7TUJPWDogZmFpbGVkIHRvIHNlbmQgbGluayBzdGF0ZSBBQ0s6ICVkXG4mIzM0OywgZXJyKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgZW5pY19tYm94X3ZmX3BheWxvYWRfb2soc3RydWN0IGVuaWMgKmVuaWMsIHU4IG1zZ190eXBlLAomIzQzOwkJCQkgICAgdTE2IHBheWxvYWRfbGVuLCBzaXplX3QgbWluX2xlbikKJiM0Mzt7CiYjNDM7CWlmIChwYXlsb2FkX2xlbiAmbHQ7IG1pbl9sZW4pIHsKJiM0MzsJCW5ldGRldl93YXJuKGVuaWMtJmd0O25ldGRldiwKJiM0MzsJCQkgICAgJiMzNDtNQk9YOiBzaG9ydCBwYXlsb2FkIGZvciB0eXBlICV1ICgldSAmbHQ7ICV6dSlcbiYjMzQ7LAomIzQzOwkJCSAgICBtc2dfdHlwZSwgcGF5bG9hZF9sZW4sIG1pbl9sZW4pOwomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwl9CiYjNDM7CXJldHVybiB0cnVlOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBlbmljX21ib3hfdmZfcHJvY2Vzc19tc2coc3RydWN0IGVuaWMgKmVuaWMsCiYjNDM7CQkJCSAgICAgc3RydWN0IGVuaWNfbWJveF9oZHIgKmhkciwgdm9pZCAqcGF5bG9hZCwKJiM0MzsJCQkJICAgICB1MTYgcGF5bG9hZF9sZW4pCiYjNDM7ewomIzQzOwlzd2l0Y2ggKGhkci0mZ3Q7bXNnX3R5cGUpIHsKJiM0MzsJY2FzZSBFTklDX01CT1hfVkZfQ0FQQUJJTElUWV9SRVBMWTogewomIzQzOwkJc2l6ZV90IGV4cCA9IHNpemVvZihzdHJ1Y3QgZW5pY19tYm94X3ZmX2NhcGFiaWxpdHlfcmVwbHlfbXNnKTsKJiM0MzsKJiM0MzsJCWlmICghZW5pY19tYm94X3ZmX3BheWxvYWRfb2soZW5pYywgaGRyLSZndDttc2dfdHlwZSwKJiM0MzsJCQkJCSAgICAgcGF5bG9hZF9sZW4sIGV4cCkpCiYjNDM7CQkJcmV0dXJuOwomIzQzOwkJZW5pY19tYm94X3ZmX2hhbmRsZV9jYXBhYmlsaXR5X3JlcGx5KGVuaWMsIHBheWxvYWQpOwomIzQzOwkJYnJlYWs7CiYjNDM7CX0KJiM0MzsJY2FzZSBFTklDX01CT1hfVkZfUkVHSVNURVJfUkVQTFk6IHsKJiM0MzsJCXNpemVfdCBleHAgPSBzaXplb2Yoc3RydWN0IGVuaWNfbWJveF92Zl9yZWdpc3Rlcl9yZXBseV9tc2cpOwomIzQzOwomIzQzOwkJaWYgKCFlbmljX21ib3hfdmZfcGF5bG9hZF9vayhlbmljLCBoZHItJmd0O21zZ190eXBlLAomIzQzOwkJCQkJICAgICBwYXlsb2FkX2xlbiwgZXhwKSkKJiM0MzsJCQlyZXR1cm47CiYjNDM7CQllbmljX21ib3hfdmZfaGFuZGxlX3JlZ2lzdGVyX3JlcGx5KGVuaWMsIHBheWxvYWQpOwomIzQzOwkJYnJlYWs7CiYjNDM7CX0KJiM0MzsJY2FzZSBFTklDX01CT1hfVkZfVU5SRUdJU1RFUl9SRVBMWTogewomIzQzOwkJc2l6ZV90IGV4cCA9IHNpemVvZihzdHJ1Y3QgZW5pY19tYm94X3ZmX3JlZ2lzdGVyX3JlcGx5X21zZyk7CiYjNDM7CiYjNDM7CQlpZiAoIWVuaWNfbWJveF92Zl9wYXlsb2FkX29rKGVuaWMsIGhkci0mZ3Q7bXNnX3R5cGUsCiYjNDM7CQkJCQkgICAgIHBheWxvYWRfbGVuLCBleHApKQomIzQzOwkJCXJldHVybjsKJiM0MzsJCWVuaWNfbWJveF92Zl9oYW5kbGVfdW5yZWdpc3Rlcl9yZXBseShlbmljLCBwYXlsb2FkKTsKJiM0MzsJCWJyZWFrOwomIzQzOwl9CiYjNDM7CWNhc2UgRU5JQ19NQk9YX1BGX0xJTktfU1RBVEVfTk9USUY6IHsKJiM0MzsJCXNpemVfdCBleHAgPSBzaXplb2Yoc3RydWN0IGVuaWNfbWJveF9wZl9saW5rX3N0YXRlX25vdGlmX21zZyk7CiYjNDM7CiYjNDM7CQlpZiAoIWVuaWNfbWJveF92Zl9wYXlsb2FkX29rKGVuaWMsIGhkci0mZ3Q7bXNnX3R5cGUsCiYjNDM7CQkJCQkgICAgIHBheWxvYWRfbGVuLCBleHApKQomIzQzOwkJCXJldHVybjsKJiM0MzsJCWVuaWNfbWJveF92Zl9oYW5kbGVfbGlua19zdGF0ZShlbmljLCBwYXlsb2FkKTsKJiM0MzsJCWJyZWFrOwomIzQzOwl9CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQluZXRkZXZfZGJnKGVuaWMtJmd0O25ldGRldiwKJiM0MzsJCQkgICAmIzM0O01CT1g6IFZGIHVuaGFuZGxlZCBtc2cgdHlwZSAldVxuJiMzNDssCiYjNDM7CQkJICAgaGRyLSZndDttc2dfdHlwZSk7CiYjNDM7CQlicmVhazsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBlbmljX21ib3hfcmVjdl9oYW5kbGVyKHN0cnVjdCBlbmljICplbmljLCB2b2lkICpidWYsCiYjNDM7CQkJCSAgIHVuc2lnbmVkIGludCBsZW4pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZW5pY19tYm94X2hkciAqaGRyID0gYnVmOwomIzQzOwl2b2lkICpwYXlsb2FkOwomIzQzOwl1MTYgbXNnX2xlbjsKJiM0MzsKJiM0MzsJaWYgKGxlbiAmbHQ7IHNpemVvZigqaGRyKSkgewomIzQzOwkJaWYgKG5ldF9yYXRlbGltaXQoKSkKJiM0MzsJCQluZXRkZXZfd2FybihlbmljLSZndDtuZXRkZXYsCiYjNDM7CQkJCSAgICAmIzM0O01CT1g6IHRydW5jYXRlZCBtZXNzYWdlIChsZW4gJXUgJmx0OyAlenUpXG4mIzM0OywKJiM0MzsJCQkJICAgIGxlbiwgc2l6ZW9mKCpoZHIpKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoaGRyLSZndDttc2dfdHlwZSAmZ3Q7PSBFTklDX01CT1hfTUFYKSB7CiYjNDM7CQlpZiAobmV0X3JhdGVsaW1pdCgpKQomIzQzOwkJCW5ldGRldl93YXJuKGVuaWMtJmd0O25ldGRldiwKJiM0MzsJCQkJICAgICYjMzQ7TUJPWDogdW5rbm93biBtc2cgdHlwZSAldVxuJiMzNDssCiYjNDM7CQkJCSAgICBoZHItJmd0O21zZ190eXBlKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwltc2dfbGVuID0gbGUxNl90b19jcHUoaGRyLSZndDttc2dfbGVuKTsKJiM0MzsJaWYgKG1zZ19sZW4gJmx0OyBzaXplb2YoKmhkcikgfHwgbXNnX2xlbiAmZ3Q7IGxlbikgewomIzQzOwkJaWYgKG5ldF9yYXRlbGltaXQoKSkKJiM0MzsJCQluZXRkZXZfd2FybihlbmljLSZndDtuZXRkZXYsCiYjNDM7CQkJCSAgICAmIzM0O01CT1g6IGludmFsaWQgbXNnX2xlbiAldSAoYnVmIGxlbiAldSlcbiYjMzQ7LAomIzQzOwkJCQkgICAgbXNnX2xlbiwgbGVuKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwluZXRkZXZfZGJnKGVuaWMtJmd0O25ldGRldiwKJiM0MzsJCSAgICYjMzQ7TUJPWCByZWN2OiB0eXBlICV1IGZyb20gdm5pYyAldSBsZW4gJXVcbiYjMzQ7LAomIzQzOwkJICAgaGRyLSZndDttc2dfdHlwZSwgbGUxNl90b19jcHUoaGRyLSZndDtzcmNfdm5pY19pZCksIG1zZ19sZW4pOwomIzQzOwomIzQzOwlwYXlsb2FkID0gYnVmICYjNDM7IHNpemVvZigqaGRyKTsKJiM0MzsKJiM0MzsJaWYgKGVuaWMtJmd0O3ZmX3N0YXRlKSB7CiYjNDM7CQllbmljX21ib3hfcGZfcHJvY2Vzc19tc2coZW5pYywgaGRyLCBwYXlsb2FkKTsKJiM0MzsJfSBlbHNlIGlmIChsZTE2X3RvX2NwdShoZHItJmd0O3NyY192bmljX2lkKSA9PSBFTklDX01CT1hfRFNUX1BGKSB7CiYjNDM7CQkvKiBzcmNfdm5pY19pZCB3YXMgb3ZlcndyaXR0ZW4gZnJvbSB0aGUgaGFyZHdhcmUtdmVyaWZpZWQgQ1EKJiM0MzsJCSAqIFZMQU4gc2VuZGVyIGZpZWxkLCBzbyBhIFZGIG9ubHkgYWNjZXB0cyBtZXNzYWdlcyB0aGF0IHRoZQomIzQzOwkJICogYWRhcHRlciBhdHRyaWJ1dGVzIHRvIHRoZSBQRi4gIEl0cyBzb2xlIGFkbWluLWNoYW5uZWwgcGVlciBpcwomIzQzOwkJICogdGhlIFBGOyBkcm9wIGFueXRoaW5nIGVsc2UgYXMgYSBzcG9vZmVkIG5vdGlmaWNhdGlvbi4KJiM0MzsJCSAqLwomIzQzOwkJZW5pY19tYm94X3ZmX3Byb2Nlc3NfbXNnKGVuaWMsIGhkciwgcGF5bG9hZCwKJiM0MzsJCQkJCSBtc2dfbGVuIC0gKHUxNilzaXplb2YoKmhkcikpOwomIzQzOwl9IGVsc2UgaWYgKG5ldF9yYXRlbGltaXQoKSkgewomIzQzOwkJbmV0ZGV2X3dhcm4oZW5pYy0mZ3Q7bmV0ZGV2LAomIzQzOwkJCSAgICAmIzM0O01CT1g6IFZGIGRyb3BwaW5nIG5vbi1QRiBtZXNzYWdlIGZyb20gdm5pYyAldVxuJiMzNDssCiYjNDM7CQkJICAgIGxlMTZfdG9fY3B1KGhkci0mZ3Q7c3JjX3ZuaWNfaWQpKTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztpbnQgZW5pY19tYm94X3ZmX2NhcGFiaWxpdHlfY2hlY2soc3RydWN0IGVuaWMgKmVuaWMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZW5pY19tYm94X3ZmX2NhcGFiaWxpdHlfbXNnIHJlcSA9IHt9OwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwllbmljLSZndDtwZl9jYXBfdmVyc2lvbiA9IDA7CiYjNDM7CXJlaW5pdF9jb21wbGV0aW9uKCZhbXA7ZW5pYy0mZ3Q7bWJveF9jb21wKTsKJiM0MzsJZW5pYy0mZ3Q7bWJveF9leHBlY3RlZF9yZXBseSA9IEVOSUNfTUJPWF9WRl9DQVBBQklMSVRZX1JFUExZOwomIzQzOwlyZXEudmVyc2lvbiA9IGNwdV90b19sZTMyKEVOSUNfTUJPWF9DQVBfVkVSU0lPTl8xKTsKJiM0MzsKJiM0MzsJZXJyID0gZW5pY19tYm94X3NlbmRfbXNnKGVuaWMsIEVOSUNfTUJPWF9WRl9DQVBBQklMSVRZX1JFUVVFU1QsCiYjNDM7CQkJCSBFTklDX01CT1hfRFNUX1BGLCAmYW1wO3JlcSwgc2l6ZW9mKHJlcSkpOwomIzQzOwlpZiAoZXJyKSB7CiYjNDM7CQllbmljLSZndDttYm94X2V4cGVjdGVkX3JlcGx5ID0gMDsKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZXJyID0gZW5pY19tYm94X3dhaXRfcmVwbHkoZW5pYywgMzAwMCk7CiYjNDM7CWVuaWMtJmd0O21ib3hfZXhwZWN0ZWRfcmVwbHkgPSAwOwomIzQzOwlpZiAoZXJyKSB7CiYjNDM7CQluZXRkZXZfd2FybihlbmljLSZndDtuZXRkZXYsCiYjNDM7CQkJICAgICYjMzQ7TUJPWDogbm8gY2FwYWJpbGl0eSByZXBseSBmcm9tIFBGXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gZXJyOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChlbmljLSZndDtwZl9jYXBfdmVyc2lvbiAmbHQ7IEVOSUNfTUJPWF9DQVBfVkVSU0lPTl8xKSB7CiYjNDM7CQluZXRkZXZfd2FybihlbmljLSZndDtuZXRkZXYsCiYjNDM7CQkJICAgICYjMzQ7TUJPWDogUEYgdmVyc2lvbiAldSB0b28gb2xkXG4mIzM0OywKJiM0MzsJCQkgICAgZW5pYy0mZ3Q7cGZfY2FwX3ZlcnNpb24pOwomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztpbnQgZW5pY19tYm94X3ZmX3JlZ2lzdGVyKHN0cnVjdCBlbmljICplbmljKQomIzQzO3sKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJZW5pYy0mZ3Q7dmZfcmVnaXN0ZXJlZCA9IGZhbHNlOwomIzQzOwlyZWluaXRfY29tcGxldGlvbigmYW1wO2VuaWMtJmd0O21ib3hfY29tcCk7CiYjNDM7CWVuaWMtJmd0O21ib3hfZXhwZWN0ZWRfcmVwbHkgPSBFTklDX01CT1hfVkZfUkVHSVNURVJfUkVQTFk7CiYjNDM7CiYjNDM7CWVyciA9IGVuaWNfbWJveF9zZW5kX21zZyhlbmljLCBFTklDX01CT1hfVkZfUkVHSVNURVJfUkVRVUVTVCwKJiM0MzsJCQkJIEVOSUNfTUJPWF9EU1RfUEYsIE5VTEwsIDApOwomIzQzOwlpZiAoZXJyKSB7CiYjNDM7CQllbmljLSZndDttYm94X2V4cGVjdGVkX3JlcGx5ID0gMDsKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZXJyID0gZW5pY19tYm94X3dhaXRfcmVwbHkoZW5pYywgMzAwMCk7CiYjNDM7CWVuaWMtJmd0O21ib3hfZXhwZWN0ZWRfcmVwbHkgPSAwOwomIzQzOwlpZiAoZXJyKSB7CiYjNDM7CQluZXRkZXZfd2FybihlbmljLSZndDtuZXRkZXYsCiYjNDM7CQkJICAgICYjMzQ7TUJPWDogVkYgcmVnaXN0cmF0aW9uIHdpdGggUEYgdGltZWQgb3V0XG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gZXJyOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICghZW5pYy0mZ3Q7dmZfcmVnaXN0ZXJlZCkKJiM0MzsJCXJldHVybiAtRU5PREVWOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IGVuaWNfbWJveF92Zl91bnJlZ2lzdGVyKHN0cnVjdCBlbmljICplbmljKQomIzQzO3sKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJaWYgKCFlbmljLSZndDt2Zl9yZWdpc3RlcmVkKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CXJlaW5pdF9jb21wbGV0aW9uKCZhbXA7ZW5pYy0mZ3Q7bWJveF9jb21wKTsKJiM0MzsJZW5pYy0mZ3Q7bWJveF9leHBlY3RlZF9yZXBseSA9IEVOSUNfTUJPWF9WRl9VTlJFR0lTVEVSX1JFUExZOwomIzQzOwomIzQzOwllcnIgPSBlbmljX21ib3hfc2VuZF9tc2coZW5pYywgRU5JQ19NQk9YX1ZGX1VOUkVHSVNURVJfUkVRVUVTVCwKJiM0MzsJCQkJIEVOSUNfTUJPWF9EU1RfUEYsIE5VTEwsIDApOwomIzQzOwlpZiAoZXJyKSB7CiYjNDM7CQllbmljLSZndDttYm94X2V4cGVjdGVkX3JlcGx5ID0gMDsKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZXJyID0gZW5pY19tYm94X3dhaXRfcmVwbHkoZW5pYywgMzAwMCk7CiYjNDM7CWVuaWMtJmd0O21ib3hfZXhwZWN0ZWRfcmVwbHkgPSAwOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsJaWYgKGVuaWMtJmd0O3ZmX3JlZ2lzdGVyZWQpCiYjNDM7CQlyZXR1cm4gLUVBQ0NFUzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgZW5pY19tYm94X2luaXQoc3RydWN0IGVuaWMgKmVuaWMpCiYjNDM7ewomIzQzOwkvKiBtYm94X2xvY2sgYW5kIG1ib3hfY29tcCBtdXN0IGJlIGluaXRpYWxpemVkIGV4YWN0bHkgb25jZSBwZXIKJiM0MzsJICogZGV2aWNlIGxpZmV0aW1lOyB0aGUgUEYgc3Jpb3ZfY29uZmlndXJlIHBhdGggY2FuIHJlLWVudGVyIHRoaXMKJiM0MzsJICogb24gZWFjaCBlbmFibGUgY3ljbGUgd2hlcmUgdGhlc2UgcHJpbWl0aXZlcyBhcmUgYWxyZWFkeSBzZXQgdXAuCiYjNDM7CSAqLwomIzQzOwlpZiAoIWVuaWMtJmd0O21ib3hfaW5pdGlhbGl6ZWQpIHsKJiM0MzsJCW11dGV4X2luaXQoJmFtcDtlbmljLSZndDttYm94X2xvY2spOwomIzQzOwkJaW5pdF9jb21wbGV0aW9uKCZhbXA7ZW5pYy0mZ3Q7bWJveF9jb21wKTsKJiM0MzsJCWVuaWMtJmd0O21ib3hfaW5pdGlhbGl6ZWQgPSB0cnVlOwomIzQzOwl9IGVsc2UgewomIzQzOwkJcmVpbml0X2NvbXBsZXRpb24oJmFtcDtlbmljLSZndDttYm94X2NvbXApOwomIzQzOwl9CiYjNDM7CWVuaWMtJmd0O21ib3hfbXNnX251bSA9IDA7CiYjNDM7CWVuaWMtJmd0O2FkbWluX3JxX2hhbmRsZXIgPSBlbmljX21ib3hfcmVjdl9oYW5kbGVyOwomIzQzO30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19tYm94LmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfbWJveC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi4xNWUzMGVlMmIwZWQ5NQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19tYm94LmgKQEAgLTAsMCAmIzQzOzEsOTUgQEAKJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovCiYjNDM7LyogQ29weXJpZ2h0IDIwMjUgQ2lzY28gU3lzdGVtcywgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gKi8KJiM0MzsKJiM0MzsjaWZuZGVmIF9FTklDX01CT1hfSF8KJiM0MzsjZGVmaW5lIF9FTklDX01CT1hfSF8KJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvYml0cy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC90eXBlcy5oJmd0OwomIzQzOwomIzQzOy8qCiYjNDM7ICogTWFpbGJveCBwcm90b2NvbCBmb3IgUEYtVkYgY29tbXVuaWNhdGlvbiBvdmVyIHRoZSBhZG1pbiBjaGFubmVsLgomIzQzOyAqCiYjNDM7ICogRXZlbiBudW1iZXJzIGFyZSByZXF1ZXN0cywgb2RkIG51bWJlcnMgYXJlIHJlcGxpZXMvYWNrcy4KJiM0MzsgKiBUaGUgcHJlZml4IGluZGljYXRlcyB0aGUgaW5pdGlhdG9yOiBWRl8gPSBWRi1pbml0aWF0ZWQsIFBGXyA9IFBGLWluaXRpYXRlZC4KJiM0MzsgKi8KJiM0MztlbnVtIGVuaWNfbWJveF9tc2dfdHlwZSB7CiYjNDM7CUVOSUNfTUJPWF9WRl9DQVBBQklMSVRZX1JFUVVFU1QJCT0gMCwKJiM0MzsJRU5JQ19NQk9YX1ZGX0NBUEFCSUxJVFlfUkVQTFkJCT0gMSwKJiM0MzsJRU5JQ19NQk9YX1ZGX1JFR0lTVEVSX1JFUVVFU1QJCT0gMiwKJiM0MzsJRU5JQ19NQk9YX1ZGX1JFR0lTVEVSX1JFUExZCQk9IDMsCiYjNDM7CUVOSUNfTUJPWF9WRl9VTlJFR0lTVEVSX1JFUVVFU1QJCT0gNCwKJiM0MzsJRU5JQ19NQk9YX1ZGX1VOUkVHSVNURVJfUkVQTFkJCT0gNSwKJiM0MzsJRU5JQ19NQk9YX1BGX0xJTktfU1RBVEVfTk9USUYJCT0gNiwKJiM0MzsJRU5JQ19NQk9YX1BGX0xJTktfU1RBVEVfQUNLCQk9IDcsCiYjNDM7CUVOSUNfTUJPWF9NQVgKJiM0Mzt9OwomIzQzOwomIzQzO3N0cnVjdCBlbmljX21ib3hfaGRyIHsKJiM0MzsJX19sZTE2IHNyY192bmljX2lkOwomIzQzOwlfX2xlMTYgZHN0X3ZuaWNfaWQ7CiYjNDM7CXU4IG1zZ190eXBlOwomIzQzOwl1OCBmbGFnczsKJiM0MzsJX19sZTE2IG1zZ19sZW47CiYjNDM7CV9fbGU2NCBtc2dfbnVtOwomIzQzO307CiYjNDM7CiYjNDM7c3RydWN0IGVuaWNfbWJveF9nZW5lcmljX3JlcGx5IHsKJiM0MzsJX19sZTE2IHJldF9tYWpvcjsKJiM0MzsJX19sZTE2IHJldF9taW5vcjsKJiM0Mzt9OwomIzQzOwomIzQzOyNkZWZpbmUgRU5JQ19NQk9YX0VSUl9HRU5FUklDCQlCSVQoMCkKJiM0MzsjZGVmaW5lIEVOSUNfTUJPWF9FUlJfVkZfTk9UX1JFR0lTVEVSRUQJQklUKDEpCiYjNDM7I2RlZmluZSBFTklDX01CT1hfRVJSX01TR19OT1RfU1VQUE9SVEVECUJJVCgyKQomIzQzOwomIzQzOy8qIEVOSUNfTUJPWF9WRl9DQVBBQklMSVRZX1JFUVVFU1QgLyBfUkVQTFkgKi8KJiM0MzsjZGVmaW5lIEVOSUNfTUJPWF9DQVBfVkVSU0lPTl8wCQkwCiYjNDM7I2RlZmluZSBFTklDX01CT1hfQ0FQX1ZFUlNJT05fMQkJMQomIzQzOwomIzQzO3N0cnVjdCBlbmljX21ib3hfdmZfY2FwYWJpbGl0eV9tc2cgewomIzQzOwlfX2xlMzIgdmVyc2lvbjsKJiM0MzsJX19sZTMyIHJlc2VydmVkWzMyXTsKJiM0Mzt9OwomIzQzOwomIzQzOy8qIFRoZSBlbWJlZGRlZCBlbmljX21ib3hfZ2VuZXJpY19yZXBseSBoYXMgMi1ieXRlIGFsaWdubWVudCwgYnV0IHRoZQomIzQzOyAqIF9fbGUzMiBtZW1iZXJzIGdpdmUgdGhpcyBzdHJ1Y3QgNC1ieXRlIG5hdHVyYWwgYWxpZ25tZW50LiAgUmVjZWl2ZQomIzQzOyAqIGJ1ZmZlcnMgY29tZSBmcm9tIGttYWxsb2MgKCZndDs9IDgtYnl0ZSBhbGlnbmVkKSwgc28gdGhlcmUgaXMgbm8KJiM0MzsgKiBtaXNhbGlnbmVkIGFjY2VzcyByaXNrIHdoZW4gY2FzdGluZyBmcm9tIHRoZSByZWNlaXZlIGJ1ZmZlci4KJiM0MzsgKi8KJiM0MztzdHJ1Y3QgZW5pY19tYm94X3ZmX2NhcGFiaWxpdHlfcmVwbHlfbXNnIHsKJiM0MzsJc3RydWN0IGVuaWNfbWJveF9nZW5lcmljX3JlcGx5IHJlcGx5OwomIzQzOwlfX2xlMzIgdmVyc2lvbjsKJiM0MzsJX19sZTMyIHJlc2VydmVkWzMyXTsKJiM0Mzt9OwomIzQzOwomIzQzOy8qIEVOSUNfTUJPWF9WRl9SRUdJU1RFUiAvIF9VTlJFR0lTVEVSICovCiYjNDM7c3RydWN0IGVuaWNfbWJveF92Zl9yZWdpc3Rlcl9yZXBseV9tc2cgewomIzQzOwlzdHJ1Y3QgZW5pY19tYm94X2dlbmVyaWNfcmVwbHkgcmVwbHk7CiYjNDM7fTsKJiM0MzsKJiM0MzsvKiBFTklDX01CT1hfUEZfTElOS19TVEFURV9OT1RJRiAvIF9BQ0sgKi8KJiM0MzsjZGVmaW5lIEVOSUNfTUJPWF9MSU5LX1NUQVRFX0RJU0FCTEUJMAomIzQzOyNkZWZpbmUgRU5JQ19NQk9YX0xJTktfU1RBVEVfRU5BQkxFCTEKJiM0MzsKJiM0MztzdHJ1Y3QgZW5pY19tYm94X3BmX2xpbmtfc3RhdGVfbm90aWZfbXNnIHsKJiM0MzsJX19sZTMyIGxpbmtfc3RhdGU7CiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgZW5pY19tYm94X3BmX2xpbmtfc3RhdGVfYWNrX21zZyB7CiYjNDM7CXN0cnVjdCBlbmljX21ib3hfZ2VuZXJpY19yZXBseSBhY2s7CiYjNDM7fTsKJiM0MzsKJiM0MzsjZGVmaW5lIEVOSUNfTUJPWF9EU1RfUEYJMHhGRkZGCiYjNDM7CiYjNDM7c3RydWN0IGVuaWM7CiYjNDM7CiYjNDM7dm9pZCBlbmljX21ib3hfaW5pdChzdHJ1Y3QgZW5pYyAqZW5pYyk7CiYjNDM7aW50IGVuaWNfbWJveF9zZW5kX21zZyhzdHJ1Y3QgZW5pYyAqZW5pYywgdTggbXNnX3R5cGUsIHUxNiBkc3Rfdm5pY19pZCwKJiM0MzsJCSAgICAgICB2b2lkICpwYXlsb2FkLCB1MTYgcGF5bG9hZF9sZW4pOwomIzQzO2ludCBlbmljX21ib3hfc2VuZF9saW5rX3N0YXRlKHN0cnVjdCBlbmljICplbmljLCB1MTYgdmZfaWQsIHUzMiBsaW5rX3N0YXRlKTsKJiM0MztpbnQgZW5pY19tYm94X3ZmX2NhcGFiaWxpdHlfY2hlY2soc3RydWN0IGVuaWMgKmVuaWMpOwomIzQzO2ludCBlbmljX21ib3hfdmZfcmVnaXN0ZXIoc3RydWN0IGVuaWMgKmVuaWMpOwomIzQzO2ludCBlbmljX21ib3hfdmZfdW5yZWdpc3RlcihzdHJ1Y3QgZW5pYyAqZW5pYyk7CiYjNDM7CiYjNDM7I2VuZGlmIC8qIF9FTklDX01CT1hfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19wcC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX3BwLmMKaW5kZXggNDcyMGE5NTI3MjVkMDAuLjNmNjExZTI0MGMyNTZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfcHAuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfcHAuYwpAQCAtMjUsNiAmIzQzOzI1LDExIEBAIGludCBlbmljX2lzX3ZhbGlkX3BwX3ZmKHN0cnVjdCBlbmljICplbmljLCBpbnQgdmYsIGludCAqZXJyKQogCWlmICh2ZiAhPSBQT1JUX1NFTEZfVkYpIHsKICNpZmRlZiBDT05GSUdfUENJX0lPVgogCQlpZiAoZW5pY19zcmlvdl9lbmFibGVkKGVuaWMpKSB7CiYjNDM7CQkJLyogVjIgU1ItSU9WIHVzZXMgTUJPWCwgbm90IHBvcnQgcHJvZmlsZXMgKi8KJiM0MzsJCQlpZiAoZW5pYy0mZ3Q7dmZfdHlwZSA9PSBFTklDX1ZGX1RZUEVfVjIpIHsKJiM0MzsJCQkJKmVyciA9IC1FT1BOT1RTVVBQOwomIzQzOwkJCQlnb3RvIGVycl9vdXQ7CiYjNDM7CQkJfQogCQkJaWYgKHZmICZsdDsgMCB8fCB2ZiAmZ3Q7PSBlbmljLSZndDtudW1fdmZzKSB7CiAJCQkJKmVyciA9IC1FSU5WQUw7CiAJCQkJZ290byBlcnJfb3V0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX3Jlcy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX3Jlcy5jCmluZGV4IDJiNzU0NWQ2YTY3ZmRjLi43NGNkMmVlM2FmNWNiNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX3Jlcy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19yZXMuYwpAQCAtNTksNiAmIzQzOzU5LDcgQEAgaW50IGVuaWNfZ2V0X3ZuaWNfY29uZmlnKHN0cnVjdCBlbmljICplbmljKQogCUdFVF9DT05GSUcoaW50cl90aW1lcl91c2VjKTsKIAlHRVRfQ09ORklHKGxvb3BfdGFnKTsKIAlHRVRfQ09ORklHKG51bV9hcmZzKTsKJiM0MzsJR0VUX0NPTkZJRyhtcV9zdWJ2bmljX2NvdW50KTsKIAlHRVRfQ09ORklHKG1heF9ycV9yaW5nKTsKIAlHRVRfQ09ORklHKG1heF93cV9yaW5nKTsKIAlHRVRfQ09ORklHKG1heF9jcV9yaW5nKTsKQEAgLTIxMCw3ICYjNDM7MjExLDggQEAgdm9pZCBlbmljX2dldF9yZXNfY291bnRzKHN0cnVjdCBlbmljICplbmljKQogCQl2bmljX2Rldl9nZXRfcmVzX2NvdW50KGVuaWMtJmd0O3ZkZXYsIFJFU19UWVBFX0FETUlOX1JRKSAmZ3Q7PSAxICZhbXA7JmFtcDsKIAkJdm5pY19kZXZfZ2V0X3Jlc19jb3VudChlbmljLSZndDt2ZGV2LCBSRVNfVFlQRV9BRE1JTl9DUSkgJmd0Oz0KIAkJCUFSUkFZX1NJWkUoZW5pYy0mZ3Q7YWRtaW5fY3EpICZhbXA7JmFtcDsKLQkJdm5pY19kZXZfZ2V0X3Jlc19jb3VudChlbmljLSZndDt2ZGV2LCBSRVNfVFlQRV9TUklPVl9JTlRSKSAmZ3Q7PSAxOwomIzQzOwkJKGVuaWNfaXNfc3Jpb3ZfdmZfdjIoZW5pYykgfHwKJiM0MzsJCSB2bmljX2Rldl9nZXRfcmVzX2NvdW50KGVuaWMtJmd0O3ZkZXYsIFJFU19UWVBFX1NSSU9WX0lOVFIpICZndDs9IDEpOwogCiAJZGV2X2luZm8oZW5pY19nZXRfZGV2KGVuaWMpLAogCQkmIzM0O3ZOSUMgcmVzb3VyY2VzIGF2YWlsOiB3cSAlZCBycSAlZCBjcSAlZCBpbnRyICVkIGFkbWluICVzXG4mIzM0OywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvdm5pY19jcS5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy92bmljX2NxLmgKaW5kZXggZDQ2ZDRkMmVmNmJiYWMuLjM1ZmZhMzIzMDcxMzA1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL3ZuaWNfY3EuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL3ZuaWNfY3EuaApAQCAtNzYsNiAmIzQzOzc2LDE1IEBAIGludCB2bmljX2NxX2FsbG9jKHN0cnVjdCB2bmljX2RldiAqdmRldiwgc3RydWN0IHZuaWNfY3EgKmNxLCB1bnNpZ25lZCBpbnQgaW5kZXgsCiBpbnQgdm5pY19jcV9hbGxvY193aXRoX3R5cGUoc3RydWN0IHZuaWNfZGV2ICp2ZGV2LCBzdHJ1Y3Qgdm5pY19jcSAqY3EsCiAJCQkgICAgdW5zaWduZWQgaW50IGluZGV4LCB1bnNpZ25lZCBpbnQgZGVzY19jb3VudCwKIAkJCSAgICB1bnNpZ25lZCBpbnQgZGVzY19zaXplLCB1bnNpZ25lZCBpbnQgcmVzX3R5cGUpOwomIzQzOyNkZWZpbmUgVk5JQ19DUV9GQ19FTkFCTEUJMQomIzQzOyNkZWZpbmUgVk5JQ19DUV9GQ19ESVNBQkxFCTAKJiM0MzsjZGVmaW5lIFZOSUNfQ1FfQ09MT1JfRU5BQkxFCTEKJiM0MzsjZGVmaW5lIFZOSUNfQ1FfSU5UUl9FTkFCTEUJMQomIzQzOyNkZWZpbmUgVk5JQ19DUV9JTlRSX0RJU0FCTEUJMAomIzQzOyNkZWZpbmUgVk5JQ19DUV9FTlRSWV9FTkFCTEUJMQomIzQzOyNkZWZpbmUgVk5JQ19DUV9NU0dfRU5BQkxFCTEKJiM0MzsjZGVmaW5lIFZOSUNfQ1FfTVNHX0RJU0FCTEUJMAomIzQzOwogdm9pZCB2bmljX2NxX2luaXQoc3RydWN0IHZuaWNfY3EgKmNxLCB1bnNpZ25lZCBpbnQgZmxvd19jb250cm9sX2VuYWJsZSwKIAl1bnNpZ25lZCBpbnQgY29sb3JfZW5hYmxlLCB1bnNpZ25lZCBpbnQgY3FfaGVhZCwgdW5zaWduZWQgaW50IGNxX3RhaWwsCiAJdW5zaWduZWQgaW50IGNxX3RhaWxfY29sb3IsIHVuc2lnbmVkIGludCBpbnRlcnJ1cHRfZW5hYmxlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy92bmljX2RldmNtZC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy92bmljX2RldmNtZC5oCmluZGV4IDYwNWVmMTdmOTY3ZTRhLi45MGNhMDY2OTFlYmQ2MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy92bmljX2RldmNtZC5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvdm5pY19kZXZjbWQuaApAQCAtNDU1LDggJiM0Mzs0NTUsMTkgQEAgZW51bSB2bmljX2RldmNtZF9jbWQgewogCSAqLwogCUNNRF9DUV9FTlRSWV9TSVpFX1NFVCA9IF9DTURDKF9DTURfRElSX1dSSVRFLCBfQ01EX1ZUWVBFX0VORVQsIDkwKSwKIAomIzQzOwkvKgomIzQzOwkgKiBTZXQgcXVldWUgcGFpciB0eXBlIChhZG1pbiBvciBkYXRhKQomIzQzOwkgKiBpbjogKHUzMikgYTAgPSBxdWV1ZSBwYWlyIHR5cGUgKDAgPSBhZG1pbiwgMSA9IGRhdGEpCiYjNDM7CSAqIGluOiAodTMyKSBhMSA9IGVuYWJsZSAoMSkgLyBkaXNhYmxlICgwKQomIzQzOwkgKi8KJiM0MzsJQ01EX1FQX1RZUEVfU0VUID0gX0NNREMoX0NNRF9ESVJfV1JJVEUsIF9DTURfVlRZUEVfRU5FVCwgOTcpLAogfTsKIAomIzQzOyNkZWZpbmUgUVBfVFlQRV9BRE1JTgkwCiYjNDM7I2RlZmluZSBRUF9UWVBFX0RBVEEJMQomIzQzOyNkZWZpbmUgUVBfRU5BQkxFCTEKJiM0MzsjZGVmaW5lIFFQX0RJU0FCTEUJMAomIzQzOwogLyogQ01EX0VOQUJMRTIgZmxhZ3MgKi8KICNkZWZpbmUgQ01EX0VOQUJMRTJfU1RBTkRCWSAweDAKICNkZWZpbmUgQ01EX0VOQUJMRTJfQUNUSVZFICAweDEKQEAgLTczNCw2ICYjNDM7NzQ1LDggQEAgZW51bSB2aWNfZmVhdHVyZV90IHsKIAlWSUNfRkVBVFVSRV9WWExBTiwKIAlWSUNfRkVBVFVSRV9SRE1BLAogCVZJQ19GRUFUVVJFX1ZYTEFOX1BBVENILAomIzQzOwkvKiBzbG90IDMgcmVzZXJ2ZWQgZm9yIGZpcm13YXJlIFZJQ19GRUFUVVJFX1BUUCAqLwomIzQzOwlWSUNfRkVBVFVSRV9TUklPVgk9IDQsCiAJVklDX0ZFQVRVUkVfTUFYLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy92bmljX2VuZXQuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvdm5pY19lbmV0LmgKaW5kZXggOWU4ZTg2MjYyYTNmZWEuLjUxOWQyOTY5OTkwYjE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL3ZuaWNfZW5ldC5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvdm5pY19lbmV0LmgKQEAgLTIxLDcgJiM0MzsyMSw5IEBAIHN0cnVjdCB2bmljX2VuZXRfY29uZmlnIHsKIAl1MTYgbG9vcF90YWc7CiAJdTE2IHZmX3JxX2NvdW50OwogCXUxNiBudW1fYXJmczsKLQl1OCByZXNlcnZlZFs2Nl07CiYjNDM7CXU4IHJlc2VydmVkMVszMl07CiYjNDM7CXUxNiBtcV9zdWJ2bmljX2NvdW50OwomIzQzOwl1OCByZXNlcnZlZDJbMzJdOwogCXUzMiBtYXhfcnFfcmluZzsJLy8gTUFYIFJRIHJpbmcgc2l6ZQogCXUzMiBtYXhfd3FfcmluZzsJLy8gTUFYIFdRIHJpbmcgc2l6ZQogCXUzMiBtYXhfY3FfcmluZzsJLy8gTUFYIENRIHJpbmcgc2l6ZQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxODo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTE0NwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDYxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBc3Nlc3NpbmcgdGhlIEZ1enphYmlsaXR5IG9mIHRoZSBDaXNjbyBFTklDIERyaXZlciBQYXRjaCBTZXJpZXMqKgoKT2theSwgc28gd2UgaGF2ZSB0aGlzIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2luZyBhZG1pbiBjaGFubmVsIGFuZCBtYWlsYm94IHN1cHBvcnQgZm9yIHRoZSBDaXNjbyBFTklDIGRyaXZlci4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgd2hldGhlciB0aGlzIGlzIHByYWN0aWNhbGx5IGZ1enphYmxlLiBUaGUgY2hhbmdlcyBhcmUgZnVuY3Rpb25hbCwgdG91Y2hpbmcgY29yZSBkcml2ZXIgbG9naWMsIHdoaWNoIGlzIGdvb2QgZnJvbSBhIHZ1bG5lcmFiaWxpdHkgcGVyc3BlY3RpdmUsIGJ1dCBpZiBpdCYjMzk7cyBub3QgcmVhY2hhYmxlLCBpdCYjMzk7cyBhIHdhc3RlZCBlZmZvcnQuIFRoaXMgZHJpdmVyIGlzIHNwZWNpZmljYWxseSBmb3IgQ2lzY28gVklDIEV0aGVybmV0IE5JQ3MsIHdoaWNoIG1lYW5zIGl0IHJlbGllcyBvbiBzcGVjaWZpYyBoYXJkd2FyZS4gTXkgZmlyc3QgaW5zdGluY3QgaXMsIGNhbiB0aGlzIGV2ZW4gKmJlKiBoaXQgd2l0aGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBRRU1VLCBvciBldmVuIEdDRT8gUENJIGRyaXZlcnMgZm9yIG5pY2hlIGhhcmR3YXJlIGxpa2UgdGhpcyBhcmUgbm90b3Jpb3VzbHkgZGlmZmljdWx0IHRvIHRhcmdldCB3aXRob3V0IHNwZWNpZmljIGVtdWxhdGlvbi4KCk15IG1pbmQgaW1tZWRpYXRlbHkgcmFjZXM6IERvZXMgUUVNVSBldmVuICpoYXZlKiBhIENpc2NvIFZJQyBlbXVsYXRvcj8gSSBuZWVkIHRvIGNoZWNrLiBJZiB0aGVyZSYjMzk7cyBubyBzb2Z0d2FyZSBlbXVsYXRpb24sIGlzIHRoZXJlIGFub3RoZXIgZnV6emluZyBzdHJhdGVneT8gU3l6a2FsbGVyLCBvZiBjb3Vyc2UuIFN5emthbGxlciBpcyB0aGUgZ29sZCBzdGFuZGFyZC4gSSBrbm93IGl0IGhhcyBQQ0kgZnV6emluZyBjYXBhYmlsaXRpZXMg4oCTIHRocm91Z2ggdGhpbmdzIGxpa2UgdlBDSSwgb3IgcG90ZW50aWFsbHkgZXZlbiBlbXVsYXRpb24gb2YgZHJpdmVycyBsaWtlIGUxMDAwZS4gSG93ZXZlciwgSSBjYW4mIzM5O3QgaW1tZWRpYXRlbHkgcmVjYWxsIGlmIGl0IGhhcyBleHBsaWNpdCBzdXBwb3J0IGZvciBDaXNjbyBFTklDLgoKSG9sZCBvbiwgSSByZW1lbWJlciB0aGUgZnV6emluZyBndWlkZWxpbmVzIHN0YXRpbmcgJiMzNDtSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIC4uLiBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLi4uJiMzNDsgc28gcmVhY2hhYmlsaXR5IGlzIGtleS4KCk9rYXksIGJhY2sgdG8gU3l6a2FsbGVyLiBJdCBkb2VzIGhhdmUgYHN5el9wY2lgIGFuZCBzaW1pbGFyIG1lY2hhbmlzbXMsIHdoaWNoICpjb3VsZCogd29yayBpZiBpdCYjMzk7cyBhIFBDSSBkcml2ZXIuIFRoZSBjcml0aWNhbCB0aGluZyBpcyBjYW4gaXQgaW5qZWN0IGEgQ2lzY28gRU5JQyBkZXZpY2UgYXQgYWxsPyBXYWl0LCBTeXprYWxsZXIgKmRvZXMqIGhhdmUgYSBQQ0kgZnV6emVyLCB3aGljaCBpcyB0aGUga2V5IGhlcmUuIEl0IGNhbiBpbmplY3QgUENJIGRldmljZXMhIFRoaXMgbWVhbnMgaXQgY2FuIHRoZW9yZXRpY2FsbHkgZnV6eiAqYW55KiBQQ0kgZHJpdmVyIGJ5IHNpbXVsYXRpbmcgdGhlIFBDSSBkZXZpY2UgY29uZmlnIHNwYWNlIGFuZCBCQVJzLiBJcyB0aGF0IGFjdHVhbGx5IHRydWUgdGhvdWdoPyBJIG5lZWQgdG8gYmUgc3VyZS4gRG9lcyBpdCAqcmVhbGx5KiB3b3JrIGZvciBhbGwgUENJIGRyaXZlcnM/CgpJIG5lZWQgdG8gcXVpY2tseSBjb25maXJtIGEgZmV3IHRoaW5ncy4gRmlyc3QsIGlzIGBDT05GSUdfRU5JQ2AgZW5hYmxlZCB3aXRoaW4gc3l6a2FsbGVyJiMzOTtzIGNvbmZpZ3VyYXRpb24/IEkgc2hvdWxkIGxvb2sgZm9yIHRoaXMgaW4gdGhlaXIgY29uZmlndXJhdGlvbiBmaWxlcyB0byBiZSBzdXJlLiBJJiMzOTtsbCBzZWFyY2ggdGhlIGtlcm5lbCB0cmVlIHRvIGNvbmZpcm0gdGhhdCBgZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9gIGlzIGFjdHVhbGx5IGEgUENJIGRyaXZlciwgd2hpY2ggaXQgaXMsIHNvIHRoYXQmIzM5O3MgZ29vZC4gTm93LCBJIHNob3VsZCBsb29rIGluIHRoZSBgS2NvbmZpZ2AgZmlsZSBpbiB0aGF0IGRpcmVjdG9yeSB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyB0aGF0IEkgbmVlZCB0byBlbmFibGUgZm9yIEVOSUMuIGBDT05GSUdfRU5JQ2AgaXMgdGhlIG1haW4gb25lLiBJIGhhdmUgYSBnb29kIGZlZWxpbmcgYWJvdXQgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxODo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgRU5JQyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL0tjb25maWctNS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvS2NvbmZpZzo2OmNvbmZpZyBFTklDXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL0tjb25maWctNy1cdHRyaXN0YXRlIFwmIzM0O0Npc2NvIFZJQyBFdGhlcm5ldCBOSUMgU3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE4OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwNDE1CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgcXVpY2sgdGFrZSBvbiB0aGlzLgoKKipBbmFseXppbmcgdGhpcyBQQ0kgRHJpdmVyIFBhdGNoKioKCkFscmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsICYjMzQ7T2theSwgaXQmIzM5O3MgYSBQQ0kgZHJpdmVyLiYjMzQ7IEltbWVkaWF0ZWx5LCBJIHdhbnQgdG8gc2VlIGlmIHRoZXJlJiMzOTtzIGFueXRoaW5nIGVsc2UgaW4gdGhlIGNvbmZpZ3VyYXRpb24gdGhhdCBtaWdodCBiZSByZWxldmFudC4gTXkgZ3V0IGluc3RpbmN0IGlzIHRvIGxvb2sgZm9yIGRlcGVuZGVuY2llcy4gQWgsIGdvb2QsIHRoZSBwYXRjaCB1c2VzIGFuIGAjaWZkZWYgQ09ORklHX1BDSV9JT1ZgIGRpcmVjdGl2ZS4gVGhhdCYjMzk7cyB0aGUga2V5LiBUaGF0IHRlbGxzIG1lIHJpZ2h0IGF3YXkgdGhhdCBgQ09ORklHX1BDSV9JT1ZgIGlzIGEgKnJlcXVpcmVkKiBjb25maWd1cmF0aW9uIG9wdGlvbiBmb3IgdGhpcyBwYXRjaCB0byB3b3JrIGNvcnJlY3RseS4gTm93LCBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgaWYgdGhlcmUgYXJlICphbnkqIG90aGVyIGNvbmZpZyBvcHRpb25zIGJlaW5nIHVzZWQuIEkgd2lsbCBsb29rIGludG8gdGhhdCwgbmV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxODo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9NYWtlZmlsZS0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9NYWtlZmlsZToyOm9iai0kKENPTkZJR19FTklDKSA6PSBlbmljLm9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvTWFrZWZpbGUtMy1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfY2xzZi5jPTEwNz1zdHJ1Y3QgZW5pY19yZnNfZmx0cl9ub2RlICpodGJsX2ZsdHJfc2VhcmNoKHN0cnVjdCBlbmljICplbmljLCB1MTYgZmx0cl9pZClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfY2xzZi5jLTEyNC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19jbHNmLmM6MTI1OiNpZmRlZiBDT05GSUdfUkZTX0FDQ0VMXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfY2xzZi5jLTEyNi12b2lkIGVuaWNfZmxvd19tYXlfZXhwaXJlKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19jbHNmLmM9MTcxPWludCBlbmljX3J4X2Zsb3dfc3RlZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfY2xzZi5jLTI4NS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19jbHNmLmM6Mjg2OiNlbmRpZiAvKiBDT05GSUdfUkZTX0FDQ0VMICovXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX2Nsc2YuaD0xND1zdHJ1Y3QgZW5pY19yZnNfZmx0cl9ub2RlICpodGJsX2ZsdHJfc2VhcmNoKHN0cnVjdCBlbmljICplbmljLCB1MTYgZmx0cl9pZCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfY2xzZi5oLTE1LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX2Nsc2YuaDoxNjojaWZkZWYgQ09ORklHX1JGU19BQ0NFTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX2Nsc2YuaC0xNy1pbnQgZW5pY19yeF9mbG93X3N0ZWVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX2Nsc2YuaD0zMz1zdGF0aWMgaW5saW5lIHZvaWQgZW5pY19yZnNfdGltZXJfc3RvcChzdHJ1Y3QgZW5pYyAqZW5pYykge31cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19jbHNmLmg6MzQ6I2VuZGlmIC8qIENPTkZJR19SRlNfQUNDRUwgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19jbHNmLmgtMzUtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21haW4uYy00Mi0jaW5jbHVkZSBcdTAwM2NsaW51eC9udW1hLmhcdTAwM2VcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19tYWluLmM6NDM6I2lmZGVmIENPTkZJR19SRlNfQUNDRUxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19tYWluLmMtNDQtI2luY2x1ZGUgXHUwMDNjbGludXgvY3B1X3JtYXAuaFx1MDAzZVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19tYWluLmM9MzI0PWludCBlbmljX2lzX3ZhbGlkX3ZmKHN0cnVjdCBlbmljICplbmljLCBpbnQgdmYpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfbWFpbi5jLTMyNS17XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfbWFpbi5jOjMyNjojaWZkZWYgQ09ORklHX1BDSV9JT1ZcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19tYWluLmMtMzI3LVx0cmV0dXJuIHZmIFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgdmYgXHUwMDNjIGVuaWMtXHUwMDNlbnVtX3Zmcztcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfbWFpbi5jPTEzNTY9c3RhdGljIGludCBlbmljX3BvbGwoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19tYWluLmMtMTQxNi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19tYWluLmM6MTQxNzojaWZkZWYgQ09ORklHX1JGU19BQ0NFTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21haW4uYy0xNDE4LXN0YXRpYyB2b2lkIGVuaWNfZnJlZV9yeF9jcHVfcm1hcChzdHJ1Y3QgZW5pYyAqZW5pYylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfbWFpbi5jPTE0NDk9c3RhdGljIHZvaWQgZW5pY19zZXRfcnhfY3B1X3JtYXAoc3RydWN0IGVuaWMgKmVuaWMpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21haW4uYy0xNDUyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21haW4uYzoxNDUzOiNlbmRpZiAvKiBDT05GSUdfUkZTX0FDQ0VMICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfbWFpbi5jLTE0NTQtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21haW4uYz0xOTIzPXN0YXRpYyB2b2lkIGVuaWNfY2hhbmdlX210dV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfbWFpbi5jLTE5MzUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfbWFpbi5jOjE5MzY6I2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfbWFpbi5jLTE5Mzctc3RhdGljIHZvaWQgZW5pY19wb2xsX2NvbnRyb2xsZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfbWFpbi5jPTI1Mjg9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBlbmljX25ldGRldl9keW5hbWljX29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfbWFpbi5jLTI1NDItXHQubmRvX3NldF92Zl9tYWNcdFx0PSBlbmljX3NldF92Zl9tYWMsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfbWFpbi5jOjI1NDM6I2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfbWFpbi5jLTI1NDQtXHQubmRvX3BvbGxfY29udHJvbGxlclx0PSBlbmljX3BvbGxfY29udHJvbGxlcixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19tYWluLmMtMjU0NS0jZW5kaWZcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19tYWluLmM6MjU0NjojaWZkZWYgQ09ORklHX1JGU19BQ0NFTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21haW4uYy0yNTQ3LVx0Lm5kb19yeF9mbG93X3N0ZWVyXHQ9IGVuaWNfcnhfZmxvd19zdGVlcixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfbWFpbi5jPTI1NTI9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBlbmljX25ldGRldl9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21haW4uYy0yNTY2LVx0Lm5kb19zZXRfdmZfbWFjXHRcdD0gZW5pY19zZXRfdmZfbWFjLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21haW4uYzoyNTY3OiNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21haW4uYy0yNTY4LVx0Lm5kb19wb2xsX2NvbnRyb2xsZXJcdD0gZW5pY19wb2xsX2NvbnRyb2xsZXIsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfbWFpbi5jLTI1NjktI2VuZGlmXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfbWFpbi5jOjI1NzA6I2lmZGVmIENPTkZJR19SRlNfQUNDRUxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19tYWluLmMtMjU3MS1cdC5uZG9fcnhfZmxvd19zdGVlclx0PSBlbmljX3J4X2Zsb3dfc3RlZXIsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21haW4uYz0yNzYxPXN0YXRpYyB2b2lkIGVuaWNfaW91bm1hcChzdHJ1Y3QgZW5pYyAqZW5pYylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfbWFpbi5jLTI3NjktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfbWFpbi5jOjI3NzA6I2lmZGVmIENPTkZJR19QQ0lfSU9WXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfbWFpbi5jLTI3NzEtc3RhdGljIHZvaWQgZW5pY19zcmlvdl9kZXRlY3RfdmZfdHlwZShzdHJ1Y3QgZW5pYyAqZW5pYylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfbWFpbi5jPTI5NTA9c3RhdGljIGludCBlbmljX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19tYWluLmMtMjk1Ny1cdGludCBlcnI7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfbWFpbi5jOjI5NTg6I2lmZGVmIENPTkZJR19QQ0lfSU9WXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfbWFpbi5jLTI5NTktXHRpbnQgcG9zID0gMDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfbWFpbi5jLTMwNDQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfbWFpbi5jOjMwNDU6I2lmZGVmIENPTkZJR19QQ0lfSU9WXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfbWFpbi5jLTMwNDYtXHRlbmljX3NyaW92X2RldGVjdF92Zl90eXBlKGVuaWMpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19tYWluLmMtMzI3NS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19tYWluLmM6MzI3NjojaWZkZWYgQ09ORklHX1JGU19BQ0NFTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21haW4uYy0zMjc3LVx0bmV0ZGV2LVx1MDAzZWh3X2ZlYXR1cmVzIHw9IE5FVElGX0ZfTlRVUExFO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19tYWluLmMtMzMxNi1lcnJfb3V0X2Rpc2FibGVfc3Jpb3ZfcHA6XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfbWFpbi5jOjMzMTc6I2lmZGVmIENPTkZJR19QQ0lfSU9WXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfbWFpbi5jLTMzMTgtXHRpZiAoZW5pY19zcmlvdl9lbmFibGVkKGVuaWMpKSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21haW4uYz0zMzM3PXN0YXRpYyB2b2lkIGVuaWNfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19tYWluLmMtMzM3MC1cdFx0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZlbmljLVx1MDAzZWxpbmtfbm90aWZ5X3dvcmspO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21haW4uYzozMzcxOiNpZmRlZiBDT05GSUdfUENJX0lPVlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21haW4uYy0zMzcyLVx0XHRpZiAoZW5pY19zcmlvdl9lbmFibGVkKGVuaWMpKSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX3BwLmM9MjM9aW50IGVuaWNfaXNfdmFsaWRfcHBfdmYoc3RydWN0IGVuaWMgKmVuaWMsIGludCB2ZiwgaW50ICplcnIpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX3BwLmMtMjUtXHRpZiAodmYgIT0gUE9SVF9TRUxGX1ZGKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfcHAuYzoyNjojaWZkZWYgQ09ORklHX1BDSV9JT1ZcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19wcC5jLTI3LVx0XHRpZiAoZW5pY19zcmlvdl9lbmFibGVkKGVuaWMpKSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy92bmljX2RldmNtZC5oPTY3PWVudW0gdm5pY19kZXZjbWRfY21kIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL3ZuaWNfZGV2Y21kLmgtMjg2LVx0ICogICAgICAgICAgICAgIDAgaWYgbm8gVklGLUNPTkZJRy1JTkZPIFRMViB3YXMgZXZlciByZWNlaXZlZC4gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvdm5pY19kZXZjbWQuaDoyODc6XHRDTURfQ09ORklHX0lORk9fR0VUICAgICA9IF9DTURDKF9DTURfRElSX1JXLCBfQ01EX1ZUWVBFX0FMTCwgNDQpLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy92bmljX2RldmNtZC5oLTI4OC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxODo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzUyOQoJCQkJCQkJb3V0cHV0OiA2MQoJCQkJCQkJdGhvdWdodHM6IDgwOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipXb3J0aCBGdXp6aW5nIEFzc2Vzc21lbnQgZm9yIENpc2NvIFZJQyAoZW5pYykgRHJpdmVyKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgdGhlIG5lZWQgZm9yIGBDT05GSUdfUENJX0lPVmAganVtcHMgb3V0LiBUaGUgcGF0Y2ggaXRzZWxmIGludHJvZHVjZXMgYGVuaWNfYWRtaW4uY2AgYW5kIGBlbmljX21ib3guY2AsIHdoaWNoIG1ha2VzIG1lIHRoaW5rIHRoaXMgaXMgYSBwb3RlbnRpYWwgYXJlYSBmb3IgZnV6emluZy4gVGhlIGtleSBoZXJlIGlzIHdoZXRoZXIgdGhpcyBkcml2ZXIgaXMgYWN0dWFsbHkgcmVhY2hhYmxlIGluIGEgZnV6emluZyBlbnZpcm9ubWVudC4KCkkgcmVtZW1iZXIgc3l6a2FsbGVyIGhhcyBgc3l6X3BjaV9kZXZpY2VgLCB3aGljaCBpdCB1c2VzIHRvIGluamVjdCBQQ0kgZGV2aWNlcy4gSG93ZXZlciwgSSBuZWVkIHRvIGNoZWNrIGlmIHRoaXMgcGF0Y2ggaXMgd29ydGggZnV6emluZy4gVGhlIGRvY3VtZW50YXRpb24gc2F5cyB0byBjb25zaWRlciByZXR1cm5pbmcgYFdvcnRoRnV6emluZz1mYWxzZWAgaWYgdGhlIGNoYW5nZXMgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBzcGVjaWZpY2FsbHkgbWVudGlvbmluZyBRRU1VLiBJcyB0aGUgQ2lzY28gVklDIChgZW5pY2ApIGVtdWxhdGVkIGluIFFFTVU/IEkgZG9uJiMzOTt0IHRoaW5rIHNvLCBhbmQgYSBxdWljayBjaGVjayBvZiBRRU1VJiMzOTtzIHN1cHBvcnRlZCBkZXZpY2VzIGNvbmZpcm1zIHRoYXQuIFFFTVUgc3VwcG9ydHMgdGhlIGBlMTAwMGAsIGBlMTAwMGVgLCBgcnRsODEzOWAsIGB2aXJ0aW8tbmV0YCwgYHZteG5ldDNgLCBgcGNuZXRgLCBgbmUya19wY2lgLCBgdHVsaXBgLCBhbmQgYGk4MjU1OWVyYCBidXQgbm90IGBlbmljYC4KCk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbiBpcyB3aGV0aGVyIHN5emthbGxlciBpdHNlbGYgZW11bGF0ZXMgYGVuaWNgLiBUaGUgZ29vZCBuZXdzIGlzIHN5emthbGxlciYjMzk7cyBgc3l6X3BjaWAgaXMgYSBnZW5lcmljIFBDSSBmdXp6ZXIgdGhhdCBjYW4gZW11bGF0ZSBBTlkgUENJIGRldmljZS4gSXQgZG9lcyB0aGlzIGJ5IGludGVyY2VwdGluZyBjb25maWcgc3BhY2UgYW5kIE1NSU8gcmVhZHMvd3JpdGVzLiBJdCYjMzk7cyBub3QgcGVyZmVjdCBlbXVsYXRpb24sIGJ1dCBpdCBwcm92aWRlcyByYW5kb20gZGF0YSB0byBNTUlPIHJlYWRzLCB3aGljaCBpcyBlbm91Z2ggdG8gcmVhY2ggZHJpdmVyIGNvZGUuIEkgbmVlZCB0byBtYWtlIHN1cmUgYGVuaWNgIGlzIHN1cHBvcnRlZCBieSBzeXprYWxsZXImIzM5O3MgUENJIGZ1enplci4gSXQgZG9lcyB0aGF0IGJ5IG1hdGNoaW5nIFBDSSBJRHMuIElmIHRoZSBkcml2ZXIgbG9hZHMgYW5kIGJpbmRzIHRvIHRoZSBpbmplY3RlZCBQQ0kgSUQsIGl0IHdpbGwgZnV6eiBpdC4gVGhhdCBtZWFucyBpdCBkb2VzbiYjMzk7dCBuZWVkIGRlZGljYXRlZCBlbXVsYXRpb24sIHNvIGl0IGlzIHJlYWNoYWJsZS4KCkkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgYGVuaWNgIGlzIHJlYWNoYWJsZSBhbmQgaXQgaXMsIHRoZXJlZm9yZSB0aGUgcnVsZSBvZiAmIzM0O0NvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLiYjMzQ7IGRvZXNuJiMzOTt0IGFwcGx5LiBTeXprYWxsZXImIzM5O3MgUENJIGZ1enplciwgd2hpbGUgcHJvdmlkaW5nIGEgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgbWVjaGFuaXNtIHRvIGluamVjdCBQQ0kgZGV2aWNlcywgaXMgcHJpbWFyaWx5IGEgZnV6emVyLiBJdCYjMzk7cyBkZXNpZ25lZCB0byBleHBvc2UgdnVsbmVyYWJpbGl0aWVzIGJ5IGdlbmVyYXRpbmcgcmFuZG9tIGlucHV0LgoKU28sIHNpbmNlIGl0JiMzOTtzIHJlYWNoYWJsZSB2aWEgc3l6a2FsbGVyLCBJJiMzOTttIGxlYW5pbmcgdG93YXJkcyBgV29ydGhGdXp6aW5nPXRydWVgLiBJZiBJIHJldHVybiB0cnVlLCBJIG5lZWQgdG8gcHJvdmlkZSBgRm9jdXNTeW1ib2xzYCBhbmQgYEVuYWJsZUNvbmZpZ3NgLiBGb3IgYEVuYWJsZUNvbmZpZ3NgLCBJJiMzOTtsbCBpbmNsdWRlIGBFTklDYCBhbmQgYFBDSV9JT1ZgLiBGb3IgYEZvY3VzU3ltYm9sc2AsIEkgc2hvdWxkIGluY2x1ZGU6IGBlbmljX2FkbWluX2NoYW5uZWxfb3BlbmAsIGBlbmljX2FkbWluX2NoYW5uZWxfY2xvc2VgLCBgZW5pY19hZG1pbl9ycV9jcV9zZXJ2aWNlYCwgYGVuaWNfYWRtaW5fd3FfY3Ffc2VydmljZWAsIGBlbmljX21ib3hfc2VuZF9tc2dgLCBgZW5pY19tYm94X3ZmX2NhcGFiaWxpdHlfY2hlY2tgLCBgZW5pY19tYm94X3ZmX3JlZ2lzdGVyYCwgYGVuaWNfbWJveF92Zl91bnJlZ2lzdGVyYCwgYGVuaWNfbWJveF9yZWN2X2hhbmRsZXJgLCBgZW5pY19tYm94X3BmX3Byb2Nlc3NfbXNnYCwgYW5kIGBlbmljX21ib3hfdmZfcHJvY2Vzc19tc2dgLiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYENPTkZJR19FTklDYCBpcyBlbmFibGVkLCBidXQgSSBjYW4gYWRkIGl0IHRvIHRoZSBgRW5hYmxlQ29uZmlnc2AuIEZpbmFsbHksIHRoZSBwYXRjaCBpcyBmdXp6YWJsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxODo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteKGludHx2b2lkfHVuc2lnbmVkIGludHxib29sfHN0YXRpYykgW2EtekEtWjAtOV9dJiM0MztcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfYWRtaW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfYWRtaW4uYz0xMDA9c3RhdGljIHVuc2lnbmVkIGludCBlbmljX2FkbWluX2NxX2NvbG9yKHZvaWQgKmNxX2Rlc2MsIHVuc2lnbmVkIGludCBkZXNjX3NpemUpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX2FkbWluLmMtMTA2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX2FkbWluLmM6MTA3OnVuc2lnbmVkIGludCBlbmljX2FkbWluX3dxX2NxX3NlcnZpY2Uoc3RydWN0IGVuaWMgKmVuaWMpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfYWRtaW4uYy0xMDgte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19hZG1pbi5jPTEzMD1zdGF0aWMgdm9pZCBlbmljX2FkbWluX21zZ19lbnF1ZXVlKHN0cnVjdCBlbmljICplbmljLCB2b2lkICpidWYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX2FkbWluLmMtMTU2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX2FkbWluLmM6MTU3OnVuc2lnbmVkIGludCBlbmljX2FkbWluX3JxX2NxX3NlcnZpY2Uoc3RydWN0IGVuaWMgKmVuaWMpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfYWRtaW4uYy0xNTgte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19hZG1pbi5jPTQ4ND1zdGF0aWMgdm9pZCBlbmljX2FkbWluX21zZ19kcmFpbihzdHJ1Y3QgZW5pYyAqZW5pYylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfYWRtaW4uYy00OTYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfYWRtaW4uYzo0OTc6aW50IGVuaWNfYWRtaW5fY2hhbm5lbF9vcGVuKHN0cnVjdCBlbmljICplbmljKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX2FkbWluLmMtNDk4LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfYWRtaW4uYy01ODAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfYWRtaW4uYzo1ODE6dm9pZCBlbmljX2FkbWluX2NoYW5uZWxfY2xvc2Uoc3RydWN0IGVuaWMgKmVuaWMpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfYWRtaW4uYy01ODIte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE4OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1NjQ0CgkJCQkJCQlvdXRwdXQ6IDYwCgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQ29uc29saWRhdGluZyBgZW5pY19hZG1pbi5jYCBGdW5jdGlvbnMqKgoKQWxyaWdodCwgdGhlIGNvcmUgaWRlYSBoZXJlIGlzIHRvIHN0cmF0ZWdpY2FsbHkgY29uc29saWRhdGUgdGhlIGZ1bmN0aW9ucyB3aXRoaW4gYGVuaWNfYWRtaW4uY2AuIFdlJiMzOTtyZSBsaWtlbHkgZGVhbGluZyB3aXRoIGEgbmV0d29yayBkcml2ZXIsIGFuZCB0aGlzIGZpbGUgcHJvYmFibHkgaG91c2VzIHRoZSBhZG1pbmlzdHJhdGl2ZSBhbmQgY29udHJvbCBwbGFuZSByb3V0aW5lcyByZWxhdGVkIHRvIHRoZSBFTklDIChFbmhhbmNlZCBOZXR3b3JrIEludGVyZmFjZSBDYXJkKS4gVGhlIG1vdGl2YXRpb24gZm9yIHRoaXMgY29uc29saWRhdGlvbiBjb3VsZCBiZSBhbnkgbnVtYmVyIG9mIHRoaW5ncywgYnV0IGdpdmVuIG91ciBleHBlcmllbmNlLCB3ZSYjMzk7cmUgbGlrZWx5IGxvb2tpbmcgdG8gaW1wcm92ZSBtYWludGFpbmFiaWxpdHksIGNvZGUgcmVhZGFiaWxpdHksIG9yIHBlcmhhcHMgc3RyZWFtbGluZSBhIHNwZWNpZmljIGZ1bmN0aW9uLiBXZSBjb3VsZCBiZSByZWZhY3RvcmluZyBleGlzdGluZyBjb2RlIHRvIHJlZHVjZSBkdXBsaWNhdGlvbi4gTWF5YmUgd2UmIzM5O3JlIGNvbnNvbGlkYXRpbmcgZnVuY3Rpb25hbGl0aWVzIHRoYXQgY3VycmVudGx5IHJlc2lkZSBpbiB2YXJpb3VzIGZpbGVzLiBJdCBtYXkgYWxzbyBpbXBseSB3ZeKAmXJlIGxvb2tpbmcgdG8gc2ltcGxpZnkgb3VyIGRyaXZlciYjMzk7cyBjb250cm9sIHBhdGggYW5kIHJlZHVjZSB0aGUgY29nbml0aXZlIGxvYWQgZm9yIGRldmVsb3BlcnMgd29ya2luZyBvbiB0aGlzIHBpZWNlLiBJdCBjb3VsZCBzaW1wbHkgYmUgYSBwcmVyZXF1aXNpdGUgYmVmb3JlIGZ1cnRoZXIgcmVmYWN0b3Jpbmcgb3IgbW9kaWZpY2F0aW9uIHRvIHRoaXMgZmlsZS4gSW4gYW55IGV2ZW50LCB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYXJjaGluZyBhcmNoaXRlY3R1cmFsIGdvYWxzIHdpbGwgYmUgY3JpdGljYWwgYmVmb3JlIHdlIHN0YXJ0LCBzbyBhcyB0byBjcmVhdGUgYSB3ZWxsLXN0cnVjdHVyZWQgcGxhbiB0byBhY2NvbXBsaXNoIHRoZSBuZWNlc3NhcnkgY2hhbmdlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTg6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XlthLXpBLVowLTlfXSYjNDM7IFthLXpBLVowLTlfXSYjNDM7XFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX2FkbWluLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX2FkbWluLmM9NDg0PXN0YXRpYyB2b2lkIGVuaWNfYWRtaW5fbXNnX2RyYWluKHN0cnVjdCBlbmljICplbmljKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19hZG1pbi5jLTQ5Ni1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19hZG1pbi5jOjQ5NzppbnQgZW5pY19hZG1pbl9jaGFubmVsX29wZW4oc3RydWN0IGVuaWMgKmVuaWMpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfYWRtaW4uYy00OTgte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19hZG1pbi5jLTU4MC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19hZG1pbi5jOjU4MTp2b2lkIGVuaWNfYWRtaW5fY2hhbm5lbF9jbG9zZShzdHJ1Y3QgZW5pYyAqZW5pYylcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19hZG1pbi5jLTU4Mi17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE4OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2MTY1CgkJCQkJCQlvdXRwdXQ6IDYwCgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqUmVmaW5pbmcgdGhlIFJlZ2V4IEFwcHJvYWNoKioKCkhtbSwgdXBvbiBjbG9zZXIgaW5zcGVjdGlvbiwgdGhhdCBpbml0aWFsIHJlZ3VsYXIgZXhwcmVzc2lvbiBmb3IgaWRlbnRpZnlpbmcgcG90ZW50aWFsIHN0YXRpYyBhbmQgdmFyaWFibGUgZGVjbGFyYXRpb25zIGZlbHQgYSB0YWQgdG9vIHNwZWNpZmljLiBJIG5lZWQgdG8gYmUgbW9yZSBmbGV4aWJsZS4gSW5zdGVhZCBvZiB0aGUgcmVzdHJpY3RpdmUgcGF0dGVybiBJIHdhcyBpbml0aWFsbHkgY29uc2lkZXJpbmcsIEkgdGhpbmsgYSBicm9hZGVyIGFwcHJvYWNoIGlzIHdhcnJhbnRlZC4gTXkgdGhpbmtpbmcgaXMgdG8gc3dpdGNoIHRvOgoKKiAgIGBec3RhdGljIC4qYDogVGhpcyB3aWxsIGNhdGNoIGFueSBsaW5lIGJlZ2lubmluZyB3aXRoICYjMzQ7c3RhdGljJiMzNDsgZm9sbG93ZWQgYnkgYW55dGhpbmcgZWxzZS4gVGhpcyBzaG91bGQgY292ZXIgdmFyaW91cyBzdGF0aWMgZGVjbGFyYXRpb25zIHJlZ2FyZGxlc3Mgb2YgdGhlIHNwZWNpZmljIHZhcmlhYmxlIHR5cGUgb3IgbW9kaWZpZXJzLgoqICAgYF5bYS16QS1aXS4qYDogQW5kLCB0aGlzIHBhdHRlcm4gd2lsbCBoYW5kbGUgdGhlIHZhcmlhYmxlcy4gVGhpcyBzaG91bGQgY2FwdHVyZSBkZWNsYXJhdGlvbnMgdGhhdCBiZWdpbiB3aXRoIGEgbGV0dGVyICh1cHBlciBvciBsb3dlciBjYXNlKSBhbmQgYXJlIGZvbGxvd2VkIGJ5IGFueXRoaW5nLiBUaGlzIHNob3VsZCB0YWtlIGNhcmUgb2YgYW55IHZhcmlhYmxlIGRlY2xhcmF0aW9uIHN0YXJ0aW5nIHdpdGggbGV0dGVyIG9yIHVuZGVyc2NvcmUsIHdoaWNoIGlzIGEgY29tbW9uIG5hbWluZyBjb252ZW50aW9uLgoKRXNzZW50aWFsbHksIEkgd2FudCB0byBtaW5pbWl6ZSBmYWxzZSBuZWdhdGl2ZXMgYW5kIHRoZW4gYWRkcmVzcyBhbnkgcG90ZW50aWFsIGZhbHNlIHBvc2l0aXZlcyB0aHJvdWdoIHBvc3QtcHJvY2Vzc2luZywgaW5zdGVhZCBvZiByaXNraW5nIG1pc3Npbmcgc29tZXRoaW5nIHVwIGZyb250LiBUaGlzIHNob3VsZCBzaW1wbGlmeSB0aGUgcmVnZXggc2lnbmlmaWNhbnRseSBhbmQgaW5jcmVhc2UgaXRzIG92ZXJhbGwgcmVsaWFiaWxpdHkgaW4gaWRlbnRpZnlpbmcgdGhlIHRhcmdldCBsaW5lcyBvZiBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxODo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteW2EtekEtWl9dLipcXChbYS16QS1aMC05XyosIF0mIzQzO1xcKSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19hZG1pbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19hZG1pbi5jPTQxPXN0YXRpYyB2b2lkIGVuaWNfYWRtaW5fcnFfYnVmX2NsZWFuKHN0cnVjdCB2bmljX3JxICpycSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfYWRtaW4uYy01NC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19hZG1pbi5jOjU1OnN0YXRpYyBpbnQgZW5pY19hZG1pbl9ycV9wb3N0X29uZShzdHJ1Y3QgZW5pYyAqZW5pYywgZ2ZwX3QgZ2ZwKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX2FkbWluLmMtNTYte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19hZG1pbi5jLTgwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX2FkbWluLmM6ODE6c3RhdGljIGludCBlbmljX2FkbWluX3JxX2ZpbGwoc3RydWN0IGVuaWMgKmVuaWMsIGdmcF90IGdmcClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19hZG1pbi5jLTgyLXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfYWRtaW4uYy05NC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19hZG1pbi5jOjk1OnN0YXRpYyB2b2lkIGVuaWNfYWRtaW5fcnFfZHJhaW4oc3RydWN0IGVuaWMgKmVuaWMpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfYWRtaW4uYy05Ni17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX2FkbWluLmMtOTktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfYWRtaW4uYzoxMDA6c3RhdGljIHVuc2lnbmVkIGludCBlbmljX2FkbWluX2NxX2NvbG9yKHZvaWQgKmNxX2Rlc2MsIHVuc2lnbmVkIGludCBkZXNjX3NpemUpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfYWRtaW4uYy0xMDEte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19hZG1pbi5jLTEwNi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19hZG1pbi5jOjEwNzp1bnNpZ25lZCBpbnQgZW5pY19hZG1pbl93cV9jcV9zZXJ2aWNlKHN0cnVjdCBlbmljICplbmljKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX2FkbWluLmMtMTA4LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfYWRtaW4uYz0xMzA9c3RhdGljIHZvaWQgZW5pY19hZG1pbl9tc2dfZW5xdWV1ZShzdHJ1Y3QgZW5pYyAqZW5pYywgdm9pZCAqYnVmLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19hZG1pbi5jLTE1Ni1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19hZG1pbi5jOjE1Nzp1bnNpZ25lZCBpbnQgZW5pY19hZG1pbl9ycV9jcV9zZXJ2aWNlKHN0cnVjdCBlbmljICplbmljKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX2FkbWluLmMtMTU4LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfYWRtaW4uYy0yNTQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfYWRtaW4uYzoyNTU6c3RhdGljIGlycXJldHVybl90IGVuaWNfYWRtaW5faXNyX21zaXgoaW50IGlycSwgdm9pZCAqZGF0YSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19hZG1pbi5jLTI1Ni17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX2FkbWluLmMtMjYzLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX2FkbWluLmM6MjY0OnN0YXRpYyB2b2lkIGVuaWNfYWRtaW5fbXNnX3dvcmtfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfYWRtaW4uYy0yNjUte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19hZG1pbi5jLTI4Mi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19hZG1pbi5jOjI4MzpzdGF0aWMgdm9pZCBlbmljX2FkbWluX3BvbGxfd29ya19oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19hZG1pbi5jLTI4NC17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX2FkbWluLmMtMzAwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX2FkbWluLmM6MzAxOnN0YXRpYyBpbnQgZW5pY19hZG1pbl9zZXR1cF9pbnRyKHN0cnVjdCBlbmljICplbmljKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX2FkbWluLmMtMzAyLXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfYWRtaW4uYy0zNTYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfYWRtaW4uYzozNTc6c3RhdGljIHZvaWQgZW5pY19hZG1pbl90ZWFyZG93bl9pbnRyKHN0cnVjdCBlbmljICplbmljKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX2FkbWluLmMtMzU4LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfYWRtaW4uYy0zNjYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfYWRtaW4uYzozNjc6c3RhdGljIGludCBlbmljX2FkbWluX3FwX3R5cGVfc2V0KHN0cnVjdCBlbmljICplbmljLCB1MzIgZW5hYmxlKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX2FkbWluLmMtMzY4LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfYWRtaW4uYy0zNzktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfYWRtaW4uYzozODA6c3RhdGljIGludCBlbmljX2FkbWluX2FsbG9jX3Jlc291cmNlcyhzdHJ1Y3QgZW5pYyAqZW5pYylcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19hZG1pbi5jLTM4MS17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX2FkbWluLmMtNDQzLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX2FkbWluLmM6NDQ0OnN0YXRpYyB2b2lkIGVuaWNfYWRtaW5fZnJlZV9yZXNvdXJjZXMoc3RydWN0IGVuaWMgKmVuaWMpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfYWRtaW4uYy00NDUte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19hZG1pbi5jLTQ1Mi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19hZG1pbi5jOjQ1MzpzdGF0aWMgdm9pZCBlbmljX2FkbWluX2luaXRfcmVzb3VyY2VzKHN0cnVjdCBlbmljICplbmljKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX2FkbWluLmMtNDU0LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfYWRtaW4uYy00ODMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfYWRtaW4uYzo0ODQ6c3RhdGljIHZvaWQgZW5pY19hZG1pbl9tc2dfZHJhaW4oc3RydWN0IGVuaWMgKmVuaWMpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfYWRtaW4uYy00ODUte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19hZG1pbi5jLTQ5Ni1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19hZG1pbi5jOjQ5NzppbnQgZW5pY19hZG1pbl9jaGFubmVsX29wZW4oc3RydWN0IGVuaWMgKmVuaWMpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfYWRtaW4uYy00OTgte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19hZG1pbi5jLTU4MC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19hZG1pbi5jOjU4MTp2b2lkIGVuaWNfYWRtaW5fY2hhbm5lbF9jbG9zZShzdHJ1Y3QgZW5pYyAqZW5pYylcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19hZG1pbi5jLTU4Mi17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE4OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4MjA5CgkJCQkJCQlvdXRwdXQ6IDYwCgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqR2V0dGluZyBEb3duIHRvIEJ1c2luZXNzIHdpdGggYGVuaWNfbWJveC5jYCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbi4gSSBuZWVkIHRvIHB1bGwgc29tZSBmdW5jdGlvbmFsaXR5IGZyb20gYGVuaWNfbWJveC5jYC4gSSYjMzk7bSBnb2luZyB0byBzdGFydCB0aGVyZSwgZm9jdXNpbmcgb24gdGhlIG1haWxib3ggaW50ZXJhY3Rpb25zLCBsaWtlbHkgZm9yIGNvbmZpZ3VyYXRpb24sIHN0YXR1cyBxdWVyaWVzLCBvciBjb21tYW5kIGV4ZWN1dGlvbiB3aXRoaW4gdGhlIEVuaWMgZHJpdmVyLiBUaGlzIHN1Z2dlc3RzIHRoYXQgSSYjMzk7bSBlaXRoZXIgd29ya2luZyBvbiBhIG1vZGlmaWNhdGlvbiB0byB0aGUgRW5pYyBkcml2ZXIgaXRzZWxmLCBvciBwZXJoYXBzIEkmIzM5O20gZGVidWdnaW5nIGludGVyYWN0aW9ucyBhbmQgbmVlZGluZyB0byB0cmFjZSB0aHJvdWdoIHRoZSBtYWlsYm94IHByb3RvY29sLiBUaGUgZXhhY3QgZnVuY3Rpb25zIEkgbmVlZCB3aWxsIGRlcGVuZCBvbiB0aGUgdGFzayBhdCBoYW5kLCBidXQgdGhpcyBpcyBjbGVhcmx5IHRoZSBzdGFydGluZyBwb2ludCB0byB1bmRlcnN0YW5kIHRoZSBFbmljJiMzOTtzIGxvdyBsZXZlbCBjb21tdW5pY2F0aW9ucy4gTGV04oCZcyBnZXQgdG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE4OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15bYS16QS1aX10uKlxcKFthLXpBLVowLTlfKiwgXSYjNDM7XFwpJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21ib3guYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfbWJveC5jPTMxPWludCBlbmljX21ib3hfc2VuZF9tc2coc3RydWN0IGVuaWMgKmVuaWMsIHU4IG1zZ190eXBlLCB1MTYgZHN0X3ZuaWNfaWQsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21ib3guYy0xMzgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfbWJveC5jOjEzOTpzdGF0aWMgaW50IGVuaWNfbWJveF93YWl0X3JlcGx5KHN0cnVjdCBlbmljICplbmljLCB1bnNpZ25lZCBsb25nIHRpbWVvdXRfbXMpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfbWJveC5jLTE0MC17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21ib3guYy0xNDgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfbWJveC5jOjE0OTppbnQgZW5pY19tYm94X3NlbmRfbGlua19zdGF0ZShzdHJ1Y3QgZW5pYyAqZW5pYywgdTE2IHZmX2lkLCB1MzIgbGlua19zdGF0ZSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19tYm94LmMtMTUwLXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfbWJveC5jPTM2NT1zdGF0aWMgdm9pZCBlbmljX21ib3hfdmZfaGFuZGxlX3VucmVnaXN0ZXJfcmVwbHkoc3RydWN0IGVuaWMgKmVuaWMsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21ib3guYy0zODctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfbWJveC5jOjM4ODpzdGF0aWMgdm9pZCBlbmljX21ib3hfdmZfaGFuZGxlX2xpbmtfc3RhdGUoc3RydWN0IGVuaWMgKmVuaWMsIHZvaWQgKnBheWxvYWQpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfbWJveC5jLTM4OS17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21ib3guYz00ODA9c3RhdGljIHZvaWQgZW5pY19tYm94X3JlY3ZfaGFuZGxlcihzdHJ1Y3QgZW5pYyAqZW5pYywgdm9pZCAqYnVmLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19tYm94LmMtNTM0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21ib3guYzo1MzU6aW50IGVuaWNfbWJveF92Zl9jYXBhYmlsaXR5X2NoZWNrKHN0cnVjdCBlbmljICplbmljKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21ib3guYy01MzYte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19tYm94LmMtNTY5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21ib3guYzo1NzA6aW50IGVuaWNfbWJveF92Zl9yZWdpc3RlcihzdHJ1Y3QgZW5pYyAqZW5pYylcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19tYm94LmMtNTcxLXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfbWJveC5jLTU5OC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19tYm94LmM6NTk5OmludCBlbmljX21ib3hfdmZfdW5yZWdpc3RlcihzdHJ1Y3QgZW5pYyAqZW5pYylcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19tYm94LmMtNjAwLXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfbWJveC5jLTYyNC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19tYm94LmM6NjI1OnZvaWQgZW5pY19tYm94X2luaXQoc3RydWN0IGVuaWMgKmVuaWMpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfbWJveC5jLTYyNi17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE4OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5MjM4CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGJhY2sgaW4uIE15IGd1dCBmZWVsaW5nIHRlbGxzIG1lIHRoZSBhbnN3ZXIgbGllcyB3aXRoaW4gdGhlIG1haWxib3ggcHJvY2Vzc2luZy4KCioqUmV2aXNpdGluZyBlbmljX21ib3guYyoqCgpJIG5lZWQgdG8gY2lyY2xlIGJhY2sgdG8gYGVuaWNfbWJveC5jYC4gSSBoYXZlIGEgbmFnZ2luZyBmZWVsaW5nIHRoZSBjb3JlIGxvZ2ljIGZvciBwcm9jZXNzaW5nIG1lc3NhZ2VzIGlzIHRoZXJlLCBhbmQgSSBuZWVkIHRvIHJlLWV4YW1pbmUgdGhlIGBlbmljX21ib3hfcGZfcHJvY2Vzc19tc2dgIGFuZCBgZW5pY19tYm94X3ZmX3Byb2Nlc3NfbXNnYCBmdW5jdGlvbnMgc3BlY2lmaWNhbGx5LiBUaW1lIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGhvdyB0aGUgUEYgYW5kIFZGIG1haWxib3hlcyBhcmUgaGFuZGxlZC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIHNvbWV0aGluZyBjcnVjaWFsIGluIHRoZWlyIHJlc3BlY3RpdmUgbWVzc2FnZSBwcm9jZXNzaW5nIGZsb3dzLiBMZXQmIzM5O3Mgc2VlIGlmIGEgc2Vjb25kIGxvb2sgcmV2ZWFscyBhbnkgb3Zlcmxvb2tlZCBkZXRhaWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE4OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Byb2Nlc3NfbXNnJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21ib3guYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfbWJveC5jPTIyOD1zdGF0aWMgaW50IGVuaWNfbWJveF9wZl9oYW5kbGVfdW5yZWdpc3RlcihzdHJ1Y3QgZW5pYyAqZW5pYywgdm9pZCAqbXNnLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19tYm94LmMtMjU4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21ib3guYzoyNTk6c3RhdGljIHZvaWQgZW5pY19tYm94X3BmX3Byb2Nlc3NfbXNnKHN0cnVjdCBlbmljICplbmljLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21ib3guYy0yNjAtXHRcdFx0XHQgICAgIHN0cnVjdCBlbmljX21ib3hfaGRyICpoZHIsIHZvaWQgKnBheWxvYWQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21ib3guYz00MTk9c3RhdGljIGJvb2wgZW5pY19tYm94X3ZmX3BheWxvYWRfb2soc3RydWN0IGVuaWMgKmVuaWMsIHU4IG1zZ190eXBlLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19tYm94LmMtNDMwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21ib3guYzo0MzE6c3RhdGljIHZvaWQgZW5pY19tYm94X3ZmX3Byb2Nlc3NfbXNnKHN0cnVjdCBlbmljICplbmljLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21ib3guYy00MzItXHRcdFx0XHQgICAgIHN0cnVjdCBlbmljX21ib3hfaGRyICpoZHIsIHZvaWQgKnBheWxvYWQsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21ib3guYz00ODA9c3RhdGljIHZvaWQgZW5pY19tYm94X3JlY3ZfaGFuZGxlcihzdHJ1Y3QgZW5pYyAqZW5pYywgdm9pZCAqYnVmLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19tYm94LmMtNTE4LVx0aWYgKGVuaWMtXHUwMDNldmZfc3RhdGUpIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19tYm94LmM6NTE5Olx0XHRlbmljX21ib3hfcGZfcHJvY2Vzc19tc2coZW5pYywgaGRyLCBwYXlsb2FkKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19tYm94LmMtNTIwLVx0fSBlbHNlIGlmIChsZTE2X3RvX2NwdShoZHItXHUwMDNlc3JjX3ZuaWNfaWQpID09IEVOSUNfTUJPWF9EU1RfUEYpIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfbWJveC5jLTUyNS1cdFx0ICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfbWJveC5jOjUyNjpcdFx0ZW5pY19tYm94X3ZmX3Byb2Nlc3NfbXNnKGVuaWMsIGhkciwgcGF5bG9hZCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19tYm94LmMtNTI3LVx0XHRcdFx0XHQgbXNnX2xlbiAtICh1MTYpc2l6ZW9mKCpoZHIpKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTg6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDAwNjEKCQkJCQkJCW91dHB1dDogMjEyCgkJCQkJCQl0aG91Z2h0czogNDg4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQ2lzY28gVklDIEV0aGVybmV0IE5JQyBEcml2ZXIgUGF0Y2gqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyBpbnRyb2R1Y2luZyBzb21lICpzaWduaWZpY2FudCogZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwsIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgdGhlIENpc2NvIFZJQyBFdGhlcm5ldCBOSUMgZHJpdmVyLCBgZW5pY2AuIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIG5ldyBhZG1pbiBjaGFubmVsIGFuZCBtYWlsYm94IHByb3RvY29sIGRlc2lnbmVkIGZvciBjb21tdW5pY2F0aW9uIGJldHdlZW4gdGhlIFBoeXNpY2FsIEZ1bmN0aW9uIChQRikgYW5kIFZpcnR1YWwgRnVuY3Rpb25zIChWRnMpLiBHaXZlbiB0aGlzIG1vZGlmaWNhdGlvbiBvZiBjb3JlIGRyaXZlciBsb2dpYywgdGhpcyBkZWZpbml0ZWx5IHdhcnJhbnRzIGNsb3NlciBpbnNwZWN0aW9uIGFuZCBJJiMzOTttIHRoaW5raW5nIHN5emthbGxlciYjMzk7cyBQQ0kgZnV6emluZyBjYXBhYmlsaXRpZXMgYXJlIGdvaW5nIHRvIGJlIHZlcnkgcmVsZXZhbnQgaGVyZS4gVGhpcyBpcyByaXBlIGZvciBmdXp6aW5nLgoKTXkgcHJpbWFyeSBmb2N1cywgYXMgYWx3YXlzLCBpcyB0byBpZGVudGlmeSB0aGUgY3JpdGljYWwgZnVuY3Rpb25zIHRoYXQgaGFuZGxlIHRoaXMgbmV3IFBGLVZGIGNvbW11bmljYXRpb24uIEJhc2VkIG9uIHRoZSBkb2N1bWVudGF0aW9uLCB0aGUgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OyBhcmUgdGhlIGtleSB0byB1bmxvY2tpbmcgdGhpcyBuZXcgZnVuY3Rpb25hbGl0eS4gTGV0JiMzOTtzIG1ha2Ugc3VyZSBJJiMzOTt2ZSBnb3QgdGhlbSBhbGw6CgoqICAgYGVuaWNfYWRtaW5fY2hhbm5lbF9vcGVuYAoqICAgYGVuaWNfYWRtaW5fY2hhbm5lbF9jbG9zZWAKKiAgIGBlbmljX2FkbWluX3dxX2NxX3NlcnZpY2VgCiogICBgZW5pY19hZG1pbl9ycV9jcV9zZXJ2aWNlYAoqICAgYGVuaWNfbWJveF9zZW5kX21zZ2AKKiAgIGBlbmljX21ib3hfdmZfY2FwYWJpbGl0eV9jaGVja2AKKiAgIGBlbmljX21ib3hfdmZfcmVnaXN0ZXJgCiogICBgZW5pY19tYm94X3ZmX3VucmVnaXN0ZXJgCiogICBgZW5pY19tYm94X3JlY3ZfaGFuZGxlcmAKKiAgIGBlbmljX21ib3hfcGZfcHJvY2Vzc19tc2dgCiogICBgZW5pY19tYm94X3ZmX3Byb2Nlc3NfbXNnYAoKRG91YmxlLWNoZWNraW5nLCBpdCBsb29rcyBsaWtlIGBDT05GSUdfRU5JQ2AgYW5kIGBDT05GSUdfUENJX0lPVmAgYXJlIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMgdG8gZW5hYmxlIHRoaXMuIExldCYjMzk7cyBtYWtlIHN1cmUgSSYjMzk7bSB1c2luZyB0aGUgcmlnaHQgbmFtZXMuIFllcCwgYFBDSV9JT1ZgIGlzIGluZGVlZCB0aGUgY29ycmVjdCBuYW1lIGZvciB0aGF0IGZlYXR1cmUuIEFuZCBgRU5JQ2AgaXMgd2hhdCBlbmFibGVzIHRoZSBgZW5pY2AgZHJpdmVyLiBHb29kLCBnb29kLgoKV2l0aCB0aGlzIGFuYWx5c2lzIGNvbXBsZXRlLCBJJiMzOTttIGNvbmZpZGVudCBpbiBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBwYXRjaC4gVGltZSB0byBjb25zdHJ1Y3QgdGhlIHNldC1yZXN1bHRzIGZpbGUgdG8gY29udGludWUgdGVzdGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTg6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VOSUMmIzM0OywKICAgICYjMzQ7UENJX0lPViYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2VuaWNfYWRtaW5fY2hhbm5lbF9vcGVuJiMzNDssCiAgICAmIzM0O2VuaWNfYWRtaW5fY2hhbm5lbF9jbG9zZSYjMzQ7LAogICAgJiMzNDtlbmljX2FkbWluX3dxX2NxX3NlcnZpY2UmIzM0OywKICAgICYjMzQ7ZW5pY19hZG1pbl9ycV9jcV9zZXJ2aWNlJiMzNDssCiAgICAmIzM0O2VuaWNfbWJveF9zZW5kX21zZyYjMzQ7LAogICAgJiMzNDtlbmljX21ib3hfdmZfY2FwYWJpbGl0eV9jaGVjayYjMzQ7LAogICAgJiMzNDtlbmljX21ib3hfdmZfcmVnaXN0ZXImIzM0OywKICAgICYjMzQ7ZW5pY19tYm94X3ZmX3VucmVnaXN0ZXImIzM0OywKICAgICYjMzQ7ZW5pY19tYm94X3JlY3ZfaGFuZGxlciYjMzQ7LAogICAgJiMzNDtlbmljX21ib3hfcGZfcHJvY2Vzc19tc2cmIzM0OywKICAgICYjMzQ7ZW5pY19tYm94X3ZmX3Byb2Nlc3NfbXNnJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgYWRtaW4gY2hhbm5lbCBhbmQgbWFpbGJveCBwcm90b2NvbCBmb3IgUEYtVkYgY29tbXVuaWNhdGlvbiBpbiB0aGUgQ2lzY28gVklDIEV0aGVybmV0IE5JQyBkcml2ZXIgKGVuaWMpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBkcml2ZXIgbG9naWMgYW5kIGNhbiBiZSB0ZXN0ZWQgdXNpbmcgc3l6a2FsbGVyJiMzOTtzIFBDSSBmdXp6aW5nIGNhcGFiaWxpdGllcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RU5JQyYjMzQ7LAogICAgJiMzNDtQQ0lfSU9WJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZW5pY19hZG1pbl9jaGFubmVsX29wZW4mIzM0OywKICAgICYjMzQ7ZW5pY19hZG1pbl9jaGFubmVsX2Nsb3NlJiMzNDssCiAgICAmIzM0O2VuaWNfYWRtaW5fd3FfY3Ffc2VydmljZSYjMzQ7LAogICAgJiMzNDtlbmljX2FkbWluX3JxX2NxX3NlcnZpY2UmIzM0OywKICAgICYjMzQ7ZW5pY19tYm94X3NlbmRfbXNnJiMzNDssCiAgICAmIzM0O2VuaWNfbWJveF92Zl9jYXBhYmlsaXR5X2NoZWNrJiMzNDssCiAgICAmIzM0O2VuaWNfbWJveF92Zl9yZWdpc3RlciYjMzQ7LAogICAgJiMzNDtlbmljX21ib3hfdmZfdW5yZWdpc3RlciYjMzQ7LAogICAgJiMzNDtlbmljX21ib3hfcmVjdl9oYW5kbGVyJiMzNDssCiAgICAmIzM0O2VuaWNfbWJveF9wZl9wcm9jZXNzX21zZyYjMzQ7LAogICAgJiMzNDtlbmljX21ib3hfdmZfcHJvY2Vzc19tc2cmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBhZG1pbiBjaGFubmVsIGFuZCBtYWlsYm94IHByb3RvY29sIGZvciBQRi1WRiBjb21tdW5pY2F0aW9uIGluIHRoZSBDaXNjbyBWSUMgRXRoZXJuZXQgTklDIGRyaXZlciAoZW5pYykuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGRyaXZlciBsb2dpYyBhbmQgY2FuIGJlIHRlc3RlZCB1c2luZyBzeXprYWxsZXImIzM5O3MgUENJIGZ1enppbmcgY2FwYWJpbGl0aWVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTg6NDI6MDguMjcyODY2MDZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODkyNjMzNjc3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFTklDXCIsXG4gICAgXCJQQ0lfSU9WXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZW5pY19hZG1pbl9jaGFubmVsX29wZW5cIixcbiAgICBcImVuaWNfYWRtaW5fY2hhbm5lbF9jbG9zZVwiLFxuICAgIFwiZW5pY19hZG1pbl93cV9jcV9zZXJ2aWNlXCIsXG4gICAgXCJlbmljX2FkbWluX3JxX2NxX3NlcnZpY2VcIixcbiAgICBcImVuaWNfbWJveF9zZW5kX21zZ1wiLFxuICAgIFwiZW5pY19tYm94X3ZmX2NhcGFiaWxpdHlfY2hlY2tcIixcbiAgICBcImVuaWNfbWJveF92Zl9yZWdpc3RlclwiLFxuICAgIFwiZW5pY19tYm94X3ZmX3VucmVnaXN0ZXJcIixcbiAgICBcImVuaWNfbWJveF9yZWN2X2hhbmRsZXJcIixcbiAgICBcImVuaWNfbWJveF9wZl9wcm9jZXNzX21zZ1wiLFxuICAgIFwiZW5pY19tYm94X3ZmX3Byb2Nlc3NfbXNnXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBhZG1pbiBjaGFubmVsIGFuZCBtYWlsYm94IHByb3RvY29sIGZvciBQRi1WRiBjb21tdW5pY2F0aW9uIGluIHRoZSBDaXNjbyBWSUMgRXRoZXJuZXQgTklDIGRyaXZlciAoZW5pYykuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGRyaXZlciBsb2dpYyBhbmQgY2FuIGJlIHRlc3RlZCB1c2luZyBzeXprYWxsZXIncyBQQ0kgZnV6emluZyBjYXBhYmlsaXRpZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE4OjQyOjA4LjI3Mjg3MDVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcyNDYwMDc3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDMxM2JkNTMxNzY0YTliZmE1MTRlYmM0Njg3MzllM2NkZWU5NjBlNmRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBKdW4gMjkgMTg6NDI6MDYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvTWFrZWZpbGVcXG5pbmRleCBhOTZiODMzMmU2ZTJhOC4uZTM4YWFmMzRjMTQ4MzkgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9NYWtlZmlsZVxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvTWFrZWZpbGVcXG5AQCAtMyw1ICszLDYgQEAgb2JqLSQoQ09ORklHX0VOSUMpIDo9IGVuaWMub1xcbiBcXG4gZW5pYy15IDo9IGVuaWNfbWFpbi5vIHZuaWNfY3EubyB2bmljX2ludHIubyB2bmljX3dxLm8gXFxcXFxcbiBcXHRlbmljX3Jlcy5vIGVuaWNfZGV2Lm8gZW5pY19wcC5vIHZuaWNfZGV2Lm8gdm5pY19ycS5vIHZuaWNfdmljLm8gXFxcXFxcbi1cXHRlbmljX2V0aHRvb2wubyBlbmljX2FwaS5vIGVuaWNfY2xzZi5vIGVuaWNfcnEubyBlbmljX3dxLm9cXG4rXFx0ZW5pY19ldGh0b29sLm8gZW5pY19hcGkubyBlbmljX2Nsc2YubyBlbmljX3JxLm8gZW5pY193cS5vIFxcXFxcXG4rXFx0ZW5pY19hZG1pbi5vIGVuaWNfbWJveC5vXFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWMuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pYy5oXFxuaW5kZXggMDg0NzI0MjBmM2ExZmQuLjYyYjg5NDE0ODlkNzczIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pYy5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljLmhcXG5AQCAtMjU2LDEwICsyNTYsMTAgQEAgc3RydWN0IGVuaWMge1xcbiBcXHRzdHJ1Y3QgZW5pY19yeF9jb2FsIHJ4X2NvYWxlc2NlX3NldHRpbmc7XFxuIFxcdHUzMiByeF9jb2FsZXNjZV91c2VjcztcXG4gXFx0dTMyIHR4X2NvYWxlc2NlX3VzZWNzO1xcbi0jaWZkZWYgQ09ORklHX1BDSV9JT1ZcXG4gXFx0dTE2IG51bV92ZnM7XFxuLSNlbmRpZlxcbiBcXHRlbnVtIGVuaWNfdmZfdHlwZSB2Zl90eXBlO1xcbitcXHRib29sIHZmX3JlZ2lzdGVyZWQ7XFxuK1xcdHUzMiBwZl9jYXBfdmVyc2lvbjtcXG4gXFx0dW5zaWduZWQgaW50IGVuYWJsZV9jb3VudDtcXG4gXFx0c3BpbmxvY2tfdCBlbmljX2FwaV9sb2NrO1xcbiBcXHRib29sIGVuaWNfYXBpX2J1c3k7XFxuQEAgLTI5MiwxMCArMjkyLDQ1IEBAIHN0cnVjdCBlbmljIHtcXG4gXFxuIFxcdC8qIEFkbWluIGNoYW5uZWwgcmVzb3VyY2VzIGZvciBTUi1JT1YgTUJPWCAqL1xcbiBcXHRib29sIGhhc19hZG1pbl9jaGFubmVsO1xcbitcXHQvKiB0cnVlIG9ubHkgd2hpbGUgdGhlIGFkbWluIFdRL1JRL0NRIGFyZSBhbGxvY2F0ZWQgYW5kIGVuYWJsZWQ7IGdhdGVzXFxuK1xcdCAqIGVuaWNfYWRtaW5fY2hhbm5lbF9jbG9zZSgpIHNvIGl0IGlzIGEgbm8tb3AgYWZ0ZXIgYSBmYWlsZWQgKHJlKW9wZW5cXG4rXFx0ICogbGVmdCB0aGUgcmVzb3VyY2VzIGZyZWVkLlxcbitcXHQgKi9cXG4rXFx0Ym9vbCBhZG1pbl9jaGFuX3VwO1xcbitcXHQvKiBzZXQgb24gc2VuZCB0aW1lb3V0OyBjbGVhcmVkIG9uIGNoYW5uZWwgcmUtb3BlbiAqL1xcbitcXHRib29sIG1ib3hfc2VuZF9kaXNhYmxlZDtcXG4gXFx0c3RydWN0IHZuaWNfd3EgYWRtaW5fd3E7XFxuIFxcdHN0cnVjdCB2bmljX3JxIGFkbWluX3JxO1xcbiBcXHRzdHJ1Y3Qgdm5pY19jcSBhZG1pbl9jcVsyXTtcXG4gXFx0c3RydWN0IHZuaWNfaW50ciBhZG1pbl9pbnRyO1xcbitcXHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgYWRtaW5fcG9sbF93b3JrO1xcbitcXHR1bnNpZ25lZCBpbnQgYWRtaW5faW50cl9pbmRleDtcXG4rXFx0c3RydWN0IHdvcmtfc3RydWN0IGxpbmtfbm90aWZ5X3dvcms7XFxuK1xcdHN0cnVjdCB3b3JrX3N0cnVjdCBhZG1pbl9tc2dfd29yaztcXG4rXFx0c3BpbmxvY2tfdCBhZG1pbl9tc2dfbG9jaztcXHQvKiBwcm90ZWN0cyBhZG1pbl9tc2dfbGlzdCAqL1xcbitcXHRzdHJ1Y3QgbGlzdF9oZWFkIGFkbWluX21zZ19saXN0O1xcbitcXHR1bnNpZ25lZCBpbnQgYWRtaW5fbXNnX2NvdW50O1xcdC8qIGN1cnJlbnQgZGVwdGggb2YgYWRtaW5fbXNnX2xpc3QgKi9cXG4rXFx0dm9pZCAoKmFkbWluX3JxX2hhbmRsZXIpKHN0cnVjdCBlbmljICplbmljLCB2b2lkICpidWYsXFxuK1xcdFxcdFxcdFxcdCB1bnNpZ25lZCBpbnQgbGVuKTtcXG4rXFxuK1xcdC8qIE1CT1ggcHJvdG9jb2wgc3RhdGUg4oCUIG1ib3hfbG9jayBzZXJpYWxpemVzIGFkbWluIFdRIHNlbmRzICovXFxuK1xcdHN0cnVjdCBtdXRleCBtYm94X2xvY2s7XFxuK1xcdHU2NCBtYm94X21zZ19udW07XFxuK1xcdC8qIE1CT1ggcmVxdWVzdC1yZXBseSBzdGF0ZS4gIFdyaXR0ZW4gYnkgdGhlIHByb2Nlc3MtY29udGV4dCByZXF1ZXN0XFxuK1xcdCAqIGhlbHBlcnMgKGNhcGFiaWxpdHkvcmVnaXN0ZXIvdW5yZWdpc3RlcikgYW5kIHJlYWQvY2xlYXJlZCBieSB0aGVcXG4rXFx0ICogYWRtaW5fbXNnX3dvcmsgcmVjZWl2ZSBoYW5kbGVycy4gIE5vIGV4cGxpY2l0IGxvY2sgaXMgbmVlZGVkIGJlY2F1c2VcXG4rXFx0ICogb25seSBvbmUgcmVxdWVzdCBpcyBpbiBmbGlnaHQgYXQgYSB0aW1lOiByZXF1ZXN0ZXJzIHJ1biB1bmRlciBSVE5MIG9yXFxuK1xcdCAqIHNpbmdsZS10aHJlYWRlZCBwcm9iZS9yZW1vdmUsIHNvIGVhY2ggcmVxdWVzdCBpcyBzZXJpYWxpemVkIGFuZCBpdHNcXG4rXFx0ICogcmVwbHkgY29tcGxldGVzIG1ib3hfY29tcCBiZWZvcmUgdGhlIG5leHQgcmVxdWVzdCBpcyBpc3N1ZWQuXFxuK1xcdCAqL1xcbitcXHRzdHJ1Y3QgY29tcGxldGlvbiBtYm94X2NvbXA7XFxuK1xcdHU4IG1ib3hfZXhwZWN0ZWRfcmVwbHk7XFxuK1xcdGJvb2wgbWJveF9pbml0aWFsaXplZDtcXG4rXFxuK1xcdC8qIFBGOiBwZXItVkYgTUJPWCBzdGF0ZSwgYWxsb2NhdGVkIHdoZW4gU1JJT1YgVjIgaXMgZW5hYmxlZCAqL1xcbitcXHRzdHJ1Y3QgZW5pY192Zl9zdGF0ZSB7XFxuK1xcdFxcdGJvb2wgcmVnaXN0ZXJlZDtcXG4rXFx0fSAqdmZfc3RhdGU7XFxuIH07XFxuIFxcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBuZXRfZGV2aWNlICp2bmljX2dldF9uZXRkZXYoc3RydWN0IHZuaWNfZGV2ICp2ZGV2KVxcbkBAIC00MTcsNiArNDUyLDcgQEAgdm9pZCBlbmljX3Jlc2V0X2FkZHJfbGlzdHMoc3RydWN0IGVuaWMgKmVuaWMpO1xcbiBpbnQgZW5pY19zcmlvdl9lbmFibGVkKHN0cnVjdCBlbmljICplbmljKTtcXG4gaW50IGVuaWNfaXNfdmFsaWRfdmYoc3RydWN0IGVuaWMgKmVuaWMsIGludCB2Zik7XFxuIGludCBlbmljX2lzX2R5bmFtaWMoc3RydWN0IGVuaWMgKmVuaWMpO1xcbitpbnQgZW5pY19pc19zcmlvdl92Zl92MihzdHJ1Y3QgZW5pYyAqZW5pYyk7XFxuIHZvaWQgZW5pY19zZXRfZXRodG9vbF9vcHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7XFxuIGludCBfX2VuaWNfc2V0X3Jzc2tleShzdHJ1Y3QgZW5pYyAqZW5pYyk7XFxuIHZvaWQgZW5pY19leHRfY3Eoc3RydWN0IGVuaWMgKmVuaWMpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfYWRtaW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19hZG1pbi5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMjQyNjQ0ZmEyY2JmOTBcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX2FkbWluLmNcXG5AQCAtMCwwICsxLDYyNiBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuKy8vIENvcHlyaWdodCAyMDI1IENpc2NvIFN5c3RlbXMsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgva2VybmVsLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RtYS1tYXBwaW5nLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9pbnRlcnJ1cHQuaFxcdTAwM2VcXG4rXFxuKyNpbmNsdWRlIFxcXCJ2bmljX2Rldi5oXFxcIlxcbisjaW5jbHVkZSBcXFwidm5pY193cS5oXFxcIlxcbisjaW5jbHVkZSBcXFwidm5pY19ycS5oXFxcIlxcbisjaW5jbHVkZSBcXFwidm5pY19jcS5oXFxcIlxcbisjaW5jbHVkZSBcXFwidm5pY19pbnRyLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJ2bmljX3Jlc291cmNlLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJ2bmljX2RldmNtZC5oXFxcIlxcbisjaW5jbHVkZSBcXFwiZW5pYy5oXFxcIlxcbisjaW5jbHVkZSBcXFwiZW5pY19hZG1pbi5oXFxcIlxcbisjaW5jbHVkZSBcXFwiY3FfZGVzYy5oXFxcIlxcbisjaW5jbHVkZSBcXFwiY3FfZW5ldF9kZXNjLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJ3cV9lbmV0X2Rlc2MuaFxcXCJcXG4rI2luY2x1ZGUgXFxcInJxX2VuZXRfZGVzYy5oXFxcIlxcbisjaW5jbHVkZSBcXFwiZW5pY19tYm94LmhcXFwiXFxuK1xcbisvKiBDbGVhbiB1cCBhbnkgYWRtaW4gV1EgYnVmZmVycyBzdGlsbCBoZWxkIGJ5IGhhcmR3YXJlIGF0IGNsb3NlIHRpbWUuXFxuKyAqIE5vcm1hbGx5IGJ1ZmZlcnMgYXJlIGZyZWVkIGlubGluZSBhZnRlciBzZW5kIGNvbXBsZXRpb24sIGJ1dCBhIHRpbWVkLW91dFxcbisgKiBzZW5kIGludGVudGlvbmFsbHkgbGVhdmVzIHRoZSBidWZmZXIgbGl2ZSB1bnRpbCB0aGUgcXVldWUgaXMgc3RvcHBlZC5cXG4rICovXFxuK3N0YXRpYyB2b2lkIGVuaWNfYWRtaW5fd3FfYnVmX2NsZWFuKHN0cnVjdCB2bmljX3dxICp3cSxcXG4rXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCB2bmljX3dxX2J1ZiAqYnVmKVxcbit7XFxuK1xcdHN0cnVjdCBlbmljICplbmljID0gdm5pY19kZXZfcHJpdih3cS1cXHUwMDNldmRldik7XFxuK1xcbitcXHRpZiAoYnVmLVxcdTAwM2Vvc19idWYpIHtcXG4rXFx0XFx0ZG1hX3VubWFwX3NpbmdsZShcXHUwMDI2ZW5pYy1cXHUwMDNlcGRldi1cXHUwMDNlZGV2LCBidWYtXFx1MDAzZWRtYV9hZGRyLFxcbitcXHRcXHRcXHRcXHQgYnVmLVxcdTAwM2VsZW4sIERNQV9UT19ERVZJQ0UpO1xcbitcXHRcXHRrZnJlZShidWYtXFx1MDAzZW9zX2J1Zik7XFxuK1xcdFxcdGJ1Zi1cXHUwMDNlb3NfYnVmID0gTlVMTDtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBlbmljX2FkbWluX3JxX2J1Zl9jbGVhbihzdHJ1Y3Qgdm5pY19ycSAqcnEsXFxuK1xcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qgdm5pY19ycV9idWYgKmJ1ZilcXG4re1xcbitcXHRzdHJ1Y3QgZW5pYyAqZW5pYyA9IHZuaWNfZGV2X3ByaXYocnEtXFx1MDAzZXZkZXYpO1xcbitcXG4rXFx0aWYgKCFidWYtXFx1MDAzZW9zX2J1ZilcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0ZG1hX3VubWFwX3NpbmdsZShcXHUwMDI2ZW5pYy1cXHUwMDNlcGRldi1cXHUwMDNlZGV2LCBidWYtXFx1MDAzZWRtYV9hZGRyLCBidWYtXFx1MDAzZWxlbixcXG4rXFx0XFx0XFx0IERNQV9GUk9NX0RFVklDRSk7XFxuK1xcdGtmcmVlKGJ1Zi1cXHUwMDNlb3NfYnVmKTtcXG4rXFx0YnVmLVxcdTAwM2Vvc19idWYgPSBOVUxMO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGVuaWNfYWRtaW5fcnFfcG9zdF9vbmUoc3RydWN0IGVuaWMgKmVuaWMsIGdmcF90IGdmcClcXG4re1xcbitcXHRzdHJ1Y3Qgdm5pY19ycSAqcnEgPSBcXHUwMDI2ZW5pYy1cXHUwMDNlYWRtaW5fcnE7XFxuK1xcdHN0cnVjdCBycV9lbmV0X2Rlc2MgKmRlc2M7XFxuK1xcdGRtYV9hZGRyX3QgZG1hX2FkZHI7XFxuK1xcdHZvaWQgKmJ1ZjtcXG4rXFxuK1xcdGJ1ZiA9IGttYWxsb2MoRU5JQ19BRE1JTl9CVUZfU0laRSwgZ2ZwKTtcXG4rXFx0aWYgKCFidWYpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0ZG1hX2FkZHIgPSBkbWFfbWFwX3NpbmdsZShcXHUwMDI2ZW5pYy1cXHUwMDNlcGRldi1cXHUwMDNlZGV2LCBidWYsIEVOSUNfQURNSU5fQlVGX1NJWkUsXFxuK1xcdFxcdFxcdFxcdCAgRE1BX0ZST01fREVWSUNFKTtcXG4rXFx0aWYgKGRtYV9tYXBwaW5nX2Vycm9yKFxcdTAwMjZlbmljLVxcdTAwM2VwZGV2LVxcdTAwM2VkZXYsIGRtYV9hZGRyKSkge1xcbitcXHRcXHRrZnJlZShidWYpO1xcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0fVxcbitcXG4rXFx0ZGVzYyA9IHZuaWNfcnFfbmV4dF9kZXNjKHJxKTtcXG4rXFx0cnFfZW5ldF9kZXNjX2VuYyhkZXNjLCAodTY0KWRtYV9hZGRyIHwgVk5JQ19QQUREUl9UQVJHRVQsXFxuK1xcdFxcdFxcdCBSUV9FTkVUX1RZUEVfT05MWV9TT1AsIEVOSUNfQURNSU5fQlVGX1NJWkUpO1xcbitcXHR2bmljX3JxX3Bvc3QocnEsIGJ1ZiwgMCwgZG1hX2FkZHIsIEVOSUNfQURNSU5fQlVGX1NJWkUsIDApO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgZW5pY19hZG1pbl9ycV9maWxsKHN0cnVjdCBlbmljICplbmljLCBnZnBfdCBnZnApXFxuK3tcXG4rXFx0c3RydWN0IHZuaWNfcnEgKnJxID0gXFx1MDAyNmVuaWMtXFx1MDAzZWFkbWluX3JxO1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0d2hpbGUgKHZuaWNfcnFfZGVzY19hdmFpbChycSkgXFx1MDAzZSAwKSB7XFxuK1xcdFxcdGVyciA9IGVuaWNfYWRtaW5fcnFfcG9zdF9vbmUoZW5pYywgZ2ZwKTtcXG4rXFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGVuaWNfYWRtaW5fcnFfZHJhaW4oc3RydWN0IGVuaWMgKmVuaWMpXFxuK3tcXG4rXFx0dm5pY19ycV9jbGVhbihcXHUwMDI2ZW5pYy1cXHUwMDNlYWRtaW5fcnEsIGVuaWNfYWRtaW5fcnFfYnVmX2NsZWFuKTtcXG4rfVxcbitcXG4rc3RhdGljIHVuc2lnbmVkIGludCBlbmljX2FkbWluX2NxX2NvbG9yKHZvaWQgKmNxX2Rlc2MsIHVuc2lnbmVkIGludCBkZXNjX3NpemUpXFxuK3tcXG4rXFx0dTggdHlwZV9jb2xvciA9ICooKHU4ICopY3FfZGVzYyArIGRlc2Nfc2l6ZSAtIDEpO1xcbitcXG4rXFx0cmV0dXJuICh0eXBlX2NvbG9yIFxcdTAwM2VcXHUwMDNlIENRX0RFU0NfQ09MT1JfU0hJRlQpIFxcdTAwMjYgQ1FfREVTQ19DT0xPUl9NQVNLO1xcbit9XFxuK1xcbit1bnNpZ25lZCBpbnQgZW5pY19hZG1pbl93cV9jcV9zZXJ2aWNlKHN0cnVjdCBlbmljICplbmljKVxcbit7XFxuK1xcdHN0cnVjdCB2bmljX2NxICpjcSA9IFxcdTAwMjZlbmljLVxcdTAwM2VhZG1pbl9jcVswXTtcXG4rXFx0dW5zaWduZWQgaW50IHdvcmsgPSAwO1xcbitcXHR2b2lkICpkZXNjO1xcbitcXG4rXFx0ZGVzYyA9IHZuaWNfY3FfdG9fY2xlYW4oY3EpO1xcbitcXHR3aGlsZSAoZW5pY19hZG1pbl9jcV9jb2xvcihkZXNjLCBjcS1cXHUwMDNlcmluZy5kZXNjX3NpemUpICE9XFxuK1xcdCAgICAgICBjcS1cXHUwMDNlbGFzdF9jb2xvcikge1xcbitcXHRcXHR2bmljX2NxX2luY190b19jbGVhbihjcSk7XFxuK1xcdFxcdHdvcmsrKztcXG4rXFx0XFx0ZGVzYyA9IHZuaWNfY3FfdG9fY2xlYW4oY3EpO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gd29yaztcXG4rfVxcbitcXG4rLyogVXBwZXIgYm91bmQgb24gcGVuZGluZyBhZG1pbiBtZXNzYWdlcy4gIEEgYnVnZ3kgb3IgaG9zdGlsZSBWRiBjb3VsZCBmbG9vZFxcbisgKiB0aGUgUEYgYWRtaW4gY2hhbm5lbCBmYXN0ZXIgdGhhbiBhZG1pbl9tc2dfd29yayBkcmFpbnMgaXQ7IGNhcCB0aGUgYmFja2xvZ1xcbisgKiBzbyBhIGd1ZXN0IGNhbm5vdCBkcml2ZSB0aGUgaG9zdCBvdXQgb2YgbWVtb3J5LlxcbisgKi9cXG4rI2RlZmluZSBFTklDX0FETUlOX01TR19NQVhcXHQyNTZcXG4rXFxuK3N0YXRpYyB2b2lkIGVuaWNfYWRtaW5fbXNnX2VucXVldWUoc3RydWN0IGVuaWMgKmVuaWMsIHZvaWQgKmJ1ZixcXG4rXFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgaW50IGxlbilcXG4re1xcbitcXHRzdHJ1Y3QgZW5pY19hZG1pbl9tc2cgKm1zZztcXG4rXFxuK1xcdG1zZyA9IGttYWxsb2Moc3RydWN0X3NpemUobXNnLCBkYXRhLCBsZW4pLCBHRlBfS0VSTkVMKTtcXG4rXFx0aWYgKCFtc2cpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdG1zZy1cXHUwMDNlbGVuID0gbGVuO1xcbitcXHRtZW1jcHkobXNnLVxcdTAwM2VkYXRhLCBidWYsIGxlbik7XFxuK1xcbitcXHRzcGluX2xvY2soXFx1MDAyNmVuaWMtXFx1MDAzZWFkbWluX21zZ19sb2NrKTtcXG4rXFx0aWYgKGVuaWMtXFx1MDAzZWFkbWluX21zZ19jb3VudCBcXHUwMDNlPSBFTklDX0FETUlOX01TR19NQVgpIHtcXG4rXFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNmVuaWMtXFx1MDAzZWFkbWluX21zZ19sb2NrKTtcXG4rXFx0XFx0a2ZyZWUobXNnKTtcXG4rXFx0XFx0aWYgKG5ldF9yYXRlbGltaXQoKSlcXG4rXFx0XFx0XFx0bmV0ZGV2X3dhcm4oZW5pYy1cXHUwMDNlbmV0ZGV2LFxcbitcXHRcXHRcXHRcXHQgICAgXFxcImFkbWluIG1zZyBiYWNrbG9nIGZ1bGwgKCV1KTsgZHJvcHBpbmdcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgICBFTklDX0FETUlOX01TR19NQVgpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFx0bGlzdF9hZGRfdGFpbChcXHUwMDI2bXNnLVxcdTAwM2VsaXN0LCBcXHUwMDI2ZW5pYy1cXHUwMDNlYWRtaW5fbXNnX2xpc3QpO1xcbitcXHRlbmljLVxcdTAwM2VhZG1pbl9tc2dfY291bnQrKztcXG4rXFx0c3Bpbl91bmxvY2soXFx1MDAyNmVuaWMtXFx1MDAzZWFkbWluX21zZ19sb2NrKTtcXG4rfVxcbitcXG4rdW5zaWduZWQgaW50IGVuaWNfYWRtaW5fcnFfY3Ffc2VydmljZShzdHJ1Y3QgZW5pYyAqZW5pYylcXG4re1xcbitcXHRzdHJ1Y3Qgdm5pY19jcSAqY3EgPSBcXHUwMDI2ZW5pYy1cXHUwMDNlYWRtaW5fY3FbMV07XFxuK1xcdHN0cnVjdCB2bmljX3JxICpycSA9IFxcdTAwMjZlbmljLVxcdTAwM2VhZG1pbl9ycTtcXG4rXFx0c3RydWN0IGNxX2VuZXRfcnFfZGVzYyAqcnFfZGVzYztcXG4rXFx0c3RydWN0IHZuaWNfcnFfYnVmICpidWY7XFxuK1xcdHUxNiBid2YsIGJ5dGVzX3dyaXR0ZW47XFxuK1xcdHVuc2lnbmVkIGludCB3b3JrID0gMDtcXG4rXFx0dm9pZCAqZGVzYztcXG4rXFxuK1xcdC8qIFRoZSBhZG1pbiBSUSBhbmQgaXRzIENRIGZvcm0gYSBzaW5nbGUgaW4tb3JkZXIgY2hhbm5lbDogZmlybXdhcmVcXG4rXFx0ICogcG9zdHMgZXhhY3RseSBvbmUgQ1FFIHBlciBjb25zdW1lZCBSUSBkZXNjcmlwdG9yLCBpbiBzdWJtaXNzaW9uXFxuK1xcdCAqIG9yZGVyLiAgRWFjaCBDUUUgdGhlcmVmb3JlIHBhaXJzIHdpdGggcnEtXFx1MDAzZXRvX2NsZWFuIGJlbG93IHdpdGhvdXQgYVxcbitcXHQgKiBjb21wbGV0ZWRfaW5kZXggY3Jvc3MtY2hlY2ssIG1pcnJvcmluZyB0aGUgaW4tb3JkZXIgYXNzdW1wdGlvbiBvZlxcbitcXHQgKiB0aGUgbWFpbiBlbmljIFJYIHBhdGguXFxuK1xcdCAqL1xcbitcXHRkZXNjID0gdm5pY19jcV90b19jbGVhbihjcSk7XFxuK1xcdHdoaWxlIChlbmljX2FkbWluX2NxX2NvbG9yKGRlc2MsIGNxLVxcdTAwM2VyaW5nLmRlc2Nfc2l6ZSkgIT1cXG4rXFx0ICAgICAgIGNxLVxcdTAwM2VsYXN0X2NvbG9yKSB7XFxuK1xcdFxcdC8qIEVuc3VyZSBETUEgZGVzY3JpcHRvciBmaWVsZHMgYXJlIHJlYWQgYWZ0ZXJcXG4rXFx0XFx0ICogdGhlIGNvbG9yL3ZhbGlkIGNoZWNrLiAgZG1hX3JtYigpIGlzIHRoZVxcbitcXHRcXHQgKiBjb3JyZWN0IGJhcnJpZXIgZm9yIERNQS13cml0dGVuIGRlc2NyaXB0b3JzLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0ZG1hX3JtYigpO1xcbitcXHRcXHRidWYgPSBycS1cXHUwMDNldG9fY2xlYW47XFxuK1xcbitcXHRcXHQvKiBEZWNvZGUgdGhlIGFjdHVhbCBudW1iZXIgb2YgYnl0ZXMgaGFyZHdhcmUgd3JvdGUgaW50b1xcbitcXHRcXHQgKiB0aGUgUlggYnVmZmVyLiAgYnVmLVxcdTAwM2VsZW4gaXMgdGhlIHN0YXRpYyBhbGxvY2F0aW9uIHNpemVcXG4rXFx0XFx0ICogKEVOSUNfQURNSU5fQlVGX1NJWkUpIGFuZCB3b3VsZCBleHBvc2UgdW5pbml0aWFsaXNlZFxcbitcXHRcXHQgKiBoZWFwIG1lbW9yeSBiZXlvbmQgdGhlIHJlYWwgcGF5bG9hZC4gIGJ5dGVzX3dyaXR0ZW5fZmxhZ3NcXG4rXFx0XFx0ICogaXMgYXQgdGhlIHNhbWUgb2Zmc2V0IGluIGV2ZXJ5IGNxX2VuZXRfcnFfZGVzY1tfMzJ8XzY0XVxcbitcXHRcXHQgKiB2YXJpYW50LlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0cnFfZGVzYyA9IGRlc2M7XFxuK1xcdFxcdGJ3ZiA9IGxlMTZfdG9fY3B1KHJxX2Rlc2MtXFx1MDAzZWJ5dGVzX3dyaXR0ZW5fZmxhZ3MpO1xcbitcXHRcXHRieXRlc193cml0dGVuID0gYndmIFxcdTAwMjYgQ1FfRU5FVF9SUV9ERVNDX0JZVEVTX1dSSVRURU5fTUFTSztcXG4rXFx0XFx0aWYgKGJ5dGVzX3dyaXR0ZW4gXFx1MDAzZSBidWYtXFx1MDAzZWxlbilcXG4rXFx0XFx0XFx0Z290byBuZXh0X2Rlc2M7XFxuK1xcbitcXHRcXHRkbWFfc3luY19zaW5nbGVfZm9yX2NwdShcXHUwMDI2ZW5pYy1cXHUwMDNlcGRldi1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHRcXHRcXHRidWYtXFx1MDAzZWRtYV9hZGRyLCBidWYtXFx1MDAzZWxlbixcXG4rXFx0XFx0XFx0XFx0XFx0RE1BX0ZST01fREVWSUNFKTtcXG4rXFxuK1xcdFxcdC8qIERyb3Agb24gaGFyZHdhcmUgZXJyb3IgaW5kaWNhdGlvbnMuICBBZG1pbiBtZXNzYWdlc1xcbitcXHRcXHQgKiBhcmUgaW50ZXJuYWwgdG8gdGhlIFZJQywgbm90IHJlY2VpdmVkIG92ZXIgdGhlIHdpcmUuXFxuK1xcdFxcdCAqIEZpcm13YXJlIHNldHMgVFJVTkNBVEVEIHdoZW4gdGhlIG1lc3NhZ2UgZG9lcyBub3QgZml0XFxuK1xcdFxcdCAqIGluIHRoZSBwb3N0ZWQgYnVmZmVyLCBhbmQgRkNTX09LIGlzIGFsd2F5cyBzZXQgb25cXG4rXFx0XFx0ICogaGVhbHRoeSBhZG1pbiBjb21wbGV0aW9ucy5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmIChid2YgXFx1MDAyNiBDUV9FTkVUX1JRX0RFU0NfRkxBR1NfVFJVTkNBVEVEKSB7XFxuK1xcdFxcdFxcdG5ldGRldl93YXJuX29uY2UoZW5pYy1cXHUwMDNlbmV0ZGV2LFxcbitcXHRcXHRcXHRcXHRcXHQgXFxcImFkbWluIFJROiB0cnVuY2F0ZWQgbWVzc2FnZSBkcm9wcGVkXFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0Z290byBuZXh0X2Rlc2M7XFxuK1xcdFxcdH1cXG4rXFx0XFx0aWYgKCEocnFfZGVzYy1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBDUV9FTkVUX1JRX0RFU0NfRkxBR1NfRkNTX09LKSkge1xcbitcXHRcXHRcXHRuZXRkZXZfd2Fybl9vbmNlKGVuaWMtXFx1MDAzZW5ldGRldixcXG4rXFx0XFx0XFx0XFx0XFx0IFxcXCJhZG1pbiBSUTogYmFkIEZDUywgZHJvcHBpbmcgbWVzc2FnZVxcXFxuXFxcIik7XFxuK1xcdFxcdFxcdGdvdG8gbmV4dF9kZXNjO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRpZiAoZW5pYy1cXHUwMDNlYWRtaW5fcnFfaGFuZGxlcikge1xcbitcXHRcXHRcXHR1MTYgc2VuZGVyX3ZsYW47XFxuK1xcbitcXHRcXHRcXHQvKiBGaXJtd2FyZSBzZXRzIHRoZSBDUSBWTEFOIGZpZWxkIHRvIGlkZW50aWZ5IHRoZVxcbitcXHRcXHRcXHQgKiBzZW5kZXI6IDAgPSBQRiwgMS1iYXNlZCA9IFZGIGluZGV4LiAgT3ZlcndyaXRlXFxuK1xcdFxcdFxcdCAqIHRoZSB1bnRydXN0ZWQgc3JjX3ZuaWNfaWQgaW4gdGhlIE1CT1ggaGVhZGVyIHdpdGhcXG4rXFx0XFx0XFx0ICogdGhlIGhhcmR3YXJlLXZlcmlmaWVkIHZhbHVlLlxcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0c2VuZGVyX3ZsYW4gPSBsZTE2X3RvX2NwdShycV9kZXNjLVxcdTAwM2V2bGFuKTtcXG4rXFx0XFx0XFx0aWYgKGJ5dGVzX3dyaXR0ZW4gXFx1MDAzZT0gc2l6ZW9mKHN0cnVjdCBlbmljX21ib3hfaGRyKSkge1xcbitcXHRcXHRcXHRcXHRzdHJ1Y3QgZW5pY19tYm94X2hkciAqaGRyID0gYnVmLVxcdTAwM2Vvc19idWY7XFxuK1xcbitcXHRcXHRcXHRcXHRoZHItXFx1MDAzZXNyY192bmljX2lkID0gKHNlbmRlcl92bGFuID09IDApID9cXG4rXFx0XFx0XFx0XFx0XFx0Y3B1X3RvX2xlMTYoRU5JQ19NQk9YX0RTVF9QRikgOlxcbitcXHRcXHRcXHRcXHRcXHRjcHVfdG9fbGUxNihzZW5kZXJfdmxhbiAtIDEpO1xcbitcXHRcXHRcXHR9XFxuK1xcbitcXHRcXHRcXHRlbmljX2FkbWluX21zZ19lbnF1ZXVlKGVuaWMsIGJ1Zi1cXHUwMDNlb3NfYnVmLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgYnl0ZXNfd3JpdHRlbik7XFxuK1xcdFxcdH1cXG4rXFxuK25leHRfZGVzYzpcXG4rXFx0XFx0ZW5pY19hZG1pbl9ycV9idWZfY2xlYW4ocnEsIHJxLVxcdTAwM2V0b19jbGVhbik7XFxuK1xcdFxcdHJxLVxcdTAwM2V0b19jbGVhbiA9IHJxLVxcdTAwM2V0b19jbGVhbi1cXHUwMDNlbmV4dDtcXG4rXFx0XFx0cnEtXFx1MDAzZXJpbmcuZGVzY19hdmFpbCsrO1xcbitcXG4rXFx0XFx0dm5pY19jcV9pbmNfdG9fY2xlYW4oY3EpO1xcbitcXHRcXHR3b3JrKys7XFxuK1xcdFxcdGRlc2MgPSB2bmljX2NxX3RvX2NsZWFuKGNxKTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKGVuaWNfYWRtaW5fcnFfZmlsbChlbmljLCBHRlBfS0VSTkVMKSBcXHUwMDI2XFx1MDAyNiBuZXRfcmF0ZWxpbWl0KCkpXFxuK1xcdFxcdG5ldGRldl93YXJuKGVuaWMtXFx1MDAzZW5ldGRldixcXG4rXFx0XFx0XFx0ICAgIFxcXCJhZG1pbiBSUSByZWZpbGwgZmFpbGVkXFxcXG5cXFwiKTtcXG4rXFxuK1xcdHJldHVybiB3b3JrO1xcbit9XFxuK1xcbitzdGF0aWMgaXJxcmV0dXJuX3QgZW5pY19hZG1pbl9pc3JfbXNpeChpbnQgaXJxLCB2b2lkICpkYXRhKVxcbit7XFxuK1xcdHN0cnVjdCBlbmljICplbmljID0gZGF0YTtcXG4rXFxuK1xcdHNjaGVkdWxlX3dvcmsoXFx1MDAyNmVuaWMtXFx1MDAzZWFkbWluX3BvbGxfd29yayk7XFxuK1xcbitcXHRyZXR1cm4gSVJRX0hBTkRMRUQ7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGVuaWNfYWRtaW5fbXNnX3dvcmtfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuK3tcXG4rXFx0c3RydWN0IGVuaWMgKmVuaWMgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGVuaWMsIGFkbWluX21zZ193b3JrKTtcXG4rXFx0c3RydWN0IGVuaWNfYWRtaW5fbXNnICptc2csICp0bXA7XFxuK1xcdExJU1RfSEVBRChsb2NhbF9saXN0KTtcXG4rXFxuK1xcdHNwaW5fbG9ja19iaChcXHUwMDI2ZW5pYy1cXHUwMDNlYWRtaW5fbXNnX2xvY2spO1xcbitcXHRsaXN0X3NwbGljZV9pbml0KFxcdTAwMjZlbmljLVxcdTAwM2VhZG1pbl9tc2dfbGlzdCwgXFx1MDAyNmxvY2FsX2xpc3QpO1xcbitcXHRlbmljLVxcdTAwM2VhZG1pbl9tc2dfY291bnQgPSAwO1xcbitcXHRzcGluX3VubG9ja19iaChcXHUwMDI2ZW5pYy1cXHUwMDNlYWRtaW5fbXNnX2xvY2spO1xcbitcXG4rXFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG1zZywgdG1wLCBcXHUwMDI2bG9jYWxfbGlzdCwgbGlzdCkge1xcbitcXHRcXHRpZiAoZW5pYy1cXHUwMDNlYWRtaW5fcnFfaGFuZGxlcilcXG4rXFx0XFx0XFx0ZW5pYy1cXHUwMDNlYWRtaW5fcnFfaGFuZGxlcihlbmljLCBtc2ctXFx1MDAzZWRhdGEsIG1zZy1cXHUwMDNlbGVuKTtcXG4rXFx0XFx0bGlzdF9kZWwoXFx1MDAyNm1zZy1cXHUwMDNlbGlzdCk7XFxuK1xcdFxcdGtmcmVlKG1zZyk7XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgZW5pY19hZG1pbl9wb2xsX3dvcmtfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuK3tcXG4rXFx0c3RydWN0IGVuaWMgKmVuaWMgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGVuaWMsIGFkbWluX3BvbGxfd29yayk7XFxuK1xcdHVuc2lnbmVkIGludCBjcmVkaXRzO1xcbitcXHR1bnNpZ25lZCBpbnQgcnFfd29yaztcXG4rXFxuK1xcdGNyZWRpdHMgPSB2bmljX2ludHJfY3JlZGl0cyhcXHUwMDI2ZW5pYy1cXHUwMDNlYWRtaW5faW50cik7XFxuK1xcbitcXHRycV93b3JrID0gZW5pY19hZG1pbl9ycV9jcV9zZXJ2aWNlKGVuaWMpO1xcbitcXG4rXFx0aWYgKHJxX3dvcmsgXFx1MDAzZSAwKVxcbitcXHRcXHRzY2hlZHVsZV93b3JrKFxcdTAwMjZlbmljLVxcdTAwM2VhZG1pbl9tc2dfd29yayk7XFxuK1xcbitcXHR2bmljX2ludHJfcmV0dXJuX2NyZWRpdHMoXFx1MDAyNmVuaWMtXFx1MDAzZWFkbWluX2ludHIsXFxuK1xcdFxcdFxcdFxcdCBjcmVkaXRzID86IDEsXFxuK1xcdFxcdFxcdFxcdCAxIC8qIHVubWFzayAqLywgMCk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgZW5pY19hZG1pbl9zZXR1cF9pbnRyKHN0cnVjdCBlbmljICplbmljKVxcbit7XFxuK1xcdHVuc2lnbmVkIGludCBpbnRyX2luZGV4ID0gZW5pYy1cXHUwMDNlaW50cl9jb3VudDtcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdGlmICh2bmljX2Rldl9nZXRfaW50cl9tb2RlKGVuaWMtXFx1MDAzZXZkZXYpICE9IFZOSUNfREVWX0lOVFJfTU9ERV9NU0lYIHx8XFxuK1xcdCAgICBpbnRyX2luZGV4IFxcdTAwM2U9IGVuaWMtXFx1MDAzZWludHJfYXZhaWwpXFxuK1xcdFxcdHJldHVybiAtRU5PREVWO1xcbitcXG4rXFx0LyogVGhlIGFkbWluIElOVFIgdXNlcyBhIHNsb3QgaW4gdGhlIHNhbWUgUkVTX1RZUEVfSU5UUl9DVFJMXFxuK1xcdCAqIHN0cmlkZWQgYXJyYXkgb2YgcGVyLXZlY3RvciBjb250cm9sIGJsb2NrcyAobWFzaywgY29hbGVzY2luZ1xcbitcXHQgKiB0aW1lciwgY3JlZGl0IHJldHVybikgdGhhdCB0aGUgZGF0YS1wYXRoIElSUXMgb2NjdXB5IGluIEJBUjAuXFxuK1xcdCAqIHZuaWNfaW50cl9hbGxvYygpIGRlZmF1bHRzIHRvIFJFU19UWVBFX0lOVFJfQ1RSTCwgd2hpY2ggaXMgd2hhdFxcbitcXHQgKiB3ZSB3YW50IGhlcmUuXFxuK1xcdCAqL1xcbitcXHRlcnIgPSB2bmljX2ludHJfYWxsb2MoZW5pYy1cXHUwMDNldmRldiwgXFx1MDAyNmVuaWMtXFx1MDAzZWFkbWluX2ludHIsIGludHJfaW5kZXgpO1xcbitcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdG5ldGRldl93YXJuKGVuaWMtXFx1MDAzZW5ldGRldixcXG4rXFx0XFx0XFx0ICAgIFxcXCJGYWlsZWQgdG8gYWxsb2MgYWRtaW4gaW50ciBhdCBpbmRleCAldTogJWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgICBpbnRyX2luZGV4LCBlcnIpO1xcbitcXHRcXHRyZXR1cm4gZXJyO1xcbitcXHR9XFxuK1xcbitcXHRlbmljLVxcdTAwM2VhZG1pbl9pbnRyX2luZGV4ID0gaW50cl9pbmRleDtcXG4rXFxuK1xcdC8qIEEgVjIgVkYgb3BlbnMgdGhlIGFkbWluIGNoYW5uZWwgZHVyaW5nIHByb2JlLCBiZWZvcmVcXG4rXFx0ICogcmVnaXN0ZXJfbmV0ZGV2KCkgcmVzb2x2ZXMgdGhlIFxcXCJldGglZFxcXCIgbmFtZSB0ZW1wbGF0ZSwgc28gdXNpbmdcXG4rXFx0ICogbmV0ZGV2LVxcdTAwM2VuYW1lIGhlcmUgd291bGQgcmVnaXN0ZXIgdGhlIGxpdGVyYWwgXFxcImV0aCVkLWFkbWluXFxcIiBpblxcbitcXHQgKiAvcHJvYy9pbnRlcnJ1cHRzLiAgVXNlIHRoZSBhbHJlYWR5LXN0YWJsZSBQQ0kgZGV2aWNlIG5hbWUgaW5zdGVhZC5cXG4rXFx0ICovXFxuK1xcdHNucHJpbnRmKGVuaWMtXFx1MDAzZW1zaXhbaW50cl9pbmRleF0uZGV2bmFtZSxcXG4rXFx0XFx0IHNpemVvZihlbmljLVxcdTAwM2Vtc2l4W2ludHJfaW5kZXhdLmRldm5hbWUpLFxcbitcXHRcXHQgXFxcIiVzLWFkbWluXFxcIiwgcGNpX25hbWUoZW5pYy1cXHUwMDNlcGRldikpO1xcbitcXHRlbmljLVxcdTAwM2Vtc2l4W2ludHJfaW5kZXhdLmlzciA9IGVuaWNfYWRtaW5faXNyX21zaXg7XFxuK1xcdGVuaWMtXFx1MDAzZW1zaXhbaW50cl9pbmRleF0uZGV2aWQgPSBlbmljO1xcbitcXG4rXFx0ZXJyID0gcmVxdWVzdF9pcnEoZW5pYy1cXHUwMDNlbXNpeF9lbnRyeVtpbnRyX2luZGV4XS52ZWN0b3IsXFxuK1xcdFxcdFxcdCAgZW5pYy1cXHUwMDNlbXNpeFtpbnRyX2luZGV4XS5pc3IsIDAsXFxuK1xcdFxcdFxcdCAgZW5pYy1cXHUwMDNlbXNpeFtpbnRyX2luZGV4XS5kZXZuYW1lLFxcbitcXHRcXHRcXHQgIGVuaWMtXFx1MDAzZW1zaXhbaW50cl9pbmRleF0uZGV2aWQpO1xcbitcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdG5ldGRldl93YXJuKGVuaWMtXFx1MDAzZW5ldGRldixcXG4rXFx0XFx0XFx0ICAgIFxcXCJGYWlsZWQgdG8gcmVxdWVzdCBhZG1pbiBNU0ktWCBpcnE6ICVkXFxcXG5cXFwiLCBlcnIpO1xcbitcXHRcXHR2bmljX2ludHJfZnJlZShcXHUwMDI2ZW5pYy1cXHUwMDNlYWRtaW5faW50cik7XFxuK1xcdFxcdHJldHVybiBlcnI7XFxuK1xcdH1cXG4rXFxuK1xcdGVuaWMtXFx1MDAzZW1zaXhbaW50cl9pbmRleF0ucmVxdWVzdGVkID0gMTtcXG4rXFxuK1xcdG5ldGRldl9kYmcoZW5pYy1cXHUwMDNlbmV0ZGV2LFxcbitcXHRcXHQgICBcXFwiYWRtaW4gY2hhbm5lbCB1c2luZyBNU0ktWCBpbnRlcnJ1cHQgKGluZGV4ICV1KVxcXFxuXFxcIixcXG4rXFx0XFx0ICAgaW50cl9pbmRleCk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgZW5pY19hZG1pbl90ZWFyZG93bl9pbnRyKHN0cnVjdCBlbmljICplbmljKVxcbit7XFxuK1xcdHVuc2lnbmVkIGludCBpbnRyX2luZGV4ID0gZW5pYy1cXHUwMDNlYWRtaW5faW50cl9pbmRleDtcXG4rXFxuK1xcdGZyZWVfaXJxKGVuaWMtXFx1MDAzZW1zaXhfZW50cnlbaW50cl9pbmRleF0udmVjdG9yLFxcbitcXHRcXHQgZW5pYy1cXHUwMDNlbXNpeFtpbnRyX2luZGV4XS5kZXZpZCk7XFxuK1xcdGNhbmNlbF93b3JrX3N5bmMoXFx1MDAyNmVuaWMtXFx1MDAzZWFkbWluX3BvbGxfd29yayk7XFxuK1xcdGVuaWMtXFx1MDAzZW1zaXhbaW50cl9pbmRleF0ucmVxdWVzdGVkID0gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBlbmljX2FkbWluX3FwX3R5cGVfc2V0KHN0cnVjdCBlbmljICplbmljLCB1MzIgZW5hYmxlKVxcbit7XFxuK1xcdHU2NCBhMCA9IFFQX1RZUEVfQURNSU4sIGExID0gZW5hYmxlO1xcbitcXHRpbnQgd2FpdCA9IDEwMDA7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHRzcGluX2xvY2tfYmgoXFx1MDAyNmVuaWMtXFx1MDAzZWRldmNtZF9sb2NrKTtcXG4rXFx0ZXJyID0gdm5pY19kZXZfY21kKGVuaWMtXFx1MDAzZXZkZXYsIENNRF9RUF9UWVBFX1NFVCwgXFx1MDAyNmEwLCBcXHUwMDI2YTEsIHdhaXQpO1xcbitcXHRzcGluX3VubG9ja19iaChcXHUwMDI2ZW5pYy1cXHUwMDNlZGV2Y21kX2xvY2spO1xcbitcXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbitcXG4rc3RhdGljIGludCBlbmljX2FkbWluX2FsbG9jX3Jlc291cmNlcyhzdHJ1Y3QgZW5pYyAqZW5pYylcXG4re1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0ZXJyID0gdm5pY193cV9hbGxvY193aXRoX3R5cGUoZW5pYy1cXHUwMDNldmRldiwgXFx1MDAyNmVuaWMtXFx1MDAzZWFkbWluX3dxLCAwLFxcbitcXHRcXHRcXHRcXHQgICAgICBFTklDX0FETUlOX0RFU0NfQ09VTlQsXFxuK1xcdFxcdFxcdFxcdCAgICAgIHNpemVvZihzdHJ1Y3Qgd3FfZW5ldF9kZXNjKSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgUkVTX1RZUEVfQURNSU5fV1EpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRyZXR1cm4gZXJyO1xcbitcXG4rXFx0ZXJyID0gdm5pY19ycV9hbGxvY193aXRoX3R5cGUoZW5pYy1cXHUwMDNldmRldiwgXFx1MDAyNmVuaWMtXFx1MDAzZWFkbWluX3JxLCAwLFxcbitcXHRcXHRcXHRcXHQgICAgICBFTklDX0FETUlOX0RFU0NfQ09VTlQsXFxuK1xcdFxcdFxcdFxcdCAgICAgIHNpemVvZihzdHJ1Y3QgcnFfZW5ldF9kZXNjKSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgUkVTX1RZUEVfQURNSU5fUlEpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRnb3RvIGZyZWVfd3E7XFxuK1xcbitcXHQvKiBhZG1pbl9jcVswXSBpcyB0aGUgV1EgY29tcGxldGlvbiBxdWV1ZS4gIFdRIENRRXMgYXJlIGFsd2F5c1xcbitcXHQgKiAxNiBieXRlcyB3aWRlOyBmaXJtd2FyZSBhbHdheXMgd3JpdGVzIDE2LWJ5dGUgQ1FFcyBmb3IgV1FcXG4rXFx0ICogY29tcGxldGlvbnMgb24gZXZlcnkgV1EsIGluY2x1ZGluZyB0aGUgYWRtaW4gY2hhbm5lbCBXUS5cXG4rXFx0ICogVXNlIHNpemVvZihzdHJ1Y3QgY3FfZGVzYykgYWNjb3JkaW5nbHkuXFxuK1xcdCAqL1xcbitcXHRlcnIgPSB2bmljX2NxX2FsbG9jX3dpdGhfdHlwZShlbmljLVxcdTAwM2V2ZGV2LCBcXHUwMDI2ZW5pYy1cXHUwMDNlYWRtaW5fY3FbMF0sIDAsXFxuK1xcdFxcdFxcdFxcdCAgICAgIEVOSUNfQURNSU5fREVTQ19DT1VOVCxcXG4rXFx0XFx0XFx0XFx0ICAgICAgc2l6ZW9mKHN0cnVjdCBjcV9kZXNjKSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgUkVTX1RZUEVfQURNSU5fQ1EpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRnb3RvIGZyZWVfcnE7XFxuK1xcbitcXHQvKiBhZG1pbl9jcVsxXSBpcyB0aGUgUlEgY29tcGxldGlvbiBxdWV1ZS4gIEl0cyBkZXNjcmlwdG9yIHNpemVcXG4rXFx0ICogbXVzdCBtYXRjaCB3aGF0IGZpcm13YXJlIHdyaXRlcy4gIGVuaWNfZXh0X2NxKCkgY2FsbGVkIGVhcmxpZXJcXG4rXFx0ICogaW4gcHJvYmUgaXNzdWVzIENNRF9DUV9FTlRSWV9TSVpFX1NFVCBmb3IgVk5JQ19SUV9BTEwsXFxuK1xcdCAqIHByb2dyYW1taW5nIGZpcm13YXJlIHRvIHdyaXRlIENRIGVudHJpZXMgb2YgKDE2IFxcdTAwM2NcXHUwMDNjIGVuaWMtXFx1MDAzZWV4dF9jcSlcXG4rXFx0ICogYnl0ZXMgZm9yIGV2ZXJ5IFJRIENRIG9uIHRoZSB2TklDLCBpbmNsdWRpbmcgdGhlIGFkbWluIFJRIENRLlxcbitcXHQgKiBBbGxvY2F0aW5nIHdpdGggdGhlIHNhbWUgc2l6ZSBrZWVwcyB0aGUgaG9zdCBwb2xsZXIgYW5kXFxuK1xcdCAqIGZpcm13YXJlIGluIGxvY2tzdGVwOlxcbitcXHQgKlxcbitcXHQgKiAgIC0gVGhlIGNvbG9yL3ZhbGlkIGJpdCBsaXZlcyBhdCBieXRlIChkZXNjX3NpemUgLSAxKSBvZiBldmVyeVxcbitcXHQgKiAgICAgY3FfZW5ldF9ycV9kZXNjW18zMnxfNjRdIHZhcmlhbnQsIHNvIGVuaWNfYWRtaW5fY3FfY29sb3IoKVxcbitcXHQgKiAgICAgcmVhZHMgaXQgZnJvbSB0aGUgY29ycmVjdCBvZmZzZXQuXFxuK1xcdCAqICAgLSBPbmx5IHRoZSBmaXJzdCAxNSBieXRlcyBvZiB0aGUgZGVzY3JpcHRvciAodmxhbixcXG4rXFx0ICogICAgIGJ5dGVzX3dyaXR0ZW5fZmxhZ3MsIC4uLikgYXJlIGFjY2Vzc2VkIGJ5IHRoZSBhZG1pbiBwYXRoO1xcbitcXHQgKiAgICAgdGhlc2UgZmllbGRzIGFyZSBpZGVudGljYWwgYWNyb3NzIGFsbCB0aHJlZSB2YXJpYW50cyAoc2VlXFxuK1xcdCAqICAgICBjb21tZW50IGluIGVuaWNfcnEuYyBhYm92ZSBjcV9lbmV0X3JxX2Rlc2NfZGVjKCkpLlxcbitcXHQgKi9cXG4rXFx0ZXJyID0gdm5pY19jcV9hbGxvY193aXRoX3R5cGUoZW5pYy1cXHUwMDNldmRldiwgXFx1MDAyNmVuaWMtXFx1MDAzZWFkbWluX2NxWzFdLCAxLFxcbitcXHRcXHRcXHRcXHQgICAgICBFTklDX0FETUlOX0RFU0NfQ09VTlQsXFxuK1xcdFxcdFxcdFxcdCAgICAgIDE2IFxcdTAwM2NcXHUwMDNjIGVuaWMtXFx1MDAzZWV4dF9jcSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgUkVTX1RZUEVfQURNSU5fQ1EpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRnb3RvIGZyZWVfY3EwO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK1xcbitmcmVlX2NxMDpcXG4rXFx0dm5pY19jcV9mcmVlKFxcdTAwMjZlbmljLVxcdTAwM2VhZG1pbl9jcVswXSk7XFxuK2ZyZWVfcnE6XFxuK1xcdHZuaWNfcnFfZnJlZShcXHUwMDI2ZW5pYy1cXHUwMDNlYWRtaW5fcnEpO1xcbitmcmVlX3dxOlxcbitcXHR2bmljX3dxX2ZyZWUoXFx1MDAyNmVuaWMtXFx1MDAzZWFkbWluX3dxKTtcXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgZW5pY19hZG1pbl9mcmVlX3Jlc291cmNlcyhzdHJ1Y3QgZW5pYyAqZW5pYylcXG4re1xcbitcXHR2bmljX2ludHJfZnJlZShcXHUwMDI2ZW5pYy1cXHUwMDNlYWRtaW5faW50cik7XFxuK1xcdHZuaWNfY3FfZnJlZShcXHUwMDI2ZW5pYy1cXHUwMDNlYWRtaW5fY3FbMV0pO1xcbitcXHR2bmljX2NxX2ZyZWUoXFx1MDAyNmVuaWMtXFx1MDAzZWFkbWluX2NxWzBdKTtcXG4rXFx0dm5pY19ycV9mcmVlKFxcdTAwMjZlbmljLVxcdTAwM2VhZG1pbl9ycSk7XFxuK1xcdHZuaWNfd3FfZnJlZShcXHUwMDI2ZW5pYy1cXHUwMDNlYWRtaW5fd3EpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBlbmljX2FkbWluX2luaXRfcmVzb3VyY2VzKHN0cnVjdCBlbmljICplbmljKVxcbit7XFxuK1xcdHVuc2lnbmVkIGludCBpbnRyX29mZnNldCA9IGVuaWMtXFx1MDAzZWFkbWluX2ludHJfaW5kZXg7XFxuK1xcbitcXHR2bmljX3dxX2luaXQoXFx1MDAyNmVuaWMtXFx1MDAzZWFkbWluX3dxLFxcbitcXHRcXHQgICAgIDAsIDAsIDApOyAvKiBjcV9pbmRleCwgZXJyX2ludHJfZW5hYmxlLCBlcnJfaW50cl9vZmZzZXQgKi9cXG4rXFx0dm5pY19ycV9pbml0KFxcdTAwMjZlbmljLVxcdTAwM2VhZG1pbl9ycSxcXG4rXFx0XFx0ICAgICAxLCAwLCAwKTsgLyogY3FfaW5kZXgsIGVycl9pbnRyX2VuYWJsZSwgZXJyX2ludHJfb2Zmc2V0ICovXFxuK1xcdHZuaWNfY3FfaW5pdChcXHUwMDI2ZW5pYy1cXHUwMDNlYWRtaW5fY3FbMF0sXFxuK1xcdFxcdCAgICAgVk5JQ19DUV9GQ19ESVNBQkxFLFxcbitcXHRcXHQgICAgIFZOSUNfQ1FfQ09MT1JfRU5BQkxFLFxcbitcXHRcXHQgICAgIDAsIDAsIDEsIC8qIGNxX2hlYWQsIGNxX3RhaWwsIGNxX3RhaWxfY29sb3IgKi9cXG4rXFx0XFx0ICAgICBWTklDX0NRX0lOVFJfRElTQUJMRSwgLyogcG9sbGVkIHN5bmNocm9ub3VzbHkgYnkgbWJveCBzZW5kICovXFxuK1xcdFxcdCAgICAgVk5JQ19DUV9FTlRSWV9FTkFCTEUsXFxuK1xcdFxcdCAgICAgVk5JQ19DUV9NU0dfRElTQUJMRSxcXG4rXFx0XFx0ICAgICBpbnRyX29mZnNldCxcXG4rXFx0XFx0ICAgICAwIC8qIGNxX21lc3NhZ2VfYWRkciAqLyk7XFxuK1xcdHZuaWNfY3FfaW5pdChcXHUwMDI2ZW5pYy1cXHUwMDNlYWRtaW5fY3FbMV0sXFxuK1xcdFxcdCAgICAgVk5JQ19DUV9GQ19ESVNBQkxFLFxcbitcXHRcXHQgICAgIFZOSUNfQ1FfQ09MT1JfRU5BQkxFLFxcbitcXHRcXHQgICAgIDAsIDAsIDEsIC8qIGNxX2hlYWQsIGNxX3RhaWwsIGNxX3RhaWxfY29sb3IgKi9cXG4rXFx0XFx0ICAgICBWTklDX0NRX0lOVFJfRU5BQkxFLFxcbitcXHRcXHQgICAgIFZOSUNfQ1FfRU5UUllfRU5BQkxFLFxcbitcXHRcXHQgICAgIFZOSUNfQ1FfTVNHX0RJU0FCTEUsXFxuK1xcdFxcdCAgICAgaW50cl9vZmZzZXQsXFxuK1xcdFxcdCAgICAgMCAvKiBjcV9tZXNzYWdlX2FkZHIgKi8pO1xcbitcXHQvKiBjb2FsZXNjaW5nX3RpbWVyLCBjb2FsZXNjaW5nX3R5cGUsIG1hc2tfb25fYXNzZXJ0aW9uICovXFxuK1xcdHZuaWNfaW50cl9pbml0KFxcdTAwMjZlbmljLVxcdTAwM2VhZG1pbl9pbnRyLFxcbitcXHRcXHQgICAgICAgMCwgMCwgMSk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGVuaWNfYWRtaW5fbXNnX2RyYWluKHN0cnVjdCBlbmljICplbmljKVxcbit7XFxuK1xcdHN0cnVjdCBlbmljX2FkbWluX21zZyAqbXNnLCAqdG1wO1xcbitcXG4rXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZlbmljLVxcdTAwM2VhZG1pbl9tc2dfbG9jayk7XFxuK1xcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShtc2csIHRtcCwgXFx1MDAyNmVuaWMtXFx1MDAzZWFkbWluX21zZ19saXN0LCBsaXN0KSB7XFxuK1xcdFxcdGxpc3RfZGVsKFxcdTAwMjZtc2ctXFx1MDAzZWxpc3QpO1xcbitcXHRcXHRrZnJlZShtc2cpO1xcbitcXHR9XFxuK1xcdGVuaWMtXFx1MDAzZWFkbWluX21zZ19jb3VudCA9IDA7XFxuK1xcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZlbmljLVxcdTAwM2VhZG1pbl9tc2dfbG9jayk7XFxuK31cXG4rXFxuK2ludCBlbmljX2FkbWluX2NoYW5uZWxfb3BlbihzdHJ1Y3QgZW5pYyAqZW5pYylcXG4re1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0aWYgKCFlbmljLVxcdTAwM2VoYXNfYWRtaW5fY2hhbm5lbClcXG4rXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuK1xcbitcXHRlcnIgPSBlbmljX2FkbWluX2FsbG9jX3Jlc291cmNlcyhlbmljKTtcXG4rXFx0aWYgKGVycikge1xcbitcXHRcXHRuZXRkZXZfZXJyKGVuaWMtXFx1MDAzZW5ldGRldixcXG4rXFx0XFx0XFx0ICAgXFxcIkZhaWxlZCB0byBhbGxvYyBhZG1pbiBjaGFubmVsIHJlc291cmNlczogJWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgIGVycik7XFxuK1xcdFxcdHJldHVybiBlcnI7XFxuK1xcdH1cXG4rXFxuK1xcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZlbmljLVxcdTAwM2VhZG1pbl9tc2dfbG9jayk7XFxuK1xcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZlbmljLVxcdTAwM2VhZG1pbl9tc2dfbGlzdCk7XFxuK1xcdElOSVRfV09SSyhcXHUwMDI2ZW5pYy1cXHUwMDNlYWRtaW5fbXNnX3dvcmssIGVuaWNfYWRtaW5fbXNnX3dvcmtfaGFuZGxlcik7XFxuK1xcdElOSVRfV09SSyhcXHUwMDI2ZW5pYy1cXHUwMDNlYWRtaW5fcG9sbF93b3JrLCBlbmljX2FkbWluX3BvbGxfd29ya19oYW5kbGVyKTtcXG4rXFxuK1xcdGVyciA9IGVuaWNfYWRtaW5fc2V0dXBfaW50cihlbmljKTtcXG4rXFx0aWYgKGVycikge1xcbitcXHRcXHRuZXRkZXZfZXJyKGVuaWMtXFx1MDAzZW5ldGRldixcXG4rXFx0XFx0XFx0ICAgXFxcIkFkbWluIGNoYW5uZWwgcmVxdWlyZXMgTVNJLVgsIFNSLUlPViB1bmF2YWlsYWJsZTogJWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgIGVycik7XFxuK1xcdFxcdGdvdG8gZnJlZV9yZXNvdXJjZXM7XFxuK1xcdH1cXG4rXFxuK1xcdGVuaWNfYWRtaW5faW5pdF9yZXNvdXJjZXMoZW5pYyk7XFxuK1xcbitcXHR2bmljX3dxX2VuYWJsZShcXHUwMDI2ZW5pYy1cXHUwMDNlYWRtaW5fd3EpO1xcbitcXHR2bmljX3JxX2VuYWJsZShcXHUwMDI2ZW5pYy1cXHUwMDNlYWRtaW5fcnEpO1xcbitcXG4rXFx0ZXJyID0gZW5pY19hZG1pbl9ycV9maWxsKGVuaWMsIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdG5ldGRldl9lcnIoZW5pYy1cXHUwMDNlbmV0ZGV2LFxcbitcXHRcXHRcXHQgICBcXFwiRmFpbGVkIHRvIGZpbGwgYWRtaW4gUlEgYnVmZmVyczogJWRcXFxcblxcXCIsIGVycik7XFxuK1xcdFxcdGdvdG8gZGlzYWJsZV9xdWV1ZXM7XFxuK1xcdH1cXG4rXFxuK1xcdGVyciA9IGVuaWNfYWRtaW5fcXBfdHlwZV9zZXQoZW5pYywgUVBfRU5BQkxFKTtcXG4rXFx0aWYgKGVycikge1xcbitcXHRcXHRuZXRkZXZfZXJyKGVuaWMtXFx1MDAzZW5ldGRldixcXG4rXFx0XFx0XFx0ICAgXFxcIkZhaWxlZCB0byBzZXQgYWRtaW4gUVAgdHlwZTogJWRcXFxcblxcXCIsIGVycik7XFxuK1xcdFxcdGdvdG8gZGlzYWJsZV9xdWV1ZXM7XFxuK1xcdH1cXG4rXFxuK1xcdHZuaWNfaW50cl91bm1hc2soXFx1MDAyNmVuaWMtXFx1MDAzZWFkbWluX2ludHIpO1xcbitcXG4rXFx0LyogT25seSBub3cgdGhhdCB0aGUgYWRtaW4gV1EvUlEvQ1EgYW5kIGludGVycnVwdCBhcmUgZnVsbHkgYWxsb2NhdGVkLFxcbitcXHQgKiBwcm9ncmFtbWVkIGFuZCBlbmFibGVkIGlzIGl0IHNhZmUgdG8gYWxsb3cgTUJPWCBzZW5kcy4gIENsZWFyaW5nIHRoaXNcXG4rXFx0ICogZWFybGllciBvcGVuZWQgYSB3aW5kb3cgd2hlcmUgYSBjb25jdXJyZW50IHNlbmRlciAoZS5nLiBsaW5rLW5vdGlmeVxcbitcXHQgKiB3b3JrIHNjaGVkdWxlZCBieSBhIHBvc3QtcmVzZXQgbGluay11cCkgY291bGQgY2FsbCBlbmljX21ib3hfc2VuZF9tc2coKVxcbitcXHQgKiBhZ2FpbnN0IGEgbm90LXlldC1hbGxvY2F0ZWQgYWRtaW5fd3EgYW5kIGNyYXNoLlxcbitcXHQgKi9cXG4rXFx0V1JJVEVfT05DRShlbmljLVxcdTAwM2VtYm94X3NlbmRfZGlzYWJsZWQsIGZhbHNlKTtcXG4rXFxuK1xcdG5ldGRldl9kYmcoZW5pYy1cXHUwMDNlbmV0ZGV2LFxcbitcXHRcXHQgICBcXFwiYWRtaW4gY2hhbm5lbCBvcGVuOiBpbnRyPSV1IHdxX2F2YWlsPSV1IHJxX2F2YWlsPSV1IGNxMF9jb2xvcj0ldSBjcTFfY29sb3I9JXVcXFxcblxcXCIsXFxuK1xcdFxcdCAgIGVuaWMtXFx1MDAzZWFkbWluX2ludHJfaW5kZXgsXFxuK1xcdFxcdCAgIHZuaWNfd3FfZGVzY19hdmFpbChcXHUwMDI2ZW5pYy1cXHUwMDNlYWRtaW5fd3EpLFxcbitcXHRcXHQgICB2bmljX3JxX2Rlc2NfYXZhaWwoXFx1MDAyNmVuaWMtXFx1MDAzZWFkbWluX3JxKSxcXG4rXFx0XFx0ICAgZW5pYy1cXHUwMDNlYWRtaW5fY3FbMF0ubGFzdF9jb2xvcixcXG4rXFx0XFx0ICAgZW5pYy1cXHUwMDNlYWRtaW5fY3FbMV0ubGFzdF9jb2xvcik7XFxuK1xcbitcXHRlbmljLVxcdTAwM2VhZG1pbl9jaGFuX3VwID0gdHJ1ZTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbitcXG4rZGlzYWJsZV9xdWV1ZXM6XFxuK1xcdGVuaWNfYWRtaW5fdGVhcmRvd25faW50cihlbmljKTtcXG4rXFx0ZW5pY19hZG1pbl9xcF90eXBlX3NldChlbmljLCBRUF9ESVNBQkxFKTtcXG4rXFx0aWYgKHZuaWNfd3FfZGlzYWJsZShcXHUwMDI2ZW5pYy1cXHUwMDNlYWRtaW5fd3EpKVxcbitcXHRcXHRuZXRkZXZfd2FybihlbmljLVxcdTAwM2VuZXRkZXYsIFxcXCJGYWlsZWQgdG8gZGlzYWJsZSBhZG1pbiBXUVxcXFxuXFxcIik7XFxuK1xcdGlmICh2bmljX3JxX2Rpc2FibGUoXFx1MDAyNmVuaWMtXFx1MDAzZWFkbWluX3JxKSlcXG4rXFx0XFx0bmV0ZGV2X3dhcm4oZW5pYy1cXHUwMDNlbmV0ZGV2LCBcXFwiRmFpbGVkIHRvIGRpc2FibGUgYWRtaW4gUlFcXFxcblxcXCIpO1xcbitcXHRjYW5jZWxfd29ya19zeW5jKFxcdTAwMjZlbmljLVxcdTAwM2VhZG1pbl9tc2dfd29yayk7XFxuK1xcdGVuaWNfYWRtaW5fbXNnX2RyYWluKGVuaWMpO1xcbitcXHRlbmljX2FkbWluX3JxX2RyYWluKGVuaWMpO1xcbitmcmVlX3Jlc291cmNlczpcXG4rXFx0ZW5pY19hZG1pbl9mcmVlX3Jlc291cmNlcyhlbmljKTtcXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbitcXG4rdm9pZCBlbmljX2FkbWluX2NoYW5uZWxfY2xvc2Uoc3RydWN0IGVuaWMgKmVuaWMpXFxuK3tcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdGlmICghZW5pYy1cXHUwMDNlaGFzX2FkbWluX2NoYW5uZWwpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdC8qIE5vdGhpbmcgdG8gdGVhciBkb3duIGlmIHRoZSBjaGFubmVsIHdhcyBuZXZlciAocmUpb3BlbmVkLCBlLmcuIGFcXG4rXFx0ICogZmFpbGVkIGVuaWNfYWRtaW5fY2hhbm5lbF9vcGVuKCkgaW4gcHJvYmUgb3IgaW4gdGhlIHJlc2V0IHBhdGg7XFxuK1xcdCAqIG90aGVyd2lzZSB0aGUgZGlzYWJsZS9jbGVhbiBjYWxscyBiZWxvdyBkZXJlZmVyZW5jZSBmcmVlZCByZXNvdXJjZXMuXFxuK1xcdCAqL1xcbitcXHRpZiAoIWVuaWMtXFx1MDAzZWFkbWluX2NoYW5fdXApXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdFdSSVRFX09OQ0UoZW5pYy1cXHUwMDNlbWJveF9zZW5kX2Rpc2FibGVkLCB0cnVlKTtcXG4rXFxuK1xcdG5ldGRldl9kYmcoZW5pYy1cXHUwMDNlbmV0ZGV2LCBcXFwiYWRtaW4gY2hhbm5lbCBjbG9zZVxcXFxuXFxcIik7XFxuK1xcbitcXHR2bmljX2ludHJfbWFzayhcXHUwMDI2ZW5pYy1cXHUwMDNlYWRtaW5faW50cik7XFxuK1xcdGVuaWNfYWRtaW5fdGVhcmRvd25faW50cihlbmljKTtcXG4rXFx0Y2FuY2VsX3dvcmtfc3luYyhcXHUwMDI2ZW5pYy1cXHUwMDNlbGlua19ub3RpZnlfd29yayk7XFxuK1xcdGNhbmNlbF93b3JrX3N5bmMoXFx1MDAyNmVuaWMtXFx1MDAzZWFkbWluX21zZ193b3JrKTtcXG4rXFx0ZW5pY19hZG1pbl9tc2dfZHJhaW4oZW5pYyk7XFxuK1xcbitcXHRlbmljX2FkbWluX3FwX3R5cGVfc2V0KGVuaWMsIFFQX0RJU0FCTEUpO1xcbitcXG4rXFx0ZXJyID0gdm5pY193cV9kaXNhYmxlKFxcdTAwMjZlbmljLVxcdTAwM2VhZG1pbl93cSk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdG5ldGRldl93YXJuKGVuaWMtXFx1MDAzZW5ldGRldixcXG4rXFx0XFx0XFx0ICAgIFxcXCJGYWlsZWQgdG8gZGlzYWJsZSBhZG1pbiBXUTogJWRcXFxcblxcXCIsIGVycik7XFxuK1xcdGVyciA9IHZuaWNfcnFfZGlzYWJsZShcXHUwMDI2ZW5pYy1cXHUwMDNlYWRtaW5fcnEpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRuZXRkZXZfd2FybihlbmljLVxcdTAwM2VuZXRkZXYsXFxuK1xcdFxcdFxcdCAgICBcXFwiRmFpbGVkIHRvIGRpc2FibGUgYWRtaW4gUlE6ICVkXFxcXG5cXFwiLCBlcnIpO1xcbitcXG4rXFx0dm5pY193cV9jbGVhbihcXHUwMDI2ZW5pYy1cXHUwMDNlYWRtaW5fd3EsIGVuaWNfYWRtaW5fd3FfYnVmX2NsZWFuKTtcXG4rXFx0ZW5pY19hZG1pbl9ycV9kcmFpbihlbmljKTtcXG4rXFx0dm5pY19jcV9jbGVhbihcXHUwMDI2ZW5pYy1cXHUwMDNlYWRtaW5fY3FbMF0pO1xcbitcXHR2bmljX2NxX2NsZWFuKFxcdTAwMjZlbmljLVxcdTAwM2VhZG1pbl9jcVsxXSk7XFxuK1xcdHZuaWNfaW50cl9jbGVhbihcXHUwMDI2ZW5pYy1cXHUwMDNlYWRtaW5faW50cik7XFxuK1xcbitcXHRlbmljLVxcdTAwM2VhZG1pbl9ycV9oYW5kbGVyID0gTlVMTDtcXG4rXFx0ZW5pY19hZG1pbl9mcmVlX3Jlc291cmNlcyhlbmljKTtcXG4rXFxuK1xcdGVuaWMtXFx1MDAzZWFkbWluX2NoYW5fdXAgPSBmYWxzZTtcXG4rfVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfYWRtaW4uaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19hZG1pbi5oXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uNjJjODAyMjBiMGNhY2NcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX2FkbWluLmhcXG5AQCAtMCwwICsxLDI3IEBAXFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkgKi9cXG4rLyogQ29weXJpZ2h0IDIwMjUgQ2lzY28gU3lzdGVtcywgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gKi9cXG4rXFxuKyNpZm5kZWYgX0VOSUNfQURNSU5fSF9cXG4rI2RlZmluZSBfRU5JQ19BRE1JTl9IX1xcbitcXG4rI2RlZmluZSBFTklDX0FETUlOX0RFU0NfQ09VTlRcXHQ2NFxcbisjZGVmaW5lIEVOSUNfQURNSU5fQlVGX1NJWkVcXHQyMDQ4XFxuK1xcbitzdHJ1Y3QgZW5pYztcXG4rXFxuKy8qIFdyYXBwZXIgZm9yIHJlY2VpdmVkIGFkbWluIG1lc3NhZ2VzIHF1ZXVlZCBmb3IgZGVmZXJyZWQgcHJvY2Vzc2luZy5cXG4rICogVGhlIGFkbWluIENRIHBvbGwgd29yayBoYW5kbGVyIGVucXVldWVzIHRoZXNlOyBhIHNlcGFyYXRlIHdvcmsgaGFuZGxlclxcbisgKiBwcm9jZXNzZXMgdGhlbSB3aGVyZSBzbGVlcGluZyAobXV0ZXgsIEdGUF9LRVJORUwpIGlzIHNhZmUuXFxuKyAqL1xcbitzdHJ1Y3QgZW5pY19hZG1pbl9tc2cge1xcbitcXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XFxuK1xcdHVuc2lnbmVkIGludCBsZW47XFxuK1xcdHU4IGRhdGFbXSBfX2FsaWduZWQoOCk7XFxuK307XFxuK1xcbitpbnQgZW5pY19hZG1pbl9jaGFubmVsX29wZW4oc3RydWN0IGVuaWMgKmVuaWMpO1xcbit2b2lkIGVuaWNfYWRtaW5fY2hhbm5lbF9jbG9zZShzdHJ1Y3QgZW5pYyAqZW5pYyk7XFxuK3Vuc2lnbmVkIGludCBlbmljX2FkbWluX3dxX2NxX3NlcnZpY2Uoc3RydWN0IGVuaWMgKmVuaWMpO1xcbit1bnNpZ25lZCBpbnQgZW5pY19hZG1pbl9ycV9jcV9zZXJ2aWNlKHN0cnVjdCBlbmljICplbmljKTtcXG4rXFxuKyNlbmRpZiAvKiBfRU5JQ19BRE1JTl9IXyAqL1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21haW4uY1xcbmluZGV4IGU3MTI1YjgxODA4Nzk5Li5kZTkwMzMyZGM0MGNjNyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfbWFpbi5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21haW4uY1xcbkBAIC02MCw2ICs2MCw4IEBAXFxuICNpbmNsdWRlIFxcXCJlbmljX2Nsc2YuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImVuaWNfcnEuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImVuaWNfd3EuaFxcXCJcXG4rI2luY2x1ZGUgXFxcImVuaWNfYWRtaW4uaFxcXCJcXG4rI2luY2x1ZGUgXFxcImVuaWNfbWJveC5oXFxcIlxcbiBcXG4gI2RlZmluZSBFTklDX05PVElGWV9USU1FUl9QRVJJT0RcXHQoMiAqIEhaKVxcbiBcXG5AQCAtMzE0LDYgKzMxNiwxMSBAQCBzdGF0aWMgaW50IGVuaWNfaXNfc3Jpb3ZfdmYoc3RydWN0IGVuaWMgKmVuaWMpXFxuIFxcdCAgICAgICBlbmljLVxcdTAwM2VwZGV2LVxcdTAwM2VkZXZpY2UgPT0gUENJX0RFVklDRV9JRF9DSVNDT19WSUNfRU5FVF9WRl9WMjtcXG4gfVxcbiBcXG4raW50IGVuaWNfaXNfc3Jpb3ZfdmZfdjIoc3RydWN0IGVuaWMgKmVuaWMpXFxuK3tcXG4rXFx0cmV0dXJuIGVuaWMtXFx1MDAzZXBkZXYtXFx1MDAzZWRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0NJU0NPX1ZJQ19FTkVUX1ZGX1YyO1xcbit9XFxuK1xcbiBpbnQgZW5pY19pc192YWxpZF92ZihzdHJ1Y3QgZW5pYyAqZW5pYywgaW50IHZmKVxcbiB7XFxuICNpZmRlZiBDT05GSUdfUENJX0lPVlxcbkBAIC00MTEsNiArNDE4LDI0IEBAIHN0YXRpYyB2b2lkIGVuaWNfc2V0X3J4X2NvYWxfc2V0dGluZyhzdHJ1Y3QgZW5pYyAqZW5pYylcXG4gXFx0cnhfY29hbC1cXHUwMDNldXNlX2FkYXB0aXZlX3J4X2NvYWxlc2NlID0gMTtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgZW5pY19saW5rX25vdGlmeV93b3JrX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbit7XFxuK1xcdHN0cnVjdCBlbmljICplbmljID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBlbmljLFxcbitcXHRcXHRcXHRcXHRcXHQgbGlua19ub3RpZnlfd29yayk7XFxuK1xcdHUzMiBzdGF0ZTtcXG4rXFx0dTE2IGk7XFxuK1xcbitcXHRpZiAoIWVuaWNfc3Jpb3ZfZW5hYmxlZChlbmljKSB8fCAhZW5pYy1cXHUwMDNldmZfc3RhdGUpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHN0YXRlID0gbmV0aWZfY2Fycmllcl9vayhlbmljLVxcdTAwM2VuZXRkZXYpID9cXG4rXFx0XFx0RU5JQ19NQk9YX0xJTktfU1RBVEVfRU5BQkxFIDpcXG4rXFx0XFx0RU5JQ19NQk9YX0xJTktfU1RBVEVfRElTQUJMRTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBlbmljLVxcdTAwM2VudW1fdmZzOyBpKyspXFxuK1xcdFxcdGVuaWNfbWJveF9zZW5kX2xpbmtfc3RhdGUoZW5pYywgaSwgc3RhdGUpO1xcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCBlbmljX2xpbmtfY2hlY2soc3RydWN0IGVuaWMgKmVuaWMpXFxuIHtcXG4gXFx0aW50IGxpbmtfc3RhdHVzID0gdm5pY19kZXZfbGlua19zdGF0dXMoZW5pYy1cXHUwMDNldmRldik7XFxuQEAgLTQyMCw5ICs0NDUsMTMgQEAgc3RhdGljIHZvaWQgZW5pY19saW5rX2NoZWNrKHN0cnVjdCBlbmljICplbmljKVxcbiBcXHRcXHRuZXRkZXZfaW5mbyhlbmljLVxcdTAwM2VuZXRkZXYsIFxcXCJMaW5rIFVQXFxcXG5cXFwiKTtcXG4gXFx0XFx0bmV0aWZfY2Fycmllcl9vbihlbmljLVxcdTAwM2VuZXRkZXYpO1xcbiBcXHRcXHRlbmljX3NldF9yeF9jb2FsX3NldHRpbmcoZW5pYyk7XFxuK1xcdFxcdGlmIChlbmljX3NyaW92X2VuYWJsZWQoZW5pYykgXFx1MDAyNlxcdTAwMjYgZW5pYy1cXHUwMDNldmZfc3RhdGUpXFxuK1xcdFxcdFxcdHNjaGVkdWxlX3dvcmsoXFx1MDAyNmVuaWMtXFx1MDAzZWxpbmtfbm90aWZ5X3dvcmspO1xcbiBcXHR9IGVsc2UgaWYgKCFsaW5rX3N0YXR1cyBcXHUwMDI2XFx1MDAyNiBjYXJyaWVyX29rKSB7XFxuIFxcdFxcdG5ldGRldl9pbmZvKGVuaWMtXFx1MDAzZW5ldGRldiwgXFxcIkxpbmsgRE9XTlxcXFxuXFxcIik7XFxuIFxcdFxcdG5ldGlmX2NhcnJpZXJfb2ZmKGVuaWMtXFx1MDAzZW5ldGRldik7XFxuK1xcdFxcdGlmIChlbmljX3NyaW92X2VuYWJsZWQoZW5pYykgXFx1MDAyNlxcdTAwMjYgZW5pYy1cXHUwMDNldmZfc3RhdGUpXFxuK1xcdFxcdFxcdHNjaGVkdWxlX3dvcmsoXFx1MDAyNmVuaWMtXFx1MDAzZWxpbmtfbm90aWZ5X3dvcmspO1xcbiBcXHR9XFxuIH1cXG4gXFxuQEAgLTIxNDIsNiArMjE3MSw1NyBAQCBzdGF0aWMgdm9pZCBlbmljX3NldF9hcGlfYnVzeShzdHJ1Y3QgZW5pYyAqZW5pYywgYm9vbCBidXN5KVxcbiBcXHRzcGluX3VubG9jayhcXHUwMDI2ZW5pYy1cXHUwMDNlZW5pY19hcGlfbG9jayk7XFxuIH1cXG4gXFxuKy8qIFRoZSBhZG1pbi9NQk9YIGNoYW5uZWwgZXhpc3RzIG9uIGEgVjIgUEYgd2hpbGUgU1ItSU9WIGlzIGVuYWJsZWQgYW5kIG9uXFxuKyAqIGV2ZXJ5IFYyIFZGLiAgQSByZXNldCB3aXBlcyB0aGUgYWRtaW4gV1EvUlEvQ1EsIHNvIHN1Y2ggZGV2aWNlcyBtdXN0IHRlYXJcXG4rICogdGhlIGNoYW5uZWwgZG93biBiZWZvcmUgdGhlIHJlc2V0IGFuZCByZS1lc3RhYmxpc2ggaXQgYWZ0ZXJ3YXJkcy5cXG4rICovXFxuK3N0YXRpYyBib29sIGVuaWNfaGFzX2FkbWluX2NoYW4oc3RydWN0IGVuaWMgKmVuaWMpXFxuK3tcXG4rXFx0cmV0dXJuIGVuaWNfaXNfc3Jpb3ZfdmZfdjIoZW5pYykgfHxcXG4rXFx0ICAgICAgIChlbmljX3NyaW92X2VuYWJsZWQoZW5pYykgXFx1MDAyNlxcdTAwMjYgZW5pYy1cXHUwMDNldmZfdHlwZSA9PSBFTklDX1ZGX1RZUEVfVjIpO1xcbit9XFxuK1xcbisvKiBSZS1lc3RhYmxpc2ggdGhlIGFkbWluL01CT1ggY2hhbm5lbCBhZnRlciBhIHJlc2V0IGhhcyByZS1jcmVhdGVkIHRoZSBkYXRhXFxuKyAqIHBhdGguICBNaXJyb3JzIHRoZSByZWxldmFudCBwYXJ0IG9mIHRoZSBwcm9iZSAvIFNSLUlPVi1lbmFibGUgc2VxdWVuY2U6XFxuKyAqIHJlb3BlbiB0aGUgY2hhbm5lbCBhbmQgcmVpbml0aWFsaXNlIE1CT1gsIHRoZW4gZm9yIGEgVkYgcmUtcnVuIHRoZSBQRlxcbisgKiBoYW5kc2hha2UgKGl0cyBhZG1pbiBRUCBhbmQgUEYtc2lkZSByZWdpc3RyYXRpb24gd2VyZSB0b3JuIGRvd24gYnkgdGhlXFxuKyAqIHJlc2V0KSwgb3IgZm9yIGEgUEYgcmUtcHVzaCB0aGUgY3VycmVudCBsaW5rIHN0YXRlIHRvIHJlZ2lzdGVyZWQgVkZzLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgZW5pY19hZG1pbl9jaGFuX3Jlb3BlbihzdHJ1Y3QgZW5pYyAqZW5pYylcXG4re1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0ZXJyID0gZW5pY19hZG1pbl9jaGFubmVsX29wZW4oZW5pYyk7XFxuK1xcdGlmIChlcnIpIHtcXG4rXFx0XFx0bmV0ZGV2X2VycihlbmljLVxcdTAwM2VuZXRkZXYsXFxuK1xcdFxcdFxcdCAgIFxcXCJhZG1pbiBjaGFubmVsIHJlb3BlbiBhZnRlciByZXNldCBmYWlsZWQ6ICVkXFxcXG5cXFwiLCBlcnIpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuK1xcdGVuaWNfbWJveF9pbml0KGVuaWMpO1xcbitcXG4rXFx0aWYgKGVuaWNfaXNfc3Jpb3ZfdmZfdjIoZW5pYykpIHtcXG4rXFx0XFx0ZXJyID0gZW5pY19tYm94X3ZmX2NhcGFiaWxpdHlfY2hlY2soZW5pYyk7XFxuK1xcdFxcdGlmIChlcnIpIHtcXG4rXFx0XFx0XFx0bmV0ZGV2X2VycihlbmljLVxcdTAwM2VuZXRkZXYsXFxuK1xcdFxcdFxcdFxcdCAgIFxcXCJNQk9YIGNhcGFiaWxpdHkgY2hlY2sgYWZ0ZXIgcmVzZXQgZmFpbGVkOiAlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgZXJyKTtcXG4rXFx0XFx0XFx0cmV0dXJuO1xcbitcXHRcXHR9XFxuK1xcdFxcdGVyciA9IGVuaWNfbWJveF92Zl9yZWdpc3RlcihlbmljKTtcXG4rXFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0bmV0ZGV2X2VycihlbmljLVxcdTAwM2VuZXRkZXYsXFxuK1xcdFxcdFxcdFxcdCAgIFxcXCJNQk9YIFZGIHJlLXJlZ2lzdHJhdGlvbiBhZnRlciByZXNldCBmYWlsZWQ6ICVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICBlcnIpO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHQvKiBUaGUgbGluayBjYW1lIGJhY2sgdXAgZHVyaW5nIGVuaWNfb3BlbigpIGFib3ZlIHdoaWxlIE1CT1hcXG4rXFx0XFx0ICogc2VuZHMgd2VyZSBzdGlsbCBkaXNhYmxlZCAoY2hhbm5lbCBub3QgeWV0IHJlb3BlbmVkKSwgc28gdGhhdFxcbitcXHRcXHQgKiBsaW5rLW5vdGlmeSB3YXMgZHJvcHBlZC4gIFJlLXB1c2ggY3VycmVudCBsaW5rIHN0YXRlIG5vdy5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHNjaGVkdWxlX3dvcmsoXFx1MDAyNmVuaWMtXFx1MDAzZWxpbmtfbm90aWZ5X3dvcmspO1xcbitcXHR9XFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkIGVuaWNfcmVzZXQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbiB7XFxuIFxcdHN0cnVjdCBlbmljICplbmljID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBlbmljLCByZXNldCk7XFxuQEAgLTIxNTQsMTUgKzIyMzQsMzQgQEAgc3RhdGljIHZvaWQgZW5pY19yZXNldChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuIFxcdC8qIFN0b3AgYW55IGFjdGl2aXR5IGZyb20gaW5maW5pYmFuZCAqL1xcbiBcXHRlbmljX3NldF9hcGlfYnVzeShlbmljLCB0cnVlKTtcXG4gXFxuK1xcdC8qIEZ1bGx5IHRlYXIgZG93biB0aGUgVjIgYWRtaW4vTUJPWCBjaGFubmVsIGJlZm9yZSB0aGUgc29mdCByZXNldC5cXG4rXFx0ICogVGhlIHJlc2V0IHdpcGVzIGFsbCBoYXJkd2FyZSBxdWV1ZXMgaW5jbHVkaW5nIHRoZSBhZG1pbiBXUS9SUTtcXG4rXFx0ICogY2xvc2luZyBmaXJzdCB0ZWxscyBmaXJtd2FyZSB0byBzdG9wIHRoZSBhZG1pbiBRUCAoc28gaXQgbm8gbG9uZ2VyXFxuK1xcdCAqIERNQXMgZnJvbSB0aGUgYWJvdXQtdG8tYmUtcmVzZXQgcmluZ3MpIGFuZCBmcmVlcyB0aGUgYWRtaW4gcmVzb3VyY2VzXFxuK1xcdCAqIHNvIHRoZXkgYXJlIGNsZWFubHkgcmUtYWxsb2NhdGVkIGFmdGVyd2FyZHMuXFxuK1xcdCAqL1xcbitcXHRpZiAoZW5pY19oYXNfYWRtaW5fY2hhbihlbmljKSlcXG4rXFx0XFx0ZW5pY19hZG1pbl9jaGFubmVsX2Nsb3NlKGVuaWMpO1xcbitcXG4gXFx0ZW5pY19zdG9wKGVuaWMtXFx1MDAzZW5ldGRldik7XFxuK1xcbiBcXHRlbmljX2Rldl9zb2Z0X3Jlc2V0KGVuaWMpO1xcbiBcXHRlbmljX3Jlc2V0X2FkZHJfbGlzdHMoZW5pYyk7XFxuIFxcdGVuaWNfaW5pdF92bmljX3Jlc291cmNlcyhlbmljKTtcXG4gXFx0ZW5pY19zZXRfcnNzX25pY19jZmcoZW5pYyk7XFxuIFxcdGVuaWNfZGV2X3NldF9pZ192bGFuX3Jld3JpdGVfbW9kZShlbmljKTtcXG4gXFx0ZW5pY19leHRfY3EoZW5pYyk7XFxuK1xcbiBcXHRlbmljX29wZW4oZW5pYy1cXHUwMDNlbmV0ZGV2KTtcXG4gXFxuK1xcdC8qIFJlLWVzdGFibGlzaCB0aGUgYWRtaW4vTUJPWCBjaGFubmVsIGFmdGVyIHRoZSBkYXRhIHBhdGggaXMgYmFjayB1cC5cXG4rXFx0ICogSXQgd2FzIGZ1bGx5IHRvcm4gZG93biBieSBlbmljX2FkbWluX2NoYW5uZWxfY2xvc2UoKSBhYm92ZTtcXG4rXFx0ICogZW5pY19hZG1pbl9jaGFuX3Jlb3BlbigpIHJlb3BlbnMgaXQgYW5kLCBmb3IgYSBQRiByZS1wdXNoZXMgbGlua1xcbitcXHQgKiBzdGF0ZSwgb3IgZm9yIGEgVkYgcmUtcnVucyB0aGUgcHJvYmUtdGltZSBQRiBoYW5kc2hha2UuXFxuK1xcdCAqL1xcbitcXHRpZiAoZW5pY19oYXNfYWRtaW5fY2hhbihlbmljKSlcXG4rXFx0XFx0ZW5pY19hZG1pbl9jaGFuX3Jlb3BlbihlbmljKTtcXG4rXFxuIFxcdC8qIEFsbG93IGluZmluaWJhbmQgdG8gZmlkZGxlIHdpdGggdGhlIGRldmljZSBhZ2FpbiAqL1xcbiBcXHRlbmljX3NldF9hcGlfYnVzeShlbmljLCBmYWxzZSk7XFxuIFxcbkBAIC0yMTgwLDE2ICsyMjc5LDMzIEBAIHN0YXRpYyB2b2lkIGVuaWNfdHhfaGFuZ19yZXNldChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuIFxcdC8qIFN0b3AgYW55IGFjdGl2aXR5IGZyb20gaW5maW5pYmFuZCAqL1xcbiBcXHRlbmljX3NldF9hcGlfYnVzeShlbmljLCB0cnVlKTtcXG4gXFxuK1xcdC8qIEZ1bGx5IHRlYXIgZG93biB0aGUgVjIgYWRtaW4vTUJPWCBjaGFubmVsIGJlZm9yZSB0aGUgaGFuZyByZXNldCwgZm9yXFxuK1xcdCAqIHRoZSBzYW1lIHJlYXNvbiBhcyB0aGUgc29mdCByZXNldCBwYXRoOiBzdG9wIHRoZSBhZG1pbiBRUCBhbmQgZnJlZVxcbitcXHQgKiB0aGUgYWRtaW4gcmVzb3VyY2VzIGJlZm9yZSB0aGUgaGFyZHdhcmUgcXVldWVzIGFyZSB3aXBlZC5cXG4rXFx0ICovXFxuK1xcdGlmIChlbmljX2hhc19hZG1pbl9jaGFuKGVuaWMpKVxcbitcXHRcXHRlbmljX2FkbWluX2NoYW5uZWxfY2xvc2UoZW5pYyk7XFxuK1xcbiBcXHRlbmljX2Rldl9oYW5nX25vdGlmeShlbmljKTtcXG4gXFx0ZW5pY19zdG9wKGVuaWMtXFx1MDAzZW5ldGRldik7XFxuK1xcbiBcXHRlbmljX2Rldl9oYW5nX3Jlc2V0KGVuaWMpO1xcbiBcXHRlbmljX3Jlc2V0X2FkZHJfbGlzdHMoZW5pYyk7XFxuIFxcdGVuaWNfaW5pdF92bmljX3Jlc291cmNlcyhlbmljKTtcXG4gXFx0ZW5pY19zZXRfcnNzX25pY19jZmcoZW5pYyk7XFxuIFxcdGVuaWNfZGV2X3NldF9pZ192bGFuX3Jld3JpdGVfbW9kZShlbmljKTtcXG4gXFx0ZW5pY19leHRfY3EoZW5pYyk7XFxuK1xcbiBcXHRlbmljX29wZW4oZW5pYy1cXHUwMDNlbmV0ZGV2KTtcXG4gXFxuK1xcdC8qIFJlLWVzdGFibGlzaCB0aGUgYWRtaW4vTUJPWCBjaGFubmVsIGFmdGVyIHRoZSBkYXRhIHBhdGggaXMgYmFjayB1cC5cXG4rXFx0ICogSXQgd2FzIGZ1bGx5IHRvcm4gZG93biBieSBlbmljX2FkbWluX2NoYW5uZWxfY2xvc2UoKSBhYm92ZTtcXG4rXFx0ICogZW5pY19hZG1pbl9jaGFuX3Jlb3BlbigpIHJlb3BlbnMgaXQgYW5kLCBmb3IgYSBQRiByZS1wdXNoZXMgbGlua1xcbitcXHQgKiBzdGF0ZSwgb3IgZm9yIGEgVkYgcmUtcnVucyB0aGUgcHJvYmUtdGltZSBQRiBoYW5kc2hha2UuXFxuK1xcdCAqL1xcbitcXHRpZiAoZW5pY19oYXNfYWRtaW5fY2hhbihlbmljKSlcXG4rXFx0XFx0ZW5pY19hZG1pbl9jaGFuX3Jlb3BlbihlbmljKTtcXG4rXFxuIFxcdC8qIEFsbG93IGluZmluaWJhbmQgdG8gZmlkZGxlIHdpdGggdGhlIGRldmljZSBhZ2FpbiAqL1xcbiBcXHRlbmljX3NldF9hcGlfYnVzeShlbmljLCBmYWxzZSk7XFxuIFxcbkBAIC0yMjAwLDYgKzIzMTYsOCBAQCBzdGF0aWMgdm9pZCBlbmljX3R4X2hhbmdfcmVzZXQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbiBcXG4gc3RhdGljIGludCBlbmljX3NldF9pbnRyX21vZGUoc3RydWN0IGVuaWMgKmVuaWMpXFxuIHtcXG4rXFx0dW5zaWduZWQgaW50IGFkbWluX3Jlc2VydmUgPSBlbmljLVxcdTAwM2VoYXNfYWRtaW5fY2hhbm5lbCA/IDEgOiAwO1xcbitcXHR1bnNpZ25lZCBpbnQgbWluX2ludHIgPSBFTklDX01TSVhfTUlOX0lOVFIgKyBhZG1pbl9yZXNlcnZlO1xcbiBcXHR1bnNpZ25lZCBpbnQgaTtcXG4gXFx0aW50IG51bV9pbnRyO1xcbiBcXG5AQCAtMjIxMCwxMiArMjMyOCwxMiBAQCBzdGF0aWMgaW50IGVuaWNfc2V0X2ludHJfbW9kZShzdHJ1Y3QgZW5pYyAqZW5pYylcXG4gXFx0ICovXFxuIFxcbiBcXHRpZiAoZW5pYy1cXHUwMDNlY29uZmlnLmludHJfbW9kZSBcXHUwMDNjIDEgXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgIGVuaWMtXFx1MDAzZWludHJfYXZhaWwgXFx1MDAzZT0gRU5JQ19NU0lYX01JTl9JTlRSKSB7XFxuK1xcdCAgICBlbmljLVxcdTAwM2VpbnRyX2F2YWlsIFxcdTAwM2U9IG1pbl9pbnRyKSB7XFxuIFxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBlbmljLVxcdTAwM2VpbnRyX2F2YWlsOyBpKyspXFxuIFxcdFxcdFxcdGVuaWMtXFx1MDAzZW1zaXhfZW50cnlbaV0uZW50cnkgPSBpO1xcbiBcXG4gXFx0XFx0bnVtX2ludHIgPSBwY2lfZW5hYmxlX21zaXhfcmFuZ2UoZW5pYy1cXHUwMDNlcGRldiwgZW5pYy1cXHUwMDNlbXNpeF9lbnRyeSxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0IEVOSUNfTVNJWF9NSU5fSU5UUixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0IG1pbl9pbnRyLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgZW5pYy1cXHUwMDNlaW50cl9hdmFpbCk7XFxuIFxcdFxcdGlmIChudW1faW50ciBcXHUwMDNlIDApIHtcXG4gXFx0XFx0XFx0dm5pY19kZXZfc2V0X2ludHJfbW9kZShlbmljLVxcdTAwM2V2ZGV2LFxcbkBAIC0yMzEwLDE2ICsyNDI4LDI3IEBAIHN0YXRpYyBpbnQgZW5pY19hZGp1c3RfcmVzb3VyY2VzKHN0cnVjdCBlbmljICplbmljKVxcbiBcXHRcXHRlbmljLVxcdTAwM2VjcV9jb3VudCA9IDI7XFxuIFxcdFxcdGVuaWMtXFx1MDAzZWludHJfY291bnQgPSBlbmljLVxcdTAwM2VpbnRyX2F2YWlsO1xcbiBcXHRcXHRicmVhaztcXG4tXFx0Y2FzZSBWTklDX0RFVl9JTlRSX01PREVfTVNJWDpcXG4rXFx0Y2FzZSBWTklDX0RFVl9JTlRSX01PREVfTVNJWDoge1xcbiBcXHRcXHQvKiBBZGp1c3QgdGhlIG51bWJlciBvZiB3cXMvcnFzL2Nxcy9pbnRlcnJ1cHRzIHRoYXQgd2lsbCBiZVxcbi1cXHRcXHQgKiB1c2VkIGJhc2VkIG9uIHdoaWNoIHJlc291cmNlIGlzIHRoZSBtb3N0IGNvbnN0cmFpbmVkXFxuK1xcdFxcdCAqIHVzZWQgYmFzZWQgb24gd2hpY2ggcmVzb3VyY2UgaXMgdGhlIG1vc3QgY29uc3RyYWluZWQuXFxuK1xcdFxcdCAqIFJlc2VydmUgb25lIGV4dHJhIE1TSS1YIHNsb3QgZm9yIHRoZSBhZG1pbiBjaGFubmVsIElOVFJcXG4rXFx0XFx0ICogd2hlbiBoYXNfYWRtaW5fY2hhbm5lbCBpcyBzZXQgc28gdGhhdFxcbitcXHRcXHQgKiBlbmljX2FkbWluX3NldHVwX2ludHIoKSBjYW4gYWxsb2NhdGUgYXQgaW50cl9jb3VudFxcbitcXHRcXHQgKiB3aXRoaW4gdGhlIGludHJfYXZhaWwgYm91bmRzIGV2ZW4gd2hlbiB0aGUgZGF0YSBxdWV1ZVxcbitcXHRcXHQgKiBjb3VudCBpcyBtYXhlZCBvdXQuICBpbnRyX2NvdW50IGNvdW50cyBvbmx5IHRoZSBkYXRhLXBhdGhcXG4rXFx0XFx0ICogSVJRcyAocmVnaXN0ZXJlZCBieSBlbmljX3JlcXVlc3RfaW50cigpKTsgdGhlIGFkbWluIElOVFJcXG4rXFx0XFx0ICogbGl2ZXMgYXQgbXNpeCBpbmRleCBpbnRyX2NvdW50IGFuZCBpcyBzZXQgdXAgbGF0ZXIgYnlcXG4rXFx0XFx0ICogZW5pY19hZG1pbl9zZXR1cF9pbnRyKCkuXFxuIFxcdFxcdCAqL1xcbitcXHRcXHR1bnNpZ25lZCBpbnQgYWRtaW5fcmVzZXJ2ZSA9IGVuaWMtXFx1MDAzZWhhc19hZG1pbl9jaGFubmVsID8gMSA6IDA7XFxuK1xcbiBcXHRcXHR3cV9hdmFpbCA9IG1pbihlbmljLVxcdTAwM2V3cV9hdmFpbCwgRU5JQ19XUV9NQVgpO1xcbiBcXHRcXHRycV9kZWZhdWx0ID0gbWF4KG5ldGlmX2dldF9udW1fZGVmYXVsdF9yc3NfcXVldWVzKCksXFxuIFxcdFxcdFxcdFxcdCBFTklDX1JRX01JTl9ERUZBVUxUKTtcXG4gXFx0XFx0cnFfYXZhaWwgPSBtaW4zKGVuaWMtXFx1MDAzZXJxX2F2YWlsLCBFTklDX1JRX01BWCwgcnFfZGVmYXVsdCk7XFxuIFxcdFxcdG1heF9xdWV1ZXMgPSBtaW4oZW5pYy1cXHUwMDNlY3FfYXZhaWwsXFxuLVxcdFxcdFxcdFxcdCBlbmljLVxcdTAwM2VpbnRyX2F2YWlsIC0gRU5JQ19NU0lYX1JFU0VSVkVEX0lOVFIpO1xcbitcXHRcXHRcXHRcXHQgZW5pYy1cXHUwMDNlaW50cl9hdmFpbCAtIEVOSUNfTVNJWF9SRVNFUlZFRF9JTlRSIC1cXG4rXFx0XFx0XFx0XFx0IGFkbWluX3Jlc2VydmUpO1xcbiBcXHRcXHRpZiAod3FfYXZhaWwgKyBycV9hdmFpbCBcXHUwMDNjPSBtYXhfcXVldWVzKSB7XFxuIFxcdFxcdFxcdGVuaWMtXFx1MDAzZXJxX2NvdW50ID0gcnFfYXZhaWw7XFxuIFxcdFxcdFxcdGVuaWMtXFx1MDAzZXdxX2NvdW50ID0gd3FfYXZhaWw7XFxuQEAgLTIzMzcsNiArMjQ2Niw3IEBAIHN0YXRpYyBpbnQgZW5pY19hZGp1c3RfcmVzb3VyY2VzKHN0cnVjdCBlbmljICplbmljKVxcbiBcXHRcXHRlbmljLVxcdTAwM2VpbnRyX2NvdW50ID0gZW5pYy1cXHUwMDNlY3FfY291bnQgKyBFTklDX01TSVhfUkVTRVJWRURfSU5UUjtcXG4gXFxuIFxcdFxcdGJyZWFrO1xcbitcXHR9XFxuIFxcdGRlZmF1bHQ6XFxuIFxcdFxcdGRldl9lcnIoZW5pY19nZXRfZGV2KGVuaWMpLCBcXFwiVW5rbm93biBpbnRlcnJ1cHQgbW9kZVxcXFxuXFxcIik7XFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbkBAIC0yNjQxLDggKzI3NzEsMTAgQEAgc3RhdGljIHZvaWQgZW5pY19pb3VubWFwKHN0cnVjdCBlbmljICplbmljKVxcbiBzdGF0aWMgdm9pZCBlbmljX3NyaW92X2RldGVjdF92Zl90eXBlKHN0cnVjdCBlbmljICplbmljKVxcbiB7XFxuIFxcdHN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gZW5pYy1cXHUwMDNlcGRldjtcXG4tXFx0aW50IHBvcztcXG4rXFx0dTY0IHN1cHBvcnRlZF92ZXJzaW9ucywgYTEgPSAwO1xcbiBcXHR1MTYgdmZfZGV2X2lkO1xcbitcXHRpbnQgcG9zO1xcbitcXHRpbnQgZXJyO1xcbiBcXG4gXFx0aWYgKGVuaWNfaXNfc3Jpb3ZfdmYoZW5pYykgfHwgZW5pY19pc19keW5hbWljKGVuaWMpKVxcbiBcXHRcXHRyZXR1cm47XFxuQEAgLTI2NjksNiArMjgwMSwxNDkgQEAgc3RhdGljIHZvaWQgZW5pY19zcmlvdl9kZXRlY3RfdmZfdHlwZShzdHJ1Y3QgZW5pYyAqZW5pYylcXG4gXFx0XFx0ZW5pYy1cXHUwMDNldmZfdHlwZSA9IEVOSUNfVkZfVFlQRV9OT05FO1xcbiBcXHRcXHRicmVhaztcXG4gXFx0fVxcbitcXG4rXFx0aWYgKGVuaWMtXFx1MDAzZXZmX3R5cGUgIT0gRU5JQ19WRl9UWVBFX1YyKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHQvKiBBIHN1Y2Nlc3NmdWwgY29tbWFuZCBtZWFucyBmaXJtd2FyZSByZWNvZ25pemVzXFxuK1xcdCAqIFZJQ19GRUFUVVJFX1NSSU9WOyBzdXBwb3J0ZWRfdmVyc2lvbnMgaXMgYXZhaWxhYmxlXFxuK1xcdCAqIGZvciBzdWItZmVhdHVyZSB2ZXJzaW9uaW5nIGluIHRoZSBmdXR1cmUuXFxuK1xcdCAqL1xcbitcXHRlcnIgPSB2bmljX2Rldl9nZXRfc3VwcG9ydGVkX2ZlYXR1cmVfdmVyKGVuaWMtXFx1MDAzZXZkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCBWSUNfRkVBVFVSRV9TUklPVixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0IFxcdTAwMjZzdXBwb3J0ZWRfdmVyc2lvbnMsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCBcXHUwMDI2YTEpO1xcbitcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdGRldl93YXJuKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdCBcXFwiU1ItSU9WIFYyIG5vdCBzdXBwb3J0ZWQgYnkgY3VycmVudCBmaXJtd2FyZS4gVXBncmFkZSB0byBWSUMgRlcgNS4zKDQuNzIpIG9yIGhpZ2hlci5cXFxcblxcXCIpO1xcbitcXHRcXHRlbmljLVxcdTAwM2V2Zl90eXBlID0gRU5JQ19WRl9UWVBFX05PTkU7XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIGludCBfX21heWJlX3VudXNlZFxcbitlbmljX3NyaW92X3YyX2VuYWJsZShzdHJ1Y3QgZW5pYyAqZW5pYywgaW50IG51bV92ZnMpXFxuK3tcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdGlmICghZW5pYy1cXHUwMDNlaGFzX2FkbWluX2NoYW5uZWwpIHtcXG4rXFx0XFx0bmV0ZGV2X2VycihlbmljLVxcdTAwM2VuZXRkZXYsXFxuK1xcdFxcdFxcdCAgIFxcXCJWMiBTUi1JT1YgcmVxdWlyZXMgYWRtaW4gY2hhbm5lbCByZXNvdXJjZXNcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcdH1cXG4rXFxuK1xcdGVuaWMtXFx1MDAzZXZmX3N0YXRlID0ga2NhbGxvYyhudW1fdmZzLCBzaXplb2YoKmVuaWMtXFx1MDAzZXZmX3N0YXRlKSwgR0ZQX0tFUk5FTCk7XFxuK1xcdGlmICghZW5pYy1cXHUwMDNldmZfc3RhdGUpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0ZXJyID0gZW5pY19hZG1pbl9jaGFubmVsX29wZW4oZW5pYyk7XFxuK1xcdGlmIChlcnIpIHtcXG4rXFx0XFx0bmV0ZGV2X2VycihlbmljLVxcdTAwM2VuZXRkZXYsXFxuK1xcdFxcdFxcdCAgIFxcXCJGYWlsZWQgdG8gb3BlbiBhZG1pbiBjaGFubmVsOiAlZFxcXFxuXFxcIiwgZXJyKTtcXG4rXFx0XFx0Z290byBmcmVlX3ZmX3N0YXRlO1xcbitcXHR9XFxuK1xcbitcXHRlbmljX21ib3hfaW5pdChlbmljKTtcXG4rXFxuK1xcdGVuaWMtXFx1MDAzZW51bV92ZnMgPSBudW1fdmZzO1xcbitcXG4rXFx0ZXJyID0gcGNpX2VuYWJsZV9zcmlvdihlbmljLVxcdTAwM2VwZGV2LCBudW1fdmZzKTtcXG4rXFx0aWYgKGVycikge1xcbitcXHRcXHRuZXRkZXZfZXJyKGVuaWMtXFx1MDAzZW5ldGRldixcXG4rXFx0XFx0XFx0ICAgXFxcInBjaV9lbmFibGVfc3Jpb3YgZmFpbGVkOiAlZFxcXFxuXFxcIiwgZXJyKTtcXG4rXFx0XFx0Z290byBjbG9zZV9hZG1pbjtcXG4rXFx0fVxcbitcXG4rXFx0ZW5pYy1cXHUwMDNlcHJpdl9mbGFncyB8PSBFTklDX1NSSU9WX0VOQUJMRUQ7XFxuK1xcdHJldHVybiBudW1fdmZzO1xcbitcXG4rY2xvc2VfYWRtaW46XFxuK1xcdGVuaWMtXFx1MDAzZW51bV92ZnMgPSAwO1xcbitcXHRlbmljX2FkbWluX2NoYW5uZWxfY2xvc2UoZW5pYyk7XFxuK2ZyZWVfdmZfc3RhdGU6XFxuK1xcdGtmcmVlKGVuaWMtXFx1MDAzZXZmX3N0YXRlKTtcXG4rXFx0ZW5pYy1cXHUwMDNldmZfc3RhdGUgPSBOVUxMO1xcbitcXHRyZXR1cm4gZXJyO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBlbmljX3NyaW92X3YyX2Rpc2FibGUoc3RydWN0IGVuaWMgKmVuaWMpXFxuK3tcXG4rXFx0LyogU3RvcCBuZXcgVkYgbGluay1zdGF0ZSBicm9hZGNhc3RzIGJlZm9yZSB0ZWFyaW5nIGRvd24gdmZfc3RhdGUuXFxuK1xcdCAqIENsZWFyaW5nIEVOSUNfU1JJT1ZfRU5BQkxFRCBtYWtlcyBlbmljX2xpbmtfY2hlY2soKSAoY2FsbGVkIGZyb21cXG4rXFx0ICogdGhlIG5vdGlmeSB0aW1lci9JU1IpIHNraXAgdGhlIFZGIG5vdGlmeSBwYXRoLCBhbmQgY2FuY2VsbGluZ1xcbitcXHQgKiBsaW5rX25vdGlmeV93b3JrIGVuc3VyZXMgYW55IGFscmVhZHktcXVldWVkIGJyb2FkY2FzdCBoYXMgZmluaXNoZWRcXG4rXFx0ICogYmVmb3JlIHZmX3N0YXRlIGlzIGZyZWVkLCBjbG9zaW5nIGEgdXNlLWFmdGVyLWZyZWUgd2luZG93LlxcbitcXHQgKi9cXG4rXFx0ZW5pYy1cXHUwMDNlcHJpdl9mbGFncyBcXHUwMDI2PSB+RU5JQ19TUklPVl9FTkFCTEVEO1xcbitcXHRjYW5jZWxfd29ya19zeW5jKFxcdTAwMjZlbmljLVxcdTAwM2VsaW5rX25vdGlmeV93b3JrKTtcXG4rXFxuK1xcdHBjaV9kaXNhYmxlX3NyaW92KGVuaWMtXFx1MDAzZXBkZXYpO1xcbitcXHRlbmljX2FkbWluX2NoYW5uZWxfY2xvc2UoZW5pYyk7XFxuK1xcdGtmcmVlKGVuaWMtXFx1MDAzZXZmX3N0YXRlKTtcXG4rXFx0ZW5pYy1cXHUwMDNldmZfc3RhdGUgPSBOVUxMO1xcbitcXHRlbmljLVxcdTAwM2VudW1fdmZzID0gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBfX21heWJlX3VudXNlZFxcbitlbmljX3NyaW92X2NvbmZpZ3VyZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG51bV92ZnMpXFxuK3tcXG4rXFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTtcXG4rXFx0c3RydWN0IGVuaWMgKmVuaWMgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xcbitcXHRzdHJ1Y3QgZW5pY19wb3J0X3Byb2ZpbGUgKnBwO1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0aWYgKG51bV92ZnMgXFx1MDAzZSAwKSB7XFxuK1xcdFxcdGlmIChlbmljLVxcdTAwM2Vjb25maWcubXFfc3Vidm5pY19jb3VudCkge1xcbitcXHRcXHRcXHRuZXRkZXZfZXJyKG5ldGRldixcXG4rXFx0XFx0XFx0XFx0ICAgXFxcIlNSLUlPViBub3Qgc3VwcG9ydGVkIHdpdGggbXVsdGktcXVldWUgc3ViLXZuaWNzXFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRpZiAoZW5pYy1cXHUwMDNldmZfdHlwZSA9PSBFTklDX1ZGX1RZUEVfTk9ORSkge1xcbitcXHRcXHRcXHRuZXRkZXZfZXJyKG5ldGRldixcXG4rXFx0XFx0XFx0XFx0ICAgXFxcIlNSLUlPViBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgZmlybXdhcmUgdmVyc2lvblxcXFxuXFxcIik7XFxuK1xcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0aWYgKGVuaWMtXFx1MDAzZXZmX3R5cGUgPT0gRU5JQ19WRl9UWVBFX1YyKVxcbitcXHRcXHRcXHRyZXR1cm4gZW5pY19zcmlvdl92Ml9lbmFibGUoZW5pYywgbnVtX3Zmcyk7XFxuK1xcbitcXHRcXHRwcCA9IGtjYWxsb2MobnVtX3Zmcywgc2l6ZW9mKCpwcCksIEdGUF9LRVJORUwpO1xcbitcXHRcXHRpZiAoIXBwKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFxuK1xcdFxcdGVyciA9IHBjaV9lbmFibGVfc3Jpb3YocGRldiwgbnVtX3Zmcyk7XFxuK1xcdFxcdGlmIChlcnIpIHtcXG4rXFx0XFx0XFx0a2ZyZWUocHApO1xcbitcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRrZnJlZShlbmljLVxcdTAwM2VwcCk7XFxuK1xcdFxcdGVuaWMtXFx1MDAzZXBwID0gcHA7XFxuK1xcdFxcdGVuaWMtXFx1MDAzZW51bV92ZnMgPSBudW1fdmZzO1xcbitcXHRcXHRlbmljLVxcdTAwM2Vwcml2X2ZsYWdzIHw9IEVOSUNfU1JJT1ZfRU5BQkxFRDtcXG4rXFx0XFx0cmV0dXJuIG51bV92ZnM7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghZW5pY19zcmlvdl9lbmFibGVkKGVuaWMpKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGlmIChlbmljLVxcdTAwM2V2Zl90eXBlID09IEVOSUNfVkZfVFlQRV9WMikge1xcbitcXHRcXHRlbmljX3NyaW92X3YyX2Rpc2FibGUoZW5pYyk7XFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHR9XFxuK1xcbitcXHRwcCA9IGt6YWxsb2Nfb2JqKCplbmljLVxcdTAwM2VwcCwgR0ZQX0tFUk5FTCk7XFxuK1xcdGlmICghcHApXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0cGNpX2Rpc2FibGVfc3Jpb3YocGRldik7XFxuK1xcdGVuaWMtXFx1MDAzZW51bV92ZnMgPSAwO1xcbitcXHRlbmljLVxcdTAwM2Vwcml2X2ZsYWdzIFxcdTAwMjY9IH5FTklDX1NSSU9WX0VOQUJMRUQ7XFxuK1xcbitcXHRrZnJlZShlbmljLVxcdTAwM2VwcCk7XFxuK1xcdGVuaWMtXFx1MDAzZXBwID0gcHA7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4gfVxcbiAjZW5kaWZcXG4gXFxuQEAgLTI3NjgsMTIgKzMwNDMsMTggQEAgc3RhdGljIGludCBlbmljX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxcbiBcXHRcXHRnb3RvIGVycl9vdXRfdm5pY191bnJlZ2lzdGVyO1xcbiBcXG4gI2lmZGVmIENPTkZJR19QQ0lfSU9WXFxuLVxcdC8qIEdldCBudW1iZXIgb2Ygc3Vidm5pY3MgKi9cXG4rXFx0ZW5pY19zcmlvdl9kZXRlY3RfdmZfdHlwZShlbmljKTtcXG4rXFxuK1xcdC8qIEF1dG8tZW5hYmxlIFNSLUlPViBpZiBWRnMgd2VyZSBwcmUtY29uZmlndXJlZCAoZS5nLiBhdCBib290KS5cXG4rXFx0ICogVjIgVkZzIHJlcXVpcmUgdGhlIGFkbWluIGNoYW5uZWwsIHdoaWNoIGlzIG5vdCB5ZXQgc2V0IHVwIGF0IHByb2JlXFxuK1xcdCAqIHRpbWU7IHVzZSBzeXNmcyAoZW5pY19zcmlvdl9jb25maWd1cmUpIHRvIGVuYWJsZSBWMiBTUi1JT1YgaW5zdGVhZC5cXG4rXFx0ICovXFxuIFxcdHBvcyA9IHBjaV9maW5kX2V4dF9jYXBhYmlsaXR5KHBkZXYsIFBDSV9FWFRfQ0FQX0lEX1NSSU9WKTtcXG4gXFx0aWYgKHBvcykge1xcbiBcXHRcXHRwY2lfcmVhZF9jb25maWdfd29yZChwZGV2LCBwb3MgKyBQQ0lfU1JJT1ZfVE9UQUxfVkYsXFxuIFxcdFxcdFxcdFxcdTAwMjZlbmljLVxcdTAwM2VudW1fdmZzKTtcXG4tXFx0XFx0aWYgKGVuaWMtXFx1MDAzZW51bV92ZnMpIHtcXG4rXFx0XFx0aWYgKGVuaWMtXFx1MDAzZW51bV92ZnMgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgIGVuaWMtXFx1MDAzZXZmX3R5cGUgIT0gRU5JQ19WRl9UWVBFX1YyKSB7XFxuIFxcdFxcdFxcdGVyciA9IHBjaV9lbmFibGVfc3Jpb3YocGRldiwgZW5pYy1cXHUwMDNlbnVtX3Zmcyk7XFxuIFxcdFxcdFxcdGlmIChlcnIpIHtcXG4gXFx0XFx0XFx0XFx0ZGV2X2VycihkZXYsIFxcXCJTUklPViBlbmFibGUgZmFpbGVkLCBhYm9ydGluZy5cXFwiXFxuQEAgLTI3ODUsNyArMzA2Niw2IEBAIHN0YXRpYyBpbnQgZW5pY19wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcXG4gXFx0XFx0XFx0bnVtX3BwcyA9IGVuaWMtXFx1MDAzZW51bV92ZnM7XFxuIFxcdFxcdH1cXG4gXFx0fVxcbi1cXHRlbmljX3NyaW92X2RldGVjdF92Zl90eXBlKGVuaWMpO1xcbiAjZW5kaWZcXG4gXFxuIFxcdC8qIEFsbG9jYXRlIHN0cnVjdHVyZSBmb3IgcG9ydCBwcm9maWxlcyAqL1xcbkBAIC0yODUwLDYgKzMxMzAsNDQgQEAgc3RhdGljIGludCBlbmljX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxcbiBcXHRcXHRnb3RvIGVycl9vdXRfZGV2X2Nsb3NlO1xcbiBcXHR9XFxuIFxcbitcXHQvKiBJbml0aWFsaXNlIGxpbmtfbm90aWZ5X3dvcmsgYmVmb3JlIHRoZSBWMi1WRiBhZG1pbi1vcGVuIGJsb2NrIGJlbG93OlxcbitcXHQgKiBpdHMgZXJyb3IgcGF0aCAoZXJyX291dF9hZG1pbl9jbG9zZSAtXFx1MDAzZSBlbmljX2FkbWluX2NoYW5uZWxfY2xvc2UoKSAtXFx1MDAzZVxcbitcXHQgKiBjYW5jZWxfd29ya19zeW5jKCkpIHdvdWxkIG90aGVyd2lzZSBhY3Qgb24gYW4gdW5pbml0aWFsaXNlZCB3b3JrLlxcbitcXHQgKi9cXG4rXFx0SU5JVF9XT1JLKFxcdTAwMjZlbmljLVxcdTAwM2VsaW5rX25vdGlmeV93b3JrLCBlbmljX2xpbmtfbm90aWZ5X3dvcmtfaGFuZGxlcik7XFxuK1xcbitcXHQvKiBWMiBWRjogb3BlbiBhZG1pbiBjaGFubmVsIGFuZCByZWdpc3RlciB3aXRoIFBGLlxcbitcXHQgKiBNdXN0IGhhcHBlbiBiZWZvcmUgcmVnaXN0ZXJfbmV0ZGV2IHNvIHRoZSBWRiBpcyBmdWxseVxcbitcXHQgKiBpbml0aWFsaXplZCBiZWZvcmUgdGhlIGludGVyZmFjZSBpcyB2aXNpYmxlIHRvIHVzZXJzcGFjZS5cXG4rXFx0ICpcXG4rXFx0ICogYWRtaW5fY2hhbm5lbF9vcGVuKCkgcnVucyBiZWZvcmUgZW5pY19tYm94X2luaXQoKSBpbnN0YWxsc1xcbitcXHQgKiB0aGUgcmVjZWl2ZSBoYW5kbGVyLiAgVGhpcyBpcyBzYWZlIGJlY2F1c2VcXG4rXFx0ICogZW5pY19hZG1pbl9ycV9jcV9zZXJ2aWNlKCkgY2hlY2tzIGFkbWluX3JxX2hhbmRsZXIgYmVmb3JlXFxuK1xcdCAqIGVucXVldWluZyBhbnkgcmVjZWl2ZWQgYnVmZmVyLCBzbyBpbnRlcnJ1cHRzIHRoYXQgZmlyZVxcbitcXHQgKiBiZXR3ZWVuIG9wZW4gYW5kIG1ib3hfaW5pdCBhcmUgaGFybWxlc3NseSBkaXNjYXJkZWQuXFxuK1xcdCAqL1xcbitcXHRpZiAoZW5pY19pc19zcmlvdl92Zl92MihlbmljKSkge1xcbitcXHRcXHRlcnIgPSBlbmljX2FkbWluX2NoYW5uZWxfb3BlbihlbmljKTtcXG4rXFx0XFx0aWYgKGVycikge1xcbitcXHRcXHRcXHRkZXZfZXJyKGRldixcXG4rXFx0XFx0XFx0XFx0XFxcIkZhaWxlZCB0byBvcGVuIGFkbWluIGNoYW5uZWw6ICVkXFxcXG5cXFwiLCBlcnIpO1xcbitcXHRcXHRcXHRnb3RvIGVycl9vdXRfZGV2X2RlaW5pdDtcXG4rXFx0XFx0fVxcbitcXHRcXHRlbmljX21ib3hfaW5pdChlbmljKTtcXG4rXFx0XFx0ZXJyID0gZW5pY19tYm94X3ZmX2NhcGFiaWxpdHlfY2hlY2soZW5pYyk7XFxuK1xcdFxcdGlmIChlcnIpIHtcXG4rXFx0XFx0XFx0ZGV2X2VycihkZXYsXFxuK1xcdFxcdFxcdFxcdFxcXCJNQk9YIGNhcGFiaWxpdHkgY2hlY2sgZmFpbGVkOiAlZFxcXFxuXFxcIiwgZXJyKTtcXG4rXFx0XFx0XFx0Z290byBlcnJfb3V0X2FkbWluX2Nsb3NlO1xcbitcXHRcXHR9XFxuK1xcdFxcdGVyciA9IGVuaWNfbWJveF92Zl9yZWdpc3RlcihlbmljKTtcXG4rXFx0XFx0aWYgKGVycikge1xcbitcXHRcXHRcXHRkZXZfZXJyKGRldixcXG4rXFx0XFx0XFx0XFx0XFxcIk1CT1ggVkYgcmVnaXN0cmF0aW9uIGZhaWxlZDogJWRcXFxcblxcXCIsIGVycik7XFxuK1xcdFxcdFxcdGdvdG8gZXJyX291dF9hZG1pbl9jbG9zZTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbiBcXHRuZXRpZl9zZXRfcmVhbF9udW1fdHhfcXVldWVzKG5ldGRldiwgZW5pYy1cXHUwMDNld3FfY291bnQpO1xcbiBcXHRuZXRpZl9zZXRfcmVhbF9udW1fcnhfcXVldWVzKG5ldGRldiwgZW5pYy1cXHUwMDNlcnFfY291bnQpO1xcbiBcXG5AQCAtMjg3NCw3ICszMTkyLDcgQEAgc3RhdGljIGludCBlbmljX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxcbiBcXHRlcnIgPSBlbmljX3NldF9tYWNfYWRkcihuZXRkZXYsIGVuaWMtXFx1MDAzZW1hY19hZGRyKTtcXG4gXFx0aWYgKGVycikge1xcbiBcXHRcXHRkZXZfZXJyKGRldiwgXFxcIkludmFsaWQgTUFDIGFkZHJlc3MsIGFib3J0aW5nXFxcXG5cXFwiKTtcXG4tXFx0XFx0Z290byBlcnJfb3V0X2Rldl9kZWluaXQ7XFxuK1xcdFxcdGdvdG8gZXJyX291dF9hZG1pbl9jbG9zZTtcXG4gXFx0fVxcbiBcXG4gXFx0ZW5pYy1cXHUwMDNldHhfY29hbGVzY2VfdXNlY3MgPSBlbmljLVxcdTAwM2Vjb25maWcuaW50cl90aW1lcl91c2VjO1xcbkBAIC0yOTcyLDExICszMjkwLDIzIEBAIHN0YXRpYyBpbnQgZW5pY19wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcXG4gXFx0ZXJyID0gcmVnaXN0ZXJfbmV0ZGV2KG5ldGRldik7XFxuIFxcdGlmIChlcnIpIHtcXG4gXFx0XFx0ZGV2X2VycihkZXYsIFxcXCJDYW5ub3QgcmVnaXN0ZXIgbmV0IGRldmljZSwgYWJvcnRpbmdcXFxcblxcXCIpO1xcbi1cXHRcXHRnb3RvIGVycl9vdXRfZGV2X2RlaW5pdDtcXG4rXFx0XFx0Z290byBlcnJfb3V0X2FkbWluX2Nsb3NlO1xcbiBcXHR9XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gXFxuK2Vycl9vdXRfYWRtaW5fY2xvc2U6XFxuK1xcdGlmIChlbmljX2lzX3NyaW92X3ZmX3YyKGVuaWMpKSB7XFxuK1xcdFxcdGlmIChlbmljLVxcdTAwM2V2Zl9yZWdpc3RlcmVkKSB7XFxuK1xcdFxcdFxcdGludCB1bnJlZ19lcnIgPSBlbmljX21ib3hfdmZfdW5yZWdpc3RlcihlbmljKTtcXG4rXFxuK1xcdFxcdFxcdGlmICh1bnJlZ19lcnIpXFxuK1xcdFxcdFxcdFxcdG5ldGRldl93YXJuKG5ldGRldixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIFxcXCJGYWlsZWQgdG8gdW5yZWdpc3RlciBmcm9tIFBGOiAlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIHVucmVnX2Vycik7XFxuK1xcdFxcdH1cXG4rXFx0XFx0ZW5pY19hZG1pbl9jaGFubmVsX2Nsb3NlKGVuaWMpO1xcbitcXHR9XFxuIGVycl9vdXRfZGV2X2RlaW5pdDpcXG4gXFx0ZW5pY19kZXZfZGVpbml0KGVuaWMpO1xcbiBlcnJfb3V0X2Rldl9jbG9zZTpcXG5AQCAtMzAxMiwxNiArMzM0Miw0MiBAQCBzdGF0aWMgdm9pZCBlbmljX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4gXFx0XFx0c3RydWN0IGVuaWMgKmVuaWMgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xcbiBcXG4gXFx0XFx0Y2FuY2VsX3dvcmtfc3luYyhcXHUwMDI2ZW5pYy1cXHUwMDNlcmVzZXQpO1xcbitcXHRcXHRjYW5jZWxfd29ya19zeW5jKFxcdTAwMjZlbmljLVxcdTAwM2V0eF9oYW5nX3Jlc2V0KTtcXG4gXFx0XFx0Y2FuY2VsX3dvcmtfc3luYyhcXHUwMDI2ZW5pYy1cXHUwMDNlY2hhbmdlX210dV93b3JrKTtcXG4rXFxuK1xcdFxcdC8qIENsb3NlIHRoZSBhZG1pbiBjaGFubmVsIGFuZCB1bnJlZ2lzdGVyIGZyb20gdGhlIFBGIGJlZm9yZVxcbitcXHRcXHQgKiB1bnJlZ2lzdGVyX25ldGRldigpIHRvIHByZXZlbnQgYSBsYXRlIFBGIG5vdGlmaWNhdGlvbiBmcm9tXFxuK1xcdFxcdCAqIHRvdWNoaW5nIGEgbmV0ZGV2IHRoYXQgaGFzIGJlZW4gZnJlZWQuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAoZW5pY19pc19zcmlvdl92Zl92MihlbmljKSkge1xcbitcXHRcXHRcXHRpZiAoZW5pYy1cXHUwMDNldmZfcmVnaXN0ZXJlZCkge1xcbitcXHRcXHRcXHRcXHRpbnQgdW5yZWdfZXJyID0gZW5pY19tYm94X3ZmX3VucmVnaXN0ZXIoZW5pYyk7XFxuK1xcbitcXHRcXHRcXHRcXHRpZiAodW5yZWdfZXJyKVxcbitcXHRcXHRcXHRcXHRcXHRuZXRkZXZfd2FybihuZXRkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICBcXFwiRmFpbGVkIHRvIHVucmVnaXN0ZXIgZnJvbSBQRjogJWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICB1bnJlZ19lcnIpO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdGVuaWNfYWRtaW5fY2hhbm5lbF9jbG9zZShlbmljKTtcXG4rXFx0XFx0fVxcbitcXG4gXFx0XFx0dW5yZWdpc3Rlcl9uZXRkZXYobmV0ZGV2KTtcXG4tXFx0XFx0ZW5pY19kZXZfZGVpbml0KGVuaWMpO1xcbi1cXHRcXHR2bmljX2Rldl9jbG9zZShlbmljLVxcdTAwM2V2ZGV2KTtcXG4rXFx0XFx0LyogdW5yZWdpc3Rlcl9uZXRkZXYoKSAtXFx1MDAzZSBlbmljX3N0b3AoKSBzdG9wcyB0aGUgbm90aWZ5IHRpbWVyLCBzb1xcbitcXHRcXHQgKiBubyBuZXcgbGlua19ub3RpZnlfd29yayBjYW4gYmUgcXVldWVkIHBhc3QgdGhpcyBwb2ludC4gIENhbmNlbFxcbitcXHRcXHQgKiB1bmNvbmRpdGlvbmFsbHkgdG8gY292ZXIgdGhlIG5hcnJvdyB3aW5kb3cgd2hlcmVcXG4rXFx0XFx0ICogZW5pY19saW5rX2NoZWNrKCkgc2NoZWR1bGVkIGl0IGp1c3QgYXMgU1ItSU9WIHdhcyBkaXNhYmxlZC5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGNhbmNlbF93b3JrX3N5bmMoXFx1MDAyNmVuaWMtXFx1MDAzZWxpbmtfbm90aWZ5X3dvcmspO1xcbiAjaWZkZWYgQ09ORklHX1BDSV9JT1ZcXG4gXFx0XFx0aWYgKGVuaWNfc3Jpb3ZfZW5hYmxlZChlbmljKSkge1xcbi1cXHRcXHRcXHRwY2lfZGlzYWJsZV9zcmlvdihwZGV2KTtcXG4tXFx0XFx0XFx0ZW5pYy1cXHUwMDNlcHJpdl9mbGFncyBcXHUwMDI2PSB+RU5JQ19TUklPVl9FTkFCTEVEO1xcbitcXHRcXHRcXHRpZiAoZW5pYy1cXHUwMDNldmZfdHlwZSA9PSBFTklDX1ZGX1RZUEVfVjIpXFxuK1xcdFxcdFxcdFxcdGVuaWNfc3Jpb3ZfdjJfZGlzYWJsZShlbmljKTtcXG4rXFx0XFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRcXHRwY2lfZGlzYWJsZV9zcmlvdihwZGV2KTtcXG4gXFx0XFx0fVxcbiAjZW5kaWZcXG4rXFx0XFx0ZW5pY19kZXZfZGVpbml0KGVuaWMpO1xcbitcXHRcXHR2bmljX2Rldl9jbG9zZShlbmljLVxcdTAwM2V2ZGV2KTtcXG4gXFx0XFx0a2ZyZWUoZW5pYy1cXHUwMDNlcHApO1xcbiBcXHRcXHR2bmljX2Rldl91bnJlZ2lzdGVyKGVuaWMtXFx1MDAzZXZkZXYpO1xcbiBcXHRcXHRlbmljX2lvdW5tYXAoZW5pYyk7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19tYm94LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfbWJveC5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uNWNkYWY1YTBlNTI0NjdcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21ib3guY1xcbkBAIC0wLDAgKzEsNjQwIEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4rLy8gQ29weXJpZ2h0IDIwMjUgQ2lzY28gU3lzdGVtcywgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC5cXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9rZXJuZWwuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L25ldGRldmljZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvZG1hLW1hcHBpbmcuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RlbGF5LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9jb21wbGV0aW9uLmhcXHUwMDNlXFxuK1xcbisjaW5jbHVkZSBcXFwidm5pY19kZXYuaFxcXCJcXG4rI2luY2x1ZGUgXFxcInZuaWNfd3EuaFxcXCJcXG4rI2luY2x1ZGUgXFxcInZuaWNfY3EuaFxcXCJcXG4rI2luY2x1ZGUgXFxcImVuaWMuaFxcXCJcXG4rI2luY2x1ZGUgXFxcImVuaWNfYWRtaW4uaFxcXCJcXG4rI2luY2x1ZGUgXFxcImVuaWNfbWJveC5oXFxcIlxcbisjaW5jbHVkZSBcXFwid3FfZW5ldF9kZXNjLmhcXFwiXFxuK1xcbisjZGVmaW5lIEVOSUNfTUJPWF9QT0xMX1RJTUVPVVRfVVNcXHQ1MDAwMDAwXFxuKyNkZWZpbmUgRU5JQ19NQk9YX1BPTExfSU5URVJWQUxfVVNcXHQxMDBcXG4rXFxuK3N0YXRpYyB2b2lkIGVuaWNfbWJveF9maWxsX2hkcihzdHJ1Y3QgZW5pYyAqZW5pYywgc3RydWN0IGVuaWNfbWJveF9oZHIgKmhkcixcXG4rXFx0XFx0XFx0ICAgICAgIHU4IG1zZ190eXBlLCB1MTYgZHN0X3ZuaWNfaWQsIHUxNiBtc2dfbGVuKVxcbit7XFxuK1xcdG1lbXNldChoZHIsIDAsIHNpemVvZigqaGRyKSk7XFxuK1xcdGhkci1cXHUwMDNlZHN0X3ZuaWNfaWQgPSBjcHVfdG9fbGUxNihkc3Rfdm5pY19pZCk7XFxuK1xcdGhkci1cXHUwMDNlbXNnX3R5cGUgPSBtc2dfdHlwZTtcXG4rXFx0aGRyLVxcdTAwM2Vtc2dfbGVuID0gY3B1X3RvX2xlMTYobXNnX2xlbik7XFxuK1xcdGhkci1cXHUwMDNlbXNnX251bSA9IGNwdV90b19sZTY0KCsrZW5pYy1cXHUwMDNlbWJveF9tc2dfbnVtKTtcXG4rfVxcbitcXG4raW50IGVuaWNfbWJveF9zZW5kX21zZyhzdHJ1Y3QgZW5pYyAqZW5pYywgdTggbXNnX3R5cGUsIHUxNiBkc3Rfdm5pY19pZCxcXG4rXFx0XFx0ICAgICAgIHZvaWQgKnBheWxvYWQsIHUxNiBwYXlsb2FkX2xlbilcXG4re1xcbitcXHR1MTYgdG90YWxfbGVuID0gc2l6ZW9mKHN0cnVjdCBlbmljX21ib3hfaGRyKSArIHBheWxvYWRfbGVuO1xcbitcXHRzdHJ1Y3Qgdm5pY193cSAqd3EgPSBcXHUwMDI2ZW5pYy1cXHUwMDNlYWRtaW5fd3E7XFxuK1xcdHN0cnVjdCB3cV9lbmV0X2Rlc2MgKmRlc2M7XFxuK1xcdHVuc2lnbmVkIGxvbmcgdGltZW91dDtcXG4rXFx0ZG1hX2FkZHJfdCBkbWFfYWRkcjtcXG4rXFx0dTE2IHZsYW5fdGFnO1xcbitcXHR2b2lkICpidWY7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHQvKiBTZXJpYWxpemUgTUJPWCBzZW5kcy4gVGhlIGFkbWluIGNoYW5uZWwgaXMgYSBsb3ctZnJlcXVlbmN5XFxuK1xcdCAqIGNvbnRyb2wgcGF0aDsgaG9sZGluZyB0aGUgbXV0ZXggYWNyb3NzIHRoZSBwb2xsIGlzIGFjY2VwdGFibGUuXFxuK1xcdCAqL1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZlbmljLVxcdTAwM2VtYm94X2xvY2spO1xcbitcXG4rXFx0aWYgKCFlbmljLVxcdTAwM2VoYXNfYWRtaW5fY2hhbm5lbCB8fCBSRUFEX09OQ0UoZW5pYy1cXHUwMDNlbWJveF9zZW5kX2Rpc2FibGVkKSkge1xcbitcXHRcXHRlcnIgPSAtRU5PREVWO1xcbitcXHRcXHRnb3RvIHVubG9jaztcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHZuaWNfd3FfZGVzY19hdmFpbCh3cSkgPT0gMCkge1xcbitcXHRcXHRlcnIgPSAtRU5PU1BDO1xcbitcXHRcXHRnb3RvIHVubG9jaztcXG4rXFx0fVxcbitcXG4rXFx0YnVmID0ga21hbGxvYyh0b3RhbF9sZW4sIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoIWJ1Zikge1xcbitcXHRcXHRlcnIgPSAtRU5PTUVNO1xcbitcXHRcXHRnb3RvIHVubG9jaztcXG4rXFx0fVxcbitcXG4rXFx0ZW5pY19tYm94X2ZpbGxfaGRyKGVuaWMsIGJ1ZiwgbXNnX3R5cGUsIGRzdF92bmljX2lkLCB0b3RhbF9sZW4pO1xcbitcXHRpZiAocGF5bG9hZF9sZW4pIHtcXG4rXFx0XFx0dm9pZCAqZHN0ID0gYnVmICsgc2l6ZW9mKHN0cnVjdCBlbmljX21ib3hfaGRyKTtcXG4rXFxuK1xcdFxcdG1lbWNweShkc3QsIHBheWxvYWQsIHBheWxvYWRfbGVuKTtcXG4rXFx0fVxcbitcXG4rXFx0ZG1hX2FkZHIgPSBkbWFfbWFwX3NpbmdsZShcXHUwMDI2ZW5pYy1cXHUwMDNlcGRldi1cXHUwMDNlZGV2LCBidWYsIHRvdGFsX2xlbixcXG4rXFx0XFx0XFx0XFx0ICBETUFfVE9fREVWSUNFKTtcXG4rXFx0aWYgKGRtYV9tYXBwaW5nX2Vycm9yKFxcdTAwMjZlbmljLVxcdTAwM2VwZGV2LVxcdTAwM2VkZXYsIGRtYV9hZGRyKSkge1xcbitcXHRcXHRrZnJlZShidWYpO1xcbitcXHRcXHRlcnIgPSAtRU5PTUVNO1xcbitcXHRcXHRnb3RvIHVubG9jaztcXG4rXFx0fVxcbitcXG4rXFx0LyogRmlybXdhcmUgdXNlcyB2bGFuIGZpZWxkIGZvciByb3V0aW5nOiAwID0gUEYsIDEtYmFzZWQgPSBWRiBpbmRleCAqL1xcbitcXHRpZiAoZHN0X3ZuaWNfaWQgPT0gRU5JQ19NQk9YX0RTVF9QRilcXG4rXFx0XFx0dmxhbl90YWcgPSAwO1xcbitcXHRlbHNlXFxuK1xcdFxcdHZsYW5fdGFnID0gZHN0X3ZuaWNfaWQgKyAxO1xcbitcXG4rXFx0ZGVzYyA9IHZuaWNfd3FfbmV4dF9kZXNjKHdxKTtcXG4rXFx0d3FfZW5ldF9kZXNjX2VuYyhkZXNjLCAodTY0KWRtYV9hZGRyIHwgVk5JQ19QQUREUl9UQVJHRVQsXFxuK1xcdFxcdFxcdCB0b3RhbF9sZW4sXFxuK1xcdFxcdFxcdCAwLCAwLCAwLCAgICAgICAvKiBtc3MsIGhkcl9sZW4sIG9mZmxvYWRfbW9kZSAqL1xcbitcXHRcXHRcXHQgMSwgMSwgICAgICAgICAgLyogZW9wLCBjcV9lbnRyeSAqL1xcbitcXHRcXHRcXHQgMCwgICAgICAgICAgICAgLyogZmNvZV9lbmNhcCAqL1xcbitcXHRcXHRcXHQgMSwgdmxhbl90YWcsICAgLyogdmxhbl90YWdfaW5zZXJ0LCB2bGFuX3RhZyAqL1xcbitcXHRcXHRcXHQgMCk7ICAgICAgICAgICAgLyogbG9vcGJhY2sgKi9cXG4rXFx0dm5pY193cV9wb3N0KHdxLCBidWYsIGRtYV9hZGRyLCB0b3RhbF9sZW4sXFxuK1xcdFxcdCAgICAgMSwgMSwgICAgICAgICAgICAgIC8qIHNvcCwgZW9wICovXFxuK1xcdFxcdCAgICAgMSwgMSwgICAgICAgICAgICAgIC8qIGRlc2Nfc2tpcF9jbnQsIGNxX2VudHJ5ICovXFxuK1xcdFxcdCAgICAgMCwgMCk7ICAgICAgICAgICAgIC8qIGNvbXByZXNzZWRfc2VuZCwgd3JpZCAqL1xcbitcXHR2bmljX3dxX2Rvb3JiZWxsKHdxKTtcXG4rXFxuK1xcdHRpbWVvdXQgPSBqaWZmaWVzICsgdXNlY3NfdG9famlmZmllcyhFTklDX01CT1hfUE9MTF9USU1FT1VUX1VTKTtcXG4rXFx0ZXJyID0gLUVUSU1FRE9VVDtcXG4rXFx0d2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIHRpbWVvdXQpKSB7XFxuK1xcdFxcdGlmIChlbmljX2FkbWluX3dxX2NxX3NlcnZpY2UoZW5pYykpIHtcXG4rXFx0XFx0XFx0ZXJyID0gMDtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdH1cXG4rXFx0XFx0dXNsZWVwX3JhbmdlKEVOSUNfTUJPWF9QT0xMX0lOVEVSVkFMX1VTLFxcbitcXHRcXHRcXHQgICAgIEVOSUNfTUJPWF9QT0xMX0lOVEVSVkFMX1VTICsgNTApO1xcbitcXHR9XFxuK1xcdC8qIEZpbmFsIGNoZWNrIGluIGNhc2UgY29tcGxldGlvbiBhcnJpdmVkIGR1cmluZyB0aGUgbGFzdCBzbGVlcCAqL1xcbitcXHRpZiAoZXJyIFxcdTAwMjZcXHUwMDI2IGVuaWNfYWRtaW5fd3FfY3Ffc2VydmljZShlbmljKSlcXG4rXFx0XFx0ZXJyID0gMDtcXG4rXFxuK1xcdGlmICghZXJyKSB7XFxuK1xcdFxcdHdxLVxcdTAwM2V0b19jbGVhbiA9IHdxLVxcdTAwM2V0b19jbGVhbi1cXHUwMDNlbmV4dDtcXG4rXFx0XFx0d3EtXFx1MDAzZXJpbmcuZGVzY19hdmFpbCsrO1xcbitcXHRcXHRkbWFfdW5tYXBfc2luZ2xlKFxcdTAwMjZlbmljLVxcdTAwM2VwZGV2LVxcdTAwM2VkZXYsIGRtYV9hZGRyLCB0b3RhbF9sZW4sXFxuK1xcdFxcdFxcdFxcdCBETUFfVE9fREVWSUNFKTtcXG4rXFx0XFx0a2ZyZWUoYnVmKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0bmV0ZGV2X2VycihlbmljLVxcdTAwM2VuZXRkZXYsXFxuK1xcdFxcdFxcdCAgIFxcXCJNQk9YIHNlbmQgdGltZWQgb3V0ICh0eXBlICV1IGRzdCAldSksIGRpc2FibGluZyBjaGFubmVsXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICBtc2dfdHlwZSwgZHN0X3ZuaWNfaWQpO1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBUaGUgV1EgZGVzY3JpcHRvciBpcyBzdGlsbCBsaXZlIGluIGhhcmR3YXJlLiBEbyBub3QgdW5tYXBcXG4rXFx0XFx0ICogb3IgZnJlZSB0aGUgYnVmZmVyOiB0aGUgZGV2aWNlIG1heSBzdGlsbCBETUEgZnJvbSBkbWFfYWRkci5cXG4rXFx0XFx0ICogTWFyayB0aGUgY2hhbm5lbCB1bnVzYWJsZSBzbyBubyBmdXJ0aGVyIHNlbmRzIGFyZSBhdHRlbXB0ZWQuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRXUklURV9PTkNFKGVuaWMtXFx1MDAzZW1ib3hfc2VuZF9kaXNhYmxlZCwgdHJ1ZSk7XFxuK1xcdH1cXG4rXFxuK1xcdG5ldGRldl9kYmcoZW5pYy1cXHUwMDNlbmV0ZGV2LFxcbitcXHRcXHQgICBcXFwiTUJPWCBzZW5kIG1zZ190eXBlICV1IGRzdCAldSB2bGFuICV1IGVyciAlZFxcXFxuXFxcIixcXG4rXFx0XFx0ICAgbXNnX3R5cGUsIGRzdF92bmljX2lkLCB2bGFuX3RhZywgZXJyKTtcXG4rdW5sb2NrOlxcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNmVuaWMtXFx1MDAzZW1ib3hfbG9jayk7XFxuK1xcdHJldHVybiBlcnI7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgZW5pY19tYm94X3dhaXRfcmVwbHkoc3RydWN0IGVuaWMgKmVuaWMsIHVuc2lnbmVkIGxvbmcgdGltZW91dF9tcylcXG4re1xcbitcXHR1bnNpZ25lZCBsb25nIGxlZnQ7XFxuK1xcbitcXHRsZWZ0ID0gd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KFxcdTAwMjZlbmljLVxcdTAwM2VtYm94X2NvbXAsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIG1zZWNzX3RvX2ppZmZpZXModGltZW91dF9tcykpO1xcbitcXG4rXFx0cmV0dXJuIGxlZnQgPyAwIDogLUVUSU1FRE9VVDtcXG4rfVxcbitcXG4raW50IGVuaWNfbWJveF9zZW5kX2xpbmtfc3RhdGUoc3RydWN0IGVuaWMgKmVuaWMsIHUxNiB2Zl9pZCwgdTMyIGxpbmtfc3RhdGUpXFxuK3tcXG4rXFx0c3RydWN0IGVuaWNfbWJveF9wZl9saW5rX3N0YXRlX25vdGlmX21zZyBub3RpZiA9IHt9O1xcbitcXG4rXFx0aWYgKCFlbmljLVxcdTAwM2V2Zl9zdGF0ZSB8fCB2Zl9pZCBcXHUwMDNlPSBlbmljLVxcdTAwM2VudW1fdmZzIHx8XFxuK1xcdCAgICAhZW5pYy1cXHUwMDNldmZfc3RhdGVbdmZfaWRdLnJlZ2lzdGVyZWQpIHtcXG4rXFx0XFx0bmV0ZGV2X2RiZyhlbmljLVxcdTAwM2VuZXRkZXYsXFxuK1xcdFxcdFxcdCAgIFxcXCJNQk9YOiBza2lwIGxpbmsgc3RhdGUgdG8gdW5yZWdpc3RlcmVkIFZGICV1XFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICB2Zl9pZCk7XFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHR9XFxuK1xcbitcXHRub3RpZi5saW5rX3N0YXRlID0gY3B1X3RvX2xlMzIobGlua19zdGF0ZSk7XFxuK1xcdHJldHVybiBlbmljX21ib3hfc2VuZF9tc2coZW5pYywgRU5JQ19NQk9YX1BGX0xJTktfU1RBVEVfTk9USUYsIHZmX2lkLFxcbitcXHRcXHRcXHRcXHQgIFxcdTAwMjZub3RpZiwgc2l6ZW9mKG5vdGlmKSk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgZW5pY19tYm94X3BmX2hhbmRsZV9jYXBhYmlsaXR5KHN0cnVjdCBlbmljICplbmljLCB2b2lkICptc2csXFxuK1xcdFxcdFxcdFxcdFxcdCAgdTE2IHZmX2lkLCB1NjQgbXNnX251bSlcXG4re1xcbitcXHRzdHJ1Y3QgZW5pY19tYm94X3ZmX2NhcGFiaWxpdHlfcmVwbHlfbXNnIHJlcGx5ID0ge307XFxuK1xcbitcXHRyZXBseS5yZXBseS5yZXRfbWFqb3IgPSBjcHVfdG9fbGUxNigwKTtcXG4rXFx0cmVwbHkudmVyc2lvbiA9IGNwdV90b19sZTMyKEVOSUNfTUJPWF9DQVBfVkVSU0lPTl8xKTtcXG4rXFxuK1xcdHJldHVybiBlbmljX21ib3hfc2VuZF9tc2coZW5pYywgRU5JQ19NQk9YX1ZGX0NBUEFCSUxJVFlfUkVQTFksIHZmX2lkLFxcbitcXHRcXHRcXHRcXHQgIFxcdTAwMjZyZXBseSwgc2l6ZW9mKHJlcGx5KSk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgZW5pY19tYm94X3BmX2hhbmRsZV9yZWdpc3RlcihzdHJ1Y3QgZW5pYyAqZW5pYywgdm9pZCAqbXNnLFxcbitcXHRcXHRcXHRcXHRcXHR1MTYgdmZfaWQsIHU2NCBtc2dfbnVtKVxcbit7XFxuK1xcdHN0cnVjdCBlbmljX21ib3hfdmZfcmVnaXN0ZXJfcmVwbHlfbXNnIHJlcGx5ID0ge307XFxuK1xcdHUzMiBsaW5rX3N0YXRlO1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0aWYgKCFlbmljLVxcdTAwM2V2Zl9zdGF0ZSB8fCB2Zl9pZCBcXHUwMDNlPSBlbmljLVxcdTAwM2VudW1fdmZzKSB7XFxuK1xcdFxcdGlmIChuZXRfcmF0ZWxpbWl0KCkpXFxuK1xcdFxcdFxcdG5ldGRldl93YXJuKGVuaWMtXFx1MDAzZW5ldGRldixcXG4rXFx0XFx0XFx0XFx0ICAgIFxcXCJNQk9YOiByZWdpc3RlciBmcm9tIGludmFsaWQgVkYgJXVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgICB2Zl9pZCk7XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcbitcXHQvKiBWRiByZS1yZWdpc3RlcmluZyAoZS5nLiBndWVzdCByZWJvb3Qgd2l0aG91dCBjbGVhbiB1bnJlZ2lzdGVyKTpcXG4rXFx0ICogbWFyayB0aGUgcHJldmlvdXMgcmVnaXN0cmF0aW9uIGluYWN0aXZlIGJlZm9yZSBhY2NlcHRpbmcgdGhlIG5ldyBvbmUuXFxuK1xcdCAqL1xcbitcXHRpZiAoZW5pYy1cXHUwMDNldmZfc3RhdGVbdmZfaWRdLnJlZ2lzdGVyZWQpIHtcXG4rXFx0XFx0bmV0ZGV2X2RiZyhlbmljLVxcdTAwM2VuZXRkZXYsXFxuK1xcdFxcdFxcdCAgIFxcXCJNQk9YOiBWRiAldSByZS1yZWdpc3RlciwgY2xlYW5pbmcgcHJldmlvdXMgc3RhdGVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgIHZmX2lkKTtcXG4rXFx0XFx0ZW5pYy1cXHUwMDNldmZfc3RhdGVbdmZfaWRdLnJlZ2lzdGVyZWQgPSBmYWxzZTtcXG4rXFx0fVxcbitcXG4rXFx0cmVwbHkucmVwbHkucmV0X21ham9yID0gY3B1X3RvX2xlMTYoMCk7XFxuK1xcdGVyciA9IGVuaWNfbWJveF9zZW5kX21zZyhlbmljLCBFTklDX01CT1hfVkZfUkVHSVNURVJfUkVQTFksIHZmX2lkLFxcbitcXHRcXHRcXHRcXHQgXFx1MDAyNnJlcGx5LCBzaXplb2YocmVwbHkpKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFxuK1xcdGVuaWMtXFx1MDAzZXZmX3N0YXRlW3ZmX2lkXS5yZWdpc3RlcmVkID0gdHJ1ZTtcXG4rXFx0aWYgKG5ldF9yYXRlbGltaXQoKSlcXG4rXFx0XFx0bmV0ZGV2X2luZm8oZW5pYy1cXHUwMDNlbmV0ZGV2LCBcXFwiVkYgJXUgcmVnaXN0ZXJlZCB2aWEgTUJPWFxcXFxuXFxcIiwgdmZfaWQpO1xcbitcXG4rXFx0bGlua19zdGF0ZSA9IG5ldGlmX2NhcnJpZXJfb2soZW5pYy1cXHUwMDNlbmV0ZGV2KSA/XFxuK1xcdFxcdEVOSUNfTUJPWF9MSU5LX1NUQVRFX0VOQUJMRSA6XFxuK1xcdFxcdEVOSUNfTUJPWF9MSU5LX1NUQVRFX0RJU0FCTEU7XFxuK1xcdGVyciA9IGVuaWNfbWJveF9zZW5kX2xpbmtfc3RhdGUoZW5pYywgdmZfaWQsIGxpbmtfc3RhdGUpO1xcbitcXHRpZiAoZXJyIFxcdTAwMjZcXHUwMDI2IG5ldF9yYXRlbGltaXQoKSlcXG4rXFx0XFx0bmV0ZGV2X3dhcm4oZW5pYy1cXHUwMDNlbmV0ZGV2LFxcbitcXHRcXHRcXHQgICAgXFxcIlZGICV1OiBmYWlsZWQgdG8gc2VuZCBpbml0aWFsIGxpbmsgc3RhdGU6ICVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICAgdmZfaWQsIGVycik7XFxuK1xcdC8qIFJlZ2lzdHJhdGlvbiBzdWNjZWVkZWQ7IGluaXRpYWwgbGluayBzdGF0ZSBub3RpZmljYXRpb24gc2VudFxcbitcXHQgKiBhYm92ZS4gIFN1YnNlcXVlbnQgbGluayBzdGF0ZSBjaGFuZ2VzIGFyZSBzZW50IGZyb20gdGhlIFBGXFxuK1xcdCAqIHdoZW4gZW5pY19saW5rX2NoZWNrKCkgZGV0ZWN0cyBjYXJyaWVyIGNoYW5nZXMuXFxuK1xcdCAqL1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBlbmljX21ib3hfcGZfaGFuZGxlX3VucmVnaXN0ZXIoc3RydWN0IGVuaWMgKmVuaWMsIHZvaWQgKm1zZyxcXG4rXFx0XFx0XFx0XFx0XFx0ICB1MTYgdmZfaWQsIHU2NCBtc2dfbnVtKVxcbit7XFxuK1xcdHN0cnVjdCBlbmljX21ib3hfdmZfcmVnaXN0ZXJfcmVwbHlfbXNnIHJlcGx5ID0ge307XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHRpZiAoIWVuaWMtXFx1MDAzZXZmX3N0YXRlIHx8IHZmX2lkIFxcdTAwM2U9IGVuaWMtXFx1MDAzZW51bV92ZnMpIHtcXG4rXFx0XFx0aWYgKG5ldF9yYXRlbGltaXQoKSlcXG4rXFx0XFx0XFx0bmV0ZGV2X3dhcm4oZW5pYy1cXHUwMDNlbmV0ZGV2LFxcbitcXHRcXHRcXHRcXHQgICAgXFxcIk1CT1g6IHVucmVnaXN0ZXIgZnJvbSBpbnZhbGlkIFZGICV1XFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICAgdmZfaWQpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4rXFx0LyogVkYgaXMgdW5sb2FkaW5nOyBjbGVhciBsb2NhbCBzdGF0ZSByZWdhcmRsZXNzIG9mIHdoZXRoZXJcXG4rXFx0ICogdGhlIHJlcGx5IGlzIHN1Y2Nlc3NmdWxseSBkZWxpdmVyZWQgdG8gYXZvaWQgdGhlIFBGIHRyZWF0aW5nXFxuK1xcdCAqIGEgZGVhZCBWRiBhcyBzdGlsbCByZWdpc3RlcmVkLlxcbitcXHQgKi9cXG4rXFx0ZW5pYy1cXHUwMDNldmZfc3RhdGVbdmZfaWRdLnJlZ2lzdGVyZWQgPSBmYWxzZTtcXG4rXFxuK1xcdHJlcGx5LnJlcGx5LnJldF9tYWpvciA9IGNwdV90b19sZTE2KDApO1xcbitcXHRlcnIgPSBlbmljX21ib3hfc2VuZF9tc2coZW5pYywgRU5JQ19NQk9YX1ZGX1VOUkVHSVNURVJfUkVQTFksIHZmX2lkLFxcbitcXHRcXHRcXHRcXHQgXFx1MDAyNnJlcGx5LCBzaXplb2YocmVwbHkpKTtcXG4rXFxuK1xcdGlmIChuZXRfcmF0ZWxpbWl0KCkpXFxuK1xcdFxcdG5ldGRldl9pbmZvKGVuaWMtXFx1MDAzZW5ldGRldixcXG4rXFx0XFx0XFx0ICAgIFxcXCJWRiAldSB1bnJlZ2lzdGVyZWQgdmlhIE1CT1hcXFxcblxcXCIsIHZmX2lkKTtcXG4rXFxuK1xcdHJldHVybiBlcnI7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGVuaWNfbWJveF9wZl9wcm9jZXNzX21zZyhzdHJ1Y3QgZW5pYyAqZW5pYyxcXG4rXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgZW5pY19tYm94X2hkciAqaGRyLCB2b2lkICpwYXlsb2FkKVxcbit7XFxuK1xcdHUxNiB2Zl9pZCA9IGxlMTZfdG9fY3B1KGhkci1cXHUwMDNlc3JjX3ZuaWNfaWQpO1xcbitcXHR1MTYgbXNnX2xlbiA9IGxlMTZfdG9fY3B1KGhkci1cXHUwMDNlbXNnX2xlbik7XFxuK1xcdGludCBlcnIgPSAwO1xcbitcXG4rXFx0aWYgKCFlbmljLVxcdTAwM2V2Zl9zdGF0ZSkge1xcbitcXHRcXHRuZXRkZXZfZGJnKGVuaWMtXFx1MDAzZW5ldGRldixcXG4rXFx0XFx0XFx0ICAgXFxcIk1CT1g6IFBGIHJlY2VpdmVkIG1zZyBidXQgU1JJT1Ygbm90IGFjdGl2ZVxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHZmX2lkIFxcdTAwM2U9IGVuaWMtXFx1MDAzZW51bV92ZnMpIHtcXG4rXFx0XFx0aWYgKG5ldF9yYXRlbGltaXQoKSlcXG4rXFx0XFx0XFx0bmV0ZGV2X3dhcm4oZW5pYy1cXHUwMDNlbmV0ZGV2LFxcbitcXHRcXHRcXHRcXHQgICAgXFxcIk1CT1g6IFBGIHJlY2VpdmVkIG1zZyBmcm9tIGludmFsaWQgVkYgJXVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgICB2Zl9pZCk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0c3dpdGNoIChoZHItXFx1MDAzZW1zZ190eXBlKSB7XFxuK1xcdGNhc2UgRU5JQ19NQk9YX1ZGX0NBUEFCSUxJVFlfUkVRVUVTVDpcXG4rXFx0XFx0ZXJyID0gZW5pY19tYm94X3BmX2hhbmRsZV9jYXBhYmlsaXR5KGVuaWMsIHBheWxvYWQsIHZmX2lkLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgIGxlNjRfdG9fY3B1KGhkci1cXHUwMDNlbXNnX251bSkpO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBFTklDX01CT1hfVkZfUkVHSVNURVJfUkVRVUVTVDpcXG4rXFx0XFx0ZXJyID0gZW5pY19tYm94X3BmX2hhbmRsZV9yZWdpc3RlcihlbmljLCBwYXlsb2FkLCB2Zl9pZCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgbGU2NF90b19jcHUoaGRyLVxcdTAwM2Vtc2dfbnVtKSk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIEVOSUNfTUJPWF9WRl9VTlJFR0lTVEVSX1JFUVVFU1Q6XFxuK1xcdFxcdGVyciA9IGVuaWNfbWJveF9wZl9oYW5kbGVfdW5yZWdpc3RlcihlbmljLCBwYXlsb2FkLCB2Zl9pZCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBsZTY0X3RvX2NwdShoZHItXFx1MDAzZW1zZ19udW0pKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgRU5JQ19NQk9YX1BGX0xJTktfU1RBVEVfQUNLOiB7XFxuK1xcdFxcdHN0cnVjdCBlbmljX21ib3hfcGZfbGlua19zdGF0ZV9hY2tfbXNnICphY2sgPSBwYXlsb2FkO1xcbitcXG4rXFx0XFx0aWYgKG1zZ19sZW4gXFx1MDAzYyBzaXplb2YoKmhkcikgKyBzaXplb2YoKmFjaykpXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRpZiAobGUxNl90b19jcHUoYWNrLVxcdTAwM2VhY2sucmV0X21ham9yKSBcXHUwMDI2XFx1MDAyNiBuZXRfcmF0ZWxpbWl0KCkpXFxuK1xcdFxcdFxcdG5ldGRldl93YXJuKGVuaWMtXFx1MDAzZW5ldGRldixcXG4rXFx0XFx0XFx0XFx0ICAgIFxcXCJNQk9YOiBWRiAldSBsaW5rIHN0YXRlIEFDSyBlcnJvciAldS8ldVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgIHZmX2lkLFxcbitcXHRcXHRcXHRcXHQgICAgbGUxNl90b19jcHUoYWNrLVxcdTAwM2VhY2sucmV0X21ham9yKSxcXG4rXFx0XFx0XFx0XFx0ICAgIGxlMTZfdG9fY3B1KGFjay1cXHUwMDNlYWNrLnJldF9taW5vcikpO1xcbitcXHRcXHRicmVhaztcXG4rXFx0fVxcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRuZXRkZXZfZGJnKGVuaWMtXFx1MDAzZW5ldGRldixcXG4rXFx0XFx0XFx0ICAgXFxcIk1CT1g6IFBGIHVuaGFuZGxlZCBtc2cgdHlwZSAldSBmcm9tIFZGICV1XFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICBoZHItXFx1MDAzZW1zZ190eXBlLCB2Zl9pZCk7XFxuK1xcdFxcdGVyciA9IC1FT1BOT1RTVVBQO1xcbitcXHRcXHRicmVhaztcXG4rXFx0fVxcbitcXG4rXFx0aWYgKGVyciBcXHUwMDI2XFx1MDAyNiBuZXRfcmF0ZWxpbWl0KCkpXFxuK1xcdFxcdG5ldGRldl93YXJuKGVuaWMtXFx1MDAzZW5ldGRldixcXG4rXFx0XFx0XFx0ICAgIFxcXCJNQk9YOiBQRiBoYW5kbGVyIGZvciBtc2cgdHlwZSAldSBmcm9tIFZGICV1IGZhaWxlZDogJWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgICBoZHItXFx1MDAzZW1zZ190eXBlLCB2Zl9pZCwgZXJyKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgZW5pY19tYm94X3ZmX2hhbmRsZV9jYXBhYmlsaXR5X3JlcGx5KHN0cnVjdCBlbmljICplbmljLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgdm9pZCAqcGF5bG9hZClcXG4re1xcbitcXHRzdHJ1Y3QgZW5pY19tYm94X3ZmX2NhcGFiaWxpdHlfcmVwbHlfbXNnICpyZXBseSA9IHBheWxvYWQ7XFxuK1xcbitcXHRpZiAoZW5pYy1cXHUwMDNlbWJveF9leHBlY3RlZF9yZXBseSAhPSBFTklDX01CT1hfVkZfQ0FQQUJJTElUWV9SRVBMWSkge1xcbitcXHRcXHRuZXRkZXZfd2FybihlbmljLVxcdTAwM2VuZXRkZXYsXFxuK1xcdFxcdFxcdCAgICBcXFwiTUJPWDogc3RhbGUgY2FwYWJpbGl0eSByZXBseSAoZXhwZWN0ZWQgJXUpLCBkcm9wXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICAgZW5pYy1cXHUwMDNlbWJveF9leHBlY3RlZF9yZXBseSk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKGxlMTZfdG9fY3B1KHJlcGx5LVxcdTAwM2VyZXBseS5yZXRfbWFqb3IpID09IDApXFxuK1xcdFxcdGVuaWMtXFx1MDAzZXBmX2NhcF92ZXJzaW9uID0gbGUzMl90b19jcHUocmVwbHktXFx1MDAzZXZlcnNpb24pO1xcbitcXHRlbHNlXFxuK1xcdFxcdG5ldGRldl93YXJuKGVuaWMtXFx1MDAzZW5ldGRldixcXG4rXFx0XFx0XFx0ICAgIFxcXCJNQk9YOiBQRiByZWplY3RlZCBjYXBhYmlsaXR5IHJlcXVlc3Q6ICV1LyV1XFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICAgbGUxNl90b19jcHUocmVwbHktXFx1MDAzZXJlcGx5LnJldF9tYWpvciksXFxuK1xcdFxcdFxcdCAgICBsZTE2X3RvX2NwdShyZXBseS1cXHUwMDNlcmVwbHkucmV0X21pbm9yKSk7XFxuK1xcdGNvbXBsZXRlKFxcdTAwMjZlbmljLVxcdTAwM2VtYm94X2NvbXApO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBlbmljX21ib3hfdmZfaGFuZGxlX3JlZ2lzdGVyX3JlcGx5KHN0cnVjdCBlbmljICplbmljLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgdm9pZCAqcGF5bG9hZClcXG4re1xcbitcXHRzdHJ1Y3QgZW5pY19tYm94X3ZmX3JlZ2lzdGVyX3JlcGx5X21zZyAqcmVwbHkgPSBwYXlsb2FkO1xcbitcXG4rXFx0aWYgKGVuaWMtXFx1MDAzZW1ib3hfZXhwZWN0ZWRfcmVwbHkgIT0gRU5JQ19NQk9YX1ZGX1JFR0lTVEVSX1JFUExZKSB7XFxuK1xcdFxcdG5ldGRldl93YXJuKGVuaWMtXFx1MDAzZW5ldGRldixcXG4rXFx0XFx0XFx0ICAgIFxcXCJNQk9YOiBzdGFsZSByZWdpc3RlciByZXBseSAoZXhwZWN0ZWQgJXUpLCBkcm9wXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICAgZW5pYy1cXHUwMDNlbWJveF9leHBlY3RlZF9yZXBseSk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKGxlMTZfdG9fY3B1KHJlcGx5LVxcdTAwM2VyZXBseS5yZXRfbWFqb3IpKSB7XFxuK1xcdFxcdG5ldGRldl93YXJuKGVuaWMtXFx1MDAzZW5ldGRldixcXG4rXFx0XFx0XFx0ICAgIFxcXCJNQk9YOiBWRiByZWdpc3RlciByZWplY3RlZCBieSBQRjogJXUvJXVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgICBsZTE2X3RvX2NwdShyZXBseS1cXHUwMDNlcmVwbHkucmV0X21ham9yKSxcXG4rXFx0XFx0XFx0ICAgIGxlMTZfdG9fY3B1KHJlcGx5LVxcdTAwM2VyZXBseS5yZXRfbWlub3IpKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0ZW5pYy1cXHUwMDNldmZfcmVnaXN0ZXJlZCA9IHRydWU7XFxuK1xcdH1cXG4rXFx0Y29tcGxldGUoXFx1MDAyNmVuaWMtXFx1MDAzZW1ib3hfY29tcCk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGVuaWNfbWJveF92Zl9oYW5kbGVfdW5yZWdpc3Rlcl9yZXBseShzdHJ1Y3QgZW5pYyAqZW5pYyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0IHZvaWQgKnBheWxvYWQpXFxuK3tcXG4rXFx0c3RydWN0IGVuaWNfbWJveF92Zl9yZWdpc3Rlcl9yZXBseV9tc2cgKnJlcGx5ID0gcGF5bG9hZDtcXG4rXFxuK1xcdGlmIChlbmljLVxcdTAwM2VtYm94X2V4cGVjdGVkX3JlcGx5ICE9IEVOSUNfTUJPWF9WRl9VTlJFR0lTVEVSX1JFUExZKSB7XFxuK1xcdFxcdG5ldGRldl93YXJuKGVuaWMtXFx1MDAzZW5ldGRldixcXG4rXFx0XFx0XFx0ICAgIFxcXCJNQk9YOiBzdGFsZSB1bnJlZ2lzdGVyIHJlcGx5IChleHBlY3RlZCAldSksIGRyb3BcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgICBlbmljLVxcdTAwM2VtYm94X2V4cGVjdGVkX3JlcGx5KTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHRpZiAobGUxNl90b19jcHUocmVwbHktXFx1MDAzZXJlcGx5LnJldF9tYWpvcikpIHtcXG4rXFx0XFx0bmV0ZGV2X3dhcm4oZW5pYy1cXHUwMDNlbmV0ZGV2LFxcbitcXHRcXHRcXHQgICAgXFxcIk1CT1g6IFZGIHVucmVnaXN0ZXIgcmVqZWN0ZWQgYnkgUEY6ICV1LyV1XFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICAgbGUxNl90b19jcHUocmVwbHktXFx1MDAzZXJlcGx5LnJldF9tYWpvciksXFxuK1xcdFxcdFxcdCAgICBsZTE2X3RvX2NwdShyZXBseS1cXHUwMDNlcmVwbHkucmV0X21pbm9yKSk7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdGVuaWMtXFx1MDAzZXZmX3JlZ2lzdGVyZWQgPSBmYWxzZTtcXG4rXFx0fVxcbitcXHRjb21wbGV0ZShcXHUwMDI2ZW5pYy1cXHUwMDNlbWJveF9jb21wKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgZW5pY19tYm94X3ZmX2hhbmRsZV9saW5rX3N0YXRlKHN0cnVjdCBlbmljICplbmljLCB2b2lkICpwYXlsb2FkKVxcbit7XFxuK1xcdHN0cnVjdCBlbmljX21ib3hfcGZfbGlua19zdGF0ZV9ub3RpZl9tc2cgKm5vdGlmID0gcGF5bG9hZDtcXG4rXFx0c3RydWN0IGVuaWNfbWJveF9wZl9saW5rX3N0YXRlX2Fja19tc2cgYWNrID0ge307XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHRzd2l0Y2ggKGxlMzJfdG9fY3B1KG5vdGlmLVxcdTAwM2VsaW5rX3N0YXRlKSkge1xcbitcXHRjYXNlIEVOSUNfTUJPWF9MSU5LX1NUQVRFX0VOQUJMRTpcXG4rXFx0XFx0aWYgKCFuZXRpZl9jYXJyaWVyX29rKGVuaWMtXFx1MDAzZW5ldGRldikpXFxuK1xcdFxcdFxcdG5ldGlmX2NhcnJpZXJfb24oZW5pYy1cXHUwMDNlbmV0ZGV2KTtcXG4rXFx0XFx0bmV0ZGV2X2RiZyhlbmljLVxcdTAwM2VuZXRkZXYsIFxcXCJNQk9YOiBsaW5rIHN0YXRlIC1cXHUwMDNlIFVQXFxcXG5cXFwiKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgRU5JQ19NQk9YX0xJTktfU1RBVEVfRElTQUJMRTpcXG4rXFx0XFx0aWYgKG5ldGlmX2NhcnJpZXJfb2soZW5pYy1cXHUwMDNlbmV0ZGV2KSlcXG4rXFx0XFx0XFx0bmV0aWZfY2Fycmllcl9vZmYoZW5pYy1cXHUwMDNlbmV0ZGV2KTtcXG4rXFx0XFx0bmV0ZGV2X2RiZyhlbmljLVxcdTAwM2VuZXRkZXYsIFxcXCJNQk9YOiBsaW5rIHN0YXRlIC1cXHUwMDNlIERPV05cXFxcblxcXCIpO1xcbitcXHRcXHRicmVhaztcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0bmV0ZGV2X3dhcm4oZW5pYy1cXHUwMDNlbmV0ZGV2LCBcXFwiTUJPWDogdW5rbm93biBsaW5rIHN0YXRlICV1XFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICAgbGUzMl90b19jcHUobm90aWYtXFx1MDAzZWxpbmtfc3RhdGUpKTtcXG4rXFx0XFx0YWNrLmFjay5yZXRfbWFqb3IgPSBjcHVfdG9fbGUxNihFTklDX01CT1hfRVJSX0dFTkVSSUMpO1xcbitcXHRcXHRicmVhaztcXG4rXFx0fVxcbitcXG4rXFx0ZXJyID0gZW5pY19tYm94X3NlbmRfbXNnKGVuaWMsIEVOSUNfTUJPWF9QRl9MSU5LX1NUQVRFX0FDSyxcXG4rXFx0XFx0XFx0XFx0IEVOSUNfTUJPWF9EU1RfUEYsIFxcdTAwMjZhY2ssIHNpemVvZihhY2spKTtcXG4rXFx0aWYgKGVyciBcXHUwMDI2XFx1MDAyNiBuZXRfcmF0ZWxpbWl0KCkpXFxuK1xcdFxcdG5ldGRldl93YXJuKGVuaWMtXFx1MDAzZW5ldGRldixcXG4rXFx0XFx0XFx0ICAgIFxcXCJNQk9YOiBmYWlsZWQgdG8gc2VuZCBsaW5rIHN0YXRlIEFDSzogJWRcXFxcblxcXCIsIGVycik7XFxuK31cXG4rXFxuK3N0YXRpYyBib29sIGVuaWNfbWJveF92Zl9wYXlsb2FkX29rKHN0cnVjdCBlbmljICplbmljLCB1OCBtc2dfdHlwZSxcXG4rXFx0XFx0XFx0XFx0ICAgIHUxNiBwYXlsb2FkX2xlbiwgc2l6ZV90IG1pbl9sZW4pXFxuK3tcXG4rXFx0aWYgKHBheWxvYWRfbGVuIFxcdTAwM2MgbWluX2xlbikge1xcbitcXHRcXHRuZXRkZXZfd2FybihlbmljLVxcdTAwM2VuZXRkZXYsXFxuK1xcdFxcdFxcdCAgICBcXFwiTUJPWDogc2hvcnQgcGF5bG9hZCBmb3IgdHlwZSAldSAoJXUgXFx1MDAzYyAlenUpXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICAgbXNnX3R5cGUsIHBheWxvYWRfbGVuLCBtaW5fbGVuKTtcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHR9XFxuK1xcdHJldHVybiB0cnVlO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBlbmljX21ib3hfdmZfcHJvY2Vzc19tc2coc3RydWN0IGVuaWMgKmVuaWMsXFxuK1xcdFxcdFxcdFxcdCAgICAgc3RydWN0IGVuaWNfbWJveF9oZHIgKmhkciwgdm9pZCAqcGF5bG9hZCxcXG4rXFx0XFx0XFx0XFx0ICAgICB1MTYgcGF5bG9hZF9sZW4pXFxuK3tcXG4rXFx0c3dpdGNoIChoZHItXFx1MDAzZW1zZ190eXBlKSB7XFxuK1xcdGNhc2UgRU5JQ19NQk9YX1ZGX0NBUEFCSUxJVFlfUkVQTFk6IHtcXG4rXFx0XFx0c2l6ZV90IGV4cCA9IHNpemVvZihzdHJ1Y3QgZW5pY19tYm94X3ZmX2NhcGFiaWxpdHlfcmVwbHlfbXNnKTtcXG4rXFxuK1xcdFxcdGlmICghZW5pY19tYm94X3ZmX3BheWxvYWRfb2soZW5pYywgaGRyLVxcdTAwM2Vtc2dfdHlwZSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBwYXlsb2FkX2xlbiwgZXhwKSlcXG4rXFx0XFx0XFx0cmV0dXJuO1xcbitcXHRcXHRlbmljX21ib3hfdmZfaGFuZGxlX2NhcGFiaWxpdHlfcmVwbHkoZW5pYywgcGF5bG9hZCk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHR9XFxuK1xcdGNhc2UgRU5JQ19NQk9YX1ZGX1JFR0lTVEVSX1JFUExZOiB7XFxuK1xcdFxcdHNpemVfdCBleHAgPSBzaXplb2Yoc3RydWN0IGVuaWNfbWJveF92Zl9yZWdpc3Rlcl9yZXBseV9tc2cpO1xcbitcXG4rXFx0XFx0aWYgKCFlbmljX21ib3hfdmZfcGF5bG9hZF9vayhlbmljLCBoZHItXFx1MDAzZW1zZ190eXBlLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIHBheWxvYWRfbGVuLCBleHApKVxcbitcXHRcXHRcXHRyZXR1cm47XFxuK1xcdFxcdGVuaWNfbWJveF92Zl9oYW5kbGVfcmVnaXN0ZXJfcmVwbHkoZW5pYywgcGF5bG9hZCk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHR9XFxuK1xcdGNhc2UgRU5JQ19NQk9YX1ZGX1VOUkVHSVNURVJfUkVQTFk6IHtcXG4rXFx0XFx0c2l6ZV90IGV4cCA9IHNpemVvZihzdHJ1Y3QgZW5pY19tYm94X3ZmX3JlZ2lzdGVyX3JlcGx5X21zZyk7XFxuK1xcbitcXHRcXHRpZiAoIWVuaWNfbWJveF92Zl9wYXlsb2FkX29rKGVuaWMsIGhkci1cXHUwMDNlbXNnX3R5cGUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgcGF5bG9hZF9sZW4sIGV4cCkpXFxuK1xcdFxcdFxcdHJldHVybjtcXG4rXFx0XFx0ZW5pY19tYm94X3ZmX2hhbmRsZV91bnJlZ2lzdGVyX3JlcGx5KGVuaWMsIHBheWxvYWQpO1xcbitcXHRcXHRicmVhaztcXG4rXFx0fVxcbitcXHRjYXNlIEVOSUNfTUJPWF9QRl9MSU5LX1NUQVRFX05PVElGOiB7XFxuK1xcdFxcdHNpemVfdCBleHAgPSBzaXplb2Yoc3RydWN0IGVuaWNfbWJveF9wZl9saW5rX3N0YXRlX25vdGlmX21zZyk7XFxuK1xcbitcXHRcXHRpZiAoIWVuaWNfbWJveF92Zl9wYXlsb2FkX29rKGVuaWMsIGhkci1cXHUwMDNlbXNnX3R5cGUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgcGF5bG9hZF9sZW4sIGV4cCkpXFxuK1xcdFxcdFxcdHJldHVybjtcXG4rXFx0XFx0ZW5pY19tYm94X3ZmX2hhbmRsZV9saW5rX3N0YXRlKGVuaWMsIHBheWxvYWQpO1xcbitcXHRcXHRicmVhaztcXG4rXFx0fVxcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRuZXRkZXZfZGJnKGVuaWMtXFx1MDAzZW5ldGRldixcXG4rXFx0XFx0XFx0ICAgXFxcIk1CT1g6IFZGIHVuaGFuZGxlZCBtc2cgdHlwZSAldVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ICAgaGRyLVxcdTAwM2Vtc2dfdHlwZSk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGVuaWNfbWJveF9yZWN2X2hhbmRsZXIoc3RydWN0IGVuaWMgKmVuaWMsIHZvaWQgKmJ1ZixcXG4rXFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgaW50IGxlbilcXG4re1xcbitcXHRzdHJ1Y3QgZW5pY19tYm94X2hkciAqaGRyID0gYnVmO1xcbitcXHR2b2lkICpwYXlsb2FkO1xcbitcXHR1MTYgbXNnX2xlbjtcXG4rXFxuK1xcdGlmIChsZW4gXFx1MDAzYyBzaXplb2YoKmhkcikpIHtcXG4rXFx0XFx0aWYgKG5ldF9yYXRlbGltaXQoKSlcXG4rXFx0XFx0XFx0bmV0ZGV2X3dhcm4oZW5pYy1cXHUwMDNlbmV0ZGV2LFxcbitcXHRcXHRcXHRcXHQgICAgXFxcIk1CT1g6IHRydW5jYXRlZCBtZXNzYWdlIChsZW4gJXUgXFx1MDAzYyAlenUpXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICAgbGVuLCBzaXplb2YoKmhkcikpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChoZHItXFx1MDAzZW1zZ190eXBlIFxcdTAwM2U9IEVOSUNfTUJPWF9NQVgpIHtcXG4rXFx0XFx0aWYgKG5ldF9yYXRlbGltaXQoKSlcXG4rXFx0XFx0XFx0bmV0ZGV2X3dhcm4oZW5pYy1cXHUwMDNlbmV0ZGV2LFxcbitcXHRcXHRcXHRcXHQgICAgXFxcIk1CT1g6IHVua25vd24gbXNnIHR5cGUgJXVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgICBoZHItXFx1MDAzZW1zZ190eXBlKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHRtc2dfbGVuID0gbGUxNl90b19jcHUoaGRyLVxcdTAwM2Vtc2dfbGVuKTtcXG4rXFx0aWYgKG1zZ19sZW4gXFx1MDAzYyBzaXplb2YoKmhkcikgfHwgbXNnX2xlbiBcXHUwMDNlIGxlbikge1xcbitcXHRcXHRpZiAobmV0X3JhdGVsaW1pdCgpKVxcbitcXHRcXHRcXHRuZXRkZXZfd2FybihlbmljLVxcdTAwM2VuZXRkZXYsXFxuK1xcdFxcdFxcdFxcdCAgICBcXFwiTUJPWDogaW52YWxpZCBtc2dfbGVuICV1IChidWYgbGVuICV1KVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgIG1zZ19sZW4sIGxlbik7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0bmV0ZGV2X2RiZyhlbmljLVxcdTAwM2VuZXRkZXYsXFxuK1xcdFxcdCAgIFxcXCJNQk9YIHJlY3Y6IHR5cGUgJXUgZnJvbSB2bmljICV1IGxlbiAldVxcXFxuXFxcIixcXG4rXFx0XFx0ICAgaGRyLVxcdTAwM2Vtc2dfdHlwZSwgbGUxNl90b19jcHUoaGRyLVxcdTAwM2VzcmNfdm5pY19pZCksIG1zZ19sZW4pO1xcbitcXG4rXFx0cGF5bG9hZCA9IGJ1ZiArIHNpemVvZigqaGRyKTtcXG4rXFxuK1xcdGlmIChlbmljLVxcdTAwM2V2Zl9zdGF0ZSkge1xcbitcXHRcXHRlbmljX21ib3hfcGZfcHJvY2Vzc19tc2coZW5pYywgaGRyLCBwYXlsb2FkKTtcXG4rXFx0fSBlbHNlIGlmIChsZTE2X3RvX2NwdShoZHItXFx1MDAzZXNyY192bmljX2lkKSA9PSBFTklDX01CT1hfRFNUX1BGKSB7XFxuK1xcdFxcdC8qIHNyY192bmljX2lkIHdhcyBvdmVyd3JpdHRlbiBmcm9tIHRoZSBoYXJkd2FyZS12ZXJpZmllZCBDUVxcbitcXHRcXHQgKiBWTEFOIHNlbmRlciBmaWVsZCwgc28gYSBWRiBvbmx5IGFjY2VwdHMgbWVzc2FnZXMgdGhhdCB0aGVcXG4rXFx0XFx0ICogYWRhcHRlciBhdHRyaWJ1dGVzIHRvIHRoZSBQRi4gIEl0cyBzb2xlIGFkbWluLWNoYW5uZWwgcGVlciBpc1xcbitcXHRcXHQgKiB0aGUgUEY7IGRyb3AgYW55dGhpbmcgZWxzZSBhcyBhIHNwb29mZWQgbm90aWZpY2F0aW9uLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0ZW5pY19tYm94X3ZmX3Byb2Nlc3NfbXNnKGVuaWMsIGhkciwgcGF5bG9hZCxcXG4rXFx0XFx0XFx0XFx0XFx0IG1zZ19sZW4gLSAodTE2KXNpemVvZigqaGRyKSk7XFxuK1xcdH0gZWxzZSBpZiAobmV0X3JhdGVsaW1pdCgpKSB7XFxuK1xcdFxcdG5ldGRldl93YXJuKGVuaWMtXFx1MDAzZW5ldGRldixcXG4rXFx0XFx0XFx0ICAgIFxcXCJNQk9YOiBWRiBkcm9wcGluZyBub24tUEYgbWVzc2FnZSBmcm9tIHZuaWMgJXVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCAgICBsZTE2X3RvX2NwdShoZHItXFx1MDAzZXNyY192bmljX2lkKSk7XFxuK1xcdH1cXG4rfVxcbitcXG4raW50IGVuaWNfbWJveF92Zl9jYXBhYmlsaXR5X2NoZWNrKHN0cnVjdCBlbmljICplbmljKVxcbit7XFxuK1xcdHN0cnVjdCBlbmljX21ib3hfdmZfY2FwYWJpbGl0eV9tc2cgcmVxID0ge307XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHRlbmljLVxcdTAwM2VwZl9jYXBfdmVyc2lvbiA9IDA7XFxuK1xcdHJlaW5pdF9jb21wbGV0aW9uKFxcdTAwMjZlbmljLVxcdTAwM2VtYm94X2NvbXApO1xcbitcXHRlbmljLVxcdTAwM2VtYm94X2V4cGVjdGVkX3JlcGx5ID0gRU5JQ19NQk9YX1ZGX0NBUEFCSUxJVFlfUkVQTFk7XFxuK1xcdHJlcS52ZXJzaW9uID0gY3B1X3RvX2xlMzIoRU5JQ19NQk9YX0NBUF9WRVJTSU9OXzEpO1xcbitcXG4rXFx0ZXJyID0gZW5pY19tYm94X3NlbmRfbXNnKGVuaWMsIEVOSUNfTUJPWF9WRl9DQVBBQklMSVRZX1JFUVVFU1QsXFxuK1xcdFxcdFxcdFxcdCBFTklDX01CT1hfRFNUX1BGLCBcXHUwMDI2cmVxLCBzaXplb2YocmVxKSk7XFxuK1xcdGlmIChlcnIpIHtcXG4rXFx0XFx0ZW5pYy1cXHUwMDNlbWJveF9leHBlY3RlZF9yZXBseSA9IDA7XFxuK1xcdFxcdHJldHVybiBlcnI7XFxuK1xcdH1cXG4rXFxuK1xcdGVyciA9IGVuaWNfbWJveF93YWl0X3JlcGx5KGVuaWMsIDMwMDApO1xcbitcXHRlbmljLVxcdTAwM2VtYm94X2V4cGVjdGVkX3JlcGx5ID0gMDtcXG4rXFx0aWYgKGVycikge1xcbitcXHRcXHRuZXRkZXZfd2FybihlbmljLVxcdTAwM2VuZXRkZXYsXFxuK1xcdFxcdFxcdCAgICBcXFwiTUJPWDogbm8gY2FwYWJpbGl0eSByZXBseSBmcm9tIFBGXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKGVuaWMtXFx1MDAzZXBmX2NhcF92ZXJzaW9uIFxcdTAwM2MgRU5JQ19NQk9YX0NBUF9WRVJTSU9OXzEpIHtcXG4rXFx0XFx0bmV0ZGV2X3dhcm4oZW5pYy1cXHUwMDNlbmV0ZGV2LFxcbitcXHRcXHRcXHQgICAgXFxcIk1CT1g6IFBGIHZlcnNpb24gJXUgdG9vIG9sZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ICAgIGVuaWMtXFx1MDAzZXBmX2NhcF92ZXJzaW9uKTtcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4raW50IGVuaWNfbWJveF92Zl9yZWdpc3RlcihzdHJ1Y3QgZW5pYyAqZW5pYylcXG4re1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0ZW5pYy1cXHUwMDNldmZfcmVnaXN0ZXJlZCA9IGZhbHNlO1xcbitcXHRyZWluaXRfY29tcGxldGlvbihcXHUwMDI2ZW5pYy1cXHUwMDNlbWJveF9jb21wKTtcXG4rXFx0ZW5pYy1cXHUwMDNlbWJveF9leHBlY3RlZF9yZXBseSA9IEVOSUNfTUJPWF9WRl9SRUdJU1RFUl9SRVBMWTtcXG4rXFxuK1xcdGVyciA9IGVuaWNfbWJveF9zZW5kX21zZyhlbmljLCBFTklDX01CT1hfVkZfUkVHSVNURVJfUkVRVUVTVCxcXG4rXFx0XFx0XFx0XFx0IEVOSUNfTUJPWF9EU1RfUEYsIE5VTEwsIDApO1xcbitcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdGVuaWMtXFx1MDAzZW1ib3hfZXhwZWN0ZWRfcmVwbHkgPSAwO1xcbitcXHRcXHRyZXR1cm4gZXJyO1xcbitcXHR9XFxuK1xcbitcXHRlcnIgPSBlbmljX21ib3hfd2FpdF9yZXBseShlbmljLCAzMDAwKTtcXG4rXFx0ZW5pYy1cXHUwMDNlbWJveF9leHBlY3RlZF9yZXBseSA9IDA7XFxuK1xcdGlmIChlcnIpIHtcXG4rXFx0XFx0bmV0ZGV2X3dhcm4oZW5pYy1cXHUwMDNlbmV0ZGV2LFxcbitcXHRcXHRcXHQgICAgXFxcIk1CT1g6IFZGIHJlZ2lzdHJhdGlvbiB3aXRoIFBGIHRpbWVkIG91dFxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiBlcnI7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghZW5pYy1cXHUwMDNldmZfcmVnaXN0ZXJlZClcXG4rXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4raW50IGVuaWNfbWJveF92Zl91bnJlZ2lzdGVyKHN0cnVjdCBlbmljICplbmljKVxcbit7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHRpZiAoIWVuaWMtXFx1MDAzZXZmX3JlZ2lzdGVyZWQpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0cmVpbml0X2NvbXBsZXRpb24oXFx1MDAyNmVuaWMtXFx1MDAzZW1ib3hfY29tcCk7XFxuK1xcdGVuaWMtXFx1MDAzZW1ib3hfZXhwZWN0ZWRfcmVwbHkgPSBFTklDX01CT1hfVkZfVU5SRUdJU1RFUl9SRVBMWTtcXG4rXFxuK1xcdGVyciA9IGVuaWNfbWJveF9zZW5kX21zZyhlbmljLCBFTklDX01CT1hfVkZfVU5SRUdJU1RFUl9SRVFVRVNULFxcbitcXHRcXHRcXHRcXHQgRU5JQ19NQk9YX0RTVF9QRiwgTlVMTCwgMCk7XFxuK1xcdGlmIChlcnIpIHtcXG4rXFx0XFx0ZW5pYy1cXHUwMDNlbWJveF9leHBlY3RlZF9yZXBseSA9IDA7XFxuK1xcdFxcdHJldHVybiBlcnI7XFxuK1xcdH1cXG4rXFxuK1xcdGVyciA9IGVuaWNfbWJveF93YWl0X3JlcGx5KGVuaWMsIDMwMDApO1xcbitcXHRlbmljLVxcdTAwM2VtYm94X2V4cGVjdGVkX3JlcGx5ID0gMDtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0aWYgKGVuaWMtXFx1MDAzZXZmX3JlZ2lzdGVyZWQpXFxuK1xcdFxcdHJldHVybiAtRUFDQ0VTO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rdm9pZCBlbmljX21ib3hfaW5pdChzdHJ1Y3QgZW5pYyAqZW5pYylcXG4re1xcbitcXHQvKiBtYm94X2xvY2sgYW5kIG1ib3hfY29tcCBtdXN0IGJlIGluaXRpYWxpemVkIGV4YWN0bHkgb25jZSBwZXJcXG4rXFx0ICogZGV2aWNlIGxpZmV0aW1lOyB0aGUgUEYgc3Jpb3ZfY29uZmlndXJlIHBhdGggY2FuIHJlLWVudGVyIHRoaXNcXG4rXFx0ICogb24gZWFjaCBlbmFibGUgY3ljbGUgd2hlcmUgdGhlc2UgcHJpbWl0aXZlcyBhcmUgYWxyZWFkeSBzZXQgdXAuXFxuK1xcdCAqL1xcbitcXHRpZiAoIWVuaWMtXFx1MDAzZW1ib3hfaW5pdGlhbGl6ZWQpIHtcXG4rXFx0XFx0bXV0ZXhfaW5pdChcXHUwMDI2ZW5pYy1cXHUwMDNlbWJveF9sb2NrKTtcXG4rXFx0XFx0aW5pdF9jb21wbGV0aW9uKFxcdTAwMjZlbmljLVxcdTAwM2VtYm94X2NvbXApO1xcbitcXHRcXHRlbmljLVxcdTAwM2VtYm94X2luaXRpYWxpemVkID0gdHJ1ZTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0cmVpbml0X2NvbXBsZXRpb24oXFx1MDAyNmVuaWMtXFx1MDAzZW1ib3hfY29tcCk7XFxuK1xcdH1cXG4rXFx0ZW5pYy1cXHUwMDNlbWJveF9tc2dfbnVtID0gMDtcXG4rXFx0ZW5pYy1cXHUwMDNlYWRtaW5fcnFfaGFuZGxlciA9IGVuaWNfbWJveF9yZWN2X2hhbmRsZXI7XFxuK31cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21ib3guaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19tYm94LmhcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4xNWUzMGVlMmIwZWQ5NVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfbWJveC5oXFxuQEAgLTAsMCArMSw5NSBAQFxcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovXFxuKy8qIENvcHlyaWdodCAyMDI1IENpc2NvIFN5c3RlbXMsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICovXFxuK1xcbisjaWZuZGVmIF9FTklDX01CT1hfSF9cXG4rI2RlZmluZSBfRU5JQ19NQk9YX0hfXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvYml0cy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvdHlwZXMuaFxcdTAwM2VcXG4rXFxuKy8qXFxuKyAqIE1haWxib3ggcHJvdG9jb2wgZm9yIFBGLVZGIGNvbW11bmljYXRpb24gb3ZlciB0aGUgYWRtaW4gY2hhbm5lbC5cXG4rICpcXG4rICogRXZlbiBudW1iZXJzIGFyZSByZXF1ZXN0cywgb2RkIG51bWJlcnMgYXJlIHJlcGxpZXMvYWNrcy5cXG4rICogVGhlIHByZWZpeCBpbmRpY2F0ZXMgdGhlIGluaXRpYXRvcjogVkZfID0gVkYtaW5pdGlhdGVkLCBQRl8gPSBQRi1pbml0aWF0ZWQuXFxuKyAqL1xcbitlbnVtIGVuaWNfbWJveF9tc2dfdHlwZSB7XFxuK1xcdEVOSUNfTUJPWF9WRl9DQVBBQklMSVRZX1JFUVVFU1RcXHRcXHQ9IDAsXFxuK1xcdEVOSUNfTUJPWF9WRl9DQVBBQklMSVRZX1JFUExZXFx0XFx0PSAxLFxcbitcXHRFTklDX01CT1hfVkZfUkVHSVNURVJfUkVRVUVTVFxcdFxcdD0gMixcXG4rXFx0RU5JQ19NQk9YX1ZGX1JFR0lTVEVSX1JFUExZXFx0XFx0PSAzLFxcbitcXHRFTklDX01CT1hfVkZfVU5SRUdJU1RFUl9SRVFVRVNUXFx0XFx0PSA0LFxcbitcXHRFTklDX01CT1hfVkZfVU5SRUdJU1RFUl9SRVBMWVxcdFxcdD0gNSxcXG4rXFx0RU5JQ19NQk9YX1BGX0xJTktfU1RBVEVfTk9USUZcXHRcXHQ9IDYsXFxuK1xcdEVOSUNfTUJPWF9QRl9MSU5LX1NUQVRFX0FDS1xcdFxcdD0gNyxcXG4rXFx0RU5JQ19NQk9YX01BWFxcbit9O1xcbitcXG4rc3RydWN0IGVuaWNfbWJveF9oZHIge1xcbitcXHRfX2xlMTYgc3JjX3ZuaWNfaWQ7XFxuK1xcdF9fbGUxNiBkc3Rfdm5pY19pZDtcXG4rXFx0dTggbXNnX3R5cGU7XFxuK1xcdHU4IGZsYWdzO1xcbitcXHRfX2xlMTYgbXNnX2xlbjtcXG4rXFx0X19sZTY0IG1zZ19udW07XFxuK307XFxuK1xcbitzdHJ1Y3QgZW5pY19tYm94X2dlbmVyaWNfcmVwbHkge1xcbitcXHRfX2xlMTYgcmV0X21ham9yO1xcbitcXHRfX2xlMTYgcmV0X21pbm9yO1xcbit9O1xcbitcXG4rI2RlZmluZSBFTklDX01CT1hfRVJSX0dFTkVSSUNcXHRcXHRCSVQoMClcXG4rI2RlZmluZSBFTklDX01CT1hfRVJSX1ZGX05PVF9SRUdJU1RFUkVEXFx0QklUKDEpXFxuKyNkZWZpbmUgRU5JQ19NQk9YX0VSUl9NU0dfTk9UX1NVUFBPUlRFRFxcdEJJVCgyKVxcbitcXG4rLyogRU5JQ19NQk9YX1ZGX0NBUEFCSUxJVFlfUkVRVUVTVCAvIF9SRVBMWSAqL1xcbisjZGVmaW5lIEVOSUNfTUJPWF9DQVBfVkVSU0lPTl8wXFx0XFx0MFxcbisjZGVmaW5lIEVOSUNfTUJPWF9DQVBfVkVSU0lPTl8xXFx0XFx0MVxcbitcXG4rc3RydWN0IGVuaWNfbWJveF92Zl9jYXBhYmlsaXR5X21zZyB7XFxuK1xcdF9fbGUzMiB2ZXJzaW9uO1xcbitcXHRfX2xlMzIgcmVzZXJ2ZWRbMzJdO1xcbit9O1xcbitcXG4rLyogVGhlIGVtYmVkZGVkIGVuaWNfbWJveF9nZW5lcmljX3JlcGx5IGhhcyAyLWJ5dGUgYWxpZ25tZW50LCBidXQgdGhlXFxuKyAqIF9fbGUzMiBtZW1iZXJzIGdpdmUgdGhpcyBzdHJ1Y3QgNC1ieXRlIG5hdHVyYWwgYWxpZ25tZW50LiAgUmVjZWl2ZVxcbisgKiBidWZmZXJzIGNvbWUgZnJvbSBrbWFsbG9jIChcXHUwMDNlPSA4LWJ5dGUgYWxpZ25lZCksIHNvIHRoZXJlIGlzIG5vXFxuKyAqIG1pc2FsaWduZWQgYWNjZXNzIHJpc2sgd2hlbiBjYXN0aW5nIGZyb20gdGhlIHJlY2VpdmUgYnVmZmVyLlxcbisgKi9cXG4rc3RydWN0IGVuaWNfbWJveF92Zl9jYXBhYmlsaXR5X3JlcGx5X21zZyB7XFxuK1xcdHN0cnVjdCBlbmljX21ib3hfZ2VuZXJpY19yZXBseSByZXBseTtcXG4rXFx0X19sZTMyIHZlcnNpb247XFxuK1xcdF9fbGUzMiByZXNlcnZlZFszMl07XFxuK307XFxuK1xcbisvKiBFTklDX01CT1hfVkZfUkVHSVNURVIgLyBfVU5SRUdJU1RFUiAqL1xcbitzdHJ1Y3QgZW5pY19tYm94X3ZmX3JlZ2lzdGVyX3JlcGx5X21zZyB7XFxuK1xcdHN0cnVjdCBlbmljX21ib3hfZ2VuZXJpY19yZXBseSByZXBseTtcXG4rfTtcXG4rXFxuKy8qIEVOSUNfTUJPWF9QRl9MSU5LX1NUQVRFX05PVElGIC8gX0FDSyAqL1xcbisjZGVmaW5lIEVOSUNfTUJPWF9MSU5LX1NUQVRFX0RJU0FCTEVcXHQwXFxuKyNkZWZpbmUgRU5JQ19NQk9YX0xJTktfU1RBVEVfRU5BQkxFXFx0MVxcbitcXG4rc3RydWN0IGVuaWNfbWJveF9wZl9saW5rX3N0YXRlX25vdGlmX21zZyB7XFxuK1xcdF9fbGUzMiBsaW5rX3N0YXRlO1xcbit9O1xcbitcXG4rc3RydWN0IGVuaWNfbWJveF9wZl9saW5rX3N0YXRlX2Fja19tc2cge1xcbitcXHRzdHJ1Y3QgZW5pY19tYm94X2dlbmVyaWNfcmVwbHkgYWNrO1xcbit9O1xcbitcXG4rI2RlZmluZSBFTklDX01CT1hfRFNUX1BGXFx0MHhGRkZGXFxuK1xcbitzdHJ1Y3QgZW5pYztcXG4rXFxuK3ZvaWQgZW5pY19tYm94X2luaXQoc3RydWN0IGVuaWMgKmVuaWMpO1xcbitpbnQgZW5pY19tYm94X3NlbmRfbXNnKHN0cnVjdCBlbmljICplbmljLCB1OCBtc2dfdHlwZSwgdTE2IGRzdF92bmljX2lkLFxcbitcXHRcXHQgICAgICAgdm9pZCAqcGF5bG9hZCwgdTE2IHBheWxvYWRfbGVuKTtcXG4raW50IGVuaWNfbWJveF9zZW5kX2xpbmtfc3RhdGUoc3RydWN0IGVuaWMgKmVuaWMsIHUxNiB2Zl9pZCwgdTMyIGxpbmtfc3RhdGUpO1xcbitpbnQgZW5pY19tYm94X3ZmX2NhcGFiaWxpdHlfY2hlY2soc3RydWN0IGVuaWMgKmVuaWMpO1xcbitpbnQgZW5pY19tYm94X3ZmX3JlZ2lzdGVyKHN0cnVjdCBlbmljICplbmljKTtcXG4raW50IGVuaWNfbWJveF92Zl91bnJlZ2lzdGVyKHN0cnVjdCBlbmljICplbmljKTtcXG4rXFxuKyNlbmRpZiAvKiBfRU5JQ19NQk9YX0hfICovXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19wcC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX3BwLmNcXG5pbmRleCA0NzIwYTk1MjcyNWQwMC4uM2Y2MTFlMjQwYzI1NmMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX3BwLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfcHAuY1xcbkBAIC0yNSw2ICsyNSwxMSBAQCBpbnQgZW5pY19pc192YWxpZF9wcF92ZihzdHJ1Y3QgZW5pYyAqZW5pYywgaW50IHZmLCBpbnQgKmVycilcXG4gXFx0aWYgKHZmICE9IFBPUlRfU0VMRl9WRikge1xcbiAjaWZkZWYgQ09ORklHX1BDSV9JT1ZcXG4gXFx0XFx0aWYgKGVuaWNfc3Jpb3ZfZW5hYmxlZChlbmljKSkge1xcbitcXHRcXHRcXHQvKiBWMiBTUi1JT1YgdXNlcyBNQk9YLCBub3QgcG9ydCBwcm9maWxlcyAqL1xcbitcXHRcXHRcXHRpZiAoZW5pYy1cXHUwMDNldmZfdHlwZSA9PSBFTklDX1ZGX1RZUEVfVjIpIHtcXG4rXFx0XFx0XFx0XFx0KmVyciA9IC1FT1BOT1RTVVBQO1xcbitcXHRcXHRcXHRcXHRnb3RvIGVycl9vdXQ7XFxuK1xcdFxcdFxcdH1cXG4gXFx0XFx0XFx0aWYgKHZmIFxcdTAwM2MgMCB8fCB2ZiBcXHUwMDNlPSBlbmljLVxcdTAwM2VudW1fdmZzKSB7XFxuIFxcdFxcdFxcdFxcdCplcnIgPSAtRUlOVkFMO1xcbiBcXHRcXHRcXHRcXHRnb3RvIGVycl9vdXQ7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19yZXMuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19yZXMuY1xcbmluZGV4IDJiNzU0NWQ2YTY3ZmRjLi43NGNkMmVlM2FmNWNiNyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfcmVzLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfcmVzLmNcXG5AQCAtNTksNiArNTksNyBAQCBpbnQgZW5pY19nZXRfdm5pY19jb25maWcoc3RydWN0IGVuaWMgKmVuaWMpXFxuIFxcdEdFVF9DT05GSUcoaW50cl90aW1lcl91c2VjKTtcXG4gXFx0R0VUX0NPTkZJRyhsb29wX3RhZyk7XFxuIFxcdEdFVF9DT05GSUcobnVtX2FyZnMpO1xcbitcXHRHRVRfQ09ORklHKG1xX3N1YnZuaWNfY291bnQpO1xcbiBcXHRHRVRfQ09ORklHKG1heF9ycV9yaW5nKTtcXG4gXFx0R0VUX0NPTkZJRyhtYXhfd3FfcmluZyk7XFxuIFxcdEdFVF9DT05GSUcobWF4X2NxX3JpbmcpO1xcbkBAIC0yMTAsNyArMjExLDggQEAgdm9pZCBlbmljX2dldF9yZXNfY291bnRzKHN0cnVjdCBlbmljICplbmljKVxcbiBcXHRcXHR2bmljX2Rldl9nZXRfcmVzX2NvdW50KGVuaWMtXFx1MDAzZXZkZXYsIFJFU19UWVBFX0FETUlOX1JRKSBcXHUwMDNlPSAxIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdHZuaWNfZGV2X2dldF9yZXNfY291bnQoZW5pYy1cXHUwMDNldmRldiwgUkVTX1RZUEVfQURNSU5fQ1EpIFxcdTAwM2U9XFxuIFxcdFxcdFxcdEFSUkFZX1NJWkUoZW5pYy1cXHUwMDNlYWRtaW5fY3EpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdHZuaWNfZGV2X2dldF9yZXNfY291bnQoZW5pYy1cXHUwMDNldmRldiwgUkVTX1RZUEVfU1JJT1ZfSU5UUikgXFx1MDAzZT0gMTtcXG4rXFx0XFx0KGVuaWNfaXNfc3Jpb3ZfdmZfdjIoZW5pYykgfHxcXG4rXFx0XFx0IHZuaWNfZGV2X2dldF9yZXNfY291bnQoZW5pYy1cXHUwMDNldmRldiwgUkVTX1RZUEVfU1JJT1ZfSU5UUikgXFx1MDAzZT0gMSk7XFxuIFxcbiBcXHRkZXZfaW5mbyhlbmljX2dldF9kZXYoZW5pYyksXFxuIFxcdFxcdFxcXCJ2TklDIHJlc291cmNlcyBhdmFpbDogd3EgJWQgcnEgJWQgY3EgJWQgaW50ciAlZCBhZG1pbiAlc1xcXFxuXFxcIixcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy92bmljX2NxLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL3ZuaWNfY3EuaFxcbmluZGV4IGQ0NmQ0ZDJlZjZiYmFjLi4zNWZmYTMyMzA3MTMwNSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL3ZuaWNfY3EuaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvdm5pY19jcS5oXFxuQEAgLTc2LDYgKzc2LDE1IEBAIGludCB2bmljX2NxX2FsbG9jKHN0cnVjdCB2bmljX2RldiAqdmRldiwgc3RydWN0IHZuaWNfY3EgKmNxLCB1bnNpZ25lZCBpbnQgaW5kZXgsXFxuIGludCB2bmljX2NxX2FsbG9jX3dpdGhfdHlwZShzdHJ1Y3Qgdm5pY19kZXYgKnZkZXYsIHN0cnVjdCB2bmljX2NxICpjcSxcXG4gXFx0XFx0XFx0ICAgIHVuc2lnbmVkIGludCBpbmRleCwgdW5zaWduZWQgaW50IGRlc2NfY291bnQsXFxuIFxcdFxcdFxcdCAgICB1bnNpZ25lZCBpbnQgZGVzY19zaXplLCB1bnNpZ25lZCBpbnQgcmVzX3R5cGUpO1xcbisjZGVmaW5lIFZOSUNfQ1FfRkNfRU5BQkxFXFx0MVxcbisjZGVmaW5lIFZOSUNfQ1FfRkNfRElTQUJMRVxcdDBcXG4rI2RlZmluZSBWTklDX0NRX0NPTE9SX0VOQUJMRVxcdDFcXG4rI2RlZmluZSBWTklDX0NRX0lOVFJfRU5BQkxFXFx0MVxcbisjZGVmaW5lIFZOSUNfQ1FfSU5UUl9ESVNBQkxFXFx0MFxcbisjZGVmaW5lIFZOSUNfQ1FfRU5UUllfRU5BQkxFXFx0MVxcbisjZGVmaW5lIFZOSUNfQ1FfTVNHX0VOQUJMRVxcdDFcXG4rI2RlZmluZSBWTklDX0NRX01TR19ESVNBQkxFXFx0MFxcbitcXG4gdm9pZCB2bmljX2NxX2luaXQoc3RydWN0IHZuaWNfY3EgKmNxLCB1bnNpZ25lZCBpbnQgZmxvd19jb250cm9sX2VuYWJsZSxcXG4gXFx0dW5zaWduZWQgaW50IGNvbG9yX2VuYWJsZSwgdW5zaWduZWQgaW50IGNxX2hlYWQsIHVuc2lnbmVkIGludCBjcV90YWlsLFxcbiBcXHR1bnNpZ25lZCBpbnQgY3FfdGFpbF9jb2xvciwgdW5zaWduZWQgaW50IGludGVycnVwdF9lbmFibGUsXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvdm5pY19kZXZjbWQuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvdm5pY19kZXZjbWQuaFxcbmluZGV4IDYwNWVmMTdmOTY3ZTRhLi45MGNhMDY2OTFlYmQ2MyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL3ZuaWNfZGV2Y21kLmhcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL3ZuaWNfZGV2Y21kLmhcXG5AQCAtNDU1LDggKzQ1NSwxOSBAQCBlbnVtIHZuaWNfZGV2Y21kX2NtZCB7XFxuIFxcdCAqL1xcbiBcXHRDTURfQ1FfRU5UUllfU0laRV9TRVQgPSBfQ01EQyhfQ01EX0RJUl9XUklURSwgX0NNRF9WVFlQRV9FTkVULCA5MCksXFxuIFxcbitcXHQvKlxcbitcXHQgKiBTZXQgcXVldWUgcGFpciB0eXBlIChhZG1pbiBvciBkYXRhKVxcbitcXHQgKiBpbjogKHUzMikgYTAgPSBxdWV1ZSBwYWlyIHR5cGUgKDAgPSBhZG1pbiwgMSA9IGRhdGEpXFxuK1xcdCAqIGluOiAodTMyKSBhMSA9IGVuYWJsZSAoMSkgLyBkaXNhYmxlICgwKVxcbitcXHQgKi9cXG4rXFx0Q01EX1FQX1RZUEVfU0VUID0gX0NNREMoX0NNRF9ESVJfV1JJVEUsIF9DTURfVlRZUEVfRU5FVCwgOTcpLFxcbiB9O1xcbiBcXG4rI2RlZmluZSBRUF9UWVBFX0FETUlOXFx0MFxcbisjZGVmaW5lIFFQX1RZUEVfREFUQVxcdDFcXG4rI2RlZmluZSBRUF9FTkFCTEVcXHQxXFxuKyNkZWZpbmUgUVBfRElTQUJMRVxcdDBcXG4rXFxuIC8qIENNRF9FTkFCTEUyIGZsYWdzICovXFxuICNkZWZpbmUgQ01EX0VOQUJMRTJfU1RBTkRCWSAweDBcXG4gI2RlZmluZSBDTURfRU5BQkxFMl9BQ1RJVkUgIDB4MVxcbkBAIC03MzQsNiArNzQ1LDggQEAgZW51bSB2aWNfZmVhdHVyZV90IHtcXG4gXFx0VklDX0ZFQVRVUkVfVlhMQU4sXFxuIFxcdFZJQ19GRUFUVVJFX1JETUEsXFxuIFxcdFZJQ19GRUFUVVJFX1ZYTEFOX1BBVENILFxcbitcXHQvKiBzbG90IDMgcmVzZXJ2ZWQgZm9yIGZpcm13YXJlIFZJQ19GRUFUVVJFX1BUUCAqL1xcbitcXHRWSUNfRkVBVFVSRV9TUklPVlxcdD0gNCxcXG4gXFx0VklDX0ZFQVRVUkVfTUFYLFxcbiB9O1xcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy92bmljX2VuZXQuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvdm5pY19lbmV0LmhcXG5pbmRleCA5ZThlODYyNjJhM2ZlYS4uNTE5ZDI5Njk5OTBiMTggMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy92bmljX2VuZXQuaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvdm5pY19lbmV0LmhcXG5AQCAtMjEsNyArMjEsOSBAQCBzdHJ1Y3Qgdm5pY19lbmV0X2NvbmZpZyB7XFxuIFxcdHUxNiBsb29wX3RhZztcXG4gXFx0dTE2IHZmX3JxX2NvdW50O1xcbiBcXHR1MTYgbnVtX2FyZnM7XFxuLVxcdHU4IHJlc2VydmVkWzY2XTtcXG4rXFx0dTggcmVzZXJ2ZWQxWzMyXTtcXG4rXFx0dTE2IG1xX3N1YnZuaWNfY291bnQ7XFxuK1xcdHU4IHJlc2VydmVkMlszMl07XFxuIFxcdHUzMiBtYXhfcnFfcmluZztcXHQvLyBNQVggUlEgcmluZyBzaXplXFxuIFxcdHUzMiBtYXhfd3FfcmluZztcXHQvLyBNQVggV1EgcmluZyBzaXplXFxuIFxcdHUzMiBtYXhfY3FfcmluZztcXHQvLyBNQVggQ1EgcmluZyBzaXplXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE4OjQyOjA4Ljk5ODE4MDAyWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODIwMTAxNDM1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFTklDXCIsXG4gICAgXCJQQ0lfSU9WXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZW5pY19hZG1pbl9jaGFubmVsX29wZW5cIixcbiAgICBcImVuaWNfYWRtaW5fY2hhbm5lbF9jbG9zZVwiLFxuICAgIFwiZW5pY19hZG1pbl93cV9jcV9zZXJ2aWNlXCIsXG4gICAgXCJlbmljX2FkbWluX3JxX2NxX3NlcnZpY2VcIixcbiAgICBcImVuaWNfbWJveF9zZW5kX21zZ1wiLFxuICAgIFwiZW5pY19tYm94X3ZmX2NhcGFiaWxpdHlfY2hlY2tcIixcbiAgICBcImVuaWNfbWJveF92Zl9yZWdpc3RlclwiLFxuICAgIFwiZW5pY19tYm94X3ZmX3VucmVnaXN0ZXJcIixcbiAgICBcImVuaWNfbWJveF9yZWN2X2hhbmRsZXJcIixcbiAgICBcImVuaWNfbWJveF9wZl9wcm9jZXNzX21zZ1wiLFxuICAgIFwiZW5pY19tYm94X3ZmX3Byb2Nlc3NfbXNnXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBhZG1pbiBjaGFubmVsIGFuZCBtYWlsYm94IHByb3RvY29sIGZvciBQRi1WRiBjb21tdW5pY2F0aW9uIGluIHRoZSBDaXNjbyBWSUMgRXRoZXJuZXQgTklDIGRyaXZlciAoZW5pYykuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGRyaXZlciBsb2dpYyBhbmQgY2FuIGJlIHRlc3RlZCB1c2luZyBzeXprYWxsZXIncyBQQ0kgZnV6emluZyBjYXBhYmlsaXRpZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMzEzYmQ1MzE3NjRhOWJmYTUxNGViYzQ2ODczOWUzY2RlZTk2MGU2ZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVuIDI5IDE4OjQyOjA2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvTWFrZWZpbGVcbmluZGV4IGE5NmI4MzMyZTZlMmE4Li5lMzhhYWYzNGMxNDgzOSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvTWFrZWZpbGVcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvTWFrZWZpbGVcbkBAIC0zLDUgKzMsNiBAQCBvYmotJChDT05GSUdfRU5JQykgOj0gZW5pYy5vXG4gXG4gZW5pYy15IDo9IGVuaWNfbWFpbi5vIHZuaWNfY3EubyB2bmljX2ludHIubyB2bmljX3dxLm8gXFxcbiBcdGVuaWNfcmVzLm8gZW5pY19kZXYubyBlbmljX3BwLm8gdm5pY19kZXYubyB2bmljX3JxLm8gdm5pY192aWMubyBcXFxuLVx0ZW5pY19ldGh0b29sLm8gZW5pY19hcGkubyBlbmljX2Nsc2YubyBlbmljX3JxLm8gZW5pY193cS5vXG4rXHRlbmljX2V0aHRvb2wubyBlbmljX2FwaS5vIGVuaWNfY2xzZi5vIGVuaWNfcnEubyBlbmljX3dxLm8gXFxcbitcdGVuaWNfYWRtaW4ubyBlbmljX21ib3gub1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pYy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljLmhcbmluZGV4IDA4NDcyNDIwZjNhMWZkLi42MmI4OTQxNDg5ZDc3MyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pYy5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWMuaFxuQEAgLTI1NiwxMCArMjU2LDEwIEBAIHN0cnVjdCBlbmljIHtcbiBcdHN0cnVjdCBlbmljX3J4X2NvYWwgcnhfY29hbGVzY2Vfc2V0dGluZztcbiBcdHUzMiByeF9jb2FsZXNjZV91c2VjcztcbiBcdHUzMiB0eF9jb2FsZXNjZV91c2Vjcztcbi0jaWZkZWYgQ09ORklHX1BDSV9JT1ZcbiBcdHUxNiBudW1fdmZzO1xuLSNlbmRpZlxuIFx0ZW51bSBlbmljX3ZmX3R5cGUgdmZfdHlwZTtcbitcdGJvb2wgdmZfcmVnaXN0ZXJlZDtcbitcdHUzMiBwZl9jYXBfdmVyc2lvbjtcbiBcdHVuc2lnbmVkIGludCBlbmFibGVfY291bnQ7XG4gXHRzcGlubG9ja190IGVuaWNfYXBpX2xvY2s7XG4gXHRib29sIGVuaWNfYXBpX2J1c3k7XG5AQCAtMjkyLDEwICsyOTIsNDUgQEAgc3RydWN0IGVuaWMge1xuIFxuIFx0LyogQWRtaW4gY2hhbm5lbCByZXNvdXJjZXMgZm9yIFNSLUlPViBNQk9YICovXG4gXHRib29sIGhhc19hZG1pbl9jaGFubmVsO1xuK1x0LyogdHJ1ZSBvbmx5IHdoaWxlIHRoZSBhZG1pbiBXUS9SUS9DUSBhcmUgYWxsb2NhdGVkIGFuZCBlbmFibGVkOyBnYXRlc1xuK1x0ICogZW5pY19hZG1pbl9jaGFubmVsX2Nsb3NlKCkgc28gaXQgaXMgYSBuby1vcCBhZnRlciBhIGZhaWxlZCAocmUpb3BlblxuK1x0ICogbGVmdCB0aGUgcmVzb3VyY2VzIGZyZWVkLlxuK1x0ICovXG4rXHRib29sIGFkbWluX2NoYW5fdXA7XG4rXHQvKiBzZXQgb24gc2VuZCB0aW1lb3V0OyBjbGVhcmVkIG9uIGNoYW5uZWwgcmUtb3BlbiAqL1xuK1x0Ym9vbCBtYm94X3NlbmRfZGlzYWJsZWQ7XG4gXHRzdHJ1Y3Qgdm5pY193cSBhZG1pbl93cTtcbiBcdHN0cnVjdCB2bmljX3JxIGFkbWluX3JxO1xuIFx0c3RydWN0IHZuaWNfY3EgYWRtaW5fY3FbMl07XG4gXHRzdHJ1Y3Qgdm5pY19pbnRyIGFkbWluX2ludHI7XG4rXHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgYWRtaW5fcG9sbF93b3JrO1xuK1x0dW5zaWduZWQgaW50IGFkbWluX2ludHJfaW5kZXg7XG4rXHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgbGlua19ub3RpZnlfd29yaztcbitcdHN0cnVjdCB3b3JrX3N0cnVjdCBhZG1pbl9tc2dfd29yaztcbitcdHNwaW5sb2NrX3QgYWRtaW5fbXNnX2xvY2s7XHQvKiBwcm90ZWN0cyBhZG1pbl9tc2dfbGlzdCAqL1xuK1x0c3RydWN0IGxpc3RfaGVhZCBhZG1pbl9tc2dfbGlzdDtcbitcdHVuc2lnbmVkIGludCBhZG1pbl9tc2dfY291bnQ7XHQvKiBjdXJyZW50IGRlcHRoIG9mIGFkbWluX21zZ19saXN0ICovXG4rXHR2b2lkICgqYWRtaW5fcnFfaGFuZGxlcikoc3RydWN0IGVuaWMgKmVuaWMsIHZvaWQgKmJ1ZixcbitcdFx0XHRcdCB1bnNpZ25lZCBpbnQgbGVuKTtcbitcbitcdC8qIE1CT1ggcHJvdG9jb2wgc3RhdGUg4oCUIG1ib3hfbG9jayBzZXJpYWxpemVzIGFkbWluIFdRIHNlbmRzICovXG4rXHRzdHJ1Y3QgbXV0ZXggbWJveF9sb2NrO1xuK1x0dTY0IG1ib3hfbXNnX251bTtcbitcdC8qIE1CT1ggcmVxdWVzdC1yZXBseSBzdGF0ZS4gIFdyaXR0ZW4gYnkgdGhlIHByb2Nlc3MtY29udGV4dCByZXF1ZXN0XG4rXHQgKiBoZWxwZXJzIChjYXBhYmlsaXR5L3JlZ2lzdGVyL3VucmVnaXN0ZXIpIGFuZCByZWFkL2NsZWFyZWQgYnkgdGhlXG4rXHQgKiBhZG1pbl9tc2dfd29yayByZWNlaXZlIGhhbmRsZXJzLiAgTm8gZXhwbGljaXQgbG9jayBpcyBuZWVkZWQgYmVjYXVzZVxuK1x0ICogb25seSBvbmUgcmVxdWVzdCBpcyBpbiBmbGlnaHQgYXQgYSB0aW1lOiByZXF1ZXN0ZXJzIHJ1biB1bmRlciBSVE5MIG9yXG4rXHQgKiBzaW5nbGUtdGhyZWFkZWQgcHJvYmUvcmVtb3ZlLCBzbyBlYWNoIHJlcXVlc3QgaXMgc2VyaWFsaXplZCBhbmQgaXRzXG4rXHQgKiByZXBseSBjb21wbGV0ZXMgbWJveF9jb21wIGJlZm9yZSB0aGUgbmV4dCByZXF1ZXN0IGlzIGlzc3VlZC5cbitcdCAqL1xuK1x0c3RydWN0IGNvbXBsZXRpb24gbWJveF9jb21wO1xuK1x0dTggbWJveF9leHBlY3RlZF9yZXBseTtcbitcdGJvb2wgbWJveF9pbml0aWFsaXplZDtcbitcbitcdC8qIFBGOiBwZXItVkYgTUJPWCBzdGF0ZSwgYWxsb2NhdGVkIHdoZW4gU1JJT1YgVjIgaXMgZW5hYmxlZCAqL1xuK1x0c3RydWN0IGVuaWNfdmZfc3RhdGUge1xuK1x0XHRib29sIHJlZ2lzdGVyZWQ7XG4rXHR9ICp2Zl9zdGF0ZTtcbiB9O1xuIFxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IG5ldF9kZXZpY2UgKnZuaWNfZ2V0X25ldGRldihzdHJ1Y3Qgdm5pY19kZXYgKnZkZXYpXG5AQCAtNDE3LDYgKzQ1Miw3IEBAIHZvaWQgZW5pY19yZXNldF9hZGRyX2xpc3RzKHN0cnVjdCBlbmljICplbmljKTtcbiBpbnQgZW5pY19zcmlvdl9lbmFibGVkKHN0cnVjdCBlbmljICplbmljKTtcbiBpbnQgZW5pY19pc192YWxpZF92ZihzdHJ1Y3QgZW5pYyAqZW5pYywgaW50IHZmKTtcbiBpbnQgZW5pY19pc19keW5hbWljKHN0cnVjdCBlbmljICplbmljKTtcbitpbnQgZW5pY19pc19zcmlvdl92Zl92MihzdHJ1Y3QgZW5pYyAqZW5pYyk7XG4gdm9pZCBlbmljX3NldF9ldGh0b29sX29wcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTtcbiBpbnQgX19lbmljX3NldF9yc3NrZXkoc3RydWN0IGVuaWMgKmVuaWMpO1xuIHZvaWQgZW5pY19leHRfY3Eoc3RydWN0IGVuaWMgKmVuaWMpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19hZG1pbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX2FkbWluLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMjQyNjQ0ZmEyY2JmOTBcbi0tLSAvZGV2L251bGxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19hZG1pbi5jXG5AQCAtMCwwICsxLDYyNiBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbisvLyBDb3B5cmlnaHQgMjAyNSBDaXNjbyBTeXN0ZW1zLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLlxuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2tlcm5lbC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZGV2aWNlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9kbWEtbWFwcGluZy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaW50ZXJydXB0LmhcdTAwM2VcbitcbisjaW5jbHVkZSBcInZuaWNfZGV2LmhcIlxuKyNpbmNsdWRlIFwidm5pY193cS5oXCJcbisjaW5jbHVkZSBcInZuaWNfcnEuaFwiXG4rI2luY2x1ZGUgXCJ2bmljX2NxLmhcIlxuKyNpbmNsdWRlIFwidm5pY19pbnRyLmhcIlxuKyNpbmNsdWRlIFwidm5pY19yZXNvdXJjZS5oXCJcbisjaW5jbHVkZSBcInZuaWNfZGV2Y21kLmhcIlxuKyNpbmNsdWRlIFwiZW5pYy5oXCJcbisjaW5jbHVkZSBcImVuaWNfYWRtaW4uaFwiXG4rI2luY2x1ZGUgXCJjcV9kZXNjLmhcIlxuKyNpbmNsdWRlIFwiY3FfZW5ldF9kZXNjLmhcIlxuKyNpbmNsdWRlIFwid3FfZW5ldF9kZXNjLmhcIlxuKyNpbmNsdWRlIFwicnFfZW5ldF9kZXNjLmhcIlxuKyNpbmNsdWRlIFwiZW5pY19tYm94LmhcIlxuK1xuKy8qIENsZWFuIHVwIGFueSBhZG1pbiBXUSBidWZmZXJzIHN0aWxsIGhlbGQgYnkgaGFyZHdhcmUgYXQgY2xvc2UgdGltZS5cbisgKiBOb3JtYWxseSBidWZmZXJzIGFyZSBmcmVlZCBpbmxpbmUgYWZ0ZXIgc2VuZCBjb21wbGV0aW9uLCBidXQgYSB0aW1lZC1vdXRcbisgKiBzZW5kIGludGVudGlvbmFsbHkgbGVhdmVzIHRoZSBidWZmZXIgbGl2ZSB1bnRpbCB0aGUgcXVldWUgaXMgc3RvcHBlZC5cbisgKi9cbitzdGF0aWMgdm9pZCBlbmljX2FkbWluX3dxX2J1Zl9jbGVhbihzdHJ1Y3Qgdm5pY193cSAqd3EsXG4rXHRcdFx0XHQgICAgc3RydWN0IHZuaWNfd3FfYnVmICpidWYpXG4re1xuK1x0c3RydWN0IGVuaWMgKmVuaWMgPSB2bmljX2Rldl9wcml2KHdxLVx1MDAzZXZkZXYpO1xuK1xuK1x0aWYgKGJ1Zi1cdTAwM2Vvc19idWYpIHtcbitcdFx0ZG1hX3VubWFwX3NpbmdsZShcdTAwMjZlbmljLVx1MDAzZXBkZXYtXHUwMDNlZGV2LCBidWYtXHUwMDNlZG1hX2FkZHIsXG4rXHRcdFx0XHQgYnVmLVx1MDAzZWxlbiwgRE1BX1RPX0RFVklDRSk7XG4rXHRcdGtmcmVlKGJ1Zi1cdTAwM2Vvc19idWYpO1xuK1x0XHRidWYtXHUwMDNlb3NfYnVmID0gTlVMTDtcbitcdH1cbit9XG4rXG4rc3RhdGljIHZvaWQgZW5pY19hZG1pbl9ycV9idWZfY2xlYW4oc3RydWN0IHZuaWNfcnEgKnJxLFxuK1x0XHRcdFx0ICAgIHN0cnVjdCB2bmljX3JxX2J1ZiAqYnVmKVxuK3tcbitcdHN0cnVjdCBlbmljICplbmljID0gdm5pY19kZXZfcHJpdihycS1cdTAwM2V2ZGV2KTtcbitcbitcdGlmICghYnVmLVx1MDAzZW9zX2J1ZilcbitcdFx0cmV0dXJuO1xuK1xuK1x0ZG1hX3VubWFwX3NpbmdsZShcdTAwMjZlbmljLVx1MDAzZXBkZXYtXHUwMDNlZGV2LCBidWYtXHUwMDNlZG1hX2FkZHIsIGJ1Zi1cdTAwM2VsZW4sXG4rXHRcdFx0IERNQV9GUk9NX0RFVklDRSk7XG4rXHRrZnJlZShidWYtXHUwMDNlb3NfYnVmKTtcbitcdGJ1Zi1cdTAwM2Vvc19idWYgPSBOVUxMO1xuK31cbitcbitzdGF0aWMgaW50IGVuaWNfYWRtaW5fcnFfcG9zdF9vbmUoc3RydWN0IGVuaWMgKmVuaWMsIGdmcF90IGdmcClcbit7XG4rXHRzdHJ1Y3Qgdm5pY19ycSAqcnEgPSBcdTAwMjZlbmljLVx1MDAzZWFkbWluX3JxO1xuK1x0c3RydWN0IHJxX2VuZXRfZGVzYyAqZGVzYztcbitcdGRtYV9hZGRyX3QgZG1hX2FkZHI7XG4rXHR2b2lkICpidWY7XG4rXG4rXHRidWYgPSBrbWFsbG9jKEVOSUNfQURNSU5fQlVGX1NJWkUsIGdmcCk7XG4rXHRpZiAoIWJ1ZilcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRkbWFfYWRkciA9IGRtYV9tYXBfc2luZ2xlKFx1MDAyNmVuaWMtXHUwMDNlcGRldi1cdTAwM2VkZXYsIGJ1ZiwgRU5JQ19BRE1JTl9CVUZfU0laRSxcbitcdFx0XHRcdCAgRE1BX0ZST01fREVWSUNFKTtcbitcdGlmIChkbWFfbWFwcGluZ19lcnJvcihcdTAwMjZlbmljLVx1MDAzZXBkZXYtXHUwMDNlZGV2LCBkbWFfYWRkcikpIHtcbitcdFx0a2ZyZWUoYnVmKTtcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXHR9XG4rXG4rXHRkZXNjID0gdm5pY19ycV9uZXh0X2Rlc2MocnEpO1xuK1x0cnFfZW5ldF9kZXNjX2VuYyhkZXNjLCAodTY0KWRtYV9hZGRyIHwgVk5JQ19QQUREUl9UQVJHRVQsXG4rXHRcdFx0IFJRX0VORVRfVFlQRV9PTkxZX1NPUCwgRU5JQ19BRE1JTl9CVUZfU0laRSk7XG4rXHR2bmljX3JxX3Bvc3QocnEsIGJ1ZiwgMCwgZG1hX2FkZHIsIEVOSUNfQURNSU5fQlVGX1NJWkUsIDApO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgZW5pY19hZG1pbl9ycV9maWxsKHN0cnVjdCBlbmljICplbmljLCBnZnBfdCBnZnApXG4re1xuK1x0c3RydWN0IHZuaWNfcnEgKnJxID0gXHUwMDI2ZW5pYy1cdTAwM2VhZG1pbl9ycTtcbitcdGludCBlcnI7XG4rXG4rXHR3aGlsZSAodm5pY19ycV9kZXNjX2F2YWlsKHJxKSBcdTAwM2UgMCkge1xuK1x0XHRlcnIgPSBlbmljX2FkbWluX3JxX3Bvc3Rfb25lKGVuaWMsIGdmcCk7XG4rXHRcdGlmIChlcnIpXG4rXHRcdFx0cmV0dXJuIGVycjtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgdm9pZCBlbmljX2FkbWluX3JxX2RyYWluKHN0cnVjdCBlbmljICplbmljKVxuK3tcbitcdHZuaWNfcnFfY2xlYW4oXHUwMDI2ZW5pYy1cdTAwM2VhZG1pbl9ycSwgZW5pY19hZG1pbl9ycV9idWZfY2xlYW4pO1xuK31cbitcbitzdGF0aWMgdW5zaWduZWQgaW50IGVuaWNfYWRtaW5fY3FfY29sb3Iodm9pZCAqY3FfZGVzYywgdW5zaWduZWQgaW50IGRlc2Nfc2l6ZSlcbit7XG4rXHR1OCB0eXBlX2NvbG9yID0gKigodTggKiljcV9kZXNjICsgZGVzY19zaXplIC0gMSk7XG4rXG4rXHRyZXR1cm4gKHR5cGVfY29sb3IgXHUwMDNlXHUwMDNlIENRX0RFU0NfQ09MT1JfU0hJRlQpIFx1MDAyNiBDUV9ERVNDX0NPTE9SX01BU0s7XG4rfVxuK1xuK3Vuc2lnbmVkIGludCBlbmljX2FkbWluX3dxX2NxX3NlcnZpY2Uoc3RydWN0IGVuaWMgKmVuaWMpXG4re1xuK1x0c3RydWN0IHZuaWNfY3EgKmNxID0gXHUwMDI2ZW5pYy1cdTAwM2VhZG1pbl9jcVswXTtcbitcdHVuc2lnbmVkIGludCB3b3JrID0gMDtcbitcdHZvaWQgKmRlc2M7XG4rXG4rXHRkZXNjID0gdm5pY19jcV90b19jbGVhbihjcSk7XG4rXHR3aGlsZSAoZW5pY19hZG1pbl9jcV9jb2xvcihkZXNjLCBjcS1cdTAwM2VyaW5nLmRlc2Nfc2l6ZSkgIT1cbitcdCAgICAgICBjcS1cdTAwM2VsYXN0X2NvbG9yKSB7XG4rXHRcdHZuaWNfY3FfaW5jX3RvX2NsZWFuKGNxKTtcbitcdFx0d29yaysrO1xuK1x0XHRkZXNjID0gdm5pY19jcV90b19jbGVhbihjcSk7XG4rXHR9XG4rXG4rXHRyZXR1cm4gd29yaztcbit9XG4rXG4rLyogVXBwZXIgYm91bmQgb24gcGVuZGluZyBhZG1pbiBtZXNzYWdlcy4gIEEgYnVnZ3kgb3IgaG9zdGlsZSBWRiBjb3VsZCBmbG9vZFxuKyAqIHRoZSBQRiBhZG1pbiBjaGFubmVsIGZhc3RlciB0aGFuIGFkbWluX21zZ193b3JrIGRyYWlucyBpdDsgY2FwIHRoZSBiYWNrbG9nXG4rICogc28gYSBndWVzdCBjYW5ub3QgZHJpdmUgdGhlIGhvc3Qgb3V0IG9mIG1lbW9yeS5cbisgKi9cbisjZGVmaW5lIEVOSUNfQURNSU5fTVNHX01BWFx0MjU2XG4rXG4rc3RhdGljIHZvaWQgZW5pY19hZG1pbl9tc2dfZW5xdWV1ZShzdHJ1Y3QgZW5pYyAqZW5pYywgdm9pZCAqYnVmLFxuK1x0XHRcdFx0ICAgdW5zaWduZWQgaW50IGxlbilcbit7XG4rXHRzdHJ1Y3QgZW5pY19hZG1pbl9tc2cgKm1zZztcbitcbitcdG1zZyA9IGttYWxsb2Moc3RydWN0X3NpemUobXNnLCBkYXRhLCBsZW4pLCBHRlBfS0VSTkVMKTtcbitcdGlmICghbXNnKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRtc2ctXHUwMDNlbGVuID0gbGVuO1xuK1x0bWVtY3B5KG1zZy1cdTAwM2VkYXRhLCBidWYsIGxlbik7XG4rXG4rXHRzcGluX2xvY2soXHUwMDI2ZW5pYy1cdTAwM2VhZG1pbl9tc2dfbG9jayk7XG4rXHRpZiAoZW5pYy1cdTAwM2VhZG1pbl9tc2dfY291bnQgXHUwMDNlPSBFTklDX0FETUlOX01TR19NQVgpIHtcbitcdFx0c3Bpbl91bmxvY2soXHUwMDI2ZW5pYy1cdTAwM2VhZG1pbl9tc2dfbG9jayk7XG4rXHRcdGtmcmVlKG1zZyk7XG4rXHRcdGlmIChuZXRfcmF0ZWxpbWl0KCkpXG4rXHRcdFx0bmV0ZGV2X3dhcm4oZW5pYy1cdTAwM2VuZXRkZXYsXG4rXHRcdFx0XHQgICAgXCJhZG1pbiBtc2cgYmFja2xvZyBmdWxsICgldSk7IGRyb3BwaW5nXFxuXCIsXG4rXHRcdFx0XHQgICAgRU5JQ19BRE1JTl9NU0dfTUFYKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1x0bGlzdF9hZGRfdGFpbChcdTAwMjZtc2ctXHUwMDNlbGlzdCwgXHUwMDI2ZW5pYy1cdTAwM2VhZG1pbl9tc2dfbGlzdCk7XG4rXHRlbmljLVx1MDAzZWFkbWluX21zZ19jb3VudCsrO1xuK1x0c3Bpbl91bmxvY2soXHUwMDI2ZW5pYy1cdTAwM2VhZG1pbl9tc2dfbG9jayk7XG4rfVxuK1xuK3Vuc2lnbmVkIGludCBlbmljX2FkbWluX3JxX2NxX3NlcnZpY2Uoc3RydWN0IGVuaWMgKmVuaWMpXG4re1xuK1x0c3RydWN0IHZuaWNfY3EgKmNxID0gXHUwMDI2ZW5pYy1cdTAwM2VhZG1pbl9jcVsxXTtcbitcdHN0cnVjdCB2bmljX3JxICpycSA9IFx1MDAyNmVuaWMtXHUwMDNlYWRtaW5fcnE7XG4rXHRzdHJ1Y3QgY3FfZW5ldF9ycV9kZXNjICpycV9kZXNjO1xuK1x0c3RydWN0IHZuaWNfcnFfYnVmICpidWY7XG4rXHR1MTYgYndmLCBieXRlc193cml0dGVuO1xuK1x0dW5zaWduZWQgaW50IHdvcmsgPSAwO1xuK1x0dm9pZCAqZGVzYztcbitcbitcdC8qIFRoZSBhZG1pbiBSUSBhbmQgaXRzIENRIGZvcm0gYSBzaW5nbGUgaW4tb3JkZXIgY2hhbm5lbDogZmlybXdhcmVcbitcdCAqIHBvc3RzIGV4YWN0bHkgb25lIENRRSBwZXIgY29uc3VtZWQgUlEgZGVzY3JpcHRvciwgaW4gc3VibWlzc2lvblxuK1x0ICogb3JkZXIuICBFYWNoIENRRSB0aGVyZWZvcmUgcGFpcnMgd2l0aCBycS1cdTAwM2V0b19jbGVhbiBiZWxvdyB3aXRob3V0IGFcbitcdCAqIGNvbXBsZXRlZF9pbmRleCBjcm9zcy1jaGVjaywgbWlycm9yaW5nIHRoZSBpbi1vcmRlciBhc3N1bXB0aW9uIG9mXG4rXHQgKiB0aGUgbWFpbiBlbmljIFJYIHBhdGguXG4rXHQgKi9cbitcdGRlc2MgPSB2bmljX2NxX3RvX2NsZWFuKGNxKTtcbitcdHdoaWxlIChlbmljX2FkbWluX2NxX2NvbG9yKGRlc2MsIGNxLVx1MDAzZXJpbmcuZGVzY19zaXplKSAhPVxuK1x0ICAgICAgIGNxLVx1MDAzZWxhc3RfY29sb3IpIHtcbitcdFx0LyogRW5zdXJlIERNQSBkZXNjcmlwdG9yIGZpZWxkcyBhcmUgcmVhZCBhZnRlclxuK1x0XHQgKiB0aGUgY29sb3IvdmFsaWQgY2hlY2suICBkbWFfcm1iKCkgaXMgdGhlXG4rXHRcdCAqIGNvcnJlY3QgYmFycmllciBmb3IgRE1BLXdyaXR0ZW4gZGVzY3JpcHRvcnMuXG4rXHRcdCAqL1xuK1x0XHRkbWFfcm1iKCk7XG4rXHRcdGJ1ZiA9IHJxLVx1MDAzZXRvX2NsZWFuO1xuK1xuK1x0XHQvKiBEZWNvZGUgdGhlIGFjdHVhbCBudW1iZXIgb2YgYnl0ZXMgaGFyZHdhcmUgd3JvdGUgaW50b1xuK1x0XHQgKiB0aGUgUlggYnVmZmVyLiAgYnVmLVx1MDAzZWxlbiBpcyB0aGUgc3RhdGljIGFsbG9jYXRpb24gc2l6ZVxuK1x0XHQgKiAoRU5JQ19BRE1JTl9CVUZfU0laRSkgYW5kIHdvdWxkIGV4cG9zZSB1bmluaXRpYWxpc2VkXG4rXHRcdCAqIGhlYXAgbWVtb3J5IGJleW9uZCB0aGUgcmVhbCBwYXlsb2FkLiAgYnl0ZXNfd3JpdHRlbl9mbGFnc1xuK1x0XHQgKiBpcyBhdCB0aGUgc2FtZSBvZmZzZXQgaW4gZXZlcnkgY3FfZW5ldF9ycV9kZXNjW18zMnxfNjRdXG4rXHRcdCAqIHZhcmlhbnQuXG4rXHRcdCAqL1xuK1x0XHRycV9kZXNjID0gZGVzYztcbitcdFx0YndmID0gbGUxNl90b19jcHUocnFfZGVzYy1cdTAwM2VieXRlc193cml0dGVuX2ZsYWdzKTtcbitcdFx0Ynl0ZXNfd3JpdHRlbiA9IGJ3ZiBcdTAwMjYgQ1FfRU5FVF9SUV9ERVNDX0JZVEVTX1dSSVRURU5fTUFTSztcbitcdFx0aWYgKGJ5dGVzX3dyaXR0ZW4gXHUwMDNlIGJ1Zi1cdTAwM2VsZW4pXG4rXHRcdFx0Z290byBuZXh0X2Rlc2M7XG4rXG4rXHRcdGRtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KFx1MDAyNmVuaWMtXHUwMDNlcGRldi1cdTAwM2VkZXYsXG4rXHRcdFx0XHRcdGJ1Zi1cdTAwM2VkbWFfYWRkciwgYnVmLVx1MDAzZWxlbixcbitcdFx0XHRcdFx0RE1BX0ZST01fREVWSUNFKTtcbitcbitcdFx0LyogRHJvcCBvbiBoYXJkd2FyZSBlcnJvciBpbmRpY2F0aW9ucy4gIEFkbWluIG1lc3NhZ2VzXG4rXHRcdCAqIGFyZSBpbnRlcm5hbCB0byB0aGUgVklDLCBub3QgcmVjZWl2ZWQgb3ZlciB0aGUgd2lyZS5cbitcdFx0ICogRmlybXdhcmUgc2V0cyBUUlVOQ0FURUQgd2hlbiB0aGUgbWVzc2FnZSBkb2VzIG5vdCBmaXRcbitcdFx0ICogaW4gdGhlIHBvc3RlZCBidWZmZXIsIGFuZCBGQ1NfT0sgaXMgYWx3YXlzIHNldCBvblxuK1x0XHQgKiBoZWFsdGh5IGFkbWluIGNvbXBsZXRpb25zLlxuK1x0XHQgKi9cbitcdFx0aWYgKGJ3ZiBcdTAwMjYgQ1FfRU5FVF9SUV9ERVNDX0ZMQUdTX1RSVU5DQVRFRCkge1xuK1x0XHRcdG5ldGRldl93YXJuX29uY2UoZW5pYy1cdTAwM2VuZXRkZXYsXG4rXHRcdFx0XHRcdCBcImFkbWluIFJROiB0cnVuY2F0ZWQgbWVzc2FnZSBkcm9wcGVkXFxuXCIpO1xuK1x0XHRcdGdvdG8gbmV4dF9kZXNjO1xuK1x0XHR9XG4rXHRcdGlmICghKHJxX2Rlc2MtXHUwMDNlZmxhZ3MgXHUwMDI2IENRX0VORVRfUlFfREVTQ19GTEFHU19GQ1NfT0spKSB7XG4rXHRcdFx0bmV0ZGV2X3dhcm5fb25jZShlbmljLVx1MDAzZW5ldGRldixcbitcdFx0XHRcdFx0IFwiYWRtaW4gUlE6IGJhZCBGQ1MsIGRyb3BwaW5nIG1lc3NhZ2VcXG5cIik7XG4rXHRcdFx0Z290byBuZXh0X2Rlc2M7XG4rXHRcdH1cbitcbitcdFx0aWYgKGVuaWMtXHUwMDNlYWRtaW5fcnFfaGFuZGxlcikge1xuK1x0XHRcdHUxNiBzZW5kZXJfdmxhbjtcbitcbitcdFx0XHQvKiBGaXJtd2FyZSBzZXRzIHRoZSBDUSBWTEFOIGZpZWxkIHRvIGlkZW50aWZ5IHRoZVxuK1x0XHRcdCAqIHNlbmRlcjogMCA9IFBGLCAxLWJhc2VkID0gVkYgaW5kZXguICBPdmVyd3JpdGVcbitcdFx0XHQgKiB0aGUgdW50cnVzdGVkIHNyY192bmljX2lkIGluIHRoZSBNQk9YIGhlYWRlciB3aXRoXG4rXHRcdFx0ICogdGhlIGhhcmR3YXJlLXZlcmlmaWVkIHZhbHVlLlxuK1x0XHRcdCAqL1xuK1x0XHRcdHNlbmRlcl92bGFuID0gbGUxNl90b19jcHUocnFfZGVzYy1cdTAwM2V2bGFuKTtcbitcdFx0XHRpZiAoYnl0ZXNfd3JpdHRlbiBcdTAwM2U9IHNpemVvZihzdHJ1Y3QgZW5pY19tYm94X2hkcikpIHtcbitcdFx0XHRcdHN0cnVjdCBlbmljX21ib3hfaGRyICpoZHIgPSBidWYtXHUwMDNlb3NfYnVmO1xuK1xuK1x0XHRcdFx0aGRyLVx1MDAzZXNyY192bmljX2lkID0gKHNlbmRlcl92bGFuID09IDApID9cbitcdFx0XHRcdFx0Y3B1X3RvX2xlMTYoRU5JQ19NQk9YX0RTVF9QRikgOlxuK1x0XHRcdFx0XHRjcHVfdG9fbGUxNihzZW5kZXJfdmxhbiAtIDEpO1xuK1x0XHRcdH1cbitcbitcdFx0XHRlbmljX2FkbWluX21zZ19lbnF1ZXVlKGVuaWMsIGJ1Zi1cdTAwM2Vvc19idWYsXG4rXHRcdFx0XHRcdCAgICAgICBieXRlc193cml0dGVuKTtcbitcdFx0fVxuK1xuK25leHRfZGVzYzpcbitcdFx0ZW5pY19hZG1pbl9ycV9idWZfY2xlYW4ocnEsIHJxLVx1MDAzZXRvX2NsZWFuKTtcbitcdFx0cnEtXHUwMDNldG9fY2xlYW4gPSBycS1cdTAwM2V0b19jbGVhbi1cdTAwM2VuZXh0O1xuK1x0XHRycS1cdTAwM2VyaW5nLmRlc2NfYXZhaWwrKztcbitcbitcdFx0dm5pY19jcV9pbmNfdG9fY2xlYW4oY3EpO1xuK1x0XHR3b3JrKys7XG4rXHRcdGRlc2MgPSB2bmljX2NxX3RvX2NsZWFuKGNxKTtcbitcdH1cbitcbitcdGlmIChlbmljX2FkbWluX3JxX2ZpbGwoZW5pYywgR0ZQX0tFUk5FTCkgXHUwMDI2XHUwMDI2IG5ldF9yYXRlbGltaXQoKSlcbitcdFx0bmV0ZGV2X3dhcm4oZW5pYy1cdTAwM2VuZXRkZXYsXG4rXHRcdFx0ICAgIFwiYWRtaW4gUlEgcmVmaWxsIGZhaWxlZFxcblwiKTtcbitcbitcdHJldHVybiB3b3JrO1xuK31cbitcbitzdGF0aWMgaXJxcmV0dXJuX3QgZW5pY19hZG1pbl9pc3JfbXNpeChpbnQgaXJxLCB2b2lkICpkYXRhKVxuK3tcbitcdHN0cnVjdCBlbmljICplbmljID0gZGF0YTtcbitcbitcdHNjaGVkdWxlX3dvcmsoXHUwMDI2ZW5pYy1cdTAwM2VhZG1pbl9wb2xsX3dvcmspO1xuK1xuK1x0cmV0dXJuIElSUV9IQU5ETEVEO1xuK31cbitcbitzdGF0aWMgdm9pZCBlbmljX2FkbWluX21zZ193b3JrX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuK3tcbitcdHN0cnVjdCBlbmljICplbmljID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBlbmljLCBhZG1pbl9tc2dfd29yayk7XG4rXHRzdHJ1Y3QgZW5pY19hZG1pbl9tc2cgKm1zZywgKnRtcDtcbitcdExJU1RfSEVBRChsb2NhbF9saXN0KTtcbitcbitcdHNwaW5fbG9ja19iaChcdTAwMjZlbmljLVx1MDAzZWFkbWluX21zZ19sb2NrKTtcbitcdGxpc3Rfc3BsaWNlX2luaXQoXHUwMDI2ZW5pYy1cdTAwM2VhZG1pbl9tc2dfbGlzdCwgXHUwMDI2bG9jYWxfbGlzdCk7XG4rXHRlbmljLVx1MDAzZWFkbWluX21zZ19jb3VudCA9IDA7XG4rXHRzcGluX3VubG9ja19iaChcdTAwMjZlbmljLVx1MDAzZWFkbWluX21zZ19sb2NrKTtcbitcbitcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShtc2csIHRtcCwgXHUwMDI2bG9jYWxfbGlzdCwgbGlzdCkge1xuK1x0XHRpZiAoZW5pYy1cdTAwM2VhZG1pbl9ycV9oYW5kbGVyKVxuK1x0XHRcdGVuaWMtXHUwMDNlYWRtaW5fcnFfaGFuZGxlcihlbmljLCBtc2ctXHUwMDNlZGF0YSwgbXNnLVx1MDAzZWxlbik7XG4rXHRcdGxpc3RfZGVsKFx1MDAyNm1zZy1cdTAwM2VsaXN0KTtcbitcdFx0a2ZyZWUobXNnKTtcbitcdH1cbit9XG4rXG4rc3RhdGljIHZvaWQgZW5pY19hZG1pbl9wb2xsX3dvcmtfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4re1xuK1x0c3RydWN0IGVuaWMgKmVuaWMgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGVuaWMsIGFkbWluX3BvbGxfd29yayk7XG4rXHR1bnNpZ25lZCBpbnQgY3JlZGl0cztcbitcdHVuc2lnbmVkIGludCBycV93b3JrO1xuK1xuK1x0Y3JlZGl0cyA9IHZuaWNfaW50cl9jcmVkaXRzKFx1MDAyNmVuaWMtXHUwMDNlYWRtaW5faW50cik7XG4rXG4rXHRycV93b3JrID0gZW5pY19hZG1pbl9ycV9jcV9zZXJ2aWNlKGVuaWMpO1xuK1xuK1x0aWYgKHJxX3dvcmsgXHUwMDNlIDApXG4rXHRcdHNjaGVkdWxlX3dvcmsoXHUwMDI2ZW5pYy1cdTAwM2VhZG1pbl9tc2dfd29yayk7XG4rXG4rXHR2bmljX2ludHJfcmV0dXJuX2NyZWRpdHMoXHUwMDI2ZW5pYy1cdTAwM2VhZG1pbl9pbnRyLFxuK1x0XHRcdFx0IGNyZWRpdHMgPzogMSxcbitcdFx0XHRcdCAxIC8qIHVubWFzayAqLywgMCk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgZW5pY19hZG1pbl9zZXR1cF9pbnRyKHN0cnVjdCBlbmljICplbmljKVxuK3tcbitcdHVuc2lnbmVkIGludCBpbnRyX2luZGV4ID0gZW5pYy1cdTAwM2VpbnRyX2NvdW50O1xuK1x0aW50IGVycjtcbitcbitcdGlmICh2bmljX2Rldl9nZXRfaW50cl9tb2RlKGVuaWMtXHUwMDNldmRldikgIT0gVk5JQ19ERVZfSU5UUl9NT0RFX01TSVggfHxcbitcdCAgICBpbnRyX2luZGV4IFx1MDAzZT0gZW5pYy1cdTAwM2VpbnRyX2F2YWlsKVxuK1x0XHRyZXR1cm4gLUVOT0RFVjtcbitcbitcdC8qIFRoZSBhZG1pbiBJTlRSIHVzZXMgYSBzbG90IGluIHRoZSBzYW1lIFJFU19UWVBFX0lOVFJfQ1RSTFxuK1x0ICogc3RyaWRlZCBhcnJheSBvZiBwZXItdmVjdG9yIGNvbnRyb2wgYmxvY2tzIChtYXNrLCBjb2FsZXNjaW5nXG4rXHQgKiB0aW1lciwgY3JlZGl0IHJldHVybikgdGhhdCB0aGUgZGF0YS1wYXRoIElSUXMgb2NjdXB5IGluIEJBUjAuXG4rXHQgKiB2bmljX2ludHJfYWxsb2MoKSBkZWZhdWx0cyB0byBSRVNfVFlQRV9JTlRSX0NUUkwsIHdoaWNoIGlzIHdoYXRcbitcdCAqIHdlIHdhbnQgaGVyZS5cbitcdCAqL1xuK1x0ZXJyID0gdm5pY19pbnRyX2FsbG9jKGVuaWMtXHUwMDNldmRldiwgXHUwMDI2ZW5pYy1cdTAwM2VhZG1pbl9pbnRyLCBpbnRyX2luZGV4KTtcbitcdGlmIChlcnIpIHtcbitcdFx0bmV0ZGV2X3dhcm4oZW5pYy1cdTAwM2VuZXRkZXYsXG4rXHRcdFx0ICAgIFwiRmFpbGVkIHRvIGFsbG9jIGFkbWluIGludHIgYXQgaW5kZXggJXU6ICVkXFxuXCIsXG4rXHRcdFx0ICAgIGludHJfaW5kZXgsIGVycik7XG4rXHRcdHJldHVybiBlcnI7XG4rXHR9XG4rXG4rXHRlbmljLVx1MDAzZWFkbWluX2ludHJfaW5kZXggPSBpbnRyX2luZGV4O1xuK1xuK1x0LyogQSBWMiBWRiBvcGVucyB0aGUgYWRtaW4gY2hhbm5lbCBkdXJpbmcgcHJvYmUsIGJlZm9yZVxuK1x0ICogcmVnaXN0ZXJfbmV0ZGV2KCkgcmVzb2x2ZXMgdGhlIFwiZXRoJWRcIiBuYW1lIHRlbXBsYXRlLCBzbyB1c2luZ1xuK1x0ICogbmV0ZGV2LVx1MDAzZW5hbWUgaGVyZSB3b3VsZCByZWdpc3RlciB0aGUgbGl0ZXJhbCBcImV0aCVkLWFkbWluXCIgaW5cbitcdCAqIC9wcm9jL2ludGVycnVwdHMuICBVc2UgdGhlIGFscmVhZHktc3RhYmxlIFBDSSBkZXZpY2UgbmFtZSBpbnN0ZWFkLlxuK1x0ICovXG4rXHRzbnByaW50ZihlbmljLVx1MDAzZW1zaXhbaW50cl9pbmRleF0uZGV2bmFtZSxcbitcdFx0IHNpemVvZihlbmljLVx1MDAzZW1zaXhbaW50cl9pbmRleF0uZGV2bmFtZSksXG4rXHRcdCBcIiVzLWFkbWluXCIsIHBjaV9uYW1lKGVuaWMtXHUwMDNlcGRldikpO1xuK1x0ZW5pYy1cdTAwM2Vtc2l4W2ludHJfaW5kZXhdLmlzciA9IGVuaWNfYWRtaW5faXNyX21zaXg7XG4rXHRlbmljLVx1MDAzZW1zaXhbaW50cl9pbmRleF0uZGV2aWQgPSBlbmljO1xuK1xuK1x0ZXJyID0gcmVxdWVzdF9pcnEoZW5pYy1cdTAwM2Vtc2l4X2VudHJ5W2ludHJfaW5kZXhdLnZlY3RvcixcbitcdFx0XHQgIGVuaWMtXHUwMDNlbXNpeFtpbnRyX2luZGV4XS5pc3IsIDAsXG4rXHRcdFx0ICBlbmljLVx1MDAzZW1zaXhbaW50cl9pbmRleF0uZGV2bmFtZSxcbitcdFx0XHQgIGVuaWMtXHUwMDNlbXNpeFtpbnRyX2luZGV4XS5kZXZpZCk7XG4rXHRpZiAoZXJyKSB7XG4rXHRcdG5ldGRldl93YXJuKGVuaWMtXHUwMDNlbmV0ZGV2LFxuK1x0XHRcdCAgICBcIkZhaWxlZCB0byByZXF1ZXN0IGFkbWluIE1TSS1YIGlycTogJWRcXG5cIiwgZXJyKTtcbitcdFx0dm5pY19pbnRyX2ZyZWUoXHUwMDI2ZW5pYy1cdTAwM2VhZG1pbl9pbnRyKTtcbitcdFx0cmV0dXJuIGVycjtcbitcdH1cbitcbitcdGVuaWMtXHUwMDNlbXNpeFtpbnRyX2luZGV4XS5yZXF1ZXN0ZWQgPSAxO1xuK1xuK1x0bmV0ZGV2X2RiZyhlbmljLVx1MDAzZW5ldGRldixcbitcdFx0ICAgXCJhZG1pbiBjaGFubmVsIHVzaW5nIE1TSS1YIGludGVycnVwdCAoaW5kZXggJXUpXFxuXCIsXG4rXHRcdCAgIGludHJfaW5kZXgpO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGVuaWNfYWRtaW5fdGVhcmRvd25faW50cihzdHJ1Y3QgZW5pYyAqZW5pYylcbit7XG4rXHR1bnNpZ25lZCBpbnQgaW50cl9pbmRleCA9IGVuaWMtXHUwMDNlYWRtaW5faW50cl9pbmRleDtcbitcbitcdGZyZWVfaXJxKGVuaWMtXHUwMDNlbXNpeF9lbnRyeVtpbnRyX2luZGV4XS52ZWN0b3IsXG4rXHRcdCBlbmljLVx1MDAzZW1zaXhbaW50cl9pbmRleF0uZGV2aWQpO1xuK1x0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZlbmljLVx1MDAzZWFkbWluX3BvbGxfd29yayk7XG4rXHRlbmljLVx1MDAzZW1zaXhbaW50cl9pbmRleF0ucmVxdWVzdGVkID0gMDtcbit9XG4rXG4rc3RhdGljIGludCBlbmljX2FkbWluX3FwX3R5cGVfc2V0KHN0cnVjdCBlbmljICplbmljLCB1MzIgZW5hYmxlKVxuK3tcbitcdHU2NCBhMCA9IFFQX1RZUEVfQURNSU4sIGExID0gZW5hYmxlO1xuK1x0aW50IHdhaXQgPSAxMDAwO1xuK1x0aW50IGVycjtcbitcbitcdHNwaW5fbG9ja19iaChcdTAwMjZlbmljLVx1MDAzZWRldmNtZF9sb2NrKTtcbitcdGVyciA9IHZuaWNfZGV2X2NtZChlbmljLVx1MDAzZXZkZXYsIENNRF9RUF9UWVBFX1NFVCwgXHUwMDI2YTAsIFx1MDAyNmExLCB3YWl0KTtcbitcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmVuaWMtXHUwMDNlZGV2Y21kX2xvY2spO1xuK1xuK1x0cmV0dXJuIGVycjtcbit9XG4rXG4rc3RhdGljIGludCBlbmljX2FkbWluX2FsbG9jX3Jlc291cmNlcyhzdHJ1Y3QgZW5pYyAqZW5pYylcbit7XG4rXHRpbnQgZXJyO1xuK1xuK1x0ZXJyID0gdm5pY193cV9hbGxvY193aXRoX3R5cGUoZW5pYy1cdTAwM2V2ZGV2LCBcdTAwMjZlbmljLVx1MDAzZWFkbWluX3dxLCAwLFxuK1x0XHRcdFx0ICAgICAgRU5JQ19BRE1JTl9ERVNDX0NPVU5ULFxuK1x0XHRcdFx0ICAgICAgc2l6ZW9mKHN0cnVjdCB3cV9lbmV0X2Rlc2MpLFxuK1x0XHRcdFx0ICAgICAgUkVTX1RZUEVfQURNSU5fV1EpO1xuK1x0aWYgKGVycilcbitcdFx0cmV0dXJuIGVycjtcbitcbitcdGVyciA9IHZuaWNfcnFfYWxsb2Nfd2l0aF90eXBlKGVuaWMtXHUwMDNldmRldiwgXHUwMDI2ZW5pYy1cdTAwM2VhZG1pbl9ycSwgMCxcbitcdFx0XHRcdCAgICAgIEVOSUNfQURNSU5fREVTQ19DT1VOVCxcbitcdFx0XHRcdCAgICAgIHNpemVvZihzdHJ1Y3QgcnFfZW5ldF9kZXNjKSxcbitcdFx0XHRcdCAgICAgIFJFU19UWVBFX0FETUlOX1JRKTtcbitcdGlmIChlcnIpXG4rXHRcdGdvdG8gZnJlZV93cTtcbitcbitcdC8qIGFkbWluX2NxWzBdIGlzIHRoZSBXUSBjb21wbGV0aW9uIHF1ZXVlLiAgV1EgQ1FFcyBhcmUgYWx3YXlzXG4rXHQgKiAxNiBieXRlcyB3aWRlOyBmaXJtd2FyZSBhbHdheXMgd3JpdGVzIDE2LWJ5dGUgQ1FFcyBmb3IgV1FcbitcdCAqIGNvbXBsZXRpb25zIG9uIGV2ZXJ5IFdRLCBpbmNsdWRpbmcgdGhlIGFkbWluIGNoYW5uZWwgV1EuXG4rXHQgKiBVc2Ugc2l6ZW9mKHN0cnVjdCBjcV9kZXNjKSBhY2NvcmRpbmdseS5cbitcdCAqL1xuK1x0ZXJyID0gdm5pY19jcV9hbGxvY193aXRoX3R5cGUoZW5pYy1cdTAwM2V2ZGV2LCBcdTAwMjZlbmljLVx1MDAzZWFkbWluX2NxWzBdLCAwLFxuK1x0XHRcdFx0ICAgICAgRU5JQ19BRE1JTl9ERVNDX0NPVU5ULFxuK1x0XHRcdFx0ICAgICAgc2l6ZW9mKHN0cnVjdCBjcV9kZXNjKSxcbitcdFx0XHRcdCAgICAgIFJFU19UWVBFX0FETUlOX0NRKTtcbitcdGlmIChlcnIpXG4rXHRcdGdvdG8gZnJlZV9ycTtcbitcbitcdC8qIGFkbWluX2NxWzFdIGlzIHRoZSBSUSBjb21wbGV0aW9uIHF1ZXVlLiAgSXRzIGRlc2NyaXB0b3Igc2l6ZVxuK1x0ICogbXVzdCBtYXRjaCB3aGF0IGZpcm13YXJlIHdyaXRlcy4gIGVuaWNfZXh0X2NxKCkgY2FsbGVkIGVhcmxpZXJcbitcdCAqIGluIHByb2JlIGlzc3VlcyBDTURfQ1FfRU5UUllfU0laRV9TRVQgZm9yIFZOSUNfUlFfQUxMLFxuK1x0ICogcHJvZ3JhbW1pbmcgZmlybXdhcmUgdG8gd3JpdGUgQ1EgZW50cmllcyBvZiAoMTYgXHUwMDNjXHUwMDNjIGVuaWMtXHUwMDNlZXh0X2NxKVxuK1x0ICogYnl0ZXMgZm9yIGV2ZXJ5IFJRIENRIG9uIHRoZSB2TklDLCBpbmNsdWRpbmcgdGhlIGFkbWluIFJRIENRLlxuK1x0ICogQWxsb2NhdGluZyB3aXRoIHRoZSBzYW1lIHNpemUga2VlcHMgdGhlIGhvc3QgcG9sbGVyIGFuZFxuK1x0ICogZmlybXdhcmUgaW4gbG9ja3N0ZXA6XG4rXHQgKlxuK1x0ICogICAtIFRoZSBjb2xvci92YWxpZCBiaXQgbGl2ZXMgYXQgYnl0ZSAoZGVzY19zaXplIC0gMSkgb2YgZXZlcnlcbitcdCAqICAgICBjcV9lbmV0X3JxX2Rlc2NbXzMyfF82NF0gdmFyaWFudCwgc28gZW5pY19hZG1pbl9jcV9jb2xvcigpXG4rXHQgKiAgICAgcmVhZHMgaXQgZnJvbSB0aGUgY29ycmVjdCBvZmZzZXQuXG4rXHQgKiAgIC0gT25seSB0aGUgZmlyc3QgMTUgYnl0ZXMgb2YgdGhlIGRlc2NyaXB0b3IgKHZsYW4sXG4rXHQgKiAgICAgYnl0ZXNfd3JpdHRlbl9mbGFncywgLi4uKSBhcmUgYWNjZXNzZWQgYnkgdGhlIGFkbWluIHBhdGg7XG4rXHQgKiAgICAgdGhlc2UgZmllbGRzIGFyZSBpZGVudGljYWwgYWNyb3NzIGFsbCB0aHJlZSB2YXJpYW50cyAoc2VlXG4rXHQgKiAgICAgY29tbWVudCBpbiBlbmljX3JxLmMgYWJvdmUgY3FfZW5ldF9ycV9kZXNjX2RlYygpKS5cbitcdCAqL1xuK1x0ZXJyID0gdm5pY19jcV9hbGxvY193aXRoX3R5cGUoZW5pYy1cdTAwM2V2ZGV2LCBcdTAwMjZlbmljLVx1MDAzZWFkbWluX2NxWzFdLCAxLFxuK1x0XHRcdFx0ICAgICAgRU5JQ19BRE1JTl9ERVNDX0NPVU5ULFxuK1x0XHRcdFx0ICAgICAgMTYgXHUwMDNjXHUwMDNjIGVuaWMtXHUwMDNlZXh0X2NxLFxuK1x0XHRcdFx0ICAgICAgUkVTX1RZUEVfQURNSU5fQ1EpO1xuK1x0aWYgKGVycilcbitcdFx0Z290byBmcmVlX2NxMDtcbitcbitcdHJldHVybiAwO1xuK1xuK2ZyZWVfY3EwOlxuK1x0dm5pY19jcV9mcmVlKFx1MDAyNmVuaWMtXHUwMDNlYWRtaW5fY3FbMF0pO1xuK2ZyZWVfcnE6XG4rXHR2bmljX3JxX2ZyZWUoXHUwMDI2ZW5pYy1cdTAwM2VhZG1pbl9ycSk7XG4rZnJlZV93cTpcbitcdHZuaWNfd3FfZnJlZShcdTAwMjZlbmljLVx1MDAzZWFkbWluX3dxKTtcbitcdHJldHVybiBlcnI7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGVuaWNfYWRtaW5fZnJlZV9yZXNvdXJjZXMoc3RydWN0IGVuaWMgKmVuaWMpXG4re1xuK1x0dm5pY19pbnRyX2ZyZWUoXHUwMDI2ZW5pYy1cdTAwM2VhZG1pbl9pbnRyKTtcbitcdHZuaWNfY3FfZnJlZShcdTAwMjZlbmljLVx1MDAzZWFkbWluX2NxWzFdKTtcbitcdHZuaWNfY3FfZnJlZShcdTAwMjZlbmljLVx1MDAzZWFkbWluX2NxWzBdKTtcbitcdHZuaWNfcnFfZnJlZShcdTAwMjZlbmljLVx1MDAzZWFkbWluX3JxKTtcbitcdHZuaWNfd3FfZnJlZShcdTAwMjZlbmljLVx1MDAzZWFkbWluX3dxKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgZW5pY19hZG1pbl9pbml0X3Jlc291cmNlcyhzdHJ1Y3QgZW5pYyAqZW5pYylcbit7XG4rXHR1bnNpZ25lZCBpbnQgaW50cl9vZmZzZXQgPSBlbmljLVx1MDAzZWFkbWluX2ludHJfaW5kZXg7XG4rXG4rXHR2bmljX3dxX2luaXQoXHUwMDI2ZW5pYy1cdTAwM2VhZG1pbl93cSxcbitcdFx0ICAgICAwLCAwLCAwKTsgLyogY3FfaW5kZXgsIGVycl9pbnRyX2VuYWJsZSwgZXJyX2ludHJfb2Zmc2V0ICovXG4rXHR2bmljX3JxX2luaXQoXHUwMDI2ZW5pYy1cdTAwM2VhZG1pbl9ycSxcbitcdFx0ICAgICAxLCAwLCAwKTsgLyogY3FfaW5kZXgsIGVycl9pbnRyX2VuYWJsZSwgZXJyX2ludHJfb2Zmc2V0ICovXG4rXHR2bmljX2NxX2luaXQoXHUwMDI2ZW5pYy1cdTAwM2VhZG1pbl9jcVswXSxcbitcdFx0ICAgICBWTklDX0NRX0ZDX0RJU0FCTEUsXG4rXHRcdCAgICAgVk5JQ19DUV9DT0xPUl9FTkFCTEUsXG4rXHRcdCAgICAgMCwgMCwgMSwgLyogY3FfaGVhZCwgY3FfdGFpbCwgY3FfdGFpbF9jb2xvciAqL1xuK1x0XHQgICAgIFZOSUNfQ1FfSU5UUl9ESVNBQkxFLCAvKiBwb2xsZWQgc3luY2hyb25vdXNseSBieSBtYm94IHNlbmQgKi9cbitcdFx0ICAgICBWTklDX0NRX0VOVFJZX0VOQUJMRSxcbitcdFx0ICAgICBWTklDX0NRX01TR19ESVNBQkxFLFxuK1x0XHQgICAgIGludHJfb2Zmc2V0LFxuK1x0XHQgICAgIDAgLyogY3FfbWVzc2FnZV9hZGRyICovKTtcbitcdHZuaWNfY3FfaW5pdChcdTAwMjZlbmljLVx1MDAzZWFkbWluX2NxWzFdLFxuK1x0XHQgICAgIFZOSUNfQ1FfRkNfRElTQUJMRSxcbitcdFx0ICAgICBWTklDX0NRX0NPTE9SX0VOQUJMRSxcbitcdFx0ICAgICAwLCAwLCAxLCAvKiBjcV9oZWFkLCBjcV90YWlsLCBjcV90YWlsX2NvbG9yICovXG4rXHRcdCAgICAgVk5JQ19DUV9JTlRSX0VOQUJMRSxcbitcdFx0ICAgICBWTklDX0NRX0VOVFJZX0VOQUJMRSxcbitcdFx0ICAgICBWTklDX0NRX01TR19ESVNBQkxFLFxuK1x0XHQgICAgIGludHJfb2Zmc2V0LFxuK1x0XHQgICAgIDAgLyogY3FfbWVzc2FnZV9hZGRyICovKTtcbitcdC8qIGNvYWxlc2NpbmdfdGltZXIsIGNvYWxlc2NpbmdfdHlwZSwgbWFza19vbl9hc3NlcnRpb24gKi9cbitcdHZuaWNfaW50cl9pbml0KFx1MDAyNmVuaWMtXHUwMDNlYWRtaW5faW50cixcbitcdFx0ICAgICAgIDAsIDAsIDEpO1xuK31cbitcbitzdGF0aWMgdm9pZCBlbmljX2FkbWluX21zZ19kcmFpbihzdHJ1Y3QgZW5pYyAqZW5pYylcbit7XG4rXHRzdHJ1Y3QgZW5pY19hZG1pbl9tc2cgKm1zZywgKnRtcDtcbitcbitcdHNwaW5fbG9ja19iaChcdTAwMjZlbmljLVx1MDAzZWFkbWluX21zZ19sb2NrKTtcbitcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShtc2csIHRtcCwgXHUwMDI2ZW5pYy1cdTAwM2VhZG1pbl9tc2dfbGlzdCwgbGlzdCkge1xuK1x0XHRsaXN0X2RlbChcdTAwMjZtc2ctXHUwMDNlbGlzdCk7XG4rXHRcdGtmcmVlKG1zZyk7XG4rXHR9XG4rXHRlbmljLVx1MDAzZWFkbWluX21zZ19jb3VudCA9IDA7XG4rXHRzcGluX3VubG9ja19iaChcdTAwMjZlbmljLVx1MDAzZWFkbWluX21zZ19sb2NrKTtcbit9XG4rXG4raW50IGVuaWNfYWRtaW5fY2hhbm5lbF9vcGVuKHN0cnVjdCBlbmljICplbmljKVxuK3tcbitcdGludCBlcnI7XG4rXG4rXHRpZiAoIWVuaWMtXHUwMDNlaGFzX2FkbWluX2NoYW5uZWwpXG4rXHRcdHJldHVybiAtRU5PREVWO1xuK1xuK1x0ZXJyID0gZW5pY19hZG1pbl9hbGxvY19yZXNvdXJjZXMoZW5pYyk7XG4rXHRpZiAoZXJyKSB7XG4rXHRcdG5ldGRldl9lcnIoZW5pYy1cdTAwM2VuZXRkZXYsXG4rXHRcdFx0ICAgXCJGYWlsZWQgdG8gYWxsb2MgYWRtaW4gY2hhbm5lbCByZXNvdXJjZXM6ICVkXFxuXCIsXG4rXHRcdFx0ICAgZXJyKTtcbitcdFx0cmV0dXJuIGVycjtcbitcdH1cbitcbitcdHNwaW5fbG9ja19pbml0KFx1MDAyNmVuaWMtXHUwMDNlYWRtaW5fbXNnX2xvY2spO1xuK1x0SU5JVF9MSVNUX0hFQUQoXHUwMDI2ZW5pYy1cdTAwM2VhZG1pbl9tc2dfbGlzdCk7XG4rXHRJTklUX1dPUksoXHUwMDI2ZW5pYy1cdTAwM2VhZG1pbl9tc2dfd29yaywgZW5pY19hZG1pbl9tc2dfd29ya19oYW5kbGVyKTtcbitcdElOSVRfV09SSyhcdTAwMjZlbmljLVx1MDAzZWFkbWluX3BvbGxfd29yaywgZW5pY19hZG1pbl9wb2xsX3dvcmtfaGFuZGxlcik7XG4rXG4rXHRlcnIgPSBlbmljX2FkbWluX3NldHVwX2ludHIoZW5pYyk7XG4rXHRpZiAoZXJyKSB7XG4rXHRcdG5ldGRldl9lcnIoZW5pYy1cdTAwM2VuZXRkZXYsXG4rXHRcdFx0ICAgXCJBZG1pbiBjaGFubmVsIHJlcXVpcmVzIE1TSS1YLCBTUi1JT1YgdW5hdmFpbGFibGU6ICVkXFxuXCIsXG4rXHRcdFx0ICAgZXJyKTtcbitcdFx0Z290byBmcmVlX3Jlc291cmNlcztcbitcdH1cbitcbitcdGVuaWNfYWRtaW5faW5pdF9yZXNvdXJjZXMoZW5pYyk7XG4rXG4rXHR2bmljX3dxX2VuYWJsZShcdTAwMjZlbmljLVx1MDAzZWFkbWluX3dxKTtcbitcdHZuaWNfcnFfZW5hYmxlKFx1MDAyNmVuaWMtXHUwMDNlYWRtaW5fcnEpO1xuK1xuK1x0ZXJyID0gZW5pY19hZG1pbl9ycV9maWxsKGVuaWMsIEdGUF9LRVJORUwpO1xuK1x0aWYgKGVycikge1xuK1x0XHRuZXRkZXZfZXJyKGVuaWMtXHUwMDNlbmV0ZGV2LFxuK1x0XHRcdCAgIFwiRmFpbGVkIHRvIGZpbGwgYWRtaW4gUlEgYnVmZmVyczogJWRcXG5cIiwgZXJyKTtcbitcdFx0Z290byBkaXNhYmxlX3F1ZXVlcztcbitcdH1cbitcbitcdGVyciA9IGVuaWNfYWRtaW5fcXBfdHlwZV9zZXQoZW5pYywgUVBfRU5BQkxFKTtcbitcdGlmIChlcnIpIHtcbitcdFx0bmV0ZGV2X2VycihlbmljLVx1MDAzZW5ldGRldixcbitcdFx0XHQgICBcIkZhaWxlZCB0byBzZXQgYWRtaW4gUVAgdHlwZTogJWRcXG5cIiwgZXJyKTtcbitcdFx0Z290byBkaXNhYmxlX3F1ZXVlcztcbitcdH1cbitcbitcdHZuaWNfaW50cl91bm1hc2soXHUwMDI2ZW5pYy1cdTAwM2VhZG1pbl9pbnRyKTtcbitcbitcdC8qIE9ubHkgbm93IHRoYXQgdGhlIGFkbWluIFdRL1JRL0NRIGFuZCBpbnRlcnJ1cHQgYXJlIGZ1bGx5IGFsbG9jYXRlZCxcbitcdCAqIHByb2dyYW1tZWQgYW5kIGVuYWJsZWQgaXMgaXQgc2FmZSB0byBhbGxvdyBNQk9YIHNlbmRzLiAgQ2xlYXJpbmcgdGhpc1xuK1x0ICogZWFybGllciBvcGVuZWQgYSB3aW5kb3cgd2hlcmUgYSBjb25jdXJyZW50IHNlbmRlciAoZS5nLiBsaW5rLW5vdGlmeVxuK1x0ICogd29yayBzY2hlZHVsZWQgYnkgYSBwb3N0LXJlc2V0IGxpbmstdXApIGNvdWxkIGNhbGwgZW5pY19tYm94X3NlbmRfbXNnKClcbitcdCAqIGFnYWluc3QgYSBub3QteWV0LWFsbG9jYXRlZCBhZG1pbl93cSBhbmQgY3Jhc2guXG4rXHQgKi9cbitcdFdSSVRFX09OQ0UoZW5pYy1cdTAwM2VtYm94X3NlbmRfZGlzYWJsZWQsIGZhbHNlKTtcbitcbitcdG5ldGRldl9kYmcoZW5pYy1cdTAwM2VuZXRkZXYsXG4rXHRcdCAgIFwiYWRtaW4gY2hhbm5lbCBvcGVuOiBpbnRyPSV1IHdxX2F2YWlsPSV1IHJxX2F2YWlsPSV1IGNxMF9jb2xvcj0ldSBjcTFfY29sb3I9JXVcXG5cIixcbitcdFx0ICAgZW5pYy1cdTAwM2VhZG1pbl9pbnRyX2luZGV4LFxuK1x0XHQgICB2bmljX3dxX2Rlc2NfYXZhaWwoXHUwMDI2ZW5pYy1cdTAwM2VhZG1pbl93cSksXG4rXHRcdCAgIHZuaWNfcnFfZGVzY19hdmFpbChcdTAwMjZlbmljLVx1MDAzZWFkbWluX3JxKSxcbitcdFx0ICAgZW5pYy1cdTAwM2VhZG1pbl9jcVswXS5sYXN0X2NvbG9yLFxuK1x0XHQgICBlbmljLVx1MDAzZWFkbWluX2NxWzFdLmxhc3RfY29sb3IpO1xuK1xuK1x0ZW5pYy1cdTAwM2VhZG1pbl9jaGFuX3VwID0gdHJ1ZTtcbitcbitcdHJldHVybiAwO1xuK1xuK2Rpc2FibGVfcXVldWVzOlxuK1x0ZW5pY19hZG1pbl90ZWFyZG93bl9pbnRyKGVuaWMpO1xuK1x0ZW5pY19hZG1pbl9xcF90eXBlX3NldChlbmljLCBRUF9ESVNBQkxFKTtcbitcdGlmICh2bmljX3dxX2Rpc2FibGUoXHUwMDI2ZW5pYy1cdTAwM2VhZG1pbl93cSkpXG4rXHRcdG5ldGRldl93YXJuKGVuaWMtXHUwMDNlbmV0ZGV2LCBcIkZhaWxlZCB0byBkaXNhYmxlIGFkbWluIFdRXFxuXCIpO1xuK1x0aWYgKHZuaWNfcnFfZGlzYWJsZShcdTAwMjZlbmljLVx1MDAzZWFkbWluX3JxKSlcbitcdFx0bmV0ZGV2X3dhcm4oZW5pYy1cdTAwM2VuZXRkZXYsIFwiRmFpbGVkIHRvIGRpc2FibGUgYWRtaW4gUlFcXG5cIik7XG4rXHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNmVuaWMtXHUwMDNlYWRtaW5fbXNnX3dvcmspO1xuK1x0ZW5pY19hZG1pbl9tc2dfZHJhaW4oZW5pYyk7XG4rXHRlbmljX2FkbWluX3JxX2RyYWluKGVuaWMpO1xuK2ZyZWVfcmVzb3VyY2VzOlxuK1x0ZW5pY19hZG1pbl9mcmVlX3Jlc291cmNlcyhlbmljKTtcbitcdHJldHVybiBlcnI7XG4rfVxuK1xuK3ZvaWQgZW5pY19hZG1pbl9jaGFubmVsX2Nsb3NlKHN0cnVjdCBlbmljICplbmljKVxuK3tcbitcdGludCBlcnI7XG4rXG4rXHRpZiAoIWVuaWMtXHUwMDNlaGFzX2FkbWluX2NoYW5uZWwpXG4rXHRcdHJldHVybjtcbitcbitcdC8qIE5vdGhpbmcgdG8gdGVhciBkb3duIGlmIHRoZSBjaGFubmVsIHdhcyBuZXZlciAocmUpb3BlbmVkLCBlLmcuIGFcbitcdCAqIGZhaWxlZCBlbmljX2FkbWluX2NoYW5uZWxfb3BlbigpIGluIHByb2JlIG9yIGluIHRoZSByZXNldCBwYXRoO1xuK1x0ICogb3RoZXJ3aXNlIHRoZSBkaXNhYmxlL2NsZWFuIGNhbGxzIGJlbG93IGRlcmVmZXJlbmNlIGZyZWVkIHJlc291cmNlcy5cbitcdCAqL1xuK1x0aWYgKCFlbmljLVx1MDAzZWFkbWluX2NoYW5fdXApXG4rXHRcdHJldHVybjtcbitcbitcdFdSSVRFX09OQ0UoZW5pYy1cdTAwM2VtYm94X3NlbmRfZGlzYWJsZWQsIHRydWUpO1xuK1xuK1x0bmV0ZGV2X2RiZyhlbmljLVx1MDAzZW5ldGRldiwgXCJhZG1pbiBjaGFubmVsIGNsb3NlXFxuXCIpO1xuK1xuK1x0dm5pY19pbnRyX21hc2soXHUwMDI2ZW5pYy1cdTAwM2VhZG1pbl9pbnRyKTtcbitcdGVuaWNfYWRtaW5fdGVhcmRvd25faW50cihlbmljKTtcbitcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2ZW5pYy1cdTAwM2VsaW5rX25vdGlmeV93b3JrKTtcbitcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2ZW5pYy1cdTAwM2VhZG1pbl9tc2dfd29yayk7XG4rXHRlbmljX2FkbWluX21zZ19kcmFpbihlbmljKTtcbitcbitcdGVuaWNfYWRtaW5fcXBfdHlwZV9zZXQoZW5pYywgUVBfRElTQUJMRSk7XG4rXG4rXHRlcnIgPSB2bmljX3dxX2Rpc2FibGUoXHUwMDI2ZW5pYy1cdTAwM2VhZG1pbl93cSk7XG4rXHRpZiAoZXJyKVxuK1x0XHRuZXRkZXZfd2FybihlbmljLVx1MDAzZW5ldGRldixcbitcdFx0XHQgICAgXCJGYWlsZWQgdG8gZGlzYWJsZSBhZG1pbiBXUTogJWRcXG5cIiwgZXJyKTtcbitcdGVyciA9IHZuaWNfcnFfZGlzYWJsZShcdTAwMjZlbmljLVx1MDAzZWFkbWluX3JxKTtcbitcdGlmIChlcnIpXG4rXHRcdG5ldGRldl93YXJuKGVuaWMtXHUwMDNlbmV0ZGV2LFxuK1x0XHRcdCAgICBcIkZhaWxlZCB0byBkaXNhYmxlIGFkbWluIFJROiAlZFxcblwiLCBlcnIpO1xuK1xuK1x0dm5pY193cV9jbGVhbihcdTAwMjZlbmljLVx1MDAzZWFkbWluX3dxLCBlbmljX2FkbWluX3dxX2J1Zl9jbGVhbik7XG4rXHRlbmljX2FkbWluX3JxX2RyYWluKGVuaWMpO1xuK1x0dm5pY19jcV9jbGVhbihcdTAwMjZlbmljLVx1MDAzZWFkbWluX2NxWzBdKTtcbitcdHZuaWNfY3FfY2xlYW4oXHUwMDI2ZW5pYy1cdTAwM2VhZG1pbl9jcVsxXSk7XG4rXHR2bmljX2ludHJfY2xlYW4oXHUwMDI2ZW5pYy1cdTAwM2VhZG1pbl9pbnRyKTtcbitcbitcdGVuaWMtXHUwMDNlYWRtaW5fcnFfaGFuZGxlciA9IE5VTEw7XG4rXHRlbmljX2FkbWluX2ZyZWVfcmVzb3VyY2VzKGVuaWMpO1xuK1xuK1x0ZW5pYy1cdTAwM2VhZG1pbl9jaGFuX3VwID0gZmFsc2U7XG4rfVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19hZG1pbi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX2FkbWluLmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uNjJjODAyMjBiMGNhY2Ncbi0tLSAvZGV2L251bGxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19hZG1pbi5oXG5AQCAtMCwwICsxLDI3IEBAXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqL1xuKy8qIENvcHlyaWdodCAyMDI1IENpc2NvIFN5c3RlbXMsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICovXG4rXG4rI2lmbmRlZiBfRU5JQ19BRE1JTl9IX1xuKyNkZWZpbmUgX0VOSUNfQURNSU5fSF9cbitcbisjZGVmaW5lIEVOSUNfQURNSU5fREVTQ19DT1VOVFx0NjRcbisjZGVmaW5lIEVOSUNfQURNSU5fQlVGX1NJWkVcdDIwNDhcbitcbitzdHJ1Y3QgZW5pYztcbitcbisvKiBXcmFwcGVyIGZvciByZWNlaXZlZCBhZG1pbiBtZXNzYWdlcyBxdWV1ZWQgZm9yIGRlZmVycmVkIHByb2Nlc3NpbmcuXG4rICogVGhlIGFkbWluIENRIHBvbGwgd29yayBoYW5kbGVyIGVucXVldWVzIHRoZXNlOyBhIHNlcGFyYXRlIHdvcmsgaGFuZGxlclxuKyAqIHByb2Nlc3NlcyB0aGVtIHdoZXJlIHNsZWVwaW5nIChtdXRleCwgR0ZQX0tFUk5FTCkgaXMgc2FmZS5cbisgKi9cbitzdHJ1Y3QgZW5pY19hZG1pbl9tc2cge1xuK1x0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xuK1x0dW5zaWduZWQgaW50IGxlbjtcbitcdHU4IGRhdGFbXSBfX2FsaWduZWQoOCk7XG4rfTtcbitcbitpbnQgZW5pY19hZG1pbl9jaGFubmVsX29wZW4oc3RydWN0IGVuaWMgKmVuaWMpO1xuK3ZvaWQgZW5pY19hZG1pbl9jaGFubmVsX2Nsb3NlKHN0cnVjdCBlbmljICplbmljKTtcbit1bnNpZ25lZCBpbnQgZW5pY19hZG1pbl93cV9jcV9zZXJ2aWNlKHN0cnVjdCBlbmljICplbmljKTtcbit1bnNpZ25lZCBpbnQgZW5pY19hZG1pbl9ycV9jcV9zZXJ2aWNlKHN0cnVjdCBlbmljICplbmljKTtcbitcbisjZW5kaWYgLyogX0VOSUNfQURNSU5fSF8gKi9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21haW4uY1xuaW5kZXggZTcxMjViODE4MDg3OTkuLmRlOTAzMzJkYzQwY2M3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21haW4uY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21haW4uY1xuQEAgLTYwLDYgKzYwLDggQEBcbiAjaW5jbHVkZSBcImVuaWNfY2xzZi5oXCJcbiAjaW5jbHVkZSBcImVuaWNfcnEuaFwiXG4gI2luY2x1ZGUgXCJlbmljX3dxLmhcIlxuKyNpbmNsdWRlIFwiZW5pY19hZG1pbi5oXCJcbisjaW5jbHVkZSBcImVuaWNfbWJveC5oXCJcbiBcbiAjZGVmaW5lIEVOSUNfTk9USUZZX1RJTUVSX1BFUklPRFx0KDIgKiBIWilcbiBcbkBAIC0zMTQsNiArMzE2LDExIEBAIHN0YXRpYyBpbnQgZW5pY19pc19zcmlvdl92ZihzdHJ1Y3QgZW5pYyAqZW5pYylcbiBcdCAgICAgICBlbmljLVx1MDAzZXBkZXYtXHUwMDNlZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfQ0lTQ09fVklDX0VORVRfVkZfVjI7XG4gfVxuIFxuK2ludCBlbmljX2lzX3NyaW92X3ZmX3YyKHN0cnVjdCBlbmljICplbmljKVxuK3tcbitcdHJldHVybiBlbmljLVx1MDAzZXBkZXYtXHUwMDNlZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfQ0lTQ09fVklDX0VORVRfVkZfVjI7XG4rfVxuK1xuIGludCBlbmljX2lzX3ZhbGlkX3ZmKHN0cnVjdCBlbmljICplbmljLCBpbnQgdmYpXG4ge1xuICNpZmRlZiBDT05GSUdfUENJX0lPVlxuQEAgLTQxMSw2ICs0MTgsMjQgQEAgc3RhdGljIHZvaWQgZW5pY19zZXRfcnhfY29hbF9zZXR0aW5nKHN0cnVjdCBlbmljICplbmljKVxuIFx0cnhfY29hbC1cdTAwM2V1c2VfYWRhcHRpdmVfcnhfY29hbGVzY2UgPSAxO1xuIH1cbiBcbitzdGF0aWMgdm9pZCBlbmljX2xpbmtfbm90aWZ5X3dvcmtfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4re1xuK1x0c3RydWN0IGVuaWMgKmVuaWMgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGVuaWMsXG4rXHRcdFx0XHRcdCBsaW5rX25vdGlmeV93b3JrKTtcbitcdHUzMiBzdGF0ZTtcbitcdHUxNiBpO1xuK1xuK1x0aWYgKCFlbmljX3NyaW92X2VuYWJsZWQoZW5pYykgfHwgIWVuaWMtXHUwMDNldmZfc3RhdGUpXG4rXHRcdHJldHVybjtcbitcbitcdHN0YXRlID0gbmV0aWZfY2Fycmllcl9vayhlbmljLVx1MDAzZW5ldGRldikgP1xuK1x0XHRFTklDX01CT1hfTElOS19TVEFURV9FTkFCTEUgOlxuK1x0XHRFTklDX01CT1hfTElOS19TVEFURV9ESVNBQkxFO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgZW5pYy1cdTAwM2VudW1fdmZzOyBpKyspXG4rXHRcdGVuaWNfbWJveF9zZW5kX2xpbmtfc3RhdGUoZW5pYywgaSwgc3RhdGUpO1xuK31cbitcbiBzdGF0aWMgdm9pZCBlbmljX2xpbmtfY2hlY2soc3RydWN0IGVuaWMgKmVuaWMpXG4ge1xuIFx0aW50IGxpbmtfc3RhdHVzID0gdm5pY19kZXZfbGlua19zdGF0dXMoZW5pYy1cdTAwM2V2ZGV2KTtcbkBAIC00MjAsOSArNDQ1LDEzIEBAIHN0YXRpYyB2b2lkIGVuaWNfbGlua19jaGVjayhzdHJ1Y3QgZW5pYyAqZW5pYylcbiBcdFx0bmV0ZGV2X2luZm8oZW5pYy1cdTAwM2VuZXRkZXYsIFwiTGluayBVUFxcblwiKTtcbiBcdFx0bmV0aWZfY2Fycmllcl9vbihlbmljLVx1MDAzZW5ldGRldik7XG4gXHRcdGVuaWNfc2V0X3J4X2NvYWxfc2V0dGluZyhlbmljKTtcbitcdFx0aWYgKGVuaWNfc3Jpb3ZfZW5hYmxlZChlbmljKSBcdTAwMjZcdTAwMjYgZW5pYy1cdTAwM2V2Zl9zdGF0ZSlcbitcdFx0XHRzY2hlZHVsZV93b3JrKFx1MDAyNmVuaWMtXHUwMDNlbGlua19ub3RpZnlfd29yayk7XG4gXHR9IGVsc2UgaWYgKCFsaW5rX3N0YXR1cyBcdTAwMjZcdTAwMjYgY2Fycmllcl9vaykge1xuIFx0XHRuZXRkZXZfaW5mbyhlbmljLVx1MDAzZW5ldGRldiwgXCJMaW5rIERPV05cXG5cIik7XG4gXHRcdG5ldGlmX2NhcnJpZXJfb2ZmKGVuaWMtXHUwMDNlbmV0ZGV2KTtcbitcdFx0aWYgKGVuaWNfc3Jpb3ZfZW5hYmxlZChlbmljKSBcdTAwMjZcdTAwMjYgZW5pYy1cdTAwM2V2Zl9zdGF0ZSlcbitcdFx0XHRzY2hlZHVsZV93b3JrKFx1MDAyNmVuaWMtXHUwMDNlbGlua19ub3RpZnlfd29yayk7XG4gXHR9XG4gfVxuIFxuQEAgLTIxNDIsNiArMjE3MSw1NyBAQCBzdGF0aWMgdm9pZCBlbmljX3NldF9hcGlfYnVzeShzdHJ1Y3QgZW5pYyAqZW5pYywgYm9vbCBidXN5KVxuIFx0c3Bpbl91bmxvY2soXHUwMDI2ZW5pYy1cdTAwM2VlbmljX2FwaV9sb2NrKTtcbiB9XG4gXG4rLyogVGhlIGFkbWluL01CT1ggY2hhbm5lbCBleGlzdHMgb24gYSBWMiBQRiB3aGlsZSBTUi1JT1YgaXMgZW5hYmxlZCBhbmQgb25cbisgKiBldmVyeSBWMiBWRi4gIEEgcmVzZXQgd2lwZXMgdGhlIGFkbWluIFdRL1JRL0NRLCBzbyBzdWNoIGRldmljZXMgbXVzdCB0ZWFyXG4rICogdGhlIGNoYW5uZWwgZG93biBiZWZvcmUgdGhlIHJlc2V0IGFuZCByZS1lc3RhYmxpc2ggaXQgYWZ0ZXJ3YXJkcy5cbisgKi9cbitzdGF0aWMgYm9vbCBlbmljX2hhc19hZG1pbl9jaGFuKHN0cnVjdCBlbmljICplbmljKVxuK3tcbitcdHJldHVybiBlbmljX2lzX3NyaW92X3ZmX3YyKGVuaWMpIHx8XG4rXHQgICAgICAgKGVuaWNfc3Jpb3ZfZW5hYmxlZChlbmljKSBcdTAwMjZcdTAwMjYgZW5pYy1cdTAwM2V2Zl90eXBlID09IEVOSUNfVkZfVFlQRV9WMik7XG4rfVxuK1xuKy8qIFJlLWVzdGFibGlzaCB0aGUgYWRtaW4vTUJPWCBjaGFubmVsIGFmdGVyIGEgcmVzZXQgaGFzIHJlLWNyZWF0ZWQgdGhlIGRhdGFcbisgKiBwYXRoLiAgTWlycm9ycyB0aGUgcmVsZXZhbnQgcGFydCBvZiB0aGUgcHJvYmUgLyBTUi1JT1YtZW5hYmxlIHNlcXVlbmNlOlxuKyAqIHJlb3BlbiB0aGUgY2hhbm5lbCBhbmQgcmVpbml0aWFsaXNlIE1CT1gsIHRoZW4gZm9yIGEgVkYgcmUtcnVuIHRoZSBQRlxuKyAqIGhhbmRzaGFrZSAoaXRzIGFkbWluIFFQIGFuZCBQRi1zaWRlIHJlZ2lzdHJhdGlvbiB3ZXJlIHRvcm4gZG93biBieSB0aGVcbisgKiByZXNldCksIG9yIGZvciBhIFBGIHJlLXB1c2ggdGhlIGN1cnJlbnQgbGluayBzdGF0ZSB0byByZWdpc3RlcmVkIFZGcy5cbisgKi9cbitzdGF0aWMgdm9pZCBlbmljX2FkbWluX2NoYW5fcmVvcGVuKHN0cnVjdCBlbmljICplbmljKVxuK3tcbitcdGludCBlcnI7XG4rXG4rXHRlcnIgPSBlbmljX2FkbWluX2NoYW5uZWxfb3BlbihlbmljKTtcbitcdGlmIChlcnIpIHtcbitcdFx0bmV0ZGV2X2VycihlbmljLVx1MDAzZW5ldGRldixcbitcdFx0XHQgICBcImFkbWluIGNoYW5uZWwgcmVvcGVuIGFmdGVyIHJlc2V0IGZhaWxlZDogJWRcXG5cIiwgZXJyKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0ZW5pY19tYm94X2luaXQoZW5pYyk7XG4rXG4rXHRpZiAoZW5pY19pc19zcmlvdl92Zl92MihlbmljKSkge1xuK1x0XHRlcnIgPSBlbmljX21ib3hfdmZfY2FwYWJpbGl0eV9jaGVjayhlbmljKTtcbitcdFx0aWYgKGVycikge1xuK1x0XHRcdG5ldGRldl9lcnIoZW5pYy1cdTAwM2VuZXRkZXYsXG4rXHRcdFx0XHQgICBcIk1CT1ggY2FwYWJpbGl0eSBjaGVjayBhZnRlciByZXNldCBmYWlsZWQ6ICVkXFxuXCIsXG4rXHRcdFx0XHQgICBlcnIpO1xuK1x0XHRcdHJldHVybjtcbitcdFx0fVxuK1x0XHRlcnIgPSBlbmljX21ib3hfdmZfcmVnaXN0ZXIoZW5pYyk7XG4rXHRcdGlmIChlcnIpXG4rXHRcdFx0bmV0ZGV2X2VycihlbmljLVx1MDAzZW5ldGRldixcbitcdFx0XHRcdCAgIFwiTUJPWCBWRiByZS1yZWdpc3RyYXRpb24gYWZ0ZXIgcmVzZXQgZmFpbGVkOiAlZFxcblwiLFxuK1x0XHRcdFx0ICAgZXJyKTtcbitcdH0gZWxzZSB7XG4rXHRcdC8qIFRoZSBsaW5rIGNhbWUgYmFjayB1cCBkdXJpbmcgZW5pY19vcGVuKCkgYWJvdmUgd2hpbGUgTUJPWFxuK1x0XHQgKiBzZW5kcyB3ZXJlIHN0aWxsIGRpc2FibGVkIChjaGFubmVsIG5vdCB5ZXQgcmVvcGVuZWQpLCBzbyB0aGF0XG4rXHRcdCAqIGxpbmstbm90aWZ5IHdhcyBkcm9wcGVkLiAgUmUtcHVzaCBjdXJyZW50IGxpbmsgc3RhdGUgbm93LlxuK1x0XHQgKi9cbitcdFx0c2NoZWR1bGVfd29yayhcdTAwMjZlbmljLVx1MDAzZWxpbmtfbm90aWZ5X3dvcmspO1xuK1x0fVxuK31cbitcbiBzdGF0aWMgdm9pZCBlbmljX3Jlc2V0KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiB7XG4gXHRzdHJ1Y3QgZW5pYyAqZW5pYyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZW5pYywgcmVzZXQpO1xuQEAgLTIxNTQsMTUgKzIyMzQsMzQgQEAgc3RhdGljIHZvaWQgZW5pY19yZXNldChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gXHQvKiBTdG9wIGFueSBhY3Rpdml0eSBmcm9tIGluZmluaWJhbmQgKi9cbiBcdGVuaWNfc2V0X2FwaV9idXN5KGVuaWMsIHRydWUpO1xuIFxuK1x0LyogRnVsbHkgdGVhciBkb3duIHRoZSBWMiBhZG1pbi9NQk9YIGNoYW5uZWwgYmVmb3JlIHRoZSBzb2Z0IHJlc2V0LlxuK1x0ICogVGhlIHJlc2V0IHdpcGVzIGFsbCBoYXJkd2FyZSBxdWV1ZXMgaW5jbHVkaW5nIHRoZSBhZG1pbiBXUS9SUTtcbitcdCAqIGNsb3NpbmcgZmlyc3QgdGVsbHMgZmlybXdhcmUgdG8gc3RvcCB0aGUgYWRtaW4gUVAgKHNvIGl0IG5vIGxvbmdlclxuK1x0ICogRE1BcyBmcm9tIHRoZSBhYm91dC10by1iZS1yZXNldCByaW5ncykgYW5kIGZyZWVzIHRoZSBhZG1pbiByZXNvdXJjZXNcbitcdCAqIHNvIHRoZXkgYXJlIGNsZWFubHkgcmUtYWxsb2NhdGVkIGFmdGVyd2FyZHMuXG4rXHQgKi9cbitcdGlmIChlbmljX2hhc19hZG1pbl9jaGFuKGVuaWMpKVxuK1x0XHRlbmljX2FkbWluX2NoYW5uZWxfY2xvc2UoZW5pYyk7XG4rXG4gXHRlbmljX3N0b3AoZW5pYy1cdTAwM2VuZXRkZXYpO1xuK1xuIFx0ZW5pY19kZXZfc29mdF9yZXNldChlbmljKTtcbiBcdGVuaWNfcmVzZXRfYWRkcl9saXN0cyhlbmljKTtcbiBcdGVuaWNfaW5pdF92bmljX3Jlc291cmNlcyhlbmljKTtcbiBcdGVuaWNfc2V0X3Jzc19uaWNfY2ZnKGVuaWMpO1xuIFx0ZW5pY19kZXZfc2V0X2lnX3ZsYW5fcmV3cml0ZV9tb2RlKGVuaWMpO1xuIFx0ZW5pY19leHRfY3EoZW5pYyk7XG4rXG4gXHRlbmljX29wZW4oZW5pYy1cdTAwM2VuZXRkZXYpO1xuIFxuK1x0LyogUmUtZXN0YWJsaXNoIHRoZSBhZG1pbi9NQk9YIGNoYW5uZWwgYWZ0ZXIgdGhlIGRhdGEgcGF0aCBpcyBiYWNrIHVwLlxuK1x0ICogSXQgd2FzIGZ1bGx5IHRvcm4gZG93biBieSBlbmljX2FkbWluX2NoYW5uZWxfY2xvc2UoKSBhYm92ZTtcbitcdCAqIGVuaWNfYWRtaW5fY2hhbl9yZW9wZW4oKSByZW9wZW5zIGl0IGFuZCwgZm9yIGEgUEYgcmUtcHVzaGVzIGxpbmtcbitcdCAqIHN0YXRlLCBvciBmb3IgYSBWRiByZS1ydW5zIHRoZSBwcm9iZS10aW1lIFBGIGhhbmRzaGFrZS5cbitcdCAqL1xuK1x0aWYgKGVuaWNfaGFzX2FkbWluX2NoYW4oZW5pYykpXG4rXHRcdGVuaWNfYWRtaW5fY2hhbl9yZW9wZW4oZW5pYyk7XG4rXG4gXHQvKiBBbGxvdyBpbmZpbmliYW5kIHRvIGZpZGRsZSB3aXRoIHRoZSBkZXZpY2UgYWdhaW4gKi9cbiBcdGVuaWNfc2V0X2FwaV9idXN5KGVuaWMsIGZhbHNlKTtcbiBcbkBAIC0yMTgwLDE2ICsyMjc5LDMzIEBAIHN0YXRpYyB2b2lkIGVuaWNfdHhfaGFuZ19yZXNldChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gXHQvKiBTdG9wIGFueSBhY3Rpdml0eSBmcm9tIGluZmluaWJhbmQgKi9cbiBcdGVuaWNfc2V0X2FwaV9idXN5KGVuaWMsIHRydWUpO1xuIFxuK1x0LyogRnVsbHkgdGVhciBkb3duIHRoZSBWMiBhZG1pbi9NQk9YIGNoYW5uZWwgYmVmb3JlIHRoZSBoYW5nIHJlc2V0LCBmb3JcbitcdCAqIHRoZSBzYW1lIHJlYXNvbiBhcyB0aGUgc29mdCByZXNldCBwYXRoOiBzdG9wIHRoZSBhZG1pbiBRUCBhbmQgZnJlZVxuK1x0ICogdGhlIGFkbWluIHJlc291cmNlcyBiZWZvcmUgdGhlIGhhcmR3YXJlIHF1ZXVlcyBhcmUgd2lwZWQuXG4rXHQgKi9cbitcdGlmIChlbmljX2hhc19hZG1pbl9jaGFuKGVuaWMpKVxuK1x0XHRlbmljX2FkbWluX2NoYW5uZWxfY2xvc2UoZW5pYyk7XG4rXG4gXHRlbmljX2Rldl9oYW5nX25vdGlmeShlbmljKTtcbiBcdGVuaWNfc3RvcChlbmljLVx1MDAzZW5ldGRldik7XG4rXG4gXHRlbmljX2Rldl9oYW5nX3Jlc2V0KGVuaWMpO1xuIFx0ZW5pY19yZXNldF9hZGRyX2xpc3RzKGVuaWMpO1xuIFx0ZW5pY19pbml0X3ZuaWNfcmVzb3VyY2VzKGVuaWMpO1xuIFx0ZW5pY19zZXRfcnNzX25pY19jZmcoZW5pYyk7XG4gXHRlbmljX2Rldl9zZXRfaWdfdmxhbl9yZXdyaXRlX21vZGUoZW5pYyk7XG4gXHRlbmljX2V4dF9jcShlbmljKTtcbitcbiBcdGVuaWNfb3BlbihlbmljLVx1MDAzZW5ldGRldik7XG4gXG4rXHQvKiBSZS1lc3RhYmxpc2ggdGhlIGFkbWluL01CT1ggY2hhbm5lbCBhZnRlciB0aGUgZGF0YSBwYXRoIGlzIGJhY2sgdXAuXG4rXHQgKiBJdCB3YXMgZnVsbHkgdG9ybiBkb3duIGJ5IGVuaWNfYWRtaW5fY2hhbm5lbF9jbG9zZSgpIGFib3ZlO1xuK1x0ICogZW5pY19hZG1pbl9jaGFuX3Jlb3BlbigpIHJlb3BlbnMgaXQgYW5kLCBmb3IgYSBQRiByZS1wdXNoZXMgbGlua1xuK1x0ICogc3RhdGUsIG9yIGZvciBhIFZGIHJlLXJ1bnMgdGhlIHByb2JlLXRpbWUgUEYgaGFuZHNoYWtlLlxuK1x0ICovXG4rXHRpZiAoZW5pY19oYXNfYWRtaW5fY2hhbihlbmljKSlcbitcdFx0ZW5pY19hZG1pbl9jaGFuX3Jlb3BlbihlbmljKTtcbitcbiBcdC8qIEFsbG93IGluZmluaWJhbmQgdG8gZmlkZGxlIHdpdGggdGhlIGRldmljZSBhZ2FpbiAqL1xuIFx0ZW5pY19zZXRfYXBpX2J1c3koZW5pYywgZmFsc2UpO1xuIFxuQEAgLTIyMDAsNiArMjMxNiw4IEBAIHN0YXRpYyB2b2lkIGVuaWNfdHhfaGFuZ19yZXNldChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gXG4gc3RhdGljIGludCBlbmljX3NldF9pbnRyX21vZGUoc3RydWN0IGVuaWMgKmVuaWMpXG4ge1xuK1x0dW5zaWduZWQgaW50IGFkbWluX3Jlc2VydmUgPSBlbmljLVx1MDAzZWhhc19hZG1pbl9jaGFubmVsID8gMSA6IDA7XG4rXHR1bnNpZ25lZCBpbnQgbWluX2ludHIgPSBFTklDX01TSVhfTUlOX0lOVFIgKyBhZG1pbl9yZXNlcnZlO1xuIFx0dW5zaWduZWQgaW50IGk7XG4gXHRpbnQgbnVtX2ludHI7XG4gXG5AQCAtMjIxMCwxMiArMjMyOCwxMiBAQCBzdGF0aWMgaW50IGVuaWNfc2V0X2ludHJfbW9kZShzdHJ1Y3QgZW5pYyAqZW5pYylcbiBcdCAqL1xuIFxuIFx0aWYgKGVuaWMtXHUwMDNlY29uZmlnLmludHJfbW9kZSBcdTAwM2MgMSBcdTAwMjZcdTAwMjZcbi1cdCAgICBlbmljLVx1MDAzZWludHJfYXZhaWwgXHUwMDNlPSBFTklDX01TSVhfTUlOX0lOVFIpIHtcbitcdCAgICBlbmljLVx1MDAzZWludHJfYXZhaWwgXHUwMDNlPSBtaW5faW50cikge1xuIFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBlbmljLVx1MDAzZWludHJfYXZhaWw7IGkrKylcbiBcdFx0XHRlbmljLVx1MDAzZW1zaXhfZW50cnlbaV0uZW50cnkgPSBpO1xuIFxuIFx0XHRudW1faW50ciA9IHBjaV9lbmFibGVfbXNpeF9yYW5nZShlbmljLVx1MDAzZXBkZXYsIGVuaWMtXHUwMDNlbXNpeF9lbnRyeSxcbi1cdFx0XHRcdFx0XHQgRU5JQ19NU0lYX01JTl9JTlRSLFxuK1x0XHRcdFx0XHRcdCBtaW5faW50cixcbiBcdFx0XHRcdFx0XHQgZW5pYy1cdTAwM2VpbnRyX2F2YWlsKTtcbiBcdFx0aWYgKG51bV9pbnRyIFx1MDAzZSAwKSB7XG4gXHRcdFx0dm5pY19kZXZfc2V0X2ludHJfbW9kZShlbmljLVx1MDAzZXZkZXYsXG5AQCAtMjMxMCwxNiArMjQyOCwyNyBAQCBzdGF0aWMgaW50IGVuaWNfYWRqdXN0X3Jlc291cmNlcyhzdHJ1Y3QgZW5pYyAqZW5pYylcbiBcdFx0ZW5pYy1cdTAwM2VjcV9jb3VudCA9IDI7XG4gXHRcdGVuaWMtXHUwMDNlaW50cl9jb3VudCA9IGVuaWMtXHUwMDNlaW50cl9hdmFpbDtcbiBcdFx0YnJlYWs7XG4tXHRjYXNlIFZOSUNfREVWX0lOVFJfTU9ERV9NU0lYOlxuK1x0Y2FzZSBWTklDX0RFVl9JTlRSX01PREVfTVNJWDoge1xuIFx0XHQvKiBBZGp1c3QgdGhlIG51bWJlciBvZiB3cXMvcnFzL2Nxcy9pbnRlcnJ1cHRzIHRoYXQgd2lsbCBiZVxuLVx0XHQgKiB1c2VkIGJhc2VkIG9uIHdoaWNoIHJlc291cmNlIGlzIHRoZSBtb3N0IGNvbnN0cmFpbmVkXG4rXHRcdCAqIHVzZWQgYmFzZWQgb24gd2hpY2ggcmVzb3VyY2UgaXMgdGhlIG1vc3QgY29uc3RyYWluZWQuXG4rXHRcdCAqIFJlc2VydmUgb25lIGV4dHJhIE1TSS1YIHNsb3QgZm9yIHRoZSBhZG1pbiBjaGFubmVsIElOVFJcbitcdFx0ICogd2hlbiBoYXNfYWRtaW5fY2hhbm5lbCBpcyBzZXQgc28gdGhhdFxuK1x0XHQgKiBlbmljX2FkbWluX3NldHVwX2ludHIoKSBjYW4gYWxsb2NhdGUgYXQgaW50cl9jb3VudFxuK1x0XHQgKiB3aXRoaW4gdGhlIGludHJfYXZhaWwgYm91bmRzIGV2ZW4gd2hlbiB0aGUgZGF0YSBxdWV1ZVxuK1x0XHQgKiBjb3VudCBpcyBtYXhlZCBvdXQuICBpbnRyX2NvdW50IGNvdW50cyBvbmx5IHRoZSBkYXRhLXBhdGhcbitcdFx0ICogSVJRcyAocmVnaXN0ZXJlZCBieSBlbmljX3JlcXVlc3RfaW50cigpKTsgdGhlIGFkbWluIElOVFJcbitcdFx0ICogbGl2ZXMgYXQgbXNpeCBpbmRleCBpbnRyX2NvdW50IGFuZCBpcyBzZXQgdXAgbGF0ZXIgYnlcbitcdFx0ICogZW5pY19hZG1pbl9zZXR1cF9pbnRyKCkuXG4gXHRcdCAqL1xuK1x0XHR1bnNpZ25lZCBpbnQgYWRtaW5fcmVzZXJ2ZSA9IGVuaWMtXHUwMDNlaGFzX2FkbWluX2NoYW5uZWwgPyAxIDogMDtcbitcbiBcdFx0d3FfYXZhaWwgPSBtaW4oZW5pYy1cdTAwM2V3cV9hdmFpbCwgRU5JQ19XUV9NQVgpO1xuIFx0XHRycV9kZWZhdWx0ID0gbWF4KG5ldGlmX2dldF9udW1fZGVmYXVsdF9yc3NfcXVldWVzKCksXG4gXHRcdFx0XHQgRU5JQ19SUV9NSU5fREVGQVVMVCk7XG4gXHRcdHJxX2F2YWlsID0gbWluMyhlbmljLVx1MDAzZXJxX2F2YWlsLCBFTklDX1JRX01BWCwgcnFfZGVmYXVsdCk7XG4gXHRcdG1heF9xdWV1ZXMgPSBtaW4oZW5pYy1cdTAwM2VjcV9hdmFpbCxcbi1cdFx0XHRcdCBlbmljLVx1MDAzZWludHJfYXZhaWwgLSBFTklDX01TSVhfUkVTRVJWRURfSU5UUik7XG4rXHRcdFx0XHQgZW5pYy1cdTAwM2VpbnRyX2F2YWlsIC0gRU5JQ19NU0lYX1JFU0VSVkVEX0lOVFIgLVxuK1x0XHRcdFx0IGFkbWluX3Jlc2VydmUpO1xuIFx0XHRpZiAod3FfYXZhaWwgKyBycV9hdmFpbCBcdTAwM2M9IG1heF9xdWV1ZXMpIHtcbiBcdFx0XHRlbmljLVx1MDAzZXJxX2NvdW50ID0gcnFfYXZhaWw7XG4gXHRcdFx0ZW5pYy1cdTAwM2V3cV9jb3VudCA9IHdxX2F2YWlsO1xuQEAgLTIzMzcsNiArMjQ2Niw3IEBAIHN0YXRpYyBpbnQgZW5pY19hZGp1c3RfcmVzb3VyY2VzKHN0cnVjdCBlbmljICplbmljKVxuIFx0XHRlbmljLVx1MDAzZWludHJfY291bnQgPSBlbmljLVx1MDAzZWNxX2NvdW50ICsgRU5JQ19NU0lYX1JFU0VSVkVEX0lOVFI7XG4gXG4gXHRcdGJyZWFrO1xuK1x0fVxuIFx0ZGVmYXVsdDpcbiBcdFx0ZGV2X2VycihlbmljX2dldF9kZXYoZW5pYyksIFwiVW5rbm93biBpbnRlcnJ1cHQgbW9kZVxcblwiKTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG5AQCAtMjY0MSw4ICsyNzcxLDEwIEBAIHN0YXRpYyB2b2lkIGVuaWNfaW91bm1hcChzdHJ1Y3QgZW5pYyAqZW5pYylcbiBzdGF0aWMgdm9pZCBlbmljX3NyaW92X2RldGVjdF92Zl90eXBlKHN0cnVjdCBlbmljICplbmljKVxuIHtcbiBcdHN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gZW5pYy1cdTAwM2VwZGV2O1xuLVx0aW50IHBvcztcbitcdHU2NCBzdXBwb3J0ZWRfdmVyc2lvbnMsIGExID0gMDtcbiBcdHUxNiB2Zl9kZXZfaWQ7XG4rXHRpbnQgcG9zO1xuK1x0aW50IGVycjtcbiBcbiBcdGlmIChlbmljX2lzX3NyaW92X3ZmKGVuaWMpIHx8IGVuaWNfaXNfZHluYW1pYyhlbmljKSlcbiBcdFx0cmV0dXJuO1xuQEAgLTI2NjksNiArMjgwMSwxNDkgQEAgc3RhdGljIHZvaWQgZW5pY19zcmlvdl9kZXRlY3RfdmZfdHlwZShzdHJ1Y3QgZW5pYyAqZW5pYylcbiBcdFx0ZW5pYy1cdTAwM2V2Zl90eXBlID0gRU5JQ19WRl9UWVBFX05PTkU7XG4gXHRcdGJyZWFrO1xuIFx0fVxuK1xuK1x0aWYgKGVuaWMtXHUwMDNldmZfdHlwZSAhPSBFTklDX1ZGX1RZUEVfVjIpXG4rXHRcdHJldHVybjtcbitcbitcdC8qIEEgc3VjY2Vzc2Z1bCBjb21tYW5kIG1lYW5zIGZpcm13YXJlIHJlY29nbml6ZXNcbitcdCAqIFZJQ19GRUFUVVJFX1NSSU9WOyBzdXBwb3J0ZWRfdmVyc2lvbnMgaXMgYXZhaWxhYmxlXG4rXHQgKiBmb3Igc3ViLWZlYXR1cmUgdmVyc2lvbmluZyBpbiB0aGUgZnV0dXJlLlxuK1x0ICovXG4rXHRlcnIgPSB2bmljX2Rldl9nZXRfc3VwcG9ydGVkX2ZlYXR1cmVfdmVyKGVuaWMtXHUwMDNldmRldixcbitcdFx0XHRcdFx0XHQgVklDX0ZFQVRVUkVfU1JJT1YsXG4rXHRcdFx0XHRcdFx0IFx1MDAyNnN1cHBvcnRlZF92ZXJzaW9ucyxcbitcdFx0XHRcdFx0XHQgXHUwMDI2YTEpO1xuK1x0aWYgKGVycikge1xuK1x0XHRkZXZfd2FybihcdTAwMjZwZGV2LVx1MDAzZWRldixcbitcdFx0XHQgXCJTUi1JT1YgVjIgbm90IHN1cHBvcnRlZCBieSBjdXJyZW50IGZpcm13YXJlLiBVcGdyYWRlIHRvIFZJQyBGVyA1LjMoNC43Mikgb3IgaGlnaGVyLlxcblwiKTtcbitcdFx0ZW5pYy1cdTAwM2V2Zl90eXBlID0gRU5JQ19WRl9UWVBFX05PTkU7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyBpbnQgX19tYXliZV91bnVzZWRcbitlbmljX3NyaW92X3YyX2VuYWJsZShzdHJ1Y3QgZW5pYyAqZW5pYywgaW50IG51bV92ZnMpXG4re1xuK1x0aW50IGVycjtcbitcbitcdGlmICghZW5pYy1cdTAwM2VoYXNfYWRtaW5fY2hhbm5lbCkge1xuK1x0XHRuZXRkZXZfZXJyKGVuaWMtXHUwMDNlbmV0ZGV2LFxuK1x0XHRcdCAgIFwiVjIgU1ItSU9WIHJlcXVpcmVzIGFkbWluIGNoYW5uZWwgcmVzb3VyY2VzXFxuXCIpO1xuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHR9XG4rXG4rXHRlbmljLVx1MDAzZXZmX3N0YXRlID0ga2NhbGxvYyhudW1fdmZzLCBzaXplb2YoKmVuaWMtXHUwMDNldmZfc3RhdGUpLCBHRlBfS0VSTkVMKTtcbitcdGlmICghZW5pYy1cdTAwM2V2Zl9zdGF0ZSlcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRlcnIgPSBlbmljX2FkbWluX2NoYW5uZWxfb3BlbihlbmljKTtcbitcdGlmIChlcnIpIHtcbitcdFx0bmV0ZGV2X2VycihlbmljLVx1MDAzZW5ldGRldixcbitcdFx0XHQgICBcIkZhaWxlZCB0byBvcGVuIGFkbWluIGNoYW5uZWw6ICVkXFxuXCIsIGVycik7XG4rXHRcdGdvdG8gZnJlZV92Zl9zdGF0ZTtcbitcdH1cbitcbitcdGVuaWNfbWJveF9pbml0KGVuaWMpO1xuK1xuK1x0ZW5pYy1cdTAwM2VudW1fdmZzID0gbnVtX3ZmcztcbitcbitcdGVyciA9IHBjaV9lbmFibGVfc3Jpb3YoZW5pYy1cdTAwM2VwZGV2LCBudW1fdmZzKTtcbitcdGlmIChlcnIpIHtcbitcdFx0bmV0ZGV2X2VycihlbmljLVx1MDAzZW5ldGRldixcbitcdFx0XHQgICBcInBjaV9lbmFibGVfc3Jpb3YgZmFpbGVkOiAlZFxcblwiLCBlcnIpO1xuK1x0XHRnb3RvIGNsb3NlX2FkbWluO1xuK1x0fVxuK1xuK1x0ZW5pYy1cdTAwM2Vwcml2X2ZsYWdzIHw9IEVOSUNfU1JJT1ZfRU5BQkxFRDtcbitcdHJldHVybiBudW1fdmZzO1xuK1xuK2Nsb3NlX2FkbWluOlxuK1x0ZW5pYy1cdTAwM2VudW1fdmZzID0gMDtcbitcdGVuaWNfYWRtaW5fY2hhbm5lbF9jbG9zZShlbmljKTtcbitmcmVlX3ZmX3N0YXRlOlxuK1x0a2ZyZWUoZW5pYy1cdTAwM2V2Zl9zdGF0ZSk7XG4rXHRlbmljLVx1MDAzZXZmX3N0YXRlID0gTlVMTDtcbitcdHJldHVybiBlcnI7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGVuaWNfc3Jpb3ZfdjJfZGlzYWJsZShzdHJ1Y3QgZW5pYyAqZW5pYylcbit7XG4rXHQvKiBTdG9wIG5ldyBWRiBsaW5rLXN0YXRlIGJyb2FkY2FzdHMgYmVmb3JlIHRlYXJpbmcgZG93biB2Zl9zdGF0ZS5cbitcdCAqIENsZWFyaW5nIEVOSUNfU1JJT1ZfRU5BQkxFRCBtYWtlcyBlbmljX2xpbmtfY2hlY2soKSAoY2FsbGVkIGZyb21cbitcdCAqIHRoZSBub3RpZnkgdGltZXIvSVNSKSBza2lwIHRoZSBWRiBub3RpZnkgcGF0aCwgYW5kIGNhbmNlbGxpbmdcbitcdCAqIGxpbmtfbm90aWZ5X3dvcmsgZW5zdXJlcyBhbnkgYWxyZWFkeS1xdWV1ZWQgYnJvYWRjYXN0IGhhcyBmaW5pc2hlZFxuK1x0ICogYmVmb3JlIHZmX3N0YXRlIGlzIGZyZWVkLCBjbG9zaW5nIGEgdXNlLWFmdGVyLWZyZWUgd2luZG93LlxuK1x0ICovXG4rXHRlbmljLVx1MDAzZXByaXZfZmxhZ3MgXHUwMDI2PSB+RU5JQ19TUklPVl9FTkFCTEVEO1xuK1x0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZlbmljLVx1MDAzZWxpbmtfbm90aWZ5X3dvcmspO1xuK1xuK1x0cGNpX2Rpc2FibGVfc3Jpb3YoZW5pYy1cdTAwM2VwZGV2KTtcbitcdGVuaWNfYWRtaW5fY2hhbm5lbF9jbG9zZShlbmljKTtcbitcdGtmcmVlKGVuaWMtXHUwMDNldmZfc3RhdGUpO1xuK1x0ZW5pYy1cdTAwM2V2Zl9zdGF0ZSA9IE5VTEw7XG4rXHRlbmljLVx1MDAzZW51bV92ZnMgPSAwO1xuK31cbitcbitzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkXG4rZW5pY19zcmlvdl9jb25maWd1cmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBudW1fdmZzKVxuK3tcbitcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7XG4rXHRzdHJ1Y3QgZW5pYyAqZW5pYyA9IG5ldGRldl9wcml2KG5ldGRldik7XG4rXHRzdHJ1Y3QgZW5pY19wb3J0X3Byb2ZpbGUgKnBwO1xuK1x0aW50IGVycjtcbitcbitcdGlmIChudW1fdmZzIFx1MDAzZSAwKSB7XG4rXHRcdGlmIChlbmljLVx1MDAzZWNvbmZpZy5tcV9zdWJ2bmljX2NvdW50KSB7XG4rXHRcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4rXHRcdFx0XHQgICBcIlNSLUlPViBub3Qgc3VwcG9ydGVkIHdpdGggbXVsdGktcXVldWUgc3ViLXZuaWNzXFxuXCIpO1xuK1x0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdFx0fVxuK1xuK1x0XHRpZiAoZW5pYy1cdTAwM2V2Zl90eXBlID09IEVOSUNfVkZfVFlQRV9OT05FKSB7XG4rXHRcdFx0bmV0ZGV2X2VycihuZXRkZXYsXG4rXHRcdFx0XHQgICBcIlNSLUlPViBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgZmlybXdhcmUgdmVyc2lvblxcblwiKTtcbitcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHRcdH1cbitcbitcdFx0aWYgKGVuaWMtXHUwMDNldmZfdHlwZSA9PSBFTklDX1ZGX1RZUEVfVjIpXG4rXHRcdFx0cmV0dXJuIGVuaWNfc3Jpb3ZfdjJfZW5hYmxlKGVuaWMsIG51bV92ZnMpO1xuK1xuK1x0XHRwcCA9IGtjYWxsb2MobnVtX3Zmcywgc2l6ZW9mKCpwcCksIEdGUF9LRVJORUwpO1xuK1x0XHRpZiAoIXBwKVxuK1x0XHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0XHRlcnIgPSBwY2lfZW5hYmxlX3NyaW92KHBkZXYsIG51bV92ZnMpO1xuK1x0XHRpZiAoZXJyKSB7XG4rXHRcdFx0a2ZyZWUocHApO1xuK1x0XHRcdHJldHVybiBlcnI7XG4rXHRcdH1cbitcbitcdFx0a2ZyZWUoZW5pYy1cdTAwM2VwcCk7XG4rXHRcdGVuaWMtXHUwMDNlcHAgPSBwcDtcbitcdFx0ZW5pYy1cdTAwM2VudW1fdmZzID0gbnVtX3ZmcztcbitcdFx0ZW5pYy1cdTAwM2Vwcml2X2ZsYWdzIHw9IEVOSUNfU1JJT1ZfRU5BQkxFRDtcbitcdFx0cmV0dXJuIG51bV92ZnM7XG4rXHR9XG4rXG4rXHRpZiAoIWVuaWNfc3Jpb3ZfZW5hYmxlZChlbmljKSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRpZiAoZW5pYy1cdTAwM2V2Zl90eXBlID09IEVOSUNfVkZfVFlQRV9WMikge1xuK1x0XHRlbmljX3NyaW92X3YyX2Rpc2FibGUoZW5pYyk7XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuK1xuK1x0cHAgPSBremFsbG9jX29iaigqZW5pYy1cdTAwM2VwcCwgR0ZQX0tFUk5FTCk7XG4rXHRpZiAoIXBwKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdHBjaV9kaXNhYmxlX3NyaW92KHBkZXYpO1xuK1x0ZW5pYy1cdTAwM2VudW1fdmZzID0gMDtcbitcdGVuaWMtXHUwMDNlcHJpdl9mbGFncyBcdTAwMjY9IH5FTklDX1NSSU9WX0VOQUJMRUQ7XG4rXG4rXHRrZnJlZShlbmljLVx1MDAzZXBwKTtcbitcdGVuaWMtXHUwMDNlcHAgPSBwcDtcbitcbitcdHJldHVybiAwO1xuIH1cbiAjZW5kaWZcbiBcbkBAIC0yNzY4LDEyICszMDQzLDE4IEBAIHN0YXRpYyBpbnQgZW5pY19wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcbiBcdFx0Z290byBlcnJfb3V0X3ZuaWNfdW5yZWdpc3RlcjtcbiBcbiAjaWZkZWYgQ09ORklHX1BDSV9JT1Zcbi1cdC8qIEdldCBudW1iZXIgb2Ygc3Vidm5pY3MgKi9cbitcdGVuaWNfc3Jpb3ZfZGV0ZWN0X3ZmX3R5cGUoZW5pYyk7XG4rXG4rXHQvKiBBdXRvLWVuYWJsZSBTUi1JT1YgaWYgVkZzIHdlcmUgcHJlLWNvbmZpZ3VyZWQgKGUuZy4gYXQgYm9vdCkuXG4rXHQgKiBWMiBWRnMgcmVxdWlyZSB0aGUgYWRtaW4gY2hhbm5lbCwgd2hpY2ggaXMgbm90IHlldCBzZXQgdXAgYXQgcHJvYmVcbitcdCAqIHRpbWU7IHVzZSBzeXNmcyAoZW5pY19zcmlvdl9jb25maWd1cmUpIHRvIGVuYWJsZSBWMiBTUi1JT1YgaW5zdGVhZC5cbitcdCAqL1xuIFx0cG9zID0gcGNpX2ZpbmRfZXh0X2NhcGFiaWxpdHkocGRldiwgUENJX0VYVF9DQVBfSURfU1JJT1YpO1xuIFx0aWYgKHBvcykge1xuIFx0XHRwY2lfcmVhZF9jb25maWdfd29yZChwZGV2LCBwb3MgKyBQQ0lfU1JJT1ZfVE9UQUxfVkYsXG4gXHRcdFx0XHUwMDI2ZW5pYy1cdTAwM2VudW1fdmZzKTtcbi1cdFx0aWYgKGVuaWMtXHUwMDNlbnVtX3Zmcykge1xuK1x0XHRpZiAoZW5pYy1cdTAwM2VudW1fdmZzIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgZW5pYy1cdTAwM2V2Zl90eXBlICE9IEVOSUNfVkZfVFlQRV9WMikge1xuIFx0XHRcdGVyciA9IHBjaV9lbmFibGVfc3Jpb3YocGRldiwgZW5pYy1cdTAwM2VudW1fdmZzKTtcbiBcdFx0XHRpZiAoZXJyKSB7XG4gXHRcdFx0XHRkZXZfZXJyKGRldiwgXCJTUklPViBlbmFibGUgZmFpbGVkLCBhYm9ydGluZy5cIlxuQEAgLTI3ODUsNyArMzA2Niw2IEBAIHN0YXRpYyBpbnQgZW5pY19wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcbiBcdFx0XHRudW1fcHBzID0gZW5pYy1cdTAwM2VudW1fdmZzO1xuIFx0XHR9XG4gXHR9XG4tXHRlbmljX3NyaW92X2RldGVjdF92Zl90eXBlKGVuaWMpO1xuICNlbmRpZlxuIFxuIFx0LyogQWxsb2NhdGUgc3RydWN0dXJlIGZvciBwb3J0IHByb2ZpbGVzICovXG5AQCAtMjg1MCw2ICszMTMwLDQ0IEBAIHN0YXRpYyBpbnQgZW5pY19wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcbiBcdFx0Z290byBlcnJfb3V0X2Rldl9jbG9zZTtcbiBcdH1cbiBcbitcdC8qIEluaXRpYWxpc2UgbGlua19ub3RpZnlfd29yayBiZWZvcmUgdGhlIFYyLVZGIGFkbWluLW9wZW4gYmxvY2sgYmVsb3c6XG4rXHQgKiBpdHMgZXJyb3IgcGF0aCAoZXJyX291dF9hZG1pbl9jbG9zZSAtXHUwMDNlIGVuaWNfYWRtaW5fY2hhbm5lbF9jbG9zZSgpIC1cdTAwM2VcbitcdCAqIGNhbmNlbF93b3JrX3N5bmMoKSkgd291bGQgb3RoZXJ3aXNlIGFjdCBvbiBhbiB1bmluaXRpYWxpc2VkIHdvcmsuXG4rXHQgKi9cbitcdElOSVRfV09SSyhcdTAwMjZlbmljLVx1MDAzZWxpbmtfbm90aWZ5X3dvcmssIGVuaWNfbGlua19ub3RpZnlfd29ya19oYW5kbGVyKTtcbitcbitcdC8qIFYyIFZGOiBvcGVuIGFkbWluIGNoYW5uZWwgYW5kIHJlZ2lzdGVyIHdpdGggUEYuXG4rXHQgKiBNdXN0IGhhcHBlbiBiZWZvcmUgcmVnaXN0ZXJfbmV0ZGV2IHNvIHRoZSBWRiBpcyBmdWxseVxuK1x0ICogaW5pdGlhbGl6ZWQgYmVmb3JlIHRoZSBpbnRlcmZhY2UgaXMgdmlzaWJsZSB0byB1c2Vyc3BhY2UuXG4rXHQgKlxuK1x0ICogYWRtaW5fY2hhbm5lbF9vcGVuKCkgcnVucyBiZWZvcmUgZW5pY19tYm94X2luaXQoKSBpbnN0YWxsc1xuK1x0ICogdGhlIHJlY2VpdmUgaGFuZGxlci4gIFRoaXMgaXMgc2FmZSBiZWNhdXNlXG4rXHQgKiBlbmljX2FkbWluX3JxX2NxX3NlcnZpY2UoKSBjaGVja3MgYWRtaW5fcnFfaGFuZGxlciBiZWZvcmVcbitcdCAqIGVucXVldWluZyBhbnkgcmVjZWl2ZWQgYnVmZmVyLCBzbyBpbnRlcnJ1cHRzIHRoYXQgZmlyZVxuK1x0ICogYmV0d2VlbiBvcGVuIGFuZCBtYm94X2luaXQgYXJlIGhhcm1sZXNzbHkgZGlzY2FyZGVkLlxuK1x0ICovXG4rXHRpZiAoZW5pY19pc19zcmlvdl92Zl92MihlbmljKSkge1xuK1x0XHRlcnIgPSBlbmljX2FkbWluX2NoYW5uZWxfb3BlbihlbmljKTtcbitcdFx0aWYgKGVycikge1xuK1x0XHRcdGRldl9lcnIoZGV2LFxuK1x0XHRcdFx0XCJGYWlsZWQgdG8gb3BlbiBhZG1pbiBjaGFubmVsOiAlZFxcblwiLCBlcnIpO1xuK1x0XHRcdGdvdG8gZXJyX291dF9kZXZfZGVpbml0O1xuK1x0XHR9XG4rXHRcdGVuaWNfbWJveF9pbml0KGVuaWMpO1xuK1x0XHRlcnIgPSBlbmljX21ib3hfdmZfY2FwYWJpbGl0eV9jaGVjayhlbmljKTtcbitcdFx0aWYgKGVycikge1xuK1x0XHRcdGRldl9lcnIoZGV2LFxuK1x0XHRcdFx0XCJNQk9YIGNhcGFiaWxpdHkgY2hlY2sgZmFpbGVkOiAlZFxcblwiLCBlcnIpO1xuK1x0XHRcdGdvdG8gZXJyX291dF9hZG1pbl9jbG9zZTtcbitcdFx0fVxuK1x0XHRlcnIgPSBlbmljX21ib3hfdmZfcmVnaXN0ZXIoZW5pYyk7XG4rXHRcdGlmIChlcnIpIHtcbitcdFx0XHRkZXZfZXJyKGRldixcbitcdFx0XHRcdFwiTUJPWCBWRiByZWdpc3RyYXRpb24gZmFpbGVkOiAlZFxcblwiLCBlcnIpO1xuK1x0XHRcdGdvdG8gZXJyX291dF9hZG1pbl9jbG9zZTtcbitcdFx0fVxuK1x0fVxuK1xuIFx0bmV0aWZfc2V0X3JlYWxfbnVtX3R4X3F1ZXVlcyhuZXRkZXYsIGVuaWMtXHUwMDNld3FfY291bnQpO1xuIFx0bmV0aWZfc2V0X3JlYWxfbnVtX3J4X3F1ZXVlcyhuZXRkZXYsIGVuaWMtXHUwMDNlcnFfY291bnQpO1xuIFxuQEAgLTI4NzQsNyArMzE5Miw3IEBAIHN0YXRpYyBpbnQgZW5pY19wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcbiBcdGVyciA9IGVuaWNfc2V0X21hY19hZGRyKG5ldGRldiwgZW5pYy1cdTAwM2VtYWNfYWRkcik7XG4gXHRpZiAoZXJyKSB7XG4gXHRcdGRldl9lcnIoZGV2LCBcIkludmFsaWQgTUFDIGFkZHJlc3MsIGFib3J0aW5nXFxuXCIpO1xuLVx0XHRnb3RvIGVycl9vdXRfZGV2X2RlaW5pdDtcbitcdFx0Z290byBlcnJfb3V0X2FkbWluX2Nsb3NlO1xuIFx0fVxuIFxuIFx0ZW5pYy1cdTAwM2V0eF9jb2FsZXNjZV91c2VjcyA9IGVuaWMtXHUwMDNlY29uZmlnLmludHJfdGltZXJfdXNlYztcbkBAIC0yOTcyLDExICszMjkwLDIzIEBAIHN0YXRpYyBpbnQgZW5pY19wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcbiBcdGVyciA9IHJlZ2lzdGVyX25ldGRldihuZXRkZXYpO1xuIFx0aWYgKGVycikge1xuIFx0XHRkZXZfZXJyKGRldiwgXCJDYW5ub3QgcmVnaXN0ZXIgbmV0IGRldmljZSwgYWJvcnRpbmdcXG5cIik7XG4tXHRcdGdvdG8gZXJyX291dF9kZXZfZGVpbml0O1xuK1x0XHRnb3RvIGVycl9vdXRfYWRtaW5fY2xvc2U7XG4gXHR9XG4gXG4gXHRyZXR1cm4gMDtcbiBcbitlcnJfb3V0X2FkbWluX2Nsb3NlOlxuK1x0aWYgKGVuaWNfaXNfc3Jpb3ZfdmZfdjIoZW5pYykpIHtcbitcdFx0aWYgKGVuaWMtXHUwMDNldmZfcmVnaXN0ZXJlZCkge1xuK1x0XHRcdGludCB1bnJlZ19lcnIgPSBlbmljX21ib3hfdmZfdW5yZWdpc3RlcihlbmljKTtcbitcbitcdFx0XHRpZiAodW5yZWdfZXJyKVxuK1x0XHRcdFx0bmV0ZGV2X3dhcm4obmV0ZGV2LFxuK1x0XHRcdFx0XHQgICAgXCJGYWlsZWQgdG8gdW5yZWdpc3RlciBmcm9tIFBGOiAlZFxcblwiLFxuK1x0XHRcdFx0XHQgICAgdW5yZWdfZXJyKTtcbitcdFx0fVxuK1x0XHRlbmljX2FkbWluX2NoYW5uZWxfY2xvc2UoZW5pYyk7XG4rXHR9XG4gZXJyX291dF9kZXZfZGVpbml0OlxuIFx0ZW5pY19kZXZfZGVpbml0KGVuaWMpO1xuIGVycl9vdXRfZGV2X2Nsb3NlOlxuQEAgLTMwMTIsMTYgKzMzNDIsNDIgQEAgc3RhdGljIHZvaWQgZW5pY19yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gXHRcdHN0cnVjdCBlbmljICplbmljID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiBcbiBcdFx0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZlbmljLVx1MDAzZXJlc2V0KTtcbitcdFx0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZlbmljLVx1MDAzZXR4X2hhbmdfcmVzZXQpO1xuIFx0XHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNmVuaWMtXHUwMDNlY2hhbmdlX210dV93b3JrKTtcbitcbitcdFx0LyogQ2xvc2UgdGhlIGFkbWluIGNoYW5uZWwgYW5kIHVucmVnaXN0ZXIgZnJvbSB0aGUgUEYgYmVmb3JlXG4rXHRcdCAqIHVucmVnaXN0ZXJfbmV0ZGV2KCkgdG8gcHJldmVudCBhIGxhdGUgUEYgbm90aWZpY2F0aW9uIGZyb21cbitcdFx0ICogdG91Y2hpbmcgYSBuZXRkZXYgdGhhdCBoYXMgYmVlbiBmcmVlZC5cbitcdFx0ICovXG4rXHRcdGlmIChlbmljX2lzX3NyaW92X3ZmX3YyKGVuaWMpKSB7XG4rXHRcdFx0aWYgKGVuaWMtXHUwMDNldmZfcmVnaXN0ZXJlZCkge1xuK1x0XHRcdFx0aW50IHVucmVnX2VyciA9IGVuaWNfbWJveF92Zl91bnJlZ2lzdGVyKGVuaWMpO1xuK1xuK1x0XHRcdFx0aWYgKHVucmVnX2VycilcbitcdFx0XHRcdFx0bmV0ZGV2X3dhcm4obmV0ZGV2LFxuK1x0XHRcdFx0XHRcdCAgICBcIkZhaWxlZCB0byB1bnJlZ2lzdGVyIGZyb20gUEY6ICVkXFxuXCIsXG4rXHRcdFx0XHRcdFx0ICAgIHVucmVnX2Vycik7XG4rXHRcdFx0fVxuK1x0XHRcdGVuaWNfYWRtaW5fY2hhbm5lbF9jbG9zZShlbmljKTtcbitcdFx0fVxuK1xuIFx0XHR1bnJlZ2lzdGVyX25ldGRldihuZXRkZXYpO1xuLVx0XHRlbmljX2Rldl9kZWluaXQoZW5pYyk7XG4tXHRcdHZuaWNfZGV2X2Nsb3NlKGVuaWMtXHUwMDNldmRldik7XG4rXHRcdC8qIHVucmVnaXN0ZXJfbmV0ZGV2KCkgLVx1MDAzZSBlbmljX3N0b3AoKSBzdG9wcyB0aGUgbm90aWZ5IHRpbWVyLCBzb1xuK1x0XHQgKiBubyBuZXcgbGlua19ub3RpZnlfd29yayBjYW4gYmUgcXVldWVkIHBhc3QgdGhpcyBwb2ludC4gIENhbmNlbFxuK1x0XHQgKiB1bmNvbmRpdGlvbmFsbHkgdG8gY292ZXIgdGhlIG5hcnJvdyB3aW5kb3cgd2hlcmVcbitcdFx0ICogZW5pY19saW5rX2NoZWNrKCkgc2NoZWR1bGVkIGl0IGp1c3QgYXMgU1ItSU9WIHdhcyBkaXNhYmxlZC5cbitcdFx0ICovXG4rXHRcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2ZW5pYy1cdTAwM2VsaW5rX25vdGlmeV93b3JrKTtcbiAjaWZkZWYgQ09ORklHX1BDSV9JT1ZcbiBcdFx0aWYgKGVuaWNfc3Jpb3ZfZW5hYmxlZChlbmljKSkge1xuLVx0XHRcdHBjaV9kaXNhYmxlX3NyaW92KHBkZXYpO1xuLVx0XHRcdGVuaWMtXHUwMDNlcHJpdl9mbGFncyBcdTAwMjY9IH5FTklDX1NSSU9WX0VOQUJMRUQ7XG4rXHRcdFx0aWYgKGVuaWMtXHUwMDNldmZfdHlwZSA9PSBFTklDX1ZGX1RZUEVfVjIpXG4rXHRcdFx0XHRlbmljX3NyaW92X3YyX2Rpc2FibGUoZW5pYyk7XG4rXHRcdFx0ZWxzZVxuK1x0XHRcdFx0cGNpX2Rpc2FibGVfc3Jpb3YocGRldik7XG4gXHRcdH1cbiAjZW5kaWZcbitcdFx0ZW5pY19kZXZfZGVpbml0KGVuaWMpO1xuK1x0XHR2bmljX2Rldl9jbG9zZShlbmljLVx1MDAzZXZkZXYpO1xuIFx0XHRrZnJlZShlbmljLVx1MDAzZXBwKTtcbiBcdFx0dm5pY19kZXZfdW5yZWdpc3RlcihlbmljLVx1MDAzZXZkZXYpO1xuIFx0XHRlbmljX2lvdW5tYXAoZW5pYyk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21ib3guYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19tYm94LmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uNWNkYWY1YTBlNTI0Njdcbi0tLSAvZGV2L251bGxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19tYm94LmNcbkBAIC0wLDAgKzEsNjQwIEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuKy8vIENvcHlyaWdodCAyMDI1IENpc2NvIFN5c3RlbXMsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4rXG4rI2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2RtYS1tYXBwaW5nLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9kZWxheS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvY29tcGxldGlvbi5oXHUwMDNlXG4rXG4rI2luY2x1ZGUgXCJ2bmljX2Rldi5oXCJcbisjaW5jbHVkZSBcInZuaWNfd3EuaFwiXG4rI2luY2x1ZGUgXCJ2bmljX2NxLmhcIlxuKyNpbmNsdWRlIFwiZW5pYy5oXCJcbisjaW5jbHVkZSBcImVuaWNfYWRtaW4uaFwiXG4rI2luY2x1ZGUgXCJlbmljX21ib3guaFwiXG4rI2luY2x1ZGUgXCJ3cV9lbmV0X2Rlc2MuaFwiXG4rXG4rI2RlZmluZSBFTklDX01CT1hfUE9MTF9USU1FT1VUX1VTXHQ1MDAwMDAwXG4rI2RlZmluZSBFTklDX01CT1hfUE9MTF9JTlRFUlZBTF9VU1x0MTAwXG4rXG4rc3RhdGljIHZvaWQgZW5pY19tYm94X2ZpbGxfaGRyKHN0cnVjdCBlbmljICplbmljLCBzdHJ1Y3QgZW5pY19tYm94X2hkciAqaGRyLFxuK1x0XHRcdCAgICAgICB1OCBtc2dfdHlwZSwgdTE2IGRzdF92bmljX2lkLCB1MTYgbXNnX2xlbilcbit7XG4rXHRtZW1zZXQoaGRyLCAwLCBzaXplb2YoKmhkcikpO1xuK1x0aGRyLVx1MDAzZWRzdF92bmljX2lkID0gY3B1X3RvX2xlMTYoZHN0X3ZuaWNfaWQpO1xuK1x0aGRyLVx1MDAzZW1zZ190eXBlID0gbXNnX3R5cGU7XG4rXHRoZHItXHUwMDNlbXNnX2xlbiA9IGNwdV90b19sZTE2KG1zZ19sZW4pO1xuK1x0aGRyLVx1MDAzZW1zZ19udW0gPSBjcHVfdG9fbGU2NCgrK2VuaWMtXHUwMDNlbWJveF9tc2dfbnVtKTtcbit9XG4rXG4raW50IGVuaWNfbWJveF9zZW5kX21zZyhzdHJ1Y3QgZW5pYyAqZW5pYywgdTggbXNnX3R5cGUsIHUxNiBkc3Rfdm5pY19pZCxcbitcdFx0ICAgICAgIHZvaWQgKnBheWxvYWQsIHUxNiBwYXlsb2FkX2xlbilcbit7XG4rXHR1MTYgdG90YWxfbGVuID0gc2l6ZW9mKHN0cnVjdCBlbmljX21ib3hfaGRyKSArIHBheWxvYWRfbGVuO1xuK1x0c3RydWN0IHZuaWNfd3EgKndxID0gXHUwMDI2ZW5pYy1cdTAwM2VhZG1pbl93cTtcbitcdHN0cnVjdCB3cV9lbmV0X2Rlc2MgKmRlc2M7XG4rXHR1bnNpZ25lZCBsb25nIHRpbWVvdXQ7XG4rXHRkbWFfYWRkcl90IGRtYV9hZGRyO1xuK1x0dTE2IHZsYW5fdGFnO1xuK1x0dm9pZCAqYnVmO1xuK1x0aW50IGVycjtcbitcbitcdC8qIFNlcmlhbGl6ZSBNQk9YIHNlbmRzLiBUaGUgYWRtaW4gY2hhbm5lbCBpcyBhIGxvdy1mcmVxdWVuY3lcbitcdCAqIGNvbnRyb2wgcGF0aDsgaG9sZGluZyB0aGUgbXV0ZXggYWNyb3NzIHRoZSBwb2xsIGlzIGFjY2VwdGFibGUuXG4rXHQgKi9cbitcdG11dGV4X2xvY2soXHUwMDI2ZW5pYy1cdTAwM2VtYm94X2xvY2spO1xuK1xuK1x0aWYgKCFlbmljLVx1MDAzZWhhc19hZG1pbl9jaGFubmVsIHx8IFJFQURfT05DRShlbmljLVx1MDAzZW1ib3hfc2VuZF9kaXNhYmxlZCkpIHtcbitcdFx0ZXJyID0gLUVOT0RFVjtcbitcdFx0Z290byB1bmxvY2s7XG4rXHR9XG4rXG4rXHRpZiAodm5pY193cV9kZXNjX2F2YWlsKHdxKSA9PSAwKSB7XG4rXHRcdGVyciA9IC1FTk9TUEM7XG4rXHRcdGdvdG8gdW5sb2NrO1xuK1x0fVxuK1xuK1x0YnVmID0ga21hbGxvYyh0b3RhbF9sZW4sIEdGUF9LRVJORUwpO1xuK1x0aWYgKCFidWYpIHtcbitcdFx0ZXJyID0gLUVOT01FTTtcbitcdFx0Z290byB1bmxvY2s7XG4rXHR9XG4rXG4rXHRlbmljX21ib3hfZmlsbF9oZHIoZW5pYywgYnVmLCBtc2dfdHlwZSwgZHN0X3ZuaWNfaWQsIHRvdGFsX2xlbik7XG4rXHRpZiAocGF5bG9hZF9sZW4pIHtcbitcdFx0dm9pZCAqZHN0ID0gYnVmICsgc2l6ZW9mKHN0cnVjdCBlbmljX21ib3hfaGRyKTtcbitcbitcdFx0bWVtY3B5KGRzdCwgcGF5bG9hZCwgcGF5bG9hZF9sZW4pO1xuK1x0fVxuK1xuK1x0ZG1hX2FkZHIgPSBkbWFfbWFwX3NpbmdsZShcdTAwMjZlbmljLVx1MDAzZXBkZXYtXHUwMDNlZGV2LCBidWYsIHRvdGFsX2xlbixcbitcdFx0XHRcdCAgRE1BX1RPX0RFVklDRSk7XG4rXHRpZiAoZG1hX21hcHBpbmdfZXJyb3IoXHUwMDI2ZW5pYy1cdTAwM2VwZGV2LVx1MDAzZWRldiwgZG1hX2FkZHIpKSB7XG4rXHRcdGtmcmVlKGJ1Zik7XG4rXHRcdGVyciA9IC1FTk9NRU07XG4rXHRcdGdvdG8gdW5sb2NrO1xuK1x0fVxuK1xuK1x0LyogRmlybXdhcmUgdXNlcyB2bGFuIGZpZWxkIGZvciByb3V0aW5nOiAwID0gUEYsIDEtYmFzZWQgPSBWRiBpbmRleCAqL1xuK1x0aWYgKGRzdF92bmljX2lkID09IEVOSUNfTUJPWF9EU1RfUEYpXG4rXHRcdHZsYW5fdGFnID0gMDtcbitcdGVsc2VcbitcdFx0dmxhbl90YWcgPSBkc3Rfdm5pY19pZCArIDE7XG4rXG4rXHRkZXNjID0gdm5pY193cV9uZXh0X2Rlc2Mod3EpO1xuK1x0d3FfZW5ldF9kZXNjX2VuYyhkZXNjLCAodTY0KWRtYV9hZGRyIHwgVk5JQ19QQUREUl9UQVJHRVQsXG4rXHRcdFx0IHRvdGFsX2xlbixcbitcdFx0XHQgMCwgMCwgMCwgICAgICAgLyogbXNzLCBoZHJfbGVuLCBvZmZsb2FkX21vZGUgKi9cbitcdFx0XHQgMSwgMSwgICAgICAgICAgLyogZW9wLCBjcV9lbnRyeSAqL1xuK1x0XHRcdCAwLCAgICAgICAgICAgICAvKiBmY29lX2VuY2FwICovXG4rXHRcdFx0IDEsIHZsYW5fdGFnLCAgIC8qIHZsYW5fdGFnX2luc2VydCwgdmxhbl90YWcgKi9cbitcdFx0XHQgMCk7ICAgICAgICAgICAgLyogbG9vcGJhY2sgKi9cbitcdHZuaWNfd3FfcG9zdCh3cSwgYnVmLCBkbWFfYWRkciwgdG90YWxfbGVuLFxuK1x0XHQgICAgIDEsIDEsICAgICAgICAgICAgICAvKiBzb3AsIGVvcCAqL1xuK1x0XHQgICAgIDEsIDEsICAgICAgICAgICAgICAvKiBkZXNjX3NraXBfY250LCBjcV9lbnRyeSAqL1xuK1x0XHQgICAgIDAsIDApOyAgICAgICAgICAgICAvKiBjb21wcmVzc2VkX3NlbmQsIHdyaWQgKi9cbitcdHZuaWNfd3FfZG9vcmJlbGwod3EpO1xuK1xuK1x0dGltZW91dCA9IGppZmZpZXMgKyB1c2Vjc190b19qaWZmaWVzKEVOSUNfTUJPWF9QT0xMX1RJTUVPVVRfVVMpO1xuK1x0ZXJyID0gLUVUSU1FRE9VVDtcbitcdHdoaWxlICh0aW1lX2JlZm9yZShqaWZmaWVzLCB0aW1lb3V0KSkge1xuK1x0XHRpZiAoZW5pY19hZG1pbl93cV9jcV9zZXJ2aWNlKGVuaWMpKSB7XG4rXHRcdFx0ZXJyID0gMDtcbitcdFx0XHRicmVhaztcbitcdFx0fVxuK1x0XHR1c2xlZXBfcmFuZ2UoRU5JQ19NQk9YX1BPTExfSU5URVJWQUxfVVMsXG4rXHRcdFx0ICAgICBFTklDX01CT1hfUE9MTF9JTlRFUlZBTF9VUyArIDUwKTtcbitcdH1cbitcdC8qIEZpbmFsIGNoZWNrIGluIGNhc2UgY29tcGxldGlvbiBhcnJpdmVkIGR1cmluZyB0aGUgbGFzdCBzbGVlcCAqL1xuK1x0aWYgKGVyciBcdTAwMjZcdTAwMjYgZW5pY19hZG1pbl93cV9jcV9zZXJ2aWNlKGVuaWMpKVxuK1x0XHRlcnIgPSAwO1xuK1xuK1x0aWYgKCFlcnIpIHtcbitcdFx0d3EtXHUwMDNldG9fY2xlYW4gPSB3cS1cdTAwM2V0b19jbGVhbi1cdTAwM2VuZXh0O1xuK1x0XHR3cS1cdTAwM2VyaW5nLmRlc2NfYXZhaWwrKztcbitcdFx0ZG1hX3VubWFwX3NpbmdsZShcdTAwMjZlbmljLVx1MDAzZXBkZXYtXHUwMDNlZGV2LCBkbWFfYWRkciwgdG90YWxfbGVuLFxuK1x0XHRcdFx0IERNQV9UT19ERVZJQ0UpO1xuK1x0XHRrZnJlZShidWYpO1xuK1x0fSBlbHNlIHtcbitcdFx0bmV0ZGV2X2VycihlbmljLVx1MDAzZW5ldGRldixcbitcdFx0XHQgICBcIk1CT1ggc2VuZCB0aW1lZCBvdXQgKHR5cGUgJXUgZHN0ICV1KSwgZGlzYWJsaW5nIGNoYW5uZWxcXG5cIixcbitcdFx0XHQgICBtc2dfdHlwZSwgZHN0X3ZuaWNfaWQpO1xuK1x0XHQvKlxuK1x0XHQgKiBUaGUgV1EgZGVzY3JpcHRvciBpcyBzdGlsbCBsaXZlIGluIGhhcmR3YXJlLiBEbyBub3QgdW5tYXBcbitcdFx0ICogb3IgZnJlZSB0aGUgYnVmZmVyOiB0aGUgZGV2aWNlIG1heSBzdGlsbCBETUEgZnJvbSBkbWFfYWRkci5cbitcdFx0ICogTWFyayB0aGUgY2hhbm5lbCB1bnVzYWJsZSBzbyBubyBmdXJ0aGVyIHNlbmRzIGFyZSBhdHRlbXB0ZWQuXG4rXHRcdCAqL1xuK1x0XHRXUklURV9PTkNFKGVuaWMtXHUwMDNlbWJveF9zZW5kX2Rpc2FibGVkLCB0cnVlKTtcbitcdH1cbitcbitcdG5ldGRldl9kYmcoZW5pYy1cdTAwM2VuZXRkZXYsXG4rXHRcdCAgIFwiTUJPWCBzZW5kIG1zZ190eXBlICV1IGRzdCAldSB2bGFuICV1IGVyciAlZFxcblwiLFxuK1x0XHQgICBtc2dfdHlwZSwgZHN0X3ZuaWNfaWQsIHZsYW5fdGFnLCBlcnIpO1xuK3VubG9jazpcbitcdG11dGV4X3VubG9jayhcdTAwMjZlbmljLVx1MDAzZW1ib3hfbG9jayk7XG4rXHRyZXR1cm4gZXJyO1xuK31cbitcbitzdGF0aWMgaW50IGVuaWNfbWJveF93YWl0X3JlcGx5KHN0cnVjdCBlbmljICplbmljLCB1bnNpZ25lZCBsb25nIHRpbWVvdXRfbXMpXG4re1xuK1x0dW5zaWduZWQgbG9uZyBsZWZ0O1xuK1xuK1x0bGVmdCA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dChcdTAwMjZlbmljLVx1MDAzZW1ib3hfY29tcCxcbitcdFx0XHRcdFx0ICAgbXNlY3NfdG9famlmZmllcyh0aW1lb3V0X21zKSk7XG4rXG4rXHRyZXR1cm4gbGVmdCA/IDAgOiAtRVRJTUVET1VUO1xuK31cbitcbitpbnQgZW5pY19tYm94X3NlbmRfbGlua19zdGF0ZShzdHJ1Y3QgZW5pYyAqZW5pYywgdTE2IHZmX2lkLCB1MzIgbGlua19zdGF0ZSlcbit7XG4rXHRzdHJ1Y3QgZW5pY19tYm94X3BmX2xpbmtfc3RhdGVfbm90aWZfbXNnIG5vdGlmID0ge307XG4rXG4rXHRpZiAoIWVuaWMtXHUwMDNldmZfc3RhdGUgfHwgdmZfaWQgXHUwMDNlPSBlbmljLVx1MDAzZW51bV92ZnMgfHxcbitcdCAgICAhZW5pYy1cdTAwM2V2Zl9zdGF0ZVt2Zl9pZF0ucmVnaXN0ZXJlZCkge1xuK1x0XHRuZXRkZXZfZGJnKGVuaWMtXHUwMDNlbmV0ZGV2LFxuK1x0XHRcdCAgIFwiTUJPWDogc2tpcCBsaW5rIHN0YXRlIHRvIHVucmVnaXN0ZXJlZCBWRiAldVxcblwiLFxuK1x0XHRcdCAgIHZmX2lkKTtcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4rXHRub3RpZi5saW5rX3N0YXRlID0gY3B1X3RvX2xlMzIobGlua19zdGF0ZSk7XG4rXHRyZXR1cm4gZW5pY19tYm94X3NlbmRfbXNnKGVuaWMsIEVOSUNfTUJPWF9QRl9MSU5LX1NUQVRFX05PVElGLCB2Zl9pZCxcbitcdFx0XHRcdCAgXHUwMDI2bm90aWYsIHNpemVvZihub3RpZikpO1xuK31cbitcbitzdGF0aWMgaW50IGVuaWNfbWJveF9wZl9oYW5kbGVfY2FwYWJpbGl0eShzdHJ1Y3QgZW5pYyAqZW5pYywgdm9pZCAqbXNnLFxuK1x0XHRcdFx0XHQgIHUxNiB2Zl9pZCwgdTY0IG1zZ19udW0pXG4re1xuK1x0c3RydWN0IGVuaWNfbWJveF92Zl9jYXBhYmlsaXR5X3JlcGx5X21zZyByZXBseSA9IHt9O1xuK1xuK1x0cmVwbHkucmVwbHkucmV0X21ham9yID0gY3B1X3RvX2xlMTYoMCk7XG4rXHRyZXBseS52ZXJzaW9uID0gY3B1X3RvX2xlMzIoRU5JQ19NQk9YX0NBUF9WRVJTSU9OXzEpO1xuK1xuK1x0cmV0dXJuIGVuaWNfbWJveF9zZW5kX21zZyhlbmljLCBFTklDX01CT1hfVkZfQ0FQQUJJTElUWV9SRVBMWSwgdmZfaWQsXG4rXHRcdFx0XHQgIFx1MDAyNnJlcGx5LCBzaXplb2YocmVwbHkpKTtcbit9XG4rXG4rc3RhdGljIGludCBlbmljX21ib3hfcGZfaGFuZGxlX3JlZ2lzdGVyKHN0cnVjdCBlbmljICplbmljLCB2b2lkICptc2csXG4rXHRcdFx0XHRcdHUxNiB2Zl9pZCwgdTY0IG1zZ19udW0pXG4re1xuK1x0c3RydWN0IGVuaWNfbWJveF92Zl9yZWdpc3Rlcl9yZXBseV9tc2cgcmVwbHkgPSB7fTtcbitcdHUzMiBsaW5rX3N0YXRlO1xuK1x0aW50IGVycjtcbitcbitcdGlmICghZW5pYy1cdTAwM2V2Zl9zdGF0ZSB8fCB2Zl9pZCBcdTAwM2U9IGVuaWMtXHUwMDNlbnVtX3Zmcykge1xuK1x0XHRpZiAobmV0X3JhdGVsaW1pdCgpKVxuK1x0XHRcdG5ldGRldl93YXJuKGVuaWMtXHUwMDNlbmV0ZGV2LFxuK1x0XHRcdFx0ICAgIFwiTUJPWDogcmVnaXN0ZXIgZnJvbSBpbnZhbGlkIFZGICV1XFxuXCIsXG4rXHRcdFx0XHQgICAgdmZfaWQpO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcbitcdC8qIFZGIHJlLXJlZ2lzdGVyaW5nIChlLmcuIGd1ZXN0IHJlYm9vdCB3aXRob3V0IGNsZWFuIHVucmVnaXN0ZXIpOlxuK1x0ICogbWFyayB0aGUgcHJldmlvdXMgcmVnaXN0cmF0aW9uIGluYWN0aXZlIGJlZm9yZSBhY2NlcHRpbmcgdGhlIG5ldyBvbmUuXG4rXHQgKi9cbitcdGlmIChlbmljLVx1MDAzZXZmX3N0YXRlW3ZmX2lkXS5yZWdpc3RlcmVkKSB7XG4rXHRcdG5ldGRldl9kYmcoZW5pYy1cdTAwM2VuZXRkZXYsXG4rXHRcdFx0ICAgXCJNQk9YOiBWRiAldSByZS1yZWdpc3RlciwgY2xlYW5pbmcgcHJldmlvdXMgc3RhdGVcXG5cIixcbitcdFx0XHQgICB2Zl9pZCk7XG4rXHRcdGVuaWMtXHUwMDNldmZfc3RhdGVbdmZfaWRdLnJlZ2lzdGVyZWQgPSBmYWxzZTtcbitcdH1cbitcbitcdHJlcGx5LnJlcGx5LnJldF9tYWpvciA9IGNwdV90b19sZTE2KDApO1xuK1x0ZXJyID0gZW5pY19tYm94X3NlbmRfbXNnKGVuaWMsIEVOSUNfTUJPWF9WRl9SRUdJU1RFUl9SRVBMWSwgdmZfaWQsXG4rXHRcdFx0XHQgXHUwMDI2cmVwbHksIHNpemVvZihyZXBseSkpO1xuK1x0aWYgKGVycilcbitcdFx0cmV0dXJuIGVycjtcbitcbitcdGVuaWMtXHUwMDNldmZfc3RhdGVbdmZfaWRdLnJlZ2lzdGVyZWQgPSB0cnVlO1xuK1x0aWYgKG5ldF9yYXRlbGltaXQoKSlcbitcdFx0bmV0ZGV2X2luZm8oZW5pYy1cdTAwM2VuZXRkZXYsIFwiVkYgJXUgcmVnaXN0ZXJlZCB2aWEgTUJPWFxcblwiLCB2Zl9pZCk7XG4rXG4rXHRsaW5rX3N0YXRlID0gbmV0aWZfY2Fycmllcl9vayhlbmljLVx1MDAzZW5ldGRldikgP1xuK1x0XHRFTklDX01CT1hfTElOS19TVEFURV9FTkFCTEUgOlxuK1x0XHRFTklDX01CT1hfTElOS19TVEFURV9ESVNBQkxFO1xuK1x0ZXJyID0gZW5pY19tYm94X3NlbmRfbGlua19zdGF0ZShlbmljLCB2Zl9pZCwgbGlua19zdGF0ZSk7XG4rXHRpZiAoZXJyIFx1MDAyNlx1MDAyNiBuZXRfcmF0ZWxpbWl0KCkpXG4rXHRcdG5ldGRldl93YXJuKGVuaWMtXHUwMDNlbmV0ZGV2LFxuK1x0XHRcdCAgICBcIlZGICV1OiBmYWlsZWQgdG8gc2VuZCBpbml0aWFsIGxpbmsgc3RhdGU6ICVkXFxuXCIsXG4rXHRcdFx0ICAgIHZmX2lkLCBlcnIpO1xuK1x0LyogUmVnaXN0cmF0aW9uIHN1Y2NlZWRlZDsgaW5pdGlhbCBsaW5rIHN0YXRlIG5vdGlmaWNhdGlvbiBzZW50XG4rXHQgKiBhYm92ZS4gIFN1YnNlcXVlbnQgbGluayBzdGF0ZSBjaGFuZ2VzIGFyZSBzZW50IGZyb20gdGhlIFBGXG4rXHQgKiB3aGVuIGVuaWNfbGlua19jaGVjaygpIGRldGVjdHMgY2FycmllciBjaGFuZ2VzLlxuK1x0ICovXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBlbmljX21ib3hfcGZfaGFuZGxlX3VucmVnaXN0ZXIoc3RydWN0IGVuaWMgKmVuaWMsIHZvaWQgKm1zZyxcbitcdFx0XHRcdFx0ICB1MTYgdmZfaWQsIHU2NCBtc2dfbnVtKVxuK3tcbitcdHN0cnVjdCBlbmljX21ib3hfdmZfcmVnaXN0ZXJfcmVwbHlfbXNnIHJlcGx5ID0ge307XG4rXHRpbnQgZXJyO1xuK1xuK1x0aWYgKCFlbmljLVx1MDAzZXZmX3N0YXRlIHx8IHZmX2lkIFx1MDAzZT0gZW5pYy1cdTAwM2VudW1fdmZzKSB7XG4rXHRcdGlmIChuZXRfcmF0ZWxpbWl0KCkpXG4rXHRcdFx0bmV0ZGV2X3dhcm4oZW5pYy1cdTAwM2VuZXRkZXYsXG4rXHRcdFx0XHQgICAgXCJNQk9YOiB1bnJlZ2lzdGVyIGZyb20gaW52YWxpZCBWRiAldVxcblwiLFxuK1x0XHRcdFx0ICAgIHZmX2lkKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXG4rXHQvKiBWRiBpcyB1bmxvYWRpbmc7IGNsZWFyIGxvY2FsIHN0YXRlIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlclxuK1x0ICogdGhlIHJlcGx5IGlzIHN1Y2Nlc3NmdWxseSBkZWxpdmVyZWQgdG8gYXZvaWQgdGhlIFBGIHRyZWF0aW5nXG4rXHQgKiBhIGRlYWQgVkYgYXMgc3RpbGwgcmVnaXN0ZXJlZC5cbitcdCAqL1xuK1x0ZW5pYy1cdTAwM2V2Zl9zdGF0ZVt2Zl9pZF0ucmVnaXN0ZXJlZCA9IGZhbHNlO1xuK1xuK1x0cmVwbHkucmVwbHkucmV0X21ham9yID0gY3B1X3RvX2xlMTYoMCk7XG4rXHRlcnIgPSBlbmljX21ib3hfc2VuZF9tc2coZW5pYywgRU5JQ19NQk9YX1ZGX1VOUkVHSVNURVJfUkVQTFksIHZmX2lkLFxuK1x0XHRcdFx0IFx1MDAyNnJlcGx5LCBzaXplb2YocmVwbHkpKTtcbitcbitcdGlmIChuZXRfcmF0ZWxpbWl0KCkpXG4rXHRcdG5ldGRldl9pbmZvKGVuaWMtXHUwMDNlbmV0ZGV2LFxuK1x0XHRcdCAgICBcIlZGICV1IHVucmVnaXN0ZXJlZCB2aWEgTUJPWFxcblwiLCB2Zl9pZCk7XG4rXG4rXHRyZXR1cm4gZXJyO1xuK31cbitcbitzdGF0aWMgdm9pZCBlbmljX21ib3hfcGZfcHJvY2Vzc19tc2coc3RydWN0IGVuaWMgKmVuaWMsXG4rXHRcdFx0XHQgICAgIHN0cnVjdCBlbmljX21ib3hfaGRyICpoZHIsIHZvaWQgKnBheWxvYWQpXG4re1xuK1x0dTE2IHZmX2lkID0gbGUxNl90b19jcHUoaGRyLVx1MDAzZXNyY192bmljX2lkKTtcbitcdHUxNiBtc2dfbGVuID0gbGUxNl90b19jcHUoaGRyLVx1MDAzZW1zZ19sZW4pO1xuK1x0aW50IGVyciA9IDA7XG4rXG4rXHRpZiAoIWVuaWMtXHUwMDNldmZfc3RhdGUpIHtcbitcdFx0bmV0ZGV2X2RiZyhlbmljLVx1MDAzZW5ldGRldixcbitcdFx0XHQgICBcIk1CT1g6IFBGIHJlY2VpdmVkIG1zZyBidXQgU1JJT1Ygbm90IGFjdGl2ZVxcblwiKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0aWYgKHZmX2lkIFx1MDAzZT0gZW5pYy1cdTAwM2VudW1fdmZzKSB7XG4rXHRcdGlmIChuZXRfcmF0ZWxpbWl0KCkpXG4rXHRcdFx0bmV0ZGV2X3dhcm4oZW5pYy1cdTAwM2VuZXRkZXYsXG4rXHRcdFx0XHQgICAgXCJNQk9YOiBQRiByZWNlaXZlZCBtc2cgZnJvbSBpbnZhbGlkIFZGICV1XFxuXCIsXG4rXHRcdFx0XHQgICAgdmZfaWQpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHRzd2l0Y2ggKGhkci1cdTAwM2Vtc2dfdHlwZSkge1xuK1x0Y2FzZSBFTklDX01CT1hfVkZfQ0FQQUJJTElUWV9SRVFVRVNUOlxuK1x0XHRlcnIgPSBlbmljX21ib3hfcGZfaGFuZGxlX2NhcGFiaWxpdHkoZW5pYywgcGF5bG9hZCwgdmZfaWQsXG4rXHRcdFx0XHRcdFx0ICAgICBsZTY0X3RvX2NwdShoZHItXHUwMDNlbXNnX251bSkpO1xuK1x0XHRicmVhaztcbitcdGNhc2UgRU5JQ19NQk9YX1ZGX1JFR0lTVEVSX1JFUVVFU1Q6XG4rXHRcdGVyciA9IGVuaWNfbWJveF9wZl9oYW5kbGVfcmVnaXN0ZXIoZW5pYywgcGF5bG9hZCwgdmZfaWQsXG4rXHRcdFx0XHRcdFx0ICAgbGU2NF90b19jcHUoaGRyLVx1MDAzZW1zZ19udW0pKTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIEVOSUNfTUJPWF9WRl9VTlJFR0lTVEVSX1JFUVVFU1Q6XG4rXHRcdGVyciA9IGVuaWNfbWJveF9wZl9oYW5kbGVfdW5yZWdpc3RlcihlbmljLCBwYXlsb2FkLCB2Zl9pZCxcbitcdFx0XHRcdFx0XHQgICAgIGxlNjRfdG9fY3B1KGhkci1cdTAwM2Vtc2dfbnVtKSk7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBFTklDX01CT1hfUEZfTElOS19TVEFURV9BQ0s6IHtcbitcdFx0c3RydWN0IGVuaWNfbWJveF9wZl9saW5rX3N0YXRlX2Fja19tc2cgKmFjayA9IHBheWxvYWQ7XG4rXG4rXHRcdGlmIChtc2dfbGVuIFx1MDAzYyBzaXplb2YoKmhkcikgKyBzaXplb2YoKmFjaykpXG4rXHRcdFx0YnJlYWs7XG4rXHRcdGlmIChsZTE2X3RvX2NwdShhY2stXHUwMDNlYWNrLnJldF9tYWpvcikgXHUwMDI2XHUwMDI2IG5ldF9yYXRlbGltaXQoKSlcbitcdFx0XHRuZXRkZXZfd2FybihlbmljLVx1MDAzZW5ldGRldixcbitcdFx0XHRcdCAgICBcIk1CT1g6IFZGICV1IGxpbmsgc3RhdGUgQUNLIGVycm9yICV1LyV1XFxuXCIsXG4rXHRcdFx0XHQgICAgdmZfaWQsXG4rXHRcdFx0XHQgICAgbGUxNl90b19jcHUoYWNrLVx1MDAzZWFjay5yZXRfbWFqb3IpLFxuK1x0XHRcdFx0ICAgIGxlMTZfdG9fY3B1KGFjay1cdTAwM2VhY2sucmV0X21pbm9yKSk7XG4rXHRcdGJyZWFrO1xuK1x0fVxuK1x0ZGVmYXVsdDpcbitcdFx0bmV0ZGV2X2RiZyhlbmljLVx1MDAzZW5ldGRldixcbitcdFx0XHQgICBcIk1CT1g6IFBGIHVuaGFuZGxlZCBtc2cgdHlwZSAldSBmcm9tIFZGICV1XFxuXCIsXG4rXHRcdFx0ICAgaGRyLVx1MDAzZW1zZ190eXBlLCB2Zl9pZCk7XG4rXHRcdGVyciA9IC1FT1BOT1RTVVBQO1xuK1x0XHRicmVhaztcbitcdH1cbitcbitcdGlmIChlcnIgXHUwMDI2XHUwMDI2IG5ldF9yYXRlbGltaXQoKSlcbitcdFx0bmV0ZGV2X3dhcm4oZW5pYy1cdTAwM2VuZXRkZXYsXG4rXHRcdFx0ICAgIFwiTUJPWDogUEYgaGFuZGxlciBmb3IgbXNnIHR5cGUgJXUgZnJvbSBWRiAldSBmYWlsZWQ6ICVkXFxuXCIsXG4rXHRcdFx0ICAgIGhkci1cdTAwM2Vtc2dfdHlwZSwgdmZfaWQsIGVycik7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGVuaWNfbWJveF92Zl9oYW5kbGVfY2FwYWJpbGl0eV9yZXBseShzdHJ1Y3QgZW5pYyAqZW5pYyxcbitcdFx0XHRcdFx0XHQgdm9pZCAqcGF5bG9hZClcbit7XG4rXHRzdHJ1Y3QgZW5pY19tYm94X3ZmX2NhcGFiaWxpdHlfcmVwbHlfbXNnICpyZXBseSA9IHBheWxvYWQ7XG4rXG4rXHRpZiAoZW5pYy1cdTAwM2VtYm94X2V4cGVjdGVkX3JlcGx5ICE9IEVOSUNfTUJPWF9WRl9DQVBBQklMSVRZX1JFUExZKSB7XG4rXHRcdG5ldGRldl93YXJuKGVuaWMtXHUwMDNlbmV0ZGV2LFxuK1x0XHRcdCAgICBcIk1CT1g6IHN0YWxlIGNhcGFiaWxpdHkgcmVwbHkgKGV4cGVjdGVkICV1KSwgZHJvcFxcblwiLFxuK1x0XHRcdCAgICBlbmljLVx1MDAzZW1ib3hfZXhwZWN0ZWRfcmVwbHkpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHRpZiAobGUxNl90b19jcHUocmVwbHktXHUwMDNlcmVwbHkucmV0X21ham9yKSA9PSAwKVxuK1x0XHRlbmljLVx1MDAzZXBmX2NhcF92ZXJzaW9uID0gbGUzMl90b19jcHUocmVwbHktXHUwMDNldmVyc2lvbik7XG4rXHRlbHNlXG4rXHRcdG5ldGRldl93YXJuKGVuaWMtXHUwMDNlbmV0ZGV2LFxuK1x0XHRcdCAgICBcIk1CT1g6IFBGIHJlamVjdGVkIGNhcGFiaWxpdHkgcmVxdWVzdDogJXUvJXVcXG5cIixcbitcdFx0XHQgICAgbGUxNl90b19jcHUocmVwbHktXHUwMDNlcmVwbHkucmV0X21ham9yKSxcbitcdFx0XHQgICAgbGUxNl90b19jcHUocmVwbHktXHUwMDNlcmVwbHkucmV0X21pbm9yKSk7XG4rXHRjb21wbGV0ZShcdTAwMjZlbmljLVx1MDAzZW1ib3hfY29tcCk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGVuaWNfbWJveF92Zl9oYW5kbGVfcmVnaXN0ZXJfcmVwbHkoc3RydWN0IGVuaWMgKmVuaWMsXG4rXHRcdFx0XHRcdCAgICAgICB2b2lkICpwYXlsb2FkKVxuK3tcbitcdHN0cnVjdCBlbmljX21ib3hfdmZfcmVnaXN0ZXJfcmVwbHlfbXNnICpyZXBseSA9IHBheWxvYWQ7XG4rXG4rXHRpZiAoZW5pYy1cdTAwM2VtYm94X2V4cGVjdGVkX3JlcGx5ICE9IEVOSUNfTUJPWF9WRl9SRUdJU1RFUl9SRVBMWSkge1xuK1x0XHRuZXRkZXZfd2FybihlbmljLVx1MDAzZW5ldGRldixcbitcdFx0XHQgICAgXCJNQk9YOiBzdGFsZSByZWdpc3RlciByZXBseSAoZXhwZWN0ZWQgJXUpLCBkcm9wXFxuXCIsXG4rXHRcdFx0ICAgIGVuaWMtXHUwMDNlbWJveF9leHBlY3RlZF9yZXBseSk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdGlmIChsZTE2X3RvX2NwdShyZXBseS1cdTAwM2VyZXBseS5yZXRfbWFqb3IpKSB7XG4rXHRcdG5ldGRldl93YXJuKGVuaWMtXHUwMDNlbmV0ZGV2LFxuK1x0XHRcdCAgICBcIk1CT1g6IFZGIHJlZ2lzdGVyIHJlamVjdGVkIGJ5IFBGOiAldS8ldVxcblwiLFxuK1x0XHRcdCAgICBsZTE2X3RvX2NwdShyZXBseS1cdTAwM2VyZXBseS5yZXRfbWFqb3IpLFxuK1x0XHRcdCAgICBsZTE2X3RvX2NwdShyZXBseS1cdTAwM2VyZXBseS5yZXRfbWlub3IpKTtcbitcdH0gZWxzZSB7XG4rXHRcdGVuaWMtXHUwMDNldmZfcmVnaXN0ZXJlZCA9IHRydWU7XG4rXHR9XG4rXHRjb21wbGV0ZShcdTAwMjZlbmljLVx1MDAzZW1ib3hfY29tcCk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGVuaWNfbWJveF92Zl9oYW5kbGVfdW5yZWdpc3Rlcl9yZXBseShzdHJ1Y3QgZW5pYyAqZW5pYyxcbitcdFx0XHRcdFx0XHQgdm9pZCAqcGF5bG9hZClcbit7XG4rXHRzdHJ1Y3QgZW5pY19tYm94X3ZmX3JlZ2lzdGVyX3JlcGx5X21zZyAqcmVwbHkgPSBwYXlsb2FkO1xuK1xuK1x0aWYgKGVuaWMtXHUwMDNlbWJveF9leHBlY3RlZF9yZXBseSAhPSBFTklDX01CT1hfVkZfVU5SRUdJU1RFUl9SRVBMWSkge1xuK1x0XHRuZXRkZXZfd2FybihlbmljLVx1MDAzZW5ldGRldixcbitcdFx0XHQgICAgXCJNQk9YOiBzdGFsZSB1bnJlZ2lzdGVyIHJlcGx5IChleHBlY3RlZCAldSksIGRyb3BcXG5cIixcbitcdFx0XHQgICAgZW5pYy1cdTAwM2VtYm94X2V4cGVjdGVkX3JlcGx5KTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0aWYgKGxlMTZfdG9fY3B1KHJlcGx5LVx1MDAzZXJlcGx5LnJldF9tYWpvcikpIHtcbitcdFx0bmV0ZGV2X3dhcm4oZW5pYy1cdTAwM2VuZXRkZXYsXG4rXHRcdFx0ICAgIFwiTUJPWDogVkYgdW5yZWdpc3RlciByZWplY3RlZCBieSBQRjogJXUvJXVcXG5cIixcbitcdFx0XHQgICAgbGUxNl90b19jcHUocmVwbHktXHUwMDNlcmVwbHkucmV0X21ham9yKSxcbitcdFx0XHQgICAgbGUxNl90b19jcHUocmVwbHktXHUwMDNlcmVwbHkucmV0X21pbm9yKSk7XG4rXHR9IGVsc2Uge1xuK1x0XHRlbmljLVx1MDAzZXZmX3JlZ2lzdGVyZWQgPSBmYWxzZTtcbitcdH1cbitcdGNvbXBsZXRlKFx1MDAyNmVuaWMtXHUwMDNlbWJveF9jb21wKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgZW5pY19tYm94X3ZmX2hhbmRsZV9saW5rX3N0YXRlKHN0cnVjdCBlbmljICplbmljLCB2b2lkICpwYXlsb2FkKVxuK3tcbitcdHN0cnVjdCBlbmljX21ib3hfcGZfbGlua19zdGF0ZV9ub3RpZl9tc2cgKm5vdGlmID0gcGF5bG9hZDtcbitcdHN0cnVjdCBlbmljX21ib3hfcGZfbGlua19zdGF0ZV9hY2tfbXNnIGFjayA9IHt9O1xuK1x0aW50IGVycjtcbitcbitcdHN3aXRjaCAobGUzMl90b19jcHUobm90aWYtXHUwMDNlbGlua19zdGF0ZSkpIHtcbitcdGNhc2UgRU5JQ19NQk9YX0xJTktfU1RBVEVfRU5BQkxFOlxuK1x0XHRpZiAoIW5ldGlmX2NhcnJpZXJfb2soZW5pYy1cdTAwM2VuZXRkZXYpKVxuK1x0XHRcdG5ldGlmX2NhcnJpZXJfb24oZW5pYy1cdTAwM2VuZXRkZXYpO1xuK1x0XHRuZXRkZXZfZGJnKGVuaWMtXHUwMDNlbmV0ZGV2LCBcIk1CT1g6IGxpbmsgc3RhdGUgLVx1MDAzZSBVUFxcblwiKTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIEVOSUNfTUJPWF9MSU5LX1NUQVRFX0RJU0FCTEU6XG4rXHRcdGlmIChuZXRpZl9jYXJyaWVyX29rKGVuaWMtXHUwMDNlbmV0ZGV2KSlcbitcdFx0XHRuZXRpZl9jYXJyaWVyX29mZihlbmljLVx1MDAzZW5ldGRldik7XG4rXHRcdG5ldGRldl9kYmcoZW5pYy1cdTAwM2VuZXRkZXYsIFwiTUJPWDogbGluayBzdGF0ZSAtXHUwMDNlIERPV05cXG5cIik7XG4rXHRcdGJyZWFrO1xuK1x0ZGVmYXVsdDpcbitcdFx0bmV0ZGV2X3dhcm4oZW5pYy1cdTAwM2VuZXRkZXYsIFwiTUJPWDogdW5rbm93biBsaW5rIHN0YXRlICV1XFxuXCIsXG4rXHRcdFx0ICAgIGxlMzJfdG9fY3B1KG5vdGlmLVx1MDAzZWxpbmtfc3RhdGUpKTtcbitcdFx0YWNrLmFjay5yZXRfbWFqb3IgPSBjcHVfdG9fbGUxNihFTklDX01CT1hfRVJSX0dFTkVSSUMpO1xuK1x0XHRicmVhaztcbitcdH1cbitcbitcdGVyciA9IGVuaWNfbWJveF9zZW5kX21zZyhlbmljLCBFTklDX01CT1hfUEZfTElOS19TVEFURV9BQ0ssXG4rXHRcdFx0XHQgRU5JQ19NQk9YX0RTVF9QRiwgXHUwMDI2YWNrLCBzaXplb2YoYWNrKSk7XG4rXHRpZiAoZXJyIFx1MDAyNlx1MDAyNiBuZXRfcmF0ZWxpbWl0KCkpXG4rXHRcdG5ldGRldl93YXJuKGVuaWMtXHUwMDNlbmV0ZGV2LFxuK1x0XHRcdCAgICBcIk1CT1g6IGZhaWxlZCB0byBzZW5kIGxpbmsgc3RhdGUgQUNLOiAlZFxcblwiLCBlcnIpO1xuK31cbitcbitzdGF0aWMgYm9vbCBlbmljX21ib3hfdmZfcGF5bG9hZF9vayhzdHJ1Y3QgZW5pYyAqZW5pYywgdTggbXNnX3R5cGUsXG4rXHRcdFx0XHQgICAgdTE2IHBheWxvYWRfbGVuLCBzaXplX3QgbWluX2xlbilcbit7XG4rXHRpZiAocGF5bG9hZF9sZW4gXHUwMDNjIG1pbl9sZW4pIHtcbitcdFx0bmV0ZGV2X3dhcm4oZW5pYy1cdTAwM2VuZXRkZXYsXG4rXHRcdFx0ICAgIFwiTUJPWDogc2hvcnQgcGF5bG9hZCBmb3IgdHlwZSAldSAoJXUgXHUwMDNjICV6dSlcXG5cIixcbitcdFx0XHQgICAgbXNnX3R5cGUsIHBheWxvYWRfbGVuLCBtaW5fbGVuKTtcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1x0fVxuK1x0cmV0dXJuIHRydWU7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGVuaWNfbWJveF92Zl9wcm9jZXNzX21zZyhzdHJ1Y3QgZW5pYyAqZW5pYyxcbitcdFx0XHRcdCAgICAgc3RydWN0IGVuaWNfbWJveF9oZHIgKmhkciwgdm9pZCAqcGF5bG9hZCxcbitcdFx0XHRcdCAgICAgdTE2IHBheWxvYWRfbGVuKVxuK3tcbitcdHN3aXRjaCAoaGRyLVx1MDAzZW1zZ190eXBlKSB7XG4rXHRjYXNlIEVOSUNfTUJPWF9WRl9DQVBBQklMSVRZX1JFUExZOiB7XG4rXHRcdHNpemVfdCBleHAgPSBzaXplb2Yoc3RydWN0IGVuaWNfbWJveF92Zl9jYXBhYmlsaXR5X3JlcGx5X21zZyk7XG4rXG4rXHRcdGlmICghZW5pY19tYm94X3ZmX3BheWxvYWRfb2soZW5pYywgaGRyLVx1MDAzZW1zZ190eXBlLFxuK1x0XHRcdFx0XHQgICAgIHBheWxvYWRfbGVuLCBleHApKVxuK1x0XHRcdHJldHVybjtcbitcdFx0ZW5pY19tYm94X3ZmX2hhbmRsZV9jYXBhYmlsaXR5X3JlcGx5KGVuaWMsIHBheWxvYWQpO1xuK1x0XHRicmVhaztcbitcdH1cbitcdGNhc2UgRU5JQ19NQk9YX1ZGX1JFR0lTVEVSX1JFUExZOiB7XG4rXHRcdHNpemVfdCBleHAgPSBzaXplb2Yoc3RydWN0IGVuaWNfbWJveF92Zl9yZWdpc3Rlcl9yZXBseV9tc2cpO1xuK1xuK1x0XHRpZiAoIWVuaWNfbWJveF92Zl9wYXlsb2FkX29rKGVuaWMsIGhkci1cdTAwM2Vtc2dfdHlwZSxcbitcdFx0XHRcdFx0ICAgICBwYXlsb2FkX2xlbiwgZXhwKSlcbitcdFx0XHRyZXR1cm47XG4rXHRcdGVuaWNfbWJveF92Zl9oYW5kbGVfcmVnaXN0ZXJfcmVwbHkoZW5pYywgcGF5bG9hZCk7XG4rXHRcdGJyZWFrO1xuK1x0fVxuK1x0Y2FzZSBFTklDX01CT1hfVkZfVU5SRUdJU1RFUl9SRVBMWToge1xuK1x0XHRzaXplX3QgZXhwID0gc2l6ZW9mKHN0cnVjdCBlbmljX21ib3hfdmZfcmVnaXN0ZXJfcmVwbHlfbXNnKTtcbitcbitcdFx0aWYgKCFlbmljX21ib3hfdmZfcGF5bG9hZF9vayhlbmljLCBoZHItXHUwMDNlbXNnX3R5cGUsXG4rXHRcdFx0XHRcdCAgICAgcGF5bG9hZF9sZW4sIGV4cCkpXG4rXHRcdFx0cmV0dXJuO1xuK1x0XHRlbmljX21ib3hfdmZfaGFuZGxlX3VucmVnaXN0ZXJfcmVwbHkoZW5pYywgcGF5bG9hZCk7XG4rXHRcdGJyZWFrO1xuK1x0fVxuK1x0Y2FzZSBFTklDX01CT1hfUEZfTElOS19TVEFURV9OT1RJRjoge1xuK1x0XHRzaXplX3QgZXhwID0gc2l6ZW9mKHN0cnVjdCBlbmljX21ib3hfcGZfbGlua19zdGF0ZV9ub3RpZl9tc2cpO1xuK1xuK1x0XHRpZiAoIWVuaWNfbWJveF92Zl9wYXlsb2FkX29rKGVuaWMsIGhkci1cdTAwM2Vtc2dfdHlwZSxcbitcdFx0XHRcdFx0ICAgICBwYXlsb2FkX2xlbiwgZXhwKSlcbitcdFx0XHRyZXR1cm47XG4rXHRcdGVuaWNfbWJveF92Zl9oYW5kbGVfbGlua19zdGF0ZShlbmljLCBwYXlsb2FkKTtcbitcdFx0YnJlYWs7XG4rXHR9XG4rXHRkZWZhdWx0OlxuK1x0XHRuZXRkZXZfZGJnKGVuaWMtXHUwMDNlbmV0ZGV2LFxuK1x0XHRcdCAgIFwiTUJPWDogVkYgdW5oYW5kbGVkIG1zZyB0eXBlICV1XFxuXCIsXG4rXHRcdFx0ICAgaGRyLVx1MDAzZW1zZ190eXBlKTtcbitcdFx0YnJlYWs7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGVuaWNfbWJveF9yZWN2X2hhbmRsZXIoc3RydWN0IGVuaWMgKmVuaWMsIHZvaWQgKmJ1ZixcbitcdFx0XHRcdCAgIHVuc2lnbmVkIGludCBsZW4pXG4re1xuK1x0c3RydWN0IGVuaWNfbWJveF9oZHIgKmhkciA9IGJ1ZjtcbitcdHZvaWQgKnBheWxvYWQ7XG4rXHR1MTYgbXNnX2xlbjtcbitcbitcdGlmIChsZW4gXHUwMDNjIHNpemVvZigqaGRyKSkge1xuK1x0XHRpZiAobmV0X3JhdGVsaW1pdCgpKVxuK1x0XHRcdG5ldGRldl93YXJuKGVuaWMtXHUwMDNlbmV0ZGV2LFxuK1x0XHRcdFx0ICAgIFwiTUJPWDogdHJ1bmNhdGVkIG1lc3NhZ2UgKGxlbiAldSBcdTAwM2MgJXp1KVxcblwiLFxuK1x0XHRcdFx0ICAgIGxlbiwgc2l6ZW9mKCpoZHIpKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0aWYgKGhkci1cdTAwM2Vtc2dfdHlwZSBcdTAwM2U9IEVOSUNfTUJPWF9NQVgpIHtcbitcdFx0aWYgKG5ldF9yYXRlbGltaXQoKSlcbitcdFx0XHRuZXRkZXZfd2FybihlbmljLVx1MDAzZW5ldGRldixcbitcdFx0XHRcdCAgICBcIk1CT1g6IHVua25vd24gbXNnIHR5cGUgJXVcXG5cIixcbitcdFx0XHRcdCAgICBoZHItXHUwMDNlbXNnX3R5cGUpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHRtc2dfbGVuID0gbGUxNl90b19jcHUoaGRyLVx1MDAzZW1zZ19sZW4pO1xuK1x0aWYgKG1zZ19sZW4gXHUwMDNjIHNpemVvZigqaGRyKSB8fCBtc2dfbGVuIFx1MDAzZSBsZW4pIHtcbitcdFx0aWYgKG5ldF9yYXRlbGltaXQoKSlcbitcdFx0XHRuZXRkZXZfd2FybihlbmljLVx1MDAzZW5ldGRldixcbitcdFx0XHRcdCAgICBcIk1CT1g6IGludmFsaWQgbXNnX2xlbiAldSAoYnVmIGxlbiAldSlcXG5cIixcbitcdFx0XHRcdCAgICBtc2dfbGVuLCBsZW4pO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHRuZXRkZXZfZGJnKGVuaWMtXHUwMDNlbmV0ZGV2LFxuK1x0XHQgICBcIk1CT1ggcmVjdjogdHlwZSAldSBmcm9tIHZuaWMgJXUgbGVuICV1XFxuXCIsXG4rXHRcdCAgIGhkci1cdTAwM2Vtc2dfdHlwZSwgbGUxNl90b19jcHUoaGRyLVx1MDAzZXNyY192bmljX2lkKSwgbXNnX2xlbik7XG4rXG4rXHRwYXlsb2FkID0gYnVmICsgc2l6ZW9mKCpoZHIpO1xuK1xuK1x0aWYgKGVuaWMtXHUwMDNldmZfc3RhdGUpIHtcbitcdFx0ZW5pY19tYm94X3BmX3Byb2Nlc3NfbXNnKGVuaWMsIGhkciwgcGF5bG9hZCk7XG4rXHR9IGVsc2UgaWYgKGxlMTZfdG9fY3B1KGhkci1cdTAwM2VzcmNfdm5pY19pZCkgPT0gRU5JQ19NQk9YX0RTVF9QRikge1xuK1x0XHQvKiBzcmNfdm5pY19pZCB3YXMgb3ZlcndyaXR0ZW4gZnJvbSB0aGUgaGFyZHdhcmUtdmVyaWZpZWQgQ1FcbitcdFx0ICogVkxBTiBzZW5kZXIgZmllbGQsIHNvIGEgVkYgb25seSBhY2NlcHRzIG1lc3NhZ2VzIHRoYXQgdGhlXG4rXHRcdCAqIGFkYXB0ZXIgYXR0cmlidXRlcyB0byB0aGUgUEYuICBJdHMgc29sZSBhZG1pbi1jaGFubmVsIHBlZXIgaXNcbitcdFx0ICogdGhlIFBGOyBkcm9wIGFueXRoaW5nIGVsc2UgYXMgYSBzcG9vZmVkIG5vdGlmaWNhdGlvbi5cbitcdFx0ICovXG4rXHRcdGVuaWNfbWJveF92Zl9wcm9jZXNzX21zZyhlbmljLCBoZHIsIHBheWxvYWQsXG4rXHRcdFx0XHRcdCBtc2dfbGVuIC0gKHUxNilzaXplb2YoKmhkcikpO1xuK1x0fSBlbHNlIGlmIChuZXRfcmF0ZWxpbWl0KCkpIHtcbitcdFx0bmV0ZGV2X3dhcm4oZW5pYy1cdTAwM2VuZXRkZXYsXG4rXHRcdFx0ICAgIFwiTUJPWDogVkYgZHJvcHBpbmcgbm9uLVBGIG1lc3NhZ2UgZnJvbSB2bmljICV1XFxuXCIsXG4rXHRcdFx0ICAgIGxlMTZfdG9fY3B1KGhkci1cdTAwM2VzcmNfdm5pY19pZCkpO1xuK1x0fVxuK31cbitcbitpbnQgZW5pY19tYm94X3ZmX2NhcGFiaWxpdHlfY2hlY2soc3RydWN0IGVuaWMgKmVuaWMpXG4re1xuK1x0c3RydWN0IGVuaWNfbWJveF92Zl9jYXBhYmlsaXR5X21zZyByZXEgPSB7fTtcbitcdGludCBlcnI7XG4rXG4rXHRlbmljLVx1MDAzZXBmX2NhcF92ZXJzaW9uID0gMDtcbitcdHJlaW5pdF9jb21wbGV0aW9uKFx1MDAyNmVuaWMtXHUwMDNlbWJveF9jb21wKTtcbitcdGVuaWMtXHUwMDNlbWJveF9leHBlY3RlZF9yZXBseSA9IEVOSUNfTUJPWF9WRl9DQVBBQklMSVRZX1JFUExZO1xuK1x0cmVxLnZlcnNpb24gPSBjcHVfdG9fbGUzMihFTklDX01CT1hfQ0FQX1ZFUlNJT05fMSk7XG4rXG4rXHRlcnIgPSBlbmljX21ib3hfc2VuZF9tc2coZW5pYywgRU5JQ19NQk9YX1ZGX0NBUEFCSUxJVFlfUkVRVUVTVCxcbitcdFx0XHRcdCBFTklDX01CT1hfRFNUX1BGLCBcdTAwMjZyZXEsIHNpemVvZihyZXEpKTtcbitcdGlmIChlcnIpIHtcbitcdFx0ZW5pYy1cdTAwM2VtYm94X2V4cGVjdGVkX3JlcGx5ID0gMDtcbitcdFx0cmV0dXJuIGVycjtcbitcdH1cbitcbitcdGVyciA9IGVuaWNfbWJveF93YWl0X3JlcGx5KGVuaWMsIDMwMDApO1xuK1x0ZW5pYy1cdTAwM2VtYm94X2V4cGVjdGVkX3JlcGx5ID0gMDtcbitcdGlmIChlcnIpIHtcbitcdFx0bmV0ZGV2X3dhcm4oZW5pYy1cdTAwM2VuZXRkZXYsXG4rXHRcdFx0ICAgIFwiTUJPWDogbm8gY2FwYWJpbGl0eSByZXBseSBmcm9tIFBGXFxuXCIpO1xuK1x0XHRyZXR1cm4gZXJyO1xuK1x0fVxuK1xuK1x0aWYgKGVuaWMtXHUwMDNlcGZfY2FwX3ZlcnNpb24gXHUwMDNjIEVOSUNfTUJPWF9DQVBfVkVSU0lPTl8xKSB7XG4rXHRcdG5ldGRldl93YXJuKGVuaWMtXHUwMDNlbmV0ZGV2LFxuK1x0XHRcdCAgICBcIk1CT1g6IFBGIHZlcnNpb24gJXUgdG9vIG9sZFxcblwiLFxuK1x0XHRcdCAgICBlbmljLVx1MDAzZXBmX2NhcF92ZXJzaW9uKTtcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK2ludCBlbmljX21ib3hfdmZfcmVnaXN0ZXIoc3RydWN0IGVuaWMgKmVuaWMpXG4re1xuK1x0aW50IGVycjtcbitcbitcdGVuaWMtXHUwMDNldmZfcmVnaXN0ZXJlZCA9IGZhbHNlO1xuK1x0cmVpbml0X2NvbXBsZXRpb24oXHUwMDI2ZW5pYy1cdTAwM2VtYm94X2NvbXApO1xuK1x0ZW5pYy1cdTAwM2VtYm94X2V4cGVjdGVkX3JlcGx5ID0gRU5JQ19NQk9YX1ZGX1JFR0lTVEVSX1JFUExZO1xuK1xuK1x0ZXJyID0gZW5pY19tYm94X3NlbmRfbXNnKGVuaWMsIEVOSUNfTUJPWF9WRl9SRUdJU1RFUl9SRVFVRVNULFxuK1x0XHRcdFx0IEVOSUNfTUJPWF9EU1RfUEYsIE5VTEwsIDApO1xuK1x0aWYgKGVycikge1xuK1x0XHRlbmljLVx1MDAzZW1ib3hfZXhwZWN0ZWRfcmVwbHkgPSAwO1xuK1x0XHRyZXR1cm4gZXJyO1xuK1x0fVxuK1xuK1x0ZXJyID0gZW5pY19tYm94X3dhaXRfcmVwbHkoZW5pYywgMzAwMCk7XG4rXHRlbmljLVx1MDAzZW1ib3hfZXhwZWN0ZWRfcmVwbHkgPSAwO1xuK1x0aWYgKGVycikge1xuK1x0XHRuZXRkZXZfd2FybihlbmljLVx1MDAzZW5ldGRldixcbitcdFx0XHQgICAgXCJNQk9YOiBWRiByZWdpc3RyYXRpb24gd2l0aCBQRiB0aW1lZCBvdXRcXG5cIik7XG4rXHRcdHJldHVybiBlcnI7XG4rXHR9XG4rXG4rXHRpZiAoIWVuaWMtXHUwMDNldmZfcmVnaXN0ZXJlZClcbitcdFx0cmV0dXJuIC1FTk9ERVY7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4raW50IGVuaWNfbWJveF92Zl91bnJlZ2lzdGVyKHN0cnVjdCBlbmljICplbmljKVxuK3tcbitcdGludCBlcnI7XG4rXG4rXHRpZiAoIWVuaWMtXHUwMDNldmZfcmVnaXN0ZXJlZClcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRyZWluaXRfY29tcGxldGlvbihcdTAwMjZlbmljLVx1MDAzZW1ib3hfY29tcCk7XG4rXHRlbmljLVx1MDAzZW1ib3hfZXhwZWN0ZWRfcmVwbHkgPSBFTklDX01CT1hfVkZfVU5SRUdJU1RFUl9SRVBMWTtcbitcbitcdGVyciA9IGVuaWNfbWJveF9zZW5kX21zZyhlbmljLCBFTklDX01CT1hfVkZfVU5SRUdJU1RFUl9SRVFVRVNULFxuK1x0XHRcdFx0IEVOSUNfTUJPWF9EU1RfUEYsIE5VTEwsIDApO1xuK1x0aWYgKGVycikge1xuK1x0XHRlbmljLVx1MDAzZW1ib3hfZXhwZWN0ZWRfcmVwbHkgPSAwO1xuK1x0XHRyZXR1cm4gZXJyO1xuK1x0fVxuK1xuK1x0ZXJyID0gZW5pY19tYm94X3dhaXRfcmVwbHkoZW5pYywgMzAwMCk7XG4rXHRlbmljLVx1MDAzZW1ib3hfZXhwZWN0ZWRfcmVwbHkgPSAwO1xuK1x0aWYgKGVycilcbitcdFx0cmV0dXJuIGVycjtcbitcdGlmIChlbmljLVx1MDAzZXZmX3JlZ2lzdGVyZWQpXG4rXHRcdHJldHVybiAtRUFDQ0VTO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3ZvaWQgZW5pY19tYm94X2luaXQoc3RydWN0IGVuaWMgKmVuaWMpXG4re1xuK1x0LyogbWJveF9sb2NrIGFuZCBtYm94X2NvbXAgbXVzdCBiZSBpbml0aWFsaXplZCBleGFjdGx5IG9uY2UgcGVyXG4rXHQgKiBkZXZpY2UgbGlmZXRpbWU7IHRoZSBQRiBzcmlvdl9jb25maWd1cmUgcGF0aCBjYW4gcmUtZW50ZXIgdGhpc1xuK1x0ICogb24gZWFjaCBlbmFibGUgY3ljbGUgd2hlcmUgdGhlc2UgcHJpbWl0aXZlcyBhcmUgYWxyZWFkeSBzZXQgdXAuXG4rXHQgKi9cbitcdGlmICghZW5pYy1cdTAwM2VtYm94X2luaXRpYWxpemVkKSB7XG4rXHRcdG11dGV4X2luaXQoXHUwMDI2ZW5pYy1cdTAwM2VtYm94X2xvY2spO1xuK1x0XHRpbml0X2NvbXBsZXRpb24oXHUwMDI2ZW5pYy1cdTAwM2VtYm94X2NvbXApO1xuK1x0XHRlbmljLVx1MDAzZW1ib3hfaW5pdGlhbGl6ZWQgPSB0cnVlO1xuK1x0fSBlbHNlIHtcbitcdFx0cmVpbml0X2NvbXBsZXRpb24oXHUwMDI2ZW5pYy1cdTAwM2VtYm94X2NvbXApO1xuK1x0fVxuK1x0ZW5pYy1cdTAwM2VtYm94X21zZ19udW0gPSAwO1xuK1x0ZW5pYy1cdTAwM2VhZG1pbl9ycV9oYW5kbGVyID0gZW5pY19tYm94X3JlY3ZfaGFuZGxlcjtcbit9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21ib3guaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19tYm94Lmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMTVlMzBlZTJiMGVkOTVcbi0tLSAvZGV2L251bGxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19tYm94LmhcbkBAIC0wLDAgKzEsOTUgQEBcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovXG4rLyogQ29weXJpZ2h0IDIwMjUgQ2lzY28gU3lzdGVtcywgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gKi9cbitcbisjaWZuZGVmIF9FTklDX01CT1hfSF9cbisjZGVmaW5lIF9FTklDX01CT1hfSF9cbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG4rXG4rLypcbisgKiBNYWlsYm94IHByb3RvY29sIGZvciBQRi1WRiBjb21tdW5pY2F0aW9uIG92ZXIgdGhlIGFkbWluIGNoYW5uZWwuXG4rICpcbisgKiBFdmVuIG51bWJlcnMgYXJlIHJlcXVlc3RzLCBvZGQgbnVtYmVycyBhcmUgcmVwbGllcy9hY2tzLlxuKyAqIFRoZSBwcmVmaXggaW5kaWNhdGVzIHRoZSBpbml0aWF0b3I6IFZGXyA9IFZGLWluaXRpYXRlZCwgUEZfID0gUEYtaW5pdGlhdGVkLlxuKyAqL1xuK2VudW0gZW5pY19tYm94X21zZ190eXBlIHtcbitcdEVOSUNfTUJPWF9WRl9DQVBBQklMSVRZX1JFUVVFU1RcdFx0PSAwLFxuK1x0RU5JQ19NQk9YX1ZGX0NBUEFCSUxJVFlfUkVQTFlcdFx0PSAxLFxuK1x0RU5JQ19NQk9YX1ZGX1JFR0lTVEVSX1JFUVVFU1RcdFx0PSAyLFxuK1x0RU5JQ19NQk9YX1ZGX1JFR0lTVEVSX1JFUExZXHRcdD0gMyxcbitcdEVOSUNfTUJPWF9WRl9VTlJFR0lTVEVSX1JFUVVFU1RcdFx0PSA0LFxuK1x0RU5JQ19NQk9YX1ZGX1VOUkVHSVNURVJfUkVQTFlcdFx0PSA1LFxuK1x0RU5JQ19NQk9YX1BGX0xJTktfU1RBVEVfTk9USUZcdFx0PSA2LFxuK1x0RU5JQ19NQk9YX1BGX0xJTktfU1RBVEVfQUNLXHRcdD0gNyxcbitcdEVOSUNfTUJPWF9NQVhcbit9O1xuK1xuK3N0cnVjdCBlbmljX21ib3hfaGRyIHtcbitcdF9fbGUxNiBzcmNfdm5pY19pZDtcbitcdF9fbGUxNiBkc3Rfdm5pY19pZDtcbitcdHU4IG1zZ190eXBlO1xuK1x0dTggZmxhZ3M7XG4rXHRfX2xlMTYgbXNnX2xlbjtcbitcdF9fbGU2NCBtc2dfbnVtO1xuK307XG4rXG4rc3RydWN0IGVuaWNfbWJveF9nZW5lcmljX3JlcGx5IHtcbitcdF9fbGUxNiByZXRfbWFqb3I7XG4rXHRfX2xlMTYgcmV0X21pbm9yO1xuK307XG4rXG4rI2RlZmluZSBFTklDX01CT1hfRVJSX0dFTkVSSUNcdFx0QklUKDApXG4rI2RlZmluZSBFTklDX01CT1hfRVJSX1ZGX05PVF9SRUdJU1RFUkVEXHRCSVQoMSlcbisjZGVmaW5lIEVOSUNfTUJPWF9FUlJfTVNHX05PVF9TVVBQT1JURURcdEJJVCgyKVxuK1xuKy8qIEVOSUNfTUJPWF9WRl9DQVBBQklMSVRZX1JFUVVFU1QgLyBfUkVQTFkgKi9cbisjZGVmaW5lIEVOSUNfTUJPWF9DQVBfVkVSU0lPTl8wXHRcdDBcbisjZGVmaW5lIEVOSUNfTUJPWF9DQVBfVkVSU0lPTl8xXHRcdDFcbitcbitzdHJ1Y3QgZW5pY19tYm94X3ZmX2NhcGFiaWxpdHlfbXNnIHtcbitcdF9fbGUzMiB2ZXJzaW9uO1xuK1x0X19sZTMyIHJlc2VydmVkWzMyXTtcbit9O1xuK1xuKy8qIFRoZSBlbWJlZGRlZCBlbmljX21ib3hfZ2VuZXJpY19yZXBseSBoYXMgMi1ieXRlIGFsaWdubWVudCwgYnV0IHRoZVxuKyAqIF9fbGUzMiBtZW1iZXJzIGdpdmUgdGhpcyBzdHJ1Y3QgNC1ieXRlIG5hdHVyYWwgYWxpZ25tZW50LiAgUmVjZWl2ZVxuKyAqIGJ1ZmZlcnMgY29tZSBmcm9tIGttYWxsb2MgKFx1MDAzZT0gOC1ieXRlIGFsaWduZWQpLCBzbyB0aGVyZSBpcyBub1xuKyAqIG1pc2FsaWduZWQgYWNjZXNzIHJpc2sgd2hlbiBjYXN0aW5nIGZyb20gdGhlIHJlY2VpdmUgYnVmZmVyLlxuKyAqL1xuK3N0cnVjdCBlbmljX21ib3hfdmZfY2FwYWJpbGl0eV9yZXBseV9tc2cge1xuK1x0c3RydWN0IGVuaWNfbWJveF9nZW5lcmljX3JlcGx5IHJlcGx5O1xuK1x0X19sZTMyIHZlcnNpb247XG4rXHRfX2xlMzIgcmVzZXJ2ZWRbMzJdO1xuK307XG4rXG4rLyogRU5JQ19NQk9YX1ZGX1JFR0lTVEVSIC8gX1VOUkVHSVNURVIgKi9cbitzdHJ1Y3QgZW5pY19tYm94X3ZmX3JlZ2lzdGVyX3JlcGx5X21zZyB7XG4rXHRzdHJ1Y3QgZW5pY19tYm94X2dlbmVyaWNfcmVwbHkgcmVwbHk7XG4rfTtcbitcbisvKiBFTklDX01CT1hfUEZfTElOS19TVEFURV9OT1RJRiAvIF9BQ0sgKi9cbisjZGVmaW5lIEVOSUNfTUJPWF9MSU5LX1NUQVRFX0RJU0FCTEVcdDBcbisjZGVmaW5lIEVOSUNfTUJPWF9MSU5LX1NUQVRFX0VOQUJMRVx0MVxuK1xuK3N0cnVjdCBlbmljX21ib3hfcGZfbGlua19zdGF0ZV9ub3RpZl9tc2cge1xuK1x0X19sZTMyIGxpbmtfc3RhdGU7XG4rfTtcbitcbitzdHJ1Y3QgZW5pY19tYm94X3BmX2xpbmtfc3RhdGVfYWNrX21zZyB7XG4rXHRzdHJ1Y3QgZW5pY19tYm94X2dlbmVyaWNfcmVwbHkgYWNrO1xuK307XG4rXG4rI2RlZmluZSBFTklDX01CT1hfRFNUX1BGXHQweEZGRkZcbitcbitzdHJ1Y3QgZW5pYztcbitcbit2b2lkIGVuaWNfbWJveF9pbml0KHN0cnVjdCBlbmljICplbmljKTtcbitpbnQgZW5pY19tYm94X3NlbmRfbXNnKHN0cnVjdCBlbmljICplbmljLCB1OCBtc2dfdHlwZSwgdTE2IGRzdF92bmljX2lkLFxuK1x0XHQgICAgICAgdm9pZCAqcGF5bG9hZCwgdTE2IHBheWxvYWRfbGVuKTtcbitpbnQgZW5pY19tYm94X3NlbmRfbGlua19zdGF0ZShzdHJ1Y3QgZW5pYyAqZW5pYywgdTE2IHZmX2lkLCB1MzIgbGlua19zdGF0ZSk7XG4raW50IGVuaWNfbWJveF92Zl9jYXBhYmlsaXR5X2NoZWNrKHN0cnVjdCBlbmljICplbmljKTtcbitpbnQgZW5pY19tYm94X3ZmX3JlZ2lzdGVyKHN0cnVjdCBlbmljICplbmljKTtcbitpbnQgZW5pY19tYm94X3ZmX3VucmVnaXN0ZXIoc3RydWN0IGVuaWMgKmVuaWMpO1xuK1xuKyNlbmRpZiAvKiBfRU5JQ19NQk9YX0hfICovXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX3BwLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfcHAuY1xuaW5kZXggNDcyMGE5NTI3MjVkMDAuLjNmNjExZTI0MGMyNTZjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX3BwLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19wcC5jXG5AQCAtMjUsNiArMjUsMTEgQEAgaW50IGVuaWNfaXNfdmFsaWRfcHBfdmYoc3RydWN0IGVuaWMgKmVuaWMsIGludCB2ZiwgaW50ICplcnIpXG4gXHRpZiAodmYgIT0gUE9SVF9TRUxGX1ZGKSB7XG4gI2lmZGVmIENPTkZJR19QQ0lfSU9WXG4gXHRcdGlmIChlbmljX3NyaW92X2VuYWJsZWQoZW5pYykpIHtcbitcdFx0XHQvKiBWMiBTUi1JT1YgdXNlcyBNQk9YLCBub3QgcG9ydCBwcm9maWxlcyAqL1xuK1x0XHRcdGlmIChlbmljLVx1MDAzZXZmX3R5cGUgPT0gRU5JQ19WRl9UWVBFX1YyKSB7XG4rXHRcdFx0XHQqZXJyID0gLUVPUE5PVFNVUFA7XG4rXHRcdFx0XHRnb3RvIGVycl9vdXQ7XG4rXHRcdFx0fVxuIFx0XHRcdGlmICh2ZiBcdTAwM2MgMCB8fCB2ZiBcdTAwM2U9IGVuaWMtXHUwMDNlbnVtX3Zmcykge1xuIFx0XHRcdFx0KmVyciA9IC1FSU5WQUw7XG4gXHRcdFx0XHRnb3RvIGVycl9vdXQ7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX3Jlcy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX3Jlcy5jXG5pbmRleCAyYjc1NDVkNmE2N2ZkYy4uNzRjZDJlZTNhZjVjYjcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfcmVzLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19yZXMuY1xuQEAgLTU5LDYgKzU5LDcgQEAgaW50IGVuaWNfZ2V0X3ZuaWNfY29uZmlnKHN0cnVjdCBlbmljICplbmljKVxuIFx0R0VUX0NPTkZJRyhpbnRyX3RpbWVyX3VzZWMpO1xuIFx0R0VUX0NPTkZJRyhsb29wX3RhZyk7XG4gXHRHRVRfQ09ORklHKG51bV9hcmZzKTtcbitcdEdFVF9DT05GSUcobXFfc3Vidm5pY19jb3VudCk7XG4gXHRHRVRfQ09ORklHKG1heF9ycV9yaW5nKTtcbiBcdEdFVF9DT05GSUcobWF4X3dxX3JpbmcpO1xuIFx0R0VUX0NPTkZJRyhtYXhfY3FfcmluZyk7XG5AQCAtMjEwLDcgKzIxMSw4IEBAIHZvaWQgZW5pY19nZXRfcmVzX2NvdW50cyhzdHJ1Y3QgZW5pYyAqZW5pYylcbiBcdFx0dm5pY19kZXZfZ2V0X3Jlc19jb3VudChlbmljLVx1MDAzZXZkZXYsIFJFU19UWVBFX0FETUlOX1JRKSBcdTAwM2U9IDEgXHUwMDI2XHUwMDI2XG4gXHRcdHZuaWNfZGV2X2dldF9yZXNfY291bnQoZW5pYy1cdTAwM2V2ZGV2LCBSRVNfVFlQRV9BRE1JTl9DUSkgXHUwMDNlPVxuIFx0XHRcdEFSUkFZX1NJWkUoZW5pYy1cdTAwM2VhZG1pbl9jcSkgXHUwMDI2XHUwMDI2XG4tXHRcdHZuaWNfZGV2X2dldF9yZXNfY291bnQoZW5pYy1cdTAwM2V2ZGV2LCBSRVNfVFlQRV9TUklPVl9JTlRSKSBcdTAwM2U9IDE7XG4rXHRcdChlbmljX2lzX3NyaW92X3ZmX3YyKGVuaWMpIHx8XG4rXHRcdCB2bmljX2Rldl9nZXRfcmVzX2NvdW50KGVuaWMtXHUwMDNldmRldiwgUkVTX1RZUEVfU1JJT1ZfSU5UUikgXHUwMDNlPSAxKTtcbiBcbiBcdGRldl9pbmZvKGVuaWNfZ2V0X2RldihlbmljKSxcbiBcdFx0XCJ2TklDIHJlc291cmNlcyBhdmFpbDogd3EgJWQgcnEgJWQgY3EgJWQgaW50ciAlZCBhZG1pbiAlc1xcblwiLFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvdm5pY19jcS5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy92bmljX2NxLmhcbmluZGV4IGQ0NmQ0ZDJlZjZiYmFjLi4zNWZmYTMyMzA3MTMwNSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvdm5pY19jcS5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL3ZuaWNfY3EuaFxuQEAgLTc2LDYgKzc2LDE1IEBAIGludCB2bmljX2NxX2FsbG9jKHN0cnVjdCB2bmljX2RldiAqdmRldiwgc3RydWN0IHZuaWNfY3EgKmNxLCB1bnNpZ25lZCBpbnQgaW5kZXgsXG4gaW50IHZuaWNfY3FfYWxsb2Nfd2l0aF90eXBlKHN0cnVjdCB2bmljX2RldiAqdmRldiwgc3RydWN0IHZuaWNfY3EgKmNxLFxuIFx0XHRcdCAgICB1bnNpZ25lZCBpbnQgaW5kZXgsIHVuc2lnbmVkIGludCBkZXNjX2NvdW50LFxuIFx0XHRcdCAgICB1bnNpZ25lZCBpbnQgZGVzY19zaXplLCB1bnNpZ25lZCBpbnQgcmVzX3R5cGUpO1xuKyNkZWZpbmUgVk5JQ19DUV9GQ19FTkFCTEVcdDFcbisjZGVmaW5lIFZOSUNfQ1FfRkNfRElTQUJMRVx0MFxuKyNkZWZpbmUgVk5JQ19DUV9DT0xPUl9FTkFCTEVcdDFcbisjZGVmaW5lIFZOSUNfQ1FfSU5UUl9FTkFCTEVcdDFcbisjZGVmaW5lIFZOSUNfQ1FfSU5UUl9ESVNBQkxFXHQwXG4rI2RlZmluZSBWTklDX0NRX0VOVFJZX0VOQUJMRVx0MVxuKyNkZWZpbmUgVk5JQ19DUV9NU0dfRU5BQkxFXHQxXG4rI2RlZmluZSBWTklDX0NRX01TR19ESVNBQkxFXHQwXG4rXG4gdm9pZCB2bmljX2NxX2luaXQoc3RydWN0IHZuaWNfY3EgKmNxLCB1bnNpZ25lZCBpbnQgZmxvd19jb250cm9sX2VuYWJsZSxcbiBcdHVuc2lnbmVkIGludCBjb2xvcl9lbmFibGUsIHVuc2lnbmVkIGludCBjcV9oZWFkLCB1bnNpZ25lZCBpbnQgY3FfdGFpbCxcbiBcdHVuc2lnbmVkIGludCBjcV90YWlsX2NvbG9yLCB1bnNpZ25lZCBpbnQgaW50ZXJydXB0X2VuYWJsZSxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL3ZuaWNfZGV2Y21kLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL3ZuaWNfZGV2Y21kLmhcbmluZGV4IDYwNWVmMTdmOTY3ZTRhLi45MGNhMDY2OTFlYmQ2MyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvdm5pY19kZXZjbWQuaFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy92bmljX2RldmNtZC5oXG5AQCAtNDU1LDggKzQ1NSwxOSBAQCBlbnVtIHZuaWNfZGV2Y21kX2NtZCB7XG4gXHQgKi9cbiBcdENNRF9DUV9FTlRSWV9TSVpFX1NFVCA9IF9DTURDKF9DTURfRElSX1dSSVRFLCBfQ01EX1ZUWVBFX0VORVQsIDkwKSxcbiBcbitcdC8qXG4rXHQgKiBTZXQgcXVldWUgcGFpciB0eXBlIChhZG1pbiBvciBkYXRhKVxuK1x0ICogaW46ICh1MzIpIGEwID0gcXVldWUgcGFpciB0eXBlICgwID0gYWRtaW4sIDEgPSBkYXRhKVxuK1x0ICogaW46ICh1MzIpIGExID0gZW5hYmxlICgxKSAvIGRpc2FibGUgKDApXG4rXHQgKi9cbitcdENNRF9RUF9UWVBFX1NFVCA9IF9DTURDKF9DTURfRElSX1dSSVRFLCBfQ01EX1ZUWVBFX0VORVQsIDk3KSxcbiB9O1xuIFxuKyNkZWZpbmUgUVBfVFlQRV9BRE1JTlx0MFxuKyNkZWZpbmUgUVBfVFlQRV9EQVRBXHQxXG4rI2RlZmluZSBRUF9FTkFCTEVcdDFcbisjZGVmaW5lIFFQX0RJU0FCTEVcdDBcbitcbiAvKiBDTURfRU5BQkxFMiBmbGFncyAqL1xuICNkZWZpbmUgQ01EX0VOQUJMRTJfU1RBTkRCWSAweDBcbiAjZGVmaW5lIENNRF9FTkFCTEUyX0FDVElWRSAgMHgxXG5AQCAtNzM0LDYgKzc0NSw4IEBAIGVudW0gdmljX2ZlYXR1cmVfdCB7XG4gXHRWSUNfRkVBVFVSRV9WWExBTixcbiBcdFZJQ19GRUFUVVJFX1JETUEsXG4gXHRWSUNfRkVBVFVSRV9WWExBTl9QQVRDSCxcbitcdC8qIHNsb3QgMyByZXNlcnZlZCBmb3IgZmlybXdhcmUgVklDX0ZFQVRVUkVfUFRQICovXG4rXHRWSUNfRkVBVFVSRV9TUklPVlx0PSA0LFxuIFx0VklDX0ZFQVRVUkVfTUFYLFxuIH07XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy92bmljX2VuZXQuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvdm5pY19lbmV0LmhcbmluZGV4IDllOGU4NjI2MmEzZmVhLi41MTlkMjk2OTk5MGIxOCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvdm5pY19lbmV0LmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvdm5pY19lbmV0LmhcbkBAIC0yMSw3ICsyMSw5IEBAIHN0cnVjdCB2bmljX2VuZXRfY29uZmlnIHtcbiBcdHUxNiBsb29wX3RhZztcbiBcdHUxNiB2Zl9ycV9jb3VudDtcbiBcdHUxNiBudW1fYXJmcztcbi1cdHU4IHJlc2VydmVkWzY2XTtcbitcdHU4IHJlc2VydmVkMVszMl07XG4rXHR1MTYgbXFfc3Vidm5pY19jb3VudDtcbitcdHU4IHJlc2VydmVkMlszMl07XG4gXHR1MzIgbWF4X3JxX3Jpbmc7XHQvLyBNQVggUlEgcmluZyBzaXplXG4gXHR1MzIgbWF4X3dxX3Jpbmc7XHQvLyBNQVggV1EgcmluZyBzaXplXG4gXHR1MzIgbWF4X2NxX3Jpbmc7XHQvLyBNQVggQ1EgcmluZyBzaXplXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxODo0MjowOC45OTgxODE1MjlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDM1MjQyMzAyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBc3Nlc3NpbmcgdGhlIEZ1enphYmlsaXR5IG9mIHRoZSBDaXNjbyBFTklDIERyaXZlciBQYXRjaCBTZXJpZXMqKlxuXG5Pa2F5LCBzbyB3ZSBoYXZlIHRoaXMgcGF0Y2ggc2VyaWVzIGludHJvZHVjaW5nIGFkbWluIGNoYW5uZWwgYW5kIG1haWxib3ggc3VwcG9ydCBmb3IgdGhlIENpc2NvIEVOSUMgZHJpdmVyLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyB3aGV0aGVyIHRoaXMgaXMgcHJhY3RpY2FsbHkgZnV6emFibGUuIFRoZSBjaGFuZ2VzIGFyZSBmdW5jdGlvbmFsLCB0b3VjaGluZyBjb3JlIGRyaXZlciBsb2dpYywgd2hpY2ggaXMgZ29vZCBmcm9tIGEgdnVsbmVyYWJpbGl0eSBwZXJzcGVjdGl2ZSwgYnV0IGlmIGl0J3Mgbm90IHJlYWNoYWJsZSwgaXQncyBhIHdhc3RlZCBlZmZvcnQuIFRoaXMgZHJpdmVyIGlzIHNwZWNpZmljYWxseSBmb3IgQ2lzY28gVklDIEV0aGVybmV0IE5JQ3MsIHdoaWNoIG1lYW5zIGl0IHJlbGllcyBvbiBzcGVjaWZpYyBoYXJkd2FyZS4gTXkgZmlyc3QgaW5zdGluY3QgaXMsIGNhbiB0aGlzIGV2ZW4gKmJlKiBoaXQgd2l0aGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBRRU1VLCBvciBldmVuIEdDRT8gUENJIGRyaXZlcnMgZm9yIG5pY2hlIGhhcmR3YXJlIGxpa2UgdGhpcyBhcmUgbm90b3Jpb3VzbHkgZGlmZmljdWx0IHRvIHRhcmdldCB3aXRob3V0IHNwZWNpZmljIGVtdWxhdGlvbi5cblxuTXkgbWluZCBpbW1lZGlhdGVseSByYWNlczogRG9lcyBRRU1VIGV2ZW4gKmhhdmUqIGEgQ2lzY28gVklDIGVtdWxhdG9yPyBJIG5lZWQgdG8gY2hlY2suIElmIHRoZXJlJ3Mgbm8gc29mdHdhcmUgZW11bGF0aW9uLCBpcyB0aGVyZSBhbm90aGVyIGZ1enppbmcgc3RyYXRlZ3k/IFN5emthbGxlciwgb2YgY291cnNlLiBTeXprYWxsZXIgaXMgdGhlIGdvbGQgc3RhbmRhcmQuIEkga25vdyBpdCBoYXMgUENJIGZ1enppbmcgY2FwYWJpbGl0aWVzIOKAkyB0aHJvdWdoIHRoaW5ncyBsaWtlIHZQQ0ksIG9yIHBvdGVudGlhbGx5IGV2ZW4gZW11bGF0aW9uIG9mIGRyaXZlcnMgbGlrZSBlMTAwMGUuIEhvd2V2ZXIsIEkgY2FuJ3QgaW1tZWRpYXRlbHkgcmVjYWxsIGlmIGl0IGhhcyBleHBsaWNpdCBzdXBwb3J0IGZvciBDaXNjbyBFTklDLlxuXG5Ib2xkIG9uLCBJIHJlbWVtYmVyIHRoZSBmdXp6aW5nIGd1aWRlbGluZXMgc3RhdGluZyBcIlJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgLi4uIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuLi5cIiBzbyByZWFjaGFiaWxpdHkgaXMga2V5LlxuXG5Pa2F5LCBiYWNrIHRvIFN5emthbGxlci4gSXQgZG9lcyBoYXZlIGBzeXpfcGNpYCBhbmQgc2ltaWxhciBtZWNoYW5pc21zLCB3aGljaCAqY291bGQqIHdvcmsgaWYgaXQncyBhIFBDSSBkcml2ZXIuIFRoZSBjcml0aWNhbCB0aGluZyBpcyBjYW4gaXQgaW5qZWN0IGEgQ2lzY28gRU5JQyBkZXZpY2UgYXQgYWxsPyBXYWl0LCBTeXprYWxsZXIgKmRvZXMqIGhhdmUgYSBQQ0kgZnV6emVyLCB3aGljaCBpcyB0aGUga2V5IGhlcmUuIEl0IGNhbiBpbmplY3QgUENJIGRldmljZXMhIFRoaXMgbWVhbnMgaXQgY2FuIHRoZW9yZXRpY2FsbHkgZnV6eiAqYW55KiBQQ0kgZHJpdmVyIGJ5IHNpbXVsYXRpbmcgdGhlIFBDSSBkZXZpY2UgY29uZmlnIHNwYWNlIGFuZCBCQVJzLiBJcyB0aGF0IGFjdHVhbGx5IHRydWUgdGhvdWdoPyBJIG5lZWQgdG8gYmUgc3VyZS4gRG9lcyBpdCAqcmVhbGx5KiB3b3JrIGZvciBhbGwgUENJIGRyaXZlcnM/XG5cbkkgbmVlZCB0byBxdWlja2x5IGNvbmZpcm0gYSBmZXcgdGhpbmdzLiBGaXJzdCwgaXMgYENPTkZJR19FTklDYCBlbmFibGVkIHdpdGhpbiBzeXprYWxsZXIncyBjb25maWd1cmF0aW9uPyBJIHNob3VsZCBsb29rIGZvciB0aGlzIGluIHRoZWlyIGNvbmZpZ3VyYXRpb24gZmlsZXMgdG8gYmUgc3VyZS4gSSdsbCBzZWFyY2ggdGhlIGtlcm5lbCB0cmVlIHRvIGNvbmZpcm0gdGhhdCBgZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9gIGlzIGFjdHVhbGx5IGEgUENJIGRyaXZlciwgd2hpY2ggaXQgaXMsIHNvIHRoYXQncyBnb29kLiBOb3csIEkgc2hvdWxkIGxvb2sgaW4gdGhlIGBLY29uZmlnYCBmaWxlIGluIHRoYXQgZGlyZWN0b3J5IHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIHRoYXQgSSBuZWVkIHRvIGVuYWJsZSBmb3IgRU5JQy4gYENPTkZJR19FTklDYCBpcyB0aGUgbWFpbiBvbmUuIEkgaGF2ZSBhIGdvb2QgZmVlbGluZyBhYm91dCB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTE0NywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxMCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE4OjQyOjE5LjM1MDYwNjgxWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMzODYxODkxNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRU5JQ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9LY29uZmlnLTUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9LY29uZmlnOjY6Y29uZmlnIEVOSUNcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL0tjb25maWctNy1cXHR0cmlzdGF0ZSBcXFwiQ2lzY28gVklDIEV0aGVybmV0IE5JQyBTdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxODo0MjoxOS42ODkyMzA0NzdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzI2MTYzOTA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgcXVpY2sgdGFrZSBvbiB0aGlzLlxuXG4qKkFuYWx5emluZyB0aGlzIFBDSSBEcml2ZXIgUGF0Y2gqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsIFwiT2theSwgaXQncyBhIFBDSSBkcml2ZXIuXCIgSW1tZWRpYXRlbHksIEkgd2FudCB0byBzZWUgaWYgdGhlcmUncyBhbnl0aGluZyBlbHNlIGluIHRoZSBjb25maWd1cmF0aW9uIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQuIE15IGd1dCBpbnN0aW5jdCBpcyB0byBsb29rIGZvciBkZXBlbmRlbmNpZXMuIEFoLCBnb29kLCB0aGUgcGF0Y2ggdXNlcyBhbiBgI2lmZGVmIENPTkZJR19QQ0lfSU9WYCBkaXJlY3RpdmUuIFRoYXQncyB0aGUga2V5LiBUaGF0IHRlbGxzIG1lIHJpZ2h0IGF3YXkgdGhhdCBgQ09ORklHX1BDSV9JT1ZgIGlzIGEgKnJlcXVpcmVkKiBjb25maWd1cmF0aW9uIG9wdGlvbiBmb3IgdGhpcyBwYXRjaCB0byB3b3JrIGNvcnJlY3RseS4gTm93LCBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgaWYgdGhlcmUgYXJlICphbnkqIG90aGVyIGNvbmZpZyBvcHRpb25zIGJlaW5nIHVzZWQuIEkgd2lsbCBsb29rIGludG8gdGhhdCwgbmV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA0MTUsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxODo0MjoyMy4wMTUzOTc5OTJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMwMjM2MTY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9NYWtlZmlsZS0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvTWFrZWZpbGU6MjpvYmotJChDT05GSUdfRU5JQykgOj0gZW5pYy5vXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9NYWtlZmlsZS0zLVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX2Nsc2YuYz0xMDc9c3RydWN0IGVuaWNfcmZzX2ZsdHJfbm9kZSAqaHRibF9mbHRyX3NlYXJjaChzdHJ1Y3QgZW5pYyAqZW5pYywgdTE2IGZsdHJfaWQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfY2xzZi5jLTEyNC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfY2xzZi5jOjEyNTojaWZkZWYgQ09ORklHX1JGU19BQ0NFTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19jbHNmLmMtMTI2LXZvaWQgZW5pY19mbG93X21heV9leHBpcmUoc3RydWN0IHRpbWVyX2xpc3QgKnQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfY2xzZi5jPTE3MT1pbnQgZW5pY19yeF9mbG93X3N0ZWVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfY2xzZi5jLTI4NS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfY2xzZi5jOjI4NjojZW5kaWYgLyogQ09ORklHX1JGU19BQ0NFTCAqL1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX2Nsc2YuaD0xND1zdHJ1Y3QgZW5pY19yZnNfZmx0cl9ub2RlICpodGJsX2ZsdHJfc2VhcmNoKHN0cnVjdCBlbmljICplbmljLCB1MTYgZmx0cl9pZCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX2Nsc2YuaC0xNS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfY2xzZi5oOjE2OiNpZmRlZiBDT05GSUdfUkZTX0FDQ0VMXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX2Nsc2YuaC0xNy1pbnQgZW5pY19yeF9mbG93X3N0ZWVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfY2xzZi5oPTMzPXN0YXRpYyBpbmxpbmUgdm9pZCBlbmljX3Jmc190aW1lcl9zdG9wKHN0cnVjdCBlbmljICplbmljKSB7fVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19jbHNmLmg6MzQ6I2VuZGlmIC8qIENPTkZJR19SRlNfQUNDRUwgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfY2xzZi5oLTM1LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21haW4uYy00Mi0jaW5jbHVkZSBcXHUwMDNjbGludXgvbnVtYS5oXFx1MDAzZVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19tYWluLmM6NDM6I2lmZGVmIENPTkZJR19SRlNfQUNDRUxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfbWFpbi5jLTQ0LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9jcHVfcm1hcC5oXFx1MDAzZVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21haW4uYz0zMjQ9aW50IGVuaWNfaXNfdmFsaWRfdmYoc3RydWN0IGVuaWMgKmVuaWMsIGludCB2ZilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfbWFpbi5jLTMyNS17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21haW4uYzozMjY6I2lmZGVmIENPTkZJR19QQ0lfSU9WXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21haW4uYy0zMjctXFx0cmV0dXJuIHZmIFxcdTAwM2U9IDAgXFx1MDAyNlxcdTAwMjYgdmYgXFx1MDAzYyBlbmljLVxcdTAwM2VudW1fdmZzO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21haW4uYz0xMzU2PXN0YXRpYyBpbnQgZW5pY19wb2xsKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19tYWluLmMtMTQxNi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfbWFpbi5jOjE0MTc6I2lmZGVmIENPTkZJR19SRlNfQUNDRUxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfbWFpbi5jLTE0MTgtc3RhdGljIHZvaWQgZW5pY19mcmVlX3J4X2NwdV9ybWFwKHN0cnVjdCBlbmljICplbmljKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21haW4uYz0xNDQ5PXN0YXRpYyB2b2lkIGVuaWNfc2V0X3J4X2NwdV9ybWFwKHN0cnVjdCBlbmljICplbmljKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21haW4uYy0xNDUyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19tYWluLmM6MTQ1MzojZW5kaWYgLyogQ09ORklHX1JGU19BQ0NFTCAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19tYWluLmMtMTQ1NC1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19tYWluLmM9MTkyMz1zdGF0aWMgdm9pZCBlbmljX2NoYW5nZV9tdHVfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfbWFpbi5jLTE5MzUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21haW4uYzoxOTM2OiNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19tYWluLmMtMTkzNy1zdGF0aWMgdm9pZCBlbmljX3BvbGxfY29udHJvbGxlcihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21haW4uYz0yNTI4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgZW5pY19uZXRkZXZfZHluYW1pY19vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfbWFpbi5jLTI1NDItXFx0Lm5kb19zZXRfdmZfbWFjXFx0XFx0PSBlbmljX3NldF92Zl9tYWMsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21haW4uYzoyNTQzOiNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19tYWluLmMtMjU0NC1cXHQubmRvX3BvbGxfY29udHJvbGxlclxcdD0gZW5pY19wb2xsX2NvbnRyb2xsZXIsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21haW4uYy0yNTQ1LSNlbmRpZlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19tYWluLmM6MjU0NjojaWZkZWYgQ09ORklHX1JGU19BQ0NFTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19tYWluLmMtMjU0Ny1cXHQubmRvX3J4X2Zsb3dfc3RlZXJcXHQ9IGVuaWNfcnhfZmxvd19zdGVlcixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19tYWluLmM9MjU1Mj1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGVuaWNfbmV0ZGV2X29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19tYWluLmMtMjU2Ni1cXHQubmRvX3NldF92Zl9tYWNcXHRcXHQ9IGVuaWNfc2V0X3ZmX21hYyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfbWFpbi5jOjI1Njc6I2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21haW4uYy0yNTY4LVxcdC5uZG9fcG9sbF9jb250cm9sbGVyXFx0PSBlbmljX3BvbGxfY29udHJvbGxlcixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfbWFpbi5jLTI1NjktI2VuZGlmXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21haW4uYzoyNTcwOiNpZmRlZiBDT05GSUdfUkZTX0FDQ0VMXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21haW4uYy0yNTcxLVxcdC5uZG9fcnhfZmxvd19zdGVlclxcdD0gZW5pY19yeF9mbG93X3N0ZWVyLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21haW4uYz0yNzYxPXN0YXRpYyB2b2lkIGVuaWNfaW91bm1hcChzdHJ1Y3QgZW5pYyAqZW5pYylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19tYWluLmMtMjc2OS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfbWFpbi5jOjI3NzA6I2lmZGVmIENPTkZJR19QQ0lfSU9WXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21haW4uYy0yNzcxLXN0YXRpYyB2b2lkIGVuaWNfc3Jpb3ZfZGV0ZWN0X3ZmX3R5cGUoc3RydWN0IGVuaWMgKmVuaWMpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfbWFpbi5jPTI5NTA9c3RhdGljIGludCBlbmljX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21haW4uYy0yOTU3LVxcdGludCBlcnI7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21haW4uYzoyOTU4OiNpZmRlZiBDT05GSUdfUENJX0lPVlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19tYWluLmMtMjk1OS1cXHRpbnQgcG9zID0gMDtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19tYWluLmMtMzA0NC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfbWFpbi5jOjMwNDU6I2lmZGVmIENPTkZJR19QQ0lfSU9WXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21haW4uYy0zMDQ2LVxcdGVuaWNfc3Jpb3ZfZGV0ZWN0X3ZmX3R5cGUoZW5pYyk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfbWFpbi5jLTMyNzUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21haW4uYzozMjc2OiNpZmRlZiBDT05GSUdfUkZTX0FDQ0VMXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21haW4uYy0zMjc3LVxcdG5ldGRldi1cXHUwMDNlaHdfZmVhdHVyZXMgfD0gTkVUSUZfRl9OVFVQTEU7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfbWFpbi5jLTMzMTYtZXJyX291dF9kaXNhYmxlX3NyaW92X3BwOlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19tYWluLmM6MzMxNzojaWZkZWYgQ09ORklHX1BDSV9JT1ZcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfbWFpbi5jLTMzMTgtXFx0aWYgKGVuaWNfc3Jpb3ZfZW5hYmxlZChlbmljKSkge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21haW4uYz0zMzM3PXN0YXRpYyB2b2lkIGVuaWNfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21haW4uYy0zMzcwLVxcdFxcdGNhbmNlbF93b3JrX3N5bmMoXFx1MDAyNmVuaWMtXFx1MDAzZWxpbmtfbm90aWZ5X3dvcmspO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19tYWluLmM6MzM3MTojaWZkZWYgQ09ORklHX1BDSV9JT1ZcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfbWFpbi5jLTMzNzItXFx0XFx0aWYgKGVuaWNfc3Jpb3ZfZW5hYmxlZChlbmljKSkge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX3BwLmM9MjM9aW50IGVuaWNfaXNfdmFsaWRfcHBfdmYoc3RydWN0IGVuaWMgKmVuaWMsIGludCB2ZiwgaW50ICplcnIpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfcHAuYy0yNS1cXHRpZiAodmYgIT0gUE9SVF9TRUxGX1ZGKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX3BwLmM6MjY6I2lmZGVmIENPTkZJR19QQ0lfSU9WXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX3BwLmMtMjctXFx0XFx0aWYgKGVuaWNfc3Jpb3ZfZW5hYmxlZChlbmljKSkge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy92bmljX2RldmNtZC5oPTY3PWVudW0gdm5pY19kZXZjbWRfY21kIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvdm5pY19kZXZjbWQuaC0yODYtXFx0ICogICAgICAgICAgICAgIDAgaWYgbm8gVklGLUNPTkZJRy1JTkZPIFRMViB3YXMgZXZlciByZWNlaXZlZC4gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL3ZuaWNfZGV2Y21kLmg6Mjg3OlxcdENNRF9DT05GSUdfSU5GT19HRVQgICAgID0gX0NNREMoX0NNRF9ESVJfUlcsIF9DTURfVlRZUEVfQUxMLCA0NCksXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy92bmljX2RldmNtZC5oLTI4OC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTg6NDI6MjMuMTQ1NjM5ODg5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTE3NzI2NTMzNTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqV29ydGggRnV6emluZyBBc3Nlc3NtZW50IGZvciBDaXNjbyBWSUMgKGVuaWMpIERyaXZlcioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCB0aGUgbmVlZCBmb3IgYENPTkZJR19QQ0lfSU9WYCBqdW1wcyBvdXQuIFRoZSBwYXRjaCBpdHNlbGYgaW50cm9kdWNlcyBgZW5pY19hZG1pbi5jYCBhbmQgYGVuaWNfbWJveC5jYCwgd2hpY2ggbWFrZXMgbWUgdGhpbmsgdGhpcyBpcyBhIHBvdGVudGlhbCBhcmVhIGZvciBmdXp6aW5nLiBUaGUga2V5IGhlcmUgaXMgd2hldGhlciB0aGlzIGRyaXZlciBpcyBhY3R1YWxseSByZWFjaGFibGUgaW4gYSBmdXp6aW5nIGVudmlyb25tZW50LlxuXG5JIHJlbWVtYmVyIHN5emthbGxlciBoYXMgYHN5el9wY2lfZGV2aWNlYCwgd2hpY2ggaXQgdXNlcyB0byBpbmplY3QgUENJIGRldmljZXMuIEhvd2V2ZXIsIEkgbmVlZCB0byBjaGVjayBpZiB0aGlzIHBhdGNoIGlzIHdvcnRoIGZ1enppbmcuIFRoZSBkb2N1bWVudGF0aW9uIHNheXMgdG8gY29uc2lkZXIgcmV0dXJuaW5nIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZSBjaGFuZ2VzIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgc3BlY2lmaWNhbGx5IG1lbnRpb25pbmcgUUVNVS4gSXMgdGhlIENpc2NvIFZJQyAoYGVuaWNgKSBlbXVsYXRlZCBpbiBRRU1VPyBJIGRvbid0IHRoaW5rIHNvLCBhbmQgYSBxdWljayBjaGVjayBvZiBRRU1VJ3Mgc3VwcG9ydGVkIGRldmljZXMgY29uZmlybXMgdGhhdC4gUUVNVSBzdXBwb3J0cyB0aGUgYGUxMDAwYCwgYGUxMDAwZWAsIGBydGw4MTM5YCwgYHZpcnRpby1uZXRgLCBgdm14bmV0M2AsIGBwY25ldGAsIGBuZTJrX3BjaWAsIGB0dWxpcGAsIGFuZCBgaTgyNTU5ZXJgIGJ1dCBub3QgYGVuaWNgLlxuXG5Ob3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb24gaXMgd2hldGhlciBzeXprYWxsZXIgaXRzZWxmIGVtdWxhdGVzIGBlbmljYC4gVGhlIGdvb2QgbmV3cyBpcyBzeXprYWxsZXIncyBgc3l6X3BjaWAgaXMgYSBnZW5lcmljIFBDSSBmdXp6ZXIgdGhhdCBjYW4gZW11bGF0ZSBBTlkgUENJIGRldmljZS4gSXQgZG9lcyB0aGlzIGJ5IGludGVyY2VwdGluZyBjb25maWcgc3BhY2UgYW5kIE1NSU8gcmVhZHMvd3JpdGVzLiBJdCdzIG5vdCBwZXJmZWN0IGVtdWxhdGlvbiwgYnV0IGl0IHByb3ZpZGVzIHJhbmRvbSBkYXRhIHRvIE1NSU8gcmVhZHMsIHdoaWNoIGlzIGVub3VnaCB0byByZWFjaCBkcml2ZXIgY29kZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBgZW5pY2AgaXMgc3VwcG9ydGVkIGJ5IHN5emthbGxlcidzIFBDSSBmdXp6ZXIuIEl0IGRvZXMgdGhhdCBieSBtYXRjaGluZyBQQ0kgSURzLiBJZiB0aGUgZHJpdmVyIGxvYWRzIGFuZCBiaW5kcyB0byB0aGUgaW5qZWN0ZWQgUENJIElELCBpdCB3aWxsIGZ1enogaXQuIFRoYXQgbWVhbnMgaXQgZG9lc24ndCBuZWVkIGRlZGljYXRlZCBlbXVsYXRpb24sIHNvIGl0IGlzIHJlYWNoYWJsZS5cblxuSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBgZW5pY2AgaXMgcmVhY2hhYmxlIGFuZCBpdCBpcywgdGhlcmVmb3JlIHRoZSBydWxlIG9mIFwiQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXCIgZG9lc24ndCBhcHBseS4gU3l6a2FsbGVyJ3MgUENJIGZ1enplciwgd2hpbGUgcHJvdmlkaW5nIGEgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgbWVjaGFuaXNtIHRvIGluamVjdCBQQ0kgZGV2aWNlcywgaXMgcHJpbWFyaWx5IGEgZnV6emVyLiBJdCdzIGRlc2lnbmVkIHRvIGV4cG9zZSB2dWxuZXJhYmlsaXRpZXMgYnkgZ2VuZXJhdGluZyByYW5kb20gaW5wdXQuXG5cblNvLCBzaW5jZSBpdCdzIHJlYWNoYWJsZSB2aWEgc3l6a2FsbGVyLCBJJ20gbGVhbmluZyB0b3dhcmRzIGBXb3J0aEZ1enppbmc9dHJ1ZWAuIElmIEkgcmV0dXJuIHRydWUsIEkgbmVlZCB0byBwcm92aWRlIGBGb2N1c1N5bWJvbHNgIGFuZCBgRW5hYmxlQ29uZmlnc2AuIEZvciBgRW5hYmxlQ29uZmlnc2AsIEknbGwgaW5jbHVkZSBgRU5JQ2AgYW5kIGBQQ0lfSU9WYC4gRm9yIGBGb2N1c1N5bWJvbHNgLCBJIHNob3VsZCBpbmNsdWRlOiBgZW5pY19hZG1pbl9jaGFubmVsX29wZW5gLCBgZW5pY19hZG1pbl9jaGFubmVsX2Nsb3NlYCwgYGVuaWNfYWRtaW5fcnFfY3Ffc2VydmljZWAsIGBlbmljX2FkbWluX3dxX2NxX3NlcnZpY2VgLCBgZW5pY19tYm94X3NlbmRfbXNnYCwgYGVuaWNfbWJveF92Zl9jYXBhYmlsaXR5X2NoZWNrYCwgYGVuaWNfbWJveF92Zl9yZWdpc3RlcmAsIGBlbmljX21ib3hfdmZfdW5yZWdpc3RlcmAsIGBlbmljX21ib3hfcmVjdl9oYW5kbGVyYCwgYGVuaWNfbWJveF9wZl9wcm9jZXNzX21zZ2AsIGFuZCBgZW5pY19tYm94X3ZmX3Byb2Nlc3NfbXNnYC4gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGBDT05GSUdfRU5JQ2AgaXMgZW5hYmxlZCwgYnV0IEkgY2FuIGFkZCBpdCB0byB0aGUgYEVuYWJsZUNvbmZpZ3NgLiBGaW5hbGx5LCB0aGUgcGF0Y2ggaXMgZnV6emFibGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzNTI5LCJPdXRwdXRUb2tlbnMiOjYxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODA5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE4OjQyOjM0LjkxODI5NjY1MVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NzM0OTE5MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKGludHx2b2lkfHVuc2lnbmVkIGludHxib29sfHN0YXRpYykgW2EtekEtWjAtOV9dK1xcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19hZG1pbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19hZG1pbi5jPTEwMD1zdGF0aWMgdW5zaWduZWQgaW50IGVuaWNfYWRtaW5fY3FfY29sb3Iodm9pZCAqY3FfZGVzYywgdW5zaWduZWQgaW50IGRlc2Nfc2l6ZSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19hZG1pbi5jLTEwNi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfYWRtaW4uYzoxMDc6dW5zaWduZWQgaW50IGVuaWNfYWRtaW5fd3FfY3Ffc2VydmljZShzdHJ1Y3QgZW5pYyAqZW5pYylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfYWRtaW4uYy0xMDgte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX2FkbWluLmM9MTMwPXN0YXRpYyB2b2lkIGVuaWNfYWRtaW5fbXNnX2VucXVldWUoc3RydWN0IGVuaWMgKmVuaWMsIHZvaWQgKmJ1ZixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19hZG1pbi5jLTE1Ni1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfYWRtaW4uYzoxNTc6dW5zaWduZWQgaW50IGVuaWNfYWRtaW5fcnFfY3Ffc2VydmljZShzdHJ1Y3QgZW5pYyAqZW5pYylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfYWRtaW4uYy0xNTgte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX2FkbWluLmM9NDg0PXN0YXRpYyB2b2lkIGVuaWNfYWRtaW5fbXNnX2RyYWluKHN0cnVjdCBlbmljICplbmljKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX2FkbWluLmMtNDk2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19hZG1pbi5jOjQ5NzppbnQgZW5pY19hZG1pbl9jaGFubmVsX29wZW4oc3RydWN0IGVuaWMgKmVuaWMpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX2FkbWluLmMtNDk4LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19hZG1pbi5jLTU4MC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfYWRtaW4uYzo1ODE6dm9pZCBlbmljX2FkbWluX2NoYW5uZWxfY2xvc2Uoc3RydWN0IGVuaWMgKmVuaWMpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX2FkbWluLmMtNTgyLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTg6NDI6MzQuOTk1NjUxNzA0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ4Njk0MjgwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQ29uc29saWRhdGluZyBgZW5pY19hZG1pbi5jYCBGdW5jdGlvbnMqKlxuXG5BbHJpZ2h0LCB0aGUgY29yZSBpZGVhIGhlcmUgaXMgdG8gc3RyYXRlZ2ljYWxseSBjb25zb2xpZGF0ZSB0aGUgZnVuY3Rpb25zIHdpdGhpbiBgZW5pY19hZG1pbi5jYC4gV2UncmUgbGlrZWx5IGRlYWxpbmcgd2l0aCBhIG5ldHdvcmsgZHJpdmVyLCBhbmQgdGhpcyBmaWxlIHByb2JhYmx5IGhvdXNlcyB0aGUgYWRtaW5pc3RyYXRpdmUgYW5kIGNvbnRyb2wgcGxhbmUgcm91dGluZXMgcmVsYXRlZCB0byB0aGUgRU5JQyAoRW5oYW5jZWQgTmV0d29yayBJbnRlcmZhY2UgQ2FyZCkuIFRoZSBtb3RpdmF0aW9uIGZvciB0aGlzIGNvbnNvbGlkYXRpb24gY291bGQgYmUgYW55IG51bWJlciBvZiB0aGluZ3MsIGJ1dCBnaXZlbiBvdXIgZXhwZXJpZW5jZSwgd2UncmUgbGlrZWx5IGxvb2tpbmcgdG8gaW1wcm92ZSBtYWludGFpbmFiaWxpdHksIGNvZGUgcmVhZGFiaWxpdHksIG9yIHBlcmhhcHMgc3RyZWFtbGluZSBhIHNwZWNpZmljIGZ1bmN0aW9uLiBXZSBjb3VsZCBiZSByZWZhY3RvcmluZyBleGlzdGluZyBjb2RlIHRvIHJlZHVjZSBkdXBsaWNhdGlvbi4gTWF5YmUgd2UncmUgY29uc29saWRhdGluZyBmdW5jdGlvbmFsaXRpZXMgdGhhdCBjdXJyZW50bHkgcmVzaWRlIGluIHZhcmlvdXMgZmlsZXMuIEl0IG1heSBhbHNvIGltcGx5IHdl4oCZcmUgbG9va2luZyB0byBzaW1wbGlmeSBvdXIgZHJpdmVyJ3MgY29udHJvbCBwYXRoIGFuZCByZWR1Y2UgdGhlIGNvZ25pdGl2ZSBsb2FkIGZvciBkZXZlbG9wZXJzIHdvcmtpbmcgb24gdGhpcyBwaWVjZS4gSXQgY291bGQgc2ltcGx5IGJlIGEgcHJlcmVxdWlzaXRlIGJlZm9yZSBmdXJ0aGVyIHJlZmFjdG9yaW5nIG9yIG1vZGlmaWNhdGlvbiB0byB0aGlzIGZpbGUuIEluIGFueSBldmVudCwgdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFyY2hpbmcgYXJjaGl0ZWN0dXJhbCBnb2FscyB3aWxsIGJlIGNyaXRpY2FsIGJlZm9yZSB3ZSBzdGFydCwgc28gYXMgdG8gY3JlYXRlIGEgd2VsbC1zdHJ1Y3R1cmVkIHBsYW4gdG8gYWNjb21wbGlzaCB0aGUgbmVjZXNzYXJ5IGNoYW5nZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1NjQ0LCJPdXRwdXRUb2tlbnMiOjYwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTg6NDI6MzguNDgyNTk2MzM0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDY2NTc3NTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXlthLXpBLVowLTlfXSsgW2EtekEtWjAtOV9dK1xcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19hZG1pbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19hZG1pbi5jPTQ4ND1zdGF0aWMgdm9pZCBlbmljX2FkbWluX21zZ19kcmFpbihzdHJ1Y3QgZW5pYyAqZW5pYylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19hZG1pbi5jLTQ5Ni1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfYWRtaW4uYzo0OTc6aW50IGVuaWNfYWRtaW5fY2hhbm5lbF9vcGVuKHN0cnVjdCBlbmljICplbmljKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19hZG1pbi5jLTQ5OC17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfYWRtaW4uYy01ODAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX2FkbWluLmM6NTgxOnZvaWQgZW5pY19hZG1pbl9jaGFubmVsX2Nsb3NlKHN0cnVjdCBlbmljICplbmljKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19hZG1pbi5jLTU4Mi17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE4OjQyOjM4LjU4OTI1OTQwM1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTQ3NDIwMTQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipSZWZpbmluZyB0aGUgUmVnZXggQXBwcm9hY2gqKlxuXG5IbW0sIHVwb24gY2xvc2VyIGluc3BlY3Rpb24sIHRoYXQgaW5pdGlhbCByZWd1bGFyIGV4cHJlc3Npb24gZm9yIGlkZW50aWZ5aW5nIHBvdGVudGlhbCBzdGF0aWMgYW5kIHZhcmlhYmxlIGRlY2xhcmF0aW9ucyBmZWx0IGEgdGFkIHRvbyBzcGVjaWZpYy4gSSBuZWVkIHRvIGJlIG1vcmUgZmxleGlibGUuIEluc3RlYWQgb2YgdGhlIHJlc3RyaWN0aXZlIHBhdHRlcm4gSSB3YXMgaW5pdGlhbGx5IGNvbnNpZGVyaW5nLCBJIHRoaW5rIGEgYnJvYWRlciBhcHByb2FjaCBpcyB3YXJyYW50ZWQuIE15IHRoaW5raW5nIGlzIHRvIHN3aXRjaCB0bzpcblxuKiAgIGBec3RhdGljIC4qYDogVGhpcyB3aWxsIGNhdGNoIGFueSBsaW5lIGJlZ2lubmluZyB3aXRoIFwic3RhdGljXCIgZm9sbG93ZWQgYnkgYW55dGhpbmcgZWxzZS4gVGhpcyBzaG91bGQgY292ZXIgdmFyaW91cyBzdGF0aWMgZGVjbGFyYXRpb25zIHJlZ2FyZGxlc3Mgb2YgdGhlIHNwZWNpZmljIHZhcmlhYmxlIHR5cGUgb3IgbW9kaWZpZXJzLlxuKiAgIGBeW2EtekEtWl0uKmA6IEFuZCwgdGhpcyBwYXR0ZXJuIHdpbGwgaGFuZGxlIHRoZSB2YXJpYWJsZXMuIFRoaXMgc2hvdWxkIGNhcHR1cmUgZGVjbGFyYXRpb25zIHRoYXQgYmVnaW4gd2l0aCBhIGxldHRlciAodXBwZXIgb3IgbG93ZXIgY2FzZSkgYW5kIGFyZSBmb2xsb3dlZCBieSBhbnl0aGluZy4gVGhpcyBzaG91bGQgdGFrZSBjYXJlIG9mIGFueSB2YXJpYWJsZSBkZWNsYXJhdGlvbiBzdGFydGluZyB3aXRoIGxldHRlciBvciB1bmRlcnNjb3JlLCB3aGljaCBpcyBhIGNvbW1vbiBuYW1pbmcgY29udmVudGlvbi5cblxuRXNzZW50aWFsbHksIEkgd2FudCB0byBtaW5pbWl6ZSBmYWxzZSBuZWdhdGl2ZXMgYW5kIHRoZW4gYWRkcmVzcyBhbnkgcG90ZW50aWFsIGZhbHNlIHBvc2l0aXZlcyB0aHJvdWdoIHBvc3QtcHJvY2Vzc2luZywgaW5zdGVhZCBvZiByaXNraW5nIG1pc3Npbmcgc29tZXRoaW5nIHVwIGZyb250LiBUaGlzIHNob3VsZCBzaW1wbGlmeSB0aGUgcmVnZXggc2lnbmlmaWNhbnRseSBhbmQgaW5jcmVhc2UgaXRzIG92ZXJhbGwgcmVsaWFiaWxpdHkgaW4gaWRlbnRpZnlpbmcgdGhlIHRhcmdldCBsaW5lcyBvZiBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjE2NSwiT3V0cHV0VG9rZW5zIjo2MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE4OjQyOjQyLjUzNjY4MjIzN1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA0Njc3NDU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5bYS16QS1aX10uKlxcXFwoW2EtekEtWjAtOV8qLCBdK1xcXFwpXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19hZG1pbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19hZG1pbi5jPTQxPXN0YXRpYyB2b2lkIGVuaWNfYWRtaW5fcnFfYnVmX2NsZWFuKHN0cnVjdCB2bmljX3JxICpycSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19hZG1pbi5jLTU0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19hZG1pbi5jOjU1OnN0YXRpYyBpbnQgZW5pY19hZG1pbl9ycV9wb3N0X29uZShzdHJ1Y3QgZW5pYyAqZW5pYywgZ2ZwX3QgZ2ZwKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19hZG1pbi5jLTU2LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19hZG1pbi5jLTgwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19hZG1pbi5jOjgxOnN0YXRpYyBpbnQgZW5pY19hZG1pbl9ycV9maWxsKHN0cnVjdCBlbmljICplbmljLCBnZnBfdCBnZnApXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX2FkbWluLmMtODIte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX2FkbWluLmMtOTQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX2FkbWluLmM6OTU6c3RhdGljIHZvaWQgZW5pY19hZG1pbl9ycV9kcmFpbihzdHJ1Y3QgZW5pYyAqZW5pYylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfYWRtaW4uYy05Ni17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfYWRtaW4uYy05OS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfYWRtaW4uYzoxMDA6c3RhdGljIHVuc2lnbmVkIGludCBlbmljX2FkbWluX2NxX2NvbG9yKHZvaWQgKmNxX2Rlc2MsIHVuc2lnbmVkIGludCBkZXNjX3NpemUpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX2FkbWluLmMtMTAxLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19hZG1pbi5jLTEwNi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfYWRtaW4uYzoxMDc6dW5zaWduZWQgaW50IGVuaWNfYWRtaW5fd3FfY3Ffc2VydmljZShzdHJ1Y3QgZW5pYyAqZW5pYylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfYWRtaW4uYy0xMDgte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX2FkbWluLmM9MTMwPXN0YXRpYyB2b2lkIGVuaWNfYWRtaW5fbXNnX2VucXVldWUoc3RydWN0IGVuaWMgKmVuaWMsIHZvaWQgKmJ1ZixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19hZG1pbi5jLTE1Ni1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfYWRtaW4uYzoxNTc6dW5zaWduZWQgaW50IGVuaWNfYWRtaW5fcnFfY3Ffc2VydmljZShzdHJ1Y3QgZW5pYyAqZW5pYylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfYWRtaW4uYy0xNTgte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX2FkbWluLmMtMjU0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19hZG1pbi5jOjI1NTpzdGF0aWMgaXJxcmV0dXJuX3QgZW5pY19hZG1pbl9pc3JfbXNpeChpbnQgaXJxLCB2b2lkICpkYXRhKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19hZG1pbi5jLTI1Ni17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfYWRtaW4uYy0yNjMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX2FkbWluLmM6MjY0OnN0YXRpYyB2b2lkIGVuaWNfYWRtaW5fbXNnX3dvcmtfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX2FkbWluLmMtMjY1LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19hZG1pbi5jLTI4Mi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfYWRtaW4uYzoyODM6c3RhdGljIHZvaWQgZW5pY19hZG1pbl9wb2xsX3dvcmtfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX2FkbWluLmMtMjg0LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19hZG1pbi5jLTMwMC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfYWRtaW4uYzozMDE6c3RhdGljIGludCBlbmljX2FkbWluX3NldHVwX2ludHIoc3RydWN0IGVuaWMgKmVuaWMpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX2FkbWluLmMtMzAyLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19hZG1pbi5jLTM1Ni1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfYWRtaW4uYzozNTc6c3RhdGljIHZvaWQgZW5pY19hZG1pbl90ZWFyZG93bl9pbnRyKHN0cnVjdCBlbmljICplbmljKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19hZG1pbi5jLTM1OC17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfYWRtaW4uYy0zNjYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX2FkbWluLmM6MzY3OnN0YXRpYyBpbnQgZW5pY19hZG1pbl9xcF90eXBlX3NldChzdHJ1Y3QgZW5pYyAqZW5pYywgdTMyIGVuYWJsZSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfYWRtaW4uYy0zNjgte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX2FkbWluLmMtMzc5LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19hZG1pbi5jOjM4MDpzdGF0aWMgaW50IGVuaWNfYWRtaW5fYWxsb2NfcmVzb3VyY2VzKHN0cnVjdCBlbmljICplbmljKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19hZG1pbi5jLTM4MS17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfYWRtaW4uYy00NDMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX2FkbWluLmM6NDQ0OnN0YXRpYyB2b2lkIGVuaWNfYWRtaW5fZnJlZV9yZXNvdXJjZXMoc3RydWN0IGVuaWMgKmVuaWMpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX2FkbWluLmMtNDQ1LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19hZG1pbi5jLTQ1Mi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfYWRtaW4uYzo0NTM6c3RhdGljIHZvaWQgZW5pY19hZG1pbl9pbml0X3Jlc291cmNlcyhzdHJ1Y3QgZW5pYyAqZW5pYylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfYWRtaW4uYy00NTQte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX2FkbWluLmMtNDgzLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19hZG1pbi5jOjQ4NDpzdGF0aWMgdm9pZCBlbmljX2FkbWluX21zZ19kcmFpbihzdHJ1Y3QgZW5pYyAqZW5pYylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfYWRtaW4uYy00ODUte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX2FkbWluLmMtNDk2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19hZG1pbi5jOjQ5NzppbnQgZW5pY19hZG1pbl9jaGFubmVsX29wZW4oc3RydWN0IGVuaWMgKmVuaWMpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX2FkbWluLmMtNDk4LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19hZG1pbi5jLTU4MC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfYWRtaW4uYzo1ODE6dm9pZCBlbmljX2FkbWluX2NoYW5uZWxfY2xvc2Uoc3RydWN0IGVuaWMgKmVuaWMpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX2FkbWluLmMtNTgyLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTg6NDI6NDIuNjQxMzY2NDU3WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5NTI5OTUyOTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkdldHRpbmcgRG93biB0byBCdXNpbmVzcyB3aXRoIGBlbmljX21ib3guY2AqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbi4gSSBuZWVkIHRvIHB1bGwgc29tZSBmdW5jdGlvbmFsaXR5IGZyb20gYGVuaWNfbWJveC5jYC4gSSdtIGdvaW5nIHRvIHN0YXJ0IHRoZXJlLCBmb2N1c2luZyBvbiB0aGUgbWFpbGJveCBpbnRlcmFjdGlvbnMsIGxpa2VseSBmb3IgY29uZmlndXJhdGlvbiwgc3RhdHVzIHF1ZXJpZXMsIG9yIGNvbW1hbmQgZXhlY3V0aW9uIHdpdGhpbiB0aGUgRW5pYyBkcml2ZXIuIFRoaXMgc3VnZ2VzdHMgdGhhdCBJJ20gZWl0aGVyIHdvcmtpbmcgb24gYSBtb2RpZmljYXRpb24gdG8gdGhlIEVuaWMgZHJpdmVyIGl0c2VsZiwgb3IgcGVyaGFwcyBJJ20gZGVidWdnaW5nIGludGVyYWN0aW9ucyBhbmQgbmVlZGluZyB0byB0cmFjZSB0aHJvdWdoIHRoZSBtYWlsYm94IHByb3RvY29sLiBUaGUgZXhhY3QgZnVuY3Rpb25zIEkgbmVlZCB3aWxsIGRlcGVuZCBvbiB0aGUgdGFzayBhdCBoYW5kLCBidXQgdGhpcyBpcyBjbGVhcmx5IHRoZSBzdGFydGluZyBwb2ludCB0byB1bmRlcnN0YW5kIHRoZSBFbmljJ3MgbG93IGxldmVsIGNvbW11bmljYXRpb25zLiBMZXTigJlzIGdldCB0byBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzgyMDksIk91dHB1dFRva2VucyI6NjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxODo0Mjo0NS41OTQzNjQ3NThaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk1MTc2ODIxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5bYS16QS1aX10uKlxcXFwoW2EtekEtWjAtOV8qLCBdK1xcXFwpXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19tYm94LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21ib3guYz0zMT1pbnQgZW5pY19tYm94X3NlbmRfbXNnKHN0cnVjdCBlbmljICplbmljLCB1OCBtc2dfdHlwZSwgdTE2IGRzdF92bmljX2lkLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21ib3guYy0xMzgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21ib3guYzoxMzk6c3RhdGljIGludCBlbmljX21ib3hfd2FpdF9yZXBseShzdHJ1Y3QgZW5pYyAqZW5pYywgdW5zaWduZWQgbG9uZyB0aW1lb3V0X21zKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19tYm94LmMtMTQwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19tYm94LmMtMTQ4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19tYm94LmM6MTQ5OmludCBlbmljX21ib3hfc2VuZF9saW5rX3N0YXRlKHN0cnVjdCBlbmljICplbmljLCB1MTYgdmZfaWQsIHUzMiBsaW5rX3N0YXRlKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19tYm94LmMtMTUwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19tYm94LmM9MzY1PXN0YXRpYyB2b2lkIGVuaWNfbWJveF92Zl9oYW5kbGVfdW5yZWdpc3Rlcl9yZXBseShzdHJ1Y3QgZW5pYyAqZW5pYyxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19tYm94LmMtMzg3LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19tYm94LmM6Mzg4OnN0YXRpYyB2b2lkIGVuaWNfbWJveF92Zl9oYW5kbGVfbGlua19zdGF0ZShzdHJ1Y3QgZW5pYyAqZW5pYywgdm9pZCAqcGF5bG9hZClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfbWJveC5jLTM4OS17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfbWJveC5jPTQ4MD1zdGF0aWMgdm9pZCBlbmljX21ib3hfcmVjdl9oYW5kbGVyKHN0cnVjdCBlbmljICplbmljLCB2b2lkICpidWYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfbWJveC5jLTUzNC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfbWJveC5jOjUzNTppbnQgZW5pY19tYm94X3ZmX2NhcGFiaWxpdHlfY2hlY2soc3RydWN0IGVuaWMgKmVuaWMpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21ib3guYy01MzYte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21ib3guYy01NjktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21ib3guYzo1NzA6aW50IGVuaWNfbWJveF92Zl9yZWdpc3RlcihzdHJ1Y3QgZW5pYyAqZW5pYylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfbWJveC5jLTU3MS17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfbWJveC5jLTU5OC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfbWJveC5jOjU5OTppbnQgZW5pY19tYm94X3ZmX3VucmVnaXN0ZXIoc3RydWN0IGVuaWMgKmVuaWMpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21ib3guYy02MDAte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21ib3guYy02MjQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21ib3guYzo2MjU6dm9pZCBlbmljX21ib3hfaW5pdChzdHJ1Y3QgZW5pYyAqZW5pYylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfbWJveC5jLTYyNi17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE4OjQyOjQ1LjY4OTU0NjA5OVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTcyNzExODIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGJhY2sgaW4uIE15IGd1dCBmZWVsaW5nIHRlbGxzIG1lIHRoZSBhbnN3ZXIgbGllcyB3aXRoaW4gdGhlIG1haWxib3ggcHJvY2Vzc2luZy5cblxuKipSZXZpc2l0aW5nIGVuaWNfbWJveC5jKipcblxuSSBuZWVkIHRvIGNpcmNsZSBiYWNrIHRvIGBlbmljX21ib3guY2AuIEkgaGF2ZSBhIG5hZ2dpbmcgZmVlbGluZyB0aGUgY29yZSBsb2dpYyBmb3IgcHJvY2Vzc2luZyBtZXNzYWdlcyBpcyB0aGVyZSwgYW5kIEkgbmVlZCB0byByZS1leGFtaW5lIHRoZSBgZW5pY19tYm94X3BmX3Byb2Nlc3NfbXNnYCBhbmQgYGVuaWNfbWJveF92Zl9wcm9jZXNzX21zZ2AgZnVuY3Rpb25zIHNwZWNpZmljYWxseS4gVGltZSB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgdGhlIFBGIGFuZCBWRiBtYWlsYm94ZXMgYXJlIGhhbmRsZWQuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIHNvbWV0aGluZyBjcnVjaWFsIGluIHRoZWlyIHJlc3BlY3RpdmUgbWVzc2FnZSBwcm9jZXNzaW5nIGZsb3dzLiBMZXQncyBzZWUgaWYgYSBzZWNvbmQgbG9vayByZXZlYWxzIGFueSBvdmVybG9va2VkIGRldGFpbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzkyMzgsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxODo0Mjo0OC44NjIyNjEyNTlaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyODYzNzY0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwcm9jZXNzX21zZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfbWJveC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19tYm94LmM9MjI4PXN0YXRpYyBpbnQgZW5pY19tYm94X3BmX2hhbmRsZV91bnJlZ2lzdGVyKHN0cnVjdCBlbmljICplbmljLCB2b2lkICptc2csXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfbWJveC5jLTI1OC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfbWJveC5jOjI1OTpzdGF0aWMgdm9pZCBlbmljX21ib3hfcGZfcHJvY2Vzc19tc2coc3RydWN0IGVuaWMgKmVuaWMsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21ib3guYy0yNjAtXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgZW5pY19tYm94X2hkciAqaGRyLCB2b2lkICpwYXlsb2FkKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21ib3guYz00MTk9c3RhdGljIGJvb2wgZW5pY19tYm94X3ZmX3BheWxvYWRfb2soc3RydWN0IGVuaWMgKmVuaWMsIHU4IG1zZ190eXBlLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21ib3guYy00MzAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21ib3guYzo0MzE6c3RhdGljIHZvaWQgZW5pY19tYm94X3ZmX3Byb2Nlc3NfbXNnKHN0cnVjdCBlbmljICplbmljLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19tYm94LmMtNDMyLVxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGVuaWNfbWJveF9oZHIgKmhkciwgdm9pZCAqcGF5bG9hZCxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19tYm94LmM9NDgwPXN0YXRpYyB2b2lkIGVuaWNfbWJveF9yZWN2X2hhbmRsZXIoc3RydWN0IGVuaWMgKmVuaWMsIHZvaWQgKmJ1ZixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19tYm94LmMtNTE4LVxcdGlmIChlbmljLVxcdTAwM2V2Zl9zdGF0ZSkge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19tYm94LmM6NTE5OlxcdFxcdGVuaWNfbWJveF9wZl9wcm9jZXNzX21zZyhlbmljLCBoZHIsIHBheWxvYWQpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19tYm94LmMtNTIwLVxcdH0gZWxzZSBpZiAobGUxNl90b19jcHUoaGRyLVxcdTAwM2VzcmNfdm5pY19pZCkgPT0gRU5JQ19NQk9YX0RTVF9QRikge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21ib3guYy01MjUtXFx0XFx0ICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21ib3guYzo1MjY6XFx0XFx0ZW5pY19tYm94X3ZmX3Byb2Nlc3NfbXNnKGVuaWMsIGhkciwgcGF5bG9hZCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfbWJveC5jLTUyNy1cXHRcXHRcXHRcXHRcXHQgbXNnX2xlbiAtICh1MTYpc2l6ZW9mKCpoZHIpKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTg6NDI6NDguOTkwOTA3NTk3WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc5MDk5NDAyNDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBDaXNjbyBWSUMgRXRoZXJuZXQgTklDIERyaXZlciBQYXRjaCoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyBpbnRyb2R1Y2luZyBzb21lICpzaWduaWZpY2FudCogZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwsIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgdGhlIENpc2NvIFZJQyBFdGhlcm5ldCBOSUMgZHJpdmVyLCBgZW5pY2AuIEl0IGxvb2tzIGxpa2Ugd2UncmUgZGVhbGluZyB3aXRoIGEgbmV3IGFkbWluIGNoYW5uZWwgYW5kIG1haWxib3ggcHJvdG9jb2wgZGVzaWduZWQgZm9yIGNvbW11bmljYXRpb24gYmV0d2VlbiB0aGUgUGh5c2ljYWwgRnVuY3Rpb24gKFBGKSBhbmQgVmlydHVhbCBGdW5jdGlvbnMgKFZGcykuIEdpdmVuIHRoaXMgbW9kaWZpY2F0aW9uIG9mIGNvcmUgZHJpdmVyIGxvZ2ljLCB0aGlzIGRlZmluaXRlbHkgd2FycmFudHMgY2xvc2VyIGluc3BlY3Rpb24gYW5kIEknbSB0aGlua2luZyBzeXprYWxsZXIncyBQQ0kgZnV6emluZyBjYXBhYmlsaXRpZXMgYXJlIGdvaW5nIHRvIGJlIHZlcnkgcmVsZXZhbnQgaGVyZS4gVGhpcyBpcyByaXBlIGZvciBmdXp6aW5nLlxuXG5NeSBwcmltYXJ5IGZvY3VzLCBhcyBhbHdheXMsIGlzIHRvIGlkZW50aWZ5IHRoZSBjcml0aWNhbCBmdW5jdGlvbnMgdGhhdCBoYW5kbGUgdGhpcyBuZXcgUEYtVkYgY29tbXVuaWNhdGlvbi4gQmFzZWQgb24gdGhlIGRvY3VtZW50YXRpb24sIHRoZSBcIkZvY3VzU3ltYm9sc1wiIGFyZSB0aGUga2V5IHRvIHVubG9ja2luZyB0aGlzIG5ldyBmdW5jdGlvbmFsaXR5LiBMZXQncyBtYWtlIHN1cmUgSSd2ZSBnb3QgdGhlbSBhbGw6XG5cbiogICBgZW5pY19hZG1pbl9jaGFubmVsX29wZW5gXG4qICAgYGVuaWNfYWRtaW5fY2hhbm5lbF9jbG9zZWBcbiogICBgZW5pY19hZG1pbl93cV9jcV9zZXJ2aWNlYFxuKiAgIGBlbmljX2FkbWluX3JxX2NxX3NlcnZpY2VgXG4qICAgYGVuaWNfbWJveF9zZW5kX21zZ2BcbiogICBgZW5pY19tYm94X3ZmX2NhcGFiaWxpdHlfY2hlY2tgXG4qICAgYGVuaWNfbWJveF92Zl9yZWdpc3RlcmBcbiogICBgZW5pY19tYm94X3ZmX3VucmVnaXN0ZXJgXG4qICAgYGVuaWNfbWJveF9yZWN2X2hhbmRsZXJgXG4qICAgYGVuaWNfbWJveF9wZl9wcm9jZXNzX21zZ2BcbiogICBgZW5pY19tYm94X3ZmX3Byb2Nlc3NfbXNnYFxuXG5Eb3VibGUtY2hlY2tpbmcsIGl0IGxvb2tzIGxpa2UgYENPTkZJR19FTklDYCBhbmQgYENPTkZJR19QQ0lfSU9WYCBhcmUgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucyB0byBlbmFibGUgdGhpcy4gTGV0J3MgbWFrZSBzdXJlIEknbSB1c2luZyB0aGUgcmlnaHQgbmFtZXMuIFllcCwgYFBDSV9JT1ZgIGlzIGluZGVlZCB0aGUgY29ycmVjdCBuYW1lIGZvciB0aGF0IGZlYXR1cmUuIEFuZCBgRU5JQ2AgaXMgd2hhdCBlbmFibGVzIHRoZSBgZW5pY2AgZHJpdmVyLiBHb29kLCBnb29kLlxuXG5XaXRoIHRoaXMgYW5hbHlzaXMgY29tcGxldGUsIEknbSBjb25maWRlbnQgaW4gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgcGF0Y2guIFRpbWUgdG8gY29uc3RydWN0IHRoZSBzZXQtcmVzdWx0cyBmaWxlIHRvIGNvbnRpbnVlIHRlc3RpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwMDYxLCJPdXRwdXRUb2tlbnMiOjIxMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxODo0Mjo1Ni45MDA4NTA3NDVaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTgzMzg2NzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVOSUNcIixcbiAgICBcIlBDSV9JT1ZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJlbmljX2FkbWluX2NoYW5uZWxfb3BlblwiLFxuICAgIFwiZW5pY19hZG1pbl9jaGFubmVsX2Nsb3NlXCIsXG4gICAgXCJlbmljX2FkbWluX3dxX2NxX3NlcnZpY2VcIixcbiAgICBcImVuaWNfYWRtaW5fcnFfY3Ffc2VydmljZVwiLFxuICAgIFwiZW5pY19tYm94X3NlbmRfbXNnXCIsXG4gICAgXCJlbmljX21ib3hfdmZfY2FwYWJpbGl0eV9jaGVja1wiLFxuICAgIFwiZW5pY19tYm94X3ZmX3JlZ2lzdGVyXCIsXG4gICAgXCJlbmljX21ib3hfdmZfdW5yZWdpc3RlclwiLFxuICAgIFwiZW5pY19tYm94X3JlY3ZfaGFuZGxlclwiLFxuICAgIFwiZW5pY19tYm94X3BmX3Byb2Nlc3NfbXNnXCIsXG4gICAgXCJlbmljX21ib3hfdmZfcHJvY2Vzc19tc2dcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGFkbWluIGNoYW5uZWwgYW5kIG1haWxib3ggcHJvdG9jb2wgZm9yIFBGLVZGIGNvbW11bmljYXRpb24gaW4gdGhlIENpc2NvIFZJQyBFdGhlcm5ldCBOSUMgZHJpdmVyIChlbmljKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUgZHJpdmVyIGxvZ2ljIGFuZCBjYW4gYmUgdGVzdGVkIHVzaW5nIHN5emthbGxlcidzIFBDSSBmdXp6aW5nIGNhcGFiaWxpdGllcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFTklDXCIsXG4gICAgXCJQQ0lfSU9WXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZW5pY19hZG1pbl9jaGFubmVsX29wZW5cIixcbiAgICBcImVuaWNfYWRtaW5fY2hhbm5lbF9jbG9zZVwiLFxuICAgIFwiZW5pY19hZG1pbl93cV9jcV9zZXJ2aWNlXCIsXG4gICAgXCJlbmljX2FkbWluX3JxX2NxX3NlcnZpY2VcIixcbiAgICBcImVuaWNfbWJveF9zZW5kX21zZ1wiLFxuICAgIFwiZW5pY19tYm94X3ZmX2NhcGFiaWxpdHlfY2hlY2tcIixcbiAgICBcImVuaWNfbWJveF92Zl9yZWdpc3RlclwiLFxuICAgIFwiZW5pY19tYm94X3ZmX3VucmVnaXN0ZXJcIixcbiAgICBcImVuaWNfbWJveF9yZWN2X2hhbmRsZXJcIixcbiAgICBcImVuaWNfbWJveF9wZl9wcm9jZXNzX21zZ1wiLFxuICAgIFwiZW5pY19tYm94X3ZmX3Byb2Nlc3NfbXNnXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBhZG1pbiBjaGFubmVsIGFuZCBtYWlsYm94IHByb3RvY29sIGZvciBQRi1WRiBjb21tdW5pY2F0aW9uIGluIHRoZSBDaXNjbyBWSUMgRXRoZXJuZXQgTklDIGRyaXZlciAoZW5pYykuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGRyaXZlciBsb2dpYyBhbmQgY2FuIGJlIHRlc3RlZCB1c2luZyBzeXprYWxsZXIncyBQQ0kgZnV6emluZyBjYXBhYmlsaXRpZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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:nil,}