Name: series-workflowvp7s2 Phase: Succeeded StartedAt: 2026-08-24 03:51:02 +0000 UTC FinishedAt: 2026-08-24 08:18:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvp7s2[0] Phase: Succeeded StartedAt: 2026-08-24 03:51:02 +0000 UTC FinishedAt: 2026-08-24 04:38:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvp7s2[0].run-triage Phase: Succeeded StartedAt: 2026-08-24 03:51:02 +0000 UTC FinishedAt: 2026-08-24 04:38:31 +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": "6776efe4a52f289a3fc18f8adf19b035a7d8e1bb", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IPV6" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "6776efe4a52f289a3fc18f8adf19b035a7d8e1bb", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IPV6" ], "series_id": "e7e0bb8d-bf58-45bd-933a-214f06568d18" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "tcp_rcv_listen_state_process", "do_ipv6_setsockopt" ], "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+CgkJCTx0ZD4yMDI2LzA4LzI0IDA0OjM3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0Y3BfcmN2X2xpc3Rlbl9zdGF0ZV9wcm9jZXNzJiMzNDssCiAgICAmIzM0O2RvX2lwdjZfc2V0c29ja29wdCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGltcGxlbWVudHMgbG9ja2xlc3MgVENQIGxpc3RlbmVyIHByb2Nlc3NpbmcgYW5kIGZpeGVzIHNldmVyYWwgaXNzdWVzIHJlbGF0ZWQgdG8gc29ja2V0IGNsb25pbmcgYW5kIHN0YXRlIGluaGVyaXRhbmNlIChlLmcuLCByZXNldHRpbmcgYHNrX3RzcV9mbGFnc2AsIGBwYWNrZXRzX291dGAsIGFuZCBgcGluZXQ2YCBpbiBjbG9uZWQgc29ja2V0cykuIFxuXG4xLiBUaGUgZmllbGRzIGJlaW5nIGV4cGxpY2l0bHkgemVyb2VkIG9yIHNldCB0byBOVUxMIGluIGBza19jbG9uZWAgYW5kIGB0Y3BfY3JlYXRlX29wZW5yZXFfY2hpbGRgIGRvIG5vdCByZXByZXNlbnQgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXkgYXJlIGFscmVhZHkgZnVsbHkgaW5pdGlhbGl6ZWQgdmlhIGBzb2NrX2NvcHlgICh3aGljaCBjb3BpZXMgdGhlIHBhcmVudCBzb2NrZXQmIzM5O3Mgc3RhdGUpLiBUaGUgY2hhbmdlcyBtZXJlbHkgcHJldmVudCB0aGUgY2hpbGQgc29ja2V0IGZyb20gaW5oZXJpdGluZyBzdGFsZSBvciBpbmNvcnJlY3QgdmFsdWVzIGZyb20gdGhlIGxpc3RlbmVyLlxuMi4gVGhlIGxvY2tsZXNzIGxpc3RlbmVyIHByb2Nlc3NpbmcgKGB0Y3BfdjRfcmN2X2xpc3RlbmApIGludHJvZHVjZXMgY29uY3VycmVuY3kgY2hhbmdlcy4gQW55IHJlc3VsdGluZyBidWdzIHdvdWxkIGJlIGRhdGEgcmFjZXMgKGNhdWdodCBieSBLQ1NBTikgb3IgdXNlLWFmdGVyLWZyZWUvbWVtb3J5IGNvcnJ1cHRpb24gKGNhdWdodCBieSBLQVNBTikuXG4zLiBUaGUgYElQVjZfQUREUkZPUk1gIGFuZCBgZG9faXB2Nl9zZXRzb2Nrb3B0YCBjaGFuZ2VzIGFkZHJlc3MgbG9naWMgYnVncyBhbmQgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvcywgd2hpY2ggYXJlIHdlbGwgd2l0aGluIHRoZSBkb21haW4gb2YgS0FTQU4uXG5cblRoZXJlIGFyZSBubyBuZXcgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vIG5ldyBhbGxvY2F0aW9ucyBsZWZ0IHVuaW5pdGlhbGl6ZWQsIGFuZCBubyBjaGFuZ2VzIHRvIGJvdW5kcyBjaGVja2luZyB0aGF0IHdvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgVENQIGxpc3RlbmluZyBzb2NrZXQgcGFja2V0IHByb2Nlc3NpbmcgYnkgaW50cm9kdWNpbmcgYHRjcF9yY3ZfbGlzdGVuX3N0YXRlX3Byb2Nlc3NgIGFuZCBsb2NrbGVzcyBsaXN0ZW4gcmVjZWl2ZSBwYXRocyAoYHRjcF92NF9yY3ZfbGlzdGVuYCwgYHRjcF92Nl9yY3ZfbGlzdGVuYCkuIEl0IGFsc28gYWRkcyBjaGVja3MgaW4gYGRvX2lwdjZfc2V0c29ja29wdGAgZm9yIGBJUFY2X0FERFJGT1JNYCBvbiBUQ1Agc29ja2V0cyB3aXRoIHBlbmRpbmcgY29ubmVjdGlvbiByZXF1ZXN0cy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgY29yZSBUQ1Agc3RhY2sgYW5kIElQdjYgc29ja2V0IG9wdGlvbnMsIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgYW5kIG5ldHdvcmsgdHJhZmZpYywgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDQ6Mzc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA4Y2U1ZDU2YzA2Zjk2ODZlMzk4Y2VhNzc4OWU1MTVmYmYzMWI1YWQ4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMjQgMDQ6Mzc6MTEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvdGNwLmggYi9pbmNsdWRlL25ldC90Y3AuaFxuaW5kZXggMmM1Yjg4OTUzMGI1NS4uYWRkNDM4ZDY1NjFiZSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L3RjcC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC90Y3AuaFxuQEAgLTM5Miw2ICYjNDM7MzkyLDggQEAgdm9pZCB0Y3Bfd3JpdGVfdGltZXJfaGFuZGxlcihzdHJ1Y3Qgc29jayAqc2spO1xuIHZvaWQgdGNwX2RlbGFja190aW1lcl9oYW5kbGVyKHN0cnVjdCBzb2NrICpzayk7XG4gaW50IHRjcF9pb2N0bChzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIGludCAqa2FyZyk7XG4gZW51bSBza2JfZHJvcF9yZWFzb24gdGNwX3Jjdl9zdGF0ZV9wcm9jZXNzKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG4mIzQzO2VudW0gc2tiX2Ryb3BfcmVhc29uIHRjcF9yY3ZfbGlzdGVuX3N0YXRlX3Byb2Nlc3Moc3RydWN0IHNvY2sgKnNrLFxuJiM0MztcdFx0XHRcdFx0XHQgIHN0cnVjdCBza19idWZmICpza2IpO1xuIHZvaWQgdGNwX3Jjdl9lc3RhYmxpc2hlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpO1xuIHZvaWQgdGNwX3JjdmJ1Zl9ncm93KHN0cnVjdCBzb2NrICpzaywgdTMyIG5ld3ZhbCk7XG4gdm9pZCB0Y3BfcmN2X3NwYWNlX2FkanVzdChzdHJ1Y3Qgc29jayAqc2spO1xuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NvY2suYyBiL25ldC9jb3JlL3NvY2suY1xuaW5kZXggMWFkNDE5MDRkYjI1Yi4uMDZmYmIxOTgyNGUyNiAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL3NvY2suY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvc29jay5jXG5AQCAtMjQ3OSw3ICYjNDM7MjQ3OSw3IEBAIHN0YXRpYyB2b2lkIHNrX2luaXRfY29tbW9uKHN0cnVjdCBzb2NrICpzaylcbiBzdHJ1Y3Qgc29jayAqc2tfY2xvbmUoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBjb25zdCBnZnBfdCBwcmlvcml0eSxcbiBcdFx0ICAgICAgYm9vbCBsb2NrKVxuIHtcbi1cdHN0cnVjdCBwcm90byAqcHJvdCA9IFJFQURfT05DRShzay1cdTAwM2Vza19wcm90KTtcbiYjNDM7XHRzdHJ1Y3QgcHJvdG8gKnByb3QgPSBzay1cdTAwM2Vza19wcm90X2NyZWF0b3I7XG4gXHRzdHJ1Y3Qgc2tfZmlsdGVyICpmaWx0ZXI7XG4gXHRib29sIGlzX2NoYXJnZWQgPSB0cnVlO1xuIFx0c3RydWN0IHNvY2sgKm5ld3NrO1xuQEAgLTI1MzMsNiAmIzQzOzI1MzMsNyBAQCBzdHJ1Y3Qgc29jayAqc2tfY2xvbmUoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBjb25zdCBnZnBfdCBwcmlvcml0eSxcbiBcdG5ld3NrLVx1MDAzZXNrX3Jlc2VydmVkX21lbSAgPSAwO1xuIFx0REVCVUdfTkVUX1dBUk5fT05fT05DRShuZXdzay1cdTAwM2Vza19kcm9wX2NvdW50ZXJzKTtcbiBcdHNrX2Ryb3BzX3Jlc2V0KG5ld3NrKTtcbiYjNDM7XHRuZXdzay1cdTAwM2Vza190c3FfZmxhZ3NcdD0gMDtcbiBcdG5ld3NrLVx1MDAzZXNrX3NlbmRfaGVhZFx0PSBOVUxMO1xuIFx0bmV3c2stXHUwMDNlc2tfdXNlcmxvY2tzXHQ9IHNrLVx1MDAzZXNrX3VzZXJsb2NrcyBcdTAwMjYgflNPQ0tfQklORFBPUlRfTE9DSztcbiBcdGF0b21pY19zZXQoXHUwMDI2bmV3c2stXHUwMDNlc2tfemNrZXksIDApO1xuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9pbnB1dC5jIGIvbmV0L2lwdjQvdGNwX2lucHV0LmNcbmluZGV4IDBmNjBhMWRiZjkyNzQuLjc3YWYxOGZiYTY2YjQgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC90Y3BfaW5wdXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvdGNwX2lucHV0LmNcbkBAIC03MTQxLDYgJiM0Mzs3MTQxLDQyIEBAIHN0YXRpYyB2b2lkIHRjcF9yY3Zfc3lucmVjdl9zdGF0ZV9mYXN0b3BlbihzdHJ1Y3Qgc29jayAqc2spXG4gXHR0Y3BfcmVhcm1fcnRvKHNrKTtcbiB9XG4gXG4mIzQzO2VudW0gc2tiX2Ryb3BfcmVhc29uIHRjcF9yY3ZfbGlzdGVuX3N0YXRlX3Byb2Nlc3Moc3RydWN0IHNvY2sgKnNrLFxuJiM0MztcdFx0XHRcdFx0XHQgIHN0cnVjdCBza19idWZmICpza2IpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgdGNwaGRyICp0aCA9IHRjcF9oZHIoc2tiKTtcbiYjNDM7XHRTS0JfRFIocmVhc29uKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHRoLVx1MDAzZWFjaylcbiYjNDM7XHRcdHJldHVybiBTS0JfRFJPUF9SRUFTT05fVENQX0ZMQUdTO1xuJiM0MztcbiYjNDM7XHRpZiAodGgtXHUwMDNlcnN0KSB7XG4mIzQzO1x0XHRTS0JfRFJfU0VUKHJlYXNvbiwgVENQX1JFU0VUKTtcbiYjNDM7XHRcdGdvdG8gZGlzY2FyZDtcbiYjNDM7XHR9XG4mIzQzO1x0aWYgKHRoLVx1MDAzZXN5bikge1xuJiM0MztcdFx0aWYgKHRoLVx1MDAzZWZpbikge1xuJiM0MztcdFx0XHRTS0JfRFJfU0VUKHJlYXNvbiwgVENQX0ZMQUdTKTtcbiYjNDM7XHRcdFx0Z290byBkaXNjYXJkO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0LyogSXQgaXMgcG9zc2libGUgdGhhdCB3ZSBwcm9jZXNzIFNZTiBwYWNrZXRzIGZyb20gYmFja2xvZyxcbiYjNDM7XHRcdCAqIHNvIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRvIGRpc2FibGUgQkggYW5kIFJDVSByaWdodCB0aGVyZS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0cmN1X3JlYWRfbG9jaygpO1xuJiM0MztcdFx0bG9jYWxfYmhfZGlzYWJsZSgpO1xuJiM0MztcdFx0aW5ldF9jc2soc2spLVx1MDAzZWljc2tfYWZfb3BzLVx1MDAzZWNvbm5fcmVxdWVzdChzaywgc2tiKTtcbiYjNDM7XHRcdGxvY2FsX2JoX2VuYWJsZSgpO1xuJiM0MztcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4mIzQzO1xuJiM0MztcdFx0Y29uc3VtZV9za2Ioc2tiKTtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XHRTS0JfRFJfU0VUKHJlYXNvbiwgVENQX0ZMQUdTKTtcbiYjNDM7ZGlzY2FyZDpcbiYjNDM7XHR0Y3BfZHJvcF9yZWFzb24oc2ssIHNrYiwgcmVhc29uKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiAvKlxuICAqXHRUaGlzIGZ1bmN0aW9uIGltcGxlbWVudHMgdGhlIHJlY2VpdmluZyBwcm9jZWR1cmUgb2YgUkZDIDc5MyBmb3JcbiAgKlx0YWxsIHN0YXRlcyBleGNlcHQgRVNUQUJMSVNIRUQgYW5kIFRJTUVfV0FJVC5cbkBAIC03MTUyLDcgJiM0Mzs3MTg4LDYgQEAgZW51bSBza2JfZHJvcF9yZWFzb25cbiB0Y3BfcmN2X3N0YXRlX3Byb2Nlc3Moc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbiBcdHN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spO1xuLVx0c3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xuIFx0Y29uc3Qgc3RydWN0IHRjcGhkciAqdGggPSB0Y3BfaGRyKHNrYik7XG4gXHRzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXE7XG4gXHRpbnQgcXVldWVkID0gMDtcbkBAIC03MTY0LDMyICYjNDM7NzE5OSw3IEBAIHRjcF9yY3Zfc3RhdGVfcHJvY2VzcyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRcdGdvdG8gZGlzY2FyZDtcbiBcbiBcdGNhc2UgVENQX0xJU1RFTjpcbi1cdFx0aWYgKHRoLVx1MDAzZWFjaylcbi1cdFx0XHRyZXR1cm4gU0tCX0RST1BfUkVBU09OX1RDUF9GTEFHUztcbi1cbi1cdFx0aWYgKHRoLVx1MDAzZXJzdCkge1xuLVx0XHRcdFNLQl9EUl9TRVQocmVhc29uLCBUQ1BfUkVTRVQpO1xuLVx0XHRcdGdvdG8gZGlzY2FyZDtcbi1cdFx0fVxuLVx0XHRpZiAodGgtXHUwMDNlc3luKSB7XG4tXHRcdFx0aWYgKHRoLVx1MDAzZWZpbikge1xuLVx0XHRcdFx0U0tCX0RSX1NFVChyZWFzb24sIFRDUF9GTEFHUyk7XG4tXHRcdFx0XHRnb3RvIGRpc2NhcmQ7XG4tXHRcdFx0fVxuLVx0XHRcdC8qIEl0IGlzIHBvc3NpYmxlIHRoYXQgd2UgcHJvY2VzcyBTWU4gcGFja2V0cyBmcm9tIGJhY2tsb2csXG4tXHRcdFx0ICogc28gd2UgbmVlZCB0byBtYWtlIHN1cmUgdG8gZGlzYWJsZSBCSCBhbmQgUkNVIHJpZ2h0IHRoZXJlLlxuLVx0XHRcdCAqL1xuLVx0XHRcdHJjdV9yZWFkX2xvY2soKTtcbi1cdFx0XHRsb2NhbF9iaF9kaXNhYmxlKCk7XG4tXHRcdFx0aWNzay1cdTAwM2VpY3NrX2FmX29wcy1cdTAwM2Vjb25uX3JlcXVlc3Qoc2ssIHNrYik7XG4tXHRcdFx0bG9jYWxfYmhfZW5hYmxlKCk7XG4tXHRcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4tXG4tXHRcdFx0Y29uc3VtZV9za2Ioc2tiKTtcbi1cdFx0XHRyZXR1cm4gMDtcbi1cdFx0fVxuLVx0XHRTS0JfRFJfU0VUKHJlYXNvbiwgVENQX0ZMQUdTKTtcbi1cdFx0Z290byBkaXNjYXJkO1xuJiM0MztcdFx0cmV0dXJuIHRjcF9yY3ZfbGlzdGVuX3N0YXRlX3Byb2Nlc3Moc2ssIHNrYik7XG4gXG4gXHRjYXNlIFRDUF9TWU5fU0VOVDpcbiBcdFx0dHAtXHUwMDNlcnhfb3B0LnNhd190c3RhbXAgPSAwO1xuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9pcHY0LmMgYi9uZXQvaXB2NC90Y3BfaXB2NC5jXG5pbmRleCAxOTBjN2FmNGNmOTIzLi4yZmE4OTU4MzgwYTViIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvdGNwX2lwdjQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvdGNwX2lwdjQuY1xuQEAgLTE3MTQsNiAmIzQzOzE3MTQsMTQgQEAgc3RydWN0IHNvY2sgKnRjcF92NF9zeW5fcmVjdl9zb2NrKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0aW5ldF9jc2sobmV3c2spLVx1MDAzZWljc2tfZXh0X2hkcl9sZW4gPSBpbmV0X29wdC1cdTAwM2VvcHQub3B0bGVuO1xuIFx0YXRvbWljX3NldChcdTAwMjZuZXdpbmV0LVx1MDAzZWluZXRfaWQsIGdldF9yYW5kb21fdTE2KCkpO1xuIFxuJiM0MzsjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbiYjNDM7XHQvKiBOZXZlciBpbmhlcml0IHRoZSBsaXN0ZW5lciYjMzk7cyBpcHY2X3BpbmZvOyBJUFY2X0FERFJGT1JNIGxlYXZlcyBpdCBzZXRcbiYjNDM7XHQgKiBvbiBhbiBBRl9JTkVUIHNvY2tldC4gIHRjcF92Nl9tYXBwZWRfY2hpbGRfaW5pdCgpIGluc3RhbGxzIG91ciBvd24uXG4mIzQzO1x0ICovXG4mIzQzO1x0bmV3aW5ldC1cdTAwM2VwaW5ldDYgPSBOVUxMO1xuJiM0MztcdG5ld2luZXQtXHUwMDNlaXB2Nl9mbF9saXN0ID0gTlVMTDtcbiYjNDM7I2VuZGlmXG4mIzQzO1xuIFx0LyogU2V0IFRvUyBvZiB0aGUgbmV3IHNvY2tldCBiYXNlZCB1cG9uIHRoZSB2YWx1ZSBvZiBpbmNvbWluZyBTWU4uXG4gXHQgKiBFQ1QgYml0cyBhcmUgc2V0IGxhdGVyIGluIHRjcF9pbml0X3RyYW5zZmVyKCkuXG4gXHQgKi9cbkBAIC0xODIwLDcgJiM0MzsxODI4LDcgQEAgdTE2IHRjcF92NF9nZXRfc3luY29va2llKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGlwaGRyICppcGgsXG4gSU5ESVJFQ1RfQ0FMTEFCTEVfREVDTEFSRShzdHJ1Y3QgZHN0X2VudHJ5ICppcHY0X2RzdF9jaGVjayhzdHJ1Y3QgZHN0X2VudHJ5ICosXG4gXHRcdFx0XHRcdFx0XHQgICB1MzIpKTtcbiAvKiBUaGUgc29ja2V0IG11c3QgaGF2ZSBpdCYjMzk7cyBzcGlubG9jayBoZWxkIHdoZW4gd2UgZ2V0XG4tICogaGVyZSwgdW5sZXNzIGl0IGlzIGEgVENQX0xJU1RFTiBzb2NrZXQuXG4mIzQzOyAqIGhlcmUuXG4gICpcbiAgKiBXZSBoYXZlIGEgcG90ZW50aWFsIGRvdWJsZS1sb2NrIGNhc2UgaGVyZSwgc28gZXZlbiB3aGVuXG4gICogZG9pbmcgYmFja2xvZyBwcm9jZXNzaW5nIHdlIHVzZSB0aGUgQkggbG9ja2luZyBzY2hlbWUuXG5AQCAtMTg5OCw2ICYjNDM7MTkwNiw0NiBAQCBpbnQgdGNwX3Y0X2RvX3JjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRnb3RvIGRpc2NhcmQ7XG4gfVxuIFxuJiM0MzsvKiBAc2sgaXMgbm90IGxvY2tlZCBoZXJlIGFuZCBjYW4gbGVhdmUgVENQX0xJU1RFTjsgZG8gbm90IHRlc3Qgc2tfc3RhdGUuICovXG4mIzQzO3N0YXRpYyBub2lubGluZSBpbnQgdGNwX3Y0X3Jjdl9saXN0ZW4oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuJiM0Mzt7XG4mIzQzO1x0ZW51bSBza2JfZHJvcF9yZWFzb24gcmVhc29uO1xuJiM0MztcdHN0cnVjdCBzb2NrICpuc2s7XG4mIzQzO1xuJiM0MztcdHJlYXNvbiA9IHBzcF9za19yeF9wb2xpY3lfY2hlY2soc2ssIHNrYik7XG4mIzQzO1x0aWYgKHJlYXNvbilcbiYjNDM7XHRcdGdvdG8gZXJyX2Rpc2NhcmQ7XG4mIzQzO1xuJiM0MztcdGlmICh0Y3BfY2hlY2tzdW1fY29tcGxldGUoc2tiKSlcbiYjNDM7XHRcdGdvdG8gY3N1bV9lcnI7XG4mIzQzO1xuJiM0MztcdG5zayA9IHRjcF92NF9jb29raWVfY2hlY2soc2ssIHNrYik7XG4mIzQzO1x0aWYgKCFuc2spXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKG5zayAhPSBzaykge1xuJiM0MztcdFx0cmVhc29uID0gdGNwX2NoaWxkX3Byb2Nlc3Moc2ssIG5zaywgc2tiKTtcbiYjNDM7XHRcdHNvY2tfcHV0KG5zayk7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdHJlYXNvbiA9IHRjcF9yY3ZfbGlzdGVuX3N0YXRlX3Byb2Nlc3Moc2ssIHNrYik7XG4mIzQzO1x0fVxuJiM0MztcdGlmICghcmVhc29uKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdHRjcF92NF9zZW5kX3Jlc2V0KHNrLCBza2IsIHNrX3JzdF9jb252ZXJ0X2Ryb3BfcmVhc29uKHJlYXNvbikpO1xuJiM0MztkaXNjYXJkOlxuJiM0MztcdHNrX3NrYl9yZWFzb25fZHJvcChzaywgc2tiLCByZWFzb24pO1xuJiM0MztcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7Y3N1bV9lcnI6XG4mIzQzO1x0cmVhc29uID0gU0tCX0RST1BfUkVBU09OX1RDUF9DU1VNO1xuJiM0MztcdHRyYWNlX3RjcF9iYWRfY3N1bShza2IpO1xuJiM0MztcdFRDUF9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBUQ1BfTUlCX0NTVU1FUlJPUlMpO1xuJiM0MztlcnJfZGlzY2FyZDpcbiYjNDM7XHRUQ1BfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgVENQX01JQl9JTkVSUlMpO1xuJiM0MztcdGdvdG8gZGlzY2FyZDtcbiYjNDM7fVxuJiM0MztcbiBlbnVtIHNrYl9kcm9wX3JlYXNvbiB0Y3BfYWRkX2JhY2tsb2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbiBcdHUzMiB0YWlsX2dzb19zaXplLCB0YWlsX2dzb19zZWdzO1xuQEAgLTIyMzUsNyAmIzQzOzIyODMsNyBAQCBpbnQgdGNwX3Y0X3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0c2tiLVx1MDAzZWRldiA9IE5VTEw7XG4gXG4gXHRpZiAoc2stXHUwMDNlc2tfc3RhdGUgPT0gVENQX0xJU1RFTikge1xuLVx0XHRyZXQgPSB0Y3BfdjRfZG9fcmN2KHNrLCBza2IpO1xuJiM0MztcdFx0cmV0ID0gdGNwX3Y0X3Jjdl9saXN0ZW4oc2ssIHNrYik7XG4gXHRcdGdvdG8gcHV0X2FuZF9yZXR1cm47XG4gXHR9XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jIGIvbmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jXG5pbmRleCAxMjI1NGU2ZWIyZjM0Li4yZmRlMTk2ZGQzMDJmIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmNcbkBAIC01OTEsNiAmIzQzOzU5MSw3IEBAIHN0cnVjdCBzb2NrICp0Y3BfY3JlYXRlX29wZW5yZXFfY2hpbGQoY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxuIFx0bmV3dHAtXHUwMDNldG90YWxfcmV0cmFucyA9IHJlcS1cdTAwM2VudW1fcmV0cmFucztcbiBcbiBcdHRjcF9pbml0X3htaXRfdGltZXJzKG5ld3NrKTtcbiYjNDM7XHRuZXd0cC1cdTAwM2VvdXRfb2Zfb3JkZXJfcXVldWUgPSBSQl9ST09UO1xuIFx0V1JJVEVfT05DRShuZXd0cC1cdTAwM2V3cml0ZV9zZXEsIG5ld3RwLVx1MDAzZXB1c2hlZF9zZXEgPSB0cmVxLVx1MDAzZXNudF9pc24gJiM0MzsgMSk7XG4gXG4gXHRpZiAoc29ja19mbGFnKG5ld3NrLCBTT0NLX0tFRVBPUEVOKSlcbkBAIC02NTksNiAmIzQzOzY2MCwxMiBAQCBzdHJ1Y3Qgc29jayAqdGNwX2NyZWF0ZV9vcGVucmVxX2NoaWxkKGNvbnN0IHN0cnVjdCBzb2NrICpzayxcbiBcdHRjcF9lY25fb3BlbnJlcV9jaGlsZChuZXdzaywgcmVxLCBza2IpO1xuIFx0bmV3dHAtXHUwMDNlZmFzdG9wZW5fcmVxID0gTlVMTDtcbiBcdFJDVV9JTklUX1BPSU5URVIobmV3dHAtXHUwMDNlZmFzdG9wZW5fcnNrLCBOVUxMKTtcbiYjNDM7XHRuZXd0cC1cdTAwM2VwYWNrZXRzX291dCA9IDA7XG4mIzQzO1x0bmV3dHAtXHUwMDNlcmV0cmFuc19vdXQgPSAwO1xuJiM0MztcdG5ld3RwLVx1MDAzZXNhY2tlZF9vdXQgPSAwO1xuJiM0MztcdG5ld3RwLVx1MDAzZWxvc3Rfb3V0ID0gMDtcbiYjNDM7XHRuZXd0cC1cdTAwM2VyZXRyYW5zbWl0X3NrYl9oaW50ID0gTlVMTDtcbiYjNDM7XHRuZXd0cC1cdTAwM2VoaWdoZXN0X3NhY2sgPSBOVUxMO1xuIFxuIFx0bmV3dHAtXHUwMDNlYnBmX2NoZ19jY19pbnByb2dyZXNzID0gMDtcbiBcdHRjcF9icGZfY2xvbmUoc2ssIG5ld3NrKTtcbkBAIC05NzQsNyAmIzQzOzk4MSw3IEBAIHN0cnVjdCBzb2NrICp0Y3BfY2hlY2tfcmVxKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0dGNwX3Jlc2V0KHNrLCBza2IpO1xuIFx0fVxuIFx0aWYgKCFmYXN0b3Blbikge1xuLVx0XHRib29sIHVubGlua2VkID0gaW5ldF9jc2tfcmVxc2tfcXVldWVfZHJvcChzaywgcmVxKTtcbiYjNDM7XHRcdGJvb2wgdW5saW5rZWQgPSBpbmV0X2Nza19yZXFza19xdWV1ZV9kcm9wKHJlcS1cdTAwM2Vyc2tfbGlzdGVuZXIsIHJlcSk7XG4gXG4gXHRcdGlmICh1bmxpbmtlZClcbiBcdFx0XHRfX05FVF9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBMSU5VWF9NSUJfRU1CUllPTklDUlNUUyk7XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvYWZfaW5ldDYuYyBiL25ldC9pcHY2L2FmX2luZXQ2LmNcbmluZGV4IDI4MjkxMmExMTk5OTkuLjY4YjMzMGY2OTQxZDAgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9hZl9pbmV0Ni5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9hZl9pbmV0Ni5jXG5AQCAtNDc5LDYgJiM0Mzs0NzksMTAgQEAgdm9pZCBpbmV0Nl9jbGVhbnVwX3NvY2soc3RydWN0IHNvY2sgKnNrKVxuIFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiBcdHN0cnVjdCBpcHY2X3R4b3B0aW9ucyAqb3B0O1xuIFxuJiM0MztcdC8qIEFGX0lORVQgY2hpbGQgb2YgYW4gSVBWNl9BRERSRk9STSYjMzk7ZWQgbGlzdGVuZXI6IG5vdGhpbmcgb2YgaXRzIG93bi4gKi9cbiYjNDM7XHRpZiAoIW5wKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiBcdC8qIFJlbGVhc2Ugcnggb3B0aW9ucyAqL1xuIFxuIFx0c2tiID0geGNoZyhcdTAwMjZucC1cdTAwM2Vwa3RvcHRpb25zLCBOVUxMKTtcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMgYi9uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmNcbmluZGV4IGI0Yzk3NzQzNGMyZTAuLjZkMmRkOWFlNDZhOTYgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L2lwdjZfc29ja2dsdWUuY1xuQEAgLTU4Nyw2ICYjNDM7NTg3LDIxIEBAIGludCBkb19pcHY2X3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuIFx0XHRcdFx0YnJlYWs7XG4gXHRcdFx0fVxuIFxuJiM0MztcdFx0XHRpZiAoc2stXHUwMDNlc2tfcHJvdG9jb2wgPT0gSVBQUk9UT19UQ1ApIHtcbiYjNDM7XHRcdFx0XHRpZiAoaW5ldF9jc2tfcmVxc2tfcXVldWVfbGVuKHNrKSkge1xuJiM0MztcdFx0XHRcdFx0cmV0diA9IC1FQlVTWTtcbiYjNDM7XHRcdFx0XHRcdGJyZWFrO1xuJiM0MztcdFx0XHRcdH1cbiYjNDM7XHRcdFx0XHQvKiBBIFNZTiB0aGF0IGZvdW5kIHRoaXMgc29ja2V0IHdoaWxlIGl0IHdhc1xuJiM0MztcdFx0XHRcdCAqIHN0aWxsIGxpc3RlbmluZyBtYXkgbm90IGJlIGNvdW50ZWQgeWV0LlxuJiM0MztcdFx0XHRcdCAqL1xuJiM0MztcdFx0XHRcdHN5bmNocm9uaXplX3JjdSgpO1xuJiM0MztcdFx0XHRcdGlmIChpbmV0X2Nza19yZXFza19xdWV1ZV9sZW4oc2spKSB7XG4mIzQzO1x0XHRcdFx0XHRyZXR2ID0gLUVCVVNZO1xuJiM0MztcdFx0XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRcdFx0fVxuJiM0MztcdFx0XHR9XG4mIzQzO1xuIFx0XHRcdF9faXB2Nl9zb2NrX21jX2Nsb3NlKHNrKTtcbiBcdFx0XHRfX2lwdjZfc29ja19hY19jbG9zZShzayk7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvdGNwX2lwdjYuYyBiL25ldC9pcHY2L3RjcF9pcHY2LmNcbmluZGV4IDllOTE1NWIxYjNhYTcuLmEyZGVkYTlhNDI1OGIgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni90Y3BfaXB2Ni5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni90Y3BfaXB2Ni5jXG5AQCAtMTU1Niw3ICYjNDM7MTU1Niw3IEBAIHN0YXRpYyBzdHJ1Y3Qgc29jayAqdGNwX3Y2X3N5bl9yZWN2X3NvY2soY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqXG4gSU5ESVJFQ1RfQ0FMTEFCTEVfREVDTEFSRShzdHJ1Y3QgZHN0X2VudHJ5ICppcHY0X2RzdF9jaGVjayhzdHJ1Y3QgZHN0X2VudHJ5ICosXG4gXHRcdFx0XHRcdFx0XHQgICB1MzIpKTtcbiAvKiBUaGUgc29ja2V0IG11c3QgaGF2ZSBpdCYjMzk7cyBzcGlubG9jayBoZWxkIHdoZW4gd2UgZ2V0XG4tICogaGVyZSwgdW5sZXNzIGl0IGlzIGEgVENQX0xJU1RFTiBzb2NrZXQuXG4mIzQzOyAqIGhlcmUuXG4gICpcbiAgKiBXZSBoYXZlIGEgcG90ZW50aWFsIGRvdWJsZS1sb2NrIGNhc2UgaGVyZSwgc28gZXZlbiB3aGVuXG4gICogZG9pbmcgYmFja2xvZyBwcm9jZXNzaW5nIHdlIHVzZSB0aGUgQkggbG9ja2luZyBzY2hlbWUuXG5AQCAtMTcwNCw2ICYjNDM7MTcwNCw0NiBAQCBpbnQgdGNwX3Y2X2RvX3JjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzOy8qIEBzayBpcyBub3QgbG9ja2VkIGhlcmUgYW5kIGNhbiBsZWF2ZSBUQ1BfTElTVEVOOyBkbyBub3QgdGVzdCBza19zdGF0ZS4gKi9cbiYjNDM7c3RhdGljIG5vaW5saW5lIGludCB0Y3BfdjZfcmN2X2xpc3RlbihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4mIzQzO3tcbiYjNDM7XHRlbnVtIHNrYl9kcm9wX3JlYXNvbiByZWFzb247XG4mIzQzO1x0c3RydWN0IHNvY2sgKm5zaztcbiYjNDM7XG4mIzQzO1x0cmVhc29uID0gcHNwX3NrX3J4X3BvbGljeV9jaGVjayhzaywgc2tiKTtcbiYjNDM7XHRpZiAocmVhc29uKVxuJiM0MztcdFx0Z290byBlcnJfZGlzY2FyZDtcbiYjNDM7XG4mIzQzO1x0aWYgKHRjcF9jaGVja3N1bV9jb21wbGV0ZShza2IpKVxuJiM0MztcdFx0Z290byBjc3VtX2VycjtcbiYjNDM7XG4mIzQzO1x0bnNrID0gdGNwX3Y2X2Nvb2tpZV9jaGVjayhzaywgc2tiKTtcbiYjNDM7XHRpZiAoIW5zaylcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRpZiAobnNrICE9IHNrKSB7XG4mIzQzO1x0XHRyZWFzb24gPSB0Y3BfY2hpbGRfcHJvY2VzcyhzaywgbnNrLCBza2IpO1xuJiM0MztcdFx0c29ja19wdXQobnNrKTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0cmVhc29uID0gdGNwX3Jjdl9saXN0ZW5fc3RhdGVfcHJvY2Vzcyhzaywgc2tiKTtcbiYjNDM7XHR9XG4mIzQzO1x0aWYgKCFyZWFzb24pXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0dGNwX3Y2X3NlbmRfcmVzZXQoc2ssIHNrYiwgc2tfcnN0X2NvbnZlcnRfZHJvcF9yZWFzb24ocmVhc29uKSk7XG4mIzQzO2Rpc2NhcmQ6XG4mIzQzO1x0c2tfc2tiX3JlYXNvbl9kcm9wKHNrLCBza2IsIHJlYXNvbik7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO1xuJiM0Mztjc3VtX2VycjpcbiYjNDM7XHRyZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fVENQX0NTVU07XG4mIzQzO1x0dHJhY2VfdGNwX2JhZF9jc3VtKHNrYik7XG4mIzQzO1x0VENQX0lOQ19TVEFUUyhzb2NrX25ldChzayksIFRDUF9NSUJfQ1NVTUVSUk9SUyk7XG4mIzQzO2Vycl9kaXNjYXJkOlxuJiM0MztcdFRDUF9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBUQ1BfTUlCX0lORVJSUyk7XG4mIzQzO1x0Z290byBkaXNjYXJkO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIHRjcF92Nl9maWxsX2NiKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBpcHY2aGRyICpoZHIsXG4gXHRcdFx0ICAgY29uc3Qgc3RydWN0IHRjcGhkciAqdGgpXG4ge1xuQEAgLTE4OTEsNyAmIzQzOzE5MzEsNyBAQCBJTkRJUkVDVF9DQUxMQUJMRV9TQ09QRSBpbnQgdGNwX3Y2X3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0c2tiLVx1MDAzZWRldiA9IE5VTEw7XG4gXG4gXHRpZiAoc2stXHUwMDNlc2tfc3RhdGUgPT0gVENQX0xJU1RFTikge1xuLVx0XHRyZXQgPSB0Y3BfdjZfZG9fcmN2KHNrLCBza2IpO1xuJiM0MztcdFx0cmV0ID0gdGNwX3Y2X3Jjdl9saXN0ZW4oc2ssIHNrYik7XG4gXHRcdGdvdG8gcHV0X2FuZF9yZXR1cm47XG4gXHR9XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDQ6Mzc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0Y3BfcmN2X2xpc3Rlbl9zdGF0ZV9wcm9jZXNzJiMzNDssCiAgICAmIzM0O2RvX2lwdjZfc2V0c29ja29wdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBUQ1AgbGlzdGVuaW5nIHNvY2tldCBwYWNrZXQgcHJvY2Vzc2luZyBieSBpbnRyb2R1Y2luZyBgdGNwX3Jjdl9saXN0ZW5fc3RhdGVfcHJvY2Vzc2AgYW5kIGxvY2tsZXNzIGxpc3RlbiByZWNlaXZlIHBhdGhzIChgdGNwX3Y0X3Jjdl9saXN0ZW5gLCBgdGNwX3Y2X3Jjdl9saXN0ZW5gKS4gSXQgYWxzbyBhZGRzIGNoZWNrcyBpbiBgZG9faXB2Nl9zZXRzb2Nrb3B0YCBmb3IgYElQVjZfQUREUkZPUk1gIG9uIFRDUCBzb2NrZXRzIHdpdGggcGVuZGluZyBjb25uZWN0aW9uIHJlcXVlc3RzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBjb3JlIFRDUCBzdGFjayBhbmQgSVB2NiBzb2NrZXQgb3B0aW9ucywgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSBhbmQgbmV0d29yayB0cmFmZmljLCBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDhjZTVkNTZjMDZmOTY4NmUzOThjZWE3Nzg5ZTUxNWZiZjMxYjVhZDgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAyNCAwNDozNzoxMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3RjcC5oIGIvaW5jbHVkZS9uZXQvdGNwLmgKaW5kZXggMmM1Yjg4OTUzMGI1NS4uYWRkNDM4ZDY1NjFiZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvdGNwLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvdGNwLmgKQEAgLTM5Miw2ICYjNDM7MzkyLDggQEAgdm9pZCB0Y3Bfd3JpdGVfdGltZXJfaGFuZGxlcihzdHJ1Y3Qgc29jayAqc2spOwogdm9pZCB0Y3BfZGVsYWNrX3RpbWVyX2hhbmRsZXIoc3RydWN0IHNvY2sgKnNrKTsKIGludCB0Y3BfaW9jdGwoc3RydWN0IHNvY2sgKnNrLCBpbnQgY21kLCBpbnQgKmthcmcpOwogZW51bSBza2JfZHJvcF9yZWFzb24gdGNwX3Jjdl9zdGF0ZV9wcm9jZXNzKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiYjNDM7ZW51bSBza2JfZHJvcF9yZWFzb24gdGNwX3Jjdl9saXN0ZW5fc3RhdGVfcHJvY2VzcyhzdHJ1Y3Qgc29jayAqc2ssCiYjNDM7CQkJCQkJICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIHZvaWQgdGNwX3Jjdl9lc3RhYmxpc2hlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpOwogdm9pZCB0Y3BfcmN2YnVmX2dyb3coc3RydWN0IHNvY2sgKnNrLCB1MzIgbmV3dmFsKTsKIHZvaWQgdGNwX3Jjdl9zcGFjZV9hZGp1c3Qoc3RydWN0IHNvY2sgKnNrKTsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NvY2suYyBiL25ldC9jb3JlL3NvY2suYwppbmRleCAxYWQ0MTkwNGRiMjViLi4wNmZiYjE5ODI0ZTI2IDEwMDY0NAotLS0gYS9uZXQvY29yZS9zb2NrLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvc29jay5jCkBAIC0yNDc5LDcgJiM0MzsyNDc5LDcgQEAgc3RhdGljIHZvaWQgc2tfaW5pdF9jb21tb24oc3RydWN0IHNvY2sgKnNrKQogc3RydWN0IHNvY2sgKnNrX2Nsb25lKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgY29uc3QgZ2ZwX3QgcHJpb3JpdHksCiAJCSAgICAgIGJvb2wgbG9jaykKIHsKLQlzdHJ1Y3QgcHJvdG8gKnByb3QgPSBSRUFEX09OQ0Uoc2stJmd0O3NrX3Byb3QpOwomIzQzOwlzdHJ1Y3QgcHJvdG8gKnByb3QgPSBzay0mZ3Q7c2tfcHJvdF9jcmVhdG9yOwogCXN0cnVjdCBza19maWx0ZXIgKmZpbHRlcjsKIAlib29sIGlzX2NoYXJnZWQgPSB0cnVlOwogCXN0cnVjdCBzb2NrICpuZXdzazsKQEAgLTI1MzMsNiAmIzQzOzI1MzMsNyBAQCBzdHJ1Y3Qgc29jayAqc2tfY2xvbmUoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBjb25zdCBnZnBfdCBwcmlvcml0eSwKIAluZXdzay0mZ3Q7c2tfcmVzZXJ2ZWRfbWVtICA9IDA7CiAJREVCVUdfTkVUX1dBUk5fT05fT05DRShuZXdzay0mZ3Q7c2tfZHJvcF9jb3VudGVycyk7CiAJc2tfZHJvcHNfcmVzZXQobmV3c2spOwomIzQzOwluZXdzay0mZ3Q7c2tfdHNxX2ZsYWdzCT0gMDsKIAluZXdzay0mZ3Q7c2tfc2VuZF9oZWFkCT0gTlVMTDsKIAluZXdzay0mZ3Q7c2tfdXNlcmxvY2tzCT0gc2stJmd0O3NrX3VzZXJsb2NrcyAmYW1wOyB+U09DS19CSU5EUE9SVF9MT0NLOwogCWF0b21pY19zZXQoJmFtcDtuZXdzay0mZ3Q7c2tfemNrZXksIDApOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2lucHV0LmMgYi9uZXQvaXB2NC90Y3BfaW5wdXQuYwppbmRleCAwZjYwYTFkYmY5Mjc0Li43N2FmMThmYmE2NmI0IDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfaW5wdXQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC90Y3BfaW5wdXQuYwpAQCAtNzE0MSw2ICYjNDM7NzE0MSw0MiBAQCBzdGF0aWMgdm9pZCB0Y3BfcmN2X3N5bnJlY3Zfc3RhdGVfZmFzdG9wZW4oc3RydWN0IHNvY2sgKnNrKQogCXRjcF9yZWFybV9ydG8oc2spOwogfQogCiYjNDM7ZW51bSBza2JfZHJvcF9yZWFzb24gdGNwX3Jjdl9saXN0ZW5fc3RhdGVfcHJvY2VzcyhzdHJ1Y3Qgc29jayAqc2ssCiYjNDM7CQkJCQkJICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQomIzQzO3sKJiM0MzsJY29uc3Qgc3RydWN0IHRjcGhkciAqdGggPSB0Y3BfaGRyKHNrYik7CiYjNDM7CVNLQl9EUihyZWFzb24pOwomIzQzOwomIzQzOwlpZiAodGgtJmd0O2FjaykKJiM0MzsJCXJldHVybiBTS0JfRFJPUF9SRUFTT05fVENQX0ZMQUdTOwomIzQzOwomIzQzOwlpZiAodGgtJmd0O3JzdCkgewomIzQzOwkJU0tCX0RSX1NFVChyZWFzb24sIFRDUF9SRVNFVCk7CiYjNDM7CQlnb3RvIGRpc2NhcmQ7CiYjNDM7CX0KJiM0MzsJaWYgKHRoLSZndDtzeW4pIHsKJiM0MzsJCWlmICh0aC0mZ3Q7ZmluKSB7CiYjNDM7CQkJU0tCX0RSX1NFVChyZWFzb24sIFRDUF9GTEFHUyk7CiYjNDM7CQkJZ290byBkaXNjYXJkOwomIzQzOwkJfQomIzQzOwkJLyogSXQgaXMgcG9zc2libGUgdGhhdCB3ZSBwcm9jZXNzIFNZTiBwYWNrZXRzIGZyb20gYmFja2xvZywKJiM0MzsJCSAqIHNvIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRvIGRpc2FibGUgQkggYW5kIFJDVSByaWdodCB0aGVyZS4KJiM0MzsJCSAqLwomIzQzOwkJcmN1X3JlYWRfbG9jaygpOwomIzQzOwkJbG9jYWxfYmhfZGlzYWJsZSgpOwomIzQzOwkJaW5ldF9jc2soc2spLSZndDtpY3NrX2FmX29wcy0mZ3Q7Y29ubl9yZXF1ZXN0KHNrLCBza2IpOwomIzQzOwkJbG9jYWxfYmhfZW5hYmxlKCk7CiYjNDM7CQlyY3VfcmVhZF91bmxvY2soKTsKJiM0MzsKJiM0MzsJCWNvbnN1bWVfc2tiKHNrYik7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOwlTS0JfRFJfU0VUKHJlYXNvbiwgVENQX0ZMQUdTKTsKJiM0MztkaXNjYXJkOgomIzQzOwl0Y3BfZHJvcF9yZWFzb24oc2ssIHNrYiwgcmVhc29uKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogLyoKICAqCVRoaXMgZnVuY3Rpb24gaW1wbGVtZW50cyB0aGUgcmVjZWl2aW5nIHByb2NlZHVyZSBvZiBSRkMgNzkzIGZvcgogICoJYWxsIHN0YXRlcyBleGNlcHQgRVNUQUJMSVNIRUQgYW5kIFRJTUVfV0FJVC4KQEAgLTcxNTIsNyAmIzQzOzcxODgsNiBAQCBlbnVtIHNrYl9kcm9wX3JlYXNvbgogdGNwX3Jjdl9zdGF0ZV9wcm9jZXNzKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTsKLQlzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7CiAJY29uc3Qgc3RydWN0IHRjcGhkciAqdGggPSB0Y3BfaGRyKHNrYik7CiAJc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxOwogCWludCBxdWV1ZWQgPSAwOwpAQCAtNzE2NCwzMiAmIzQzOzcxOTksNyBAQCB0Y3BfcmN2X3N0YXRlX3Byb2Nlc3Moc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCQlnb3RvIGRpc2NhcmQ7CiAKIAljYXNlIFRDUF9MSVNURU46Ci0JCWlmICh0aC0mZ3Q7YWNrKQotCQkJcmV0dXJuIFNLQl9EUk9QX1JFQVNPTl9UQ1BfRkxBR1M7Ci0KLQkJaWYgKHRoLSZndDtyc3QpIHsKLQkJCVNLQl9EUl9TRVQocmVhc29uLCBUQ1BfUkVTRVQpOwotCQkJZ290byBkaXNjYXJkOwotCQl9Ci0JCWlmICh0aC0mZ3Q7c3luKSB7Ci0JCQlpZiAodGgtJmd0O2ZpbikgewotCQkJCVNLQl9EUl9TRVQocmVhc29uLCBUQ1BfRkxBR1MpOwotCQkJCWdvdG8gZGlzY2FyZDsKLQkJCX0KLQkJCS8qIEl0IGlzIHBvc3NpYmxlIHRoYXQgd2UgcHJvY2VzcyBTWU4gcGFja2V0cyBmcm9tIGJhY2tsb2csCi0JCQkgKiBzbyB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0byBkaXNhYmxlIEJIIGFuZCBSQ1UgcmlnaHQgdGhlcmUuCi0JCQkgKi8KLQkJCXJjdV9yZWFkX2xvY2soKTsKLQkJCWxvY2FsX2JoX2Rpc2FibGUoKTsKLQkJCWljc2stJmd0O2ljc2tfYWZfb3BzLSZndDtjb25uX3JlcXVlc3Qoc2ssIHNrYik7Ci0JCQlsb2NhbF9iaF9lbmFibGUoKTsKLQkJCXJjdV9yZWFkX3VubG9jaygpOwotCi0JCQljb25zdW1lX3NrYihza2IpOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQkJU0tCX0RSX1NFVChyZWFzb24sIFRDUF9GTEFHUyk7Ci0JCWdvdG8gZGlzY2FyZDsKJiM0MzsJCXJldHVybiB0Y3BfcmN2X2xpc3Rlbl9zdGF0ZV9wcm9jZXNzKHNrLCBza2IpOwogCiAJY2FzZSBUQ1BfU1lOX1NFTlQ6CiAJCXRwLSZndDtyeF9vcHQuc2F3X3RzdGFtcCA9IDA7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfaXB2NC5jIGIvbmV0L2lwdjQvdGNwX2lwdjQuYwppbmRleCAxOTBjN2FmNGNmOTIzLi4yZmE4OTU4MzgwYTViIDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfaXB2NC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L3RjcF9pcHY0LmMKQEAgLTE3MTQsNiAmIzQzOzE3MTQsMTQgQEAgc3RydWN0IHNvY2sgKnRjcF92NF9zeW5fcmVjdl9zb2NrKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJaW5ldF9jc2sobmV3c2spLSZndDtpY3NrX2V4dF9oZHJfbGVuID0gaW5ldF9vcHQtJmd0O29wdC5vcHRsZW47CiAJYXRvbWljX3NldCgmYW1wO25ld2luZXQtJmd0O2luZXRfaWQsIGdldF9yYW5kb21fdTE2KCkpOwogCiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpCiYjNDM7CS8qIE5ldmVyIGluaGVyaXQgdGhlIGxpc3RlbmVyJiMzOTtzIGlwdjZfcGluZm87IElQVjZfQUREUkZPUk0gbGVhdmVzIGl0IHNldAomIzQzOwkgKiBvbiBhbiBBRl9JTkVUIHNvY2tldC4gIHRjcF92Nl9tYXBwZWRfY2hpbGRfaW5pdCgpIGluc3RhbGxzIG91ciBvd24uCiYjNDM7CSAqLwomIzQzOwluZXdpbmV0LSZndDtwaW5ldDYgPSBOVUxMOwomIzQzOwluZXdpbmV0LSZndDtpcHY2X2ZsX2xpc3QgPSBOVUxMOwomIzQzOyNlbmRpZgomIzQzOwogCS8qIFNldCBUb1Mgb2YgdGhlIG5ldyBzb2NrZXQgYmFzZWQgdXBvbiB0aGUgdmFsdWUgb2YgaW5jb21pbmcgU1lOLgogCSAqIEVDVCBiaXRzIGFyZSBzZXQgbGF0ZXIgaW4gdGNwX2luaXRfdHJhbnNmZXIoKS4KIAkgKi8KQEAgLTE4MjAsNyAmIzQzOzE4MjgsNyBAQCB1MTYgdGNwX3Y0X2dldF9zeW5jb29raWUoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaXBoZHIgKmlwaCwKIElORElSRUNUX0NBTExBQkxFX0RFQ0xBUkUoc3RydWN0IGRzdF9lbnRyeSAqaXB2NF9kc3RfY2hlY2soc3RydWN0IGRzdF9lbnRyeSAqLAogCQkJCQkJCSAgIHUzMikpOwogLyogVGhlIHNvY2tldCBtdXN0IGhhdmUgaXQmIzM5O3Mgc3BpbmxvY2sgaGVsZCB3aGVuIHdlIGdldAotICogaGVyZSwgdW5sZXNzIGl0IGlzIGEgVENQX0xJU1RFTiBzb2NrZXQuCiYjNDM7ICogaGVyZS4KICAqCiAgKiBXZSBoYXZlIGEgcG90ZW50aWFsIGRvdWJsZS1sb2NrIGNhc2UgaGVyZSwgc28gZXZlbiB3aGVuCiAgKiBkb2luZyBiYWNrbG9nIHByb2Nlc3Npbmcgd2UgdXNlIHRoZSBCSCBsb2NraW5nIHNjaGVtZS4KQEAgLTE4OTgsNiAmIzQzOzE5MDYsNDYgQEAgaW50IHRjcF92NF9kb19yY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCWdvdG8gZGlzY2FyZDsKIH0KIAomIzQzOy8qIEBzayBpcyBub3QgbG9ja2VkIGhlcmUgYW5kIGNhbiBsZWF2ZSBUQ1BfTElTVEVOOyBkbyBub3QgdGVzdCBza19zdGF0ZS4gKi8KJiM0MztzdGF0aWMgbm9pbmxpbmUgaW50IHRjcF92NF9yY3ZfbGlzdGVuKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKJiM0Mzt7CiYjNDM7CWVudW0gc2tiX2Ryb3BfcmVhc29uIHJlYXNvbjsKJiM0MzsJc3RydWN0IHNvY2sgKm5zazsKJiM0MzsKJiM0MzsJcmVhc29uID0gcHNwX3NrX3J4X3BvbGljeV9jaGVjayhzaywgc2tiKTsKJiM0MzsJaWYgKHJlYXNvbikKJiM0MzsJCWdvdG8gZXJyX2Rpc2NhcmQ7CiYjNDM7CiYjNDM7CWlmICh0Y3BfY2hlY2tzdW1fY29tcGxldGUoc2tiKSkKJiM0MzsJCWdvdG8gY3N1bV9lcnI7CiYjNDM7CiYjNDM7CW5zayA9IHRjcF92NF9jb29raWVfY2hlY2soc2ssIHNrYik7CiYjNDM7CWlmICghbnNrKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWlmIChuc2sgIT0gc2spIHsKJiM0MzsJCXJlYXNvbiA9IHRjcF9jaGlsZF9wcm9jZXNzKHNrLCBuc2ssIHNrYik7CiYjNDM7CQlzb2NrX3B1dChuc2spOwomIzQzOwl9IGVsc2UgewomIzQzOwkJcmVhc29uID0gdGNwX3Jjdl9saXN0ZW5fc3RhdGVfcHJvY2Vzcyhzaywgc2tiKTsKJiM0MzsJfQomIzQzOwlpZiAoIXJlYXNvbikKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwl0Y3BfdjRfc2VuZF9yZXNldChzaywgc2tiLCBza19yc3RfY29udmVydF9kcm9wX3JlYXNvbihyZWFzb24pKTsKJiM0MztkaXNjYXJkOgomIzQzOwlza19za2JfcmVhc29uX2Ryb3Aoc2ssIHNrYiwgcmVhc29uKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7CiYjNDM7Y3N1bV9lcnI6CiYjNDM7CXJlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9UQ1BfQ1NVTTsKJiM0MzsJdHJhY2VfdGNwX2JhZF9jc3VtKHNrYik7CiYjNDM7CVRDUF9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBUQ1BfTUlCX0NTVU1FUlJPUlMpOwomIzQzO2Vycl9kaXNjYXJkOgomIzQzOwlUQ1BfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgVENQX01JQl9JTkVSUlMpOwomIzQzOwlnb3RvIGRpc2NhcmQ7CiYjNDM7fQomIzQzOwogZW51bSBza2JfZHJvcF9yZWFzb24gdGNwX2FkZF9iYWNrbG9nKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAl1MzIgdGFpbF9nc29fc2l6ZSwgdGFpbF9nc29fc2VnczsKQEAgLTIyMzUsNyAmIzQzOzIyODMsNyBAQCBpbnQgdGNwX3Y0X3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCXNrYi0mZ3Q7ZGV2ID0gTlVMTDsKIAogCWlmIChzay0mZ3Q7c2tfc3RhdGUgPT0gVENQX0xJU1RFTikgewotCQlyZXQgPSB0Y3BfdjRfZG9fcmN2KHNrLCBza2IpOwomIzQzOwkJcmV0ID0gdGNwX3Y0X3Jjdl9saXN0ZW4oc2ssIHNrYik7CiAJCWdvdG8gcHV0X2FuZF9yZXR1cm47CiAJfQogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMgYi9uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMKaW5kZXggMTIyNTRlNmViMmYzNC4uMmZkZTE5NmRkMzAyZiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L3RjcF9taW5pc29ja3MuYwpAQCAtNTkxLDYgJiM0Mzs1OTEsNyBAQCBzdHJ1Y3Qgc29jayAqdGNwX2NyZWF0ZV9vcGVucmVxX2NoaWxkKGNvbnN0IHN0cnVjdCBzb2NrICpzaywKIAluZXd0cC0mZ3Q7dG90YWxfcmV0cmFucyA9IHJlcS0mZ3Q7bnVtX3JldHJhbnM7CiAKIAl0Y3BfaW5pdF94bWl0X3RpbWVycyhuZXdzayk7CiYjNDM7CW5ld3RwLSZndDtvdXRfb2Zfb3JkZXJfcXVldWUgPSBSQl9ST09UOwogCVdSSVRFX09OQ0UobmV3dHAtJmd0O3dyaXRlX3NlcSwgbmV3dHAtJmd0O3B1c2hlZF9zZXEgPSB0cmVxLSZndDtzbnRfaXNuICYjNDM7IDEpOwogCiAJaWYgKHNvY2tfZmxhZyhuZXdzaywgU09DS19LRUVQT1BFTikpCkBAIC02NTksNiAmIzQzOzY2MCwxMiBAQCBzdHJ1Y3Qgc29jayAqdGNwX2NyZWF0ZV9vcGVucmVxX2NoaWxkKGNvbnN0IHN0cnVjdCBzb2NrICpzaywKIAl0Y3BfZWNuX29wZW5yZXFfY2hpbGQobmV3c2ssIHJlcSwgc2tiKTsKIAluZXd0cC0mZ3Q7ZmFzdG9wZW5fcmVxID0gTlVMTDsKIAlSQ1VfSU5JVF9QT0lOVEVSKG5ld3RwLSZndDtmYXN0b3Blbl9yc2ssIE5VTEwpOwomIzQzOwluZXd0cC0mZ3Q7cGFja2V0c19vdXQgPSAwOwomIzQzOwluZXd0cC0mZ3Q7cmV0cmFuc19vdXQgPSAwOwomIzQzOwluZXd0cC0mZ3Q7c2Fja2VkX291dCA9IDA7CiYjNDM7CW5ld3RwLSZndDtsb3N0X291dCA9IDA7CiYjNDM7CW5ld3RwLSZndDtyZXRyYW5zbWl0X3NrYl9oaW50ID0gTlVMTDsKJiM0MzsJbmV3dHAtJmd0O2hpZ2hlc3Rfc2FjayA9IE5VTEw7CiAKIAluZXd0cC0mZ3Q7YnBmX2NoZ19jY19pbnByb2dyZXNzID0gMDsKIAl0Y3BfYnBmX2Nsb25lKHNrLCBuZXdzayk7CkBAIC05NzQsNyAmIzQzOzk4MSw3IEBAIHN0cnVjdCBzb2NrICp0Y3BfY2hlY2tfcmVxKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJdGNwX3Jlc2V0KHNrLCBza2IpOwogCX0KIAlpZiAoIWZhc3RvcGVuKSB7Ci0JCWJvb2wgdW5saW5rZWQgPSBpbmV0X2Nza19yZXFza19xdWV1ZV9kcm9wKHNrLCByZXEpOwomIzQzOwkJYm9vbCB1bmxpbmtlZCA9IGluZXRfY3NrX3JlcXNrX3F1ZXVlX2Ryb3AocmVxLSZndDtyc2tfbGlzdGVuZXIsIHJlcSk7CiAKIAkJaWYgKHVubGlua2VkKQogCQkJX19ORVRfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgTElOVVhfTUlCX0VNQlJZT05JQ1JTVFMpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvYWZfaW5ldDYuYyBiL25ldC9pcHY2L2FmX2luZXQ2LmMKaW5kZXggMjgyOTEyYTExOTk5OS4uNjhiMzMwZjY5NDFkMCAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvYWZfaW5ldDYuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9hZl9pbmV0Ni5jCkBAIC00NzksNiAmIzQzOzQ3OSwxMCBAQCB2b2lkIGluZXQ2X2NsZWFudXBfc29jayhzdHJ1Y3Qgc29jayAqc2spCiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlzdHJ1Y3QgaXB2Nl90eG9wdGlvbnMgKm9wdDsKIAomIzQzOwkvKiBBRl9JTkVUIGNoaWxkIG9mIGFuIElQVjZfQUREUkZPUk0mIzM5O2VkIGxpc3RlbmVyOiBub3RoaW5nIG9mIGl0cyBvd24uICovCiYjNDM7CWlmICghbnApCiYjNDM7CQlyZXR1cm47CiYjNDM7CiAJLyogUmVsZWFzZSByeCBvcHRpb25zICovCiAKIAlza2IgPSB4Y2hnKCZhbXA7bnAtJmd0O3BrdG9wdGlvbnMsIE5VTEwpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jIGIvbmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jCmluZGV4IGI0Yzk3NzQzNGMyZTAuLjZkMmRkOWFlNDZhOTYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2lwdjZfc29ja2dsdWUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMKQEAgLTU4Nyw2ICYjNDM7NTg3LDIxIEBAIGludCBkb19pcHY2X3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLAogCQkJCWJyZWFrOwogCQkJfQogCiYjNDM7CQkJaWYgKHNrLSZndDtza19wcm90b2NvbCA9PSBJUFBST1RPX1RDUCkgewomIzQzOwkJCQlpZiAoaW5ldF9jc2tfcmVxc2tfcXVldWVfbGVuKHNrKSkgewomIzQzOwkJCQkJcmV0diA9IC1FQlVTWTsKJiM0MzsJCQkJCWJyZWFrOwomIzQzOwkJCQl9CiYjNDM7CQkJCS8qIEEgU1lOIHRoYXQgZm91bmQgdGhpcyBzb2NrZXQgd2hpbGUgaXQgd2FzCiYjNDM7CQkJCSAqIHN0aWxsIGxpc3RlbmluZyBtYXkgbm90IGJlIGNvdW50ZWQgeWV0LgomIzQzOwkJCQkgKi8KJiM0MzsJCQkJc3luY2hyb25pemVfcmN1KCk7CiYjNDM7CQkJCWlmIChpbmV0X2Nza19yZXFza19xdWV1ZV9sZW4oc2spKSB7CiYjNDM7CQkJCQlyZXR2ID0gLUVCVVNZOwomIzQzOwkJCQkJYnJlYWs7CiYjNDM7CQkJCX0KJiM0MzsJCQl9CiYjNDM7CiAJCQlfX2lwdjZfc29ja19tY19jbG9zZShzayk7CiAJCQlfX2lwdjZfc29ja19hY19jbG9zZShzayk7CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3RjcF9pcHY2LmMgYi9uZXQvaXB2Ni90Y3BfaXB2Ni5jCmluZGV4IDllOTE1NWIxYjNhYTcuLmEyZGVkYTlhNDI1OGIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3RjcF9pcHY2LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvdGNwX2lwdjYuYwpAQCAtMTU1Niw3ICYjNDM7MTU1Niw3IEBAIHN0YXRpYyBzdHJ1Y3Qgc29jayAqdGNwX3Y2X3N5bl9yZWN2X3NvY2soY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqCiBJTkRJUkVDVF9DQUxMQUJMRV9ERUNMQVJFKHN0cnVjdCBkc3RfZW50cnkgKmlwdjRfZHN0X2NoZWNrKHN0cnVjdCBkc3RfZW50cnkgKiwKIAkJCQkJCQkgICB1MzIpKTsKIC8qIFRoZSBzb2NrZXQgbXVzdCBoYXZlIGl0JiMzOTtzIHNwaW5sb2NrIGhlbGQgd2hlbiB3ZSBnZXQKLSAqIGhlcmUsIHVubGVzcyBpdCBpcyBhIFRDUF9MSVNURU4gc29ja2V0LgomIzQzOyAqIGhlcmUuCiAgKgogICogV2UgaGF2ZSBhIHBvdGVudGlhbCBkb3VibGUtbG9jayBjYXNlIGhlcmUsIHNvIGV2ZW4gd2hlbgogICogZG9pbmcgYmFja2xvZyBwcm9jZXNzaW5nIHdlIHVzZSB0aGUgQkggbG9ja2luZyBzY2hlbWUuCkBAIC0xNzA0LDYgJiM0MzsxNzA0LDQ2IEBAIGludCB0Y3BfdjZfZG9fcmN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAlyZXR1cm4gMDsKIH0KIAomIzQzOy8qIEBzayBpcyBub3QgbG9ja2VkIGhlcmUgYW5kIGNhbiBsZWF2ZSBUQ1BfTElTVEVOOyBkbyBub3QgdGVzdCBza19zdGF0ZS4gKi8KJiM0MztzdGF0aWMgbm9pbmxpbmUgaW50IHRjcF92Nl9yY3ZfbGlzdGVuKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKJiM0Mzt7CiYjNDM7CWVudW0gc2tiX2Ryb3BfcmVhc29uIHJlYXNvbjsKJiM0MzsJc3RydWN0IHNvY2sgKm5zazsKJiM0MzsKJiM0MzsJcmVhc29uID0gcHNwX3NrX3J4X3BvbGljeV9jaGVjayhzaywgc2tiKTsKJiM0MzsJaWYgKHJlYXNvbikKJiM0MzsJCWdvdG8gZXJyX2Rpc2NhcmQ7CiYjNDM7CiYjNDM7CWlmICh0Y3BfY2hlY2tzdW1fY29tcGxldGUoc2tiKSkKJiM0MzsJCWdvdG8gY3N1bV9lcnI7CiYjNDM7CiYjNDM7CW5zayA9IHRjcF92Nl9jb29raWVfY2hlY2soc2ssIHNrYik7CiYjNDM7CWlmICghbnNrKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWlmIChuc2sgIT0gc2spIHsKJiM0MzsJCXJlYXNvbiA9IHRjcF9jaGlsZF9wcm9jZXNzKHNrLCBuc2ssIHNrYik7CiYjNDM7CQlzb2NrX3B1dChuc2spOwomIzQzOwl9IGVsc2UgewomIzQzOwkJcmVhc29uID0gdGNwX3Jjdl9saXN0ZW5fc3RhdGVfcHJvY2Vzcyhzaywgc2tiKTsKJiM0MzsJfQomIzQzOwlpZiAoIXJlYXNvbikKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwl0Y3BfdjZfc2VuZF9yZXNldChzaywgc2tiLCBza19yc3RfY29udmVydF9kcm9wX3JlYXNvbihyZWFzb24pKTsKJiM0MztkaXNjYXJkOgomIzQzOwlza19za2JfcmVhc29uX2Ryb3Aoc2ssIHNrYiwgcmVhc29uKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7CiYjNDM7Y3N1bV9lcnI6CiYjNDM7CXJlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9UQ1BfQ1NVTTsKJiM0MzsJdHJhY2VfdGNwX2JhZF9jc3VtKHNrYik7CiYjNDM7CVRDUF9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBUQ1BfTUlCX0NTVU1FUlJPUlMpOwomIzQzO2Vycl9kaXNjYXJkOgomIzQzOwlUQ1BfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgVENQX01JQl9JTkVSUlMpOwomIzQzOwlnb3RvIGRpc2NhcmQ7CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgdGNwX3Y2X2ZpbGxfY2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IGlwdjZoZHIgKmhkciwKIAkJCSAgIGNvbnN0IHN0cnVjdCB0Y3BoZHIgKnRoKQogewpAQCAtMTg5MSw3ICYjNDM7MTkzMSw3IEBAIElORElSRUNUX0NBTExBQkxFX1NDT1BFIGludCB0Y3BfdjZfcmN2KHN0cnVjdCBza19idWZmICpza2IpCiAJc2tiLSZndDtkZXYgPSBOVUxMOwogCiAJaWYgKHNrLSZndDtza19zdGF0ZSA9PSBUQ1BfTElTVEVOKSB7Ci0JCXJldCA9IHRjcF92Nl9kb19yY3Yoc2ssIHNrYik7CiYjNDM7CQlyZXQgPSB0Y3BfdjZfcmN2X2xpc3Rlbihzaywgc2tiKTsKIAkJZ290byBwdXRfYW5kX3JldHVybjsKIAl9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDQ6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjU1NAoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDgyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBUaGlzIFRDUCBOZXR3b3JraW5nIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCBhIHBhdGNoIGhlcmUgdGhhdCYjMzk7cyBtYWtpbmcgY2hhbmdlcyB0byB0aGUgVENQIG5ldHdvcmtpbmcgY29kZS4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgdGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlLCBhbmQgZ2l2ZW4gdGhhdCBpdCYjMzk7cyBpbiB0aGUgY29yZSBuZXR3b3JraW5nIHN0YWNrIGFuZCByZWFjaGFibGUgdmlhIFRDUCBzb2NrZXRzLCBmdXp6aW5nIGlzIGRlZmluaXRlbHkgd2FycmFudGVkLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IGlkZW50aWZ5aW5nIHRoZSBrZXkgZnVuY3Rpb25zIHRoYXQgYXJlIG1vZGlmaWVkLgoKU3BlY2lmaWNhbGx5LCBJIHNlZSBhIGZldyBrZXkgYWRkaXRpb25zOiBgdGNwX3Jjdl9saXN0ZW5fc3RhdGVfcHJvY2Vzc2AsIGB0Y3BfdjRfcmN2X2xpc3RlbmAsIGFuZCBgdGNwX3Y2X3Jjdl9saXN0ZW5gLiAgVGhlc2UgYXJlIGNsZWFybHkgaW50cm9kdWNlZCB0byBoYW5kbGUgdGhlIGBUQ1BfTElTVEVOYCBzdGF0ZSwgd2hpY2ggaXMgd29ydGggaW52ZXN0aWdhdGluZy4gVGhlIGBza19jbG9uZWAgZnVuY3Rpb24gYWxzbyBnZXRzIGEgdHdlYWsgdG8gaG93IGl0IGFjY2Vzc2VzIHRoZSBwcm90b2NvbCBjcmVhdG9yLiAgV2UmIzM5O3ZlIGdvdCBzb21lIG5ldyBpbml0aWFsaXphdGlvbiBpbiBgdGNwX2NyZWF0ZV9vcGVucmVxX2NoaWxkYC4gQW5kIHRoZW4gdGhlcmUmIzM5O3MgYSBtb2RpZmljYXRpb24gdG8gYGRvX2lwdjZfc2V0c29ja29wdGAuCgpOb3csIGxldCBtZSB6b29tIGluIG9uIHRob3NlIGZ1bmN0aW9ucyB0byBuYXJyb3cgZG93biBteSBmb2N1cy4gIEkgd2FudCB0byBwcmlvcml0aXplIHRoZSBiZXN0IGVudHJ5IHBvaW50cy4gSSBrbm93IEkgc2hvdWxkIGZvY3VzIG9uIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zLiBJIGNhbiBzZWUgdGhhdCBgdGNwX3Jjdl9saXN0ZW5fc3RhdGVfcHJvY2Vzc2AgaXMgbm90IHN0YXRpYyBhbmQgaXMgZGVmaW5lZCwgd2hpY2ggbWFrZXMgaXQgYSBnb29kIGNhbmRpZGF0ZS4gSG93ZXZlciwgYHRjcF92NF9yY3ZfbGlzdGVuYCBhbmQgYHRjcF92Nl9yY3ZfbGlzdGVuYCBhcmUgc3RhdGljIGJ1dCAqbm9pbmxpbmUqLCBzbyBldmVuIHRob3VnaCB0aGV5IGFyZSBzdGF0aWMsIHRoZXkgd2lsbCBzdGlsbCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgd2hpY2ggbWVhbnMgdGhhdCB0aGV5IGFyZSBhbHNvIGNhbmRpZGF0ZXMuIE9mIGNvdXJzZSwgYHRjcF92NF9yY3ZgIGFuZCBgdGNwX3Y2X3JjdmAgYXJlIHRoZSBhY3R1YWwgZW50cnkgcG9pbnRzLCBidXQgdGhvc2UgYXJlIGluIHRoZSBrZXJuZWwgYWxyZWFkeSBzbyB0aGV5IGFyZSBub3QgbmV3LiAgQW5kIGZpbmFsbHksIHRoZXJlJiMzOTtzIGBkb19pcHY2X3NldHNvY2tvcHRgIHdoaWNoIGlzIGFsc28gbW9kaWZpZWQuCgpMZXQmIzM5O3MgZHJpbGwgZG93biBpbnRvIGBkb19pcHY2X3NldHNvY2tvcHRgLiAgVGhlIGRpZmYgc2hvd3MgdGhhdCBpdCYjMzk7cyBub3cgY2hlY2tpbmcgZm9yIGBJUFBST1RPX1RDUGAgYW5kIHRoZSBsZW5ndGggb2YgdGhlIHJlcXVlc3QgcXVldWUgKGBpbmV0X2Nza19yZXFza19xdWV1ZV9sZW4oc2spYCkuICBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIHRyeWluZyB0byBwcmV2ZW50IG1vZGlmaWNhdGlvbiBvZiBvcHRpb25zIG9uIGEgbGlzdGVuaW5nIHNvY2tldCB0aGF0IGhhcyBwZW5kaW5nIHJlcXVlc3RzLiBTcGVjaWZpY2FsbHkgaXQmIzM5O3MgdHJ5aW5nIHRvIGVuc3VyZSB0aGF0IGEgU1lOIHBhY2tldCB0aGF0IGFycml2ZWQgYmVmb3JlIHRoZSBzb2NrZXQgd2FzIGZ1bGx5IGxpc3RlbmluZyBpcyBub3QgbWlzc2VkLgpJJiMzOTtsbCBrZWVwIGBkb19pcHY2X3NldHNvY2tvcHRgIGluIG1pbmQsIGFuZCBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IG9wdGlvbiBpcyBiZWluZyBhZmZlY3RlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwNDozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2lwdjZfc29ja19tY19jbG9zZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L2lwdjZfc29ja2dsdWUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmM9Mzc2PWludCBkb19pcHY2X3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuLS1cbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYy02MDQtXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmM6NjA1Olx0XHRcdF9faXB2Nl9zb2NrX21jX2Nsb3NlKHNrKTtcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYy02MDYtXHRcdFx0X19pcHY2X3NvY2tfYWNfY2xvc2Uoc2spO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDA0OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwODUKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoYXQgc3BlY2lmaWMgY29kZToKCioqRGl2aW5nIGludG8gaXB2Nl9zb2NrZ2x1ZS5jIC0gTGluZSA1ODcqKgoKT2theSwgSSYjMzk7bSB6ZXJvaW5nIGluIG9uIGxpbmUgNTg3IHdpdGhpbiBgbmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHJlY2FsbCB3aGF0IGZ1bmN0aW9ucyB0eXBpY2FsbHkgc3Vycm91bmQgdGhpcyBhcmVhIGluIHRoZSBmaWxlLiBJIGltbWVkaWF0ZWx5IHN0YXJ0IG1lbnRhbGx5IHBhcnNpbmcgdGhlIGNvZGUgZmxvdy4gU2luY2UgdGhpcyBmaWxlIGRlYWxzIHdpdGggdGhlIGdsdWUgY29kZSBiZXR3ZWVuIElQdjYgYW5kIHRoZSBzb2NrZXQgbGF5ZXIsIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgYXNwZWN0cyByZWxhdGVkIHRvIHRoZSBjb25uZWN0aW9uIG9mIElQdjYgc29ja2V0cyBhbmQgYW55IHN1cHBvcnRpbmcgZnVuY3Rpb25zLiBJIGtub3cgdGhpcyBmaWxlIGlzIGNyaXRpY2FsIGZvciBtYW5hZ2luZyBJUHY2IHNvY2tldHMgYW5kIGludGVyZmFjaW5nIHRoZW0gd2l0aCB0aGUgZ2VuZXJpYyBzb2NrZXQgbGF5ZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdW5jdGlvbiBjYWxsIG9yIGNvZGUgYmxvY2sgb24gbGluZSA1ODcgdG8gZGV0ZXJtaW5lIHdoYXQgdGhlIHNwZWNpZmljIGNvbnRleHQgaXMuIElzIGl0IGRlYWxpbmcgd2l0aCBhZGRyZXNzIGZhbWlseSBoYW5kbGluZz8gU29ja2V0IG9wdGlvbiBwcm9jZXNzaW5nPyBQb3NzaWJseSByZWxhdGVkIHRvIG11bHRpY2FzdCBqb2lucyBvciBsZWF2ZXM/IE1heWJlIGl0IGhhbmRsZXMgdGhlIGFjdHVhbCBzb2NrZXQgY3JlYXRpb24gb3IgdGVhcmRvd24uIEtub3dpbmcgdGhpcyBmaWxlIGFuZCBhcmVhLCBJIGV4cGVjdCB0byBkZWFsIHdpdGggYSBgc3RydWN0IHNvY2tgIG9yIGBzdHJ1Y3QgaW5ldDZfc29ja2AgYXQgc29tZSBwb2ludC4gSeKAmW0gcHJlcGFyaW5nIG15c2VsZiBmb3IgdGhhdCwgbWVudGFsbHkgbG9va2luZyBmb3IgaGludHMuIExldCYjMzk7cyBzZWUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwNDozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY2L2lwdjZfc29ja2dsdWUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTcwOlx0XHRcdFx0fSBlbHNlIGlmIChzay1cdTAwM2Vza19wcm90b2NvbCA9PSBJUFBST1RPX1RDUCkge1xuIDU3MTpcdFx0XHRcdFx0aWYgKHNrLVx1MDAzZXNrX3Byb3QgIT0gXHUwMDI2dGNwdjZfcHJvdCkge1xuIDU3MjpcdFx0XHRcdFx0XHRyZXR2ID0gLUVCVVNZO1xuIDU3MzpcdFx0XHRcdFx0XHRicmVhaztcbiA1NzQ6XHRcdFx0XHRcdH1cbiA1NzU6XHRcdFx0XHR9IGVsc2Uge1xuIDU3NjpcdFx0XHRcdFx0YnJlYWs7XG4gNTc3Olx0XHRcdFx0fVxuIDU3ODpcdFxuIDU3OTpcdFx0XHRcdGlmIChzay1cdTAwM2Vza19zdGF0ZSAhPSBUQ1BfRVNUQUJMSVNIRUQpIHtcbiA1ODA6XHRcdFx0XHRcdHJldHYgPSAtRU5PVENPTk47XG4gNTgxOlx0XHRcdFx0XHRicmVhaztcbiA1ODI6XHRcdFx0XHR9XG4gNTgzOlx0XG4gNTg0Olx0XHRcdFx0aWYgKGlwdjZfb25seV9zb2NrKHNrKSB8fFxuIDU4NTpcdFx0XHRcdCAgICAhaXB2Nl9hZGRyX3Y0bWFwcGVkKFx1MDAyNnNrLVx1MDAzZXNrX3Y2X2RhZGRyKSkge1xuIDU4NjpcdFx0XHRcdFx0cmV0diA9IC1FQUREUk5PVEFWQUlMO1xuIDU4NzpcdFx0XHRcdFx0YnJlYWs7XG4gNTg4Olx0XHRcdFx0fVxuIDU4OTpcdFxuIDU5MDpcdFx0XHRcdGlmIChzay1cdTAwM2Vza19wcm90b2NvbCA9PSBJUFBST1RPX1RDUCkge1xuIDU5MTpcdFx0XHRcdFx0aWYgKGluZXRfY3NrX3JlcXNrX3F1ZXVlX2xlbihzaykpIHtcbiA1OTI6XHRcdFx0XHRcdFx0cmV0diA9IC1FQlVTWTtcbiA1OTM6XHRcdFx0XHRcdFx0YnJlYWs7XG4gNTk0Olx0XHRcdFx0XHR9XG4gNTk1Olx0XHRcdFx0XHQvKiBBIFNZTiB0aGF0IGZvdW5kIHRoaXMgc29ja2V0IHdoaWxlIGl0IHdhc1xuIDU5NjpcdFx0XHRcdFx0ICogc3RpbGwgbGlzdGVuaW5nIG1heSBub3QgYmUgY291bnRlZCB5ZXQuXG4gNTk3Olx0XHRcdFx0XHQgKi9cbiA1OTg6XHRcdFx0XHRcdHN5bmNocm9uaXplX3JjdSgpO1xuIDU5OTpcdFx0XHRcdFx0aWYgKGluZXRfY3NrX3JlcXNrX3F1ZXVlX2xlbihzaykpIHtcbiA2MDA6XHRcdFx0XHRcdFx0cmV0diA9IC1FQlVTWTtcbiA2MDE6XHRcdFx0XHRcdFx0YnJlYWs7XG4gNjAyOlx0XHRcdFx0XHR9XG4gNjAzOlx0XHRcdFx0fVxuIDYwNDpcdFxuIDYwNTpcdFx0XHRcdF9faXB2Nl9zb2NrX21jX2Nsb3NlKHNrKTtcbiA2MDY6XHRcdFx0XHRfX2lwdjZfc29ja19hY19jbG9zZShzayk7XG4gNjA3Olx0XG4gNjA4Olx0XHRcdFx0aWYgKHNrLVx1MDAzZXNrX3Byb3RvY29sID09IElQUFJPVE9fVENQKSB7XG4gNjA5Olx0XHRcdFx0XHRzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDQ6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODk2OQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIEkmIzM5O20gcmVhZHkgdG8gc3VtbWFyaXplIHRoZSBwcm92aWRlZCB0ZXh0IGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIGEgaGlnaCBsZXZlbCBvZiBleHBlcnRpc2UgaW4gdGhlIGZpZWxkLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtsbCBhcHByb2FjaCBpdDoKCioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50KioKCkFscmlnaHQsIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGUgaW5wdXQuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgJiMzNDtvcHRpb24mIzM0OyByZWZlcnMgdG8sIGJlY2F1c2UgdGhlIHJlc3Qgb2YgdGhlIHRob3VnaHQgcHJvY2VzcyBoaW5nZXMgb24gY2xhcmlmeWluZyB0aGF0IHZhcmlhYmxlLiBJJiMzOTtsbCBuZWVkIHRvIHBhcnNlIHRoZSBjb250ZXh0IHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIGFuZCByZWxldmFuY2Ugb2YgdGhlICYjMzQ7b3B0aW9uJiMzNDsuIEl0IGNvdWxkIGJlIGEgaHlwb3RoZXNpcywgYSB2YXJpYWJsZSBwYXJhbWV0ZXIgd2l0aGluIGFuIGVxdWF0aW9uLCBhIGRlY2lzaW9uIHBvaW50IGluIGFuIGV4cGVyaW1lbnQsIG9yIGV2ZW4gYSBwcm9zcGVjdGl2ZSBzb2x1dGlvbiB0byBhIHByb2JsZW0uIFRoZSBkZWdyZWUgb2YgdGhlIGNvbXBsZXhpdHkgdmFyaWVzIGJ5IHRoZSBjb250ZXh0LiBJIHdpbGwgd29yayB3aXRoIHRoZSBjb250ZXh0IHRvIGRldGVybWluZSB0aGUgYmVzdCBhcHByb2FjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwNDozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY2L2lwdjZfc29ja2dsdWUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTQwOlx0XHRcdGlmIChSRUFEX09OQ0Uoc2stXHUwMDNlc2tfYm91bmRfZGV2X2lmKSlcbiA1NDE6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA1NDI6XHRcbiA1NDM6XHRcdFx0V1JJVEVfT05DRShucC1cdTAwM2V1Y2FzdF9vaWYsIGlmaW5kZXgpO1xuIDU0NDpcdFx0XHRyZXR1cm4gMDtcbiA1NDU6XHRcdH1cbiA1NDY6XHRcdH1cbiA1NDc6XHRcbiA1NDg6XHRcdHNvY2tvcHRfbG9ja19zb2NrKHNrKTtcbiA1NDk6XHRcbiA1NTA6XHRcdC8qIEFub3RoZXIgdGhyZWFkIGhhcyBjb252ZXJ0ZWQgdGhlIHNvY2tldCBpbnRvIElQdjQgd2l0aFxuIDU1MTpcdFx0ICogSVBWNl9BRERSRk9STSBjb25jdXJyZW50bHkuXG4gNTUyOlx0XHQgKi9cbiA1NTM6XHRcdGlmICh1bmxpa2VseShzay1cdTAwM2Vza19mYW1pbHkgIT0gQUZfSU5FVDYpKVxuIDU1NDpcdFx0XHRnb3RvIHVubG9jaztcbiA1NTU6XHRcbiA1NTY6XHRcdHN3aXRjaCAob3B0bmFtZSkge1xuIDU1NzpcdFxuIDU1ODpcdFx0Y2FzZSBJUFY2X0FERFJGT1JNOlxuIDU1OTpcdFx0XHRpZiAob3B0bGVuIFx1MDAzYyBzaXplb2YoaW50KSlcbiA1NjA6XHRcdFx0XHRnb3RvIGVfaW52YWw7XG4gNTYxOlx0XHRcdGlmICh2YWwgPT0gUEZfSU5FVCkge1xuIDU2MjpcdFx0XHRcdGlmIChzay1cdTAwM2Vza190eXBlID09IFNPQ0tfUkFXKVxuIDU2MzpcdFx0XHRcdFx0YnJlYWs7XG4gNTY0Olx0XG4gNTY1Olx0XHRcdFx0aWYgKHNrLVx1MDAzZXNrX3Byb3RvY29sID09IElQUFJPVE9fVURQKSB7XG4gNTY2Olx0XHRcdFx0XHRpZiAodWRwX3NrKHNrKS1cdTAwM2VwZW5kaW5nID09IEFGX0lORVQ2KSB7XG4gNTY3Olx0XHRcdFx0XHRcdHJldHYgPSAtRUJVU1k7XG4gNTY4Olx0XHRcdFx0XHRcdGJyZWFrO1xuIDU2OTpcdFx0XHRcdFx0fVxuIDU3MDpcdFx0XHRcdH0gZWxzZSBpZiAoc2stXHUwMDNlc2tfcHJvdG9jb2wgPT0gSVBQUk9UT19UQ1ApIHtcbiA1NzE6XHRcdFx0XHRcdGlmIChzay1cdTAwM2Vza19wcm90ICE9IFx1MDAyNnRjcHY2X3Byb3QpIHtcbiA1NzI6XHRcdFx0XHRcdFx0cmV0diA9IC1FQlVTWTtcbiA1NzM6XHRcdFx0XHRcdFx0YnJlYWs7XG4gNTc0Olx0XHRcdFx0XHR9XG4gNTc1Olx0XHRcdFx0fSBlbHNlIHtcbiA1NzY6XHRcdFx0XHRcdGJyZWFrO1xuIDU3NzpcdFx0XHRcdH1cbiA1Nzg6XHRcbiA1Nzk6XHRcdFx0XHRpZiAoc2stXHUwMDNlc2tfc3RhdGUgIT0gVENQX0VTVEFCTElTSEVEKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDQ6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTcxNgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDE1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFRDUCBMaXN0ZW4gU29ja2V0IEhhbmRsaW5nIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgZGVmaW5pdGVseSBkZWFsaW5nIHdpdGggYElQVjZfQUREUkZPUk1gLiBJIHNlZSBpdCByaWdodCB0aGVyZS4gSXQgbG9va3MgbGlrZSB0aGUgbWFpbiBhcmVhIG9mIGZvY3VzIGlzIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgaW5jb21pbmcgcGFja2V0cyBvbiBsaXN0ZW5pbmcgVENQIHNvY2tldHMuIFdlJiMzOTtyZSB0YWxraW5nIHNwZWNpZmljYWxseSBhYm91dCB0aGUgZnVuY3Rpb25zIGB0Y3BfcmN2X2xpc3Rlbl9zdGF0ZV9wcm9jZXNzYCwgYHRjcF92NF9yY3ZfbGlzdGVuYCwgYW5kIGB0Y3BfdjZfcmN2X2xpc3RlbmAuIFRoYXQgbWFrZXMgc2Vuc2U7IGluY29taW5nIGNvbm5lY3Rpb25zIGhhdmUgdG8gYmUgcHJvcGVybHkgcm91dGVkIHRvIGEgc3BlY2lmaWMgc29ja2V0LgoKQmV5b25kIHRoZSBwYWNrZXQgcHJvY2Vzc2luZyBmdW5jdGlvbnMsIHRoaXMgYWxzbyB0b3VjaGVzIG9uIGBJUFY2X0FERFJGT1JNYCBzZXRzb2Nrb3B0IGhhbmRsaW5nIGZvciBUQ1Agc29ja2V0cy4gVGhpcyBwcm9iYWJseSBhZmZlY3RzIGhvdyB3ZSBkZWFsIHdpdGggdGhlIGZhbWlseSBvZiBjb25uZWN0aW9ucyBiZWluZyBhY2NlcHRlZCwgd2hpY2ggaXMgY3JpdGljYWwuCgpJIG5lZWQgdG8gZm9jdXMgb24gYSBmZXcga2V5IHN5bWJvbHMgaGVyZTogYHRjcF9yY3ZfbGlzdGVuX3N0YXRlX3Byb2Nlc3NgIGJlY2F1c2UgdGhhdCYjMzk7cyB0aGUgaGVhcnQgb2Ygc3RhdGUgdHJhbnNpdGlvbnMgZm9yIGluY29taW5nIGNvbm5lY3Rpb25zLCBhbmQgYGRvX2lwdjZfc2V0c29ja29wdGAgd2hpY2ggbGlrZWx5IGRlYWxzIHdpdGggY29uZmlndXJhdGlvbnMuCgpPZiBjb3Vyc2UsIHRoZSBgSVBWNmAgY29uZmlnIG9wdGlvbiBpcyBpbnZvbHZlZCwgcGFydGljdWxhcmx5IGluIHRoZSBgZG9faXB2Nl9zZXRzb2Nrb3B0YCBhbmQgYHRjcF92Nl9yY3ZfbGlzdGVuYCBmdW5jdGlvbnMuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgYElQVjZgIGlzIHRoZSAqcmlnaHQqIGNvbmZpZyBvcHRpb24sIGJ1dCBJJiMzOTttIGJldHRpbmcgdGhhdCYjMzk7cyB0aGUgcmlnaHQgb25lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwNDozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSVBWNiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvS2NvbmZpZy01LVxubmV0L2lwdjYvS2NvbmZpZzo2Om1lbnVjb25maWcgSVBWNlxubmV0L2lwdjYvS2NvbmZpZy03LVx0Ym9vbCBcJiMzNDtUaGUgSVB2NiBwcm90b2NvbFwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWc9MTk9aWYgSVBWNlxubmV0L2lwdjYvS2NvbmZpZy0yMC1cbm5ldC9pcHY2L0tjb25maWc6MjE6Y29uZmlnIElQVjZfUk9VVEVSX1BSRUZcbm5ldC9pcHY2L0tjb25maWctMjItXHRib29sIFwmIzM0O0lQdjY6IFJvdXRlciBQcmVmZXJlbmNlIChSRkMgNDE5MSkgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMzAtXG5uZXQvaXB2Ni9LY29uZmlnOjMxOmNvbmZpZyBJUFY2X1JPVVRFX0lORk9cbm5ldC9pcHY2L0tjb25maWctMzItXHRib29sIFwmIzM0O0lQdjY6IFJvdXRlIEluZm9ybWF0aW9uIChSRkMgNDE5MSkgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMzgtXG5uZXQvaXB2Ni9LY29uZmlnOjM5OmNvbmZpZyBJUFY2X09QVElNSVNUSUNfREFEXG5uZXQvaXB2Ni9LY29uZmlnLTQwLVx0Ym9vbCBcJiMzNDtJUHY2OiBFbmFibGUgUkZDIDQ0MjkgT3B0aW1pc3RpYyBEQURcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnPTEwMj1jb25maWcgSU5FVDZfSVBDT01QXG4tLVxubmV0L2lwdjYvS2NvbmZpZy0xMTEtXG5uZXQvaXB2Ni9LY29uZmlnOjExMjpjb25maWcgSVBWNl9NSVA2XG5uZXQvaXB2Ni9LY29uZmlnLTExMy1cdHRyaXN0YXRlIFwmIzM0O0lQdjY6IE1vYmlsaXR5XCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0xMTktXG5uZXQvaXB2Ni9LY29uZmlnOjEyMDpjb25maWcgSVBWNl9JTEFcbm5ldC9pcHY2L0tjb25maWctMTIxLVx0dHJpc3RhdGUgXCYjMzQ7SVB2NjogSWRlbnRpZmllciBMb2NhdG9yIEFkZHJlc3NpbmcgKElMQSlcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnPTE0Nj1jb25maWcgSU5FVDZfVFVOTkVMXG4tLVxubmV0L2lwdjYvS2NvbmZpZy0xNDktXG5uZXQvaXB2Ni9LY29uZmlnOjE1MDpjb25maWcgSVBWNl9WVElcbm5ldC9pcHY2L0tjb25maWctMTUxLVx0dHJpc3RhdGUgXCYjMzQ7VmlydHVhbCAoc2VjdXJlKSBJUHY2OiB0dW5uZWxpbmdcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTE2MS1cbm5ldC9pcHY2L0tjb25maWc6MTYyOmNvbmZpZyBJUFY2X1NJVFxubmV0L2lwdjYvS2NvbmZpZy0xNjMtXHR0cmlzdGF0ZSBcJiMzNDtJUHY2OiBJUHY2LWluLUlQdjQgdHVubmVsIChTSVQgZHJpdmVyKVwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMTc2LVxubmV0L2lwdjYvS2NvbmZpZzoxNzc6Y29uZmlnIElQVjZfU0lUXzZSRFxubmV0L2lwdjYvS2NvbmZpZy0xNzgtXHRib29sIFwmIzM0O0lQdjY6IElQdjYgUmFwaWQgRGVwbG95bWVudCAoNlJEKVwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMTk1LVxubmV0L2lwdjYvS2NvbmZpZzoxOTY6Y29uZmlnIElQVjZfTkRJU0NfTk9ERVRZUEVcbm5ldC9pcHY2L0tjb25maWctMTk3LVx0Ym9vbFxubmV0L2lwdjYvS2NvbmZpZy0xOTgtXG5uZXQvaXB2Ni9LY29uZmlnOjE5OTpjb25maWcgSVBWNl9UVU5ORUxcbm5ldC9pcHY2L0tjb25maWctMjAwLVx0dHJpc3RhdGUgXCYjMzQ7SVB2NjogSVAtaW4tSVB2NiB0dW5uZWwgKFJGQzI0NzMpXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0yMDktXG5uZXQvaXB2Ni9LY29uZmlnOjIxMDpjb25maWcgSVBWNl9HUkVcbm5ldC9pcHY2L0tjb25maWctMjExLVx0dHJpc3RhdGUgXCYjMzQ7SVB2NjogR1JFIHR1bm5lbFwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMjI3LVxubmV0L2lwdjYvS2NvbmZpZzoyMjg6Y29uZmlnIElQVjZfRk9VXG5uZXQvaXB2Ni9LY29uZmlnLTIyOS1cdHRyaXN0YXRlXG4tLVxubmV0L2lwdjYvS2NvbmZpZy0yMzEtXG5uZXQvaXB2Ni9LY29uZmlnOjIzMjpjb25maWcgSVBWNl9GT1VfVFVOTkVMXG5uZXQvaXB2Ni9LY29uZmlnLTIzMy1cdHRyaXN0YXRlXG4tLVxubmV0L2lwdjYvS2NvbmZpZy0yMzYtXG5uZXQvaXB2Ni9LY29uZmlnOjIzNzpjb25maWcgSVBWNl9NVUxUSVBMRV9UQUJMRVNcbm5ldC9pcHY2L0tjb25maWctMjM4LVx0Ym9vbCBcJiMzNDtJUHY2OiBNdWx0aXBsZSBSb3V0aW5nIFRhYmxlc1wmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMjQyLVxubmV0L2lwdjYvS2NvbmZpZzoyNDM6Y29uZmlnIElQVjZfU1VCVFJFRVNcbm5ldC9pcHY2L0tjb25maWctMjQ0LVx0Ym9vbCBcJiMzNDtJUHY2OiBzb3VyY2UgYWRkcmVzcyBiYXNlZCByb3V0aW5nXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0yNTYtXG5uZXQvaXB2Ni9LY29uZmlnOjI1Nzpjb25maWcgSVBWNl9NUk9VVEVcbm5ldC9pcHY2L0tjb25maWctMjU4LVx0Ym9vbCBcJiMzNDtJUHY2OiBtdWx0aWNhc3Qgcm91dGluZ1wmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMjY0LVxubmV0L2lwdjYvS2NvbmZpZzoyNjU6Y29uZmlnIElQVjZfTVJPVVRFX01VTFRJUExFX1RBQkxFU1xubmV0L2lwdjYvS2NvbmZpZy0yNjYtXHRib29sIFwmIzM0O0lQdjY6IG11bHRpY2FzdCBwb2xpY3kgcm91dGluZ1wmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMjc4LVxubmV0L2lwdjYvS2NvbmZpZzoyNzk6Y29uZmlnIElQVjZfUElNU01fVjJcbm5ldC9pcHY2L0tjb25maWctMjgwLVx0Ym9vbCBcJiMzNDtJUHY2OiBQSU0tU00gdmVyc2lvbiAyIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTI4NS1cbm5ldC9pcHY2L0tjb25maWc6Mjg2OmNvbmZpZyBJUFY2X1NFRzZfTFdUVU5ORUxcbm5ldC9pcHY2L0tjb25maWctMjg3LVx0Ym9vbCBcJiMzNDtJUHY2OiBTZWdtZW50IFJvdXRpbmcgSGVhZGVyIGVuY2Fwc3VsYXRpb24gc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMjk5LVxubmV0L2lwdjYvS2NvbmZpZzozMDA6Y29uZmlnIElQVjZfU0VHNl9ITUFDXG5uZXQvaXB2Ni9LY29uZmlnLTMwMS1cdGJvb2wgXCYjMzQ7SVB2NjogU2VnbWVudCBSb3V0aW5nIEhNQUMgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMzExLVxubmV0L2lwdjYvS2NvbmZpZzozMTI6Y29uZmlnIElQVjZfU0VHNl9CUEZcbm5ldC9pcHY2L0tjb25maWctMzEzLVx0ZGVmX2Jvb2wgeVxuLS1cbm5ldC9pcHY2L0tjb25maWctMzE2LVxubmV0L2lwdjYvS2NvbmZpZzozMTc6Y29uZmlnIElQVjZfUlBMX0xXVFVOTkVMXG5uZXQvaXB2Ni9LY29uZmlnLTMxOC1cdGJvb2wgXCYjMzQ7SVB2NjogUlBMIFNvdXJjZSBSb3V0aW5nIEhlYWRlciBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0zMjctXG5uZXQvaXB2Ni9LY29uZmlnOjMyODpjb25maWcgSVBWNl9JT0FNNl9MV1RVTk5FTFxubmV0L2lwdjYvS2NvbmZpZy0zMjktXHRib29sIFwmIzM0O0lQdjY6IElPQU0gUHJlLWFsbG9jYXRlZCBUcmFjZSBpbnNlcnRpb24gc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwNDozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTczMQoJCQkJCQkJb3V0cHV0OiAxNjkKCQkJCQkJCXRob3VnaHRzOiAzODIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgRnV6emluZyBTdHJhdGVneTogVGFyZ2V0aW5nIFRDUCBMaXN0ZW5pbmcgU29ja2V0cyB3aXRoIElQdjYgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyB0aGUgYElQVjZgIGNvbmZpZyBpcyBkZWZpbml0ZWx5IHJlbGV2YW50IGhlcmUuIE15IGluaXRpYWwgcmV2aWV3IG9mIHRoZSBjb2RlIGhhcyBoaWdobGlnaHRlZCBzZXZlcmFsIGtleSBmdW5jdGlvbnMgdG8gZm9jdXMgbXkgZnV6emluZyBlZmZvcnRzIG9uLiBJJiMzOTt2ZSBwaW5wb2ludGVkIGB0Y3BfcmN2X2xpc3Rlbl9zdGF0ZV9wcm9jZXNzYCwgYGRvX2lwdjZfc2V0c29ja29wdGAsIGB0Y3BfdjRfcmN2YCwgYW5kIGB0Y3BfdjZfcmN2YCBhcyB0aGUgYXJlYXMgb2YgaW50ZXJlc3QuCgpJbW1lZGlhdGVseSwgSSYjMzk7bSBkaXNtaXNzaW5nIGB0Y3BfdjRfcmN2YCBhbmQgYHRjcF92Nl9yY3ZgIOKAkyB0aG9zZSBhcmUgaG90LXBhdGggZnVuY3Rpb25zLiBGdXp6aW5nIHRob3NlIGRpcmVjdGx5IGlzIGxpa2VseSB0byBiZSBub2lzeSBhbmQgZ2VuZXJhdGUgYSBsb3Qgb2YgZmFsc2UgcG9zaXRpdmVzLCB3aGljaCBpcyBub3QgaWRlYWwuIEJ1dCB0aGF0IGRvZXNuJiMzOTt0IG1lYW4gSSB3b24mIzM5O3QgaW5kaXJlY3RseSB0ZXN0IHRoZW0uCgpgdGNwX3Jjdl9saXN0ZW5fc3RhdGVfcHJvY2Vzc2AgbG9va3MgcHJvbWlzaW5nLCB0aG91Z2guIFRoZSBzYW1lIGlzIHRydWUgZm9yIGBkb19pcHY2X3NldHNvY2tvcHRgLiBJdCBsb29rcyBsaWtlIGBza19jbG9uZWAgaXMgbW9kaWZpZWQgdG9vLCBidXQgSSYjMzk7bSBzZXR0aW5nIGl0IGFzaWRlIGJlY2F1c2UgdGhhdCYjMzk7cyBtb3JlIG9mIGEgZ2VuZXJhbCBmdW5jdGlvbi4gSXQmIzM5O3MgbGVzcyBsaWtlbHkgdG8gZXhwb3NlIHZ1bG5lcmFiaWxpdGllcyBzcGVjaWZpYyB0byB0aGlzIHBhdGNoLgoKVGhlIG5leHQgcXVlc3Rpb246IGFyZSBgdGNwX3Jjdl9saXN0ZW5fc3RhdGVfcHJvY2Vzc2AgYW5kIGBkb19pcHY2X3NldHNvY2tvcHRgIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2U/IFllcywgaW4gYm90aCBjYXNlcy4gSSBjYW4gdHJpZ2dlciBgdGNwX3Jjdl9saXN0ZW5fc3RhdGVfcHJvY2Vzc2AgYnkgc2VuZGluZyBUQ1AgcGFja2V0cyB0byBhIGxpc3RlbmluZyBzb2NrZXQsIGFuZCBJIGNhbiB0cmlnZ2VyIGBkb19pcHY2X3NldHNvY2tvcHRgIGJ5IGNhbGxpbmcgYHNldHNvY2tvcHRgIHdpdGggYElQVjZfQUREUkZPUk1gIG9uIGFuIElQdjYgc29ja2V0LiBUaGVzZSBhcmUgaWRlYWwgdGFyZ2V0cy4KCkVzc2VudGlhbGx5LCB0aGlzIHBhdGNoIG1vZGlmaWVzIGhvdyBUQ1AgbGlzdGVuaW5nIHNvY2tldHMgaGFuZGxlIHBhY2tldHMgYW5kIGludHJvZHVjZXMgbG9ja2xlc3MgcmVjZWl2ZSBwYXRocy4gSXQgYWxzbyBhZGRzIG5ldyBjaGVja3MgaW4gYGRvX2lwdjZfc2V0c29ja29wdGAgd2hlbiB5b3UgZGVhbCB3aXRoIElQdjYgc29ja2V0IG9wdGlvbnMgYW5kIHNvY2tldHMgd2hpY2ggaGF2ZSBwZW5kaW5nIGNvbm5lY3Rpb24gcmVxdWVzdHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgY29yZSBUQ1Agc3RhY2sgYW5kIElQdjYgc29ja2V0IG9wdGlvbnMuIFRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIG5ldHdvcmsgdHJhZmZpYyBhbmQgYXJlIG15IGtleSB0YXJnZXRzIGZvciBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwNDozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBWNiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RjcF9yY3ZfbGlzdGVuX3N0YXRlX3Byb2Nlc3MmIzM0OywKICAgICYjMzQ7ZG9faXB2Nl9zZXRzb2Nrb3B0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIFRDUCBsaXN0ZW5pbmcgc29ja2V0IHBhY2tldCBwcm9jZXNzaW5nIGJ5IGludHJvZHVjaW5nIGB0Y3BfcmN2X2xpc3Rlbl9zdGF0ZV9wcm9jZXNzYCBhbmQgbG9ja2xlc3MgbGlzdGVuIHJlY2VpdmUgcGF0aHMgKGB0Y3BfdjRfcmN2X2xpc3RlbmAsIGB0Y3BfdjZfcmN2X2xpc3RlbmApLiBJdCBhbHNvIGFkZHMgY2hlY2tzIGluIGBkb19pcHY2X3NldHNvY2tvcHRgIGZvciBgSVBWNl9BRERSRk9STWAgb24gVENQIHNvY2tldHMgd2l0aCBwZW5kaW5nIGNvbm5lY3Rpb24gcmVxdWVzdHMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUgVENQIHN0YWNrIGFuZCBJUHY2IHNvY2tldCBvcHRpb25zLCByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIGFuZCBuZXR3b3JrIHRyYWZmaWMsIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUFY2JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGNwX3Jjdl9saXN0ZW5fc3RhdGVfcHJvY2VzcyYjMzQ7LAogICAgJiMzNDtkb19pcHY2X3NldHNvY2tvcHQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgVENQIGxpc3RlbmluZyBzb2NrZXQgcGFja2V0IHByb2Nlc3NpbmcgYnkgaW50cm9kdWNpbmcgYHRjcF9yY3ZfbGlzdGVuX3N0YXRlX3Byb2Nlc3NgIGFuZCBsb2NrbGVzcyBsaXN0ZW4gcmVjZWl2ZSBwYXRocyAoYHRjcF92NF9yY3ZfbGlzdGVuYCwgYHRjcF92Nl9yY3ZfbGlzdGVuYCkuIEl0IGFsc28gYWRkcyBjaGVja3MgaW4gYGRvX2lwdjZfc2V0c29ja29wdGAgZm9yIGBJUFY2X0FERFJGT1JNYCBvbiBUQ1Agc29ja2V0cyB3aXRoIHBlbmRpbmcgY29ubmVjdGlvbiByZXF1ZXN0cy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgY29yZSBUQ1Agc3RhY2sgYW5kIElQdjYgc29ja2V0IG9wdGlvbnMsIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgYW5kIG5ldHdvcmsgdHJhZmZpYywgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDA0OjM3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDQ6Mzc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW1wbGVtZW50cyBsb2NrbGVzcyBUQ1AgbGlzdGVuZXIgcHJvY2Vzc2luZyBhbmQgZml4ZXMgc2V2ZXJhbCBpc3N1ZXMgcmVsYXRlZCB0byBzb2NrZXQgY2xvbmluZyBhbmQgc3RhdGUgaW5oZXJpdGFuY2UgKGUuZy4sIHJlc2V0dGluZyBgc2tfdHNxX2ZsYWdzYCwgYHBhY2tldHNfb3V0YCwgYW5kIGBwaW5ldDZgIGluIGNsb25lZCBzb2NrZXRzKS4gXG5cbjEuIFRoZSBmaWVsZHMgYmVpbmcgZXhwbGljaXRseSB6ZXJvZWQgb3Igc2V0IHRvIE5VTEwgaW4gYHNrX2Nsb25lYCBhbmQgYHRjcF9jcmVhdGVfb3BlbnJlcV9jaGlsZGAgZG8gbm90IHJlcHJlc2VudCB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhleSBhcmUgYWxyZWFkeSBmdWxseSBpbml0aWFsaXplZCB2aWEgYHNvY2tfY29weWAgKHdoaWNoIGNvcGllcyB0aGUgcGFyZW50IHNvY2tldCYjMzk7cyBzdGF0ZSkuIFRoZSBjaGFuZ2VzIG1lcmVseSBwcmV2ZW50IHRoZSBjaGlsZCBzb2NrZXQgZnJvbSBpbmhlcml0aW5nIHN0YWxlIG9yIGluY29ycmVjdCB2YWx1ZXMgZnJvbSB0aGUgbGlzdGVuZXIuXG4yLiBUaGUgbG9ja2xlc3MgbGlzdGVuZXIgcHJvY2Vzc2luZyAoYHRjcF92NF9yY3ZfbGlzdGVuYCkgaW50cm9kdWNlcyBjb25jdXJyZW5jeSBjaGFuZ2VzLiBBbnkgcmVzdWx0aW5nIGJ1Z3Mgd291bGQgYmUgZGF0YSByYWNlcyAoY2F1Z2h0IGJ5IEtDU0FOKSBvciB1c2UtYWZ0ZXItZnJlZS9tZW1vcnkgY29ycnVwdGlvbiAoY2F1Z2h0IGJ5IEtBU0FOKS5cbjMuIFRoZSBgSVBWNl9BRERSRk9STWAgYW5kIGBkb19pcHY2X3NldHNvY2tvcHRgIGNoYW5nZXMgYWRkcmVzcyBsb2dpYyBidWdzIGFuZCBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW9zLCB3aGljaCBhcmUgd2VsbCB3aXRoaW4gdGhlIGRvbWFpbiBvZiBLQVNBTi5cblxuVGhlcmUgYXJlIG5vIG5ldyBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm8gbmV3IGFsbG9jYXRpb25zIGxlZnQgdW5pbml0aWFsaXplZCwgYW5kIG5vIGNoYW5nZXMgdG8gYm91bmRzIGNoZWNraW5nIHRoYXQgd291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4Y2U1ZDU2YzA2Zjk2ODZlMzk4Y2VhNzc4OWU1MTVmYmYzMWI1YWQ4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMjQgMDQ6Mzc6MTEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC90Y3AuaCBiL2luY2x1ZGUvbmV0L3RjcC5oCmluZGV4IDJjNWI4ODk1MzBiNTUuLmFkZDQzOGQ2NTYxYmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3RjcC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L3RjcC5oCkBAIC0zOTIsNiAmIzQzOzM5Miw4IEBAIHZvaWQgdGNwX3dyaXRlX3RpbWVyX2hhbmRsZXIoc3RydWN0IHNvY2sgKnNrKTsKIHZvaWQgdGNwX2RlbGFja190aW1lcl9oYW5kbGVyKHN0cnVjdCBzb2NrICpzayk7CiBpbnQgdGNwX2lvY3RsKHN0cnVjdCBzb2NrICpzaywgaW50IGNtZCwgaW50ICprYXJnKTsKIGVudW0gc2tiX2Ryb3BfcmVhc29uIHRjcF9yY3Zfc3RhdGVfcHJvY2VzcyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpOwomIzQzO2VudW0gc2tiX2Ryb3BfcmVhc29uIHRjcF9yY3ZfbGlzdGVuX3N0YXRlX3Byb2Nlc3Moc3RydWN0IHNvY2sgKnNrLAomIzQzOwkJCQkJCSAgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiB2b2lkIHRjcF9yY3ZfZXN0YWJsaXNoZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIHZvaWQgdGNwX3JjdmJ1Zl9ncm93KHN0cnVjdCBzb2NrICpzaywgdTMyIG5ld3ZhbCk7CiB2b2lkIHRjcF9yY3Zfc3BhY2VfYWRqdXN0KHN0cnVjdCBzb2NrICpzayk7CmRpZmYgLS1naXQgYS9uZXQvY29yZS9zb2NrLmMgYi9uZXQvY29yZS9zb2NrLmMKaW5kZXggMWFkNDE5MDRkYjI1Yi4uMDZmYmIxOTgyNGUyNiAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvc29jay5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL3NvY2suYwpAQCAtMjQ3OSw3ICYjNDM7MjQ3OSw3IEBAIHN0YXRpYyB2b2lkIHNrX2luaXRfY29tbW9uKHN0cnVjdCBzb2NrICpzaykKIHN0cnVjdCBzb2NrICpza19jbG9uZShjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IGdmcF90IHByaW9yaXR5LAogCQkgICAgICBib29sIGxvY2spCiB7Ci0Jc3RydWN0IHByb3RvICpwcm90ID0gUkVBRF9PTkNFKHNrLSZndDtza19wcm90KTsKJiM0MzsJc3RydWN0IHByb3RvICpwcm90ID0gc2stJmd0O3NrX3Byb3RfY3JlYXRvcjsKIAlzdHJ1Y3Qgc2tfZmlsdGVyICpmaWx0ZXI7CiAJYm9vbCBpc19jaGFyZ2VkID0gdHJ1ZTsKIAlzdHJ1Y3Qgc29jayAqbmV3c2s7CkBAIC0yNTMzLDYgJiM0MzsyNTMzLDcgQEAgc3RydWN0IHNvY2sgKnNrX2Nsb25lKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgY29uc3QgZ2ZwX3QgcHJpb3JpdHksCiAJbmV3c2stJmd0O3NrX3Jlc2VydmVkX21lbSAgPSAwOwogCURFQlVHX05FVF9XQVJOX09OX09OQ0UobmV3c2stJmd0O3NrX2Ryb3BfY291bnRlcnMpOwogCXNrX2Ryb3BzX3Jlc2V0KG5ld3NrKTsKJiM0MzsJbmV3c2stJmd0O3NrX3RzcV9mbGFncwk9IDA7CiAJbmV3c2stJmd0O3NrX3NlbmRfaGVhZAk9IE5VTEw7CiAJbmV3c2stJmd0O3NrX3VzZXJsb2Nrcwk9IHNrLSZndDtza191c2VybG9ja3MgJmFtcDsgflNPQ0tfQklORFBPUlRfTE9DSzsKIAlhdG9taWNfc2V0KCZhbXA7bmV3c2stJmd0O3NrX3pja2V5LCAwKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9pbnB1dC5jIGIvbmV0L2lwdjQvdGNwX2lucHV0LmMKaW5kZXggMGY2MGExZGJmOTI3NC4uNzdhZjE4ZmJhNjZiNCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX2lucHV0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvdGNwX2lucHV0LmMKQEAgLTcxNDEsNiAmIzQzOzcxNDEsNDIgQEAgc3RhdGljIHZvaWQgdGNwX3Jjdl9zeW5yZWN2X3N0YXRlX2Zhc3RvcGVuKHN0cnVjdCBzb2NrICpzaykKIAl0Y3BfcmVhcm1fcnRvKHNrKTsKIH0KIAomIzQzO2VudW0gc2tiX2Ryb3BfcmVhc29uIHRjcF9yY3ZfbGlzdGVuX3N0YXRlX3Byb2Nlc3Moc3RydWN0IHNvY2sgKnNrLAomIzQzOwkJCQkJCSAgc3RydWN0IHNrX2J1ZmYgKnNrYikKJiM0Mzt7CiYjNDM7CWNvbnN0IHN0cnVjdCB0Y3BoZHIgKnRoID0gdGNwX2hkcihza2IpOwomIzQzOwlTS0JfRFIocmVhc29uKTsKJiM0MzsKJiM0MzsJaWYgKHRoLSZndDthY2spCiYjNDM7CQlyZXR1cm4gU0tCX0RST1BfUkVBU09OX1RDUF9GTEFHUzsKJiM0MzsKJiM0MzsJaWYgKHRoLSZndDtyc3QpIHsKJiM0MzsJCVNLQl9EUl9TRVQocmVhc29uLCBUQ1BfUkVTRVQpOwomIzQzOwkJZ290byBkaXNjYXJkOwomIzQzOwl9CiYjNDM7CWlmICh0aC0mZ3Q7c3luKSB7CiYjNDM7CQlpZiAodGgtJmd0O2ZpbikgewomIzQzOwkJCVNLQl9EUl9TRVQocmVhc29uLCBUQ1BfRkxBR1MpOwomIzQzOwkJCWdvdG8gZGlzY2FyZDsKJiM0MzsJCX0KJiM0MzsJCS8qIEl0IGlzIHBvc3NpYmxlIHRoYXQgd2UgcHJvY2VzcyBTWU4gcGFja2V0cyBmcm9tIGJhY2tsb2csCiYjNDM7CQkgKiBzbyB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0byBkaXNhYmxlIEJIIGFuZCBSQ1UgcmlnaHQgdGhlcmUuCiYjNDM7CQkgKi8KJiM0MzsJCXJjdV9yZWFkX2xvY2soKTsKJiM0MzsJCWxvY2FsX2JoX2Rpc2FibGUoKTsKJiM0MzsJCWluZXRfY3NrKHNrKS0mZ3Q7aWNza19hZl9vcHMtJmd0O2Nvbm5fcmVxdWVzdChzaywgc2tiKTsKJiM0MzsJCWxvY2FsX2JoX2VuYWJsZSgpOwomIzQzOwkJcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CiYjNDM7CQljb25zdW1lX3NrYihza2IpOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsJU0tCX0RSX1NFVChyZWFzb24sIFRDUF9GTEFHUyk7CiYjNDM7ZGlzY2FyZDoKJiM0MzsJdGNwX2Ryb3BfcmVhc29uKHNrLCBza2IsIHJlYXNvbik7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIC8qCiAgKglUaGlzIGZ1bmN0aW9uIGltcGxlbWVudHMgdGhlIHJlY2VpdmluZyBwcm9jZWR1cmUgb2YgUkZDIDc5MyBmb3IKICAqCWFsbCBzdGF0ZXMgZXhjZXB0IEVTVEFCTElTSEVEIGFuZCBUSU1FX1dBSVQuCkBAIC03MTUyLDcgJiM0Mzs3MTg4LDYgQEAgZW51bSBza2JfZHJvcF9yZWFzb24KIHRjcF9yY3Zfc3RhdGVfcHJvY2VzcyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7Ci0Jc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spOwogCWNvbnN0IHN0cnVjdCB0Y3BoZHIgKnRoID0gdGNwX2hkcihza2IpOwogCXN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcTsKIAlpbnQgcXVldWVkID0gMDsKQEAgLTcxNjQsMzIgJiM0Mzs3MTk5LDcgQEAgdGNwX3Jjdl9zdGF0ZV9wcm9jZXNzKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAkJZ290byBkaXNjYXJkOwogCiAJY2FzZSBUQ1BfTElTVEVOOgotCQlpZiAodGgtJmd0O2FjaykKLQkJCXJldHVybiBTS0JfRFJPUF9SRUFTT05fVENQX0ZMQUdTOwotCi0JCWlmICh0aC0mZ3Q7cnN0KSB7Ci0JCQlTS0JfRFJfU0VUKHJlYXNvbiwgVENQX1JFU0VUKTsKLQkJCWdvdG8gZGlzY2FyZDsKLQkJfQotCQlpZiAodGgtJmd0O3N5bikgewotCQkJaWYgKHRoLSZndDtmaW4pIHsKLQkJCQlTS0JfRFJfU0VUKHJlYXNvbiwgVENQX0ZMQUdTKTsKLQkJCQlnb3RvIGRpc2NhcmQ7Ci0JCQl9Ci0JCQkvKiBJdCBpcyBwb3NzaWJsZSB0aGF0IHdlIHByb2Nlc3MgU1lOIHBhY2tldHMgZnJvbSBiYWNrbG9nLAotCQkJICogc28gd2UgbmVlZCB0byBtYWtlIHN1cmUgdG8gZGlzYWJsZSBCSCBhbmQgUkNVIHJpZ2h0IHRoZXJlLgotCQkJICovCi0JCQlyY3VfcmVhZF9sb2NrKCk7Ci0JCQlsb2NhbF9iaF9kaXNhYmxlKCk7Ci0JCQlpY3NrLSZndDtpY3NrX2FmX29wcy0mZ3Q7Y29ubl9yZXF1ZXN0KHNrLCBza2IpOwotCQkJbG9jYWxfYmhfZW5hYmxlKCk7Ci0JCQlyY3VfcmVhZF91bmxvY2soKTsKLQotCQkJY29uc3VtZV9za2Ioc2tiKTsKLQkJCXJldHVybiAwOwotCQl9Ci0JCVNLQl9EUl9TRVQocmVhc29uLCBUQ1BfRkxBR1MpOwotCQlnb3RvIGRpc2NhcmQ7CiYjNDM7CQlyZXR1cm4gdGNwX3Jjdl9saXN0ZW5fc3RhdGVfcHJvY2Vzcyhzaywgc2tiKTsKIAogCWNhc2UgVENQX1NZTl9TRU5UOgogCQl0cC0mZ3Q7cnhfb3B0LnNhd190c3RhbXAgPSAwOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2lwdjQuYyBiL25ldC9pcHY0L3RjcF9pcHY0LmMKaW5kZXggMTkwYzdhZjRjZjkyMy4uMmZhODk1ODM4MGE1YiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX2lwdjQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC90Y3BfaXB2NC5jCkBAIC0xNzE0LDYgJiM0MzsxNzE0LDE0IEBAIHN0cnVjdCBzb2NrICp0Y3BfdjRfc3luX3JlY3Zfc29jayhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsCiAJCWluZXRfY3NrKG5ld3NrKS0mZ3Q7aWNza19leHRfaGRyX2xlbiA9IGluZXRfb3B0LSZndDtvcHQub3B0bGVuOwogCWF0b21pY19zZXQoJmFtcDtuZXdpbmV0LSZndDtpbmV0X2lkLCBnZXRfcmFuZG9tX3UxNigpKTsKIAomIzQzOyNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KQomIzQzOwkvKiBOZXZlciBpbmhlcml0IHRoZSBsaXN0ZW5lciYjMzk7cyBpcHY2X3BpbmZvOyBJUFY2X0FERFJGT1JNIGxlYXZlcyBpdCBzZXQKJiM0MzsJICogb24gYW4gQUZfSU5FVCBzb2NrZXQuICB0Y3BfdjZfbWFwcGVkX2NoaWxkX2luaXQoKSBpbnN0YWxscyBvdXIgb3duLgomIzQzOwkgKi8KJiM0MzsJbmV3aW5ldC0mZ3Q7cGluZXQ2ID0gTlVMTDsKJiM0MzsJbmV3aW5ldC0mZ3Q7aXB2Nl9mbF9saXN0ID0gTlVMTDsKJiM0MzsjZW5kaWYKJiM0MzsKIAkvKiBTZXQgVG9TIG9mIHRoZSBuZXcgc29ja2V0IGJhc2VkIHVwb24gdGhlIHZhbHVlIG9mIGluY29taW5nIFNZTi4KIAkgKiBFQ1QgYml0cyBhcmUgc2V0IGxhdGVyIGluIHRjcF9pbml0X3RyYW5zZmVyKCkuCiAJICovCkBAIC0xODIwLDcgJiM0MzsxODI4LDcgQEAgdTE2IHRjcF92NF9nZXRfc3luY29va2llKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGlwaGRyICppcGgsCiBJTkRJUkVDVF9DQUxMQUJMRV9ERUNMQVJFKHN0cnVjdCBkc3RfZW50cnkgKmlwdjRfZHN0X2NoZWNrKHN0cnVjdCBkc3RfZW50cnkgKiwKIAkJCQkJCQkgICB1MzIpKTsKIC8qIFRoZSBzb2NrZXQgbXVzdCBoYXZlIGl0JiMzOTtzIHNwaW5sb2NrIGhlbGQgd2hlbiB3ZSBnZXQKLSAqIGhlcmUsIHVubGVzcyBpdCBpcyBhIFRDUF9MSVNURU4gc29ja2V0LgomIzQzOyAqIGhlcmUuCiAgKgogICogV2UgaGF2ZSBhIHBvdGVudGlhbCBkb3VibGUtbG9jayBjYXNlIGhlcmUsIHNvIGV2ZW4gd2hlbgogICogZG9pbmcgYmFja2xvZyBwcm9jZXNzaW5nIHdlIHVzZSB0aGUgQkggbG9ja2luZyBzY2hlbWUuCkBAIC0xODk4LDYgJiM0MzsxOTA2LDQ2IEBAIGludCB0Y3BfdjRfZG9fcmN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAlnb3RvIGRpc2NhcmQ7CiB9CiAKJiM0MzsvKiBAc2sgaXMgbm90IGxvY2tlZCBoZXJlIGFuZCBjYW4gbGVhdmUgVENQX0xJU1RFTjsgZG8gbm90IHRlc3Qgc2tfc3RhdGUuICovCiYjNDM7c3RhdGljIG5vaW5saW5lIGludCB0Y3BfdjRfcmN2X2xpc3RlbihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCiYjNDM7ewomIzQzOwllbnVtIHNrYl9kcm9wX3JlYXNvbiByZWFzb247CiYjNDM7CXN0cnVjdCBzb2NrICpuc2s7CiYjNDM7CiYjNDM7CXJlYXNvbiA9IHBzcF9za19yeF9wb2xpY3lfY2hlY2soc2ssIHNrYik7CiYjNDM7CWlmIChyZWFzb24pCiYjNDM7CQlnb3RvIGVycl9kaXNjYXJkOwomIzQzOwomIzQzOwlpZiAodGNwX2NoZWNrc3VtX2NvbXBsZXRlKHNrYikpCiYjNDM7CQlnb3RvIGNzdW1fZXJyOwomIzQzOwomIzQzOwluc2sgPSB0Y3BfdjRfY29va2llX2NoZWNrKHNrLCBza2IpOwomIzQzOwlpZiAoIW5zaykKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlpZiAobnNrICE9IHNrKSB7CiYjNDM7CQlyZWFzb24gPSB0Y3BfY2hpbGRfcHJvY2VzcyhzaywgbnNrLCBza2IpOwomIzQzOwkJc29ja19wdXQobnNrKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXJlYXNvbiA9IHRjcF9yY3ZfbGlzdGVuX3N0YXRlX3Byb2Nlc3Moc2ssIHNrYik7CiYjNDM7CX0KJiM0MzsJaWYgKCFyZWFzb24pCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJdGNwX3Y0X3NlbmRfcmVzZXQoc2ssIHNrYiwgc2tfcnN0X2NvbnZlcnRfZHJvcF9yZWFzb24ocmVhc29uKSk7CiYjNDM7ZGlzY2FyZDoKJiM0MzsJc2tfc2tiX3JlYXNvbl9kcm9wKHNrLCBza2IsIHJlYXNvbik7CiYjNDM7CXJldHVybiAwOwomIzQzOwomIzQzO2NzdW1fZXJyOgomIzQzOwlyZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fVENQX0NTVU07CiYjNDM7CXRyYWNlX3RjcF9iYWRfY3N1bShza2IpOwomIzQzOwlUQ1BfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgVENQX01JQl9DU1VNRVJST1JTKTsKJiM0MztlcnJfZGlzY2FyZDoKJiM0MzsJVENQX0lOQ19TVEFUUyhzb2NrX25ldChzayksIFRDUF9NSUJfSU5FUlJTKTsKJiM0MzsJZ290byBkaXNjYXJkOwomIzQzO30KJiM0MzsKIGVudW0gc2tiX2Ryb3BfcmVhc29uIHRjcF9hZGRfYmFja2xvZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJdTMyIHRhaWxfZ3NvX3NpemUsIHRhaWxfZ3NvX3NlZ3M7CkBAIC0yMjM1LDcgJiM0MzsyMjgzLDcgQEAgaW50IHRjcF92NF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYikKIAlza2ItJmd0O2RldiA9IE5VTEw7CiAKIAlpZiAoc2stJmd0O3NrX3N0YXRlID09IFRDUF9MSVNURU4pIHsKLQkJcmV0ID0gdGNwX3Y0X2RvX3Jjdihzaywgc2tiKTsKJiM0MzsJCXJldCA9IHRjcF92NF9yY3ZfbGlzdGVuKHNrLCBza2IpOwogCQlnb3RvIHB1dF9hbmRfcmV0dXJuOwogCX0KIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jIGIvbmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jCmluZGV4IDEyMjU0ZTZlYjJmMzQuLjJmZGUxOTZkZDMwMmYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9taW5pc29ja3MuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMKQEAgLTU5MSw2ICYjNDM7NTkxLDcgQEAgc3RydWN0IHNvY2sgKnRjcF9jcmVhdGVfb3BlbnJlcV9jaGlsZChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssCiAJbmV3dHAtJmd0O3RvdGFsX3JldHJhbnMgPSByZXEtJmd0O251bV9yZXRyYW5zOwogCiAJdGNwX2luaXRfeG1pdF90aW1lcnMobmV3c2spOwomIzQzOwluZXd0cC0mZ3Q7b3V0X29mX29yZGVyX3F1ZXVlID0gUkJfUk9PVDsKIAlXUklURV9PTkNFKG5ld3RwLSZndDt3cml0ZV9zZXEsIG5ld3RwLSZndDtwdXNoZWRfc2VxID0gdHJlcS0mZ3Q7c250X2lzbiAmIzQzOyAxKTsKIAogCWlmIChzb2NrX2ZsYWcobmV3c2ssIFNPQ0tfS0VFUE9QRU4pKQpAQCAtNjU5LDYgJiM0Mzs2NjAsMTIgQEAgc3RydWN0IHNvY2sgKnRjcF9jcmVhdGVfb3BlbnJlcV9jaGlsZChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssCiAJdGNwX2Vjbl9vcGVucmVxX2NoaWxkKG5ld3NrLCByZXEsIHNrYik7CiAJbmV3dHAtJmd0O2Zhc3RvcGVuX3JlcSA9IE5VTEw7CiAJUkNVX0lOSVRfUE9JTlRFUihuZXd0cC0mZ3Q7ZmFzdG9wZW5fcnNrLCBOVUxMKTsKJiM0MzsJbmV3dHAtJmd0O3BhY2tldHNfb3V0ID0gMDsKJiM0MzsJbmV3dHAtJmd0O3JldHJhbnNfb3V0ID0gMDsKJiM0MzsJbmV3dHAtJmd0O3NhY2tlZF9vdXQgPSAwOwomIzQzOwluZXd0cC0mZ3Q7bG9zdF9vdXQgPSAwOwomIzQzOwluZXd0cC0mZ3Q7cmV0cmFuc21pdF9za2JfaGludCA9IE5VTEw7CiYjNDM7CW5ld3RwLSZndDtoaWdoZXN0X3NhY2sgPSBOVUxMOwogCiAJbmV3dHAtJmd0O2JwZl9jaGdfY2NfaW5wcm9ncmVzcyA9IDA7CiAJdGNwX2JwZl9jbG9uZShzaywgbmV3c2spOwpAQCAtOTc0LDcgJiM0Mzs5ODEsNyBAQCBzdHJ1Y3Qgc29jayAqdGNwX2NoZWNrX3JlcShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsCiAJCXRjcF9yZXNldChzaywgc2tiKTsKIAl9CiAJaWYgKCFmYXN0b3BlbikgewotCQlib29sIHVubGlua2VkID0gaW5ldF9jc2tfcmVxc2tfcXVldWVfZHJvcChzaywgcmVxKTsKJiM0MzsJCWJvb2wgdW5saW5rZWQgPSBpbmV0X2Nza19yZXFza19xdWV1ZV9kcm9wKHJlcS0mZ3Q7cnNrX2xpc3RlbmVyLCByZXEpOwogCiAJCWlmICh1bmxpbmtlZCkKIAkJCV9fTkVUX0lOQ19TVEFUUyhzb2NrX25ldChzayksIExJTlVYX01JQl9FTUJSWU9OSUNSU1RTKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2FmX2luZXQ2LmMgYi9uZXQvaXB2Ni9hZl9pbmV0Ni5jCmluZGV4IDI4MjkxMmExMTk5OTkuLjY4YjMzMGY2OTQxZDAgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2FmX2luZXQ2LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvYWZfaW5ldDYuYwpAQCAtNDc5LDYgJiM0Mzs0NzksMTAgQEAgdm9pZCBpbmV0Nl9jbGVhbnVwX3NvY2soc3RydWN0IHNvY2sgKnNrKQogCXN0cnVjdCBza19idWZmICpza2I7CiAJc3RydWN0IGlwdjZfdHhvcHRpb25zICpvcHQ7CiAKJiM0MzsJLyogQUZfSU5FVCBjaGlsZCBvZiBhbiBJUFY2X0FERFJGT1JNJiMzOTtlZCBsaXN0ZW5lcjogbm90aGluZyBvZiBpdHMgb3duLiAqLwomIzQzOwlpZiAoIW5wKQomIzQzOwkJcmV0dXJuOwomIzQzOwogCS8qIFJlbGVhc2Ugcnggb3B0aW9ucyAqLwogCiAJc2tiID0geGNoZygmYW1wO25wLSZndDtwa3RvcHRpb25zLCBOVUxMKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwdjZfc29ja2dsdWUuYyBiL25ldC9pcHY2L2lwdjZfc29ja2dsdWUuYwppbmRleCBiNGM5Nzc0MzRjMmUwLi42ZDJkZDlhZTQ2YTk2IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jCkBAIC01ODcsNiAmIzQzOzU4NywyMSBAQCBpbnQgZG9faXB2Nl9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwKIAkJCQlicmVhazsKIAkJCX0KIAomIzQzOwkJCWlmIChzay0mZ3Q7c2tfcHJvdG9jb2wgPT0gSVBQUk9UT19UQ1ApIHsKJiM0MzsJCQkJaWYgKGluZXRfY3NrX3JlcXNrX3F1ZXVlX2xlbihzaykpIHsKJiM0MzsJCQkJCXJldHYgPSAtRUJVU1k7CiYjNDM7CQkJCQlicmVhazsKJiM0MzsJCQkJfQomIzQzOwkJCQkvKiBBIFNZTiB0aGF0IGZvdW5kIHRoaXMgc29ja2V0IHdoaWxlIGl0IHdhcwomIzQzOwkJCQkgKiBzdGlsbCBsaXN0ZW5pbmcgbWF5IG5vdCBiZSBjb3VudGVkIHlldC4KJiM0MzsJCQkJICovCiYjNDM7CQkJCXN5bmNocm9uaXplX3JjdSgpOwomIzQzOwkJCQlpZiAoaW5ldF9jc2tfcmVxc2tfcXVldWVfbGVuKHNrKSkgewomIzQzOwkJCQkJcmV0diA9IC1FQlVTWTsKJiM0MzsJCQkJCWJyZWFrOwomIzQzOwkJCQl9CiYjNDM7CQkJfQomIzQzOwogCQkJX19pcHY2X3NvY2tfbWNfY2xvc2Uoc2spOwogCQkJX19pcHY2X3NvY2tfYWNfY2xvc2Uoc2spOwogCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni90Y3BfaXB2Ni5jIGIvbmV0L2lwdjYvdGNwX2lwdjYuYwppbmRleCA5ZTkxNTViMWIzYWE3Li5hMmRlZGE5YTQyNThiIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni90Y3BfaXB2Ni5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L3RjcF9pcHY2LmMKQEAgLTE1NTYsNyAmIzQzOzE1NTYsNyBAQCBzdGF0aWMgc3RydWN0IHNvY2sgKnRjcF92Nl9zeW5fcmVjdl9zb2NrKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKgogSU5ESVJFQ1RfQ0FMTEFCTEVfREVDTEFSRShzdHJ1Y3QgZHN0X2VudHJ5ICppcHY0X2RzdF9jaGVjayhzdHJ1Y3QgZHN0X2VudHJ5ICosCiAJCQkJCQkJICAgdTMyKSk7CiAvKiBUaGUgc29ja2V0IG11c3QgaGF2ZSBpdCYjMzk7cyBzcGlubG9jayBoZWxkIHdoZW4gd2UgZ2V0Ci0gKiBoZXJlLCB1bmxlc3MgaXQgaXMgYSBUQ1BfTElTVEVOIHNvY2tldC4KJiM0MzsgKiBoZXJlLgogICoKICAqIFdlIGhhdmUgYSBwb3RlbnRpYWwgZG91YmxlLWxvY2sgY2FzZSBoZXJlLCBzbyBldmVuIHdoZW4KICAqIGRvaW5nIGJhY2tsb2cgcHJvY2Vzc2luZyB3ZSB1c2UgdGhlIEJIIGxvY2tpbmcgc2NoZW1lLgpAQCAtMTcwNCw2ICYjNDM7MTcwNCw0NiBAQCBpbnQgdGNwX3Y2X2RvX3JjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MzsvKiBAc2sgaXMgbm90IGxvY2tlZCBoZXJlIGFuZCBjYW4gbGVhdmUgVENQX0xJU1RFTjsgZG8gbm90IHRlc3Qgc2tfc3RhdGUuICovCiYjNDM7c3RhdGljIG5vaW5saW5lIGludCB0Y3BfdjZfcmN2X2xpc3RlbihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCiYjNDM7ewomIzQzOwllbnVtIHNrYl9kcm9wX3JlYXNvbiByZWFzb247CiYjNDM7CXN0cnVjdCBzb2NrICpuc2s7CiYjNDM7CiYjNDM7CXJlYXNvbiA9IHBzcF9za19yeF9wb2xpY3lfY2hlY2soc2ssIHNrYik7CiYjNDM7CWlmIChyZWFzb24pCiYjNDM7CQlnb3RvIGVycl9kaXNjYXJkOwomIzQzOwomIzQzOwlpZiAodGNwX2NoZWNrc3VtX2NvbXBsZXRlKHNrYikpCiYjNDM7CQlnb3RvIGNzdW1fZXJyOwomIzQzOwomIzQzOwluc2sgPSB0Y3BfdjZfY29va2llX2NoZWNrKHNrLCBza2IpOwomIzQzOwlpZiAoIW5zaykKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlpZiAobnNrICE9IHNrKSB7CiYjNDM7CQlyZWFzb24gPSB0Y3BfY2hpbGRfcHJvY2VzcyhzaywgbnNrLCBza2IpOwomIzQzOwkJc29ja19wdXQobnNrKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXJlYXNvbiA9IHRjcF9yY3ZfbGlzdGVuX3N0YXRlX3Byb2Nlc3Moc2ssIHNrYik7CiYjNDM7CX0KJiM0MzsJaWYgKCFyZWFzb24pCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJdGNwX3Y2X3NlbmRfcmVzZXQoc2ssIHNrYiwgc2tfcnN0X2NvbnZlcnRfZHJvcF9yZWFzb24ocmVhc29uKSk7CiYjNDM7ZGlzY2FyZDoKJiM0MzsJc2tfc2tiX3JlYXNvbl9kcm9wKHNrLCBza2IsIHJlYXNvbik7CiYjNDM7CXJldHVybiAwOwomIzQzOwomIzQzO2NzdW1fZXJyOgomIzQzOwlyZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fVENQX0NTVU07CiYjNDM7CXRyYWNlX3RjcF9iYWRfY3N1bShza2IpOwomIzQzOwlUQ1BfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgVENQX01JQl9DU1VNRVJST1JTKTsKJiM0MztlcnJfZGlzY2FyZDoKJiM0MzsJVENQX0lOQ19TVEFUUyhzb2NrX25ldChzayksIFRDUF9NSUJfSU5FUlJTKTsKJiM0MzsJZ290byBkaXNjYXJkOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIHRjcF92Nl9maWxsX2NiKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBpcHY2aGRyICpoZHIsCiAJCQkgICBjb25zdCBzdHJ1Y3QgdGNwaGRyICp0aCkKIHsKQEAgLTE4OTEsNyAmIzQzOzE5MzEsNyBAQCBJTkRJUkVDVF9DQUxMQUJMRV9TQ09QRSBpbnQgdGNwX3Y2X3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCXNrYi0mZ3Q7ZGV2ID0gTlVMTDsKIAogCWlmIChzay0mZ3Q7c2tfc3RhdGUgPT0gVENQX0xJU1RFTikgewotCQlyZXQgPSB0Y3BfdjZfZG9fcmN2KHNrLCBza2IpOwomIzQzOwkJcmV0ID0gdGNwX3Y2X3Jjdl9saXN0ZW4oc2ssIHNrYik7CiAJCWdvdG8gcHV0X2FuZF9yZXR1cm47CiAJfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwNDozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NTUxCgkJCQkJCQlvdXRwdXQ6IDI5MwoJCQkJCQkJdGhvdWdodHM6IDI0ODQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQXNzZXNzbWVudDogVGhpcyBQYXRjaCBEb2VzbiYjMzk7dCBXYXJyYW50IEl0KioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoaXMgcGF0Y2guIEl0JiMzOTtzIG1vZGlmeWluZyBUQ1Agc29ja2V0IGhhbmRsaW5nLCBlc3BlY2lhbGx5IGFyb3VuZCB0aGUgYFRDUF9MSVNURU5gIHN0YXRlIGFuZCBzb2NrZXQgY2xvbmluZy4gSW5pdGlhbGx5LCBJIHRob3VnaHQgdGhpcyBtaWdodCBiZSBhIEtNU0FOIGNhbmRpZGF0ZSwgYnV0IGFmdGVyIGEgZGVlcCBkaXZlLCBJJiMzOTttIHByZXR0eSBjb25maWRlbnQgaXQmIzM5O3Mgbm90LgoKVGhlIHBhdGNoJiMzOTtzIGNvcmUgY2hhbmdlIGlzIHRvIG1ha2UgdGhlIFRDUCBsaXN0ZW5lciBwcm9jZXNzaW5nIGxvY2tsZXNzLCBwdWxsaW5nIHRoZSBsb2dpYyBvdXQgaW50byBgdGNwX3Y0X3Jjdl9saXN0ZW5gIGFuZCBgdGNwX3Y2X3Jjdl9saXN0ZW5gLiBUaGF0JiMzOTtzIGEgaHVnZSBzaGlmdCDigJMgaXQmIzM5O3MgYWxsIGFib3V0IGNvbmN1cnJlbmN5IG5vdy4gVGhlIGJpZyBkZWFsIGhlcmUgaXMgdGhlIHBvdGVudGlhbCBmb3IgcmFjZSBjb25kaXRpb25zIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgYmVjYXVzZSB3ZSYjMzk7cmUgdGFraW5nIGF3YXkgdGhhdCBsb2NrIHByb3RlY3Rpb24uIEhvd2V2ZXIsIHRoZXNlIGFyZSBwcmVjaXNlbHkgdGhlIGtpbmRzIG9mIHRoaW5ncyBLQ1NBTiAoZGF0YSByYWNlcykgYW5kIEtBU0FOIChVQUYsIG1lbW9yeSBjb3JydXB0aW9uKSBhcmUgYnVpbHQgdG8gY2F0Y2guIEtNU0FOIGlzbiYjMzk7dCB0aGUgcmlnaHQgdG9vbCBmb3IgdGhvc2UgdHlwZXMgb2YgY29uY3VycmVuY3kgaXNzdWVzLgoKVGhlcmUgYXJlIGFsc28gc2V2ZXJhbCBjaGFuZ2VzIHJlbGF0ZWQgdG8gc29ja2V0IGNsb25pbmcgKGBza19jbG9uZWAgYW5kIGB0Y3BfY3JlYXRlX29wZW5yZXFfY2hpbGRgKSwgbWFraW5nIHN1cmUgY2VydGFpbiBmaWVsZHMgYXJlIHJlc2V0IHdoZW4gYSBuZXcgc29ja2V0IGlzIGNyZWF0ZWQgZnJvbSB0aGUgbGlzdGVuZXIgc29ja2V0LiBJIHdhcyBjb25jZXJuZWQgYWJvdXQgdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gdGhlIGNsb25lZCBzb2NrZXQsIGJ1dCB0aGF0JiMzOTtzIG5vdCB0aGUgY2FzZS4gVGhlIGBzb2NrX2NvcHlgIGZ1bmN0aW9uICpmdWxseSogY29waWVzIHRoZSBwYXJlbnQgc29ja2V0JiMzOTtzIGRhdGEgdXNpbmcgYG1lbWNweWAuIFRoZSBwYXRjaCBpcyBzaW1wbHkgcmVzZXR0aW5nIHNvbWUgb2YgdGhlc2UgZmllbGRzIChsaWtlIGBza190c3FfZmxhZ3NgLCBgcGFja2V0c19vdXRgLCBhbmQgYHBpbmV0NmApIHRvIHRoZWlyIGluaXRpYWwgemVybyBzdGF0ZSBpbiB0aGUgY2hpbGQgc29ja2V0LiBJdCYjMzk7cyBhYm91dCBwcmV2ZW50aW5nIHRoZSBjaGlsZCBzb2NrZXQgZnJvbSBpbmhlcml0aW5nIHBvdGVudGlhbGx5IHN0YWxlIG9yIGluY29ycmVjdCB2YWx1ZXMgZnJvbSB0aGUgcGFyZW50LCBub3QgYWJvdXQgZGVhbGluZyB3aXRoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBTbywgdGhpcyBpc24mIzM5O3QgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWU7IGl0JiMzOTtzIGEgbG9naWMgYnVnIGZpeCwgb3IgYSBkZWZlbnNpdmUgbWVhc3VyZS4KCkZpbmFsbHksIHRoZSBmaXggZm9yIGBJUFY2X0FERFJGT1JNYCBhbmQgdGhlIGFkanVzdG1lbnRzIGluIGBkb19pcHY2X3NldHNvY2tvcHRgIHNwZWNpZmljYWxseSBzYWZlZ3VhcmQgYWdhaW5zdCBwb3RlbnRpYWwgZG91YmxlLWZyZWUgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyByZWxhdGVkIHRvIGBwaW5ldDZgLiBUaGlzIGZhbGxzIHNxdWFyZWx5IHdpdGhpbiBLQVNBTiYjMzk7cyBkZXRlY3Rpb24gY2FwYWJpbGl0aWVzLiBBbHNvLCBgZG9faXB2Nl9zZXRzb2Nrb3B0YCBzZWVtcyB0byBiZSBwcmV2ZW50aW5nIHNvY2tldCBvcHRpb25zIGZyb20gYmVpbmcgY2hhbmdlZCBkdXJpbmcgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50LCBsaWtlbHkgdG8gcHJldmVudCBtb3JlIHBvdGVudGlhbCBidWdzLgoKSW4gY29uY2x1c2lvbiwgbm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGludHJvZHVjZSwgbm9yIGV4cG9zZSwgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIFRoZSBwYXRjaCBmb2N1c2VzIG9uIGNvbmN1cnJlbmN5IChLQ1NBTi9LQVNBTikgYW5kIGNvcnJlY3RpbmcgbG9naWMvZGF0YSBmbG93IGlzc3VlcyBkdXJpbmcgY2xvbmluZyBhbmQgc3RhdGUgaW5oZXJpdGFuY2UgKEtBU0FOKS4gR2l2ZW4gdGhlICYjMzQ7cnVsZXMmIzM0OyBmb3IgZGV0ZXJtaW5pbmcgd2hldGhlciB0byBpbmNsdWRlIEtNU0FOIGluIHRlc3RpbmcsIHRoaXMgc2VlbXMgdG8gYmUgYSBoYXJkICYjMzQ7bm8mIzM0Oy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDQ6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW1wbGVtZW50cyBsb2NrbGVzcyBUQ1AgbGlzdGVuZXIgcHJvY2Vzc2luZyBhbmQgZml4ZXMgc2V2ZXJhbCBpc3N1ZXMgcmVsYXRlZCB0byBzb2NrZXQgY2xvbmluZyBhbmQgc3RhdGUgaW5oZXJpdGFuY2UgKGUuZy4sIHJlc2V0dGluZyBgc2tfdHNxX2ZsYWdzYCwgYHBhY2tldHNfb3V0YCwgYW5kIGBwaW5ldDZgIGluIGNsb25lZCBzb2NrZXRzKS4gXG5cbjEuIFRoZSBmaWVsZHMgYmVpbmcgZXhwbGljaXRseSB6ZXJvZWQgb3Igc2V0IHRvIE5VTEwgaW4gYHNrX2Nsb25lYCBhbmQgYHRjcF9jcmVhdGVfb3BlbnJlcV9jaGlsZGAgZG8gbm90IHJlcHJlc2VudCB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhleSBhcmUgYWxyZWFkeSBmdWxseSBpbml0aWFsaXplZCB2aWEgYHNvY2tfY29weWAgKHdoaWNoIGNvcGllcyB0aGUgcGFyZW50IHNvY2tldCYjMzk7cyBzdGF0ZSkuIFRoZSBjaGFuZ2VzIG1lcmVseSBwcmV2ZW50IHRoZSBjaGlsZCBzb2NrZXQgZnJvbSBpbmhlcml0aW5nIHN0YWxlIG9yIGluY29ycmVjdCB2YWx1ZXMgZnJvbSB0aGUgbGlzdGVuZXIuXG4yLiBUaGUgbG9ja2xlc3MgbGlzdGVuZXIgcHJvY2Vzc2luZyAoYHRjcF92NF9yY3ZfbGlzdGVuYCkgaW50cm9kdWNlcyBjb25jdXJyZW5jeSBjaGFuZ2VzLiBBbnkgcmVzdWx0aW5nIGJ1Z3Mgd291bGQgYmUgZGF0YSByYWNlcyAoY2F1Z2h0IGJ5IEtDU0FOKSBvciB1c2UtYWZ0ZXItZnJlZS9tZW1vcnkgY29ycnVwdGlvbiAoY2F1Z2h0IGJ5IEtBU0FOKS5cbjMuIFRoZSBgSVBWNl9BRERSRk9STWAgYW5kIGBkb19pcHY2X3NldHNvY2tvcHRgIGNoYW5nZXMgYWRkcmVzcyBsb2dpYyBidWdzIGFuZCBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW9zLCB3aGljaCBhcmUgd2VsbCB3aXRoaW4gdGhlIGRvbWFpbiBvZiBLQVNBTi5cblxuVGhlcmUgYXJlIG5vIG5ldyBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm8gbmV3IGFsbG9jYXRpb25zIGxlZnQgdW5pbml0aWFsaXplZCwgYW5kIG5vIGNoYW5nZXMgdG8gYm91bmRzIGNoZWNraW5nIHRoYXQgd291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW1wbGVtZW50cyBsb2NrbGVzcyBUQ1AgbGlzdGVuZXIgcHJvY2Vzc2luZyBhbmQgZml4ZXMgc2V2ZXJhbCBpc3N1ZXMgcmVsYXRlZCB0byBzb2NrZXQgY2xvbmluZyBhbmQgc3RhdGUgaW5oZXJpdGFuY2UgKGUuZy4sIHJlc2V0dGluZyBgc2tfdHNxX2ZsYWdzYCwgYHBhY2tldHNfb3V0YCwgYW5kIGBwaW5ldDZgIGluIGNsb25lZCBzb2NrZXRzKS4gXG5cbjEuIFRoZSBmaWVsZHMgYmVpbmcgZXhwbGljaXRseSB6ZXJvZWQgb3Igc2V0IHRvIE5VTEwgaW4gYHNrX2Nsb25lYCBhbmQgYHRjcF9jcmVhdGVfb3BlbnJlcV9jaGlsZGAgZG8gbm90IHJlcHJlc2VudCB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhleSBhcmUgYWxyZWFkeSBmdWxseSBpbml0aWFsaXplZCB2aWEgYHNvY2tfY29weWAgKHdoaWNoIGNvcGllcyB0aGUgcGFyZW50IHNvY2tldCYjMzk7cyBzdGF0ZSkuIFRoZSBjaGFuZ2VzIG1lcmVseSBwcmV2ZW50IHRoZSBjaGlsZCBzb2NrZXQgZnJvbSBpbmhlcml0aW5nIHN0YWxlIG9yIGluY29ycmVjdCB2YWx1ZXMgZnJvbSB0aGUgbGlzdGVuZXIuXG4yLiBUaGUgbG9ja2xlc3MgbGlzdGVuZXIgcHJvY2Vzc2luZyAoYHRjcF92NF9yY3ZfbGlzdGVuYCkgaW50cm9kdWNlcyBjb25jdXJyZW5jeSBjaGFuZ2VzLiBBbnkgcmVzdWx0aW5nIGJ1Z3Mgd291bGQgYmUgZGF0YSByYWNlcyAoY2F1Z2h0IGJ5IEtDU0FOKSBvciB1c2UtYWZ0ZXItZnJlZS9tZW1vcnkgY29ycnVwdGlvbiAoY2F1Z2h0IGJ5IEtBU0FOKS5cbjMuIFRoZSBgSVBWNl9BRERSRk9STWAgYW5kIGBkb19pcHY2X3NldHNvY2tvcHRgIGNoYW5nZXMgYWRkcmVzcyBsb2dpYyBidWdzIGFuZCBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW9zLCB3aGljaCBhcmUgd2VsbCB3aXRoaW4gdGhlIGRvbWFpbiBvZiBLQVNBTi5cblxuVGhlcmUgYXJlIG5vIG5ldyBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm8gbmV3IGFsbG9jYXRpb25zIGxlZnQgdW5pbml0aWFsaXplZCwgYW5kIG5vIGNoYW5nZXMgdG8gYm91bmRzIGNoZWNraW5nIHRoYXQgd291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwNDozNzoxMy4xMzkxNTk4NjhaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NzAyMTM0MzI3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUFY2XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGNwX3Jjdl9saXN0ZW5fc3RhdGVfcHJvY2Vzc1wiLFxuICAgIFwiZG9faXB2Nl9zZXRzb2Nrb3B0XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbXBsZW1lbnRzIGxvY2tsZXNzIFRDUCBsaXN0ZW5lciBwcm9jZXNzaW5nIGFuZCBmaXhlcyBzZXZlcmFsIGlzc3VlcyByZWxhdGVkIHRvIHNvY2tldCBjbG9uaW5nIGFuZCBzdGF0ZSBpbmhlcml0YW5jZSAoZS5nLiwgcmVzZXR0aW5nIGBza190c3FfZmxhZ3NgLCBgcGFja2V0c19vdXRgLCBhbmQgYHBpbmV0NmAgaW4gY2xvbmVkIHNvY2tldHMpLiBcXG5cXG4xLiBUaGUgZmllbGRzIGJlaW5nIGV4cGxpY2l0bHkgemVyb2VkIG9yIHNldCB0byBOVUxMIGluIGBza19jbG9uZWAgYW5kIGB0Y3BfY3JlYXRlX29wZW5yZXFfY2hpbGRgIGRvIG5vdCByZXByZXNlbnQgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXkgYXJlIGFscmVhZHkgZnVsbHkgaW5pdGlhbGl6ZWQgdmlhIGBzb2NrX2NvcHlgICh3aGljaCBjb3BpZXMgdGhlIHBhcmVudCBzb2NrZXQncyBzdGF0ZSkuIFRoZSBjaGFuZ2VzIG1lcmVseSBwcmV2ZW50IHRoZSBjaGlsZCBzb2NrZXQgZnJvbSBpbmhlcml0aW5nIHN0YWxlIG9yIGluY29ycmVjdCB2YWx1ZXMgZnJvbSB0aGUgbGlzdGVuZXIuXFxuMi4gVGhlIGxvY2tsZXNzIGxpc3RlbmVyIHByb2Nlc3NpbmcgKGB0Y3BfdjRfcmN2X2xpc3RlbmApIGludHJvZHVjZXMgY29uY3VycmVuY3kgY2hhbmdlcy4gQW55IHJlc3VsdGluZyBidWdzIHdvdWxkIGJlIGRhdGEgcmFjZXMgKGNhdWdodCBieSBLQ1NBTikgb3IgdXNlLWFmdGVyLWZyZWUvbWVtb3J5IGNvcnJ1cHRpb24gKGNhdWdodCBieSBLQVNBTikuXFxuMy4gVGhlIGBJUFY2X0FERFJGT1JNYCBhbmQgYGRvX2lwdjZfc2V0c29ja29wdGAgY2hhbmdlcyBhZGRyZXNzIGxvZ2ljIGJ1Z3MgYW5kIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpb3MsIHdoaWNoIGFyZSB3ZWxsIHdpdGhpbiB0aGUgZG9tYWluIG9mIEtBU0FOLlxcblxcblRoZXJlIGFyZSBubyBuZXcgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vIG5ldyBhbGxvY2F0aW9ucyBsZWZ0IHVuaW5pdGlhbGl6ZWQsIGFuZCBubyBjaGFuZ2VzIHRvIGJvdW5kcyBjaGVja2luZyB0aGF0IHdvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBUQ1AgbGlzdGVuaW5nIHNvY2tldCBwYWNrZXQgcHJvY2Vzc2luZyBieSBpbnRyb2R1Y2luZyBgdGNwX3Jjdl9saXN0ZW5fc3RhdGVfcHJvY2Vzc2AgYW5kIGxvY2tsZXNzIGxpc3RlbiByZWNlaXZlIHBhdGhzIChgdGNwX3Y0X3Jjdl9saXN0ZW5gLCBgdGNwX3Y2X3Jjdl9saXN0ZW5gKS4gSXQgYWxzbyBhZGRzIGNoZWNrcyBpbiBgZG9faXB2Nl9zZXRzb2Nrb3B0YCBmb3IgYElQVjZfQUREUkZPUk1gIG9uIFRDUCBzb2NrZXRzIHdpdGggcGVuZGluZyBjb25uZWN0aW9uIHJlcXVlc3RzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBjb3JlIFRDUCBzdGFjayBhbmQgSVB2NiBzb2NrZXQgb3B0aW9ucywgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSBhbmQgbmV0d29yayB0cmFmZmljLCBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDQ6Mzc6MTMuMTM5MTYzODU4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTE1MDU3NDM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgOGNlNWQ1NmMwNmY5Njg2ZTM5OGNlYTc3ODllNTE1ZmJmMzFiNWFkOFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEF1ZyAyNCAwNDozNzoxMSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC90Y3AuaCBiL2luY2x1ZGUvbmV0L3RjcC5oXFxuaW5kZXggMmM1Yjg4OTUzMGI1NS4uYWRkNDM4ZDY1NjFiZSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL25ldC90Y3AuaFxcbisrKyBiL2luY2x1ZGUvbmV0L3RjcC5oXFxuQEAgLTM5Miw2ICszOTIsOCBAQCB2b2lkIHRjcF93cml0ZV90aW1lcl9oYW5kbGVyKHN0cnVjdCBzb2NrICpzayk7XFxuIHZvaWQgdGNwX2RlbGFja190aW1lcl9oYW5kbGVyKHN0cnVjdCBzb2NrICpzayk7XFxuIGludCB0Y3BfaW9jdGwoc3RydWN0IHNvY2sgKnNrLCBpbnQgY21kLCBpbnQgKmthcmcpO1xcbiBlbnVtIHNrYl9kcm9wX3JlYXNvbiB0Y3BfcmN2X3N0YXRlX3Byb2Nlc3Moc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG4rZW51bSBza2JfZHJvcF9yZWFzb24gdGNwX3Jjdl9saXN0ZW5fc3RhdGVfcHJvY2VzcyhzdHJ1Y3Qgc29jayAqc2ssXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuIHZvaWQgdGNwX3Jjdl9lc3RhYmxpc2hlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpO1xcbiB2b2lkIHRjcF9yY3ZidWZfZ3JvdyhzdHJ1Y3Qgc29jayAqc2ssIHUzMiBuZXd2YWwpO1xcbiB2b2lkIHRjcF9yY3Zfc3BhY2VfYWRqdXN0KHN0cnVjdCBzb2NrICpzayk7XFxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NvY2suYyBiL25ldC9jb3JlL3NvY2suY1xcbmluZGV4IDFhZDQxOTA0ZGIyNWIuLjA2ZmJiMTk4MjRlMjYgMTAwNjQ0XFxuLS0tIGEvbmV0L2NvcmUvc29jay5jXFxuKysrIGIvbmV0L2NvcmUvc29jay5jXFxuQEAgLTI0NzksNyArMjQ3OSw3IEBAIHN0YXRpYyB2b2lkIHNrX2luaXRfY29tbW9uKHN0cnVjdCBzb2NrICpzaylcXG4gc3RydWN0IHNvY2sgKnNrX2Nsb25lKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgY29uc3QgZ2ZwX3QgcHJpb3JpdHksXFxuIFxcdFxcdCAgICAgIGJvb2wgbG9jaylcXG4ge1xcbi1cXHRzdHJ1Y3QgcHJvdG8gKnByb3QgPSBSRUFEX09OQ0Uoc2stXFx1MDAzZXNrX3Byb3QpO1xcbitcXHRzdHJ1Y3QgcHJvdG8gKnByb3QgPSBzay1cXHUwMDNlc2tfcHJvdF9jcmVhdG9yO1xcbiBcXHRzdHJ1Y3Qgc2tfZmlsdGVyICpmaWx0ZXI7XFxuIFxcdGJvb2wgaXNfY2hhcmdlZCA9IHRydWU7XFxuIFxcdHN0cnVjdCBzb2NrICpuZXdzaztcXG5AQCAtMjUzMyw2ICsyNTMzLDcgQEAgc3RydWN0IHNvY2sgKnNrX2Nsb25lKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgY29uc3QgZ2ZwX3QgcHJpb3JpdHksXFxuIFxcdG5ld3NrLVxcdTAwM2Vza19yZXNlcnZlZF9tZW0gID0gMDtcXG4gXFx0REVCVUdfTkVUX1dBUk5fT05fT05DRShuZXdzay1cXHUwMDNlc2tfZHJvcF9jb3VudGVycyk7XFxuIFxcdHNrX2Ryb3BzX3Jlc2V0KG5ld3NrKTtcXG4rXFx0bmV3c2stXFx1MDAzZXNrX3RzcV9mbGFnc1xcdD0gMDtcXG4gXFx0bmV3c2stXFx1MDAzZXNrX3NlbmRfaGVhZFxcdD0gTlVMTDtcXG4gXFx0bmV3c2stXFx1MDAzZXNrX3VzZXJsb2Nrc1xcdD0gc2stXFx1MDAzZXNrX3VzZXJsb2NrcyBcXHUwMDI2IH5TT0NLX0JJTkRQT1JUX0xPQ0s7XFxuIFxcdGF0b21pY19zZXQoXFx1MDAyNm5ld3NrLVxcdTAwM2Vza196Y2tleSwgMCk7XFxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9pbnB1dC5jIGIvbmV0L2lwdjQvdGNwX2lucHV0LmNcXG5pbmRleCAwZjYwYTFkYmY5Mjc0Li43N2FmMThmYmE2NmI0IDEwMDY0NFxcbi0tLSBhL25ldC9pcHY0L3RjcF9pbnB1dC5jXFxuKysrIGIvbmV0L2lwdjQvdGNwX2lucHV0LmNcXG5AQCAtNzE0MSw2ICs3MTQxLDQyIEBAIHN0YXRpYyB2b2lkIHRjcF9yY3Zfc3lucmVjdl9zdGF0ZV9mYXN0b3BlbihzdHJ1Y3Qgc29jayAqc2spXFxuIFxcdHRjcF9yZWFybV9ydG8oc2spO1xcbiB9XFxuIFxcbitlbnVtIHNrYl9kcm9wX3JlYXNvbiB0Y3BfcmN2X2xpc3Rlbl9zdGF0ZV9wcm9jZXNzKHN0cnVjdCBzb2NrICpzayxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbit7XFxuK1xcdGNvbnN0IHN0cnVjdCB0Y3BoZHIgKnRoID0gdGNwX2hkcihza2IpO1xcbitcXHRTS0JfRFIocmVhc29uKTtcXG4rXFxuK1xcdGlmICh0aC1cXHUwMDNlYWNrKVxcbitcXHRcXHRyZXR1cm4gU0tCX0RST1BfUkVBU09OX1RDUF9GTEFHUztcXG4rXFxuK1xcdGlmICh0aC1cXHUwMDNlcnN0KSB7XFxuK1xcdFxcdFNLQl9EUl9TRVQocmVhc29uLCBUQ1BfUkVTRVQpO1xcbitcXHRcXHRnb3RvIGRpc2NhcmQ7XFxuK1xcdH1cXG4rXFx0aWYgKHRoLVxcdTAwM2VzeW4pIHtcXG4rXFx0XFx0aWYgKHRoLVxcdTAwM2VmaW4pIHtcXG4rXFx0XFx0XFx0U0tCX0RSX1NFVChyZWFzb24sIFRDUF9GTEFHUyk7XFxuK1xcdFxcdFxcdGdvdG8gZGlzY2FyZDtcXG4rXFx0XFx0fVxcbitcXHRcXHQvKiBJdCBpcyBwb3NzaWJsZSB0aGF0IHdlIHByb2Nlc3MgU1lOIHBhY2tldHMgZnJvbSBiYWNrbG9nLFxcbitcXHRcXHQgKiBzbyB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0byBkaXNhYmxlIEJIIGFuZCBSQ1UgcmlnaHQgdGhlcmUuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuK1xcdFxcdGxvY2FsX2JoX2Rpc2FibGUoKTtcXG4rXFx0XFx0aW5ldF9jc2soc2spLVxcdTAwM2VpY3NrX2FmX29wcy1cXHUwMDNlY29ubl9yZXF1ZXN0KHNrLCBza2IpO1xcbitcXHRcXHRsb2NhbF9iaF9lbmFibGUoKTtcXG4rXFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuK1xcbitcXHRcXHRjb25zdW1lX3NrYihza2IpO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbitcXHRTS0JfRFJfU0VUKHJlYXNvbiwgVENQX0ZMQUdTKTtcXG4rZGlzY2FyZDpcXG4rXFx0dGNwX2Ryb3BfcmVhc29uKHNrLCBza2IsIHJlYXNvbik7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiAvKlxcbiAgKlxcdFRoaXMgZnVuY3Rpb24gaW1wbGVtZW50cyB0aGUgcmVjZWl2aW5nIHByb2NlZHVyZSBvZiBSRkMgNzkzIGZvclxcbiAgKlxcdGFsbCBzdGF0ZXMgZXhjZXB0IEVTVEFCTElTSEVEIGFuZCBUSU1FX1dBSVQuXFxuQEAgLTcxNTIsNyArNzE4OCw2IEBAIGVudW0gc2tiX2Ryb3BfcmVhc29uXFxuIHRjcF9yY3Zfc3RhdGVfcHJvY2VzcyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuIHtcXG4gXFx0c3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7XFxuLVxcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcXG4gXFx0Y29uc3Qgc3RydWN0IHRjcGhkciAqdGggPSB0Y3BfaGRyKHNrYik7XFxuIFxcdHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcTtcXG4gXFx0aW50IHF1ZXVlZCA9IDA7XFxuQEAgLTcxNjQsMzIgKzcxOTksNyBAQCB0Y3BfcmN2X3N0YXRlX3Byb2Nlc3Moc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXHRcXHRnb3RvIGRpc2NhcmQ7XFxuIFxcbiBcXHRjYXNlIFRDUF9MSVNURU46XFxuLVxcdFxcdGlmICh0aC1cXHUwMDNlYWNrKVxcbi1cXHRcXHRcXHRyZXR1cm4gU0tCX0RST1BfUkVBU09OX1RDUF9GTEFHUztcXG4tXFxuLVxcdFxcdGlmICh0aC1cXHUwMDNlcnN0KSB7XFxuLVxcdFxcdFxcdFNLQl9EUl9TRVQocmVhc29uLCBUQ1BfUkVTRVQpO1xcbi1cXHRcXHRcXHRnb3RvIGRpc2NhcmQ7XFxuLVxcdFxcdH1cXG4tXFx0XFx0aWYgKHRoLVxcdTAwM2VzeW4pIHtcXG4tXFx0XFx0XFx0aWYgKHRoLVxcdTAwM2VmaW4pIHtcXG4tXFx0XFx0XFx0XFx0U0tCX0RSX1NFVChyZWFzb24sIFRDUF9GTEFHUyk7XFxuLVxcdFxcdFxcdFxcdGdvdG8gZGlzY2FyZDtcXG4tXFx0XFx0XFx0fVxcbi1cXHRcXHRcXHQvKiBJdCBpcyBwb3NzaWJsZSB0aGF0IHdlIHByb2Nlc3MgU1lOIHBhY2tldHMgZnJvbSBiYWNrbG9nLFxcbi1cXHRcXHRcXHQgKiBzbyB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0byBkaXNhYmxlIEJIIGFuZCBSQ1UgcmlnaHQgdGhlcmUuXFxuLVxcdFxcdFxcdCAqL1xcbi1cXHRcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuLVxcdFxcdFxcdGxvY2FsX2JoX2Rpc2FibGUoKTtcXG4tXFx0XFx0XFx0aWNzay1cXHUwMDNlaWNza19hZl9vcHMtXFx1MDAzZWNvbm5fcmVxdWVzdChzaywgc2tiKTtcXG4tXFx0XFx0XFx0bG9jYWxfYmhfZW5hYmxlKCk7XFxuLVxcdFxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbi1cXG4tXFx0XFx0XFx0Y29uc3VtZV9za2Ioc2tiKTtcXG4tXFx0XFx0XFx0cmV0dXJuIDA7XFxuLVxcdFxcdH1cXG4tXFx0XFx0U0tCX0RSX1NFVChyZWFzb24sIFRDUF9GTEFHUyk7XFxuLVxcdFxcdGdvdG8gZGlzY2FyZDtcXG4rXFx0XFx0cmV0dXJuIHRjcF9yY3ZfbGlzdGVuX3N0YXRlX3Byb2Nlc3Moc2ssIHNrYik7XFxuIFxcbiBcXHRjYXNlIFRDUF9TWU5fU0VOVDpcXG4gXFx0XFx0dHAtXFx1MDAzZXJ4X29wdC5zYXdfdHN0YW1wID0gMDtcXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2lwdjQuYyBiL25ldC9pcHY0L3RjcF9pcHY0LmNcXG5pbmRleCAxOTBjN2FmNGNmOTIzLi4yZmE4OTU4MzgwYTViIDEwMDY0NFxcbi0tLSBhL25ldC9pcHY0L3RjcF9pcHY0LmNcXG4rKysgYi9uZXQvaXB2NC90Y3BfaXB2NC5jXFxuQEAgLTE3MTQsNiArMTcxNCwxNCBAQCBzdHJ1Y3Qgc29jayAqdGNwX3Y0X3N5bl9yZWN2X3NvY2soY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRcXHRpbmV0X2NzayhuZXdzayktXFx1MDAzZWljc2tfZXh0X2hkcl9sZW4gPSBpbmV0X29wdC1cXHUwMDNlb3B0Lm9wdGxlbjtcXG4gXFx0YXRvbWljX3NldChcXHUwMDI2bmV3aW5ldC1cXHUwMDNlaW5ldF9pZCwgZ2V0X3JhbmRvbV91MTYoKSk7XFxuIFxcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG4rXFx0LyogTmV2ZXIgaW5oZXJpdCB0aGUgbGlzdGVuZXIncyBpcHY2X3BpbmZvOyBJUFY2X0FERFJGT1JNIGxlYXZlcyBpdCBzZXRcXG4rXFx0ICogb24gYW4gQUZfSU5FVCBzb2NrZXQuICB0Y3BfdjZfbWFwcGVkX2NoaWxkX2luaXQoKSBpbnN0YWxscyBvdXIgb3duLlxcbitcXHQgKi9cXG4rXFx0bmV3aW5ldC1cXHUwMDNlcGluZXQ2ID0gTlVMTDtcXG4rXFx0bmV3aW5ldC1cXHUwMDNlaXB2Nl9mbF9saXN0ID0gTlVMTDtcXG4rI2VuZGlmXFxuK1xcbiBcXHQvKiBTZXQgVG9TIG9mIHRoZSBuZXcgc29ja2V0IGJhc2VkIHVwb24gdGhlIHZhbHVlIG9mIGluY29taW5nIFNZTi5cXG4gXFx0ICogRUNUIGJpdHMgYXJlIHNldCBsYXRlciBpbiB0Y3BfaW5pdF90cmFuc2ZlcigpLlxcbiBcXHQgKi9cXG5AQCAtMTgyMCw3ICsxODI4LDcgQEAgdTE2IHRjcF92NF9nZXRfc3luY29va2llKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGlwaGRyICppcGgsXFxuIElORElSRUNUX0NBTExBQkxFX0RFQ0xBUkUoc3RydWN0IGRzdF9lbnRyeSAqaXB2NF9kc3RfY2hlY2soc3RydWN0IGRzdF9lbnRyeSAqLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICB1MzIpKTtcXG4gLyogVGhlIHNvY2tldCBtdXN0IGhhdmUgaXQncyBzcGlubG9jayBoZWxkIHdoZW4gd2UgZ2V0XFxuLSAqIGhlcmUsIHVubGVzcyBpdCBpcyBhIFRDUF9MSVNURU4gc29ja2V0LlxcbisgKiBoZXJlLlxcbiAgKlxcbiAgKiBXZSBoYXZlIGEgcG90ZW50aWFsIGRvdWJsZS1sb2NrIGNhc2UgaGVyZSwgc28gZXZlbiB3aGVuXFxuICAqIGRvaW5nIGJhY2tsb2cgcHJvY2Vzc2luZyB3ZSB1c2UgdGhlIEJIIGxvY2tpbmcgc2NoZW1lLlxcbkBAIC0xODk4LDYgKzE5MDYsNDYgQEAgaW50IHRjcF92NF9kb19yY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXHRnb3RvIGRpc2NhcmQ7XFxuIH1cXG4gXFxuKy8qIEBzayBpcyBub3QgbG9ja2VkIGhlcmUgYW5kIGNhbiBsZWF2ZSBUQ1BfTElTVEVOOyBkbyBub3QgdGVzdCBza19zdGF0ZS4gKi9cXG4rc3RhdGljIG5vaW5saW5lIGludCB0Y3BfdjRfcmN2X2xpc3RlbihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuK3tcXG4rXFx0ZW51bSBza2JfZHJvcF9yZWFzb24gcmVhc29uO1xcbitcXHRzdHJ1Y3Qgc29jayAqbnNrO1xcbitcXG4rXFx0cmVhc29uID0gcHNwX3NrX3J4X3BvbGljeV9jaGVjayhzaywgc2tiKTtcXG4rXFx0aWYgKHJlYXNvbilcXG4rXFx0XFx0Z290byBlcnJfZGlzY2FyZDtcXG4rXFxuK1xcdGlmICh0Y3BfY2hlY2tzdW1fY29tcGxldGUoc2tiKSlcXG4rXFx0XFx0Z290byBjc3VtX2VycjtcXG4rXFxuK1xcdG5zayA9IHRjcF92NF9jb29raWVfY2hlY2soc2ssIHNrYik7XFxuK1xcdGlmICghbnNrKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGlmIChuc2sgIT0gc2spIHtcXG4rXFx0XFx0cmVhc29uID0gdGNwX2NoaWxkX3Byb2Nlc3Moc2ssIG5zaywgc2tiKTtcXG4rXFx0XFx0c29ja19wdXQobnNrKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0cmVhc29uID0gdGNwX3Jjdl9saXN0ZW5fc3RhdGVfcHJvY2Vzcyhzaywgc2tiKTtcXG4rXFx0fVxcbitcXHRpZiAoIXJlYXNvbilcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHR0Y3BfdjRfc2VuZF9yZXNldChzaywgc2tiLCBza19yc3RfY29udmVydF9kcm9wX3JlYXNvbihyZWFzb24pKTtcXG4rZGlzY2FyZDpcXG4rXFx0c2tfc2tiX3JlYXNvbl9kcm9wKHNrLCBza2IsIHJlYXNvbik7XFxuK1xcdHJldHVybiAwO1xcbitcXG4rY3N1bV9lcnI6XFxuK1xcdHJlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9UQ1BfQ1NVTTtcXG4rXFx0dHJhY2VfdGNwX2JhZF9jc3VtKHNrYik7XFxuK1xcdFRDUF9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBUQ1BfTUlCX0NTVU1FUlJPUlMpO1xcbitlcnJfZGlzY2FyZDpcXG4rXFx0VENQX0lOQ19TVEFUUyhzb2NrX25ldChzayksIFRDUF9NSUJfSU5FUlJTKTtcXG4rXFx0Z290byBkaXNjYXJkO1xcbit9XFxuK1xcbiBlbnVtIHNrYl9kcm9wX3JlYXNvbiB0Y3BfYWRkX2JhY2tsb2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiB7XFxuIFxcdHUzMiB0YWlsX2dzb19zaXplLCB0YWlsX2dzb19zZWdzO1xcbkBAIC0yMjM1LDcgKzIyODMsNyBAQCBpbnQgdGNwX3Y0X3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXHRza2ItXFx1MDAzZWRldiA9IE5VTEw7XFxuIFxcbiBcXHRpZiAoc2stXFx1MDAzZXNrX3N0YXRlID09IFRDUF9MSVNURU4pIHtcXG4tXFx0XFx0cmV0ID0gdGNwX3Y0X2RvX3Jjdihzaywgc2tiKTtcXG4rXFx0XFx0cmV0ID0gdGNwX3Y0X3Jjdl9saXN0ZW4oc2ssIHNrYik7XFxuIFxcdFxcdGdvdG8gcHV0X2FuZF9yZXR1cm47XFxuIFxcdH1cXG4gXFxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9taW5pc29ja3MuYyBiL25ldC9pcHY0L3RjcF9taW5pc29ja3MuY1xcbmluZGV4IDEyMjU0ZTZlYjJmMzQuLjJmZGUxOTZkZDMwMmYgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jXFxuKysrIGIvbmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jXFxuQEAgLTU5MSw2ICs1OTEsNyBAQCBzdHJ1Y3Qgc29jayAqdGNwX2NyZWF0ZV9vcGVucmVxX2NoaWxkKGNvbnN0IHN0cnVjdCBzb2NrICpzayxcXG4gXFx0bmV3dHAtXFx1MDAzZXRvdGFsX3JldHJhbnMgPSByZXEtXFx1MDAzZW51bV9yZXRyYW5zO1xcbiBcXG4gXFx0dGNwX2luaXRfeG1pdF90aW1lcnMobmV3c2spO1xcbitcXHRuZXd0cC1cXHUwMDNlb3V0X29mX29yZGVyX3F1ZXVlID0gUkJfUk9PVDtcXG4gXFx0V1JJVEVfT05DRShuZXd0cC1cXHUwMDNld3JpdGVfc2VxLCBuZXd0cC1cXHUwMDNlcHVzaGVkX3NlcSA9IHRyZXEtXFx1MDAzZXNudF9pc24gKyAxKTtcXG4gXFxuIFxcdGlmIChzb2NrX2ZsYWcobmV3c2ssIFNPQ0tfS0VFUE9QRU4pKVxcbkBAIC02NTksNiArNjYwLDEyIEBAIHN0cnVjdCBzb2NrICp0Y3BfY3JlYXRlX29wZW5yZXFfY2hpbGQoY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxcbiBcXHR0Y3BfZWNuX29wZW5yZXFfY2hpbGQobmV3c2ssIHJlcSwgc2tiKTtcXG4gXFx0bmV3dHAtXFx1MDAzZWZhc3RvcGVuX3JlcSA9IE5VTEw7XFxuIFxcdFJDVV9JTklUX1BPSU5URVIobmV3dHAtXFx1MDAzZWZhc3RvcGVuX3JzaywgTlVMTCk7XFxuK1xcdG5ld3RwLVxcdTAwM2VwYWNrZXRzX291dCA9IDA7XFxuK1xcdG5ld3RwLVxcdTAwM2VyZXRyYW5zX291dCA9IDA7XFxuK1xcdG5ld3RwLVxcdTAwM2VzYWNrZWRfb3V0ID0gMDtcXG4rXFx0bmV3dHAtXFx1MDAzZWxvc3Rfb3V0ID0gMDtcXG4rXFx0bmV3dHAtXFx1MDAzZXJldHJhbnNtaXRfc2tiX2hpbnQgPSBOVUxMO1xcbitcXHRuZXd0cC1cXHUwMDNlaGlnaGVzdF9zYWNrID0gTlVMTDtcXG4gXFxuIFxcdG5ld3RwLVxcdTAwM2VicGZfY2hnX2NjX2lucHJvZ3Jlc3MgPSAwO1xcbiBcXHR0Y3BfYnBmX2Nsb25lKHNrLCBuZXdzayk7XFxuQEAgLTk3NCw3ICs5ODEsNyBAQCBzdHJ1Y3Qgc29jayAqdGNwX2NoZWNrX3JlcShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdHRjcF9yZXNldChzaywgc2tiKTtcXG4gXFx0fVxcbiBcXHRpZiAoIWZhc3RvcGVuKSB7XFxuLVxcdFxcdGJvb2wgdW5saW5rZWQgPSBpbmV0X2Nza19yZXFza19xdWV1ZV9kcm9wKHNrLCByZXEpO1xcbitcXHRcXHRib29sIHVubGlua2VkID0gaW5ldF9jc2tfcmVxc2tfcXVldWVfZHJvcChyZXEtXFx1MDAzZXJza19saXN0ZW5lciwgcmVxKTtcXG4gXFxuIFxcdFxcdGlmICh1bmxpbmtlZClcXG4gXFx0XFx0XFx0X19ORVRfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgTElOVVhfTUlCX0VNQlJZT05JQ1JTVFMpO1xcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9hZl9pbmV0Ni5jIGIvbmV0L2lwdjYvYWZfaW5ldDYuY1xcbmluZGV4IDI4MjkxMmExMTk5OTkuLjY4YjMzMGY2OTQxZDAgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjYvYWZfaW5ldDYuY1xcbisrKyBiL25ldC9pcHY2L2FmX2luZXQ2LmNcXG5AQCAtNDc5LDYgKzQ3OSwxMCBAQCB2b2lkIGluZXQ2X2NsZWFudXBfc29jayhzdHJ1Y3Qgc29jayAqc2spXFxuIFxcdHN0cnVjdCBza19idWZmICpza2I7XFxuIFxcdHN0cnVjdCBpcHY2X3R4b3B0aW9ucyAqb3B0O1xcbiBcXG4rXFx0LyogQUZfSU5FVCBjaGlsZCBvZiBhbiBJUFY2X0FERFJGT1JNJ2VkIGxpc3RlbmVyOiBub3RoaW5nIG9mIGl0cyBvd24uICovXFxuK1xcdGlmICghbnApXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuIFxcdC8qIFJlbGVhc2Ugcnggb3B0aW9ucyAqL1xcbiBcXG4gXFx0c2tiID0geGNoZyhcXHUwMDI2bnAtXFx1MDAzZXBrdG9wdGlvbnMsIE5VTEwpO1xcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMgYi9uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmNcXG5pbmRleCBiNGM5Nzc0MzRjMmUwLi42ZDJkZDlhZTQ2YTk2IDEwMDY0NFxcbi0tLSBhL25ldC9pcHY2L2lwdjZfc29ja2dsdWUuY1xcbisrKyBiL25ldC9pcHY2L2lwdjZfc29ja2dsdWUuY1xcbkBAIC01ODcsNiArNTg3LDIxIEBAIGludCBkb19pcHY2X3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxcbiBcXHRcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0XFx0fVxcbiBcXG4rXFx0XFx0XFx0aWYgKHNrLVxcdTAwM2Vza19wcm90b2NvbCA9PSBJUFBST1RPX1RDUCkge1xcbitcXHRcXHRcXHRcXHRpZiAoaW5ldF9jc2tfcmVxc2tfcXVldWVfbGVuKHNrKSkge1xcbitcXHRcXHRcXHRcXHRcXHRyZXR2ID0gLUVCVVNZO1xcbitcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0XFx0XFx0fVxcbitcXHRcXHRcXHRcXHQvKiBBIFNZTiB0aGF0IGZvdW5kIHRoaXMgc29ja2V0IHdoaWxlIGl0IHdhc1xcbitcXHRcXHRcXHRcXHQgKiBzdGlsbCBsaXN0ZW5pbmcgbWF5IG5vdCBiZSBjb3VudGVkIHlldC5cXG4rXFx0XFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdFxcdHN5bmNocm9uaXplX3JjdSgpO1xcbitcXHRcXHRcXHRcXHRpZiAoaW5ldF9jc2tfcmVxc2tfcXVldWVfbGVuKHNrKSkge1xcbitcXHRcXHRcXHRcXHRcXHRyZXR2ID0gLUVCVVNZO1xcbitcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0XFx0XFx0fVxcbitcXHRcXHRcXHR9XFxuK1xcbiBcXHRcXHRcXHRfX2lwdjZfc29ja19tY19jbG9zZShzayk7XFxuIFxcdFxcdFxcdF9faXB2Nl9zb2NrX2FjX2Nsb3NlKHNrKTtcXG4gXFxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L3RjcF9pcHY2LmMgYi9uZXQvaXB2Ni90Y3BfaXB2Ni5jXFxuaW5kZXggOWU5MTU1YjFiM2FhNy4uYTJkZWRhOWE0MjU4YiAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2Ni90Y3BfaXB2Ni5jXFxuKysrIGIvbmV0L2lwdjYvdGNwX2lwdjYuY1xcbkBAIC0xNTU2LDcgKzE1NTYsNyBAQCBzdGF0aWMgc3RydWN0IHNvY2sgKnRjcF92Nl9zeW5fcmVjdl9zb2NrKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKlxcbiBJTkRJUkVDVF9DQUxMQUJMRV9ERUNMQVJFKHN0cnVjdCBkc3RfZW50cnkgKmlwdjRfZHN0X2NoZWNrKHN0cnVjdCBkc3RfZW50cnkgKixcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgdTMyKSk7XFxuIC8qIFRoZSBzb2NrZXQgbXVzdCBoYXZlIGl0J3Mgc3BpbmxvY2sgaGVsZCB3aGVuIHdlIGdldFxcbi0gKiBoZXJlLCB1bmxlc3MgaXQgaXMgYSBUQ1BfTElTVEVOIHNvY2tldC5cXG4rICogaGVyZS5cXG4gICpcXG4gICogV2UgaGF2ZSBhIHBvdGVudGlhbCBkb3VibGUtbG9jayBjYXNlIGhlcmUsIHNvIGV2ZW4gd2hlblxcbiAgKiBkb2luZyBiYWNrbG9nIHByb2Nlc3Npbmcgd2UgdXNlIHRoZSBCSCBsb2NraW5nIHNjaGVtZS5cXG5AQCAtMTcwNCw2ICsxNzA0LDQ2IEBAIGludCB0Y3BfdjZfZG9fcmN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuKy8qIEBzayBpcyBub3QgbG9ja2VkIGhlcmUgYW5kIGNhbiBsZWF2ZSBUQ1BfTElTVEVOOyBkbyBub3QgdGVzdCBza19zdGF0ZS4gKi9cXG4rc3RhdGljIG5vaW5saW5lIGludCB0Y3BfdjZfcmN2X2xpc3RlbihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuK3tcXG4rXFx0ZW51bSBza2JfZHJvcF9yZWFzb24gcmVhc29uO1xcbitcXHRzdHJ1Y3Qgc29jayAqbnNrO1xcbitcXG4rXFx0cmVhc29uID0gcHNwX3NrX3J4X3BvbGljeV9jaGVjayhzaywgc2tiKTtcXG4rXFx0aWYgKHJlYXNvbilcXG4rXFx0XFx0Z290byBlcnJfZGlzY2FyZDtcXG4rXFxuK1xcdGlmICh0Y3BfY2hlY2tzdW1fY29tcGxldGUoc2tiKSlcXG4rXFx0XFx0Z290byBjc3VtX2VycjtcXG4rXFxuK1xcdG5zayA9IHRjcF92Nl9jb29raWVfY2hlY2soc2ssIHNrYik7XFxuK1xcdGlmICghbnNrKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGlmIChuc2sgIT0gc2spIHtcXG4rXFx0XFx0cmVhc29uID0gdGNwX2NoaWxkX3Byb2Nlc3Moc2ssIG5zaywgc2tiKTtcXG4rXFx0XFx0c29ja19wdXQobnNrKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0cmVhc29uID0gdGNwX3Jjdl9saXN0ZW5fc3RhdGVfcHJvY2Vzcyhzaywgc2tiKTtcXG4rXFx0fVxcbitcXHRpZiAoIXJlYXNvbilcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHR0Y3BfdjZfc2VuZF9yZXNldChzaywgc2tiLCBza19yc3RfY29udmVydF9kcm9wX3JlYXNvbihyZWFzb24pKTtcXG4rZGlzY2FyZDpcXG4rXFx0c2tfc2tiX3JlYXNvbl9kcm9wKHNrLCBza2IsIHJlYXNvbik7XFxuK1xcdHJldHVybiAwO1xcbitcXG4rY3N1bV9lcnI6XFxuK1xcdHJlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9UQ1BfQ1NVTTtcXG4rXFx0dHJhY2VfdGNwX2JhZF9jc3VtKHNrYik7XFxuK1xcdFRDUF9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBUQ1BfTUlCX0NTVU1FUlJPUlMpO1xcbitlcnJfZGlzY2FyZDpcXG4rXFx0VENQX0lOQ19TVEFUUyhzb2NrX25ldChzayksIFRDUF9NSUJfSU5FUlJTKTtcXG4rXFx0Z290byBkaXNjYXJkO1xcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCB0Y3BfdjZfZmlsbF9jYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgaXB2NmhkciAqaGRyLFxcbiBcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgdGNwaGRyICp0aClcXG4ge1xcbkBAIC0xODkxLDcgKzE5MzEsNyBAQCBJTkRJUkVDVF9DQUxMQUJMRV9TQ09QRSBpbnQgdGNwX3Y2X3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXHRza2ItXFx1MDAzZWRldiA9IE5VTEw7XFxuIFxcbiBcXHRpZiAoc2stXFx1MDAzZXNrX3N0YXRlID09IFRDUF9MSVNURU4pIHtcXG4tXFx0XFx0cmV0ID0gdGNwX3Y2X2RvX3Jjdihzaywgc2tiKTtcXG4rXFx0XFx0cmV0ID0gdGNwX3Y2X3Jjdl9saXN0ZW4oc2ssIHNrYik7XFxuIFxcdFxcdGdvdG8gcHV0X2FuZF9yZXR1cm47XFxuIFxcdH1cXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDA0OjM3OjE0LjY1NDg2NTkxNFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjMyMjY5ODM2MjIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQVjZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0Y3BfcmN2X2xpc3Rlbl9zdGF0ZV9wcm9jZXNzXCIsXG4gICAgXCJkb19pcHY2X3NldHNvY2tvcHRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBUQ1AgbGlzdGVuaW5nIHNvY2tldCBwYWNrZXQgcHJvY2Vzc2luZyBieSBpbnRyb2R1Y2luZyBgdGNwX3Jjdl9saXN0ZW5fc3RhdGVfcHJvY2Vzc2AgYW5kIGxvY2tsZXNzIGxpc3RlbiByZWNlaXZlIHBhdGhzIChgdGNwX3Y0X3Jjdl9saXN0ZW5gLCBgdGNwX3Y2X3Jjdl9saXN0ZW5gKS4gSXQgYWxzbyBhZGRzIGNoZWNrcyBpbiBgZG9faXB2Nl9zZXRzb2Nrb3B0YCBmb3IgYElQVjZfQUREUkZPUk1gIG9uIFRDUCBzb2NrZXRzIHdpdGggcGVuZGluZyBjb25uZWN0aW9uIHJlcXVlc3RzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBjb3JlIFRDUCBzdGFjayBhbmQgSVB2NiBzb2NrZXQgb3B0aW9ucywgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSBhbmQgbmV0d29yayB0cmFmZmljLCBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOGNlNWQ1NmMwNmY5Njg2ZTM5OGNlYTc3ODllNTE1ZmJmMzFiNWFkOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDI0IDA0OjM3OjExIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvdGNwLmggYi9pbmNsdWRlL25ldC90Y3AuaFxuaW5kZXggMmM1Yjg4OTUzMGI1NS4uYWRkNDM4ZDY1NjFiZSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L3RjcC5oXG4rKysgYi9pbmNsdWRlL25ldC90Y3AuaFxuQEAgLTM5Miw2ICszOTIsOCBAQCB2b2lkIHRjcF93cml0ZV90aW1lcl9oYW5kbGVyKHN0cnVjdCBzb2NrICpzayk7XG4gdm9pZCB0Y3BfZGVsYWNrX3RpbWVyX2hhbmRsZXIoc3RydWN0IHNvY2sgKnNrKTtcbiBpbnQgdGNwX2lvY3RsKHN0cnVjdCBzb2NrICpzaywgaW50IGNtZCwgaW50ICprYXJnKTtcbiBlbnVtIHNrYl9kcm9wX3JlYXNvbiB0Y3BfcmN2X3N0YXRlX3Byb2Nlc3Moc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbitlbnVtIHNrYl9kcm9wX3JlYXNvbiB0Y3BfcmN2X2xpc3Rlbl9zdGF0ZV9wcm9jZXNzKHN0cnVjdCBzb2NrICpzayxcbitcdFx0XHRcdFx0XHQgIHN0cnVjdCBza19idWZmICpza2IpO1xuIHZvaWQgdGNwX3Jjdl9lc3RhYmxpc2hlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpO1xuIHZvaWQgdGNwX3JjdmJ1Zl9ncm93KHN0cnVjdCBzb2NrICpzaywgdTMyIG5ld3ZhbCk7XG4gdm9pZCB0Y3BfcmN2X3NwYWNlX2FkanVzdChzdHJ1Y3Qgc29jayAqc2spO1xuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NvY2suYyBiL25ldC9jb3JlL3NvY2suY1xuaW5kZXggMWFkNDE5MDRkYjI1Yi4uMDZmYmIxOTgyNGUyNiAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL3NvY2suY1xuKysrIGIvbmV0L2NvcmUvc29jay5jXG5AQCAtMjQ3OSw3ICsyNDc5LDcgQEAgc3RhdGljIHZvaWQgc2tfaW5pdF9jb21tb24oc3RydWN0IHNvY2sgKnNrKVxuIHN0cnVjdCBzb2NrICpza19jbG9uZShjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IGdmcF90IHByaW9yaXR5LFxuIFx0XHQgICAgICBib29sIGxvY2spXG4ge1xuLVx0c3RydWN0IHByb3RvICpwcm90ID0gUkVBRF9PTkNFKHNrLVx1MDAzZXNrX3Byb3QpO1xuK1x0c3RydWN0IHByb3RvICpwcm90ID0gc2stXHUwMDNlc2tfcHJvdF9jcmVhdG9yO1xuIFx0c3RydWN0IHNrX2ZpbHRlciAqZmlsdGVyO1xuIFx0Ym9vbCBpc19jaGFyZ2VkID0gdHJ1ZTtcbiBcdHN0cnVjdCBzb2NrICpuZXdzaztcbkBAIC0yNTMzLDYgKzI1MzMsNyBAQCBzdHJ1Y3Qgc29jayAqc2tfY2xvbmUoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBjb25zdCBnZnBfdCBwcmlvcml0eSxcbiBcdG5ld3NrLVx1MDAzZXNrX3Jlc2VydmVkX21lbSAgPSAwO1xuIFx0REVCVUdfTkVUX1dBUk5fT05fT05DRShuZXdzay1cdTAwM2Vza19kcm9wX2NvdW50ZXJzKTtcbiBcdHNrX2Ryb3BzX3Jlc2V0KG5ld3NrKTtcbitcdG5ld3NrLVx1MDAzZXNrX3RzcV9mbGFnc1x0PSAwO1xuIFx0bmV3c2stXHUwMDNlc2tfc2VuZF9oZWFkXHQ9IE5VTEw7XG4gXHRuZXdzay1cdTAwM2Vza191c2VybG9ja3NcdD0gc2stXHUwMDNlc2tfdXNlcmxvY2tzIFx1MDAyNiB+U09DS19CSU5EUE9SVF9MT0NLO1xuIFx0YXRvbWljX3NldChcdTAwMjZuZXdzay1cdTAwM2Vza196Y2tleSwgMCk7XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2lucHV0LmMgYi9uZXQvaXB2NC90Y3BfaW5wdXQuY1xuaW5kZXggMGY2MGExZGJmOTI3NC4uNzdhZjE4ZmJhNjZiNCAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L3RjcF9pbnB1dC5jXG4rKysgYi9uZXQvaXB2NC90Y3BfaW5wdXQuY1xuQEAgLTcxNDEsNiArNzE0MSw0MiBAQCBzdGF0aWMgdm9pZCB0Y3BfcmN2X3N5bnJlY3Zfc3RhdGVfZmFzdG9wZW4oc3RydWN0IHNvY2sgKnNrKVxuIFx0dGNwX3JlYXJtX3J0byhzayk7XG4gfVxuIFxuK2VudW0gc2tiX2Ryb3BfcmVhc29uIHRjcF9yY3ZfbGlzdGVuX3N0YXRlX3Byb2Nlc3Moc3RydWN0IHNvY2sgKnNrLFxuK1x0XHRcdFx0XHRcdCAgc3RydWN0IHNrX2J1ZmYgKnNrYilcbit7XG4rXHRjb25zdCBzdHJ1Y3QgdGNwaGRyICp0aCA9IHRjcF9oZHIoc2tiKTtcbitcdFNLQl9EUihyZWFzb24pO1xuK1xuK1x0aWYgKHRoLVx1MDAzZWFjaylcbitcdFx0cmV0dXJuIFNLQl9EUk9QX1JFQVNPTl9UQ1BfRkxBR1M7XG4rXG4rXHRpZiAodGgtXHUwMDNlcnN0KSB7XG4rXHRcdFNLQl9EUl9TRVQocmVhc29uLCBUQ1BfUkVTRVQpO1xuK1x0XHRnb3RvIGRpc2NhcmQ7XG4rXHR9XG4rXHRpZiAodGgtXHUwMDNlc3luKSB7XG4rXHRcdGlmICh0aC1cdTAwM2VmaW4pIHtcbitcdFx0XHRTS0JfRFJfU0VUKHJlYXNvbiwgVENQX0ZMQUdTKTtcbitcdFx0XHRnb3RvIGRpc2NhcmQ7XG4rXHRcdH1cbitcdFx0LyogSXQgaXMgcG9zc2libGUgdGhhdCB3ZSBwcm9jZXNzIFNZTiBwYWNrZXRzIGZyb20gYmFja2xvZyxcbitcdFx0ICogc28gd2UgbmVlZCB0byBtYWtlIHN1cmUgdG8gZGlzYWJsZSBCSCBhbmQgUkNVIHJpZ2h0IHRoZXJlLlxuK1x0XHQgKi9cbitcdFx0cmN1X3JlYWRfbG9jaygpO1xuK1x0XHRsb2NhbF9iaF9kaXNhYmxlKCk7XG4rXHRcdGluZXRfY3NrKHNrKS1cdTAwM2VpY3NrX2FmX29wcy1cdTAwM2Vjb25uX3JlcXVlc3Qoc2ssIHNrYik7XG4rXHRcdGxvY2FsX2JoX2VuYWJsZSgpO1xuK1x0XHRyY3VfcmVhZF91bmxvY2soKTtcbitcbitcdFx0Y29uc3VtZV9za2Ioc2tiKTtcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXHRTS0JfRFJfU0VUKHJlYXNvbiwgVENQX0ZMQUdTKTtcbitkaXNjYXJkOlxuK1x0dGNwX2Ryb3BfcmVhc29uKHNrLCBza2IsIHJlYXNvbik7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gLypcbiAgKlx0VGhpcyBmdW5jdGlvbiBpbXBsZW1lbnRzIHRoZSByZWNlaXZpbmcgcHJvY2VkdXJlIG9mIFJGQyA3OTMgZm9yXG4gICpcdGFsbCBzdGF0ZXMgZXhjZXB0IEVTVEFCTElTSEVEIGFuZCBUSU1FX1dBSVQuXG5AQCAtNzE1Miw3ICs3MTg4LDYgQEAgZW51bSBza2JfZHJvcF9yZWFzb25cbiB0Y3BfcmN2X3N0YXRlX3Byb2Nlc3Moc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbiBcdHN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spO1xuLVx0c3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xuIFx0Y29uc3Qgc3RydWN0IHRjcGhkciAqdGggPSB0Y3BfaGRyKHNrYik7XG4gXHRzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXE7XG4gXHRpbnQgcXVldWVkID0gMDtcbkBAIC03MTY0LDMyICs3MTk5LDcgQEAgdGNwX3Jjdl9zdGF0ZV9wcm9jZXNzKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdFx0Z290byBkaXNjYXJkO1xuIFxuIFx0Y2FzZSBUQ1BfTElTVEVOOlxuLVx0XHRpZiAodGgtXHUwMDNlYWNrKVxuLVx0XHRcdHJldHVybiBTS0JfRFJPUF9SRUFTT05fVENQX0ZMQUdTO1xuLVxuLVx0XHRpZiAodGgtXHUwMDNlcnN0KSB7XG4tXHRcdFx0U0tCX0RSX1NFVChyZWFzb24sIFRDUF9SRVNFVCk7XG4tXHRcdFx0Z290byBkaXNjYXJkO1xuLVx0XHR9XG4tXHRcdGlmICh0aC1cdTAwM2VzeW4pIHtcbi1cdFx0XHRpZiAodGgtXHUwMDNlZmluKSB7XG4tXHRcdFx0XHRTS0JfRFJfU0VUKHJlYXNvbiwgVENQX0ZMQUdTKTtcbi1cdFx0XHRcdGdvdG8gZGlzY2FyZDtcbi1cdFx0XHR9XG4tXHRcdFx0LyogSXQgaXMgcG9zc2libGUgdGhhdCB3ZSBwcm9jZXNzIFNZTiBwYWNrZXRzIGZyb20gYmFja2xvZyxcbi1cdFx0XHQgKiBzbyB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0byBkaXNhYmxlIEJIIGFuZCBSQ1UgcmlnaHQgdGhlcmUuXG4tXHRcdFx0ICovXG4tXHRcdFx0cmN1X3JlYWRfbG9jaygpO1xuLVx0XHRcdGxvY2FsX2JoX2Rpc2FibGUoKTtcbi1cdFx0XHRpY3NrLVx1MDAzZWljc2tfYWZfb3BzLVx1MDAzZWNvbm5fcmVxdWVzdChzaywgc2tiKTtcbi1cdFx0XHRsb2NhbF9iaF9lbmFibGUoKTtcbi1cdFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbi1cbi1cdFx0XHRjb25zdW1lX3NrYihza2IpO1xuLVx0XHRcdHJldHVybiAwO1xuLVx0XHR9XG4tXHRcdFNLQl9EUl9TRVQocmVhc29uLCBUQ1BfRkxBR1MpO1xuLVx0XHRnb3RvIGRpc2NhcmQ7XG4rXHRcdHJldHVybiB0Y3BfcmN2X2xpc3Rlbl9zdGF0ZV9wcm9jZXNzKHNrLCBza2IpO1xuIFxuIFx0Y2FzZSBUQ1BfU1lOX1NFTlQ6XG4gXHRcdHRwLVx1MDAzZXJ4X29wdC5zYXdfdHN0YW1wID0gMDtcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfaXB2NC5jIGIvbmV0L2lwdjQvdGNwX2lwdjQuY1xuaW5kZXggMTkwYzdhZjRjZjkyMy4uMmZhODk1ODM4MGE1YiAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L3RjcF9pcHY0LmNcbisrKyBiL25ldC9pcHY0L3RjcF9pcHY0LmNcbkBAIC0xNzE0LDYgKzE3MTQsMTQgQEAgc3RydWN0IHNvY2sgKnRjcF92NF9zeW5fcmVjdl9zb2NrKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0aW5ldF9jc2sobmV3c2spLVx1MDAzZWljc2tfZXh0X2hkcl9sZW4gPSBpbmV0X29wdC1cdTAwM2VvcHQub3B0bGVuO1xuIFx0YXRvbWljX3NldChcdTAwMjZuZXdpbmV0LVx1MDAzZWluZXRfaWQsIGdldF9yYW5kb21fdTE2KCkpO1xuIFxuKyNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuK1x0LyogTmV2ZXIgaW5oZXJpdCB0aGUgbGlzdGVuZXIncyBpcHY2X3BpbmZvOyBJUFY2X0FERFJGT1JNIGxlYXZlcyBpdCBzZXRcbitcdCAqIG9uIGFuIEFGX0lORVQgc29ja2V0LiAgdGNwX3Y2X21hcHBlZF9jaGlsZF9pbml0KCkgaW5zdGFsbHMgb3VyIG93bi5cbitcdCAqL1xuK1x0bmV3aW5ldC1cdTAwM2VwaW5ldDYgPSBOVUxMO1xuK1x0bmV3aW5ldC1cdTAwM2VpcHY2X2ZsX2xpc3QgPSBOVUxMO1xuKyNlbmRpZlxuK1xuIFx0LyogU2V0IFRvUyBvZiB0aGUgbmV3IHNvY2tldCBiYXNlZCB1cG9uIHRoZSB2YWx1ZSBvZiBpbmNvbWluZyBTWU4uXG4gXHQgKiBFQ1QgYml0cyBhcmUgc2V0IGxhdGVyIGluIHRjcF9pbml0X3RyYW5zZmVyKCkuXG4gXHQgKi9cbkBAIC0xODIwLDcgKzE4MjgsNyBAQCB1MTYgdGNwX3Y0X2dldF9zeW5jb29raWUoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaXBoZHIgKmlwaCxcbiBJTkRJUkVDVF9DQUxMQUJMRV9ERUNMQVJFKHN0cnVjdCBkc3RfZW50cnkgKmlwdjRfZHN0X2NoZWNrKHN0cnVjdCBkc3RfZW50cnkgKixcbiBcdFx0XHRcdFx0XHRcdCAgIHUzMikpO1xuIC8qIFRoZSBzb2NrZXQgbXVzdCBoYXZlIGl0J3Mgc3BpbmxvY2sgaGVsZCB3aGVuIHdlIGdldFxuLSAqIGhlcmUsIHVubGVzcyBpdCBpcyBhIFRDUF9MSVNURU4gc29ja2V0LlxuKyAqIGhlcmUuXG4gICpcbiAgKiBXZSBoYXZlIGEgcG90ZW50aWFsIGRvdWJsZS1sb2NrIGNhc2UgaGVyZSwgc28gZXZlbiB3aGVuXG4gICogZG9pbmcgYmFja2xvZyBwcm9jZXNzaW5nIHdlIHVzZSB0aGUgQkggbG9ja2luZyBzY2hlbWUuXG5AQCAtMTg5OCw2ICsxOTA2LDQ2IEBAIGludCB0Y3BfdjRfZG9fcmN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdGdvdG8gZGlzY2FyZDtcbiB9XG4gXG4rLyogQHNrIGlzIG5vdCBsb2NrZWQgaGVyZSBhbmQgY2FuIGxlYXZlIFRDUF9MSVNURU47IGRvIG5vdCB0ZXN0IHNrX3N0YXRlLiAqL1xuK3N0YXRpYyBub2lubGluZSBpbnQgdGNwX3Y0X3Jjdl9saXN0ZW4oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuK3tcbitcdGVudW0gc2tiX2Ryb3BfcmVhc29uIHJlYXNvbjtcbitcdHN0cnVjdCBzb2NrICpuc2s7XG4rXG4rXHRyZWFzb24gPSBwc3Bfc2tfcnhfcG9saWN5X2NoZWNrKHNrLCBza2IpO1xuK1x0aWYgKHJlYXNvbilcbitcdFx0Z290byBlcnJfZGlzY2FyZDtcbitcbitcdGlmICh0Y3BfY2hlY2tzdW1fY29tcGxldGUoc2tiKSlcbitcdFx0Z290byBjc3VtX2VycjtcbitcbitcdG5zayA9IHRjcF92NF9jb29raWVfY2hlY2soc2ssIHNrYik7XG4rXHRpZiAoIW5zaylcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRpZiAobnNrICE9IHNrKSB7XG4rXHRcdHJlYXNvbiA9IHRjcF9jaGlsZF9wcm9jZXNzKHNrLCBuc2ssIHNrYik7XG4rXHRcdHNvY2tfcHV0KG5zayk7XG4rXHR9IGVsc2Uge1xuK1x0XHRyZWFzb24gPSB0Y3BfcmN2X2xpc3Rlbl9zdGF0ZV9wcm9jZXNzKHNrLCBza2IpO1xuK1x0fVxuK1x0aWYgKCFyZWFzb24pXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0dGNwX3Y0X3NlbmRfcmVzZXQoc2ssIHNrYiwgc2tfcnN0X2NvbnZlcnRfZHJvcF9yZWFzb24ocmVhc29uKSk7XG4rZGlzY2FyZDpcbitcdHNrX3NrYl9yZWFzb25fZHJvcChzaywgc2tiLCByZWFzb24pO1xuK1x0cmV0dXJuIDA7XG4rXG4rY3N1bV9lcnI6XG4rXHRyZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fVENQX0NTVU07XG4rXHR0cmFjZV90Y3BfYmFkX2NzdW0oc2tiKTtcbitcdFRDUF9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBUQ1BfTUlCX0NTVU1FUlJPUlMpO1xuK2Vycl9kaXNjYXJkOlxuK1x0VENQX0lOQ19TVEFUUyhzb2NrX25ldChzayksIFRDUF9NSUJfSU5FUlJTKTtcbitcdGdvdG8gZGlzY2FyZDtcbit9XG4rXG4gZW51bSBza2JfZHJvcF9yZWFzb24gdGNwX2FkZF9iYWNrbG9nKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG4gXHR1MzIgdGFpbF9nc29fc2l6ZSwgdGFpbF9nc29fc2VncztcbkBAIC0yMjM1LDcgKzIyODMsNyBAQCBpbnQgdGNwX3Y0X3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0c2tiLVx1MDAzZWRldiA9IE5VTEw7XG4gXG4gXHRpZiAoc2stXHUwMDNlc2tfc3RhdGUgPT0gVENQX0xJU1RFTikge1xuLVx0XHRyZXQgPSB0Y3BfdjRfZG9fcmN2KHNrLCBza2IpO1xuK1x0XHRyZXQgPSB0Y3BfdjRfcmN2X2xpc3Rlbihzaywgc2tiKTtcbiBcdFx0Z290byBwdXRfYW5kX3JldHVybjtcbiBcdH1cbiBcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMgYi9uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmNcbmluZGV4IDEyMjU0ZTZlYjJmMzQuLjJmZGUxOTZkZDMwMmYgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmNcbisrKyBiL25ldC9pcHY0L3RjcF9taW5pc29ja3MuY1xuQEAgLTU5MSw2ICs1OTEsNyBAQCBzdHJ1Y3Qgc29jayAqdGNwX2NyZWF0ZV9vcGVucmVxX2NoaWxkKGNvbnN0IHN0cnVjdCBzb2NrICpzayxcbiBcdG5ld3RwLVx1MDAzZXRvdGFsX3JldHJhbnMgPSByZXEtXHUwMDNlbnVtX3JldHJhbnM7XG4gXG4gXHR0Y3BfaW5pdF94bWl0X3RpbWVycyhuZXdzayk7XG4rXHRuZXd0cC1cdTAwM2VvdXRfb2Zfb3JkZXJfcXVldWUgPSBSQl9ST09UO1xuIFx0V1JJVEVfT05DRShuZXd0cC1cdTAwM2V3cml0ZV9zZXEsIG5ld3RwLVx1MDAzZXB1c2hlZF9zZXEgPSB0cmVxLVx1MDAzZXNudF9pc24gKyAxKTtcbiBcbiBcdGlmIChzb2NrX2ZsYWcobmV3c2ssIFNPQ0tfS0VFUE9QRU4pKVxuQEAgLTY1OSw2ICs2NjAsMTIgQEAgc3RydWN0IHNvY2sgKnRjcF9jcmVhdGVfb3BlbnJlcV9jaGlsZChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXG4gXHR0Y3BfZWNuX29wZW5yZXFfY2hpbGQobmV3c2ssIHJlcSwgc2tiKTtcbiBcdG5ld3RwLVx1MDAzZWZhc3RvcGVuX3JlcSA9IE5VTEw7XG4gXHRSQ1VfSU5JVF9QT0lOVEVSKG5ld3RwLVx1MDAzZWZhc3RvcGVuX3JzaywgTlVMTCk7XG4rXHRuZXd0cC1cdTAwM2VwYWNrZXRzX291dCA9IDA7XG4rXHRuZXd0cC1cdTAwM2VyZXRyYW5zX291dCA9IDA7XG4rXHRuZXd0cC1cdTAwM2VzYWNrZWRfb3V0ID0gMDtcbitcdG5ld3RwLVx1MDAzZWxvc3Rfb3V0ID0gMDtcbitcdG5ld3RwLVx1MDAzZXJldHJhbnNtaXRfc2tiX2hpbnQgPSBOVUxMO1xuK1x0bmV3dHAtXHUwMDNlaGlnaGVzdF9zYWNrID0gTlVMTDtcbiBcbiBcdG5ld3RwLVx1MDAzZWJwZl9jaGdfY2NfaW5wcm9ncmVzcyA9IDA7XG4gXHR0Y3BfYnBmX2Nsb25lKHNrLCBuZXdzayk7XG5AQCAtOTc0LDcgKzk4MSw3IEBAIHN0cnVjdCBzb2NrICp0Y3BfY2hlY2tfcmVxKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0dGNwX3Jlc2V0KHNrLCBza2IpO1xuIFx0fVxuIFx0aWYgKCFmYXN0b3Blbikge1xuLVx0XHRib29sIHVubGlua2VkID0gaW5ldF9jc2tfcmVxc2tfcXVldWVfZHJvcChzaywgcmVxKTtcbitcdFx0Ym9vbCB1bmxpbmtlZCA9IGluZXRfY3NrX3JlcXNrX3F1ZXVlX2Ryb3AocmVxLVx1MDAzZXJza19saXN0ZW5lciwgcmVxKTtcbiBcbiBcdFx0aWYgKHVubGlua2VkKVxuIFx0XHRcdF9fTkVUX0lOQ19TVEFUUyhzb2NrX25ldChzayksIExJTlVYX01JQl9FTUJSWU9OSUNSU1RTKTtcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9hZl9pbmV0Ni5jIGIvbmV0L2lwdjYvYWZfaW5ldDYuY1xuaW5kZXggMjgyOTEyYTExOTk5OS4uNjhiMzMwZjY5NDFkMCAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L2FmX2luZXQ2LmNcbisrKyBiL25ldC9pcHY2L2FmX2luZXQ2LmNcbkBAIC00NzksNiArNDc5LDEwIEBAIHZvaWQgaW5ldDZfY2xlYW51cF9zb2NrKHN0cnVjdCBzb2NrICpzaylcbiBcdHN0cnVjdCBza19idWZmICpza2I7XG4gXHRzdHJ1Y3QgaXB2Nl90eG9wdGlvbnMgKm9wdDtcbiBcbitcdC8qIEFGX0lORVQgY2hpbGQgb2YgYW4gSVBWNl9BRERSRk9STSdlZCBsaXN0ZW5lcjogbm90aGluZyBvZiBpdHMgb3duLiAqL1xuK1x0aWYgKCFucClcbitcdFx0cmV0dXJuO1xuK1xuIFx0LyogUmVsZWFzZSByeCBvcHRpb25zICovXG4gXG4gXHRza2IgPSB4Y2hnKFx1MDAyNm5wLVx1MDAzZXBrdG9wdGlvbnMsIE5VTEwpO1xuZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwdjZfc29ja2dsdWUuYyBiL25ldC9pcHY2L2lwdjZfc29ja2dsdWUuY1xuaW5kZXggYjRjOTc3NDM0YzJlMC4uNmQyZGQ5YWU0NmE5NiAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L2lwdjZfc29ja2dsdWUuY1xuKysrIGIvbmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jXG5AQCAtNTg3LDYgKzU4NywyMSBAQCBpbnQgZG9faXB2Nl9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdH1cbiBcbitcdFx0XHRpZiAoc2stXHUwMDNlc2tfcHJvdG9jb2wgPT0gSVBQUk9UT19UQ1ApIHtcbitcdFx0XHRcdGlmIChpbmV0X2Nza19yZXFza19xdWV1ZV9sZW4oc2spKSB7XG4rXHRcdFx0XHRcdHJldHYgPSAtRUJVU1k7XG4rXHRcdFx0XHRcdGJyZWFrO1xuK1x0XHRcdFx0fVxuK1x0XHRcdFx0LyogQSBTWU4gdGhhdCBmb3VuZCB0aGlzIHNvY2tldCB3aGlsZSBpdCB3YXNcbitcdFx0XHRcdCAqIHN0aWxsIGxpc3RlbmluZyBtYXkgbm90IGJlIGNvdW50ZWQgeWV0LlxuK1x0XHRcdFx0ICovXG4rXHRcdFx0XHRzeW5jaHJvbml6ZV9yY3UoKTtcbitcdFx0XHRcdGlmIChpbmV0X2Nza19yZXFza19xdWV1ZV9sZW4oc2spKSB7XG4rXHRcdFx0XHRcdHJldHYgPSAtRUJVU1k7XG4rXHRcdFx0XHRcdGJyZWFrO1xuK1x0XHRcdFx0fVxuK1x0XHRcdH1cbitcbiBcdFx0XHRfX2lwdjZfc29ja19tY19jbG9zZShzayk7XG4gXHRcdFx0X19pcHY2X3NvY2tfYWNfY2xvc2Uoc2spO1xuIFxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L3RjcF9pcHY2LmMgYi9uZXQvaXB2Ni90Y3BfaXB2Ni5jXG5pbmRleCA5ZTkxNTViMWIzYWE3Li5hMmRlZGE5YTQyNThiIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvdGNwX2lwdjYuY1xuKysrIGIvbmV0L2lwdjYvdGNwX2lwdjYuY1xuQEAgLTE1NTYsNyArMTU1Niw3IEBAIHN0YXRpYyBzdHJ1Y3Qgc29jayAqdGNwX3Y2X3N5bl9yZWN2X3NvY2soY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqXG4gSU5ESVJFQ1RfQ0FMTEFCTEVfREVDTEFSRShzdHJ1Y3QgZHN0X2VudHJ5ICppcHY0X2RzdF9jaGVjayhzdHJ1Y3QgZHN0X2VudHJ5ICosXG4gXHRcdFx0XHRcdFx0XHQgICB1MzIpKTtcbiAvKiBUaGUgc29ja2V0IG11c3QgaGF2ZSBpdCdzIHNwaW5sb2NrIGhlbGQgd2hlbiB3ZSBnZXRcbi0gKiBoZXJlLCB1bmxlc3MgaXQgaXMgYSBUQ1BfTElTVEVOIHNvY2tldC5cbisgKiBoZXJlLlxuICAqXG4gICogV2UgaGF2ZSBhIHBvdGVudGlhbCBkb3VibGUtbG9jayBjYXNlIGhlcmUsIHNvIGV2ZW4gd2hlblxuICAqIGRvaW5nIGJhY2tsb2cgcHJvY2Vzc2luZyB3ZSB1c2UgdGhlIEJIIGxvY2tpbmcgc2NoZW1lLlxuQEAgLTE3MDQsNiArMTcwNCw0NiBAQCBpbnQgdGNwX3Y2X2RvX3JjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rLyogQHNrIGlzIG5vdCBsb2NrZWQgaGVyZSBhbmQgY2FuIGxlYXZlIFRDUF9MSVNURU47IGRvIG5vdCB0ZXN0IHNrX3N0YXRlLiAqL1xuK3N0YXRpYyBub2lubGluZSBpbnQgdGNwX3Y2X3Jjdl9saXN0ZW4oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuK3tcbitcdGVudW0gc2tiX2Ryb3BfcmVhc29uIHJlYXNvbjtcbitcdHN0cnVjdCBzb2NrICpuc2s7XG4rXG4rXHRyZWFzb24gPSBwc3Bfc2tfcnhfcG9saWN5X2NoZWNrKHNrLCBza2IpO1xuK1x0aWYgKHJlYXNvbilcbitcdFx0Z290byBlcnJfZGlzY2FyZDtcbitcbitcdGlmICh0Y3BfY2hlY2tzdW1fY29tcGxldGUoc2tiKSlcbitcdFx0Z290byBjc3VtX2VycjtcbitcbitcdG5zayA9IHRjcF92Nl9jb29raWVfY2hlY2soc2ssIHNrYik7XG4rXHRpZiAoIW5zaylcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRpZiAobnNrICE9IHNrKSB7XG4rXHRcdHJlYXNvbiA9IHRjcF9jaGlsZF9wcm9jZXNzKHNrLCBuc2ssIHNrYik7XG4rXHRcdHNvY2tfcHV0KG5zayk7XG4rXHR9IGVsc2Uge1xuK1x0XHRyZWFzb24gPSB0Y3BfcmN2X2xpc3Rlbl9zdGF0ZV9wcm9jZXNzKHNrLCBza2IpO1xuK1x0fVxuK1x0aWYgKCFyZWFzb24pXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0dGNwX3Y2X3NlbmRfcmVzZXQoc2ssIHNrYiwgc2tfcnN0X2NvbnZlcnRfZHJvcF9yZWFzb24ocmVhc29uKSk7XG4rZGlzY2FyZDpcbitcdHNrX3NrYl9yZWFzb25fZHJvcChzaywgc2tiLCByZWFzb24pO1xuK1x0cmV0dXJuIDA7XG4rXG4rY3N1bV9lcnI6XG4rXHRyZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fVENQX0NTVU07XG4rXHR0cmFjZV90Y3BfYmFkX2NzdW0oc2tiKTtcbitcdFRDUF9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBUQ1BfTUlCX0NTVU1FUlJPUlMpO1xuK2Vycl9kaXNjYXJkOlxuK1x0VENQX0lOQ19TVEFUUyhzb2NrX25ldChzayksIFRDUF9NSUJfSU5FUlJTKTtcbitcdGdvdG8gZGlzY2FyZDtcbit9XG4rXG4gc3RhdGljIHZvaWQgdGNwX3Y2X2ZpbGxfY2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IGlwdjZoZHIgKmhkcixcbiBcdFx0XHQgICBjb25zdCBzdHJ1Y3QgdGNwaGRyICp0aClcbiB7XG5AQCAtMTg5MSw3ICsxOTMxLDcgQEAgSU5ESVJFQ1RfQ0FMTEFCTEVfU0NPUEUgaW50IHRjcF92Nl9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdHNrYi1cdTAwM2VkZXYgPSBOVUxMO1xuIFxuIFx0aWYgKHNrLVx1MDAzZXNrX3N0YXRlID09IFRDUF9MSVNURU4pIHtcbi1cdFx0cmV0ID0gdGNwX3Y2X2RvX3Jjdihzaywgc2tiKTtcbitcdFx0cmV0ID0gdGNwX3Y2X3Jjdl9saXN0ZW4oc2ssIHNrYik7XG4gXHRcdGdvdG8gcHV0X2FuZF9yZXR1cm47XG4gXHR9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwNDozNzoxNC42NTQ4Njc0NzRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDI2ODkyNjU0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBUaGlzIFRDUCBOZXR3b3JraW5nIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgYSBwYXRjaCBoZXJlIHRoYXQncyBtYWtpbmcgY2hhbmdlcyB0byB0aGUgVENQIG5ldHdvcmtpbmcgY29kZS4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgdGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlLCBhbmQgZ2l2ZW4gdGhhdCBpdCdzIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3RhY2sgYW5kIHJlYWNoYWJsZSB2aWEgVENQIHNvY2tldHMsIGZ1enppbmcgaXMgZGVmaW5pdGVseSB3YXJyYW50ZWQuIEknbSBnb2luZyB0byBzdGFydCBieSBpZGVudGlmeWluZyB0aGUga2V5IGZ1bmN0aW9ucyB0aGF0IGFyZSBtb2RpZmllZC5cblxuU3BlY2lmaWNhbGx5LCBJIHNlZSBhIGZldyBrZXkgYWRkaXRpb25zOiBgdGNwX3Jjdl9saXN0ZW5fc3RhdGVfcHJvY2Vzc2AsIGB0Y3BfdjRfcmN2X2xpc3RlbmAsIGFuZCBgdGNwX3Y2X3Jjdl9saXN0ZW5gLiAgVGhlc2UgYXJlIGNsZWFybHkgaW50cm9kdWNlZCB0byBoYW5kbGUgdGhlIGBUQ1BfTElTVEVOYCBzdGF0ZSwgd2hpY2ggaXMgd29ydGggaW52ZXN0aWdhdGluZy4gVGhlIGBza19jbG9uZWAgZnVuY3Rpb24gYWxzbyBnZXRzIGEgdHdlYWsgdG8gaG93IGl0IGFjY2Vzc2VzIHRoZSBwcm90b2NvbCBjcmVhdG9yLiAgV2UndmUgZ290IHNvbWUgbmV3IGluaXRpYWxpemF0aW9uIGluIGB0Y3BfY3JlYXRlX29wZW5yZXFfY2hpbGRgLiBBbmQgdGhlbiB0aGVyZSdzIGEgbW9kaWZpY2F0aW9uIHRvIGBkb19pcHY2X3NldHNvY2tvcHRgLlxuXG5Ob3csIGxldCBtZSB6b29tIGluIG9uIHRob3NlIGZ1bmN0aW9ucyB0byBuYXJyb3cgZG93biBteSBmb2N1cy4gIEkgd2FudCB0byBwcmlvcml0aXplIHRoZSBiZXN0IGVudHJ5IHBvaW50cy4gSSBrbm93IEkgc2hvdWxkIGZvY3VzIG9uIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zLiBJIGNhbiBzZWUgdGhhdCBgdGNwX3Jjdl9saXN0ZW5fc3RhdGVfcHJvY2Vzc2AgaXMgbm90IHN0YXRpYyBhbmQgaXMgZGVmaW5lZCwgd2hpY2ggbWFrZXMgaXQgYSBnb29kIGNhbmRpZGF0ZS4gSG93ZXZlciwgYHRjcF92NF9yY3ZfbGlzdGVuYCBhbmQgYHRjcF92Nl9yY3ZfbGlzdGVuYCBhcmUgc3RhdGljIGJ1dCAqbm9pbmxpbmUqLCBzbyBldmVuIHRob3VnaCB0aGV5IGFyZSBzdGF0aWMsIHRoZXkgd2lsbCBzdGlsbCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgd2hpY2ggbWVhbnMgdGhhdCB0aGV5IGFyZSBhbHNvIGNhbmRpZGF0ZXMuIE9mIGNvdXJzZSwgYHRjcF92NF9yY3ZgIGFuZCBgdGNwX3Y2X3JjdmAgYXJlIHRoZSBhY3R1YWwgZW50cnkgcG9pbnRzLCBidXQgdGhvc2UgYXJlIGluIHRoZSBrZXJuZWwgYWxyZWFkeSBzbyB0aGV5IGFyZSBub3QgbmV3LiAgQW5kIGZpbmFsbHksIHRoZXJlJ3MgYGRvX2lwdjZfc2V0c29ja29wdGAgd2hpY2ggaXMgYWxzbyBtb2RpZmllZC5cblxuTGV0J3MgZHJpbGwgZG93biBpbnRvIGBkb19pcHY2X3NldHNvY2tvcHRgLiAgVGhlIGRpZmYgc2hvd3MgdGhhdCBpdCdzIG5vdyBjaGVja2luZyBmb3IgYElQUFJPVE9fVENQYCBhbmQgdGhlIGxlbmd0aCBvZiB0aGUgcmVxdWVzdCBxdWV1ZSAoYGluZXRfY3NrX3JlcXNrX3F1ZXVlX2xlbihzaylgKS4gIEl0IGxvb2tzIGxpa2UgaXQncyB0cnlpbmcgdG8gcHJldmVudCBtb2RpZmljYXRpb24gb2Ygb3B0aW9ucyBvbiBhIGxpc3RlbmluZyBzb2NrZXQgdGhhdCBoYXMgcGVuZGluZyByZXF1ZXN0cy4gU3BlY2lmaWNhbGx5IGl0J3MgdHJ5aW5nIHRvIGVuc3VyZSB0aGF0IGEgU1lOIHBhY2tldCB0aGF0IGFycml2ZWQgYmVmb3JlIHRoZSBzb2NrZXQgd2FzIGZ1bGx5IGxpc3RlbmluZyBpcyBub3QgbWlzc2VkLlxuSSdsbCBrZWVwIGBkb19pcHY2X3NldHNvY2tvcHRgIGluIG1pbmQsIGFuZCBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IG9wdGlvbiBpcyBiZWluZyBhZmZlY3RlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjU1NCwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgyNSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDA0OjM3OjI0LjkyMzc5NjJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODUzODk1ODUyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9faXB2Nl9zb2NrX21jX2Nsb3NlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmM9Mzc2PWludCBkb19pcHY2X3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxcbi0tXFxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jLTYwNC1cXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmM6NjA1OlxcdFxcdFxcdF9faXB2Nl9zb2NrX21jX2Nsb3NlKHNrKTtcXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMtNjA2LVxcdFxcdFxcdF9faXB2Nl9zb2NrX2FjX2Nsb3NlKHNrKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDQ6Mzc6MjUuNzc3Njk2ODIyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTI3MTE1MzE5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhhdCBzcGVjaWZpYyBjb2RlOlxuXG4qKkRpdmluZyBpbnRvIGlwdjZfc29ja2dsdWUuYyAtIExpbmUgNTg3KipcblxuT2theSwgSSdtIHplcm9pbmcgaW4gb24gbGluZSA1ODcgd2l0aGluIGBuZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcmVjYWxsIHdoYXQgZnVuY3Rpb25zIHR5cGljYWxseSBzdXJyb3VuZCB0aGlzIGFyZWEgaW4gdGhlIGZpbGUuIEkgaW1tZWRpYXRlbHkgc3RhcnQgbWVudGFsbHkgcGFyc2luZyB0aGUgY29kZSBmbG93LiBTaW5jZSB0aGlzIGZpbGUgZGVhbHMgd2l0aCB0aGUgZ2x1ZSBjb2RlIGJldHdlZW4gSVB2NiBhbmQgdGhlIHNvY2tldCBsYXllciwgSSdtIGV4cGVjdGluZyB0byBmaW5kIGFzcGVjdHMgcmVsYXRlZCB0byB0aGUgY29ubmVjdGlvbiBvZiBJUHY2IHNvY2tldHMgYW5kIGFueSBzdXBwb3J0aW5nIGZ1bmN0aW9ucy4gSSBrbm93IHRoaXMgZmlsZSBpcyBjcml0aWNhbCBmb3IgbWFuYWdpbmcgSVB2NiBzb2NrZXRzIGFuZCBpbnRlcmZhY2luZyB0aGVtIHdpdGggdGhlIGdlbmVyaWMgc29ja2V0IGxheWVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVuY3Rpb24gY2FsbCBvciBjb2RlIGJsb2NrIG9uIGxpbmUgNTg3IHRvIGRldGVybWluZSB3aGF0IHRoZSBzcGVjaWZpYyBjb250ZXh0IGlzLiBJcyBpdCBkZWFsaW5nIHdpdGggYWRkcmVzcyBmYW1pbHkgaGFuZGxpbmc/IFNvY2tldCBvcHRpb24gcHJvY2Vzc2luZz8gUG9zc2libHkgcmVsYXRlZCB0byBtdWx0aWNhc3Qgam9pbnMgb3IgbGVhdmVzPyBNYXliZSBpdCBoYW5kbGVzIHRoZSBhY3R1YWwgc29ja2V0IGNyZWF0aW9uIG9yIHRlYXJkb3duLiBLbm93aW5nIHRoaXMgZmlsZSBhbmQgYXJlYSwgSSBleHBlY3QgdG8gZGVhbCB3aXRoIGEgYHN0cnVjdCBzb2NrYCBvciBgc3RydWN0IGluZXQ2X3NvY2tgIGF0IHNvbWUgcG9pbnQuIEnigJltIHByZXBhcmluZyBteXNlbGYgZm9yIHRoYXQsIG1lbnRhbGx5IGxvb2tpbmcgZm9yIGhpbnRzLiBMZXQncyBzZWUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODA4NSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDA0OjM3OjMxLjA0ODg1MjM4M1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg5NTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1NzAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1NzA6XFx0XFx0XFx0XFx0fSBlbHNlIGlmIChzay1cXHUwMDNlc2tfcHJvdG9jb2wgPT0gSVBQUk9UT19UQ1ApIHtcXG4gNTcxOlxcdFxcdFxcdFxcdFxcdGlmIChzay1cXHUwMDNlc2tfcHJvdCAhPSBcXHUwMDI2dGNwdjZfcHJvdCkge1xcbiA1NzI6XFx0XFx0XFx0XFx0XFx0XFx0cmV0diA9IC1FQlVTWTtcXG4gNTczOlxcdFxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbiA1NzQ6XFx0XFx0XFx0XFx0XFx0fVxcbiA1NzU6XFx0XFx0XFx0XFx0fSBlbHNlIHtcXG4gNTc2OlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbiA1Nzc6XFx0XFx0XFx0XFx0fVxcbiA1Nzg6XFx0XFxuIDU3OTpcXHRcXHRcXHRcXHRpZiAoc2stXFx1MDAzZXNrX3N0YXRlICE9IFRDUF9FU1RBQkxJU0hFRCkge1xcbiA1ODA6XFx0XFx0XFx0XFx0XFx0cmV0diA9IC1FTk9UQ09OTjtcXG4gNTgxOlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbiA1ODI6XFx0XFx0XFx0XFx0fVxcbiA1ODM6XFx0XFxuIDU4NDpcXHRcXHRcXHRcXHRpZiAoaXB2Nl9vbmx5X3NvY2soc2spIHx8XFxuIDU4NTpcXHRcXHRcXHRcXHQgICAgIWlwdjZfYWRkcl92NG1hcHBlZChcXHUwMDI2c2stXFx1MDAzZXNrX3Y2X2RhZGRyKSkge1xcbiA1ODY6XFx0XFx0XFx0XFx0XFx0cmV0diA9IC1FQUREUk5PVEFWQUlMO1xcbiA1ODc6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDU4ODpcXHRcXHRcXHRcXHR9XFxuIDU4OTpcXHRcXG4gNTkwOlxcdFxcdFxcdFxcdGlmIChzay1cXHUwMDNlc2tfcHJvdG9jb2wgPT0gSVBQUk9UT19UQ1ApIHtcXG4gNTkxOlxcdFxcdFxcdFxcdFxcdGlmIChpbmV0X2Nza19yZXFza19xdWV1ZV9sZW4oc2spKSB7XFxuIDU5MjpcXHRcXHRcXHRcXHRcXHRcXHRyZXR2ID0gLUVCVVNZO1xcbiA1OTM6XFx0XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDU5NDpcXHRcXHRcXHRcXHRcXHR9XFxuIDU5NTpcXHRcXHRcXHRcXHRcXHQvKiBBIFNZTiB0aGF0IGZvdW5kIHRoaXMgc29ja2V0IHdoaWxlIGl0IHdhc1xcbiA1OTY6XFx0XFx0XFx0XFx0XFx0ICogc3RpbGwgbGlzdGVuaW5nIG1heSBub3QgYmUgY291bnRlZCB5ZXQuXFxuIDU5NzpcXHRcXHRcXHRcXHRcXHQgKi9cXG4gNTk4OlxcdFxcdFxcdFxcdFxcdHN5bmNocm9uaXplX3JjdSgpO1xcbiA1OTk6XFx0XFx0XFx0XFx0XFx0aWYgKGluZXRfY3NrX3JlcXNrX3F1ZXVlX2xlbihzaykpIHtcXG4gNjAwOlxcdFxcdFxcdFxcdFxcdFxcdHJldHYgPSAtRUJVU1k7XFxuIDYwMTpcXHRcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4gNjAyOlxcdFxcdFxcdFxcdFxcdH1cXG4gNjAzOlxcdFxcdFxcdFxcdH1cXG4gNjA0OlxcdFxcbiA2MDU6XFx0XFx0XFx0XFx0X19pcHY2X3NvY2tfbWNfY2xvc2Uoc2spO1xcbiA2MDY6XFx0XFx0XFx0XFx0X19pcHY2X3NvY2tfYWNfY2xvc2Uoc2spO1xcbiA2MDc6XFx0XFxuIDYwODpcXHRcXHRcXHRcXHRpZiAoc2stXFx1MDAzZXNrX3Byb3RvY29sID09IElQUFJPVE9fVENQKSB7XFxuIDYwOTpcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDA0OjM3OjMxLjA0ODk0MzIyM1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NjcyNTAxNjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIEknbSByZWFkeSB0byBzdW1tYXJpemUgdGhlIHByb3ZpZGVkIHRleHQgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXNzdW1pbmcgYSBoaWdoIGxldmVsIG9mIGV4cGVydGlzZSBpbiB0aGUgZmllbGQuIEhlcmUncyBob3cgSSdsbCBhcHByb2FjaCBpdDpcblxuKipNeSBJbml0aWFsIEFzc2Vzc21lbnQqKlxuXG5BbHJpZ2h0LCBsZXQncyB0YWtlIGEgbG9vayBhdCB0aGUgaW5wdXQuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgXCJvcHRpb25cIiByZWZlcnMgdG8sIGJlY2F1c2UgdGhlIHJlc3Qgb2YgdGhlIHRob3VnaHQgcHJvY2VzcyBoaW5nZXMgb24gY2xhcmlmeWluZyB0aGF0IHZhcmlhYmxlLiBJJ2xsIG5lZWQgdG8gcGFyc2UgdGhlIGNvbnRleHQgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgYW5kIHJlbGV2YW5jZSBvZiB0aGUgXCJvcHRpb25cIi4gSXQgY291bGQgYmUgYSBoeXBvdGhlc2lzLCBhIHZhcmlhYmxlIHBhcmFtZXRlciB3aXRoaW4gYW4gZXF1YXRpb24sIGEgZGVjaXNpb24gcG9pbnQgaW4gYW4gZXhwZXJpbWVudCwgb3IgZXZlbiBhIHByb3NwZWN0aXZlIHNvbHV0aW9uIHRvIGEgcHJvYmxlbS4gVGhlIGRlZ3JlZSBvZiB0aGUgY29tcGxleGl0eSB2YXJpZXMgYnkgdGhlIGNvbnRleHQuIEkgd2lsbCB3b3JrIHdpdGggdGhlIGNvbnRleHQgdG8gZGV0ZXJtaW5lIHRoZSBiZXN0IGFwcHJvYWNoLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4OTY5LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDA0OjM3OjM0LjUxNjE5ODI4NVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk0NDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1NDAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1NDA6XFx0XFx0XFx0aWYgKFJFQURfT05DRShzay1cXHUwMDNlc2tfYm91bmRfZGV2X2lmKSlcXG4gNTQxOlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA1NDI6XFx0XFxuIDU0MzpcXHRcXHRcXHRXUklURV9PTkNFKG5wLVxcdTAwM2V1Y2FzdF9vaWYsIGlmaW5kZXgpO1xcbiA1NDQ6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDU0NTpcXHRcXHR9XFxuIDU0NjpcXHRcXHR9XFxuIDU0NzpcXHRcXG4gNTQ4OlxcdFxcdHNvY2tvcHRfbG9ja19zb2NrKHNrKTtcXG4gNTQ5OlxcdFxcbiA1NTA6XFx0XFx0LyogQW5vdGhlciB0aHJlYWQgaGFzIGNvbnZlcnRlZCB0aGUgc29ja2V0IGludG8gSVB2NCB3aXRoXFxuIDU1MTpcXHRcXHQgKiBJUFY2X0FERFJGT1JNIGNvbmN1cnJlbnRseS5cXG4gNTUyOlxcdFxcdCAqL1xcbiA1NTM6XFx0XFx0aWYgKHVubGlrZWx5KHNrLVxcdTAwM2Vza19mYW1pbHkgIT0gQUZfSU5FVDYpKVxcbiA1NTQ6XFx0XFx0XFx0Z290byB1bmxvY2s7XFxuIDU1NTpcXHRcXG4gNTU2OlxcdFxcdHN3aXRjaCAob3B0bmFtZSkge1xcbiA1NTc6XFx0XFxuIDU1ODpcXHRcXHRjYXNlIElQVjZfQUREUkZPUk06XFxuIDU1OTpcXHRcXHRcXHRpZiAob3B0bGVuIFxcdTAwM2Mgc2l6ZW9mKGludCkpXFxuIDU2MDpcXHRcXHRcXHRcXHRnb3RvIGVfaW52YWw7XFxuIDU2MTpcXHRcXHRcXHRpZiAodmFsID09IFBGX0lORVQpIHtcXG4gNTYyOlxcdFxcdFxcdFxcdGlmIChzay1cXHUwMDNlc2tfdHlwZSA9PSBTT0NLX1JBVylcXG4gNTYzOlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbiA1NjQ6XFx0XFxuIDU2NTpcXHRcXHRcXHRcXHRpZiAoc2stXFx1MDAzZXNrX3Byb3RvY29sID09IElQUFJPVE9fVURQKSB7XFxuIDU2NjpcXHRcXHRcXHRcXHRcXHRpZiAodWRwX3NrKHNrKS1cXHUwMDNlcGVuZGluZyA9PSBBRl9JTkVUNikge1xcbiA1Njc6XFx0XFx0XFx0XFx0XFx0XFx0cmV0diA9IC1FQlVTWTtcXG4gNTY4OlxcdFxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbiA1Njk6XFx0XFx0XFx0XFx0XFx0fVxcbiA1NzA6XFx0XFx0XFx0XFx0fSBlbHNlIGlmIChzay1cXHUwMDNlc2tfcHJvdG9jb2wgPT0gSVBQUk9UT19UQ1ApIHtcXG4gNTcxOlxcdFxcdFxcdFxcdFxcdGlmIChzay1cXHUwMDNlc2tfcHJvdCAhPSBcXHUwMDI2dGNwdjZfcHJvdCkge1xcbiA1NzI6XFx0XFx0XFx0XFx0XFx0XFx0cmV0diA9IC1FQlVTWTtcXG4gNTczOlxcdFxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbiA1NzQ6XFx0XFx0XFx0XFx0XFx0fVxcbiA1NzU6XFx0XFx0XFx0XFx0fSBlbHNlIHtcXG4gNTc2OlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbiA1Nzc6XFx0XFx0XFx0XFx0fVxcbiA1Nzg6XFx0XFxuIDU3OTpcXHRcXHRcXHRcXHRpZiAoc2stXFx1MDAzZXNrX3N0YXRlICE9IFRDUF9FU1RBQkxJU0hFRCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwNDozNzozNC41MTYyOTM3NzVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODc2NzA4ODg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVENQIExpc3RlbiBTb2NrZXQgSGFuZGxpbmcgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGRlZmluaXRlbHkgZGVhbGluZyB3aXRoIGBJUFY2X0FERFJGT1JNYC4gSSBzZWUgaXQgcmlnaHQgdGhlcmUuIEl0IGxvb2tzIGxpa2UgdGhlIG1haW4gYXJlYSBvZiBmb2N1cyBpcyBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIGluY29taW5nIHBhY2tldHMgb24gbGlzdGVuaW5nIFRDUCBzb2NrZXRzLiBXZSdyZSB0YWxraW5nIHNwZWNpZmljYWxseSBhYm91dCB0aGUgZnVuY3Rpb25zIGB0Y3BfcmN2X2xpc3Rlbl9zdGF0ZV9wcm9jZXNzYCwgYHRjcF92NF9yY3ZfbGlzdGVuYCwgYW5kIGB0Y3BfdjZfcmN2X2xpc3RlbmAuIFRoYXQgbWFrZXMgc2Vuc2U7IGluY29taW5nIGNvbm5lY3Rpb25zIGhhdmUgdG8gYmUgcHJvcGVybHkgcm91dGVkIHRvIGEgc3BlY2lmaWMgc29ja2V0LlxuXG5CZXlvbmQgdGhlIHBhY2tldCBwcm9jZXNzaW5nIGZ1bmN0aW9ucywgdGhpcyBhbHNvIHRvdWNoZXMgb24gYElQVjZfQUREUkZPUk1gIHNldHNvY2tvcHQgaGFuZGxpbmcgZm9yIFRDUCBzb2NrZXRzLiBUaGlzIHByb2JhYmx5IGFmZmVjdHMgaG93IHdlIGRlYWwgd2l0aCB0aGUgZmFtaWx5IG9mIGNvbm5lY3Rpb25zIGJlaW5nIGFjY2VwdGVkLCB3aGljaCBpcyBjcml0aWNhbC5cblxuSSBuZWVkIHRvIGZvY3VzIG9uIGEgZmV3IGtleSBzeW1ib2xzIGhlcmU6IGB0Y3BfcmN2X2xpc3Rlbl9zdGF0ZV9wcm9jZXNzYCBiZWNhdXNlIHRoYXQncyB0aGUgaGVhcnQgb2Ygc3RhdGUgdHJhbnNpdGlvbnMgZm9yIGluY29taW5nIGNvbm5lY3Rpb25zLCBhbmQgYGRvX2lwdjZfc2V0c29ja29wdGAgd2hpY2ggbGlrZWx5IGRlYWxzIHdpdGggY29uZmlndXJhdGlvbnMuXG5cbk9mIGNvdXJzZSwgdGhlIGBJUFY2YCBjb25maWcgb3B0aW9uIGlzIGludm9sdmVkLCBwYXJ0aWN1bGFybHkgaW4gdGhlIGBkb19pcHY2X3NldHNvY2tvcHRgIGFuZCBgdGNwX3Y2X3Jjdl9saXN0ZW5gIGZ1bmN0aW9ucy4gSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IGBJUFY2YCBpcyB0aGUgKnJpZ2h0KiBjb25maWcgb3B0aW9uLCBidXQgSSdtIGJldHRpbmcgdGhhdCdzIHRoZSByaWdodCBvbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk3MTYsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwNDozNzozOS4zOTMwMDQ4MjlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg5MzI2NjM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJUFY2XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvS2NvbmZpZy01LVxcbm5ldC9pcHY2L0tjb25maWc6NjptZW51Y29uZmlnIElQVjZcXG5uZXQvaXB2Ni9LY29uZmlnLTctXFx0Ym9vbCBcXFwiVGhlIElQdjYgcHJvdG9jb2xcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnPTE5PWlmIElQVjZcXG5uZXQvaXB2Ni9LY29uZmlnLTIwLVxcbm5ldC9pcHY2L0tjb25maWc6MjE6Y29uZmlnIElQVjZfUk9VVEVSX1BSRUZcXG5uZXQvaXB2Ni9LY29uZmlnLTIyLVxcdGJvb2wgXFxcIklQdjY6IFJvdXRlciBQcmVmZXJlbmNlIChSRkMgNDE5MSkgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMzAtXFxubmV0L2lwdjYvS2NvbmZpZzozMTpjb25maWcgSVBWNl9ST1VURV9JTkZPXFxubmV0L2lwdjYvS2NvbmZpZy0zMi1cXHRib29sIFxcXCJJUHY2OiBSb3V0ZSBJbmZvcm1hdGlvbiAoUkZDIDQxOTEpIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTM4LVxcbm5ldC9pcHY2L0tjb25maWc6Mzk6Y29uZmlnIElQVjZfT1BUSU1JU1RJQ19EQURcXG5uZXQvaXB2Ni9LY29uZmlnLTQwLVxcdGJvb2wgXFxcIklQdjY6IEVuYWJsZSBSRkMgNDQyOSBPcHRpbWlzdGljIERBRFxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWc9MTAyPWNvbmZpZyBJTkVUNl9JUENPTVBcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMTExLVxcbm5ldC9pcHY2L0tjb25maWc6MTEyOmNvbmZpZyBJUFY2X01JUDZcXG5uZXQvaXB2Ni9LY29uZmlnLTExMy1cXHR0cmlzdGF0ZSBcXFwiSVB2NjogTW9iaWxpdHlcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTExOS1cXG5uZXQvaXB2Ni9LY29uZmlnOjEyMDpjb25maWcgSVBWNl9JTEFcXG5uZXQvaXB2Ni9LY29uZmlnLTEyMS1cXHR0cmlzdGF0ZSBcXFwiSVB2NjogSWRlbnRpZmllciBMb2NhdG9yIEFkZHJlc3NpbmcgKElMQSlcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnPTE0Nj1jb25maWcgSU5FVDZfVFVOTkVMXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTE0OS1cXG5uZXQvaXB2Ni9LY29uZmlnOjE1MDpjb25maWcgSVBWNl9WVElcXG5uZXQvaXB2Ni9LY29uZmlnLTE1MS1cXHR0cmlzdGF0ZSBcXFwiVmlydHVhbCAoc2VjdXJlKSBJUHY2OiB0dW5uZWxpbmdcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTE2MS1cXG5uZXQvaXB2Ni9LY29uZmlnOjE2Mjpjb25maWcgSVBWNl9TSVRcXG5uZXQvaXB2Ni9LY29uZmlnLTE2My1cXHR0cmlzdGF0ZSBcXFwiSVB2NjogSVB2Ni1pbi1JUHY0IHR1bm5lbCAoU0lUIGRyaXZlcilcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTE3Ni1cXG5uZXQvaXB2Ni9LY29uZmlnOjE3Nzpjb25maWcgSVBWNl9TSVRfNlJEXFxubmV0L2lwdjYvS2NvbmZpZy0xNzgtXFx0Ym9vbCBcXFwiSVB2NjogSVB2NiBSYXBpZCBEZXBsb3ltZW50ICg2UkQpXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0xOTUtXFxubmV0L2lwdjYvS2NvbmZpZzoxOTY6Y29uZmlnIElQVjZfTkRJU0NfTk9ERVRZUEVcXG5uZXQvaXB2Ni9LY29uZmlnLTE5Ny1cXHRib29sXFxubmV0L2lwdjYvS2NvbmZpZy0xOTgtXFxubmV0L2lwdjYvS2NvbmZpZzoxOTk6Y29uZmlnIElQVjZfVFVOTkVMXFxubmV0L2lwdjYvS2NvbmZpZy0yMDAtXFx0dHJpc3RhdGUgXFxcIklQdjY6IElQLWluLUlQdjYgdHVubmVsIChSRkMyNDczKVxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMjA5LVxcbm5ldC9pcHY2L0tjb25maWc6MjEwOmNvbmZpZyBJUFY2X0dSRVxcbm5ldC9pcHY2L0tjb25maWctMjExLVxcdHRyaXN0YXRlIFxcXCJJUHY2OiBHUkUgdHVubmVsXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0yMjctXFxubmV0L2lwdjYvS2NvbmZpZzoyMjg6Y29uZmlnIElQVjZfRk9VXFxubmV0L2lwdjYvS2NvbmZpZy0yMjktXFx0dHJpc3RhdGVcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMjMxLVxcbm5ldC9pcHY2L0tjb25maWc6MjMyOmNvbmZpZyBJUFY2X0ZPVV9UVU5ORUxcXG5uZXQvaXB2Ni9LY29uZmlnLTIzMy1cXHR0cmlzdGF0ZVxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0yMzYtXFxubmV0L2lwdjYvS2NvbmZpZzoyMzc6Y29uZmlnIElQVjZfTVVMVElQTEVfVEFCTEVTXFxubmV0L2lwdjYvS2NvbmZpZy0yMzgtXFx0Ym9vbCBcXFwiSVB2NjogTXVsdGlwbGUgUm91dGluZyBUYWJsZXNcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTI0Mi1cXG5uZXQvaXB2Ni9LY29uZmlnOjI0Mzpjb25maWcgSVBWNl9TVUJUUkVFU1xcbm5ldC9pcHY2L0tjb25maWctMjQ0LVxcdGJvb2wgXFxcIklQdjY6IHNvdXJjZSBhZGRyZXNzIGJhc2VkIHJvdXRpbmdcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTI1Ni1cXG5uZXQvaXB2Ni9LY29uZmlnOjI1Nzpjb25maWcgSVBWNl9NUk9VVEVcXG5uZXQvaXB2Ni9LY29uZmlnLTI1OC1cXHRib29sIFxcXCJJUHY2OiBtdWx0aWNhc3Qgcm91dGluZ1xcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMjY0LVxcbm5ldC9pcHY2L0tjb25maWc6MjY1OmNvbmZpZyBJUFY2X01ST1VURV9NVUxUSVBMRV9UQUJMRVNcXG5uZXQvaXB2Ni9LY29uZmlnLTI2Ni1cXHRib29sIFxcXCJJUHY2OiBtdWx0aWNhc3QgcG9saWN5IHJvdXRpbmdcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTI3OC1cXG5uZXQvaXB2Ni9LY29uZmlnOjI3OTpjb25maWcgSVBWNl9QSU1TTV9WMlxcbm5ldC9pcHY2L0tjb25maWctMjgwLVxcdGJvb2wgXFxcIklQdjY6IFBJTS1TTSB2ZXJzaW9uIDIgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMjg1LVxcbm5ldC9pcHY2L0tjb25maWc6Mjg2OmNvbmZpZyBJUFY2X1NFRzZfTFdUVU5ORUxcXG5uZXQvaXB2Ni9LY29uZmlnLTI4Ny1cXHRib29sIFxcXCJJUHY2OiBTZWdtZW50IFJvdXRpbmcgSGVhZGVyIGVuY2Fwc3VsYXRpb24gc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMjk5LVxcbm5ldC9pcHY2L0tjb25maWc6MzAwOmNvbmZpZyBJUFY2X1NFRzZfSE1BQ1xcbm5ldC9pcHY2L0tjb25maWctMzAxLVxcdGJvb2wgXFxcIklQdjY6IFNlZ21lbnQgUm91dGluZyBITUFDIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTMxMS1cXG5uZXQvaXB2Ni9LY29uZmlnOjMxMjpjb25maWcgSVBWNl9TRUc2X0JQRlxcbm5ldC9pcHY2L0tjb25maWctMzEzLVxcdGRlZl9ib29sIHlcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMzE2LVxcbm5ldC9pcHY2L0tjb25maWc6MzE3OmNvbmZpZyBJUFY2X1JQTF9MV1RVTk5FTFxcbm5ldC9pcHY2L0tjb25maWctMzE4LVxcdGJvb2wgXFxcIklQdjY6IFJQTCBTb3VyY2UgUm91dGluZyBIZWFkZXIgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMzI3LVxcbm5ldC9pcHY2L0tjb25maWc6MzI4OmNvbmZpZyBJUFY2X0lPQU02X0xXVFVOTkVMXFxubmV0L2lwdjYvS2NvbmZpZy0zMjktXFx0Ym9vbCBcXFwiSVB2NjogSU9BTSBQcmUtYWxsb2NhdGVkIFRyYWNlIGluc2VydGlvbiBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwNDozNzozOS40ODIzMzQ2MjhaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzM2NTY5NjcyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBGdXp6aW5nIFN0cmF0ZWd5OiBUYXJnZXRpbmcgVENQIExpc3RlbmluZyBTb2NrZXRzIHdpdGggSVB2NiBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gdGhlIGBJUFY2YCBjb25maWcgaXMgZGVmaW5pdGVseSByZWxldmFudCBoZXJlLiBNeSBpbml0aWFsIHJldmlldyBvZiB0aGUgY29kZSBoYXMgaGlnaGxpZ2h0ZWQgc2V2ZXJhbCBrZXkgZnVuY3Rpb25zIHRvIGZvY3VzIG15IGZ1enppbmcgZWZmb3J0cyBvbi4gSSd2ZSBwaW5wb2ludGVkIGB0Y3BfcmN2X2xpc3Rlbl9zdGF0ZV9wcm9jZXNzYCwgYGRvX2lwdjZfc2V0c29ja29wdGAsIGB0Y3BfdjRfcmN2YCwgYW5kIGB0Y3BfdjZfcmN2YCBhcyB0aGUgYXJlYXMgb2YgaW50ZXJlc3QuXG5cbkltbWVkaWF0ZWx5LCBJJ20gZGlzbWlzc2luZyBgdGNwX3Y0X3JjdmAgYW5kIGB0Y3BfdjZfcmN2YCDigJMgdGhvc2UgYXJlIGhvdC1wYXRoIGZ1bmN0aW9ucy4gRnV6emluZyB0aG9zZSBkaXJlY3RseSBpcyBsaWtlbHkgdG8gYmUgbm9pc3kgYW5kIGdlbmVyYXRlIGEgbG90IG9mIGZhbHNlIHBvc2l0aXZlcywgd2hpY2ggaXMgbm90IGlkZWFsLiBCdXQgdGhhdCBkb2Vzbid0IG1lYW4gSSB3b24ndCBpbmRpcmVjdGx5IHRlc3QgdGhlbS5cblxuYHRjcF9yY3ZfbGlzdGVuX3N0YXRlX3Byb2Nlc3NgIGxvb2tzIHByb21pc2luZywgdGhvdWdoLiBUaGUgc2FtZSBpcyB0cnVlIGZvciBgZG9faXB2Nl9zZXRzb2Nrb3B0YC4gSXQgbG9va3MgbGlrZSBgc2tfY2xvbmVgIGlzIG1vZGlmaWVkIHRvbywgYnV0IEknbSBzZXR0aW5nIGl0IGFzaWRlIGJlY2F1c2UgdGhhdCdzIG1vcmUgb2YgYSBnZW5lcmFsIGZ1bmN0aW9uLiBJdCdzIGxlc3MgbGlrZWx5IHRvIGV4cG9zZSB2dWxuZXJhYmlsaXRpZXMgc3BlY2lmaWMgdG8gdGhpcyBwYXRjaC5cblxuVGhlIG5leHQgcXVlc3Rpb246IGFyZSBgdGNwX3Jjdl9saXN0ZW5fc3RhdGVfcHJvY2Vzc2AgYW5kIGBkb19pcHY2X3NldHNvY2tvcHRgIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2U/IFllcywgaW4gYm90aCBjYXNlcy4gSSBjYW4gdHJpZ2dlciBgdGNwX3Jjdl9saXN0ZW5fc3RhdGVfcHJvY2Vzc2AgYnkgc2VuZGluZyBUQ1AgcGFja2V0cyB0byBhIGxpc3RlbmluZyBzb2NrZXQsIGFuZCBJIGNhbiB0cmlnZ2VyIGBkb19pcHY2X3NldHNvY2tvcHRgIGJ5IGNhbGxpbmcgYHNldHNvY2tvcHRgIHdpdGggYElQVjZfQUREUkZPUk1gIG9uIGFuIElQdjYgc29ja2V0LiBUaGVzZSBhcmUgaWRlYWwgdGFyZ2V0cy5cblxuRXNzZW50aWFsbHksIHRoaXMgcGF0Y2ggbW9kaWZpZXMgaG93IFRDUCBsaXN0ZW5pbmcgc29ja2V0cyBoYW5kbGUgcGFja2V0cyBhbmQgaW50cm9kdWNlcyBsb2NrbGVzcyByZWNlaXZlIHBhdGhzLiBJdCBhbHNvIGFkZHMgbmV3IGNoZWNrcyBpbiBgZG9faXB2Nl9zZXRzb2Nrb3B0YCB3aGVuIHlvdSBkZWFsIHdpdGggSVB2NiBzb2NrZXQgb3B0aW9ucyBhbmQgc29ja2V0cyB3aGljaCBoYXZlIHBlbmRpbmcgY29ubmVjdGlvbiByZXF1ZXN0cy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBjb3JlIFRDUCBzdGFjayBhbmQgSVB2NiBzb2NrZXQgb3B0aW9ucy4gVGhlc2UgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgbmV0d29yayB0cmFmZmljIGFuZCBhcmUgbXkga2V5IHRhcmdldHMgZm9yIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNzMxLCJPdXRwdXRUb2tlbnMiOjE2OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwNDozNzo0Ni44NDgwMzM0NjdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjY2NTMwNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBWNlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRjcF9yY3ZfbGlzdGVuX3N0YXRlX3Byb2Nlc3NcIixcbiAgICBcImRvX2lwdjZfc2V0c29ja29wdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIFRDUCBsaXN0ZW5pbmcgc29ja2V0IHBhY2tldCBwcm9jZXNzaW5nIGJ5IGludHJvZHVjaW5nIGB0Y3BfcmN2X2xpc3Rlbl9zdGF0ZV9wcm9jZXNzYCBhbmQgbG9ja2xlc3MgbGlzdGVuIHJlY2VpdmUgcGF0aHMgKGB0Y3BfdjRfcmN2X2xpc3RlbmAsIGB0Y3BfdjZfcmN2X2xpc3RlbmApLiBJdCBhbHNvIGFkZHMgY2hlY2tzIGluIGBkb19pcHY2X3NldHNvY2tvcHRgIGZvciBgSVBWNl9BRERSRk9STWAgb24gVENQIHNvY2tldHMgd2l0aCBwZW5kaW5nIGNvbm5lY3Rpb24gcmVxdWVzdHMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUgVENQIHN0YWNrIGFuZCBJUHY2IHNvY2tldCBvcHRpb25zLCByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIGFuZCBuZXR3b3JrIHRyYWZmaWMsIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQVjZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0Y3BfcmN2X2xpc3Rlbl9zdGF0ZV9wcm9jZXNzXCIsXG4gICAgXCJkb19pcHY2X3NldHNvY2tvcHRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBUQ1AgbGlzdGVuaW5nIHNvY2tldCBwYWNrZXQgcHJvY2Vzc2luZyBieSBpbnRyb2R1Y2luZyBgdGNwX3Jjdl9saXN0ZW5fc3RhdGVfcHJvY2Vzc2AgYW5kIGxvY2tsZXNzIGxpc3RlbiByZWNlaXZlIHBhdGhzIChgdGNwX3Y0X3Jjdl9saXN0ZW5gLCBgdGNwX3Y2X3Jjdl9saXN0ZW5gKS4gSXQgYWxzbyBhZGRzIGNoZWNrcyBpbiBgZG9faXB2Nl9zZXRzb2Nrb3B0YCBmb3IgYElQVjZfQUREUkZPUk1gIG9uIFRDUCBzb2NrZXRzIHdpdGggcGVuZGluZyBjb25uZWN0aW9uIHJlcXVlc3RzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBjb3JlIFRDUCBzdGFjayBhbmQgSVB2NiBzb2NrZXQgb3B0aW9ucywgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSBhbmQgbmV0d29yayB0cmFmZmljLCBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDQ6Mzc6NDYuOTI0NzA2MTA1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMzIzNTc4NjgyMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDA0OjM3OjQ2LjkyNTE4MDE1NVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjozMzIzNTMwOTI0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW1wbGVtZW50cyBsb2NrbGVzcyBUQ1AgbGlzdGVuZXIgcHJvY2Vzc2luZyBhbmQgZml4ZXMgc2V2ZXJhbCBpc3N1ZXMgcmVsYXRlZCB0byBzb2NrZXQgY2xvbmluZyBhbmQgc3RhdGUgaW5oZXJpdGFuY2UgKGUuZy4sIHJlc2V0dGluZyBgc2tfdHNxX2ZsYWdzYCwgYHBhY2tldHNfb3V0YCwgYW5kIGBwaW5ldDZgIGluIGNsb25lZCBzb2NrZXRzKS4gXFxuXFxuMS4gVGhlIGZpZWxkcyBiZWluZyBleHBsaWNpdGx5IHplcm9lZCBvciBzZXQgdG8gTlVMTCBpbiBgc2tfY2xvbmVgIGFuZCBgdGNwX2NyZWF0ZV9vcGVucmVxX2NoaWxkYCBkbyBub3QgcmVwcmVzZW50IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGV5IGFyZSBhbHJlYWR5IGZ1bGx5IGluaXRpYWxpemVkIHZpYSBgc29ja19jb3B5YCAod2hpY2ggY29waWVzIHRoZSBwYXJlbnQgc29ja2V0J3Mgc3RhdGUpLiBUaGUgY2hhbmdlcyBtZXJlbHkgcHJldmVudCB0aGUgY2hpbGQgc29ja2V0IGZyb20gaW5oZXJpdGluZyBzdGFsZSBvciBpbmNvcnJlY3QgdmFsdWVzIGZyb20gdGhlIGxpc3RlbmVyLlxcbjIuIFRoZSBsb2NrbGVzcyBsaXN0ZW5lciBwcm9jZXNzaW5nIChgdGNwX3Y0X3Jjdl9saXN0ZW5gKSBpbnRyb2R1Y2VzIGNvbmN1cnJlbmN5IGNoYW5nZXMuIEFueSByZXN1bHRpbmcgYnVncyB3b3VsZCBiZSBkYXRhIHJhY2VzIChjYXVnaHQgYnkgS0NTQU4pIG9yIHVzZS1hZnRlci1mcmVlL21lbW9yeSBjb3JydXB0aW9uIChjYXVnaHQgYnkgS0FTQU4pLlxcbjMuIFRoZSBgSVBWNl9BRERSRk9STWAgYW5kIGBkb19pcHY2X3NldHNvY2tvcHRgIGNoYW5nZXMgYWRkcmVzcyBsb2dpYyBidWdzIGFuZCBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW9zLCB3aGljaCBhcmUgd2VsbCB3aXRoaW4gdGhlIGRvbWFpbiBvZiBLQVNBTi5cXG5cXG5UaGVyZSBhcmUgbm8gbmV3IHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBubyBuZXcgYWxsb2NhdGlvbnMgbGVmdCB1bmluaXRpYWxpemVkLCBhbmQgbm8gY2hhbmdlcyB0byBib3VuZHMgY2hlY2tpbmcgdGhhdCB3b3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRodXMsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOGNlNWQ1NmMwNmY5Njg2ZTM5OGNlYTc3ODllNTE1ZmJmMzFiNWFkOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDI0IDA0OjM3OjExIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvdGNwLmggYi9pbmNsdWRlL25ldC90Y3AuaFxuaW5kZXggMmM1Yjg4OTUzMGI1NS4uYWRkNDM4ZDY1NjFiZSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L3RjcC5oXG4rKysgYi9pbmNsdWRlL25ldC90Y3AuaFxuQEAgLTM5Miw2ICszOTIsOCBAQCB2b2lkIHRjcF93cml0ZV90aW1lcl9oYW5kbGVyKHN0cnVjdCBzb2NrICpzayk7XG4gdm9pZCB0Y3BfZGVsYWNrX3RpbWVyX2hhbmRsZXIoc3RydWN0IHNvY2sgKnNrKTtcbiBpbnQgdGNwX2lvY3RsKHN0cnVjdCBzb2NrICpzaywgaW50IGNtZCwgaW50ICprYXJnKTtcbiBlbnVtIHNrYl9kcm9wX3JlYXNvbiB0Y3BfcmN2X3N0YXRlX3Byb2Nlc3Moc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbitlbnVtIHNrYl9kcm9wX3JlYXNvbiB0Y3BfcmN2X2xpc3Rlbl9zdGF0ZV9wcm9jZXNzKHN0cnVjdCBzb2NrICpzayxcbitcdFx0XHRcdFx0XHQgIHN0cnVjdCBza19idWZmICpza2IpO1xuIHZvaWQgdGNwX3Jjdl9lc3RhYmxpc2hlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpO1xuIHZvaWQgdGNwX3JjdmJ1Zl9ncm93KHN0cnVjdCBzb2NrICpzaywgdTMyIG5ld3ZhbCk7XG4gdm9pZCB0Y3BfcmN2X3NwYWNlX2FkanVzdChzdHJ1Y3Qgc29jayAqc2spO1xuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NvY2suYyBiL25ldC9jb3JlL3NvY2suY1xuaW5kZXggMWFkNDE5MDRkYjI1Yi4uMDZmYmIxOTgyNGUyNiAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL3NvY2suY1xuKysrIGIvbmV0L2NvcmUvc29jay5jXG5AQCAtMjQ3OSw3ICsyNDc5LDcgQEAgc3RhdGljIHZvaWQgc2tfaW5pdF9jb21tb24oc3RydWN0IHNvY2sgKnNrKVxuIHN0cnVjdCBzb2NrICpza19jbG9uZShjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IGdmcF90IHByaW9yaXR5LFxuIFx0XHQgICAgICBib29sIGxvY2spXG4ge1xuLVx0c3RydWN0IHByb3RvICpwcm90ID0gUkVBRF9PTkNFKHNrLVx1MDAzZXNrX3Byb3QpO1xuK1x0c3RydWN0IHByb3RvICpwcm90ID0gc2stXHUwMDNlc2tfcHJvdF9jcmVhdG9yO1xuIFx0c3RydWN0IHNrX2ZpbHRlciAqZmlsdGVyO1xuIFx0Ym9vbCBpc19jaGFyZ2VkID0gdHJ1ZTtcbiBcdHN0cnVjdCBzb2NrICpuZXdzaztcbkBAIC0yNTMzLDYgKzI1MzMsNyBAQCBzdHJ1Y3Qgc29jayAqc2tfY2xvbmUoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBjb25zdCBnZnBfdCBwcmlvcml0eSxcbiBcdG5ld3NrLVx1MDAzZXNrX3Jlc2VydmVkX21lbSAgPSAwO1xuIFx0REVCVUdfTkVUX1dBUk5fT05fT05DRShuZXdzay1cdTAwM2Vza19kcm9wX2NvdW50ZXJzKTtcbiBcdHNrX2Ryb3BzX3Jlc2V0KG5ld3NrKTtcbitcdG5ld3NrLVx1MDAzZXNrX3RzcV9mbGFnc1x0PSAwO1xuIFx0bmV3c2stXHUwMDNlc2tfc2VuZF9oZWFkXHQ9IE5VTEw7XG4gXHRuZXdzay1cdTAwM2Vza191c2VybG9ja3NcdD0gc2stXHUwMDNlc2tfdXNlcmxvY2tzIFx1MDAyNiB+U09DS19CSU5EUE9SVF9MT0NLO1xuIFx0YXRvbWljX3NldChcdTAwMjZuZXdzay1cdTAwM2Vza196Y2tleSwgMCk7XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2lucHV0LmMgYi9uZXQvaXB2NC90Y3BfaW5wdXQuY1xuaW5kZXggMGY2MGExZGJmOTI3NC4uNzdhZjE4ZmJhNjZiNCAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L3RjcF9pbnB1dC5jXG4rKysgYi9uZXQvaXB2NC90Y3BfaW5wdXQuY1xuQEAgLTcxNDEsNiArNzE0MSw0MiBAQCBzdGF0aWMgdm9pZCB0Y3BfcmN2X3N5bnJlY3Zfc3RhdGVfZmFzdG9wZW4oc3RydWN0IHNvY2sgKnNrKVxuIFx0dGNwX3JlYXJtX3J0byhzayk7XG4gfVxuIFxuK2VudW0gc2tiX2Ryb3BfcmVhc29uIHRjcF9yY3ZfbGlzdGVuX3N0YXRlX3Byb2Nlc3Moc3RydWN0IHNvY2sgKnNrLFxuK1x0XHRcdFx0XHRcdCAgc3RydWN0IHNrX2J1ZmYgKnNrYilcbit7XG4rXHRjb25zdCBzdHJ1Y3QgdGNwaGRyICp0aCA9IHRjcF9oZHIoc2tiKTtcbitcdFNLQl9EUihyZWFzb24pO1xuK1xuK1x0aWYgKHRoLVx1MDAzZWFjaylcbitcdFx0cmV0dXJuIFNLQl9EUk9QX1JFQVNPTl9UQ1BfRkxBR1M7XG4rXG4rXHRpZiAodGgtXHUwMDNlcnN0KSB7XG4rXHRcdFNLQl9EUl9TRVQocmVhc29uLCBUQ1BfUkVTRVQpO1xuK1x0XHRnb3RvIGRpc2NhcmQ7XG4rXHR9XG4rXHRpZiAodGgtXHUwMDNlc3luKSB7XG4rXHRcdGlmICh0aC1cdTAwM2VmaW4pIHtcbitcdFx0XHRTS0JfRFJfU0VUKHJlYXNvbiwgVENQX0ZMQUdTKTtcbitcdFx0XHRnb3RvIGRpc2NhcmQ7XG4rXHRcdH1cbitcdFx0LyogSXQgaXMgcG9zc2libGUgdGhhdCB3ZSBwcm9jZXNzIFNZTiBwYWNrZXRzIGZyb20gYmFja2xvZyxcbitcdFx0ICogc28gd2UgbmVlZCB0byBtYWtlIHN1cmUgdG8gZGlzYWJsZSBCSCBhbmQgUkNVIHJpZ2h0IHRoZXJlLlxuK1x0XHQgKi9cbitcdFx0cmN1X3JlYWRfbG9jaygpO1xuK1x0XHRsb2NhbF9iaF9kaXNhYmxlKCk7XG4rXHRcdGluZXRfY3NrKHNrKS1cdTAwM2VpY3NrX2FmX29wcy1cdTAwM2Vjb25uX3JlcXVlc3Qoc2ssIHNrYik7XG4rXHRcdGxvY2FsX2JoX2VuYWJsZSgpO1xuK1x0XHRyY3VfcmVhZF91bmxvY2soKTtcbitcbitcdFx0Y29uc3VtZV9za2Ioc2tiKTtcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXHRTS0JfRFJfU0VUKHJlYXNvbiwgVENQX0ZMQUdTKTtcbitkaXNjYXJkOlxuK1x0dGNwX2Ryb3BfcmVhc29uKHNrLCBza2IsIHJlYXNvbik7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gLypcbiAgKlx0VGhpcyBmdW5jdGlvbiBpbXBsZW1lbnRzIHRoZSByZWNlaXZpbmcgcHJvY2VkdXJlIG9mIFJGQyA3OTMgZm9yXG4gICpcdGFsbCBzdGF0ZXMgZXhjZXB0IEVTVEFCTElTSEVEIGFuZCBUSU1FX1dBSVQuXG5AQCAtNzE1Miw3ICs3MTg4LDYgQEAgZW51bSBza2JfZHJvcF9yZWFzb25cbiB0Y3BfcmN2X3N0YXRlX3Byb2Nlc3Moc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbiBcdHN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spO1xuLVx0c3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xuIFx0Y29uc3Qgc3RydWN0IHRjcGhkciAqdGggPSB0Y3BfaGRyKHNrYik7XG4gXHRzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXE7XG4gXHRpbnQgcXVldWVkID0gMDtcbkBAIC03MTY0LDMyICs3MTk5LDcgQEAgdGNwX3Jjdl9zdGF0ZV9wcm9jZXNzKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdFx0Z290byBkaXNjYXJkO1xuIFxuIFx0Y2FzZSBUQ1BfTElTVEVOOlxuLVx0XHRpZiAodGgtXHUwMDNlYWNrKVxuLVx0XHRcdHJldHVybiBTS0JfRFJPUF9SRUFTT05fVENQX0ZMQUdTO1xuLVxuLVx0XHRpZiAodGgtXHUwMDNlcnN0KSB7XG4tXHRcdFx0U0tCX0RSX1NFVChyZWFzb24sIFRDUF9SRVNFVCk7XG4tXHRcdFx0Z290byBkaXNjYXJkO1xuLVx0XHR9XG4tXHRcdGlmICh0aC1cdTAwM2VzeW4pIHtcbi1cdFx0XHRpZiAodGgtXHUwMDNlZmluKSB7XG4tXHRcdFx0XHRTS0JfRFJfU0VUKHJlYXNvbiwgVENQX0ZMQUdTKTtcbi1cdFx0XHRcdGdvdG8gZGlzY2FyZDtcbi1cdFx0XHR9XG4tXHRcdFx0LyogSXQgaXMgcG9zc2libGUgdGhhdCB3ZSBwcm9jZXNzIFNZTiBwYWNrZXRzIGZyb20gYmFja2xvZyxcbi1cdFx0XHQgKiBzbyB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0byBkaXNhYmxlIEJIIGFuZCBSQ1UgcmlnaHQgdGhlcmUuXG4tXHRcdFx0ICovXG4tXHRcdFx0cmN1X3JlYWRfbG9jaygpO1xuLVx0XHRcdGxvY2FsX2JoX2Rpc2FibGUoKTtcbi1cdFx0XHRpY3NrLVx1MDAzZWljc2tfYWZfb3BzLVx1MDAzZWNvbm5fcmVxdWVzdChzaywgc2tiKTtcbi1cdFx0XHRsb2NhbF9iaF9lbmFibGUoKTtcbi1cdFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbi1cbi1cdFx0XHRjb25zdW1lX3NrYihza2IpO1xuLVx0XHRcdHJldHVybiAwO1xuLVx0XHR9XG4tXHRcdFNLQl9EUl9TRVQocmVhc29uLCBUQ1BfRkxBR1MpO1xuLVx0XHRnb3RvIGRpc2NhcmQ7XG4rXHRcdHJldHVybiB0Y3BfcmN2X2xpc3Rlbl9zdGF0ZV9wcm9jZXNzKHNrLCBza2IpO1xuIFxuIFx0Y2FzZSBUQ1BfU1lOX1NFTlQ6XG4gXHRcdHRwLVx1MDAzZXJ4X29wdC5zYXdfdHN0YW1wID0gMDtcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfaXB2NC5jIGIvbmV0L2lwdjQvdGNwX2lwdjQuY1xuaW5kZXggMTkwYzdhZjRjZjkyMy4uMmZhODk1ODM4MGE1YiAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L3RjcF9pcHY0LmNcbisrKyBiL25ldC9pcHY0L3RjcF9pcHY0LmNcbkBAIC0xNzE0LDYgKzE3MTQsMTQgQEAgc3RydWN0IHNvY2sgKnRjcF92NF9zeW5fcmVjdl9zb2NrKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0aW5ldF9jc2sobmV3c2spLVx1MDAzZWljc2tfZXh0X2hkcl9sZW4gPSBpbmV0X29wdC1cdTAwM2VvcHQub3B0bGVuO1xuIFx0YXRvbWljX3NldChcdTAwMjZuZXdpbmV0LVx1MDAzZWluZXRfaWQsIGdldF9yYW5kb21fdTE2KCkpO1xuIFxuKyNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuK1x0LyogTmV2ZXIgaW5oZXJpdCB0aGUgbGlzdGVuZXIncyBpcHY2X3BpbmZvOyBJUFY2X0FERFJGT1JNIGxlYXZlcyBpdCBzZXRcbitcdCAqIG9uIGFuIEFGX0lORVQgc29ja2V0LiAgdGNwX3Y2X21hcHBlZF9jaGlsZF9pbml0KCkgaW5zdGFsbHMgb3VyIG93bi5cbitcdCAqL1xuK1x0bmV3aW5ldC1cdTAwM2VwaW5ldDYgPSBOVUxMO1xuK1x0bmV3aW5ldC1cdTAwM2VpcHY2X2ZsX2xpc3QgPSBOVUxMO1xuKyNlbmRpZlxuK1xuIFx0LyogU2V0IFRvUyBvZiB0aGUgbmV3IHNvY2tldCBiYXNlZCB1cG9uIHRoZSB2YWx1ZSBvZiBpbmNvbWluZyBTWU4uXG4gXHQgKiBFQ1QgYml0cyBhcmUgc2V0IGxhdGVyIGluIHRjcF9pbml0X3RyYW5zZmVyKCkuXG4gXHQgKi9cbkBAIC0xODIwLDcgKzE4MjgsNyBAQCB1MTYgdGNwX3Y0X2dldF9zeW5jb29raWUoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaXBoZHIgKmlwaCxcbiBJTkRJUkVDVF9DQUxMQUJMRV9ERUNMQVJFKHN0cnVjdCBkc3RfZW50cnkgKmlwdjRfZHN0X2NoZWNrKHN0cnVjdCBkc3RfZW50cnkgKixcbiBcdFx0XHRcdFx0XHRcdCAgIHUzMikpO1xuIC8qIFRoZSBzb2NrZXQgbXVzdCBoYXZlIGl0J3Mgc3BpbmxvY2sgaGVsZCB3aGVuIHdlIGdldFxuLSAqIGhlcmUsIHVubGVzcyBpdCBpcyBhIFRDUF9MSVNURU4gc29ja2V0LlxuKyAqIGhlcmUuXG4gICpcbiAgKiBXZSBoYXZlIGEgcG90ZW50aWFsIGRvdWJsZS1sb2NrIGNhc2UgaGVyZSwgc28gZXZlbiB3aGVuXG4gICogZG9pbmcgYmFja2xvZyBwcm9jZXNzaW5nIHdlIHVzZSB0aGUgQkggbG9ja2luZyBzY2hlbWUuXG5AQCAtMTg5OCw2ICsxOTA2LDQ2IEBAIGludCB0Y3BfdjRfZG9fcmN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdGdvdG8gZGlzY2FyZDtcbiB9XG4gXG4rLyogQHNrIGlzIG5vdCBsb2NrZWQgaGVyZSBhbmQgY2FuIGxlYXZlIFRDUF9MSVNURU47IGRvIG5vdCB0ZXN0IHNrX3N0YXRlLiAqL1xuK3N0YXRpYyBub2lubGluZSBpbnQgdGNwX3Y0X3Jjdl9saXN0ZW4oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuK3tcbitcdGVudW0gc2tiX2Ryb3BfcmVhc29uIHJlYXNvbjtcbitcdHN0cnVjdCBzb2NrICpuc2s7XG4rXG4rXHRyZWFzb24gPSBwc3Bfc2tfcnhfcG9saWN5X2NoZWNrKHNrLCBza2IpO1xuK1x0aWYgKHJlYXNvbilcbitcdFx0Z290byBlcnJfZGlzY2FyZDtcbitcbitcdGlmICh0Y3BfY2hlY2tzdW1fY29tcGxldGUoc2tiKSlcbitcdFx0Z290byBjc3VtX2VycjtcbitcbitcdG5zayA9IHRjcF92NF9jb29raWVfY2hlY2soc2ssIHNrYik7XG4rXHRpZiAoIW5zaylcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRpZiAobnNrICE9IHNrKSB7XG4rXHRcdHJlYXNvbiA9IHRjcF9jaGlsZF9wcm9jZXNzKHNrLCBuc2ssIHNrYik7XG4rXHRcdHNvY2tfcHV0KG5zayk7XG4rXHR9IGVsc2Uge1xuK1x0XHRyZWFzb24gPSB0Y3BfcmN2X2xpc3Rlbl9zdGF0ZV9wcm9jZXNzKHNrLCBza2IpO1xuK1x0fVxuK1x0aWYgKCFyZWFzb24pXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0dGNwX3Y0X3NlbmRfcmVzZXQoc2ssIHNrYiwgc2tfcnN0X2NvbnZlcnRfZHJvcF9yZWFzb24ocmVhc29uKSk7XG4rZGlzY2FyZDpcbitcdHNrX3NrYl9yZWFzb25fZHJvcChzaywgc2tiLCByZWFzb24pO1xuK1x0cmV0dXJuIDA7XG4rXG4rY3N1bV9lcnI6XG4rXHRyZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fVENQX0NTVU07XG4rXHR0cmFjZV90Y3BfYmFkX2NzdW0oc2tiKTtcbitcdFRDUF9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBUQ1BfTUlCX0NTVU1FUlJPUlMpO1xuK2Vycl9kaXNjYXJkOlxuK1x0VENQX0lOQ19TVEFUUyhzb2NrX25ldChzayksIFRDUF9NSUJfSU5FUlJTKTtcbitcdGdvdG8gZGlzY2FyZDtcbit9XG4rXG4gZW51bSBza2JfZHJvcF9yZWFzb24gdGNwX2FkZF9iYWNrbG9nKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG4gXHR1MzIgdGFpbF9nc29fc2l6ZSwgdGFpbF9nc29fc2VncztcbkBAIC0yMjM1LDcgKzIyODMsNyBAQCBpbnQgdGNwX3Y0X3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0c2tiLVx1MDAzZWRldiA9IE5VTEw7XG4gXG4gXHRpZiAoc2stXHUwMDNlc2tfc3RhdGUgPT0gVENQX0xJU1RFTikge1xuLVx0XHRyZXQgPSB0Y3BfdjRfZG9fcmN2KHNrLCBza2IpO1xuK1x0XHRyZXQgPSB0Y3BfdjRfcmN2X2xpc3Rlbihzaywgc2tiKTtcbiBcdFx0Z290byBwdXRfYW5kX3JldHVybjtcbiBcdH1cbiBcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMgYi9uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmNcbmluZGV4IDEyMjU0ZTZlYjJmMzQuLjJmZGUxOTZkZDMwMmYgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmNcbisrKyBiL25ldC9pcHY0L3RjcF9taW5pc29ja3MuY1xuQEAgLTU5MSw2ICs1OTEsNyBAQCBzdHJ1Y3Qgc29jayAqdGNwX2NyZWF0ZV9vcGVucmVxX2NoaWxkKGNvbnN0IHN0cnVjdCBzb2NrICpzayxcbiBcdG5ld3RwLVx1MDAzZXRvdGFsX3JldHJhbnMgPSByZXEtXHUwMDNlbnVtX3JldHJhbnM7XG4gXG4gXHR0Y3BfaW5pdF94bWl0X3RpbWVycyhuZXdzayk7XG4rXHRuZXd0cC1cdTAwM2VvdXRfb2Zfb3JkZXJfcXVldWUgPSBSQl9ST09UO1xuIFx0V1JJVEVfT05DRShuZXd0cC1cdTAwM2V3cml0ZV9zZXEsIG5ld3RwLVx1MDAzZXB1c2hlZF9zZXEgPSB0cmVxLVx1MDAzZXNudF9pc24gKyAxKTtcbiBcbiBcdGlmIChzb2NrX2ZsYWcobmV3c2ssIFNPQ0tfS0VFUE9QRU4pKVxuQEAgLTY1OSw2ICs2NjAsMTIgQEAgc3RydWN0IHNvY2sgKnRjcF9jcmVhdGVfb3BlbnJlcV9jaGlsZChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXG4gXHR0Y3BfZWNuX29wZW5yZXFfY2hpbGQobmV3c2ssIHJlcSwgc2tiKTtcbiBcdG5ld3RwLVx1MDAzZWZhc3RvcGVuX3JlcSA9IE5VTEw7XG4gXHRSQ1VfSU5JVF9QT0lOVEVSKG5ld3RwLVx1MDAzZWZhc3RvcGVuX3JzaywgTlVMTCk7XG4rXHRuZXd0cC1cdTAwM2VwYWNrZXRzX291dCA9IDA7XG4rXHRuZXd0cC1cdTAwM2VyZXRyYW5zX291dCA9IDA7XG4rXHRuZXd0cC1cdTAwM2VzYWNrZWRfb3V0ID0gMDtcbitcdG5ld3RwLVx1MDAzZWxvc3Rfb3V0ID0gMDtcbitcdG5ld3RwLVx1MDAzZXJldHJhbnNtaXRfc2tiX2hpbnQgPSBOVUxMO1xuK1x0bmV3dHAtXHUwMDNlaGlnaGVzdF9zYWNrID0gTlVMTDtcbiBcbiBcdG5ld3RwLVx1MDAzZWJwZl9jaGdfY2NfaW5wcm9ncmVzcyA9IDA7XG4gXHR0Y3BfYnBmX2Nsb25lKHNrLCBuZXdzayk7XG5AQCAtOTc0LDcgKzk4MSw3IEBAIHN0cnVjdCBzb2NrICp0Y3BfY2hlY2tfcmVxKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0dGNwX3Jlc2V0KHNrLCBza2IpO1xuIFx0fVxuIFx0aWYgKCFmYXN0b3Blbikge1xuLVx0XHRib29sIHVubGlua2VkID0gaW5ldF9jc2tfcmVxc2tfcXVldWVfZHJvcChzaywgcmVxKTtcbitcdFx0Ym9vbCB1bmxpbmtlZCA9IGluZXRfY3NrX3JlcXNrX3F1ZXVlX2Ryb3AocmVxLVx1MDAzZXJza19saXN0ZW5lciwgcmVxKTtcbiBcbiBcdFx0aWYgKHVubGlua2VkKVxuIFx0XHRcdF9fTkVUX0lOQ19TVEFUUyhzb2NrX25ldChzayksIExJTlVYX01JQl9FTUJSWU9OSUNSU1RTKTtcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9hZl9pbmV0Ni5jIGIvbmV0L2lwdjYvYWZfaW5ldDYuY1xuaW5kZXggMjgyOTEyYTExOTk5OS4uNjhiMzMwZjY5NDFkMCAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L2FmX2luZXQ2LmNcbisrKyBiL25ldC9pcHY2L2FmX2luZXQ2LmNcbkBAIC00NzksNiArNDc5LDEwIEBAIHZvaWQgaW5ldDZfY2xlYW51cF9zb2NrKHN0cnVjdCBzb2NrICpzaylcbiBcdHN0cnVjdCBza19idWZmICpza2I7XG4gXHRzdHJ1Y3QgaXB2Nl90eG9wdGlvbnMgKm9wdDtcbiBcbitcdC8qIEFGX0lORVQgY2hpbGQgb2YgYW4gSVBWNl9BRERSRk9STSdlZCBsaXN0ZW5lcjogbm90aGluZyBvZiBpdHMgb3duLiAqL1xuK1x0aWYgKCFucClcbitcdFx0cmV0dXJuO1xuK1xuIFx0LyogUmVsZWFzZSByeCBvcHRpb25zICovXG4gXG4gXHRza2IgPSB4Y2hnKFx1MDAyNm5wLVx1MDAzZXBrdG9wdGlvbnMsIE5VTEwpO1xuZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwdjZfc29ja2dsdWUuYyBiL25ldC9pcHY2L2lwdjZfc29ja2dsdWUuY1xuaW5kZXggYjRjOTc3NDM0YzJlMC4uNmQyZGQ5YWU0NmE5NiAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L2lwdjZfc29ja2dsdWUuY1xuKysrIGIvbmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jXG5AQCAtNTg3LDYgKzU4NywyMSBAQCBpbnQgZG9faXB2Nl9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdH1cbiBcbitcdFx0XHRpZiAoc2stXHUwMDNlc2tfcHJvdG9jb2wgPT0gSVBQUk9UT19UQ1ApIHtcbitcdFx0XHRcdGlmIChpbmV0X2Nza19yZXFza19xdWV1ZV9sZW4oc2spKSB7XG4rXHRcdFx0XHRcdHJldHYgPSAtRUJVU1k7XG4rXHRcdFx0XHRcdGJyZWFrO1xuK1x0XHRcdFx0fVxuK1x0XHRcdFx0LyogQSBTWU4gdGhhdCBmb3VuZCB0aGlzIHNvY2tldCB3aGlsZSBpdCB3YXNcbitcdFx0XHRcdCAqIHN0aWxsIGxpc3RlbmluZyBtYXkgbm90IGJlIGNvdW50ZWQgeWV0LlxuK1x0XHRcdFx0ICovXG4rXHRcdFx0XHRzeW5jaHJvbml6ZV9yY3UoKTtcbitcdFx0XHRcdGlmIChpbmV0X2Nza19yZXFza19xdWV1ZV9sZW4oc2spKSB7XG4rXHRcdFx0XHRcdHJldHYgPSAtRUJVU1k7XG4rXHRcdFx0XHRcdGJyZWFrO1xuK1x0XHRcdFx0fVxuK1x0XHRcdH1cbitcbiBcdFx0XHRfX2lwdjZfc29ja19tY19jbG9zZShzayk7XG4gXHRcdFx0X19pcHY2X3NvY2tfYWNfY2xvc2Uoc2spO1xuIFxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L3RjcF9pcHY2LmMgYi9uZXQvaXB2Ni90Y3BfaXB2Ni5jXG5pbmRleCA5ZTkxNTViMWIzYWE3Li5hMmRlZGE5YTQyNThiIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvdGNwX2lwdjYuY1xuKysrIGIvbmV0L2lwdjYvdGNwX2lwdjYuY1xuQEAgLTE1NTYsNyArMTU1Niw3IEBAIHN0YXRpYyBzdHJ1Y3Qgc29jayAqdGNwX3Y2X3N5bl9yZWN2X3NvY2soY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqXG4gSU5ESVJFQ1RfQ0FMTEFCTEVfREVDTEFSRShzdHJ1Y3QgZHN0X2VudHJ5ICppcHY0X2RzdF9jaGVjayhzdHJ1Y3QgZHN0X2VudHJ5ICosXG4gXHRcdFx0XHRcdFx0XHQgICB1MzIpKTtcbiAvKiBUaGUgc29ja2V0IG11c3QgaGF2ZSBpdCdzIHNwaW5sb2NrIGhlbGQgd2hlbiB3ZSBnZXRcbi0gKiBoZXJlLCB1bmxlc3MgaXQgaXMgYSBUQ1BfTElTVEVOIHNvY2tldC5cbisgKiBoZXJlLlxuICAqXG4gICogV2UgaGF2ZSBhIHBvdGVudGlhbCBkb3VibGUtbG9jayBjYXNlIGhlcmUsIHNvIGV2ZW4gd2hlblxuICAqIGRvaW5nIGJhY2tsb2cgcHJvY2Vzc2luZyB3ZSB1c2UgdGhlIEJIIGxvY2tpbmcgc2NoZW1lLlxuQEAgLTE3MDQsNiArMTcwNCw0NiBAQCBpbnQgdGNwX3Y2X2RvX3JjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rLyogQHNrIGlzIG5vdCBsb2NrZWQgaGVyZSBhbmQgY2FuIGxlYXZlIFRDUF9MSVNURU47IGRvIG5vdCB0ZXN0IHNrX3N0YXRlLiAqL1xuK3N0YXRpYyBub2lubGluZSBpbnQgdGNwX3Y2X3Jjdl9saXN0ZW4oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuK3tcbitcdGVudW0gc2tiX2Ryb3BfcmVhc29uIHJlYXNvbjtcbitcdHN0cnVjdCBzb2NrICpuc2s7XG4rXG4rXHRyZWFzb24gPSBwc3Bfc2tfcnhfcG9saWN5X2NoZWNrKHNrLCBza2IpO1xuK1x0aWYgKHJlYXNvbilcbitcdFx0Z290byBlcnJfZGlzY2FyZDtcbitcbitcdGlmICh0Y3BfY2hlY2tzdW1fY29tcGxldGUoc2tiKSlcbitcdFx0Z290byBjc3VtX2VycjtcbitcbitcdG5zayA9IHRjcF92Nl9jb29raWVfY2hlY2soc2ssIHNrYik7XG4rXHRpZiAoIW5zaylcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRpZiAobnNrICE9IHNrKSB7XG4rXHRcdHJlYXNvbiA9IHRjcF9jaGlsZF9wcm9jZXNzKHNrLCBuc2ssIHNrYik7XG4rXHRcdHNvY2tfcHV0KG5zayk7XG4rXHR9IGVsc2Uge1xuK1x0XHRyZWFzb24gPSB0Y3BfcmN2X2xpc3Rlbl9zdGF0ZV9wcm9jZXNzKHNrLCBza2IpO1xuK1x0fVxuK1x0aWYgKCFyZWFzb24pXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0dGNwX3Y2X3NlbmRfcmVzZXQoc2ssIHNrYiwgc2tfcnN0X2NvbnZlcnRfZHJvcF9yZWFzb24ocmVhc29uKSk7XG4rZGlzY2FyZDpcbitcdHNrX3NrYl9yZWFzb25fZHJvcChzaywgc2tiLCByZWFzb24pO1xuK1x0cmV0dXJuIDA7XG4rXG4rY3N1bV9lcnI6XG4rXHRyZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fVENQX0NTVU07XG4rXHR0cmFjZV90Y3BfYmFkX2NzdW0oc2tiKTtcbitcdFRDUF9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBUQ1BfTUlCX0NTVU1FUlJPUlMpO1xuK2Vycl9kaXNjYXJkOlxuK1x0VENQX0lOQ19TVEFUUyhzb2NrX25ldChzayksIFRDUF9NSUJfSU5FUlJTKTtcbitcdGdvdG8gZGlzY2FyZDtcbit9XG4rXG4gc3RhdGljIHZvaWQgdGNwX3Y2X2ZpbGxfY2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IGlwdjZoZHIgKmhkcixcbiBcdFx0XHQgICBjb25zdCBzdHJ1Y3QgdGNwaGRyICp0aClcbiB7XG5AQCAtMTg5MSw3ICsxOTMxLDcgQEAgSU5ESVJFQ1RfQ0FMTEFCTEVfU0NPUEUgaW50IHRjcF92Nl9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdHNrYi1cdTAwM2VkZXYgPSBOVUxMO1xuIFxuIFx0aWYgKHNrLVx1MDAzZXNrX3N0YXRlID09IFRDUF9MSVNURU4pIHtcbi1cdFx0cmV0ID0gdGNwX3Y2X2RvX3Jjdihzaywgc2tiKTtcbitcdFx0cmV0ID0gdGNwX3Y2X3Jjdl9saXN0ZW4oc2ssIHNrYik7XG4gXHRcdGdvdG8gcHV0X2FuZF9yZXR1cm47XG4gXHR9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwNDozNzo0Ni45MjUxODE4MDVaIiwiU2VxIjoxNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMyMzUyNzczMzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQXNzZXNzbWVudDogVGhpcyBQYXRjaCBEb2Vzbid0IFdhcnJhbnQgSXQqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoaXMgcGF0Y2guIEl0J3MgbW9kaWZ5aW5nIFRDUCBzb2NrZXQgaGFuZGxpbmcsIGVzcGVjaWFsbHkgYXJvdW5kIHRoZSBgVENQX0xJU1RFTmAgc3RhdGUgYW5kIHNvY2tldCBjbG9uaW5nLiBJbml0aWFsbHksIEkgdGhvdWdodCB0aGlzIG1pZ2h0IGJlIGEgS01TQU4gY2FuZGlkYXRlLCBidXQgYWZ0ZXIgYSBkZWVwIGRpdmUsIEknbSBwcmV0dHkgY29uZmlkZW50IGl0J3Mgbm90LlxuXG5UaGUgcGF0Y2gncyBjb3JlIGNoYW5nZSBpcyB0byBtYWtlIHRoZSBUQ1AgbGlzdGVuZXIgcHJvY2Vzc2luZyBsb2NrbGVzcywgcHVsbGluZyB0aGUgbG9naWMgb3V0IGludG8gYHRjcF92NF9yY3ZfbGlzdGVuYCBhbmQgYHRjcF92Nl9yY3ZfbGlzdGVuYC4gVGhhdCdzIGEgaHVnZSBzaGlmdCDigJMgaXQncyBhbGwgYWJvdXQgY29uY3VycmVuY3kgbm93LiBUaGUgYmlnIGRlYWwgaGVyZSBpcyB0aGUgcG90ZW50aWFsIGZvciByYWNlIGNvbmRpdGlvbnMgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyBiZWNhdXNlIHdlJ3JlIHRha2luZyBhd2F5IHRoYXQgbG9jayBwcm90ZWN0aW9uLiBIb3dldmVyLCB0aGVzZSBhcmUgcHJlY2lzZWx5IHRoZSBraW5kcyBvZiB0aGluZ3MgS0NTQU4gKGRhdGEgcmFjZXMpIGFuZCBLQVNBTiAoVUFGLCBtZW1vcnkgY29ycnVwdGlvbikgYXJlIGJ1aWx0IHRvIGNhdGNoLiBLTVNBTiBpc24ndCB0aGUgcmlnaHQgdG9vbCBmb3IgdGhvc2UgdHlwZXMgb2YgY29uY3VycmVuY3kgaXNzdWVzLlxuXG5UaGVyZSBhcmUgYWxzbyBzZXZlcmFsIGNoYW5nZXMgcmVsYXRlZCB0byBzb2NrZXQgY2xvbmluZyAoYHNrX2Nsb25lYCBhbmQgYHRjcF9jcmVhdGVfb3BlbnJlcV9jaGlsZGApLCBtYWtpbmcgc3VyZSBjZXJ0YWluIGZpZWxkcyBhcmUgcmVzZXQgd2hlbiBhIG5ldyBzb2NrZXQgaXMgY3JlYXRlZCBmcm9tIHRoZSBsaXN0ZW5lciBzb2NrZXQuIEkgd2FzIGNvbmNlcm5lZCBhYm91dCB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiB0aGUgY2xvbmVkIHNvY2tldCwgYnV0IHRoYXQncyBub3QgdGhlIGNhc2UuIFRoZSBgc29ja19jb3B5YCBmdW5jdGlvbiAqZnVsbHkqIGNvcGllcyB0aGUgcGFyZW50IHNvY2tldCdzIGRhdGEgdXNpbmcgYG1lbWNweWAuIFRoZSBwYXRjaCBpcyBzaW1wbHkgcmVzZXR0aW5nIHNvbWUgb2YgdGhlc2UgZmllbGRzIChsaWtlIGBza190c3FfZmxhZ3NgLCBgcGFja2V0c19vdXRgLCBhbmQgYHBpbmV0NmApIHRvIHRoZWlyIGluaXRpYWwgemVybyBzdGF0ZSBpbiB0aGUgY2hpbGQgc29ja2V0LiBJdCdzIGFib3V0IHByZXZlbnRpbmcgdGhlIGNoaWxkIHNvY2tldCBmcm9tIGluaGVyaXRpbmcgcG90ZW50aWFsbHkgc3RhbGUgb3IgaW5jb3JyZWN0IHZhbHVlcyBmcm9tIHRoZSBwYXJlbnQsIG5vdCBhYm91dCBkZWFsaW5nIHdpdGggdW5pbml0aWFsaXplZCBtZW1vcnkuIFNvLCB0aGlzIGlzbid0IGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlOyBpdCdzIGEgbG9naWMgYnVnIGZpeCwgb3IgYSBkZWZlbnNpdmUgbWVhc3VyZS5cblxuRmluYWxseSwgdGhlIGZpeCBmb3IgYElQVjZfQUREUkZPUk1gIGFuZCB0aGUgYWRqdXN0bWVudHMgaW4gYGRvX2lwdjZfc2V0c29ja29wdGAgc3BlY2lmaWNhbGx5IHNhZmVndWFyZCBhZ2FpbnN0IHBvdGVudGlhbCBkb3VibGUtZnJlZSBvciB1c2UtYWZ0ZXItZnJlZSBidWdzIHJlbGF0ZWQgdG8gYHBpbmV0NmAuIFRoaXMgZmFsbHMgc3F1YXJlbHkgd2l0aGluIEtBU0FOJ3MgZGV0ZWN0aW9uIGNhcGFiaWxpdGllcy4gQWxzbywgYGRvX2lwdjZfc2V0c29ja29wdGAgc2VlbXMgdG8gYmUgcHJldmVudGluZyBzb2NrZXQgb3B0aW9ucyBmcm9tIGJlaW5nIGNoYW5nZWQgZHVyaW5nIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCwgbGlrZWx5IHRvIHByZXZlbnQgbW9yZSBwb3RlbnRpYWwgYnVncy5cblxuSW4gY29uY2x1c2lvbiwgbm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGludHJvZHVjZSwgbm9yIGV4cG9zZSwgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIFRoZSBwYXRjaCBmb2N1c2VzIG9uIGNvbmN1cnJlbmN5IChLQ1NBTi9LQVNBTikgYW5kIGNvcnJlY3RpbmcgbG9naWMvZGF0YSBmbG93IGlzc3VlcyBkdXJpbmcgY2xvbmluZyBhbmQgc3RhdGUgaW5oZXJpdGFuY2UgKEtBU0FOKS4gR2l2ZW4gdGhlIFwicnVsZXNcIiBmb3IgZGV0ZXJtaW5pbmcgd2hldGhlciB0byBpbmNsdWRlIEtNU0FOIGluIHRlc3RpbmcsIHRoaXMgc2VlbXMgdG8gYmUgYSBoYXJkIFwibm9cIi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjU1MSwiT3V0cHV0VG9rZW5zIjoyOTMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDg0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDQ6Mzg6MjAuMTYwNDYzMzk1WiIsIlNlcSI6MTYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQyNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbXBsZW1lbnRzIGxvY2tsZXNzIFRDUCBsaXN0ZW5lciBwcm9jZXNzaW5nIGFuZCBmaXhlcyBzZXZlcmFsIGlzc3VlcyByZWxhdGVkIHRvIHNvY2tldCBjbG9uaW5nIGFuZCBzdGF0ZSBpbmhlcml0YW5jZSAoZS5nLiwgcmVzZXR0aW5nIGBza190c3FfZmxhZ3NgLCBgcGFja2V0c19vdXRgLCBhbmQgYHBpbmV0NmAgaW4gY2xvbmVkIHNvY2tldHMpLiBcXG5cXG4xLiBUaGUgZmllbGRzIGJlaW5nIGV4cGxpY2l0bHkgemVyb2VkIG9yIHNldCB0byBOVUxMIGluIGBza19jbG9uZWAgYW5kIGB0Y3BfY3JlYXRlX29wZW5yZXFfY2hpbGRgIGRvIG5vdCByZXByZXNlbnQgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXkgYXJlIGFscmVhZHkgZnVsbHkgaW5pdGlhbGl6ZWQgdmlhIGBzb2NrX2NvcHlgICh3aGljaCBjb3BpZXMgdGhlIHBhcmVudCBzb2NrZXQncyBzdGF0ZSkuIFRoZSBjaGFuZ2VzIG1lcmVseSBwcmV2ZW50IHRoZSBjaGlsZCBzb2NrZXQgZnJvbSBpbmhlcml0aW5nIHN0YWxlIG9yIGluY29ycmVjdCB2YWx1ZXMgZnJvbSB0aGUgbGlzdGVuZXIuXFxuMi4gVGhlIGxvY2tsZXNzIGxpc3RlbmVyIHByb2Nlc3NpbmcgKGB0Y3BfdjRfcmN2X2xpc3RlbmApIGludHJvZHVjZXMgY29uY3VycmVuY3kgY2hhbmdlcy4gQW55IHJlc3VsdGluZyBidWdzIHdvdWxkIGJlIGRhdGEgcmFjZXMgKGNhdWdodCBieSBLQ1NBTikgb3IgdXNlLWFmdGVyLWZyZWUvbWVtb3J5IGNvcnJ1cHRpb24gKGNhdWdodCBieSBLQVNBTikuXFxuMy4gVGhlIGBJUFY2X0FERFJGT1JNYCBhbmQgYGRvX2lwdjZfc2V0c29ja29wdGAgY2hhbmdlcyBhZGRyZXNzIGxvZ2ljIGJ1Z3MgYW5kIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpb3MsIHdoaWNoIGFyZSB3ZWxsIHdpdGhpbiB0aGUgZG9tYWluIG9mIEtBU0FOLlxcblxcblRoZXJlIGFyZSBubyBuZXcgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vIG5ldyBhbGxvY2F0aW9ucyBsZWZ0IHVuaW5pdGlhbGl6ZWQsIGFuZCBubyBjaGFuZ2VzIHRvIGJvdW5kcyBjaGVja2luZyB0aGF0IHdvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbXBsZW1lbnRzIGxvY2tsZXNzIFRDUCBsaXN0ZW5lciBwcm9jZXNzaW5nIGFuZCBmaXhlcyBzZXZlcmFsIGlzc3VlcyByZWxhdGVkIHRvIHNvY2tldCBjbG9uaW5nIGFuZCBzdGF0ZSBpbmhlcml0YW5jZSAoZS5nLiwgcmVzZXR0aW5nIGBza190c3FfZmxhZ3NgLCBgcGFja2V0c19vdXRgLCBhbmQgYHBpbmV0NmAgaW4gY2xvbmVkIHNvY2tldHMpLiBcXG5cXG4xLiBUaGUgZmllbGRzIGJlaW5nIGV4cGxpY2l0bHkgemVyb2VkIG9yIHNldCB0byBOVUxMIGluIGBza19jbG9uZWAgYW5kIGB0Y3BfY3JlYXRlX29wZW5yZXFfY2hpbGRgIGRvIG5vdCByZXByZXNlbnQgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXkgYXJlIGFscmVhZHkgZnVsbHkgaW5pdGlhbGl6ZWQgdmlhIGBzb2NrX2NvcHlgICh3aGljaCBjb3BpZXMgdGhlIHBhcmVudCBzb2NrZXQncyBzdGF0ZSkuIFRoZSBjaGFuZ2VzIG1lcmVseSBwcmV2ZW50IHRoZSBjaGlsZCBzb2NrZXQgZnJvbSBpbmhlcml0aW5nIHN0YWxlIG9yIGluY29ycmVjdCB2YWx1ZXMgZnJvbSB0aGUgbGlzdGVuZXIuXFxuMi4gVGhlIGxvY2tsZXNzIGxpc3RlbmVyIHByb2Nlc3NpbmcgKGB0Y3BfdjRfcmN2X2xpc3RlbmApIGludHJvZHVjZXMgY29uY3VycmVuY3kgY2hhbmdlcy4gQW55IHJlc3VsdGluZyBidWdzIHdvdWxkIGJlIGRhdGEgcmFjZXMgKGNhdWdodCBieSBLQ1NBTikgb3IgdXNlLWFmdGVyLWZyZWUvbWVtb3J5IGNvcnJ1cHRpb24gKGNhdWdodCBieSBLQVNBTikuXFxuMy4gVGhlIGBJUFY2X0FERFJGT1JNYCBhbmQgYGRvX2lwdjZfc2V0c29ja29wdGAgY2hhbmdlcyBhZGRyZXNzIGxvZ2ljIGJ1Z3MgYW5kIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpb3MsIHdoaWNoIGFyZSB3ZWxsIHdpdGhpbiB0aGUgZG9tYWluIG9mIEtBU0FOLlxcblxcblRoZXJlIGFyZSBubyBuZXcgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vIG5ldyBhbGxvY2F0aW9ucyBsZWZ0IHVuaW5pdGlhbGl6ZWQsIGFuZCBubyBjaGFuZ2VzIHRvIGJvdW5kcyBjaGVja2luZyB0aGF0IHdvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowvp7s2[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-24 03:51:02 +0000 UTC FinishedAt: 2026-08-24 04:38:21 +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": "6776efe4a52f289a3fc18f8adf19b035a7d8e1bb", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IPV6" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "6776efe4a52f289a3fc18f8adf19b035a7d8e1bb", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IPV6" ], "series_id": "e7e0bb8d-bf58-45bd-933a-214f06568d18" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "tcp_rcv_listen_state_process", "do_ipv6_setsockopt" ], "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+CgkJCTx0ZD4yMDI2LzA4LzI0IDA0OjM3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0Y3BfcmN2X2xpc3Rlbl9zdGF0ZV9wcm9jZXNzJiMzNDssCiAgICAmIzM0O2RvX2lwdjZfc2V0c29ja29wdCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGltcGxlbWVudHMgbG9ja2xlc3MgVENQIGxpc3RlbmVyIHByb2Nlc3NpbmcgYW5kIGZpeGVzIHNldmVyYWwgaXNzdWVzIHJlbGF0ZWQgdG8gc29ja2V0IGNsb25pbmcgYW5kIHN0YXRlIGluaGVyaXRhbmNlIChlLmcuLCByZXNldHRpbmcgYHNrX3RzcV9mbGFnc2AsIGBwYWNrZXRzX291dGAsIGFuZCBgcGluZXQ2YCBpbiBjbG9uZWQgc29ja2V0cykuIFxuXG4xLiBUaGUgZmllbGRzIGJlaW5nIGV4cGxpY2l0bHkgemVyb2VkIG9yIHNldCB0byBOVUxMIGluIGBza19jbG9uZWAgYW5kIGB0Y3BfY3JlYXRlX29wZW5yZXFfY2hpbGRgIGRvIG5vdCByZXByZXNlbnQgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXkgYXJlIGFscmVhZHkgZnVsbHkgaW5pdGlhbGl6ZWQgdmlhIGBzb2NrX2NvcHlgICh3aGljaCBjb3BpZXMgdGhlIHBhcmVudCBzb2NrZXQmIzM5O3Mgc3RhdGUpLiBUaGUgY2hhbmdlcyBtZXJlbHkgcHJldmVudCB0aGUgY2hpbGQgc29ja2V0IGZyb20gaW5oZXJpdGluZyBzdGFsZSBvciBpbmNvcnJlY3QgdmFsdWVzIGZyb20gdGhlIGxpc3RlbmVyLlxuMi4gVGhlIGxvY2tsZXNzIGxpc3RlbmVyIHByb2Nlc3NpbmcgKGB0Y3BfdjRfcmN2X2xpc3RlbmApIGludHJvZHVjZXMgY29uY3VycmVuY3kgY2hhbmdlcy4gQW55IHJlc3VsdGluZyBidWdzIHdvdWxkIGJlIGRhdGEgcmFjZXMgKGNhdWdodCBieSBLQ1NBTikgb3IgdXNlLWFmdGVyLWZyZWUvbWVtb3J5IGNvcnJ1cHRpb24gKGNhdWdodCBieSBLQVNBTikuXG4zLiBUaGUgYElQVjZfQUREUkZPUk1gIGFuZCBgZG9faXB2Nl9zZXRzb2Nrb3B0YCBjaGFuZ2VzIGFkZHJlc3MgbG9naWMgYnVncyBhbmQgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvcywgd2hpY2ggYXJlIHdlbGwgd2l0aGluIHRoZSBkb21haW4gb2YgS0FTQU4uXG5cblRoZXJlIGFyZSBubyBuZXcgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vIG5ldyBhbGxvY2F0aW9ucyBsZWZ0IHVuaW5pdGlhbGl6ZWQsIGFuZCBubyBjaGFuZ2VzIHRvIGJvdW5kcyBjaGVja2luZyB0aGF0IHdvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgVENQIGxpc3RlbmluZyBzb2NrZXQgcGFja2V0IHByb2Nlc3NpbmcgYnkgaW50cm9kdWNpbmcgYHRjcF9yY3ZfbGlzdGVuX3N0YXRlX3Byb2Nlc3NgIGFuZCBsb2NrbGVzcyBsaXN0ZW4gcmVjZWl2ZSBwYXRocyAoYHRjcF92NF9yY3ZfbGlzdGVuYCwgYHRjcF92Nl9yY3ZfbGlzdGVuYCkuIEl0IGFsc28gYWRkcyBjaGVja3MgaW4gYGRvX2lwdjZfc2V0c29ja29wdGAgZm9yIGBJUFY2X0FERFJGT1JNYCBvbiBUQ1Agc29ja2V0cyB3aXRoIHBlbmRpbmcgY29ubmVjdGlvbiByZXF1ZXN0cy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgY29yZSBUQ1Agc3RhY2sgYW5kIElQdjYgc29ja2V0IG9wdGlvbnMsIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgYW5kIG5ldHdvcmsgdHJhZmZpYywgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDQ6Mzc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA4Y2U1ZDU2YzA2Zjk2ODZlMzk4Y2VhNzc4OWU1MTVmYmYzMWI1YWQ4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMjQgMDQ6Mzc6MTEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvdGNwLmggYi9pbmNsdWRlL25ldC90Y3AuaFxuaW5kZXggMmM1Yjg4OTUzMGI1NS4uYWRkNDM4ZDY1NjFiZSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L3RjcC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC90Y3AuaFxuQEAgLTM5Miw2ICYjNDM7MzkyLDggQEAgdm9pZCB0Y3Bfd3JpdGVfdGltZXJfaGFuZGxlcihzdHJ1Y3Qgc29jayAqc2spO1xuIHZvaWQgdGNwX2RlbGFja190aW1lcl9oYW5kbGVyKHN0cnVjdCBzb2NrICpzayk7XG4gaW50IHRjcF9pb2N0bChzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIGludCAqa2FyZyk7XG4gZW51bSBza2JfZHJvcF9yZWFzb24gdGNwX3Jjdl9zdGF0ZV9wcm9jZXNzKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG4mIzQzO2VudW0gc2tiX2Ryb3BfcmVhc29uIHRjcF9yY3ZfbGlzdGVuX3N0YXRlX3Byb2Nlc3Moc3RydWN0IHNvY2sgKnNrLFxuJiM0MztcdFx0XHRcdFx0XHQgIHN0cnVjdCBza19idWZmICpza2IpO1xuIHZvaWQgdGNwX3Jjdl9lc3RhYmxpc2hlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpO1xuIHZvaWQgdGNwX3JjdmJ1Zl9ncm93KHN0cnVjdCBzb2NrICpzaywgdTMyIG5ld3ZhbCk7XG4gdm9pZCB0Y3BfcmN2X3NwYWNlX2FkanVzdChzdHJ1Y3Qgc29jayAqc2spO1xuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NvY2suYyBiL25ldC9jb3JlL3NvY2suY1xuaW5kZXggMWFkNDE5MDRkYjI1Yi4uMDZmYmIxOTgyNGUyNiAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL3NvY2suY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvc29jay5jXG5AQCAtMjQ3OSw3ICYjNDM7MjQ3OSw3IEBAIHN0YXRpYyB2b2lkIHNrX2luaXRfY29tbW9uKHN0cnVjdCBzb2NrICpzaylcbiBzdHJ1Y3Qgc29jayAqc2tfY2xvbmUoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBjb25zdCBnZnBfdCBwcmlvcml0eSxcbiBcdFx0ICAgICAgYm9vbCBsb2NrKVxuIHtcbi1cdHN0cnVjdCBwcm90byAqcHJvdCA9IFJFQURfT05DRShzay1cdTAwM2Vza19wcm90KTtcbiYjNDM7XHRzdHJ1Y3QgcHJvdG8gKnByb3QgPSBzay1cdTAwM2Vza19wcm90X2NyZWF0b3I7XG4gXHRzdHJ1Y3Qgc2tfZmlsdGVyICpmaWx0ZXI7XG4gXHRib29sIGlzX2NoYXJnZWQgPSB0cnVlO1xuIFx0c3RydWN0IHNvY2sgKm5ld3NrO1xuQEAgLTI1MzMsNiAmIzQzOzI1MzMsNyBAQCBzdHJ1Y3Qgc29jayAqc2tfY2xvbmUoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBjb25zdCBnZnBfdCBwcmlvcml0eSxcbiBcdG5ld3NrLVx1MDAzZXNrX3Jlc2VydmVkX21lbSAgPSAwO1xuIFx0REVCVUdfTkVUX1dBUk5fT05fT05DRShuZXdzay1cdTAwM2Vza19kcm9wX2NvdW50ZXJzKTtcbiBcdHNrX2Ryb3BzX3Jlc2V0KG5ld3NrKTtcbiYjNDM7XHRuZXdzay1cdTAwM2Vza190c3FfZmxhZ3NcdD0gMDtcbiBcdG5ld3NrLVx1MDAzZXNrX3NlbmRfaGVhZFx0PSBOVUxMO1xuIFx0bmV3c2stXHUwMDNlc2tfdXNlcmxvY2tzXHQ9IHNrLVx1MDAzZXNrX3VzZXJsb2NrcyBcdTAwMjYgflNPQ0tfQklORFBPUlRfTE9DSztcbiBcdGF0b21pY19zZXQoXHUwMDI2bmV3c2stXHUwMDNlc2tfemNrZXksIDApO1xuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9pbnB1dC5jIGIvbmV0L2lwdjQvdGNwX2lucHV0LmNcbmluZGV4IDBmNjBhMWRiZjkyNzQuLjc3YWYxOGZiYTY2YjQgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC90Y3BfaW5wdXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvdGNwX2lucHV0LmNcbkBAIC03MTQxLDYgJiM0Mzs3MTQxLDQyIEBAIHN0YXRpYyB2b2lkIHRjcF9yY3Zfc3lucmVjdl9zdGF0ZV9mYXN0b3BlbihzdHJ1Y3Qgc29jayAqc2spXG4gXHR0Y3BfcmVhcm1fcnRvKHNrKTtcbiB9XG4gXG4mIzQzO2VudW0gc2tiX2Ryb3BfcmVhc29uIHRjcF9yY3ZfbGlzdGVuX3N0YXRlX3Byb2Nlc3Moc3RydWN0IHNvY2sgKnNrLFxuJiM0MztcdFx0XHRcdFx0XHQgIHN0cnVjdCBza19idWZmICpza2IpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgdGNwaGRyICp0aCA9IHRjcF9oZHIoc2tiKTtcbiYjNDM7XHRTS0JfRFIocmVhc29uKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHRoLVx1MDAzZWFjaylcbiYjNDM7XHRcdHJldHVybiBTS0JfRFJPUF9SRUFTT05fVENQX0ZMQUdTO1xuJiM0MztcbiYjNDM7XHRpZiAodGgtXHUwMDNlcnN0KSB7XG4mIzQzO1x0XHRTS0JfRFJfU0VUKHJlYXNvbiwgVENQX1JFU0VUKTtcbiYjNDM7XHRcdGdvdG8gZGlzY2FyZDtcbiYjNDM7XHR9XG4mIzQzO1x0aWYgKHRoLVx1MDAzZXN5bikge1xuJiM0MztcdFx0aWYgKHRoLVx1MDAzZWZpbikge1xuJiM0MztcdFx0XHRTS0JfRFJfU0VUKHJlYXNvbiwgVENQX0ZMQUdTKTtcbiYjNDM7XHRcdFx0Z290byBkaXNjYXJkO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0LyogSXQgaXMgcG9zc2libGUgdGhhdCB3ZSBwcm9jZXNzIFNZTiBwYWNrZXRzIGZyb20gYmFja2xvZyxcbiYjNDM7XHRcdCAqIHNvIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRvIGRpc2FibGUgQkggYW5kIFJDVSByaWdodCB0aGVyZS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0cmN1X3JlYWRfbG9jaygpO1xuJiM0MztcdFx0bG9jYWxfYmhfZGlzYWJsZSgpO1xuJiM0MztcdFx0aW5ldF9jc2soc2spLVx1MDAzZWljc2tfYWZfb3BzLVx1MDAzZWNvbm5fcmVxdWVzdChzaywgc2tiKTtcbiYjNDM7XHRcdGxvY2FsX2JoX2VuYWJsZSgpO1xuJiM0MztcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4mIzQzO1xuJiM0MztcdFx0Y29uc3VtZV9za2Ioc2tiKTtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XHRTS0JfRFJfU0VUKHJlYXNvbiwgVENQX0ZMQUdTKTtcbiYjNDM7ZGlzY2FyZDpcbiYjNDM7XHR0Y3BfZHJvcF9yZWFzb24oc2ssIHNrYiwgcmVhc29uKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiAvKlxuICAqXHRUaGlzIGZ1bmN0aW9uIGltcGxlbWVudHMgdGhlIHJlY2VpdmluZyBwcm9jZWR1cmUgb2YgUkZDIDc5MyBmb3JcbiAgKlx0YWxsIHN0YXRlcyBleGNlcHQgRVNUQUJMSVNIRUQgYW5kIFRJTUVfV0FJVC5cbkBAIC03MTUyLDcgJiM0Mzs3MTg4LDYgQEAgZW51bSBza2JfZHJvcF9yZWFzb25cbiB0Y3BfcmN2X3N0YXRlX3Byb2Nlc3Moc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbiBcdHN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spO1xuLVx0c3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xuIFx0Y29uc3Qgc3RydWN0IHRjcGhkciAqdGggPSB0Y3BfaGRyKHNrYik7XG4gXHRzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXE7XG4gXHRpbnQgcXVldWVkID0gMDtcbkBAIC03MTY0LDMyICYjNDM7NzE5OSw3IEBAIHRjcF9yY3Zfc3RhdGVfcHJvY2VzcyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRcdGdvdG8gZGlzY2FyZDtcbiBcbiBcdGNhc2UgVENQX0xJU1RFTjpcbi1cdFx0aWYgKHRoLVx1MDAzZWFjaylcbi1cdFx0XHRyZXR1cm4gU0tCX0RST1BfUkVBU09OX1RDUF9GTEFHUztcbi1cbi1cdFx0aWYgKHRoLVx1MDAzZXJzdCkge1xuLVx0XHRcdFNLQl9EUl9TRVQocmVhc29uLCBUQ1BfUkVTRVQpO1xuLVx0XHRcdGdvdG8gZGlzY2FyZDtcbi1cdFx0fVxuLVx0XHRpZiAodGgtXHUwMDNlc3luKSB7XG4tXHRcdFx0aWYgKHRoLVx1MDAzZWZpbikge1xuLVx0XHRcdFx0U0tCX0RSX1NFVChyZWFzb24sIFRDUF9GTEFHUyk7XG4tXHRcdFx0XHRnb3RvIGRpc2NhcmQ7XG4tXHRcdFx0fVxuLVx0XHRcdC8qIEl0IGlzIHBvc3NpYmxlIHRoYXQgd2UgcHJvY2VzcyBTWU4gcGFja2V0cyBmcm9tIGJhY2tsb2csXG4tXHRcdFx0ICogc28gd2UgbmVlZCB0byBtYWtlIHN1cmUgdG8gZGlzYWJsZSBCSCBhbmQgUkNVIHJpZ2h0IHRoZXJlLlxuLVx0XHRcdCAqL1xuLVx0XHRcdHJjdV9yZWFkX2xvY2soKTtcbi1cdFx0XHRsb2NhbF9iaF9kaXNhYmxlKCk7XG4tXHRcdFx0aWNzay1cdTAwM2VpY3NrX2FmX29wcy1cdTAwM2Vjb25uX3JlcXVlc3Qoc2ssIHNrYik7XG4tXHRcdFx0bG9jYWxfYmhfZW5hYmxlKCk7XG4tXHRcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4tXG4tXHRcdFx0Y29uc3VtZV9za2Ioc2tiKTtcbi1cdFx0XHRyZXR1cm4gMDtcbi1cdFx0fVxuLVx0XHRTS0JfRFJfU0VUKHJlYXNvbiwgVENQX0ZMQUdTKTtcbi1cdFx0Z290byBkaXNjYXJkO1xuJiM0MztcdFx0cmV0dXJuIHRjcF9yY3ZfbGlzdGVuX3N0YXRlX3Byb2Nlc3Moc2ssIHNrYik7XG4gXG4gXHRjYXNlIFRDUF9TWU5fU0VOVDpcbiBcdFx0dHAtXHUwMDNlcnhfb3B0LnNhd190c3RhbXAgPSAwO1xuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9pcHY0LmMgYi9uZXQvaXB2NC90Y3BfaXB2NC5jXG5pbmRleCAxOTBjN2FmNGNmOTIzLi4yZmE4OTU4MzgwYTViIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvdGNwX2lwdjQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvdGNwX2lwdjQuY1xuQEAgLTE3MTQsNiAmIzQzOzE3MTQsMTQgQEAgc3RydWN0IHNvY2sgKnRjcF92NF9zeW5fcmVjdl9zb2NrKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0aW5ldF9jc2sobmV3c2spLVx1MDAzZWljc2tfZXh0X2hkcl9sZW4gPSBpbmV0X29wdC1cdTAwM2VvcHQub3B0bGVuO1xuIFx0YXRvbWljX3NldChcdTAwMjZuZXdpbmV0LVx1MDAzZWluZXRfaWQsIGdldF9yYW5kb21fdTE2KCkpO1xuIFxuJiM0MzsjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbiYjNDM7XHQvKiBOZXZlciBpbmhlcml0IHRoZSBsaXN0ZW5lciYjMzk7cyBpcHY2X3BpbmZvOyBJUFY2X0FERFJGT1JNIGxlYXZlcyBpdCBzZXRcbiYjNDM7XHQgKiBvbiBhbiBBRl9JTkVUIHNvY2tldC4gIHRjcF92Nl9tYXBwZWRfY2hpbGRfaW5pdCgpIGluc3RhbGxzIG91ciBvd24uXG4mIzQzO1x0ICovXG4mIzQzO1x0bmV3aW5ldC1cdTAwM2VwaW5ldDYgPSBOVUxMO1xuJiM0MztcdG5ld2luZXQtXHUwMDNlaXB2Nl9mbF9saXN0ID0gTlVMTDtcbiYjNDM7I2VuZGlmXG4mIzQzO1xuIFx0LyogU2V0IFRvUyBvZiB0aGUgbmV3IHNvY2tldCBiYXNlZCB1cG9uIHRoZSB2YWx1ZSBvZiBpbmNvbWluZyBTWU4uXG4gXHQgKiBFQ1QgYml0cyBhcmUgc2V0IGxhdGVyIGluIHRjcF9pbml0X3RyYW5zZmVyKCkuXG4gXHQgKi9cbkBAIC0xODIwLDcgJiM0MzsxODI4LDcgQEAgdTE2IHRjcF92NF9nZXRfc3luY29va2llKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGlwaGRyICppcGgsXG4gSU5ESVJFQ1RfQ0FMTEFCTEVfREVDTEFSRShzdHJ1Y3QgZHN0X2VudHJ5ICppcHY0X2RzdF9jaGVjayhzdHJ1Y3QgZHN0X2VudHJ5ICosXG4gXHRcdFx0XHRcdFx0XHQgICB1MzIpKTtcbiAvKiBUaGUgc29ja2V0IG11c3QgaGF2ZSBpdCYjMzk7cyBzcGlubG9jayBoZWxkIHdoZW4gd2UgZ2V0XG4tICogaGVyZSwgdW5sZXNzIGl0IGlzIGEgVENQX0xJU1RFTiBzb2NrZXQuXG4mIzQzOyAqIGhlcmUuXG4gICpcbiAgKiBXZSBoYXZlIGEgcG90ZW50aWFsIGRvdWJsZS1sb2NrIGNhc2UgaGVyZSwgc28gZXZlbiB3aGVuXG4gICogZG9pbmcgYmFja2xvZyBwcm9jZXNzaW5nIHdlIHVzZSB0aGUgQkggbG9ja2luZyBzY2hlbWUuXG5AQCAtMTg5OCw2ICYjNDM7MTkwNiw0NiBAQCBpbnQgdGNwX3Y0X2RvX3JjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRnb3RvIGRpc2NhcmQ7XG4gfVxuIFxuJiM0MzsvKiBAc2sgaXMgbm90IGxvY2tlZCBoZXJlIGFuZCBjYW4gbGVhdmUgVENQX0xJU1RFTjsgZG8gbm90IHRlc3Qgc2tfc3RhdGUuICovXG4mIzQzO3N0YXRpYyBub2lubGluZSBpbnQgdGNwX3Y0X3Jjdl9saXN0ZW4oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuJiM0Mzt7XG4mIzQzO1x0ZW51bSBza2JfZHJvcF9yZWFzb24gcmVhc29uO1xuJiM0MztcdHN0cnVjdCBzb2NrICpuc2s7XG4mIzQzO1xuJiM0MztcdHJlYXNvbiA9IHBzcF9za19yeF9wb2xpY3lfY2hlY2soc2ssIHNrYik7XG4mIzQzO1x0aWYgKHJlYXNvbilcbiYjNDM7XHRcdGdvdG8gZXJyX2Rpc2NhcmQ7XG4mIzQzO1xuJiM0MztcdGlmICh0Y3BfY2hlY2tzdW1fY29tcGxldGUoc2tiKSlcbiYjNDM7XHRcdGdvdG8gY3N1bV9lcnI7XG4mIzQzO1xuJiM0MztcdG5zayA9IHRjcF92NF9jb29raWVfY2hlY2soc2ssIHNrYik7XG4mIzQzO1x0aWYgKCFuc2spXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKG5zayAhPSBzaykge1xuJiM0MztcdFx0cmVhc29uID0gdGNwX2NoaWxkX3Byb2Nlc3Moc2ssIG5zaywgc2tiKTtcbiYjNDM7XHRcdHNvY2tfcHV0KG5zayk7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdHJlYXNvbiA9IHRjcF9yY3ZfbGlzdGVuX3N0YXRlX3Byb2Nlc3Moc2ssIHNrYik7XG4mIzQzO1x0fVxuJiM0MztcdGlmICghcmVhc29uKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdHRjcF92NF9zZW5kX3Jlc2V0KHNrLCBza2IsIHNrX3JzdF9jb252ZXJ0X2Ryb3BfcmVhc29uKHJlYXNvbikpO1xuJiM0MztkaXNjYXJkOlxuJiM0MztcdHNrX3NrYl9yZWFzb25fZHJvcChzaywgc2tiLCByZWFzb24pO1xuJiM0MztcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7Y3N1bV9lcnI6XG4mIzQzO1x0cmVhc29uID0gU0tCX0RST1BfUkVBU09OX1RDUF9DU1VNO1xuJiM0MztcdHRyYWNlX3RjcF9iYWRfY3N1bShza2IpO1xuJiM0MztcdFRDUF9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBUQ1BfTUlCX0NTVU1FUlJPUlMpO1xuJiM0MztlcnJfZGlzY2FyZDpcbiYjNDM7XHRUQ1BfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgVENQX01JQl9JTkVSUlMpO1xuJiM0MztcdGdvdG8gZGlzY2FyZDtcbiYjNDM7fVxuJiM0MztcbiBlbnVtIHNrYl9kcm9wX3JlYXNvbiB0Y3BfYWRkX2JhY2tsb2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbiBcdHUzMiB0YWlsX2dzb19zaXplLCB0YWlsX2dzb19zZWdzO1xuQEAgLTIyMzUsNyAmIzQzOzIyODMsNyBAQCBpbnQgdGNwX3Y0X3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0c2tiLVx1MDAzZWRldiA9IE5VTEw7XG4gXG4gXHRpZiAoc2stXHUwMDNlc2tfc3RhdGUgPT0gVENQX0xJU1RFTikge1xuLVx0XHRyZXQgPSB0Y3BfdjRfZG9fcmN2KHNrLCBza2IpO1xuJiM0MztcdFx0cmV0ID0gdGNwX3Y0X3Jjdl9saXN0ZW4oc2ssIHNrYik7XG4gXHRcdGdvdG8gcHV0X2FuZF9yZXR1cm47XG4gXHR9XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jIGIvbmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jXG5pbmRleCAxMjI1NGU2ZWIyZjM0Li4yZmRlMTk2ZGQzMDJmIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmNcbkBAIC01OTEsNiAmIzQzOzU5MSw3IEBAIHN0cnVjdCBzb2NrICp0Y3BfY3JlYXRlX29wZW5yZXFfY2hpbGQoY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxuIFx0bmV3dHAtXHUwMDNldG90YWxfcmV0cmFucyA9IHJlcS1cdTAwM2VudW1fcmV0cmFucztcbiBcbiBcdHRjcF9pbml0X3htaXRfdGltZXJzKG5ld3NrKTtcbiYjNDM7XHRuZXd0cC1cdTAwM2VvdXRfb2Zfb3JkZXJfcXVldWUgPSBSQl9ST09UO1xuIFx0V1JJVEVfT05DRShuZXd0cC1cdTAwM2V3cml0ZV9zZXEsIG5ld3RwLVx1MDAzZXB1c2hlZF9zZXEgPSB0cmVxLVx1MDAzZXNudF9pc24gJiM0MzsgMSk7XG4gXG4gXHRpZiAoc29ja19mbGFnKG5ld3NrLCBTT0NLX0tFRVBPUEVOKSlcbkBAIC02NTksNiAmIzQzOzY2MCwxMiBAQCBzdHJ1Y3Qgc29jayAqdGNwX2NyZWF0ZV9vcGVucmVxX2NoaWxkKGNvbnN0IHN0cnVjdCBzb2NrICpzayxcbiBcdHRjcF9lY25fb3BlbnJlcV9jaGlsZChuZXdzaywgcmVxLCBza2IpO1xuIFx0bmV3dHAtXHUwMDNlZmFzdG9wZW5fcmVxID0gTlVMTDtcbiBcdFJDVV9JTklUX1BPSU5URVIobmV3dHAtXHUwMDNlZmFzdG9wZW5fcnNrLCBOVUxMKTtcbiYjNDM7XHRuZXd0cC1cdTAwM2VwYWNrZXRzX291dCA9IDA7XG4mIzQzO1x0bmV3dHAtXHUwMDNlcmV0cmFuc19vdXQgPSAwO1xuJiM0MztcdG5ld3RwLVx1MDAzZXNhY2tlZF9vdXQgPSAwO1xuJiM0MztcdG5ld3RwLVx1MDAzZWxvc3Rfb3V0ID0gMDtcbiYjNDM7XHRuZXd0cC1cdTAwM2VyZXRyYW5zbWl0X3NrYl9oaW50ID0gTlVMTDtcbiYjNDM7XHRuZXd0cC1cdTAwM2VoaWdoZXN0X3NhY2sgPSBOVUxMO1xuIFxuIFx0bmV3dHAtXHUwMDNlYnBmX2NoZ19jY19pbnByb2dyZXNzID0gMDtcbiBcdHRjcF9icGZfY2xvbmUoc2ssIG5ld3NrKTtcbkBAIC05NzQsNyAmIzQzOzk4MSw3IEBAIHN0cnVjdCBzb2NrICp0Y3BfY2hlY2tfcmVxKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0dGNwX3Jlc2V0KHNrLCBza2IpO1xuIFx0fVxuIFx0aWYgKCFmYXN0b3Blbikge1xuLVx0XHRib29sIHVubGlua2VkID0gaW5ldF9jc2tfcmVxc2tfcXVldWVfZHJvcChzaywgcmVxKTtcbiYjNDM7XHRcdGJvb2wgdW5saW5rZWQgPSBpbmV0X2Nza19yZXFza19xdWV1ZV9kcm9wKHJlcS1cdTAwM2Vyc2tfbGlzdGVuZXIsIHJlcSk7XG4gXG4gXHRcdGlmICh1bmxpbmtlZClcbiBcdFx0XHRfX05FVF9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBMSU5VWF9NSUJfRU1CUllPTklDUlNUUyk7XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvYWZfaW5ldDYuYyBiL25ldC9pcHY2L2FmX2luZXQ2LmNcbmluZGV4IDI4MjkxMmExMTk5OTkuLjY4YjMzMGY2OTQxZDAgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9hZl9pbmV0Ni5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9hZl9pbmV0Ni5jXG5AQCAtNDc5LDYgJiM0Mzs0NzksMTAgQEAgdm9pZCBpbmV0Nl9jbGVhbnVwX3NvY2soc3RydWN0IHNvY2sgKnNrKVxuIFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiBcdHN0cnVjdCBpcHY2X3R4b3B0aW9ucyAqb3B0O1xuIFxuJiM0MztcdC8qIEFGX0lORVQgY2hpbGQgb2YgYW4gSVBWNl9BRERSRk9STSYjMzk7ZWQgbGlzdGVuZXI6IG5vdGhpbmcgb2YgaXRzIG93bi4gKi9cbiYjNDM7XHRpZiAoIW5wKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiBcdC8qIFJlbGVhc2Ugcnggb3B0aW9ucyAqL1xuIFxuIFx0c2tiID0geGNoZyhcdTAwMjZucC1cdTAwM2Vwa3RvcHRpb25zLCBOVUxMKTtcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMgYi9uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmNcbmluZGV4IGI0Yzk3NzQzNGMyZTAuLjZkMmRkOWFlNDZhOTYgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L2lwdjZfc29ja2dsdWUuY1xuQEAgLTU4Nyw2ICYjNDM7NTg3LDIxIEBAIGludCBkb19pcHY2X3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuIFx0XHRcdFx0YnJlYWs7XG4gXHRcdFx0fVxuIFxuJiM0MztcdFx0XHRpZiAoc2stXHUwMDNlc2tfcHJvdG9jb2wgPT0gSVBQUk9UT19UQ1ApIHtcbiYjNDM7XHRcdFx0XHRpZiAoaW5ldF9jc2tfcmVxc2tfcXVldWVfbGVuKHNrKSkge1xuJiM0MztcdFx0XHRcdFx0cmV0diA9IC1FQlVTWTtcbiYjNDM7XHRcdFx0XHRcdGJyZWFrO1xuJiM0MztcdFx0XHRcdH1cbiYjNDM7XHRcdFx0XHQvKiBBIFNZTiB0aGF0IGZvdW5kIHRoaXMgc29ja2V0IHdoaWxlIGl0IHdhc1xuJiM0MztcdFx0XHRcdCAqIHN0aWxsIGxpc3RlbmluZyBtYXkgbm90IGJlIGNvdW50ZWQgeWV0LlxuJiM0MztcdFx0XHRcdCAqL1xuJiM0MztcdFx0XHRcdHN5bmNocm9uaXplX3JjdSgpO1xuJiM0MztcdFx0XHRcdGlmIChpbmV0X2Nza19yZXFza19xdWV1ZV9sZW4oc2spKSB7XG4mIzQzO1x0XHRcdFx0XHRyZXR2ID0gLUVCVVNZO1xuJiM0MztcdFx0XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRcdFx0fVxuJiM0MztcdFx0XHR9XG4mIzQzO1xuIFx0XHRcdF9faXB2Nl9zb2NrX21jX2Nsb3NlKHNrKTtcbiBcdFx0XHRfX2lwdjZfc29ja19hY19jbG9zZShzayk7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvdGNwX2lwdjYuYyBiL25ldC9pcHY2L3RjcF9pcHY2LmNcbmluZGV4IDllOTE1NWIxYjNhYTcuLmEyZGVkYTlhNDI1OGIgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni90Y3BfaXB2Ni5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni90Y3BfaXB2Ni5jXG5AQCAtMTU1Niw3ICYjNDM7MTU1Niw3IEBAIHN0YXRpYyBzdHJ1Y3Qgc29jayAqdGNwX3Y2X3N5bl9yZWN2X3NvY2soY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqXG4gSU5ESVJFQ1RfQ0FMTEFCTEVfREVDTEFSRShzdHJ1Y3QgZHN0X2VudHJ5ICppcHY0X2RzdF9jaGVjayhzdHJ1Y3QgZHN0X2VudHJ5ICosXG4gXHRcdFx0XHRcdFx0XHQgICB1MzIpKTtcbiAvKiBUaGUgc29ja2V0IG11c3QgaGF2ZSBpdCYjMzk7cyBzcGlubG9jayBoZWxkIHdoZW4gd2UgZ2V0XG4tICogaGVyZSwgdW5sZXNzIGl0IGlzIGEgVENQX0xJU1RFTiBzb2NrZXQuXG4mIzQzOyAqIGhlcmUuXG4gICpcbiAgKiBXZSBoYXZlIGEgcG90ZW50aWFsIGRvdWJsZS1sb2NrIGNhc2UgaGVyZSwgc28gZXZlbiB3aGVuXG4gICogZG9pbmcgYmFja2xvZyBwcm9jZXNzaW5nIHdlIHVzZSB0aGUgQkggbG9ja2luZyBzY2hlbWUuXG5AQCAtMTcwNCw2ICYjNDM7MTcwNCw0NiBAQCBpbnQgdGNwX3Y2X2RvX3JjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzOy8qIEBzayBpcyBub3QgbG9ja2VkIGhlcmUgYW5kIGNhbiBsZWF2ZSBUQ1BfTElTVEVOOyBkbyBub3QgdGVzdCBza19zdGF0ZS4gKi9cbiYjNDM7c3RhdGljIG5vaW5saW5lIGludCB0Y3BfdjZfcmN2X2xpc3RlbihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4mIzQzO3tcbiYjNDM7XHRlbnVtIHNrYl9kcm9wX3JlYXNvbiByZWFzb247XG4mIzQzO1x0c3RydWN0IHNvY2sgKm5zaztcbiYjNDM7XG4mIzQzO1x0cmVhc29uID0gcHNwX3NrX3J4X3BvbGljeV9jaGVjayhzaywgc2tiKTtcbiYjNDM7XHRpZiAocmVhc29uKVxuJiM0MztcdFx0Z290byBlcnJfZGlzY2FyZDtcbiYjNDM7XG4mIzQzO1x0aWYgKHRjcF9jaGVja3N1bV9jb21wbGV0ZShza2IpKVxuJiM0MztcdFx0Z290byBjc3VtX2VycjtcbiYjNDM7XG4mIzQzO1x0bnNrID0gdGNwX3Y2X2Nvb2tpZV9jaGVjayhzaywgc2tiKTtcbiYjNDM7XHRpZiAoIW5zaylcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRpZiAobnNrICE9IHNrKSB7XG4mIzQzO1x0XHRyZWFzb24gPSB0Y3BfY2hpbGRfcHJvY2VzcyhzaywgbnNrLCBza2IpO1xuJiM0MztcdFx0c29ja19wdXQobnNrKTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0cmVhc29uID0gdGNwX3Jjdl9saXN0ZW5fc3RhdGVfcHJvY2Vzcyhzaywgc2tiKTtcbiYjNDM7XHR9XG4mIzQzO1x0aWYgKCFyZWFzb24pXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0dGNwX3Y2X3NlbmRfcmVzZXQoc2ssIHNrYiwgc2tfcnN0X2NvbnZlcnRfZHJvcF9yZWFzb24ocmVhc29uKSk7XG4mIzQzO2Rpc2NhcmQ6XG4mIzQzO1x0c2tfc2tiX3JlYXNvbl9kcm9wKHNrLCBza2IsIHJlYXNvbik7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO1xuJiM0Mztjc3VtX2VycjpcbiYjNDM7XHRyZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fVENQX0NTVU07XG4mIzQzO1x0dHJhY2VfdGNwX2JhZF9jc3VtKHNrYik7XG4mIzQzO1x0VENQX0lOQ19TVEFUUyhzb2NrX25ldChzayksIFRDUF9NSUJfQ1NVTUVSUk9SUyk7XG4mIzQzO2Vycl9kaXNjYXJkOlxuJiM0MztcdFRDUF9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBUQ1BfTUlCX0lORVJSUyk7XG4mIzQzO1x0Z290byBkaXNjYXJkO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIHRjcF92Nl9maWxsX2NiKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBpcHY2aGRyICpoZHIsXG4gXHRcdFx0ICAgY29uc3Qgc3RydWN0IHRjcGhkciAqdGgpXG4ge1xuQEAgLTE4OTEsNyAmIzQzOzE5MzEsNyBAQCBJTkRJUkVDVF9DQUxMQUJMRV9TQ09QRSBpbnQgdGNwX3Y2X3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0c2tiLVx1MDAzZWRldiA9IE5VTEw7XG4gXG4gXHRpZiAoc2stXHUwMDNlc2tfc3RhdGUgPT0gVENQX0xJU1RFTikge1xuLVx0XHRyZXQgPSB0Y3BfdjZfZG9fcmN2KHNrLCBza2IpO1xuJiM0MztcdFx0cmV0ID0gdGNwX3Y2X3Jjdl9saXN0ZW4oc2ssIHNrYik7XG4gXHRcdGdvdG8gcHV0X2FuZF9yZXR1cm47XG4gXHR9XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDQ6Mzc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0Y3BfcmN2X2xpc3Rlbl9zdGF0ZV9wcm9jZXNzJiMzNDssCiAgICAmIzM0O2RvX2lwdjZfc2V0c29ja29wdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBUQ1AgbGlzdGVuaW5nIHNvY2tldCBwYWNrZXQgcHJvY2Vzc2luZyBieSBpbnRyb2R1Y2luZyBgdGNwX3Jjdl9saXN0ZW5fc3RhdGVfcHJvY2Vzc2AgYW5kIGxvY2tsZXNzIGxpc3RlbiByZWNlaXZlIHBhdGhzIChgdGNwX3Y0X3Jjdl9saXN0ZW5gLCBgdGNwX3Y2X3Jjdl9saXN0ZW5gKS4gSXQgYWxzbyBhZGRzIGNoZWNrcyBpbiBgZG9faXB2Nl9zZXRzb2Nrb3B0YCBmb3IgYElQVjZfQUREUkZPUk1gIG9uIFRDUCBzb2NrZXRzIHdpdGggcGVuZGluZyBjb25uZWN0aW9uIHJlcXVlc3RzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBjb3JlIFRDUCBzdGFjayBhbmQgSVB2NiBzb2NrZXQgb3B0aW9ucywgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSBhbmQgbmV0d29yayB0cmFmZmljLCBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDhjZTVkNTZjMDZmOTY4NmUzOThjZWE3Nzg5ZTUxNWZiZjMxYjVhZDgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAyNCAwNDozNzoxMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3RjcC5oIGIvaW5jbHVkZS9uZXQvdGNwLmgKaW5kZXggMmM1Yjg4OTUzMGI1NS4uYWRkNDM4ZDY1NjFiZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvdGNwLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvdGNwLmgKQEAgLTM5Miw2ICYjNDM7MzkyLDggQEAgdm9pZCB0Y3Bfd3JpdGVfdGltZXJfaGFuZGxlcihzdHJ1Y3Qgc29jayAqc2spOwogdm9pZCB0Y3BfZGVsYWNrX3RpbWVyX2hhbmRsZXIoc3RydWN0IHNvY2sgKnNrKTsKIGludCB0Y3BfaW9jdGwoc3RydWN0IHNvY2sgKnNrLCBpbnQgY21kLCBpbnQgKmthcmcpOwogZW51bSBza2JfZHJvcF9yZWFzb24gdGNwX3Jjdl9zdGF0ZV9wcm9jZXNzKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiYjNDM7ZW51bSBza2JfZHJvcF9yZWFzb24gdGNwX3Jjdl9saXN0ZW5fc3RhdGVfcHJvY2VzcyhzdHJ1Y3Qgc29jayAqc2ssCiYjNDM7CQkJCQkJICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIHZvaWQgdGNwX3Jjdl9lc3RhYmxpc2hlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpOwogdm9pZCB0Y3BfcmN2YnVmX2dyb3coc3RydWN0IHNvY2sgKnNrLCB1MzIgbmV3dmFsKTsKIHZvaWQgdGNwX3Jjdl9zcGFjZV9hZGp1c3Qoc3RydWN0IHNvY2sgKnNrKTsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NvY2suYyBiL25ldC9jb3JlL3NvY2suYwppbmRleCAxYWQ0MTkwNGRiMjViLi4wNmZiYjE5ODI0ZTI2IDEwMDY0NAotLS0gYS9uZXQvY29yZS9zb2NrLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvc29jay5jCkBAIC0yNDc5LDcgJiM0MzsyNDc5LDcgQEAgc3RhdGljIHZvaWQgc2tfaW5pdF9jb21tb24oc3RydWN0IHNvY2sgKnNrKQogc3RydWN0IHNvY2sgKnNrX2Nsb25lKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgY29uc3QgZ2ZwX3QgcHJpb3JpdHksCiAJCSAgICAgIGJvb2wgbG9jaykKIHsKLQlzdHJ1Y3QgcHJvdG8gKnByb3QgPSBSRUFEX09OQ0Uoc2stJmd0O3NrX3Byb3QpOwomIzQzOwlzdHJ1Y3QgcHJvdG8gKnByb3QgPSBzay0mZ3Q7c2tfcHJvdF9jcmVhdG9yOwogCXN0cnVjdCBza19maWx0ZXIgKmZpbHRlcjsKIAlib29sIGlzX2NoYXJnZWQgPSB0cnVlOwogCXN0cnVjdCBzb2NrICpuZXdzazsKQEAgLTI1MzMsNiAmIzQzOzI1MzMsNyBAQCBzdHJ1Y3Qgc29jayAqc2tfY2xvbmUoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBjb25zdCBnZnBfdCBwcmlvcml0eSwKIAluZXdzay0mZ3Q7c2tfcmVzZXJ2ZWRfbWVtICA9IDA7CiAJREVCVUdfTkVUX1dBUk5fT05fT05DRShuZXdzay0mZ3Q7c2tfZHJvcF9jb3VudGVycyk7CiAJc2tfZHJvcHNfcmVzZXQobmV3c2spOwomIzQzOwluZXdzay0mZ3Q7c2tfdHNxX2ZsYWdzCT0gMDsKIAluZXdzay0mZ3Q7c2tfc2VuZF9oZWFkCT0gTlVMTDsKIAluZXdzay0mZ3Q7c2tfdXNlcmxvY2tzCT0gc2stJmd0O3NrX3VzZXJsb2NrcyAmYW1wOyB+U09DS19CSU5EUE9SVF9MT0NLOwogCWF0b21pY19zZXQoJmFtcDtuZXdzay0mZ3Q7c2tfemNrZXksIDApOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2lucHV0LmMgYi9uZXQvaXB2NC90Y3BfaW5wdXQuYwppbmRleCAwZjYwYTFkYmY5Mjc0Li43N2FmMThmYmE2NmI0IDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfaW5wdXQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC90Y3BfaW5wdXQuYwpAQCAtNzE0MSw2ICYjNDM7NzE0MSw0MiBAQCBzdGF0aWMgdm9pZCB0Y3BfcmN2X3N5bnJlY3Zfc3RhdGVfZmFzdG9wZW4oc3RydWN0IHNvY2sgKnNrKQogCXRjcF9yZWFybV9ydG8oc2spOwogfQogCiYjNDM7ZW51bSBza2JfZHJvcF9yZWFzb24gdGNwX3Jjdl9saXN0ZW5fc3RhdGVfcHJvY2VzcyhzdHJ1Y3Qgc29jayAqc2ssCiYjNDM7CQkJCQkJICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQomIzQzO3sKJiM0MzsJY29uc3Qgc3RydWN0IHRjcGhkciAqdGggPSB0Y3BfaGRyKHNrYik7CiYjNDM7CVNLQl9EUihyZWFzb24pOwomIzQzOwomIzQzOwlpZiAodGgtJmd0O2FjaykKJiM0MzsJCXJldHVybiBTS0JfRFJPUF9SRUFTT05fVENQX0ZMQUdTOwomIzQzOwomIzQzOwlpZiAodGgtJmd0O3JzdCkgewomIzQzOwkJU0tCX0RSX1NFVChyZWFzb24sIFRDUF9SRVNFVCk7CiYjNDM7CQlnb3RvIGRpc2NhcmQ7CiYjNDM7CX0KJiM0MzsJaWYgKHRoLSZndDtzeW4pIHsKJiM0MzsJCWlmICh0aC0mZ3Q7ZmluKSB7CiYjNDM7CQkJU0tCX0RSX1NFVChyZWFzb24sIFRDUF9GTEFHUyk7CiYjNDM7CQkJZ290byBkaXNjYXJkOwomIzQzOwkJfQomIzQzOwkJLyogSXQgaXMgcG9zc2libGUgdGhhdCB3ZSBwcm9jZXNzIFNZTiBwYWNrZXRzIGZyb20gYmFja2xvZywKJiM0MzsJCSAqIHNvIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRvIGRpc2FibGUgQkggYW5kIFJDVSByaWdodCB0aGVyZS4KJiM0MzsJCSAqLwomIzQzOwkJcmN1X3JlYWRfbG9jaygpOwomIzQzOwkJbG9jYWxfYmhfZGlzYWJsZSgpOwomIzQzOwkJaW5ldF9jc2soc2spLSZndDtpY3NrX2FmX29wcy0mZ3Q7Y29ubl9yZXF1ZXN0KHNrLCBza2IpOwomIzQzOwkJbG9jYWxfYmhfZW5hYmxlKCk7CiYjNDM7CQlyY3VfcmVhZF91bmxvY2soKTsKJiM0MzsKJiM0MzsJCWNvbnN1bWVfc2tiKHNrYik7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOwlTS0JfRFJfU0VUKHJlYXNvbiwgVENQX0ZMQUdTKTsKJiM0MztkaXNjYXJkOgomIzQzOwl0Y3BfZHJvcF9yZWFzb24oc2ssIHNrYiwgcmVhc29uKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogLyoKICAqCVRoaXMgZnVuY3Rpb24gaW1wbGVtZW50cyB0aGUgcmVjZWl2aW5nIHByb2NlZHVyZSBvZiBSRkMgNzkzIGZvcgogICoJYWxsIHN0YXRlcyBleGNlcHQgRVNUQUJMSVNIRUQgYW5kIFRJTUVfV0FJVC4KQEAgLTcxNTIsNyAmIzQzOzcxODgsNiBAQCBlbnVtIHNrYl9kcm9wX3JlYXNvbgogdGNwX3Jjdl9zdGF0ZV9wcm9jZXNzKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTsKLQlzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7CiAJY29uc3Qgc3RydWN0IHRjcGhkciAqdGggPSB0Y3BfaGRyKHNrYik7CiAJc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxOwogCWludCBxdWV1ZWQgPSAwOwpAQCAtNzE2NCwzMiAmIzQzOzcxOTksNyBAQCB0Y3BfcmN2X3N0YXRlX3Byb2Nlc3Moc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCQlnb3RvIGRpc2NhcmQ7CiAKIAljYXNlIFRDUF9MSVNURU46Ci0JCWlmICh0aC0mZ3Q7YWNrKQotCQkJcmV0dXJuIFNLQl9EUk9QX1JFQVNPTl9UQ1BfRkxBR1M7Ci0KLQkJaWYgKHRoLSZndDtyc3QpIHsKLQkJCVNLQl9EUl9TRVQocmVhc29uLCBUQ1BfUkVTRVQpOwotCQkJZ290byBkaXNjYXJkOwotCQl9Ci0JCWlmICh0aC0mZ3Q7c3luKSB7Ci0JCQlpZiAodGgtJmd0O2ZpbikgewotCQkJCVNLQl9EUl9TRVQocmVhc29uLCBUQ1BfRkxBR1MpOwotCQkJCWdvdG8gZGlzY2FyZDsKLQkJCX0KLQkJCS8qIEl0IGlzIHBvc3NpYmxlIHRoYXQgd2UgcHJvY2VzcyBTWU4gcGFja2V0cyBmcm9tIGJhY2tsb2csCi0JCQkgKiBzbyB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0byBkaXNhYmxlIEJIIGFuZCBSQ1UgcmlnaHQgdGhlcmUuCi0JCQkgKi8KLQkJCXJjdV9yZWFkX2xvY2soKTsKLQkJCWxvY2FsX2JoX2Rpc2FibGUoKTsKLQkJCWljc2stJmd0O2ljc2tfYWZfb3BzLSZndDtjb25uX3JlcXVlc3Qoc2ssIHNrYik7Ci0JCQlsb2NhbF9iaF9lbmFibGUoKTsKLQkJCXJjdV9yZWFkX3VubG9jaygpOwotCi0JCQljb25zdW1lX3NrYihza2IpOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQkJU0tCX0RSX1NFVChyZWFzb24sIFRDUF9GTEFHUyk7Ci0JCWdvdG8gZGlzY2FyZDsKJiM0MzsJCXJldHVybiB0Y3BfcmN2X2xpc3Rlbl9zdGF0ZV9wcm9jZXNzKHNrLCBza2IpOwogCiAJY2FzZSBUQ1BfU1lOX1NFTlQ6CiAJCXRwLSZndDtyeF9vcHQuc2F3X3RzdGFtcCA9IDA7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfaXB2NC5jIGIvbmV0L2lwdjQvdGNwX2lwdjQuYwppbmRleCAxOTBjN2FmNGNmOTIzLi4yZmE4OTU4MzgwYTViIDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfaXB2NC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L3RjcF9pcHY0LmMKQEAgLTE3MTQsNiAmIzQzOzE3MTQsMTQgQEAgc3RydWN0IHNvY2sgKnRjcF92NF9zeW5fcmVjdl9zb2NrKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJaW5ldF9jc2sobmV3c2spLSZndDtpY3NrX2V4dF9oZHJfbGVuID0gaW5ldF9vcHQtJmd0O29wdC5vcHRsZW47CiAJYXRvbWljX3NldCgmYW1wO25ld2luZXQtJmd0O2luZXRfaWQsIGdldF9yYW5kb21fdTE2KCkpOwogCiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpCiYjNDM7CS8qIE5ldmVyIGluaGVyaXQgdGhlIGxpc3RlbmVyJiMzOTtzIGlwdjZfcGluZm87IElQVjZfQUREUkZPUk0gbGVhdmVzIGl0IHNldAomIzQzOwkgKiBvbiBhbiBBRl9JTkVUIHNvY2tldC4gIHRjcF92Nl9tYXBwZWRfY2hpbGRfaW5pdCgpIGluc3RhbGxzIG91ciBvd24uCiYjNDM7CSAqLwomIzQzOwluZXdpbmV0LSZndDtwaW5ldDYgPSBOVUxMOwomIzQzOwluZXdpbmV0LSZndDtpcHY2X2ZsX2xpc3QgPSBOVUxMOwomIzQzOyNlbmRpZgomIzQzOwogCS8qIFNldCBUb1Mgb2YgdGhlIG5ldyBzb2NrZXQgYmFzZWQgdXBvbiB0aGUgdmFsdWUgb2YgaW5jb21pbmcgU1lOLgogCSAqIEVDVCBiaXRzIGFyZSBzZXQgbGF0ZXIgaW4gdGNwX2luaXRfdHJhbnNmZXIoKS4KIAkgKi8KQEAgLTE4MjAsNyAmIzQzOzE4MjgsNyBAQCB1MTYgdGNwX3Y0X2dldF9zeW5jb29raWUoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaXBoZHIgKmlwaCwKIElORElSRUNUX0NBTExBQkxFX0RFQ0xBUkUoc3RydWN0IGRzdF9lbnRyeSAqaXB2NF9kc3RfY2hlY2soc3RydWN0IGRzdF9lbnRyeSAqLAogCQkJCQkJCSAgIHUzMikpOwogLyogVGhlIHNvY2tldCBtdXN0IGhhdmUgaXQmIzM5O3Mgc3BpbmxvY2sgaGVsZCB3aGVuIHdlIGdldAotICogaGVyZSwgdW5sZXNzIGl0IGlzIGEgVENQX0xJU1RFTiBzb2NrZXQuCiYjNDM7ICogaGVyZS4KICAqCiAgKiBXZSBoYXZlIGEgcG90ZW50aWFsIGRvdWJsZS1sb2NrIGNhc2UgaGVyZSwgc28gZXZlbiB3aGVuCiAgKiBkb2luZyBiYWNrbG9nIHByb2Nlc3Npbmcgd2UgdXNlIHRoZSBCSCBsb2NraW5nIHNjaGVtZS4KQEAgLTE4OTgsNiAmIzQzOzE5MDYsNDYgQEAgaW50IHRjcF92NF9kb19yY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCWdvdG8gZGlzY2FyZDsKIH0KIAomIzQzOy8qIEBzayBpcyBub3QgbG9ja2VkIGhlcmUgYW5kIGNhbiBsZWF2ZSBUQ1BfTElTVEVOOyBkbyBub3QgdGVzdCBza19zdGF0ZS4gKi8KJiM0MztzdGF0aWMgbm9pbmxpbmUgaW50IHRjcF92NF9yY3ZfbGlzdGVuKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKJiM0Mzt7CiYjNDM7CWVudW0gc2tiX2Ryb3BfcmVhc29uIHJlYXNvbjsKJiM0MzsJc3RydWN0IHNvY2sgKm5zazsKJiM0MzsKJiM0MzsJcmVhc29uID0gcHNwX3NrX3J4X3BvbGljeV9jaGVjayhzaywgc2tiKTsKJiM0MzsJaWYgKHJlYXNvbikKJiM0MzsJCWdvdG8gZXJyX2Rpc2NhcmQ7CiYjNDM7CiYjNDM7CWlmICh0Y3BfY2hlY2tzdW1fY29tcGxldGUoc2tiKSkKJiM0MzsJCWdvdG8gY3N1bV9lcnI7CiYjNDM7CiYjNDM7CW5zayA9IHRjcF92NF9jb29raWVfY2hlY2soc2ssIHNrYik7CiYjNDM7CWlmICghbnNrKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWlmIChuc2sgIT0gc2spIHsKJiM0MzsJCXJlYXNvbiA9IHRjcF9jaGlsZF9wcm9jZXNzKHNrLCBuc2ssIHNrYik7CiYjNDM7CQlzb2NrX3B1dChuc2spOwomIzQzOwl9IGVsc2UgewomIzQzOwkJcmVhc29uID0gdGNwX3Jjdl9saXN0ZW5fc3RhdGVfcHJvY2Vzcyhzaywgc2tiKTsKJiM0MzsJfQomIzQzOwlpZiAoIXJlYXNvbikKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwl0Y3BfdjRfc2VuZF9yZXNldChzaywgc2tiLCBza19yc3RfY29udmVydF9kcm9wX3JlYXNvbihyZWFzb24pKTsKJiM0MztkaXNjYXJkOgomIzQzOwlza19za2JfcmVhc29uX2Ryb3Aoc2ssIHNrYiwgcmVhc29uKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7CiYjNDM7Y3N1bV9lcnI6CiYjNDM7CXJlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9UQ1BfQ1NVTTsKJiM0MzsJdHJhY2VfdGNwX2JhZF9jc3VtKHNrYik7CiYjNDM7CVRDUF9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBUQ1BfTUlCX0NTVU1FUlJPUlMpOwomIzQzO2Vycl9kaXNjYXJkOgomIzQzOwlUQ1BfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgVENQX01JQl9JTkVSUlMpOwomIzQzOwlnb3RvIGRpc2NhcmQ7CiYjNDM7fQomIzQzOwogZW51bSBza2JfZHJvcF9yZWFzb24gdGNwX2FkZF9iYWNrbG9nKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAl1MzIgdGFpbF9nc29fc2l6ZSwgdGFpbF9nc29fc2VnczsKQEAgLTIyMzUsNyAmIzQzOzIyODMsNyBAQCBpbnQgdGNwX3Y0X3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCXNrYi0mZ3Q7ZGV2ID0gTlVMTDsKIAogCWlmIChzay0mZ3Q7c2tfc3RhdGUgPT0gVENQX0xJU1RFTikgewotCQlyZXQgPSB0Y3BfdjRfZG9fcmN2KHNrLCBza2IpOwomIzQzOwkJcmV0ID0gdGNwX3Y0X3Jjdl9saXN0ZW4oc2ssIHNrYik7CiAJCWdvdG8gcHV0X2FuZF9yZXR1cm47CiAJfQogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMgYi9uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMKaW5kZXggMTIyNTRlNmViMmYzNC4uMmZkZTE5NmRkMzAyZiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L3RjcF9taW5pc29ja3MuYwpAQCAtNTkxLDYgJiM0Mzs1OTEsNyBAQCBzdHJ1Y3Qgc29jayAqdGNwX2NyZWF0ZV9vcGVucmVxX2NoaWxkKGNvbnN0IHN0cnVjdCBzb2NrICpzaywKIAluZXd0cC0mZ3Q7dG90YWxfcmV0cmFucyA9IHJlcS0mZ3Q7bnVtX3JldHJhbnM7CiAKIAl0Y3BfaW5pdF94bWl0X3RpbWVycyhuZXdzayk7CiYjNDM7CW5ld3RwLSZndDtvdXRfb2Zfb3JkZXJfcXVldWUgPSBSQl9ST09UOwogCVdSSVRFX09OQ0UobmV3dHAtJmd0O3dyaXRlX3NlcSwgbmV3dHAtJmd0O3B1c2hlZF9zZXEgPSB0cmVxLSZndDtzbnRfaXNuICYjNDM7IDEpOwogCiAJaWYgKHNvY2tfZmxhZyhuZXdzaywgU09DS19LRUVQT1BFTikpCkBAIC02NTksNiAmIzQzOzY2MCwxMiBAQCBzdHJ1Y3Qgc29jayAqdGNwX2NyZWF0ZV9vcGVucmVxX2NoaWxkKGNvbnN0IHN0cnVjdCBzb2NrICpzaywKIAl0Y3BfZWNuX29wZW5yZXFfY2hpbGQobmV3c2ssIHJlcSwgc2tiKTsKIAluZXd0cC0mZ3Q7ZmFzdG9wZW5fcmVxID0gTlVMTDsKIAlSQ1VfSU5JVF9QT0lOVEVSKG5ld3RwLSZndDtmYXN0b3Blbl9yc2ssIE5VTEwpOwomIzQzOwluZXd0cC0mZ3Q7cGFja2V0c19vdXQgPSAwOwomIzQzOwluZXd0cC0mZ3Q7cmV0cmFuc19vdXQgPSAwOwomIzQzOwluZXd0cC0mZ3Q7c2Fja2VkX291dCA9IDA7CiYjNDM7CW5ld3RwLSZndDtsb3N0X291dCA9IDA7CiYjNDM7CW5ld3RwLSZndDtyZXRyYW5zbWl0X3NrYl9oaW50ID0gTlVMTDsKJiM0MzsJbmV3dHAtJmd0O2hpZ2hlc3Rfc2FjayA9IE5VTEw7CiAKIAluZXd0cC0mZ3Q7YnBmX2NoZ19jY19pbnByb2dyZXNzID0gMDsKIAl0Y3BfYnBmX2Nsb25lKHNrLCBuZXdzayk7CkBAIC05NzQsNyAmIzQzOzk4MSw3IEBAIHN0cnVjdCBzb2NrICp0Y3BfY2hlY2tfcmVxKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJdGNwX3Jlc2V0KHNrLCBza2IpOwogCX0KIAlpZiAoIWZhc3RvcGVuKSB7Ci0JCWJvb2wgdW5saW5rZWQgPSBpbmV0X2Nza19yZXFza19xdWV1ZV9kcm9wKHNrLCByZXEpOwomIzQzOwkJYm9vbCB1bmxpbmtlZCA9IGluZXRfY3NrX3JlcXNrX3F1ZXVlX2Ryb3AocmVxLSZndDtyc2tfbGlzdGVuZXIsIHJlcSk7CiAKIAkJaWYgKHVubGlua2VkKQogCQkJX19ORVRfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgTElOVVhfTUlCX0VNQlJZT05JQ1JTVFMpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvYWZfaW5ldDYuYyBiL25ldC9pcHY2L2FmX2luZXQ2LmMKaW5kZXggMjgyOTEyYTExOTk5OS4uNjhiMzMwZjY5NDFkMCAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvYWZfaW5ldDYuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9hZl9pbmV0Ni5jCkBAIC00NzksNiAmIzQzOzQ3OSwxMCBAQCB2b2lkIGluZXQ2X2NsZWFudXBfc29jayhzdHJ1Y3Qgc29jayAqc2spCiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlzdHJ1Y3QgaXB2Nl90eG9wdGlvbnMgKm9wdDsKIAomIzQzOwkvKiBBRl9JTkVUIGNoaWxkIG9mIGFuIElQVjZfQUREUkZPUk0mIzM5O2VkIGxpc3RlbmVyOiBub3RoaW5nIG9mIGl0cyBvd24uICovCiYjNDM7CWlmICghbnApCiYjNDM7CQlyZXR1cm47CiYjNDM7CiAJLyogUmVsZWFzZSByeCBvcHRpb25zICovCiAKIAlza2IgPSB4Y2hnKCZhbXA7bnAtJmd0O3BrdG9wdGlvbnMsIE5VTEwpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jIGIvbmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jCmluZGV4IGI0Yzk3NzQzNGMyZTAuLjZkMmRkOWFlNDZhOTYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2lwdjZfc29ja2dsdWUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMKQEAgLTU4Nyw2ICYjNDM7NTg3LDIxIEBAIGludCBkb19pcHY2X3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLAogCQkJCWJyZWFrOwogCQkJfQogCiYjNDM7CQkJaWYgKHNrLSZndDtza19wcm90b2NvbCA9PSBJUFBST1RPX1RDUCkgewomIzQzOwkJCQlpZiAoaW5ldF9jc2tfcmVxc2tfcXVldWVfbGVuKHNrKSkgewomIzQzOwkJCQkJcmV0diA9IC1FQlVTWTsKJiM0MzsJCQkJCWJyZWFrOwomIzQzOwkJCQl9CiYjNDM7CQkJCS8qIEEgU1lOIHRoYXQgZm91bmQgdGhpcyBzb2NrZXQgd2hpbGUgaXQgd2FzCiYjNDM7CQkJCSAqIHN0aWxsIGxpc3RlbmluZyBtYXkgbm90IGJlIGNvdW50ZWQgeWV0LgomIzQzOwkJCQkgKi8KJiM0MzsJCQkJc3luY2hyb25pemVfcmN1KCk7CiYjNDM7CQkJCWlmIChpbmV0X2Nza19yZXFza19xdWV1ZV9sZW4oc2spKSB7CiYjNDM7CQkJCQlyZXR2ID0gLUVCVVNZOwomIzQzOwkJCQkJYnJlYWs7CiYjNDM7CQkJCX0KJiM0MzsJCQl9CiYjNDM7CiAJCQlfX2lwdjZfc29ja19tY19jbG9zZShzayk7CiAJCQlfX2lwdjZfc29ja19hY19jbG9zZShzayk7CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3RjcF9pcHY2LmMgYi9uZXQvaXB2Ni90Y3BfaXB2Ni5jCmluZGV4IDllOTE1NWIxYjNhYTcuLmEyZGVkYTlhNDI1OGIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3RjcF9pcHY2LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvdGNwX2lwdjYuYwpAQCAtMTU1Niw3ICYjNDM7MTU1Niw3IEBAIHN0YXRpYyBzdHJ1Y3Qgc29jayAqdGNwX3Y2X3N5bl9yZWN2X3NvY2soY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqCiBJTkRJUkVDVF9DQUxMQUJMRV9ERUNMQVJFKHN0cnVjdCBkc3RfZW50cnkgKmlwdjRfZHN0X2NoZWNrKHN0cnVjdCBkc3RfZW50cnkgKiwKIAkJCQkJCQkgICB1MzIpKTsKIC8qIFRoZSBzb2NrZXQgbXVzdCBoYXZlIGl0JiMzOTtzIHNwaW5sb2NrIGhlbGQgd2hlbiB3ZSBnZXQKLSAqIGhlcmUsIHVubGVzcyBpdCBpcyBhIFRDUF9MSVNURU4gc29ja2V0LgomIzQzOyAqIGhlcmUuCiAgKgogICogV2UgaGF2ZSBhIHBvdGVudGlhbCBkb3VibGUtbG9jayBjYXNlIGhlcmUsIHNvIGV2ZW4gd2hlbgogICogZG9pbmcgYmFja2xvZyBwcm9jZXNzaW5nIHdlIHVzZSB0aGUgQkggbG9ja2luZyBzY2hlbWUuCkBAIC0xNzA0LDYgJiM0MzsxNzA0LDQ2IEBAIGludCB0Y3BfdjZfZG9fcmN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAlyZXR1cm4gMDsKIH0KIAomIzQzOy8qIEBzayBpcyBub3QgbG9ja2VkIGhlcmUgYW5kIGNhbiBsZWF2ZSBUQ1BfTElTVEVOOyBkbyBub3QgdGVzdCBza19zdGF0ZS4gKi8KJiM0MztzdGF0aWMgbm9pbmxpbmUgaW50IHRjcF92Nl9yY3ZfbGlzdGVuKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKJiM0Mzt7CiYjNDM7CWVudW0gc2tiX2Ryb3BfcmVhc29uIHJlYXNvbjsKJiM0MzsJc3RydWN0IHNvY2sgKm5zazsKJiM0MzsKJiM0MzsJcmVhc29uID0gcHNwX3NrX3J4X3BvbGljeV9jaGVjayhzaywgc2tiKTsKJiM0MzsJaWYgKHJlYXNvbikKJiM0MzsJCWdvdG8gZXJyX2Rpc2NhcmQ7CiYjNDM7CiYjNDM7CWlmICh0Y3BfY2hlY2tzdW1fY29tcGxldGUoc2tiKSkKJiM0MzsJCWdvdG8gY3N1bV9lcnI7CiYjNDM7CiYjNDM7CW5zayA9IHRjcF92Nl9jb29raWVfY2hlY2soc2ssIHNrYik7CiYjNDM7CWlmICghbnNrKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWlmIChuc2sgIT0gc2spIHsKJiM0MzsJCXJlYXNvbiA9IHRjcF9jaGlsZF9wcm9jZXNzKHNrLCBuc2ssIHNrYik7CiYjNDM7CQlzb2NrX3B1dChuc2spOwomIzQzOwl9IGVsc2UgewomIzQzOwkJcmVhc29uID0gdGNwX3Jjdl9saXN0ZW5fc3RhdGVfcHJvY2Vzcyhzaywgc2tiKTsKJiM0MzsJfQomIzQzOwlpZiAoIXJlYXNvbikKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwl0Y3BfdjZfc2VuZF9yZXNldChzaywgc2tiLCBza19yc3RfY29udmVydF9kcm9wX3JlYXNvbihyZWFzb24pKTsKJiM0MztkaXNjYXJkOgomIzQzOwlza19za2JfcmVhc29uX2Ryb3Aoc2ssIHNrYiwgcmVhc29uKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7CiYjNDM7Y3N1bV9lcnI6CiYjNDM7CXJlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9UQ1BfQ1NVTTsKJiM0MzsJdHJhY2VfdGNwX2JhZF9jc3VtKHNrYik7CiYjNDM7CVRDUF9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBUQ1BfTUlCX0NTVU1FUlJPUlMpOwomIzQzO2Vycl9kaXNjYXJkOgomIzQzOwlUQ1BfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgVENQX01JQl9JTkVSUlMpOwomIzQzOwlnb3RvIGRpc2NhcmQ7CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgdGNwX3Y2X2ZpbGxfY2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IGlwdjZoZHIgKmhkciwKIAkJCSAgIGNvbnN0IHN0cnVjdCB0Y3BoZHIgKnRoKQogewpAQCAtMTg5MSw3ICYjNDM7MTkzMSw3IEBAIElORElSRUNUX0NBTExBQkxFX1NDT1BFIGludCB0Y3BfdjZfcmN2KHN0cnVjdCBza19idWZmICpza2IpCiAJc2tiLSZndDtkZXYgPSBOVUxMOwogCiAJaWYgKHNrLSZndDtza19zdGF0ZSA9PSBUQ1BfTElTVEVOKSB7Ci0JCXJldCA9IHRjcF92Nl9kb19yY3Yoc2ssIHNrYik7CiYjNDM7CQlyZXQgPSB0Y3BfdjZfcmN2X2xpc3Rlbihzaywgc2tiKTsKIAkJZ290byBwdXRfYW5kX3JldHVybjsKIAl9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDQ6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjU1NAoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDgyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBUaGlzIFRDUCBOZXR3b3JraW5nIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCBhIHBhdGNoIGhlcmUgdGhhdCYjMzk7cyBtYWtpbmcgY2hhbmdlcyB0byB0aGUgVENQIG5ldHdvcmtpbmcgY29kZS4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgdGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlLCBhbmQgZ2l2ZW4gdGhhdCBpdCYjMzk7cyBpbiB0aGUgY29yZSBuZXR3b3JraW5nIHN0YWNrIGFuZCByZWFjaGFibGUgdmlhIFRDUCBzb2NrZXRzLCBmdXp6aW5nIGlzIGRlZmluaXRlbHkgd2FycmFudGVkLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IGlkZW50aWZ5aW5nIHRoZSBrZXkgZnVuY3Rpb25zIHRoYXQgYXJlIG1vZGlmaWVkLgoKU3BlY2lmaWNhbGx5LCBJIHNlZSBhIGZldyBrZXkgYWRkaXRpb25zOiBgdGNwX3Jjdl9saXN0ZW5fc3RhdGVfcHJvY2Vzc2AsIGB0Y3BfdjRfcmN2X2xpc3RlbmAsIGFuZCBgdGNwX3Y2X3Jjdl9saXN0ZW5gLiAgVGhlc2UgYXJlIGNsZWFybHkgaW50cm9kdWNlZCB0byBoYW5kbGUgdGhlIGBUQ1BfTElTVEVOYCBzdGF0ZSwgd2hpY2ggaXMgd29ydGggaW52ZXN0aWdhdGluZy4gVGhlIGBza19jbG9uZWAgZnVuY3Rpb24gYWxzbyBnZXRzIGEgdHdlYWsgdG8gaG93IGl0IGFjY2Vzc2VzIHRoZSBwcm90b2NvbCBjcmVhdG9yLiAgV2UmIzM5O3ZlIGdvdCBzb21lIG5ldyBpbml0aWFsaXphdGlvbiBpbiBgdGNwX2NyZWF0ZV9vcGVucmVxX2NoaWxkYC4gQW5kIHRoZW4gdGhlcmUmIzM5O3MgYSBtb2RpZmljYXRpb24gdG8gYGRvX2lwdjZfc2V0c29ja29wdGAuCgpOb3csIGxldCBtZSB6b29tIGluIG9uIHRob3NlIGZ1bmN0aW9ucyB0byBuYXJyb3cgZG93biBteSBmb2N1cy4gIEkgd2FudCB0byBwcmlvcml0aXplIHRoZSBiZXN0IGVudHJ5IHBvaW50cy4gSSBrbm93IEkgc2hvdWxkIGZvY3VzIG9uIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zLiBJIGNhbiBzZWUgdGhhdCBgdGNwX3Jjdl9saXN0ZW5fc3RhdGVfcHJvY2Vzc2AgaXMgbm90IHN0YXRpYyBhbmQgaXMgZGVmaW5lZCwgd2hpY2ggbWFrZXMgaXQgYSBnb29kIGNhbmRpZGF0ZS4gSG93ZXZlciwgYHRjcF92NF9yY3ZfbGlzdGVuYCBhbmQgYHRjcF92Nl9yY3ZfbGlzdGVuYCBhcmUgc3RhdGljIGJ1dCAqbm9pbmxpbmUqLCBzbyBldmVuIHRob3VnaCB0aGV5IGFyZSBzdGF0aWMsIHRoZXkgd2lsbCBzdGlsbCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgd2hpY2ggbWVhbnMgdGhhdCB0aGV5IGFyZSBhbHNvIGNhbmRpZGF0ZXMuIE9mIGNvdXJzZSwgYHRjcF92NF9yY3ZgIGFuZCBgdGNwX3Y2X3JjdmAgYXJlIHRoZSBhY3R1YWwgZW50cnkgcG9pbnRzLCBidXQgdGhvc2UgYXJlIGluIHRoZSBrZXJuZWwgYWxyZWFkeSBzbyB0aGV5IGFyZSBub3QgbmV3LiAgQW5kIGZpbmFsbHksIHRoZXJlJiMzOTtzIGBkb19pcHY2X3NldHNvY2tvcHRgIHdoaWNoIGlzIGFsc28gbW9kaWZpZWQuCgpMZXQmIzM5O3MgZHJpbGwgZG93biBpbnRvIGBkb19pcHY2X3NldHNvY2tvcHRgLiAgVGhlIGRpZmYgc2hvd3MgdGhhdCBpdCYjMzk7cyBub3cgY2hlY2tpbmcgZm9yIGBJUFBST1RPX1RDUGAgYW5kIHRoZSBsZW5ndGggb2YgdGhlIHJlcXVlc3QgcXVldWUgKGBpbmV0X2Nza19yZXFza19xdWV1ZV9sZW4oc2spYCkuICBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIHRyeWluZyB0byBwcmV2ZW50IG1vZGlmaWNhdGlvbiBvZiBvcHRpb25zIG9uIGEgbGlzdGVuaW5nIHNvY2tldCB0aGF0IGhhcyBwZW5kaW5nIHJlcXVlc3RzLiBTcGVjaWZpY2FsbHkgaXQmIzM5O3MgdHJ5aW5nIHRvIGVuc3VyZSB0aGF0IGEgU1lOIHBhY2tldCB0aGF0IGFycml2ZWQgYmVmb3JlIHRoZSBzb2NrZXQgd2FzIGZ1bGx5IGxpc3RlbmluZyBpcyBub3QgbWlzc2VkLgpJJiMzOTtsbCBrZWVwIGBkb19pcHY2X3NldHNvY2tvcHRgIGluIG1pbmQsIGFuZCBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IG9wdGlvbiBpcyBiZWluZyBhZmZlY3RlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwNDozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2lwdjZfc29ja19tY19jbG9zZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L2lwdjZfc29ja2dsdWUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmM9Mzc2PWludCBkb19pcHY2X3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuLS1cbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYy02MDQtXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmM6NjA1Olx0XHRcdF9faXB2Nl9zb2NrX21jX2Nsb3NlKHNrKTtcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYy02MDYtXHRcdFx0X19pcHY2X3NvY2tfYWNfY2xvc2Uoc2spO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDA0OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwODUKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoYXQgc3BlY2lmaWMgY29kZToKCioqRGl2aW5nIGludG8gaXB2Nl9zb2NrZ2x1ZS5jIC0gTGluZSA1ODcqKgoKT2theSwgSSYjMzk7bSB6ZXJvaW5nIGluIG9uIGxpbmUgNTg3IHdpdGhpbiBgbmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHJlY2FsbCB3aGF0IGZ1bmN0aW9ucyB0eXBpY2FsbHkgc3Vycm91bmQgdGhpcyBhcmVhIGluIHRoZSBmaWxlLiBJIGltbWVkaWF0ZWx5IHN0YXJ0IG1lbnRhbGx5IHBhcnNpbmcgdGhlIGNvZGUgZmxvdy4gU2luY2UgdGhpcyBmaWxlIGRlYWxzIHdpdGggdGhlIGdsdWUgY29kZSBiZXR3ZWVuIElQdjYgYW5kIHRoZSBzb2NrZXQgbGF5ZXIsIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgYXNwZWN0cyByZWxhdGVkIHRvIHRoZSBjb25uZWN0aW9uIG9mIElQdjYgc29ja2V0cyBhbmQgYW55IHN1cHBvcnRpbmcgZnVuY3Rpb25zLiBJIGtub3cgdGhpcyBmaWxlIGlzIGNyaXRpY2FsIGZvciBtYW5hZ2luZyBJUHY2IHNvY2tldHMgYW5kIGludGVyZmFjaW5nIHRoZW0gd2l0aCB0aGUgZ2VuZXJpYyBzb2NrZXQgbGF5ZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdW5jdGlvbiBjYWxsIG9yIGNvZGUgYmxvY2sgb24gbGluZSA1ODcgdG8gZGV0ZXJtaW5lIHdoYXQgdGhlIHNwZWNpZmljIGNvbnRleHQgaXMuIElzIGl0IGRlYWxpbmcgd2l0aCBhZGRyZXNzIGZhbWlseSBoYW5kbGluZz8gU29ja2V0IG9wdGlvbiBwcm9jZXNzaW5nPyBQb3NzaWJseSByZWxhdGVkIHRvIG11bHRpY2FzdCBqb2lucyBvciBsZWF2ZXM/IE1heWJlIGl0IGhhbmRsZXMgdGhlIGFjdHVhbCBzb2NrZXQgY3JlYXRpb24gb3IgdGVhcmRvd24uIEtub3dpbmcgdGhpcyBmaWxlIGFuZCBhcmVhLCBJIGV4cGVjdCB0byBkZWFsIHdpdGggYSBgc3RydWN0IHNvY2tgIG9yIGBzdHJ1Y3QgaW5ldDZfc29ja2AgYXQgc29tZSBwb2ludC4gSeKAmW0gcHJlcGFyaW5nIG15c2VsZiBmb3IgdGhhdCwgbWVudGFsbHkgbG9va2luZyBmb3IgaGludHMuIExldCYjMzk7cyBzZWUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwNDozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY2L2lwdjZfc29ja2dsdWUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTcwOlx0XHRcdFx0fSBlbHNlIGlmIChzay1cdTAwM2Vza19wcm90b2NvbCA9PSBJUFBST1RPX1RDUCkge1xuIDU3MTpcdFx0XHRcdFx0aWYgKHNrLVx1MDAzZXNrX3Byb3QgIT0gXHUwMDI2dGNwdjZfcHJvdCkge1xuIDU3MjpcdFx0XHRcdFx0XHRyZXR2ID0gLUVCVVNZO1xuIDU3MzpcdFx0XHRcdFx0XHRicmVhaztcbiA1NzQ6XHRcdFx0XHRcdH1cbiA1NzU6XHRcdFx0XHR9IGVsc2Uge1xuIDU3NjpcdFx0XHRcdFx0YnJlYWs7XG4gNTc3Olx0XHRcdFx0fVxuIDU3ODpcdFxuIDU3OTpcdFx0XHRcdGlmIChzay1cdTAwM2Vza19zdGF0ZSAhPSBUQ1BfRVNUQUJMSVNIRUQpIHtcbiA1ODA6XHRcdFx0XHRcdHJldHYgPSAtRU5PVENPTk47XG4gNTgxOlx0XHRcdFx0XHRicmVhaztcbiA1ODI6XHRcdFx0XHR9XG4gNTgzOlx0XG4gNTg0Olx0XHRcdFx0aWYgKGlwdjZfb25seV9zb2NrKHNrKSB8fFxuIDU4NTpcdFx0XHRcdCAgICAhaXB2Nl9hZGRyX3Y0bWFwcGVkKFx1MDAyNnNrLVx1MDAzZXNrX3Y2X2RhZGRyKSkge1xuIDU4NjpcdFx0XHRcdFx0cmV0diA9IC1FQUREUk5PVEFWQUlMO1xuIDU4NzpcdFx0XHRcdFx0YnJlYWs7XG4gNTg4Olx0XHRcdFx0fVxuIDU4OTpcdFxuIDU5MDpcdFx0XHRcdGlmIChzay1cdTAwM2Vza19wcm90b2NvbCA9PSBJUFBST1RPX1RDUCkge1xuIDU5MTpcdFx0XHRcdFx0aWYgKGluZXRfY3NrX3JlcXNrX3F1ZXVlX2xlbihzaykpIHtcbiA1OTI6XHRcdFx0XHRcdFx0cmV0diA9IC1FQlVTWTtcbiA1OTM6XHRcdFx0XHRcdFx0YnJlYWs7XG4gNTk0Olx0XHRcdFx0XHR9XG4gNTk1Olx0XHRcdFx0XHQvKiBBIFNZTiB0aGF0IGZvdW5kIHRoaXMgc29ja2V0IHdoaWxlIGl0IHdhc1xuIDU5NjpcdFx0XHRcdFx0ICogc3RpbGwgbGlzdGVuaW5nIG1heSBub3QgYmUgY291bnRlZCB5ZXQuXG4gNTk3Olx0XHRcdFx0XHQgKi9cbiA1OTg6XHRcdFx0XHRcdHN5bmNocm9uaXplX3JjdSgpO1xuIDU5OTpcdFx0XHRcdFx0aWYgKGluZXRfY3NrX3JlcXNrX3F1ZXVlX2xlbihzaykpIHtcbiA2MDA6XHRcdFx0XHRcdFx0cmV0diA9IC1FQlVTWTtcbiA2MDE6XHRcdFx0XHRcdFx0YnJlYWs7XG4gNjAyOlx0XHRcdFx0XHR9XG4gNjAzOlx0XHRcdFx0fVxuIDYwNDpcdFxuIDYwNTpcdFx0XHRcdF9faXB2Nl9zb2NrX21jX2Nsb3NlKHNrKTtcbiA2MDY6XHRcdFx0XHRfX2lwdjZfc29ja19hY19jbG9zZShzayk7XG4gNjA3Olx0XG4gNjA4Olx0XHRcdFx0aWYgKHNrLVx1MDAzZXNrX3Byb3RvY29sID09IElQUFJPVE9fVENQKSB7XG4gNjA5Olx0XHRcdFx0XHRzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDQ6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODk2OQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIEkmIzM5O20gcmVhZHkgdG8gc3VtbWFyaXplIHRoZSBwcm92aWRlZCB0ZXh0IGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIGEgaGlnaCBsZXZlbCBvZiBleHBlcnRpc2UgaW4gdGhlIGZpZWxkLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtsbCBhcHByb2FjaCBpdDoKCioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50KioKCkFscmlnaHQsIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGUgaW5wdXQuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgJiMzNDtvcHRpb24mIzM0OyByZWZlcnMgdG8sIGJlY2F1c2UgdGhlIHJlc3Qgb2YgdGhlIHRob3VnaHQgcHJvY2VzcyBoaW5nZXMgb24gY2xhcmlmeWluZyB0aGF0IHZhcmlhYmxlLiBJJiMzOTtsbCBuZWVkIHRvIHBhcnNlIHRoZSBjb250ZXh0IHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIGFuZCByZWxldmFuY2Ugb2YgdGhlICYjMzQ7b3B0aW9uJiMzNDsuIEl0IGNvdWxkIGJlIGEgaHlwb3RoZXNpcywgYSB2YXJpYWJsZSBwYXJhbWV0ZXIgd2l0aGluIGFuIGVxdWF0aW9uLCBhIGRlY2lzaW9uIHBvaW50IGluIGFuIGV4cGVyaW1lbnQsIG9yIGV2ZW4gYSBwcm9zcGVjdGl2ZSBzb2x1dGlvbiB0byBhIHByb2JsZW0uIFRoZSBkZWdyZWUgb2YgdGhlIGNvbXBsZXhpdHkgdmFyaWVzIGJ5IHRoZSBjb250ZXh0LiBJIHdpbGwgd29yayB3aXRoIHRoZSBjb250ZXh0IHRvIGRldGVybWluZSB0aGUgYmVzdCBhcHByb2FjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwNDozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY2L2lwdjZfc29ja2dsdWUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTQwOlx0XHRcdGlmIChSRUFEX09OQ0Uoc2stXHUwMDNlc2tfYm91bmRfZGV2X2lmKSlcbiA1NDE6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA1NDI6XHRcbiA1NDM6XHRcdFx0V1JJVEVfT05DRShucC1cdTAwM2V1Y2FzdF9vaWYsIGlmaW5kZXgpO1xuIDU0NDpcdFx0XHRyZXR1cm4gMDtcbiA1NDU6XHRcdH1cbiA1NDY6XHRcdH1cbiA1NDc6XHRcbiA1NDg6XHRcdHNvY2tvcHRfbG9ja19zb2NrKHNrKTtcbiA1NDk6XHRcbiA1NTA6XHRcdC8qIEFub3RoZXIgdGhyZWFkIGhhcyBjb252ZXJ0ZWQgdGhlIHNvY2tldCBpbnRvIElQdjQgd2l0aFxuIDU1MTpcdFx0ICogSVBWNl9BRERSRk9STSBjb25jdXJyZW50bHkuXG4gNTUyOlx0XHQgKi9cbiA1NTM6XHRcdGlmICh1bmxpa2VseShzay1cdTAwM2Vza19mYW1pbHkgIT0gQUZfSU5FVDYpKVxuIDU1NDpcdFx0XHRnb3RvIHVubG9jaztcbiA1NTU6XHRcbiA1NTY6XHRcdHN3aXRjaCAob3B0bmFtZSkge1xuIDU1NzpcdFxuIDU1ODpcdFx0Y2FzZSBJUFY2X0FERFJGT1JNOlxuIDU1OTpcdFx0XHRpZiAob3B0bGVuIFx1MDAzYyBzaXplb2YoaW50KSlcbiA1NjA6XHRcdFx0XHRnb3RvIGVfaW52YWw7XG4gNTYxOlx0XHRcdGlmICh2YWwgPT0gUEZfSU5FVCkge1xuIDU2MjpcdFx0XHRcdGlmIChzay1cdTAwM2Vza190eXBlID09IFNPQ0tfUkFXKVxuIDU2MzpcdFx0XHRcdFx0YnJlYWs7XG4gNTY0Olx0XG4gNTY1Olx0XHRcdFx0aWYgKHNrLVx1MDAzZXNrX3Byb3RvY29sID09IElQUFJPVE9fVURQKSB7XG4gNTY2Olx0XHRcdFx0XHRpZiAodWRwX3NrKHNrKS1cdTAwM2VwZW5kaW5nID09IEFGX0lORVQ2KSB7XG4gNTY3Olx0XHRcdFx0XHRcdHJldHYgPSAtRUJVU1k7XG4gNTY4Olx0XHRcdFx0XHRcdGJyZWFrO1xuIDU2OTpcdFx0XHRcdFx0fVxuIDU3MDpcdFx0XHRcdH0gZWxzZSBpZiAoc2stXHUwMDNlc2tfcHJvdG9jb2wgPT0gSVBQUk9UT19UQ1ApIHtcbiA1NzE6XHRcdFx0XHRcdGlmIChzay1cdTAwM2Vza19wcm90ICE9IFx1MDAyNnRjcHY2X3Byb3QpIHtcbiA1NzI6XHRcdFx0XHRcdFx0cmV0diA9IC1FQlVTWTtcbiA1NzM6XHRcdFx0XHRcdFx0YnJlYWs7XG4gNTc0Olx0XHRcdFx0XHR9XG4gNTc1Olx0XHRcdFx0fSBlbHNlIHtcbiA1NzY6XHRcdFx0XHRcdGJyZWFrO1xuIDU3NzpcdFx0XHRcdH1cbiA1Nzg6XHRcbiA1Nzk6XHRcdFx0XHRpZiAoc2stXHUwMDNlc2tfc3RhdGUgIT0gVENQX0VTVEFCTElTSEVEKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDQ6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTcxNgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDE1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFRDUCBMaXN0ZW4gU29ja2V0IEhhbmRsaW5nIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgZGVmaW5pdGVseSBkZWFsaW5nIHdpdGggYElQVjZfQUREUkZPUk1gLiBJIHNlZSBpdCByaWdodCB0aGVyZS4gSXQgbG9va3MgbGlrZSB0aGUgbWFpbiBhcmVhIG9mIGZvY3VzIGlzIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgaW5jb21pbmcgcGFja2V0cyBvbiBsaXN0ZW5pbmcgVENQIHNvY2tldHMuIFdlJiMzOTtyZSB0YWxraW5nIHNwZWNpZmljYWxseSBhYm91dCB0aGUgZnVuY3Rpb25zIGB0Y3BfcmN2X2xpc3Rlbl9zdGF0ZV9wcm9jZXNzYCwgYHRjcF92NF9yY3ZfbGlzdGVuYCwgYW5kIGB0Y3BfdjZfcmN2X2xpc3RlbmAuIFRoYXQgbWFrZXMgc2Vuc2U7IGluY29taW5nIGNvbm5lY3Rpb25zIGhhdmUgdG8gYmUgcHJvcGVybHkgcm91dGVkIHRvIGEgc3BlY2lmaWMgc29ja2V0LgoKQmV5b25kIHRoZSBwYWNrZXQgcHJvY2Vzc2luZyBmdW5jdGlvbnMsIHRoaXMgYWxzbyB0b3VjaGVzIG9uIGBJUFY2X0FERFJGT1JNYCBzZXRzb2Nrb3B0IGhhbmRsaW5nIGZvciBUQ1Agc29ja2V0cy4gVGhpcyBwcm9iYWJseSBhZmZlY3RzIGhvdyB3ZSBkZWFsIHdpdGggdGhlIGZhbWlseSBvZiBjb25uZWN0aW9ucyBiZWluZyBhY2NlcHRlZCwgd2hpY2ggaXMgY3JpdGljYWwuCgpJIG5lZWQgdG8gZm9jdXMgb24gYSBmZXcga2V5IHN5bWJvbHMgaGVyZTogYHRjcF9yY3ZfbGlzdGVuX3N0YXRlX3Byb2Nlc3NgIGJlY2F1c2UgdGhhdCYjMzk7cyB0aGUgaGVhcnQgb2Ygc3RhdGUgdHJhbnNpdGlvbnMgZm9yIGluY29taW5nIGNvbm5lY3Rpb25zLCBhbmQgYGRvX2lwdjZfc2V0c29ja29wdGAgd2hpY2ggbGlrZWx5IGRlYWxzIHdpdGggY29uZmlndXJhdGlvbnMuCgpPZiBjb3Vyc2UsIHRoZSBgSVBWNmAgY29uZmlnIG9wdGlvbiBpcyBpbnZvbHZlZCwgcGFydGljdWxhcmx5IGluIHRoZSBgZG9faXB2Nl9zZXRzb2Nrb3B0YCBhbmQgYHRjcF92Nl9yY3ZfbGlzdGVuYCBmdW5jdGlvbnMuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgYElQVjZgIGlzIHRoZSAqcmlnaHQqIGNvbmZpZyBvcHRpb24sIGJ1dCBJJiMzOTttIGJldHRpbmcgdGhhdCYjMzk7cyB0aGUgcmlnaHQgb25lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwNDozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSVBWNiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvS2NvbmZpZy01LVxubmV0L2lwdjYvS2NvbmZpZzo2Om1lbnVjb25maWcgSVBWNlxubmV0L2lwdjYvS2NvbmZpZy03LVx0Ym9vbCBcJiMzNDtUaGUgSVB2NiBwcm90b2NvbFwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWc9MTk9aWYgSVBWNlxubmV0L2lwdjYvS2NvbmZpZy0yMC1cbm5ldC9pcHY2L0tjb25maWc6MjE6Y29uZmlnIElQVjZfUk9VVEVSX1BSRUZcbm5ldC9pcHY2L0tjb25maWctMjItXHRib29sIFwmIzM0O0lQdjY6IFJvdXRlciBQcmVmZXJlbmNlIChSRkMgNDE5MSkgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMzAtXG5uZXQvaXB2Ni9LY29uZmlnOjMxOmNvbmZpZyBJUFY2X1JPVVRFX0lORk9cbm5ldC9pcHY2L0tjb25maWctMzItXHRib29sIFwmIzM0O0lQdjY6IFJvdXRlIEluZm9ybWF0aW9uIChSRkMgNDE5MSkgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMzgtXG5uZXQvaXB2Ni9LY29uZmlnOjM5OmNvbmZpZyBJUFY2X09QVElNSVNUSUNfREFEXG5uZXQvaXB2Ni9LY29uZmlnLTQwLVx0Ym9vbCBcJiMzNDtJUHY2OiBFbmFibGUgUkZDIDQ0MjkgT3B0aW1pc3RpYyBEQURcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnPTEwMj1jb25maWcgSU5FVDZfSVBDT01QXG4tLVxubmV0L2lwdjYvS2NvbmZpZy0xMTEtXG5uZXQvaXB2Ni9LY29uZmlnOjExMjpjb25maWcgSVBWNl9NSVA2XG5uZXQvaXB2Ni9LY29uZmlnLTExMy1cdHRyaXN0YXRlIFwmIzM0O0lQdjY6IE1vYmlsaXR5XCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0xMTktXG5uZXQvaXB2Ni9LY29uZmlnOjEyMDpjb25maWcgSVBWNl9JTEFcbm5ldC9pcHY2L0tjb25maWctMTIxLVx0dHJpc3RhdGUgXCYjMzQ7SVB2NjogSWRlbnRpZmllciBMb2NhdG9yIEFkZHJlc3NpbmcgKElMQSlcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnPTE0Nj1jb25maWcgSU5FVDZfVFVOTkVMXG4tLVxubmV0L2lwdjYvS2NvbmZpZy0xNDktXG5uZXQvaXB2Ni9LY29uZmlnOjE1MDpjb25maWcgSVBWNl9WVElcbm5ldC9pcHY2L0tjb25maWctMTUxLVx0dHJpc3RhdGUgXCYjMzQ7VmlydHVhbCAoc2VjdXJlKSBJUHY2OiB0dW5uZWxpbmdcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTE2MS1cbm5ldC9pcHY2L0tjb25maWc6MTYyOmNvbmZpZyBJUFY2X1NJVFxubmV0L2lwdjYvS2NvbmZpZy0xNjMtXHR0cmlzdGF0ZSBcJiMzNDtJUHY2OiBJUHY2LWluLUlQdjQgdHVubmVsIChTSVQgZHJpdmVyKVwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMTc2LVxubmV0L2lwdjYvS2NvbmZpZzoxNzc6Y29uZmlnIElQVjZfU0lUXzZSRFxubmV0L2lwdjYvS2NvbmZpZy0xNzgtXHRib29sIFwmIzM0O0lQdjY6IElQdjYgUmFwaWQgRGVwbG95bWVudCAoNlJEKVwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMTk1LVxubmV0L2lwdjYvS2NvbmZpZzoxOTY6Y29uZmlnIElQVjZfTkRJU0NfTk9ERVRZUEVcbm5ldC9pcHY2L0tjb25maWctMTk3LVx0Ym9vbFxubmV0L2lwdjYvS2NvbmZpZy0xOTgtXG5uZXQvaXB2Ni9LY29uZmlnOjE5OTpjb25maWcgSVBWNl9UVU5ORUxcbm5ldC9pcHY2L0tjb25maWctMjAwLVx0dHJpc3RhdGUgXCYjMzQ7SVB2NjogSVAtaW4tSVB2NiB0dW5uZWwgKFJGQzI0NzMpXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0yMDktXG5uZXQvaXB2Ni9LY29uZmlnOjIxMDpjb25maWcgSVBWNl9HUkVcbm5ldC9pcHY2L0tjb25maWctMjExLVx0dHJpc3RhdGUgXCYjMzQ7SVB2NjogR1JFIHR1bm5lbFwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMjI3LVxubmV0L2lwdjYvS2NvbmZpZzoyMjg6Y29uZmlnIElQVjZfRk9VXG5uZXQvaXB2Ni9LY29uZmlnLTIyOS1cdHRyaXN0YXRlXG4tLVxubmV0L2lwdjYvS2NvbmZpZy0yMzEtXG5uZXQvaXB2Ni9LY29uZmlnOjIzMjpjb25maWcgSVBWNl9GT1VfVFVOTkVMXG5uZXQvaXB2Ni9LY29uZmlnLTIzMy1cdHRyaXN0YXRlXG4tLVxubmV0L2lwdjYvS2NvbmZpZy0yMzYtXG5uZXQvaXB2Ni9LY29uZmlnOjIzNzpjb25maWcgSVBWNl9NVUxUSVBMRV9UQUJMRVNcbm5ldC9pcHY2L0tjb25maWctMjM4LVx0Ym9vbCBcJiMzNDtJUHY2OiBNdWx0aXBsZSBSb3V0aW5nIFRhYmxlc1wmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMjQyLVxubmV0L2lwdjYvS2NvbmZpZzoyNDM6Y29uZmlnIElQVjZfU1VCVFJFRVNcbm5ldC9pcHY2L0tjb25maWctMjQ0LVx0Ym9vbCBcJiMzNDtJUHY2OiBzb3VyY2UgYWRkcmVzcyBiYXNlZCByb3V0aW5nXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0yNTYtXG5uZXQvaXB2Ni9LY29uZmlnOjI1Nzpjb25maWcgSVBWNl9NUk9VVEVcbm5ldC9pcHY2L0tjb25maWctMjU4LVx0Ym9vbCBcJiMzNDtJUHY2OiBtdWx0aWNhc3Qgcm91dGluZ1wmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMjY0LVxubmV0L2lwdjYvS2NvbmZpZzoyNjU6Y29uZmlnIElQVjZfTVJPVVRFX01VTFRJUExFX1RBQkxFU1xubmV0L2lwdjYvS2NvbmZpZy0yNjYtXHRib29sIFwmIzM0O0lQdjY6IG11bHRpY2FzdCBwb2xpY3kgcm91dGluZ1wmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMjc4LVxubmV0L2lwdjYvS2NvbmZpZzoyNzk6Y29uZmlnIElQVjZfUElNU01fVjJcbm5ldC9pcHY2L0tjb25maWctMjgwLVx0Ym9vbCBcJiMzNDtJUHY2OiBQSU0tU00gdmVyc2lvbiAyIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTI4NS1cbm5ldC9pcHY2L0tjb25maWc6Mjg2OmNvbmZpZyBJUFY2X1NFRzZfTFdUVU5ORUxcbm5ldC9pcHY2L0tjb25maWctMjg3LVx0Ym9vbCBcJiMzNDtJUHY2OiBTZWdtZW50IFJvdXRpbmcgSGVhZGVyIGVuY2Fwc3VsYXRpb24gc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMjk5LVxubmV0L2lwdjYvS2NvbmZpZzozMDA6Y29uZmlnIElQVjZfU0VHNl9ITUFDXG5uZXQvaXB2Ni9LY29uZmlnLTMwMS1cdGJvb2wgXCYjMzQ7SVB2NjogU2VnbWVudCBSb3V0aW5nIEhNQUMgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMzExLVxubmV0L2lwdjYvS2NvbmZpZzozMTI6Y29uZmlnIElQVjZfU0VHNl9CUEZcbm5ldC9pcHY2L0tjb25maWctMzEzLVx0ZGVmX2Jvb2wgeVxuLS1cbm5ldC9pcHY2L0tjb25maWctMzE2LVxubmV0L2lwdjYvS2NvbmZpZzozMTc6Y29uZmlnIElQVjZfUlBMX0xXVFVOTkVMXG5uZXQvaXB2Ni9LY29uZmlnLTMxOC1cdGJvb2wgXCYjMzQ7SVB2NjogUlBMIFNvdXJjZSBSb3V0aW5nIEhlYWRlciBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0zMjctXG5uZXQvaXB2Ni9LY29uZmlnOjMyODpjb25maWcgSVBWNl9JT0FNNl9MV1RVTk5FTFxubmV0L2lwdjYvS2NvbmZpZy0zMjktXHRib29sIFwmIzM0O0lQdjY6IElPQU0gUHJlLWFsbG9jYXRlZCBUcmFjZSBpbnNlcnRpb24gc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwNDozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTczMQoJCQkJCQkJb3V0cHV0OiAxNjkKCQkJCQkJCXRob3VnaHRzOiAzODIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgRnV6emluZyBTdHJhdGVneTogVGFyZ2V0aW5nIFRDUCBMaXN0ZW5pbmcgU29ja2V0cyB3aXRoIElQdjYgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyB0aGUgYElQVjZgIGNvbmZpZyBpcyBkZWZpbml0ZWx5IHJlbGV2YW50IGhlcmUuIE15IGluaXRpYWwgcmV2aWV3IG9mIHRoZSBjb2RlIGhhcyBoaWdobGlnaHRlZCBzZXZlcmFsIGtleSBmdW5jdGlvbnMgdG8gZm9jdXMgbXkgZnV6emluZyBlZmZvcnRzIG9uLiBJJiMzOTt2ZSBwaW5wb2ludGVkIGB0Y3BfcmN2X2xpc3Rlbl9zdGF0ZV9wcm9jZXNzYCwgYGRvX2lwdjZfc2V0c29ja29wdGAsIGB0Y3BfdjRfcmN2YCwgYW5kIGB0Y3BfdjZfcmN2YCBhcyB0aGUgYXJlYXMgb2YgaW50ZXJlc3QuCgpJbW1lZGlhdGVseSwgSSYjMzk7bSBkaXNtaXNzaW5nIGB0Y3BfdjRfcmN2YCBhbmQgYHRjcF92Nl9yY3ZgIOKAkyB0aG9zZSBhcmUgaG90LXBhdGggZnVuY3Rpb25zLiBGdXp6aW5nIHRob3NlIGRpcmVjdGx5IGlzIGxpa2VseSB0byBiZSBub2lzeSBhbmQgZ2VuZXJhdGUgYSBsb3Qgb2YgZmFsc2UgcG9zaXRpdmVzLCB3aGljaCBpcyBub3QgaWRlYWwuIEJ1dCB0aGF0IGRvZXNuJiMzOTt0IG1lYW4gSSB3b24mIzM5O3QgaW5kaXJlY3RseSB0ZXN0IHRoZW0uCgpgdGNwX3Jjdl9saXN0ZW5fc3RhdGVfcHJvY2Vzc2AgbG9va3MgcHJvbWlzaW5nLCB0aG91Z2guIFRoZSBzYW1lIGlzIHRydWUgZm9yIGBkb19pcHY2X3NldHNvY2tvcHRgLiBJdCBsb29rcyBsaWtlIGBza19jbG9uZWAgaXMgbW9kaWZpZWQgdG9vLCBidXQgSSYjMzk7bSBzZXR0aW5nIGl0IGFzaWRlIGJlY2F1c2UgdGhhdCYjMzk7cyBtb3JlIG9mIGEgZ2VuZXJhbCBmdW5jdGlvbi4gSXQmIzM5O3MgbGVzcyBsaWtlbHkgdG8gZXhwb3NlIHZ1bG5lcmFiaWxpdGllcyBzcGVjaWZpYyB0byB0aGlzIHBhdGNoLgoKVGhlIG5leHQgcXVlc3Rpb246IGFyZSBgdGNwX3Jjdl9saXN0ZW5fc3RhdGVfcHJvY2Vzc2AgYW5kIGBkb19pcHY2X3NldHNvY2tvcHRgIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2U/IFllcywgaW4gYm90aCBjYXNlcy4gSSBjYW4gdHJpZ2dlciBgdGNwX3Jjdl9saXN0ZW5fc3RhdGVfcHJvY2Vzc2AgYnkgc2VuZGluZyBUQ1AgcGFja2V0cyB0byBhIGxpc3RlbmluZyBzb2NrZXQsIGFuZCBJIGNhbiB0cmlnZ2VyIGBkb19pcHY2X3NldHNvY2tvcHRgIGJ5IGNhbGxpbmcgYHNldHNvY2tvcHRgIHdpdGggYElQVjZfQUREUkZPUk1gIG9uIGFuIElQdjYgc29ja2V0LiBUaGVzZSBhcmUgaWRlYWwgdGFyZ2V0cy4KCkVzc2VudGlhbGx5LCB0aGlzIHBhdGNoIG1vZGlmaWVzIGhvdyBUQ1AgbGlzdGVuaW5nIHNvY2tldHMgaGFuZGxlIHBhY2tldHMgYW5kIGludHJvZHVjZXMgbG9ja2xlc3MgcmVjZWl2ZSBwYXRocy4gSXQgYWxzbyBhZGRzIG5ldyBjaGVja3MgaW4gYGRvX2lwdjZfc2V0c29ja29wdGAgd2hlbiB5b3UgZGVhbCB3aXRoIElQdjYgc29ja2V0IG9wdGlvbnMgYW5kIHNvY2tldHMgd2hpY2ggaGF2ZSBwZW5kaW5nIGNvbm5lY3Rpb24gcmVxdWVzdHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgY29yZSBUQ1Agc3RhY2sgYW5kIElQdjYgc29ja2V0IG9wdGlvbnMuIFRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIG5ldHdvcmsgdHJhZmZpYyBhbmQgYXJlIG15IGtleSB0YXJnZXRzIGZvciBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwNDozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBWNiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RjcF9yY3ZfbGlzdGVuX3N0YXRlX3Byb2Nlc3MmIzM0OywKICAgICYjMzQ7ZG9faXB2Nl9zZXRzb2Nrb3B0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIFRDUCBsaXN0ZW5pbmcgc29ja2V0IHBhY2tldCBwcm9jZXNzaW5nIGJ5IGludHJvZHVjaW5nIGB0Y3BfcmN2X2xpc3Rlbl9zdGF0ZV9wcm9jZXNzYCBhbmQgbG9ja2xlc3MgbGlzdGVuIHJlY2VpdmUgcGF0aHMgKGB0Y3BfdjRfcmN2X2xpc3RlbmAsIGB0Y3BfdjZfcmN2X2xpc3RlbmApLiBJdCBhbHNvIGFkZHMgY2hlY2tzIGluIGBkb19pcHY2X3NldHNvY2tvcHRgIGZvciBgSVBWNl9BRERSRk9STWAgb24gVENQIHNvY2tldHMgd2l0aCBwZW5kaW5nIGNvbm5lY3Rpb24gcmVxdWVzdHMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUgVENQIHN0YWNrIGFuZCBJUHY2IHNvY2tldCBvcHRpb25zLCByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIGFuZCBuZXR3b3JrIHRyYWZmaWMsIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUFY2JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGNwX3Jjdl9saXN0ZW5fc3RhdGVfcHJvY2VzcyYjMzQ7LAogICAgJiMzNDtkb19pcHY2X3NldHNvY2tvcHQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgVENQIGxpc3RlbmluZyBzb2NrZXQgcGFja2V0IHByb2Nlc3NpbmcgYnkgaW50cm9kdWNpbmcgYHRjcF9yY3ZfbGlzdGVuX3N0YXRlX3Byb2Nlc3NgIGFuZCBsb2NrbGVzcyBsaXN0ZW4gcmVjZWl2ZSBwYXRocyAoYHRjcF92NF9yY3ZfbGlzdGVuYCwgYHRjcF92Nl9yY3ZfbGlzdGVuYCkuIEl0IGFsc28gYWRkcyBjaGVja3MgaW4gYGRvX2lwdjZfc2V0c29ja29wdGAgZm9yIGBJUFY2X0FERFJGT1JNYCBvbiBUQ1Agc29ja2V0cyB3aXRoIHBlbmRpbmcgY29ubmVjdGlvbiByZXF1ZXN0cy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgY29yZSBUQ1Agc3RhY2sgYW5kIElQdjYgc29ja2V0IG9wdGlvbnMsIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgYW5kIG5ldHdvcmsgdHJhZmZpYywgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDA0OjM3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDQ6Mzc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW1wbGVtZW50cyBsb2NrbGVzcyBUQ1AgbGlzdGVuZXIgcHJvY2Vzc2luZyBhbmQgZml4ZXMgc2V2ZXJhbCBpc3N1ZXMgcmVsYXRlZCB0byBzb2NrZXQgY2xvbmluZyBhbmQgc3RhdGUgaW5oZXJpdGFuY2UgKGUuZy4sIHJlc2V0dGluZyBgc2tfdHNxX2ZsYWdzYCwgYHBhY2tldHNfb3V0YCwgYW5kIGBwaW5ldDZgIGluIGNsb25lZCBzb2NrZXRzKS4gXG5cbjEuIFRoZSBmaWVsZHMgYmVpbmcgZXhwbGljaXRseSB6ZXJvZWQgb3Igc2V0IHRvIE5VTEwgaW4gYHNrX2Nsb25lYCBhbmQgYHRjcF9jcmVhdGVfb3BlbnJlcV9jaGlsZGAgZG8gbm90IHJlcHJlc2VudCB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhleSBhcmUgYWxyZWFkeSBmdWxseSBpbml0aWFsaXplZCB2aWEgYHNvY2tfY29weWAgKHdoaWNoIGNvcGllcyB0aGUgcGFyZW50IHNvY2tldCYjMzk7cyBzdGF0ZSkuIFRoZSBjaGFuZ2VzIG1lcmVseSBwcmV2ZW50IHRoZSBjaGlsZCBzb2NrZXQgZnJvbSBpbmhlcml0aW5nIHN0YWxlIG9yIGluY29ycmVjdCB2YWx1ZXMgZnJvbSB0aGUgbGlzdGVuZXIuXG4yLiBUaGUgbG9ja2xlc3MgbGlzdGVuZXIgcHJvY2Vzc2luZyAoYHRjcF92NF9yY3ZfbGlzdGVuYCkgaW50cm9kdWNlcyBjb25jdXJyZW5jeSBjaGFuZ2VzLiBBbnkgcmVzdWx0aW5nIGJ1Z3Mgd291bGQgYmUgZGF0YSByYWNlcyAoY2F1Z2h0IGJ5IEtDU0FOKSBvciB1c2UtYWZ0ZXItZnJlZS9tZW1vcnkgY29ycnVwdGlvbiAoY2F1Z2h0IGJ5IEtBU0FOKS5cbjMuIFRoZSBgSVBWNl9BRERSRk9STWAgYW5kIGBkb19pcHY2X3NldHNvY2tvcHRgIGNoYW5nZXMgYWRkcmVzcyBsb2dpYyBidWdzIGFuZCBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW9zLCB3aGljaCBhcmUgd2VsbCB3aXRoaW4gdGhlIGRvbWFpbiBvZiBLQVNBTi5cblxuVGhlcmUgYXJlIG5vIG5ldyBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm8gbmV3IGFsbG9jYXRpb25zIGxlZnQgdW5pbml0aWFsaXplZCwgYW5kIG5vIGNoYW5nZXMgdG8gYm91bmRzIGNoZWNraW5nIHRoYXQgd291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4Y2U1ZDU2YzA2Zjk2ODZlMzk4Y2VhNzc4OWU1MTVmYmYzMWI1YWQ4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMjQgMDQ6Mzc6MTEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC90Y3AuaCBiL2luY2x1ZGUvbmV0L3RjcC5oCmluZGV4IDJjNWI4ODk1MzBiNTUuLmFkZDQzOGQ2NTYxYmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3RjcC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L3RjcC5oCkBAIC0zOTIsNiAmIzQzOzM5Miw4IEBAIHZvaWQgdGNwX3dyaXRlX3RpbWVyX2hhbmRsZXIoc3RydWN0IHNvY2sgKnNrKTsKIHZvaWQgdGNwX2RlbGFja190aW1lcl9oYW5kbGVyKHN0cnVjdCBzb2NrICpzayk7CiBpbnQgdGNwX2lvY3RsKHN0cnVjdCBzb2NrICpzaywgaW50IGNtZCwgaW50ICprYXJnKTsKIGVudW0gc2tiX2Ryb3BfcmVhc29uIHRjcF9yY3Zfc3RhdGVfcHJvY2VzcyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpOwomIzQzO2VudW0gc2tiX2Ryb3BfcmVhc29uIHRjcF9yY3ZfbGlzdGVuX3N0YXRlX3Byb2Nlc3Moc3RydWN0IHNvY2sgKnNrLAomIzQzOwkJCQkJCSAgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiB2b2lkIHRjcF9yY3ZfZXN0YWJsaXNoZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIHZvaWQgdGNwX3JjdmJ1Zl9ncm93KHN0cnVjdCBzb2NrICpzaywgdTMyIG5ld3ZhbCk7CiB2b2lkIHRjcF9yY3Zfc3BhY2VfYWRqdXN0KHN0cnVjdCBzb2NrICpzayk7CmRpZmYgLS1naXQgYS9uZXQvY29yZS9zb2NrLmMgYi9uZXQvY29yZS9zb2NrLmMKaW5kZXggMWFkNDE5MDRkYjI1Yi4uMDZmYmIxOTgyNGUyNiAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvc29jay5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL3NvY2suYwpAQCAtMjQ3OSw3ICYjNDM7MjQ3OSw3IEBAIHN0YXRpYyB2b2lkIHNrX2luaXRfY29tbW9uKHN0cnVjdCBzb2NrICpzaykKIHN0cnVjdCBzb2NrICpza19jbG9uZShjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IGdmcF90IHByaW9yaXR5LAogCQkgICAgICBib29sIGxvY2spCiB7Ci0Jc3RydWN0IHByb3RvICpwcm90ID0gUkVBRF9PTkNFKHNrLSZndDtza19wcm90KTsKJiM0MzsJc3RydWN0IHByb3RvICpwcm90ID0gc2stJmd0O3NrX3Byb3RfY3JlYXRvcjsKIAlzdHJ1Y3Qgc2tfZmlsdGVyICpmaWx0ZXI7CiAJYm9vbCBpc19jaGFyZ2VkID0gdHJ1ZTsKIAlzdHJ1Y3Qgc29jayAqbmV3c2s7CkBAIC0yNTMzLDYgJiM0MzsyNTMzLDcgQEAgc3RydWN0IHNvY2sgKnNrX2Nsb25lKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgY29uc3QgZ2ZwX3QgcHJpb3JpdHksCiAJbmV3c2stJmd0O3NrX3Jlc2VydmVkX21lbSAgPSAwOwogCURFQlVHX05FVF9XQVJOX09OX09OQ0UobmV3c2stJmd0O3NrX2Ryb3BfY291bnRlcnMpOwogCXNrX2Ryb3BzX3Jlc2V0KG5ld3NrKTsKJiM0MzsJbmV3c2stJmd0O3NrX3RzcV9mbGFncwk9IDA7CiAJbmV3c2stJmd0O3NrX3NlbmRfaGVhZAk9IE5VTEw7CiAJbmV3c2stJmd0O3NrX3VzZXJsb2Nrcwk9IHNrLSZndDtza191c2VybG9ja3MgJmFtcDsgflNPQ0tfQklORFBPUlRfTE9DSzsKIAlhdG9taWNfc2V0KCZhbXA7bmV3c2stJmd0O3NrX3pja2V5LCAwKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9pbnB1dC5jIGIvbmV0L2lwdjQvdGNwX2lucHV0LmMKaW5kZXggMGY2MGExZGJmOTI3NC4uNzdhZjE4ZmJhNjZiNCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX2lucHV0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvdGNwX2lucHV0LmMKQEAgLTcxNDEsNiAmIzQzOzcxNDEsNDIgQEAgc3RhdGljIHZvaWQgdGNwX3Jjdl9zeW5yZWN2X3N0YXRlX2Zhc3RvcGVuKHN0cnVjdCBzb2NrICpzaykKIAl0Y3BfcmVhcm1fcnRvKHNrKTsKIH0KIAomIzQzO2VudW0gc2tiX2Ryb3BfcmVhc29uIHRjcF9yY3ZfbGlzdGVuX3N0YXRlX3Byb2Nlc3Moc3RydWN0IHNvY2sgKnNrLAomIzQzOwkJCQkJCSAgc3RydWN0IHNrX2J1ZmYgKnNrYikKJiM0Mzt7CiYjNDM7CWNvbnN0IHN0cnVjdCB0Y3BoZHIgKnRoID0gdGNwX2hkcihza2IpOwomIzQzOwlTS0JfRFIocmVhc29uKTsKJiM0MzsKJiM0MzsJaWYgKHRoLSZndDthY2spCiYjNDM7CQlyZXR1cm4gU0tCX0RST1BfUkVBU09OX1RDUF9GTEFHUzsKJiM0MzsKJiM0MzsJaWYgKHRoLSZndDtyc3QpIHsKJiM0MzsJCVNLQl9EUl9TRVQocmVhc29uLCBUQ1BfUkVTRVQpOwomIzQzOwkJZ290byBkaXNjYXJkOwomIzQzOwl9CiYjNDM7CWlmICh0aC0mZ3Q7c3luKSB7CiYjNDM7CQlpZiAodGgtJmd0O2ZpbikgewomIzQzOwkJCVNLQl9EUl9TRVQocmVhc29uLCBUQ1BfRkxBR1MpOwomIzQzOwkJCWdvdG8gZGlzY2FyZDsKJiM0MzsJCX0KJiM0MzsJCS8qIEl0IGlzIHBvc3NpYmxlIHRoYXQgd2UgcHJvY2VzcyBTWU4gcGFja2V0cyBmcm9tIGJhY2tsb2csCiYjNDM7CQkgKiBzbyB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0byBkaXNhYmxlIEJIIGFuZCBSQ1UgcmlnaHQgdGhlcmUuCiYjNDM7CQkgKi8KJiM0MzsJCXJjdV9yZWFkX2xvY2soKTsKJiM0MzsJCWxvY2FsX2JoX2Rpc2FibGUoKTsKJiM0MzsJCWluZXRfY3NrKHNrKS0mZ3Q7aWNza19hZl9vcHMtJmd0O2Nvbm5fcmVxdWVzdChzaywgc2tiKTsKJiM0MzsJCWxvY2FsX2JoX2VuYWJsZSgpOwomIzQzOwkJcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CiYjNDM7CQljb25zdW1lX3NrYihza2IpOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsJU0tCX0RSX1NFVChyZWFzb24sIFRDUF9GTEFHUyk7CiYjNDM7ZGlzY2FyZDoKJiM0MzsJdGNwX2Ryb3BfcmVhc29uKHNrLCBza2IsIHJlYXNvbik7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIC8qCiAgKglUaGlzIGZ1bmN0aW9uIGltcGxlbWVudHMgdGhlIHJlY2VpdmluZyBwcm9jZWR1cmUgb2YgUkZDIDc5MyBmb3IKICAqCWFsbCBzdGF0ZXMgZXhjZXB0IEVTVEFCTElTSEVEIGFuZCBUSU1FX1dBSVQuCkBAIC03MTUyLDcgJiM0Mzs3MTg4LDYgQEAgZW51bSBza2JfZHJvcF9yZWFzb24KIHRjcF9yY3Zfc3RhdGVfcHJvY2VzcyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7Ci0Jc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spOwogCWNvbnN0IHN0cnVjdCB0Y3BoZHIgKnRoID0gdGNwX2hkcihza2IpOwogCXN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcTsKIAlpbnQgcXVldWVkID0gMDsKQEAgLTcxNjQsMzIgJiM0Mzs3MTk5LDcgQEAgdGNwX3Jjdl9zdGF0ZV9wcm9jZXNzKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAkJZ290byBkaXNjYXJkOwogCiAJY2FzZSBUQ1BfTElTVEVOOgotCQlpZiAodGgtJmd0O2FjaykKLQkJCXJldHVybiBTS0JfRFJPUF9SRUFTT05fVENQX0ZMQUdTOwotCi0JCWlmICh0aC0mZ3Q7cnN0KSB7Ci0JCQlTS0JfRFJfU0VUKHJlYXNvbiwgVENQX1JFU0VUKTsKLQkJCWdvdG8gZGlzY2FyZDsKLQkJfQotCQlpZiAodGgtJmd0O3N5bikgewotCQkJaWYgKHRoLSZndDtmaW4pIHsKLQkJCQlTS0JfRFJfU0VUKHJlYXNvbiwgVENQX0ZMQUdTKTsKLQkJCQlnb3RvIGRpc2NhcmQ7Ci0JCQl9Ci0JCQkvKiBJdCBpcyBwb3NzaWJsZSB0aGF0IHdlIHByb2Nlc3MgU1lOIHBhY2tldHMgZnJvbSBiYWNrbG9nLAotCQkJICogc28gd2UgbmVlZCB0byBtYWtlIHN1cmUgdG8gZGlzYWJsZSBCSCBhbmQgUkNVIHJpZ2h0IHRoZXJlLgotCQkJICovCi0JCQlyY3VfcmVhZF9sb2NrKCk7Ci0JCQlsb2NhbF9iaF9kaXNhYmxlKCk7Ci0JCQlpY3NrLSZndDtpY3NrX2FmX29wcy0mZ3Q7Y29ubl9yZXF1ZXN0KHNrLCBza2IpOwotCQkJbG9jYWxfYmhfZW5hYmxlKCk7Ci0JCQlyY3VfcmVhZF91bmxvY2soKTsKLQotCQkJY29uc3VtZV9za2Ioc2tiKTsKLQkJCXJldHVybiAwOwotCQl9Ci0JCVNLQl9EUl9TRVQocmVhc29uLCBUQ1BfRkxBR1MpOwotCQlnb3RvIGRpc2NhcmQ7CiYjNDM7CQlyZXR1cm4gdGNwX3Jjdl9saXN0ZW5fc3RhdGVfcHJvY2Vzcyhzaywgc2tiKTsKIAogCWNhc2UgVENQX1NZTl9TRU5UOgogCQl0cC0mZ3Q7cnhfb3B0LnNhd190c3RhbXAgPSAwOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2lwdjQuYyBiL25ldC9pcHY0L3RjcF9pcHY0LmMKaW5kZXggMTkwYzdhZjRjZjkyMy4uMmZhODk1ODM4MGE1YiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX2lwdjQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC90Y3BfaXB2NC5jCkBAIC0xNzE0LDYgJiM0MzsxNzE0LDE0IEBAIHN0cnVjdCBzb2NrICp0Y3BfdjRfc3luX3JlY3Zfc29jayhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsCiAJCWluZXRfY3NrKG5ld3NrKS0mZ3Q7aWNza19leHRfaGRyX2xlbiA9IGluZXRfb3B0LSZndDtvcHQub3B0bGVuOwogCWF0b21pY19zZXQoJmFtcDtuZXdpbmV0LSZndDtpbmV0X2lkLCBnZXRfcmFuZG9tX3UxNigpKTsKIAomIzQzOyNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KQomIzQzOwkvKiBOZXZlciBpbmhlcml0IHRoZSBsaXN0ZW5lciYjMzk7cyBpcHY2X3BpbmZvOyBJUFY2X0FERFJGT1JNIGxlYXZlcyBpdCBzZXQKJiM0MzsJICogb24gYW4gQUZfSU5FVCBzb2NrZXQuICB0Y3BfdjZfbWFwcGVkX2NoaWxkX2luaXQoKSBpbnN0YWxscyBvdXIgb3duLgomIzQzOwkgKi8KJiM0MzsJbmV3aW5ldC0mZ3Q7cGluZXQ2ID0gTlVMTDsKJiM0MzsJbmV3aW5ldC0mZ3Q7aXB2Nl9mbF9saXN0ID0gTlVMTDsKJiM0MzsjZW5kaWYKJiM0MzsKIAkvKiBTZXQgVG9TIG9mIHRoZSBuZXcgc29ja2V0IGJhc2VkIHVwb24gdGhlIHZhbHVlIG9mIGluY29taW5nIFNZTi4KIAkgKiBFQ1QgYml0cyBhcmUgc2V0IGxhdGVyIGluIHRjcF9pbml0X3RyYW5zZmVyKCkuCiAJICovCkBAIC0xODIwLDcgJiM0MzsxODI4LDcgQEAgdTE2IHRjcF92NF9nZXRfc3luY29va2llKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGlwaGRyICppcGgsCiBJTkRJUkVDVF9DQUxMQUJMRV9ERUNMQVJFKHN0cnVjdCBkc3RfZW50cnkgKmlwdjRfZHN0X2NoZWNrKHN0cnVjdCBkc3RfZW50cnkgKiwKIAkJCQkJCQkgICB1MzIpKTsKIC8qIFRoZSBzb2NrZXQgbXVzdCBoYXZlIGl0JiMzOTtzIHNwaW5sb2NrIGhlbGQgd2hlbiB3ZSBnZXQKLSAqIGhlcmUsIHVubGVzcyBpdCBpcyBhIFRDUF9MSVNURU4gc29ja2V0LgomIzQzOyAqIGhlcmUuCiAgKgogICogV2UgaGF2ZSBhIHBvdGVudGlhbCBkb3VibGUtbG9jayBjYXNlIGhlcmUsIHNvIGV2ZW4gd2hlbgogICogZG9pbmcgYmFja2xvZyBwcm9jZXNzaW5nIHdlIHVzZSB0aGUgQkggbG9ja2luZyBzY2hlbWUuCkBAIC0xODk4LDYgJiM0MzsxOTA2LDQ2IEBAIGludCB0Y3BfdjRfZG9fcmN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAlnb3RvIGRpc2NhcmQ7CiB9CiAKJiM0MzsvKiBAc2sgaXMgbm90IGxvY2tlZCBoZXJlIGFuZCBjYW4gbGVhdmUgVENQX0xJU1RFTjsgZG8gbm90IHRlc3Qgc2tfc3RhdGUuICovCiYjNDM7c3RhdGljIG5vaW5saW5lIGludCB0Y3BfdjRfcmN2X2xpc3RlbihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCiYjNDM7ewomIzQzOwllbnVtIHNrYl9kcm9wX3JlYXNvbiByZWFzb247CiYjNDM7CXN0cnVjdCBzb2NrICpuc2s7CiYjNDM7CiYjNDM7CXJlYXNvbiA9IHBzcF9za19yeF9wb2xpY3lfY2hlY2soc2ssIHNrYik7CiYjNDM7CWlmIChyZWFzb24pCiYjNDM7CQlnb3RvIGVycl9kaXNjYXJkOwomIzQzOwomIzQzOwlpZiAodGNwX2NoZWNrc3VtX2NvbXBsZXRlKHNrYikpCiYjNDM7CQlnb3RvIGNzdW1fZXJyOwomIzQzOwomIzQzOwluc2sgPSB0Y3BfdjRfY29va2llX2NoZWNrKHNrLCBza2IpOwomIzQzOwlpZiAoIW5zaykKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlpZiAobnNrICE9IHNrKSB7CiYjNDM7CQlyZWFzb24gPSB0Y3BfY2hpbGRfcHJvY2VzcyhzaywgbnNrLCBza2IpOwomIzQzOwkJc29ja19wdXQobnNrKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXJlYXNvbiA9IHRjcF9yY3ZfbGlzdGVuX3N0YXRlX3Byb2Nlc3Moc2ssIHNrYik7CiYjNDM7CX0KJiM0MzsJaWYgKCFyZWFzb24pCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJdGNwX3Y0X3NlbmRfcmVzZXQoc2ssIHNrYiwgc2tfcnN0X2NvbnZlcnRfZHJvcF9yZWFzb24ocmVhc29uKSk7CiYjNDM7ZGlzY2FyZDoKJiM0MzsJc2tfc2tiX3JlYXNvbl9kcm9wKHNrLCBza2IsIHJlYXNvbik7CiYjNDM7CXJldHVybiAwOwomIzQzOwomIzQzO2NzdW1fZXJyOgomIzQzOwlyZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fVENQX0NTVU07CiYjNDM7CXRyYWNlX3RjcF9iYWRfY3N1bShza2IpOwomIzQzOwlUQ1BfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgVENQX01JQl9DU1VNRVJST1JTKTsKJiM0MztlcnJfZGlzY2FyZDoKJiM0MzsJVENQX0lOQ19TVEFUUyhzb2NrX25ldChzayksIFRDUF9NSUJfSU5FUlJTKTsKJiM0MzsJZ290byBkaXNjYXJkOwomIzQzO30KJiM0MzsKIGVudW0gc2tiX2Ryb3BfcmVhc29uIHRjcF9hZGRfYmFja2xvZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJdTMyIHRhaWxfZ3NvX3NpemUsIHRhaWxfZ3NvX3NlZ3M7CkBAIC0yMjM1LDcgJiM0MzsyMjgzLDcgQEAgaW50IHRjcF92NF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYikKIAlza2ItJmd0O2RldiA9IE5VTEw7CiAKIAlpZiAoc2stJmd0O3NrX3N0YXRlID09IFRDUF9MSVNURU4pIHsKLQkJcmV0ID0gdGNwX3Y0X2RvX3Jjdihzaywgc2tiKTsKJiM0MzsJCXJldCA9IHRjcF92NF9yY3ZfbGlzdGVuKHNrLCBza2IpOwogCQlnb3RvIHB1dF9hbmRfcmV0dXJuOwogCX0KIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jIGIvbmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jCmluZGV4IDEyMjU0ZTZlYjJmMzQuLjJmZGUxOTZkZDMwMmYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9taW5pc29ja3MuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMKQEAgLTU5MSw2ICYjNDM7NTkxLDcgQEAgc3RydWN0IHNvY2sgKnRjcF9jcmVhdGVfb3BlbnJlcV9jaGlsZChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssCiAJbmV3dHAtJmd0O3RvdGFsX3JldHJhbnMgPSByZXEtJmd0O251bV9yZXRyYW5zOwogCiAJdGNwX2luaXRfeG1pdF90aW1lcnMobmV3c2spOwomIzQzOwluZXd0cC0mZ3Q7b3V0X29mX29yZGVyX3F1ZXVlID0gUkJfUk9PVDsKIAlXUklURV9PTkNFKG5ld3RwLSZndDt3cml0ZV9zZXEsIG5ld3RwLSZndDtwdXNoZWRfc2VxID0gdHJlcS0mZ3Q7c250X2lzbiAmIzQzOyAxKTsKIAogCWlmIChzb2NrX2ZsYWcobmV3c2ssIFNPQ0tfS0VFUE9QRU4pKQpAQCAtNjU5LDYgJiM0Mzs2NjAsMTIgQEAgc3RydWN0IHNvY2sgKnRjcF9jcmVhdGVfb3BlbnJlcV9jaGlsZChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssCiAJdGNwX2Vjbl9vcGVucmVxX2NoaWxkKG5ld3NrLCByZXEsIHNrYik7CiAJbmV3dHAtJmd0O2Zhc3RvcGVuX3JlcSA9IE5VTEw7CiAJUkNVX0lOSVRfUE9JTlRFUihuZXd0cC0mZ3Q7ZmFzdG9wZW5fcnNrLCBOVUxMKTsKJiM0MzsJbmV3dHAtJmd0O3BhY2tldHNfb3V0ID0gMDsKJiM0MzsJbmV3dHAtJmd0O3JldHJhbnNfb3V0ID0gMDsKJiM0MzsJbmV3dHAtJmd0O3NhY2tlZF9vdXQgPSAwOwomIzQzOwluZXd0cC0mZ3Q7bG9zdF9vdXQgPSAwOwomIzQzOwluZXd0cC0mZ3Q7cmV0cmFuc21pdF9za2JfaGludCA9IE5VTEw7CiYjNDM7CW5ld3RwLSZndDtoaWdoZXN0X3NhY2sgPSBOVUxMOwogCiAJbmV3dHAtJmd0O2JwZl9jaGdfY2NfaW5wcm9ncmVzcyA9IDA7CiAJdGNwX2JwZl9jbG9uZShzaywgbmV3c2spOwpAQCAtOTc0LDcgJiM0Mzs5ODEsNyBAQCBzdHJ1Y3Qgc29jayAqdGNwX2NoZWNrX3JlcShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsCiAJCXRjcF9yZXNldChzaywgc2tiKTsKIAl9CiAJaWYgKCFmYXN0b3BlbikgewotCQlib29sIHVubGlua2VkID0gaW5ldF9jc2tfcmVxc2tfcXVldWVfZHJvcChzaywgcmVxKTsKJiM0MzsJCWJvb2wgdW5saW5rZWQgPSBpbmV0X2Nza19yZXFza19xdWV1ZV9kcm9wKHJlcS0mZ3Q7cnNrX2xpc3RlbmVyLCByZXEpOwogCiAJCWlmICh1bmxpbmtlZCkKIAkJCV9fTkVUX0lOQ19TVEFUUyhzb2NrX25ldChzayksIExJTlVYX01JQl9FTUJSWU9OSUNSU1RTKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2FmX2luZXQ2LmMgYi9uZXQvaXB2Ni9hZl9pbmV0Ni5jCmluZGV4IDI4MjkxMmExMTk5OTkuLjY4YjMzMGY2OTQxZDAgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2FmX2luZXQ2LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvYWZfaW5ldDYuYwpAQCAtNDc5LDYgJiM0Mzs0NzksMTAgQEAgdm9pZCBpbmV0Nl9jbGVhbnVwX3NvY2soc3RydWN0IHNvY2sgKnNrKQogCXN0cnVjdCBza19idWZmICpza2I7CiAJc3RydWN0IGlwdjZfdHhvcHRpb25zICpvcHQ7CiAKJiM0MzsJLyogQUZfSU5FVCBjaGlsZCBvZiBhbiBJUFY2X0FERFJGT1JNJiMzOTtlZCBsaXN0ZW5lcjogbm90aGluZyBvZiBpdHMgb3duLiAqLwomIzQzOwlpZiAoIW5wKQomIzQzOwkJcmV0dXJuOwomIzQzOwogCS8qIFJlbGVhc2Ugcnggb3B0aW9ucyAqLwogCiAJc2tiID0geGNoZygmYW1wO25wLSZndDtwa3RvcHRpb25zLCBOVUxMKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwdjZfc29ja2dsdWUuYyBiL25ldC9pcHY2L2lwdjZfc29ja2dsdWUuYwppbmRleCBiNGM5Nzc0MzRjMmUwLi42ZDJkZDlhZTQ2YTk2IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jCkBAIC01ODcsNiAmIzQzOzU4NywyMSBAQCBpbnQgZG9faXB2Nl9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwKIAkJCQlicmVhazsKIAkJCX0KIAomIzQzOwkJCWlmIChzay0mZ3Q7c2tfcHJvdG9jb2wgPT0gSVBQUk9UT19UQ1ApIHsKJiM0MzsJCQkJaWYgKGluZXRfY3NrX3JlcXNrX3F1ZXVlX2xlbihzaykpIHsKJiM0MzsJCQkJCXJldHYgPSAtRUJVU1k7CiYjNDM7CQkJCQlicmVhazsKJiM0MzsJCQkJfQomIzQzOwkJCQkvKiBBIFNZTiB0aGF0IGZvdW5kIHRoaXMgc29ja2V0IHdoaWxlIGl0IHdhcwomIzQzOwkJCQkgKiBzdGlsbCBsaXN0ZW5pbmcgbWF5IG5vdCBiZSBjb3VudGVkIHlldC4KJiM0MzsJCQkJICovCiYjNDM7CQkJCXN5bmNocm9uaXplX3JjdSgpOwomIzQzOwkJCQlpZiAoaW5ldF9jc2tfcmVxc2tfcXVldWVfbGVuKHNrKSkgewomIzQzOwkJCQkJcmV0diA9IC1FQlVTWTsKJiM0MzsJCQkJCWJyZWFrOwomIzQzOwkJCQl9CiYjNDM7CQkJfQomIzQzOwogCQkJX19pcHY2X3NvY2tfbWNfY2xvc2Uoc2spOwogCQkJX19pcHY2X3NvY2tfYWNfY2xvc2Uoc2spOwogCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni90Y3BfaXB2Ni5jIGIvbmV0L2lwdjYvdGNwX2lwdjYuYwppbmRleCA5ZTkxNTViMWIzYWE3Li5hMmRlZGE5YTQyNThiIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni90Y3BfaXB2Ni5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L3RjcF9pcHY2LmMKQEAgLTE1NTYsNyAmIzQzOzE1NTYsNyBAQCBzdGF0aWMgc3RydWN0IHNvY2sgKnRjcF92Nl9zeW5fcmVjdl9zb2NrKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKgogSU5ESVJFQ1RfQ0FMTEFCTEVfREVDTEFSRShzdHJ1Y3QgZHN0X2VudHJ5ICppcHY0X2RzdF9jaGVjayhzdHJ1Y3QgZHN0X2VudHJ5ICosCiAJCQkJCQkJICAgdTMyKSk7CiAvKiBUaGUgc29ja2V0IG11c3QgaGF2ZSBpdCYjMzk7cyBzcGlubG9jayBoZWxkIHdoZW4gd2UgZ2V0Ci0gKiBoZXJlLCB1bmxlc3MgaXQgaXMgYSBUQ1BfTElTVEVOIHNvY2tldC4KJiM0MzsgKiBoZXJlLgogICoKICAqIFdlIGhhdmUgYSBwb3RlbnRpYWwgZG91YmxlLWxvY2sgY2FzZSBoZXJlLCBzbyBldmVuIHdoZW4KICAqIGRvaW5nIGJhY2tsb2cgcHJvY2Vzc2luZyB3ZSB1c2UgdGhlIEJIIGxvY2tpbmcgc2NoZW1lLgpAQCAtMTcwNCw2ICYjNDM7MTcwNCw0NiBAQCBpbnQgdGNwX3Y2X2RvX3JjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MzsvKiBAc2sgaXMgbm90IGxvY2tlZCBoZXJlIGFuZCBjYW4gbGVhdmUgVENQX0xJU1RFTjsgZG8gbm90IHRlc3Qgc2tfc3RhdGUuICovCiYjNDM7c3RhdGljIG5vaW5saW5lIGludCB0Y3BfdjZfcmN2X2xpc3RlbihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCiYjNDM7ewomIzQzOwllbnVtIHNrYl9kcm9wX3JlYXNvbiByZWFzb247CiYjNDM7CXN0cnVjdCBzb2NrICpuc2s7CiYjNDM7CiYjNDM7CXJlYXNvbiA9IHBzcF9za19yeF9wb2xpY3lfY2hlY2soc2ssIHNrYik7CiYjNDM7CWlmIChyZWFzb24pCiYjNDM7CQlnb3RvIGVycl9kaXNjYXJkOwomIzQzOwomIzQzOwlpZiAodGNwX2NoZWNrc3VtX2NvbXBsZXRlKHNrYikpCiYjNDM7CQlnb3RvIGNzdW1fZXJyOwomIzQzOwomIzQzOwluc2sgPSB0Y3BfdjZfY29va2llX2NoZWNrKHNrLCBza2IpOwomIzQzOwlpZiAoIW5zaykKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlpZiAobnNrICE9IHNrKSB7CiYjNDM7CQlyZWFzb24gPSB0Y3BfY2hpbGRfcHJvY2VzcyhzaywgbnNrLCBza2IpOwomIzQzOwkJc29ja19wdXQobnNrKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXJlYXNvbiA9IHRjcF9yY3ZfbGlzdGVuX3N0YXRlX3Byb2Nlc3Moc2ssIHNrYik7CiYjNDM7CX0KJiM0MzsJaWYgKCFyZWFzb24pCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJdGNwX3Y2X3NlbmRfcmVzZXQoc2ssIHNrYiwgc2tfcnN0X2NvbnZlcnRfZHJvcF9yZWFzb24ocmVhc29uKSk7CiYjNDM7ZGlzY2FyZDoKJiM0MzsJc2tfc2tiX3JlYXNvbl9kcm9wKHNrLCBza2IsIHJlYXNvbik7CiYjNDM7CXJldHVybiAwOwomIzQzOwomIzQzO2NzdW1fZXJyOgomIzQzOwlyZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fVENQX0NTVU07CiYjNDM7CXRyYWNlX3RjcF9iYWRfY3N1bShza2IpOwomIzQzOwlUQ1BfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgVENQX01JQl9DU1VNRVJST1JTKTsKJiM0MztlcnJfZGlzY2FyZDoKJiM0MzsJVENQX0lOQ19TVEFUUyhzb2NrX25ldChzayksIFRDUF9NSUJfSU5FUlJTKTsKJiM0MzsJZ290byBkaXNjYXJkOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIHRjcF92Nl9maWxsX2NiKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBpcHY2aGRyICpoZHIsCiAJCQkgICBjb25zdCBzdHJ1Y3QgdGNwaGRyICp0aCkKIHsKQEAgLTE4OTEsNyAmIzQzOzE5MzEsNyBAQCBJTkRJUkVDVF9DQUxMQUJMRV9TQ09QRSBpbnQgdGNwX3Y2X3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCXNrYi0mZ3Q7ZGV2ID0gTlVMTDsKIAogCWlmIChzay0mZ3Q7c2tfc3RhdGUgPT0gVENQX0xJU1RFTikgewotCQlyZXQgPSB0Y3BfdjZfZG9fcmN2KHNrLCBza2IpOwomIzQzOwkJcmV0ID0gdGNwX3Y2X3Jjdl9saXN0ZW4oc2ssIHNrYik7CiAJCWdvdG8gcHV0X2FuZF9yZXR1cm47CiAJfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAwNDozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NTUxCgkJCQkJCQlvdXRwdXQ6IDI5MwoJCQkJCQkJdGhvdWdodHM6IDI0ODQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQXNzZXNzbWVudDogVGhpcyBQYXRjaCBEb2VzbiYjMzk7dCBXYXJyYW50IEl0KioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoaXMgcGF0Y2guIEl0JiMzOTtzIG1vZGlmeWluZyBUQ1Agc29ja2V0IGhhbmRsaW5nLCBlc3BlY2lhbGx5IGFyb3VuZCB0aGUgYFRDUF9MSVNURU5gIHN0YXRlIGFuZCBzb2NrZXQgY2xvbmluZy4gSW5pdGlhbGx5LCBJIHRob3VnaHQgdGhpcyBtaWdodCBiZSBhIEtNU0FOIGNhbmRpZGF0ZSwgYnV0IGFmdGVyIGEgZGVlcCBkaXZlLCBJJiMzOTttIHByZXR0eSBjb25maWRlbnQgaXQmIzM5O3Mgbm90LgoKVGhlIHBhdGNoJiMzOTtzIGNvcmUgY2hhbmdlIGlzIHRvIG1ha2UgdGhlIFRDUCBsaXN0ZW5lciBwcm9jZXNzaW5nIGxvY2tsZXNzLCBwdWxsaW5nIHRoZSBsb2dpYyBvdXQgaW50byBgdGNwX3Y0X3Jjdl9saXN0ZW5gIGFuZCBgdGNwX3Y2X3Jjdl9saXN0ZW5gLiBUaGF0JiMzOTtzIGEgaHVnZSBzaGlmdCDigJMgaXQmIzM5O3MgYWxsIGFib3V0IGNvbmN1cnJlbmN5IG5vdy4gVGhlIGJpZyBkZWFsIGhlcmUgaXMgdGhlIHBvdGVudGlhbCBmb3IgcmFjZSBjb25kaXRpb25zIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgYmVjYXVzZSB3ZSYjMzk7cmUgdGFraW5nIGF3YXkgdGhhdCBsb2NrIHByb3RlY3Rpb24uIEhvd2V2ZXIsIHRoZXNlIGFyZSBwcmVjaXNlbHkgdGhlIGtpbmRzIG9mIHRoaW5ncyBLQ1NBTiAoZGF0YSByYWNlcykgYW5kIEtBU0FOIChVQUYsIG1lbW9yeSBjb3JydXB0aW9uKSBhcmUgYnVpbHQgdG8gY2F0Y2guIEtNU0FOIGlzbiYjMzk7dCB0aGUgcmlnaHQgdG9vbCBmb3IgdGhvc2UgdHlwZXMgb2YgY29uY3VycmVuY3kgaXNzdWVzLgoKVGhlcmUgYXJlIGFsc28gc2V2ZXJhbCBjaGFuZ2VzIHJlbGF0ZWQgdG8gc29ja2V0IGNsb25pbmcgKGBza19jbG9uZWAgYW5kIGB0Y3BfY3JlYXRlX29wZW5yZXFfY2hpbGRgKSwgbWFraW5nIHN1cmUgY2VydGFpbiBmaWVsZHMgYXJlIHJlc2V0IHdoZW4gYSBuZXcgc29ja2V0IGlzIGNyZWF0ZWQgZnJvbSB0aGUgbGlzdGVuZXIgc29ja2V0LiBJIHdhcyBjb25jZXJuZWQgYWJvdXQgdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gdGhlIGNsb25lZCBzb2NrZXQsIGJ1dCB0aGF0JiMzOTtzIG5vdCB0aGUgY2FzZS4gVGhlIGBzb2NrX2NvcHlgIGZ1bmN0aW9uICpmdWxseSogY29waWVzIHRoZSBwYXJlbnQgc29ja2V0JiMzOTtzIGRhdGEgdXNpbmcgYG1lbWNweWAuIFRoZSBwYXRjaCBpcyBzaW1wbHkgcmVzZXR0aW5nIHNvbWUgb2YgdGhlc2UgZmllbGRzIChsaWtlIGBza190c3FfZmxhZ3NgLCBgcGFja2V0c19vdXRgLCBhbmQgYHBpbmV0NmApIHRvIHRoZWlyIGluaXRpYWwgemVybyBzdGF0ZSBpbiB0aGUgY2hpbGQgc29ja2V0LiBJdCYjMzk7cyBhYm91dCBwcmV2ZW50aW5nIHRoZSBjaGlsZCBzb2NrZXQgZnJvbSBpbmhlcml0aW5nIHBvdGVudGlhbGx5IHN0YWxlIG9yIGluY29ycmVjdCB2YWx1ZXMgZnJvbSB0aGUgcGFyZW50LCBub3QgYWJvdXQgZGVhbGluZyB3aXRoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBTbywgdGhpcyBpc24mIzM5O3QgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWU7IGl0JiMzOTtzIGEgbG9naWMgYnVnIGZpeCwgb3IgYSBkZWZlbnNpdmUgbWVhc3VyZS4KCkZpbmFsbHksIHRoZSBmaXggZm9yIGBJUFY2X0FERFJGT1JNYCBhbmQgdGhlIGFkanVzdG1lbnRzIGluIGBkb19pcHY2X3NldHNvY2tvcHRgIHNwZWNpZmljYWxseSBzYWZlZ3VhcmQgYWdhaW5zdCBwb3RlbnRpYWwgZG91YmxlLWZyZWUgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyByZWxhdGVkIHRvIGBwaW5ldDZgLiBUaGlzIGZhbGxzIHNxdWFyZWx5IHdpdGhpbiBLQVNBTiYjMzk7cyBkZXRlY3Rpb24gY2FwYWJpbGl0aWVzLiBBbHNvLCBgZG9faXB2Nl9zZXRzb2Nrb3B0YCBzZWVtcyB0byBiZSBwcmV2ZW50aW5nIHNvY2tldCBvcHRpb25zIGZyb20gYmVpbmcgY2hhbmdlZCBkdXJpbmcgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50LCBsaWtlbHkgdG8gcHJldmVudCBtb3JlIHBvdGVudGlhbCBidWdzLgoKSW4gY29uY2x1c2lvbiwgbm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGludHJvZHVjZSwgbm9yIGV4cG9zZSwgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIFRoZSBwYXRjaCBmb2N1c2VzIG9uIGNvbmN1cnJlbmN5IChLQ1NBTi9LQVNBTikgYW5kIGNvcnJlY3RpbmcgbG9naWMvZGF0YSBmbG93IGlzc3VlcyBkdXJpbmcgY2xvbmluZyBhbmQgc3RhdGUgaW5oZXJpdGFuY2UgKEtBU0FOKS4gR2l2ZW4gdGhlICYjMzQ7cnVsZXMmIzM0OyBmb3IgZGV0ZXJtaW5pbmcgd2hldGhlciB0byBpbmNsdWRlIEtNU0FOIGluIHRlc3RpbmcsIHRoaXMgc2VlbXMgdG8gYmUgYSBoYXJkICYjMzQ7bm8mIzM0Oy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMDQ6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW1wbGVtZW50cyBsb2NrbGVzcyBUQ1AgbGlzdGVuZXIgcHJvY2Vzc2luZyBhbmQgZml4ZXMgc2V2ZXJhbCBpc3N1ZXMgcmVsYXRlZCB0byBzb2NrZXQgY2xvbmluZyBhbmQgc3RhdGUgaW5oZXJpdGFuY2UgKGUuZy4sIHJlc2V0dGluZyBgc2tfdHNxX2ZsYWdzYCwgYHBhY2tldHNfb3V0YCwgYW5kIGBwaW5ldDZgIGluIGNsb25lZCBzb2NrZXRzKS4gXG5cbjEuIFRoZSBmaWVsZHMgYmVpbmcgZXhwbGljaXRseSB6ZXJvZWQgb3Igc2V0IHRvIE5VTEwgaW4gYHNrX2Nsb25lYCBhbmQgYHRjcF9jcmVhdGVfb3BlbnJlcV9jaGlsZGAgZG8gbm90IHJlcHJlc2VudCB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhleSBhcmUgYWxyZWFkeSBmdWxseSBpbml0aWFsaXplZCB2aWEgYHNvY2tfY29weWAgKHdoaWNoIGNvcGllcyB0aGUgcGFyZW50IHNvY2tldCYjMzk7cyBzdGF0ZSkuIFRoZSBjaGFuZ2VzIG1lcmVseSBwcmV2ZW50IHRoZSBjaGlsZCBzb2NrZXQgZnJvbSBpbmhlcml0aW5nIHN0YWxlIG9yIGluY29ycmVjdCB2YWx1ZXMgZnJvbSB0aGUgbGlzdGVuZXIuXG4yLiBUaGUgbG9ja2xlc3MgbGlzdGVuZXIgcHJvY2Vzc2luZyAoYHRjcF92NF9yY3ZfbGlzdGVuYCkgaW50cm9kdWNlcyBjb25jdXJyZW5jeSBjaGFuZ2VzLiBBbnkgcmVzdWx0aW5nIGJ1Z3Mgd291bGQgYmUgZGF0YSByYWNlcyAoY2F1Z2h0IGJ5IEtDU0FOKSBvciB1c2UtYWZ0ZXItZnJlZS9tZW1vcnkgY29ycnVwdGlvbiAoY2F1Z2h0IGJ5IEtBU0FOKS5cbjMuIFRoZSBgSVBWNl9BRERSRk9STWAgYW5kIGBkb19pcHY2X3NldHNvY2tvcHRgIGNoYW5nZXMgYWRkcmVzcyBsb2dpYyBidWdzIGFuZCBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW9zLCB3aGljaCBhcmUgd2VsbCB3aXRoaW4gdGhlIGRvbWFpbiBvZiBLQVNBTi5cblxuVGhlcmUgYXJlIG5vIG5ldyBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm8gbmV3IGFsbG9jYXRpb25zIGxlZnQgdW5pbml0aWFsaXplZCwgYW5kIG5vIGNoYW5nZXMgdG8gYm91bmRzIGNoZWNraW5nIHRoYXQgd291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW1wbGVtZW50cyBsb2NrbGVzcyBUQ1AgbGlzdGVuZXIgcHJvY2Vzc2luZyBhbmQgZml4ZXMgc2V2ZXJhbCBpc3N1ZXMgcmVsYXRlZCB0byBzb2NrZXQgY2xvbmluZyBhbmQgc3RhdGUgaW5oZXJpdGFuY2UgKGUuZy4sIHJlc2V0dGluZyBgc2tfdHNxX2ZsYWdzYCwgYHBhY2tldHNfb3V0YCwgYW5kIGBwaW5ldDZgIGluIGNsb25lZCBzb2NrZXRzKS4gXG5cbjEuIFRoZSBmaWVsZHMgYmVpbmcgZXhwbGljaXRseSB6ZXJvZWQgb3Igc2V0IHRvIE5VTEwgaW4gYHNrX2Nsb25lYCBhbmQgYHRjcF9jcmVhdGVfb3BlbnJlcV9jaGlsZGAgZG8gbm90IHJlcHJlc2VudCB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhleSBhcmUgYWxyZWFkeSBmdWxseSBpbml0aWFsaXplZCB2aWEgYHNvY2tfY29weWAgKHdoaWNoIGNvcGllcyB0aGUgcGFyZW50IHNvY2tldCYjMzk7cyBzdGF0ZSkuIFRoZSBjaGFuZ2VzIG1lcmVseSBwcmV2ZW50IHRoZSBjaGlsZCBzb2NrZXQgZnJvbSBpbmhlcml0aW5nIHN0YWxlIG9yIGluY29ycmVjdCB2YWx1ZXMgZnJvbSB0aGUgbGlzdGVuZXIuXG4yLiBUaGUgbG9ja2xlc3MgbGlzdGVuZXIgcHJvY2Vzc2luZyAoYHRjcF92NF9yY3ZfbGlzdGVuYCkgaW50cm9kdWNlcyBjb25jdXJyZW5jeSBjaGFuZ2VzLiBBbnkgcmVzdWx0aW5nIGJ1Z3Mgd291bGQgYmUgZGF0YSByYWNlcyAoY2F1Z2h0IGJ5IEtDU0FOKSBvciB1c2UtYWZ0ZXItZnJlZS9tZW1vcnkgY29ycnVwdGlvbiAoY2F1Z2h0IGJ5IEtBU0FOKS5cbjMuIFRoZSBgSVBWNl9BRERSRk9STWAgYW5kIGBkb19pcHY2X3NldHNvY2tvcHRgIGNoYW5nZXMgYWRkcmVzcyBsb2dpYyBidWdzIGFuZCBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW9zLCB3aGljaCBhcmUgd2VsbCB3aXRoaW4gdGhlIGRvbWFpbiBvZiBLQVNBTi5cblxuVGhlcmUgYXJlIG5vIG5ldyBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm8gbmV3IGFsbG9jYXRpb25zIGxlZnQgdW5pbml0aWFsaXplZCwgYW5kIG5vIGNoYW5nZXMgdG8gYm91bmRzIGNoZWNraW5nIHRoYXQgd291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwNDozNzoxMy4xMzkxNTk4NjhaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NzAyMTM0MzI3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUFY2XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGNwX3Jjdl9saXN0ZW5fc3RhdGVfcHJvY2Vzc1wiLFxuICAgIFwiZG9faXB2Nl9zZXRzb2Nrb3B0XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbXBsZW1lbnRzIGxvY2tsZXNzIFRDUCBsaXN0ZW5lciBwcm9jZXNzaW5nIGFuZCBmaXhlcyBzZXZlcmFsIGlzc3VlcyByZWxhdGVkIHRvIHNvY2tldCBjbG9uaW5nIGFuZCBzdGF0ZSBpbmhlcml0YW5jZSAoZS5nLiwgcmVzZXR0aW5nIGBza190c3FfZmxhZ3NgLCBgcGFja2V0c19vdXRgLCBhbmQgYHBpbmV0NmAgaW4gY2xvbmVkIHNvY2tldHMpLiBcXG5cXG4xLiBUaGUgZmllbGRzIGJlaW5nIGV4cGxpY2l0bHkgemVyb2VkIG9yIHNldCB0byBOVUxMIGluIGBza19jbG9uZWAgYW5kIGB0Y3BfY3JlYXRlX29wZW5yZXFfY2hpbGRgIGRvIG5vdCByZXByZXNlbnQgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXkgYXJlIGFscmVhZHkgZnVsbHkgaW5pdGlhbGl6ZWQgdmlhIGBzb2NrX2NvcHlgICh3aGljaCBjb3BpZXMgdGhlIHBhcmVudCBzb2NrZXQncyBzdGF0ZSkuIFRoZSBjaGFuZ2VzIG1lcmVseSBwcmV2ZW50IHRoZSBjaGlsZCBzb2NrZXQgZnJvbSBpbmhlcml0aW5nIHN0YWxlIG9yIGluY29ycmVjdCB2YWx1ZXMgZnJvbSB0aGUgbGlzdGVuZXIuXFxuMi4gVGhlIGxvY2tsZXNzIGxpc3RlbmVyIHByb2Nlc3NpbmcgKGB0Y3BfdjRfcmN2X2xpc3RlbmApIGludHJvZHVjZXMgY29uY3VycmVuY3kgY2hhbmdlcy4gQW55IHJlc3VsdGluZyBidWdzIHdvdWxkIGJlIGRhdGEgcmFjZXMgKGNhdWdodCBieSBLQ1NBTikgb3IgdXNlLWFmdGVyLWZyZWUvbWVtb3J5IGNvcnJ1cHRpb24gKGNhdWdodCBieSBLQVNBTikuXFxuMy4gVGhlIGBJUFY2X0FERFJGT1JNYCBhbmQgYGRvX2lwdjZfc2V0c29ja29wdGAgY2hhbmdlcyBhZGRyZXNzIGxvZ2ljIGJ1Z3MgYW5kIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpb3MsIHdoaWNoIGFyZSB3ZWxsIHdpdGhpbiB0aGUgZG9tYWluIG9mIEtBU0FOLlxcblxcblRoZXJlIGFyZSBubyBuZXcgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vIG5ldyBhbGxvY2F0aW9ucyBsZWZ0IHVuaW5pdGlhbGl6ZWQsIGFuZCBubyBjaGFuZ2VzIHRvIGJvdW5kcyBjaGVja2luZyB0aGF0IHdvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBUQ1AgbGlzdGVuaW5nIHNvY2tldCBwYWNrZXQgcHJvY2Vzc2luZyBieSBpbnRyb2R1Y2luZyBgdGNwX3Jjdl9saXN0ZW5fc3RhdGVfcHJvY2Vzc2AgYW5kIGxvY2tsZXNzIGxpc3RlbiByZWNlaXZlIHBhdGhzIChgdGNwX3Y0X3Jjdl9saXN0ZW5gLCBgdGNwX3Y2X3Jjdl9saXN0ZW5gKS4gSXQgYWxzbyBhZGRzIGNoZWNrcyBpbiBgZG9faXB2Nl9zZXRzb2Nrb3B0YCBmb3IgYElQVjZfQUREUkZPUk1gIG9uIFRDUCBzb2NrZXRzIHdpdGggcGVuZGluZyBjb25uZWN0aW9uIHJlcXVlc3RzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBjb3JlIFRDUCBzdGFjayBhbmQgSVB2NiBzb2NrZXQgb3B0aW9ucywgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSBhbmQgbmV0d29yayB0cmFmZmljLCBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDQ6Mzc6MTMuMTM5MTYzODU4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTE1MDU3NDM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgOGNlNWQ1NmMwNmY5Njg2ZTM5OGNlYTc3ODllNTE1ZmJmMzFiNWFkOFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEF1ZyAyNCAwNDozNzoxMSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC90Y3AuaCBiL2luY2x1ZGUvbmV0L3RjcC5oXFxuaW5kZXggMmM1Yjg4OTUzMGI1NS4uYWRkNDM4ZDY1NjFiZSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL25ldC90Y3AuaFxcbisrKyBiL2luY2x1ZGUvbmV0L3RjcC5oXFxuQEAgLTM5Miw2ICszOTIsOCBAQCB2b2lkIHRjcF93cml0ZV90aW1lcl9oYW5kbGVyKHN0cnVjdCBzb2NrICpzayk7XFxuIHZvaWQgdGNwX2RlbGFja190aW1lcl9oYW5kbGVyKHN0cnVjdCBzb2NrICpzayk7XFxuIGludCB0Y3BfaW9jdGwoc3RydWN0IHNvY2sgKnNrLCBpbnQgY21kLCBpbnQgKmthcmcpO1xcbiBlbnVtIHNrYl9kcm9wX3JlYXNvbiB0Y3BfcmN2X3N0YXRlX3Byb2Nlc3Moc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG4rZW51bSBza2JfZHJvcF9yZWFzb24gdGNwX3Jjdl9saXN0ZW5fc3RhdGVfcHJvY2VzcyhzdHJ1Y3Qgc29jayAqc2ssXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuIHZvaWQgdGNwX3Jjdl9lc3RhYmxpc2hlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpO1xcbiB2b2lkIHRjcF9yY3ZidWZfZ3JvdyhzdHJ1Y3Qgc29jayAqc2ssIHUzMiBuZXd2YWwpO1xcbiB2b2lkIHRjcF9yY3Zfc3BhY2VfYWRqdXN0KHN0cnVjdCBzb2NrICpzayk7XFxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NvY2suYyBiL25ldC9jb3JlL3NvY2suY1xcbmluZGV4IDFhZDQxOTA0ZGIyNWIuLjA2ZmJiMTk4MjRlMjYgMTAwNjQ0XFxuLS0tIGEvbmV0L2NvcmUvc29jay5jXFxuKysrIGIvbmV0L2NvcmUvc29jay5jXFxuQEAgLTI0NzksNyArMjQ3OSw3IEBAIHN0YXRpYyB2b2lkIHNrX2luaXRfY29tbW9uKHN0cnVjdCBzb2NrICpzaylcXG4gc3RydWN0IHNvY2sgKnNrX2Nsb25lKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgY29uc3QgZ2ZwX3QgcHJpb3JpdHksXFxuIFxcdFxcdCAgICAgIGJvb2wgbG9jaylcXG4ge1xcbi1cXHRzdHJ1Y3QgcHJvdG8gKnByb3QgPSBSRUFEX09OQ0Uoc2stXFx1MDAzZXNrX3Byb3QpO1xcbitcXHRzdHJ1Y3QgcHJvdG8gKnByb3QgPSBzay1cXHUwMDNlc2tfcHJvdF9jcmVhdG9yO1xcbiBcXHRzdHJ1Y3Qgc2tfZmlsdGVyICpmaWx0ZXI7XFxuIFxcdGJvb2wgaXNfY2hhcmdlZCA9IHRydWU7XFxuIFxcdHN0cnVjdCBzb2NrICpuZXdzaztcXG5AQCAtMjUzMyw2ICsyNTMzLDcgQEAgc3RydWN0IHNvY2sgKnNrX2Nsb25lKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgY29uc3QgZ2ZwX3QgcHJpb3JpdHksXFxuIFxcdG5ld3NrLVxcdTAwM2Vza19yZXNlcnZlZF9tZW0gID0gMDtcXG4gXFx0REVCVUdfTkVUX1dBUk5fT05fT05DRShuZXdzay1cXHUwMDNlc2tfZHJvcF9jb3VudGVycyk7XFxuIFxcdHNrX2Ryb3BzX3Jlc2V0KG5ld3NrKTtcXG4rXFx0bmV3c2stXFx1MDAzZXNrX3RzcV9mbGFnc1xcdD0gMDtcXG4gXFx0bmV3c2stXFx1MDAzZXNrX3NlbmRfaGVhZFxcdD0gTlVMTDtcXG4gXFx0bmV3c2stXFx1MDAzZXNrX3VzZXJsb2Nrc1xcdD0gc2stXFx1MDAzZXNrX3VzZXJsb2NrcyBcXHUwMDI2IH5TT0NLX0JJTkRQT1JUX0xPQ0s7XFxuIFxcdGF0b21pY19zZXQoXFx1MDAyNm5ld3NrLVxcdTAwM2Vza196Y2tleSwgMCk7XFxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9pbnB1dC5jIGIvbmV0L2lwdjQvdGNwX2lucHV0LmNcXG5pbmRleCAwZjYwYTFkYmY5Mjc0Li43N2FmMThmYmE2NmI0IDEwMDY0NFxcbi0tLSBhL25ldC9pcHY0L3RjcF9pbnB1dC5jXFxuKysrIGIvbmV0L2lwdjQvdGNwX2lucHV0LmNcXG5AQCAtNzE0MSw2ICs3MTQxLDQyIEBAIHN0YXRpYyB2b2lkIHRjcF9yY3Zfc3lucmVjdl9zdGF0ZV9mYXN0b3BlbihzdHJ1Y3Qgc29jayAqc2spXFxuIFxcdHRjcF9yZWFybV9ydG8oc2spO1xcbiB9XFxuIFxcbitlbnVtIHNrYl9kcm9wX3JlYXNvbiB0Y3BfcmN2X2xpc3Rlbl9zdGF0ZV9wcm9jZXNzKHN0cnVjdCBzb2NrICpzayxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbit7XFxuK1xcdGNvbnN0IHN0cnVjdCB0Y3BoZHIgKnRoID0gdGNwX2hkcihza2IpO1xcbitcXHRTS0JfRFIocmVhc29uKTtcXG4rXFxuK1xcdGlmICh0aC1cXHUwMDNlYWNrKVxcbitcXHRcXHRyZXR1cm4gU0tCX0RST1BfUkVBU09OX1RDUF9GTEFHUztcXG4rXFxuK1xcdGlmICh0aC1cXHUwMDNlcnN0KSB7XFxuK1xcdFxcdFNLQl9EUl9TRVQocmVhc29uLCBUQ1BfUkVTRVQpO1xcbitcXHRcXHRnb3RvIGRpc2NhcmQ7XFxuK1xcdH1cXG4rXFx0aWYgKHRoLVxcdTAwM2VzeW4pIHtcXG4rXFx0XFx0aWYgKHRoLVxcdTAwM2VmaW4pIHtcXG4rXFx0XFx0XFx0U0tCX0RSX1NFVChyZWFzb24sIFRDUF9GTEFHUyk7XFxuK1xcdFxcdFxcdGdvdG8gZGlzY2FyZDtcXG4rXFx0XFx0fVxcbitcXHRcXHQvKiBJdCBpcyBwb3NzaWJsZSB0aGF0IHdlIHByb2Nlc3MgU1lOIHBhY2tldHMgZnJvbSBiYWNrbG9nLFxcbitcXHRcXHQgKiBzbyB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0byBkaXNhYmxlIEJIIGFuZCBSQ1UgcmlnaHQgdGhlcmUuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuK1xcdFxcdGxvY2FsX2JoX2Rpc2FibGUoKTtcXG4rXFx0XFx0aW5ldF9jc2soc2spLVxcdTAwM2VpY3NrX2FmX29wcy1cXHUwMDNlY29ubl9yZXF1ZXN0KHNrLCBza2IpO1xcbitcXHRcXHRsb2NhbF9iaF9lbmFibGUoKTtcXG4rXFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuK1xcbitcXHRcXHRjb25zdW1lX3NrYihza2IpO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbitcXHRTS0JfRFJfU0VUKHJlYXNvbiwgVENQX0ZMQUdTKTtcXG4rZGlzY2FyZDpcXG4rXFx0dGNwX2Ryb3BfcmVhc29uKHNrLCBza2IsIHJlYXNvbik7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiAvKlxcbiAgKlxcdFRoaXMgZnVuY3Rpb24gaW1wbGVtZW50cyB0aGUgcmVjZWl2aW5nIHByb2NlZHVyZSBvZiBSRkMgNzkzIGZvclxcbiAgKlxcdGFsbCBzdGF0ZXMgZXhjZXB0IEVTVEFCTElTSEVEIGFuZCBUSU1FX1dBSVQuXFxuQEAgLTcxNTIsNyArNzE4OCw2IEBAIGVudW0gc2tiX2Ryb3BfcmVhc29uXFxuIHRjcF9yY3Zfc3RhdGVfcHJvY2VzcyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuIHtcXG4gXFx0c3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7XFxuLVxcdHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTtcXG4gXFx0Y29uc3Qgc3RydWN0IHRjcGhkciAqdGggPSB0Y3BfaGRyKHNrYik7XFxuIFxcdHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcTtcXG4gXFx0aW50IHF1ZXVlZCA9IDA7XFxuQEAgLTcxNjQsMzIgKzcxOTksNyBAQCB0Y3BfcmN2X3N0YXRlX3Byb2Nlc3Moc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXHRcXHRnb3RvIGRpc2NhcmQ7XFxuIFxcbiBcXHRjYXNlIFRDUF9MSVNURU46XFxuLVxcdFxcdGlmICh0aC1cXHUwMDNlYWNrKVxcbi1cXHRcXHRcXHRyZXR1cm4gU0tCX0RST1BfUkVBU09OX1RDUF9GTEFHUztcXG4tXFxuLVxcdFxcdGlmICh0aC1cXHUwMDNlcnN0KSB7XFxuLVxcdFxcdFxcdFNLQl9EUl9TRVQocmVhc29uLCBUQ1BfUkVTRVQpO1xcbi1cXHRcXHRcXHRnb3RvIGRpc2NhcmQ7XFxuLVxcdFxcdH1cXG4tXFx0XFx0aWYgKHRoLVxcdTAwM2VzeW4pIHtcXG4tXFx0XFx0XFx0aWYgKHRoLVxcdTAwM2VmaW4pIHtcXG4tXFx0XFx0XFx0XFx0U0tCX0RSX1NFVChyZWFzb24sIFRDUF9GTEFHUyk7XFxuLVxcdFxcdFxcdFxcdGdvdG8gZGlzY2FyZDtcXG4tXFx0XFx0XFx0fVxcbi1cXHRcXHRcXHQvKiBJdCBpcyBwb3NzaWJsZSB0aGF0IHdlIHByb2Nlc3MgU1lOIHBhY2tldHMgZnJvbSBiYWNrbG9nLFxcbi1cXHRcXHRcXHQgKiBzbyB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0byBkaXNhYmxlIEJIIGFuZCBSQ1UgcmlnaHQgdGhlcmUuXFxuLVxcdFxcdFxcdCAqL1xcbi1cXHRcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuLVxcdFxcdFxcdGxvY2FsX2JoX2Rpc2FibGUoKTtcXG4tXFx0XFx0XFx0aWNzay1cXHUwMDNlaWNza19hZl9vcHMtXFx1MDAzZWNvbm5fcmVxdWVzdChzaywgc2tiKTtcXG4tXFx0XFx0XFx0bG9jYWxfYmhfZW5hYmxlKCk7XFxuLVxcdFxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbi1cXG4tXFx0XFx0XFx0Y29uc3VtZV9za2Ioc2tiKTtcXG4tXFx0XFx0XFx0cmV0dXJuIDA7XFxuLVxcdFxcdH1cXG4tXFx0XFx0U0tCX0RSX1NFVChyZWFzb24sIFRDUF9GTEFHUyk7XFxuLVxcdFxcdGdvdG8gZGlzY2FyZDtcXG4rXFx0XFx0cmV0dXJuIHRjcF9yY3ZfbGlzdGVuX3N0YXRlX3Byb2Nlc3Moc2ssIHNrYik7XFxuIFxcbiBcXHRjYXNlIFRDUF9TWU5fU0VOVDpcXG4gXFx0XFx0dHAtXFx1MDAzZXJ4X29wdC5zYXdfdHN0YW1wID0gMDtcXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2lwdjQuYyBiL25ldC9pcHY0L3RjcF9pcHY0LmNcXG5pbmRleCAxOTBjN2FmNGNmOTIzLi4yZmE4OTU4MzgwYTViIDEwMDY0NFxcbi0tLSBhL25ldC9pcHY0L3RjcF9pcHY0LmNcXG4rKysgYi9uZXQvaXB2NC90Y3BfaXB2NC5jXFxuQEAgLTE3MTQsNiArMTcxNCwxNCBAQCBzdHJ1Y3Qgc29jayAqdGNwX3Y0X3N5bl9yZWN2X3NvY2soY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRcXHRpbmV0X2NzayhuZXdzayktXFx1MDAzZWljc2tfZXh0X2hkcl9sZW4gPSBpbmV0X29wdC1cXHUwMDNlb3B0Lm9wdGxlbjtcXG4gXFx0YXRvbWljX3NldChcXHUwMDI2bmV3aW5ldC1cXHUwMDNlaW5ldF9pZCwgZ2V0X3JhbmRvbV91MTYoKSk7XFxuIFxcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG4rXFx0LyogTmV2ZXIgaW5oZXJpdCB0aGUgbGlzdGVuZXIncyBpcHY2X3BpbmZvOyBJUFY2X0FERFJGT1JNIGxlYXZlcyBpdCBzZXRcXG4rXFx0ICogb24gYW4gQUZfSU5FVCBzb2NrZXQuICB0Y3BfdjZfbWFwcGVkX2NoaWxkX2luaXQoKSBpbnN0YWxscyBvdXIgb3duLlxcbitcXHQgKi9cXG4rXFx0bmV3aW5ldC1cXHUwMDNlcGluZXQ2ID0gTlVMTDtcXG4rXFx0bmV3aW5ldC1cXHUwMDNlaXB2Nl9mbF9saXN0ID0gTlVMTDtcXG4rI2VuZGlmXFxuK1xcbiBcXHQvKiBTZXQgVG9TIG9mIHRoZSBuZXcgc29ja2V0IGJhc2VkIHVwb24gdGhlIHZhbHVlIG9mIGluY29taW5nIFNZTi5cXG4gXFx0ICogRUNUIGJpdHMgYXJlIHNldCBsYXRlciBpbiB0Y3BfaW5pdF90cmFuc2ZlcigpLlxcbiBcXHQgKi9cXG5AQCAtMTgyMCw3ICsxODI4LDcgQEAgdTE2IHRjcF92NF9nZXRfc3luY29va2llKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGlwaGRyICppcGgsXFxuIElORElSRUNUX0NBTExBQkxFX0RFQ0xBUkUoc3RydWN0IGRzdF9lbnRyeSAqaXB2NF9kc3RfY2hlY2soc3RydWN0IGRzdF9lbnRyeSAqLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICB1MzIpKTtcXG4gLyogVGhlIHNvY2tldCBtdXN0IGhhdmUgaXQncyBzcGlubG9jayBoZWxkIHdoZW4gd2UgZ2V0XFxuLSAqIGhlcmUsIHVubGVzcyBpdCBpcyBhIFRDUF9MSVNURU4gc29ja2V0LlxcbisgKiBoZXJlLlxcbiAgKlxcbiAgKiBXZSBoYXZlIGEgcG90ZW50aWFsIGRvdWJsZS1sb2NrIGNhc2UgaGVyZSwgc28gZXZlbiB3aGVuXFxuICAqIGRvaW5nIGJhY2tsb2cgcHJvY2Vzc2luZyB3ZSB1c2UgdGhlIEJIIGxvY2tpbmcgc2NoZW1lLlxcbkBAIC0xODk4LDYgKzE5MDYsNDYgQEAgaW50IHRjcF92NF9kb19yY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXHRnb3RvIGRpc2NhcmQ7XFxuIH1cXG4gXFxuKy8qIEBzayBpcyBub3QgbG9ja2VkIGhlcmUgYW5kIGNhbiBsZWF2ZSBUQ1BfTElTVEVOOyBkbyBub3QgdGVzdCBza19zdGF0ZS4gKi9cXG4rc3RhdGljIG5vaW5saW5lIGludCB0Y3BfdjRfcmN2X2xpc3RlbihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuK3tcXG4rXFx0ZW51bSBza2JfZHJvcF9yZWFzb24gcmVhc29uO1xcbitcXHRzdHJ1Y3Qgc29jayAqbnNrO1xcbitcXG4rXFx0cmVhc29uID0gcHNwX3NrX3J4X3BvbGljeV9jaGVjayhzaywgc2tiKTtcXG4rXFx0aWYgKHJlYXNvbilcXG4rXFx0XFx0Z290byBlcnJfZGlzY2FyZDtcXG4rXFxuK1xcdGlmICh0Y3BfY2hlY2tzdW1fY29tcGxldGUoc2tiKSlcXG4rXFx0XFx0Z290byBjc3VtX2VycjtcXG4rXFxuK1xcdG5zayA9IHRjcF92NF9jb29raWVfY2hlY2soc2ssIHNrYik7XFxuK1xcdGlmICghbnNrKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGlmIChuc2sgIT0gc2spIHtcXG4rXFx0XFx0cmVhc29uID0gdGNwX2NoaWxkX3Byb2Nlc3Moc2ssIG5zaywgc2tiKTtcXG4rXFx0XFx0c29ja19wdXQobnNrKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0cmVhc29uID0gdGNwX3Jjdl9saXN0ZW5fc3RhdGVfcHJvY2Vzcyhzaywgc2tiKTtcXG4rXFx0fVxcbitcXHRpZiAoIXJlYXNvbilcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHR0Y3BfdjRfc2VuZF9yZXNldChzaywgc2tiLCBza19yc3RfY29udmVydF9kcm9wX3JlYXNvbihyZWFzb24pKTtcXG4rZGlzY2FyZDpcXG4rXFx0c2tfc2tiX3JlYXNvbl9kcm9wKHNrLCBza2IsIHJlYXNvbik7XFxuK1xcdHJldHVybiAwO1xcbitcXG4rY3N1bV9lcnI6XFxuK1xcdHJlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9UQ1BfQ1NVTTtcXG4rXFx0dHJhY2VfdGNwX2JhZF9jc3VtKHNrYik7XFxuK1xcdFRDUF9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBUQ1BfTUlCX0NTVU1FUlJPUlMpO1xcbitlcnJfZGlzY2FyZDpcXG4rXFx0VENQX0lOQ19TVEFUUyhzb2NrX25ldChzayksIFRDUF9NSUJfSU5FUlJTKTtcXG4rXFx0Z290byBkaXNjYXJkO1xcbit9XFxuK1xcbiBlbnVtIHNrYl9kcm9wX3JlYXNvbiB0Y3BfYWRkX2JhY2tsb2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiB7XFxuIFxcdHUzMiB0YWlsX2dzb19zaXplLCB0YWlsX2dzb19zZWdzO1xcbkBAIC0yMjM1LDcgKzIyODMsNyBAQCBpbnQgdGNwX3Y0X3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXHRza2ItXFx1MDAzZWRldiA9IE5VTEw7XFxuIFxcbiBcXHRpZiAoc2stXFx1MDAzZXNrX3N0YXRlID09IFRDUF9MSVNURU4pIHtcXG4tXFx0XFx0cmV0ID0gdGNwX3Y0X2RvX3Jjdihzaywgc2tiKTtcXG4rXFx0XFx0cmV0ID0gdGNwX3Y0X3Jjdl9saXN0ZW4oc2ssIHNrYik7XFxuIFxcdFxcdGdvdG8gcHV0X2FuZF9yZXR1cm47XFxuIFxcdH1cXG4gXFxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9taW5pc29ja3MuYyBiL25ldC9pcHY0L3RjcF9taW5pc29ja3MuY1xcbmluZGV4IDEyMjU0ZTZlYjJmMzQuLjJmZGUxOTZkZDMwMmYgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jXFxuKysrIGIvbmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jXFxuQEAgLTU5MSw2ICs1OTEsNyBAQCBzdHJ1Y3Qgc29jayAqdGNwX2NyZWF0ZV9vcGVucmVxX2NoaWxkKGNvbnN0IHN0cnVjdCBzb2NrICpzayxcXG4gXFx0bmV3dHAtXFx1MDAzZXRvdGFsX3JldHJhbnMgPSByZXEtXFx1MDAzZW51bV9yZXRyYW5zO1xcbiBcXG4gXFx0dGNwX2luaXRfeG1pdF90aW1lcnMobmV3c2spO1xcbitcXHRuZXd0cC1cXHUwMDNlb3V0X29mX29yZGVyX3F1ZXVlID0gUkJfUk9PVDtcXG4gXFx0V1JJVEVfT05DRShuZXd0cC1cXHUwMDNld3JpdGVfc2VxLCBuZXd0cC1cXHUwMDNlcHVzaGVkX3NlcSA9IHRyZXEtXFx1MDAzZXNudF9pc24gKyAxKTtcXG4gXFxuIFxcdGlmIChzb2NrX2ZsYWcobmV3c2ssIFNPQ0tfS0VFUE9QRU4pKVxcbkBAIC02NTksNiArNjYwLDEyIEBAIHN0cnVjdCBzb2NrICp0Y3BfY3JlYXRlX29wZW5yZXFfY2hpbGQoY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxcbiBcXHR0Y3BfZWNuX29wZW5yZXFfY2hpbGQobmV3c2ssIHJlcSwgc2tiKTtcXG4gXFx0bmV3dHAtXFx1MDAzZWZhc3RvcGVuX3JlcSA9IE5VTEw7XFxuIFxcdFJDVV9JTklUX1BPSU5URVIobmV3dHAtXFx1MDAzZWZhc3RvcGVuX3JzaywgTlVMTCk7XFxuK1xcdG5ld3RwLVxcdTAwM2VwYWNrZXRzX291dCA9IDA7XFxuK1xcdG5ld3RwLVxcdTAwM2VyZXRyYW5zX291dCA9IDA7XFxuK1xcdG5ld3RwLVxcdTAwM2VzYWNrZWRfb3V0ID0gMDtcXG4rXFx0bmV3dHAtXFx1MDAzZWxvc3Rfb3V0ID0gMDtcXG4rXFx0bmV3dHAtXFx1MDAzZXJldHJhbnNtaXRfc2tiX2hpbnQgPSBOVUxMO1xcbitcXHRuZXd0cC1cXHUwMDNlaGlnaGVzdF9zYWNrID0gTlVMTDtcXG4gXFxuIFxcdG5ld3RwLVxcdTAwM2VicGZfY2hnX2NjX2lucHJvZ3Jlc3MgPSAwO1xcbiBcXHR0Y3BfYnBmX2Nsb25lKHNrLCBuZXdzayk7XFxuQEAgLTk3NCw3ICs5ODEsNyBAQCBzdHJ1Y3Qgc29jayAqdGNwX2NoZWNrX3JlcShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdHRjcF9yZXNldChzaywgc2tiKTtcXG4gXFx0fVxcbiBcXHRpZiAoIWZhc3RvcGVuKSB7XFxuLVxcdFxcdGJvb2wgdW5saW5rZWQgPSBpbmV0X2Nza19yZXFza19xdWV1ZV9kcm9wKHNrLCByZXEpO1xcbitcXHRcXHRib29sIHVubGlua2VkID0gaW5ldF9jc2tfcmVxc2tfcXVldWVfZHJvcChyZXEtXFx1MDAzZXJza19saXN0ZW5lciwgcmVxKTtcXG4gXFxuIFxcdFxcdGlmICh1bmxpbmtlZClcXG4gXFx0XFx0XFx0X19ORVRfSU5DX1NUQVRTKHNvY2tfbmV0KHNrKSwgTElOVVhfTUlCX0VNQlJZT05JQ1JTVFMpO1xcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9hZl9pbmV0Ni5jIGIvbmV0L2lwdjYvYWZfaW5ldDYuY1xcbmluZGV4IDI4MjkxMmExMTk5OTkuLjY4YjMzMGY2OTQxZDAgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjYvYWZfaW5ldDYuY1xcbisrKyBiL25ldC9pcHY2L2FmX2luZXQ2LmNcXG5AQCAtNDc5LDYgKzQ3OSwxMCBAQCB2b2lkIGluZXQ2X2NsZWFudXBfc29jayhzdHJ1Y3Qgc29jayAqc2spXFxuIFxcdHN0cnVjdCBza19idWZmICpza2I7XFxuIFxcdHN0cnVjdCBpcHY2X3R4b3B0aW9ucyAqb3B0O1xcbiBcXG4rXFx0LyogQUZfSU5FVCBjaGlsZCBvZiBhbiBJUFY2X0FERFJGT1JNJ2VkIGxpc3RlbmVyOiBub3RoaW5nIG9mIGl0cyBvd24uICovXFxuK1xcdGlmICghbnApXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuIFxcdC8qIFJlbGVhc2Ugcnggb3B0aW9ucyAqL1xcbiBcXG4gXFx0c2tiID0geGNoZyhcXHUwMDI2bnAtXFx1MDAzZXBrdG9wdGlvbnMsIE5VTEwpO1xcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMgYi9uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmNcXG5pbmRleCBiNGM5Nzc0MzRjMmUwLi42ZDJkZDlhZTQ2YTk2IDEwMDY0NFxcbi0tLSBhL25ldC9pcHY2L2lwdjZfc29ja2dsdWUuY1xcbisrKyBiL25ldC9pcHY2L2lwdjZfc29ja2dsdWUuY1xcbkBAIC01ODcsNiArNTg3LDIxIEBAIGludCBkb19pcHY2X3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxcbiBcXHRcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0XFx0fVxcbiBcXG4rXFx0XFx0XFx0aWYgKHNrLVxcdTAwM2Vza19wcm90b2NvbCA9PSBJUFBST1RPX1RDUCkge1xcbitcXHRcXHRcXHRcXHRpZiAoaW5ldF9jc2tfcmVxc2tfcXVldWVfbGVuKHNrKSkge1xcbitcXHRcXHRcXHRcXHRcXHRyZXR2ID0gLUVCVVNZO1xcbitcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0XFx0XFx0fVxcbitcXHRcXHRcXHRcXHQvKiBBIFNZTiB0aGF0IGZvdW5kIHRoaXMgc29ja2V0IHdoaWxlIGl0IHdhc1xcbitcXHRcXHRcXHRcXHQgKiBzdGlsbCBsaXN0ZW5pbmcgbWF5IG5vdCBiZSBjb3VudGVkIHlldC5cXG4rXFx0XFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdFxcdHN5bmNocm9uaXplX3JjdSgpO1xcbitcXHRcXHRcXHRcXHRpZiAoaW5ldF9jc2tfcmVxc2tfcXVldWVfbGVuKHNrKSkge1xcbitcXHRcXHRcXHRcXHRcXHRyZXR2ID0gLUVCVVNZO1xcbitcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0XFx0XFx0fVxcbitcXHRcXHRcXHR9XFxuK1xcbiBcXHRcXHRcXHRfX2lwdjZfc29ja19tY19jbG9zZShzayk7XFxuIFxcdFxcdFxcdF9faXB2Nl9zb2NrX2FjX2Nsb3NlKHNrKTtcXG4gXFxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L3RjcF9pcHY2LmMgYi9uZXQvaXB2Ni90Y3BfaXB2Ni5jXFxuaW5kZXggOWU5MTU1YjFiM2FhNy4uYTJkZWRhOWE0MjU4YiAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2Ni90Y3BfaXB2Ni5jXFxuKysrIGIvbmV0L2lwdjYvdGNwX2lwdjYuY1xcbkBAIC0xNTU2LDcgKzE1NTYsNyBAQCBzdGF0aWMgc3RydWN0IHNvY2sgKnRjcF92Nl9zeW5fcmVjdl9zb2NrKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKlxcbiBJTkRJUkVDVF9DQUxMQUJMRV9ERUNMQVJFKHN0cnVjdCBkc3RfZW50cnkgKmlwdjRfZHN0X2NoZWNrKHN0cnVjdCBkc3RfZW50cnkgKixcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgdTMyKSk7XFxuIC8qIFRoZSBzb2NrZXQgbXVzdCBoYXZlIGl0J3Mgc3BpbmxvY2sgaGVsZCB3aGVuIHdlIGdldFxcbi0gKiBoZXJlLCB1bmxlc3MgaXQgaXMgYSBUQ1BfTElTVEVOIHNvY2tldC5cXG4rICogaGVyZS5cXG4gICpcXG4gICogV2UgaGF2ZSBhIHBvdGVudGlhbCBkb3VibGUtbG9jayBjYXNlIGhlcmUsIHNvIGV2ZW4gd2hlblxcbiAgKiBkb2luZyBiYWNrbG9nIHByb2Nlc3Npbmcgd2UgdXNlIHRoZSBCSCBsb2NraW5nIHNjaGVtZS5cXG5AQCAtMTcwNCw2ICsxNzA0LDQ2IEBAIGludCB0Y3BfdjZfZG9fcmN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuKy8qIEBzayBpcyBub3QgbG9ja2VkIGhlcmUgYW5kIGNhbiBsZWF2ZSBUQ1BfTElTVEVOOyBkbyBub3QgdGVzdCBza19zdGF0ZS4gKi9cXG4rc3RhdGljIG5vaW5saW5lIGludCB0Y3BfdjZfcmN2X2xpc3RlbihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuK3tcXG4rXFx0ZW51bSBza2JfZHJvcF9yZWFzb24gcmVhc29uO1xcbitcXHRzdHJ1Y3Qgc29jayAqbnNrO1xcbitcXG4rXFx0cmVhc29uID0gcHNwX3NrX3J4X3BvbGljeV9jaGVjayhzaywgc2tiKTtcXG4rXFx0aWYgKHJlYXNvbilcXG4rXFx0XFx0Z290byBlcnJfZGlzY2FyZDtcXG4rXFxuK1xcdGlmICh0Y3BfY2hlY2tzdW1fY29tcGxldGUoc2tiKSlcXG4rXFx0XFx0Z290byBjc3VtX2VycjtcXG4rXFxuK1xcdG5zayA9IHRjcF92Nl9jb29raWVfY2hlY2soc2ssIHNrYik7XFxuK1xcdGlmICghbnNrKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGlmIChuc2sgIT0gc2spIHtcXG4rXFx0XFx0cmVhc29uID0gdGNwX2NoaWxkX3Byb2Nlc3Moc2ssIG5zaywgc2tiKTtcXG4rXFx0XFx0c29ja19wdXQobnNrKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0cmVhc29uID0gdGNwX3Jjdl9saXN0ZW5fc3RhdGVfcHJvY2Vzcyhzaywgc2tiKTtcXG4rXFx0fVxcbitcXHRpZiAoIXJlYXNvbilcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHR0Y3BfdjZfc2VuZF9yZXNldChzaywgc2tiLCBza19yc3RfY29udmVydF9kcm9wX3JlYXNvbihyZWFzb24pKTtcXG4rZGlzY2FyZDpcXG4rXFx0c2tfc2tiX3JlYXNvbl9kcm9wKHNrLCBza2IsIHJlYXNvbik7XFxuK1xcdHJldHVybiAwO1xcbitcXG4rY3N1bV9lcnI6XFxuK1xcdHJlYXNvbiA9IFNLQl9EUk9QX1JFQVNPTl9UQ1BfQ1NVTTtcXG4rXFx0dHJhY2VfdGNwX2JhZF9jc3VtKHNrYik7XFxuK1xcdFRDUF9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBUQ1BfTUlCX0NTVU1FUlJPUlMpO1xcbitlcnJfZGlzY2FyZDpcXG4rXFx0VENQX0lOQ19TVEFUUyhzb2NrX25ldChzayksIFRDUF9NSUJfSU5FUlJTKTtcXG4rXFx0Z290byBkaXNjYXJkO1xcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCB0Y3BfdjZfZmlsbF9jYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgaXB2NmhkciAqaGRyLFxcbiBcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgdGNwaGRyICp0aClcXG4ge1xcbkBAIC0xODkxLDcgKzE5MzEsNyBAQCBJTkRJUkVDVF9DQUxMQUJMRV9TQ09QRSBpbnQgdGNwX3Y2X3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXHRza2ItXFx1MDAzZWRldiA9IE5VTEw7XFxuIFxcbiBcXHRpZiAoc2stXFx1MDAzZXNrX3N0YXRlID09IFRDUF9MSVNURU4pIHtcXG4tXFx0XFx0cmV0ID0gdGNwX3Y2X2RvX3Jjdihzaywgc2tiKTtcXG4rXFx0XFx0cmV0ID0gdGNwX3Y2X3Jjdl9saXN0ZW4oc2ssIHNrYik7XFxuIFxcdFxcdGdvdG8gcHV0X2FuZF9yZXR1cm47XFxuIFxcdH1cXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDA0OjM3OjE0LjY1NDg2NTkxNFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjMyMjY5ODM2MjIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQVjZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0Y3BfcmN2X2xpc3Rlbl9zdGF0ZV9wcm9jZXNzXCIsXG4gICAgXCJkb19pcHY2X3NldHNvY2tvcHRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBUQ1AgbGlzdGVuaW5nIHNvY2tldCBwYWNrZXQgcHJvY2Vzc2luZyBieSBpbnRyb2R1Y2luZyBgdGNwX3Jjdl9saXN0ZW5fc3RhdGVfcHJvY2Vzc2AgYW5kIGxvY2tsZXNzIGxpc3RlbiByZWNlaXZlIHBhdGhzIChgdGNwX3Y0X3Jjdl9saXN0ZW5gLCBgdGNwX3Y2X3Jjdl9saXN0ZW5gKS4gSXQgYWxzbyBhZGRzIGNoZWNrcyBpbiBgZG9faXB2Nl9zZXRzb2Nrb3B0YCBmb3IgYElQVjZfQUREUkZPUk1gIG9uIFRDUCBzb2NrZXRzIHdpdGggcGVuZGluZyBjb25uZWN0aW9uIHJlcXVlc3RzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBjb3JlIFRDUCBzdGFjayBhbmQgSVB2NiBzb2NrZXQgb3B0aW9ucywgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSBhbmQgbmV0d29yayB0cmFmZmljLCBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOGNlNWQ1NmMwNmY5Njg2ZTM5OGNlYTc3ODllNTE1ZmJmMzFiNWFkOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDI0IDA0OjM3OjExIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvdGNwLmggYi9pbmNsdWRlL25ldC90Y3AuaFxuaW5kZXggMmM1Yjg4OTUzMGI1NS4uYWRkNDM4ZDY1NjFiZSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L3RjcC5oXG4rKysgYi9pbmNsdWRlL25ldC90Y3AuaFxuQEAgLTM5Miw2ICszOTIsOCBAQCB2b2lkIHRjcF93cml0ZV90aW1lcl9oYW5kbGVyKHN0cnVjdCBzb2NrICpzayk7XG4gdm9pZCB0Y3BfZGVsYWNrX3RpbWVyX2hhbmRsZXIoc3RydWN0IHNvY2sgKnNrKTtcbiBpbnQgdGNwX2lvY3RsKHN0cnVjdCBzb2NrICpzaywgaW50IGNtZCwgaW50ICprYXJnKTtcbiBlbnVtIHNrYl9kcm9wX3JlYXNvbiB0Y3BfcmN2X3N0YXRlX3Byb2Nlc3Moc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbitlbnVtIHNrYl9kcm9wX3JlYXNvbiB0Y3BfcmN2X2xpc3Rlbl9zdGF0ZV9wcm9jZXNzKHN0cnVjdCBzb2NrICpzayxcbitcdFx0XHRcdFx0XHQgIHN0cnVjdCBza19idWZmICpza2IpO1xuIHZvaWQgdGNwX3Jjdl9lc3RhYmxpc2hlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpO1xuIHZvaWQgdGNwX3JjdmJ1Zl9ncm93KHN0cnVjdCBzb2NrICpzaywgdTMyIG5ld3ZhbCk7XG4gdm9pZCB0Y3BfcmN2X3NwYWNlX2FkanVzdChzdHJ1Y3Qgc29jayAqc2spO1xuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NvY2suYyBiL25ldC9jb3JlL3NvY2suY1xuaW5kZXggMWFkNDE5MDRkYjI1Yi4uMDZmYmIxOTgyNGUyNiAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL3NvY2suY1xuKysrIGIvbmV0L2NvcmUvc29jay5jXG5AQCAtMjQ3OSw3ICsyNDc5LDcgQEAgc3RhdGljIHZvaWQgc2tfaW5pdF9jb21tb24oc3RydWN0IHNvY2sgKnNrKVxuIHN0cnVjdCBzb2NrICpza19jbG9uZShjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IGdmcF90IHByaW9yaXR5LFxuIFx0XHQgICAgICBib29sIGxvY2spXG4ge1xuLVx0c3RydWN0IHByb3RvICpwcm90ID0gUkVBRF9PTkNFKHNrLVx1MDAzZXNrX3Byb3QpO1xuK1x0c3RydWN0IHByb3RvICpwcm90ID0gc2stXHUwMDNlc2tfcHJvdF9jcmVhdG9yO1xuIFx0c3RydWN0IHNrX2ZpbHRlciAqZmlsdGVyO1xuIFx0Ym9vbCBpc19jaGFyZ2VkID0gdHJ1ZTtcbiBcdHN0cnVjdCBzb2NrICpuZXdzaztcbkBAIC0yNTMzLDYgKzI1MzMsNyBAQCBzdHJ1Y3Qgc29jayAqc2tfY2xvbmUoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBjb25zdCBnZnBfdCBwcmlvcml0eSxcbiBcdG5ld3NrLVx1MDAzZXNrX3Jlc2VydmVkX21lbSAgPSAwO1xuIFx0REVCVUdfTkVUX1dBUk5fT05fT05DRShuZXdzay1cdTAwM2Vza19kcm9wX2NvdW50ZXJzKTtcbiBcdHNrX2Ryb3BzX3Jlc2V0KG5ld3NrKTtcbitcdG5ld3NrLVx1MDAzZXNrX3RzcV9mbGFnc1x0PSAwO1xuIFx0bmV3c2stXHUwMDNlc2tfc2VuZF9oZWFkXHQ9IE5VTEw7XG4gXHRuZXdzay1cdTAwM2Vza191c2VybG9ja3NcdD0gc2stXHUwMDNlc2tfdXNlcmxvY2tzIFx1MDAyNiB+U09DS19CSU5EUE9SVF9MT0NLO1xuIFx0YXRvbWljX3NldChcdTAwMjZuZXdzay1cdTAwM2Vza196Y2tleSwgMCk7XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2lucHV0LmMgYi9uZXQvaXB2NC90Y3BfaW5wdXQuY1xuaW5kZXggMGY2MGExZGJmOTI3NC4uNzdhZjE4ZmJhNjZiNCAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L3RjcF9pbnB1dC5jXG4rKysgYi9uZXQvaXB2NC90Y3BfaW5wdXQuY1xuQEAgLTcxNDEsNiArNzE0MSw0MiBAQCBzdGF0aWMgdm9pZCB0Y3BfcmN2X3N5bnJlY3Zfc3RhdGVfZmFzdG9wZW4oc3RydWN0IHNvY2sgKnNrKVxuIFx0dGNwX3JlYXJtX3J0byhzayk7XG4gfVxuIFxuK2VudW0gc2tiX2Ryb3BfcmVhc29uIHRjcF9yY3ZfbGlzdGVuX3N0YXRlX3Byb2Nlc3Moc3RydWN0IHNvY2sgKnNrLFxuK1x0XHRcdFx0XHRcdCAgc3RydWN0IHNrX2J1ZmYgKnNrYilcbit7XG4rXHRjb25zdCBzdHJ1Y3QgdGNwaGRyICp0aCA9IHRjcF9oZHIoc2tiKTtcbitcdFNLQl9EUihyZWFzb24pO1xuK1xuK1x0aWYgKHRoLVx1MDAzZWFjaylcbitcdFx0cmV0dXJuIFNLQl9EUk9QX1JFQVNPTl9UQ1BfRkxBR1M7XG4rXG4rXHRpZiAodGgtXHUwMDNlcnN0KSB7XG4rXHRcdFNLQl9EUl9TRVQocmVhc29uLCBUQ1BfUkVTRVQpO1xuK1x0XHRnb3RvIGRpc2NhcmQ7XG4rXHR9XG4rXHRpZiAodGgtXHUwMDNlc3luKSB7XG4rXHRcdGlmICh0aC1cdTAwM2VmaW4pIHtcbitcdFx0XHRTS0JfRFJfU0VUKHJlYXNvbiwgVENQX0ZMQUdTKTtcbitcdFx0XHRnb3RvIGRpc2NhcmQ7XG4rXHRcdH1cbitcdFx0LyogSXQgaXMgcG9zc2libGUgdGhhdCB3ZSBwcm9jZXNzIFNZTiBwYWNrZXRzIGZyb20gYmFja2xvZyxcbitcdFx0ICogc28gd2UgbmVlZCB0byBtYWtlIHN1cmUgdG8gZGlzYWJsZSBCSCBhbmQgUkNVIHJpZ2h0IHRoZXJlLlxuK1x0XHQgKi9cbitcdFx0cmN1X3JlYWRfbG9jaygpO1xuK1x0XHRsb2NhbF9iaF9kaXNhYmxlKCk7XG4rXHRcdGluZXRfY3NrKHNrKS1cdTAwM2VpY3NrX2FmX29wcy1cdTAwM2Vjb25uX3JlcXVlc3Qoc2ssIHNrYik7XG4rXHRcdGxvY2FsX2JoX2VuYWJsZSgpO1xuK1x0XHRyY3VfcmVhZF91bmxvY2soKTtcbitcbitcdFx0Y29uc3VtZV9za2Ioc2tiKTtcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXHRTS0JfRFJfU0VUKHJlYXNvbiwgVENQX0ZMQUdTKTtcbitkaXNjYXJkOlxuK1x0dGNwX2Ryb3BfcmVhc29uKHNrLCBza2IsIHJlYXNvbik7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gLypcbiAgKlx0VGhpcyBmdW5jdGlvbiBpbXBsZW1lbnRzIHRoZSByZWNlaXZpbmcgcHJvY2VkdXJlIG9mIFJGQyA3OTMgZm9yXG4gICpcdGFsbCBzdGF0ZXMgZXhjZXB0IEVTVEFCTElTSEVEIGFuZCBUSU1FX1dBSVQuXG5AQCAtNzE1Miw3ICs3MTg4LDYgQEAgZW51bSBza2JfZHJvcF9yZWFzb25cbiB0Y3BfcmN2X3N0YXRlX3Byb2Nlc3Moc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbiBcdHN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spO1xuLVx0c3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xuIFx0Y29uc3Qgc3RydWN0IHRjcGhkciAqdGggPSB0Y3BfaGRyKHNrYik7XG4gXHRzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXE7XG4gXHRpbnQgcXVldWVkID0gMDtcbkBAIC03MTY0LDMyICs3MTk5LDcgQEAgdGNwX3Jjdl9zdGF0ZV9wcm9jZXNzKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdFx0Z290byBkaXNjYXJkO1xuIFxuIFx0Y2FzZSBUQ1BfTElTVEVOOlxuLVx0XHRpZiAodGgtXHUwMDNlYWNrKVxuLVx0XHRcdHJldHVybiBTS0JfRFJPUF9SRUFTT05fVENQX0ZMQUdTO1xuLVxuLVx0XHRpZiAodGgtXHUwMDNlcnN0KSB7XG4tXHRcdFx0U0tCX0RSX1NFVChyZWFzb24sIFRDUF9SRVNFVCk7XG4tXHRcdFx0Z290byBkaXNjYXJkO1xuLVx0XHR9XG4tXHRcdGlmICh0aC1cdTAwM2VzeW4pIHtcbi1cdFx0XHRpZiAodGgtXHUwMDNlZmluKSB7XG4tXHRcdFx0XHRTS0JfRFJfU0VUKHJlYXNvbiwgVENQX0ZMQUdTKTtcbi1cdFx0XHRcdGdvdG8gZGlzY2FyZDtcbi1cdFx0XHR9XG4tXHRcdFx0LyogSXQgaXMgcG9zc2libGUgdGhhdCB3ZSBwcm9jZXNzIFNZTiBwYWNrZXRzIGZyb20gYmFja2xvZyxcbi1cdFx0XHQgKiBzbyB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0byBkaXNhYmxlIEJIIGFuZCBSQ1UgcmlnaHQgdGhlcmUuXG4tXHRcdFx0ICovXG4tXHRcdFx0cmN1X3JlYWRfbG9jaygpO1xuLVx0XHRcdGxvY2FsX2JoX2Rpc2FibGUoKTtcbi1cdFx0XHRpY3NrLVx1MDAzZWljc2tfYWZfb3BzLVx1MDAzZWNvbm5fcmVxdWVzdChzaywgc2tiKTtcbi1cdFx0XHRsb2NhbF9iaF9lbmFibGUoKTtcbi1cdFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbi1cbi1cdFx0XHRjb25zdW1lX3NrYihza2IpO1xuLVx0XHRcdHJldHVybiAwO1xuLVx0XHR9XG4tXHRcdFNLQl9EUl9TRVQocmVhc29uLCBUQ1BfRkxBR1MpO1xuLVx0XHRnb3RvIGRpc2NhcmQ7XG4rXHRcdHJldHVybiB0Y3BfcmN2X2xpc3Rlbl9zdGF0ZV9wcm9jZXNzKHNrLCBza2IpO1xuIFxuIFx0Y2FzZSBUQ1BfU1lOX1NFTlQ6XG4gXHRcdHRwLVx1MDAzZXJ4X29wdC5zYXdfdHN0YW1wID0gMDtcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfaXB2NC5jIGIvbmV0L2lwdjQvdGNwX2lwdjQuY1xuaW5kZXggMTkwYzdhZjRjZjkyMy4uMmZhODk1ODM4MGE1YiAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L3RjcF9pcHY0LmNcbisrKyBiL25ldC9pcHY0L3RjcF9pcHY0LmNcbkBAIC0xNzE0LDYgKzE3MTQsMTQgQEAgc3RydWN0IHNvY2sgKnRjcF92NF9zeW5fcmVjdl9zb2NrKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0aW5ldF9jc2sobmV3c2spLVx1MDAzZWljc2tfZXh0X2hkcl9sZW4gPSBpbmV0X29wdC1cdTAwM2VvcHQub3B0bGVuO1xuIFx0YXRvbWljX3NldChcdTAwMjZuZXdpbmV0LVx1MDAzZWluZXRfaWQsIGdldF9yYW5kb21fdTE2KCkpO1xuIFxuKyNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuK1x0LyogTmV2ZXIgaW5oZXJpdCB0aGUgbGlzdGVuZXIncyBpcHY2X3BpbmZvOyBJUFY2X0FERFJGT1JNIGxlYXZlcyBpdCBzZXRcbitcdCAqIG9uIGFuIEFGX0lORVQgc29ja2V0LiAgdGNwX3Y2X21hcHBlZF9jaGlsZF9pbml0KCkgaW5zdGFsbHMgb3VyIG93bi5cbitcdCAqL1xuK1x0bmV3aW5ldC1cdTAwM2VwaW5ldDYgPSBOVUxMO1xuK1x0bmV3aW5ldC1cdTAwM2VpcHY2X2ZsX2xpc3QgPSBOVUxMO1xuKyNlbmRpZlxuK1xuIFx0LyogU2V0IFRvUyBvZiB0aGUgbmV3IHNvY2tldCBiYXNlZCB1cG9uIHRoZSB2YWx1ZSBvZiBpbmNvbWluZyBTWU4uXG4gXHQgKiBFQ1QgYml0cyBhcmUgc2V0IGxhdGVyIGluIHRjcF9pbml0X3RyYW5zZmVyKCkuXG4gXHQgKi9cbkBAIC0xODIwLDcgKzE4MjgsNyBAQCB1MTYgdGNwX3Y0X2dldF9zeW5jb29raWUoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaXBoZHIgKmlwaCxcbiBJTkRJUkVDVF9DQUxMQUJMRV9ERUNMQVJFKHN0cnVjdCBkc3RfZW50cnkgKmlwdjRfZHN0X2NoZWNrKHN0cnVjdCBkc3RfZW50cnkgKixcbiBcdFx0XHRcdFx0XHRcdCAgIHUzMikpO1xuIC8qIFRoZSBzb2NrZXQgbXVzdCBoYXZlIGl0J3Mgc3BpbmxvY2sgaGVsZCB3aGVuIHdlIGdldFxuLSAqIGhlcmUsIHVubGVzcyBpdCBpcyBhIFRDUF9MSVNURU4gc29ja2V0LlxuKyAqIGhlcmUuXG4gICpcbiAgKiBXZSBoYXZlIGEgcG90ZW50aWFsIGRvdWJsZS1sb2NrIGNhc2UgaGVyZSwgc28gZXZlbiB3aGVuXG4gICogZG9pbmcgYmFja2xvZyBwcm9jZXNzaW5nIHdlIHVzZSB0aGUgQkggbG9ja2luZyBzY2hlbWUuXG5AQCAtMTg5OCw2ICsxOTA2LDQ2IEBAIGludCB0Y3BfdjRfZG9fcmN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdGdvdG8gZGlzY2FyZDtcbiB9XG4gXG4rLyogQHNrIGlzIG5vdCBsb2NrZWQgaGVyZSBhbmQgY2FuIGxlYXZlIFRDUF9MSVNURU47IGRvIG5vdCB0ZXN0IHNrX3N0YXRlLiAqL1xuK3N0YXRpYyBub2lubGluZSBpbnQgdGNwX3Y0X3Jjdl9saXN0ZW4oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuK3tcbitcdGVudW0gc2tiX2Ryb3BfcmVhc29uIHJlYXNvbjtcbitcdHN0cnVjdCBzb2NrICpuc2s7XG4rXG4rXHRyZWFzb24gPSBwc3Bfc2tfcnhfcG9saWN5X2NoZWNrKHNrLCBza2IpO1xuK1x0aWYgKHJlYXNvbilcbitcdFx0Z290byBlcnJfZGlzY2FyZDtcbitcbitcdGlmICh0Y3BfY2hlY2tzdW1fY29tcGxldGUoc2tiKSlcbitcdFx0Z290byBjc3VtX2VycjtcbitcbitcdG5zayA9IHRjcF92NF9jb29raWVfY2hlY2soc2ssIHNrYik7XG4rXHRpZiAoIW5zaylcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRpZiAobnNrICE9IHNrKSB7XG4rXHRcdHJlYXNvbiA9IHRjcF9jaGlsZF9wcm9jZXNzKHNrLCBuc2ssIHNrYik7XG4rXHRcdHNvY2tfcHV0KG5zayk7XG4rXHR9IGVsc2Uge1xuK1x0XHRyZWFzb24gPSB0Y3BfcmN2X2xpc3Rlbl9zdGF0ZV9wcm9jZXNzKHNrLCBza2IpO1xuK1x0fVxuK1x0aWYgKCFyZWFzb24pXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0dGNwX3Y0X3NlbmRfcmVzZXQoc2ssIHNrYiwgc2tfcnN0X2NvbnZlcnRfZHJvcF9yZWFzb24ocmVhc29uKSk7XG4rZGlzY2FyZDpcbitcdHNrX3NrYl9yZWFzb25fZHJvcChzaywgc2tiLCByZWFzb24pO1xuK1x0cmV0dXJuIDA7XG4rXG4rY3N1bV9lcnI6XG4rXHRyZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fVENQX0NTVU07XG4rXHR0cmFjZV90Y3BfYmFkX2NzdW0oc2tiKTtcbitcdFRDUF9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBUQ1BfTUlCX0NTVU1FUlJPUlMpO1xuK2Vycl9kaXNjYXJkOlxuK1x0VENQX0lOQ19TVEFUUyhzb2NrX25ldChzayksIFRDUF9NSUJfSU5FUlJTKTtcbitcdGdvdG8gZGlzY2FyZDtcbit9XG4rXG4gZW51bSBza2JfZHJvcF9yZWFzb24gdGNwX2FkZF9iYWNrbG9nKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG4gXHR1MzIgdGFpbF9nc29fc2l6ZSwgdGFpbF9nc29fc2VncztcbkBAIC0yMjM1LDcgKzIyODMsNyBAQCBpbnQgdGNwX3Y0X3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0c2tiLVx1MDAzZWRldiA9IE5VTEw7XG4gXG4gXHRpZiAoc2stXHUwMDNlc2tfc3RhdGUgPT0gVENQX0xJU1RFTikge1xuLVx0XHRyZXQgPSB0Y3BfdjRfZG9fcmN2KHNrLCBza2IpO1xuK1x0XHRyZXQgPSB0Y3BfdjRfcmN2X2xpc3Rlbihzaywgc2tiKTtcbiBcdFx0Z290byBwdXRfYW5kX3JldHVybjtcbiBcdH1cbiBcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMgYi9uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmNcbmluZGV4IDEyMjU0ZTZlYjJmMzQuLjJmZGUxOTZkZDMwMmYgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmNcbisrKyBiL25ldC9pcHY0L3RjcF9taW5pc29ja3MuY1xuQEAgLTU5MSw2ICs1OTEsNyBAQCBzdHJ1Y3Qgc29jayAqdGNwX2NyZWF0ZV9vcGVucmVxX2NoaWxkKGNvbnN0IHN0cnVjdCBzb2NrICpzayxcbiBcdG5ld3RwLVx1MDAzZXRvdGFsX3JldHJhbnMgPSByZXEtXHUwMDNlbnVtX3JldHJhbnM7XG4gXG4gXHR0Y3BfaW5pdF94bWl0X3RpbWVycyhuZXdzayk7XG4rXHRuZXd0cC1cdTAwM2VvdXRfb2Zfb3JkZXJfcXVldWUgPSBSQl9ST09UO1xuIFx0V1JJVEVfT05DRShuZXd0cC1cdTAwM2V3cml0ZV9zZXEsIG5ld3RwLVx1MDAzZXB1c2hlZF9zZXEgPSB0cmVxLVx1MDAzZXNudF9pc24gKyAxKTtcbiBcbiBcdGlmIChzb2NrX2ZsYWcobmV3c2ssIFNPQ0tfS0VFUE9QRU4pKVxuQEAgLTY1OSw2ICs2NjAsMTIgQEAgc3RydWN0IHNvY2sgKnRjcF9jcmVhdGVfb3BlbnJlcV9jaGlsZChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXG4gXHR0Y3BfZWNuX29wZW5yZXFfY2hpbGQobmV3c2ssIHJlcSwgc2tiKTtcbiBcdG5ld3RwLVx1MDAzZWZhc3RvcGVuX3JlcSA9IE5VTEw7XG4gXHRSQ1VfSU5JVF9QT0lOVEVSKG5ld3RwLVx1MDAzZWZhc3RvcGVuX3JzaywgTlVMTCk7XG4rXHRuZXd0cC1cdTAwM2VwYWNrZXRzX291dCA9IDA7XG4rXHRuZXd0cC1cdTAwM2VyZXRyYW5zX291dCA9IDA7XG4rXHRuZXd0cC1cdTAwM2VzYWNrZWRfb3V0ID0gMDtcbitcdG5ld3RwLVx1MDAzZWxvc3Rfb3V0ID0gMDtcbitcdG5ld3RwLVx1MDAzZXJldHJhbnNtaXRfc2tiX2hpbnQgPSBOVUxMO1xuK1x0bmV3dHAtXHUwMDNlaGlnaGVzdF9zYWNrID0gTlVMTDtcbiBcbiBcdG5ld3RwLVx1MDAzZWJwZl9jaGdfY2NfaW5wcm9ncmVzcyA9IDA7XG4gXHR0Y3BfYnBmX2Nsb25lKHNrLCBuZXdzayk7XG5AQCAtOTc0LDcgKzk4MSw3IEBAIHN0cnVjdCBzb2NrICp0Y3BfY2hlY2tfcmVxKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0dGNwX3Jlc2V0KHNrLCBza2IpO1xuIFx0fVxuIFx0aWYgKCFmYXN0b3Blbikge1xuLVx0XHRib29sIHVubGlua2VkID0gaW5ldF9jc2tfcmVxc2tfcXVldWVfZHJvcChzaywgcmVxKTtcbitcdFx0Ym9vbCB1bmxpbmtlZCA9IGluZXRfY3NrX3JlcXNrX3F1ZXVlX2Ryb3AocmVxLVx1MDAzZXJza19saXN0ZW5lciwgcmVxKTtcbiBcbiBcdFx0aWYgKHVubGlua2VkKVxuIFx0XHRcdF9fTkVUX0lOQ19TVEFUUyhzb2NrX25ldChzayksIExJTlVYX01JQl9FTUJSWU9OSUNSU1RTKTtcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9hZl9pbmV0Ni5jIGIvbmV0L2lwdjYvYWZfaW5ldDYuY1xuaW5kZXggMjgyOTEyYTExOTk5OS4uNjhiMzMwZjY5NDFkMCAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L2FmX2luZXQ2LmNcbisrKyBiL25ldC9pcHY2L2FmX2luZXQ2LmNcbkBAIC00NzksNiArNDc5LDEwIEBAIHZvaWQgaW5ldDZfY2xlYW51cF9zb2NrKHN0cnVjdCBzb2NrICpzaylcbiBcdHN0cnVjdCBza19idWZmICpza2I7XG4gXHRzdHJ1Y3QgaXB2Nl90eG9wdGlvbnMgKm9wdDtcbiBcbitcdC8qIEFGX0lORVQgY2hpbGQgb2YgYW4gSVBWNl9BRERSRk9STSdlZCBsaXN0ZW5lcjogbm90aGluZyBvZiBpdHMgb3duLiAqL1xuK1x0aWYgKCFucClcbitcdFx0cmV0dXJuO1xuK1xuIFx0LyogUmVsZWFzZSByeCBvcHRpb25zICovXG4gXG4gXHRza2IgPSB4Y2hnKFx1MDAyNm5wLVx1MDAzZXBrdG9wdGlvbnMsIE5VTEwpO1xuZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwdjZfc29ja2dsdWUuYyBiL25ldC9pcHY2L2lwdjZfc29ja2dsdWUuY1xuaW5kZXggYjRjOTc3NDM0YzJlMC4uNmQyZGQ5YWU0NmE5NiAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L2lwdjZfc29ja2dsdWUuY1xuKysrIGIvbmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jXG5AQCAtNTg3LDYgKzU4NywyMSBAQCBpbnQgZG9faXB2Nl9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdH1cbiBcbitcdFx0XHRpZiAoc2stXHUwMDNlc2tfcHJvdG9jb2wgPT0gSVBQUk9UT19UQ1ApIHtcbitcdFx0XHRcdGlmIChpbmV0X2Nza19yZXFza19xdWV1ZV9sZW4oc2spKSB7XG4rXHRcdFx0XHRcdHJldHYgPSAtRUJVU1k7XG4rXHRcdFx0XHRcdGJyZWFrO1xuK1x0XHRcdFx0fVxuK1x0XHRcdFx0LyogQSBTWU4gdGhhdCBmb3VuZCB0aGlzIHNvY2tldCB3aGlsZSBpdCB3YXNcbitcdFx0XHRcdCAqIHN0aWxsIGxpc3RlbmluZyBtYXkgbm90IGJlIGNvdW50ZWQgeWV0LlxuK1x0XHRcdFx0ICovXG4rXHRcdFx0XHRzeW5jaHJvbml6ZV9yY3UoKTtcbitcdFx0XHRcdGlmIChpbmV0X2Nza19yZXFza19xdWV1ZV9sZW4oc2spKSB7XG4rXHRcdFx0XHRcdHJldHYgPSAtRUJVU1k7XG4rXHRcdFx0XHRcdGJyZWFrO1xuK1x0XHRcdFx0fVxuK1x0XHRcdH1cbitcbiBcdFx0XHRfX2lwdjZfc29ja19tY19jbG9zZShzayk7XG4gXHRcdFx0X19pcHY2X3NvY2tfYWNfY2xvc2Uoc2spO1xuIFxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L3RjcF9pcHY2LmMgYi9uZXQvaXB2Ni90Y3BfaXB2Ni5jXG5pbmRleCA5ZTkxNTViMWIzYWE3Li5hMmRlZGE5YTQyNThiIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvdGNwX2lwdjYuY1xuKysrIGIvbmV0L2lwdjYvdGNwX2lwdjYuY1xuQEAgLTE1NTYsNyArMTU1Niw3IEBAIHN0YXRpYyBzdHJ1Y3Qgc29jayAqdGNwX3Y2X3N5bl9yZWN2X3NvY2soY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqXG4gSU5ESVJFQ1RfQ0FMTEFCTEVfREVDTEFSRShzdHJ1Y3QgZHN0X2VudHJ5ICppcHY0X2RzdF9jaGVjayhzdHJ1Y3QgZHN0X2VudHJ5ICosXG4gXHRcdFx0XHRcdFx0XHQgICB1MzIpKTtcbiAvKiBUaGUgc29ja2V0IG11c3QgaGF2ZSBpdCdzIHNwaW5sb2NrIGhlbGQgd2hlbiB3ZSBnZXRcbi0gKiBoZXJlLCB1bmxlc3MgaXQgaXMgYSBUQ1BfTElTVEVOIHNvY2tldC5cbisgKiBoZXJlLlxuICAqXG4gICogV2UgaGF2ZSBhIHBvdGVudGlhbCBkb3VibGUtbG9jayBjYXNlIGhlcmUsIHNvIGV2ZW4gd2hlblxuICAqIGRvaW5nIGJhY2tsb2cgcHJvY2Vzc2luZyB3ZSB1c2UgdGhlIEJIIGxvY2tpbmcgc2NoZW1lLlxuQEAgLTE3MDQsNiArMTcwNCw0NiBAQCBpbnQgdGNwX3Y2X2RvX3JjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rLyogQHNrIGlzIG5vdCBsb2NrZWQgaGVyZSBhbmQgY2FuIGxlYXZlIFRDUF9MSVNURU47IGRvIG5vdCB0ZXN0IHNrX3N0YXRlLiAqL1xuK3N0YXRpYyBub2lubGluZSBpbnQgdGNwX3Y2X3Jjdl9saXN0ZW4oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuK3tcbitcdGVudW0gc2tiX2Ryb3BfcmVhc29uIHJlYXNvbjtcbitcdHN0cnVjdCBzb2NrICpuc2s7XG4rXG4rXHRyZWFzb24gPSBwc3Bfc2tfcnhfcG9saWN5X2NoZWNrKHNrLCBza2IpO1xuK1x0aWYgKHJlYXNvbilcbitcdFx0Z290byBlcnJfZGlzY2FyZDtcbitcbitcdGlmICh0Y3BfY2hlY2tzdW1fY29tcGxldGUoc2tiKSlcbitcdFx0Z290byBjc3VtX2VycjtcbitcbitcdG5zayA9IHRjcF92Nl9jb29raWVfY2hlY2soc2ssIHNrYik7XG4rXHRpZiAoIW5zaylcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRpZiAobnNrICE9IHNrKSB7XG4rXHRcdHJlYXNvbiA9IHRjcF9jaGlsZF9wcm9jZXNzKHNrLCBuc2ssIHNrYik7XG4rXHRcdHNvY2tfcHV0KG5zayk7XG4rXHR9IGVsc2Uge1xuK1x0XHRyZWFzb24gPSB0Y3BfcmN2X2xpc3Rlbl9zdGF0ZV9wcm9jZXNzKHNrLCBza2IpO1xuK1x0fVxuK1x0aWYgKCFyZWFzb24pXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0dGNwX3Y2X3NlbmRfcmVzZXQoc2ssIHNrYiwgc2tfcnN0X2NvbnZlcnRfZHJvcF9yZWFzb24ocmVhc29uKSk7XG4rZGlzY2FyZDpcbitcdHNrX3NrYl9yZWFzb25fZHJvcChzaywgc2tiLCByZWFzb24pO1xuK1x0cmV0dXJuIDA7XG4rXG4rY3N1bV9lcnI6XG4rXHRyZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fVENQX0NTVU07XG4rXHR0cmFjZV90Y3BfYmFkX2NzdW0oc2tiKTtcbitcdFRDUF9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBUQ1BfTUlCX0NTVU1FUlJPUlMpO1xuK2Vycl9kaXNjYXJkOlxuK1x0VENQX0lOQ19TVEFUUyhzb2NrX25ldChzayksIFRDUF9NSUJfSU5FUlJTKTtcbitcdGdvdG8gZGlzY2FyZDtcbit9XG4rXG4gc3RhdGljIHZvaWQgdGNwX3Y2X2ZpbGxfY2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IGlwdjZoZHIgKmhkcixcbiBcdFx0XHQgICBjb25zdCBzdHJ1Y3QgdGNwaGRyICp0aClcbiB7XG5AQCAtMTg5MSw3ICsxOTMxLDcgQEAgSU5ESVJFQ1RfQ0FMTEFCTEVfU0NPUEUgaW50IHRjcF92Nl9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdHNrYi1cdTAwM2VkZXYgPSBOVUxMO1xuIFxuIFx0aWYgKHNrLVx1MDAzZXNrX3N0YXRlID09IFRDUF9MSVNURU4pIHtcbi1cdFx0cmV0ID0gdGNwX3Y2X2RvX3Jjdihzaywgc2tiKTtcbitcdFx0cmV0ID0gdGNwX3Y2X3Jjdl9saXN0ZW4oc2ssIHNrYik7XG4gXHRcdGdvdG8gcHV0X2FuZF9yZXR1cm47XG4gXHR9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwNDozNzoxNC42NTQ4Njc0NzRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDI2ODkyNjU0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBUaGlzIFRDUCBOZXR3b3JraW5nIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgYSBwYXRjaCBoZXJlIHRoYXQncyBtYWtpbmcgY2hhbmdlcyB0byB0aGUgVENQIG5ldHdvcmtpbmcgY29kZS4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgdGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlLCBhbmQgZ2l2ZW4gdGhhdCBpdCdzIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3RhY2sgYW5kIHJlYWNoYWJsZSB2aWEgVENQIHNvY2tldHMsIGZ1enppbmcgaXMgZGVmaW5pdGVseSB3YXJyYW50ZWQuIEknbSBnb2luZyB0byBzdGFydCBieSBpZGVudGlmeWluZyB0aGUga2V5IGZ1bmN0aW9ucyB0aGF0IGFyZSBtb2RpZmllZC5cblxuU3BlY2lmaWNhbGx5LCBJIHNlZSBhIGZldyBrZXkgYWRkaXRpb25zOiBgdGNwX3Jjdl9saXN0ZW5fc3RhdGVfcHJvY2Vzc2AsIGB0Y3BfdjRfcmN2X2xpc3RlbmAsIGFuZCBgdGNwX3Y2X3Jjdl9saXN0ZW5gLiAgVGhlc2UgYXJlIGNsZWFybHkgaW50cm9kdWNlZCB0byBoYW5kbGUgdGhlIGBUQ1BfTElTVEVOYCBzdGF0ZSwgd2hpY2ggaXMgd29ydGggaW52ZXN0aWdhdGluZy4gVGhlIGBza19jbG9uZWAgZnVuY3Rpb24gYWxzbyBnZXRzIGEgdHdlYWsgdG8gaG93IGl0IGFjY2Vzc2VzIHRoZSBwcm90b2NvbCBjcmVhdG9yLiAgV2UndmUgZ290IHNvbWUgbmV3IGluaXRpYWxpemF0aW9uIGluIGB0Y3BfY3JlYXRlX29wZW5yZXFfY2hpbGRgLiBBbmQgdGhlbiB0aGVyZSdzIGEgbW9kaWZpY2F0aW9uIHRvIGBkb19pcHY2X3NldHNvY2tvcHRgLlxuXG5Ob3csIGxldCBtZSB6b29tIGluIG9uIHRob3NlIGZ1bmN0aW9ucyB0byBuYXJyb3cgZG93biBteSBmb2N1cy4gIEkgd2FudCB0byBwcmlvcml0aXplIHRoZSBiZXN0IGVudHJ5IHBvaW50cy4gSSBrbm93IEkgc2hvdWxkIGZvY3VzIG9uIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zLiBJIGNhbiBzZWUgdGhhdCBgdGNwX3Jjdl9saXN0ZW5fc3RhdGVfcHJvY2Vzc2AgaXMgbm90IHN0YXRpYyBhbmQgaXMgZGVmaW5lZCwgd2hpY2ggbWFrZXMgaXQgYSBnb29kIGNhbmRpZGF0ZS4gSG93ZXZlciwgYHRjcF92NF9yY3ZfbGlzdGVuYCBhbmQgYHRjcF92Nl9yY3ZfbGlzdGVuYCBhcmUgc3RhdGljIGJ1dCAqbm9pbmxpbmUqLCBzbyBldmVuIHRob3VnaCB0aGV5IGFyZSBzdGF0aWMsIHRoZXkgd2lsbCBzdGlsbCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgd2hpY2ggbWVhbnMgdGhhdCB0aGV5IGFyZSBhbHNvIGNhbmRpZGF0ZXMuIE9mIGNvdXJzZSwgYHRjcF92NF9yY3ZgIGFuZCBgdGNwX3Y2X3JjdmAgYXJlIHRoZSBhY3R1YWwgZW50cnkgcG9pbnRzLCBidXQgdGhvc2UgYXJlIGluIHRoZSBrZXJuZWwgYWxyZWFkeSBzbyB0aGV5IGFyZSBub3QgbmV3LiAgQW5kIGZpbmFsbHksIHRoZXJlJ3MgYGRvX2lwdjZfc2V0c29ja29wdGAgd2hpY2ggaXMgYWxzbyBtb2RpZmllZC5cblxuTGV0J3MgZHJpbGwgZG93biBpbnRvIGBkb19pcHY2X3NldHNvY2tvcHRgLiAgVGhlIGRpZmYgc2hvd3MgdGhhdCBpdCdzIG5vdyBjaGVja2luZyBmb3IgYElQUFJPVE9fVENQYCBhbmQgdGhlIGxlbmd0aCBvZiB0aGUgcmVxdWVzdCBxdWV1ZSAoYGluZXRfY3NrX3JlcXNrX3F1ZXVlX2xlbihzaylgKS4gIEl0IGxvb2tzIGxpa2UgaXQncyB0cnlpbmcgdG8gcHJldmVudCBtb2RpZmljYXRpb24gb2Ygb3B0aW9ucyBvbiBhIGxpc3RlbmluZyBzb2NrZXQgdGhhdCBoYXMgcGVuZGluZyByZXF1ZXN0cy4gU3BlY2lmaWNhbGx5IGl0J3MgdHJ5aW5nIHRvIGVuc3VyZSB0aGF0IGEgU1lOIHBhY2tldCB0aGF0IGFycml2ZWQgYmVmb3JlIHRoZSBzb2NrZXQgd2FzIGZ1bGx5IGxpc3RlbmluZyBpcyBub3QgbWlzc2VkLlxuSSdsbCBrZWVwIGBkb19pcHY2X3NldHNvY2tvcHRgIGluIG1pbmQsIGFuZCBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IG9wdGlvbiBpcyBiZWluZyBhZmZlY3RlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjU1NCwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgyNSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDA0OjM3OjI0LjkyMzc5NjJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODUzODk1ODUyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9faXB2Nl9zb2NrX21jX2Nsb3NlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmM9Mzc2PWludCBkb19pcHY2X3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxcbi0tXFxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jLTYwNC1cXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmM6NjA1OlxcdFxcdFxcdF9faXB2Nl9zb2NrX21jX2Nsb3NlKHNrKTtcXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMtNjA2LVxcdFxcdFxcdF9faXB2Nl9zb2NrX2FjX2Nsb3NlKHNrKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDQ6Mzc6MjUuNzc3Njk2ODIyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTI3MTE1MzE5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhhdCBzcGVjaWZpYyBjb2RlOlxuXG4qKkRpdmluZyBpbnRvIGlwdjZfc29ja2dsdWUuYyAtIExpbmUgNTg3KipcblxuT2theSwgSSdtIHplcm9pbmcgaW4gb24gbGluZSA1ODcgd2l0aGluIGBuZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcmVjYWxsIHdoYXQgZnVuY3Rpb25zIHR5cGljYWxseSBzdXJyb3VuZCB0aGlzIGFyZWEgaW4gdGhlIGZpbGUuIEkgaW1tZWRpYXRlbHkgc3RhcnQgbWVudGFsbHkgcGFyc2luZyB0aGUgY29kZSBmbG93LiBTaW5jZSB0aGlzIGZpbGUgZGVhbHMgd2l0aCB0aGUgZ2x1ZSBjb2RlIGJldHdlZW4gSVB2NiBhbmQgdGhlIHNvY2tldCBsYXllciwgSSdtIGV4cGVjdGluZyB0byBmaW5kIGFzcGVjdHMgcmVsYXRlZCB0byB0aGUgY29ubmVjdGlvbiBvZiBJUHY2IHNvY2tldHMgYW5kIGFueSBzdXBwb3J0aW5nIGZ1bmN0aW9ucy4gSSBrbm93IHRoaXMgZmlsZSBpcyBjcml0aWNhbCBmb3IgbWFuYWdpbmcgSVB2NiBzb2NrZXRzIGFuZCBpbnRlcmZhY2luZyB0aGVtIHdpdGggdGhlIGdlbmVyaWMgc29ja2V0IGxheWVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVuY3Rpb24gY2FsbCBvciBjb2RlIGJsb2NrIG9uIGxpbmUgNTg3IHRvIGRldGVybWluZSB3aGF0IHRoZSBzcGVjaWZpYyBjb250ZXh0IGlzLiBJcyBpdCBkZWFsaW5nIHdpdGggYWRkcmVzcyBmYW1pbHkgaGFuZGxpbmc/IFNvY2tldCBvcHRpb24gcHJvY2Vzc2luZz8gUG9zc2libHkgcmVsYXRlZCB0byBtdWx0aWNhc3Qgam9pbnMgb3IgbGVhdmVzPyBNYXliZSBpdCBoYW5kbGVzIHRoZSBhY3R1YWwgc29ja2V0IGNyZWF0aW9uIG9yIHRlYXJkb3duLiBLbm93aW5nIHRoaXMgZmlsZSBhbmQgYXJlYSwgSSBleHBlY3QgdG8gZGVhbCB3aXRoIGEgYHN0cnVjdCBzb2NrYCBvciBgc3RydWN0IGluZXQ2X3NvY2tgIGF0IHNvbWUgcG9pbnQuIEnigJltIHByZXBhcmluZyBteXNlbGYgZm9yIHRoYXQsIG1lbnRhbGx5IGxvb2tpbmcgZm9yIGhpbnRzLiBMZXQncyBzZWUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODA4NSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDA0OjM3OjMxLjA0ODg1MjM4M1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg5NTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1NzAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1NzA6XFx0XFx0XFx0XFx0fSBlbHNlIGlmIChzay1cXHUwMDNlc2tfcHJvdG9jb2wgPT0gSVBQUk9UT19UQ1ApIHtcXG4gNTcxOlxcdFxcdFxcdFxcdFxcdGlmIChzay1cXHUwMDNlc2tfcHJvdCAhPSBcXHUwMDI2dGNwdjZfcHJvdCkge1xcbiA1NzI6XFx0XFx0XFx0XFx0XFx0XFx0cmV0diA9IC1FQlVTWTtcXG4gNTczOlxcdFxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbiA1NzQ6XFx0XFx0XFx0XFx0XFx0fVxcbiA1NzU6XFx0XFx0XFx0XFx0fSBlbHNlIHtcXG4gNTc2OlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbiA1Nzc6XFx0XFx0XFx0XFx0fVxcbiA1Nzg6XFx0XFxuIDU3OTpcXHRcXHRcXHRcXHRpZiAoc2stXFx1MDAzZXNrX3N0YXRlICE9IFRDUF9FU1RBQkxJU0hFRCkge1xcbiA1ODA6XFx0XFx0XFx0XFx0XFx0cmV0diA9IC1FTk9UQ09OTjtcXG4gNTgxOlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbiA1ODI6XFx0XFx0XFx0XFx0fVxcbiA1ODM6XFx0XFxuIDU4NDpcXHRcXHRcXHRcXHRpZiAoaXB2Nl9vbmx5X3NvY2soc2spIHx8XFxuIDU4NTpcXHRcXHRcXHRcXHQgICAgIWlwdjZfYWRkcl92NG1hcHBlZChcXHUwMDI2c2stXFx1MDAzZXNrX3Y2X2RhZGRyKSkge1xcbiA1ODY6XFx0XFx0XFx0XFx0XFx0cmV0diA9IC1FQUREUk5PVEFWQUlMO1xcbiA1ODc6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDU4ODpcXHRcXHRcXHRcXHR9XFxuIDU4OTpcXHRcXG4gNTkwOlxcdFxcdFxcdFxcdGlmIChzay1cXHUwMDNlc2tfcHJvdG9jb2wgPT0gSVBQUk9UT19UQ1ApIHtcXG4gNTkxOlxcdFxcdFxcdFxcdFxcdGlmIChpbmV0X2Nza19yZXFza19xdWV1ZV9sZW4oc2spKSB7XFxuIDU5MjpcXHRcXHRcXHRcXHRcXHRcXHRyZXR2ID0gLUVCVVNZO1xcbiA1OTM6XFx0XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDU5NDpcXHRcXHRcXHRcXHRcXHR9XFxuIDU5NTpcXHRcXHRcXHRcXHRcXHQvKiBBIFNZTiB0aGF0IGZvdW5kIHRoaXMgc29ja2V0IHdoaWxlIGl0IHdhc1xcbiA1OTY6XFx0XFx0XFx0XFx0XFx0ICogc3RpbGwgbGlzdGVuaW5nIG1heSBub3QgYmUgY291bnRlZCB5ZXQuXFxuIDU5NzpcXHRcXHRcXHRcXHRcXHQgKi9cXG4gNTk4OlxcdFxcdFxcdFxcdFxcdHN5bmNocm9uaXplX3JjdSgpO1xcbiA1OTk6XFx0XFx0XFx0XFx0XFx0aWYgKGluZXRfY3NrX3JlcXNrX3F1ZXVlX2xlbihzaykpIHtcXG4gNjAwOlxcdFxcdFxcdFxcdFxcdFxcdHJldHYgPSAtRUJVU1k7XFxuIDYwMTpcXHRcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4gNjAyOlxcdFxcdFxcdFxcdFxcdH1cXG4gNjAzOlxcdFxcdFxcdFxcdH1cXG4gNjA0OlxcdFxcbiA2MDU6XFx0XFx0XFx0XFx0X19pcHY2X3NvY2tfbWNfY2xvc2Uoc2spO1xcbiA2MDY6XFx0XFx0XFx0XFx0X19pcHY2X3NvY2tfYWNfY2xvc2Uoc2spO1xcbiA2MDc6XFx0XFxuIDYwODpcXHRcXHRcXHRcXHRpZiAoc2stXFx1MDAzZXNrX3Byb3RvY29sID09IElQUFJPVE9fVENQKSB7XFxuIDYwOTpcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDA0OjM3OjMxLjA0ODk0MzIyM1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NjcyNTAxNjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIEknbSByZWFkeSB0byBzdW1tYXJpemUgdGhlIHByb3ZpZGVkIHRleHQgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXNzdW1pbmcgYSBoaWdoIGxldmVsIG9mIGV4cGVydGlzZSBpbiB0aGUgZmllbGQuIEhlcmUncyBob3cgSSdsbCBhcHByb2FjaCBpdDpcblxuKipNeSBJbml0aWFsIEFzc2Vzc21lbnQqKlxuXG5BbHJpZ2h0LCBsZXQncyB0YWtlIGEgbG9vayBhdCB0aGUgaW5wdXQuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgXCJvcHRpb25cIiByZWZlcnMgdG8sIGJlY2F1c2UgdGhlIHJlc3Qgb2YgdGhlIHRob3VnaHQgcHJvY2VzcyBoaW5nZXMgb24gY2xhcmlmeWluZyB0aGF0IHZhcmlhYmxlLiBJJ2xsIG5lZWQgdG8gcGFyc2UgdGhlIGNvbnRleHQgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgYW5kIHJlbGV2YW5jZSBvZiB0aGUgXCJvcHRpb25cIi4gSXQgY291bGQgYmUgYSBoeXBvdGhlc2lzLCBhIHZhcmlhYmxlIHBhcmFtZXRlciB3aXRoaW4gYW4gZXF1YXRpb24sIGEgZGVjaXNpb24gcG9pbnQgaW4gYW4gZXhwZXJpbWVudCwgb3IgZXZlbiBhIHByb3NwZWN0aXZlIHNvbHV0aW9uIHRvIGEgcHJvYmxlbS4gVGhlIGRlZ3JlZSBvZiB0aGUgY29tcGxleGl0eSB2YXJpZXMgYnkgdGhlIGNvbnRleHQuIEkgd2lsbCB3b3JrIHdpdGggdGhlIGNvbnRleHQgdG8gZGV0ZXJtaW5lIHRoZSBiZXN0IGFwcHJvYWNoLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4OTY5LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDA0OjM3OjM0LjUxNjE5ODI4NVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk0NDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1NDAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1NDA6XFx0XFx0XFx0aWYgKFJFQURfT05DRShzay1cXHUwMDNlc2tfYm91bmRfZGV2X2lmKSlcXG4gNTQxOlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA1NDI6XFx0XFxuIDU0MzpcXHRcXHRcXHRXUklURV9PTkNFKG5wLVxcdTAwM2V1Y2FzdF9vaWYsIGlmaW5kZXgpO1xcbiA1NDQ6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDU0NTpcXHRcXHR9XFxuIDU0NjpcXHRcXHR9XFxuIDU0NzpcXHRcXG4gNTQ4OlxcdFxcdHNvY2tvcHRfbG9ja19zb2NrKHNrKTtcXG4gNTQ5OlxcdFxcbiA1NTA6XFx0XFx0LyogQW5vdGhlciB0aHJlYWQgaGFzIGNvbnZlcnRlZCB0aGUgc29ja2V0IGludG8gSVB2NCB3aXRoXFxuIDU1MTpcXHRcXHQgKiBJUFY2X0FERFJGT1JNIGNvbmN1cnJlbnRseS5cXG4gNTUyOlxcdFxcdCAqL1xcbiA1NTM6XFx0XFx0aWYgKHVubGlrZWx5KHNrLVxcdTAwM2Vza19mYW1pbHkgIT0gQUZfSU5FVDYpKVxcbiA1NTQ6XFx0XFx0XFx0Z290byB1bmxvY2s7XFxuIDU1NTpcXHRcXG4gNTU2OlxcdFxcdHN3aXRjaCAob3B0bmFtZSkge1xcbiA1NTc6XFx0XFxuIDU1ODpcXHRcXHRjYXNlIElQVjZfQUREUkZPUk06XFxuIDU1OTpcXHRcXHRcXHRpZiAob3B0bGVuIFxcdTAwM2Mgc2l6ZW9mKGludCkpXFxuIDU2MDpcXHRcXHRcXHRcXHRnb3RvIGVfaW52YWw7XFxuIDU2MTpcXHRcXHRcXHRpZiAodmFsID09IFBGX0lORVQpIHtcXG4gNTYyOlxcdFxcdFxcdFxcdGlmIChzay1cXHUwMDNlc2tfdHlwZSA9PSBTT0NLX1JBVylcXG4gNTYzOlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbiA1NjQ6XFx0XFxuIDU2NTpcXHRcXHRcXHRcXHRpZiAoc2stXFx1MDAzZXNrX3Byb3RvY29sID09IElQUFJPVE9fVURQKSB7XFxuIDU2NjpcXHRcXHRcXHRcXHRcXHRpZiAodWRwX3NrKHNrKS1cXHUwMDNlcGVuZGluZyA9PSBBRl9JTkVUNikge1xcbiA1Njc6XFx0XFx0XFx0XFx0XFx0XFx0cmV0diA9IC1FQlVTWTtcXG4gNTY4OlxcdFxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbiA1Njk6XFx0XFx0XFx0XFx0XFx0fVxcbiA1NzA6XFx0XFx0XFx0XFx0fSBlbHNlIGlmIChzay1cXHUwMDNlc2tfcHJvdG9jb2wgPT0gSVBQUk9UT19UQ1ApIHtcXG4gNTcxOlxcdFxcdFxcdFxcdFxcdGlmIChzay1cXHUwMDNlc2tfcHJvdCAhPSBcXHUwMDI2dGNwdjZfcHJvdCkge1xcbiA1NzI6XFx0XFx0XFx0XFx0XFx0XFx0cmV0diA9IC1FQlVTWTtcXG4gNTczOlxcdFxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbiA1NzQ6XFx0XFx0XFx0XFx0XFx0fVxcbiA1NzU6XFx0XFx0XFx0XFx0fSBlbHNlIHtcXG4gNTc2OlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbiA1Nzc6XFx0XFx0XFx0XFx0fVxcbiA1Nzg6XFx0XFxuIDU3OTpcXHRcXHRcXHRcXHRpZiAoc2stXFx1MDAzZXNrX3N0YXRlICE9IFRDUF9FU1RBQkxJU0hFRCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwNDozNzozNC41MTYyOTM3NzVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODc2NzA4ODg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVENQIExpc3RlbiBTb2NrZXQgSGFuZGxpbmcgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGRlZmluaXRlbHkgZGVhbGluZyB3aXRoIGBJUFY2X0FERFJGT1JNYC4gSSBzZWUgaXQgcmlnaHQgdGhlcmUuIEl0IGxvb2tzIGxpa2UgdGhlIG1haW4gYXJlYSBvZiBmb2N1cyBpcyBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIGluY29taW5nIHBhY2tldHMgb24gbGlzdGVuaW5nIFRDUCBzb2NrZXRzLiBXZSdyZSB0YWxraW5nIHNwZWNpZmljYWxseSBhYm91dCB0aGUgZnVuY3Rpb25zIGB0Y3BfcmN2X2xpc3Rlbl9zdGF0ZV9wcm9jZXNzYCwgYHRjcF92NF9yY3ZfbGlzdGVuYCwgYW5kIGB0Y3BfdjZfcmN2X2xpc3RlbmAuIFRoYXQgbWFrZXMgc2Vuc2U7IGluY29taW5nIGNvbm5lY3Rpb25zIGhhdmUgdG8gYmUgcHJvcGVybHkgcm91dGVkIHRvIGEgc3BlY2lmaWMgc29ja2V0LlxuXG5CZXlvbmQgdGhlIHBhY2tldCBwcm9jZXNzaW5nIGZ1bmN0aW9ucywgdGhpcyBhbHNvIHRvdWNoZXMgb24gYElQVjZfQUREUkZPUk1gIHNldHNvY2tvcHQgaGFuZGxpbmcgZm9yIFRDUCBzb2NrZXRzLiBUaGlzIHByb2JhYmx5IGFmZmVjdHMgaG93IHdlIGRlYWwgd2l0aCB0aGUgZmFtaWx5IG9mIGNvbm5lY3Rpb25zIGJlaW5nIGFjY2VwdGVkLCB3aGljaCBpcyBjcml0aWNhbC5cblxuSSBuZWVkIHRvIGZvY3VzIG9uIGEgZmV3IGtleSBzeW1ib2xzIGhlcmU6IGB0Y3BfcmN2X2xpc3Rlbl9zdGF0ZV9wcm9jZXNzYCBiZWNhdXNlIHRoYXQncyB0aGUgaGVhcnQgb2Ygc3RhdGUgdHJhbnNpdGlvbnMgZm9yIGluY29taW5nIGNvbm5lY3Rpb25zLCBhbmQgYGRvX2lwdjZfc2V0c29ja29wdGAgd2hpY2ggbGlrZWx5IGRlYWxzIHdpdGggY29uZmlndXJhdGlvbnMuXG5cbk9mIGNvdXJzZSwgdGhlIGBJUFY2YCBjb25maWcgb3B0aW9uIGlzIGludm9sdmVkLCBwYXJ0aWN1bGFybHkgaW4gdGhlIGBkb19pcHY2X3NldHNvY2tvcHRgIGFuZCBgdGNwX3Y2X3Jjdl9saXN0ZW5gIGZ1bmN0aW9ucy4gSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IGBJUFY2YCBpcyB0aGUgKnJpZ2h0KiBjb25maWcgb3B0aW9uLCBidXQgSSdtIGJldHRpbmcgdGhhdCdzIHRoZSByaWdodCBvbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk3MTYsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwNDozNzozOS4zOTMwMDQ4MjlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg5MzI2NjM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJUFY2XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvS2NvbmZpZy01LVxcbm5ldC9pcHY2L0tjb25maWc6NjptZW51Y29uZmlnIElQVjZcXG5uZXQvaXB2Ni9LY29uZmlnLTctXFx0Ym9vbCBcXFwiVGhlIElQdjYgcHJvdG9jb2xcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnPTE5PWlmIElQVjZcXG5uZXQvaXB2Ni9LY29uZmlnLTIwLVxcbm5ldC9pcHY2L0tjb25maWc6MjE6Y29uZmlnIElQVjZfUk9VVEVSX1BSRUZcXG5uZXQvaXB2Ni9LY29uZmlnLTIyLVxcdGJvb2wgXFxcIklQdjY6IFJvdXRlciBQcmVmZXJlbmNlIChSRkMgNDE5MSkgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMzAtXFxubmV0L2lwdjYvS2NvbmZpZzozMTpjb25maWcgSVBWNl9ST1VURV9JTkZPXFxubmV0L2lwdjYvS2NvbmZpZy0zMi1cXHRib29sIFxcXCJJUHY2OiBSb3V0ZSBJbmZvcm1hdGlvbiAoUkZDIDQxOTEpIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTM4LVxcbm5ldC9pcHY2L0tjb25maWc6Mzk6Y29uZmlnIElQVjZfT1BUSU1JU1RJQ19EQURcXG5uZXQvaXB2Ni9LY29uZmlnLTQwLVxcdGJvb2wgXFxcIklQdjY6IEVuYWJsZSBSRkMgNDQyOSBPcHRpbWlzdGljIERBRFxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWc9MTAyPWNvbmZpZyBJTkVUNl9JUENPTVBcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMTExLVxcbm5ldC9pcHY2L0tjb25maWc6MTEyOmNvbmZpZyBJUFY2X01JUDZcXG5uZXQvaXB2Ni9LY29uZmlnLTExMy1cXHR0cmlzdGF0ZSBcXFwiSVB2NjogTW9iaWxpdHlcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTExOS1cXG5uZXQvaXB2Ni9LY29uZmlnOjEyMDpjb25maWcgSVBWNl9JTEFcXG5uZXQvaXB2Ni9LY29uZmlnLTEyMS1cXHR0cmlzdGF0ZSBcXFwiSVB2NjogSWRlbnRpZmllciBMb2NhdG9yIEFkZHJlc3NpbmcgKElMQSlcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnPTE0Nj1jb25maWcgSU5FVDZfVFVOTkVMXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTE0OS1cXG5uZXQvaXB2Ni9LY29uZmlnOjE1MDpjb25maWcgSVBWNl9WVElcXG5uZXQvaXB2Ni9LY29uZmlnLTE1MS1cXHR0cmlzdGF0ZSBcXFwiVmlydHVhbCAoc2VjdXJlKSBJUHY2OiB0dW5uZWxpbmdcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTE2MS1cXG5uZXQvaXB2Ni9LY29uZmlnOjE2Mjpjb25maWcgSVBWNl9TSVRcXG5uZXQvaXB2Ni9LY29uZmlnLTE2My1cXHR0cmlzdGF0ZSBcXFwiSVB2NjogSVB2Ni1pbi1JUHY0IHR1bm5lbCAoU0lUIGRyaXZlcilcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTE3Ni1cXG5uZXQvaXB2Ni9LY29uZmlnOjE3Nzpjb25maWcgSVBWNl9TSVRfNlJEXFxubmV0L2lwdjYvS2NvbmZpZy0xNzgtXFx0Ym9vbCBcXFwiSVB2NjogSVB2NiBSYXBpZCBEZXBsb3ltZW50ICg2UkQpXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0xOTUtXFxubmV0L2lwdjYvS2NvbmZpZzoxOTY6Y29uZmlnIElQVjZfTkRJU0NfTk9ERVRZUEVcXG5uZXQvaXB2Ni9LY29uZmlnLTE5Ny1cXHRib29sXFxubmV0L2lwdjYvS2NvbmZpZy0xOTgtXFxubmV0L2lwdjYvS2NvbmZpZzoxOTk6Y29uZmlnIElQVjZfVFVOTkVMXFxubmV0L2lwdjYvS2NvbmZpZy0yMDAtXFx0dHJpc3RhdGUgXFxcIklQdjY6IElQLWluLUlQdjYgdHVubmVsIChSRkMyNDczKVxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMjA5LVxcbm5ldC9pcHY2L0tjb25maWc6MjEwOmNvbmZpZyBJUFY2X0dSRVxcbm5ldC9pcHY2L0tjb25maWctMjExLVxcdHRyaXN0YXRlIFxcXCJJUHY2OiBHUkUgdHVubmVsXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0yMjctXFxubmV0L2lwdjYvS2NvbmZpZzoyMjg6Y29uZmlnIElQVjZfRk9VXFxubmV0L2lwdjYvS2NvbmZpZy0yMjktXFx0dHJpc3RhdGVcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMjMxLVxcbm5ldC9pcHY2L0tjb25maWc6MjMyOmNvbmZpZyBJUFY2X0ZPVV9UVU5ORUxcXG5uZXQvaXB2Ni9LY29uZmlnLTIzMy1cXHR0cmlzdGF0ZVxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0yMzYtXFxubmV0L2lwdjYvS2NvbmZpZzoyMzc6Y29uZmlnIElQVjZfTVVMVElQTEVfVEFCTEVTXFxubmV0L2lwdjYvS2NvbmZpZy0yMzgtXFx0Ym9vbCBcXFwiSVB2NjogTXVsdGlwbGUgUm91dGluZyBUYWJsZXNcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTI0Mi1cXG5uZXQvaXB2Ni9LY29uZmlnOjI0Mzpjb25maWcgSVBWNl9TVUJUUkVFU1xcbm5ldC9pcHY2L0tjb25maWctMjQ0LVxcdGJvb2wgXFxcIklQdjY6IHNvdXJjZSBhZGRyZXNzIGJhc2VkIHJvdXRpbmdcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTI1Ni1cXG5uZXQvaXB2Ni9LY29uZmlnOjI1Nzpjb25maWcgSVBWNl9NUk9VVEVcXG5uZXQvaXB2Ni9LY29uZmlnLTI1OC1cXHRib29sIFxcXCJJUHY2OiBtdWx0aWNhc3Qgcm91dGluZ1xcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMjY0LVxcbm5ldC9pcHY2L0tjb25maWc6MjY1OmNvbmZpZyBJUFY2X01ST1VURV9NVUxUSVBMRV9UQUJMRVNcXG5uZXQvaXB2Ni9LY29uZmlnLTI2Ni1cXHRib29sIFxcXCJJUHY2OiBtdWx0aWNhc3QgcG9saWN5IHJvdXRpbmdcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTI3OC1cXG5uZXQvaXB2Ni9LY29uZmlnOjI3OTpjb25maWcgSVBWNl9QSU1TTV9WMlxcbm5ldC9pcHY2L0tjb25maWctMjgwLVxcdGJvb2wgXFxcIklQdjY6IFBJTS1TTSB2ZXJzaW9uIDIgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMjg1LVxcbm5ldC9pcHY2L0tjb25maWc6Mjg2OmNvbmZpZyBJUFY2X1NFRzZfTFdUVU5ORUxcXG5uZXQvaXB2Ni9LY29uZmlnLTI4Ny1cXHRib29sIFxcXCJJUHY2OiBTZWdtZW50IFJvdXRpbmcgSGVhZGVyIGVuY2Fwc3VsYXRpb24gc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMjk5LVxcbm5ldC9pcHY2L0tjb25maWc6MzAwOmNvbmZpZyBJUFY2X1NFRzZfSE1BQ1xcbm5ldC9pcHY2L0tjb25maWctMzAxLVxcdGJvb2wgXFxcIklQdjY6IFNlZ21lbnQgUm91dGluZyBITUFDIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTMxMS1cXG5uZXQvaXB2Ni9LY29uZmlnOjMxMjpjb25maWcgSVBWNl9TRUc2X0JQRlxcbm5ldC9pcHY2L0tjb25maWctMzEzLVxcdGRlZl9ib29sIHlcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMzE2LVxcbm5ldC9pcHY2L0tjb25maWc6MzE3OmNvbmZpZyBJUFY2X1JQTF9MV1RVTk5FTFxcbm5ldC9pcHY2L0tjb25maWctMzE4LVxcdGJvb2wgXFxcIklQdjY6IFJQTCBTb3VyY2UgUm91dGluZyBIZWFkZXIgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMzI3LVxcbm5ldC9pcHY2L0tjb25maWc6MzI4OmNvbmZpZyBJUFY2X0lPQU02X0xXVFVOTkVMXFxubmV0L2lwdjYvS2NvbmZpZy0zMjktXFx0Ym9vbCBcXFwiSVB2NjogSU9BTSBQcmUtYWxsb2NhdGVkIFRyYWNlIGluc2VydGlvbiBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwNDozNzozOS40ODIzMzQ2MjhaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzM2NTY5NjcyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBGdXp6aW5nIFN0cmF0ZWd5OiBUYXJnZXRpbmcgVENQIExpc3RlbmluZyBTb2NrZXRzIHdpdGggSVB2NiBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gdGhlIGBJUFY2YCBjb25maWcgaXMgZGVmaW5pdGVseSByZWxldmFudCBoZXJlLiBNeSBpbml0aWFsIHJldmlldyBvZiB0aGUgY29kZSBoYXMgaGlnaGxpZ2h0ZWQgc2V2ZXJhbCBrZXkgZnVuY3Rpb25zIHRvIGZvY3VzIG15IGZ1enppbmcgZWZmb3J0cyBvbi4gSSd2ZSBwaW5wb2ludGVkIGB0Y3BfcmN2X2xpc3Rlbl9zdGF0ZV9wcm9jZXNzYCwgYGRvX2lwdjZfc2V0c29ja29wdGAsIGB0Y3BfdjRfcmN2YCwgYW5kIGB0Y3BfdjZfcmN2YCBhcyB0aGUgYXJlYXMgb2YgaW50ZXJlc3QuXG5cbkltbWVkaWF0ZWx5LCBJJ20gZGlzbWlzc2luZyBgdGNwX3Y0X3JjdmAgYW5kIGB0Y3BfdjZfcmN2YCDigJMgdGhvc2UgYXJlIGhvdC1wYXRoIGZ1bmN0aW9ucy4gRnV6emluZyB0aG9zZSBkaXJlY3RseSBpcyBsaWtlbHkgdG8gYmUgbm9pc3kgYW5kIGdlbmVyYXRlIGEgbG90IG9mIGZhbHNlIHBvc2l0aXZlcywgd2hpY2ggaXMgbm90IGlkZWFsLiBCdXQgdGhhdCBkb2Vzbid0IG1lYW4gSSB3b24ndCBpbmRpcmVjdGx5IHRlc3QgdGhlbS5cblxuYHRjcF9yY3ZfbGlzdGVuX3N0YXRlX3Byb2Nlc3NgIGxvb2tzIHByb21pc2luZywgdGhvdWdoLiBUaGUgc2FtZSBpcyB0cnVlIGZvciBgZG9faXB2Nl9zZXRzb2Nrb3B0YC4gSXQgbG9va3MgbGlrZSBgc2tfY2xvbmVgIGlzIG1vZGlmaWVkIHRvbywgYnV0IEknbSBzZXR0aW5nIGl0IGFzaWRlIGJlY2F1c2UgdGhhdCdzIG1vcmUgb2YgYSBnZW5lcmFsIGZ1bmN0aW9uLiBJdCdzIGxlc3MgbGlrZWx5IHRvIGV4cG9zZSB2dWxuZXJhYmlsaXRpZXMgc3BlY2lmaWMgdG8gdGhpcyBwYXRjaC5cblxuVGhlIG5leHQgcXVlc3Rpb246IGFyZSBgdGNwX3Jjdl9saXN0ZW5fc3RhdGVfcHJvY2Vzc2AgYW5kIGBkb19pcHY2X3NldHNvY2tvcHRgIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2U/IFllcywgaW4gYm90aCBjYXNlcy4gSSBjYW4gdHJpZ2dlciBgdGNwX3Jjdl9saXN0ZW5fc3RhdGVfcHJvY2Vzc2AgYnkgc2VuZGluZyBUQ1AgcGFja2V0cyB0byBhIGxpc3RlbmluZyBzb2NrZXQsIGFuZCBJIGNhbiB0cmlnZ2VyIGBkb19pcHY2X3NldHNvY2tvcHRgIGJ5IGNhbGxpbmcgYHNldHNvY2tvcHRgIHdpdGggYElQVjZfQUREUkZPUk1gIG9uIGFuIElQdjYgc29ja2V0LiBUaGVzZSBhcmUgaWRlYWwgdGFyZ2V0cy5cblxuRXNzZW50aWFsbHksIHRoaXMgcGF0Y2ggbW9kaWZpZXMgaG93IFRDUCBsaXN0ZW5pbmcgc29ja2V0cyBoYW5kbGUgcGFja2V0cyBhbmQgaW50cm9kdWNlcyBsb2NrbGVzcyByZWNlaXZlIHBhdGhzLiBJdCBhbHNvIGFkZHMgbmV3IGNoZWNrcyBpbiBgZG9faXB2Nl9zZXRzb2Nrb3B0YCB3aGVuIHlvdSBkZWFsIHdpdGggSVB2NiBzb2NrZXQgb3B0aW9ucyBhbmQgc29ja2V0cyB3aGljaCBoYXZlIHBlbmRpbmcgY29ubmVjdGlvbiByZXF1ZXN0cy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBjb3JlIFRDUCBzdGFjayBhbmQgSVB2NiBzb2NrZXQgb3B0aW9ucy4gVGhlc2UgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgbmV0d29yayB0cmFmZmljIGFuZCBhcmUgbXkga2V5IHRhcmdldHMgZm9yIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNzMxLCJPdXRwdXRUb2tlbnMiOjE2OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwNDozNzo0Ni44NDgwMzM0NjdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjY2NTMwNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBWNlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRjcF9yY3ZfbGlzdGVuX3N0YXRlX3Byb2Nlc3NcIixcbiAgICBcImRvX2lwdjZfc2V0c29ja29wdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIFRDUCBsaXN0ZW5pbmcgc29ja2V0IHBhY2tldCBwcm9jZXNzaW5nIGJ5IGludHJvZHVjaW5nIGB0Y3BfcmN2X2xpc3Rlbl9zdGF0ZV9wcm9jZXNzYCBhbmQgbG9ja2xlc3MgbGlzdGVuIHJlY2VpdmUgcGF0aHMgKGB0Y3BfdjRfcmN2X2xpc3RlbmAsIGB0Y3BfdjZfcmN2X2xpc3RlbmApLiBJdCBhbHNvIGFkZHMgY2hlY2tzIGluIGBkb19pcHY2X3NldHNvY2tvcHRgIGZvciBgSVBWNl9BRERSRk9STWAgb24gVENQIHNvY2tldHMgd2l0aCBwZW5kaW5nIGNvbm5lY3Rpb24gcmVxdWVzdHMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUgVENQIHN0YWNrIGFuZCBJUHY2IHNvY2tldCBvcHRpb25zLCByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIGFuZCBuZXR3b3JrIHRyYWZmaWMsIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQVjZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0Y3BfcmN2X2xpc3Rlbl9zdGF0ZV9wcm9jZXNzXCIsXG4gICAgXCJkb19pcHY2X3NldHNvY2tvcHRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBUQ1AgbGlzdGVuaW5nIHNvY2tldCBwYWNrZXQgcHJvY2Vzc2luZyBieSBpbnRyb2R1Y2luZyBgdGNwX3Jjdl9saXN0ZW5fc3RhdGVfcHJvY2Vzc2AgYW5kIGxvY2tsZXNzIGxpc3RlbiByZWNlaXZlIHBhdGhzIChgdGNwX3Y0X3Jjdl9saXN0ZW5gLCBgdGNwX3Y2X3Jjdl9saXN0ZW5gKS4gSXQgYWxzbyBhZGRzIGNoZWNrcyBpbiBgZG9faXB2Nl9zZXRzb2Nrb3B0YCBmb3IgYElQVjZfQUREUkZPUk1gIG9uIFRDUCBzb2NrZXRzIHdpdGggcGVuZGluZyBjb25uZWN0aW9uIHJlcXVlc3RzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBjb3JlIFRDUCBzdGFjayBhbmQgSVB2NiBzb2NrZXQgb3B0aW9ucywgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSBhbmQgbmV0d29yayB0cmFmZmljLCBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDQ6Mzc6NDYuOTI0NzA2MTA1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMzIzNTc4NjgyMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDA0OjM3OjQ2LjkyNTE4MDE1NVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjozMzIzNTMwOTI0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW1wbGVtZW50cyBsb2NrbGVzcyBUQ1AgbGlzdGVuZXIgcHJvY2Vzc2luZyBhbmQgZml4ZXMgc2V2ZXJhbCBpc3N1ZXMgcmVsYXRlZCB0byBzb2NrZXQgY2xvbmluZyBhbmQgc3RhdGUgaW5oZXJpdGFuY2UgKGUuZy4sIHJlc2V0dGluZyBgc2tfdHNxX2ZsYWdzYCwgYHBhY2tldHNfb3V0YCwgYW5kIGBwaW5ldDZgIGluIGNsb25lZCBzb2NrZXRzKS4gXFxuXFxuMS4gVGhlIGZpZWxkcyBiZWluZyBleHBsaWNpdGx5IHplcm9lZCBvciBzZXQgdG8gTlVMTCBpbiBgc2tfY2xvbmVgIGFuZCBgdGNwX2NyZWF0ZV9vcGVucmVxX2NoaWxkYCBkbyBub3QgcmVwcmVzZW50IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGV5IGFyZSBhbHJlYWR5IGZ1bGx5IGluaXRpYWxpemVkIHZpYSBgc29ja19jb3B5YCAod2hpY2ggY29waWVzIHRoZSBwYXJlbnQgc29ja2V0J3Mgc3RhdGUpLiBUaGUgY2hhbmdlcyBtZXJlbHkgcHJldmVudCB0aGUgY2hpbGQgc29ja2V0IGZyb20gaW5oZXJpdGluZyBzdGFsZSBvciBpbmNvcnJlY3QgdmFsdWVzIGZyb20gdGhlIGxpc3RlbmVyLlxcbjIuIFRoZSBsb2NrbGVzcyBsaXN0ZW5lciBwcm9jZXNzaW5nIChgdGNwX3Y0X3Jjdl9saXN0ZW5gKSBpbnRyb2R1Y2VzIGNvbmN1cnJlbmN5IGNoYW5nZXMuIEFueSByZXN1bHRpbmcgYnVncyB3b3VsZCBiZSBkYXRhIHJhY2VzIChjYXVnaHQgYnkgS0NTQU4pIG9yIHVzZS1hZnRlci1mcmVlL21lbW9yeSBjb3JydXB0aW9uIChjYXVnaHQgYnkgS0FTQU4pLlxcbjMuIFRoZSBgSVBWNl9BRERSRk9STWAgYW5kIGBkb19pcHY2X3NldHNvY2tvcHRgIGNoYW5nZXMgYWRkcmVzcyBsb2dpYyBidWdzIGFuZCBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW9zLCB3aGljaCBhcmUgd2VsbCB3aXRoaW4gdGhlIGRvbWFpbiBvZiBLQVNBTi5cXG5cXG5UaGVyZSBhcmUgbm8gbmV3IHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBubyBuZXcgYWxsb2NhdGlvbnMgbGVmdCB1bmluaXRpYWxpemVkLCBhbmQgbm8gY2hhbmdlcyB0byBib3VuZHMgY2hlY2tpbmcgdGhhdCB3b3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRodXMsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOGNlNWQ1NmMwNmY5Njg2ZTM5OGNlYTc3ODllNTE1ZmJmMzFiNWFkOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDI0IDA0OjM3OjExIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvdGNwLmggYi9pbmNsdWRlL25ldC90Y3AuaFxuaW5kZXggMmM1Yjg4OTUzMGI1NS4uYWRkNDM4ZDY1NjFiZSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L3RjcC5oXG4rKysgYi9pbmNsdWRlL25ldC90Y3AuaFxuQEAgLTM5Miw2ICszOTIsOCBAQCB2b2lkIHRjcF93cml0ZV90aW1lcl9oYW5kbGVyKHN0cnVjdCBzb2NrICpzayk7XG4gdm9pZCB0Y3BfZGVsYWNrX3RpbWVyX2hhbmRsZXIoc3RydWN0IHNvY2sgKnNrKTtcbiBpbnQgdGNwX2lvY3RsKHN0cnVjdCBzb2NrICpzaywgaW50IGNtZCwgaW50ICprYXJnKTtcbiBlbnVtIHNrYl9kcm9wX3JlYXNvbiB0Y3BfcmN2X3N0YXRlX3Byb2Nlc3Moc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbitlbnVtIHNrYl9kcm9wX3JlYXNvbiB0Y3BfcmN2X2xpc3Rlbl9zdGF0ZV9wcm9jZXNzKHN0cnVjdCBzb2NrICpzayxcbitcdFx0XHRcdFx0XHQgIHN0cnVjdCBza19idWZmICpza2IpO1xuIHZvaWQgdGNwX3Jjdl9lc3RhYmxpc2hlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpO1xuIHZvaWQgdGNwX3JjdmJ1Zl9ncm93KHN0cnVjdCBzb2NrICpzaywgdTMyIG5ld3ZhbCk7XG4gdm9pZCB0Y3BfcmN2X3NwYWNlX2FkanVzdChzdHJ1Y3Qgc29jayAqc2spO1xuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NvY2suYyBiL25ldC9jb3JlL3NvY2suY1xuaW5kZXggMWFkNDE5MDRkYjI1Yi4uMDZmYmIxOTgyNGUyNiAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL3NvY2suY1xuKysrIGIvbmV0L2NvcmUvc29jay5jXG5AQCAtMjQ3OSw3ICsyNDc5LDcgQEAgc3RhdGljIHZvaWQgc2tfaW5pdF9jb21tb24oc3RydWN0IHNvY2sgKnNrKVxuIHN0cnVjdCBzb2NrICpza19jbG9uZShjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IGdmcF90IHByaW9yaXR5LFxuIFx0XHQgICAgICBib29sIGxvY2spXG4ge1xuLVx0c3RydWN0IHByb3RvICpwcm90ID0gUkVBRF9PTkNFKHNrLVx1MDAzZXNrX3Byb3QpO1xuK1x0c3RydWN0IHByb3RvICpwcm90ID0gc2stXHUwMDNlc2tfcHJvdF9jcmVhdG9yO1xuIFx0c3RydWN0IHNrX2ZpbHRlciAqZmlsdGVyO1xuIFx0Ym9vbCBpc19jaGFyZ2VkID0gdHJ1ZTtcbiBcdHN0cnVjdCBzb2NrICpuZXdzaztcbkBAIC0yNTMzLDYgKzI1MzMsNyBAQCBzdHJ1Y3Qgc29jayAqc2tfY2xvbmUoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBjb25zdCBnZnBfdCBwcmlvcml0eSxcbiBcdG5ld3NrLVx1MDAzZXNrX3Jlc2VydmVkX21lbSAgPSAwO1xuIFx0REVCVUdfTkVUX1dBUk5fT05fT05DRShuZXdzay1cdTAwM2Vza19kcm9wX2NvdW50ZXJzKTtcbiBcdHNrX2Ryb3BzX3Jlc2V0KG5ld3NrKTtcbitcdG5ld3NrLVx1MDAzZXNrX3RzcV9mbGFnc1x0PSAwO1xuIFx0bmV3c2stXHUwMDNlc2tfc2VuZF9oZWFkXHQ9IE5VTEw7XG4gXHRuZXdzay1cdTAwM2Vza191c2VybG9ja3NcdD0gc2stXHUwMDNlc2tfdXNlcmxvY2tzIFx1MDAyNiB+U09DS19CSU5EUE9SVF9MT0NLO1xuIFx0YXRvbWljX3NldChcdTAwMjZuZXdzay1cdTAwM2Vza196Y2tleSwgMCk7XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2lucHV0LmMgYi9uZXQvaXB2NC90Y3BfaW5wdXQuY1xuaW5kZXggMGY2MGExZGJmOTI3NC4uNzdhZjE4ZmJhNjZiNCAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L3RjcF9pbnB1dC5jXG4rKysgYi9uZXQvaXB2NC90Y3BfaW5wdXQuY1xuQEAgLTcxNDEsNiArNzE0MSw0MiBAQCBzdGF0aWMgdm9pZCB0Y3BfcmN2X3N5bnJlY3Zfc3RhdGVfZmFzdG9wZW4oc3RydWN0IHNvY2sgKnNrKVxuIFx0dGNwX3JlYXJtX3J0byhzayk7XG4gfVxuIFxuK2VudW0gc2tiX2Ryb3BfcmVhc29uIHRjcF9yY3ZfbGlzdGVuX3N0YXRlX3Byb2Nlc3Moc3RydWN0IHNvY2sgKnNrLFxuK1x0XHRcdFx0XHRcdCAgc3RydWN0IHNrX2J1ZmYgKnNrYilcbit7XG4rXHRjb25zdCBzdHJ1Y3QgdGNwaGRyICp0aCA9IHRjcF9oZHIoc2tiKTtcbitcdFNLQl9EUihyZWFzb24pO1xuK1xuK1x0aWYgKHRoLVx1MDAzZWFjaylcbitcdFx0cmV0dXJuIFNLQl9EUk9QX1JFQVNPTl9UQ1BfRkxBR1M7XG4rXG4rXHRpZiAodGgtXHUwMDNlcnN0KSB7XG4rXHRcdFNLQl9EUl9TRVQocmVhc29uLCBUQ1BfUkVTRVQpO1xuK1x0XHRnb3RvIGRpc2NhcmQ7XG4rXHR9XG4rXHRpZiAodGgtXHUwMDNlc3luKSB7XG4rXHRcdGlmICh0aC1cdTAwM2VmaW4pIHtcbitcdFx0XHRTS0JfRFJfU0VUKHJlYXNvbiwgVENQX0ZMQUdTKTtcbitcdFx0XHRnb3RvIGRpc2NhcmQ7XG4rXHRcdH1cbitcdFx0LyogSXQgaXMgcG9zc2libGUgdGhhdCB3ZSBwcm9jZXNzIFNZTiBwYWNrZXRzIGZyb20gYmFja2xvZyxcbitcdFx0ICogc28gd2UgbmVlZCB0byBtYWtlIHN1cmUgdG8gZGlzYWJsZSBCSCBhbmQgUkNVIHJpZ2h0IHRoZXJlLlxuK1x0XHQgKi9cbitcdFx0cmN1X3JlYWRfbG9jaygpO1xuK1x0XHRsb2NhbF9iaF9kaXNhYmxlKCk7XG4rXHRcdGluZXRfY3NrKHNrKS1cdTAwM2VpY3NrX2FmX29wcy1cdTAwM2Vjb25uX3JlcXVlc3Qoc2ssIHNrYik7XG4rXHRcdGxvY2FsX2JoX2VuYWJsZSgpO1xuK1x0XHRyY3VfcmVhZF91bmxvY2soKTtcbitcbitcdFx0Y29uc3VtZV9za2Ioc2tiKTtcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXHRTS0JfRFJfU0VUKHJlYXNvbiwgVENQX0ZMQUdTKTtcbitkaXNjYXJkOlxuK1x0dGNwX2Ryb3BfcmVhc29uKHNrLCBza2IsIHJlYXNvbik7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gLypcbiAgKlx0VGhpcyBmdW5jdGlvbiBpbXBsZW1lbnRzIHRoZSByZWNlaXZpbmcgcHJvY2VkdXJlIG9mIFJGQyA3OTMgZm9yXG4gICpcdGFsbCBzdGF0ZXMgZXhjZXB0IEVTVEFCTElTSEVEIGFuZCBUSU1FX1dBSVQuXG5AQCAtNzE1Miw3ICs3MTg4LDYgQEAgZW51bSBza2JfZHJvcF9yZWFzb25cbiB0Y3BfcmN2X3N0YXRlX3Byb2Nlc3Moc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbiBcdHN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spO1xuLVx0c3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xuIFx0Y29uc3Qgc3RydWN0IHRjcGhkciAqdGggPSB0Y3BfaGRyKHNrYik7XG4gXHRzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXE7XG4gXHRpbnQgcXVldWVkID0gMDtcbkBAIC03MTY0LDMyICs3MTk5LDcgQEAgdGNwX3Jjdl9zdGF0ZV9wcm9jZXNzKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdFx0Z290byBkaXNjYXJkO1xuIFxuIFx0Y2FzZSBUQ1BfTElTVEVOOlxuLVx0XHRpZiAodGgtXHUwMDNlYWNrKVxuLVx0XHRcdHJldHVybiBTS0JfRFJPUF9SRUFTT05fVENQX0ZMQUdTO1xuLVxuLVx0XHRpZiAodGgtXHUwMDNlcnN0KSB7XG4tXHRcdFx0U0tCX0RSX1NFVChyZWFzb24sIFRDUF9SRVNFVCk7XG4tXHRcdFx0Z290byBkaXNjYXJkO1xuLVx0XHR9XG4tXHRcdGlmICh0aC1cdTAwM2VzeW4pIHtcbi1cdFx0XHRpZiAodGgtXHUwMDNlZmluKSB7XG4tXHRcdFx0XHRTS0JfRFJfU0VUKHJlYXNvbiwgVENQX0ZMQUdTKTtcbi1cdFx0XHRcdGdvdG8gZGlzY2FyZDtcbi1cdFx0XHR9XG4tXHRcdFx0LyogSXQgaXMgcG9zc2libGUgdGhhdCB3ZSBwcm9jZXNzIFNZTiBwYWNrZXRzIGZyb20gYmFja2xvZyxcbi1cdFx0XHQgKiBzbyB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0byBkaXNhYmxlIEJIIGFuZCBSQ1UgcmlnaHQgdGhlcmUuXG4tXHRcdFx0ICovXG4tXHRcdFx0cmN1X3JlYWRfbG9jaygpO1xuLVx0XHRcdGxvY2FsX2JoX2Rpc2FibGUoKTtcbi1cdFx0XHRpY3NrLVx1MDAzZWljc2tfYWZfb3BzLVx1MDAzZWNvbm5fcmVxdWVzdChzaywgc2tiKTtcbi1cdFx0XHRsb2NhbF9iaF9lbmFibGUoKTtcbi1cdFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbi1cbi1cdFx0XHRjb25zdW1lX3NrYihza2IpO1xuLVx0XHRcdHJldHVybiAwO1xuLVx0XHR9XG4tXHRcdFNLQl9EUl9TRVQocmVhc29uLCBUQ1BfRkxBR1MpO1xuLVx0XHRnb3RvIGRpc2NhcmQ7XG4rXHRcdHJldHVybiB0Y3BfcmN2X2xpc3Rlbl9zdGF0ZV9wcm9jZXNzKHNrLCBza2IpO1xuIFxuIFx0Y2FzZSBUQ1BfU1lOX1NFTlQ6XG4gXHRcdHRwLVx1MDAzZXJ4X29wdC5zYXdfdHN0YW1wID0gMDtcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfaXB2NC5jIGIvbmV0L2lwdjQvdGNwX2lwdjQuY1xuaW5kZXggMTkwYzdhZjRjZjkyMy4uMmZhODk1ODM4MGE1YiAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L3RjcF9pcHY0LmNcbisrKyBiL25ldC9pcHY0L3RjcF9pcHY0LmNcbkBAIC0xNzE0LDYgKzE3MTQsMTQgQEAgc3RydWN0IHNvY2sgKnRjcF92NF9zeW5fcmVjdl9zb2NrKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0aW5ldF9jc2sobmV3c2spLVx1MDAzZWljc2tfZXh0X2hkcl9sZW4gPSBpbmV0X29wdC1cdTAwM2VvcHQub3B0bGVuO1xuIFx0YXRvbWljX3NldChcdTAwMjZuZXdpbmV0LVx1MDAzZWluZXRfaWQsIGdldF9yYW5kb21fdTE2KCkpO1xuIFxuKyNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuK1x0LyogTmV2ZXIgaW5oZXJpdCB0aGUgbGlzdGVuZXIncyBpcHY2X3BpbmZvOyBJUFY2X0FERFJGT1JNIGxlYXZlcyBpdCBzZXRcbitcdCAqIG9uIGFuIEFGX0lORVQgc29ja2V0LiAgdGNwX3Y2X21hcHBlZF9jaGlsZF9pbml0KCkgaW5zdGFsbHMgb3VyIG93bi5cbitcdCAqL1xuK1x0bmV3aW5ldC1cdTAwM2VwaW5ldDYgPSBOVUxMO1xuK1x0bmV3aW5ldC1cdTAwM2VpcHY2X2ZsX2xpc3QgPSBOVUxMO1xuKyNlbmRpZlxuK1xuIFx0LyogU2V0IFRvUyBvZiB0aGUgbmV3IHNvY2tldCBiYXNlZCB1cG9uIHRoZSB2YWx1ZSBvZiBpbmNvbWluZyBTWU4uXG4gXHQgKiBFQ1QgYml0cyBhcmUgc2V0IGxhdGVyIGluIHRjcF9pbml0X3RyYW5zZmVyKCkuXG4gXHQgKi9cbkBAIC0xODIwLDcgKzE4MjgsNyBAQCB1MTYgdGNwX3Y0X2dldF9zeW5jb29raWUoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaXBoZHIgKmlwaCxcbiBJTkRJUkVDVF9DQUxMQUJMRV9ERUNMQVJFKHN0cnVjdCBkc3RfZW50cnkgKmlwdjRfZHN0X2NoZWNrKHN0cnVjdCBkc3RfZW50cnkgKixcbiBcdFx0XHRcdFx0XHRcdCAgIHUzMikpO1xuIC8qIFRoZSBzb2NrZXQgbXVzdCBoYXZlIGl0J3Mgc3BpbmxvY2sgaGVsZCB3aGVuIHdlIGdldFxuLSAqIGhlcmUsIHVubGVzcyBpdCBpcyBhIFRDUF9MSVNURU4gc29ja2V0LlxuKyAqIGhlcmUuXG4gICpcbiAgKiBXZSBoYXZlIGEgcG90ZW50aWFsIGRvdWJsZS1sb2NrIGNhc2UgaGVyZSwgc28gZXZlbiB3aGVuXG4gICogZG9pbmcgYmFja2xvZyBwcm9jZXNzaW5nIHdlIHVzZSB0aGUgQkggbG9ja2luZyBzY2hlbWUuXG5AQCAtMTg5OCw2ICsxOTA2LDQ2IEBAIGludCB0Y3BfdjRfZG9fcmN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdGdvdG8gZGlzY2FyZDtcbiB9XG4gXG4rLyogQHNrIGlzIG5vdCBsb2NrZWQgaGVyZSBhbmQgY2FuIGxlYXZlIFRDUF9MSVNURU47IGRvIG5vdCB0ZXN0IHNrX3N0YXRlLiAqL1xuK3N0YXRpYyBub2lubGluZSBpbnQgdGNwX3Y0X3Jjdl9saXN0ZW4oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuK3tcbitcdGVudW0gc2tiX2Ryb3BfcmVhc29uIHJlYXNvbjtcbitcdHN0cnVjdCBzb2NrICpuc2s7XG4rXG4rXHRyZWFzb24gPSBwc3Bfc2tfcnhfcG9saWN5X2NoZWNrKHNrLCBza2IpO1xuK1x0aWYgKHJlYXNvbilcbitcdFx0Z290byBlcnJfZGlzY2FyZDtcbitcbitcdGlmICh0Y3BfY2hlY2tzdW1fY29tcGxldGUoc2tiKSlcbitcdFx0Z290byBjc3VtX2VycjtcbitcbitcdG5zayA9IHRjcF92NF9jb29raWVfY2hlY2soc2ssIHNrYik7XG4rXHRpZiAoIW5zaylcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRpZiAobnNrICE9IHNrKSB7XG4rXHRcdHJlYXNvbiA9IHRjcF9jaGlsZF9wcm9jZXNzKHNrLCBuc2ssIHNrYik7XG4rXHRcdHNvY2tfcHV0KG5zayk7XG4rXHR9IGVsc2Uge1xuK1x0XHRyZWFzb24gPSB0Y3BfcmN2X2xpc3Rlbl9zdGF0ZV9wcm9jZXNzKHNrLCBza2IpO1xuK1x0fVxuK1x0aWYgKCFyZWFzb24pXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0dGNwX3Y0X3NlbmRfcmVzZXQoc2ssIHNrYiwgc2tfcnN0X2NvbnZlcnRfZHJvcF9yZWFzb24ocmVhc29uKSk7XG4rZGlzY2FyZDpcbitcdHNrX3NrYl9yZWFzb25fZHJvcChzaywgc2tiLCByZWFzb24pO1xuK1x0cmV0dXJuIDA7XG4rXG4rY3N1bV9lcnI6XG4rXHRyZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fVENQX0NTVU07XG4rXHR0cmFjZV90Y3BfYmFkX2NzdW0oc2tiKTtcbitcdFRDUF9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBUQ1BfTUlCX0NTVU1FUlJPUlMpO1xuK2Vycl9kaXNjYXJkOlxuK1x0VENQX0lOQ19TVEFUUyhzb2NrX25ldChzayksIFRDUF9NSUJfSU5FUlJTKTtcbitcdGdvdG8gZGlzY2FyZDtcbit9XG4rXG4gZW51bSBza2JfZHJvcF9yZWFzb24gdGNwX2FkZF9iYWNrbG9nKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG4gXHR1MzIgdGFpbF9nc29fc2l6ZSwgdGFpbF9nc29fc2VncztcbkBAIC0yMjM1LDcgKzIyODMsNyBAQCBpbnQgdGNwX3Y0X3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0c2tiLVx1MDAzZWRldiA9IE5VTEw7XG4gXG4gXHRpZiAoc2stXHUwMDNlc2tfc3RhdGUgPT0gVENQX0xJU1RFTikge1xuLVx0XHRyZXQgPSB0Y3BfdjRfZG9fcmN2KHNrLCBza2IpO1xuK1x0XHRyZXQgPSB0Y3BfdjRfcmN2X2xpc3Rlbihzaywgc2tiKTtcbiBcdFx0Z290byBwdXRfYW5kX3JldHVybjtcbiBcdH1cbiBcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMgYi9uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmNcbmluZGV4IDEyMjU0ZTZlYjJmMzQuLjJmZGUxOTZkZDMwMmYgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmNcbisrKyBiL25ldC9pcHY0L3RjcF9taW5pc29ja3MuY1xuQEAgLTU5MSw2ICs1OTEsNyBAQCBzdHJ1Y3Qgc29jayAqdGNwX2NyZWF0ZV9vcGVucmVxX2NoaWxkKGNvbnN0IHN0cnVjdCBzb2NrICpzayxcbiBcdG5ld3RwLVx1MDAzZXRvdGFsX3JldHJhbnMgPSByZXEtXHUwMDNlbnVtX3JldHJhbnM7XG4gXG4gXHR0Y3BfaW5pdF94bWl0X3RpbWVycyhuZXdzayk7XG4rXHRuZXd0cC1cdTAwM2VvdXRfb2Zfb3JkZXJfcXVldWUgPSBSQl9ST09UO1xuIFx0V1JJVEVfT05DRShuZXd0cC1cdTAwM2V3cml0ZV9zZXEsIG5ld3RwLVx1MDAzZXB1c2hlZF9zZXEgPSB0cmVxLVx1MDAzZXNudF9pc24gKyAxKTtcbiBcbiBcdGlmIChzb2NrX2ZsYWcobmV3c2ssIFNPQ0tfS0VFUE9QRU4pKVxuQEAgLTY1OSw2ICs2NjAsMTIgQEAgc3RydWN0IHNvY2sgKnRjcF9jcmVhdGVfb3BlbnJlcV9jaGlsZChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXG4gXHR0Y3BfZWNuX29wZW5yZXFfY2hpbGQobmV3c2ssIHJlcSwgc2tiKTtcbiBcdG5ld3RwLVx1MDAzZWZhc3RvcGVuX3JlcSA9IE5VTEw7XG4gXHRSQ1VfSU5JVF9QT0lOVEVSKG5ld3RwLVx1MDAzZWZhc3RvcGVuX3JzaywgTlVMTCk7XG4rXHRuZXd0cC1cdTAwM2VwYWNrZXRzX291dCA9IDA7XG4rXHRuZXd0cC1cdTAwM2VyZXRyYW5zX291dCA9IDA7XG4rXHRuZXd0cC1cdTAwM2VzYWNrZWRfb3V0ID0gMDtcbitcdG5ld3RwLVx1MDAzZWxvc3Rfb3V0ID0gMDtcbitcdG5ld3RwLVx1MDAzZXJldHJhbnNtaXRfc2tiX2hpbnQgPSBOVUxMO1xuK1x0bmV3dHAtXHUwMDNlaGlnaGVzdF9zYWNrID0gTlVMTDtcbiBcbiBcdG5ld3RwLVx1MDAzZWJwZl9jaGdfY2NfaW5wcm9ncmVzcyA9IDA7XG4gXHR0Y3BfYnBmX2Nsb25lKHNrLCBuZXdzayk7XG5AQCAtOTc0LDcgKzk4MSw3IEBAIHN0cnVjdCBzb2NrICp0Y3BfY2hlY2tfcmVxKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0dGNwX3Jlc2V0KHNrLCBza2IpO1xuIFx0fVxuIFx0aWYgKCFmYXN0b3Blbikge1xuLVx0XHRib29sIHVubGlua2VkID0gaW5ldF9jc2tfcmVxc2tfcXVldWVfZHJvcChzaywgcmVxKTtcbitcdFx0Ym9vbCB1bmxpbmtlZCA9IGluZXRfY3NrX3JlcXNrX3F1ZXVlX2Ryb3AocmVxLVx1MDAzZXJza19saXN0ZW5lciwgcmVxKTtcbiBcbiBcdFx0aWYgKHVubGlua2VkKVxuIFx0XHRcdF9fTkVUX0lOQ19TVEFUUyhzb2NrX25ldChzayksIExJTlVYX01JQl9FTUJSWU9OSUNSU1RTKTtcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9hZl9pbmV0Ni5jIGIvbmV0L2lwdjYvYWZfaW5ldDYuY1xuaW5kZXggMjgyOTEyYTExOTk5OS4uNjhiMzMwZjY5NDFkMCAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L2FmX2luZXQ2LmNcbisrKyBiL25ldC9pcHY2L2FmX2luZXQ2LmNcbkBAIC00NzksNiArNDc5LDEwIEBAIHZvaWQgaW5ldDZfY2xlYW51cF9zb2NrKHN0cnVjdCBzb2NrICpzaylcbiBcdHN0cnVjdCBza19idWZmICpza2I7XG4gXHRzdHJ1Y3QgaXB2Nl90eG9wdGlvbnMgKm9wdDtcbiBcbitcdC8qIEFGX0lORVQgY2hpbGQgb2YgYW4gSVBWNl9BRERSRk9STSdlZCBsaXN0ZW5lcjogbm90aGluZyBvZiBpdHMgb3duLiAqL1xuK1x0aWYgKCFucClcbitcdFx0cmV0dXJuO1xuK1xuIFx0LyogUmVsZWFzZSByeCBvcHRpb25zICovXG4gXG4gXHRza2IgPSB4Y2hnKFx1MDAyNm5wLVx1MDAzZXBrdG9wdGlvbnMsIE5VTEwpO1xuZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwdjZfc29ja2dsdWUuYyBiL25ldC9pcHY2L2lwdjZfc29ja2dsdWUuY1xuaW5kZXggYjRjOTc3NDM0YzJlMC4uNmQyZGQ5YWU0NmE5NiAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L2lwdjZfc29ja2dsdWUuY1xuKysrIGIvbmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jXG5AQCAtNTg3LDYgKzU4NywyMSBAQCBpbnQgZG9faXB2Nl9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdH1cbiBcbitcdFx0XHRpZiAoc2stXHUwMDNlc2tfcHJvdG9jb2wgPT0gSVBQUk9UT19UQ1ApIHtcbitcdFx0XHRcdGlmIChpbmV0X2Nza19yZXFza19xdWV1ZV9sZW4oc2spKSB7XG4rXHRcdFx0XHRcdHJldHYgPSAtRUJVU1k7XG4rXHRcdFx0XHRcdGJyZWFrO1xuK1x0XHRcdFx0fVxuK1x0XHRcdFx0LyogQSBTWU4gdGhhdCBmb3VuZCB0aGlzIHNvY2tldCB3aGlsZSBpdCB3YXNcbitcdFx0XHRcdCAqIHN0aWxsIGxpc3RlbmluZyBtYXkgbm90IGJlIGNvdW50ZWQgeWV0LlxuK1x0XHRcdFx0ICovXG4rXHRcdFx0XHRzeW5jaHJvbml6ZV9yY3UoKTtcbitcdFx0XHRcdGlmIChpbmV0X2Nza19yZXFza19xdWV1ZV9sZW4oc2spKSB7XG4rXHRcdFx0XHRcdHJldHYgPSAtRUJVU1k7XG4rXHRcdFx0XHRcdGJyZWFrO1xuK1x0XHRcdFx0fVxuK1x0XHRcdH1cbitcbiBcdFx0XHRfX2lwdjZfc29ja19tY19jbG9zZShzayk7XG4gXHRcdFx0X19pcHY2X3NvY2tfYWNfY2xvc2Uoc2spO1xuIFxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L3RjcF9pcHY2LmMgYi9uZXQvaXB2Ni90Y3BfaXB2Ni5jXG5pbmRleCA5ZTkxNTViMWIzYWE3Li5hMmRlZGE5YTQyNThiIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvdGNwX2lwdjYuY1xuKysrIGIvbmV0L2lwdjYvdGNwX2lwdjYuY1xuQEAgLTE1NTYsNyArMTU1Niw3IEBAIHN0YXRpYyBzdHJ1Y3Qgc29jayAqdGNwX3Y2X3N5bl9yZWN2X3NvY2soY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqXG4gSU5ESVJFQ1RfQ0FMTEFCTEVfREVDTEFSRShzdHJ1Y3QgZHN0X2VudHJ5ICppcHY0X2RzdF9jaGVjayhzdHJ1Y3QgZHN0X2VudHJ5ICosXG4gXHRcdFx0XHRcdFx0XHQgICB1MzIpKTtcbiAvKiBUaGUgc29ja2V0IG11c3QgaGF2ZSBpdCdzIHNwaW5sb2NrIGhlbGQgd2hlbiB3ZSBnZXRcbi0gKiBoZXJlLCB1bmxlc3MgaXQgaXMgYSBUQ1BfTElTVEVOIHNvY2tldC5cbisgKiBoZXJlLlxuICAqXG4gICogV2UgaGF2ZSBhIHBvdGVudGlhbCBkb3VibGUtbG9jayBjYXNlIGhlcmUsIHNvIGV2ZW4gd2hlblxuICAqIGRvaW5nIGJhY2tsb2cgcHJvY2Vzc2luZyB3ZSB1c2UgdGhlIEJIIGxvY2tpbmcgc2NoZW1lLlxuQEAgLTE3MDQsNiArMTcwNCw0NiBAQCBpbnQgdGNwX3Y2X2RvX3JjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rLyogQHNrIGlzIG5vdCBsb2NrZWQgaGVyZSBhbmQgY2FuIGxlYXZlIFRDUF9MSVNURU47IGRvIG5vdCB0ZXN0IHNrX3N0YXRlLiAqL1xuK3N0YXRpYyBub2lubGluZSBpbnQgdGNwX3Y2X3Jjdl9saXN0ZW4oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuK3tcbitcdGVudW0gc2tiX2Ryb3BfcmVhc29uIHJlYXNvbjtcbitcdHN0cnVjdCBzb2NrICpuc2s7XG4rXG4rXHRyZWFzb24gPSBwc3Bfc2tfcnhfcG9saWN5X2NoZWNrKHNrLCBza2IpO1xuK1x0aWYgKHJlYXNvbilcbitcdFx0Z290byBlcnJfZGlzY2FyZDtcbitcbitcdGlmICh0Y3BfY2hlY2tzdW1fY29tcGxldGUoc2tiKSlcbitcdFx0Z290byBjc3VtX2VycjtcbitcbitcdG5zayA9IHRjcF92Nl9jb29raWVfY2hlY2soc2ssIHNrYik7XG4rXHRpZiAoIW5zaylcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRpZiAobnNrICE9IHNrKSB7XG4rXHRcdHJlYXNvbiA9IHRjcF9jaGlsZF9wcm9jZXNzKHNrLCBuc2ssIHNrYik7XG4rXHRcdHNvY2tfcHV0KG5zayk7XG4rXHR9IGVsc2Uge1xuK1x0XHRyZWFzb24gPSB0Y3BfcmN2X2xpc3Rlbl9zdGF0ZV9wcm9jZXNzKHNrLCBza2IpO1xuK1x0fVxuK1x0aWYgKCFyZWFzb24pXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0dGNwX3Y2X3NlbmRfcmVzZXQoc2ssIHNrYiwgc2tfcnN0X2NvbnZlcnRfZHJvcF9yZWFzb24ocmVhc29uKSk7XG4rZGlzY2FyZDpcbitcdHNrX3NrYl9yZWFzb25fZHJvcChzaywgc2tiLCByZWFzb24pO1xuK1x0cmV0dXJuIDA7XG4rXG4rY3N1bV9lcnI6XG4rXHRyZWFzb24gPSBTS0JfRFJPUF9SRUFTT05fVENQX0NTVU07XG4rXHR0cmFjZV90Y3BfYmFkX2NzdW0oc2tiKTtcbitcdFRDUF9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBUQ1BfTUlCX0NTVU1FUlJPUlMpO1xuK2Vycl9kaXNjYXJkOlxuK1x0VENQX0lOQ19TVEFUUyhzb2NrX25ldChzayksIFRDUF9NSUJfSU5FUlJTKTtcbitcdGdvdG8gZGlzY2FyZDtcbit9XG4rXG4gc3RhdGljIHZvaWQgdGNwX3Y2X2ZpbGxfY2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IGlwdjZoZHIgKmhkcixcbiBcdFx0XHQgICBjb25zdCBzdHJ1Y3QgdGNwaGRyICp0aClcbiB7XG5AQCAtMTg5MSw3ICsxOTMxLDcgQEAgSU5ESVJFQ1RfQ0FMTEFCTEVfU0NPUEUgaW50IHRjcF92Nl9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdHNrYi1cdTAwM2VkZXYgPSBOVUxMO1xuIFxuIFx0aWYgKHNrLVx1MDAzZXNrX3N0YXRlID09IFRDUF9MSVNURU4pIHtcbi1cdFx0cmV0ID0gdGNwX3Y2X2RvX3Jjdihzaywgc2tiKTtcbitcdFx0cmV0ID0gdGNwX3Y2X3Jjdl9saXN0ZW4oc2ssIHNrYik7XG4gXHRcdGdvdG8gcHV0X2FuZF9yZXR1cm47XG4gXHR9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQwNDozNzo0Ni45MjUxODE4MDVaIiwiU2VxIjoxNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMyMzUyNzczMzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQXNzZXNzbWVudDogVGhpcyBQYXRjaCBEb2Vzbid0IFdhcnJhbnQgSXQqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoaXMgcGF0Y2guIEl0J3MgbW9kaWZ5aW5nIFRDUCBzb2NrZXQgaGFuZGxpbmcsIGVzcGVjaWFsbHkgYXJvdW5kIHRoZSBgVENQX0xJU1RFTmAgc3RhdGUgYW5kIHNvY2tldCBjbG9uaW5nLiBJbml0aWFsbHksIEkgdGhvdWdodCB0aGlzIG1pZ2h0IGJlIGEgS01TQU4gY2FuZGlkYXRlLCBidXQgYWZ0ZXIgYSBkZWVwIGRpdmUsIEknbSBwcmV0dHkgY29uZmlkZW50IGl0J3Mgbm90LlxuXG5UaGUgcGF0Y2gncyBjb3JlIGNoYW5nZSBpcyB0byBtYWtlIHRoZSBUQ1AgbGlzdGVuZXIgcHJvY2Vzc2luZyBsb2NrbGVzcywgcHVsbGluZyB0aGUgbG9naWMgb3V0IGludG8gYHRjcF92NF9yY3ZfbGlzdGVuYCBhbmQgYHRjcF92Nl9yY3ZfbGlzdGVuYC4gVGhhdCdzIGEgaHVnZSBzaGlmdCDigJMgaXQncyBhbGwgYWJvdXQgY29uY3VycmVuY3kgbm93LiBUaGUgYmlnIGRlYWwgaGVyZSBpcyB0aGUgcG90ZW50aWFsIGZvciByYWNlIGNvbmRpdGlvbnMgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyBiZWNhdXNlIHdlJ3JlIHRha2luZyBhd2F5IHRoYXQgbG9jayBwcm90ZWN0aW9uLiBIb3dldmVyLCB0aGVzZSBhcmUgcHJlY2lzZWx5IHRoZSBraW5kcyBvZiB0aGluZ3MgS0NTQU4gKGRhdGEgcmFjZXMpIGFuZCBLQVNBTiAoVUFGLCBtZW1vcnkgY29ycnVwdGlvbikgYXJlIGJ1aWx0IHRvIGNhdGNoLiBLTVNBTiBpc24ndCB0aGUgcmlnaHQgdG9vbCBmb3IgdGhvc2UgdHlwZXMgb2YgY29uY3VycmVuY3kgaXNzdWVzLlxuXG5UaGVyZSBhcmUgYWxzbyBzZXZlcmFsIGNoYW5nZXMgcmVsYXRlZCB0byBzb2NrZXQgY2xvbmluZyAoYHNrX2Nsb25lYCBhbmQgYHRjcF9jcmVhdGVfb3BlbnJlcV9jaGlsZGApLCBtYWtpbmcgc3VyZSBjZXJ0YWluIGZpZWxkcyBhcmUgcmVzZXQgd2hlbiBhIG5ldyBzb2NrZXQgaXMgY3JlYXRlZCBmcm9tIHRoZSBsaXN0ZW5lciBzb2NrZXQuIEkgd2FzIGNvbmNlcm5lZCBhYm91dCB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiB0aGUgY2xvbmVkIHNvY2tldCwgYnV0IHRoYXQncyBub3QgdGhlIGNhc2UuIFRoZSBgc29ja19jb3B5YCBmdW5jdGlvbiAqZnVsbHkqIGNvcGllcyB0aGUgcGFyZW50IHNvY2tldCdzIGRhdGEgdXNpbmcgYG1lbWNweWAuIFRoZSBwYXRjaCBpcyBzaW1wbHkgcmVzZXR0aW5nIHNvbWUgb2YgdGhlc2UgZmllbGRzIChsaWtlIGBza190c3FfZmxhZ3NgLCBgcGFja2V0c19vdXRgLCBhbmQgYHBpbmV0NmApIHRvIHRoZWlyIGluaXRpYWwgemVybyBzdGF0ZSBpbiB0aGUgY2hpbGQgc29ja2V0LiBJdCdzIGFib3V0IHByZXZlbnRpbmcgdGhlIGNoaWxkIHNvY2tldCBmcm9tIGluaGVyaXRpbmcgcG90ZW50aWFsbHkgc3RhbGUgb3IgaW5jb3JyZWN0IHZhbHVlcyBmcm9tIHRoZSBwYXJlbnQsIG5vdCBhYm91dCBkZWFsaW5nIHdpdGggdW5pbml0aWFsaXplZCBtZW1vcnkuIFNvLCB0aGlzIGlzbid0IGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlOyBpdCdzIGEgbG9naWMgYnVnIGZpeCwgb3IgYSBkZWZlbnNpdmUgbWVhc3VyZS5cblxuRmluYWxseSwgdGhlIGZpeCBmb3IgYElQVjZfQUREUkZPUk1gIGFuZCB0aGUgYWRqdXN0bWVudHMgaW4gYGRvX2lwdjZfc2V0c29ja29wdGAgc3BlY2lmaWNhbGx5IHNhZmVndWFyZCBhZ2FpbnN0IHBvdGVudGlhbCBkb3VibGUtZnJlZSBvciB1c2UtYWZ0ZXItZnJlZSBidWdzIHJlbGF0ZWQgdG8gYHBpbmV0NmAuIFRoaXMgZmFsbHMgc3F1YXJlbHkgd2l0aGluIEtBU0FOJ3MgZGV0ZWN0aW9uIGNhcGFiaWxpdGllcy4gQWxzbywgYGRvX2lwdjZfc2V0c29ja29wdGAgc2VlbXMgdG8gYmUgcHJldmVudGluZyBzb2NrZXQgb3B0aW9ucyBmcm9tIGJlaW5nIGNoYW5nZWQgZHVyaW5nIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCwgbGlrZWx5IHRvIHByZXZlbnQgbW9yZSBwb3RlbnRpYWwgYnVncy5cblxuSW4gY29uY2x1c2lvbiwgbm9uZSBvZiB0aGVzZSBjaGFuZ2VzIGludHJvZHVjZSwgbm9yIGV4cG9zZSwgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIFRoZSBwYXRjaCBmb2N1c2VzIG9uIGNvbmN1cnJlbmN5IChLQ1NBTi9LQVNBTikgYW5kIGNvcnJlY3RpbmcgbG9naWMvZGF0YSBmbG93IGlzc3VlcyBkdXJpbmcgY2xvbmluZyBhbmQgc3RhdGUgaW5oZXJpdGFuY2UgKEtBU0FOKS4gR2l2ZW4gdGhlIFwicnVsZXNcIiBmb3IgZGV0ZXJtaW5pbmcgd2hldGhlciB0byBpbmNsdWRlIEtNU0FOIGluIHRlc3RpbmcsIHRoaXMgc2VlbXMgdG8gYmUgYSBoYXJkIFwibm9cIi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjU1MSwiT3V0cHV0VG9rZW5zIjoyOTMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDg0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMDQ6Mzg6MjAuMTYwNDYzMzk1WiIsIlNlcSI6MTYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQyNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbXBsZW1lbnRzIGxvY2tsZXNzIFRDUCBsaXN0ZW5lciBwcm9jZXNzaW5nIGFuZCBmaXhlcyBzZXZlcmFsIGlzc3VlcyByZWxhdGVkIHRvIHNvY2tldCBjbG9uaW5nIGFuZCBzdGF0ZSBpbmhlcml0YW5jZSAoZS5nLiwgcmVzZXR0aW5nIGBza190c3FfZmxhZ3NgLCBgcGFja2V0c19vdXRgLCBhbmQgYHBpbmV0NmAgaW4gY2xvbmVkIHNvY2tldHMpLiBcXG5cXG4xLiBUaGUgZmllbGRzIGJlaW5nIGV4cGxpY2l0bHkgemVyb2VkIG9yIHNldCB0byBOVUxMIGluIGBza19jbG9uZWAgYW5kIGB0Y3BfY3JlYXRlX29wZW5yZXFfY2hpbGRgIGRvIG5vdCByZXByZXNlbnQgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXkgYXJlIGFscmVhZHkgZnVsbHkgaW5pdGlhbGl6ZWQgdmlhIGBzb2NrX2NvcHlgICh3aGljaCBjb3BpZXMgdGhlIHBhcmVudCBzb2NrZXQncyBzdGF0ZSkuIFRoZSBjaGFuZ2VzIG1lcmVseSBwcmV2ZW50IHRoZSBjaGlsZCBzb2NrZXQgZnJvbSBpbmhlcml0aW5nIHN0YWxlIG9yIGluY29ycmVjdCB2YWx1ZXMgZnJvbSB0aGUgbGlzdGVuZXIuXFxuMi4gVGhlIGxvY2tsZXNzIGxpc3RlbmVyIHByb2Nlc3NpbmcgKGB0Y3BfdjRfcmN2X2xpc3RlbmApIGludHJvZHVjZXMgY29uY3VycmVuY3kgY2hhbmdlcy4gQW55IHJlc3VsdGluZyBidWdzIHdvdWxkIGJlIGRhdGEgcmFjZXMgKGNhdWdodCBieSBLQ1NBTikgb3IgdXNlLWFmdGVyLWZyZWUvbWVtb3J5IGNvcnJ1cHRpb24gKGNhdWdodCBieSBLQVNBTikuXFxuMy4gVGhlIGBJUFY2X0FERFJGT1JNYCBhbmQgYGRvX2lwdjZfc2V0c29ja29wdGAgY2hhbmdlcyBhZGRyZXNzIGxvZ2ljIGJ1Z3MgYW5kIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpb3MsIHdoaWNoIGFyZSB3ZWxsIHdpdGhpbiB0aGUgZG9tYWluIG9mIEtBU0FOLlxcblxcblRoZXJlIGFyZSBubyBuZXcgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vIG5ldyBhbGxvY2F0aW9ucyBsZWZ0IHVuaW5pdGlhbGl6ZWQsIGFuZCBubyBjaGFuZ2VzIHRvIGJvdW5kcyBjaGVja2luZyB0aGF0IHdvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbXBsZW1lbnRzIGxvY2tsZXNzIFRDUCBsaXN0ZW5lciBwcm9jZXNzaW5nIGFuZCBmaXhlcyBzZXZlcmFsIGlzc3VlcyByZWxhdGVkIHRvIHNvY2tldCBjbG9uaW5nIGFuZCBzdGF0ZSBpbmhlcml0YW5jZSAoZS5nLiwgcmVzZXR0aW5nIGBza190c3FfZmxhZ3NgLCBgcGFja2V0c19vdXRgLCBhbmQgYHBpbmV0NmAgaW4gY2xvbmVkIHNvY2tldHMpLiBcXG5cXG4xLiBUaGUgZmllbGRzIGJlaW5nIGV4cGxpY2l0bHkgemVyb2VkIG9yIHNldCB0byBOVUxMIGluIGBza19jbG9uZWAgYW5kIGB0Y3BfY3JlYXRlX29wZW5yZXFfY2hpbGRgIGRvIG5vdCByZXByZXNlbnQgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXkgYXJlIGFscmVhZHkgZnVsbHkgaW5pdGlhbGl6ZWQgdmlhIGBzb2NrX2NvcHlgICh3aGljaCBjb3BpZXMgdGhlIHBhcmVudCBzb2NrZXQncyBzdGF0ZSkuIFRoZSBjaGFuZ2VzIG1lcmVseSBwcmV2ZW50IHRoZSBjaGlsZCBzb2NrZXQgZnJvbSBpbmhlcml0aW5nIHN0YWxlIG9yIGluY29ycmVjdCB2YWx1ZXMgZnJvbSB0aGUgbGlzdGVuZXIuXFxuMi4gVGhlIGxvY2tsZXNzIGxpc3RlbmVyIHByb2Nlc3NpbmcgKGB0Y3BfdjRfcmN2X2xpc3RlbmApIGludHJvZHVjZXMgY29uY3VycmVuY3kgY2hhbmdlcy4gQW55IHJlc3VsdGluZyBidWdzIHdvdWxkIGJlIGRhdGEgcmFjZXMgKGNhdWdodCBieSBLQ1NBTikgb3IgdXNlLWFmdGVyLWZyZWUvbWVtb3J5IGNvcnJ1cHRpb24gKGNhdWdodCBieSBLQVNBTikuXFxuMy4gVGhlIGBJUFY2X0FERFJGT1JNYCBhbmQgYGRvX2lwdjZfc2V0c29ja29wdGAgY2hhbmdlcyBhZGRyZXNzIGxvZ2ljIGJ1Z3MgYW5kIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpb3MsIHdoaWNoIGFyZSB3ZWxsIHdpdGhpbiB0aGUgZG9tYWluIG9mIEtBU0FOLlxcblxcblRoZXJlIGFyZSBubyBuZXcgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vIG5ldyBhbGxvY2F0aW9ucyBsZWZ0IHVuaW5pdGlhbGl6ZWQsIGFuZCBubyBjaGFuZ2VzIHRvIGJvdW5kcyBjaGVja2luZyB0aGF0IHdvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowvp7s2[1] Phase: Succeeded StartedAt: 2026-08-24 04:38:31 +0000 UTC FinishedAt: 2026-08-24 04:38:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvp7s2[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-24 04:38:31 +0000 UTC FinishedAt: 2026-08-24 04:38:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvp7s2[2] Phase: Succeeded StartedAt: 2026-08-24 04:38:31 +0000 UTC FinishedAt: 2026-08-24 08:18:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvp7s2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6776efe4a52f289a3fc18f8adf19b035a7d8e1bb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"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":["tcp_rcv_listen_state_process","do_ipv6_setsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6776efe4a52f289a3fc18f8adf19b035a7d8e1bb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"e7e0bb8d-bf58-45bd-933a-214f06568d18","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-08-24 04:38:31 +0000 UTC FinishedAt: 2026-08-24 08:18:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"6776efe4a52f289a3fc18f8adf19b035a7d8e1bb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"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":["tcp_rcv_listen_state_process","do_ipv6_setsockopt"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"6776efe4a52f289a3fc18f8adf19b035a7d8e1bb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"e7e0bb8d-bf58-45bd-933a-214f06568d18","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-workflowvp7s2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6776efe4a52f289a3fc18f8adf19b035a7d8e1bb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"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":["tcp_rcv_listen_state_process","do_ipv6_setsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6776efe4a52f289a3fc18f8adf19b035a7d8e1bb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"e7e0bb8d-bf58-45bd-933a-214f06568d18","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-08-24 04:38:31 +0000 UTC FinishedAt: 2026-08-24 04:38:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvp7s2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6776efe4a52f289a3fc18f8adf19b035a7d8e1bb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"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":["tcp_rcv_listen_state_process","do_ipv6_setsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6776efe4a52f289a3fc18f8adf19b035a7d8e1bb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"e7e0bb8d-bf58-45bd-933a-214f06568d18","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-08-24 04:38:31 +0000 UTC FinishedAt: 2026-08-24 04:38:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"6776efe4a52f289a3fc18f8adf19b035a7d8e1bb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"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-workflowvp7s2/series-workflowvp7s2-convert-artifact-189867713/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvp7s2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6776efe4a52f289a3fc18f8adf19b035a7d8e1bb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"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":["tcp_rcv_listen_state_process","do_ipv6_setsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6776efe4a52f289a3fc18f8adf19b035a7d8e1bb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"e7e0bb8d-bf58-45bd-933a-214f06568d18","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-08-24 04:38:42 +0000 UTC FinishedAt: 2026-08-24 04:55:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvp7s2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6776efe4a52f289a3fc18f8adf19b035a7d8e1bb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"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":["tcp_rcv_listen_state_process","do_ipv6_setsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6776efe4a52f289a3fc18f8adf19b035a7d8e1bb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"e7e0bb8d-bf58-45bd-933a-214f06568d18","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-08-24 04:38:42 +0000 UTC FinishedAt: 2026-08-24 04:55:23 +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:*8f731f27-e764-43b1-abb1-2a415b2c6d50,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-workflowvp7s2/series-workflowvp7s2-convert-artifact-189867713/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": "98ba7af8-cab4-416d-b836-60b3535c1ebb", "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-workflowvp7s2/series-workflowvp7s2-build-action-3311291631/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvp7s2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6776efe4a52f289a3fc18f8adf19b035a7d8e1bb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"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":["tcp_rcv_listen_state_process","do_ipv6_setsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6776efe4a52f289a3fc18f8adf19b035a7d8e1bb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"e7e0bb8d-bf58-45bd-933a-214f06568d18","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-08-24 04:38:42 +0000 UTC FinishedAt: 2026-08-24 04:55:13 +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:*8f731f27-e764-43b1-abb1-2a415b2c6d50,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-workflowvp7s2/series-workflowvp7s2-convert-artifact-189867713/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": "98ba7af8-cab4-416d-b836-60b3535c1ebb", "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-workflowvp7s2/series-workflowvp7s2-build-action-3311291631/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvp7s2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6776efe4a52f289a3fc18f8adf19b035a7d8e1bb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"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":["tcp_rcv_listen_state_process","do_ipv6_setsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6776efe4a52f289a3fc18f8adf19b035a7d8e1bb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"e7e0bb8d-bf58-45bd-933a-214f06568d18","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-08-24 04:55:23 +0000 UTC FinishedAt: 2026-08-24 04:55:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvp7s2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6776efe4a52f289a3fc18f8adf19b035a7d8e1bb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"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":["tcp_rcv_listen_state_process","do_ipv6_setsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6776efe4a52f289a3fc18f8adf19b035a7d8e1bb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"e7e0bb8d-bf58-45bd-933a-214f06568d18","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-08-24 04:55:23 +0000 UTC FinishedAt: 2026-08-24 04:55:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvp7s2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6776efe4a52f289a3fc18f8adf19b035a7d8e1bb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"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":["tcp_rcv_listen_state_process","do_ipv6_setsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6776efe4a52f289a3fc18f8adf19b035a7d8e1bb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"e7e0bb8d-bf58-45bd-933a-214f06568d18","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-08-24 04:55:23 +0000 UTC FinishedAt: 2026-08-24 04:55:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvp7s2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6776efe4a52f289a3fc18f8adf19b035a7d8e1bb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"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":["tcp_rcv_listen_state_process","do_ipv6_setsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6776efe4a52f289a3fc18f8adf19b035a7d8e1bb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"e7e0bb8d-bf58-45bd-933a-214f06568d18","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-08-24 04:55:23 +0000 UTC FinishedAt: 2026-08-24 04:55:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"6776efe4a52f289a3fc18f8adf19b035a7d8e1bb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"e7e0bb8d-bf58-45bd-933a-214f06568d18","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-workflowvp7s2/series-workflowvp7s2-convert-artifact-2734194580/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvp7s2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6776efe4a52f289a3fc18f8adf19b035a7d8e1bb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"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":["tcp_rcv_listen_state_process","do_ipv6_setsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6776efe4a52f289a3fc18f8adf19b035a7d8e1bb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"e7e0bb8d-bf58-45bd-933a-214f06568d18","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-08-24 04:55:33 +0000 UTC FinishedAt: 2026-08-24 04:57:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvp7s2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6776efe4a52f289a3fc18f8adf19b035a7d8e1bb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"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":["tcp_rcv_listen_state_process","do_ipv6_setsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6776efe4a52f289a3fc18f8adf19b035a7d8e1bb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"e7e0bb8d-bf58-45bd-933a-214f06568d18","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-08-24 04:55:33 +0000 UTC FinishedAt: 2026-08-24 04:57:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*98ba7af8-cab4-416d-b836-60b3535c1ebb,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-workflowvp7s2/series-workflowvp7s2-build-action-3311291631/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-workflowvp7s2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6776efe4a52f289a3fc18f8adf19b035a7d8e1bb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"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":["tcp_rcv_listen_state_process","do_ipv6_setsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6776efe4a52f289a3fc18f8adf19b035a7d8e1bb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"e7e0bb8d-bf58-45bd-933a-214f06568d18","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-08-24 04:57:26 +0000 UTC FinishedAt: 2026-08-24 04:57:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvp7s2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6776efe4a52f289a3fc18f8adf19b035a7d8e1bb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"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":["tcp_rcv_listen_state_process","do_ipv6_setsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6776efe4a52f289a3fc18f8adf19b035a7d8e1bb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"e7e0bb8d-bf58-45bd-933a-214f06568d18","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-08-24 04:57:26 +0000 UTC FinishedAt: 2026-08-24 04:57:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvp7s2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6776efe4a52f289a3fc18f8adf19b035a7d8e1bb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"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":["tcp_rcv_listen_state_process","do_ipv6_setsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6776efe4a52f289a3fc18f8adf19b035a7d8e1bb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"e7e0bb8d-bf58-45bd-933a-214f06568d18","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-08-24 04:57:26 +0000 UTC FinishedAt: 2026-08-24 05:14:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvp7s2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6776efe4a52f289a3fc18f8adf19b035a7d8e1bb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"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":["tcp_rcv_listen_state_process","do_ipv6_setsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6776efe4a52f289a3fc18f8adf19b035a7d8e1bb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"e7e0bb8d-bf58-45bd-933a-214f06568d18","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-08-24 04:57:26 +0000 UTC FinishedAt: 2026-08-24 05:14:10 +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:*8f731f27-e764-43b1-abb1-2a415b2c6d50,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-workflowvp7s2/series-workflowvp7s2-convert-artifact-2734194580/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": "3ee59cd8-fb90-457c-9f2f-96d4a199bb1c", "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-workflowvp7s2/series-workflowvp7s2-build-action-406906976/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvp7s2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6776efe4a52f289a3fc18f8adf19b035a7d8e1bb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"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":["tcp_rcv_listen_state_process","do_ipv6_setsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6776efe4a52f289a3fc18f8adf19b035a7d8e1bb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"e7e0bb8d-bf58-45bd-933a-214f06568d18","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-08-24 04:57:26 +0000 UTC FinishedAt: 2026-08-24 05:14:00 +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:*8f731f27-e764-43b1-abb1-2a415b2c6d50,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-workflowvp7s2/series-workflowvp7s2-convert-artifact-2734194580/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": "3ee59cd8-fb90-457c-9f2f-96d4a199bb1c", "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-workflowvp7s2/series-workflowvp7s2-build-action-406906976/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvp7s2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6776efe4a52f289a3fc18f8adf19b035a7d8e1bb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"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":["tcp_rcv_listen_state_process","do_ipv6_setsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6776efe4a52f289a3fc18f8adf19b035a7d8e1bb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"e7e0bb8d-bf58-45bd-933a-214f06568d18","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-08-24 05:14:10 +0000 UTC FinishedAt: 2026-08-24 05:14:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvp7s2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6776efe4a52f289a3fc18f8adf19b035a7d8e1bb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"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":["tcp_rcv_listen_state_process","do_ipv6_setsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6776efe4a52f289a3fc18f8adf19b035a7d8e1bb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"e7e0bb8d-bf58-45bd-933a-214f06568d18","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-08-24 05:14:10 +0000 UTC FinishedAt: 2026-08-24 05:14:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvp7s2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6776efe4a52f289a3fc18f8adf19b035a7d8e1bb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"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":["tcp_rcv_listen_state_process","do_ipv6_setsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6776efe4a52f289a3fc18f8adf19b035a7d8e1bb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"e7e0bb8d-bf58-45bd-933a-214f06568d18","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-08-24 05:14:10 +0000 UTC FinishedAt: 2026-08-24 05:16:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvp7s2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6776efe4a52f289a3fc18f8adf19b035a7d8e1bb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"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":["tcp_rcv_listen_state_process","do_ipv6_setsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6776efe4a52f289a3fc18f8adf19b035a7d8e1bb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"e7e0bb8d-bf58-45bd-933a-214f06568d18","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-08-24 05:14:10 +0000 UTC FinishedAt: 2026-08-24 05:16:04 +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:*3ee59cd8-fb90-457c-9f2f-96d4a199bb1c,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-workflowvp7s2/series-workflowvp7s2-build-action-406906976/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-workflowvp7s2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6776efe4a52f289a3fc18f8adf19b035a7d8e1bb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"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":["tcp_rcv_listen_state_process","do_ipv6_setsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6776efe4a52f289a3fc18f8adf19b035a7d8e1bb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"e7e0bb8d-bf58-45bd-933a-214f06568d18","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-08-24 05:16:13 +0000 UTC FinishedAt: 2026-08-24 08:18:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvp7s2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6776efe4a52f289a3fc18f8adf19b035a7d8e1bb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"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":["tcp_rcv_listen_state_process","do_ipv6_setsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6776efe4a52f289a3fc18f8adf19b035a7d8e1bb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"e7e0bb8d-bf58-45bd-933a-214f06568d18","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-08-24 05:16:13 +0000 UTC FinishedAt: 2026-08-24 08:18:14 +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":["tcp_rcv_listen_state_process","do_ipv6_setsockopt"],"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:*98ba7af8-cab4-416d-b836-60b3535c1ebb,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*3ee59cd8-fb90-457c-9f2f-96d4a199bb1c,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-workflowvp7s2/series-workflowvp7s2-build-action-3311291631/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-workflowvp7s2/series-workflowvp7s2-build-action-406906976/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowvp7s2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6776efe4a52f289a3fc18f8adf19b035a7d8e1bb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"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":["tcp_rcv_listen_state_process","do_ipv6_setsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6776efe4a52f289a3fc18f8adf19b035a7d8e1bb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"e7e0bb8d-bf58-45bd-933a-214f06568d18","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-08-24 05:16:13 +0000 UTC FinishedAt: 2026-08-24 05:16:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvp7s2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6776efe4a52f289a3fc18f8adf19b035a7d8e1bb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"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":["tcp_rcv_listen_state_process","do_ipv6_setsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6776efe4a52f289a3fc18f8adf19b035a7d8e1bb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"e7e0bb8d-bf58-45bd-933a-214f06568d18","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-08-24 05:16:13 +0000 UTC FinishedAt: 2026-08-24 05:16:17 +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":["tcp_rcv_listen_state_process","do_ipv6_setsockopt"],"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-workflowvp7s2/series-workflowvp7s2-convert-artifact-3021423805/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvp7s2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6776efe4a52f289a3fc18f8adf19b035a7d8e1bb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"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":["tcp_rcv_listen_state_process","do_ipv6_setsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6776efe4a52f289a3fc18f8adf19b035a7d8e1bb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"e7e0bb8d-bf58-45bd-933a-214f06568d18","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-08-24 05:16:13 +0000 UTC FinishedAt: 2026-08-24 05:16:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvp7s2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6776efe4a52f289a3fc18f8adf19b035a7d8e1bb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"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":["tcp_rcv_listen_state_process","do_ipv6_setsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6776efe4a52f289a3fc18f8adf19b035a7d8e1bb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"e7e0bb8d-bf58-45bd-933a-214f06568d18","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-08-24 05:16:13 +0000 UTC FinishedAt: 2026-08-24 05:16:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvp7s2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6776efe4a52f289a3fc18f8adf19b035a7d8e1bb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"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":["tcp_rcv_listen_state_process","do_ipv6_setsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6776efe4a52f289a3fc18f8adf19b035a7d8e1bb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"e7e0bb8d-bf58-45bd-933a-214f06568d18","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-08-24 05:16:13 +0000 UTC FinishedAt: 2026-08-24 05:16:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvp7s2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6776efe4a52f289a3fc18f8adf19b035a7d8e1bb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"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":["tcp_rcv_listen_state_process","do_ipv6_setsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6776efe4a52f289a3fc18f8adf19b035a7d8e1bb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"e7e0bb8d-bf58-45bd-933a-214f06568d18","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-08-24 05:16:23 +0000 UTC FinishedAt: 2026-08-24 08:18:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvp7s2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6776efe4a52f289a3fc18f8adf19b035a7d8e1bb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"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":["tcp_rcv_listen_state_process","do_ipv6_setsockopt"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6776efe4a52f289a3fc18f8adf19b035a7d8e1bb","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"e7e0bb8d-bf58-45bd-933a-214f06568d18","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-08-24 05:16:23 +0000 UTC FinishedAt: 2026-08-24 08:18:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*98ba7af8-cab4-416d-b836-60b3535c1ebb,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*3ee59cd8-fb90-457c-9f2f-96d4a199bb1c,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-workflowvp7s2/series-workflowvp7s2-build-action-3311291631/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-workflowvp7s2/series-workflowvp7s2-build-action-406906976/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-workflowvp7s2/series-workflowvp7s2-convert-artifact-3021423805/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,}