Name: series-workflow64rfd Phase: Succeeded StartedAt: 2026-06-30 09:07:39 +0000 UTC FinishedAt: 2026-06-30 13:30:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow64rfd[0] Phase: Succeeded StartedAt: 2026-06-30 09:07:39 +0000 UTC FinishedAt: 2026-06-30 09:29:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow64rfd[0].run-triage Phase: Succeeded StartedAt: 2026-06-30 09:07:39 +0000 UTC FinishedAt: 2026-06-30 09:29:57 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "1398b1014909618f65ff6bcebcb2ee5ccd44fdc0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NFC", "NFC_NCI", "NFC_VIRTUAL_NCI" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "1398b1014909618f65ff6bcebcb2ee5ccd44fdc0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NFC", "NFC_NCI", "NFC_VIRTUAL_NCI" ], "series_id": "dd88a4e9-9d49-42de-9e06-843511f3fdca" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "nci_nfcc_loopback", "nci_transceive", "nci_send_data", "nci_rx_data_packet", "nci_hci_send_cmd", "nci_hci_set_param", "nci_hci_get_param", "nci_core_conn_create_rsp_packet", "nci_core_conn_close_rsp_packet", "nci_rf_disc_rsp_packet", "nci_core_conn_credits_ntf_packet", "nci_rf_intf_activated_ntf_packet", "nci_rf_deactivate_ntf_packet" ], "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+CgkJCTx0ZD4yMDI2LzA2LzMwIDA5OjI1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GQyYjMzQ7LAogICAgJiMzNDtORkNfTkNJJiMzNDssCiAgICAmIzM0O05GQ19WSVJUVUFMX05DSSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25jaV9uZmNjX2xvb3BiYWNrJiMzNDssCiAgICAmIzM0O25jaV90cmFuc2NlaXZlJiMzNDssCiAgICAmIzM0O25jaV9zZW5kX2RhdGEmIzM0OywKICAgICYjMzQ7bmNpX3J4X2RhdGFfcGFja2V0JiMzNDssCiAgICAmIzM0O25jaV9oY2lfc2VuZF9jbWQmIzM0OywKICAgICYjMzQ7bmNpX2hjaV9zZXRfcGFyYW0mIzM0OywKICAgICYjMzQ7bmNpX2hjaV9nZXRfcGFyYW0mIzM0OywKICAgICYjMzQ7bmNpX2NvcmVfY29ubl9jcmVhdGVfcnNwX3BhY2tldCYjMzQ7LAogICAgJiMzNDtuY2lfY29yZV9jb25uX2Nsb3NlX3JzcF9wYWNrZXQmIzM0OywKICAgICYjMzQ7bmNpX3JmX2Rpc2NfcnNwX3BhY2tldCYjMzQ7LAogICAgJiMzNDtuY2lfY29yZV9jb25uX2NyZWRpdHNfbnRmX3BhY2tldCYjMzQ7LAogICAgJiMzNDtuY2lfcmZfaW50Zl9hY3RpdmF0ZWRfbnRmX3BhY2tldCYjMzQ7LAogICAgJiMzNDtuY2lfcmZfZGVhY3RpdmF0ZV9udGZfcGFja2V0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGNvbmN1cnJlbmN5IGlzc3VlcyBpbiB0aGUgTkZDIE5DSSBjb3JlIGJ5IGludHJvZHVjaW5nIGEgc3BpbmxvY2sgdG8gcHJvdGVjdCBjb25uZWN0aW9uIGluZm8gbGlzdHMgYW5kIHBvaW50ZXJzLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIGRhdGEgdHJhbnNtaXNzaW9uLCByZWNlcHRpb24sIGFuZCBIQ0kgY29tbWFuZCBoYW5kbGluZywgd2hpY2ggYXJlIHJlYWNoYWJsZSB2aWEgdGhlIHZpcnR1YWwgTkNJIGRyaXZlci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAwOToyNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGFlNTVlODhkN2E0ZjcxMDViNDQ4NjgyMmUzYWRmNTM4OGYxYjhhMDBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1biAzMCAwOToyNToyOSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25mYy9zdC1uY2kvc2UuYyBiL2RyaXZlcnMvbmZjL3N0LW5jaS9zZS5jXG5pbmRleCA2MDdlYzc2OGViN2I0Yy4uMWY4ZTIyNjVlMjBiMDcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25mYy9zdC1uY2kvc2UuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZmMvc3QtbmNpL3NlLmNcbkBAIC01NDgsNiAmIzQzOzU0OCw3IEBAIHN0YXRpYyBpbnQgc3RfbmNpX2hjaV9uZXR3b3JrX2luaXQoc3RydWN0IG5jaV9kZXYgKm5kZXYpXG4gXHRzdHJ1Y3QgY29yZV9jb25uX2NyZWF0ZV9kZXN0X3NwZWNfcGFyYW1zICpkZXN0X3BhcmFtcztcbiBcdHN0cnVjdCBkZXN0X3NwZWNfcGFyYW1zIHNwZWNfcGFyYW1zO1xuIFx0c3RydWN0IG5jaV9jb25uX2luZm8gICAgKmNvbm5faW5mbztcbiYjNDM7XHR1OCBuZmNlZV9pZDtcbiBcdGludCByLCBkZXZfbnVtO1xuIFxuIFx0ZGVzdF9wYXJhbXMgPVxuQEAgLTU2OSw5ICYjNDM7NTcwLDE0IEBAIHN0YXRpYyBpbnQgc3RfbmNpX2hjaV9uZXR3b3JrX2luaXQoc3RydWN0IG5jaV9kZXYgKm5kZXYpXG4gXHRpZiAociAhPSBOQ0lfU1RBVFVTX09LKVxuIFx0XHRnb3RvIGZyZWVfZGVzdF9wYXJhbXM7XG4gXG4mIzQzO1x0c3Bpbl9sb2NrX2JoKFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xuIFx0Y29ubl9pbmZvID0gbmRldi1cdTAwM2VoY2lfZGV2LVx1MDAzZWNvbm5faW5mbztcbi1cdGlmICghY29ubl9pbmZvKVxuJiM0MztcdGlmICghY29ubl9pbmZvKSB7XG4mIzQzO1x0XHRzcGluX3VubG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbiBcdFx0Z290byBmcmVlX2Rlc3RfcGFyYW1zO1xuJiM0MztcdH1cbiYjNDM7XHRuZmNlZV9pZCA9IGNvbm5faW5mby1cdTAwM2VkZXN0X3BhcmFtcy1cdTAwM2VpZDtcbiYjNDM7XHRzcGluX3VubG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbiBcbiBcdG5kZXYtXHUwMDNlaGNpX2Rldi1cdTAwM2Vpbml0X2RhdGEuZ2F0ZV9jb3VudCA9IEFSUkFZX1NJWkUoc3RfbmNpX2dhdGVzKTtcbiBcdG1lbWNweShuZGV2LVx1MDAzZWhjaV9kZXYtXHUwMDNlaW5pdF9kYXRhLmdhdGVzLCBzdF9uY2lfZ2F0ZXMsXG5AQCAtNjAxLDEzICYjNDM7NjA3LDkgQEAgc3RhdGljIGludCBzdF9uY2lfaGNpX25ldHdvcmtfaW5pdChzdHJ1Y3QgbmNpX2RldiAqbmRldilcbiBcdCAqIEhDSSB3aWxsIGJlIHVzZWQgaGVyZSBvbmx5IGZvciBwcm9wcmlldGFyeSBjb21tYW5kcy5cbiBcdCAqL1xuIFx0aWYgKHRlc3RfYml0KFNUX05DSV9GQUNUT1JZX01PREUsIFx1MDAyNmluZm8tXHUwMDNlZmxhZ3MpKVxuLVx0XHRyID0gbmNpX25mY2VlX21vZGVfc2V0KG5kZXYsXG4tXHRcdFx0XHQgICAgICAgbmRldi1cdTAwM2VoY2lfZGV2LVx1MDAzZWNvbm5faW5mby1cdTAwM2VkZXN0X3BhcmFtcy1cdTAwM2VpZCxcbi1cdFx0XHRcdCAgICAgICBOQ0lfTkZDRUVfRElTQUJMRSk7XG4mIzQzO1x0XHRyID0gbmNpX25mY2VlX21vZGVfc2V0KG5kZXYsIG5mY2VlX2lkLCBOQ0lfTkZDRUVfRElTQUJMRSk7XG4gXHRlbHNlXG4tXHRcdHIgPSBuY2lfbmZjZWVfbW9kZV9zZXQobmRldixcbi1cdFx0XHRcdCAgICAgICBuZGV2LVx1MDAzZWhjaV9kZXYtXHUwMDNlY29ubl9pbmZvLVx1MDAzZWRlc3RfcGFyYW1zLVx1MDAzZWlkLFxuLVx0XHRcdFx0ICAgICAgIE5DSV9ORkNFRV9FTkFCTEUpO1xuJiM0MztcdFx0ciA9IG5jaV9uZmNlZV9tb2RlX3NldChuZGV2LCBuZmNlZV9pZCwgTkNJX05GQ0VFX0VOQUJMRSk7XG4gXG4gZnJlZV9kZXN0X3BhcmFtczpcbiBcdGtmcmVlKGRlc3RfcGFyYW1zKTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZmMvbmNpX2NvcmUuaCBiL2luY2x1ZGUvbmV0L25mYy9uY2lfY29yZS5oXG5pbmRleCA2NjRkNTA1OGU2NmUwMS4uYTViMTg2ZjI3M2Q5NzQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9uZmMvbmNpX2NvcmUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvbmZjL25jaV9jb3JlLmhcbkBAIC0xOSw2ICYjNDM7MTksNyBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ludGVycnVwdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2tidWZmLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvc3BpbmxvY2suaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3R0eS5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXHUwMDNjbmV0L25mYy9uZmMuaFx1MDAzZVxuQEAgLTIyNyw2ICYjNDM7MjI4LDggQEAgc3RydWN0IG5jaV9kZXYge1xuIFx0c3RydWN0IHNrX2J1ZmZfaGVhZFx0dHhfcTtcbiBcbiBcdHN0cnVjdCBtdXRleFx0XHRyZXFfbG9jaztcbiYjNDM7XHQvKiBTZXJpYWxpemVzIGNvbm5faW5mb19saXN0IGFuZCBjb25uX2luZm8gcG9pbnRlciBhbGlhcyB1cGRhdGVzLiAqL1xuJiM0MztcdHNwaW5sb2NrX3RcdFx0Y29ubl9pbmZvX2xvY2s7XG4gXHRzdHJ1Y3QgY29tcGxldGlvblx0cmVxX2NvbXBsZXRpb247XG4gXHRfX3UzMlx0XHRcdHJlcV9zdGF0dXM7XG4gXHRfX3UzMlx0XHRcdHJlcV9yZXN1bHQ7XG5AQCAtMzgyLDggJiM0MzszODUsMTEgQEAgdm9pZCBuY2lfY2xlYXJfdGFyZ2V0X2xpc3Qoc3RydWN0IG5jaV9kZXYgKm5kZXYpO1xuICNkZWZpbmUgTkNJX1JFUV9DQU5DRUxFRFx0MlxuIFxuIHZvaWQgbmNpX3JlcV9jb21wbGV0ZShzdHJ1Y3QgbmNpX2RldiAqbmRldiwgaW50IHJlc3VsdCk7XG4tc3RydWN0IG5jaV9jb25uX2luZm8gKm5jaV9nZXRfY29ubl9pbmZvX2J5X2Nvbm5faWQoc3RydWN0IG5jaV9kZXYgKm5kZXYsXG4tXHRcdFx0XHRcdFx0ICAgaW50IGNvbm5faWQpO1xuJiM0MztzdHJ1Y3QgbmNpX2Nvbm5faW5mbyAqbmNpX2dldF9jb25uX2luZm9fYnlfY29ubl9pZF9sb2NrZWQoc3RydWN0IG5jaV9kZXYgKm5kZXYsXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICBpbnQgY29ubl9pZCk7XG4mIzQzO2ludCBuY2lfZ2V0X2Nvbm5faW5mb19ieV9kZXN0X3R5cGVfcGFyYW1zX2xvY2tlZChzdHJ1Y3QgbmNpX2RldiAqbmRldixcbiYjNDM7XHRcdFx0XHRcdFx0IHU4IGRlc3RfdHlwZSxcbiYjNDM7XHRcdFx0XHRcdFx0IGNvbnN0IHN0cnVjdCBkZXN0X3NwZWNfcGFyYW1zICpwYXJhbXMpO1xuIGludCBuY2lfZ2V0X2Nvbm5faW5mb19ieV9kZXN0X3R5cGVfcGFyYW1zKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCB1OCBkZXN0X3R5cGUsXG4gXHRcdFx0XHRcdCAgY29uc3Qgc3RydWN0IGRlc3Rfc3BlY19wYXJhbXMgKnBhcmFtcyk7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L25mYy9uY2kvY29yZS5jIGIvbmV0L25mYy9uY2kvY29yZS5jXG5pbmRleCA1ZjQ2YzRiNTcyMGY2Yy4uNTc1OTVhODI5YzhiMDYgMTAwNjQ0XG4tLS0gYS9uZXQvbmZjL25jaS9jb3JlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZmMvbmNpL2NvcmUuY1xuQEAgLTQwLDggJiM0Mzs0MCw4IEBAIHN0YXRpYyB2b2lkIG5jaV9jbWRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xuIHN0YXRpYyB2b2lkIG5jaV9yeF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XG4gc3RhdGljIHZvaWQgbmNpX3R4X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcbiBcbi1zdHJ1Y3QgbmNpX2Nvbm5faW5mbyAqbmNpX2dldF9jb25uX2luZm9fYnlfY29ubl9pZChzdHJ1Y3QgbmNpX2RldiAqbmRldixcbi1cdFx0XHRcdFx0XHQgICBpbnQgY29ubl9pZClcbiYjNDM7c3RydWN0IG5jaV9jb25uX2luZm8gKm5jaV9nZXRfY29ubl9pbmZvX2J5X2Nvbm5faWRfbG9ja2VkKHN0cnVjdCBuY2lfZGV2ICpuZGV2LFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgaW50IGNvbm5faWQpXG4ge1xuIFx0c3RydWN0IG5jaV9jb25uX2luZm8gKmNvbm5faW5mbztcbiBcbkBAIC01Myw4ICYjNDM7NTMsOSBAQCBzdHJ1Y3QgbmNpX2Nvbm5faW5mbyAqbmNpX2dldF9jb25uX2luZm9fYnlfY29ubl9pZChzdHJ1Y3QgbmNpX2RldiAqbmRldixcbiBcdHJldHVybiBOVUxMO1xuIH1cbiBcbi1pbnQgbmNpX2dldF9jb25uX2luZm9fYnlfZGVzdF90eXBlX3BhcmFtcyhzdHJ1Y3QgbmNpX2RldiAqbmRldiwgdTggZGVzdF90eXBlLFxuLVx0XHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBkZXN0X3NwZWNfcGFyYW1zICpwYXJhbXMpXG4mIzQzO2ludCBuY2lfZ2V0X2Nvbm5faW5mb19ieV9kZXN0X3R5cGVfcGFyYW1zX2xvY2tlZChzdHJ1Y3QgbmNpX2RldiAqbmRldixcbiYjNDM7XHRcdFx0XHRcdFx0IHU4IGRlc3RfdHlwZSxcbiYjNDM7XHRcdFx0XHRcdFx0IGNvbnN0IHN0cnVjdCBkZXN0X3NwZWNfcGFyYW1zICpwYXJhbXMpXG4ge1xuIFx0Y29uc3Qgc3RydWN0IG5jaV9jb25uX2luZm8gKmNvbm5faW5mbztcbiBcbkBAIC03MSw2ICYjNDM7NzIsMTkgQEAgaW50IG5jaV9nZXRfY29ubl9pbmZvX2J5X2Rlc3RfdHlwZV9wYXJhbXMoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHU4IGRlc3RfdHlwZSxcbiBcbiBcdHJldHVybiAtRUlOVkFMO1xuIH1cbiYjNDM7XG4mIzQzO2ludCBuY2lfZ2V0X2Nvbm5faW5mb19ieV9kZXN0X3R5cGVfcGFyYW1zKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCB1OCBkZXN0X3R5cGUsXG4mIzQzO1x0XHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBkZXN0X3NwZWNfcGFyYW1zICpwYXJhbXMpXG4mIzQzO3tcbiYjNDM7XHRpbnQgY29ubl9pZDtcbiYjNDM7XG4mIzQzO1x0c3Bpbl9sb2NrX2JoKFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xuJiM0MztcdGNvbm5faWQgPSBuY2lfZ2V0X2Nvbm5faW5mb19ieV9kZXN0X3R5cGVfcGFyYW1zX2xvY2tlZChuZGV2LCBkZXN0X3R5cGUsXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgICAgIHBhcmFtcyk7XG4mIzQzO1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bmRldi1cdTAwM2Vjb25uX2luZm9fbG9jayk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBjb25uX2lkO1xuJiM0Mzt9XG4gRVhQT1JUX1NZTUJPTChuY2lfZ2V0X2Nvbm5faW5mb19ieV9kZXN0X3R5cGVfcGFyYW1zKTtcbiBcbiAvKiAtLS0tIE5DSSByZXF1ZXN0cyAtLS0tICovXG5AQCAtNDExLDEzICYjNDM7NDI1LDE3IEBAIHN0YXRpYyB2b2lkIG5jaV9uZmNjX2xvb3BiYWNrX2NiKHZvaWQgKmNvbnRleHQsIHN0cnVjdCBza19idWZmICpza2IsIGludCBlcnIpXG4gXHRzdHJ1Y3QgbmNpX2RldiAqbmRldiA9IChzdHJ1Y3QgbmNpX2RldiAqKWNvbnRleHQ7XG4gXHRzdHJ1Y3QgbmNpX2Nvbm5faW5mbyAqY29ubl9pbmZvO1xuIFxuLVx0Y29ubl9pbmZvID0gbmNpX2dldF9jb25uX2luZm9fYnlfY29ubl9pZChuZGV2LCBuZGV2LVx1MDAzZWN1cl9jb25uX2lkKTtcbiYjNDM7XHRzcGluX2xvY2tfYmgoXHUwMDI2bmRldi1cdTAwM2Vjb25uX2luZm9fbG9jayk7XG4mIzQzO1x0Y29ubl9pbmZvID0gbmNpX2dldF9jb25uX2luZm9fYnlfY29ubl9pZF9sb2NrZWQobmRldixcbiYjNDM7XHRcdFx0XHRcdFx0XHRuZGV2LVx1MDAzZWN1cl9jb25uX2lkKTtcbiBcdGlmICghY29ubl9pbmZvKSB7XG4mIzQzO1x0XHRzcGluX3VubG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbiBcdFx0bmNpX3JlcV9jb21wbGV0ZShuZGV2LCBOQ0lfU1RBVFVTX1JFSkVDVEVEKTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuIFx0Y29ubl9pbmZvLVx1MDAzZXJ4X3NrYiA9IHNrYjtcbiYjNDM7XHRzcGluX3VubG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbiBcbiBcdG5jaV9yZXFfY29tcGxldGUobmRldiwgTkNJX1NUQVRVU19PSyk7XG4gfVxuQEAgLTQ0MywxMyAmIzQzOzQ2MSwxNyBAQCBpbnQgbmNpX25mY2NfbG9vcGJhY2soc3RydWN0IG5jaV9kZXYgKm5kZXYsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBkYXRhX2xlbixcbiBcdFx0XHRcdFx0TlVMTCk7XG4gXHR9XG4gXG4tXHRjb25uX2luZm8gPSBuY2lfZ2V0X2Nvbm5faW5mb19ieV9jb25uX2lkKG5kZXYsIGNvbm5faWQpO1xuLVx0aWYgKCFjb25uX2luZm8pXG4mIzQzO1x0c3Bpbl9sb2NrX2JoKFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xuJiM0MztcdGNvbm5faW5mbyA9IG5jaV9nZXRfY29ubl9pbmZvX2J5X2Nvbm5faWRfbG9ja2VkKG5kZXYsIGNvbm5faWQpO1xuJiM0MztcdGlmICghY29ubl9pbmZvKSB7XG4mIzQzO1x0XHRzcGluX3VubG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbiBcdFx0cmV0dXJuIC1FUFJPVE87XG4mIzQzO1x0fVxuIFxuIFx0Lyogc3RvcmUgY2IgYW5kIGNvbnRleHQgdG8gYmUgdXNlZCBvbiByZWNlaXZpbmcgZGF0YSAqL1xuIFx0Y29ubl9pbmZvLVx1MDAzZWRhdGFfZXhjaGFuZ2VfY2IgPSBuY2lfbmZjY19sb29wYmFja19jYjtcbiBcdGNvbm5faW5mby1cdTAwM2VkYXRhX2V4Y2hhbmdlX2NiX2NvbnRleHQgPSBuZGV2O1xuJiM0MztcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xuIFxuIFx0c2tiID0gbmNpX3NrYl9hbGxvYyhuZGV2LCBOQ0lfREFUQV9IRFJfU0laRSAmIzQzOyBkYXRhX2xlbiwgR0ZQX0tFUk5FTCk7XG4gXHRpZiAoIXNrYilcbkBAIC00NjQsOCAmIzQzOzQ4NiwxNSBAQCBpbnQgbmNpX25mY2NfbG9vcGJhY2soc3RydWN0IG5jaV9kZXYgKm5kZXYsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBkYXRhX2xlbixcbiBcdG5kZXYtXHUwMDNlY3VyX2Nvbm5faWQgPSBjb25uX2lkO1xuIFx0ciA9IG5jaV9yZXF1ZXN0KG5kZXYsIG5jaV9zZW5kX2RhdGFfcmVxLCBcdTAwMjZsb29wYmFja19kYXRhLFxuIFx0XHRcdG1zZWNzX3RvX2ppZmZpZXMoTkNJX0RBVEFfVElNRU9VVCkpO1xuLVx0aWYgKHIgPT0gTkNJX1NUQVRVU19PSyBcdTAwMjZcdTAwMjYgcmVzcClcbi1cdFx0KnJlc3AgPSBjb25uX2luZm8tXHUwMDNlcnhfc2tiO1xuJiM0MztcdGlmIChyID09IE5DSV9TVEFUVVNfT0sgXHUwMDI2XHUwMDI2IHJlc3ApIHtcbiYjNDM7XHRcdHNwaW5fbG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbiYjNDM7XHRcdGNvbm5faW5mbyA9IG5jaV9nZXRfY29ubl9pbmZvX2J5X2Nvbm5faWRfbG9ja2VkKG5kZXYsIGNvbm5faWQpO1xuJiM0MztcdFx0aWYgKGNvbm5faW5mbylcbiYjNDM7XHRcdFx0KnJlc3AgPSBjb25uX2luZm8tXHUwMDNlcnhfc2tiO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHRyID0gLUVQUk9UTztcbiYjNDM7XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xuJiM0MztcdH1cbiBcbiBcdHJldHVybiByO1xuIH1cbkBAIC0xMDQ1LDEyICYjNDM7MTA3NCw2IEBAIHN0YXRpYyBpbnQgbmNpX3RyYW5zY2VpdmUoc3RydWN0IG5mY19kZXYgKm5mY19kZXYsIHN0cnVjdCBuZmNfdGFyZ2V0ICp0YXJnZXQsXG4gXHRpbnQgcmM7XG4gXHRzdHJ1Y3QgbmNpX2Nvbm5faW5mbyAqY29ubl9pbmZvO1xuIFxuLVx0Y29ubl9pbmZvID0gbmRldi1cdTAwM2VyZl9jb25uX2luZm87XG4tXHRpZiAoIWNvbm5faW5mbykge1xuLVx0XHRrZnJlZV9za2Ioc2tiKTtcbi1cdFx0cmV0dXJuIC1FUFJPVE87XG4tXHR9XG4tXG4gXHRwcl9kZWJ1ZyhcJiMzNDt0YXJnZXRfaWR4ICVkLCBsZW4gJWRcXG5cJiMzNDssIHRhcmdldC1cdTAwM2VpZHgsIHNrYi1cdTAwM2VsZW4pO1xuIFxuIFx0aWYgKCFuZGV2LVx1MDAzZXRhcmdldF9hY3RpdmVfcHJvdCkge1xuQEAgLTEwNjQsOSAmIzQzOzEwODcsMTkgQEAgc3RhdGljIGludCBuY2lfdHJhbnNjZWl2ZShzdHJ1Y3QgbmZjX2RldiAqbmZjX2Rldiwgc3RydWN0IG5mY190YXJnZXQgKnRhcmdldCxcbiBcdFx0cmV0dXJuIC1FQlVTWTtcbiBcdH1cbiBcbiYjNDM7XHRzcGluX2xvY2tfYmgoXHUwMDI2bmRldi1cdTAwM2Vjb25uX2luZm9fbG9jayk7XG4mIzQzO1x0Y29ubl9pbmZvID0gbmRldi1cdTAwM2VyZl9jb25uX2luZm87XG4mIzQzO1x0aWYgKCFjb25uX2luZm8pIHtcbiYjNDM7XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xuJiM0MztcdFx0a2ZyZWVfc2tiKHNrYik7XG4mIzQzO1x0XHRjbGVhcl9iaXQoTkNJX0RBVEFfRVhDSEFOR0UsIFx1MDAyNm5kZXYtXHUwMDNlZmxhZ3MpO1xuJiM0MztcdFx0cmV0dXJuIC1FUFJPVE87XG4mIzQzO1x0fVxuJiM0MztcbiBcdC8qIHN0b3JlIGNiIGFuZCBjb250ZXh0IHRvIGJlIHVzZWQgb24gcmVjZWl2aW5nIGRhdGEgKi9cbiBcdGNvbm5faW5mby1cdTAwM2VkYXRhX2V4Y2hhbmdlX2NiID0gY2I7XG4gXHRjb25uX2luZm8tXHUwMDNlZGF0YV9leGNoYW5nZV9jYl9jb250ZXh0ID0gY2JfY29udGV4dDtcbiYjNDM7XHRzcGluX3VubG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbiBcbiBcdHJjID0gbmNpX3NlbmRfZGF0YShuZGV2LCBOQ0lfU1RBVElDX1JGX0NPTk5fSUQsIHNrYik7XG4gXHRpZiAocmMpXG5AQCAtMTI4OCw2ICYjNDM7MTMyMSw3IEBAIGludCBuY2lfcmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCBuY2lfZGV2ICpuZGV2KVxuIFx0dGltZXJfc2V0dXAoXHUwMDI2bmRldi1cdTAwM2VkYXRhX3RpbWVyLCBuY2lfZGF0YV90aW1lciwgMCk7XG4gXG4gXHRtdXRleF9pbml0KFx1MDAyNm5kZXYtXHUwMDNlcmVxX2xvY2spO1xuJiM0MztcdHNwaW5fbG9ja19pbml0KFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2bmRldi1cdTAwM2Vjb25uX2luZm9fbGlzdCk7XG4gXG4gXHRyYyA9IG5mY19yZWdpc3Rlcl9kZXZpY2UobmRldi1cdTAwM2VuZmNfZGV2KTtcbkBAIC0xMzMzLDExICYjNDM7MTM2NywxNiBAQCB2b2lkIG5jaV91bnJlZ2lzdGVyX2RldmljZShzdHJ1Y3QgbmNpX2RldiAqbmRldilcbiBcdGRlc3Ryb3lfd29ya3F1ZXVlKG5kZXYtXHUwMDNlcnhfd3EpO1xuIFx0ZGVzdHJveV93b3JrcXVldWUobmRldi1cdTAwM2V0eF93cSk7XG4gXG4mIzQzO1x0c3Bpbl9sb2NrX2JoKFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGNvbm5faW5mbywgbiwgXHUwMDI2bmRldi1cdTAwM2Vjb25uX2luZm9fbGlzdCwgbGlzdCkge1xuIFx0XHRsaXN0X2RlbChcdTAwMjZjb25uX2luZm8tXHUwMDNlbGlzdCk7XG4mIzQzO1x0XHRpZiAoY29ubl9pbmZvID09IG5kZXYtXHUwMDNlcmZfY29ubl9pbmZvKVxuJiM0MztcdFx0XHRuZGV2LVx1MDAzZXJmX2Nvbm5faW5mbyA9IE5VTEw7XG4mIzQzO1x0XHRpZiAoY29ubl9pbmZvID09IG5kZXYtXHUwMDNlaGNpX2Rldi1cdTAwM2Vjb25uX2luZm8pXG4mIzQzO1x0XHRcdG5kZXYtXHUwMDNlaGNpX2Rldi1cdTAwM2Vjb25uX2luZm8gPSBOVUxMO1xuIFx0XHQvKiBjb25uX2luZm8gaXMgYWxsb2NhdGVkIHdpdGggZGV2bV9remFsbG9jICovXG4gXHR9XG4tXG4mIzQzO1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bmRldi1cdTAwM2Vjb25uX2luZm9fbG9jayk7XG4gXHRuZmNfcmVtb3ZlX2RldmljZShuZGV2LVx1MDAzZW5mY19kZXYpO1xuIH1cbiBFWFBPUlRfU1lNQk9MKG5jaV91bnJlZ2lzdGVyX2RldmljZSk7XG5AQCAtMTUyMywyMyAmIzQzOzE1NjIsMzEgQEAgc3RhdGljIHZvaWQgbmNpX3R4X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFx0c3RydWN0IG5jaV9jb25uX2luZm8gKmNvbm5faW5mbztcbiBcdHN0cnVjdCBza19idWZmICpza2I7XG4gXG4tXHRjb25uX2luZm8gPSBuY2lfZ2V0X2Nvbm5faW5mb19ieV9jb25uX2lkKG5kZXYsIG5kZXYtXHUwMDNlY3VyX2Nvbm5faWQpO1xuLVx0aWYgKCFjb25uX2luZm8pXG4tXHRcdHJldHVybjtcbiYjNDM7XHQvKiBTZW5kIHF1ZXVlZCB0eCBkYXRhICovXG4mIzQzO1x0Zm9yICg7Oykge1xuJiM0MztcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xuJiM0MztcdFx0Y29ubl9pbmZvID0gbmNpX2dldF9jb25uX2luZm9fYnlfY29ubl9pZF9sb2NrZWQobmRldixcbiYjNDM7XHRcdFx0XHRcdFx0XHRcdG5kZXYtXHUwMDNlY3VyX2Nvbm5faWQpO1xuJiM0MztcdFx0aWYgKCFjb25uX2luZm8pXG4mIzQzO1x0XHRcdGdvdG8gdW5sb2NrO1xuIFxuLVx0cHJfZGVidWcoXCYjMzQ7Y3JlZGl0c19jbnQgJWRcXG5cJiMzNDssIGF0b21pY19yZWFkKFx1MDAyNmNvbm5faW5mby1cdTAwM2VjcmVkaXRzX2NudCkpO1xuJiM0MztcdFx0cHJfZGVidWcoXCYjMzQ7Y3JlZGl0c19jbnQgJWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCBhdG9taWNfcmVhZChcdTAwMjZjb25uX2luZm8tXHUwMDNlY3JlZGl0c19jbnQpKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoIWF0b21pY19yZWFkKFx1MDAyNmNvbm5faW5mby1cdTAwM2VjcmVkaXRzX2NudCkpXG4mIzQzO1x0XHRcdGdvdG8gdW5sb2NrO1xuIFxuLVx0LyogU2VuZCBxdWV1ZWQgdHggZGF0YSAqL1xuLVx0d2hpbGUgKGF0b21pY19yZWFkKFx1MDAyNmNvbm5faW5mby1cdTAwM2VjcmVkaXRzX2NudCkpIHtcbiBcdFx0c2tiID0gc2tiX2RlcXVldWUoXHUwMDI2bmRldi1cdTAwM2V0eF9xKTtcbiBcdFx0aWYgKCFza2IpXG4tXHRcdFx0cmV0dXJuO1xuLVx0XHRrY292X3JlbW90ZV9zdGFydF9jb21tb24oc2tiX2dldF9rY292X2hhbmRsZShza2IpKTtcbiYjNDM7XHRcdFx0Z290byB1bmxvY2s7XG4gXG4gXHRcdC8qIENoZWNrIGlmIGRhdGEgZmxvdyBjb250cm9sIGlzIHVzZWQgKi9cbiBcdFx0aWYgKGF0b21pY19yZWFkKFx1MDAyNmNvbm5faW5mby1cdTAwM2VjcmVkaXRzX2NudCkgIT1cbiBcdFx0ICAgIE5DSV9EQVRBX0ZMT1dfQ09OVFJPTF9OT1RfVVNFRClcbiBcdFx0XHRhdG9taWNfZGVjKFx1MDAyNmNvbm5faW5mby1cdTAwM2VjcmVkaXRzX2NudCk7XG4mIzQzO1x0XHRzcGluX3VubG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbiYjNDM7XG4mIzQzO1x0XHRrY292X3JlbW90ZV9zdGFydF9jb21tb24oc2tiX2dldF9rY292X2hhbmRsZShza2IpKTtcbiBcbiBcdFx0cHJfZGVidWcoXCYjMzQ7TkNJIFRYOiBNVD1kYXRhLCBQQkY9JWQsIGNvbm5faWQ9JWQsIHBsZW49JWRcXG5cJiMzNDssXG4gXHRcdFx0IG5jaV9wYmYoc2tiLVx1MDAzZWRhdGEpLFxuQEAgLTE1NTIsNiAmIzQzOzE1OTksOSBAQCBzdGF0aWMgdm9pZCBuY2lfdHhfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gXHRcdFx0ICBqaWZmaWVzICYjNDM7IG1zZWNzX3RvX2ppZmZpZXMoTkNJX0RBVEFfVElNRU9VVCkpO1xuIFx0XHRrY292X3JlbW90ZV9zdG9wKCk7XG4gXHR9XG4mIzQzO1xuJiM0Mzt1bmxvY2s6XG4mIzQzO1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bmRldi1cdTAwM2Vjb25uX2luZm9fbG9jayk7XG4gfVxuIFxuIC8qIC0tLS0tIE5DSSBSWCB3b3JrZXIgdGhyZWFkIChkYXRhIFx1MDAyNiBjb250cm9sKSAtLS0tLSAqL1xuZGlmZiAtLWdpdCBhL25ldC9uZmMvbmNpL2RhdGEuYyBiL25ldC9uZmMvbmNpL2RhdGEuY1xuaW5kZXggNWY5OGM3M2RiNWFmZGUuLjMzNGMwZTVhOTRkYmM0IDEwMDY0NFxuLS0tIGEvbmV0L25mYy9uY2kvZGF0YS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmZjL25jaS9kYXRhLmNcbkBAIC0zMCw4ICYjNDM7MzAsMTAgQEAgdm9pZCBuY2lfZGF0YV9leGNoYW5nZV9jb21wbGV0ZShzdHJ1Y3QgbmNpX2RldiAqbmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGRhdGFfZXhjaGFuZ2VfY2JfdCBjYjtcbiBcdHZvaWQgKmNiX2NvbnRleHQ7XG4gXG4tXHRjb25uX2luZm8gPSBuY2lfZ2V0X2Nvbm5faW5mb19ieV9jb25uX2lkKG5kZXYsIGNvbm5faWQpO1xuJiM0MztcdHNwaW5fbG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbiYjNDM7XHRjb25uX2luZm8gPSBuY2lfZ2V0X2Nvbm5faW5mb19ieV9jb25uX2lkX2xvY2tlZChuZGV2LCBjb25uX2lkKTtcbiBcdGlmICghY29ubl9pbmZvKSB7XG4mIzQzO1x0XHRzcGluX3VubG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbiBcdFx0a2ZyZWVfc2tiKHNrYik7XG4gXHRcdGNsZWFyX2JpdChOQ0lfREFUQV9FWENIQU5HRSwgXHUwMDI2bmRldi1cdTAwM2VmbGFncyk7XG4gXHRcdHJldHVybjtcbkBAIC0zOSw2ICYjNDM7NDEsNyBAQCB2b2lkIG5jaV9kYXRhX2V4Y2hhbmdlX2NvbXBsZXRlKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFxuIFx0Y2IgPSBjb25uX2luZm8tXHUwMDNlZGF0YV9leGNoYW5nZV9jYjtcbiBcdGNiX2NvbnRleHQgPSBjb25uX2luZm8tXHUwMDNlZGF0YV9leGNoYW5nZV9jYl9jb250ZXh0O1xuJiM0MztcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xuIFxuIFx0cHJfZGVidWcoXCYjMzQ7bGVuICVkLCBlcnIgJWRcXG5cJiMzNDssIHNrYiA/IHNrYi1cdTAwM2VsZW4gOiAwLCBlcnIpO1xuIFxuQEAgLTg1LDE5ICYjNDM7ODgsMjYgQEAgc3RhdGljIGlubGluZSB2b2lkIG5jaV9wdXNoX2RhdGFfaGRyKHN0cnVjdCBuY2lfZGV2ICpuZGV2LFxuIGludCBuY2lfY29ubl9tYXhfZGF0YV9wa3RfcGF5bG9hZF9zaXplKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCBfX3U4IGNvbm5faWQpXG4ge1xuIFx0Y29uc3Qgc3RydWN0IG5jaV9jb25uX2luZm8gKmNvbm5faW5mbztcbiYjNDM7XHRpbnQgbWF4X3BrdF9wYXlsb2FkX2xlbjtcbiBcbi1cdGNvbm5faW5mbyA9IG5jaV9nZXRfY29ubl9pbmZvX2J5X2Nvbm5faWQobmRldiwgY29ubl9pZCk7XG4tXHRpZiAoIWNvbm5faW5mbylcbiYjNDM7XHRzcGluX2xvY2tfYmgoXHUwMDI2bmRldi1cdTAwM2Vjb25uX2luZm9fbG9jayk7XG4mIzQzO1x0Y29ubl9pbmZvID0gbmNpX2dldF9jb25uX2luZm9fYnlfY29ubl9pZF9sb2NrZWQobmRldiwgY29ubl9pZCk7XG4mIzQzO1x0aWYgKCFjb25uX2luZm8pIHtcbiYjNDM7XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xuIFx0XHRyZXR1cm4gLUVQUk9UTztcbiYjNDM7XHR9XG4mIzQzO1x0bWF4X3BrdF9wYXlsb2FkX2xlbiA9IGNvbm5faW5mby1cdTAwM2VtYXhfcGt0X3BheWxvYWRfbGVuO1xuJiM0MztcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xuIFxuLVx0cmV0dXJuIGNvbm5faW5mby1cdTAwM2VtYXhfcGt0X3BheWxvYWRfbGVuO1xuJiM0MztcdHJldHVybiBtYXhfcGt0X3BheWxvYWRfbGVuO1xuIH1cbiBFWFBPUlRfU1lNQk9MKG5jaV9jb25uX21heF9kYXRhX3BrdF9wYXlsb2FkX3NpemUpO1xuIFxuIHN0YXRpYyBpbnQgbmNpX3F1ZXVlX3R4X2RhdGFfZnJhZ3Moc3RydWN0IG5jaV9kZXYgKm5kZXYsXG4gXHRcdFx0XHQgICBfX3U4IGNvbm5faWQsXG4tXHRcdFx0XHQgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKSB7XG4tXHRjb25zdCBzdHJ1Y3QgbmNpX2Nvbm5faW5mbyAqY29ubl9pbmZvO1xuJiM0MztcdFx0XHRcdCAgIHN0cnVjdCBza19idWZmICpza2IsXG4mIzQzO1x0XHRcdFx0ICAgX191OCBtYXhfcGt0X3BheWxvYWRfbGVuKVxuJiM0Mzt7XG4gXHRpbnQgdG90YWxfbGVuID0gc2tiLVx1MDAzZWxlbjtcbiBcdGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEgPSBza2ItXHUwMDNlZGF0YTtcbiBcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG5AQCAtMTA4LDE3ICYjNDM7MTE4LDEwIEBAIHN0YXRpYyBpbnQgbmNpX3F1ZXVlX3R4X2RhdGFfZnJhZ3Moc3RydWN0IG5jaV9kZXYgKm5kZXYsXG4gXG4gXHRwcl9kZWJ1ZyhcJiMzNDtjb25uX2lkIDB4JXgsIHRvdGFsX2xlbiAlZFxcblwmIzM0OywgY29ubl9pZCwgdG90YWxfbGVuKTtcbiBcbi1cdGNvbm5faW5mbyA9IG5jaV9nZXRfY29ubl9pbmZvX2J5X2Nvbm5faWQobmRldiwgY29ubl9pZCk7XG4tXHRpZiAoIWNvbm5faW5mbykge1xuLVx0XHRyYyA9IC1FUFJPVE87XG4tXHRcdGdvdG8gZXhpdDtcbi1cdH1cbi1cbiBcdF9fc2tiX3F1ZXVlX2hlYWRfaW5pdChcdTAwMjZmcmFnc19xKTtcbiBcbiBcdHdoaWxlICh0b3RhbF9sZW4pIHtcbi1cdFx0ZnJhZ19sZW4gPVxuLVx0XHRcdG1pbl90KGludCwgdG90YWxfbGVuLCBjb25uX2luZm8tXHUwMDNlbWF4X3BrdF9wYXlsb2FkX2xlbik7XG4mIzQzO1x0XHRmcmFnX2xlbiA9IG1pbl90KGludCwgdG90YWxfbGVuLCBtYXhfcGt0X3BheWxvYWRfbGVuKTtcbiBcbiBcdFx0c2tiX2ZyYWcgPSBuY2lfc2tiX2FsbG9jKG5kZXYsXG4gXHRcdFx0XHRcdCAoTkNJX0RBVEFfSERSX1NJWkUgJiM0MzsgZnJhZ19sZW4pLFxuQEAgLTE3MSw0MCAmIzQzOzE3NCw0NyBAQCBzdGF0aWMgaW50IG5jaV9xdWV1ZV90eF9kYXRhX2ZyYWdzKHN0cnVjdCBuY2lfZGV2ICpuZGV2LFxuIGludCBuY2lfc2VuZF9kYXRhKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCBfX3U4IGNvbm5faWQsIHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuIFx0Y29uc3Qgc3RydWN0IG5jaV9jb25uX2luZm8gKmNvbm5faW5mbztcbiYjNDM7XHRfX3U4IG1heF9wa3RfcGF5bG9hZF9sZW47XG4gXHRpbnQgcmMgPSAwO1xuIFxuIFx0cHJfZGVidWcoXCYjMzQ7Y29ubl9pZCAweCV4LCBwbGVuICVkXFxuXCYjMzQ7LCBjb25uX2lkLCBza2ItXHUwMDNlbGVuKTtcbiBcbi1cdGNvbm5faW5mbyA9IG5jaV9nZXRfY29ubl9pbmZvX2J5X2Nvbm5faWQobmRldiwgY29ubl9pZCk7XG4mIzQzO1x0c3Bpbl9sb2NrX2JoKFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xuJiM0MztcdGNvbm5faW5mbyA9IG5jaV9nZXRfY29ubl9pbmZvX2J5X2Nvbm5faWRfbG9ja2VkKG5kZXYsIGNvbm5faWQpO1xuIFx0aWYgKCFjb25uX2luZm8pIHtcbiBcdFx0cmMgPSAtRVBST1RPO1xuLVx0XHRnb3RvIGZyZWVfZXhpdDtcbiYjNDM7XHRcdGdvdG8gdW5sb2NrO1xuIFx0fVxuJiM0MztcdG1heF9wa3RfcGF5bG9hZF9sZW4gPSBjb25uX2luZm8tXHUwMDNlbWF4X3BrdF9wYXlsb2FkX2xlbjtcbiYjNDM7XHRzcGluX3VubG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbiBcbiBcdC8qIGNoZWNrIGlmIHRoZSBwYWNrZXQgbmVlZCB0byBiZSBmcmFnbWVudGVkICovXG4tXHRpZiAoc2tiLVx1MDAzZWxlbiBcdTAwM2M9IGNvbm5faW5mby1cdTAwM2VtYXhfcGt0X3BheWxvYWRfbGVuKSB7XG4mIzQzO1x0aWYgKHNrYi1cdTAwM2VsZW4gXHUwMDNjPSBtYXhfcGt0X3BheWxvYWRfbGVuKSB7XG4gXHRcdC8qIG5vIG5lZWQgdG8gZnJhZ21lbnQgcGFja2V0ICovXG4gXHRcdG5jaV9wdXNoX2RhdGFfaGRyKG5kZXYsIGNvbm5faWQsIHNrYiwgTkNJX1BCRl9MQVNUKTtcbiBcbiBcdFx0c2tiX3F1ZXVlX3RhaWwoXHUwMDI2bmRldi1cdTAwM2V0eF9xLCBza2IpO1xuIFx0fSBlbHNlIHtcbiBcdFx0LyogZnJhZ21lbnQgcGFja2V0IGFuZCBxdWV1ZSB0aGUgZnJhZ21lbnRzICovXG4tXHRcdHJjID0gbmNpX3F1ZXVlX3R4X2RhdGFfZnJhZ3MobmRldiwgY29ubl9pZCwgc2tiKTtcbiYjNDM7XHRcdHJjID0gbmNpX3F1ZXVlX3R4X2RhdGFfZnJhZ3MobmRldiwgY29ubl9pZCwgc2tiLFxuJiM0MztcdFx0XHRcdFx0ICAgICBtYXhfcGt0X3BheWxvYWRfbGVuKTtcbiBcdFx0aWYgKHJjKSB7XG4gXHRcdFx0cHJfZXJyKFwmIzM0O2ZhaWxlZCB0byBmcmFnbWVudCB0eCBkYXRhIHBhY2tldFxcblwmIzM0Oyk7XG4tXHRcdFx0Z290byBmcmVlX2V4aXQ7XG4mIzQzO1x0XHRcdGtmcmVlX3NrYihza2IpO1xuJiM0MztcdFx0XHRyZXR1cm4gcmM7XG4gXHRcdH1cbiBcdH1cbiBcbiYjNDM7XHRzcGluX2xvY2tfYmgoXHUwMDI2bmRldi1cdTAwM2Vjb25uX2luZm9fbG9jayk7XG4gXHRuZGV2LVx1MDAzZWN1cl9jb25uX2lkID0gY29ubl9pZDtcbi1cdHF1ZXVlX3dvcmsobmRldi1cdTAwM2V0eF93cSwgXHUwMDI2bmRldi1cdTAwM2V0eF93b3JrKTtcbi1cbi1cdGdvdG8gZXhpdDtcbi1cbi1mcmVlX2V4aXQ6XG4tXHRrZnJlZV9za2Ioc2tiKTtcbiYjNDM7XHRzcGluX3VubG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbiBcbi1leGl0OlxuJiM0MztcdHF1ZXVlX3dvcmsobmRldi1cdTAwM2V0eF93cSwgXHUwMDI2bmRldi1cdTAwM2V0eF93b3JrKTtcbiYjNDM7XHRyZXR1cm4gcmM7XG4mIzQzO3VubG9jazpcbiYjNDM7XHRzcGluX3VubG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbiYjNDM7XHRpZiAocmMpXG4mIzQzO1x0XHRrZnJlZV9za2Ioc2tiKTtcbiBcdHJldHVybiByYztcbiB9XG4gRVhQT1JUX1NZTUJPTChuY2lfc2VuZF9kYXRhKTtcbkBAIC0yODIsMTEgJiM0MzsyOTIsMTUgQEAgdm9pZCBuY2lfcnhfZGF0YV9wYWNrZXQoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRcdCBuY2lfY29ubl9pZChza2ItXHUwMDNlZGF0YSksXG4gXHRcdCBuY2lfcGxlbihza2ItXHUwMDNlZGF0YSkpO1xuIFxuLVx0Y29ubl9pbmZvID0gbmNpX2dldF9jb25uX2luZm9fYnlfY29ubl9pZChuZGV2LCBuY2lfY29ubl9pZChza2ItXHUwMDNlZGF0YSkpO1xuJiM0MztcdHNwaW5fbG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbiYjNDM7XHRjb25uX2luZm8gPSBuY2lfZ2V0X2Nvbm5faW5mb19ieV9jb25uX2lkX2xvY2tlZChuZGV2LFxuJiM0MztcdFx0XHRcdFx0XHRcdG5jaV9jb25uX2lkKHNrYi1cdTAwM2VkYXRhKSk7XG4gXHRpZiAoIWNvbm5faW5mbykge1xuJiM0MztcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bmRldi1cdTAwM2Vjb25uX2luZm9fbG9jayk7XG4gXHRcdGtmcmVlX3NrYihza2IpO1xuIFx0XHRyZXR1cm47XG4gXHR9XG4mIzQzO1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bmRldi1cdTAwM2Vjb25uX2luZm9fbG9jayk7XG4gXG4gXHQvKiBzdHJpcCB0aGUgbmNpIGRhdGEgaGVhZGVyICovXG4gXHRza2JfcHVsbChza2IsIE5DSV9EQVRBX0hEUl9TSVpFKTtcbmRpZmYgLS1naXQgYS9uZXQvbmZjL25jaS9oY2kuYyBiL25ldC9uZmMvbmNpL2hjaS5jXG5pbmRleCBjMDNlOGEwYmQzYmQ2NC4uZTJmN2FiMTU5NzNjZTkgMTAwNjQ0XG4tLS0gYS9uZXQvbmZjL25jaS9oY2kuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25mYy9uY2kvaGNpLmNcbkBAIC0xNDcsMTQgJiM0MzsxNDcsMjIgQEAgc3RhdGljIGludCBuY2lfaGNpX3NlbmRfZGF0YShzdHJ1Y3QgbmNpX2RldiAqbmRldiwgdTggcGlwZSxcbiBcdHN0cnVjdCBza19idWZmICpza2I7XG4gXHRpbnQgbGVuLCBpLCByO1xuIFx0dTggY2IgPSBwaXBlO1xuJiM0MztcdHU4IGNvbm5faWQ7XG4mIzQzO1x0dTggbWF4X3BrdF9wYXlsb2FkX2xlbjtcbiBcbiYjNDM7XHRzcGluX2xvY2tfYmgoXHUwMDI2bmRldi1cdTAwM2Vjb25uX2luZm9fbG9jayk7XG4gXHRjb25uX2luZm8gPSBuZGV2LVx1MDAzZWhjaV9kZXYtXHUwMDNlY29ubl9pbmZvO1xuLVx0aWYgKCFjb25uX2luZm8pXG4mIzQzO1x0aWYgKCFjb25uX2luZm8pIHtcbiYjNDM7XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xuIFx0XHRyZXR1cm4gLUVQUk9UTztcbiYjNDM7XHR9XG4mIzQzO1x0Y29ubl9pZCA9IGNvbm5faW5mby1cdTAwM2Vjb25uX2lkO1xuJiM0MztcdG1heF9wa3RfcGF5bG9hZF9sZW4gPSBjb25uX2luZm8tXHUwMDNlbWF4X3BrdF9wYXlsb2FkX2xlbjtcbiYjNDM7XHRzcGluX3VubG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbiBcbiBcdGkgPSAwO1xuLVx0c2tiID0gbmNpX3NrYl9hbGxvYyhuZGV2LCBjb25uX2luZm8tXHUwMDNlbWF4X3BrdF9wYXlsb2FkX2xlbiAmIzQzO1xuLVx0XHRcdCAgICBOQ0lfREFUQV9IRFJfU0laRSwgR0ZQX0FUT01JQyk7XG4mIzQzO1x0c2tiID0gbmNpX3NrYl9hbGxvYyhuZGV2LCBtYXhfcGt0X3BheWxvYWRfbGVuICYjNDM7IE5DSV9EQVRBX0hEUl9TSVpFLFxuJiM0MztcdFx0XHQgICAgR0ZQX0FUT01JQyk7XG4gXHRpZiAoIXNrYilcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG5AQCAtMTYzLDEyICYjNDM7MTcxLDExIEBAIHN0YXRpYyBpbnQgbmNpX2hjaV9zZW5kX2RhdGEoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHU4IHBpcGUsXG4gXG4gXHRkbyB7XG4gXHRcdC8qIElmIGxhc3QgcGFja2V0IGFkZCBOQ0lfSEZQX05PX0NIQUlOSU5HICovXG4tXHRcdGlmIChpICYjNDM7IGNvbm5faW5mby1cdTAwM2VtYXhfcGt0X3BheWxvYWRfbGVuIC1cbi1cdFx0ICAgIChza2ItXHUwMDNlbGVuICYjNDM7IDEpIFx1MDAzZT0gZGF0YV9sZW4pIHtcbiYjNDM7XHRcdGlmIChpICYjNDM7IG1heF9wa3RfcGF5bG9hZF9sZW4gLSAoc2tiLVx1MDAzZWxlbiAmIzQzOyAxKSBcdTAwM2U9IGRhdGFfbGVuKSB7XG4gXHRcdFx0Y2IgfD0gTkNJX0hGUF9OT19DSEFJTklORztcbiBcdFx0XHRsZW4gPSBkYXRhX2xlbiAtIGk7XG4gXHRcdH0gZWxzZSB7XG4tXHRcdFx0bGVuID0gY29ubl9pbmZvLVx1MDAzZW1heF9wa3RfcGF5bG9hZF9sZW4gLSBza2ItXHUwMDNlbGVuIC0gMTtcbiYjNDM7XHRcdFx0bGVuID0gbWF4X3BrdF9wYXlsb2FkX2xlbiAtIHNrYi1cdTAwM2VsZW4gLSAxO1xuIFx0XHR9XG4gXG4gXHRcdCoodTggKilza2JfcHVzaChza2IsIDEpID0gY2I7XG5AQCAtMTc2LDE1ICYjNDM7MTgzLDE0IEBAIHN0YXRpYyBpbnQgbmNpX2hjaV9zZW5kX2RhdGEoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHU4IHBpcGUsXG4gXHRcdGlmIChsZW4gXHUwMDNlIDApXG4gXHRcdFx0c2tiX3B1dF9kYXRhKHNrYiwgZGF0YSAmIzQzOyBpLCBsZW4pO1xuIFxuLVx0XHRyID0gbmNpX3NlbmRfZGF0YShuZGV2LCBjb25uX2luZm8tXHUwMDNlY29ubl9pZCwgc2tiKTtcbiYjNDM7XHRcdHIgPSBuY2lfc2VuZF9kYXRhKG5kZXYsIGNvbm5faWQsIHNrYik7XG4gXHRcdGlmIChyIFx1MDAzYyAwKVxuIFx0XHRcdHJldHVybiByO1xuIFxuIFx0XHRpICYjNDM7PSBsZW47XG4gXG4gXHRcdGlmIChpIFx1MDAzYyBkYXRhX2xlbikge1xuLVx0XHRcdHNrYiA9IG5jaV9za2JfYWxsb2MobmRldixcbi1cdFx0XHRcdFx0ICAgIGNvbm5faW5mby1cdTAwM2VtYXhfcGt0X3BheWxvYWRfbGVuICYjNDM7XG4mIzQzO1x0XHRcdHNrYiA9IG5jaV9za2JfYWxsb2MobmRldiwgbWF4X3BrdF9wYXlsb2FkX2xlbiAmIzQzO1xuIFx0XHRcdFx0XHQgICAgTkNJX0RBVEFfSERSX1NJWkUsIEdGUF9BVE9NSUMpO1xuIFx0XHRcdGlmICghc2tiKVxuIFx0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG5AQCAtMjI1LDE3ICYjNDM7MjMxLDIyIEBAIGludCBuY2lfaGNpX3NlbmRfY21kKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCB1OCBnYXRlLCB1OCBjbWQsXG4gXHRjb25zdCBzdHJ1Y3QgbmNpX2hjcF9tZXNzYWdlICptZXNzYWdlO1xuIFx0Y29uc3Qgc3RydWN0IG5jaV9jb25uX2luZm8gKmNvbm5faW5mbztcbiBcdHN0cnVjdCBuY2lfZGF0YSBkYXRhO1xuJiM0MztcdHN0cnVjdCBza19idWZmICpyeF9za2I7XG4gXHRpbnQgcjtcbiBcdHU4IHBpcGUgPSBuZGV2LVx1MDAzZWhjaV9kZXYtXHUwMDNlZ2F0ZTJwaXBlW2dhdGVdO1xuIFxuIFx0aWYgKHBpcGUgPT0gTkNJX0hDSV9JTlZBTElEX1BJUEUpXG4gXHRcdHJldHVybiAtRUFERFJOT1RBVkFJTDtcbiBcbiYjNDM7XHRzcGluX2xvY2tfYmgoXHUwMDI2bmRldi1cdTAwM2Vjb25uX2luZm9fbG9jayk7XG4gXHRjb25uX2luZm8gPSBuZGV2LVx1MDAzZWhjaV9kZXYtXHUwMDNlY29ubl9pbmZvO1xuLVx0aWYgKCFjb25uX2luZm8pXG4mIzQzO1x0aWYgKCFjb25uX2luZm8pIHtcbiYjNDM7XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xuIFx0XHRyZXR1cm4gLUVQUk9UTztcbiYjNDM7XHR9XG4gXG4gXHRkYXRhLmNvbm5faWQgPSBjb25uX2luZm8tXHUwMDNlY29ubl9pZDtcbiYjNDM7XHRzcGluX3VubG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbiBcdGRhdGEucGlwZSA9IHBpcGU7XG4gXHRkYXRhLmNtZCA9IE5DSV9IQ1BfSEVBREVSKE5DSV9IQ0lfSENQX0NPTU1BTkQsIGNtZCk7XG4gXHRkYXRhLmRhdGEgPSBwYXJhbTtcbkBAIC0yNDQsMTMgJiM0MzsyNTUsMjIgQEAgaW50IG5jaV9oY2lfc2VuZF9jbWQoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHU4IGdhdGUsIHU4IGNtZCxcbiBcdHIgPSBuY2lfcmVxdWVzdChuZGV2LCBuY2lfaGNpX3NlbmRfZGF0YV9yZXEsIFx1MDAyNmRhdGEsXG4gXHRcdFx0bXNlY3NfdG9famlmZmllcyhOQ0lfREFUQV9USU1FT1VUKSk7XG4gXHRpZiAociA9PSBOQ0lfU1RBVFVTX09LKSB7XG4tXHRcdG1lc3NhZ2UgPSAoc3RydWN0IG5jaV9oY3BfbWVzc2FnZSAqKWNvbm5faW5mby1cdTAwM2VyeF9za2ItXHUwMDNlZGF0YTtcbiYjNDM7XHRcdHNwaW5fbG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbiYjNDM7XHRcdGNvbm5faW5mbyA9IG5kZXYtXHUwMDNlaGNpX2Rldi1cdTAwM2Vjb25uX2luZm87XG4mIzQzO1x0XHRyeF9za2IgPSBjb25uX2luZm8gPyBjb25uX2luZm8tXHUwMDNlcnhfc2tiIDogTlVMTDtcbiYjNDM7XHRcdGlmICghcnhfc2tiKSB7XG4mIzQzO1x0XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xuJiM0MztcdFx0XHRyZXR1cm4gLUVQUk9UTztcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRtZXNzYWdlID0gKHN0cnVjdCBuY2lfaGNwX21lc3NhZ2UgKilyeF9za2ItXHUwMDNlZGF0YTtcbiBcdFx0ciA9IG5jaV9oY2lfcmVzdWx0X3RvX2Vycm5vKFxuIFx0XHRcdE5DSV9IQ1BfTVNHX0dFVF9DTUQobWVzc2FnZS1cdTAwM2VoZWFkZXIpKTtcbi1cdFx0c2tiX3B1bGwoY29ubl9pbmZvLVx1MDAzZXJ4X3NrYiwgTkNJX0hDSV9IQ1BfTUVTU0FHRV9IRUFERVJfTEVOKTtcbiYjNDM7XHRcdHNrYl9wdWxsKHJ4X3NrYiwgTkNJX0hDSV9IQ1BfTUVTU0FHRV9IRUFERVJfTEVOKTtcbiYjNDM7XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xuIFxuIFx0XHRpZiAoIXIgXHUwMDI2XHUwMDI2IHNrYilcbi1cdFx0XHQqc2tiID0gY29ubl9pbmZvLVx1MDAzZXJ4X3NrYjtcbiYjNDM7XHRcdFx0KnNrYiA9IHJ4X3NrYjtcbiBcdH1cbiBcbiBcdHJldHVybiByO1xuQEAgLTM2NiwxMSAmIzQzOzM4NiwxNSBAQCBzdGF0aWMgdm9pZCBuY2lfaGNpX3Jlc3BfcmVjZWl2ZWQoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHU4IHBpcGUsXG4ge1xuIFx0c3RydWN0IG5jaV9jb25uX2luZm8gKmNvbm5faW5mbztcbiBcbiYjNDM7XHRzcGluX2xvY2tfYmgoXHUwMDI2bmRldi1cdTAwM2Vjb25uX2luZm9fbG9jayk7XG4gXHRjb25uX2luZm8gPSBuZGV2LVx1MDAzZWhjaV9kZXYtXHUwMDNlY29ubl9pbmZvO1xuLVx0aWYgKCFjb25uX2luZm8pXG4mIzQzO1x0aWYgKCFjb25uX2luZm8pIHtcbiYjNDM7XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xuIFx0XHRnb3RvIGV4aXQ7XG4mIzQzO1x0fVxuIFxuIFx0Y29ubl9pbmZvLVx1MDAzZXJ4X3NrYiA9IHNrYjtcbiYjNDM7XHRzcGluX3VubG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbiBcbiBleGl0OlxuIFx0bmNpX3JlcV9jb21wbGV0ZShuZGV2LCBOQ0lfU1RBVFVTX09LKTtcbkBAIC01MTAsMTEgJiM0Mzs1MzQsMTUgQEAgaW50IG5jaV9oY2lfb3Blbl9waXBlKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCB1OCBwaXBlKVxuIFx0c3RydWN0IG5jaV9kYXRhIGRhdGE7XG4gXHRjb25zdCBzdHJ1Y3QgbmNpX2Nvbm5faW5mbyAqY29ubl9pbmZvO1xuIFxuJiM0MztcdHNwaW5fbG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbiBcdGNvbm5faW5mbyA9IG5kZXYtXHUwMDNlaGNpX2Rldi1cdTAwM2Vjb25uX2luZm87XG4tXHRpZiAoIWNvbm5faW5mbylcbiYjNDM7XHRpZiAoIWNvbm5faW5mbykge1xuJiM0MztcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bmRldi1cdTAwM2Vjb25uX2luZm9fbG9jayk7XG4gXHRcdHJldHVybiAtRVBST1RPO1xuJiM0MztcdH1cbiBcbiBcdGRhdGEuY29ubl9pZCA9IGNvbm5faW5mby1cdTAwM2Vjb25uX2lkO1xuJiM0MztcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xuIFx0ZGF0YS5waXBlID0gcGlwZTtcbiBcdGRhdGEuY21kID0gTkNJX0hDUF9IRUFERVIoTkNJX0hDSV9IQ1BfQ09NTUFORCxcbiBcdFx0XHRcdCAgICAgICBOQ0lfSENJX0FOWV9PUEVOX1BJUEUpO1xuQEAgLTU2OSw2ICYjNDM7NTk3LDcgQEAgaW50IG5jaV9oY2lfc2V0X3BhcmFtKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCB1OCBnYXRlLCB1OCBpZHgsXG4gXHRjb25zdCBzdHJ1Y3QgbmNpX2hjcF9tZXNzYWdlICptZXNzYWdlO1xuIFx0Y29uc3Qgc3RydWN0IG5jaV9jb25uX2luZm8gKmNvbm5faW5mbztcbiBcdHN0cnVjdCBuY2lfZGF0YSBkYXRhO1xuJiM0MztcdHN0cnVjdCBza19idWZmICpyeF9za2I7XG4gXHRpbnQgcjtcbiBcdHU4ICp0bXA7XG4gXHR1OCBwaXBlID0gbmRldi1cdTAwM2VoY2lfZGV2LVx1MDAzZWdhdGUycGlwZVtnYXRlXTtcbkBAIC01NzgsOSAmIzQzOzYwNywxNCBAQCBpbnQgbmNpX2hjaV9zZXRfcGFyYW0oc3RydWN0IG5jaV9kZXYgKm5kZXYsIHU4IGdhdGUsIHU4IGlkeCxcbiBcdGlmIChwaXBlID09IE5DSV9IQ0lfSU5WQUxJRF9QSVBFKVxuIFx0XHRyZXR1cm4gLUVBRERSTk9UQVZBSUw7XG4gXG4mIzQzO1x0c3Bpbl9sb2NrX2JoKFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xuIFx0Y29ubl9pbmZvID0gbmRldi1cdTAwM2VoY2lfZGV2LVx1MDAzZWNvbm5faW5mbztcbi1cdGlmICghY29ubl9pbmZvKVxuJiM0MztcdGlmICghY29ubl9pbmZvKSB7XG4mIzQzO1x0XHRzcGluX3VubG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbiBcdFx0cmV0dXJuIC1FUFJPVE87XG4mIzQzO1x0fVxuJiM0MztcdGRhdGEuY29ubl9pZCA9IGNvbm5faW5mby1cdTAwM2Vjb25uX2lkO1xuJiM0MztcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xuIFxuIFx0dG1wID0ga21hbGxvYygxICYjNDM7IHBhcmFtX2xlbiwgR0ZQX0tFUk5FTCk7XG4gXHRpZiAoIXRtcClcbkBAIC01ODksNyAmIzQzOzYyMyw2IEBAIGludCBuY2lfaGNpX3NldF9wYXJhbShzdHJ1Y3QgbmNpX2RldiAqbmRldiwgdTggZ2F0ZSwgdTggaWR4LFxuIFx0KnRtcCA9IGlkeDtcbiBcdG1lbWNweSh0bXAgJiM0MzsgMSwgcGFyYW0sIHBhcmFtX2xlbik7XG4gXG4tXHRkYXRhLmNvbm5faWQgPSBjb25uX2luZm8tXHUwMDNlY29ubl9pZDtcbiBcdGRhdGEucGlwZSA9IHBpcGU7XG4gXHRkYXRhLmNtZCA9IE5DSV9IQ1BfSEVBREVSKE5DSV9IQ0lfSENQX0NPTU1BTkQsXG4gXHRcdFx0XHQgICAgICAgTkNJX0hDSV9BTllfU0VUX1BBUkFNRVRFUik7XG5AQCAtNTk5LDEwICYjNDM7NjMyLDIwIEBAIGludCBuY2lfaGNpX3NldF9wYXJhbShzdHJ1Y3QgbmNpX2RldiAqbmRldiwgdTggZ2F0ZSwgdTggaWR4LFxuIFx0ciA9IG5jaV9yZXF1ZXN0KG5kZXYsIG5jaV9oY2lfc2VuZF9kYXRhX3JlcSwgXHUwMDI2ZGF0YSxcbiBcdFx0XHRtc2Vjc190b19qaWZmaWVzKE5DSV9EQVRBX1RJTUVPVVQpKTtcbiBcdGlmIChyID09IE5DSV9TVEFUVVNfT0spIHtcbi1cdFx0bWVzc2FnZSA9IChzdHJ1Y3QgbmNpX2hjcF9tZXNzYWdlICopY29ubl9pbmZvLVx1MDAzZXJ4X3NrYi1cdTAwM2VkYXRhO1xuJiM0MztcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xuJiM0MztcdFx0Y29ubl9pbmZvID0gbmRldi1cdTAwM2VoY2lfZGV2LVx1MDAzZWNvbm5faW5mbztcbiYjNDM7XHRcdHJ4X3NrYiA9IGNvbm5faW5mbyA/IGNvbm5faW5mby1cdTAwM2VyeF9za2IgOiBOVUxMO1xuJiM0MztcdFx0aWYgKCFyeF9za2IpIHtcbiYjNDM7XHRcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bmRldi1cdTAwM2Vjb25uX2luZm9fbG9jayk7XG4mIzQzO1x0XHRcdGtmcmVlKHRtcCk7XG4mIzQzO1x0XHRcdHJldHVybiAtRVBST1RPO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdG1lc3NhZ2UgPSAoc3RydWN0IG5jaV9oY3BfbWVzc2FnZSAqKXJ4X3NrYi1cdTAwM2VkYXRhO1xuIFx0XHRyID0gbmNpX2hjaV9yZXN1bHRfdG9fZXJybm8oXG4gXHRcdFx0TkNJX0hDUF9NU0dfR0VUX0NNRChtZXNzYWdlLVx1MDAzZWhlYWRlcikpO1xuLVx0XHRza2JfcHVsbChjb25uX2luZm8tXHUwMDNlcnhfc2tiLCBOQ0lfSENJX0hDUF9NRVNTQUdFX0hFQURFUl9MRU4pO1xuJiM0MztcdFx0c2tiX3B1bGwocnhfc2tiLCBOQ0lfSENJX0hDUF9NRVNTQUdFX0hFQURFUl9MRU4pO1xuJiM0MztcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bmRldi1cdTAwM2Vjb25uX2luZm9fbG9jayk7XG4gXHR9XG4gXG4gXHRrZnJlZSh0bXApO1xuQEAgLTYxNiw2ICYjNDM7NjU5LDcgQEAgaW50IG5jaV9oY2lfZ2V0X3BhcmFtKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCB1OCBnYXRlLCB1OCBpZHgsXG4gXHRjb25zdCBzdHJ1Y3QgbmNpX2hjcF9tZXNzYWdlICptZXNzYWdlO1xuIFx0Y29uc3Qgc3RydWN0IG5jaV9jb25uX2luZm8gKmNvbm5faW5mbztcbiBcdHN0cnVjdCBuY2lfZGF0YSBkYXRhO1xuJiM0MztcdHN0cnVjdCBza19idWZmICpyeF9za2I7XG4gXHRpbnQgcjtcbiBcdHU4IHBpcGUgPSBuZGV2LVx1MDAzZWhjaV9kZXYtXHUwMDNlZ2F0ZTJwaXBlW2dhdGVdO1xuIFxuQEAgLTYyNCwxMSAmIzQzOzY2OCwxNSBAQCBpbnQgbmNpX2hjaV9nZXRfcGFyYW0oc3RydWN0IG5jaV9kZXYgKm5kZXYsIHU4IGdhdGUsIHU4IGlkeCxcbiBcdGlmIChwaXBlID09IE5DSV9IQ0lfSU5WQUxJRF9QSVBFKVxuIFx0XHRyZXR1cm4gLUVBRERSTk9UQVZBSUw7XG4gXG4mIzQzO1x0c3Bpbl9sb2NrX2JoKFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xuIFx0Y29ubl9pbmZvID0gbmRldi1cdTAwM2VoY2lfZGV2LVx1MDAzZWNvbm5faW5mbztcbi1cdGlmICghY29ubl9pbmZvKVxuJiM0MztcdGlmICghY29ubl9pbmZvKSB7XG4mIzQzO1x0XHRzcGluX3VubG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbiBcdFx0cmV0dXJuIC1FUFJPVE87XG4mIzQzO1x0fVxuIFxuIFx0ZGF0YS5jb25uX2lkID0gY29ubl9pbmZvLVx1MDAzZWNvbm5faWQ7XG4mIzQzO1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bmRldi1cdTAwM2Vjb25uX2luZm9fbG9jayk7XG4gXHRkYXRhLnBpcGUgPSBwaXBlO1xuIFx0ZGF0YS5jbWQgPSBOQ0lfSENQX0hFQURFUihOQ0lfSENJX0hDUF9DT01NQU5ELFxuIFx0XHRcdFx0ICBOQ0lfSENJX0FOWV9HRVRfUEFSQU1FVEVSKTtcbkBAIC02MzksMTMgJiM0Mzs2ODcsMjIgQEAgaW50IG5jaV9oY2lfZ2V0X3BhcmFtKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCB1OCBnYXRlLCB1OCBpZHgsXG4gXHRcdFx0bXNlY3NfdG9famlmZmllcyhOQ0lfREFUQV9USU1FT1VUKSk7XG4gXG4gXHRpZiAociA9PSBOQ0lfU1RBVFVTX09LKSB7XG4tXHRcdG1lc3NhZ2UgPSAoc3RydWN0IG5jaV9oY3BfbWVzc2FnZSAqKWNvbm5faW5mby1cdTAwM2VyeF9za2ItXHUwMDNlZGF0YTtcbiYjNDM7XHRcdHNwaW5fbG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbiYjNDM7XHRcdGNvbm5faW5mbyA9IG5kZXYtXHUwMDNlaGNpX2Rldi1cdTAwM2Vjb25uX2luZm87XG4mIzQzO1x0XHRyeF9za2IgPSBjb25uX2luZm8gPyBjb25uX2luZm8tXHUwMDNlcnhfc2tiIDogTlVMTDtcbiYjNDM7XHRcdGlmICghcnhfc2tiKSB7XG4mIzQzO1x0XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xuJiM0MztcdFx0XHRyZXR1cm4gLUVQUk9UTztcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRtZXNzYWdlID0gKHN0cnVjdCBuY2lfaGNwX21lc3NhZ2UgKilyeF9za2ItXHUwMDNlZGF0YTtcbiBcdFx0ciA9IG5jaV9oY2lfcmVzdWx0X3RvX2Vycm5vKFxuIFx0XHRcdE5DSV9IQ1BfTVNHX0dFVF9DTUQobWVzc2FnZS1cdTAwM2VoZWFkZXIpKTtcbi1cdFx0c2tiX3B1bGwoY29ubl9pbmZvLVx1MDAzZXJ4X3NrYiwgTkNJX0hDSV9IQ1BfTUVTU0FHRV9IRUFERVJfTEVOKTtcbiYjNDM7XHRcdHNrYl9wdWxsKHJ4X3NrYiwgTkNJX0hDSV9IQ1BfTUVTU0FHRV9IRUFERVJfTEVOKTtcbiYjNDM7XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xuIFxuIFx0XHRpZiAoIXIgXHUwMDI2XHUwMDI2IHNrYilcbi1cdFx0XHQqc2tiID0gY29ubl9pbmZvLVx1MDAzZXJ4X3NrYjtcbiYjNDM7XHRcdFx0KnNrYiA9IHJ4X3NrYjtcbiBcdH1cbiBcbiBcdHJldHVybiByO1xuQEAgLTcyOSwxMiAmIzQzOzc4NiwxNiBAQCBpbnQgbmNpX2hjaV9kZXZfc2Vzc2lvbl9pbml0KHN0cnVjdCBuY2lfZGV2ICpuZGV2KVxuIFx0bmRldi1cdTAwM2VoY2lfZGV2LVx1MDAzZWNvdW50X3BpcGVzID0gMDtcbiBcdG5kZXYtXHUwMDNlaGNpX2Rldi1cdTAwM2VleHBlY3RlZF9waXBlcyA9IDA7XG4gXG4mIzQzO1x0c3Bpbl9sb2NrX2JoKFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xuIFx0Y29ubl9pbmZvID0gbmRldi1cdTAwM2VoY2lfZGV2LVx1MDAzZWNvbm5faW5mbztcbi1cdGlmICghY29ubl9pbmZvKVxuJiM0MztcdGlmICghY29ubl9pbmZvKSB7XG4mIzQzO1x0XHRzcGluX3VubG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbiBcdFx0cmV0dXJuIC1FUFJPVE87XG4mIzQzO1x0fVxuIFxuIFx0Y29ubl9pbmZvLVx1MDAzZWRhdGFfZXhjaGFuZ2VfY2IgPSBuY2lfaGNpX2RhdGFfcmVjZWl2ZWRfY2I7XG4gXHRjb25uX2luZm8tXHUwMDNlZGF0YV9leGNoYW5nZV9jYl9jb250ZXh0ID0gbmRldjtcbiYjNDM7XHRzcGluX3VubG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbiBcbiBcdG5jaV9oY2lfcmVzZXRfcGlwZXMobmRldi1cdTAwM2VoY2lfZGV2KTtcbiBcbmRpZmYgLS1naXQgYS9uZXQvbmZjL25jaS9udGYuYyBiL25ldC9uZmMvbmNpL250Zi5jXG5pbmRleCBjOTY1MTJiYjg2NTMxNS4uNDgyOGExYzlkMzVmMGUgMTAwNjQ0XG4tLS0gYS9uZXQvbmZjL25jaS9udGYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25mYy9uY2kvbnRmLmNcbkBAIC04MSwxMyAmIzQzOzgxLDE3IEBAIHN0YXRpYyBpbnQgbmNpX2NvcmVfY29ubl9jcmVkaXRzX250Zl9wYWNrZXQoc3RydWN0IG5jaV9kZXYgKm5kZXYsXG4gXHRcdFx0IGksIG50Zi1cdTAwM2Vjb25uX2VudHJpZXNbaV0uY29ubl9pZCxcbiBcdFx0XHQgbnRmLVx1MDAzZWNvbm5fZW50cmllc1tpXS5jcmVkaXRzKTtcbiBcbi1cdFx0Y29ubl9pbmZvID0gbmNpX2dldF9jb25uX2luZm9fYnlfY29ubl9pZChuZGV2LFxuLVx0XHRcdFx0XHRcdFx0IG50Zi1cdTAwM2Vjb25uX2VudHJpZXNbaV0uY29ubl9pZCk7XG4tXHRcdGlmICghY29ubl9pbmZvKVxuJiM0MztcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xuJiM0MztcdFx0Y29ubl9pbmZvID0gbmNpX2dldF9jb25uX2luZm9fYnlfY29ubl9pZF9sb2NrZWQobmRldixcbiYjNDM7XHRcdFx0XHRcdFx0XHRcdG50Zi1cdTAwM2Vjb25uX2VudHJpZXNbaV0uY29ubl9pZCk7XG4mIzQzO1x0XHRpZiAoIWNvbm5faW5mbykge1xuJiM0MztcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbiBcdFx0XHRyZXR1cm4gMDtcbiYjNDM7XHRcdH1cbiBcbiBcdFx0YXRvbWljX2FkZChudGYtXHUwMDNlY29ubl9lbnRyaWVzW2ldLmNyZWRpdHMsXG4gXHRcdFx0ICAgXHUwMDI2Y29ubl9pbmZvLVx1MDAzZWNyZWRpdHNfY250KTtcbiYjNDM7XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xuIFx0fVxuIFxuIFx0LyogdHJpZ2dlciB0aGUgbmV4dCB0eCAqL1xuQEAgLTgyOCw5ICYjNDM7ODMyLDEyIEBAIHN0YXRpYyBpbnQgbmNpX3JmX2ludGZfYWN0aXZhdGVkX250Zl9wYWNrZXQoc3RydWN0IG5jaV9kZXYgKm5kZXYsXG4gXG4gZXhpdDpcbiBcdGlmIChlcnIgPT0gTkNJX1NUQVRVU19PSykge1xuJiM0MztcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xuIFx0XHRjb25uX2luZm8gPSBuZGV2LVx1MDAzZXJmX2Nvbm5faW5mbztcbi1cdFx0aWYgKCFjb25uX2luZm8pXG4mIzQzO1x0XHRpZiAoIWNvbm5faW5mbykge1xuJiM0MztcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbiBcdFx0XHRyZXR1cm4gMDtcbiYjNDM7XHRcdH1cbiBcbiBcdFx0Y29ubl9pbmZvLVx1MDAzZW1heF9wa3RfcGF5bG9hZF9sZW4gPSBudGYubWF4X2RhdGFfcGt0X3BheWxvYWRfc2l6ZTtcbiBcdFx0Y29ubl9pbmZvLVx1MDAzZWluaXRpYWxfbnVtX2NyZWRpdHMgPSBudGYuaW5pdGlhbF9udW1fY3JlZGl0cztcbkBAIC04MzgsNiAmIzQzOzg0NSw3IEBAIHN0YXRpYyBpbnQgbmNpX3JmX2ludGZfYWN0aXZhdGVkX250Zl9wYWNrZXQoc3RydWN0IG5jaV9kZXYgKm5kZXYsXG4gXHRcdC8qIHNldCB0aGUgYXZhaWxhYmxlIGNyZWRpdHMgdG8gaW5pdGlhbCB2YWx1ZSAqL1xuIFx0XHRhdG9taWNfc2V0KFx1MDAyNmNvbm5faW5mby1cdTAwM2VjcmVkaXRzX2NudCxcbiBcdFx0XHQgICBjb25uX2luZm8tXHUwMDNlaW5pdGlhbF9udW1fY3JlZGl0cyk7XG4mIzQzO1x0XHRzcGluX3VubG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbiBcbiBcdFx0Lyogc3RvcmUgZ2VuZXJhbCBieXRlcyB0byBiZSByZXBvcnRlZCBsYXRlciBpbiBkZXBfbGlua191cCAqL1xuIFx0XHRpZiAobnRmLnJmX2ludGVyZmFjZSA9PSBOQ0lfUkZfSU5URVJGQUNFX05GQ19ERVApIHtcbkBAIC05MDEsOSAmIzQzOzkwOSwxMyBAQCBzdGF0aWMgaW50IG5jaV9yZl9kZWFjdGl2YXRlX250Zl9wYWNrZXQoc3RydWN0IG5jaV9kZXYgKm5kZXYsXG4gXG4gXHRwcl9kZWJ1ZyhcJiMzNDtlbnRyeSwgdHlwZSAweCV4LCByZWFzb24gMHgleFxcblwmIzM0OywgbnRmLVx1MDAzZXR5cGUsIG50Zi1cdTAwM2VyZWFzb24pO1xuIFxuJiM0MztcdHNwaW5fbG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbiBcdGNvbm5faW5mbyA9IG5kZXYtXHUwMDNlcmZfY29ubl9pbmZvO1xuLVx0aWYgKCFjb25uX2luZm8pXG4mIzQzO1x0aWYgKCFjb25uX2luZm8pIHtcbiYjNDM7XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xuIFx0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4mIzQzO1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bmRldi1cdTAwM2Vjb25uX2luZm9fbG9jayk7XG4gXG4gXHQvKiBkcm9wIHR4IGRhdGEgcXVldWUgKi9cbiBcdHNrYl9xdWV1ZV9wdXJnZShcdTAwMjZuZGV2LVx1MDAzZXR4X3EpO1xuZGlmZiAtLWdpdCBhL25ldC9uZmMvbmNpL3JzcC5jIGIvbmV0L25mYy9uY2kvcnNwLmNcbmluZGV4IDllZWI4NjI4MjVjNWZlLi4wY2ZmMTI1MDkyM2VkOSAxMDA2NDRcbi0tLSBhL25ldC9uZmMvbmNpL3JzcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmZjL25jaS9yc3AuY1xuQEAgLTE4Niw2ICYjNDM7MTg2LDcgQEAgc3RhdGljIHZvaWQgbmNpX3JmX2Rpc2NfcnNwX3BhY2tldChzdHJ1Y3QgbmNpX2RldiAqbmRldixcbiBcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuIFx0c3RydWN0IG5jaV9jb25uX2luZm8gKmNvbm5faW5mbztcbiYjNDM7XHRzdHJ1Y3QgbmNpX2Nvbm5faW5mbyAqbmV3X2Nvbm5faW5mbztcbiBcdF9fdTggc3RhdHVzID0gc2tiLVx1MDAzZWRhdGFbMF07XG4gXG4gXHRwcl9kZWJ1ZyhcJiMzNDtzdGF0dXMgMHgleFxcblwmIzM0Oywgc3RhdHVzKTtcbkBAIC0xOTMsMTkgJiM0MzsxOTQsMzMgQEAgc3RhdGljIHZvaWQgbmNpX3JmX2Rpc2NfcnNwX3BhY2tldChzdHJ1Y3QgbmNpX2RldiAqbmRldixcbiBcdGlmIChzdGF0dXMgPT0gTkNJX1NUQVRVU19PSykge1xuIFx0XHRhdG9taWNfc2V0KFx1MDAyNm5kZXYtXHUwMDNlc3RhdGUsIE5DSV9ESVNDT1ZFUlkpO1xuIFxuJiM0MztcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xuIFx0XHRjb25uX2luZm8gPSBuZGV2LVx1MDAzZXJmX2Nvbm5faW5mbztcbiYjNDM7XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xuJiM0MztcbiBcdFx0aWYgKCFjb25uX2luZm8pIHtcbi1cdFx0XHRjb25uX2luZm8gPSBkZXZtX2t6YWxsb2MoXHUwMDI2bmRldi1cdTAwM2VuZmNfZGV2LVx1MDAzZWRldixcbi1cdFx0XHRcdFx0XHQgc2l6ZW9mKHN0cnVjdCBuY2lfY29ubl9pbmZvKSxcbi1cdFx0XHRcdFx0XHQgR0ZQX0tFUk5FTCk7XG4tXHRcdFx0aWYgKCFjb25uX2luZm8pIHtcbiYjNDM7XHRcdFx0bmV3X2Nvbm5faW5mbyA9IGRldm1fa3phbGxvYyhcdTAwMjZuZGV2LVx1MDAzZW5mY19kZXYtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHRcdFx0XHQgICAgIHNpemVvZihzdHJ1Y3QgbmNpX2Nvbm5faW5mbyksXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0XHRcdGlmICghbmV3X2Nvbm5faW5mbykge1xuIFx0XHRcdFx0c3RhdHVzID0gTkNJX1NUQVRVU19SRUpFQ1RFRDtcbiBcdFx0XHRcdGdvdG8gZXhpdDtcbiBcdFx0XHR9XG4tXHRcdFx0Y29ubl9pbmZvLVx1MDAzZWNvbm5faWQgPSBOQ0lfU1RBVElDX1JGX0NPTk5fSUQ7XG4tXHRcdFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2Y29ubl9pbmZvLVx1MDAzZWxpc3QpO1xuLVx0XHRcdGxpc3RfYWRkKFx1MDAyNmNvbm5faW5mby1cdTAwM2VsaXN0LCBcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19saXN0KTtcbi1cdFx0XHRuZGV2LVx1MDAzZXJmX2Nvbm5faW5mbyA9IGNvbm5faW5mbztcbiYjNDM7XG4mIzQzO1x0XHRcdG5ld19jb25uX2luZm8tXHUwMDNlY29ubl9pZCA9IE5DSV9TVEFUSUNfUkZfQ09OTl9JRDtcbiYjNDM7XHRcdFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2bmV3X2Nvbm5faW5mby1cdTAwM2VsaXN0KTtcbiYjNDM7XG4mIzQzO1x0XHRcdHNwaW5fbG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbiYjNDM7XHRcdFx0aWYgKCFuZGV2LVx1MDAzZXJmX2Nvbm5faW5mbykge1xuJiM0MztcdFx0XHRcdGxpc3RfYWRkKFx1MDAyNm5ld19jb25uX2luZm8tXHUwMDNlbGlzdCxcbiYjNDM7XHRcdFx0XHRcdCBcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19saXN0KTtcbiYjNDM7XHRcdFx0XHRuZGV2LVx1MDAzZXJmX2Nvbm5faW5mbyA9IG5ld19jb25uX2luZm87XG4mIzQzO1x0XHRcdFx0bmV3X2Nvbm5faW5mbyA9IE5VTEw7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bmRldi1cdTAwM2Vjb25uX2luZm9fbG9jayk7XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAobmV3X2Nvbm5faW5mbylcbiYjNDM7XHRcdFx0XHRkZXZtX2tmcmVlKFx1MDAyNm5kZXYtXHUwMDNlbmZjX2Rldi1cdTAwM2VkZXYsIG5ld19jb25uX2luZm8pO1xuIFx0XHR9XG4gXHR9XG4gXG5AQCAtMjk4LDIwICYjNDM7MzEzLDIwIEBAIHN0YXRpYyB2b2lkIG5jaV9jb3JlX2Nvbm5fY3JlYXRlX3JzcF9wYWNrZXQoc3RydWN0IG5jaV9kZXYgKm5kZXYsXG4gXHRcdGNvbm5faW5mby1cdTAwM2VkZXN0X3BhcmFtcy1cdTAwM2VpZCA9IG5kZXYtXHUwMDNlY3VyX3BhcmFtcy5pZDtcbiBcdFx0Y29ubl9pbmZvLVx1MDAzZWRlc3RfcGFyYW1zLVx1MDAzZXByb3RvY29sID0gbmRldi1cdTAwM2VjdXJfcGFyYW1zLnByb3RvY29sO1xuIFx0XHRjb25uX2luZm8tXHUwMDNlY29ubl9pZCA9IHJzcC1cdTAwM2Vjb25uX2lkO1xuJiM0MztcdFx0Y29ubl9pbmZvLVx1MDAzZW1heF9wa3RfcGF5bG9hZF9sZW4gPSByc3AtXHUwMDNlbWF4X2N0cmxfcGt0X3BheWxvYWRfbGVuO1xuJiM0MztcdFx0YXRvbWljX3NldChcdTAwMjZjb25uX2luZm8tXHUwMDNlY3JlZGl0c19jbnQsIHJzcC1cdTAwM2VjcmVkaXRzX2NudCk7XG4gXG4gXHRcdC8qIE5vdGU6IGRhdGFfZXhjaGFuZ2VfY2IgYW5kIGRhdGFfZXhjaGFuZ2VfY2JfY29udGV4dCBuZWVkIHRvXG4gXHRcdCAqIGJlIHNwZWNpZnkgb3V0IG9mIG5jaV9jb3JlX2Nvbm5fY3JlYXRlX3JzcF9wYWNrZXRcbiBcdFx0ICovXG4gXG4gXHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNmNvbm5faW5mby1cdTAwM2VsaXN0KTtcbiYjNDM7XHRcdHNwaW5fbG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbiBcdFx0bGlzdF9hZGQoXHUwMDI2Y29ubl9pbmZvLVx1MDAzZWxpc3QsIFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xpc3QpO1xuIFxuIFx0XHRpZiAobmRldi1cdTAwM2VjdXJfcGFyYW1zLmlkID09IG5kZXYtXHUwMDNlaGNpX2Rldi1cdTAwM2VuZmNlZV9pZClcbiBcdFx0XHRuZGV2LVx1MDAzZWhjaV9kZXYtXHUwMDNlY29ubl9pbmZvID0gY29ubl9pbmZvO1xuLVxuLVx0XHRjb25uX2luZm8tXHUwMDNlY29ubl9pZCA9IHJzcC1cdTAwM2Vjb25uX2lkO1xuLVx0XHRjb25uX2luZm8tXHUwMDNlbWF4X3BrdF9wYXlsb2FkX2xlbiA9IHJzcC1cdTAwM2VtYXhfY3RybF9wa3RfcGF5bG9hZF9sZW47XG4tXHRcdGF0b21pY19zZXQoXHUwMDI2Y29ubl9pbmZvLVx1MDAzZWNyZWRpdHNfY250LCByc3AtXHUwMDNlY3JlZGl0c19jbnQpO1xuJiM0MztcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bmRldi1cdTAwM2Vjb25uX2luZm9fbG9jayk7XG4gXHR9XG4gXG4gZnJlZV9jb25uX2luZm86XG5AQCAtMzMwLDE0ICYjNDM7MzQ1LDE5IEBAIHN0YXRpYyB2b2lkIG5jaV9jb3JlX2Nvbm5fY2xvc2VfcnNwX3BhY2tldChzdHJ1Y3QgbmNpX2RldiAqbmRldixcbiBcbiBcdHByX2RlYnVnKFwmIzM0O3N0YXR1cyAweCV4XFxuXCYjMzQ7LCBzdGF0dXMpO1xuIFx0aWYgKHN0YXR1cyA9PSBOQ0lfU1RBVFVTX09LKSB7XG4tXHRcdGNvbm5faW5mbyA9IG5jaV9nZXRfY29ubl9pbmZvX2J5X2Nvbm5faWQobmRldixcbi1cdFx0XHRcdFx0XHRcdCBuZGV2LVx1MDAzZWN1cl9jb25uX2lkKTtcbiYjNDM7XHRcdHNwaW5fbG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbiYjNDM7XHRcdGNvbm5faW5mbyA9IG5jaV9nZXRfY29ubl9pbmZvX2J5X2Nvbm5faWRfbG9ja2VkKG5kZXYsXG4mIzQzO1x0XHRcdFx0XHRcdFx0XHRuZGV2LVx1MDAzZWN1cl9jb25uX2lkKTtcbiBcdFx0aWYgKGNvbm5faW5mbykge1xuIFx0XHRcdGxpc3RfZGVsKFx1MDAyNmNvbm5faW5mby1cdTAwM2VsaXN0KTtcbiBcdFx0XHRpZiAoY29ubl9pbmZvID09IG5kZXYtXHUwMDNlcmZfY29ubl9pbmZvKVxuIFx0XHRcdFx0bmRldi1cdTAwM2VyZl9jb25uX2luZm8gPSBOVUxMO1xuLVx0XHRcdGRldm1fa2ZyZWUoXHUwMDI2bmRldi1cdTAwM2VuZmNfZGV2LVx1MDAzZWRldiwgY29ubl9pbmZvKTtcbiYjNDM7XHRcdFx0aWYgKGNvbm5faW5mbyA9PSBuZGV2LVx1MDAzZWhjaV9kZXYtXHUwMDNlY29ubl9pbmZvKVxuJiM0MztcdFx0XHRcdG5kZXYtXHUwMDNlaGNpX2Rldi1cdTAwM2Vjb25uX2luZm8gPSBOVUxMO1xuIFx0XHR9XG4mIzQzO1x0XHRzcGluX3VubG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbiYjNDM7XHRcdGlmIChjb25uX2luZm8pXG4mIzQzO1x0XHRcdGRldm1fa2ZyZWUoXHUwMDI2bmRldi1cdTAwM2VuZmNfZGV2LVx1MDAzZWRldiwgY29ubl9pbmZvKTtcbiBcdH1cbiBcdG5jaV9yZXFfY29tcGxldGUobmRldiwgc3RhdHVzKTtcbiB9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMDk6MjU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkZDJiMzNDssCiAgICAmIzM0O05GQ19OQ0kmIzM0OywKICAgICYjMzQ7TkZDX1ZJUlRVQUxfTkNJJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmNpX25mY2NfbG9vcGJhY2smIzM0OywKICAgICYjMzQ7bmNpX3RyYW5zY2VpdmUmIzM0OywKICAgICYjMzQ7bmNpX3NlbmRfZGF0YSYjMzQ7LAogICAgJiMzNDtuY2lfcnhfZGF0YV9wYWNrZXQmIzM0OywKICAgICYjMzQ7bmNpX2hjaV9zZW5kX2NtZCYjMzQ7LAogICAgJiMzNDtuY2lfaGNpX3NldF9wYXJhbSYjMzQ7LAogICAgJiMzNDtuY2lfaGNpX2dldF9wYXJhbSYjMzQ7LAogICAgJiMzNDtuY2lfY29yZV9jb25uX2NyZWF0ZV9yc3BfcGFja2V0JiMzNDssCiAgICAmIzM0O25jaV9jb3JlX2Nvbm5fY2xvc2VfcnNwX3BhY2tldCYjMzQ7LAogICAgJiMzNDtuY2lfcmZfZGlzY19yc3BfcGFja2V0JiMzNDssCiAgICAmIzM0O25jaV9jb3JlX2Nvbm5fY3JlZGl0c19udGZfcGFja2V0JiMzNDssCiAgICAmIzM0O25jaV9yZl9pbnRmX2FjdGl2YXRlZF9udGZfcGFja2V0JiMzNDssCiAgICAmIzM0O25jaV9yZl9kZWFjdGl2YXRlX250Zl9wYWNrZXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgY29uY3VycmVuY3kgaXNzdWVzIGluIHRoZSBORkMgTkNJIGNvcmUgYnkgaW50cm9kdWNpbmcgYSBzcGlubG9jayB0byBwcm90ZWN0IGNvbm5lY3Rpb24gaW5mbyBsaXN0cyBhbmQgcG9pbnRlcnMuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGNvcmUgZGF0YSB0cmFuc21pc3Npb24sIHJlY2VwdGlvbiwgYW5kIEhDSSBjb21tYW5kIGhhbmRsaW5nLCB3aGljaCBhcmUgcmVhY2hhYmxlIHZpYSB0aGUgdmlydHVhbCBOQ0kgZHJpdmVyLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBhZTU1ZTg4ZDdhNGY3MTA1YjQ0ODY4MjJlM2FkZjUzODhmMWI4YTAwCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBKdW4gMzAgMDk6MjU6MjkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25mYy9zdC1uY2kvc2UuYyBiL2RyaXZlcnMvbmZjL3N0LW5jaS9zZS5jCmluZGV4IDYwN2VjNzY4ZWI3YjRjLi4xZjhlMjI2NWUyMGIwNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZmMvc3QtbmNpL3NlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZmMvc3QtbmNpL3NlLmMKQEAgLTU0OCw2ICYjNDM7NTQ4LDcgQEAgc3RhdGljIGludCBzdF9uY2lfaGNpX25ldHdvcmtfaW5pdChzdHJ1Y3QgbmNpX2RldiAqbmRldikKIAlzdHJ1Y3QgY29yZV9jb25uX2NyZWF0ZV9kZXN0X3NwZWNfcGFyYW1zICpkZXN0X3BhcmFtczsKIAlzdHJ1Y3QgZGVzdF9zcGVjX3BhcmFtcyBzcGVjX3BhcmFtczsKIAlzdHJ1Y3QgbmNpX2Nvbm5faW5mbyAgICAqY29ubl9pbmZvOwomIzQzOwl1OCBuZmNlZV9pZDsKIAlpbnQgciwgZGV2X251bTsKIAogCWRlc3RfcGFyYW1zID0KQEAgLTU2OSw5ICYjNDM7NTcwLDE0IEBAIHN0YXRpYyBpbnQgc3RfbmNpX2hjaV9uZXR3b3JrX2luaXQoc3RydWN0IG5jaV9kZXYgKm5kZXYpCiAJaWYgKHIgIT0gTkNJX1NUQVRVU19PSykKIAkJZ290byBmcmVlX2Rlc3RfcGFyYW1zOwogCiYjNDM7CXNwaW5fbG9ja19iaCgmYW1wO25kZXYtJmd0O2Nvbm5faW5mb19sb2NrKTsKIAljb25uX2luZm8gPSBuZGV2LSZndDtoY2lfZGV2LSZndDtjb25uX2luZm87Ci0JaWYgKCFjb25uX2luZm8pCiYjNDM7CWlmICghY29ubl9pbmZvKSB7CiYjNDM7CQlzcGluX3VubG9ja19iaCgmYW1wO25kZXYtJmd0O2Nvbm5faW5mb19sb2NrKTsKIAkJZ290byBmcmVlX2Rlc3RfcGFyYW1zOwomIzQzOwl9CiYjNDM7CW5mY2VlX2lkID0gY29ubl9pbmZvLSZndDtkZXN0X3BhcmFtcy0mZ3Q7aWQ7CiYjNDM7CXNwaW5fdW5sb2NrX2JoKCZhbXA7bmRldi0mZ3Q7Y29ubl9pbmZvX2xvY2spOwogCiAJbmRldi0mZ3Q7aGNpX2Rldi0mZ3Q7aW5pdF9kYXRhLmdhdGVfY291bnQgPSBBUlJBWV9TSVpFKHN0X25jaV9nYXRlcyk7CiAJbWVtY3B5KG5kZXYtJmd0O2hjaV9kZXYtJmd0O2luaXRfZGF0YS5nYXRlcywgc3RfbmNpX2dhdGVzLApAQCAtNjAxLDEzICYjNDM7NjA3LDkgQEAgc3RhdGljIGludCBzdF9uY2lfaGNpX25ldHdvcmtfaW5pdChzdHJ1Y3QgbmNpX2RldiAqbmRldikKIAkgKiBIQ0kgd2lsbCBiZSB1c2VkIGhlcmUgb25seSBmb3IgcHJvcHJpZXRhcnkgY29tbWFuZHMuCiAJICovCiAJaWYgKHRlc3RfYml0KFNUX05DSV9GQUNUT1JZX01PREUsICZhbXA7aW5mby0mZ3Q7ZmxhZ3MpKQotCQlyID0gbmNpX25mY2VlX21vZGVfc2V0KG5kZXYsCi0JCQkJICAgICAgIG5kZXYtJmd0O2hjaV9kZXYtJmd0O2Nvbm5faW5mby0mZ3Q7ZGVzdF9wYXJhbXMtJmd0O2lkLAotCQkJCSAgICAgICBOQ0lfTkZDRUVfRElTQUJMRSk7CiYjNDM7CQlyID0gbmNpX25mY2VlX21vZGVfc2V0KG5kZXYsIG5mY2VlX2lkLCBOQ0lfTkZDRUVfRElTQUJMRSk7CiAJZWxzZQotCQlyID0gbmNpX25mY2VlX21vZGVfc2V0KG5kZXYsCi0JCQkJICAgICAgIG5kZXYtJmd0O2hjaV9kZXYtJmd0O2Nvbm5faW5mby0mZ3Q7ZGVzdF9wYXJhbXMtJmd0O2lkLAotCQkJCSAgICAgICBOQ0lfTkZDRUVfRU5BQkxFKTsKJiM0MzsJCXIgPSBuY2lfbmZjZWVfbW9kZV9zZXQobmRldiwgbmZjZWVfaWQsIE5DSV9ORkNFRV9FTkFCTEUpOwogCiBmcmVlX2Rlc3RfcGFyYW1zOgogCWtmcmVlKGRlc3RfcGFyYW1zKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25mYy9uY2lfY29yZS5oIGIvaW5jbHVkZS9uZXQvbmZjL25jaV9jb3JlLmgKaW5kZXggNjY0ZDUwNThlNjZlMDEuLmE1YjE4NmYyNzNkOTc0IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9uZmMvbmNpX2NvcmUuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9uZmMvbmNpX2NvcmUuaApAQCAtMTksNiAmIzQzOzE5LDcgQEAKIAogI2luY2x1ZGUgJmx0O2xpbnV4L2ludGVycnVwdC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NrYnVmZi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9zcGlubG9jay5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3R0eS5oJmd0OwogCiAjaW5jbHVkZSAmbHQ7bmV0L25mYy9uZmMuaCZndDsKQEAgLTIyNyw2ICYjNDM7MjI4LDggQEAgc3RydWN0IG5jaV9kZXYgewogCXN0cnVjdCBza19idWZmX2hlYWQJdHhfcTsKIAogCXN0cnVjdCBtdXRleAkJcmVxX2xvY2s7CiYjNDM7CS8qIFNlcmlhbGl6ZXMgY29ubl9pbmZvX2xpc3QgYW5kIGNvbm5faW5mbyBwb2ludGVyIGFsaWFzIHVwZGF0ZXMuICovCiYjNDM7CXNwaW5sb2NrX3QJCWNvbm5faW5mb19sb2NrOwogCXN0cnVjdCBjb21wbGV0aW9uCXJlcV9jb21wbGV0aW9uOwogCV9fdTMyCQkJcmVxX3N0YXR1czsKIAlfX3UzMgkJCXJlcV9yZXN1bHQ7CkBAIC0zODIsOCAmIzQzOzM4NSwxMSBAQCB2b2lkIG5jaV9jbGVhcl90YXJnZXRfbGlzdChzdHJ1Y3QgbmNpX2RldiAqbmRldik7CiAjZGVmaW5lIE5DSV9SRVFfQ0FOQ0VMRUQJMgogCiB2b2lkIG5jaV9yZXFfY29tcGxldGUoc3RydWN0IG5jaV9kZXYgKm5kZXYsIGludCByZXN1bHQpOwotc3RydWN0IG5jaV9jb25uX2luZm8gKm5jaV9nZXRfY29ubl9pbmZvX2J5X2Nvbm5faWQoc3RydWN0IG5jaV9kZXYgKm5kZXYsCi0JCQkJCQkgICBpbnQgY29ubl9pZCk7CiYjNDM7c3RydWN0IG5jaV9jb25uX2luZm8gKm5jaV9nZXRfY29ubl9pbmZvX2J5X2Nvbm5faWRfbG9ja2VkKHN0cnVjdCBuY2lfZGV2ICpuZGV2LAomIzQzOwkJCQkJCQkgIGludCBjb25uX2lkKTsKJiM0MztpbnQgbmNpX2dldF9jb25uX2luZm9fYnlfZGVzdF90eXBlX3BhcmFtc19sb2NrZWQoc3RydWN0IG5jaV9kZXYgKm5kZXYsCiYjNDM7CQkJCQkJIHU4IGRlc3RfdHlwZSwKJiM0MzsJCQkJCQkgY29uc3Qgc3RydWN0IGRlc3Rfc3BlY19wYXJhbXMgKnBhcmFtcyk7CiBpbnQgbmNpX2dldF9jb25uX2luZm9fYnlfZGVzdF90eXBlX3BhcmFtcyhzdHJ1Y3QgbmNpX2RldiAqbmRldiwgdTggZGVzdF90eXBlLAogCQkJCQkgIGNvbnN0IHN0cnVjdCBkZXN0X3NwZWNfcGFyYW1zICpwYXJhbXMpOwogCmRpZmYgLS1naXQgYS9uZXQvbmZjL25jaS9jb3JlLmMgYi9uZXQvbmZjL25jaS9jb3JlLmMKaW5kZXggNWY0NmM0YjU3MjBmNmMuLjU3NTk1YTgyOWM4YjA2IDEwMDY0NAotLS0gYS9uZXQvbmZjL25jaS9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25mYy9uY2kvY29yZS5jCkBAIC00MCw4ICYjNDM7NDAsOCBAQCBzdGF0aWMgdm9pZCBuY2lfY21kX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKIHN0YXRpYyB2b2lkIG5jaV9yeF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CiBzdGF0aWMgdm9pZCBuY2lfdHhfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwogCi1zdHJ1Y3QgbmNpX2Nvbm5faW5mbyAqbmNpX2dldF9jb25uX2luZm9fYnlfY29ubl9pZChzdHJ1Y3QgbmNpX2RldiAqbmRldiwKLQkJCQkJCSAgIGludCBjb25uX2lkKQomIzQzO3N0cnVjdCBuY2lfY29ubl9pbmZvICpuY2lfZ2V0X2Nvbm5faW5mb19ieV9jb25uX2lkX2xvY2tlZChzdHJ1Y3QgbmNpX2RldiAqbmRldiwKJiM0MzsJCQkJCQkJICBpbnQgY29ubl9pZCkKIHsKIAlzdHJ1Y3QgbmNpX2Nvbm5faW5mbyAqY29ubl9pbmZvOwogCkBAIC01Myw4ICYjNDM7NTMsOSBAQCBzdHJ1Y3QgbmNpX2Nvbm5faW5mbyAqbmNpX2dldF9jb25uX2luZm9fYnlfY29ubl9pZChzdHJ1Y3QgbmNpX2RldiAqbmRldiwKIAlyZXR1cm4gTlVMTDsKIH0KIAotaW50IG5jaV9nZXRfY29ubl9pbmZvX2J5X2Rlc3RfdHlwZV9wYXJhbXMoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHU4IGRlc3RfdHlwZSwKLQkJCQkJICBjb25zdCBzdHJ1Y3QgZGVzdF9zcGVjX3BhcmFtcyAqcGFyYW1zKQomIzQzO2ludCBuY2lfZ2V0X2Nvbm5faW5mb19ieV9kZXN0X3R5cGVfcGFyYW1zX2xvY2tlZChzdHJ1Y3QgbmNpX2RldiAqbmRldiwKJiM0MzsJCQkJCQkgdTggZGVzdF90eXBlLAomIzQzOwkJCQkJCSBjb25zdCBzdHJ1Y3QgZGVzdF9zcGVjX3BhcmFtcyAqcGFyYW1zKQogewogCWNvbnN0IHN0cnVjdCBuY2lfY29ubl9pbmZvICpjb25uX2luZm87CiAKQEAgLTcxLDYgJiM0Mzs3MiwxOSBAQCBpbnQgbmNpX2dldF9jb25uX2luZm9fYnlfZGVzdF90eXBlX3BhcmFtcyhzdHJ1Y3QgbmNpX2RldiAqbmRldiwgdTggZGVzdF90eXBlLAogCiAJcmV0dXJuIC1FSU5WQUw7CiB9CiYjNDM7CiYjNDM7aW50IG5jaV9nZXRfY29ubl9pbmZvX2J5X2Rlc3RfdHlwZV9wYXJhbXMoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHU4IGRlc3RfdHlwZSwKJiM0MzsJCQkJCSAgY29uc3Qgc3RydWN0IGRlc3Rfc3BlY19wYXJhbXMgKnBhcmFtcykKJiM0Mzt7CiYjNDM7CWludCBjb25uX2lkOwomIzQzOwomIzQzOwlzcGluX2xvY2tfYmgoJmFtcDtuZGV2LSZndDtjb25uX2luZm9fbG9jayk7CiYjNDM7CWNvbm5faWQgPSBuY2lfZ2V0X2Nvbm5faW5mb19ieV9kZXN0X3R5cGVfcGFyYW1zX2xvY2tlZChuZGV2LCBkZXN0X3R5cGUsCiYjNDM7CQkJCQkJCSAgICAgICBwYXJhbXMpOwomIzQzOwlzcGluX3VubG9ja19iaCgmYW1wO25kZXYtJmd0O2Nvbm5faW5mb19sb2NrKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGNvbm5faWQ7CiYjNDM7fQogRVhQT1JUX1NZTUJPTChuY2lfZ2V0X2Nvbm5faW5mb19ieV9kZXN0X3R5cGVfcGFyYW1zKTsKIAogLyogLS0tLSBOQ0kgcmVxdWVzdHMgLS0tLSAqLwpAQCAtNDExLDEzICYjNDM7NDI1LDE3IEBAIHN0YXRpYyB2b2lkIG5jaV9uZmNjX2xvb3BiYWNrX2NiKHZvaWQgKmNvbnRleHQsIHN0cnVjdCBza19idWZmICpza2IsIGludCBlcnIpCiAJc3RydWN0IG5jaV9kZXYgKm5kZXYgPSAoc3RydWN0IG5jaV9kZXYgKiljb250ZXh0OwogCXN0cnVjdCBuY2lfY29ubl9pbmZvICpjb25uX2luZm87CiAKLQljb25uX2luZm8gPSBuY2lfZ2V0X2Nvbm5faW5mb19ieV9jb25uX2lkKG5kZXYsIG5kZXYtJmd0O2N1cl9jb25uX2lkKTsKJiM0MzsJc3Bpbl9sb2NrX2JoKCZhbXA7bmRldi0mZ3Q7Y29ubl9pbmZvX2xvY2spOwomIzQzOwljb25uX2luZm8gPSBuY2lfZ2V0X2Nvbm5faW5mb19ieV9jb25uX2lkX2xvY2tlZChuZGV2LAomIzQzOwkJCQkJCQluZGV2LSZndDtjdXJfY29ubl9pZCk7CiAJaWYgKCFjb25uX2luZm8pIHsKJiM0MzsJCXNwaW5fdW5sb2NrX2JoKCZhbXA7bmRldi0mZ3Q7Y29ubl9pbmZvX2xvY2spOwogCQluY2lfcmVxX2NvbXBsZXRlKG5kZXYsIE5DSV9TVEFUVVNfUkVKRUNURUQpOwogCQlyZXR1cm47CiAJfQogCiAJY29ubl9pbmZvLSZndDtyeF9za2IgPSBza2I7CiYjNDM7CXNwaW5fdW5sb2NrX2JoKCZhbXA7bmRldi0mZ3Q7Y29ubl9pbmZvX2xvY2spOwogCiAJbmNpX3JlcV9jb21wbGV0ZShuZGV2LCBOQ0lfU1RBVFVTX09LKTsKIH0KQEAgLTQ0MywxMyAmIzQzOzQ2MSwxNyBAQCBpbnQgbmNpX25mY2NfbG9vcGJhY2soc3RydWN0IG5jaV9kZXYgKm5kZXYsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBkYXRhX2xlbiwKIAkJCQkJTlVMTCk7CiAJfQogCi0JY29ubl9pbmZvID0gbmNpX2dldF9jb25uX2luZm9fYnlfY29ubl9pZChuZGV2LCBjb25uX2lkKTsKLQlpZiAoIWNvbm5faW5mbykKJiM0MzsJc3Bpbl9sb2NrX2JoKCZhbXA7bmRldi0mZ3Q7Y29ubl9pbmZvX2xvY2spOwomIzQzOwljb25uX2luZm8gPSBuY2lfZ2V0X2Nvbm5faW5mb19ieV9jb25uX2lkX2xvY2tlZChuZGV2LCBjb25uX2lkKTsKJiM0MzsJaWYgKCFjb25uX2luZm8pIHsKJiM0MzsJCXNwaW5fdW5sb2NrX2JoKCZhbXA7bmRldi0mZ3Q7Y29ubl9pbmZvX2xvY2spOwogCQlyZXR1cm4gLUVQUk9UTzsKJiM0MzsJfQogCiAJLyogc3RvcmUgY2IgYW5kIGNvbnRleHQgdG8gYmUgdXNlZCBvbiByZWNlaXZpbmcgZGF0YSAqLwogCWNvbm5faW5mby0mZ3Q7ZGF0YV9leGNoYW5nZV9jYiA9IG5jaV9uZmNjX2xvb3BiYWNrX2NiOwogCWNvbm5faW5mby0mZ3Q7ZGF0YV9leGNoYW5nZV9jYl9jb250ZXh0ID0gbmRldjsKJiM0MzsJc3Bpbl91bmxvY2tfYmgoJmFtcDtuZGV2LSZndDtjb25uX2luZm9fbG9jayk7CiAKIAlza2IgPSBuY2lfc2tiX2FsbG9jKG5kZXYsIE5DSV9EQVRBX0hEUl9TSVpFICYjNDM7IGRhdGFfbGVuLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXNrYikKQEAgLTQ2NCw4ICYjNDM7NDg2LDE1IEBAIGludCBuY2lfbmZjY19sb29wYmFjayhzdHJ1Y3QgbmNpX2RldiAqbmRldiwgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGRhdGFfbGVuLAogCW5kZXYtJmd0O2N1cl9jb25uX2lkID0gY29ubl9pZDsKIAlyID0gbmNpX3JlcXVlc3QobmRldiwgbmNpX3NlbmRfZGF0YV9yZXEsICZhbXA7bG9vcGJhY2tfZGF0YSwKIAkJCW1zZWNzX3RvX2ppZmZpZXMoTkNJX0RBVEFfVElNRU9VVCkpOwotCWlmIChyID09IE5DSV9TVEFUVVNfT0sgJmFtcDsmYW1wOyByZXNwKQotCQkqcmVzcCA9IGNvbm5faW5mby0mZ3Q7cnhfc2tiOwomIzQzOwlpZiAociA9PSBOQ0lfU1RBVFVTX09LICZhbXA7JmFtcDsgcmVzcCkgewomIzQzOwkJc3Bpbl9sb2NrX2JoKCZhbXA7bmRldi0mZ3Q7Y29ubl9pbmZvX2xvY2spOwomIzQzOwkJY29ubl9pbmZvID0gbmNpX2dldF9jb25uX2luZm9fYnlfY29ubl9pZF9sb2NrZWQobmRldiwgY29ubl9pZCk7CiYjNDM7CQlpZiAoY29ubl9pbmZvKQomIzQzOwkJCSpyZXNwID0gY29ubl9pbmZvLSZndDtyeF9za2I7CiYjNDM7CQllbHNlCiYjNDM7CQkJciA9IC1FUFJPVE87CiYjNDM7CQlzcGluX3VubG9ja19iaCgmYW1wO25kZXYtJmd0O2Nvbm5faW5mb19sb2NrKTsKJiM0MzsJfQogCiAJcmV0dXJuIHI7CiB9CkBAIC0xMDQ1LDEyICYjNDM7MTA3NCw2IEBAIHN0YXRpYyBpbnQgbmNpX3RyYW5zY2VpdmUoc3RydWN0IG5mY19kZXYgKm5mY19kZXYsIHN0cnVjdCBuZmNfdGFyZ2V0ICp0YXJnZXQsCiAJaW50IHJjOwogCXN0cnVjdCBuY2lfY29ubl9pbmZvICpjb25uX2luZm87CiAKLQljb25uX2luZm8gPSBuZGV2LSZndDtyZl9jb25uX2luZm87Ci0JaWYgKCFjb25uX2luZm8pIHsKLQkJa2ZyZWVfc2tiKHNrYik7Ci0JCXJldHVybiAtRVBST1RPOwotCX0KLQogCXByX2RlYnVnKCYjMzQ7dGFyZ2V0X2lkeCAlZCwgbGVuICVkXG4mIzM0OywgdGFyZ2V0LSZndDtpZHgsIHNrYi0mZ3Q7bGVuKTsKIAogCWlmICghbmRldi0mZ3Q7dGFyZ2V0X2FjdGl2ZV9wcm90KSB7CkBAIC0xMDY0LDkgJiM0MzsxMDg3LDE5IEBAIHN0YXRpYyBpbnQgbmNpX3RyYW5zY2VpdmUoc3RydWN0IG5mY19kZXYgKm5mY19kZXYsIHN0cnVjdCBuZmNfdGFyZ2V0ICp0YXJnZXQsCiAJCXJldHVybiAtRUJVU1k7CiAJfQogCiYjNDM7CXNwaW5fbG9ja19iaCgmYW1wO25kZXYtJmd0O2Nvbm5faW5mb19sb2NrKTsKJiM0MzsJY29ubl9pbmZvID0gbmRldi0mZ3Q7cmZfY29ubl9pbmZvOwomIzQzOwlpZiAoIWNvbm5faW5mbykgewomIzQzOwkJc3Bpbl91bmxvY2tfYmgoJmFtcDtuZGV2LSZndDtjb25uX2luZm9fbG9jayk7CiYjNDM7CQlrZnJlZV9za2Ioc2tiKTsKJiM0MzsJCWNsZWFyX2JpdChOQ0lfREFUQV9FWENIQU5HRSwgJmFtcDtuZGV2LSZndDtmbGFncyk7CiYjNDM7CQlyZXR1cm4gLUVQUk9UTzsKJiM0MzsJfQomIzQzOwogCS8qIHN0b3JlIGNiIGFuZCBjb250ZXh0IHRvIGJlIHVzZWQgb24gcmVjZWl2aW5nIGRhdGEgKi8KIAljb25uX2luZm8tJmd0O2RhdGFfZXhjaGFuZ2VfY2IgPSBjYjsKIAljb25uX2luZm8tJmd0O2RhdGFfZXhjaGFuZ2VfY2JfY29udGV4dCA9IGNiX2NvbnRleHQ7CiYjNDM7CXNwaW5fdW5sb2NrX2JoKCZhbXA7bmRldi0mZ3Q7Y29ubl9pbmZvX2xvY2spOwogCiAJcmMgPSBuY2lfc2VuZF9kYXRhKG5kZXYsIE5DSV9TVEFUSUNfUkZfQ09OTl9JRCwgc2tiKTsKIAlpZiAocmMpCkBAIC0xMjg4LDYgJiM0MzsxMzIxLDcgQEAgaW50IG5jaV9yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IG5jaV9kZXYgKm5kZXYpCiAJdGltZXJfc2V0dXAoJmFtcDtuZGV2LSZndDtkYXRhX3RpbWVyLCBuY2lfZGF0YV90aW1lciwgMCk7CiAKIAltdXRleF9pbml0KCZhbXA7bmRldi0mZ3Q7cmVxX2xvY2spOwomIzQzOwlzcGluX2xvY2tfaW5pdCgmYW1wO25kZXYtJmd0O2Nvbm5faW5mb19sb2NrKTsKIAlJTklUX0xJU1RfSEVBRCgmYW1wO25kZXYtJmd0O2Nvbm5faW5mb19saXN0KTsKIAogCXJjID0gbmZjX3JlZ2lzdGVyX2RldmljZShuZGV2LSZndDtuZmNfZGV2KTsKQEAgLTEzMzMsMTEgJiM0MzsxMzY3LDE2IEBAIHZvaWQgbmNpX3VucmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCBuY2lfZGV2ICpuZGV2KQogCWRlc3Ryb3lfd29ya3F1ZXVlKG5kZXYtJmd0O3J4X3dxKTsKIAlkZXN0cm95X3dvcmtxdWV1ZShuZGV2LSZndDt0eF93cSk7CiAKJiM0MzsJc3Bpbl9sb2NrX2JoKCZhbXA7bmRldi0mZ3Q7Y29ubl9pbmZvX2xvY2spOwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjb25uX2luZm8sIG4sICZhbXA7bmRldi0mZ3Q7Y29ubl9pbmZvX2xpc3QsIGxpc3QpIHsKIAkJbGlzdF9kZWwoJmFtcDtjb25uX2luZm8tJmd0O2xpc3QpOwomIzQzOwkJaWYgKGNvbm5faW5mbyA9PSBuZGV2LSZndDtyZl9jb25uX2luZm8pCiYjNDM7CQkJbmRldi0mZ3Q7cmZfY29ubl9pbmZvID0gTlVMTDsKJiM0MzsJCWlmIChjb25uX2luZm8gPT0gbmRldi0mZ3Q7aGNpX2Rldi0mZ3Q7Y29ubl9pbmZvKQomIzQzOwkJCW5kZXYtJmd0O2hjaV9kZXYtJmd0O2Nvbm5faW5mbyA9IE5VTEw7CiAJCS8qIGNvbm5faW5mbyBpcyBhbGxvY2F0ZWQgd2l0aCBkZXZtX2t6YWxsb2MgKi8KIAl9Ci0KJiM0MzsJc3Bpbl91bmxvY2tfYmgoJmFtcDtuZGV2LSZndDtjb25uX2luZm9fbG9jayk7CiAJbmZjX3JlbW92ZV9kZXZpY2UobmRldi0mZ3Q7bmZjX2Rldik7CiB9CiBFWFBPUlRfU1lNQk9MKG5jaV91bnJlZ2lzdGVyX2RldmljZSk7CkBAIC0xNTIzLDIzICYjNDM7MTU2MiwzMSBAQCBzdGF0aWMgdm9pZCBuY2lfdHhfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiAJc3RydWN0IG5jaV9jb25uX2luZm8gKmNvbm5faW5mbzsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCi0JY29ubl9pbmZvID0gbmNpX2dldF9jb25uX2luZm9fYnlfY29ubl9pZChuZGV2LCBuZGV2LSZndDtjdXJfY29ubl9pZCk7Ci0JaWYgKCFjb25uX2luZm8pCi0JCXJldHVybjsKJiM0MzsJLyogU2VuZCBxdWV1ZWQgdHggZGF0YSAqLwomIzQzOwlmb3IgKDs7KSB7CiYjNDM7CQlzcGluX2xvY2tfYmgoJmFtcDtuZGV2LSZndDtjb25uX2luZm9fbG9jayk7CiYjNDM7CQljb25uX2luZm8gPSBuY2lfZ2V0X2Nvbm5faW5mb19ieV9jb25uX2lkX2xvY2tlZChuZGV2LAomIzQzOwkJCQkJCQkJbmRldi0mZ3Q7Y3VyX2Nvbm5faWQpOwomIzQzOwkJaWYgKCFjb25uX2luZm8pCiYjNDM7CQkJZ290byB1bmxvY2s7CiAKLQlwcl9kZWJ1ZygmIzM0O2NyZWRpdHNfY250ICVkXG4mIzM0OywgYXRvbWljX3JlYWQoJmFtcDtjb25uX2luZm8tJmd0O2NyZWRpdHNfY250KSk7CiYjNDM7CQlwcl9kZWJ1ZygmIzM0O2NyZWRpdHNfY250ICVkXG4mIzM0OywKJiM0MzsJCQkgYXRvbWljX3JlYWQoJmFtcDtjb25uX2luZm8tJmd0O2NyZWRpdHNfY250KSk7CiYjNDM7CiYjNDM7CQlpZiAoIWF0b21pY19yZWFkKCZhbXA7Y29ubl9pbmZvLSZndDtjcmVkaXRzX2NudCkpCiYjNDM7CQkJZ290byB1bmxvY2s7CiAKLQkvKiBTZW5kIHF1ZXVlZCB0eCBkYXRhICovCi0Jd2hpbGUgKGF0b21pY19yZWFkKCZhbXA7Y29ubl9pbmZvLSZndDtjcmVkaXRzX2NudCkpIHsKIAkJc2tiID0gc2tiX2RlcXVldWUoJmFtcDtuZGV2LSZndDt0eF9xKTsKIAkJaWYgKCFza2IpCi0JCQlyZXR1cm47Ci0JCWtjb3ZfcmVtb3RlX3N0YXJ0X2NvbW1vbihza2JfZ2V0X2tjb3ZfaGFuZGxlKHNrYikpOwomIzQzOwkJCWdvdG8gdW5sb2NrOwogCiAJCS8qIENoZWNrIGlmIGRhdGEgZmxvdyBjb250cm9sIGlzIHVzZWQgKi8KIAkJaWYgKGF0b21pY19yZWFkKCZhbXA7Y29ubl9pbmZvLSZndDtjcmVkaXRzX2NudCkgIT0KIAkJICAgIE5DSV9EQVRBX0ZMT1dfQ09OVFJPTF9OT1RfVVNFRCkKIAkJCWF0b21pY19kZWMoJmFtcDtjb25uX2luZm8tJmd0O2NyZWRpdHNfY250KTsKJiM0MzsJCXNwaW5fdW5sb2NrX2JoKCZhbXA7bmRldi0mZ3Q7Y29ubl9pbmZvX2xvY2spOwomIzQzOwomIzQzOwkJa2Nvdl9yZW1vdGVfc3RhcnRfY29tbW9uKHNrYl9nZXRfa2Nvdl9oYW5kbGUoc2tiKSk7CiAKIAkJcHJfZGVidWcoJiMzNDtOQ0kgVFg6IE1UPWRhdGEsIFBCRj0lZCwgY29ubl9pZD0lZCwgcGxlbj0lZFxuJiMzNDssCiAJCQkgbmNpX3BiZihza2ItJmd0O2RhdGEpLApAQCAtMTU1Miw2ICYjNDM7MTU5OSw5IEBAIHN0YXRpYyB2b2lkIG5jaV90eF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIAkJCSAgamlmZmllcyAmIzQzOyBtc2Vjc190b19qaWZmaWVzKE5DSV9EQVRBX1RJTUVPVVQpKTsKIAkJa2Nvdl9yZW1vdGVfc3RvcCgpOwogCX0KJiM0MzsKJiM0Mzt1bmxvY2s6CiYjNDM7CXNwaW5fdW5sb2NrX2JoKCZhbXA7bmRldi0mZ3Q7Y29ubl9pbmZvX2xvY2spOwogfQogCiAvKiAtLS0tLSBOQ0kgUlggd29ya2VyIHRocmVhZCAoZGF0YSAmYW1wOyBjb250cm9sKSAtLS0tLSAqLwpkaWZmIC0tZ2l0IGEvbmV0L25mYy9uY2kvZGF0YS5jIGIvbmV0L25mYy9uY2kvZGF0YS5jCmluZGV4IDVmOThjNzNkYjVhZmRlLi4zMzRjMGU1YTk0ZGJjNCAxMDA2NDQKLS0tIGEvbmV0L25mYy9uY2kvZGF0YS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZmMvbmNpL2RhdGEuYwpAQCAtMzAsOCAmIzQzOzMwLDEwIEBAIHZvaWQgbmNpX2RhdGFfZXhjaGFuZ2VfY29tcGxldGUoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHN0cnVjdCBza19idWZmICpza2IsCiAJZGF0YV9leGNoYW5nZV9jYl90IGNiOwogCXZvaWQgKmNiX2NvbnRleHQ7CiAKLQljb25uX2luZm8gPSBuY2lfZ2V0X2Nvbm5faW5mb19ieV9jb25uX2lkKG5kZXYsIGNvbm5faWQpOwomIzQzOwlzcGluX2xvY2tfYmgoJmFtcDtuZGV2LSZndDtjb25uX2luZm9fbG9jayk7CiYjNDM7CWNvbm5faW5mbyA9IG5jaV9nZXRfY29ubl9pbmZvX2J5X2Nvbm5faWRfbG9ja2VkKG5kZXYsIGNvbm5faWQpOwogCWlmICghY29ubl9pbmZvKSB7CiYjNDM7CQlzcGluX3VubG9ja19iaCgmYW1wO25kZXYtJmd0O2Nvbm5faW5mb19sb2NrKTsKIAkJa2ZyZWVfc2tiKHNrYik7CiAJCWNsZWFyX2JpdChOQ0lfREFUQV9FWENIQU5HRSwgJmFtcDtuZGV2LSZndDtmbGFncyk7CiAJCXJldHVybjsKQEAgLTM5LDYgJiM0Mzs0MSw3IEBAIHZvaWQgbmNpX2RhdGFfZXhjaGFuZ2VfY29tcGxldGUoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHN0cnVjdCBza19idWZmICpza2IsCiAKIAljYiA9IGNvbm5faW5mby0mZ3Q7ZGF0YV9leGNoYW5nZV9jYjsKIAljYl9jb250ZXh0ID0gY29ubl9pbmZvLSZndDtkYXRhX2V4Y2hhbmdlX2NiX2NvbnRleHQ7CiYjNDM7CXNwaW5fdW5sb2NrX2JoKCZhbXA7bmRldi0mZ3Q7Y29ubl9pbmZvX2xvY2spOwogCiAJcHJfZGVidWcoJiMzNDtsZW4gJWQsIGVyciAlZFxuJiMzNDssIHNrYiA/IHNrYi0mZ3Q7bGVuIDogMCwgZXJyKTsKIApAQCAtODUsMTkgJiM0Mzs4OCwyNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbmNpX3B1c2hfZGF0YV9oZHIoc3RydWN0IG5jaV9kZXYgKm5kZXYsCiBpbnQgbmNpX2Nvbm5fbWF4X2RhdGFfcGt0X3BheWxvYWRfc2l6ZShzdHJ1Y3QgbmNpX2RldiAqbmRldiwgX191OCBjb25uX2lkKQogewogCWNvbnN0IHN0cnVjdCBuY2lfY29ubl9pbmZvICpjb25uX2luZm87CiYjNDM7CWludCBtYXhfcGt0X3BheWxvYWRfbGVuOwogCi0JY29ubl9pbmZvID0gbmNpX2dldF9jb25uX2luZm9fYnlfY29ubl9pZChuZGV2LCBjb25uX2lkKTsKLQlpZiAoIWNvbm5faW5mbykKJiM0MzsJc3Bpbl9sb2NrX2JoKCZhbXA7bmRldi0mZ3Q7Y29ubl9pbmZvX2xvY2spOwomIzQzOwljb25uX2luZm8gPSBuY2lfZ2V0X2Nvbm5faW5mb19ieV9jb25uX2lkX2xvY2tlZChuZGV2LCBjb25uX2lkKTsKJiM0MzsJaWYgKCFjb25uX2luZm8pIHsKJiM0MzsJCXNwaW5fdW5sb2NrX2JoKCZhbXA7bmRldi0mZ3Q7Y29ubl9pbmZvX2xvY2spOwogCQlyZXR1cm4gLUVQUk9UTzsKJiM0MzsJfQomIzQzOwltYXhfcGt0X3BheWxvYWRfbGVuID0gY29ubl9pbmZvLSZndDttYXhfcGt0X3BheWxvYWRfbGVuOwomIzQzOwlzcGluX3VubG9ja19iaCgmYW1wO25kZXYtJmd0O2Nvbm5faW5mb19sb2NrKTsKIAotCXJldHVybiBjb25uX2luZm8tJmd0O21heF9wa3RfcGF5bG9hZF9sZW47CiYjNDM7CXJldHVybiBtYXhfcGt0X3BheWxvYWRfbGVuOwogfQogRVhQT1JUX1NZTUJPTChuY2lfY29ubl9tYXhfZGF0YV9wa3RfcGF5bG9hZF9zaXplKTsKIAogc3RhdGljIGludCBuY2lfcXVldWVfdHhfZGF0YV9mcmFncyhzdHJ1Y3QgbmNpX2RldiAqbmRldiwKIAkJCQkgICBfX3U4IGNvbm5faWQsCi0JCQkJICAgc3RydWN0IHNrX2J1ZmYgKnNrYikgewotCWNvbnN0IHN0cnVjdCBuY2lfY29ubl9pbmZvICpjb25uX2luZm87CiYjNDM7CQkJCSAgIHN0cnVjdCBza19idWZmICpza2IsCiYjNDM7CQkJCSAgIF9fdTggbWF4X3BrdF9wYXlsb2FkX2xlbikKJiM0Mzt7CiAJaW50IHRvdGFsX2xlbiA9IHNrYi0mZ3Q7bGVuOwogCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEgPSBza2ItJmd0O2RhdGE7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTEwOCwxNyAmIzQzOzExOCwxMCBAQCBzdGF0aWMgaW50IG5jaV9xdWV1ZV90eF9kYXRhX2ZyYWdzKHN0cnVjdCBuY2lfZGV2ICpuZGV2LAogCiAJcHJfZGVidWcoJiMzNDtjb25uX2lkIDB4JXgsIHRvdGFsX2xlbiAlZFxuJiMzNDssIGNvbm5faWQsIHRvdGFsX2xlbik7CiAKLQljb25uX2luZm8gPSBuY2lfZ2V0X2Nvbm5faW5mb19ieV9jb25uX2lkKG5kZXYsIGNvbm5faWQpOwotCWlmICghY29ubl9pbmZvKSB7Ci0JCXJjID0gLUVQUk9UTzsKLQkJZ290byBleGl0OwotCX0KLQogCV9fc2tiX3F1ZXVlX2hlYWRfaW5pdCgmYW1wO2ZyYWdzX3EpOwogCiAJd2hpbGUgKHRvdGFsX2xlbikgewotCQlmcmFnX2xlbiA9Ci0JCQltaW5fdChpbnQsIHRvdGFsX2xlbiwgY29ubl9pbmZvLSZndDttYXhfcGt0X3BheWxvYWRfbGVuKTsKJiM0MzsJCWZyYWdfbGVuID0gbWluX3QoaW50LCB0b3RhbF9sZW4sIG1heF9wa3RfcGF5bG9hZF9sZW4pOwogCiAJCXNrYl9mcmFnID0gbmNpX3NrYl9hbGxvYyhuZGV2LAogCQkJCQkgKE5DSV9EQVRBX0hEUl9TSVpFICYjNDM7IGZyYWdfbGVuKSwKQEAgLTE3MSw0MCAmIzQzOzE3NCw0NyBAQCBzdGF0aWMgaW50IG5jaV9xdWV1ZV90eF9kYXRhX2ZyYWdzKHN0cnVjdCBuY2lfZGV2ICpuZGV2LAogaW50IG5jaV9zZW5kX2RhdGEoc3RydWN0IG5jaV9kZXYgKm5kZXYsIF9fdTggY29ubl9pZCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAljb25zdCBzdHJ1Y3QgbmNpX2Nvbm5faW5mbyAqY29ubl9pbmZvOwomIzQzOwlfX3U4IG1heF9wa3RfcGF5bG9hZF9sZW47CiAJaW50IHJjID0gMDsKIAogCXByX2RlYnVnKCYjMzQ7Y29ubl9pZCAweCV4LCBwbGVuICVkXG4mIzM0OywgY29ubl9pZCwgc2tiLSZndDtsZW4pOwogCi0JY29ubl9pbmZvID0gbmNpX2dldF9jb25uX2luZm9fYnlfY29ubl9pZChuZGV2LCBjb25uX2lkKTsKJiM0MzsJc3Bpbl9sb2NrX2JoKCZhbXA7bmRldi0mZ3Q7Y29ubl9pbmZvX2xvY2spOwomIzQzOwljb25uX2luZm8gPSBuY2lfZ2V0X2Nvbm5faW5mb19ieV9jb25uX2lkX2xvY2tlZChuZGV2LCBjb25uX2lkKTsKIAlpZiAoIWNvbm5faW5mbykgewogCQlyYyA9IC1FUFJPVE87Ci0JCWdvdG8gZnJlZV9leGl0OwomIzQzOwkJZ290byB1bmxvY2s7CiAJfQomIzQzOwltYXhfcGt0X3BheWxvYWRfbGVuID0gY29ubl9pbmZvLSZndDttYXhfcGt0X3BheWxvYWRfbGVuOwomIzQzOwlzcGluX3VubG9ja19iaCgmYW1wO25kZXYtJmd0O2Nvbm5faW5mb19sb2NrKTsKIAogCS8qIGNoZWNrIGlmIHRoZSBwYWNrZXQgbmVlZCB0byBiZSBmcmFnbWVudGVkICovCi0JaWYgKHNrYi0mZ3Q7bGVuICZsdDs9IGNvbm5faW5mby0mZ3Q7bWF4X3BrdF9wYXlsb2FkX2xlbikgewomIzQzOwlpZiAoc2tiLSZndDtsZW4gJmx0Oz0gbWF4X3BrdF9wYXlsb2FkX2xlbikgewogCQkvKiBubyBuZWVkIHRvIGZyYWdtZW50IHBhY2tldCAqLwogCQluY2lfcHVzaF9kYXRhX2hkcihuZGV2LCBjb25uX2lkLCBza2IsIE5DSV9QQkZfTEFTVCk7CiAKIAkJc2tiX3F1ZXVlX3RhaWwoJmFtcDtuZGV2LSZndDt0eF9xLCBza2IpOwogCX0gZWxzZSB7CiAJCS8qIGZyYWdtZW50IHBhY2tldCBhbmQgcXVldWUgdGhlIGZyYWdtZW50cyAqLwotCQlyYyA9IG5jaV9xdWV1ZV90eF9kYXRhX2ZyYWdzKG5kZXYsIGNvbm5faWQsIHNrYik7CiYjNDM7CQlyYyA9IG5jaV9xdWV1ZV90eF9kYXRhX2ZyYWdzKG5kZXYsIGNvbm5faWQsIHNrYiwKJiM0MzsJCQkJCSAgICAgbWF4X3BrdF9wYXlsb2FkX2xlbik7CiAJCWlmIChyYykgewogCQkJcHJfZXJyKCYjMzQ7ZmFpbGVkIHRvIGZyYWdtZW50IHR4IGRhdGEgcGFja2V0XG4mIzM0Oyk7Ci0JCQlnb3RvIGZyZWVfZXhpdDsKJiM0MzsJCQlrZnJlZV9za2Ioc2tiKTsKJiM0MzsJCQlyZXR1cm4gcmM7CiAJCX0KIAl9CiAKJiM0MzsJc3Bpbl9sb2NrX2JoKCZhbXA7bmRldi0mZ3Q7Y29ubl9pbmZvX2xvY2spOwogCW5kZXYtJmd0O2N1cl9jb25uX2lkID0gY29ubl9pZDsKLQlxdWV1ZV93b3JrKG5kZXYtJmd0O3R4X3dxLCAmYW1wO25kZXYtJmd0O3R4X3dvcmspOwotCi0JZ290byBleGl0OwotCi1mcmVlX2V4aXQ6Ci0Ja2ZyZWVfc2tiKHNrYik7CiYjNDM7CXNwaW5fdW5sb2NrX2JoKCZhbXA7bmRldi0mZ3Q7Y29ubl9pbmZvX2xvY2spOwogCi1leGl0OgomIzQzOwlxdWV1ZV93b3JrKG5kZXYtJmd0O3R4X3dxLCAmYW1wO25kZXYtJmd0O3R4X3dvcmspOwomIzQzOwlyZXR1cm4gcmM7CiYjNDM7dW5sb2NrOgomIzQzOwlzcGluX3VubG9ja19iaCgmYW1wO25kZXYtJmd0O2Nvbm5faW5mb19sb2NrKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJa2ZyZWVfc2tiKHNrYik7CiAJcmV0dXJuIHJjOwogfQogRVhQT1JUX1NZTUJPTChuY2lfc2VuZF9kYXRhKTsKQEAgLTI4MiwxMSAmIzQzOzI5MiwxNSBAQCB2b2lkIG5jaV9yeF9kYXRhX3BhY2tldChzdHJ1Y3QgbmNpX2RldiAqbmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAkJIG5jaV9jb25uX2lkKHNrYi0mZ3Q7ZGF0YSksCiAJCSBuY2lfcGxlbihza2ItJmd0O2RhdGEpKTsKIAotCWNvbm5faW5mbyA9IG5jaV9nZXRfY29ubl9pbmZvX2J5X2Nvbm5faWQobmRldiwgbmNpX2Nvbm5faWQoc2tiLSZndDtkYXRhKSk7CiYjNDM7CXNwaW5fbG9ja19iaCgmYW1wO25kZXYtJmd0O2Nvbm5faW5mb19sb2NrKTsKJiM0MzsJY29ubl9pbmZvID0gbmNpX2dldF9jb25uX2luZm9fYnlfY29ubl9pZF9sb2NrZWQobmRldiwKJiM0MzsJCQkJCQkJbmNpX2Nvbm5faWQoc2tiLSZndDtkYXRhKSk7CiAJaWYgKCFjb25uX2luZm8pIHsKJiM0MzsJCXNwaW5fdW5sb2NrX2JoKCZhbXA7bmRldi0mZ3Q7Y29ubl9pbmZvX2xvY2spOwogCQlrZnJlZV9za2Ioc2tiKTsKIAkJcmV0dXJuOwogCX0KJiM0MzsJc3Bpbl91bmxvY2tfYmgoJmFtcDtuZGV2LSZndDtjb25uX2luZm9fbG9jayk7CiAKIAkvKiBzdHJpcCB0aGUgbmNpIGRhdGEgaGVhZGVyICovCiAJc2tiX3B1bGwoc2tiLCBOQ0lfREFUQV9IRFJfU0laRSk7CmRpZmYgLS1naXQgYS9uZXQvbmZjL25jaS9oY2kuYyBiL25ldC9uZmMvbmNpL2hjaS5jCmluZGV4IGMwM2U4YTBiZDNiZDY0Li5lMmY3YWIxNTk3M2NlOSAxMDA2NDQKLS0tIGEvbmV0L25mYy9uY2kvaGNpLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25mYy9uY2kvaGNpLmMKQEAgLTE0NywxNCAmIzQzOzE0NywyMiBAQCBzdGF0aWMgaW50IG5jaV9oY2lfc2VuZF9kYXRhKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCB1OCBwaXBlLAogCXN0cnVjdCBza19idWZmICpza2I7CiAJaW50IGxlbiwgaSwgcjsKIAl1OCBjYiA9IHBpcGU7CiYjNDM7CXU4IGNvbm5faWQ7CiYjNDM7CXU4IG1heF9wa3RfcGF5bG9hZF9sZW47CiAKJiM0MzsJc3Bpbl9sb2NrX2JoKCZhbXA7bmRldi0mZ3Q7Y29ubl9pbmZvX2xvY2spOwogCWNvbm5faW5mbyA9IG5kZXYtJmd0O2hjaV9kZXYtJmd0O2Nvbm5faW5mbzsKLQlpZiAoIWNvbm5faW5mbykKJiM0MzsJaWYgKCFjb25uX2luZm8pIHsKJiM0MzsJCXNwaW5fdW5sb2NrX2JoKCZhbXA7bmRldi0mZ3Q7Y29ubl9pbmZvX2xvY2spOwogCQlyZXR1cm4gLUVQUk9UTzsKJiM0MzsJfQomIzQzOwljb25uX2lkID0gY29ubl9pbmZvLSZndDtjb25uX2lkOwomIzQzOwltYXhfcGt0X3BheWxvYWRfbGVuID0gY29ubl9pbmZvLSZndDttYXhfcGt0X3BheWxvYWRfbGVuOwomIzQzOwlzcGluX3VubG9ja19iaCgmYW1wO25kZXYtJmd0O2Nvbm5faW5mb19sb2NrKTsKIAogCWkgPSAwOwotCXNrYiA9IG5jaV9za2JfYWxsb2MobmRldiwgY29ubl9pbmZvLSZndDttYXhfcGt0X3BheWxvYWRfbGVuICYjNDM7Ci0JCQkgICAgTkNJX0RBVEFfSERSX1NJWkUsIEdGUF9BVE9NSUMpOwomIzQzOwlza2IgPSBuY2lfc2tiX2FsbG9jKG5kZXYsIG1heF9wa3RfcGF5bG9hZF9sZW4gJiM0MzsgTkNJX0RBVEFfSERSX1NJWkUsCiYjNDM7CQkJICAgIEdGUF9BVE9NSUMpOwogCWlmICghc2tiKQogCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtMTYzLDEyICYjNDM7MTcxLDExIEBAIHN0YXRpYyBpbnQgbmNpX2hjaV9zZW5kX2RhdGEoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHU4IHBpcGUsCiAKIAlkbyB7CiAJCS8qIElmIGxhc3QgcGFja2V0IGFkZCBOQ0lfSEZQX05PX0NIQUlOSU5HICovCi0JCWlmIChpICYjNDM7IGNvbm5faW5mby0mZ3Q7bWF4X3BrdF9wYXlsb2FkX2xlbiAtCi0JCSAgICAoc2tiLSZndDtsZW4gJiM0MzsgMSkgJmd0Oz0gZGF0YV9sZW4pIHsKJiM0MzsJCWlmIChpICYjNDM7IG1heF9wa3RfcGF5bG9hZF9sZW4gLSAoc2tiLSZndDtsZW4gJiM0MzsgMSkgJmd0Oz0gZGF0YV9sZW4pIHsKIAkJCWNiIHw9IE5DSV9IRlBfTk9fQ0hBSU5JTkc7CiAJCQlsZW4gPSBkYXRhX2xlbiAtIGk7CiAJCX0gZWxzZSB7Ci0JCQlsZW4gPSBjb25uX2luZm8tJmd0O21heF9wa3RfcGF5bG9hZF9sZW4gLSBza2ItJmd0O2xlbiAtIDE7CiYjNDM7CQkJbGVuID0gbWF4X3BrdF9wYXlsb2FkX2xlbiAtIHNrYi0mZ3Q7bGVuIC0gMTsKIAkJfQogCiAJCSoodTggKilza2JfcHVzaChza2IsIDEpID0gY2I7CkBAIC0xNzYsMTUgJiM0MzsxODMsMTQgQEAgc3RhdGljIGludCBuY2lfaGNpX3NlbmRfZGF0YShzdHJ1Y3QgbmNpX2RldiAqbmRldiwgdTggcGlwZSwKIAkJaWYgKGxlbiAmZ3Q7IDApCiAJCQlza2JfcHV0X2RhdGEoc2tiLCBkYXRhICYjNDM7IGksIGxlbik7CiAKLQkJciA9IG5jaV9zZW5kX2RhdGEobmRldiwgY29ubl9pbmZvLSZndDtjb25uX2lkLCBza2IpOwomIzQzOwkJciA9IG5jaV9zZW5kX2RhdGEobmRldiwgY29ubl9pZCwgc2tiKTsKIAkJaWYgKHIgJmx0OyAwKQogCQkJcmV0dXJuIHI7CiAKIAkJaSAmIzQzOz0gbGVuOwogCiAJCWlmIChpICZsdDsgZGF0YV9sZW4pIHsKLQkJCXNrYiA9IG5jaV9za2JfYWxsb2MobmRldiwKLQkJCQkJICAgIGNvbm5faW5mby0mZ3Q7bWF4X3BrdF9wYXlsb2FkX2xlbiAmIzQzOwomIzQzOwkJCXNrYiA9IG5jaV9za2JfYWxsb2MobmRldiwgbWF4X3BrdF9wYXlsb2FkX2xlbiAmIzQzOwogCQkJCQkgICAgTkNJX0RBVEFfSERSX1NJWkUsIEdGUF9BVE9NSUMpOwogCQkJaWYgKCFza2IpCiAJCQkJcmV0dXJuIC1FTk9NRU07CkBAIC0yMjUsMTcgJiM0MzsyMzEsMjIgQEAgaW50IG5jaV9oY2lfc2VuZF9jbWQoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHU4IGdhdGUsIHU4IGNtZCwKIAljb25zdCBzdHJ1Y3QgbmNpX2hjcF9tZXNzYWdlICptZXNzYWdlOwogCWNvbnN0IHN0cnVjdCBuY2lfY29ubl9pbmZvICpjb25uX2luZm87CiAJc3RydWN0IG5jaV9kYXRhIGRhdGE7CiYjNDM7CXN0cnVjdCBza19idWZmICpyeF9za2I7CiAJaW50IHI7CiAJdTggcGlwZSA9IG5kZXYtJmd0O2hjaV9kZXYtJmd0O2dhdGUycGlwZVtnYXRlXTsKIAogCWlmIChwaXBlID09IE5DSV9IQ0lfSU5WQUxJRF9QSVBFKQogCQlyZXR1cm4gLUVBRERSTk9UQVZBSUw7CiAKJiM0MzsJc3Bpbl9sb2NrX2JoKCZhbXA7bmRldi0mZ3Q7Y29ubl9pbmZvX2xvY2spOwogCWNvbm5faW5mbyA9IG5kZXYtJmd0O2hjaV9kZXYtJmd0O2Nvbm5faW5mbzsKLQlpZiAoIWNvbm5faW5mbykKJiM0MzsJaWYgKCFjb25uX2luZm8pIHsKJiM0MzsJCXNwaW5fdW5sb2NrX2JoKCZhbXA7bmRldi0mZ3Q7Y29ubl9pbmZvX2xvY2spOwogCQlyZXR1cm4gLUVQUk9UTzsKJiM0MzsJfQogCiAJZGF0YS5jb25uX2lkID0gY29ubl9pbmZvLSZndDtjb25uX2lkOwomIzQzOwlzcGluX3VubG9ja19iaCgmYW1wO25kZXYtJmd0O2Nvbm5faW5mb19sb2NrKTsKIAlkYXRhLnBpcGUgPSBwaXBlOwogCWRhdGEuY21kID0gTkNJX0hDUF9IRUFERVIoTkNJX0hDSV9IQ1BfQ09NTUFORCwgY21kKTsKIAlkYXRhLmRhdGEgPSBwYXJhbTsKQEAgLTI0NCwxMyAmIzQzOzI1NSwyMiBAQCBpbnQgbmNpX2hjaV9zZW5kX2NtZChzdHJ1Y3QgbmNpX2RldiAqbmRldiwgdTggZ2F0ZSwgdTggY21kLAogCXIgPSBuY2lfcmVxdWVzdChuZGV2LCBuY2lfaGNpX3NlbmRfZGF0YV9yZXEsICZhbXA7ZGF0YSwKIAkJCW1zZWNzX3RvX2ppZmZpZXMoTkNJX0RBVEFfVElNRU9VVCkpOwogCWlmIChyID09IE5DSV9TVEFUVVNfT0spIHsKLQkJbWVzc2FnZSA9IChzdHJ1Y3QgbmNpX2hjcF9tZXNzYWdlICopY29ubl9pbmZvLSZndDtyeF9za2ItJmd0O2RhdGE7CiYjNDM7CQlzcGluX2xvY2tfYmgoJmFtcDtuZGV2LSZndDtjb25uX2luZm9fbG9jayk7CiYjNDM7CQljb25uX2luZm8gPSBuZGV2LSZndDtoY2lfZGV2LSZndDtjb25uX2luZm87CiYjNDM7CQlyeF9za2IgPSBjb25uX2luZm8gPyBjb25uX2luZm8tJmd0O3J4X3NrYiA6IE5VTEw7CiYjNDM7CQlpZiAoIXJ4X3NrYikgewomIzQzOwkJCXNwaW5fdW5sb2NrX2JoKCZhbXA7bmRldi0mZ3Q7Y29ubl9pbmZvX2xvY2spOwomIzQzOwkJCXJldHVybiAtRVBST1RPOwomIzQzOwkJfQomIzQzOwomIzQzOwkJbWVzc2FnZSA9IChzdHJ1Y3QgbmNpX2hjcF9tZXNzYWdlICopcnhfc2tiLSZndDtkYXRhOwogCQlyID0gbmNpX2hjaV9yZXN1bHRfdG9fZXJybm8oCiAJCQlOQ0lfSENQX01TR19HRVRfQ01EKG1lc3NhZ2UtJmd0O2hlYWRlcikpOwotCQlza2JfcHVsbChjb25uX2luZm8tJmd0O3J4X3NrYiwgTkNJX0hDSV9IQ1BfTUVTU0FHRV9IRUFERVJfTEVOKTsKJiM0MzsJCXNrYl9wdWxsKHJ4X3NrYiwgTkNJX0hDSV9IQ1BfTUVTU0FHRV9IRUFERVJfTEVOKTsKJiM0MzsJCXNwaW5fdW5sb2NrX2JoKCZhbXA7bmRldi0mZ3Q7Y29ubl9pbmZvX2xvY2spOwogCiAJCWlmICghciAmYW1wOyZhbXA7IHNrYikKLQkJCSpza2IgPSBjb25uX2luZm8tJmd0O3J4X3NrYjsKJiM0MzsJCQkqc2tiID0gcnhfc2tiOwogCX0KIAogCXJldHVybiByOwpAQCAtMzY2LDExICYjNDM7Mzg2LDE1IEBAIHN0YXRpYyB2b2lkIG5jaV9oY2lfcmVzcF9yZWNlaXZlZChzdHJ1Y3QgbmNpX2RldiAqbmRldiwgdTggcGlwZSwKIHsKIAlzdHJ1Y3QgbmNpX2Nvbm5faW5mbyAqY29ubl9pbmZvOwogCiYjNDM7CXNwaW5fbG9ja19iaCgmYW1wO25kZXYtJmd0O2Nvbm5faW5mb19sb2NrKTsKIAljb25uX2luZm8gPSBuZGV2LSZndDtoY2lfZGV2LSZndDtjb25uX2luZm87Ci0JaWYgKCFjb25uX2luZm8pCiYjNDM7CWlmICghY29ubl9pbmZvKSB7CiYjNDM7CQlzcGluX3VubG9ja19iaCgmYW1wO25kZXYtJmd0O2Nvbm5faW5mb19sb2NrKTsKIAkJZ290byBleGl0OwomIzQzOwl9CiAKIAljb25uX2luZm8tJmd0O3J4X3NrYiA9IHNrYjsKJiM0MzsJc3Bpbl91bmxvY2tfYmgoJmFtcDtuZGV2LSZndDtjb25uX2luZm9fbG9jayk7CiAKIGV4aXQ6CiAJbmNpX3JlcV9jb21wbGV0ZShuZGV2LCBOQ0lfU1RBVFVTX09LKTsKQEAgLTUxMCwxMSAmIzQzOzUzNCwxNSBAQCBpbnQgbmNpX2hjaV9vcGVuX3BpcGUoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHU4IHBpcGUpCiAJc3RydWN0IG5jaV9kYXRhIGRhdGE7CiAJY29uc3Qgc3RydWN0IG5jaV9jb25uX2luZm8gKmNvbm5faW5mbzsKIAomIzQzOwlzcGluX2xvY2tfYmgoJmFtcDtuZGV2LSZndDtjb25uX2luZm9fbG9jayk7CiAJY29ubl9pbmZvID0gbmRldi0mZ3Q7aGNpX2Rldi0mZ3Q7Y29ubl9pbmZvOwotCWlmICghY29ubl9pbmZvKQomIzQzOwlpZiAoIWNvbm5faW5mbykgewomIzQzOwkJc3Bpbl91bmxvY2tfYmgoJmFtcDtuZGV2LSZndDtjb25uX2luZm9fbG9jayk7CiAJCXJldHVybiAtRVBST1RPOwomIzQzOwl9CiAKIAlkYXRhLmNvbm5faWQgPSBjb25uX2luZm8tJmd0O2Nvbm5faWQ7CiYjNDM7CXNwaW5fdW5sb2NrX2JoKCZhbXA7bmRldi0mZ3Q7Y29ubl9pbmZvX2xvY2spOwogCWRhdGEucGlwZSA9IHBpcGU7CiAJZGF0YS5jbWQgPSBOQ0lfSENQX0hFQURFUihOQ0lfSENJX0hDUF9DT01NQU5ELAogCQkJCSAgICAgICBOQ0lfSENJX0FOWV9PUEVOX1BJUEUpOwpAQCAtNTY5LDYgJiM0Mzs1OTcsNyBAQCBpbnQgbmNpX2hjaV9zZXRfcGFyYW0oc3RydWN0IG5jaV9kZXYgKm5kZXYsIHU4IGdhdGUsIHU4IGlkeCwKIAljb25zdCBzdHJ1Y3QgbmNpX2hjcF9tZXNzYWdlICptZXNzYWdlOwogCWNvbnN0IHN0cnVjdCBuY2lfY29ubl9pbmZvICpjb25uX2luZm87CiAJc3RydWN0IG5jaV9kYXRhIGRhdGE7CiYjNDM7CXN0cnVjdCBza19idWZmICpyeF9za2I7CiAJaW50IHI7CiAJdTggKnRtcDsKIAl1OCBwaXBlID0gbmRldi0mZ3Q7aGNpX2Rldi0mZ3Q7Z2F0ZTJwaXBlW2dhdGVdOwpAQCAtNTc4LDkgJiM0Mzs2MDcsMTQgQEAgaW50IG5jaV9oY2lfc2V0X3BhcmFtKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCB1OCBnYXRlLCB1OCBpZHgsCiAJaWYgKHBpcGUgPT0gTkNJX0hDSV9JTlZBTElEX1BJUEUpCiAJCXJldHVybiAtRUFERFJOT1RBVkFJTDsKIAomIzQzOwlzcGluX2xvY2tfYmgoJmFtcDtuZGV2LSZndDtjb25uX2luZm9fbG9jayk7CiAJY29ubl9pbmZvID0gbmRldi0mZ3Q7aGNpX2Rldi0mZ3Q7Y29ubl9pbmZvOwotCWlmICghY29ubl9pbmZvKQomIzQzOwlpZiAoIWNvbm5faW5mbykgewomIzQzOwkJc3Bpbl91bmxvY2tfYmgoJmFtcDtuZGV2LSZndDtjb25uX2luZm9fbG9jayk7CiAJCXJldHVybiAtRVBST1RPOwomIzQzOwl9CiYjNDM7CWRhdGEuY29ubl9pZCA9IGNvbm5faW5mby0mZ3Q7Y29ubl9pZDsKJiM0MzsJc3Bpbl91bmxvY2tfYmgoJmFtcDtuZGV2LSZndDtjb25uX2luZm9fbG9jayk7CiAKIAl0bXAgPSBrbWFsbG9jKDEgJiM0MzsgcGFyYW1fbGVuLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXRtcCkKQEAgLTU4OSw3ICYjNDM7NjIzLDYgQEAgaW50IG5jaV9oY2lfc2V0X3BhcmFtKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCB1OCBnYXRlLCB1OCBpZHgsCiAJKnRtcCA9IGlkeDsKIAltZW1jcHkodG1wICYjNDM7IDEsIHBhcmFtLCBwYXJhbV9sZW4pOwogCi0JZGF0YS5jb25uX2lkID0gY29ubl9pbmZvLSZndDtjb25uX2lkOwogCWRhdGEucGlwZSA9IHBpcGU7CiAJZGF0YS5jbWQgPSBOQ0lfSENQX0hFQURFUihOQ0lfSENJX0hDUF9DT01NQU5ELAogCQkJCSAgICAgICBOQ0lfSENJX0FOWV9TRVRfUEFSQU1FVEVSKTsKQEAgLTU5OSwxMCAmIzQzOzYzMiwyMCBAQCBpbnQgbmNpX2hjaV9zZXRfcGFyYW0oc3RydWN0IG5jaV9kZXYgKm5kZXYsIHU4IGdhdGUsIHU4IGlkeCwKIAlyID0gbmNpX3JlcXVlc3QobmRldiwgbmNpX2hjaV9zZW5kX2RhdGFfcmVxLCAmYW1wO2RhdGEsCiAJCQltc2Vjc190b19qaWZmaWVzKE5DSV9EQVRBX1RJTUVPVVQpKTsKIAlpZiAociA9PSBOQ0lfU1RBVFVTX09LKSB7Ci0JCW1lc3NhZ2UgPSAoc3RydWN0IG5jaV9oY3BfbWVzc2FnZSAqKWNvbm5faW5mby0mZ3Q7cnhfc2tiLSZndDtkYXRhOwomIzQzOwkJc3Bpbl9sb2NrX2JoKCZhbXA7bmRldi0mZ3Q7Y29ubl9pbmZvX2xvY2spOwomIzQzOwkJY29ubl9pbmZvID0gbmRldi0mZ3Q7aGNpX2Rldi0mZ3Q7Y29ubl9pbmZvOwomIzQzOwkJcnhfc2tiID0gY29ubl9pbmZvID8gY29ubl9pbmZvLSZndDtyeF9za2IgOiBOVUxMOwomIzQzOwkJaWYgKCFyeF9za2IpIHsKJiM0MzsJCQlzcGluX3VubG9ja19iaCgmYW1wO25kZXYtJmd0O2Nvbm5faW5mb19sb2NrKTsKJiM0MzsJCQlrZnJlZSh0bXApOwomIzQzOwkJCXJldHVybiAtRVBST1RPOwomIzQzOwkJfQomIzQzOwomIzQzOwkJbWVzc2FnZSA9IChzdHJ1Y3QgbmNpX2hjcF9tZXNzYWdlICopcnhfc2tiLSZndDtkYXRhOwogCQlyID0gbmNpX2hjaV9yZXN1bHRfdG9fZXJybm8oCiAJCQlOQ0lfSENQX01TR19HRVRfQ01EKG1lc3NhZ2UtJmd0O2hlYWRlcikpOwotCQlza2JfcHVsbChjb25uX2luZm8tJmd0O3J4X3NrYiwgTkNJX0hDSV9IQ1BfTUVTU0FHRV9IRUFERVJfTEVOKTsKJiM0MzsJCXNrYl9wdWxsKHJ4X3NrYiwgTkNJX0hDSV9IQ1BfTUVTU0FHRV9IRUFERVJfTEVOKTsKJiM0MzsJCXNwaW5fdW5sb2NrX2JoKCZhbXA7bmRldi0mZ3Q7Y29ubl9pbmZvX2xvY2spOwogCX0KIAogCWtmcmVlKHRtcCk7CkBAIC02MTYsNiAmIzQzOzY1OSw3IEBAIGludCBuY2lfaGNpX2dldF9wYXJhbShzdHJ1Y3QgbmNpX2RldiAqbmRldiwgdTggZ2F0ZSwgdTggaWR4LAogCWNvbnN0IHN0cnVjdCBuY2lfaGNwX21lc3NhZ2UgKm1lc3NhZ2U7CiAJY29uc3Qgc3RydWN0IG5jaV9jb25uX2luZm8gKmNvbm5faW5mbzsKIAlzdHJ1Y3QgbmNpX2RhdGEgZGF0YTsKJiM0MzsJc3RydWN0IHNrX2J1ZmYgKnJ4X3NrYjsKIAlpbnQgcjsKIAl1OCBwaXBlID0gbmRldi0mZ3Q7aGNpX2Rldi0mZ3Q7Z2F0ZTJwaXBlW2dhdGVdOwogCkBAIC02MjQsMTEgJiM0Mzs2NjgsMTUgQEAgaW50IG5jaV9oY2lfZ2V0X3BhcmFtKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCB1OCBnYXRlLCB1OCBpZHgsCiAJaWYgKHBpcGUgPT0gTkNJX0hDSV9JTlZBTElEX1BJUEUpCiAJCXJldHVybiAtRUFERFJOT1RBVkFJTDsKIAomIzQzOwlzcGluX2xvY2tfYmgoJmFtcDtuZGV2LSZndDtjb25uX2luZm9fbG9jayk7CiAJY29ubl9pbmZvID0gbmRldi0mZ3Q7aGNpX2Rldi0mZ3Q7Y29ubl9pbmZvOwotCWlmICghY29ubl9pbmZvKQomIzQzOwlpZiAoIWNvbm5faW5mbykgewomIzQzOwkJc3Bpbl91bmxvY2tfYmgoJmFtcDtuZGV2LSZndDtjb25uX2luZm9fbG9jayk7CiAJCXJldHVybiAtRVBST1RPOwomIzQzOwl9CiAKIAlkYXRhLmNvbm5faWQgPSBjb25uX2luZm8tJmd0O2Nvbm5faWQ7CiYjNDM7CXNwaW5fdW5sb2NrX2JoKCZhbXA7bmRldi0mZ3Q7Y29ubl9pbmZvX2xvY2spOwogCWRhdGEucGlwZSA9IHBpcGU7CiAJZGF0YS5jbWQgPSBOQ0lfSENQX0hFQURFUihOQ0lfSENJX0hDUF9DT01NQU5ELAogCQkJCSAgTkNJX0hDSV9BTllfR0VUX1BBUkFNRVRFUik7CkBAIC02MzksMTMgJiM0Mzs2ODcsMjIgQEAgaW50IG5jaV9oY2lfZ2V0X3BhcmFtKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCB1OCBnYXRlLCB1OCBpZHgsCiAJCQltc2Vjc190b19qaWZmaWVzKE5DSV9EQVRBX1RJTUVPVVQpKTsKIAogCWlmIChyID09IE5DSV9TVEFUVVNfT0spIHsKLQkJbWVzc2FnZSA9IChzdHJ1Y3QgbmNpX2hjcF9tZXNzYWdlICopY29ubl9pbmZvLSZndDtyeF9za2ItJmd0O2RhdGE7CiYjNDM7CQlzcGluX2xvY2tfYmgoJmFtcDtuZGV2LSZndDtjb25uX2luZm9fbG9jayk7CiYjNDM7CQljb25uX2luZm8gPSBuZGV2LSZndDtoY2lfZGV2LSZndDtjb25uX2luZm87CiYjNDM7CQlyeF9za2IgPSBjb25uX2luZm8gPyBjb25uX2luZm8tJmd0O3J4X3NrYiA6IE5VTEw7CiYjNDM7CQlpZiAoIXJ4X3NrYikgewomIzQzOwkJCXNwaW5fdW5sb2NrX2JoKCZhbXA7bmRldi0mZ3Q7Y29ubl9pbmZvX2xvY2spOwomIzQzOwkJCXJldHVybiAtRVBST1RPOwomIzQzOwkJfQomIzQzOwomIzQzOwkJbWVzc2FnZSA9IChzdHJ1Y3QgbmNpX2hjcF9tZXNzYWdlICopcnhfc2tiLSZndDtkYXRhOwogCQlyID0gbmNpX2hjaV9yZXN1bHRfdG9fZXJybm8oCiAJCQlOQ0lfSENQX01TR19HRVRfQ01EKG1lc3NhZ2UtJmd0O2hlYWRlcikpOwotCQlza2JfcHVsbChjb25uX2luZm8tJmd0O3J4X3NrYiwgTkNJX0hDSV9IQ1BfTUVTU0FHRV9IRUFERVJfTEVOKTsKJiM0MzsJCXNrYl9wdWxsKHJ4X3NrYiwgTkNJX0hDSV9IQ1BfTUVTU0FHRV9IRUFERVJfTEVOKTsKJiM0MzsJCXNwaW5fdW5sb2NrX2JoKCZhbXA7bmRldi0mZ3Q7Y29ubl9pbmZvX2xvY2spOwogCiAJCWlmICghciAmYW1wOyZhbXA7IHNrYikKLQkJCSpza2IgPSBjb25uX2luZm8tJmd0O3J4X3NrYjsKJiM0MzsJCQkqc2tiID0gcnhfc2tiOwogCX0KIAogCXJldHVybiByOwpAQCAtNzI5LDEyICYjNDM7Nzg2LDE2IEBAIGludCBuY2lfaGNpX2Rldl9zZXNzaW9uX2luaXQoc3RydWN0IG5jaV9kZXYgKm5kZXYpCiAJbmRldi0mZ3Q7aGNpX2Rldi0mZ3Q7Y291bnRfcGlwZXMgPSAwOwogCW5kZXYtJmd0O2hjaV9kZXYtJmd0O2V4cGVjdGVkX3BpcGVzID0gMDsKIAomIzQzOwlzcGluX2xvY2tfYmgoJmFtcDtuZGV2LSZndDtjb25uX2luZm9fbG9jayk7CiAJY29ubl9pbmZvID0gbmRldi0mZ3Q7aGNpX2Rldi0mZ3Q7Y29ubl9pbmZvOwotCWlmICghY29ubl9pbmZvKQomIzQzOwlpZiAoIWNvbm5faW5mbykgewomIzQzOwkJc3Bpbl91bmxvY2tfYmgoJmFtcDtuZGV2LSZndDtjb25uX2luZm9fbG9jayk7CiAJCXJldHVybiAtRVBST1RPOwomIzQzOwl9CiAKIAljb25uX2luZm8tJmd0O2RhdGFfZXhjaGFuZ2VfY2IgPSBuY2lfaGNpX2RhdGFfcmVjZWl2ZWRfY2I7CiAJY29ubl9pbmZvLSZndDtkYXRhX2V4Y2hhbmdlX2NiX2NvbnRleHQgPSBuZGV2OwomIzQzOwlzcGluX3VubG9ja19iaCgmYW1wO25kZXYtJmd0O2Nvbm5faW5mb19sb2NrKTsKIAogCW5jaV9oY2lfcmVzZXRfcGlwZXMobmRldi0mZ3Q7aGNpX2Rldik7CiAKZGlmZiAtLWdpdCBhL25ldC9uZmMvbmNpL250Zi5jIGIvbmV0L25mYy9uY2kvbnRmLmMKaW5kZXggYzk2NTEyYmI4NjUzMTUuLjQ4MjhhMWM5ZDM1ZjBlIDEwMDY0NAotLS0gYS9uZXQvbmZjL25jaS9udGYuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmZjL25jaS9udGYuYwpAQCAtODEsMTMgJiM0Mzs4MSwxNyBAQCBzdGF0aWMgaW50IG5jaV9jb3JlX2Nvbm5fY3JlZGl0c19udGZfcGFja2V0KHN0cnVjdCBuY2lfZGV2ICpuZGV2LAogCQkJIGksIG50Zi0mZ3Q7Y29ubl9lbnRyaWVzW2ldLmNvbm5faWQsCiAJCQkgbnRmLSZndDtjb25uX2VudHJpZXNbaV0uY3JlZGl0cyk7CiAKLQkJY29ubl9pbmZvID0gbmNpX2dldF9jb25uX2luZm9fYnlfY29ubl9pZChuZGV2LAotCQkJCQkJCSBudGYtJmd0O2Nvbm5fZW50cmllc1tpXS5jb25uX2lkKTsKLQkJaWYgKCFjb25uX2luZm8pCiYjNDM7CQlzcGluX2xvY2tfYmgoJmFtcDtuZGV2LSZndDtjb25uX2luZm9fbG9jayk7CiYjNDM7CQljb25uX2luZm8gPSBuY2lfZ2V0X2Nvbm5faW5mb19ieV9jb25uX2lkX2xvY2tlZChuZGV2LAomIzQzOwkJCQkJCQkJbnRmLSZndDtjb25uX2VudHJpZXNbaV0uY29ubl9pZCk7CiYjNDM7CQlpZiAoIWNvbm5faW5mbykgewomIzQzOwkJCXNwaW5fdW5sb2NrX2JoKCZhbXA7bmRldi0mZ3Q7Y29ubl9pbmZvX2xvY2spOwogCQkJcmV0dXJuIDA7CiYjNDM7CQl9CiAKIAkJYXRvbWljX2FkZChudGYtJmd0O2Nvbm5fZW50cmllc1tpXS5jcmVkaXRzLAogCQkJICAgJmFtcDtjb25uX2luZm8tJmd0O2NyZWRpdHNfY250KTsKJiM0MzsJCXNwaW5fdW5sb2NrX2JoKCZhbXA7bmRldi0mZ3Q7Y29ubl9pbmZvX2xvY2spOwogCX0KIAogCS8qIHRyaWdnZXIgdGhlIG5leHQgdHggKi8KQEAgLTgyOCw5ICYjNDM7ODMyLDEyIEBAIHN0YXRpYyBpbnQgbmNpX3JmX2ludGZfYWN0aXZhdGVkX250Zl9wYWNrZXQoc3RydWN0IG5jaV9kZXYgKm5kZXYsCiAKIGV4aXQ6CiAJaWYgKGVyciA9PSBOQ0lfU1RBVFVTX09LKSB7CiYjNDM7CQlzcGluX2xvY2tfYmgoJmFtcDtuZGV2LSZndDtjb25uX2luZm9fbG9jayk7CiAJCWNvbm5faW5mbyA9IG5kZXYtJmd0O3JmX2Nvbm5faW5mbzsKLQkJaWYgKCFjb25uX2luZm8pCiYjNDM7CQlpZiAoIWNvbm5faW5mbykgewomIzQzOwkJCXNwaW5fdW5sb2NrX2JoKCZhbXA7bmRldi0mZ3Q7Y29ubl9pbmZvX2xvY2spOwogCQkJcmV0dXJuIDA7CiYjNDM7CQl9CiAKIAkJY29ubl9pbmZvLSZndDttYXhfcGt0X3BheWxvYWRfbGVuID0gbnRmLm1heF9kYXRhX3BrdF9wYXlsb2FkX3NpemU7CiAJCWNvbm5faW5mby0mZ3Q7aW5pdGlhbF9udW1fY3JlZGl0cyA9IG50Zi5pbml0aWFsX251bV9jcmVkaXRzOwpAQCAtODM4LDYgJiM0Mzs4NDUsNyBAQCBzdGF0aWMgaW50IG5jaV9yZl9pbnRmX2FjdGl2YXRlZF9udGZfcGFja2V0KHN0cnVjdCBuY2lfZGV2ICpuZGV2LAogCQkvKiBzZXQgdGhlIGF2YWlsYWJsZSBjcmVkaXRzIHRvIGluaXRpYWwgdmFsdWUgKi8KIAkJYXRvbWljX3NldCgmYW1wO2Nvbm5faW5mby0mZ3Q7Y3JlZGl0c19jbnQsCiAJCQkgICBjb25uX2luZm8tJmd0O2luaXRpYWxfbnVtX2NyZWRpdHMpOwomIzQzOwkJc3Bpbl91bmxvY2tfYmgoJmFtcDtuZGV2LSZndDtjb25uX2luZm9fbG9jayk7CiAKIAkJLyogc3RvcmUgZ2VuZXJhbCBieXRlcyB0byBiZSByZXBvcnRlZCBsYXRlciBpbiBkZXBfbGlua191cCAqLwogCQlpZiAobnRmLnJmX2ludGVyZmFjZSA9PSBOQ0lfUkZfSU5URVJGQUNFX05GQ19ERVApIHsKQEAgLTkwMSw5ICYjNDM7OTA5LDEzIEBAIHN0YXRpYyBpbnQgbmNpX3JmX2RlYWN0aXZhdGVfbnRmX3BhY2tldChzdHJ1Y3QgbmNpX2RldiAqbmRldiwKIAogCXByX2RlYnVnKCYjMzQ7ZW50cnksIHR5cGUgMHgleCwgcmVhc29uIDB4JXhcbiYjMzQ7LCBudGYtJmd0O3R5cGUsIG50Zi0mZ3Q7cmVhc29uKTsKIAomIzQzOwlzcGluX2xvY2tfYmgoJmFtcDtuZGV2LSZndDtjb25uX2luZm9fbG9jayk7CiAJY29ubl9pbmZvID0gbmRldi0mZ3Q7cmZfY29ubl9pbmZvOwotCWlmICghY29ubl9pbmZvKQomIzQzOwlpZiAoIWNvbm5faW5mbykgewomIzQzOwkJc3Bpbl91bmxvY2tfYmgoJmFtcDtuZGV2LSZndDtjb25uX2luZm9fbG9jayk7CiAJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CXNwaW5fdW5sb2NrX2JoKCZhbXA7bmRldi0mZ3Q7Y29ubl9pbmZvX2xvY2spOwogCiAJLyogZHJvcCB0eCBkYXRhIHF1ZXVlICovCiAJc2tiX3F1ZXVlX3B1cmdlKCZhbXA7bmRldi0mZ3Q7dHhfcSk7CmRpZmYgLS1naXQgYS9uZXQvbmZjL25jaS9yc3AuYyBiL25ldC9uZmMvbmNpL3JzcC5jCmluZGV4IDllZWI4NjI4MjVjNWZlLi4wY2ZmMTI1MDkyM2VkOSAxMDA2NDQKLS0tIGEvbmV0L25mYy9uY2kvcnNwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25mYy9uY2kvcnNwLmMKQEAgLTE4Niw2ICYjNDM7MTg2LDcgQEAgc3RhdGljIHZvaWQgbmNpX3JmX2Rpc2NfcnNwX3BhY2tldChzdHJ1Y3QgbmNpX2RldiAqbmRldiwKIAkJCQkgICBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBuY2lfY29ubl9pbmZvICpjb25uX2luZm87CiYjNDM7CXN0cnVjdCBuY2lfY29ubl9pbmZvICpuZXdfY29ubl9pbmZvOwogCV9fdTggc3RhdHVzID0gc2tiLSZndDtkYXRhWzBdOwogCiAJcHJfZGVidWcoJiMzNDtzdGF0dXMgMHgleFxuJiMzNDssIHN0YXR1cyk7CkBAIC0xOTMsMTkgJiM0MzsxOTQsMzMgQEAgc3RhdGljIHZvaWQgbmNpX3JmX2Rpc2NfcnNwX3BhY2tldChzdHJ1Y3QgbmNpX2RldiAqbmRldiwKIAlpZiAoc3RhdHVzID09IE5DSV9TVEFUVVNfT0spIHsKIAkJYXRvbWljX3NldCgmYW1wO25kZXYtJmd0O3N0YXRlLCBOQ0lfRElTQ09WRVJZKTsKIAomIzQzOwkJc3Bpbl9sb2NrX2JoKCZhbXA7bmRldi0mZ3Q7Y29ubl9pbmZvX2xvY2spOwogCQljb25uX2luZm8gPSBuZGV2LSZndDtyZl9jb25uX2luZm87CiYjNDM7CQlzcGluX3VubG9ja19iaCgmYW1wO25kZXYtJmd0O2Nvbm5faW5mb19sb2NrKTsKJiM0MzsKIAkJaWYgKCFjb25uX2luZm8pIHsKLQkJCWNvbm5faW5mbyA9IGRldm1fa3phbGxvYygmYW1wO25kZXYtJmd0O25mY19kZXYtJmd0O2RldiwKLQkJCQkJCSBzaXplb2Yoc3RydWN0IG5jaV9jb25uX2luZm8pLAotCQkJCQkJIEdGUF9LRVJORUwpOwotCQkJaWYgKCFjb25uX2luZm8pIHsKJiM0MzsJCQluZXdfY29ubl9pbmZvID0gZGV2bV9remFsbG9jKCZhbXA7bmRldi0mZ3Q7bmZjX2Rldi0mZ3Q7ZGV2LAomIzQzOwkJCQkJCSAgICAgc2l6ZW9mKHN0cnVjdCBuY2lfY29ubl9pbmZvKSwKJiM0MzsJCQkJCQkgICAgIEdGUF9LRVJORUwpOwomIzQzOwkJCWlmICghbmV3X2Nvbm5faW5mbykgewogCQkJCXN0YXR1cyA9IE5DSV9TVEFUVVNfUkVKRUNURUQ7CiAJCQkJZ290byBleGl0OwogCQkJfQotCQkJY29ubl9pbmZvLSZndDtjb25uX2lkID0gTkNJX1NUQVRJQ19SRl9DT05OX0lEOwotCQkJSU5JVF9MSVNUX0hFQUQoJmFtcDtjb25uX2luZm8tJmd0O2xpc3QpOwotCQkJbGlzdF9hZGQoJmFtcDtjb25uX2luZm8tJmd0O2xpc3QsICZhbXA7bmRldi0mZ3Q7Y29ubl9pbmZvX2xpc3QpOwotCQkJbmRldi0mZ3Q7cmZfY29ubl9pbmZvID0gY29ubl9pbmZvOwomIzQzOwomIzQzOwkJCW5ld19jb25uX2luZm8tJmd0O2Nvbm5faWQgPSBOQ0lfU1RBVElDX1JGX0NPTk5fSUQ7CiYjNDM7CQkJSU5JVF9MSVNUX0hFQUQoJmFtcDtuZXdfY29ubl9pbmZvLSZndDtsaXN0KTsKJiM0MzsKJiM0MzsJCQlzcGluX2xvY2tfYmgoJmFtcDtuZGV2LSZndDtjb25uX2luZm9fbG9jayk7CiYjNDM7CQkJaWYgKCFuZGV2LSZndDtyZl9jb25uX2luZm8pIHsKJiM0MzsJCQkJbGlzdF9hZGQoJmFtcDtuZXdfY29ubl9pbmZvLSZndDtsaXN0LAomIzQzOwkJCQkJICZhbXA7bmRldi0mZ3Q7Y29ubl9pbmZvX2xpc3QpOwomIzQzOwkJCQluZGV2LSZndDtyZl9jb25uX2luZm8gPSBuZXdfY29ubl9pbmZvOwomIzQzOwkJCQluZXdfY29ubl9pbmZvID0gTlVMTDsKJiM0MzsJCQl9CiYjNDM7CQkJc3Bpbl91bmxvY2tfYmgoJmFtcDtuZGV2LSZndDtjb25uX2luZm9fbG9jayk7CiYjNDM7CiYjNDM7CQkJaWYgKG5ld19jb25uX2luZm8pCiYjNDM7CQkJCWRldm1fa2ZyZWUoJmFtcDtuZGV2LSZndDtuZmNfZGV2LSZndDtkZXYsIG5ld19jb25uX2luZm8pOwogCQl9CiAJfQogCkBAIC0yOTgsMjAgJiM0MzszMTMsMjAgQEAgc3RhdGljIHZvaWQgbmNpX2NvcmVfY29ubl9jcmVhdGVfcnNwX3BhY2tldChzdHJ1Y3QgbmNpX2RldiAqbmRldiwKIAkJY29ubl9pbmZvLSZndDtkZXN0X3BhcmFtcy0mZ3Q7aWQgPSBuZGV2LSZndDtjdXJfcGFyYW1zLmlkOwogCQljb25uX2luZm8tJmd0O2Rlc3RfcGFyYW1zLSZndDtwcm90b2NvbCA9IG5kZXYtJmd0O2N1cl9wYXJhbXMucHJvdG9jb2w7CiAJCWNvbm5faW5mby0mZ3Q7Y29ubl9pZCA9IHJzcC0mZ3Q7Y29ubl9pZDsKJiM0MzsJCWNvbm5faW5mby0mZ3Q7bWF4X3BrdF9wYXlsb2FkX2xlbiA9IHJzcC0mZ3Q7bWF4X2N0cmxfcGt0X3BheWxvYWRfbGVuOwomIzQzOwkJYXRvbWljX3NldCgmYW1wO2Nvbm5faW5mby0mZ3Q7Y3JlZGl0c19jbnQsIHJzcC0mZ3Q7Y3JlZGl0c19jbnQpOwogCiAJCS8qIE5vdGU6IGRhdGFfZXhjaGFuZ2VfY2IgYW5kIGRhdGFfZXhjaGFuZ2VfY2JfY29udGV4dCBuZWVkIHRvCiAJCSAqIGJlIHNwZWNpZnkgb3V0IG9mIG5jaV9jb3JlX2Nvbm5fY3JlYXRlX3JzcF9wYWNrZXQKIAkJICovCiAKIAkJSU5JVF9MSVNUX0hFQUQoJmFtcDtjb25uX2luZm8tJmd0O2xpc3QpOwomIzQzOwkJc3Bpbl9sb2NrX2JoKCZhbXA7bmRldi0mZ3Q7Y29ubl9pbmZvX2xvY2spOwogCQlsaXN0X2FkZCgmYW1wO2Nvbm5faW5mby0mZ3Q7bGlzdCwgJmFtcDtuZGV2LSZndDtjb25uX2luZm9fbGlzdCk7CiAKIAkJaWYgKG5kZXYtJmd0O2N1cl9wYXJhbXMuaWQgPT0gbmRldi0mZ3Q7aGNpX2Rldi0mZ3Q7bmZjZWVfaWQpCiAJCQluZGV2LSZndDtoY2lfZGV2LSZndDtjb25uX2luZm8gPSBjb25uX2luZm87Ci0KLQkJY29ubl9pbmZvLSZndDtjb25uX2lkID0gcnNwLSZndDtjb25uX2lkOwotCQljb25uX2luZm8tJmd0O21heF9wa3RfcGF5bG9hZF9sZW4gPSByc3AtJmd0O21heF9jdHJsX3BrdF9wYXlsb2FkX2xlbjsKLQkJYXRvbWljX3NldCgmYW1wO2Nvbm5faW5mby0mZ3Q7Y3JlZGl0c19jbnQsIHJzcC0mZ3Q7Y3JlZGl0c19jbnQpOwomIzQzOwkJc3Bpbl91bmxvY2tfYmgoJmFtcDtuZGV2LSZndDtjb25uX2luZm9fbG9jayk7CiAJfQogCiBmcmVlX2Nvbm5faW5mbzoKQEAgLTMzMCwxNCAmIzQzOzM0NSwxOSBAQCBzdGF0aWMgdm9pZCBuY2lfY29yZV9jb25uX2Nsb3NlX3JzcF9wYWNrZXQoc3RydWN0IG5jaV9kZXYgKm5kZXYsCiAKIAlwcl9kZWJ1ZygmIzM0O3N0YXR1cyAweCV4XG4mIzM0Oywgc3RhdHVzKTsKIAlpZiAoc3RhdHVzID09IE5DSV9TVEFUVVNfT0spIHsKLQkJY29ubl9pbmZvID0gbmNpX2dldF9jb25uX2luZm9fYnlfY29ubl9pZChuZGV2LAotCQkJCQkJCSBuZGV2LSZndDtjdXJfY29ubl9pZCk7CiYjNDM7CQlzcGluX2xvY2tfYmgoJmFtcDtuZGV2LSZndDtjb25uX2luZm9fbG9jayk7CiYjNDM7CQljb25uX2luZm8gPSBuY2lfZ2V0X2Nvbm5faW5mb19ieV9jb25uX2lkX2xvY2tlZChuZGV2LAomIzQzOwkJCQkJCQkJbmRldi0mZ3Q7Y3VyX2Nvbm5faWQpOwogCQlpZiAoY29ubl9pbmZvKSB7CiAJCQlsaXN0X2RlbCgmYW1wO2Nvbm5faW5mby0mZ3Q7bGlzdCk7CiAJCQlpZiAoY29ubl9pbmZvID09IG5kZXYtJmd0O3JmX2Nvbm5faW5mbykKIAkJCQluZGV2LSZndDtyZl9jb25uX2luZm8gPSBOVUxMOwotCQkJZGV2bV9rZnJlZSgmYW1wO25kZXYtJmd0O25mY19kZXYtJmd0O2RldiwgY29ubl9pbmZvKTsKJiM0MzsJCQlpZiAoY29ubl9pbmZvID09IG5kZXYtJmd0O2hjaV9kZXYtJmd0O2Nvbm5faW5mbykKJiM0MzsJCQkJbmRldi0mZ3Q7aGNpX2Rldi0mZ3Q7Y29ubl9pbmZvID0gTlVMTDsKIAkJfQomIzQzOwkJc3Bpbl91bmxvY2tfYmgoJmFtcDtuZGV2LSZndDtjb25uX2luZm9fbG9jayk7CiYjNDM7CQlpZiAoY29ubl9pbmZvKQomIzQzOwkJCWRldm1fa2ZyZWUoJmFtcDtuZGV2LSZndDtuZmNfZGV2LSZndDtkZXYsIGNvbm5faW5mbyk7CiAJfQogCW5jaV9yZXFfY29tcGxldGUobmRldiwgc3RhdHVzKTsKIH0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMDk6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ2MjgKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyNzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBORkMgTkNJIFNwaW5sb2NrIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsICYjMzQ7QWgsIGEgc3BpbmxvY2sgKGBjb25uX2luZm9fbG9ja2ApIHRvIHByb3RlY3QgdGhlIGBjb25uX2luZm9fbGlzdGAgYW5kIHBvaW50ZXIgYWxpYXNlcyB3aXRoaW4gdGhlIE5DSSBzdWJzeXN0ZW0g4oCTIGdvb2QsIGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgY29uY3VycmVuY3kgaXNzdWUuJiMzNDsgSXQmIzM5O3MgdG91Y2hpbmcgYSBkZWNlbnQgc3ByZWFkIG9mIGZpbGVzIHdpdGhpbiB0aGUgYGRyaXZlcnMvbmZjL3N0LW5jaS9gLCBgaW5jbHVkZS9uZXQvbmZjL25jaV9jb3JlLmhgLCBhbmQgYG5ldC9uZmMvbmNpL2AgZGlyZWN0b3JpZXM6IGBzZS5jYCwgYGNvcmUuY2AsIGBkYXRhLmNgLCBgaGNpLmNgLCBgbnRmLmNgLCBhbmQgYHJzcC5jYC4gVGhpcyBzdWdnZXN0cyBhIHByZXR0eSBjZW50cmFsIGZpeCwgaW1wYWN0aW5nIGNvcmUgZGF0YSBzdHJ1Y3R1cmVzLgoKVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIGNvbmN1cnJlbmN5IGZpeC4gTXkgZ3Vlc3MgaXMgaXQmIzM5O3MgaGFuZGxpbmcgYSByYWNlIGNvbmRpdGlvbiBvciBtYXliZSBhIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvLiBTdGFuZGFyZCBzdHVmZi4KCk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbiBpczogaXMgdGhpcyByZWFjaGFibGUgYW5kIHRlc3RhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQ/IFdlIG5lZWQgdG8gdmVyaWZ5IHRoZSBmaXggdGhvcm91Z2hseS4gSG93IGRvIHdlIHRlc3QgTkZDIGluIGEgdmlydHVhbCBzZXR0aW5nPyBXZSBoYXZlIGBuZmNzaW1gIGFuZCBgdmhjaWAsIHNvIGxldCYjMzk7cyBzZWUgaWYgd2UgY2FuIHVzZSB0aG9zZSB0byBydW4gdGhlIHRlc3RzPyBUaW1lIHRvIGNoZWNrIGZvciB0aGUgcmVsZXZhbnQga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSBuZWVkIHRvIGNvbmZpcm0gYENPTkZJR19ORkNfTkNJYCBhbmQgc29tZXRoaW5nIHZpcnR1YWwg4oCTIHBlcmhhcHMgYENPTkZJR19ORkNfVklSVFVBTGAgb3IgYSBzaW1pbGFyIGNvbmZpZ3VyYXRpb24gb3B0aW9uIOKAkyBpcyBlbmFibGVkIHRvIGNvbmZpcm0gdGhhdCBhIHZpcnR1YWwgZW52aXJvbm1lbnQgaXMgYXZhaWxhYmxlLCBsZXQmIzM5O3Mgc2VhcmNoIGZvciBORkMgZHJpdmVycy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAwOToyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtORkNfTkNJJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25mYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25mYy9NYWtlZmlsZT02PW9iai0kKENPTkZJR19ORkMpICYjNDM7PSBuZmMub1xubmV0L25mYy9NYWtlZmlsZTo3Om9iai0kKENPTkZJR19ORkNfTkNJKSAmIzQzOz0gbmNpL1xubmV0L25mYy9NYWtlZmlsZS04LW9iai0kKENPTkZJR19ORkNfSENJKSAmIzQzOz0gaGNpL1xuLS1cbm5ldC9uZmMvbmNpL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbm5ldC9uZmMvbmNpL0tjb25maWc6Mjpjb25maWcgTkZDX05DSVxubmV0L25mYy9uY2kvS2NvbmZpZy0zLVx0ZGVwZW5kcyBvbiBORkNcbi0tXG5uZXQvbmZjL25jaS9LY29uZmlnLTEyLVxubmV0L25mYy9uY2kvS2NvbmZpZzoxMzpjb25maWcgTkZDX05DSV9TUElcbm5ldC9uZmMvbmNpL0tjb25maWc6MTQ6XHRkZXBlbmRzIG9uIE5GQ19OQ0kgXHUwMDI2XHUwMDI2IFNQSVxubmV0L25mYy9uY2kvS2NvbmZpZy0xNS1cdHNlbGVjdCBDUkNfQ0NJVFRcbi0tXG5uZXQvbmZjL25jaS9LY29uZmlnLTIzLVxubmV0L25mYy9uY2kvS2NvbmZpZzoyNDpjb25maWcgTkZDX05DSV9VQVJUXG5uZXQvbmZjL25jaS9LY29uZmlnOjI1Olx0ZGVwZW5kcyBvbiBORkNfTkNJIFx1MDAyNlx1MDAyNiBUVFlcbm5ldC9uZmMvbmNpL0tjb25maWctMjYtXHR0cmlzdGF0ZSBcJiMzNDtOQ0kgb3ZlciBVQVJUIHByb3RvY29sIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmZjL25jaS9NYWtlZmlsZS01LVxubmV0L25mYy9uY2kvTWFrZWZpbGU6NjpvYmotJChDT05GSUdfTkZDX05DSSkgJiM0Mzs9IG5jaS5vXG5uZXQvbmZjL25jaS9NYWtlZmlsZS03LVxuLS1cbm5ldC9uZmMvbmNpL01ha2VmaWxlPTEwPW5jaV9zcGkteSAmIzQzOz0gc3BpLm9cbm5ldC9uZmMvbmNpL01ha2VmaWxlOjExOm9iai0kKENPTkZJR19ORkNfTkNJX1NQSSkgJiM0Mzs9IG5jaV9zcGkub1xubmV0L25mYy9uY2kvTWFrZWZpbGUtMTItXG5uZXQvbmZjL25jaS9NYWtlZmlsZT0xMz1uY2lfdWFydC15ICYjNDM7PSB1YXJ0Lm9cbm5ldC9uZmMvbmNpL01ha2VmaWxlOjE0Om9iai0kKENPTkZJR19ORkNfTkNJX1VBUlQpICYjNDM7PSBuY2lfdWFydC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMDk6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU3NzIKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBc3Nlc3NpbmcgTkNJIERyaXZlciBBdmFpbGFiaWxpdHkqKgoKUmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSYjMzk7bSBpbW1lZGlhdGVseSBhc3Nlc3NpbmcgdGhlIGluZnJhc3RydWN0dXJlIHJlcXVpcmVtZW50cyBoZXJlLiAmIzM0O1ZpcnR1YWwgZHJpdmVyIGZvciBOQ0kmIzM0Oy4uLiB0aGF0JiMzOTtzIHRoZSBrZXkgcGhyYXNlLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcywgYXMgaXQgaXMgd2l0aCBhbnkgbmV3IHRhc2ssIGlzIHRvIGFzY2VydGFpbiBpZiBhIHByZS1leGlzdGluZyB2aXJ0dWFsIGRyaXZlciBzb2x1dGlvbiBleGlzdHMuIEFtIEkgZGVhbGluZyB3aXRoIGEga25vd24gcXVhbnRpdHksIG9yIGFtIEkgaW4gdGhlIHdlZWRzIGZyb20gdGhlIHN0YXJ0PyBXaGF0IGRyaXZlcnMgYXJlIGF2YWlsYWJsZSB0aGF0IHdpbGwgZ2V0IG1lIGNsb3NlciB0byB0aGUgb3V0Y29tZSBkZXNpcmVkLgoKVGhpcyBpbXBsaWVzIGFuIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGN1cnJlbnQgTkNJIGVudmlyb25tZW50LiBEbyB3ZSBoYXZlIGEgc3RhbmRhcmQgb3IgcHJvcHJpZXRhcnkgcGxhdGZvcm0/IElzIGl0IHdlbGwtZG9jdW1lbnRlZD8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIGNhbmRpZGF0ZXMgd2l0aGluIHRoZSBleGlzdGluZyBkcml2ZXIgZWNvc3lzdGVtLCBvciBhcmUgd2UgZ29pbmcgdG8gbmVlZCB0byBsb29rIGF0IGN1c3RvbSBkZXZlbG9wbWVudCwgb3IgYSBoYXJkd2FyZSBhYnN0cmFjdGlvbiBsYXllcj8gTXkgZm9jdXMgaXMgb24gZWZmaWNpZW5jeSBhbmQgdGltZSwgc28gSSYjMzk7bSBob3BpbmcgZm9yIGEgcXVpY2sgd2luOyBhIHJlYWRpbHkgYXZhaWxhYmxlLCB0ZXN0ZWQgc29sdXRpb24gaXMgYWx3YXlzIHByZWZlcmFibGUuIFRoZSB0aG91Z2h0IHByb2Nlc3MgaXMgdG8gcXVpY2tseSBkZXRlcm1pbmUgdGhlIHBhdGggb2YgbGVhc3QgcmVzaXN0YW5jZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAwOToyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtORkNfTkNJJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZmMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmZjL0tjb25maWc9NTI9Y29uZmlnIE5GQ19WSVJUVUFMX05DSVxuZHJpdmVycy9uZmMvS2NvbmZpZy01My1cdHRyaXN0YXRlIFwmIzM0O05DSSBkZXZpY2Ugc2ltdWxhdG9yIGRyaXZlclwmIzM0O1xuZHJpdmVycy9uZmMvS2NvbmZpZzo1NDpcdGRlcGVuZHMgb24gTkZDX05DSVxuZHJpdmVycy9uZmMvS2NvbmZpZy01NS1cdGhlbHBcbi0tXG5kcml2ZXJzL25mYy9mZHAvS2NvbmZpZz0yPWNvbmZpZyBORkNfRkRQXG5kcml2ZXJzL25mYy9mZHAvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7SW50ZWwgRkRQIE5GQyBkcml2ZXJcJiMzNDtcbmRyaXZlcnMvbmZjL2ZkcC9LY29uZmlnOjQ6XHRkZXBlbmRzIG9uIE5GQ19OQ0lcbmRyaXZlcnMvbmZjL2ZkcC9LY29uZmlnLTUtXHRzZWxlY3QgQ1JDX0NDSVRUXG4tLVxuZHJpdmVycy9uZmMvbmZjbXJ2bC9LY29uZmlnPTEwPWNvbmZpZyBORkNfTVJWTF9VU0JcbmRyaXZlcnMvbmZjL25mY21ydmwvS2NvbmZpZy0xMS1cdHRyaXN0YXRlIFwmIzM0O01hcnZlbGwgTkZDLW92ZXItVVNCIGRyaXZlclwmIzM0O1xuZHJpdmVycy9uZmMvbmZjbXJ2bC9LY29uZmlnOjEyOlx0ZGVwZW5kcyBvbiBORkNfTkNJIFx1MDAyNlx1MDAyNiBVU0JcbmRyaXZlcnMvbmZjL25mY21ydmwvS2NvbmZpZy0xMy1cdHNlbGVjdCBORkNfTVJWTFxuLS1cbmRyaXZlcnMvbmZjL25mY21ydmwvS2NvbmZpZz0yMz1jb25maWcgTkZDX01SVkxfVUFSVFxuZHJpdmVycy9uZmMvbmZjbXJ2bC9LY29uZmlnLTI0LVx0dHJpc3RhdGUgXCYjMzQ7TWFydmVsbCBORkMtb3Zlci1VQVJUIGRyaXZlclwmIzM0O1xuZHJpdmVycy9uZmMvbmZjbXJ2bC9LY29uZmlnOjI1Olx0ZGVwZW5kcyBvbiBORkNfTkNJIFx1MDAyNlx1MDAyNiBORkNfTkNJX1VBUlRcbmRyaXZlcnMvbmZjL25mY21ydmwvS2NvbmZpZy0yNi1cdHNlbGVjdCBORkNfTVJWTFxuLS1cbmRyaXZlcnMvbmZjL25mY21ydmwvS2NvbmZpZz00Nj1jb25maWcgTkZDX01SVkxfU1BJXG5kcml2ZXJzL25mYy9uZmNtcnZsL0tjb25maWctNDctXHR0cmlzdGF0ZSBcJiMzNDtNYXJ2ZWxsIE5GQy1vdmVyLVNQSSBkcml2ZXJcJiMzNDtcbmRyaXZlcnMvbmZjL25mY21ydmwvS2NvbmZpZzo0ODpcdGRlcGVuZHMgb24gTkZDX01SVkwgXHUwMDI2XHUwMDI2IE5GQ19OQ0lfU1BJXG5kcml2ZXJzL25mYy9uZmNtcnZsL0tjb25maWctNDktXHRoZWxwXG4tLVxuZHJpdmVycy9uZmMvbnhwLW5jaS9LY29uZmlnPTI9Y29uZmlnIE5GQ19OWFBfTkNJXG5kcml2ZXJzL25mYy9ueHAtbmNpL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O05YUC1OQ0kgTkZDIGRyaXZlclwmIzM0O1xuZHJpdmVycy9uZmMvbnhwLW5jaS9LY29uZmlnOjQ6XHRkZXBlbmRzIG9uIE5GQ19OQ0lcbmRyaXZlcnMvbmZjL254cC1uY2kvS2NvbmZpZy01LVx0aGVscFxuLS1cbmRyaXZlcnMvbmZjL3MzZndybjUvS2NvbmZpZz0xMD1jb25maWcgTkZDX1MzRldSTjVfSTJDXG5kcml2ZXJzL25mYy9zM2Z3cm41L0tjb25maWctMTEtXHR0cmlzdGF0ZSBcJiMzNDtTYW1zdW5nIFMzRldSTjUgSTJDIHN1cHBvcnRcJiMzNDtcbmRyaXZlcnMvbmZjL3MzZndybjUvS2NvbmZpZzoxMjpcdGRlcGVuZHMgb24gTkZDX05DSSBcdTAwMjZcdTAwMjYgSTJDXG5kcml2ZXJzL25mYy9zM2Z3cm41L0tjb25maWctMTMtXHRzZWxlY3QgTkZDX1MzRldSTjVcbi0tXG5kcml2ZXJzL25mYy9zM2Z3cm41L0tjb25maWc9MjM9Y29uZmlnIE5GQ19TM0ZXUk44Ml9VQVJUXG5kcml2ZXJzL25mYy9zM2Z3cm41L0tjb25maWctMjQtICAgICAgICB0cmlzdGF0ZSBcJiMzNDtTYW1zdW5nIFMzRldSTjgyIFVBUlQgc3VwcG9ydFwmIzM0O1xuZHJpdmVycy9uZmMvczNmd3JuNS9LY29uZmlnOjI1OiAgICAgICAgZGVwZW5kcyBvbiBORkNfTkNJIFx1MDAyNlx1MDAyNiBTRVJJQUxfREVWX0JVU1xuZHJpdmVycy9uZmMvczNmd3JuNS9LY29uZmlnLTI2LSAgICAgICAgc2VsZWN0IE5GQ19TM0ZXUk41XG4tLVxuZHJpdmVycy9uZmMvc3QtbmNpL0tjb25maWc9OT1jb25maWcgTkZDX1NUX05DSV9JMkNcbmRyaXZlcnMvbmZjL3N0LW5jaS9LY29uZmlnLTEwLVx0dHJpc3RhdGUgXCYjMzQ7U1RNaWNyb2VsZWN0cm9uaWNzIFNUIE5DSSBORkMgZHJpdmVyIChJMkMpXCYjMzQ7XG5kcml2ZXJzL25mYy9zdC1uY2kvS2NvbmZpZzoxMTpcdGRlcGVuZHMgb24gTkZDX05DSSBcdTAwMjZcdTAwMjYgSTJDXG5kcml2ZXJzL25mYy9zdC1uY2kvS2NvbmZpZy0xMi1cdHNlbGVjdCBORkNfU1RfTkNJXG4tLVxuZHJpdmVycy9uZmMvc3QtbmNpL0tjb25maWc9MjE9Y29uZmlnIE5GQ19TVF9OQ0lfU1BJXG5kcml2ZXJzL25mYy9zdC1uY2kvS2NvbmZpZy0yMi1cdHRyaXN0YXRlIFwmIzM0O1NUTWljcm9lbGVjdHJvbmljcyBTVCBOQ0kgTkZDIGRyaXZlciAoU1BJKVwmIzM0O1xuZHJpdmVycy9uZmMvc3QtbmNpL0tjb25maWc6MjM6XHRkZXBlbmRzIG9uIE5GQ19OQ0kgXHUwMDI2XHUwMDI2IFNQSVxuZHJpdmVycy9uZmMvc3QtbmNpL0tjb25maWctMjQtXHRzZWxlY3QgTkZDX1NUX05DSVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDA5OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MTIyCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqTkZDIEZ1enppbmcgT3Bwb3J0dW5pdHkhKioKCkFscmlnaHQsIHRoYXQmIzM5O3MgaXQhIGBORkNfVklSVFVBTF9OQ0lgIGlzIGRlZmluZWQuIFRoaXMgaXMgc2lnbmlmaWNhbnQuIEl0JiMzOTtzIHRoZSBrZXkgdG8gdmlydHVhbCBOQ0kgZGV2aWNlcy4gQW5kIHRoYXQsIGluIHR1cm4sIGlzIHRoZSBvcGVuaW5nIHdlJiMzOTt2ZSBiZWVuIGxvb2tpbmcgZm9yIHRvIGJlZ2luIHNvbWUgc2VyaW91cyBmdXp6aW5nIG9mIE5DSSBzdGFja3MuIEl0IG9wZW5zIHVwIHRoZSBwb3NzaWJpbGl0eSBvZiBpbmplY3RpbmcgbWFsZm9ybWVkIGRhdGEgd2l0aG91dCBuZWVkaW5nIHBoeXNpY2FsIGhhcmR3YXJlLCB3aGljaCBpcyBhIHNpZ25pZmljYW50IHdpbiBmb3IgdGhpcyB0eXBlIG9mIHJlc2VhcmNoLgoKTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgdmlydHVhbCBkZXZpY2UmIzM5O3MgaW1wbGVtZW50YXRpb24gYmV0dGVyLiBUaW1lIHRvIGRpdmUgaW50byBgZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuY2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBlbnRyeSBwb2ludHMsIGhvdyBpdCBpbnRlcmZhY2VzIHdpdGggdGhlIE5DSSBjb3JlLCBhbmQgbW9zdCBpbXBvcnRhbnRseSwgaWRlbnRpZnkgdGhlIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgaW5wdXQgaXMgZXhwZWN0ZWQsIGhvdyBpdCYjMzk7cyBoYW5kbGVkLCBhbmQgd2hlcmUgcG90ZW50aWFsIGZ1enppbmcgdGFyZ2V0cyBjYW4gYmUgZm91bmQuIFRoaXMgY291bGQgYmUgaW50ZXJlc3RpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMDk6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TkZDX1ZJUlRVQUxfTkNJJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZmMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmZjL0tjb25maWc9NDI9Y29uZmlnIE5GQ19QT1JUMTAwXG4tLVxuZHJpdmVycy9uZmMvS2NvbmZpZy01MS1cbmRyaXZlcnMvbmZjL0tjb25maWc6NTI6Y29uZmlnIE5GQ19WSVJUVUFMX05DSVxuZHJpdmVycy9uZmMvS2NvbmZpZy01My1cdHRyaXN0YXRlIFwmIzM0O05DSSBkZXZpY2Ugc2ltdWxhdG9yIGRyaXZlclwmIzM0O1xuLS1cbmRyaXZlcnMvbmZjL01ha2VmaWxlPTE5PW9iai0kKENPTkZJR19ORkNfU1Q5NUhGKVx0JiM0Mzs9IHN0OTVoZi9cbmRyaXZlcnMvbmZjL01ha2VmaWxlOjIwOm9iai0kKENPTkZJR19ORkNfVklSVFVBTF9OQ0kpXHQmIzQzOz0gdmlydHVhbF9uY2lkZXYub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDA5OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NTY4CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNjEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTkNJIFZpcnR1YWwgTkNJIENvbmZpZ3VyYXRpb24qKgoKT2theSwgZ3JlYXQhIFNvLCBiYXNlZCBvbiB0aGlzLCBlbmFibGluZyBgTkZDX1ZJUlRVQUxfTkNJYCBpcyB0aGUga2V5LiBOb3csIGxvb2tpbmcgYXQgdGhlIHBhdGNoLCBpdCB0b3VjaGVzIGBuZXQvbmZjL25jaS9jb3JlLmNgLCBgbmV0L25mYy9uY2kvZGF0YS5jYCwgYG5ldC9uZmMvbmNpL2hjaS5jYCwgYG5ldC9uZmMvbmNpL250Zi5jYCwgYW5kIGBuZXQvbmZjL25jaS9yc3AuY2AuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIGZvY3VzIGlzLiBNeSBpbW1lZGlhdGUgdGFzayBpcyB0byBpZGVudGlmeSB0aGUgY3JpdGljYWwgc3ltYm9scyBmb3IgZnVydGhlciBhbmFseXNpcy4KCkl0IGxvb2tzIGxpa2UgdGhlIHBhdGNoIG1vZGlmaWVzIGEgY29tcHJlaGVuc2l2ZSBzZXQgb2YgZnVuY3Rpb25zLCBpbmNsdWRpbmc6IGBuY2lfZ2V0X2Nvbm5faW5mb19ieV9jb25uX2lkX2xvY2tlZGAsIGBuY2lfZ2V0X2Nvbm5faW5mb19ieV9kZXN0X3R5cGVfcGFyYW1zX2xvY2tlZGAsIGBuY2lfZ2V0X2Nvbm5faW5mb19ieV9kZXN0X3R5cGVfcGFyYW1zYCwgYG5jaV9uZmNjX2xvb3BiYWNrYCwgYG5jaV90cmFuc2NlaXZlYCwgYG5jaV90eF93b3JrYCwgYG5jaV9kYXRhX2V4Y2hhbmdlX2NvbXBsZXRlYCwgYG5jaV9jb25uX21heF9kYXRhX3BrdF9wYXlsb2FkX3NpemVgLCBgbmNpX3NlbmRfZGF0YWAsIGBuY2lfcnhfZGF0YV9wYWNrZXRgLCBgbmNpX2hjaV9zZW5kX2RhdGFgLCBgbmNpX2hjaV9zZW5kX2NtZGAsIGBuY2lfaGNpX3Jlc3BfcmVjZWl2ZWRgLCBgbmNpX2hjaV9vcGVuX3BpcGVgLCBgbmNpX2hjaV9zZXRfcGFyYW1gLCBgbmNpX2hjaV9nZXRfcGFyYW1gLCBgbmNpX2hjaV9kZXZfc2Vzc2lvbl9pbml0YCwgYG5jaV9jb3JlX2Nvbm5fY3JlZGl0c19udGZfcGFja2V0YCwgYG5jaV9yZl9pbnRmX2FjdGl2YXRlZF9udGZfcGFja2V0YCwgYG5jaV9yZl9kZWFjdGl2YXRlX250Zl9wYWNrZXRgLCBgbmNpX3JmX2Rpc2NfcnNwX3BhY2tldGAsIGBuY2lfY29yZV9jb25uX2NyZWF0ZV9yc3BfcGFja2V0YCwgYW5kIGBuY2lfY29yZV9jb25uX2Nsb3NlX3JzcF9wYWNrZXRgLgoKVGhlc2UgYXJlIGFsbCBwYXJ0IG9mIHRoZSBOQ0kgY29yZSBhbmQgYXJlIGRlZmluaXRlbHkgcmVhY2hhYmxlIGR1cmluZyB0eXBpY2FsIGludGVyYWN0aW9ucyB3aXRoIE5DSSBkZXZpY2VzLgoKTXkgbmV4dCBzdGVwIGlzIHRvIHBpbnBvaW50IHdoaWNoIGZ1bmN0aW9ucyBhcmUgdGhlIG1vc3QgcHJvbWlzaW5nIHRhcmdldHMgZm9yIGZ1enppbmcuIEkmIzM5O2xsIGZvY3VzIG9uIHRoZXNlOiBgbmNpX25mY2NfbG9vcGJhY2tgLCBgbmNpX3RyYW5zY2VpdmVgLCBgbmNpX3NlbmRfZGF0YWAsIGBuY2lfcnhfZGF0YV9wYWNrZXRgLCBgbmNpX2hjaV9zZW5kX2NtZGAsIGBuY2lfaGNpX3NldF9wYXJhbWAsIGBuY2lfaGNpX2dldF9wYXJhbWAsIGBuY2lfY29yZV9jb25uX2NyZWF0ZV9yc3BfcGFja2V0YCwgYG5jaV9jb3JlX2Nvbm5fY2xvc2VfcnNwX3BhY2tldGAsIGFuZCBgbmNpX3JmX2Rpc2NfcnNwX3BhY2tldGAuIFRoZXNlIHNlZW0gdG8gYmUgdGhlIG1vc3QgY3JpdGljYWwgZm9yIGRhdGEgZmxvdyBhbmQgY29udHJvbC4KCk5vdywgSSYjMzk7bGwgY2hlY2sgdG8gc2VlIGlmIGBuY2lfaGNpX3NlbmRfY21kYCBpcyByZWFjaGFibGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDA5OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25jaV9oY2lfc2VuZF9jbWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmZjLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmZjL25jaS9oY2kuYz0yMjU9RVhQT1JUX1NZTUJPTChuY2lfaGNpX3NlbmRfZXZlbnQpO1xubmV0L25mYy9uY2kvaGNpLmMtMjI2LVxubmV0L25mYy9uY2kvaGNpLmM6MjI3OmludCBuY2lfaGNpX3NlbmRfY21kKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCB1OCBnYXRlLCB1OCBjbWQsXG5uZXQvbmZjL25jaS9oY2kuYy0yMjgtXHRcdCAgICAgY29uc3QgdTggKnBhcmFtLCBzaXplX3QgcGFyYW1fbGVuLFxuLS1cbm5ldC9uZmMvbmNpL2hjaS5jLTI3Ny19XG5uZXQvbmZjL25jaS9oY2kuYzoyNzg6RVhQT1JUX1NZTUJPTChuY2lfaGNpX3NlbmRfY21kKTtcbm5ldC9uZmMvbmNpL2hjaS5jLTI3OS1cbm5ldC9uZmMvbmNpL2hjaS5jPTI4MD1pbnQgbmNpX2hjaV9jbGVhcl9hbGxfcGlwZXMoc3RydWN0IG5jaV9kZXYgKm5kZXYpXG4tLVxubmV0L25mYy9uY2kvaGNpLmMtMjgzLVxubmV0L25mYy9uY2kvaGNpLmM6Mjg0Olx0ciA9IG5jaV9oY2lfc2VuZF9jbWQobmRldiwgTkNJX0hDSV9BRE1JTl9HQVRFLFxubmV0L25mYy9uY2kvaGNpLmMtMjg1LVx0XHRcdCAgICAgTkNJX0hDSV9BRE1fQ0xFQVJfQUxMX1BJUEUsIE5VTEwsIDAsIE5VTEwpO1xuLS1cbm5ldC9uZmMvbmNpL2hjaS5jPTU1Nz1zdGF0aWMgdTggbmNpX2hjaV9jcmVhdGVfcGlwZShzdHJ1Y3QgbmNpX2RldiAqbmRldiwgdTggZGVzdF9ob3N0LFxuLS1cbm5ldC9uZmMvbmNpL2hjaS5jLTU3MC1cbm5ldC9uZmMvbmNpL2hjaS5jOjU3MTpcdCpyZXN1bHQgPSBuY2lfaGNpX3NlbmRfY21kKG5kZXYsIE5DSV9IQ0lfQURNSU5fR0FURSxcbm5ldC9uZmMvbmNpL2hjaS5jLTU3Mi1cdFx0XHRcdCAgIE5DSV9IQ0lfQURNX0NSRUFURV9QSVBFLFxuLS1cbm5ldC9uZmMvbmNpL2hjaS5jPTU4OD1zdGF0aWMgaW50IG5jaV9oY2lfZGVsZXRlX3BpcGUoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHU4IHBpcGUpXG5uZXQvbmZjL25jaS9oY2kuYy01ODkte1xubmV0L25mYy9uY2kvaGNpLmM6NTkwOlx0cmV0dXJuIG5jaV9oY2lfc2VuZF9jbWQobmRldiwgTkNJX0hDSV9BRE1JTl9HQVRFLFxubmV0L25mYy9uY2kvaGNpLmMtNTkxLVx0XHRcdFx0TkNJX0hDSV9BRE1fREVMRVRFX1BJUEUsIFx1MDAyNnBpcGUsIDEsIE5VTEwpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAwOToyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTQ1NgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlLiBNeSBmaXJzdCB0aG91Z2h0IGlzOgoKKipDaGVja2luZyBSZWFjaGFiaWxpdHk6IGBuY2lfY29yZV9jb25uX2NyZWF0ZV9yc3BfcGFja2V0YCoqCgpJIG5lZWQgdG8gY29uZmlybSBzb21ldGhpbmcgY3JpdGljYWwgaGVyZS4gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGZ1bmN0aW9uIGBuY2lfY29yZV9jb25uX2NyZWF0ZV9yc3BfcGFja2V0YCBpcywgaW4gZmFjdCwgYWNjZXNzaWJsZSBhbmQgZnVuY3Rpb25pbmcgYXMgaW50ZW5kZWQgd2l0aGluIHRoZSBjdXJyZW50IGV4ZWN1dGlvbiBjb250ZXh0LiBUaGlzIGlzIGxpa2VseSBhIGtleSBjb21wb25lbnQgaW4gd2hhdGV2ZXIgYnJvYWRlciBzeXN0ZW0gSSYjMzk7bSB3b3JraW5nIHdpdGgsIHBlcmhhcHMgcmVsYXRlZCB0byBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQgb3IgcmVzcG9uc2UgaGFuZGxpbmcsIGdpdmVuIHRoZSBmdW5jdGlvbiBuYW1lLiBNYWtpbmcgc3VyZSBpdOKAmXMgcmVhY2hhYmxlIGlzIHRoZSBmaXJzdCBzdGVwIGluIGRlYnVnZ2luZyBvciB1bmRlcnN0YW5kaW5nIGEgcG90ZW50aWFsIGlzc3VlLCBvciBzaW1wbHkgdmVyaWZ5aW5nIGEgc3BlY2lmaWMgY29kZSBwYXRoIEkmIzM5O20gYW5hbHl6aW5nLiBHb3R0YSBrbm93IGlmIGl0JiMzOTtzIHRoZXJlIGJlZm9yZSBJIGNhbiBkbyBhbnl0aGluZyB3aXRoIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAwOToyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuY2lfY29yZV9jb25uX2NyZWF0ZV9yc3BfcGFja2V0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25mYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25mYy9uY2kvcnNwLmM9Mjc2PXN0YXRpYyB2b2lkIG5jaV9uZmNlZV9tb2RlX3NldF9yc3BfcGFja2V0KHN0cnVjdCBuY2lfZGV2ICpuZGV2LFxuLS1cbm5ldC9uZmMvbmNpL3JzcC5jLTI4NC1cbm5ldC9uZmMvbmNpL3JzcC5jOjI4NTpzdGF0aWMgdm9pZCBuY2lfY29yZV9jb25uX2NyZWF0ZV9yc3BfcGFja2V0KHN0cnVjdCBuY2lfZGV2ICpuZGV2LFxubmV0L25mYy9uY2kvcnNwLmMtMjg2LVx0XHRcdFx0XHQgICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbmZjL25jaS9yc3AuYy0zMTktXHRcdC8qIE5vdGU6IGRhdGFfZXhjaGFuZ2VfY2IgYW5kIGRhdGFfZXhjaGFuZ2VfY2JfY29udGV4dCBuZWVkIHRvXG5uZXQvbmZjL25jaS9yc3AuYzozMjA6XHRcdCAqIGJlIHNwZWNpZnkgb3V0IG9mIG5jaV9jb3JlX2Nvbm5fY3JlYXRlX3JzcF9wYWNrZXRcbm5ldC9uZmMvbmNpL3JzcC5jLTMyMS1cdFx0ICovXG4tLVxubmV0L25mYy9uY2kvcnNwLmM9MzY1PXZvaWQgbmNpX3JzcF9wYWNrZXQoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L25mYy9uY2kvcnNwLmMtNDAzLVx0Y2FzZSBOQ0lfT1BfQ09SRV9DT05OX0NSRUFURV9SU1A6XG5uZXQvbmZjL25jaS9yc3AuYzo0MDQ6XHRcdG5jaV9jb3JlX2Nvbm5fY3JlYXRlX3JzcF9wYWNrZXQobmRldiwgc2tiKTtcbm5ldC9uZmMvbmNpL3JzcC5jLTQwNS1cdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDA5OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMDQxCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogOTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyB0aGUgTkZDIENvbnRyb2xsZXIgUmVzcG9uc2UgSGFuZGxlcioqCgpPa2F5LCBzbyBJJiMzOTt2ZSBpZGVudGlmaWVkIHRoZSBlbnRyeSBwb2ludDogYG5jaV9yc3BfcGFja2V0YC4gVGhhdCYjMzk7cyB0aGUgZnVuY3Rpb24gaGFuZGxpbmcgcmVzcG9uc2VzIGNvbWluZyBiYWNrIGZyb20gdGhlIE5GQyBjb250cm9sbGVyLCB3aGljaCBtYWtlcyBpdCBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZy4gRGVmaW5pdGVseSByZWFjaGFibGUsIGFuZCBwb3RlbnRpYWxseSB2dWxuZXJhYmxlLiBJJiMzOTt2ZSBnb3QgYSBnb29kIGZlZWxpbmcgYWJvdXQgdGhpcy4KCk5vdywgYmVmb3JlIEkgZGlnIGluLCBJIHdhbnQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIExldCYjMzk7cyBzZWUuLi4gSSYjMzk7bGwgbmVlZCB0byBjb25zaWRlcjogYE5GQ2AsIG9idmlvdXNseSwgYW5kIGBORkNfTkNJYCBmb3IgdGhlIE5DSSBwcm90b2NvbCBpdHNlbGYuIFRoZW4gdGhlcmUmIzM5O3MgYE5GQ19WSVJUVUFMX05DSWAsIGJlY2F1c2UgdmlydHVhbCBOQ0kgbWlnaHQgaW50cm9kdWNlIHNvbWUgaW50ZXJlc3RpbmcgZWRnZSBjYXNlcywgYW5kIGZpbmFsbHkgYE5GQ19IQ0lgLiBIbW0sIEkmIzM5O20gbm90IGVudGlyZWx5IHN1cmUgYWJvdXQgYE5GQ19IQ0lgLiBMZXQgbWUgcXVpY2tseSBjaGVjayBpZiBgbmNpX2hjaV9zZW5kX2NtZGAgcmVxdWlyZXMgdGhhdCBjb25maWcgb3B0aW9uLiBKdXN0IG5lZWQgdG8gdmVyaWZ5IHRoYXQgZGVwZW5kZW5jeSB0byBiZSBzdXJlLiBBbHJpZ2h0LCBub3cgSSBoYXZlIGEgZ29vZCBiYXNlIGZvciBjb25maWd1cmluZyB0aGUgZnV6emluZyBlbnZpcm9ubWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMDk6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TkZDX0hDSSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZmMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZmMvTWFrZWZpbGU9Nz1vYmotJChDT05GSUdfTkZDX05DSSkgJiM0Mzs9IG5jaS9cbm5ldC9uZmMvTWFrZWZpbGU6ODpvYmotJChDT05GSUdfTkZDX0hDSSkgJiM0Mzs9IGhjaS9cbm5ldC9uZmMvTWFrZWZpbGUtOS1vYmotJChDT05GSUdfTkZDX0RJR0lUQUwpICYjNDM7PSBuZmNfZGlnaXRhbC5vXG4tLVxubmV0L25mYy9oY2kvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxubmV0L25mYy9oY2kvS2NvbmZpZzoyOmNvbmZpZyBORkNfSENJXG5uZXQvbmZjL2hjaS9LY29uZmlnLTMtXHRkZXBlbmRzIG9uIE5GQ1xuLS1cbm5ldC9uZmMvaGNpL0tjb25maWc9MTE9Y29uZmlnIE5GQ19TSERMQ1xubmV0L25mYy9oY2kvS2NvbmZpZzoxMjpcdGRlcGVuZHMgb24gTkZDX0hDSVxubmV0L25mYy9oY2kvS2NvbmZpZy0xMy1cdHNlbGVjdCBDUkNfQ0NJVFRcbi0tXG5uZXQvbmZjL2hjaS9NYWtlZmlsZS01LVxubmV0L25mYy9oY2kvTWFrZWZpbGU6NjpvYmotJChDT05GSUdfTkZDX0hDSSkgJiM0Mzs9IGhjaS5vXG5uZXQvbmZjL2hjaS9NYWtlZmlsZS03LVxuLS1cbm5ldC9uZmMvaGNpL2NvbW1hbmQuYz0xOT1zdGF0aWMgaW50IG5mY19oY2lfZXhlY3V0ZV9jbWRfYXN5bmMoc3RydWN0IG5mY19oY2lfZGV2ICpoZGV2LCB1OCBwaXBlLCB1OCBjbWQsXG4tLVxubmV0L25mYy9oY2kvY29tbWFuZC5jLTI4LVx0ICovXG5uZXQvbmZjL2hjaS9jb21tYW5kLmM6Mjk6XHRyZXR1cm4gbmZjX2hjaV9oY3BfbWVzc2FnZV90eChoZGV2LCBwaXBlLCBORkNfSENJX0hDUF9DT01NQU5ELCBjbWQsXG5uZXQvbmZjL2hjaS9jb21tYW5kLmMtMzAtXHRcdFx0XHQgICAgICBwYXJhbSwgcGFyYW1fbGVuLCBjYiwgY2JfY29udGV4dCwgTUFYX0ZXSSk7XG4tLVxubmV0L25mYy9oY2kvY29tbWFuZC5jPTU1PXN0YXRpYyBpbnQgbmZjX2hjaV9leGVjdXRlX2NtZChzdHJ1Y3QgbmZjX2hjaV9kZXYgKmhkZXYsIHU4IHBpcGUsIHU4IGNtZCxcbi0tXG5uZXQvbmZjL2hjaS9jb21tYW5kLmMtNzEtXHRoY3BfZXcuZXhlY19yZXN1bHQgPSBuZmNfaGNpX2hjcF9tZXNzYWdlX3R4KGhkZXYsIHBpcGUsXG5uZXQvbmZjL2hjaS9jb21tYW5kLmM6NzI6XHRcdFx0XHRcdFx0ICAgIE5GQ19IQ0lfSENQX0NPTU1BTkQsIGNtZCxcbm5ldC9uZmMvaGNpL2NvbW1hbmQuYy03My1cdFx0XHRcdFx0XHQgICAgcGFyYW0sIHBhcmFtX2xlbixcbi0tXG5uZXQvbmZjL2hjaS9jb21tYW5kLmM9OTE9aW50IG5mY19oY2lfc2VuZF9ldmVudChzdHJ1Y3QgbmZjX2hjaV9kZXYgKmhkZXYsIHU4IGdhdGUsIHU4IGV2ZW50LFxuLS1cbm5ldC9uZmMvaGNpL2NvbW1hbmQuYy05OC1cdHBpcGUgPSBoZGV2LVx1MDAzZWdhdGUycGlwZVtnYXRlXTtcbm5ldC9uZmMvaGNpL2NvbW1hbmQuYzo5OTpcdGlmIChwaXBlID09IE5GQ19IQ0lfSU5WQUxJRF9QSVBFKVxubmV0L25mYy9oY2kvY29tbWFuZC5jLTEwMC1cdFx0cmV0dXJuIC1FQUREUk5PVEFWQUlMO1xubmV0L25mYy9oY2kvY29tbWFuZC5jLTEwMS1cbm5ldC9uZmMvaGNpL2NvbW1hbmQuYzoxMDI6XHRyZXR1cm4gbmZjX2hjaV9oY3BfbWVzc2FnZV90eChoZGV2LCBwaXBlLCBORkNfSENJX0hDUF9FVkVOVCwgZXZlbnQsXG5uZXQvbmZjL2hjaS9jb21tYW5kLmMtMTAzLVx0XHRcdFx0ICAgICAgcGFyYW0sIHBhcmFtX2xlbiwgTlVMTCwgTlVMTCwgMCk7XG4tLVxubmV0L25mYy9oY2kvY29tbWFuZC5jPTExMj1pbnQgbmZjX2hjaV9zZW5kX2NtZChzdHJ1Y3QgbmZjX2hjaV9kZXYgKmhkZXYsIHU4IGdhdGUsIHU4IGNtZCxcbi0tXG5uZXQvbmZjL2hjaS9jb21tYW5kLmMtMTE3LVx0cGlwZSA9IGhkZXYtXHUwMDNlZ2F0ZTJwaXBlW2dhdGVdO1xubmV0L25mYy9oY2kvY29tbWFuZC5jOjExODpcdGlmIChwaXBlID09IE5GQ19IQ0lfSU5WQUxJRF9QSVBFKVxubmV0L25mYy9oY2kvY29tbWFuZC5jLTExOS1cdFx0cmV0dXJuIC1FQUREUk5PVEFWQUlMO1xuLS1cbm5ldC9uZmMvaGNpL2NvbW1hbmQuYz0xMjU9aW50IG5mY19oY2lfc2VuZF9jbWRfYXN5bmMoc3RydWN0IG5mY19oY2lfZGV2ICpoZGV2LCB1OCBnYXRlLCB1OCBjbWQsXG4tLVxubmV0L25mYy9oY2kvY29tbWFuZC5jLTEzMS1cdHBpcGUgPSBoZGV2LVx1MDAzZWdhdGUycGlwZVtnYXRlXTtcbm5ldC9uZmMvaGNpL2NvbW1hbmQuYzoxMzI6XHRpZiAocGlwZSA9PSBORkNfSENJX0lOVkFMSURfUElQRSlcbm5ldC9uZmMvaGNpL2NvbW1hbmQuYy0xMzMtXHRcdHJldHVybiAtRUFERFJOT1RBVkFJTDtcbi0tXG5uZXQvbmZjL2hjaS9jb21tYW5kLmM9MTQwPWludCBuZmNfaGNpX3NldF9wYXJhbShzdHJ1Y3QgbmZjX2hjaV9kZXYgKmhkZXYsIHU4IGdhdGUsIHU4IGlkeCxcbi0tXG5uZXQvbmZjL2hjaS9jb21tYW5kLmMtMTYyLVxubmV0L25mYy9oY2kvY29tbWFuZC5jOjE2MzpcdHIgPSBuZmNfaGNpX3NlbmRfY21kKGhkZXYsIGdhdGUsIE5GQ19IQ0lfQU5ZX1NFVF9QQVJBTUVURVIsXG5uZXQvbmZjL2hjaS9jb21tYW5kLmMtMTY0LVx0XHRcdCAgICAgdG1wLCBwYXJhbV9sZW4gJiM0MzsgMSwgTlVMTCk7XG4tLVxubmV0L25mYy9oY2kvY29tbWFuZC5jPTE3Mj1pbnQgbmZjX2hjaV9nZXRfcGFyYW0oc3RydWN0IG5mY19oY2lfZGV2ICpoZGV2LCB1OCBnYXRlLCB1OCBpZHgsXG4tLVxubmV0L25mYy9oY2kvY29tbWFuZC5jLTE3Ni1cbm5ldC9uZmMvaGNpL2NvbW1hbmQuYzoxNzc6XHRyZXR1cm4gbmZjX2hjaV9zZW5kX2NtZChoZGV2LCBnYXRlLCBORkNfSENJX0FOWV9HRVRfUEFSQU1FVEVSLFxubmV0L25mYy9oY2kvY29tbWFuZC5jLTE3OC1cdFx0XHRcdFx1MDAyNmlkeCwgMSwgc2tiKTtcbi0tXG5uZXQvbmZjL2hjaS9jb21tYW5kLmM9MTgyPXN0YXRpYyBpbnQgbmZjX2hjaV9vcGVuX3BpcGUoc3RydWN0IG5mY19oY2lfZGV2ICpoZGV2LCB1OCBwaXBlKVxuLS1cbm5ldC9uZmMvaGNpL2NvbW1hbmQuYy0xODgtXG5uZXQvbmZjL2hjaS9jb21tYW5kLmM6MTg5Olx0ciA9IG5mY19oY2lfZXhlY3V0ZV9jbWQoaGRldiwgcGlwZSwgTkZDX0hDSV9BTllfT1BFTl9QSVBFLFxubmV0L25mYy9oY2kvY29tbWFuZC5jLTE5MC1cdFx0XHRcdE5VTEwsIDAsIFx1MDAyNnNrYik7XG4tLVxubmV0L25mYy9oY2kvY29tbWFuZC5jPTIwMj1zdGF0aWMgaW50IG5mY19oY2lfY2xvc2VfcGlwZShzdHJ1Y3QgbmZjX2hjaV9kZXYgKmhkZXYsIHU4IHBpcGUpXG5uZXQvbmZjL2hjaS9jb21tYW5kLmMtMjAzLXtcbm5ldC9uZmMvaGNpL2NvbW1hbmQuYzoyMDQ6XHRyZXR1cm4gbmZjX2hjaV9leGVjdXRlX2NtZChoZGV2LCBwaXBlLCBORkNfSENJX0FOWV9DTE9TRV9QSVBFLFxubmV0L25mYy9oY2kvY29tbWFuZC5jLTIwNS1cdFx0XHRcdCAgIE5VTEwsIDAsIE5VTEwpO1xuLS1cbm5ldC9uZmMvaGNpL2NvbW1hbmQuYz0yMDg9c3RhdGljIHU4IG5mY19oY2lfY3JlYXRlX3BpcGUoc3RydWN0IG5mY19oY2lfZGV2ICpoZGV2LCB1OCBkZXN0X2hvc3QsXG4tLVxubmV0L25mYy9oY2kvY29tbWFuZC5jLTIxNy1cbm5ldC9uZmMvaGNpL2NvbW1hbmQuYzoyMTg6XHRwYXJhbXMuc3JjX2dhdGUgPSBORkNfSENJX0FETUlOX0dBVEU7XG5uZXQvbmZjL2hjaS9jb21tYW5kLmMtMjE5LVx0cGFyYW1zLmRlc3RfaG9zdCA9IGRlc3RfaG9zdDtcbi0tXG5uZXQvbmZjL2hjaS9jb21tYW5kLmMtMjIxLVxubmV0L25mYy9oY2kvY29tbWFuZC5jOjIyMjpcdCpyZXN1bHQgPSBuZmNfaGNpX2V4ZWN1dGVfY21kKGhkZXYsIE5GQ19IQ0lfQURNSU5fUElQRSxcbm5ldC9uZmMvaGNpL2NvbW1hbmQuYzoyMjM6XHRcdFx0XHQgICAgICBORkNfSENJX0FETV9DUkVBVEVfUElQRSxcbm5ldC9uZmMvaGNpL2NvbW1hbmQuYy0yMjQtXHRcdFx0XHQgICAgICAodTggKikgXHUwMDI2cGFyYW1zLCBzaXplb2YocGFyYW1zKSwgXHUwMDI2c2tiKTtcbm5ldC9uZmMvaGNpL2NvbW1hbmQuYy0yMjUtXHRpZiAoKnJlc3VsdCBcdTAwM2MgMClcbm5ldC9uZmMvaGNpL2NvbW1hbmQuYzoyMjY6XHRcdHJldHVybiBORkNfSENJX0lOVkFMSURfUElQRTtcbm5ldC9uZmMvaGNpL2NvbW1hbmQuYy0yMjctXG4tLVxubmV0L25mYy9oY2kvY29tbWFuZC5jPTIzNz1zdGF0aWMgaW50IG5mY19oY2lfZGVsZXRlX3BpcGUoc3RydWN0IG5mY19oY2lfZGV2ICpoZGV2LCB1OCBwaXBlKVxubmV0L25mYy9oY2kvY29tbWFuZC5jLTIzOC17XG5uZXQvbmZjL2hjaS9jb21tYW5kLmM6MjM5Olx0cmV0dXJuIG5mY19oY2lfZXhlY3V0ZV9jbWQoaGRldiwgTkZDX0hDSV9BRE1JTl9QSVBFLFxubmV0L25mYy9oY2kvY29tbWFuZC5jOjI0MDpcdFx0XHRcdCAgIE5GQ19IQ0lfQURNX0RFTEVURV9QSVBFLCBcdTAwMjZwaXBlLCAxLCBOVUxMKTtcbm5ldC9uZmMvaGNpL2NvbW1hbmQuYy0yNDEtfVxuLS1cbm5ldC9uZmMvaGNpL2NvbW1hbmQuYz0yNDM9c3RhdGljIGludCBuZmNfaGNpX2NsZWFyX2FsbF9waXBlcyhzdHJ1Y3QgbmZjX2hjaV9kZXYgKmhkZXYpXG4tLVxubmV0L25mYy9oY2kvY29tbWFuZC5jLTI1MC1cbm5ldC9uZmMvaGNpL2NvbW1hbmQuYzoyNTE6XHRpZiAodGVzdF9iaXQoTkZDX0hDSV9RVUlSS19TSE9SVF9DTEVBUiwgXHUwMDI2aGRldi1cdTAwM2VxdWlya3MpKVxubmV0L25mYy9oY2kvY29tbWFuZC5jLTI1Mi1cdFx0cGFyYW1fbGVuID0gMDtcbm5ldC9uZmMvaGNpL2NvbW1hbmQuYy0yNTMtXG5uZXQvbmZjL2hjaS9jb21tYW5kLmM6MjU0Olx0cmV0dXJuIG5mY19oY2lfZXhlY3V0ZV9jbWQoaGRldiwgTkZDX0hDSV9BRE1JTl9QSVBFLFxubmV0L25mYy9oY2kvY29tbWFuZC5jOjI1NTpcdFx0XHRcdCAgIE5GQ19IQ0lfQURNX0NMRUFSX0FMTF9QSVBFLCBwYXJhbSwgcGFyYW1fbGVuLFxubmV0L25mYy9oY2kvY29tbWFuZC5jLTI1Ni1cdFx0XHRcdCAgIE5VTEwpO1xuLS1cbm5ldC9uZmMvaGNpL2NvbW1hbmQuYz0yNTk9aW50IG5mY19oY2lfZGlzY29ubmVjdF9nYXRlKHN0cnVjdCBuZmNfaGNpX2RldiAqaGRldiwgdTggZ2F0ZSlcbi0tXG5uZXQvbmZjL2hjaS9jb21tYW5kLmMtMjYzLVxubmV0L25mYy9oY2kvY29tbWFuZC5jOjI2NDpcdGlmIChwaXBlID09IE5GQ19IQ0lfSU5WQUxJRF9QSVBFKVxubmV0L25mYy9oY2kvY29tbWFuZC5jLTI2NS1cdFx0cmV0dXJuIC1FQUREUk5PVEFWQUlMO1xuLS1cbm5ldC9uZmMvaGNpL2NvbW1hbmQuYy0yNzAtXG5uZXQvbmZjL2hjaS9jb21tYW5kLmM6MjcxOlx0aWYgKHBpcGUgIT0gTkZDX0hDSV9MSU5LX01HTVRfUElQRSBcdTAwMjZcdTAwMjYgcGlwZSAhPSBORkNfSENJX0FETUlOX1BJUEUpIHtcbm5ldC9uZmMvaGNpL2NvbW1hbmQuYy0yNzItXHRcdHIgPSBuZmNfaGNpX2RlbGV0ZV9waXBlKGhkZXYsIHBpcGUpO1xuLS1cbm5ldC9uZmMvaGNpL2NvbW1hbmQuYy0yNzYtXG5uZXQvbmZjL2hjaS9jb21tYW5kLmM6Mjc3Olx0aGRldi1cdTAwM2VnYXRlMnBpcGVbZ2F0ZV0gPSBORkNfSENJX0lOVkFMSURfUElQRTtcbm5ldC9uZmMvaGNpL2NvbW1hbmQuYy0yNzgtXG4tLVxubmV0L25mYy9oY2kvY29tbWFuZC5jPTI5Nz1pbnQgbmZjX2hjaV9jb25uZWN0X2dhdGUoc3RydWN0IG5mY19oY2lfZGV2ICpoZGV2LCB1OCBkZXN0X2hvc3QsIHU4IGRlc3RfZ2F0ZSxcbi0tXG5uZXQvbmZjL2hjaS9jb21tYW5kLmMtMzAyLVxubmV0L25mYy9oY2kvY29tbWFuZC5jOjMwMzpcdGlmIChwaXBlID09IE5GQ19IQ0lfRE9fTk9UX0NSRUFURV9QSVBFKVxubmV0L25mYy9oY2kvY29tbWFuZC5jLTMwNC1cdFx0cmV0dXJuIDA7XG5uZXQvbmZjL2hjaS9jb21tYW5kLmMtMzA1LVxubmV0L25mYy9oY2kvY29tbWFuZC5jOjMwNjpcdGlmIChoZGV2LVx1MDAzZWdhdGUycGlwZVtkZXN0X2dhdGVdICE9IE5GQ19IQ0lfSU5WQUxJRF9QSVBFKVxubmV0L25mYy9oY2kvY29tbWFuZC5jLTMwNy1cdFx0cmV0dXJuIC1FQUREUklOVVNFO1xubmV0L25mYy9oY2kvY29tbWFuZC5jLTMwOC1cbm5ldC9uZmMvaGNpL2NvbW1hbmQuYzozMDk6XHRpZiAocGlwZSAhPSBORkNfSENJX0lOVkFMSURfUElQRSlcbm5ldC9uZmMvaGNpL2NvbW1hbmQuYy0zMTAtXHRcdGdvdG8gb3Blbl9waXBlO1xuLS1cbm5ldC9uZmMvaGNpL2NvbW1hbmQuYy0zMTItXHRzd2l0Y2ggKGRlc3RfZ2F0ZSkge1xubmV0L25mYy9oY2kvY29tbWFuZC5jOjMxMzpcdGNhc2UgTkZDX0hDSV9MSU5LX01HTVRfR0FURTpcbm5ldC9uZmMvaGNpL2NvbW1hbmQuYzozMTQ6XHRcdHBpcGUgPSBORkNfSENJX0xJTktfTUdNVF9QSVBFO1xubmV0L25mYy9oY2kvY29tbWFuZC5jLTMxNS1cdFx0YnJlYWs7XG5uZXQvbmZjL2hjaS9jb21tYW5kLmM6MzE2Olx0Y2FzZSBORkNfSENJX0FETUlOX0dBVEU6XG5uZXQvbmZjL2hjaS9jb21tYW5kLmM6MzE3Olx0XHRwaXBlID0gTkZDX0hDSV9BRE1JTl9QSVBFO1xubmV0L25mYy9oY2kvY29tbWFuZC5jLTMxOC1cdFx0YnJlYWs7XG4tLVxubmV0L25mYy9oY2kvY29tbWFuZC5jLTMyMC1cdFx0cGlwZSA9IG5mY19oY2lfY3JlYXRlX3BpcGUoaGRldiwgZGVzdF9ob3N0LCBkZXN0X2dhdGUsIFx1MDAyNnIpO1xubmV0L25mYy9oY2kvY29tbWFuZC5jOjMyMTpcdFx0aWYgKHBpcGUgPT0gTkZDX0hDSV9JTlZBTElEX1BJUEUpXG5uZXQvbmZjL2hjaS9jb21tYW5kLmMtMzIyLVx0XHRcdHJldHVybiByO1xuLS1cbm5ldC9uZmMvaGNpL2NvcmUuYz0yMj1pbnQgbmZjX2hjaV9yZXN1bHRfdG9fZXJybm8odTggcmVzdWx0KVxuLS1cbm5ldC9uZmMvaGNpL2NvcmUuYy0yNC1cdHN3aXRjaCAocmVzdWx0KSB7XG5uZXQvbmZjL2hjaS9jb3JlLmM6MjU6XHRjYXNlIE5GQ19IQ0lfQU5ZX09LOlxubmV0L25mYy9oY2kvY29yZS5jLTI2LVx0XHRyZXR1cm4gMDtcbm5ldC9uZmMvaGNpL2NvcmUuYzoyNzpcdGNhc2UgTkZDX0hDSV9BTllfRV9SRUdfUEFSX1VOS05PV046XG5uZXQvbmZjL2hjaS9jb3JlLmMtMjgtXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbm5ldC9uZmMvaGNpL2NvcmUuYzoyOTpcdGNhc2UgTkZDX0hDSV9BTllfRV9USU1FT1VUOlxubmV0L25mYy9oY2kvY29yZS5jLTMwLVx0XHRyZXR1cm4gLUVUSU1FO1xuLS1cbm5ldC9uZmMvaGNpL2NvcmUuYz0zNz12b2lkIG5mY19oY2lfcmVzZXRfcGlwZXMoc3RydWN0IG5mY19oY2lfZGV2ICpoZGV2KVxuLS1cbm5ldC9uZmMvaGNpL2NvcmUuYy00MC1cbm5ldC9uZmMvaGNpL2NvcmUuYzo0MTpcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE5GQ19IQ0lfTUFYX1BJUEVTOyBpJiM0MzsmIzQzOykge1xubmV0L25mYy9oY2kvY29yZS5jOjQyOlx0XHRoZGV2LVx1MDAzZXBpcGVzW2ldLmdhdGUgPSBORkNfSENJX0lOVkFMSURfR0FURTtcbm5ldC9uZmMvaGNpL2NvcmUuYzo0MzpcdFx0aGRldi1cdTAwM2VwaXBlc1tpXS5kZXN0X2hvc3QgPSBORkNfSENJX0lOVkFMSURfSE9TVDtcbm5ldC9uZmMvaGNpL2NvcmUuYy00NC1cdH1cbm5ldC9uZmMvaGNpL2NvcmUuYzo0NTpcdG1lbXNldChoZGV2LVx1MDAzZWdhdGUycGlwZSwgTkZDX0hDSV9JTlZBTElEX1BJUEUsIHNpemVvZihoZGV2LVx1MDAzZWdhdGUycGlwZSkpO1xubmV0L25mYy9oY2kvY29yZS5jLTQ2LX1cbi0tXG5uZXQvbmZjL2hjaS9jb3JlLmM9NDk9dm9pZCBuZmNfaGNpX3Jlc2V0X3BpcGVzX3Blcl9ob3N0KHN0cnVjdCBuZmNfaGNpX2RldiAqaGRldiwgdTggaG9zdClcbi0tXG5uZXQvbmZjL2hjaS9jb3JlLmMtNTItXG5uZXQvbmZjL2hjaS9jb3JlLmM6NTM6XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBORkNfSENJX01BWF9QSVBFUzsgaSYjNDM7JiM0MzspIHtcbm5ldC9uZmMvaGNpL2NvcmUuYy01NC1cdFx0aWYgKGhkZXYtXHUwMDNlcGlwZXNbaV0uZGVzdF9ob3N0ICE9IGhvc3QpXG4tLVxubmV0L25mYy9oY2kvY29yZS5jLTU2LVxubmV0L25mYy9oY2kvY29yZS5jOjU3Olx0XHRoZGV2LVx1MDAzZXBpcGVzW2ldLmdhdGUgPSBORkNfSENJX0lOVkFMSURfR0FURTtcbm5ldC9uZmMvaGNpL2NvcmUuYzo1ODpcdFx0aGRldi1cdTAwM2VwaXBlc1tpXS5kZXN0X2hvc3QgPSBORkNfSENJX0lOVkFMSURfSE9TVDtcbm5ldC9uZmMvaGNpL2NvcmUuYy01OS1cdH1cbi0tXG5uZXQvbmZjL2hjaS9jb3JlLmM9MTI2PXN0YXRpYyB2b2lkIG5mY19oY2lfbXNnX3J4X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbm5ldC9uZmMvaGNpL2NvcmUuYy0xMzctXHRcdHBpcGUgPSBza2ItXHUwMDNlZGF0YVswXTtcbm5ldC9uZmMvaGNpL2NvcmUuYzoxMzg6XHRcdHNrYl9wdWxsKHNrYiwgTkZDX0hDSV9IQ1BfUEFDS0VUX0hFQURFUl9MRU4pO1xubmV0L25mYy9oY2kvY29yZS5jLTEzOS1cdFx0bWVzc2FnZSA9IChzdHJ1Y3QgaGNwX21lc3NhZ2UgKilza2ItXHUwMDNlZGF0YTtcbi0tXG5uZXQvbmZjL2hjaS9jb3JlLmMtMTQxLVx0XHRpbnN0cnVjdGlvbiA9IEhDUF9NU0dfR0VUX0NNRChtZXNzYWdlLVx1MDAzZWhlYWRlcik7XG5uZXQvbmZjL2hjaS9jb3JlLmM6MTQyOlx0XHRza2JfcHVsbChza2IsIE5GQ19IQ0lfSENQX01FU1NBR0VfSEVBREVSX0xFTik7XG5uZXQvbmZjL2hjaS9jb3JlLmMtMTQzLVxuLS1cbm5ldC9uZmMvaGNpL2NvcmUuYz0xODE9dm9pZCBuZmNfaGNpX2NtZF9yZWNlaXZlZChzdHJ1Y3QgbmZjX2hjaV9kZXYgKmhkZXYsIHU4IHBpcGUsIHU4IGNtZCxcbi0tXG5uZXQvbmZjL2hjaS9jb3JlLmMtMTgzLXtcbm5ldC9uZmMvaGNpL2NvcmUuYzoxODQ6XHR1OCBzdGF0dXMgPSBORkNfSENJX0FOWV9PSztcbm5ldC9uZmMvaGNpL2NvcmUuYy0xODUtXHRjb25zdCBzdHJ1Y3QgaGNpX2NyZWF0ZV9waXBlX3Jlc3AgKmNyZWF0ZV9pbmZvO1xuLS1cbm5ldC9uZmMvaGNpL2NvcmUuYy0xOTEtXG5uZXQvbmZjL2hjaS9jb3JlLmM6MTkyOlx0aWYgKHBpcGUgXHUwMDNlPSBORkNfSENJX01BWF9QSVBFUykge1xubmV0L25mYy9oY2kvY29yZS5jOjE5MzpcdFx0c3RhdHVzID0gTkZDX0hDSV9BTllfRV9OT0s7XG5uZXQvbmZjL2hjaS9jb3JlLmMtMTk0LVx0XHRnb3RvIGV4aXQ7XG4tLVxubmV0L25mYy9oY2kvY29yZS5jLTE5OS1cdHN3aXRjaCAoY21kKSB7XG5uZXQvbmZjL2hjaS9jb3JlLmM6MjAwOlx0Y2FzZSBORkNfSENJX0FETV9OT1RJRllfUElQRV9DUkVBVEVEOlxubmV0L25mYy9oY2kvY29yZS5jLTIwMS1cdFx0aWYgKHNrYi1cdTAwM2VsZW4gIT0gNSkge1xubmV0L25mYy9oY2kvY29yZS5jOjIwMjpcdFx0XHRzdGF0dXMgPSBORkNfSENJX0FOWV9FX05PSztcbm5ldC9uZmMvaGNpL2NvcmUuYy0yMDMtXHRcdFx0Z290byBleGl0O1xuLS1cbm5ldC9uZmMvaGNpL2NvcmUuYy0yMDYtXG5uZXQvbmZjL2hjaS9jb3JlLmM6MjA3Olx0XHRpZiAoY3JlYXRlX2luZm8tXHUwMDNlcGlwZSBcdTAwM2U9IE5GQ19IQ0lfTUFYX1BJUEVTKSB7XG5uZXQvbmZjL2hjaS9jb3JlLmM6MjA4Olx0XHRcdHN0YXR1cyA9IE5GQ19IQ0lfQU5ZX0VfTk9LO1xubmV0L25mYy9oY2kvY29yZS5jLTIwOS1cdFx0XHRnb3RvIGV4aXQ7XG4tLVxubmV0L25mYy9oY2kvY29yZS5jLTIyMS1cdFx0YnJlYWs7XG5uZXQvbmZjL2hjaS9jb3JlLmM6MjIyOlx0Y2FzZSBORkNfSENJX0FOWV9PUEVOX1BJUEU6XG5uZXQvbmZjL2hjaS9jb3JlLmM6MjIzOlx0XHRpZiAoZ2F0ZSA9PSBORkNfSENJX0lOVkFMSURfR0FURSkge1xubmV0L25mYy9oY2kvY29yZS5jOjIyNDpcdFx0XHRzdGF0dXMgPSBORkNfSENJX0FOWV9FX05PSztcbm5ldC9uZmMvaGNpL2NvcmUuYy0yMjUtXHRcdFx0Z290byBleGl0O1xuLS1cbm5ldC9uZmMvaGNpL2NvcmUuYy0yMjctXHRcdGJyZWFrO1xubmV0L25mYy9oY2kvY29yZS5jOjIyODpcdGNhc2UgTkZDX0hDSV9BRE1fTk9USUZZX1BJUEVfREVMRVRFRDpcbm5ldC9uZmMvaGNpL2NvcmUuYy0yMjktXHRcdGlmIChza2ItXHUwMDNlbGVuICE9IDEpIHtcbm5ldC9uZmMvaGNpL2NvcmUuYzoyMzA6XHRcdFx0c3RhdHVzID0gTkZDX0hDSV9BTllfRV9OT0s7XG5uZXQvbmZjL2hjaS9jb3JlLmMtMjMxLVx0XHRcdGdvdG8gZXhpdDtcbi0tXG5uZXQvbmZjL2hjaS9jb3JlLmMtMjM0LVxubmV0L25mYy9oY2kvY29yZS5jOjIzNTpcdFx0aWYgKGRlbGV0ZV9pbmZvLVx1MDAzZXBpcGUgXHUwMDNlPSBORkNfSENJX01BWF9QSVBFUykge1xubmV0L25mYy9oY2kvY29yZS5jOjIzNjpcdFx0XHRzdGF0dXMgPSBORkNfSENJX0FOWV9FX05PSztcbm5ldC9uZmMvaGNpL2NvcmUuYy0yMzctXHRcdFx0Z290byBleGl0O1xuLS1cbm5ldC9uZmMvaGNpL2NvcmUuYy0yMzktXG5uZXQvbmZjL2hjaS9jb3JlLmM6MjQwOlx0XHRoZGV2LVx1MDAzZXBpcGVzW2RlbGV0ZV9pbmZvLVx1MDAzZXBpcGVdLmdhdGUgPSBORkNfSENJX0lOVkFMSURfR0FURTtcbm5ldC9uZmMvaGNpL2NvcmUuYzoyNDE6XHRcdGhkZXYtXHUwMDNlcGlwZXNbZGVsZXRlX2luZm8tXHUwMDNlcGlwZV0uZGVzdF9ob3N0ID0gTkZDX0hDSV9JTlZBTElEX0hPU1Q7XG5uZXQvbmZjL2hjaS9jb3JlLmMtMjQyLVx0XHRicmVhaztcbm5ldC9uZmMvaGNpL2NvcmUuYzoyNDM6XHRjYXNlIE5GQ19IQ0lfQURNX05PVElGWV9BTExfUElQRV9DTEVBUkVEOlxubmV0L25mYy9oY2kvY29yZS5jLTI0NC1cdFx0aWYgKHNrYi1cdTAwM2VsZW4gIT0gMSkge1xubmV0L25mYy9oY2kvY29yZS5jOjI0NTpcdFx0XHRzdGF0dXMgPSBORkNfSENJX0FOWV9FX05PSztcbm5ldC9uZmMvaGNpL2NvcmUuYy0yNDYtXHRcdFx0Z290byBleGl0O1xuLS1cbm5ldC9uZmMvaGNpL2NvcmUuYy0yNjAtZXhpdDpcbm5ldC9uZmMvaGNpL2NvcmUuYzoyNjE6XHRuZmNfaGNpX2hjcF9tZXNzYWdlX3R4KGhkZXYsIHBpcGUsIE5GQ19IQ0lfSENQX1JFU1BPTlNFLFxubmV0L25mYy9oY2kvY29yZS5jLTI2Mi1cdFx0XHQgICAgICAgc3RhdHVzLCBOVUxMLCAwLCBOVUxMLCBOVUxMLCAwKTtcbi0tXG5uZXQvbmZjL2hjaS9jb3JlLmM9MjY3PXUzMiBuZmNfaGNpX3Nha190b19wcm90b2NvbCh1OCBzYWspXG5uZXQvbmZjL2hjaS9jb3JlLmMtMjY4LXtcbm5ldC9uZmMvaGNpL2NvcmUuYzoyNjk6XHRzd2l0Y2ggKE5GQ19IQ0lfVFlQRV9BX1NFTF9QUk9UKHNhaykpIHtcbm5ldC9uZmMvaGNpL2NvcmUuYzoyNzA6XHRjYXNlIE5GQ19IQ0lfVFlQRV9BX1NFTF9QUk9UX01JRkFSRTpcbm5ldC9uZmMvaGNpL2NvcmUuYy0yNzEtXHRcdHJldHVybiBORkNfUFJPVE9fTUlGQVJFX01BU0s7XG5uZXQvbmZjL2hjaS9jb3JlLmM6MjcyOlx0Y2FzZSBORkNfSENJX1RZUEVfQV9TRUxfUFJPVF9JU08xNDQ0Mzpcbm5ldC9uZmMvaGNpL2NvcmUuYy0yNzMtXHRcdHJldHVybiBORkNfUFJPVE9fSVNPMTQ0NDNfTUFTSztcbm5ldC9uZmMvaGNpL2NvcmUuYzoyNzQ6XHRjYXNlIE5GQ19IQ0lfVFlQRV9BX1NFTF9QUk9UX0RFUDpcbm5ldC9uZmMvaGNpL2NvcmUuYy0yNzUtXHRcdHJldHVybiBORkNfUFJPVE9fTkZDX0RFUF9NQVNLO1xubmV0L25mYy9oY2kvY29yZS5jOjI3NjpcdGNhc2UgTkZDX0hDSV9UWVBFX0FfU0VMX1BST1RfSVNPMTQ0NDNfREVQOlxubmV0L25mYy9oY2kvY29yZS5jLTI3Ny1cdFx0cmV0dXJuIE5GQ19QUk9UT19JU08xNDQ0M19NQVNLIHwgTkZDX1BST1RPX05GQ19ERVBfTUFTSztcbi0tXG5uZXQvbmZjL2hjaS9jb3JlLmM9Mjg0PWludCBuZmNfaGNpX3RhcmdldF9kaXNjb3ZlcmVkKHN0cnVjdCBuZmNfaGNpX2RldiAqaGRldiwgdTggZ2F0ZSlcbi0tXG5uZXQvbmZjL2hjaS9jb3JlLmMtMjk4LVx0c3dpdGNoIChnYXRlKSB7XG5uZXQvbmZjL2hjaS9jb3JlLmM6Mjk5Olx0Y2FzZSBORkNfSENJX1JGX1JFQURFUl9BX0dBVEU6XG5uZXQvbmZjL2hjaS9jb3JlLmM6MzAwOlx0XHRyID0gbmZjX2hjaV9nZXRfcGFyYW0oaGRldiwgTkZDX0hDSV9SRl9SRUFERVJfQV9HQVRFLFxubmV0L25mYy9oY2kvY29yZS5jOjMwMTpcdFx0XHRcdCAgICAgIE5GQ19IQ0lfUkZfUkVBREVSX0FfQVRRQSwgXHUwMDI2YXRxYV9za2IpO1xubmV0L25mYy9oY2kvY29yZS5jLTMwMi1cdFx0aWYgKHIgXHUwMDNjIDApXG4tLVxubmV0L25mYy9oY2kvY29yZS5jLTMwNC1cbm5ldC9uZmMvaGNpL2NvcmUuYzozMDU6XHRcdHIgPSBuZmNfaGNpX2dldF9wYXJhbShoZGV2LCBORkNfSENJX1JGX1JFQURFUl9BX0dBVEUsXG5uZXQvbmZjL2hjaS9jb3JlLmM6MzA2Olx0XHRcdFx0ICAgICAgTkZDX0hDSV9SRl9SRUFERVJfQV9TQUssIFx1MDAyNnNha19za2IpO1xubmV0L25mYy9oY2kvY29yZS5jLTMwNy1cdFx0aWYgKHIgXHUwMDNjIDApXG4tLVxubmV0L25mYy9oY2kvY29yZS5jLTMyNC1cbm5ldC9uZmMvaGNpL2NvcmUuYzozMjU6XHRcdHIgPSBuZmNfaGNpX2dldF9wYXJhbShoZGV2LCBORkNfSENJX1JGX1JFQURFUl9BX0dBVEUsXG5uZXQvbmZjL2hjaS9jb3JlLmM6MzI2Olx0XHRcdFx0ICAgICAgTkZDX0hDSV9SRl9SRUFERVJfQV9VSUQsIFx1MDAyNnVpZF9za2IpO1xubmV0L25mYy9oY2kvY29yZS5jLTMyNy1cdFx0aWYgKHIgXHUwMDNjIDApXG4tLVxubmV0L25mYy9oY2kvY29yZS5jLTM0NC1cdFx0YnJlYWs7XG5uZXQvbmZjL2hjaS9jb3JlLmM6MzQ1Olx0Y2FzZSBORkNfSENJX1JGX1JFQURFUl9CX0dBVEU6XG5uZXQvbmZjL2hjaS9jb3JlLmMtMzQ2LVx0XHR0YXJnZXRzLVx1MDAzZXN1cHBvcnRlZF9wcm90b2NvbHMgPSBORkNfUFJPVE9fSVNPMTQ0NDNfQl9NQVNLO1xuLS1cbm5ldC9uZmMvaGNpL2NvcmUuYz0zODE9dm9pZCBuZmNfaGNpX2V2ZW50X3JlY2VpdmVkKHN0cnVjdCBuZmNfaGNpX2RldiAqaGRldiwgdTggcGlwZSwgdTggZXZlbnQsXG4tLVxubmV0L25mYy9oY2kvY29yZS5jLTM4Ni1cbm5ldC9uZmMvaGNpL2NvcmUuYzozODc6XHRpZiAocGlwZSBcdTAwM2U9IE5GQ19IQ0lfTUFYX1BJUEVTKSB7XG5uZXQvbmZjL2hjaS9jb3JlLmMtMzg4LVx0XHRwcl9lcnIoXCYjMzQ7RGlzY2FyZGVkIGV2ZW50ICV4IHRvIGludmFsaWQgcGlwZSAleFxcblwmIzM0OywgZXZlbnQsIHBpcGUpO1xuLS1cbm5ldC9uZmMvaGNpL2NvcmUuYy0zOTItXHRnYXRlID0gaGRldi1cdTAwM2VwaXBlc1twaXBlXS5nYXRlO1xubmV0L25mYy9oY2kvY29yZS5jOjM5MzpcdGlmIChnYXRlID09IE5GQ19IQ0lfSU5WQUxJRF9HQVRFKSB7XG5uZXQvbmZjL2hjaS9jb3JlLmMtMzk0LVx0XHRwcl9lcnIoXCYjMzQ7RGlzY2FyZGVkIGV2ZW50ICV4IHRvIHVub3BlbmVkIHBpcGUgJXhcXG5cJiMzNDssIGV2ZW50LCBwaXBlKTtcbi0tXG5uZXQvbmZjL2hjaS9jb3JlLmMtNDA0LVx0c3dpdGNoIChldmVudCkge1xubmV0L25mYy9oY2kvY29yZS5jOjQwNTpcdGNhc2UgTkZDX0hDSV9FVlRfVEFSR0VUX0RJU0NPVkVSRUQ6XG5uZXQvbmZjL2hjaS9jb3JlLmMtNDA2LVx0XHRpZiAoc2tiLVx1MDAzZWxlbiBcdTAwM2MgMSkge1x0Lyogbm8gc3RhdHVzIGRhdGE/ICovXG4tLVxubmV0L25mYy9oY2kvY29yZS5jPTQ0OT1zdGF0aWMgaW50IGhjaV9kZXZfY29ubmVjdF9nYXRlcyhzdHJ1Y3QgbmZjX2hjaV9kZXYgKmhkZXYsIHU4IGdhdGVfY291bnQsXG4tLVxubmV0L25mYy9oY2kvY29yZS5jLTQ1My1cdHdoaWxlIChnYXRlX2NvdW50LS0pIHtcbm5ldC9uZmMvaGNpL2NvcmUuYzo0NTQ6XHRcdHIgPSBuZmNfaGNpX2Nvbm5lY3RfZ2F0ZShoZGV2LCBORkNfSENJX0hPU1RfQ09OVFJPTExFUl9JRCxcbm5ldC9uZmMvaGNpL2NvcmUuYy00NTUtXHRcdFx0XHRcdCBnYXRlcy1cdTAwM2VnYXRlLCBnYXRlcy1cdTAwM2VwaXBlKTtcbi0tXG5uZXQvbmZjL2hjaS9jb3JlLmM9NDY0PXN0YXRpYyBpbnQgaGNpX2Rldl9zZXNzaW9uX2luaXQoc3RydWN0IG5mY19oY2lfZGV2ICpoZGV2KVxuLS1cbm5ldC9uZmMvaGNpL2NvcmUuYy00NjgtXG5uZXQvbmZjL2hjaS9jb3JlLmM6NDY5Olx0aWYgKGhkZXYtXHUwMDNlaW5pdF9kYXRhLmdhdGVzWzBdLmdhdGUgIT0gTkZDX0hDSV9BRE1JTl9HQVRFKVxubmV0L25mYy9oY2kvY29yZS5jLTQ3MC1cdFx0cmV0dXJuIC1FUFJPVE87XG5uZXQvbmZjL2hjaS9jb3JlLmMtNDcxLVxubmV0L25mYy9oY2kvY29yZS5jOjQ3MjpcdHIgPSBuZmNfaGNpX2Nvbm5lY3RfZ2F0ZShoZGV2LCBORkNfSENJX0hPU1RfQ09OVFJPTExFUl9JRCxcbm5ldC9uZmMvaGNpL2NvcmUuYy00NzMtXHRcdFx0XHQgaGRldi1cdTAwM2Vpbml0X2RhdGEuZ2F0ZXNbMF0uZ2F0ZSxcbi0tXG5uZXQvbmZjL2hjaS9jb3JlLmMtNDc3LVxubmV0L25mYy9oY2kvY29yZS5jOjQ3ODpcdHIgPSBuZmNfaGNpX2dldF9wYXJhbShoZGV2LCBORkNfSENJX0FETUlOX0dBVEUsXG5uZXQvbmZjL2hjaS9jb3JlLmM6NDc5Olx0XHRcdCAgICAgIE5GQ19IQ0lfQURNSU5fU0VTU0lPTl9JREVOVElUWSwgXHUwMDI2c2tiKTtcbm5ldC9uZmMvaGNpL2NvcmUuYy00ODAtXHRpZiAociBcdTAwM2MgMClcbi0tXG5uZXQvbmZjL2hjaS9jb3JlLmMtNTAyLVxubmV0L25mYy9oY2kvY29yZS5jOjUwMzpcdFx0ciA9IG5mY19oY2lfc2V0X3BhcmFtKGhkZXYsIE5GQ19IQ0lfQURNSU5fR0FURSxcbm5ldC9uZmMvaGNpL2NvcmUuYzo1MDQ6XHRcdFx0XHRORkNfSENJX0FETUlOX1NFU1NJT05fSURFTlRJVFksXG5uZXQvbmZjL2hjaS9jb3JlLmMtNTA1LVx0XHRcdFx0aGRldi1cdTAwM2Vpbml0X2RhdGEuc2Vzc2lvbl9pZCxcbi0tXG5uZXQvbmZjL2hjaS9jb3JlLmM9NTIwPXN0YXRpYyBpbnQgaGNpX2Rldl92ZXJzaW9uKHN0cnVjdCBuZmNfaGNpX2RldiAqaGRldilcbi0tXG5uZXQvbmZjL2hjaS9jb3JlLmMtNTI0LVxubmV0L25mYy9oY2kvY29yZS5jOjUyNTpcdHIgPSBuZmNfaGNpX2dldF9wYXJhbShoZGV2LCBORkNfSENJX0lEX01HTVRfR0FURSxcbm5ldC9uZmMvaGNpL2NvcmUuYzo1MjY6XHRcdFx0ICAgICAgTkZDX0hDSV9JRF9NR01UX1ZFUlNJT05fU1csIFx1MDAyNnNrYik7XG5uZXQvbmZjL2hjaS9jb3JlLmMtNTI3LVx0aWYgKHIgPT0gLUVPUE5PVFNVUFApIHtcbi0tXG5uZXQvbmZjL2hjaS9jb3JlLmMtNTQ1LVxubmV0L25mYy9oY2kvY29yZS5jOjU0NjpcdHIgPSBuZmNfaGNpX2dldF9wYXJhbShoZGV2LCBORkNfSENJX0lEX01HTVRfR0FURSxcbm5ldC9uZmMvaGNpL2NvcmUuYzo1NDc6XHRcdFx0ICAgICAgTkZDX0hDSV9JRF9NR01UX1ZFUlNJT05fSFcsIFx1MDAyNnNrYik7XG5uZXQvbmZjL2hjaS9jb3JlLmMtNTQ4LVx0aWYgKHIgXHUwMDNjIDApXG4tLVxubmV0L25mYy9oY2kvY29yZS5jPTU3OT1zdGF0aWMgaW50IGhjaV9kZXZfdXAoc3RydWN0IG5mY19kZXYgKm5mY19kZXYpXG4tLVxubmV0L25mYy9oY2kvY29yZS5jLTU5Ny1cbm5ldC9uZmMvaGNpL2NvcmUuYzo1OTg6XHRyID0gbmZjX2hjaV9zZW5kX2V2ZW50KGhkZXYsIE5GQ19IQ0lfUkZfUkVBREVSX0FfR0FURSxcbm5ldC9uZmMvaGNpL2NvcmUuYzo1OTk6XHRcdFx0ICAgICAgIE5GQ19IQ0lfRVZUX0VORF9PUEVSQVRJT04sIE5VTEwsIDApO1xubmV0L25mYy9oY2kvY29yZS5jLTYwMC1cdGlmIChyIFx1MDAzYyAwKVxuLS1cbm5ldC9uZmMvaGNpL2NvcmUuYz02Mzk9c3RhdGljIGludCBoY2lfc3RhcnRfcG9sbChzdHJ1Y3QgbmZjX2RldiAqbmZjX2Rldixcbi0tXG5uZXQvbmZjL2hjaS9jb3JlLmMtNjQ2LVx0ZWxzZVxubmV0L25mYy9oY2kvY29yZS5jOjY0NzpcdFx0cmV0dXJuIG5mY19oY2lfc2VuZF9ldmVudChoZGV2LCBORkNfSENJX1JGX1JFQURFUl9BX0dBVEUsXG5uZXQvbmZjL2hjaS9jb3JlLmM6NjQ4Olx0XHRcdFx0XHQgIE5GQ19IQ0lfRVZUX1JFQURFUl9SRVFVRVNURUQsXG5uZXQvbmZjL2hjaS9jb3JlLmMtNjQ5LVx0XHRcdFx0XHQgIE5VTEwsIDApO1xuLS1cbm5ldC9uZmMvaGNpL2NvcmUuYz02NTI9c3RhdGljIHZvaWQgaGNpX3N0b3BfcG9sbChzdHJ1Y3QgbmZjX2RldiAqbmZjX2Rldilcbi0tXG5uZXQvbmZjL2hjaS9jb3JlLmMtNjU4LVx0ZWxzZVxubmV0L25mYy9oY2kvY29yZS5jOjY1OTpcdFx0bmZjX2hjaV9zZW5kX2V2ZW50KGhkZXYsIE5GQ19IQ0lfUkZfUkVBREVSX0FfR0FURSxcbm5ldC9uZmMvaGNpL2NvcmUuYzo2NjA6XHRcdFx0XHQgICBORkNfSENJX0VWVF9FTkRfT1BFUkFUSU9OLCBOVUxMLCAwKTtcbm5ldC9uZmMvaGNpL2NvcmUuYy02NjEtfVxuLS1cbm5ldC9uZmMvaGNpL2NvcmUuYz03MjI9c3RhdGljIGludCBoY2lfdHJhbnNjZWl2ZShzdHJ1Y3QgbmZjX2RldiAqbmZjX2Rldiwgc3RydWN0IG5mY190YXJnZXQgKnRhcmdldCxcbi0tXG5uZXQvbmZjL2hjaS9jb3JlLmMtNzMxLVx0c3dpdGNoICh0YXJnZXQtXHUwMDNlaGNpX3JlYWRlcl9nYXRlKSB7XG5uZXQvbmZjL2hjaS9jb3JlLmM6NzMyOlx0Y2FzZSBORkNfSENJX1JGX1JFQURFUl9BX0dBVEU6XG5uZXQvbmZjL2hjaS9jb3JlLmM6NzMzOlx0Y2FzZSBORkNfSENJX1JGX1JFQURFUl9CX0dBVEU6XG5uZXQvbmZjL2hjaS9jb3JlLmMtNzM0LVx0XHRpZiAoaGRldi1cdTAwM2VvcHMtXHUwMDNlaW1fdHJhbnNjZWl2ZSkge1xuLS1cbm5ldC9uZmMvaGNpL2NvcmUuYy03NDctXHRcdHIgPSBuZmNfaGNpX3NlbmRfY21kX2FzeW5jKGhkZXYsIHRhcmdldC1cdTAwM2VoY2lfcmVhZGVyX2dhdGUsXG5uZXQvbmZjL2hjaS9jb3JlLmM6NzQ4Olx0XHRcdFx0XHQgICBORkNfSENJX1dSX1hDSEdfREFUQSwgc2tiLVx1MDAzZWRhdGEsXG5uZXQvbmZjL2hjaS9jb3JlLmMtNzQ5LVx0XHRcdFx0XHQgICBza2ItXHUwMDNlbGVuLCBoY2lfdHJhbnNjZWl2ZV9jYiwgaGRldik7XG4tLVxubmV0L25mYy9oY2kvY29yZS5jPTg1ND1zdGF0aWMgdm9pZCBuZmNfaGNpX3JlY3ZfZnJvbV9sbGMoc3RydWN0IG5mY19oY2lfZGV2ICpoZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9uZmMvaGNpL2NvcmUuYy04NjMtXG5uZXQvbmZjL2hjaS9jb3JlLmM6ODY0Olx0aWYgKCFwc2tiX21heV9wdWxsKHNrYiwgTkZDX0hDSV9IQ1BfUEFDS0VUX0hFQURFUl9MRU4pKSB7XG5uZXQvbmZjL2hjaS9jb3JlLmMtODY1LVx0XHRrZnJlZV9za2Ioc2tiKTtcbi0tXG5uZXQvbmZjL2hjaS9jb3JlLmMtODY5LVx0cGFja2V0ID0gKHN0cnVjdCBoY3BfcGFja2V0ICopc2tiLVx1MDAzZWRhdGE7XG5uZXQvbmZjL2hjaS9jb3JlLmM6ODcwOlx0aWYgKChwYWNrZXQtXHUwMDNlaGVhZGVyIFx1MDAyNiB+TkZDX0hDSV9GUkFHTUVOVCkgPT0gMCkge1xubmV0L25mYy9oY2kvY29yZS5jLTg3MS1cdFx0c2tiX3F1ZXVlX3RhaWwoXHUwMDI2aGRldi1cdTAwM2VyeF9oY3BfZnJhZ3MsIHNrYik7XG4tLVxubmV0L25mYy9oY2kvY29yZS5jLTg3Ni1cdGlmIChza2JfcXVldWVfbGVuKFx1MDAyNmhkZXYtXHUwMDNlcnhfaGNwX2ZyYWdzKSkge1xubmV0L25mYy9oY2kvY29yZS5jOjg3NzpcdFx0cGlwZSA9IHBhY2tldC1cdTAwM2VoZWFkZXIgXHUwMDI2IE5GQ19IQ0lfRlJBR01FTlQ7XG5uZXQvbmZjL2hjaS9jb3JlLmMtODc4LVx0XHRza2JfcXVldWVfdGFpbChcdTAwMjZoZGV2LVx1MDAzZXJ4X2hjcF9mcmFncywgc2tiKTtcbi0tXG5uZXQvbmZjL2hjaS9jb3JlLmMtODgyLVx0XHRcdG1zZ19sZW4gJiM0Mzs9IChmcmFnX3NrYi1cdTAwM2VsZW4gLVxubmV0L25mYy9oY2kvY29yZS5jOjg4MzpcdFx0XHRcdCAgICBORkNfSENJX0hDUF9QQUNLRVRfSEVBREVSX0xFTik7XG5uZXQvbmZjL2hjaS9jb3JlLmMtODg0LVx0XHR9XG5uZXQvbmZjL2hjaS9jb3JlLmMtODg1LVxubmV0L25mYy9oY2kvY29yZS5jOjg4NjpcdFx0aGNwX3NrYiA9IG5mY19hbGxvY19yZWN2X3NrYihORkNfSENJX0hDUF9QQUNLRVRfSEVBREVSX0xFTiAmIzQzO1xubmV0L25mYy9oY2kvY29yZS5jLTg4Ny1cdFx0XHRcdFx0ICAgICBtc2dfbGVuLCBHRlBfS0VSTkVMKTtcbi0tXG5uZXQvbmZjL2hjaS9jb3JlLmMtODk1LVx0XHRza2JfcXVldWVfd2FsayhcdTAwMjZoZGV2LVx1MDAzZXJ4X2hjcF9mcmFncywgZnJhZ19za2IpIHtcbm5ldC9uZmMvaGNpL2NvcmUuYzo4OTY6XHRcdFx0bXNnX2xlbiA9IGZyYWdfc2tiLVx1MDAzZWxlbiAtIE5GQ19IQ0lfSENQX1BBQ0tFVF9IRUFERVJfTEVOO1xubmV0L25mYy9oY2kvY29yZS5jLTg5Ny1cdFx0XHRza2JfcHV0X2RhdGEoaGNwX3NrYixcbm5ldC9uZmMvaGNpL2NvcmUuYzo4OTg6XHRcdFx0XHQgICAgIGZyYWdfc2tiLVx1MDAzZWRhdGEgJiM0MzsgTkZDX0hDSV9IQ1BfUEFDS0VUX0hFQURFUl9MRU4sXG5uZXQvbmZjL2hjaS9jb3JlLmMtODk5LVx0XHRcdFx0ICAgICBtc2dfbGVuKTtcbi0tXG5uZXQvbmZjL2hjaS9jb3JlLmMtOTAzLVx0fSBlbHNlIHtcbm5ldC9uZmMvaGNpL2NvcmUuYzo5MDQ6XHRcdHBhY2tldC1cdTAwM2VoZWFkZXIgXHUwMDI2PSBORkNfSENJX0ZSQUdNRU5UO1xubmV0L25mYy9oY2kvY29yZS5jLTkwNS1cdFx0aGNwX3NrYiA9IHNrYjtcbi0tXG5uZXQvbmZjL2hjaS9jb3JlLmMtOTExLVx0ICovXG5uZXQvbmZjL2hjaS9jb3JlLmM6OTEyOlx0aWYgKCFwc2tiX21heV9wdWxsKGhjcF9za2IsIE5GQ19IQ0lfSENQX0hFQURFUl9MRU4pKSB7XG5uZXQvbmZjL2hjaS9jb3JlLmMtOTEzLVx0XHRrZnJlZV9za2IoaGNwX3NrYik7XG4tLVxubmV0L25mYy9oY2kvY29yZS5jLTkxOC1cdHR5cGUgPSBIQ1BfTVNHX0dFVF9UWVBFKHBhY2tldC1cdTAwM2VtZXNzYWdlLmhlYWRlcik7XG5uZXQvbmZjL2hjaS9jb3JlLmM6OTE5Olx0aWYgKHR5cGUgPT0gTkZDX0hDSV9IQ1BfUkVTUE9OU0UpIHtcbm5ldC9uZmMvaGNpL2NvcmUuYy05MjAtXHRcdHBpcGUgPSBwYWNrZXQtXHUwMDNlaGVhZGVyO1xubmV0L25mYy9oY2kvY29yZS5jLTkyMS1cdFx0aW5zdHJ1Y3Rpb24gPSBIQ1BfTVNHX0dFVF9DTUQocGFja2V0LVx1MDAzZW1lc3NhZ2UuaGVhZGVyKTtcbm5ldC9uZmMvaGNpL2NvcmUuYzo5MjI6XHRcdHNrYl9wdWxsKGhjcF9za2IsIE5GQ19IQ0lfSENQX1BBQ0tFVF9IRUFERVJfTEVOICYjNDM7XG5uZXQvbmZjL2hjaS9jb3JlLmM6OTIzOlx0XHRcdCBORkNfSENJX0hDUF9NRVNTQUdFX0hFQURFUl9MRU4pO1xubmV0L25mYy9oY2kvY29yZS5jLTkyNC1cdFx0bmZjX2hjaV9oY3BfbWVzc2FnZV9yeChoZGV2LCBwaXBlLCB0eXBlLCBpbnN0cnVjdGlvbiwgaGNwX3NrYik7XG4tLVxubmV0L25mYy9oY2kvaGNpLmg9NjA9c3RydWN0IGhjaV9hbGxfcGlwZV9jbGVhcmVkX25vdGkge1xuLS1cbm5ldC9uZmMvaGNpL2hjaS5oLTYzLVxubmV0L25mYy9oY2kvaGNpLmg6NjQ6I2RlZmluZSBORkNfSENJX0ZSQUdNRU5UXHQweDdmXG5uZXQvbmZjL2hjaS9oY2kuaC02NS1cbi0tXG5uZXQvbmZjL2hjaS9oY2kuaD03Nj12b2lkIG5mY19oY2lfaGNwX21lc3NhZ2Vfcngoc3RydWN0IG5mY19oY2lfZGV2ICpoZGV2LCB1OCBwaXBlLCB1OCB0eXBlLFxuLS1cbm5ldC9uZmMvaGNpL2hjaS5oLTc5LS8qIEhDUCBoZWFkZXJzICovXG5uZXQvbmZjL2hjaS9oY2kuaDo4MDojZGVmaW5lIE5GQ19IQ0lfSENQX1BBQ0tFVF9IRUFERVJfTEVOXHQxXG5uZXQvbmZjL2hjaS9oY2kuaDo4MTojZGVmaW5lIE5GQ19IQ0lfSENQX01FU1NBR0VfSEVBREVSX0xFTlx0MVxubmV0L25mYy9oY2kvaGNpLmg6ODI6I2RlZmluZSBORkNfSENJX0hDUF9IRUFERVJfTEVOXHRcdDJcbm5ldC9uZmMvaGNpL2hjaS5oLTgzLVxubmV0L25mYy9oY2kvaGNpLmgtODQtLyogSENQIHR5cGVzICovXG5uZXQvbmZjL2hjaS9oY2kuaDo4NTojZGVmaW5lIE5GQ19IQ0lfSENQX0NPTU1BTkRcdDB4MDBcbm5ldC9uZmMvaGNpL2hjaS5oOjg2OiNkZWZpbmUgTkZDX0hDSV9IQ1BfRVZFTlRcdDB4MDFcbm5ldC9uZmMvaGNpL2hjaS5oOjg3OiNkZWZpbmUgTkZDX0hDSV9IQ1BfUkVTUE9OU0VcdDB4MDJcbm5ldC9uZmMvaGNpL2hjaS5oLTg4LVxubmV0L25mYy9oY2kvaGNpLmgtODktLyogR2VuZXJpYyBjb21tYW5kcyAqL1xubmV0L25mYy9oY2kvaGNpLmg6OTA6I2RlZmluZSBORkNfSENJX0FOWV9TRVRfUEFSQU1FVEVSXHQweDAxXG5uZXQvbmZjL2hjaS9oY2kuaDo5MTojZGVmaW5lIE5GQ19IQ0lfQU5ZX0dFVF9QQVJBTUVURVJcdDB4MDJcbm5ldC9uZmMvaGNpL2hjaS5oOjkyOiNkZWZpbmUgTkZDX0hDSV9BTllfT1BFTl9QSVBFXHRcdDB4MDNcbm5ldC9uZmMvaGNpL2hjaS5oOjkzOiNkZWZpbmUgTkZDX0hDSV9BTllfQ0xPU0VfUElQRVx0XHQweDA0XG5uZXQvbmZjL2hjaS9oY2kuaC05NC1cbm5ldC9uZmMvaGNpL2hjaS5oLTk1LS8qIFJlYWRlciBSRiBjb21tYW5kcyAqL1xubmV0L25mYy9oY2kvaGNpLmg6OTY6I2RlZmluZSBORkNfSENJX1dSX1hDSEdfREFUQVx0XHQweDEwXG5uZXQvbmZjL2hjaS9oY2kuaC05Ny1cbm5ldC9uZmMvaGNpL2hjaS5oLTk4LS8qIEFkbWluIGNvbW1hbmRzICovXG5uZXQvbmZjL2hjaS9oY2kuaDo5OTojZGVmaW5lIE5GQ19IQ0lfQURNX0NSRUFURV9QSVBFXHRcdFx0MHgxMFxubmV0L25mYy9oY2kvaGNpLmg6MTAwOiNkZWZpbmUgTkZDX0hDSV9BRE1fREVMRVRFX1BJUEVcdFx0XHQweDExXG5uZXQvbmZjL2hjaS9oY2kuaDoxMDE6I2RlZmluZSBORkNfSENJX0FETV9OT1RJRllfUElQRV9DUkVBVEVEXHRcdDB4MTJcbm5ldC9uZmMvaGNpL2hjaS5oOjEwMjojZGVmaW5lIE5GQ19IQ0lfQURNX05PVElGWV9QSVBFX0RFTEVURURcdFx0MHgxM1xubmV0L25mYy9oY2kvaGNpLmg6MTAzOiNkZWZpbmUgTkZDX0hDSV9BRE1fQ0xFQVJfQUxMX1BJUEVcdFx0MHgxNFxubmV0L25mYy9oY2kvaGNpLmg6MTA0OiNkZWZpbmUgTkZDX0hDSV9BRE1fTk9USUZZX0FMTF9QSVBFX0NMRUFSRURcdDB4MTVcbm5ldC9uZmMvaGNpL2hjaS5oLTEwNS1cbm5ldC9uZmMvaGNpL2hjaS5oLTEwNi0vKiBHZW5lcmljIHJlc3BvbnNlcyAqL1xubmV0L25mYy9oY2kvaGNpLmg6MTA3OiNkZWZpbmUgTkZDX0hDSV9BTllfT0tcdFx0XHRcdDB4MDBcbm5ldC9uZmMvaGNpL2hjaS5oOjEwODojZGVmaW5lIE5GQ19IQ0lfQU5ZX0VfTk9UX0NPTk5FQ1RFRFx0XHQweDAxXG5uZXQvbmZjL2hjaS9oY2kuaDoxMDk6I2RlZmluZSBORkNfSENJX0FOWV9FX0NNRF9QQVJfVU5LTk9XTlx0XHQweDAyXG5uZXQvbmZjL2hjaS9oY2kuaDoxMTA6I2RlZmluZSBORkNfSENJX0FOWV9FX05PS1x0XHRcdDB4MDNcbm5ldC9uZmMvaGNpL2hjaS5oOjExMTojZGVmaW5lIE5GQ19IQ0lfQU5ZX0VfUElQRVNfRlVMTFx0XHQweDA0XG5uZXQvbmZjL2hjaS9oY2kuaDoxMTI6I2RlZmluZSBORkNfSENJX0FOWV9FX1JFR19QQVJfVU5LTk9XTlx0XHQweDA1XG5uZXQvbmZjL2hjaS9oY2kuaDoxMTM6I2RlZmluZSBORkNfSENJX0FOWV9FX1BJUEVfTk9UX09QRU5FRFx0XHQweDA2XG5uZXQvbmZjL2hjaS9oY2kuaDoxMTQ6I2RlZmluZSBORkNfSENJX0FOWV9FX0NNRF9OT1RfU1VQUE9SVEVEXHRcdDB4MDdcbm5ldC9uZmMvaGNpL2hjaS5oOjExNTojZGVmaW5lIE5GQ19IQ0lfQU5ZX0VfSU5ISUJJVEVEXHRcdFx0MHgwOFxubmV0L25mYy9oY2kvaGNpLmg6MTE2OiNkZWZpbmUgTkZDX0hDSV9BTllfRV9USU1FT1VUXHRcdFx0MHgwOVxubmV0L25mYy9oY2kvaGNpLmg6MTE3OiNkZWZpbmUgTkZDX0hDSV9BTllfRV9SRUdfQUNDRVNTX0RFTklFRFx0XHQweDBhXG5uZXQvbmZjL2hjaS9oY2kuaDoxMTg6I2RlZmluZSBORkNfSENJX0FOWV9FX1BJUEVfQUNDRVNTX0RFTklFRFx0MHgwYlxubmV0L25mYy9oY2kvaGNpLmgtMTE5LVxuLS1cbm5ldC9uZmMvaGNpL2hjcC5jPTIxPWludCBuZmNfaGNpX2hjcF9tZXNzYWdlX3R4KHN0cnVjdCBuZmNfaGNpX2RldiAqaGRldiwgdTggcGlwZSxcbi0tXG5uZXQvbmZjL2hjaS9oY3AuYy0zOC1cdHNrYl9xdWV1ZV9oZWFkX2luaXQoXHUwMDI2Y21kLVx1MDAzZW1zZ19mcmFncyk7XG5uZXQvbmZjL2hjaS9oY3AuYzozOTpcdGNtZC1cdTAwM2V3YWl0X3Jlc3BvbnNlID0gKHR5cGUgPT0gTkZDX0hDSV9IQ1BfQ09NTUFORCkgPyB0cnVlIDogZmFsc2U7XG5uZXQvbmZjL2hjaS9oY3AuYy00MC1cdGNtZC1cdTAwM2VjYiA9IGNiO1xuLS1cbm5ldC9uZmMvaGNpL2hjcC5jLTQ5LVxubmV0L25mYy9oY2kvaGNwLmM6NTA6XHRcdGlmIChORkNfSENJX0hDUF9QQUNLRVRfSEVBREVSX0xFTiAmIzQzOyBoY2lfbGVuIFx1MDAzYz1cbm5ldC9uZmMvaGNpL2hjcC5jLTUxLVx0XHQgICAgaGRldi1cdTAwM2VtYXhfZGF0YV9saW5rX3BheWxvYWQpXG4tLVxubmV0L25mYy9oY2kvaGNwLmMtNTQtXHRcdFx0ZGF0YV9saW5rX2xlbiA9IGhkZXYtXHUwMDNlbWF4X2RhdGFfbGlua19wYXlsb2FkIC1cbm5ldC9uZmMvaGNpL2hjcC5jOjU1Olx0XHRcdFx0XHRORkNfSENJX0hDUF9QQUNLRVRfSEVBREVSX0xFTjtcbm5ldC9uZmMvaGNpL2hjcC5jLTU2LVxubmV0L25mYy9oY2kvaGNwLmM6NTc6XHRcdHNrYl9sZW4gPSBuZGV2LVx1MDAzZXR4X2hlYWRyb29tICYjNDM7IE5GQ19IQ0lfSENQX1BBQ0tFVF9IRUFERVJfTEVOICYjNDM7XG5uZXQvbmZjL2hjaS9oY3AuYy01OC1cdFx0XHQgIGRhdGFfbGlua19sZW4gJiM0MzsgbmRldi1cdTAwM2V0eF90YWlscm9vbTtcbi0tXG5uZXQvbmZjL2hjaS9oY3AuYy02Ny1cbm5ldC9uZmMvaGNpL2hjcC5jOjY4Olx0XHRza2JfcHV0KHNrYiwgTkZDX0hDSV9IQ1BfUEFDS0VUX0hFQURFUl9MRU4gJiM0MzsgZGF0YV9saW5rX2xlbik7XG5uZXQvbmZjL2hjaS9oY3AuYy02OS1cbi0tXG5uZXQvbmZjL2hjaS9oY3AuYy04NS1cdFx0aWYgKGhjaV9sZW4gPT0gMClcbm5ldC9uZmMvaGNpL2hjcC5jOjg2Olx0XHRcdHBhY2tldC1cdTAwM2VoZWFkZXIgfD0gfk5GQ19IQ0lfRlJBR01FTlQ7XG5uZXQvbmZjL2hjaS9oY3AuYy04Ny1cbi0tXG5uZXQvbmZjL2hjaS9oY3AuYz0xMTc9dm9pZCBuZmNfaGNpX2hjcF9tZXNzYWdlX3J4KHN0cnVjdCBuZmNfaGNpX2RldiAqaGRldiwgdTggcGlwZSwgdTggdHlwZSxcbi0tXG5uZXQvbmZjL2hjaS9oY3AuYy0xMjAtXHRzd2l0Y2ggKHR5cGUpIHtcbm5ldC9uZmMvaGNpL2hjcC5jOjEyMTpcdGNhc2UgTkZDX0hDSV9IQ1BfUkVTUE9OU0U6XG5uZXQvbmZjL2hjaS9oY3AuYy0xMjItXHRcdG5mY19oY2lfcmVzcF9yZWNlaXZlZChoZGV2LCBpbnN0cnVjdGlvbiwgc2tiKTtcbm5ldC9uZmMvaGNpL2hjcC5jLTEyMy1cdFx0YnJlYWs7XG5uZXQvbmZjL2hjaS9oY3AuYzoxMjQ6XHRjYXNlIE5GQ19IQ0lfSENQX0NPTU1BTkQ6XG5uZXQvbmZjL2hjaS9oY3AuYy0xMjUtXHRcdG5mY19oY2lfY21kX3JlY2VpdmVkKGhkZXYsIHBpcGUsIGluc3RydWN0aW9uLCBza2IpO1xubmV0L25mYy9oY2kvaGNwLmMtMTI2LVx0XHRicmVhaztcbm5ldC9uZmMvaGNpL2hjcC5jOjEyNzpcdGNhc2UgTkZDX0hDSV9IQ1BfRVZFTlQ6XG5uZXQvbmZjL2hjaS9oY3AuYy0xMjgtXHRcdG5mY19oY2lfZXZlbnRfcmVjZWl2ZWQoaGRldiwgcGlwZSwgaW5zdHJ1Y3Rpb24sIHNrYik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDA5OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxNzA2CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhlIGV4cGVydDoKCioqTmF2aWdhdGluZyB0aGUgTkZDIFN1YnN5c3RlbXMqKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSBuZWVkIHRvIGNsYXJpZnkgc29tZXRoaW5nIGluIG15IGhlYWQuIEkgaW5pdGlhbGx5IGp1bXBlZCB0byB0aGUgY29uY2x1c2lvbiB0aGF0IGBORkNfSENJYCBhbmQgYE5GQ19OQ0lgIHdlcmUgdGhlIHNhbWUgdGhpbmcsIGJ1dCBpdCBqdXN0IGhpdCBtZSDigJMgdGhleSYjMzk7cmUgZGlzdGluY3Qgc3Vic3lzdGVtcy4gVGhlIHBhdGNoIEkmIzM5O20gZXhhbWluaW5nIGlzIHNwZWNpZmljYWxseSB0b3VjaGluZyBgbmV0L25mYy9uY2kvaGNpLmNgLCBhbmQgdGhhdCBsaXZlcyBmaXJtbHkgd2l0aGluIHRoZSBgTkZDX05DSWAgcmVhbG0uIFRvIGNvbmZpcm0gdGhpcyBpc24mIzM5O3QganVzdCBhIG1lbnRhbCBtb2RlbCBJJiMzOTt2ZSBtYWRlIHVwLCBsZXQgbWUgZG91YmxlLWNoZWNrIHRoZSBgbmV0L25mYy9uY2kvTWFrZWZpbGVgIGFuZCBlbnN1cmUgbXkgYXNzdW1wdGlvbnMgYXJlIHNvdW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAwOToyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtoY2kmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmZjL25jaS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25mYy9uY2kvTWFrZWZpbGU9Nj1vYmotJChDT05GSUdfTkZDX05DSSkgJiM0Mzs9IG5jaS5vXG5uZXQvbmZjL25jaS9NYWtlZmlsZS03LVxubmV0L25mYy9uY2kvTWFrZWZpbGU6ODpuY2ktb2JqcyA6PSBjb3JlLm8gZGF0YS5vIGxpYi5vIG50Zi5vIHJzcC5vIGhjaS5vXG5uZXQvbmZjL25jaS9NYWtlZmlsZS05LVxuLS1cbm5ldC9uZmMvbmNpL2NvcmUuYy0xMS0gKiAgQWNrbm93bGVkZ2VtZW50czpcbm5ldC9uZmMvbmNpL2NvcmUuYzoxMjogKiAgVGhpcyBmaWxlIGlzIGJhc2VkIG9uIGhjaV9jb3JlLmMsIHdoaWNoIHdhcyB3cml0dGVuXG5uZXQvbmZjL25jaS9jb3JlLmMtMTMtICogIGJ5IE1heGltIEtyYXNueWFuc2t5LlxuLS1cbm5ldC9uZmMvbmNpL2NvcmUuYz0xMjA5PXN0cnVjdCBuY2lfZGV2ICpuY2lfYWxsb2NhdGVfZGV2aWNlKGNvbnN0IHN0cnVjdCBuY2lfb3BzICpvcHMsXG4tLVxubmV0L25mYy9uY2kvY29yZS5jLTEyNDUtXG5uZXQvbmZjL25jaS9jb3JlLmM6MTI0NjpcdG5kZXYtXHUwMDNlaGNpX2RldiA9IG5jaV9oY2lfYWxsb2NhdGUobmRldik7XG5uZXQvbmZjL25jaS9jb3JlLmM6MTI0NzpcdGlmICghbmRldi1cdTAwM2VoY2lfZGV2KVxubmV0L25mYy9uY2kvY29yZS5jLTEyNDgtXHRcdGdvdG8gZnJlZV9uZmM7XG4tLVxubmV0L25mYy9uY2kvY29yZS5jPTEyNjc9dm9pZCBuY2lfZnJlZV9kZXZpY2Uoc3RydWN0IG5jaV9kZXYgKm5kZXYpXG4tLVxubmV0L25mYy9uY2kvY29yZS5jLTEyNjktXHRuZmNfZnJlZV9kZXZpY2UobmRldi1cdTAwM2VuZmNfZGV2KTtcbm5ldC9uZmMvbmNpL2NvcmUuYzoxMjcwOlx0bmNpX2hjaV9kZWFsbG9jYXRlKG5kZXYpO1xubmV0L25mYy9uY2kvY29yZS5jLTEyNzEtXG4tLVxubmV0L25mYy9uY2kvY29yZS5jPTEzNTI9dm9pZCBuY2lfdW5yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IG5jaV9kZXYgKm5kZXYpXG4tLVxubmV0L25mYy9uY2kvY29yZS5jLTEzNzQtXHRcdFx0bmRldi1cdTAwM2VyZl9jb25uX2luZm8gPSBOVUxMO1xubmV0L25mYy9uY2kvY29yZS5jOjEzNzU6XHRcdGlmIChjb25uX2luZm8gPT0gbmRldi1cdTAwM2VoY2lfZGV2LVx1MDAzZWNvbm5faW5mbylcbm5ldC9uZmMvbmNpL2NvcmUuYzoxMzc2Olx0XHRcdG5kZXYtXHUwMDNlaGNpX2Rldi1cdTAwM2Vjb25uX2luZm8gPSBOVUxMO1xubmV0L25mYy9uY2kvY29yZS5jLTEzNzctXHRcdC8qIGNvbm5faW5mbyBpcyBhbGxvY2F0ZWQgd2l0aCBkZXZtX2t6YWxsb2MgKi9cbi0tXG5uZXQvbmZjL25jaS9oY2kuYz0xOT1zdHJ1Y3QgbmNpX2RhdGEge1xuLS1cbm5ldC9uZmMvbmNpL2hjaS5jLTI2LVxubmV0L25mYy9uY2kvaGNpLmM6Mjc6c3RydWN0IG5jaV9oY2lfY3JlYXRlX3BpcGVfcGFyYW1zIHtcbm5ldC9uZmMvbmNpL2hjaS5jLTI4LVx0dTggc3JjX2dhdGU7XG4tLVxubmV0L25mYy9uY2kvaGNpLmMtMzItXG5uZXQvbmZjL25jaS9oY2kuYzozMzpzdHJ1Y3QgbmNpX2hjaV9jcmVhdGVfcGlwZV9yZXNwIHtcbm5ldC9uZmMvbmNpL2hjaS5jLTM0LVx0dTggc3JjX2hvc3Q7XG4tLVxubmV0L25mYy9uY2kvaGNpLmMtNDAtXG5uZXQvbmZjL25jaS9oY2kuYzo0MTpzdHJ1Y3QgbmNpX2hjaV9kZWxldGVfcGlwZV9ub3RpIHtcbm5ldC9uZmMvbmNpL2hjaS5jLTQyLVx0dTggcGlwZTtcbi0tXG5uZXQvbmZjL25jaS9oY2kuYy00NC1cbm5ldC9uZmMvbmNpL2hjaS5jOjQ1OnN0cnVjdCBuY2lfaGNpX2FsbF9waXBlX2NsZWFyZWRfbm90aSB7XG5uZXQvbmZjL25jaS9oY2kuYy00Ni1cdHU4IGhvc3Q7XG4tLVxubmV0L25mYy9uY2kvaGNpLmM9NTQ9c3RydWN0IG5jaV9oY3BfcGFja2V0IHtcbi0tXG5uZXQvbmZjL25jaS9oY2kuYy05NS1cbm5ldC9uZmMvbmNpL2hjaS5jOjk2OnN0YXRpYyBpbnQgbmNpX2hjaV9yZXN1bHRfdG9fZXJybm8odTggcmVzdWx0KVxubmV0L25mYy9uY2kvaGNpLmMtOTcte1xuLS1cbm5ldC9uZmMvbmNpL2hjaS5jLTExMC0vKiBIQ0kgY29yZSAqL1xubmV0L25mYy9uY2kvaGNpLmM6MTExOnN0YXRpYyB2b2lkIG5jaV9oY2lfcmVzZXRfcGlwZXMoc3RydWN0IG5jaV9oY2lfZGV2ICpoZGV2KVxubmV0L25mYy9uY2kvaGNpLmMtMTEyLXtcbi0tXG5uZXQvbmZjL25jaS9oY2kuYy0xMjEtXG5uZXQvbmZjL25jaS9oY2kuYzoxMjI6c3RhdGljIHZvaWQgbmNpX2hjaV9yZXNldF9waXBlc19wZXJfaG9zdChzdHJ1Y3QgbmNpX2RldiAqbmRldiwgdTggaG9zdClcbm5ldC9uZmMvbmNpL2hjaS5jLTEyMy17XG4tLVxubmV0L25mYy9uY2kvaGNpLmMtMTI2LVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTkNJX0hDSV9NQVhfUElQRVM7IGkmIzQzOyYjNDM7KSB7XG5uZXQvbmZjL25jaS9oY2kuYzoxMjc6XHRcdGlmIChuZGV2LVx1MDAzZWhjaV9kZXYtXHUwMDNlcGlwZXNbaV0uaG9zdCA9PSBob3N0KSB7XG5uZXQvbmZjL25jaS9oY2kuYzoxMjg6XHRcdFx0bmRldi1cdTAwM2VoY2lfZGV2LVx1MDAzZXBpcGVzW2ldLmdhdGUgPSBOQ0lfSENJX0lOVkFMSURfR0FURTtcbm5ldC9uZmMvbmNpL2hjaS5jOjEyOTpcdFx0XHRuZGV2LVx1MDAzZWhjaV9kZXYtXHUwMDNlcGlwZXNbaV0uaG9zdCA9IE5DSV9IQ0lfSU5WQUxJRF9IT1NUO1xubmV0L25mYy9uY2kvaGNpLmMtMTMwLVx0XHR9XG4tLVxubmV0L25mYy9uY2kvaGNpLmMtMTQxLSAqL1xubmV0L25mYy9uY2kvaGNpLmM6MTQyOnN0YXRpYyBpbnQgbmNpX2hjaV9zZW5kX2RhdGEoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHU4IHBpcGUsXG5uZXQvbmZjL25jaS9oY2kuYy0xNDMtXHRcdFx0ICAgICBjb25zdCB1OCBkYXRhX3R5cGUsIGNvbnN0IHU4ICpkYXRhLFxuLS1cbm5ldC9uZmMvbmNpL2hjaS5jLTE1My1cdHNwaW5fbG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbm5ldC9uZmMvbmNpL2hjaS5jOjE1NDpcdGNvbm5faW5mbyA9IG5kZXYtXHUwMDNlaGNpX2Rldi1cdTAwM2Vjb25uX2luZm87XG5uZXQvbmZjL25jaS9oY2kuYy0xNTUtXHRpZiAoIWNvbm5faW5mbykge1xuLS1cbm5ldC9uZmMvbmNpL2hjaS5jLTIwNC1cbm5ldC9uZmMvbmNpL2hjaS5jOjIwNTpzdGF0aWMgdm9pZCBuY2lfaGNpX3NlbmRfZGF0YV9yZXEoc3RydWN0IG5jaV9kZXYgKm5kZXYsIGNvbnN0IHZvaWQgKm9wdClcbm5ldC9uZmMvbmNpL2hjaS5jLTIwNi17XG4tLVxubmV0L25mYy9uY2kvaGNpLmMtMjA4LVxubmV0L25mYy9uY2kvaGNpLmM6MjA5Olx0bmNpX2hjaV9zZW5kX2RhdGEobmRldiwgZGF0YS1cdTAwM2VwaXBlLCBkYXRhLVx1MDAzZWNtZCxcbm5ldC9uZmMvbmNpL2hjaS5jLTIxMC1cdFx0XHQgIGRhdGEtXHUwMDNlZGF0YSwgZGF0YS1cdTAwM2VkYXRhX2xlbik7XG4tLVxubmV0L25mYy9uY2kvaGNpLmMtMjEyLVxubmV0L25mYy9uY2kvaGNpLmM6MjEzOmludCBuY2lfaGNpX3NlbmRfZXZlbnQoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHU4IGdhdGUsIHU4IGV2ZW50LFxubmV0L25mYy9uY2kvaGNpLmMtMjE0LVx0XHQgICAgICAgY29uc3QgdTggKnBhcmFtLCBzaXplX3QgcGFyYW1fbGVuKVxubmV0L25mYy9uY2kvaGNpLmMtMjE1LXtcbm5ldC9uZmMvbmNpL2hjaS5jOjIxNjpcdHU4IHBpcGUgPSBuZGV2LVx1MDAzZWhjaV9kZXYtXHUwMDNlZ2F0ZTJwaXBlW2dhdGVdO1xubmV0L25mYy9uY2kvaGNpLmMtMjE3LVxuLS1cbm5ldC9uZmMvbmNpL2hjaS5jLTIyMC1cbm5ldC9uZmMvbmNpL2hjaS5jOjIyMTpcdHJldHVybiBuY2lfaGNpX3NlbmRfZGF0YShuZGV2LCBwaXBlLFxubmV0L25mYy9uY2kvaGNpLmMtMjIyLVx0XHRcdE5DSV9IQ1BfSEVBREVSKE5DSV9IQ0lfSENQX0VWRU5ULCBldmVudCksXG4tLVxubmV0L25mYy9uY2kvaGNpLmMtMjI0LX1cbm5ldC9uZmMvbmNpL2hjaS5jOjIyNTpFWFBPUlRfU1lNQk9MKG5jaV9oY2lfc2VuZF9ldmVudCk7XG5uZXQvbmZjL25jaS9oY2kuYy0yMjYtXG5uZXQvbmZjL25jaS9oY2kuYzoyMjc6aW50IG5jaV9oY2lfc2VuZF9jbWQoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHU4IGdhdGUsIHU4IGNtZCxcbm5ldC9uZmMvbmNpL2hjaS5jLTIyOC1cdFx0ICAgICBjb25zdCB1OCAqcGFyYW0sIHNpemVfdCBwYXJhbV9sZW4sXG4tLVxubmV0L25mYy9uY2kvaGNpLmMtMjM1LVx0aW50IHI7XG5uZXQvbmZjL25jaS9oY2kuYzoyMzY6XHR1OCBwaXBlID0gbmRldi1cdTAwM2VoY2lfZGV2LVx1MDAzZWdhdGUycGlwZVtnYXRlXTtcbm5ldC9uZmMvbmNpL2hjaS5jLTIzNy1cbi0tXG5uZXQvbmZjL25jaS9oY2kuYy0yNDEtXHRzcGluX2xvY2tfYmgoXHUwMDI2bmRldi1cdTAwM2Vjb25uX2luZm9fbG9jayk7XG5uZXQvbmZjL25jaS9oY2kuYzoyNDI6XHRjb25uX2luZm8gPSBuZGV2LVx1MDAzZWhjaV9kZXYtXHUwMDNlY29ubl9pbmZvO1xubmV0L25mYy9uY2kvaGNpLmMtMjQzLVx0aWYgKCFjb25uX2luZm8pIHtcbi0tXG5uZXQvbmZjL25jaS9oY2kuYy0yNTQtXG5uZXQvbmZjL25jaS9oY2kuYzoyNTU6XHRyID0gbmNpX3JlcXVlc3QobmRldiwgbmNpX2hjaV9zZW5kX2RhdGFfcmVxLCBcdTAwMjZkYXRhLFxubmV0L25mYy9uY2kvaGNpLmMtMjU2LVx0XHRcdG1zZWNzX3RvX2ppZmZpZXMoTkNJX0RBVEFfVElNRU9VVCkpO1xuLS1cbm5ldC9uZmMvbmNpL2hjaS5jLTI1OC1cdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xubmV0L25mYy9uY2kvaGNpLmM6MjU5Olx0XHRjb25uX2luZm8gPSBuZGV2LVx1MDAzZWhjaV9kZXYtXHUwMDNlY29ubl9pbmZvO1xubmV0L25mYy9uY2kvaGNpLmMtMjYwLVx0XHRyeF9za2IgPSBjb25uX2luZm8gPyBjb25uX2luZm8tXHUwMDNlcnhfc2tiIDogTlVMTDtcbi0tXG5uZXQvbmZjL25jaS9oY2kuYy0yNjYtXHRcdG1lc3NhZ2UgPSAoc3RydWN0IG5jaV9oY3BfbWVzc2FnZSAqKXJ4X3NrYi1cdTAwM2VkYXRhO1xubmV0L25mYy9uY2kvaGNpLmM6MjY3Olx0XHRyID0gbmNpX2hjaV9yZXN1bHRfdG9fZXJybm8oXG5uZXQvbmZjL25jaS9oY2kuYy0yNjgtXHRcdFx0TkNJX0hDUF9NU0dfR0VUX0NNRChtZXNzYWdlLVx1MDAzZWhlYWRlcikpO1xuLS1cbm5ldC9uZmMvbmNpL2hjaS5jLTI3Ny19XG5uZXQvbmZjL25jaS9oY2kuYzoyNzg6RVhQT1JUX1NZTUJPTChuY2lfaGNpX3NlbmRfY21kKTtcbm5ldC9uZmMvbmNpL2hjaS5jLTI3OS1cbm5ldC9uZmMvbmNpL2hjaS5jOjI4MDppbnQgbmNpX2hjaV9jbGVhcl9hbGxfcGlwZXMoc3RydWN0IG5jaV9kZXYgKm5kZXYpXG5uZXQvbmZjL25jaS9oY2kuYy0yODEte1xuLS1cbm5ldC9uZmMvbmNpL2hjaS5jLTI4My1cbm5ldC9uZmMvbmNpL2hjaS5jOjI4NDpcdHIgPSBuY2lfaGNpX3NlbmRfY21kKG5kZXYsIE5DSV9IQ0lfQURNSU5fR0FURSxcbm5ldC9uZmMvbmNpL2hjaS5jLTI4NS1cdFx0XHQgICAgIE5DSV9IQ0lfQURNX0NMRUFSX0FMTF9QSVBFLCBOVUxMLCAwLCBOVUxMKTtcbi0tXG5uZXQvbmZjL25jaS9oY2kuYy0yODgtXG5uZXQvbmZjL25jaS9oY2kuYzoyODk6XHRuY2lfaGNpX3Jlc2V0X3BpcGVzKG5kZXYtXHUwMDNlaGNpX2Rldik7XG5uZXQvbmZjL25jaS9oY2kuYy0yOTAtXHRyZXR1cm4gcjtcbm5ldC9uZmMvbmNpL2hjaS5jLTI5MS19XG5uZXQvbmZjL25jaS9oY2kuYzoyOTI6RVhQT1JUX1NZTUJPTChuY2lfaGNpX2NsZWFyX2FsbF9waXBlcyk7XG5uZXQvbmZjL25jaS9oY2kuYy0yOTMtXG5uZXQvbmZjL25jaS9oY2kuYzoyOTQ6c3RhdGljIHZvaWQgbmNpX2hjaV9ldmVudF9yZWNlaXZlZChzdHJ1Y3QgbmNpX2RldiAqbmRldiwgdTggcGlwZSxcbm5ldC9uZmMvbmNpL2hjaS5jLTI5NS1cdFx0XHRcdCAgIHU4IGV2ZW50LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L25mYy9uY2kvaGNpLmMtMjk2LXtcbm5ldC9uZmMvbmNpL2hjaS5jOjI5NzpcdGlmIChuZGV2LVx1MDAzZW9wcy1cdTAwM2VoY2lfZXZlbnRfcmVjZWl2ZWQpXG5uZXQvbmZjL25jaS9oY2kuYzoyOTg6XHRcdG5kZXYtXHUwMDNlb3BzLVx1MDAzZWhjaV9ldmVudF9yZWNlaXZlZChuZGV2LCBwaXBlLCBldmVudCwgc2tiKTtcbm5ldC9uZmMvbmNpL2hjaS5jLTI5OS19XG5uZXQvbmZjL25jaS9oY2kuYy0zMDAtXG5uZXQvbmZjL25jaS9oY2kuYzozMDE6c3RhdGljIHZvaWQgbmNpX2hjaV9jbWRfcmVjZWl2ZWQoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHU4IHBpcGUsXG5uZXQvbmZjL25jaS9oY2kuYy0zMDItXHRcdFx0XHQgdTggY21kLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L25mYy9uY2kvaGNpLmMtMzAzLXtcbm5ldC9uZmMvbmNpL2hjaS5jOjMwNDpcdHU4IGdhdGUgPSBuZGV2LVx1MDAzZWhjaV9kZXYtXHUwMDNlcGlwZXNbcGlwZV0uZ2F0ZTtcbm5ldC9uZmMvbmNpL2hjaS5jLTMwNS1cdHU4IHN0YXR1cyA9IE5DSV9IQ0lfQU5ZX09LIHwgfk5DSV9IQ0lfRlJBR01FTlQ7XG5uZXQvbmZjL25jaS9oY2kuYy0zMDYtXHR1OCBkZXN0X2dhdGUsIG5ld19waXBlO1xubmV0L25mYy9uY2kvaGNpLmM6MzA3Olx0c3RydWN0IG5jaV9oY2lfY3JlYXRlX3BpcGVfcmVzcCAqY3JlYXRlX2luZm87XG5uZXQvbmZjL25jaS9oY2kuYzozMDg6XHRzdHJ1Y3QgbmNpX2hjaV9kZWxldGVfcGlwZV9ub3RpICpkZWxldGVfaW5mbztcbm5ldC9uZmMvbmNpL2hjaS5jOjMwOTpcdHN0cnVjdCBuY2lfaGNpX2FsbF9waXBlX2NsZWFyZWRfbm90aSAqY2xlYXJlZF9pbmZvO1xubmV0L25mYy9uY2kvaGNpLmMtMzEwLVxuLS1cbm5ldC9uZmMvbmNpL2hjaS5jLTMxOC1cdFx0fVxubmV0L25mYy9uY2kvaGNpLmM6MzE5Olx0XHRjcmVhdGVfaW5mbyA9IChzdHJ1Y3QgbmNpX2hjaV9jcmVhdGVfcGlwZV9yZXNwICopc2tiLVx1MDAzZWRhdGE7XG5uZXQvbmZjL25jaS9oY2kuYy0zMjAtXHRcdGRlc3RfZ2F0ZSA9IGNyZWF0ZV9pbmZvLVx1MDAzZWRlc3RfZ2F0ZTtcbi0tXG5uZXQvbmZjL25jaS9oY2kuYy0zMzEtXHRcdCAqL1xubmV0L25mYy9uY2kvaGNpLmM6MzMyOlx0XHRuZGV2LVx1MDAzZWhjaV9kZXYtXHUwMDNlZ2F0ZTJwaXBlW2Rlc3RfZ2F0ZV0gPSBuZXdfcGlwZTtcbm5ldC9uZmMvbmNpL2hjaS5jOjMzMzpcdFx0bmRldi1cdTAwM2VoY2lfZGV2LVx1MDAzZXBpcGVzW25ld19waXBlXS5nYXRlID0gZGVzdF9nYXRlO1xubmV0L25mYy9uY2kvaGNpLmM6MzM0Olx0XHRuZGV2LVx1MDAzZWhjaV9kZXYtXHUwMDNlcGlwZXNbbmV3X3BpcGVdLmhvc3QgPVxubmV0L25mYy9uY2kvaGNpLmMtMzM1LVx0XHRcdFx0XHRcdGNyZWF0ZV9pbmZvLVx1MDAzZXNyY19ob3N0O1xuLS1cbm5ldC9uZmMvbmNpL2hjaS5jLTM0OC1cdFx0fVxubmV0L25mYy9uY2kvaGNpLmM6MzQ5Olx0XHRkZWxldGVfaW5mbyA9IChzdHJ1Y3QgbmNpX2hjaV9kZWxldGVfcGlwZV9ub3RpICopc2tiLVx1MDAzZWRhdGE7XG5uZXQvbmZjL25jaS9oY2kuYy0zNTAtXHRcdGlmIChkZWxldGVfaW5mby1cdTAwM2VwaXBlIFx1MDAzZT0gTkNJX0hDSV9NQVhfUElQRVMpIHtcbi0tXG5uZXQvbmZjL25jaS9oY2kuYy0zNTQtXG5uZXQvbmZjL25jaS9oY2kuYzozNTU6XHRcdG5kZXYtXHUwMDNlaGNpX2Rldi1cdTAwM2VwaXBlc1tkZWxldGVfaW5mby1cdTAwM2VwaXBlXS5nYXRlID1cbm5ldC9uZmMvbmNpL2hjaS5jLTM1Ni1cdFx0XHRcdFx0XHROQ0lfSENJX0lOVkFMSURfR0FURTtcbm5ldC9uZmMvbmNpL2hjaS5jOjM1NzpcdFx0bmRldi1cdTAwM2VoY2lfZGV2LVx1MDAzZXBpcGVzW2RlbGV0ZV9pbmZvLVx1MDAzZXBpcGVdLmhvc3QgPVxubmV0L25mYy9uY2kvaGNpLmMtMzU4LVx0XHRcdFx0XHRcdE5DSV9IQ0lfSU5WQUxJRF9IT1NUO1xuLS1cbm5ldC9uZmMvbmNpL2hjaS5jLTM2Ni1cdFx0Y2xlYXJlZF9pbmZvID1cbm5ldC9uZmMvbmNpL2hjaS5jOjM2NzpcdFx0XHQoc3RydWN0IG5jaV9oY2lfYWxsX3BpcGVfY2xlYXJlZF9ub3RpICopc2tiLVx1MDAzZWRhdGE7XG5uZXQvbmZjL25jaS9oY2kuYzozNjg6XHRcdG5jaV9oY2lfcmVzZXRfcGlwZXNfcGVyX2hvc3QobmRldiwgY2xlYXJlZF9pbmZvLVx1MDAzZWhvc3QpO1xubmV0L25mYy9uY2kvaGNpLmMtMzY5LVx0XHRicmVhaztcbi0tXG5uZXQvbmZjL25jaS9oY2kuYy0zNzQtXG5uZXQvbmZjL25jaS9oY2kuYzozNzU6XHRpZiAobmRldi1cdTAwM2VvcHMtXHUwMDNlaGNpX2NtZF9yZWNlaXZlZClcbm5ldC9uZmMvbmNpL2hjaS5jOjM3NjpcdFx0bmRldi1cdTAwM2VvcHMtXHUwMDNlaGNpX2NtZF9yZWNlaXZlZChuZGV2LCBwaXBlLCBjbWQsIHNrYik7XG5uZXQvbmZjL25jaS9oY2kuYy0zNzctXG5uZXQvbmZjL25jaS9oY2kuYy0zNzgtZXhpdDpcbm5ldC9uZmMvbmNpL2hjaS5jOjM3OTpcdG5jaV9oY2lfc2VuZF9kYXRhKG5kZXYsIHBpcGUsIHN0YXR1cywgTlVMTCwgMCk7XG5uZXQvbmZjL25jaS9oY2kuYy0zODAtXG4tLVxubmV0L25mYy9uY2kvaGNpLmMtMzgzLVxubmV0L25mYy9uY2kvaGNpLmM6Mzg0OnN0YXRpYyB2b2lkIG5jaV9oY2lfcmVzcF9yZWNlaXZlZChzdHJ1Y3QgbmNpX2RldiAqbmRldiwgdTggcGlwZSxcbm5ldC9uZmMvbmNpL2hjaS5jLTM4NS1cdFx0XHRcdCAgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbmZjL25jaS9oY2kuYy0zODktXHRzcGluX2xvY2tfYmgoXHUwMDI2bmRldi1cdTAwM2Vjb25uX2luZm9fbG9jayk7XG5uZXQvbmZjL25jaS9oY2kuYzozOTA6XHRjb25uX2luZm8gPSBuZGV2LVx1MDAzZWhjaV9kZXYtXHUwMDNlY29ubl9pbmZvO1xubmV0L25mYy9uY2kvaGNpLmMtMzkxLVx0aWYgKCFjb25uX2luZm8pIHtcbi0tXG5uZXQvbmZjL25jaS9oY2kuYy00MDUtICovXG5uZXQvbmZjL25jaS9oY2kuYzo0MDY6c3RhdGljIHZvaWQgbmNpX2hjaV9oY3BfbWVzc2FnZV9yeChzdHJ1Y3QgbmNpX2RldiAqbmRldiwgdTggcGlwZSxcbm5ldC9uZmMvbmNpL2hjaS5jLTQwNy1cdFx0XHRcdCAgIHU4IHR5cGUsIHU4IGluc3RydWN0aW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9uZmMvbmNpL2hjaS5jLTQxMC1cdGNhc2UgTkNJX0hDSV9IQ1BfUkVTUE9OU0U6XG5uZXQvbmZjL25jaS9oY2kuYzo0MTE6XHRcdG5jaV9oY2lfcmVzcF9yZWNlaXZlZChuZGV2LCBwaXBlLCBza2IpO1xubmV0L25mYy9uY2kvaGNpLmMtNDEyLVx0XHRicmVhaztcbm5ldC9uZmMvbmNpL2hjaS5jLTQxMy1cdGNhc2UgTkNJX0hDSV9IQ1BfQ09NTUFORDpcbm5ldC9uZmMvbmNpL2hjaS5jOjQxNDpcdFx0bmNpX2hjaV9jbWRfcmVjZWl2ZWQobmRldiwgcGlwZSwgaW5zdHJ1Y3Rpb24sIHNrYik7XG5uZXQvbmZjL25jaS9oY2kuYy00MTUtXHRcdGJyZWFrO1xubmV0L25mYy9uY2kvaGNpLmMtNDE2LVx0Y2FzZSBOQ0lfSENJX0hDUF9FVkVOVDpcbm5ldC9uZmMvbmNpL2hjaS5jOjQxNzpcdFx0bmNpX2hjaV9ldmVudF9yZWNlaXZlZChuZGV2LCBwaXBlLCBpbnN0cnVjdGlvbiwgc2tiKTtcbm5ldC9uZmMvbmNpL2hjaS5jLTQxOC1cdFx0YnJlYWs7XG4tLVxubmV0L25mYy9uY2kvaGNpLmMtNDI4LVxubmV0L25mYy9uY2kvaGNpLmM6NDI5OnN0YXRpYyB2b2lkIG5jaV9oY2lfbXNnX3J4X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxubmV0L25mYy9uY2kvaGNpLmMtNDMwLXtcbm5ldC9uZmMvbmNpL2hjaS5jOjQzMTpcdHN0cnVjdCBuY2lfaGNpX2RldiAqaGRldiA9XG5uZXQvbmZjL25jaS9oY2kuYzo0MzI6XHRcdGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbmNpX2hjaV9kZXYsIG1zZ19yeF93b3JrKTtcbm5ldC9uZmMvbmNpL2hjaS5jLTQzMy1cdHN0cnVjdCBza19idWZmICpza2I7XG4tLVxubmV0L25mYy9uY2kvaGNpLmMtNDQ1LVxubmV0L25mYy9uY2kvaGNpLmM6NDQ2Olx0XHRuY2lfaGNpX2hjcF9tZXNzYWdlX3J4KGhkZXYtXHUwMDNlbmRldiwgcGlwZSxcbm5ldC9uZmMvbmNpL2hjaS5jLTQ0Ny1cdFx0XHRcdCAgICAgICB0eXBlLCBpbnN0cnVjdGlvbiwgc2tiKTtcbi0tXG5uZXQvbmZjL25jaS9oY2kuYy00NTAtXG5uZXQvbmZjL25jaS9oY2kuYzo0NTE6dm9pZCBuY2lfaGNpX2RhdGFfcmVjZWl2ZWRfY2Iodm9pZCAqY29udGV4dCxcbm5ldC9uZmMvbmNpL2hjaS5jLTQ1Mi1cdFx0XHQgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgZXJyKVxuLS1cbm5ldC9uZmMvbmNpL2hjaS5jLTQ3Mi1cdGlmICgocGFja2V0LVx1MDAzZWhlYWRlciBcdTAwMjYgfk5DSV9IQ0lfRlJBR01FTlQpID09IDApIHtcbm5ldC9uZmMvbmNpL2hjaS5jOjQ3MzpcdFx0c2tiX3F1ZXVlX3RhaWwoXHUwMDI2bmRldi1cdTAwM2VoY2lfZGV2LVx1MDAzZXJ4X2hjcF9mcmFncywgc2tiKTtcbm5ldC9uZmMvbmNpL2hjaS5jLTQ3NC1cdFx0cmV0dXJuO1xuLS1cbm5ldC9uZmMvbmNpL2hjaS5jLTQ3Ny1cdC8qIGl0JiMzOTtzIHRoZSBsYXN0IGZyYWdtZW50LiBEb2VzIGl0IG5lZWQgcmUtYWdncmVnYXRpb24/ICovXG5uZXQvbmZjL25jaS9oY2kuYzo0Nzg6XHRpZiAoc2tiX3F1ZXVlX2xlbihcdTAwMjZuZGV2LVx1MDAzZWhjaV9kZXYtXHUwMDNlcnhfaGNwX2ZyYWdzKSkge1xubmV0L25mYy9uY2kvaGNpLmMtNDc5LVx0XHRwaXBlID0gTkNJX0hDUF9NU0dfR0VUX1BJUEUocGFja2V0LVx1MDAzZWhlYWRlcik7XG5uZXQvbmZjL25jaS9oY2kuYzo0ODA6XHRcdHNrYl9xdWV1ZV90YWlsKFx1MDAyNm5kZXYtXHUwMDNlaGNpX2Rldi1cdTAwM2VyeF9oY3BfZnJhZ3MsIHNrYik7XG5uZXQvbmZjL25jaS9oY2kuYy00ODEtXG5uZXQvbmZjL25jaS9oY2kuYy00ODItXHRcdG1zZ19sZW4gPSAwO1xubmV0L25mYy9uY2kvaGNpLmM6NDgzOlx0XHRza2JfcXVldWVfd2FsayhcdTAwMjZuZGV2LVx1MDAzZWhjaV9kZXYtXHUwMDNlcnhfaGNwX2ZyYWdzLCBmcmFnX3NrYikge1xubmV0L25mYy9uY2kvaGNpLmMtNDg0LVx0XHRcdG1zZ19sZW4gJiM0Mzs9IChmcmFnX3NrYi1cdTAwM2VsZW4gLVxuLS1cbm5ldC9uZmMvbmNpL2hjaS5jLTQ5Ni1cbm5ldC9uZmMvbmNpL2hjaS5jOjQ5NzpcdFx0c2tiX3F1ZXVlX3dhbGsoXHUwMDI2bmRldi1cdTAwM2VoY2lfZGV2LVx1MDAzZXJ4X2hjcF9mcmFncywgZnJhZ19za2IpIHtcbm5ldC9uZmMvbmNpL2hjaS5jLTQ5OC1cdFx0XHRtc2dfbGVuID0gZnJhZ19za2ItXHUwMDNlbGVuIC0gTkNJX0hDSV9IQ1BfUEFDS0VUX0hFQURFUl9MRU47XG4tLVxubmV0L25mYy9uY2kvaGNpLmMtNTAzLVxubmV0L25mYy9uY2kvaGNpLmM6NTA0Olx0XHRza2JfcXVldWVfcHVyZ2UoXHUwMDI2bmRldi1cdTAwM2VoY2lfZGV2LVx1MDAzZXJ4X2hjcF9mcmFncyk7XG5uZXQvbmZjL25jaS9oY2kuYy01MDUtXHR9IGVsc2Uge1xuLS1cbm5ldC9uZmMvbmNpL2hjaS5jLTUyMy1cdFx0c2tiX3B1bGwoaGNwX3NrYiwgTkNJX0hDSV9IQ1BfUEFDS0VUX0hFQURFUl9MRU4pO1xubmV0L25mYy9uY2kvaGNpLmM6NTI0Olx0XHRuY2lfaGNpX2hjcF9tZXNzYWdlX3J4KG5kZXYsIHBpcGUsIHR5cGUsXG5uZXQvbmZjL25jaS9oY2kuYy01MjUtXHRcdFx0XHQgICAgICAgTkNJX1NUQVRVU19PSywgaGNwX3NrYik7XG5uZXQvbmZjL25jaS9oY2kuYy01MjYtXHR9IGVsc2Uge1xubmV0L25mYy9uY2kvaGNpLmM6NTI3Olx0XHRza2JfcXVldWVfdGFpbChcdTAwMjZuZGV2LVx1MDAzZWhjaV9kZXYtXHUwMDNlbXNnX3J4X3F1ZXVlLCBoY3Bfc2tiKTtcbm5ldC9uZmMvbmNpL2hjaS5jOjUyODpcdFx0c2NoZWR1bGVfd29yayhcdTAwMjZuZGV2LVx1MDAzZWhjaV9kZXYtXHUwMDNlbXNnX3J4X3dvcmspO1xubmV0L25mYy9uY2kvaGNpLmMtNTI5LVx0fVxuLS1cbm5ldC9uZmMvbmNpL2hjaS5jLTUzMS1cbm5ldC9uZmMvbmNpL2hjaS5jOjUzMjppbnQgbmNpX2hjaV9vcGVuX3BpcGUoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHU4IHBpcGUpXG5uZXQvbmZjL25jaS9oY2kuYy01MzMte1xuLS1cbm5ldC9uZmMvbmNpL2hjaS5jLTUzNy1cdHNwaW5fbG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbm5ldC9uZmMvbmNpL2hjaS5jOjUzODpcdGNvbm5faW5mbyA9IG5kZXYtXHUwMDNlaGNpX2Rldi1cdTAwM2Vjb25uX2luZm87XG5uZXQvbmZjL25jaS9oY2kuYy01MzktXHRpZiAoIWNvbm5faW5mbykge1xuLS1cbm5ldC9uZmMvbmNpL2hjaS5jLTU1MS1cbm5ldC9uZmMvbmNpL2hjaS5jOjU1MjpcdHJldHVybiBuY2lfcmVxdWVzdChuZGV2LCBuY2lfaGNpX3NlbmRfZGF0YV9yZXEsIFx1MDAyNmRhdGEsXG5uZXQvbmZjL25jaS9oY2kuYy01NTMtXHRcdFx0ICAgbXNlY3NfdG9famlmZmllcyhOQ0lfREFUQV9USU1FT1VUKSk7XG5uZXQvbmZjL25jaS9oY2kuYy01NTQtfVxubmV0L25mYy9uY2kvaGNpLmM6NTU1OkVYUE9SVF9TWU1CT0wobmNpX2hjaV9vcGVuX3BpcGUpO1xubmV0L25mYy9uY2kvaGNpLmMtNTU2LVxubmV0L25mYy9uY2kvaGNpLmM6NTU3OnN0YXRpYyB1OCBuY2lfaGNpX2NyZWF0ZV9waXBlKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCB1OCBkZXN0X2hvc3QsXG5uZXQvbmZjL25jaS9oY2kuYy01NTgtXHRcdFx0ICAgICAgdTggZGVzdF9nYXRlLCBpbnQgKnJlc3VsdClcbi0tXG5uZXQvbmZjL25jaS9oY2kuYy01NjEtXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xubmV0L25mYy9uY2kvaGNpLmM6NTYyOlx0c3RydWN0IG5jaV9oY2lfY3JlYXRlX3BpcGVfcGFyYW1zIHBhcmFtcztcbm5ldC9uZmMvbmNpL2hjaS5jOjU2MzpcdGNvbnN0IHN0cnVjdCBuY2lfaGNpX2NyZWF0ZV9waXBlX3Jlc3AgKnJlc3A7XG5uZXQvbmZjL25jaS9oY2kuYy01NjQtXG4tLVxubmV0L25mYy9uY2kvaGNpLmMtNTcwLVxubmV0L25mYy9uY2kvaGNpLmM6NTcxOlx0KnJlc3VsdCA9IG5jaV9oY2lfc2VuZF9jbWQobmRldiwgTkNJX0hDSV9BRE1JTl9HQVRFLFxubmV0L25mYy9uY2kvaGNpLmMtNTcyLVx0XHRcdFx0ICAgTkNJX0hDSV9BRE1fQ1JFQVRFX1BJUEUsXG4tLVxubmV0L25mYy9uY2kvaGNpLmMtNTc2LVxubmV0L25mYy9uY2kvaGNpLmM6NTc3Olx0cmVzcCA9IChzdHJ1Y3QgbmNpX2hjaV9jcmVhdGVfcGlwZV9yZXNwICopc2tiLVx1MDAzZWRhdGE7XG5uZXQvbmZjL25jaS9oY2kuYy01NzgtXHRwaXBlID0gcmVzcC1cdTAwM2VwaXBlO1xuLS1cbm5ldC9uZmMvbmNpL2hjaS5jLTU4Ny1cbm5ldC9uZmMvbmNpL2hjaS5jOjU4ODpzdGF0aWMgaW50IG5jaV9oY2lfZGVsZXRlX3BpcGUoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHU4IHBpcGUpXG5uZXQvbmZjL25jaS9oY2kuYy01ODkte1xubmV0L25mYy9uY2kvaGNpLmM6NTkwOlx0cmV0dXJuIG5jaV9oY2lfc2VuZF9jbWQobmRldiwgTkNJX0hDSV9BRE1JTl9HQVRFLFxubmV0L25mYy9uY2kvaGNpLmMtNTkxLVx0XHRcdFx0TkNJX0hDSV9BRE1fREVMRVRFX1BJUEUsIFx1MDAyNnBpcGUsIDEsIE5VTEwpO1xuLS1cbm5ldC9uZmMvbmNpL2hjaS5jLTU5My1cbm5ldC9uZmMvbmNpL2hjaS5jOjU5NDppbnQgbmNpX2hjaV9zZXRfcGFyYW0oc3RydWN0IG5jaV9kZXYgKm5kZXYsIHU4IGdhdGUsIHU4IGlkeCxcbm5ldC9uZmMvbmNpL2hjaS5jLTU5NS1cdFx0ICAgICAgY29uc3QgdTggKnBhcmFtLCBzaXplX3QgcGFyYW1fbGVuKVxuLS1cbm5ldC9uZmMvbmNpL2hjaS5jLTYwMi1cdHU4ICp0bXA7XG5uZXQvbmZjL25jaS9oY2kuYzo2MDM6XHR1OCBwaXBlID0gbmRldi1cdTAwM2VoY2lfZGV2LVx1MDAzZWdhdGUycGlwZVtnYXRlXTtcbm5ldC9uZmMvbmNpL2hjaS5jLTYwNC1cbi0tXG5uZXQvbmZjL25jaS9oY2kuYy02MTAtXHRzcGluX2xvY2tfYmgoXHUwMDI2bmRldi1cdTAwM2Vjb25uX2luZm9fbG9jayk7XG5uZXQvbmZjL25jaS9oY2kuYzo2MTE6XHRjb25uX2luZm8gPSBuZGV2LVx1MDAzZWhjaV9kZXYtXHUwMDNlY29ubl9pbmZvO1xubmV0L25mYy9uY2kvaGNpLmMtNjEyLVx0aWYgKCFjb25uX2luZm8pIHtcbi0tXG5uZXQvbmZjL25jaS9oY2kuYy02MzEtXG5uZXQvbmZjL25jaS9oY2kuYzo2MzI6XHRyID0gbmNpX3JlcXVlc3QobmRldiwgbmNpX2hjaV9zZW5kX2RhdGFfcmVxLCBcdTAwMjZkYXRhLFxubmV0L25mYy9uY2kvaGNpLmMtNjMzLVx0XHRcdG1zZWNzX3RvX2ppZmZpZXMoTkNJX0RBVEFfVElNRU9VVCkpO1xuLS1cbm5ldC9uZmMvbmNpL2hjaS5jLTYzNS1cdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xubmV0L25mYy9uY2kvaGNpLmM6NjM2Olx0XHRjb25uX2luZm8gPSBuZGV2LVx1MDAzZWhjaV9kZXYtXHUwMDNlY29ubl9pbmZvO1xubmV0L25mYy9uY2kvaGNpLmMtNjM3LVx0XHRyeF9za2IgPSBjb25uX2luZm8gPyBjb25uX2luZm8tXHUwMDNlcnhfc2tiIDogTlVMTDtcbi0tXG5uZXQvbmZjL25jaS9oY2kuYy02NDQtXHRcdG1lc3NhZ2UgPSAoc3RydWN0IG5jaV9oY3BfbWVzc2FnZSAqKXJ4X3NrYi1cdTAwM2VkYXRhO1xubmV0L25mYy9uY2kvaGNpLmM6NjQ1Olx0XHRyID0gbmNpX2hjaV9yZXN1bHRfdG9fZXJybm8oXG5uZXQvbmZjL25jaS9oY2kuYy02NDYtXHRcdFx0TkNJX0hDUF9NU0dfR0VUX0NNRChtZXNzYWdlLVx1MDAzZWhlYWRlcikpO1xuLS1cbm5ldC9uZmMvbmNpL2hjaS5jLTY1My19XG5uZXQvbmZjL25jaS9oY2kuYzo2NTQ6RVhQT1JUX1NZTUJPTChuY2lfaGNpX3NldF9wYXJhbSk7XG5uZXQvbmZjL25jaS9oY2kuYy02NTUtXG5uZXQvbmZjL25jaS9oY2kuYzo2NTY6aW50IG5jaV9oY2lfZ2V0X3BhcmFtKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCB1OCBnYXRlLCB1OCBpZHgsXG5uZXQvbmZjL25jaS9oY2kuYy02NTctXHRcdCAgICAgIHN0cnVjdCBza19idWZmICoqc2tiKVxuLS1cbm5ldC9uZmMvbmNpL2hjaS5jLTY2My1cdGludCByO1xubmV0L25mYy9uY2kvaGNpLmM6NjY0Olx0dTggcGlwZSA9IG5kZXYtXHUwMDNlaGNpX2Rldi1cdTAwM2VnYXRlMnBpcGVbZ2F0ZV07XG5uZXQvbmZjL25jaS9oY2kuYy02NjUtXG4tLVxubmV0L25mYy9uY2kvaGNpLmMtNjcxLVx0c3Bpbl9sb2NrX2JoKFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xubmV0L25mYy9uY2kvaGNpLmM6NjcyOlx0Y29ubl9pbmZvID0gbmRldi1cdTAwM2VoY2lfZGV2LVx1MDAzZWNvbm5faW5mbztcbm5ldC9uZmMvbmNpL2hjaS5jLTY3My1cdGlmICghY29ubl9pbmZvKSB7XG4tLVxubmV0L25mYy9uY2kvaGNpLmMtNjg1LVxubmV0L25mYy9uY2kvaGNpLmM6Njg2Olx0ciA9IG5jaV9yZXF1ZXN0KG5kZXYsIG5jaV9oY2lfc2VuZF9kYXRhX3JlcSwgXHUwMDI2ZGF0YSxcbm5ldC9uZmMvbmNpL2hjaS5jLTY4Ny1cdFx0XHRtc2Vjc190b19qaWZmaWVzKE5DSV9EQVRBX1RJTUVPVVQpKTtcbi0tXG5uZXQvbmZjL25jaS9oY2kuYy02OTAtXHRcdHNwaW5fbG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbm5ldC9uZmMvbmNpL2hjaS5jOjY5MTpcdFx0Y29ubl9pbmZvID0gbmRldi1cdTAwM2VoY2lfZGV2LVx1MDAzZWNvbm5faW5mbztcbm5ldC9uZmMvbmNpL2hjaS5jLTY5Mi1cdFx0cnhfc2tiID0gY29ubl9pbmZvID8gY29ubl9pbmZvLVx1MDAzZXJ4X3NrYiA6IE5VTEw7XG4tLVxubmV0L25mYy9uY2kvaGNpLmMtNjk4LVx0XHRtZXNzYWdlID0gKHN0cnVjdCBuY2lfaGNwX21lc3NhZ2UgKilyeF9za2ItXHUwMDNlZGF0YTtcbm5ldC9uZmMvbmNpL2hjaS5jOjY5OTpcdFx0ciA9IG5jaV9oY2lfcmVzdWx0X3RvX2Vycm5vKFxubmV0L25mYy9uY2kvaGNpLmMtNzAwLVx0XHRcdE5DSV9IQ1BfTVNHX0dFVF9DTUQobWVzc2FnZS1cdTAwM2VoZWFkZXIpKTtcbi0tXG5uZXQvbmZjL25jaS9oY2kuYy03MDktfVxubmV0L25mYy9uY2kvaGNpLmM6NzEwOkVYUE9SVF9TWU1CT0wobmNpX2hjaV9nZXRfcGFyYW0pO1xubmV0L25mYy9uY2kvaGNpLmMtNzExLVxubmV0L25mYy9uY2kvaGNpLmM6NzEyOmludCBuY2lfaGNpX2Nvbm5lY3RfZ2F0ZShzdHJ1Y3QgbmNpX2RldiAqbmRldixcbm5ldC9uZmMvbmNpL2hjaS5jLTcxMy1cdFx0XHQgdTggZGVzdF9ob3N0LCB1OCBkZXN0X2dhdGUsIHU4IHBpcGUpXG4tLVxubmV0L25mYy9uY2kvaGNpLmMtNzIwLVxubmV0L25mYy9uY2kvaGNpLmM6NzIxOlx0aWYgKG5kZXYtXHUwMDNlaGNpX2Rldi1cdTAwM2VnYXRlMnBpcGVbZGVzdF9nYXRlXSAhPSBOQ0lfSENJX0lOVkFMSURfUElQRSlcbm5ldC9uZmMvbmNpL2hjaS5jLTcyMi1cdFx0cmV0dXJuIC1FQUREUklOVVNFO1xuLS1cbm5ldC9uZmMvbmNpL2hjaS5jLTczNC1cdGRlZmF1bHQ6XG5uZXQvbmZjL25jaS9oY2kuYzo3MzU6XHRcdHBpcGUgPSBuY2lfaGNpX2NyZWF0ZV9waXBlKG5kZXYsIGRlc3RfaG9zdCwgZGVzdF9nYXRlLCBcdTAwMjZyKTtcbm5ldC9uZmMvbmNpL2hjaS5jLTczNi1cdFx0aWYgKHBpcGUgPT0gTkNJX0hDSV9JTlZBTElEX1BJUEUpXG4tLVxubmV0L25mYy9uY2kvaGNpLmMtNzQyLW9wZW5fcGlwZTpcbm5ldC9uZmMvbmNpL2hjaS5jOjc0MzpcdHIgPSBuY2lfaGNpX29wZW5fcGlwZShuZGV2LCBwaXBlKTtcbm5ldC9uZmMvbmNpL2hjaS5jLTc0NC1cdGlmIChyIFx1MDAzYyAwKSB7XG5uZXQvbmZjL25jaS9oY2kuYy03NDUtXHRcdGlmIChwaXBlX2NyZWF0ZWQpIHtcbm5ldC9uZmMvbmNpL2hjaS5jOjc0NjpcdFx0XHRpZiAobmNpX2hjaV9kZWxldGVfcGlwZShuZGV2LCBwaXBlKSBcdTAwM2MgMCkge1xubmV0L25mYy9uY2kvaGNpLmMtNzQ3LVx0XHRcdFx0LyogVE9ETzogQ2Fubm90IGNsZWFuIGJ5IGRlbGV0aW5nIHBpcGUuLi5cbi0tXG5uZXQvbmZjL25jaS9oY2kuYy03NTQtXG5uZXQvbmZjL25jaS9oY2kuYzo3NTU6XHRuZGV2LVx1MDAzZWhjaV9kZXYtXHUwMDNlcGlwZXNbcGlwZV0uZ2F0ZSA9IGRlc3RfZ2F0ZTtcbm5ldC9uZmMvbmNpL2hjaS5jOjc1NjpcdG5kZXYtXHUwMDNlaGNpX2Rldi1cdTAwM2VwaXBlc1twaXBlXS5ob3N0ID0gZGVzdF9ob3N0O1xubmV0L25mYy9uY2kvaGNpLmM6NzU3Olx0bmRldi1cdTAwM2VoY2lfZGV2LVx1MDAzZWdhdGUycGlwZVtkZXN0X2dhdGVdID0gcGlwZTtcbm5ldC9uZmMvbmNpL2hjaS5jLTc1OC1cbi0tXG5uZXQvbmZjL25jaS9oY2kuYy03NjAtfVxubmV0L25mYy9uY2kvaGNpLmM6NzYxOkVYUE9SVF9TWU1CT0wobmNpX2hjaV9jb25uZWN0X2dhdGUpO1xubmV0L25mYy9uY2kvaGNpLmMtNzYyLVxubmV0L25mYy9uY2kvaGNpLmM6NzYzOnN0YXRpYyBpbnQgbmNpX2hjaV9kZXZfY29ubmVjdF9nYXRlcyhzdHJ1Y3QgbmNpX2RldiAqbmRldixcbm5ldC9uZmMvbmNpL2hjaS5jLTc2NC1cdFx0XHRcdCAgICAgdTggZ2F0ZV9jb3VudCxcbm5ldC9uZmMvbmNpL2hjaS5jOjc2NTpcdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IG5jaV9oY2lfZ2F0ZSAqZ2F0ZXMpXG5uZXQvbmZjL25jaS9oY2kuYy03NjYte1xuLS1cbm5ldC9uZmMvbmNpL2hjaS5jLTc2OS1cdHdoaWxlIChnYXRlX2NvdW50LS0pIHtcbm5ldC9uZmMvbmNpL2hjaS5jOjc3MDpcdFx0ciA9IG5jaV9oY2lfY29ubmVjdF9nYXRlKG5kZXYsIGdhdGVzLVx1MDAzZWRlc3RfaG9zdCxcbm5ldC9uZmMvbmNpL2hjaS5jLTc3MS1cdFx0XHRcdFx0IGdhdGVzLVx1MDAzZWdhdGUsIGdhdGVzLVx1MDAzZXBpcGUpO1xuLS1cbm5ldC9uZmMvbmNpL2hjaS5jLTc3OS1cbm5ldC9uZmMvbmNpL2hjaS5jOjc4MDppbnQgbmNpX2hjaV9kZXZfc2Vzc2lvbl9pbml0KHN0cnVjdCBuY2lfZGV2ICpuZGV2KVxubmV0L25mYy9uY2kvaGNpLmMtNzgxLXtcbi0tXG5uZXQvbmZjL25jaS9oY2kuYy03ODUtXG5uZXQvbmZjL25jaS9oY2kuYzo3ODY6XHRuZGV2LVx1MDAzZWhjaV9kZXYtXHUwMDNlY291bnRfcGlwZXMgPSAwO1xubmV0L25mYy9uY2kvaGNpLmM6Nzg3Olx0bmRldi1cdTAwM2VoY2lfZGV2LVx1MDAzZWV4cGVjdGVkX3BpcGVzID0gMDtcbm5ldC9uZmMvbmNpL2hjaS5jLTc4OC1cbm5ldC9uZmMvbmNpL2hjaS5jLTc4OS1cdHNwaW5fbG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbm5ldC9uZmMvbmNpL2hjaS5jOjc5MDpcdGNvbm5faW5mbyA9IG5kZXYtXHUwMDNlaGNpX2Rldi1cdTAwM2Vjb25uX2luZm87XG5uZXQvbmZjL25jaS9oY2kuYy03OTEtXHRpZiAoIWNvbm5faW5mbykge1xuLS1cbm5ldC9uZmMvbmNpL2hjaS5jLTc5NS1cbm5ldC9uZmMvbmNpL2hjaS5jOjc5NjpcdGNvbm5faW5mby1cdTAwM2VkYXRhX2V4Y2hhbmdlX2NiID0gbmNpX2hjaV9kYXRhX3JlY2VpdmVkX2NiO1xubmV0L25mYy9uY2kvaGNpLmMtNzk3LVx0Y29ubl9pbmZvLVx1MDAzZWRhdGFfZXhjaGFuZ2VfY2JfY29udGV4dCA9IG5kZXY7XG4tLVxubmV0L25mYy9uY2kvaGNpLmMtNzk5LVxubmV0L25mYy9uY2kvaGNpLmM6ODAwOlx0bmNpX2hjaV9yZXNldF9waXBlcyhuZGV2LVx1MDAzZWhjaV9kZXYpO1xubmV0L25mYy9uY2kvaGNpLmMtODAxLVxubmV0L25mYy9uY2kvaGNpLmM6ODAyOlx0aWYgKG5kZXYtXHUwMDNlaGNpX2Rldi1cdTAwM2Vpbml0X2RhdGEuZ2F0ZXNbMF0uZ2F0ZSAhPSBOQ0lfSENJX0FETUlOX0dBVEUpXG5uZXQvbmZjL25jaS9oY2kuYy04MDMtXHRcdHJldHVybiAtRVBST1RPO1xubmV0L25mYy9uY2kvaGNpLmMtODA0LVxubmV0L25mYy9uY2kvaGNpLmM6ODA1Olx0ciA9IG5jaV9oY2lfY29ubmVjdF9nYXRlKG5kZXYsXG5uZXQvbmZjL25jaS9oY2kuYzo4MDY6XHRcdFx0XHQgbmRldi1cdTAwM2VoY2lfZGV2LVx1MDAzZWluaXRfZGF0YS5nYXRlc1swXS5kZXN0X2hvc3QsXG5uZXQvbmZjL25jaS9oY2kuYzo4MDc6XHRcdFx0XHQgbmRldi1cdTAwM2VoY2lfZGV2LVx1MDAzZWluaXRfZGF0YS5nYXRlc1swXS5nYXRlLFxubmV0L25mYy9uY2kvaGNpLmM6ODA4Olx0XHRcdFx0IG5kZXYtXHUwMDNlaGNpX2Rldi1cdTAwM2Vpbml0X2RhdGEuZ2F0ZXNbMF0ucGlwZSk7XG5uZXQvbmZjL25jaS9oY2kuYy04MDktXHRpZiAociBcdTAwM2MgMClcbi0tXG5uZXQvbmZjL25jaS9oY2kuYy04MTEtXG5uZXQvbmZjL25jaS9oY2kuYzo4MTI6XHRyID0gbmNpX2hjaV9nZXRfcGFyYW0obmRldiwgTkNJX0hDSV9BRE1JTl9HQVRFLFxubmV0L25mYy9uY2kvaGNpLmMtODEzLVx0XHRcdCAgICAgIE5DSV9IQ0lfQURNSU5fUEFSQU1fU0VTU0lPTl9JREVOVElUWSwgXHUwMDI2c2tiKTtcbi0tXG5uZXQvbmZjL25jaS9oY2kuYy04MTctXHRpZiAoc2tiLVx1MDAzZWxlbiBcdTAwMjZcdTAwMjZcbm5ldC9uZmMvbmNpL2hjaS5jOjgxODpcdCAgICBza2ItXHUwMDNlbGVuID09IHN0cmxlbihuZGV2LVx1MDAzZWhjaV9kZXYtXHUwMDNlaW5pdF9kYXRhLnNlc3Npb25faWQpIFx1MDAyNlx1MDAyNlxubmV0L25mYy9uY2kvaGNpLmM6ODE5Olx0ICAgICFtZW1jbXAobmRldi1cdTAwM2VoY2lfZGV2LVx1MDAzZWluaXRfZGF0YS5zZXNzaW9uX2lkLCBza2ItXHUwMDNlZGF0YSwgc2tiLVx1MDAzZWxlbikgXHUwMDI2XHUwMDI2XG5uZXQvbmZjL25jaS9oY2kuYzo4MjA6XHQgICAgbmRldi1cdTAwM2VvcHMtXHUwMDNlaGNpX2xvYWRfc2Vzc2lvbikge1xubmV0L25mYy9uY2kvaGNpLmMtODIxLVx0XHQvKiBSZXN0b3JlIGdhdGVcdTAwM2MtXHUwMDNlcGlwZSB0YWJsZSBmcm9tIHNvbWUgcHJvcHJpZXRhcnkgbG9jYXRpb24uICovXG5uZXQvbmZjL25jaS9oY2kuYzo4MjI6XHRcdHIgPSBuZGV2LVx1MDAzZW9wcy1cdTAwM2VoY2lfbG9hZF9zZXNzaW9uKG5kZXYpO1xubmV0L25mYy9uY2kvaGNpLmMtODIzLVx0fSBlbHNlIHtcbm5ldC9uZmMvbmNpL2hjaS5jOjgyNDpcdFx0ciA9IG5jaV9oY2lfY2xlYXJfYWxsX3BpcGVzKG5kZXYpO1xubmV0L25mYy9uY2kvaGNpLmMtODI1LVx0XHRpZiAociBcdTAwM2MgMClcbi0tXG5uZXQvbmZjL25jaS9oY2kuYy04MjctXG5uZXQvbmZjL25jaS9oY2kuYzo4Mjg6XHRcdHIgPSBuY2lfaGNpX2Rldl9jb25uZWN0X2dhdGVzKG5kZXYsXG5uZXQvbmZjL25jaS9oY2kuYzo4Mjk6XHRcdFx0XHRcdCAgICAgIG5kZXYtXHUwMDNlaGNpX2Rldi1cdTAwM2Vpbml0X2RhdGEuZ2F0ZV9jb3VudCxcbm5ldC9uZmMvbmNpL2hjaS5jOjgzMDpcdFx0XHRcdFx0ICAgICAgbmRldi1cdTAwM2VoY2lfZGV2LVx1MDAzZWluaXRfZGF0YS5nYXRlcyk7XG5uZXQvbmZjL25jaS9oY2kuYy04MzEtXHRcdGlmIChyIFx1MDAzYyAwKVxuLS1cbm5ldC9uZmMvbmNpL2hjaS5jLTgzMy1cbm5ldC9uZmMvbmNpL2hjaS5jOjgzNDpcdFx0ciA9IG5jaV9oY2lfc2V0X3BhcmFtKG5kZXYsIE5DSV9IQ0lfQURNSU5fR0FURSxcbm5ldC9uZmMvbmNpL2hjaS5jLTgzNS1cdFx0XHRcdCAgICAgIE5DSV9IQ0lfQURNSU5fUEFSQU1fU0VTU0lPTl9JREVOVElUWSxcbm5ldC9uZmMvbmNpL2hjaS5jOjgzNjpcdFx0XHRcdCAgICAgIG5kZXYtXHUwMDNlaGNpX2Rldi1cdTAwM2Vpbml0X2RhdGEuc2Vzc2lvbl9pZCxcbm5ldC9uZmMvbmNpL2hjaS5jOjgzNzpcdFx0XHRcdCAgICAgIHN0cmxlbihuZGV2LVx1MDAzZWhjaV9kZXYtXHUwMDNlaW5pdF9kYXRhLnNlc3Npb25faWQpKTtcbm5ldC9uZmMvbmNpL2hjaS5jLTgzOC1cdH1cbi0tXG5uZXQvbmZjL25jaS9oY2kuYy04NDQtfVxubmV0L25mYy9uY2kvaGNpLmM6ODQ1OkVYUE9SVF9TWU1CT0wobmNpX2hjaV9kZXZfc2Vzc2lvbl9pbml0KTtcbm5ldC9uZmMvbmNpL2hjaS5jLTg0Ni1cbm5ldC9uZmMvbmNpL2hjaS5jOjg0NzpzdHJ1Y3QgbmNpX2hjaV9kZXYgKm5jaV9oY2lfYWxsb2NhdGUoc3RydWN0IG5jaV9kZXYgKm5kZXYpXG5uZXQvbmZjL25jaS9oY2kuYy04NDgte1xubmV0L25mYy9uY2kvaGNpLmM6ODQ5Olx0c3RydWN0IG5jaV9oY2lfZGV2ICpoZGV2O1xubmV0L25mYy9uY2kvaGNpLmMtODUwLVxuLS1cbm5ldC9uZmMvbmNpL2hjaS5jLTg1NS1cdHNrYl9xdWV1ZV9oZWFkX2luaXQoXHUwMDI2aGRldi1cdTAwM2VyeF9oY3BfZnJhZ3MpO1xubmV0L25mYy9uY2kvaGNpLmM6ODU2Olx0SU5JVF9XT1JLKFx1MDAyNmhkZXYtXHUwMDNlbXNnX3J4X3dvcmssIG5jaV9oY2lfbXNnX3J4X3dvcmspO1xubmV0L25mYy9uY2kvaGNpLmMtODU3LVx0c2tiX3F1ZXVlX2hlYWRfaW5pdChcdTAwMjZoZGV2LVx1MDAzZW1zZ19yeF9xdWV1ZSk7XG4tLVxubmV0L25mYy9uY2kvaGNpLmMtODYyLVxubmV0L25mYy9uY2kvaGNpLmM6ODYzOnZvaWQgbmNpX2hjaV9kZWFsbG9jYXRlKHN0cnVjdCBuY2lfZGV2ICpuZGV2KVxubmV0L25mYy9uY2kvaGNpLmMtODY0LXtcbm5ldC9uZmMvbmNpL2hjaS5jOjg2NTpcdGtmcmVlKG5kZXYtXHUwMDNlaGNpX2Rldik7XG5uZXQvbmZjL25jaS9oY2kuYy04NjYtfVxuLS1cbm5ldC9uZmMvbmNpL250Zi5jLTExLSAqICBBY2tub3dsZWRnZW1lbnRzOlxubmV0L25mYy9uY2kvbnRmLmM6MTI6ICogIFRoaXMgZmlsZSBpcyBiYXNlZCBvbiBoY2lfZXZlbnQuYywgd2hpY2ggd2FzIHdyaXR0ZW5cbm5ldC9uZmMvbmNpL250Zi5jLTEzLSAqICBieSBNYXhpbSBLcmFzbnlhbnNreS5cbi0tXG5uZXQvbmZjL25jaS9udGYuYz05NTQ9c3RhdGljIGludCBuY2lfbmZjZWVfZGlzY292ZXJfbnRmX3BhY2tldChzdHJ1Y3QgbmNpX2RldiAqbmRldixcbi0tXG5uZXQvbmZjL25jaS9udGYuYy05NjktXHQgKi9cbm5ldC9uZmMvbmNpL250Zi5jOjk3MDpcdG5kZXYtXHUwMDNlaGNpX2Rldi1cdTAwM2VuZmNlZV9pZCA9IG5mY2VlX250Zi1cdTAwM2VuZmNlZV9pZDtcbm5ldC9uZmMvbmNpL250Zi5jLTk3MS1cdG5kZXYtXHUwMDNlY3VyX3BhcmFtcy5pZCA9IG5mY2VlX250Zi1cdTAwM2VuZmNlZV9pZDtcbi0tXG5uZXQvbmZjL25jaS9yc3AuYy0xMC0gKiAgQWNrbm93bGVkZ2VtZW50czpcbm5ldC9uZmMvbmNpL3JzcC5jOjExOiAqICBUaGlzIGZpbGUgaXMgYmFzZWQgb24gaGNpX2V2ZW50LmMsIHdoaWNoIHdhcyB3cml0dGVuXG5uZXQvbmZjL25jaS9yc3AuYy0xMi0gKiAgYnkgTWF4aW0gS3Jhc255YW5za3kuXG4tLVxubmV0L25mYy9uY2kvcnNwLmM9Mjg1PXN0YXRpYyB2b2lkIG5jaV9jb3JlX2Nvbm5fY3JlYXRlX3JzcF9wYWNrZXQoc3RydWN0IG5jaV9kZXYgKm5kZXYsXG4tLVxubmV0L25mYy9uY2kvcnNwLmMtMzI2LVxubmV0L25mYy9uY2kvcnNwLmM6MzI3Olx0XHRpZiAobmRldi1cdTAwM2VjdXJfcGFyYW1zLmlkID09IG5kZXYtXHUwMDNlaGNpX2Rldi1cdTAwM2VuZmNlZV9pZClcbm5ldC9uZmMvbmNpL3JzcC5jOjMyODpcdFx0XHRuZGV2LVx1MDAzZWhjaV9kZXYtXHUwMDNlY29ubl9pbmZvID0gY29ubl9pbmZvO1xubmV0L25mYy9uY2kvcnNwLmMtMzI5LVx0XHRzcGluX3VubG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbi0tXG5uZXQvbmZjL25jaS9yc3AuYz0zNDA9c3RhdGljIHZvaWQgbmNpX2NvcmVfY29ubl9jbG9zZV9yc3BfcGFja2V0KHN0cnVjdCBuY2lfZGV2ICpuZGV2LFxuLS1cbm5ldC9uZmMvbmNpL3JzcC5jLTM1NC1cdFx0XHRcdG5kZXYtXHUwMDNlcmZfY29ubl9pbmZvID0gTlVMTDtcbm5ldC9uZmMvbmNpL3JzcC5jOjM1NTpcdFx0XHRpZiAoY29ubl9pbmZvID09IG5kZXYtXHUwMDNlaGNpX2Rldi1cdTAwM2Vjb25uX2luZm8pXG5uZXQvbmZjL25jaS9yc3AuYzozNTY6XHRcdFx0XHRuZGV2LVx1MDAzZWhjaV9kZXYtXHUwMDNlY29ubl9pbmZvID0gTlVMTDtcbm5ldC9uZmMvbmNpL3JzcC5jLTM1Ny1cdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAwOToyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MzIzNAoJCQkJCQkJb3V0cHV0OiAyNjYKCQkJCQkJCXRob3VnaHRzOiAxMTM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk5GQyBOQ0kgQ29uZmlndXJhdGlvbiBhbmQgRnV6emluZyBTdHJhdGVneSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIGZvciB0aGUgTkZDIE5DSSBzdWJzeXN0ZW0uIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gcGlucG9pbnQgd2hlcmUgYG5jaV9oY2lfc2VuZF9jbWRgIGxpdmVzLCBhbmQgaXQmIzM5O3MgaW4gYG5ldC9uZmMvbmNpL2hjaS5jYCwgcGFydCBvZiB0aGUgYE5GQ19OQ0lgIGNvbXBvbmVudC4gVGhlcmVmb3JlLCB0aGF0JiMzOTtzIGRlZmluaXRlbHkgbmVlZGVkLiBJJiMzOTtsbCBza2lwIG92ZXIgYE5GQ19IQ0lgIGJlY2F1c2UgdGhhdCYjMzk7cyBhIGRpZmZlcmVudCBpbXBsZW1lbnRhdGlvbiBpbiBgbmV0L25mYy9oY2kvYC4KClNvLCBmb3IgY29uZmlndXJhdGlvbiwgd2UgbmVlZCBgTkZDYCwgYE5GQ19OQ0lgLCBhbmQgYE5GQ19WSVJUVUFMX05DSWAuIExldCBtZSBkb3VibGUtY2hlY2sgdGhlIGV4YWN0IG5hbWUgb2YgYE5GQ19WSVJUVUFMX05DSWAgYW5kIHllcCwgaXQmIzM5O3MgZGVmaW5lZCBhcyBgQ09ORklHX05GQ19WSVJUVUFMX05DSWAgaW4gYGRyaXZlcnMvbmZjL0tjb25maWdgLgoKTm93LCB0aGUgaW1wb3J0YW50IHBhcnQ6IGZvY3VzIHN5bWJvbHMgZm9yIGZ1enppbmcuIEkgbmVlZCB0byBsaXN0IGZ1bmN0aW9ucyB0aGF0IGFyZSByZWxldmFudCB0byB0aGVzZSBjb25jdXJyZW5jeSBmaXhlcy4gIEkmIzM5O20gdGhpbmtpbmcgb2YgZm9jdXNpbmcgb24gdGhpbmdzIGxpa2UgYG5jaV9uZmNjX2xvb3BiYWNrYCwgYG5jaV90cmFuc2NlaXZlYCwgYG5jaV9zZW5kX2RhdGFgLCBgbmNpX3J4X2RhdGFfcGFja2V0YCwgdGhlIGltcG9ydGFudCBgbmNpX2hjaV9zZW5kX2NtZGAsIGFuZCB0aGVuIGFsc28gYG5jaV9oY2lfc2V0X3BhcmFtYCwgYW5kIGBuY2lfaGNpX2dldF9wYXJhbWAuIEFsc28gY29yZSBmdW5jdGlvbnMgc3VjaCBhcyBgbmNpX2NvcmVfY29ubl9jcmVhdGVfcnNwX3BhY2tldGAsIGBuY2lfY29yZV9jb25uX2Nsb3NlX3JzcF9wYWNrZXRgLCBhbmQgYG5jaV9yZl9kaXNjX3JzcF9wYWNrZXRgLgoKQSBjcnVjaWFsIHBvaW50IGlzIHdoZXRoZXIgYG5jaV9jb3JlX2Nvbm5fY3JlYXRlX3JzcF9wYWNrZXRgIGlzIHN0YXRpYyBvciBleHBvcnRlZC4gSXQgdHVybnMgb3V0IHRvIGJlIHN0YXRpYywgYnV0IHN5emthbGxlciBjYW4gc3RpbGwgcmVhY2ggaXQgdGhyb3VnaCBgbmNpX3JzcF9wYWNrZXRgLCB3aGljaCBpbiB0dXJuIGlzIGNhbGxlZCBmcm9tIGBuY2lfcnhfd29ya2Agd2hlbiBkYXRhIGNvbWVzIGZyb20gdGhlIE5GQyBjb250cm9sbGVyLiAgQmVjYXVzZSBgTkZDX1ZJUlRVQUxfTkNJYCBhbGxvd3Mgc2ltdWxhdGluZyBhbiBORkMgY29udHJvbGxlciwgd2UgY2FuIGluamVjdCByZXNwb25zZXMgYW5kIHRyaWdnZXIgYG5jaV9jb3JlX2Nvbm5fY3JlYXRlX3JzcF9wYWNrZXRgIGluZGlyZWN0bHkuIFRoZXJlZm9yZSwgSSBjYW4gc3RpbGwgbGlzdCBwYWNrZXQgaGFuZGxlcnMgaW4gZm9jdXMgc3ltYm9scy4gRXZlbiB0aG91Z2ggdGhleSBhcmUgc3RhdGljLCBzeXprYWxsZXIgd2lsbCBzdGlsbCBiZSBhYmxlIHRvIGZ1enogaXQgdmlhIGtjb3YuCgpMZXQmIzM5O3MgZXhwYW5kIHRoYXQgbGlzdCB3aXRoIGEgZmV3IG1vcmUgcGFja2V0IGhhbmRsZXJzIHRvIGVuc3VyZSBmdWxsIGNvdmVyYWdlOiBJJiMzOTttIGFkZGluZyBgbmNpX2NvcmVfY29ubl9jcmVkaXRzX250Zl9wYWNrZXRgLCBgbmNpX3JmX2ludGZfYWN0aXZhdGVkX250Zl9wYWNrZXRgIGFuZCBgbmNpX3JmX2RlYWN0aXZhdGVfbnRmX3BhY2tldGAuCgpTbyBoZXJlIGlzIHRoZSBmdWxsIGxpc3Q6IGBuY2lfbmZjY19sb29wYmFja2AsIGBuY2lfdHJhbnNjZWl2ZWAsIGBuY2lfc2VuZF9kYXRhYCwgYG5jaV9yeF9kYXRhX3BhY2tldGAsIGBuY2lfaGNpX3NlbmRfY21kYCwgYG5jaV9oY2lfc2V0X3BhcmFtYCwgYG5jaV9oY2lfZ2V0X3BhcmFtYCwgYG5jaV9jb3JlX2Nvbm5fY3JlYXRlX3JzcF9wYWNrZXRgLCBgbmNpX2NvcmVfY29ubl9jbG9zZV9yc3BfcGFja2V0YCwgYG5jaV9yZl9kaXNjX3JzcF9wYWNrZXRgLCBgbmNpX2NvcmVfY29ubl9jcmVkaXRzX250Zl9wYWNrZXRgLCBgbmNpX3JmX2ludGZfYWN0aXZhdGVkX250Zl9wYWNrZXRgLCBhbmQgYG5jaV9yZl9kZWFjdGl2YXRlX250Zl9wYWNrZXRgLiBJdCBzZWVtcyB0aGlzIGlzIGEgZ29vZCBsaXN0IG9mIGZ1bmN0aW9ucyB0aGF0IHdlcmUgdG91Y2hlZCBpbiB0aGlzIHBhdGNoLgoKSSB3aWxsIGRvdWJsZS1jaGVjayBhZ2FpbiB0aGF0IGBORkNfVklSVFVBTF9OQ0lgIGlzIHRoZSByaWdodCBjb25maWd1cmF0aW9uIG9wdGlvbiwgYW5kIHllcywgYGRyaXZlcnMvbmZjL0tjb25maWdgIGNvbmZpcm1zIHRoYXQgaXQgZGVwZW5kcyBvbiBgTkZDX05DSWAuCgpJJiMzOTtsbCBhbHNvIG1ha2Ugc3VyZSBubyBvdGhlciBjb25maWd1cmF0aW9ucyBhcmUgcmVxdWlyZWQuIEl0IGxvb2tzIGxpa2UgYE5GQ2AgYW5kIGBORkNfTkNJYCBhcmUgbmVjZXNzYXJ5IGFzIHdlbGwuIGBORkNfVklSVFVBTF9OQ0lgIGhhcyBhIGRlcGVuZGVuY3kgb24gYE5GQ19OQ0lgLgoKVGhlcmVmb3JlLCB0aGUgZmluYWwgc2V0dXAgaXM6CgoqICAgKipXb3J0aEZ1enppbmc6KiogYHRydWVgCiogICAqKkZvY3VzU3ltYm9sczoqKgogICAgKiAgIGBuY2lfbmZjY19sb29wYmFja2AKICAgICogICBgbmNpX3RyYW5zY2VpdmVgCiAgICAqICAgYG5jaV9zZW5kX2RhdGFgCiAgICAqICAgYG5jaV9yeF9kYXRhX3BhY2tldGAKICAgICogICBgbmNpX2hjaV9zZW5kX2NtZGAKICAgICogICBgbmNpX2hjaV9zZXRfcGFyYW1gCiAgICAqICAgYG5jaV9oY2lfZ2V0X3BhcmFtYAogICAgKiAgIGBuY2lfY29yZV9jb25uX2NyZWF0ZV9yc3BfcGFja2V0YAogICAgKiAgIGBuY2lfY29yZV9jb25uX2Nsb3NlX3JzcF9wYWNrZXRgCiAgICAqICAgYG5jaV9yZl9kaXNjX3JzcF9wYWNrZXRgCiAgICAqICAgYG5jaV9jb3JlCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMDk6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GQyYjMzQ7LAogICAgJiMzNDtORkNfTkNJJiMzNDssCiAgICAmIzM0O05GQ19WSVJUVUFMX05DSSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25jaV9uZmNjX2xvb3BiYWNrJiMzNDssCiAgICAmIzM0O25jaV90cmFuc2NlaXZlJiMzNDssCiAgICAmIzM0O25jaV9zZW5kX2RhdGEmIzM0OywKICAgICYjMzQ7bmNpX3J4X2RhdGFfcGFja2V0JiMzNDssCiAgICAmIzM0O25jaV9oY2lfc2VuZF9jbWQmIzM0OywKICAgICYjMzQ7bmNpX2hjaV9zZXRfcGFyYW0mIzM0OywKICAgICYjMzQ7bmNpX2hjaV9nZXRfcGFyYW0mIzM0OywKICAgICYjMzQ7bmNpX2NvcmVfY29ubl9jcmVhdGVfcnNwX3BhY2tldCYjMzQ7LAogICAgJiMzNDtuY2lfY29yZV9jb25uX2Nsb3NlX3JzcF9wYWNrZXQmIzM0OywKICAgICYjMzQ7bmNpX3JmX2Rpc2NfcnNwX3BhY2tldCYjMzQ7LAogICAgJiMzNDtuY2lfY29yZV9jb25uX2NyZWRpdHNfbnRmX3BhY2tldCYjMzQ7LAogICAgJiMzNDtuY2lfcmZfaW50Zl9hY3RpdmF0ZWRfbnRmX3BhY2tldCYjMzQ7LAogICAgJiMzNDtuY2lfcmZfZGVhY3RpdmF0ZV9udGZfcGFja2V0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGNvbmN1cnJlbmN5IGlzc3VlcyBpbiB0aGUgTkZDIE5DSSBjb3JlIGJ5IGludHJvZHVjaW5nIGEgc3BpbmxvY2sgdG8gcHJvdGVjdCBjb25uZWN0aW9uIGluZm8gbGlzdHMgYW5kIHBvaW50ZXJzLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIGRhdGEgdHJhbnNtaXNzaW9uLCByZWNlcHRpb24sIGFuZCBIQ0kgY29tbWFuZCBoYW5kbGluZywgd2hpY2ggYXJlIHJlYWNoYWJsZSB2aWEgdGhlIHZpcnR1YWwgTkNJIGRyaXZlci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkZDJiMzNDssCiAgICAmIzM0O05GQ19OQ0kmIzM0OywKICAgICYjMzQ7TkZDX1ZJUlRVQUxfTkNJJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmNpX25mY2NfbG9vcGJhY2smIzM0OywKICAgICYjMzQ7bmNpX3RyYW5zY2VpdmUmIzM0OywKICAgICYjMzQ7bmNpX3NlbmRfZGF0YSYjMzQ7LAogICAgJiMzNDtuY2lfcnhfZGF0YV9wYWNrZXQmIzM0OywKICAgICYjMzQ7bmNpX2hjaV9zZW5kX2NtZCYjMzQ7LAogICAgJiMzNDtuY2lfaGNpX3NldF9wYXJhbSYjMzQ7LAogICAgJiMzNDtuY2lfaGNpX2dldF9wYXJhbSYjMzQ7LAogICAgJiMzNDtuY2lfY29yZV9jb25uX2NyZWF0ZV9yc3BfcGFja2V0JiMzNDssCiAgICAmIzM0O25jaV9jb3JlX2Nvbm5fY2xvc2VfcnNwX3BhY2tldCYjMzQ7LAogICAgJiMzNDtuY2lfcmZfZGlzY19yc3BfcGFja2V0JiMzNDssCiAgICAmIzM0O25jaV9jb3JlX2Nvbm5fY3JlZGl0c19udGZfcGFja2V0JiMzNDssCiAgICAmIzM0O25jaV9yZl9pbnRmX2FjdGl2YXRlZF9udGZfcGFja2V0JiMzNDssCiAgICAmIzM0O25jaV9yZl9kZWFjdGl2YXRlX250Zl9wYWNrZXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgY29uY3VycmVuY3kgaXNzdWVzIGluIHRoZSBORkMgTkNJIGNvcmUgYnkgaW50cm9kdWNpbmcgYSBzcGlubG9jayB0byBwcm90ZWN0IGNvbm5lY3Rpb24gaW5mbyBsaXN0cyBhbmQgcG9pbnRlcnMuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGNvcmUgZGF0YSB0cmFuc21pc3Npb24sIHJlY2VwdGlvbiwgYW5kIEhDSSBjb21tYW5kIGhhbmRsaW5nLCB3aGljaCBhcmUgcmVhY2hhYmxlIHZpYSB0aGUgdmlydHVhbCBOQ0kgZHJpdmVyLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDk6MjU6MzEuNjg2NDc3OTA4WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODg1NzU1NTkyNDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZDXCIsXG4gICAgXCJORkNfTkNJXCIsXG4gICAgXCJORkNfVklSVFVBTF9OQ0lcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuY2lfbmZjY19sb29wYmFja1wiLFxuICAgIFwibmNpX3RyYW5zY2VpdmVcIixcbiAgICBcIm5jaV9zZW5kX2RhdGFcIixcbiAgICBcIm5jaV9yeF9kYXRhX3BhY2tldFwiLFxuICAgIFwibmNpX2hjaV9zZW5kX2NtZFwiLFxuICAgIFwibmNpX2hjaV9zZXRfcGFyYW1cIixcbiAgICBcIm5jaV9oY2lfZ2V0X3BhcmFtXCIsXG4gICAgXCJuY2lfY29yZV9jb25uX2NyZWF0ZV9yc3BfcGFja2V0XCIsXG4gICAgXCJuY2lfY29yZV9jb25uX2Nsb3NlX3JzcF9wYWNrZXRcIixcbiAgICBcIm5jaV9yZl9kaXNjX3JzcF9wYWNrZXRcIixcbiAgICBcIm5jaV9jb3JlX2Nvbm5fY3JlZGl0c19udGZfcGFja2V0XCIsXG4gICAgXCJuY2lfcmZfaW50Zl9hY3RpdmF0ZWRfbnRmX3BhY2tldFwiLFxuICAgIFwibmNpX3JmX2RlYWN0aXZhdGVfbnRmX3BhY2tldFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGNvbmN1cnJlbmN5IGlzc3VlcyBpbiB0aGUgTkZDIE5DSSBjb3JlIGJ5IGludHJvZHVjaW5nIGEgc3BpbmxvY2sgdG8gcHJvdGVjdCBjb25uZWN0aW9uIGluZm8gbGlzdHMgYW5kIHBvaW50ZXJzLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIGRhdGEgdHJhbnNtaXNzaW9uLCByZWNlcHRpb24sIGFuZCBIQ0kgY29tbWFuZCBoYW5kbGluZywgd2hpY2ggYXJlIHJlYWNoYWJsZSB2aWEgdGhlIHZpcnR1YWwgTkNJIGRyaXZlci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDk6MjU6MzEuNjg2NDg3MjM3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5OTY3MDYzNzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBhZTU1ZTg4ZDdhNGY3MTA1YjQ0ODY4MjJlM2FkZjUzODhmMWI4YTAwXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgSnVuIDMwIDA5OjI1OjI5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmZjL3N0LW5jaS9zZS5jIGIvZHJpdmVycy9uZmMvc3QtbmNpL3NlLmNcXG5pbmRleCA2MDdlYzc2OGViN2I0Yy4uMWY4ZTIyNjVlMjBiMDcgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZmMvc3QtbmNpL3NlLmNcXG4rKysgYi9kcml2ZXJzL25mYy9zdC1uY2kvc2UuY1xcbkBAIC01NDgsNiArNTQ4LDcgQEAgc3RhdGljIGludCBzdF9uY2lfaGNpX25ldHdvcmtfaW5pdChzdHJ1Y3QgbmNpX2RldiAqbmRldilcXG4gXFx0c3RydWN0IGNvcmVfY29ubl9jcmVhdGVfZGVzdF9zcGVjX3BhcmFtcyAqZGVzdF9wYXJhbXM7XFxuIFxcdHN0cnVjdCBkZXN0X3NwZWNfcGFyYW1zIHNwZWNfcGFyYW1zO1xcbiBcXHRzdHJ1Y3QgbmNpX2Nvbm5faW5mbyAgICAqY29ubl9pbmZvO1xcbitcXHR1OCBuZmNlZV9pZDtcXG4gXFx0aW50IHIsIGRldl9udW07XFxuIFxcbiBcXHRkZXN0X3BhcmFtcyA9XFxuQEAgLTU2OSw5ICs1NzAsMTQgQEAgc3RhdGljIGludCBzdF9uY2lfaGNpX25ldHdvcmtfaW5pdChzdHJ1Y3QgbmNpX2RldiAqbmRldilcXG4gXFx0aWYgKHIgIT0gTkNJX1NUQVRVU19PSylcXG4gXFx0XFx0Z290byBmcmVlX2Rlc3RfcGFyYW1zO1xcbiBcXG4rXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZuZGV2LVxcdTAwM2Vjb25uX2luZm9fbG9jayk7XFxuIFxcdGNvbm5faW5mbyA9IG5kZXYtXFx1MDAzZWhjaV9kZXYtXFx1MDAzZWNvbm5faW5mbztcXG4tXFx0aWYgKCFjb25uX2luZm8pXFxuK1xcdGlmICghY29ubl9pbmZvKSB7XFxuK1xcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZuZGV2LVxcdTAwM2Vjb25uX2luZm9fbG9jayk7XFxuIFxcdFxcdGdvdG8gZnJlZV9kZXN0X3BhcmFtcztcXG4rXFx0fVxcbitcXHRuZmNlZV9pZCA9IGNvbm5faW5mby1cXHUwMDNlZGVzdF9wYXJhbXMtXFx1MDAzZWlkO1xcbitcXHRzcGluX3VubG9ja19iaChcXHUwMDI2bmRldi1cXHUwMDNlY29ubl9pbmZvX2xvY2spO1xcbiBcXG4gXFx0bmRldi1cXHUwMDNlaGNpX2Rldi1cXHUwMDNlaW5pdF9kYXRhLmdhdGVfY291bnQgPSBBUlJBWV9TSVpFKHN0X25jaV9nYXRlcyk7XFxuIFxcdG1lbWNweShuZGV2LVxcdTAwM2VoY2lfZGV2LVxcdTAwM2Vpbml0X2RhdGEuZ2F0ZXMsIHN0X25jaV9nYXRlcyxcXG5AQCAtNjAxLDEzICs2MDcsOSBAQCBzdGF0aWMgaW50IHN0X25jaV9oY2lfbmV0d29ya19pbml0KHN0cnVjdCBuY2lfZGV2ICpuZGV2KVxcbiBcXHQgKiBIQ0kgd2lsbCBiZSB1c2VkIGhlcmUgb25seSBmb3IgcHJvcHJpZXRhcnkgY29tbWFuZHMuXFxuIFxcdCAqL1xcbiBcXHRpZiAodGVzdF9iaXQoU1RfTkNJX0ZBQ1RPUllfTU9ERSwgXFx1MDAyNmluZm8tXFx1MDAzZWZsYWdzKSlcXG4tXFx0XFx0ciA9IG5jaV9uZmNlZV9tb2RlX3NldChuZGV2LFxcbi1cXHRcXHRcXHRcXHQgICAgICAgbmRldi1cXHUwMDNlaGNpX2Rldi1cXHUwMDNlY29ubl9pbmZvLVxcdTAwM2VkZXN0X3BhcmFtcy1cXHUwMDNlaWQsXFxuLVxcdFxcdFxcdFxcdCAgICAgICBOQ0lfTkZDRUVfRElTQUJMRSk7XFxuK1xcdFxcdHIgPSBuY2lfbmZjZWVfbW9kZV9zZXQobmRldiwgbmZjZWVfaWQsIE5DSV9ORkNFRV9ESVNBQkxFKTtcXG4gXFx0ZWxzZVxcbi1cXHRcXHRyID0gbmNpX25mY2VlX21vZGVfc2V0KG5kZXYsXFxuLVxcdFxcdFxcdFxcdCAgICAgICBuZGV2LVxcdTAwM2VoY2lfZGV2LVxcdTAwM2Vjb25uX2luZm8tXFx1MDAzZWRlc3RfcGFyYW1zLVxcdTAwM2VpZCxcXG4tXFx0XFx0XFx0XFx0ICAgICAgIE5DSV9ORkNFRV9FTkFCTEUpO1xcbitcXHRcXHRyID0gbmNpX25mY2VlX21vZGVfc2V0KG5kZXYsIG5mY2VlX2lkLCBOQ0lfTkZDRUVfRU5BQkxFKTtcXG4gXFxuIGZyZWVfZGVzdF9wYXJhbXM6XFxuIFxcdGtmcmVlKGRlc3RfcGFyYW1zKTtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmZjL25jaV9jb3JlLmggYi9pbmNsdWRlL25ldC9uZmMvbmNpX2NvcmUuaFxcbmluZGV4IDY2NGQ1MDU4ZTY2ZTAxLi5hNWIxODZmMjczZDk3NCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL25ldC9uZmMvbmNpX2NvcmUuaFxcbisrKyBiL2luY2x1ZGUvbmV0L25mYy9uY2lfY29yZS5oXFxuQEAgLTE5LDYgKzE5LDcgQEBcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pbnRlcnJ1cHQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NrYnVmZi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvc3BpbmxvY2suaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3R0eS5oXFx1MDAzZVxcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9uZmMvbmZjLmhcXHUwMDNlXFxuQEAgLTIyNyw2ICsyMjgsOCBAQCBzdHJ1Y3QgbmNpX2RldiB7XFxuIFxcdHN0cnVjdCBza19idWZmX2hlYWRcXHR0eF9xO1xcbiBcXG4gXFx0c3RydWN0IG11dGV4XFx0XFx0cmVxX2xvY2s7XFxuK1xcdC8qIFNlcmlhbGl6ZXMgY29ubl9pbmZvX2xpc3QgYW5kIGNvbm5faW5mbyBwb2ludGVyIGFsaWFzIHVwZGF0ZXMuICovXFxuK1xcdHNwaW5sb2NrX3RcXHRcXHRjb25uX2luZm9fbG9jaztcXG4gXFx0c3RydWN0IGNvbXBsZXRpb25cXHRyZXFfY29tcGxldGlvbjtcXG4gXFx0X191MzJcXHRcXHRcXHRyZXFfc3RhdHVzO1xcbiBcXHRfX3UzMlxcdFxcdFxcdHJlcV9yZXN1bHQ7XFxuQEAgLTM4Miw4ICszODUsMTEgQEAgdm9pZCBuY2lfY2xlYXJfdGFyZ2V0X2xpc3Qoc3RydWN0IG5jaV9kZXYgKm5kZXYpO1xcbiAjZGVmaW5lIE5DSV9SRVFfQ0FOQ0VMRURcXHQyXFxuIFxcbiB2b2lkIG5jaV9yZXFfY29tcGxldGUoc3RydWN0IG5jaV9kZXYgKm5kZXYsIGludCByZXN1bHQpO1xcbi1zdHJ1Y3QgbmNpX2Nvbm5faW5mbyAqbmNpX2dldF9jb25uX2luZm9fYnlfY29ubl9pZChzdHJ1Y3QgbmNpX2RldiAqbmRldixcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgaW50IGNvbm5faWQpO1xcbitzdHJ1Y3QgbmNpX2Nvbm5faW5mbyAqbmNpX2dldF9jb25uX2luZm9fYnlfY29ubl9pZF9sb2NrZWQoc3RydWN0IG5jaV9kZXYgKm5kZXYsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgaW50IGNvbm5faWQpO1xcbitpbnQgbmNpX2dldF9jb25uX2luZm9fYnlfZGVzdF90eXBlX3BhcmFtc19sb2NrZWQoc3RydWN0IG5jaV9kZXYgKm5kZXYsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCB1OCBkZXN0X3R5cGUsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgZGVzdF9zcGVjX3BhcmFtcyAqcGFyYW1zKTtcXG4gaW50IG5jaV9nZXRfY29ubl9pbmZvX2J5X2Rlc3RfdHlwZV9wYXJhbXMoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHU4IGRlc3RfdHlwZSxcXG4gXFx0XFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgZGVzdF9zcGVjX3BhcmFtcyAqcGFyYW1zKTtcXG4gXFxuZGlmZiAtLWdpdCBhL25ldC9uZmMvbmNpL2NvcmUuYyBiL25ldC9uZmMvbmNpL2NvcmUuY1xcbmluZGV4IDVmNDZjNGI1NzIwZjZjLi41NzU5NWE4MjljOGIwNiAxMDA2NDRcXG4tLS0gYS9uZXQvbmZjL25jaS9jb3JlLmNcXG4rKysgYi9uZXQvbmZjL25jaS9jb3JlLmNcXG5AQCAtNDAsOCArNDAsOCBAQCBzdGF0aWMgdm9pZCBuY2lfY21kX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcXG4gc3RhdGljIHZvaWQgbmNpX3J4X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcXG4gc3RhdGljIHZvaWQgbmNpX3R4X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcXG4gXFxuLXN0cnVjdCBuY2lfY29ubl9pbmZvICpuY2lfZ2V0X2Nvbm5faW5mb19ieV9jb25uX2lkKHN0cnVjdCBuY2lfZGV2ICpuZGV2LFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICBpbnQgY29ubl9pZClcXG4rc3RydWN0IG5jaV9jb25uX2luZm8gKm5jaV9nZXRfY29ubl9pbmZvX2J5X2Nvbm5faWRfbG9ja2VkKHN0cnVjdCBuY2lfZGV2ICpuZGV2LFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIGludCBjb25uX2lkKVxcbiB7XFxuIFxcdHN0cnVjdCBuY2lfY29ubl9pbmZvICpjb25uX2luZm87XFxuIFxcbkBAIC01Myw4ICs1Myw5IEBAIHN0cnVjdCBuY2lfY29ubl9pbmZvICpuY2lfZ2V0X2Nvbm5faW5mb19ieV9jb25uX2lkKHN0cnVjdCBuY2lfZGV2ICpuZGV2LFxcbiBcXHRyZXR1cm4gTlVMTDtcXG4gfVxcbiBcXG4taW50IG5jaV9nZXRfY29ubl9pbmZvX2J5X2Rlc3RfdHlwZV9wYXJhbXMoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHU4IGRlc3RfdHlwZSxcXG4tXFx0XFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgZGVzdF9zcGVjX3BhcmFtcyAqcGFyYW1zKVxcbitpbnQgbmNpX2dldF9jb25uX2luZm9fYnlfZGVzdF90eXBlX3BhcmFtc19sb2NrZWQoc3RydWN0IG5jaV9kZXYgKm5kZXYsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCB1OCBkZXN0X3R5cGUsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgZGVzdF9zcGVjX3BhcmFtcyAqcGFyYW1zKVxcbiB7XFxuIFxcdGNvbnN0IHN0cnVjdCBuY2lfY29ubl9pbmZvICpjb25uX2luZm87XFxuIFxcbkBAIC03MSw2ICs3MiwxOSBAQCBpbnQgbmNpX2dldF9jb25uX2luZm9fYnlfZGVzdF90eXBlX3BhcmFtcyhzdHJ1Y3QgbmNpX2RldiAqbmRldiwgdTggZGVzdF90eXBlLFxcbiBcXG4gXFx0cmV0dXJuIC1FSU5WQUw7XFxuIH1cXG4rXFxuK2ludCBuY2lfZ2V0X2Nvbm5faW5mb19ieV9kZXN0X3R5cGVfcGFyYW1zKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCB1OCBkZXN0X3R5cGUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IGRlc3Rfc3BlY19wYXJhbXMgKnBhcmFtcylcXG4re1xcbitcXHRpbnQgY29ubl9pZDtcXG4rXFxuK1xcdHNwaW5fbG9ja19iaChcXHUwMDI2bmRldi1cXHUwMDNlY29ubl9pbmZvX2xvY2spO1xcbitcXHRjb25uX2lkID0gbmNpX2dldF9jb25uX2luZm9fYnlfZGVzdF90eXBlX3BhcmFtc19sb2NrZWQobmRldiwgZGVzdF90eXBlLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgcGFyYW1zKTtcXG4rXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNm5kZXYtXFx1MDAzZWNvbm5faW5mb19sb2NrKTtcXG4rXFxuK1xcdHJldHVybiBjb25uX2lkO1xcbit9XFxuIEVYUE9SVF9TWU1CT0wobmNpX2dldF9jb25uX2luZm9fYnlfZGVzdF90eXBlX3BhcmFtcyk7XFxuIFxcbiAvKiAtLS0tIE5DSSByZXF1ZXN0cyAtLS0tICovXFxuQEAgLTQxMSwxMyArNDI1LDE3IEBAIHN0YXRpYyB2b2lkIG5jaV9uZmNjX2xvb3BiYWNrX2NiKHZvaWQgKmNvbnRleHQsIHN0cnVjdCBza19idWZmICpza2IsIGludCBlcnIpXFxuIFxcdHN0cnVjdCBuY2lfZGV2ICpuZGV2ID0gKHN0cnVjdCBuY2lfZGV2ICopY29udGV4dDtcXG4gXFx0c3RydWN0IG5jaV9jb25uX2luZm8gKmNvbm5faW5mbztcXG4gXFxuLVxcdGNvbm5faW5mbyA9IG5jaV9nZXRfY29ubl9pbmZvX2J5X2Nvbm5faWQobmRldiwgbmRldi1cXHUwMDNlY3VyX2Nvbm5faWQpO1xcbitcXHRzcGluX2xvY2tfYmgoXFx1MDAyNm5kZXYtXFx1MDAzZWNvbm5faW5mb19sb2NrKTtcXG4rXFx0Y29ubl9pbmZvID0gbmNpX2dldF9jb25uX2luZm9fYnlfY29ubl9pZF9sb2NrZWQobmRldixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0bmRldi1cXHUwMDNlY3VyX2Nvbm5faWQpO1xcbiBcXHRpZiAoIWNvbm5faW5mbykge1xcbitcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2bmRldi1cXHUwMDNlY29ubl9pbmZvX2xvY2spO1xcbiBcXHRcXHRuY2lfcmVxX2NvbXBsZXRlKG5kZXYsIE5DSV9TVEFUVVNfUkVKRUNURUQpO1xcbiBcXHRcXHRyZXR1cm47XFxuIFxcdH1cXG4gXFxuIFxcdGNvbm5faW5mby1cXHUwMDNlcnhfc2tiID0gc2tiO1xcbitcXHRzcGluX3VubG9ja19iaChcXHUwMDI2bmRldi1cXHUwMDNlY29ubl9pbmZvX2xvY2spO1xcbiBcXG4gXFx0bmNpX3JlcV9jb21wbGV0ZShuZGV2LCBOQ0lfU1RBVFVTX09LKTtcXG4gfVxcbkBAIC00NDMsMTMgKzQ2MSwxNyBAQCBpbnQgbmNpX25mY2NfbG9vcGJhY2soc3RydWN0IG5jaV9kZXYgKm5kZXYsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBkYXRhX2xlbixcXG4gXFx0XFx0XFx0XFx0XFx0TlVMTCk7XFxuIFxcdH1cXG4gXFxuLVxcdGNvbm5faW5mbyA9IG5jaV9nZXRfY29ubl9pbmZvX2J5X2Nvbm5faWQobmRldiwgY29ubl9pZCk7XFxuLVxcdGlmICghY29ubl9pbmZvKVxcbitcXHRzcGluX2xvY2tfYmgoXFx1MDAyNm5kZXYtXFx1MDAzZWNvbm5faW5mb19sb2NrKTtcXG4rXFx0Y29ubl9pbmZvID0gbmNpX2dldF9jb25uX2luZm9fYnlfY29ubl9pZF9sb2NrZWQobmRldiwgY29ubl9pZCk7XFxuK1xcdGlmICghY29ubl9pbmZvKSB7XFxuK1xcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZuZGV2LVxcdTAwM2Vjb25uX2luZm9fbG9jayk7XFxuIFxcdFxcdHJldHVybiAtRVBST1RPO1xcbitcXHR9XFxuIFxcbiBcXHQvKiBzdG9yZSBjYiBhbmQgY29udGV4dCB0byBiZSB1c2VkIG9uIHJlY2VpdmluZyBkYXRhICovXFxuIFxcdGNvbm5faW5mby1cXHUwMDNlZGF0YV9leGNoYW5nZV9jYiA9IG5jaV9uZmNjX2xvb3BiYWNrX2NiO1xcbiBcXHRjb25uX2luZm8tXFx1MDAzZWRhdGFfZXhjaGFuZ2VfY2JfY29udGV4dCA9IG5kZXY7XFxuK1xcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZuZGV2LVxcdTAwM2Vjb25uX2luZm9fbG9jayk7XFxuIFxcbiBcXHRza2IgPSBuY2lfc2tiX2FsbG9jKG5kZXYsIE5DSV9EQVRBX0hEUl9TSVpFICsgZGF0YV9sZW4sIEdGUF9LRVJORUwpO1xcbiBcXHRpZiAoIXNrYilcXG5AQCAtNDY0LDggKzQ4NiwxNSBAQCBpbnQgbmNpX25mY2NfbG9vcGJhY2soc3RydWN0IG5jaV9kZXYgKm5kZXYsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBkYXRhX2xlbixcXG4gXFx0bmRldi1cXHUwMDNlY3VyX2Nvbm5faWQgPSBjb25uX2lkO1xcbiBcXHRyID0gbmNpX3JlcXVlc3QobmRldiwgbmNpX3NlbmRfZGF0YV9yZXEsIFxcdTAwMjZsb29wYmFja19kYXRhLFxcbiBcXHRcXHRcXHRtc2Vjc190b19qaWZmaWVzKE5DSV9EQVRBX1RJTUVPVVQpKTtcXG4tXFx0aWYgKHIgPT0gTkNJX1NUQVRVU19PSyBcXHUwMDI2XFx1MDAyNiByZXNwKVxcbi1cXHRcXHQqcmVzcCA9IGNvbm5faW5mby1cXHUwMDNlcnhfc2tiO1xcbitcXHRpZiAociA9PSBOQ0lfU1RBVFVTX09LIFxcdTAwMjZcXHUwMDI2IHJlc3ApIHtcXG4rXFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZuZGV2LVxcdTAwM2Vjb25uX2luZm9fbG9jayk7XFxuK1xcdFxcdGNvbm5faW5mbyA9IG5jaV9nZXRfY29ubl9pbmZvX2J5X2Nvbm5faWRfbG9ja2VkKG5kZXYsIGNvbm5faWQpO1xcbitcXHRcXHRpZiAoY29ubl9pbmZvKVxcbitcXHRcXHRcXHQqcmVzcCA9IGNvbm5faW5mby1cXHUwMDNlcnhfc2tiO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdHIgPSAtRVBST1RPO1xcbitcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2bmRldi1cXHUwMDNlY29ubl9pbmZvX2xvY2spO1xcbitcXHR9XFxuIFxcbiBcXHRyZXR1cm4gcjtcXG4gfVxcbkBAIC0xMDQ1LDEyICsxMDc0LDYgQEAgc3RhdGljIGludCBuY2lfdHJhbnNjZWl2ZShzdHJ1Y3QgbmZjX2RldiAqbmZjX2Rldiwgc3RydWN0IG5mY190YXJnZXQgKnRhcmdldCxcXG4gXFx0aW50IHJjO1xcbiBcXHRzdHJ1Y3QgbmNpX2Nvbm5faW5mbyAqY29ubl9pbmZvO1xcbiBcXG4tXFx0Y29ubl9pbmZvID0gbmRldi1cXHUwMDNlcmZfY29ubl9pbmZvO1xcbi1cXHRpZiAoIWNvbm5faW5mbykge1xcbi1cXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4tXFx0XFx0cmV0dXJuIC1FUFJPVE87XFxuLVxcdH1cXG4tXFxuIFxcdHByX2RlYnVnKFxcXCJ0YXJnZXRfaWR4ICVkLCBsZW4gJWRcXFxcblxcXCIsIHRhcmdldC1cXHUwMDNlaWR4LCBza2ItXFx1MDAzZWxlbik7XFxuIFxcbiBcXHRpZiAoIW5kZXYtXFx1MDAzZXRhcmdldF9hY3RpdmVfcHJvdCkge1xcbkBAIC0xMDY0LDkgKzEwODcsMTkgQEAgc3RhdGljIGludCBuY2lfdHJhbnNjZWl2ZShzdHJ1Y3QgbmZjX2RldiAqbmZjX2Rldiwgc3RydWN0IG5mY190YXJnZXQgKnRhcmdldCxcXG4gXFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4gXFx0fVxcbiBcXG4rXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZuZGV2LVxcdTAwM2Vjb25uX2luZm9fbG9jayk7XFxuK1xcdGNvbm5faW5mbyA9IG5kZXYtXFx1MDAzZXJmX2Nvbm5faW5mbztcXG4rXFx0aWYgKCFjb25uX2luZm8pIHtcXG4rXFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNm5kZXYtXFx1MDAzZWNvbm5faW5mb19sb2NrKTtcXG4rXFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuK1xcdFxcdGNsZWFyX2JpdChOQ0lfREFUQV9FWENIQU5HRSwgXFx1MDAyNm5kZXYtXFx1MDAzZWZsYWdzKTtcXG4rXFx0XFx0cmV0dXJuIC1FUFJPVE87XFxuK1xcdH1cXG4rXFxuIFxcdC8qIHN0b3JlIGNiIGFuZCBjb250ZXh0IHRvIGJlIHVzZWQgb24gcmVjZWl2aW5nIGRhdGEgKi9cXG4gXFx0Y29ubl9pbmZvLVxcdTAwM2VkYXRhX2V4Y2hhbmdlX2NiID0gY2I7XFxuIFxcdGNvbm5faW5mby1cXHUwMDNlZGF0YV9leGNoYW5nZV9jYl9jb250ZXh0ID0gY2JfY29udGV4dDtcXG4rXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNm5kZXYtXFx1MDAzZWNvbm5faW5mb19sb2NrKTtcXG4gXFxuIFxcdHJjID0gbmNpX3NlbmRfZGF0YShuZGV2LCBOQ0lfU1RBVElDX1JGX0NPTk5fSUQsIHNrYik7XFxuIFxcdGlmIChyYylcXG5AQCAtMTI4OCw2ICsxMzIxLDcgQEAgaW50IG5jaV9yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IG5jaV9kZXYgKm5kZXYpXFxuIFxcdHRpbWVyX3NldHVwKFxcdTAwMjZuZGV2LVxcdTAwM2VkYXRhX3RpbWVyLCBuY2lfZGF0YV90aW1lciwgMCk7XFxuIFxcbiBcXHRtdXRleF9pbml0KFxcdTAwMjZuZGV2LVxcdTAwM2VyZXFfbG9jayk7XFxuK1xcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZuZGV2LVxcdTAwM2Vjb25uX2luZm9fbG9jayk7XFxuIFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZuZGV2LVxcdTAwM2Vjb25uX2luZm9fbGlzdCk7XFxuIFxcbiBcXHRyYyA9IG5mY19yZWdpc3Rlcl9kZXZpY2UobmRldi1cXHUwMDNlbmZjX2Rldik7XFxuQEAgLTEzMzMsMTEgKzEzNjcsMTYgQEAgdm9pZCBuY2lfdW5yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IG5jaV9kZXYgKm5kZXYpXFxuIFxcdGRlc3Ryb3lfd29ya3F1ZXVlKG5kZXYtXFx1MDAzZXJ4X3dxKTtcXG4gXFx0ZGVzdHJveV93b3JrcXVldWUobmRldi1cXHUwMDNldHhfd3EpO1xcbiBcXG4rXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZuZGV2LVxcdTAwM2Vjb25uX2luZm9fbG9jayk7XFxuIFxcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjb25uX2luZm8sIG4sIFxcdTAwMjZuZGV2LVxcdTAwM2Vjb25uX2luZm9fbGlzdCwgbGlzdCkge1xcbiBcXHRcXHRsaXN0X2RlbChcXHUwMDI2Y29ubl9pbmZvLVxcdTAwM2VsaXN0KTtcXG4rXFx0XFx0aWYgKGNvbm5faW5mbyA9PSBuZGV2LVxcdTAwM2VyZl9jb25uX2luZm8pXFxuK1xcdFxcdFxcdG5kZXYtXFx1MDAzZXJmX2Nvbm5faW5mbyA9IE5VTEw7XFxuK1xcdFxcdGlmIChjb25uX2luZm8gPT0gbmRldi1cXHUwMDNlaGNpX2Rldi1cXHUwMDNlY29ubl9pbmZvKVxcbitcXHRcXHRcXHRuZGV2LVxcdTAwM2VoY2lfZGV2LVxcdTAwM2Vjb25uX2luZm8gPSBOVUxMO1xcbiBcXHRcXHQvKiBjb25uX2luZm8gaXMgYWxsb2NhdGVkIHdpdGggZGV2bV9remFsbG9jICovXFxuIFxcdH1cXG4tXFxuK1xcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZuZGV2LVxcdTAwM2Vjb25uX2luZm9fbG9jayk7XFxuIFxcdG5mY19yZW1vdmVfZGV2aWNlKG5kZXYtXFx1MDAzZW5mY19kZXYpO1xcbiB9XFxuIEVYUE9SVF9TWU1CT0wobmNpX3VucmVnaXN0ZXJfZGV2aWNlKTtcXG5AQCAtMTUyMywyMyArMTU2MiwzMSBAQCBzdGF0aWMgdm9pZCBuY2lfdHhfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuIFxcdHN0cnVjdCBuY2lfY29ubl9pbmZvICpjb25uX2luZm87XFxuIFxcdHN0cnVjdCBza19idWZmICpza2I7XFxuIFxcbi1cXHRjb25uX2luZm8gPSBuY2lfZ2V0X2Nvbm5faW5mb19ieV9jb25uX2lkKG5kZXYsIG5kZXYtXFx1MDAzZWN1cl9jb25uX2lkKTtcXG4tXFx0aWYgKCFjb25uX2luZm8pXFxuLVxcdFxcdHJldHVybjtcXG4rXFx0LyogU2VuZCBxdWV1ZWQgdHggZGF0YSAqL1xcbitcXHRmb3IgKDs7KSB7XFxuK1xcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2bmRldi1cXHUwMDNlY29ubl9pbmZvX2xvY2spO1xcbitcXHRcXHRjb25uX2luZm8gPSBuY2lfZ2V0X2Nvbm5faW5mb19ieV9jb25uX2lkX2xvY2tlZChuZGV2LFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRuZGV2LVxcdTAwM2VjdXJfY29ubl9pZCk7XFxuK1xcdFxcdGlmICghY29ubl9pbmZvKVxcbitcXHRcXHRcXHRnb3RvIHVubG9jaztcXG4gXFxuLVxcdHByX2RlYnVnKFxcXCJjcmVkaXRzX2NudCAlZFxcXFxuXFxcIiwgYXRvbWljX3JlYWQoXFx1MDAyNmNvbm5faW5mby1cXHUwMDNlY3JlZGl0c19jbnQpKTtcXG4rXFx0XFx0cHJfZGVidWcoXFxcImNyZWRpdHNfY250ICVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgYXRvbWljX3JlYWQoXFx1MDAyNmNvbm5faW5mby1cXHUwMDNlY3JlZGl0c19jbnQpKTtcXG4rXFxuK1xcdFxcdGlmICghYXRvbWljX3JlYWQoXFx1MDAyNmNvbm5faW5mby1cXHUwMDNlY3JlZGl0c19jbnQpKVxcbitcXHRcXHRcXHRnb3RvIHVubG9jaztcXG4gXFxuLVxcdC8qIFNlbmQgcXVldWVkIHR4IGRhdGEgKi9cXG4tXFx0d2hpbGUgKGF0b21pY19yZWFkKFxcdTAwMjZjb25uX2luZm8tXFx1MDAzZWNyZWRpdHNfY250KSkge1xcbiBcXHRcXHRza2IgPSBza2JfZGVxdWV1ZShcXHUwMDI2bmRldi1cXHUwMDNldHhfcSk7XFxuIFxcdFxcdGlmICghc2tiKVxcbi1cXHRcXHRcXHRyZXR1cm47XFxuLVxcdFxcdGtjb3ZfcmVtb3RlX3N0YXJ0X2NvbW1vbihza2JfZ2V0X2tjb3ZfaGFuZGxlKHNrYikpO1xcbitcXHRcXHRcXHRnb3RvIHVubG9jaztcXG4gXFxuIFxcdFxcdC8qIENoZWNrIGlmIGRhdGEgZmxvdyBjb250cm9sIGlzIHVzZWQgKi9cXG4gXFx0XFx0aWYgKGF0b21pY19yZWFkKFxcdTAwMjZjb25uX2luZm8tXFx1MDAzZWNyZWRpdHNfY250KSAhPVxcbiBcXHRcXHQgICAgTkNJX0RBVEFfRkxPV19DT05UUk9MX05PVF9VU0VEKVxcbiBcXHRcXHRcXHRhdG9taWNfZGVjKFxcdTAwMjZjb25uX2luZm8tXFx1MDAzZWNyZWRpdHNfY250KTtcXG4rXFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNm5kZXYtXFx1MDAzZWNvbm5faW5mb19sb2NrKTtcXG4rXFxuK1xcdFxcdGtjb3ZfcmVtb3RlX3N0YXJ0X2NvbW1vbihza2JfZ2V0X2tjb3ZfaGFuZGxlKHNrYikpO1xcbiBcXG4gXFx0XFx0cHJfZGVidWcoXFxcIk5DSSBUWDogTVQ9ZGF0YSwgUEJGPSVkLCBjb25uX2lkPSVkLCBwbGVuPSVkXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHQgbmNpX3BiZihza2ItXFx1MDAzZWRhdGEpLFxcbkBAIC0xNTUyLDYgKzE1OTksOSBAQCBzdGF0aWMgdm9pZCBuY2lfdHhfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuIFxcdFxcdFxcdCAgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoTkNJX0RBVEFfVElNRU9VVCkpO1xcbiBcXHRcXHRrY292X3JlbW90ZV9zdG9wKCk7XFxuIFxcdH1cXG4rXFxuK3VubG9jazpcXG4rXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNm5kZXYtXFx1MDAzZWNvbm5faW5mb19sb2NrKTtcXG4gfVxcbiBcXG4gLyogLS0tLS0gTkNJIFJYIHdvcmtlciB0aHJlYWQgKGRhdGEgXFx1MDAyNiBjb250cm9sKSAtLS0tLSAqL1xcbmRpZmYgLS1naXQgYS9uZXQvbmZjL25jaS9kYXRhLmMgYi9uZXQvbmZjL25jaS9kYXRhLmNcXG5pbmRleCA1Zjk4YzczZGI1YWZkZS4uMzM0YzBlNWE5NGRiYzQgMTAwNjQ0XFxuLS0tIGEvbmV0L25mYy9uY2kvZGF0YS5jXFxuKysrIGIvbmV0L25mYy9uY2kvZGF0YS5jXFxuQEAgLTMwLDggKzMwLDEwIEBAIHZvaWQgbmNpX2RhdGFfZXhjaGFuZ2VfY29tcGxldGUoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdGRhdGFfZXhjaGFuZ2VfY2JfdCBjYjtcXG4gXFx0dm9pZCAqY2JfY29udGV4dDtcXG4gXFxuLVxcdGNvbm5faW5mbyA9IG5jaV9nZXRfY29ubl9pbmZvX2J5X2Nvbm5faWQobmRldiwgY29ubl9pZCk7XFxuK1xcdHNwaW5fbG9ja19iaChcXHUwMDI2bmRldi1cXHUwMDNlY29ubl9pbmZvX2xvY2spO1xcbitcXHRjb25uX2luZm8gPSBuY2lfZ2V0X2Nvbm5faW5mb19ieV9jb25uX2lkX2xvY2tlZChuZGV2LCBjb25uX2lkKTtcXG4gXFx0aWYgKCFjb25uX2luZm8pIHtcXG4rXFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNm5kZXYtXFx1MDAzZWNvbm5faW5mb19sb2NrKTtcXG4gXFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuIFxcdFxcdGNsZWFyX2JpdChOQ0lfREFUQV9FWENIQU5HRSwgXFx1MDAyNm5kZXYtXFx1MDAzZWZsYWdzKTtcXG4gXFx0XFx0cmV0dXJuO1xcbkBAIC0zOSw2ICs0MSw3IEBAIHZvaWQgbmNpX2RhdGFfZXhjaGFuZ2VfY29tcGxldGUoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcbiBcXHRjYiA9IGNvbm5faW5mby1cXHUwMDNlZGF0YV9leGNoYW5nZV9jYjtcXG4gXFx0Y2JfY29udGV4dCA9IGNvbm5faW5mby1cXHUwMDNlZGF0YV9leGNoYW5nZV9jYl9jb250ZXh0O1xcbitcXHRzcGluX3VubG9ja19iaChcXHUwMDI2bmRldi1cXHUwMDNlY29ubl9pbmZvX2xvY2spO1xcbiBcXG4gXFx0cHJfZGVidWcoXFxcImxlbiAlZCwgZXJyICVkXFxcXG5cXFwiLCBza2IgPyBza2ItXFx1MDAzZWxlbiA6IDAsIGVycik7XFxuIFxcbkBAIC04NSwxOSArODgsMjYgQEAgc3RhdGljIGlubGluZSB2b2lkIG5jaV9wdXNoX2RhdGFfaGRyKHN0cnVjdCBuY2lfZGV2ICpuZGV2LFxcbiBpbnQgbmNpX2Nvbm5fbWF4X2RhdGFfcGt0X3BheWxvYWRfc2l6ZShzdHJ1Y3QgbmNpX2RldiAqbmRldiwgX191OCBjb25uX2lkKVxcbiB7XFxuIFxcdGNvbnN0IHN0cnVjdCBuY2lfY29ubl9pbmZvICpjb25uX2luZm87XFxuK1xcdGludCBtYXhfcGt0X3BheWxvYWRfbGVuO1xcbiBcXG4tXFx0Y29ubl9pbmZvID0gbmNpX2dldF9jb25uX2luZm9fYnlfY29ubl9pZChuZGV2LCBjb25uX2lkKTtcXG4tXFx0aWYgKCFjb25uX2luZm8pXFxuK1xcdHNwaW5fbG9ja19iaChcXHUwMDI2bmRldi1cXHUwMDNlY29ubl9pbmZvX2xvY2spO1xcbitcXHRjb25uX2luZm8gPSBuY2lfZ2V0X2Nvbm5faW5mb19ieV9jb25uX2lkX2xvY2tlZChuZGV2LCBjb25uX2lkKTtcXG4rXFx0aWYgKCFjb25uX2luZm8pIHtcXG4rXFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNm5kZXYtXFx1MDAzZWNvbm5faW5mb19sb2NrKTtcXG4gXFx0XFx0cmV0dXJuIC1FUFJPVE87XFxuK1xcdH1cXG4rXFx0bWF4X3BrdF9wYXlsb2FkX2xlbiA9IGNvbm5faW5mby1cXHUwMDNlbWF4X3BrdF9wYXlsb2FkX2xlbjtcXG4rXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNm5kZXYtXFx1MDAzZWNvbm5faW5mb19sb2NrKTtcXG4gXFxuLVxcdHJldHVybiBjb25uX2luZm8tXFx1MDAzZW1heF9wa3RfcGF5bG9hZF9sZW47XFxuK1xcdHJldHVybiBtYXhfcGt0X3BheWxvYWRfbGVuO1xcbiB9XFxuIEVYUE9SVF9TWU1CT0wobmNpX2Nvbm5fbWF4X2RhdGFfcGt0X3BheWxvYWRfc2l6ZSk7XFxuIFxcbiBzdGF0aWMgaW50IG5jaV9xdWV1ZV90eF9kYXRhX2ZyYWdzKHN0cnVjdCBuY2lfZGV2ICpuZGV2LFxcbiBcXHRcXHRcXHRcXHQgICBfX3U4IGNvbm5faWQsXFxuLVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBza19idWZmICpza2IpIHtcXG4tXFx0Y29uc3Qgc3RydWN0IG5jaV9jb25uX2luZm8gKmNvbm5faW5mbztcXG4rXFx0XFx0XFx0XFx0ICAgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4rXFx0XFx0XFx0XFx0ICAgX191OCBtYXhfcGt0X3BheWxvYWRfbGVuKVxcbit7XFxuIFxcdGludCB0b3RhbF9sZW4gPSBza2ItXFx1MDAzZWxlbjtcXG4gXFx0Y29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSA9IHNrYi1cXHUwMDNlZGF0YTtcXG4gXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG5AQCAtMTA4LDE3ICsxMTgsMTAgQEAgc3RhdGljIGludCBuY2lfcXVldWVfdHhfZGF0YV9mcmFncyhzdHJ1Y3QgbmNpX2RldiAqbmRldixcXG4gXFxuIFxcdHByX2RlYnVnKFxcXCJjb25uX2lkIDB4JXgsIHRvdGFsX2xlbiAlZFxcXFxuXFxcIiwgY29ubl9pZCwgdG90YWxfbGVuKTtcXG4gXFxuLVxcdGNvbm5faW5mbyA9IG5jaV9nZXRfY29ubl9pbmZvX2J5X2Nvbm5faWQobmRldiwgY29ubl9pZCk7XFxuLVxcdGlmICghY29ubl9pbmZvKSB7XFxuLVxcdFxcdHJjID0gLUVQUk9UTztcXG4tXFx0XFx0Z290byBleGl0O1xcbi1cXHR9XFxuLVxcbiBcXHRfX3NrYl9xdWV1ZV9oZWFkX2luaXQoXFx1MDAyNmZyYWdzX3EpO1xcbiBcXG4gXFx0d2hpbGUgKHRvdGFsX2xlbikge1xcbi1cXHRcXHRmcmFnX2xlbiA9XFxuLVxcdFxcdFxcdG1pbl90KGludCwgdG90YWxfbGVuLCBjb25uX2luZm8tXFx1MDAzZW1heF9wa3RfcGF5bG9hZF9sZW4pO1xcbitcXHRcXHRmcmFnX2xlbiA9IG1pbl90KGludCwgdG90YWxfbGVuLCBtYXhfcGt0X3BheWxvYWRfbGVuKTtcXG4gXFxuIFxcdFxcdHNrYl9mcmFnID0gbmNpX3NrYl9hbGxvYyhuZGV2LFxcbiBcXHRcXHRcXHRcXHRcXHQgKE5DSV9EQVRBX0hEUl9TSVpFICsgZnJhZ19sZW4pLFxcbkBAIC0xNzEsNDAgKzE3NCw0NyBAQCBzdGF0aWMgaW50IG5jaV9xdWV1ZV90eF9kYXRhX2ZyYWdzKHN0cnVjdCBuY2lfZGV2ICpuZGV2LFxcbiBpbnQgbmNpX3NlbmRfZGF0YShzdHJ1Y3QgbmNpX2RldiAqbmRldiwgX191OCBjb25uX2lkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiB7XFxuIFxcdGNvbnN0IHN0cnVjdCBuY2lfY29ubl9pbmZvICpjb25uX2luZm87XFxuK1xcdF9fdTggbWF4X3BrdF9wYXlsb2FkX2xlbjtcXG4gXFx0aW50IHJjID0gMDtcXG4gXFxuIFxcdHByX2RlYnVnKFxcXCJjb25uX2lkIDB4JXgsIHBsZW4gJWRcXFxcblxcXCIsIGNvbm5faWQsIHNrYi1cXHUwMDNlbGVuKTtcXG4gXFxuLVxcdGNvbm5faW5mbyA9IG5jaV9nZXRfY29ubl9pbmZvX2J5X2Nvbm5faWQobmRldiwgY29ubl9pZCk7XFxuK1xcdHNwaW5fbG9ja19iaChcXHUwMDI2bmRldi1cXHUwMDNlY29ubl9pbmZvX2xvY2spO1xcbitcXHRjb25uX2luZm8gPSBuY2lfZ2V0X2Nvbm5faW5mb19ieV9jb25uX2lkX2xvY2tlZChuZGV2LCBjb25uX2lkKTtcXG4gXFx0aWYgKCFjb25uX2luZm8pIHtcXG4gXFx0XFx0cmMgPSAtRVBST1RPO1xcbi1cXHRcXHRnb3RvIGZyZWVfZXhpdDtcXG4rXFx0XFx0Z290byB1bmxvY2s7XFxuIFxcdH1cXG4rXFx0bWF4X3BrdF9wYXlsb2FkX2xlbiA9IGNvbm5faW5mby1cXHUwMDNlbWF4X3BrdF9wYXlsb2FkX2xlbjtcXG4rXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNm5kZXYtXFx1MDAzZWNvbm5faW5mb19sb2NrKTtcXG4gXFxuIFxcdC8qIGNoZWNrIGlmIHRoZSBwYWNrZXQgbmVlZCB0byBiZSBmcmFnbWVudGVkICovXFxuLVxcdGlmIChza2ItXFx1MDAzZWxlbiBcXHUwMDNjPSBjb25uX2luZm8tXFx1MDAzZW1heF9wa3RfcGF5bG9hZF9sZW4pIHtcXG4rXFx0aWYgKHNrYi1cXHUwMDNlbGVuIFxcdTAwM2M9IG1heF9wa3RfcGF5bG9hZF9sZW4pIHtcXG4gXFx0XFx0Lyogbm8gbmVlZCB0byBmcmFnbWVudCBwYWNrZXQgKi9cXG4gXFx0XFx0bmNpX3B1c2hfZGF0YV9oZHIobmRldiwgY29ubl9pZCwgc2tiLCBOQ0lfUEJGX0xBU1QpO1xcbiBcXG4gXFx0XFx0c2tiX3F1ZXVlX3RhaWwoXFx1MDAyNm5kZXYtXFx1MDAzZXR4X3EsIHNrYik7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdC8qIGZyYWdtZW50IHBhY2tldCBhbmQgcXVldWUgdGhlIGZyYWdtZW50cyAqL1xcbi1cXHRcXHRyYyA9IG5jaV9xdWV1ZV90eF9kYXRhX2ZyYWdzKG5kZXYsIGNvbm5faWQsIHNrYik7XFxuK1xcdFxcdHJjID0gbmNpX3F1ZXVlX3R4X2RhdGFfZnJhZ3MobmRldiwgY29ubl9pZCwgc2tiLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIG1heF9wa3RfcGF5bG9hZF9sZW4pO1xcbiBcXHRcXHRpZiAocmMpIHtcXG4gXFx0XFx0XFx0cHJfZXJyKFxcXCJmYWlsZWQgdG8gZnJhZ21lbnQgdHggZGF0YSBwYWNrZXRcXFxcblxcXCIpO1xcbi1cXHRcXHRcXHRnb3RvIGZyZWVfZXhpdDtcXG4rXFx0XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuK1xcdFxcdFxcdHJldHVybiByYztcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbitcXHRzcGluX2xvY2tfYmgoXFx1MDAyNm5kZXYtXFx1MDAzZWNvbm5faW5mb19sb2NrKTtcXG4gXFx0bmRldi1cXHUwMDNlY3VyX2Nvbm5faWQgPSBjb25uX2lkO1xcbi1cXHRxdWV1ZV93b3JrKG5kZXYtXFx1MDAzZXR4X3dxLCBcXHUwMDI2bmRldi1cXHUwMDNldHhfd29yayk7XFxuLVxcbi1cXHRnb3RvIGV4aXQ7XFxuLVxcbi1mcmVlX2V4aXQ6XFxuLVxcdGtmcmVlX3NrYihza2IpO1xcbitcXHRzcGluX3VubG9ja19iaChcXHUwMDI2bmRldi1cXHUwMDNlY29ubl9pbmZvX2xvY2spO1xcbiBcXG4tZXhpdDpcXG4rXFx0cXVldWVfd29yayhuZGV2LVxcdTAwM2V0eF93cSwgXFx1MDAyNm5kZXYtXFx1MDAzZXR4X3dvcmspO1xcbitcXHRyZXR1cm4gcmM7XFxuK3VubG9jazpcXG4rXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNm5kZXYtXFx1MDAzZWNvbm5faW5mb19sb2NrKTtcXG4rXFx0aWYgKHJjKVxcbitcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4gXFx0cmV0dXJuIHJjO1xcbiB9XFxuIEVYUE9SVF9TWU1CT0wobmNpX3NlbmRfZGF0YSk7XFxuQEAgLTI4MiwxMSArMjkyLDE1IEBAIHZvaWQgbmNpX3J4X2RhdGFfcGFja2V0KHN0cnVjdCBuY2lfZGV2ICpuZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXHRcXHQgbmNpX2Nvbm5faWQoc2tiLVxcdTAwM2VkYXRhKSxcXG4gXFx0XFx0IG5jaV9wbGVuKHNrYi1cXHUwMDNlZGF0YSkpO1xcbiBcXG4tXFx0Y29ubl9pbmZvID0gbmNpX2dldF9jb25uX2luZm9fYnlfY29ubl9pZChuZGV2LCBuY2lfY29ubl9pZChza2ItXFx1MDAzZWRhdGEpKTtcXG4rXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZuZGV2LVxcdTAwM2Vjb25uX2luZm9fbG9jayk7XFxuK1xcdGNvbm5faW5mbyA9IG5jaV9nZXRfY29ubl9pbmZvX2J5X2Nvbm5faWRfbG9ja2VkKG5kZXYsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdG5jaV9jb25uX2lkKHNrYi1cXHUwMDNlZGF0YSkpO1xcbiBcXHRpZiAoIWNvbm5faW5mbykge1xcbitcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2bmRldi1cXHUwMDNlY29ubl9pbmZvX2xvY2spO1xcbiBcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXHR9XFxuK1xcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZuZGV2LVxcdTAwM2Vjb25uX2luZm9fbG9jayk7XFxuIFxcbiBcXHQvKiBzdHJpcCB0aGUgbmNpIGRhdGEgaGVhZGVyICovXFxuIFxcdHNrYl9wdWxsKHNrYiwgTkNJX0RBVEFfSERSX1NJWkUpO1xcbmRpZmYgLS1naXQgYS9uZXQvbmZjL25jaS9oY2kuYyBiL25ldC9uZmMvbmNpL2hjaS5jXFxuaW5kZXggYzAzZThhMGJkM2JkNjQuLmUyZjdhYjE1OTczY2U5IDEwMDY0NFxcbi0tLSBhL25ldC9uZmMvbmNpL2hjaS5jXFxuKysrIGIvbmV0L25mYy9uY2kvaGNpLmNcXG5AQCAtMTQ3LDE0ICsxNDcsMjIgQEAgc3RhdGljIGludCBuY2lfaGNpX3NlbmRfZGF0YShzdHJ1Y3QgbmNpX2RldiAqbmRldiwgdTggcGlwZSxcXG4gXFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4gXFx0aW50IGxlbiwgaSwgcjtcXG4gXFx0dTggY2IgPSBwaXBlO1xcbitcXHR1OCBjb25uX2lkO1xcbitcXHR1OCBtYXhfcGt0X3BheWxvYWRfbGVuO1xcbiBcXG4rXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZuZGV2LVxcdTAwM2Vjb25uX2luZm9fbG9jayk7XFxuIFxcdGNvbm5faW5mbyA9IG5kZXYtXFx1MDAzZWhjaV9kZXYtXFx1MDAzZWNvbm5faW5mbztcXG4tXFx0aWYgKCFjb25uX2luZm8pXFxuK1xcdGlmICghY29ubl9pbmZvKSB7XFxuK1xcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZuZGV2LVxcdTAwM2Vjb25uX2luZm9fbG9jayk7XFxuIFxcdFxcdHJldHVybiAtRVBST1RPO1xcbitcXHR9XFxuK1xcdGNvbm5faWQgPSBjb25uX2luZm8tXFx1MDAzZWNvbm5faWQ7XFxuK1xcdG1heF9wa3RfcGF5bG9hZF9sZW4gPSBjb25uX2luZm8tXFx1MDAzZW1heF9wa3RfcGF5bG9hZF9sZW47XFxuK1xcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZuZGV2LVxcdTAwM2Vjb25uX2luZm9fbG9jayk7XFxuIFxcbiBcXHRpID0gMDtcXG4tXFx0c2tiID0gbmNpX3NrYl9hbGxvYyhuZGV2LCBjb25uX2luZm8tXFx1MDAzZW1heF9wa3RfcGF5bG9hZF9sZW4gK1xcbi1cXHRcXHRcXHQgICAgTkNJX0RBVEFfSERSX1NJWkUsIEdGUF9BVE9NSUMpO1xcbitcXHRza2IgPSBuY2lfc2tiX2FsbG9jKG5kZXYsIG1heF9wa3RfcGF5bG9hZF9sZW4gKyBOQ0lfREFUQV9IRFJfU0laRSxcXG4rXFx0XFx0XFx0ICAgIEdGUF9BVE9NSUMpO1xcbiBcXHRpZiAoIXNrYilcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcbkBAIC0xNjMsMTIgKzE3MSwxMSBAQCBzdGF0aWMgaW50IG5jaV9oY2lfc2VuZF9kYXRhKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCB1OCBwaXBlLFxcbiBcXG4gXFx0ZG8ge1xcbiBcXHRcXHQvKiBJZiBsYXN0IHBhY2tldCBhZGQgTkNJX0hGUF9OT19DSEFJTklORyAqL1xcbi1cXHRcXHRpZiAoaSArIGNvbm5faW5mby1cXHUwMDNlbWF4X3BrdF9wYXlsb2FkX2xlbiAtXFxuLVxcdFxcdCAgICAoc2tiLVxcdTAwM2VsZW4gKyAxKSBcXHUwMDNlPSBkYXRhX2xlbikge1xcbitcXHRcXHRpZiAoaSArIG1heF9wa3RfcGF5bG9hZF9sZW4gLSAoc2tiLVxcdTAwM2VsZW4gKyAxKSBcXHUwMDNlPSBkYXRhX2xlbikge1xcbiBcXHRcXHRcXHRjYiB8PSBOQ0lfSEZQX05PX0NIQUlOSU5HO1xcbiBcXHRcXHRcXHRsZW4gPSBkYXRhX2xlbiAtIGk7XFxuIFxcdFxcdH0gZWxzZSB7XFxuLVxcdFxcdFxcdGxlbiA9IGNvbm5faW5mby1cXHUwMDNlbWF4X3BrdF9wYXlsb2FkX2xlbiAtIHNrYi1cXHUwMDNlbGVuIC0gMTtcXG4rXFx0XFx0XFx0bGVuID0gbWF4X3BrdF9wYXlsb2FkX2xlbiAtIHNrYi1cXHUwMDNlbGVuIC0gMTtcXG4gXFx0XFx0fVxcbiBcXG4gXFx0XFx0Kih1OCAqKXNrYl9wdXNoKHNrYiwgMSkgPSBjYjtcXG5AQCAtMTc2LDE1ICsxODMsMTQgQEAgc3RhdGljIGludCBuY2lfaGNpX3NlbmRfZGF0YShzdHJ1Y3QgbmNpX2RldiAqbmRldiwgdTggcGlwZSxcXG4gXFx0XFx0aWYgKGxlbiBcXHUwMDNlIDApXFxuIFxcdFxcdFxcdHNrYl9wdXRfZGF0YShza2IsIGRhdGEgKyBpLCBsZW4pO1xcbiBcXG4tXFx0XFx0ciA9IG5jaV9zZW5kX2RhdGEobmRldiwgY29ubl9pbmZvLVxcdTAwM2Vjb25uX2lkLCBza2IpO1xcbitcXHRcXHRyID0gbmNpX3NlbmRfZGF0YShuZGV2LCBjb25uX2lkLCBza2IpO1xcbiBcXHRcXHRpZiAociBcXHUwMDNjIDApXFxuIFxcdFxcdFxcdHJldHVybiByO1xcbiBcXG4gXFx0XFx0aSArPSBsZW47XFxuIFxcbiBcXHRcXHRpZiAoaSBcXHUwMDNjIGRhdGFfbGVuKSB7XFxuLVxcdFxcdFxcdHNrYiA9IG5jaV9za2JfYWxsb2MobmRldixcXG4tXFx0XFx0XFx0XFx0XFx0ICAgIGNvbm5faW5mby1cXHUwMDNlbWF4X3BrdF9wYXlsb2FkX2xlbiArXFxuK1xcdFxcdFxcdHNrYiA9IG5jaV9za2JfYWxsb2MobmRldiwgbWF4X3BrdF9wYXlsb2FkX2xlbiArXFxuIFxcdFxcdFxcdFxcdFxcdCAgICBOQ0lfREFUQV9IRFJfU0laRSwgR0ZQX0FUT01JQyk7XFxuIFxcdFxcdFxcdGlmICghc2tiKVxcbiBcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG5AQCAtMjI1LDE3ICsyMzEsMjIgQEAgaW50IG5jaV9oY2lfc2VuZF9jbWQoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHU4IGdhdGUsIHU4IGNtZCxcXG4gXFx0Y29uc3Qgc3RydWN0IG5jaV9oY3BfbWVzc2FnZSAqbWVzc2FnZTtcXG4gXFx0Y29uc3Qgc3RydWN0IG5jaV9jb25uX2luZm8gKmNvbm5faW5mbztcXG4gXFx0c3RydWN0IG5jaV9kYXRhIGRhdGE7XFxuK1xcdHN0cnVjdCBza19idWZmICpyeF9za2I7XFxuIFxcdGludCByO1xcbiBcXHR1OCBwaXBlID0gbmRldi1cXHUwMDNlaGNpX2Rldi1cXHUwMDNlZ2F0ZTJwaXBlW2dhdGVdO1xcbiBcXG4gXFx0aWYgKHBpcGUgPT0gTkNJX0hDSV9JTlZBTElEX1BJUEUpXFxuIFxcdFxcdHJldHVybiAtRUFERFJOT1RBVkFJTDtcXG4gXFxuK1xcdHNwaW5fbG9ja19iaChcXHUwMDI2bmRldi1cXHUwMDNlY29ubl9pbmZvX2xvY2spO1xcbiBcXHRjb25uX2luZm8gPSBuZGV2LVxcdTAwM2VoY2lfZGV2LVxcdTAwM2Vjb25uX2luZm87XFxuLVxcdGlmICghY29ubl9pbmZvKVxcbitcXHRpZiAoIWNvbm5faW5mbykge1xcbitcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2bmRldi1cXHUwMDNlY29ubl9pbmZvX2xvY2spO1xcbiBcXHRcXHRyZXR1cm4gLUVQUk9UTztcXG4rXFx0fVxcbiBcXG4gXFx0ZGF0YS5jb25uX2lkID0gY29ubl9pbmZvLVxcdTAwM2Vjb25uX2lkO1xcbitcXHRzcGluX3VubG9ja19iaChcXHUwMDI2bmRldi1cXHUwMDNlY29ubl9pbmZvX2xvY2spO1xcbiBcXHRkYXRhLnBpcGUgPSBwaXBlO1xcbiBcXHRkYXRhLmNtZCA9IE5DSV9IQ1BfSEVBREVSKE5DSV9IQ0lfSENQX0NPTU1BTkQsIGNtZCk7XFxuIFxcdGRhdGEuZGF0YSA9IHBhcmFtO1xcbkBAIC0yNDQsMTMgKzI1NSwyMiBAQCBpbnQgbmNpX2hjaV9zZW5kX2NtZChzdHJ1Y3QgbmNpX2RldiAqbmRldiwgdTggZ2F0ZSwgdTggY21kLFxcbiBcXHRyID0gbmNpX3JlcXVlc3QobmRldiwgbmNpX2hjaV9zZW5kX2RhdGFfcmVxLCBcXHUwMDI2ZGF0YSxcXG4gXFx0XFx0XFx0bXNlY3NfdG9famlmZmllcyhOQ0lfREFUQV9USU1FT1VUKSk7XFxuIFxcdGlmIChyID09IE5DSV9TVEFUVVNfT0spIHtcXG4tXFx0XFx0bWVzc2FnZSA9IChzdHJ1Y3QgbmNpX2hjcF9tZXNzYWdlICopY29ubl9pbmZvLVxcdTAwM2VyeF9za2ItXFx1MDAzZWRhdGE7XFxuK1xcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2bmRldi1cXHUwMDNlY29ubl9pbmZvX2xvY2spO1xcbitcXHRcXHRjb25uX2luZm8gPSBuZGV2LVxcdTAwM2VoY2lfZGV2LVxcdTAwM2Vjb25uX2luZm87XFxuK1xcdFxcdHJ4X3NrYiA9IGNvbm5faW5mbyA/IGNvbm5faW5mby1cXHUwMDNlcnhfc2tiIDogTlVMTDtcXG4rXFx0XFx0aWYgKCFyeF9za2IpIHtcXG4rXFx0XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNm5kZXYtXFx1MDAzZWNvbm5faW5mb19sb2NrKTtcXG4rXFx0XFx0XFx0cmV0dXJuIC1FUFJPVE87XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdG1lc3NhZ2UgPSAoc3RydWN0IG5jaV9oY3BfbWVzc2FnZSAqKXJ4X3NrYi1cXHUwMDNlZGF0YTtcXG4gXFx0XFx0ciA9IG5jaV9oY2lfcmVzdWx0X3RvX2Vycm5vKFxcbiBcXHRcXHRcXHROQ0lfSENQX01TR19HRVRfQ01EKG1lc3NhZ2UtXFx1MDAzZWhlYWRlcikpO1xcbi1cXHRcXHRza2JfcHVsbChjb25uX2luZm8tXFx1MDAzZXJ4X3NrYiwgTkNJX0hDSV9IQ1BfTUVTU0FHRV9IRUFERVJfTEVOKTtcXG4rXFx0XFx0c2tiX3B1bGwocnhfc2tiLCBOQ0lfSENJX0hDUF9NRVNTQUdFX0hFQURFUl9MRU4pO1xcbitcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2bmRldi1cXHUwMDNlY29ubl9pbmZvX2xvY2spO1xcbiBcXG4gXFx0XFx0aWYgKCFyIFxcdTAwMjZcXHUwMDI2IHNrYilcXG4tXFx0XFx0XFx0KnNrYiA9IGNvbm5faW5mby1cXHUwMDNlcnhfc2tiO1xcbitcXHRcXHRcXHQqc2tiID0gcnhfc2tiO1xcbiBcXHR9XFxuIFxcbiBcXHRyZXR1cm4gcjtcXG5AQCAtMzY2LDExICszODYsMTUgQEAgc3RhdGljIHZvaWQgbmNpX2hjaV9yZXNwX3JlY2VpdmVkKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCB1OCBwaXBlLFxcbiB7XFxuIFxcdHN0cnVjdCBuY2lfY29ubl9pbmZvICpjb25uX2luZm87XFxuIFxcbitcXHRzcGluX2xvY2tfYmgoXFx1MDAyNm5kZXYtXFx1MDAzZWNvbm5faW5mb19sb2NrKTtcXG4gXFx0Y29ubl9pbmZvID0gbmRldi1cXHUwMDNlaGNpX2Rldi1cXHUwMDNlY29ubl9pbmZvO1xcbi1cXHRpZiAoIWNvbm5faW5mbylcXG4rXFx0aWYgKCFjb25uX2luZm8pIHtcXG4rXFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNm5kZXYtXFx1MDAzZWNvbm5faW5mb19sb2NrKTtcXG4gXFx0XFx0Z290byBleGl0O1xcbitcXHR9XFxuIFxcbiBcXHRjb25uX2luZm8tXFx1MDAzZXJ4X3NrYiA9IHNrYjtcXG4rXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNm5kZXYtXFx1MDAzZWNvbm5faW5mb19sb2NrKTtcXG4gXFxuIGV4aXQ6XFxuIFxcdG5jaV9yZXFfY29tcGxldGUobmRldiwgTkNJX1NUQVRVU19PSyk7XFxuQEAgLTUxMCwxMSArNTM0LDE1IEBAIGludCBuY2lfaGNpX29wZW5fcGlwZShzdHJ1Y3QgbmNpX2RldiAqbmRldiwgdTggcGlwZSlcXG4gXFx0c3RydWN0IG5jaV9kYXRhIGRhdGE7XFxuIFxcdGNvbnN0IHN0cnVjdCBuY2lfY29ubl9pbmZvICpjb25uX2luZm87XFxuIFxcbitcXHRzcGluX2xvY2tfYmgoXFx1MDAyNm5kZXYtXFx1MDAzZWNvbm5faW5mb19sb2NrKTtcXG4gXFx0Y29ubl9pbmZvID0gbmRldi1cXHUwMDNlaGNpX2Rldi1cXHUwMDNlY29ubl9pbmZvO1xcbi1cXHRpZiAoIWNvbm5faW5mbylcXG4rXFx0aWYgKCFjb25uX2luZm8pIHtcXG4rXFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNm5kZXYtXFx1MDAzZWNvbm5faW5mb19sb2NrKTtcXG4gXFx0XFx0cmV0dXJuIC1FUFJPVE87XFxuK1xcdH1cXG4gXFxuIFxcdGRhdGEuY29ubl9pZCA9IGNvbm5faW5mby1cXHUwMDNlY29ubl9pZDtcXG4rXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNm5kZXYtXFx1MDAzZWNvbm5faW5mb19sb2NrKTtcXG4gXFx0ZGF0YS5waXBlID0gcGlwZTtcXG4gXFx0ZGF0YS5jbWQgPSBOQ0lfSENQX0hFQURFUihOQ0lfSENJX0hDUF9DT01NQU5ELFxcbiBcXHRcXHRcXHRcXHQgICAgICAgTkNJX0hDSV9BTllfT1BFTl9QSVBFKTtcXG5AQCAtNTY5LDYgKzU5Nyw3IEBAIGludCBuY2lfaGNpX3NldF9wYXJhbShzdHJ1Y3QgbmNpX2RldiAqbmRldiwgdTggZ2F0ZSwgdTggaWR4LFxcbiBcXHRjb25zdCBzdHJ1Y3QgbmNpX2hjcF9tZXNzYWdlICptZXNzYWdlO1xcbiBcXHRjb25zdCBzdHJ1Y3QgbmNpX2Nvbm5faW5mbyAqY29ubl9pbmZvO1xcbiBcXHRzdHJ1Y3QgbmNpX2RhdGEgZGF0YTtcXG4rXFx0c3RydWN0IHNrX2J1ZmYgKnJ4X3NrYjtcXG4gXFx0aW50IHI7XFxuIFxcdHU4ICp0bXA7XFxuIFxcdHU4IHBpcGUgPSBuZGV2LVxcdTAwM2VoY2lfZGV2LVxcdTAwM2VnYXRlMnBpcGVbZ2F0ZV07XFxuQEAgLTU3OCw5ICs2MDcsMTQgQEAgaW50IG5jaV9oY2lfc2V0X3BhcmFtKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCB1OCBnYXRlLCB1OCBpZHgsXFxuIFxcdGlmIChwaXBlID09IE5DSV9IQ0lfSU5WQUxJRF9QSVBFKVxcbiBcXHRcXHRyZXR1cm4gLUVBRERSTk9UQVZBSUw7XFxuIFxcbitcXHRzcGluX2xvY2tfYmgoXFx1MDAyNm5kZXYtXFx1MDAzZWNvbm5faW5mb19sb2NrKTtcXG4gXFx0Y29ubl9pbmZvID0gbmRldi1cXHUwMDNlaGNpX2Rldi1cXHUwMDNlY29ubl9pbmZvO1xcbi1cXHRpZiAoIWNvbm5faW5mbylcXG4rXFx0aWYgKCFjb25uX2luZm8pIHtcXG4rXFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNm5kZXYtXFx1MDAzZWNvbm5faW5mb19sb2NrKTtcXG4gXFx0XFx0cmV0dXJuIC1FUFJPVE87XFxuK1xcdH1cXG4rXFx0ZGF0YS5jb25uX2lkID0gY29ubl9pbmZvLVxcdTAwM2Vjb25uX2lkO1xcbitcXHRzcGluX3VubG9ja19iaChcXHUwMDI2bmRldi1cXHUwMDNlY29ubl9pbmZvX2xvY2spO1xcbiBcXG4gXFx0dG1wID0ga21hbGxvYygxICsgcGFyYW1fbGVuLCBHRlBfS0VSTkVMKTtcXG4gXFx0aWYgKCF0bXApXFxuQEAgLTU4OSw3ICs2MjMsNiBAQCBpbnQgbmNpX2hjaV9zZXRfcGFyYW0oc3RydWN0IG5jaV9kZXYgKm5kZXYsIHU4IGdhdGUsIHU4IGlkeCxcXG4gXFx0KnRtcCA9IGlkeDtcXG4gXFx0bWVtY3B5KHRtcCArIDEsIHBhcmFtLCBwYXJhbV9sZW4pO1xcbiBcXG4tXFx0ZGF0YS5jb25uX2lkID0gY29ubl9pbmZvLVxcdTAwM2Vjb25uX2lkO1xcbiBcXHRkYXRhLnBpcGUgPSBwaXBlO1xcbiBcXHRkYXRhLmNtZCA9IE5DSV9IQ1BfSEVBREVSKE5DSV9IQ0lfSENQX0NPTU1BTkQsXFxuIFxcdFxcdFxcdFxcdCAgICAgICBOQ0lfSENJX0FOWV9TRVRfUEFSQU1FVEVSKTtcXG5AQCAtNTk5LDEwICs2MzIsMjAgQEAgaW50IG5jaV9oY2lfc2V0X3BhcmFtKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCB1OCBnYXRlLCB1OCBpZHgsXFxuIFxcdHIgPSBuY2lfcmVxdWVzdChuZGV2LCBuY2lfaGNpX3NlbmRfZGF0YV9yZXEsIFxcdTAwMjZkYXRhLFxcbiBcXHRcXHRcXHRtc2Vjc190b19qaWZmaWVzKE5DSV9EQVRBX1RJTUVPVVQpKTtcXG4gXFx0aWYgKHIgPT0gTkNJX1NUQVRVU19PSykge1xcbi1cXHRcXHRtZXNzYWdlID0gKHN0cnVjdCBuY2lfaGNwX21lc3NhZ2UgKiljb25uX2luZm8tXFx1MDAzZXJ4X3NrYi1cXHUwMDNlZGF0YTtcXG4rXFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZuZGV2LVxcdTAwM2Vjb25uX2luZm9fbG9jayk7XFxuK1xcdFxcdGNvbm5faW5mbyA9IG5kZXYtXFx1MDAzZWhjaV9kZXYtXFx1MDAzZWNvbm5faW5mbztcXG4rXFx0XFx0cnhfc2tiID0gY29ubl9pbmZvID8gY29ubl9pbmZvLVxcdTAwM2VyeF9za2IgOiBOVUxMO1xcbitcXHRcXHRpZiAoIXJ4X3NrYikge1xcbitcXHRcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2bmRldi1cXHUwMDNlY29ubl9pbmZvX2xvY2spO1xcbitcXHRcXHRcXHRrZnJlZSh0bXApO1xcbitcXHRcXHRcXHRyZXR1cm4gLUVQUk9UTztcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0bWVzc2FnZSA9IChzdHJ1Y3QgbmNpX2hjcF9tZXNzYWdlICopcnhfc2tiLVxcdTAwM2VkYXRhO1xcbiBcXHRcXHRyID0gbmNpX2hjaV9yZXN1bHRfdG9fZXJybm8oXFxuIFxcdFxcdFxcdE5DSV9IQ1BfTVNHX0dFVF9DTUQobWVzc2FnZS1cXHUwMDNlaGVhZGVyKSk7XFxuLVxcdFxcdHNrYl9wdWxsKGNvbm5faW5mby1cXHUwMDNlcnhfc2tiLCBOQ0lfSENJX0hDUF9NRVNTQUdFX0hFQURFUl9MRU4pO1xcbitcXHRcXHRza2JfcHVsbChyeF9za2IsIE5DSV9IQ0lfSENQX01FU1NBR0VfSEVBREVSX0xFTik7XFxuK1xcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZuZGV2LVxcdTAwM2Vjb25uX2luZm9fbG9jayk7XFxuIFxcdH1cXG4gXFxuIFxcdGtmcmVlKHRtcCk7XFxuQEAgLTYxNiw2ICs2NTksNyBAQCBpbnQgbmNpX2hjaV9nZXRfcGFyYW0oc3RydWN0IG5jaV9kZXYgKm5kZXYsIHU4IGdhdGUsIHU4IGlkeCxcXG4gXFx0Y29uc3Qgc3RydWN0IG5jaV9oY3BfbWVzc2FnZSAqbWVzc2FnZTtcXG4gXFx0Y29uc3Qgc3RydWN0IG5jaV9jb25uX2luZm8gKmNvbm5faW5mbztcXG4gXFx0c3RydWN0IG5jaV9kYXRhIGRhdGE7XFxuK1xcdHN0cnVjdCBza19idWZmICpyeF9za2I7XFxuIFxcdGludCByO1xcbiBcXHR1OCBwaXBlID0gbmRldi1cXHUwMDNlaGNpX2Rldi1cXHUwMDNlZ2F0ZTJwaXBlW2dhdGVdO1xcbiBcXG5AQCAtNjI0LDExICs2NjgsMTUgQEAgaW50IG5jaV9oY2lfZ2V0X3BhcmFtKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCB1OCBnYXRlLCB1OCBpZHgsXFxuIFxcdGlmIChwaXBlID09IE5DSV9IQ0lfSU5WQUxJRF9QSVBFKVxcbiBcXHRcXHRyZXR1cm4gLUVBRERSTk9UQVZBSUw7XFxuIFxcbitcXHRzcGluX2xvY2tfYmgoXFx1MDAyNm5kZXYtXFx1MDAzZWNvbm5faW5mb19sb2NrKTtcXG4gXFx0Y29ubl9pbmZvID0gbmRldi1cXHUwMDNlaGNpX2Rldi1cXHUwMDNlY29ubl9pbmZvO1xcbi1cXHRpZiAoIWNvbm5faW5mbylcXG4rXFx0aWYgKCFjb25uX2luZm8pIHtcXG4rXFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNm5kZXYtXFx1MDAzZWNvbm5faW5mb19sb2NrKTtcXG4gXFx0XFx0cmV0dXJuIC1FUFJPVE87XFxuK1xcdH1cXG4gXFxuIFxcdGRhdGEuY29ubl9pZCA9IGNvbm5faW5mby1cXHUwMDNlY29ubl9pZDtcXG4rXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNm5kZXYtXFx1MDAzZWNvbm5faW5mb19sb2NrKTtcXG4gXFx0ZGF0YS5waXBlID0gcGlwZTtcXG4gXFx0ZGF0YS5jbWQgPSBOQ0lfSENQX0hFQURFUihOQ0lfSENJX0hDUF9DT01NQU5ELFxcbiBcXHRcXHRcXHRcXHQgIE5DSV9IQ0lfQU5ZX0dFVF9QQVJBTUVURVIpO1xcbkBAIC02MzksMTMgKzY4NywyMiBAQCBpbnQgbmNpX2hjaV9nZXRfcGFyYW0oc3RydWN0IG5jaV9kZXYgKm5kZXYsIHU4IGdhdGUsIHU4IGlkeCxcXG4gXFx0XFx0XFx0bXNlY3NfdG9famlmZmllcyhOQ0lfREFUQV9USU1FT1VUKSk7XFxuIFxcbiBcXHRpZiAociA9PSBOQ0lfU1RBVFVTX09LKSB7XFxuLVxcdFxcdG1lc3NhZ2UgPSAoc3RydWN0IG5jaV9oY3BfbWVzc2FnZSAqKWNvbm5faW5mby1cXHUwMDNlcnhfc2tiLVxcdTAwM2VkYXRhO1xcbitcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNm5kZXYtXFx1MDAzZWNvbm5faW5mb19sb2NrKTtcXG4rXFx0XFx0Y29ubl9pbmZvID0gbmRldi1cXHUwMDNlaGNpX2Rldi1cXHUwMDNlY29ubl9pbmZvO1xcbitcXHRcXHRyeF9za2IgPSBjb25uX2luZm8gPyBjb25uX2luZm8tXFx1MDAzZXJ4X3NrYiA6IE5VTEw7XFxuK1xcdFxcdGlmICghcnhfc2tiKSB7XFxuK1xcdFxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZuZGV2LVxcdTAwM2Vjb25uX2luZm9fbG9jayk7XFxuK1xcdFxcdFxcdHJldHVybiAtRVBST1RPO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRtZXNzYWdlID0gKHN0cnVjdCBuY2lfaGNwX21lc3NhZ2UgKilyeF9za2ItXFx1MDAzZWRhdGE7XFxuIFxcdFxcdHIgPSBuY2lfaGNpX3Jlc3VsdF90b19lcnJubyhcXG4gXFx0XFx0XFx0TkNJX0hDUF9NU0dfR0VUX0NNRChtZXNzYWdlLVxcdTAwM2VoZWFkZXIpKTtcXG4tXFx0XFx0c2tiX3B1bGwoY29ubl9pbmZvLVxcdTAwM2VyeF9za2IsIE5DSV9IQ0lfSENQX01FU1NBR0VfSEVBREVSX0xFTik7XFxuK1xcdFxcdHNrYl9wdWxsKHJ4X3NrYiwgTkNJX0hDSV9IQ1BfTUVTU0FHRV9IRUFERVJfTEVOKTtcXG4rXFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNm5kZXYtXFx1MDAzZWNvbm5faW5mb19sb2NrKTtcXG4gXFxuIFxcdFxcdGlmICghciBcXHUwMDI2XFx1MDAyNiBza2IpXFxuLVxcdFxcdFxcdCpza2IgPSBjb25uX2luZm8tXFx1MDAzZXJ4X3NrYjtcXG4rXFx0XFx0XFx0KnNrYiA9IHJ4X3NrYjtcXG4gXFx0fVxcbiBcXG4gXFx0cmV0dXJuIHI7XFxuQEAgLTcyOSwxMiArNzg2LDE2IEBAIGludCBuY2lfaGNpX2Rldl9zZXNzaW9uX2luaXQoc3RydWN0IG5jaV9kZXYgKm5kZXYpXFxuIFxcdG5kZXYtXFx1MDAzZWhjaV9kZXYtXFx1MDAzZWNvdW50X3BpcGVzID0gMDtcXG4gXFx0bmRldi1cXHUwMDNlaGNpX2Rldi1cXHUwMDNlZXhwZWN0ZWRfcGlwZXMgPSAwO1xcbiBcXG4rXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZuZGV2LVxcdTAwM2Vjb25uX2luZm9fbG9jayk7XFxuIFxcdGNvbm5faW5mbyA9IG5kZXYtXFx1MDAzZWhjaV9kZXYtXFx1MDAzZWNvbm5faW5mbztcXG4tXFx0aWYgKCFjb25uX2luZm8pXFxuK1xcdGlmICghY29ubl9pbmZvKSB7XFxuK1xcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZuZGV2LVxcdTAwM2Vjb25uX2luZm9fbG9jayk7XFxuIFxcdFxcdHJldHVybiAtRVBST1RPO1xcbitcXHR9XFxuIFxcbiBcXHRjb25uX2luZm8tXFx1MDAzZWRhdGFfZXhjaGFuZ2VfY2IgPSBuY2lfaGNpX2RhdGFfcmVjZWl2ZWRfY2I7XFxuIFxcdGNvbm5faW5mby1cXHUwMDNlZGF0YV9leGNoYW5nZV9jYl9jb250ZXh0ID0gbmRldjtcXG4rXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNm5kZXYtXFx1MDAzZWNvbm5faW5mb19sb2NrKTtcXG4gXFxuIFxcdG5jaV9oY2lfcmVzZXRfcGlwZXMobmRldi1cXHUwMDNlaGNpX2Rldik7XFxuIFxcbmRpZmYgLS1naXQgYS9uZXQvbmZjL25jaS9udGYuYyBiL25ldC9uZmMvbmNpL250Zi5jXFxuaW5kZXggYzk2NTEyYmI4NjUzMTUuLjQ4MjhhMWM5ZDM1ZjBlIDEwMDY0NFxcbi0tLSBhL25ldC9uZmMvbmNpL250Zi5jXFxuKysrIGIvbmV0L25mYy9uY2kvbnRmLmNcXG5AQCAtODEsMTMgKzgxLDE3IEBAIHN0YXRpYyBpbnQgbmNpX2NvcmVfY29ubl9jcmVkaXRzX250Zl9wYWNrZXQoc3RydWN0IG5jaV9kZXYgKm5kZXYsXFxuIFxcdFxcdFxcdCBpLCBudGYtXFx1MDAzZWNvbm5fZW50cmllc1tpXS5jb25uX2lkLFxcbiBcXHRcXHRcXHQgbnRmLVxcdTAwM2Vjb25uX2VudHJpZXNbaV0uY3JlZGl0cyk7XFxuIFxcbi1cXHRcXHRjb25uX2luZm8gPSBuY2lfZ2V0X2Nvbm5faW5mb19ieV9jb25uX2lkKG5kZXYsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCBudGYtXFx1MDAzZWNvbm5fZW50cmllc1tpXS5jb25uX2lkKTtcXG4tXFx0XFx0aWYgKCFjb25uX2luZm8pXFxuK1xcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2bmRldi1cXHUwMDNlY29ubl9pbmZvX2xvY2spO1xcbitcXHRcXHRjb25uX2luZm8gPSBuY2lfZ2V0X2Nvbm5faW5mb19ieV9jb25uX2lkX2xvY2tlZChuZGV2LFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRudGYtXFx1MDAzZWNvbm5fZW50cmllc1tpXS5jb25uX2lkKTtcXG4rXFx0XFx0aWYgKCFjb25uX2luZm8pIHtcXG4rXFx0XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNm5kZXYtXFx1MDAzZWNvbm5faW5mb19sb2NrKTtcXG4gXFx0XFx0XFx0cmV0dXJuIDA7XFxuK1xcdFxcdH1cXG4gXFxuIFxcdFxcdGF0b21pY19hZGQobnRmLVxcdTAwM2Vjb25uX2VudHJpZXNbaV0uY3JlZGl0cyxcXG4gXFx0XFx0XFx0ICAgXFx1MDAyNmNvbm5faW5mby1cXHUwMDNlY3JlZGl0c19jbnQpO1xcbitcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2bmRldi1cXHUwMDNlY29ubl9pbmZvX2xvY2spO1xcbiBcXHR9XFxuIFxcbiBcXHQvKiB0cmlnZ2VyIHRoZSBuZXh0IHR4ICovXFxuQEAgLTgyOCw5ICs4MzIsMTIgQEAgc3RhdGljIGludCBuY2lfcmZfaW50Zl9hY3RpdmF0ZWRfbnRmX3BhY2tldChzdHJ1Y3QgbmNpX2RldiAqbmRldixcXG4gXFxuIGV4aXQ6XFxuIFxcdGlmIChlcnIgPT0gTkNJX1NUQVRVU19PSykge1xcbitcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNm5kZXYtXFx1MDAzZWNvbm5faW5mb19sb2NrKTtcXG4gXFx0XFx0Y29ubl9pbmZvID0gbmRldi1cXHUwMDNlcmZfY29ubl9pbmZvO1xcbi1cXHRcXHRpZiAoIWNvbm5faW5mbylcXG4rXFx0XFx0aWYgKCFjb25uX2luZm8pIHtcXG4rXFx0XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNm5kZXYtXFx1MDAzZWNvbm5faW5mb19sb2NrKTtcXG4gXFx0XFx0XFx0cmV0dXJuIDA7XFxuK1xcdFxcdH1cXG4gXFxuIFxcdFxcdGNvbm5faW5mby1cXHUwMDNlbWF4X3BrdF9wYXlsb2FkX2xlbiA9IG50Zi5tYXhfZGF0YV9wa3RfcGF5bG9hZF9zaXplO1xcbiBcXHRcXHRjb25uX2luZm8tXFx1MDAzZWluaXRpYWxfbnVtX2NyZWRpdHMgPSBudGYuaW5pdGlhbF9udW1fY3JlZGl0cztcXG5AQCAtODM4LDYgKzg0NSw3IEBAIHN0YXRpYyBpbnQgbmNpX3JmX2ludGZfYWN0aXZhdGVkX250Zl9wYWNrZXQoc3RydWN0IG5jaV9kZXYgKm5kZXYsXFxuIFxcdFxcdC8qIHNldCB0aGUgYXZhaWxhYmxlIGNyZWRpdHMgdG8gaW5pdGlhbCB2YWx1ZSAqL1xcbiBcXHRcXHRhdG9taWNfc2V0KFxcdTAwMjZjb25uX2luZm8tXFx1MDAzZWNyZWRpdHNfY250LFxcbiBcXHRcXHRcXHQgICBjb25uX2luZm8tXFx1MDAzZWluaXRpYWxfbnVtX2NyZWRpdHMpO1xcbitcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2bmRldi1cXHUwMDNlY29ubl9pbmZvX2xvY2spO1xcbiBcXG4gXFx0XFx0Lyogc3RvcmUgZ2VuZXJhbCBieXRlcyB0byBiZSByZXBvcnRlZCBsYXRlciBpbiBkZXBfbGlua191cCAqL1xcbiBcXHRcXHRpZiAobnRmLnJmX2ludGVyZmFjZSA9PSBOQ0lfUkZfSU5URVJGQUNFX05GQ19ERVApIHtcXG5AQCAtOTAxLDkgKzkwOSwxMyBAQCBzdGF0aWMgaW50IG5jaV9yZl9kZWFjdGl2YXRlX250Zl9wYWNrZXQoc3RydWN0IG5jaV9kZXYgKm5kZXYsXFxuIFxcbiBcXHRwcl9kZWJ1ZyhcXFwiZW50cnksIHR5cGUgMHgleCwgcmVhc29uIDB4JXhcXFxcblxcXCIsIG50Zi1cXHUwMDNldHlwZSwgbnRmLVxcdTAwM2VyZWFzb24pO1xcbiBcXG4rXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZuZGV2LVxcdTAwM2Vjb25uX2luZm9fbG9jayk7XFxuIFxcdGNvbm5faW5mbyA9IG5kZXYtXFx1MDAzZXJmX2Nvbm5faW5mbztcXG4tXFx0aWYgKCFjb25uX2luZm8pXFxuK1xcdGlmICghY29ubl9pbmZvKSB7XFxuK1xcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZuZGV2LVxcdTAwM2Vjb25uX2luZm9fbG9jayk7XFxuIFxcdFxcdHJldHVybiAwO1xcbitcXHR9XFxuK1xcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZuZGV2LVxcdTAwM2Vjb25uX2luZm9fbG9jayk7XFxuIFxcbiBcXHQvKiBkcm9wIHR4IGRhdGEgcXVldWUgKi9cXG4gXFx0c2tiX3F1ZXVlX3B1cmdlKFxcdTAwMjZuZGV2LVxcdTAwM2V0eF9xKTtcXG5kaWZmIC0tZ2l0IGEvbmV0L25mYy9uY2kvcnNwLmMgYi9uZXQvbmZjL25jaS9yc3AuY1xcbmluZGV4IDllZWI4NjI4MjVjNWZlLi4wY2ZmMTI1MDkyM2VkOSAxMDA2NDRcXG4tLS0gYS9uZXQvbmZjL25jaS9yc3AuY1xcbisrKyBiL25ldC9uZmMvbmNpL3JzcC5jXFxuQEAgLTE4Niw2ICsxODYsNyBAQCBzdGF0aWMgdm9pZCBuY2lfcmZfZGlzY19yc3BfcGFja2V0KHN0cnVjdCBuY2lfZGV2ICpuZGV2LFxcbiBcXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiB7XFxuIFxcdHN0cnVjdCBuY2lfY29ubl9pbmZvICpjb25uX2luZm87XFxuK1xcdHN0cnVjdCBuY2lfY29ubl9pbmZvICpuZXdfY29ubl9pbmZvO1xcbiBcXHRfX3U4IHN0YXR1cyA9IHNrYi1cXHUwMDNlZGF0YVswXTtcXG4gXFxuIFxcdHByX2RlYnVnKFxcXCJzdGF0dXMgMHgleFxcXFxuXFxcIiwgc3RhdHVzKTtcXG5AQCAtMTkzLDE5ICsxOTQsMzMgQEAgc3RhdGljIHZvaWQgbmNpX3JmX2Rpc2NfcnNwX3BhY2tldChzdHJ1Y3QgbmNpX2RldiAqbmRldixcXG4gXFx0aWYgKHN0YXR1cyA9PSBOQ0lfU1RBVFVTX09LKSB7XFxuIFxcdFxcdGF0b21pY19zZXQoXFx1MDAyNm5kZXYtXFx1MDAzZXN0YXRlLCBOQ0lfRElTQ09WRVJZKTtcXG4gXFxuK1xcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2bmRldi1cXHUwMDNlY29ubl9pbmZvX2xvY2spO1xcbiBcXHRcXHRjb25uX2luZm8gPSBuZGV2LVxcdTAwM2VyZl9jb25uX2luZm87XFxuK1xcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZuZGV2LVxcdTAwM2Vjb25uX2luZm9fbG9jayk7XFxuK1xcbiBcXHRcXHRpZiAoIWNvbm5faW5mbykge1xcbi1cXHRcXHRcXHRjb25uX2luZm8gPSBkZXZtX2t6YWxsb2MoXFx1MDAyNm5kZXYtXFx1MDAzZW5mY19kZXYtXFx1MDAzZWRldixcXG4tXFx0XFx0XFx0XFx0XFx0XFx0IHNpemVvZihzdHJ1Y3QgbmNpX2Nvbm5faW5mbyksXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCBHRlBfS0VSTkVMKTtcXG4tXFx0XFx0XFx0aWYgKCFjb25uX2luZm8pIHtcXG4rXFx0XFx0XFx0bmV3X2Nvbm5faW5mbyA9IGRldm1fa3phbGxvYyhcXHUwMDI2bmRldi1cXHUwMDNlbmZjX2Rldi1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgIHNpemVvZihzdHJ1Y3QgbmNpX2Nvbm5faW5mbyksXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgR0ZQX0tFUk5FTCk7XFxuK1xcdFxcdFxcdGlmICghbmV3X2Nvbm5faW5mbykge1xcbiBcXHRcXHRcXHRcXHRzdGF0dXMgPSBOQ0lfU1RBVFVTX1JFSkVDVEVEO1xcbiBcXHRcXHRcXHRcXHRnb3RvIGV4aXQ7XFxuIFxcdFxcdFxcdH1cXG4tXFx0XFx0XFx0Y29ubl9pbmZvLVxcdTAwM2Vjb25uX2lkID0gTkNJX1NUQVRJQ19SRl9DT05OX0lEO1xcbi1cXHRcXHRcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2Y29ubl9pbmZvLVxcdTAwM2VsaXN0KTtcXG4tXFx0XFx0XFx0bGlzdF9hZGQoXFx1MDAyNmNvbm5faW5mby1cXHUwMDNlbGlzdCwgXFx1MDAyNm5kZXYtXFx1MDAzZWNvbm5faW5mb19saXN0KTtcXG4tXFx0XFx0XFx0bmRldi1cXHUwMDNlcmZfY29ubl9pbmZvID0gY29ubl9pbmZvO1xcbitcXG4rXFx0XFx0XFx0bmV3X2Nvbm5faW5mby1cXHUwMDNlY29ubl9pZCA9IE5DSV9TVEFUSUNfUkZfQ09OTl9JRDtcXG4rXFx0XFx0XFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNm5ld19jb25uX2luZm8tXFx1MDAzZWxpc3QpO1xcbitcXG4rXFx0XFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZuZGV2LVxcdTAwM2Vjb25uX2luZm9fbG9jayk7XFxuK1xcdFxcdFxcdGlmICghbmRldi1cXHUwMDNlcmZfY29ubl9pbmZvKSB7XFxuK1xcdFxcdFxcdFxcdGxpc3RfYWRkKFxcdTAwMjZuZXdfY29ubl9pbmZvLVxcdTAwM2VsaXN0LFxcbitcXHRcXHRcXHRcXHRcXHQgXFx1MDAyNm5kZXYtXFx1MDAzZWNvbm5faW5mb19saXN0KTtcXG4rXFx0XFx0XFx0XFx0bmRldi1cXHUwMDNlcmZfY29ubl9pbmZvID0gbmV3X2Nvbm5faW5mbztcXG4rXFx0XFx0XFx0XFx0bmV3X2Nvbm5faW5mbyA9IE5VTEw7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNm5kZXYtXFx1MDAzZWNvbm5faW5mb19sb2NrKTtcXG4rXFxuK1xcdFxcdFxcdGlmIChuZXdfY29ubl9pbmZvKVxcbitcXHRcXHRcXHRcXHRkZXZtX2tmcmVlKFxcdTAwMjZuZGV2LVxcdTAwM2VuZmNfZGV2LVxcdTAwM2VkZXYsIG5ld19jb25uX2luZm8pO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG4gXFxuQEAgLTI5OCwyMCArMzEzLDIwIEBAIHN0YXRpYyB2b2lkIG5jaV9jb3JlX2Nvbm5fY3JlYXRlX3JzcF9wYWNrZXQoc3RydWN0IG5jaV9kZXYgKm5kZXYsXFxuIFxcdFxcdGNvbm5faW5mby1cXHUwMDNlZGVzdF9wYXJhbXMtXFx1MDAzZWlkID0gbmRldi1cXHUwMDNlY3VyX3BhcmFtcy5pZDtcXG4gXFx0XFx0Y29ubl9pbmZvLVxcdTAwM2VkZXN0X3BhcmFtcy1cXHUwMDNlcHJvdG9jb2wgPSBuZGV2LVxcdTAwM2VjdXJfcGFyYW1zLnByb3RvY29sO1xcbiBcXHRcXHRjb25uX2luZm8tXFx1MDAzZWNvbm5faWQgPSByc3AtXFx1MDAzZWNvbm5faWQ7XFxuK1xcdFxcdGNvbm5faW5mby1cXHUwMDNlbWF4X3BrdF9wYXlsb2FkX2xlbiA9IHJzcC1cXHUwMDNlbWF4X2N0cmxfcGt0X3BheWxvYWRfbGVuO1xcbitcXHRcXHRhdG9taWNfc2V0KFxcdTAwMjZjb25uX2luZm8tXFx1MDAzZWNyZWRpdHNfY250LCByc3AtXFx1MDAzZWNyZWRpdHNfY250KTtcXG4gXFxuIFxcdFxcdC8qIE5vdGU6IGRhdGFfZXhjaGFuZ2VfY2IgYW5kIGRhdGFfZXhjaGFuZ2VfY2JfY29udGV4dCBuZWVkIHRvXFxuIFxcdFxcdCAqIGJlIHNwZWNpZnkgb3V0IG9mIG5jaV9jb3JlX2Nvbm5fY3JlYXRlX3JzcF9wYWNrZXRcXG4gXFx0XFx0ICovXFxuIFxcbiBcXHRcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2Y29ubl9pbmZvLVxcdTAwM2VsaXN0KTtcXG4rXFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZuZGV2LVxcdTAwM2Vjb25uX2luZm9fbG9jayk7XFxuIFxcdFxcdGxpc3RfYWRkKFxcdTAwMjZjb25uX2luZm8tXFx1MDAzZWxpc3QsIFxcdTAwMjZuZGV2LVxcdTAwM2Vjb25uX2luZm9fbGlzdCk7XFxuIFxcbiBcXHRcXHRpZiAobmRldi1cXHUwMDNlY3VyX3BhcmFtcy5pZCA9PSBuZGV2LVxcdTAwM2VoY2lfZGV2LVxcdTAwM2VuZmNlZV9pZClcXG4gXFx0XFx0XFx0bmRldi1cXHUwMDNlaGNpX2Rldi1cXHUwMDNlY29ubl9pbmZvID0gY29ubl9pbmZvO1xcbi1cXG4tXFx0XFx0Y29ubl9pbmZvLVxcdTAwM2Vjb25uX2lkID0gcnNwLVxcdTAwM2Vjb25uX2lkO1xcbi1cXHRcXHRjb25uX2luZm8tXFx1MDAzZW1heF9wa3RfcGF5bG9hZF9sZW4gPSByc3AtXFx1MDAzZW1heF9jdHJsX3BrdF9wYXlsb2FkX2xlbjtcXG4tXFx0XFx0YXRvbWljX3NldChcXHUwMDI2Y29ubl9pbmZvLVxcdTAwM2VjcmVkaXRzX2NudCwgcnNwLVxcdTAwM2VjcmVkaXRzX2NudCk7XFxuK1xcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZuZGV2LVxcdTAwM2Vjb25uX2luZm9fbG9jayk7XFxuIFxcdH1cXG4gXFxuIGZyZWVfY29ubl9pbmZvOlxcbkBAIC0zMzAsMTQgKzM0NSwxOSBAQCBzdGF0aWMgdm9pZCBuY2lfY29yZV9jb25uX2Nsb3NlX3JzcF9wYWNrZXQoc3RydWN0IG5jaV9kZXYgKm5kZXYsXFxuIFxcbiBcXHRwcl9kZWJ1ZyhcXFwic3RhdHVzIDB4JXhcXFxcblxcXCIsIHN0YXR1cyk7XFxuIFxcdGlmIChzdGF0dXMgPT0gTkNJX1NUQVRVU19PSykge1xcbi1cXHRcXHRjb25uX2luZm8gPSBuY2lfZ2V0X2Nvbm5faW5mb19ieV9jb25uX2lkKG5kZXYsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCBuZGV2LVxcdTAwM2VjdXJfY29ubl9pZCk7XFxuK1xcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2bmRldi1cXHUwMDNlY29ubl9pbmZvX2xvY2spO1xcbitcXHRcXHRjb25uX2luZm8gPSBuY2lfZ2V0X2Nvbm5faW5mb19ieV9jb25uX2lkX2xvY2tlZChuZGV2LFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRuZGV2LVxcdTAwM2VjdXJfY29ubl9pZCk7XFxuIFxcdFxcdGlmIChjb25uX2luZm8pIHtcXG4gXFx0XFx0XFx0bGlzdF9kZWwoXFx1MDAyNmNvbm5faW5mby1cXHUwMDNlbGlzdCk7XFxuIFxcdFxcdFxcdGlmIChjb25uX2luZm8gPT0gbmRldi1cXHUwMDNlcmZfY29ubl9pbmZvKVxcbiBcXHRcXHRcXHRcXHRuZGV2LVxcdTAwM2VyZl9jb25uX2luZm8gPSBOVUxMO1xcbi1cXHRcXHRcXHRkZXZtX2tmcmVlKFxcdTAwMjZuZGV2LVxcdTAwM2VuZmNfZGV2LVxcdTAwM2VkZXYsIGNvbm5faW5mbyk7XFxuK1xcdFxcdFxcdGlmIChjb25uX2luZm8gPT0gbmRldi1cXHUwMDNlaGNpX2Rldi1cXHUwMDNlY29ubl9pbmZvKVxcbitcXHRcXHRcXHRcXHRuZGV2LVxcdTAwM2VoY2lfZGV2LVxcdTAwM2Vjb25uX2luZm8gPSBOVUxMO1xcbiBcXHRcXHR9XFxuK1xcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZuZGV2LVxcdTAwM2Vjb25uX2luZm9fbG9jayk7XFxuK1xcdFxcdGlmIChjb25uX2luZm8pXFxuK1xcdFxcdFxcdGRldm1fa2ZyZWUoXFx1MDAyNm5kZXYtXFx1MDAzZW5mY19kZXYtXFx1MDAzZWRldiwgY29ubl9pbmZvKTtcXG4gXFx0fVxcbiBcXHRuY2lfcmVxX2NvbXBsZXRlKG5kZXYsIHN0YXR1cyk7XFxuIH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDk6MjU6MzIuNjg0Mzc0OTkxWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NzU3NTU4MjgwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORkNcIixcbiAgICBcIk5GQ19OQ0lcIixcbiAgICBcIk5GQ19WSVJUVUFMX05DSVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5jaV9uZmNjX2xvb3BiYWNrXCIsXG4gICAgXCJuY2lfdHJhbnNjZWl2ZVwiLFxuICAgIFwibmNpX3NlbmRfZGF0YVwiLFxuICAgIFwibmNpX3J4X2RhdGFfcGFja2V0XCIsXG4gICAgXCJuY2lfaGNpX3NlbmRfY21kXCIsXG4gICAgXCJuY2lfaGNpX3NldF9wYXJhbVwiLFxuICAgIFwibmNpX2hjaV9nZXRfcGFyYW1cIixcbiAgICBcIm5jaV9jb3JlX2Nvbm5fY3JlYXRlX3JzcF9wYWNrZXRcIixcbiAgICBcIm5jaV9jb3JlX2Nvbm5fY2xvc2VfcnNwX3BhY2tldFwiLFxuICAgIFwibmNpX3JmX2Rpc2NfcnNwX3BhY2tldFwiLFxuICAgIFwibmNpX2NvcmVfY29ubl9jcmVkaXRzX250Zl9wYWNrZXRcIixcbiAgICBcIm5jaV9yZl9pbnRmX2FjdGl2YXRlZF9udGZfcGFja2V0XCIsXG4gICAgXCJuY2lfcmZfZGVhY3RpdmF0ZV9udGZfcGFja2V0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgY29uY3VycmVuY3kgaXNzdWVzIGluIHRoZSBORkMgTkNJIGNvcmUgYnkgaW50cm9kdWNpbmcgYSBzcGlubG9jayB0byBwcm90ZWN0IGNvbm5lY3Rpb24gaW5mbyBsaXN0cyBhbmQgcG9pbnRlcnMuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGNvcmUgZGF0YSB0cmFuc21pc3Npb24sIHJlY2VwdGlvbiwgYW5kIEhDSSBjb21tYW5kIGhhbmRsaW5nLCB3aGljaCBhcmUgcmVhY2hhYmxlIHZpYSB0aGUgdmlydHVhbCBOQ0kgZHJpdmVyLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGFlNTVlODhkN2E0ZjcxMDViNDQ4NjgyMmUzYWRmNTM4OGYxYjhhMDBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1biAzMCAwOToyNToyOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmZjL3N0LW5jaS9zZS5jIGIvZHJpdmVycy9uZmMvc3QtbmNpL3NlLmNcbmluZGV4IDYwN2VjNzY4ZWI3YjRjLi4xZjhlMjI2NWUyMGIwNyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmZjL3N0LW5jaS9zZS5jXG4rKysgYi9kcml2ZXJzL25mYy9zdC1uY2kvc2UuY1xuQEAgLTU0OCw2ICs1NDgsNyBAQCBzdGF0aWMgaW50IHN0X25jaV9oY2lfbmV0d29ya19pbml0KHN0cnVjdCBuY2lfZGV2ICpuZGV2KVxuIFx0c3RydWN0IGNvcmVfY29ubl9jcmVhdGVfZGVzdF9zcGVjX3BhcmFtcyAqZGVzdF9wYXJhbXM7XG4gXHRzdHJ1Y3QgZGVzdF9zcGVjX3BhcmFtcyBzcGVjX3BhcmFtcztcbiBcdHN0cnVjdCBuY2lfY29ubl9pbmZvICAgICpjb25uX2luZm87XG4rXHR1OCBuZmNlZV9pZDtcbiBcdGludCByLCBkZXZfbnVtO1xuIFxuIFx0ZGVzdF9wYXJhbXMgPVxuQEAgLTU2OSw5ICs1NzAsMTQgQEAgc3RhdGljIGludCBzdF9uY2lfaGNpX25ldHdvcmtfaW5pdChzdHJ1Y3QgbmNpX2RldiAqbmRldilcbiBcdGlmIChyICE9IE5DSV9TVEFUVVNfT0spXG4gXHRcdGdvdG8gZnJlZV9kZXN0X3BhcmFtcztcbiBcbitcdHNwaW5fbG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbiBcdGNvbm5faW5mbyA9IG5kZXYtXHUwMDNlaGNpX2Rldi1cdTAwM2Vjb25uX2luZm87XG4tXHRpZiAoIWNvbm5faW5mbylcbitcdGlmICghY29ubl9pbmZvKSB7XG4rXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xuIFx0XHRnb3RvIGZyZWVfZGVzdF9wYXJhbXM7XG4rXHR9XG4rXHRuZmNlZV9pZCA9IGNvbm5faW5mby1cdTAwM2VkZXN0X3BhcmFtcy1cdTAwM2VpZDtcbitcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xuIFxuIFx0bmRldi1cdTAwM2VoY2lfZGV2LVx1MDAzZWluaXRfZGF0YS5nYXRlX2NvdW50ID0gQVJSQVlfU0laRShzdF9uY2lfZ2F0ZXMpO1xuIFx0bWVtY3B5KG5kZXYtXHUwMDNlaGNpX2Rldi1cdTAwM2Vpbml0X2RhdGEuZ2F0ZXMsIHN0X25jaV9nYXRlcyxcbkBAIC02MDEsMTMgKzYwNyw5IEBAIHN0YXRpYyBpbnQgc3RfbmNpX2hjaV9uZXR3b3JrX2luaXQoc3RydWN0IG5jaV9kZXYgKm5kZXYpXG4gXHQgKiBIQ0kgd2lsbCBiZSB1c2VkIGhlcmUgb25seSBmb3IgcHJvcHJpZXRhcnkgY29tbWFuZHMuXG4gXHQgKi9cbiBcdGlmICh0ZXN0X2JpdChTVF9OQ0lfRkFDVE9SWV9NT0RFLCBcdTAwMjZpbmZvLVx1MDAzZWZsYWdzKSlcbi1cdFx0ciA9IG5jaV9uZmNlZV9tb2RlX3NldChuZGV2LFxuLVx0XHRcdFx0ICAgICAgIG5kZXYtXHUwMDNlaGNpX2Rldi1cdTAwM2Vjb25uX2luZm8tXHUwMDNlZGVzdF9wYXJhbXMtXHUwMDNlaWQsXG4tXHRcdFx0XHQgICAgICAgTkNJX05GQ0VFX0RJU0FCTEUpO1xuK1x0XHRyID0gbmNpX25mY2VlX21vZGVfc2V0KG5kZXYsIG5mY2VlX2lkLCBOQ0lfTkZDRUVfRElTQUJMRSk7XG4gXHRlbHNlXG4tXHRcdHIgPSBuY2lfbmZjZWVfbW9kZV9zZXQobmRldixcbi1cdFx0XHRcdCAgICAgICBuZGV2LVx1MDAzZWhjaV9kZXYtXHUwMDNlY29ubl9pbmZvLVx1MDAzZWRlc3RfcGFyYW1zLVx1MDAzZWlkLFxuLVx0XHRcdFx0ICAgICAgIE5DSV9ORkNFRV9FTkFCTEUpO1xuK1x0XHRyID0gbmNpX25mY2VlX21vZGVfc2V0KG5kZXYsIG5mY2VlX2lkLCBOQ0lfTkZDRUVfRU5BQkxFKTtcbiBcbiBmcmVlX2Rlc3RfcGFyYW1zOlxuIFx0a2ZyZWUoZGVzdF9wYXJhbXMpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25mYy9uY2lfY29yZS5oIGIvaW5jbHVkZS9uZXQvbmZjL25jaV9jb3JlLmhcbmluZGV4IDY2NGQ1MDU4ZTY2ZTAxLi5hNWIxODZmMjczZDk3NCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L25mYy9uY2lfY29yZS5oXG4rKysgYi9pbmNsdWRlL25ldC9uZmMvbmNpX2NvcmUuaFxuQEAgLTE5LDYgKzE5LDcgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pbnRlcnJ1cHQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NrYnVmZi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvc3BpbmxvY2suaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3R0eS5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXHUwMDNjbmV0L25mYy9uZmMuaFx1MDAzZVxuQEAgLTIyNyw2ICsyMjgsOCBAQCBzdHJ1Y3QgbmNpX2RldiB7XG4gXHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkXHR0eF9xO1xuIFxuIFx0c3RydWN0IG11dGV4XHRcdHJlcV9sb2NrO1xuK1x0LyogU2VyaWFsaXplcyBjb25uX2luZm9fbGlzdCBhbmQgY29ubl9pbmZvIHBvaW50ZXIgYWxpYXMgdXBkYXRlcy4gKi9cbitcdHNwaW5sb2NrX3RcdFx0Y29ubl9pbmZvX2xvY2s7XG4gXHRzdHJ1Y3QgY29tcGxldGlvblx0cmVxX2NvbXBsZXRpb247XG4gXHRfX3UzMlx0XHRcdHJlcV9zdGF0dXM7XG4gXHRfX3UzMlx0XHRcdHJlcV9yZXN1bHQ7XG5AQCAtMzgyLDggKzM4NSwxMSBAQCB2b2lkIG5jaV9jbGVhcl90YXJnZXRfbGlzdChzdHJ1Y3QgbmNpX2RldiAqbmRldik7XG4gI2RlZmluZSBOQ0lfUkVRX0NBTkNFTEVEXHQyXG4gXG4gdm9pZCBuY2lfcmVxX2NvbXBsZXRlKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCBpbnQgcmVzdWx0KTtcbi1zdHJ1Y3QgbmNpX2Nvbm5faW5mbyAqbmNpX2dldF9jb25uX2luZm9fYnlfY29ubl9pZChzdHJ1Y3QgbmNpX2RldiAqbmRldixcbi1cdFx0XHRcdFx0XHQgICBpbnQgY29ubl9pZCk7XG4rc3RydWN0IG5jaV9jb25uX2luZm8gKm5jaV9nZXRfY29ubl9pbmZvX2J5X2Nvbm5faWRfbG9ja2VkKHN0cnVjdCBuY2lfZGV2ICpuZGV2LFxuK1x0XHRcdFx0XHRcdFx0ICBpbnQgY29ubl9pZCk7XG4raW50IG5jaV9nZXRfY29ubl9pbmZvX2J5X2Rlc3RfdHlwZV9wYXJhbXNfbG9ja2VkKHN0cnVjdCBuY2lfZGV2ICpuZGV2LFxuK1x0XHRcdFx0XHRcdCB1OCBkZXN0X3R5cGUsXG4rXHRcdFx0XHRcdFx0IGNvbnN0IHN0cnVjdCBkZXN0X3NwZWNfcGFyYW1zICpwYXJhbXMpO1xuIGludCBuY2lfZ2V0X2Nvbm5faW5mb19ieV9kZXN0X3R5cGVfcGFyYW1zKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCB1OCBkZXN0X3R5cGUsXG4gXHRcdFx0XHRcdCAgY29uc3Qgc3RydWN0IGRlc3Rfc3BlY19wYXJhbXMgKnBhcmFtcyk7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L25mYy9uY2kvY29yZS5jIGIvbmV0L25mYy9uY2kvY29yZS5jXG5pbmRleCA1ZjQ2YzRiNTcyMGY2Yy4uNTc1OTVhODI5YzhiMDYgMTAwNjQ0XG4tLS0gYS9uZXQvbmZjL25jaS9jb3JlLmNcbisrKyBiL25ldC9uZmMvbmNpL2NvcmUuY1xuQEAgLTQwLDggKzQwLDggQEAgc3RhdGljIHZvaWQgbmNpX2NtZF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XG4gc3RhdGljIHZvaWQgbmNpX3J4X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcbiBzdGF0aWMgdm9pZCBuY2lfdHhfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xuIFxuLXN0cnVjdCBuY2lfY29ubl9pbmZvICpuY2lfZ2V0X2Nvbm5faW5mb19ieV9jb25uX2lkKHN0cnVjdCBuY2lfZGV2ICpuZGV2LFxuLVx0XHRcdFx0XHRcdCAgIGludCBjb25uX2lkKVxuK3N0cnVjdCBuY2lfY29ubl9pbmZvICpuY2lfZ2V0X2Nvbm5faW5mb19ieV9jb25uX2lkX2xvY2tlZChzdHJ1Y3QgbmNpX2RldiAqbmRldixcbitcdFx0XHRcdFx0XHRcdCAgaW50IGNvbm5faWQpXG4ge1xuIFx0c3RydWN0IG5jaV9jb25uX2luZm8gKmNvbm5faW5mbztcbiBcbkBAIC01Myw4ICs1Myw5IEBAIHN0cnVjdCBuY2lfY29ubl9pbmZvICpuY2lfZ2V0X2Nvbm5faW5mb19ieV9jb25uX2lkKHN0cnVjdCBuY2lfZGV2ICpuZGV2LFxuIFx0cmV0dXJuIE5VTEw7XG4gfVxuIFxuLWludCBuY2lfZ2V0X2Nvbm5faW5mb19ieV9kZXN0X3R5cGVfcGFyYW1zKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCB1OCBkZXN0X3R5cGUsXG4tXHRcdFx0XHRcdCAgY29uc3Qgc3RydWN0IGRlc3Rfc3BlY19wYXJhbXMgKnBhcmFtcylcbitpbnQgbmNpX2dldF9jb25uX2luZm9fYnlfZGVzdF90eXBlX3BhcmFtc19sb2NrZWQoc3RydWN0IG5jaV9kZXYgKm5kZXYsXG4rXHRcdFx0XHRcdFx0IHU4IGRlc3RfdHlwZSxcbitcdFx0XHRcdFx0XHQgY29uc3Qgc3RydWN0IGRlc3Rfc3BlY19wYXJhbXMgKnBhcmFtcylcbiB7XG4gXHRjb25zdCBzdHJ1Y3QgbmNpX2Nvbm5faW5mbyAqY29ubl9pbmZvO1xuIFxuQEAgLTcxLDYgKzcyLDE5IEBAIGludCBuY2lfZ2V0X2Nvbm5faW5mb19ieV9kZXN0X3R5cGVfcGFyYW1zKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCB1OCBkZXN0X3R5cGUsXG4gXG4gXHRyZXR1cm4gLUVJTlZBTDtcbiB9XG4rXG4raW50IG5jaV9nZXRfY29ubl9pbmZvX2J5X2Rlc3RfdHlwZV9wYXJhbXMoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHU4IGRlc3RfdHlwZSxcbitcdFx0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgZGVzdF9zcGVjX3BhcmFtcyAqcGFyYW1zKVxuK3tcbitcdGludCBjb25uX2lkO1xuK1xuK1x0c3Bpbl9sb2NrX2JoKFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xuK1x0Y29ubl9pZCA9IG5jaV9nZXRfY29ubl9pbmZvX2J5X2Rlc3RfdHlwZV9wYXJhbXNfbG9ja2VkKG5kZXYsIGRlc3RfdHlwZSxcbitcdFx0XHRcdFx0XHRcdCAgICAgICBwYXJhbXMpO1xuK1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bmRldi1cdTAwM2Vjb25uX2luZm9fbG9jayk7XG4rXG4rXHRyZXR1cm4gY29ubl9pZDtcbit9XG4gRVhQT1JUX1NZTUJPTChuY2lfZ2V0X2Nvbm5faW5mb19ieV9kZXN0X3R5cGVfcGFyYW1zKTtcbiBcbiAvKiAtLS0tIE5DSSByZXF1ZXN0cyAtLS0tICovXG5AQCAtNDExLDEzICs0MjUsMTcgQEAgc3RhdGljIHZvaWQgbmNpX25mY2NfbG9vcGJhY2tfY2Iodm9pZCAqY29udGV4dCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGVycilcbiBcdHN0cnVjdCBuY2lfZGV2ICpuZGV2ID0gKHN0cnVjdCBuY2lfZGV2ICopY29udGV4dDtcbiBcdHN0cnVjdCBuY2lfY29ubl9pbmZvICpjb25uX2luZm87XG4gXG4tXHRjb25uX2luZm8gPSBuY2lfZ2V0X2Nvbm5faW5mb19ieV9jb25uX2lkKG5kZXYsIG5kZXYtXHUwMDNlY3VyX2Nvbm5faWQpO1xuK1x0c3Bpbl9sb2NrX2JoKFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xuK1x0Y29ubl9pbmZvID0gbmNpX2dldF9jb25uX2luZm9fYnlfY29ubl9pZF9sb2NrZWQobmRldixcbitcdFx0XHRcdFx0XHRcdG5kZXYtXHUwMDNlY3VyX2Nvbm5faWQpO1xuIFx0aWYgKCFjb25uX2luZm8pIHtcbitcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bmRldi1cdTAwM2Vjb25uX2luZm9fbG9jayk7XG4gXHRcdG5jaV9yZXFfY29tcGxldGUobmRldiwgTkNJX1NUQVRVU19SRUpFQ1RFRCk7XG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbiBcdGNvbm5faW5mby1cdTAwM2VyeF9za2IgPSBza2I7XG4rXHRzcGluX3VubG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbiBcbiBcdG5jaV9yZXFfY29tcGxldGUobmRldiwgTkNJX1NUQVRVU19PSyk7XG4gfVxuQEAgLTQ0MywxMyArNDYxLDE3IEBAIGludCBuY2lfbmZjY19sb29wYmFjayhzdHJ1Y3QgbmNpX2RldiAqbmRldiwgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGRhdGFfbGVuLFxuIFx0XHRcdFx0XHROVUxMKTtcbiBcdH1cbiBcbi1cdGNvbm5faW5mbyA9IG5jaV9nZXRfY29ubl9pbmZvX2J5X2Nvbm5faWQobmRldiwgY29ubl9pZCk7XG4tXHRpZiAoIWNvbm5faW5mbylcbitcdHNwaW5fbG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbitcdGNvbm5faW5mbyA9IG5jaV9nZXRfY29ubl9pbmZvX2J5X2Nvbm5faWRfbG9ja2VkKG5kZXYsIGNvbm5faWQpO1xuK1x0aWYgKCFjb25uX2luZm8pIHtcbitcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bmRldi1cdTAwM2Vjb25uX2luZm9fbG9jayk7XG4gXHRcdHJldHVybiAtRVBST1RPO1xuK1x0fVxuIFxuIFx0Lyogc3RvcmUgY2IgYW5kIGNvbnRleHQgdG8gYmUgdXNlZCBvbiByZWNlaXZpbmcgZGF0YSAqL1xuIFx0Y29ubl9pbmZvLVx1MDAzZWRhdGFfZXhjaGFuZ2VfY2IgPSBuY2lfbmZjY19sb29wYmFja19jYjtcbiBcdGNvbm5faW5mby1cdTAwM2VkYXRhX2V4Y2hhbmdlX2NiX2NvbnRleHQgPSBuZGV2O1xuK1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bmRldi1cdTAwM2Vjb25uX2luZm9fbG9jayk7XG4gXG4gXHRza2IgPSBuY2lfc2tiX2FsbG9jKG5kZXYsIE5DSV9EQVRBX0hEUl9TSVpFICsgZGF0YV9sZW4sIEdGUF9LRVJORUwpO1xuIFx0aWYgKCFza2IpXG5AQCAtNDY0LDggKzQ4NiwxNSBAQCBpbnQgbmNpX25mY2NfbG9vcGJhY2soc3RydWN0IG5jaV9kZXYgKm5kZXYsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBkYXRhX2xlbixcbiBcdG5kZXYtXHUwMDNlY3VyX2Nvbm5faWQgPSBjb25uX2lkO1xuIFx0ciA9IG5jaV9yZXF1ZXN0KG5kZXYsIG5jaV9zZW5kX2RhdGFfcmVxLCBcdTAwMjZsb29wYmFja19kYXRhLFxuIFx0XHRcdG1zZWNzX3RvX2ppZmZpZXMoTkNJX0RBVEFfVElNRU9VVCkpO1xuLVx0aWYgKHIgPT0gTkNJX1NUQVRVU19PSyBcdTAwMjZcdTAwMjYgcmVzcClcbi1cdFx0KnJlc3AgPSBjb25uX2luZm8tXHUwMDNlcnhfc2tiO1xuK1x0aWYgKHIgPT0gTkNJX1NUQVRVU19PSyBcdTAwMjZcdTAwMjYgcmVzcCkge1xuK1x0XHRzcGluX2xvY2tfYmgoXHUwMDI2bmRldi1cdTAwM2Vjb25uX2luZm9fbG9jayk7XG4rXHRcdGNvbm5faW5mbyA9IG5jaV9nZXRfY29ubl9pbmZvX2J5X2Nvbm5faWRfbG9ja2VkKG5kZXYsIGNvbm5faWQpO1xuK1x0XHRpZiAoY29ubl9pbmZvKVxuK1x0XHRcdCpyZXNwID0gY29ubl9pbmZvLVx1MDAzZXJ4X3NrYjtcbitcdFx0ZWxzZVxuK1x0XHRcdHIgPSAtRVBST1RPO1xuK1x0XHRzcGluX3VubG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbitcdH1cbiBcbiBcdHJldHVybiByO1xuIH1cbkBAIC0xMDQ1LDEyICsxMDc0LDYgQEAgc3RhdGljIGludCBuY2lfdHJhbnNjZWl2ZShzdHJ1Y3QgbmZjX2RldiAqbmZjX2Rldiwgc3RydWN0IG5mY190YXJnZXQgKnRhcmdldCxcbiBcdGludCByYztcbiBcdHN0cnVjdCBuY2lfY29ubl9pbmZvICpjb25uX2luZm87XG4gXG4tXHRjb25uX2luZm8gPSBuZGV2LVx1MDAzZXJmX2Nvbm5faW5mbztcbi1cdGlmICghY29ubl9pbmZvKSB7XG4tXHRcdGtmcmVlX3NrYihza2IpO1xuLVx0XHRyZXR1cm4gLUVQUk9UTztcbi1cdH1cbi1cbiBcdHByX2RlYnVnKFwidGFyZ2V0X2lkeCAlZCwgbGVuICVkXFxuXCIsIHRhcmdldC1cdTAwM2VpZHgsIHNrYi1cdTAwM2VsZW4pO1xuIFxuIFx0aWYgKCFuZGV2LVx1MDAzZXRhcmdldF9hY3RpdmVfcHJvdCkge1xuQEAgLTEwNjQsOSArMTA4NywxOSBAQCBzdGF0aWMgaW50IG5jaV90cmFuc2NlaXZlKHN0cnVjdCBuZmNfZGV2ICpuZmNfZGV2LCBzdHJ1Y3QgbmZjX3RhcmdldCAqdGFyZ2V0LFxuIFx0XHRyZXR1cm4gLUVCVVNZO1xuIFx0fVxuIFxuK1x0c3Bpbl9sb2NrX2JoKFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xuK1x0Y29ubl9pbmZvID0gbmRldi1cdTAwM2VyZl9jb25uX2luZm87XG4rXHRpZiAoIWNvbm5faW5mbykge1xuK1x0XHRzcGluX3VubG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbitcdFx0a2ZyZWVfc2tiKHNrYik7XG4rXHRcdGNsZWFyX2JpdChOQ0lfREFUQV9FWENIQU5HRSwgXHUwMDI2bmRldi1cdTAwM2VmbGFncyk7XG4rXHRcdHJldHVybiAtRVBST1RPO1xuK1x0fVxuK1xuIFx0Lyogc3RvcmUgY2IgYW5kIGNvbnRleHQgdG8gYmUgdXNlZCBvbiByZWNlaXZpbmcgZGF0YSAqL1xuIFx0Y29ubl9pbmZvLVx1MDAzZWRhdGFfZXhjaGFuZ2VfY2IgPSBjYjtcbiBcdGNvbm5faW5mby1cdTAwM2VkYXRhX2V4Y2hhbmdlX2NiX2NvbnRleHQgPSBjYl9jb250ZXh0O1xuK1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bmRldi1cdTAwM2Vjb25uX2luZm9fbG9jayk7XG4gXG4gXHRyYyA9IG5jaV9zZW5kX2RhdGEobmRldiwgTkNJX1NUQVRJQ19SRl9DT05OX0lELCBza2IpO1xuIFx0aWYgKHJjKVxuQEAgLTEyODgsNiArMTMyMSw3IEBAIGludCBuY2lfcmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCBuY2lfZGV2ICpuZGV2KVxuIFx0dGltZXJfc2V0dXAoXHUwMDI2bmRldi1cdTAwM2VkYXRhX3RpbWVyLCBuY2lfZGF0YV90aW1lciwgMCk7XG4gXG4gXHRtdXRleF9pbml0KFx1MDAyNm5kZXYtXHUwMDNlcmVxX2xvY2spO1xuK1x0c3Bpbl9sb2NrX2luaXQoXHUwMDI2bmRldi1cdTAwM2Vjb25uX2luZm9fbG9jayk7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19saXN0KTtcbiBcbiBcdHJjID0gbmZjX3JlZ2lzdGVyX2RldmljZShuZGV2LVx1MDAzZW5mY19kZXYpO1xuQEAgLTEzMzMsMTEgKzEzNjcsMTYgQEAgdm9pZCBuY2lfdW5yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IG5jaV9kZXYgKm5kZXYpXG4gXHRkZXN0cm95X3dvcmtxdWV1ZShuZGV2LVx1MDAzZXJ4X3dxKTtcbiBcdGRlc3Ryb3lfd29ya3F1ZXVlKG5kZXYtXHUwMDNldHhfd3EpO1xuIFxuK1x0c3Bpbl9sb2NrX2JoKFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGNvbm5faW5mbywgbiwgXHUwMDI2bmRldi1cdTAwM2Vjb25uX2luZm9fbGlzdCwgbGlzdCkge1xuIFx0XHRsaXN0X2RlbChcdTAwMjZjb25uX2luZm8tXHUwMDNlbGlzdCk7XG4rXHRcdGlmIChjb25uX2luZm8gPT0gbmRldi1cdTAwM2VyZl9jb25uX2luZm8pXG4rXHRcdFx0bmRldi1cdTAwM2VyZl9jb25uX2luZm8gPSBOVUxMO1xuK1x0XHRpZiAoY29ubl9pbmZvID09IG5kZXYtXHUwMDNlaGNpX2Rldi1cdTAwM2Vjb25uX2luZm8pXG4rXHRcdFx0bmRldi1cdTAwM2VoY2lfZGV2LVx1MDAzZWNvbm5faW5mbyA9IE5VTEw7XG4gXHRcdC8qIGNvbm5faW5mbyBpcyBhbGxvY2F0ZWQgd2l0aCBkZXZtX2t6YWxsb2MgKi9cbiBcdH1cbi1cbitcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xuIFx0bmZjX3JlbW92ZV9kZXZpY2UobmRldi1cdTAwM2VuZmNfZGV2KTtcbiB9XG4gRVhQT1JUX1NZTUJPTChuY2lfdW5yZWdpc3Rlcl9kZXZpY2UpO1xuQEAgLTE1MjMsMjMgKzE1NjIsMzEgQEAgc3RhdGljIHZvaWQgbmNpX3R4X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFx0c3RydWN0IG5jaV9jb25uX2luZm8gKmNvbm5faW5mbztcbiBcdHN0cnVjdCBza19idWZmICpza2I7XG4gXG4tXHRjb25uX2luZm8gPSBuY2lfZ2V0X2Nvbm5faW5mb19ieV9jb25uX2lkKG5kZXYsIG5kZXYtXHUwMDNlY3VyX2Nvbm5faWQpO1xuLVx0aWYgKCFjb25uX2luZm8pXG4tXHRcdHJldHVybjtcbitcdC8qIFNlbmQgcXVldWVkIHR4IGRhdGEgKi9cbitcdGZvciAoOzspIHtcbitcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xuK1x0XHRjb25uX2luZm8gPSBuY2lfZ2V0X2Nvbm5faW5mb19ieV9jb25uX2lkX2xvY2tlZChuZGV2LFxuK1x0XHRcdFx0XHRcdFx0XHRuZGV2LVx1MDAzZWN1cl9jb25uX2lkKTtcbitcdFx0aWYgKCFjb25uX2luZm8pXG4rXHRcdFx0Z290byB1bmxvY2s7XG4gXG4tXHRwcl9kZWJ1ZyhcImNyZWRpdHNfY250ICVkXFxuXCIsIGF0b21pY19yZWFkKFx1MDAyNmNvbm5faW5mby1cdTAwM2VjcmVkaXRzX2NudCkpO1xuK1x0XHRwcl9kZWJ1ZyhcImNyZWRpdHNfY250ICVkXFxuXCIsXG4rXHRcdFx0IGF0b21pY19yZWFkKFx1MDAyNmNvbm5faW5mby1cdTAwM2VjcmVkaXRzX2NudCkpO1xuK1xuK1x0XHRpZiAoIWF0b21pY19yZWFkKFx1MDAyNmNvbm5faW5mby1cdTAwM2VjcmVkaXRzX2NudCkpXG4rXHRcdFx0Z290byB1bmxvY2s7XG4gXG4tXHQvKiBTZW5kIHF1ZXVlZCB0eCBkYXRhICovXG4tXHR3aGlsZSAoYXRvbWljX3JlYWQoXHUwMDI2Y29ubl9pbmZvLVx1MDAzZWNyZWRpdHNfY250KSkge1xuIFx0XHRza2IgPSBza2JfZGVxdWV1ZShcdTAwMjZuZGV2LVx1MDAzZXR4X3EpO1xuIFx0XHRpZiAoIXNrYilcbi1cdFx0XHRyZXR1cm47XG4tXHRcdGtjb3ZfcmVtb3RlX3N0YXJ0X2NvbW1vbihza2JfZ2V0X2tjb3ZfaGFuZGxlKHNrYikpO1xuK1x0XHRcdGdvdG8gdW5sb2NrO1xuIFxuIFx0XHQvKiBDaGVjayBpZiBkYXRhIGZsb3cgY29udHJvbCBpcyB1c2VkICovXG4gXHRcdGlmIChhdG9taWNfcmVhZChcdTAwMjZjb25uX2luZm8tXHUwMDNlY3JlZGl0c19jbnQpICE9XG4gXHRcdCAgICBOQ0lfREFUQV9GTE9XX0NPTlRST0xfTk9UX1VTRUQpXG4gXHRcdFx0YXRvbWljX2RlYyhcdTAwMjZjb25uX2luZm8tXHUwMDNlY3JlZGl0c19jbnQpO1xuK1x0XHRzcGluX3VubG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbitcbitcdFx0a2Nvdl9yZW1vdGVfc3RhcnRfY29tbW9uKHNrYl9nZXRfa2Nvdl9oYW5kbGUoc2tiKSk7XG4gXG4gXHRcdHByX2RlYnVnKFwiTkNJIFRYOiBNVD1kYXRhLCBQQkY9JWQsIGNvbm5faWQ9JWQsIHBsZW49JWRcXG5cIixcbiBcdFx0XHQgbmNpX3BiZihza2ItXHUwMDNlZGF0YSksXG5AQCAtMTU1Miw2ICsxNTk5LDkgQEAgc3RhdGljIHZvaWQgbmNpX3R4X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFx0XHRcdCAgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoTkNJX0RBVEFfVElNRU9VVCkpO1xuIFx0XHRrY292X3JlbW90ZV9zdG9wKCk7XG4gXHR9XG4rXG4rdW5sb2NrOlxuK1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bmRldi1cdTAwM2Vjb25uX2luZm9fbG9jayk7XG4gfVxuIFxuIC8qIC0tLS0tIE5DSSBSWCB3b3JrZXIgdGhyZWFkIChkYXRhIFx1MDAyNiBjb250cm9sKSAtLS0tLSAqL1xuZGlmZiAtLWdpdCBhL25ldC9uZmMvbmNpL2RhdGEuYyBiL25ldC9uZmMvbmNpL2RhdGEuY1xuaW5kZXggNWY5OGM3M2RiNWFmZGUuLjMzNGMwZTVhOTRkYmM0IDEwMDY0NFxuLS0tIGEvbmV0L25mYy9uY2kvZGF0YS5jXG4rKysgYi9uZXQvbmZjL25jaS9kYXRhLmNcbkBAIC0zMCw4ICszMCwxMCBAQCB2b2lkIG5jaV9kYXRhX2V4Y2hhbmdlX2NvbXBsZXRlKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0ZGF0YV9leGNoYW5nZV9jYl90IGNiO1xuIFx0dm9pZCAqY2JfY29udGV4dDtcbiBcbi1cdGNvbm5faW5mbyA9IG5jaV9nZXRfY29ubl9pbmZvX2J5X2Nvbm5faWQobmRldiwgY29ubl9pZCk7XG4rXHRzcGluX2xvY2tfYmgoXHUwMDI2bmRldi1cdTAwM2Vjb25uX2luZm9fbG9jayk7XG4rXHRjb25uX2luZm8gPSBuY2lfZ2V0X2Nvbm5faW5mb19ieV9jb25uX2lkX2xvY2tlZChuZGV2LCBjb25uX2lkKTtcbiBcdGlmICghY29ubl9pbmZvKSB7XG4rXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xuIFx0XHRrZnJlZV9za2Ioc2tiKTtcbiBcdFx0Y2xlYXJfYml0KE5DSV9EQVRBX0VYQ0hBTkdFLCBcdTAwMjZuZGV2LVx1MDAzZWZsYWdzKTtcbiBcdFx0cmV0dXJuO1xuQEAgLTM5LDYgKzQxLDcgQEAgdm9pZCBuY2lfZGF0YV9leGNoYW5nZV9jb21wbGV0ZShzdHJ1Y3QgbmNpX2RldiAqbmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcbiBcdGNiID0gY29ubl9pbmZvLVx1MDAzZWRhdGFfZXhjaGFuZ2VfY2I7XG4gXHRjYl9jb250ZXh0ID0gY29ubl9pbmZvLVx1MDAzZWRhdGFfZXhjaGFuZ2VfY2JfY29udGV4dDtcbitcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xuIFxuIFx0cHJfZGVidWcoXCJsZW4gJWQsIGVyciAlZFxcblwiLCBza2IgPyBza2ItXHUwMDNlbGVuIDogMCwgZXJyKTtcbiBcbkBAIC04NSwxOSArODgsMjYgQEAgc3RhdGljIGlubGluZSB2b2lkIG5jaV9wdXNoX2RhdGFfaGRyKHN0cnVjdCBuY2lfZGV2ICpuZGV2LFxuIGludCBuY2lfY29ubl9tYXhfZGF0YV9wa3RfcGF5bG9hZF9zaXplKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCBfX3U4IGNvbm5faWQpXG4ge1xuIFx0Y29uc3Qgc3RydWN0IG5jaV9jb25uX2luZm8gKmNvbm5faW5mbztcbitcdGludCBtYXhfcGt0X3BheWxvYWRfbGVuO1xuIFxuLVx0Y29ubl9pbmZvID0gbmNpX2dldF9jb25uX2luZm9fYnlfY29ubl9pZChuZGV2LCBjb25uX2lkKTtcbi1cdGlmICghY29ubl9pbmZvKVxuK1x0c3Bpbl9sb2NrX2JoKFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xuK1x0Y29ubl9pbmZvID0gbmNpX2dldF9jb25uX2luZm9fYnlfY29ubl9pZF9sb2NrZWQobmRldiwgY29ubl9pZCk7XG4rXHRpZiAoIWNvbm5faW5mbykge1xuK1x0XHRzcGluX3VubG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbiBcdFx0cmV0dXJuIC1FUFJPVE87XG4rXHR9XG4rXHRtYXhfcGt0X3BheWxvYWRfbGVuID0gY29ubl9pbmZvLVx1MDAzZW1heF9wa3RfcGF5bG9hZF9sZW47XG4rXHRzcGluX3VubG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbiBcbi1cdHJldHVybiBjb25uX2luZm8tXHUwMDNlbWF4X3BrdF9wYXlsb2FkX2xlbjtcbitcdHJldHVybiBtYXhfcGt0X3BheWxvYWRfbGVuO1xuIH1cbiBFWFBPUlRfU1lNQk9MKG5jaV9jb25uX21heF9kYXRhX3BrdF9wYXlsb2FkX3NpemUpO1xuIFxuIHN0YXRpYyBpbnQgbmNpX3F1ZXVlX3R4X2RhdGFfZnJhZ3Moc3RydWN0IG5jaV9kZXYgKm5kZXYsXG4gXHRcdFx0XHQgICBfX3U4IGNvbm5faWQsXG4tXHRcdFx0XHQgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKSB7XG4tXHRjb25zdCBzdHJ1Y3QgbmNpX2Nvbm5faW5mbyAqY29ubl9pbmZvO1xuK1x0XHRcdFx0ICAgc3RydWN0IHNrX2J1ZmYgKnNrYixcbitcdFx0XHRcdCAgIF9fdTggbWF4X3BrdF9wYXlsb2FkX2xlbilcbit7XG4gXHRpbnQgdG90YWxfbGVuID0gc2tiLVx1MDAzZWxlbjtcbiBcdGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEgPSBza2ItXHUwMDNlZGF0YTtcbiBcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG5AQCAtMTA4LDE3ICsxMTgsMTAgQEAgc3RhdGljIGludCBuY2lfcXVldWVfdHhfZGF0YV9mcmFncyhzdHJ1Y3QgbmNpX2RldiAqbmRldixcbiBcbiBcdHByX2RlYnVnKFwiY29ubl9pZCAweCV4LCB0b3RhbF9sZW4gJWRcXG5cIiwgY29ubl9pZCwgdG90YWxfbGVuKTtcbiBcbi1cdGNvbm5faW5mbyA9IG5jaV9nZXRfY29ubl9pbmZvX2J5X2Nvbm5faWQobmRldiwgY29ubl9pZCk7XG4tXHRpZiAoIWNvbm5faW5mbykge1xuLVx0XHRyYyA9IC1FUFJPVE87XG4tXHRcdGdvdG8gZXhpdDtcbi1cdH1cbi1cbiBcdF9fc2tiX3F1ZXVlX2hlYWRfaW5pdChcdTAwMjZmcmFnc19xKTtcbiBcbiBcdHdoaWxlICh0b3RhbF9sZW4pIHtcbi1cdFx0ZnJhZ19sZW4gPVxuLVx0XHRcdG1pbl90KGludCwgdG90YWxfbGVuLCBjb25uX2luZm8tXHUwMDNlbWF4X3BrdF9wYXlsb2FkX2xlbik7XG4rXHRcdGZyYWdfbGVuID0gbWluX3QoaW50LCB0b3RhbF9sZW4sIG1heF9wa3RfcGF5bG9hZF9sZW4pO1xuIFxuIFx0XHRza2JfZnJhZyA9IG5jaV9za2JfYWxsb2MobmRldixcbiBcdFx0XHRcdFx0IChOQ0lfREFUQV9IRFJfU0laRSArIGZyYWdfbGVuKSxcbkBAIC0xNzEsNDAgKzE3NCw0NyBAQCBzdGF0aWMgaW50IG5jaV9xdWV1ZV90eF9kYXRhX2ZyYWdzKHN0cnVjdCBuY2lfZGV2ICpuZGV2LFxuIGludCBuY2lfc2VuZF9kYXRhKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCBfX3U4IGNvbm5faWQsIHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuIFx0Y29uc3Qgc3RydWN0IG5jaV9jb25uX2luZm8gKmNvbm5faW5mbztcbitcdF9fdTggbWF4X3BrdF9wYXlsb2FkX2xlbjtcbiBcdGludCByYyA9IDA7XG4gXG4gXHRwcl9kZWJ1ZyhcImNvbm5faWQgMHgleCwgcGxlbiAlZFxcblwiLCBjb25uX2lkLCBza2ItXHUwMDNlbGVuKTtcbiBcbi1cdGNvbm5faW5mbyA9IG5jaV9nZXRfY29ubl9pbmZvX2J5X2Nvbm5faWQobmRldiwgY29ubl9pZCk7XG4rXHRzcGluX2xvY2tfYmgoXHUwMDI2bmRldi1cdTAwM2Vjb25uX2luZm9fbG9jayk7XG4rXHRjb25uX2luZm8gPSBuY2lfZ2V0X2Nvbm5faW5mb19ieV9jb25uX2lkX2xvY2tlZChuZGV2LCBjb25uX2lkKTtcbiBcdGlmICghY29ubl9pbmZvKSB7XG4gXHRcdHJjID0gLUVQUk9UTztcbi1cdFx0Z290byBmcmVlX2V4aXQ7XG4rXHRcdGdvdG8gdW5sb2NrO1xuIFx0fVxuK1x0bWF4X3BrdF9wYXlsb2FkX2xlbiA9IGNvbm5faW5mby1cdTAwM2VtYXhfcGt0X3BheWxvYWRfbGVuO1xuK1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bmRldi1cdTAwM2Vjb25uX2luZm9fbG9jayk7XG4gXG4gXHQvKiBjaGVjayBpZiB0aGUgcGFja2V0IG5lZWQgdG8gYmUgZnJhZ21lbnRlZCAqL1xuLVx0aWYgKHNrYi1cdTAwM2VsZW4gXHUwMDNjPSBjb25uX2luZm8tXHUwMDNlbWF4X3BrdF9wYXlsb2FkX2xlbikge1xuK1x0aWYgKHNrYi1cdTAwM2VsZW4gXHUwMDNjPSBtYXhfcGt0X3BheWxvYWRfbGVuKSB7XG4gXHRcdC8qIG5vIG5lZWQgdG8gZnJhZ21lbnQgcGFja2V0ICovXG4gXHRcdG5jaV9wdXNoX2RhdGFfaGRyKG5kZXYsIGNvbm5faWQsIHNrYiwgTkNJX1BCRl9MQVNUKTtcbiBcbiBcdFx0c2tiX3F1ZXVlX3RhaWwoXHUwMDI2bmRldi1cdTAwM2V0eF9xLCBza2IpO1xuIFx0fSBlbHNlIHtcbiBcdFx0LyogZnJhZ21lbnQgcGFja2V0IGFuZCBxdWV1ZSB0aGUgZnJhZ21lbnRzICovXG4tXHRcdHJjID0gbmNpX3F1ZXVlX3R4X2RhdGFfZnJhZ3MobmRldiwgY29ubl9pZCwgc2tiKTtcbitcdFx0cmMgPSBuY2lfcXVldWVfdHhfZGF0YV9mcmFncyhuZGV2LCBjb25uX2lkLCBza2IsXG4rXHRcdFx0XHRcdCAgICAgbWF4X3BrdF9wYXlsb2FkX2xlbik7XG4gXHRcdGlmIChyYykge1xuIFx0XHRcdHByX2VycihcImZhaWxlZCB0byBmcmFnbWVudCB0eCBkYXRhIHBhY2tldFxcblwiKTtcbi1cdFx0XHRnb3RvIGZyZWVfZXhpdDtcbitcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbitcdFx0XHRyZXR1cm4gcmM7XG4gXHRcdH1cbiBcdH1cbiBcbitcdHNwaW5fbG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbiBcdG5kZXYtXHUwMDNlY3VyX2Nvbm5faWQgPSBjb25uX2lkO1xuLVx0cXVldWVfd29yayhuZGV2LVx1MDAzZXR4X3dxLCBcdTAwMjZuZGV2LVx1MDAzZXR4X3dvcmspO1xuLVxuLVx0Z290byBleGl0O1xuLVxuLWZyZWVfZXhpdDpcbi1cdGtmcmVlX3NrYihza2IpO1xuK1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bmRldi1cdTAwM2Vjb25uX2luZm9fbG9jayk7XG4gXG4tZXhpdDpcbitcdHF1ZXVlX3dvcmsobmRldi1cdTAwM2V0eF93cSwgXHUwMDI2bmRldi1cdTAwM2V0eF93b3JrKTtcbitcdHJldHVybiByYztcbit1bmxvY2s6XG4rXHRzcGluX3VubG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbitcdGlmIChyYylcbitcdFx0a2ZyZWVfc2tiKHNrYik7XG4gXHRyZXR1cm4gcmM7XG4gfVxuIEVYUE9SVF9TWU1CT0wobmNpX3NlbmRfZGF0YSk7XG5AQCAtMjgyLDExICsyOTIsMTUgQEAgdm9pZCBuY2lfcnhfZGF0YV9wYWNrZXQoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRcdCBuY2lfY29ubl9pZChza2ItXHUwMDNlZGF0YSksXG4gXHRcdCBuY2lfcGxlbihza2ItXHUwMDNlZGF0YSkpO1xuIFxuLVx0Y29ubl9pbmZvID0gbmNpX2dldF9jb25uX2luZm9fYnlfY29ubl9pZChuZGV2LCBuY2lfY29ubl9pZChza2ItXHUwMDNlZGF0YSkpO1xuK1x0c3Bpbl9sb2NrX2JoKFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xuK1x0Y29ubl9pbmZvID0gbmNpX2dldF9jb25uX2luZm9fYnlfY29ubl9pZF9sb2NrZWQobmRldixcbitcdFx0XHRcdFx0XHRcdG5jaV9jb25uX2lkKHNrYi1cdTAwM2VkYXRhKSk7XG4gXHRpZiAoIWNvbm5faW5mbykge1xuK1x0XHRzcGluX3VubG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbiBcdFx0a2ZyZWVfc2tiKHNrYik7XG4gXHRcdHJldHVybjtcbiBcdH1cbitcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xuIFxuIFx0Lyogc3RyaXAgdGhlIG5jaSBkYXRhIGhlYWRlciAqL1xuIFx0c2tiX3B1bGwoc2tiLCBOQ0lfREFUQV9IRFJfU0laRSk7XG5kaWZmIC0tZ2l0IGEvbmV0L25mYy9uY2kvaGNpLmMgYi9uZXQvbmZjL25jaS9oY2kuY1xuaW5kZXggYzAzZThhMGJkM2JkNjQuLmUyZjdhYjE1OTczY2U5IDEwMDY0NFxuLS0tIGEvbmV0L25mYy9uY2kvaGNpLmNcbisrKyBiL25ldC9uZmMvbmNpL2hjaS5jXG5AQCAtMTQ3LDE0ICsxNDcsMjIgQEAgc3RhdGljIGludCBuY2lfaGNpX3NlbmRfZGF0YShzdHJ1Y3QgbmNpX2RldiAqbmRldiwgdTggcGlwZSxcbiBcdHN0cnVjdCBza19idWZmICpza2I7XG4gXHRpbnQgbGVuLCBpLCByO1xuIFx0dTggY2IgPSBwaXBlO1xuK1x0dTggY29ubl9pZDtcbitcdHU4IG1heF9wa3RfcGF5bG9hZF9sZW47XG4gXG4rXHRzcGluX2xvY2tfYmgoXHUwMDI2bmRldi1cdTAwM2Vjb25uX2luZm9fbG9jayk7XG4gXHRjb25uX2luZm8gPSBuZGV2LVx1MDAzZWhjaV9kZXYtXHUwMDNlY29ubl9pbmZvO1xuLVx0aWYgKCFjb25uX2luZm8pXG4rXHRpZiAoIWNvbm5faW5mbykge1xuK1x0XHRzcGluX3VubG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbiBcdFx0cmV0dXJuIC1FUFJPVE87XG4rXHR9XG4rXHRjb25uX2lkID0gY29ubl9pbmZvLVx1MDAzZWNvbm5faWQ7XG4rXHRtYXhfcGt0X3BheWxvYWRfbGVuID0gY29ubl9pbmZvLVx1MDAzZW1heF9wa3RfcGF5bG9hZF9sZW47XG4rXHRzcGluX3VubG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbiBcbiBcdGkgPSAwO1xuLVx0c2tiID0gbmNpX3NrYl9hbGxvYyhuZGV2LCBjb25uX2luZm8tXHUwMDNlbWF4X3BrdF9wYXlsb2FkX2xlbiArXG4tXHRcdFx0ICAgIE5DSV9EQVRBX0hEUl9TSVpFLCBHRlBfQVRPTUlDKTtcbitcdHNrYiA9IG5jaV9za2JfYWxsb2MobmRldiwgbWF4X3BrdF9wYXlsb2FkX2xlbiArIE5DSV9EQVRBX0hEUl9TSVpFLFxuK1x0XHRcdCAgICBHRlBfQVRPTUlDKTtcbiBcdGlmICghc2tiKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbkBAIC0xNjMsMTIgKzE3MSwxMSBAQCBzdGF0aWMgaW50IG5jaV9oY2lfc2VuZF9kYXRhKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCB1OCBwaXBlLFxuIFxuIFx0ZG8ge1xuIFx0XHQvKiBJZiBsYXN0IHBhY2tldCBhZGQgTkNJX0hGUF9OT19DSEFJTklORyAqL1xuLVx0XHRpZiAoaSArIGNvbm5faW5mby1cdTAwM2VtYXhfcGt0X3BheWxvYWRfbGVuIC1cbi1cdFx0ICAgIChza2ItXHUwMDNlbGVuICsgMSkgXHUwMDNlPSBkYXRhX2xlbikge1xuK1x0XHRpZiAoaSArIG1heF9wa3RfcGF5bG9hZF9sZW4gLSAoc2tiLVx1MDAzZWxlbiArIDEpIFx1MDAzZT0gZGF0YV9sZW4pIHtcbiBcdFx0XHRjYiB8PSBOQ0lfSEZQX05PX0NIQUlOSU5HO1xuIFx0XHRcdGxlbiA9IGRhdGFfbGVuIC0gaTtcbiBcdFx0fSBlbHNlIHtcbi1cdFx0XHRsZW4gPSBjb25uX2luZm8tXHUwMDNlbWF4X3BrdF9wYXlsb2FkX2xlbiAtIHNrYi1cdTAwM2VsZW4gLSAxO1xuK1x0XHRcdGxlbiA9IG1heF9wa3RfcGF5bG9hZF9sZW4gLSBza2ItXHUwMDNlbGVuIC0gMTtcbiBcdFx0fVxuIFxuIFx0XHQqKHU4ICopc2tiX3B1c2goc2tiLCAxKSA9IGNiO1xuQEAgLTE3NiwxNSArMTgzLDE0IEBAIHN0YXRpYyBpbnQgbmNpX2hjaV9zZW5kX2RhdGEoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHU4IHBpcGUsXG4gXHRcdGlmIChsZW4gXHUwMDNlIDApXG4gXHRcdFx0c2tiX3B1dF9kYXRhKHNrYiwgZGF0YSArIGksIGxlbik7XG4gXG4tXHRcdHIgPSBuY2lfc2VuZF9kYXRhKG5kZXYsIGNvbm5faW5mby1cdTAwM2Vjb25uX2lkLCBza2IpO1xuK1x0XHRyID0gbmNpX3NlbmRfZGF0YShuZGV2LCBjb25uX2lkLCBza2IpO1xuIFx0XHRpZiAociBcdTAwM2MgMClcbiBcdFx0XHRyZXR1cm4gcjtcbiBcbiBcdFx0aSArPSBsZW47XG4gXG4gXHRcdGlmIChpIFx1MDAzYyBkYXRhX2xlbikge1xuLVx0XHRcdHNrYiA9IG5jaV9za2JfYWxsb2MobmRldixcbi1cdFx0XHRcdFx0ICAgIGNvbm5faW5mby1cdTAwM2VtYXhfcGt0X3BheWxvYWRfbGVuICtcbitcdFx0XHRza2IgPSBuY2lfc2tiX2FsbG9jKG5kZXYsIG1heF9wa3RfcGF5bG9hZF9sZW4gK1xuIFx0XHRcdFx0XHQgICAgTkNJX0RBVEFfSERSX1NJWkUsIEdGUF9BVE9NSUMpO1xuIFx0XHRcdGlmICghc2tiKVxuIFx0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG5AQCAtMjI1LDE3ICsyMzEsMjIgQEAgaW50IG5jaV9oY2lfc2VuZF9jbWQoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHU4IGdhdGUsIHU4IGNtZCxcbiBcdGNvbnN0IHN0cnVjdCBuY2lfaGNwX21lc3NhZ2UgKm1lc3NhZ2U7XG4gXHRjb25zdCBzdHJ1Y3QgbmNpX2Nvbm5faW5mbyAqY29ubl9pbmZvO1xuIFx0c3RydWN0IG5jaV9kYXRhIGRhdGE7XG4rXHRzdHJ1Y3Qgc2tfYnVmZiAqcnhfc2tiO1xuIFx0aW50IHI7XG4gXHR1OCBwaXBlID0gbmRldi1cdTAwM2VoY2lfZGV2LVx1MDAzZWdhdGUycGlwZVtnYXRlXTtcbiBcbiBcdGlmIChwaXBlID09IE5DSV9IQ0lfSU5WQUxJRF9QSVBFKVxuIFx0XHRyZXR1cm4gLUVBRERSTk9UQVZBSUw7XG4gXG4rXHRzcGluX2xvY2tfYmgoXHUwMDI2bmRldi1cdTAwM2Vjb25uX2luZm9fbG9jayk7XG4gXHRjb25uX2luZm8gPSBuZGV2LVx1MDAzZWhjaV9kZXYtXHUwMDNlY29ubl9pbmZvO1xuLVx0aWYgKCFjb25uX2luZm8pXG4rXHRpZiAoIWNvbm5faW5mbykge1xuK1x0XHRzcGluX3VubG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbiBcdFx0cmV0dXJuIC1FUFJPVE87XG4rXHR9XG4gXG4gXHRkYXRhLmNvbm5faWQgPSBjb25uX2luZm8tXHUwMDNlY29ubl9pZDtcbitcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xuIFx0ZGF0YS5waXBlID0gcGlwZTtcbiBcdGRhdGEuY21kID0gTkNJX0hDUF9IRUFERVIoTkNJX0hDSV9IQ1BfQ09NTUFORCwgY21kKTtcbiBcdGRhdGEuZGF0YSA9IHBhcmFtO1xuQEAgLTI0NCwxMyArMjU1LDIyIEBAIGludCBuY2lfaGNpX3NlbmRfY21kKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCB1OCBnYXRlLCB1OCBjbWQsXG4gXHRyID0gbmNpX3JlcXVlc3QobmRldiwgbmNpX2hjaV9zZW5kX2RhdGFfcmVxLCBcdTAwMjZkYXRhLFxuIFx0XHRcdG1zZWNzX3RvX2ppZmZpZXMoTkNJX0RBVEFfVElNRU9VVCkpO1xuIFx0aWYgKHIgPT0gTkNJX1NUQVRVU19PSykge1xuLVx0XHRtZXNzYWdlID0gKHN0cnVjdCBuY2lfaGNwX21lc3NhZ2UgKiljb25uX2luZm8tXHUwMDNlcnhfc2tiLVx1MDAzZWRhdGE7XG4rXHRcdHNwaW5fbG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbitcdFx0Y29ubl9pbmZvID0gbmRldi1cdTAwM2VoY2lfZGV2LVx1MDAzZWNvbm5faW5mbztcbitcdFx0cnhfc2tiID0gY29ubl9pbmZvID8gY29ubl9pbmZvLVx1MDAzZXJ4X3NrYiA6IE5VTEw7XG4rXHRcdGlmICghcnhfc2tiKSB7XG4rXHRcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bmRldi1cdTAwM2Vjb25uX2luZm9fbG9jayk7XG4rXHRcdFx0cmV0dXJuIC1FUFJPVE87XG4rXHRcdH1cbitcbitcdFx0bWVzc2FnZSA9IChzdHJ1Y3QgbmNpX2hjcF9tZXNzYWdlICopcnhfc2tiLVx1MDAzZWRhdGE7XG4gXHRcdHIgPSBuY2lfaGNpX3Jlc3VsdF90b19lcnJubyhcbiBcdFx0XHROQ0lfSENQX01TR19HRVRfQ01EKG1lc3NhZ2UtXHUwMDNlaGVhZGVyKSk7XG4tXHRcdHNrYl9wdWxsKGNvbm5faW5mby1cdTAwM2VyeF9za2IsIE5DSV9IQ0lfSENQX01FU1NBR0VfSEVBREVSX0xFTik7XG4rXHRcdHNrYl9wdWxsKHJ4X3NrYiwgTkNJX0hDSV9IQ1BfTUVTU0FHRV9IRUFERVJfTEVOKTtcbitcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bmRldi1cdTAwM2Vjb25uX2luZm9fbG9jayk7XG4gXG4gXHRcdGlmICghciBcdTAwMjZcdTAwMjYgc2tiKVxuLVx0XHRcdCpza2IgPSBjb25uX2luZm8tXHUwMDNlcnhfc2tiO1xuK1x0XHRcdCpza2IgPSByeF9za2I7XG4gXHR9XG4gXG4gXHRyZXR1cm4gcjtcbkBAIC0zNjYsMTEgKzM4NiwxNSBAQCBzdGF0aWMgdm9pZCBuY2lfaGNpX3Jlc3BfcmVjZWl2ZWQoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHU4IHBpcGUsXG4ge1xuIFx0c3RydWN0IG5jaV9jb25uX2luZm8gKmNvbm5faW5mbztcbiBcbitcdHNwaW5fbG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbiBcdGNvbm5faW5mbyA9IG5kZXYtXHUwMDNlaGNpX2Rldi1cdTAwM2Vjb25uX2luZm87XG4tXHRpZiAoIWNvbm5faW5mbylcbitcdGlmICghY29ubl9pbmZvKSB7XG4rXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xuIFx0XHRnb3RvIGV4aXQ7XG4rXHR9XG4gXG4gXHRjb25uX2luZm8tXHUwMDNlcnhfc2tiID0gc2tiO1xuK1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bmRldi1cdTAwM2Vjb25uX2luZm9fbG9jayk7XG4gXG4gZXhpdDpcbiBcdG5jaV9yZXFfY29tcGxldGUobmRldiwgTkNJX1NUQVRVU19PSyk7XG5AQCAtNTEwLDExICs1MzQsMTUgQEAgaW50IG5jaV9oY2lfb3Blbl9waXBlKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCB1OCBwaXBlKVxuIFx0c3RydWN0IG5jaV9kYXRhIGRhdGE7XG4gXHRjb25zdCBzdHJ1Y3QgbmNpX2Nvbm5faW5mbyAqY29ubl9pbmZvO1xuIFxuK1x0c3Bpbl9sb2NrX2JoKFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xuIFx0Y29ubl9pbmZvID0gbmRldi1cdTAwM2VoY2lfZGV2LVx1MDAzZWNvbm5faW5mbztcbi1cdGlmICghY29ubl9pbmZvKVxuK1x0aWYgKCFjb25uX2luZm8pIHtcbitcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bmRldi1cdTAwM2Vjb25uX2luZm9fbG9jayk7XG4gXHRcdHJldHVybiAtRVBST1RPO1xuK1x0fVxuIFxuIFx0ZGF0YS5jb25uX2lkID0gY29ubl9pbmZvLVx1MDAzZWNvbm5faWQ7XG4rXHRzcGluX3VubG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbiBcdGRhdGEucGlwZSA9IHBpcGU7XG4gXHRkYXRhLmNtZCA9IE5DSV9IQ1BfSEVBREVSKE5DSV9IQ0lfSENQX0NPTU1BTkQsXG4gXHRcdFx0XHQgICAgICAgTkNJX0hDSV9BTllfT1BFTl9QSVBFKTtcbkBAIC01NjksNiArNTk3LDcgQEAgaW50IG5jaV9oY2lfc2V0X3BhcmFtKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCB1OCBnYXRlLCB1OCBpZHgsXG4gXHRjb25zdCBzdHJ1Y3QgbmNpX2hjcF9tZXNzYWdlICptZXNzYWdlO1xuIFx0Y29uc3Qgc3RydWN0IG5jaV9jb25uX2luZm8gKmNvbm5faW5mbztcbiBcdHN0cnVjdCBuY2lfZGF0YSBkYXRhO1xuK1x0c3RydWN0IHNrX2J1ZmYgKnJ4X3NrYjtcbiBcdGludCByO1xuIFx0dTggKnRtcDtcbiBcdHU4IHBpcGUgPSBuZGV2LVx1MDAzZWhjaV9kZXYtXHUwMDNlZ2F0ZTJwaXBlW2dhdGVdO1xuQEAgLTU3OCw5ICs2MDcsMTQgQEAgaW50IG5jaV9oY2lfc2V0X3BhcmFtKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCB1OCBnYXRlLCB1OCBpZHgsXG4gXHRpZiAocGlwZSA9PSBOQ0lfSENJX0lOVkFMSURfUElQRSlcbiBcdFx0cmV0dXJuIC1FQUREUk5PVEFWQUlMO1xuIFxuK1x0c3Bpbl9sb2NrX2JoKFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xuIFx0Y29ubl9pbmZvID0gbmRldi1cdTAwM2VoY2lfZGV2LVx1MDAzZWNvbm5faW5mbztcbi1cdGlmICghY29ubl9pbmZvKVxuK1x0aWYgKCFjb25uX2luZm8pIHtcbitcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bmRldi1cdTAwM2Vjb25uX2luZm9fbG9jayk7XG4gXHRcdHJldHVybiAtRVBST1RPO1xuK1x0fVxuK1x0ZGF0YS5jb25uX2lkID0gY29ubl9pbmZvLVx1MDAzZWNvbm5faWQ7XG4rXHRzcGluX3VubG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbiBcbiBcdHRtcCA9IGttYWxsb2MoMSArIHBhcmFtX2xlbiwgR0ZQX0tFUk5FTCk7XG4gXHRpZiAoIXRtcClcbkBAIC01ODksNyArNjIzLDYgQEAgaW50IG5jaV9oY2lfc2V0X3BhcmFtKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCB1OCBnYXRlLCB1OCBpZHgsXG4gXHQqdG1wID0gaWR4O1xuIFx0bWVtY3B5KHRtcCArIDEsIHBhcmFtLCBwYXJhbV9sZW4pO1xuIFxuLVx0ZGF0YS5jb25uX2lkID0gY29ubl9pbmZvLVx1MDAzZWNvbm5faWQ7XG4gXHRkYXRhLnBpcGUgPSBwaXBlO1xuIFx0ZGF0YS5jbWQgPSBOQ0lfSENQX0hFQURFUihOQ0lfSENJX0hDUF9DT01NQU5ELFxuIFx0XHRcdFx0ICAgICAgIE5DSV9IQ0lfQU5ZX1NFVF9QQVJBTUVURVIpO1xuQEAgLTU5OSwxMCArNjMyLDIwIEBAIGludCBuY2lfaGNpX3NldF9wYXJhbShzdHJ1Y3QgbmNpX2RldiAqbmRldiwgdTggZ2F0ZSwgdTggaWR4LFxuIFx0ciA9IG5jaV9yZXF1ZXN0KG5kZXYsIG5jaV9oY2lfc2VuZF9kYXRhX3JlcSwgXHUwMDI2ZGF0YSxcbiBcdFx0XHRtc2Vjc190b19qaWZmaWVzKE5DSV9EQVRBX1RJTUVPVVQpKTtcbiBcdGlmIChyID09IE5DSV9TVEFUVVNfT0spIHtcbi1cdFx0bWVzc2FnZSA9IChzdHJ1Y3QgbmNpX2hjcF9tZXNzYWdlICopY29ubl9pbmZvLVx1MDAzZXJ4X3NrYi1cdTAwM2VkYXRhO1xuK1x0XHRzcGluX2xvY2tfYmgoXHUwMDI2bmRldi1cdTAwM2Vjb25uX2luZm9fbG9jayk7XG4rXHRcdGNvbm5faW5mbyA9IG5kZXYtXHUwMDNlaGNpX2Rldi1cdTAwM2Vjb25uX2luZm87XG4rXHRcdHJ4X3NrYiA9IGNvbm5faW5mbyA/IGNvbm5faW5mby1cdTAwM2VyeF9za2IgOiBOVUxMO1xuK1x0XHRpZiAoIXJ4X3NrYikge1xuK1x0XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xuK1x0XHRcdGtmcmVlKHRtcCk7XG4rXHRcdFx0cmV0dXJuIC1FUFJPVE87XG4rXHRcdH1cbitcbitcdFx0bWVzc2FnZSA9IChzdHJ1Y3QgbmNpX2hjcF9tZXNzYWdlICopcnhfc2tiLVx1MDAzZWRhdGE7XG4gXHRcdHIgPSBuY2lfaGNpX3Jlc3VsdF90b19lcnJubyhcbiBcdFx0XHROQ0lfSENQX01TR19HRVRfQ01EKG1lc3NhZ2UtXHUwMDNlaGVhZGVyKSk7XG4tXHRcdHNrYl9wdWxsKGNvbm5faW5mby1cdTAwM2VyeF9za2IsIE5DSV9IQ0lfSENQX01FU1NBR0VfSEVBREVSX0xFTik7XG4rXHRcdHNrYl9wdWxsKHJ4X3NrYiwgTkNJX0hDSV9IQ1BfTUVTU0FHRV9IRUFERVJfTEVOKTtcbitcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bmRldi1cdTAwM2Vjb25uX2luZm9fbG9jayk7XG4gXHR9XG4gXG4gXHRrZnJlZSh0bXApO1xuQEAgLTYxNiw2ICs2NTksNyBAQCBpbnQgbmNpX2hjaV9nZXRfcGFyYW0oc3RydWN0IG5jaV9kZXYgKm5kZXYsIHU4IGdhdGUsIHU4IGlkeCxcbiBcdGNvbnN0IHN0cnVjdCBuY2lfaGNwX21lc3NhZ2UgKm1lc3NhZ2U7XG4gXHRjb25zdCBzdHJ1Y3QgbmNpX2Nvbm5faW5mbyAqY29ubl9pbmZvO1xuIFx0c3RydWN0IG5jaV9kYXRhIGRhdGE7XG4rXHRzdHJ1Y3Qgc2tfYnVmZiAqcnhfc2tiO1xuIFx0aW50IHI7XG4gXHR1OCBwaXBlID0gbmRldi1cdTAwM2VoY2lfZGV2LVx1MDAzZWdhdGUycGlwZVtnYXRlXTtcbiBcbkBAIC02MjQsMTEgKzY2OCwxNSBAQCBpbnQgbmNpX2hjaV9nZXRfcGFyYW0oc3RydWN0IG5jaV9kZXYgKm5kZXYsIHU4IGdhdGUsIHU4IGlkeCxcbiBcdGlmIChwaXBlID09IE5DSV9IQ0lfSU5WQUxJRF9QSVBFKVxuIFx0XHRyZXR1cm4gLUVBRERSTk9UQVZBSUw7XG4gXG4rXHRzcGluX2xvY2tfYmgoXHUwMDI2bmRldi1cdTAwM2Vjb25uX2luZm9fbG9jayk7XG4gXHRjb25uX2luZm8gPSBuZGV2LVx1MDAzZWhjaV9kZXYtXHUwMDNlY29ubl9pbmZvO1xuLVx0aWYgKCFjb25uX2luZm8pXG4rXHRpZiAoIWNvbm5faW5mbykge1xuK1x0XHRzcGluX3VubG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbiBcdFx0cmV0dXJuIC1FUFJPVE87XG4rXHR9XG4gXG4gXHRkYXRhLmNvbm5faWQgPSBjb25uX2luZm8tXHUwMDNlY29ubl9pZDtcbitcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xuIFx0ZGF0YS5waXBlID0gcGlwZTtcbiBcdGRhdGEuY21kID0gTkNJX0hDUF9IRUFERVIoTkNJX0hDSV9IQ1BfQ09NTUFORCxcbiBcdFx0XHRcdCAgTkNJX0hDSV9BTllfR0VUX1BBUkFNRVRFUik7XG5AQCAtNjM5LDEzICs2ODcsMjIgQEAgaW50IG5jaV9oY2lfZ2V0X3BhcmFtKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCB1OCBnYXRlLCB1OCBpZHgsXG4gXHRcdFx0bXNlY3NfdG9famlmZmllcyhOQ0lfREFUQV9USU1FT1VUKSk7XG4gXG4gXHRpZiAociA9PSBOQ0lfU1RBVFVTX09LKSB7XG4tXHRcdG1lc3NhZ2UgPSAoc3RydWN0IG5jaV9oY3BfbWVzc2FnZSAqKWNvbm5faW5mby1cdTAwM2VyeF9za2ItXHUwMDNlZGF0YTtcbitcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xuK1x0XHRjb25uX2luZm8gPSBuZGV2LVx1MDAzZWhjaV9kZXYtXHUwMDNlY29ubl9pbmZvO1xuK1x0XHRyeF9za2IgPSBjb25uX2luZm8gPyBjb25uX2luZm8tXHUwMDNlcnhfc2tiIDogTlVMTDtcbitcdFx0aWYgKCFyeF9za2IpIHtcbitcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbitcdFx0XHRyZXR1cm4gLUVQUk9UTztcbitcdFx0fVxuK1xuK1x0XHRtZXNzYWdlID0gKHN0cnVjdCBuY2lfaGNwX21lc3NhZ2UgKilyeF9za2ItXHUwMDNlZGF0YTtcbiBcdFx0ciA9IG5jaV9oY2lfcmVzdWx0X3RvX2Vycm5vKFxuIFx0XHRcdE5DSV9IQ1BfTVNHX0dFVF9DTUQobWVzc2FnZS1cdTAwM2VoZWFkZXIpKTtcbi1cdFx0c2tiX3B1bGwoY29ubl9pbmZvLVx1MDAzZXJ4X3NrYiwgTkNJX0hDSV9IQ1BfTUVTU0FHRV9IRUFERVJfTEVOKTtcbitcdFx0c2tiX3B1bGwocnhfc2tiLCBOQ0lfSENJX0hDUF9NRVNTQUdFX0hFQURFUl9MRU4pO1xuK1x0XHRzcGluX3VubG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbiBcbiBcdFx0aWYgKCFyIFx1MDAyNlx1MDAyNiBza2IpXG4tXHRcdFx0KnNrYiA9IGNvbm5faW5mby1cdTAwM2VyeF9za2I7XG4rXHRcdFx0KnNrYiA9IHJ4X3NrYjtcbiBcdH1cbiBcbiBcdHJldHVybiByO1xuQEAgLTcyOSwxMiArNzg2LDE2IEBAIGludCBuY2lfaGNpX2Rldl9zZXNzaW9uX2luaXQoc3RydWN0IG5jaV9kZXYgKm5kZXYpXG4gXHRuZGV2LVx1MDAzZWhjaV9kZXYtXHUwMDNlY291bnRfcGlwZXMgPSAwO1xuIFx0bmRldi1cdTAwM2VoY2lfZGV2LVx1MDAzZWV4cGVjdGVkX3BpcGVzID0gMDtcbiBcbitcdHNwaW5fbG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbiBcdGNvbm5faW5mbyA9IG5kZXYtXHUwMDNlaGNpX2Rldi1cdTAwM2Vjb25uX2luZm87XG4tXHRpZiAoIWNvbm5faW5mbylcbitcdGlmICghY29ubl9pbmZvKSB7XG4rXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xuIFx0XHRyZXR1cm4gLUVQUk9UTztcbitcdH1cbiBcbiBcdGNvbm5faW5mby1cdTAwM2VkYXRhX2V4Y2hhbmdlX2NiID0gbmNpX2hjaV9kYXRhX3JlY2VpdmVkX2NiO1xuIFx0Y29ubl9pbmZvLVx1MDAzZWRhdGFfZXhjaGFuZ2VfY2JfY29udGV4dCA9IG5kZXY7XG4rXHRzcGluX3VubG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbiBcbiBcdG5jaV9oY2lfcmVzZXRfcGlwZXMobmRldi1cdTAwM2VoY2lfZGV2KTtcbiBcbmRpZmYgLS1naXQgYS9uZXQvbmZjL25jaS9udGYuYyBiL25ldC9uZmMvbmNpL250Zi5jXG5pbmRleCBjOTY1MTJiYjg2NTMxNS4uNDgyOGExYzlkMzVmMGUgMTAwNjQ0XG4tLS0gYS9uZXQvbmZjL25jaS9udGYuY1xuKysrIGIvbmV0L25mYy9uY2kvbnRmLmNcbkBAIC04MSwxMyArODEsMTcgQEAgc3RhdGljIGludCBuY2lfY29yZV9jb25uX2NyZWRpdHNfbnRmX3BhY2tldChzdHJ1Y3QgbmNpX2RldiAqbmRldixcbiBcdFx0XHQgaSwgbnRmLVx1MDAzZWNvbm5fZW50cmllc1tpXS5jb25uX2lkLFxuIFx0XHRcdCBudGYtXHUwMDNlY29ubl9lbnRyaWVzW2ldLmNyZWRpdHMpO1xuIFxuLVx0XHRjb25uX2luZm8gPSBuY2lfZ2V0X2Nvbm5faW5mb19ieV9jb25uX2lkKG5kZXYsXG4tXHRcdFx0XHRcdFx0XHQgbnRmLVx1MDAzZWNvbm5fZW50cmllc1tpXS5jb25uX2lkKTtcbi1cdFx0aWYgKCFjb25uX2luZm8pXG4rXHRcdHNwaW5fbG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbitcdFx0Y29ubl9pbmZvID0gbmNpX2dldF9jb25uX2luZm9fYnlfY29ubl9pZF9sb2NrZWQobmRldixcbitcdFx0XHRcdFx0XHRcdFx0bnRmLVx1MDAzZWNvbm5fZW50cmllc1tpXS5jb25uX2lkKTtcbitcdFx0aWYgKCFjb25uX2luZm8pIHtcbitcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbiBcdFx0XHRyZXR1cm4gMDtcbitcdFx0fVxuIFxuIFx0XHRhdG9taWNfYWRkKG50Zi1cdTAwM2Vjb25uX2VudHJpZXNbaV0uY3JlZGl0cyxcbiBcdFx0XHQgICBcdTAwMjZjb25uX2luZm8tXHUwMDNlY3JlZGl0c19jbnQpO1xuK1x0XHRzcGluX3VubG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbiBcdH1cbiBcbiBcdC8qIHRyaWdnZXIgdGhlIG5leHQgdHggKi9cbkBAIC04MjgsOSArODMyLDEyIEBAIHN0YXRpYyBpbnQgbmNpX3JmX2ludGZfYWN0aXZhdGVkX250Zl9wYWNrZXQoc3RydWN0IG5jaV9kZXYgKm5kZXYsXG4gXG4gZXhpdDpcbiBcdGlmIChlcnIgPT0gTkNJX1NUQVRVU19PSykge1xuK1x0XHRzcGluX2xvY2tfYmgoXHUwMDI2bmRldi1cdTAwM2Vjb25uX2luZm9fbG9jayk7XG4gXHRcdGNvbm5faW5mbyA9IG5kZXYtXHUwMDNlcmZfY29ubl9pbmZvO1xuLVx0XHRpZiAoIWNvbm5faW5mbylcbitcdFx0aWYgKCFjb25uX2luZm8pIHtcbitcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbiBcdFx0XHRyZXR1cm4gMDtcbitcdFx0fVxuIFxuIFx0XHRjb25uX2luZm8tXHUwMDNlbWF4X3BrdF9wYXlsb2FkX2xlbiA9IG50Zi5tYXhfZGF0YV9wa3RfcGF5bG9hZF9zaXplO1xuIFx0XHRjb25uX2luZm8tXHUwMDNlaW5pdGlhbF9udW1fY3JlZGl0cyA9IG50Zi5pbml0aWFsX251bV9jcmVkaXRzO1xuQEAgLTgzOCw2ICs4NDUsNyBAQCBzdGF0aWMgaW50IG5jaV9yZl9pbnRmX2FjdGl2YXRlZF9udGZfcGFja2V0KHN0cnVjdCBuY2lfZGV2ICpuZGV2LFxuIFx0XHQvKiBzZXQgdGhlIGF2YWlsYWJsZSBjcmVkaXRzIHRvIGluaXRpYWwgdmFsdWUgKi9cbiBcdFx0YXRvbWljX3NldChcdTAwMjZjb25uX2luZm8tXHUwMDNlY3JlZGl0c19jbnQsXG4gXHRcdFx0ICAgY29ubl9pbmZvLVx1MDAzZWluaXRpYWxfbnVtX2NyZWRpdHMpO1xuK1x0XHRzcGluX3VubG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbiBcbiBcdFx0Lyogc3RvcmUgZ2VuZXJhbCBieXRlcyB0byBiZSByZXBvcnRlZCBsYXRlciBpbiBkZXBfbGlua191cCAqL1xuIFx0XHRpZiAobnRmLnJmX2ludGVyZmFjZSA9PSBOQ0lfUkZfSU5URVJGQUNFX05GQ19ERVApIHtcbkBAIC05MDEsOSArOTA5LDEzIEBAIHN0YXRpYyBpbnQgbmNpX3JmX2RlYWN0aXZhdGVfbnRmX3BhY2tldChzdHJ1Y3QgbmNpX2RldiAqbmRldixcbiBcbiBcdHByX2RlYnVnKFwiZW50cnksIHR5cGUgMHgleCwgcmVhc29uIDB4JXhcXG5cIiwgbnRmLVx1MDAzZXR5cGUsIG50Zi1cdTAwM2VyZWFzb24pO1xuIFxuK1x0c3Bpbl9sb2NrX2JoKFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xuIFx0Y29ubl9pbmZvID0gbmRldi1cdTAwM2VyZl9jb25uX2luZm87XG4tXHRpZiAoIWNvbm5faW5mbylcbitcdGlmICghY29ubl9pbmZvKSB7XG4rXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xuIFx0XHRyZXR1cm4gMDtcbitcdH1cbitcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xuIFxuIFx0LyogZHJvcCB0eCBkYXRhIHF1ZXVlICovXG4gXHRza2JfcXVldWVfcHVyZ2UoXHUwMDI2bmRldi1cdTAwM2V0eF9xKTtcbmRpZmYgLS1naXQgYS9uZXQvbmZjL25jaS9yc3AuYyBiL25ldC9uZmMvbmNpL3JzcC5jXG5pbmRleCA5ZWViODYyODI1YzVmZS4uMGNmZjEyNTA5MjNlZDkgMTAwNjQ0XG4tLS0gYS9uZXQvbmZjL25jaS9yc3AuY1xuKysrIGIvbmV0L25mYy9uY2kvcnNwLmNcbkBAIC0xODYsNiArMTg2LDcgQEAgc3RhdGljIHZvaWQgbmNpX3JmX2Rpc2NfcnNwX3BhY2tldChzdHJ1Y3QgbmNpX2RldiAqbmRldixcbiBcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuIFx0c3RydWN0IG5jaV9jb25uX2luZm8gKmNvbm5faW5mbztcbitcdHN0cnVjdCBuY2lfY29ubl9pbmZvICpuZXdfY29ubl9pbmZvO1xuIFx0X191OCBzdGF0dXMgPSBza2ItXHUwMDNlZGF0YVswXTtcbiBcbiBcdHByX2RlYnVnKFwic3RhdHVzIDB4JXhcXG5cIiwgc3RhdHVzKTtcbkBAIC0xOTMsMTkgKzE5NCwzMyBAQCBzdGF0aWMgdm9pZCBuY2lfcmZfZGlzY19yc3BfcGFja2V0KHN0cnVjdCBuY2lfZGV2ICpuZGV2LFxuIFx0aWYgKHN0YXR1cyA9PSBOQ0lfU1RBVFVTX09LKSB7XG4gXHRcdGF0b21pY19zZXQoXHUwMDI2bmRldi1cdTAwM2VzdGF0ZSwgTkNJX0RJU0NPVkVSWSk7XG4gXG4rXHRcdHNwaW5fbG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbiBcdFx0Y29ubl9pbmZvID0gbmRldi1cdTAwM2VyZl9jb25uX2luZm87XG4rXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xuK1xuIFx0XHRpZiAoIWNvbm5faW5mbykge1xuLVx0XHRcdGNvbm5faW5mbyA9IGRldm1fa3phbGxvYyhcdTAwMjZuZGV2LVx1MDAzZW5mY19kZXYtXHUwMDNlZGV2LFxuLVx0XHRcdFx0XHRcdCBzaXplb2Yoc3RydWN0IG5jaV9jb25uX2luZm8pLFxuLVx0XHRcdFx0XHRcdCBHRlBfS0VSTkVMKTtcbi1cdFx0XHRpZiAoIWNvbm5faW5mbykge1xuK1x0XHRcdG5ld19jb25uX2luZm8gPSBkZXZtX2t6YWxsb2MoXHUwMDI2bmRldi1cdTAwM2VuZmNfZGV2LVx1MDAzZWRldixcbitcdFx0XHRcdFx0XHQgICAgIHNpemVvZihzdHJ1Y3QgbmNpX2Nvbm5faW5mbyksXG4rXHRcdFx0XHRcdFx0ICAgICBHRlBfS0VSTkVMKTtcbitcdFx0XHRpZiAoIW5ld19jb25uX2luZm8pIHtcbiBcdFx0XHRcdHN0YXR1cyA9IE5DSV9TVEFUVVNfUkVKRUNURUQ7XG4gXHRcdFx0XHRnb3RvIGV4aXQ7XG4gXHRcdFx0fVxuLVx0XHRcdGNvbm5faW5mby1cdTAwM2Vjb25uX2lkID0gTkNJX1NUQVRJQ19SRl9DT05OX0lEO1xuLVx0XHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNmNvbm5faW5mby1cdTAwM2VsaXN0KTtcbi1cdFx0XHRsaXN0X2FkZChcdTAwMjZjb25uX2luZm8tXHUwMDNlbGlzdCwgXHUwMDI2bmRldi1cdTAwM2Vjb25uX2luZm9fbGlzdCk7XG4tXHRcdFx0bmRldi1cdTAwM2VyZl9jb25uX2luZm8gPSBjb25uX2luZm87XG4rXG4rXHRcdFx0bmV3X2Nvbm5faW5mby1cdTAwM2Vjb25uX2lkID0gTkNJX1NUQVRJQ19SRl9DT05OX0lEO1xuK1x0XHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNm5ld19jb25uX2luZm8tXHUwMDNlbGlzdCk7XG4rXG4rXHRcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xuK1x0XHRcdGlmICghbmRldi1cdTAwM2VyZl9jb25uX2luZm8pIHtcbitcdFx0XHRcdGxpc3RfYWRkKFx1MDAyNm5ld19jb25uX2luZm8tXHUwMDNlbGlzdCxcbitcdFx0XHRcdFx0IFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xpc3QpO1xuK1x0XHRcdFx0bmRldi1cdTAwM2VyZl9jb25uX2luZm8gPSBuZXdfY29ubl9pbmZvO1xuK1x0XHRcdFx0bmV3X2Nvbm5faW5mbyA9IE5VTEw7XG4rXHRcdFx0fVxuK1x0XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xuK1xuK1x0XHRcdGlmIChuZXdfY29ubl9pbmZvKVxuK1x0XHRcdFx0ZGV2bV9rZnJlZShcdTAwMjZuZGV2LVx1MDAzZW5mY19kZXYtXHUwMDNlZGV2LCBuZXdfY29ubl9pbmZvKTtcbiBcdFx0fVxuIFx0fVxuIFxuQEAgLTI5OCwyMCArMzEzLDIwIEBAIHN0YXRpYyB2b2lkIG5jaV9jb3JlX2Nvbm5fY3JlYXRlX3JzcF9wYWNrZXQoc3RydWN0IG5jaV9kZXYgKm5kZXYsXG4gXHRcdGNvbm5faW5mby1cdTAwM2VkZXN0X3BhcmFtcy1cdTAwM2VpZCA9IG5kZXYtXHUwMDNlY3VyX3BhcmFtcy5pZDtcbiBcdFx0Y29ubl9pbmZvLVx1MDAzZWRlc3RfcGFyYW1zLVx1MDAzZXByb3RvY29sID0gbmRldi1cdTAwM2VjdXJfcGFyYW1zLnByb3RvY29sO1xuIFx0XHRjb25uX2luZm8tXHUwMDNlY29ubl9pZCA9IHJzcC1cdTAwM2Vjb25uX2lkO1xuK1x0XHRjb25uX2luZm8tXHUwMDNlbWF4X3BrdF9wYXlsb2FkX2xlbiA9IHJzcC1cdTAwM2VtYXhfY3RybF9wa3RfcGF5bG9hZF9sZW47XG4rXHRcdGF0b21pY19zZXQoXHUwMDI2Y29ubl9pbmZvLVx1MDAzZWNyZWRpdHNfY250LCByc3AtXHUwMDNlY3JlZGl0c19jbnQpO1xuIFxuIFx0XHQvKiBOb3RlOiBkYXRhX2V4Y2hhbmdlX2NiIGFuZCBkYXRhX2V4Y2hhbmdlX2NiX2NvbnRleHQgbmVlZCB0b1xuIFx0XHQgKiBiZSBzcGVjaWZ5IG91dCBvZiBuY2lfY29yZV9jb25uX2NyZWF0ZV9yc3BfcGFja2V0XG4gXHRcdCAqL1xuIFxuIFx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZjb25uX2luZm8tXHUwMDNlbGlzdCk7XG4rXHRcdHNwaW5fbG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbiBcdFx0bGlzdF9hZGQoXHUwMDI2Y29ubl9pbmZvLVx1MDAzZWxpc3QsIFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xpc3QpO1xuIFxuIFx0XHRpZiAobmRldi1cdTAwM2VjdXJfcGFyYW1zLmlkID09IG5kZXYtXHUwMDNlaGNpX2Rldi1cdTAwM2VuZmNlZV9pZClcbiBcdFx0XHRuZGV2LVx1MDAzZWhjaV9kZXYtXHUwMDNlY29ubl9pbmZvID0gY29ubl9pbmZvO1xuLVxuLVx0XHRjb25uX2luZm8tXHUwMDNlY29ubl9pZCA9IHJzcC1cdTAwM2Vjb25uX2lkO1xuLVx0XHRjb25uX2luZm8tXHUwMDNlbWF4X3BrdF9wYXlsb2FkX2xlbiA9IHJzcC1cdTAwM2VtYXhfY3RybF9wa3RfcGF5bG9hZF9sZW47XG4tXHRcdGF0b21pY19zZXQoXHUwMDI2Y29ubl9pbmZvLVx1MDAzZWNyZWRpdHNfY250LCByc3AtXHUwMDNlY3JlZGl0c19jbnQpO1xuK1x0XHRzcGluX3VubG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbiBcdH1cbiBcbiBmcmVlX2Nvbm5faW5mbzpcbkBAIC0zMzAsMTQgKzM0NSwxOSBAQCBzdGF0aWMgdm9pZCBuY2lfY29yZV9jb25uX2Nsb3NlX3JzcF9wYWNrZXQoc3RydWN0IG5jaV9kZXYgKm5kZXYsXG4gXG4gXHRwcl9kZWJ1ZyhcInN0YXR1cyAweCV4XFxuXCIsIHN0YXR1cyk7XG4gXHRpZiAoc3RhdHVzID09IE5DSV9TVEFUVVNfT0spIHtcbi1cdFx0Y29ubl9pbmZvID0gbmNpX2dldF9jb25uX2luZm9fYnlfY29ubl9pZChuZGV2LFxuLVx0XHRcdFx0XHRcdFx0IG5kZXYtXHUwMDNlY3VyX2Nvbm5faWQpO1xuK1x0XHRzcGluX2xvY2tfYmgoXHUwMDI2bmRldi1cdTAwM2Vjb25uX2luZm9fbG9jayk7XG4rXHRcdGNvbm5faW5mbyA9IG5jaV9nZXRfY29ubl9pbmZvX2J5X2Nvbm5faWRfbG9ja2VkKG5kZXYsXG4rXHRcdFx0XHRcdFx0XHRcdG5kZXYtXHUwMDNlY3VyX2Nvbm5faWQpO1xuIFx0XHRpZiAoY29ubl9pbmZvKSB7XG4gXHRcdFx0bGlzdF9kZWwoXHUwMDI2Y29ubl9pbmZvLVx1MDAzZWxpc3QpO1xuIFx0XHRcdGlmIChjb25uX2luZm8gPT0gbmRldi1cdTAwM2VyZl9jb25uX2luZm8pXG4gXHRcdFx0XHRuZGV2LVx1MDAzZXJmX2Nvbm5faW5mbyA9IE5VTEw7XG4tXHRcdFx0ZGV2bV9rZnJlZShcdTAwMjZuZGV2LVx1MDAzZW5mY19kZXYtXHUwMDNlZGV2LCBjb25uX2luZm8pO1xuK1x0XHRcdGlmIChjb25uX2luZm8gPT0gbmRldi1cdTAwM2VoY2lfZGV2LVx1MDAzZWNvbm5faW5mbylcbitcdFx0XHRcdG5kZXYtXHUwMDNlaGNpX2Rldi1cdTAwM2Vjb25uX2luZm8gPSBOVUxMO1xuIFx0XHR9XG4rXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xuK1x0XHRpZiAoY29ubl9pbmZvKVxuK1x0XHRcdGRldm1fa2ZyZWUoXHUwMDI2bmRldi1cdTAwM2VuZmNfZGV2LVx1MDAzZWRldiwgY29ubl9pbmZvKTtcbiBcdH1cbiBcdG5jaV9yZXFfY29tcGxldGUobmRldiwgc3RhdHVzKTtcbiB9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQwOToyNTozMi42ODQzNzkxMzFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNzIxMjg0NTU5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5GQyBOQ0kgU3BpbmxvY2sgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsIFwiQWgsIGEgc3BpbmxvY2sgKGBjb25uX2luZm9fbG9ja2ApIHRvIHByb3RlY3QgdGhlIGBjb25uX2luZm9fbGlzdGAgYW5kIHBvaW50ZXIgYWxpYXNlcyB3aXRoaW4gdGhlIE5DSSBzdWJzeXN0ZW0g4oCTIGdvb2QsIGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgY29uY3VycmVuY3kgaXNzdWUuXCIgSXQncyB0b3VjaGluZyBhIGRlY2VudCBzcHJlYWQgb2YgZmlsZXMgd2l0aGluIHRoZSBgZHJpdmVycy9uZmMvc3QtbmNpL2AsIGBpbmNsdWRlL25ldC9uZmMvbmNpX2NvcmUuaGAsIGFuZCBgbmV0L25mYy9uY2kvYCBkaXJlY3RvcmllczogYHNlLmNgLCBgY29yZS5jYCwgYGRhdGEuY2AsIGBoY2kuY2AsIGBudGYuY2AsIGFuZCBgcnNwLmNgLiBUaGlzIHN1Z2dlc3RzIGEgcHJldHR5IGNlbnRyYWwgZml4LCBpbXBhY3RpbmcgY29yZSBkYXRhIHN0cnVjdHVyZXMuXG5cblRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYSBjb25jdXJyZW5jeSBmaXguIE15IGd1ZXNzIGlzIGl0J3MgaGFuZGxpbmcgYSByYWNlIGNvbmRpdGlvbiBvciBtYXliZSBhIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvLiBTdGFuZGFyZCBzdHVmZi5cblxuTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uIGlzOiBpcyB0aGlzIHJlYWNoYWJsZSBhbmQgdGVzdGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gV2UgbmVlZCB0byB2ZXJpZnkgdGhlIGZpeCB0aG9yb3VnaGx5LiBIb3cgZG8gd2UgdGVzdCBORkMgaW4gYSB2aXJ0dWFsIHNldHRpbmc/IFdlIGhhdmUgYG5mY3NpbWAgYW5kIGB2aGNpYCwgc28gbGV0J3Mgc2VlIGlmIHdlIGNhbiB1c2UgdGhvc2UgdG8gcnVuIHRoZSB0ZXN0cz8gVGltZSB0byBjaGVjayBmb3IgdGhlIHJlbGV2YW50IGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEkgbmVlZCB0byBjb25maXJtIGBDT05GSUdfTkZDX05DSWAgYW5kIHNvbWV0aGluZyB2aXJ0dWFsIOKAkyBwZXJoYXBzIGBDT05GSUdfTkZDX1ZJUlRVQUxgIG9yIGEgc2ltaWxhciBjb25maWd1cmF0aW9uIG9wdGlvbiDigJMgaXMgZW5hYmxlZCB0byBjb25maXJtIHRoYXQgYSB2aXJ0dWFsIGVudmlyb25tZW50IGlzIGF2YWlsYWJsZSwgbGV0J3Mgc2VhcmNoIGZvciBORkMgZHJpdmVycy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ2MjgsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQwOToyNTo0OS44OTcyMjgxNDhaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDE3MzI0MzA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIk5GQ19OQ0lcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25mYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25mYy9NYWtlZmlsZT02PW9iai0kKENPTkZJR19ORkMpICs9IG5mYy5vXFxubmV0L25mYy9NYWtlZmlsZTo3Om9iai0kKENPTkZJR19ORkNfTkNJKSArPSBuY2kvXFxubmV0L25mYy9NYWtlZmlsZS04LW9iai0kKENPTkZJR19ORkNfSENJKSArPSBoY2kvXFxuLS1cXG5uZXQvbmZjL25jaS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxubmV0L25mYy9uY2kvS2NvbmZpZzoyOmNvbmZpZyBORkNfTkNJXFxubmV0L25mYy9uY2kvS2NvbmZpZy0zLVxcdGRlcGVuZHMgb24gTkZDXFxuLS1cXG5uZXQvbmZjL25jaS9LY29uZmlnLTEyLVxcbm5ldC9uZmMvbmNpL0tjb25maWc6MTM6Y29uZmlnIE5GQ19OQ0lfU1BJXFxubmV0L25mYy9uY2kvS2NvbmZpZzoxNDpcXHRkZXBlbmRzIG9uIE5GQ19OQ0kgXFx1MDAyNlxcdTAwMjYgU1BJXFxubmV0L25mYy9uY2kvS2NvbmZpZy0xNS1cXHRzZWxlY3QgQ1JDX0NDSVRUXFxuLS1cXG5uZXQvbmZjL25jaS9LY29uZmlnLTIzLVxcbm5ldC9uZmMvbmNpL0tjb25maWc6MjQ6Y29uZmlnIE5GQ19OQ0lfVUFSVFxcbm5ldC9uZmMvbmNpL0tjb25maWc6MjU6XFx0ZGVwZW5kcyBvbiBORkNfTkNJIFxcdTAwMjZcXHUwMDI2IFRUWVxcbm5ldC9uZmMvbmNpL0tjb25maWctMjYtXFx0dHJpc3RhdGUgXFxcIk5DSSBvdmVyIFVBUlQgcHJvdG9jb2wgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZmMvbmNpL01ha2VmaWxlLTUtXFxubmV0L25mYy9uY2kvTWFrZWZpbGU6NjpvYmotJChDT05GSUdfTkZDX05DSSkgKz0gbmNpLm9cXG5uZXQvbmZjL25jaS9NYWtlZmlsZS03LVxcbi0tXFxubmV0L25mYy9uY2kvTWFrZWZpbGU9MTA9bmNpX3NwaS15ICs9IHNwaS5vXFxubmV0L25mYy9uY2kvTWFrZWZpbGU6MTE6b2JqLSQoQ09ORklHX05GQ19OQ0lfU1BJKSArPSBuY2lfc3BpLm9cXG5uZXQvbmZjL25jaS9NYWtlZmlsZS0xMi1cXG5uZXQvbmZjL25jaS9NYWtlZmlsZT0xMz1uY2lfdWFydC15ICs9IHVhcnQub1xcbm5ldC9uZmMvbmNpL01ha2VmaWxlOjE0Om9iai0kKENPTkZJR19ORkNfTkNJX1VBUlQpICs9IG5jaV91YXJ0Lm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDk6MjU6NTAuMzE0NTYyMDU4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjA4NDQwMDkxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQXNzZXNzaW5nIE5DSSBEcml2ZXIgQXZhaWxhYmlsaXR5KipcblxuUmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJ20gaW1tZWRpYXRlbHkgYXNzZXNzaW5nIHRoZSBpbmZyYXN0cnVjdHVyZSByZXF1aXJlbWVudHMgaGVyZS4gXCJWaXJ0dWFsIGRyaXZlciBmb3IgTkNJXCIuLi4gdGhhdCdzIHRoZSBrZXkgcGhyYXNlLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcywgYXMgaXQgaXMgd2l0aCBhbnkgbmV3IHRhc2ssIGlzIHRvIGFzY2VydGFpbiBpZiBhIHByZS1leGlzdGluZyB2aXJ0dWFsIGRyaXZlciBzb2x1dGlvbiBleGlzdHMuIEFtIEkgZGVhbGluZyB3aXRoIGEga25vd24gcXVhbnRpdHksIG9yIGFtIEkgaW4gdGhlIHdlZWRzIGZyb20gdGhlIHN0YXJ0PyBXaGF0IGRyaXZlcnMgYXJlIGF2YWlsYWJsZSB0aGF0IHdpbGwgZ2V0IG1lIGNsb3NlciB0byB0aGUgb3V0Y29tZSBkZXNpcmVkLlxuXG5UaGlzIGltcGxpZXMgYW4gdW5kZXJzdGFuZGluZyBvZiB0aGUgY3VycmVudCBOQ0kgZW52aXJvbm1lbnQuIERvIHdlIGhhdmUgYSBzdGFuZGFyZCBvciBwcm9wcmlldGFyeSBwbGF0Zm9ybT8gSXMgaXQgd2VsbC1kb2N1bWVudGVkPyBBcmUgdGhlcmUgYW55IG9idmlvdXMgY2FuZGlkYXRlcyB3aXRoaW4gdGhlIGV4aXN0aW5nIGRyaXZlciBlY29zeXN0ZW0sIG9yIGFyZSB3ZSBnb2luZyB0byBuZWVkIHRvIGxvb2sgYXQgY3VzdG9tIGRldmVsb3BtZW50LCBvciBhIGhhcmR3YXJlIGFic3RyYWN0aW9uIGxheWVyPyBNeSBmb2N1cyBpcyBvbiBlZmZpY2llbmN5IGFuZCB0aW1lLCBzbyBJJ20gaG9waW5nIGZvciBhIHF1aWNrIHdpbjsgYSByZWFkaWx5IGF2YWlsYWJsZSwgdGVzdGVkIHNvbHV0aW9uIGlzIGFsd2F5cyBwcmVmZXJhYmxlLiBUaGUgdGhvdWdodCBwcm9jZXNzIGlzIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHRoZSBwYXRoIG9mIGxlYXN0IHJlc2lzdGFuY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NzcyLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDk6MjU6NTYuMzk4OTY3OTQ3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExODgxMjExOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJORkNfTkNJXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmZjL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25mYy9LY29uZmlnPTUyPWNvbmZpZyBORkNfVklSVFVBTF9OQ0lcXG5kcml2ZXJzL25mYy9LY29uZmlnLTUzLVxcdHRyaXN0YXRlIFxcXCJOQ0kgZGV2aWNlIHNpbXVsYXRvciBkcml2ZXJcXFwiXFxuZHJpdmVycy9uZmMvS2NvbmZpZzo1NDpcXHRkZXBlbmRzIG9uIE5GQ19OQ0lcXG5kcml2ZXJzL25mYy9LY29uZmlnLTU1LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmZjL2ZkcC9LY29uZmlnPTI9Y29uZmlnIE5GQ19GRFBcXG5kcml2ZXJzL25mYy9mZHAvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJJbnRlbCBGRFAgTkZDIGRyaXZlclxcXCJcXG5kcml2ZXJzL25mYy9mZHAvS2NvbmZpZzo0OlxcdGRlcGVuZHMgb24gTkZDX05DSVxcbmRyaXZlcnMvbmZjL2ZkcC9LY29uZmlnLTUtXFx0c2VsZWN0IENSQ19DQ0lUVFxcbi0tXFxuZHJpdmVycy9uZmMvbmZjbXJ2bC9LY29uZmlnPTEwPWNvbmZpZyBORkNfTVJWTF9VU0JcXG5kcml2ZXJzL25mYy9uZmNtcnZsL0tjb25maWctMTEtXFx0dHJpc3RhdGUgXFxcIk1hcnZlbGwgTkZDLW92ZXItVVNCIGRyaXZlclxcXCJcXG5kcml2ZXJzL25mYy9uZmNtcnZsL0tjb25maWc6MTI6XFx0ZGVwZW5kcyBvbiBORkNfTkNJIFxcdTAwMjZcXHUwMDI2IFVTQlxcbmRyaXZlcnMvbmZjL25mY21ydmwvS2NvbmZpZy0xMy1cXHRzZWxlY3QgTkZDX01SVkxcXG4tLVxcbmRyaXZlcnMvbmZjL25mY21ydmwvS2NvbmZpZz0yMz1jb25maWcgTkZDX01SVkxfVUFSVFxcbmRyaXZlcnMvbmZjL25mY21ydmwvS2NvbmZpZy0yNC1cXHR0cmlzdGF0ZSBcXFwiTWFydmVsbCBORkMtb3Zlci1VQVJUIGRyaXZlclxcXCJcXG5kcml2ZXJzL25mYy9uZmNtcnZsL0tjb25maWc6MjU6XFx0ZGVwZW5kcyBvbiBORkNfTkNJIFxcdTAwMjZcXHUwMDI2IE5GQ19OQ0lfVUFSVFxcbmRyaXZlcnMvbmZjL25mY21ydmwvS2NvbmZpZy0yNi1cXHRzZWxlY3QgTkZDX01SVkxcXG4tLVxcbmRyaXZlcnMvbmZjL25mY21ydmwvS2NvbmZpZz00Nj1jb25maWcgTkZDX01SVkxfU1BJXFxuZHJpdmVycy9uZmMvbmZjbXJ2bC9LY29uZmlnLTQ3LVxcdHRyaXN0YXRlIFxcXCJNYXJ2ZWxsIE5GQy1vdmVyLVNQSSBkcml2ZXJcXFwiXFxuZHJpdmVycy9uZmMvbmZjbXJ2bC9LY29uZmlnOjQ4OlxcdGRlcGVuZHMgb24gTkZDX01SVkwgXFx1MDAyNlxcdTAwMjYgTkZDX05DSV9TUElcXG5kcml2ZXJzL25mYy9uZmNtcnZsL0tjb25maWctNDktXFx0aGVscFxcbi0tXFxuZHJpdmVycy9uZmMvbnhwLW5jaS9LY29uZmlnPTI9Y29uZmlnIE5GQ19OWFBfTkNJXFxuZHJpdmVycy9uZmMvbnhwLW5jaS9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIk5YUC1OQ0kgTkZDIGRyaXZlclxcXCJcXG5kcml2ZXJzL25mYy9ueHAtbmNpL0tjb25maWc6NDpcXHRkZXBlbmRzIG9uIE5GQ19OQ0lcXG5kcml2ZXJzL25mYy9ueHAtbmNpL0tjb25maWctNS1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25mYy9zM2Z3cm41L0tjb25maWc9MTA9Y29uZmlnIE5GQ19TM0ZXUk41X0kyQ1xcbmRyaXZlcnMvbmZjL3MzZndybjUvS2NvbmZpZy0xMS1cXHR0cmlzdGF0ZSBcXFwiU2Ftc3VuZyBTM0ZXUk41IEkyQyBzdXBwb3J0XFxcIlxcbmRyaXZlcnMvbmZjL3MzZndybjUvS2NvbmZpZzoxMjpcXHRkZXBlbmRzIG9uIE5GQ19OQ0kgXFx1MDAyNlxcdTAwMjYgSTJDXFxuZHJpdmVycy9uZmMvczNmd3JuNS9LY29uZmlnLTEzLVxcdHNlbGVjdCBORkNfUzNGV1JONVxcbi0tXFxuZHJpdmVycy9uZmMvczNmd3JuNS9LY29uZmlnPTIzPWNvbmZpZyBORkNfUzNGV1JOODJfVUFSVFxcbmRyaXZlcnMvbmZjL3MzZndybjUvS2NvbmZpZy0yNC0gICAgICAgIHRyaXN0YXRlIFxcXCJTYW1zdW5nIFMzRldSTjgyIFVBUlQgc3VwcG9ydFxcXCJcXG5kcml2ZXJzL25mYy9zM2Z3cm41L0tjb25maWc6MjU6ICAgICAgICBkZXBlbmRzIG9uIE5GQ19OQ0kgXFx1MDAyNlxcdTAwMjYgU0VSSUFMX0RFVl9CVVNcXG5kcml2ZXJzL25mYy9zM2Z3cm41L0tjb25maWctMjYtICAgICAgICBzZWxlY3QgTkZDX1MzRldSTjVcXG4tLVxcbmRyaXZlcnMvbmZjL3N0LW5jaS9LY29uZmlnPTk9Y29uZmlnIE5GQ19TVF9OQ0lfSTJDXFxuZHJpdmVycy9uZmMvc3QtbmNpL0tjb25maWctMTAtXFx0dHJpc3RhdGUgXFxcIlNUTWljcm9lbGVjdHJvbmljcyBTVCBOQ0kgTkZDIGRyaXZlciAoSTJDKVxcXCJcXG5kcml2ZXJzL25mYy9zdC1uY2kvS2NvbmZpZzoxMTpcXHRkZXBlbmRzIG9uIE5GQ19OQ0kgXFx1MDAyNlxcdTAwMjYgSTJDXFxuZHJpdmVycy9uZmMvc3QtbmNpL0tjb25maWctMTItXFx0c2VsZWN0IE5GQ19TVF9OQ0lcXG4tLVxcbmRyaXZlcnMvbmZjL3N0LW5jaS9LY29uZmlnPTIxPWNvbmZpZyBORkNfU1RfTkNJX1NQSVxcbmRyaXZlcnMvbmZjL3N0LW5jaS9LY29uZmlnLTIyLVxcdHRyaXN0YXRlIFxcXCJTVE1pY3JvZWxlY3Ryb25pY3MgU1QgTkNJIE5GQyBkcml2ZXIgKFNQSSlcXFwiXFxuZHJpdmVycy9uZmMvc3QtbmNpL0tjb25maWc6MjM6XFx0ZGVwZW5kcyBvbiBORkNfTkNJIFxcdTAwMjZcXHUwMDI2IFNQSVxcbmRyaXZlcnMvbmZjL3N0LW5jaS9LY29uZmlnLTI0LVxcdHNlbGVjdCBORkNfU1RfTkNJXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDA5OjI1OjU2LjUxNzc4NjkzNloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk0NzAwNDM5MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKk5GQyBGdXp6aW5nIE9wcG9ydHVuaXR5ISoqXG5cbkFscmlnaHQsIHRoYXQncyBpdCEgYE5GQ19WSVJUVUFMX05DSWAgaXMgZGVmaW5lZC4gVGhpcyBpcyBzaWduaWZpY2FudC4gSXQncyB0aGUga2V5IHRvIHZpcnR1YWwgTkNJIGRldmljZXMuIEFuZCB0aGF0LCBpbiB0dXJuLCBpcyB0aGUgb3BlbmluZyB3ZSd2ZSBiZWVuIGxvb2tpbmcgZm9yIHRvIGJlZ2luIHNvbWUgc2VyaW91cyBmdXp6aW5nIG9mIE5DSSBzdGFja3MuIEl0IG9wZW5zIHVwIHRoZSBwb3NzaWJpbGl0eSBvZiBpbmplY3RpbmcgbWFsZm9ybWVkIGRhdGEgd2l0aG91dCBuZWVkaW5nIHBoeXNpY2FsIGhhcmR3YXJlLCB3aGljaCBpcyBhIHNpZ25pZmljYW50IHdpbiBmb3IgdGhpcyB0eXBlIG9mIHJlc2VhcmNoLlxuXG5Ob3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSB2aXJ0dWFsIGRldmljZSdzIGltcGxlbWVudGF0aW9uIGJldHRlci4gVGltZSB0byBkaXZlIGludG8gYGRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZW50cnkgcG9pbnRzLCBob3cgaXQgaW50ZXJmYWNlcyB3aXRoIHRoZSBOQ0kgY29yZSwgYW5kIG1vc3QgaW1wb3J0YW50bHksIGlkZW50aWZ5IHRoZSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGlucHV0IGlzIGV4cGVjdGVkLCBob3cgaXQncyBoYW5kbGVkLCBhbmQgd2hlcmUgcG90ZW50aWFsIGZ1enppbmcgdGFyZ2V0cyBjYW4gYmUgZm91bmQuIFRoaXMgY291bGQgYmUgaW50ZXJlc3RpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MTIyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDk6MjY6MDUuOTg3ODM0Nzg1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNzMwNTIzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJORkNfVklSVFVBTF9OQ0lcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZmMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmZjL0tjb25maWc9NDI9Y29uZmlnIE5GQ19QT1JUMTAwXFxuLS1cXG5kcml2ZXJzL25mYy9LY29uZmlnLTUxLVxcbmRyaXZlcnMvbmZjL0tjb25maWc6NTI6Y29uZmlnIE5GQ19WSVJUVUFMX05DSVxcbmRyaXZlcnMvbmZjL0tjb25maWctNTMtXFx0dHJpc3RhdGUgXFxcIk5DSSBkZXZpY2Ugc2ltdWxhdG9yIGRyaXZlclxcXCJcXG4tLVxcbmRyaXZlcnMvbmZjL01ha2VmaWxlPTE5PW9iai0kKENPTkZJR19ORkNfU1Q5NUhGKVxcdCs9IHN0OTVoZi9cXG5kcml2ZXJzL25mYy9NYWtlZmlsZToyMDpvYmotJChDT05GSUdfTkZDX1ZJUlRVQUxfTkNJKVxcdCs9IHZpcnR1YWxfbmNpZGV2Lm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDk6MjY6MDYuNDI1MTQ4MzczWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA0Mzk1NDc2NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOQ0kgVmlydHVhbCBOQ0kgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIGdyZWF0ISBTbywgYmFzZWQgb24gdGhpcywgZW5hYmxpbmcgYE5GQ19WSVJUVUFMX05DSWAgaXMgdGhlIGtleS4gTm93LCBsb29raW5nIGF0IHRoZSBwYXRjaCwgaXQgdG91Y2hlcyBgbmV0L25mYy9uY2kvY29yZS5jYCwgYG5ldC9uZmMvbmNpL2RhdGEuY2AsIGBuZXQvbmZjL25jaS9oY2kuY2AsIGBuZXQvbmZjL25jaS9udGYuY2AsIGFuZCBgbmV0L25mYy9uY2kvcnNwLmNgLiBUaGF0J3Mgd2hlcmUgdGhlIGZvY3VzIGlzLiBNeSBpbW1lZGlhdGUgdGFzayBpcyB0byBpZGVudGlmeSB0aGUgY3JpdGljYWwgc3ltYm9scyBmb3IgZnVydGhlciBhbmFseXNpcy5cblxuSXQgbG9va3MgbGlrZSB0aGUgcGF0Y2ggbW9kaWZpZXMgYSBjb21wcmVoZW5zaXZlIHNldCBvZiBmdW5jdGlvbnMsIGluY2x1ZGluZzogYG5jaV9nZXRfY29ubl9pbmZvX2J5X2Nvbm5faWRfbG9ja2VkYCwgYG5jaV9nZXRfY29ubl9pbmZvX2J5X2Rlc3RfdHlwZV9wYXJhbXNfbG9ja2VkYCwgYG5jaV9nZXRfY29ubl9pbmZvX2J5X2Rlc3RfdHlwZV9wYXJhbXNgLCBgbmNpX25mY2NfbG9vcGJhY2tgLCBgbmNpX3RyYW5zY2VpdmVgLCBgbmNpX3R4X3dvcmtgLCBgbmNpX2RhdGFfZXhjaGFuZ2VfY29tcGxldGVgLCBgbmNpX2Nvbm5fbWF4X2RhdGFfcGt0X3BheWxvYWRfc2l6ZWAsIGBuY2lfc2VuZF9kYXRhYCwgYG5jaV9yeF9kYXRhX3BhY2tldGAsIGBuY2lfaGNpX3NlbmRfZGF0YWAsIGBuY2lfaGNpX3NlbmRfY21kYCwgYG5jaV9oY2lfcmVzcF9yZWNlaXZlZGAsIGBuY2lfaGNpX29wZW5fcGlwZWAsIGBuY2lfaGNpX3NldF9wYXJhbWAsIGBuY2lfaGNpX2dldF9wYXJhbWAsIGBuY2lfaGNpX2Rldl9zZXNzaW9uX2luaXRgLCBgbmNpX2NvcmVfY29ubl9jcmVkaXRzX250Zl9wYWNrZXRgLCBgbmNpX3JmX2ludGZfYWN0aXZhdGVkX250Zl9wYWNrZXRgLCBgbmNpX3JmX2RlYWN0aXZhdGVfbnRmX3BhY2tldGAsIGBuY2lfcmZfZGlzY19yc3BfcGFja2V0YCwgYG5jaV9jb3JlX2Nvbm5fY3JlYXRlX3JzcF9wYWNrZXRgLCBhbmQgYG5jaV9jb3JlX2Nvbm5fY2xvc2VfcnNwX3BhY2tldGAuXG5cblRoZXNlIGFyZSBhbGwgcGFydCBvZiB0aGUgTkNJIGNvcmUgYW5kIGFyZSBkZWZpbml0ZWx5IHJlYWNoYWJsZSBkdXJpbmcgdHlwaWNhbCBpbnRlcmFjdGlvbnMgd2l0aCBOQ0kgZGV2aWNlcy5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIHBpbnBvaW50IHdoaWNoIGZ1bmN0aW9ucyBhcmUgdGhlIG1vc3QgcHJvbWlzaW5nIHRhcmdldHMgZm9yIGZ1enppbmcuIEknbGwgZm9jdXMgb24gdGhlc2U6IGBuY2lfbmZjY19sb29wYmFja2AsIGBuY2lfdHJhbnNjZWl2ZWAsIGBuY2lfc2VuZF9kYXRhYCwgYG5jaV9yeF9kYXRhX3BhY2tldGAsIGBuY2lfaGNpX3NlbmRfY21kYCwgYG5jaV9oY2lfc2V0X3BhcmFtYCwgYG5jaV9oY2lfZ2V0X3BhcmFtYCwgYG5jaV9jb3JlX2Nvbm5fY3JlYXRlX3JzcF9wYWNrZXRgLCBgbmNpX2NvcmVfY29ubl9jbG9zZV9yc3BfcGFja2V0YCwgYW5kIGBuY2lfcmZfZGlzY19yc3BfcGFja2V0YC4gVGhlc2Ugc2VlbSB0byBiZSB0aGUgbW9zdCBjcml0aWNhbCBmb3IgZGF0YSBmbG93IGFuZCBjb250cm9sLlxuXG5Ob3csIEknbGwgY2hlY2sgdG8gc2VlIGlmIGBuY2lfaGNpX3NlbmRfY21kYCBpcyByZWFjaGFibGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NTY4LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDA5OjI2OjE2Ljg2NDcwMDg3OVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU4MTU3NDM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5jaV9oY2lfc2VuZF9jbWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25mYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25mYy9uY2kvaGNpLmM9MjI1PUVYUE9SVF9TWU1CT0wobmNpX2hjaV9zZW5kX2V2ZW50KTtcXG5uZXQvbmZjL25jaS9oY2kuYy0yMjYtXFxubmV0L25mYy9uY2kvaGNpLmM6MjI3OmludCBuY2lfaGNpX3NlbmRfY21kKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCB1OCBnYXRlLCB1OCBjbWQsXFxubmV0L25mYy9uY2kvaGNpLmMtMjI4LVxcdFxcdCAgICAgY29uc3QgdTggKnBhcmFtLCBzaXplX3QgcGFyYW1fbGVuLFxcbi0tXFxubmV0L25mYy9uY2kvaGNpLmMtMjc3LX1cXG5uZXQvbmZjL25jaS9oY2kuYzoyNzg6RVhQT1JUX1NZTUJPTChuY2lfaGNpX3NlbmRfY21kKTtcXG5uZXQvbmZjL25jaS9oY2kuYy0yNzktXFxubmV0L25mYy9uY2kvaGNpLmM9MjgwPWludCBuY2lfaGNpX2NsZWFyX2FsbF9waXBlcyhzdHJ1Y3QgbmNpX2RldiAqbmRldilcXG4tLVxcbm5ldC9uZmMvbmNpL2hjaS5jLTI4My1cXG5uZXQvbmZjL25jaS9oY2kuYzoyODQ6XFx0ciA9IG5jaV9oY2lfc2VuZF9jbWQobmRldiwgTkNJX0hDSV9BRE1JTl9HQVRFLFxcbm5ldC9uZmMvbmNpL2hjaS5jLTI4NS1cXHRcXHRcXHQgICAgIE5DSV9IQ0lfQURNX0NMRUFSX0FMTF9QSVBFLCBOVUxMLCAwLCBOVUxMKTtcXG4tLVxcbm5ldC9uZmMvbmNpL2hjaS5jPTU1Nz1zdGF0aWMgdTggbmNpX2hjaV9jcmVhdGVfcGlwZShzdHJ1Y3QgbmNpX2RldiAqbmRldiwgdTggZGVzdF9ob3N0LFxcbi0tXFxubmV0L25mYy9uY2kvaGNpLmMtNTcwLVxcbm5ldC9uZmMvbmNpL2hjaS5jOjU3MTpcXHQqcmVzdWx0ID0gbmNpX2hjaV9zZW5kX2NtZChuZGV2LCBOQ0lfSENJX0FETUlOX0dBVEUsXFxubmV0L25mYy9uY2kvaGNpLmMtNTcyLVxcdFxcdFxcdFxcdCAgIE5DSV9IQ0lfQURNX0NSRUFURV9QSVBFLFxcbi0tXFxubmV0L25mYy9uY2kvaGNpLmM9NTg4PXN0YXRpYyBpbnQgbmNpX2hjaV9kZWxldGVfcGlwZShzdHJ1Y3QgbmNpX2RldiAqbmRldiwgdTggcGlwZSlcXG5uZXQvbmZjL25jaS9oY2kuYy01ODkte1xcbm5ldC9uZmMvbmNpL2hjaS5jOjU5MDpcXHRyZXR1cm4gbmNpX2hjaV9zZW5kX2NtZChuZGV2LCBOQ0lfSENJX0FETUlOX0dBVEUsXFxubmV0L25mYy9uY2kvaGNpLmMtNTkxLVxcdFxcdFxcdFxcdE5DSV9IQ0lfQURNX0RFTEVURV9QSVBFLCBcXHUwMDI2cGlwZSwgMSwgTlVMTCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDA5OjI2OjE3LjAyMjg2NTMxM1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MTUxODU5MzA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUuIE15IGZpcnN0IHRob3VnaHQgaXM6XG5cbioqQ2hlY2tpbmcgUmVhY2hhYmlsaXR5OiBgbmNpX2NvcmVfY29ubl9jcmVhdGVfcnNwX3BhY2tldGAqKlxuXG5JIG5lZWQgdG8gY29uZmlybSBzb21ldGhpbmcgY3JpdGljYWwgaGVyZS4gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGZ1bmN0aW9uIGBuY2lfY29yZV9jb25uX2NyZWF0ZV9yc3BfcGFja2V0YCBpcywgaW4gZmFjdCwgYWNjZXNzaWJsZSBhbmQgZnVuY3Rpb25pbmcgYXMgaW50ZW5kZWQgd2l0aGluIHRoZSBjdXJyZW50IGV4ZWN1dGlvbiBjb250ZXh0LiBUaGlzIGlzIGxpa2VseSBhIGtleSBjb21wb25lbnQgaW4gd2hhdGV2ZXIgYnJvYWRlciBzeXN0ZW0gSSdtIHdvcmtpbmcgd2l0aCwgcGVyaGFwcyByZWxhdGVkIHRvIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCBvciByZXNwb25zZSBoYW5kbGluZywgZ2l2ZW4gdGhlIGZ1bmN0aW9uIG5hbWUuIE1ha2luZyBzdXJlIGl04oCZcyByZWFjaGFibGUgaXMgdGhlIGZpcnN0IHN0ZXAgaW4gZGVidWdnaW5nIG9yIHVuZGVyc3RhbmRpbmcgYSBwb3RlbnRpYWwgaXNzdWUsIG9yIHNpbXBseSB2ZXJpZnlpbmcgYSBzcGVjaWZpYyBjb2RlIHBhdGggSSdtIGFuYWx5emluZy4gR290dGEga25vdyBpZiBpdCdzIHRoZXJlIGJlZm9yZSBJIGNhbiBkbyBhbnl0aGluZyB3aXRoIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTQ1NiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDA5OjI2OjI0LjE3NDcyODgxOVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQzOTc4NDE2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5jaV9jb3JlX2Nvbm5fY3JlYXRlX3JzcF9wYWNrZXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25mYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25mYy9uY2kvcnNwLmM9Mjc2PXN0YXRpYyB2b2lkIG5jaV9uZmNlZV9tb2RlX3NldF9yc3BfcGFja2V0KHN0cnVjdCBuY2lfZGV2ICpuZGV2LFxcbi0tXFxubmV0L25mYy9uY2kvcnNwLmMtMjg0LVxcbm5ldC9uZmMvbmNpL3JzcC5jOjI4NTpzdGF0aWMgdm9pZCBuY2lfY29yZV9jb25uX2NyZWF0ZV9yc3BfcGFja2V0KHN0cnVjdCBuY2lfZGV2ICpuZGV2LFxcbm5ldC9uZmMvbmNpL3JzcC5jLTI4Ni1cXHRcXHRcXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9uZmMvbmNpL3JzcC5jLTMxOS1cXHRcXHQvKiBOb3RlOiBkYXRhX2V4Y2hhbmdlX2NiIGFuZCBkYXRhX2V4Y2hhbmdlX2NiX2NvbnRleHQgbmVlZCB0b1xcbm5ldC9uZmMvbmNpL3JzcC5jOjMyMDpcXHRcXHQgKiBiZSBzcGVjaWZ5IG91dCBvZiBuY2lfY29yZV9jb25uX2NyZWF0ZV9yc3BfcGFja2V0XFxubmV0L25mYy9uY2kvcnNwLmMtMzIxLVxcdFxcdCAqL1xcbi0tXFxubmV0L25mYy9uY2kvcnNwLmM9MzY1PXZvaWQgbmNpX3JzcF9wYWNrZXQoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbmZjL25jaS9yc3AuYy00MDMtXFx0Y2FzZSBOQ0lfT1BfQ09SRV9DT05OX0NSRUFURV9SU1A6XFxubmV0L25mYy9uY2kvcnNwLmM6NDA0OlxcdFxcdG5jaV9jb3JlX2Nvbm5fY3JlYXRlX3JzcF9wYWNrZXQobmRldiwgc2tiKTtcXG5uZXQvbmZjL25jaS9yc3AuYy00MDUtXFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDA5OjI2OjI0LjMxODcxNzM2NVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NTkxOTk4MTgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgdGhlIE5GQyBDb250cm9sbGVyIFJlc3BvbnNlIEhhbmRsZXIqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGlkZW50aWZpZWQgdGhlIGVudHJ5IHBvaW50OiBgbmNpX3JzcF9wYWNrZXRgLiBUaGF0J3MgdGhlIGZ1bmN0aW9uIGhhbmRsaW5nIHJlc3BvbnNlcyBjb21pbmcgYmFjayBmcm9tIHRoZSBORkMgY29udHJvbGxlciwgd2hpY2ggbWFrZXMgaXQgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuIERlZmluaXRlbHkgcmVhY2hhYmxlLCBhbmQgcG90ZW50aWFsbHkgdnVsbmVyYWJsZS4gSSd2ZSBnb3QgYSBnb29kIGZlZWxpbmcgYWJvdXQgdGhpcy5cblxuTm93LCBiZWZvcmUgSSBkaWcgaW4sIEkgd2FudCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gTGV0J3Mgc2VlLi4uIEknbGwgbmVlZCB0byBjb25zaWRlcjogYE5GQ2AsIG9idmlvdXNseSwgYW5kIGBORkNfTkNJYCBmb3IgdGhlIE5DSSBwcm90b2NvbCBpdHNlbGYuIFRoZW4gdGhlcmUncyBgTkZDX1ZJUlRVQUxfTkNJYCwgYmVjYXVzZSB2aXJ0dWFsIE5DSSBtaWdodCBpbnRyb2R1Y2Ugc29tZSBpbnRlcmVzdGluZyBlZGdlIGNhc2VzLCBhbmQgZmluYWxseSBgTkZDX0hDSWAuIEhtbSwgSSdtIG5vdCBlbnRpcmVseSBzdXJlIGFib3V0IGBORkNfSENJYC4gTGV0IG1lIHF1aWNrbHkgY2hlY2sgaWYgYG5jaV9oY2lfc2VuZF9jbWRgIHJlcXVpcmVzIHRoYXQgY29uZmlnIG9wdGlvbi4gSnVzdCBuZWVkIHRvIHZlcmlmeSB0aGF0IGRlcGVuZGVuY3kgdG8gYmUgc3VyZS4gQWxyaWdodCwgbm93IEkgaGF2ZSBhIGdvb2QgYmFzZSBmb3IgY29uZmlndXJpbmcgdGhlIGZ1enppbmcgZW52aXJvbm1lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMDQxLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDk6MjY6MzEuOTEwNzE5MjU4WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MDgzOTY4NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTkZDX0hDSVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmZjL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmZjL01ha2VmaWxlPTc9b2JqLSQoQ09ORklHX05GQ19OQ0kpICs9IG5jaS9cXG5uZXQvbmZjL01ha2VmaWxlOjg6b2JqLSQoQ09ORklHX05GQ19IQ0kpICs9IGhjaS9cXG5uZXQvbmZjL01ha2VmaWxlLTktb2JqLSQoQ09ORklHX05GQ19ESUdJVEFMKSArPSBuZmNfZGlnaXRhbC5vXFxuLS1cXG5uZXQvbmZjL2hjaS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxubmV0L25mYy9oY2kvS2NvbmZpZzoyOmNvbmZpZyBORkNfSENJXFxubmV0L25mYy9oY2kvS2NvbmZpZy0zLVxcdGRlcGVuZHMgb24gTkZDXFxuLS1cXG5uZXQvbmZjL2hjaS9LY29uZmlnPTExPWNvbmZpZyBORkNfU0hETENcXG5uZXQvbmZjL2hjaS9LY29uZmlnOjEyOlxcdGRlcGVuZHMgb24gTkZDX0hDSVxcbm5ldC9uZmMvaGNpL0tjb25maWctMTMtXFx0c2VsZWN0IENSQ19DQ0lUVFxcbi0tXFxubmV0L25mYy9oY2kvTWFrZWZpbGUtNS1cXG5uZXQvbmZjL2hjaS9NYWtlZmlsZTo2Om9iai0kKENPTkZJR19ORkNfSENJKSArPSBoY2kub1xcbm5ldC9uZmMvaGNpL01ha2VmaWxlLTctXFxuLS1cXG5uZXQvbmZjL2hjaS9jb21tYW5kLmM9MTk9c3RhdGljIGludCBuZmNfaGNpX2V4ZWN1dGVfY21kX2FzeW5jKHN0cnVjdCBuZmNfaGNpX2RldiAqaGRldiwgdTggcGlwZSwgdTggY21kLFxcbi0tXFxubmV0L25mYy9oY2kvY29tbWFuZC5jLTI4LVxcdCAqL1xcbm5ldC9uZmMvaGNpL2NvbW1hbmQuYzoyOTpcXHRyZXR1cm4gbmZjX2hjaV9oY3BfbWVzc2FnZV90eChoZGV2LCBwaXBlLCBORkNfSENJX0hDUF9DT01NQU5ELCBjbWQsXFxubmV0L25mYy9oY2kvY29tbWFuZC5jLTMwLVxcdFxcdFxcdFxcdCAgICAgIHBhcmFtLCBwYXJhbV9sZW4sIGNiLCBjYl9jb250ZXh0LCBNQVhfRldJKTtcXG4tLVxcbm5ldC9uZmMvaGNpL2NvbW1hbmQuYz01NT1zdGF0aWMgaW50IG5mY19oY2lfZXhlY3V0ZV9jbWQoc3RydWN0IG5mY19oY2lfZGV2ICpoZGV2LCB1OCBwaXBlLCB1OCBjbWQsXFxuLS1cXG5uZXQvbmZjL2hjaS9jb21tYW5kLmMtNzEtXFx0aGNwX2V3LmV4ZWNfcmVzdWx0ID0gbmZjX2hjaV9oY3BfbWVzc2FnZV90eChoZGV2LCBwaXBlLFxcbm5ldC9uZmMvaGNpL2NvbW1hbmQuYzo3MjpcXHRcXHRcXHRcXHRcXHRcXHQgICAgTkZDX0hDSV9IQ1BfQ09NTUFORCwgY21kLFxcbm5ldC9uZmMvaGNpL2NvbW1hbmQuYy03My1cXHRcXHRcXHRcXHRcXHRcXHQgICAgcGFyYW0sIHBhcmFtX2xlbixcXG4tLVxcbm5ldC9uZmMvaGNpL2NvbW1hbmQuYz05MT1pbnQgbmZjX2hjaV9zZW5kX2V2ZW50KHN0cnVjdCBuZmNfaGNpX2RldiAqaGRldiwgdTggZ2F0ZSwgdTggZXZlbnQsXFxuLS1cXG5uZXQvbmZjL2hjaS9jb21tYW5kLmMtOTgtXFx0cGlwZSA9IGhkZXYtXFx1MDAzZWdhdGUycGlwZVtnYXRlXTtcXG5uZXQvbmZjL2hjaS9jb21tYW5kLmM6OTk6XFx0aWYgKHBpcGUgPT0gTkZDX0hDSV9JTlZBTElEX1BJUEUpXFxubmV0L25mYy9oY2kvY29tbWFuZC5jLTEwMC1cXHRcXHRyZXR1cm4gLUVBRERSTk9UQVZBSUw7XFxubmV0L25mYy9oY2kvY29tbWFuZC5jLTEwMS1cXG5uZXQvbmZjL2hjaS9jb21tYW5kLmM6MTAyOlxcdHJldHVybiBuZmNfaGNpX2hjcF9tZXNzYWdlX3R4KGhkZXYsIHBpcGUsIE5GQ19IQ0lfSENQX0VWRU5ULCBldmVudCxcXG5uZXQvbmZjL2hjaS9jb21tYW5kLmMtMTAzLVxcdFxcdFxcdFxcdCAgICAgIHBhcmFtLCBwYXJhbV9sZW4sIE5VTEwsIE5VTEwsIDApO1xcbi0tXFxubmV0L25mYy9oY2kvY29tbWFuZC5jPTExMj1pbnQgbmZjX2hjaV9zZW5kX2NtZChzdHJ1Y3QgbmZjX2hjaV9kZXYgKmhkZXYsIHU4IGdhdGUsIHU4IGNtZCxcXG4tLVxcbm5ldC9uZmMvaGNpL2NvbW1hbmQuYy0xMTctXFx0cGlwZSA9IGhkZXYtXFx1MDAzZWdhdGUycGlwZVtnYXRlXTtcXG5uZXQvbmZjL2hjaS9jb21tYW5kLmM6MTE4OlxcdGlmIChwaXBlID09IE5GQ19IQ0lfSU5WQUxJRF9QSVBFKVxcbm5ldC9uZmMvaGNpL2NvbW1hbmQuYy0xMTktXFx0XFx0cmV0dXJuIC1FQUREUk5PVEFWQUlMO1xcbi0tXFxubmV0L25mYy9oY2kvY29tbWFuZC5jPTEyNT1pbnQgbmZjX2hjaV9zZW5kX2NtZF9hc3luYyhzdHJ1Y3QgbmZjX2hjaV9kZXYgKmhkZXYsIHU4IGdhdGUsIHU4IGNtZCxcXG4tLVxcbm5ldC9uZmMvaGNpL2NvbW1hbmQuYy0xMzEtXFx0cGlwZSA9IGhkZXYtXFx1MDAzZWdhdGUycGlwZVtnYXRlXTtcXG5uZXQvbmZjL2hjaS9jb21tYW5kLmM6MTMyOlxcdGlmIChwaXBlID09IE5GQ19IQ0lfSU5WQUxJRF9QSVBFKVxcbm5ldC9uZmMvaGNpL2NvbW1hbmQuYy0xMzMtXFx0XFx0cmV0dXJuIC1FQUREUk5PVEFWQUlMO1xcbi0tXFxubmV0L25mYy9oY2kvY29tbWFuZC5jPTE0MD1pbnQgbmZjX2hjaV9zZXRfcGFyYW0oc3RydWN0IG5mY19oY2lfZGV2ICpoZGV2LCB1OCBnYXRlLCB1OCBpZHgsXFxuLS1cXG5uZXQvbmZjL2hjaS9jb21tYW5kLmMtMTYyLVxcbm5ldC9uZmMvaGNpL2NvbW1hbmQuYzoxNjM6XFx0ciA9IG5mY19oY2lfc2VuZF9jbWQoaGRldiwgZ2F0ZSwgTkZDX0hDSV9BTllfU0VUX1BBUkFNRVRFUixcXG5uZXQvbmZjL2hjaS9jb21tYW5kLmMtMTY0LVxcdFxcdFxcdCAgICAgdG1wLCBwYXJhbV9sZW4gKyAxLCBOVUxMKTtcXG4tLVxcbm5ldC9uZmMvaGNpL2NvbW1hbmQuYz0xNzI9aW50IG5mY19oY2lfZ2V0X3BhcmFtKHN0cnVjdCBuZmNfaGNpX2RldiAqaGRldiwgdTggZ2F0ZSwgdTggaWR4LFxcbi0tXFxubmV0L25mYy9oY2kvY29tbWFuZC5jLTE3Ni1cXG5uZXQvbmZjL2hjaS9jb21tYW5kLmM6MTc3OlxcdHJldHVybiBuZmNfaGNpX3NlbmRfY21kKGhkZXYsIGdhdGUsIE5GQ19IQ0lfQU5ZX0dFVF9QQVJBTUVURVIsXFxubmV0L25mYy9oY2kvY29tbWFuZC5jLTE3OC1cXHRcXHRcXHRcXHRcXHUwMDI2aWR4LCAxLCBza2IpO1xcbi0tXFxubmV0L25mYy9oY2kvY29tbWFuZC5jPTE4Mj1zdGF0aWMgaW50IG5mY19oY2lfb3Blbl9waXBlKHN0cnVjdCBuZmNfaGNpX2RldiAqaGRldiwgdTggcGlwZSlcXG4tLVxcbm5ldC9uZmMvaGNpL2NvbW1hbmQuYy0xODgtXFxubmV0L25mYy9oY2kvY29tbWFuZC5jOjE4OTpcXHRyID0gbmZjX2hjaV9leGVjdXRlX2NtZChoZGV2LCBwaXBlLCBORkNfSENJX0FOWV9PUEVOX1BJUEUsXFxubmV0L25mYy9oY2kvY29tbWFuZC5jLTE5MC1cXHRcXHRcXHRcXHROVUxMLCAwLCBcXHUwMDI2c2tiKTtcXG4tLVxcbm5ldC9uZmMvaGNpL2NvbW1hbmQuYz0yMDI9c3RhdGljIGludCBuZmNfaGNpX2Nsb3NlX3BpcGUoc3RydWN0IG5mY19oY2lfZGV2ICpoZGV2LCB1OCBwaXBlKVxcbm5ldC9uZmMvaGNpL2NvbW1hbmQuYy0yMDMte1xcbm5ldC9uZmMvaGNpL2NvbW1hbmQuYzoyMDQ6XFx0cmV0dXJuIG5mY19oY2lfZXhlY3V0ZV9jbWQoaGRldiwgcGlwZSwgTkZDX0hDSV9BTllfQ0xPU0VfUElQRSxcXG5uZXQvbmZjL2hjaS9jb21tYW5kLmMtMjA1LVxcdFxcdFxcdFxcdCAgIE5VTEwsIDAsIE5VTEwpO1xcbi0tXFxubmV0L25mYy9oY2kvY29tbWFuZC5jPTIwOD1zdGF0aWMgdTggbmZjX2hjaV9jcmVhdGVfcGlwZShzdHJ1Y3QgbmZjX2hjaV9kZXYgKmhkZXYsIHU4IGRlc3RfaG9zdCxcXG4tLVxcbm5ldC9uZmMvaGNpL2NvbW1hbmQuYy0yMTctXFxubmV0L25mYy9oY2kvY29tbWFuZC5jOjIxODpcXHRwYXJhbXMuc3JjX2dhdGUgPSBORkNfSENJX0FETUlOX0dBVEU7XFxubmV0L25mYy9oY2kvY29tbWFuZC5jLTIxOS1cXHRwYXJhbXMuZGVzdF9ob3N0ID0gZGVzdF9ob3N0O1xcbi0tXFxubmV0L25mYy9oY2kvY29tbWFuZC5jLTIyMS1cXG5uZXQvbmZjL2hjaS9jb21tYW5kLmM6MjIyOlxcdCpyZXN1bHQgPSBuZmNfaGNpX2V4ZWN1dGVfY21kKGhkZXYsIE5GQ19IQ0lfQURNSU5fUElQRSxcXG5uZXQvbmZjL2hjaS9jb21tYW5kLmM6MjIzOlxcdFxcdFxcdFxcdCAgICAgIE5GQ19IQ0lfQURNX0NSRUFURV9QSVBFLFxcbm5ldC9uZmMvaGNpL2NvbW1hbmQuYy0yMjQtXFx0XFx0XFx0XFx0ICAgICAgKHU4ICopIFxcdTAwMjZwYXJhbXMsIHNpemVvZihwYXJhbXMpLCBcXHUwMDI2c2tiKTtcXG5uZXQvbmZjL2hjaS9jb21tYW5kLmMtMjI1LVxcdGlmICgqcmVzdWx0IFxcdTAwM2MgMClcXG5uZXQvbmZjL2hjaS9jb21tYW5kLmM6MjI2OlxcdFxcdHJldHVybiBORkNfSENJX0lOVkFMSURfUElQRTtcXG5uZXQvbmZjL2hjaS9jb21tYW5kLmMtMjI3LVxcbi0tXFxubmV0L25mYy9oY2kvY29tbWFuZC5jPTIzNz1zdGF0aWMgaW50IG5mY19oY2lfZGVsZXRlX3BpcGUoc3RydWN0IG5mY19oY2lfZGV2ICpoZGV2LCB1OCBwaXBlKVxcbm5ldC9uZmMvaGNpL2NvbW1hbmQuYy0yMzgte1xcbm5ldC9uZmMvaGNpL2NvbW1hbmQuYzoyMzk6XFx0cmV0dXJuIG5mY19oY2lfZXhlY3V0ZV9jbWQoaGRldiwgTkZDX0hDSV9BRE1JTl9QSVBFLFxcbm5ldC9uZmMvaGNpL2NvbW1hbmQuYzoyNDA6XFx0XFx0XFx0XFx0ICAgTkZDX0hDSV9BRE1fREVMRVRFX1BJUEUsIFxcdTAwMjZwaXBlLCAxLCBOVUxMKTtcXG5uZXQvbmZjL2hjaS9jb21tYW5kLmMtMjQxLX1cXG4tLVxcbm5ldC9uZmMvaGNpL2NvbW1hbmQuYz0yNDM9c3RhdGljIGludCBuZmNfaGNpX2NsZWFyX2FsbF9waXBlcyhzdHJ1Y3QgbmZjX2hjaV9kZXYgKmhkZXYpXFxuLS1cXG5uZXQvbmZjL2hjaS9jb21tYW5kLmMtMjUwLVxcbm5ldC9uZmMvaGNpL2NvbW1hbmQuYzoyNTE6XFx0aWYgKHRlc3RfYml0KE5GQ19IQ0lfUVVJUktfU0hPUlRfQ0xFQVIsIFxcdTAwMjZoZGV2LVxcdTAwM2VxdWlya3MpKVxcbm5ldC9uZmMvaGNpL2NvbW1hbmQuYy0yNTItXFx0XFx0cGFyYW1fbGVuID0gMDtcXG5uZXQvbmZjL2hjaS9jb21tYW5kLmMtMjUzLVxcbm5ldC9uZmMvaGNpL2NvbW1hbmQuYzoyNTQ6XFx0cmV0dXJuIG5mY19oY2lfZXhlY3V0ZV9jbWQoaGRldiwgTkZDX0hDSV9BRE1JTl9QSVBFLFxcbm5ldC9uZmMvaGNpL2NvbW1hbmQuYzoyNTU6XFx0XFx0XFx0XFx0ICAgTkZDX0hDSV9BRE1fQ0xFQVJfQUxMX1BJUEUsIHBhcmFtLCBwYXJhbV9sZW4sXFxubmV0L25mYy9oY2kvY29tbWFuZC5jLTI1Ni1cXHRcXHRcXHRcXHQgICBOVUxMKTtcXG4tLVxcbm5ldC9uZmMvaGNpL2NvbW1hbmQuYz0yNTk9aW50IG5mY19oY2lfZGlzY29ubmVjdF9nYXRlKHN0cnVjdCBuZmNfaGNpX2RldiAqaGRldiwgdTggZ2F0ZSlcXG4tLVxcbm5ldC9uZmMvaGNpL2NvbW1hbmQuYy0yNjMtXFxubmV0L25mYy9oY2kvY29tbWFuZC5jOjI2NDpcXHRpZiAocGlwZSA9PSBORkNfSENJX0lOVkFMSURfUElQRSlcXG5uZXQvbmZjL2hjaS9jb21tYW5kLmMtMjY1LVxcdFxcdHJldHVybiAtRUFERFJOT1RBVkFJTDtcXG4tLVxcbm5ldC9uZmMvaGNpL2NvbW1hbmQuYy0yNzAtXFxubmV0L25mYy9oY2kvY29tbWFuZC5jOjI3MTpcXHRpZiAocGlwZSAhPSBORkNfSENJX0xJTktfTUdNVF9QSVBFIFxcdTAwMjZcXHUwMDI2IHBpcGUgIT0gTkZDX0hDSV9BRE1JTl9QSVBFKSB7XFxubmV0L25mYy9oY2kvY29tbWFuZC5jLTI3Mi1cXHRcXHRyID0gbmZjX2hjaV9kZWxldGVfcGlwZShoZGV2LCBwaXBlKTtcXG4tLVxcbm5ldC9uZmMvaGNpL2NvbW1hbmQuYy0yNzYtXFxubmV0L25mYy9oY2kvY29tbWFuZC5jOjI3NzpcXHRoZGV2LVxcdTAwM2VnYXRlMnBpcGVbZ2F0ZV0gPSBORkNfSENJX0lOVkFMSURfUElQRTtcXG5uZXQvbmZjL2hjaS9jb21tYW5kLmMtMjc4LVxcbi0tXFxubmV0L25mYy9oY2kvY29tbWFuZC5jPTI5Nz1pbnQgbmZjX2hjaV9jb25uZWN0X2dhdGUoc3RydWN0IG5mY19oY2lfZGV2ICpoZGV2LCB1OCBkZXN0X2hvc3QsIHU4IGRlc3RfZ2F0ZSxcXG4tLVxcbm5ldC9uZmMvaGNpL2NvbW1hbmQuYy0zMDItXFxubmV0L25mYy9oY2kvY29tbWFuZC5jOjMwMzpcXHRpZiAocGlwZSA9PSBORkNfSENJX0RPX05PVF9DUkVBVEVfUElQRSlcXG5uZXQvbmZjL2hjaS9jb21tYW5kLmMtMzA0LVxcdFxcdHJldHVybiAwO1xcbm5ldC9uZmMvaGNpL2NvbW1hbmQuYy0zMDUtXFxubmV0L25mYy9oY2kvY29tbWFuZC5jOjMwNjpcXHRpZiAoaGRldi1cXHUwMDNlZ2F0ZTJwaXBlW2Rlc3RfZ2F0ZV0gIT0gTkZDX0hDSV9JTlZBTElEX1BJUEUpXFxubmV0L25mYy9oY2kvY29tbWFuZC5jLTMwNy1cXHRcXHRyZXR1cm4gLUVBRERSSU5VU0U7XFxubmV0L25mYy9oY2kvY29tbWFuZC5jLTMwOC1cXG5uZXQvbmZjL2hjaS9jb21tYW5kLmM6MzA5OlxcdGlmIChwaXBlICE9IE5GQ19IQ0lfSU5WQUxJRF9QSVBFKVxcbm5ldC9uZmMvaGNpL2NvbW1hbmQuYy0zMTAtXFx0XFx0Z290byBvcGVuX3BpcGU7XFxuLS1cXG5uZXQvbmZjL2hjaS9jb21tYW5kLmMtMzEyLVxcdHN3aXRjaCAoZGVzdF9nYXRlKSB7XFxubmV0L25mYy9oY2kvY29tbWFuZC5jOjMxMzpcXHRjYXNlIE5GQ19IQ0lfTElOS19NR01UX0dBVEU6XFxubmV0L25mYy9oY2kvY29tbWFuZC5jOjMxNDpcXHRcXHRwaXBlID0gTkZDX0hDSV9MSU5LX01HTVRfUElQRTtcXG5uZXQvbmZjL2hjaS9jb21tYW5kLmMtMzE1LVxcdFxcdGJyZWFrO1xcbm5ldC9uZmMvaGNpL2NvbW1hbmQuYzozMTY6XFx0Y2FzZSBORkNfSENJX0FETUlOX0dBVEU6XFxubmV0L25mYy9oY2kvY29tbWFuZC5jOjMxNzpcXHRcXHRwaXBlID0gTkZDX0hDSV9BRE1JTl9QSVBFO1xcbm5ldC9uZmMvaGNpL2NvbW1hbmQuYy0zMTgtXFx0XFx0YnJlYWs7XFxuLS1cXG5uZXQvbmZjL2hjaS9jb21tYW5kLmMtMzIwLVxcdFxcdHBpcGUgPSBuZmNfaGNpX2NyZWF0ZV9waXBlKGhkZXYsIGRlc3RfaG9zdCwgZGVzdF9nYXRlLCBcXHUwMDI2cik7XFxubmV0L25mYy9oY2kvY29tbWFuZC5jOjMyMTpcXHRcXHRpZiAocGlwZSA9PSBORkNfSENJX0lOVkFMSURfUElQRSlcXG5uZXQvbmZjL2hjaS9jb21tYW5kLmMtMzIyLVxcdFxcdFxcdHJldHVybiByO1xcbi0tXFxubmV0L25mYy9oY2kvY29yZS5jPTIyPWludCBuZmNfaGNpX3Jlc3VsdF90b19lcnJubyh1OCByZXN1bHQpXFxuLS1cXG5uZXQvbmZjL2hjaS9jb3JlLmMtMjQtXFx0c3dpdGNoIChyZXN1bHQpIHtcXG5uZXQvbmZjL2hjaS9jb3JlLmM6MjU6XFx0Y2FzZSBORkNfSENJX0FOWV9PSzpcXG5uZXQvbmZjL2hjaS9jb3JlLmMtMjYtXFx0XFx0cmV0dXJuIDA7XFxubmV0L25mYy9oY2kvY29yZS5jOjI3OlxcdGNhc2UgTkZDX0hDSV9BTllfRV9SRUdfUEFSX1VOS05PV046XFxubmV0L25mYy9oY2kvY29yZS5jLTI4LVxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG5uZXQvbmZjL2hjaS9jb3JlLmM6Mjk6XFx0Y2FzZSBORkNfSENJX0FOWV9FX1RJTUVPVVQ6XFxubmV0L25mYy9oY2kvY29yZS5jLTMwLVxcdFxcdHJldHVybiAtRVRJTUU7XFxuLS1cXG5uZXQvbmZjL2hjaS9jb3JlLmM9Mzc9dm9pZCBuZmNfaGNpX3Jlc2V0X3BpcGVzKHN0cnVjdCBuZmNfaGNpX2RldiAqaGRldilcXG4tLVxcbm5ldC9uZmMvaGNpL2NvcmUuYy00MC1cXG5uZXQvbmZjL2hjaS9jb3JlLmM6NDE6XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE5GQ19IQ0lfTUFYX1BJUEVTOyBpKyspIHtcXG5uZXQvbmZjL2hjaS9jb3JlLmM6NDI6XFx0XFx0aGRldi1cXHUwMDNlcGlwZXNbaV0uZ2F0ZSA9IE5GQ19IQ0lfSU5WQUxJRF9HQVRFO1xcbm5ldC9uZmMvaGNpL2NvcmUuYzo0MzpcXHRcXHRoZGV2LVxcdTAwM2VwaXBlc1tpXS5kZXN0X2hvc3QgPSBORkNfSENJX0lOVkFMSURfSE9TVDtcXG5uZXQvbmZjL2hjaS9jb3JlLmMtNDQtXFx0fVxcbm5ldC9uZmMvaGNpL2NvcmUuYzo0NTpcXHRtZW1zZXQoaGRldi1cXHUwMDNlZ2F0ZTJwaXBlLCBORkNfSENJX0lOVkFMSURfUElQRSwgc2l6ZW9mKGhkZXYtXFx1MDAzZWdhdGUycGlwZSkpO1xcbm5ldC9uZmMvaGNpL2NvcmUuYy00Ni19XFxuLS1cXG5uZXQvbmZjL2hjaS9jb3JlLmM9NDk9dm9pZCBuZmNfaGNpX3Jlc2V0X3BpcGVzX3Blcl9ob3N0KHN0cnVjdCBuZmNfaGNpX2RldiAqaGRldiwgdTggaG9zdClcXG4tLVxcbm5ldC9uZmMvaGNpL2NvcmUuYy01Mi1cXG5uZXQvbmZjL2hjaS9jb3JlLmM6NTM6XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE5GQ19IQ0lfTUFYX1BJUEVTOyBpKyspIHtcXG5uZXQvbmZjL2hjaS9jb3JlLmMtNTQtXFx0XFx0aWYgKGhkZXYtXFx1MDAzZXBpcGVzW2ldLmRlc3RfaG9zdCAhPSBob3N0KVxcbi0tXFxubmV0L25mYy9oY2kvY29yZS5jLTU2LVxcbm5ldC9uZmMvaGNpL2NvcmUuYzo1NzpcXHRcXHRoZGV2LVxcdTAwM2VwaXBlc1tpXS5nYXRlID0gTkZDX0hDSV9JTlZBTElEX0dBVEU7XFxubmV0L25mYy9oY2kvY29yZS5jOjU4OlxcdFxcdGhkZXYtXFx1MDAzZXBpcGVzW2ldLmRlc3RfaG9zdCA9IE5GQ19IQ0lfSU5WQUxJRF9IT1NUO1xcbm5ldC9uZmMvaGNpL2NvcmUuYy01OS1cXHR9XFxuLS1cXG5uZXQvbmZjL2hjaS9jb3JlLmM9MTI2PXN0YXRpYyB2b2lkIG5mY19oY2lfbXNnX3J4X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxubmV0L25mYy9oY2kvY29yZS5jLTEzNy1cXHRcXHRwaXBlID0gc2tiLVxcdTAwM2VkYXRhWzBdO1xcbm5ldC9uZmMvaGNpL2NvcmUuYzoxMzg6XFx0XFx0c2tiX3B1bGwoc2tiLCBORkNfSENJX0hDUF9QQUNLRVRfSEVBREVSX0xFTik7XFxubmV0L25mYy9oY2kvY29yZS5jLTEzOS1cXHRcXHRtZXNzYWdlID0gKHN0cnVjdCBoY3BfbWVzc2FnZSAqKXNrYi1cXHUwMDNlZGF0YTtcXG4tLVxcbm5ldC9uZmMvaGNpL2NvcmUuYy0xNDEtXFx0XFx0aW5zdHJ1Y3Rpb24gPSBIQ1BfTVNHX0dFVF9DTUQobWVzc2FnZS1cXHUwMDNlaGVhZGVyKTtcXG5uZXQvbmZjL2hjaS9jb3JlLmM6MTQyOlxcdFxcdHNrYl9wdWxsKHNrYiwgTkZDX0hDSV9IQ1BfTUVTU0FHRV9IRUFERVJfTEVOKTtcXG5uZXQvbmZjL2hjaS9jb3JlLmMtMTQzLVxcbi0tXFxubmV0L25mYy9oY2kvY29yZS5jPTE4MT12b2lkIG5mY19oY2lfY21kX3JlY2VpdmVkKHN0cnVjdCBuZmNfaGNpX2RldiAqaGRldiwgdTggcGlwZSwgdTggY21kLFxcbi0tXFxubmV0L25mYy9oY2kvY29yZS5jLTE4My17XFxubmV0L25mYy9oY2kvY29yZS5jOjE4NDpcXHR1OCBzdGF0dXMgPSBORkNfSENJX0FOWV9PSztcXG5uZXQvbmZjL2hjaS9jb3JlLmMtMTg1LVxcdGNvbnN0IHN0cnVjdCBoY2lfY3JlYXRlX3BpcGVfcmVzcCAqY3JlYXRlX2luZm87XFxuLS1cXG5uZXQvbmZjL2hjaS9jb3JlLmMtMTkxLVxcbm5ldC9uZmMvaGNpL2NvcmUuYzoxOTI6XFx0aWYgKHBpcGUgXFx1MDAzZT0gTkZDX0hDSV9NQVhfUElQRVMpIHtcXG5uZXQvbmZjL2hjaS9jb3JlLmM6MTkzOlxcdFxcdHN0YXR1cyA9IE5GQ19IQ0lfQU5ZX0VfTk9LO1xcbm5ldC9uZmMvaGNpL2NvcmUuYy0xOTQtXFx0XFx0Z290byBleGl0O1xcbi0tXFxubmV0L25mYy9oY2kvY29yZS5jLTE5OS1cXHRzd2l0Y2ggKGNtZCkge1xcbm5ldC9uZmMvaGNpL2NvcmUuYzoyMDA6XFx0Y2FzZSBORkNfSENJX0FETV9OT1RJRllfUElQRV9DUkVBVEVEOlxcbm5ldC9uZmMvaGNpL2NvcmUuYy0yMDEtXFx0XFx0aWYgKHNrYi1cXHUwMDNlbGVuICE9IDUpIHtcXG5uZXQvbmZjL2hjaS9jb3JlLmM6MjAyOlxcdFxcdFxcdHN0YXR1cyA9IE5GQ19IQ0lfQU5ZX0VfTk9LO1xcbm5ldC9uZmMvaGNpL2NvcmUuYy0yMDMtXFx0XFx0XFx0Z290byBleGl0O1xcbi0tXFxubmV0L25mYy9oY2kvY29yZS5jLTIwNi1cXG5uZXQvbmZjL2hjaS9jb3JlLmM6MjA3OlxcdFxcdGlmIChjcmVhdGVfaW5mby1cXHUwMDNlcGlwZSBcXHUwMDNlPSBORkNfSENJX01BWF9QSVBFUykge1xcbm5ldC9uZmMvaGNpL2NvcmUuYzoyMDg6XFx0XFx0XFx0c3RhdHVzID0gTkZDX0hDSV9BTllfRV9OT0s7XFxubmV0L25mYy9oY2kvY29yZS5jLTIwOS1cXHRcXHRcXHRnb3RvIGV4aXQ7XFxuLS1cXG5uZXQvbmZjL2hjaS9jb3JlLmMtMjIxLVxcdFxcdGJyZWFrO1xcbm5ldC9uZmMvaGNpL2NvcmUuYzoyMjI6XFx0Y2FzZSBORkNfSENJX0FOWV9PUEVOX1BJUEU6XFxubmV0L25mYy9oY2kvY29yZS5jOjIyMzpcXHRcXHRpZiAoZ2F0ZSA9PSBORkNfSENJX0lOVkFMSURfR0FURSkge1xcbm5ldC9uZmMvaGNpL2NvcmUuYzoyMjQ6XFx0XFx0XFx0c3RhdHVzID0gTkZDX0hDSV9BTllfRV9OT0s7XFxubmV0L25mYy9oY2kvY29yZS5jLTIyNS1cXHRcXHRcXHRnb3RvIGV4aXQ7XFxuLS1cXG5uZXQvbmZjL2hjaS9jb3JlLmMtMjI3LVxcdFxcdGJyZWFrO1xcbm5ldC9uZmMvaGNpL2NvcmUuYzoyMjg6XFx0Y2FzZSBORkNfSENJX0FETV9OT1RJRllfUElQRV9ERUxFVEVEOlxcbm5ldC9uZmMvaGNpL2NvcmUuYy0yMjktXFx0XFx0aWYgKHNrYi1cXHUwMDNlbGVuICE9IDEpIHtcXG5uZXQvbmZjL2hjaS9jb3JlLmM6MjMwOlxcdFxcdFxcdHN0YXR1cyA9IE5GQ19IQ0lfQU5ZX0VfTk9LO1xcbm5ldC9uZmMvaGNpL2NvcmUuYy0yMzEtXFx0XFx0XFx0Z290byBleGl0O1xcbi0tXFxubmV0L25mYy9oY2kvY29yZS5jLTIzNC1cXG5uZXQvbmZjL2hjaS9jb3JlLmM6MjM1OlxcdFxcdGlmIChkZWxldGVfaW5mby1cXHUwMDNlcGlwZSBcXHUwMDNlPSBORkNfSENJX01BWF9QSVBFUykge1xcbm5ldC9uZmMvaGNpL2NvcmUuYzoyMzY6XFx0XFx0XFx0c3RhdHVzID0gTkZDX0hDSV9BTllfRV9OT0s7XFxubmV0L25mYy9oY2kvY29yZS5jLTIzNy1cXHRcXHRcXHRnb3RvIGV4aXQ7XFxuLS1cXG5uZXQvbmZjL2hjaS9jb3JlLmMtMjM5LVxcbm5ldC9uZmMvaGNpL2NvcmUuYzoyNDA6XFx0XFx0aGRldi1cXHUwMDNlcGlwZXNbZGVsZXRlX2luZm8tXFx1MDAzZXBpcGVdLmdhdGUgPSBORkNfSENJX0lOVkFMSURfR0FURTtcXG5uZXQvbmZjL2hjaS9jb3JlLmM6MjQxOlxcdFxcdGhkZXYtXFx1MDAzZXBpcGVzW2RlbGV0ZV9pbmZvLVxcdTAwM2VwaXBlXS5kZXN0X2hvc3QgPSBORkNfSENJX0lOVkFMSURfSE9TVDtcXG5uZXQvbmZjL2hjaS9jb3JlLmMtMjQyLVxcdFxcdGJyZWFrO1xcbm5ldC9uZmMvaGNpL2NvcmUuYzoyNDM6XFx0Y2FzZSBORkNfSENJX0FETV9OT1RJRllfQUxMX1BJUEVfQ0xFQVJFRDpcXG5uZXQvbmZjL2hjaS9jb3JlLmMtMjQ0LVxcdFxcdGlmIChza2ItXFx1MDAzZWxlbiAhPSAxKSB7XFxubmV0L25mYy9oY2kvY29yZS5jOjI0NTpcXHRcXHRcXHRzdGF0dXMgPSBORkNfSENJX0FOWV9FX05PSztcXG5uZXQvbmZjL2hjaS9jb3JlLmMtMjQ2LVxcdFxcdFxcdGdvdG8gZXhpdDtcXG4tLVxcbm5ldC9uZmMvaGNpL2NvcmUuYy0yNjAtZXhpdDpcXG5uZXQvbmZjL2hjaS9jb3JlLmM6MjYxOlxcdG5mY19oY2lfaGNwX21lc3NhZ2VfdHgoaGRldiwgcGlwZSwgTkZDX0hDSV9IQ1BfUkVTUE9OU0UsXFxubmV0L25mYy9oY2kvY29yZS5jLTI2Mi1cXHRcXHRcXHQgICAgICAgc3RhdHVzLCBOVUxMLCAwLCBOVUxMLCBOVUxMLCAwKTtcXG4tLVxcbm5ldC9uZmMvaGNpL2NvcmUuYz0yNjc9dTMyIG5mY19oY2lfc2FrX3RvX3Byb3RvY29sKHU4IHNhaylcXG5uZXQvbmZjL2hjaS9jb3JlLmMtMjY4LXtcXG5uZXQvbmZjL2hjaS9jb3JlLmM6MjY5OlxcdHN3aXRjaCAoTkZDX0hDSV9UWVBFX0FfU0VMX1BST1Qoc2FrKSkge1xcbm5ldC9uZmMvaGNpL2NvcmUuYzoyNzA6XFx0Y2FzZSBORkNfSENJX1RZUEVfQV9TRUxfUFJPVF9NSUZBUkU6XFxubmV0L25mYy9oY2kvY29yZS5jLTI3MS1cXHRcXHRyZXR1cm4gTkZDX1BST1RPX01JRkFSRV9NQVNLO1xcbm5ldC9uZmMvaGNpL2NvcmUuYzoyNzI6XFx0Y2FzZSBORkNfSENJX1RZUEVfQV9TRUxfUFJPVF9JU08xNDQ0MzpcXG5uZXQvbmZjL2hjaS9jb3JlLmMtMjczLVxcdFxcdHJldHVybiBORkNfUFJPVE9fSVNPMTQ0NDNfTUFTSztcXG5uZXQvbmZjL2hjaS9jb3JlLmM6Mjc0OlxcdGNhc2UgTkZDX0hDSV9UWVBFX0FfU0VMX1BST1RfREVQOlxcbm5ldC9uZmMvaGNpL2NvcmUuYy0yNzUtXFx0XFx0cmV0dXJuIE5GQ19QUk9UT19ORkNfREVQX01BU0s7XFxubmV0L25mYy9oY2kvY29yZS5jOjI3NjpcXHRjYXNlIE5GQ19IQ0lfVFlQRV9BX1NFTF9QUk9UX0lTTzE0NDQzX0RFUDpcXG5uZXQvbmZjL2hjaS9jb3JlLmMtMjc3LVxcdFxcdHJldHVybiBORkNfUFJPVE9fSVNPMTQ0NDNfTUFTSyB8IE5GQ19QUk9UT19ORkNfREVQX01BU0s7XFxuLS1cXG5uZXQvbmZjL2hjaS9jb3JlLmM9Mjg0PWludCBuZmNfaGNpX3RhcmdldF9kaXNjb3ZlcmVkKHN0cnVjdCBuZmNfaGNpX2RldiAqaGRldiwgdTggZ2F0ZSlcXG4tLVxcbm5ldC9uZmMvaGNpL2NvcmUuYy0yOTgtXFx0c3dpdGNoIChnYXRlKSB7XFxubmV0L25mYy9oY2kvY29yZS5jOjI5OTpcXHRjYXNlIE5GQ19IQ0lfUkZfUkVBREVSX0FfR0FURTpcXG5uZXQvbmZjL2hjaS9jb3JlLmM6MzAwOlxcdFxcdHIgPSBuZmNfaGNpX2dldF9wYXJhbShoZGV2LCBORkNfSENJX1JGX1JFQURFUl9BX0dBVEUsXFxubmV0L25mYy9oY2kvY29yZS5jOjMwMTpcXHRcXHRcXHRcXHQgICAgICBORkNfSENJX1JGX1JFQURFUl9BX0FUUUEsIFxcdTAwMjZhdHFhX3NrYik7XFxubmV0L25mYy9oY2kvY29yZS5jLTMwMi1cXHRcXHRpZiAociBcXHUwMDNjIDApXFxuLS1cXG5uZXQvbmZjL2hjaS9jb3JlLmMtMzA0LVxcbm5ldC9uZmMvaGNpL2NvcmUuYzozMDU6XFx0XFx0ciA9IG5mY19oY2lfZ2V0X3BhcmFtKGhkZXYsIE5GQ19IQ0lfUkZfUkVBREVSX0FfR0FURSxcXG5uZXQvbmZjL2hjaS9jb3JlLmM6MzA2OlxcdFxcdFxcdFxcdCAgICAgIE5GQ19IQ0lfUkZfUkVBREVSX0FfU0FLLCBcXHUwMDI2c2FrX3NrYik7XFxubmV0L25mYy9oY2kvY29yZS5jLTMwNy1cXHRcXHRpZiAociBcXHUwMDNjIDApXFxuLS1cXG5uZXQvbmZjL2hjaS9jb3JlLmMtMzI0LVxcbm5ldC9uZmMvaGNpL2NvcmUuYzozMjU6XFx0XFx0ciA9IG5mY19oY2lfZ2V0X3BhcmFtKGhkZXYsIE5GQ19IQ0lfUkZfUkVBREVSX0FfR0FURSxcXG5uZXQvbmZjL2hjaS9jb3JlLmM6MzI2OlxcdFxcdFxcdFxcdCAgICAgIE5GQ19IQ0lfUkZfUkVBREVSX0FfVUlELCBcXHUwMDI2dWlkX3NrYik7XFxubmV0L25mYy9oY2kvY29yZS5jLTMyNy1cXHRcXHRpZiAociBcXHUwMDNjIDApXFxuLS1cXG5uZXQvbmZjL2hjaS9jb3JlLmMtMzQ0LVxcdFxcdGJyZWFrO1xcbm5ldC9uZmMvaGNpL2NvcmUuYzozNDU6XFx0Y2FzZSBORkNfSENJX1JGX1JFQURFUl9CX0dBVEU6XFxubmV0L25mYy9oY2kvY29yZS5jLTM0Ni1cXHRcXHR0YXJnZXRzLVxcdTAwM2VzdXBwb3J0ZWRfcHJvdG9jb2xzID0gTkZDX1BST1RPX0lTTzE0NDQzX0JfTUFTSztcXG4tLVxcbm5ldC9uZmMvaGNpL2NvcmUuYz0zODE9dm9pZCBuZmNfaGNpX2V2ZW50X3JlY2VpdmVkKHN0cnVjdCBuZmNfaGNpX2RldiAqaGRldiwgdTggcGlwZSwgdTggZXZlbnQsXFxuLS1cXG5uZXQvbmZjL2hjaS9jb3JlLmMtMzg2LVxcbm5ldC9uZmMvaGNpL2NvcmUuYzozODc6XFx0aWYgKHBpcGUgXFx1MDAzZT0gTkZDX0hDSV9NQVhfUElQRVMpIHtcXG5uZXQvbmZjL2hjaS9jb3JlLmMtMzg4LVxcdFxcdHByX2VycihcXFwiRGlzY2FyZGVkIGV2ZW50ICV4IHRvIGludmFsaWQgcGlwZSAleFxcXFxuXFxcIiwgZXZlbnQsIHBpcGUpO1xcbi0tXFxubmV0L25mYy9oY2kvY29yZS5jLTM5Mi1cXHRnYXRlID0gaGRldi1cXHUwMDNlcGlwZXNbcGlwZV0uZ2F0ZTtcXG5uZXQvbmZjL2hjaS9jb3JlLmM6MzkzOlxcdGlmIChnYXRlID09IE5GQ19IQ0lfSU5WQUxJRF9HQVRFKSB7XFxubmV0L25mYy9oY2kvY29yZS5jLTM5NC1cXHRcXHRwcl9lcnIoXFxcIkRpc2NhcmRlZCBldmVudCAleCB0byB1bm9wZW5lZCBwaXBlICV4XFxcXG5cXFwiLCBldmVudCwgcGlwZSk7XFxuLS1cXG5uZXQvbmZjL2hjaS9jb3JlLmMtNDA0LVxcdHN3aXRjaCAoZXZlbnQpIHtcXG5uZXQvbmZjL2hjaS9jb3JlLmM6NDA1OlxcdGNhc2UgTkZDX0hDSV9FVlRfVEFSR0VUX0RJU0NPVkVSRUQ6XFxubmV0L25mYy9oY2kvY29yZS5jLTQwNi1cXHRcXHRpZiAoc2tiLVxcdTAwM2VsZW4gXFx1MDAzYyAxKSB7XFx0Lyogbm8gc3RhdHVzIGRhdGE/ICovXFxuLS1cXG5uZXQvbmZjL2hjaS9jb3JlLmM9NDQ5PXN0YXRpYyBpbnQgaGNpX2Rldl9jb25uZWN0X2dhdGVzKHN0cnVjdCBuZmNfaGNpX2RldiAqaGRldiwgdTggZ2F0ZV9jb3VudCxcXG4tLVxcbm5ldC9uZmMvaGNpL2NvcmUuYy00NTMtXFx0d2hpbGUgKGdhdGVfY291bnQtLSkge1xcbm5ldC9uZmMvaGNpL2NvcmUuYzo0NTQ6XFx0XFx0ciA9IG5mY19oY2lfY29ubmVjdF9nYXRlKGhkZXYsIE5GQ19IQ0lfSE9TVF9DT05UUk9MTEVSX0lELFxcbm5ldC9uZmMvaGNpL2NvcmUuYy00NTUtXFx0XFx0XFx0XFx0XFx0IGdhdGVzLVxcdTAwM2VnYXRlLCBnYXRlcy1cXHUwMDNlcGlwZSk7XFxuLS1cXG5uZXQvbmZjL2hjaS9jb3JlLmM9NDY0PXN0YXRpYyBpbnQgaGNpX2Rldl9zZXNzaW9uX2luaXQoc3RydWN0IG5mY19oY2lfZGV2ICpoZGV2KVxcbi0tXFxubmV0L25mYy9oY2kvY29yZS5jLTQ2OC1cXG5uZXQvbmZjL2hjaS9jb3JlLmM6NDY5OlxcdGlmIChoZGV2LVxcdTAwM2Vpbml0X2RhdGEuZ2F0ZXNbMF0uZ2F0ZSAhPSBORkNfSENJX0FETUlOX0dBVEUpXFxubmV0L25mYy9oY2kvY29yZS5jLTQ3MC1cXHRcXHRyZXR1cm4gLUVQUk9UTztcXG5uZXQvbmZjL2hjaS9jb3JlLmMtNDcxLVxcbm5ldC9uZmMvaGNpL2NvcmUuYzo0NzI6XFx0ciA9IG5mY19oY2lfY29ubmVjdF9nYXRlKGhkZXYsIE5GQ19IQ0lfSE9TVF9DT05UUk9MTEVSX0lELFxcbm5ldC9uZmMvaGNpL2NvcmUuYy00NzMtXFx0XFx0XFx0XFx0IGhkZXYtXFx1MDAzZWluaXRfZGF0YS5nYXRlc1swXS5nYXRlLFxcbi0tXFxubmV0L25mYy9oY2kvY29yZS5jLTQ3Ny1cXG5uZXQvbmZjL2hjaS9jb3JlLmM6NDc4OlxcdHIgPSBuZmNfaGNpX2dldF9wYXJhbShoZGV2LCBORkNfSENJX0FETUlOX0dBVEUsXFxubmV0L25mYy9oY2kvY29yZS5jOjQ3OTpcXHRcXHRcXHQgICAgICBORkNfSENJX0FETUlOX1NFU1NJT05fSURFTlRJVFksIFxcdTAwMjZza2IpO1xcbm5ldC9uZmMvaGNpL2NvcmUuYy00ODAtXFx0aWYgKHIgXFx1MDAzYyAwKVxcbi0tXFxubmV0L25mYy9oY2kvY29yZS5jLTUwMi1cXG5uZXQvbmZjL2hjaS9jb3JlLmM6NTAzOlxcdFxcdHIgPSBuZmNfaGNpX3NldF9wYXJhbShoZGV2LCBORkNfSENJX0FETUlOX0dBVEUsXFxubmV0L25mYy9oY2kvY29yZS5jOjUwNDpcXHRcXHRcXHRcXHRORkNfSENJX0FETUlOX1NFU1NJT05fSURFTlRJVFksXFxubmV0L25mYy9oY2kvY29yZS5jLTUwNS1cXHRcXHRcXHRcXHRoZGV2LVxcdTAwM2Vpbml0X2RhdGEuc2Vzc2lvbl9pZCxcXG4tLVxcbm5ldC9uZmMvaGNpL2NvcmUuYz01MjA9c3RhdGljIGludCBoY2lfZGV2X3ZlcnNpb24oc3RydWN0IG5mY19oY2lfZGV2ICpoZGV2KVxcbi0tXFxubmV0L25mYy9oY2kvY29yZS5jLTUyNC1cXG5uZXQvbmZjL2hjaS9jb3JlLmM6NTI1OlxcdHIgPSBuZmNfaGNpX2dldF9wYXJhbShoZGV2LCBORkNfSENJX0lEX01HTVRfR0FURSxcXG5uZXQvbmZjL2hjaS9jb3JlLmM6NTI2OlxcdFxcdFxcdCAgICAgIE5GQ19IQ0lfSURfTUdNVF9WRVJTSU9OX1NXLCBcXHUwMDI2c2tiKTtcXG5uZXQvbmZjL2hjaS9jb3JlLmMtNTI3LVxcdGlmIChyID09IC1FT1BOT1RTVVBQKSB7XFxuLS1cXG5uZXQvbmZjL2hjaS9jb3JlLmMtNTQ1LVxcbm5ldC9uZmMvaGNpL2NvcmUuYzo1NDY6XFx0ciA9IG5mY19oY2lfZ2V0X3BhcmFtKGhkZXYsIE5GQ19IQ0lfSURfTUdNVF9HQVRFLFxcbm5ldC9uZmMvaGNpL2NvcmUuYzo1NDc6XFx0XFx0XFx0ICAgICAgTkZDX0hDSV9JRF9NR01UX1ZFUlNJT05fSFcsIFxcdTAwMjZza2IpO1xcbm5ldC9uZmMvaGNpL2NvcmUuYy01NDgtXFx0aWYgKHIgXFx1MDAzYyAwKVxcbi0tXFxubmV0L25mYy9oY2kvY29yZS5jPTU3OT1zdGF0aWMgaW50IGhjaV9kZXZfdXAoc3RydWN0IG5mY19kZXYgKm5mY19kZXYpXFxuLS1cXG5uZXQvbmZjL2hjaS9jb3JlLmMtNTk3LVxcbm5ldC9uZmMvaGNpL2NvcmUuYzo1OTg6XFx0ciA9IG5mY19oY2lfc2VuZF9ldmVudChoZGV2LCBORkNfSENJX1JGX1JFQURFUl9BX0dBVEUsXFxubmV0L25mYy9oY2kvY29yZS5jOjU5OTpcXHRcXHRcXHQgICAgICAgTkZDX0hDSV9FVlRfRU5EX09QRVJBVElPTiwgTlVMTCwgMCk7XFxubmV0L25mYy9oY2kvY29yZS5jLTYwMC1cXHRpZiAociBcXHUwMDNjIDApXFxuLS1cXG5uZXQvbmZjL2hjaS9jb3JlLmM9NjM5PXN0YXRpYyBpbnQgaGNpX3N0YXJ0X3BvbGwoc3RydWN0IG5mY19kZXYgKm5mY19kZXYsXFxuLS1cXG5uZXQvbmZjL2hjaS9jb3JlLmMtNjQ2LVxcdGVsc2VcXG5uZXQvbmZjL2hjaS9jb3JlLmM6NjQ3OlxcdFxcdHJldHVybiBuZmNfaGNpX3NlbmRfZXZlbnQoaGRldiwgTkZDX0hDSV9SRl9SRUFERVJfQV9HQVRFLFxcbm5ldC9uZmMvaGNpL2NvcmUuYzo2NDg6XFx0XFx0XFx0XFx0XFx0ICBORkNfSENJX0VWVF9SRUFERVJfUkVRVUVTVEVELFxcbm5ldC9uZmMvaGNpL2NvcmUuYy02NDktXFx0XFx0XFx0XFx0XFx0ICBOVUxMLCAwKTtcXG4tLVxcbm5ldC9uZmMvaGNpL2NvcmUuYz02NTI9c3RhdGljIHZvaWQgaGNpX3N0b3BfcG9sbChzdHJ1Y3QgbmZjX2RldiAqbmZjX2RldilcXG4tLVxcbm5ldC9uZmMvaGNpL2NvcmUuYy02NTgtXFx0ZWxzZVxcbm5ldC9uZmMvaGNpL2NvcmUuYzo2NTk6XFx0XFx0bmZjX2hjaV9zZW5kX2V2ZW50KGhkZXYsIE5GQ19IQ0lfUkZfUkVBREVSX0FfR0FURSxcXG5uZXQvbmZjL2hjaS9jb3JlLmM6NjYwOlxcdFxcdFxcdFxcdCAgIE5GQ19IQ0lfRVZUX0VORF9PUEVSQVRJT04sIE5VTEwsIDApO1xcbm5ldC9uZmMvaGNpL2NvcmUuYy02NjEtfVxcbi0tXFxubmV0L25mYy9oY2kvY29yZS5jPTcyMj1zdGF0aWMgaW50IGhjaV90cmFuc2NlaXZlKHN0cnVjdCBuZmNfZGV2ICpuZmNfZGV2LCBzdHJ1Y3QgbmZjX3RhcmdldCAqdGFyZ2V0LFxcbi0tXFxubmV0L25mYy9oY2kvY29yZS5jLTczMS1cXHRzd2l0Y2ggKHRhcmdldC1cXHUwMDNlaGNpX3JlYWRlcl9nYXRlKSB7XFxubmV0L25mYy9oY2kvY29yZS5jOjczMjpcXHRjYXNlIE5GQ19IQ0lfUkZfUkVBREVSX0FfR0FURTpcXG5uZXQvbmZjL2hjaS9jb3JlLmM6NzMzOlxcdGNhc2UgTkZDX0hDSV9SRl9SRUFERVJfQl9HQVRFOlxcbm5ldC9uZmMvaGNpL2NvcmUuYy03MzQtXFx0XFx0aWYgKGhkZXYtXFx1MDAzZW9wcy1cXHUwMDNlaW1fdHJhbnNjZWl2ZSkge1xcbi0tXFxubmV0L25mYy9oY2kvY29yZS5jLTc0Ny1cXHRcXHRyID0gbmZjX2hjaV9zZW5kX2NtZF9hc3luYyhoZGV2LCB0YXJnZXQtXFx1MDAzZWhjaV9yZWFkZXJfZ2F0ZSxcXG5uZXQvbmZjL2hjaS9jb3JlLmM6NzQ4OlxcdFxcdFxcdFxcdFxcdCAgIE5GQ19IQ0lfV1JfWENIR19EQVRBLCBza2ItXFx1MDAzZWRhdGEsXFxubmV0L25mYy9oY2kvY29yZS5jLTc0OS1cXHRcXHRcXHRcXHRcXHQgICBza2ItXFx1MDAzZWxlbiwgaGNpX3RyYW5zY2VpdmVfY2IsIGhkZXYpO1xcbi0tXFxubmV0L25mYy9oY2kvY29yZS5jPTg1ND1zdGF0aWMgdm9pZCBuZmNfaGNpX3JlY3ZfZnJvbV9sbGMoc3RydWN0IG5mY19oY2lfZGV2ICpoZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L25mYy9oY2kvY29yZS5jLTg2My1cXG5uZXQvbmZjL2hjaS9jb3JlLmM6ODY0OlxcdGlmICghcHNrYl9tYXlfcHVsbChza2IsIE5GQ19IQ0lfSENQX1BBQ0tFVF9IRUFERVJfTEVOKSkge1xcbm5ldC9uZmMvaGNpL2NvcmUuYy04NjUtXFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuLS1cXG5uZXQvbmZjL2hjaS9jb3JlLmMtODY5LVxcdHBhY2tldCA9IChzdHJ1Y3QgaGNwX3BhY2tldCAqKXNrYi1cXHUwMDNlZGF0YTtcXG5uZXQvbmZjL2hjaS9jb3JlLmM6ODcwOlxcdGlmICgocGFja2V0LVxcdTAwM2VoZWFkZXIgXFx1MDAyNiB+TkZDX0hDSV9GUkFHTUVOVCkgPT0gMCkge1xcbm5ldC9uZmMvaGNpL2NvcmUuYy04NzEtXFx0XFx0c2tiX3F1ZXVlX3RhaWwoXFx1MDAyNmhkZXYtXFx1MDAzZXJ4X2hjcF9mcmFncywgc2tiKTtcXG4tLVxcbm5ldC9uZmMvaGNpL2NvcmUuYy04NzYtXFx0aWYgKHNrYl9xdWV1ZV9sZW4oXFx1MDAyNmhkZXYtXFx1MDAzZXJ4X2hjcF9mcmFncykpIHtcXG5uZXQvbmZjL2hjaS9jb3JlLmM6ODc3OlxcdFxcdHBpcGUgPSBwYWNrZXQtXFx1MDAzZWhlYWRlciBcXHUwMDI2IE5GQ19IQ0lfRlJBR01FTlQ7XFxubmV0L25mYy9oY2kvY29yZS5jLTg3OC1cXHRcXHRza2JfcXVldWVfdGFpbChcXHUwMDI2aGRldi1cXHUwMDNlcnhfaGNwX2ZyYWdzLCBza2IpO1xcbi0tXFxubmV0L25mYy9oY2kvY29yZS5jLTg4Mi1cXHRcXHRcXHRtc2dfbGVuICs9IChmcmFnX3NrYi1cXHUwMDNlbGVuIC1cXG5uZXQvbmZjL2hjaS9jb3JlLmM6ODgzOlxcdFxcdFxcdFxcdCAgICBORkNfSENJX0hDUF9QQUNLRVRfSEVBREVSX0xFTik7XFxubmV0L25mYy9oY2kvY29yZS5jLTg4NC1cXHRcXHR9XFxubmV0L25mYy9oY2kvY29yZS5jLTg4NS1cXG5uZXQvbmZjL2hjaS9jb3JlLmM6ODg2OlxcdFxcdGhjcF9za2IgPSBuZmNfYWxsb2NfcmVjdl9za2IoTkZDX0hDSV9IQ1BfUEFDS0VUX0hFQURFUl9MRU4gK1xcbm5ldC9uZmMvaGNpL2NvcmUuYy04ODctXFx0XFx0XFx0XFx0XFx0ICAgICBtc2dfbGVuLCBHRlBfS0VSTkVMKTtcXG4tLVxcbm5ldC9uZmMvaGNpL2NvcmUuYy04OTUtXFx0XFx0c2tiX3F1ZXVlX3dhbGsoXFx1MDAyNmhkZXYtXFx1MDAzZXJ4X2hjcF9mcmFncywgZnJhZ19za2IpIHtcXG5uZXQvbmZjL2hjaS9jb3JlLmM6ODk2OlxcdFxcdFxcdG1zZ19sZW4gPSBmcmFnX3NrYi1cXHUwMDNlbGVuIC0gTkZDX0hDSV9IQ1BfUEFDS0VUX0hFQURFUl9MRU47XFxubmV0L25mYy9oY2kvY29yZS5jLTg5Ny1cXHRcXHRcXHRza2JfcHV0X2RhdGEoaGNwX3NrYixcXG5uZXQvbmZjL2hjaS9jb3JlLmM6ODk4OlxcdFxcdFxcdFxcdCAgICAgZnJhZ19za2ItXFx1MDAzZWRhdGEgKyBORkNfSENJX0hDUF9QQUNLRVRfSEVBREVSX0xFTixcXG5uZXQvbmZjL2hjaS9jb3JlLmMtODk5LVxcdFxcdFxcdFxcdCAgICAgbXNnX2xlbik7XFxuLS1cXG5uZXQvbmZjL2hjaS9jb3JlLmMtOTAzLVxcdH0gZWxzZSB7XFxubmV0L25mYy9oY2kvY29yZS5jOjkwNDpcXHRcXHRwYWNrZXQtXFx1MDAzZWhlYWRlciBcXHUwMDI2PSBORkNfSENJX0ZSQUdNRU5UO1xcbm5ldC9uZmMvaGNpL2NvcmUuYy05MDUtXFx0XFx0aGNwX3NrYiA9IHNrYjtcXG4tLVxcbm5ldC9uZmMvaGNpL2NvcmUuYy05MTEtXFx0ICovXFxubmV0L25mYy9oY2kvY29yZS5jOjkxMjpcXHRpZiAoIXBza2JfbWF5X3B1bGwoaGNwX3NrYiwgTkZDX0hDSV9IQ1BfSEVBREVSX0xFTikpIHtcXG5uZXQvbmZjL2hjaS9jb3JlLmMtOTEzLVxcdFxcdGtmcmVlX3NrYihoY3Bfc2tiKTtcXG4tLVxcbm5ldC9uZmMvaGNpL2NvcmUuYy05MTgtXFx0dHlwZSA9IEhDUF9NU0dfR0VUX1RZUEUocGFja2V0LVxcdTAwM2VtZXNzYWdlLmhlYWRlcik7XFxubmV0L25mYy9oY2kvY29yZS5jOjkxOTpcXHRpZiAodHlwZSA9PSBORkNfSENJX0hDUF9SRVNQT05TRSkge1xcbm5ldC9uZmMvaGNpL2NvcmUuYy05MjAtXFx0XFx0cGlwZSA9IHBhY2tldC1cXHUwMDNlaGVhZGVyO1xcbm5ldC9uZmMvaGNpL2NvcmUuYy05MjEtXFx0XFx0aW5zdHJ1Y3Rpb24gPSBIQ1BfTVNHX0dFVF9DTUQocGFja2V0LVxcdTAwM2VtZXNzYWdlLmhlYWRlcik7XFxubmV0L25mYy9oY2kvY29yZS5jOjkyMjpcXHRcXHRza2JfcHVsbChoY3Bfc2tiLCBORkNfSENJX0hDUF9QQUNLRVRfSEVBREVSX0xFTiArXFxubmV0L25mYy9oY2kvY29yZS5jOjkyMzpcXHRcXHRcXHQgTkZDX0hDSV9IQ1BfTUVTU0FHRV9IRUFERVJfTEVOKTtcXG5uZXQvbmZjL2hjaS9jb3JlLmMtOTI0LVxcdFxcdG5mY19oY2lfaGNwX21lc3NhZ2VfcngoaGRldiwgcGlwZSwgdHlwZSwgaW5zdHJ1Y3Rpb24sIGhjcF9za2IpO1xcbi0tXFxubmV0L25mYy9oY2kvaGNpLmg9NjA9c3RydWN0IGhjaV9hbGxfcGlwZV9jbGVhcmVkX25vdGkge1xcbi0tXFxubmV0L25mYy9oY2kvaGNpLmgtNjMtXFxubmV0L25mYy9oY2kvaGNpLmg6NjQ6I2RlZmluZSBORkNfSENJX0ZSQUdNRU5UXFx0MHg3Zlxcbm5ldC9uZmMvaGNpL2hjaS5oLTY1LVxcbi0tXFxubmV0L25mYy9oY2kvaGNpLmg9NzY9dm9pZCBuZmNfaGNpX2hjcF9tZXNzYWdlX3J4KHN0cnVjdCBuZmNfaGNpX2RldiAqaGRldiwgdTggcGlwZSwgdTggdHlwZSxcXG4tLVxcbm5ldC9uZmMvaGNpL2hjaS5oLTc5LS8qIEhDUCBoZWFkZXJzICovXFxubmV0L25mYy9oY2kvaGNpLmg6ODA6I2RlZmluZSBORkNfSENJX0hDUF9QQUNLRVRfSEVBREVSX0xFTlxcdDFcXG5uZXQvbmZjL2hjaS9oY2kuaDo4MTojZGVmaW5lIE5GQ19IQ0lfSENQX01FU1NBR0VfSEVBREVSX0xFTlxcdDFcXG5uZXQvbmZjL2hjaS9oY2kuaDo4MjojZGVmaW5lIE5GQ19IQ0lfSENQX0hFQURFUl9MRU5cXHRcXHQyXFxubmV0L25mYy9oY2kvaGNpLmgtODMtXFxubmV0L25mYy9oY2kvaGNpLmgtODQtLyogSENQIHR5cGVzICovXFxubmV0L25mYy9oY2kvaGNpLmg6ODU6I2RlZmluZSBORkNfSENJX0hDUF9DT01NQU5EXFx0MHgwMFxcbm5ldC9uZmMvaGNpL2hjaS5oOjg2OiNkZWZpbmUgTkZDX0hDSV9IQ1BfRVZFTlRcXHQweDAxXFxubmV0L25mYy9oY2kvaGNpLmg6ODc6I2RlZmluZSBORkNfSENJX0hDUF9SRVNQT05TRVxcdDB4MDJcXG5uZXQvbmZjL2hjaS9oY2kuaC04OC1cXG5uZXQvbmZjL2hjaS9oY2kuaC04OS0vKiBHZW5lcmljIGNvbW1hbmRzICovXFxubmV0L25mYy9oY2kvaGNpLmg6OTA6I2RlZmluZSBORkNfSENJX0FOWV9TRVRfUEFSQU1FVEVSXFx0MHgwMVxcbm5ldC9uZmMvaGNpL2hjaS5oOjkxOiNkZWZpbmUgTkZDX0hDSV9BTllfR0VUX1BBUkFNRVRFUlxcdDB4MDJcXG5uZXQvbmZjL2hjaS9oY2kuaDo5MjojZGVmaW5lIE5GQ19IQ0lfQU5ZX09QRU5fUElQRVxcdFxcdDB4MDNcXG5uZXQvbmZjL2hjaS9oY2kuaDo5MzojZGVmaW5lIE5GQ19IQ0lfQU5ZX0NMT1NFX1BJUEVcXHRcXHQweDA0XFxubmV0L25mYy9oY2kvaGNpLmgtOTQtXFxubmV0L25mYy9oY2kvaGNpLmgtOTUtLyogUmVhZGVyIFJGIGNvbW1hbmRzICovXFxubmV0L25mYy9oY2kvaGNpLmg6OTY6I2RlZmluZSBORkNfSENJX1dSX1hDSEdfREFUQVxcdFxcdDB4MTBcXG5uZXQvbmZjL2hjaS9oY2kuaC05Ny1cXG5uZXQvbmZjL2hjaS9oY2kuaC05OC0vKiBBZG1pbiBjb21tYW5kcyAqL1xcbm5ldC9uZmMvaGNpL2hjaS5oOjk5OiNkZWZpbmUgTkZDX0hDSV9BRE1fQ1JFQVRFX1BJUEVcXHRcXHRcXHQweDEwXFxubmV0L25mYy9oY2kvaGNpLmg6MTAwOiNkZWZpbmUgTkZDX0hDSV9BRE1fREVMRVRFX1BJUEVcXHRcXHRcXHQweDExXFxubmV0L25mYy9oY2kvaGNpLmg6MTAxOiNkZWZpbmUgTkZDX0hDSV9BRE1fTk9USUZZX1BJUEVfQ1JFQVRFRFxcdFxcdDB4MTJcXG5uZXQvbmZjL2hjaS9oY2kuaDoxMDI6I2RlZmluZSBORkNfSENJX0FETV9OT1RJRllfUElQRV9ERUxFVEVEXFx0XFx0MHgxM1xcbm5ldC9uZmMvaGNpL2hjaS5oOjEwMzojZGVmaW5lIE5GQ19IQ0lfQURNX0NMRUFSX0FMTF9QSVBFXFx0XFx0MHgxNFxcbm5ldC9uZmMvaGNpL2hjaS5oOjEwNDojZGVmaW5lIE5GQ19IQ0lfQURNX05PVElGWV9BTExfUElQRV9DTEVBUkVEXFx0MHgxNVxcbm5ldC9uZmMvaGNpL2hjaS5oLTEwNS1cXG5uZXQvbmZjL2hjaS9oY2kuaC0xMDYtLyogR2VuZXJpYyByZXNwb25zZXMgKi9cXG5uZXQvbmZjL2hjaS9oY2kuaDoxMDc6I2RlZmluZSBORkNfSENJX0FOWV9PS1xcdFxcdFxcdFxcdDB4MDBcXG5uZXQvbmZjL2hjaS9oY2kuaDoxMDg6I2RlZmluZSBORkNfSENJX0FOWV9FX05PVF9DT05ORUNURURcXHRcXHQweDAxXFxubmV0L25mYy9oY2kvaGNpLmg6MTA5OiNkZWZpbmUgTkZDX0hDSV9BTllfRV9DTURfUEFSX1VOS05PV05cXHRcXHQweDAyXFxubmV0L25mYy9oY2kvaGNpLmg6MTEwOiNkZWZpbmUgTkZDX0hDSV9BTllfRV9OT0tcXHRcXHRcXHQweDAzXFxubmV0L25mYy9oY2kvaGNpLmg6MTExOiNkZWZpbmUgTkZDX0hDSV9BTllfRV9QSVBFU19GVUxMXFx0XFx0MHgwNFxcbm5ldC9uZmMvaGNpL2hjaS5oOjExMjojZGVmaW5lIE5GQ19IQ0lfQU5ZX0VfUkVHX1BBUl9VTktOT1dOXFx0XFx0MHgwNVxcbm5ldC9uZmMvaGNpL2hjaS5oOjExMzojZGVmaW5lIE5GQ19IQ0lfQU5ZX0VfUElQRV9OT1RfT1BFTkVEXFx0XFx0MHgwNlxcbm5ldC9uZmMvaGNpL2hjaS5oOjExNDojZGVmaW5lIE5GQ19IQ0lfQU5ZX0VfQ01EX05PVF9TVVBQT1JURURcXHRcXHQweDA3XFxubmV0L25mYy9oY2kvaGNpLmg6MTE1OiNkZWZpbmUgTkZDX0hDSV9BTllfRV9JTkhJQklURURcXHRcXHRcXHQweDA4XFxubmV0L25mYy9oY2kvaGNpLmg6MTE2OiNkZWZpbmUgTkZDX0hDSV9BTllfRV9USU1FT1VUXFx0XFx0XFx0MHgwOVxcbm5ldC9uZmMvaGNpL2hjaS5oOjExNzojZGVmaW5lIE5GQ19IQ0lfQU5ZX0VfUkVHX0FDQ0VTU19ERU5JRURcXHRcXHQweDBhXFxubmV0L25mYy9oY2kvaGNpLmg6MTE4OiNkZWZpbmUgTkZDX0hDSV9BTllfRV9QSVBFX0FDQ0VTU19ERU5JRURcXHQweDBiXFxubmV0L25mYy9oY2kvaGNpLmgtMTE5LVxcbi0tXFxubmV0L25mYy9oY2kvaGNwLmM9MjE9aW50IG5mY19oY2lfaGNwX21lc3NhZ2VfdHgoc3RydWN0IG5mY19oY2lfZGV2ICpoZGV2LCB1OCBwaXBlLFxcbi0tXFxubmV0L25mYy9oY2kvaGNwLmMtMzgtXFx0c2tiX3F1ZXVlX2hlYWRfaW5pdChcXHUwMDI2Y21kLVxcdTAwM2Vtc2dfZnJhZ3MpO1xcbm5ldC9uZmMvaGNpL2hjcC5jOjM5OlxcdGNtZC1cXHUwMDNld2FpdF9yZXNwb25zZSA9ICh0eXBlID09IE5GQ19IQ0lfSENQX0NPTU1BTkQpID8gdHJ1ZSA6IGZhbHNlO1xcbm5ldC9uZmMvaGNpL2hjcC5jLTQwLVxcdGNtZC1cXHUwMDNlY2IgPSBjYjtcXG4tLVxcbm5ldC9uZmMvaGNpL2hjcC5jLTQ5LVxcbm5ldC9uZmMvaGNpL2hjcC5jOjUwOlxcdFxcdGlmIChORkNfSENJX0hDUF9QQUNLRVRfSEVBREVSX0xFTiArIGhjaV9sZW4gXFx1MDAzYz1cXG5uZXQvbmZjL2hjaS9oY3AuYy01MS1cXHRcXHQgICAgaGRldi1cXHUwMDNlbWF4X2RhdGFfbGlua19wYXlsb2FkKVxcbi0tXFxubmV0L25mYy9oY2kvaGNwLmMtNTQtXFx0XFx0XFx0ZGF0YV9saW5rX2xlbiA9IGhkZXYtXFx1MDAzZW1heF9kYXRhX2xpbmtfcGF5bG9hZCAtXFxubmV0L25mYy9oY2kvaGNwLmM6NTU6XFx0XFx0XFx0XFx0XFx0TkZDX0hDSV9IQ1BfUEFDS0VUX0hFQURFUl9MRU47XFxubmV0L25mYy9oY2kvaGNwLmMtNTYtXFxubmV0L25mYy9oY2kvaGNwLmM6NTc6XFx0XFx0c2tiX2xlbiA9IG5kZXYtXFx1MDAzZXR4X2hlYWRyb29tICsgTkZDX0hDSV9IQ1BfUEFDS0VUX0hFQURFUl9MRU4gK1xcbm5ldC9uZmMvaGNpL2hjcC5jLTU4LVxcdFxcdFxcdCAgZGF0YV9saW5rX2xlbiArIG5kZXYtXFx1MDAzZXR4X3RhaWxyb29tO1xcbi0tXFxubmV0L25mYy9oY2kvaGNwLmMtNjctXFxubmV0L25mYy9oY2kvaGNwLmM6Njg6XFx0XFx0c2tiX3B1dChza2IsIE5GQ19IQ0lfSENQX1BBQ0tFVF9IRUFERVJfTEVOICsgZGF0YV9saW5rX2xlbik7XFxubmV0L25mYy9oY2kvaGNwLmMtNjktXFxuLS1cXG5uZXQvbmZjL2hjaS9oY3AuYy04NS1cXHRcXHRpZiAoaGNpX2xlbiA9PSAwKVxcbm5ldC9uZmMvaGNpL2hjcC5jOjg2OlxcdFxcdFxcdHBhY2tldC1cXHUwMDNlaGVhZGVyIHw9IH5ORkNfSENJX0ZSQUdNRU5UO1xcbm5ldC9uZmMvaGNpL2hjcC5jLTg3LVxcbi0tXFxubmV0L25mYy9oY2kvaGNwLmM9MTE3PXZvaWQgbmZjX2hjaV9oY3BfbWVzc2FnZV9yeChzdHJ1Y3QgbmZjX2hjaV9kZXYgKmhkZXYsIHU4IHBpcGUsIHU4IHR5cGUsXFxuLS1cXG5uZXQvbmZjL2hjaS9oY3AuYy0xMjAtXFx0c3dpdGNoICh0eXBlKSB7XFxubmV0L25mYy9oY2kvaGNwLmM6MTIxOlxcdGNhc2UgTkZDX0hDSV9IQ1BfUkVTUE9OU0U6XFxubmV0L25mYy9oY2kvaGNwLmMtMTIyLVxcdFxcdG5mY19oY2lfcmVzcF9yZWNlaXZlZChoZGV2LCBpbnN0cnVjdGlvbiwgc2tiKTtcXG5uZXQvbmZjL2hjaS9oY3AuYy0xMjMtXFx0XFx0YnJlYWs7XFxubmV0L25mYy9oY2kvaGNwLmM6MTI0OlxcdGNhc2UgTkZDX0hDSV9IQ1BfQ09NTUFORDpcXG5uZXQvbmZjL2hjaS9oY3AuYy0xMjUtXFx0XFx0bmZjX2hjaV9jbWRfcmVjZWl2ZWQoaGRldiwgcGlwZSwgaW5zdHJ1Y3Rpb24sIHNrYik7XFxubmV0L25mYy9oY2kvaGNwLmMtMTI2LVxcdFxcdGJyZWFrO1xcbm5ldC9uZmMvaGNpL2hjcC5jOjEyNzpcXHRjYXNlIE5GQ19IQ0lfSENQX0VWRU5UOlxcbm5ldC9uZmMvaGNpL2hjcC5jLTEyOC1cXHRcXHRuZmNfaGNpX2V2ZW50X3JlY2VpdmVkKGhkZXYsIHBpcGUsIGluc3RydWN0aW9uLCBza2IpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQwOToyNjozMi4zMTkxMjMyNThaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDk5NzMwMDIzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRoZSBleHBlcnQ6XG5cbioqTmF2aWdhdGluZyB0aGUgTkZDIFN1YnN5c3RlbXMqKlxuXG5Pa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJIG5lZWQgdG8gY2xhcmlmeSBzb21ldGhpbmcgaW4gbXkgaGVhZC4gSSBpbml0aWFsbHkganVtcGVkIHRvIHRoZSBjb25jbHVzaW9uIHRoYXQgYE5GQ19IQ0lgIGFuZCBgTkZDX05DSWAgd2VyZSB0aGUgc2FtZSB0aGluZywgYnV0IGl0IGp1c3QgaGl0IG1lIOKAkyB0aGV5J3JlIGRpc3RpbmN0IHN1YnN5c3RlbXMuIFRoZSBwYXRjaCBJJ20gZXhhbWluaW5nIGlzIHNwZWNpZmljYWxseSB0b3VjaGluZyBgbmV0L25mYy9uY2kvaGNpLmNgLCBhbmQgdGhhdCBsaXZlcyBmaXJtbHkgd2l0aGluIHRoZSBgTkZDX05DSWAgcmVhbG0uIFRvIGNvbmZpcm0gdGhpcyBpc24ndCBqdXN0IGEgbWVudGFsIG1vZGVsIEkndmUgbWFkZSB1cCwgbGV0IG1lIGRvdWJsZS1jaGVjayB0aGUgYG5ldC9uZmMvbmNpL01ha2VmaWxlYCBhbmQgZW5zdXJlIG15IGFzc3VtcHRpb25zIGFyZSBzb3VuZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzE3MDYsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQwOToyNjozNy4zMTY0MjY1NzNaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk0NzA2OTgxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImhjaVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmZjL25jaS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25mYy9uY2kvTWFrZWZpbGU9Nj1vYmotJChDT05GSUdfTkZDX05DSSkgKz0gbmNpLm9cXG5uZXQvbmZjL25jaS9NYWtlZmlsZS03LVxcbm5ldC9uZmMvbmNpL01ha2VmaWxlOjg6bmNpLW9ianMgOj0gY29yZS5vIGRhdGEubyBsaWIubyBudGYubyByc3AubyBoY2kub1xcbm5ldC9uZmMvbmNpL01ha2VmaWxlLTktXFxuLS1cXG5uZXQvbmZjL25jaS9jb3JlLmMtMTEtICogIEFja25vd2xlZGdlbWVudHM6XFxubmV0L25mYy9uY2kvY29yZS5jOjEyOiAqICBUaGlzIGZpbGUgaXMgYmFzZWQgb24gaGNpX2NvcmUuYywgd2hpY2ggd2FzIHdyaXR0ZW5cXG5uZXQvbmZjL25jaS9jb3JlLmMtMTMtICogIGJ5IE1heGltIEtyYXNueWFuc2t5Llxcbi0tXFxubmV0L25mYy9uY2kvY29yZS5jPTEyMDk9c3RydWN0IG5jaV9kZXYgKm5jaV9hbGxvY2F0ZV9kZXZpY2UoY29uc3Qgc3RydWN0IG5jaV9vcHMgKm9wcyxcXG4tLVxcbm5ldC9uZmMvbmNpL2NvcmUuYy0xMjQ1LVxcbm5ldC9uZmMvbmNpL2NvcmUuYzoxMjQ2OlxcdG5kZXYtXFx1MDAzZWhjaV9kZXYgPSBuY2lfaGNpX2FsbG9jYXRlKG5kZXYpO1xcbm5ldC9uZmMvbmNpL2NvcmUuYzoxMjQ3OlxcdGlmICghbmRldi1cXHUwMDNlaGNpX2RldilcXG5uZXQvbmZjL25jaS9jb3JlLmMtMTI0OC1cXHRcXHRnb3RvIGZyZWVfbmZjO1xcbi0tXFxubmV0L25mYy9uY2kvY29yZS5jPTEyNjc9dm9pZCBuY2lfZnJlZV9kZXZpY2Uoc3RydWN0IG5jaV9kZXYgKm5kZXYpXFxuLS1cXG5uZXQvbmZjL25jaS9jb3JlLmMtMTI2OS1cXHRuZmNfZnJlZV9kZXZpY2UobmRldi1cXHUwMDNlbmZjX2Rldik7XFxubmV0L25mYy9uY2kvY29yZS5jOjEyNzA6XFx0bmNpX2hjaV9kZWFsbG9jYXRlKG5kZXYpO1xcbm5ldC9uZmMvbmNpL2NvcmUuYy0xMjcxLVxcbi0tXFxubmV0L25mYy9uY2kvY29yZS5jPTEzNTI9dm9pZCBuY2lfdW5yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IG5jaV9kZXYgKm5kZXYpXFxuLS1cXG5uZXQvbmZjL25jaS9jb3JlLmMtMTM3NC1cXHRcXHRcXHRuZGV2LVxcdTAwM2VyZl9jb25uX2luZm8gPSBOVUxMO1xcbm5ldC9uZmMvbmNpL2NvcmUuYzoxMzc1OlxcdFxcdGlmIChjb25uX2luZm8gPT0gbmRldi1cXHUwMDNlaGNpX2Rldi1cXHUwMDNlY29ubl9pbmZvKVxcbm5ldC9uZmMvbmNpL2NvcmUuYzoxMzc2OlxcdFxcdFxcdG5kZXYtXFx1MDAzZWhjaV9kZXYtXFx1MDAzZWNvbm5faW5mbyA9IE5VTEw7XFxubmV0L25mYy9uY2kvY29yZS5jLTEzNzctXFx0XFx0LyogY29ubl9pbmZvIGlzIGFsbG9jYXRlZCB3aXRoIGRldm1fa3phbGxvYyAqL1xcbi0tXFxubmV0L25mYy9uY2kvaGNpLmM9MTk9c3RydWN0IG5jaV9kYXRhIHtcXG4tLVxcbm5ldC9uZmMvbmNpL2hjaS5jLTI2LVxcbm5ldC9uZmMvbmNpL2hjaS5jOjI3OnN0cnVjdCBuY2lfaGNpX2NyZWF0ZV9waXBlX3BhcmFtcyB7XFxubmV0L25mYy9uY2kvaGNpLmMtMjgtXFx0dTggc3JjX2dhdGU7XFxuLS1cXG5uZXQvbmZjL25jaS9oY2kuYy0zMi1cXG5uZXQvbmZjL25jaS9oY2kuYzozMzpzdHJ1Y3QgbmNpX2hjaV9jcmVhdGVfcGlwZV9yZXNwIHtcXG5uZXQvbmZjL25jaS9oY2kuYy0zNC1cXHR1OCBzcmNfaG9zdDtcXG4tLVxcbm5ldC9uZmMvbmNpL2hjaS5jLTQwLVxcbm5ldC9uZmMvbmNpL2hjaS5jOjQxOnN0cnVjdCBuY2lfaGNpX2RlbGV0ZV9waXBlX25vdGkge1xcbm5ldC9uZmMvbmNpL2hjaS5jLTQyLVxcdHU4IHBpcGU7XFxuLS1cXG5uZXQvbmZjL25jaS9oY2kuYy00NC1cXG5uZXQvbmZjL25jaS9oY2kuYzo0NTpzdHJ1Y3QgbmNpX2hjaV9hbGxfcGlwZV9jbGVhcmVkX25vdGkge1xcbm5ldC9uZmMvbmNpL2hjaS5jLTQ2LVxcdHU4IGhvc3Q7XFxuLS1cXG5uZXQvbmZjL25jaS9oY2kuYz01ND1zdHJ1Y3QgbmNpX2hjcF9wYWNrZXQge1xcbi0tXFxubmV0L25mYy9uY2kvaGNpLmMtOTUtXFxubmV0L25mYy9uY2kvaGNpLmM6OTY6c3RhdGljIGludCBuY2lfaGNpX3Jlc3VsdF90b19lcnJubyh1OCByZXN1bHQpXFxubmV0L25mYy9uY2kvaGNpLmMtOTcte1xcbi0tXFxubmV0L25mYy9uY2kvaGNpLmMtMTEwLS8qIEhDSSBjb3JlICovXFxubmV0L25mYy9uY2kvaGNpLmM6MTExOnN0YXRpYyB2b2lkIG5jaV9oY2lfcmVzZXRfcGlwZXMoc3RydWN0IG5jaV9oY2lfZGV2ICpoZGV2KVxcbm5ldC9uZmMvbmNpL2hjaS5jLTExMi17XFxuLS1cXG5uZXQvbmZjL25jaS9oY2kuYy0xMjEtXFxubmV0L25mYy9uY2kvaGNpLmM6MTIyOnN0YXRpYyB2b2lkIG5jaV9oY2lfcmVzZXRfcGlwZXNfcGVyX2hvc3Qoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHU4IGhvc3QpXFxubmV0L25mYy9uY2kvaGNpLmMtMTIzLXtcXG4tLVxcbm5ldC9uZmMvbmNpL2hjaS5jLTEyNi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgTkNJX0hDSV9NQVhfUElQRVM7IGkrKykge1xcbm5ldC9uZmMvbmNpL2hjaS5jOjEyNzpcXHRcXHRpZiAobmRldi1cXHUwMDNlaGNpX2Rldi1cXHUwMDNlcGlwZXNbaV0uaG9zdCA9PSBob3N0KSB7XFxubmV0L25mYy9uY2kvaGNpLmM6MTI4OlxcdFxcdFxcdG5kZXYtXFx1MDAzZWhjaV9kZXYtXFx1MDAzZXBpcGVzW2ldLmdhdGUgPSBOQ0lfSENJX0lOVkFMSURfR0FURTtcXG5uZXQvbmZjL25jaS9oY2kuYzoxMjk6XFx0XFx0XFx0bmRldi1cXHUwMDNlaGNpX2Rldi1cXHUwMDNlcGlwZXNbaV0uaG9zdCA9IE5DSV9IQ0lfSU5WQUxJRF9IT1NUO1xcbm5ldC9uZmMvbmNpL2hjaS5jLTEzMC1cXHRcXHR9XFxuLS1cXG5uZXQvbmZjL25jaS9oY2kuYy0xNDEtICovXFxubmV0L25mYy9uY2kvaGNpLmM6MTQyOnN0YXRpYyBpbnQgbmNpX2hjaV9zZW5kX2RhdGEoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHU4IHBpcGUsXFxubmV0L25mYy9uY2kvaGNpLmMtMTQzLVxcdFxcdFxcdCAgICAgY29uc3QgdTggZGF0YV90eXBlLCBjb25zdCB1OCAqZGF0YSxcXG4tLVxcbm5ldC9uZmMvbmNpL2hjaS5jLTE1My1cXHRzcGluX2xvY2tfYmgoXFx1MDAyNm5kZXYtXFx1MDAzZWNvbm5faW5mb19sb2NrKTtcXG5uZXQvbmZjL25jaS9oY2kuYzoxNTQ6XFx0Y29ubl9pbmZvID0gbmRldi1cXHUwMDNlaGNpX2Rldi1cXHUwMDNlY29ubl9pbmZvO1xcbm5ldC9uZmMvbmNpL2hjaS5jLTE1NS1cXHRpZiAoIWNvbm5faW5mbykge1xcbi0tXFxubmV0L25mYy9uY2kvaGNpLmMtMjA0LVxcbm5ldC9uZmMvbmNpL2hjaS5jOjIwNTpzdGF0aWMgdm9pZCBuY2lfaGNpX3NlbmRfZGF0YV9yZXEoc3RydWN0IG5jaV9kZXYgKm5kZXYsIGNvbnN0IHZvaWQgKm9wdClcXG5uZXQvbmZjL25jaS9oY2kuYy0yMDYte1xcbi0tXFxubmV0L25mYy9uY2kvaGNpLmMtMjA4LVxcbm5ldC9uZmMvbmNpL2hjaS5jOjIwOTpcXHRuY2lfaGNpX3NlbmRfZGF0YShuZGV2LCBkYXRhLVxcdTAwM2VwaXBlLCBkYXRhLVxcdTAwM2VjbWQsXFxubmV0L25mYy9uY2kvaGNpLmMtMjEwLVxcdFxcdFxcdCAgZGF0YS1cXHUwMDNlZGF0YSwgZGF0YS1cXHUwMDNlZGF0YV9sZW4pO1xcbi0tXFxubmV0L25mYy9uY2kvaGNpLmMtMjEyLVxcbm5ldC9uZmMvbmNpL2hjaS5jOjIxMzppbnQgbmNpX2hjaV9zZW5kX2V2ZW50KHN0cnVjdCBuY2lfZGV2ICpuZGV2LCB1OCBnYXRlLCB1OCBldmVudCxcXG5uZXQvbmZjL25jaS9oY2kuYy0yMTQtXFx0XFx0ICAgICAgIGNvbnN0IHU4ICpwYXJhbSwgc2l6ZV90IHBhcmFtX2xlbilcXG5uZXQvbmZjL25jaS9oY2kuYy0yMTUte1xcbm5ldC9uZmMvbmNpL2hjaS5jOjIxNjpcXHR1OCBwaXBlID0gbmRldi1cXHUwMDNlaGNpX2Rldi1cXHUwMDNlZ2F0ZTJwaXBlW2dhdGVdO1xcbm5ldC9uZmMvbmNpL2hjaS5jLTIxNy1cXG4tLVxcbm5ldC9uZmMvbmNpL2hjaS5jLTIyMC1cXG5uZXQvbmZjL25jaS9oY2kuYzoyMjE6XFx0cmV0dXJuIG5jaV9oY2lfc2VuZF9kYXRhKG5kZXYsIHBpcGUsXFxubmV0L25mYy9uY2kvaGNpLmMtMjIyLVxcdFxcdFxcdE5DSV9IQ1BfSEVBREVSKE5DSV9IQ0lfSENQX0VWRU5ULCBldmVudCksXFxuLS1cXG5uZXQvbmZjL25jaS9oY2kuYy0yMjQtfVxcbm5ldC9uZmMvbmNpL2hjaS5jOjIyNTpFWFBPUlRfU1lNQk9MKG5jaV9oY2lfc2VuZF9ldmVudCk7XFxubmV0L25mYy9uY2kvaGNpLmMtMjI2LVxcbm5ldC9uZmMvbmNpL2hjaS5jOjIyNzppbnQgbmNpX2hjaV9zZW5kX2NtZChzdHJ1Y3QgbmNpX2RldiAqbmRldiwgdTggZ2F0ZSwgdTggY21kLFxcbm5ldC9uZmMvbmNpL2hjaS5jLTIyOC1cXHRcXHQgICAgIGNvbnN0IHU4ICpwYXJhbSwgc2l6ZV90IHBhcmFtX2xlbixcXG4tLVxcbm5ldC9uZmMvbmNpL2hjaS5jLTIzNS1cXHRpbnQgcjtcXG5uZXQvbmZjL25jaS9oY2kuYzoyMzY6XFx0dTggcGlwZSA9IG5kZXYtXFx1MDAzZWhjaV9kZXYtXFx1MDAzZWdhdGUycGlwZVtnYXRlXTtcXG5uZXQvbmZjL25jaS9oY2kuYy0yMzctXFxuLS1cXG5uZXQvbmZjL25jaS9oY2kuYy0yNDEtXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZuZGV2LVxcdTAwM2Vjb25uX2luZm9fbG9jayk7XFxubmV0L25mYy9uY2kvaGNpLmM6MjQyOlxcdGNvbm5faW5mbyA9IG5kZXYtXFx1MDAzZWhjaV9kZXYtXFx1MDAzZWNvbm5faW5mbztcXG5uZXQvbmZjL25jaS9oY2kuYy0yNDMtXFx0aWYgKCFjb25uX2luZm8pIHtcXG4tLVxcbm5ldC9uZmMvbmNpL2hjaS5jLTI1NC1cXG5uZXQvbmZjL25jaS9oY2kuYzoyNTU6XFx0ciA9IG5jaV9yZXF1ZXN0KG5kZXYsIG5jaV9oY2lfc2VuZF9kYXRhX3JlcSwgXFx1MDAyNmRhdGEsXFxubmV0L25mYy9uY2kvaGNpLmMtMjU2LVxcdFxcdFxcdG1zZWNzX3RvX2ppZmZpZXMoTkNJX0RBVEFfVElNRU9VVCkpO1xcbi0tXFxubmV0L25mYy9uY2kvaGNpLmMtMjU4LVxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2bmRldi1cXHUwMDNlY29ubl9pbmZvX2xvY2spO1xcbm5ldC9uZmMvbmNpL2hjaS5jOjI1OTpcXHRcXHRjb25uX2luZm8gPSBuZGV2LVxcdTAwM2VoY2lfZGV2LVxcdTAwM2Vjb25uX2luZm87XFxubmV0L25mYy9uY2kvaGNpLmMtMjYwLVxcdFxcdHJ4X3NrYiA9IGNvbm5faW5mbyA/IGNvbm5faW5mby1cXHUwMDNlcnhfc2tiIDogTlVMTDtcXG4tLVxcbm5ldC9uZmMvbmNpL2hjaS5jLTI2Ni1cXHRcXHRtZXNzYWdlID0gKHN0cnVjdCBuY2lfaGNwX21lc3NhZ2UgKilyeF9za2ItXFx1MDAzZWRhdGE7XFxubmV0L25mYy9uY2kvaGNpLmM6MjY3OlxcdFxcdHIgPSBuY2lfaGNpX3Jlc3VsdF90b19lcnJubyhcXG5uZXQvbmZjL25jaS9oY2kuYy0yNjgtXFx0XFx0XFx0TkNJX0hDUF9NU0dfR0VUX0NNRChtZXNzYWdlLVxcdTAwM2VoZWFkZXIpKTtcXG4tLVxcbm5ldC9uZmMvbmNpL2hjaS5jLTI3Ny19XFxubmV0L25mYy9uY2kvaGNpLmM6Mjc4OkVYUE9SVF9TWU1CT0wobmNpX2hjaV9zZW5kX2NtZCk7XFxubmV0L25mYy9uY2kvaGNpLmMtMjc5LVxcbm5ldC9uZmMvbmNpL2hjaS5jOjI4MDppbnQgbmNpX2hjaV9jbGVhcl9hbGxfcGlwZXMoc3RydWN0IG5jaV9kZXYgKm5kZXYpXFxubmV0L25mYy9uY2kvaGNpLmMtMjgxLXtcXG4tLVxcbm5ldC9uZmMvbmNpL2hjaS5jLTI4My1cXG5uZXQvbmZjL25jaS9oY2kuYzoyODQ6XFx0ciA9IG5jaV9oY2lfc2VuZF9jbWQobmRldiwgTkNJX0hDSV9BRE1JTl9HQVRFLFxcbm5ldC9uZmMvbmNpL2hjaS5jLTI4NS1cXHRcXHRcXHQgICAgIE5DSV9IQ0lfQURNX0NMRUFSX0FMTF9QSVBFLCBOVUxMLCAwLCBOVUxMKTtcXG4tLVxcbm5ldC9uZmMvbmNpL2hjaS5jLTI4OC1cXG5uZXQvbmZjL25jaS9oY2kuYzoyODk6XFx0bmNpX2hjaV9yZXNldF9waXBlcyhuZGV2LVxcdTAwM2VoY2lfZGV2KTtcXG5uZXQvbmZjL25jaS9oY2kuYy0yOTAtXFx0cmV0dXJuIHI7XFxubmV0L25mYy9uY2kvaGNpLmMtMjkxLX1cXG5uZXQvbmZjL25jaS9oY2kuYzoyOTI6RVhQT1JUX1NZTUJPTChuY2lfaGNpX2NsZWFyX2FsbF9waXBlcyk7XFxubmV0L25mYy9uY2kvaGNpLmMtMjkzLVxcbm5ldC9uZmMvbmNpL2hjaS5jOjI5NDpzdGF0aWMgdm9pZCBuY2lfaGNpX2V2ZW50X3JlY2VpdmVkKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCB1OCBwaXBlLFxcbm5ldC9uZmMvbmNpL2hjaS5jLTI5NS1cXHRcXHRcXHRcXHQgICB1OCBldmVudCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvbmZjL25jaS9oY2kuYy0yOTYte1xcbm5ldC9uZmMvbmNpL2hjaS5jOjI5NzpcXHRpZiAobmRldi1cXHUwMDNlb3BzLVxcdTAwM2VoY2lfZXZlbnRfcmVjZWl2ZWQpXFxubmV0L25mYy9uY2kvaGNpLmM6Mjk4OlxcdFxcdG5kZXYtXFx1MDAzZW9wcy1cXHUwMDNlaGNpX2V2ZW50X3JlY2VpdmVkKG5kZXYsIHBpcGUsIGV2ZW50LCBza2IpO1xcbm5ldC9uZmMvbmNpL2hjaS5jLTI5OS19XFxubmV0L25mYy9uY2kvaGNpLmMtMzAwLVxcbm5ldC9uZmMvbmNpL2hjaS5jOjMwMTpzdGF0aWMgdm9pZCBuY2lfaGNpX2NtZF9yZWNlaXZlZChzdHJ1Y3QgbmNpX2RldiAqbmRldiwgdTggcGlwZSxcXG5uZXQvbmZjL25jaS9oY2kuYy0zMDItXFx0XFx0XFx0XFx0IHU4IGNtZCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvbmZjL25jaS9oY2kuYy0zMDMte1xcbm5ldC9uZmMvbmNpL2hjaS5jOjMwNDpcXHR1OCBnYXRlID0gbmRldi1cXHUwMDNlaGNpX2Rldi1cXHUwMDNlcGlwZXNbcGlwZV0uZ2F0ZTtcXG5uZXQvbmZjL25jaS9oY2kuYy0zMDUtXFx0dTggc3RhdHVzID0gTkNJX0hDSV9BTllfT0sgfCB+TkNJX0hDSV9GUkFHTUVOVDtcXG5uZXQvbmZjL25jaS9oY2kuYy0zMDYtXFx0dTggZGVzdF9nYXRlLCBuZXdfcGlwZTtcXG5uZXQvbmZjL25jaS9oY2kuYzozMDc6XFx0c3RydWN0IG5jaV9oY2lfY3JlYXRlX3BpcGVfcmVzcCAqY3JlYXRlX2luZm87XFxubmV0L25mYy9uY2kvaGNpLmM6MzA4OlxcdHN0cnVjdCBuY2lfaGNpX2RlbGV0ZV9waXBlX25vdGkgKmRlbGV0ZV9pbmZvO1xcbm5ldC9uZmMvbmNpL2hjaS5jOjMwOTpcXHRzdHJ1Y3QgbmNpX2hjaV9hbGxfcGlwZV9jbGVhcmVkX25vdGkgKmNsZWFyZWRfaW5mbztcXG5uZXQvbmZjL25jaS9oY2kuYy0zMTAtXFxuLS1cXG5uZXQvbmZjL25jaS9oY2kuYy0zMTgtXFx0XFx0fVxcbm5ldC9uZmMvbmNpL2hjaS5jOjMxOTpcXHRcXHRjcmVhdGVfaW5mbyA9IChzdHJ1Y3QgbmNpX2hjaV9jcmVhdGVfcGlwZV9yZXNwICopc2tiLVxcdTAwM2VkYXRhO1xcbm5ldC9uZmMvbmNpL2hjaS5jLTMyMC1cXHRcXHRkZXN0X2dhdGUgPSBjcmVhdGVfaW5mby1cXHUwMDNlZGVzdF9nYXRlO1xcbi0tXFxubmV0L25mYy9uY2kvaGNpLmMtMzMxLVxcdFxcdCAqL1xcbm5ldC9uZmMvbmNpL2hjaS5jOjMzMjpcXHRcXHRuZGV2LVxcdTAwM2VoY2lfZGV2LVxcdTAwM2VnYXRlMnBpcGVbZGVzdF9nYXRlXSA9IG5ld19waXBlO1xcbm5ldC9uZmMvbmNpL2hjaS5jOjMzMzpcXHRcXHRuZGV2LVxcdTAwM2VoY2lfZGV2LVxcdTAwM2VwaXBlc1tuZXdfcGlwZV0uZ2F0ZSA9IGRlc3RfZ2F0ZTtcXG5uZXQvbmZjL25jaS9oY2kuYzozMzQ6XFx0XFx0bmRldi1cXHUwMDNlaGNpX2Rldi1cXHUwMDNlcGlwZXNbbmV3X3BpcGVdLmhvc3QgPVxcbm5ldC9uZmMvbmNpL2hjaS5jLTMzNS1cXHRcXHRcXHRcXHRcXHRcXHRjcmVhdGVfaW5mby1cXHUwMDNlc3JjX2hvc3Q7XFxuLS1cXG5uZXQvbmZjL25jaS9oY2kuYy0zNDgtXFx0XFx0fVxcbm5ldC9uZmMvbmNpL2hjaS5jOjM0OTpcXHRcXHRkZWxldGVfaW5mbyA9IChzdHJ1Y3QgbmNpX2hjaV9kZWxldGVfcGlwZV9ub3RpICopc2tiLVxcdTAwM2VkYXRhO1xcbm5ldC9uZmMvbmNpL2hjaS5jLTM1MC1cXHRcXHRpZiAoZGVsZXRlX2luZm8tXFx1MDAzZXBpcGUgXFx1MDAzZT0gTkNJX0hDSV9NQVhfUElQRVMpIHtcXG4tLVxcbm5ldC9uZmMvbmNpL2hjaS5jLTM1NC1cXG5uZXQvbmZjL25jaS9oY2kuYzozNTU6XFx0XFx0bmRldi1cXHUwMDNlaGNpX2Rldi1cXHUwMDNlcGlwZXNbZGVsZXRlX2luZm8tXFx1MDAzZXBpcGVdLmdhdGUgPVxcbm5ldC9uZmMvbmNpL2hjaS5jLTM1Ni1cXHRcXHRcXHRcXHRcXHRcXHROQ0lfSENJX0lOVkFMSURfR0FURTtcXG5uZXQvbmZjL25jaS9oY2kuYzozNTc6XFx0XFx0bmRldi1cXHUwMDNlaGNpX2Rldi1cXHUwMDNlcGlwZXNbZGVsZXRlX2luZm8tXFx1MDAzZXBpcGVdLmhvc3QgPVxcbm5ldC9uZmMvbmNpL2hjaS5jLTM1OC1cXHRcXHRcXHRcXHRcXHRcXHROQ0lfSENJX0lOVkFMSURfSE9TVDtcXG4tLVxcbm5ldC9uZmMvbmNpL2hjaS5jLTM2Ni1cXHRcXHRjbGVhcmVkX2luZm8gPVxcbm5ldC9uZmMvbmNpL2hjaS5jOjM2NzpcXHRcXHRcXHQoc3RydWN0IG5jaV9oY2lfYWxsX3BpcGVfY2xlYXJlZF9ub3RpICopc2tiLVxcdTAwM2VkYXRhO1xcbm5ldC9uZmMvbmNpL2hjaS5jOjM2ODpcXHRcXHRuY2lfaGNpX3Jlc2V0X3BpcGVzX3Blcl9ob3N0KG5kZXYsIGNsZWFyZWRfaW5mby1cXHUwMDNlaG9zdCk7XFxubmV0L25mYy9uY2kvaGNpLmMtMzY5LVxcdFxcdGJyZWFrO1xcbi0tXFxubmV0L25mYy9uY2kvaGNpLmMtMzc0LVxcbm5ldC9uZmMvbmNpL2hjaS5jOjM3NTpcXHRpZiAobmRldi1cXHUwMDNlb3BzLVxcdTAwM2VoY2lfY21kX3JlY2VpdmVkKVxcbm5ldC9uZmMvbmNpL2hjaS5jOjM3NjpcXHRcXHRuZGV2LVxcdTAwM2VvcHMtXFx1MDAzZWhjaV9jbWRfcmVjZWl2ZWQobmRldiwgcGlwZSwgY21kLCBza2IpO1xcbm5ldC9uZmMvbmNpL2hjaS5jLTM3Ny1cXG5uZXQvbmZjL25jaS9oY2kuYy0zNzgtZXhpdDpcXG5uZXQvbmZjL25jaS9oY2kuYzozNzk6XFx0bmNpX2hjaV9zZW5kX2RhdGEobmRldiwgcGlwZSwgc3RhdHVzLCBOVUxMLCAwKTtcXG5uZXQvbmZjL25jaS9oY2kuYy0zODAtXFxuLS1cXG5uZXQvbmZjL25jaS9oY2kuYy0zODMtXFxubmV0L25mYy9uY2kvaGNpLmM6Mzg0OnN0YXRpYyB2b2lkIG5jaV9oY2lfcmVzcF9yZWNlaXZlZChzdHJ1Y3QgbmNpX2RldiAqbmRldiwgdTggcGlwZSxcXG5uZXQvbmZjL25jaS9oY2kuYy0zODUtXFx0XFx0XFx0XFx0ICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L25mYy9uY2kvaGNpLmMtMzg5LVxcdHNwaW5fbG9ja19iaChcXHUwMDI2bmRldi1cXHUwMDNlY29ubl9pbmZvX2xvY2spO1xcbm5ldC9uZmMvbmNpL2hjaS5jOjM5MDpcXHRjb25uX2luZm8gPSBuZGV2LVxcdTAwM2VoY2lfZGV2LVxcdTAwM2Vjb25uX2luZm87XFxubmV0L25mYy9uY2kvaGNpLmMtMzkxLVxcdGlmICghY29ubl9pbmZvKSB7XFxuLS1cXG5uZXQvbmZjL25jaS9oY2kuYy00MDUtICovXFxubmV0L25mYy9uY2kvaGNpLmM6NDA2OnN0YXRpYyB2b2lkIG5jaV9oY2lfaGNwX21lc3NhZ2Vfcngoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHU4IHBpcGUsXFxubmV0L25mYy9uY2kvaGNpLmMtNDA3LVxcdFxcdFxcdFxcdCAgIHU4IHR5cGUsIHU4IGluc3RydWN0aW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L25mYy9uY2kvaGNpLmMtNDEwLVxcdGNhc2UgTkNJX0hDSV9IQ1BfUkVTUE9OU0U6XFxubmV0L25mYy9uY2kvaGNpLmM6NDExOlxcdFxcdG5jaV9oY2lfcmVzcF9yZWNlaXZlZChuZGV2LCBwaXBlLCBza2IpO1xcbm5ldC9uZmMvbmNpL2hjaS5jLTQxMi1cXHRcXHRicmVhaztcXG5uZXQvbmZjL25jaS9oY2kuYy00MTMtXFx0Y2FzZSBOQ0lfSENJX0hDUF9DT01NQU5EOlxcbm5ldC9uZmMvbmNpL2hjaS5jOjQxNDpcXHRcXHRuY2lfaGNpX2NtZF9yZWNlaXZlZChuZGV2LCBwaXBlLCBpbnN0cnVjdGlvbiwgc2tiKTtcXG5uZXQvbmZjL25jaS9oY2kuYy00MTUtXFx0XFx0YnJlYWs7XFxubmV0L25mYy9uY2kvaGNpLmMtNDE2LVxcdGNhc2UgTkNJX0hDSV9IQ1BfRVZFTlQ6XFxubmV0L25mYy9uY2kvaGNpLmM6NDE3OlxcdFxcdG5jaV9oY2lfZXZlbnRfcmVjZWl2ZWQobmRldiwgcGlwZSwgaW5zdHJ1Y3Rpb24sIHNrYik7XFxubmV0L25mYy9uY2kvaGNpLmMtNDE4LVxcdFxcdGJyZWFrO1xcbi0tXFxubmV0L25mYy9uY2kvaGNpLmMtNDI4LVxcbm5ldC9uZmMvbmNpL2hjaS5jOjQyOTpzdGF0aWMgdm9pZCBuY2lfaGNpX21zZ19yeF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG5uZXQvbmZjL25jaS9oY2kuYy00MzAte1xcbm5ldC9uZmMvbmNpL2hjaS5jOjQzMTpcXHRzdHJ1Y3QgbmNpX2hjaV9kZXYgKmhkZXYgPVxcbm5ldC9uZmMvbmNpL2hjaS5jOjQzMjpcXHRcXHRjb250YWluZXJfb2Yod29yaywgc3RydWN0IG5jaV9oY2lfZGV2LCBtc2dfcnhfd29yayk7XFxubmV0L25mYy9uY2kvaGNpLmMtNDMzLVxcdHN0cnVjdCBza19idWZmICpza2I7XFxuLS1cXG5uZXQvbmZjL25jaS9oY2kuYy00NDUtXFxubmV0L25mYy9uY2kvaGNpLmM6NDQ2OlxcdFxcdG5jaV9oY2lfaGNwX21lc3NhZ2VfcngoaGRldi1cXHUwMDNlbmRldiwgcGlwZSxcXG5uZXQvbmZjL25jaS9oY2kuYy00NDctXFx0XFx0XFx0XFx0ICAgICAgIHR5cGUsIGluc3RydWN0aW9uLCBza2IpO1xcbi0tXFxubmV0L25mYy9uY2kvaGNpLmMtNDUwLVxcbm5ldC9uZmMvbmNpL2hjaS5jOjQ1MTp2b2lkIG5jaV9oY2lfZGF0YV9yZWNlaXZlZF9jYih2b2lkICpjb250ZXh0LFxcbm5ldC9uZmMvbmNpL2hjaS5jLTQ1Mi1cXHRcXHRcXHQgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgZXJyKVxcbi0tXFxubmV0L25mYy9uY2kvaGNpLmMtNDcyLVxcdGlmICgocGFja2V0LVxcdTAwM2VoZWFkZXIgXFx1MDAyNiB+TkNJX0hDSV9GUkFHTUVOVCkgPT0gMCkge1xcbm5ldC9uZmMvbmNpL2hjaS5jOjQ3MzpcXHRcXHRza2JfcXVldWVfdGFpbChcXHUwMDI2bmRldi1cXHUwMDNlaGNpX2Rldi1cXHUwMDNlcnhfaGNwX2ZyYWdzLCBza2IpO1xcbm5ldC9uZmMvbmNpL2hjaS5jLTQ3NC1cXHRcXHRyZXR1cm47XFxuLS1cXG5uZXQvbmZjL25jaS9oY2kuYy00NzctXFx0LyogaXQncyB0aGUgbGFzdCBmcmFnbWVudC4gRG9lcyBpdCBuZWVkIHJlLWFnZ3JlZ2F0aW9uPyAqL1xcbm5ldC9uZmMvbmNpL2hjaS5jOjQ3ODpcXHRpZiAoc2tiX3F1ZXVlX2xlbihcXHUwMDI2bmRldi1cXHUwMDNlaGNpX2Rldi1cXHUwMDNlcnhfaGNwX2ZyYWdzKSkge1xcbm5ldC9uZmMvbmNpL2hjaS5jLTQ3OS1cXHRcXHRwaXBlID0gTkNJX0hDUF9NU0dfR0VUX1BJUEUocGFja2V0LVxcdTAwM2VoZWFkZXIpO1xcbm5ldC9uZmMvbmNpL2hjaS5jOjQ4MDpcXHRcXHRza2JfcXVldWVfdGFpbChcXHUwMDI2bmRldi1cXHUwMDNlaGNpX2Rldi1cXHUwMDNlcnhfaGNwX2ZyYWdzLCBza2IpO1xcbm5ldC9uZmMvbmNpL2hjaS5jLTQ4MS1cXG5uZXQvbmZjL25jaS9oY2kuYy00ODItXFx0XFx0bXNnX2xlbiA9IDA7XFxubmV0L25mYy9uY2kvaGNpLmM6NDgzOlxcdFxcdHNrYl9xdWV1ZV93YWxrKFxcdTAwMjZuZGV2LVxcdTAwM2VoY2lfZGV2LVxcdTAwM2VyeF9oY3BfZnJhZ3MsIGZyYWdfc2tiKSB7XFxubmV0L25mYy9uY2kvaGNpLmMtNDg0LVxcdFxcdFxcdG1zZ19sZW4gKz0gKGZyYWdfc2tiLVxcdTAwM2VsZW4gLVxcbi0tXFxubmV0L25mYy9uY2kvaGNpLmMtNDk2LVxcbm5ldC9uZmMvbmNpL2hjaS5jOjQ5NzpcXHRcXHRza2JfcXVldWVfd2FsayhcXHUwMDI2bmRldi1cXHUwMDNlaGNpX2Rldi1cXHUwMDNlcnhfaGNwX2ZyYWdzLCBmcmFnX3NrYikge1xcbm5ldC9uZmMvbmNpL2hjaS5jLTQ5OC1cXHRcXHRcXHRtc2dfbGVuID0gZnJhZ19za2ItXFx1MDAzZWxlbiAtIE5DSV9IQ0lfSENQX1BBQ0tFVF9IRUFERVJfTEVOO1xcbi0tXFxubmV0L25mYy9uY2kvaGNpLmMtNTAzLVxcbm5ldC9uZmMvbmNpL2hjaS5jOjUwNDpcXHRcXHRza2JfcXVldWVfcHVyZ2UoXFx1MDAyNm5kZXYtXFx1MDAzZWhjaV9kZXYtXFx1MDAzZXJ4X2hjcF9mcmFncyk7XFxubmV0L25mYy9uY2kvaGNpLmMtNTA1LVxcdH0gZWxzZSB7XFxuLS1cXG5uZXQvbmZjL25jaS9oY2kuYy01MjMtXFx0XFx0c2tiX3B1bGwoaGNwX3NrYiwgTkNJX0hDSV9IQ1BfUEFDS0VUX0hFQURFUl9MRU4pO1xcbm5ldC9uZmMvbmNpL2hjaS5jOjUyNDpcXHRcXHRuY2lfaGNpX2hjcF9tZXNzYWdlX3J4KG5kZXYsIHBpcGUsIHR5cGUsXFxubmV0L25mYy9uY2kvaGNpLmMtNTI1LVxcdFxcdFxcdFxcdCAgICAgICBOQ0lfU1RBVFVTX09LLCBoY3Bfc2tiKTtcXG5uZXQvbmZjL25jaS9oY2kuYy01MjYtXFx0fSBlbHNlIHtcXG5uZXQvbmZjL25jaS9oY2kuYzo1Mjc6XFx0XFx0c2tiX3F1ZXVlX3RhaWwoXFx1MDAyNm5kZXYtXFx1MDAzZWhjaV9kZXYtXFx1MDAzZW1zZ19yeF9xdWV1ZSwgaGNwX3NrYik7XFxubmV0L25mYy9uY2kvaGNpLmM6NTI4OlxcdFxcdHNjaGVkdWxlX3dvcmsoXFx1MDAyNm5kZXYtXFx1MDAzZWhjaV9kZXYtXFx1MDAzZW1zZ19yeF93b3JrKTtcXG5uZXQvbmZjL25jaS9oY2kuYy01MjktXFx0fVxcbi0tXFxubmV0L25mYy9uY2kvaGNpLmMtNTMxLVxcbm5ldC9uZmMvbmNpL2hjaS5jOjUzMjppbnQgbmNpX2hjaV9vcGVuX3BpcGUoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHU4IHBpcGUpXFxubmV0L25mYy9uY2kvaGNpLmMtNTMzLXtcXG4tLVxcbm5ldC9uZmMvbmNpL2hjaS5jLTUzNy1cXHRzcGluX2xvY2tfYmgoXFx1MDAyNm5kZXYtXFx1MDAzZWNvbm5faW5mb19sb2NrKTtcXG5uZXQvbmZjL25jaS9oY2kuYzo1Mzg6XFx0Y29ubl9pbmZvID0gbmRldi1cXHUwMDNlaGNpX2Rldi1cXHUwMDNlY29ubl9pbmZvO1xcbm5ldC9uZmMvbmNpL2hjaS5jLTUzOS1cXHRpZiAoIWNvbm5faW5mbykge1xcbi0tXFxubmV0L25mYy9uY2kvaGNpLmMtNTUxLVxcbm5ldC9uZmMvbmNpL2hjaS5jOjU1MjpcXHRyZXR1cm4gbmNpX3JlcXVlc3QobmRldiwgbmNpX2hjaV9zZW5kX2RhdGFfcmVxLCBcXHUwMDI2ZGF0YSxcXG5uZXQvbmZjL25jaS9oY2kuYy01NTMtXFx0XFx0XFx0ICAgbXNlY3NfdG9famlmZmllcyhOQ0lfREFUQV9USU1FT1VUKSk7XFxubmV0L25mYy9uY2kvaGNpLmMtNTU0LX1cXG5uZXQvbmZjL25jaS9oY2kuYzo1NTU6RVhQT1JUX1NZTUJPTChuY2lfaGNpX29wZW5fcGlwZSk7XFxubmV0L25mYy9uY2kvaGNpLmMtNTU2LVxcbm5ldC9uZmMvbmNpL2hjaS5jOjU1NzpzdGF0aWMgdTggbmNpX2hjaV9jcmVhdGVfcGlwZShzdHJ1Y3QgbmNpX2RldiAqbmRldiwgdTggZGVzdF9ob3N0LFxcbm5ldC9uZmMvbmNpL2hjaS5jLTU1OC1cXHRcXHRcXHQgICAgICB1OCBkZXN0X2dhdGUsIGludCAqcmVzdWx0KVxcbi0tXFxubmV0L25mYy9uY2kvaGNpLmMtNTYxLVxcdHN0cnVjdCBza19idWZmICpza2I7XFxubmV0L25mYy9uY2kvaGNpLmM6NTYyOlxcdHN0cnVjdCBuY2lfaGNpX2NyZWF0ZV9waXBlX3BhcmFtcyBwYXJhbXM7XFxubmV0L25mYy9uY2kvaGNpLmM6NTYzOlxcdGNvbnN0IHN0cnVjdCBuY2lfaGNpX2NyZWF0ZV9waXBlX3Jlc3AgKnJlc3A7XFxubmV0L25mYy9uY2kvaGNpLmMtNTY0LVxcbi0tXFxubmV0L25mYy9uY2kvaGNpLmMtNTcwLVxcbm5ldC9uZmMvbmNpL2hjaS5jOjU3MTpcXHQqcmVzdWx0ID0gbmNpX2hjaV9zZW5kX2NtZChuZGV2LCBOQ0lfSENJX0FETUlOX0dBVEUsXFxubmV0L25mYy9uY2kvaGNpLmMtNTcyLVxcdFxcdFxcdFxcdCAgIE5DSV9IQ0lfQURNX0NSRUFURV9QSVBFLFxcbi0tXFxubmV0L25mYy9uY2kvaGNpLmMtNTc2LVxcbm5ldC9uZmMvbmNpL2hjaS5jOjU3NzpcXHRyZXNwID0gKHN0cnVjdCBuY2lfaGNpX2NyZWF0ZV9waXBlX3Jlc3AgKilza2ItXFx1MDAzZWRhdGE7XFxubmV0L25mYy9uY2kvaGNpLmMtNTc4LVxcdHBpcGUgPSByZXNwLVxcdTAwM2VwaXBlO1xcbi0tXFxubmV0L25mYy9uY2kvaGNpLmMtNTg3LVxcbm5ldC9uZmMvbmNpL2hjaS5jOjU4ODpzdGF0aWMgaW50IG5jaV9oY2lfZGVsZXRlX3BpcGUoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHU4IHBpcGUpXFxubmV0L25mYy9uY2kvaGNpLmMtNTg5LXtcXG5uZXQvbmZjL25jaS9oY2kuYzo1OTA6XFx0cmV0dXJuIG5jaV9oY2lfc2VuZF9jbWQobmRldiwgTkNJX0hDSV9BRE1JTl9HQVRFLFxcbm5ldC9uZmMvbmNpL2hjaS5jLTU5MS1cXHRcXHRcXHRcXHROQ0lfSENJX0FETV9ERUxFVEVfUElQRSwgXFx1MDAyNnBpcGUsIDEsIE5VTEwpO1xcbi0tXFxubmV0L25mYy9uY2kvaGNpLmMtNTkzLVxcbm5ldC9uZmMvbmNpL2hjaS5jOjU5NDppbnQgbmNpX2hjaV9zZXRfcGFyYW0oc3RydWN0IG5jaV9kZXYgKm5kZXYsIHU4IGdhdGUsIHU4IGlkeCxcXG5uZXQvbmZjL25jaS9oY2kuYy01OTUtXFx0XFx0ICAgICAgY29uc3QgdTggKnBhcmFtLCBzaXplX3QgcGFyYW1fbGVuKVxcbi0tXFxubmV0L25mYy9uY2kvaGNpLmMtNjAyLVxcdHU4ICp0bXA7XFxubmV0L25mYy9uY2kvaGNpLmM6NjAzOlxcdHU4IHBpcGUgPSBuZGV2LVxcdTAwM2VoY2lfZGV2LVxcdTAwM2VnYXRlMnBpcGVbZ2F0ZV07XFxubmV0L25mYy9uY2kvaGNpLmMtNjA0LVxcbi0tXFxubmV0L25mYy9uY2kvaGNpLmMtNjEwLVxcdHNwaW5fbG9ja19iaChcXHUwMDI2bmRldi1cXHUwMDNlY29ubl9pbmZvX2xvY2spO1xcbm5ldC9uZmMvbmNpL2hjaS5jOjYxMTpcXHRjb25uX2luZm8gPSBuZGV2LVxcdTAwM2VoY2lfZGV2LVxcdTAwM2Vjb25uX2luZm87XFxubmV0L25mYy9uY2kvaGNpLmMtNjEyLVxcdGlmICghY29ubl9pbmZvKSB7XFxuLS1cXG5uZXQvbmZjL25jaS9oY2kuYy02MzEtXFxubmV0L25mYy9uY2kvaGNpLmM6NjMyOlxcdHIgPSBuY2lfcmVxdWVzdChuZGV2LCBuY2lfaGNpX3NlbmRfZGF0YV9yZXEsIFxcdTAwMjZkYXRhLFxcbm5ldC9uZmMvbmNpL2hjaS5jLTYzMy1cXHRcXHRcXHRtc2Vjc190b19qaWZmaWVzKE5DSV9EQVRBX1RJTUVPVVQpKTtcXG4tLVxcbm5ldC9uZmMvbmNpL2hjaS5jLTYzNS1cXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNm5kZXYtXFx1MDAzZWNvbm5faW5mb19sb2NrKTtcXG5uZXQvbmZjL25jaS9oY2kuYzo2MzY6XFx0XFx0Y29ubl9pbmZvID0gbmRldi1cXHUwMDNlaGNpX2Rldi1cXHUwMDNlY29ubl9pbmZvO1xcbm5ldC9uZmMvbmNpL2hjaS5jLTYzNy1cXHRcXHRyeF9za2IgPSBjb25uX2luZm8gPyBjb25uX2luZm8tXFx1MDAzZXJ4X3NrYiA6IE5VTEw7XFxuLS1cXG5uZXQvbmZjL25jaS9oY2kuYy02NDQtXFx0XFx0bWVzc2FnZSA9IChzdHJ1Y3QgbmNpX2hjcF9tZXNzYWdlICopcnhfc2tiLVxcdTAwM2VkYXRhO1xcbm5ldC9uZmMvbmNpL2hjaS5jOjY0NTpcXHRcXHRyID0gbmNpX2hjaV9yZXN1bHRfdG9fZXJybm8oXFxubmV0L25mYy9uY2kvaGNpLmMtNjQ2LVxcdFxcdFxcdE5DSV9IQ1BfTVNHX0dFVF9DTUQobWVzc2FnZS1cXHUwMDNlaGVhZGVyKSk7XFxuLS1cXG5uZXQvbmZjL25jaS9oY2kuYy02NTMtfVxcbm5ldC9uZmMvbmNpL2hjaS5jOjY1NDpFWFBPUlRfU1lNQk9MKG5jaV9oY2lfc2V0X3BhcmFtKTtcXG5uZXQvbmZjL25jaS9oY2kuYy02NTUtXFxubmV0L25mYy9uY2kvaGNpLmM6NjU2OmludCBuY2lfaGNpX2dldF9wYXJhbShzdHJ1Y3QgbmNpX2RldiAqbmRldiwgdTggZ2F0ZSwgdTggaWR4LFxcbm5ldC9uZmMvbmNpL2hjaS5jLTY1Ny1cXHRcXHQgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqKnNrYilcXG4tLVxcbm5ldC9uZmMvbmNpL2hjaS5jLTY2My1cXHRpbnQgcjtcXG5uZXQvbmZjL25jaS9oY2kuYzo2NjQ6XFx0dTggcGlwZSA9IG5kZXYtXFx1MDAzZWhjaV9kZXYtXFx1MDAzZWdhdGUycGlwZVtnYXRlXTtcXG5uZXQvbmZjL25jaS9oY2kuYy02NjUtXFxuLS1cXG5uZXQvbmZjL25jaS9oY2kuYy02NzEtXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZuZGV2LVxcdTAwM2Vjb25uX2luZm9fbG9jayk7XFxubmV0L25mYy9uY2kvaGNpLmM6NjcyOlxcdGNvbm5faW5mbyA9IG5kZXYtXFx1MDAzZWhjaV9kZXYtXFx1MDAzZWNvbm5faW5mbztcXG5uZXQvbmZjL25jaS9oY2kuYy02NzMtXFx0aWYgKCFjb25uX2luZm8pIHtcXG4tLVxcbm5ldC9uZmMvbmNpL2hjaS5jLTY4NS1cXG5uZXQvbmZjL25jaS9oY2kuYzo2ODY6XFx0ciA9IG5jaV9yZXF1ZXN0KG5kZXYsIG5jaV9oY2lfc2VuZF9kYXRhX3JlcSwgXFx1MDAyNmRhdGEsXFxubmV0L25mYy9uY2kvaGNpLmMtNjg3LVxcdFxcdFxcdG1zZWNzX3RvX2ppZmZpZXMoTkNJX0RBVEFfVElNRU9VVCkpO1xcbi0tXFxubmV0L25mYy9uY2kvaGNpLmMtNjkwLVxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2bmRldi1cXHUwMDNlY29ubl9pbmZvX2xvY2spO1xcbm5ldC9uZmMvbmNpL2hjaS5jOjY5MTpcXHRcXHRjb25uX2luZm8gPSBuZGV2LVxcdTAwM2VoY2lfZGV2LVxcdTAwM2Vjb25uX2luZm87XFxubmV0L25mYy9uY2kvaGNpLmMtNjkyLVxcdFxcdHJ4X3NrYiA9IGNvbm5faW5mbyA/IGNvbm5faW5mby1cXHUwMDNlcnhfc2tiIDogTlVMTDtcXG4tLVxcbm5ldC9uZmMvbmNpL2hjaS5jLTY5OC1cXHRcXHRtZXNzYWdlID0gKHN0cnVjdCBuY2lfaGNwX21lc3NhZ2UgKilyeF9za2ItXFx1MDAzZWRhdGE7XFxubmV0L25mYy9uY2kvaGNpLmM6Njk5OlxcdFxcdHIgPSBuY2lfaGNpX3Jlc3VsdF90b19lcnJubyhcXG5uZXQvbmZjL25jaS9oY2kuYy03MDAtXFx0XFx0XFx0TkNJX0hDUF9NU0dfR0VUX0NNRChtZXNzYWdlLVxcdTAwM2VoZWFkZXIpKTtcXG4tLVxcbm5ldC9uZmMvbmNpL2hjaS5jLTcwOS19XFxubmV0L25mYy9uY2kvaGNpLmM6NzEwOkVYUE9SVF9TWU1CT0wobmNpX2hjaV9nZXRfcGFyYW0pO1xcbm5ldC9uZmMvbmNpL2hjaS5jLTcxMS1cXG5uZXQvbmZjL25jaS9oY2kuYzo3MTI6aW50IG5jaV9oY2lfY29ubmVjdF9nYXRlKHN0cnVjdCBuY2lfZGV2ICpuZGV2LFxcbm5ldC9uZmMvbmNpL2hjaS5jLTcxMy1cXHRcXHRcXHQgdTggZGVzdF9ob3N0LCB1OCBkZXN0X2dhdGUsIHU4IHBpcGUpXFxuLS1cXG5uZXQvbmZjL25jaS9oY2kuYy03MjAtXFxubmV0L25mYy9uY2kvaGNpLmM6NzIxOlxcdGlmIChuZGV2LVxcdTAwM2VoY2lfZGV2LVxcdTAwM2VnYXRlMnBpcGVbZGVzdF9nYXRlXSAhPSBOQ0lfSENJX0lOVkFMSURfUElQRSlcXG5uZXQvbmZjL25jaS9oY2kuYy03MjItXFx0XFx0cmV0dXJuIC1FQUREUklOVVNFO1xcbi0tXFxubmV0L25mYy9uY2kvaGNpLmMtNzM0LVxcdGRlZmF1bHQ6XFxubmV0L25mYy9uY2kvaGNpLmM6NzM1OlxcdFxcdHBpcGUgPSBuY2lfaGNpX2NyZWF0ZV9waXBlKG5kZXYsIGRlc3RfaG9zdCwgZGVzdF9nYXRlLCBcXHUwMDI2cik7XFxubmV0L25mYy9uY2kvaGNpLmMtNzM2LVxcdFxcdGlmIChwaXBlID09IE5DSV9IQ0lfSU5WQUxJRF9QSVBFKVxcbi0tXFxubmV0L25mYy9uY2kvaGNpLmMtNzQyLW9wZW5fcGlwZTpcXG5uZXQvbmZjL25jaS9oY2kuYzo3NDM6XFx0ciA9IG5jaV9oY2lfb3Blbl9waXBlKG5kZXYsIHBpcGUpO1xcbm5ldC9uZmMvbmNpL2hjaS5jLTc0NC1cXHRpZiAociBcXHUwMDNjIDApIHtcXG5uZXQvbmZjL25jaS9oY2kuYy03NDUtXFx0XFx0aWYgKHBpcGVfY3JlYXRlZCkge1xcbm5ldC9uZmMvbmNpL2hjaS5jOjc0NjpcXHRcXHRcXHRpZiAobmNpX2hjaV9kZWxldGVfcGlwZShuZGV2LCBwaXBlKSBcXHUwMDNjIDApIHtcXG5uZXQvbmZjL25jaS9oY2kuYy03NDctXFx0XFx0XFx0XFx0LyogVE9ETzogQ2Fubm90IGNsZWFuIGJ5IGRlbGV0aW5nIHBpcGUuLi5cXG4tLVxcbm5ldC9uZmMvbmNpL2hjaS5jLTc1NC1cXG5uZXQvbmZjL25jaS9oY2kuYzo3NTU6XFx0bmRldi1cXHUwMDNlaGNpX2Rldi1cXHUwMDNlcGlwZXNbcGlwZV0uZ2F0ZSA9IGRlc3RfZ2F0ZTtcXG5uZXQvbmZjL25jaS9oY2kuYzo3NTY6XFx0bmRldi1cXHUwMDNlaGNpX2Rldi1cXHUwMDNlcGlwZXNbcGlwZV0uaG9zdCA9IGRlc3RfaG9zdDtcXG5uZXQvbmZjL25jaS9oY2kuYzo3NTc6XFx0bmRldi1cXHUwMDNlaGNpX2Rldi1cXHUwMDNlZ2F0ZTJwaXBlW2Rlc3RfZ2F0ZV0gPSBwaXBlO1xcbm5ldC9uZmMvbmNpL2hjaS5jLTc1OC1cXG4tLVxcbm5ldC9uZmMvbmNpL2hjaS5jLTc2MC19XFxubmV0L25mYy9uY2kvaGNpLmM6NzYxOkVYUE9SVF9TWU1CT0wobmNpX2hjaV9jb25uZWN0X2dhdGUpO1xcbm5ldC9uZmMvbmNpL2hjaS5jLTc2Mi1cXG5uZXQvbmZjL25jaS9oY2kuYzo3NjM6c3RhdGljIGludCBuY2lfaGNpX2Rldl9jb25uZWN0X2dhdGVzKHN0cnVjdCBuY2lfZGV2ICpuZGV2LFxcbm5ldC9uZmMvbmNpL2hjaS5jLTc2NC1cXHRcXHRcXHRcXHQgICAgIHU4IGdhdGVfY291bnQsXFxubmV0L25mYy9uY2kvaGNpLmM6NzY1OlxcdFxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IG5jaV9oY2lfZ2F0ZSAqZ2F0ZXMpXFxubmV0L25mYy9uY2kvaGNpLmMtNzY2LXtcXG4tLVxcbm5ldC9uZmMvbmNpL2hjaS5jLTc2OS1cXHR3aGlsZSAoZ2F0ZV9jb3VudC0tKSB7XFxubmV0L25mYy9uY2kvaGNpLmM6NzcwOlxcdFxcdHIgPSBuY2lfaGNpX2Nvbm5lY3RfZ2F0ZShuZGV2LCBnYXRlcy1cXHUwMDNlZGVzdF9ob3N0LFxcbm5ldC9uZmMvbmNpL2hjaS5jLTc3MS1cXHRcXHRcXHRcXHRcXHQgZ2F0ZXMtXFx1MDAzZWdhdGUsIGdhdGVzLVxcdTAwM2VwaXBlKTtcXG4tLVxcbm5ldC9uZmMvbmNpL2hjaS5jLTc3OS1cXG5uZXQvbmZjL25jaS9oY2kuYzo3ODA6aW50IG5jaV9oY2lfZGV2X3Nlc3Npb25faW5pdChzdHJ1Y3QgbmNpX2RldiAqbmRldilcXG5uZXQvbmZjL25jaS9oY2kuYy03ODEte1xcbi0tXFxubmV0L25mYy9uY2kvaGNpLmMtNzg1LVxcbm5ldC9uZmMvbmNpL2hjaS5jOjc4NjpcXHRuZGV2LVxcdTAwM2VoY2lfZGV2LVxcdTAwM2Vjb3VudF9waXBlcyA9IDA7XFxubmV0L25mYy9uY2kvaGNpLmM6Nzg3OlxcdG5kZXYtXFx1MDAzZWhjaV9kZXYtXFx1MDAzZWV4cGVjdGVkX3BpcGVzID0gMDtcXG5uZXQvbmZjL25jaS9oY2kuYy03ODgtXFxubmV0L25mYy9uY2kvaGNpLmMtNzg5LVxcdHNwaW5fbG9ja19iaChcXHUwMDI2bmRldi1cXHUwMDNlY29ubl9pbmZvX2xvY2spO1xcbm5ldC9uZmMvbmNpL2hjaS5jOjc5MDpcXHRjb25uX2luZm8gPSBuZGV2LVxcdTAwM2VoY2lfZGV2LVxcdTAwM2Vjb25uX2luZm87XFxubmV0L25mYy9uY2kvaGNpLmMtNzkxLVxcdGlmICghY29ubl9pbmZvKSB7XFxuLS1cXG5uZXQvbmZjL25jaS9oY2kuYy03OTUtXFxubmV0L25mYy9uY2kvaGNpLmM6Nzk2OlxcdGNvbm5faW5mby1cXHUwMDNlZGF0YV9leGNoYW5nZV9jYiA9IG5jaV9oY2lfZGF0YV9yZWNlaXZlZF9jYjtcXG5uZXQvbmZjL25jaS9oY2kuYy03OTctXFx0Y29ubl9pbmZvLVxcdTAwM2VkYXRhX2V4Y2hhbmdlX2NiX2NvbnRleHQgPSBuZGV2O1xcbi0tXFxubmV0L25mYy9uY2kvaGNpLmMtNzk5LVxcbm5ldC9uZmMvbmNpL2hjaS5jOjgwMDpcXHRuY2lfaGNpX3Jlc2V0X3BpcGVzKG5kZXYtXFx1MDAzZWhjaV9kZXYpO1xcbm5ldC9uZmMvbmNpL2hjaS5jLTgwMS1cXG5uZXQvbmZjL25jaS9oY2kuYzo4MDI6XFx0aWYgKG5kZXYtXFx1MDAzZWhjaV9kZXYtXFx1MDAzZWluaXRfZGF0YS5nYXRlc1swXS5nYXRlICE9IE5DSV9IQ0lfQURNSU5fR0FURSlcXG5uZXQvbmZjL25jaS9oY2kuYy04MDMtXFx0XFx0cmV0dXJuIC1FUFJPVE87XFxubmV0L25mYy9uY2kvaGNpLmMtODA0LVxcbm5ldC9uZmMvbmNpL2hjaS5jOjgwNTpcXHRyID0gbmNpX2hjaV9jb25uZWN0X2dhdGUobmRldixcXG5uZXQvbmZjL25jaS9oY2kuYzo4MDY6XFx0XFx0XFx0XFx0IG5kZXYtXFx1MDAzZWhjaV9kZXYtXFx1MDAzZWluaXRfZGF0YS5nYXRlc1swXS5kZXN0X2hvc3QsXFxubmV0L25mYy9uY2kvaGNpLmM6ODA3OlxcdFxcdFxcdFxcdCBuZGV2LVxcdTAwM2VoY2lfZGV2LVxcdTAwM2Vpbml0X2RhdGEuZ2F0ZXNbMF0uZ2F0ZSxcXG5uZXQvbmZjL25jaS9oY2kuYzo4MDg6XFx0XFx0XFx0XFx0IG5kZXYtXFx1MDAzZWhjaV9kZXYtXFx1MDAzZWluaXRfZGF0YS5nYXRlc1swXS5waXBlKTtcXG5uZXQvbmZjL25jaS9oY2kuYy04MDktXFx0aWYgKHIgXFx1MDAzYyAwKVxcbi0tXFxubmV0L25mYy9uY2kvaGNpLmMtODExLVxcbm5ldC9uZmMvbmNpL2hjaS5jOjgxMjpcXHRyID0gbmNpX2hjaV9nZXRfcGFyYW0obmRldiwgTkNJX0hDSV9BRE1JTl9HQVRFLFxcbm5ldC9uZmMvbmNpL2hjaS5jLTgxMy1cXHRcXHRcXHQgICAgICBOQ0lfSENJX0FETUlOX1BBUkFNX1NFU1NJT05fSURFTlRJVFksIFxcdTAwMjZza2IpO1xcbi0tXFxubmV0L25mYy9uY2kvaGNpLmMtODE3LVxcdGlmIChza2ItXFx1MDAzZWxlbiBcXHUwMDI2XFx1MDAyNlxcbm5ldC9uZmMvbmNpL2hjaS5jOjgxODpcXHQgICAgc2tiLVxcdTAwM2VsZW4gPT0gc3RybGVuKG5kZXYtXFx1MDAzZWhjaV9kZXYtXFx1MDAzZWluaXRfZGF0YS5zZXNzaW9uX2lkKSBcXHUwMDI2XFx1MDAyNlxcbm5ldC9uZmMvbmNpL2hjaS5jOjgxOTpcXHQgICAgIW1lbWNtcChuZGV2LVxcdTAwM2VoY2lfZGV2LVxcdTAwM2Vpbml0X2RhdGEuc2Vzc2lvbl9pZCwgc2tiLVxcdTAwM2VkYXRhLCBza2ItXFx1MDAzZWxlbikgXFx1MDAyNlxcdTAwMjZcXG5uZXQvbmZjL25jaS9oY2kuYzo4MjA6XFx0ICAgIG5kZXYtXFx1MDAzZW9wcy1cXHUwMDNlaGNpX2xvYWRfc2Vzc2lvbikge1xcbm5ldC9uZmMvbmNpL2hjaS5jLTgyMS1cXHRcXHQvKiBSZXN0b3JlIGdhdGVcXHUwMDNjLVxcdTAwM2VwaXBlIHRhYmxlIGZyb20gc29tZSBwcm9wcmlldGFyeSBsb2NhdGlvbi4gKi9cXG5uZXQvbmZjL25jaS9oY2kuYzo4MjI6XFx0XFx0ciA9IG5kZXYtXFx1MDAzZW9wcy1cXHUwMDNlaGNpX2xvYWRfc2Vzc2lvbihuZGV2KTtcXG5uZXQvbmZjL25jaS9oY2kuYy04MjMtXFx0fSBlbHNlIHtcXG5uZXQvbmZjL25jaS9oY2kuYzo4MjQ6XFx0XFx0ciA9IG5jaV9oY2lfY2xlYXJfYWxsX3BpcGVzKG5kZXYpO1xcbm5ldC9uZmMvbmNpL2hjaS5jLTgyNS1cXHRcXHRpZiAociBcXHUwMDNjIDApXFxuLS1cXG5uZXQvbmZjL25jaS9oY2kuYy04MjctXFxubmV0L25mYy9uY2kvaGNpLmM6ODI4OlxcdFxcdHIgPSBuY2lfaGNpX2Rldl9jb25uZWN0X2dhdGVzKG5kZXYsXFxubmV0L25mYy9uY2kvaGNpLmM6ODI5OlxcdFxcdFxcdFxcdFxcdCAgICAgIG5kZXYtXFx1MDAzZWhjaV9kZXYtXFx1MDAzZWluaXRfZGF0YS5nYXRlX2NvdW50LFxcbm5ldC9uZmMvbmNpL2hjaS5jOjgzMDpcXHRcXHRcXHRcXHRcXHQgICAgICBuZGV2LVxcdTAwM2VoY2lfZGV2LVxcdTAwM2Vpbml0X2RhdGEuZ2F0ZXMpO1xcbm5ldC9uZmMvbmNpL2hjaS5jLTgzMS1cXHRcXHRpZiAociBcXHUwMDNjIDApXFxuLS1cXG5uZXQvbmZjL25jaS9oY2kuYy04MzMtXFxubmV0L25mYy9uY2kvaGNpLmM6ODM0OlxcdFxcdHIgPSBuY2lfaGNpX3NldF9wYXJhbShuZGV2LCBOQ0lfSENJX0FETUlOX0dBVEUsXFxubmV0L25mYy9uY2kvaGNpLmMtODM1LVxcdFxcdFxcdFxcdCAgICAgIE5DSV9IQ0lfQURNSU5fUEFSQU1fU0VTU0lPTl9JREVOVElUWSxcXG5uZXQvbmZjL25jaS9oY2kuYzo4MzY6XFx0XFx0XFx0XFx0ICAgICAgbmRldi1cXHUwMDNlaGNpX2Rldi1cXHUwMDNlaW5pdF9kYXRhLnNlc3Npb25faWQsXFxubmV0L25mYy9uY2kvaGNpLmM6ODM3OlxcdFxcdFxcdFxcdCAgICAgIHN0cmxlbihuZGV2LVxcdTAwM2VoY2lfZGV2LVxcdTAwM2Vpbml0X2RhdGEuc2Vzc2lvbl9pZCkpO1xcbm5ldC9uZmMvbmNpL2hjaS5jLTgzOC1cXHR9XFxuLS1cXG5uZXQvbmZjL25jaS9oY2kuYy04NDQtfVxcbm5ldC9uZmMvbmNpL2hjaS5jOjg0NTpFWFBPUlRfU1lNQk9MKG5jaV9oY2lfZGV2X3Nlc3Npb25faW5pdCk7XFxubmV0L25mYy9uY2kvaGNpLmMtODQ2LVxcbm5ldC9uZmMvbmNpL2hjaS5jOjg0NzpzdHJ1Y3QgbmNpX2hjaV9kZXYgKm5jaV9oY2lfYWxsb2NhdGUoc3RydWN0IG5jaV9kZXYgKm5kZXYpXFxubmV0L25mYy9uY2kvaGNpLmMtODQ4LXtcXG5uZXQvbmZjL25jaS9oY2kuYzo4NDk6XFx0c3RydWN0IG5jaV9oY2lfZGV2ICpoZGV2O1xcbm5ldC9uZmMvbmNpL2hjaS5jLTg1MC1cXG4tLVxcbm5ldC9uZmMvbmNpL2hjaS5jLTg1NS1cXHRza2JfcXVldWVfaGVhZF9pbml0KFxcdTAwMjZoZGV2LVxcdTAwM2VyeF9oY3BfZnJhZ3MpO1xcbm5ldC9uZmMvbmNpL2hjaS5jOjg1NjpcXHRJTklUX1dPUksoXFx1MDAyNmhkZXYtXFx1MDAzZW1zZ19yeF93b3JrLCBuY2lfaGNpX21zZ19yeF93b3JrKTtcXG5uZXQvbmZjL25jaS9oY2kuYy04NTctXFx0c2tiX3F1ZXVlX2hlYWRfaW5pdChcXHUwMDI2aGRldi1cXHUwMDNlbXNnX3J4X3F1ZXVlKTtcXG4tLVxcbm5ldC9uZmMvbmNpL2hjaS5jLTg2Mi1cXG5uZXQvbmZjL25jaS9oY2kuYzo4NjM6dm9pZCBuY2lfaGNpX2RlYWxsb2NhdGUoc3RydWN0IG5jaV9kZXYgKm5kZXYpXFxubmV0L25mYy9uY2kvaGNpLmMtODY0LXtcXG5uZXQvbmZjL25jaS9oY2kuYzo4NjU6XFx0a2ZyZWUobmRldi1cXHUwMDNlaGNpX2Rldik7XFxubmV0L25mYy9uY2kvaGNpLmMtODY2LX1cXG4tLVxcbm5ldC9uZmMvbmNpL250Zi5jLTExLSAqICBBY2tub3dsZWRnZW1lbnRzOlxcbm5ldC9uZmMvbmNpL250Zi5jOjEyOiAqICBUaGlzIGZpbGUgaXMgYmFzZWQgb24gaGNpX2V2ZW50LmMsIHdoaWNoIHdhcyB3cml0dGVuXFxubmV0L25mYy9uY2kvbnRmLmMtMTMtICogIGJ5IE1heGltIEtyYXNueWFuc2t5Llxcbi0tXFxubmV0L25mYy9uY2kvbnRmLmM9OTU0PXN0YXRpYyBpbnQgbmNpX25mY2VlX2Rpc2NvdmVyX250Zl9wYWNrZXQoc3RydWN0IG5jaV9kZXYgKm5kZXYsXFxuLS1cXG5uZXQvbmZjL25jaS9udGYuYy05NjktXFx0ICovXFxubmV0L25mYy9uY2kvbnRmLmM6OTcwOlxcdG5kZXYtXFx1MDAzZWhjaV9kZXYtXFx1MDAzZW5mY2VlX2lkID0gbmZjZWVfbnRmLVxcdTAwM2VuZmNlZV9pZDtcXG5uZXQvbmZjL25jaS9udGYuYy05NzEtXFx0bmRldi1cXHUwMDNlY3VyX3BhcmFtcy5pZCA9IG5mY2VlX250Zi1cXHUwMDNlbmZjZWVfaWQ7XFxuLS1cXG5uZXQvbmZjL25jaS9yc3AuYy0xMC0gKiAgQWNrbm93bGVkZ2VtZW50czpcXG5uZXQvbmZjL25jaS9yc3AuYzoxMTogKiAgVGhpcyBmaWxlIGlzIGJhc2VkIG9uIGhjaV9ldmVudC5jLCB3aGljaCB3YXMgd3JpdHRlblxcbm5ldC9uZmMvbmNpL3JzcC5jLTEyLSAqICBieSBNYXhpbSBLcmFzbnlhbnNreS5cXG4tLVxcbm5ldC9uZmMvbmNpL3JzcC5jPTI4NT1zdGF0aWMgdm9pZCBuY2lfY29yZV9jb25uX2NyZWF0ZV9yc3BfcGFja2V0KHN0cnVjdCBuY2lfZGV2ICpuZGV2LFxcbi0tXFxubmV0L25mYy9uY2kvcnNwLmMtMzI2LVxcbm5ldC9uZmMvbmNpL3JzcC5jOjMyNzpcXHRcXHRpZiAobmRldi1cXHUwMDNlY3VyX3BhcmFtcy5pZCA9PSBuZGV2LVxcdTAwM2VoY2lfZGV2LVxcdTAwM2VuZmNlZV9pZClcXG5uZXQvbmZjL25jaS9yc3AuYzozMjg6XFx0XFx0XFx0bmRldi1cXHUwMDNlaGNpX2Rldi1cXHUwMDNlY29ubl9pbmZvID0gY29ubl9pbmZvO1xcbm5ldC9uZmMvbmNpL3JzcC5jLTMyOS1cXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2bmRldi1cXHUwMDNlY29ubl9pbmZvX2xvY2spO1xcbi0tXFxubmV0L25mYy9uY2kvcnNwLmM9MzQwPXN0YXRpYyB2b2lkIG5jaV9jb3JlX2Nvbm5fY2xvc2VfcnNwX3BhY2tldChzdHJ1Y3QgbmNpX2RldiAqbmRldixcXG4tLVxcbm5ldC9uZmMvbmNpL3JzcC5jLTM1NC1cXHRcXHRcXHRcXHRuZGV2LVxcdTAwM2VyZl9jb25uX2luZm8gPSBOVUxMO1xcbm5ldC9uZmMvbmNpL3JzcC5jOjM1NTpcXHRcXHRcXHRpZiAoY29ubl9pbmZvID09IG5kZXYtXFx1MDAzZWhjaV9kZXYtXFx1MDAzZWNvbm5faW5mbylcXG5uZXQvbmZjL25jaS9yc3AuYzozNTY6XFx0XFx0XFx0XFx0bmRldi1cXHUwMDNlaGNpX2Rldi1cXHUwMDNlY29ubl9pbmZvID0gTlVMTDtcXG5uZXQvbmZjL25jaS9yc3AuYy0zNTctXFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQwOToyNjozNy40MTExNDAxNTNaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjI1MTUzOTQ1MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTkZDIE5DSSBDb25maWd1cmF0aW9uIGFuZCBGdXp6aW5nIFN0cmF0ZWd5KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIGZvciB0aGUgTkZDIE5DSSBzdWJzeXN0ZW0uIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gcGlucG9pbnQgd2hlcmUgYG5jaV9oY2lfc2VuZF9jbWRgIGxpdmVzLCBhbmQgaXQncyBpbiBgbmV0L25mYy9uY2kvaGNpLmNgLCBwYXJ0IG9mIHRoZSBgTkZDX05DSWAgY29tcG9uZW50LiBUaGVyZWZvcmUsIHRoYXQncyBkZWZpbml0ZWx5IG5lZWRlZC4gSSdsbCBza2lwIG92ZXIgYE5GQ19IQ0lgIGJlY2F1c2UgdGhhdCdzIGEgZGlmZmVyZW50IGltcGxlbWVudGF0aW9uIGluIGBuZXQvbmZjL2hjaS9gLlxuXG5TbywgZm9yIGNvbmZpZ3VyYXRpb24sIHdlIG5lZWQgYE5GQ2AsIGBORkNfTkNJYCwgYW5kIGBORkNfVklSVFVBTF9OQ0lgLiBMZXQgbWUgZG91YmxlLWNoZWNrIHRoZSBleGFjdCBuYW1lIG9mIGBORkNfVklSVFVBTF9OQ0lgIGFuZCB5ZXAsIGl0J3MgZGVmaW5lZCBhcyBgQ09ORklHX05GQ19WSVJUVUFMX05DSWAgaW4gYGRyaXZlcnMvbmZjL0tjb25maWdgLlxuXG5Ob3csIHRoZSBpbXBvcnRhbnQgcGFydDogZm9jdXMgc3ltYm9scyBmb3IgZnV6emluZy4gSSBuZWVkIHRvIGxpc3QgZnVuY3Rpb25zIHRoYXQgYXJlIHJlbGV2YW50IHRvIHRoZXNlIGNvbmN1cnJlbmN5IGZpeGVzLiAgSSdtIHRoaW5raW5nIG9mIGZvY3VzaW5nIG9uIHRoaW5ncyBsaWtlIGBuY2lfbmZjY19sb29wYmFja2AsIGBuY2lfdHJhbnNjZWl2ZWAsIGBuY2lfc2VuZF9kYXRhYCwgYG5jaV9yeF9kYXRhX3BhY2tldGAsIHRoZSBpbXBvcnRhbnQgYG5jaV9oY2lfc2VuZF9jbWRgLCBhbmQgdGhlbiBhbHNvIGBuY2lfaGNpX3NldF9wYXJhbWAsIGFuZCBgbmNpX2hjaV9nZXRfcGFyYW1gLiBBbHNvIGNvcmUgZnVuY3Rpb25zIHN1Y2ggYXMgYG5jaV9jb3JlX2Nvbm5fY3JlYXRlX3JzcF9wYWNrZXRgLCBgbmNpX2NvcmVfY29ubl9jbG9zZV9yc3BfcGFja2V0YCwgYW5kIGBuY2lfcmZfZGlzY19yc3BfcGFja2V0YC5cblxuQSBjcnVjaWFsIHBvaW50IGlzIHdoZXRoZXIgYG5jaV9jb3JlX2Nvbm5fY3JlYXRlX3JzcF9wYWNrZXRgIGlzIHN0YXRpYyBvciBleHBvcnRlZC4gSXQgdHVybnMgb3V0IHRvIGJlIHN0YXRpYywgYnV0IHN5emthbGxlciBjYW4gc3RpbGwgcmVhY2ggaXQgdGhyb3VnaCBgbmNpX3JzcF9wYWNrZXRgLCB3aGljaCBpbiB0dXJuIGlzIGNhbGxlZCBmcm9tIGBuY2lfcnhfd29ya2Agd2hlbiBkYXRhIGNvbWVzIGZyb20gdGhlIE5GQyBjb250cm9sbGVyLiAgQmVjYXVzZSBgTkZDX1ZJUlRVQUxfTkNJYCBhbGxvd3Mgc2ltdWxhdGluZyBhbiBORkMgY29udHJvbGxlciwgd2UgY2FuIGluamVjdCByZXNwb25zZXMgYW5kIHRyaWdnZXIgYG5jaV9jb3JlX2Nvbm5fY3JlYXRlX3JzcF9wYWNrZXRgIGluZGlyZWN0bHkuIFRoZXJlZm9yZSwgSSBjYW4gc3RpbGwgbGlzdCBwYWNrZXQgaGFuZGxlcnMgaW4gZm9jdXMgc3ltYm9scy4gRXZlbiB0aG91Z2ggdGhleSBhcmUgc3RhdGljLCBzeXprYWxsZXIgd2lsbCBzdGlsbCBiZSBhYmxlIHRvIGZ1enogaXQgdmlhIGtjb3YuXG5cbkxldCdzIGV4cGFuZCB0aGF0IGxpc3Qgd2l0aCBhIGZldyBtb3JlIHBhY2tldCBoYW5kbGVycyB0byBlbnN1cmUgZnVsbCBjb3ZlcmFnZTogSSdtIGFkZGluZyBgbmNpX2NvcmVfY29ubl9jcmVkaXRzX250Zl9wYWNrZXRgLCBgbmNpX3JmX2ludGZfYWN0aXZhdGVkX250Zl9wYWNrZXRgIGFuZCBgbmNpX3JmX2RlYWN0aXZhdGVfbnRmX3BhY2tldGAuXG5cblNvIGhlcmUgaXMgdGhlIGZ1bGwgbGlzdDogYG5jaV9uZmNjX2xvb3BiYWNrYCwgYG5jaV90cmFuc2NlaXZlYCwgYG5jaV9zZW5kX2RhdGFgLCBgbmNpX3J4X2RhdGFfcGFja2V0YCwgYG5jaV9oY2lfc2VuZF9jbWRgLCBgbmNpX2hjaV9zZXRfcGFyYW1gLCBgbmNpX2hjaV9nZXRfcGFyYW1gLCBgbmNpX2NvcmVfY29ubl9jcmVhdGVfcnNwX3BhY2tldGAsIGBuY2lfY29yZV9jb25uX2Nsb3NlX3JzcF9wYWNrZXRgLCBgbmNpX3JmX2Rpc2NfcnNwX3BhY2tldGAsIGBuY2lfY29yZV9jb25uX2NyZWRpdHNfbnRmX3BhY2tldGAsIGBuY2lfcmZfaW50Zl9hY3RpdmF0ZWRfbnRmX3BhY2tldGAsIGFuZCBgbmNpX3JmX2RlYWN0aXZhdGVfbnRmX3BhY2tldGAuIEl0IHNlZW1zIHRoaXMgaXMgYSBnb29kIGxpc3Qgb2YgZnVuY3Rpb25zIHRoYXQgd2VyZSB0b3VjaGVkIGluIHRoaXMgcGF0Y2guXG5cbkkgd2lsbCBkb3VibGUtY2hlY2sgYWdhaW4gdGhhdCBgTkZDX1ZJUlRVQUxfTkNJYCBpcyB0aGUgcmlnaHQgY29uZmlndXJhdGlvbiBvcHRpb24sIGFuZCB5ZXMsIGBkcml2ZXJzL25mYy9LY29uZmlnYCBjb25maXJtcyB0aGF0IGl0IGRlcGVuZHMgb24gYE5GQ19OQ0lgLlxuXG5JJ2xsIGFsc28gbWFrZSBzdXJlIG5vIG90aGVyIGNvbmZpZ3VyYXRpb25zIGFyZSByZXF1aXJlZC4gSXQgbG9va3MgbGlrZSBgTkZDYCBhbmQgYE5GQ19OQ0lgIGFyZSBuZWNlc3NhcnkgYXMgd2VsbC4gYE5GQ19WSVJUVUFMX05DSWAgaGFzIGEgZGVwZW5kZW5jeSBvbiBgTkZDX05DSWAuXG5cblRoZXJlZm9yZSwgdGhlIGZpbmFsIHNldHVwIGlzOlxuXG4qICAgKipXb3J0aEZ1enppbmc6KiogYHRydWVgXG4qICAgKipGb2N1c1N5bWJvbHM6KipcbiAgICAqICAgYG5jaV9uZmNjX2xvb3BiYWNrYFxuICAgICogICBgbmNpX3RyYW5zY2VpdmVgXG4gICAgKiAgIGBuY2lfc2VuZF9kYXRhYFxuICAgICogICBgbmNpX3J4X2RhdGFfcGFja2V0YFxuICAgICogICBgbmNpX2hjaV9zZW5kX2NtZGBcbiAgICAqICAgYG5jaV9oY2lfc2V0X3BhcmFtYFxuICAgICogICBgbmNpX2hjaV9nZXRfcGFyYW1gXG4gICAgKiAgIGBuY2lfY29yZV9jb25uX2NyZWF0ZV9yc3BfcGFja2V0YFxuICAgICogICBgbmNpX2NvcmVfY29ubl9jbG9zZV9yc3BfcGFja2V0YFxuICAgICogICBgbmNpX3JmX2Rpc2NfcnNwX3BhY2tldGBcbiAgICAqICAgYG5jaV9jb3JlXG5cbiIsIklucHV0VG9rZW5zIjo0MzIzNCwiT3V0cHV0VG9rZW5zIjoyNjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTM1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDA5OjI2OjU5LjkyNjU0MDk4NloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMzMzQwNTUyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZDXCIsXG4gICAgXCJORkNfTkNJXCIsXG4gICAgXCJORkNfVklSVFVBTF9OQ0lcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuY2lfbmZjY19sb29wYmFja1wiLFxuICAgIFwibmNpX3RyYW5zY2VpdmVcIixcbiAgICBcIm5jaV9zZW5kX2RhdGFcIixcbiAgICBcIm5jaV9yeF9kYXRhX3BhY2tldFwiLFxuICAgIFwibmNpX2hjaV9zZW5kX2NtZFwiLFxuICAgIFwibmNpX2hjaV9zZXRfcGFyYW1cIixcbiAgICBcIm5jaV9oY2lfZ2V0X3BhcmFtXCIsXG4gICAgXCJuY2lfY29yZV9jb25uX2NyZWF0ZV9yc3BfcGFja2V0XCIsXG4gICAgXCJuY2lfY29yZV9jb25uX2Nsb3NlX3JzcF9wYWNrZXRcIixcbiAgICBcIm5jaV9yZl9kaXNjX3JzcF9wYWNrZXRcIixcbiAgICBcIm5jaV9jb3JlX2Nvbm5fY3JlZGl0c19udGZfcGFja2V0XCIsXG4gICAgXCJuY2lfcmZfaW50Zl9hY3RpdmF0ZWRfbnRmX3BhY2tldFwiLFxuICAgIFwibmNpX3JmX2RlYWN0aXZhdGVfbnRmX3BhY2tldFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGNvbmN1cnJlbmN5IGlzc3VlcyBpbiB0aGUgTkZDIE5DSSBjb3JlIGJ5IGludHJvZHVjaW5nIGEgc3BpbmxvY2sgdG8gcHJvdGVjdCBjb25uZWN0aW9uIGluZm8gbGlzdHMgYW5kIHBvaW50ZXJzLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIGRhdGEgdHJhbnNtaXNzaW9uLCByZWNlcHRpb24sIGFuZCBIQ0kgY29tbWFuZCBoYW5kbGluZywgd2hpY2ggYXJlIHJlYWNoYWJsZSB2aWEgdGhlIHZpcnR1YWwgTkNJIGRyaXZlci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORkNcIixcbiAgICBcIk5GQ19OQ0lcIixcbiAgICBcIk5GQ19WSVJUVUFMX05DSVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5jaV9uZmNjX2xvb3BiYWNrXCIsXG4gICAgXCJuY2lfdHJhbnNjZWl2ZVwiLFxuICAgIFwibmNpX3NlbmRfZGF0YVwiLFxuICAgIFwibmNpX3J4X2RhdGFfcGFja2V0XCIsXG4gICAgXCJuY2lfaGNpX3NlbmRfY21kXCIsXG4gICAgXCJuY2lfaGNpX3NldF9wYXJhbVwiLFxuICAgIFwibmNpX2hjaV9nZXRfcGFyYW1cIixcbiAgICBcIm5jaV9jb3JlX2Nvbm5fY3JlYXRlX3JzcF9wYWNrZXRcIixcbiAgICBcIm5jaV9jb3JlX2Nvbm5fY2xvc2VfcnNwX3BhY2tldFwiLFxuICAgIFwibmNpX3JmX2Rpc2NfcnNwX3BhY2tldFwiLFxuICAgIFwibmNpX2NvcmVfY29ubl9jcmVkaXRzX250Zl9wYWNrZXRcIixcbiAgICBcIm5jaV9yZl9pbnRmX2FjdGl2YXRlZF9udGZfcGFja2V0XCIsXG4gICAgXCJuY2lfcmZfZGVhY3RpdmF0ZV9udGZfcGFja2V0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgY29uY3VycmVuY3kgaXNzdWVzIGluIHRoZSBORkMgTkNJIGNvcmUgYnkgaW50cm9kdWNpbmcgYSBzcGlubG9jayB0byBwcm90ZWN0IGNvbm5lY3Rpb24gaW5mbyBsaXN0cyBhbmQgcG9pbnRlcnMuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGNvcmUgZGF0YSB0cmFuc21pc3Npb24sIHJlY2VwdGlvbiwgYW5kIEhDSSBjb21tYW5kIGhhbmRsaW5nLCB3aGljaCBhcmUgcmVhY2hhYmxlIHZpYSB0aGUgdmlydHVhbCBOQ0kgZHJpdmVyLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow64rfd[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-30 09:07:39 +0000 UTC FinishedAt: 2026-06-30 09:27:01 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "1398b1014909618f65ff6bcebcb2ee5ccd44fdc0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NFC", "NFC_NCI", "NFC_VIRTUAL_NCI" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "1398b1014909618f65ff6bcebcb2ee5ccd44fdc0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NFC", "NFC_NCI", "NFC_VIRTUAL_NCI" ], "series_id": "dd88a4e9-9d49-42de-9e06-843511f3fdca" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "nci_nfcc_loopback", "nci_transceive", "nci_send_data", "nci_rx_data_packet", "nci_hci_send_cmd", "nci_hci_set_param", "nci_hci_get_param", "nci_core_conn_create_rsp_packet", "nci_core_conn_close_rsp_packet", "nci_rf_disc_rsp_packet", "nci_core_conn_credits_ntf_packet", "nci_rf_intf_activated_ntf_packet", "nci_rf_deactivate_ntf_packet" ], "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+CgkJCTx0ZD4yMDI2LzA2LzMwIDA5OjI1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GQyYjMzQ7LAogICAgJiMzNDtORkNfTkNJJiMzNDssCiAgICAmIzM0O05GQ19WSVJUVUFMX05DSSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25jaV9uZmNjX2xvb3BiYWNrJiMzNDssCiAgICAmIzM0O25jaV90cmFuc2NlaXZlJiMzNDssCiAgICAmIzM0O25jaV9zZW5kX2RhdGEmIzM0OywKICAgICYjMzQ7bmNpX3J4X2RhdGFfcGFja2V0JiMzNDssCiAgICAmIzM0O25jaV9oY2lfc2VuZF9jbWQmIzM0OywKICAgICYjMzQ7bmNpX2hjaV9zZXRfcGFyYW0mIzM0OywKICAgICYjMzQ7bmNpX2hjaV9nZXRfcGFyYW0mIzM0OywKICAgICYjMzQ7bmNpX2NvcmVfY29ubl9jcmVhdGVfcnNwX3BhY2tldCYjMzQ7LAogICAgJiMzNDtuY2lfY29yZV9jb25uX2Nsb3NlX3JzcF9wYWNrZXQmIzM0OywKICAgICYjMzQ7bmNpX3JmX2Rpc2NfcnNwX3BhY2tldCYjMzQ7LAogICAgJiMzNDtuY2lfY29yZV9jb25uX2NyZWRpdHNfbnRmX3BhY2tldCYjMzQ7LAogICAgJiMzNDtuY2lfcmZfaW50Zl9hY3RpdmF0ZWRfbnRmX3BhY2tldCYjMzQ7LAogICAgJiMzNDtuY2lfcmZfZGVhY3RpdmF0ZV9udGZfcGFja2V0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGNvbmN1cnJlbmN5IGlzc3VlcyBpbiB0aGUgTkZDIE5DSSBjb3JlIGJ5IGludHJvZHVjaW5nIGEgc3BpbmxvY2sgdG8gcHJvdGVjdCBjb25uZWN0aW9uIGluZm8gbGlzdHMgYW5kIHBvaW50ZXJzLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIGRhdGEgdHJhbnNtaXNzaW9uLCByZWNlcHRpb24sIGFuZCBIQ0kgY29tbWFuZCBoYW5kbGluZywgd2hpY2ggYXJlIHJlYWNoYWJsZSB2aWEgdGhlIHZpcnR1YWwgTkNJIGRyaXZlci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAwOToyNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGFlNTVlODhkN2E0ZjcxMDViNDQ4NjgyMmUzYWRmNTM4OGYxYjhhMDBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1biAzMCAwOToyNToyOSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25mYy9zdC1uY2kvc2UuYyBiL2RyaXZlcnMvbmZjL3N0LW5jaS9zZS5jXG5pbmRleCA2MDdlYzc2OGViN2I0Yy4uMWY4ZTIyNjVlMjBiMDcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25mYy9zdC1uY2kvc2UuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZmMvc3QtbmNpL3NlLmNcbkBAIC01NDgsNiAmIzQzOzU0OCw3IEBAIHN0YXRpYyBpbnQgc3RfbmNpX2hjaV9uZXR3b3JrX2luaXQoc3RydWN0IG5jaV9kZXYgKm5kZXYpXG4gXHRzdHJ1Y3QgY29yZV9jb25uX2NyZWF0ZV9kZXN0X3NwZWNfcGFyYW1zICpkZXN0X3BhcmFtcztcbiBcdHN0cnVjdCBkZXN0X3NwZWNfcGFyYW1zIHNwZWNfcGFyYW1zO1xuIFx0c3RydWN0IG5jaV9jb25uX2luZm8gICAgKmNvbm5faW5mbztcbiYjNDM7XHR1OCBuZmNlZV9pZDtcbiBcdGludCByLCBkZXZfbnVtO1xuIFxuIFx0ZGVzdF9wYXJhbXMgPVxuQEAgLTU2OSw5ICYjNDM7NTcwLDE0IEBAIHN0YXRpYyBpbnQgc3RfbmNpX2hjaV9uZXR3b3JrX2luaXQoc3RydWN0IG5jaV9kZXYgKm5kZXYpXG4gXHRpZiAociAhPSBOQ0lfU1RBVFVTX09LKVxuIFx0XHRnb3RvIGZyZWVfZGVzdF9wYXJhbXM7XG4gXG4mIzQzO1x0c3Bpbl9sb2NrX2JoKFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xuIFx0Y29ubl9pbmZvID0gbmRldi1cdTAwM2VoY2lfZGV2LVx1MDAzZWNvbm5faW5mbztcbi1cdGlmICghY29ubl9pbmZvKVxuJiM0MztcdGlmICghY29ubl9pbmZvKSB7XG4mIzQzO1x0XHRzcGluX3VubG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbiBcdFx0Z290byBmcmVlX2Rlc3RfcGFyYW1zO1xuJiM0MztcdH1cbiYjNDM7XHRuZmNlZV9pZCA9IGNvbm5faW5mby1cdTAwM2VkZXN0X3BhcmFtcy1cdTAwM2VpZDtcbiYjNDM7XHRzcGluX3VubG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbiBcbiBcdG5kZXYtXHUwMDNlaGNpX2Rldi1cdTAwM2Vpbml0X2RhdGEuZ2F0ZV9jb3VudCA9IEFSUkFZX1NJWkUoc3RfbmNpX2dhdGVzKTtcbiBcdG1lbWNweShuZGV2LVx1MDAzZWhjaV9kZXYtXHUwMDNlaW5pdF9kYXRhLmdhdGVzLCBzdF9uY2lfZ2F0ZXMsXG5AQCAtNjAxLDEzICYjNDM7NjA3LDkgQEAgc3RhdGljIGludCBzdF9uY2lfaGNpX25ldHdvcmtfaW5pdChzdHJ1Y3QgbmNpX2RldiAqbmRldilcbiBcdCAqIEhDSSB3aWxsIGJlIHVzZWQgaGVyZSBvbmx5IGZvciBwcm9wcmlldGFyeSBjb21tYW5kcy5cbiBcdCAqL1xuIFx0aWYgKHRlc3RfYml0KFNUX05DSV9GQUNUT1JZX01PREUsIFx1MDAyNmluZm8tXHUwMDNlZmxhZ3MpKVxuLVx0XHRyID0gbmNpX25mY2VlX21vZGVfc2V0KG5kZXYsXG4tXHRcdFx0XHQgICAgICAgbmRldi1cdTAwM2VoY2lfZGV2LVx1MDAzZWNvbm5faW5mby1cdTAwM2VkZXN0X3BhcmFtcy1cdTAwM2VpZCxcbi1cdFx0XHRcdCAgICAgICBOQ0lfTkZDRUVfRElTQUJMRSk7XG4mIzQzO1x0XHRyID0gbmNpX25mY2VlX21vZGVfc2V0KG5kZXYsIG5mY2VlX2lkLCBOQ0lfTkZDRUVfRElTQUJMRSk7XG4gXHRlbHNlXG4tXHRcdHIgPSBuY2lfbmZjZWVfbW9kZV9zZXQobmRldixcbi1cdFx0XHRcdCAgICAgICBuZGV2LVx1MDAzZWhjaV9kZXYtXHUwMDNlY29ubl9pbmZvLVx1MDAzZWRlc3RfcGFyYW1zLVx1MDAzZWlkLFxuLVx0XHRcdFx0ICAgICAgIE5DSV9ORkNFRV9FTkFCTEUpO1xuJiM0MztcdFx0ciA9IG5jaV9uZmNlZV9tb2RlX3NldChuZGV2LCBuZmNlZV9pZCwgTkNJX05GQ0VFX0VOQUJMRSk7XG4gXG4gZnJlZV9kZXN0X3BhcmFtczpcbiBcdGtmcmVlKGRlc3RfcGFyYW1zKTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZmMvbmNpX2NvcmUuaCBiL2luY2x1ZGUvbmV0L25mYy9uY2lfY29yZS5oXG5pbmRleCA2NjRkNTA1OGU2NmUwMS4uYTViMTg2ZjI3M2Q5NzQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9uZmMvbmNpX2NvcmUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvbmZjL25jaV9jb3JlLmhcbkBAIC0xOSw2ICYjNDM7MTksNyBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ludGVycnVwdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2tidWZmLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvc3BpbmxvY2suaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3R0eS5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXHUwMDNjbmV0L25mYy9uZmMuaFx1MDAzZVxuQEAgLTIyNyw2ICYjNDM7MjI4LDggQEAgc3RydWN0IG5jaV9kZXYge1xuIFx0c3RydWN0IHNrX2J1ZmZfaGVhZFx0dHhfcTtcbiBcbiBcdHN0cnVjdCBtdXRleFx0XHRyZXFfbG9jaztcbiYjNDM7XHQvKiBTZXJpYWxpemVzIGNvbm5faW5mb19saXN0IGFuZCBjb25uX2luZm8gcG9pbnRlciBhbGlhcyB1cGRhdGVzLiAqL1xuJiM0MztcdHNwaW5sb2NrX3RcdFx0Y29ubl9pbmZvX2xvY2s7XG4gXHRzdHJ1Y3QgY29tcGxldGlvblx0cmVxX2NvbXBsZXRpb247XG4gXHRfX3UzMlx0XHRcdHJlcV9zdGF0dXM7XG4gXHRfX3UzMlx0XHRcdHJlcV9yZXN1bHQ7XG5AQCAtMzgyLDggJiM0MzszODUsMTEgQEAgdm9pZCBuY2lfY2xlYXJfdGFyZ2V0X2xpc3Qoc3RydWN0IG5jaV9kZXYgKm5kZXYpO1xuICNkZWZpbmUgTkNJX1JFUV9DQU5DRUxFRFx0MlxuIFxuIHZvaWQgbmNpX3JlcV9jb21wbGV0ZShzdHJ1Y3QgbmNpX2RldiAqbmRldiwgaW50IHJlc3VsdCk7XG4tc3RydWN0IG5jaV9jb25uX2luZm8gKm5jaV9nZXRfY29ubl9pbmZvX2J5X2Nvbm5faWQoc3RydWN0IG5jaV9kZXYgKm5kZXYsXG4tXHRcdFx0XHRcdFx0ICAgaW50IGNvbm5faWQpO1xuJiM0MztzdHJ1Y3QgbmNpX2Nvbm5faW5mbyAqbmNpX2dldF9jb25uX2luZm9fYnlfY29ubl9pZF9sb2NrZWQoc3RydWN0IG5jaV9kZXYgKm5kZXYsXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICBpbnQgY29ubl9pZCk7XG4mIzQzO2ludCBuY2lfZ2V0X2Nvbm5faW5mb19ieV9kZXN0X3R5cGVfcGFyYW1zX2xvY2tlZChzdHJ1Y3QgbmNpX2RldiAqbmRldixcbiYjNDM7XHRcdFx0XHRcdFx0IHU4IGRlc3RfdHlwZSxcbiYjNDM7XHRcdFx0XHRcdFx0IGNvbnN0IHN0cnVjdCBkZXN0X3NwZWNfcGFyYW1zICpwYXJhbXMpO1xuIGludCBuY2lfZ2V0X2Nvbm5faW5mb19ieV9kZXN0X3R5cGVfcGFyYW1zKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCB1OCBkZXN0X3R5cGUsXG4gXHRcdFx0XHRcdCAgY29uc3Qgc3RydWN0IGRlc3Rfc3BlY19wYXJhbXMgKnBhcmFtcyk7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L25mYy9uY2kvY29yZS5jIGIvbmV0L25mYy9uY2kvY29yZS5jXG5pbmRleCA1ZjQ2YzRiNTcyMGY2Yy4uNTc1OTVhODI5YzhiMDYgMTAwNjQ0XG4tLS0gYS9uZXQvbmZjL25jaS9jb3JlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZmMvbmNpL2NvcmUuY1xuQEAgLTQwLDggJiM0Mzs0MCw4IEBAIHN0YXRpYyB2b2lkIG5jaV9jbWRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xuIHN0YXRpYyB2b2lkIG5jaV9yeF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XG4gc3RhdGljIHZvaWQgbmNpX3R4X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcbiBcbi1zdHJ1Y3QgbmNpX2Nvbm5faW5mbyAqbmNpX2dldF9jb25uX2luZm9fYnlfY29ubl9pZChzdHJ1Y3QgbmNpX2RldiAqbmRldixcbi1cdFx0XHRcdFx0XHQgICBpbnQgY29ubl9pZClcbiYjNDM7c3RydWN0IG5jaV9jb25uX2luZm8gKm5jaV9nZXRfY29ubl9pbmZvX2J5X2Nvbm5faWRfbG9ja2VkKHN0cnVjdCBuY2lfZGV2ICpuZGV2LFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgaW50IGNvbm5faWQpXG4ge1xuIFx0c3RydWN0IG5jaV9jb25uX2luZm8gKmNvbm5faW5mbztcbiBcbkBAIC01Myw4ICYjNDM7NTMsOSBAQCBzdHJ1Y3QgbmNpX2Nvbm5faW5mbyAqbmNpX2dldF9jb25uX2luZm9fYnlfY29ubl9pZChzdHJ1Y3QgbmNpX2RldiAqbmRldixcbiBcdHJldHVybiBOVUxMO1xuIH1cbiBcbi1pbnQgbmNpX2dldF9jb25uX2luZm9fYnlfZGVzdF90eXBlX3BhcmFtcyhzdHJ1Y3QgbmNpX2RldiAqbmRldiwgdTggZGVzdF90eXBlLFxuLVx0XHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBkZXN0X3NwZWNfcGFyYW1zICpwYXJhbXMpXG4mIzQzO2ludCBuY2lfZ2V0X2Nvbm5faW5mb19ieV9kZXN0X3R5cGVfcGFyYW1zX2xvY2tlZChzdHJ1Y3QgbmNpX2RldiAqbmRldixcbiYjNDM7XHRcdFx0XHRcdFx0IHU4IGRlc3RfdHlwZSxcbiYjNDM7XHRcdFx0XHRcdFx0IGNvbnN0IHN0cnVjdCBkZXN0X3NwZWNfcGFyYW1zICpwYXJhbXMpXG4ge1xuIFx0Y29uc3Qgc3RydWN0IG5jaV9jb25uX2luZm8gKmNvbm5faW5mbztcbiBcbkBAIC03MSw2ICYjNDM7NzIsMTkgQEAgaW50IG5jaV9nZXRfY29ubl9pbmZvX2J5X2Rlc3RfdHlwZV9wYXJhbXMoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHU4IGRlc3RfdHlwZSxcbiBcbiBcdHJldHVybiAtRUlOVkFMO1xuIH1cbiYjNDM7XG4mIzQzO2ludCBuY2lfZ2V0X2Nvbm5faW5mb19ieV9kZXN0X3R5cGVfcGFyYW1zKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCB1OCBkZXN0X3R5cGUsXG4mIzQzO1x0XHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBkZXN0X3NwZWNfcGFyYW1zICpwYXJhbXMpXG4mIzQzO3tcbiYjNDM7XHRpbnQgY29ubl9pZDtcbiYjNDM7XG4mIzQzO1x0c3Bpbl9sb2NrX2JoKFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xuJiM0MztcdGNvbm5faWQgPSBuY2lfZ2V0X2Nvbm5faW5mb19ieV9kZXN0X3R5cGVfcGFyYW1zX2xvY2tlZChuZGV2LCBkZXN0X3R5cGUsXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgICAgIHBhcmFtcyk7XG4mIzQzO1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bmRldi1cdTAwM2Vjb25uX2luZm9fbG9jayk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBjb25uX2lkO1xuJiM0Mzt9XG4gRVhQT1JUX1NZTUJPTChuY2lfZ2V0X2Nvbm5faW5mb19ieV9kZXN0X3R5cGVfcGFyYW1zKTtcbiBcbiAvKiAtLS0tIE5DSSByZXF1ZXN0cyAtLS0tICovXG5AQCAtNDExLDEzICYjNDM7NDI1LDE3IEBAIHN0YXRpYyB2b2lkIG5jaV9uZmNjX2xvb3BiYWNrX2NiKHZvaWQgKmNvbnRleHQsIHN0cnVjdCBza19idWZmICpza2IsIGludCBlcnIpXG4gXHRzdHJ1Y3QgbmNpX2RldiAqbmRldiA9IChzdHJ1Y3QgbmNpX2RldiAqKWNvbnRleHQ7XG4gXHRzdHJ1Y3QgbmNpX2Nvbm5faW5mbyAqY29ubl9pbmZvO1xuIFxuLVx0Y29ubl9pbmZvID0gbmNpX2dldF9jb25uX2luZm9fYnlfY29ubl9pZChuZGV2LCBuZGV2LVx1MDAzZWN1cl9jb25uX2lkKTtcbiYjNDM7XHRzcGluX2xvY2tfYmgoXHUwMDI2bmRldi1cdTAwM2Vjb25uX2luZm9fbG9jayk7XG4mIzQzO1x0Y29ubl9pbmZvID0gbmNpX2dldF9jb25uX2luZm9fYnlfY29ubl9pZF9sb2NrZWQobmRldixcbiYjNDM7XHRcdFx0XHRcdFx0XHRuZGV2LVx1MDAzZWN1cl9jb25uX2lkKTtcbiBcdGlmICghY29ubl9pbmZvKSB7XG4mIzQzO1x0XHRzcGluX3VubG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbiBcdFx0bmNpX3JlcV9jb21wbGV0ZShuZGV2LCBOQ0lfU1RBVFVTX1JFSkVDVEVEKTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuIFx0Y29ubl9pbmZvLVx1MDAzZXJ4X3NrYiA9IHNrYjtcbiYjNDM7XHRzcGluX3VubG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbiBcbiBcdG5jaV9yZXFfY29tcGxldGUobmRldiwgTkNJX1NUQVRVU19PSyk7XG4gfVxuQEAgLTQ0MywxMyAmIzQzOzQ2MSwxNyBAQCBpbnQgbmNpX25mY2NfbG9vcGJhY2soc3RydWN0IG5jaV9kZXYgKm5kZXYsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBkYXRhX2xlbixcbiBcdFx0XHRcdFx0TlVMTCk7XG4gXHR9XG4gXG4tXHRjb25uX2luZm8gPSBuY2lfZ2V0X2Nvbm5faW5mb19ieV9jb25uX2lkKG5kZXYsIGNvbm5faWQpO1xuLVx0aWYgKCFjb25uX2luZm8pXG4mIzQzO1x0c3Bpbl9sb2NrX2JoKFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xuJiM0MztcdGNvbm5faW5mbyA9IG5jaV9nZXRfY29ubl9pbmZvX2J5X2Nvbm5faWRfbG9ja2VkKG5kZXYsIGNvbm5faWQpO1xuJiM0MztcdGlmICghY29ubl9pbmZvKSB7XG4mIzQzO1x0XHRzcGluX3VubG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbiBcdFx0cmV0dXJuIC1FUFJPVE87XG4mIzQzO1x0fVxuIFxuIFx0Lyogc3RvcmUgY2IgYW5kIGNvbnRleHQgdG8gYmUgdXNlZCBvbiByZWNlaXZpbmcgZGF0YSAqL1xuIFx0Y29ubl9pbmZvLVx1MDAzZWRhdGFfZXhjaGFuZ2VfY2IgPSBuY2lfbmZjY19sb29wYmFja19jYjtcbiBcdGNvbm5faW5mby1cdTAwM2VkYXRhX2V4Y2hhbmdlX2NiX2NvbnRleHQgPSBuZGV2O1xuJiM0MztcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xuIFxuIFx0c2tiID0gbmNpX3NrYl9hbGxvYyhuZGV2LCBOQ0lfREFUQV9IRFJfU0laRSAmIzQzOyBkYXRhX2xlbiwgR0ZQX0tFUk5FTCk7XG4gXHRpZiAoIXNrYilcbkBAIC00NjQsOCAmIzQzOzQ4NiwxNSBAQCBpbnQgbmNpX25mY2NfbG9vcGJhY2soc3RydWN0IG5jaV9kZXYgKm5kZXYsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBkYXRhX2xlbixcbiBcdG5kZXYtXHUwMDNlY3VyX2Nvbm5faWQgPSBjb25uX2lkO1xuIFx0ciA9IG5jaV9yZXF1ZXN0KG5kZXYsIG5jaV9zZW5kX2RhdGFfcmVxLCBcdTAwMjZsb29wYmFja19kYXRhLFxuIFx0XHRcdG1zZWNzX3RvX2ppZmZpZXMoTkNJX0RBVEFfVElNRU9VVCkpO1xuLVx0aWYgKHIgPT0gTkNJX1NUQVRVU19PSyBcdTAwMjZcdTAwMjYgcmVzcClcbi1cdFx0KnJlc3AgPSBjb25uX2luZm8tXHUwMDNlcnhfc2tiO1xuJiM0MztcdGlmIChyID09IE5DSV9TVEFUVVNfT0sgXHUwMDI2XHUwMDI2IHJlc3ApIHtcbiYjNDM7XHRcdHNwaW5fbG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbiYjNDM7XHRcdGNvbm5faW5mbyA9IG5jaV9nZXRfY29ubl9pbmZvX2J5X2Nvbm5faWRfbG9ja2VkKG5kZXYsIGNvbm5faWQpO1xuJiM0MztcdFx0aWYgKGNvbm5faW5mbylcbiYjNDM7XHRcdFx0KnJlc3AgPSBjb25uX2luZm8tXHUwMDNlcnhfc2tiO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHRyID0gLUVQUk9UTztcbiYjNDM7XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xuJiM0MztcdH1cbiBcbiBcdHJldHVybiByO1xuIH1cbkBAIC0xMDQ1LDEyICYjNDM7MTA3NCw2IEBAIHN0YXRpYyBpbnQgbmNpX3RyYW5zY2VpdmUoc3RydWN0IG5mY19kZXYgKm5mY19kZXYsIHN0cnVjdCBuZmNfdGFyZ2V0ICp0YXJnZXQsXG4gXHRpbnQgcmM7XG4gXHRzdHJ1Y3QgbmNpX2Nvbm5faW5mbyAqY29ubl9pbmZvO1xuIFxuLVx0Y29ubl9pbmZvID0gbmRldi1cdTAwM2VyZl9jb25uX2luZm87XG4tXHRpZiAoIWNvbm5faW5mbykge1xuLVx0XHRrZnJlZV9za2Ioc2tiKTtcbi1cdFx0cmV0dXJuIC1FUFJPVE87XG4tXHR9XG4tXG4gXHRwcl9kZWJ1ZyhcJiMzNDt0YXJnZXRfaWR4ICVkLCBsZW4gJWRcXG5cJiMzNDssIHRhcmdldC1cdTAwM2VpZHgsIHNrYi1cdTAwM2VsZW4pO1xuIFxuIFx0aWYgKCFuZGV2LVx1MDAzZXRhcmdldF9hY3RpdmVfcHJvdCkge1xuQEAgLTEwNjQsOSAmIzQzOzEwODcsMTkgQEAgc3RhdGljIGludCBuY2lfdHJhbnNjZWl2ZShzdHJ1Y3QgbmZjX2RldiAqbmZjX2Rldiwgc3RydWN0IG5mY190YXJnZXQgKnRhcmdldCxcbiBcdFx0cmV0dXJuIC1FQlVTWTtcbiBcdH1cbiBcbiYjNDM7XHRzcGluX2xvY2tfYmgoXHUwMDI2bmRldi1cdTAwM2Vjb25uX2luZm9fbG9jayk7XG4mIzQzO1x0Y29ubl9pbmZvID0gbmRldi1cdTAwM2VyZl9jb25uX2luZm87XG4mIzQzO1x0aWYgKCFjb25uX2luZm8pIHtcbiYjNDM7XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xuJiM0MztcdFx0a2ZyZWVfc2tiKHNrYik7XG4mIzQzO1x0XHRjbGVhcl9iaXQoTkNJX0RBVEFfRVhDSEFOR0UsIFx1MDAyNm5kZXYtXHUwMDNlZmxhZ3MpO1xuJiM0MztcdFx0cmV0dXJuIC1FUFJPVE87XG4mIzQzO1x0fVxuJiM0MztcbiBcdC8qIHN0b3JlIGNiIGFuZCBjb250ZXh0IHRvIGJlIHVzZWQgb24gcmVjZWl2aW5nIGRhdGEgKi9cbiBcdGNvbm5faW5mby1cdTAwM2VkYXRhX2V4Y2hhbmdlX2NiID0gY2I7XG4gXHRjb25uX2luZm8tXHUwMDNlZGF0YV9leGNoYW5nZV9jYl9jb250ZXh0ID0gY2JfY29udGV4dDtcbiYjNDM7XHRzcGluX3VubG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbiBcbiBcdHJjID0gbmNpX3NlbmRfZGF0YShuZGV2LCBOQ0lfU1RBVElDX1JGX0NPTk5fSUQsIHNrYik7XG4gXHRpZiAocmMpXG5AQCAtMTI4OCw2ICYjNDM7MTMyMSw3IEBAIGludCBuY2lfcmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCBuY2lfZGV2ICpuZGV2KVxuIFx0dGltZXJfc2V0dXAoXHUwMDI2bmRldi1cdTAwM2VkYXRhX3RpbWVyLCBuY2lfZGF0YV90aW1lciwgMCk7XG4gXG4gXHRtdXRleF9pbml0KFx1MDAyNm5kZXYtXHUwMDNlcmVxX2xvY2spO1xuJiM0MztcdHNwaW5fbG9ja19pbml0KFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2bmRldi1cdTAwM2Vjb25uX2luZm9fbGlzdCk7XG4gXG4gXHRyYyA9IG5mY19yZWdpc3Rlcl9kZXZpY2UobmRldi1cdTAwM2VuZmNfZGV2KTtcbkBAIC0xMzMzLDExICYjNDM7MTM2NywxNiBAQCB2b2lkIG5jaV91bnJlZ2lzdGVyX2RldmljZShzdHJ1Y3QgbmNpX2RldiAqbmRldilcbiBcdGRlc3Ryb3lfd29ya3F1ZXVlKG5kZXYtXHUwMDNlcnhfd3EpO1xuIFx0ZGVzdHJveV93b3JrcXVldWUobmRldi1cdTAwM2V0eF93cSk7XG4gXG4mIzQzO1x0c3Bpbl9sb2NrX2JoKFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGNvbm5faW5mbywgbiwgXHUwMDI2bmRldi1cdTAwM2Vjb25uX2luZm9fbGlzdCwgbGlzdCkge1xuIFx0XHRsaXN0X2RlbChcdTAwMjZjb25uX2luZm8tXHUwMDNlbGlzdCk7XG4mIzQzO1x0XHRpZiAoY29ubl9pbmZvID09IG5kZXYtXHUwMDNlcmZfY29ubl9pbmZvKVxuJiM0MztcdFx0XHRuZGV2LVx1MDAzZXJmX2Nvbm5faW5mbyA9IE5VTEw7XG4mIzQzO1x0XHRpZiAoY29ubl9pbmZvID09IG5kZXYtXHUwMDNlaGNpX2Rldi1cdTAwM2Vjb25uX2luZm8pXG4mIzQzO1x0XHRcdG5kZXYtXHUwMDNlaGNpX2Rldi1cdTAwM2Vjb25uX2luZm8gPSBOVUxMO1xuIFx0XHQvKiBjb25uX2luZm8gaXMgYWxsb2NhdGVkIHdpdGggZGV2bV9remFsbG9jICovXG4gXHR9XG4tXG4mIzQzO1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bmRldi1cdTAwM2Vjb25uX2luZm9fbG9jayk7XG4gXHRuZmNfcmVtb3ZlX2RldmljZShuZGV2LVx1MDAzZW5mY19kZXYpO1xuIH1cbiBFWFBPUlRfU1lNQk9MKG5jaV91bnJlZ2lzdGVyX2RldmljZSk7XG5AQCAtMTUyMywyMyAmIzQzOzE1NjIsMzEgQEAgc3RhdGljIHZvaWQgbmNpX3R4X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFx0c3RydWN0IG5jaV9jb25uX2luZm8gKmNvbm5faW5mbztcbiBcdHN0cnVjdCBza19idWZmICpza2I7XG4gXG4tXHRjb25uX2luZm8gPSBuY2lfZ2V0X2Nvbm5faW5mb19ieV9jb25uX2lkKG5kZXYsIG5kZXYtXHUwMDNlY3VyX2Nvbm5faWQpO1xuLVx0aWYgKCFjb25uX2luZm8pXG4tXHRcdHJldHVybjtcbiYjNDM7XHQvKiBTZW5kIHF1ZXVlZCB0eCBkYXRhICovXG4mIzQzO1x0Zm9yICg7Oykge1xuJiM0MztcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xuJiM0MztcdFx0Y29ubl9pbmZvID0gbmNpX2dldF9jb25uX2luZm9fYnlfY29ubl9pZF9sb2NrZWQobmRldixcbiYjNDM7XHRcdFx0XHRcdFx0XHRcdG5kZXYtXHUwMDNlY3VyX2Nvbm5faWQpO1xuJiM0MztcdFx0aWYgKCFjb25uX2luZm8pXG4mIzQzO1x0XHRcdGdvdG8gdW5sb2NrO1xuIFxuLVx0cHJfZGVidWcoXCYjMzQ7Y3JlZGl0c19jbnQgJWRcXG5cJiMzNDssIGF0b21pY19yZWFkKFx1MDAyNmNvbm5faW5mby1cdTAwM2VjcmVkaXRzX2NudCkpO1xuJiM0MztcdFx0cHJfZGVidWcoXCYjMzQ7Y3JlZGl0c19jbnQgJWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCBhdG9taWNfcmVhZChcdTAwMjZjb25uX2luZm8tXHUwMDNlY3JlZGl0c19jbnQpKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoIWF0b21pY19yZWFkKFx1MDAyNmNvbm5faW5mby1cdTAwM2VjcmVkaXRzX2NudCkpXG4mIzQzO1x0XHRcdGdvdG8gdW5sb2NrO1xuIFxuLVx0LyogU2VuZCBxdWV1ZWQgdHggZGF0YSAqL1xuLVx0d2hpbGUgKGF0b21pY19yZWFkKFx1MDAyNmNvbm5faW5mby1cdTAwM2VjcmVkaXRzX2NudCkpIHtcbiBcdFx0c2tiID0gc2tiX2RlcXVldWUoXHUwMDI2bmRldi1cdTAwM2V0eF9xKTtcbiBcdFx0aWYgKCFza2IpXG4tXHRcdFx0cmV0dXJuO1xuLVx0XHRrY292X3JlbW90ZV9zdGFydF9jb21tb24oc2tiX2dldF9rY292X2hhbmRsZShza2IpKTtcbiYjNDM7XHRcdFx0Z290byB1bmxvY2s7XG4gXG4gXHRcdC8qIENoZWNrIGlmIGRhdGEgZmxvdyBjb250cm9sIGlzIHVzZWQgKi9cbiBcdFx0aWYgKGF0b21pY19yZWFkKFx1MDAyNmNvbm5faW5mby1cdTAwM2VjcmVkaXRzX2NudCkgIT1cbiBcdFx0ICAgIE5DSV9EQVRBX0ZMT1dfQ09OVFJPTF9OT1RfVVNFRClcbiBcdFx0XHRhdG9taWNfZGVjKFx1MDAyNmNvbm5faW5mby1cdTAwM2VjcmVkaXRzX2NudCk7XG4mIzQzO1x0XHRzcGluX3VubG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbiYjNDM7XG4mIzQzO1x0XHRrY292X3JlbW90ZV9zdGFydF9jb21tb24oc2tiX2dldF9rY292X2hhbmRsZShza2IpKTtcbiBcbiBcdFx0cHJfZGVidWcoXCYjMzQ7TkNJIFRYOiBNVD1kYXRhLCBQQkY9JWQsIGNvbm5faWQ9JWQsIHBsZW49JWRcXG5cJiMzNDssXG4gXHRcdFx0IG5jaV9wYmYoc2tiLVx1MDAzZWRhdGEpLFxuQEAgLTE1NTIsNiAmIzQzOzE1OTksOSBAQCBzdGF0aWMgdm9pZCBuY2lfdHhfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gXHRcdFx0ICBqaWZmaWVzICYjNDM7IG1zZWNzX3RvX2ppZmZpZXMoTkNJX0RBVEFfVElNRU9VVCkpO1xuIFx0XHRrY292X3JlbW90ZV9zdG9wKCk7XG4gXHR9XG4mIzQzO1xuJiM0Mzt1bmxvY2s6XG4mIzQzO1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bmRldi1cdTAwM2Vjb25uX2luZm9fbG9jayk7XG4gfVxuIFxuIC8qIC0tLS0tIE5DSSBSWCB3b3JrZXIgdGhyZWFkIChkYXRhIFx1MDAyNiBjb250cm9sKSAtLS0tLSAqL1xuZGlmZiAtLWdpdCBhL25ldC9uZmMvbmNpL2RhdGEuYyBiL25ldC9uZmMvbmNpL2RhdGEuY1xuaW5kZXggNWY5OGM3M2RiNWFmZGUuLjMzNGMwZTVhOTRkYmM0IDEwMDY0NFxuLS0tIGEvbmV0L25mYy9uY2kvZGF0YS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmZjL25jaS9kYXRhLmNcbkBAIC0zMCw4ICYjNDM7MzAsMTAgQEAgdm9pZCBuY2lfZGF0YV9leGNoYW5nZV9jb21wbGV0ZShzdHJ1Y3QgbmNpX2RldiAqbmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGRhdGFfZXhjaGFuZ2VfY2JfdCBjYjtcbiBcdHZvaWQgKmNiX2NvbnRleHQ7XG4gXG4tXHRjb25uX2luZm8gPSBuY2lfZ2V0X2Nvbm5faW5mb19ieV9jb25uX2lkKG5kZXYsIGNvbm5faWQpO1xuJiM0MztcdHNwaW5fbG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbiYjNDM7XHRjb25uX2luZm8gPSBuY2lfZ2V0X2Nvbm5faW5mb19ieV9jb25uX2lkX2xvY2tlZChuZGV2LCBjb25uX2lkKTtcbiBcdGlmICghY29ubl9pbmZvKSB7XG4mIzQzO1x0XHRzcGluX3VubG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbiBcdFx0a2ZyZWVfc2tiKHNrYik7XG4gXHRcdGNsZWFyX2JpdChOQ0lfREFUQV9FWENIQU5HRSwgXHUwMDI2bmRldi1cdTAwM2VmbGFncyk7XG4gXHRcdHJldHVybjtcbkBAIC0zOSw2ICYjNDM7NDEsNyBAQCB2b2lkIG5jaV9kYXRhX2V4Y2hhbmdlX2NvbXBsZXRlKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFxuIFx0Y2IgPSBjb25uX2luZm8tXHUwMDNlZGF0YV9leGNoYW5nZV9jYjtcbiBcdGNiX2NvbnRleHQgPSBjb25uX2luZm8tXHUwMDNlZGF0YV9leGNoYW5nZV9jYl9jb250ZXh0O1xuJiM0MztcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xuIFxuIFx0cHJfZGVidWcoXCYjMzQ7bGVuICVkLCBlcnIgJWRcXG5cJiMzNDssIHNrYiA/IHNrYi1cdTAwM2VsZW4gOiAwLCBlcnIpO1xuIFxuQEAgLTg1LDE5ICYjNDM7ODgsMjYgQEAgc3RhdGljIGlubGluZSB2b2lkIG5jaV9wdXNoX2RhdGFfaGRyKHN0cnVjdCBuY2lfZGV2ICpuZGV2LFxuIGludCBuY2lfY29ubl9tYXhfZGF0YV9wa3RfcGF5bG9hZF9zaXplKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCBfX3U4IGNvbm5faWQpXG4ge1xuIFx0Y29uc3Qgc3RydWN0IG5jaV9jb25uX2luZm8gKmNvbm5faW5mbztcbiYjNDM7XHRpbnQgbWF4X3BrdF9wYXlsb2FkX2xlbjtcbiBcbi1cdGNvbm5faW5mbyA9IG5jaV9nZXRfY29ubl9pbmZvX2J5X2Nvbm5faWQobmRldiwgY29ubl9pZCk7XG4tXHRpZiAoIWNvbm5faW5mbylcbiYjNDM7XHRzcGluX2xvY2tfYmgoXHUwMDI2bmRldi1cdTAwM2Vjb25uX2luZm9fbG9jayk7XG4mIzQzO1x0Y29ubl9pbmZvID0gbmNpX2dldF9jb25uX2luZm9fYnlfY29ubl9pZF9sb2NrZWQobmRldiwgY29ubl9pZCk7XG4mIzQzO1x0aWYgKCFjb25uX2luZm8pIHtcbiYjNDM7XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xuIFx0XHRyZXR1cm4gLUVQUk9UTztcbiYjNDM7XHR9XG4mIzQzO1x0bWF4X3BrdF9wYXlsb2FkX2xlbiA9IGNvbm5faW5mby1cdTAwM2VtYXhfcGt0X3BheWxvYWRfbGVuO1xuJiM0MztcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xuIFxuLVx0cmV0dXJuIGNvbm5faW5mby1cdTAwM2VtYXhfcGt0X3BheWxvYWRfbGVuO1xuJiM0MztcdHJldHVybiBtYXhfcGt0X3BheWxvYWRfbGVuO1xuIH1cbiBFWFBPUlRfU1lNQk9MKG5jaV9jb25uX21heF9kYXRhX3BrdF9wYXlsb2FkX3NpemUpO1xuIFxuIHN0YXRpYyBpbnQgbmNpX3F1ZXVlX3R4X2RhdGFfZnJhZ3Moc3RydWN0IG5jaV9kZXYgKm5kZXYsXG4gXHRcdFx0XHQgICBfX3U4IGNvbm5faWQsXG4tXHRcdFx0XHQgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKSB7XG4tXHRjb25zdCBzdHJ1Y3QgbmNpX2Nvbm5faW5mbyAqY29ubl9pbmZvO1xuJiM0MztcdFx0XHRcdCAgIHN0cnVjdCBza19idWZmICpza2IsXG4mIzQzO1x0XHRcdFx0ICAgX191OCBtYXhfcGt0X3BheWxvYWRfbGVuKVxuJiM0Mzt7XG4gXHRpbnQgdG90YWxfbGVuID0gc2tiLVx1MDAzZWxlbjtcbiBcdGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEgPSBza2ItXHUwMDNlZGF0YTtcbiBcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG5AQCAtMTA4LDE3ICYjNDM7MTE4LDEwIEBAIHN0YXRpYyBpbnQgbmNpX3F1ZXVlX3R4X2RhdGFfZnJhZ3Moc3RydWN0IG5jaV9kZXYgKm5kZXYsXG4gXG4gXHRwcl9kZWJ1ZyhcJiMzNDtjb25uX2lkIDB4JXgsIHRvdGFsX2xlbiAlZFxcblwmIzM0OywgY29ubl9pZCwgdG90YWxfbGVuKTtcbiBcbi1cdGNvbm5faW5mbyA9IG5jaV9nZXRfY29ubl9pbmZvX2J5X2Nvbm5faWQobmRldiwgY29ubl9pZCk7XG4tXHRpZiAoIWNvbm5faW5mbykge1xuLVx0XHRyYyA9IC1FUFJPVE87XG4tXHRcdGdvdG8gZXhpdDtcbi1cdH1cbi1cbiBcdF9fc2tiX3F1ZXVlX2hlYWRfaW5pdChcdTAwMjZmcmFnc19xKTtcbiBcbiBcdHdoaWxlICh0b3RhbF9sZW4pIHtcbi1cdFx0ZnJhZ19sZW4gPVxuLVx0XHRcdG1pbl90KGludCwgdG90YWxfbGVuLCBjb25uX2luZm8tXHUwMDNlbWF4X3BrdF9wYXlsb2FkX2xlbik7XG4mIzQzO1x0XHRmcmFnX2xlbiA9IG1pbl90KGludCwgdG90YWxfbGVuLCBtYXhfcGt0X3BheWxvYWRfbGVuKTtcbiBcbiBcdFx0c2tiX2ZyYWcgPSBuY2lfc2tiX2FsbG9jKG5kZXYsXG4gXHRcdFx0XHRcdCAoTkNJX0RBVEFfSERSX1NJWkUgJiM0MzsgZnJhZ19sZW4pLFxuQEAgLTE3MSw0MCAmIzQzOzE3NCw0NyBAQCBzdGF0aWMgaW50IG5jaV9xdWV1ZV90eF9kYXRhX2ZyYWdzKHN0cnVjdCBuY2lfZGV2ICpuZGV2LFxuIGludCBuY2lfc2VuZF9kYXRhKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCBfX3U4IGNvbm5faWQsIHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuIFx0Y29uc3Qgc3RydWN0IG5jaV9jb25uX2luZm8gKmNvbm5faW5mbztcbiYjNDM7XHRfX3U4IG1heF9wa3RfcGF5bG9hZF9sZW47XG4gXHRpbnQgcmMgPSAwO1xuIFxuIFx0cHJfZGVidWcoXCYjMzQ7Y29ubl9pZCAweCV4LCBwbGVuICVkXFxuXCYjMzQ7LCBjb25uX2lkLCBza2ItXHUwMDNlbGVuKTtcbiBcbi1cdGNvbm5faW5mbyA9IG5jaV9nZXRfY29ubl9pbmZvX2J5X2Nvbm5faWQobmRldiwgY29ubl9pZCk7XG4mIzQzO1x0c3Bpbl9sb2NrX2JoKFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xuJiM0MztcdGNvbm5faW5mbyA9IG5jaV9nZXRfY29ubl9pbmZvX2J5X2Nvbm5faWRfbG9ja2VkKG5kZXYsIGNvbm5faWQpO1xuIFx0aWYgKCFjb25uX2luZm8pIHtcbiBcdFx0cmMgPSAtRVBST1RPO1xuLVx0XHRnb3RvIGZyZWVfZXhpdDtcbiYjNDM7XHRcdGdvdG8gdW5sb2NrO1xuIFx0fVxuJiM0MztcdG1heF9wa3RfcGF5bG9hZF9sZW4gPSBjb25uX2luZm8tXHUwMDNlbWF4X3BrdF9wYXlsb2FkX2xlbjtcbiYjNDM7XHRzcGluX3VubG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbiBcbiBcdC8qIGNoZWNrIGlmIHRoZSBwYWNrZXQgbmVlZCB0byBiZSBmcmFnbWVudGVkICovXG4tXHRpZiAoc2tiLVx1MDAzZWxlbiBcdTAwM2M9IGNvbm5faW5mby1cdTAwM2VtYXhfcGt0X3BheWxvYWRfbGVuKSB7XG4mIzQzO1x0aWYgKHNrYi1cdTAwM2VsZW4gXHUwMDNjPSBtYXhfcGt0X3BheWxvYWRfbGVuKSB7XG4gXHRcdC8qIG5vIG5lZWQgdG8gZnJhZ21lbnQgcGFja2V0ICovXG4gXHRcdG5jaV9wdXNoX2RhdGFfaGRyKG5kZXYsIGNvbm5faWQsIHNrYiwgTkNJX1BCRl9MQVNUKTtcbiBcbiBcdFx0c2tiX3F1ZXVlX3RhaWwoXHUwMDI2bmRldi1cdTAwM2V0eF9xLCBza2IpO1xuIFx0fSBlbHNlIHtcbiBcdFx0LyogZnJhZ21lbnQgcGFja2V0IGFuZCBxdWV1ZSB0aGUgZnJhZ21lbnRzICovXG4tXHRcdHJjID0gbmNpX3F1ZXVlX3R4X2RhdGFfZnJhZ3MobmRldiwgY29ubl9pZCwgc2tiKTtcbiYjNDM7XHRcdHJjID0gbmNpX3F1ZXVlX3R4X2RhdGFfZnJhZ3MobmRldiwgY29ubl9pZCwgc2tiLFxuJiM0MztcdFx0XHRcdFx0ICAgICBtYXhfcGt0X3BheWxvYWRfbGVuKTtcbiBcdFx0aWYgKHJjKSB7XG4gXHRcdFx0cHJfZXJyKFwmIzM0O2ZhaWxlZCB0byBmcmFnbWVudCB0eCBkYXRhIHBhY2tldFxcblwmIzM0Oyk7XG4tXHRcdFx0Z290byBmcmVlX2V4aXQ7XG4mIzQzO1x0XHRcdGtmcmVlX3NrYihza2IpO1xuJiM0MztcdFx0XHRyZXR1cm4gcmM7XG4gXHRcdH1cbiBcdH1cbiBcbiYjNDM7XHRzcGluX2xvY2tfYmgoXHUwMDI2bmRldi1cdTAwM2Vjb25uX2luZm9fbG9jayk7XG4gXHRuZGV2LVx1MDAzZWN1cl9jb25uX2lkID0gY29ubl9pZDtcbi1cdHF1ZXVlX3dvcmsobmRldi1cdTAwM2V0eF93cSwgXHUwMDI2bmRldi1cdTAwM2V0eF93b3JrKTtcbi1cbi1cdGdvdG8gZXhpdDtcbi1cbi1mcmVlX2V4aXQ6XG4tXHRrZnJlZV9za2Ioc2tiKTtcbiYjNDM7XHRzcGluX3VubG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbiBcbi1leGl0OlxuJiM0MztcdHF1ZXVlX3dvcmsobmRldi1cdTAwM2V0eF93cSwgXHUwMDI2bmRldi1cdTAwM2V0eF93b3JrKTtcbiYjNDM7XHRyZXR1cm4gcmM7XG4mIzQzO3VubG9jazpcbiYjNDM7XHRzcGluX3VubG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbiYjNDM7XHRpZiAocmMpXG4mIzQzO1x0XHRrZnJlZV9za2Ioc2tiKTtcbiBcdHJldHVybiByYztcbiB9XG4gRVhQT1JUX1NZTUJPTChuY2lfc2VuZF9kYXRhKTtcbkBAIC0yODIsMTEgJiM0MzsyOTIsMTUgQEAgdm9pZCBuY2lfcnhfZGF0YV9wYWNrZXQoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRcdCBuY2lfY29ubl9pZChza2ItXHUwMDNlZGF0YSksXG4gXHRcdCBuY2lfcGxlbihza2ItXHUwMDNlZGF0YSkpO1xuIFxuLVx0Y29ubl9pbmZvID0gbmNpX2dldF9jb25uX2luZm9fYnlfY29ubl9pZChuZGV2LCBuY2lfY29ubl9pZChza2ItXHUwMDNlZGF0YSkpO1xuJiM0MztcdHNwaW5fbG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbiYjNDM7XHRjb25uX2luZm8gPSBuY2lfZ2V0X2Nvbm5faW5mb19ieV9jb25uX2lkX2xvY2tlZChuZGV2LFxuJiM0MztcdFx0XHRcdFx0XHRcdG5jaV9jb25uX2lkKHNrYi1cdTAwM2VkYXRhKSk7XG4gXHRpZiAoIWNvbm5faW5mbykge1xuJiM0MztcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bmRldi1cdTAwM2Vjb25uX2luZm9fbG9jayk7XG4gXHRcdGtmcmVlX3NrYihza2IpO1xuIFx0XHRyZXR1cm47XG4gXHR9XG4mIzQzO1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bmRldi1cdTAwM2Vjb25uX2luZm9fbG9jayk7XG4gXG4gXHQvKiBzdHJpcCB0aGUgbmNpIGRhdGEgaGVhZGVyICovXG4gXHRza2JfcHVsbChza2IsIE5DSV9EQVRBX0hEUl9TSVpFKTtcbmRpZmYgLS1naXQgYS9uZXQvbmZjL25jaS9oY2kuYyBiL25ldC9uZmMvbmNpL2hjaS5jXG5pbmRleCBjMDNlOGEwYmQzYmQ2NC4uZTJmN2FiMTU5NzNjZTkgMTAwNjQ0XG4tLS0gYS9uZXQvbmZjL25jaS9oY2kuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25mYy9uY2kvaGNpLmNcbkBAIC0xNDcsMTQgJiM0MzsxNDcsMjIgQEAgc3RhdGljIGludCBuY2lfaGNpX3NlbmRfZGF0YShzdHJ1Y3QgbmNpX2RldiAqbmRldiwgdTggcGlwZSxcbiBcdHN0cnVjdCBza19idWZmICpza2I7XG4gXHRpbnQgbGVuLCBpLCByO1xuIFx0dTggY2IgPSBwaXBlO1xuJiM0MztcdHU4IGNvbm5faWQ7XG4mIzQzO1x0dTggbWF4X3BrdF9wYXlsb2FkX2xlbjtcbiBcbiYjNDM7XHRzcGluX2xvY2tfYmgoXHUwMDI2bmRldi1cdTAwM2Vjb25uX2luZm9fbG9jayk7XG4gXHRjb25uX2luZm8gPSBuZGV2LVx1MDAzZWhjaV9kZXYtXHUwMDNlY29ubl9pbmZvO1xuLVx0aWYgKCFjb25uX2luZm8pXG4mIzQzO1x0aWYgKCFjb25uX2luZm8pIHtcbiYjNDM7XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xuIFx0XHRyZXR1cm4gLUVQUk9UTztcbiYjNDM7XHR9XG4mIzQzO1x0Y29ubl9pZCA9IGNvbm5faW5mby1cdTAwM2Vjb25uX2lkO1xuJiM0MztcdG1heF9wa3RfcGF5bG9hZF9sZW4gPSBjb25uX2luZm8tXHUwMDNlbWF4X3BrdF9wYXlsb2FkX2xlbjtcbiYjNDM7XHRzcGluX3VubG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbiBcbiBcdGkgPSAwO1xuLVx0c2tiID0gbmNpX3NrYl9hbGxvYyhuZGV2LCBjb25uX2luZm8tXHUwMDNlbWF4X3BrdF9wYXlsb2FkX2xlbiAmIzQzO1xuLVx0XHRcdCAgICBOQ0lfREFUQV9IRFJfU0laRSwgR0ZQX0FUT01JQyk7XG4mIzQzO1x0c2tiID0gbmNpX3NrYl9hbGxvYyhuZGV2LCBtYXhfcGt0X3BheWxvYWRfbGVuICYjNDM7IE5DSV9EQVRBX0hEUl9TSVpFLFxuJiM0MztcdFx0XHQgICAgR0ZQX0FUT01JQyk7XG4gXHRpZiAoIXNrYilcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG5AQCAtMTYzLDEyICYjNDM7MTcxLDExIEBAIHN0YXRpYyBpbnQgbmNpX2hjaV9zZW5kX2RhdGEoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHU4IHBpcGUsXG4gXG4gXHRkbyB7XG4gXHRcdC8qIElmIGxhc3QgcGFja2V0IGFkZCBOQ0lfSEZQX05PX0NIQUlOSU5HICovXG4tXHRcdGlmIChpICYjNDM7IGNvbm5faW5mby1cdTAwM2VtYXhfcGt0X3BheWxvYWRfbGVuIC1cbi1cdFx0ICAgIChza2ItXHUwMDNlbGVuICYjNDM7IDEpIFx1MDAzZT0gZGF0YV9sZW4pIHtcbiYjNDM7XHRcdGlmIChpICYjNDM7IG1heF9wa3RfcGF5bG9hZF9sZW4gLSAoc2tiLVx1MDAzZWxlbiAmIzQzOyAxKSBcdTAwM2U9IGRhdGFfbGVuKSB7XG4gXHRcdFx0Y2IgfD0gTkNJX0hGUF9OT19DSEFJTklORztcbiBcdFx0XHRsZW4gPSBkYXRhX2xlbiAtIGk7XG4gXHRcdH0gZWxzZSB7XG4tXHRcdFx0bGVuID0gY29ubl9pbmZvLVx1MDAzZW1heF9wa3RfcGF5bG9hZF9sZW4gLSBza2ItXHUwMDNlbGVuIC0gMTtcbiYjNDM7XHRcdFx0bGVuID0gbWF4X3BrdF9wYXlsb2FkX2xlbiAtIHNrYi1cdTAwM2VsZW4gLSAxO1xuIFx0XHR9XG4gXG4gXHRcdCoodTggKilza2JfcHVzaChza2IsIDEpID0gY2I7XG5AQCAtMTc2LDE1ICYjNDM7MTgzLDE0IEBAIHN0YXRpYyBpbnQgbmNpX2hjaV9zZW5kX2RhdGEoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHU4IHBpcGUsXG4gXHRcdGlmIChsZW4gXHUwMDNlIDApXG4gXHRcdFx0c2tiX3B1dF9kYXRhKHNrYiwgZGF0YSAmIzQzOyBpLCBsZW4pO1xuIFxuLVx0XHRyID0gbmNpX3NlbmRfZGF0YShuZGV2LCBjb25uX2luZm8tXHUwMDNlY29ubl9pZCwgc2tiKTtcbiYjNDM7XHRcdHIgPSBuY2lfc2VuZF9kYXRhKG5kZXYsIGNvbm5faWQsIHNrYik7XG4gXHRcdGlmIChyIFx1MDAzYyAwKVxuIFx0XHRcdHJldHVybiByO1xuIFxuIFx0XHRpICYjNDM7PSBsZW47XG4gXG4gXHRcdGlmIChpIFx1MDAzYyBkYXRhX2xlbikge1xuLVx0XHRcdHNrYiA9IG5jaV9za2JfYWxsb2MobmRldixcbi1cdFx0XHRcdFx0ICAgIGNvbm5faW5mby1cdTAwM2VtYXhfcGt0X3BheWxvYWRfbGVuICYjNDM7XG4mIzQzO1x0XHRcdHNrYiA9IG5jaV9za2JfYWxsb2MobmRldiwgbWF4X3BrdF9wYXlsb2FkX2xlbiAmIzQzO1xuIFx0XHRcdFx0XHQgICAgTkNJX0RBVEFfSERSX1NJWkUsIEdGUF9BVE9NSUMpO1xuIFx0XHRcdGlmICghc2tiKVxuIFx0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG5AQCAtMjI1LDE3ICYjNDM7MjMxLDIyIEBAIGludCBuY2lfaGNpX3NlbmRfY21kKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCB1OCBnYXRlLCB1OCBjbWQsXG4gXHRjb25zdCBzdHJ1Y3QgbmNpX2hjcF9tZXNzYWdlICptZXNzYWdlO1xuIFx0Y29uc3Qgc3RydWN0IG5jaV9jb25uX2luZm8gKmNvbm5faW5mbztcbiBcdHN0cnVjdCBuY2lfZGF0YSBkYXRhO1xuJiM0MztcdHN0cnVjdCBza19idWZmICpyeF9za2I7XG4gXHRpbnQgcjtcbiBcdHU4IHBpcGUgPSBuZGV2LVx1MDAzZWhjaV9kZXYtXHUwMDNlZ2F0ZTJwaXBlW2dhdGVdO1xuIFxuIFx0aWYgKHBpcGUgPT0gTkNJX0hDSV9JTlZBTElEX1BJUEUpXG4gXHRcdHJldHVybiAtRUFERFJOT1RBVkFJTDtcbiBcbiYjNDM7XHRzcGluX2xvY2tfYmgoXHUwMDI2bmRldi1cdTAwM2Vjb25uX2luZm9fbG9jayk7XG4gXHRjb25uX2luZm8gPSBuZGV2LVx1MDAzZWhjaV9kZXYtXHUwMDNlY29ubl9pbmZvO1xuLVx0aWYgKCFjb25uX2luZm8pXG4mIzQzO1x0aWYgKCFjb25uX2luZm8pIHtcbiYjNDM7XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xuIFx0XHRyZXR1cm4gLUVQUk9UTztcbiYjNDM7XHR9XG4gXG4gXHRkYXRhLmNvbm5faWQgPSBjb25uX2luZm8tXHUwMDNlY29ubl9pZDtcbiYjNDM7XHRzcGluX3VubG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbiBcdGRhdGEucGlwZSA9IHBpcGU7XG4gXHRkYXRhLmNtZCA9IE5DSV9IQ1BfSEVBREVSKE5DSV9IQ0lfSENQX0NPTU1BTkQsIGNtZCk7XG4gXHRkYXRhLmRhdGEgPSBwYXJhbTtcbkBAIC0yNDQsMTMgJiM0MzsyNTUsMjIgQEAgaW50IG5jaV9oY2lfc2VuZF9jbWQoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHU4IGdhdGUsIHU4IGNtZCxcbiBcdHIgPSBuY2lfcmVxdWVzdChuZGV2LCBuY2lfaGNpX3NlbmRfZGF0YV9yZXEsIFx1MDAyNmRhdGEsXG4gXHRcdFx0bXNlY3NfdG9famlmZmllcyhOQ0lfREFUQV9USU1FT1VUKSk7XG4gXHRpZiAociA9PSBOQ0lfU1RBVFVTX09LKSB7XG4tXHRcdG1lc3NhZ2UgPSAoc3RydWN0IG5jaV9oY3BfbWVzc2FnZSAqKWNvbm5faW5mby1cdTAwM2VyeF9za2ItXHUwMDNlZGF0YTtcbiYjNDM7XHRcdHNwaW5fbG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbiYjNDM7XHRcdGNvbm5faW5mbyA9IG5kZXYtXHUwMDNlaGNpX2Rldi1cdTAwM2Vjb25uX2luZm87XG4mIzQzO1x0XHRyeF9za2IgPSBjb25uX2luZm8gPyBjb25uX2luZm8tXHUwMDNlcnhfc2tiIDogTlVMTDtcbiYjNDM7XHRcdGlmICghcnhfc2tiKSB7XG4mIzQzO1x0XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xuJiM0MztcdFx0XHRyZXR1cm4gLUVQUk9UTztcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRtZXNzYWdlID0gKHN0cnVjdCBuY2lfaGNwX21lc3NhZ2UgKilyeF9za2ItXHUwMDNlZGF0YTtcbiBcdFx0ciA9IG5jaV9oY2lfcmVzdWx0X3RvX2Vycm5vKFxuIFx0XHRcdE5DSV9IQ1BfTVNHX0dFVF9DTUQobWVzc2FnZS1cdTAwM2VoZWFkZXIpKTtcbi1cdFx0c2tiX3B1bGwoY29ubl9pbmZvLVx1MDAzZXJ4X3NrYiwgTkNJX0hDSV9IQ1BfTUVTU0FHRV9IRUFERVJfTEVOKTtcbiYjNDM7XHRcdHNrYl9wdWxsKHJ4X3NrYiwgTkNJX0hDSV9IQ1BfTUVTU0FHRV9IRUFERVJfTEVOKTtcbiYjNDM7XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xuIFxuIFx0XHRpZiAoIXIgXHUwMDI2XHUwMDI2IHNrYilcbi1cdFx0XHQqc2tiID0gY29ubl9pbmZvLVx1MDAzZXJ4X3NrYjtcbiYjNDM7XHRcdFx0KnNrYiA9IHJ4X3NrYjtcbiBcdH1cbiBcbiBcdHJldHVybiByO1xuQEAgLTM2NiwxMSAmIzQzOzM4NiwxNSBAQCBzdGF0aWMgdm9pZCBuY2lfaGNpX3Jlc3BfcmVjZWl2ZWQoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHU4IHBpcGUsXG4ge1xuIFx0c3RydWN0IG5jaV9jb25uX2luZm8gKmNvbm5faW5mbztcbiBcbiYjNDM7XHRzcGluX2xvY2tfYmgoXHUwMDI2bmRldi1cdTAwM2Vjb25uX2luZm9fbG9jayk7XG4gXHRjb25uX2luZm8gPSBuZGV2LVx1MDAzZWhjaV9kZXYtXHUwMDNlY29ubl9pbmZvO1xuLVx0aWYgKCFjb25uX2luZm8pXG4mIzQzO1x0aWYgKCFjb25uX2luZm8pIHtcbiYjNDM7XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xuIFx0XHRnb3RvIGV4aXQ7XG4mIzQzO1x0fVxuIFxuIFx0Y29ubl9pbmZvLVx1MDAzZXJ4X3NrYiA9IHNrYjtcbiYjNDM7XHRzcGluX3VubG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbiBcbiBleGl0OlxuIFx0bmNpX3JlcV9jb21wbGV0ZShuZGV2LCBOQ0lfU1RBVFVTX09LKTtcbkBAIC01MTAsMTEgJiM0Mzs1MzQsMTUgQEAgaW50IG5jaV9oY2lfb3Blbl9waXBlKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCB1OCBwaXBlKVxuIFx0c3RydWN0IG5jaV9kYXRhIGRhdGE7XG4gXHRjb25zdCBzdHJ1Y3QgbmNpX2Nvbm5faW5mbyAqY29ubl9pbmZvO1xuIFxuJiM0MztcdHNwaW5fbG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbiBcdGNvbm5faW5mbyA9IG5kZXYtXHUwMDNlaGNpX2Rldi1cdTAwM2Vjb25uX2luZm87XG4tXHRpZiAoIWNvbm5faW5mbylcbiYjNDM7XHRpZiAoIWNvbm5faW5mbykge1xuJiM0MztcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bmRldi1cdTAwM2Vjb25uX2luZm9fbG9jayk7XG4gXHRcdHJldHVybiAtRVBST1RPO1xuJiM0MztcdH1cbiBcbiBcdGRhdGEuY29ubl9pZCA9IGNvbm5faW5mby1cdTAwM2Vjb25uX2lkO1xuJiM0MztcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xuIFx0ZGF0YS5waXBlID0gcGlwZTtcbiBcdGRhdGEuY21kID0gTkNJX0hDUF9IRUFERVIoTkNJX0hDSV9IQ1BfQ09NTUFORCxcbiBcdFx0XHRcdCAgICAgICBOQ0lfSENJX0FOWV9PUEVOX1BJUEUpO1xuQEAgLTU2OSw2ICYjNDM7NTk3LDcgQEAgaW50IG5jaV9oY2lfc2V0X3BhcmFtKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCB1OCBnYXRlLCB1OCBpZHgsXG4gXHRjb25zdCBzdHJ1Y3QgbmNpX2hjcF9tZXNzYWdlICptZXNzYWdlO1xuIFx0Y29uc3Qgc3RydWN0IG5jaV9jb25uX2luZm8gKmNvbm5faW5mbztcbiBcdHN0cnVjdCBuY2lfZGF0YSBkYXRhO1xuJiM0MztcdHN0cnVjdCBza19idWZmICpyeF9za2I7XG4gXHRpbnQgcjtcbiBcdHU4ICp0bXA7XG4gXHR1OCBwaXBlID0gbmRldi1cdTAwM2VoY2lfZGV2LVx1MDAzZWdhdGUycGlwZVtnYXRlXTtcbkBAIC01NzgsOSAmIzQzOzYwNywxNCBAQCBpbnQgbmNpX2hjaV9zZXRfcGFyYW0oc3RydWN0IG5jaV9kZXYgKm5kZXYsIHU4IGdhdGUsIHU4IGlkeCxcbiBcdGlmIChwaXBlID09IE5DSV9IQ0lfSU5WQUxJRF9QSVBFKVxuIFx0XHRyZXR1cm4gLUVBRERSTk9UQVZBSUw7XG4gXG4mIzQzO1x0c3Bpbl9sb2NrX2JoKFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xuIFx0Y29ubl9pbmZvID0gbmRldi1cdTAwM2VoY2lfZGV2LVx1MDAzZWNvbm5faW5mbztcbi1cdGlmICghY29ubl9pbmZvKVxuJiM0MztcdGlmICghY29ubl9pbmZvKSB7XG4mIzQzO1x0XHRzcGluX3VubG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbiBcdFx0cmV0dXJuIC1FUFJPVE87XG4mIzQzO1x0fVxuJiM0MztcdGRhdGEuY29ubl9pZCA9IGNvbm5faW5mby1cdTAwM2Vjb25uX2lkO1xuJiM0MztcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xuIFxuIFx0dG1wID0ga21hbGxvYygxICYjNDM7IHBhcmFtX2xlbiwgR0ZQX0tFUk5FTCk7XG4gXHRpZiAoIXRtcClcbkBAIC01ODksNyAmIzQzOzYyMyw2IEBAIGludCBuY2lfaGNpX3NldF9wYXJhbShzdHJ1Y3QgbmNpX2RldiAqbmRldiwgdTggZ2F0ZSwgdTggaWR4LFxuIFx0KnRtcCA9IGlkeDtcbiBcdG1lbWNweSh0bXAgJiM0MzsgMSwgcGFyYW0sIHBhcmFtX2xlbik7XG4gXG4tXHRkYXRhLmNvbm5faWQgPSBjb25uX2luZm8tXHUwMDNlY29ubl9pZDtcbiBcdGRhdGEucGlwZSA9IHBpcGU7XG4gXHRkYXRhLmNtZCA9IE5DSV9IQ1BfSEVBREVSKE5DSV9IQ0lfSENQX0NPTU1BTkQsXG4gXHRcdFx0XHQgICAgICAgTkNJX0hDSV9BTllfU0VUX1BBUkFNRVRFUik7XG5AQCAtNTk5LDEwICYjNDM7NjMyLDIwIEBAIGludCBuY2lfaGNpX3NldF9wYXJhbShzdHJ1Y3QgbmNpX2RldiAqbmRldiwgdTggZ2F0ZSwgdTggaWR4LFxuIFx0ciA9IG5jaV9yZXF1ZXN0KG5kZXYsIG5jaV9oY2lfc2VuZF9kYXRhX3JlcSwgXHUwMDI2ZGF0YSxcbiBcdFx0XHRtc2Vjc190b19qaWZmaWVzKE5DSV9EQVRBX1RJTUVPVVQpKTtcbiBcdGlmIChyID09IE5DSV9TVEFUVVNfT0spIHtcbi1cdFx0bWVzc2FnZSA9IChzdHJ1Y3QgbmNpX2hjcF9tZXNzYWdlICopY29ubl9pbmZvLVx1MDAzZXJ4X3NrYi1cdTAwM2VkYXRhO1xuJiM0MztcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xuJiM0MztcdFx0Y29ubl9pbmZvID0gbmRldi1cdTAwM2VoY2lfZGV2LVx1MDAzZWNvbm5faW5mbztcbiYjNDM7XHRcdHJ4X3NrYiA9IGNvbm5faW5mbyA/IGNvbm5faW5mby1cdTAwM2VyeF9za2IgOiBOVUxMO1xuJiM0MztcdFx0aWYgKCFyeF9za2IpIHtcbiYjNDM7XHRcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bmRldi1cdTAwM2Vjb25uX2luZm9fbG9jayk7XG4mIzQzO1x0XHRcdGtmcmVlKHRtcCk7XG4mIzQzO1x0XHRcdHJldHVybiAtRVBST1RPO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdG1lc3NhZ2UgPSAoc3RydWN0IG5jaV9oY3BfbWVzc2FnZSAqKXJ4X3NrYi1cdTAwM2VkYXRhO1xuIFx0XHRyID0gbmNpX2hjaV9yZXN1bHRfdG9fZXJybm8oXG4gXHRcdFx0TkNJX0hDUF9NU0dfR0VUX0NNRChtZXNzYWdlLVx1MDAzZWhlYWRlcikpO1xuLVx0XHRza2JfcHVsbChjb25uX2luZm8tXHUwMDNlcnhfc2tiLCBOQ0lfSENJX0hDUF9NRVNTQUdFX0hFQURFUl9MRU4pO1xuJiM0MztcdFx0c2tiX3B1bGwocnhfc2tiLCBOQ0lfSENJX0hDUF9NRVNTQUdFX0hFQURFUl9MRU4pO1xuJiM0MztcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bmRldi1cdTAwM2Vjb25uX2luZm9fbG9jayk7XG4gXHR9XG4gXG4gXHRrZnJlZSh0bXApO1xuQEAgLTYxNiw2ICYjNDM7NjU5LDcgQEAgaW50IG5jaV9oY2lfZ2V0X3BhcmFtKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCB1OCBnYXRlLCB1OCBpZHgsXG4gXHRjb25zdCBzdHJ1Y3QgbmNpX2hjcF9tZXNzYWdlICptZXNzYWdlO1xuIFx0Y29uc3Qgc3RydWN0IG5jaV9jb25uX2luZm8gKmNvbm5faW5mbztcbiBcdHN0cnVjdCBuY2lfZGF0YSBkYXRhO1xuJiM0MztcdHN0cnVjdCBza19idWZmICpyeF9za2I7XG4gXHRpbnQgcjtcbiBcdHU4IHBpcGUgPSBuZGV2LVx1MDAzZWhjaV9kZXYtXHUwMDNlZ2F0ZTJwaXBlW2dhdGVdO1xuIFxuQEAgLTYyNCwxMSAmIzQzOzY2OCwxNSBAQCBpbnQgbmNpX2hjaV9nZXRfcGFyYW0oc3RydWN0IG5jaV9kZXYgKm5kZXYsIHU4IGdhdGUsIHU4IGlkeCxcbiBcdGlmIChwaXBlID09IE5DSV9IQ0lfSU5WQUxJRF9QSVBFKVxuIFx0XHRyZXR1cm4gLUVBRERSTk9UQVZBSUw7XG4gXG4mIzQzO1x0c3Bpbl9sb2NrX2JoKFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xuIFx0Y29ubl9pbmZvID0gbmRldi1cdTAwM2VoY2lfZGV2LVx1MDAzZWNvbm5faW5mbztcbi1cdGlmICghY29ubl9pbmZvKVxuJiM0MztcdGlmICghY29ubl9pbmZvKSB7XG4mIzQzO1x0XHRzcGluX3VubG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbiBcdFx0cmV0dXJuIC1FUFJPVE87XG4mIzQzO1x0fVxuIFxuIFx0ZGF0YS5jb25uX2lkID0gY29ubl9pbmZvLVx1MDAzZWNvbm5faWQ7XG4mIzQzO1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bmRldi1cdTAwM2Vjb25uX2luZm9fbG9jayk7XG4gXHRkYXRhLnBpcGUgPSBwaXBlO1xuIFx0ZGF0YS5jbWQgPSBOQ0lfSENQX0hFQURFUihOQ0lfSENJX0hDUF9DT01NQU5ELFxuIFx0XHRcdFx0ICBOQ0lfSENJX0FOWV9HRVRfUEFSQU1FVEVSKTtcbkBAIC02MzksMTMgJiM0Mzs2ODcsMjIgQEAgaW50IG5jaV9oY2lfZ2V0X3BhcmFtKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCB1OCBnYXRlLCB1OCBpZHgsXG4gXHRcdFx0bXNlY3NfdG9famlmZmllcyhOQ0lfREFUQV9USU1FT1VUKSk7XG4gXG4gXHRpZiAociA9PSBOQ0lfU1RBVFVTX09LKSB7XG4tXHRcdG1lc3NhZ2UgPSAoc3RydWN0IG5jaV9oY3BfbWVzc2FnZSAqKWNvbm5faW5mby1cdTAwM2VyeF9za2ItXHUwMDNlZGF0YTtcbiYjNDM7XHRcdHNwaW5fbG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbiYjNDM7XHRcdGNvbm5faW5mbyA9IG5kZXYtXHUwMDNlaGNpX2Rldi1cdTAwM2Vjb25uX2luZm87XG4mIzQzO1x0XHRyeF9za2IgPSBjb25uX2luZm8gPyBjb25uX2luZm8tXHUwMDNlcnhfc2tiIDogTlVMTDtcbiYjNDM7XHRcdGlmICghcnhfc2tiKSB7XG4mIzQzO1x0XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xuJiM0MztcdFx0XHRyZXR1cm4gLUVQUk9UTztcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRtZXNzYWdlID0gKHN0cnVjdCBuY2lfaGNwX21lc3NhZ2UgKilyeF9za2ItXHUwMDNlZGF0YTtcbiBcdFx0ciA9IG5jaV9oY2lfcmVzdWx0X3RvX2Vycm5vKFxuIFx0XHRcdE5DSV9IQ1BfTVNHX0dFVF9DTUQobWVzc2FnZS1cdTAwM2VoZWFkZXIpKTtcbi1cdFx0c2tiX3B1bGwoY29ubl9pbmZvLVx1MDAzZXJ4X3NrYiwgTkNJX0hDSV9IQ1BfTUVTU0FHRV9IRUFERVJfTEVOKTtcbiYjNDM7XHRcdHNrYl9wdWxsKHJ4X3NrYiwgTkNJX0hDSV9IQ1BfTUVTU0FHRV9IRUFERVJfTEVOKTtcbiYjNDM7XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xuIFxuIFx0XHRpZiAoIXIgXHUwMDI2XHUwMDI2IHNrYilcbi1cdFx0XHQqc2tiID0gY29ubl9pbmZvLVx1MDAzZXJ4X3NrYjtcbiYjNDM7XHRcdFx0KnNrYiA9IHJ4X3NrYjtcbiBcdH1cbiBcbiBcdHJldHVybiByO1xuQEAgLTcyOSwxMiAmIzQzOzc4NiwxNiBAQCBpbnQgbmNpX2hjaV9kZXZfc2Vzc2lvbl9pbml0KHN0cnVjdCBuY2lfZGV2ICpuZGV2KVxuIFx0bmRldi1cdTAwM2VoY2lfZGV2LVx1MDAzZWNvdW50X3BpcGVzID0gMDtcbiBcdG5kZXYtXHUwMDNlaGNpX2Rldi1cdTAwM2VleHBlY3RlZF9waXBlcyA9IDA7XG4gXG4mIzQzO1x0c3Bpbl9sb2NrX2JoKFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xuIFx0Y29ubl9pbmZvID0gbmRldi1cdTAwM2VoY2lfZGV2LVx1MDAzZWNvbm5faW5mbztcbi1cdGlmICghY29ubl9pbmZvKVxuJiM0MztcdGlmICghY29ubl9pbmZvKSB7XG4mIzQzO1x0XHRzcGluX3VubG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbiBcdFx0cmV0dXJuIC1FUFJPVE87XG4mIzQzO1x0fVxuIFxuIFx0Y29ubl9pbmZvLVx1MDAzZWRhdGFfZXhjaGFuZ2VfY2IgPSBuY2lfaGNpX2RhdGFfcmVjZWl2ZWRfY2I7XG4gXHRjb25uX2luZm8tXHUwMDNlZGF0YV9leGNoYW5nZV9jYl9jb250ZXh0ID0gbmRldjtcbiYjNDM7XHRzcGluX3VubG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbiBcbiBcdG5jaV9oY2lfcmVzZXRfcGlwZXMobmRldi1cdTAwM2VoY2lfZGV2KTtcbiBcbmRpZmYgLS1naXQgYS9uZXQvbmZjL25jaS9udGYuYyBiL25ldC9uZmMvbmNpL250Zi5jXG5pbmRleCBjOTY1MTJiYjg2NTMxNS4uNDgyOGExYzlkMzVmMGUgMTAwNjQ0XG4tLS0gYS9uZXQvbmZjL25jaS9udGYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25mYy9uY2kvbnRmLmNcbkBAIC04MSwxMyAmIzQzOzgxLDE3IEBAIHN0YXRpYyBpbnQgbmNpX2NvcmVfY29ubl9jcmVkaXRzX250Zl9wYWNrZXQoc3RydWN0IG5jaV9kZXYgKm5kZXYsXG4gXHRcdFx0IGksIG50Zi1cdTAwM2Vjb25uX2VudHJpZXNbaV0uY29ubl9pZCxcbiBcdFx0XHQgbnRmLVx1MDAzZWNvbm5fZW50cmllc1tpXS5jcmVkaXRzKTtcbiBcbi1cdFx0Y29ubl9pbmZvID0gbmNpX2dldF9jb25uX2luZm9fYnlfY29ubl9pZChuZGV2LFxuLVx0XHRcdFx0XHRcdFx0IG50Zi1cdTAwM2Vjb25uX2VudHJpZXNbaV0uY29ubl9pZCk7XG4tXHRcdGlmICghY29ubl9pbmZvKVxuJiM0MztcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xuJiM0MztcdFx0Y29ubl9pbmZvID0gbmNpX2dldF9jb25uX2luZm9fYnlfY29ubl9pZF9sb2NrZWQobmRldixcbiYjNDM7XHRcdFx0XHRcdFx0XHRcdG50Zi1cdTAwM2Vjb25uX2VudHJpZXNbaV0uY29ubl9pZCk7XG4mIzQzO1x0XHRpZiAoIWNvbm5faW5mbykge1xuJiM0MztcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbiBcdFx0XHRyZXR1cm4gMDtcbiYjNDM7XHRcdH1cbiBcbiBcdFx0YXRvbWljX2FkZChudGYtXHUwMDNlY29ubl9lbnRyaWVzW2ldLmNyZWRpdHMsXG4gXHRcdFx0ICAgXHUwMDI2Y29ubl9pbmZvLVx1MDAzZWNyZWRpdHNfY250KTtcbiYjNDM7XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xuIFx0fVxuIFxuIFx0LyogdHJpZ2dlciB0aGUgbmV4dCB0eCAqL1xuQEAgLTgyOCw5ICYjNDM7ODMyLDEyIEBAIHN0YXRpYyBpbnQgbmNpX3JmX2ludGZfYWN0aXZhdGVkX250Zl9wYWNrZXQoc3RydWN0IG5jaV9kZXYgKm5kZXYsXG4gXG4gZXhpdDpcbiBcdGlmIChlcnIgPT0gTkNJX1NUQVRVU19PSykge1xuJiM0MztcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xuIFx0XHRjb25uX2luZm8gPSBuZGV2LVx1MDAzZXJmX2Nvbm5faW5mbztcbi1cdFx0aWYgKCFjb25uX2luZm8pXG4mIzQzO1x0XHRpZiAoIWNvbm5faW5mbykge1xuJiM0MztcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbiBcdFx0XHRyZXR1cm4gMDtcbiYjNDM7XHRcdH1cbiBcbiBcdFx0Y29ubl9pbmZvLVx1MDAzZW1heF9wa3RfcGF5bG9hZF9sZW4gPSBudGYubWF4X2RhdGFfcGt0X3BheWxvYWRfc2l6ZTtcbiBcdFx0Y29ubl9pbmZvLVx1MDAzZWluaXRpYWxfbnVtX2NyZWRpdHMgPSBudGYuaW5pdGlhbF9udW1fY3JlZGl0cztcbkBAIC04MzgsNiAmIzQzOzg0NSw3IEBAIHN0YXRpYyBpbnQgbmNpX3JmX2ludGZfYWN0aXZhdGVkX250Zl9wYWNrZXQoc3RydWN0IG5jaV9kZXYgKm5kZXYsXG4gXHRcdC8qIHNldCB0aGUgYXZhaWxhYmxlIGNyZWRpdHMgdG8gaW5pdGlhbCB2YWx1ZSAqL1xuIFx0XHRhdG9taWNfc2V0KFx1MDAyNmNvbm5faW5mby1cdTAwM2VjcmVkaXRzX2NudCxcbiBcdFx0XHQgICBjb25uX2luZm8tXHUwMDNlaW5pdGlhbF9udW1fY3JlZGl0cyk7XG4mIzQzO1x0XHRzcGluX3VubG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbiBcbiBcdFx0Lyogc3RvcmUgZ2VuZXJhbCBieXRlcyB0byBiZSByZXBvcnRlZCBsYXRlciBpbiBkZXBfbGlua191cCAqL1xuIFx0XHRpZiAobnRmLnJmX2ludGVyZmFjZSA9PSBOQ0lfUkZfSU5URVJGQUNFX05GQ19ERVApIHtcbkBAIC05MDEsOSAmIzQzOzkwOSwxMyBAQCBzdGF0aWMgaW50IG5jaV9yZl9kZWFjdGl2YXRlX250Zl9wYWNrZXQoc3RydWN0IG5jaV9kZXYgKm5kZXYsXG4gXG4gXHRwcl9kZWJ1ZyhcJiMzNDtlbnRyeSwgdHlwZSAweCV4LCByZWFzb24gMHgleFxcblwmIzM0OywgbnRmLVx1MDAzZXR5cGUsIG50Zi1cdTAwM2VyZWFzb24pO1xuIFxuJiM0MztcdHNwaW5fbG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbiBcdGNvbm5faW5mbyA9IG5kZXYtXHUwMDNlcmZfY29ubl9pbmZvO1xuLVx0aWYgKCFjb25uX2luZm8pXG4mIzQzO1x0aWYgKCFjb25uX2luZm8pIHtcbiYjNDM7XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xuIFx0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4mIzQzO1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bmRldi1cdTAwM2Vjb25uX2luZm9fbG9jayk7XG4gXG4gXHQvKiBkcm9wIHR4IGRhdGEgcXVldWUgKi9cbiBcdHNrYl9xdWV1ZV9wdXJnZShcdTAwMjZuZGV2LVx1MDAzZXR4X3EpO1xuZGlmZiAtLWdpdCBhL25ldC9uZmMvbmNpL3JzcC5jIGIvbmV0L25mYy9uY2kvcnNwLmNcbmluZGV4IDllZWI4NjI4MjVjNWZlLi4wY2ZmMTI1MDkyM2VkOSAxMDA2NDRcbi0tLSBhL25ldC9uZmMvbmNpL3JzcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmZjL25jaS9yc3AuY1xuQEAgLTE4Niw2ICYjNDM7MTg2LDcgQEAgc3RhdGljIHZvaWQgbmNpX3JmX2Rpc2NfcnNwX3BhY2tldChzdHJ1Y3QgbmNpX2RldiAqbmRldixcbiBcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuIFx0c3RydWN0IG5jaV9jb25uX2luZm8gKmNvbm5faW5mbztcbiYjNDM7XHRzdHJ1Y3QgbmNpX2Nvbm5faW5mbyAqbmV3X2Nvbm5faW5mbztcbiBcdF9fdTggc3RhdHVzID0gc2tiLVx1MDAzZWRhdGFbMF07XG4gXG4gXHRwcl9kZWJ1ZyhcJiMzNDtzdGF0dXMgMHgleFxcblwmIzM0Oywgc3RhdHVzKTtcbkBAIC0xOTMsMTkgJiM0MzsxOTQsMzMgQEAgc3RhdGljIHZvaWQgbmNpX3JmX2Rpc2NfcnNwX3BhY2tldChzdHJ1Y3QgbmNpX2RldiAqbmRldixcbiBcdGlmIChzdGF0dXMgPT0gTkNJX1NUQVRVU19PSykge1xuIFx0XHRhdG9taWNfc2V0KFx1MDAyNm5kZXYtXHUwMDNlc3RhdGUsIE5DSV9ESVNDT1ZFUlkpO1xuIFxuJiM0MztcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xuIFx0XHRjb25uX2luZm8gPSBuZGV2LVx1MDAzZXJmX2Nvbm5faW5mbztcbiYjNDM7XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xuJiM0MztcbiBcdFx0aWYgKCFjb25uX2luZm8pIHtcbi1cdFx0XHRjb25uX2luZm8gPSBkZXZtX2t6YWxsb2MoXHUwMDI2bmRldi1cdTAwM2VuZmNfZGV2LVx1MDAzZWRldixcbi1cdFx0XHRcdFx0XHQgc2l6ZW9mKHN0cnVjdCBuY2lfY29ubl9pbmZvKSxcbi1cdFx0XHRcdFx0XHQgR0ZQX0tFUk5FTCk7XG4tXHRcdFx0aWYgKCFjb25uX2luZm8pIHtcbiYjNDM7XHRcdFx0bmV3X2Nvbm5faW5mbyA9IGRldm1fa3phbGxvYyhcdTAwMjZuZGV2LVx1MDAzZW5mY19kZXYtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHRcdFx0XHQgICAgIHNpemVvZihzdHJ1Y3QgbmNpX2Nvbm5faW5mbyksXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0XHRcdGlmICghbmV3X2Nvbm5faW5mbykge1xuIFx0XHRcdFx0c3RhdHVzID0gTkNJX1NUQVRVU19SRUpFQ1RFRDtcbiBcdFx0XHRcdGdvdG8gZXhpdDtcbiBcdFx0XHR9XG4tXHRcdFx0Y29ubl9pbmZvLVx1MDAzZWNvbm5faWQgPSBOQ0lfU1RBVElDX1JGX0NPTk5fSUQ7XG4tXHRcdFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2Y29ubl9pbmZvLVx1MDAzZWxpc3QpO1xuLVx0XHRcdGxpc3RfYWRkKFx1MDAyNmNvbm5faW5mby1cdTAwM2VsaXN0LCBcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19saXN0KTtcbi1cdFx0XHRuZGV2LVx1MDAzZXJmX2Nvbm5faW5mbyA9IGNvbm5faW5mbztcbiYjNDM7XG4mIzQzO1x0XHRcdG5ld19jb25uX2luZm8tXHUwMDNlY29ubl9pZCA9IE5DSV9TVEFUSUNfUkZfQ09OTl9JRDtcbiYjNDM7XHRcdFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2bmV3X2Nvbm5faW5mby1cdTAwM2VsaXN0KTtcbiYjNDM7XG4mIzQzO1x0XHRcdHNwaW5fbG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbiYjNDM7XHRcdFx0aWYgKCFuZGV2LVx1MDAzZXJmX2Nvbm5faW5mbykge1xuJiM0MztcdFx0XHRcdGxpc3RfYWRkKFx1MDAyNm5ld19jb25uX2luZm8tXHUwMDNlbGlzdCxcbiYjNDM7XHRcdFx0XHRcdCBcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19saXN0KTtcbiYjNDM7XHRcdFx0XHRuZGV2LVx1MDAzZXJmX2Nvbm5faW5mbyA9IG5ld19jb25uX2luZm87XG4mIzQzO1x0XHRcdFx0bmV3X2Nvbm5faW5mbyA9IE5VTEw7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bmRldi1cdTAwM2Vjb25uX2luZm9fbG9jayk7XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAobmV3X2Nvbm5faW5mbylcbiYjNDM7XHRcdFx0XHRkZXZtX2tmcmVlKFx1MDAyNm5kZXYtXHUwMDNlbmZjX2Rldi1cdTAwM2VkZXYsIG5ld19jb25uX2luZm8pO1xuIFx0XHR9XG4gXHR9XG4gXG5AQCAtMjk4LDIwICYjNDM7MzEzLDIwIEBAIHN0YXRpYyB2b2lkIG5jaV9jb3JlX2Nvbm5fY3JlYXRlX3JzcF9wYWNrZXQoc3RydWN0IG5jaV9kZXYgKm5kZXYsXG4gXHRcdGNvbm5faW5mby1cdTAwM2VkZXN0X3BhcmFtcy1cdTAwM2VpZCA9IG5kZXYtXHUwMDNlY3VyX3BhcmFtcy5pZDtcbiBcdFx0Y29ubl9pbmZvLVx1MDAzZWRlc3RfcGFyYW1zLVx1MDAzZXByb3RvY29sID0gbmRldi1cdTAwM2VjdXJfcGFyYW1zLnByb3RvY29sO1xuIFx0XHRjb25uX2luZm8tXHUwMDNlY29ubl9pZCA9IHJzcC1cdTAwM2Vjb25uX2lkO1xuJiM0MztcdFx0Y29ubl9pbmZvLVx1MDAzZW1heF9wa3RfcGF5bG9hZF9sZW4gPSByc3AtXHUwMDNlbWF4X2N0cmxfcGt0X3BheWxvYWRfbGVuO1xuJiM0MztcdFx0YXRvbWljX3NldChcdTAwMjZjb25uX2luZm8tXHUwMDNlY3JlZGl0c19jbnQsIHJzcC1cdTAwM2VjcmVkaXRzX2NudCk7XG4gXG4gXHRcdC8qIE5vdGU6IGRhdGFfZXhjaGFuZ2VfY2IgYW5kIGRhdGFfZXhjaGFuZ2VfY2JfY29udGV4dCBuZWVkIHRvXG4gXHRcdCAqIGJlIHNwZWNpZnkgb3V0IG9mIG5jaV9jb3JlX2Nvbm5fY3JlYXRlX3JzcF9wYWNrZXRcbiBcdFx0ICovXG4gXG4gXHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNmNvbm5faW5mby1cdTAwM2VsaXN0KTtcbiYjNDM7XHRcdHNwaW5fbG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbiBcdFx0bGlzdF9hZGQoXHUwMDI2Y29ubl9pbmZvLVx1MDAzZWxpc3QsIFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xpc3QpO1xuIFxuIFx0XHRpZiAobmRldi1cdTAwM2VjdXJfcGFyYW1zLmlkID09IG5kZXYtXHUwMDNlaGNpX2Rldi1cdTAwM2VuZmNlZV9pZClcbiBcdFx0XHRuZGV2LVx1MDAzZWhjaV9kZXYtXHUwMDNlY29ubl9pbmZvID0gY29ubl9pbmZvO1xuLVxuLVx0XHRjb25uX2luZm8tXHUwMDNlY29ubl9pZCA9IHJzcC1cdTAwM2Vjb25uX2lkO1xuLVx0XHRjb25uX2luZm8tXHUwMDNlbWF4X3BrdF9wYXlsb2FkX2xlbiA9IHJzcC1cdTAwM2VtYXhfY3RybF9wa3RfcGF5bG9hZF9sZW47XG4tXHRcdGF0b21pY19zZXQoXHUwMDI2Y29ubl9pbmZvLVx1MDAzZWNyZWRpdHNfY250LCByc3AtXHUwMDNlY3JlZGl0c19jbnQpO1xuJiM0MztcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bmRldi1cdTAwM2Vjb25uX2luZm9fbG9jayk7XG4gXHR9XG4gXG4gZnJlZV9jb25uX2luZm86XG5AQCAtMzMwLDE0ICYjNDM7MzQ1LDE5IEBAIHN0YXRpYyB2b2lkIG5jaV9jb3JlX2Nvbm5fY2xvc2VfcnNwX3BhY2tldChzdHJ1Y3QgbmNpX2RldiAqbmRldixcbiBcbiBcdHByX2RlYnVnKFwmIzM0O3N0YXR1cyAweCV4XFxuXCYjMzQ7LCBzdGF0dXMpO1xuIFx0aWYgKHN0YXR1cyA9PSBOQ0lfU1RBVFVTX09LKSB7XG4tXHRcdGNvbm5faW5mbyA9IG5jaV9nZXRfY29ubl9pbmZvX2J5X2Nvbm5faWQobmRldixcbi1cdFx0XHRcdFx0XHRcdCBuZGV2LVx1MDAzZWN1cl9jb25uX2lkKTtcbiYjNDM7XHRcdHNwaW5fbG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbiYjNDM7XHRcdGNvbm5faW5mbyA9IG5jaV9nZXRfY29ubl9pbmZvX2J5X2Nvbm5faWRfbG9ja2VkKG5kZXYsXG4mIzQzO1x0XHRcdFx0XHRcdFx0XHRuZGV2LVx1MDAzZWN1cl9jb25uX2lkKTtcbiBcdFx0aWYgKGNvbm5faW5mbykge1xuIFx0XHRcdGxpc3RfZGVsKFx1MDAyNmNvbm5faW5mby1cdTAwM2VsaXN0KTtcbiBcdFx0XHRpZiAoY29ubl9pbmZvID09IG5kZXYtXHUwMDNlcmZfY29ubl9pbmZvKVxuIFx0XHRcdFx0bmRldi1cdTAwM2VyZl9jb25uX2luZm8gPSBOVUxMO1xuLVx0XHRcdGRldm1fa2ZyZWUoXHUwMDI2bmRldi1cdTAwM2VuZmNfZGV2LVx1MDAzZWRldiwgY29ubl9pbmZvKTtcbiYjNDM7XHRcdFx0aWYgKGNvbm5faW5mbyA9PSBuZGV2LVx1MDAzZWhjaV9kZXYtXHUwMDNlY29ubl9pbmZvKVxuJiM0MztcdFx0XHRcdG5kZXYtXHUwMDNlaGNpX2Rldi1cdTAwM2Vjb25uX2luZm8gPSBOVUxMO1xuIFx0XHR9XG4mIzQzO1x0XHRzcGluX3VubG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbiYjNDM7XHRcdGlmIChjb25uX2luZm8pXG4mIzQzO1x0XHRcdGRldm1fa2ZyZWUoXHUwMDI2bmRldi1cdTAwM2VuZmNfZGV2LVx1MDAzZWRldiwgY29ubl9pbmZvKTtcbiBcdH1cbiBcdG5jaV9yZXFfY29tcGxldGUobmRldiwgc3RhdHVzKTtcbiB9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMDk6MjU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkZDJiMzNDssCiAgICAmIzM0O05GQ19OQ0kmIzM0OywKICAgICYjMzQ7TkZDX1ZJUlRVQUxfTkNJJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmNpX25mY2NfbG9vcGJhY2smIzM0OywKICAgICYjMzQ7bmNpX3RyYW5zY2VpdmUmIzM0OywKICAgICYjMzQ7bmNpX3NlbmRfZGF0YSYjMzQ7LAogICAgJiMzNDtuY2lfcnhfZGF0YV9wYWNrZXQmIzM0OywKICAgICYjMzQ7bmNpX2hjaV9zZW5kX2NtZCYjMzQ7LAogICAgJiMzNDtuY2lfaGNpX3NldF9wYXJhbSYjMzQ7LAogICAgJiMzNDtuY2lfaGNpX2dldF9wYXJhbSYjMzQ7LAogICAgJiMzNDtuY2lfY29yZV9jb25uX2NyZWF0ZV9yc3BfcGFja2V0JiMzNDssCiAgICAmIzM0O25jaV9jb3JlX2Nvbm5fY2xvc2VfcnNwX3BhY2tldCYjMzQ7LAogICAgJiMzNDtuY2lfcmZfZGlzY19yc3BfcGFja2V0JiMzNDssCiAgICAmIzM0O25jaV9jb3JlX2Nvbm5fY3JlZGl0c19udGZfcGFja2V0JiMzNDssCiAgICAmIzM0O25jaV9yZl9pbnRmX2FjdGl2YXRlZF9udGZfcGFja2V0JiMzNDssCiAgICAmIzM0O25jaV9yZl9kZWFjdGl2YXRlX250Zl9wYWNrZXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgY29uY3VycmVuY3kgaXNzdWVzIGluIHRoZSBORkMgTkNJIGNvcmUgYnkgaW50cm9kdWNpbmcgYSBzcGlubG9jayB0byBwcm90ZWN0IGNvbm5lY3Rpb24gaW5mbyBsaXN0cyBhbmQgcG9pbnRlcnMuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGNvcmUgZGF0YSB0cmFuc21pc3Npb24sIHJlY2VwdGlvbiwgYW5kIEhDSSBjb21tYW5kIGhhbmRsaW5nLCB3aGljaCBhcmUgcmVhY2hhYmxlIHZpYSB0aGUgdmlydHVhbCBOQ0kgZHJpdmVyLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBhZTU1ZTg4ZDdhNGY3MTA1YjQ0ODY4MjJlM2FkZjUzODhmMWI4YTAwCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBKdW4gMzAgMDk6MjU6MjkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25mYy9zdC1uY2kvc2UuYyBiL2RyaXZlcnMvbmZjL3N0LW5jaS9zZS5jCmluZGV4IDYwN2VjNzY4ZWI3YjRjLi4xZjhlMjI2NWUyMGIwNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZmMvc3QtbmNpL3NlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZmMvc3QtbmNpL3NlLmMKQEAgLTU0OCw2ICYjNDM7NTQ4LDcgQEAgc3RhdGljIGludCBzdF9uY2lfaGNpX25ldHdvcmtfaW5pdChzdHJ1Y3QgbmNpX2RldiAqbmRldikKIAlzdHJ1Y3QgY29yZV9jb25uX2NyZWF0ZV9kZXN0X3NwZWNfcGFyYW1zICpkZXN0X3BhcmFtczsKIAlzdHJ1Y3QgZGVzdF9zcGVjX3BhcmFtcyBzcGVjX3BhcmFtczsKIAlzdHJ1Y3QgbmNpX2Nvbm5faW5mbyAgICAqY29ubl9pbmZvOwomIzQzOwl1OCBuZmNlZV9pZDsKIAlpbnQgciwgZGV2X251bTsKIAogCWRlc3RfcGFyYW1zID0KQEAgLTU2OSw5ICYjNDM7NTcwLDE0IEBAIHN0YXRpYyBpbnQgc3RfbmNpX2hjaV9uZXR3b3JrX2luaXQoc3RydWN0IG5jaV9kZXYgKm5kZXYpCiAJaWYgKHIgIT0gTkNJX1NUQVRVU19PSykKIAkJZ290byBmcmVlX2Rlc3RfcGFyYW1zOwogCiYjNDM7CXNwaW5fbG9ja19iaCgmYW1wO25kZXYtJmd0O2Nvbm5faW5mb19sb2NrKTsKIAljb25uX2luZm8gPSBuZGV2LSZndDtoY2lfZGV2LSZndDtjb25uX2luZm87Ci0JaWYgKCFjb25uX2luZm8pCiYjNDM7CWlmICghY29ubl9pbmZvKSB7CiYjNDM7CQlzcGluX3VubG9ja19iaCgmYW1wO25kZXYtJmd0O2Nvbm5faW5mb19sb2NrKTsKIAkJZ290byBmcmVlX2Rlc3RfcGFyYW1zOwomIzQzOwl9CiYjNDM7CW5mY2VlX2lkID0gY29ubl9pbmZvLSZndDtkZXN0X3BhcmFtcy0mZ3Q7aWQ7CiYjNDM7CXNwaW5fdW5sb2NrX2JoKCZhbXA7bmRldi0mZ3Q7Y29ubl9pbmZvX2xvY2spOwogCiAJbmRldi0mZ3Q7aGNpX2Rldi0mZ3Q7aW5pdF9kYXRhLmdhdGVfY291bnQgPSBBUlJBWV9TSVpFKHN0X25jaV9nYXRlcyk7CiAJbWVtY3B5KG5kZXYtJmd0O2hjaV9kZXYtJmd0O2luaXRfZGF0YS5nYXRlcywgc3RfbmNpX2dhdGVzLApAQCAtNjAxLDEzICYjNDM7NjA3LDkgQEAgc3RhdGljIGludCBzdF9uY2lfaGNpX25ldHdvcmtfaW5pdChzdHJ1Y3QgbmNpX2RldiAqbmRldikKIAkgKiBIQ0kgd2lsbCBiZSB1c2VkIGhlcmUgb25seSBmb3IgcHJvcHJpZXRhcnkgY29tbWFuZHMuCiAJICovCiAJaWYgKHRlc3RfYml0KFNUX05DSV9GQUNUT1JZX01PREUsICZhbXA7aW5mby0mZ3Q7ZmxhZ3MpKQotCQlyID0gbmNpX25mY2VlX21vZGVfc2V0KG5kZXYsCi0JCQkJICAgICAgIG5kZXYtJmd0O2hjaV9kZXYtJmd0O2Nvbm5faW5mby0mZ3Q7ZGVzdF9wYXJhbXMtJmd0O2lkLAotCQkJCSAgICAgICBOQ0lfTkZDRUVfRElTQUJMRSk7CiYjNDM7CQlyID0gbmNpX25mY2VlX21vZGVfc2V0KG5kZXYsIG5mY2VlX2lkLCBOQ0lfTkZDRUVfRElTQUJMRSk7CiAJZWxzZQotCQlyID0gbmNpX25mY2VlX21vZGVfc2V0KG5kZXYsCi0JCQkJICAgICAgIG5kZXYtJmd0O2hjaV9kZXYtJmd0O2Nvbm5faW5mby0mZ3Q7ZGVzdF9wYXJhbXMtJmd0O2lkLAotCQkJCSAgICAgICBOQ0lfTkZDRUVfRU5BQkxFKTsKJiM0MzsJCXIgPSBuY2lfbmZjZWVfbW9kZV9zZXQobmRldiwgbmZjZWVfaWQsIE5DSV9ORkNFRV9FTkFCTEUpOwogCiBmcmVlX2Rlc3RfcGFyYW1zOgogCWtmcmVlKGRlc3RfcGFyYW1zKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25mYy9uY2lfY29yZS5oIGIvaW5jbHVkZS9uZXQvbmZjL25jaV9jb3JlLmgKaW5kZXggNjY0ZDUwNThlNjZlMDEuLmE1YjE4NmYyNzNkOTc0IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9uZmMvbmNpX2NvcmUuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9uZmMvbmNpX2NvcmUuaApAQCAtMTksNiAmIzQzOzE5LDcgQEAKIAogI2luY2x1ZGUgJmx0O2xpbnV4L2ludGVycnVwdC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NrYnVmZi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9zcGlubG9jay5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3R0eS5oJmd0OwogCiAjaW5jbHVkZSAmbHQ7bmV0L25mYy9uZmMuaCZndDsKQEAgLTIyNyw2ICYjNDM7MjI4LDggQEAgc3RydWN0IG5jaV9kZXYgewogCXN0cnVjdCBza19idWZmX2hlYWQJdHhfcTsKIAogCXN0cnVjdCBtdXRleAkJcmVxX2xvY2s7CiYjNDM7CS8qIFNlcmlhbGl6ZXMgY29ubl9pbmZvX2xpc3QgYW5kIGNvbm5faW5mbyBwb2ludGVyIGFsaWFzIHVwZGF0ZXMuICovCiYjNDM7CXNwaW5sb2NrX3QJCWNvbm5faW5mb19sb2NrOwogCXN0cnVjdCBjb21wbGV0aW9uCXJlcV9jb21wbGV0aW9uOwogCV9fdTMyCQkJcmVxX3N0YXR1czsKIAlfX3UzMgkJCXJlcV9yZXN1bHQ7CkBAIC0zODIsOCAmIzQzOzM4NSwxMSBAQCB2b2lkIG5jaV9jbGVhcl90YXJnZXRfbGlzdChzdHJ1Y3QgbmNpX2RldiAqbmRldik7CiAjZGVmaW5lIE5DSV9SRVFfQ0FOQ0VMRUQJMgogCiB2b2lkIG5jaV9yZXFfY29tcGxldGUoc3RydWN0IG5jaV9kZXYgKm5kZXYsIGludCByZXN1bHQpOwotc3RydWN0IG5jaV9jb25uX2luZm8gKm5jaV9nZXRfY29ubl9pbmZvX2J5X2Nvbm5faWQoc3RydWN0IG5jaV9kZXYgKm5kZXYsCi0JCQkJCQkgICBpbnQgY29ubl9pZCk7CiYjNDM7c3RydWN0IG5jaV9jb25uX2luZm8gKm5jaV9nZXRfY29ubl9pbmZvX2J5X2Nvbm5faWRfbG9ja2VkKHN0cnVjdCBuY2lfZGV2ICpuZGV2LAomIzQzOwkJCQkJCQkgIGludCBjb25uX2lkKTsKJiM0MztpbnQgbmNpX2dldF9jb25uX2luZm9fYnlfZGVzdF90eXBlX3BhcmFtc19sb2NrZWQoc3RydWN0IG5jaV9kZXYgKm5kZXYsCiYjNDM7CQkJCQkJIHU4IGRlc3RfdHlwZSwKJiM0MzsJCQkJCQkgY29uc3Qgc3RydWN0IGRlc3Rfc3BlY19wYXJhbXMgKnBhcmFtcyk7CiBpbnQgbmNpX2dldF9jb25uX2luZm9fYnlfZGVzdF90eXBlX3BhcmFtcyhzdHJ1Y3QgbmNpX2RldiAqbmRldiwgdTggZGVzdF90eXBlLAogCQkJCQkgIGNvbnN0IHN0cnVjdCBkZXN0X3NwZWNfcGFyYW1zICpwYXJhbXMpOwogCmRpZmYgLS1naXQgYS9uZXQvbmZjL25jaS9jb3JlLmMgYi9uZXQvbmZjL25jaS9jb3JlLmMKaW5kZXggNWY0NmM0YjU3MjBmNmMuLjU3NTk1YTgyOWM4YjA2IDEwMDY0NAotLS0gYS9uZXQvbmZjL25jaS9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25mYy9uY2kvY29yZS5jCkBAIC00MCw4ICYjNDM7NDAsOCBAQCBzdGF0aWMgdm9pZCBuY2lfY21kX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKIHN0YXRpYyB2b2lkIG5jaV9yeF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CiBzdGF0aWMgdm9pZCBuY2lfdHhfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwogCi1zdHJ1Y3QgbmNpX2Nvbm5faW5mbyAqbmNpX2dldF9jb25uX2luZm9fYnlfY29ubl9pZChzdHJ1Y3QgbmNpX2RldiAqbmRldiwKLQkJCQkJCSAgIGludCBjb25uX2lkKQomIzQzO3N0cnVjdCBuY2lfY29ubl9pbmZvICpuY2lfZ2V0X2Nvbm5faW5mb19ieV9jb25uX2lkX2xvY2tlZChzdHJ1Y3QgbmNpX2RldiAqbmRldiwKJiM0MzsJCQkJCQkJICBpbnQgY29ubl9pZCkKIHsKIAlzdHJ1Y3QgbmNpX2Nvbm5faW5mbyAqY29ubl9pbmZvOwogCkBAIC01Myw4ICYjNDM7NTMsOSBAQCBzdHJ1Y3QgbmNpX2Nvbm5faW5mbyAqbmNpX2dldF9jb25uX2luZm9fYnlfY29ubl9pZChzdHJ1Y3QgbmNpX2RldiAqbmRldiwKIAlyZXR1cm4gTlVMTDsKIH0KIAotaW50IG5jaV9nZXRfY29ubl9pbmZvX2J5X2Rlc3RfdHlwZV9wYXJhbXMoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHU4IGRlc3RfdHlwZSwKLQkJCQkJICBjb25zdCBzdHJ1Y3QgZGVzdF9zcGVjX3BhcmFtcyAqcGFyYW1zKQomIzQzO2ludCBuY2lfZ2V0X2Nvbm5faW5mb19ieV9kZXN0X3R5cGVfcGFyYW1zX2xvY2tlZChzdHJ1Y3QgbmNpX2RldiAqbmRldiwKJiM0MzsJCQkJCQkgdTggZGVzdF90eXBlLAomIzQzOwkJCQkJCSBjb25zdCBzdHJ1Y3QgZGVzdF9zcGVjX3BhcmFtcyAqcGFyYW1zKQogewogCWNvbnN0IHN0cnVjdCBuY2lfY29ubl9pbmZvICpjb25uX2luZm87CiAKQEAgLTcxLDYgJiM0Mzs3MiwxOSBAQCBpbnQgbmNpX2dldF9jb25uX2luZm9fYnlfZGVzdF90eXBlX3BhcmFtcyhzdHJ1Y3QgbmNpX2RldiAqbmRldiwgdTggZGVzdF90eXBlLAogCiAJcmV0dXJuIC1FSU5WQUw7CiB9CiYjNDM7CiYjNDM7aW50IG5jaV9nZXRfY29ubl9pbmZvX2J5X2Rlc3RfdHlwZV9wYXJhbXMoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHU4IGRlc3RfdHlwZSwKJiM0MzsJCQkJCSAgY29uc3Qgc3RydWN0IGRlc3Rfc3BlY19wYXJhbXMgKnBhcmFtcykKJiM0Mzt7CiYjNDM7CWludCBjb25uX2lkOwomIzQzOwomIzQzOwlzcGluX2xvY2tfYmgoJmFtcDtuZGV2LSZndDtjb25uX2luZm9fbG9jayk7CiYjNDM7CWNvbm5faWQgPSBuY2lfZ2V0X2Nvbm5faW5mb19ieV9kZXN0X3R5cGVfcGFyYW1zX2xvY2tlZChuZGV2LCBkZXN0X3R5cGUsCiYjNDM7CQkJCQkJCSAgICAgICBwYXJhbXMpOwomIzQzOwlzcGluX3VubG9ja19iaCgmYW1wO25kZXYtJmd0O2Nvbm5faW5mb19sb2NrKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGNvbm5faWQ7CiYjNDM7fQogRVhQT1JUX1NZTUJPTChuY2lfZ2V0X2Nvbm5faW5mb19ieV9kZXN0X3R5cGVfcGFyYW1zKTsKIAogLyogLS0tLSBOQ0kgcmVxdWVzdHMgLS0tLSAqLwpAQCAtNDExLDEzICYjNDM7NDI1LDE3IEBAIHN0YXRpYyB2b2lkIG5jaV9uZmNjX2xvb3BiYWNrX2NiKHZvaWQgKmNvbnRleHQsIHN0cnVjdCBza19idWZmICpza2IsIGludCBlcnIpCiAJc3RydWN0IG5jaV9kZXYgKm5kZXYgPSAoc3RydWN0IG5jaV9kZXYgKiljb250ZXh0OwogCXN0cnVjdCBuY2lfY29ubl9pbmZvICpjb25uX2luZm87CiAKLQljb25uX2luZm8gPSBuY2lfZ2V0X2Nvbm5faW5mb19ieV9jb25uX2lkKG5kZXYsIG5kZXYtJmd0O2N1cl9jb25uX2lkKTsKJiM0MzsJc3Bpbl9sb2NrX2JoKCZhbXA7bmRldi0mZ3Q7Y29ubl9pbmZvX2xvY2spOwomIzQzOwljb25uX2luZm8gPSBuY2lfZ2V0X2Nvbm5faW5mb19ieV9jb25uX2lkX2xvY2tlZChuZGV2LAomIzQzOwkJCQkJCQluZGV2LSZndDtjdXJfY29ubl9pZCk7CiAJaWYgKCFjb25uX2luZm8pIHsKJiM0MzsJCXNwaW5fdW5sb2NrX2JoKCZhbXA7bmRldi0mZ3Q7Y29ubl9pbmZvX2xvY2spOwogCQluY2lfcmVxX2NvbXBsZXRlKG5kZXYsIE5DSV9TVEFUVVNfUkVKRUNURUQpOwogCQlyZXR1cm47CiAJfQogCiAJY29ubl9pbmZvLSZndDtyeF9za2IgPSBza2I7CiYjNDM7CXNwaW5fdW5sb2NrX2JoKCZhbXA7bmRldi0mZ3Q7Y29ubl9pbmZvX2xvY2spOwogCiAJbmNpX3JlcV9jb21wbGV0ZShuZGV2LCBOQ0lfU1RBVFVTX09LKTsKIH0KQEAgLTQ0MywxMyAmIzQzOzQ2MSwxNyBAQCBpbnQgbmNpX25mY2NfbG9vcGJhY2soc3RydWN0IG5jaV9kZXYgKm5kZXYsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBkYXRhX2xlbiwKIAkJCQkJTlVMTCk7CiAJfQogCi0JY29ubl9pbmZvID0gbmNpX2dldF9jb25uX2luZm9fYnlfY29ubl9pZChuZGV2LCBjb25uX2lkKTsKLQlpZiAoIWNvbm5faW5mbykKJiM0MzsJc3Bpbl9sb2NrX2JoKCZhbXA7bmRldi0mZ3Q7Y29ubl9pbmZvX2xvY2spOwomIzQzOwljb25uX2luZm8gPSBuY2lfZ2V0X2Nvbm5faW5mb19ieV9jb25uX2lkX2xvY2tlZChuZGV2LCBjb25uX2lkKTsKJiM0MzsJaWYgKCFjb25uX2luZm8pIHsKJiM0MzsJCXNwaW5fdW5sb2NrX2JoKCZhbXA7bmRldi0mZ3Q7Y29ubl9pbmZvX2xvY2spOwogCQlyZXR1cm4gLUVQUk9UTzsKJiM0MzsJfQogCiAJLyogc3RvcmUgY2IgYW5kIGNvbnRleHQgdG8gYmUgdXNlZCBvbiByZWNlaXZpbmcgZGF0YSAqLwogCWNvbm5faW5mby0mZ3Q7ZGF0YV9leGNoYW5nZV9jYiA9IG5jaV9uZmNjX2xvb3BiYWNrX2NiOwogCWNvbm5faW5mby0mZ3Q7ZGF0YV9leGNoYW5nZV9jYl9jb250ZXh0ID0gbmRldjsKJiM0MzsJc3Bpbl91bmxvY2tfYmgoJmFtcDtuZGV2LSZndDtjb25uX2luZm9fbG9jayk7CiAKIAlza2IgPSBuY2lfc2tiX2FsbG9jKG5kZXYsIE5DSV9EQVRBX0hEUl9TSVpFICYjNDM7IGRhdGFfbGVuLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXNrYikKQEAgLTQ2NCw4ICYjNDM7NDg2LDE1IEBAIGludCBuY2lfbmZjY19sb29wYmFjayhzdHJ1Y3QgbmNpX2RldiAqbmRldiwgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGRhdGFfbGVuLAogCW5kZXYtJmd0O2N1cl9jb25uX2lkID0gY29ubl9pZDsKIAlyID0gbmNpX3JlcXVlc3QobmRldiwgbmNpX3NlbmRfZGF0YV9yZXEsICZhbXA7bG9vcGJhY2tfZGF0YSwKIAkJCW1zZWNzX3RvX2ppZmZpZXMoTkNJX0RBVEFfVElNRU9VVCkpOwotCWlmIChyID09IE5DSV9TVEFUVVNfT0sgJmFtcDsmYW1wOyByZXNwKQotCQkqcmVzcCA9IGNvbm5faW5mby0mZ3Q7cnhfc2tiOwomIzQzOwlpZiAociA9PSBOQ0lfU1RBVFVTX09LICZhbXA7JmFtcDsgcmVzcCkgewomIzQzOwkJc3Bpbl9sb2NrX2JoKCZhbXA7bmRldi0mZ3Q7Y29ubl9pbmZvX2xvY2spOwomIzQzOwkJY29ubl9pbmZvID0gbmNpX2dldF9jb25uX2luZm9fYnlfY29ubl9pZF9sb2NrZWQobmRldiwgY29ubl9pZCk7CiYjNDM7CQlpZiAoY29ubl9pbmZvKQomIzQzOwkJCSpyZXNwID0gY29ubl9pbmZvLSZndDtyeF9za2I7CiYjNDM7CQllbHNlCiYjNDM7CQkJciA9IC1FUFJPVE87CiYjNDM7CQlzcGluX3VubG9ja19iaCgmYW1wO25kZXYtJmd0O2Nvbm5faW5mb19sb2NrKTsKJiM0MzsJfQogCiAJcmV0dXJuIHI7CiB9CkBAIC0xMDQ1LDEyICYjNDM7MTA3NCw2IEBAIHN0YXRpYyBpbnQgbmNpX3RyYW5zY2VpdmUoc3RydWN0IG5mY19kZXYgKm5mY19kZXYsIHN0cnVjdCBuZmNfdGFyZ2V0ICp0YXJnZXQsCiAJaW50IHJjOwogCXN0cnVjdCBuY2lfY29ubl9pbmZvICpjb25uX2luZm87CiAKLQljb25uX2luZm8gPSBuZGV2LSZndDtyZl9jb25uX2luZm87Ci0JaWYgKCFjb25uX2luZm8pIHsKLQkJa2ZyZWVfc2tiKHNrYik7Ci0JCXJldHVybiAtRVBST1RPOwotCX0KLQogCXByX2RlYnVnKCYjMzQ7dGFyZ2V0X2lkeCAlZCwgbGVuICVkXG4mIzM0OywgdGFyZ2V0LSZndDtpZHgsIHNrYi0mZ3Q7bGVuKTsKIAogCWlmICghbmRldi0mZ3Q7dGFyZ2V0X2FjdGl2ZV9wcm90KSB7CkBAIC0xMDY0LDkgJiM0MzsxMDg3LDE5IEBAIHN0YXRpYyBpbnQgbmNpX3RyYW5zY2VpdmUoc3RydWN0IG5mY19kZXYgKm5mY19kZXYsIHN0cnVjdCBuZmNfdGFyZ2V0ICp0YXJnZXQsCiAJCXJldHVybiAtRUJVU1k7CiAJfQogCiYjNDM7CXNwaW5fbG9ja19iaCgmYW1wO25kZXYtJmd0O2Nvbm5faW5mb19sb2NrKTsKJiM0MzsJY29ubl9pbmZvID0gbmRldi0mZ3Q7cmZfY29ubl9pbmZvOwomIzQzOwlpZiAoIWNvbm5faW5mbykgewomIzQzOwkJc3Bpbl91bmxvY2tfYmgoJmFtcDtuZGV2LSZndDtjb25uX2luZm9fbG9jayk7CiYjNDM7CQlrZnJlZV9za2Ioc2tiKTsKJiM0MzsJCWNsZWFyX2JpdChOQ0lfREFUQV9FWENIQU5HRSwgJmFtcDtuZGV2LSZndDtmbGFncyk7CiYjNDM7CQlyZXR1cm4gLUVQUk9UTzsKJiM0MzsJfQomIzQzOwogCS8qIHN0b3JlIGNiIGFuZCBjb250ZXh0IHRvIGJlIHVzZWQgb24gcmVjZWl2aW5nIGRhdGEgKi8KIAljb25uX2luZm8tJmd0O2RhdGFfZXhjaGFuZ2VfY2IgPSBjYjsKIAljb25uX2luZm8tJmd0O2RhdGFfZXhjaGFuZ2VfY2JfY29udGV4dCA9IGNiX2NvbnRleHQ7CiYjNDM7CXNwaW5fdW5sb2NrX2JoKCZhbXA7bmRldi0mZ3Q7Y29ubl9pbmZvX2xvY2spOwogCiAJcmMgPSBuY2lfc2VuZF9kYXRhKG5kZXYsIE5DSV9TVEFUSUNfUkZfQ09OTl9JRCwgc2tiKTsKIAlpZiAocmMpCkBAIC0xMjg4LDYgJiM0MzsxMzIxLDcgQEAgaW50IG5jaV9yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IG5jaV9kZXYgKm5kZXYpCiAJdGltZXJfc2V0dXAoJmFtcDtuZGV2LSZndDtkYXRhX3RpbWVyLCBuY2lfZGF0YV90aW1lciwgMCk7CiAKIAltdXRleF9pbml0KCZhbXA7bmRldi0mZ3Q7cmVxX2xvY2spOwomIzQzOwlzcGluX2xvY2tfaW5pdCgmYW1wO25kZXYtJmd0O2Nvbm5faW5mb19sb2NrKTsKIAlJTklUX0xJU1RfSEVBRCgmYW1wO25kZXYtJmd0O2Nvbm5faW5mb19saXN0KTsKIAogCXJjID0gbmZjX3JlZ2lzdGVyX2RldmljZShuZGV2LSZndDtuZmNfZGV2KTsKQEAgLTEzMzMsMTEgJiM0MzsxMzY3LDE2IEBAIHZvaWQgbmNpX3VucmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCBuY2lfZGV2ICpuZGV2KQogCWRlc3Ryb3lfd29ya3F1ZXVlKG5kZXYtJmd0O3J4X3dxKTsKIAlkZXN0cm95X3dvcmtxdWV1ZShuZGV2LSZndDt0eF93cSk7CiAKJiM0MzsJc3Bpbl9sb2NrX2JoKCZhbXA7bmRldi0mZ3Q7Y29ubl9pbmZvX2xvY2spOwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjb25uX2luZm8sIG4sICZhbXA7bmRldi0mZ3Q7Y29ubl9pbmZvX2xpc3QsIGxpc3QpIHsKIAkJbGlzdF9kZWwoJmFtcDtjb25uX2luZm8tJmd0O2xpc3QpOwomIzQzOwkJaWYgKGNvbm5faW5mbyA9PSBuZGV2LSZndDtyZl9jb25uX2luZm8pCiYjNDM7CQkJbmRldi0mZ3Q7cmZfY29ubl9pbmZvID0gTlVMTDsKJiM0MzsJCWlmIChjb25uX2luZm8gPT0gbmRldi0mZ3Q7aGNpX2Rldi0mZ3Q7Y29ubl9pbmZvKQomIzQzOwkJCW5kZXYtJmd0O2hjaV9kZXYtJmd0O2Nvbm5faW5mbyA9IE5VTEw7CiAJCS8qIGNvbm5faW5mbyBpcyBhbGxvY2F0ZWQgd2l0aCBkZXZtX2t6YWxsb2MgKi8KIAl9Ci0KJiM0MzsJc3Bpbl91bmxvY2tfYmgoJmFtcDtuZGV2LSZndDtjb25uX2luZm9fbG9jayk7CiAJbmZjX3JlbW92ZV9kZXZpY2UobmRldi0mZ3Q7bmZjX2Rldik7CiB9CiBFWFBPUlRfU1lNQk9MKG5jaV91bnJlZ2lzdGVyX2RldmljZSk7CkBAIC0xNTIzLDIzICYjNDM7MTU2MiwzMSBAQCBzdGF0aWMgdm9pZCBuY2lfdHhfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiAJc3RydWN0IG5jaV9jb25uX2luZm8gKmNvbm5faW5mbzsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCi0JY29ubl9pbmZvID0gbmNpX2dldF9jb25uX2luZm9fYnlfY29ubl9pZChuZGV2LCBuZGV2LSZndDtjdXJfY29ubl9pZCk7Ci0JaWYgKCFjb25uX2luZm8pCi0JCXJldHVybjsKJiM0MzsJLyogU2VuZCBxdWV1ZWQgdHggZGF0YSAqLwomIzQzOwlmb3IgKDs7KSB7CiYjNDM7CQlzcGluX2xvY2tfYmgoJmFtcDtuZGV2LSZndDtjb25uX2luZm9fbG9jayk7CiYjNDM7CQljb25uX2luZm8gPSBuY2lfZ2V0X2Nvbm5faW5mb19ieV9jb25uX2lkX2xvY2tlZChuZGV2LAomIzQzOwkJCQkJCQkJbmRldi0mZ3Q7Y3VyX2Nvbm5faWQpOwomIzQzOwkJaWYgKCFjb25uX2luZm8pCiYjNDM7CQkJZ290byB1bmxvY2s7CiAKLQlwcl9kZWJ1ZygmIzM0O2NyZWRpdHNfY250ICVkXG4mIzM0OywgYXRvbWljX3JlYWQoJmFtcDtjb25uX2luZm8tJmd0O2NyZWRpdHNfY250KSk7CiYjNDM7CQlwcl9kZWJ1ZygmIzM0O2NyZWRpdHNfY250ICVkXG4mIzM0OywKJiM0MzsJCQkgYXRvbWljX3JlYWQoJmFtcDtjb25uX2luZm8tJmd0O2NyZWRpdHNfY250KSk7CiYjNDM7CiYjNDM7CQlpZiAoIWF0b21pY19yZWFkKCZhbXA7Y29ubl9pbmZvLSZndDtjcmVkaXRzX2NudCkpCiYjNDM7CQkJZ290byB1bmxvY2s7CiAKLQkvKiBTZW5kIHF1ZXVlZCB0eCBkYXRhICovCi0Jd2hpbGUgKGF0b21pY19yZWFkKCZhbXA7Y29ubl9pbmZvLSZndDtjcmVkaXRzX2NudCkpIHsKIAkJc2tiID0gc2tiX2RlcXVldWUoJmFtcDtuZGV2LSZndDt0eF9xKTsKIAkJaWYgKCFza2IpCi0JCQlyZXR1cm47Ci0JCWtjb3ZfcmVtb3RlX3N0YXJ0X2NvbW1vbihza2JfZ2V0X2tjb3ZfaGFuZGxlKHNrYikpOwomIzQzOwkJCWdvdG8gdW5sb2NrOwogCiAJCS8qIENoZWNrIGlmIGRhdGEgZmxvdyBjb250cm9sIGlzIHVzZWQgKi8KIAkJaWYgKGF0b21pY19yZWFkKCZhbXA7Y29ubl9pbmZvLSZndDtjcmVkaXRzX2NudCkgIT0KIAkJICAgIE5DSV9EQVRBX0ZMT1dfQ09OVFJPTF9OT1RfVVNFRCkKIAkJCWF0b21pY19kZWMoJmFtcDtjb25uX2luZm8tJmd0O2NyZWRpdHNfY250KTsKJiM0MzsJCXNwaW5fdW5sb2NrX2JoKCZhbXA7bmRldi0mZ3Q7Y29ubl9pbmZvX2xvY2spOwomIzQzOwomIzQzOwkJa2Nvdl9yZW1vdGVfc3RhcnRfY29tbW9uKHNrYl9nZXRfa2Nvdl9oYW5kbGUoc2tiKSk7CiAKIAkJcHJfZGVidWcoJiMzNDtOQ0kgVFg6IE1UPWRhdGEsIFBCRj0lZCwgY29ubl9pZD0lZCwgcGxlbj0lZFxuJiMzNDssCiAJCQkgbmNpX3BiZihza2ItJmd0O2RhdGEpLApAQCAtMTU1Miw2ICYjNDM7MTU5OSw5IEBAIHN0YXRpYyB2b2lkIG5jaV90eF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIAkJCSAgamlmZmllcyAmIzQzOyBtc2Vjc190b19qaWZmaWVzKE5DSV9EQVRBX1RJTUVPVVQpKTsKIAkJa2Nvdl9yZW1vdGVfc3RvcCgpOwogCX0KJiM0MzsKJiM0Mzt1bmxvY2s6CiYjNDM7CXNwaW5fdW5sb2NrX2JoKCZhbXA7bmRldi0mZ3Q7Y29ubl9pbmZvX2xvY2spOwogfQogCiAvKiAtLS0tLSBOQ0kgUlggd29ya2VyIHRocmVhZCAoZGF0YSAmYW1wOyBjb250cm9sKSAtLS0tLSAqLwpkaWZmIC0tZ2l0IGEvbmV0L25mYy9uY2kvZGF0YS5jIGIvbmV0L25mYy9uY2kvZGF0YS5jCmluZGV4IDVmOThjNzNkYjVhZmRlLi4zMzRjMGU1YTk0ZGJjNCAxMDA2NDQKLS0tIGEvbmV0L25mYy9uY2kvZGF0YS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZmMvbmNpL2RhdGEuYwpAQCAtMzAsOCAmIzQzOzMwLDEwIEBAIHZvaWQgbmNpX2RhdGFfZXhjaGFuZ2VfY29tcGxldGUoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHN0cnVjdCBza19idWZmICpza2IsCiAJZGF0YV9leGNoYW5nZV9jYl90IGNiOwogCXZvaWQgKmNiX2NvbnRleHQ7CiAKLQljb25uX2luZm8gPSBuY2lfZ2V0X2Nvbm5faW5mb19ieV9jb25uX2lkKG5kZXYsIGNvbm5faWQpOwomIzQzOwlzcGluX2xvY2tfYmgoJmFtcDtuZGV2LSZndDtjb25uX2luZm9fbG9jayk7CiYjNDM7CWNvbm5faW5mbyA9IG5jaV9nZXRfY29ubl9pbmZvX2J5X2Nvbm5faWRfbG9ja2VkKG5kZXYsIGNvbm5faWQpOwogCWlmICghY29ubl9pbmZvKSB7CiYjNDM7CQlzcGluX3VubG9ja19iaCgmYW1wO25kZXYtJmd0O2Nvbm5faW5mb19sb2NrKTsKIAkJa2ZyZWVfc2tiKHNrYik7CiAJCWNsZWFyX2JpdChOQ0lfREFUQV9FWENIQU5HRSwgJmFtcDtuZGV2LSZndDtmbGFncyk7CiAJCXJldHVybjsKQEAgLTM5LDYgJiM0Mzs0MSw3IEBAIHZvaWQgbmNpX2RhdGFfZXhjaGFuZ2VfY29tcGxldGUoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHN0cnVjdCBza19idWZmICpza2IsCiAKIAljYiA9IGNvbm5faW5mby0mZ3Q7ZGF0YV9leGNoYW5nZV9jYjsKIAljYl9jb250ZXh0ID0gY29ubl9pbmZvLSZndDtkYXRhX2V4Y2hhbmdlX2NiX2NvbnRleHQ7CiYjNDM7CXNwaW5fdW5sb2NrX2JoKCZhbXA7bmRldi0mZ3Q7Y29ubl9pbmZvX2xvY2spOwogCiAJcHJfZGVidWcoJiMzNDtsZW4gJWQsIGVyciAlZFxuJiMzNDssIHNrYiA/IHNrYi0mZ3Q7bGVuIDogMCwgZXJyKTsKIApAQCAtODUsMTkgJiM0Mzs4OCwyNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbmNpX3B1c2hfZGF0YV9oZHIoc3RydWN0IG5jaV9kZXYgKm5kZXYsCiBpbnQgbmNpX2Nvbm5fbWF4X2RhdGFfcGt0X3BheWxvYWRfc2l6ZShzdHJ1Y3QgbmNpX2RldiAqbmRldiwgX191OCBjb25uX2lkKQogewogCWNvbnN0IHN0cnVjdCBuY2lfY29ubl9pbmZvICpjb25uX2luZm87CiYjNDM7CWludCBtYXhfcGt0X3BheWxvYWRfbGVuOwogCi0JY29ubl9pbmZvID0gbmNpX2dldF9jb25uX2luZm9fYnlfY29ubl9pZChuZGV2LCBjb25uX2lkKTsKLQlpZiAoIWNvbm5faW5mbykKJiM0MzsJc3Bpbl9sb2NrX2JoKCZhbXA7bmRldi0mZ3Q7Y29ubl9pbmZvX2xvY2spOwomIzQzOwljb25uX2luZm8gPSBuY2lfZ2V0X2Nvbm5faW5mb19ieV9jb25uX2lkX2xvY2tlZChuZGV2LCBjb25uX2lkKTsKJiM0MzsJaWYgKCFjb25uX2luZm8pIHsKJiM0MzsJCXNwaW5fdW5sb2NrX2JoKCZhbXA7bmRldi0mZ3Q7Y29ubl9pbmZvX2xvY2spOwogCQlyZXR1cm4gLUVQUk9UTzsKJiM0MzsJfQomIzQzOwltYXhfcGt0X3BheWxvYWRfbGVuID0gY29ubl9pbmZvLSZndDttYXhfcGt0X3BheWxvYWRfbGVuOwomIzQzOwlzcGluX3VubG9ja19iaCgmYW1wO25kZXYtJmd0O2Nvbm5faW5mb19sb2NrKTsKIAotCXJldHVybiBjb25uX2luZm8tJmd0O21heF9wa3RfcGF5bG9hZF9sZW47CiYjNDM7CXJldHVybiBtYXhfcGt0X3BheWxvYWRfbGVuOwogfQogRVhQT1JUX1NZTUJPTChuY2lfY29ubl9tYXhfZGF0YV9wa3RfcGF5bG9hZF9zaXplKTsKIAogc3RhdGljIGludCBuY2lfcXVldWVfdHhfZGF0YV9mcmFncyhzdHJ1Y3QgbmNpX2RldiAqbmRldiwKIAkJCQkgICBfX3U4IGNvbm5faWQsCi0JCQkJICAgc3RydWN0IHNrX2J1ZmYgKnNrYikgewotCWNvbnN0IHN0cnVjdCBuY2lfY29ubl9pbmZvICpjb25uX2luZm87CiYjNDM7CQkJCSAgIHN0cnVjdCBza19idWZmICpza2IsCiYjNDM7CQkJCSAgIF9fdTggbWF4X3BrdF9wYXlsb2FkX2xlbikKJiM0Mzt7CiAJaW50IHRvdGFsX2xlbiA9IHNrYi0mZ3Q7bGVuOwogCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEgPSBza2ItJmd0O2RhdGE7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTEwOCwxNyAmIzQzOzExOCwxMCBAQCBzdGF0aWMgaW50IG5jaV9xdWV1ZV90eF9kYXRhX2ZyYWdzKHN0cnVjdCBuY2lfZGV2ICpuZGV2LAogCiAJcHJfZGVidWcoJiMzNDtjb25uX2lkIDB4JXgsIHRvdGFsX2xlbiAlZFxuJiMzNDssIGNvbm5faWQsIHRvdGFsX2xlbik7CiAKLQljb25uX2luZm8gPSBuY2lfZ2V0X2Nvbm5faW5mb19ieV9jb25uX2lkKG5kZXYsIGNvbm5faWQpOwotCWlmICghY29ubl9pbmZvKSB7Ci0JCXJjID0gLUVQUk9UTzsKLQkJZ290byBleGl0OwotCX0KLQogCV9fc2tiX3F1ZXVlX2hlYWRfaW5pdCgmYW1wO2ZyYWdzX3EpOwogCiAJd2hpbGUgKHRvdGFsX2xlbikgewotCQlmcmFnX2xlbiA9Ci0JCQltaW5fdChpbnQsIHRvdGFsX2xlbiwgY29ubl9pbmZvLSZndDttYXhfcGt0X3BheWxvYWRfbGVuKTsKJiM0MzsJCWZyYWdfbGVuID0gbWluX3QoaW50LCB0b3RhbF9sZW4sIG1heF9wa3RfcGF5bG9hZF9sZW4pOwogCiAJCXNrYl9mcmFnID0gbmNpX3NrYl9hbGxvYyhuZGV2LAogCQkJCQkgKE5DSV9EQVRBX0hEUl9TSVpFICYjNDM7IGZyYWdfbGVuKSwKQEAgLTE3MSw0MCAmIzQzOzE3NCw0NyBAQCBzdGF0aWMgaW50IG5jaV9xdWV1ZV90eF9kYXRhX2ZyYWdzKHN0cnVjdCBuY2lfZGV2ICpuZGV2LAogaW50IG5jaV9zZW5kX2RhdGEoc3RydWN0IG5jaV9kZXYgKm5kZXYsIF9fdTggY29ubl9pZCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAljb25zdCBzdHJ1Y3QgbmNpX2Nvbm5faW5mbyAqY29ubl9pbmZvOwomIzQzOwlfX3U4IG1heF9wa3RfcGF5bG9hZF9sZW47CiAJaW50IHJjID0gMDsKIAogCXByX2RlYnVnKCYjMzQ7Y29ubl9pZCAweCV4LCBwbGVuICVkXG4mIzM0OywgY29ubl9pZCwgc2tiLSZndDtsZW4pOwogCi0JY29ubl9pbmZvID0gbmNpX2dldF9jb25uX2luZm9fYnlfY29ubl9pZChuZGV2LCBjb25uX2lkKTsKJiM0MzsJc3Bpbl9sb2NrX2JoKCZhbXA7bmRldi0mZ3Q7Y29ubl9pbmZvX2xvY2spOwomIzQzOwljb25uX2luZm8gPSBuY2lfZ2V0X2Nvbm5faW5mb19ieV9jb25uX2lkX2xvY2tlZChuZGV2LCBjb25uX2lkKTsKIAlpZiAoIWNvbm5faW5mbykgewogCQlyYyA9IC1FUFJPVE87Ci0JCWdvdG8gZnJlZV9leGl0OwomIzQzOwkJZ290byB1bmxvY2s7CiAJfQomIzQzOwltYXhfcGt0X3BheWxvYWRfbGVuID0gY29ubl9pbmZvLSZndDttYXhfcGt0X3BheWxvYWRfbGVuOwomIzQzOwlzcGluX3VubG9ja19iaCgmYW1wO25kZXYtJmd0O2Nvbm5faW5mb19sb2NrKTsKIAogCS8qIGNoZWNrIGlmIHRoZSBwYWNrZXQgbmVlZCB0byBiZSBmcmFnbWVudGVkICovCi0JaWYgKHNrYi0mZ3Q7bGVuICZsdDs9IGNvbm5faW5mby0mZ3Q7bWF4X3BrdF9wYXlsb2FkX2xlbikgewomIzQzOwlpZiAoc2tiLSZndDtsZW4gJmx0Oz0gbWF4X3BrdF9wYXlsb2FkX2xlbikgewogCQkvKiBubyBuZWVkIHRvIGZyYWdtZW50IHBhY2tldCAqLwogCQluY2lfcHVzaF9kYXRhX2hkcihuZGV2LCBjb25uX2lkLCBza2IsIE5DSV9QQkZfTEFTVCk7CiAKIAkJc2tiX3F1ZXVlX3RhaWwoJmFtcDtuZGV2LSZndDt0eF9xLCBza2IpOwogCX0gZWxzZSB7CiAJCS8qIGZyYWdtZW50IHBhY2tldCBhbmQgcXVldWUgdGhlIGZyYWdtZW50cyAqLwotCQlyYyA9IG5jaV9xdWV1ZV90eF9kYXRhX2ZyYWdzKG5kZXYsIGNvbm5faWQsIHNrYik7CiYjNDM7CQlyYyA9IG5jaV9xdWV1ZV90eF9kYXRhX2ZyYWdzKG5kZXYsIGNvbm5faWQsIHNrYiwKJiM0MzsJCQkJCSAgICAgbWF4X3BrdF9wYXlsb2FkX2xlbik7CiAJCWlmIChyYykgewogCQkJcHJfZXJyKCYjMzQ7ZmFpbGVkIHRvIGZyYWdtZW50IHR4IGRhdGEgcGFja2V0XG4mIzM0Oyk7Ci0JCQlnb3RvIGZyZWVfZXhpdDsKJiM0MzsJCQlrZnJlZV9za2Ioc2tiKTsKJiM0MzsJCQlyZXR1cm4gcmM7CiAJCX0KIAl9CiAKJiM0MzsJc3Bpbl9sb2NrX2JoKCZhbXA7bmRldi0mZ3Q7Y29ubl9pbmZvX2xvY2spOwogCW5kZXYtJmd0O2N1cl9jb25uX2lkID0gY29ubl9pZDsKLQlxdWV1ZV93b3JrKG5kZXYtJmd0O3R4X3dxLCAmYW1wO25kZXYtJmd0O3R4X3dvcmspOwotCi0JZ290byBleGl0OwotCi1mcmVlX2V4aXQ6Ci0Ja2ZyZWVfc2tiKHNrYik7CiYjNDM7CXNwaW5fdW5sb2NrX2JoKCZhbXA7bmRldi0mZ3Q7Y29ubl9pbmZvX2xvY2spOwogCi1leGl0OgomIzQzOwlxdWV1ZV93b3JrKG5kZXYtJmd0O3R4X3dxLCAmYW1wO25kZXYtJmd0O3R4X3dvcmspOwomIzQzOwlyZXR1cm4gcmM7CiYjNDM7dW5sb2NrOgomIzQzOwlzcGluX3VubG9ja19iaCgmYW1wO25kZXYtJmd0O2Nvbm5faW5mb19sb2NrKTsKJiM0MzsJaWYgKHJjKQomIzQzOwkJa2ZyZWVfc2tiKHNrYik7CiAJcmV0dXJuIHJjOwogfQogRVhQT1JUX1NZTUJPTChuY2lfc2VuZF9kYXRhKTsKQEAgLTI4MiwxMSAmIzQzOzI5MiwxNSBAQCB2b2lkIG5jaV9yeF9kYXRhX3BhY2tldChzdHJ1Y3QgbmNpX2RldiAqbmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAkJIG5jaV9jb25uX2lkKHNrYi0mZ3Q7ZGF0YSksCiAJCSBuY2lfcGxlbihza2ItJmd0O2RhdGEpKTsKIAotCWNvbm5faW5mbyA9IG5jaV9nZXRfY29ubl9pbmZvX2J5X2Nvbm5faWQobmRldiwgbmNpX2Nvbm5faWQoc2tiLSZndDtkYXRhKSk7CiYjNDM7CXNwaW5fbG9ja19iaCgmYW1wO25kZXYtJmd0O2Nvbm5faW5mb19sb2NrKTsKJiM0MzsJY29ubl9pbmZvID0gbmNpX2dldF9jb25uX2luZm9fYnlfY29ubl9pZF9sb2NrZWQobmRldiwKJiM0MzsJCQkJCQkJbmNpX2Nvbm5faWQoc2tiLSZndDtkYXRhKSk7CiAJaWYgKCFjb25uX2luZm8pIHsKJiM0MzsJCXNwaW5fdW5sb2NrX2JoKCZhbXA7bmRldi0mZ3Q7Y29ubl9pbmZvX2xvY2spOwogCQlrZnJlZV9za2Ioc2tiKTsKIAkJcmV0dXJuOwogCX0KJiM0MzsJc3Bpbl91bmxvY2tfYmgoJmFtcDtuZGV2LSZndDtjb25uX2luZm9fbG9jayk7CiAKIAkvKiBzdHJpcCB0aGUgbmNpIGRhdGEgaGVhZGVyICovCiAJc2tiX3B1bGwoc2tiLCBOQ0lfREFUQV9IRFJfU0laRSk7CmRpZmYgLS1naXQgYS9uZXQvbmZjL25jaS9oY2kuYyBiL25ldC9uZmMvbmNpL2hjaS5jCmluZGV4IGMwM2U4YTBiZDNiZDY0Li5lMmY3YWIxNTk3M2NlOSAxMDA2NDQKLS0tIGEvbmV0L25mYy9uY2kvaGNpLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25mYy9uY2kvaGNpLmMKQEAgLTE0NywxNCAmIzQzOzE0NywyMiBAQCBzdGF0aWMgaW50IG5jaV9oY2lfc2VuZF9kYXRhKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCB1OCBwaXBlLAogCXN0cnVjdCBza19idWZmICpza2I7CiAJaW50IGxlbiwgaSwgcjsKIAl1OCBjYiA9IHBpcGU7CiYjNDM7CXU4IGNvbm5faWQ7CiYjNDM7CXU4IG1heF9wa3RfcGF5bG9hZF9sZW47CiAKJiM0MzsJc3Bpbl9sb2NrX2JoKCZhbXA7bmRldi0mZ3Q7Y29ubl9pbmZvX2xvY2spOwogCWNvbm5faW5mbyA9IG5kZXYtJmd0O2hjaV9kZXYtJmd0O2Nvbm5faW5mbzsKLQlpZiAoIWNvbm5faW5mbykKJiM0MzsJaWYgKCFjb25uX2luZm8pIHsKJiM0MzsJCXNwaW5fdW5sb2NrX2JoKCZhbXA7bmRldi0mZ3Q7Y29ubl9pbmZvX2xvY2spOwogCQlyZXR1cm4gLUVQUk9UTzsKJiM0MzsJfQomIzQzOwljb25uX2lkID0gY29ubl9pbmZvLSZndDtjb25uX2lkOwomIzQzOwltYXhfcGt0X3BheWxvYWRfbGVuID0gY29ubl9pbmZvLSZndDttYXhfcGt0X3BheWxvYWRfbGVuOwomIzQzOwlzcGluX3VubG9ja19iaCgmYW1wO25kZXYtJmd0O2Nvbm5faW5mb19sb2NrKTsKIAogCWkgPSAwOwotCXNrYiA9IG5jaV9za2JfYWxsb2MobmRldiwgY29ubl9pbmZvLSZndDttYXhfcGt0X3BheWxvYWRfbGVuICYjNDM7Ci0JCQkgICAgTkNJX0RBVEFfSERSX1NJWkUsIEdGUF9BVE9NSUMpOwomIzQzOwlza2IgPSBuY2lfc2tiX2FsbG9jKG5kZXYsIG1heF9wa3RfcGF5bG9hZF9sZW4gJiM0MzsgTkNJX0RBVEFfSERSX1NJWkUsCiYjNDM7CQkJICAgIEdGUF9BVE9NSUMpOwogCWlmICghc2tiKQogCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtMTYzLDEyICYjNDM7MTcxLDExIEBAIHN0YXRpYyBpbnQgbmNpX2hjaV9zZW5kX2RhdGEoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHU4IHBpcGUsCiAKIAlkbyB7CiAJCS8qIElmIGxhc3QgcGFja2V0IGFkZCBOQ0lfSEZQX05PX0NIQUlOSU5HICovCi0JCWlmIChpICYjNDM7IGNvbm5faW5mby0mZ3Q7bWF4X3BrdF9wYXlsb2FkX2xlbiAtCi0JCSAgICAoc2tiLSZndDtsZW4gJiM0MzsgMSkgJmd0Oz0gZGF0YV9sZW4pIHsKJiM0MzsJCWlmIChpICYjNDM7IG1heF9wa3RfcGF5bG9hZF9sZW4gLSAoc2tiLSZndDtsZW4gJiM0MzsgMSkgJmd0Oz0gZGF0YV9sZW4pIHsKIAkJCWNiIHw9IE5DSV9IRlBfTk9fQ0hBSU5JTkc7CiAJCQlsZW4gPSBkYXRhX2xlbiAtIGk7CiAJCX0gZWxzZSB7Ci0JCQlsZW4gPSBjb25uX2luZm8tJmd0O21heF9wa3RfcGF5bG9hZF9sZW4gLSBza2ItJmd0O2xlbiAtIDE7CiYjNDM7CQkJbGVuID0gbWF4X3BrdF9wYXlsb2FkX2xlbiAtIHNrYi0mZ3Q7bGVuIC0gMTsKIAkJfQogCiAJCSoodTggKilza2JfcHVzaChza2IsIDEpID0gY2I7CkBAIC0xNzYsMTUgJiM0MzsxODMsMTQgQEAgc3RhdGljIGludCBuY2lfaGNpX3NlbmRfZGF0YShzdHJ1Y3QgbmNpX2RldiAqbmRldiwgdTggcGlwZSwKIAkJaWYgKGxlbiAmZ3Q7IDApCiAJCQlza2JfcHV0X2RhdGEoc2tiLCBkYXRhICYjNDM7IGksIGxlbik7CiAKLQkJciA9IG5jaV9zZW5kX2RhdGEobmRldiwgY29ubl9pbmZvLSZndDtjb25uX2lkLCBza2IpOwomIzQzOwkJciA9IG5jaV9zZW5kX2RhdGEobmRldiwgY29ubl9pZCwgc2tiKTsKIAkJaWYgKHIgJmx0OyAwKQogCQkJcmV0dXJuIHI7CiAKIAkJaSAmIzQzOz0gbGVuOwogCiAJCWlmIChpICZsdDsgZGF0YV9sZW4pIHsKLQkJCXNrYiA9IG5jaV9za2JfYWxsb2MobmRldiwKLQkJCQkJICAgIGNvbm5faW5mby0mZ3Q7bWF4X3BrdF9wYXlsb2FkX2xlbiAmIzQzOwomIzQzOwkJCXNrYiA9IG5jaV9za2JfYWxsb2MobmRldiwgbWF4X3BrdF9wYXlsb2FkX2xlbiAmIzQzOwogCQkJCQkgICAgTkNJX0RBVEFfSERSX1NJWkUsIEdGUF9BVE9NSUMpOwogCQkJaWYgKCFza2IpCiAJCQkJcmV0dXJuIC1FTk9NRU07CkBAIC0yMjUsMTcgJiM0MzsyMzEsMjIgQEAgaW50IG5jaV9oY2lfc2VuZF9jbWQoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHU4IGdhdGUsIHU4IGNtZCwKIAljb25zdCBzdHJ1Y3QgbmNpX2hjcF9tZXNzYWdlICptZXNzYWdlOwogCWNvbnN0IHN0cnVjdCBuY2lfY29ubl9pbmZvICpjb25uX2luZm87CiAJc3RydWN0IG5jaV9kYXRhIGRhdGE7CiYjNDM7CXN0cnVjdCBza19idWZmICpyeF9za2I7CiAJaW50IHI7CiAJdTggcGlwZSA9IG5kZXYtJmd0O2hjaV9kZXYtJmd0O2dhdGUycGlwZVtnYXRlXTsKIAogCWlmIChwaXBlID09IE5DSV9IQ0lfSU5WQUxJRF9QSVBFKQogCQlyZXR1cm4gLUVBRERSTk9UQVZBSUw7CiAKJiM0MzsJc3Bpbl9sb2NrX2JoKCZhbXA7bmRldi0mZ3Q7Y29ubl9pbmZvX2xvY2spOwogCWNvbm5faW5mbyA9IG5kZXYtJmd0O2hjaV9kZXYtJmd0O2Nvbm5faW5mbzsKLQlpZiAoIWNvbm5faW5mbykKJiM0MzsJaWYgKCFjb25uX2luZm8pIHsKJiM0MzsJCXNwaW5fdW5sb2NrX2JoKCZhbXA7bmRldi0mZ3Q7Y29ubl9pbmZvX2xvY2spOwogCQlyZXR1cm4gLUVQUk9UTzsKJiM0MzsJfQogCiAJZGF0YS5jb25uX2lkID0gY29ubl9pbmZvLSZndDtjb25uX2lkOwomIzQzOwlzcGluX3VubG9ja19iaCgmYW1wO25kZXYtJmd0O2Nvbm5faW5mb19sb2NrKTsKIAlkYXRhLnBpcGUgPSBwaXBlOwogCWRhdGEuY21kID0gTkNJX0hDUF9IRUFERVIoTkNJX0hDSV9IQ1BfQ09NTUFORCwgY21kKTsKIAlkYXRhLmRhdGEgPSBwYXJhbTsKQEAgLTI0NCwxMyAmIzQzOzI1NSwyMiBAQCBpbnQgbmNpX2hjaV9zZW5kX2NtZChzdHJ1Y3QgbmNpX2RldiAqbmRldiwgdTggZ2F0ZSwgdTggY21kLAogCXIgPSBuY2lfcmVxdWVzdChuZGV2LCBuY2lfaGNpX3NlbmRfZGF0YV9yZXEsICZhbXA7ZGF0YSwKIAkJCW1zZWNzX3RvX2ppZmZpZXMoTkNJX0RBVEFfVElNRU9VVCkpOwogCWlmIChyID09IE5DSV9TVEFUVVNfT0spIHsKLQkJbWVzc2FnZSA9IChzdHJ1Y3QgbmNpX2hjcF9tZXNzYWdlICopY29ubl9pbmZvLSZndDtyeF9za2ItJmd0O2RhdGE7CiYjNDM7CQlzcGluX2xvY2tfYmgoJmFtcDtuZGV2LSZndDtjb25uX2luZm9fbG9jayk7CiYjNDM7CQljb25uX2luZm8gPSBuZGV2LSZndDtoY2lfZGV2LSZndDtjb25uX2luZm87CiYjNDM7CQlyeF9za2IgPSBjb25uX2luZm8gPyBjb25uX2luZm8tJmd0O3J4X3NrYiA6IE5VTEw7CiYjNDM7CQlpZiAoIXJ4X3NrYikgewomIzQzOwkJCXNwaW5fdW5sb2NrX2JoKCZhbXA7bmRldi0mZ3Q7Y29ubl9pbmZvX2xvY2spOwomIzQzOwkJCXJldHVybiAtRVBST1RPOwomIzQzOwkJfQomIzQzOwomIzQzOwkJbWVzc2FnZSA9IChzdHJ1Y3QgbmNpX2hjcF9tZXNzYWdlICopcnhfc2tiLSZndDtkYXRhOwogCQlyID0gbmNpX2hjaV9yZXN1bHRfdG9fZXJybm8oCiAJCQlOQ0lfSENQX01TR19HRVRfQ01EKG1lc3NhZ2UtJmd0O2hlYWRlcikpOwotCQlza2JfcHVsbChjb25uX2luZm8tJmd0O3J4X3NrYiwgTkNJX0hDSV9IQ1BfTUVTU0FHRV9IRUFERVJfTEVOKTsKJiM0MzsJCXNrYl9wdWxsKHJ4X3NrYiwgTkNJX0hDSV9IQ1BfTUVTU0FHRV9IRUFERVJfTEVOKTsKJiM0MzsJCXNwaW5fdW5sb2NrX2JoKCZhbXA7bmRldi0mZ3Q7Y29ubl9pbmZvX2xvY2spOwogCiAJCWlmICghciAmYW1wOyZhbXA7IHNrYikKLQkJCSpza2IgPSBjb25uX2luZm8tJmd0O3J4X3NrYjsKJiM0MzsJCQkqc2tiID0gcnhfc2tiOwogCX0KIAogCXJldHVybiByOwpAQCAtMzY2LDExICYjNDM7Mzg2LDE1IEBAIHN0YXRpYyB2b2lkIG5jaV9oY2lfcmVzcF9yZWNlaXZlZChzdHJ1Y3QgbmNpX2RldiAqbmRldiwgdTggcGlwZSwKIHsKIAlzdHJ1Y3QgbmNpX2Nvbm5faW5mbyAqY29ubl9pbmZvOwogCiYjNDM7CXNwaW5fbG9ja19iaCgmYW1wO25kZXYtJmd0O2Nvbm5faW5mb19sb2NrKTsKIAljb25uX2luZm8gPSBuZGV2LSZndDtoY2lfZGV2LSZndDtjb25uX2luZm87Ci0JaWYgKCFjb25uX2luZm8pCiYjNDM7CWlmICghY29ubl9pbmZvKSB7CiYjNDM7CQlzcGluX3VubG9ja19iaCgmYW1wO25kZXYtJmd0O2Nvbm5faW5mb19sb2NrKTsKIAkJZ290byBleGl0OwomIzQzOwl9CiAKIAljb25uX2luZm8tJmd0O3J4X3NrYiA9IHNrYjsKJiM0MzsJc3Bpbl91bmxvY2tfYmgoJmFtcDtuZGV2LSZndDtjb25uX2luZm9fbG9jayk7CiAKIGV4aXQ6CiAJbmNpX3JlcV9jb21wbGV0ZShuZGV2LCBOQ0lfU1RBVFVTX09LKTsKQEAgLTUxMCwxMSAmIzQzOzUzNCwxNSBAQCBpbnQgbmNpX2hjaV9vcGVuX3BpcGUoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHU4IHBpcGUpCiAJc3RydWN0IG5jaV9kYXRhIGRhdGE7CiAJY29uc3Qgc3RydWN0IG5jaV9jb25uX2luZm8gKmNvbm5faW5mbzsKIAomIzQzOwlzcGluX2xvY2tfYmgoJmFtcDtuZGV2LSZndDtjb25uX2luZm9fbG9jayk7CiAJY29ubl9pbmZvID0gbmRldi0mZ3Q7aGNpX2Rldi0mZ3Q7Y29ubl9pbmZvOwotCWlmICghY29ubl9pbmZvKQomIzQzOwlpZiAoIWNvbm5faW5mbykgewomIzQzOwkJc3Bpbl91bmxvY2tfYmgoJmFtcDtuZGV2LSZndDtjb25uX2luZm9fbG9jayk7CiAJCXJldHVybiAtRVBST1RPOwomIzQzOwl9CiAKIAlkYXRhLmNvbm5faWQgPSBjb25uX2luZm8tJmd0O2Nvbm5faWQ7CiYjNDM7CXNwaW5fdW5sb2NrX2JoKCZhbXA7bmRldi0mZ3Q7Y29ubl9pbmZvX2xvY2spOwogCWRhdGEucGlwZSA9IHBpcGU7CiAJZGF0YS5jbWQgPSBOQ0lfSENQX0hFQURFUihOQ0lfSENJX0hDUF9DT01NQU5ELAogCQkJCSAgICAgICBOQ0lfSENJX0FOWV9PUEVOX1BJUEUpOwpAQCAtNTY5LDYgJiM0Mzs1OTcsNyBAQCBpbnQgbmNpX2hjaV9zZXRfcGFyYW0oc3RydWN0IG5jaV9kZXYgKm5kZXYsIHU4IGdhdGUsIHU4IGlkeCwKIAljb25zdCBzdHJ1Y3QgbmNpX2hjcF9tZXNzYWdlICptZXNzYWdlOwogCWNvbnN0IHN0cnVjdCBuY2lfY29ubl9pbmZvICpjb25uX2luZm87CiAJc3RydWN0IG5jaV9kYXRhIGRhdGE7CiYjNDM7CXN0cnVjdCBza19idWZmICpyeF9za2I7CiAJaW50IHI7CiAJdTggKnRtcDsKIAl1OCBwaXBlID0gbmRldi0mZ3Q7aGNpX2Rldi0mZ3Q7Z2F0ZTJwaXBlW2dhdGVdOwpAQCAtNTc4LDkgJiM0Mzs2MDcsMTQgQEAgaW50IG5jaV9oY2lfc2V0X3BhcmFtKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCB1OCBnYXRlLCB1OCBpZHgsCiAJaWYgKHBpcGUgPT0gTkNJX0hDSV9JTlZBTElEX1BJUEUpCiAJCXJldHVybiAtRUFERFJOT1RBVkFJTDsKIAomIzQzOwlzcGluX2xvY2tfYmgoJmFtcDtuZGV2LSZndDtjb25uX2luZm9fbG9jayk7CiAJY29ubl9pbmZvID0gbmRldi0mZ3Q7aGNpX2Rldi0mZ3Q7Y29ubl9pbmZvOwotCWlmICghY29ubl9pbmZvKQomIzQzOwlpZiAoIWNvbm5faW5mbykgewomIzQzOwkJc3Bpbl91bmxvY2tfYmgoJmFtcDtuZGV2LSZndDtjb25uX2luZm9fbG9jayk7CiAJCXJldHVybiAtRVBST1RPOwomIzQzOwl9CiYjNDM7CWRhdGEuY29ubl9pZCA9IGNvbm5faW5mby0mZ3Q7Y29ubl9pZDsKJiM0MzsJc3Bpbl91bmxvY2tfYmgoJmFtcDtuZGV2LSZndDtjb25uX2luZm9fbG9jayk7CiAKIAl0bXAgPSBrbWFsbG9jKDEgJiM0MzsgcGFyYW1fbGVuLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXRtcCkKQEAgLTU4OSw3ICYjNDM7NjIzLDYgQEAgaW50IG5jaV9oY2lfc2V0X3BhcmFtKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCB1OCBnYXRlLCB1OCBpZHgsCiAJKnRtcCA9IGlkeDsKIAltZW1jcHkodG1wICYjNDM7IDEsIHBhcmFtLCBwYXJhbV9sZW4pOwogCi0JZGF0YS5jb25uX2lkID0gY29ubl9pbmZvLSZndDtjb25uX2lkOwogCWRhdGEucGlwZSA9IHBpcGU7CiAJZGF0YS5jbWQgPSBOQ0lfSENQX0hFQURFUihOQ0lfSENJX0hDUF9DT01NQU5ELAogCQkJCSAgICAgICBOQ0lfSENJX0FOWV9TRVRfUEFSQU1FVEVSKTsKQEAgLTU5OSwxMCAmIzQzOzYzMiwyMCBAQCBpbnQgbmNpX2hjaV9zZXRfcGFyYW0oc3RydWN0IG5jaV9kZXYgKm5kZXYsIHU4IGdhdGUsIHU4IGlkeCwKIAlyID0gbmNpX3JlcXVlc3QobmRldiwgbmNpX2hjaV9zZW5kX2RhdGFfcmVxLCAmYW1wO2RhdGEsCiAJCQltc2Vjc190b19qaWZmaWVzKE5DSV9EQVRBX1RJTUVPVVQpKTsKIAlpZiAociA9PSBOQ0lfU1RBVFVTX09LKSB7Ci0JCW1lc3NhZ2UgPSAoc3RydWN0IG5jaV9oY3BfbWVzc2FnZSAqKWNvbm5faW5mby0mZ3Q7cnhfc2tiLSZndDtkYXRhOwomIzQzOwkJc3Bpbl9sb2NrX2JoKCZhbXA7bmRldi0mZ3Q7Y29ubl9pbmZvX2xvY2spOwomIzQzOwkJY29ubl9pbmZvID0gbmRldi0mZ3Q7aGNpX2Rldi0mZ3Q7Y29ubl9pbmZvOwomIzQzOwkJcnhfc2tiID0gY29ubl9pbmZvID8gY29ubl9pbmZvLSZndDtyeF9za2IgOiBOVUxMOwomIzQzOwkJaWYgKCFyeF9za2IpIHsKJiM0MzsJCQlzcGluX3VubG9ja19iaCgmYW1wO25kZXYtJmd0O2Nvbm5faW5mb19sb2NrKTsKJiM0MzsJCQlrZnJlZSh0bXApOwomIzQzOwkJCXJldHVybiAtRVBST1RPOwomIzQzOwkJfQomIzQzOwomIzQzOwkJbWVzc2FnZSA9IChzdHJ1Y3QgbmNpX2hjcF9tZXNzYWdlICopcnhfc2tiLSZndDtkYXRhOwogCQlyID0gbmNpX2hjaV9yZXN1bHRfdG9fZXJybm8oCiAJCQlOQ0lfSENQX01TR19HRVRfQ01EKG1lc3NhZ2UtJmd0O2hlYWRlcikpOwotCQlza2JfcHVsbChjb25uX2luZm8tJmd0O3J4X3NrYiwgTkNJX0hDSV9IQ1BfTUVTU0FHRV9IRUFERVJfTEVOKTsKJiM0MzsJCXNrYl9wdWxsKHJ4X3NrYiwgTkNJX0hDSV9IQ1BfTUVTU0FHRV9IRUFERVJfTEVOKTsKJiM0MzsJCXNwaW5fdW5sb2NrX2JoKCZhbXA7bmRldi0mZ3Q7Y29ubl9pbmZvX2xvY2spOwogCX0KIAogCWtmcmVlKHRtcCk7CkBAIC02MTYsNiAmIzQzOzY1OSw3IEBAIGludCBuY2lfaGNpX2dldF9wYXJhbShzdHJ1Y3QgbmNpX2RldiAqbmRldiwgdTggZ2F0ZSwgdTggaWR4LAogCWNvbnN0IHN0cnVjdCBuY2lfaGNwX21lc3NhZ2UgKm1lc3NhZ2U7CiAJY29uc3Qgc3RydWN0IG5jaV9jb25uX2luZm8gKmNvbm5faW5mbzsKIAlzdHJ1Y3QgbmNpX2RhdGEgZGF0YTsKJiM0MzsJc3RydWN0IHNrX2J1ZmYgKnJ4X3NrYjsKIAlpbnQgcjsKIAl1OCBwaXBlID0gbmRldi0mZ3Q7aGNpX2Rldi0mZ3Q7Z2F0ZTJwaXBlW2dhdGVdOwogCkBAIC02MjQsMTEgJiM0Mzs2NjgsMTUgQEAgaW50IG5jaV9oY2lfZ2V0X3BhcmFtKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCB1OCBnYXRlLCB1OCBpZHgsCiAJaWYgKHBpcGUgPT0gTkNJX0hDSV9JTlZBTElEX1BJUEUpCiAJCXJldHVybiAtRUFERFJOT1RBVkFJTDsKIAomIzQzOwlzcGluX2xvY2tfYmgoJmFtcDtuZGV2LSZndDtjb25uX2luZm9fbG9jayk7CiAJY29ubl9pbmZvID0gbmRldi0mZ3Q7aGNpX2Rldi0mZ3Q7Y29ubl9pbmZvOwotCWlmICghY29ubl9pbmZvKQomIzQzOwlpZiAoIWNvbm5faW5mbykgewomIzQzOwkJc3Bpbl91bmxvY2tfYmgoJmFtcDtuZGV2LSZndDtjb25uX2luZm9fbG9jayk7CiAJCXJldHVybiAtRVBST1RPOwomIzQzOwl9CiAKIAlkYXRhLmNvbm5faWQgPSBjb25uX2luZm8tJmd0O2Nvbm5faWQ7CiYjNDM7CXNwaW5fdW5sb2NrX2JoKCZhbXA7bmRldi0mZ3Q7Y29ubl9pbmZvX2xvY2spOwogCWRhdGEucGlwZSA9IHBpcGU7CiAJZGF0YS5jbWQgPSBOQ0lfSENQX0hFQURFUihOQ0lfSENJX0hDUF9DT01NQU5ELAogCQkJCSAgTkNJX0hDSV9BTllfR0VUX1BBUkFNRVRFUik7CkBAIC02MzksMTMgJiM0Mzs2ODcsMjIgQEAgaW50IG5jaV9oY2lfZ2V0X3BhcmFtKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCB1OCBnYXRlLCB1OCBpZHgsCiAJCQltc2Vjc190b19qaWZmaWVzKE5DSV9EQVRBX1RJTUVPVVQpKTsKIAogCWlmIChyID09IE5DSV9TVEFUVVNfT0spIHsKLQkJbWVzc2FnZSA9IChzdHJ1Y3QgbmNpX2hjcF9tZXNzYWdlICopY29ubl9pbmZvLSZndDtyeF9za2ItJmd0O2RhdGE7CiYjNDM7CQlzcGluX2xvY2tfYmgoJmFtcDtuZGV2LSZndDtjb25uX2luZm9fbG9jayk7CiYjNDM7CQljb25uX2luZm8gPSBuZGV2LSZndDtoY2lfZGV2LSZndDtjb25uX2luZm87CiYjNDM7CQlyeF9za2IgPSBjb25uX2luZm8gPyBjb25uX2luZm8tJmd0O3J4X3NrYiA6IE5VTEw7CiYjNDM7CQlpZiAoIXJ4X3NrYikgewomIzQzOwkJCXNwaW5fdW5sb2NrX2JoKCZhbXA7bmRldi0mZ3Q7Y29ubl9pbmZvX2xvY2spOwomIzQzOwkJCXJldHVybiAtRVBST1RPOwomIzQzOwkJfQomIzQzOwomIzQzOwkJbWVzc2FnZSA9IChzdHJ1Y3QgbmNpX2hjcF9tZXNzYWdlICopcnhfc2tiLSZndDtkYXRhOwogCQlyID0gbmNpX2hjaV9yZXN1bHRfdG9fZXJybm8oCiAJCQlOQ0lfSENQX01TR19HRVRfQ01EKG1lc3NhZ2UtJmd0O2hlYWRlcikpOwotCQlza2JfcHVsbChjb25uX2luZm8tJmd0O3J4X3NrYiwgTkNJX0hDSV9IQ1BfTUVTU0FHRV9IRUFERVJfTEVOKTsKJiM0MzsJCXNrYl9wdWxsKHJ4X3NrYiwgTkNJX0hDSV9IQ1BfTUVTU0FHRV9IRUFERVJfTEVOKTsKJiM0MzsJCXNwaW5fdW5sb2NrX2JoKCZhbXA7bmRldi0mZ3Q7Y29ubl9pbmZvX2xvY2spOwogCiAJCWlmICghciAmYW1wOyZhbXA7IHNrYikKLQkJCSpza2IgPSBjb25uX2luZm8tJmd0O3J4X3NrYjsKJiM0MzsJCQkqc2tiID0gcnhfc2tiOwogCX0KIAogCXJldHVybiByOwpAQCAtNzI5LDEyICYjNDM7Nzg2LDE2IEBAIGludCBuY2lfaGNpX2Rldl9zZXNzaW9uX2luaXQoc3RydWN0IG5jaV9kZXYgKm5kZXYpCiAJbmRldi0mZ3Q7aGNpX2Rldi0mZ3Q7Y291bnRfcGlwZXMgPSAwOwogCW5kZXYtJmd0O2hjaV9kZXYtJmd0O2V4cGVjdGVkX3BpcGVzID0gMDsKIAomIzQzOwlzcGluX2xvY2tfYmgoJmFtcDtuZGV2LSZndDtjb25uX2luZm9fbG9jayk7CiAJY29ubl9pbmZvID0gbmRldi0mZ3Q7aGNpX2Rldi0mZ3Q7Y29ubl9pbmZvOwotCWlmICghY29ubl9pbmZvKQomIzQzOwlpZiAoIWNvbm5faW5mbykgewomIzQzOwkJc3Bpbl91bmxvY2tfYmgoJmFtcDtuZGV2LSZndDtjb25uX2luZm9fbG9jayk7CiAJCXJldHVybiAtRVBST1RPOwomIzQzOwl9CiAKIAljb25uX2luZm8tJmd0O2RhdGFfZXhjaGFuZ2VfY2IgPSBuY2lfaGNpX2RhdGFfcmVjZWl2ZWRfY2I7CiAJY29ubl9pbmZvLSZndDtkYXRhX2V4Y2hhbmdlX2NiX2NvbnRleHQgPSBuZGV2OwomIzQzOwlzcGluX3VubG9ja19iaCgmYW1wO25kZXYtJmd0O2Nvbm5faW5mb19sb2NrKTsKIAogCW5jaV9oY2lfcmVzZXRfcGlwZXMobmRldi0mZ3Q7aGNpX2Rldik7CiAKZGlmZiAtLWdpdCBhL25ldC9uZmMvbmNpL250Zi5jIGIvbmV0L25mYy9uY2kvbnRmLmMKaW5kZXggYzk2NTEyYmI4NjUzMTUuLjQ4MjhhMWM5ZDM1ZjBlIDEwMDY0NAotLS0gYS9uZXQvbmZjL25jaS9udGYuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmZjL25jaS9udGYuYwpAQCAtODEsMTMgJiM0Mzs4MSwxNyBAQCBzdGF0aWMgaW50IG5jaV9jb3JlX2Nvbm5fY3JlZGl0c19udGZfcGFja2V0KHN0cnVjdCBuY2lfZGV2ICpuZGV2LAogCQkJIGksIG50Zi0mZ3Q7Y29ubl9lbnRyaWVzW2ldLmNvbm5faWQsCiAJCQkgbnRmLSZndDtjb25uX2VudHJpZXNbaV0uY3JlZGl0cyk7CiAKLQkJY29ubl9pbmZvID0gbmNpX2dldF9jb25uX2luZm9fYnlfY29ubl9pZChuZGV2LAotCQkJCQkJCSBudGYtJmd0O2Nvbm5fZW50cmllc1tpXS5jb25uX2lkKTsKLQkJaWYgKCFjb25uX2luZm8pCiYjNDM7CQlzcGluX2xvY2tfYmgoJmFtcDtuZGV2LSZndDtjb25uX2luZm9fbG9jayk7CiYjNDM7CQljb25uX2luZm8gPSBuY2lfZ2V0X2Nvbm5faW5mb19ieV9jb25uX2lkX2xvY2tlZChuZGV2LAomIzQzOwkJCQkJCQkJbnRmLSZndDtjb25uX2VudHJpZXNbaV0uY29ubl9pZCk7CiYjNDM7CQlpZiAoIWNvbm5faW5mbykgewomIzQzOwkJCXNwaW5fdW5sb2NrX2JoKCZhbXA7bmRldi0mZ3Q7Y29ubl9pbmZvX2xvY2spOwogCQkJcmV0dXJuIDA7CiYjNDM7CQl9CiAKIAkJYXRvbWljX2FkZChudGYtJmd0O2Nvbm5fZW50cmllc1tpXS5jcmVkaXRzLAogCQkJICAgJmFtcDtjb25uX2luZm8tJmd0O2NyZWRpdHNfY250KTsKJiM0MzsJCXNwaW5fdW5sb2NrX2JoKCZhbXA7bmRldi0mZ3Q7Y29ubl9pbmZvX2xvY2spOwogCX0KIAogCS8qIHRyaWdnZXIgdGhlIG5leHQgdHggKi8KQEAgLTgyOCw5ICYjNDM7ODMyLDEyIEBAIHN0YXRpYyBpbnQgbmNpX3JmX2ludGZfYWN0aXZhdGVkX250Zl9wYWNrZXQoc3RydWN0IG5jaV9kZXYgKm5kZXYsCiAKIGV4aXQ6CiAJaWYgKGVyciA9PSBOQ0lfU1RBVFVTX09LKSB7CiYjNDM7CQlzcGluX2xvY2tfYmgoJmFtcDtuZGV2LSZndDtjb25uX2luZm9fbG9jayk7CiAJCWNvbm5faW5mbyA9IG5kZXYtJmd0O3JmX2Nvbm5faW5mbzsKLQkJaWYgKCFjb25uX2luZm8pCiYjNDM7CQlpZiAoIWNvbm5faW5mbykgewomIzQzOwkJCXNwaW5fdW5sb2NrX2JoKCZhbXA7bmRldi0mZ3Q7Y29ubl9pbmZvX2xvY2spOwogCQkJcmV0dXJuIDA7CiYjNDM7CQl9CiAKIAkJY29ubl9pbmZvLSZndDttYXhfcGt0X3BheWxvYWRfbGVuID0gbnRmLm1heF9kYXRhX3BrdF9wYXlsb2FkX3NpemU7CiAJCWNvbm5faW5mby0mZ3Q7aW5pdGlhbF9udW1fY3JlZGl0cyA9IG50Zi5pbml0aWFsX251bV9jcmVkaXRzOwpAQCAtODM4LDYgJiM0Mzs4NDUsNyBAQCBzdGF0aWMgaW50IG5jaV9yZl9pbnRmX2FjdGl2YXRlZF9udGZfcGFja2V0KHN0cnVjdCBuY2lfZGV2ICpuZGV2LAogCQkvKiBzZXQgdGhlIGF2YWlsYWJsZSBjcmVkaXRzIHRvIGluaXRpYWwgdmFsdWUgKi8KIAkJYXRvbWljX3NldCgmYW1wO2Nvbm5faW5mby0mZ3Q7Y3JlZGl0c19jbnQsCiAJCQkgICBjb25uX2luZm8tJmd0O2luaXRpYWxfbnVtX2NyZWRpdHMpOwomIzQzOwkJc3Bpbl91bmxvY2tfYmgoJmFtcDtuZGV2LSZndDtjb25uX2luZm9fbG9jayk7CiAKIAkJLyogc3RvcmUgZ2VuZXJhbCBieXRlcyB0byBiZSByZXBvcnRlZCBsYXRlciBpbiBkZXBfbGlua191cCAqLwogCQlpZiAobnRmLnJmX2ludGVyZmFjZSA9PSBOQ0lfUkZfSU5URVJGQUNFX05GQ19ERVApIHsKQEAgLTkwMSw5ICYjNDM7OTA5LDEzIEBAIHN0YXRpYyBpbnQgbmNpX3JmX2RlYWN0aXZhdGVfbnRmX3BhY2tldChzdHJ1Y3QgbmNpX2RldiAqbmRldiwKIAogCXByX2RlYnVnKCYjMzQ7ZW50cnksIHR5cGUgMHgleCwgcmVhc29uIDB4JXhcbiYjMzQ7LCBudGYtJmd0O3R5cGUsIG50Zi0mZ3Q7cmVhc29uKTsKIAomIzQzOwlzcGluX2xvY2tfYmgoJmFtcDtuZGV2LSZndDtjb25uX2luZm9fbG9jayk7CiAJY29ubl9pbmZvID0gbmRldi0mZ3Q7cmZfY29ubl9pbmZvOwotCWlmICghY29ubl9pbmZvKQomIzQzOwlpZiAoIWNvbm5faW5mbykgewomIzQzOwkJc3Bpbl91bmxvY2tfYmgoJmFtcDtuZGV2LSZndDtjb25uX2luZm9fbG9jayk7CiAJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CXNwaW5fdW5sb2NrX2JoKCZhbXA7bmRldi0mZ3Q7Y29ubl9pbmZvX2xvY2spOwogCiAJLyogZHJvcCB0eCBkYXRhIHF1ZXVlICovCiAJc2tiX3F1ZXVlX3B1cmdlKCZhbXA7bmRldi0mZ3Q7dHhfcSk7CmRpZmYgLS1naXQgYS9uZXQvbmZjL25jaS9yc3AuYyBiL25ldC9uZmMvbmNpL3JzcC5jCmluZGV4IDllZWI4NjI4MjVjNWZlLi4wY2ZmMTI1MDkyM2VkOSAxMDA2NDQKLS0tIGEvbmV0L25mYy9uY2kvcnNwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25mYy9uY2kvcnNwLmMKQEAgLTE4Niw2ICYjNDM7MTg2LDcgQEAgc3RhdGljIHZvaWQgbmNpX3JmX2Rpc2NfcnNwX3BhY2tldChzdHJ1Y3QgbmNpX2RldiAqbmRldiwKIAkJCQkgICBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBuY2lfY29ubl9pbmZvICpjb25uX2luZm87CiYjNDM7CXN0cnVjdCBuY2lfY29ubl9pbmZvICpuZXdfY29ubl9pbmZvOwogCV9fdTggc3RhdHVzID0gc2tiLSZndDtkYXRhWzBdOwogCiAJcHJfZGVidWcoJiMzNDtzdGF0dXMgMHgleFxuJiMzNDssIHN0YXR1cyk7CkBAIC0xOTMsMTkgJiM0MzsxOTQsMzMgQEAgc3RhdGljIHZvaWQgbmNpX3JmX2Rpc2NfcnNwX3BhY2tldChzdHJ1Y3QgbmNpX2RldiAqbmRldiwKIAlpZiAoc3RhdHVzID09IE5DSV9TVEFUVVNfT0spIHsKIAkJYXRvbWljX3NldCgmYW1wO25kZXYtJmd0O3N0YXRlLCBOQ0lfRElTQ09WRVJZKTsKIAomIzQzOwkJc3Bpbl9sb2NrX2JoKCZhbXA7bmRldi0mZ3Q7Y29ubl9pbmZvX2xvY2spOwogCQljb25uX2luZm8gPSBuZGV2LSZndDtyZl9jb25uX2luZm87CiYjNDM7CQlzcGluX3VubG9ja19iaCgmYW1wO25kZXYtJmd0O2Nvbm5faW5mb19sb2NrKTsKJiM0MzsKIAkJaWYgKCFjb25uX2luZm8pIHsKLQkJCWNvbm5faW5mbyA9IGRldm1fa3phbGxvYygmYW1wO25kZXYtJmd0O25mY19kZXYtJmd0O2RldiwKLQkJCQkJCSBzaXplb2Yoc3RydWN0IG5jaV9jb25uX2luZm8pLAotCQkJCQkJIEdGUF9LRVJORUwpOwotCQkJaWYgKCFjb25uX2luZm8pIHsKJiM0MzsJCQluZXdfY29ubl9pbmZvID0gZGV2bV9remFsbG9jKCZhbXA7bmRldi0mZ3Q7bmZjX2Rldi0mZ3Q7ZGV2LAomIzQzOwkJCQkJCSAgICAgc2l6ZW9mKHN0cnVjdCBuY2lfY29ubl9pbmZvKSwKJiM0MzsJCQkJCQkgICAgIEdGUF9LRVJORUwpOwomIzQzOwkJCWlmICghbmV3X2Nvbm5faW5mbykgewogCQkJCXN0YXR1cyA9IE5DSV9TVEFUVVNfUkVKRUNURUQ7CiAJCQkJZ290byBleGl0OwogCQkJfQotCQkJY29ubl9pbmZvLSZndDtjb25uX2lkID0gTkNJX1NUQVRJQ19SRl9DT05OX0lEOwotCQkJSU5JVF9MSVNUX0hFQUQoJmFtcDtjb25uX2luZm8tJmd0O2xpc3QpOwotCQkJbGlzdF9hZGQoJmFtcDtjb25uX2luZm8tJmd0O2xpc3QsICZhbXA7bmRldi0mZ3Q7Y29ubl9pbmZvX2xpc3QpOwotCQkJbmRldi0mZ3Q7cmZfY29ubl9pbmZvID0gY29ubl9pbmZvOwomIzQzOwomIzQzOwkJCW5ld19jb25uX2luZm8tJmd0O2Nvbm5faWQgPSBOQ0lfU1RBVElDX1JGX0NPTk5fSUQ7CiYjNDM7CQkJSU5JVF9MSVNUX0hFQUQoJmFtcDtuZXdfY29ubl9pbmZvLSZndDtsaXN0KTsKJiM0MzsKJiM0MzsJCQlzcGluX2xvY2tfYmgoJmFtcDtuZGV2LSZndDtjb25uX2luZm9fbG9jayk7CiYjNDM7CQkJaWYgKCFuZGV2LSZndDtyZl9jb25uX2luZm8pIHsKJiM0MzsJCQkJbGlzdF9hZGQoJmFtcDtuZXdfY29ubl9pbmZvLSZndDtsaXN0LAomIzQzOwkJCQkJICZhbXA7bmRldi0mZ3Q7Y29ubl9pbmZvX2xpc3QpOwomIzQzOwkJCQluZGV2LSZndDtyZl9jb25uX2luZm8gPSBuZXdfY29ubl9pbmZvOwomIzQzOwkJCQluZXdfY29ubl9pbmZvID0gTlVMTDsKJiM0MzsJCQl9CiYjNDM7CQkJc3Bpbl91bmxvY2tfYmgoJmFtcDtuZGV2LSZndDtjb25uX2luZm9fbG9jayk7CiYjNDM7CiYjNDM7CQkJaWYgKG5ld19jb25uX2luZm8pCiYjNDM7CQkJCWRldm1fa2ZyZWUoJmFtcDtuZGV2LSZndDtuZmNfZGV2LSZndDtkZXYsIG5ld19jb25uX2luZm8pOwogCQl9CiAJfQogCkBAIC0yOTgsMjAgJiM0MzszMTMsMjAgQEAgc3RhdGljIHZvaWQgbmNpX2NvcmVfY29ubl9jcmVhdGVfcnNwX3BhY2tldChzdHJ1Y3QgbmNpX2RldiAqbmRldiwKIAkJY29ubl9pbmZvLSZndDtkZXN0X3BhcmFtcy0mZ3Q7aWQgPSBuZGV2LSZndDtjdXJfcGFyYW1zLmlkOwogCQljb25uX2luZm8tJmd0O2Rlc3RfcGFyYW1zLSZndDtwcm90b2NvbCA9IG5kZXYtJmd0O2N1cl9wYXJhbXMucHJvdG9jb2w7CiAJCWNvbm5faW5mby0mZ3Q7Y29ubl9pZCA9IHJzcC0mZ3Q7Y29ubl9pZDsKJiM0MzsJCWNvbm5faW5mby0mZ3Q7bWF4X3BrdF9wYXlsb2FkX2xlbiA9IHJzcC0mZ3Q7bWF4X2N0cmxfcGt0X3BheWxvYWRfbGVuOwomIzQzOwkJYXRvbWljX3NldCgmYW1wO2Nvbm5faW5mby0mZ3Q7Y3JlZGl0c19jbnQsIHJzcC0mZ3Q7Y3JlZGl0c19jbnQpOwogCiAJCS8qIE5vdGU6IGRhdGFfZXhjaGFuZ2VfY2IgYW5kIGRhdGFfZXhjaGFuZ2VfY2JfY29udGV4dCBuZWVkIHRvCiAJCSAqIGJlIHNwZWNpZnkgb3V0IG9mIG5jaV9jb3JlX2Nvbm5fY3JlYXRlX3JzcF9wYWNrZXQKIAkJICovCiAKIAkJSU5JVF9MSVNUX0hFQUQoJmFtcDtjb25uX2luZm8tJmd0O2xpc3QpOwomIzQzOwkJc3Bpbl9sb2NrX2JoKCZhbXA7bmRldi0mZ3Q7Y29ubl9pbmZvX2xvY2spOwogCQlsaXN0X2FkZCgmYW1wO2Nvbm5faW5mby0mZ3Q7bGlzdCwgJmFtcDtuZGV2LSZndDtjb25uX2luZm9fbGlzdCk7CiAKIAkJaWYgKG5kZXYtJmd0O2N1cl9wYXJhbXMuaWQgPT0gbmRldi0mZ3Q7aGNpX2Rldi0mZ3Q7bmZjZWVfaWQpCiAJCQluZGV2LSZndDtoY2lfZGV2LSZndDtjb25uX2luZm8gPSBjb25uX2luZm87Ci0KLQkJY29ubl9pbmZvLSZndDtjb25uX2lkID0gcnNwLSZndDtjb25uX2lkOwotCQljb25uX2luZm8tJmd0O21heF9wa3RfcGF5bG9hZF9sZW4gPSByc3AtJmd0O21heF9jdHJsX3BrdF9wYXlsb2FkX2xlbjsKLQkJYXRvbWljX3NldCgmYW1wO2Nvbm5faW5mby0mZ3Q7Y3JlZGl0c19jbnQsIHJzcC0mZ3Q7Y3JlZGl0c19jbnQpOwomIzQzOwkJc3Bpbl91bmxvY2tfYmgoJmFtcDtuZGV2LSZndDtjb25uX2luZm9fbG9jayk7CiAJfQogCiBmcmVlX2Nvbm5faW5mbzoKQEAgLTMzMCwxNCAmIzQzOzM0NSwxOSBAQCBzdGF0aWMgdm9pZCBuY2lfY29yZV9jb25uX2Nsb3NlX3JzcF9wYWNrZXQoc3RydWN0IG5jaV9kZXYgKm5kZXYsCiAKIAlwcl9kZWJ1ZygmIzM0O3N0YXR1cyAweCV4XG4mIzM0Oywgc3RhdHVzKTsKIAlpZiAoc3RhdHVzID09IE5DSV9TVEFUVVNfT0spIHsKLQkJY29ubl9pbmZvID0gbmNpX2dldF9jb25uX2luZm9fYnlfY29ubl9pZChuZGV2LAotCQkJCQkJCSBuZGV2LSZndDtjdXJfY29ubl9pZCk7CiYjNDM7CQlzcGluX2xvY2tfYmgoJmFtcDtuZGV2LSZndDtjb25uX2luZm9fbG9jayk7CiYjNDM7CQljb25uX2luZm8gPSBuY2lfZ2V0X2Nvbm5faW5mb19ieV9jb25uX2lkX2xvY2tlZChuZGV2LAomIzQzOwkJCQkJCQkJbmRldi0mZ3Q7Y3VyX2Nvbm5faWQpOwogCQlpZiAoY29ubl9pbmZvKSB7CiAJCQlsaXN0X2RlbCgmYW1wO2Nvbm5faW5mby0mZ3Q7bGlzdCk7CiAJCQlpZiAoY29ubl9pbmZvID09IG5kZXYtJmd0O3JmX2Nvbm5faW5mbykKIAkJCQluZGV2LSZndDtyZl9jb25uX2luZm8gPSBOVUxMOwotCQkJZGV2bV9rZnJlZSgmYW1wO25kZXYtJmd0O25mY19kZXYtJmd0O2RldiwgY29ubl9pbmZvKTsKJiM0MzsJCQlpZiAoY29ubl9pbmZvID09IG5kZXYtJmd0O2hjaV9kZXYtJmd0O2Nvbm5faW5mbykKJiM0MzsJCQkJbmRldi0mZ3Q7aGNpX2Rldi0mZ3Q7Y29ubl9pbmZvID0gTlVMTDsKIAkJfQomIzQzOwkJc3Bpbl91bmxvY2tfYmgoJmFtcDtuZGV2LSZndDtjb25uX2luZm9fbG9jayk7CiYjNDM7CQlpZiAoY29ubl9pbmZvKQomIzQzOwkJCWRldm1fa2ZyZWUoJmFtcDtuZGV2LSZndDtuZmNfZGV2LSZndDtkZXYsIGNvbm5faW5mbyk7CiAJfQogCW5jaV9yZXFfY29tcGxldGUobmRldiwgc3RhdHVzKTsKIH0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMDk6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ2MjgKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyNzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBORkMgTkNJIFNwaW5sb2NrIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsICYjMzQ7QWgsIGEgc3BpbmxvY2sgKGBjb25uX2luZm9fbG9ja2ApIHRvIHByb3RlY3QgdGhlIGBjb25uX2luZm9fbGlzdGAgYW5kIHBvaW50ZXIgYWxpYXNlcyB3aXRoaW4gdGhlIE5DSSBzdWJzeXN0ZW0g4oCTIGdvb2QsIGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgY29uY3VycmVuY3kgaXNzdWUuJiMzNDsgSXQmIzM5O3MgdG91Y2hpbmcgYSBkZWNlbnQgc3ByZWFkIG9mIGZpbGVzIHdpdGhpbiB0aGUgYGRyaXZlcnMvbmZjL3N0LW5jaS9gLCBgaW5jbHVkZS9uZXQvbmZjL25jaV9jb3JlLmhgLCBhbmQgYG5ldC9uZmMvbmNpL2AgZGlyZWN0b3JpZXM6IGBzZS5jYCwgYGNvcmUuY2AsIGBkYXRhLmNgLCBgaGNpLmNgLCBgbnRmLmNgLCBhbmQgYHJzcC5jYC4gVGhpcyBzdWdnZXN0cyBhIHByZXR0eSBjZW50cmFsIGZpeCwgaW1wYWN0aW5nIGNvcmUgZGF0YSBzdHJ1Y3R1cmVzLgoKVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIGNvbmN1cnJlbmN5IGZpeC4gTXkgZ3Vlc3MgaXMgaXQmIzM5O3MgaGFuZGxpbmcgYSByYWNlIGNvbmRpdGlvbiBvciBtYXliZSBhIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvLiBTdGFuZGFyZCBzdHVmZi4KCk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbiBpczogaXMgdGhpcyByZWFjaGFibGUgYW5kIHRlc3RhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQ/IFdlIG5lZWQgdG8gdmVyaWZ5IHRoZSBmaXggdGhvcm91Z2hseS4gSG93IGRvIHdlIHRlc3QgTkZDIGluIGEgdmlydHVhbCBzZXR0aW5nPyBXZSBoYXZlIGBuZmNzaW1gIGFuZCBgdmhjaWAsIHNvIGxldCYjMzk7cyBzZWUgaWYgd2UgY2FuIHVzZSB0aG9zZSB0byBydW4gdGhlIHRlc3RzPyBUaW1lIHRvIGNoZWNrIGZvciB0aGUgcmVsZXZhbnQga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSBuZWVkIHRvIGNvbmZpcm0gYENPTkZJR19ORkNfTkNJYCBhbmQgc29tZXRoaW5nIHZpcnR1YWwg4oCTIHBlcmhhcHMgYENPTkZJR19ORkNfVklSVFVBTGAgb3IgYSBzaW1pbGFyIGNvbmZpZ3VyYXRpb24gb3B0aW9uIOKAkyBpcyBlbmFibGVkIHRvIGNvbmZpcm0gdGhhdCBhIHZpcnR1YWwgZW52aXJvbm1lbnQgaXMgYXZhaWxhYmxlLCBsZXQmIzM5O3Mgc2VhcmNoIGZvciBORkMgZHJpdmVycy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAwOToyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtORkNfTkNJJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25mYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25mYy9NYWtlZmlsZT02PW9iai0kKENPTkZJR19ORkMpICYjNDM7PSBuZmMub1xubmV0L25mYy9NYWtlZmlsZTo3Om9iai0kKENPTkZJR19ORkNfTkNJKSAmIzQzOz0gbmNpL1xubmV0L25mYy9NYWtlZmlsZS04LW9iai0kKENPTkZJR19ORkNfSENJKSAmIzQzOz0gaGNpL1xuLS1cbm5ldC9uZmMvbmNpL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbm5ldC9uZmMvbmNpL0tjb25maWc6Mjpjb25maWcgTkZDX05DSVxubmV0L25mYy9uY2kvS2NvbmZpZy0zLVx0ZGVwZW5kcyBvbiBORkNcbi0tXG5uZXQvbmZjL25jaS9LY29uZmlnLTEyLVxubmV0L25mYy9uY2kvS2NvbmZpZzoxMzpjb25maWcgTkZDX05DSV9TUElcbm5ldC9uZmMvbmNpL0tjb25maWc6MTQ6XHRkZXBlbmRzIG9uIE5GQ19OQ0kgXHUwMDI2XHUwMDI2IFNQSVxubmV0L25mYy9uY2kvS2NvbmZpZy0xNS1cdHNlbGVjdCBDUkNfQ0NJVFRcbi0tXG5uZXQvbmZjL25jaS9LY29uZmlnLTIzLVxubmV0L25mYy9uY2kvS2NvbmZpZzoyNDpjb25maWcgTkZDX05DSV9VQVJUXG5uZXQvbmZjL25jaS9LY29uZmlnOjI1Olx0ZGVwZW5kcyBvbiBORkNfTkNJIFx1MDAyNlx1MDAyNiBUVFlcbm5ldC9uZmMvbmNpL0tjb25maWctMjYtXHR0cmlzdGF0ZSBcJiMzNDtOQ0kgb3ZlciBVQVJUIHByb3RvY29sIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmZjL25jaS9NYWtlZmlsZS01LVxubmV0L25mYy9uY2kvTWFrZWZpbGU6NjpvYmotJChDT05GSUdfTkZDX05DSSkgJiM0Mzs9IG5jaS5vXG5uZXQvbmZjL25jaS9NYWtlZmlsZS03LVxuLS1cbm5ldC9uZmMvbmNpL01ha2VmaWxlPTEwPW5jaV9zcGkteSAmIzQzOz0gc3BpLm9cbm5ldC9uZmMvbmNpL01ha2VmaWxlOjExOm9iai0kKENPTkZJR19ORkNfTkNJX1NQSSkgJiM0Mzs9IG5jaV9zcGkub1xubmV0L25mYy9uY2kvTWFrZWZpbGUtMTItXG5uZXQvbmZjL25jaS9NYWtlZmlsZT0xMz1uY2lfdWFydC15ICYjNDM7PSB1YXJ0Lm9cbm5ldC9uZmMvbmNpL01ha2VmaWxlOjE0Om9iai0kKENPTkZJR19ORkNfTkNJX1VBUlQpICYjNDM7PSBuY2lfdWFydC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMDk6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU3NzIKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBc3Nlc3NpbmcgTkNJIERyaXZlciBBdmFpbGFiaWxpdHkqKgoKUmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSYjMzk7bSBpbW1lZGlhdGVseSBhc3Nlc3NpbmcgdGhlIGluZnJhc3RydWN0dXJlIHJlcXVpcmVtZW50cyBoZXJlLiAmIzM0O1ZpcnR1YWwgZHJpdmVyIGZvciBOQ0kmIzM0Oy4uLiB0aGF0JiMzOTtzIHRoZSBrZXkgcGhyYXNlLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcywgYXMgaXQgaXMgd2l0aCBhbnkgbmV3IHRhc2ssIGlzIHRvIGFzY2VydGFpbiBpZiBhIHByZS1leGlzdGluZyB2aXJ0dWFsIGRyaXZlciBzb2x1dGlvbiBleGlzdHMuIEFtIEkgZGVhbGluZyB3aXRoIGEga25vd24gcXVhbnRpdHksIG9yIGFtIEkgaW4gdGhlIHdlZWRzIGZyb20gdGhlIHN0YXJ0PyBXaGF0IGRyaXZlcnMgYXJlIGF2YWlsYWJsZSB0aGF0IHdpbGwgZ2V0IG1lIGNsb3NlciB0byB0aGUgb3V0Y29tZSBkZXNpcmVkLgoKVGhpcyBpbXBsaWVzIGFuIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGN1cnJlbnQgTkNJIGVudmlyb25tZW50LiBEbyB3ZSBoYXZlIGEgc3RhbmRhcmQgb3IgcHJvcHJpZXRhcnkgcGxhdGZvcm0/IElzIGl0IHdlbGwtZG9jdW1lbnRlZD8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIGNhbmRpZGF0ZXMgd2l0aGluIHRoZSBleGlzdGluZyBkcml2ZXIgZWNvc3lzdGVtLCBvciBhcmUgd2UgZ29pbmcgdG8gbmVlZCB0byBsb29rIGF0IGN1c3RvbSBkZXZlbG9wbWVudCwgb3IgYSBoYXJkd2FyZSBhYnN0cmFjdGlvbiBsYXllcj8gTXkgZm9jdXMgaXMgb24gZWZmaWNpZW5jeSBhbmQgdGltZSwgc28gSSYjMzk7bSBob3BpbmcgZm9yIGEgcXVpY2sgd2luOyBhIHJlYWRpbHkgYXZhaWxhYmxlLCB0ZXN0ZWQgc29sdXRpb24gaXMgYWx3YXlzIHByZWZlcmFibGUuIFRoZSB0aG91Z2h0IHByb2Nlc3MgaXMgdG8gcXVpY2tseSBkZXRlcm1pbmUgdGhlIHBhdGggb2YgbGVhc3QgcmVzaXN0YW5jZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAwOToyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtORkNfTkNJJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZmMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmZjL0tjb25maWc9NTI9Y29uZmlnIE5GQ19WSVJUVUFMX05DSVxuZHJpdmVycy9uZmMvS2NvbmZpZy01My1cdHRyaXN0YXRlIFwmIzM0O05DSSBkZXZpY2Ugc2ltdWxhdG9yIGRyaXZlclwmIzM0O1xuZHJpdmVycy9uZmMvS2NvbmZpZzo1NDpcdGRlcGVuZHMgb24gTkZDX05DSVxuZHJpdmVycy9uZmMvS2NvbmZpZy01NS1cdGhlbHBcbi0tXG5kcml2ZXJzL25mYy9mZHAvS2NvbmZpZz0yPWNvbmZpZyBORkNfRkRQXG5kcml2ZXJzL25mYy9mZHAvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7SW50ZWwgRkRQIE5GQyBkcml2ZXJcJiMzNDtcbmRyaXZlcnMvbmZjL2ZkcC9LY29uZmlnOjQ6XHRkZXBlbmRzIG9uIE5GQ19OQ0lcbmRyaXZlcnMvbmZjL2ZkcC9LY29uZmlnLTUtXHRzZWxlY3QgQ1JDX0NDSVRUXG4tLVxuZHJpdmVycy9uZmMvbmZjbXJ2bC9LY29uZmlnPTEwPWNvbmZpZyBORkNfTVJWTF9VU0JcbmRyaXZlcnMvbmZjL25mY21ydmwvS2NvbmZpZy0xMS1cdHRyaXN0YXRlIFwmIzM0O01hcnZlbGwgTkZDLW92ZXItVVNCIGRyaXZlclwmIzM0O1xuZHJpdmVycy9uZmMvbmZjbXJ2bC9LY29uZmlnOjEyOlx0ZGVwZW5kcyBvbiBORkNfTkNJIFx1MDAyNlx1MDAyNiBVU0JcbmRyaXZlcnMvbmZjL25mY21ydmwvS2NvbmZpZy0xMy1cdHNlbGVjdCBORkNfTVJWTFxuLS1cbmRyaXZlcnMvbmZjL25mY21ydmwvS2NvbmZpZz0yMz1jb25maWcgTkZDX01SVkxfVUFSVFxuZHJpdmVycy9uZmMvbmZjbXJ2bC9LY29uZmlnLTI0LVx0dHJpc3RhdGUgXCYjMzQ7TWFydmVsbCBORkMtb3Zlci1VQVJUIGRyaXZlclwmIzM0O1xuZHJpdmVycy9uZmMvbmZjbXJ2bC9LY29uZmlnOjI1Olx0ZGVwZW5kcyBvbiBORkNfTkNJIFx1MDAyNlx1MDAyNiBORkNfTkNJX1VBUlRcbmRyaXZlcnMvbmZjL25mY21ydmwvS2NvbmZpZy0yNi1cdHNlbGVjdCBORkNfTVJWTFxuLS1cbmRyaXZlcnMvbmZjL25mY21ydmwvS2NvbmZpZz00Nj1jb25maWcgTkZDX01SVkxfU1BJXG5kcml2ZXJzL25mYy9uZmNtcnZsL0tjb25maWctNDctXHR0cmlzdGF0ZSBcJiMzNDtNYXJ2ZWxsIE5GQy1vdmVyLVNQSSBkcml2ZXJcJiMzNDtcbmRyaXZlcnMvbmZjL25mY21ydmwvS2NvbmZpZzo0ODpcdGRlcGVuZHMgb24gTkZDX01SVkwgXHUwMDI2XHUwMDI2IE5GQ19OQ0lfU1BJXG5kcml2ZXJzL25mYy9uZmNtcnZsL0tjb25maWctNDktXHRoZWxwXG4tLVxuZHJpdmVycy9uZmMvbnhwLW5jaS9LY29uZmlnPTI9Y29uZmlnIE5GQ19OWFBfTkNJXG5kcml2ZXJzL25mYy9ueHAtbmNpL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O05YUC1OQ0kgTkZDIGRyaXZlclwmIzM0O1xuZHJpdmVycy9uZmMvbnhwLW5jaS9LY29uZmlnOjQ6XHRkZXBlbmRzIG9uIE5GQ19OQ0lcbmRyaXZlcnMvbmZjL254cC1uY2kvS2NvbmZpZy01LVx0aGVscFxuLS1cbmRyaXZlcnMvbmZjL3MzZndybjUvS2NvbmZpZz0xMD1jb25maWcgTkZDX1MzRldSTjVfSTJDXG5kcml2ZXJzL25mYy9zM2Z3cm41L0tjb25maWctMTEtXHR0cmlzdGF0ZSBcJiMzNDtTYW1zdW5nIFMzRldSTjUgSTJDIHN1cHBvcnRcJiMzNDtcbmRyaXZlcnMvbmZjL3MzZndybjUvS2NvbmZpZzoxMjpcdGRlcGVuZHMgb24gTkZDX05DSSBcdTAwMjZcdTAwMjYgSTJDXG5kcml2ZXJzL25mYy9zM2Z3cm41L0tjb25maWctMTMtXHRzZWxlY3QgTkZDX1MzRldSTjVcbi0tXG5kcml2ZXJzL25mYy9zM2Z3cm41L0tjb25maWc9MjM9Y29uZmlnIE5GQ19TM0ZXUk44Ml9VQVJUXG5kcml2ZXJzL25mYy9zM2Z3cm41L0tjb25maWctMjQtICAgICAgICB0cmlzdGF0ZSBcJiMzNDtTYW1zdW5nIFMzRldSTjgyIFVBUlQgc3VwcG9ydFwmIzM0O1xuZHJpdmVycy9uZmMvczNmd3JuNS9LY29uZmlnOjI1OiAgICAgICAgZGVwZW5kcyBvbiBORkNfTkNJIFx1MDAyNlx1MDAyNiBTRVJJQUxfREVWX0JVU1xuZHJpdmVycy9uZmMvczNmd3JuNS9LY29uZmlnLTI2LSAgICAgICAgc2VsZWN0IE5GQ19TM0ZXUk41XG4tLVxuZHJpdmVycy9uZmMvc3QtbmNpL0tjb25maWc9OT1jb25maWcgTkZDX1NUX05DSV9JMkNcbmRyaXZlcnMvbmZjL3N0LW5jaS9LY29uZmlnLTEwLVx0dHJpc3RhdGUgXCYjMzQ7U1RNaWNyb2VsZWN0cm9uaWNzIFNUIE5DSSBORkMgZHJpdmVyIChJMkMpXCYjMzQ7XG5kcml2ZXJzL25mYy9zdC1uY2kvS2NvbmZpZzoxMTpcdGRlcGVuZHMgb24gTkZDX05DSSBcdTAwMjZcdTAwMjYgSTJDXG5kcml2ZXJzL25mYy9zdC1uY2kvS2NvbmZpZy0xMi1cdHNlbGVjdCBORkNfU1RfTkNJXG4tLVxuZHJpdmVycy9uZmMvc3QtbmNpL0tjb25maWc9MjE9Y29uZmlnIE5GQ19TVF9OQ0lfU1BJXG5kcml2ZXJzL25mYy9zdC1uY2kvS2NvbmZpZy0yMi1cdHRyaXN0YXRlIFwmIzM0O1NUTWljcm9lbGVjdHJvbmljcyBTVCBOQ0kgTkZDIGRyaXZlciAoU1BJKVwmIzM0O1xuZHJpdmVycy9uZmMvc3QtbmNpL0tjb25maWc6MjM6XHRkZXBlbmRzIG9uIE5GQ19OQ0kgXHUwMDI2XHUwMDI2IFNQSVxuZHJpdmVycy9uZmMvc3QtbmNpL0tjb25maWctMjQtXHRzZWxlY3QgTkZDX1NUX05DSVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDA5OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MTIyCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqTkZDIEZ1enppbmcgT3Bwb3J0dW5pdHkhKioKCkFscmlnaHQsIHRoYXQmIzM5O3MgaXQhIGBORkNfVklSVFVBTF9OQ0lgIGlzIGRlZmluZWQuIFRoaXMgaXMgc2lnbmlmaWNhbnQuIEl0JiMzOTtzIHRoZSBrZXkgdG8gdmlydHVhbCBOQ0kgZGV2aWNlcy4gQW5kIHRoYXQsIGluIHR1cm4sIGlzIHRoZSBvcGVuaW5nIHdlJiMzOTt2ZSBiZWVuIGxvb2tpbmcgZm9yIHRvIGJlZ2luIHNvbWUgc2VyaW91cyBmdXp6aW5nIG9mIE5DSSBzdGFja3MuIEl0IG9wZW5zIHVwIHRoZSBwb3NzaWJpbGl0eSBvZiBpbmplY3RpbmcgbWFsZm9ybWVkIGRhdGEgd2l0aG91dCBuZWVkaW5nIHBoeXNpY2FsIGhhcmR3YXJlLCB3aGljaCBpcyBhIHNpZ25pZmljYW50IHdpbiBmb3IgdGhpcyB0eXBlIG9mIHJlc2VhcmNoLgoKTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgdmlydHVhbCBkZXZpY2UmIzM5O3MgaW1wbGVtZW50YXRpb24gYmV0dGVyLiBUaW1lIHRvIGRpdmUgaW50byBgZHJpdmVycy9uZmMvdmlydHVhbF9uY2lkZXYuY2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBlbnRyeSBwb2ludHMsIGhvdyBpdCBpbnRlcmZhY2VzIHdpdGggdGhlIE5DSSBjb3JlLCBhbmQgbW9zdCBpbXBvcnRhbnRseSwgaWRlbnRpZnkgdGhlIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgaW5wdXQgaXMgZXhwZWN0ZWQsIGhvdyBpdCYjMzk7cyBoYW5kbGVkLCBhbmQgd2hlcmUgcG90ZW50aWFsIGZ1enppbmcgdGFyZ2V0cyBjYW4gYmUgZm91bmQuIFRoaXMgY291bGQgYmUgaW50ZXJlc3RpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMDk6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TkZDX1ZJUlRVQUxfTkNJJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZmMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmZjL0tjb25maWc9NDI9Y29uZmlnIE5GQ19QT1JUMTAwXG4tLVxuZHJpdmVycy9uZmMvS2NvbmZpZy01MS1cbmRyaXZlcnMvbmZjL0tjb25maWc6NTI6Y29uZmlnIE5GQ19WSVJUVUFMX05DSVxuZHJpdmVycy9uZmMvS2NvbmZpZy01My1cdHRyaXN0YXRlIFwmIzM0O05DSSBkZXZpY2Ugc2ltdWxhdG9yIGRyaXZlclwmIzM0O1xuLS1cbmRyaXZlcnMvbmZjL01ha2VmaWxlPTE5PW9iai0kKENPTkZJR19ORkNfU1Q5NUhGKVx0JiM0Mzs9IHN0OTVoZi9cbmRyaXZlcnMvbmZjL01ha2VmaWxlOjIwOm9iai0kKENPTkZJR19ORkNfVklSVFVBTF9OQ0kpXHQmIzQzOz0gdmlydHVhbF9uY2lkZXYub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDA5OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NTY4CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNjEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTkNJIFZpcnR1YWwgTkNJIENvbmZpZ3VyYXRpb24qKgoKT2theSwgZ3JlYXQhIFNvLCBiYXNlZCBvbiB0aGlzLCBlbmFibGluZyBgTkZDX1ZJUlRVQUxfTkNJYCBpcyB0aGUga2V5LiBOb3csIGxvb2tpbmcgYXQgdGhlIHBhdGNoLCBpdCB0b3VjaGVzIGBuZXQvbmZjL25jaS9jb3JlLmNgLCBgbmV0L25mYy9uY2kvZGF0YS5jYCwgYG5ldC9uZmMvbmNpL2hjaS5jYCwgYG5ldC9uZmMvbmNpL250Zi5jYCwgYW5kIGBuZXQvbmZjL25jaS9yc3AuY2AuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIGZvY3VzIGlzLiBNeSBpbW1lZGlhdGUgdGFzayBpcyB0byBpZGVudGlmeSB0aGUgY3JpdGljYWwgc3ltYm9scyBmb3IgZnVydGhlciBhbmFseXNpcy4KCkl0IGxvb2tzIGxpa2UgdGhlIHBhdGNoIG1vZGlmaWVzIGEgY29tcHJlaGVuc2l2ZSBzZXQgb2YgZnVuY3Rpb25zLCBpbmNsdWRpbmc6IGBuY2lfZ2V0X2Nvbm5faW5mb19ieV9jb25uX2lkX2xvY2tlZGAsIGBuY2lfZ2V0X2Nvbm5faW5mb19ieV9kZXN0X3R5cGVfcGFyYW1zX2xvY2tlZGAsIGBuY2lfZ2V0X2Nvbm5faW5mb19ieV9kZXN0X3R5cGVfcGFyYW1zYCwgYG5jaV9uZmNjX2xvb3BiYWNrYCwgYG5jaV90cmFuc2NlaXZlYCwgYG5jaV90eF93b3JrYCwgYG5jaV9kYXRhX2V4Y2hhbmdlX2NvbXBsZXRlYCwgYG5jaV9jb25uX21heF9kYXRhX3BrdF9wYXlsb2FkX3NpemVgLCBgbmNpX3NlbmRfZGF0YWAsIGBuY2lfcnhfZGF0YV9wYWNrZXRgLCBgbmNpX2hjaV9zZW5kX2RhdGFgLCBgbmNpX2hjaV9zZW5kX2NtZGAsIGBuY2lfaGNpX3Jlc3BfcmVjZWl2ZWRgLCBgbmNpX2hjaV9vcGVuX3BpcGVgLCBgbmNpX2hjaV9zZXRfcGFyYW1gLCBgbmNpX2hjaV9nZXRfcGFyYW1gLCBgbmNpX2hjaV9kZXZfc2Vzc2lvbl9pbml0YCwgYG5jaV9jb3JlX2Nvbm5fY3JlZGl0c19udGZfcGFja2V0YCwgYG5jaV9yZl9pbnRmX2FjdGl2YXRlZF9udGZfcGFja2V0YCwgYG5jaV9yZl9kZWFjdGl2YXRlX250Zl9wYWNrZXRgLCBgbmNpX3JmX2Rpc2NfcnNwX3BhY2tldGAsIGBuY2lfY29yZV9jb25uX2NyZWF0ZV9yc3BfcGFja2V0YCwgYW5kIGBuY2lfY29yZV9jb25uX2Nsb3NlX3JzcF9wYWNrZXRgLgoKVGhlc2UgYXJlIGFsbCBwYXJ0IG9mIHRoZSBOQ0kgY29yZSBhbmQgYXJlIGRlZmluaXRlbHkgcmVhY2hhYmxlIGR1cmluZyB0eXBpY2FsIGludGVyYWN0aW9ucyB3aXRoIE5DSSBkZXZpY2VzLgoKTXkgbmV4dCBzdGVwIGlzIHRvIHBpbnBvaW50IHdoaWNoIGZ1bmN0aW9ucyBhcmUgdGhlIG1vc3QgcHJvbWlzaW5nIHRhcmdldHMgZm9yIGZ1enppbmcuIEkmIzM5O2xsIGZvY3VzIG9uIHRoZXNlOiBgbmNpX25mY2NfbG9vcGJhY2tgLCBgbmNpX3RyYW5zY2VpdmVgLCBgbmNpX3NlbmRfZGF0YWAsIGBuY2lfcnhfZGF0YV9wYWNrZXRgLCBgbmNpX2hjaV9zZW5kX2NtZGAsIGBuY2lfaGNpX3NldF9wYXJhbWAsIGBuY2lfaGNpX2dldF9wYXJhbWAsIGBuY2lfY29yZV9jb25uX2NyZWF0ZV9yc3BfcGFja2V0YCwgYG5jaV9jb3JlX2Nvbm5fY2xvc2VfcnNwX3BhY2tldGAsIGFuZCBgbmNpX3JmX2Rpc2NfcnNwX3BhY2tldGAuIFRoZXNlIHNlZW0gdG8gYmUgdGhlIG1vc3QgY3JpdGljYWwgZm9yIGRhdGEgZmxvdyBhbmQgY29udHJvbC4KCk5vdywgSSYjMzk7bGwgY2hlY2sgdG8gc2VlIGlmIGBuY2lfaGNpX3NlbmRfY21kYCBpcyByZWFjaGFibGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDA5OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25jaV9oY2lfc2VuZF9jbWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmZjLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmZjL25jaS9oY2kuYz0yMjU9RVhQT1JUX1NZTUJPTChuY2lfaGNpX3NlbmRfZXZlbnQpO1xubmV0L25mYy9uY2kvaGNpLmMtMjI2LVxubmV0L25mYy9uY2kvaGNpLmM6MjI3OmludCBuY2lfaGNpX3NlbmRfY21kKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCB1OCBnYXRlLCB1OCBjbWQsXG5uZXQvbmZjL25jaS9oY2kuYy0yMjgtXHRcdCAgICAgY29uc3QgdTggKnBhcmFtLCBzaXplX3QgcGFyYW1fbGVuLFxuLS1cbm5ldC9uZmMvbmNpL2hjaS5jLTI3Ny19XG5uZXQvbmZjL25jaS9oY2kuYzoyNzg6RVhQT1JUX1NZTUJPTChuY2lfaGNpX3NlbmRfY21kKTtcbm5ldC9uZmMvbmNpL2hjaS5jLTI3OS1cbm5ldC9uZmMvbmNpL2hjaS5jPTI4MD1pbnQgbmNpX2hjaV9jbGVhcl9hbGxfcGlwZXMoc3RydWN0IG5jaV9kZXYgKm5kZXYpXG4tLVxubmV0L25mYy9uY2kvaGNpLmMtMjgzLVxubmV0L25mYy9uY2kvaGNpLmM6Mjg0Olx0ciA9IG5jaV9oY2lfc2VuZF9jbWQobmRldiwgTkNJX0hDSV9BRE1JTl9HQVRFLFxubmV0L25mYy9uY2kvaGNpLmMtMjg1LVx0XHRcdCAgICAgTkNJX0hDSV9BRE1fQ0xFQVJfQUxMX1BJUEUsIE5VTEwsIDAsIE5VTEwpO1xuLS1cbm5ldC9uZmMvbmNpL2hjaS5jPTU1Nz1zdGF0aWMgdTggbmNpX2hjaV9jcmVhdGVfcGlwZShzdHJ1Y3QgbmNpX2RldiAqbmRldiwgdTggZGVzdF9ob3N0LFxuLS1cbm5ldC9uZmMvbmNpL2hjaS5jLTU3MC1cbm5ldC9uZmMvbmNpL2hjaS5jOjU3MTpcdCpyZXN1bHQgPSBuY2lfaGNpX3NlbmRfY21kKG5kZXYsIE5DSV9IQ0lfQURNSU5fR0FURSxcbm5ldC9uZmMvbmNpL2hjaS5jLTU3Mi1cdFx0XHRcdCAgIE5DSV9IQ0lfQURNX0NSRUFURV9QSVBFLFxuLS1cbm5ldC9uZmMvbmNpL2hjaS5jPTU4OD1zdGF0aWMgaW50IG5jaV9oY2lfZGVsZXRlX3BpcGUoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHU4IHBpcGUpXG5uZXQvbmZjL25jaS9oY2kuYy01ODkte1xubmV0L25mYy9uY2kvaGNpLmM6NTkwOlx0cmV0dXJuIG5jaV9oY2lfc2VuZF9jbWQobmRldiwgTkNJX0hDSV9BRE1JTl9HQVRFLFxubmV0L25mYy9uY2kvaGNpLmMtNTkxLVx0XHRcdFx0TkNJX0hDSV9BRE1fREVMRVRFX1BJUEUsIFx1MDAyNnBpcGUsIDEsIE5VTEwpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAwOToyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTQ1NgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlLiBNeSBmaXJzdCB0aG91Z2h0IGlzOgoKKipDaGVja2luZyBSZWFjaGFiaWxpdHk6IGBuY2lfY29yZV9jb25uX2NyZWF0ZV9yc3BfcGFja2V0YCoqCgpJIG5lZWQgdG8gY29uZmlybSBzb21ldGhpbmcgY3JpdGljYWwgaGVyZS4gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGZ1bmN0aW9uIGBuY2lfY29yZV9jb25uX2NyZWF0ZV9yc3BfcGFja2V0YCBpcywgaW4gZmFjdCwgYWNjZXNzaWJsZSBhbmQgZnVuY3Rpb25pbmcgYXMgaW50ZW5kZWQgd2l0aGluIHRoZSBjdXJyZW50IGV4ZWN1dGlvbiBjb250ZXh0LiBUaGlzIGlzIGxpa2VseSBhIGtleSBjb21wb25lbnQgaW4gd2hhdGV2ZXIgYnJvYWRlciBzeXN0ZW0gSSYjMzk7bSB3b3JraW5nIHdpdGgsIHBlcmhhcHMgcmVsYXRlZCB0byBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQgb3IgcmVzcG9uc2UgaGFuZGxpbmcsIGdpdmVuIHRoZSBmdW5jdGlvbiBuYW1lLiBNYWtpbmcgc3VyZSBpdOKAmXMgcmVhY2hhYmxlIGlzIHRoZSBmaXJzdCBzdGVwIGluIGRlYnVnZ2luZyBvciB1bmRlcnN0YW5kaW5nIGEgcG90ZW50aWFsIGlzc3VlLCBvciBzaW1wbHkgdmVyaWZ5aW5nIGEgc3BlY2lmaWMgY29kZSBwYXRoIEkmIzM5O20gYW5hbHl6aW5nLiBHb3R0YSBrbm93IGlmIGl0JiMzOTtzIHRoZXJlIGJlZm9yZSBJIGNhbiBkbyBhbnl0aGluZyB3aXRoIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAwOToyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuY2lfY29yZV9jb25uX2NyZWF0ZV9yc3BfcGFja2V0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25mYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25mYy9uY2kvcnNwLmM9Mjc2PXN0YXRpYyB2b2lkIG5jaV9uZmNlZV9tb2RlX3NldF9yc3BfcGFja2V0KHN0cnVjdCBuY2lfZGV2ICpuZGV2LFxuLS1cbm5ldC9uZmMvbmNpL3JzcC5jLTI4NC1cbm5ldC9uZmMvbmNpL3JzcC5jOjI4NTpzdGF0aWMgdm9pZCBuY2lfY29yZV9jb25uX2NyZWF0ZV9yc3BfcGFja2V0KHN0cnVjdCBuY2lfZGV2ICpuZGV2LFxubmV0L25mYy9uY2kvcnNwLmMtMjg2LVx0XHRcdFx0XHQgICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbmZjL25jaS9yc3AuYy0zMTktXHRcdC8qIE5vdGU6IGRhdGFfZXhjaGFuZ2VfY2IgYW5kIGRhdGFfZXhjaGFuZ2VfY2JfY29udGV4dCBuZWVkIHRvXG5uZXQvbmZjL25jaS9yc3AuYzozMjA6XHRcdCAqIGJlIHNwZWNpZnkgb3V0IG9mIG5jaV9jb3JlX2Nvbm5fY3JlYXRlX3JzcF9wYWNrZXRcbm5ldC9uZmMvbmNpL3JzcC5jLTMyMS1cdFx0ICovXG4tLVxubmV0L25mYy9uY2kvcnNwLmM9MzY1PXZvaWQgbmNpX3JzcF9wYWNrZXQoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L25mYy9uY2kvcnNwLmMtNDAzLVx0Y2FzZSBOQ0lfT1BfQ09SRV9DT05OX0NSRUFURV9SU1A6XG5uZXQvbmZjL25jaS9yc3AuYzo0MDQ6XHRcdG5jaV9jb3JlX2Nvbm5fY3JlYXRlX3JzcF9wYWNrZXQobmRldiwgc2tiKTtcbm5ldC9uZmMvbmNpL3JzcC5jLTQwNS1cdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDA5OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMDQxCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogOTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyB0aGUgTkZDIENvbnRyb2xsZXIgUmVzcG9uc2UgSGFuZGxlcioqCgpPa2F5LCBzbyBJJiMzOTt2ZSBpZGVudGlmaWVkIHRoZSBlbnRyeSBwb2ludDogYG5jaV9yc3BfcGFja2V0YC4gVGhhdCYjMzk7cyB0aGUgZnVuY3Rpb24gaGFuZGxpbmcgcmVzcG9uc2VzIGNvbWluZyBiYWNrIGZyb20gdGhlIE5GQyBjb250cm9sbGVyLCB3aGljaCBtYWtlcyBpdCBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZy4gRGVmaW5pdGVseSByZWFjaGFibGUsIGFuZCBwb3RlbnRpYWxseSB2dWxuZXJhYmxlLiBJJiMzOTt2ZSBnb3QgYSBnb29kIGZlZWxpbmcgYWJvdXQgdGhpcy4KCk5vdywgYmVmb3JlIEkgZGlnIGluLCBJIHdhbnQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIExldCYjMzk7cyBzZWUuLi4gSSYjMzk7bGwgbmVlZCB0byBjb25zaWRlcjogYE5GQ2AsIG9idmlvdXNseSwgYW5kIGBORkNfTkNJYCBmb3IgdGhlIE5DSSBwcm90b2NvbCBpdHNlbGYuIFRoZW4gdGhlcmUmIzM5O3MgYE5GQ19WSVJUVUFMX05DSWAsIGJlY2F1c2UgdmlydHVhbCBOQ0kgbWlnaHQgaW50cm9kdWNlIHNvbWUgaW50ZXJlc3RpbmcgZWRnZSBjYXNlcywgYW5kIGZpbmFsbHkgYE5GQ19IQ0lgLiBIbW0sIEkmIzM5O20gbm90IGVudGlyZWx5IHN1cmUgYWJvdXQgYE5GQ19IQ0lgLiBMZXQgbWUgcXVpY2tseSBjaGVjayBpZiBgbmNpX2hjaV9zZW5kX2NtZGAgcmVxdWlyZXMgdGhhdCBjb25maWcgb3B0aW9uLiBKdXN0IG5lZWQgdG8gdmVyaWZ5IHRoYXQgZGVwZW5kZW5jeSB0byBiZSBzdXJlLiBBbHJpZ2h0LCBub3cgSSBoYXZlIGEgZ29vZCBiYXNlIGZvciBjb25maWd1cmluZyB0aGUgZnV6emluZyBlbnZpcm9ubWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMDk6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TkZDX0hDSSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZmMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZmMvTWFrZWZpbGU9Nz1vYmotJChDT05GSUdfTkZDX05DSSkgJiM0Mzs9IG5jaS9cbm5ldC9uZmMvTWFrZWZpbGU6ODpvYmotJChDT05GSUdfTkZDX0hDSSkgJiM0Mzs9IGhjaS9cbm5ldC9uZmMvTWFrZWZpbGUtOS1vYmotJChDT05GSUdfTkZDX0RJR0lUQUwpICYjNDM7PSBuZmNfZGlnaXRhbC5vXG4tLVxubmV0L25mYy9oY2kvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxubmV0L25mYy9oY2kvS2NvbmZpZzoyOmNvbmZpZyBORkNfSENJXG5uZXQvbmZjL2hjaS9LY29uZmlnLTMtXHRkZXBlbmRzIG9uIE5GQ1xuLS1cbm5ldC9uZmMvaGNpL0tjb25maWc9MTE9Y29uZmlnIE5GQ19TSERMQ1xubmV0L25mYy9oY2kvS2NvbmZpZzoxMjpcdGRlcGVuZHMgb24gTkZDX0hDSVxubmV0L25mYy9oY2kvS2NvbmZpZy0xMy1cdHNlbGVjdCBDUkNfQ0NJVFRcbi0tXG5uZXQvbmZjL2hjaS9NYWtlZmlsZS01LVxubmV0L25mYy9oY2kvTWFrZWZpbGU6NjpvYmotJChDT05GSUdfTkZDX0hDSSkgJiM0Mzs9IGhjaS5vXG5uZXQvbmZjL2hjaS9NYWtlZmlsZS03LVxuLS1cbm5ldC9uZmMvaGNpL2NvbW1hbmQuYz0xOT1zdGF0aWMgaW50IG5mY19oY2lfZXhlY3V0ZV9jbWRfYXN5bmMoc3RydWN0IG5mY19oY2lfZGV2ICpoZGV2LCB1OCBwaXBlLCB1OCBjbWQsXG4tLVxubmV0L25mYy9oY2kvY29tbWFuZC5jLTI4LVx0ICovXG5uZXQvbmZjL2hjaS9jb21tYW5kLmM6Mjk6XHRyZXR1cm4gbmZjX2hjaV9oY3BfbWVzc2FnZV90eChoZGV2LCBwaXBlLCBORkNfSENJX0hDUF9DT01NQU5ELCBjbWQsXG5uZXQvbmZjL2hjaS9jb21tYW5kLmMtMzAtXHRcdFx0XHQgICAgICBwYXJhbSwgcGFyYW1fbGVuLCBjYiwgY2JfY29udGV4dCwgTUFYX0ZXSSk7XG4tLVxubmV0L25mYy9oY2kvY29tbWFuZC5jPTU1PXN0YXRpYyBpbnQgbmZjX2hjaV9leGVjdXRlX2NtZChzdHJ1Y3QgbmZjX2hjaV9kZXYgKmhkZXYsIHU4IHBpcGUsIHU4IGNtZCxcbi0tXG5uZXQvbmZjL2hjaS9jb21tYW5kLmMtNzEtXHRoY3BfZXcuZXhlY19yZXN1bHQgPSBuZmNfaGNpX2hjcF9tZXNzYWdlX3R4KGhkZXYsIHBpcGUsXG5uZXQvbmZjL2hjaS9jb21tYW5kLmM6NzI6XHRcdFx0XHRcdFx0ICAgIE5GQ19IQ0lfSENQX0NPTU1BTkQsIGNtZCxcbm5ldC9uZmMvaGNpL2NvbW1hbmQuYy03My1cdFx0XHRcdFx0XHQgICAgcGFyYW0sIHBhcmFtX2xlbixcbi0tXG5uZXQvbmZjL2hjaS9jb21tYW5kLmM9OTE9aW50IG5mY19oY2lfc2VuZF9ldmVudChzdHJ1Y3QgbmZjX2hjaV9kZXYgKmhkZXYsIHU4IGdhdGUsIHU4IGV2ZW50LFxuLS1cbm5ldC9uZmMvaGNpL2NvbW1hbmQuYy05OC1cdHBpcGUgPSBoZGV2LVx1MDAzZWdhdGUycGlwZVtnYXRlXTtcbm5ldC9uZmMvaGNpL2NvbW1hbmQuYzo5OTpcdGlmIChwaXBlID09IE5GQ19IQ0lfSU5WQUxJRF9QSVBFKVxubmV0L25mYy9oY2kvY29tbWFuZC5jLTEwMC1cdFx0cmV0dXJuIC1FQUREUk5PVEFWQUlMO1xubmV0L25mYy9oY2kvY29tbWFuZC5jLTEwMS1cbm5ldC9uZmMvaGNpL2NvbW1hbmQuYzoxMDI6XHRyZXR1cm4gbmZjX2hjaV9oY3BfbWVzc2FnZV90eChoZGV2LCBwaXBlLCBORkNfSENJX0hDUF9FVkVOVCwgZXZlbnQsXG5uZXQvbmZjL2hjaS9jb21tYW5kLmMtMTAzLVx0XHRcdFx0ICAgICAgcGFyYW0sIHBhcmFtX2xlbiwgTlVMTCwgTlVMTCwgMCk7XG4tLVxubmV0L25mYy9oY2kvY29tbWFuZC5jPTExMj1pbnQgbmZjX2hjaV9zZW5kX2NtZChzdHJ1Y3QgbmZjX2hjaV9kZXYgKmhkZXYsIHU4IGdhdGUsIHU4IGNtZCxcbi0tXG5uZXQvbmZjL2hjaS9jb21tYW5kLmMtMTE3LVx0cGlwZSA9IGhkZXYtXHUwMDNlZ2F0ZTJwaXBlW2dhdGVdO1xubmV0L25mYy9oY2kvY29tbWFuZC5jOjExODpcdGlmIChwaXBlID09IE5GQ19IQ0lfSU5WQUxJRF9QSVBFKVxubmV0L25mYy9oY2kvY29tbWFuZC5jLTExOS1cdFx0cmV0dXJuIC1FQUREUk5PVEFWQUlMO1xuLS1cbm5ldC9uZmMvaGNpL2NvbW1hbmQuYz0xMjU9aW50IG5mY19oY2lfc2VuZF9jbWRfYXN5bmMoc3RydWN0IG5mY19oY2lfZGV2ICpoZGV2LCB1OCBnYXRlLCB1OCBjbWQsXG4tLVxubmV0L25mYy9oY2kvY29tbWFuZC5jLTEzMS1cdHBpcGUgPSBoZGV2LVx1MDAzZWdhdGUycGlwZVtnYXRlXTtcbm5ldC9uZmMvaGNpL2NvbW1hbmQuYzoxMzI6XHRpZiAocGlwZSA9PSBORkNfSENJX0lOVkFMSURfUElQRSlcbm5ldC9uZmMvaGNpL2NvbW1hbmQuYy0xMzMtXHRcdHJldHVybiAtRUFERFJOT1RBVkFJTDtcbi0tXG5uZXQvbmZjL2hjaS9jb21tYW5kLmM9MTQwPWludCBuZmNfaGNpX3NldF9wYXJhbShzdHJ1Y3QgbmZjX2hjaV9kZXYgKmhkZXYsIHU4IGdhdGUsIHU4IGlkeCxcbi0tXG5uZXQvbmZjL2hjaS9jb21tYW5kLmMtMTYyLVxubmV0L25mYy9oY2kvY29tbWFuZC5jOjE2MzpcdHIgPSBuZmNfaGNpX3NlbmRfY21kKGhkZXYsIGdhdGUsIE5GQ19IQ0lfQU5ZX1NFVF9QQVJBTUVURVIsXG5uZXQvbmZjL2hjaS9jb21tYW5kLmMtMTY0LVx0XHRcdCAgICAgdG1wLCBwYXJhbV9sZW4gJiM0MzsgMSwgTlVMTCk7XG4tLVxubmV0L25mYy9oY2kvY29tbWFuZC5jPTE3Mj1pbnQgbmZjX2hjaV9nZXRfcGFyYW0oc3RydWN0IG5mY19oY2lfZGV2ICpoZGV2LCB1OCBnYXRlLCB1OCBpZHgsXG4tLVxubmV0L25mYy9oY2kvY29tbWFuZC5jLTE3Ni1cbm5ldC9uZmMvaGNpL2NvbW1hbmQuYzoxNzc6XHRyZXR1cm4gbmZjX2hjaV9zZW5kX2NtZChoZGV2LCBnYXRlLCBORkNfSENJX0FOWV9HRVRfUEFSQU1FVEVSLFxubmV0L25mYy9oY2kvY29tbWFuZC5jLTE3OC1cdFx0XHRcdFx1MDAyNmlkeCwgMSwgc2tiKTtcbi0tXG5uZXQvbmZjL2hjaS9jb21tYW5kLmM9MTgyPXN0YXRpYyBpbnQgbmZjX2hjaV9vcGVuX3BpcGUoc3RydWN0IG5mY19oY2lfZGV2ICpoZGV2LCB1OCBwaXBlKVxuLS1cbm5ldC9uZmMvaGNpL2NvbW1hbmQuYy0xODgtXG5uZXQvbmZjL2hjaS9jb21tYW5kLmM6MTg5Olx0ciA9IG5mY19oY2lfZXhlY3V0ZV9jbWQoaGRldiwgcGlwZSwgTkZDX0hDSV9BTllfT1BFTl9QSVBFLFxubmV0L25mYy9oY2kvY29tbWFuZC5jLTE5MC1cdFx0XHRcdE5VTEwsIDAsIFx1MDAyNnNrYik7XG4tLVxubmV0L25mYy9oY2kvY29tbWFuZC5jPTIwMj1zdGF0aWMgaW50IG5mY19oY2lfY2xvc2VfcGlwZShzdHJ1Y3QgbmZjX2hjaV9kZXYgKmhkZXYsIHU4IHBpcGUpXG5uZXQvbmZjL2hjaS9jb21tYW5kLmMtMjAzLXtcbm5ldC9uZmMvaGNpL2NvbW1hbmQuYzoyMDQ6XHRyZXR1cm4gbmZjX2hjaV9leGVjdXRlX2NtZChoZGV2LCBwaXBlLCBORkNfSENJX0FOWV9DTE9TRV9QSVBFLFxubmV0L25mYy9oY2kvY29tbWFuZC5jLTIwNS1cdFx0XHRcdCAgIE5VTEwsIDAsIE5VTEwpO1xuLS1cbm5ldC9uZmMvaGNpL2NvbW1hbmQuYz0yMDg9c3RhdGljIHU4IG5mY19oY2lfY3JlYXRlX3BpcGUoc3RydWN0IG5mY19oY2lfZGV2ICpoZGV2LCB1OCBkZXN0X2hvc3QsXG4tLVxubmV0L25mYy9oY2kvY29tbWFuZC5jLTIxNy1cbm5ldC9uZmMvaGNpL2NvbW1hbmQuYzoyMTg6XHRwYXJhbXMuc3JjX2dhdGUgPSBORkNfSENJX0FETUlOX0dBVEU7XG5uZXQvbmZjL2hjaS9jb21tYW5kLmMtMjE5LVx0cGFyYW1zLmRlc3RfaG9zdCA9IGRlc3RfaG9zdDtcbi0tXG5uZXQvbmZjL2hjaS9jb21tYW5kLmMtMjIxLVxubmV0L25mYy9oY2kvY29tbWFuZC5jOjIyMjpcdCpyZXN1bHQgPSBuZmNfaGNpX2V4ZWN1dGVfY21kKGhkZXYsIE5GQ19IQ0lfQURNSU5fUElQRSxcbm5ldC9uZmMvaGNpL2NvbW1hbmQuYzoyMjM6XHRcdFx0XHQgICAgICBORkNfSENJX0FETV9DUkVBVEVfUElQRSxcbm5ldC9uZmMvaGNpL2NvbW1hbmQuYy0yMjQtXHRcdFx0XHQgICAgICAodTggKikgXHUwMDI2cGFyYW1zLCBzaXplb2YocGFyYW1zKSwgXHUwMDI2c2tiKTtcbm5ldC9uZmMvaGNpL2NvbW1hbmQuYy0yMjUtXHRpZiAoKnJlc3VsdCBcdTAwM2MgMClcbm5ldC9uZmMvaGNpL2NvbW1hbmQuYzoyMjY6XHRcdHJldHVybiBORkNfSENJX0lOVkFMSURfUElQRTtcbm5ldC9uZmMvaGNpL2NvbW1hbmQuYy0yMjctXG4tLVxubmV0L25mYy9oY2kvY29tbWFuZC5jPTIzNz1zdGF0aWMgaW50IG5mY19oY2lfZGVsZXRlX3BpcGUoc3RydWN0IG5mY19oY2lfZGV2ICpoZGV2LCB1OCBwaXBlKVxubmV0L25mYy9oY2kvY29tbWFuZC5jLTIzOC17XG5uZXQvbmZjL2hjaS9jb21tYW5kLmM6MjM5Olx0cmV0dXJuIG5mY19oY2lfZXhlY3V0ZV9jbWQoaGRldiwgTkZDX0hDSV9BRE1JTl9QSVBFLFxubmV0L25mYy9oY2kvY29tbWFuZC5jOjI0MDpcdFx0XHRcdCAgIE5GQ19IQ0lfQURNX0RFTEVURV9QSVBFLCBcdTAwMjZwaXBlLCAxLCBOVUxMKTtcbm5ldC9uZmMvaGNpL2NvbW1hbmQuYy0yNDEtfVxuLS1cbm5ldC9uZmMvaGNpL2NvbW1hbmQuYz0yNDM9c3RhdGljIGludCBuZmNfaGNpX2NsZWFyX2FsbF9waXBlcyhzdHJ1Y3QgbmZjX2hjaV9kZXYgKmhkZXYpXG4tLVxubmV0L25mYy9oY2kvY29tbWFuZC5jLTI1MC1cbm5ldC9uZmMvaGNpL2NvbW1hbmQuYzoyNTE6XHRpZiAodGVzdF9iaXQoTkZDX0hDSV9RVUlSS19TSE9SVF9DTEVBUiwgXHUwMDI2aGRldi1cdTAwM2VxdWlya3MpKVxubmV0L25mYy9oY2kvY29tbWFuZC5jLTI1Mi1cdFx0cGFyYW1fbGVuID0gMDtcbm5ldC9uZmMvaGNpL2NvbW1hbmQuYy0yNTMtXG5uZXQvbmZjL2hjaS9jb21tYW5kLmM6MjU0Olx0cmV0dXJuIG5mY19oY2lfZXhlY3V0ZV9jbWQoaGRldiwgTkZDX0hDSV9BRE1JTl9QSVBFLFxubmV0L25mYy9oY2kvY29tbWFuZC5jOjI1NTpcdFx0XHRcdCAgIE5GQ19IQ0lfQURNX0NMRUFSX0FMTF9QSVBFLCBwYXJhbSwgcGFyYW1fbGVuLFxubmV0L25mYy9oY2kvY29tbWFuZC5jLTI1Ni1cdFx0XHRcdCAgIE5VTEwpO1xuLS1cbm5ldC9uZmMvaGNpL2NvbW1hbmQuYz0yNTk9aW50IG5mY19oY2lfZGlzY29ubmVjdF9nYXRlKHN0cnVjdCBuZmNfaGNpX2RldiAqaGRldiwgdTggZ2F0ZSlcbi0tXG5uZXQvbmZjL2hjaS9jb21tYW5kLmMtMjYzLVxubmV0L25mYy9oY2kvY29tbWFuZC5jOjI2NDpcdGlmIChwaXBlID09IE5GQ19IQ0lfSU5WQUxJRF9QSVBFKVxubmV0L25mYy9oY2kvY29tbWFuZC5jLTI2NS1cdFx0cmV0dXJuIC1FQUREUk5PVEFWQUlMO1xuLS1cbm5ldC9uZmMvaGNpL2NvbW1hbmQuYy0yNzAtXG5uZXQvbmZjL2hjaS9jb21tYW5kLmM6MjcxOlx0aWYgKHBpcGUgIT0gTkZDX0hDSV9MSU5LX01HTVRfUElQRSBcdTAwMjZcdTAwMjYgcGlwZSAhPSBORkNfSENJX0FETUlOX1BJUEUpIHtcbm5ldC9uZmMvaGNpL2NvbW1hbmQuYy0yNzItXHRcdHIgPSBuZmNfaGNpX2RlbGV0ZV9waXBlKGhkZXYsIHBpcGUpO1xuLS1cbm5ldC9uZmMvaGNpL2NvbW1hbmQuYy0yNzYtXG5uZXQvbmZjL2hjaS9jb21tYW5kLmM6Mjc3Olx0aGRldi1cdTAwM2VnYXRlMnBpcGVbZ2F0ZV0gPSBORkNfSENJX0lOVkFMSURfUElQRTtcbm5ldC9uZmMvaGNpL2NvbW1hbmQuYy0yNzgtXG4tLVxubmV0L25mYy9oY2kvY29tbWFuZC5jPTI5Nz1pbnQgbmZjX2hjaV9jb25uZWN0X2dhdGUoc3RydWN0IG5mY19oY2lfZGV2ICpoZGV2LCB1OCBkZXN0X2hvc3QsIHU4IGRlc3RfZ2F0ZSxcbi0tXG5uZXQvbmZjL2hjaS9jb21tYW5kLmMtMzAyLVxubmV0L25mYy9oY2kvY29tbWFuZC5jOjMwMzpcdGlmIChwaXBlID09IE5GQ19IQ0lfRE9fTk9UX0NSRUFURV9QSVBFKVxubmV0L25mYy9oY2kvY29tbWFuZC5jLTMwNC1cdFx0cmV0dXJuIDA7XG5uZXQvbmZjL2hjaS9jb21tYW5kLmMtMzA1LVxubmV0L25mYy9oY2kvY29tbWFuZC5jOjMwNjpcdGlmIChoZGV2LVx1MDAzZWdhdGUycGlwZVtkZXN0X2dhdGVdICE9IE5GQ19IQ0lfSU5WQUxJRF9QSVBFKVxubmV0L25mYy9oY2kvY29tbWFuZC5jLTMwNy1cdFx0cmV0dXJuIC1FQUREUklOVVNFO1xubmV0L25mYy9oY2kvY29tbWFuZC5jLTMwOC1cbm5ldC9uZmMvaGNpL2NvbW1hbmQuYzozMDk6XHRpZiAocGlwZSAhPSBORkNfSENJX0lOVkFMSURfUElQRSlcbm5ldC9uZmMvaGNpL2NvbW1hbmQuYy0zMTAtXHRcdGdvdG8gb3Blbl9waXBlO1xuLS1cbm5ldC9uZmMvaGNpL2NvbW1hbmQuYy0zMTItXHRzd2l0Y2ggKGRlc3RfZ2F0ZSkge1xubmV0L25mYy9oY2kvY29tbWFuZC5jOjMxMzpcdGNhc2UgTkZDX0hDSV9MSU5LX01HTVRfR0FURTpcbm5ldC9uZmMvaGNpL2NvbW1hbmQuYzozMTQ6XHRcdHBpcGUgPSBORkNfSENJX0xJTktfTUdNVF9QSVBFO1xubmV0L25mYy9oY2kvY29tbWFuZC5jLTMxNS1cdFx0YnJlYWs7XG5uZXQvbmZjL2hjaS9jb21tYW5kLmM6MzE2Olx0Y2FzZSBORkNfSENJX0FETUlOX0dBVEU6XG5uZXQvbmZjL2hjaS9jb21tYW5kLmM6MzE3Olx0XHRwaXBlID0gTkZDX0hDSV9BRE1JTl9QSVBFO1xubmV0L25mYy9oY2kvY29tbWFuZC5jLTMxOC1cdFx0YnJlYWs7XG4tLVxubmV0L25mYy9oY2kvY29tbWFuZC5jLTMyMC1cdFx0cGlwZSA9IG5mY19oY2lfY3JlYXRlX3BpcGUoaGRldiwgZGVzdF9ob3N0LCBkZXN0X2dhdGUsIFx1MDAyNnIpO1xubmV0L25mYy9oY2kvY29tbWFuZC5jOjMyMTpcdFx0aWYgKHBpcGUgPT0gTkZDX0hDSV9JTlZBTElEX1BJUEUpXG5uZXQvbmZjL2hjaS9jb21tYW5kLmMtMzIyLVx0XHRcdHJldHVybiByO1xuLS1cbm5ldC9uZmMvaGNpL2NvcmUuYz0yMj1pbnQgbmZjX2hjaV9yZXN1bHRfdG9fZXJybm8odTggcmVzdWx0KVxuLS1cbm5ldC9uZmMvaGNpL2NvcmUuYy0yNC1cdHN3aXRjaCAocmVzdWx0KSB7XG5uZXQvbmZjL2hjaS9jb3JlLmM6MjU6XHRjYXNlIE5GQ19IQ0lfQU5ZX09LOlxubmV0L25mYy9oY2kvY29yZS5jLTI2LVx0XHRyZXR1cm4gMDtcbm5ldC9uZmMvaGNpL2NvcmUuYzoyNzpcdGNhc2UgTkZDX0hDSV9BTllfRV9SRUdfUEFSX1VOS05PV046XG5uZXQvbmZjL2hjaS9jb3JlLmMtMjgtXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbm5ldC9uZmMvaGNpL2NvcmUuYzoyOTpcdGNhc2UgTkZDX0hDSV9BTllfRV9USU1FT1VUOlxubmV0L25mYy9oY2kvY29yZS5jLTMwLVx0XHRyZXR1cm4gLUVUSU1FO1xuLS1cbm5ldC9uZmMvaGNpL2NvcmUuYz0zNz12b2lkIG5mY19oY2lfcmVzZXRfcGlwZXMoc3RydWN0IG5mY19oY2lfZGV2ICpoZGV2KVxuLS1cbm5ldC9uZmMvaGNpL2NvcmUuYy00MC1cbm5ldC9uZmMvaGNpL2NvcmUuYzo0MTpcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE5GQ19IQ0lfTUFYX1BJUEVTOyBpJiM0MzsmIzQzOykge1xubmV0L25mYy9oY2kvY29yZS5jOjQyOlx0XHRoZGV2LVx1MDAzZXBpcGVzW2ldLmdhdGUgPSBORkNfSENJX0lOVkFMSURfR0FURTtcbm5ldC9uZmMvaGNpL2NvcmUuYzo0MzpcdFx0aGRldi1cdTAwM2VwaXBlc1tpXS5kZXN0X2hvc3QgPSBORkNfSENJX0lOVkFMSURfSE9TVDtcbm5ldC9uZmMvaGNpL2NvcmUuYy00NC1cdH1cbm5ldC9uZmMvaGNpL2NvcmUuYzo0NTpcdG1lbXNldChoZGV2LVx1MDAzZWdhdGUycGlwZSwgTkZDX0hDSV9JTlZBTElEX1BJUEUsIHNpemVvZihoZGV2LVx1MDAzZWdhdGUycGlwZSkpO1xubmV0L25mYy9oY2kvY29yZS5jLTQ2LX1cbi0tXG5uZXQvbmZjL2hjaS9jb3JlLmM9NDk9dm9pZCBuZmNfaGNpX3Jlc2V0X3BpcGVzX3Blcl9ob3N0KHN0cnVjdCBuZmNfaGNpX2RldiAqaGRldiwgdTggaG9zdClcbi0tXG5uZXQvbmZjL2hjaS9jb3JlLmMtNTItXG5uZXQvbmZjL2hjaS9jb3JlLmM6NTM6XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBORkNfSENJX01BWF9QSVBFUzsgaSYjNDM7JiM0MzspIHtcbm5ldC9uZmMvaGNpL2NvcmUuYy01NC1cdFx0aWYgKGhkZXYtXHUwMDNlcGlwZXNbaV0uZGVzdF9ob3N0ICE9IGhvc3QpXG4tLVxubmV0L25mYy9oY2kvY29yZS5jLTU2LVxubmV0L25mYy9oY2kvY29yZS5jOjU3Olx0XHRoZGV2LVx1MDAzZXBpcGVzW2ldLmdhdGUgPSBORkNfSENJX0lOVkFMSURfR0FURTtcbm5ldC9uZmMvaGNpL2NvcmUuYzo1ODpcdFx0aGRldi1cdTAwM2VwaXBlc1tpXS5kZXN0X2hvc3QgPSBORkNfSENJX0lOVkFMSURfSE9TVDtcbm5ldC9uZmMvaGNpL2NvcmUuYy01OS1cdH1cbi0tXG5uZXQvbmZjL2hjaS9jb3JlLmM9MTI2PXN0YXRpYyB2b2lkIG5mY19oY2lfbXNnX3J4X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbm5ldC9uZmMvaGNpL2NvcmUuYy0xMzctXHRcdHBpcGUgPSBza2ItXHUwMDNlZGF0YVswXTtcbm5ldC9uZmMvaGNpL2NvcmUuYzoxMzg6XHRcdHNrYl9wdWxsKHNrYiwgTkZDX0hDSV9IQ1BfUEFDS0VUX0hFQURFUl9MRU4pO1xubmV0L25mYy9oY2kvY29yZS5jLTEzOS1cdFx0bWVzc2FnZSA9IChzdHJ1Y3QgaGNwX21lc3NhZ2UgKilza2ItXHUwMDNlZGF0YTtcbi0tXG5uZXQvbmZjL2hjaS9jb3JlLmMtMTQxLVx0XHRpbnN0cnVjdGlvbiA9IEhDUF9NU0dfR0VUX0NNRChtZXNzYWdlLVx1MDAzZWhlYWRlcik7XG5uZXQvbmZjL2hjaS9jb3JlLmM6MTQyOlx0XHRza2JfcHVsbChza2IsIE5GQ19IQ0lfSENQX01FU1NBR0VfSEVBREVSX0xFTik7XG5uZXQvbmZjL2hjaS9jb3JlLmMtMTQzLVxuLS1cbm5ldC9uZmMvaGNpL2NvcmUuYz0xODE9dm9pZCBuZmNfaGNpX2NtZF9yZWNlaXZlZChzdHJ1Y3QgbmZjX2hjaV9kZXYgKmhkZXYsIHU4IHBpcGUsIHU4IGNtZCxcbi0tXG5uZXQvbmZjL2hjaS9jb3JlLmMtMTgzLXtcbm5ldC9uZmMvaGNpL2NvcmUuYzoxODQ6XHR1OCBzdGF0dXMgPSBORkNfSENJX0FOWV9PSztcbm5ldC9uZmMvaGNpL2NvcmUuYy0xODUtXHRjb25zdCBzdHJ1Y3QgaGNpX2NyZWF0ZV9waXBlX3Jlc3AgKmNyZWF0ZV9pbmZvO1xuLS1cbm5ldC9uZmMvaGNpL2NvcmUuYy0xOTEtXG5uZXQvbmZjL2hjaS9jb3JlLmM6MTkyOlx0aWYgKHBpcGUgXHUwMDNlPSBORkNfSENJX01BWF9QSVBFUykge1xubmV0L25mYy9oY2kvY29yZS5jOjE5MzpcdFx0c3RhdHVzID0gTkZDX0hDSV9BTllfRV9OT0s7XG5uZXQvbmZjL2hjaS9jb3JlLmMtMTk0LVx0XHRnb3RvIGV4aXQ7XG4tLVxubmV0L25mYy9oY2kvY29yZS5jLTE5OS1cdHN3aXRjaCAoY21kKSB7XG5uZXQvbmZjL2hjaS9jb3JlLmM6MjAwOlx0Y2FzZSBORkNfSENJX0FETV9OT1RJRllfUElQRV9DUkVBVEVEOlxubmV0L25mYy9oY2kvY29yZS5jLTIwMS1cdFx0aWYgKHNrYi1cdTAwM2VsZW4gIT0gNSkge1xubmV0L25mYy9oY2kvY29yZS5jOjIwMjpcdFx0XHRzdGF0dXMgPSBORkNfSENJX0FOWV9FX05PSztcbm5ldC9uZmMvaGNpL2NvcmUuYy0yMDMtXHRcdFx0Z290byBleGl0O1xuLS1cbm5ldC9uZmMvaGNpL2NvcmUuYy0yMDYtXG5uZXQvbmZjL2hjaS9jb3JlLmM6MjA3Olx0XHRpZiAoY3JlYXRlX2luZm8tXHUwMDNlcGlwZSBcdTAwM2U9IE5GQ19IQ0lfTUFYX1BJUEVTKSB7XG5uZXQvbmZjL2hjaS9jb3JlLmM6MjA4Olx0XHRcdHN0YXR1cyA9IE5GQ19IQ0lfQU5ZX0VfTk9LO1xubmV0L25mYy9oY2kvY29yZS5jLTIwOS1cdFx0XHRnb3RvIGV4aXQ7XG4tLVxubmV0L25mYy9oY2kvY29yZS5jLTIyMS1cdFx0YnJlYWs7XG5uZXQvbmZjL2hjaS9jb3JlLmM6MjIyOlx0Y2FzZSBORkNfSENJX0FOWV9PUEVOX1BJUEU6XG5uZXQvbmZjL2hjaS9jb3JlLmM6MjIzOlx0XHRpZiAoZ2F0ZSA9PSBORkNfSENJX0lOVkFMSURfR0FURSkge1xubmV0L25mYy9oY2kvY29yZS5jOjIyNDpcdFx0XHRzdGF0dXMgPSBORkNfSENJX0FOWV9FX05PSztcbm5ldC9uZmMvaGNpL2NvcmUuYy0yMjUtXHRcdFx0Z290byBleGl0O1xuLS1cbm5ldC9uZmMvaGNpL2NvcmUuYy0yMjctXHRcdGJyZWFrO1xubmV0L25mYy9oY2kvY29yZS5jOjIyODpcdGNhc2UgTkZDX0hDSV9BRE1fTk9USUZZX1BJUEVfREVMRVRFRDpcbm5ldC9uZmMvaGNpL2NvcmUuYy0yMjktXHRcdGlmIChza2ItXHUwMDNlbGVuICE9IDEpIHtcbm5ldC9uZmMvaGNpL2NvcmUuYzoyMzA6XHRcdFx0c3RhdHVzID0gTkZDX0hDSV9BTllfRV9OT0s7XG5uZXQvbmZjL2hjaS9jb3JlLmMtMjMxLVx0XHRcdGdvdG8gZXhpdDtcbi0tXG5uZXQvbmZjL2hjaS9jb3JlLmMtMjM0LVxubmV0L25mYy9oY2kvY29yZS5jOjIzNTpcdFx0aWYgKGRlbGV0ZV9pbmZvLVx1MDAzZXBpcGUgXHUwMDNlPSBORkNfSENJX01BWF9QSVBFUykge1xubmV0L25mYy9oY2kvY29yZS5jOjIzNjpcdFx0XHRzdGF0dXMgPSBORkNfSENJX0FOWV9FX05PSztcbm5ldC9uZmMvaGNpL2NvcmUuYy0yMzctXHRcdFx0Z290byBleGl0O1xuLS1cbm5ldC9uZmMvaGNpL2NvcmUuYy0yMzktXG5uZXQvbmZjL2hjaS9jb3JlLmM6MjQwOlx0XHRoZGV2LVx1MDAzZXBpcGVzW2RlbGV0ZV9pbmZvLVx1MDAzZXBpcGVdLmdhdGUgPSBORkNfSENJX0lOVkFMSURfR0FURTtcbm5ldC9uZmMvaGNpL2NvcmUuYzoyNDE6XHRcdGhkZXYtXHUwMDNlcGlwZXNbZGVsZXRlX2luZm8tXHUwMDNlcGlwZV0uZGVzdF9ob3N0ID0gTkZDX0hDSV9JTlZBTElEX0hPU1Q7XG5uZXQvbmZjL2hjaS9jb3JlLmMtMjQyLVx0XHRicmVhaztcbm5ldC9uZmMvaGNpL2NvcmUuYzoyNDM6XHRjYXNlIE5GQ19IQ0lfQURNX05PVElGWV9BTExfUElQRV9DTEVBUkVEOlxubmV0L25mYy9oY2kvY29yZS5jLTI0NC1cdFx0aWYgKHNrYi1cdTAwM2VsZW4gIT0gMSkge1xubmV0L25mYy9oY2kvY29yZS5jOjI0NTpcdFx0XHRzdGF0dXMgPSBORkNfSENJX0FOWV9FX05PSztcbm5ldC9uZmMvaGNpL2NvcmUuYy0yNDYtXHRcdFx0Z290byBleGl0O1xuLS1cbm5ldC9uZmMvaGNpL2NvcmUuYy0yNjAtZXhpdDpcbm5ldC9uZmMvaGNpL2NvcmUuYzoyNjE6XHRuZmNfaGNpX2hjcF9tZXNzYWdlX3R4KGhkZXYsIHBpcGUsIE5GQ19IQ0lfSENQX1JFU1BPTlNFLFxubmV0L25mYy9oY2kvY29yZS5jLTI2Mi1cdFx0XHQgICAgICAgc3RhdHVzLCBOVUxMLCAwLCBOVUxMLCBOVUxMLCAwKTtcbi0tXG5uZXQvbmZjL2hjaS9jb3JlLmM9MjY3PXUzMiBuZmNfaGNpX3Nha190b19wcm90b2NvbCh1OCBzYWspXG5uZXQvbmZjL2hjaS9jb3JlLmMtMjY4LXtcbm5ldC9uZmMvaGNpL2NvcmUuYzoyNjk6XHRzd2l0Y2ggKE5GQ19IQ0lfVFlQRV9BX1NFTF9QUk9UKHNhaykpIHtcbm5ldC9uZmMvaGNpL2NvcmUuYzoyNzA6XHRjYXNlIE5GQ19IQ0lfVFlQRV9BX1NFTF9QUk9UX01JRkFSRTpcbm5ldC9uZmMvaGNpL2NvcmUuYy0yNzEtXHRcdHJldHVybiBORkNfUFJPVE9fTUlGQVJFX01BU0s7XG5uZXQvbmZjL2hjaS9jb3JlLmM6MjcyOlx0Y2FzZSBORkNfSENJX1RZUEVfQV9TRUxfUFJPVF9JU08xNDQ0Mzpcbm5ldC9uZmMvaGNpL2NvcmUuYy0yNzMtXHRcdHJldHVybiBORkNfUFJPVE9fSVNPMTQ0NDNfTUFTSztcbm5ldC9uZmMvaGNpL2NvcmUuYzoyNzQ6XHRjYXNlIE5GQ19IQ0lfVFlQRV9BX1NFTF9QUk9UX0RFUDpcbm5ldC9uZmMvaGNpL2NvcmUuYy0yNzUtXHRcdHJldHVybiBORkNfUFJPVE9fTkZDX0RFUF9NQVNLO1xubmV0L25mYy9oY2kvY29yZS5jOjI3NjpcdGNhc2UgTkZDX0hDSV9UWVBFX0FfU0VMX1BST1RfSVNPMTQ0NDNfREVQOlxubmV0L25mYy9oY2kvY29yZS5jLTI3Ny1cdFx0cmV0dXJuIE5GQ19QUk9UT19JU08xNDQ0M19NQVNLIHwgTkZDX1BST1RPX05GQ19ERVBfTUFTSztcbi0tXG5uZXQvbmZjL2hjaS9jb3JlLmM9Mjg0PWludCBuZmNfaGNpX3RhcmdldF9kaXNjb3ZlcmVkKHN0cnVjdCBuZmNfaGNpX2RldiAqaGRldiwgdTggZ2F0ZSlcbi0tXG5uZXQvbmZjL2hjaS9jb3JlLmMtMjk4LVx0c3dpdGNoIChnYXRlKSB7XG5uZXQvbmZjL2hjaS9jb3JlLmM6Mjk5Olx0Y2FzZSBORkNfSENJX1JGX1JFQURFUl9BX0dBVEU6XG5uZXQvbmZjL2hjaS9jb3JlLmM6MzAwOlx0XHRyID0gbmZjX2hjaV9nZXRfcGFyYW0oaGRldiwgTkZDX0hDSV9SRl9SRUFERVJfQV9HQVRFLFxubmV0L25mYy9oY2kvY29yZS5jOjMwMTpcdFx0XHRcdCAgICAgIE5GQ19IQ0lfUkZfUkVBREVSX0FfQVRRQSwgXHUwMDI2YXRxYV9za2IpO1xubmV0L25mYy9oY2kvY29yZS5jLTMwMi1cdFx0aWYgKHIgXHUwMDNjIDApXG4tLVxubmV0L25mYy9oY2kvY29yZS5jLTMwNC1cbm5ldC9uZmMvaGNpL2NvcmUuYzozMDU6XHRcdHIgPSBuZmNfaGNpX2dldF9wYXJhbShoZGV2LCBORkNfSENJX1JGX1JFQURFUl9BX0dBVEUsXG5uZXQvbmZjL2hjaS9jb3JlLmM6MzA2Olx0XHRcdFx0ICAgICAgTkZDX0hDSV9SRl9SRUFERVJfQV9TQUssIFx1MDAyNnNha19za2IpO1xubmV0L25mYy9oY2kvY29yZS5jLTMwNy1cdFx0aWYgKHIgXHUwMDNjIDApXG4tLVxubmV0L25mYy9oY2kvY29yZS5jLTMyNC1cbm5ldC9uZmMvaGNpL2NvcmUuYzozMjU6XHRcdHIgPSBuZmNfaGNpX2dldF9wYXJhbShoZGV2LCBORkNfSENJX1JGX1JFQURFUl9BX0dBVEUsXG5uZXQvbmZjL2hjaS9jb3JlLmM6MzI2Olx0XHRcdFx0ICAgICAgTkZDX0hDSV9SRl9SRUFERVJfQV9VSUQsIFx1MDAyNnVpZF9za2IpO1xubmV0L25mYy9oY2kvY29yZS5jLTMyNy1cdFx0aWYgKHIgXHUwMDNjIDApXG4tLVxubmV0L25mYy9oY2kvY29yZS5jLTM0NC1cdFx0YnJlYWs7XG5uZXQvbmZjL2hjaS9jb3JlLmM6MzQ1Olx0Y2FzZSBORkNfSENJX1JGX1JFQURFUl9CX0dBVEU6XG5uZXQvbmZjL2hjaS9jb3JlLmMtMzQ2LVx0XHR0YXJnZXRzLVx1MDAzZXN1cHBvcnRlZF9wcm90b2NvbHMgPSBORkNfUFJPVE9fSVNPMTQ0NDNfQl9NQVNLO1xuLS1cbm5ldC9uZmMvaGNpL2NvcmUuYz0zODE9dm9pZCBuZmNfaGNpX2V2ZW50X3JlY2VpdmVkKHN0cnVjdCBuZmNfaGNpX2RldiAqaGRldiwgdTggcGlwZSwgdTggZXZlbnQsXG4tLVxubmV0L25mYy9oY2kvY29yZS5jLTM4Ni1cbm5ldC9uZmMvaGNpL2NvcmUuYzozODc6XHRpZiAocGlwZSBcdTAwM2U9IE5GQ19IQ0lfTUFYX1BJUEVTKSB7XG5uZXQvbmZjL2hjaS9jb3JlLmMtMzg4LVx0XHRwcl9lcnIoXCYjMzQ7RGlzY2FyZGVkIGV2ZW50ICV4IHRvIGludmFsaWQgcGlwZSAleFxcblwmIzM0OywgZXZlbnQsIHBpcGUpO1xuLS1cbm5ldC9uZmMvaGNpL2NvcmUuYy0zOTItXHRnYXRlID0gaGRldi1cdTAwM2VwaXBlc1twaXBlXS5nYXRlO1xubmV0L25mYy9oY2kvY29yZS5jOjM5MzpcdGlmIChnYXRlID09IE5GQ19IQ0lfSU5WQUxJRF9HQVRFKSB7XG5uZXQvbmZjL2hjaS9jb3JlLmMtMzk0LVx0XHRwcl9lcnIoXCYjMzQ7RGlzY2FyZGVkIGV2ZW50ICV4IHRvIHVub3BlbmVkIHBpcGUgJXhcXG5cJiMzNDssIGV2ZW50LCBwaXBlKTtcbi0tXG5uZXQvbmZjL2hjaS9jb3JlLmMtNDA0LVx0c3dpdGNoIChldmVudCkge1xubmV0L25mYy9oY2kvY29yZS5jOjQwNTpcdGNhc2UgTkZDX0hDSV9FVlRfVEFSR0VUX0RJU0NPVkVSRUQ6XG5uZXQvbmZjL2hjaS9jb3JlLmMtNDA2LVx0XHRpZiAoc2tiLVx1MDAzZWxlbiBcdTAwM2MgMSkge1x0Lyogbm8gc3RhdHVzIGRhdGE/ICovXG4tLVxubmV0L25mYy9oY2kvY29yZS5jPTQ0OT1zdGF0aWMgaW50IGhjaV9kZXZfY29ubmVjdF9nYXRlcyhzdHJ1Y3QgbmZjX2hjaV9kZXYgKmhkZXYsIHU4IGdhdGVfY291bnQsXG4tLVxubmV0L25mYy9oY2kvY29yZS5jLTQ1My1cdHdoaWxlIChnYXRlX2NvdW50LS0pIHtcbm5ldC9uZmMvaGNpL2NvcmUuYzo0NTQ6XHRcdHIgPSBuZmNfaGNpX2Nvbm5lY3RfZ2F0ZShoZGV2LCBORkNfSENJX0hPU1RfQ09OVFJPTExFUl9JRCxcbm5ldC9uZmMvaGNpL2NvcmUuYy00NTUtXHRcdFx0XHRcdCBnYXRlcy1cdTAwM2VnYXRlLCBnYXRlcy1cdTAwM2VwaXBlKTtcbi0tXG5uZXQvbmZjL2hjaS9jb3JlLmM9NDY0PXN0YXRpYyBpbnQgaGNpX2Rldl9zZXNzaW9uX2luaXQoc3RydWN0IG5mY19oY2lfZGV2ICpoZGV2KVxuLS1cbm5ldC9uZmMvaGNpL2NvcmUuYy00NjgtXG5uZXQvbmZjL2hjaS9jb3JlLmM6NDY5Olx0aWYgKGhkZXYtXHUwMDNlaW5pdF9kYXRhLmdhdGVzWzBdLmdhdGUgIT0gTkZDX0hDSV9BRE1JTl9HQVRFKVxubmV0L25mYy9oY2kvY29yZS5jLTQ3MC1cdFx0cmV0dXJuIC1FUFJPVE87XG5uZXQvbmZjL2hjaS9jb3JlLmMtNDcxLVxubmV0L25mYy9oY2kvY29yZS5jOjQ3MjpcdHIgPSBuZmNfaGNpX2Nvbm5lY3RfZ2F0ZShoZGV2LCBORkNfSENJX0hPU1RfQ09OVFJPTExFUl9JRCxcbm5ldC9uZmMvaGNpL2NvcmUuYy00NzMtXHRcdFx0XHQgaGRldi1cdTAwM2Vpbml0X2RhdGEuZ2F0ZXNbMF0uZ2F0ZSxcbi0tXG5uZXQvbmZjL2hjaS9jb3JlLmMtNDc3LVxubmV0L25mYy9oY2kvY29yZS5jOjQ3ODpcdHIgPSBuZmNfaGNpX2dldF9wYXJhbShoZGV2LCBORkNfSENJX0FETUlOX0dBVEUsXG5uZXQvbmZjL2hjaS9jb3JlLmM6NDc5Olx0XHRcdCAgICAgIE5GQ19IQ0lfQURNSU5fU0VTU0lPTl9JREVOVElUWSwgXHUwMDI2c2tiKTtcbm5ldC9uZmMvaGNpL2NvcmUuYy00ODAtXHRpZiAociBcdTAwM2MgMClcbi0tXG5uZXQvbmZjL2hjaS9jb3JlLmMtNTAyLVxubmV0L25mYy9oY2kvY29yZS5jOjUwMzpcdFx0ciA9IG5mY19oY2lfc2V0X3BhcmFtKGhkZXYsIE5GQ19IQ0lfQURNSU5fR0FURSxcbm5ldC9uZmMvaGNpL2NvcmUuYzo1MDQ6XHRcdFx0XHRORkNfSENJX0FETUlOX1NFU1NJT05fSURFTlRJVFksXG5uZXQvbmZjL2hjaS9jb3JlLmMtNTA1LVx0XHRcdFx0aGRldi1cdTAwM2Vpbml0X2RhdGEuc2Vzc2lvbl9pZCxcbi0tXG5uZXQvbmZjL2hjaS9jb3JlLmM9NTIwPXN0YXRpYyBpbnQgaGNpX2Rldl92ZXJzaW9uKHN0cnVjdCBuZmNfaGNpX2RldiAqaGRldilcbi0tXG5uZXQvbmZjL2hjaS9jb3JlLmMtNTI0LVxubmV0L25mYy9oY2kvY29yZS5jOjUyNTpcdHIgPSBuZmNfaGNpX2dldF9wYXJhbShoZGV2LCBORkNfSENJX0lEX01HTVRfR0FURSxcbm5ldC9uZmMvaGNpL2NvcmUuYzo1MjY6XHRcdFx0ICAgICAgTkZDX0hDSV9JRF9NR01UX1ZFUlNJT05fU1csIFx1MDAyNnNrYik7XG5uZXQvbmZjL2hjaS9jb3JlLmMtNTI3LVx0aWYgKHIgPT0gLUVPUE5PVFNVUFApIHtcbi0tXG5uZXQvbmZjL2hjaS9jb3JlLmMtNTQ1LVxubmV0L25mYy9oY2kvY29yZS5jOjU0NjpcdHIgPSBuZmNfaGNpX2dldF9wYXJhbShoZGV2LCBORkNfSENJX0lEX01HTVRfR0FURSxcbm5ldC9uZmMvaGNpL2NvcmUuYzo1NDc6XHRcdFx0ICAgICAgTkZDX0hDSV9JRF9NR01UX1ZFUlNJT05fSFcsIFx1MDAyNnNrYik7XG5uZXQvbmZjL2hjaS9jb3JlLmMtNTQ4LVx0aWYgKHIgXHUwMDNjIDApXG4tLVxubmV0L25mYy9oY2kvY29yZS5jPTU3OT1zdGF0aWMgaW50IGhjaV9kZXZfdXAoc3RydWN0IG5mY19kZXYgKm5mY19kZXYpXG4tLVxubmV0L25mYy9oY2kvY29yZS5jLTU5Ny1cbm5ldC9uZmMvaGNpL2NvcmUuYzo1OTg6XHRyID0gbmZjX2hjaV9zZW5kX2V2ZW50KGhkZXYsIE5GQ19IQ0lfUkZfUkVBREVSX0FfR0FURSxcbm5ldC9uZmMvaGNpL2NvcmUuYzo1OTk6XHRcdFx0ICAgICAgIE5GQ19IQ0lfRVZUX0VORF9PUEVSQVRJT04sIE5VTEwsIDApO1xubmV0L25mYy9oY2kvY29yZS5jLTYwMC1cdGlmIChyIFx1MDAzYyAwKVxuLS1cbm5ldC9uZmMvaGNpL2NvcmUuYz02Mzk9c3RhdGljIGludCBoY2lfc3RhcnRfcG9sbChzdHJ1Y3QgbmZjX2RldiAqbmZjX2Rldixcbi0tXG5uZXQvbmZjL2hjaS9jb3JlLmMtNjQ2LVx0ZWxzZVxubmV0L25mYy9oY2kvY29yZS5jOjY0NzpcdFx0cmV0dXJuIG5mY19oY2lfc2VuZF9ldmVudChoZGV2LCBORkNfSENJX1JGX1JFQURFUl9BX0dBVEUsXG5uZXQvbmZjL2hjaS9jb3JlLmM6NjQ4Olx0XHRcdFx0XHQgIE5GQ19IQ0lfRVZUX1JFQURFUl9SRVFVRVNURUQsXG5uZXQvbmZjL2hjaS9jb3JlLmMtNjQ5LVx0XHRcdFx0XHQgIE5VTEwsIDApO1xuLS1cbm5ldC9uZmMvaGNpL2NvcmUuYz02NTI9c3RhdGljIHZvaWQgaGNpX3N0b3BfcG9sbChzdHJ1Y3QgbmZjX2RldiAqbmZjX2Rldilcbi0tXG5uZXQvbmZjL2hjaS9jb3JlLmMtNjU4LVx0ZWxzZVxubmV0L25mYy9oY2kvY29yZS5jOjY1OTpcdFx0bmZjX2hjaV9zZW5kX2V2ZW50KGhkZXYsIE5GQ19IQ0lfUkZfUkVBREVSX0FfR0FURSxcbm5ldC9uZmMvaGNpL2NvcmUuYzo2NjA6XHRcdFx0XHQgICBORkNfSENJX0VWVF9FTkRfT1BFUkFUSU9OLCBOVUxMLCAwKTtcbm5ldC9uZmMvaGNpL2NvcmUuYy02NjEtfVxuLS1cbm5ldC9uZmMvaGNpL2NvcmUuYz03MjI9c3RhdGljIGludCBoY2lfdHJhbnNjZWl2ZShzdHJ1Y3QgbmZjX2RldiAqbmZjX2Rldiwgc3RydWN0IG5mY190YXJnZXQgKnRhcmdldCxcbi0tXG5uZXQvbmZjL2hjaS9jb3JlLmMtNzMxLVx0c3dpdGNoICh0YXJnZXQtXHUwMDNlaGNpX3JlYWRlcl9nYXRlKSB7XG5uZXQvbmZjL2hjaS9jb3JlLmM6NzMyOlx0Y2FzZSBORkNfSENJX1JGX1JFQURFUl9BX0dBVEU6XG5uZXQvbmZjL2hjaS9jb3JlLmM6NzMzOlx0Y2FzZSBORkNfSENJX1JGX1JFQURFUl9CX0dBVEU6XG5uZXQvbmZjL2hjaS9jb3JlLmMtNzM0LVx0XHRpZiAoaGRldi1cdTAwM2VvcHMtXHUwMDNlaW1fdHJhbnNjZWl2ZSkge1xuLS1cbm5ldC9uZmMvaGNpL2NvcmUuYy03NDctXHRcdHIgPSBuZmNfaGNpX3NlbmRfY21kX2FzeW5jKGhkZXYsIHRhcmdldC1cdTAwM2VoY2lfcmVhZGVyX2dhdGUsXG5uZXQvbmZjL2hjaS9jb3JlLmM6NzQ4Olx0XHRcdFx0XHQgICBORkNfSENJX1dSX1hDSEdfREFUQSwgc2tiLVx1MDAzZWRhdGEsXG5uZXQvbmZjL2hjaS9jb3JlLmMtNzQ5LVx0XHRcdFx0XHQgICBza2ItXHUwMDNlbGVuLCBoY2lfdHJhbnNjZWl2ZV9jYiwgaGRldik7XG4tLVxubmV0L25mYy9oY2kvY29yZS5jPTg1ND1zdGF0aWMgdm9pZCBuZmNfaGNpX3JlY3ZfZnJvbV9sbGMoc3RydWN0IG5mY19oY2lfZGV2ICpoZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9uZmMvaGNpL2NvcmUuYy04NjMtXG5uZXQvbmZjL2hjaS9jb3JlLmM6ODY0Olx0aWYgKCFwc2tiX21heV9wdWxsKHNrYiwgTkZDX0hDSV9IQ1BfUEFDS0VUX0hFQURFUl9MRU4pKSB7XG5uZXQvbmZjL2hjaS9jb3JlLmMtODY1LVx0XHRrZnJlZV9za2Ioc2tiKTtcbi0tXG5uZXQvbmZjL2hjaS9jb3JlLmMtODY5LVx0cGFja2V0ID0gKHN0cnVjdCBoY3BfcGFja2V0ICopc2tiLVx1MDAzZWRhdGE7XG5uZXQvbmZjL2hjaS9jb3JlLmM6ODcwOlx0aWYgKChwYWNrZXQtXHUwMDNlaGVhZGVyIFx1MDAyNiB+TkZDX0hDSV9GUkFHTUVOVCkgPT0gMCkge1xubmV0L25mYy9oY2kvY29yZS5jLTg3MS1cdFx0c2tiX3F1ZXVlX3RhaWwoXHUwMDI2aGRldi1cdTAwM2VyeF9oY3BfZnJhZ3MsIHNrYik7XG4tLVxubmV0L25mYy9oY2kvY29yZS5jLTg3Ni1cdGlmIChza2JfcXVldWVfbGVuKFx1MDAyNmhkZXYtXHUwMDNlcnhfaGNwX2ZyYWdzKSkge1xubmV0L25mYy9oY2kvY29yZS5jOjg3NzpcdFx0cGlwZSA9IHBhY2tldC1cdTAwM2VoZWFkZXIgXHUwMDI2IE5GQ19IQ0lfRlJBR01FTlQ7XG5uZXQvbmZjL2hjaS9jb3JlLmMtODc4LVx0XHRza2JfcXVldWVfdGFpbChcdTAwMjZoZGV2LVx1MDAzZXJ4X2hjcF9mcmFncywgc2tiKTtcbi0tXG5uZXQvbmZjL2hjaS9jb3JlLmMtODgyLVx0XHRcdG1zZ19sZW4gJiM0Mzs9IChmcmFnX3NrYi1cdTAwM2VsZW4gLVxubmV0L25mYy9oY2kvY29yZS5jOjg4MzpcdFx0XHRcdCAgICBORkNfSENJX0hDUF9QQUNLRVRfSEVBREVSX0xFTik7XG5uZXQvbmZjL2hjaS9jb3JlLmMtODg0LVx0XHR9XG5uZXQvbmZjL2hjaS9jb3JlLmMtODg1LVxubmV0L25mYy9oY2kvY29yZS5jOjg4NjpcdFx0aGNwX3NrYiA9IG5mY19hbGxvY19yZWN2X3NrYihORkNfSENJX0hDUF9QQUNLRVRfSEVBREVSX0xFTiAmIzQzO1xubmV0L25mYy9oY2kvY29yZS5jLTg4Ny1cdFx0XHRcdFx0ICAgICBtc2dfbGVuLCBHRlBfS0VSTkVMKTtcbi0tXG5uZXQvbmZjL2hjaS9jb3JlLmMtODk1LVx0XHRza2JfcXVldWVfd2FsayhcdTAwMjZoZGV2LVx1MDAzZXJ4X2hjcF9mcmFncywgZnJhZ19za2IpIHtcbm5ldC9uZmMvaGNpL2NvcmUuYzo4OTY6XHRcdFx0bXNnX2xlbiA9IGZyYWdfc2tiLVx1MDAzZWxlbiAtIE5GQ19IQ0lfSENQX1BBQ0tFVF9IRUFERVJfTEVOO1xubmV0L25mYy9oY2kvY29yZS5jLTg5Ny1cdFx0XHRza2JfcHV0X2RhdGEoaGNwX3NrYixcbm5ldC9uZmMvaGNpL2NvcmUuYzo4OTg6XHRcdFx0XHQgICAgIGZyYWdfc2tiLVx1MDAzZWRhdGEgJiM0MzsgTkZDX0hDSV9IQ1BfUEFDS0VUX0hFQURFUl9MRU4sXG5uZXQvbmZjL2hjaS9jb3JlLmMtODk5LVx0XHRcdFx0ICAgICBtc2dfbGVuKTtcbi0tXG5uZXQvbmZjL2hjaS9jb3JlLmMtOTAzLVx0fSBlbHNlIHtcbm5ldC9uZmMvaGNpL2NvcmUuYzo5MDQ6XHRcdHBhY2tldC1cdTAwM2VoZWFkZXIgXHUwMDI2PSBORkNfSENJX0ZSQUdNRU5UO1xubmV0L25mYy9oY2kvY29yZS5jLTkwNS1cdFx0aGNwX3NrYiA9IHNrYjtcbi0tXG5uZXQvbmZjL2hjaS9jb3JlLmMtOTExLVx0ICovXG5uZXQvbmZjL2hjaS9jb3JlLmM6OTEyOlx0aWYgKCFwc2tiX21heV9wdWxsKGhjcF9za2IsIE5GQ19IQ0lfSENQX0hFQURFUl9MRU4pKSB7XG5uZXQvbmZjL2hjaS9jb3JlLmMtOTEzLVx0XHRrZnJlZV9za2IoaGNwX3NrYik7XG4tLVxubmV0L25mYy9oY2kvY29yZS5jLTkxOC1cdHR5cGUgPSBIQ1BfTVNHX0dFVF9UWVBFKHBhY2tldC1cdTAwM2VtZXNzYWdlLmhlYWRlcik7XG5uZXQvbmZjL2hjaS9jb3JlLmM6OTE5Olx0aWYgKHR5cGUgPT0gTkZDX0hDSV9IQ1BfUkVTUE9OU0UpIHtcbm5ldC9uZmMvaGNpL2NvcmUuYy05MjAtXHRcdHBpcGUgPSBwYWNrZXQtXHUwMDNlaGVhZGVyO1xubmV0L25mYy9oY2kvY29yZS5jLTkyMS1cdFx0aW5zdHJ1Y3Rpb24gPSBIQ1BfTVNHX0dFVF9DTUQocGFja2V0LVx1MDAzZW1lc3NhZ2UuaGVhZGVyKTtcbm5ldC9uZmMvaGNpL2NvcmUuYzo5MjI6XHRcdHNrYl9wdWxsKGhjcF9za2IsIE5GQ19IQ0lfSENQX1BBQ0tFVF9IRUFERVJfTEVOICYjNDM7XG5uZXQvbmZjL2hjaS9jb3JlLmM6OTIzOlx0XHRcdCBORkNfSENJX0hDUF9NRVNTQUdFX0hFQURFUl9MRU4pO1xubmV0L25mYy9oY2kvY29yZS5jLTkyNC1cdFx0bmZjX2hjaV9oY3BfbWVzc2FnZV9yeChoZGV2LCBwaXBlLCB0eXBlLCBpbnN0cnVjdGlvbiwgaGNwX3NrYik7XG4tLVxubmV0L25mYy9oY2kvaGNpLmg9NjA9c3RydWN0IGhjaV9hbGxfcGlwZV9jbGVhcmVkX25vdGkge1xuLS1cbm5ldC9uZmMvaGNpL2hjaS5oLTYzLVxubmV0L25mYy9oY2kvaGNpLmg6NjQ6I2RlZmluZSBORkNfSENJX0ZSQUdNRU5UXHQweDdmXG5uZXQvbmZjL2hjaS9oY2kuaC02NS1cbi0tXG5uZXQvbmZjL2hjaS9oY2kuaD03Nj12b2lkIG5mY19oY2lfaGNwX21lc3NhZ2Vfcngoc3RydWN0IG5mY19oY2lfZGV2ICpoZGV2LCB1OCBwaXBlLCB1OCB0eXBlLFxuLS1cbm5ldC9uZmMvaGNpL2hjaS5oLTc5LS8qIEhDUCBoZWFkZXJzICovXG5uZXQvbmZjL2hjaS9oY2kuaDo4MDojZGVmaW5lIE5GQ19IQ0lfSENQX1BBQ0tFVF9IRUFERVJfTEVOXHQxXG5uZXQvbmZjL2hjaS9oY2kuaDo4MTojZGVmaW5lIE5GQ19IQ0lfSENQX01FU1NBR0VfSEVBREVSX0xFTlx0MVxubmV0L25mYy9oY2kvaGNpLmg6ODI6I2RlZmluZSBORkNfSENJX0hDUF9IRUFERVJfTEVOXHRcdDJcbm5ldC9uZmMvaGNpL2hjaS5oLTgzLVxubmV0L25mYy9oY2kvaGNpLmgtODQtLyogSENQIHR5cGVzICovXG5uZXQvbmZjL2hjaS9oY2kuaDo4NTojZGVmaW5lIE5GQ19IQ0lfSENQX0NPTU1BTkRcdDB4MDBcbm5ldC9uZmMvaGNpL2hjaS5oOjg2OiNkZWZpbmUgTkZDX0hDSV9IQ1BfRVZFTlRcdDB4MDFcbm5ldC9uZmMvaGNpL2hjaS5oOjg3OiNkZWZpbmUgTkZDX0hDSV9IQ1BfUkVTUE9OU0VcdDB4MDJcbm5ldC9uZmMvaGNpL2hjaS5oLTg4LVxubmV0L25mYy9oY2kvaGNpLmgtODktLyogR2VuZXJpYyBjb21tYW5kcyAqL1xubmV0L25mYy9oY2kvaGNpLmg6OTA6I2RlZmluZSBORkNfSENJX0FOWV9TRVRfUEFSQU1FVEVSXHQweDAxXG5uZXQvbmZjL2hjaS9oY2kuaDo5MTojZGVmaW5lIE5GQ19IQ0lfQU5ZX0dFVF9QQVJBTUVURVJcdDB4MDJcbm5ldC9uZmMvaGNpL2hjaS5oOjkyOiNkZWZpbmUgTkZDX0hDSV9BTllfT1BFTl9QSVBFXHRcdDB4MDNcbm5ldC9uZmMvaGNpL2hjaS5oOjkzOiNkZWZpbmUgTkZDX0hDSV9BTllfQ0xPU0VfUElQRVx0XHQweDA0XG5uZXQvbmZjL2hjaS9oY2kuaC05NC1cbm5ldC9uZmMvaGNpL2hjaS5oLTk1LS8qIFJlYWRlciBSRiBjb21tYW5kcyAqL1xubmV0L25mYy9oY2kvaGNpLmg6OTY6I2RlZmluZSBORkNfSENJX1dSX1hDSEdfREFUQVx0XHQweDEwXG5uZXQvbmZjL2hjaS9oY2kuaC05Ny1cbm5ldC9uZmMvaGNpL2hjaS5oLTk4LS8qIEFkbWluIGNvbW1hbmRzICovXG5uZXQvbmZjL2hjaS9oY2kuaDo5OTojZGVmaW5lIE5GQ19IQ0lfQURNX0NSRUFURV9QSVBFXHRcdFx0MHgxMFxubmV0L25mYy9oY2kvaGNpLmg6MTAwOiNkZWZpbmUgTkZDX0hDSV9BRE1fREVMRVRFX1BJUEVcdFx0XHQweDExXG5uZXQvbmZjL2hjaS9oY2kuaDoxMDE6I2RlZmluZSBORkNfSENJX0FETV9OT1RJRllfUElQRV9DUkVBVEVEXHRcdDB4MTJcbm5ldC9uZmMvaGNpL2hjaS5oOjEwMjojZGVmaW5lIE5GQ19IQ0lfQURNX05PVElGWV9QSVBFX0RFTEVURURcdFx0MHgxM1xubmV0L25mYy9oY2kvaGNpLmg6MTAzOiNkZWZpbmUgTkZDX0hDSV9BRE1fQ0xFQVJfQUxMX1BJUEVcdFx0MHgxNFxubmV0L25mYy9oY2kvaGNpLmg6MTA0OiNkZWZpbmUgTkZDX0hDSV9BRE1fTk9USUZZX0FMTF9QSVBFX0NMRUFSRURcdDB4MTVcbm5ldC9uZmMvaGNpL2hjaS5oLTEwNS1cbm5ldC9uZmMvaGNpL2hjaS5oLTEwNi0vKiBHZW5lcmljIHJlc3BvbnNlcyAqL1xubmV0L25mYy9oY2kvaGNpLmg6MTA3OiNkZWZpbmUgTkZDX0hDSV9BTllfT0tcdFx0XHRcdDB4MDBcbm5ldC9uZmMvaGNpL2hjaS5oOjEwODojZGVmaW5lIE5GQ19IQ0lfQU5ZX0VfTk9UX0NPTk5FQ1RFRFx0XHQweDAxXG5uZXQvbmZjL2hjaS9oY2kuaDoxMDk6I2RlZmluZSBORkNfSENJX0FOWV9FX0NNRF9QQVJfVU5LTk9XTlx0XHQweDAyXG5uZXQvbmZjL2hjaS9oY2kuaDoxMTA6I2RlZmluZSBORkNfSENJX0FOWV9FX05PS1x0XHRcdDB4MDNcbm5ldC9uZmMvaGNpL2hjaS5oOjExMTojZGVmaW5lIE5GQ19IQ0lfQU5ZX0VfUElQRVNfRlVMTFx0XHQweDA0XG5uZXQvbmZjL2hjaS9oY2kuaDoxMTI6I2RlZmluZSBORkNfSENJX0FOWV9FX1JFR19QQVJfVU5LTk9XTlx0XHQweDA1XG5uZXQvbmZjL2hjaS9oY2kuaDoxMTM6I2RlZmluZSBORkNfSENJX0FOWV9FX1BJUEVfTk9UX09QRU5FRFx0XHQweDA2XG5uZXQvbmZjL2hjaS9oY2kuaDoxMTQ6I2RlZmluZSBORkNfSENJX0FOWV9FX0NNRF9OT1RfU1VQUE9SVEVEXHRcdDB4MDdcbm5ldC9uZmMvaGNpL2hjaS5oOjExNTojZGVmaW5lIE5GQ19IQ0lfQU5ZX0VfSU5ISUJJVEVEXHRcdFx0MHgwOFxubmV0L25mYy9oY2kvaGNpLmg6MTE2OiNkZWZpbmUgTkZDX0hDSV9BTllfRV9USU1FT1VUXHRcdFx0MHgwOVxubmV0L25mYy9oY2kvaGNpLmg6MTE3OiNkZWZpbmUgTkZDX0hDSV9BTllfRV9SRUdfQUNDRVNTX0RFTklFRFx0XHQweDBhXG5uZXQvbmZjL2hjaS9oY2kuaDoxMTg6I2RlZmluZSBORkNfSENJX0FOWV9FX1BJUEVfQUNDRVNTX0RFTklFRFx0MHgwYlxubmV0L25mYy9oY2kvaGNpLmgtMTE5LVxuLS1cbm5ldC9uZmMvaGNpL2hjcC5jPTIxPWludCBuZmNfaGNpX2hjcF9tZXNzYWdlX3R4KHN0cnVjdCBuZmNfaGNpX2RldiAqaGRldiwgdTggcGlwZSxcbi0tXG5uZXQvbmZjL2hjaS9oY3AuYy0zOC1cdHNrYl9xdWV1ZV9oZWFkX2luaXQoXHUwMDI2Y21kLVx1MDAzZW1zZ19mcmFncyk7XG5uZXQvbmZjL2hjaS9oY3AuYzozOTpcdGNtZC1cdTAwM2V3YWl0X3Jlc3BvbnNlID0gKHR5cGUgPT0gTkZDX0hDSV9IQ1BfQ09NTUFORCkgPyB0cnVlIDogZmFsc2U7XG5uZXQvbmZjL2hjaS9oY3AuYy00MC1cdGNtZC1cdTAwM2VjYiA9IGNiO1xuLS1cbm5ldC9uZmMvaGNpL2hjcC5jLTQ5LVxubmV0L25mYy9oY2kvaGNwLmM6NTA6XHRcdGlmIChORkNfSENJX0hDUF9QQUNLRVRfSEVBREVSX0xFTiAmIzQzOyBoY2lfbGVuIFx1MDAzYz1cbm5ldC9uZmMvaGNpL2hjcC5jLTUxLVx0XHQgICAgaGRldi1cdTAwM2VtYXhfZGF0YV9saW5rX3BheWxvYWQpXG4tLVxubmV0L25mYy9oY2kvaGNwLmMtNTQtXHRcdFx0ZGF0YV9saW5rX2xlbiA9IGhkZXYtXHUwMDNlbWF4X2RhdGFfbGlua19wYXlsb2FkIC1cbm5ldC9uZmMvaGNpL2hjcC5jOjU1Olx0XHRcdFx0XHRORkNfSENJX0hDUF9QQUNLRVRfSEVBREVSX0xFTjtcbm5ldC9uZmMvaGNpL2hjcC5jLTU2LVxubmV0L25mYy9oY2kvaGNwLmM6NTc6XHRcdHNrYl9sZW4gPSBuZGV2LVx1MDAzZXR4X2hlYWRyb29tICYjNDM7IE5GQ19IQ0lfSENQX1BBQ0tFVF9IRUFERVJfTEVOICYjNDM7XG5uZXQvbmZjL2hjaS9oY3AuYy01OC1cdFx0XHQgIGRhdGFfbGlua19sZW4gJiM0MzsgbmRldi1cdTAwM2V0eF90YWlscm9vbTtcbi0tXG5uZXQvbmZjL2hjaS9oY3AuYy02Ny1cbm5ldC9uZmMvaGNpL2hjcC5jOjY4Olx0XHRza2JfcHV0KHNrYiwgTkZDX0hDSV9IQ1BfUEFDS0VUX0hFQURFUl9MRU4gJiM0MzsgZGF0YV9saW5rX2xlbik7XG5uZXQvbmZjL2hjaS9oY3AuYy02OS1cbi0tXG5uZXQvbmZjL2hjaS9oY3AuYy04NS1cdFx0aWYgKGhjaV9sZW4gPT0gMClcbm5ldC9uZmMvaGNpL2hjcC5jOjg2Olx0XHRcdHBhY2tldC1cdTAwM2VoZWFkZXIgfD0gfk5GQ19IQ0lfRlJBR01FTlQ7XG5uZXQvbmZjL2hjaS9oY3AuYy04Ny1cbi0tXG5uZXQvbmZjL2hjaS9oY3AuYz0xMTc9dm9pZCBuZmNfaGNpX2hjcF9tZXNzYWdlX3J4KHN0cnVjdCBuZmNfaGNpX2RldiAqaGRldiwgdTggcGlwZSwgdTggdHlwZSxcbi0tXG5uZXQvbmZjL2hjaS9oY3AuYy0xMjAtXHRzd2l0Y2ggKHR5cGUpIHtcbm5ldC9uZmMvaGNpL2hjcC5jOjEyMTpcdGNhc2UgTkZDX0hDSV9IQ1BfUkVTUE9OU0U6XG5uZXQvbmZjL2hjaS9oY3AuYy0xMjItXHRcdG5mY19oY2lfcmVzcF9yZWNlaXZlZChoZGV2LCBpbnN0cnVjdGlvbiwgc2tiKTtcbm5ldC9uZmMvaGNpL2hjcC5jLTEyMy1cdFx0YnJlYWs7XG5uZXQvbmZjL2hjaS9oY3AuYzoxMjQ6XHRjYXNlIE5GQ19IQ0lfSENQX0NPTU1BTkQ6XG5uZXQvbmZjL2hjaS9oY3AuYy0xMjUtXHRcdG5mY19oY2lfY21kX3JlY2VpdmVkKGhkZXYsIHBpcGUsIGluc3RydWN0aW9uLCBza2IpO1xubmV0L25mYy9oY2kvaGNwLmMtMTI2LVx0XHRicmVhaztcbm5ldC9uZmMvaGNpL2hjcC5jOjEyNzpcdGNhc2UgTkZDX0hDSV9IQ1BfRVZFTlQ6XG5uZXQvbmZjL2hjaS9oY3AuYy0xMjgtXHRcdG5mY19oY2lfZXZlbnRfcmVjZWl2ZWQoaGRldiwgcGlwZSwgaW5zdHJ1Y3Rpb24sIHNrYik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDA5OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxNzA2CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhlIGV4cGVydDoKCioqTmF2aWdhdGluZyB0aGUgTkZDIFN1YnN5c3RlbXMqKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSBuZWVkIHRvIGNsYXJpZnkgc29tZXRoaW5nIGluIG15IGhlYWQuIEkgaW5pdGlhbGx5IGp1bXBlZCB0byB0aGUgY29uY2x1c2lvbiB0aGF0IGBORkNfSENJYCBhbmQgYE5GQ19OQ0lgIHdlcmUgdGhlIHNhbWUgdGhpbmcsIGJ1dCBpdCBqdXN0IGhpdCBtZSDigJMgdGhleSYjMzk7cmUgZGlzdGluY3Qgc3Vic3lzdGVtcy4gVGhlIHBhdGNoIEkmIzM5O20gZXhhbWluaW5nIGlzIHNwZWNpZmljYWxseSB0b3VjaGluZyBgbmV0L25mYy9uY2kvaGNpLmNgLCBhbmQgdGhhdCBsaXZlcyBmaXJtbHkgd2l0aGluIHRoZSBgTkZDX05DSWAgcmVhbG0uIFRvIGNvbmZpcm0gdGhpcyBpc24mIzM5O3QganVzdCBhIG1lbnRhbCBtb2RlbCBJJiMzOTt2ZSBtYWRlIHVwLCBsZXQgbWUgZG91YmxlLWNoZWNrIHRoZSBgbmV0L25mYy9uY2kvTWFrZWZpbGVgIGFuZCBlbnN1cmUgbXkgYXNzdW1wdGlvbnMgYXJlIHNvdW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAwOToyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtoY2kmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmZjL25jaS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25mYy9uY2kvTWFrZWZpbGU9Nj1vYmotJChDT05GSUdfTkZDX05DSSkgJiM0Mzs9IG5jaS5vXG5uZXQvbmZjL25jaS9NYWtlZmlsZS03LVxubmV0L25mYy9uY2kvTWFrZWZpbGU6ODpuY2ktb2JqcyA6PSBjb3JlLm8gZGF0YS5vIGxpYi5vIG50Zi5vIHJzcC5vIGhjaS5vXG5uZXQvbmZjL25jaS9NYWtlZmlsZS05LVxuLS1cbm5ldC9uZmMvbmNpL2NvcmUuYy0xMS0gKiAgQWNrbm93bGVkZ2VtZW50czpcbm5ldC9uZmMvbmNpL2NvcmUuYzoxMjogKiAgVGhpcyBmaWxlIGlzIGJhc2VkIG9uIGhjaV9jb3JlLmMsIHdoaWNoIHdhcyB3cml0dGVuXG5uZXQvbmZjL25jaS9jb3JlLmMtMTMtICogIGJ5IE1heGltIEtyYXNueWFuc2t5LlxuLS1cbm5ldC9uZmMvbmNpL2NvcmUuYz0xMjA5PXN0cnVjdCBuY2lfZGV2ICpuY2lfYWxsb2NhdGVfZGV2aWNlKGNvbnN0IHN0cnVjdCBuY2lfb3BzICpvcHMsXG4tLVxubmV0L25mYy9uY2kvY29yZS5jLTEyNDUtXG5uZXQvbmZjL25jaS9jb3JlLmM6MTI0NjpcdG5kZXYtXHUwMDNlaGNpX2RldiA9IG5jaV9oY2lfYWxsb2NhdGUobmRldik7XG5uZXQvbmZjL25jaS9jb3JlLmM6MTI0NzpcdGlmICghbmRldi1cdTAwM2VoY2lfZGV2KVxubmV0L25mYy9uY2kvY29yZS5jLTEyNDgtXHRcdGdvdG8gZnJlZV9uZmM7XG4tLVxubmV0L25mYy9uY2kvY29yZS5jPTEyNjc9dm9pZCBuY2lfZnJlZV9kZXZpY2Uoc3RydWN0IG5jaV9kZXYgKm5kZXYpXG4tLVxubmV0L25mYy9uY2kvY29yZS5jLTEyNjktXHRuZmNfZnJlZV9kZXZpY2UobmRldi1cdTAwM2VuZmNfZGV2KTtcbm5ldC9uZmMvbmNpL2NvcmUuYzoxMjcwOlx0bmNpX2hjaV9kZWFsbG9jYXRlKG5kZXYpO1xubmV0L25mYy9uY2kvY29yZS5jLTEyNzEtXG4tLVxubmV0L25mYy9uY2kvY29yZS5jPTEzNTI9dm9pZCBuY2lfdW5yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IG5jaV9kZXYgKm5kZXYpXG4tLVxubmV0L25mYy9uY2kvY29yZS5jLTEzNzQtXHRcdFx0bmRldi1cdTAwM2VyZl9jb25uX2luZm8gPSBOVUxMO1xubmV0L25mYy9uY2kvY29yZS5jOjEzNzU6XHRcdGlmIChjb25uX2luZm8gPT0gbmRldi1cdTAwM2VoY2lfZGV2LVx1MDAzZWNvbm5faW5mbylcbm5ldC9uZmMvbmNpL2NvcmUuYzoxMzc2Olx0XHRcdG5kZXYtXHUwMDNlaGNpX2Rldi1cdTAwM2Vjb25uX2luZm8gPSBOVUxMO1xubmV0L25mYy9uY2kvY29yZS5jLTEzNzctXHRcdC8qIGNvbm5faW5mbyBpcyBhbGxvY2F0ZWQgd2l0aCBkZXZtX2t6YWxsb2MgKi9cbi0tXG5uZXQvbmZjL25jaS9oY2kuYz0xOT1zdHJ1Y3QgbmNpX2RhdGEge1xuLS1cbm5ldC9uZmMvbmNpL2hjaS5jLTI2LVxubmV0L25mYy9uY2kvaGNpLmM6Mjc6c3RydWN0IG5jaV9oY2lfY3JlYXRlX3BpcGVfcGFyYW1zIHtcbm5ldC9uZmMvbmNpL2hjaS5jLTI4LVx0dTggc3JjX2dhdGU7XG4tLVxubmV0L25mYy9uY2kvaGNpLmMtMzItXG5uZXQvbmZjL25jaS9oY2kuYzozMzpzdHJ1Y3QgbmNpX2hjaV9jcmVhdGVfcGlwZV9yZXNwIHtcbm5ldC9uZmMvbmNpL2hjaS5jLTM0LVx0dTggc3JjX2hvc3Q7XG4tLVxubmV0L25mYy9uY2kvaGNpLmMtNDAtXG5uZXQvbmZjL25jaS9oY2kuYzo0MTpzdHJ1Y3QgbmNpX2hjaV9kZWxldGVfcGlwZV9ub3RpIHtcbm5ldC9uZmMvbmNpL2hjaS5jLTQyLVx0dTggcGlwZTtcbi0tXG5uZXQvbmZjL25jaS9oY2kuYy00NC1cbm5ldC9uZmMvbmNpL2hjaS5jOjQ1OnN0cnVjdCBuY2lfaGNpX2FsbF9waXBlX2NsZWFyZWRfbm90aSB7XG5uZXQvbmZjL25jaS9oY2kuYy00Ni1cdHU4IGhvc3Q7XG4tLVxubmV0L25mYy9uY2kvaGNpLmM9NTQ9c3RydWN0IG5jaV9oY3BfcGFja2V0IHtcbi0tXG5uZXQvbmZjL25jaS9oY2kuYy05NS1cbm5ldC9uZmMvbmNpL2hjaS5jOjk2OnN0YXRpYyBpbnQgbmNpX2hjaV9yZXN1bHRfdG9fZXJybm8odTggcmVzdWx0KVxubmV0L25mYy9uY2kvaGNpLmMtOTcte1xuLS1cbm5ldC9uZmMvbmNpL2hjaS5jLTExMC0vKiBIQ0kgY29yZSAqL1xubmV0L25mYy9uY2kvaGNpLmM6MTExOnN0YXRpYyB2b2lkIG5jaV9oY2lfcmVzZXRfcGlwZXMoc3RydWN0IG5jaV9oY2lfZGV2ICpoZGV2KVxubmV0L25mYy9uY2kvaGNpLmMtMTEyLXtcbi0tXG5uZXQvbmZjL25jaS9oY2kuYy0xMjEtXG5uZXQvbmZjL25jaS9oY2kuYzoxMjI6c3RhdGljIHZvaWQgbmNpX2hjaV9yZXNldF9waXBlc19wZXJfaG9zdChzdHJ1Y3QgbmNpX2RldiAqbmRldiwgdTggaG9zdClcbm5ldC9uZmMvbmNpL2hjaS5jLTEyMy17XG4tLVxubmV0L25mYy9uY2kvaGNpLmMtMTI2LVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTkNJX0hDSV9NQVhfUElQRVM7IGkmIzQzOyYjNDM7KSB7XG5uZXQvbmZjL25jaS9oY2kuYzoxMjc6XHRcdGlmIChuZGV2LVx1MDAzZWhjaV9kZXYtXHUwMDNlcGlwZXNbaV0uaG9zdCA9PSBob3N0KSB7XG5uZXQvbmZjL25jaS9oY2kuYzoxMjg6XHRcdFx0bmRldi1cdTAwM2VoY2lfZGV2LVx1MDAzZXBpcGVzW2ldLmdhdGUgPSBOQ0lfSENJX0lOVkFMSURfR0FURTtcbm5ldC9uZmMvbmNpL2hjaS5jOjEyOTpcdFx0XHRuZGV2LVx1MDAzZWhjaV9kZXYtXHUwMDNlcGlwZXNbaV0uaG9zdCA9IE5DSV9IQ0lfSU5WQUxJRF9IT1NUO1xubmV0L25mYy9uY2kvaGNpLmMtMTMwLVx0XHR9XG4tLVxubmV0L25mYy9uY2kvaGNpLmMtMTQxLSAqL1xubmV0L25mYy9uY2kvaGNpLmM6MTQyOnN0YXRpYyBpbnQgbmNpX2hjaV9zZW5kX2RhdGEoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHU4IHBpcGUsXG5uZXQvbmZjL25jaS9oY2kuYy0xNDMtXHRcdFx0ICAgICBjb25zdCB1OCBkYXRhX3R5cGUsIGNvbnN0IHU4ICpkYXRhLFxuLS1cbm5ldC9uZmMvbmNpL2hjaS5jLTE1My1cdHNwaW5fbG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbm5ldC9uZmMvbmNpL2hjaS5jOjE1NDpcdGNvbm5faW5mbyA9IG5kZXYtXHUwMDNlaGNpX2Rldi1cdTAwM2Vjb25uX2luZm87XG5uZXQvbmZjL25jaS9oY2kuYy0xNTUtXHRpZiAoIWNvbm5faW5mbykge1xuLS1cbm5ldC9uZmMvbmNpL2hjaS5jLTIwNC1cbm5ldC9uZmMvbmNpL2hjaS5jOjIwNTpzdGF0aWMgdm9pZCBuY2lfaGNpX3NlbmRfZGF0YV9yZXEoc3RydWN0IG5jaV9kZXYgKm5kZXYsIGNvbnN0IHZvaWQgKm9wdClcbm5ldC9uZmMvbmNpL2hjaS5jLTIwNi17XG4tLVxubmV0L25mYy9uY2kvaGNpLmMtMjA4LVxubmV0L25mYy9uY2kvaGNpLmM6MjA5Olx0bmNpX2hjaV9zZW5kX2RhdGEobmRldiwgZGF0YS1cdTAwM2VwaXBlLCBkYXRhLVx1MDAzZWNtZCxcbm5ldC9uZmMvbmNpL2hjaS5jLTIxMC1cdFx0XHQgIGRhdGEtXHUwMDNlZGF0YSwgZGF0YS1cdTAwM2VkYXRhX2xlbik7XG4tLVxubmV0L25mYy9uY2kvaGNpLmMtMjEyLVxubmV0L25mYy9uY2kvaGNpLmM6MjEzOmludCBuY2lfaGNpX3NlbmRfZXZlbnQoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHU4IGdhdGUsIHU4IGV2ZW50LFxubmV0L25mYy9uY2kvaGNpLmMtMjE0LVx0XHQgICAgICAgY29uc3QgdTggKnBhcmFtLCBzaXplX3QgcGFyYW1fbGVuKVxubmV0L25mYy9uY2kvaGNpLmMtMjE1LXtcbm5ldC9uZmMvbmNpL2hjaS5jOjIxNjpcdHU4IHBpcGUgPSBuZGV2LVx1MDAzZWhjaV9kZXYtXHUwMDNlZ2F0ZTJwaXBlW2dhdGVdO1xubmV0L25mYy9uY2kvaGNpLmMtMjE3LVxuLS1cbm5ldC9uZmMvbmNpL2hjaS5jLTIyMC1cbm5ldC9uZmMvbmNpL2hjaS5jOjIyMTpcdHJldHVybiBuY2lfaGNpX3NlbmRfZGF0YShuZGV2LCBwaXBlLFxubmV0L25mYy9uY2kvaGNpLmMtMjIyLVx0XHRcdE5DSV9IQ1BfSEVBREVSKE5DSV9IQ0lfSENQX0VWRU5ULCBldmVudCksXG4tLVxubmV0L25mYy9uY2kvaGNpLmMtMjI0LX1cbm5ldC9uZmMvbmNpL2hjaS5jOjIyNTpFWFBPUlRfU1lNQk9MKG5jaV9oY2lfc2VuZF9ldmVudCk7XG5uZXQvbmZjL25jaS9oY2kuYy0yMjYtXG5uZXQvbmZjL25jaS9oY2kuYzoyMjc6aW50IG5jaV9oY2lfc2VuZF9jbWQoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHU4IGdhdGUsIHU4IGNtZCxcbm5ldC9uZmMvbmNpL2hjaS5jLTIyOC1cdFx0ICAgICBjb25zdCB1OCAqcGFyYW0sIHNpemVfdCBwYXJhbV9sZW4sXG4tLVxubmV0L25mYy9uY2kvaGNpLmMtMjM1LVx0aW50IHI7XG5uZXQvbmZjL25jaS9oY2kuYzoyMzY6XHR1OCBwaXBlID0gbmRldi1cdTAwM2VoY2lfZGV2LVx1MDAzZWdhdGUycGlwZVtnYXRlXTtcbm5ldC9uZmMvbmNpL2hjaS5jLTIzNy1cbi0tXG5uZXQvbmZjL25jaS9oY2kuYy0yNDEtXHRzcGluX2xvY2tfYmgoXHUwMDI2bmRldi1cdTAwM2Vjb25uX2luZm9fbG9jayk7XG5uZXQvbmZjL25jaS9oY2kuYzoyNDI6XHRjb25uX2luZm8gPSBuZGV2LVx1MDAzZWhjaV9kZXYtXHUwMDNlY29ubl9pbmZvO1xubmV0L25mYy9uY2kvaGNpLmMtMjQzLVx0aWYgKCFjb25uX2luZm8pIHtcbi0tXG5uZXQvbmZjL25jaS9oY2kuYy0yNTQtXG5uZXQvbmZjL25jaS9oY2kuYzoyNTU6XHRyID0gbmNpX3JlcXVlc3QobmRldiwgbmNpX2hjaV9zZW5kX2RhdGFfcmVxLCBcdTAwMjZkYXRhLFxubmV0L25mYy9uY2kvaGNpLmMtMjU2LVx0XHRcdG1zZWNzX3RvX2ppZmZpZXMoTkNJX0RBVEFfVElNRU9VVCkpO1xuLS1cbm5ldC9uZmMvbmNpL2hjaS5jLTI1OC1cdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xubmV0L25mYy9uY2kvaGNpLmM6MjU5Olx0XHRjb25uX2luZm8gPSBuZGV2LVx1MDAzZWhjaV9kZXYtXHUwMDNlY29ubl9pbmZvO1xubmV0L25mYy9uY2kvaGNpLmMtMjYwLVx0XHRyeF9za2IgPSBjb25uX2luZm8gPyBjb25uX2luZm8tXHUwMDNlcnhfc2tiIDogTlVMTDtcbi0tXG5uZXQvbmZjL25jaS9oY2kuYy0yNjYtXHRcdG1lc3NhZ2UgPSAoc3RydWN0IG5jaV9oY3BfbWVzc2FnZSAqKXJ4X3NrYi1cdTAwM2VkYXRhO1xubmV0L25mYy9uY2kvaGNpLmM6MjY3Olx0XHRyID0gbmNpX2hjaV9yZXN1bHRfdG9fZXJybm8oXG5uZXQvbmZjL25jaS9oY2kuYy0yNjgtXHRcdFx0TkNJX0hDUF9NU0dfR0VUX0NNRChtZXNzYWdlLVx1MDAzZWhlYWRlcikpO1xuLS1cbm5ldC9uZmMvbmNpL2hjaS5jLTI3Ny19XG5uZXQvbmZjL25jaS9oY2kuYzoyNzg6RVhQT1JUX1NZTUJPTChuY2lfaGNpX3NlbmRfY21kKTtcbm5ldC9uZmMvbmNpL2hjaS5jLTI3OS1cbm5ldC9uZmMvbmNpL2hjaS5jOjI4MDppbnQgbmNpX2hjaV9jbGVhcl9hbGxfcGlwZXMoc3RydWN0IG5jaV9kZXYgKm5kZXYpXG5uZXQvbmZjL25jaS9oY2kuYy0yODEte1xuLS1cbm5ldC9uZmMvbmNpL2hjaS5jLTI4My1cbm5ldC9uZmMvbmNpL2hjaS5jOjI4NDpcdHIgPSBuY2lfaGNpX3NlbmRfY21kKG5kZXYsIE5DSV9IQ0lfQURNSU5fR0FURSxcbm5ldC9uZmMvbmNpL2hjaS5jLTI4NS1cdFx0XHQgICAgIE5DSV9IQ0lfQURNX0NMRUFSX0FMTF9QSVBFLCBOVUxMLCAwLCBOVUxMKTtcbi0tXG5uZXQvbmZjL25jaS9oY2kuYy0yODgtXG5uZXQvbmZjL25jaS9oY2kuYzoyODk6XHRuY2lfaGNpX3Jlc2V0X3BpcGVzKG5kZXYtXHUwMDNlaGNpX2Rldik7XG5uZXQvbmZjL25jaS9oY2kuYy0yOTAtXHRyZXR1cm4gcjtcbm5ldC9uZmMvbmNpL2hjaS5jLTI5MS19XG5uZXQvbmZjL25jaS9oY2kuYzoyOTI6RVhQT1JUX1NZTUJPTChuY2lfaGNpX2NsZWFyX2FsbF9waXBlcyk7XG5uZXQvbmZjL25jaS9oY2kuYy0yOTMtXG5uZXQvbmZjL25jaS9oY2kuYzoyOTQ6c3RhdGljIHZvaWQgbmNpX2hjaV9ldmVudF9yZWNlaXZlZChzdHJ1Y3QgbmNpX2RldiAqbmRldiwgdTggcGlwZSxcbm5ldC9uZmMvbmNpL2hjaS5jLTI5NS1cdFx0XHRcdCAgIHU4IGV2ZW50LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L25mYy9uY2kvaGNpLmMtMjk2LXtcbm5ldC9uZmMvbmNpL2hjaS5jOjI5NzpcdGlmIChuZGV2LVx1MDAzZW9wcy1cdTAwM2VoY2lfZXZlbnRfcmVjZWl2ZWQpXG5uZXQvbmZjL25jaS9oY2kuYzoyOTg6XHRcdG5kZXYtXHUwMDNlb3BzLVx1MDAzZWhjaV9ldmVudF9yZWNlaXZlZChuZGV2LCBwaXBlLCBldmVudCwgc2tiKTtcbm5ldC9uZmMvbmNpL2hjaS5jLTI5OS19XG5uZXQvbmZjL25jaS9oY2kuYy0zMDAtXG5uZXQvbmZjL25jaS9oY2kuYzozMDE6c3RhdGljIHZvaWQgbmNpX2hjaV9jbWRfcmVjZWl2ZWQoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHU4IHBpcGUsXG5uZXQvbmZjL25jaS9oY2kuYy0zMDItXHRcdFx0XHQgdTggY21kLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L25mYy9uY2kvaGNpLmMtMzAzLXtcbm5ldC9uZmMvbmNpL2hjaS5jOjMwNDpcdHU4IGdhdGUgPSBuZGV2LVx1MDAzZWhjaV9kZXYtXHUwMDNlcGlwZXNbcGlwZV0uZ2F0ZTtcbm5ldC9uZmMvbmNpL2hjaS5jLTMwNS1cdHU4IHN0YXR1cyA9IE5DSV9IQ0lfQU5ZX09LIHwgfk5DSV9IQ0lfRlJBR01FTlQ7XG5uZXQvbmZjL25jaS9oY2kuYy0zMDYtXHR1OCBkZXN0X2dhdGUsIG5ld19waXBlO1xubmV0L25mYy9uY2kvaGNpLmM6MzA3Olx0c3RydWN0IG5jaV9oY2lfY3JlYXRlX3BpcGVfcmVzcCAqY3JlYXRlX2luZm87XG5uZXQvbmZjL25jaS9oY2kuYzozMDg6XHRzdHJ1Y3QgbmNpX2hjaV9kZWxldGVfcGlwZV9ub3RpICpkZWxldGVfaW5mbztcbm5ldC9uZmMvbmNpL2hjaS5jOjMwOTpcdHN0cnVjdCBuY2lfaGNpX2FsbF9waXBlX2NsZWFyZWRfbm90aSAqY2xlYXJlZF9pbmZvO1xubmV0L25mYy9uY2kvaGNpLmMtMzEwLVxuLS1cbm5ldC9uZmMvbmNpL2hjaS5jLTMxOC1cdFx0fVxubmV0L25mYy9uY2kvaGNpLmM6MzE5Olx0XHRjcmVhdGVfaW5mbyA9IChzdHJ1Y3QgbmNpX2hjaV9jcmVhdGVfcGlwZV9yZXNwICopc2tiLVx1MDAzZWRhdGE7XG5uZXQvbmZjL25jaS9oY2kuYy0zMjAtXHRcdGRlc3RfZ2F0ZSA9IGNyZWF0ZV9pbmZvLVx1MDAzZWRlc3RfZ2F0ZTtcbi0tXG5uZXQvbmZjL25jaS9oY2kuYy0zMzEtXHRcdCAqL1xubmV0L25mYy9uY2kvaGNpLmM6MzMyOlx0XHRuZGV2LVx1MDAzZWhjaV9kZXYtXHUwMDNlZ2F0ZTJwaXBlW2Rlc3RfZ2F0ZV0gPSBuZXdfcGlwZTtcbm5ldC9uZmMvbmNpL2hjaS5jOjMzMzpcdFx0bmRldi1cdTAwM2VoY2lfZGV2LVx1MDAzZXBpcGVzW25ld19waXBlXS5nYXRlID0gZGVzdF9nYXRlO1xubmV0L25mYy9uY2kvaGNpLmM6MzM0Olx0XHRuZGV2LVx1MDAzZWhjaV9kZXYtXHUwMDNlcGlwZXNbbmV3X3BpcGVdLmhvc3QgPVxubmV0L25mYy9uY2kvaGNpLmMtMzM1LVx0XHRcdFx0XHRcdGNyZWF0ZV9pbmZvLVx1MDAzZXNyY19ob3N0O1xuLS1cbm5ldC9uZmMvbmNpL2hjaS5jLTM0OC1cdFx0fVxubmV0L25mYy9uY2kvaGNpLmM6MzQ5Olx0XHRkZWxldGVfaW5mbyA9IChzdHJ1Y3QgbmNpX2hjaV9kZWxldGVfcGlwZV9ub3RpICopc2tiLVx1MDAzZWRhdGE7XG5uZXQvbmZjL25jaS9oY2kuYy0zNTAtXHRcdGlmIChkZWxldGVfaW5mby1cdTAwM2VwaXBlIFx1MDAzZT0gTkNJX0hDSV9NQVhfUElQRVMpIHtcbi0tXG5uZXQvbmZjL25jaS9oY2kuYy0zNTQtXG5uZXQvbmZjL25jaS9oY2kuYzozNTU6XHRcdG5kZXYtXHUwMDNlaGNpX2Rldi1cdTAwM2VwaXBlc1tkZWxldGVfaW5mby1cdTAwM2VwaXBlXS5nYXRlID1cbm5ldC9uZmMvbmNpL2hjaS5jLTM1Ni1cdFx0XHRcdFx0XHROQ0lfSENJX0lOVkFMSURfR0FURTtcbm5ldC9uZmMvbmNpL2hjaS5jOjM1NzpcdFx0bmRldi1cdTAwM2VoY2lfZGV2LVx1MDAzZXBpcGVzW2RlbGV0ZV9pbmZvLVx1MDAzZXBpcGVdLmhvc3QgPVxubmV0L25mYy9uY2kvaGNpLmMtMzU4LVx0XHRcdFx0XHRcdE5DSV9IQ0lfSU5WQUxJRF9IT1NUO1xuLS1cbm5ldC9uZmMvbmNpL2hjaS5jLTM2Ni1cdFx0Y2xlYXJlZF9pbmZvID1cbm5ldC9uZmMvbmNpL2hjaS5jOjM2NzpcdFx0XHQoc3RydWN0IG5jaV9oY2lfYWxsX3BpcGVfY2xlYXJlZF9ub3RpICopc2tiLVx1MDAzZWRhdGE7XG5uZXQvbmZjL25jaS9oY2kuYzozNjg6XHRcdG5jaV9oY2lfcmVzZXRfcGlwZXNfcGVyX2hvc3QobmRldiwgY2xlYXJlZF9pbmZvLVx1MDAzZWhvc3QpO1xubmV0L25mYy9uY2kvaGNpLmMtMzY5LVx0XHRicmVhaztcbi0tXG5uZXQvbmZjL25jaS9oY2kuYy0zNzQtXG5uZXQvbmZjL25jaS9oY2kuYzozNzU6XHRpZiAobmRldi1cdTAwM2VvcHMtXHUwMDNlaGNpX2NtZF9yZWNlaXZlZClcbm5ldC9uZmMvbmNpL2hjaS5jOjM3NjpcdFx0bmRldi1cdTAwM2VvcHMtXHUwMDNlaGNpX2NtZF9yZWNlaXZlZChuZGV2LCBwaXBlLCBjbWQsIHNrYik7XG5uZXQvbmZjL25jaS9oY2kuYy0zNzctXG5uZXQvbmZjL25jaS9oY2kuYy0zNzgtZXhpdDpcbm5ldC9uZmMvbmNpL2hjaS5jOjM3OTpcdG5jaV9oY2lfc2VuZF9kYXRhKG5kZXYsIHBpcGUsIHN0YXR1cywgTlVMTCwgMCk7XG5uZXQvbmZjL25jaS9oY2kuYy0zODAtXG4tLVxubmV0L25mYy9uY2kvaGNpLmMtMzgzLVxubmV0L25mYy9uY2kvaGNpLmM6Mzg0OnN0YXRpYyB2b2lkIG5jaV9oY2lfcmVzcF9yZWNlaXZlZChzdHJ1Y3QgbmNpX2RldiAqbmRldiwgdTggcGlwZSxcbm5ldC9uZmMvbmNpL2hjaS5jLTM4NS1cdFx0XHRcdCAgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbmZjL25jaS9oY2kuYy0zODktXHRzcGluX2xvY2tfYmgoXHUwMDI2bmRldi1cdTAwM2Vjb25uX2luZm9fbG9jayk7XG5uZXQvbmZjL25jaS9oY2kuYzozOTA6XHRjb25uX2luZm8gPSBuZGV2LVx1MDAzZWhjaV9kZXYtXHUwMDNlY29ubl9pbmZvO1xubmV0L25mYy9uY2kvaGNpLmMtMzkxLVx0aWYgKCFjb25uX2luZm8pIHtcbi0tXG5uZXQvbmZjL25jaS9oY2kuYy00MDUtICovXG5uZXQvbmZjL25jaS9oY2kuYzo0MDY6c3RhdGljIHZvaWQgbmNpX2hjaV9oY3BfbWVzc2FnZV9yeChzdHJ1Y3QgbmNpX2RldiAqbmRldiwgdTggcGlwZSxcbm5ldC9uZmMvbmNpL2hjaS5jLTQwNy1cdFx0XHRcdCAgIHU4IHR5cGUsIHU4IGluc3RydWN0aW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9uZmMvbmNpL2hjaS5jLTQxMC1cdGNhc2UgTkNJX0hDSV9IQ1BfUkVTUE9OU0U6XG5uZXQvbmZjL25jaS9oY2kuYzo0MTE6XHRcdG5jaV9oY2lfcmVzcF9yZWNlaXZlZChuZGV2LCBwaXBlLCBza2IpO1xubmV0L25mYy9uY2kvaGNpLmMtNDEyLVx0XHRicmVhaztcbm5ldC9uZmMvbmNpL2hjaS5jLTQxMy1cdGNhc2UgTkNJX0hDSV9IQ1BfQ09NTUFORDpcbm5ldC9uZmMvbmNpL2hjaS5jOjQxNDpcdFx0bmNpX2hjaV9jbWRfcmVjZWl2ZWQobmRldiwgcGlwZSwgaW5zdHJ1Y3Rpb24sIHNrYik7XG5uZXQvbmZjL25jaS9oY2kuYy00MTUtXHRcdGJyZWFrO1xubmV0L25mYy9uY2kvaGNpLmMtNDE2LVx0Y2FzZSBOQ0lfSENJX0hDUF9FVkVOVDpcbm5ldC9uZmMvbmNpL2hjaS5jOjQxNzpcdFx0bmNpX2hjaV9ldmVudF9yZWNlaXZlZChuZGV2LCBwaXBlLCBpbnN0cnVjdGlvbiwgc2tiKTtcbm5ldC9uZmMvbmNpL2hjaS5jLTQxOC1cdFx0YnJlYWs7XG4tLVxubmV0L25mYy9uY2kvaGNpLmMtNDI4LVxubmV0L25mYy9uY2kvaGNpLmM6NDI5OnN0YXRpYyB2b2lkIG5jaV9oY2lfbXNnX3J4X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxubmV0L25mYy9uY2kvaGNpLmMtNDMwLXtcbm5ldC9uZmMvbmNpL2hjaS5jOjQzMTpcdHN0cnVjdCBuY2lfaGNpX2RldiAqaGRldiA9XG5uZXQvbmZjL25jaS9oY2kuYzo0MzI6XHRcdGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbmNpX2hjaV9kZXYsIG1zZ19yeF93b3JrKTtcbm5ldC9uZmMvbmNpL2hjaS5jLTQzMy1cdHN0cnVjdCBza19idWZmICpza2I7XG4tLVxubmV0L25mYy9uY2kvaGNpLmMtNDQ1LVxubmV0L25mYy9uY2kvaGNpLmM6NDQ2Olx0XHRuY2lfaGNpX2hjcF9tZXNzYWdlX3J4KGhkZXYtXHUwMDNlbmRldiwgcGlwZSxcbm5ldC9uZmMvbmNpL2hjaS5jLTQ0Ny1cdFx0XHRcdCAgICAgICB0eXBlLCBpbnN0cnVjdGlvbiwgc2tiKTtcbi0tXG5uZXQvbmZjL25jaS9oY2kuYy00NTAtXG5uZXQvbmZjL25jaS9oY2kuYzo0NTE6dm9pZCBuY2lfaGNpX2RhdGFfcmVjZWl2ZWRfY2Iodm9pZCAqY29udGV4dCxcbm5ldC9uZmMvbmNpL2hjaS5jLTQ1Mi1cdFx0XHQgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgZXJyKVxuLS1cbm5ldC9uZmMvbmNpL2hjaS5jLTQ3Mi1cdGlmICgocGFja2V0LVx1MDAzZWhlYWRlciBcdTAwMjYgfk5DSV9IQ0lfRlJBR01FTlQpID09IDApIHtcbm5ldC9uZmMvbmNpL2hjaS5jOjQ3MzpcdFx0c2tiX3F1ZXVlX3RhaWwoXHUwMDI2bmRldi1cdTAwM2VoY2lfZGV2LVx1MDAzZXJ4X2hjcF9mcmFncywgc2tiKTtcbm5ldC9uZmMvbmNpL2hjaS5jLTQ3NC1cdFx0cmV0dXJuO1xuLS1cbm5ldC9uZmMvbmNpL2hjaS5jLTQ3Ny1cdC8qIGl0JiMzOTtzIHRoZSBsYXN0IGZyYWdtZW50LiBEb2VzIGl0IG5lZWQgcmUtYWdncmVnYXRpb24/ICovXG5uZXQvbmZjL25jaS9oY2kuYzo0Nzg6XHRpZiAoc2tiX3F1ZXVlX2xlbihcdTAwMjZuZGV2LVx1MDAzZWhjaV9kZXYtXHUwMDNlcnhfaGNwX2ZyYWdzKSkge1xubmV0L25mYy9uY2kvaGNpLmMtNDc5LVx0XHRwaXBlID0gTkNJX0hDUF9NU0dfR0VUX1BJUEUocGFja2V0LVx1MDAzZWhlYWRlcik7XG5uZXQvbmZjL25jaS9oY2kuYzo0ODA6XHRcdHNrYl9xdWV1ZV90YWlsKFx1MDAyNm5kZXYtXHUwMDNlaGNpX2Rldi1cdTAwM2VyeF9oY3BfZnJhZ3MsIHNrYik7XG5uZXQvbmZjL25jaS9oY2kuYy00ODEtXG5uZXQvbmZjL25jaS9oY2kuYy00ODItXHRcdG1zZ19sZW4gPSAwO1xubmV0L25mYy9uY2kvaGNpLmM6NDgzOlx0XHRza2JfcXVldWVfd2FsayhcdTAwMjZuZGV2LVx1MDAzZWhjaV9kZXYtXHUwMDNlcnhfaGNwX2ZyYWdzLCBmcmFnX3NrYikge1xubmV0L25mYy9uY2kvaGNpLmMtNDg0LVx0XHRcdG1zZ19sZW4gJiM0Mzs9IChmcmFnX3NrYi1cdTAwM2VsZW4gLVxuLS1cbm5ldC9uZmMvbmNpL2hjaS5jLTQ5Ni1cbm5ldC9uZmMvbmNpL2hjaS5jOjQ5NzpcdFx0c2tiX3F1ZXVlX3dhbGsoXHUwMDI2bmRldi1cdTAwM2VoY2lfZGV2LVx1MDAzZXJ4X2hjcF9mcmFncywgZnJhZ19za2IpIHtcbm5ldC9uZmMvbmNpL2hjaS5jLTQ5OC1cdFx0XHRtc2dfbGVuID0gZnJhZ19za2ItXHUwMDNlbGVuIC0gTkNJX0hDSV9IQ1BfUEFDS0VUX0hFQURFUl9MRU47XG4tLVxubmV0L25mYy9uY2kvaGNpLmMtNTAzLVxubmV0L25mYy9uY2kvaGNpLmM6NTA0Olx0XHRza2JfcXVldWVfcHVyZ2UoXHUwMDI2bmRldi1cdTAwM2VoY2lfZGV2LVx1MDAzZXJ4X2hjcF9mcmFncyk7XG5uZXQvbmZjL25jaS9oY2kuYy01MDUtXHR9IGVsc2Uge1xuLS1cbm5ldC9uZmMvbmNpL2hjaS5jLTUyMy1cdFx0c2tiX3B1bGwoaGNwX3NrYiwgTkNJX0hDSV9IQ1BfUEFDS0VUX0hFQURFUl9MRU4pO1xubmV0L25mYy9uY2kvaGNpLmM6NTI0Olx0XHRuY2lfaGNpX2hjcF9tZXNzYWdlX3J4KG5kZXYsIHBpcGUsIHR5cGUsXG5uZXQvbmZjL25jaS9oY2kuYy01MjUtXHRcdFx0XHQgICAgICAgTkNJX1NUQVRVU19PSywgaGNwX3NrYik7XG5uZXQvbmZjL25jaS9oY2kuYy01MjYtXHR9IGVsc2Uge1xubmV0L25mYy9uY2kvaGNpLmM6NTI3Olx0XHRza2JfcXVldWVfdGFpbChcdTAwMjZuZGV2LVx1MDAzZWhjaV9kZXYtXHUwMDNlbXNnX3J4X3F1ZXVlLCBoY3Bfc2tiKTtcbm5ldC9uZmMvbmNpL2hjaS5jOjUyODpcdFx0c2NoZWR1bGVfd29yayhcdTAwMjZuZGV2LVx1MDAzZWhjaV9kZXYtXHUwMDNlbXNnX3J4X3dvcmspO1xubmV0L25mYy9uY2kvaGNpLmMtNTI5LVx0fVxuLS1cbm5ldC9uZmMvbmNpL2hjaS5jLTUzMS1cbm5ldC9uZmMvbmNpL2hjaS5jOjUzMjppbnQgbmNpX2hjaV9vcGVuX3BpcGUoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHU4IHBpcGUpXG5uZXQvbmZjL25jaS9oY2kuYy01MzMte1xuLS1cbm5ldC9uZmMvbmNpL2hjaS5jLTUzNy1cdHNwaW5fbG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbm5ldC9uZmMvbmNpL2hjaS5jOjUzODpcdGNvbm5faW5mbyA9IG5kZXYtXHUwMDNlaGNpX2Rldi1cdTAwM2Vjb25uX2luZm87XG5uZXQvbmZjL25jaS9oY2kuYy01MzktXHRpZiAoIWNvbm5faW5mbykge1xuLS1cbm5ldC9uZmMvbmNpL2hjaS5jLTU1MS1cbm5ldC9uZmMvbmNpL2hjaS5jOjU1MjpcdHJldHVybiBuY2lfcmVxdWVzdChuZGV2LCBuY2lfaGNpX3NlbmRfZGF0YV9yZXEsIFx1MDAyNmRhdGEsXG5uZXQvbmZjL25jaS9oY2kuYy01NTMtXHRcdFx0ICAgbXNlY3NfdG9famlmZmllcyhOQ0lfREFUQV9USU1FT1VUKSk7XG5uZXQvbmZjL25jaS9oY2kuYy01NTQtfVxubmV0L25mYy9uY2kvaGNpLmM6NTU1OkVYUE9SVF9TWU1CT0wobmNpX2hjaV9vcGVuX3BpcGUpO1xubmV0L25mYy9uY2kvaGNpLmMtNTU2LVxubmV0L25mYy9uY2kvaGNpLmM6NTU3OnN0YXRpYyB1OCBuY2lfaGNpX2NyZWF0ZV9waXBlKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCB1OCBkZXN0X2hvc3QsXG5uZXQvbmZjL25jaS9oY2kuYy01NTgtXHRcdFx0ICAgICAgdTggZGVzdF9nYXRlLCBpbnQgKnJlc3VsdClcbi0tXG5uZXQvbmZjL25jaS9oY2kuYy01NjEtXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xubmV0L25mYy9uY2kvaGNpLmM6NTYyOlx0c3RydWN0IG5jaV9oY2lfY3JlYXRlX3BpcGVfcGFyYW1zIHBhcmFtcztcbm5ldC9uZmMvbmNpL2hjaS5jOjU2MzpcdGNvbnN0IHN0cnVjdCBuY2lfaGNpX2NyZWF0ZV9waXBlX3Jlc3AgKnJlc3A7XG5uZXQvbmZjL25jaS9oY2kuYy01NjQtXG4tLVxubmV0L25mYy9uY2kvaGNpLmMtNTcwLVxubmV0L25mYy9uY2kvaGNpLmM6NTcxOlx0KnJlc3VsdCA9IG5jaV9oY2lfc2VuZF9jbWQobmRldiwgTkNJX0hDSV9BRE1JTl9HQVRFLFxubmV0L25mYy9uY2kvaGNpLmMtNTcyLVx0XHRcdFx0ICAgTkNJX0hDSV9BRE1fQ1JFQVRFX1BJUEUsXG4tLVxubmV0L25mYy9uY2kvaGNpLmMtNTc2LVxubmV0L25mYy9uY2kvaGNpLmM6NTc3Olx0cmVzcCA9IChzdHJ1Y3QgbmNpX2hjaV9jcmVhdGVfcGlwZV9yZXNwICopc2tiLVx1MDAzZWRhdGE7XG5uZXQvbmZjL25jaS9oY2kuYy01NzgtXHRwaXBlID0gcmVzcC1cdTAwM2VwaXBlO1xuLS1cbm5ldC9uZmMvbmNpL2hjaS5jLTU4Ny1cbm5ldC9uZmMvbmNpL2hjaS5jOjU4ODpzdGF0aWMgaW50IG5jaV9oY2lfZGVsZXRlX3BpcGUoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHU4IHBpcGUpXG5uZXQvbmZjL25jaS9oY2kuYy01ODkte1xubmV0L25mYy9uY2kvaGNpLmM6NTkwOlx0cmV0dXJuIG5jaV9oY2lfc2VuZF9jbWQobmRldiwgTkNJX0hDSV9BRE1JTl9HQVRFLFxubmV0L25mYy9uY2kvaGNpLmMtNTkxLVx0XHRcdFx0TkNJX0hDSV9BRE1fREVMRVRFX1BJUEUsIFx1MDAyNnBpcGUsIDEsIE5VTEwpO1xuLS1cbm5ldC9uZmMvbmNpL2hjaS5jLTU5My1cbm5ldC9uZmMvbmNpL2hjaS5jOjU5NDppbnQgbmNpX2hjaV9zZXRfcGFyYW0oc3RydWN0IG5jaV9kZXYgKm5kZXYsIHU4IGdhdGUsIHU4IGlkeCxcbm5ldC9uZmMvbmNpL2hjaS5jLTU5NS1cdFx0ICAgICAgY29uc3QgdTggKnBhcmFtLCBzaXplX3QgcGFyYW1fbGVuKVxuLS1cbm5ldC9uZmMvbmNpL2hjaS5jLTYwMi1cdHU4ICp0bXA7XG5uZXQvbmZjL25jaS9oY2kuYzo2MDM6XHR1OCBwaXBlID0gbmRldi1cdTAwM2VoY2lfZGV2LVx1MDAzZWdhdGUycGlwZVtnYXRlXTtcbm5ldC9uZmMvbmNpL2hjaS5jLTYwNC1cbi0tXG5uZXQvbmZjL25jaS9oY2kuYy02MTAtXHRzcGluX2xvY2tfYmgoXHUwMDI2bmRldi1cdTAwM2Vjb25uX2luZm9fbG9jayk7XG5uZXQvbmZjL25jaS9oY2kuYzo2MTE6XHRjb25uX2luZm8gPSBuZGV2LVx1MDAzZWhjaV9kZXYtXHUwMDNlY29ubl9pbmZvO1xubmV0L25mYy9uY2kvaGNpLmMtNjEyLVx0aWYgKCFjb25uX2luZm8pIHtcbi0tXG5uZXQvbmZjL25jaS9oY2kuYy02MzEtXG5uZXQvbmZjL25jaS9oY2kuYzo2MzI6XHRyID0gbmNpX3JlcXVlc3QobmRldiwgbmNpX2hjaV9zZW5kX2RhdGFfcmVxLCBcdTAwMjZkYXRhLFxubmV0L25mYy9uY2kvaGNpLmMtNjMzLVx0XHRcdG1zZWNzX3RvX2ppZmZpZXMoTkNJX0RBVEFfVElNRU9VVCkpO1xuLS1cbm5ldC9uZmMvbmNpL2hjaS5jLTYzNS1cdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xubmV0L25mYy9uY2kvaGNpLmM6NjM2Olx0XHRjb25uX2luZm8gPSBuZGV2LVx1MDAzZWhjaV9kZXYtXHUwMDNlY29ubl9pbmZvO1xubmV0L25mYy9uY2kvaGNpLmMtNjM3LVx0XHRyeF9za2IgPSBjb25uX2luZm8gPyBjb25uX2luZm8tXHUwMDNlcnhfc2tiIDogTlVMTDtcbi0tXG5uZXQvbmZjL25jaS9oY2kuYy02NDQtXHRcdG1lc3NhZ2UgPSAoc3RydWN0IG5jaV9oY3BfbWVzc2FnZSAqKXJ4X3NrYi1cdTAwM2VkYXRhO1xubmV0L25mYy9uY2kvaGNpLmM6NjQ1Olx0XHRyID0gbmNpX2hjaV9yZXN1bHRfdG9fZXJybm8oXG5uZXQvbmZjL25jaS9oY2kuYy02NDYtXHRcdFx0TkNJX0hDUF9NU0dfR0VUX0NNRChtZXNzYWdlLVx1MDAzZWhlYWRlcikpO1xuLS1cbm5ldC9uZmMvbmNpL2hjaS5jLTY1My19XG5uZXQvbmZjL25jaS9oY2kuYzo2NTQ6RVhQT1JUX1NZTUJPTChuY2lfaGNpX3NldF9wYXJhbSk7XG5uZXQvbmZjL25jaS9oY2kuYy02NTUtXG5uZXQvbmZjL25jaS9oY2kuYzo2NTY6aW50IG5jaV9oY2lfZ2V0X3BhcmFtKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCB1OCBnYXRlLCB1OCBpZHgsXG5uZXQvbmZjL25jaS9oY2kuYy02NTctXHRcdCAgICAgIHN0cnVjdCBza19idWZmICoqc2tiKVxuLS1cbm5ldC9uZmMvbmNpL2hjaS5jLTY2My1cdGludCByO1xubmV0L25mYy9uY2kvaGNpLmM6NjY0Olx0dTggcGlwZSA9IG5kZXYtXHUwMDNlaGNpX2Rldi1cdTAwM2VnYXRlMnBpcGVbZ2F0ZV07XG5uZXQvbmZjL25jaS9oY2kuYy02NjUtXG4tLVxubmV0L25mYy9uY2kvaGNpLmMtNjcxLVx0c3Bpbl9sb2NrX2JoKFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xubmV0L25mYy9uY2kvaGNpLmM6NjcyOlx0Y29ubl9pbmZvID0gbmRldi1cdTAwM2VoY2lfZGV2LVx1MDAzZWNvbm5faW5mbztcbm5ldC9uZmMvbmNpL2hjaS5jLTY3My1cdGlmICghY29ubl9pbmZvKSB7XG4tLVxubmV0L25mYy9uY2kvaGNpLmMtNjg1LVxubmV0L25mYy9uY2kvaGNpLmM6Njg2Olx0ciA9IG5jaV9yZXF1ZXN0KG5kZXYsIG5jaV9oY2lfc2VuZF9kYXRhX3JlcSwgXHUwMDI2ZGF0YSxcbm5ldC9uZmMvbmNpL2hjaS5jLTY4Ny1cdFx0XHRtc2Vjc190b19qaWZmaWVzKE5DSV9EQVRBX1RJTUVPVVQpKTtcbi0tXG5uZXQvbmZjL25jaS9oY2kuYy02OTAtXHRcdHNwaW5fbG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbm5ldC9uZmMvbmNpL2hjaS5jOjY5MTpcdFx0Y29ubl9pbmZvID0gbmRldi1cdTAwM2VoY2lfZGV2LVx1MDAzZWNvbm5faW5mbztcbm5ldC9uZmMvbmNpL2hjaS5jLTY5Mi1cdFx0cnhfc2tiID0gY29ubl9pbmZvID8gY29ubl9pbmZvLVx1MDAzZXJ4X3NrYiA6IE5VTEw7XG4tLVxubmV0L25mYy9uY2kvaGNpLmMtNjk4LVx0XHRtZXNzYWdlID0gKHN0cnVjdCBuY2lfaGNwX21lc3NhZ2UgKilyeF9za2ItXHUwMDNlZGF0YTtcbm5ldC9uZmMvbmNpL2hjaS5jOjY5OTpcdFx0ciA9IG5jaV9oY2lfcmVzdWx0X3RvX2Vycm5vKFxubmV0L25mYy9uY2kvaGNpLmMtNzAwLVx0XHRcdE5DSV9IQ1BfTVNHX0dFVF9DTUQobWVzc2FnZS1cdTAwM2VoZWFkZXIpKTtcbi0tXG5uZXQvbmZjL25jaS9oY2kuYy03MDktfVxubmV0L25mYy9uY2kvaGNpLmM6NzEwOkVYUE9SVF9TWU1CT0wobmNpX2hjaV9nZXRfcGFyYW0pO1xubmV0L25mYy9uY2kvaGNpLmMtNzExLVxubmV0L25mYy9uY2kvaGNpLmM6NzEyOmludCBuY2lfaGNpX2Nvbm5lY3RfZ2F0ZShzdHJ1Y3QgbmNpX2RldiAqbmRldixcbm5ldC9uZmMvbmNpL2hjaS5jLTcxMy1cdFx0XHQgdTggZGVzdF9ob3N0LCB1OCBkZXN0X2dhdGUsIHU4IHBpcGUpXG4tLVxubmV0L25mYy9uY2kvaGNpLmMtNzIwLVxubmV0L25mYy9uY2kvaGNpLmM6NzIxOlx0aWYgKG5kZXYtXHUwMDNlaGNpX2Rldi1cdTAwM2VnYXRlMnBpcGVbZGVzdF9nYXRlXSAhPSBOQ0lfSENJX0lOVkFMSURfUElQRSlcbm5ldC9uZmMvbmNpL2hjaS5jLTcyMi1cdFx0cmV0dXJuIC1FQUREUklOVVNFO1xuLS1cbm5ldC9uZmMvbmNpL2hjaS5jLTczNC1cdGRlZmF1bHQ6XG5uZXQvbmZjL25jaS9oY2kuYzo3MzU6XHRcdHBpcGUgPSBuY2lfaGNpX2NyZWF0ZV9waXBlKG5kZXYsIGRlc3RfaG9zdCwgZGVzdF9nYXRlLCBcdTAwMjZyKTtcbm5ldC9uZmMvbmNpL2hjaS5jLTczNi1cdFx0aWYgKHBpcGUgPT0gTkNJX0hDSV9JTlZBTElEX1BJUEUpXG4tLVxubmV0L25mYy9uY2kvaGNpLmMtNzQyLW9wZW5fcGlwZTpcbm5ldC9uZmMvbmNpL2hjaS5jOjc0MzpcdHIgPSBuY2lfaGNpX29wZW5fcGlwZShuZGV2LCBwaXBlKTtcbm5ldC9uZmMvbmNpL2hjaS5jLTc0NC1cdGlmIChyIFx1MDAzYyAwKSB7XG5uZXQvbmZjL25jaS9oY2kuYy03NDUtXHRcdGlmIChwaXBlX2NyZWF0ZWQpIHtcbm5ldC9uZmMvbmNpL2hjaS5jOjc0NjpcdFx0XHRpZiAobmNpX2hjaV9kZWxldGVfcGlwZShuZGV2LCBwaXBlKSBcdTAwM2MgMCkge1xubmV0L25mYy9uY2kvaGNpLmMtNzQ3LVx0XHRcdFx0LyogVE9ETzogQ2Fubm90IGNsZWFuIGJ5IGRlbGV0aW5nIHBpcGUuLi5cbi0tXG5uZXQvbmZjL25jaS9oY2kuYy03NTQtXG5uZXQvbmZjL25jaS9oY2kuYzo3NTU6XHRuZGV2LVx1MDAzZWhjaV9kZXYtXHUwMDNlcGlwZXNbcGlwZV0uZ2F0ZSA9IGRlc3RfZ2F0ZTtcbm5ldC9uZmMvbmNpL2hjaS5jOjc1NjpcdG5kZXYtXHUwMDNlaGNpX2Rldi1cdTAwM2VwaXBlc1twaXBlXS5ob3N0ID0gZGVzdF9ob3N0O1xubmV0L25mYy9uY2kvaGNpLmM6NzU3Olx0bmRldi1cdTAwM2VoY2lfZGV2LVx1MDAzZWdhdGUycGlwZVtkZXN0X2dhdGVdID0gcGlwZTtcbm5ldC9uZmMvbmNpL2hjaS5jLTc1OC1cbi0tXG5uZXQvbmZjL25jaS9oY2kuYy03NjAtfVxubmV0L25mYy9uY2kvaGNpLmM6NzYxOkVYUE9SVF9TWU1CT0wobmNpX2hjaV9jb25uZWN0X2dhdGUpO1xubmV0L25mYy9uY2kvaGNpLmMtNzYyLVxubmV0L25mYy9uY2kvaGNpLmM6NzYzOnN0YXRpYyBpbnQgbmNpX2hjaV9kZXZfY29ubmVjdF9nYXRlcyhzdHJ1Y3QgbmNpX2RldiAqbmRldixcbm5ldC9uZmMvbmNpL2hjaS5jLTc2NC1cdFx0XHRcdCAgICAgdTggZ2F0ZV9jb3VudCxcbm5ldC9uZmMvbmNpL2hjaS5jOjc2NTpcdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IG5jaV9oY2lfZ2F0ZSAqZ2F0ZXMpXG5uZXQvbmZjL25jaS9oY2kuYy03NjYte1xuLS1cbm5ldC9uZmMvbmNpL2hjaS5jLTc2OS1cdHdoaWxlIChnYXRlX2NvdW50LS0pIHtcbm5ldC9uZmMvbmNpL2hjaS5jOjc3MDpcdFx0ciA9IG5jaV9oY2lfY29ubmVjdF9nYXRlKG5kZXYsIGdhdGVzLVx1MDAzZWRlc3RfaG9zdCxcbm5ldC9uZmMvbmNpL2hjaS5jLTc3MS1cdFx0XHRcdFx0IGdhdGVzLVx1MDAzZWdhdGUsIGdhdGVzLVx1MDAzZXBpcGUpO1xuLS1cbm5ldC9uZmMvbmNpL2hjaS5jLTc3OS1cbm5ldC9uZmMvbmNpL2hjaS5jOjc4MDppbnQgbmNpX2hjaV9kZXZfc2Vzc2lvbl9pbml0KHN0cnVjdCBuY2lfZGV2ICpuZGV2KVxubmV0L25mYy9uY2kvaGNpLmMtNzgxLXtcbi0tXG5uZXQvbmZjL25jaS9oY2kuYy03ODUtXG5uZXQvbmZjL25jaS9oY2kuYzo3ODY6XHRuZGV2LVx1MDAzZWhjaV9kZXYtXHUwMDNlY291bnRfcGlwZXMgPSAwO1xubmV0L25mYy9uY2kvaGNpLmM6Nzg3Olx0bmRldi1cdTAwM2VoY2lfZGV2LVx1MDAzZWV4cGVjdGVkX3BpcGVzID0gMDtcbm5ldC9uZmMvbmNpL2hjaS5jLTc4OC1cbm5ldC9uZmMvbmNpL2hjaS5jLTc4OS1cdHNwaW5fbG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbm5ldC9uZmMvbmNpL2hjaS5jOjc5MDpcdGNvbm5faW5mbyA9IG5kZXYtXHUwMDNlaGNpX2Rldi1cdTAwM2Vjb25uX2luZm87XG5uZXQvbmZjL25jaS9oY2kuYy03OTEtXHRpZiAoIWNvbm5faW5mbykge1xuLS1cbm5ldC9uZmMvbmNpL2hjaS5jLTc5NS1cbm5ldC9uZmMvbmNpL2hjaS5jOjc5NjpcdGNvbm5faW5mby1cdTAwM2VkYXRhX2V4Y2hhbmdlX2NiID0gbmNpX2hjaV9kYXRhX3JlY2VpdmVkX2NiO1xubmV0L25mYy9uY2kvaGNpLmMtNzk3LVx0Y29ubl9pbmZvLVx1MDAzZWRhdGFfZXhjaGFuZ2VfY2JfY29udGV4dCA9IG5kZXY7XG4tLVxubmV0L25mYy9uY2kvaGNpLmMtNzk5LVxubmV0L25mYy9uY2kvaGNpLmM6ODAwOlx0bmNpX2hjaV9yZXNldF9waXBlcyhuZGV2LVx1MDAzZWhjaV9kZXYpO1xubmV0L25mYy9uY2kvaGNpLmMtODAxLVxubmV0L25mYy9uY2kvaGNpLmM6ODAyOlx0aWYgKG5kZXYtXHUwMDNlaGNpX2Rldi1cdTAwM2Vpbml0X2RhdGEuZ2F0ZXNbMF0uZ2F0ZSAhPSBOQ0lfSENJX0FETUlOX0dBVEUpXG5uZXQvbmZjL25jaS9oY2kuYy04MDMtXHRcdHJldHVybiAtRVBST1RPO1xubmV0L25mYy9uY2kvaGNpLmMtODA0LVxubmV0L25mYy9uY2kvaGNpLmM6ODA1Olx0ciA9IG5jaV9oY2lfY29ubmVjdF9nYXRlKG5kZXYsXG5uZXQvbmZjL25jaS9oY2kuYzo4MDY6XHRcdFx0XHQgbmRldi1cdTAwM2VoY2lfZGV2LVx1MDAzZWluaXRfZGF0YS5nYXRlc1swXS5kZXN0X2hvc3QsXG5uZXQvbmZjL25jaS9oY2kuYzo4MDc6XHRcdFx0XHQgbmRldi1cdTAwM2VoY2lfZGV2LVx1MDAzZWluaXRfZGF0YS5nYXRlc1swXS5nYXRlLFxubmV0L25mYy9uY2kvaGNpLmM6ODA4Olx0XHRcdFx0IG5kZXYtXHUwMDNlaGNpX2Rldi1cdTAwM2Vpbml0X2RhdGEuZ2F0ZXNbMF0ucGlwZSk7XG5uZXQvbmZjL25jaS9oY2kuYy04MDktXHRpZiAociBcdTAwM2MgMClcbi0tXG5uZXQvbmZjL25jaS9oY2kuYy04MTEtXG5uZXQvbmZjL25jaS9oY2kuYzo4MTI6XHRyID0gbmNpX2hjaV9nZXRfcGFyYW0obmRldiwgTkNJX0hDSV9BRE1JTl9HQVRFLFxubmV0L25mYy9uY2kvaGNpLmMtODEzLVx0XHRcdCAgICAgIE5DSV9IQ0lfQURNSU5fUEFSQU1fU0VTU0lPTl9JREVOVElUWSwgXHUwMDI2c2tiKTtcbi0tXG5uZXQvbmZjL25jaS9oY2kuYy04MTctXHRpZiAoc2tiLVx1MDAzZWxlbiBcdTAwMjZcdTAwMjZcbm5ldC9uZmMvbmNpL2hjaS5jOjgxODpcdCAgICBza2ItXHUwMDNlbGVuID09IHN0cmxlbihuZGV2LVx1MDAzZWhjaV9kZXYtXHUwMDNlaW5pdF9kYXRhLnNlc3Npb25faWQpIFx1MDAyNlx1MDAyNlxubmV0L25mYy9uY2kvaGNpLmM6ODE5Olx0ICAgICFtZW1jbXAobmRldi1cdTAwM2VoY2lfZGV2LVx1MDAzZWluaXRfZGF0YS5zZXNzaW9uX2lkLCBza2ItXHUwMDNlZGF0YSwgc2tiLVx1MDAzZWxlbikgXHUwMDI2XHUwMDI2XG5uZXQvbmZjL25jaS9oY2kuYzo4MjA6XHQgICAgbmRldi1cdTAwM2VvcHMtXHUwMDNlaGNpX2xvYWRfc2Vzc2lvbikge1xubmV0L25mYy9uY2kvaGNpLmMtODIxLVx0XHQvKiBSZXN0b3JlIGdhdGVcdTAwM2MtXHUwMDNlcGlwZSB0YWJsZSBmcm9tIHNvbWUgcHJvcHJpZXRhcnkgbG9jYXRpb24uICovXG5uZXQvbmZjL25jaS9oY2kuYzo4MjI6XHRcdHIgPSBuZGV2LVx1MDAzZW9wcy1cdTAwM2VoY2lfbG9hZF9zZXNzaW9uKG5kZXYpO1xubmV0L25mYy9uY2kvaGNpLmMtODIzLVx0fSBlbHNlIHtcbm5ldC9uZmMvbmNpL2hjaS5jOjgyNDpcdFx0ciA9IG5jaV9oY2lfY2xlYXJfYWxsX3BpcGVzKG5kZXYpO1xubmV0L25mYy9uY2kvaGNpLmMtODI1LVx0XHRpZiAociBcdTAwM2MgMClcbi0tXG5uZXQvbmZjL25jaS9oY2kuYy04MjctXG5uZXQvbmZjL25jaS9oY2kuYzo4Mjg6XHRcdHIgPSBuY2lfaGNpX2Rldl9jb25uZWN0X2dhdGVzKG5kZXYsXG5uZXQvbmZjL25jaS9oY2kuYzo4Mjk6XHRcdFx0XHRcdCAgICAgIG5kZXYtXHUwMDNlaGNpX2Rldi1cdTAwM2Vpbml0X2RhdGEuZ2F0ZV9jb3VudCxcbm5ldC9uZmMvbmNpL2hjaS5jOjgzMDpcdFx0XHRcdFx0ICAgICAgbmRldi1cdTAwM2VoY2lfZGV2LVx1MDAzZWluaXRfZGF0YS5nYXRlcyk7XG5uZXQvbmZjL25jaS9oY2kuYy04MzEtXHRcdGlmIChyIFx1MDAzYyAwKVxuLS1cbm5ldC9uZmMvbmNpL2hjaS5jLTgzMy1cbm5ldC9uZmMvbmNpL2hjaS5jOjgzNDpcdFx0ciA9IG5jaV9oY2lfc2V0X3BhcmFtKG5kZXYsIE5DSV9IQ0lfQURNSU5fR0FURSxcbm5ldC9uZmMvbmNpL2hjaS5jLTgzNS1cdFx0XHRcdCAgICAgIE5DSV9IQ0lfQURNSU5fUEFSQU1fU0VTU0lPTl9JREVOVElUWSxcbm5ldC9uZmMvbmNpL2hjaS5jOjgzNjpcdFx0XHRcdCAgICAgIG5kZXYtXHUwMDNlaGNpX2Rldi1cdTAwM2Vpbml0X2RhdGEuc2Vzc2lvbl9pZCxcbm5ldC9uZmMvbmNpL2hjaS5jOjgzNzpcdFx0XHRcdCAgICAgIHN0cmxlbihuZGV2LVx1MDAzZWhjaV9kZXYtXHUwMDNlaW5pdF9kYXRhLnNlc3Npb25faWQpKTtcbm5ldC9uZmMvbmNpL2hjaS5jLTgzOC1cdH1cbi0tXG5uZXQvbmZjL25jaS9oY2kuYy04NDQtfVxubmV0L25mYy9uY2kvaGNpLmM6ODQ1OkVYUE9SVF9TWU1CT0wobmNpX2hjaV9kZXZfc2Vzc2lvbl9pbml0KTtcbm5ldC9uZmMvbmNpL2hjaS5jLTg0Ni1cbm5ldC9uZmMvbmNpL2hjaS5jOjg0NzpzdHJ1Y3QgbmNpX2hjaV9kZXYgKm5jaV9oY2lfYWxsb2NhdGUoc3RydWN0IG5jaV9kZXYgKm5kZXYpXG5uZXQvbmZjL25jaS9oY2kuYy04NDgte1xubmV0L25mYy9uY2kvaGNpLmM6ODQ5Olx0c3RydWN0IG5jaV9oY2lfZGV2ICpoZGV2O1xubmV0L25mYy9uY2kvaGNpLmMtODUwLVxuLS1cbm5ldC9uZmMvbmNpL2hjaS5jLTg1NS1cdHNrYl9xdWV1ZV9oZWFkX2luaXQoXHUwMDI2aGRldi1cdTAwM2VyeF9oY3BfZnJhZ3MpO1xubmV0L25mYy9uY2kvaGNpLmM6ODU2Olx0SU5JVF9XT1JLKFx1MDAyNmhkZXYtXHUwMDNlbXNnX3J4X3dvcmssIG5jaV9oY2lfbXNnX3J4X3dvcmspO1xubmV0L25mYy9uY2kvaGNpLmMtODU3LVx0c2tiX3F1ZXVlX2hlYWRfaW5pdChcdTAwMjZoZGV2LVx1MDAzZW1zZ19yeF9xdWV1ZSk7XG4tLVxubmV0L25mYy9uY2kvaGNpLmMtODYyLVxubmV0L25mYy9uY2kvaGNpLmM6ODYzOnZvaWQgbmNpX2hjaV9kZWFsbG9jYXRlKHN0cnVjdCBuY2lfZGV2ICpuZGV2KVxubmV0L25mYy9uY2kvaGNpLmMtODY0LXtcbm5ldC9uZmMvbmNpL2hjaS5jOjg2NTpcdGtmcmVlKG5kZXYtXHUwMDNlaGNpX2Rldik7XG5uZXQvbmZjL25jaS9oY2kuYy04NjYtfVxuLS1cbm5ldC9uZmMvbmNpL250Zi5jLTExLSAqICBBY2tub3dsZWRnZW1lbnRzOlxubmV0L25mYy9uY2kvbnRmLmM6MTI6ICogIFRoaXMgZmlsZSBpcyBiYXNlZCBvbiBoY2lfZXZlbnQuYywgd2hpY2ggd2FzIHdyaXR0ZW5cbm5ldC9uZmMvbmNpL250Zi5jLTEzLSAqICBieSBNYXhpbSBLcmFzbnlhbnNreS5cbi0tXG5uZXQvbmZjL25jaS9udGYuYz05NTQ9c3RhdGljIGludCBuY2lfbmZjZWVfZGlzY292ZXJfbnRmX3BhY2tldChzdHJ1Y3QgbmNpX2RldiAqbmRldixcbi0tXG5uZXQvbmZjL25jaS9udGYuYy05NjktXHQgKi9cbm5ldC9uZmMvbmNpL250Zi5jOjk3MDpcdG5kZXYtXHUwMDNlaGNpX2Rldi1cdTAwM2VuZmNlZV9pZCA9IG5mY2VlX250Zi1cdTAwM2VuZmNlZV9pZDtcbm5ldC9uZmMvbmNpL250Zi5jLTk3MS1cdG5kZXYtXHUwMDNlY3VyX3BhcmFtcy5pZCA9IG5mY2VlX250Zi1cdTAwM2VuZmNlZV9pZDtcbi0tXG5uZXQvbmZjL25jaS9yc3AuYy0xMC0gKiAgQWNrbm93bGVkZ2VtZW50czpcbm5ldC9uZmMvbmNpL3JzcC5jOjExOiAqICBUaGlzIGZpbGUgaXMgYmFzZWQgb24gaGNpX2V2ZW50LmMsIHdoaWNoIHdhcyB3cml0dGVuXG5uZXQvbmZjL25jaS9yc3AuYy0xMi0gKiAgYnkgTWF4aW0gS3Jhc255YW5za3kuXG4tLVxubmV0L25mYy9uY2kvcnNwLmM9Mjg1PXN0YXRpYyB2b2lkIG5jaV9jb3JlX2Nvbm5fY3JlYXRlX3JzcF9wYWNrZXQoc3RydWN0IG5jaV9kZXYgKm5kZXYsXG4tLVxubmV0L25mYy9uY2kvcnNwLmMtMzI2LVxubmV0L25mYy9uY2kvcnNwLmM6MzI3Olx0XHRpZiAobmRldi1cdTAwM2VjdXJfcGFyYW1zLmlkID09IG5kZXYtXHUwMDNlaGNpX2Rldi1cdTAwM2VuZmNlZV9pZClcbm5ldC9uZmMvbmNpL3JzcC5jOjMyODpcdFx0XHRuZGV2LVx1MDAzZWhjaV9kZXYtXHUwMDNlY29ubl9pbmZvID0gY29ubl9pbmZvO1xubmV0L25mYy9uY2kvcnNwLmMtMzI5LVx0XHRzcGluX3VubG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbi0tXG5uZXQvbmZjL25jaS9yc3AuYz0zNDA9c3RhdGljIHZvaWQgbmNpX2NvcmVfY29ubl9jbG9zZV9yc3BfcGFja2V0KHN0cnVjdCBuY2lfZGV2ICpuZGV2LFxuLS1cbm5ldC9uZmMvbmNpL3JzcC5jLTM1NC1cdFx0XHRcdG5kZXYtXHUwMDNlcmZfY29ubl9pbmZvID0gTlVMTDtcbm5ldC9uZmMvbmNpL3JzcC5jOjM1NTpcdFx0XHRpZiAoY29ubl9pbmZvID09IG5kZXYtXHUwMDNlaGNpX2Rldi1cdTAwM2Vjb25uX2luZm8pXG5uZXQvbmZjL25jaS9yc3AuYzozNTY6XHRcdFx0XHRuZGV2LVx1MDAzZWhjaV9kZXYtXHUwMDNlY29ubl9pbmZvID0gTlVMTDtcbm5ldC9uZmMvbmNpL3JzcC5jLTM1Ny1cdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAwOToyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MzIzNAoJCQkJCQkJb3V0cHV0OiAyNjYKCQkJCQkJCXRob3VnaHRzOiAxMTM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk5GQyBOQ0kgQ29uZmlndXJhdGlvbiBhbmQgRnV6emluZyBTdHJhdGVneSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIGZvciB0aGUgTkZDIE5DSSBzdWJzeXN0ZW0uIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gcGlucG9pbnQgd2hlcmUgYG5jaV9oY2lfc2VuZF9jbWRgIGxpdmVzLCBhbmQgaXQmIzM5O3MgaW4gYG5ldC9uZmMvbmNpL2hjaS5jYCwgcGFydCBvZiB0aGUgYE5GQ19OQ0lgIGNvbXBvbmVudC4gVGhlcmVmb3JlLCB0aGF0JiMzOTtzIGRlZmluaXRlbHkgbmVlZGVkLiBJJiMzOTtsbCBza2lwIG92ZXIgYE5GQ19IQ0lgIGJlY2F1c2UgdGhhdCYjMzk7cyBhIGRpZmZlcmVudCBpbXBsZW1lbnRhdGlvbiBpbiBgbmV0L25mYy9oY2kvYC4KClNvLCBmb3IgY29uZmlndXJhdGlvbiwgd2UgbmVlZCBgTkZDYCwgYE5GQ19OQ0lgLCBhbmQgYE5GQ19WSVJUVUFMX05DSWAuIExldCBtZSBkb3VibGUtY2hlY2sgdGhlIGV4YWN0IG5hbWUgb2YgYE5GQ19WSVJUVUFMX05DSWAgYW5kIHllcCwgaXQmIzM5O3MgZGVmaW5lZCBhcyBgQ09ORklHX05GQ19WSVJUVUFMX05DSWAgaW4gYGRyaXZlcnMvbmZjL0tjb25maWdgLgoKTm93LCB0aGUgaW1wb3J0YW50IHBhcnQ6IGZvY3VzIHN5bWJvbHMgZm9yIGZ1enppbmcuIEkgbmVlZCB0byBsaXN0IGZ1bmN0aW9ucyB0aGF0IGFyZSByZWxldmFudCB0byB0aGVzZSBjb25jdXJyZW5jeSBmaXhlcy4gIEkmIzM5O20gdGhpbmtpbmcgb2YgZm9jdXNpbmcgb24gdGhpbmdzIGxpa2UgYG5jaV9uZmNjX2xvb3BiYWNrYCwgYG5jaV90cmFuc2NlaXZlYCwgYG5jaV9zZW5kX2RhdGFgLCBgbmNpX3J4X2RhdGFfcGFja2V0YCwgdGhlIGltcG9ydGFudCBgbmNpX2hjaV9zZW5kX2NtZGAsIGFuZCB0aGVuIGFsc28gYG5jaV9oY2lfc2V0X3BhcmFtYCwgYW5kIGBuY2lfaGNpX2dldF9wYXJhbWAuIEFsc28gY29yZSBmdW5jdGlvbnMgc3VjaCBhcyBgbmNpX2NvcmVfY29ubl9jcmVhdGVfcnNwX3BhY2tldGAsIGBuY2lfY29yZV9jb25uX2Nsb3NlX3JzcF9wYWNrZXRgLCBhbmQgYG5jaV9yZl9kaXNjX3JzcF9wYWNrZXRgLgoKQSBjcnVjaWFsIHBvaW50IGlzIHdoZXRoZXIgYG5jaV9jb3JlX2Nvbm5fY3JlYXRlX3JzcF9wYWNrZXRgIGlzIHN0YXRpYyBvciBleHBvcnRlZC4gSXQgdHVybnMgb3V0IHRvIGJlIHN0YXRpYywgYnV0IHN5emthbGxlciBjYW4gc3RpbGwgcmVhY2ggaXQgdGhyb3VnaCBgbmNpX3JzcF9wYWNrZXRgLCB3aGljaCBpbiB0dXJuIGlzIGNhbGxlZCBmcm9tIGBuY2lfcnhfd29ya2Agd2hlbiBkYXRhIGNvbWVzIGZyb20gdGhlIE5GQyBjb250cm9sbGVyLiAgQmVjYXVzZSBgTkZDX1ZJUlRVQUxfTkNJYCBhbGxvd3Mgc2ltdWxhdGluZyBhbiBORkMgY29udHJvbGxlciwgd2UgY2FuIGluamVjdCByZXNwb25zZXMgYW5kIHRyaWdnZXIgYG5jaV9jb3JlX2Nvbm5fY3JlYXRlX3JzcF9wYWNrZXRgIGluZGlyZWN0bHkuIFRoZXJlZm9yZSwgSSBjYW4gc3RpbGwgbGlzdCBwYWNrZXQgaGFuZGxlcnMgaW4gZm9jdXMgc3ltYm9scy4gRXZlbiB0aG91Z2ggdGhleSBhcmUgc3RhdGljLCBzeXprYWxsZXIgd2lsbCBzdGlsbCBiZSBhYmxlIHRvIGZ1enogaXQgdmlhIGtjb3YuCgpMZXQmIzM5O3MgZXhwYW5kIHRoYXQgbGlzdCB3aXRoIGEgZmV3IG1vcmUgcGFja2V0IGhhbmRsZXJzIHRvIGVuc3VyZSBmdWxsIGNvdmVyYWdlOiBJJiMzOTttIGFkZGluZyBgbmNpX2NvcmVfY29ubl9jcmVkaXRzX250Zl9wYWNrZXRgLCBgbmNpX3JmX2ludGZfYWN0aXZhdGVkX250Zl9wYWNrZXRgIGFuZCBgbmNpX3JmX2RlYWN0aXZhdGVfbnRmX3BhY2tldGAuCgpTbyBoZXJlIGlzIHRoZSBmdWxsIGxpc3Q6IGBuY2lfbmZjY19sb29wYmFja2AsIGBuY2lfdHJhbnNjZWl2ZWAsIGBuY2lfc2VuZF9kYXRhYCwgYG5jaV9yeF9kYXRhX3BhY2tldGAsIGBuY2lfaGNpX3NlbmRfY21kYCwgYG5jaV9oY2lfc2V0X3BhcmFtYCwgYG5jaV9oY2lfZ2V0X3BhcmFtYCwgYG5jaV9jb3JlX2Nvbm5fY3JlYXRlX3JzcF9wYWNrZXRgLCBgbmNpX2NvcmVfY29ubl9jbG9zZV9yc3BfcGFja2V0YCwgYG5jaV9yZl9kaXNjX3JzcF9wYWNrZXRgLCBgbmNpX2NvcmVfY29ubl9jcmVkaXRzX250Zl9wYWNrZXRgLCBgbmNpX3JmX2ludGZfYWN0aXZhdGVkX250Zl9wYWNrZXRgLCBhbmQgYG5jaV9yZl9kZWFjdGl2YXRlX250Zl9wYWNrZXRgLiBJdCBzZWVtcyB0aGlzIGlzIGEgZ29vZCBsaXN0IG9mIGZ1bmN0aW9ucyB0aGF0IHdlcmUgdG91Y2hlZCBpbiB0aGlzIHBhdGNoLgoKSSB3aWxsIGRvdWJsZS1jaGVjayBhZ2FpbiB0aGF0IGBORkNfVklSVFVBTF9OQ0lgIGlzIHRoZSByaWdodCBjb25maWd1cmF0aW9uIG9wdGlvbiwgYW5kIHllcywgYGRyaXZlcnMvbmZjL0tjb25maWdgIGNvbmZpcm1zIHRoYXQgaXQgZGVwZW5kcyBvbiBgTkZDX05DSWAuCgpJJiMzOTtsbCBhbHNvIG1ha2Ugc3VyZSBubyBvdGhlciBjb25maWd1cmF0aW9ucyBhcmUgcmVxdWlyZWQuIEl0IGxvb2tzIGxpa2UgYE5GQ2AgYW5kIGBORkNfTkNJYCBhcmUgbmVjZXNzYXJ5IGFzIHdlbGwuIGBORkNfVklSVFVBTF9OQ0lgIGhhcyBhIGRlcGVuZGVuY3kgb24gYE5GQ19OQ0lgLgoKVGhlcmVmb3JlLCB0aGUgZmluYWwgc2V0dXAgaXM6CgoqICAgKipXb3J0aEZ1enppbmc6KiogYHRydWVgCiogICAqKkZvY3VzU3ltYm9sczoqKgogICAgKiAgIGBuY2lfbmZjY19sb29wYmFja2AKICAgICogICBgbmNpX3RyYW5zY2VpdmVgCiAgICAqICAgYG5jaV9zZW5kX2RhdGFgCiAgICAqICAgYG5jaV9yeF9kYXRhX3BhY2tldGAKICAgICogICBgbmNpX2hjaV9zZW5kX2NtZGAKICAgICogICBgbmNpX2hjaV9zZXRfcGFyYW1gCiAgICAqICAgYG5jaV9oY2lfZ2V0X3BhcmFtYAogICAgKiAgIGBuY2lfY29yZV9jb25uX2NyZWF0ZV9yc3BfcGFja2V0YAogICAgKiAgIGBuY2lfY29yZV9jb25uX2Nsb3NlX3JzcF9wYWNrZXRgCiAgICAqICAgYG5jaV9yZl9kaXNjX3JzcF9wYWNrZXRgCiAgICAqICAgYG5jaV9jb3JlCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMDk6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GQyYjMzQ7LAogICAgJiMzNDtORkNfTkNJJiMzNDssCiAgICAmIzM0O05GQ19WSVJUVUFMX05DSSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25jaV9uZmNjX2xvb3BiYWNrJiMzNDssCiAgICAmIzM0O25jaV90cmFuc2NlaXZlJiMzNDssCiAgICAmIzM0O25jaV9zZW5kX2RhdGEmIzM0OywKICAgICYjMzQ7bmNpX3J4X2RhdGFfcGFja2V0JiMzNDssCiAgICAmIzM0O25jaV9oY2lfc2VuZF9jbWQmIzM0OywKICAgICYjMzQ7bmNpX2hjaV9zZXRfcGFyYW0mIzM0OywKICAgICYjMzQ7bmNpX2hjaV9nZXRfcGFyYW0mIzM0OywKICAgICYjMzQ7bmNpX2NvcmVfY29ubl9jcmVhdGVfcnNwX3BhY2tldCYjMzQ7LAogICAgJiMzNDtuY2lfY29yZV9jb25uX2Nsb3NlX3JzcF9wYWNrZXQmIzM0OywKICAgICYjMzQ7bmNpX3JmX2Rpc2NfcnNwX3BhY2tldCYjMzQ7LAogICAgJiMzNDtuY2lfY29yZV9jb25uX2NyZWRpdHNfbnRmX3BhY2tldCYjMzQ7LAogICAgJiMzNDtuY2lfcmZfaW50Zl9hY3RpdmF0ZWRfbnRmX3BhY2tldCYjMzQ7LAogICAgJiMzNDtuY2lfcmZfZGVhY3RpdmF0ZV9udGZfcGFja2V0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGNvbmN1cnJlbmN5IGlzc3VlcyBpbiB0aGUgTkZDIE5DSSBjb3JlIGJ5IGludHJvZHVjaW5nIGEgc3BpbmxvY2sgdG8gcHJvdGVjdCBjb25uZWN0aW9uIGluZm8gbGlzdHMgYW5kIHBvaW50ZXJzLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIGRhdGEgdHJhbnNtaXNzaW9uLCByZWNlcHRpb24sIGFuZCBIQ0kgY29tbWFuZCBoYW5kbGluZywgd2hpY2ggYXJlIHJlYWNoYWJsZSB2aWEgdGhlIHZpcnR1YWwgTkNJIGRyaXZlci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkZDJiMzNDssCiAgICAmIzM0O05GQ19OQ0kmIzM0OywKICAgICYjMzQ7TkZDX1ZJUlRVQUxfTkNJJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmNpX25mY2NfbG9vcGJhY2smIzM0OywKICAgICYjMzQ7bmNpX3RyYW5zY2VpdmUmIzM0OywKICAgICYjMzQ7bmNpX3NlbmRfZGF0YSYjMzQ7LAogICAgJiMzNDtuY2lfcnhfZGF0YV9wYWNrZXQmIzM0OywKICAgICYjMzQ7bmNpX2hjaV9zZW5kX2NtZCYjMzQ7LAogICAgJiMzNDtuY2lfaGNpX3NldF9wYXJhbSYjMzQ7LAogICAgJiMzNDtuY2lfaGNpX2dldF9wYXJhbSYjMzQ7LAogICAgJiMzNDtuY2lfY29yZV9jb25uX2NyZWF0ZV9yc3BfcGFja2V0JiMzNDssCiAgICAmIzM0O25jaV9jb3JlX2Nvbm5fY2xvc2VfcnNwX3BhY2tldCYjMzQ7LAogICAgJiMzNDtuY2lfcmZfZGlzY19yc3BfcGFja2V0JiMzNDssCiAgICAmIzM0O25jaV9jb3JlX2Nvbm5fY3JlZGl0c19udGZfcGFja2V0JiMzNDssCiAgICAmIzM0O25jaV9yZl9pbnRmX2FjdGl2YXRlZF9udGZfcGFja2V0JiMzNDssCiAgICAmIzM0O25jaV9yZl9kZWFjdGl2YXRlX250Zl9wYWNrZXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgY29uY3VycmVuY3kgaXNzdWVzIGluIHRoZSBORkMgTkNJIGNvcmUgYnkgaW50cm9kdWNpbmcgYSBzcGlubG9jayB0byBwcm90ZWN0IGNvbm5lY3Rpb24gaW5mbyBsaXN0cyBhbmQgcG9pbnRlcnMuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGNvcmUgZGF0YSB0cmFuc21pc3Npb24sIHJlY2VwdGlvbiwgYW5kIEhDSSBjb21tYW5kIGhhbmRsaW5nLCB3aGljaCBhcmUgcmVhY2hhYmxlIHZpYSB0aGUgdmlydHVhbCBOQ0kgZHJpdmVyLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDk6MjU6MzEuNjg2NDc3OTA4WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODg1NzU1NTkyNDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZDXCIsXG4gICAgXCJORkNfTkNJXCIsXG4gICAgXCJORkNfVklSVFVBTF9OQ0lcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuY2lfbmZjY19sb29wYmFja1wiLFxuICAgIFwibmNpX3RyYW5zY2VpdmVcIixcbiAgICBcIm5jaV9zZW5kX2RhdGFcIixcbiAgICBcIm5jaV9yeF9kYXRhX3BhY2tldFwiLFxuICAgIFwibmNpX2hjaV9zZW5kX2NtZFwiLFxuICAgIFwibmNpX2hjaV9zZXRfcGFyYW1cIixcbiAgICBcIm5jaV9oY2lfZ2V0X3BhcmFtXCIsXG4gICAgXCJuY2lfY29yZV9jb25uX2NyZWF0ZV9yc3BfcGFja2V0XCIsXG4gICAgXCJuY2lfY29yZV9jb25uX2Nsb3NlX3JzcF9wYWNrZXRcIixcbiAgICBcIm5jaV9yZl9kaXNjX3JzcF9wYWNrZXRcIixcbiAgICBcIm5jaV9jb3JlX2Nvbm5fY3JlZGl0c19udGZfcGFja2V0XCIsXG4gICAgXCJuY2lfcmZfaW50Zl9hY3RpdmF0ZWRfbnRmX3BhY2tldFwiLFxuICAgIFwibmNpX3JmX2RlYWN0aXZhdGVfbnRmX3BhY2tldFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGNvbmN1cnJlbmN5IGlzc3VlcyBpbiB0aGUgTkZDIE5DSSBjb3JlIGJ5IGludHJvZHVjaW5nIGEgc3BpbmxvY2sgdG8gcHJvdGVjdCBjb25uZWN0aW9uIGluZm8gbGlzdHMgYW5kIHBvaW50ZXJzLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIGRhdGEgdHJhbnNtaXNzaW9uLCByZWNlcHRpb24sIGFuZCBIQ0kgY29tbWFuZCBoYW5kbGluZywgd2hpY2ggYXJlIHJlYWNoYWJsZSB2aWEgdGhlIHZpcnR1YWwgTkNJIGRyaXZlci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDk6MjU6MzEuNjg2NDg3MjM3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5OTY3MDYzNzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBhZTU1ZTg4ZDdhNGY3MTA1YjQ0ODY4MjJlM2FkZjUzODhmMWI4YTAwXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgSnVuIDMwIDA5OjI1OjI5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmZjL3N0LW5jaS9zZS5jIGIvZHJpdmVycy9uZmMvc3QtbmNpL3NlLmNcXG5pbmRleCA2MDdlYzc2OGViN2I0Yy4uMWY4ZTIyNjVlMjBiMDcgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZmMvc3QtbmNpL3NlLmNcXG4rKysgYi9kcml2ZXJzL25mYy9zdC1uY2kvc2UuY1xcbkBAIC01NDgsNiArNTQ4LDcgQEAgc3RhdGljIGludCBzdF9uY2lfaGNpX25ldHdvcmtfaW5pdChzdHJ1Y3QgbmNpX2RldiAqbmRldilcXG4gXFx0c3RydWN0IGNvcmVfY29ubl9jcmVhdGVfZGVzdF9zcGVjX3BhcmFtcyAqZGVzdF9wYXJhbXM7XFxuIFxcdHN0cnVjdCBkZXN0X3NwZWNfcGFyYW1zIHNwZWNfcGFyYW1zO1xcbiBcXHRzdHJ1Y3QgbmNpX2Nvbm5faW5mbyAgICAqY29ubl9pbmZvO1xcbitcXHR1OCBuZmNlZV9pZDtcXG4gXFx0aW50IHIsIGRldl9udW07XFxuIFxcbiBcXHRkZXN0X3BhcmFtcyA9XFxuQEAgLTU2OSw5ICs1NzAsMTQgQEAgc3RhdGljIGludCBzdF9uY2lfaGNpX25ldHdvcmtfaW5pdChzdHJ1Y3QgbmNpX2RldiAqbmRldilcXG4gXFx0aWYgKHIgIT0gTkNJX1NUQVRVU19PSylcXG4gXFx0XFx0Z290byBmcmVlX2Rlc3RfcGFyYW1zO1xcbiBcXG4rXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZuZGV2LVxcdTAwM2Vjb25uX2luZm9fbG9jayk7XFxuIFxcdGNvbm5faW5mbyA9IG5kZXYtXFx1MDAzZWhjaV9kZXYtXFx1MDAzZWNvbm5faW5mbztcXG4tXFx0aWYgKCFjb25uX2luZm8pXFxuK1xcdGlmICghY29ubl9pbmZvKSB7XFxuK1xcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZuZGV2LVxcdTAwM2Vjb25uX2luZm9fbG9jayk7XFxuIFxcdFxcdGdvdG8gZnJlZV9kZXN0X3BhcmFtcztcXG4rXFx0fVxcbitcXHRuZmNlZV9pZCA9IGNvbm5faW5mby1cXHUwMDNlZGVzdF9wYXJhbXMtXFx1MDAzZWlkO1xcbitcXHRzcGluX3VubG9ja19iaChcXHUwMDI2bmRldi1cXHUwMDNlY29ubl9pbmZvX2xvY2spO1xcbiBcXG4gXFx0bmRldi1cXHUwMDNlaGNpX2Rldi1cXHUwMDNlaW5pdF9kYXRhLmdhdGVfY291bnQgPSBBUlJBWV9TSVpFKHN0X25jaV9nYXRlcyk7XFxuIFxcdG1lbWNweShuZGV2LVxcdTAwM2VoY2lfZGV2LVxcdTAwM2Vpbml0X2RhdGEuZ2F0ZXMsIHN0X25jaV9nYXRlcyxcXG5AQCAtNjAxLDEzICs2MDcsOSBAQCBzdGF0aWMgaW50IHN0X25jaV9oY2lfbmV0d29ya19pbml0KHN0cnVjdCBuY2lfZGV2ICpuZGV2KVxcbiBcXHQgKiBIQ0kgd2lsbCBiZSB1c2VkIGhlcmUgb25seSBmb3IgcHJvcHJpZXRhcnkgY29tbWFuZHMuXFxuIFxcdCAqL1xcbiBcXHRpZiAodGVzdF9iaXQoU1RfTkNJX0ZBQ1RPUllfTU9ERSwgXFx1MDAyNmluZm8tXFx1MDAzZWZsYWdzKSlcXG4tXFx0XFx0ciA9IG5jaV9uZmNlZV9tb2RlX3NldChuZGV2LFxcbi1cXHRcXHRcXHRcXHQgICAgICAgbmRldi1cXHUwMDNlaGNpX2Rldi1cXHUwMDNlY29ubl9pbmZvLVxcdTAwM2VkZXN0X3BhcmFtcy1cXHUwMDNlaWQsXFxuLVxcdFxcdFxcdFxcdCAgICAgICBOQ0lfTkZDRUVfRElTQUJMRSk7XFxuK1xcdFxcdHIgPSBuY2lfbmZjZWVfbW9kZV9zZXQobmRldiwgbmZjZWVfaWQsIE5DSV9ORkNFRV9ESVNBQkxFKTtcXG4gXFx0ZWxzZVxcbi1cXHRcXHRyID0gbmNpX25mY2VlX21vZGVfc2V0KG5kZXYsXFxuLVxcdFxcdFxcdFxcdCAgICAgICBuZGV2LVxcdTAwM2VoY2lfZGV2LVxcdTAwM2Vjb25uX2luZm8tXFx1MDAzZWRlc3RfcGFyYW1zLVxcdTAwM2VpZCxcXG4tXFx0XFx0XFx0XFx0ICAgICAgIE5DSV9ORkNFRV9FTkFCTEUpO1xcbitcXHRcXHRyID0gbmNpX25mY2VlX21vZGVfc2V0KG5kZXYsIG5mY2VlX2lkLCBOQ0lfTkZDRUVfRU5BQkxFKTtcXG4gXFxuIGZyZWVfZGVzdF9wYXJhbXM6XFxuIFxcdGtmcmVlKGRlc3RfcGFyYW1zKTtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmZjL25jaV9jb3JlLmggYi9pbmNsdWRlL25ldC9uZmMvbmNpX2NvcmUuaFxcbmluZGV4IDY2NGQ1MDU4ZTY2ZTAxLi5hNWIxODZmMjczZDk3NCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL25ldC9uZmMvbmNpX2NvcmUuaFxcbisrKyBiL2luY2x1ZGUvbmV0L25mYy9uY2lfY29yZS5oXFxuQEAgLTE5LDYgKzE5LDcgQEBcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pbnRlcnJ1cHQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NrYnVmZi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvc3BpbmxvY2suaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3R0eS5oXFx1MDAzZVxcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9uZmMvbmZjLmhcXHUwMDNlXFxuQEAgLTIyNyw2ICsyMjgsOCBAQCBzdHJ1Y3QgbmNpX2RldiB7XFxuIFxcdHN0cnVjdCBza19idWZmX2hlYWRcXHR0eF9xO1xcbiBcXG4gXFx0c3RydWN0IG11dGV4XFx0XFx0cmVxX2xvY2s7XFxuK1xcdC8qIFNlcmlhbGl6ZXMgY29ubl9pbmZvX2xpc3QgYW5kIGNvbm5faW5mbyBwb2ludGVyIGFsaWFzIHVwZGF0ZXMuICovXFxuK1xcdHNwaW5sb2NrX3RcXHRcXHRjb25uX2luZm9fbG9jaztcXG4gXFx0c3RydWN0IGNvbXBsZXRpb25cXHRyZXFfY29tcGxldGlvbjtcXG4gXFx0X191MzJcXHRcXHRcXHRyZXFfc3RhdHVzO1xcbiBcXHRfX3UzMlxcdFxcdFxcdHJlcV9yZXN1bHQ7XFxuQEAgLTM4Miw4ICszODUsMTEgQEAgdm9pZCBuY2lfY2xlYXJfdGFyZ2V0X2xpc3Qoc3RydWN0IG5jaV9kZXYgKm5kZXYpO1xcbiAjZGVmaW5lIE5DSV9SRVFfQ0FOQ0VMRURcXHQyXFxuIFxcbiB2b2lkIG5jaV9yZXFfY29tcGxldGUoc3RydWN0IG5jaV9kZXYgKm5kZXYsIGludCByZXN1bHQpO1xcbi1zdHJ1Y3QgbmNpX2Nvbm5faW5mbyAqbmNpX2dldF9jb25uX2luZm9fYnlfY29ubl9pZChzdHJ1Y3QgbmNpX2RldiAqbmRldixcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgaW50IGNvbm5faWQpO1xcbitzdHJ1Y3QgbmNpX2Nvbm5faW5mbyAqbmNpX2dldF9jb25uX2luZm9fYnlfY29ubl9pZF9sb2NrZWQoc3RydWN0IG5jaV9kZXYgKm5kZXYsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgaW50IGNvbm5faWQpO1xcbitpbnQgbmNpX2dldF9jb25uX2luZm9fYnlfZGVzdF90eXBlX3BhcmFtc19sb2NrZWQoc3RydWN0IG5jaV9kZXYgKm5kZXYsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCB1OCBkZXN0X3R5cGUsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgZGVzdF9zcGVjX3BhcmFtcyAqcGFyYW1zKTtcXG4gaW50IG5jaV9nZXRfY29ubl9pbmZvX2J5X2Rlc3RfdHlwZV9wYXJhbXMoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHU4IGRlc3RfdHlwZSxcXG4gXFx0XFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgZGVzdF9zcGVjX3BhcmFtcyAqcGFyYW1zKTtcXG4gXFxuZGlmZiAtLWdpdCBhL25ldC9uZmMvbmNpL2NvcmUuYyBiL25ldC9uZmMvbmNpL2NvcmUuY1xcbmluZGV4IDVmNDZjNGI1NzIwZjZjLi41NzU5NWE4MjljOGIwNiAxMDA2NDRcXG4tLS0gYS9uZXQvbmZjL25jaS9jb3JlLmNcXG4rKysgYi9uZXQvbmZjL25jaS9jb3JlLmNcXG5AQCAtNDAsOCArNDAsOCBAQCBzdGF0aWMgdm9pZCBuY2lfY21kX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcXG4gc3RhdGljIHZvaWQgbmNpX3J4X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcXG4gc3RhdGljIHZvaWQgbmNpX3R4X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcXG4gXFxuLXN0cnVjdCBuY2lfY29ubl9pbmZvICpuY2lfZ2V0X2Nvbm5faW5mb19ieV9jb25uX2lkKHN0cnVjdCBuY2lfZGV2ICpuZGV2LFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICBpbnQgY29ubl9pZClcXG4rc3RydWN0IG5jaV9jb25uX2luZm8gKm5jaV9nZXRfY29ubl9pbmZvX2J5X2Nvbm5faWRfbG9ja2VkKHN0cnVjdCBuY2lfZGV2ICpuZGV2LFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIGludCBjb25uX2lkKVxcbiB7XFxuIFxcdHN0cnVjdCBuY2lfY29ubl9pbmZvICpjb25uX2luZm87XFxuIFxcbkBAIC01Myw4ICs1Myw5IEBAIHN0cnVjdCBuY2lfY29ubl9pbmZvICpuY2lfZ2V0X2Nvbm5faW5mb19ieV9jb25uX2lkKHN0cnVjdCBuY2lfZGV2ICpuZGV2LFxcbiBcXHRyZXR1cm4gTlVMTDtcXG4gfVxcbiBcXG4taW50IG5jaV9nZXRfY29ubl9pbmZvX2J5X2Rlc3RfdHlwZV9wYXJhbXMoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHU4IGRlc3RfdHlwZSxcXG4tXFx0XFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgZGVzdF9zcGVjX3BhcmFtcyAqcGFyYW1zKVxcbitpbnQgbmNpX2dldF9jb25uX2luZm9fYnlfZGVzdF90eXBlX3BhcmFtc19sb2NrZWQoc3RydWN0IG5jaV9kZXYgKm5kZXYsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCB1OCBkZXN0X3R5cGUsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgZGVzdF9zcGVjX3BhcmFtcyAqcGFyYW1zKVxcbiB7XFxuIFxcdGNvbnN0IHN0cnVjdCBuY2lfY29ubl9pbmZvICpjb25uX2luZm87XFxuIFxcbkBAIC03MSw2ICs3MiwxOSBAQCBpbnQgbmNpX2dldF9jb25uX2luZm9fYnlfZGVzdF90eXBlX3BhcmFtcyhzdHJ1Y3QgbmNpX2RldiAqbmRldiwgdTggZGVzdF90eXBlLFxcbiBcXG4gXFx0cmV0dXJuIC1FSU5WQUw7XFxuIH1cXG4rXFxuK2ludCBuY2lfZ2V0X2Nvbm5faW5mb19ieV9kZXN0X3R5cGVfcGFyYW1zKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCB1OCBkZXN0X3R5cGUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IGRlc3Rfc3BlY19wYXJhbXMgKnBhcmFtcylcXG4re1xcbitcXHRpbnQgY29ubl9pZDtcXG4rXFxuK1xcdHNwaW5fbG9ja19iaChcXHUwMDI2bmRldi1cXHUwMDNlY29ubl9pbmZvX2xvY2spO1xcbitcXHRjb25uX2lkID0gbmNpX2dldF9jb25uX2luZm9fYnlfZGVzdF90eXBlX3BhcmFtc19sb2NrZWQobmRldiwgZGVzdF90eXBlLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgcGFyYW1zKTtcXG4rXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNm5kZXYtXFx1MDAzZWNvbm5faW5mb19sb2NrKTtcXG4rXFxuK1xcdHJldHVybiBjb25uX2lkO1xcbit9XFxuIEVYUE9SVF9TWU1CT0wobmNpX2dldF9jb25uX2luZm9fYnlfZGVzdF90eXBlX3BhcmFtcyk7XFxuIFxcbiAvKiAtLS0tIE5DSSByZXF1ZXN0cyAtLS0tICovXFxuQEAgLTQxMSwxMyArNDI1LDE3IEBAIHN0YXRpYyB2b2lkIG5jaV9uZmNjX2xvb3BiYWNrX2NiKHZvaWQgKmNvbnRleHQsIHN0cnVjdCBza19idWZmICpza2IsIGludCBlcnIpXFxuIFxcdHN0cnVjdCBuY2lfZGV2ICpuZGV2ID0gKHN0cnVjdCBuY2lfZGV2ICopY29udGV4dDtcXG4gXFx0c3RydWN0IG5jaV9jb25uX2luZm8gKmNvbm5faW5mbztcXG4gXFxuLVxcdGNvbm5faW5mbyA9IG5jaV9nZXRfY29ubl9pbmZvX2J5X2Nvbm5faWQobmRldiwgbmRldi1cXHUwMDNlY3VyX2Nvbm5faWQpO1xcbitcXHRzcGluX2xvY2tfYmgoXFx1MDAyNm5kZXYtXFx1MDAzZWNvbm5faW5mb19sb2NrKTtcXG4rXFx0Y29ubl9pbmZvID0gbmNpX2dldF9jb25uX2luZm9fYnlfY29ubl9pZF9sb2NrZWQobmRldixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0bmRldi1cXHUwMDNlY3VyX2Nvbm5faWQpO1xcbiBcXHRpZiAoIWNvbm5faW5mbykge1xcbitcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2bmRldi1cXHUwMDNlY29ubl9pbmZvX2xvY2spO1xcbiBcXHRcXHRuY2lfcmVxX2NvbXBsZXRlKG5kZXYsIE5DSV9TVEFUVVNfUkVKRUNURUQpO1xcbiBcXHRcXHRyZXR1cm47XFxuIFxcdH1cXG4gXFxuIFxcdGNvbm5faW5mby1cXHUwMDNlcnhfc2tiID0gc2tiO1xcbitcXHRzcGluX3VubG9ja19iaChcXHUwMDI2bmRldi1cXHUwMDNlY29ubl9pbmZvX2xvY2spO1xcbiBcXG4gXFx0bmNpX3JlcV9jb21wbGV0ZShuZGV2LCBOQ0lfU1RBVFVTX09LKTtcXG4gfVxcbkBAIC00NDMsMTMgKzQ2MSwxNyBAQCBpbnQgbmNpX25mY2NfbG9vcGJhY2soc3RydWN0IG5jaV9kZXYgKm5kZXYsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBkYXRhX2xlbixcXG4gXFx0XFx0XFx0XFx0XFx0TlVMTCk7XFxuIFxcdH1cXG4gXFxuLVxcdGNvbm5faW5mbyA9IG5jaV9nZXRfY29ubl9pbmZvX2J5X2Nvbm5faWQobmRldiwgY29ubl9pZCk7XFxuLVxcdGlmICghY29ubl9pbmZvKVxcbitcXHRzcGluX2xvY2tfYmgoXFx1MDAyNm5kZXYtXFx1MDAzZWNvbm5faW5mb19sb2NrKTtcXG4rXFx0Y29ubl9pbmZvID0gbmNpX2dldF9jb25uX2luZm9fYnlfY29ubl9pZF9sb2NrZWQobmRldiwgY29ubl9pZCk7XFxuK1xcdGlmICghY29ubl9pbmZvKSB7XFxuK1xcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZuZGV2LVxcdTAwM2Vjb25uX2luZm9fbG9jayk7XFxuIFxcdFxcdHJldHVybiAtRVBST1RPO1xcbitcXHR9XFxuIFxcbiBcXHQvKiBzdG9yZSBjYiBhbmQgY29udGV4dCB0byBiZSB1c2VkIG9uIHJlY2VpdmluZyBkYXRhICovXFxuIFxcdGNvbm5faW5mby1cXHUwMDNlZGF0YV9leGNoYW5nZV9jYiA9IG5jaV9uZmNjX2xvb3BiYWNrX2NiO1xcbiBcXHRjb25uX2luZm8tXFx1MDAzZWRhdGFfZXhjaGFuZ2VfY2JfY29udGV4dCA9IG5kZXY7XFxuK1xcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZuZGV2LVxcdTAwM2Vjb25uX2luZm9fbG9jayk7XFxuIFxcbiBcXHRza2IgPSBuY2lfc2tiX2FsbG9jKG5kZXYsIE5DSV9EQVRBX0hEUl9TSVpFICsgZGF0YV9sZW4sIEdGUF9LRVJORUwpO1xcbiBcXHRpZiAoIXNrYilcXG5AQCAtNDY0LDggKzQ4NiwxNSBAQCBpbnQgbmNpX25mY2NfbG9vcGJhY2soc3RydWN0IG5jaV9kZXYgKm5kZXYsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBkYXRhX2xlbixcXG4gXFx0bmRldi1cXHUwMDNlY3VyX2Nvbm5faWQgPSBjb25uX2lkO1xcbiBcXHRyID0gbmNpX3JlcXVlc3QobmRldiwgbmNpX3NlbmRfZGF0YV9yZXEsIFxcdTAwMjZsb29wYmFja19kYXRhLFxcbiBcXHRcXHRcXHRtc2Vjc190b19qaWZmaWVzKE5DSV9EQVRBX1RJTUVPVVQpKTtcXG4tXFx0aWYgKHIgPT0gTkNJX1NUQVRVU19PSyBcXHUwMDI2XFx1MDAyNiByZXNwKVxcbi1cXHRcXHQqcmVzcCA9IGNvbm5faW5mby1cXHUwMDNlcnhfc2tiO1xcbitcXHRpZiAociA9PSBOQ0lfU1RBVFVTX09LIFxcdTAwMjZcXHUwMDI2IHJlc3ApIHtcXG4rXFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZuZGV2LVxcdTAwM2Vjb25uX2luZm9fbG9jayk7XFxuK1xcdFxcdGNvbm5faW5mbyA9IG5jaV9nZXRfY29ubl9pbmZvX2J5X2Nvbm5faWRfbG9ja2VkKG5kZXYsIGNvbm5faWQpO1xcbitcXHRcXHRpZiAoY29ubl9pbmZvKVxcbitcXHRcXHRcXHQqcmVzcCA9IGNvbm5faW5mby1cXHUwMDNlcnhfc2tiO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdHIgPSAtRVBST1RPO1xcbitcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2bmRldi1cXHUwMDNlY29ubl9pbmZvX2xvY2spO1xcbitcXHR9XFxuIFxcbiBcXHRyZXR1cm4gcjtcXG4gfVxcbkBAIC0xMDQ1LDEyICsxMDc0LDYgQEAgc3RhdGljIGludCBuY2lfdHJhbnNjZWl2ZShzdHJ1Y3QgbmZjX2RldiAqbmZjX2Rldiwgc3RydWN0IG5mY190YXJnZXQgKnRhcmdldCxcXG4gXFx0aW50IHJjO1xcbiBcXHRzdHJ1Y3QgbmNpX2Nvbm5faW5mbyAqY29ubl9pbmZvO1xcbiBcXG4tXFx0Y29ubl9pbmZvID0gbmRldi1cXHUwMDNlcmZfY29ubl9pbmZvO1xcbi1cXHRpZiAoIWNvbm5faW5mbykge1xcbi1cXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4tXFx0XFx0cmV0dXJuIC1FUFJPVE87XFxuLVxcdH1cXG4tXFxuIFxcdHByX2RlYnVnKFxcXCJ0YXJnZXRfaWR4ICVkLCBsZW4gJWRcXFxcblxcXCIsIHRhcmdldC1cXHUwMDNlaWR4LCBza2ItXFx1MDAzZWxlbik7XFxuIFxcbiBcXHRpZiAoIW5kZXYtXFx1MDAzZXRhcmdldF9hY3RpdmVfcHJvdCkge1xcbkBAIC0xMDY0LDkgKzEwODcsMTkgQEAgc3RhdGljIGludCBuY2lfdHJhbnNjZWl2ZShzdHJ1Y3QgbmZjX2RldiAqbmZjX2Rldiwgc3RydWN0IG5mY190YXJnZXQgKnRhcmdldCxcXG4gXFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4gXFx0fVxcbiBcXG4rXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZuZGV2LVxcdTAwM2Vjb25uX2luZm9fbG9jayk7XFxuK1xcdGNvbm5faW5mbyA9IG5kZXYtXFx1MDAzZXJmX2Nvbm5faW5mbztcXG4rXFx0aWYgKCFjb25uX2luZm8pIHtcXG4rXFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNm5kZXYtXFx1MDAzZWNvbm5faW5mb19sb2NrKTtcXG4rXFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuK1xcdFxcdGNsZWFyX2JpdChOQ0lfREFUQV9FWENIQU5HRSwgXFx1MDAyNm5kZXYtXFx1MDAzZWZsYWdzKTtcXG4rXFx0XFx0cmV0dXJuIC1FUFJPVE87XFxuK1xcdH1cXG4rXFxuIFxcdC8qIHN0b3JlIGNiIGFuZCBjb250ZXh0IHRvIGJlIHVzZWQgb24gcmVjZWl2aW5nIGRhdGEgKi9cXG4gXFx0Y29ubl9pbmZvLVxcdTAwM2VkYXRhX2V4Y2hhbmdlX2NiID0gY2I7XFxuIFxcdGNvbm5faW5mby1cXHUwMDNlZGF0YV9leGNoYW5nZV9jYl9jb250ZXh0ID0gY2JfY29udGV4dDtcXG4rXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNm5kZXYtXFx1MDAzZWNvbm5faW5mb19sb2NrKTtcXG4gXFxuIFxcdHJjID0gbmNpX3NlbmRfZGF0YShuZGV2LCBOQ0lfU1RBVElDX1JGX0NPTk5fSUQsIHNrYik7XFxuIFxcdGlmIChyYylcXG5AQCAtMTI4OCw2ICsxMzIxLDcgQEAgaW50IG5jaV9yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IG5jaV9kZXYgKm5kZXYpXFxuIFxcdHRpbWVyX3NldHVwKFxcdTAwMjZuZGV2LVxcdTAwM2VkYXRhX3RpbWVyLCBuY2lfZGF0YV90aW1lciwgMCk7XFxuIFxcbiBcXHRtdXRleF9pbml0KFxcdTAwMjZuZGV2LVxcdTAwM2VyZXFfbG9jayk7XFxuK1xcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZuZGV2LVxcdTAwM2Vjb25uX2luZm9fbG9jayk7XFxuIFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZuZGV2LVxcdTAwM2Vjb25uX2luZm9fbGlzdCk7XFxuIFxcbiBcXHRyYyA9IG5mY19yZWdpc3Rlcl9kZXZpY2UobmRldi1cXHUwMDNlbmZjX2Rldik7XFxuQEAgLTEzMzMsMTEgKzEzNjcsMTYgQEAgdm9pZCBuY2lfdW5yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IG5jaV9kZXYgKm5kZXYpXFxuIFxcdGRlc3Ryb3lfd29ya3F1ZXVlKG5kZXYtXFx1MDAzZXJ4X3dxKTtcXG4gXFx0ZGVzdHJveV93b3JrcXVldWUobmRldi1cXHUwMDNldHhfd3EpO1xcbiBcXG4rXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZuZGV2LVxcdTAwM2Vjb25uX2luZm9fbG9jayk7XFxuIFxcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjb25uX2luZm8sIG4sIFxcdTAwMjZuZGV2LVxcdTAwM2Vjb25uX2luZm9fbGlzdCwgbGlzdCkge1xcbiBcXHRcXHRsaXN0X2RlbChcXHUwMDI2Y29ubl9pbmZvLVxcdTAwM2VsaXN0KTtcXG4rXFx0XFx0aWYgKGNvbm5faW5mbyA9PSBuZGV2LVxcdTAwM2VyZl9jb25uX2luZm8pXFxuK1xcdFxcdFxcdG5kZXYtXFx1MDAzZXJmX2Nvbm5faW5mbyA9IE5VTEw7XFxuK1xcdFxcdGlmIChjb25uX2luZm8gPT0gbmRldi1cXHUwMDNlaGNpX2Rldi1cXHUwMDNlY29ubl9pbmZvKVxcbitcXHRcXHRcXHRuZGV2LVxcdTAwM2VoY2lfZGV2LVxcdTAwM2Vjb25uX2luZm8gPSBOVUxMO1xcbiBcXHRcXHQvKiBjb25uX2luZm8gaXMgYWxsb2NhdGVkIHdpdGggZGV2bV9remFsbG9jICovXFxuIFxcdH1cXG4tXFxuK1xcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZuZGV2LVxcdTAwM2Vjb25uX2luZm9fbG9jayk7XFxuIFxcdG5mY19yZW1vdmVfZGV2aWNlKG5kZXYtXFx1MDAzZW5mY19kZXYpO1xcbiB9XFxuIEVYUE9SVF9TWU1CT0wobmNpX3VucmVnaXN0ZXJfZGV2aWNlKTtcXG5AQCAtMTUyMywyMyArMTU2MiwzMSBAQCBzdGF0aWMgdm9pZCBuY2lfdHhfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuIFxcdHN0cnVjdCBuY2lfY29ubl9pbmZvICpjb25uX2luZm87XFxuIFxcdHN0cnVjdCBza19idWZmICpza2I7XFxuIFxcbi1cXHRjb25uX2luZm8gPSBuY2lfZ2V0X2Nvbm5faW5mb19ieV9jb25uX2lkKG5kZXYsIG5kZXYtXFx1MDAzZWN1cl9jb25uX2lkKTtcXG4tXFx0aWYgKCFjb25uX2luZm8pXFxuLVxcdFxcdHJldHVybjtcXG4rXFx0LyogU2VuZCBxdWV1ZWQgdHggZGF0YSAqL1xcbitcXHRmb3IgKDs7KSB7XFxuK1xcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2bmRldi1cXHUwMDNlY29ubl9pbmZvX2xvY2spO1xcbitcXHRcXHRjb25uX2luZm8gPSBuY2lfZ2V0X2Nvbm5faW5mb19ieV9jb25uX2lkX2xvY2tlZChuZGV2LFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRuZGV2LVxcdTAwM2VjdXJfY29ubl9pZCk7XFxuK1xcdFxcdGlmICghY29ubl9pbmZvKVxcbitcXHRcXHRcXHRnb3RvIHVubG9jaztcXG4gXFxuLVxcdHByX2RlYnVnKFxcXCJjcmVkaXRzX2NudCAlZFxcXFxuXFxcIiwgYXRvbWljX3JlYWQoXFx1MDAyNmNvbm5faW5mby1cXHUwMDNlY3JlZGl0c19jbnQpKTtcXG4rXFx0XFx0cHJfZGVidWcoXFxcImNyZWRpdHNfY250ICVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgYXRvbWljX3JlYWQoXFx1MDAyNmNvbm5faW5mby1cXHUwMDNlY3JlZGl0c19jbnQpKTtcXG4rXFxuK1xcdFxcdGlmICghYXRvbWljX3JlYWQoXFx1MDAyNmNvbm5faW5mby1cXHUwMDNlY3JlZGl0c19jbnQpKVxcbitcXHRcXHRcXHRnb3RvIHVubG9jaztcXG4gXFxuLVxcdC8qIFNlbmQgcXVldWVkIHR4IGRhdGEgKi9cXG4tXFx0d2hpbGUgKGF0b21pY19yZWFkKFxcdTAwMjZjb25uX2luZm8tXFx1MDAzZWNyZWRpdHNfY250KSkge1xcbiBcXHRcXHRza2IgPSBza2JfZGVxdWV1ZShcXHUwMDI2bmRldi1cXHUwMDNldHhfcSk7XFxuIFxcdFxcdGlmICghc2tiKVxcbi1cXHRcXHRcXHRyZXR1cm47XFxuLVxcdFxcdGtjb3ZfcmVtb3RlX3N0YXJ0X2NvbW1vbihza2JfZ2V0X2tjb3ZfaGFuZGxlKHNrYikpO1xcbitcXHRcXHRcXHRnb3RvIHVubG9jaztcXG4gXFxuIFxcdFxcdC8qIENoZWNrIGlmIGRhdGEgZmxvdyBjb250cm9sIGlzIHVzZWQgKi9cXG4gXFx0XFx0aWYgKGF0b21pY19yZWFkKFxcdTAwMjZjb25uX2luZm8tXFx1MDAzZWNyZWRpdHNfY250KSAhPVxcbiBcXHRcXHQgICAgTkNJX0RBVEFfRkxPV19DT05UUk9MX05PVF9VU0VEKVxcbiBcXHRcXHRcXHRhdG9taWNfZGVjKFxcdTAwMjZjb25uX2luZm8tXFx1MDAzZWNyZWRpdHNfY250KTtcXG4rXFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNm5kZXYtXFx1MDAzZWNvbm5faW5mb19sb2NrKTtcXG4rXFxuK1xcdFxcdGtjb3ZfcmVtb3RlX3N0YXJ0X2NvbW1vbihza2JfZ2V0X2tjb3ZfaGFuZGxlKHNrYikpO1xcbiBcXG4gXFx0XFx0cHJfZGVidWcoXFxcIk5DSSBUWDogTVQ9ZGF0YSwgUEJGPSVkLCBjb25uX2lkPSVkLCBwbGVuPSVkXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHQgbmNpX3BiZihza2ItXFx1MDAzZWRhdGEpLFxcbkBAIC0xNTUyLDYgKzE1OTksOSBAQCBzdGF0aWMgdm9pZCBuY2lfdHhfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuIFxcdFxcdFxcdCAgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoTkNJX0RBVEFfVElNRU9VVCkpO1xcbiBcXHRcXHRrY292X3JlbW90ZV9zdG9wKCk7XFxuIFxcdH1cXG4rXFxuK3VubG9jazpcXG4rXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNm5kZXYtXFx1MDAzZWNvbm5faW5mb19sb2NrKTtcXG4gfVxcbiBcXG4gLyogLS0tLS0gTkNJIFJYIHdvcmtlciB0aHJlYWQgKGRhdGEgXFx1MDAyNiBjb250cm9sKSAtLS0tLSAqL1xcbmRpZmYgLS1naXQgYS9uZXQvbmZjL25jaS9kYXRhLmMgYi9uZXQvbmZjL25jaS9kYXRhLmNcXG5pbmRleCA1Zjk4YzczZGI1YWZkZS4uMzM0YzBlNWE5NGRiYzQgMTAwNjQ0XFxuLS0tIGEvbmV0L25mYy9uY2kvZGF0YS5jXFxuKysrIGIvbmV0L25mYy9uY2kvZGF0YS5jXFxuQEAgLTMwLDggKzMwLDEwIEBAIHZvaWQgbmNpX2RhdGFfZXhjaGFuZ2VfY29tcGxldGUoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdGRhdGFfZXhjaGFuZ2VfY2JfdCBjYjtcXG4gXFx0dm9pZCAqY2JfY29udGV4dDtcXG4gXFxuLVxcdGNvbm5faW5mbyA9IG5jaV9nZXRfY29ubl9pbmZvX2J5X2Nvbm5faWQobmRldiwgY29ubl9pZCk7XFxuK1xcdHNwaW5fbG9ja19iaChcXHUwMDI2bmRldi1cXHUwMDNlY29ubl9pbmZvX2xvY2spO1xcbitcXHRjb25uX2luZm8gPSBuY2lfZ2V0X2Nvbm5faW5mb19ieV9jb25uX2lkX2xvY2tlZChuZGV2LCBjb25uX2lkKTtcXG4gXFx0aWYgKCFjb25uX2luZm8pIHtcXG4rXFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNm5kZXYtXFx1MDAzZWNvbm5faW5mb19sb2NrKTtcXG4gXFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuIFxcdFxcdGNsZWFyX2JpdChOQ0lfREFUQV9FWENIQU5HRSwgXFx1MDAyNm5kZXYtXFx1MDAzZWZsYWdzKTtcXG4gXFx0XFx0cmV0dXJuO1xcbkBAIC0zOSw2ICs0MSw3IEBAIHZvaWQgbmNpX2RhdGFfZXhjaGFuZ2VfY29tcGxldGUoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcbiBcXHRjYiA9IGNvbm5faW5mby1cXHUwMDNlZGF0YV9leGNoYW5nZV9jYjtcXG4gXFx0Y2JfY29udGV4dCA9IGNvbm5faW5mby1cXHUwMDNlZGF0YV9leGNoYW5nZV9jYl9jb250ZXh0O1xcbitcXHRzcGluX3VubG9ja19iaChcXHUwMDI2bmRldi1cXHUwMDNlY29ubl9pbmZvX2xvY2spO1xcbiBcXG4gXFx0cHJfZGVidWcoXFxcImxlbiAlZCwgZXJyICVkXFxcXG5cXFwiLCBza2IgPyBza2ItXFx1MDAzZWxlbiA6IDAsIGVycik7XFxuIFxcbkBAIC04NSwxOSArODgsMjYgQEAgc3RhdGljIGlubGluZSB2b2lkIG5jaV9wdXNoX2RhdGFfaGRyKHN0cnVjdCBuY2lfZGV2ICpuZGV2LFxcbiBpbnQgbmNpX2Nvbm5fbWF4X2RhdGFfcGt0X3BheWxvYWRfc2l6ZShzdHJ1Y3QgbmNpX2RldiAqbmRldiwgX191OCBjb25uX2lkKVxcbiB7XFxuIFxcdGNvbnN0IHN0cnVjdCBuY2lfY29ubl9pbmZvICpjb25uX2luZm87XFxuK1xcdGludCBtYXhfcGt0X3BheWxvYWRfbGVuO1xcbiBcXG4tXFx0Y29ubl9pbmZvID0gbmNpX2dldF9jb25uX2luZm9fYnlfY29ubl9pZChuZGV2LCBjb25uX2lkKTtcXG4tXFx0aWYgKCFjb25uX2luZm8pXFxuK1xcdHNwaW5fbG9ja19iaChcXHUwMDI2bmRldi1cXHUwMDNlY29ubl9pbmZvX2xvY2spO1xcbitcXHRjb25uX2luZm8gPSBuY2lfZ2V0X2Nvbm5faW5mb19ieV9jb25uX2lkX2xvY2tlZChuZGV2LCBjb25uX2lkKTtcXG4rXFx0aWYgKCFjb25uX2luZm8pIHtcXG4rXFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNm5kZXYtXFx1MDAzZWNvbm5faW5mb19sb2NrKTtcXG4gXFx0XFx0cmV0dXJuIC1FUFJPVE87XFxuK1xcdH1cXG4rXFx0bWF4X3BrdF9wYXlsb2FkX2xlbiA9IGNvbm5faW5mby1cXHUwMDNlbWF4X3BrdF9wYXlsb2FkX2xlbjtcXG4rXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNm5kZXYtXFx1MDAzZWNvbm5faW5mb19sb2NrKTtcXG4gXFxuLVxcdHJldHVybiBjb25uX2luZm8tXFx1MDAzZW1heF9wa3RfcGF5bG9hZF9sZW47XFxuK1xcdHJldHVybiBtYXhfcGt0X3BheWxvYWRfbGVuO1xcbiB9XFxuIEVYUE9SVF9TWU1CT0wobmNpX2Nvbm5fbWF4X2RhdGFfcGt0X3BheWxvYWRfc2l6ZSk7XFxuIFxcbiBzdGF0aWMgaW50IG5jaV9xdWV1ZV90eF9kYXRhX2ZyYWdzKHN0cnVjdCBuY2lfZGV2ICpuZGV2LFxcbiBcXHRcXHRcXHRcXHQgICBfX3U4IGNvbm5faWQsXFxuLVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBza19idWZmICpza2IpIHtcXG4tXFx0Y29uc3Qgc3RydWN0IG5jaV9jb25uX2luZm8gKmNvbm5faW5mbztcXG4rXFx0XFx0XFx0XFx0ICAgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4rXFx0XFx0XFx0XFx0ICAgX191OCBtYXhfcGt0X3BheWxvYWRfbGVuKVxcbit7XFxuIFxcdGludCB0b3RhbF9sZW4gPSBza2ItXFx1MDAzZWxlbjtcXG4gXFx0Y29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSA9IHNrYi1cXHUwMDNlZGF0YTtcXG4gXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG5AQCAtMTA4LDE3ICsxMTgsMTAgQEAgc3RhdGljIGludCBuY2lfcXVldWVfdHhfZGF0YV9mcmFncyhzdHJ1Y3QgbmNpX2RldiAqbmRldixcXG4gXFxuIFxcdHByX2RlYnVnKFxcXCJjb25uX2lkIDB4JXgsIHRvdGFsX2xlbiAlZFxcXFxuXFxcIiwgY29ubl9pZCwgdG90YWxfbGVuKTtcXG4gXFxuLVxcdGNvbm5faW5mbyA9IG5jaV9nZXRfY29ubl9pbmZvX2J5X2Nvbm5faWQobmRldiwgY29ubl9pZCk7XFxuLVxcdGlmICghY29ubl9pbmZvKSB7XFxuLVxcdFxcdHJjID0gLUVQUk9UTztcXG4tXFx0XFx0Z290byBleGl0O1xcbi1cXHR9XFxuLVxcbiBcXHRfX3NrYl9xdWV1ZV9oZWFkX2luaXQoXFx1MDAyNmZyYWdzX3EpO1xcbiBcXG4gXFx0d2hpbGUgKHRvdGFsX2xlbikge1xcbi1cXHRcXHRmcmFnX2xlbiA9XFxuLVxcdFxcdFxcdG1pbl90KGludCwgdG90YWxfbGVuLCBjb25uX2luZm8tXFx1MDAzZW1heF9wa3RfcGF5bG9hZF9sZW4pO1xcbitcXHRcXHRmcmFnX2xlbiA9IG1pbl90KGludCwgdG90YWxfbGVuLCBtYXhfcGt0X3BheWxvYWRfbGVuKTtcXG4gXFxuIFxcdFxcdHNrYl9mcmFnID0gbmNpX3NrYl9hbGxvYyhuZGV2LFxcbiBcXHRcXHRcXHRcXHRcXHQgKE5DSV9EQVRBX0hEUl9TSVpFICsgZnJhZ19sZW4pLFxcbkBAIC0xNzEsNDAgKzE3NCw0NyBAQCBzdGF0aWMgaW50IG5jaV9xdWV1ZV90eF9kYXRhX2ZyYWdzKHN0cnVjdCBuY2lfZGV2ICpuZGV2LFxcbiBpbnQgbmNpX3NlbmRfZGF0YShzdHJ1Y3QgbmNpX2RldiAqbmRldiwgX191OCBjb25uX2lkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiB7XFxuIFxcdGNvbnN0IHN0cnVjdCBuY2lfY29ubl9pbmZvICpjb25uX2luZm87XFxuK1xcdF9fdTggbWF4X3BrdF9wYXlsb2FkX2xlbjtcXG4gXFx0aW50IHJjID0gMDtcXG4gXFxuIFxcdHByX2RlYnVnKFxcXCJjb25uX2lkIDB4JXgsIHBsZW4gJWRcXFxcblxcXCIsIGNvbm5faWQsIHNrYi1cXHUwMDNlbGVuKTtcXG4gXFxuLVxcdGNvbm5faW5mbyA9IG5jaV9nZXRfY29ubl9pbmZvX2J5X2Nvbm5faWQobmRldiwgY29ubl9pZCk7XFxuK1xcdHNwaW5fbG9ja19iaChcXHUwMDI2bmRldi1cXHUwMDNlY29ubl9pbmZvX2xvY2spO1xcbitcXHRjb25uX2luZm8gPSBuY2lfZ2V0X2Nvbm5faW5mb19ieV9jb25uX2lkX2xvY2tlZChuZGV2LCBjb25uX2lkKTtcXG4gXFx0aWYgKCFjb25uX2luZm8pIHtcXG4gXFx0XFx0cmMgPSAtRVBST1RPO1xcbi1cXHRcXHRnb3RvIGZyZWVfZXhpdDtcXG4rXFx0XFx0Z290byB1bmxvY2s7XFxuIFxcdH1cXG4rXFx0bWF4X3BrdF9wYXlsb2FkX2xlbiA9IGNvbm5faW5mby1cXHUwMDNlbWF4X3BrdF9wYXlsb2FkX2xlbjtcXG4rXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNm5kZXYtXFx1MDAzZWNvbm5faW5mb19sb2NrKTtcXG4gXFxuIFxcdC8qIGNoZWNrIGlmIHRoZSBwYWNrZXQgbmVlZCB0byBiZSBmcmFnbWVudGVkICovXFxuLVxcdGlmIChza2ItXFx1MDAzZWxlbiBcXHUwMDNjPSBjb25uX2luZm8tXFx1MDAzZW1heF9wa3RfcGF5bG9hZF9sZW4pIHtcXG4rXFx0aWYgKHNrYi1cXHUwMDNlbGVuIFxcdTAwM2M9IG1heF9wa3RfcGF5bG9hZF9sZW4pIHtcXG4gXFx0XFx0Lyogbm8gbmVlZCB0byBmcmFnbWVudCBwYWNrZXQgKi9cXG4gXFx0XFx0bmNpX3B1c2hfZGF0YV9oZHIobmRldiwgY29ubl9pZCwgc2tiLCBOQ0lfUEJGX0xBU1QpO1xcbiBcXG4gXFx0XFx0c2tiX3F1ZXVlX3RhaWwoXFx1MDAyNm5kZXYtXFx1MDAzZXR4X3EsIHNrYik7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdC8qIGZyYWdtZW50IHBhY2tldCBhbmQgcXVldWUgdGhlIGZyYWdtZW50cyAqL1xcbi1cXHRcXHRyYyA9IG5jaV9xdWV1ZV90eF9kYXRhX2ZyYWdzKG5kZXYsIGNvbm5faWQsIHNrYik7XFxuK1xcdFxcdHJjID0gbmNpX3F1ZXVlX3R4X2RhdGFfZnJhZ3MobmRldiwgY29ubl9pZCwgc2tiLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIG1heF9wa3RfcGF5bG9hZF9sZW4pO1xcbiBcXHRcXHRpZiAocmMpIHtcXG4gXFx0XFx0XFx0cHJfZXJyKFxcXCJmYWlsZWQgdG8gZnJhZ21lbnQgdHggZGF0YSBwYWNrZXRcXFxcblxcXCIpO1xcbi1cXHRcXHRcXHRnb3RvIGZyZWVfZXhpdDtcXG4rXFx0XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuK1xcdFxcdFxcdHJldHVybiByYztcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbitcXHRzcGluX2xvY2tfYmgoXFx1MDAyNm5kZXYtXFx1MDAzZWNvbm5faW5mb19sb2NrKTtcXG4gXFx0bmRldi1cXHUwMDNlY3VyX2Nvbm5faWQgPSBjb25uX2lkO1xcbi1cXHRxdWV1ZV93b3JrKG5kZXYtXFx1MDAzZXR4X3dxLCBcXHUwMDI2bmRldi1cXHUwMDNldHhfd29yayk7XFxuLVxcbi1cXHRnb3RvIGV4aXQ7XFxuLVxcbi1mcmVlX2V4aXQ6XFxuLVxcdGtmcmVlX3NrYihza2IpO1xcbitcXHRzcGluX3VubG9ja19iaChcXHUwMDI2bmRldi1cXHUwMDNlY29ubl9pbmZvX2xvY2spO1xcbiBcXG4tZXhpdDpcXG4rXFx0cXVldWVfd29yayhuZGV2LVxcdTAwM2V0eF93cSwgXFx1MDAyNm5kZXYtXFx1MDAzZXR4X3dvcmspO1xcbitcXHRyZXR1cm4gcmM7XFxuK3VubG9jazpcXG4rXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNm5kZXYtXFx1MDAzZWNvbm5faW5mb19sb2NrKTtcXG4rXFx0aWYgKHJjKVxcbitcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4gXFx0cmV0dXJuIHJjO1xcbiB9XFxuIEVYUE9SVF9TWU1CT0wobmNpX3NlbmRfZGF0YSk7XFxuQEAgLTI4MiwxMSArMjkyLDE1IEBAIHZvaWQgbmNpX3J4X2RhdGFfcGFja2V0KHN0cnVjdCBuY2lfZGV2ICpuZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXHRcXHQgbmNpX2Nvbm5faWQoc2tiLVxcdTAwM2VkYXRhKSxcXG4gXFx0XFx0IG5jaV9wbGVuKHNrYi1cXHUwMDNlZGF0YSkpO1xcbiBcXG4tXFx0Y29ubl9pbmZvID0gbmNpX2dldF9jb25uX2luZm9fYnlfY29ubl9pZChuZGV2LCBuY2lfY29ubl9pZChza2ItXFx1MDAzZWRhdGEpKTtcXG4rXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZuZGV2LVxcdTAwM2Vjb25uX2luZm9fbG9jayk7XFxuK1xcdGNvbm5faW5mbyA9IG5jaV9nZXRfY29ubl9pbmZvX2J5X2Nvbm5faWRfbG9ja2VkKG5kZXYsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdG5jaV9jb25uX2lkKHNrYi1cXHUwMDNlZGF0YSkpO1xcbiBcXHRpZiAoIWNvbm5faW5mbykge1xcbitcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2bmRldi1cXHUwMDNlY29ubl9pbmZvX2xvY2spO1xcbiBcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXHR9XFxuK1xcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZuZGV2LVxcdTAwM2Vjb25uX2luZm9fbG9jayk7XFxuIFxcbiBcXHQvKiBzdHJpcCB0aGUgbmNpIGRhdGEgaGVhZGVyICovXFxuIFxcdHNrYl9wdWxsKHNrYiwgTkNJX0RBVEFfSERSX1NJWkUpO1xcbmRpZmYgLS1naXQgYS9uZXQvbmZjL25jaS9oY2kuYyBiL25ldC9uZmMvbmNpL2hjaS5jXFxuaW5kZXggYzAzZThhMGJkM2JkNjQuLmUyZjdhYjE1OTczY2U5IDEwMDY0NFxcbi0tLSBhL25ldC9uZmMvbmNpL2hjaS5jXFxuKysrIGIvbmV0L25mYy9uY2kvaGNpLmNcXG5AQCAtMTQ3LDE0ICsxNDcsMjIgQEAgc3RhdGljIGludCBuY2lfaGNpX3NlbmRfZGF0YShzdHJ1Y3QgbmNpX2RldiAqbmRldiwgdTggcGlwZSxcXG4gXFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4gXFx0aW50IGxlbiwgaSwgcjtcXG4gXFx0dTggY2IgPSBwaXBlO1xcbitcXHR1OCBjb25uX2lkO1xcbitcXHR1OCBtYXhfcGt0X3BheWxvYWRfbGVuO1xcbiBcXG4rXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZuZGV2LVxcdTAwM2Vjb25uX2luZm9fbG9jayk7XFxuIFxcdGNvbm5faW5mbyA9IG5kZXYtXFx1MDAzZWhjaV9kZXYtXFx1MDAzZWNvbm5faW5mbztcXG4tXFx0aWYgKCFjb25uX2luZm8pXFxuK1xcdGlmICghY29ubl9pbmZvKSB7XFxuK1xcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZuZGV2LVxcdTAwM2Vjb25uX2luZm9fbG9jayk7XFxuIFxcdFxcdHJldHVybiAtRVBST1RPO1xcbitcXHR9XFxuK1xcdGNvbm5faWQgPSBjb25uX2luZm8tXFx1MDAzZWNvbm5faWQ7XFxuK1xcdG1heF9wa3RfcGF5bG9hZF9sZW4gPSBjb25uX2luZm8tXFx1MDAzZW1heF9wa3RfcGF5bG9hZF9sZW47XFxuK1xcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZuZGV2LVxcdTAwM2Vjb25uX2luZm9fbG9jayk7XFxuIFxcbiBcXHRpID0gMDtcXG4tXFx0c2tiID0gbmNpX3NrYl9hbGxvYyhuZGV2LCBjb25uX2luZm8tXFx1MDAzZW1heF9wa3RfcGF5bG9hZF9sZW4gK1xcbi1cXHRcXHRcXHQgICAgTkNJX0RBVEFfSERSX1NJWkUsIEdGUF9BVE9NSUMpO1xcbitcXHRza2IgPSBuY2lfc2tiX2FsbG9jKG5kZXYsIG1heF9wa3RfcGF5bG9hZF9sZW4gKyBOQ0lfREFUQV9IRFJfU0laRSxcXG4rXFx0XFx0XFx0ICAgIEdGUF9BVE9NSUMpO1xcbiBcXHRpZiAoIXNrYilcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcbkBAIC0xNjMsMTIgKzE3MSwxMSBAQCBzdGF0aWMgaW50IG5jaV9oY2lfc2VuZF9kYXRhKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCB1OCBwaXBlLFxcbiBcXG4gXFx0ZG8ge1xcbiBcXHRcXHQvKiBJZiBsYXN0IHBhY2tldCBhZGQgTkNJX0hGUF9OT19DSEFJTklORyAqL1xcbi1cXHRcXHRpZiAoaSArIGNvbm5faW5mby1cXHUwMDNlbWF4X3BrdF9wYXlsb2FkX2xlbiAtXFxuLVxcdFxcdCAgICAoc2tiLVxcdTAwM2VsZW4gKyAxKSBcXHUwMDNlPSBkYXRhX2xlbikge1xcbitcXHRcXHRpZiAoaSArIG1heF9wa3RfcGF5bG9hZF9sZW4gLSAoc2tiLVxcdTAwM2VsZW4gKyAxKSBcXHUwMDNlPSBkYXRhX2xlbikge1xcbiBcXHRcXHRcXHRjYiB8PSBOQ0lfSEZQX05PX0NIQUlOSU5HO1xcbiBcXHRcXHRcXHRsZW4gPSBkYXRhX2xlbiAtIGk7XFxuIFxcdFxcdH0gZWxzZSB7XFxuLVxcdFxcdFxcdGxlbiA9IGNvbm5faW5mby1cXHUwMDNlbWF4X3BrdF9wYXlsb2FkX2xlbiAtIHNrYi1cXHUwMDNlbGVuIC0gMTtcXG4rXFx0XFx0XFx0bGVuID0gbWF4X3BrdF9wYXlsb2FkX2xlbiAtIHNrYi1cXHUwMDNlbGVuIC0gMTtcXG4gXFx0XFx0fVxcbiBcXG4gXFx0XFx0Kih1OCAqKXNrYl9wdXNoKHNrYiwgMSkgPSBjYjtcXG5AQCAtMTc2LDE1ICsxODMsMTQgQEAgc3RhdGljIGludCBuY2lfaGNpX3NlbmRfZGF0YShzdHJ1Y3QgbmNpX2RldiAqbmRldiwgdTggcGlwZSxcXG4gXFx0XFx0aWYgKGxlbiBcXHUwMDNlIDApXFxuIFxcdFxcdFxcdHNrYl9wdXRfZGF0YShza2IsIGRhdGEgKyBpLCBsZW4pO1xcbiBcXG4tXFx0XFx0ciA9IG5jaV9zZW5kX2RhdGEobmRldiwgY29ubl9pbmZvLVxcdTAwM2Vjb25uX2lkLCBza2IpO1xcbitcXHRcXHRyID0gbmNpX3NlbmRfZGF0YShuZGV2LCBjb25uX2lkLCBza2IpO1xcbiBcXHRcXHRpZiAociBcXHUwMDNjIDApXFxuIFxcdFxcdFxcdHJldHVybiByO1xcbiBcXG4gXFx0XFx0aSArPSBsZW47XFxuIFxcbiBcXHRcXHRpZiAoaSBcXHUwMDNjIGRhdGFfbGVuKSB7XFxuLVxcdFxcdFxcdHNrYiA9IG5jaV9za2JfYWxsb2MobmRldixcXG4tXFx0XFx0XFx0XFx0XFx0ICAgIGNvbm5faW5mby1cXHUwMDNlbWF4X3BrdF9wYXlsb2FkX2xlbiArXFxuK1xcdFxcdFxcdHNrYiA9IG5jaV9za2JfYWxsb2MobmRldiwgbWF4X3BrdF9wYXlsb2FkX2xlbiArXFxuIFxcdFxcdFxcdFxcdFxcdCAgICBOQ0lfREFUQV9IRFJfU0laRSwgR0ZQX0FUT01JQyk7XFxuIFxcdFxcdFxcdGlmICghc2tiKVxcbiBcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG5AQCAtMjI1LDE3ICsyMzEsMjIgQEAgaW50IG5jaV9oY2lfc2VuZF9jbWQoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHU4IGdhdGUsIHU4IGNtZCxcXG4gXFx0Y29uc3Qgc3RydWN0IG5jaV9oY3BfbWVzc2FnZSAqbWVzc2FnZTtcXG4gXFx0Y29uc3Qgc3RydWN0IG5jaV9jb25uX2luZm8gKmNvbm5faW5mbztcXG4gXFx0c3RydWN0IG5jaV9kYXRhIGRhdGE7XFxuK1xcdHN0cnVjdCBza19idWZmICpyeF9za2I7XFxuIFxcdGludCByO1xcbiBcXHR1OCBwaXBlID0gbmRldi1cXHUwMDNlaGNpX2Rldi1cXHUwMDNlZ2F0ZTJwaXBlW2dhdGVdO1xcbiBcXG4gXFx0aWYgKHBpcGUgPT0gTkNJX0hDSV9JTlZBTElEX1BJUEUpXFxuIFxcdFxcdHJldHVybiAtRUFERFJOT1RBVkFJTDtcXG4gXFxuK1xcdHNwaW5fbG9ja19iaChcXHUwMDI2bmRldi1cXHUwMDNlY29ubl9pbmZvX2xvY2spO1xcbiBcXHRjb25uX2luZm8gPSBuZGV2LVxcdTAwM2VoY2lfZGV2LVxcdTAwM2Vjb25uX2luZm87XFxuLVxcdGlmICghY29ubl9pbmZvKVxcbitcXHRpZiAoIWNvbm5faW5mbykge1xcbitcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2bmRldi1cXHUwMDNlY29ubl9pbmZvX2xvY2spO1xcbiBcXHRcXHRyZXR1cm4gLUVQUk9UTztcXG4rXFx0fVxcbiBcXG4gXFx0ZGF0YS5jb25uX2lkID0gY29ubl9pbmZvLVxcdTAwM2Vjb25uX2lkO1xcbitcXHRzcGluX3VubG9ja19iaChcXHUwMDI2bmRldi1cXHUwMDNlY29ubl9pbmZvX2xvY2spO1xcbiBcXHRkYXRhLnBpcGUgPSBwaXBlO1xcbiBcXHRkYXRhLmNtZCA9IE5DSV9IQ1BfSEVBREVSKE5DSV9IQ0lfSENQX0NPTU1BTkQsIGNtZCk7XFxuIFxcdGRhdGEuZGF0YSA9IHBhcmFtO1xcbkBAIC0yNDQsMTMgKzI1NSwyMiBAQCBpbnQgbmNpX2hjaV9zZW5kX2NtZChzdHJ1Y3QgbmNpX2RldiAqbmRldiwgdTggZ2F0ZSwgdTggY21kLFxcbiBcXHRyID0gbmNpX3JlcXVlc3QobmRldiwgbmNpX2hjaV9zZW5kX2RhdGFfcmVxLCBcXHUwMDI2ZGF0YSxcXG4gXFx0XFx0XFx0bXNlY3NfdG9famlmZmllcyhOQ0lfREFUQV9USU1FT1VUKSk7XFxuIFxcdGlmIChyID09IE5DSV9TVEFUVVNfT0spIHtcXG4tXFx0XFx0bWVzc2FnZSA9IChzdHJ1Y3QgbmNpX2hjcF9tZXNzYWdlICopY29ubl9pbmZvLVxcdTAwM2VyeF9za2ItXFx1MDAzZWRhdGE7XFxuK1xcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2bmRldi1cXHUwMDNlY29ubl9pbmZvX2xvY2spO1xcbitcXHRcXHRjb25uX2luZm8gPSBuZGV2LVxcdTAwM2VoY2lfZGV2LVxcdTAwM2Vjb25uX2luZm87XFxuK1xcdFxcdHJ4X3NrYiA9IGNvbm5faW5mbyA/IGNvbm5faW5mby1cXHUwMDNlcnhfc2tiIDogTlVMTDtcXG4rXFx0XFx0aWYgKCFyeF9za2IpIHtcXG4rXFx0XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNm5kZXYtXFx1MDAzZWNvbm5faW5mb19sb2NrKTtcXG4rXFx0XFx0XFx0cmV0dXJuIC1FUFJPVE87XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdG1lc3NhZ2UgPSAoc3RydWN0IG5jaV9oY3BfbWVzc2FnZSAqKXJ4X3NrYi1cXHUwMDNlZGF0YTtcXG4gXFx0XFx0ciA9IG5jaV9oY2lfcmVzdWx0X3RvX2Vycm5vKFxcbiBcXHRcXHRcXHROQ0lfSENQX01TR19HRVRfQ01EKG1lc3NhZ2UtXFx1MDAzZWhlYWRlcikpO1xcbi1cXHRcXHRza2JfcHVsbChjb25uX2luZm8tXFx1MDAzZXJ4X3NrYiwgTkNJX0hDSV9IQ1BfTUVTU0FHRV9IRUFERVJfTEVOKTtcXG4rXFx0XFx0c2tiX3B1bGwocnhfc2tiLCBOQ0lfSENJX0hDUF9NRVNTQUdFX0hFQURFUl9MRU4pO1xcbitcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2bmRldi1cXHUwMDNlY29ubl9pbmZvX2xvY2spO1xcbiBcXG4gXFx0XFx0aWYgKCFyIFxcdTAwMjZcXHUwMDI2IHNrYilcXG4tXFx0XFx0XFx0KnNrYiA9IGNvbm5faW5mby1cXHUwMDNlcnhfc2tiO1xcbitcXHRcXHRcXHQqc2tiID0gcnhfc2tiO1xcbiBcXHR9XFxuIFxcbiBcXHRyZXR1cm4gcjtcXG5AQCAtMzY2LDExICszODYsMTUgQEAgc3RhdGljIHZvaWQgbmNpX2hjaV9yZXNwX3JlY2VpdmVkKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCB1OCBwaXBlLFxcbiB7XFxuIFxcdHN0cnVjdCBuY2lfY29ubl9pbmZvICpjb25uX2luZm87XFxuIFxcbitcXHRzcGluX2xvY2tfYmgoXFx1MDAyNm5kZXYtXFx1MDAzZWNvbm5faW5mb19sb2NrKTtcXG4gXFx0Y29ubl9pbmZvID0gbmRldi1cXHUwMDNlaGNpX2Rldi1cXHUwMDNlY29ubl9pbmZvO1xcbi1cXHRpZiAoIWNvbm5faW5mbylcXG4rXFx0aWYgKCFjb25uX2luZm8pIHtcXG4rXFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNm5kZXYtXFx1MDAzZWNvbm5faW5mb19sb2NrKTtcXG4gXFx0XFx0Z290byBleGl0O1xcbitcXHR9XFxuIFxcbiBcXHRjb25uX2luZm8tXFx1MDAzZXJ4X3NrYiA9IHNrYjtcXG4rXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNm5kZXYtXFx1MDAzZWNvbm5faW5mb19sb2NrKTtcXG4gXFxuIGV4aXQ6XFxuIFxcdG5jaV9yZXFfY29tcGxldGUobmRldiwgTkNJX1NUQVRVU19PSyk7XFxuQEAgLTUxMCwxMSArNTM0LDE1IEBAIGludCBuY2lfaGNpX29wZW5fcGlwZShzdHJ1Y3QgbmNpX2RldiAqbmRldiwgdTggcGlwZSlcXG4gXFx0c3RydWN0IG5jaV9kYXRhIGRhdGE7XFxuIFxcdGNvbnN0IHN0cnVjdCBuY2lfY29ubl9pbmZvICpjb25uX2luZm87XFxuIFxcbitcXHRzcGluX2xvY2tfYmgoXFx1MDAyNm5kZXYtXFx1MDAzZWNvbm5faW5mb19sb2NrKTtcXG4gXFx0Y29ubl9pbmZvID0gbmRldi1cXHUwMDNlaGNpX2Rldi1cXHUwMDNlY29ubl9pbmZvO1xcbi1cXHRpZiAoIWNvbm5faW5mbylcXG4rXFx0aWYgKCFjb25uX2luZm8pIHtcXG4rXFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNm5kZXYtXFx1MDAzZWNvbm5faW5mb19sb2NrKTtcXG4gXFx0XFx0cmV0dXJuIC1FUFJPVE87XFxuK1xcdH1cXG4gXFxuIFxcdGRhdGEuY29ubl9pZCA9IGNvbm5faW5mby1cXHUwMDNlY29ubl9pZDtcXG4rXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNm5kZXYtXFx1MDAzZWNvbm5faW5mb19sb2NrKTtcXG4gXFx0ZGF0YS5waXBlID0gcGlwZTtcXG4gXFx0ZGF0YS5jbWQgPSBOQ0lfSENQX0hFQURFUihOQ0lfSENJX0hDUF9DT01NQU5ELFxcbiBcXHRcXHRcXHRcXHQgICAgICAgTkNJX0hDSV9BTllfT1BFTl9QSVBFKTtcXG5AQCAtNTY5LDYgKzU5Nyw3IEBAIGludCBuY2lfaGNpX3NldF9wYXJhbShzdHJ1Y3QgbmNpX2RldiAqbmRldiwgdTggZ2F0ZSwgdTggaWR4LFxcbiBcXHRjb25zdCBzdHJ1Y3QgbmNpX2hjcF9tZXNzYWdlICptZXNzYWdlO1xcbiBcXHRjb25zdCBzdHJ1Y3QgbmNpX2Nvbm5faW5mbyAqY29ubl9pbmZvO1xcbiBcXHRzdHJ1Y3QgbmNpX2RhdGEgZGF0YTtcXG4rXFx0c3RydWN0IHNrX2J1ZmYgKnJ4X3NrYjtcXG4gXFx0aW50IHI7XFxuIFxcdHU4ICp0bXA7XFxuIFxcdHU4IHBpcGUgPSBuZGV2LVxcdTAwM2VoY2lfZGV2LVxcdTAwM2VnYXRlMnBpcGVbZ2F0ZV07XFxuQEAgLTU3OCw5ICs2MDcsMTQgQEAgaW50IG5jaV9oY2lfc2V0X3BhcmFtKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCB1OCBnYXRlLCB1OCBpZHgsXFxuIFxcdGlmIChwaXBlID09IE5DSV9IQ0lfSU5WQUxJRF9QSVBFKVxcbiBcXHRcXHRyZXR1cm4gLUVBRERSTk9UQVZBSUw7XFxuIFxcbitcXHRzcGluX2xvY2tfYmgoXFx1MDAyNm5kZXYtXFx1MDAzZWNvbm5faW5mb19sb2NrKTtcXG4gXFx0Y29ubl9pbmZvID0gbmRldi1cXHUwMDNlaGNpX2Rldi1cXHUwMDNlY29ubl9pbmZvO1xcbi1cXHRpZiAoIWNvbm5faW5mbylcXG4rXFx0aWYgKCFjb25uX2luZm8pIHtcXG4rXFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNm5kZXYtXFx1MDAzZWNvbm5faW5mb19sb2NrKTtcXG4gXFx0XFx0cmV0dXJuIC1FUFJPVE87XFxuK1xcdH1cXG4rXFx0ZGF0YS5jb25uX2lkID0gY29ubl9pbmZvLVxcdTAwM2Vjb25uX2lkO1xcbitcXHRzcGluX3VubG9ja19iaChcXHUwMDI2bmRldi1cXHUwMDNlY29ubl9pbmZvX2xvY2spO1xcbiBcXG4gXFx0dG1wID0ga21hbGxvYygxICsgcGFyYW1fbGVuLCBHRlBfS0VSTkVMKTtcXG4gXFx0aWYgKCF0bXApXFxuQEAgLTU4OSw3ICs2MjMsNiBAQCBpbnQgbmNpX2hjaV9zZXRfcGFyYW0oc3RydWN0IG5jaV9kZXYgKm5kZXYsIHU4IGdhdGUsIHU4IGlkeCxcXG4gXFx0KnRtcCA9IGlkeDtcXG4gXFx0bWVtY3B5KHRtcCArIDEsIHBhcmFtLCBwYXJhbV9sZW4pO1xcbiBcXG4tXFx0ZGF0YS5jb25uX2lkID0gY29ubl9pbmZvLVxcdTAwM2Vjb25uX2lkO1xcbiBcXHRkYXRhLnBpcGUgPSBwaXBlO1xcbiBcXHRkYXRhLmNtZCA9IE5DSV9IQ1BfSEVBREVSKE5DSV9IQ0lfSENQX0NPTU1BTkQsXFxuIFxcdFxcdFxcdFxcdCAgICAgICBOQ0lfSENJX0FOWV9TRVRfUEFSQU1FVEVSKTtcXG5AQCAtNTk5LDEwICs2MzIsMjAgQEAgaW50IG5jaV9oY2lfc2V0X3BhcmFtKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCB1OCBnYXRlLCB1OCBpZHgsXFxuIFxcdHIgPSBuY2lfcmVxdWVzdChuZGV2LCBuY2lfaGNpX3NlbmRfZGF0YV9yZXEsIFxcdTAwMjZkYXRhLFxcbiBcXHRcXHRcXHRtc2Vjc190b19qaWZmaWVzKE5DSV9EQVRBX1RJTUVPVVQpKTtcXG4gXFx0aWYgKHIgPT0gTkNJX1NUQVRVU19PSykge1xcbi1cXHRcXHRtZXNzYWdlID0gKHN0cnVjdCBuY2lfaGNwX21lc3NhZ2UgKiljb25uX2luZm8tXFx1MDAzZXJ4X3NrYi1cXHUwMDNlZGF0YTtcXG4rXFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZuZGV2LVxcdTAwM2Vjb25uX2luZm9fbG9jayk7XFxuK1xcdFxcdGNvbm5faW5mbyA9IG5kZXYtXFx1MDAzZWhjaV9kZXYtXFx1MDAzZWNvbm5faW5mbztcXG4rXFx0XFx0cnhfc2tiID0gY29ubl9pbmZvID8gY29ubl9pbmZvLVxcdTAwM2VyeF9za2IgOiBOVUxMO1xcbitcXHRcXHRpZiAoIXJ4X3NrYikge1xcbitcXHRcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2bmRldi1cXHUwMDNlY29ubl9pbmZvX2xvY2spO1xcbitcXHRcXHRcXHRrZnJlZSh0bXApO1xcbitcXHRcXHRcXHRyZXR1cm4gLUVQUk9UTztcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0bWVzc2FnZSA9IChzdHJ1Y3QgbmNpX2hjcF9tZXNzYWdlICopcnhfc2tiLVxcdTAwM2VkYXRhO1xcbiBcXHRcXHRyID0gbmNpX2hjaV9yZXN1bHRfdG9fZXJybm8oXFxuIFxcdFxcdFxcdE5DSV9IQ1BfTVNHX0dFVF9DTUQobWVzc2FnZS1cXHUwMDNlaGVhZGVyKSk7XFxuLVxcdFxcdHNrYl9wdWxsKGNvbm5faW5mby1cXHUwMDNlcnhfc2tiLCBOQ0lfSENJX0hDUF9NRVNTQUdFX0hFQURFUl9MRU4pO1xcbitcXHRcXHRza2JfcHVsbChyeF9za2IsIE5DSV9IQ0lfSENQX01FU1NBR0VfSEVBREVSX0xFTik7XFxuK1xcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZuZGV2LVxcdTAwM2Vjb25uX2luZm9fbG9jayk7XFxuIFxcdH1cXG4gXFxuIFxcdGtmcmVlKHRtcCk7XFxuQEAgLTYxNiw2ICs2NTksNyBAQCBpbnQgbmNpX2hjaV9nZXRfcGFyYW0oc3RydWN0IG5jaV9kZXYgKm5kZXYsIHU4IGdhdGUsIHU4IGlkeCxcXG4gXFx0Y29uc3Qgc3RydWN0IG5jaV9oY3BfbWVzc2FnZSAqbWVzc2FnZTtcXG4gXFx0Y29uc3Qgc3RydWN0IG5jaV9jb25uX2luZm8gKmNvbm5faW5mbztcXG4gXFx0c3RydWN0IG5jaV9kYXRhIGRhdGE7XFxuK1xcdHN0cnVjdCBza19idWZmICpyeF9za2I7XFxuIFxcdGludCByO1xcbiBcXHR1OCBwaXBlID0gbmRldi1cXHUwMDNlaGNpX2Rldi1cXHUwMDNlZ2F0ZTJwaXBlW2dhdGVdO1xcbiBcXG5AQCAtNjI0LDExICs2NjgsMTUgQEAgaW50IG5jaV9oY2lfZ2V0X3BhcmFtKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCB1OCBnYXRlLCB1OCBpZHgsXFxuIFxcdGlmIChwaXBlID09IE5DSV9IQ0lfSU5WQUxJRF9QSVBFKVxcbiBcXHRcXHRyZXR1cm4gLUVBRERSTk9UQVZBSUw7XFxuIFxcbitcXHRzcGluX2xvY2tfYmgoXFx1MDAyNm5kZXYtXFx1MDAzZWNvbm5faW5mb19sb2NrKTtcXG4gXFx0Y29ubl9pbmZvID0gbmRldi1cXHUwMDNlaGNpX2Rldi1cXHUwMDNlY29ubl9pbmZvO1xcbi1cXHRpZiAoIWNvbm5faW5mbylcXG4rXFx0aWYgKCFjb25uX2luZm8pIHtcXG4rXFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNm5kZXYtXFx1MDAzZWNvbm5faW5mb19sb2NrKTtcXG4gXFx0XFx0cmV0dXJuIC1FUFJPVE87XFxuK1xcdH1cXG4gXFxuIFxcdGRhdGEuY29ubl9pZCA9IGNvbm5faW5mby1cXHUwMDNlY29ubl9pZDtcXG4rXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNm5kZXYtXFx1MDAzZWNvbm5faW5mb19sb2NrKTtcXG4gXFx0ZGF0YS5waXBlID0gcGlwZTtcXG4gXFx0ZGF0YS5jbWQgPSBOQ0lfSENQX0hFQURFUihOQ0lfSENJX0hDUF9DT01NQU5ELFxcbiBcXHRcXHRcXHRcXHQgIE5DSV9IQ0lfQU5ZX0dFVF9QQVJBTUVURVIpO1xcbkBAIC02MzksMTMgKzY4NywyMiBAQCBpbnQgbmNpX2hjaV9nZXRfcGFyYW0oc3RydWN0IG5jaV9kZXYgKm5kZXYsIHU4IGdhdGUsIHU4IGlkeCxcXG4gXFx0XFx0XFx0bXNlY3NfdG9famlmZmllcyhOQ0lfREFUQV9USU1FT1VUKSk7XFxuIFxcbiBcXHRpZiAociA9PSBOQ0lfU1RBVFVTX09LKSB7XFxuLVxcdFxcdG1lc3NhZ2UgPSAoc3RydWN0IG5jaV9oY3BfbWVzc2FnZSAqKWNvbm5faW5mby1cXHUwMDNlcnhfc2tiLVxcdTAwM2VkYXRhO1xcbitcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNm5kZXYtXFx1MDAzZWNvbm5faW5mb19sb2NrKTtcXG4rXFx0XFx0Y29ubl9pbmZvID0gbmRldi1cXHUwMDNlaGNpX2Rldi1cXHUwMDNlY29ubl9pbmZvO1xcbitcXHRcXHRyeF9za2IgPSBjb25uX2luZm8gPyBjb25uX2luZm8tXFx1MDAzZXJ4X3NrYiA6IE5VTEw7XFxuK1xcdFxcdGlmICghcnhfc2tiKSB7XFxuK1xcdFxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZuZGV2LVxcdTAwM2Vjb25uX2luZm9fbG9jayk7XFxuK1xcdFxcdFxcdHJldHVybiAtRVBST1RPO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRtZXNzYWdlID0gKHN0cnVjdCBuY2lfaGNwX21lc3NhZ2UgKilyeF9za2ItXFx1MDAzZWRhdGE7XFxuIFxcdFxcdHIgPSBuY2lfaGNpX3Jlc3VsdF90b19lcnJubyhcXG4gXFx0XFx0XFx0TkNJX0hDUF9NU0dfR0VUX0NNRChtZXNzYWdlLVxcdTAwM2VoZWFkZXIpKTtcXG4tXFx0XFx0c2tiX3B1bGwoY29ubl9pbmZvLVxcdTAwM2VyeF9za2IsIE5DSV9IQ0lfSENQX01FU1NBR0VfSEVBREVSX0xFTik7XFxuK1xcdFxcdHNrYl9wdWxsKHJ4X3NrYiwgTkNJX0hDSV9IQ1BfTUVTU0FHRV9IRUFERVJfTEVOKTtcXG4rXFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNm5kZXYtXFx1MDAzZWNvbm5faW5mb19sb2NrKTtcXG4gXFxuIFxcdFxcdGlmICghciBcXHUwMDI2XFx1MDAyNiBza2IpXFxuLVxcdFxcdFxcdCpza2IgPSBjb25uX2luZm8tXFx1MDAzZXJ4X3NrYjtcXG4rXFx0XFx0XFx0KnNrYiA9IHJ4X3NrYjtcXG4gXFx0fVxcbiBcXG4gXFx0cmV0dXJuIHI7XFxuQEAgLTcyOSwxMiArNzg2LDE2IEBAIGludCBuY2lfaGNpX2Rldl9zZXNzaW9uX2luaXQoc3RydWN0IG5jaV9kZXYgKm5kZXYpXFxuIFxcdG5kZXYtXFx1MDAzZWhjaV9kZXYtXFx1MDAzZWNvdW50X3BpcGVzID0gMDtcXG4gXFx0bmRldi1cXHUwMDNlaGNpX2Rldi1cXHUwMDNlZXhwZWN0ZWRfcGlwZXMgPSAwO1xcbiBcXG4rXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZuZGV2LVxcdTAwM2Vjb25uX2luZm9fbG9jayk7XFxuIFxcdGNvbm5faW5mbyA9IG5kZXYtXFx1MDAzZWhjaV9kZXYtXFx1MDAzZWNvbm5faW5mbztcXG4tXFx0aWYgKCFjb25uX2luZm8pXFxuK1xcdGlmICghY29ubl9pbmZvKSB7XFxuK1xcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZuZGV2LVxcdTAwM2Vjb25uX2luZm9fbG9jayk7XFxuIFxcdFxcdHJldHVybiAtRVBST1RPO1xcbitcXHR9XFxuIFxcbiBcXHRjb25uX2luZm8tXFx1MDAzZWRhdGFfZXhjaGFuZ2VfY2IgPSBuY2lfaGNpX2RhdGFfcmVjZWl2ZWRfY2I7XFxuIFxcdGNvbm5faW5mby1cXHUwMDNlZGF0YV9leGNoYW5nZV9jYl9jb250ZXh0ID0gbmRldjtcXG4rXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNm5kZXYtXFx1MDAzZWNvbm5faW5mb19sb2NrKTtcXG4gXFxuIFxcdG5jaV9oY2lfcmVzZXRfcGlwZXMobmRldi1cXHUwMDNlaGNpX2Rldik7XFxuIFxcbmRpZmYgLS1naXQgYS9uZXQvbmZjL25jaS9udGYuYyBiL25ldC9uZmMvbmNpL250Zi5jXFxuaW5kZXggYzk2NTEyYmI4NjUzMTUuLjQ4MjhhMWM5ZDM1ZjBlIDEwMDY0NFxcbi0tLSBhL25ldC9uZmMvbmNpL250Zi5jXFxuKysrIGIvbmV0L25mYy9uY2kvbnRmLmNcXG5AQCAtODEsMTMgKzgxLDE3IEBAIHN0YXRpYyBpbnQgbmNpX2NvcmVfY29ubl9jcmVkaXRzX250Zl9wYWNrZXQoc3RydWN0IG5jaV9kZXYgKm5kZXYsXFxuIFxcdFxcdFxcdCBpLCBudGYtXFx1MDAzZWNvbm5fZW50cmllc1tpXS5jb25uX2lkLFxcbiBcXHRcXHRcXHQgbnRmLVxcdTAwM2Vjb25uX2VudHJpZXNbaV0uY3JlZGl0cyk7XFxuIFxcbi1cXHRcXHRjb25uX2luZm8gPSBuY2lfZ2V0X2Nvbm5faW5mb19ieV9jb25uX2lkKG5kZXYsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCBudGYtXFx1MDAzZWNvbm5fZW50cmllc1tpXS5jb25uX2lkKTtcXG4tXFx0XFx0aWYgKCFjb25uX2luZm8pXFxuK1xcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2bmRldi1cXHUwMDNlY29ubl9pbmZvX2xvY2spO1xcbitcXHRcXHRjb25uX2luZm8gPSBuY2lfZ2V0X2Nvbm5faW5mb19ieV9jb25uX2lkX2xvY2tlZChuZGV2LFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRudGYtXFx1MDAzZWNvbm5fZW50cmllc1tpXS5jb25uX2lkKTtcXG4rXFx0XFx0aWYgKCFjb25uX2luZm8pIHtcXG4rXFx0XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNm5kZXYtXFx1MDAzZWNvbm5faW5mb19sb2NrKTtcXG4gXFx0XFx0XFx0cmV0dXJuIDA7XFxuK1xcdFxcdH1cXG4gXFxuIFxcdFxcdGF0b21pY19hZGQobnRmLVxcdTAwM2Vjb25uX2VudHJpZXNbaV0uY3JlZGl0cyxcXG4gXFx0XFx0XFx0ICAgXFx1MDAyNmNvbm5faW5mby1cXHUwMDNlY3JlZGl0c19jbnQpO1xcbitcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2bmRldi1cXHUwMDNlY29ubl9pbmZvX2xvY2spO1xcbiBcXHR9XFxuIFxcbiBcXHQvKiB0cmlnZ2VyIHRoZSBuZXh0IHR4ICovXFxuQEAgLTgyOCw5ICs4MzIsMTIgQEAgc3RhdGljIGludCBuY2lfcmZfaW50Zl9hY3RpdmF0ZWRfbnRmX3BhY2tldChzdHJ1Y3QgbmNpX2RldiAqbmRldixcXG4gXFxuIGV4aXQ6XFxuIFxcdGlmIChlcnIgPT0gTkNJX1NUQVRVU19PSykge1xcbitcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNm5kZXYtXFx1MDAzZWNvbm5faW5mb19sb2NrKTtcXG4gXFx0XFx0Y29ubl9pbmZvID0gbmRldi1cXHUwMDNlcmZfY29ubl9pbmZvO1xcbi1cXHRcXHRpZiAoIWNvbm5faW5mbylcXG4rXFx0XFx0aWYgKCFjb25uX2luZm8pIHtcXG4rXFx0XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNm5kZXYtXFx1MDAzZWNvbm5faW5mb19sb2NrKTtcXG4gXFx0XFx0XFx0cmV0dXJuIDA7XFxuK1xcdFxcdH1cXG4gXFxuIFxcdFxcdGNvbm5faW5mby1cXHUwMDNlbWF4X3BrdF9wYXlsb2FkX2xlbiA9IG50Zi5tYXhfZGF0YV9wa3RfcGF5bG9hZF9zaXplO1xcbiBcXHRcXHRjb25uX2luZm8tXFx1MDAzZWluaXRpYWxfbnVtX2NyZWRpdHMgPSBudGYuaW5pdGlhbF9udW1fY3JlZGl0cztcXG5AQCAtODM4LDYgKzg0NSw3IEBAIHN0YXRpYyBpbnQgbmNpX3JmX2ludGZfYWN0aXZhdGVkX250Zl9wYWNrZXQoc3RydWN0IG5jaV9kZXYgKm5kZXYsXFxuIFxcdFxcdC8qIHNldCB0aGUgYXZhaWxhYmxlIGNyZWRpdHMgdG8gaW5pdGlhbCB2YWx1ZSAqL1xcbiBcXHRcXHRhdG9taWNfc2V0KFxcdTAwMjZjb25uX2luZm8tXFx1MDAzZWNyZWRpdHNfY250LFxcbiBcXHRcXHRcXHQgICBjb25uX2luZm8tXFx1MDAzZWluaXRpYWxfbnVtX2NyZWRpdHMpO1xcbitcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2bmRldi1cXHUwMDNlY29ubl9pbmZvX2xvY2spO1xcbiBcXG4gXFx0XFx0Lyogc3RvcmUgZ2VuZXJhbCBieXRlcyB0byBiZSByZXBvcnRlZCBsYXRlciBpbiBkZXBfbGlua191cCAqL1xcbiBcXHRcXHRpZiAobnRmLnJmX2ludGVyZmFjZSA9PSBOQ0lfUkZfSU5URVJGQUNFX05GQ19ERVApIHtcXG5AQCAtOTAxLDkgKzkwOSwxMyBAQCBzdGF0aWMgaW50IG5jaV9yZl9kZWFjdGl2YXRlX250Zl9wYWNrZXQoc3RydWN0IG5jaV9kZXYgKm5kZXYsXFxuIFxcbiBcXHRwcl9kZWJ1ZyhcXFwiZW50cnksIHR5cGUgMHgleCwgcmVhc29uIDB4JXhcXFxcblxcXCIsIG50Zi1cXHUwMDNldHlwZSwgbnRmLVxcdTAwM2VyZWFzb24pO1xcbiBcXG4rXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZuZGV2LVxcdTAwM2Vjb25uX2luZm9fbG9jayk7XFxuIFxcdGNvbm5faW5mbyA9IG5kZXYtXFx1MDAzZXJmX2Nvbm5faW5mbztcXG4tXFx0aWYgKCFjb25uX2luZm8pXFxuK1xcdGlmICghY29ubl9pbmZvKSB7XFxuK1xcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZuZGV2LVxcdTAwM2Vjb25uX2luZm9fbG9jayk7XFxuIFxcdFxcdHJldHVybiAwO1xcbitcXHR9XFxuK1xcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZuZGV2LVxcdTAwM2Vjb25uX2luZm9fbG9jayk7XFxuIFxcbiBcXHQvKiBkcm9wIHR4IGRhdGEgcXVldWUgKi9cXG4gXFx0c2tiX3F1ZXVlX3B1cmdlKFxcdTAwMjZuZGV2LVxcdTAwM2V0eF9xKTtcXG5kaWZmIC0tZ2l0IGEvbmV0L25mYy9uY2kvcnNwLmMgYi9uZXQvbmZjL25jaS9yc3AuY1xcbmluZGV4IDllZWI4NjI4MjVjNWZlLi4wY2ZmMTI1MDkyM2VkOSAxMDA2NDRcXG4tLS0gYS9uZXQvbmZjL25jaS9yc3AuY1xcbisrKyBiL25ldC9uZmMvbmNpL3JzcC5jXFxuQEAgLTE4Niw2ICsxODYsNyBAQCBzdGF0aWMgdm9pZCBuY2lfcmZfZGlzY19yc3BfcGFja2V0KHN0cnVjdCBuY2lfZGV2ICpuZGV2LFxcbiBcXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiB7XFxuIFxcdHN0cnVjdCBuY2lfY29ubl9pbmZvICpjb25uX2luZm87XFxuK1xcdHN0cnVjdCBuY2lfY29ubl9pbmZvICpuZXdfY29ubl9pbmZvO1xcbiBcXHRfX3U4IHN0YXR1cyA9IHNrYi1cXHUwMDNlZGF0YVswXTtcXG4gXFxuIFxcdHByX2RlYnVnKFxcXCJzdGF0dXMgMHgleFxcXFxuXFxcIiwgc3RhdHVzKTtcXG5AQCAtMTkzLDE5ICsxOTQsMzMgQEAgc3RhdGljIHZvaWQgbmNpX3JmX2Rpc2NfcnNwX3BhY2tldChzdHJ1Y3QgbmNpX2RldiAqbmRldixcXG4gXFx0aWYgKHN0YXR1cyA9PSBOQ0lfU1RBVFVTX09LKSB7XFxuIFxcdFxcdGF0b21pY19zZXQoXFx1MDAyNm5kZXYtXFx1MDAzZXN0YXRlLCBOQ0lfRElTQ09WRVJZKTtcXG4gXFxuK1xcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2bmRldi1cXHUwMDNlY29ubl9pbmZvX2xvY2spO1xcbiBcXHRcXHRjb25uX2luZm8gPSBuZGV2LVxcdTAwM2VyZl9jb25uX2luZm87XFxuK1xcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZuZGV2LVxcdTAwM2Vjb25uX2luZm9fbG9jayk7XFxuK1xcbiBcXHRcXHRpZiAoIWNvbm5faW5mbykge1xcbi1cXHRcXHRcXHRjb25uX2luZm8gPSBkZXZtX2t6YWxsb2MoXFx1MDAyNm5kZXYtXFx1MDAzZW5mY19kZXYtXFx1MDAzZWRldixcXG4tXFx0XFx0XFx0XFx0XFx0XFx0IHNpemVvZihzdHJ1Y3QgbmNpX2Nvbm5faW5mbyksXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCBHRlBfS0VSTkVMKTtcXG4tXFx0XFx0XFx0aWYgKCFjb25uX2luZm8pIHtcXG4rXFx0XFx0XFx0bmV3X2Nvbm5faW5mbyA9IGRldm1fa3phbGxvYyhcXHUwMDI2bmRldi1cXHUwMDNlbmZjX2Rldi1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgIHNpemVvZihzdHJ1Y3QgbmNpX2Nvbm5faW5mbyksXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgR0ZQX0tFUk5FTCk7XFxuK1xcdFxcdFxcdGlmICghbmV3X2Nvbm5faW5mbykge1xcbiBcXHRcXHRcXHRcXHRzdGF0dXMgPSBOQ0lfU1RBVFVTX1JFSkVDVEVEO1xcbiBcXHRcXHRcXHRcXHRnb3RvIGV4aXQ7XFxuIFxcdFxcdFxcdH1cXG4tXFx0XFx0XFx0Y29ubl9pbmZvLVxcdTAwM2Vjb25uX2lkID0gTkNJX1NUQVRJQ19SRl9DT05OX0lEO1xcbi1cXHRcXHRcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2Y29ubl9pbmZvLVxcdTAwM2VsaXN0KTtcXG4tXFx0XFx0XFx0bGlzdF9hZGQoXFx1MDAyNmNvbm5faW5mby1cXHUwMDNlbGlzdCwgXFx1MDAyNm5kZXYtXFx1MDAzZWNvbm5faW5mb19saXN0KTtcXG4tXFx0XFx0XFx0bmRldi1cXHUwMDNlcmZfY29ubl9pbmZvID0gY29ubl9pbmZvO1xcbitcXG4rXFx0XFx0XFx0bmV3X2Nvbm5faW5mby1cXHUwMDNlY29ubl9pZCA9IE5DSV9TVEFUSUNfUkZfQ09OTl9JRDtcXG4rXFx0XFx0XFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNm5ld19jb25uX2luZm8tXFx1MDAzZWxpc3QpO1xcbitcXG4rXFx0XFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZuZGV2LVxcdTAwM2Vjb25uX2luZm9fbG9jayk7XFxuK1xcdFxcdFxcdGlmICghbmRldi1cXHUwMDNlcmZfY29ubl9pbmZvKSB7XFxuK1xcdFxcdFxcdFxcdGxpc3RfYWRkKFxcdTAwMjZuZXdfY29ubl9pbmZvLVxcdTAwM2VsaXN0LFxcbitcXHRcXHRcXHRcXHRcXHQgXFx1MDAyNm5kZXYtXFx1MDAzZWNvbm5faW5mb19saXN0KTtcXG4rXFx0XFx0XFx0XFx0bmRldi1cXHUwMDNlcmZfY29ubl9pbmZvID0gbmV3X2Nvbm5faW5mbztcXG4rXFx0XFx0XFx0XFx0bmV3X2Nvbm5faW5mbyA9IE5VTEw7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNm5kZXYtXFx1MDAzZWNvbm5faW5mb19sb2NrKTtcXG4rXFxuK1xcdFxcdFxcdGlmIChuZXdfY29ubl9pbmZvKVxcbitcXHRcXHRcXHRcXHRkZXZtX2tmcmVlKFxcdTAwMjZuZGV2LVxcdTAwM2VuZmNfZGV2LVxcdTAwM2VkZXYsIG5ld19jb25uX2luZm8pO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG4gXFxuQEAgLTI5OCwyMCArMzEzLDIwIEBAIHN0YXRpYyB2b2lkIG5jaV9jb3JlX2Nvbm5fY3JlYXRlX3JzcF9wYWNrZXQoc3RydWN0IG5jaV9kZXYgKm5kZXYsXFxuIFxcdFxcdGNvbm5faW5mby1cXHUwMDNlZGVzdF9wYXJhbXMtXFx1MDAzZWlkID0gbmRldi1cXHUwMDNlY3VyX3BhcmFtcy5pZDtcXG4gXFx0XFx0Y29ubl9pbmZvLVxcdTAwM2VkZXN0X3BhcmFtcy1cXHUwMDNlcHJvdG9jb2wgPSBuZGV2LVxcdTAwM2VjdXJfcGFyYW1zLnByb3RvY29sO1xcbiBcXHRcXHRjb25uX2luZm8tXFx1MDAzZWNvbm5faWQgPSByc3AtXFx1MDAzZWNvbm5faWQ7XFxuK1xcdFxcdGNvbm5faW5mby1cXHUwMDNlbWF4X3BrdF9wYXlsb2FkX2xlbiA9IHJzcC1cXHUwMDNlbWF4X2N0cmxfcGt0X3BheWxvYWRfbGVuO1xcbitcXHRcXHRhdG9taWNfc2V0KFxcdTAwMjZjb25uX2luZm8tXFx1MDAzZWNyZWRpdHNfY250LCByc3AtXFx1MDAzZWNyZWRpdHNfY250KTtcXG4gXFxuIFxcdFxcdC8qIE5vdGU6IGRhdGFfZXhjaGFuZ2VfY2IgYW5kIGRhdGFfZXhjaGFuZ2VfY2JfY29udGV4dCBuZWVkIHRvXFxuIFxcdFxcdCAqIGJlIHNwZWNpZnkgb3V0IG9mIG5jaV9jb3JlX2Nvbm5fY3JlYXRlX3JzcF9wYWNrZXRcXG4gXFx0XFx0ICovXFxuIFxcbiBcXHRcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2Y29ubl9pbmZvLVxcdTAwM2VsaXN0KTtcXG4rXFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZuZGV2LVxcdTAwM2Vjb25uX2luZm9fbG9jayk7XFxuIFxcdFxcdGxpc3RfYWRkKFxcdTAwMjZjb25uX2luZm8tXFx1MDAzZWxpc3QsIFxcdTAwMjZuZGV2LVxcdTAwM2Vjb25uX2luZm9fbGlzdCk7XFxuIFxcbiBcXHRcXHRpZiAobmRldi1cXHUwMDNlY3VyX3BhcmFtcy5pZCA9PSBuZGV2LVxcdTAwM2VoY2lfZGV2LVxcdTAwM2VuZmNlZV9pZClcXG4gXFx0XFx0XFx0bmRldi1cXHUwMDNlaGNpX2Rldi1cXHUwMDNlY29ubl9pbmZvID0gY29ubl9pbmZvO1xcbi1cXG4tXFx0XFx0Y29ubl9pbmZvLVxcdTAwM2Vjb25uX2lkID0gcnNwLVxcdTAwM2Vjb25uX2lkO1xcbi1cXHRcXHRjb25uX2luZm8tXFx1MDAzZW1heF9wa3RfcGF5bG9hZF9sZW4gPSByc3AtXFx1MDAzZW1heF9jdHJsX3BrdF9wYXlsb2FkX2xlbjtcXG4tXFx0XFx0YXRvbWljX3NldChcXHUwMDI2Y29ubl9pbmZvLVxcdTAwM2VjcmVkaXRzX2NudCwgcnNwLVxcdTAwM2VjcmVkaXRzX2NudCk7XFxuK1xcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZuZGV2LVxcdTAwM2Vjb25uX2luZm9fbG9jayk7XFxuIFxcdH1cXG4gXFxuIGZyZWVfY29ubl9pbmZvOlxcbkBAIC0zMzAsMTQgKzM0NSwxOSBAQCBzdGF0aWMgdm9pZCBuY2lfY29yZV9jb25uX2Nsb3NlX3JzcF9wYWNrZXQoc3RydWN0IG5jaV9kZXYgKm5kZXYsXFxuIFxcbiBcXHRwcl9kZWJ1ZyhcXFwic3RhdHVzIDB4JXhcXFxcblxcXCIsIHN0YXR1cyk7XFxuIFxcdGlmIChzdGF0dXMgPT0gTkNJX1NUQVRVU19PSykge1xcbi1cXHRcXHRjb25uX2luZm8gPSBuY2lfZ2V0X2Nvbm5faW5mb19ieV9jb25uX2lkKG5kZXYsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCBuZGV2LVxcdTAwM2VjdXJfY29ubl9pZCk7XFxuK1xcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2bmRldi1cXHUwMDNlY29ubl9pbmZvX2xvY2spO1xcbitcXHRcXHRjb25uX2luZm8gPSBuY2lfZ2V0X2Nvbm5faW5mb19ieV9jb25uX2lkX2xvY2tlZChuZGV2LFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRuZGV2LVxcdTAwM2VjdXJfY29ubl9pZCk7XFxuIFxcdFxcdGlmIChjb25uX2luZm8pIHtcXG4gXFx0XFx0XFx0bGlzdF9kZWwoXFx1MDAyNmNvbm5faW5mby1cXHUwMDNlbGlzdCk7XFxuIFxcdFxcdFxcdGlmIChjb25uX2luZm8gPT0gbmRldi1cXHUwMDNlcmZfY29ubl9pbmZvKVxcbiBcXHRcXHRcXHRcXHRuZGV2LVxcdTAwM2VyZl9jb25uX2luZm8gPSBOVUxMO1xcbi1cXHRcXHRcXHRkZXZtX2tmcmVlKFxcdTAwMjZuZGV2LVxcdTAwM2VuZmNfZGV2LVxcdTAwM2VkZXYsIGNvbm5faW5mbyk7XFxuK1xcdFxcdFxcdGlmIChjb25uX2luZm8gPT0gbmRldi1cXHUwMDNlaGNpX2Rldi1cXHUwMDNlY29ubl9pbmZvKVxcbitcXHRcXHRcXHRcXHRuZGV2LVxcdTAwM2VoY2lfZGV2LVxcdTAwM2Vjb25uX2luZm8gPSBOVUxMO1xcbiBcXHRcXHR9XFxuK1xcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZuZGV2LVxcdTAwM2Vjb25uX2luZm9fbG9jayk7XFxuK1xcdFxcdGlmIChjb25uX2luZm8pXFxuK1xcdFxcdFxcdGRldm1fa2ZyZWUoXFx1MDAyNm5kZXYtXFx1MDAzZW5mY19kZXYtXFx1MDAzZWRldiwgY29ubl9pbmZvKTtcXG4gXFx0fVxcbiBcXHRuY2lfcmVxX2NvbXBsZXRlKG5kZXYsIHN0YXR1cyk7XFxuIH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDk6MjU6MzIuNjg0Mzc0OTkxWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NzU3NTU4MjgwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORkNcIixcbiAgICBcIk5GQ19OQ0lcIixcbiAgICBcIk5GQ19WSVJUVUFMX05DSVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5jaV9uZmNjX2xvb3BiYWNrXCIsXG4gICAgXCJuY2lfdHJhbnNjZWl2ZVwiLFxuICAgIFwibmNpX3NlbmRfZGF0YVwiLFxuICAgIFwibmNpX3J4X2RhdGFfcGFja2V0XCIsXG4gICAgXCJuY2lfaGNpX3NlbmRfY21kXCIsXG4gICAgXCJuY2lfaGNpX3NldF9wYXJhbVwiLFxuICAgIFwibmNpX2hjaV9nZXRfcGFyYW1cIixcbiAgICBcIm5jaV9jb3JlX2Nvbm5fY3JlYXRlX3JzcF9wYWNrZXRcIixcbiAgICBcIm5jaV9jb3JlX2Nvbm5fY2xvc2VfcnNwX3BhY2tldFwiLFxuICAgIFwibmNpX3JmX2Rpc2NfcnNwX3BhY2tldFwiLFxuICAgIFwibmNpX2NvcmVfY29ubl9jcmVkaXRzX250Zl9wYWNrZXRcIixcbiAgICBcIm5jaV9yZl9pbnRmX2FjdGl2YXRlZF9udGZfcGFja2V0XCIsXG4gICAgXCJuY2lfcmZfZGVhY3RpdmF0ZV9udGZfcGFja2V0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgY29uY3VycmVuY3kgaXNzdWVzIGluIHRoZSBORkMgTkNJIGNvcmUgYnkgaW50cm9kdWNpbmcgYSBzcGlubG9jayB0byBwcm90ZWN0IGNvbm5lY3Rpb24gaW5mbyBsaXN0cyBhbmQgcG9pbnRlcnMuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGNvcmUgZGF0YSB0cmFuc21pc3Npb24sIHJlY2VwdGlvbiwgYW5kIEhDSSBjb21tYW5kIGhhbmRsaW5nLCB3aGljaCBhcmUgcmVhY2hhYmxlIHZpYSB0aGUgdmlydHVhbCBOQ0kgZHJpdmVyLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGFlNTVlODhkN2E0ZjcxMDViNDQ4NjgyMmUzYWRmNTM4OGYxYjhhMDBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1biAzMCAwOToyNToyOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmZjL3N0LW5jaS9zZS5jIGIvZHJpdmVycy9uZmMvc3QtbmNpL3NlLmNcbmluZGV4IDYwN2VjNzY4ZWI3YjRjLi4xZjhlMjI2NWUyMGIwNyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmZjL3N0LW5jaS9zZS5jXG4rKysgYi9kcml2ZXJzL25mYy9zdC1uY2kvc2UuY1xuQEAgLTU0OCw2ICs1NDgsNyBAQCBzdGF0aWMgaW50IHN0X25jaV9oY2lfbmV0d29ya19pbml0KHN0cnVjdCBuY2lfZGV2ICpuZGV2KVxuIFx0c3RydWN0IGNvcmVfY29ubl9jcmVhdGVfZGVzdF9zcGVjX3BhcmFtcyAqZGVzdF9wYXJhbXM7XG4gXHRzdHJ1Y3QgZGVzdF9zcGVjX3BhcmFtcyBzcGVjX3BhcmFtcztcbiBcdHN0cnVjdCBuY2lfY29ubl9pbmZvICAgICpjb25uX2luZm87XG4rXHR1OCBuZmNlZV9pZDtcbiBcdGludCByLCBkZXZfbnVtO1xuIFxuIFx0ZGVzdF9wYXJhbXMgPVxuQEAgLTU2OSw5ICs1NzAsMTQgQEAgc3RhdGljIGludCBzdF9uY2lfaGNpX25ldHdvcmtfaW5pdChzdHJ1Y3QgbmNpX2RldiAqbmRldilcbiBcdGlmIChyICE9IE5DSV9TVEFUVVNfT0spXG4gXHRcdGdvdG8gZnJlZV9kZXN0X3BhcmFtcztcbiBcbitcdHNwaW5fbG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbiBcdGNvbm5faW5mbyA9IG5kZXYtXHUwMDNlaGNpX2Rldi1cdTAwM2Vjb25uX2luZm87XG4tXHRpZiAoIWNvbm5faW5mbylcbitcdGlmICghY29ubl9pbmZvKSB7XG4rXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xuIFx0XHRnb3RvIGZyZWVfZGVzdF9wYXJhbXM7XG4rXHR9XG4rXHRuZmNlZV9pZCA9IGNvbm5faW5mby1cdTAwM2VkZXN0X3BhcmFtcy1cdTAwM2VpZDtcbitcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xuIFxuIFx0bmRldi1cdTAwM2VoY2lfZGV2LVx1MDAzZWluaXRfZGF0YS5nYXRlX2NvdW50ID0gQVJSQVlfU0laRShzdF9uY2lfZ2F0ZXMpO1xuIFx0bWVtY3B5KG5kZXYtXHUwMDNlaGNpX2Rldi1cdTAwM2Vpbml0X2RhdGEuZ2F0ZXMsIHN0X25jaV9nYXRlcyxcbkBAIC02MDEsMTMgKzYwNyw5IEBAIHN0YXRpYyBpbnQgc3RfbmNpX2hjaV9uZXR3b3JrX2luaXQoc3RydWN0IG5jaV9kZXYgKm5kZXYpXG4gXHQgKiBIQ0kgd2lsbCBiZSB1c2VkIGhlcmUgb25seSBmb3IgcHJvcHJpZXRhcnkgY29tbWFuZHMuXG4gXHQgKi9cbiBcdGlmICh0ZXN0X2JpdChTVF9OQ0lfRkFDVE9SWV9NT0RFLCBcdTAwMjZpbmZvLVx1MDAzZWZsYWdzKSlcbi1cdFx0ciA9IG5jaV9uZmNlZV9tb2RlX3NldChuZGV2LFxuLVx0XHRcdFx0ICAgICAgIG5kZXYtXHUwMDNlaGNpX2Rldi1cdTAwM2Vjb25uX2luZm8tXHUwMDNlZGVzdF9wYXJhbXMtXHUwMDNlaWQsXG4tXHRcdFx0XHQgICAgICAgTkNJX05GQ0VFX0RJU0FCTEUpO1xuK1x0XHRyID0gbmNpX25mY2VlX21vZGVfc2V0KG5kZXYsIG5mY2VlX2lkLCBOQ0lfTkZDRUVfRElTQUJMRSk7XG4gXHRlbHNlXG4tXHRcdHIgPSBuY2lfbmZjZWVfbW9kZV9zZXQobmRldixcbi1cdFx0XHRcdCAgICAgICBuZGV2LVx1MDAzZWhjaV9kZXYtXHUwMDNlY29ubl9pbmZvLVx1MDAzZWRlc3RfcGFyYW1zLVx1MDAzZWlkLFxuLVx0XHRcdFx0ICAgICAgIE5DSV9ORkNFRV9FTkFCTEUpO1xuK1x0XHRyID0gbmNpX25mY2VlX21vZGVfc2V0KG5kZXYsIG5mY2VlX2lkLCBOQ0lfTkZDRUVfRU5BQkxFKTtcbiBcbiBmcmVlX2Rlc3RfcGFyYW1zOlxuIFx0a2ZyZWUoZGVzdF9wYXJhbXMpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25mYy9uY2lfY29yZS5oIGIvaW5jbHVkZS9uZXQvbmZjL25jaV9jb3JlLmhcbmluZGV4IDY2NGQ1MDU4ZTY2ZTAxLi5hNWIxODZmMjczZDk3NCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L25mYy9uY2lfY29yZS5oXG4rKysgYi9pbmNsdWRlL25ldC9uZmMvbmNpX2NvcmUuaFxuQEAgLTE5LDYgKzE5LDcgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pbnRlcnJ1cHQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NrYnVmZi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvc3BpbmxvY2suaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3R0eS5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXHUwMDNjbmV0L25mYy9uZmMuaFx1MDAzZVxuQEAgLTIyNyw2ICsyMjgsOCBAQCBzdHJ1Y3QgbmNpX2RldiB7XG4gXHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkXHR0eF9xO1xuIFxuIFx0c3RydWN0IG11dGV4XHRcdHJlcV9sb2NrO1xuK1x0LyogU2VyaWFsaXplcyBjb25uX2luZm9fbGlzdCBhbmQgY29ubl9pbmZvIHBvaW50ZXIgYWxpYXMgdXBkYXRlcy4gKi9cbitcdHNwaW5sb2NrX3RcdFx0Y29ubl9pbmZvX2xvY2s7XG4gXHRzdHJ1Y3QgY29tcGxldGlvblx0cmVxX2NvbXBsZXRpb247XG4gXHRfX3UzMlx0XHRcdHJlcV9zdGF0dXM7XG4gXHRfX3UzMlx0XHRcdHJlcV9yZXN1bHQ7XG5AQCAtMzgyLDggKzM4NSwxMSBAQCB2b2lkIG5jaV9jbGVhcl90YXJnZXRfbGlzdChzdHJ1Y3QgbmNpX2RldiAqbmRldik7XG4gI2RlZmluZSBOQ0lfUkVRX0NBTkNFTEVEXHQyXG4gXG4gdm9pZCBuY2lfcmVxX2NvbXBsZXRlKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCBpbnQgcmVzdWx0KTtcbi1zdHJ1Y3QgbmNpX2Nvbm5faW5mbyAqbmNpX2dldF9jb25uX2luZm9fYnlfY29ubl9pZChzdHJ1Y3QgbmNpX2RldiAqbmRldixcbi1cdFx0XHRcdFx0XHQgICBpbnQgY29ubl9pZCk7XG4rc3RydWN0IG5jaV9jb25uX2luZm8gKm5jaV9nZXRfY29ubl9pbmZvX2J5X2Nvbm5faWRfbG9ja2VkKHN0cnVjdCBuY2lfZGV2ICpuZGV2LFxuK1x0XHRcdFx0XHRcdFx0ICBpbnQgY29ubl9pZCk7XG4raW50IG5jaV9nZXRfY29ubl9pbmZvX2J5X2Rlc3RfdHlwZV9wYXJhbXNfbG9ja2VkKHN0cnVjdCBuY2lfZGV2ICpuZGV2LFxuK1x0XHRcdFx0XHRcdCB1OCBkZXN0X3R5cGUsXG4rXHRcdFx0XHRcdFx0IGNvbnN0IHN0cnVjdCBkZXN0X3NwZWNfcGFyYW1zICpwYXJhbXMpO1xuIGludCBuY2lfZ2V0X2Nvbm5faW5mb19ieV9kZXN0X3R5cGVfcGFyYW1zKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCB1OCBkZXN0X3R5cGUsXG4gXHRcdFx0XHRcdCAgY29uc3Qgc3RydWN0IGRlc3Rfc3BlY19wYXJhbXMgKnBhcmFtcyk7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L25mYy9uY2kvY29yZS5jIGIvbmV0L25mYy9uY2kvY29yZS5jXG5pbmRleCA1ZjQ2YzRiNTcyMGY2Yy4uNTc1OTVhODI5YzhiMDYgMTAwNjQ0XG4tLS0gYS9uZXQvbmZjL25jaS9jb3JlLmNcbisrKyBiL25ldC9uZmMvbmNpL2NvcmUuY1xuQEAgLTQwLDggKzQwLDggQEAgc3RhdGljIHZvaWQgbmNpX2NtZF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XG4gc3RhdGljIHZvaWQgbmNpX3J4X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcbiBzdGF0aWMgdm9pZCBuY2lfdHhfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xuIFxuLXN0cnVjdCBuY2lfY29ubl9pbmZvICpuY2lfZ2V0X2Nvbm5faW5mb19ieV9jb25uX2lkKHN0cnVjdCBuY2lfZGV2ICpuZGV2LFxuLVx0XHRcdFx0XHRcdCAgIGludCBjb25uX2lkKVxuK3N0cnVjdCBuY2lfY29ubl9pbmZvICpuY2lfZ2V0X2Nvbm5faW5mb19ieV9jb25uX2lkX2xvY2tlZChzdHJ1Y3QgbmNpX2RldiAqbmRldixcbitcdFx0XHRcdFx0XHRcdCAgaW50IGNvbm5faWQpXG4ge1xuIFx0c3RydWN0IG5jaV9jb25uX2luZm8gKmNvbm5faW5mbztcbiBcbkBAIC01Myw4ICs1Myw5IEBAIHN0cnVjdCBuY2lfY29ubl9pbmZvICpuY2lfZ2V0X2Nvbm5faW5mb19ieV9jb25uX2lkKHN0cnVjdCBuY2lfZGV2ICpuZGV2LFxuIFx0cmV0dXJuIE5VTEw7XG4gfVxuIFxuLWludCBuY2lfZ2V0X2Nvbm5faW5mb19ieV9kZXN0X3R5cGVfcGFyYW1zKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCB1OCBkZXN0X3R5cGUsXG4tXHRcdFx0XHRcdCAgY29uc3Qgc3RydWN0IGRlc3Rfc3BlY19wYXJhbXMgKnBhcmFtcylcbitpbnQgbmNpX2dldF9jb25uX2luZm9fYnlfZGVzdF90eXBlX3BhcmFtc19sb2NrZWQoc3RydWN0IG5jaV9kZXYgKm5kZXYsXG4rXHRcdFx0XHRcdFx0IHU4IGRlc3RfdHlwZSxcbitcdFx0XHRcdFx0XHQgY29uc3Qgc3RydWN0IGRlc3Rfc3BlY19wYXJhbXMgKnBhcmFtcylcbiB7XG4gXHRjb25zdCBzdHJ1Y3QgbmNpX2Nvbm5faW5mbyAqY29ubl9pbmZvO1xuIFxuQEAgLTcxLDYgKzcyLDE5IEBAIGludCBuY2lfZ2V0X2Nvbm5faW5mb19ieV9kZXN0X3R5cGVfcGFyYW1zKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCB1OCBkZXN0X3R5cGUsXG4gXG4gXHRyZXR1cm4gLUVJTlZBTDtcbiB9XG4rXG4raW50IG5jaV9nZXRfY29ubl9pbmZvX2J5X2Rlc3RfdHlwZV9wYXJhbXMoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHU4IGRlc3RfdHlwZSxcbitcdFx0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgZGVzdF9zcGVjX3BhcmFtcyAqcGFyYW1zKVxuK3tcbitcdGludCBjb25uX2lkO1xuK1xuK1x0c3Bpbl9sb2NrX2JoKFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xuK1x0Y29ubl9pZCA9IG5jaV9nZXRfY29ubl9pbmZvX2J5X2Rlc3RfdHlwZV9wYXJhbXNfbG9ja2VkKG5kZXYsIGRlc3RfdHlwZSxcbitcdFx0XHRcdFx0XHRcdCAgICAgICBwYXJhbXMpO1xuK1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bmRldi1cdTAwM2Vjb25uX2luZm9fbG9jayk7XG4rXG4rXHRyZXR1cm4gY29ubl9pZDtcbit9XG4gRVhQT1JUX1NZTUJPTChuY2lfZ2V0X2Nvbm5faW5mb19ieV9kZXN0X3R5cGVfcGFyYW1zKTtcbiBcbiAvKiAtLS0tIE5DSSByZXF1ZXN0cyAtLS0tICovXG5AQCAtNDExLDEzICs0MjUsMTcgQEAgc3RhdGljIHZvaWQgbmNpX25mY2NfbG9vcGJhY2tfY2Iodm9pZCAqY29udGV4dCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGVycilcbiBcdHN0cnVjdCBuY2lfZGV2ICpuZGV2ID0gKHN0cnVjdCBuY2lfZGV2ICopY29udGV4dDtcbiBcdHN0cnVjdCBuY2lfY29ubl9pbmZvICpjb25uX2luZm87XG4gXG4tXHRjb25uX2luZm8gPSBuY2lfZ2V0X2Nvbm5faW5mb19ieV9jb25uX2lkKG5kZXYsIG5kZXYtXHUwMDNlY3VyX2Nvbm5faWQpO1xuK1x0c3Bpbl9sb2NrX2JoKFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xuK1x0Y29ubl9pbmZvID0gbmNpX2dldF9jb25uX2luZm9fYnlfY29ubl9pZF9sb2NrZWQobmRldixcbitcdFx0XHRcdFx0XHRcdG5kZXYtXHUwMDNlY3VyX2Nvbm5faWQpO1xuIFx0aWYgKCFjb25uX2luZm8pIHtcbitcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bmRldi1cdTAwM2Vjb25uX2luZm9fbG9jayk7XG4gXHRcdG5jaV9yZXFfY29tcGxldGUobmRldiwgTkNJX1NUQVRVU19SRUpFQ1RFRCk7XG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbiBcdGNvbm5faW5mby1cdTAwM2VyeF9za2IgPSBza2I7XG4rXHRzcGluX3VubG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbiBcbiBcdG5jaV9yZXFfY29tcGxldGUobmRldiwgTkNJX1NUQVRVU19PSyk7XG4gfVxuQEAgLTQ0MywxMyArNDYxLDE3IEBAIGludCBuY2lfbmZjY19sb29wYmFjayhzdHJ1Y3QgbmNpX2RldiAqbmRldiwgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGRhdGFfbGVuLFxuIFx0XHRcdFx0XHROVUxMKTtcbiBcdH1cbiBcbi1cdGNvbm5faW5mbyA9IG5jaV9nZXRfY29ubl9pbmZvX2J5X2Nvbm5faWQobmRldiwgY29ubl9pZCk7XG4tXHRpZiAoIWNvbm5faW5mbylcbitcdHNwaW5fbG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbitcdGNvbm5faW5mbyA9IG5jaV9nZXRfY29ubl9pbmZvX2J5X2Nvbm5faWRfbG9ja2VkKG5kZXYsIGNvbm5faWQpO1xuK1x0aWYgKCFjb25uX2luZm8pIHtcbitcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bmRldi1cdTAwM2Vjb25uX2luZm9fbG9jayk7XG4gXHRcdHJldHVybiAtRVBST1RPO1xuK1x0fVxuIFxuIFx0Lyogc3RvcmUgY2IgYW5kIGNvbnRleHQgdG8gYmUgdXNlZCBvbiByZWNlaXZpbmcgZGF0YSAqL1xuIFx0Y29ubl9pbmZvLVx1MDAzZWRhdGFfZXhjaGFuZ2VfY2IgPSBuY2lfbmZjY19sb29wYmFja19jYjtcbiBcdGNvbm5faW5mby1cdTAwM2VkYXRhX2V4Y2hhbmdlX2NiX2NvbnRleHQgPSBuZGV2O1xuK1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bmRldi1cdTAwM2Vjb25uX2luZm9fbG9jayk7XG4gXG4gXHRza2IgPSBuY2lfc2tiX2FsbG9jKG5kZXYsIE5DSV9EQVRBX0hEUl9TSVpFICsgZGF0YV9sZW4sIEdGUF9LRVJORUwpO1xuIFx0aWYgKCFza2IpXG5AQCAtNDY0LDggKzQ4NiwxNSBAQCBpbnQgbmNpX25mY2NfbG9vcGJhY2soc3RydWN0IG5jaV9kZXYgKm5kZXYsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBkYXRhX2xlbixcbiBcdG5kZXYtXHUwMDNlY3VyX2Nvbm5faWQgPSBjb25uX2lkO1xuIFx0ciA9IG5jaV9yZXF1ZXN0KG5kZXYsIG5jaV9zZW5kX2RhdGFfcmVxLCBcdTAwMjZsb29wYmFja19kYXRhLFxuIFx0XHRcdG1zZWNzX3RvX2ppZmZpZXMoTkNJX0RBVEFfVElNRU9VVCkpO1xuLVx0aWYgKHIgPT0gTkNJX1NUQVRVU19PSyBcdTAwMjZcdTAwMjYgcmVzcClcbi1cdFx0KnJlc3AgPSBjb25uX2luZm8tXHUwMDNlcnhfc2tiO1xuK1x0aWYgKHIgPT0gTkNJX1NUQVRVU19PSyBcdTAwMjZcdTAwMjYgcmVzcCkge1xuK1x0XHRzcGluX2xvY2tfYmgoXHUwMDI2bmRldi1cdTAwM2Vjb25uX2luZm9fbG9jayk7XG4rXHRcdGNvbm5faW5mbyA9IG5jaV9nZXRfY29ubl9pbmZvX2J5X2Nvbm5faWRfbG9ja2VkKG5kZXYsIGNvbm5faWQpO1xuK1x0XHRpZiAoY29ubl9pbmZvKVxuK1x0XHRcdCpyZXNwID0gY29ubl9pbmZvLVx1MDAzZXJ4X3NrYjtcbitcdFx0ZWxzZVxuK1x0XHRcdHIgPSAtRVBST1RPO1xuK1x0XHRzcGluX3VubG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbitcdH1cbiBcbiBcdHJldHVybiByO1xuIH1cbkBAIC0xMDQ1LDEyICsxMDc0LDYgQEAgc3RhdGljIGludCBuY2lfdHJhbnNjZWl2ZShzdHJ1Y3QgbmZjX2RldiAqbmZjX2Rldiwgc3RydWN0IG5mY190YXJnZXQgKnRhcmdldCxcbiBcdGludCByYztcbiBcdHN0cnVjdCBuY2lfY29ubl9pbmZvICpjb25uX2luZm87XG4gXG4tXHRjb25uX2luZm8gPSBuZGV2LVx1MDAzZXJmX2Nvbm5faW5mbztcbi1cdGlmICghY29ubl9pbmZvKSB7XG4tXHRcdGtmcmVlX3NrYihza2IpO1xuLVx0XHRyZXR1cm4gLUVQUk9UTztcbi1cdH1cbi1cbiBcdHByX2RlYnVnKFwidGFyZ2V0X2lkeCAlZCwgbGVuICVkXFxuXCIsIHRhcmdldC1cdTAwM2VpZHgsIHNrYi1cdTAwM2VsZW4pO1xuIFxuIFx0aWYgKCFuZGV2LVx1MDAzZXRhcmdldF9hY3RpdmVfcHJvdCkge1xuQEAgLTEwNjQsOSArMTA4NywxOSBAQCBzdGF0aWMgaW50IG5jaV90cmFuc2NlaXZlKHN0cnVjdCBuZmNfZGV2ICpuZmNfZGV2LCBzdHJ1Y3QgbmZjX3RhcmdldCAqdGFyZ2V0LFxuIFx0XHRyZXR1cm4gLUVCVVNZO1xuIFx0fVxuIFxuK1x0c3Bpbl9sb2NrX2JoKFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xuK1x0Y29ubl9pbmZvID0gbmRldi1cdTAwM2VyZl9jb25uX2luZm87XG4rXHRpZiAoIWNvbm5faW5mbykge1xuK1x0XHRzcGluX3VubG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbitcdFx0a2ZyZWVfc2tiKHNrYik7XG4rXHRcdGNsZWFyX2JpdChOQ0lfREFUQV9FWENIQU5HRSwgXHUwMDI2bmRldi1cdTAwM2VmbGFncyk7XG4rXHRcdHJldHVybiAtRVBST1RPO1xuK1x0fVxuK1xuIFx0Lyogc3RvcmUgY2IgYW5kIGNvbnRleHQgdG8gYmUgdXNlZCBvbiByZWNlaXZpbmcgZGF0YSAqL1xuIFx0Y29ubl9pbmZvLVx1MDAzZWRhdGFfZXhjaGFuZ2VfY2IgPSBjYjtcbiBcdGNvbm5faW5mby1cdTAwM2VkYXRhX2V4Y2hhbmdlX2NiX2NvbnRleHQgPSBjYl9jb250ZXh0O1xuK1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bmRldi1cdTAwM2Vjb25uX2luZm9fbG9jayk7XG4gXG4gXHRyYyA9IG5jaV9zZW5kX2RhdGEobmRldiwgTkNJX1NUQVRJQ19SRl9DT05OX0lELCBza2IpO1xuIFx0aWYgKHJjKVxuQEAgLTEyODgsNiArMTMyMSw3IEBAIGludCBuY2lfcmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCBuY2lfZGV2ICpuZGV2KVxuIFx0dGltZXJfc2V0dXAoXHUwMDI2bmRldi1cdTAwM2VkYXRhX3RpbWVyLCBuY2lfZGF0YV90aW1lciwgMCk7XG4gXG4gXHRtdXRleF9pbml0KFx1MDAyNm5kZXYtXHUwMDNlcmVxX2xvY2spO1xuK1x0c3Bpbl9sb2NrX2luaXQoXHUwMDI2bmRldi1cdTAwM2Vjb25uX2luZm9fbG9jayk7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19saXN0KTtcbiBcbiBcdHJjID0gbmZjX3JlZ2lzdGVyX2RldmljZShuZGV2LVx1MDAzZW5mY19kZXYpO1xuQEAgLTEzMzMsMTEgKzEzNjcsMTYgQEAgdm9pZCBuY2lfdW5yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IG5jaV9kZXYgKm5kZXYpXG4gXHRkZXN0cm95X3dvcmtxdWV1ZShuZGV2LVx1MDAzZXJ4X3dxKTtcbiBcdGRlc3Ryb3lfd29ya3F1ZXVlKG5kZXYtXHUwMDNldHhfd3EpO1xuIFxuK1x0c3Bpbl9sb2NrX2JoKFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGNvbm5faW5mbywgbiwgXHUwMDI2bmRldi1cdTAwM2Vjb25uX2luZm9fbGlzdCwgbGlzdCkge1xuIFx0XHRsaXN0X2RlbChcdTAwMjZjb25uX2luZm8tXHUwMDNlbGlzdCk7XG4rXHRcdGlmIChjb25uX2luZm8gPT0gbmRldi1cdTAwM2VyZl9jb25uX2luZm8pXG4rXHRcdFx0bmRldi1cdTAwM2VyZl9jb25uX2luZm8gPSBOVUxMO1xuK1x0XHRpZiAoY29ubl9pbmZvID09IG5kZXYtXHUwMDNlaGNpX2Rldi1cdTAwM2Vjb25uX2luZm8pXG4rXHRcdFx0bmRldi1cdTAwM2VoY2lfZGV2LVx1MDAzZWNvbm5faW5mbyA9IE5VTEw7XG4gXHRcdC8qIGNvbm5faW5mbyBpcyBhbGxvY2F0ZWQgd2l0aCBkZXZtX2t6YWxsb2MgKi9cbiBcdH1cbi1cbitcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xuIFx0bmZjX3JlbW92ZV9kZXZpY2UobmRldi1cdTAwM2VuZmNfZGV2KTtcbiB9XG4gRVhQT1JUX1NZTUJPTChuY2lfdW5yZWdpc3Rlcl9kZXZpY2UpO1xuQEAgLTE1MjMsMjMgKzE1NjIsMzEgQEAgc3RhdGljIHZvaWQgbmNpX3R4X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFx0c3RydWN0IG5jaV9jb25uX2luZm8gKmNvbm5faW5mbztcbiBcdHN0cnVjdCBza19idWZmICpza2I7XG4gXG4tXHRjb25uX2luZm8gPSBuY2lfZ2V0X2Nvbm5faW5mb19ieV9jb25uX2lkKG5kZXYsIG5kZXYtXHUwMDNlY3VyX2Nvbm5faWQpO1xuLVx0aWYgKCFjb25uX2luZm8pXG4tXHRcdHJldHVybjtcbitcdC8qIFNlbmQgcXVldWVkIHR4IGRhdGEgKi9cbitcdGZvciAoOzspIHtcbitcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xuK1x0XHRjb25uX2luZm8gPSBuY2lfZ2V0X2Nvbm5faW5mb19ieV9jb25uX2lkX2xvY2tlZChuZGV2LFxuK1x0XHRcdFx0XHRcdFx0XHRuZGV2LVx1MDAzZWN1cl9jb25uX2lkKTtcbitcdFx0aWYgKCFjb25uX2luZm8pXG4rXHRcdFx0Z290byB1bmxvY2s7XG4gXG4tXHRwcl9kZWJ1ZyhcImNyZWRpdHNfY250ICVkXFxuXCIsIGF0b21pY19yZWFkKFx1MDAyNmNvbm5faW5mby1cdTAwM2VjcmVkaXRzX2NudCkpO1xuK1x0XHRwcl9kZWJ1ZyhcImNyZWRpdHNfY250ICVkXFxuXCIsXG4rXHRcdFx0IGF0b21pY19yZWFkKFx1MDAyNmNvbm5faW5mby1cdTAwM2VjcmVkaXRzX2NudCkpO1xuK1xuK1x0XHRpZiAoIWF0b21pY19yZWFkKFx1MDAyNmNvbm5faW5mby1cdTAwM2VjcmVkaXRzX2NudCkpXG4rXHRcdFx0Z290byB1bmxvY2s7XG4gXG4tXHQvKiBTZW5kIHF1ZXVlZCB0eCBkYXRhICovXG4tXHR3aGlsZSAoYXRvbWljX3JlYWQoXHUwMDI2Y29ubl9pbmZvLVx1MDAzZWNyZWRpdHNfY250KSkge1xuIFx0XHRza2IgPSBza2JfZGVxdWV1ZShcdTAwMjZuZGV2LVx1MDAzZXR4X3EpO1xuIFx0XHRpZiAoIXNrYilcbi1cdFx0XHRyZXR1cm47XG4tXHRcdGtjb3ZfcmVtb3RlX3N0YXJ0X2NvbW1vbihza2JfZ2V0X2tjb3ZfaGFuZGxlKHNrYikpO1xuK1x0XHRcdGdvdG8gdW5sb2NrO1xuIFxuIFx0XHQvKiBDaGVjayBpZiBkYXRhIGZsb3cgY29udHJvbCBpcyB1c2VkICovXG4gXHRcdGlmIChhdG9taWNfcmVhZChcdTAwMjZjb25uX2luZm8tXHUwMDNlY3JlZGl0c19jbnQpICE9XG4gXHRcdCAgICBOQ0lfREFUQV9GTE9XX0NPTlRST0xfTk9UX1VTRUQpXG4gXHRcdFx0YXRvbWljX2RlYyhcdTAwMjZjb25uX2luZm8tXHUwMDNlY3JlZGl0c19jbnQpO1xuK1x0XHRzcGluX3VubG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbitcbitcdFx0a2Nvdl9yZW1vdGVfc3RhcnRfY29tbW9uKHNrYl9nZXRfa2Nvdl9oYW5kbGUoc2tiKSk7XG4gXG4gXHRcdHByX2RlYnVnKFwiTkNJIFRYOiBNVD1kYXRhLCBQQkY9JWQsIGNvbm5faWQ9JWQsIHBsZW49JWRcXG5cIixcbiBcdFx0XHQgbmNpX3BiZihza2ItXHUwMDNlZGF0YSksXG5AQCAtMTU1Miw2ICsxNTk5LDkgQEAgc3RhdGljIHZvaWQgbmNpX3R4X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFx0XHRcdCAgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoTkNJX0RBVEFfVElNRU9VVCkpO1xuIFx0XHRrY292X3JlbW90ZV9zdG9wKCk7XG4gXHR9XG4rXG4rdW5sb2NrOlxuK1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bmRldi1cdTAwM2Vjb25uX2luZm9fbG9jayk7XG4gfVxuIFxuIC8qIC0tLS0tIE5DSSBSWCB3b3JrZXIgdGhyZWFkIChkYXRhIFx1MDAyNiBjb250cm9sKSAtLS0tLSAqL1xuZGlmZiAtLWdpdCBhL25ldC9uZmMvbmNpL2RhdGEuYyBiL25ldC9uZmMvbmNpL2RhdGEuY1xuaW5kZXggNWY5OGM3M2RiNWFmZGUuLjMzNGMwZTVhOTRkYmM0IDEwMDY0NFxuLS0tIGEvbmV0L25mYy9uY2kvZGF0YS5jXG4rKysgYi9uZXQvbmZjL25jaS9kYXRhLmNcbkBAIC0zMCw4ICszMCwxMCBAQCB2b2lkIG5jaV9kYXRhX2V4Y2hhbmdlX2NvbXBsZXRlKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0ZGF0YV9leGNoYW5nZV9jYl90IGNiO1xuIFx0dm9pZCAqY2JfY29udGV4dDtcbiBcbi1cdGNvbm5faW5mbyA9IG5jaV9nZXRfY29ubl9pbmZvX2J5X2Nvbm5faWQobmRldiwgY29ubl9pZCk7XG4rXHRzcGluX2xvY2tfYmgoXHUwMDI2bmRldi1cdTAwM2Vjb25uX2luZm9fbG9jayk7XG4rXHRjb25uX2luZm8gPSBuY2lfZ2V0X2Nvbm5faW5mb19ieV9jb25uX2lkX2xvY2tlZChuZGV2LCBjb25uX2lkKTtcbiBcdGlmICghY29ubl9pbmZvKSB7XG4rXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xuIFx0XHRrZnJlZV9za2Ioc2tiKTtcbiBcdFx0Y2xlYXJfYml0KE5DSV9EQVRBX0VYQ0hBTkdFLCBcdTAwMjZuZGV2LVx1MDAzZWZsYWdzKTtcbiBcdFx0cmV0dXJuO1xuQEAgLTM5LDYgKzQxLDcgQEAgdm9pZCBuY2lfZGF0YV9leGNoYW5nZV9jb21wbGV0ZShzdHJ1Y3QgbmNpX2RldiAqbmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcbiBcdGNiID0gY29ubl9pbmZvLVx1MDAzZWRhdGFfZXhjaGFuZ2VfY2I7XG4gXHRjYl9jb250ZXh0ID0gY29ubl9pbmZvLVx1MDAzZWRhdGFfZXhjaGFuZ2VfY2JfY29udGV4dDtcbitcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xuIFxuIFx0cHJfZGVidWcoXCJsZW4gJWQsIGVyciAlZFxcblwiLCBza2IgPyBza2ItXHUwMDNlbGVuIDogMCwgZXJyKTtcbiBcbkBAIC04NSwxOSArODgsMjYgQEAgc3RhdGljIGlubGluZSB2b2lkIG5jaV9wdXNoX2RhdGFfaGRyKHN0cnVjdCBuY2lfZGV2ICpuZGV2LFxuIGludCBuY2lfY29ubl9tYXhfZGF0YV9wa3RfcGF5bG9hZF9zaXplKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCBfX3U4IGNvbm5faWQpXG4ge1xuIFx0Y29uc3Qgc3RydWN0IG5jaV9jb25uX2luZm8gKmNvbm5faW5mbztcbitcdGludCBtYXhfcGt0X3BheWxvYWRfbGVuO1xuIFxuLVx0Y29ubl9pbmZvID0gbmNpX2dldF9jb25uX2luZm9fYnlfY29ubl9pZChuZGV2LCBjb25uX2lkKTtcbi1cdGlmICghY29ubl9pbmZvKVxuK1x0c3Bpbl9sb2NrX2JoKFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xuK1x0Y29ubl9pbmZvID0gbmNpX2dldF9jb25uX2luZm9fYnlfY29ubl9pZF9sb2NrZWQobmRldiwgY29ubl9pZCk7XG4rXHRpZiAoIWNvbm5faW5mbykge1xuK1x0XHRzcGluX3VubG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbiBcdFx0cmV0dXJuIC1FUFJPVE87XG4rXHR9XG4rXHRtYXhfcGt0X3BheWxvYWRfbGVuID0gY29ubl9pbmZvLVx1MDAzZW1heF9wa3RfcGF5bG9hZF9sZW47XG4rXHRzcGluX3VubG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbiBcbi1cdHJldHVybiBjb25uX2luZm8tXHUwMDNlbWF4X3BrdF9wYXlsb2FkX2xlbjtcbitcdHJldHVybiBtYXhfcGt0X3BheWxvYWRfbGVuO1xuIH1cbiBFWFBPUlRfU1lNQk9MKG5jaV9jb25uX21heF9kYXRhX3BrdF9wYXlsb2FkX3NpemUpO1xuIFxuIHN0YXRpYyBpbnQgbmNpX3F1ZXVlX3R4X2RhdGFfZnJhZ3Moc3RydWN0IG5jaV9kZXYgKm5kZXYsXG4gXHRcdFx0XHQgICBfX3U4IGNvbm5faWQsXG4tXHRcdFx0XHQgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKSB7XG4tXHRjb25zdCBzdHJ1Y3QgbmNpX2Nvbm5faW5mbyAqY29ubl9pbmZvO1xuK1x0XHRcdFx0ICAgc3RydWN0IHNrX2J1ZmYgKnNrYixcbitcdFx0XHRcdCAgIF9fdTggbWF4X3BrdF9wYXlsb2FkX2xlbilcbit7XG4gXHRpbnQgdG90YWxfbGVuID0gc2tiLVx1MDAzZWxlbjtcbiBcdGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEgPSBza2ItXHUwMDNlZGF0YTtcbiBcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG5AQCAtMTA4LDE3ICsxMTgsMTAgQEAgc3RhdGljIGludCBuY2lfcXVldWVfdHhfZGF0YV9mcmFncyhzdHJ1Y3QgbmNpX2RldiAqbmRldixcbiBcbiBcdHByX2RlYnVnKFwiY29ubl9pZCAweCV4LCB0b3RhbF9sZW4gJWRcXG5cIiwgY29ubl9pZCwgdG90YWxfbGVuKTtcbiBcbi1cdGNvbm5faW5mbyA9IG5jaV9nZXRfY29ubl9pbmZvX2J5X2Nvbm5faWQobmRldiwgY29ubl9pZCk7XG4tXHRpZiAoIWNvbm5faW5mbykge1xuLVx0XHRyYyA9IC1FUFJPVE87XG4tXHRcdGdvdG8gZXhpdDtcbi1cdH1cbi1cbiBcdF9fc2tiX3F1ZXVlX2hlYWRfaW5pdChcdTAwMjZmcmFnc19xKTtcbiBcbiBcdHdoaWxlICh0b3RhbF9sZW4pIHtcbi1cdFx0ZnJhZ19sZW4gPVxuLVx0XHRcdG1pbl90KGludCwgdG90YWxfbGVuLCBjb25uX2luZm8tXHUwMDNlbWF4X3BrdF9wYXlsb2FkX2xlbik7XG4rXHRcdGZyYWdfbGVuID0gbWluX3QoaW50LCB0b3RhbF9sZW4sIG1heF9wa3RfcGF5bG9hZF9sZW4pO1xuIFxuIFx0XHRza2JfZnJhZyA9IG5jaV9za2JfYWxsb2MobmRldixcbiBcdFx0XHRcdFx0IChOQ0lfREFUQV9IRFJfU0laRSArIGZyYWdfbGVuKSxcbkBAIC0xNzEsNDAgKzE3NCw0NyBAQCBzdGF0aWMgaW50IG5jaV9xdWV1ZV90eF9kYXRhX2ZyYWdzKHN0cnVjdCBuY2lfZGV2ICpuZGV2LFxuIGludCBuY2lfc2VuZF9kYXRhKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCBfX3U4IGNvbm5faWQsIHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuIFx0Y29uc3Qgc3RydWN0IG5jaV9jb25uX2luZm8gKmNvbm5faW5mbztcbitcdF9fdTggbWF4X3BrdF9wYXlsb2FkX2xlbjtcbiBcdGludCByYyA9IDA7XG4gXG4gXHRwcl9kZWJ1ZyhcImNvbm5faWQgMHgleCwgcGxlbiAlZFxcblwiLCBjb25uX2lkLCBza2ItXHUwMDNlbGVuKTtcbiBcbi1cdGNvbm5faW5mbyA9IG5jaV9nZXRfY29ubl9pbmZvX2J5X2Nvbm5faWQobmRldiwgY29ubl9pZCk7XG4rXHRzcGluX2xvY2tfYmgoXHUwMDI2bmRldi1cdTAwM2Vjb25uX2luZm9fbG9jayk7XG4rXHRjb25uX2luZm8gPSBuY2lfZ2V0X2Nvbm5faW5mb19ieV9jb25uX2lkX2xvY2tlZChuZGV2LCBjb25uX2lkKTtcbiBcdGlmICghY29ubl9pbmZvKSB7XG4gXHRcdHJjID0gLUVQUk9UTztcbi1cdFx0Z290byBmcmVlX2V4aXQ7XG4rXHRcdGdvdG8gdW5sb2NrO1xuIFx0fVxuK1x0bWF4X3BrdF9wYXlsb2FkX2xlbiA9IGNvbm5faW5mby1cdTAwM2VtYXhfcGt0X3BheWxvYWRfbGVuO1xuK1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bmRldi1cdTAwM2Vjb25uX2luZm9fbG9jayk7XG4gXG4gXHQvKiBjaGVjayBpZiB0aGUgcGFja2V0IG5lZWQgdG8gYmUgZnJhZ21lbnRlZCAqL1xuLVx0aWYgKHNrYi1cdTAwM2VsZW4gXHUwMDNjPSBjb25uX2luZm8tXHUwMDNlbWF4X3BrdF9wYXlsb2FkX2xlbikge1xuK1x0aWYgKHNrYi1cdTAwM2VsZW4gXHUwMDNjPSBtYXhfcGt0X3BheWxvYWRfbGVuKSB7XG4gXHRcdC8qIG5vIG5lZWQgdG8gZnJhZ21lbnQgcGFja2V0ICovXG4gXHRcdG5jaV9wdXNoX2RhdGFfaGRyKG5kZXYsIGNvbm5faWQsIHNrYiwgTkNJX1BCRl9MQVNUKTtcbiBcbiBcdFx0c2tiX3F1ZXVlX3RhaWwoXHUwMDI2bmRldi1cdTAwM2V0eF9xLCBza2IpO1xuIFx0fSBlbHNlIHtcbiBcdFx0LyogZnJhZ21lbnQgcGFja2V0IGFuZCBxdWV1ZSB0aGUgZnJhZ21lbnRzICovXG4tXHRcdHJjID0gbmNpX3F1ZXVlX3R4X2RhdGFfZnJhZ3MobmRldiwgY29ubl9pZCwgc2tiKTtcbitcdFx0cmMgPSBuY2lfcXVldWVfdHhfZGF0YV9mcmFncyhuZGV2LCBjb25uX2lkLCBza2IsXG4rXHRcdFx0XHRcdCAgICAgbWF4X3BrdF9wYXlsb2FkX2xlbik7XG4gXHRcdGlmIChyYykge1xuIFx0XHRcdHByX2VycihcImZhaWxlZCB0byBmcmFnbWVudCB0eCBkYXRhIHBhY2tldFxcblwiKTtcbi1cdFx0XHRnb3RvIGZyZWVfZXhpdDtcbitcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbitcdFx0XHRyZXR1cm4gcmM7XG4gXHRcdH1cbiBcdH1cbiBcbitcdHNwaW5fbG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbiBcdG5kZXYtXHUwMDNlY3VyX2Nvbm5faWQgPSBjb25uX2lkO1xuLVx0cXVldWVfd29yayhuZGV2LVx1MDAzZXR4X3dxLCBcdTAwMjZuZGV2LVx1MDAzZXR4X3dvcmspO1xuLVxuLVx0Z290byBleGl0O1xuLVxuLWZyZWVfZXhpdDpcbi1cdGtmcmVlX3NrYihza2IpO1xuK1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bmRldi1cdTAwM2Vjb25uX2luZm9fbG9jayk7XG4gXG4tZXhpdDpcbitcdHF1ZXVlX3dvcmsobmRldi1cdTAwM2V0eF93cSwgXHUwMDI2bmRldi1cdTAwM2V0eF93b3JrKTtcbitcdHJldHVybiByYztcbit1bmxvY2s6XG4rXHRzcGluX3VubG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbitcdGlmIChyYylcbitcdFx0a2ZyZWVfc2tiKHNrYik7XG4gXHRyZXR1cm4gcmM7XG4gfVxuIEVYUE9SVF9TWU1CT0wobmNpX3NlbmRfZGF0YSk7XG5AQCAtMjgyLDExICsyOTIsMTUgQEAgdm9pZCBuY2lfcnhfZGF0YV9wYWNrZXQoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRcdCBuY2lfY29ubl9pZChza2ItXHUwMDNlZGF0YSksXG4gXHRcdCBuY2lfcGxlbihza2ItXHUwMDNlZGF0YSkpO1xuIFxuLVx0Y29ubl9pbmZvID0gbmNpX2dldF9jb25uX2luZm9fYnlfY29ubl9pZChuZGV2LCBuY2lfY29ubl9pZChza2ItXHUwMDNlZGF0YSkpO1xuK1x0c3Bpbl9sb2NrX2JoKFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xuK1x0Y29ubl9pbmZvID0gbmNpX2dldF9jb25uX2luZm9fYnlfY29ubl9pZF9sb2NrZWQobmRldixcbitcdFx0XHRcdFx0XHRcdG5jaV9jb25uX2lkKHNrYi1cdTAwM2VkYXRhKSk7XG4gXHRpZiAoIWNvbm5faW5mbykge1xuK1x0XHRzcGluX3VubG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbiBcdFx0a2ZyZWVfc2tiKHNrYik7XG4gXHRcdHJldHVybjtcbiBcdH1cbitcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xuIFxuIFx0Lyogc3RyaXAgdGhlIG5jaSBkYXRhIGhlYWRlciAqL1xuIFx0c2tiX3B1bGwoc2tiLCBOQ0lfREFUQV9IRFJfU0laRSk7XG5kaWZmIC0tZ2l0IGEvbmV0L25mYy9uY2kvaGNpLmMgYi9uZXQvbmZjL25jaS9oY2kuY1xuaW5kZXggYzAzZThhMGJkM2JkNjQuLmUyZjdhYjE1OTczY2U5IDEwMDY0NFxuLS0tIGEvbmV0L25mYy9uY2kvaGNpLmNcbisrKyBiL25ldC9uZmMvbmNpL2hjaS5jXG5AQCAtMTQ3LDE0ICsxNDcsMjIgQEAgc3RhdGljIGludCBuY2lfaGNpX3NlbmRfZGF0YShzdHJ1Y3QgbmNpX2RldiAqbmRldiwgdTggcGlwZSxcbiBcdHN0cnVjdCBza19idWZmICpza2I7XG4gXHRpbnQgbGVuLCBpLCByO1xuIFx0dTggY2IgPSBwaXBlO1xuK1x0dTggY29ubl9pZDtcbitcdHU4IG1heF9wa3RfcGF5bG9hZF9sZW47XG4gXG4rXHRzcGluX2xvY2tfYmgoXHUwMDI2bmRldi1cdTAwM2Vjb25uX2luZm9fbG9jayk7XG4gXHRjb25uX2luZm8gPSBuZGV2LVx1MDAzZWhjaV9kZXYtXHUwMDNlY29ubl9pbmZvO1xuLVx0aWYgKCFjb25uX2luZm8pXG4rXHRpZiAoIWNvbm5faW5mbykge1xuK1x0XHRzcGluX3VubG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbiBcdFx0cmV0dXJuIC1FUFJPVE87XG4rXHR9XG4rXHRjb25uX2lkID0gY29ubl9pbmZvLVx1MDAzZWNvbm5faWQ7XG4rXHRtYXhfcGt0X3BheWxvYWRfbGVuID0gY29ubl9pbmZvLVx1MDAzZW1heF9wa3RfcGF5bG9hZF9sZW47XG4rXHRzcGluX3VubG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbiBcbiBcdGkgPSAwO1xuLVx0c2tiID0gbmNpX3NrYl9hbGxvYyhuZGV2LCBjb25uX2luZm8tXHUwMDNlbWF4X3BrdF9wYXlsb2FkX2xlbiArXG4tXHRcdFx0ICAgIE5DSV9EQVRBX0hEUl9TSVpFLCBHRlBfQVRPTUlDKTtcbitcdHNrYiA9IG5jaV9za2JfYWxsb2MobmRldiwgbWF4X3BrdF9wYXlsb2FkX2xlbiArIE5DSV9EQVRBX0hEUl9TSVpFLFxuK1x0XHRcdCAgICBHRlBfQVRPTUlDKTtcbiBcdGlmICghc2tiKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbkBAIC0xNjMsMTIgKzE3MSwxMSBAQCBzdGF0aWMgaW50IG5jaV9oY2lfc2VuZF9kYXRhKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCB1OCBwaXBlLFxuIFxuIFx0ZG8ge1xuIFx0XHQvKiBJZiBsYXN0IHBhY2tldCBhZGQgTkNJX0hGUF9OT19DSEFJTklORyAqL1xuLVx0XHRpZiAoaSArIGNvbm5faW5mby1cdTAwM2VtYXhfcGt0X3BheWxvYWRfbGVuIC1cbi1cdFx0ICAgIChza2ItXHUwMDNlbGVuICsgMSkgXHUwMDNlPSBkYXRhX2xlbikge1xuK1x0XHRpZiAoaSArIG1heF9wa3RfcGF5bG9hZF9sZW4gLSAoc2tiLVx1MDAzZWxlbiArIDEpIFx1MDAzZT0gZGF0YV9sZW4pIHtcbiBcdFx0XHRjYiB8PSBOQ0lfSEZQX05PX0NIQUlOSU5HO1xuIFx0XHRcdGxlbiA9IGRhdGFfbGVuIC0gaTtcbiBcdFx0fSBlbHNlIHtcbi1cdFx0XHRsZW4gPSBjb25uX2luZm8tXHUwMDNlbWF4X3BrdF9wYXlsb2FkX2xlbiAtIHNrYi1cdTAwM2VsZW4gLSAxO1xuK1x0XHRcdGxlbiA9IG1heF9wa3RfcGF5bG9hZF9sZW4gLSBza2ItXHUwMDNlbGVuIC0gMTtcbiBcdFx0fVxuIFxuIFx0XHQqKHU4ICopc2tiX3B1c2goc2tiLCAxKSA9IGNiO1xuQEAgLTE3NiwxNSArMTgzLDE0IEBAIHN0YXRpYyBpbnQgbmNpX2hjaV9zZW5kX2RhdGEoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHU4IHBpcGUsXG4gXHRcdGlmIChsZW4gXHUwMDNlIDApXG4gXHRcdFx0c2tiX3B1dF9kYXRhKHNrYiwgZGF0YSArIGksIGxlbik7XG4gXG4tXHRcdHIgPSBuY2lfc2VuZF9kYXRhKG5kZXYsIGNvbm5faW5mby1cdTAwM2Vjb25uX2lkLCBza2IpO1xuK1x0XHRyID0gbmNpX3NlbmRfZGF0YShuZGV2LCBjb25uX2lkLCBza2IpO1xuIFx0XHRpZiAociBcdTAwM2MgMClcbiBcdFx0XHRyZXR1cm4gcjtcbiBcbiBcdFx0aSArPSBsZW47XG4gXG4gXHRcdGlmIChpIFx1MDAzYyBkYXRhX2xlbikge1xuLVx0XHRcdHNrYiA9IG5jaV9za2JfYWxsb2MobmRldixcbi1cdFx0XHRcdFx0ICAgIGNvbm5faW5mby1cdTAwM2VtYXhfcGt0X3BheWxvYWRfbGVuICtcbitcdFx0XHRza2IgPSBuY2lfc2tiX2FsbG9jKG5kZXYsIG1heF9wa3RfcGF5bG9hZF9sZW4gK1xuIFx0XHRcdFx0XHQgICAgTkNJX0RBVEFfSERSX1NJWkUsIEdGUF9BVE9NSUMpO1xuIFx0XHRcdGlmICghc2tiKVxuIFx0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG5AQCAtMjI1LDE3ICsyMzEsMjIgQEAgaW50IG5jaV9oY2lfc2VuZF9jbWQoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHU4IGdhdGUsIHU4IGNtZCxcbiBcdGNvbnN0IHN0cnVjdCBuY2lfaGNwX21lc3NhZ2UgKm1lc3NhZ2U7XG4gXHRjb25zdCBzdHJ1Y3QgbmNpX2Nvbm5faW5mbyAqY29ubl9pbmZvO1xuIFx0c3RydWN0IG5jaV9kYXRhIGRhdGE7XG4rXHRzdHJ1Y3Qgc2tfYnVmZiAqcnhfc2tiO1xuIFx0aW50IHI7XG4gXHR1OCBwaXBlID0gbmRldi1cdTAwM2VoY2lfZGV2LVx1MDAzZWdhdGUycGlwZVtnYXRlXTtcbiBcbiBcdGlmIChwaXBlID09IE5DSV9IQ0lfSU5WQUxJRF9QSVBFKVxuIFx0XHRyZXR1cm4gLUVBRERSTk9UQVZBSUw7XG4gXG4rXHRzcGluX2xvY2tfYmgoXHUwMDI2bmRldi1cdTAwM2Vjb25uX2luZm9fbG9jayk7XG4gXHRjb25uX2luZm8gPSBuZGV2LVx1MDAzZWhjaV9kZXYtXHUwMDNlY29ubl9pbmZvO1xuLVx0aWYgKCFjb25uX2luZm8pXG4rXHRpZiAoIWNvbm5faW5mbykge1xuK1x0XHRzcGluX3VubG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbiBcdFx0cmV0dXJuIC1FUFJPVE87XG4rXHR9XG4gXG4gXHRkYXRhLmNvbm5faWQgPSBjb25uX2luZm8tXHUwMDNlY29ubl9pZDtcbitcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xuIFx0ZGF0YS5waXBlID0gcGlwZTtcbiBcdGRhdGEuY21kID0gTkNJX0hDUF9IRUFERVIoTkNJX0hDSV9IQ1BfQ09NTUFORCwgY21kKTtcbiBcdGRhdGEuZGF0YSA9IHBhcmFtO1xuQEAgLTI0NCwxMyArMjU1LDIyIEBAIGludCBuY2lfaGNpX3NlbmRfY21kKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCB1OCBnYXRlLCB1OCBjbWQsXG4gXHRyID0gbmNpX3JlcXVlc3QobmRldiwgbmNpX2hjaV9zZW5kX2RhdGFfcmVxLCBcdTAwMjZkYXRhLFxuIFx0XHRcdG1zZWNzX3RvX2ppZmZpZXMoTkNJX0RBVEFfVElNRU9VVCkpO1xuIFx0aWYgKHIgPT0gTkNJX1NUQVRVU19PSykge1xuLVx0XHRtZXNzYWdlID0gKHN0cnVjdCBuY2lfaGNwX21lc3NhZ2UgKiljb25uX2luZm8tXHUwMDNlcnhfc2tiLVx1MDAzZWRhdGE7XG4rXHRcdHNwaW5fbG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbitcdFx0Y29ubl9pbmZvID0gbmRldi1cdTAwM2VoY2lfZGV2LVx1MDAzZWNvbm5faW5mbztcbitcdFx0cnhfc2tiID0gY29ubl9pbmZvID8gY29ubl9pbmZvLVx1MDAzZXJ4X3NrYiA6IE5VTEw7XG4rXHRcdGlmICghcnhfc2tiKSB7XG4rXHRcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bmRldi1cdTAwM2Vjb25uX2luZm9fbG9jayk7XG4rXHRcdFx0cmV0dXJuIC1FUFJPVE87XG4rXHRcdH1cbitcbitcdFx0bWVzc2FnZSA9IChzdHJ1Y3QgbmNpX2hjcF9tZXNzYWdlICopcnhfc2tiLVx1MDAzZWRhdGE7XG4gXHRcdHIgPSBuY2lfaGNpX3Jlc3VsdF90b19lcnJubyhcbiBcdFx0XHROQ0lfSENQX01TR19HRVRfQ01EKG1lc3NhZ2UtXHUwMDNlaGVhZGVyKSk7XG4tXHRcdHNrYl9wdWxsKGNvbm5faW5mby1cdTAwM2VyeF9za2IsIE5DSV9IQ0lfSENQX01FU1NBR0VfSEVBREVSX0xFTik7XG4rXHRcdHNrYl9wdWxsKHJ4X3NrYiwgTkNJX0hDSV9IQ1BfTUVTU0FHRV9IRUFERVJfTEVOKTtcbitcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bmRldi1cdTAwM2Vjb25uX2luZm9fbG9jayk7XG4gXG4gXHRcdGlmICghciBcdTAwMjZcdTAwMjYgc2tiKVxuLVx0XHRcdCpza2IgPSBjb25uX2luZm8tXHUwMDNlcnhfc2tiO1xuK1x0XHRcdCpza2IgPSByeF9za2I7XG4gXHR9XG4gXG4gXHRyZXR1cm4gcjtcbkBAIC0zNjYsMTEgKzM4NiwxNSBAQCBzdGF0aWMgdm9pZCBuY2lfaGNpX3Jlc3BfcmVjZWl2ZWQoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHU4IHBpcGUsXG4ge1xuIFx0c3RydWN0IG5jaV9jb25uX2luZm8gKmNvbm5faW5mbztcbiBcbitcdHNwaW5fbG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbiBcdGNvbm5faW5mbyA9IG5kZXYtXHUwMDNlaGNpX2Rldi1cdTAwM2Vjb25uX2luZm87XG4tXHRpZiAoIWNvbm5faW5mbylcbitcdGlmICghY29ubl9pbmZvKSB7XG4rXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xuIFx0XHRnb3RvIGV4aXQ7XG4rXHR9XG4gXG4gXHRjb25uX2luZm8tXHUwMDNlcnhfc2tiID0gc2tiO1xuK1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bmRldi1cdTAwM2Vjb25uX2luZm9fbG9jayk7XG4gXG4gZXhpdDpcbiBcdG5jaV9yZXFfY29tcGxldGUobmRldiwgTkNJX1NUQVRVU19PSyk7XG5AQCAtNTEwLDExICs1MzQsMTUgQEAgaW50IG5jaV9oY2lfb3Blbl9waXBlKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCB1OCBwaXBlKVxuIFx0c3RydWN0IG5jaV9kYXRhIGRhdGE7XG4gXHRjb25zdCBzdHJ1Y3QgbmNpX2Nvbm5faW5mbyAqY29ubl9pbmZvO1xuIFxuK1x0c3Bpbl9sb2NrX2JoKFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xuIFx0Y29ubl9pbmZvID0gbmRldi1cdTAwM2VoY2lfZGV2LVx1MDAzZWNvbm5faW5mbztcbi1cdGlmICghY29ubl9pbmZvKVxuK1x0aWYgKCFjb25uX2luZm8pIHtcbitcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bmRldi1cdTAwM2Vjb25uX2luZm9fbG9jayk7XG4gXHRcdHJldHVybiAtRVBST1RPO1xuK1x0fVxuIFxuIFx0ZGF0YS5jb25uX2lkID0gY29ubl9pbmZvLVx1MDAzZWNvbm5faWQ7XG4rXHRzcGluX3VubG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbiBcdGRhdGEucGlwZSA9IHBpcGU7XG4gXHRkYXRhLmNtZCA9IE5DSV9IQ1BfSEVBREVSKE5DSV9IQ0lfSENQX0NPTU1BTkQsXG4gXHRcdFx0XHQgICAgICAgTkNJX0hDSV9BTllfT1BFTl9QSVBFKTtcbkBAIC01NjksNiArNTk3LDcgQEAgaW50IG5jaV9oY2lfc2V0X3BhcmFtKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCB1OCBnYXRlLCB1OCBpZHgsXG4gXHRjb25zdCBzdHJ1Y3QgbmNpX2hjcF9tZXNzYWdlICptZXNzYWdlO1xuIFx0Y29uc3Qgc3RydWN0IG5jaV9jb25uX2luZm8gKmNvbm5faW5mbztcbiBcdHN0cnVjdCBuY2lfZGF0YSBkYXRhO1xuK1x0c3RydWN0IHNrX2J1ZmYgKnJ4X3NrYjtcbiBcdGludCByO1xuIFx0dTggKnRtcDtcbiBcdHU4IHBpcGUgPSBuZGV2LVx1MDAzZWhjaV9kZXYtXHUwMDNlZ2F0ZTJwaXBlW2dhdGVdO1xuQEAgLTU3OCw5ICs2MDcsMTQgQEAgaW50IG5jaV9oY2lfc2V0X3BhcmFtKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCB1OCBnYXRlLCB1OCBpZHgsXG4gXHRpZiAocGlwZSA9PSBOQ0lfSENJX0lOVkFMSURfUElQRSlcbiBcdFx0cmV0dXJuIC1FQUREUk5PVEFWQUlMO1xuIFxuK1x0c3Bpbl9sb2NrX2JoKFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xuIFx0Y29ubl9pbmZvID0gbmRldi1cdTAwM2VoY2lfZGV2LVx1MDAzZWNvbm5faW5mbztcbi1cdGlmICghY29ubl9pbmZvKVxuK1x0aWYgKCFjb25uX2luZm8pIHtcbitcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bmRldi1cdTAwM2Vjb25uX2luZm9fbG9jayk7XG4gXHRcdHJldHVybiAtRVBST1RPO1xuK1x0fVxuK1x0ZGF0YS5jb25uX2lkID0gY29ubl9pbmZvLVx1MDAzZWNvbm5faWQ7XG4rXHRzcGluX3VubG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbiBcbiBcdHRtcCA9IGttYWxsb2MoMSArIHBhcmFtX2xlbiwgR0ZQX0tFUk5FTCk7XG4gXHRpZiAoIXRtcClcbkBAIC01ODksNyArNjIzLDYgQEAgaW50IG5jaV9oY2lfc2V0X3BhcmFtKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCB1OCBnYXRlLCB1OCBpZHgsXG4gXHQqdG1wID0gaWR4O1xuIFx0bWVtY3B5KHRtcCArIDEsIHBhcmFtLCBwYXJhbV9sZW4pO1xuIFxuLVx0ZGF0YS5jb25uX2lkID0gY29ubl9pbmZvLVx1MDAzZWNvbm5faWQ7XG4gXHRkYXRhLnBpcGUgPSBwaXBlO1xuIFx0ZGF0YS5jbWQgPSBOQ0lfSENQX0hFQURFUihOQ0lfSENJX0hDUF9DT01NQU5ELFxuIFx0XHRcdFx0ICAgICAgIE5DSV9IQ0lfQU5ZX1NFVF9QQVJBTUVURVIpO1xuQEAgLTU5OSwxMCArNjMyLDIwIEBAIGludCBuY2lfaGNpX3NldF9wYXJhbShzdHJ1Y3QgbmNpX2RldiAqbmRldiwgdTggZ2F0ZSwgdTggaWR4LFxuIFx0ciA9IG5jaV9yZXF1ZXN0KG5kZXYsIG5jaV9oY2lfc2VuZF9kYXRhX3JlcSwgXHUwMDI2ZGF0YSxcbiBcdFx0XHRtc2Vjc190b19qaWZmaWVzKE5DSV9EQVRBX1RJTUVPVVQpKTtcbiBcdGlmIChyID09IE5DSV9TVEFUVVNfT0spIHtcbi1cdFx0bWVzc2FnZSA9IChzdHJ1Y3QgbmNpX2hjcF9tZXNzYWdlICopY29ubl9pbmZvLVx1MDAzZXJ4X3NrYi1cdTAwM2VkYXRhO1xuK1x0XHRzcGluX2xvY2tfYmgoXHUwMDI2bmRldi1cdTAwM2Vjb25uX2luZm9fbG9jayk7XG4rXHRcdGNvbm5faW5mbyA9IG5kZXYtXHUwMDNlaGNpX2Rldi1cdTAwM2Vjb25uX2luZm87XG4rXHRcdHJ4X3NrYiA9IGNvbm5faW5mbyA/IGNvbm5faW5mby1cdTAwM2VyeF9za2IgOiBOVUxMO1xuK1x0XHRpZiAoIXJ4X3NrYikge1xuK1x0XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xuK1x0XHRcdGtmcmVlKHRtcCk7XG4rXHRcdFx0cmV0dXJuIC1FUFJPVE87XG4rXHRcdH1cbitcbitcdFx0bWVzc2FnZSA9IChzdHJ1Y3QgbmNpX2hjcF9tZXNzYWdlICopcnhfc2tiLVx1MDAzZWRhdGE7XG4gXHRcdHIgPSBuY2lfaGNpX3Jlc3VsdF90b19lcnJubyhcbiBcdFx0XHROQ0lfSENQX01TR19HRVRfQ01EKG1lc3NhZ2UtXHUwMDNlaGVhZGVyKSk7XG4tXHRcdHNrYl9wdWxsKGNvbm5faW5mby1cdTAwM2VyeF9za2IsIE5DSV9IQ0lfSENQX01FU1NBR0VfSEVBREVSX0xFTik7XG4rXHRcdHNrYl9wdWxsKHJ4X3NrYiwgTkNJX0hDSV9IQ1BfTUVTU0FHRV9IRUFERVJfTEVOKTtcbitcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bmRldi1cdTAwM2Vjb25uX2luZm9fbG9jayk7XG4gXHR9XG4gXG4gXHRrZnJlZSh0bXApO1xuQEAgLTYxNiw2ICs2NTksNyBAQCBpbnQgbmNpX2hjaV9nZXRfcGFyYW0oc3RydWN0IG5jaV9kZXYgKm5kZXYsIHU4IGdhdGUsIHU4IGlkeCxcbiBcdGNvbnN0IHN0cnVjdCBuY2lfaGNwX21lc3NhZ2UgKm1lc3NhZ2U7XG4gXHRjb25zdCBzdHJ1Y3QgbmNpX2Nvbm5faW5mbyAqY29ubl9pbmZvO1xuIFx0c3RydWN0IG5jaV9kYXRhIGRhdGE7XG4rXHRzdHJ1Y3Qgc2tfYnVmZiAqcnhfc2tiO1xuIFx0aW50IHI7XG4gXHR1OCBwaXBlID0gbmRldi1cdTAwM2VoY2lfZGV2LVx1MDAzZWdhdGUycGlwZVtnYXRlXTtcbiBcbkBAIC02MjQsMTEgKzY2OCwxNSBAQCBpbnQgbmNpX2hjaV9nZXRfcGFyYW0oc3RydWN0IG5jaV9kZXYgKm5kZXYsIHU4IGdhdGUsIHU4IGlkeCxcbiBcdGlmIChwaXBlID09IE5DSV9IQ0lfSU5WQUxJRF9QSVBFKVxuIFx0XHRyZXR1cm4gLUVBRERSTk9UQVZBSUw7XG4gXG4rXHRzcGluX2xvY2tfYmgoXHUwMDI2bmRldi1cdTAwM2Vjb25uX2luZm9fbG9jayk7XG4gXHRjb25uX2luZm8gPSBuZGV2LVx1MDAzZWhjaV9kZXYtXHUwMDNlY29ubl9pbmZvO1xuLVx0aWYgKCFjb25uX2luZm8pXG4rXHRpZiAoIWNvbm5faW5mbykge1xuK1x0XHRzcGluX3VubG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbiBcdFx0cmV0dXJuIC1FUFJPVE87XG4rXHR9XG4gXG4gXHRkYXRhLmNvbm5faWQgPSBjb25uX2luZm8tXHUwMDNlY29ubl9pZDtcbitcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xuIFx0ZGF0YS5waXBlID0gcGlwZTtcbiBcdGRhdGEuY21kID0gTkNJX0hDUF9IRUFERVIoTkNJX0hDSV9IQ1BfQ09NTUFORCxcbiBcdFx0XHRcdCAgTkNJX0hDSV9BTllfR0VUX1BBUkFNRVRFUik7XG5AQCAtNjM5LDEzICs2ODcsMjIgQEAgaW50IG5jaV9oY2lfZ2V0X3BhcmFtKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCB1OCBnYXRlLCB1OCBpZHgsXG4gXHRcdFx0bXNlY3NfdG9famlmZmllcyhOQ0lfREFUQV9USU1FT1VUKSk7XG4gXG4gXHRpZiAociA9PSBOQ0lfU1RBVFVTX09LKSB7XG4tXHRcdG1lc3NhZ2UgPSAoc3RydWN0IG5jaV9oY3BfbWVzc2FnZSAqKWNvbm5faW5mby1cdTAwM2VyeF9za2ItXHUwMDNlZGF0YTtcbitcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xuK1x0XHRjb25uX2luZm8gPSBuZGV2LVx1MDAzZWhjaV9kZXYtXHUwMDNlY29ubl9pbmZvO1xuK1x0XHRyeF9za2IgPSBjb25uX2luZm8gPyBjb25uX2luZm8tXHUwMDNlcnhfc2tiIDogTlVMTDtcbitcdFx0aWYgKCFyeF9za2IpIHtcbitcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbitcdFx0XHRyZXR1cm4gLUVQUk9UTztcbitcdFx0fVxuK1xuK1x0XHRtZXNzYWdlID0gKHN0cnVjdCBuY2lfaGNwX21lc3NhZ2UgKilyeF9za2ItXHUwMDNlZGF0YTtcbiBcdFx0ciA9IG5jaV9oY2lfcmVzdWx0X3RvX2Vycm5vKFxuIFx0XHRcdE5DSV9IQ1BfTVNHX0dFVF9DTUQobWVzc2FnZS1cdTAwM2VoZWFkZXIpKTtcbi1cdFx0c2tiX3B1bGwoY29ubl9pbmZvLVx1MDAzZXJ4X3NrYiwgTkNJX0hDSV9IQ1BfTUVTU0FHRV9IRUFERVJfTEVOKTtcbitcdFx0c2tiX3B1bGwocnhfc2tiLCBOQ0lfSENJX0hDUF9NRVNTQUdFX0hFQURFUl9MRU4pO1xuK1x0XHRzcGluX3VubG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbiBcbiBcdFx0aWYgKCFyIFx1MDAyNlx1MDAyNiBza2IpXG4tXHRcdFx0KnNrYiA9IGNvbm5faW5mby1cdTAwM2VyeF9za2I7XG4rXHRcdFx0KnNrYiA9IHJ4X3NrYjtcbiBcdH1cbiBcbiBcdHJldHVybiByO1xuQEAgLTcyOSwxMiArNzg2LDE2IEBAIGludCBuY2lfaGNpX2Rldl9zZXNzaW9uX2luaXQoc3RydWN0IG5jaV9kZXYgKm5kZXYpXG4gXHRuZGV2LVx1MDAzZWhjaV9kZXYtXHUwMDNlY291bnRfcGlwZXMgPSAwO1xuIFx0bmRldi1cdTAwM2VoY2lfZGV2LVx1MDAzZWV4cGVjdGVkX3BpcGVzID0gMDtcbiBcbitcdHNwaW5fbG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbiBcdGNvbm5faW5mbyA9IG5kZXYtXHUwMDNlaGNpX2Rldi1cdTAwM2Vjb25uX2luZm87XG4tXHRpZiAoIWNvbm5faW5mbylcbitcdGlmICghY29ubl9pbmZvKSB7XG4rXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xuIFx0XHRyZXR1cm4gLUVQUk9UTztcbitcdH1cbiBcbiBcdGNvbm5faW5mby1cdTAwM2VkYXRhX2V4Y2hhbmdlX2NiID0gbmNpX2hjaV9kYXRhX3JlY2VpdmVkX2NiO1xuIFx0Y29ubl9pbmZvLVx1MDAzZWRhdGFfZXhjaGFuZ2VfY2JfY29udGV4dCA9IG5kZXY7XG4rXHRzcGluX3VubG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbiBcbiBcdG5jaV9oY2lfcmVzZXRfcGlwZXMobmRldi1cdTAwM2VoY2lfZGV2KTtcbiBcbmRpZmYgLS1naXQgYS9uZXQvbmZjL25jaS9udGYuYyBiL25ldC9uZmMvbmNpL250Zi5jXG5pbmRleCBjOTY1MTJiYjg2NTMxNS4uNDgyOGExYzlkMzVmMGUgMTAwNjQ0XG4tLS0gYS9uZXQvbmZjL25jaS9udGYuY1xuKysrIGIvbmV0L25mYy9uY2kvbnRmLmNcbkBAIC04MSwxMyArODEsMTcgQEAgc3RhdGljIGludCBuY2lfY29yZV9jb25uX2NyZWRpdHNfbnRmX3BhY2tldChzdHJ1Y3QgbmNpX2RldiAqbmRldixcbiBcdFx0XHQgaSwgbnRmLVx1MDAzZWNvbm5fZW50cmllc1tpXS5jb25uX2lkLFxuIFx0XHRcdCBudGYtXHUwMDNlY29ubl9lbnRyaWVzW2ldLmNyZWRpdHMpO1xuIFxuLVx0XHRjb25uX2luZm8gPSBuY2lfZ2V0X2Nvbm5faW5mb19ieV9jb25uX2lkKG5kZXYsXG4tXHRcdFx0XHRcdFx0XHQgbnRmLVx1MDAzZWNvbm5fZW50cmllc1tpXS5jb25uX2lkKTtcbi1cdFx0aWYgKCFjb25uX2luZm8pXG4rXHRcdHNwaW5fbG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbitcdFx0Y29ubl9pbmZvID0gbmNpX2dldF9jb25uX2luZm9fYnlfY29ubl9pZF9sb2NrZWQobmRldixcbitcdFx0XHRcdFx0XHRcdFx0bnRmLVx1MDAzZWNvbm5fZW50cmllc1tpXS5jb25uX2lkKTtcbitcdFx0aWYgKCFjb25uX2luZm8pIHtcbitcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbiBcdFx0XHRyZXR1cm4gMDtcbitcdFx0fVxuIFxuIFx0XHRhdG9taWNfYWRkKG50Zi1cdTAwM2Vjb25uX2VudHJpZXNbaV0uY3JlZGl0cyxcbiBcdFx0XHQgICBcdTAwMjZjb25uX2luZm8tXHUwMDNlY3JlZGl0c19jbnQpO1xuK1x0XHRzcGluX3VubG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbiBcdH1cbiBcbiBcdC8qIHRyaWdnZXIgdGhlIG5leHQgdHggKi9cbkBAIC04MjgsOSArODMyLDEyIEBAIHN0YXRpYyBpbnQgbmNpX3JmX2ludGZfYWN0aXZhdGVkX250Zl9wYWNrZXQoc3RydWN0IG5jaV9kZXYgKm5kZXYsXG4gXG4gZXhpdDpcbiBcdGlmIChlcnIgPT0gTkNJX1NUQVRVU19PSykge1xuK1x0XHRzcGluX2xvY2tfYmgoXHUwMDI2bmRldi1cdTAwM2Vjb25uX2luZm9fbG9jayk7XG4gXHRcdGNvbm5faW5mbyA9IG5kZXYtXHUwMDNlcmZfY29ubl9pbmZvO1xuLVx0XHRpZiAoIWNvbm5faW5mbylcbitcdFx0aWYgKCFjb25uX2luZm8pIHtcbitcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbiBcdFx0XHRyZXR1cm4gMDtcbitcdFx0fVxuIFxuIFx0XHRjb25uX2luZm8tXHUwMDNlbWF4X3BrdF9wYXlsb2FkX2xlbiA9IG50Zi5tYXhfZGF0YV9wa3RfcGF5bG9hZF9zaXplO1xuIFx0XHRjb25uX2luZm8tXHUwMDNlaW5pdGlhbF9udW1fY3JlZGl0cyA9IG50Zi5pbml0aWFsX251bV9jcmVkaXRzO1xuQEAgLTgzOCw2ICs4NDUsNyBAQCBzdGF0aWMgaW50IG5jaV9yZl9pbnRmX2FjdGl2YXRlZF9udGZfcGFja2V0KHN0cnVjdCBuY2lfZGV2ICpuZGV2LFxuIFx0XHQvKiBzZXQgdGhlIGF2YWlsYWJsZSBjcmVkaXRzIHRvIGluaXRpYWwgdmFsdWUgKi9cbiBcdFx0YXRvbWljX3NldChcdTAwMjZjb25uX2luZm8tXHUwMDNlY3JlZGl0c19jbnQsXG4gXHRcdFx0ICAgY29ubl9pbmZvLVx1MDAzZWluaXRpYWxfbnVtX2NyZWRpdHMpO1xuK1x0XHRzcGluX3VubG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbiBcbiBcdFx0Lyogc3RvcmUgZ2VuZXJhbCBieXRlcyB0byBiZSByZXBvcnRlZCBsYXRlciBpbiBkZXBfbGlua191cCAqL1xuIFx0XHRpZiAobnRmLnJmX2ludGVyZmFjZSA9PSBOQ0lfUkZfSU5URVJGQUNFX05GQ19ERVApIHtcbkBAIC05MDEsOSArOTA5LDEzIEBAIHN0YXRpYyBpbnQgbmNpX3JmX2RlYWN0aXZhdGVfbnRmX3BhY2tldChzdHJ1Y3QgbmNpX2RldiAqbmRldixcbiBcbiBcdHByX2RlYnVnKFwiZW50cnksIHR5cGUgMHgleCwgcmVhc29uIDB4JXhcXG5cIiwgbnRmLVx1MDAzZXR5cGUsIG50Zi1cdTAwM2VyZWFzb24pO1xuIFxuK1x0c3Bpbl9sb2NrX2JoKFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xuIFx0Y29ubl9pbmZvID0gbmRldi1cdTAwM2VyZl9jb25uX2luZm87XG4tXHRpZiAoIWNvbm5faW5mbylcbitcdGlmICghY29ubl9pbmZvKSB7XG4rXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xuIFx0XHRyZXR1cm4gMDtcbitcdH1cbitcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xuIFxuIFx0LyogZHJvcCB0eCBkYXRhIHF1ZXVlICovXG4gXHRza2JfcXVldWVfcHVyZ2UoXHUwMDI2bmRldi1cdTAwM2V0eF9xKTtcbmRpZmYgLS1naXQgYS9uZXQvbmZjL25jaS9yc3AuYyBiL25ldC9uZmMvbmNpL3JzcC5jXG5pbmRleCA5ZWViODYyODI1YzVmZS4uMGNmZjEyNTA5MjNlZDkgMTAwNjQ0XG4tLS0gYS9uZXQvbmZjL25jaS9yc3AuY1xuKysrIGIvbmV0L25mYy9uY2kvcnNwLmNcbkBAIC0xODYsNiArMTg2LDcgQEAgc3RhdGljIHZvaWQgbmNpX3JmX2Rpc2NfcnNwX3BhY2tldChzdHJ1Y3QgbmNpX2RldiAqbmRldixcbiBcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuIFx0c3RydWN0IG5jaV9jb25uX2luZm8gKmNvbm5faW5mbztcbitcdHN0cnVjdCBuY2lfY29ubl9pbmZvICpuZXdfY29ubl9pbmZvO1xuIFx0X191OCBzdGF0dXMgPSBza2ItXHUwMDNlZGF0YVswXTtcbiBcbiBcdHByX2RlYnVnKFwic3RhdHVzIDB4JXhcXG5cIiwgc3RhdHVzKTtcbkBAIC0xOTMsMTkgKzE5NCwzMyBAQCBzdGF0aWMgdm9pZCBuY2lfcmZfZGlzY19yc3BfcGFja2V0KHN0cnVjdCBuY2lfZGV2ICpuZGV2LFxuIFx0aWYgKHN0YXR1cyA9PSBOQ0lfU1RBVFVTX09LKSB7XG4gXHRcdGF0b21pY19zZXQoXHUwMDI2bmRldi1cdTAwM2VzdGF0ZSwgTkNJX0RJU0NPVkVSWSk7XG4gXG4rXHRcdHNwaW5fbG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbiBcdFx0Y29ubl9pbmZvID0gbmRldi1cdTAwM2VyZl9jb25uX2luZm87XG4rXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xuK1xuIFx0XHRpZiAoIWNvbm5faW5mbykge1xuLVx0XHRcdGNvbm5faW5mbyA9IGRldm1fa3phbGxvYyhcdTAwMjZuZGV2LVx1MDAzZW5mY19kZXYtXHUwMDNlZGV2LFxuLVx0XHRcdFx0XHRcdCBzaXplb2Yoc3RydWN0IG5jaV9jb25uX2luZm8pLFxuLVx0XHRcdFx0XHRcdCBHRlBfS0VSTkVMKTtcbi1cdFx0XHRpZiAoIWNvbm5faW5mbykge1xuK1x0XHRcdG5ld19jb25uX2luZm8gPSBkZXZtX2t6YWxsb2MoXHUwMDI2bmRldi1cdTAwM2VuZmNfZGV2LVx1MDAzZWRldixcbitcdFx0XHRcdFx0XHQgICAgIHNpemVvZihzdHJ1Y3QgbmNpX2Nvbm5faW5mbyksXG4rXHRcdFx0XHRcdFx0ICAgICBHRlBfS0VSTkVMKTtcbitcdFx0XHRpZiAoIW5ld19jb25uX2luZm8pIHtcbiBcdFx0XHRcdHN0YXR1cyA9IE5DSV9TVEFUVVNfUkVKRUNURUQ7XG4gXHRcdFx0XHRnb3RvIGV4aXQ7XG4gXHRcdFx0fVxuLVx0XHRcdGNvbm5faW5mby1cdTAwM2Vjb25uX2lkID0gTkNJX1NUQVRJQ19SRl9DT05OX0lEO1xuLVx0XHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNmNvbm5faW5mby1cdTAwM2VsaXN0KTtcbi1cdFx0XHRsaXN0X2FkZChcdTAwMjZjb25uX2luZm8tXHUwMDNlbGlzdCwgXHUwMDI2bmRldi1cdTAwM2Vjb25uX2luZm9fbGlzdCk7XG4tXHRcdFx0bmRldi1cdTAwM2VyZl9jb25uX2luZm8gPSBjb25uX2luZm87XG4rXG4rXHRcdFx0bmV3X2Nvbm5faW5mby1cdTAwM2Vjb25uX2lkID0gTkNJX1NUQVRJQ19SRl9DT05OX0lEO1xuK1x0XHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNm5ld19jb25uX2luZm8tXHUwMDNlbGlzdCk7XG4rXG4rXHRcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xuK1x0XHRcdGlmICghbmRldi1cdTAwM2VyZl9jb25uX2luZm8pIHtcbitcdFx0XHRcdGxpc3RfYWRkKFx1MDAyNm5ld19jb25uX2luZm8tXHUwMDNlbGlzdCxcbitcdFx0XHRcdFx0IFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xpc3QpO1xuK1x0XHRcdFx0bmRldi1cdTAwM2VyZl9jb25uX2luZm8gPSBuZXdfY29ubl9pbmZvO1xuK1x0XHRcdFx0bmV3X2Nvbm5faW5mbyA9IE5VTEw7XG4rXHRcdFx0fVxuK1x0XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xuK1xuK1x0XHRcdGlmIChuZXdfY29ubl9pbmZvKVxuK1x0XHRcdFx0ZGV2bV9rZnJlZShcdTAwMjZuZGV2LVx1MDAzZW5mY19kZXYtXHUwMDNlZGV2LCBuZXdfY29ubl9pbmZvKTtcbiBcdFx0fVxuIFx0fVxuIFxuQEAgLTI5OCwyMCArMzEzLDIwIEBAIHN0YXRpYyB2b2lkIG5jaV9jb3JlX2Nvbm5fY3JlYXRlX3JzcF9wYWNrZXQoc3RydWN0IG5jaV9kZXYgKm5kZXYsXG4gXHRcdGNvbm5faW5mby1cdTAwM2VkZXN0X3BhcmFtcy1cdTAwM2VpZCA9IG5kZXYtXHUwMDNlY3VyX3BhcmFtcy5pZDtcbiBcdFx0Y29ubl9pbmZvLVx1MDAzZWRlc3RfcGFyYW1zLVx1MDAzZXByb3RvY29sID0gbmRldi1cdTAwM2VjdXJfcGFyYW1zLnByb3RvY29sO1xuIFx0XHRjb25uX2luZm8tXHUwMDNlY29ubl9pZCA9IHJzcC1cdTAwM2Vjb25uX2lkO1xuK1x0XHRjb25uX2luZm8tXHUwMDNlbWF4X3BrdF9wYXlsb2FkX2xlbiA9IHJzcC1cdTAwM2VtYXhfY3RybF9wa3RfcGF5bG9hZF9sZW47XG4rXHRcdGF0b21pY19zZXQoXHUwMDI2Y29ubl9pbmZvLVx1MDAzZWNyZWRpdHNfY250LCByc3AtXHUwMDNlY3JlZGl0c19jbnQpO1xuIFxuIFx0XHQvKiBOb3RlOiBkYXRhX2V4Y2hhbmdlX2NiIGFuZCBkYXRhX2V4Y2hhbmdlX2NiX2NvbnRleHQgbmVlZCB0b1xuIFx0XHQgKiBiZSBzcGVjaWZ5IG91dCBvZiBuY2lfY29yZV9jb25uX2NyZWF0ZV9yc3BfcGFja2V0XG4gXHRcdCAqL1xuIFxuIFx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZjb25uX2luZm8tXHUwMDNlbGlzdCk7XG4rXHRcdHNwaW5fbG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbiBcdFx0bGlzdF9hZGQoXHUwMDI2Y29ubl9pbmZvLVx1MDAzZWxpc3QsIFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xpc3QpO1xuIFxuIFx0XHRpZiAobmRldi1cdTAwM2VjdXJfcGFyYW1zLmlkID09IG5kZXYtXHUwMDNlaGNpX2Rldi1cdTAwM2VuZmNlZV9pZClcbiBcdFx0XHRuZGV2LVx1MDAzZWhjaV9kZXYtXHUwMDNlY29ubl9pbmZvID0gY29ubl9pbmZvO1xuLVxuLVx0XHRjb25uX2luZm8tXHUwMDNlY29ubl9pZCA9IHJzcC1cdTAwM2Vjb25uX2lkO1xuLVx0XHRjb25uX2luZm8tXHUwMDNlbWF4X3BrdF9wYXlsb2FkX2xlbiA9IHJzcC1cdTAwM2VtYXhfY3RybF9wa3RfcGF5bG9hZF9sZW47XG4tXHRcdGF0b21pY19zZXQoXHUwMDI2Y29ubl9pbmZvLVx1MDAzZWNyZWRpdHNfY250LCByc3AtXHUwMDNlY3JlZGl0c19jbnQpO1xuK1x0XHRzcGluX3VubG9ja19iaChcdTAwMjZuZGV2LVx1MDAzZWNvbm5faW5mb19sb2NrKTtcbiBcdH1cbiBcbiBmcmVlX2Nvbm5faW5mbzpcbkBAIC0zMzAsMTQgKzM0NSwxOSBAQCBzdGF0aWMgdm9pZCBuY2lfY29yZV9jb25uX2Nsb3NlX3JzcF9wYWNrZXQoc3RydWN0IG5jaV9kZXYgKm5kZXYsXG4gXG4gXHRwcl9kZWJ1ZyhcInN0YXR1cyAweCV4XFxuXCIsIHN0YXR1cyk7XG4gXHRpZiAoc3RhdHVzID09IE5DSV9TVEFUVVNfT0spIHtcbi1cdFx0Y29ubl9pbmZvID0gbmNpX2dldF9jb25uX2luZm9fYnlfY29ubl9pZChuZGV2LFxuLVx0XHRcdFx0XHRcdFx0IG5kZXYtXHUwMDNlY3VyX2Nvbm5faWQpO1xuK1x0XHRzcGluX2xvY2tfYmgoXHUwMDI2bmRldi1cdTAwM2Vjb25uX2luZm9fbG9jayk7XG4rXHRcdGNvbm5faW5mbyA9IG5jaV9nZXRfY29ubl9pbmZvX2J5X2Nvbm5faWRfbG9ja2VkKG5kZXYsXG4rXHRcdFx0XHRcdFx0XHRcdG5kZXYtXHUwMDNlY3VyX2Nvbm5faWQpO1xuIFx0XHRpZiAoY29ubl9pbmZvKSB7XG4gXHRcdFx0bGlzdF9kZWwoXHUwMDI2Y29ubl9pbmZvLVx1MDAzZWxpc3QpO1xuIFx0XHRcdGlmIChjb25uX2luZm8gPT0gbmRldi1cdTAwM2VyZl9jb25uX2luZm8pXG4gXHRcdFx0XHRuZGV2LVx1MDAzZXJmX2Nvbm5faW5mbyA9IE5VTEw7XG4tXHRcdFx0ZGV2bV9rZnJlZShcdTAwMjZuZGV2LVx1MDAzZW5mY19kZXYtXHUwMDNlZGV2LCBjb25uX2luZm8pO1xuK1x0XHRcdGlmIChjb25uX2luZm8gPT0gbmRldi1cdTAwM2VoY2lfZGV2LVx1MDAzZWNvbm5faW5mbylcbitcdFx0XHRcdG5kZXYtXHUwMDNlaGNpX2Rldi1cdTAwM2Vjb25uX2luZm8gPSBOVUxMO1xuIFx0XHR9XG4rXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5kZXYtXHUwMDNlY29ubl9pbmZvX2xvY2spO1xuK1x0XHRpZiAoY29ubl9pbmZvKVxuK1x0XHRcdGRldm1fa2ZyZWUoXHUwMDI2bmRldi1cdTAwM2VuZmNfZGV2LVx1MDAzZWRldiwgY29ubl9pbmZvKTtcbiBcdH1cbiBcdG5jaV9yZXFfY29tcGxldGUobmRldiwgc3RhdHVzKTtcbiB9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQwOToyNTozMi42ODQzNzkxMzFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNzIxMjg0NTU5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5GQyBOQ0kgU3BpbmxvY2sgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsIFwiQWgsIGEgc3BpbmxvY2sgKGBjb25uX2luZm9fbG9ja2ApIHRvIHByb3RlY3QgdGhlIGBjb25uX2luZm9fbGlzdGAgYW5kIHBvaW50ZXIgYWxpYXNlcyB3aXRoaW4gdGhlIE5DSSBzdWJzeXN0ZW0g4oCTIGdvb2QsIGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgY29uY3VycmVuY3kgaXNzdWUuXCIgSXQncyB0b3VjaGluZyBhIGRlY2VudCBzcHJlYWQgb2YgZmlsZXMgd2l0aGluIHRoZSBgZHJpdmVycy9uZmMvc3QtbmNpL2AsIGBpbmNsdWRlL25ldC9uZmMvbmNpX2NvcmUuaGAsIGFuZCBgbmV0L25mYy9uY2kvYCBkaXJlY3RvcmllczogYHNlLmNgLCBgY29yZS5jYCwgYGRhdGEuY2AsIGBoY2kuY2AsIGBudGYuY2AsIGFuZCBgcnNwLmNgLiBUaGlzIHN1Z2dlc3RzIGEgcHJldHR5IGNlbnRyYWwgZml4LCBpbXBhY3RpbmcgY29yZSBkYXRhIHN0cnVjdHVyZXMuXG5cblRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYSBjb25jdXJyZW5jeSBmaXguIE15IGd1ZXNzIGlzIGl0J3MgaGFuZGxpbmcgYSByYWNlIGNvbmRpdGlvbiBvciBtYXliZSBhIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvLiBTdGFuZGFyZCBzdHVmZi5cblxuTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uIGlzOiBpcyB0aGlzIHJlYWNoYWJsZSBhbmQgdGVzdGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gV2UgbmVlZCB0byB2ZXJpZnkgdGhlIGZpeCB0aG9yb3VnaGx5LiBIb3cgZG8gd2UgdGVzdCBORkMgaW4gYSB2aXJ0dWFsIHNldHRpbmc/IFdlIGhhdmUgYG5mY3NpbWAgYW5kIGB2aGNpYCwgc28gbGV0J3Mgc2VlIGlmIHdlIGNhbiB1c2UgdGhvc2UgdG8gcnVuIHRoZSB0ZXN0cz8gVGltZSB0byBjaGVjayBmb3IgdGhlIHJlbGV2YW50IGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEkgbmVlZCB0byBjb25maXJtIGBDT05GSUdfTkZDX05DSWAgYW5kIHNvbWV0aGluZyB2aXJ0dWFsIOKAkyBwZXJoYXBzIGBDT05GSUdfTkZDX1ZJUlRVQUxgIG9yIGEgc2ltaWxhciBjb25maWd1cmF0aW9uIG9wdGlvbiDigJMgaXMgZW5hYmxlZCB0byBjb25maXJtIHRoYXQgYSB2aXJ0dWFsIGVudmlyb25tZW50IGlzIGF2YWlsYWJsZSwgbGV0J3Mgc2VhcmNoIGZvciBORkMgZHJpdmVycy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ2MjgsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQwOToyNTo0OS44OTcyMjgxNDhaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDE3MzI0MzA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIk5GQ19OQ0lcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25mYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25mYy9NYWtlZmlsZT02PW9iai0kKENPTkZJR19ORkMpICs9IG5mYy5vXFxubmV0L25mYy9NYWtlZmlsZTo3Om9iai0kKENPTkZJR19ORkNfTkNJKSArPSBuY2kvXFxubmV0L25mYy9NYWtlZmlsZS04LW9iai0kKENPTkZJR19ORkNfSENJKSArPSBoY2kvXFxuLS1cXG5uZXQvbmZjL25jaS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxubmV0L25mYy9uY2kvS2NvbmZpZzoyOmNvbmZpZyBORkNfTkNJXFxubmV0L25mYy9uY2kvS2NvbmZpZy0zLVxcdGRlcGVuZHMgb24gTkZDXFxuLS1cXG5uZXQvbmZjL25jaS9LY29uZmlnLTEyLVxcbm5ldC9uZmMvbmNpL0tjb25maWc6MTM6Y29uZmlnIE5GQ19OQ0lfU1BJXFxubmV0L25mYy9uY2kvS2NvbmZpZzoxNDpcXHRkZXBlbmRzIG9uIE5GQ19OQ0kgXFx1MDAyNlxcdTAwMjYgU1BJXFxubmV0L25mYy9uY2kvS2NvbmZpZy0xNS1cXHRzZWxlY3QgQ1JDX0NDSVRUXFxuLS1cXG5uZXQvbmZjL25jaS9LY29uZmlnLTIzLVxcbm5ldC9uZmMvbmNpL0tjb25maWc6MjQ6Y29uZmlnIE5GQ19OQ0lfVUFSVFxcbm5ldC9uZmMvbmNpL0tjb25maWc6MjU6XFx0ZGVwZW5kcyBvbiBORkNfTkNJIFxcdTAwMjZcXHUwMDI2IFRUWVxcbm5ldC9uZmMvbmNpL0tjb25maWctMjYtXFx0dHJpc3RhdGUgXFxcIk5DSSBvdmVyIFVBUlQgcHJvdG9jb2wgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZmMvbmNpL01ha2VmaWxlLTUtXFxubmV0L25mYy9uY2kvTWFrZWZpbGU6NjpvYmotJChDT05GSUdfTkZDX05DSSkgKz0gbmNpLm9cXG5uZXQvbmZjL25jaS9NYWtlZmlsZS03LVxcbi0tXFxubmV0L25mYy9uY2kvTWFrZWZpbGU9MTA9bmNpX3NwaS15ICs9IHNwaS5vXFxubmV0L25mYy9uY2kvTWFrZWZpbGU6MTE6b2JqLSQoQ09ORklHX05GQ19OQ0lfU1BJKSArPSBuY2lfc3BpLm9cXG5uZXQvbmZjL25jaS9NYWtlZmlsZS0xMi1cXG5uZXQvbmZjL25jaS9NYWtlZmlsZT0xMz1uY2lfdWFydC15ICs9IHVhcnQub1xcbm5ldC9uZmMvbmNpL01ha2VmaWxlOjE0Om9iai0kKENPTkZJR19ORkNfTkNJX1VBUlQpICs9IG5jaV91YXJ0Lm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDk6MjU6NTAuMzE0NTYyMDU4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjA4NDQwMDkxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQXNzZXNzaW5nIE5DSSBEcml2ZXIgQXZhaWxhYmlsaXR5KipcblxuUmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJ20gaW1tZWRpYXRlbHkgYXNzZXNzaW5nIHRoZSBpbmZyYXN0cnVjdHVyZSByZXF1aXJlbWVudHMgaGVyZS4gXCJWaXJ0dWFsIGRyaXZlciBmb3IgTkNJXCIuLi4gdGhhdCdzIHRoZSBrZXkgcGhyYXNlLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcywgYXMgaXQgaXMgd2l0aCBhbnkgbmV3IHRhc2ssIGlzIHRvIGFzY2VydGFpbiBpZiBhIHByZS1leGlzdGluZyB2aXJ0dWFsIGRyaXZlciBzb2x1dGlvbiBleGlzdHMuIEFtIEkgZGVhbGluZyB3aXRoIGEga25vd24gcXVhbnRpdHksIG9yIGFtIEkgaW4gdGhlIHdlZWRzIGZyb20gdGhlIHN0YXJ0PyBXaGF0IGRyaXZlcnMgYXJlIGF2YWlsYWJsZSB0aGF0IHdpbGwgZ2V0IG1lIGNsb3NlciB0byB0aGUgb3V0Y29tZSBkZXNpcmVkLlxuXG5UaGlzIGltcGxpZXMgYW4gdW5kZXJzdGFuZGluZyBvZiB0aGUgY3VycmVudCBOQ0kgZW52aXJvbm1lbnQuIERvIHdlIGhhdmUgYSBzdGFuZGFyZCBvciBwcm9wcmlldGFyeSBwbGF0Zm9ybT8gSXMgaXQgd2VsbC1kb2N1bWVudGVkPyBBcmUgdGhlcmUgYW55IG9idmlvdXMgY2FuZGlkYXRlcyB3aXRoaW4gdGhlIGV4aXN0aW5nIGRyaXZlciBlY29zeXN0ZW0sIG9yIGFyZSB3ZSBnb2luZyB0byBuZWVkIHRvIGxvb2sgYXQgY3VzdG9tIGRldmVsb3BtZW50LCBvciBhIGhhcmR3YXJlIGFic3RyYWN0aW9uIGxheWVyPyBNeSBmb2N1cyBpcyBvbiBlZmZpY2llbmN5IGFuZCB0aW1lLCBzbyBJJ20gaG9waW5nIGZvciBhIHF1aWNrIHdpbjsgYSByZWFkaWx5IGF2YWlsYWJsZSwgdGVzdGVkIHNvbHV0aW9uIGlzIGFsd2F5cyBwcmVmZXJhYmxlLiBUaGUgdGhvdWdodCBwcm9jZXNzIGlzIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHRoZSBwYXRoIG9mIGxlYXN0IHJlc2lzdGFuY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NzcyLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDk6MjU6NTYuMzk4OTY3OTQ3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExODgxMjExOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJORkNfTkNJXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmZjL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25mYy9LY29uZmlnPTUyPWNvbmZpZyBORkNfVklSVFVBTF9OQ0lcXG5kcml2ZXJzL25mYy9LY29uZmlnLTUzLVxcdHRyaXN0YXRlIFxcXCJOQ0kgZGV2aWNlIHNpbXVsYXRvciBkcml2ZXJcXFwiXFxuZHJpdmVycy9uZmMvS2NvbmZpZzo1NDpcXHRkZXBlbmRzIG9uIE5GQ19OQ0lcXG5kcml2ZXJzL25mYy9LY29uZmlnLTU1LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmZjL2ZkcC9LY29uZmlnPTI9Y29uZmlnIE5GQ19GRFBcXG5kcml2ZXJzL25mYy9mZHAvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJJbnRlbCBGRFAgTkZDIGRyaXZlclxcXCJcXG5kcml2ZXJzL25mYy9mZHAvS2NvbmZpZzo0OlxcdGRlcGVuZHMgb24gTkZDX05DSVxcbmRyaXZlcnMvbmZjL2ZkcC9LY29uZmlnLTUtXFx0c2VsZWN0IENSQ19DQ0lUVFxcbi0tXFxuZHJpdmVycy9uZmMvbmZjbXJ2bC9LY29uZmlnPTEwPWNvbmZpZyBORkNfTVJWTF9VU0JcXG5kcml2ZXJzL25mYy9uZmNtcnZsL0tjb25maWctMTEtXFx0dHJpc3RhdGUgXFxcIk1hcnZlbGwgTkZDLW92ZXItVVNCIGRyaXZlclxcXCJcXG5kcml2ZXJzL25mYy9uZmNtcnZsL0tjb25maWc6MTI6XFx0ZGVwZW5kcyBvbiBORkNfTkNJIFxcdTAwMjZcXHUwMDI2IFVTQlxcbmRyaXZlcnMvbmZjL25mY21ydmwvS2NvbmZpZy0xMy1cXHRzZWxlY3QgTkZDX01SVkxcXG4tLVxcbmRyaXZlcnMvbmZjL25mY21ydmwvS2NvbmZpZz0yMz1jb25maWcgTkZDX01SVkxfVUFSVFxcbmRyaXZlcnMvbmZjL25mY21ydmwvS2NvbmZpZy0yNC1cXHR0cmlzdGF0ZSBcXFwiTWFydmVsbCBORkMtb3Zlci1VQVJUIGRyaXZlclxcXCJcXG5kcml2ZXJzL25mYy9uZmNtcnZsL0tjb25maWc6MjU6XFx0ZGVwZW5kcyBvbiBORkNfTkNJIFxcdTAwMjZcXHUwMDI2IE5GQ19OQ0lfVUFSVFxcbmRyaXZlcnMvbmZjL25mY21ydmwvS2NvbmZpZy0yNi1cXHRzZWxlY3QgTkZDX01SVkxcXG4tLVxcbmRyaXZlcnMvbmZjL25mY21ydmwvS2NvbmZpZz00Nj1jb25maWcgTkZDX01SVkxfU1BJXFxuZHJpdmVycy9uZmMvbmZjbXJ2bC9LY29uZmlnLTQ3LVxcdHRyaXN0YXRlIFxcXCJNYXJ2ZWxsIE5GQy1vdmVyLVNQSSBkcml2ZXJcXFwiXFxuZHJpdmVycy9uZmMvbmZjbXJ2bC9LY29uZmlnOjQ4OlxcdGRlcGVuZHMgb24gTkZDX01SVkwgXFx1MDAyNlxcdTAwMjYgTkZDX05DSV9TUElcXG5kcml2ZXJzL25mYy9uZmNtcnZsL0tjb25maWctNDktXFx0aGVscFxcbi0tXFxuZHJpdmVycy9uZmMvbnhwLW5jaS9LY29uZmlnPTI9Y29uZmlnIE5GQ19OWFBfTkNJXFxuZHJpdmVycy9uZmMvbnhwLW5jaS9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIk5YUC1OQ0kgTkZDIGRyaXZlclxcXCJcXG5kcml2ZXJzL25mYy9ueHAtbmNpL0tjb25maWc6NDpcXHRkZXBlbmRzIG9uIE5GQ19OQ0lcXG5kcml2ZXJzL25mYy9ueHAtbmNpL0tjb25maWctNS1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25mYy9zM2Z3cm41L0tjb25maWc9MTA9Y29uZmlnIE5GQ19TM0ZXUk41X0kyQ1xcbmRyaXZlcnMvbmZjL3MzZndybjUvS2NvbmZpZy0xMS1cXHR0cmlzdGF0ZSBcXFwiU2Ftc3VuZyBTM0ZXUk41IEkyQyBzdXBwb3J0XFxcIlxcbmRyaXZlcnMvbmZjL3MzZndybjUvS2NvbmZpZzoxMjpcXHRkZXBlbmRzIG9uIE5GQ19OQ0kgXFx1MDAyNlxcdTAwMjYgSTJDXFxuZHJpdmVycy9uZmMvczNmd3JuNS9LY29uZmlnLTEzLVxcdHNlbGVjdCBORkNfUzNGV1JONVxcbi0tXFxuZHJpdmVycy9uZmMvczNmd3JuNS9LY29uZmlnPTIzPWNvbmZpZyBORkNfUzNGV1JOODJfVUFSVFxcbmRyaXZlcnMvbmZjL3MzZndybjUvS2NvbmZpZy0yNC0gICAgICAgIHRyaXN0YXRlIFxcXCJTYW1zdW5nIFMzRldSTjgyIFVBUlQgc3VwcG9ydFxcXCJcXG5kcml2ZXJzL25mYy9zM2Z3cm41L0tjb25maWc6MjU6ICAgICAgICBkZXBlbmRzIG9uIE5GQ19OQ0kgXFx1MDAyNlxcdTAwMjYgU0VSSUFMX0RFVl9CVVNcXG5kcml2ZXJzL25mYy9zM2Z3cm41L0tjb25maWctMjYtICAgICAgICBzZWxlY3QgTkZDX1MzRldSTjVcXG4tLVxcbmRyaXZlcnMvbmZjL3N0LW5jaS9LY29uZmlnPTk9Y29uZmlnIE5GQ19TVF9OQ0lfSTJDXFxuZHJpdmVycy9uZmMvc3QtbmNpL0tjb25maWctMTAtXFx0dHJpc3RhdGUgXFxcIlNUTWljcm9lbGVjdHJvbmljcyBTVCBOQ0kgTkZDIGRyaXZlciAoSTJDKVxcXCJcXG5kcml2ZXJzL25mYy9zdC1uY2kvS2NvbmZpZzoxMTpcXHRkZXBlbmRzIG9uIE5GQ19OQ0kgXFx1MDAyNlxcdTAwMjYgSTJDXFxuZHJpdmVycy9uZmMvc3QtbmNpL0tjb25maWctMTItXFx0c2VsZWN0IE5GQ19TVF9OQ0lcXG4tLVxcbmRyaXZlcnMvbmZjL3N0LW5jaS9LY29uZmlnPTIxPWNvbmZpZyBORkNfU1RfTkNJX1NQSVxcbmRyaXZlcnMvbmZjL3N0LW5jaS9LY29uZmlnLTIyLVxcdHRyaXN0YXRlIFxcXCJTVE1pY3JvZWxlY3Ryb25pY3MgU1QgTkNJIE5GQyBkcml2ZXIgKFNQSSlcXFwiXFxuZHJpdmVycy9uZmMvc3QtbmNpL0tjb25maWc6MjM6XFx0ZGVwZW5kcyBvbiBORkNfTkNJIFxcdTAwMjZcXHUwMDI2IFNQSVxcbmRyaXZlcnMvbmZjL3N0LW5jaS9LY29uZmlnLTI0LVxcdHNlbGVjdCBORkNfU1RfTkNJXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDA5OjI1OjU2LjUxNzc4NjkzNloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk0NzAwNDM5MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKk5GQyBGdXp6aW5nIE9wcG9ydHVuaXR5ISoqXG5cbkFscmlnaHQsIHRoYXQncyBpdCEgYE5GQ19WSVJUVUFMX05DSWAgaXMgZGVmaW5lZC4gVGhpcyBpcyBzaWduaWZpY2FudC4gSXQncyB0aGUga2V5IHRvIHZpcnR1YWwgTkNJIGRldmljZXMuIEFuZCB0aGF0LCBpbiB0dXJuLCBpcyB0aGUgb3BlbmluZyB3ZSd2ZSBiZWVuIGxvb2tpbmcgZm9yIHRvIGJlZ2luIHNvbWUgc2VyaW91cyBmdXp6aW5nIG9mIE5DSSBzdGFja3MuIEl0IG9wZW5zIHVwIHRoZSBwb3NzaWJpbGl0eSBvZiBpbmplY3RpbmcgbWFsZm9ybWVkIGRhdGEgd2l0aG91dCBuZWVkaW5nIHBoeXNpY2FsIGhhcmR3YXJlLCB3aGljaCBpcyBhIHNpZ25pZmljYW50IHdpbiBmb3IgdGhpcyB0eXBlIG9mIHJlc2VhcmNoLlxuXG5Ob3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSB2aXJ0dWFsIGRldmljZSdzIGltcGxlbWVudGF0aW9uIGJldHRlci4gVGltZSB0byBkaXZlIGludG8gYGRyaXZlcnMvbmZjL3ZpcnR1YWxfbmNpZGV2LmNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZW50cnkgcG9pbnRzLCBob3cgaXQgaW50ZXJmYWNlcyB3aXRoIHRoZSBOQ0kgY29yZSwgYW5kIG1vc3QgaW1wb3J0YW50bHksIGlkZW50aWZ5IHRoZSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGlucHV0IGlzIGV4cGVjdGVkLCBob3cgaXQncyBoYW5kbGVkLCBhbmQgd2hlcmUgcG90ZW50aWFsIGZ1enppbmcgdGFyZ2V0cyBjYW4gYmUgZm91bmQuIFRoaXMgY291bGQgYmUgaW50ZXJlc3RpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MTIyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDk6MjY6MDUuOTg3ODM0Nzg1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNzMwNTIzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJORkNfVklSVFVBTF9OQ0lcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZmMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmZjL0tjb25maWc9NDI9Y29uZmlnIE5GQ19QT1JUMTAwXFxuLS1cXG5kcml2ZXJzL25mYy9LY29uZmlnLTUxLVxcbmRyaXZlcnMvbmZjL0tjb25maWc6NTI6Y29uZmlnIE5GQ19WSVJUVUFMX05DSVxcbmRyaXZlcnMvbmZjL0tjb25maWctNTMtXFx0dHJpc3RhdGUgXFxcIk5DSSBkZXZpY2Ugc2ltdWxhdG9yIGRyaXZlclxcXCJcXG4tLVxcbmRyaXZlcnMvbmZjL01ha2VmaWxlPTE5PW9iai0kKENPTkZJR19ORkNfU1Q5NUhGKVxcdCs9IHN0OTVoZi9cXG5kcml2ZXJzL25mYy9NYWtlZmlsZToyMDpvYmotJChDT05GSUdfTkZDX1ZJUlRVQUxfTkNJKVxcdCs9IHZpcnR1YWxfbmNpZGV2Lm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDk6MjY6MDYuNDI1MTQ4MzczWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA0Mzk1NDc2NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOQ0kgVmlydHVhbCBOQ0kgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIGdyZWF0ISBTbywgYmFzZWQgb24gdGhpcywgZW5hYmxpbmcgYE5GQ19WSVJUVUFMX05DSWAgaXMgdGhlIGtleS4gTm93LCBsb29raW5nIGF0IHRoZSBwYXRjaCwgaXQgdG91Y2hlcyBgbmV0L25mYy9uY2kvY29yZS5jYCwgYG5ldC9uZmMvbmNpL2RhdGEuY2AsIGBuZXQvbmZjL25jaS9oY2kuY2AsIGBuZXQvbmZjL25jaS9udGYuY2AsIGFuZCBgbmV0L25mYy9uY2kvcnNwLmNgLiBUaGF0J3Mgd2hlcmUgdGhlIGZvY3VzIGlzLiBNeSBpbW1lZGlhdGUgdGFzayBpcyB0byBpZGVudGlmeSB0aGUgY3JpdGljYWwgc3ltYm9scyBmb3IgZnVydGhlciBhbmFseXNpcy5cblxuSXQgbG9va3MgbGlrZSB0aGUgcGF0Y2ggbW9kaWZpZXMgYSBjb21wcmVoZW5zaXZlIHNldCBvZiBmdW5jdGlvbnMsIGluY2x1ZGluZzogYG5jaV9nZXRfY29ubl9pbmZvX2J5X2Nvbm5faWRfbG9ja2VkYCwgYG5jaV9nZXRfY29ubl9pbmZvX2J5X2Rlc3RfdHlwZV9wYXJhbXNfbG9ja2VkYCwgYG5jaV9nZXRfY29ubl9pbmZvX2J5X2Rlc3RfdHlwZV9wYXJhbXNgLCBgbmNpX25mY2NfbG9vcGJhY2tgLCBgbmNpX3RyYW5zY2VpdmVgLCBgbmNpX3R4X3dvcmtgLCBgbmNpX2RhdGFfZXhjaGFuZ2VfY29tcGxldGVgLCBgbmNpX2Nvbm5fbWF4X2RhdGFfcGt0X3BheWxvYWRfc2l6ZWAsIGBuY2lfc2VuZF9kYXRhYCwgYG5jaV9yeF9kYXRhX3BhY2tldGAsIGBuY2lfaGNpX3NlbmRfZGF0YWAsIGBuY2lfaGNpX3NlbmRfY21kYCwgYG5jaV9oY2lfcmVzcF9yZWNlaXZlZGAsIGBuY2lfaGNpX29wZW5fcGlwZWAsIGBuY2lfaGNpX3NldF9wYXJhbWAsIGBuY2lfaGNpX2dldF9wYXJhbWAsIGBuY2lfaGNpX2Rldl9zZXNzaW9uX2luaXRgLCBgbmNpX2NvcmVfY29ubl9jcmVkaXRzX250Zl9wYWNrZXRgLCBgbmNpX3JmX2ludGZfYWN0aXZhdGVkX250Zl9wYWNrZXRgLCBgbmNpX3JmX2RlYWN0aXZhdGVfbnRmX3BhY2tldGAsIGBuY2lfcmZfZGlzY19yc3BfcGFja2V0YCwgYG5jaV9jb3JlX2Nvbm5fY3JlYXRlX3JzcF9wYWNrZXRgLCBhbmQgYG5jaV9jb3JlX2Nvbm5fY2xvc2VfcnNwX3BhY2tldGAuXG5cblRoZXNlIGFyZSBhbGwgcGFydCBvZiB0aGUgTkNJIGNvcmUgYW5kIGFyZSBkZWZpbml0ZWx5IHJlYWNoYWJsZSBkdXJpbmcgdHlwaWNhbCBpbnRlcmFjdGlvbnMgd2l0aCBOQ0kgZGV2aWNlcy5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIHBpbnBvaW50IHdoaWNoIGZ1bmN0aW9ucyBhcmUgdGhlIG1vc3QgcHJvbWlzaW5nIHRhcmdldHMgZm9yIGZ1enppbmcuIEknbGwgZm9jdXMgb24gdGhlc2U6IGBuY2lfbmZjY19sb29wYmFja2AsIGBuY2lfdHJhbnNjZWl2ZWAsIGBuY2lfc2VuZF9kYXRhYCwgYG5jaV9yeF9kYXRhX3BhY2tldGAsIGBuY2lfaGNpX3NlbmRfY21kYCwgYG5jaV9oY2lfc2V0X3BhcmFtYCwgYG5jaV9oY2lfZ2V0X3BhcmFtYCwgYG5jaV9jb3JlX2Nvbm5fY3JlYXRlX3JzcF9wYWNrZXRgLCBgbmNpX2NvcmVfY29ubl9jbG9zZV9yc3BfcGFja2V0YCwgYW5kIGBuY2lfcmZfZGlzY19yc3BfcGFja2V0YC4gVGhlc2Ugc2VlbSB0byBiZSB0aGUgbW9zdCBjcml0aWNhbCBmb3IgZGF0YSBmbG93IGFuZCBjb250cm9sLlxuXG5Ob3csIEknbGwgY2hlY2sgdG8gc2VlIGlmIGBuY2lfaGNpX3NlbmRfY21kYCBpcyByZWFjaGFibGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NTY4LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDA5OjI2OjE2Ljg2NDcwMDg3OVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU4MTU3NDM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5jaV9oY2lfc2VuZF9jbWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25mYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25mYy9uY2kvaGNpLmM9MjI1PUVYUE9SVF9TWU1CT0wobmNpX2hjaV9zZW5kX2V2ZW50KTtcXG5uZXQvbmZjL25jaS9oY2kuYy0yMjYtXFxubmV0L25mYy9uY2kvaGNpLmM6MjI3OmludCBuY2lfaGNpX3NlbmRfY21kKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCB1OCBnYXRlLCB1OCBjbWQsXFxubmV0L25mYy9uY2kvaGNpLmMtMjI4LVxcdFxcdCAgICAgY29uc3QgdTggKnBhcmFtLCBzaXplX3QgcGFyYW1fbGVuLFxcbi0tXFxubmV0L25mYy9uY2kvaGNpLmMtMjc3LX1cXG5uZXQvbmZjL25jaS9oY2kuYzoyNzg6RVhQT1JUX1NZTUJPTChuY2lfaGNpX3NlbmRfY21kKTtcXG5uZXQvbmZjL25jaS9oY2kuYy0yNzktXFxubmV0L25mYy9uY2kvaGNpLmM9MjgwPWludCBuY2lfaGNpX2NsZWFyX2FsbF9waXBlcyhzdHJ1Y3QgbmNpX2RldiAqbmRldilcXG4tLVxcbm5ldC9uZmMvbmNpL2hjaS5jLTI4My1cXG5uZXQvbmZjL25jaS9oY2kuYzoyODQ6XFx0ciA9IG5jaV9oY2lfc2VuZF9jbWQobmRldiwgTkNJX0hDSV9BRE1JTl9HQVRFLFxcbm5ldC9uZmMvbmNpL2hjaS5jLTI4NS1cXHRcXHRcXHQgICAgIE5DSV9IQ0lfQURNX0NMRUFSX0FMTF9QSVBFLCBOVUxMLCAwLCBOVUxMKTtcXG4tLVxcbm5ldC9uZmMvbmNpL2hjaS5jPTU1Nz1zdGF0aWMgdTggbmNpX2hjaV9jcmVhdGVfcGlwZShzdHJ1Y3QgbmNpX2RldiAqbmRldiwgdTggZGVzdF9ob3N0LFxcbi0tXFxubmV0L25mYy9uY2kvaGNpLmMtNTcwLVxcbm5ldC9uZmMvbmNpL2hjaS5jOjU3MTpcXHQqcmVzdWx0ID0gbmNpX2hjaV9zZW5kX2NtZChuZGV2LCBOQ0lfSENJX0FETUlOX0dBVEUsXFxubmV0L25mYy9uY2kvaGNpLmMtNTcyLVxcdFxcdFxcdFxcdCAgIE5DSV9IQ0lfQURNX0NSRUFURV9QSVBFLFxcbi0tXFxubmV0L25mYy9uY2kvaGNpLmM9NTg4PXN0YXRpYyBpbnQgbmNpX2hjaV9kZWxldGVfcGlwZShzdHJ1Y3QgbmNpX2RldiAqbmRldiwgdTggcGlwZSlcXG5uZXQvbmZjL25jaS9oY2kuYy01ODkte1xcbm5ldC9uZmMvbmNpL2hjaS5jOjU5MDpcXHRyZXR1cm4gbmNpX2hjaV9zZW5kX2NtZChuZGV2LCBOQ0lfSENJX0FETUlOX0dBVEUsXFxubmV0L25mYy9uY2kvaGNpLmMtNTkxLVxcdFxcdFxcdFxcdE5DSV9IQ0lfQURNX0RFTEVURV9QSVBFLCBcXHUwMDI2cGlwZSwgMSwgTlVMTCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDA5OjI2OjE3LjAyMjg2NTMxM1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MTUxODU5MzA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUuIE15IGZpcnN0IHRob3VnaHQgaXM6XG5cbioqQ2hlY2tpbmcgUmVhY2hhYmlsaXR5OiBgbmNpX2NvcmVfY29ubl9jcmVhdGVfcnNwX3BhY2tldGAqKlxuXG5JIG5lZWQgdG8gY29uZmlybSBzb21ldGhpbmcgY3JpdGljYWwgaGVyZS4gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGZ1bmN0aW9uIGBuY2lfY29yZV9jb25uX2NyZWF0ZV9yc3BfcGFja2V0YCBpcywgaW4gZmFjdCwgYWNjZXNzaWJsZSBhbmQgZnVuY3Rpb25pbmcgYXMgaW50ZW5kZWQgd2l0aGluIHRoZSBjdXJyZW50IGV4ZWN1dGlvbiBjb250ZXh0LiBUaGlzIGlzIGxpa2VseSBhIGtleSBjb21wb25lbnQgaW4gd2hhdGV2ZXIgYnJvYWRlciBzeXN0ZW0gSSdtIHdvcmtpbmcgd2l0aCwgcGVyaGFwcyByZWxhdGVkIHRvIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCBvciByZXNwb25zZSBoYW5kbGluZywgZ2l2ZW4gdGhlIGZ1bmN0aW9uIG5hbWUuIE1ha2luZyBzdXJlIGl04oCZcyByZWFjaGFibGUgaXMgdGhlIGZpcnN0IHN0ZXAgaW4gZGVidWdnaW5nIG9yIHVuZGVyc3RhbmRpbmcgYSBwb3RlbnRpYWwgaXNzdWUsIG9yIHNpbXBseSB2ZXJpZnlpbmcgYSBzcGVjaWZpYyBjb2RlIHBhdGggSSdtIGFuYWx5emluZy4gR290dGEga25vdyBpZiBpdCdzIHRoZXJlIGJlZm9yZSBJIGNhbiBkbyBhbnl0aGluZyB3aXRoIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTQ1NiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDA5OjI2OjI0LjE3NDcyODgxOVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQzOTc4NDE2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5jaV9jb3JlX2Nvbm5fY3JlYXRlX3JzcF9wYWNrZXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25mYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25mYy9uY2kvcnNwLmM9Mjc2PXN0YXRpYyB2b2lkIG5jaV9uZmNlZV9tb2RlX3NldF9yc3BfcGFja2V0KHN0cnVjdCBuY2lfZGV2ICpuZGV2LFxcbi0tXFxubmV0L25mYy9uY2kvcnNwLmMtMjg0LVxcbm5ldC9uZmMvbmNpL3JzcC5jOjI4NTpzdGF0aWMgdm9pZCBuY2lfY29yZV9jb25uX2NyZWF0ZV9yc3BfcGFja2V0KHN0cnVjdCBuY2lfZGV2ICpuZGV2LFxcbm5ldC9uZmMvbmNpL3JzcC5jLTI4Ni1cXHRcXHRcXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9uZmMvbmNpL3JzcC5jLTMxOS1cXHRcXHQvKiBOb3RlOiBkYXRhX2V4Y2hhbmdlX2NiIGFuZCBkYXRhX2V4Y2hhbmdlX2NiX2NvbnRleHQgbmVlZCB0b1xcbm5ldC9uZmMvbmNpL3JzcC5jOjMyMDpcXHRcXHQgKiBiZSBzcGVjaWZ5IG91dCBvZiBuY2lfY29yZV9jb25uX2NyZWF0ZV9yc3BfcGFja2V0XFxubmV0L25mYy9uY2kvcnNwLmMtMzIxLVxcdFxcdCAqL1xcbi0tXFxubmV0L25mYy9uY2kvcnNwLmM9MzY1PXZvaWQgbmNpX3JzcF9wYWNrZXQoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbmZjL25jaS9yc3AuYy00MDMtXFx0Y2FzZSBOQ0lfT1BfQ09SRV9DT05OX0NSRUFURV9SU1A6XFxubmV0L25mYy9uY2kvcnNwLmM6NDA0OlxcdFxcdG5jaV9jb3JlX2Nvbm5fY3JlYXRlX3JzcF9wYWNrZXQobmRldiwgc2tiKTtcXG5uZXQvbmZjL25jaS9yc3AuYy00MDUtXFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDA5OjI2OjI0LjMxODcxNzM2NVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NTkxOTk4MTgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgdGhlIE5GQyBDb250cm9sbGVyIFJlc3BvbnNlIEhhbmRsZXIqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGlkZW50aWZpZWQgdGhlIGVudHJ5IHBvaW50OiBgbmNpX3JzcF9wYWNrZXRgLiBUaGF0J3MgdGhlIGZ1bmN0aW9uIGhhbmRsaW5nIHJlc3BvbnNlcyBjb21pbmcgYmFjayBmcm9tIHRoZSBORkMgY29udHJvbGxlciwgd2hpY2ggbWFrZXMgaXQgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuIERlZmluaXRlbHkgcmVhY2hhYmxlLCBhbmQgcG90ZW50aWFsbHkgdnVsbmVyYWJsZS4gSSd2ZSBnb3QgYSBnb29kIGZlZWxpbmcgYWJvdXQgdGhpcy5cblxuTm93LCBiZWZvcmUgSSBkaWcgaW4sIEkgd2FudCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gTGV0J3Mgc2VlLi4uIEknbGwgbmVlZCB0byBjb25zaWRlcjogYE5GQ2AsIG9idmlvdXNseSwgYW5kIGBORkNfTkNJYCBmb3IgdGhlIE5DSSBwcm90b2NvbCBpdHNlbGYuIFRoZW4gdGhlcmUncyBgTkZDX1ZJUlRVQUxfTkNJYCwgYmVjYXVzZSB2aXJ0dWFsIE5DSSBtaWdodCBpbnRyb2R1Y2Ugc29tZSBpbnRlcmVzdGluZyBlZGdlIGNhc2VzLCBhbmQgZmluYWxseSBgTkZDX0hDSWAuIEhtbSwgSSdtIG5vdCBlbnRpcmVseSBzdXJlIGFib3V0IGBORkNfSENJYC4gTGV0IG1lIHF1aWNrbHkgY2hlY2sgaWYgYG5jaV9oY2lfc2VuZF9jbWRgIHJlcXVpcmVzIHRoYXQgY29uZmlnIG9wdGlvbi4gSnVzdCBuZWVkIHRvIHZlcmlmeSB0aGF0IGRlcGVuZGVuY3kgdG8gYmUgc3VyZS4gQWxyaWdodCwgbm93IEkgaGF2ZSBhIGdvb2QgYmFzZSBmb3IgY29uZmlndXJpbmcgdGhlIGZ1enppbmcgZW52aXJvbm1lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMDQxLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDk6MjY6MzEuOTEwNzE5MjU4WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MDgzOTY4NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTkZDX0hDSVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmZjL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmZjL01ha2VmaWxlPTc9b2JqLSQoQ09ORklHX05GQ19OQ0kpICs9IG5jaS9cXG5uZXQvbmZjL01ha2VmaWxlOjg6b2JqLSQoQ09ORklHX05GQ19IQ0kpICs9IGhjaS9cXG5uZXQvbmZjL01ha2VmaWxlLTktb2JqLSQoQ09ORklHX05GQ19ESUdJVEFMKSArPSBuZmNfZGlnaXRhbC5vXFxuLS1cXG5uZXQvbmZjL2hjaS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxubmV0L25mYy9oY2kvS2NvbmZpZzoyOmNvbmZpZyBORkNfSENJXFxubmV0L25mYy9oY2kvS2NvbmZpZy0zLVxcdGRlcGVuZHMgb24gTkZDXFxuLS1cXG5uZXQvbmZjL2hjaS9LY29uZmlnPTExPWNvbmZpZyBORkNfU0hETENcXG5uZXQvbmZjL2hjaS9LY29uZmlnOjEyOlxcdGRlcGVuZHMgb24gTkZDX0hDSVxcbm5ldC9uZmMvaGNpL0tjb25maWctMTMtXFx0c2VsZWN0IENSQ19DQ0lUVFxcbi0tXFxubmV0L25mYy9oY2kvTWFrZWZpbGUtNS1cXG5uZXQvbmZjL2hjaS9NYWtlZmlsZTo2Om9iai0kKENPTkZJR19ORkNfSENJKSArPSBoY2kub1xcbm5ldC9uZmMvaGNpL01ha2VmaWxlLTctXFxuLS1cXG5uZXQvbmZjL2hjaS9jb21tYW5kLmM9MTk9c3RhdGljIGludCBuZmNfaGNpX2V4ZWN1dGVfY21kX2FzeW5jKHN0cnVjdCBuZmNfaGNpX2RldiAqaGRldiwgdTggcGlwZSwgdTggY21kLFxcbi0tXFxubmV0L25mYy9oY2kvY29tbWFuZC5jLTI4LVxcdCAqL1xcbm5ldC9uZmMvaGNpL2NvbW1hbmQuYzoyOTpcXHRyZXR1cm4gbmZjX2hjaV9oY3BfbWVzc2FnZV90eChoZGV2LCBwaXBlLCBORkNfSENJX0hDUF9DT01NQU5ELCBjbWQsXFxubmV0L25mYy9oY2kvY29tbWFuZC5jLTMwLVxcdFxcdFxcdFxcdCAgICAgIHBhcmFtLCBwYXJhbV9sZW4sIGNiLCBjYl9jb250ZXh0LCBNQVhfRldJKTtcXG4tLVxcbm5ldC9uZmMvaGNpL2NvbW1hbmQuYz01NT1zdGF0aWMgaW50IG5mY19oY2lfZXhlY3V0ZV9jbWQoc3RydWN0IG5mY19oY2lfZGV2ICpoZGV2LCB1OCBwaXBlLCB1OCBjbWQsXFxuLS1cXG5uZXQvbmZjL2hjaS9jb21tYW5kLmMtNzEtXFx0aGNwX2V3LmV4ZWNfcmVzdWx0ID0gbmZjX2hjaV9oY3BfbWVzc2FnZV90eChoZGV2LCBwaXBlLFxcbm5ldC9uZmMvaGNpL2NvbW1hbmQuYzo3MjpcXHRcXHRcXHRcXHRcXHRcXHQgICAgTkZDX0hDSV9IQ1BfQ09NTUFORCwgY21kLFxcbm5ldC9uZmMvaGNpL2NvbW1hbmQuYy03My1cXHRcXHRcXHRcXHRcXHRcXHQgICAgcGFyYW0sIHBhcmFtX2xlbixcXG4tLVxcbm5ldC9uZmMvaGNpL2NvbW1hbmQuYz05MT1pbnQgbmZjX2hjaV9zZW5kX2V2ZW50KHN0cnVjdCBuZmNfaGNpX2RldiAqaGRldiwgdTggZ2F0ZSwgdTggZXZlbnQsXFxuLS1cXG5uZXQvbmZjL2hjaS9jb21tYW5kLmMtOTgtXFx0cGlwZSA9IGhkZXYtXFx1MDAzZWdhdGUycGlwZVtnYXRlXTtcXG5uZXQvbmZjL2hjaS9jb21tYW5kLmM6OTk6XFx0aWYgKHBpcGUgPT0gTkZDX0hDSV9JTlZBTElEX1BJUEUpXFxubmV0L25mYy9oY2kvY29tbWFuZC5jLTEwMC1cXHRcXHRyZXR1cm4gLUVBRERSTk9UQVZBSUw7XFxubmV0L25mYy9oY2kvY29tbWFuZC5jLTEwMS1cXG5uZXQvbmZjL2hjaS9jb21tYW5kLmM6MTAyOlxcdHJldHVybiBuZmNfaGNpX2hjcF9tZXNzYWdlX3R4KGhkZXYsIHBpcGUsIE5GQ19IQ0lfSENQX0VWRU5ULCBldmVudCxcXG5uZXQvbmZjL2hjaS9jb21tYW5kLmMtMTAzLVxcdFxcdFxcdFxcdCAgICAgIHBhcmFtLCBwYXJhbV9sZW4sIE5VTEwsIE5VTEwsIDApO1xcbi0tXFxubmV0L25mYy9oY2kvY29tbWFuZC5jPTExMj1pbnQgbmZjX2hjaV9zZW5kX2NtZChzdHJ1Y3QgbmZjX2hjaV9kZXYgKmhkZXYsIHU4IGdhdGUsIHU4IGNtZCxcXG4tLVxcbm5ldC9uZmMvaGNpL2NvbW1hbmQuYy0xMTctXFx0cGlwZSA9IGhkZXYtXFx1MDAzZWdhdGUycGlwZVtnYXRlXTtcXG5uZXQvbmZjL2hjaS9jb21tYW5kLmM6MTE4OlxcdGlmIChwaXBlID09IE5GQ19IQ0lfSU5WQUxJRF9QSVBFKVxcbm5ldC9uZmMvaGNpL2NvbW1hbmQuYy0xMTktXFx0XFx0cmV0dXJuIC1FQUREUk5PVEFWQUlMO1xcbi0tXFxubmV0L25mYy9oY2kvY29tbWFuZC5jPTEyNT1pbnQgbmZjX2hjaV9zZW5kX2NtZF9hc3luYyhzdHJ1Y3QgbmZjX2hjaV9kZXYgKmhkZXYsIHU4IGdhdGUsIHU4IGNtZCxcXG4tLVxcbm5ldC9uZmMvaGNpL2NvbW1hbmQuYy0xMzEtXFx0cGlwZSA9IGhkZXYtXFx1MDAzZWdhdGUycGlwZVtnYXRlXTtcXG5uZXQvbmZjL2hjaS9jb21tYW5kLmM6MTMyOlxcdGlmIChwaXBlID09IE5GQ19IQ0lfSU5WQUxJRF9QSVBFKVxcbm5ldC9uZmMvaGNpL2NvbW1hbmQuYy0xMzMtXFx0XFx0cmV0dXJuIC1FQUREUk5PVEFWQUlMO1xcbi0tXFxubmV0L25mYy9oY2kvY29tbWFuZC5jPTE0MD1pbnQgbmZjX2hjaV9zZXRfcGFyYW0oc3RydWN0IG5mY19oY2lfZGV2ICpoZGV2LCB1OCBnYXRlLCB1OCBpZHgsXFxuLS1cXG5uZXQvbmZjL2hjaS9jb21tYW5kLmMtMTYyLVxcbm5ldC9uZmMvaGNpL2NvbW1hbmQuYzoxNjM6XFx0ciA9IG5mY19oY2lfc2VuZF9jbWQoaGRldiwgZ2F0ZSwgTkZDX0hDSV9BTllfU0VUX1BBUkFNRVRFUixcXG5uZXQvbmZjL2hjaS9jb21tYW5kLmMtMTY0LVxcdFxcdFxcdCAgICAgdG1wLCBwYXJhbV9sZW4gKyAxLCBOVUxMKTtcXG4tLVxcbm5ldC9uZmMvaGNpL2NvbW1hbmQuYz0xNzI9aW50IG5mY19oY2lfZ2V0X3BhcmFtKHN0cnVjdCBuZmNfaGNpX2RldiAqaGRldiwgdTggZ2F0ZSwgdTggaWR4LFxcbi0tXFxubmV0L25mYy9oY2kvY29tbWFuZC5jLTE3Ni1cXG5uZXQvbmZjL2hjaS9jb21tYW5kLmM6MTc3OlxcdHJldHVybiBuZmNfaGNpX3NlbmRfY21kKGhkZXYsIGdhdGUsIE5GQ19IQ0lfQU5ZX0dFVF9QQVJBTUVURVIsXFxubmV0L25mYy9oY2kvY29tbWFuZC5jLTE3OC1cXHRcXHRcXHRcXHRcXHUwMDI2aWR4LCAxLCBza2IpO1xcbi0tXFxubmV0L25mYy9oY2kvY29tbWFuZC5jPTE4Mj1zdGF0aWMgaW50IG5mY19oY2lfb3Blbl9waXBlKHN0cnVjdCBuZmNfaGNpX2RldiAqaGRldiwgdTggcGlwZSlcXG4tLVxcbm5ldC9uZmMvaGNpL2NvbW1hbmQuYy0xODgtXFxubmV0L25mYy9oY2kvY29tbWFuZC5jOjE4OTpcXHRyID0gbmZjX2hjaV9leGVjdXRlX2NtZChoZGV2LCBwaXBlLCBORkNfSENJX0FOWV9PUEVOX1BJUEUsXFxubmV0L25mYy9oY2kvY29tbWFuZC5jLTE5MC1cXHRcXHRcXHRcXHROVUxMLCAwLCBcXHUwMDI2c2tiKTtcXG4tLVxcbm5ldC9uZmMvaGNpL2NvbW1hbmQuYz0yMDI9c3RhdGljIGludCBuZmNfaGNpX2Nsb3NlX3BpcGUoc3RydWN0IG5mY19oY2lfZGV2ICpoZGV2LCB1OCBwaXBlKVxcbm5ldC9uZmMvaGNpL2NvbW1hbmQuYy0yMDMte1xcbm5ldC9uZmMvaGNpL2NvbW1hbmQuYzoyMDQ6XFx0cmV0dXJuIG5mY19oY2lfZXhlY3V0ZV9jbWQoaGRldiwgcGlwZSwgTkZDX0hDSV9BTllfQ0xPU0VfUElQRSxcXG5uZXQvbmZjL2hjaS9jb21tYW5kLmMtMjA1LVxcdFxcdFxcdFxcdCAgIE5VTEwsIDAsIE5VTEwpO1xcbi0tXFxubmV0L25mYy9oY2kvY29tbWFuZC5jPTIwOD1zdGF0aWMgdTggbmZjX2hjaV9jcmVhdGVfcGlwZShzdHJ1Y3QgbmZjX2hjaV9kZXYgKmhkZXYsIHU4IGRlc3RfaG9zdCxcXG4tLVxcbm5ldC9uZmMvaGNpL2NvbW1hbmQuYy0yMTctXFxubmV0L25mYy9oY2kvY29tbWFuZC5jOjIxODpcXHRwYXJhbXMuc3JjX2dhdGUgPSBORkNfSENJX0FETUlOX0dBVEU7XFxubmV0L25mYy9oY2kvY29tbWFuZC5jLTIxOS1cXHRwYXJhbXMuZGVzdF9ob3N0ID0gZGVzdF9ob3N0O1xcbi0tXFxubmV0L25mYy9oY2kvY29tbWFuZC5jLTIyMS1cXG5uZXQvbmZjL2hjaS9jb21tYW5kLmM6MjIyOlxcdCpyZXN1bHQgPSBuZmNfaGNpX2V4ZWN1dGVfY21kKGhkZXYsIE5GQ19IQ0lfQURNSU5fUElQRSxcXG5uZXQvbmZjL2hjaS9jb21tYW5kLmM6MjIzOlxcdFxcdFxcdFxcdCAgICAgIE5GQ19IQ0lfQURNX0NSRUFURV9QSVBFLFxcbm5ldC9uZmMvaGNpL2NvbW1hbmQuYy0yMjQtXFx0XFx0XFx0XFx0ICAgICAgKHU4ICopIFxcdTAwMjZwYXJhbXMsIHNpemVvZihwYXJhbXMpLCBcXHUwMDI2c2tiKTtcXG5uZXQvbmZjL2hjaS9jb21tYW5kLmMtMjI1LVxcdGlmICgqcmVzdWx0IFxcdTAwM2MgMClcXG5uZXQvbmZjL2hjaS9jb21tYW5kLmM6MjI2OlxcdFxcdHJldHVybiBORkNfSENJX0lOVkFMSURfUElQRTtcXG5uZXQvbmZjL2hjaS9jb21tYW5kLmMtMjI3LVxcbi0tXFxubmV0L25mYy9oY2kvY29tbWFuZC5jPTIzNz1zdGF0aWMgaW50IG5mY19oY2lfZGVsZXRlX3BpcGUoc3RydWN0IG5mY19oY2lfZGV2ICpoZGV2LCB1OCBwaXBlKVxcbm5ldC9uZmMvaGNpL2NvbW1hbmQuYy0yMzgte1xcbm5ldC9uZmMvaGNpL2NvbW1hbmQuYzoyMzk6XFx0cmV0dXJuIG5mY19oY2lfZXhlY3V0ZV9jbWQoaGRldiwgTkZDX0hDSV9BRE1JTl9QSVBFLFxcbm5ldC9uZmMvaGNpL2NvbW1hbmQuYzoyNDA6XFx0XFx0XFx0XFx0ICAgTkZDX0hDSV9BRE1fREVMRVRFX1BJUEUsIFxcdTAwMjZwaXBlLCAxLCBOVUxMKTtcXG5uZXQvbmZjL2hjaS9jb21tYW5kLmMtMjQxLX1cXG4tLVxcbm5ldC9uZmMvaGNpL2NvbW1hbmQuYz0yNDM9c3RhdGljIGludCBuZmNfaGNpX2NsZWFyX2FsbF9waXBlcyhzdHJ1Y3QgbmZjX2hjaV9kZXYgKmhkZXYpXFxuLS1cXG5uZXQvbmZjL2hjaS9jb21tYW5kLmMtMjUwLVxcbm5ldC9uZmMvaGNpL2NvbW1hbmQuYzoyNTE6XFx0aWYgKHRlc3RfYml0KE5GQ19IQ0lfUVVJUktfU0hPUlRfQ0xFQVIsIFxcdTAwMjZoZGV2LVxcdTAwM2VxdWlya3MpKVxcbm5ldC9uZmMvaGNpL2NvbW1hbmQuYy0yNTItXFx0XFx0cGFyYW1fbGVuID0gMDtcXG5uZXQvbmZjL2hjaS9jb21tYW5kLmMtMjUzLVxcbm5ldC9uZmMvaGNpL2NvbW1hbmQuYzoyNTQ6XFx0cmV0dXJuIG5mY19oY2lfZXhlY3V0ZV9jbWQoaGRldiwgTkZDX0hDSV9BRE1JTl9QSVBFLFxcbm5ldC9uZmMvaGNpL2NvbW1hbmQuYzoyNTU6XFx0XFx0XFx0XFx0ICAgTkZDX0hDSV9BRE1fQ0xFQVJfQUxMX1BJUEUsIHBhcmFtLCBwYXJhbV9sZW4sXFxubmV0L25mYy9oY2kvY29tbWFuZC5jLTI1Ni1cXHRcXHRcXHRcXHQgICBOVUxMKTtcXG4tLVxcbm5ldC9uZmMvaGNpL2NvbW1hbmQuYz0yNTk9aW50IG5mY19oY2lfZGlzY29ubmVjdF9nYXRlKHN0cnVjdCBuZmNfaGNpX2RldiAqaGRldiwgdTggZ2F0ZSlcXG4tLVxcbm5ldC9uZmMvaGNpL2NvbW1hbmQuYy0yNjMtXFxubmV0L25mYy9oY2kvY29tbWFuZC5jOjI2NDpcXHRpZiAocGlwZSA9PSBORkNfSENJX0lOVkFMSURfUElQRSlcXG5uZXQvbmZjL2hjaS9jb21tYW5kLmMtMjY1LVxcdFxcdHJldHVybiAtRUFERFJOT1RBVkFJTDtcXG4tLVxcbm5ldC9uZmMvaGNpL2NvbW1hbmQuYy0yNzAtXFxubmV0L25mYy9oY2kvY29tbWFuZC5jOjI3MTpcXHRpZiAocGlwZSAhPSBORkNfSENJX0xJTktfTUdNVF9QSVBFIFxcdTAwMjZcXHUwMDI2IHBpcGUgIT0gTkZDX0hDSV9BRE1JTl9QSVBFKSB7XFxubmV0L25mYy9oY2kvY29tbWFuZC5jLTI3Mi1cXHRcXHRyID0gbmZjX2hjaV9kZWxldGVfcGlwZShoZGV2LCBwaXBlKTtcXG4tLVxcbm5ldC9uZmMvaGNpL2NvbW1hbmQuYy0yNzYtXFxubmV0L25mYy9oY2kvY29tbWFuZC5jOjI3NzpcXHRoZGV2LVxcdTAwM2VnYXRlMnBpcGVbZ2F0ZV0gPSBORkNfSENJX0lOVkFMSURfUElQRTtcXG5uZXQvbmZjL2hjaS9jb21tYW5kLmMtMjc4LVxcbi0tXFxubmV0L25mYy9oY2kvY29tbWFuZC5jPTI5Nz1pbnQgbmZjX2hjaV9jb25uZWN0X2dhdGUoc3RydWN0IG5mY19oY2lfZGV2ICpoZGV2LCB1OCBkZXN0X2hvc3QsIHU4IGRlc3RfZ2F0ZSxcXG4tLVxcbm5ldC9uZmMvaGNpL2NvbW1hbmQuYy0zMDItXFxubmV0L25mYy9oY2kvY29tbWFuZC5jOjMwMzpcXHRpZiAocGlwZSA9PSBORkNfSENJX0RPX05PVF9DUkVBVEVfUElQRSlcXG5uZXQvbmZjL2hjaS9jb21tYW5kLmMtMzA0LVxcdFxcdHJldHVybiAwO1xcbm5ldC9uZmMvaGNpL2NvbW1hbmQuYy0zMDUtXFxubmV0L25mYy9oY2kvY29tbWFuZC5jOjMwNjpcXHRpZiAoaGRldi1cXHUwMDNlZ2F0ZTJwaXBlW2Rlc3RfZ2F0ZV0gIT0gTkZDX0hDSV9JTlZBTElEX1BJUEUpXFxubmV0L25mYy9oY2kvY29tbWFuZC5jLTMwNy1cXHRcXHRyZXR1cm4gLUVBRERSSU5VU0U7XFxubmV0L25mYy9oY2kvY29tbWFuZC5jLTMwOC1cXG5uZXQvbmZjL2hjaS9jb21tYW5kLmM6MzA5OlxcdGlmIChwaXBlICE9IE5GQ19IQ0lfSU5WQUxJRF9QSVBFKVxcbm5ldC9uZmMvaGNpL2NvbW1hbmQuYy0zMTAtXFx0XFx0Z290byBvcGVuX3BpcGU7XFxuLS1cXG5uZXQvbmZjL2hjaS9jb21tYW5kLmMtMzEyLVxcdHN3aXRjaCAoZGVzdF9nYXRlKSB7XFxubmV0L25mYy9oY2kvY29tbWFuZC5jOjMxMzpcXHRjYXNlIE5GQ19IQ0lfTElOS19NR01UX0dBVEU6XFxubmV0L25mYy9oY2kvY29tbWFuZC5jOjMxNDpcXHRcXHRwaXBlID0gTkZDX0hDSV9MSU5LX01HTVRfUElQRTtcXG5uZXQvbmZjL2hjaS9jb21tYW5kLmMtMzE1LVxcdFxcdGJyZWFrO1xcbm5ldC9uZmMvaGNpL2NvbW1hbmQuYzozMTY6XFx0Y2FzZSBORkNfSENJX0FETUlOX0dBVEU6XFxubmV0L25mYy9oY2kvY29tbWFuZC5jOjMxNzpcXHRcXHRwaXBlID0gTkZDX0hDSV9BRE1JTl9QSVBFO1xcbm5ldC9uZmMvaGNpL2NvbW1hbmQuYy0zMTgtXFx0XFx0YnJlYWs7XFxuLS1cXG5uZXQvbmZjL2hjaS9jb21tYW5kLmMtMzIwLVxcdFxcdHBpcGUgPSBuZmNfaGNpX2NyZWF0ZV9waXBlKGhkZXYsIGRlc3RfaG9zdCwgZGVzdF9nYXRlLCBcXHUwMDI2cik7XFxubmV0L25mYy9oY2kvY29tbWFuZC5jOjMyMTpcXHRcXHRpZiAocGlwZSA9PSBORkNfSENJX0lOVkFMSURfUElQRSlcXG5uZXQvbmZjL2hjaS9jb21tYW5kLmMtMzIyLVxcdFxcdFxcdHJldHVybiByO1xcbi0tXFxubmV0L25mYy9oY2kvY29yZS5jPTIyPWludCBuZmNfaGNpX3Jlc3VsdF90b19lcnJubyh1OCByZXN1bHQpXFxuLS1cXG5uZXQvbmZjL2hjaS9jb3JlLmMtMjQtXFx0c3dpdGNoIChyZXN1bHQpIHtcXG5uZXQvbmZjL2hjaS9jb3JlLmM6MjU6XFx0Y2FzZSBORkNfSENJX0FOWV9PSzpcXG5uZXQvbmZjL2hjaS9jb3JlLmMtMjYtXFx0XFx0cmV0dXJuIDA7XFxubmV0L25mYy9oY2kvY29yZS5jOjI3OlxcdGNhc2UgTkZDX0hDSV9BTllfRV9SRUdfUEFSX1VOS05PV046XFxubmV0L25mYy9oY2kvY29yZS5jLTI4LVxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG5uZXQvbmZjL2hjaS9jb3JlLmM6Mjk6XFx0Y2FzZSBORkNfSENJX0FOWV9FX1RJTUVPVVQ6XFxubmV0L25mYy9oY2kvY29yZS5jLTMwLVxcdFxcdHJldHVybiAtRVRJTUU7XFxuLS1cXG5uZXQvbmZjL2hjaS9jb3JlLmM9Mzc9dm9pZCBuZmNfaGNpX3Jlc2V0X3BpcGVzKHN0cnVjdCBuZmNfaGNpX2RldiAqaGRldilcXG4tLVxcbm5ldC9uZmMvaGNpL2NvcmUuYy00MC1cXG5uZXQvbmZjL2hjaS9jb3JlLmM6NDE6XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE5GQ19IQ0lfTUFYX1BJUEVTOyBpKyspIHtcXG5uZXQvbmZjL2hjaS9jb3JlLmM6NDI6XFx0XFx0aGRldi1cXHUwMDNlcGlwZXNbaV0uZ2F0ZSA9IE5GQ19IQ0lfSU5WQUxJRF9HQVRFO1xcbm5ldC9uZmMvaGNpL2NvcmUuYzo0MzpcXHRcXHRoZGV2LVxcdTAwM2VwaXBlc1tpXS5kZXN0X2hvc3QgPSBORkNfSENJX0lOVkFMSURfSE9TVDtcXG5uZXQvbmZjL2hjaS9jb3JlLmMtNDQtXFx0fVxcbm5ldC9uZmMvaGNpL2NvcmUuYzo0NTpcXHRtZW1zZXQoaGRldi1cXHUwMDNlZ2F0ZTJwaXBlLCBORkNfSENJX0lOVkFMSURfUElQRSwgc2l6ZW9mKGhkZXYtXFx1MDAzZWdhdGUycGlwZSkpO1xcbm5ldC9uZmMvaGNpL2NvcmUuYy00Ni19XFxuLS1cXG5uZXQvbmZjL2hjaS9jb3JlLmM9NDk9dm9pZCBuZmNfaGNpX3Jlc2V0X3BpcGVzX3Blcl9ob3N0KHN0cnVjdCBuZmNfaGNpX2RldiAqaGRldiwgdTggaG9zdClcXG4tLVxcbm5ldC9uZmMvaGNpL2NvcmUuYy01Mi1cXG5uZXQvbmZjL2hjaS9jb3JlLmM6NTM6XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE5GQ19IQ0lfTUFYX1BJUEVTOyBpKyspIHtcXG5uZXQvbmZjL2hjaS9jb3JlLmMtNTQtXFx0XFx0aWYgKGhkZXYtXFx1MDAzZXBpcGVzW2ldLmRlc3RfaG9zdCAhPSBob3N0KVxcbi0tXFxubmV0L25mYy9oY2kvY29yZS5jLTU2LVxcbm5ldC9uZmMvaGNpL2NvcmUuYzo1NzpcXHRcXHRoZGV2LVxcdTAwM2VwaXBlc1tpXS5nYXRlID0gTkZDX0hDSV9JTlZBTElEX0dBVEU7XFxubmV0L25mYy9oY2kvY29yZS5jOjU4OlxcdFxcdGhkZXYtXFx1MDAzZXBpcGVzW2ldLmRlc3RfaG9zdCA9IE5GQ19IQ0lfSU5WQUxJRF9IT1NUO1xcbm5ldC9uZmMvaGNpL2NvcmUuYy01OS1cXHR9XFxuLS1cXG5uZXQvbmZjL2hjaS9jb3JlLmM9MTI2PXN0YXRpYyB2b2lkIG5mY19oY2lfbXNnX3J4X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxubmV0L25mYy9oY2kvY29yZS5jLTEzNy1cXHRcXHRwaXBlID0gc2tiLVxcdTAwM2VkYXRhWzBdO1xcbm5ldC9uZmMvaGNpL2NvcmUuYzoxMzg6XFx0XFx0c2tiX3B1bGwoc2tiLCBORkNfSENJX0hDUF9QQUNLRVRfSEVBREVSX0xFTik7XFxubmV0L25mYy9oY2kvY29yZS5jLTEzOS1cXHRcXHRtZXNzYWdlID0gKHN0cnVjdCBoY3BfbWVzc2FnZSAqKXNrYi1cXHUwMDNlZGF0YTtcXG4tLVxcbm5ldC9uZmMvaGNpL2NvcmUuYy0xNDEtXFx0XFx0aW5zdHJ1Y3Rpb24gPSBIQ1BfTVNHX0dFVF9DTUQobWVzc2FnZS1cXHUwMDNlaGVhZGVyKTtcXG5uZXQvbmZjL2hjaS9jb3JlLmM6MTQyOlxcdFxcdHNrYl9wdWxsKHNrYiwgTkZDX0hDSV9IQ1BfTUVTU0FHRV9IRUFERVJfTEVOKTtcXG5uZXQvbmZjL2hjaS9jb3JlLmMtMTQzLVxcbi0tXFxubmV0L25mYy9oY2kvY29yZS5jPTE4MT12b2lkIG5mY19oY2lfY21kX3JlY2VpdmVkKHN0cnVjdCBuZmNfaGNpX2RldiAqaGRldiwgdTggcGlwZSwgdTggY21kLFxcbi0tXFxubmV0L25mYy9oY2kvY29yZS5jLTE4My17XFxubmV0L25mYy9oY2kvY29yZS5jOjE4NDpcXHR1OCBzdGF0dXMgPSBORkNfSENJX0FOWV9PSztcXG5uZXQvbmZjL2hjaS9jb3JlLmMtMTg1LVxcdGNvbnN0IHN0cnVjdCBoY2lfY3JlYXRlX3BpcGVfcmVzcCAqY3JlYXRlX2luZm87XFxuLS1cXG5uZXQvbmZjL2hjaS9jb3JlLmMtMTkxLVxcbm5ldC9uZmMvaGNpL2NvcmUuYzoxOTI6XFx0aWYgKHBpcGUgXFx1MDAzZT0gTkZDX0hDSV9NQVhfUElQRVMpIHtcXG5uZXQvbmZjL2hjaS9jb3JlLmM6MTkzOlxcdFxcdHN0YXR1cyA9IE5GQ19IQ0lfQU5ZX0VfTk9LO1xcbm5ldC9uZmMvaGNpL2NvcmUuYy0xOTQtXFx0XFx0Z290byBleGl0O1xcbi0tXFxubmV0L25mYy9oY2kvY29yZS5jLTE5OS1cXHRzd2l0Y2ggKGNtZCkge1xcbm5ldC9uZmMvaGNpL2NvcmUuYzoyMDA6XFx0Y2FzZSBORkNfSENJX0FETV9OT1RJRllfUElQRV9DUkVBVEVEOlxcbm5ldC9uZmMvaGNpL2NvcmUuYy0yMDEtXFx0XFx0aWYgKHNrYi1cXHUwMDNlbGVuICE9IDUpIHtcXG5uZXQvbmZjL2hjaS9jb3JlLmM6MjAyOlxcdFxcdFxcdHN0YXR1cyA9IE5GQ19IQ0lfQU5ZX0VfTk9LO1xcbm5ldC9uZmMvaGNpL2NvcmUuYy0yMDMtXFx0XFx0XFx0Z290byBleGl0O1xcbi0tXFxubmV0L25mYy9oY2kvY29yZS5jLTIwNi1cXG5uZXQvbmZjL2hjaS9jb3JlLmM6MjA3OlxcdFxcdGlmIChjcmVhdGVfaW5mby1cXHUwMDNlcGlwZSBcXHUwMDNlPSBORkNfSENJX01BWF9QSVBFUykge1xcbm5ldC9uZmMvaGNpL2NvcmUuYzoyMDg6XFx0XFx0XFx0c3RhdHVzID0gTkZDX0hDSV9BTllfRV9OT0s7XFxubmV0L25mYy9oY2kvY29yZS5jLTIwOS1cXHRcXHRcXHRnb3RvIGV4aXQ7XFxuLS1cXG5uZXQvbmZjL2hjaS9jb3JlLmMtMjIxLVxcdFxcdGJyZWFrO1xcbm5ldC9uZmMvaGNpL2NvcmUuYzoyMjI6XFx0Y2FzZSBORkNfSENJX0FOWV9PUEVOX1BJUEU6XFxubmV0L25mYy9oY2kvY29yZS5jOjIyMzpcXHRcXHRpZiAoZ2F0ZSA9PSBORkNfSENJX0lOVkFMSURfR0FURSkge1xcbm5ldC9uZmMvaGNpL2NvcmUuYzoyMjQ6XFx0XFx0XFx0c3RhdHVzID0gTkZDX0hDSV9BTllfRV9OT0s7XFxubmV0L25mYy9oY2kvY29yZS5jLTIyNS1cXHRcXHRcXHRnb3RvIGV4aXQ7XFxuLS1cXG5uZXQvbmZjL2hjaS9jb3JlLmMtMjI3LVxcdFxcdGJyZWFrO1xcbm5ldC9uZmMvaGNpL2NvcmUuYzoyMjg6XFx0Y2FzZSBORkNfSENJX0FETV9OT1RJRllfUElQRV9ERUxFVEVEOlxcbm5ldC9uZmMvaGNpL2NvcmUuYy0yMjktXFx0XFx0aWYgKHNrYi1cXHUwMDNlbGVuICE9IDEpIHtcXG5uZXQvbmZjL2hjaS9jb3JlLmM6MjMwOlxcdFxcdFxcdHN0YXR1cyA9IE5GQ19IQ0lfQU5ZX0VfTk9LO1xcbm5ldC9uZmMvaGNpL2NvcmUuYy0yMzEtXFx0XFx0XFx0Z290byBleGl0O1xcbi0tXFxubmV0L25mYy9oY2kvY29yZS5jLTIzNC1cXG5uZXQvbmZjL2hjaS9jb3JlLmM6MjM1OlxcdFxcdGlmIChkZWxldGVfaW5mby1cXHUwMDNlcGlwZSBcXHUwMDNlPSBORkNfSENJX01BWF9QSVBFUykge1xcbm5ldC9uZmMvaGNpL2NvcmUuYzoyMzY6XFx0XFx0XFx0c3RhdHVzID0gTkZDX0hDSV9BTllfRV9OT0s7XFxubmV0L25mYy9oY2kvY29yZS5jLTIzNy1cXHRcXHRcXHRnb3RvIGV4aXQ7XFxuLS1cXG5uZXQvbmZjL2hjaS9jb3JlLmMtMjM5LVxcbm5ldC9uZmMvaGNpL2NvcmUuYzoyNDA6XFx0XFx0aGRldi1cXHUwMDNlcGlwZXNbZGVsZXRlX2luZm8tXFx1MDAzZXBpcGVdLmdhdGUgPSBORkNfSENJX0lOVkFMSURfR0FURTtcXG5uZXQvbmZjL2hjaS9jb3JlLmM6MjQxOlxcdFxcdGhkZXYtXFx1MDAzZXBpcGVzW2RlbGV0ZV9pbmZvLVxcdTAwM2VwaXBlXS5kZXN0X2hvc3QgPSBORkNfSENJX0lOVkFMSURfSE9TVDtcXG5uZXQvbmZjL2hjaS9jb3JlLmMtMjQyLVxcdFxcdGJyZWFrO1xcbm5ldC9uZmMvaGNpL2NvcmUuYzoyNDM6XFx0Y2FzZSBORkNfSENJX0FETV9OT1RJRllfQUxMX1BJUEVfQ0xFQVJFRDpcXG5uZXQvbmZjL2hjaS9jb3JlLmMtMjQ0LVxcdFxcdGlmIChza2ItXFx1MDAzZWxlbiAhPSAxKSB7XFxubmV0L25mYy9oY2kvY29yZS5jOjI0NTpcXHRcXHRcXHRzdGF0dXMgPSBORkNfSENJX0FOWV9FX05PSztcXG5uZXQvbmZjL2hjaS9jb3JlLmMtMjQ2LVxcdFxcdFxcdGdvdG8gZXhpdDtcXG4tLVxcbm5ldC9uZmMvaGNpL2NvcmUuYy0yNjAtZXhpdDpcXG5uZXQvbmZjL2hjaS9jb3JlLmM6MjYxOlxcdG5mY19oY2lfaGNwX21lc3NhZ2VfdHgoaGRldiwgcGlwZSwgTkZDX0hDSV9IQ1BfUkVTUE9OU0UsXFxubmV0L25mYy9oY2kvY29yZS5jLTI2Mi1cXHRcXHRcXHQgICAgICAgc3RhdHVzLCBOVUxMLCAwLCBOVUxMLCBOVUxMLCAwKTtcXG4tLVxcbm5ldC9uZmMvaGNpL2NvcmUuYz0yNjc9dTMyIG5mY19oY2lfc2FrX3RvX3Byb3RvY29sKHU4IHNhaylcXG5uZXQvbmZjL2hjaS9jb3JlLmMtMjY4LXtcXG5uZXQvbmZjL2hjaS9jb3JlLmM6MjY5OlxcdHN3aXRjaCAoTkZDX0hDSV9UWVBFX0FfU0VMX1BST1Qoc2FrKSkge1xcbm5ldC9uZmMvaGNpL2NvcmUuYzoyNzA6XFx0Y2FzZSBORkNfSENJX1RZUEVfQV9TRUxfUFJPVF9NSUZBUkU6XFxubmV0L25mYy9oY2kvY29yZS5jLTI3MS1cXHRcXHRyZXR1cm4gTkZDX1BST1RPX01JRkFSRV9NQVNLO1xcbm5ldC9uZmMvaGNpL2NvcmUuYzoyNzI6XFx0Y2FzZSBORkNfSENJX1RZUEVfQV9TRUxfUFJPVF9JU08xNDQ0MzpcXG5uZXQvbmZjL2hjaS9jb3JlLmMtMjczLVxcdFxcdHJldHVybiBORkNfUFJPVE9fSVNPMTQ0NDNfTUFTSztcXG5uZXQvbmZjL2hjaS9jb3JlLmM6Mjc0OlxcdGNhc2UgTkZDX0hDSV9UWVBFX0FfU0VMX1BST1RfREVQOlxcbm5ldC9uZmMvaGNpL2NvcmUuYy0yNzUtXFx0XFx0cmV0dXJuIE5GQ19QUk9UT19ORkNfREVQX01BU0s7XFxubmV0L25mYy9oY2kvY29yZS5jOjI3NjpcXHRjYXNlIE5GQ19IQ0lfVFlQRV9BX1NFTF9QUk9UX0lTTzE0NDQzX0RFUDpcXG5uZXQvbmZjL2hjaS9jb3JlLmMtMjc3LVxcdFxcdHJldHVybiBORkNfUFJPVE9fSVNPMTQ0NDNfTUFTSyB8IE5GQ19QUk9UT19ORkNfREVQX01BU0s7XFxuLS1cXG5uZXQvbmZjL2hjaS9jb3JlLmM9Mjg0PWludCBuZmNfaGNpX3RhcmdldF9kaXNjb3ZlcmVkKHN0cnVjdCBuZmNfaGNpX2RldiAqaGRldiwgdTggZ2F0ZSlcXG4tLVxcbm5ldC9uZmMvaGNpL2NvcmUuYy0yOTgtXFx0c3dpdGNoIChnYXRlKSB7XFxubmV0L25mYy9oY2kvY29yZS5jOjI5OTpcXHRjYXNlIE5GQ19IQ0lfUkZfUkVBREVSX0FfR0FURTpcXG5uZXQvbmZjL2hjaS9jb3JlLmM6MzAwOlxcdFxcdHIgPSBuZmNfaGNpX2dldF9wYXJhbShoZGV2LCBORkNfSENJX1JGX1JFQURFUl9BX0dBVEUsXFxubmV0L25mYy9oY2kvY29yZS5jOjMwMTpcXHRcXHRcXHRcXHQgICAgICBORkNfSENJX1JGX1JFQURFUl9BX0FUUUEsIFxcdTAwMjZhdHFhX3NrYik7XFxubmV0L25mYy9oY2kvY29yZS5jLTMwMi1cXHRcXHRpZiAociBcXHUwMDNjIDApXFxuLS1cXG5uZXQvbmZjL2hjaS9jb3JlLmMtMzA0LVxcbm5ldC9uZmMvaGNpL2NvcmUuYzozMDU6XFx0XFx0ciA9IG5mY19oY2lfZ2V0X3BhcmFtKGhkZXYsIE5GQ19IQ0lfUkZfUkVBREVSX0FfR0FURSxcXG5uZXQvbmZjL2hjaS9jb3JlLmM6MzA2OlxcdFxcdFxcdFxcdCAgICAgIE5GQ19IQ0lfUkZfUkVBREVSX0FfU0FLLCBcXHUwMDI2c2FrX3NrYik7XFxubmV0L25mYy9oY2kvY29yZS5jLTMwNy1cXHRcXHRpZiAociBcXHUwMDNjIDApXFxuLS1cXG5uZXQvbmZjL2hjaS9jb3JlLmMtMzI0LVxcbm5ldC9uZmMvaGNpL2NvcmUuYzozMjU6XFx0XFx0ciA9IG5mY19oY2lfZ2V0X3BhcmFtKGhkZXYsIE5GQ19IQ0lfUkZfUkVBREVSX0FfR0FURSxcXG5uZXQvbmZjL2hjaS9jb3JlLmM6MzI2OlxcdFxcdFxcdFxcdCAgICAgIE5GQ19IQ0lfUkZfUkVBREVSX0FfVUlELCBcXHUwMDI2dWlkX3NrYik7XFxubmV0L25mYy9oY2kvY29yZS5jLTMyNy1cXHRcXHRpZiAociBcXHUwMDNjIDApXFxuLS1cXG5uZXQvbmZjL2hjaS9jb3JlLmMtMzQ0LVxcdFxcdGJyZWFrO1xcbm5ldC9uZmMvaGNpL2NvcmUuYzozNDU6XFx0Y2FzZSBORkNfSENJX1JGX1JFQURFUl9CX0dBVEU6XFxubmV0L25mYy9oY2kvY29yZS5jLTM0Ni1cXHRcXHR0YXJnZXRzLVxcdTAwM2VzdXBwb3J0ZWRfcHJvdG9jb2xzID0gTkZDX1BST1RPX0lTTzE0NDQzX0JfTUFTSztcXG4tLVxcbm5ldC9uZmMvaGNpL2NvcmUuYz0zODE9dm9pZCBuZmNfaGNpX2V2ZW50X3JlY2VpdmVkKHN0cnVjdCBuZmNfaGNpX2RldiAqaGRldiwgdTggcGlwZSwgdTggZXZlbnQsXFxuLS1cXG5uZXQvbmZjL2hjaS9jb3JlLmMtMzg2LVxcbm5ldC9uZmMvaGNpL2NvcmUuYzozODc6XFx0aWYgKHBpcGUgXFx1MDAzZT0gTkZDX0hDSV9NQVhfUElQRVMpIHtcXG5uZXQvbmZjL2hjaS9jb3JlLmMtMzg4LVxcdFxcdHByX2VycihcXFwiRGlzY2FyZGVkIGV2ZW50ICV4IHRvIGludmFsaWQgcGlwZSAleFxcXFxuXFxcIiwgZXZlbnQsIHBpcGUpO1xcbi0tXFxubmV0L25mYy9oY2kvY29yZS5jLTM5Mi1cXHRnYXRlID0gaGRldi1cXHUwMDNlcGlwZXNbcGlwZV0uZ2F0ZTtcXG5uZXQvbmZjL2hjaS9jb3JlLmM6MzkzOlxcdGlmIChnYXRlID09IE5GQ19IQ0lfSU5WQUxJRF9HQVRFKSB7XFxubmV0L25mYy9oY2kvY29yZS5jLTM5NC1cXHRcXHRwcl9lcnIoXFxcIkRpc2NhcmRlZCBldmVudCAleCB0byB1bm9wZW5lZCBwaXBlICV4XFxcXG5cXFwiLCBldmVudCwgcGlwZSk7XFxuLS1cXG5uZXQvbmZjL2hjaS9jb3JlLmMtNDA0LVxcdHN3aXRjaCAoZXZlbnQpIHtcXG5uZXQvbmZjL2hjaS9jb3JlLmM6NDA1OlxcdGNhc2UgTkZDX0hDSV9FVlRfVEFSR0VUX0RJU0NPVkVSRUQ6XFxubmV0L25mYy9oY2kvY29yZS5jLTQwNi1cXHRcXHRpZiAoc2tiLVxcdTAwM2VsZW4gXFx1MDAzYyAxKSB7XFx0Lyogbm8gc3RhdHVzIGRhdGE/ICovXFxuLS1cXG5uZXQvbmZjL2hjaS9jb3JlLmM9NDQ5PXN0YXRpYyBpbnQgaGNpX2Rldl9jb25uZWN0X2dhdGVzKHN0cnVjdCBuZmNfaGNpX2RldiAqaGRldiwgdTggZ2F0ZV9jb3VudCxcXG4tLVxcbm5ldC9uZmMvaGNpL2NvcmUuYy00NTMtXFx0d2hpbGUgKGdhdGVfY291bnQtLSkge1xcbm5ldC9uZmMvaGNpL2NvcmUuYzo0NTQ6XFx0XFx0ciA9IG5mY19oY2lfY29ubmVjdF9nYXRlKGhkZXYsIE5GQ19IQ0lfSE9TVF9DT05UUk9MTEVSX0lELFxcbm5ldC9uZmMvaGNpL2NvcmUuYy00NTUtXFx0XFx0XFx0XFx0XFx0IGdhdGVzLVxcdTAwM2VnYXRlLCBnYXRlcy1cXHUwMDNlcGlwZSk7XFxuLS1cXG5uZXQvbmZjL2hjaS9jb3JlLmM9NDY0PXN0YXRpYyBpbnQgaGNpX2Rldl9zZXNzaW9uX2luaXQoc3RydWN0IG5mY19oY2lfZGV2ICpoZGV2KVxcbi0tXFxubmV0L25mYy9oY2kvY29yZS5jLTQ2OC1cXG5uZXQvbmZjL2hjaS9jb3JlLmM6NDY5OlxcdGlmIChoZGV2LVxcdTAwM2Vpbml0X2RhdGEuZ2F0ZXNbMF0uZ2F0ZSAhPSBORkNfSENJX0FETUlOX0dBVEUpXFxubmV0L25mYy9oY2kvY29yZS5jLTQ3MC1cXHRcXHRyZXR1cm4gLUVQUk9UTztcXG5uZXQvbmZjL2hjaS9jb3JlLmMtNDcxLVxcbm5ldC9uZmMvaGNpL2NvcmUuYzo0NzI6XFx0ciA9IG5mY19oY2lfY29ubmVjdF9nYXRlKGhkZXYsIE5GQ19IQ0lfSE9TVF9DT05UUk9MTEVSX0lELFxcbm5ldC9uZmMvaGNpL2NvcmUuYy00NzMtXFx0XFx0XFx0XFx0IGhkZXYtXFx1MDAzZWluaXRfZGF0YS5nYXRlc1swXS5nYXRlLFxcbi0tXFxubmV0L25mYy9oY2kvY29yZS5jLTQ3Ny1cXG5uZXQvbmZjL2hjaS9jb3JlLmM6NDc4OlxcdHIgPSBuZmNfaGNpX2dldF9wYXJhbShoZGV2LCBORkNfSENJX0FETUlOX0dBVEUsXFxubmV0L25mYy9oY2kvY29yZS5jOjQ3OTpcXHRcXHRcXHQgICAgICBORkNfSENJX0FETUlOX1NFU1NJT05fSURFTlRJVFksIFxcdTAwMjZza2IpO1xcbm5ldC9uZmMvaGNpL2NvcmUuYy00ODAtXFx0aWYgKHIgXFx1MDAzYyAwKVxcbi0tXFxubmV0L25mYy9oY2kvY29yZS5jLTUwMi1cXG5uZXQvbmZjL2hjaS9jb3JlLmM6NTAzOlxcdFxcdHIgPSBuZmNfaGNpX3NldF9wYXJhbShoZGV2LCBORkNfSENJX0FETUlOX0dBVEUsXFxubmV0L25mYy9oY2kvY29yZS5jOjUwNDpcXHRcXHRcXHRcXHRORkNfSENJX0FETUlOX1NFU1NJT05fSURFTlRJVFksXFxubmV0L25mYy9oY2kvY29yZS5jLTUwNS1cXHRcXHRcXHRcXHRoZGV2LVxcdTAwM2Vpbml0X2RhdGEuc2Vzc2lvbl9pZCxcXG4tLVxcbm5ldC9uZmMvaGNpL2NvcmUuYz01MjA9c3RhdGljIGludCBoY2lfZGV2X3ZlcnNpb24oc3RydWN0IG5mY19oY2lfZGV2ICpoZGV2KVxcbi0tXFxubmV0L25mYy9oY2kvY29yZS5jLTUyNC1cXG5uZXQvbmZjL2hjaS9jb3JlLmM6NTI1OlxcdHIgPSBuZmNfaGNpX2dldF9wYXJhbShoZGV2LCBORkNfSENJX0lEX01HTVRfR0FURSxcXG5uZXQvbmZjL2hjaS9jb3JlLmM6NTI2OlxcdFxcdFxcdCAgICAgIE5GQ19IQ0lfSURfTUdNVF9WRVJTSU9OX1NXLCBcXHUwMDI2c2tiKTtcXG5uZXQvbmZjL2hjaS9jb3JlLmMtNTI3LVxcdGlmIChyID09IC1FT1BOT1RTVVBQKSB7XFxuLS1cXG5uZXQvbmZjL2hjaS9jb3JlLmMtNTQ1LVxcbm5ldC9uZmMvaGNpL2NvcmUuYzo1NDY6XFx0ciA9IG5mY19oY2lfZ2V0X3BhcmFtKGhkZXYsIE5GQ19IQ0lfSURfTUdNVF9HQVRFLFxcbm5ldC9uZmMvaGNpL2NvcmUuYzo1NDc6XFx0XFx0XFx0ICAgICAgTkZDX0hDSV9JRF9NR01UX1ZFUlNJT05fSFcsIFxcdTAwMjZza2IpO1xcbm5ldC9uZmMvaGNpL2NvcmUuYy01NDgtXFx0aWYgKHIgXFx1MDAzYyAwKVxcbi0tXFxubmV0L25mYy9oY2kvY29yZS5jPTU3OT1zdGF0aWMgaW50IGhjaV9kZXZfdXAoc3RydWN0IG5mY19kZXYgKm5mY19kZXYpXFxuLS1cXG5uZXQvbmZjL2hjaS9jb3JlLmMtNTk3LVxcbm5ldC9uZmMvaGNpL2NvcmUuYzo1OTg6XFx0ciA9IG5mY19oY2lfc2VuZF9ldmVudChoZGV2LCBORkNfSENJX1JGX1JFQURFUl9BX0dBVEUsXFxubmV0L25mYy9oY2kvY29yZS5jOjU5OTpcXHRcXHRcXHQgICAgICAgTkZDX0hDSV9FVlRfRU5EX09QRVJBVElPTiwgTlVMTCwgMCk7XFxubmV0L25mYy9oY2kvY29yZS5jLTYwMC1cXHRpZiAociBcXHUwMDNjIDApXFxuLS1cXG5uZXQvbmZjL2hjaS9jb3JlLmM9NjM5PXN0YXRpYyBpbnQgaGNpX3N0YXJ0X3BvbGwoc3RydWN0IG5mY19kZXYgKm5mY19kZXYsXFxuLS1cXG5uZXQvbmZjL2hjaS9jb3JlLmMtNjQ2LVxcdGVsc2VcXG5uZXQvbmZjL2hjaS9jb3JlLmM6NjQ3OlxcdFxcdHJldHVybiBuZmNfaGNpX3NlbmRfZXZlbnQoaGRldiwgTkZDX0hDSV9SRl9SRUFERVJfQV9HQVRFLFxcbm5ldC9uZmMvaGNpL2NvcmUuYzo2NDg6XFx0XFx0XFx0XFx0XFx0ICBORkNfSENJX0VWVF9SRUFERVJfUkVRVUVTVEVELFxcbm5ldC9uZmMvaGNpL2NvcmUuYy02NDktXFx0XFx0XFx0XFx0XFx0ICBOVUxMLCAwKTtcXG4tLVxcbm5ldC9uZmMvaGNpL2NvcmUuYz02NTI9c3RhdGljIHZvaWQgaGNpX3N0b3BfcG9sbChzdHJ1Y3QgbmZjX2RldiAqbmZjX2RldilcXG4tLVxcbm5ldC9uZmMvaGNpL2NvcmUuYy02NTgtXFx0ZWxzZVxcbm5ldC9uZmMvaGNpL2NvcmUuYzo2NTk6XFx0XFx0bmZjX2hjaV9zZW5kX2V2ZW50KGhkZXYsIE5GQ19IQ0lfUkZfUkVBREVSX0FfR0FURSxcXG5uZXQvbmZjL2hjaS9jb3JlLmM6NjYwOlxcdFxcdFxcdFxcdCAgIE5GQ19IQ0lfRVZUX0VORF9PUEVSQVRJT04sIE5VTEwsIDApO1xcbm5ldC9uZmMvaGNpL2NvcmUuYy02NjEtfVxcbi0tXFxubmV0L25mYy9oY2kvY29yZS5jPTcyMj1zdGF0aWMgaW50IGhjaV90cmFuc2NlaXZlKHN0cnVjdCBuZmNfZGV2ICpuZmNfZGV2LCBzdHJ1Y3QgbmZjX3RhcmdldCAqdGFyZ2V0LFxcbi0tXFxubmV0L25mYy9oY2kvY29yZS5jLTczMS1cXHRzd2l0Y2ggKHRhcmdldC1cXHUwMDNlaGNpX3JlYWRlcl9nYXRlKSB7XFxubmV0L25mYy9oY2kvY29yZS5jOjczMjpcXHRjYXNlIE5GQ19IQ0lfUkZfUkVBREVSX0FfR0FURTpcXG5uZXQvbmZjL2hjaS9jb3JlLmM6NzMzOlxcdGNhc2UgTkZDX0hDSV9SRl9SRUFERVJfQl9HQVRFOlxcbm5ldC9uZmMvaGNpL2NvcmUuYy03MzQtXFx0XFx0aWYgKGhkZXYtXFx1MDAzZW9wcy1cXHUwMDNlaW1fdHJhbnNjZWl2ZSkge1xcbi0tXFxubmV0L25mYy9oY2kvY29yZS5jLTc0Ny1cXHRcXHRyID0gbmZjX2hjaV9zZW5kX2NtZF9hc3luYyhoZGV2LCB0YXJnZXQtXFx1MDAzZWhjaV9yZWFkZXJfZ2F0ZSxcXG5uZXQvbmZjL2hjaS9jb3JlLmM6NzQ4OlxcdFxcdFxcdFxcdFxcdCAgIE5GQ19IQ0lfV1JfWENIR19EQVRBLCBza2ItXFx1MDAzZWRhdGEsXFxubmV0L25mYy9oY2kvY29yZS5jLTc0OS1cXHRcXHRcXHRcXHRcXHQgICBza2ItXFx1MDAzZWxlbiwgaGNpX3RyYW5zY2VpdmVfY2IsIGhkZXYpO1xcbi0tXFxubmV0L25mYy9oY2kvY29yZS5jPTg1ND1zdGF0aWMgdm9pZCBuZmNfaGNpX3JlY3ZfZnJvbV9sbGMoc3RydWN0IG5mY19oY2lfZGV2ICpoZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L25mYy9oY2kvY29yZS5jLTg2My1cXG5uZXQvbmZjL2hjaS9jb3JlLmM6ODY0OlxcdGlmICghcHNrYl9tYXlfcHVsbChza2IsIE5GQ19IQ0lfSENQX1BBQ0tFVF9IRUFERVJfTEVOKSkge1xcbm5ldC9uZmMvaGNpL2NvcmUuYy04NjUtXFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuLS1cXG5uZXQvbmZjL2hjaS9jb3JlLmMtODY5LVxcdHBhY2tldCA9IChzdHJ1Y3QgaGNwX3BhY2tldCAqKXNrYi1cXHUwMDNlZGF0YTtcXG5uZXQvbmZjL2hjaS9jb3JlLmM6ODcwOlxcdGlmICgocGFja2V0LVxcdTAwM2VoZWFkZXIgXFx1MDAyNiB+TkZDX0hDSV9GUkFHTUVOVCkgPT0gMCkge1xcbm5ldC9uZmMvaGNpL2NvcmUuYy04NzEtXFx0XFx0c2tiX3F1ZXVlX3RhaWwoXFx1MDAyNmhkZXYtXFx1MDAzZXJ4X2hjcF9mcmFncywgc2tiKTtcXG4tLVxcbm5ldC9uZmMvaGNpL2NvcmUuYy04NzYtXFx0aWYgKHNrYl9xdWV1ZV9sZW4oXFx1MDAyNmhkZXYtXFx1MDAzZXJ4X2hjcF9mcmFncykpIHtcXG5uZXQvbmZjL2hjaS9jb3JlLmM6ODc3OlxcdFxcdHBpcGUgPSBwYWNrZXQtXFx1MDAzZWhlYWRlciBcXHUwMDI2IE5GQ19IQ0lfRlJBR01FTlQ7XFxubmV0L25mYy9oY2kvY29yZS5jLTg3OC1cXHRcXHRza2JfcXVldWVfdGFpbChcXHUwMDI2aGRldi1cXHUwMDNlcnhfaGNwX2ZyYWdzLCBza2IpO1xcbi0tXFxubmV0L25mYy9oY2kvY29yZS5jLTg4Mi1cXHRcXHRcXHRtc2dfbGVuICs9IChmcmFnX3NrYi1cXHUwMDNlbGVuIC1cXG5uZXQvbmZjL2hjaS9jb3JlLmM6ODgzOlxcdFxcdFxcdFxcdCAgICBORkNfSENJX0hDUF9QQUNLRVRfSEVBREVSX0xFTik7XFxubmV0L25mYy9oY2kvY29yZS5jLTg4NC1cXHRcXHR9XFxubmV0L25mYy9oY2kvY29yZS5jLTg4NS1cXG5uZXQvbmZjL2hjaS9jb3JlLmM6ODg2OlxcdFxcdGhjcF9za2IgPSBuZmNfYWxsb2NfcmVjdl9za2IoTkZDX0hDSV9IQ1BfUEFDS0VUX0hFQURFUl9MRU4gK1xcbm5ldC9uZmMvaGNpL2NvcmUuYy04ODctXFx0XFx0XFx0XFx0XFx0ICAgICBtc2dfbGVuLCBHRlBfS0VSTkVMKTtcXG4tLVxcbm5ldC9uZmMvaGNpL2NvcmUuYy04OTUtXFx0XFx0c2tiX3F1ZXVlX3dhbGsoXFx1MDAyNmhkZXYtXFx1MDAzZXJ4X2hjcF9mcmFncywgZnJhZ19za2IpIHtcXG5uZXQvbmZjL2hjaS9jb3JlLmM6ODk2OlxcdFxcdFxcdG1zZ19sZW4gPSBmcmFnX3NrYi1cXHUwMDNlbGVuIC0gTkZDX0hDSV9IQ1BfUEFDS0VUX0hFQURFUl9MRU47XFxubmV0L25mYy9oY2kvY29yZS5jLTg5Ny1cXHRcXHRcXHRza2JfcHV0X2RhdGEoaGNwX3NrYixcXG5uZXQvbmZjL2hjaS9jb3JlLmM6ODk4OlxcdFxcdFxcdFxcdCAgICAgZnJhZ19za2ItXFx1MDAzZWRhdGEgKyBORkNfSENJX0hDUF9QQUNLRVRfSEVBREVSX0xFTixcXG5uZXQvbmZjL2hjaS9jb3JlLmMtODk5LVxcdFxcdFxcdFxcdCAgICAgbXNnX2xlbik7XFxuLS1cXG5uZXQvbmZjL2hjaS9jb3JlLmMtOTAzLVxcdH0gZWxzZSB7XFxubmV0L25mYy9oY2kvY29yZS5jOjkwNDpcXHRcXHRwYWNrZXQtXFx1MDAzZWhlYWRlciBcXHUwMDI2PSBORkNfSENJX0ZSQUdNRU5UO1xcbm5ldC9uZmMvaGNpL2NvcmUuYy05MDUtXFx0XFx0aGNwX3NrYiA9IHNrYjtcXG4tLVxcbm5ldC9uZmMvaGNpL2NvcmUuYy05MTEtXFx0ICovXFxubmV0L25mYy9oY2kvY29yZS5jOjkxMjpcXHRpZiAoIXBza2JfbWF5X3B1bGwoaGNwX3NrYiwgTkZDX0hDSV9IQ1BfSEVBREVSX0xFTikpIHtcXG5uZXQvbmZjL2hjaS9jb3JlLmMtOTEzLVxcdFxcdGtmcmVlX3NrYihoY3Bfc2tiKTtcXG4tLVxcbm5ldC9uZmMvaGNpL2NvcmUuYy05MTgtXFx0dHlwZSA9IEhDUF9NU0dfR0VUX1RZUEUocGFja2V0LVxcdTAwM2VtZXNzYWdlLmhlYWRlcik7XFxubmV0L25mYy9oY2kvY29yZS5jOjkxOTpcXHRpZiAodHlwZSA9PSBORkNfSENJX0hDUF9SRVNQT05TRSkge1xcbm5ldC9uZmMvaGNpL2NvcmUuYy05MjAtXFx0XFx0cGlwZSA9IHBhY2tldC1cXHUwMDNlaGVhZGVyO1xcbm5ldC9uZmMvaGNpL2NvcmUuYy05MjEtXFx0XFx0aW5zdHJ1Y3Rpb24gPSBIQ1BfTVNHX0dFVF9DTUQocGFja2V0LVxcdTAwM2VtZXNzYWdlLmhlYWRlcik7XFxubmV0L25mYy9oY2kvY29yZS5jOjkyMjpcXHRcXHRza2JfcHVsbChoY3Bfc2tiLCBORkNfSENJX0hDUF9QQUNLRVRfSEVBREVSX0xFTiArXFxubmV0L25mYy9oY2kvY29yZS5jOjkyMzpcXHRcXHRcXHQgTkZDX0hDSV9IQ1BfTUVTU0FHRV9IRUFERVJfTEVOKTtcXG5uZXQvbmZjL2hjaS9jb3JlLmMtOTI0LVxcdFxcdG5mY19oY2lfaGNwX21lc3NhZ2VfcngoaGRldiwgcGlwZSwgdHlwZSwgaW5zdHJ1Y3Rpb24sIGhjcF9za2IpO1xcbi0tXFxubmV0L25mYy9oY2kvaGNpLmg9NjA9c3RydWN0IGhjaV9hbGxfcGlwZV9jbGVhcmVkX25vdGkge1xcbi0tXFxubmV0L25mYy9oY2kvaGNpLmgtNjMtXFxubmV0L25mYy9oY2kvaGNpLmg6NjQ6I2RlZmluZSBORkNfSENJX0ZSQUdNRU5UXFx0MHg3Zlxcbm5ldC9uZmMvaGNpL2hjaS5oLTY1LVxcbi0tXFxubmV0L25mYy9oY2kvaGNpLmg9NzY9dm9pZCBuZmNfaGNpX2hjcF9tZXNzYWdlX3J4KHN0cnVjdCBuZmNfaGNpX2RldiAqaGRldiwgdTggcGlwZSwgdTggdHlwZSxcXG4tLVxcbm5ldC9uZmMvaGNpL2hjaS5oLTc5LS8qIEhDUCBoZWFkZXJzICovXFxubmV0L25mYy9oY2kvaGNpLmg6ODA6I2RlZmluZSBORkNfSENJX0hDUF9QQUNLRVRfSEVBREVSX0xFTlxcdDFcXG5uZXQvbmZjL2hjaS9oY2kuaDo4MTojZGVmaW5lIE5GQ19IQ0lfSENQX01FU1NBR0VfSEVBREVSX0xFTlxcdDFcXG5uZXQvbmZjL2hjaS9oY2kuaDo4MjojZGVmaW5lIE5GQ19IQ0lfSENQX0hFQURFUl9MRU5cXHRcXHQyXFxubmV0L25mYy9oY2kvaGNpLmgtODMtXFxubmV0L25mYy9oY2kvaGNpLmgtODQtLyogSENQIHR5cGVzICovXFxubmV0L25mYy9oY2kvaGNpLmg6ODU6I2RlZmluZSBORkNfSENJX0hDUF9DT01NQU5EXFx0MHgwMFxcbm5ldC9uZmMvaGNpL2hjaS5oOjg2OiNkZWZpbmUgTkZDX0hDSV9IQ1BfRVZFTlRcXHQweDAxXFxubmV0L25mYy9oY2kvaGNpLmg6ODc6I2RlZmluZSBORkNfSENJX0hDUF9SRVNQT05TRVxcdDB4MDJcXG5uZXQvbmZjL2hjaS9oY2kuaC04OC1cXG5uZXQvbmZjL2hjaS9oY2kuaC04OS0vKiBHZW5lcmljIGNvbW1hbmRzICovXFxubmV0L25mYy9oY2kvaGNpLmg6OTA6I2RlZmluZSBORkNfSENJX0FOWV9TRVRfUEFSQU1FVEVSXFx0MHgwMVxcbm5ldC9uZmMvaGNpL2hjaS5oOjkxOiNkZWZpbmUgTkZDX0hDSV9BTllfR0VUX1BBUkFNRVRFUlxcdDB4MDJcXG5uZXQvbmZjL2hjaS9oY2kuaDo5MjojZGVmaW5lIE5GQ19IQ0lfQU5ZX09QRU5fUElQRVxcdFxcdDB4MDNcXG5uZXQvbmZjL2hjaS9oY2kuaDo5MzojZGVmaW5lIE5GQ19IQ0lfQU5ZX0NMT1NFX1BJUEVcXHRcXHQweDA0XFxubmV0L25mYy9oY2kvaGNpLmgtOTQtXFxubmV0L25mYy9oY2kvaGNpLmgtOTUtLyogUmVhZGVyIFJGIGNvbW1hbmRzICovXFxubmV0L25mYy9oY2kvaGNpLmg6OTY6I2RlZmluZSBORkNfSENJX1dSX1hDSEdfREFUQVxcdFxcdDB4MTBcXG5uZXQvbmZjL2hjaS9oY2kuaC05Ny1cXG5uZXQvbmZjL2hjaS9oY2kuaC05OC0vKiBBZG1pbiBjb21tYW5kcyAqL1xcbm5ldC9uZmMvaGNpL2hjaS5oOjk5OiNkZWZpbmUgTkZDX0hDSV9BRE1fQ1JFQVRFX1BJUEVcXHRcXHRcXHQweDEwXFxubmV0L25mYy9oY2kvaGNpLmg6MTAwOiNkZWZpbmUgTkZDX0hDSV9BRE1fREVMRVRFX1BJUEVcXHRcXHRcXHQweDExXFxubmV0L25mYy9oY2kvaGNpLmg6MTAxOiNkZWZpbmUgTkZDX0hDSV9BRE1fTk9USUZZX1BJUEVfQ1JFQVRFRFxcdFxcdDB4MTJcXG5uZXQvbmZjL2hjaS9oY2kuaDoxMDI6I2RlZmluZSBORkNfSENJX0FETV9OT1RJRllfUElQRV9ERUxFVEVEXFx0XFx0MHgxM1xcbm5ldC9uZmMvaGNpL2hjaS5oOjEwMzojZGVmaW5lIE5GQ19IQ0lfQURNX0NMRUFSX0FMTF9QSVBFXFx0XFx0MHgxNFxcbm5ldC9uZmMvaGNpL2hjaS5oOjEwNDojZGVmaW5lIE5GQ19IQ0lfQURNX05PVElGWV9BTExfUElQRV9DTEVBUkVEXFx0MHgxNVxcbm5ldC9uZmMvaGNpL2hjaS5oLTEwNS1cXG5uZXQvbmZjL2hjaS9oY2kuaC0xMDYtLyogR2VuZXJpYyByZXNwb25zZXMgKi9cXG5uZXQvbmZjL2hjaS9oY2kuaDoxMDc6I2RlZmluZSBORkNfSENJX0FOWV9PS1xcdFxcdFxcdFxcdDB4MDBcXG5uZXQvbmZjL2hjaS9oY2kuaDoxMDg6I2RlZmluZSBORkNfSENJX0FOWV9FX05PVF9DT05ORUNURURcXHRcXHQweDAxXFxubmV0L25mYy9oY2kvaGNpLmg6MTA5OiNkZWZpbmUgTkZDX0hDSV9BTllfRV9DTURfUEFSX1VOS05PV05cXHRcXHQweDAyXFxubmV0L25mYy9oY2kvaGNpLmg6MTEwOiNkZWZpbmUgTkZDX0hDSV9BTllfRV9OT0tcXHRcXHRcXHQweDAzXFxubmV0L25mYy9oY2kvaGNpLmg6MTExOiNkZWZpbmUgTkZDX0hDSV9BTllfRV9QSVBFU19GVUxMXFx0XFx0MHgwNFxcbm5ldC9uZmMvaGNpL2hjaS5oOjExMjojZGVmaW5lIE5GQ19IQ0lfQU5ZX0VfUkVHX1BBUl9VTktOT1dOXFx0XFx0MHgwNVxcbm5ldC9uZmMvaGNpL2hjaS5oOjExMzojZGVmaW5lIE5GQ19IQ0lfQU5ZX0VfUElQRV9OT1RfT1BFTkVEXFx0XFx0MHgwNlxcbm5ldC9uZmMvaGNpL2hjaS5oOjExNDojZGVmaW5lIE5GQ19IQ0lfQU5ZX0VfQ01EX05PVF9TVVBQT1JURURcXHRcXHQweDA3XFxubmV0L25mYy9oY2kvaGNpLmg6MTE1OiNkZWZpbmUgTkZDX0hDSV9BTllfRV9JTkhJQklURURcXHRcXHRcXHQweDA4XFxubmV0L25mYy9oY2kvaGNpLmg6MTE2OiNkZWZpbmUgTkZDX0hDSV9BTllfRV9USU1FT1VUXFx0XFx0XFx0MHgwOVxcbm5ldC9uZmMvaGNpL2hjaS5oOjExNzojZGVmaW5lIE5GQ19IQ0lfQU5ZX0VfUkVHX0FDQ0VTU19ERU5JRURcXHRcXHQweDBhXFxubmV0L25mYy9oY2kvaGNpLmg6MTE4OiNkZWZpbmUgTkZDX0hDSV9BTllfRV9QSVBFX0FDQ0VTU19ERU5JRURcXHQweDBiXFxubmV0L25mYy9oY2kvaGNpLmgtMTE5LVxcbi0tXFxubmV0L25mYy9oY2kvaGNwLmM9MjE9aW50IG5mY19oY2lfaGNwX21lc3NhZ2VfdHgoc3RydWN0IG5mY19oY2lfZGV2ICpoZGV2LCB1OCBwaXBlLFxcbi0tXFxubmV0L25mYy9oY2kvaGNwLmMtMzgtXFx0c2tiX3F1ZXVlX2hlYWRfaW5pdChcXHUwMDI2Y21kLVxcdTAwM2Vtc2dfZnJhZ3MpO1xcbm5ldC9uZmMvaGNpL2hjcC5jOjM5OlxcdGNtZC1cXHUwMDNld2FpdF9yZXNwb25zZSA9ICh0eXBlID09IE5GQ19IQ0lfSENQX0NPTU1BTkQpID8gdHJ1ZSA6IGZhbHNlO1xcbm5ldC9uZmMvaGNpL2hjcC5jLTQwLVxcdGNtZC1cXHUwMDNlY2IgPSBjYjtcXG4tLVxcbm5ldC9uZmMvaGNpL2hjcC5jLTQ5LVxcbm5ldC9uZmMvaGNpL2hjcC5jOjUwOlxcdFxcdGlmIChORkNfSENJX0hDUF9QQUNLRVRfSEVBREVSX0xFTiArIGhjaV9sZW4gXFx1MDAzYz1cXG5uZXQvbmZjL2hjaS9oY3AuYy01MS1cXHRcXHQgICAgaGRldi1cXHUwMDNlbWF4X2RhdGFfbGlua19wYXlsb2FkKVxcbi0tXFxubmV0L25mYy9oY2kvaGNwLmMtNTQtXFx0XFx0XFx0ZGF0YV9saW5rX2xlbiA9IGhkZXYtXFx1MDAzZW1heF9kYXRhX2xpbmtfcGF5bG9hZCAtXFxubmV0L25mYy9oY2kvaGNwLmM6NTU6XFx0XFx0XFx0XFx0XFx0TkZDX0hDSV9IQ1BfUEFDS0VUX0hFQURFUl9MRU47XFxubmV0L25mYy9oY2kvaGNwLmMtNTYtXFxubmV0L25mYy9oY2kvaGNwLmM6NTc6XFx0XFx0c2tiX2xlbiA9IG5kZXYtXFx1MDAzZXR4X2hlYWRyb29tICsgTkZDX0hDSV9IQ1BfUEFDS0VUX0hFQURFUl9MRU4gK1xcbm5ldC9uZmMvaGNpL2hjcC5jLTU4LVxcdFxcdFxcdCAgZGF0YV9saW5rX2xlbiArIG5kZXYtXFx1MDAzZXR4X3RhaWxyb29tO1xcbi0tXFxubmV0L25mYy9oY2kvaGNwLmMtNjctXFxubmV0L25mYy9oY2kvaGNwLmM6Njg6XFx0XFx0c2tiX3B1dChza2IsIE5GQ19IQ0lfSENQX1BBQ0tFVF9IRUFERVJfTEVOICsgZGF0YV9saW5rX2xlbik7XFxubmV0L25mYy9oY2kvaGNwLmMtNjktXFxuLS1cXG5uZXQvbmZjL2hjaS9oY3AuYy04NS1cXHRcXHRpZiAoaGNpX2xlbiA9PSAwKVxcbm5ldC9uZmMvaGNpL2hjcC5jOjg2OlxcdFxcdFxcdHBhY2tldC1cXHUwMDNlaGVhZGVyIHw9IH5ORkNfSENJX0ZSQUdNRU5UO1xcbm5ldC9uZmMvaGNpL2hjcC5jLTg3LVxcbi0tXFxubmV0L25mYy9oY2kvaGNwLmM9MTE3PXZvaWQgbmZjX2hjaV9oY3BfbWVzc2FnZV9yeChzdHJ1Y3QgbmZjX2hjaV9kZXYgKmhkZXYsIHU4IHBpcGUsIHU4IHR5cGUsXFxuLS1cXG5uZXQvbmZjL2hjaS9oY3AuYy0xMjAtXFx0c3dpdGNoICh0eXBlKSB7XFxubmV0L25mYy9oY2kvaGNwLmM6MTIxOlxcdGNhc2UgTkZDX0hDSV9IQ1BfUkVTUE9OU0U6XFxubmV0L25mYy9oY2kvaGNwLmMtMTIyLVxcdFxcdG5mY19oY2lfcmVzcF9yZWNlaXZlZChoZGV2LCBpbnN0cnVjdGlvbiwgc2tiKTtcXG5uZXQvbmZjL2hjaS9oY3AuYy0xMjMtXFx0XFx0YnJlYWs7XFxubmV0L25mYy9oY2kvaGNwLmM6MTI0OlxcdGNhc2UgTkZDX0hDSV9IQ1BfQ09NTUFORDpcXG5uZXQvbmZjL2hjaS9oY3AuYy0xMjUtXFx0XFx0bmZjX2hjaV9jbWRfcmVjZWl2ZWQoaGRldiwgcGlwZSwgaW5zdHJ1Y3Rpb24sIHNrYik7XFxubmV0L25mYy9oY2kvaGNwLmMtMTI2LVxcdFxcdGJyZWFrO1xcbm5ldC9uZmMvaGNpL2hjcC5jOjEyNzpcXHRjYXNlIE5GQ19IQ0lfSENQX0VWRU5UOlxcbm5ldC9uZmMvaGNpL2hjcC5jLTEyOC1cXHRcXHRuZmNfaGNpX2V2ZW50X3JlY2VpdmVkKGhkZXYsIHBpcGUsIGluc3RydWN0aW9uLCBza2IpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQwOToyNjozMi4zMTkxMjMyNThaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDk5NzMwMDIzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRoZSBleHBlcnQ6XG5cbioqTmF2aWdhdGluZyB0aGUgTkZDIFN1YnN5c3RlbXMqKlxuXG5Pa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJIG5lZWQgdG8gY2xhcmlmeSBzb21ldGhpbmcgaW4gbXkgaGVhZC4gSSBpbml0aWFsbHkganVtcGVkIHRvIHRoZSBjb25jbHVzaW9uIHRoYXQgYE5GQ19IQ0lgIGFuZCBgTkZDX05DSWAgd2VyZSB0aGUgc2FtZSB0aGluZywgYnV0IGl0IGp1c3QgaGl0IG1lIOKAkyB0aGV5J3JlIGRpc3RpbmN0IHN1YnN5c3RlbXMuIFRoZSBwYXRjaCBJJ20gZXhhbWluaW5nIGlzIHNwZWNpZmljYWxseSB0b3VjaGluZyBgbmV0L25mYy9uY2kvaGNpLmNgLCBhbmQgdGhhdCBsaXZlcyBmaXJtbHkgd2l0aGluIHRoZSBgTkZDX05DSWAgcmVhbG0uIFRvIGNvbmZpcm0gdGhpcyBpc24ndCBqdXN0IGEgbWVudGFsIG1vZGVsIEkndmUgbWFkZSB1cCwgbGV0IG1lIGRvdWJsZS1jaGVjayB0aGUgYG5ldC9uZmMvbmNpL01ha2VmaWxlYCBhbmQgZW5zdXJlIG15IGFzc3VtcHRpb25zIGFyZSBzb3VuZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzE3MDYsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQwOToyNjozNy4zMTY0MjY1NzNaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk0NzA2OTgxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImhjaVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmZjL25jaS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25mYy9uY2kvTWFrZWZpbGU9Nj1vYmotJChDT05GSUdfTkZDX05DSSkgKz0gbmNpLm9cXG5uZXQvbmZjL25jaS9NYWtlZmlsZS03LVxcbm5ldC9uZmMvbmNpL01ha2VmaWxlOjg6bmNpLW9ianMgOj0gY29yZS5vIGRhdGEubyBsaWIubyBudGYubyByc3AubyBoY2kub1xcbm5ldC9uZmMvbmNpL01ha2VmaWxlLTktXFxuLS1cXG5uZXQvbmZjL25jaS9jb3JlLmMtMTEtICogIEFja25vd2xlZGdlbWVudHM6XFxubmV0L25mYy9uY2kvY29yZS5jOjEyOiAqICBUaGlzIGZpbGUgaXMgYmFzZWQgb24gaGNpX2NvcmUuYywgd2hpY2ggd2FzIHdyaXR0ZW5cXG5uZXQvbmZjL25jaS9jb3JlLmMtMTMtICogIGJ5IE1heGltIEtyYXNueWFuc2t5Llxcbi0tXFxubmV0L25mYy9uY2kvY29yZS5jPTEyMDk9c3RydWN0IG5jaV9kZXYgKm5jaV9hbGxvY2F0ZV9kZXZpY2UoY29uc3Qgc3RydWN0IG5jaV9vcHMgKm9wcyxcXG4tLVxcbm5ldC9uZmMvbmNpL2NvcmUuYy0xMjQ1LVxcbm5ldC9uZmMvbmNpL2NvcmUuYzoxMjQ2OlxcdG5kZXYtXFx1MDAzZWhjaV9kZXYgPSBuY2lfaGNpX2FsbG9jYXRlKG5kZXYpO1xcbm5ldC9uZmMvbmNpL2NvcmUuYzoxMjQ3OlxcdGlmICghbmRldi1cXHUwMDNlaGNpX2RldilcXG5uZXQvbmZjL25jaS9jb3JlLmMtMTI0OC1cXHRcXHRnb3RvIGZyZWVfbmZjO1xcbi0tXFxubmV0L25mYy9uY2kvY29yZS5jPTEyNjc9dm9pZCBuY2lfZnJlZV9kZXZpY2Uoc3RydWN0IG5jaV9kZXYgKm5kZXYpXFxuLS1cXG5uZXQvbmZjL25jaS9jb3JlLmMtMTI2OS1cXHRuZmNfZnJlZV9kZXZpY2UobmRldi1cXHUwMDNlbmZjX2Rldik7XFxubmV0L25mYy9uY2kvY29yZS5jOjEyNzA6XFx0bmNpX2hjaV9kZWFsbG9jYXRlKG5kZXYpO1xcbm5ldC9uZmMvbmNpL2NvcmUuYy0xMjcxLVxcbi0tXFxubmV0L25mYy9uY2kvY29yZS5jPTEzNTI9dm9pZCBuY2lfdW5yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IG5jaV9kZXYgKm5kZXYpXFxuLS1cXG5uZXQvbmZjL25jaS9jb3JlLmMtMTM3NC1cXHRcXHRcXHRuZGV2LVxcdTAwM2VyZl9jb25uX2luZm8gPSBOVUxMO1xcbm5ldC9uZmMvbmNpL2NvcmUuYzoxMzc1OlxcdFxcdGlmIChjb25uX2luZm8gPT0gbmRldi1cXHUwMDNlaGNpX2Rldi1cXHUwMDNlY29ubl9pbmZvKVxcbm5ldC9uZmMvbmNpL2NvcmUuYzoxMzc2OlxcdFxcdFxcdG5kZXYtXFx1MDAzZWhjaV9kZXYtXFx1MDAzZWNvbm5faW5mbyA9IE5VTEw7XFxubmV0L25mYy9uY2kvY29yZS5jLTEzNzctXFx0XFx0LyogY29ubl9pbmZvIGlzIGFsbG9jYXRlZCB3aXRoIGRldm1fa3phbGxvYyAqL1xcbi0tXFxubmV0L25mYy9uY2kvaGNpLmM9MTk9c3RydWN0IG5jaV9kYXRhIHtcXG4tLVxcbm5ldC9uZmMvbmNpL2hjaS5jLTI2LVxcbm5ldC9uZmMvbmNpL2hjaS5jOjI3OnN0cnVjdCBuY2lfaGNpX2NyZWF0ZV9waXBlX3BhcmFtcyB7XFxubmV0L25mYy9uY2kvaGNpLmMtMjgtXFx0dTggc3JjX2dhdGU7XFxuLS1cXG5uZXQvbmZjL25jaS9oY2kuYy0zMi1cXG5uZXQvbmZjL25jaS9oY2kuYzozMzpzdHJ1Y3QgbmNpX2hjaV9jcmVhdGVfcGlwZV9yZXNwIHtcXG5uZXQvbmZjL25jaS9oY2kuYy0zNC1cXHR1OCBzcmNfaG9zdDtcXG4tLVxcbm5ldC9uZmMvbmNpL2hjaS5jLTQwLVxcbm5ldC9uZmMvbmNpL2hjaS5jOjQxOnN0cnVjdCBuY2lfaGNpX2RlbGV0ZV9waXBlX25vdGkge1xcbm5ldC9uZmMvbmNpL2hjaS5jLTQyLVxcdHU4IHBpcGU7XFxuLS1cXG5uZXQvbmZjL25jaS9oY2kuYy00NC1cXG5uZXQvbmZjL25jaS9oY2kuYzo0NTpzdHJ1Y3QgbmNpX2hjaV9hbGxfcGlwZV9jbGVhcmVkX25vdGkge1xcbm5ldC9uZmMvbmNpL2hjaS5jLTQ2LVxcdHU4IGhvc3Q7XFxuLS1cXG5uZXQvbmZjL25jaS9oY2kuYz01ND1zdHJ1Y3QgbmNpX2hjcF9wYWNrZXQge1xcbi0tXFxubmV0L25mYy9uY2kvaGNpLmMtOTUtXFxubmV0L25mYy9uY2kvaGNpLmM6OTY6c3RhdGljIGludCBuY2lfaGNpX3Jlc3VsdF90b19lcnJubyh1OCByZXN1bHQpXFxubmV0L25mYy9uY2kvaGNpLmMtOTcte1xcbi0tXFxubmV0L25mYy9uY2kvaGNpLmMtMTEwLS8qIEhDSSBjb3JlICovXFxubmV0L25mYy9uY2kvaGNpLmM6MTExOnN0YXRpYyB2b2lkIG5jaV9oY2lfcmVzZXRfcGlwZXMoc3RydWN0IG5jaV9oY2lfZGV2ICpoZGV2KVxcbm5ldC9uZmMvbmNpL2hjaS5jLTExMi17XFxuLS1cXG5uZXQvbmZjL25jaS9oY2kuYy0xMjEtXFxubmV0L25mYy9uY2kvaGNpLmM6MTIyOnN0YXRpYyB2b2lkIG5jaV9oY2lfcmVzZXRfcGlwZXNfcGVyX2hvc3Qoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHU4IGhvc3QpXFxubmV0L25mYy9uY2kvaGNpLmMtMTIzLXtcXG4tLVxcbm5ldC9uZmMvbmNpL2hjaS5jLTEyNi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgTkNJX0hDSV9NQVhfUElQRVM7IGkrKykge1xcbm5ldC9uZmMvbmNpL2hjaS5jOjEyNzpcXHRcXHRpZiAobmRldi1cXHUwMDNlaGNpX2Rldi1cXHUwMDNlcGlwZXNbaV0uaG9zdCA9PSBob3N0KSB7XFxubmV0L25mYy9uY2kvaGNpLmM6MTI4OlxcdFxcdFxcdG5kZXYtXFx1MDAzZWhjaV9kZXYtXFx1MDAzZXBpcGVzW2ldLmdhdGUgPSBOQ0lfSENJX0lOVkFMSURfR0FURTtcXG5uZXQvbmZjL25jaS9oY2kuYzoxMjk6XFx0XFx0XFx0bmRldi1cXHUwMDNlaGNpX2Rldi1cXHUwMDNlcGlwZXNbaV0uaG9zdCA9IE5DSV9IQ0lfSU5WQUxJRF9IT1NUO1xcbm5ldC9uZmMvbmNpL2hjaS5jLTEzMC1cXHRcXHR9XFxuLS1cXG5uZXQvbmZjL25jaS9oY2kuYy0xNDEtICovXFxubmV0L25mYy9uY2kvaGNpLmM6MTQyOnN0YXRpYyBpbnQgbmNpX2hjaV9zZW5kX2RhdGEoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHU4IHBpcGUsXFxubmV0L25mYy9uY2kvaGNpLmMtMTQzLVxcdFxcdFxcdCAgICAgY29uc3QgdTggZGF0YV90eXBlLCBjb25zdCB1OCAqZGF0YSxcXG4tLVxcbm5ldC9uZmMvbmNpL2hjaS5jLTE1My1cXHRzcGluX2xvY2tfYmgoXFx1MDAyNm5kZXYtXFx1MDAzZWNvbm5faW5mb19sb2NrKTtcXG5uZXQvbmZjL25jaS9oY2kuYzoxNTQ6XFx0Y29ubl9pbmZvID0gbmRldi1cXHUwMDNlaGNpX2Rldi1cXHUwMDNlY29ubl9pbmZvO1xcbm5ldC9uZmMvbmNpL2hjaS5jLTE1NS1cXHRpZiAoIWNvbm5faW5mbykge1xcbi0tXFxubmV0L25mYy9uY2kvaGNpLmMtMjA0LVxcbm5ldC9uZmMvbmNpL2hjaS5jOjIwNTpzdGF0aWMgdm9pZCBuY2lfaGNpX3NlbmRfZGF0YV9yZXEoc3RydWN0IG5jaV9kZXYgKm5kZXYsIGNvbnN0IHZvaWQgKm9wdClcXG5uZXQvbmZjL25jaS9oY2kuYy0yMDYte1xcbi0tXFxubmV0L25mYy9uY2kvaGNpLmMtMjA4LVxcbm5ldC9uZmMvbmNpL2hjaS5jOjIwOTpcXHRuY2lfaGNpX3NlbmRfZGF0YShuZGV2LCBkYXRhLVxcdTAwM2VwaXBlLCBkYXRhLVxcdTAwM2VjbWQsXFxubmV0L25mYy9uY2kvaGNpLmMtMjEwLVxcdFxcdFxcdCAgZGF0YS1cXHUwMDNlZGF0YSwgZGF0YS1cXHUwMDNlZGF0YV9sZW4pO1xcbi0tXFxubmV0L25mYy9uY2kvaGNpLmMtMjEyLVxcbm5ldC9uZmMvbmNpL2hjaS5jOjIxMzppbnQgbmNpX2hjaV9zZW5kX2V2ZW50KHN0cnVjdCBuY2lfZGV2ICpuZGV2LCB1OCBnYXRlLCB1OCBldmVudCxcXG5uZXQvbmZjL25jaS9oY2kuYy0yMTQtXFx0XFx0ICAgICAgIGNvbnN0IHU4ICpwYXJhbSwgc2l6ZV90IHBhcmFtX2xlbilcXG5uZXQvbmZjL25jaS9oY2kuYy0yMTUte1xcbm5ldC9uZmMvbmNpL2hjaS5jOjIxNjpcXHR1OCBwaXBlID0gbmRldi1cXHUwMDNlaGNpX2Rldi1cXHUwMDNlZ2F0ZTJwaXBlW2dhdGVdO1xcbm5ldC9uZmMvbmNpL2hjaS5jLTIxNy1cXG4tLVxcbm5ldC9uZmMvbmNpL2hjaS5jLTIyMC1cXG5uZXQvbmZjL25jaS9oY2kuYzoyMjE6XFx0cmV0dXJuIG5jaV9oY2lfc2VuZF9kYXRhKG5kZXYsIHBpcGUsXFxubmV0L25mYy9uY2kvaGNpLmMtMjIyLVxcdFxcdFxcdE5DSV9IQ1BfSEVBREVSKE5DSV9IQ0lfSENQX0VWRU5ULCBldmVudCksXFxuLS1cXG5uZXQvbmZjL25jaS9oY2kuYy0yMjQtfVxcbm5ldC9uZmMvbmNpL2hjaS5jOjIyNTpFWFBPUlRfU1lNQk9MKG5jaV9oY2lfc2VuZF9ldmVudCk7XFxubmV0L25mYy9uY2kvaGNpLmMtMjI2LVxcbm5ldC9uZmMvbmNpL2hjaS5jOjIyNzppbnQgbmNpX2hjaV9zZW5kX2NtZChzdHJ1Y3QgbmNpX2RldiAqbmRldiwgdTggZ2F0ZSwgdTggY21kLFxcbm5ldC9uZmMvbmNpL2hjaS5jLTIyOC1cXHRcXHQgICAgIGNvbnN0IHU4ICpwYXJhbSwgc2l6ZV90IHBhcmFtX2xlbixcXG4tLVxcbm5ldC9uZmMvbmNpL2hjaS5jLTIzNS1cXHRpbnQgcjtcXG5uZXQvbmZjL25jaS9oY2kuYzoyMzY6XFx0dTggcGlwZSA9IG5kZXYtXFx1MDAzZWhjaV9kZXYtXFx1MDAzZWdhdGUycGlwZVtnYXRlXTtcXG5uZXQvbmZjL25jaS9oY2kuYy0yMzctXFxuLS1cXG5uZXQvbmZjL25jaS9oY2kuYy0yNDEtXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZuZGV2LVxcdTAwM2Vjb25uX2luZm9fbG9jayk7XFxubmV0L25mYy9uY2kvaGNpLmM6MjQyOlxcdGNvbm5faW5mbyA9IG5kZXYtXFx1MDAzZWhjaV9kZXYtXFx1MDAzZWNvbm5faW5mbztcXG5uZXQvbmZjL25jaS9oY2kuYy0yNDMtXFx0aWYgKCFjb25uX2luZm8pIHtcXG4tLVxcbm5ldC9uZmMvbmNpL2hjaS5jLTI1NC1cXG5uZXQvbmZjL25jaS9oY2kuYzoyNTU6XFx0ciA9IG5jaV9yZXF1ZXN0KG5kZXYsIG5jaV9oY2lfc2VuZF9kYXRhX3JlcSwgXFx1MDAyNmRhdGEsXFxubmV0L25mYy9uY2kvaGNpLmMtMjU2LVxcdFxcdFxcdG1zZWNzX3RvX2ppZmZpZXMoTkNJX0RBVEFfVElNRU9VVCkpO1xcbi0tXFxubmV0L25mYy9uY2kvaGNpLmMtMjU4LVxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2bmRldi1cXHUwMDNlY29ubl9pbmZvX2xvY2spO1xcbm5ldC9uZmMvbmNpL2hjaS5jOjI1OTpcXHRcXHRjb25uX2luZm8gPSBuZGV2LVxcdTAwM2VoY2lfZGV2LVxcdTAwM2Vjb25uX2luZm87XFxubmV0L25mYy9uY2kvaGNpLmMtMjYwLVxcdFxcdHJ4X3NrYiA9IGNvbm5faW5mbyA/IGNvbm5faW5mby1cXHUwMDNlcnhfc2tiIDogTlVMTDtcXG4tLVxcbm5ldC9uZmMvbmNpL2hjaS5jLTI2Ni1cXHRcXHRtZXNzYWdlID0gKHN0cnVjdCBuY2lfaGNwX21lc3NhZ2UgKilyeF9za2ItXFx1MDAzZWRhdGE7XFxubmV0L25mYy9uY2kvaGNpLmM6MjY3OlxcdFxcdHIgPSBuY2lfaGNpX3Jlc3VsdF90b19lcnJubyhcXG5uZXQvbmZjL25jaS9oY2kuYy0yNjgtXFx0XFx0XFx0TkNJX0hDUF9NU0dfR0VUX0NNRChtZXNzYWdlLVxcdTAwM2VoZWFkZXIpKTtcXG4tLVxcbm5ldC9uZmMvbmNpL2hjaS5jLTI3Ny19XFxubmV0L25mYy9uY2kvaGNpLmM6Mjc4OkVYUE9SVF9TWU1CT0wobmNpX2hjaV9zZW5kX2NtZCk7XFxubmV0L25mYy9uY2kvaGNpLmMtMjc5LVxcbm5ldC9uZmMvbmNpL2hjaS5jOjI4MDppbnQgbmNpX2hjaV9jbGVhcl9hbGxfcGlwZXMoc3RydWN0IG5jaV9kZXYgKm5kZXYpXFxubmV0L25mYy9uY2kvaGNpLmMtMjgxLXtcXG4tLVxcbm5ldC9uZmMvbmNpL2hjaS5jLTI4My1cXG5uZXQvbmZjL25jaS9oY2kuYzoyODQ6XFx0ciA9IG5jaV9oY2lfc2VuZF9jbWQobmRldiwgTkNJX0hDSV9BRE1JTl9HQVRFLFxcbm5ldC9uZmMvbmNpL2hjaS5jLTI4NS1cXHRcXHRcXHQgICAgIE5DSV9IQ0lfQURNX0NMRUFSX0FMTF9QSVBFLCBOVUxMLCAwLCBOVUxMKTtcXG4tLVxcbm5ldC9uZmMvbmNpL2hjaS5jLTI4OC1cXG5uZXQvbmZjL25jaS9oY2kuYzoyODk6XFx0bmNpX2hjaV9yZXNldF9waXBlcyhuZGV2LVxcdTAwM2VoY2lfZGV2KTtcXG5uZXQvbmZjL25jaS9oY2kuYy0yOTAtXFx0cmV0dXJuIHI7XFxubmV0L25mYy9uY2kvaGNpLmMtMjkxLX1cXG5uZXQvbmZjL25jaS9oY2kuYzoyOTI6RVhQT1JUX1NZTUJPTChuY2lfaGNpX2NsZWFyX2FsbF9waXBlcyk7XFxubmV0L25mYy9uY2kvaGNpLmMtMjkzLVxcbm5ldC9uZmMvbmNpL2hjaS5jOjI5NDpzdGF0aWMgdm9pZCBuY2lfaGNpX2V2ZW50X3JlY2VpdmVkKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCB1OCBwaXBlLFxcbm5ldC9uZmMvbmNpL2hjaS5jLTI5NS1cXHRcXHRcXHRcXHQgICB1OCBldmVudCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvbmZjL25jaS9oY2kuYy0yOTYte1xcbm5ldC9uZmMvbmNpL2hjaS5jOjI5NzpcXHRpZiAobmRldi1cXHUwMDNlb3BzLVxcdTAwM2VoY2lfZXZlbnRfcmVjZWl2ZWQpXFxubmV0L25mYy9uY2kvaGNpLmM6Mjk4OlxcdFxcdG5kZXYtXFx1MDAzZW9wcy1cXHUwMDNlaGNpX2V2ZW50X3JlY2VpdmVkKG5kZXYsIHBpcGUsIGV2ZW50LCBza2IpO1xcbm5ldC9uZmMvbmNpL2hjaS5jLTI5OS19XFxubmV0L25mYy9uY2kvaGNpLmMtMzAwLVxcbm5ldC9uZmMvbmNpL2hjaS5jOjMwMTpzdGF0aWMgdm9pZCBuY2lfaGNpX2NtZF9yZWNlaXZlZChzdHJ1Y3QgbmNpX2RldiAqbmRldiwgdTggcGlwZSxcXG5uZXQvbmZjL25jaS9oY2kuYy0zMDItXFx0XFx0XFx0XFx0IHU4IGNtZCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvbmZjL25jaS9oY2kuYy0zMDMte1xcbm5ldC9uZmMvbmNpL2hjaS5jOjMwNDpcXHR1OCBnYXRlID0gbmRldi1cXHUwMDNlaGNpX2Rldi1cXHUwMDNlcGlwZXNbcGlwZV0uZ2F0ZTtcXG5uZXQvbmZjL25jaS9oY2kuYy0zMDUtXFx0dTggc3RhdHVzID0gTkNJX0hDSV9BTllfT0sgfCB+TkNJX0hDSV9GUkFHTUVOVDtcXG5uZXQvbmZjL25jaS9oY2kuYy0zMDYtXFx0dTggZGVzdF9nYXRlLCBuZXdfcGlwZTtcXG5uZXQvbmZjL25jaS9oY2kuYzozMDc6XFx0c3RydWN0IG5jaV9oY2lfY3JlYXRlX3BpcGVfcmVzcCAqY3JlYXRlX2luZm87XFxubmV0L25mYy9uY2kvaGNpLmM6MzA4OlxcdHN0cnVjdCBuY2lfaGNpX2RlbGV0ZV9waXBlX25vdGkgKmRlbGV0ZV9pbmZvO1xcbm5ldC9uZmMvbmNpL2hjaS5jOjMwOTpcXHRzdHJ1Y3QgbmNpX2hjaV9hbGxfcGlwZV9jbGVhcmVkX25vdGkgKmNsZWFyZWRfaW5mbztcXG5uZXQvbmZjL25jaS9oY2kuYy0zMTAtXFxuLS1cXG5uZXQvbmZjL25jaS9oY2kuYy0zMTgtXFx0XFx0fVxcbm5ldC9uZmMvbmNpL2hjaS5jOjMxOTpcXHRcXHRjcmVhdGVfaW5mbyA9IChzdHJ1Y3QgbmNpX2hjaV9jcmVhdGVfcGlwZV9yZXNwICopc2tiLVxcdTAwM2VkYXRhO1xcbm5ldC9uZmMvbmNpL2hjaS5jLTMyMC1cXHRcXHRkZXN0X2dhdGUgPSBjcmVhdGVfaW5mby1cXHUwMDNlZGVzdF9nYXRlO1xcbi0tXFxubmV0L25mYy9uY2kvaGNpLmMtMzMxLVxcdFxcdCAqL1xcbm5ldC9uZmMvbmNpL2hjaS5jOjMzMjpcXHRcXHRuZGV2LVxcdTAwM2VoY2lfZGV2LVxcdTAwM2VnYXRlMnBpcGVbZGVzdF9nYXRlXSA9IG5ld19waXBlO1xcbm5ldC9uZmMvbmNpL2hjaS5jOjMzMzpcXHRcXHRuZGV2LVxcdTAwM2VoY2lfZGV2LVxcdTAwM2VwaXBlc1tuZXdfcGlwZV0uZ2F0ZSA9IGRlc3RfZ2F0ZTtcXG5uZXQvbmZjL25jaS9oY2kuYzozMzQ6XFx0XFx0bmRldi1cXHUwMDNlaGNpX2Rldi1cXHUwMDNlcGlwZXNbbmV3X3BpcGVdLmhvc3QgPVxcbm5ldC9uZmMvbmNpL2hjaS5jLTMzNS1cXHRcXHRcXHRcXHRcXHRcXHRjcmVhdGVfaW5mby1cXHUwMDNlc3JjX2hvc3Q7XFxuLS1cXG5uZXQvbmZjL25jaS9oY2kuYy0zNDgtXFx0XFx0fVxcbm5ldC9uZmMvbmNpL2hjaS5jOjM0OTpcXHRcXHRkZWxldGVfaW5mbyA9IChzdHJ1Y3QgbmNpX2hjaV9kZWxldGVfcGlwZV9ub3RpICopc2tiLVxcdTAwM2VkYXRhO1xcbm5ldC9uZmMvbmNpL2hjaS5jLTM1MC1cXHRcXHRpZiAoZGVsZXRlX2luZm8tXFx1MDAzZXBpcGUgXFx1MDAzZT0gTkNJX0hDSV9NQVhfUElQRVMpIHtcXG4tLVxcbm5ldC9uZmMvbmNpL2hjaS5jLTM1NC1cXG5uZXQvbmZjL25jaS9oY2kuYzozNTU6XFx0XFx0bmRldi1cXHUwMDNlaGNpX2Rldi1cXHUwMDNlcGlwZXNbZGVsZXRlX2luZm8tXFx1MDAzZXBpcGVdLmdhdGUgPVxcbm5ldC9uZmMvbmNpL2hjaS5jLTM1Ni1cXHRcXHRcXHRcXHRcXHRcXHROQ0lfSENJX0lOVkFMSURfR0FURTtcXG5uZXQvbmZjL25jaS9oY2kuYzozNTc6XFx0XFx0bmRldi1cXHUwMDNlaGNpX2Rldi1cXHUwMDNlcGlwZXNbZGVsZXRlX2luZm8tXFx1MDAzZXBpcGVdLmhvc3QgPVxcbm5ldC9uZmMvbmNpL2hjaS5jLTM1OC1cXHRcXHRcXHRcXHRcXHRcXHROQ0lfSENJX0lOVkFMSURfSE9TVDtcXG4tLVxcbm5ldC9uZmMvbmNpL2hjaS5jLTM2Ni1cXHRcXHRjbGVhcmVkX2luZm8gPVxcbm5ldC9uZmMvbmNpL2hjaS5jOjM2NzpcXHRcXHRcXHQoc3RydWN0IG5jaV9oY2lfYWxsX3BpcGVfY2xlYXJlZF9ub3RpICopc2tiLVxcdTAwM2VkYXRhO1xcbm5ldC9uZmMvbmNpL2hjaS5jOjM2ODpcXHRcXHRuY2lfaGNpX3Jlc2V0X3BpcGVzX3Blcl9ob3N0KG5kZXYsIGNsZWFyZWRfaW5mby1cXHUwMDNlaG9zdCk7XFxubmV0L25mYy9uY2kvaGNpLmMtMzY5LVxcdFxcdGJyZWFrO1xcbi0tXFxubmV0L25mYy9uY2kvaGNpLmMtMzc0LVxcbm5ldC9uZmMvbmNpL2hjaS5jOjM3NTpcXHRpZiAobmRldi1cXHUwMDNlb3BzLVxcdTAwM2VoY2lfY21kX3JlY2VpdmVkKVxcbm5ldC9uZmMvbmNpL2hjaS5jOjM3NjpcXHRcXHRuZGV2LVxcdTAwM2VvcHMtXFx1MDAzZWhjaV9jbWRfcmVjZWl2ZWQobmRldiwgcGlwZSwgY21kLCBza2IpO1xcbm5ldC9uZmMvbmNpL2hjaS5jLTM3Ny1cXG5uZXQvbmZjL25jaS9oY2kuYy0zNzgtZXhpdDpcXG5uZXQvbmZjL25jaS9oY2kuYzozNzk6XFx0bmNpX2hjaV9zZW5kX2RhdGEobmRldiwgcGlwZSwgc3RhdHVzLCBOVUxMLCAwKTtcXG5uZXQvbmZjL25jaS9oY2kuYy0zODAtXFxuLS1cXG5uZXQvbmZjL25jaS9oY2kuYy0zODMtXFxubmV0L25mYy9uY2kvaGNpLmM6Mzg0OnN0YXRpYyB2b2lkIG5jaV9oY2lfcmVzcF9yZWNlaXZlZChzdHJ1Y3QgbmNpX2RldiAqbmRldiwgdTggcGlwZSxcXG5uZXQvbmZjL25jaS9oY2kuYy0zODUtXFx0XFx0XFx0XFx0ICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L25mYy9uY2kvaGNpLmMtMzg5LVxcdHNwaW5fbG9ja19iaChcXHUwMDI2bmRldi1cXHUwMDNlY29ubl9pbmZvX2xvY2spO1xcbm5ldC9uZmMvbmNpL2hjaS5jOjM5MDpcXHRjb25uX2luZm8gPSBuZGV2LVxcdTAwM2VoY2lfZGV2LVxcdTAwM2Vjb25uX2luZm87XFxubmV0L25mYy9uY2kvaGNpLmMtMzkxLVxcdGlmICghY29ubl9pbmZvKSB7XFxuLS1cXG5uZXQvbmZjL25jaS9oY2kuYy00MDUtICovXFxubmV0L25mYy9uY2kvaGNpLmM6NDA2OnN0YXRpYyB2b2lkIG5jaV9oY2lfaGNwX21lc3NhZ2Vfcngoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHU4IHBpcGUsXFxubmV0L25mYy9uY2kvaGNpLmMtNDA3LVxcdFxcdFxcdFxcdCAgIHU4IHR5cGUsIHU4IGluc3RydWN0aW9uLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L25mYy9uY2kvaGNpLmMtNDEwLVxcdGNhc2UgTkNJX0hDSV9IQ1BfUkVTUE9OU0U6XFxubmV0L25mYy9uY2kvaGNpLmM6NDExOlxcdFxcdG5jaV9oY2lfcmVzcF9yZWNlaXZlZChuZGV2LCBwaXBlLCBza2IpO1xcbm5ldC9uZmMvbmNpL2hjaS5jLTQxMi1cXHRcXHRicmVhaztcXG5uZXQvbmZjL25jaS9oY2kuYy00MTMtXFx0Y2FzZSBOQ0lfSENJX0hDUF9DT01NQU5EOlxcbm5ldC9uZmMvbmNpL2hjaS5jOjQxNDpcXHRcXHRuY2lfaGNpX2NtZF9yZWNlaXZlZChuZGV2LCBwaXBlLCBpbnN0cnVjdGlvbiwgc2tiKTtcXG5uZXQvbmZjL25jaS9oY2kuYy00MTUtXFx0XFx0YnJlYWs7XFxubmV0L25mYy9uY2kvaGNpLmMtNDE2LVxcdGNhc2UgTkNJX0hDSV9IQ1BfRVZFTlQ6XFxubmV0L25mYy9uY2kvaGNpLmM6NDE3OlxcdFxcdG5jaV9oY2lfZXZlbnRfcmVjZWl2ZWQobmRldiwgcGlwZSwgaW5zdHJ1Y3Rpb24sIHNrYik7XFxubmV0L25mYy9uY2kvaGNpLmMtNDE4LVxcdFxcdGJyZWFrO1xcbi0tXFxubmV0L25mYy9uY2kvaGNpLmMtNDI4LVxcbm5ldC9uZmMvbmNpL2hjaS5jOjQyOTpzdGF0aWMgdm9pZCBuY2lfaGNpX21zZ19yeF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG5uZXQvbmZjL25jaS9oY2kuYy00MzAte1xcbm5ldC9uZmMvbmNpL2hjaS5jOjQzMTpcXHRzdHJ1Y3QgbmNpX2hjaV9kZXYgKmhkZXYgPVxcbm5ldC9uZmMvbmNpL2hjaS5jOjQzMjpcXHRcXHRjb250YWluZXJfb2Yod29yaywgc3RydWN0IG5jaV9oY2lfZGV2LCBtc2dfcnhfd29yayk7XFxubmV0L25mYy9uY2kvaGNpLmMtNDMzLVxcdHN0cnVjdCBza19idWZmICpza2I7XFxuLS1cXG5uZXQvbmZjL25jaS9oY2kuYy00NDUtXFxubmV0L25mYy9uY2kvaGNpLmM6NDQ2OlxcdFxcdG5jaV9oY2lfaGNwX21lc3NhZ2VfcngoaGRldi1cXHUwMDNlbmRldiwgcGlwZSxcXG5uZXQvbmZjL25jaS9oY2kuYy00NDctXFx0XFx0XFx0XFx0ICAgICAgIHR5cGUsIGluc3RydWN0aW9uLCBza2IpO1xcbi0tXFxubmV0L25mYy9uY2kvaGNpLmMtNDUwLVxcbm5ldC9uZmMvbmNpL2hjaS5jOjQ1MTp2b2lkIG5jaV9oY2lfZGF0YV9yZWNlaXZlZF9jYih2b2lkICpjb250ZXh0LFxcbm5ldC9uZmMvbmNpL2hjaS5jLTQ1Mi1cXHRcXHRcXHQgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgZXJyKVxcbi0tXFxubmV0L25mYy9uY2kvaGNpLmMtNDcyLVxcdGlmICgocGFja2V0LVxcdTAwM2VoZWFkZXIgXFx1MDAyNiB+TkNJX0hDSV9GUkFHTUVOVCkgPT0gMCkge1xcbm5ldC9uZmMvbmNpL2hjaS5jOjQ3MzpcXHRcXHRza2JfcXVldWVfdGFpbChcXHUwMDI2bmRldi1cXHUwMDNlaGNpX2Rldi1cXHUwMDNlcnhfaGNwX2ZyYWdzLCBza2IpO1xcbm5ldC9uZmMvbmNpL2hjaS5jLTQ3NC1cXHRcXHRyZXR1cm47XFxuLS1cXG5uZXQvbmZjL25jaS9oY2kuYy00NzctXFx0LyogaXQncyB0aGUgbGFzdCBmcmFnbWVudC4gRG9lcyBpdCBuZWVkIHJlLWFnZ3JlZ2F0aW9uPyAqL1xcbm5ldC9uZmMvbmNpL2hjaS5jOjQ3ODpcXHRpZiAoc2tiX3F1ZXVlX2xlbihcXHUwMDI2bmRldi1cXHUwMDNlaGNpX2Rldi1cXHUwMDNlcnhfaGNwX2ZyYWdzKSkge1xcbm5ldC9uZmMvbmNpL2hjaS5jLTQ3OS1cXHRcXHRwaXBlID0gTkNJX0hDUF9NU0dfR0VUX1BJUEUocGFja2V0LVxcdTAwM2VoZWFkZXIpO1xcbm5ldC9uZmMvbmNpL2hjaS5jOjQ4MDpcXHRcXHRza2JfcXVldWVfdGFpbChcXHUwMDI2bmRldi1cXHUwMDNlaGNpX2Rldi1cXHUwMDNlcnhfaGNwX2ZyYWdzLCBza2IpO1xcbm5ldC9uZmMvbmNpL2hjaS5jLTQ4MS1cXG5uZXQvbmZjL25jaS9oY2kuYy00ODItXFx0XFx0bXNnX2xlbiA9IDA7XFxubmV0L25mYy9uY2kvaGNpLmM6NDgzOlxcdFxcdHNrYl9xdWV1ZV93YWxrKFxcdTAwMjZuZGV2LVxcdTAwM2VoY2lfZGV2LVxcdTAwM2VyeF9oY3BfZnJhZ3MsIGZyYWdfc2tiKSB7XFxubmV0L25mYy9uY2kvaGNpLmMtNDg0LVxcdFxcdFxcdG1zZ19sZW4gKz0gKGZyYWdfc2tiLVxcdTAwM2VsZW4gLVxcbi0tXFxubmV0L25mYy9uY2kvaGNpLmMtNDk2LVxcbm5ldC9uZmMvbmNpL2hjaS5jOjQ5NzpcXHRcXHRza2JfcXVldWVfd2FsayhcXHUwMDI2bmRldi1cXHUwMDNlaGNpX2Rldi1cXHUwMDNlcnhfaGNwX2ZyYWdzLCBmcmFnX3NrYikge1xcbm5ldC9uZmMvbmNpL2hjaS5jLTQ5OC1cXHRcXHRcXHRtc2dfbGVuID0gZnJhZ19za2ItXFx1MDAzZWxlbiAtIE5DSV9IQ0lfSENQX1BBQ0tFVF9IRUFERVJfTEVOO1xcbi0tXFxubmV0L25mYy9uY2kvaGNpLmMtNTAzLVxcbm5ldC9uZmMvbmNpL2hjaS5jOjUwNDpcXHRcXHRza2JfcXVldWVfcHVyZ2UoXFx1MDAyNm5kZXYtXFx1MDAzZWhjaV9kZXYtXFx1MDAzZXJ4X2hjcF9mcmFncyk7XFxubmV0L25mYy9uY2kvaGNpLmMtNTA1LVxcdH0gZWxzZSB7XFxuLS1cXG5uZXQvbmZjL25jaS9oY2kuYy01MjMtXFx0XFx0c2tiX3B1bGwoaGNwX3NrYiwgTkNJX0hDSV9IQ1BfUEFDS0VUX0hFQURFUl9MRU4pO1xcbm5ldC9uZmMvbmNpL2hjaS5jOjUyNDpcXHRcXHRuY2lfaGNpX2hjcF9tZXNzYWdlX3J4KG5kZXYsIHBpcGUsIHR5cGUsXFxubmV0L25mYy9uY2kvaGNpLmMtNTI1LVxcdFxcdFxcdFxcdCAgICAgICBOQ0lfU1RBVFVTX09LLCBoY3Bfc2tiKTtcXG5uZXQvbmZjL25jaS9oY2kuYy01MjYtXFx0fSBlbHNlIHtcXG5uZXQvbmZjL25jaS9oY2kuYzo1Mjc6XFx0XFx0c2tiX3F1ZXVlX3RhaWwoXFx1MDAyNm5kZXYtXFx1MDAzZWhjaV9kZXYtXFx1MDAzZW1zZ19yeF9xdWV1ZSwgaGNwX3NrYik7XFxubmV0L25mYy9uY2kvaGNpLmM6NTI4OlxcdFxcdHNjaGVkdWxlX3dvcmsoXFx1MDAyNm5kZXYtXFx1MDAzZWhjaV9kZXYtXFx1MDAzZW1zZ19yeF93b3JrKTtcXG5uZXQvbmZjL25jaS9oY2kuYy01MjktXFx0fVxcbi0tXFxubmV0L25mYy9uY2kvaGNpLmMtNTMxLVxcbm5ldC9uZmMvbmNpL2hjaS5jOjUzMjppbnQgbmNpX2hjaV9vcGVuX3BpcGUoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHU4IHBpcGUpXFxubmV0L25mYy9uY2kvaGNpLmMtNTMzLXtcXG4tLVxcbm5ldC9uZmMvbmNpL2hjaS5jLTUzNy1cXHRzcGluX2xvY2tfYmgoXFx1MDAyNm5kZXYtXFx1MDAzZWNvbm5faW5mb19sb2NrKTtcXG5uZXQvbmZjL25jaS9oY2kuYzo1Mzg6XFx0Y29ubl9pbmZvID0gbmRldi1cXHUwMDNlaGNpX2Rldi1cXHUwMDNlY29ubl9pbmZvO1xcbm5ldC9uZmMvbmNpL2hjaS5jLTUzOS1cXHRpZiAoIWNvbm5faW5mbykge1xcbi0tXFxubmV0L25mYy9uY2kvaGNpLmMtNTUxLVxcbm5ldC9uZmMvbmNpL2hjaS5jOjU1MjpcXHRyZXR1cm4gbmNpX3JlcXVlc3QobmRldiwgbmNpX2hjaV9zZW5kX2RhdGFfcmVxLCBcXHUwMDI2ZGF0YSxcXG5uZXQvbmZjL25jaS9oY2kuYy01NTMtXFx0XFx0XFx0ICAgbXNlY3NfdG9famlmZmllcyhOQ0lfREFUQV9USU1FT1VUKSk7XFxubmV0L25mYy9uY2kvaGNpLmMtNTU0LX1cXG5uZXQvbmZjL25jaS9oY2kuYzo1NTU6RVhQT1JUX1NZTUJPTChuY2lfaGNpX29wZW5fcGlwZSk7XFxubmV0L25mYy9uY2kvaGNpLmMtNTU2LVxcbm5ldC9uZmMvbmNpL2hjaS5jOjU1NzpzdGF0aWMgdTggbmNpX2hjaV9jcmVhdGVfcGlwZShzdHJ1Y3QgbmNpX2RldiAqbmRldiwgdTggZGVzdF9ob3N0LFxcbm5ldC9uZmMvbmNpL2hjaS5jLTU1OC1cXHRcXHRcXHQgICAgICB1OCBkZXN0X2dhdGUsIGludCAqcmVzdWx0KVxcbi0tXFxubmV0L25mYy9uY2kvaGNpLmMtNTYxLVxcdHN0cnVjdCBza19idWZmICpza2I7XFxubmV0L25mYy9uY2kvaGNpLmM6NTYyOlxcdHN0cnVjdCBuY2lfaGNpX2NyZWF0ZV9waXBlX3BhcmFtcyBwYXJhbXM7XFxubmV0L25mYy9uY2kvaGNpLmM6NTYzOlxcdGNvbnN0IHN0cnVjdCBuY2lfaGNpX2NyZWF0ZV9waXBlX3Jlc3AgKnJlc3A7XFxubmV0L25mYy9uY2kvaGNpLmMtNTY0LVxcbi0tXFxubmV0L25mYy9uY2kvaGNpLmMtNTcwLVxcbm5ldC9uZmMvbmNpL2hjaS5jOjU3MTpcXHQqcmVzdWx0ID0gbmNpX2hjaV9zZW5kX2NtZChuZGV2LCBOQ0lfSENJX0FETUlOX0dBVEUsXFxubmV0L25mYy9uY2kvaGNpLmMtNTcyLVxcdFxcdFxcdFxcdCAgIE5DSV9IQ0lfQURNX0NSRUFURV9QSVBFLFxcbi0tXFxubmV0L25mYy9uY2kvaGNpLmMtNTc2LVxcbm5ldC9uZmMvbmNpL2hjaS5jOjU3NzpcXHRyZXNwID0gKHN0cnVjdCBuY2lfaGNpX2NyZWF0ZV9waXBlX3Jlc3AgKilza2ItXFx1MDAzZWRhdGE7XFxubmV0L25mYy9uY2kvaGNpLmMtNTc4LVxcdHBpcGUgPSByZXNwLVxcdTAwM2VwaXBlO1xcbi0tXFxubmV0L25mYy9uY2kvaGNpLmMtNTg3LVxcbm5ldC9uZmMvbmNpL2hjaS5jOjU4ODpzdGF0aWMgaW50IG5jaV9oY2lfZGVsZXRlX3BpcGUoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHU4IHBpcGUpXFxubmV0L25mYy9uY2kvaGNpLmMtNTg5LXtcXG5uZXQvbmZjL25jaS9oY2kuYzo1OTA6XFx0cmV0dXJuIG5jaV9oY2lfc2VuZF9jbWQobmRldiwgTkNJX0hDSV9BRE1JTl9HQVRFLFxcbm5ldC9uZmMvbmNpL2hjaS5jLTU5MS1cXHRcXHRcXHRcXHROQ0lfSENJX0FETV9ERUxFVEVfUElQRSwgXFx1MDAyNnBpcGUsIDEsIE5VTEwpO1xcbi0tXFxubmV0L25mYy9uY2kvaGNpLmMtNTkzLVxcbm5ldC9uZmMvbmNpL2hjaS5jOjU5NDppbnQgbmNpX2hjaV9zZXRfcGFyYW0oc3RydWN0IG5jaV9kZXYgKm5kZXYsIHU4IGdhdGUsIHU4IGlkeCxcXG5uZXQvbmZjL25jaS9oY2kuYy01OTUtXFx0XFx0ICAgICAgY29uc3QgdTggKnBhcmFtLCBzaXplX3QgcGFyYW1fbGVuKVxcbi0tXFxubmV0L25mYy9uY2kvaGNpLmMtNjAyLVxcdHU4ICp0bXA7XFxubmV0L25mYy9uY2kvaGNpLmM6NjAzOlxcdHU4IHBpcGUgPSBuZGV2LVxcdTAwM2VoY2lfZGV2LVxcdTAwM2VnYXRlMnBpcGVbZ2F0ZV07XFxubmV0L25mYy9uY2kvaGNpLmMtNjA0LVxcbi0tXFxubmV0L25mYy9uY2kvaGNpLmMtNjEwLVxcdHNwaW5fbG9ja19iaChcXHUwMDI2bmRldi1cXHUwMDNlY29ubl9pbmZvX2xvY2spO1xcbm5ldC9uZmMvbmNpL2hjaS5jOjYxMTpcXHRjb25uX2luZm8gPSBuZGV2LVxcdTAwM2VoY2lfZGV2LVxcdTAwM2Vjb25uX2luZm87XFxubmV0L25mYy9uY2kvaGNpLmMtNjEyLVxcdGlmICghY29ubl9pbmZvKSB7XFxuLS1cXG5uZXQvbmZjL25jaS9oY2kuYy02MzEtXFxubmV0L25mYy9uY2kvaGNpLmM6NjMyOlxcdHIgPSBuY2lfcmVxdWVzdChuZGV2LCBuY2lfaGNpX3NlbmRfZGF0YV9yZXEsIFxcdTAwMjZkYXRhLFxcbm5ldC9uZmMvbmNpL2hjaS5jLTYzMy1cXHRcXHRcXHRtc2Vjc190b19qaWZmaWVzKE5DSV9EQVRBX1RJTUVPVVQpKTtcXG4tLVxcbm5ldC9uZmMvbmNpL2hjaS5jLTYzNS1cXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNm5kZXYtXFx1MDAzZWNvbm5faW5mb19sb2NrKTtcXG5uZXQvbmZjL25jaS9oY2kuYzo2MzY6XFx0XFx0Y29ubl9pbmZvID0gbmRldi1cXHUwMDNlaGNpX2Rldi1cXHUwMDNlY29ubl9pbmZvO1xcbm5ldC9uZmMvbmNpL2hjaS5jLTYzNy1cXHRcXHRyeF9za2IgPSBjb25uX2luZm8gPyBjb25uX2luZm8tXFx1MDAzZXJ4X3NrYiA6IE5VTEw7XFxuLS1cXG5uZXQvbmZjL25jaS9oY2kuYy02NDQtXFx0XFx0bWVzc2FnZSA9IChzdHJ1Y3QgbmNpX2hjcF9tZXNzYWdlICopcnhfc2tiLVxcdTAwM2VkYXRhO1xcbm5ldC9uZmMvbmNpL2hjaS5jOjY0NTpcXHRcXHRyID0gbmNpX2hjaV9yZXN1bHRfdG9fZXJybm8oXFxubmV0L25mYy9uY2kvaGNpLmMtNjQ2LVxcdFxcdFxcdE5DSV9IQ1BfTVNHX0dFVF9DTUQobWVzc2FnZS1cXHUwMDNlaGVhZGVyKSk7XFxuLS1cXG5uZXQvbmZjL25jaS9oY2kuYy02NTMtfVxcbm5ldC9uZmMvbmNpL2hjaS5jOjY1NDpFWFBPUlRfU1lNQk9MKG5jaV9oY2lfc2V0X3BhcmFtKTtcXG5uZXQvbmZjL25jaS9oY2kuYy02NTUtXFxubmV0L25mYy9uY2kvaGNpLmM6NjU2OmludCBuY2lfaGNpX2dldF9wYXJhbShzdHJ1Y3QgbmNpX2RldiAqbmRldiwgdTggZ2F0ZSwgdTggaWR4LFxcbm5ldC9uZmMvbmNpL2hjaS5jLTY1Ny1cXHRcXHQgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqKnNrYilcXG4tLVxcbm5ldC9uZmMvbmNpL2hjaS5jLTY2My1cXHRpbnQgcjtcXG5uZXQvbmZjL25jaS9oY2kuYzo2NjQ6XFx0dTggcGlwZSA9IG5kZXYtXFx1MDAzZWhjaV9kZXYtXFx1MDAzZWdhdGUycGlwZVtnYXRlXTtcXG5uZXQvbmZjL25jaS9oY2kuYy02NjUtXFxuLS1cXG5uZXQvbmZjL25jaS9oY2kuYy02NzEtXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZuZGV2LVxcdTAwM2Vjb25uX2luZm9fbG9jayk7XFxubmV0L25mYy9uY2kvaGNpLmM6NjcyOlxcdGNvbm5faW5mbyA9IG5kZXYtXFx1MDAzZWhjaV9kZXYtXFx1MDAzZWNvbm5faW5mbztcXG5uZXQvbmZjL25jaS9oY2kuYy02NzMtXFx0aWYgKCFjb25uX2luZm8pIHtcXG4tLVxcbm5ldC9uZmMvbmNpL2hjaS5jLTY4NS1cXG5uZXQvbmZjL25jaS9oY2kuYzo2ODY6XFx0ciA9IG5jaV9yZXF1ZXN0KG5kZXYsIG5jaV9oY2lfc2VuZF9kYXRhX3JlcSwgXFx1MDAyNmRhdGEsXFxubmV0L25mYy9uY2kvaGNpLmMtNjg3LVxcdFxcdFxcdG1zZWNzX3RvX2ppZmZpZXMoTkNJX0RBVEFfVElNRU9VVCkpO1xcbi0tXFxubmV0L25mYy9uY2kvaGNpLmMtNjkwLVxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2bmRldi1cXHUwMDNlY29ubl9pbmZvX2xvY2spO1xcbm5ldC9uZmMvbmNpL2hjaS5jOjY5MTpcXHRcXHRjb25uX2luZm8gPSBuZGV2LVxcdTAwM2VoY2lfZGV2LVxcdTAwM2Vjb25uX2luZm87XFxubmV0L25mYy9uY2kvaGNpLmMtNjkyLVxcdFxcdHJ4X3NrYiA9IGNvbm5faW5mbyA/IGNvbm5faW5mby1cXHUwMDNlcnhfc2tiIDogTlVMTDtcXG4tLVxcbm5ldC9uZmMvbmNpL2hjaS5jLTY5OC1cXHRcXHRtZXNzYWdlID0gKHN0cnVjdCBuY2lfaGNwX21lc3NhZ2UgKilyeF9za2ItXFx1MDAzZWRhdGE7XFxubmV0L25mYy9uY2kvaGNpLmM6Njk5OlxcdFxcdHIgPSBuY2lfaGNpX3Jlc3VsdF90b19lcnJubyhcXG5uZXQvbmZjL25jaS9oY2kuYy03MDAtXFx0XFx0XFx0TkNJX0hDUF9NU0dfR0VUX0NNRChtZXNzYWdlLVxcdTAwM2VoZWFkZXIpKTtcXG4tLVxcbm5ldC9uZmMvbmNpL2hjaS5jLTcwOS19XFxubmV0L25mYy9uY2kvaGNpLmM6NzEwOkVYUE9SVF9TWU1CT0wobmNpX2hjaV9nZXRfcGFyYW0pO1xcbm5ldC9uZmMvbmNpL2hjaS5jLTcxMS1cXG5uZXQvbmZjL25jaS9oY2kuYzo3MTI6aW50IG5jaV9oY2lfY29ubmVjdF9nYXRlKHN0cnVjdCBuY2lfZGV2ICpuZGV2LFxcbm5ldC9uZmMvbmNpL2hjaS5jLTcxMy1cXHRcXHRcXHQgdTggZGVzdF9ob3N0LCB1OCBkZXN0X2dhdGUsIHU4IHBpcGUpXFxuLS1cXG5uZXQvbmZjL25jaS9oY2kuYy03MjAtXFxubmV0L25mYy9uY2kvaGNpLmM6NzIxOlxcdGlmIChuZGV2LVxcdTAwM2VoY2lfZGV2LVxcdTAwM2VnYXRlMnBpcGVbZGVzdF9nYXRlXSAhPSBOQ0lfSENJX0lOVkFMSURfUElQRSlcXG5uZXQvbmZjL25jaS9oY2kuYy03MjItXFx0XFx0cmV0dXJuIC1FQUREUklOVVNFO1xcbi0tXFxubmV0L25mYy9uY2kvaGNpLmMtNzM0LVxcdGRlZmF1bHQ6XFxubmV0L25mYy9uY2kvaGNpLmM6NzM1OlxcdFxcdHBpcGUgPSBuY2lfaGNpX2NyZWF0ZV9waXBlKG5kZXYsIGRlc3RfaG9zdCwgZGVzdF9nYXRlLCBcXHUwMDI2cik7XFxubmV0L25mYy9uY2kvaGNpLmMtNzM2LVxcdFxcdGlmIChwaXBlID09IE5DSV9IQ0lfSU5WQUxJRF9QSVBFKVxcbi0tXFxubmV0L25mYy9uY2kvaGNpLmMtNzQyLW9wZW5fcGlwZTpcXG5uZXQvbmZjL25jaS9oY2kuYzo3NDM6XFx0ciA9IG5jaV9oY2lfb3Blbl9waXBlKG5kZXYsIHBpcGUpO1xcbm5ldC9uZmMvbmNpL2hjaS5jLTc0NC1cXHRpZiAociBcXHUwMDNjIDApIHtcXG5uZXQvbmZjL25jaS9oY2kuYy03NDUtXFx0XFx0aWYgKHBpcGVfY3JlYXRlZCkge1xcbm5ldC9uZmMvbmNpL2hjaS5jOjc0NjpcXHRcXHRcXHRpZiAobmNpX2hjaV9kZWxldGVfcGlwZShuZGV2LCBwaXBlKSBcXHUwMDNjIDApIHtcXG5uZXQvbmZjL25jaS9oY2kuYy03NDctXFx0XFx0XFx0XFx0LyogVE9ETzogQ2Fubm90IGNsZWFuIGJ5IGRlbGV0aW5nIHBpcGUuLi5cXG4tLVxcbm5ldC9uZmMvbmNpL2hjaS5jLTc1NC1cXG5uZXQvbmZjL25jaS9oY2kuYzo3NTU6XFx0bmRldi1cXHUwMDNlaGNpX2Rldi1cXHUwMDNlcGlwZXNbcGlwZV0uZ2F0ZSA9IGRlc3RfZ2F0ZTtcXG5uZXQvbmZjL25jaS9oY2kuYzo3NTY6XFx0bmRldi1cXHUwMDNlaGNpX2Rldi1cXHUwMDNlcGlwZXNbcGlwZV0uaG9zdCA9IGRlc3RfaG9zdDtcXG5uZXQvbmZjL25jaS9oY2kuYzo3NTc6XFx0bmRldi1cXHUwMDNlaGNpX2Rldi1cXHUwMDNlZ2F0ZTJwaXBlW2Rlc3RfZ2F0ZV0gPSBwaXBlO1xcbm5ldC9uZmMvbmNpL2hjaS5jLTc1OC1cXG4tLVxcbm5ldC9uZmMvbmNpL2hjaS5jLTc2MC19XFxubmV0L25mYy9uY2kvaGNpLmM6NzYxOkVYUE9SVF9TWU1CT0wobmNpX2hjaV9jb25uZWN0X2dhdGUpO1xcbm5ldC9uZmMvbmNpL2hjaS5jLTc2Mi1cXG5uZXQvbmZjL25jaS9oY2kuYzo3NjM6c3RhdGljIGludCBuY2lfaGNpX2Rldl9jb25uZWN0X2dhdGVzKHN0cnVjdCBuY2lfZGV2ICpuZGV2LFxcbm5ldC9uZmMvbmNpL2hjaS5jLTc2NC1cXHRcXHRcXHRcXHQgICAgIHU4IGdhdGVfY291bnQsXFxubmV0L25mYy9uY2kvaGNpLmM6NzY1OlxcdFxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IG5jaV9oY2lfZ2F0ZSAqZ2F0ZXMpXFxubmV0L25mYy9uY2kvaGNpLmMtNzY2LXtcXG4tLVxcbm5ldC9uZmMvbmNpL2hjaS5jLTc2OS1cXHR3aGlsZSAoZ2F0ZV9jb3VudC0tKSB7XFxubmV0L25mYy9uY2kvaGNpLmM6NzcwOlxcdFxcdHIgPSBuY2lfaGNpX2Nvbm5lY3RfZ2F0ZShuZGV2LCBnYXRlcy1cXHUwMDNlZGVzdF9ob3N0LFxcbm5ldC9uZmMvbmNpL2hjaS5jLTc3MS1cXHRcXHRcXHRcXHRcXHQgZ2F0ZXMtXFx1MDAzZWdhdGUsIGdhdGVzLVxcdTAwM2VwaXBlKTtcXG4tLVxcbm5ldC9uZmMvbmNpL2hjaS5jLTc3OS1cXG5uZXQvbmZjL25jaS9oY2kuYzo3ODA6aW50IG5jaV9oY2lfZGV2X3Nlc3Npb25faW5pdChzdHJ1Y3QgbmNpX2RldiAqbmRldilcXG5uZXQvbmZjL25jaS9oY2kuYy03ODEte1xcbi0tXFxubmV0L25mYy9uY2kvaGNpLmMtNzg1LVxcbm5ldC9uZmMvbmNpL2hjaS5jOjc4NjpcXHRuZGV2LVxcdTAwM2VoY2lfZGV2LVxcdTAwM2Vjb3VudF9waXBlcyA9IDA7XFxubmV0L25mYy9uY2kvaGNpLmM6Nzg3OlxcdG5kZXYtXFx1MDAzZWhjaV9kZXYtXFx1MDAzZWV4cGVjdGVkX3BpcGVzID0gMDtcXG5uZXQvbmZjL25jaS9oY2kuYy03ODgtXFxubmV0L25mYy9uY2kvaGNpLmMtNzg5LVxcdHNwaW5fbG9ja19iaChcXHUwMDI2bmRldi1cXHUwMDNlY29ubl9pbmZvX2xvY2spO1xcbm5ldC9uZmMvbmNpL2hjaS5jOjc5MDpcXHRjb25uX2luZm8gPSBuZGV2LVxcdTAwM2VoY2lfZGV2LVxcdTAwM2Vjb25uX2luZm87XFxubmV0L25mYy9uY2kvaGNpLmMtNzkxLVxcdGlmICghY29ubl9pbmZvKSB7XFxuLS1cXG5uZXQvbmZjL25jaS9oY2kuYy03OTUtXFxubmV0L25mYy9uY2kvaGNpLmM6Nzk2OlxcdGNvbm5faW5mby1cXHUwMDNlZGF0YV9leGNoYW5nZV9jYiA9IG5jaV9oY2lfZGF0YV9yZWNlaXZlZF9jYjtcXG5uZXQvbmZjL25jaS9oY2kuYy03OTctXFx0Y29ubl9pbmZvLVxcdTAwM2VkYXRhX2V4Y2hhbmdlX2NiX2NvbnRleHQgPSBuZGV2O1xcbi0tXFxubmV0L25mYy9uY2kvaGNpLmMtNzk5LVxcbm5ldC9uZmMvbmNpL2hjaS5jOjgwMDpcXHRuY2lfaGNpX3Jlc2V0X3BpcGVzKG5kZXYtXFx1MDAzZWhjaV9kZXYpO1xcbm5ldC9uZmMvbmNpL2hjaS5jLTgwMS1cXG5uZXQvbmZjL25jaS9oY2kuYzo4MDI6XFx0aWYgKG5kZXYtXFx1MDAzZWhjaV9kZXYtXFx1MDAzZWluaXRfZGF0YS5nYXRlc1swXS5nYXRlICE9IE5DSV9IQ0lfQURNSU5fR0FURSlcXG5uZXQvbmZjL25jaS9oY2kuYy04MDMtXFx0XFx0cmV0dXJuIC1FUFJPVE87XFxubmV0L25mYy9uY2kvaGNpLmMtODA0LVxcbm5ldC9uZmMvbmNpL2hjaS5jOjgwNTpcXHRyID0gbmNpX2hjaV9jb25uZWN0X2dhdGUobmRldixcXG5uZXQvbmZjL25jaS9oY2kuYzo4MDY6XFx0XFx0XFx0XFx0IG5kZXYtXFx1MDAzZWhjaV9kZXYtXFx1MDAzZWluaXRfZGF0YS5nYXRlc1swXS5kZXN0X2hvc3QsXFxubmV0L25mYy9uY2kvaGNpLmM6ODA3OlxcdFxcdFxcdFxcdCBuZGV2LVxcdTAwM2VoY2lfZGV2LVxcdTAwM2Vpbml0X2RhdGEuZ2F0ZXNbMF0uZ2F0ZSxcXG5uZXQvbmZjL25jaS9oY2kuYzo4MDg6XFx0XFx0XFx0XFx0IG5kZXYtXFx1MDAzZWhjaV9kZXYtXFx1MDAzZWluaXRfZGF0YS5nYXRlc1swXS5waXBlKTtcXG5uZXQvbmZjL25jaS9oY2kuYy04MDktXFx0aWYgKHIgXFx1MDAzYyAwKVxcbi0tXFxubmV0L25mYy9uY2kvaGNpLmMtODExLVxcbm5ldC9uZmMvbmNpL2hjaS5jOjgxMjpcXHRyID0gbmNpX2hjaV9nZXRfcGFyYW0obmRldiwgTkNJX0hDSV9BRE1JTl9HQVRFLFxcbm5ldC9uZmMvbmNpL2hjaS5jLTgxMy1cXHRcXHRcXHQgICAgICBOQ0lfSENJX0FETUlOX1BBUkFNX1NFU1NJT05fSURFTlRJVFksIFxcdTAwMjZza2IpO1xcbi0tXFxubmV0L25mYy9uY2kvaGNpLmMtODE3LVxcdGlmIChza2ItXFx1MDAzZWxlbiBcXHUwMDI2XFx1MDAyNlxcbm5ldC9uZmMvbmNpL2hjaS5jOjgxODpcXHQgICAgc2tiLVxcdTAwM2VsZW4gPT0gc3RybGVuKG5kZXYtXFx1MDAzZWhjaV9kZXYtXFx1MDAzZWluaXRfZGF0YS5zZXNzaW9uX2lkKSBcXHUwMDI2XFx1MDAyNlxcbm5ldC9uZmMvbmNpL2hjaS5jOjgxOTpcXHQgICAgIW1lbWNtcChuZGV2LVxcdTAwM2VoY2lfZGV2LVxcdTAwM2Vpbml0X2RhdGEuc2Vzc2lvbl9pZCwgc2tiLVxcdTAwM2VkYXRhLCBza2ItXFx1MDAzZWxlbikgXFx1MDAyNlxcdTAwMjZcXG5uZXQvbmZjL25jaS9oY2kuYzo4MjA6XFx0ICAgIG5kZXYtXFx1MDAzZW9wcy1cXHUwMDNlaGNpX2xvYWRfc2Vzc2lvbikge1xcbm5ldC9uZmMvbmNpL2hjaS5jLTgyMS1cXHRcXHQvKiBSZXN0b3JlIGdhdGVcXHUwMDNjLVxcdTAwM2VwaXBlIHRhYmxlIGZyb20gc29tZSBwcm9wcmlldGFyeSBsb2NhdGlvbi4gKi9cXG5uZXQvbmZjL25jaS9oY2kuYzo4MjI6XFx0XFx0ciA9IG5kZXYtXFx1MDAzZW9wcy1cXHUwMDNlaGNpX2xvYWRfc2Vzc2lvbihuZGV2KTtcXG5uZXQvbmZjL25jaS9oY2kuYy04MjMtXFx0fSBlbHNlIHtcXG5uZXQvbmZjL25jaS9oY2kuYzo4MjQ6XFx0XFx0ciA9IG5jaV9oY2lfY2xlYXJfYWxsX3BpcGVzKG5kZXYpO1xcbm5ldC9uZmMvbmNpL2hjaS5jLTgyNS1cXHRcXHRpZiAociBcXHUwMDNjIDApXFxuLS1cXG5uZXQvbmZjL25jaS9oY2kuYy04MjctXFxubmV0L25mYy9uY2kvaGNpLmM6ODI4OlxcdFxcdHIgPSBuY2lfaGNpX2Rldl9jb25uZWN0X2dhdGVzKG5kZXYsXFxubmV0L25mYy9uY2kvaGNpLmM6ODI5OlxcdFxcdFxcdFxcdFxcdCAgICAgIG5kZXYtXFx1MDAzZWhjaV9kZXYtXFx1MDAzZWluaXRfZGF0YS5nYXRlX2NvdW50LFxcbm5ldC9uZmMvbmNpL2hjaS5jOjgzMDpcXHRcXHRcXHRcXHRcXHQgICAgICBuZGV2LVxcdTAwM2VoY2lfZGV2LVxcdTAwM2Vpbml0X2RhdGEuZ2F0ZXMpO1xcbm5ldC9uZmMvbmNpL2hjaS5jLTgzMS1cXHRcXHRpZiAociBcXHUwMDNjIDApXFxuLS1cXG5uZXQvbmZjL25jaS9oY2kuYy04MzMtXFxubmV0L25mYy9uY2kvaGNpLmM6ODM0OlxcdFxcdHIgPSBuY2lfaGNpX3NldF9wYXJhbShuZGV2LCBOQ0lfSENJX0FETUlOX0dBVEUsXFxubmV0L25mYy9uY2kvaGNpLmMtODM1LVxcdFxcdFxcdFxcdCAgICAgIE5DSV9IQ0lfQURNSU5fUEFSQU1fU0VTU0lPTl9JREVOVElUWSxcXG5uZXQvbmZjL25jaS9oY2kuYzo4MzY6XFx0XFx0XFx0XFx0ICAgICAgbmRldi1cXHUwMDNlaGNpX2Rldi1cXHUwMDNlaW5pdF9kYXRhLnNlc3Npb25faWQsXFxubmV0L25mYy9uY2kvaGNpLmM6ODM3OlxcdFxcdFxcdFxcdCAgICAgIHN0cmxlbihuZGV2LVxcdTAwM2VoY2lfZGV2LVxcdTAwM2Vpbml0X2RhdGEuc2Vzc2lvbl9pZCkpO1xcbm5ldC9uZmMvbmNpL2hjaS5jLTgzOC1cXHR9XFxuLS1cXG5uZXQvbmZjL25jaS9oY2kuYy04NDQtfVxcbm5ldC9uZmMvbmNpL2hjaS5jOjg0NTpFWFBPUlRfU1lNQk9MKG5jaV9oY2lfZGV2X3Nlc3Npb25faW5pdCk7XFxubmV0L25mYy9uY2kvaGNpLmMtODQ2LVxcbm5ldC9uZmMvbmNpL2hjaS5jOjg0NzpzdHJ1Y3QgbmNpX2hjaV9kZXYgKm5jaV9oY2lfYWxsb2NhdGUoc3RydWN0IG5jaV9kZXYgKm5kZXYpXFxubmV0L25mYy9uY2kvaGNpLmMtODQ4LXtcXG5uZXQvbmZjL25jaS9oY2kuYzo4NDk6XFx0c3RydWN0IG5jaV9oY2lfZGV2ICpoZGV2O1xcbm5ldC9uZmMvbmNpL2hjaS5jLTg1MC1cXG4tLVxcbm5ldC9uZmMvbmNpL2hjaS5jLTg1NS1cXHRza2JfcXVldWVfaGVhZF9pbml0KFxcdTAwMjZoZGV2LVxcdTAwM2VyeF9oY3BfZnJhZ3MpO1xcbm5ldC9uZmMvbmNpL2hjaS5jOjg1NjpcXHRJTklUX1dPUksoXFx1MDAyNmhkZXYtXFx1MDAzZW1zZ19yeF93b3JrLCBuY2lfaGNpX21zZ19yeF93b3JrKTtcXG5uZXQvbmZjL25jaS9oY2kuYy04NTctXFx0c2tiX3F1ZXVlX2hlYWRfaW5pdChcXHUwMDI2aGRldi1cXHUwMDNlbXNnX3J4X3F1ZXVlKTtcXG4tLVxcbm5ldC9uZmMvbmNpL2hjaS5jLTg2Mi1cXG5uZXQvbmZjL25jaS9oY2kuYzo4NjM6dm9pZCBuY2lfaGNpX2RlYWxsb2NhdGUoc3RydWN0IG5jaV9kZXYgKm5kZXYpXFxubmV0L25mYy9uY2kvaGNpLmMtODY0LXtcXG5uZXQvbmZjL25jaS9oY2kuYzo4NjU6XFx0a2ZyZWUobmRldi1cXHUwMDNlaGNpX2Rldik7XFxubmV0L25mYy9uY2kvaGNpLmMtODY2LX1cXG4tLVxcbm5ldC9uZmMvbmNpL250Zi5jLTExLSAqICBBY2tub3dsZWRnZW1lbnRzOlxcbm5ldC9uZmMvbmNpL250Zi5jOjEyOiAqICBUaGlzIGZpbGUgaXMgYmFzZWQgb24gaGNpX2V2ZW50LmMsIHdoaWNoIHdhcyB3cml0dGVuXFxubmV0L25mYy9uY2kvbnRmLmMtMTMtICogIGJ5IE1heGltIEtyYXNueWFuc2t5Llxcbi0tXFxubmV0L25mYy9uY2kvbnRmLmM9OTU0PXN0YXRpYyBpbnQgbmNpX25mY2VlX2Rpc2NvdmVyX250Zl9wYWNrZXQoc3RydWN0IG5jaV9kZXYgKm5kZXYsXFxuLS1cXG5uZXQvbmZjL25jaS9udGYuYy05NjktXFx0ICovXFxubmV0L25mYy9uY2kvbnRmLmM6OTcwOlxcdG5kZXYtXFx1MDAzZWhjaV9kZXYtXFx1MDAzZW5mY2VlX2lkID0gbmZjZWVfbnRmLVxcdTAwM2VuZmNlZV9pZDtcXG5uZXQvbmZjL25jaS9udGYuYy05NzEtXFx0bmRldi1cXHUwMDNlY3VyX3BhcmFtcy5pZCA9IG5mY2VlX250Zi1cXHUwMDNlbmZjZWVfaWQ7XFxuLS1cXG5uZXQvbmZjL25jaS9yc3AuYy0xMC0gKiAgQWNrbm93bGVkZ2VtZW50czpcXG5uZXQvbmZjL25jaS9yc3AuYzoxMTogKiAgVGhpcyBmaWxlIGlzIGJhc2VkIG9uIGhjaV9ldmVudC5jLCB3aGljaCB3YXMgd3JpdHRlblxcbm5ldC9uZmMvbmNpL3JzcC5jLTEyLSAqICBieSBNYXhpbSBLcmFzbnlhbnNreS5cXG4tLVxcbm5ldC9uZmMvbmNpL3JzcC5jPTI4NT1zdGF0aWMgdm9pZCBuY2lfY29yZV9jb25uX2NyZWF0ZV9yc3BfcGFja2V0KHN0cnVjdCBuY2lfZGV2ICpuZGV2LFxcbi0tXFxubmV0L25mYy9uY2kvcnNwLmMtMzI2LVxcbm5ldC9uZmMvbmNpL3JzcC5jOjMyNzpcXHRcXHRpZiAobmRldi1cXHUwMDNlY3VyX3BhcmFtcy5pZCA9PSBuZGV2LVxcdTAwM2VoY2lfZGV2LVxcdTAwM2VuZmNlZV9pZClcXG5uZXQvbmZjL25jaS9yc3AuYzozMjg6XFx0XFx0XFx0bmRldi1cXHUwMDNlaGNpX2Rldi1cXHUwMDNlY29ubl9pbmZvID0gY29ubl9pbmZvO1xcbm5ldC9uZmMvbmNpL3JzcC5jLTMyOS1cXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2bmRldi1cXHUwMDNlY29ubl9pbmZvX2xvY2spO1xcbi0tXFxubmV0L25mYy9uY2kvcnNwLmM9MzQwPXN0YXRpYyB2b2lkIG5jaV9jb3JlX2Nvbm5fY2xvc2VfcnNwX3BhY2tldChzdHJ1Y3QgbmNpX2RldiAqbmRldixcXG4tLVxcbm5ldC9uZmMvbmNpL3JzcC5jLTM1NC1cXHRcXHRcXHRcXHRuZGV2LVxcdTAwM2VyZl9jb25uX2luZm8gPSBOVUxMO1xcbm5ldC9uZmMvbmNpL3JzcC5jOjM1NTpcXHRcXHRcXHRpZiAoY29ubl9pbmZvID09IG5kZXYtXFx1MDAzZWhjaV9kZXYtXFx1MDAzZWNvbm5faW5mbylcXG5uZXQvbmZjL25jaS9yc3AuYzozNTY6XFx0XFx0XFx0XFx0bmRldi1cXHUwMDNlaGNpX2Rldi1cXHUwMDNlY29ubl9pbmZvID0gTlVMTDtcXG5uZXQvbmZjL25jaS9yc3AuYy0zNTctXFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQwOToyNjozNy40MTExNDAxNTNaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjI1MTUzOTQ1MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTkZDIE5DSSBDb25maWd1cmF0aW9uIGFuZCBGdXp6aW5nIFN0cmF0ZWd5KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIGZvciB0aGUgTkZDIE5DSSBzdWJzeXN0ZW0uIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gcGlucG9pbnQgd2hlcmUgYG5jaV9oY2lfc2VuZF9jbWRgIGxpdmVzLCBhbmQgaXQncyBpbiBgbmV0L25mYy9uY2kvaGNpLmNgLCBwYXJ0IG9mIHRoZSBgTkZDX05DSWAgY29tcG9uZW50LiBUaGVyZWZvcmUsIHRoYXQncyBkZWZpbml0ZWx5IG5lZWRlZC4gSSdsbCBza2lwIG92ZXIgYE5GQ19IQ0lgIGJlY2F1c2UgdGhhdCdzIGEgZGlmZmVyZW50IGltcGxlbWVudGF0aW9uIGluIGBuZXQvbmZjL2hjaS9gLlxuXG5TbywgZm9yIGNvbmZpZ3VyYXRpb24sIHdlIG5lZWQgYE5GQ2AsIGBORkNfTkNJYCwgYW5kIGBORkNfVklSVFVBTF9OQ0lgLiBMZXQgbWUgZG91YmxlLWNoZWNrIHRoZSBleGFjdCBuYW1lIG9mIGBORkNfVklSVFVBTF9OQ0lgIGFuZCB5ZXAsIGl0J3MgZGVmaW5lZCBhcyBgQ09ORklHX05GQ19WSVJUVUFMX05DSWAgaW4gYGRyaXZlcnMvbmZjL0tjb25maWdgLlxuXG5Ob3csIHRoZSBpbXBvcnRhbnQgcGFydDogZm9jdXMgc3ltYm9scyBmb3IgZnV6emluZy4gSSBuZWVkIHRvIGxpc3QgZnVuY3Rpb25zIHRoYXQgYXJlIHJlbGV2YW50IHRvIHRoZXNlIGNvbmN1cnJlbmN5IGZpeGVzLiAgSSdtIHRoaW5raW5nIG9mIGZvY3VzaW5nIG9uIHRoaW5ncyBsaWtlIGBuY2lfbmZjY19sb29wYmFja2AsIGBuY2lfdHJhbnNjZWl2ZWAsIGBuY2lfc2VuZF9kYXRhYCwgYG5jaV9yeF9kYXRhX3BhY2tldGAsIHRoZSBpbXBvcnRhbnQgYG5jaV9oY2lfc2VuZF9jbWRgLCBhbmQgdGhlbiBhbHNvIGBuY2lfaGNpX3NldF9wYXJhbWAsIGFuZCBgbmNpX2hjaV9nZXRfcGFyYW1gLiBBbHNvIGNvcmUgZnVuY3Rpb25zIHN1Y2ggYXMgYG5jaV9jb3JlX2Nvbm5fY3JlYXRlX3JzcF9wYWNrZXRgLCBgbmNpX2NvcmVfY29ubl9jbG9zZV9yc3BfcGFja2V0YCwgYW5kIGBuY2lfcmZfZGlzY19yc3BfcGFja2V0YC5cblxuQSBjcnVjaWFsIHBvaW50IGlzIHdoZXRoZXIgYG5jaV9jb3JlX2Nvbm5fY3JlYXRlX3JzcF9wYWNrZXRgIGlzIHN0YXRpYyBvciBleHBvcnRlZC4gSXQgdHVybnMgb3V0IHRvIGJlIHN0YXRpYywgYnV0IHN5emthbGxlciBjYW4gc3RpbGwgcmVhY2ggaXQgdGhyb3VnaCBgbmNpX3JzcF9wYWNrZXRgLCB3aGljaCBpbiB0dXJuIGlzIGNhbGxlZCBmcm9tIGBuY2lfcnhfd29ya2Agd2hlbiBkYXRhIGNvbWVzIGZyb20gdGhlIE5GQyBjb250cm9sbGVyLiAgQmVjYXVzZSBgTkZDX1ZJUlRVQUxfTkNJYCBhbGxvd3Mgc2ltdWxhdGluZyBhbiBORkMgY29udHJvbGxlciwgd2UgY2FuIGluamVjdCByZXNwb25zZXMgYW5kIHRyaWdnZXIgYG5jaV9jb3JlX2Nvbm5fY3JlYXRlX3JzcF9wYWNrZXRgIGluZGlyZWN0bHkuIFRoZXJlZm9yZSwgSSBjYW4gc3RpbGwgbGlzdCBwYWNrZXQgaGFuZGxlcnMgaW4gZm9jdXMgc3ltYm9scy4gRXZlbiB0aG91Z2ggdGhleSBhcmUgc3RhdGljLCBzeXprYWxsZXIgd2lsbCBzdGlsbCBiZSBhYmxlIHRvIGZ1enogaXQgdmlhIGtjb3YuXG5cbkxldCdzIGV4cGFuZCB0aGF0IGxpc3Qgd2l0aCBhIGZldyBtb3JlIHBhY2tldCBoYW5kbGVycyB0byBlbnN1cmUgZnVsbCBjb3ZlcmFnZTogSSdtIGFkZGluZyBgbmNpX2NvcmVfY29ubl9jcmVkaXRzX250Zl9wYWNrZXRgLCBgbmNpX3JmX2ludGZfYWN0aXZhdGVkX250Zl9wYWNrZXRgIGFuZCBgbmNpX3JmX2RlYWN0aXZhdGVfbnRmX3BhY2tldGAuXG5cblNvIGhlcmUgaXMgdGhlIGZ1bGwgbGlzdDogYG5jaV9uZmNjX2xvb3BiYWNrYCwgYG5jaV90cmFuc2NlaXZlYCwgYG5jaV9zZW5kX2RhdGFgLCBgbmNpX3J4X2RhdGFfcGFja2V0YCwgYG5jaV9oY2lfc2VuZF9jbWRgLCBgbmNpX2hjaV9zZXRfcGFyYW1gLCBgbmNpX2hjaV9nZXRfcGFyYW1gLCBgbmNpX2NvcmVfY29ubl9jcmVhdGVfcnNwX3BhY2tldGAsIGBuY2lfY29yZV9jb25uX2Nsb3NlX3JzcF9wYWNrZXRgLCBgbmNpX3JmX2Rpc2NfcnNwX3BhY2tldGAsIGBuY2lfY29yZV9jb25uX2NyZWRpdHNfbnRmX3BhY2tldGAsIGBuY2lfcmZfaW50Zl9hY3RpdmF0ZWRfbnRmX3BhY2tldGAsIGFuZCBgbmNpX3JmX2RlYWN0aXZhdGVfbnRmX3BhY2tldGAuIEl0IHNlZW1zIHRoaXMgaXMgYSBnb29kIGxpc3Qgb2YgZnVuY3Rpb25zIHRoYXQgd2VyZSB0b3VjaGVkIGluIHRoaXMgcGF0Y2guXG5cbkkgd2lsbCBkb3VibGUtY2hlY2sgYWdhaW4gdGhhdCBgTkZDX1ZJUlRVQUxfTkNJYCBpcyB0aGUgcmlnaHQgY29uZmlndXJhdGlvbiBvcHRpb24sIGFuZCB5ZXMsIGBkcml2ZXJzL25mYy9LY29uZmlnYCBjb25maXJtcyB0aGF0IGl0IGRlcGVuZHMgb24gYE5GQ19OQ0lgLlxuXG5JJ2xsIGFsc28gbWFrZSBzdXJlIG5vIG90aGVyIGNvbmZpZ3VyYXRpb25zIGFyZSByZXF1aXJlZC4gSXQgbG9va3MgbGlrZSBgTkZDYCBhbmQgYE5GQ19OQ0lgIGFyZSBuZWNlc3NhcnkgYXMgd2VsbC4gYE5GQ19WSVJUVUFMX05DSWAgaGFzIGEgZGVwZW5kZW5jeSBvbiBgTkZDX05DSWAuXG5cblRoZXJlZm9yZSwgdGhlIGZpbmFsIHNldHVwIGlzOlxuXG4qICAgKipXb3J0aEZ1enppbmc6KiogYHRydWVgXG4qICAgKipGb2N1c1N5bWJvbHM6KipcbiAgICAqICAgYG5jaV9uZmNjX2xvb3BiYWNrYFxuICAgICogICBgbmNpX3RyYW5zY2VpdmVgXG4gICAgKiAgIGBuY2lfc2VuZF9kYXRhYFxuICAgICogICBgbmNpX3J4X2RhdGFfcGFja2V0YFxuICAgICogICBgbmNpX2hjaV9zZW5kX2NtZGBcbiAgICAqICAgYG5jaV9oY2lfc2V0X3BhcmFtYFxuICAgICogICBgbmNpX2hjaV9nZXRfcGFyYW1gXG4gICAgKiAgIGBuY2lfY29yZV9jb25uX2NyZWF0ZV9yc3BfcGFja2V0YFxuICAgICogICBgbmNpX2NvcmVfY29ubl9jbG9zZV9yc3BfcGFja2V0YFxuICAgICogICBgbmNpX3JmX2Rpc2NfcnNwX3BhY2tldGBcbiAgICAqICAgYG5jaV9jb3JlXG5cbiIsIklucHV0VG9rZW5zIjo0MzIzNCwiT3V0cHV0VG9rZW5zIjoyNjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTM1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDA5OjI2OjU5LjkyNjU0MDk4NloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMzMzQwNTUyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZDXCIsXG4gICAgXCJORkNfTkNJXCIsXG4gICAgXCJORkNfVklSVFVBTF9OQ0lcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuY2lfbmZjY19sb29wYmFja1wiLFxuICAgIFwibmNpX3RyYW5zY2VpdmVcIixcbiAgICBcIm5jaV9zZW5kX2RhdGFcIixcbiAgICBcIm5jaV9yeF9kYXRhX3BhY2tldFwiLFxuICAgIFwibmNpX2hjaV9zZW5kX2NtZFwiLFxuICAgIFwibmNpX2hjaV9zZXRfcGFyYW1cIixcbiAgICBcIm5jaV9oY2lfZ2V0X3BhcmFtXCIsXG4gICAgXCJuY2lfY29yZV9jb25uX2NyZWF0ZV9yc3BfcGFja2V0XCIsXG4gICAgXCJuY2lfY29yZV9jb25uX2Nsb3NlX3JzcF9wYWNrZXRcIixcbiAgICBcIm5jaV9yZl9kaXNjX3JzcF9wYWNrZXRcIixcbiAgICBcIm5jaV9jb3JlX2Nvbm5fY3JlZGl0c19udGZfcGFja2V0XCIsXG4gICAgXCJuY2lfcmZfaW50Zl9hY3RpdmF0ZWRfbnRmX3BhY2tldFwiLFxuICAgIFwibmNpX3JmX2RlYWN0aXZhdGVfbnRmX3BhY2tldFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGNvbmN1cnJlbmN5IGlzc3VlcyBpbiB0aGUgTkZDIE5DSSBjb3JlIGJ5IGludHJvZHVjaW5nIGEgc3BpbmxvY2sgdG8gcHJvdGVjdCBjb25uZWN0aW9uIGluZm8gbGlzdHMgYW5kIHBvaW50ZXJzLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIGRhdGEgdHJhbnNtaXNzaW9uLCByZWNlcHRpb24sIGFuZCBIQ0kgY29tbWFuZCBoYW5kbGluZywgd2hpY2ggYXJlIHJlYWNoYWJsZSB2aWEgdGhlIHZpcnR1YWwgTkNJIGRyaXZlci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORkNcIixcbiAgICBcIk5GQ19OQ0lcIixcbiAgICBcIk5GQ19WSVJUVUFMX05DSVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5jaV9uZmNjX2xvb3BiYWNrXCIsXG4gICAgXCJuY2lfdHJhbnNjZWl2ZVwiLFxuICAgIFwibmNpX3NlbmRfZGF0YVwiLFxuICAgIFwibmNpX3J4X2RhdGFfcGFja2V0XCIsXG4gICAgXCJuY2lfaGNpX3NlbmRfY21kXCIsXG4gICAgXCJuY2lfaGNpX3NldF9wYXJhbVwiLFxuICAgIFwibmNpX2hjaV9nZXRfcGFyYW1cIixcbiAgICBcIm5jaV9jb3JlX2Nvbm5fY3JlYXRlX3JzcF9wYWNrZXRcIixcbiAgICBcIm5jaV9jb3JlX2Nvbm5fY2xvc2VfcnNwX3BhY2tldFwiLFxuICAgIFwibmNpX3JmX2Rpc2NfcnNwX3BhY2tldFwiLFxuICAgIFwibmNpX2NvcmVfY29ubl9jcmVkaXRzX250Zl9wYWNrZXRcIixcbiAgICBcIm5jaV9yZl9pbnRmX2FjdGl2YXRlZF9udGZfcGFja2V0XCIsXG4gICAgXCJuY2lfcmZfZGVhY3RpdmF0ZV9udGZfcGFja2V0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgY29uY3VycmVuY3kgaXNzdWVzIGluIHRoZSBORkMgTkNJIGNvcmUgYnkgaW50cm9kdWNpbmcgYSBzcGlubG9jayB0byBwcm90ZWN0IGNvbm5lY3Rpb24gaW5mbyBsaXN0cyBhbmQgcG9pbnRlcnMuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGNvcmUgZGF0YSB0cmFuc21pc3Npb24sIHJlY2VwdGlvbiwgYW5kIEhDSSBjb21tYW5kIGhhbmRsaW5nLCB3aGljaCBhcmUgcmVhY2hhYmxlIHZpYSB0aGUgdmlydHVhbCBOQ0kgZHJpdmVyLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow64rfd[1] Phase: Succeeded StartedAt: 2026-06-30 09:29:57 +0000 UTC FinishedAt: 2026-06-30 09:29:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow64rfd[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-06-30 09:29:57 +0000 UTC FinishedAt: 2026-06-30 09:29:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow64rfd[2] Phase: Succeeded StartedAt: 2026-06-30 09:29:57 +0000 UTC FinishedAt: 2026-06-30 13:30:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow64rfd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1398b1014909618f65ff6bcebcb2ee5ccd44fdc0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nci_nfcc_loopback","nci_transceive","nci_send_data","nci_rx_data_packet","nci_hci_send_cmd","nci_hci_set_param","nci_hci_get_param","nci_core_conn_create_rsp_packet","nci_core_conn_close_rsp_packet","nci_rf_disc_rsp_packet","nci_core_conn_credits_ntf_packet","nci_rf_intf_activated_ntf_packet","nci_rf_deactivate_ntf_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1398b1014909618f65ff6bcebcb2ee5ccd44fdc0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"dd88a4e9-9d49-42de-9e06-843511f3fdca","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-06-30 09:29:58 +0000 UTC FinishedAt: 2026-06-30 13:30:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"1398b1014909618f65ff6bcebcb2ee5ccd44fdc0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nci_nfcc_loopback","nci_transceive","nci_send_data","nci_rx_data_packet","nci_hci_send_cmd","nci_hci_set_param","nci_hci_get_param","nci_core_conn_create_rsp_packet","nci_core_conn_close_rsp_packet","nci_rf_disc_rsp_packet","nci_core_conn_credits_ntf_packet","nci_rf_intf_activated_ntf_packet","nci_rf_deactivate_ntf_packet"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"1398b1014909618f65ff6bcebcb2ee5ccd44fdc0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"dd88a4e9-9d49-42de-9e06-843511f3fdca","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow64rfd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1398b1014909618f65ff6bcebcb2ee5ccd44fdc0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nci_nfcc_loopback","nci_transceive","nci_send_data","nci_rx_data_packet","nci_hci_send_cmd","nci_hci_set_param","nci_hci_get_param","nci_core_conn_create_rsp_packet","nci_core_conn_close_rsp_packet","nci_rf_disc_rsp_packet","nci_core_conn_credits_ntf_packet","nci_rf_intf_activated_ntf_packet","nci_rf_deactivate_ntf_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1398b1014909618f65ff6bcebcb2ee5ccd44fdc0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"dd88a4e9-9d49-42de-9e06-843511f3fdca","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-06-30 09:29:58 +0000 UTC FinishedAt: 2026-06-30 09:30:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow64rfd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1398b1014909618f65ff6bcebcb2ee5ccd44fdc0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nci_nfcc_loopback","nci_transceive","nci_send_data","nci_rx_data_packet","nci_hci_send_cmd","nci_hci_set_param","nci_hci_get_param","nci_core_conn_create_rsp_packet","nci_core_conn_close_rsp_packet","nci_rf_disc_rsp_packet","nci_core_conn_credits_ntf_packet","nci_rf_intf_activated_ntf_packet","nci_rf_deactivate_ntf_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1398b1014909618f65ff6bcebcb2ee5ccd44fdc0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"dd88a4e9-9d49-42de-9e06-843511f3fdca","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-06-30 09:29:58 +0000 UTC FinishedAt: 2026-06-30 09:30:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1398b1014909618f65ff6bcebcb2ee5ccd44fdc0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow64rfd/series-workflow64rfd-convert-artifact-1827249553/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow64rfd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1398b1014909618f65ff6bcebcb2ee5ccd44fdc0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nci_nfcc_loopback","nci_transceive","nci_send_data","nci_rx_data_packet","nci_hci_send_cmd","nci_hci_set_param","nci_hci_get_param","nci_core_conn_create_rsp_packet","nci_core_conn_close_rsp_packet","nci_rf_disc_rsp_packet","nci_core_conn_credits_ntf_packet","nci_rf_intf_activated_ntf_packet","nci_rf_deactivate_ntf_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1398b1014909618f65ff6bcebcb2ee5ccd44fdc0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"dd88a4e9-9d49-42de-9e06-843511f3fdca","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-06-30 09:30:33 +0000 UTC FinishedAt: 2026-06-30 09:57:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow64rfd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1398b1014909618f65ff6bcebcb2ee5ccd44fdc0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nci_nfcc_loopback","nci_transceive","nci_send_data","nci_rx_data_packet","nci_hci_send_cmd","nci_hci_set_param","nci_hci_get_param","nci_core_conn_create_rsp_packet","nci_core_conn_close_rsp_packet","nci_rf_disc_rsp_packet","nci_core_conn_credits_ntf_packet","nci_rf_intf_activated_ntf_packet","nci_rf_deactivate_ntf_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1398b1014909618f65ff6bcebcb2ee5ccd44fdc0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"dd88a4e9-9d49-42de-9e06-843511f3fdca","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-06-30 09:30:33 +0000 UTC FinishedAt: 2026-06-30 09:57:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*27404a8f-b452-472c-a95f-684f44989043,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow64rfd/series-workflow64rfd-convert-artifact-1827249553/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "123f0af8-2842-4a21-878c-b5b9e9980ab4", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow64rfd/series-workflow64rfd-build-action-2048622399/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow64rfd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1398b1014909618f65ff6bcebcb2ee5ccd44fdc0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nci_nfcc_loopback","nci_transceive","nci_send_data","nci_rx_data_packet","nci_hci_send_cmd","nci_hci_set_param","nci_hci_get_param","nci_core_conn_create_rsp_packet","nci_core_conn_close_rsp_packet","nci_rf_disc_rsp_packet","nci_core_conn_credits_ntf_packet","nci_rf_intf_activated_ntf_packet","nci_rf_deactivate_ntf_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1398b1014909618f65ff6bcebcb2ee5ccd44fdc0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"dd88a4e9-9d49-42de-9e06-843511f3fdca","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-06-30 09:30:33 +0000 UTC FinishedAt: 2026-06-30 09:57:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*27404a8f-b452-472c-a95f-684f44989043,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow64rfd/series-workflow64rfd-convert-artifact-1827249553/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "123f0af8-2842-4a21-878c-b5b9e9980ab4", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow64rfd/series-workflow64rfd-build-action-2048622399/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow64rfd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1398b1014909618f65ff6bcebcb2ee5ccd44fdc0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nci_nfcc_loopback","nci_transceive","nci_send_data","nci_rx_data_packet","nci_hci_send_cmd","nci_hci_set_param","nci_hci_get_param","nci_core_conn_create_rsp_packet","nci_core_conn_close_rsp_packet","nci_rf_disc_rsp_packet","nci_core_conn_credits_ntf_packet","nci_rf_intf_activated_ntf_packet","nci_rf_deactivate_ntf_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1398b1014909618f65ff6bcebcb2ee5ccd44fdc0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"dd88a4e9-9d49-42de-9e06-843511f3fdca","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-06-30 09:57:57 +0000 UTC FinishedAt: 2026-06-30 09:57:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow64rfd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1398b1014909618f65ff6bcebcb2ee5ccd44fdc0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nci_nfcc_loopback","nci_transceive","nci_send_data","nci_rx_data_packet","nci_hci_send_cmd","nci_hci_set_param","nci_hci_get_param","nci_core_conn_create_rsp_packet","nci_core_conn_close_rsp_packet","nci_rf_disc_rsp_packet","nci_core_conn_credits_ntf_packet","nci_rf_intf_activated_ntf_packet","nci_rf_deactivate_ntf_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1398b1014909618f65ff6bcebcb2ee5ccd44fdc0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"dd88a4e9-9d49-42de-9e06-843511f3fdca","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-06-30 09:57:57 +0000 UTC FinishedAt: 2026-06-30 09:57:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow64rfd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1398b1014909618f65ff6bcebcb2ee5ccd44fdc0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nci_nfcc_loopback","nci_transceive","nci_send_data","nci_rx_data_packet","nci_hci_send_cmd","nci_hci_set_param","nci_hci_get_param","nci_core_conn_create_rsp_packet","nci_core_conn_close_rsp_packet","nci_rf_disc_rsp_packet","nci_core_conn_credits_ntf_packet","nci_rf_intf_activated_ntf_packet","nci_rf_deactivate_ntf_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1398b1014909618f65ff6bcebcb2ee5ccd44fdc0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"dd88a4e9-9d49-42de-9e06-843511f3fdca","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-06-30 09:57:57 +0000 UTC FinishedAt: 2026-06-30 09:58:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow64rfd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1398b1014909618f65ff6bcebcb2ee5ccd44fdc0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nci_nfcc_loopback","nci_transceive","nci_send_data","nci_rx_data_packet","nci_hci_send_cmd","nci_hci_set_param","nci_hci_get_param","nci_core_conn_create_rsp_packet","nci_core_conn_close_rsp_packet","nci_rf_disc_rsp_packet","nci_core_conn_credits_ntf_packet","nci_rf_intf_activated_ntf_packet","nci_rf_deactivate_ntf_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1398b1014909618f65ff6bcebcb2ee5ccd44fdc0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"dd88a4e9-9d49-42de-9e06-843511f3fdca","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-06-30 09:57:57 +0000 UTC FinishedAt: 2026-06-30 09:58:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1398b1014909618f65ff6bcebcb2ee5ccd44fdc0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"dd88a4e9-9d49-42de-9e06-843511f3fdca","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow64rfd/series-workflow64rfd-convert-artifact-2502965604/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow64rfd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1398b1014909618f65ff6bcebcb2ee5ccd44fdc0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nci_nfcc_loopback","nci_transceive","nci_send_data","nci_rx_data_packet","nci_hci_send_cmd","nci_hci_set_param","nci_hci_get_param","nci_core_conn_create_rsp_packet","nci_core_conn_close_rsp_packet","nci_rf_disc_rsp_packet","nci_core_conn_credits_ntf_packet","nci_rf_intf_activated_ntf_packet","nci_rf_deactivate_ntf_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1398b1014909618f65ff6bcebcb2ee5ccd44fdc0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"dd88a4e9-9d49-42de-9e06-843511f3fdca","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-06-30 09:58:18 +0000 UTC FinishedAt: 2026-06-30 10:00:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow64rfd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1398b1014909618f65ff6bcebcb2ee5ccd44fdc0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nci_nfcc_loopback","nci_transceive","nci_send_data","nci_rx_data_packet","nci_hci_send_cmd","nci_hci_set_param","nci_hci_get_param","nci_core_conn_create_rsp_packet","nci_core_conn_close_rsp_packet","nci_rf_disc_rsp_packet","nci_core_conn_credits_ntf_packet","nci_rf_intf_activated_ntf_packet","nci_rf_deactivate_ntf_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1398b1014909618f65ff6bcebcb2ee5ccd44fdc0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"dd88a4e9-9d49-42de-9e06-843511f3fdca","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-06-30 09:58:18 +0000 UTC FinishedAt: 2026-06-30 10:00:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*123f0af8-2842-4a21-878c-b5b9e9980ab4,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow64rfd/series-workflow64rfd-build-action-2048622399/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow64rfd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1398b1014909618f65ff6bcebcb2ee5ccd44fdc0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nci_nfcc_loopback","nci_transceive","nci_send_data","nci_rx_data_packet","nci_hci_send_cmd","nci_hci_set_param","nci_hci_get_param","nci_core_conn_create_rsp_packet","nci_core_conn_close_rsp_packet","nci_rf_disc_rsp_packet","nci_core_conn_credits_ntf_packet","nci_rf_intf_activated_ntf_packet","nci_rf_deactivate_ntf_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1398b1014909618f65ff6bcebcb2ee5ccd44fdc0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"dd88a4e9-9d49-42de-9e06-843511f3fdca","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-06-30 10:00:31 +0000 UTC FinishedAt: 2026-06-30 10:00:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow64rfd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1398b1014909618f65ff6bcebcb2ee5ccd44fdc0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nci_nfcc_loopback","nci_transceive","nci_send_data","nci_rx_data_packet","nci_hci_send_cmd","nci_hci_set_param","nci_hci_get_param","nci_core_conn_create_rsp_packet","nci_core_conn_close_rsp_packet","nci_rf_disc_rsp_packet","nci_core_conn_credits_ntf_packet","nci_rf_intf_activated_ntf_packet","nci_rf_deactivate_ntf_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1398b1014909618f65ff6bcebcb2ee5ccd44fdc0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"dd88a4e9-9d49-42de-9e06-843511f3fdca","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-06-30 10:00:31 +0000 UTC FinishedAt: 2026-06-30 10:00:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow64rfd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1398b1014909618f65ff6bcebcb2ee5ccd44fdc0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nci_nfcc_loopback","nci_transceive","nci_send_data","nci_rx_data_packet","nci_hci_send_cmd","nci_hci_set_param","nci_hci_get_param","nci_core_conn_create_rsp_packet","nci_core_conn_close_rsp_packet","nci_rf_disc_rsp_packet","nci_core_conn_credits_ntf_packet","nci_rf_intf_activated_ntf_packet","nci_rf_deactivate_ntf_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1398b1014909618f65ff6bcebcb2ee5ccd44fdc0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"dd88a4e9-9d49-42de-9e06-843511f3fdca","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-06-30 10:00:31 +0000 UTC FinishedAt: 2026-06-30 10:27:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow64rfd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1398b1014909618f65ff6bcebcb2ee5ccd44fdc0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nci_nfcc_loopback","nci_transceive","nci_send_data","nci_rx_data_packet","nci_hci_send_cmd","nci_hci_set_param","nci_hci_get_param","nci_core_conn_create_rsp_packet","nci_core_conn_close_rsp_packet","nci_rf_disc_rsp_packet","nci_core_conn_credits_ntf_packet","nci_rf_intf_activated_ntf_packet","nci_rf_deactivate_ntf_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1398b1014909618f65ff6bcebcb2ee5ccd44fdc0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"dd88a4e9-9d49-42de-9e06-843511f3fdca","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-06-30 10:00:31 +0000 UTC FinishedAt: 2026-06-30 10:27:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*27404a8f-b452-472c-a95f-684f44989043,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow64rfd/series-workflow64rfd-convert-artifact-2502965604/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "8a5b6712-3560-4915-b8ad-7b2d8cd1d318", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow64rfd/series-workflow64rfd-build-action-1949188848/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow64rfd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1398b1014909618f65ff6bcebcb2ee5ccd44fdc0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nci_nfcc_loopback","nci_transceive","nci_send_data","nci_rx_data_packet","nci_hci_send_cmd","nci_hci_set_param","nci_hci_get_param","nci_core_conn_create_rsp_packet","nci_core_conn_close_rsp_packet","nci_rf_disc_rsp_packet","nci_core_conn_credits_ntf_packet","nci_rf_intf_activated_ntf_packet","nci_rf_deactivate_ntf_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1398b1014909618f65ff6bcebcb2ee5ccd44fdc0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"dd88a4e9-9d49-42de-9e06-843511f3fdca","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-06-30 10:00:31 +0000 UTC FinishedAt: 2026-06-30 10:25:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*27404a8f-b452-472c-a95f-684f44989043,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow64rfd/series-workflow64rfd-convert-artifact-2502965604/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "8a5b6712-3560-4915-b8ad-7b2d8cd1d318", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow64rfd/series-workflow64rfd-build-action-1949188848/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow64rfd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1398b1014909618f65ff6bcebcb2ee5ccd44fdc0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nci_nfcc_loopback","nci_transceive","nci_send_data","nci_rx_data_packet","nci_hci_send_cmd","nci_hci_set_param","nci_hci_get_param","nci_core_conn_create_rsp_packet","nci_core_conn_close_rsp_packet","nci_rf_disc_rsp_packet","nci_core_conn_credits_ntf_packet","nci_rf_intf_activated_ntf_packet","nci_rf_deactivate_ntf_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1398b1014909618f65ff6bcebcb2ee5ccd44fdc0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"dd88a4e9-9d49-42de-9e06-843511f3fdca","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-06-30 10:27:25 +0000 UTC FinishedAt: 2026-06-30 10:27:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow64rfd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1398b1014909618f65ff6bcebcb2ee5ccd44fdc0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nci_nfcc_loopback","nci_transceive","nci_send_data","nci_rx_data_packet","nci_hci_send_cmd","nci_hci_set_param","nci_hci_get_param","nci_core_conn_create_rsp_packet","nci_core_conn_close_rsp_packet","nci_rf_disc_rsp_packet","nci_core_conn_credits_ntf_packet","nci_rf_intf_activated_ntf_packet","nci_rf_deactivate_ntf_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1398b1014909618f65ff6bcebcb2ee5ccd44fdc0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"dd88a4e9-9d49-42de-9e06-843511f3fdca","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-06-30 10:27:25 +0000 UTC FinishedAt: 2026-06-30 10:27:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow64rfd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1398b1014909618f65ff6bcebcb2ee5ccd44fdc0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nci_nfcc_loopback","nci_transceive","nci_send_data","nci_rx_data_packet","nci_hci_send_cmd","nci_hci_set_param","nci_hci_get_param","nci_core_conn_create_rsp_packet","nci_core_conn_close_rsp_packet","nci_rf_disc_rsp_packet","nci_core_conn_credits_ntf_packet","nci_rf_intf_activated_ntf_packet","nci_rf_deactivate_ntf_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1398b1014909618f65ff6bcebcb2ee5ccd44fdc0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"dd88a4e9-9d49-42de-9e06-843511f3fdca","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-06-30 10:27:25 +0000 UTC FinishedAt: 2026-06-30 10:29:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow64rfd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1398b1014909618f65ff6bcebcb2ee5ccd44fdc0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nci_nfcc_loopback","nci_transceive","nci_send_data","nci_rx_data_packet","nci_hci_send_cmd","nci_hci_set_param","nci_hci_get_param","nci_core_conn_create_rsp_packet","nci_core_conn_close_rsp_packet","nci_rf_disc_rsp_packet","nci_core_conn_credits_ntf_packet","nci_rf_intf_activated_ntf_packet","nci_rf_deactivate_ntf_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1398b1014909618f65ff6bcebcb2ee5ccd44fdc0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"dd88a4e9-9d49-42de-9e06-843511f3fdca","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-06-30 10:27:25 +0000 UTC FinishedAt: 2026-06-30 10:28:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*8a5b6712-3560-4915-b8ad-7b2d8cd1d318,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow64rfd/series-workflow64rfd-build-action-1949188848/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow64rfd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1398b1014909618f65ff6bcebcb2ee5ccd44fdc0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nci_nfcc_loopback","nci_transceive","nci_send_data","nci_rx_data_packet","nci_hci_send_cmd","nci_hci_set_param","nci_hci_get_param","nci_core_conn_create_rsp_packet","nci_core_conn_close_rsp_packet","nci_rf_disc_rsp_packet","nci_core_conn_credits_ntf_packet","nci_rf_intf_activated_ntf_packet","nci_rf_deactivate_ntf_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1398b1014909618f65ff6bcebcb2ee5ccd44fdc0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"dd88a4e9-9d49-42de-9e06-843511f3fdca","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-06-30 10:29:08 +0000 UTC FinishedAt: 2026-06-30 13:30:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow64rfd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1398b1014909618f65ff6bcebcb2ee5ccd44fdc0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nci_nfcc_loopback","nci_transceive","nci_send_data","nci_rx_data_packet","nci_hci_send_cmd","nci_hci_set_param","nci_hci_get_param","nci_core_conn_create_rsp_packet","nci_core_conn_close_rsp_packet","nci_rf_disc_rsp_packet","nci_core_conn_credits_ntf_packet","nci_rf_intf_activated_ntf_packet","nci_rf_deactivate_ntf_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1398b1014909618f65ff6bcebcb2ee5ccd44fdc0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"dd88a4e9-9d49-42de-9e06-843511f3fdca","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-06-30 10:29:08 +0000 UTC FinishedAt: 2026-06-30 13:30:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nci_nfcc_loopback","nci_transceive","nci_send_data","nci_rx_data_packet","nci_hci_send_cmd","nci_hci_set_param","nci_hci_get_param","nci_core_conn_create_rsp_packet","nci_core_conn_close_rsp_packet","nci_rf_disc_rsp_packet","nci_core_conn_credits_ntf_packet","nci_rf_intf_activated_ntf_packet","nci_rf_deactivate_ntf_packet"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*123f0af8-2842-4a21-878c-b5b9e9980ab4,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*8a5b6712-3560-4915-b8ad-7b2d8cd1d318,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow64rfd/series-workflow64rfd-build-action-2048622399/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow64rfd/series-workflow64rfd-build-action-1949188848/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow64rfd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1398b1014909618f65ff6bcebcb2ee5ccd44fdc0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nci_nfcc_loopback","nci_transceive","nci_send_data","nci_rx_data_packet","nci_hci_send_cmd","nci_hci_set_param","nci_hci_get_param","nci_core_conn_create_rsp_packet","nci_core_conn_close_rsp_packet","nci_rf_disc_rsp_packet","nci_core_conn_credits_ntf_packet","nci_rf_intf_activated_ntf_packet","nci_rf_deactivate_ntf_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1398b1014909618f65ff6bcebcb2ee5ccd44fdc0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"dd88a4e9-9d49-42de-9e06-843511f3fdca","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-06-30 10:29:08 +0000 UTC FinishedAt: 2026-06-30 10:29:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow64rfd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1398b1014909618f65ff6bcebcb2ee5ccd44fdc0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nci_nfcc_loopback","nci_transceive","nci_send_data","nci_rx_data_packet","nci_hci_send_cmd","nci_hci_set_param","nci_hci_get_param","nci_core_conn_create_rsp_packet","nci_core_conn_close_rsp_packet","nci_rf_disc_rsp_packet","nci_core_conn_credits_ntf_packet","nci_rf_intf_activated_ntf_packet","nci_rf_deactivate_ntf_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1398b1014909618f65ff6bcebcb2ee5ccd44fdc0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"dd88a4e9-9d49-42de-9e06-843511f3fdca","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-06-30 10:29:08 +0000 UTC FinishedAt: 2026-06-30 10:29:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nci_nfcc_loopback","nci_transceive","nci_send_data","nci_rx_data_packet","nci_hci_send_cmd","nci_hci_set_param","nci_hci_get_param","nci_core_conn_create_rsp_packet","nci_core_conn_close_rsp_packet","nci_rf_disc_rsp_packet","nci_core_conn_credits_ntf_packet","nci_rf_intf_activated_ntf_packet","nci_rf_deactivate_ntf_packet"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow64rfd/series-workflow64rfd-convert-artifact-3477132525/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow64rfd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1398b1014909618f65ff6bcebcb2ee5ccd44fdc0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nci_nfcc_loopback","nci_transceive","nci_send_data","nci_rx_data_packet","nci_hci_send_cmd","nci_hci_set_param","nci_hci_get_param","nci_core_conn_create_rsp_packet","nci_core_conn_close_rsp_packet","nci_rf_disc_rsp_packet","nci_core_conn_credits_ntf_packet","nci_rf_intf_activated_ntf_packet","nci_rf_deactivate_ntf_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1398b1014909618f65ff6bcebcb2ee5ccd44fdc0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"dd88a4e9-9d49-42de-9e06-843511f3fdca","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-06-30 10:29:08 +0000 UTC FinishedAt: 2026-06-30 10:29:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow64rfd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1398b1014909618f65ff6bcebcb2ee5ccd44fdc0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nci_nfcc_loopback","nci_transceive","nci_send_data","nci_rx_data_packet","nci_hci_send_cmd","nci_hci_set_param","nci_hci_get_param","nci_core_conn_create_rsp_packet","nci_core_conn_close_rsp_packet","nci_rf_disc_rsp_packet","nci_core_conn_credits_ntf_packet","nci_rf_intf_activated_ntf_packet","nci_rf_deactivate_ntf_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1398b1014909618f65ff6bcebcb2ee5ccd44fdc0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"dd88a4e9-9d49-42de-9e06-843511f3fdca","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-06-30 10:29:08 +0000 UTC FinishedAt: 2026-06-30 10:29:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow64rfd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1398b1014909618f65ff6bcebcb2ee5ccd44fdc0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nci_nfcc_loopback","nci_transceive","nci_send_data","nci_rx_data_packet","nci_hci_send_cmd","nci_hci_set_param","nci_hci_get_param","nci_core_conn_create_rsp_packet","nci_core_conn_close_rsp_packet","nci_rf_disc_rsp_packet","nci_core_conn_credits_ntf_packet","nci_rf_intf_activated_ntf_packet","nci_rf_deactivate_ntf_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1398b1014909618f65ff6bcebcb2ee5ccd44fdc0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"dd88a4e9-9d49-42de-9e06-843511f3fdca","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-06-30 10:29:08 +0000 UTC FinishedAt: 2026-06-30 10:29:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow64rfd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1398b1014909618f65ff6bcebcb2ee5ccd44fdc0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nci_nfcc_loopback","nci_transceive","nci_send_data","nci_rx_data_packet","nci_hci_send_cmd","nci_hci_set_param","nci_hci_get_param","nci_core_conn_create_rsp_packet","nci_core_conn_close_rsp_packet","nci_rf_disc_rsp_packet","nci_core_conn_credits_ntf_packet","nci_rf_intf_activated_ntf_packet","nci_rf_deactivate_ntf_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1398b1014909618f65ff6bcebcb2ee5ccd44fdc0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"dd88a4e9-9d49-42de-9e06-843511f3fdca","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-06-30 10:29:18 +0000 UTC FinishedAt: 2026-06-30 13:30:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow64rfd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1398b1014909618f65ff6bcebcb2ee5ccd44fdc0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nci_nfcc_loopback","nci_transceive","nci_send_data","nci_rx_data_packet","nci_hci_send_cmd","nci_hci_set_param","nci_hci_get_param","nci_core_conn_create_rsp_packet","nci_core_conn_close_rsp_packet","nci_rf_disc_rsp_packet","nci_core_conn_credits_ntf_packet","nci_rf_intf_activated_ntf_packet","nci_rf_deactivate_ntf_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1398b1014909618f65ff6bcebcb2ee5ccd44fdc0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFC","NFC_NCI","NFC_VIRTUAL_NCI"],"series_id":"dd88a4e9-9d49-42de-9e06-843511f3fdca","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-06-30 10:29:18 +0000 UTC FinishedAt: 2026-06-30 13:30:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*123f0af8-2842-4a21-878c-b5b9e9980ab4,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*8a5b6712-3560-4915-b8ad-7b2d8cd1d318,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow64rfd/series-workflow64rfd-build-action-2048622399/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow64rfd/series-workflow64rfd-build-action-1949188848/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow64rfd/series-workflow64rfd-convert-artifact-3477132525/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}