Name: series-workflowkxl8r Phase: Succeeded StartedAt: 2026-09-08 01:44:12 +0000 UTC FinishedAt: 2026-09-08 03:51:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkxl8r[0] Phase: Succeeded StartedAt: 2026-09-08 01:44:12 +0000 UTC FinishedAt: 2026-09-08 02:10:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkxl8r[0].run-triage Phase: Succeeded StartedAt: 2026-09-08 01:44:12 +0000 UTC FinishedAt: 2026-09-08 02:10:48 +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": "38b6be101006d3e7af972999f45d4f1e8250587a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USB_USBNET", "USB_NET_DRIVERS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "38b6be101006d3e7af972999f45d4f1e8250587a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USB_USBNET", "USB_NET_DRIVERS" ], "series_id": "d31463ae-eac4-4e26-9fd0-83de4f515992" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "usbnet_skb_return", "tx_complete" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA4IDAyOjA3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTQl9VU0JORVQmIzM0OywKICAgICYjMzQ7VVNCX05FVF9EUklWRVJTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dXNibmV0X3NrYl9yZXR1cm4mIzM0OywKICAgICYjMzQ7dHhfY29tcGxldGUmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBwZXItQ1BVIG5ldHdvcmsgc3RhdGlzdGljcyBhY2NvdW50aW5nIGluIGRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYywgcmVwbGFjaW5nIHRoaXNfY3B1X3B0cigpIGFuZCBpcnFzYXZlL2lycXJlc3RvcmUgNjQtYml0IHN0YXRzIHVwZGF0ZSBoZWxwZXJzIHdpdGggZ2V0X2NwdV9wdHIoKSwgdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbi9lbmQoKSwgYW5kIHB1dF9jcHVfcHRyKCkuIFRoaXMgZW5zdXJlcyBwcmVlbXB0aW9uIGlzIHByb3Blcmx5IGRpc2FibGVkIHdoaWxlIGFjY2Vzc2luZyB0aGUgcGVyLUNQVSBwb2ludGVyLlxuXG5UaGUgY2hhbmdlcyBkbyBub3QgYWxsb2NhdGUgbmV3IGJ1ZmZlcnMsIG1hbmlwdWxhdGUgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGFsdGVyIGJ1ZmZlciBsZW5ndGgvYm91bmRzIGNhbGN1bGF0aW9ucywgb3IgY29weSBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm8tbGVhayByaXNrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIEtNU0FOIGZ1enppbmcuIEFueSBwb3RlbnRpYWwgc3luY2hyb25pemF0aW9uIG9yIHByZWVtcHRpb24gYnVncyB3b3VsZCBiZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dlcnMgKERFQlVHX1BSRUVNUFQsIExPQ0tERVAsIEtBU0FOKS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgcGVyLUNQVSA2NC1iaXQgbmV0d29yayBzdGF0aXN0aWNzIHVwZGF0ZSBzeW5jaHJvbml6YXRpb24gaW4gdXNibmV0X3NrYl9yZXR1cm4gYW5kIHR4X2NvbXBsZXRlIChkcml2ZXJzL25ldC91c2IvdXNibmV0LmMpLCByZXBsYWNpbmcgSVJRLXNhdmluZyB1NjRfc3RhdHMgaGVscGVycyB3aXRoIGdldF9jcHVfcHRyL3B1dF9jcHVfcHRyIHBhaXJzIGFuZCB1NjRfc3RhdHNfdXBkYXRlX2JlZ2luL2VuZC4gVGhpcyB0b3VjaGVzIHJlYWNoYWJsZSBVU0IgbmV0d29ya2luZyBkcml2ZXIgbG9naWMgdGhhdCBjYW4gYmUgdGVzdGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB3aXRoIGVtdWxhdGVkIFVTQiBuZXR3b3JrIGRldmljZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDI6MDc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA2MTU2NWFjNDljOTg0YmU0MGQyMTIzY2EwMDlkYjJhY2Q3NDI3NzUwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgOCAwMjowNzoyNyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvdXNibmV0LmMgYi9kcml2ZXJzL25ldC91c2IvdXNibmV0LmNcbmluZGV4IGExOWVjZjcxOGYzNmEuLjNkZjcyYjBjNmJjZmMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC91c2IvdXNibmV0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3VzYi91c2JuZXQuY1xuQEAgLTMyNSw4ICYjNDM7MzI1LDcgQEAgc3RhdGljIHZvaWQgX191c2JuZXRfc3RhdHVzX3N0b3BfZm9yY2Uoc3RydWN0IHVzYm5ldCAqZGV2KVxuICAqL1xuIHZvaWQgdXNibmV0X3NrYl9yZXR1cm4oc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbi1cdHN0cnVjdCBwY3B1X3N3X25ldHN0YXRzICpzdGF0czY0ID0gdGhpc19jcHVfcHRyKGRldi1cdTAwM2VuZXQtXHUwMDNldHN0YXRzKTtcbi1cdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4mIzQzO1x0c3RydWN0IHBjcHVfc3dfbmV0c3RhdHMgKnN0YXRzNjQ7XG4gXHRpbnRcdHN0YXR1cztcbiBcbiBcdGlmICh0ZXN0X2JpdChFVkVOVF9SWF9QQVVTRUQsIFx1MDAyNmRldi1cdTAwM2VmbGFncykpIHtcbkBAIC0zMzgsMTAgJiM0MzszMzcsMTIgQEAgdm9pZCB1c2JuZXRfc2tiX3JldHVybihzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRpZiAoc2tiLVx1MDAzZXByb3RvY29sID09IDApXG4gXHRcdHNrYi1cdTAwM2Vwcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgZGV2LVx1MDAzZW5ldCk7XG4gXG4tXHRmbGFncyA9IHU2NF9zdGF0c191cGRhdGVfYmVnaW5faXJxc2F2ZShcdTAwMjZzdGF0czY0LVx1MDAzZXN5bmNwKTtcbiYjNDM7XHRzdGF0czY0ID0gZ2V0X2NwdV9wdHIoZGV2LVx1MDAzZW5ldC1cdTAwM2V0c3RhdHMpO1xuJiM0MztcdHU2NF9zdGF0c191cGRhdGVfYmVnaW4oXHUwMDI2c3RhdHM2NC1cdTAwM2VzeW5jcCk7XG4gXHR1NjRfc3RhdHNfaW5jKFx1MDAyNnN0YXRzNjQtXHUwMDNlcnhfcGFja2V0cyk7XG4gXHR1NjRfc3RhdHNfYWRkKFx1MDAyNnN0YXRzNjQtXHUwMDNlcnhfYnl0ZXMsIHNrYi1cdTAwM2VsZW4pO1xuLVx0dTY0X3N0YXRzX3VwZGF0ZV9lbmRfaXJxcmVzdG9yZShcdTAwMjZzdGF0czY0LVx1MDAzZXN5bmNwLCBmbGFncyk7XG4mIzQzO1x0dTY0X3N0YXRzX3VwZGF0ZV9lbmQoXHUwMDI2c3RhdHM2NC1cdTAwM2VzeW5jcCk7XG4mIzQzO1x0cHV0X2NwdV9wdHIoZGV2LVx1MDAzZW5ldC1cdTAwM2V0c3RhdHMpO1xuIFxuIFx0bmV0aWZfZGJnKGRldiwgcnhfc3RhdHVzLCBkZXYtXHUwMDNlbmV0LCBcJiMzNDtcdTAwM2MgcngsIGxlbiAlenUsIHR5cGUgMHgleFxcblwmIzM0OyxcbiBcdFx0ICBza2ItXHUwMDNlbGVuICYjNDM7IHNpemVvZihzdHJ1Y3QgZXRoaGRyKSwgc2tiLVx1MDAzZXByb3RvY29sKTtcbkBAIC0xMjk4LDEzICYjNDM7MTI5OSwxNCBAQCBzdGF0aWMgdm9pZCB0eF9jb21wbGV0ZShzdHJ1Y3QgdXJiICp1cmIpXG4gXHRzdHJ1Y3QgdXNibmV0XHRcdCpkZXYgPSBlbnRyeS1cdTAwM2VkZXY7XG4gXG4gXHRpZiAodXJiLVx1MDAzZXN0YXR1cyA9PSAwKSB7XG4tXHRcdHN0cnVjdCBwY3B1X3N3X25ldHN0YXRzICpzdGF0czY0ID0gdGhpc19jcHVfcHRyKGRldi1cdTAwM2VuZXQtXHUwMDNldHN0YXRzKTtcbi1cdFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiYjNDM7XHRcdHN0cnVjdCBwY3B1X3N3X25ldHN0YXRzICpzdGF0czY0O1xuIFxuLVx0XHRmbGFncyA9IHU2NF9zdGF0c191cGRhdGVfYmVnaW5faXJxc2F2ZShcdTAwMjZzdGF0czY0LVx1MDAzZXN5bmNwKTtcbiYjNDM7XHRcdHN0YXRzNjQgPSBnZXRfY3B1X3B0cihkZXYtXHUwMDNlbmV0LVx1MDAzZXRzdGF0cyk7XG4mIzQzO1x0XHR1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKFx1MDAyNnN0YXRzNjQtXHUwMDNlc3luY3ApO1xuIFx0XHR1NjRfc3RhdHNfYWRkKFx1MDAyNnN0YXRzNjQtXHUwMDNldHhfcGFja2V0cywgZW50cnktXHUwMDNlcGFja2V0cyk7XG4gXHRcdHU2NF9zdGF0c19hZGQoXHUwMDI2c3RhdHM2NC1cdTAwM2V0eF9ieXRlcywgZW50cnktXHUwMDNlbGVuZ3RoKTtcbi1cdFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmRfaXJxcmVzdG9yZShcdTAwMjZzdGF0czY0LVx1MDAzZXN5bmNwLCBmbGFncyk7XG4mIzQzO1x0XHR1NjRfc3RhdHNfdXBkYXRlX2VuZChcdTAwMjZzdGF0czY0LVx1MDAzZXN5bmNwKTtcbiYjNDM7XHRcdHB1dF9jcHVfcHRyKGRldi1cdTAwM2VuZXQtXHUwMDNldHN0YXRzKTtcbiBcdH0gZWxzZSB7XG4gXHRcdGRldi1cdTAwM2VuZXQtXHUwMDNlc3RhdHMudHhfZXJyb3JzJiM0MzsmIzQzOztcbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMjowNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtVU0JfVVNCTkVUJiMzNDssCiAgICAmIzM0O1VTQl9ORVRfRFJJVkVSUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3VzYm5ldF9za2JfcmV0dXJuJiMzNDssCiAgICAmIzM0O3R4X2NvbXBsZXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHBlci1DUFUgNjQtYml0IG5ldHdvcmsgc3RhdGlzdGljcyB1cGRhdGUgc3luY2hyb25pemF0aW9uIGluIHVzYm5ldF9za2JfcmV0dXJuIGFuZCB0eF9jb21wbGV0ZSAoZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jKSwgcmVwbGFjaW5nIElSUS1zYXZpbmcgdTY0X3N0YXRzIGhlbHBlcnMgd2l0aCBnZXRfY3B1X3B0ci9wdXRfY3B1X3B0ciBwYWlycyBhbmQgdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbi9lbmQuIFRoaXMgdG91Y2hlcyByZWFjaGFibGUgVVNCIG5ldHdvcmtpbmcgZHJpdmVyIGxvZ2ljIHRoYXQgY2FuIGJlIHRlc3RlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgd2l0aCBlbXVsYXRlZCBVU0IgbmV0d29yayBkZXZpY2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNjE1NjVhYzQ5Yzk4NGJlNDBkMjEyM2NhMDA5ZGIyYWNkNzQyNzc1MApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDggMDI6MDc6MjcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvdXNibmV0LmMgYi9kcml2ZXJzL25ldC91c2IvdXNibmV0LmMKaW5kZXggYTE5ZWNmNzE4ZjM2YS4uM2RmNzJiMGM2YmNmYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3VzYi91c2JuZXQuYwpAQCAtMzI1LDggJiM0MzszMjUsNyBAQCBzdGF0aWMgdm9pZCBfX3VzYm5ldF9zdGF0dXNfc3RvcF9mb3JjZShzdHJ1Y3QgdXNibmV0ICpkZXYpCiAgKi8KIHZvaWQgdXNibmV0X3NrYl9yZXR1cm4oc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCXN0cnVjdCBwY3B1X3N3X25ldHN0YXRzICpzdGF0czY0ID0gdGhpc19jcHVfcHRyKGRldi0mZ3Q7bmV0LSZndDt0c3RhdHMpOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiYjNDM7CXN0cnVjdCBwY3B1X3N3X25ldHN0YXRzICpzdGF0czY0OwogCWludAlzdGF0dXM7CiAKIAlpZiAodGVzdF9iaXQoRVZFTlRfUlhfUEFVU0VELCAmYW1wO2Rldi0mZ3Q7ZmxhZ3MpKSB7CkBAIC0zMzgsMTAgJiM0MzszMzcsMTIgQEAgdm9pZCB1c2JuZXRfc2tiX3JldHVybihzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpCiAJaWYgKHNrYi0mZ3Q7cHJvdG9jb2wgPT0gMCkKIAkJc2tiLSZndDtwcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgZGV2LSZndDtuZXQpOwogCi0JZmxhZ3MgPSB1NjRfc3RhdHNfdXBkYXRlX2JlZ2luX2lycXNhdmUoJmFtcDtzdGF0czY0LSZndDtzeW5jcCk7CiYjNDM7CXN0YXRzNjQgPSBnZXRfY3B1X3B0cihkZXYtJmd0O25ldC0mZ3Q7dHN0YXRzKTsKJiM0MzsJdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbigmYW1wO3N0YXRzNjQtJmd0O3N5bmNwKTsKIAl1NjRfc3RhdHNfaW5jKCZhbXA7c3RhdHM2NC0mZ3Q7cnhfcGFja2V0cyk7CiAJdTY0X3N0YXRzX2FkZCgmYW1wO3N0YXRzNjQtJmd0O3J4X2J5dGVzLCBza2ItJmd0O2xlbik7Ci0JdTY0X3N0YXRzX3VwZGF0ZV9lbmRfaXJxcmVzdG9yZSgmYW1wO3N0YXRzNjQtJmd0O3N5bmNwLCBmbGFncyk7CiYjNDM7CXU2NF9zdGF0c191cGRhdGVfZW5kKCZhbXA7c3RhdHM2NC0mZ3Q7c3luY3ApOwomIzQzOwlwdXRfY3B1X3B0cihkZXYtJmd0O25ldC0mZ3Q7dHN0YXRzKTsKIAogCW5ldGlmX2RiZyhkZXYsIHJ4X3N0YXR1cywgZGV2LSZndDtuZXQsICYjMzQ7Jmx0OyByeCwgbGVuICV6dSwgdHlwZSAweCV4XG4mIzM0OywKIAkJICBza2ItJmd0O2xlbiAmIzQzOyBzaXplb2Yoc3RydWN0IGV0aGhkciksIHNrYi0mZ3Q7cHJvdG9jb2wpOwpAQCAtMTI5OCwxMyAmIzQzOzEyOTksMTQgQEAgc3RhdGljIHZvaWQgdHhfY29tcGxldGUoc3RydWN0IHVyYiAqdXJiKQogCXN0cnVjdCB1c2JuZXQJCSpkZXYgPSBlbnRyeS0mZ3Q7ZGV2OwogCiAJaWYgKHVyYi0mZ3Q7c3RhdHVzID09IDApIHsKLQkJc3RydWN0IHBjcHVfc3dfbmV0c3RhdHMgKnN0YXRzNjQgPSB0aGlzX2NwdV9wdHIoZGV2LSZndDtuZXQtJmd0O3RzdGF0cyk7Ci0JCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiYjNDM7CQlzdHJ1Y3QgcGNwdV9zd19uZXRzdGF0cyAqc3RhdHM2NDsKIAotCQlmbGFncyA9IHU2NF9zdGF0c191cGRhdGVfYmVnaW5faXJxc2F2ZSgmYW1wO3N0YXRzNjQtJmd0O3N5bmNwKTsKJiM0MzsJCXN0YXRzNjQgPSBnZXRfY3B1X3B0cihkZXYtJmd0O25ldC0mZ3Q7dHN0YXRzKTsKJiM0MzsJCXU2NF9zdGF0c191cGRhdGVfYmVnaW4oJmFtcDtzdGF0czY0LSZndDtzeW5jcCk7CiAJCXU2NF9zdGF0c19hZGQoJmFtcDtzdGF0czY0LSZndDt0eF9wYWNrZXRzLCBlbnRyeS0mZ3Q7cGFja2V0cyk7CiAJCXU2NF9zdGF0c19hZGQoJmFtcDtzdGF0czY0LSZndDt0eF9ieXRlcywgZW50cnktJmd0O2xlbmd0aCk7Ci0JCXU2NF9zdGF0c191cGRhdGVfZW5kX2lycXJlc3RvcmUoJmFtcDtzdGF0czY0LSZndDtzeW5jcCwgZmxhZ3MpOwomIzQzOwkJdTY0X3N0YXRzX3VwZGF0ZV9lbmQoJmFtcDtzdGF0czY0LSZndDtzeW5jcCk7CiYjNDM7CQlwdXRfY3B1X3B0cihkZXYtJmd0O25ldC0mZ3Q7dHN0YXRzKTsKIAl9IGVsc2UgewogCQlkZXYtJmd0O25ldC0mZ3Q7c3RhdHMudHhfZXJyb3JzJiM0MzsmIzQzOzsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMjowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTA0CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMzUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktlcm5lbCBQYXRjaCBFdmFsdWF0aW9uIC0gVVNCbmV0IEZ1enppbmcqKgoKT2theSwgc28gdGhlIHVzZXIgd2FudHMgbWUgdG8gZXZhbHVhdGUgdGhpcyBrZXJuZWwgcGF0Y2ggc2VyaWVzIGZvciBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLCBzcGVjaWZpY2FsbHkgdGFyZ2V0aW5nIHRoZSBhbWQ2NCBhcmNoaXRlY3R1cmUuIE15IGZpcnN0IGluc3RpbmN0IGlzIGFsd2F5cyB0byBtZXRpY3Vsb3VzbHkgcmV2aWV3IHRoZSBpbnN0cnVjdGlvbnMgYW5kIHRoZSBkaWZmIGl0c2VsZi4gQWxyaWdodCwgaXQmIzM5O3MgbW9kaWZ5aW5nIGBkcml2ZXJzL25ldC91c2IvdXNibmV0LmNgLiAgU3BlY2lmaWNhbGx5LCB0aGUgY2hhbmdlcyBhcmUgaW4gYHVzYm5ldF9za2JfcmV0dXJuYCBhbmQgYHR4X2NvbXBsZXRlYC4gIFRoZSBvcmlnaW5hbCBjb2RlIHVzZWQgYHRoaXNfY3B1X3B0cmAgd2l0aCB0aGUgYHU2NF9zdGF0c191cGRhdGVfYmVnaW5faXJxc2F2ZWAvYHU2NF9zdGF0c191cGRhdGVfZW5kX2lycXJlc3RvcmVgIHBhaXIuIFRoaXMgcGF0Y2gsIGhvd2V2ZXIsIGlzIHJlcGxhY2luZyB0aGF0IHdpdGggYGdldF9jcHVfcHRyYCwgYHU2NF9zdGF0c191cGRhdGVfYmVnaW5gL2B1NjRfc3RhdHNfdXBkYXRlX2VuZGAsIGFuZCBgcHV0X2NwdV9wdHJgLgoKSG1tLCBiZWZvcmUgSSBkaWcgaW50byB0aGUgZmluZXIgcG9pbnRzIG9mIHRoZSBsb2NraW5nIG1lY2hhbmlzbXMsIEkgbmVlZCB0byBjb25maXJtIGlmIHRoaXMgY29kZSBpcyBldmVuICpyZWFjaGFibGUqIGluIGEgZnV6emluZyBjb250ZXh0LiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBgdXNibmV0LmNgLCB3aGljaCBpcyBwYXJ0IG9mIHRoZSBVU0IgbmV0d29ya2luZyBkcml2ZXJzIGluIExpbnV4LiBSaWdodCwgdGhhdCBtZWFucyBgQ09ORklHX1VTQl9ORVRfRFJJVkVSU2AsIGBDT05GSUdfVVNCX1VTQk5FVGAsIGFuZCB0aGUgbGlrZS4gTm93LCBjYW4gd2UgYWN0dWFsbHkgZnV6eiBVU0IgbmV0d29ya2luZyB3aXRoIHN5emthbGxlcj8gIEFoLCB5ZXMsIGFic29sdXRlbHkhIFN5emthbGxlciAqZnJlcXVlbnRseSogZnV6emVzIFVTQiBkcml2ZXJzLCBhbmQgSSBrbm93IGl0JiMzOTtzIGhpdCBVU0IgbmV0d29ya2luZyBiZWZvcmXigJRjZGNfZXRoZXIsIGFzaXgsIGFsbCBvZiB0aG9zZSB3aGljaCB1c2UgdXNibmV0IGFyZSBwcmV0dHkgY29tbW9uIHRhcmdldHMuCgpPa2F5LCB0aGlzIGxvb2tzIHByb21pc2luZy4gTm93LCBJIG5lZWQgdG8gZ2V0IHNvbWUgbW9yZSBjb250ZXh0IHRvIGRlY2lkZSB3aGF0IHRoZSBpbXBsaWNhdGlvbnMgYXJlIGFuZCBob3cgdG8gYXNzZXNzIGl0LiBJJiMzOTtsbCBuZWVkIHRvIHVzZSBteSB0b29scyB0byBkaWcgaW50byB0aGUgY29kZSBhbmQgS2NvbmZpZyBmaWxlcy4gVGltZSB0byBjaGVjayB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMgdXNpbmcgZ3JlcHBlciBhbmQgcmVhZC1maWxlLCB0byBtYWtlIHN1cmUgZXZlcnl0aGluZyBsaW5lcyB1cC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMjowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVVNCX1VTQk5FVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvS2NvbmZpZz0xMTM9Y29uZmlnIFVTQl9MQU43OFhYXG4tLVxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctMTMxLVxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6MTMyOmNvbmZpZyBVU0JfVVNCTkVUXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0xMzMtXHR0cmlzdGF0ZSBcJiMzNDtNdWx0aS1wdXJwb3NlIFVTQiBOZXR3b3JraW5nIEZyYW1ld29ya1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAyOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzODMKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkV4YW1pbmluZyBVU0IgTmV0d29ya2luZyBEZXBlbmRlbmNpZXMqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgZm9yIHRoZSBVU0IgbmV0d29ya2luZyBkcml2ZXJzLiBMZXQmIzM5O3Mgc3RhcnQgYnkgY2hlY2tpbmcgb3V0IHRoZSBgZHJpdmVycy9uZXQvdXNiL0tjb25maWdgIGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAxMzAuIFRoYXQmIzM5O3MgdXN1YWxseSB3aGVyZSB0aGUgbWFpbiBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIHRoZWlyIGRlcGVuZGVuY2llcyBhcmUgZGVmaW5lZC4gSSBleHBlY3QgdG8gc2VlIHRoZSB0eXBpY2FsIGBkZXBlbmRzIG9uYCBzdGF0ZW1lbnRzIGxpbmtpbmcgdGhlc2UgZHJpdmVycyB0byByZWxldmFudCBVU0IgY29yZSBjb21wb25lbnRzLCBuZXR3b3JraW5nIHN0YWNrIGZlYXR1cmVzLCBhbmQgbWF5YmUgZXZlbiBzcGVjaWZpYyBoYXJkd2FyZSBwbGF0Zm9ybXMuIEtub3dpbmcgdGhlc2UgcmVsYXRpb25zaGlwcyBpcyBjcnVjaWFsIGJlZm9yZSBtYWtpbmcgYW55IGNoYW5nZXMgb3IgdHJvdWJsZXNob290aW5nIGRyaXZlciBjb25maWd1cmF0aW9ucy4gSXQgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBvdmVydmlldyBvZiB3aGF0IG5lZWRzIHRvIGJlIGVuYWJsZWQgb3IgY29uc2lkZXJlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMjowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTI1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMjU6XHRcdCAgTEFONzgwMSA6IFVTQiAzIHRvIDEwLzEwMC8xMDAwIEV0aGVybmV0IGFkYXB0ZXIgKE1BQyBvbmx5KVxuIDEyNjpcdFxuIDEyNzpcdFx0ICBQcm9wZXIgUEhZIGRyaXZlciBpcyByZXF1aXJlZCBmb3IgTEFONzgwMS5cbiAxMjg6XHRcbiAxMjk6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXG4gMTMwOlx0XHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBsYW43OHh4LlxuIDEzMTpcdFxuIDEzMjpcdGNvbmZpZyBVU0JfVVNCTkVUXG4gMTMzOlx0XHR0cmlzdGF0ZSBcJiMzNDtNdWx0aS1wdXJwb3NlIFVTQiBOZXR3b3JraW5nIEZyYW1ld29ya1wmIzM0O1xuIDEzNDpcdFx0c2VsZWN0IE1JSVxuIDEzNTpcdFx0aGVscFxuIDEzNjpcdFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyBzZXZlcmFsIGtpbmRzIG9mIG5ldHdvcmsgbGlua3Mgb3ZlciBVU0IsXG4gMTM3Olx0XHQgIHdpdGggXCYjMzQ7bWluaWRyaXZlcnNcJiMzNDsgYnVpbHQgYXJvdW5kIGEgY29tbW9uIG5ldHdvcmsgZHJpdmVyIGNvcmVcbiAxMzg6XHRcdCAgdGhhdCBzdXBwb3J0cyBkZWVwIHF1ZXVlcyBmb3IgZWZmaWNpZW50IHRyYW5zZmVycy4gIChUaGlzIGdpdmVzXG4gMTM5Olx0XHQgIGJldHRlciBwZXJmb3JtYW5jZSB3aXRoIHNtYWxsIHBhY2tldHMgYW5kIGF0IGhpZ2ggc3BlZWRzKS5cbiAxNDA6XHRcbiAxNDE6XHRcdCAgVGhlIFVTQiBob3N0IHJ1bnMgXCYjMzQ7dXNibmV0XCYjMzQ7LCBhbmQgdGhlIG90aGVyIGVuZCBvZiB0aGUgbGluayBtaWdodCBiZTpcbiAxNDI6XHRcbiAxNDM6XHRcdCAgLSBBbm90aGVyIFVTQiBob3N0LCB3aGVuIHVzaW5nIFVTQiBcJiMzNDtuZXR3b3JrXCYjMzQ7IG9yIFwmIzM0O2RhdGEgdHJhbnNmZXJcJiMzNDtcbiAxNDQ6XHRcdCAgICBjYWJsZXMuICBUaGVzZSBhcmUgb2Z0ZW4gdXNlZCB0byBuZXR3b3JrIGxhcHRvcHMgdG8gUENzLCBsaWtlXG4gMTQ1Olx0XHQgICAgXCYjMzQ7TGFwbGlua1wmIzM0OyBwYXJhbGxlbCBjYWJsZXMgb3Igc29tZSBtb3RoZXJib2FyZHMuICBUaGVzZSByZWx5XG4gMTQ2Olx0XHQgICAgb24gc3BlY2lhbGl6ZWQgY2hpcHMgZnJvbSBtYW55IHN1cHBsaWVycy5cbiAxNDc6XHRcbiAxNDg6XHRcdCAgLSBBbiBpbnRlbGxpZ2VudCBVU0IgZ2FkZ2V0LCBwZXJoYXBzIGVtYmVkZGluZyBhIExpbnV4IHN5c3RlbS5cbiAxNDk6XHRcdCAgICBUaGVzZSBpbmNsdWRlIFBEQXMgcnVubmluZyBMaW51eCAoaVBhcSwgWW9weSwgWmF1cnVzLCBhbmRcbiAxNTA6XHRcdCAgICBvdGhlcnMpLCBhbmQgZGV2aWNlcyB0aGF0IGludGVyb3BlcmF0ZSB1c2luZyB0aGUgc3RhbmRhcmRcbiAxNTE6XHRcdCAgICBDREMtRXRoZXJuZXQgc3BlY2lmaWNhdGlvbiAoaW5jbHVkaW5nIG1hbnkgY2FibGUgbW9kZW1zKS5cbiAxNTI6XHRcbiAxNTM6XHRcdCAgLSBOZXR3b3JrIGFkYXB0ZXIgaGFyZHdhcmUgKGxpa2UgdGhvc2UgZm9yIDEwLzEwMCBFdGhlcm5ldCkgd2hpY2hcbiAxNTQ6XHRcdCAgICB1c2VzIHRoaXMgZHJpdmVyIGZyYW1ld29yay5cbiAxNTU6XHRcbiAxNTY6XHRcdCAgVGhlIGxpbmsgd2lsbCBhcHBlYXIgd2l0aCBhIG5hbWUgbGlrZSBcJiMzNDt1c2IwXCYjMzQ7LCB3aGVuIHRoZSBsaW5rIGlzXG4gMTU3Olx0XHQgIGEgdHdvLW5vZGUgbGluaywgb3IgXCYjMzQ7ZXRoMFwmIzM0OyBmb3IgbW9zdCBDREMtRXRoZXJuZXQgZGV2aWNlcy4gIFRob3NlXG4gMTU4Olx0XHQgIHR3by1ub2RlIGxpbmtzIGFyZSBtb3N0IGVhc2lseSBtYW5hZ2VkIHdpdGggRXRoZXJuZXQgQnJpZGdpbmdcbiAxNTk6XHRcdCAgKENPTkZJR19CUklER0UpIGluc3RlYWQgb2Ygcm91dGluZy5cbiAxNjA6XHRcbiAxNjE6XHRcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24gc2VlIFx1MDAzY2h0dHA6Ly93d3cubGludXgtdXNiLm9yZy91c2JuZXQvXHUwMDNlLlxuIDE2MjpcdFxuIDE2MzpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcbiAxNjQ6XHRcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHVzYm5ldC5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMjowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1Mjg0CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIFVTQiBEcml2ZXIgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIGZvciBhIHBhcnRpY3VsYXIgVVNCIGRyaXZlci4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIHRoZSBgS2NvbmZpZ2AgZmlsZSwgc3BlY2lmaWNhbGx5IHRoZSB0b3AgbGV2ZWwgb25lIGxvY2F0ZWQgaW4gYGRyaXZlcnMvbmV0L3VzYi9LY29uZmlnYC4gVGhhdCYjMzk7cyBnZW5lcmFsbHkgd2hlcmUgSSYjMzk7ZCBleHBlY3QgdG8gZmluZCB0aGUgbWVudSBzdHJ1Y3R1cmUgYW5kIHRoZSBrZXkgZGVwZW5kZW5jaWVzIGRlZmluZWQuIEl0JiMzOTtzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgdHJhY2luZyB3aGljaCBvdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbnMgZW5hYmxlIG9yIGRpc2FibGUgdGhpcyBwYXJ0aWN1bGFyIGRyaXZlciwgYW55IHJlbGV2YW50IGhhcmR3YXJlIHJlcXVpcmVtZW50cywgb3IgZXZlbiB3aGljaCBvdGhlciBkcml2ZXJzIGl0IG1pZ2h0IGRlcGVuZCBvbi4gSSYjMzk7bGwgcXVpY2tseSBzY2FuIHRoYXQgZmlsZSBhbmQgc2VlIGhvdyB0aGUgYFVTQmAgZHJpdmVyIG9wdGlvbnMgYXJlIHN0cnVjdHVyZWQgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDI6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCNcbiAgIDM6XHQjIFVTQiBOZXR3b3JrIGRldmljZXMgY29uZmlndXJhdGlvblxuICAgNDpcdCNcbiAgIDU6XHRjb21tZW50IFwmIzM0O0hvc3Qtc2lkZSBVU0Igc3VwcG9ydCBpcyBuZWVkZWQgZm9yIFVTQiBOZXR3b3JrIEFkYXB0ZXIgc3VwcG9ydFwmIzM0O1xuICAgNjpcdFx0ZGVwZW5kcyBvbiAhVVNCIFx1MDAyNlx1MDAyNiBORVRcbiAgIDc6XHRcbiAgIDg6XHRtZW51Y29uZmlnIFVTQl9ORVRfRFJJVkVSU1xuICAgOTpcdFx0dHJpc3RhdGUgXCYjMzQ7VVNCIE5ldHdvcmsgQWRhcHRlcnNcJiMzNDtcbiAgMTA6XHRcdGRlZmF1bHQgVVNCIGlmIFVTQlxuICAxMTpcdFx0ZGVwZW5kcyBvbiBVU0IgXHUwMDI2XHUwMDI2IE5FVFxuICAxMjpcdFxuICAxMzpcdGlmIFVTQl9ORVRfRFJJVkVSU1xuICAxNDpcdFxuICAxNTpcdGNvbmZpZyBVU0JfQ0FUQ1xuICAxNjpcdFx0dHJpc3RhdGUgXCYjMzQ7VVNCIENBVEMgTmV0TWF0ZS1iYXNlZCBFdGhlcm5ldCBkZXZpY2Ugc3VwcG9ydFwmIzM0O1xuICAxNzpcdFx0c2VsZWN0IENSQzMyXG4gIDE4Olx0XHRoZWxwXG4gIDE5Olx0XHQgIFNheSBZIGlmIHlvdSB3YW50IHRvIHVzZSBvbmUgb2YgdGhlIGZvbGxvd2luZyAxME1icHMgVVNCIEV0aGVybmV0XG4gIDIwOlx0XHQgIGRldmljZSBiYXNlZCBvbiB0aGUgRUwxMjEwQSBjaGlwLiBTdXBwb3J0ZWQgZGV2aWNlcyBhcmU6XG4gIDIxOlx0XHQgIEJlbGtpbiBGNVUwMTFcbiAgMjI6XHRcdCAgQmVsa2luIEY1VTExMVxuICAyMzpcdFx0ICBDQVRDIE5ldE1hdGVcbiAgMjQ6XHRcdCAgQ0FUQyBOZXRNYXRlIElJXG4gIDI1Olx0XHQgIHNtYXJ0QnJpZGdlcyBzbWFydE5JQ1xuICAyNjpcdFxuICAyNzpcdFx0ICBUaGlzIGRyaXZlciBtYWtlcyB0aGUgYWRhcHRlciBhcHBlYXIgYXMgYSBub3JtYWwgRXRoZXJuZXQgaW50ZXJmYWNlLFxuICAyODpcdFx0ICB0eXBpY2FsbHkgb24gZXRoMCwgaWYgaXQgaXMgdGhlIG9ubHkgZXRoZXJuZXQgZGV2aWNlLCBvciBwZXJoYXBzIG9uXG4gIDI5Olx0XHQgIGV0aDEsIGlmIHlvdSBoYXZlIGEgUENJIG9yIElTQSBldGhlcm5ldCBjYXJkIGluc3RhbGxlZC5cbiAgMzA6XHRcbiAgMzE6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXG4gIDMyOlx0XHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBjYXRjLlxuICAzMzpcdFxuICAzNDpcdGNvbmZpZyBVU0JfS0FXRVRIXG4gIDM1Olx0XHR0cmlzdGF0ZSBcJiMzNDtVU0IgS0xTSSBLTDVVU0IxMDEtYmFzZWQgZXRoZXJuZXQgZGV2aWNlIHN1cHBvcnRcJiMzNDtcbiAgMzY6XHRcdGhlbHBcbiAgMzc6XHRcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2Ugb25lIG9mIHRoZSBmb2xsb3dpbmcgMTBNYnBzIG9ubHlcbiAgMzg6XHRcdCAgVVNCIEV0aGVybmV0IGFkYXB0ZXJzIGJhc2VkIG9uIHRoZSBLTFNJIEtMNUtVU0IxMDFCIGNoaXBzZXQ6XG4gIDM5Olx0XHQgIDNDb20gM0MxOTI1MFxuICA0MDpcdFx0ICBBRFMgVVNCLTEwQlRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMjowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MDQ5CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyB0aG91Z2ggSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBVU0IgTmV0d29ya2luZyBNb2R1bGUmIzM5O3MgQnVpbGQgUHJvY2VzcyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYHVzYm5ldC5jYCB3aXRoaW4gdGhlIFVTQiBuZXR3b3JraW5nIGRyaXZlciBpcyBhY3R1YWxseSBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwuIFRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBpcyB0aGUgYGRyaXZlcnMvbmV0L3VzYi9NYWtlZmlsZWAuIFRoYXQgZmlsZSBpcyB0aGUgY2VudHJhbCBvcmdhbml6aW5nIHBvaW50IGZvciBhbGwgdGhlIGJ1aWxkIGluc3RydWN0aW9ucyB3aXRoaW4gdGhhdCBwYXJ0aWN1bGFyIGRpcmVjdG9yeSwgaXQmIzM5O3MgdGhlIHJlY2lwZSBib29rLCBzbyB0byBzcGVhay4gSXQmIzM5O2xsIGRlZmluZSBkZXBlbmRlbmNpZXMsIGNvbXBpbGF0aW9uIGZsYWdzLCBhbmQgdGhlIG9iamVjdCBmaWxlcyB0aGF0IGdldCBsaW5rZWQgdG8gY3JlYXRlIHRoZSBmaW5hbCBtb2R1bGUgb3IgaW50ZWdyYXRlZCBmdW5jdGlvbmFsaXR5LiBMZXQmIzM5O3MgZ2V0IHJpZ2h0IGludG8gaXQgYW5kIHNlZSBob3cgdGhpcyBpcyBjb25maWd1cmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMjowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9NYWtlZmlsZSYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHQjXG4gICAzOlx0IyBNYWtlZmlsZSBmb3IgVVNCIE5ldHdvcmsgZHJpdmVyc1xuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRvYmotJChDT05GSUdfVVNCX0NBVEMpXHRcdCYjNDM7PSBjYXRjLm9cbiAgIDc6XHRvYmotJChDT05GSUdfVVNCX0tBV0VUSClcdCYjNDM7PSBrYXdldGgub1xuICAgODpcdG9iai0kKENPTkZJR19VU0JfUEVHQVNVUylcdCYjNDM7PSBwZWdhc3VzLm9cbiAgIDk6XHRvYmotJChDT05GSUdfVVNCX1JUTDgxNTApXHQmIzQzOz0gcnRsODE1MC5vXG4gIDEwOlx0b2JqLSQoQ09ORklHX1VTQl9SVEw4MTUyKVx0JiM0Mzs9IHI4MTUyLm9cbiAgMTE6XHRvYmotJChDT05GSUdfVVNCX0hTTylcdFx0JiM0Mzs9IGhzby5vXG4gIDEyOlx0b2JqLSQoQ09ORklHX1VTQl9MQU43OFhYKVx0JiM0Mzs9IGxhbjc4eHgub1xuICAxMzpcdG9iai0kKENPTkZJR19VU0JfTkVUX0FYODgxN1gpXHQmIzQzOz0gYXNpeC5vXG4gIDE0Olx0YXNpeC15IDo9IGFzaXhfZGV2aWNlcy5vIGFzaXhfY29tbW9uLm8gYXg4ODE3MmEub1xuICAxNTpcdG9iai0kKENPTkZJR19VU0JfTkVUX0FYODgxNzlfMTc4QSkgICAgICAmIzQzOz0gYXg4ODE3OV8xNzhhLm9cbiAgMTY6XHRvYmotJChDT05GSUdfVVNCX05FVF9DRENFVEhFUilcdCYjNDM7PSBjZGNfZXRoZXIub1xuICAxNzpcdG9iai0kKENPTkZJR19VU0JfTkVUX0NEQ19FRU0pXHQmIzQzOz0gY2RjX2VlbS5vXG4gIDE4Olx0b2JqLSQoQ09ORklHX1VTQl9ORVRfRE05NjAxKVx0JiM0Mzs9IGRtOTYwMS5vXG4gIDE5Olx0b2JqLSQoQ09ORklHX1VTQl9ORVRfU1I5NzAwKVx0JiM0Mzs9IHNyOTcwMC5vXG4gIDIwOlx0b2JqLSQoQ09ORklHX1VTQl9ORVRfU1I5ODAwKVx0JiM0Mzs9IHNyOTgwMC5vXG4gIDIxOlx0b2JqLSQoQ09ORklHX1VTQl9ORVRfU01TQzc1WFgpXHQmIzQzOz0gc21zYzc1eHgub1xuICAyMjpcdG9iai0kKENPTkZJR19VU0JfTkVUX1NNU0M5NVhYKVx0JiM0Mzs9IHNtc2M5NXh4Lm9cbiAgMjM6XHRvYmotJChDT05GSUdfVVNCX05FVF9HTDYyMEEpXHQmIzQzOz0gZ2w2MjBhLm9cbiAgMjQ6XHRvYmotJChDT05GSUdfVVNCX05FVF9ORVQxMDgwKVx0JiM0Mzs9IG5ldDEwODAub1xuICAyNTpcdG9iai0kKENPTkZJR19VU0JfTkVUX1BMVVNCKVx0JiM0Mzs9IHBsdXNiLm9cbiAgMjY6XHRvYmotJChDT05GSUdfVVNCX05FVF9STkRJU19IT1NUKVx0JiM0Mzs9IHJuZGlzX2hvc3Qub1xuICAyNzpcdG9iai0kKENPTkZJR19VU0JfTkVUX0NEQ19TVUJTRVRfRU5BQkxFKVx0JiM0Mzs9IGNkY19zdWJzZXQub1xuICAyODpcdG9iai0kKENPTkZJR19VU0JfTkVUX1pBVVJVUylcdCYjNDM7PSB6YXVydXMub1xuICAyOTpcdG9iai0kKENPTkZJR19VU0JfTkVUX01DUzc4MzApXHQmIzQzOz0gbWNzNzgzMC5vXG4gIDMwOlx0b2JqLSQoQ09ORklHX1VTQl9VU0JORVQpXHQmIzQzOz0gdXNibmV0Lm9cbiAgMzE6XHRvYmotJChDT05GSUdfVVNCX05FVF9JTlQ1MVgxKVx0JiM0Mzs9IGludDUxeDEub1xuICAzMjpcdG9iai0kKENPTkZJR19VU0JfQ0RDX1BIT05FVClcdCYjNDM7PSBjZGMtcGhvbmV0Lm9cbiAgMzM6XHRvYmotJChDT05GSUdfVVNCX05FVF9LQUxNSUEpXHQmIzQzOz0ga2FsbWlhLm9cbiAgMzQ6XHRvYmotJChDT05GSUdfVVNCX0lQSEVUSClcdCYjNDM7PSBpcGhldGgub1xuICAzNTpcdG9iai0kKENPTkZJR19VU0JfU0lFUlJBX05FVClcdCYjNDM7PSBzaWVycmFfbmV0Lm9cbiAgMzY6XHRvYmotJChDT05GSUdfVVNCX05FVF9DWDgyMzEwX0VUSClcdCYjNDM7PSBjeDgyMzEwX2V0aC5vXG4gIDM3Olx0b2JqLSQoQ09ORklHX1VTQl9ORVRfQ0RDX05DTSlcdCYjNDM7PSBjZGNfbmNtLm9cbiAgMzg6XHRvYmotJChDT05GSUdfVVNCX05FVF9IVUFXRUlfQ0RDX05DTSlcdCYjNDM7PSBodWF3ZWlfY2RjX25jbS5vXG4gIDM5Olx0b2JqLSQoQ09ORklHX1VTQl9WTDYwMClcdFx0JiM0Mzs9IGxnLXZsNjAwLm9cbiAgNDA6XHRvYmotJChDT05GSUdfVVNCX05FVF9RTUlfV1dBTilcdCYjNDM7PSBxbWlfd3dhbi5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAyOjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyOTQKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgVVNCbmV0IERyaXZlciBDb2RlKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBgZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jYCBjb2RlLiBNeSBmaXJzdCBzdGVwIGlzIHRvIHplcm8gaW4gb24gdGhlIHJlY2VudCBjb21taXQgYW5kIHRoZSBtb2RpZmllZCBmdW5jdGlvbnMgd2l0aGluLiBLbm93aW5nIHRoZSByZWxldmFudCBjaGFuZ2VzIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBzcGVjaWZpYyBpc3N1ZSBvciBlbmhhbmNlbWVudCBJJiMzOTttIGludmVzdGlnYXRpbmcuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgZm9jdXNpbmcgb24gbGluZXMgMzI1IGFuZCAxMjk4LCBhcyB0aGV5JiMzOTtyZSBvZnRlbiB0aGUgaG90c3BvdHMgZm9yIG5ldHdvcmsgZHJpdmVyIGludGVyYWN0aW9uIGFuZCBkYXRhIGhhbmRsaW5nLiBSZWFkaW5nIGFyb3VuZCB0aGVzZSBsaW5lcyBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgaW5pdGlhbCBjb250ZXh0IGZvciBhbnkgcG90ZW50aWFsIHByb2JsZW0gYXJlYXMgb3IgaW1wcm92ZW1lbnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMjowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi91c2JuZXQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMxNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzE1Olx0XHRcdG11dGV4X2xvY2soXHUwMDI2ZGV2LVx1MDAzZWludGVycnVwdF9tdXRleCk7XG4gMzE2Olx0XHRcdHVzYl9raWxsX3VyYihkZXYtXHUwMDNlaW50ZXJydXB0KTtcbiAzMTc6XHRcdFx0ZGV2X2RiZyhcdTAwMjZkZXYtXHUwMDNldWRldi1cdTAwM2VkZXYsIFwmIzM0O2tpbGxlZCBpbnRlcnJ1cHQgVVJCIGZvciBzdXNwZW5kXFxuXCYjMzQ7KTtcbiAzMTg6XHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmRldi1cdTAwM2VpbnRlcnJ1cHRfbXV0ZXgpO1xuIDMxOTpcdFx0fVxuIDMyMDpcdH1cbiAzMjE6XHRcbiAzMjI6XHQvKiBQYXNzZXMgdGhpcyBwYWNrZXQgdXAgdGhlIHN0YWNrLCB1cGRhdGluZyBpdHMgYWNjb3VudGluZy5cbiAzMjM6XHQgKiBTb21lIGxpbmsgcHJvdG9jb2xzIGJhdGNoIHBhY2tldHMsIHNvIHRoZWlyIHJ4X2ZpeHVwIHBhdGhzXG4gMzI0Olx0ICogY2FuIHJldHVybiBjbG9uZXMgYXMgd2VsbCBhcyBqdXN0IG1vZGlmeSB0aGUgb3JpZ2luYWwgc2tiLlxuIDMyNTpcdCAqL1xuIDMyNjpcdHZvaWQgdXNibmV0X3NrYl9yZXR1cm4oc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIDMyNzpcdHtcbiAzMjg6XHRcdHN0cnVjdCBwY3B1X3N3X25ldHN0YXRzICpzdGF0czY0O1xuIDMyOTpcdFx0aW50XHRzdGF0dXM7XG4gMzMwOlx0XG4gMzMxOlx0XHRpZiAodGVzdF9iaXQoRVZFTlRfUlhfUEFVU0VELCBcdTAwMjZkZXYtXHUwMDNlZmxhZ3MpKSB7XG4gMzMyOlx0XHRcdHNrYl9xdWV1ZV90YWlsKFx1MDAyNmRldi1cdTAwM2VyeHFfcGF1c2UsIHNrYik7XG4gMzMzOlx0XHRcdHJldHVybjtcbiAzMzQ6XHRcdH1cbiAzMzU6XHRcbiAzMzY6XHRcdC8qIG9ubHkgdXBkYXRlIGlmIHVuc2V0IHRvIGFsbG93IG1pbmlkcml2ZXIgcnhfZml4dXAgb3ZlcnJpZGUgKi9cbiAzMzc6XHRcdGlmIChza2ItXHUwMDNlcHJvdG9jb2wgPT0gMClcbiAzMzg6XHRcdFx0c2tiLVx1MDAzZXByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBkZXYtXHUwMDNlbmV0KTtcbiAzMzk6XHRcbiAzNDA6XHRcdHN0YXRzNjQgPSBnZXRfY3B1X3B0cihkZXYtXHUwMDNlbmV0LVx1MDAzZXRzdGF0cyk7XG4gMzQxOlx0XHR1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKFx1MDAyNnN0YXRzNjQtXHUwMDNlc3luY3ApO1xuIDM0MjpcdFx0dTY0X3N0YXRzX2luYyhcdTAwMjZzdGF0czY0LVx1MDAzZXJ4X3BhY2tldHMpO1xuIDM0MzpcdFx0dTY0X3N0YXRzX2FkZChcdTAwMjZzdGF0czY0LVx1MDAzZXJ4X2J5dGVzLCBza2ItXHUwMDNlbGVuKTtcbiAzNDQ6XHRcdHU2NF9zdGF0c191cGRhdGVfZW5kKFx1MDAyNnN0YXRzNjQtXHUwMDNlc3luY3ApO1xuIDM0NTpcdFx0cHV0X2NwdV9wdHIoZGV2LVx1MDAzZW5ldC1cdTAwM2V0c3RhdHMpO1xuIDM0NjpcdFxuIDM0NzpcdFx0bmV0aWZfZGJnKGRldiwgcnhfc3RhdHVzLCBkZXYtXHUwMDNlbmV0LCBcJiMzNDtcdTAwM2MgcngsIGxlbiAlenUsIHR5cGUgMHgleFxcblwmIzM0OyxcbiAzNDg6XHRcdFx0ICBza2ItXHUwMDNlbGVuICYjNDM7IHNpemVvZihzdHJ1Y3QgZXRoaGRyKSwgc2tiLVx1MDAzZXByb3RvY29sKTtcbiAzNDk6XHRcdG1lbXNldChza2ItXHUwMDNlY2IsIDAsIHNpemVvZihzdHJ1Y3Qgc2tiX2RhdGEpKTtcbiAzNTA6XHRcbiAzNTE6XHRcdGlmIChza2JfZGVmZXJfcnhfdGltZXN0YW1wKHNrYikpXG4gMzUyOlx0XHRcdHJldHVybjtcbiAzNTM6XHRcbiAzNTQ6XHRcdHN0YXR1cyA9IG5ldGlmX3J4IChza2IpO1xuIDM1NTpcdFx0aWYgKHN0YXR1cyAhPSBORVRfUlhfU1VDQ0VTUylcbiAzNTY6XHRcdFx0bmV0aWZfZGJnKGRldiwgcnhfZXJyLCBkZXYtXHUwMDNlbmV0LFxuIDM1NzpcdFx0XHRcdCAgXCYjMzQ7bmV0aWZfcnggc3RhdHVzICVkXFxuXCYjMzQ7LCBzdGF0dXMpO1xuIDM1ODpcdH1cbiAzNTk6XHRFWFBPUlRfU1lNQk9MX0dQTCh1c2JuZXRfc2tiX3JldHVybik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAyOjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgyOTgKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipQZWVyaW5nIGludG8gdGhlIFRyYW5zYWN0aW9uIENvbXBsZXRpb24gTG9naWMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHplcm8gaW4gb24gYHR4X2NvbXBsZXRlYC4gSSYjMzk7bSBnZXR0aW5nIGEgaHVuY2ggYWJvdXQgc29tZXRoaW5nIGdvaW5nIG9uIGFyb3VuZCBsaW5lIDEyOTguIE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhhdCBhcmVhIGlzIGEgbGlrZWx5IHNwb3QgZm9yIHRoZSBmaW5hbGl6YXRpb24gbG9naWMsIHdoZXJlIHRoZSB0cmFuc2FjdGlvbiYjMzk7cyBmYXRlIGlzIHNlYWxlZC4gV2UmIzM5O3JlIHByb2JhYmx5IGRlYWxpbmcgd2l0aCB0aGUgZmxhZyYjMzk7cyBhc3NpZ25tZW50IG9yIHBlcmhhcHMgc29tZSBwb3N0LXByb2Nlc3NpbmcgcmVsYXRlZCB0byB0aGUgdHJhbnNhY3Rpb24mIzM5O3Mgc3VjY2Vzc2Z1bCAob3IgdW5zdWNjZXNzZnVsKSBjb25jbHVzaW9uLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHN1cnJvdW5kaW5nIGNvZGUsIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZyBqdXN0IGJlZm9yZSBhbmQganVzdCBhZnRlciB0aGF0IGxpbmUuIFRoaXMgZmxhZyYjMzk7cyBzdGF0ZSwgYW5kIHdoYXQgaGluZ2VzIG9uIGl0LCBpcyBrZXkgdG8gdGhlIG92ZXJhbGwgZmxvdywgZXNwZWNpYWxseSBpbiBhIHN5c3RlbSBsaWtlIHRoaXMuIEl0JiMzOTtzIHRpbWUgdG8gZGlnIGluIGFuZCBzZWUgaWYgYW55dGhpbmcganVtcHMgb3V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMjowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi91c2JuZXQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyOTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTI5MDpcdFx0XHRuZXRkZXZfZGJnKGRldi1cdTAwM2VuZXQsIFwmIzM0O2tldmVudCBkb25lLCBmbGFncyA9IDB4JWx4XFxuXCYjMzQ7LCBkZXYtXHUwMDNlZmxhZ3MpO1xuMTI5MTpcdH1cbjEyOTI6XHRcbjEyOTM6XHQvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuMTI5NDpcdFxuMTI5NTpcdHN0YXRpYyB2b2lkIHR4X2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVyYilcbjEyOTY6XHR7XG4xMjk3Olx0XHRzdHJ1Y3Qgc2tfYnVmZlx0XHQqc2tiID0gKHN0cnVjdCBza19idWZmICopIHVyYi1cdTAwM2Vjb250ZXh0O1xuMTI5ODpcdFx0c3RydWN0IHNrYl9kYXRhXHRcdCplbnRyeSA9IChzdHJ1Y3Qgc2tiX2RhdGEgKikgc2tiLVx1MDAzZWNiO1xuMTI5OTpcdFx0c3RydWN0IHVzYm5ldFx0XHQqZGV2ID0gZW50cnktXHUwMDNlZGV2O1xuMTMwMDpcdFxuMTMwMTpcdFx0aWYgKHVyYi1cdTAwM2VzdGF0dXMgPT0gMCkge1xuMTMwMjpcdFx0XHRzdHJ1Y3QgcGNwdV9zd19uZXRzdGF0cyAqc3RhdHM2NDtcbjEzMDM6XHRcbjEzMDQ6XHRcdFx0c3RhdHM2NCA9IGdldF9jcHVfcHRyKGRldi1cdTAwM2VuZXQtXHUwMDNldHN0YXRzKTtcbjEzMDU6XHRcdFx0dTY0X3N0YXRzX3VwZGF0ZV9iZWdpbihcdTAwMjZzdGF0czY0LVx1MDAzZXN5bmNwKTtcbjEzMDY6XHRcdFx0dTY0X3N0YXRzX2FkZChcdTAwMjZzdGF0czY0LVx1MDAzZXR4X3BhY2tldHMsIGVudHJ5LVx1MDAzZXBhY2tldHMpO1xuMTMwNzpcdFx0XHR1NjRfc3RhdHNfYWRkKFx1MDAyNnN0YXRzNjQtXHUwMDNldHhfYnl0ZXMsIGVudHJ5LVx1MDAzZWxlbmd0aCk7XG4xMzA4Olx0XHRcdHU2NF9zdGF0c191cGRhdGVfZW5kKFx1MDAyNnN0YXRzNjQtXHUwMDNlc3luY3ApO1xuMTMwOTpcdFx0XHRwdXRfY3B1X3B0cihkZXYtXHUwMDNlbmV0LVx1MDAzZXRzdGF0cyk7XG4xMzEwOlx0XHR9IGVsc2Uge1xuMTMxMTpcdFx0XHRkZXYtXHUwMDNlbmV0LVx1MDAzZXN0YXRzLnR4X2Vycm9ycyYjNDM7JiM0Mzs7XG4xMzEyOlx0XG4xMzEzOlx0XHRcdHN3aXRjaCAodXJiLVx1MDAzZXN0YXR1cykge1xuMTMxNDpcdFx0XHRjYXNlIC1FUElQRTpcbjEzMTU6XHRcdFx0XHR1c2JuZXRfZGVmZXJfa2V2ZW50KGRldiwgRVZFTlRfVFhfSEFMVCk7XG4xMzE2Olx0XHRcdFx0YnJlYWs7XG4xMzE3Olx0XG4xMzE4Olx0XHRcdC8qIHNvZnR3YXJlLWRyaXZlbiBpbnRlcmZhY2Ugc2h1dGRvd24gKi9cbjEzMTk6XHRcdFx0Y2FzZSAtRUNPTk5SRVNFVDpcdFx0Ly8gYXN5bmMgdW5saW5rXG4xMzIwOlx0XHRcdGNhc2UgLUVTSFVURE9XTjpcdFx0Ly8gaGFyZHdhcmUgZ29uZVxuMTMyMTpcdFx0XHRcdGJyZWFrO1xuMTMyMjpcdFxuMTMyMzpcdFx0XHQvKiBsaWtlIHJ4LCB0eCBnZXRzIGNvbnRyb2xsZXIgaS9vIGZhdWx0cyBkdXJpbmcgaHViX3dxXG4xMzI0Olx0XHRcdCAqIGRlbGF5cyBhbmQgc28gaXQgdXNlcyB0aGUgc2FtZSB0aHJvdHRsaW5nIG1lY2hhbmlzbS5cbjEzMjU6XHRcdFx0ICovXG4xMzI2Olx0XHRcdGNhc2UgLUVQUk9UTzpcbjEzMjc6XHRcdFx0Y2FzZSAtRVRJTUU6XG4xMzI4Olx0XHRcdGNhc2UgLUVJTFNFUTpcbjEzMjk6XHRcdFx0XHR1c2JfbWFya19sYXN0X2J1c3koZGV2LVx1MDAzZXVkZXYpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMjowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MTcwCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogOTkwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFN5bmNocm9uaXphdGlvbiBDaGFuZ2UgaW4gVVNCIE5ldHdvcmsgRHJpdmVyIFN0YXRzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgdGhlIGB1c2JuZXRfc2tiX3JldHVybmAgYW5kIGB0eF9jb21wbGV0ZWAgZnVuY3Rpb25zLCB3aGljaCBhcmUgY3JpdGljYWwgaW4gdGhlIGB1c2JuZXRgIGRyaXZlci4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBpcyBzd2l0Y2hpbmcgZnJvbSBgdGhpc19jcHVfcHRyYCBhbmQgdGhlIGBpcnFzYXZlYCB2YXJpYW50cyBvZiBgdTY0X3N0YXRzX3VwZGF0ZWAgdG8gYGdldF9jcHVfcHRyYCBhbmQgdGhlIG5vbi1gaXJxc2F2ZWAgdmVyc2lvbnMuIE15IGluaXRpYWwgdGhvdWdodCBpcywgdGhpcyBzZWVtcyBsaWtlIGEgcmVsYXRpdmVseSBzdHJhaWdodGZvcndhcmQgb3B0aW1pemF0aW9uLCBidXQgbGV0JiMzOTtzIG1ha2Ugc3VyZSBpdCYjMzk7cyB2YWxpZC4KClRoZSBrZXkgZGlmZmVyZW5jZSBJIHNlZSBpcyB0aGF0IGBnZXRfY3B1X3B0cmAgKmRpc2FibGVzIHByZWVtcHRpb24qIGJ1dCAqZG9lc24mIzM5O3QgZGlzYWJsZSBJUlFzKiwgdW5saWtlIHRoZSBwcmV2aW91cyBtZXRob2RzLiBUaGlzIHJhaXNlcyBhIHJlZCBmbGFnIGluIG15IG1pbmQgYmVjYXVzZSBgdHhfY29tcGxldGVgIGlzIGFuIGludGVycnVwdCBoYW5kbGVyIChvciBydW5zIGluIHNvZnRpcnEgY29udGV4dCB0aHJvdWdoIHRhc2tsZXRzL2JvdHRvbS1oYWx2ZXMgZGVwZW5kaW5nIG9uIHRoZSBVU0IgaG9zdCBjb250cm9sbGVyIGRyaXZlciksIGFuZCBgdXNibmV0X3NrYl9yZXR1cm5gIGFsc28gcnVucyB3aXRoaW4gYSBib3R0b20gaGFsZi4gSWYgc29tZXRoaW5nIHRoYXQgYWxzbyBtb2RpZmllcyB0aGUgNjQtYml0IHN0YXRzIGNvdWxkIGludGVycnVwdCB0aG9zZSBmdW5jdGlvbnMsIHRoZW4gdGhlIGxvY2tpbmcgc2VtYW50aWNzIGNvdWxkIGJlIGNvbXBsZXRlbHkgZGlmZmVyZW50LCBvciB0aGVyZSBjb3VsZCBiZSBhIGxvY2tkZXAgY29uZmxpY3QuIFRoaXMgbmVlZHMgdG8gYmUgY29uc2lkZXJlZCwgZXNwZWNpYWxseSBpZiBsb2NrZGVwIGNoZWNrcyBjb3VsZCBiZSB0cmlnZ2VyZWQgb3IgaWYgdGhlIGFyY2hpdGVjdHVyZSBpcyAzMi1iaXQgKHdoZXJlIHRoaXMgd291bGQgYmVoYXZlIGRpZmZlcmVudGx5KQoKT2theSwgc28gaXMgdGhpcyBldmVuIHJlYWNoYWJsZT8gRGVmaW5pdGVseSEgYHVzYm5ldGAgaXMgdGhlIHdvcmtob3JzZSBkcml2ZXIgZm9yIGEgdG9uIG9mIFVTQiBuZXR3b3JrIGRldmljZXMg4oCTIENEQyBFdGhlcm5ldCwgQVNJWCBhZGFwdGVycywgYW5kIGEgbG90IG1vcmUuIEFuZCB0aG9zZSBjYW4gKmFic29sdXRlbHkqIGJlIGVtdWxhdGVkIGluIFFFTVUgb3IgZXZlbiB3aXRoIHN5emthbGxlciwgZXNwZWNpYWxseSB1c2luZyBVU0IgZ2FkZ2V0IGVtdWxhdGlvbi4gU3l6a2FsbGVyIHJlZ3VsYXJseSBnZW5lcmF0ZXMgbmV0d29yayB0cmFmZmljIHRoYXQgY2F1c2VzIHRoZXNlIGZ1bmN0aW9ucyB0byBydW4uCgpOb3csIGxldCYjMzk7cyBhcHBseSB0aGUgdHJpYWdlIHJ1bGVzLgoKVGhpcyBjbGVhcmx5IGZhbGxzIHVuZGVyIHRoZSAmIzM0O1dvcnRoRnV6emluZz10cnVlJiMzNDsgY3JpdGVyaWE6IEl0JiMzOTtzICYjMzQ7cmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSYjMzQ7IGJlY2F1c2UgaXQmIzM5O3MgdGhlIGNvcmUgbmV0d29yayBkcml2ZXIuIEZ1cnRoZXIsIGl0JiMzOTtzIGEgJiMzNDtyZWZhY3RvcmluZyYjMzQ7IHRoYXQgY2hhbmdlcyBsb2NraW5nIGFuZCBzeW5jaHJvbml6YXRpb24uIEFsc28sIHJlYWNoYWJsZSBkcml2ZXJzIGFuZCBwcm90b2NvbHMgKFVTQiwgbmV0d29yaykgYXJlIGluY2x1ZGVkLiBUaGUgb25seSByZWFzb24gdG8gc2F5ICYjMzQ7ZmFsc2UmIzM0OyB3b3VsZCBiZSBpZiB0aGlzIHdhcyBhbiB1bnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aCAoZHJpdmVyIHRlYXJkb3duLCBldGMpIHdoaWNoIGlzIG5vdCB0aGUgY2FzZSBoZXJlLgoKVGhlcmVmb3JlLCBXb3J0aEZ1enppbmcgPSBUcnVlLgoKTm93LCB3aGljaCBjb25maWcgb3B0aW9ucyBhcmUgbmVlZGVkIHRvIHRyaWdnZXIgdGhpcyBjb2RlPyBJdCBsb29rcyBsaWtlIHdlIG5lZWQgYFVTQl9ORVRfRFJJVkVSU2AsIGBVU0JfVVNCTkVUYCwgYFVTQmAsIGFuZCBgTkVUYC4gRGlnZ2luZyBpbnRvIHRoZSBLY29uZmlnIGFuZCBNYWtlZmlsZSBmaWxlcyBjb25maXJtcyB0aGF0LiBgVVNCX1VTQk5FVGAgYWxzbyBzZWxlY3RzIGBNSUlgLCBzbyB0aGF0JiMzOTtzIGFub3RoZXIgZGVwZW5kZW5jeS4gV2UgcHJvYmFibHkgbmVlZCB0byBjaGVjayBpZiB0aGVyZSBhcmUgb3RoZXIsIG1vcmUgc3VidGxlIGRlcGVuZGVuY2llcyBsdXJraW5nIGluIHRoZSBgZHJpdmVycy9uZXQvS2NvbmZpZ2Agb3IgYGRyaXZlcnMvdXNiL0tjb25maWdgIGZpbGVzLCBidXQgdGhpcyBpcyBhIHNvbGlkIHN0YXJ0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMjowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvdXNiL0tjb25maWdcJiMzNDsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnPTUzMj1zb3VyY2UgXCYjMzQ7ZHJpdmVycy9zMzkwL25ldC9LY29uZmlnXCYjMzQ7XG5kcml2ZXJzL25ldC9LY29uZmlnLTUzMy1cbmRyaXZlcnMvbmV0L0tjb25maWc6NTM0OnNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC91c2IvS2NvbmZpZ1wmIzM0O1xuZHJpdmVycy9uZXQvS2NvbmZpZy01MzUtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAyOjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwODc5CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbCBDb25mbGljdHMgaW4gVVNCIEdhZGdldCBEcml2ZXIgU2VsZWN0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gYSBwb3RlbnRpYWwgaXNzdWUgaGVyZSwgYW5kIHRoZSBmaXJzdCB0aGluZyBJIHdhbnQgdG8gZG8gaXMgc2VlIGhvdyBwcmV2YWxlbnQgdGhlIHNlbGVjdGlvbiBvZiB0aGUgYFVTQl9VU0JORVRgIGRyaXZlciBpcy4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaW52b2x2ZXMgYSBxdWljayBkaWFnbm9zdGljOiBJIG5lZWQgdG8gYXNzZXNzIHRoZSBlY29zeXN0ZW0uIEFyZSB3ZSBzZWVpbmcgb3RoZXIgZHJpdmVycyBvciBjb25maWd1cmF0aW9ucyBhdHRlbXB0aW5nIHRvIGNsYWltIG9yIGludGVyYWN0IHdpdGggdGhpcyBzcGVjaWZpYyBtb2R1bGU/IEkmIzM5O20gbG9va2luZyBmb3IgcG90ZW50aWFsIGNvbnRlbnRpb24sIGNvbmZsaWN0cywgb3IgdW5leHBlY3RlZCBpbnRlcmFjdGlvbnMgYWNyb3NzIGRpZmZlcmVudCBkcml2ZXIgaW1wbGVtZW50YXRpb25zIG9yIHN5c3RlbSBzZXR1cHMuIElkZW50aWZ5aW5nIG92ZXJsYXBzIGVhcmx5IGNhbiBoZWxwIGRpYWdub3NlIGEgd2lkZSByYW5nZSBvZiBpc3N1ZXMuIExldCYjMzk7cyBzZWUgaWYgYW55b25lIGVsc2UgaXMgZXZlbiAqdXNpbmcqIHRoaXMsIGFuZCBob3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAyOjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VsZWN0IFVTQl9VU0JORVQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2ImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMjowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTA5NQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaXQgd2VudDoKCioqRXhhbWluaW5nIFVTQiBOZXR3b3JraW5nIERlcGVuZGVuY3kgaW4gS2VybmVsIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIGZvciB0aGUgVVNCIG5ldHdvcmsgZHJpdmVyLiBMZXQmIzM5O3Mgc2VlLi4uIHRoZSBtb3N0IG9idmlvdXMgcGxhY2UgdG8gc3RhcnQgaXMgdGhlIGBLY29uZmlnYCBmaWxlIHdpdGhpbiB0aGUgYGRyaXZlcnMvbmV0L3VzYi9gIGRpcmVjdG9yeS4gVGhhdCYjMzk7cyB3aGVyZSBhbGwgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGRlZmluZWQuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBJIG5lZWQgdG8gbG9vayBmb3IgYGRlcGVuZHMgb24gVVNCX1VTQk5FVGAuIFRoaXMgd2lsbCBzaG93IG1lIHRoZSBjb25kaXRpb25zIHRoYXQgKm11c3QqIGJlIG1ldCBmb3IgdGhlIFVTQiBuZXR3b3JrIGRyaXZlciB0byBiZSBzZWxlY3RhYmxlIG9yIGJ1aWx0LiBLbm93aW5nIHRoZSBkZXBlbmRlbmNpZXMgaXMgY3J1Y2lhbCBmb3IgdHJvdWJsZXNob290aW5nIGNvbmZpZ3VyYXRpb24gaXNzdWVzLCB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIGZlYXR1cmUgc2V0LCBhbmQgZW5zdXJpbmcgdGhlIGNvcnJlY3QgbW9kdWxlcyBhcmUgY29tcGlsZWQgd2hlbiBuZWVkZWQuIFRoaXMgc2hvdWxkIHRlbGwgbWUgd2hhdCBvdGhlciBvcHRpb25zIG5lZWQgdG8gYmUgZW5hYmxlZCBpbiBvcmRlciBmb3IgbWUgdG8gdXRpbGl6ZSBVU0IgbmV0d29ya2luZyBmZWF0dXJlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDI6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVwZW5kcyBvbi4qVVNCX1VTQk5FVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvS2NvbmZpZz0xNjY9Y29uZmlnIFVTQl9ORVRfQVg4ODE3WFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctMTY3LVx0dHJpc3RhdGUgXCYjMzQ7QVNJWCBBWDg4eHh4IEJhc2VkIFVTQiAyLjAgRXRoZXJuZXQgQWRhcHRlcnNcJiMzNDtcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnOjE2ODpcdGRlcGVuZHMgb24gVVNCX1VTQk5FVFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctMTY5LVx0c2VsZWN0IENSQzMyXG4tLVxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc9MTk4PWNvbmZpZyBVU0JfTkVUX0FYODgxNzlfMTc4QVxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctMTk5LVx0dHJpc3RhdGUgXCYjMzQ7QVNJWCBBWDg4MTc5LzE3OEEgVVNCIDMuMC8yLjAgdG8gR2lnYWJpdCBFdGhlcm5ldFwmIzM0O1xuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6MjAwOlx0ZGVwZW5kcyBvbiBVU0JfVVNCTkVUXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0yMDEtXHRzZWxlY3QgQ1JDMzJcbi0tXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZz0yMTY9Y29uZmlnIFVTQl9ORVRfQ0RDRVRIRVJcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTIxNy1cdHRyaXN0YXRlIFwmIzM0O0NEQyBFdGhlcm5ldCBzdXBwb3J0IChzbWFydCBkZXZpY2VzIHN1Y2ggYXMgY2FibGUgbW9kZW1zKVwmIzM0O1xuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6MjE4Olx0ZGVwZW5kcyBvbiBVU0JfVVNCTkVUXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0yMTktXHRkZWZhdWx0IHlcbi0tXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZz0yNDQ9Y29uZmlnIFVTQl9ORVRfQ0RDX0VFTVxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctMjQ1LVx0dHJpc3RhdGUgXCYjMzQ7Q0RDIEVFTSBzdXBwb3J0XCYjMzQ7XG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZzoyNDY6XHRkZXBlbmRzIG9uIFVTQl9VU0JORVRcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTI0Ny1cdGhlbHBcbi0tXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZz0yNTg9Y29uZmlnIFVTQl9ORVRfQ0RDX05DTVxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctMjU5LVx0dHJpc3RhdGUgXCYjMzQ7Q0RDIE5DTSBzdXBwb3J0XCYjMzQ7XG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZzoyNjA6XHRkZXBlbmRzIG9uIFVTQl9VU0JORVRcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTI2MS1cdHNlbGVjdCBVU0JfTkVUX0NEQ0VUSEVSXG4tLVxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc9Mjc4PWNvbmZpZyBVU0JfTkVUX0hVQVdFSV9DRENfTkNNXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0yNzktXHR0cmlzdGF0ZSBcJiMzNDtIdWF3ZWkgTkNNIGVtYmVkZGVkIEFUIGNoYW5uZWwgc3VwcG9ydFwmIzM0O1xuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6MjgwOlx0ZGVwZW5kcyBvbiBVU0JfVVNCTkVUXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0yODEtXHRzZWxlY3QgVVNCX1dETVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnPTI5Mz1jb25maWcgVVNCX05FVF9DRENfTUJJTVxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctMjk0LVx0dHJpc3RhdGUgXCYjMzQ7Q0RDIE1CSU0gc3VwcG9ydFwmIzM0O1xuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6Mjk1Olx0ZGVwZW5kcyBvbiBVU0JfVVNCTkVUXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0yOTYtXHRzZWxlY3QgVVNCX1dETVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnPTMxMT1jb25maWcgVVNCX05FVF9ETTk2MDFcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTMxMi1cdHRyaXN0YXRlIFwmIzM0O0Rhdmljb20gRE05Nnh4IGJhc2VkIFVTQiAxMC8xMDAgZXRoZXJuZXQgZGV2aWNlc1wmIzM0O1xuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6MzEzOlx0ZGVwZW5kcyBvbiBVU0JfVVNCTkVUXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0zMTQtXHRzZWxlY3QgQ1JDMzJcbi0tXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZz0zMTk9Y29uZmlnIFVTQl9ORVRfU1I5NzAwXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0zMjAtXHR0cmlzdGF0ZSBcJiMzNDtDb3JlQ2hpcC1zeiBTUjk3MDAgYmFzZWQgVVNCIDEuMSAxMC8xMDAgZXRoZXJuZXQgZGV2aWNlc1wmIzM0O1xuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6MzIxOlx0ZGVwZW5kcyBvbiBVU0JfVVNCTkVUXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0zMjItXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc9MzI2PWNvbmZpZyBVU0JfTkVUX1NSOTgwMFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctMzI3LVx0dHJpc3RhdGUgXCYjMzQ7Q29yZUNoaXAtc3ogU1I5ODAwIGJhc2VkIFVTQiAyLjAgMTAvMTAwIGV0aGVybmV0IGRldmljZXNcJiMzNDtcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnOjMyODpcdGRlcGVuZHMgb24gVVNCX1VTQk5FVFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctMzI5LVx0c2VsZWN0IENSQzMyXG4tLVxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc9MzQxPWNvbmZpZyBVU0JfTkVUX1NNU0M3NVhYXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0zNDItXHR0cmlzdGF0ZSBcJiMzNDtTTVNDIExBTjc1WFggYmFzZWQgVVNCIDIuMCBnaWdhYml0IGV0aGVybmV0IGRldmljZXNcJiMzNDtcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnOjM0MzpcdGRlcGVuZHMgb24gVVNCX1VTQk5FVFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctMzQ0LVx0c2VsZWN0IEJJVFJFVkVSU0Vcbi0tXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZz0zNTE9Y29uZmlnIFVTQl9ORVRfU01TQzk1WFhcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTM1Mi1cdHRyaXN0YXRlIFwmIzM0O1NNU0MgTEFOOTVYWCBiYXNlZCBVU0IgMi4wIDEwLzEwMCBldGhlcm5ldCBkZXZpY2VzXCYjMzQ7XG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZzozNTM6XHRkZXBlbmRzIG9uIFVTQl9VU0JORVRcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTM1NC1cdHNlbGVjdCBQSFlMSUJcbi0tXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZz0zNjQ9Y29uZmlnIFVTQl9ORVRfR0w2MjBBXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0zNjUtXHR0cmlzdGF0ZSBcJiMzNDtHZW5lU3lzIEdMNjIwVVNCLUEgYmFzZWQgY2FibGVzXCYjMzQ7XG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZzozNjY6XHRkZXBlbmRzIG9uIFVTQl9VU0JORVRcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTM2Ny1cdGhlbHBcbi0tXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZz0zNzM9Y29uZmlnIFVTQl9ORVRfTkVUMTA4MFxuLS1cbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTM3NS1cdGRlZmF1bHQgeVxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6Mzc2Olx0ZGVwZW5kcyBvbiBVU0JfVVNCTkVUXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0zNzctXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc9MzgyPWNvbmZpZyBVU0JfTkVUX1BMVVNCXG4tLVxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctMzg1LVx0IyBhcmUgZXZlciByZXNvbHZlZCAuLi4gdGhlbiByZW1vdmUgXCYjMzQ7ZXhwZXJpbWVudGFsXCYjMzQ7XG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZzozODY6XHRkZXBlbmRzIG9uIFVTQl9VU0JORVRcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTM4Ny1cdGhlbHBcbi0tXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZz0zOTE9Y29uZmlnIFVTQl9ORVRfTUNTNzgzMFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctMzkyLVx0dHJpc3RhdGUgXCYjMzQ7TW9zQ2hpcCBNQ1M3ODMwIGJhc2VkIEV0aGVybmV0IGFkYXB0ZXJzXCYjMzQ7XG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZzozOTM6XHRkZXBlbmRzIG9uIFVTQl9VU0JORVRcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTM5NC1cdGhlbHBcbi0tXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZz0zOTk9Y29uZmlnIFVTQl9ORVRfUk5ESVNfSE9TVFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctNDAwLVx0dHJpc3RhdGUgXCYjMzQ7SG9zdCBmb3IgUk5ESVMgYW5kIEFjdGl2ZVN5bmMgZGV2aWNlc1wmIzM0O1xuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6NDAxOlx0ZGVwZW5kcyBvbiBVU0JfVVNCTkVUXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy00MDItXHRzZWxlY3QgVVNCX05FVF9DRENFVEhFUlxuLS1cbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnPTQxOD1jb25maWcgVVNCX05FVF9DRENfU1VCU0VUXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy00MTktXHR0cmlzdGF0ZSBcJiMzNDtTaW1wbGUgVVNCIE5ldHdvcmsgTGlua3MgKENEQyBFdGhlcm5ldCBzdWJzZXQpXCYjMzQ7XG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZzo0MjA6XHRkZXBlbmRzIG9uIFVTQl9VU0JORVRcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTQyMS1cdGRlZmF1bHQgeVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnPTQ5ND1jb25maWcgVVNCX05FVF9aQVVSVVNcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTQ5NS1cdHRyaXN0YXRlIFwmIzM0O1NoYXJwIFphdXJ1cyAoc3RvY2sgUk9NcykgYW5kIGNvbXBhdGlibGVcJiMzNDtcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnOjQ5NjpcdGRlcGVuZHMgb24gVVNCX1VTQk5FVFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctNDk3LVx0c2VsZWN0IFVTQl9ORVRfQ0RDRVRIRVJcbi0tXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZz01MTI9Y29uZmlnIFVTQl9ORVRfQ1g4MjMxMF9FVEhcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTUxMy1cdHRyaXN0YXRlIFwmIzM0O0NvbmV4YW50IENYODIzMTAgVVNCIGV0aGVybmV0IHBvcnRcJiMzNDtcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnOjUxNDpcdGRlcGVuZHMgb24gVVNCX1VTQk5FVFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctNTE1LVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnPTUyMD1jb25maWcgVVNCX05FVF9LQUxNSUFcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTUyMS1cdHRyaXN0YXRlIFwmIzM0O1NhbXN1bmcgS2FsbWlhIGJhc2VkIExURSBVU0IgbW9kZW1cJiMzNDtcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnOjUyMjpcdGRlcGVuZHMgb24gVVNCX1VTQk5FVFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctNTIzLVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnPTUzMD1jb25maWcgVVNCX05FVF9RTUlfV1dBTlxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctNTMxLVx0dHJpc3RhdGUgXCYjMzQ7UU1JIFdXQU4gZHJpdmVyIGZvciBRdWFsY29tbSBNU00gYmFzZWQgM0cgYW5kIExURSBtb2RlbXNcJiMzNDtcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnOjUzMjpcdGRlcGVuZHMgb24gVVNCX1VTQk5FVFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctNTMzLVx0c2VsZWN0IFVTQl9XRE1cbi0tXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZz01NjM9Y29uZmlnIFVTQl9ORVRfSU5UNTFYMVxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctNTY0LVx0dHJpc3RhdGUgXCYjMzQ7SW50ZWxsb24gUExDIGJhc2VkIHVzYiBhZGFwdGVyXCYjMzQ7XG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZzo1NjU6XHRkZXBlbmRzIG9uIFVTQl9VU0JORVRcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTU2Ni1cdHNlbGVjdCBVU0JfTkVUX0NEQ0VUSEVSXG4tLVxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc9NTcyPWNvbmZpZyBVU0JfQ0RDX1BIT05FVFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctNTczLVx0dHJpc3RhdGUgXCYjMzQ7Q0RDIFBob25ldCBzdXBwb3J0XCYjMzQ7XG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZzo1NzQ6XHRkZXBlbmRzIG9uIFBIT05FVCBcdTAwMjZcdTAwMjYgVVNCX1VTQk5FVFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctNTc1LVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnPTU5MD1jb25maWcgVVNCX1NJRVJSQV9ORVRcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTU5MS1cdHRyaXN0YXRlIFwmIzM0O1VTQi10by1XV0FOIERyaXZlciBmb3IgU2llcnJhIFdpcmVsZXNzIG1vZGVtc1wmIzM0O1xuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6NTkyOlx0ZGVwZW5kcyBvbiBVU0JfVVNCTkVUXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy01OTMtXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc9NjE0PWNvbmZpZyBVU0JfTkVUX0NIOTIwMFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctNjE1LVx0dHJpc3RhdGUgXCYjMzQ7UWluZ0hlbmcgQ0g5MjAwIFVTQiBldGhlcm5ldCBzdXBwb3J0XCYjMzQ7XG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZzo2MTY6XHRkZXBlbmRzIG9uIFVTQl9VU0JORVRcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTYxNy1cdHNlbGVjdCBNSUlcbi0tXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZz02MjU9Y29uZmlnIFVTQl9ORVRfQVFDMTExXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy02MjYtXHR0cmlzdGF0ZSBcJiMzNDtBcXVhbnRpYSBBUXRpb24gVVNCIHRvIDUvMi41R2JFIENvbnRyb2xsZXJzIHN1cHBvcnRcJiMzNDtcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnOjYyNzpcdGRlcGVuZHMgb24gVVNCX1VTQk5FVFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctNjI4LVx0c2VsZWN0IENSQzMyXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAyOjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzOTc0CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMjExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVVNCIE5ldHdvcmsgRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgbXkgYnJhaW4gemVyb2VzIGluIG9uIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnM6IGBDT05GSUdfVVNCX1VTQk5FVGAsIGBDT05GSUdfVVNCX05FVF9EUklWRVJTYCwgYW5kIG9mIGNvdXJzZSwgdGhlIGJyb2FkZXIgYENPTkZJR19VU0JgIGFuZCBgQ09ORklHX05FVGAuIFRob3NlIGFyZSB0aGUgZ2F0ZWtlZXBlcnMgaGVyZTsgaWYgdGhleSYjMzk7cmUgbm90IHNldCwgdGhpcyBwYXRjaCBpcyBhIG5vbi1zdGFydGVyLgoKTm93LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBndXRzIG9mIHRoZSBjb2RlLiBUaGUgcGF0Y2ggdG91Y2hlcyB0d28gZnVuY3Rpb25zIHdpdGhpbiBgZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jYDogYHVzYm5ldF9za2JfcmV0dXJuYCBhbmQgYHR4X2NvbXBsZXRlYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlaXIgcm9sZXMgd2l0aGluIHRoZSBVU0IgbmV0d29yayBkcml2ZXIuCgpBIHF1aWNrIGNoZWNrIGNvbmZpcm1zIGB1c2JuZXRfc2tiX3JldHVybmAgaXMgZXhwb3J0ZWQsIG1lYW5pbmcgaXQmIzM5O3MgaW50ZW5kZWQgdG8gYmUgdXNlZCBieSBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsLiBIb3dldmVyLCBgdHhfY29tcGxldGVgIGlzIHN0YXRpYyB3aXRoaW4gYHVzYm5ldC5jYC4gVGhpcyB0ZWxscyBtZSBpbW1lZGlhdGVseSB0aGF0IGl0JiMzOTtzIGFuIGludGVybmFsIGZ1bmN0aW9uLCB3aGljaCBuYXJyb3dzIGRvd24gaXRzIGltcGFjdC4KCkJ1dCwgSSBzdGlsbCBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgbmFtZSBgdHhfY29tcGxldGVgIGlzbiYjMzk7dCB1c2VkIGVsc2V3aGVyZSwgY2F1c2luZyBwb3RlbnRpYWwgY29uZmxpY3RzLiBJJiMzOTtsbCBuZWVkIHRvIHJ1biBhIHF1aWNrIGdyZXAgYWNyb3NzIHRoZSBrZXJuZWwgc291cmNlIHRvIGNvbmZpcm0gdGhlIHNjb3BlIG9mIHRoaXMgbmFtZS4gSXQmIzM5O3MgcG9zc2libGUgSSYjMzk7dmUgc2VlbiBpdCB1c2VkIGVsc2V3aGVyZSwgYW5kIGl0JiMzOTtzIGFsd2F5cyBnb29kIHRvIGJlIHRob3JvdWdoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMjowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2b2lkIHR4X2NvbXBsZXRlXFwofHN0YXRpYyB2b2lkIHR4X2NvbXBsZXRlXFwoJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9jZGMtcGhvbmV0LmM9MjU9c3RydWN0IHVzYnBuX2RldiB7XG4tLVxuZHJpdmVycy9uZXQvdXNiL2NkYy1waG9uZXQuYy00MS1cbmRyaXZlcnMvbmV0L3VzYi9jZGMtcGhvbmV0LmM6NDI6c3RhdGljIHZvaWQgdHhfY29tcGxldGUoc3RydWN0IHVyYiAqcmVxKTtcbmRyaXZlcnMvbmV0L3VzYi9jZGMtcGhvbmV0LmMtNDMtc3RhdGljIHZvaWQgcnhfY29tcGxldGUoc3RydWN0IHVyYiAqcmVxKTtcbi0tXG5kcml2ZXJzL25ldC91c2IvY2RjLXBob25ldC5jPTQ4PXN0YXRpYyBuZXRkZXZfdHhfdCB1c2Jwbl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvdXNiL2NkYy1waG9uZXQuYy04Mi1cbmRyaXZlcnMvbmV0L3VzYi9jZGMtcGhvbmV0LmM6ODM6c3RhdGljIHZvaWQgdHhfY29tcGxldGUoc3RydWN0IHVyYiAqcmVxKVxuZHJpdmVycy9uZXQvdXNiL2NkYy1waG9uZXQuYy04NC17XG4tLVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYz0zNTgxPXN0YXRpYyBlbnVtIHNrYl9zdGF0ZSBkZWZlcl9iaChzdHJ1Y3QgbGFuNzh4eF9uZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTM2MDQtXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjM2MDU6c3RhdGljIHZvaWQgdHhfY29tcGxldGUoc3RydWN0IHVyYiAqdXJiKVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0zNjA2LXtcbi0tXG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmM9MTE4ND11c2JuZXRfZGVmZXJyZWRfa2V2ZW50KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmMtMTI5NC1cbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYzoxMjk1OnN0YXRpYyB2b2lkIHR4X2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVyYilcbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYy0xMjk2LXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9iNDNsZWdhY3kvcGlvLmM9NjM9c3RhdGljIHZvaWQgdHhfZGF0YShzdHJ1Y3QgYjQzbGVnYWN5X3Bpb3F1ZXVlICpxdWV1ZSxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9iNDNsZWdhY3kvcGlvLmMtODgtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9iNDNsZWdhY3kvcGlvLmM6ODk6c3RhdGljIHZvaWQgdHhfY29tcGxldGUoc3RydWN0IGI0M2xlZ2FjeV9waW9xdWV1ZSAqcXVldWUsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9iNDNsZWdhY3kvcGlvLmMtOTAtXHRcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9wcmludGVyLmM9MjY1PXN0YXRpYyB2b2lkIHJ4X2NvbXBsZXRlKHN0cnVjdCB1c2JfZXAgKmVwLCBzdHJ1Y3QgdXNiX3JlcXVlc3QgKnJlcSlcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9wcmludGVyLmMtMzEzLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfcHJpbnRlci5jOjMxNDpzdGF0aWMgdm9pZCB0eF9jb21wbGV0ZShzdHJ1Y3QgdXNiX2VwICplcCwgc3RydWN0IHVzYl9yZXF1ZXN0ICpyZXEpXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9wcmludGVyLmMtMzE1LXtcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdV9ldGhlci5jPTM5Nj1zdGF0aWMgdm9pZCBldGhfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL3VfZXRoZXIuYy00MDgtXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdV9ldGhlci5jOjQwOTpzdGF0aWMgdm9pZCB0eF9jb21wbGV0ZShzdHJ1Y3QgdXNiX2VwICplcCwgc3RydWN0IHVzYl9yZXF1ZXN0ICpyZXEpXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdV9ldGhlci5jLTQxMC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAyOjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MzEyCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOgoKKipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbCBCb3R0bGVuZWNrcyBpbiBVU0IgTmV0d29yayBUcmFuc21pc3Npb24qKgoKT2theSwgc28gd2UmIzM5O3JlIHNlZWluZyBwZXJmb3JtYW5jZSBpc3N1ZXMgd2l0aCB0aGUgVVNCIG5ldHdvcmsgc3RhY2suIFRoZSBmaXJzdCBwbGFjZSBteSBtaW5kIG5hdHVyYWxseSBnb2VzIGlzIHRoZSB0cmFuc21pc3Npb24gcGF0aCwgYW5kIGluIHBhcnRpY3VsYXIsIHRoZSBjYWxsYmFjayBhc3NvY2lhdGVkIHdpdGggc2VuZGluZyBkYXRhLiBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciBpbml0aWF0aW5nIHRyYW5zbWlzc2lvbiwgd2hpY2ggSSB0aGluayBpcyBgdXNibmV0X3N0YXJ0X3htaXRgIGluIHRoaXMgY29udGV4dCwgb3IgYW55IG90aGVyIGZ1bmN0aW9uIHRoYXQgbWlnaHQgYmUgY2FsbGluZyBvciByZWx5aW5nIG9uIGB0eF9jb21wbGV0ZWAuIEkgd2FudCB0byBsb29rIGNsb3NlbHkgYXQgaG93IHRoYXQgY2FsbGJhY2ssIGB0eF9jb21wbGV0ZWAsIGlzIGJlaW5nIHVzZWQgYW5kIHdoYXQgZGVwZW5kZW5jaWVzIGl0IGhhcy4gSXMgdGhlcmUgYmxvY2tpbmcgZ29pbmcgb24/IEFyZSB3ZSB3YWl0aW5nIG9uIG11dGV4ZXMsIG9yIG90aGVyIG9wZXJhdGlvbnMsIHRoYXQgY291bGQgYmUgc2xvd2luZyB1cyBkb3duPyBBcmUgd2UgcGVyaGFwcyB0aHJhc2hpbmcgbWVtb3J5IGFzIGNvbXBsZXRpb25zIGFyZSBwcm9jZXNzZWQ/IFdlIG5lZWQgdG8gbG9vayBmb3IgYW55IHBvdGVudGlhbCBib3R0bGVuZWNrcywgbGlrZSBleGNlc3NpdmUgY29weWluZywgb3IgZXZlbiBzaW1wbGUgbWlzc2VkIG9wcG9ydHVuaXRpZXMgZm9yIHBpcGVsaW5pbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzZXF1ZW5jaW5nIGFuZCBjcml0aWNhbCBwYXRocyB0byBjb25maXJtIHdoZXRoZXIgbXkgZmlyc3QgaW5zdGluY3QgaXMgY29ycmVjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDI6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dHhfY29tcGxldGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvdXNibmV0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jPTExODQ9dXNibmV0X2RlZmVycmVkX2tldmVudChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jLTEyOTQtXG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmM6MTI5NTpzdGF0aWMgdm9pZCB0eF9jb21wbGV0ZShzdHJ1Y3QgdXJiICp1cmIpXG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmMtMTI5Ni17XG4tLVxuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jPTE0MDA9bmV0ZGV2X3R4X3QgdXNibmV0X3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldClcbi0tXG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmMtMTQzNi1cdHVzYl9maWxsX2J1bGtfdXJiKHVyYiwgZGV2LVx1MDAzZXVkZXYsIGRldi1cdTAwM2VvdXQsXG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmM6MTQzNzpcdFx0XHQgIHNrYi1cdTAwM2VkYXRhLCBza2ItXHUwMDNlbGVuLCB0eF9jb21wbGV0ZSwgc2tiKTtcbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYy0xNDM4LVx0aWYgKGRldi1cdTAwM2VjYW5fZG1hX3NnKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAyOjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1ODQ1CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipGb2N1c2luZyBvbiBVU0IgTmV0d29yayBEcml2ZXIgQ29tcGxldGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gcmVhbGx5IGRpZyBpbnRvIGhvdyB0aGUgVVNCIG5ldHdvcmsgZHJpdmVyIGhhbmRsZXMgcGFja2V0IHJldHVybiBhbmQgdHJhbnNtaXNzaW9uIGNvbXBsZXRpb24uIGB1c2JuZXRfc2tiX3JldHVybmAgYW5kIHRoZSByZWxhdGVkIGB0eF9jb21wbGV0ZWAgb3IgYHVzYm5ldF9zdGFydF94bWl0YCBmdW5jdGlvbnMg4oCTIHRob3NlIGZlZWwgbGlrZSB0aGUga2V5IHBvaW50cyBvZiBmb2N1cyByaWdodCBub3cuIFRoZXkmIzM5O3JlIGdvaW5nIHRvIGlsbHVtaW5hdGUgdGhlIGNvcmUgb2YgdGhlIGRhdGEgZmxvdy4KCk15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgY2xlYXI6IEkmIzM5O20gZ29pbmcgdG8gc2NhbiB0aGUgYHVzYm5ldC5jYCBzb3VyY2UgY29kZSwgYnV0IEkgYWxzbyBuZWVkIHRvIGJyYW5jaCBvdXQgYW5kIGxvb2sgYXQgKm90aGVyKiBuZXR3b3JrIGRyaXZlcnMgdGhhdCBpbnRlcmZhY2Ugd2l0aCBVU0IuIEkmIzM5O2xsIHNlYXJjaCBmb3IgYWxsIHRoZSBjYWxsZXJzIG9mIGB1c2JuZXRfc2tiX3JldHVybmAsIHRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIGxhbmRzY2FwZS4gU2VlIGhvdyBvdGhlciBkcml2ZXJzIGFyZSB1c2luZyBhbmQgaW50ZXJmYWNpbmcgd2l0aCB0aGUgdXNiIHN0YWNrLiBUaGlzIGJyb2FkZXIgcGVyc3BlY3RpdmUgbWlnaHQgZXhwb3NlIGFueSBhcmNoaXRlY3R1cmFsIHBhdHRlcm5zIG9yIHBvdGVudGlhbCBib3R0bGVuZWNrcyBJIHNob3VsZCBiZSBhd2FyZSBvZi4gVGhlIGdvYWwgaXMgYSBjb21wcmVoZW5zaXZlIHVuZGVyc3RhbmRpbmcsIG5vdCBqdXN0IGEgbmFycm93IHZpZXcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAyOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3VzYm5ldF9za2JfcmV0dXJuJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvYXFjMTExLmM9MTA3Mj1zdGF0aWMgaW50IGFxYzExMV9yeF9maXh1cChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTExNjItXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmM6MTE2MzpcdFx0dXNibmV0X3NrYl9yZXR1cm4oZGV2LCBuZXdfc2tiKTtcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy0xMTY0LVx0XHRpZiAocGt0X2NvdW50ID09IDApXG4tLVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmM9MTM2PWludCBhc2l4X3J4X2ZpeHVwX2ludGVybmFsKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0yMjMtXHRcdFx0aWYgKCFyeC1cdTAwM2VyZW1haW5pbmcpIHtcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jOjIyNDpcdFx0XHRcdHVzYm5ldF9za2JfcmV0dXJuKGRldiwgcngtXHUwMDNlYXhfc2tiKTtcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTIyNS1cdFx0XHRcdHJ4LVx1MDAzZWF4X3NrYiA9IE5VTEw7XG4tLVxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzlfMTc4YS5jPTEzNTc9c3RhdGljIGludCBheDg4MTc5X3J4X2ZpeHVwKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3OV8xNzhhLmMtMTQ2Ni1cdFx0YXg4ODE3OV9yeF9jaGVja3N1bShheF9za2IsIHBrdF9oZHIpO1xuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzlfMTc4YS5jOjE0Njc6XHRcdHVzYm5ldF9za2JfcmV0dXJuKGRldiwgYXhfc2tiKTtcbmRyaXZlcnMvbmV0L3VzYi9heDg4MTc5XzE3OGEuYy0xNDY4LVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9jZGNfZWVtLmM9MTU0PXN0YXRpYyBpbnQgZWVtX3J4X2ZpeHVwKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5kcml2ZXJzL25ldC91c2IvY2RjX2VlbS5jLTMxOS1cdFx0XHR9IGVsc2VcbmRyaXZlcnMvbmV0L3VzYi9jZGNfZWVtLmM6MzIwOlx0XHRcdFx0dXNibmV0X3NrYl9yZXR1cm4oZGV2LCBza2IyKTtcbmRyaXZlcnMvbmV0L3VzYi9jZGNfZWVtLmMtMzIxLVx0XHR9XG4tLVxuZHJpdmVycy9uZXQvdXNiL2NkY19tYmltLmM9NDEyPXN0YXRpYyBpbnQgY2RjX21iaW1fcnhfZml4dXAoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2luKVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9jZGNfbWJpbS5jLTQ4Ni1cdFx0XHRcdGdvdG8gZXJyb3I7XG5kcml2ZXJzL25ldC91c2IvY2RjX21iaW0uYzo0ODc6XHRcdFx0dXNibmV0X3NrYl9yZXR1cm4oZGV2LCBza2IpO1xuZHJpdmVycy9uZXQvdXNiL2NkY19tYmltLmMtNDg4LVx0XHRcdHBheWxvYWQgJiM0Mzs9IGxlbjtcdC8qIGNvdW50IHBheWxvYWQgYnl0ZXMgaW4gdGhpcyBOVEIgKi9cbi0tXG5kcml2ZXJzL25ldC91c2IvY2RjX25jbS5jPTE3Mjc9aW50IGNkY19uY21fcnhfZml4dXAoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2luKVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9jZGNfbmNtLmMtMTgyMS1cdFx0XHRza2JfcHV0X2RhdGEoc2tiLCBza2JfaW4tXHUwMDNlZGF0YSAmIzQzOyBvZmZzZXQsIGxlbik7XG5kcml2ZXJzL25ldC91c2IvY2RjX25jbS5jOjE4MjI6XHRcdFx0dXNibmV0X3NrYl9yZXR1cm4oZGV2LCBza2IpO1xuZHJpdmVycy9uZXQvdXNiL2NkY19uY20uYy0xODIzLVx0XHRcdHBheWxvYWQgJiM0Mzs9IGxlbjtcdC8qIGNvdW50IHBheWxvYWQgYnl0ZXMgaW4gdGhpcyBOVEIgKi9cbi0tXG5kcml2ZXJzL25ldC91c2IvY3g4MjMxMF9ldGguYz0yNDM9c3RhdGljIGludCBjeDgyMzEwX3J4X2ZpeHVwKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5kcml2ZXJzL25ldC91c2IvY3g4MjMxMF9ldGguYy0yNjItXHRcdCAgICAgICBkZXYtXHUwMDNlcGFydGlhbF9yZW0pO1xuZHJpdmVycy9uZXQvdXNiL2N4ODIzMTBfZXRoLmM6MjYzOlx0XHR1c2JuZXRfc2tiX3JldHVybihkZXYsIHNrYjIpO1xuZHJpdmVycy9uZXQvdXNiL2N4ODIzMTBfZXRoLmMtMjY0LVx0XHRza2JfcHVsbChza2IsIChkZXYtXHUwMDNlcGFydGlhbF9yZW0gJiM0MzsgMSkgXHUwMDI2IH4xKTtcbi0tXG5kcml2ZXJzL25ldC91c2IvY3g4MjMxMF9ldGguYy0zMDYtXHRcdC8qIHByb2Nlc3MgdGhlIHBhY2tldCAqL1xuZHJpdmVycy9uZXQvdXNiL2N4ODIzMTBfZXRoLmM6MzA3Olx0XHR1c2JuZXRfc2tiX3JldHVybihkZXYsIHNrYjIpO1xuZHJpdmVycy9uZXQvdXNiL2N4ODIzMTBfZXRoLmMtMzA4LVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9nbDYyMGEuYz02Nz1zdGF0aWMgaW50IGdlbmVsaW5rX3J4X2ZpeHVwKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5kcml2ZXJzL25ldC91c2IvZ2w2MjBhLmMtMTE1LVx0XHRcdHNrYl9wdXRfZGF0YShnbF9za2IsIHBhY2tldC1cdTAwM2VwYWNrZXRfZGF0YSwgc2l6ZSk7XG5kcml2ZXJzL25ldC91c2IvZ2w2MjBhLmM6MTE2Olx0XHRcdHVzYm5ldF9za2JfcmV0dXJuKGRldiwgZ2xfc2tiKTtcbmRyaXZlcnMvbmV0L3VzYi9nbDYyMGEuYy0xMTctXHRcdH1cbi0tXG5kcml2ZXJzL25ldC91c2Iva2FsbWlhLmM9MjMwPWthbG1pYV9yeF9maXh1cChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuZHJpdmVycy9uZXQvdXNiL2thbG1pYS5jLTMyOC1cdFx0ZWxzZSB7XG5kcml2ZXJzL25ldC91c2Iva2FsbWlhLmM6MzI5Olx0XHRcdHVzYm5ldF9za2JfcmV0dXJuKGRldiwgc2tiMik7XG5kcml2ZXJzL25ldC91c2Iva2FsbWlhLmMtMzMwLVx0XHRcdHNrYl9wdWxsKHNrYiwgZXRoZXJfcGFja2V0X2xlbmd0aCk7XG4tLVxuZHJpdmVycy9uZXQvdXNiL2xnLXZsNjAwLmM9OTY9c3RhdGljIGludCB2bDYwMF9yeF9maXh1cChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuZHJpdmVycy9uZXQvdXNiL2xnLXZsNjAwLmMtMjA0LVx0XHRcdHNrYl90cmltKGNsb25lLCBwYWNrZXRfbGVuKTtcbmRyaXZlcnMvbmV0L3VzYi9sZy12bDYwMC5jOjIwNTpcdFx0XHR1c2JuZXRfc2tiX3JldHVybihkZXYsIGNsb25lKTtcbmRyaXZlcnMvbmV0L3VzYi9sZy12bDYwMC5jLTIwNi1cbi0tXG5kcml2ZXJzL25ldC91c2IvbGctdmw2MDAuYy0yMTEtXHRcdFx0aWYgKHMtXHUwMDNlY3VycmVudF9yeF9idWYpIHtcbmRyaXZlcnMvbmV0L3VzYi9sZy12bDYwMC5jOjIxMjpcdFx0XHRcdHVzYm5ldF9za2JfcmV0dXJuKGRldiwgYnVmKTtcbmRyaXZlcnMvbmV0L3VzYi9sZy12bDYwMC5jLTIxMy1cdFx0XHRcdHMtXHUwMDNlY3VycmVudF9yeF9idWYgPSBOVUxMO1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9ybmRpc19ob3N0LmM9NDk1PWludCBybmRpc19yeF9maXh1cChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuZHJpdmVycy9uZXQvdXNiL3JuZGlzX2hvc3QuYy01NDUtXG5kcml2ZXJzL25ldC91c2Ivcm5kaXNfaG9zdC5jOjU0NjpcdFx0dXNibmV0X3NrYl9yZXR1cm4oZGV2LCBza2IyKTtcbmRyaXZlcnMvbmV0L3VzYi9ybmRpc19ob3N0LmMtNTQ3LVx0fVxuZHJpdmVycy9uZXQvdXNiL3JuZGlzX2hvc3QuYy01NDgtXG5kcml2ZXJzL25ldC91c2Ivcm5kaXNfaG9zdC5jOjU0OTpcdC8qIGNhbGxlciB3aWxsIHVzYm5ldF9za2JfcmV0dXJuIHRoZSByZW1haW5pbmcgcGFja2V0ICovXG5kcml2ZXJzL25ldC91c2Ivcm5kaXNfaG9zdC5jLTU1MC1cdGlmICh1bmxpa2VseShkc3RfbWFjX2ZpeHVwKSlcbi0tXG5kcml2ZXJzL25ldC91c2Ivc2llcnJhX25ldC5jPTc5NT1zdGF0aWMgaW50IHNpZXJyYV9uZXRfcnhfZml4dXAoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9zaWVycmFfbmV0LmMtODQyLVx0XHRpZiAobmV3X3NrYilcbmRyaXZlcnMvbmV0L3VzYi9zaWVycmFfbmV0LmM6ODQzOlx0XHRcdHVzYm5ldF9za2JfcmV0dXJuKGRldiwgbmV3X3NrYik7XG5kcml2ZXJzL25ldC91c2Ivc2llcnJhX25ldC5jLTg0NC1cbi0tXG5kcml2ZXJzL25ldC91c2Ivc21zYzc1eHguYz0yMTcxPXN0YXRpYyBpbnQgc21zYzc1eHhfcnhfZml4dXAoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9zbXNjNzV4eC5jLTIyNDItXG5kcml2ZXJzL25ldC91c2Ivc21zYzc1eHguYzoyMjQzOlx0XHRcdHVzYm5ldF9za2JfcmV0dXJuKGRldiwgYXhfc2tiKTtcbmRyaXZlcnMvbmV0L3VzYi9zbXNjNzV4eC5jLTIyNDQtXHRcdH1cbi0tXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYz0xODc4PXN0YXRpYyBpbnQgc21zYzk1eHhfcnhfZml4dXAoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jLTE5NDktXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYzoxOTUwOlx0XHRcdHVzYm5ldF9za2JfcmV0dXJuKGRldiwgYXhfc2tiKTtcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jLTE5NTEtXHRcdH1cbi0tXG5kcml2ZXJzL25ldC91c2Ivc3I5NzAwLmM9MzIzPXN0YXRpYyBpbnQgc3I5NzAwX3J4X2ZpeHVwKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5kcml2ZXJzL25ldC91c2Ivc3I5NzAwLmMtMzc0LVx0XHRtZW1jcHkoc3Jfc2tiLVx1MDAzZWRhdGEsIHNrYi1cdTAwM2VkYXRhICYjNDM7IDMsIGxlbik7XG5kcml2ZXJzL25ldC91c2Ivc3I5NzAwLmM6Mzc1Olx0XHR1c2JuZXRfc2tiX3JldHVybihkZXYsIHNyX3NrYik7XG5kcml2ZXJzL25ldC91c2Ivc3I5NzAwLmMtMzc2LVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9zcjk4MDAuYz02Mj1zdGF0aWMgaW50IHNyX3J4X2ZpeHVwKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5kcml2ZXJzL25ldC91c2Ivc3I5ODAwLmMtOTUtXHRcdG1lbWNweShzcl9za2ItXHUwMDNlZGF0YSwgc2tiLVx1MDAzZWRhdGEgJiM0Mzsgb2Zmc2V0LCBzaXplKTtcbmRyaXZlcnMvbmV0L3VzYi9zcjk4MDAuYzo5NjpcdFx0dXNibmV0X3NrYl9yZXR1cm4oZGV2LCBzcl9za2IpO1xuZHJpdmVycy9uZXQvdXNiL3NyOTgwMC5jLTk3LVxuLS1cbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYz0zMTI9c3RhdGljIHZvaWQgX191c2JuZXRfc3RhdHVzX3N0b3BfZm9yY2Uoc3RydWN0IHVzYm5ldCAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYy0zMjUtICovXG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmM6MzI2OnZvaWQgdXNibmV0X3NrYl9yZXR1cm4oc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jLTMyNy17XG4tLVxuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jLTM1OC19XG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmM6MzU5OkVYUE9SVF9TWU1CT0xfR1BMKHVzYm5ldF9za2JfcmV0dXJuKTtcbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYy0zNjAtXG4tLVxuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jPTU3MD1zdGF0aWMgaW5saW5lIGludCByeF9wcm9jZXNzKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmMtNTkxLVxuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jOjU5MjpcdHVzYm5ldF9za2JfcmV0dXJuKGRldiwgc2tiKTtcbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYy01OTMtXHRyZXR1cm4gMDtcbi0tXG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmM9Njk4PXZvaWQgdXNibmV0X3Jlc3VtZV9yeChzdHJ1Y3QgdXNibmV0ICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jLTcwNi1cdHdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUoXHUwMDI2ZGV2LVx1MDAzZXJ4cV9wYXVzZSkpICE9IE5VTEwpIHtcbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYzo3MDc6XHRcdHVzYm5ldF9za2JfcmV0dXJuKGRldiwgc2tiKTtcbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYy03MDgtXHRcdG51bSYjNDM7JiM0Mzs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAyOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MDMzCgkJCQkJCQlvdXRwdXQ6IDE2MAoJCQkJCQkJdGhvdWdodHM6IDI3NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBhIFJlY2VudCBVU0IgTmV0d29ya2luZyBEcml2ZXIgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kLCByaWdodCBvZmYgdGhlIGJhdCwgSSBuZWVkIHRvIHplcm8gaW4gb24gYSBjb3VwbGUgb2YgY3J1Y2lhbCBzeW1ib2xzOiBgdXNibmV0X3NrYl9yZXR1cm5gIGFuZCBgdHhfY29tcGxldGVgLCBvciwgaW4gc29tZSBjYXNlcywgYHVzYm5ldF9zdGFydF94bWl0YC4gTGV0JiMzOTtzIGNvbmZpcm0gdGhhdCBgdHhfY29tcGxldGVgIGlzIGluZGVlZCBpbiBgdXNibmV0LmNgLiBBaGEsIHRoZXJlIGl0IGlzLCBsaW5lIDEyOTUuIEdvb2QuCgpOb3csIGJlZm9yZSBJIGRpdmUgdG9vIGRlZXAsIGxldCYjMzk7cyBtYWtlIHN1cmUgSSBoYXZlIGFsbCB0aGUgcHJlcmVxdWlzaXRlcyBjb3ZlcmVkLiBTZWVtcyB0aGUgc3lzdGVtIGZsYWdnZWQgaXQgYXMgYFdvcnRoRnV6emluZzogdHJ1ZWAsIHdoaWNoIGlzIGEgZ29vZCBpbml0aWFsIHNpZ24uIFRoZSBgRm9jdXNTeW1ib2xzYCBhcmUgc3BvdCBvbiwgZXhhY3RseSB3aGF0IEkgZXhwZWN0ZWQuIFRoZSBjb3JyZWN0IGNvbmZpZ3MgYXJlIGVuYWJsZWQ6IGBVU0JfVVNCTkVUYCwgYW5kIGBVU0JfTkVUX0RSSVZFUlNgLiBHb29kLCBnb29kLiBUaGVzZSBhcmUgdGhlIHNwZWNpZmljIG9uZXMsIHRob3VnaCBgVVNCYCBhbmQgYE5FVGAgaW4gZ2VuZXJhbCB3b3VsZCBhbHNvIHN1ZmZpY2UuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZG8gYSBmaW5hbCBzYW5pdHkgY2hlY2sgb2YgdGhlIGNvcmUgcmVhc29uaW5nIGJlaGluZCB0aGlzIGNoYW5nZS4gVGhlIHBhdGNoLCBhcyBJIHVuZGVyc3RhbmQgaXQsIGlzIGZpZGRsaW5nIHdpdGggaG93IHBlci1DUFUgNjQtYml0IHN0YXRzIGFyZSB1cGRhdGVkLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIG1vZGlmeWluZyB0aGUgbG9naWMgd2l0aGluIHRoZSBgdXNibmV0X3NrYl9yZXR1cm4oKWAgYW5kIGB0eF9jb21wbGV0ZSgpYCBmdW5jdGlvbnMgd2l0aGluIHRoZSBjb3JlIFVTQiBuZXR3b3JraW5nIGRyaXZlciwgYHVzYm5ldC5jYC4gSXQmIzM5O3MgYSBzd2l0Y2hlcm9vIGZyb20gdXNpbmcgYHU2NF9zdGF0c191cGRhdGVfYmVnaW5faXJxc2F2ZSgpYCB0byBgZ2V0X2NwdV9wdHIoKWAgY29tYmluZWQgd2l0aCBgdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbigpYC4gVGhpcyBzaGlmdCBhbHRlcnMgdGhlIHN5bmNocm9uaXphdGlvbiwgcHJlZW1wdGlvbiwgYW5kIElSUSBoYW5kbGluZyBzZW1hbnRpY3MgaW4gYXJlYXMgb2YgbmV0d29yayBjb2RlIHRoYXQgYXJlIGFjY2Vzc2libGUgdmlhIGVtdWxhdGVkIFVTQiBkZXZpY2VzIGFuZCBzdWJzZXF1ZW50IG5ldHdvcmsgdHJhZmZpYy4KCk9rYXksIHRoYXQgYWxsIG1ha2VzIHNlbnNlLiBUaW1lIHRvIHJlY29yZCB0aGUgcmVzdWx0cy4gSSYjMzk7bGwgY2FsbCBgc2V0LXJlc3VsdHNgIG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDI6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTQl9VU0JORVQmIzM0OywKICAgICYjMzQ7VVNCX05FVF9EUklWRVJTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dXNibmV0X3NrYl9yZXR1cm4mIzM0OywKICAgICYjMzQ7dHhfY29tcGxldGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgcGVyLUNQVSA2NC1iaXQgbmV0d29yayBzdGF0aXN0aWNzIHVwZGF0ZSBzeW5jaHJvbml6YXRpb24gaW4gdXNibmV0X3NrYl9yZXR1cm4gYW5kIHR4X2NvbXBsZXRlIChkcml2ZXJzL25ldC91c2IvdXNibmV0LmMpLCByZXBsYWNpbmcgSVJRLXNhdmluZyB1NjRfc3RhdHMgaGVscGVycyB3aXRoIGdldF9jcHVfcHRyL3B1dF9jcHVfcHRyIHBhaXJzIGFuZCB1NjRfc3RhdHNfdXBkYXRlX2JlZ2luL2VuZC4gVGhpcyB0b3VjaGVzIHJlYWNoYWJsZSBVU0IgbmV0d29ya2luZyBkcml2ZXIgbG9naWMgdGhhdCBjYW4gYmUgdGVzdGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB3aXRoIGVtdWxhdGVkIFVTQiBuZXR3b3JrIGRldmljZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTQl9VU0JORVQmIzM0OywKICAgICYjMzQ7VVNCX05FVF9EUklWRVJTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dXNibmV0X3NrYl9yZXR1cm4mIzM0OywKICAgICYjMzQ7dHhfY29tcGxldGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgcGVyLUNQVSA2NC1iaXQgbmV0d29yayBzdGF0aXN0aWNzIHVwZGF0ZSBzeW5jaHJvbml6YXRpb24gaW4gdXNibmV0X3NrYl9yZXR1cm4gYW5kIHR4X2NvbXBsZXRlIChkcml2ZXJzL25ldC91c2IvdXNibmV0LmMpLCByZXBsYWNpbmcgSVJRLXNhdmluZyB1NjRfc3RhdHMgaGVscGVycyB3aXRoIGdldF9jcHVfcHRyL3B1dF9jcHVfcHRyIHBhaXJzIGFuZCB1NjRfc3RhdHNfdXBkYXRlX2JlZ2luL2VuZC4gVGhpcyB0b3VjaGVzIHJlYWNoYWJsZSBVU0IgbmV0d29ya2luZyBkcml2ZXIgbG9naWMgdGhhdCBjYW4gYmUgdGVzdGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB3aXRoIGVtdWxhdGVkIFVTQiBuZXR3b3JrIGRldmljZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAyOjEwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDI6MTA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBwZXItQ1BVIG5ldHdvcmsgc3RhdGlzdGljcyBhY2NvdW50aW5nIGluIGRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYywgcmVwbGFjaW5nIHRoaXNfY3B1X3B0cigpIGFuZCBpcnFzYXZlL2lycXJlc3RvcmUgNjQtYml0IHN0YXRzIHVwZGF0ZSBoZWxwZXJzIHdpdGggZ2V0X2NwdV9wdHIoKSwgdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbi9lbmQoKSwgYW5kIHB1dF9jcHVfcHRyKCkuIFRoaXMgZW5zdXJlcyBwcmVlbXB0aW9uIGlzIHByb3Blcmx5IGRpc2FibGVkIHdoaWxlIGFjY2Vzc2luZyB0aGUgcGVyLUNQVSBwb2ludGVyLlxuXG5UaGUgY2hhbmdlcyBkbyBub3QgYWxsb2NhdGUgbmV3IGJ1ZmZlcnMsIG1hbmlwdWxhdGUgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGFsdGVyIGJ1ZmZlciBsZW5ndGgvYm91bmRzIGNhbGN1bGF0aW9ucywgb3IgY29weSBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm8tbGVhayByaXNrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIEtNU0FOIGZ1enppbmcuIEFueSBwb3RlbnRpYWwgc3luY2hyb25pemF0aW9uIG9yIHByZWVtcHRpb24gYnVncyB3b3VsZCBiZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dlcnMgKERFQlVHX1BSRUVNUFQsIExPQ0tERVAsIEtBU0FOKS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDYxNTY1YWM0OWM5ODRiZTQwZDIxMjNjYTAwOWRiMmFjZDc0Mjc3NTAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCA4IDAyOjA3OjI3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jIGIvZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jCmluZGV4IGExOWVjZjcxOGYzNmEuLjNkZjcyYjBjNmJjZmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi91c2JuZXQuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC91c2IvdXNibmV0LmMKQEAgLTMyNSw4ICYjNDM7MzI1LDcgQEAgc3RhdGljIHZvaWQgX191c2JuZXRfc3RhdHVzX3N0b3BfZm9yY2Uoc3RydWN0IHVzYm5ldCAqZGV2KQogICovCiB2b2lkIHVzYm5ldF9za2JfcmV0dXJuKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlzdHJ1Y3QgcGNwdV9zd19uZXRzdGF0cyAqc3RhdHM2NCA9IHRoaXNfY3B1X3B0cihkZXYtJmd0O25ldC0mZ3Q7dHN0YXRzKTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwomIzQzOwlzdHJ1Y3QgcGNwdV9zd19uZXRzdGF0cyAqc3RhdHM2NDsKIAlpbnQJc3RhdHVzOwogCiAJaWYgKHRlc3RfYml0KEVWRU5UX1JYX1BBVVNFRCwgJmFtcDtkZXYtJmd0O2ZsYWdzKSkgewpAQCAtMzM4LDEwICYjNDM7MzM3LDEyIEBAIHZvaWQgdXNibmV0X3NrYl9yZXR1cm4oc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCWlmIChza2ItJmd0O3Byb3RvY29sID09IDApCiAJCXNrYi0mZ3Q7cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldi0mZ3Q7bmV0KTsKIAotCWZsYWdzID0gdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbl9pcnFzYXZlKCZhbXA7c3RhdHM2NC0mZ3Q7c3luY3ApOwomIzQzOwlzdGF0czY0ID0gZ2V0X2NwdV9wdHIoZGV2LSZndDtuZXQtJmd0O3RzdGF0cyk7CiYjNDM7CXU2NF9zdGF0c191cGRhdGVfYmVnaW4oJmFtcDtzdGF0czY0LSZndDtzeW5jcCk7CiAJdTY0X3N0YXRzX2luYygmYW1wO3N0YXRzNjQtJmd0O3J4X3BhY2tldHMpOwogCXU2NF9zdGF0c19hZGQoJmFtcDtzdGF0czY0LSZndDtyeF9ieXRlcywgc2tiLSZndDtsZW4pOwotCXU2NF9zdGF0c191cGRhdGVfZW5kX2lycXJlc3RvcmUoJmFtcDtzdGF0czY0LSZndDtzeW5jcCwgZmxhZ3MpOwomIzQzOwl1NjRfc3RhdHNfdXBkYXRlX2VuZCgmYW1wO3N0YXRzNjQtJmd0O3N5bmNwKTsKJiM0MzsJcHV0X2NwdV9wdHIoZGV2LSZndDtuZXQtJmd0O3RzdGF0cyk7CiAKIAluZXRpZl9kYmcoZGV2LCByeF9zdGF0dXMsIGRldi0mZ3Q7bmV0LCAmIzM0OyZsdDsgcngsIGxlbiAlenUsIHR5cGUgMHgleFxuJiMzNDssCiAJCSAgc2tiLSZndDtsZW4gJiM0Mzsgc2l6ZW9mKHN0cnVjdCBldGhoZHIpLCBza2ItJmd0O3Byb3RvY29sKTsKQEAgLTEyOTgsMTMgJiM0MzsxMjk5LDE0IEBAIHN0YXRpYyB2b2lkIHR4X2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVyYikKIAlzdHJ1Y3QgdXNibmV0CQkqZGV2ID0gZW50cnktJmd0O2RldjsKIAogCWlmICh1cmItJmd0O3N0YXR1cyA9PSAwKSB7Ci0JCXN0cnVjdCBwY3B1X3N3X25ldHN0YXRzICpzdGF0czY0ID0gdGhpc19jcHVfcHRyKGRldi0mZ3Q7bmV0LSZndDt0c3RhdHMpOwotCQl1bnNpZ25lZCBsb25nIGZsYWdzOwomIzQzOwkJc3RydWN0IHBjcHVfc3dfbmV0c3RhdHMgKnN0YXRzNjQ7CiAKLQkJZmxhZ3MgPSB1NjRfc3RhdHNfdXBkYXRlX2JlZ2luX2lycXNhdmUoJmFtcDtzdGF0czY0LSZndDtzeW5jcCk7CiYjNDM7CQlzdGF0czY0ID0gZ2V0X2NwdV9wdHIoZGV2LSZndDtuZXQtJmd0O3RzdGF0cyk7CiYjNDM7CQl1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKCZhbXA7c3RhdHM2NC0mZ3Q7c3luY3ApOwogCQl1NjRfc3RhdHNfYWRkKCZhbXA7c3RhdHM2NC0mZ3Q7dHhfcGFja2V0cywgZW50cnktJmd0O3BhY2tldHMpOwogCQl1NjRfc3RhdHNfYWRkKCZhbXA7c3RhdHM2NC0mZ3Q7dHhfYnl0ZXMsIGVudHJ5LSZndDtsZW5ndGgpOwotCQl1NjRfc3RhdHNfdXBkYXRlX2VuZF9pcnFyZXN0b3JlKCZhbXA7c3RhdHM2NC0mZ3Q7c3luY3AsIGZsYWdzKTsKJiM0MzsJCXU2NF9zdGF0c191cGRhdGVfZW5kKCZhbXA7c3RhdHM2NC0mZ3Q7c3luY3ApOwomIzQzOwkJcHV0X2NwdV9wdHIoZGV2LSZndDtuZXQtJmd0O3RzdGF0cyk7CiAJfSBlbHNlIHsKIAkJZGV2LSZndDtuZXQtJmd0O3N0YXRzLnR4X2Vycm9ycyYjNDM7JiM0Mzs7CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAyOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3MTYKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA0ODQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgS01TQU4gRnV6emluZyBOZWVkcyoqCgpPa2F5LCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgdGhpcyBwYXRjaCBhbmQgZGVjaWRlIGlmIHdlIG5lZWQgdG8gY29uc2lkZXIgS01TQU4gZnV6emluZy4gSXQgYXBwZWFycyB0aGUgY2hhbmdlcyBhcmUgY29uZmluZWQgdG8gYGRyaXZlcnMvbmV0L3VzYi91c2JuZXQuY2AuIFNwZWNpZmljYWxseSwgdGhleSYjMzk7dmUgdG91Y2hlZCB0aGUgYHVzYm5ldF9za2JfcmV0dXJuYCBhbmQgYHR4X2NvbXBsZXRlYCBmdW5jdGlvbnMuCgpJIGNhbiBzZWUgd2hhdCYjMzk7cyBjaGFuZ2VkIGluIHRoZSBjb2RlOiB0aGV5JiMzOTt2ZSBtb3ZlZCBmcm9tIHVzaW5nIGB0aGlzX2NwdV9wdHJgIHdpdGggaW50ZXJydXB0IHNhdmUvcmVzdG9yZSBhcm91bmQgdGhlIHN0YXRzIHVwZGF0ZSwgdG8gdXNpbmcgYGdldF9jcHVfcHRyYC9gcHV0X2NwdV9wdHJgIGFuZCB0aGUgbmV3ZXIgYHU2NF9zdGF0c191cGRhdGVfYmVnaW5gL2BlbmRgIGZ1bmN0aW9ucy4gU28sIHRoZXkmIzM5O3JlIGV4cGxpY2l0bHkgb2J0YWluaW5nIHRoZSBwZXItQ1BVIHN0YXRpc3RpY3MgcG9pbnRlciBub3cuIEl0JiMzOTtzIGEgc3RyYWlnaHRmb3J3YXJkIGNoYW5nZSwgbGlrZWx5IGFpbWVkIGF0IGltcHJvdmluZyBwZXJmb3JtYW5jZSBvciBhbGlnbmluZyB3aXRoIGEgbmV3ZXIgbG9ja2luZyBzY2hlbWUgd2l0aGluIHRoZSBrZXJuZWwgc3RhdGlzdGljcyBpbmZyYXN0cnVjdHVyZS4gVGhlIG9sZCBjb2RlIHdhczogb2J0YWluaW5nIHRoZSBwZXItY3B1IHZhcmlhYmxlICpiZWZvcmUqIHNhdmluZyBpbnRlcnJ1cHRzLCB1cGRhdGluZywgYW5kIHJlc3RvcmluZyBpbnRlcnJ1cHRzIHRvIGJlIHNhZmUuIFRoZSBuZXcgY29kZSBpczogb2J0YWluaW5nIHRoZSBwZXItY3B1IHZhcmlhYmxlLCB1cGRhdGluZyBpdCwgYW5kICp0aGVuKiByZXR1cm5pbmcgdGhlIGNwdSB2YXJpYWJsZS4KCkdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIGNoYW5nZSwgaXQmIzM5O3MgYSByZWZhY3RvcmluZywgdG91Y2hpbmcgb24gc3luY2hyb25pemF0aW9uIGFuZCBwZXItQ1BVIGRhdGEuIEl0JiMzOTtzIGxpa2VseSB0aGF0IGl0JiMzOTtzIG9rYXksIGJ1dCBpdCBkb2VzIHRvdWNoIGEgc2Vuc2l0aXZlIGFyZWEsIGFuZCB0aGVzZSBraW5kcyBvZiBjaGFuZ2VzIGNhbiBhbHdheXMgaW50cm9kdWNlIHN1YnRsZSBjb25jdXJyZW5jeSBpc3N1ZXMuIEl0JiMzOTtzIHdvcnRoIGEgcXVpY2sgY2hlY2sgd2l0aCBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAganVzdCB0byBnZXQgYSBicm9hZGVyIHZpZXcgb2YgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gYGRyaXZlcnMvbmV0L3VzYi91c2JuZXQuY2AgdG8gbG9vayBmb3IgYW55IHJlbGF0ZWQgaXNzdWVzLiBXaGlsZSB0aGUgY2hhbmdlIHNlZW1zIHJlYXNvbmFibGUgb24gaXRzIG93biwgYSBxdWljayBjb250ZXh0dWFsIGluc3BlY3Rpb24gaXMgYWx3YXlzIGEgZ29vZCBwcmFjdGljZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDI6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvdXNibmV0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDMyMDpcdH1cbiAzMjE6XHRcbiAzMjI6XHQvKiBQYXNzZXMgdGhpcyBwYWNrZXQgdXAgdGhlIHN0YWNrLCB1cGRhdGluZyBpdHMgYWNjb3VudGluZy5cbiAzMjM6XHQgKiBTb21lIGxpbmsgcHJvdG9jb2xzIGJhdGNoIHBhY2tldHMsIHNvIHRoZWlyIHJ4X2ZpeHVwIHBhdGhzXG4gMzI0Olx0ICogY2FuIHJldHVybiBjbG9uZXMgYXMgd2VsbCBhcyBqdXN0IG1vZGlmeSB0aGUgb3JpZ2luYWwgc2tiLlxuIDMyNTpcdCAqL1xuIDMyNjpcdHZvaWQgdXNibmV0X3NrYl9yZXR1cm4oc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIDMyNzpcdHtcbiAzMjg6XHRcdHN0cnVjdCBwY3B1X3N3X25ldHN0YXRzICpzdGF0czY0O1xuIDMyOTpcdFx0aW50XHRzdGF0dXM7XG4gMzMwOlx0XG4gMzMxOlx0XHRpZiAodGVzdF9iaXQoRVZFTlRfUlhfUEFVU0VELCBcdTAwMjZkZXYtXHUwMDNlZmxhZ3MpKSB7XG4gMzMyOlx0XHRcdHNrYl9xdWV1ZV90YWlsKFx1MDAyNmRldi1cdTAwM2VyeHFfcGF1c2UsIHNrYik7XG4gMzMzOlx0XHRcdHJldHVybjtcbiAzMzQ6XHRcdH1cbiAzMzU6XHRcbiAzMzY6XHRcdC8qIG9ubHkgdXBkYXRlIGlmIHVuc2V0IHRvIGFsbG93IG1pbmlkcml2ZXIgcnhfZml4dXAgb3ZlcnJpZGUgKi9cbiAzMzc6XHRcdGlmIChza2ItXHUwMDNlcHJvdG9jb2wgPT0gMClcbiAzMzg6XHRcdFx0c2tiLVx1MDAzZXByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBkZXYtXHUwMDNlbmV0KTtcbiAzMzk6XHRcbiAzNDA6XHRcdHN0YXRzNjQgPSBnZXRfY3B1X3B0cihkZXYtXHUwMDNlbmV0LVx1MDAzZXRzdGF0cyk7XG4gMzQxOlx0XHR1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKFx1MDAyNnN0YXRzNjQtXHUwMDNlc3luY3ApO1xuIDM0MjpcdFx0dTY0X3N0YXRzX2luYyhcdTAwMjZzdGF0czY0LVx1MDAzZXJ4X3BhY2tldHMpO1xuIDM0MzpcdFx0dTY0X3N0YXRzX2FkZChcdTAwMjZzdGF0czY0LVx1MDAzZXJ4X2J5dGVzLCBza2ItXHUwMDNlbGVuKTtcbiAzNDQ6XHRcdHU2NF9zdGF0c191cGRhdGVfZW5kKFx1MDAyNnN0YXRzNjQtXHUwMDNlc3luY3ApO1xuIDM0NTpcdFx0cHV0X2NwdV9wdHIoZGV2LVx1MDAzZW5ldC1cdTAwM2V0c3RhdHMpO1xuIDM0NjpcdFxuIDM0NzpcdFx0bmV0aWZfZGJnKGRldiwgcnhfc3RhdHVzLCBkZXYtXHUwMDNlbmV0LCBcJiMzNDtcdTAwM2MgcngsIGxlbiAlenUsIHR5cGUgMHgleFxcblwmIzM0OyxcbiAzNDg6XHRcdFx0ICBza2ItXHUwMDNlbGVuICYjNDM7IHNpemVvZihzdHJ1Y3QgZXRoaGRyKSwgc2tiLVx1MDAzZXByb3RvY29sKTtcbiAzNDk6XHRcdG1lbXNldChza2ItXHUwMDNlY2IsIDAsIHNpemVvZihzdHJ1Y3Qgc2tiX2RhdGEpKTtcbiAzNTA6XHRcbiAzNTE6XHRcdGlmIChza2JfZGVmZXJfcnhfdGltZXN0YW1wKHNrYikpXG4gMzUyOlx0XHRcdHJldHVybjtcbiAzNTM6XHRcbiAzNTQ6XHRcdHN0YXR1cyA9IG5ldGlmX3J4IChza2IpO1xuIDM1NTpcdFx0aWYgKHN0YXR1cyAhPSBORVRfUlhfU1VDQ0VTUylcbiAzNTY6XHRcdFx0bmV0aWZfZGJnKGRldiwgcnhfZXJyLCBkZXYtXHUwMDNlbmV0LFxuIDM1NzpcdFx0XHRcdCAgXCYjMzQ7bmV0aWZfcnggc3RhdHVzICVkXFxuXCYjMzQ7LCBzdGF0dXMpO1xuIDM1ODpcdH1cbiAzNTk6XHRFWFBPUlRfU1lNQk9MX0dQTCh1c2JuZXRfc2tiX3JldHVybik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAyOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzMDYKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQW5hbHl6aW5nIHRoZSBJbXBvcnRhbmNlIG9mIGB0eF9jb21wbGV0ZWAqKgoKQWxyaWdodCwgc28gd2UmIzM5O3ZlIGNvdmVyZWQgdGhlIGJhc2ljcywgYnV0IG5vdyBJIG5lZWQgdG8gZGlnIGRlZXBlci4gSSYjMzk7bSB0aGlua2luZywgbGV0JiMzOTtzIG5vdCBqdXN0IGdsb3NzIG92ZXIgdGhpbmdzIOKAkyBpdCYjMzk7cyBjcnVjaWFsIHdlIGFsc28gdGhvcm91Z2hseSBleGFtaW5lIHRoZSBgdHhfY29tcGxldGVgIGZpZWxkIG9yIGZ1bmN0aW9uLCB3aGF0ZXZlciBpdCYjMzk7cyBjYWxsZWQgaW4gdGhpcyBzcGVjaWZpYyBjb250ZXh0LiBVbmRlcnN0YW5kaW5nIHRoZSBudWFuY2VzIG9mIHRyYW5zYWN0aW9uIGNvbXBsZXRpb24gaXMgYWJzb2x1dGVseSBjcml0aWNhbC4gSSBuZWVkIHRvIGtub3c6IHdoYXQgZXhhY3RseSBkb2VzIGl0IHNpZ25hbD8gSXMgaXQgYSBiaW5hcnkgZmxhZywgYSBzdGF0dXMgY29kZSwgb3Igc29tZXRoaW5nIG1vcmUgY29tcGxleD8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvZiBpdHMgZGlmZmVyZW50IHN0YXRlcz8gRG9lcyBpdCBtZWFuIHRoZSB0cmFuc2FjdGlvbiBpcyBmaW5hbGl6ZWQsIGNvbW1pdHRlZCwgcm9sbGVkIGJhY2ssIG9yIHN0aWxsIHBlbmRpbmc/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGVkZ2UgY2FzZXMgb3IgcmFjZSBjb25kaXRpb25zIGFzc29jaWF0ZWQgd2l0aCBpdHMgc3RhdGU/CgpGcmFua2x5LCBJIGNhbiYjMzk7dCBwcm9jZWVkIGZ1cnRoZXIgdW50aWwgSSBoYXZlIGEgcm9jay1zb2xpZCBncmFzcCBvZiB3aGF0IGB0eF9jb21wbGV0ZWAgcmVwcmVzZW50cyBhbmQgaG93IGl0IGJlaGF2ZXMuIEl0cyBjaGFyYWN0ZXJpc3RpY3MgYXJlIGdvaW5nIHRvIGJlIGZ1bmRhbWVudGFsIHRvIHRoZSBkZXNpZ24gb2YgYW55IHN5c3RlbSBvciBzb2x1dGlvbiBoZXJlLiBJIG5lZWQgdG8gYmUgYWJsZSB0byBwcmVkaWN0IGl0cyBiZWhhdmlvciBhbmQgaXRzIHBvdGVudGlhbCBpbXBhY3QuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvciBpbiB0aGUgY29udGV4dCBvZiBvdXIgcmVxdWlyZW1lbnRzLiBUaGlzIGNvdWxkIGhhdmUgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zLCBzZWN1cml0eSByYW1pZmljYXRpb25zLCBvciBldmVuIGltcGxpY2F0aW9ucyBmb3IgZGF0YSBpbnRlZ3JpdHkuIEEgdGhvcm91Z2ggdW5kZXJzdGFuZGluZyBvZiBgdHhfY29tcGxldGVgIGlzIGVzc2VudGlhbC4gV2UgY2FuJiMzOTt0IGFmZm9yZCB0byBvdmVybG9vayBhbnkgZGV0YWlscyBhdCB0aGlzIHN0YWdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMjoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi91c2JuZXQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyOTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTI5MDpcdFx0XHRuZXRkZXZfZGJnKGRldi1cdTAwM2VuZXQsIFwmIzM0O2tldmVudCBkb25lLCBmbGFncyA9IDB4JWx4XFxuXCYjMzQ7LCBkZXYtXHUwMDNlZmxhZ3MpO1xuMTI5MTpcdH1cbjEyOTI6XHRcbjEyOTM6XHQvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuMTI5NDpcdFxuMTI5NTpcdHN0YXRpYyB2b2lkIHR4X2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVyYilcbjEyOTY6XHR7XG4xMjk3Olx0XHRzdHJ1Y3Qgc2tfYnVmZlx0XHQqc2tiID0gKHN0cnVjdCBza19idWZmICopIHVyYi1cdTAwM2Vjb250ZXh0O1xuMTI5ODpcdFx0c3RydWN0IHNrYl9kYXRhXHRcdCplbnRyeSA9IChzdHJ1Y3Qgc2tiX2RhdGEgKikgc2tiLVx1MDAzZWNiO1xuMTI5OTpcdFx0c3RydWN0IHVzYm5ldFx0XHQqZGV2ID0gZW50cnktXHUwMDNlZGV2O1xuMTMwMDpcdFxuMTMwMTpcdFx0aWYgKHVyYi1cdTAwM2VzdGF0dXMgPT0gMCkge1xuMTMwMjpcdFx0XHRzdHJ1Y3QgcGNwdV9zd19uZXRzdGF0cyAqc3RhdHM2NDtcbjEzMDM6XHRcbjEzMDQ6XHRcdFx0c3RhdHM2NCA9IGdldF9jcHVfcHRyKGRldi1cdTAwM2VuZXQtXHUwMDNldHN0YXRzKTtcbjEzMDU6XHRcdFx0dTY0X3N0YXRzX3VwZGF0ZV9iZWdpbihcdTAwMjZzdGF0czY0LVx1MDAzZXN5bmNwKTtcbjEzMDY6XHRcdFx0dTY0X3N0YXRzX2FkZChcdTAwMjZzdGF0czY0LVx1MDAzZXR4X3BhY2tldHMsIGVudHJ5LVx1MDAzZXBhY2tldHMpO1xuMTMwNzpcdFx0XHR1NjRfc3RhdHNfYWRkKFx1MDAyNnN0YXRzNjQtXHUwMDNldHhfYnl0ZXMsIGVudHJ5LVx1MDAzZWxlbmd0aCk7XG4xMzA4Olx0XHRcdHU2NF9zdGF0c191cGRhdGVfZW5kKFx1MDAyNnN0YXRzNjQtXHUwMDNlc3luY3ApO1xuMTMwOTpcdFx0XHRwdXRfY3B1X3B0cihkZXYtXHUwMDNlbmV0LVx1MDAzZXRzdGF0cyk7XG4xMzEwOlx0XHR9IGVsc2Uge1xuMTMxMTpcdFx0XHRkZXYtXHUwMDNlbmV0LVx1MDAzZXN0YXRzLnR4X2Vycm9ycyYjNDM7JiM0Mzs7XG4xMzEyOlx0XG4xMzEzOlx0XHRcdHN3aXRjaCAodXJiLVx1MDAzZXN0YXR1cykge1xuMTMxNDpcdFx0XHRjYXNlIC1FUElQRTpcbjEzMTU6XHRcdFx0XHR1c2JuZXRfZGVmZXJfa2V2ZW50KGRldiwgRVZFTlRfVFhfSEFMVCk7XG4xMzE2Olx0XHRcdFx0YnJlYWs7XG4xMzE3Olx0XG4xMzE4Olx0XHRcdC8qIHNvZnR3YXJlLWRyaXZlbiBpbnRlcmZhY2Ugc2h1dGRvd24gKi9cbjEzMTk6XHRcdFx0Y2FzZSAtRUNPTk5SRVNFVDpcdFx0Ly8gYXN5bmMgdW5saW5rXG4xMzIwOlx0XHRcdGNhc2UgLUVTSFVURE9XTjpcdFx0Ly8gaGFyZHdhcmUgZ29uZVxuMTMyMTpcdFx0XHRcdGJyZWFrO1xuMTMyMjpcdFxuMTMyMzpcdFx0XHQvKiBsaWtlIHJ4LCB0eCBnZXRzIGNvbnRyb2xsZXIgaS9vIGZhdWx0cyBkdXJpbmcgaHViX3dxXG4xMzI0Olx0XHRcdCAqIGRlbGF5cyBhbmQgc28gaXQgdXNlcyB0aGUgc2FtZSB0aHJvdHRsaW5nIG1lY2hhbmlzbS5cbjEzMjU6XHRcdFx0ICovXG4xMzI2Olx0XHRcdGNhc2UgLUVQUk9UTzpcbjEzMjc6XHRcdFx0Y2FzZSAtRVRJTUU6XG4xMzI4Olx0XHRcdGNhc2UgLUVJTFNFUTpcbjEzMjk6XHRcdFx0XHR1c2JfbWFya19sYXN0X2J1c3koZGV2LVx1MDAzZXVkZXYpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMjoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MjkyCgkJCQkJCQlvdXRwdXQ6IDE4OQoJCQkJCQkJdGhvdWdodHM6IDM1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgQ29kZSBDaGFuZ2UqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY2hhbmdlIGFuZCBpdCBzZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLiBXZSYjMzk7cmUgcmVwbGFjaW5nIHRoZSBvbGRlciBgdGhpc19jcHVfcHRyKC4uLilgIGFuZCB0aGUgYHU2NF9zdGF0c191cGRhdGVfYmVnaW5faXJxc2F2ZS9lbmRfaXJxcmVzdG9yZWAgZnVuY3Rpb25zIHdpdGggdGhlIG5ld2VyIGBnZXRfY3B1X3B0ciguLi4pYCwgYHU2NF9zdGF0c191cGRhdGVfYmVnaW4vZW5kYCwgYW5kIGBwdXRfY3B1X3B0ciguLi4pYCBhcHByb2FjaC4gVGhlIGtleSBkaWZmZXJlbmNlIEkgc2VlIGlzIHRoYXQgYHRoaXNfY3B1X3B0cmAgaGFzIHRoZSBwb3RlbnRpYWwgdG8gY2F1c2UgaXNzdWVzIHdpdGggcHJlZW1wdGlvbiBvciBTTVAgaWYgaXQmIzM5O3MgdXNlZCBpbiBhIHByZWVtcHRpYmxlIGNvbnRleHQgYW5kIGNvdWxkIGV2ZW4gdHJpZ2dlciBgbWlnaHRfc2xlZXAoKWAuICBgZ2V0X2NwdV9wdHJgLCBvbiB0aGUgb3RoZXIgaGFuZCwgZXhwbGljaXRseSBkaXNhYmxlcyBwcmVlbXB0aW9uIHdpdGggYHByZWVtcHRfZGlzYWJsZSgpYCBhbmQgZ2l2ZXMgdXMgdGhlIHBlci1DUFUgcG9pbnRlciwgYW5kIHRoZW4gcmUtZW5hYmxlcyBpdCB3aXRoIHRoZSBtYXRjaGluZyBgcHV0X2NwdV9wdHIoKWAuCgpNeSBmaXJzdCBpbW1lZGlhdGUgY29uY2VybiwgYXMgYWx3YXlzLCBpcyB3aGV0aGVyIHRoaXMgaW50cm9kdWNlcyBhbnkgc29ydCBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMgb3IgcG90ZW50aWFsIGluZm9ybWF0aW9uIGxlYWtzLiBMZXQmIzM5O3MgYnJlYWsgdGhhdCBkb3duOgoqICAgSSBjYW4gc2VlIHRoYXQgd2UmIzM5O3JlICpub3QqIG1ha2luZyBhbnkgbmV3IG1lbW9yeSBhbGxvY2F0aW9ucy4KKiAgIFdlJiMzOTtyZSAqbm90KiBjb3B5aW5nIGFueSBrZXJuZWwgZGF0YSB0byB1c2VyIHNwYWNlLCBzbyB0aGF0JiMzOTtzIGEgcGx1cy4KKiAgIEkgZG9uJiMzOTt0IHNlZSBhbnl0aGluZyB0aGF0IHdvdWxkIHN1Z2dlc3Qgd2UmIzM5O3JlIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuCiogICBBbmQsIG1vc3QgaW1wb3J0YW50bHksIHRoZXJlJiMzOTtzIG5vIGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgZGVwZW5kcyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4KClNvLCBpdCYjMzk7cyBzZWVtaW5nIGxpa2UgdGhpcyBpcyBwdXJlbHkgYSBjaGFuZ2UgZm9yIHBlci1DUFUgc3RhdHMgc3luY2hyb25pemF0aW9uIGFuZCBwcmVlbXB0aW9uIHNhZmV0eS4gSXQmIzM5O3MgbG9va2luZyBnb29kIGZyb20gYW4gdW5pbml0aWFsaXplZCBtZW1vcnkvaW5mby1sZWFrIHBlcnNwZWN0aXZlLCBzbyBgTmVlZHNLTVNBTmAgaXMgZGVmaW5pdGVseSBgZmFsc2VgLgoKTm93LCBsZXQmIzM5O3Mgc3RlcCBiYWNrIGFuZCBjb25zaWRlciBob3cgdGhpcyByZWxhdGVzIHRvIG91ciB1c3VhbCBkZWJ1Z2dpbmcgdG9vbHMgbGlrZSBLQVNBTiBhbmQgS01TQU4uIFdpdGggdGhlIGNoYW5nZXMgYmVpbmcgcHJpbWFyaWx5IGFib3V0IHByZWVtcHRpb24sIHBlci1DUFUgYWNjZXNzIHN5bmNocm9uaXphdGlvbiB1c2luZyBgZ2V0X2NwdV9wdHJgIC8gYHB1dF9jcHVfcHRyYCBhbmQgYHU2NF9zdGF0c191cGRhdGVfYmVnaW5gL2BlbmRgLCBhbnkgc3luY2hyb25pemF0aW9uIG9yIGNvbmN1cnJlbmN5IGlzc3VlcyAob3IgcHJlZW1wdGlibGUgY29udGV4dCB2aW9sYXRpb25zKSBhcmUgc29tZXRoaW5nIHRoYXQgYXJlIHdlbGwgaGFuZGxlZCBieSB0aGUgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2VycyAoREVCVUdfUFJFRU1QVCwgbG9ja2RlcCwgZXRjLikuIFRoaXMgaXMgYSBrbm93biBhbmQgd2VsbC11bmRlcnN0b29kIGFyZWEgZm9yIHBvdGVudGlhbCBpc3N1ZXMuIFRoZSBtYWluIGZvY3VzIG9mIEtNU0FOIGlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIGFuZCBsZWFrcyB0byB1c2VyIHNwYWNlLiBTaW5jZSB0aGlzIHBhdGNoIGRvZXNuJiMzOTt0IGludm9sdmUgYW55IG1lbW9yeSBhbGxvY2F0aW9uLCBjb3B5aW5nLCBmb3JtYXR0aW5nLCBvciByZWFkaW5nIG9mIHVuaW5pdGlhbGl6ZWQgZGF0YSwgaXQgaXMgbm90IHNvbWV0aGluZyB0aGF0IHdvdWxkIHRyaWdnZXIgYSBLTVNBTiB3YXJuaW5nLgoKVGhlcmVmb3JlLCBJJiMzOTttIGNvbmZpZGVudCBpbiBzZXR0aW5nIHRoZSByZXN1bHRzIGFjY29yZGluZ2x5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMjoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBwZXItQ1BVIG5ldHdvcmsgc3RhdGlzdGljcyBhY2NvdW50aW5nIGluIGRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYywgcmVwbGFjaW5nIHRoaXNfY3B1X3B0cigpIGFuZCBpcnFzYXZlL2lycXJlc3RvcmUgNjQtYml0IHN0YXRzIHVwZGF0ZSBoZWxwZXJzIHdpdGggZ2V0X2NwdV9wdHIoKSwgdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbi9lbmQoKSwgYW5kIHB1dF9jcHVfcHRyKCkuIFRoaXMgZW5zdXJlcyBwcmVlbXB0aW9uIGlzIHByb3Blcmx5IGRpc2FibGVkIHdoaWxlIGFjY2Vzc2luZyB0aGUgcGVyLUNQVSBwb2ludGVyLlxuXG5UaGUgY2hhbmdlcyBkbyBub3QgYWxsb2NhdGUgbmV3IGJ1ZmZlcnMsIG1hbmlwdWxhdGUgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGFsdGVyIGJ1ZmZlciBsZW5ndGgvYm91bmRzIGNhbGN1bGF0aW9ucywgb3IgY29weSBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm8tbGVhayByaXNrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIEtNU0FOIGZ1enppbmcuIEFueSBwb3RlbnRpYWwgc3luY2hyb25pemF0aW9uIG9yIHByZWVtcHRpb24gYnVncyB3b3VsZCBiZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dlcnMgKERFQlVHX1BSRUVNUFQsIExPQ0tERVAsIEtBU0FOKS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHBlci1DUFUgbmV0d29yayBzdGF0aXN0aWNzIGFjY291bnRpbmcgaW4gZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jLCByZXBsYWNpbmcgdGhpc19jcHVfcHRyKCkgYW5kIGlycXNhdmUvaXJxcmVzdG9yZSA2NC1iaXQgc3RhdHMgdXBkYXRlIGhlbHBlcnMgd2l0aCBnZXRfY3B1X3B0cigpLCB1NjRfc3RhdHNfdXBkYXRlX2JlZ2luL2VuZCgpLCBhbmQgcHV0X2NwdV9wdHIoKS4gVGhpcyBlbnN1cmVzIHByZWVtcHRpb24gaXMgcHJvcGVybHkgZGlzYWJsZWQgd2hpbGUgYWNjZXNzaW5nIHRoZSBwZXItQ1BVIHBvaW50ZXIuXG5cblRoZSBjaGFuZ2VzIGRvIG5vdCBhbGxvY2F0ZSBuZXcgYnVmZmVycywgbWFuaXB1bGF0ZSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgYWx0ZXIgYnVmZmVyIGxlbmd0aC9ib3VuZHMgY2FsY3VsYXRpb25zLCBvciBjb3B5IGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mby1sZWFrIHJpc2tzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgS01TQU4gZnV6emluZy4gQW55IHBvdGVudGlhbCBzeW5jaHJvbml6YXRpb24gb3IgcHJlZW1wdGlvbiBidWdzIHdvdWxkIGJlIGNvdmVyZWQgYnkgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2VycyAoREVCVUdfUFJFRU1QVCwgTE9DS0RFUCwgS0FTQU4pLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMjowNzoyNy44NjYxODQ5MloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4OTE4MzY5NDA2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJVU0JfVVNCTkVUXCIsXG4gICAgXCJVU0JfTkVUX0RSSVZFUlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ1c2JuZXRfc2tiX3JldHVyblwiLFxuICAgIFwidHhfY29tcGxldGVcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHBlci1DUFUgbmV0d29yayBzdGF0aXN0aWNzIGFjY291bnRpbmcgaW4gZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jLCByZXBsYWNpbmcgdGhpc19jcHVfcHRyKCkgYW5kIGlycXNhdmUvaXJxcmVzdG9yZSA2NC1iaXQgc3RhdHMgdXBkYXRlIGhlbHBlcnMgd2l0aCBnZXRfY3B1X3B0cigpLCB1NjRfc3RhdHNfdXBkYXRlX2JlZ2luL2VuZCgpLCBhbmQgcHV0X2NwdV9wdHIoKS4gVGhpcyBlbnN1cmVzIHByZWVtcHRpb24gaXMgcHJvcGVybHkgZGlzYWJsZWQgd2hpbGUgYWNjZXNzaW5nIHRoZSBwZXItQ1BVIHBvaW50ZXIuXFxuXFxuVGhlIGNoYW5nZXMgZG8gbm90IGFsbG9jYXRlIG5ldyBidWZmZXJzLCBtYW5pcHVsYXRlIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBhbHRlciBidWZmZXIgbGVuZ3RoL2JvdW5kcyBjYWxjdWxhdGlvbnMsIG9yIGNvcHkga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvLWxlYWsgcmlza3MgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBLTVNBTiBmdXp6aW5nLiBBbnkgcG90ZW50aWFsIHN5bmNocm9uaXphdGlvbiBvciBwcmVlbXB0aW9uIGJ1Z3Mgd291bGQgYmUgY292ZXJlZCBieSBzdGFuZGFyZCBrZXJuZWwgZGVidWdnZXJzIChERUJVR19QUkVFTVBULCBMT0NLREVQLCBLQVNBTikuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgcGVyLUNQVSA2NC1iaXQgbmV0d29yayBzdGF0aXN0aWNzIHVwZGF0ZSBzeW5jaHJvbml6YXRpb24gaW4gdXNibmV0X3NrYl9yZXR1cm4gYW5kIHR4X2NvbXBsZXRlIChkcml2ZXJzL25ldC91c2IvdXNibmV0LmMpLCByZXBsYWNpbmcgSVJRLXNhdmluZyB1NjRfc3RhdHMgaGVscGVycyB3aXRoIGdldF9jcHVfcHRyL3B1dF9jcHVfcHRyIHBhaXJzIGFuZCB1NjRfc3RhdHNfdXBkYXRlX2JlZ2luL2VuZC4gVGhpcyB0b3VjaGVzIHJlYWNoYWJsZSBVU0IgbmV0d29ya2luZyBkcml2ZXIgbG9naWMgdGhhdCBjYW4gYmUgdGVzdGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB3aXRoIGVtdWxhdGVkIFVTQiBuZXR3b3JrIGRldmljZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAyOjA3OjI3Ljg2NjE5MDEyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjY3MjAxOTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA2MTU2NWFjNDljOTg0YmU0MGQyMTIzY2EwMDlkYjJhY2Q3NDI3NzUwXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgU2VwIDggMDI6MDc6MjcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jIGIvZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jXFxuaW5kZXggYTE5ZWNmNzE4ZjM2YS4uM2RmNzJiMGM2YmNmYyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC91c2IvdXNibmV0LmNcXG4rKysgYi9kcml2ZXJzL25ldC91c2IvdXNibmV0LmNcXG5AQCAtMzI1LDggKzMyNSw3IEBAIHN0YXRpYyB2b2lkIF9fdXNibmV0X3N0YXR1c19zdG9wX2ZvcmNlKHN0cnVjdCB1c2JuZXQgKmRldilcXG4gICovXFxuIHZvaWQgdXNibmV0X3NrYl9yZXR1cm4oc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiB7XFxuLVxcdHN0cnVjdCBwY3B1X3N3X25ldHN0YXRzICpzdGF0czY0ID0gdGhpc19jcHVfcHRyKGRldi1cXHUwMDNlbmV0LVxcdTAwM2V0c3RhdHMpO1xcbi1cXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbitcXHRzdHJ1Y3QgcGNwdV9zd19uZXRzdGF0cyAqc3RhdHM2NDtcXG4gXFx0aW50XFx0c3RhdHVzO1xcbiBcXG4gXFx0aWYgKHRlc3RfYml0KEVWRU5UX1JYX1BBVVNFRCwgXFx1MDAyNmRldi1cXHUwMDNlZmxhZ3MpKSB7XFxuQEAgLTMzOCwxMCArMzM3LDEyIEBAIHZvaWQgdXNibmV0X3NrYl9yZXR1cm4oc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXHRpZiAoc2tiLVxcdTAwM2Vwcm90b2NvbCA9PSAwKVxcbiBcXHRcXHRza2ItXFx1MDAzZXByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBkZXYtXFx1MDAzZW5ldCk7XFxuIFxcbi1cXHRmbGFncyA9IHU2NF9zdGF0c191cGRhdGVfYmVnaW5faXJxc2F2ZShcXHUwMDI2c3RhdHM2NC1cXHUwMDNlc3luY3ApO1xcbitcXHRzdGF0czY0ID0gZ2V0X2NwdV9wdHIoZGV2LVxcdTAwM2VuZXQtXFx1MDAzZXRzdGF0cyk7XFxuK1xcdHU2NF9zdGF0c191cGRhdGVfYmVnaW4oXFx1MDAyNnN0YXRzNjQtXFx1MDAzZXN5bmNwKTtcXG4gXFx0dTY0X3N0YXRzX2luYyhcXHUwMDI2c3RhdHM2NC1cXHUwMDNlcnhfcGFja2V0cyk7XFxuIFxcdHU2NF9zdGF0c19hZGQoXFx1MDAyNnN0YXRzNjQtXFx1MDAzZXJ4X2J5dGVzLCBza2ItXFx1MDAzZWxlbik7XFxuLVxcdHU2NF9zdGF0c191cGRhdGVfZW5kX2lycXJlc3RvcmUoXFx1MDAyNnN0YXRzNjQtXFx1MDAzZXN5bmNwLCBmbGFncyk7XFxuK1xcdHU2NF9zdGF0c191cGRhdGVfZW5kKFxcdTAwMjZzdGF0czY0LVxcdTAwM2VzeW5jcCk7XFxuK1xcdHB1dF9jcHVfcHRyKGRldi1cXHUwMDNlbmV0LVxcdTAwM2V0c3RhdHMpO1xcbiBcXG4gXFx0bmV0aWZfZGJnKGRldiwgcnhfc3RhdHVzLCBkZXYtXFx1MDAzZW5ldCwgXFxcIlxcdTAwM2MgcngsIGxlbiAlenUsIHR5cGUgMHgleFxcXFxuXFxcIixcXG4gXFx0XFx0ICBza2ItXFx1MDAzZWxlbiArIHNpemVvZihzdHJ1Y3QgZXRoaGRyKSwgc2tiLVxcdTAwM2Vwcm90b2NvbCk7XFxuQEAgLTEyOTgsMTMgKzEyOTksMTQgQEAgc3RhdGljIHZvaWQgdHhfY29tcGxldGUoc3RydWN0IHVyYiAqdXJiKVxcbiBcXHRzdHJ1Y3QgdXNibmV0XFx0XFx0KmRldiA9IGVudHJ5LVxcdTAwM2VkZXY7XFxuIFxcbiBcXHRpZiAodXJiLVxcdTAwM2VzdGF0dXMgPT0gMCkge1xcbi1cXHRcXHRzdHJ1Y3QgcGNwdV9zd19uZXRzdGF0cyAqc3RhdHM2NCA9IHRoaXNfY3B1X3B0cihkZXYtXFx1MDAzZW5ldC1cXHUwMDNldHN0YXRzKTtcXG4tXFx0XFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4rXFx0XFx0c3RydWN0IHBjcHVfc3dfbmV0c3RhdHMgKnN0YXRzNjQ7XFxuIFxcbi1cXHRcXHRmbGFncyA9IHU2NF9zdGF0c191cGRhdGVfYmVnaW5faXJxc2F2ZShcXHUwMDI2c3RhdHM2NC1cXHUwMDNlc3luY3ApO1xcbitcXHRcXHRzdGF0czY0ID0gZ2V0X2NwdV9wdHIoZGV2LVxcdTAwM2VuZXQtXFx1MDAzZXRzdGF0cyk7XFxuK1xcdFxcdHU2NF9zdGF0c191cGRhdGVfYmVnaW4oXFx1MDAyNnN0YXRzNjQtXFx1MDAzZXN5bmNwKTtcXG4gXFx0XFx0dTY0X3N0YXRzX2FkZChcXHUwMDI2c3RhdHM2NC1cXHUwMDNldHhfcGFja2V0cywgZW50cnktXFx1MDAzZXBhY2tldHMpO1xcbiBcXHRcXHR1NjRfc3RhdHNfYWRkKFxcdTAwMjZzdGF0czY0LVxcdTAwM2V0eF9ieXRlcywgZW50cnktXFx1MDAzZWxlbmd0aCk7XFxuLVxcdFxcdHU2NF9zdGF0c191cGRhdGVfZW5kX2lycXJlc3RvcmUoXFx1MDAyNnN0YXRzNjQtXFx1MDAzZXN5bmNwLCBmbGFncyk7XFxuK1xcdFxcdHU2NF9zdGF0c191cGRhdGVfZW5kKFxcdTAwMjZzdGF0czY0LVxcdTAwM2VzeW5jcCk7XFxuK1xcdFxcdHB1dF9jcHVfcHRyKGRldi1cXHUwMDNlbmV0LVxcdTAwM2V0c3RhdHMpO1xcbiBcXHR9IGVsc2Uge1xcbiBcXHRcXHRkZXYtXFx1MDAzZW5ldC1cXHUwMDNlc3RhdHMudHhfZXJyb3JzKys7XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMjowNzoyOC4zOTM1NjAxMDJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjE3MDA5NDAzMzg4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJVU0JfVVNCTkVUXCIsXG4gICAgXCJVU0JfTkVUX0RSSVZFUlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ1c2JuZXRfc2tiX3JldHVyblwiLFxuICAgIFwidHhfY29tcGxldGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBwZXItQ1BVIDY0LWJpdCBuZXR3b3JrIHN0YXRpc3RpY3MgdXBkYXRlIHN5bmNocm9uaXphdGlvbiBpbiB1c2JuZXRfc2tiX3JldHVybiBhbmQgdHhfY29tcGxldGUgKGRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYyksIHJlcGxhY2luZyBJUlEtc2F2aW5nIHU2NF9zdGF0cyBoZWxwZXJzIHdpdGggZ2V0X2NwdV9wdHIvcHV0X2NwdV9wdHIgcGFpcnMgYW5kIHU2NF9zdGF0c191cGRhdGVfYmVnaW4vZW5kLiBUaGlzIHRvdWNoZXMgcmVhY2hhYmxlIFVTQiBuZXR3b3JraW5nIGRyaXZlciBsb2dpYyB0aGF0IGNhbiBiZSB0ZXN0ZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHdpdGggZW11bGF0ZWQgVVNCIG5ldHdvcmsgZGV2aWNlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA2MTU2NWFjNDljOTg0YmU0MGQyMTIzY2EwMDlkYjJhY2Q3NDI3NzUwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgOCAwMjowNzoyNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi91c2JuZXQuYyBiL2RyaXZlcnMvbmV0L3VzYi91c2JuZXQuY1xuaW5kZXggYTE5ZWNmNzE4ZjM2YS4uM2RmNzJiMGM2YmNmYyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3VzYi91c2JuZXQuY1xuKysrIGIvZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jXG5AQCAtMzI1LDggKzMyNSw3IEBAIHN0YXRpYyB2b2lkIF9fdXNibmV0X3N0YXR1c19zdG9wX2ZvcmNlKHN0cnVjdCB1c2JuZXQgKmRldilcbiAgKi9cbiB2b2lkIHVzYm5ldF9za2JfcmV0dXJuKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG4tXHRzdHJ1Y3QgcGNwdV9zd19uZXRzdGF0cyAqc3RhdHM2NCA9IHRoaXNfY3B1X3B0cihkZXYtXHUwMDNlbmV0LVx1MDAzZXRzdGF0cyk7XG4tXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuK1x0c3RydWN0IHBjcHVfc3dfbmV0c3RhdHMgKnN0YXRzNjQ7XG4gXHRpbnRcdHN0YXR1cztcbiBcbiBcdGlmICh0ZXN0X2JpdChFVkVOVF9SWF9QQVVTRUQsIFx1MDAyNmRldi1cdTAwM2VmbGFncykpIHtcbkBAIC0zMzgsMTAgKzMzNywxMiBAQCB2b2lkIHVzYm5ldF9za2JfcmV0dXJuKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdGlmIChza2ItXHUwMDNlcHJvdG9jb2wgPT0gMClcbiBcdFx0c2tiLVx1MDAzZXByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBkZXYtXHUwMDNlbmV0KTtcbiBcbi1cdGZsYWdzID0gdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbl9pcnFzYXZlKFx1MDAyNnN0YXRzNjQtXHUwMDNlc3luY3ApO1xuK1x0c3RhdHM2NCA9IGdldF9jcHVfcHRyKGRldi1cdTAwM2VuZXQtXHUwMDNldHN0YXRzKTtcbitcdHU2NF9zdGF0c191cGRhdGVfYmVnaW4oXHUwMDI2c3RhdHM2NC1cdTAwM2VzeW5jcCk7XG4gXHR1NjRfc3RhdHNfaW5jKFx1MDAyNnN0YXRzNjQtXHUwMDNlcnhfcGFja2V0cyk7XG4gXHR1NjRfc3RhdHNfYWRkKFx1MDAyNnN0YXRzNjQtXHUwMDNlcnhfYnl0ZXMsIHNrYi1cdTAwM2VsZW4pO1xuLVx0dTY0X3N0YXRzX3VwZGF0ZV9lbmRfaXJxcmVzdG9yZShcdTAwMjZzdGF0czY0LVx1MDAzZXN5bmNwLCBmbGFncyk7XG4rXHR1NjRfc3RhdHNfdXBkYXRlX2VuZChcdTAwMjZzdGF0czY0LVx1MDAzZXN5bmNwKTtcbitcdHB1dF9jcHVfcHRyKGRldi1cdTAwM2VuZXQtXHUwMDNldHN0YXRzKTtcbiBcbiBcdG5ldGlmX2RiZyhkZXYsIHJ4X3N0YXR1cywgZGV2LVx1MDAzZW5ldCwgXCJcdTAwM2MgcngsIGxlbiAlenUsIHR5cGUgMHgleFxcblwiLFxuIFx0XHQgIHNrYi1cdTAwM2VsZW4gKyBzaXplb2Yoc3RydWN0IGV0aGhkciksIHNrYi1cdTAwM2Vwcm90b2NvbCk7XG5AQCAtMTI5OCwxMyArMTI5OSwxNCBAQCBzdGF0aWMgdm9pZCB0eF9jb21wbGV0ZShzdHJ1Y3QgdXJiICp1cmIpXG4gXHRzdHJ1Y3QgdXNibmV0XHRcdCpkZXYgPSBlbnRyeS1cdTAwM2VkZXY7XG4gXG4gXHRpZiAodXJiLVx1MDAzZXN0YXR1cyA9PSAwKSB7XG4tXHRcdHN0cnVjdCBwY3B1X3N3X25ldHN0YXRzICpzdGF0czY0ID0gdGhpc19jcHVfcHRyKGRldi1cdTAwM2VuZXQtXHUwMDNldHN0YXRzKTtcbi1cdFx0dW5zaWduZWQgbG9uZyBmbGFncztcbitcdFx0c3RydWN0IHBjcHVfc3dfbmV0c3RhdHMgKnN0YXRzNjQ7XG4gXG4tXHRcdGZsYWdzID0gdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbl9pcnFzYXZlKFx1MDAyNnN0YXRzNjQtXHUwMDNlc3luY3ApO1xuK1x0XHRzdGF0czY0ID0gZ2V0X2NwdV9wdHIoZGV2LVx1MDAzZW5ldC1cdTAwM2V0c3RhdHMpO1xuK1x0XHR1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKFx1MDAyNnN0YXRzNjQtXHUwMDNlc3luY3ApO1xuIFx0XHR1NjRfc3RhdHNfYWRkKFx1MDAyNnN0YXRzNjQtXHUwMDNldHhfcGFja2V0cywgZW50cnktXHUwMDNlcGFja2V0cyk7XG4gXHRcdHU2NF9zdGF0c19hZGQoXHUwMDI2c3RhdHM2NC1cdTAwM2V0eF9ieXRlcywgZW50cnktXHUwMDNlbGVuZ3RoKTtcbi1cdFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmRfaXJxcmVzdG9yZShcdTAwMjZzdGF0czY0LVx1MDAzZXN5bmNwLCBmbGFncyk7XG4rXHRcdHU2NF9zdGF0c191cGRhdGVfZW5kKFx1MDAyNnN0YXRzNjQtXHUwMDNlc3luY3ApO1xuK1x0XHRwdXRfY3B1X3B0cihkZXYtXHUwMDNlbmV0LVx1MDAzZXRzdGF0cyk7XG4gXHR9IGVsc2Uge1xuIFx0XHRkZXYtXHUwMDNlbmV0LVx1MDAzZXN0YXRzLnR4X2Vycm9ycysrO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDI6MDc6MjguMzkzNTYxOTUyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTI5NjE3Nzg1MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS2VybmVsIFBhdGNoIEV2YWx1YXRpb24gLSBVU0JuZXQgRnV6emluZyoqXG5cbk9rYXksIHNvIHRoZSB1c2VyIHdhbnRzIG1lIHRvIGV2YWx1YXRlIHRoaXMga2VybmVsIHBhdGNoIHNlcmllcyBmb3IgZnV6emluZyB3aXRoIHN5emthbGxlciwgc3BlY2lmaWNhbGx5IHRhcmdldGluZyB0aGUgYW1kNjQgYXJjaGl0ZWN0dXJlLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyBhbHdheXMgdG8gbWV0aWN1bG91c2x5IHJldmlldyB0aGUgaW5zdHJ1Y3Rpb25zIGFuZCB0aGUgZGlmZiBpdHNlbGYuIEFscmlnaHQsIGl0J3MgbW9kaWZ5aW5nIGBkcml2ZXJzL25ldC91c2IvdXNibmV0LmNgLiAgU3BlY2lmaWNhbGx5LCB0aGUgY2hhbmdlcyBhcmUgaW4gYHVzYm5ldF9za2JfcmV0dXJuYCBhbmQgYHR4X2NvbXBsZXRlYC4gIFRoZSBvcmlnaW5hbCBjb2RlIHVzZWQgYHRoaXNfY3B1X3B0cmAgd2l0aCB0aGUgYHU2NF9zdGF0c191cGRhdGVfYmVnaW5faXJxc2F2ZWAvYHU2NF9zdGF0c191cGRhdGVfZW5kX2lycXJlc3RvcmVgIHBhaXIuIFRoaXMgcGF0Y2gsIGhvd2V2ZXIsIGlzIHJlcGxhY2luZyB0aGF0IHdpdGggYGdldF9jcHVfcHRyYCwgYHU2NF9zdGF0c191cGRhdGVfYmVnaW5gL2B1NjRfc3RhdHNfdXBkYXRlX2VuZGAsIGFuZCBgcHV0X2NwdV9wdHJgLlxuXG5IbW0sIGJlZm9yZSBJIGRpZyBpbnRvIHRoZSBmaW5lciBwb2ludHMgb2YgdGhlIGxvY2tpbmcgbWVjaGFuaXNtcywgSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhpcyBjb2RlIGlzIGV2ZW4gKnJlYWNoYWJsZSogaW4gYSBmdXp6aW5nIGNvbnRleHQuIFdlJ3JlIHRhbGtpbmcgYWJvdXQgYHVzYm5ldC5jYCwgd2hpY2ggaXMgcGFydCBvZiB0aGUgVVNCIG5ldHdvcmtpbmcgZHJpdmVycyBpbiBMaW51eC4gUmlnaHQsIHRoYXQgbWVhbnMgYENPTkZJR19VU0JfTkVUX0RSSVZFUlNgLCBgQ09ORklHX1VTQl9VU0JORVRgLCBhbmQgdGhlIGxpa2UuIE5vdywgY2FuIHdlIGFjdHVhbGx5IGZ1enogVVNCIG5ldHdvcmtpbmcgd2l0aCBzeXprYWxsZXI/ICBBaCwgeWVzLCBhYnNvbHV0ZWx5ISBTeXprYWxsZXIgKmZyZXF1ZW50bHkqIGZ1enplcyBVU0IgZHJpdmVycywgYW5kIEkga25vdyBpdCdzIGhpdCBVU0IgbmV0d29ya2luZyBiZWZvcmXigJRjZGNfZXRoZXIsIGFzaXgsIGFsbCBvZiB0aG9zZSB3aGljaCB1c2UgdXNibmV0IGFyZSBwcmV0dHkgY29tbW9uIHRhcmdldHMuXG5cbk9rYXksIHRoaXMgbG9va3MgcHJvbWlzaW5nLiBOb3csIEkgbmVlZCB0byBnZXQgc29tZSBtb3JlIGNvbnRleHQgdG8gZGVjaWRlIHdoYXQgdGhlIGltcGxpY2F0aW9ucyBhcmUgYW5kIGhvdyB0byBhc3Nlc3MgaXQuIEknbGwgbmVlZCB0byB1c2UgbXkgdG9vbHMgdG8gZGlnIGludG8gdGhlIGNvZGUgYW5kIEtjb25maWcgZmlsZXMuIFRpbWUgdG8gY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzIHVzaW5nIGdyZXBwZXIgYW5kIHJlYWQtZmlsZSwgdG8gbWFrZSBzdXJlIGV2ZXJ5dGhpbmcgbGluZXMgdXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1MDQsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNTMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMjowNzo0MS4zNTUzNDQwMTZaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU1MTY3OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFVTQl9VU0JORVRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvdXNiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3VzYi9LY29uZmlnPTExMz1jb25maWcgVVNCX0xBTjc4WFhcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTEzMS1cXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZzoxMzI6Y29uZmlnIFVTQl9VU0JORVRcXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0xMzMtXFx0dHJpc3RhdGUgXFxcIk11bHRpLXB1cnBvc2UgVVNCIE5ldHdvcmtpbmcgRnJhbWV3b3JrXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMjowNzo0MS40MDA4Njc3NTZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTgxNTU2NTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkV4YW1pbmluZyBVU0IgTmV0d29ya2luZyBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGZvciB0aGUgVVNCIG5ldHdvcmtpbmcgZHJpdmVycy4gTGV0J3Mgc3RhcnQgYnkgY2hlY2tpbmcgb3V0IHRoZSBgZHJpdmVycy9uZXQvdXNiL0tjb25maWdgIGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAxMzAuIFRoYXQncyB1c3VhbGx5IHdoZXJlIHRoZSBtYWluIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgdGhlaXIgZGVwZW5kZW5jaWVzIGFyZSBkZWZpbmVkLiBJIGV4cGVjdCB0byBzZWUgdGhlIHR5cGljYWwgYGRlcGVuZHMgb25gIHN0YXRlbWVudHMgbGlua2luZyB0aGVzZSBkcml2ZXJzIHRvIHJlbGV2YW50IFVTQiBjb3JlIGNvbXBvbmVudHMsIG5ldHdvcmtpbmcgc3RhY2sgZmVhdHVyZXMsIGFuZCBtYXliZSBldmVuIHNwZWNpZmljIGhhcmR3YXJlIHBsYXRmb3Jtcy4gS25vd2luZyB0aGVzZSByZWxhdGlvbnNoaXBzIGlzIGNydWNpYWwgYmVmb3JlIG1ha2luZyBhbnkgY2hhbmdlcyBvciB0cm91Ymxlc2hvb3RpbmcgZHJpdmVyIGNvbmZpZ3VyYXRpb25zLiBJdCBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIG92ZXJ2aWV3IG9mIHdoYXQgbmVlZHMgdG8gYmUgZW5hYmxlZCBvciBjb25zaWRlcmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MzgzLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDI6MDc6NDMuNTgyNDI3MTEzWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODI0MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvdXNiL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTI1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTI1OlxcdFxcdCAgTEFONzgwMSA6IFVTQiAzIHRvIDEwLzEwMC8xMDAwIEV0aGVybmV0IGFkYXB0ZXIgKE1BQyBvbmx5KVxcbiAxMjY6XFx0XFxuIDEyNzpcXHRcXHQgIFByb3BlciBQSFkgZHJpdmVyIGlzIHJlcXVpcmVkIGZvciBMQU43ODAxLlxcbiAxMjg6XFx0XFxuIDEyOTpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiAxMzA6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgbGFuNzh4eC5cXG4gMTMxOlxcdFxcbiAxMzI6XFx0Y29uZmlnIFVTQl9VU0JORVRcXG4gMTMzOlxcdFxcdHRyaXN0YXRlIFxcXCJNdWx0aS1wdXJwb3NlIFVTQiBOZXR3b3JraW5nIEZyYW1ld29ya1xcXCJcXG4gMTM0OlxcdFxcdHNlbGVjdCBNSUlcXG4gMTM1OlxcdFxcdGhlbHBcXG4gMTM2OlxcdFxcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgc2V2ZXJhbCBraW5kcyBvZiBuZXR3b3JrIGxpbmtzIG92ZXIgVVNCLFxcbiAxMzc6XFx0XFx0ICB3aXRoIFxcXCJtaW5pZHJpdmVyc1xcXCIgYnVpbHQgYXJvdW5kIGEgY29tbW9uIG5ldHdvcmsgZHJpdmVyIGNvcmVcXG4gMTM4OlxcdFxcdCAgdGhhdCBzdXBwb3J0cyBkZWVwIHF1ZXVlcyBmb3IgZWZmaWNpZW50IHRyYW5zZmVycy4gIChUaGlzIGdpdmVzXFxuIDEzOTpcXHRcXHQgIGJldHRlciBwZXJmb3JtYW5jZSB3aXRoIHNtYWxsIHBhY2tldHMgYW5kIGF0IGhpZ2ggc3BlZWRzKS5cXG4gMTQwOlxcdFxcbiAxNDE6XFx0XFx0ICBUaGUgVVNCIGhvc3QgcnVucyBcXFwidXNibmV0XFxcIiwgYW5kIHRoZSBvdGhlciBlbmQgb2YgdGhlIGxpbmsgbWlnaHQgYmU6XFxuIDE0MjpcXHRcXG4gMTQzOlxcdFxcdCAgLSBBbm90aGVyIFVTQiBob3N0LCB3aGVuIHVzaW5nIFVTQiBcXFwibmV0d29ya1xcXCIgb3IgXFxcImRhdGEgdHJhbnNmZXJcXFwiXFxuIDE0NDpcXHRcXHQgICAgY2FibGVzLiAgVGhlc2UgYXJlIG9mdGVuIHVzZWQgdG8gbmV0d29yayBsYXB0b3BzIHRvIFBDcywgbGlrZVxcbiAxNDU6XFx0XFx0ICAgIFxcXCJMYXBsaW5rXFxcIiBwYXJhbGxlbCBjYWJsZXMgb3Igc29tZSBtb3RoZXJib2FyZHMuICBUaGVzZSByZWx5XFxuIDE0NjpcXHRcXHQgICAgb24gc3BlY2lhbGl6ZWQgY2hpcHMgZnJvbSBtYW55IHN1cHBsaWVycy5cXG4gMTQ3OlxcdFxcbiAxNDg6XFx0XFx0ICAtIEFuIGludGVsbGlnZW50IFVTQiBnYWRnZXQsIHBlcmhhcHMgZW1iZWRkaW5nIGEgTGludXggc3lzdGVtLlxcbiAxNDk6XFx0XFx0ICAgIFRoZXNlIGluY2x1ZGUgUERBcyBydW5uaW5nIExpbnV4IChpUGFxLCBZb3B5LCBaYXVydXMsIGFuZFxcbiAxNTA6XFx0XFx0ICAgIG90aGVycyksIGFuZCBkZXZpY2VzIHRoYXQgaW50ZXJvcGVyYXRlIHVzaW5nIHRoZSBzdGFuZGFyZFxcbiAxNTE6XFx0XFx0ICAgIENEQy1FdGhlcm5ldCBzcGVjaWZpY2F0aW9uIChpbmNsdWRpbmcgbWFueSBjYWJsZSBtb2RlbXMpLlxcbiAxNTI6XFx0XFxuIDE1MzpcXHRcXHQgIC0gTmV0d29yayBhZGFwdGVyIGhhcmR3YXJlIChsaWtlIHRob3NlIGZvciAxMC8xMDAgRXRoZXJuZXQpIHdoaWNoXFxuIDE1NDpcXHRcXHQgICAgdXNlcyB0aGlzIGRyaXZlciBmcmFtZXdvcmsuXFxuIDE1NTpcXHRcXG4gMTU2OlxcdFxcdCAgVGhlIGxpbmsgd2lsbCBhcHBlYXIgd2l0aCBhIG5hbWUgbGlrZSBcXFwidXNiMFxcXCIsIHdoZW4gdGhlIGxpbmsgaXNcXG4gMTU3OlxcdFxcdCAgYSB0d28tbm9kZSBsaW5rLCBvciBcXFwiZXRoMFxcXCIgZm9yIG1vc3QgQ0RDLUV0aGVybmV0IGRldmljZXMuICBUaG9zZVxcbiAxNTg6XFx0XFx0ICB0d28tbm9kZSBsaW5rcyBhcmUgbW9zdCBlYXNpbHkgbWFuYWdlZCB3aXRoIEV0aGVybmV0IEJyaWRnaW5nXFxuIDE1OTpcXHRcXHQgIChDT05GSUdfQlJJREdFKSBpbnN0ZWFkIG9mIHJvdXRpbmcuXFxuIDE2MDpcXHRcXG4gMTYxOlxcdFxcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24gc2VlIFxcdTAwM2NodHRwOi8vd3d3LmxpbnV4LXVzYi5vcmcvdXNibmV0L1xcdTAwM2UuXFxuIDE2MjpcXHRcXG4gMTYzOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXFxuIDE2NDpcXHRcXHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB1c2JuZXQuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAyOjA3OjQzLjU4MjUxMTk3M1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYyMDc0NTUzODMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgVVNCIERyaXZlciBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBmb3IgYSBwYXJ0aWN1bGFyIFVTQiBkcml2ZXIuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byB0aGUgYEtjb25maWdgIGZpbGUsIHNwZWNpZmljYWxseSB0aGUgdG9wIGxldmVsIG9uZSBsb2NhdGVkIGluIGBkcml2ZXJzL25ldC91c2IvS2NvbmZpZ2AuIFRoYXQncyBnZW5lcmFsbHkgd2hlcmUgSSdkIGV4cGVjdCB0byBmaW5kIHRoZSBtZW51IHN0cnVjdHVyZSBhbmQgdGhlIGtleSBkZXBlbmRlbmNpZXMgZGVmaW5lZC4gSXQncyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIHRyYWNpbmcgd2hpY2ggb3RoZXIgY29uZmlndXJhdGlvbiBvcHRpb25zIGVuYWJsZSBvciBkaXNhYmxlIHRoaXMgcGFydGljdWxhciBkcml2ZXIsIGFueSByZWxldmFudCBoYXJkd2FyZSByZXF1aXJlbWVudHMsIG9yIGV2ZW4gd2hpY2ggb3RoZXIgZHJpdmVycyBpdCBtaWdodCBkZXBlbmQgb24uIEknbGwgcXVpY2tseSBzY2FuIHRoYXQgZmlsZSBhbmQgc2VlIGhvdyB0aGUgYFVTQmAgZHJpdmVyIG9wdGlvbnMgYXJlIHN0cnVjdHVyZWQgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUyODQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAyOjA4OjQ1LjY1NzA2OTAwNloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxNzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3VzYi9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIFVTQiBOZXR3b3JrIGRldmljZXMgY29uZmlndXJhdGlvblxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0Y29tbWVudCBcXFwiSG9zdC1zaWRlIFVTQiBzdXBwb3J0IGlzIG5lZWRlZCBmb3IgVVNCIE5ldHdvcmsgQWRhcHRlciBzdXBwb3J0XFxcIlxcbiAgIDY6XFx0XFx0ZGVwZW5kcyBvbiAhVVNCIFxcdTAwMjZcXHUwMDI2IE5FVFxcbiAgIDc6XFx0XFxuICAgODpcXHRtZW51Y29uZmlnIFVTQl9ORVRfRFJJVkVSU1xcbiAgIDk6XFx0XFx0dHJpc3RhdGUgXFxcIlVTQiBOZXR3b3JrIEFkYXB0ZXJzXFxcIlxcbiAgMTA6XFx0XFx0ZGVmYXVsdCBVU0IgaWYgVVNCXFxuICAxMTpcXHRcXHRkZXBlbmRzIG9uIFVTQiBcXHUwMDI2XFx1MDAyNiBORVRcXG4gIDEyOlxcdFxcbiAgMTM6XFx0aWYgVVNCX05FVF9EUklWRVJTXFxuICAxNDpcXHRcXG4gIDE1OlxcdGNvbmZpZyBVU0JfQ0FUQ1xcbiAgMTY6XFx0XFx0dHJpc3RhdGUgXFxcIlVTQiBDQVRDIE5ldE1hdGUtYmFzZWQgRXRoZXJuZXQgZGV2aWNlIHN1cHBvcnRcXFwiXFxuICAxNzpcXHRcXHRzZWxlY3QgQ1JDMzJcXG4gIDE4OlxcdFxcdGhlbHBcXG4gIDE5OlxcdFxcdCAgU2F5IFkgaWYgeW91IHdhbnQgdG8gdXNlIG9uZSBvZiB0aGUgZm9sbG93aW5nIDEwTWJwcyBVU0IgRXRoZXJuZXRcXG4gIDIwOlxcdFxcdCAgZGV2aWNlIGJhc2VkIG9uIHRoZSBFTDEyMTBBIGNoaXAuIFN1cHBvcnRlZCBkZXZpY2VzIGFyZTpcXG4gIDIxOlxcdFxcdCAgQmVsa2luIEY1VTAxMVxcbiAgMjI6XFx0XFx0ICBCZWxraW4gRjVVMTExXFxuICAyMzpcXHRcXHQgIENBVEMgTmV0TWF0ZVxcbiAgMjQ6XFx0XFx0ICBDQVRDIE5ldE1hdGUgSUlcXG4gIDI1OlxcdFxcdCAgc21hcnRCcmlkZ2VzIHNtYXJ0TklDXFxuICAyNjpcXHRcXG4gIDI3OlxcdFxcdCAgVGhpcyBkcml2ZXIgbWFrZXMgdGhlIGFkYXB0ZXIgYXBwZWFyIGFzIGEgbm9ybWFsIEV0aGVybmV0IGludGVyZmFjZSxcXG4gIDI4OlxcdFxcdCAgdHlwaWNhbGx5IG9uIGV0aDAsIGlmIGl0IGlzIHRoZSBvbmx5IGV0aGVybmV0IGRldmljZSwgb3IgcGVyaGFwcyBvblxcbiAgMjk6XFx0XFx0ICBldGgxLCBpZiB5b3UgaGF2ZSBhIFBDSSBvciBJU0EgZXRoZXJuZXQgY2FyZCBpbnN0YWxsZWQuXFxuICAzMDpcXHRcXG4gIDMxOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXFxuICAzMjpcXHRcXHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBjYXRjLlxcbiAgMzM6XFx0XFxuICAzNDpcXHRjb25maWcgVVNCX0tBV0VUSFxcbiAgMzU6XFx0XFx0dHJpc3RhdGUgXFxcIlVTQiBLTFNJIEtMNVVTQjEwMS1iYXNlZCBldGhlcm5ldCBkZXZpY2Ugc3VwcG9ydFxcXCJcXG4gIDM2OlxcdFxcdGhlbHBcXG4gIDM3OlxcdFxcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2Ugb25lIG9mIHRoZSBmb2xsb3dpbmcgMTBNYnBzIG9ubHlcXG4gIDM4OlxcdFxcdCAgVVNCIEV0aGVybmV0IGFkYXB0ZXJzIGJhc2VkIG9uIHRoZSBLTFNJIEtMNUtVU0IxMDFCIGNoaXBzZXQ6XFxuICAzOTpcXHRcXHQgIDNDb20gM0MxOTI1MFxcbiAgNDA6XFx0XFx0ICBBRFMgVVNCLTEwQlRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDI6MDg6NDUuNjU3MTUyODQ2WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTc4MTgyMDU2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgdGhvdWdoIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBVU0IgTmV0d29ya2luZyBNb2R1bGUncyBCdWlsZCBQcm9jZXNzKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGB1c2JuZXQuY2Agd2l0aGluIHRoZSBVU0IgbmV0d29ya2luZyBkcml2ZXIgaXMgYWN0dWFsbHkgY29tcGlsZWQgaW50byB0aGUga2VybmVsLiBUaGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgaXMgdGhlIGBkcml2ZXJzL25ldC91c2IvTWFrZWZpbGVgLiBUaGF0IGZpbGUgaXMgdGhlIGNlbnRyYWwgb3JnYW5pemluZyBwb2ludCBmb3IgYWxsIHRoZSBidWlsZCBpbnN0cnVjdGlvbnMgd2l0aGluIHRoYXQgcGFydGljdWxhciBkaXJlY3RvcnksIGl0J3MgdGhlIHJlY2lwZSBib29rLCBzbyB0byBzcGVhay4gSXQnbGwgZGVmaW5lIGRlcGVuZGVuY2llcywgY29tcGlsYXRpb24gZmxhZ3MsIGFuZCB0aGUgb2JqZWN0IGZpbGVzIHRoYXQgZ2V0IGxpbmtlZCB0byBjcmVhdGUgdGhlIGZpbmFsIG1vZHVsZSBvciBpbnRlZ3JhdGVkIGZ1bmN0aW9uYWxpdHkuIExldCdzIGdldCByaWdodCBpbnRvIGl0IGFuZCBzZWUgaG93IHRoaXMgaXMgY29uZmlndXJlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjA0OSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDI6MDg6NDcuNDM4OTc1NzQ5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4NDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3VzYi9NYWtlZmlsZVwiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgTWFrZWZpbGUgZm9yIFVTQiBOZXR3b3JrIGRyaXZlcnNcXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0b2JqLSQoQ09ORklHX1VTQl9DQVRDKVxcdFxcdCs9IGNhdGMub1xcbiAgIDc6XFx0b2JqLSQoQ09ORklHX1VTQl9LQVdFVEgpXFx0Kz0ga2F3ZXRoLm9cXG4gICA4OlxcdG9iai0kKENPTkZJR19VU0JfUEVHQVNVUylcXHQrPSBwZWdhc3VzLm9cXG4gICA5OlxcdG9iai0kKENPTkZJR19VU0JfUlRMODE1MClcXHQrPSBydGw4MTUwLm9cXG4gIDEwOlxcdG9iai0kKENPTkZJR19VU0JfUlRMODE1MilcXHQrPSByODE1Mi5vXFxuICAxMTpcXHRvYmotJChDT05GSUdfVVNCX0hTTylcXHRcXHQrPSBoc28ub1xcbiAgMTI6XFx0b2JqLSQoQ09ORklHX1VTQl9MQU43OFhYKVxcdCs9IGxhbjc4eHgub1xcbiAgMTM6XFx0b2JqLSQoQ09ORklHX1VTQl9ORVRfQVg4ODE3WClcXHQrPSBhc2l4Lm9cXG4gIDE0OlxcdGFzaXgteSA6PSBhc2l4X2RldmljZXMubyBhc2l4X2NvbW1vbi5vIGF4ODgxNzJhLm9cXG4gIDE1OlxcdG9iai0kKENPTkZJR19VU0JfTkVUX0FYODgxNzlfMTc4QSkgICAgICArPSBheDg4MTc5XzE3OGEub1xcbiAgMTY6XFx0b2JqLSQoQ09ORklHX1VTQl9ORVRfQ0RDRVRIRVIpXFx0Kz0gY2RjX2V0aGVyLm9cXG4gIDE3OlxcdG9iai0kKENPTkZJR19VU0JfTkVUX0NEQ19FRU0pXFx0Kz0gY2RjX2VlbS5vXFxuICAxODpcXHRvYmotJChDT05GSUdfVVNCX05FVF9ETTk2MDEpXFx0Kz0gZG05NjAxLm9cXG4gIDE5OlxcdG9iai0kKENPTkZJR19VU0JfTkVUX1NSOTcwMClcXHQrPSBzcjk3MDAub1xcbiAgMjA6XFx0b2JqLSQoQ09ORklHX1VTQl9ORVRfU1I5ODAwKVxcdCs9IHNyOTgwMC5vXFxuICAyMTpcXHRvYmotJChDT05GSUdfVVNCX05FVF9TTVNDNzVYWClcXHQrPSBzbXNjNzV4eC5vXFxuICAyMjpcXHRvYmotJChDT05GSUdfVVNCX05FVF9TTVNDOTVYWClcXHQrPSBzbXNjOTV4eC5vXFxuICAyMzpcXHRvYmotJChDT05GSUdfVVNCX05FVF9HTDYyMEEpXFx0Kz0gZ2w2MjBhLm9cXG4gIDI0OlxcdG9iai0kKENPTkZJR19VU0JfTkVUX05FVDEwODApXFx0Kz0gbmV0MTA4MC5vXFxuICAyNTpcXHRvYmotJChDT05GSUdfVVNCX05FVF9QTFVTQilcXHQrPSBwbHVzYi5vXFxuICAyNjpcXHRvYmotJChDT05GSUdfVVNCX05FVF9STkRJU19IT1NUKVxcdCs9IHJuZGlzX2hvc3Qub1xcbiAgMjc6XFx0b2JqLSQoQ09ORklHX1VTQl9ORVRfQ0RDX1NVQlNFVF9FTkFCTEUpXFx0Kz0gY2RjX3N1YnNldC5vXFxuICAyODpcXHRvYmotJChDT05GSUdfVVNCX05FVF9aQVVSVVMpXFx0Kz0gemF1cnVzLm9cXG4gIDI5OlxcdG9iai0kKENPTkZJR19VU0JfTkVUX01DUzc4MzApXFx0Kz0gbWNzNzgzMC5vXFxuICAzMDpcXHRvYmotJChDT05GSUdfVVNCX1VTQk5FVClcXHQrPSB1c2JuZXQub1xcbiAgMzE6XFx0b2JqLSQoQ09ORklHX1VTQl9ORVRfSU5UNTFYMSlcXHQrPSBpbnQ1MXgxLm9cXG4gIDMyOlxcdG9iai0kKENPTkZJR19VU0JfQ0RDX1BIT05FVClcXHQrPSBjZGMtcGhvbmV0Lm9cXG4gIDMzOlxcdG9iai0kKENPTkZJR19VU0JfTkVUX0tBTE1JQSlcXHQrPSBrYWxtaWEub1xcbiAgMzQ6XFx0b2JqLSQoQ09ORklHX1VTQl9JUEhFVEgpXFx0Kz0gaXBoZXRoLm9cXG4gIDM1OlxcdG9iai0kKENPTkZJR19VU0JfU0lFUlJBX05FVClcXHQrPSBzaWVycmFfbmV0Lm9cXG4gIDM2OlxcdG9iai0kKENPTkZJR19VU0JfTkVUX0NYODIzMTBfRVRIKVxcdCs9IGN4ODIzMTBfZXRoLm9cXG4gIDM3OlxcdG9iai0kKENPTkZJR19VU0JfTkVUX0NEQ19OQ00pXFx0Kz0gY2RjX25jbS5vXFxuICAzODpcXHRvYmotJChDT05GSUdfVVNCX05FVF9IVUFXRUlfQ0RDX05DTSlcXHQrPSBodWF3ZWlfY2RjX25jbS5vXFxuICAzOTpcXHRvYmotJChDT05GSUdfVVNCX1ZMNjAwKVxcdFxcdCs9IGxnLXZsNjAwLm9cXG4gIDQwOlxcdG9iai0kKENPTkZJR19VU0JfTkVUX1FNSV9XV0FOKVxcdCs9IHFtaV93d2FuLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDI6MDg6NDcuNDM5MDU3MDE5WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMzNzE5MDU4MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFVTQm5ldCBEcml2ZXIgQ29kZSoqXG5cbk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBgZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jYCBjb2RlLiBNeSBmaXJzdCBzdGVwIGlzIHRvIHplcm8gaW4gb24gdGhlIHJlY2VudCBjb21taXQgYW5kIHRoZSBtb2RpZmllZCBmdW5jdGlvbnMgd2l0aGluLiBLbm93aW5nIHRoZSByZWxldmFudCBjaGFuZ2VzIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBzcGVjaWZpYyBpc3N1ZSBvciBlbmhhbmNlbWVudCBJJ20gaW52ZXN0aWdhdGluZy4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IGZvY3VzaW5nIG9uIGxpbmVzIDMyNSBhbmQgMTI5OCwgYXMgdGhleSdyZSBvZnRlbiB0aGUgaG90c3BvdHMgZm9yIG5ldHdvcmsgZHJpdmVyIGludGVyYWN0aW9uIGFuZCBkYXRhIGhhbmRsaW5nLiBSZWFkaW5nIGFyb3VuZCB0aGVzZSBsaW5lcyBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgaW5pdGlhbCBjb250ZXh0IGZvciBhbnkgcG90ZW50aWFsIHByb2JsZW0gYXJlYXMgb3IgaW1wcm92ZW1lbnRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3Mjk0LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMjowODo1MC44MTA5NjUyMzhaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM2MDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3VzYi91c2JuZXQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMTUsXG4gIFwiTGluZUNvdW50XCI6IDQ1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMTU6XFx0XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2ZGV2LVxcdTAwM2VpbnRlcnJ1cHRfbXV0ZXgpO1xcbiAzMTY6XFx0XFx0XFx0dXNiX2tpbGxfdXJiKGRldi1cXHUwMDNlaW50ZXJydXB0KTtcXG4gMzE3OlxcdFxcdFxcdGRldl9kYmcoXFx1MDAyNmRldi1cXHUwMDNldWRldi1cXHUwMDNlZGV2LCBcXFwia2lsbGVkIGludGVycnVwdCBVUkIgZm9yIHN1c3BlbmRcXFxcblxcXCIpO1xcbiAzMTg6XFx0XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZkZXYtXFx1MDAzZWludGVycnVwdF9tdXRleCk7XFxuIDMxOTpcXHRcXHR9XFxuIDMyMDpcXHR9XFxuIDMyMTpcXHRcXG4gMzIyOlxcdC8qIFBhc3NlcyB0aGlzIHBhY2tldCB1cCB0aGUgc3RhY2ssIHVwZGF0aW5nIGl0cyBhY2NvdW50aW5nLlxcbiAzMjM6XFx0ICogU29tZSBsaW5rIHByb3RvY29scyBiYXRjaCBwYWNrZXRzLCBzbyB0aGVpciByeF9maXh1cCBwYXRoc1xcbiAzMjQ6XFx0ICogY2FuIHJldHVybiBjbG9uZXMgYXMgd2VsbCBhcyBqdXN0IG1vZGlmeSB0aGUgb3JpZ2luYWwgc2tiLlxcbiAzMjU6XFx0ICovXFxuIDMyNjpcXHR2b2lkIHVzYm5ldF9za2JfcmV0dXJuKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gMzI3OlxcdHtcXG4gMzI4OlxcdFxcdHN0cnVjdCBwY3B1X3N3X25ldHN0YXRzICpzdGF0czY0O1xcbiAzMjk6XFx0XFx0aW50XFx0c3RhdHVzO1xcbiAzMzA6XFx0XFxuIDMzMTpcXHRcXHRpZiAodGVzdF9iaXQoRVZFTlRfUlhfUEFVU0VELCBcXHUwMDI2ZGV2LVxcdTAwM2VmbGFncykpIHtcXG4gMzMyOlxcdFxcdFxcdHNrYl9xdWV1ZV90YWlsKFxcdTAwMjZkZXYtXFx1MDAzZXJ4cV9wYXVzZSwgc2tiKTtcXG4gMzMzOlxcdFxcdFxcdHJldHVybjtcXG4gMzM0OlxcdFxcdH1cXG4gMzM1OlxcdFxcbiAzMzY6XFx0XFx0Lyogb25seSB1cGRhdGUgaWYgdW5zZXQgdG8gYWxsb3cgbWluaWRyaXZlciByeF9maXh1cCBvdmVycmlkZSAqL1xcbiAzMzc6XFx0XFx0aWYgKHNrYi1cXHUwMDNlcHJvdG9jb2wgPT0gMClcXG4gMzM4OlxcdFxcdFxcdHNrYi1cXHUwMDNlcHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldi1cXHUwMDNlbmV0KTtcXG4gMzM5OlxcdFxcbiAzNDA6XFx0XFx0c3RhdHM2NCA9IGdldF9jcHVfcHRyKGRldi1cXHUwMDNlbmV0LVxcdTAwM2V0c3RhdHMpO1xcbiAzNDE6XFx0XFx0dTY0X3N0YXRzX3VwZGF0ZV9iZWdpbihcXHUwMDI2c3RhdHM2NC1cXHUwMDNlc3luY3ApO1xcbiAzNDI6XFx0XFx0dTY0X3N0YXRzX2luYyhcXHUwMDI2c3RhdHM2NC1cXHUwMDNlcnhfcGFja2V0cyk7XFxuIDM0MzpcXHRcXHR1NjRfc3RhdHNfYWRkKFxcdTAwMjZzdGF0czY0LVxcdTAwM2VyeF9ieXRlcywgc2tiLVxcdTAwM2VsZW4pO1xcbiAzNDQ6XFx0XFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmQoXFx1MDAyNnN0YXRzNjQtXFx1MDAzZXN5bmNwKTtcXG4gMzQ1OlxcdFxcdHB1dF9jcHVfcHRyKGRldi1cXHUwMDNlbmV0LVxcdTAwM2V0c3RhdHMpO1xcbiAzNDY6XFx0XFxuIDM0NzpcXHRcXHRuZXRpZl9kYmcoZGV2LCByeF9zdGF0dXMsIGRldi1cXHUwMDNlbmV0LCBcXFwiXFx1MDAzYyByeCwgbGVuICV6dSwgdHlwZSAweCV4XFxcXG5cXFwiLFxcbiAzNDg6XFx0XFx0XFx0ICBza2ItXFx1MDAzZWxlbiArIHNpemVvZihzdHJ1Y3QgZXRoaGRyKSwgc2tiLVxcdTAwM2Vwcm90b2NvbCk7XFxuIDM0OTpcXHRcXHRtZW1zZXQoc2tiLVxcdTAwM2VjYiwgMCwgc2l6ZW9mKHN0cnVjdCBza2JfZGF0YSkpO1xcbiAzNTA6XFx0XFxuIDM1MTpcXHRcXHRpZiAoc2tiX2RlZmVyX3J4X3RpbWVzdGFtcChza2IpKVxcbiAzNTI6XFx0XFx0XFx0cmV0dXJuO1xcbiAzNTM6XFx0XFxuIDM1NDpcXHRcXHRzdGF0dXMgPSBuZXRpZl9yeCAoc2tiKTtcXG4gMzU1OlxcdFxcdGlmIChzdGF0dXMgIT0gTkVUX1JYX1NVQ0NFU1MpXFxuIDM1NjpcXHRcXHRcXHRuZXRpZl9kYmcoZGV2LCByeF9lcnIsIGRldi1cXHUwMDNlbmV0LFxcbiAzNTc6XFx0XFx0XFx0XFx0ICBcXFwibmV0aWZfcnggc3RhdHVzICVkXFxcXG5cXFwiLCBzdGF0dXMpO1xcbiAzNTg6XFx0fVxcbiAzNTk6XFx0RVhQT1JUX1NZTUJPTF9HUEwodXNibmV0X3NrYl9yZXR1cm4pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMjowODo1MC44MTExMDMwMDhaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTcwNjQ3NjYxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqUGVlcmluZyBpbnRvIHRoZSBUcmFuc2FjdGlvbiBDb21wbGV0aW9uIExvZ2ljKipcblxuQWxyaWdodCwgbGV0J3MgemVybyBpbiBvbiBgdHhfY29tcGxldGVgLiBJJ20gZ2V0dGluZyBhIGh1bmNoIGFib3V0IHNvbWV0aGluZyBnb2luZyBvbiBhcm91bmQgbGluZSAxMjk4LiBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoYXQgYXJlYSBpcyBhIGxpa2VseSBzcG90IGZvciB0aGUgZmluYWxpemF0aW9uIGxvZ2ljLCB3aGVyZSB0aGUgdHJhbnNhY3Rpb24ncyBmYXRlIGlzIHNlYWxlZC4gV2UncmUgcHJvYmFibHkgZGVhbGluZyB3aXRoIHRoZSBmbGFnJ3MgYXNzaWdubWVudCBvciBwZXJoYXBzIHNvbWUgcG9zdC1wcm9jZXNzaW5nIHJlbGF0ZWQgdG8gdGhlIHRyYW5zYWN0aW9uJ3Mgc3VjY2Vzc2Z1bCAob3IgdW5zdWNjZXNzZnVsKSBjb25jbHVzaW9uLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHN1cnJvdW5kaW5nIGNvZGUsIHNlZSB3aGF0J3MgaGFwcGVuaW5nIGp1c3QgYmVmb3JlIGFuZCBqdXN0IGFmdGVyIHRoYXQgbGluZS4gVGhpcyBmbGFnJ3Mgc3RhdGUsIGFuZCB3aGF0IGhpbmdlcyBvbiBpdCwgaXMga2V5IHRvIHRoZSBvdmVyYWxsIGZsb3csIGVzcGVjaWFsbHkgaW4gYSBzeXN0ZW0gbGlrZSB0aGlzLiBJdCdzIHRpbWUgdG8gZGlnIGluIGFuZCBzZWUgaWYgYW55dGhpbmcganVtcHMgb3V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4Mjk4LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMjowODo1Mi41MTc1ODE4MzJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQwNjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3VzYi91c2JuZXQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMjkwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMjkwOlxcdFxcdFxcdG5ldGRldl9kYmcoZGV2LVxcdTAwM2VuZXQsIFxcXCJrZXZlbnQgZG9uZSwgZmxhZ3MgPSAweCVseFxcXFxuXFxcIiwgZGV2LVxcdTAwM2VmbGFncyk7XFxuMTI5MTpcXHR9XFxuMTI5MjpcXHRcXG4xMjkzOlxcdC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXFxuMTI5NDpcXHRcXG4xMjk1OlxcdHN0YXRpYyB2b2lkIHR4X2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVyYilcXG4xMjk2OlxcdHtcXG4xMjk3OlxcdFxcdHN0cnVjdCBza19idWZmXFx0XFx0KnNrYiA9IChzdHJ1Y3Qgc2tfYnVmZiAqKSB1cmItXFx1MDAzZWNvbnRleHQ7XFxuMTI5ODpcXHRcXHRzdHJ1Y3Qgc2tiX2RhdGFcXHRcXHQqZW50cnkgPSAoc3RydWN0IHNrYl9kYXRhICopIHNrYi1cXHUwMDNlY2I7XFxuMTI5OTpcXHRcXHRzdHJ1Y3QgdXNibmV0XFx0XFx0KmRldiA9IGVudHJ5LVxcdTAwM2VkZXY7XFxuMTMwMDpcXHRcXG4xMzAxOlxcdFxcdGlmICh1cmItXFx1MDAzZXN0YXR1cyA9PSAwKSB7XFxuMTMwMjpcXHRcXHRcXHRzdHJ1Y3QgcGNwdV9zd19uZXRzdGF0cyAqc3RhdHM2NDtcXG4xMzAzOlxcdFxcbjEzMDQ6XFx0XFx0XFx0c3RhdHM2NCA9IGdldF9jcHVfcHRyKGRldi1cXHUwMDNlbmV0LVxcdTAwM2V0c3RhdHMpO1xcbjEzMDU6XFx0XFx0XFx0dTY0X3N0YXRzX3VwZGF0ZV9iZWdpbihcXHUwMDI2c3RhdHM2NC1cXHUwMDNlc3luY3ApO1xcbjEzMDY6XFx0XFx0XFx0dTY0X3N0YXRzX2FkZChcXHUwMDI2c3RhdHM2NC1cXHUwMDNldHhfcGFja2V0cywgZW50cnktXFx1MDAzZXBhY2tldHMpO1xcbjEzMDc6XFx0XFx0XFx0dTY0X3N0YXRzX2FkZChcXHUwMDI2c3RhdHM2NC1cXHUwMDNldHhfYnl0ZXMsIGVudHJ5LVxcdTAwM2VsZW5ndGgpO1xcbjEzMDg6XFx0XFx0XFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmQoXFx1MDAyNnN0YXRzNjQtXFx1MDAzZXN5bmNwKTtcXG4xMzA5OlxcdFxcdFxcdHB1dF9jcHVfcHRyKGRldi1cXHUwMDNlbmV0LVxcdTAwM2V0c3RhdHMpO1xcbjEzMTA6XFx0XFx0fSBlbHNlIHtcXG4xMzExOlxcdFxcdFxcdGRldi1cXHUwMDNlbmV0LVxcdTAwM2VzdGF0cy50eF9lcnJvcnMrKztcXG4xMzEyOlxcdFxcbjEzMTM6XFx0XFx0XFx0c3dpdGNoICh1cmItXFx1MDAzZXN0YXR1cykge1xcbjEzMTQ6XFx0XFx0XFx0Y2FzZSAtRVBJUEU6XFxuMTMxNTpcXHRcXHRcXHRcXHR1c2JuZXRfZGVmZXJfa2V2ZW50KGRldiwgRVZFTlRfVFhfSEFMVCk7XFxuMTMxNjpcXHRcXHRcXHRcXHRicmVhaztcXG4xMzE3OlxcdFxcbjEzMTg6XFx0XFx0XFx0Lyogc29mdHdhcmUtZHJpdmVuIGludGVyZmFjZSBzaHV0ZG93biAqL1xcbjEzMTk6XFx0XFx0XFx0Y2FzZSAtRUNPTk5SRVNFVDpcXHRcXHQvLyBhc3luYyB1bmxpbmtcXG4xMzIwOlxcdFxcdFxcdGNhc2UgLUVTSFVURE9XTjpcXHRcXHQvLyBoYXJkd2FyZSBnb25lXFxuMTMyMTpcXHRcXHRcXHRcXHRicmVhaztcXG4xMzIyOlxcdFxcbjEzMjM6XFx0XFx0XFx0LyogbGlrZSByeCwgdHggZ2V0cyBjb250cm9sbGVyIGkvbyBmYXVsdHMgZHVyaW5nIGh1Yl93cVxcbjEzMjQ6XFx0XFx0XFx0ICogZGVsYXlzIGFuZCBzbyBpdCB1c2VzIHRoZSBzYW1lIHRocm90dGxpbmcgbWVjaGFuaXNtLlxcbjEzMjU6XFx0XFx0XFx0ICovXFxuMTMyNjpcXHRcXHRcXHRjYXNlIC1FUFJPVE86XFxuMTMyNzpcXHRcXHRcXHRjYXNlIC1FVElNRTpcXG4xMzI4OlxcdFxcdFxcdGNhc2UgLUVJTFNFUTpcXG4xMzI5OlxcdFxcdFxcdFxcdHVzYl9tYXJrX2xhc3RfYnVzeShkZXYtXFx1MDAzZXVkZXYpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMjowODo1Mi41MTc3MjQxNjJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Njg3MzYyODkwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBTeW5jaHJvbml6YXRpb24gQ2hhbmdlIGluIFVTQiBOZXR3b3JrIERyaXZlciBTdGF0cyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyB0b3VjaGluZyB0aGUgYHVzYm5ldF9za2JfcmV0dXJuYCBhbmQgYHR4X2NvbXBsZXRlYCBmdW5jdGlvbnMsIHdoaWNoIGFyZSBjcml0aWNhbCBpbiB0aGUgYHVzYm5ldGAgZHJpdmVyLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIGlzIHN3aXRjaGluZyBmcm9tIGB0aGlzX2NwdV9wdHJgIGFuZCB0aGUgYGlycXNhdmVgIHZhcmlhbnRzIG9mIGB1NjRfc3RhdHNfdXBkYXRlYCB0byBgZ2V0X2NwdV9wdHJgIGFuZCB0aGUgbm9uLWBpcnFzYXZlYCB2ZXJzaW9ucy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCB0aGlzIHNlZW1zIGxpa2UgYSByZWxhdGl2ZWx5IHN0cmFpZ2h0Zm9yd2FyZCBvcHRpbWl6YXRpb24sIGJ1dCBsZXQncyBtYWtlIHN1cmUgaXQncyB2YWxpZC5cblxuVGhlIGtleSBkaWZmZXJlbmNlIEkgc2VlIGlzIHRoYXQgYGdldF9jcHVfcHRyYCAqZGlzYWJsZXMgcHJlZW1wdGlvbiogYnV0ICpkb2Vzbid0IGRpc2FibGUgSVJRcyosIHVubGlrZSB0aGUgcHJldmlvdXMgbWV0aG9kcy4gVGhpcyByYWlzZXMgYSByZWQgZmxhZyBpbiBteSBtaW5kIGJlY2F1c2UgYHR4X2NvbXBsZXRlYCBpcyBhbiBpbnRlcnJ1cHQgaGFuZGxlciAob3IgcnVucyBpbiBzb2Z0aXJxIGNvbnRleHQgdGhyb3VnaCB0YXNrbGV0cy9ib3R0b20taGFsdmVzIGRlcGVuZGluZyBvbiB0aGUgVVNCIGhvc3QgY29udHJvbGxlciBkcml2ZXIpLCBhbmQgYHVzYm5ldF9za2JfcmV0dXJuYCBhbHNvIHJ1bnMgd2l0aGluIGEgYm90dG9tIGhhbGYuIElmIHNvbWV0aGluZyB0aGF0IGFsc28gbW9kaWZpZXMgdGhlIDY0LWJpdCBzdGF0cyBjb3VsZCBpbnRlcnJ1cHQgdGhvc2UgZnVuY3Rpb25zLCB0aGVuIHRoZSBsb2NraW5nIHNlbWFudGljcyBjb3VsZCBiZSBjb21wbGV0ZWx5IGRpZmZlcmVudCwgb3IgdGhlcmUgY291bGQgYmUgYSBsb2NrZGVwIGNvbmZsaWN0LiBUaGlzIG5lZWRzIHRvIGJlIGNvbnNpZGVyZWQsIGVzcGVjaWFsbHkgaWYgbG9ja2RlcCBjaGVja3MgY291bGQgYmUgdHJpZ2dlcmVkIG9yIGlmIHRoZSBhcmNoaXRlY3R1cmUgaXMgMzItYml0ICh3aGVyZSB0aGlzIHdvdWxkIGJlaGF2ZSBkaWZmZXJlbnRseSlcblxuT2theSwgc28gaXMgdGhpcyBldmVuIHJlYWNoYWJsZT8gRGVmaW5pdGVseSEgYHVzYm5ldGAgaXMgdGhlIHdvcmtob3JzZSBkcml2ZXIgZm9yIGEgdG9uIG9mIFVTQiBuZXR3b3JrIGRldmljZXMg4oCTIENEQyBFdGhlcm5ldCwgQVNJWCBhZGFwdGVycywgYW5kIGEgbG90IG1vcmUuIEFuZCB0aG9zZSBjYW4gKmFic29sdXRlbHkqIGJlIGVtdWxhdGVkIGluIFFFTVUgb3IgZXZlbiB3aXRoIHN5emthbGxlciwgZXNwZWNpYWxseSB1c2luZyBVU0IgZ2FkZ2V0IGVtdWxhdGlvbi4gU3l6a2FsbGVyIHJlZ3VsYXJseSBnZW5lcmF0ZXMgbmV0d29yayB0cmFmZmljIHRoYXQgY2F1c2VzIHRoZXNlIGZ1bmN0aW9ucyB0byBydW4uXG5cbk5vdywgbGV0J3MgYXBwbHkgdGhlIHRyaWFnZSBydWxlcy5cblxuVGhpcyBjbGVhcmx5IGZhbGxzIHVuZGVyIHRoZSBcIldvcnRoRnV6emluZz10cnVlXCIgY3JpdGVyaWE6IEl0J3MgXCJyZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlXCIgYmVjYXVzZSBpdCdzIHRoZSBjb3JlIG5ldHdvcmsgZHJpdmVyLiBGdXJ0aGVyLCBpdCdzIGEgXCJyZWZhY3RvcmluZ1wiIHRoYXQgY2hhbmdlcyBsb2NraW5nIGFuZCBzeW5jaHJvbml6YXRpb24uIEFsc28sIHJlYWNoYWJsZSBkcml2ZXJzIGFuZCBwcm90b2NvbHMgKFVTQiwgbmV0d29yaykgYXJlIGluY2x1ZGVkLiBUaGUgb25seSByZWFzb24gdG8gc2F5IFwiZmFsc2VcIiB3b3VsZCBiZSBpZiB0aGlzIHdhcyBhbiB1bnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aCAoZHJpdmVyIHRlYXJkb3duLCBldGMpIHdoaWNoIGlzIG5vdCB0aGUgY2FzZSBoZXJlLlxuXG5UaGVyZWZvcmUsIFdvcnRoRnV6emluZyA9IFRydWUuXG5cbk5vdywgd2hpY2ggY29uZmlnIG9wdGlvbnMgYXJlIG5lZWRlZCB0byB0cmlnZ2VyIHRoaXMgY29kZT8gSXQgbG9va3MgbGlrZSB3ZSBuZWVkIGBVU0JfTkVUX0RSSVZFUlNgLCBgVVNCX1VTQk5FVGAsIGBVU0JgLCBhbmQgYE5FVGAuIERpZ2dpbmcgaW50byB0aGUgS2NvbmZpZyBhbmQgTWFrZWZpbGUgZmlsZXMgY29uZmlybXMgdGhhdC4gYFVTQl9VU0JORVRgIGFsc28gc2VsZWN0cyBgTUlJYCwgc28gdGhhdCdzIGFub3RoZXIgZGVwZW5kZW5jeS4gV2UgcHJvYmFibHkgbmVlZCB0byBjaGVjayBpZiB0aGVyZSBhcmUgb3RoZXIsIG1vcmUgc3VidGxlIGRlcGVuZGVuY2llcyBsdXJraW5nIGluIHRoZSBgZHJpdmVycy9uZXQvS2NvbmZpZ2Agb3IgYGRyaXZlcnMvdXNiL0tjb25maWdgIGZpbGVzLCBidXQgdGhpcyBpcyBhIHNvbGlkIHN0YXJ0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MTcwLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTkwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDI6MDg6NTkuMzkxMzU4MDA5WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTkxNTkwMjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic291cmNlIFxcXCJkcml2ZXJzL25ldC91c2IvS2NvbmZpZ1xcXCJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvS2NvbmZpZz01MzI9c291cmNlIFxcXCJkcml2ZXJzL3MzOTAvbmV0L0tjb25maWdcXFwiXFxuZHJpdmVycy9uZXQvS2NvbmZpZy01MzMtXFxuZHJpdmVycy9uZXQvS2NvbmZpZzo1MzQ6c291cmNlIFxcXCJkcml2ZXJzL25ldC91c2IvS2NvbmZpZ1xcXCJcXG5kcml2ZXJzL25ldC9LY29uZmlnLTUzNS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDI6MDg6NTkuNTUwNTIyOTg2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxMjI1NjM1MzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgQ29uZmxpY3RzIGluIFVTQiBHYWRnZXQgRHJpdmVyIFNlbGVjdGlvbioqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byBhIHBvdGVudGlhbCBpc3N1ZSBoZXJlLCBhbmQgdGhlIGZpcnN0IHRoaW5nIEkgd2FudCB0byBkbyBpcyBzZWUgaG93IHByZXZhbGVudCB0aGUgc2VsZWN0aW9uIG9mIHRoZSBgVVNCX1VTQk5FVGAgZHJpdmVyIGlzLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpbnZvbHZlcyBhIHF1aWNrIGRpYWdub3N0aWM6IEkgbmVlZCB0byBhc3Nlc3MgdGhlIGVjb3N5c3RlbS4gQXJlIHdlIHNlZWluZyBvdGhlciBkcml2ZXJzIG9yIGNvbmZpZ3VyYXRpb25zIGF0dGVtcHRpbmcgdG8gY2xhaW0gb3IgaW50ZXJhY3Qgd2l0aCB0aGlzIHNwZWNpZmljIG1vZHVsZT8gSSdtIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBjb250ZW50aW9uLCBjb25mbGljdHMsIG9yIHVuZXhwZWN0ZWQgaW50ZXJhY3Rpb25zIGFjcm9zcyBkaWZmZXJlbnQgZHJpdmVyIGltcGxlbWVudGF0aW9ucyBvciBzeXN0ZW0gc2V0dXBzLiBJZGVudGlmeWluZyBvdmVybGFwcyBlYXJseSBjYW4gaGVscCBkaWFnbm9zZSBhIHdpZGUgcmFuZ2Ugb2YgaXNzdWVzLiBMZXQncyBzZWUgaWYgYW55b25lIGVsc2UgaXMgZXZlbiAqdXNpbmcqIHRoaXMsIGFuZCBob3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwODc5LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDI6MDk6MDEuNjczMDg5MTE0WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzM4MDgzMCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VsZWN0IFVTQl9VU0JORVRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvdXNiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMjowOTowMS43MjA0NzczNTRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTkyNjg4Mzk5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaXQgd2VudDpcblxuKipFeGFtaW5pbmcgVVNCIE5ldHdvcmtpbmcgRGVwZW5kZW5jeSBpbiBLZXJuZWwgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBmb3IgdGhlIFVTQiBuZXR3b3JrIGRyaXZlci4gTGV0J3Mgc2VlLi4uIHRoZSBtb3N0IG9idmlvdXMgcGxhY2UgdG8gc3RhcnQgaXMgdGhlIGBLY29uZmlnYCBmaWxlIHdpdGhpbiB0aGUgYGRyaXZlcnMvbmV0L3VzYi9gIGRpcmVjdG9yeS4gVGhhdCdzIHdoZXJlIGFsbCB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZGVmaW5lZC4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgSSBuZWVkIHRvIGxvb2sgZm9yIGBkZXBlbmRzIG9uIFVTQl9VU0JORVRgLiBUaGlzIHdpbGwgc2hvdyBtZSB0aGUgY29uZGl0aW9ucyB0aGF0ICptdXN0KiBiZSBtZXQgZm9yIHRoZSBVU0IgbmV0d29yayBkcml2ZXIgdG8gYmUgc2VsZWN0YWJsZSBvciBidWlsdC4gS25vd2luZyB0aGUgZGVwZW5kZW5jaWVzIGlzIGNydWNpYWwgZm9yIHRyb3VibGVzaG9vdGluZyBjb25maWd1cmF0aW9uIGlzc3VlcywgdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBmZWF0dXJlIHNldCwgYW5kIGVuc3VyaW5nIHRoZSBjb3JyZWN0IG1vZHVsZXMgYXJlIGNvbXBpbGVkIHdoZW4gbmVlZGVkLiBUaGlzIHNob3VsZCB0ZWxsIG1lIHdoYXQgb3RoZXIgb3B0aW9ucyBuZWVkIHRvIGJlIGVuYWJsZWQgaW4gb3JkZXIgZm9yIG1lIHRvIHV0aWxpemUgVVNCIG5ldHdvcmtpbmcgZmVhdHVyZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMDk1LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDI6MDk6MDMuNjQ3MzY0Mjc0WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjgzMDk3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZXBlbmRzIG9uLipVU0JfVVNCTkVUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3VzYlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC91c2IvS2NvbmZpZz0xNjY9Y29uZmlnIFVTQl9ORVRfQVg4ODE3WFxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTE2Ny1cXHR0cmlzdGF0ZSBcXFwiQVNJWCBBWDg4eHh4IEJhc2VkIFVTQiAyLjAgRXRoZXJuZXQgQWRhcHRlcnNcXFwiXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6MTY4OlxcdGRlcGVuZHMgb24gVVNCX1VTQk5FVFxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTE2OS1cXHRzZWxlY3QgQ1JDMzJcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnPTE5OD1jb25maWcgVVNCX05FVF9BWDg4MTc5XzE3OEFcXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0xOTktXFx0dHJpc3RhdGUgXFxcIkFTSVggQVg4ODE3OS8xNzhBIFVTQiAzLjAvMi4wIHRvIEdpZ2FiaXQgRXRoZXJuZXRcXFwiXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6MjAwOlxcdGRlcGVuZHMgb24gVVNCX1VTQk5FVFxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTIwMS1cXHRzZWxlY3QgQ1JDMzJcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnPTIxNj1jb25maWcgVVNCX05FVF9DRENFVEhFUlxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTIxNy1cXHR0cmlzdGF0ZSBcXFwiQ0RDIEV0aGVybmV0IHN1cHBvcnQgKHNtYXJ0IGRldmljZXMgc3VjaCBhcyBjYWJsZSBtb2RlbXMpXFxcIlxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnOjIxODpcXHRkZXBlbmRzIG9uIFVTQl9VU0JORVRcXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0yMTktXFx0ZGVmYXVsdCB5XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZz0yNDQ9Y29uZmlnIFVTQl9ORVRfQ0RDX0VFTVxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTI0NS1cXHR0cmlzdGF0ZSBcXFwiQ0RDIEVFTSBzdXBwb3J0XFxcIlxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnOjI0NjpcXHRkZXBlbmRzIG9uIFVTQl9VU0JORVRcXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0yNDctXFx0aGVscFxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc9MjU4PWNvbmZpZyBVU0JfTkVUX0NEQ19OQ01cXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0yNTktXFx0dHJpc3RhdGUgXFxcIkNEQyBOQ00gc3VwcG9ydFxcXCJcXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZzoyNjA6XFx0ZGVwZW5kcyBvbiBVU0JfVVNCTkVUXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctMjYxLVxcdHNlbGVjdCBVU0JfTkVUX0NEQ0VUSEVSXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZz0yNzg9Y29uZmlnIFVTQl9ORVRfSFVBV0VJX0NEQ19OQ01cXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0yNzktXFx0dHJpc3RhdGUgXFxcIkh1YXdlaSBOQ00gZW1iZWRkZWQgQVQgY2hhbm5lbCBzdXBwb3J0XFxcIlxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnOjI4MDpcXHRkZXBlbmRzIG9uIFVTQl9VU0JORVRcXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0yODEtXFx0c2VsZWN0IFVTQl9XRE1cXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnPTI5Mz1jb25maWcgVVNCX05FVF9DRENfTUJJTVxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTI5NC1cXHR0cmlzdGF0ZSBcXFwiQ0RDIE1CSU0gc3VwcG9ydFxcXCJcXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZzoyOTU6XFx0ZGVwZW5kcyBvbiBVU0JfVVNCTkVUXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctMjk2LVxcdHNlbGVjdCBVU0JfV0RNXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZz0zMTE9Y29uZmlnIFVTQl9ORVRfRE05NjAxXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctMzEyLVxcdHRyaXN0YXRlIFxcXCJEYXZpY29tIERNOTZ4eCBiYXNlZCBVU0IgMTAvMTAwIGV0aGVybmV0IGRldmljZXNcXFwiXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6MzEzOlxcdGRlcGVuZHMgb24gVVNCX1VTQk5FVFxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTMxNC1cXHRzZWxlY3QgQ1JDMzJcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnPTMxOT1jb25maWcgVVNCX05FVF9TUjk3MDBcXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0zMjAtXFx0dHJpc3RhdGUgXFxcIkNvcmVDaGlwLXN6IFNSOTcwMCBiYXNlZCBVU0IgMS4xIDEwLzEwMCBldGhlcm5ldCBkZXZpY2VzXFxcIlxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnOjMyMTpcXHRkZXBlbmRzIG9uIFVTQl9VU0JORVRcXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0zMjItXFx0aGVscFxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc9MzI2PWNvbmZpZyBVU0JfTkVUX1NSOTgwMFxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTMyNy1cXHR0cmlzdGF0ZSBcXFwiQ29yZUNoaXAtc3ogU1I5ODAwIGJhc2VkIFVTQiAyLjAgMTAvMTAwIGV0aGVybmV0IGRldmljZXNcXFwiXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6MzI4OlxcdGRlcGVuZHMgb24gVVNCX1VTQk5FVFxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTMyOS1cXHRzZWxlY3QgQ1JDMzJcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnPTM0MT1jb25maWcgVVNCX05FVF9TTVNDNzVYWFxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTM0Mi1cXHR0cmlzdGF0ZSBcXFwiU01TQyBMQU43NVhYIGJhc2VkIFVTQiAyLjAgZ2lnYWJpdCBldGhlcm5ldCBkZXZpY2VzXFxcIlxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnOjM0MzpcXHRkZXBlbmRzIG9uIFVTQl9VU0JORVRcXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0zNDQtXFx0c2VsZWN0IEJJVFJFVkVSU0VcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnPTM1MT1jb25maWcgVVNCX05FVF9TTVNDOTVYWFxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTM1Mi1cXHR0cmlzdGF0ZSBcXFwiU01TQyBMQU45NVhYIGJhc2VkIFVTQiAyLjAgMTAvMTAwIGV0aGVybmV0IGRldmljZXNcXFwiXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6MzUzOlxcdGRlcGVuZHMgb24gVVNCX1VTQk5FVFxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTM1NC1cXHRzZWxlY3QgUEhZTElCXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZz0zNjQ9Y29uZmlnIFVTQl9ORVRfR0w2MjBBXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctMzY1LVxcdHRyaXN0YXRlIFxcXCJHZW5lU3lzIEdMNjIwVVNCLUEgYmFzZWQgY2FibGVzXFxcIlxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnOjM2NjpcXHRkZXBlbmRzIG9uIFVTQl9VU0JORVRcXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0zNjctXFx0aGVscFxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc9MzczPWNvbmZpZyBVU0JfTkVUX05FVDEwODBcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTM3NS1cXHRkZWZhdWx0IHlcXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZzozNzY6XFx0ZGVwZW5kcyBvbiBVU0JfVVNCTkVUXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctMzc3LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnPTM4Mj1jb25maWcgVVNCX05FVF9QTFVTQlxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctMzg1LVxcdCMgYXJlIGV2ZXIgcmVzb2x2ZWQgLi4uIHRoZW4gcmVtb3ZlIFxcXCJleHBlcmltZW50YWxcXFwiXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6Mzg2OlxcdGRlcGVuZHMgb24gVVNCX1VTQk5FVFxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTM4Ny1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZz0zOTE9Y29uZmlnIFVTQl9ORVRfTUNTNzgzMFxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTM5Mi1cXHR0cmlzdGF0ZSBcXFwiTW9zQ2hpcCBNQ1M3ODMwIGJhc2VkIEV0aGVybmV0IGFkYXB0ZXJzXFxcIlxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnOjM5MzpcXHRkZXBlbmRzIG9uIFVTQl9VU0JORVRcXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0zOTQtXFx0aGVscFxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc9Mzk5PWNvbmZpZyBVU0JfTkVUX1JORElTX0hPU1RcXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy00MDAtXFx0dHJpc3RhdGUgXFxcIkhvc3QgZm9yIFJORElTIGFuZCBBY3RpdmVTeW5jIGRldmljZXNcXFwiXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6NDAxOlxcdGRlcGVuZHMgb24gVVNCX1VTQk5FVFxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTQwMi1cXHRzZWxlY3QgVVNCX05FVF9DRENFVEhFUlxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc9NDE4PWNvbmZpZyBVU0JfTkVUX0NEQ19TVUJTRVRcXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy00MTktXFx0dHJpc3RhdGUgXFxcIlNpbXBsZSBVU0IgTmV0d29yayBMaW5rcyAoQ0RDIEV0aGVybmV0IHN1YnNldClcXFwiXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6NDIwOlxcdGRlcGVuZHMgb24gVVNCX1VTQk5FVFxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTQyMS1cXHRkZWZhdWx0IHlcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnPTQ5ND1jb25maWcgVVNCX05FVF9aQVVSVVNcXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy00OTUtXFx0dHJpc3RhdGUgXFxcIlNoYXJwIFphdXJ1cyAoc3RvY2sgUk9NcykgYW5kIGNvbXBhdGlibGVcXFwiXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6NDk2OlxcdGRlcGVuZHMgb24gVVNCX1VTQk5FVFxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTQ5Ny1cXHRzZWxlY3QgVVNCX05FVF9DRENFVEhFUlxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc9NTEyPWNvbmZpZyBVU0JfTkVUX0NYODIzMTBfRVRIXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctNTEzLVxcdHRyaXN0YXRlIFxcXCJDb25leGFudCBDWDgyMzEwIFVTQiBldGhlcm5ldCBwb3J0XFxcIlxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnOjUxNDpcXHRkZXBlbmRzIG9uIFVTQl9VU0JORVRcXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy01MTUtXFx0aGVscFxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc9NTIwPWNvbmZpZyBVU0JfTkVUX0tBTE1JQVxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTUyMS1cXHR0cmlzdGF0ZSBcXFwiU2Ftc3VuZyBLYWxtaWEgYmFzZWQgTFRFIFVTQiBtb2RlbVxcXCJcXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZzo1MjI6XFx0ZGVwZW5kcyBvbiBVU0JfVVNCTkVUXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctNTIzLVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnPTUzMD1jb25maWcgVVNCX05FVF9RTUlfV1dBTlxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTUzMS1cXHR0cmlzdGF0ZSBcXFwiUU1JIFdXQU4gZHJpdmVyIGZvciBRdWFsY29tbSBNU00gYmFzZWQgM0cgYW5kIExURSBtb2RlbXNcXFwiXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6NTMyOlxcdGRlcGVuZHMgb24gVVNCX1VTQk5FVFxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTUzMy1cXHRzZWxlY3QgVVNCX1dETVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc9NTYzPWNvbmZpZyBVU0JfTkVUX0lOVDUxWDFcXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy01NjQtXFx0dHJpc3RhdGUgXFxcIkludGVsbG9uIFBMQyBiYXNlZCB1c2IgYWRhcHRlclxcXCJcXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZzo1NjU6XFx0ZGVwZW5kcyBvbiBVU0JfVVNCTkVUXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctNTY2LVxcdHNlbGVjdCBVU0JfTkVUX0NEQ0VUSEVSXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZz01NzI9Y29uZmlnIFVTQl9DRENfUEhPTkVUXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctNTczLVxcdHRyaXN0YXRlIFxcXCJDREMgUGhvbmV0IHN1cHBvcnRcXFwiXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6NTc0OlxcdGRlcGVuZHMgb24gUEhPTkVUIFxcdTAwMjZcXHUwMDI2IFVTQl9VU0JORVRcXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy01NzUtXFx0aGVscFxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc9NTkwPWNvbmZpZyBVU0JfU0lFUlJBX05FVFxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTU5MS1cXHR0cmlzdGF0ZSBcXFwiVVNCLXRvLVdXQU4gRHJpdmVyIGZvciBTaWVycmEgV2lyZWxlc3MgbW9kZW1zXFxcIlxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnOjU5MjpcXHRkZXBlbmRzIG9uIFVTQl9VU0JORVRcXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy01OTMtXFx0aGVscFxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc9NjE0PWNvbmZpZyBVU0JfTkVUX0NIOTIwMFxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTYxNS1cXHR0cmlzdGF0ZSBcXFwiUWluZ0hlbmcgQ0g5MjAwIFVTQiBldGhlcm5ldCBzdXBwb3J0XFxcIlxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnOjYxNjpcXHRkZXBlbmRzIG9uIFVTQl9VU0JORVRcXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy02MTctXFx0c2VsZWN0IE1JSVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc9NjI1PWNvbmZpZyBVU0JfTkVUX0FRQzExMVxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTYyNi1cXHR0cmlzdGF0ZSBcXFwiQXF1YW50aWEgQVF0aW9uIFVTQiB0byA1LzIuNUdiRSBDb250cm9sbGVycyBzdXBwb3J0XFxcIlxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnOjYyNzpcXHRkZXBlbmRzIG9uIFVTQl9VU0JORVRcXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy02MjgtXFx0c2VsZWN0IENSQzMyXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAyOjA5OjAzLjY5NDIwMzAyNFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyOTM0NjM0NjU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVVNCIE5ldHdvcmsgRHJpdmVyIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIG15IGJyYWluIHplcm9lcyBpbiBvbiB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zOiBgQ09ORklHX1VTQl9VU0JORVRgLCBgQ09ORklHX1VTQl9ORVRfRFJJVkVSU2AsIGFuZCBvZiBjb3Vyc2UsIHRoZSBicm9hZGVyIGBDT05GSUdfVVNCYCBhbmQgYENPTkZJR19ORVRgLiBUaG9zZSBhcmUgdGhlIGdhdGVrZWVwZXJzIGhlcmU7IGlmIHRoZXkncmUgbm90IHNldCwgdGhpcyBwYXRjaCBpcyBhIG5vbi1zdGFydGVyLlxuXG5Ob3csIGxldCdzIGRpdmUgaW50byB0aGUgZ3V0cyBvZiB0aGUgY29kZS4gVGhlIHBhdGNoIHRvdWNoZXMgdHdvIGZ1bmN0aW9ucyB3aXRoaW4gYGRyaXZlcnMvbmV0L3VzYi91c2JuZXQuY2A6IGB1c2JuZXRfc2tiX3JldHVybmAgYW5kIGB0eF9jb21wbGV0ZWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZWlyIHJvbGVzIHdpdGhpbiB0aGUgVVNCIG5ldHdvcmsgZHJpdmVyLlxuXG5BIHF1aWNrIGNoZWNrIGNvbmZpcm1zIGB1c2JuZXRfc2tiX3JldHVybmAgaXMgZXhwb3J0ZWQsIG1lYW5pbmcgaXQncyBpbnRlbmRlZCB0byBiZSB1c2VkIGJ5IG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwuIEhvd2V2ZXIsIGB0eF9jb21wbGV0ZWAgaXMgc3RhdGljIHdpdGhpbiBgdXNibmV0LmNgLiBUaGlzIHRlbGxzIG1lIGltbWVkaWF0ZWx5IHRoYXQgaXQncyBhbiBpbnRlcm5hbCBmdW5jdGlvbiwgd2hpY2ggbmFycm93cyBkb3duIGl0cyBpbXBhY3QuXG5cbkJ1dCwgSSBzdGlsbCBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgbmFtZSBgdHhfY29tcGxldGVgIGlzbid0IHVzZWQgZWxzZXdoZXJlLCBjYXVzaW5nIHBvdGVudGlhbCBjb25mbGljdHMuIEknbGwgbmVlZCB0byBydW4gYSBxdWljayBncmVwIGFjcm9zcyB0aGUga2VybmVsIHNvdXJjZSB0byBjb25maXJtIHRoZSBzY29wZSBvZiB0aGlzIG5hbWUuIEl0J3MgcG9zc2libGUgSSd2ZSBzZWVuIGl0IHVzZWQgZWxzZXdoZXJlLCBhbmQgaXQncyBhbHdheXMgZ29vZCB0byBiZSB0aG9yb3VnaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM5NzQsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDI6MDk6MDYuNjI4ODQwNThaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2MzIyMTM2MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm9pZCB0eF9jb21wbGV0ZVxcXFwofHN0YXRpYyB2b2lkIHR4X2NvbXBsZXRlXFxcXChcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvdXNiL2NkYy1waG9uZXQuYz0yNT1zdHJ1Y3QgdXNicG5fZGV2IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9jZGMtcGhvbmV0LmMtNDEtXFxuZHJpdmVycy9uZXQvdXNiL2NkYy1waG9uZXQuYzo0MjpzdGF0aWMgdm9pZCB0eF9jb21wbGV0ZShzdHJ1Y3QgdXJiICpyZXEpO1xcbmRyaXZlcnMvbmV0L3VzYi9jZGMtcGhvbmV0LmMtNDMtc3RhdGljIHZvaWQgcnhfY29tcGxldGUoc3RydWN0IHVyYiAqcmVxKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9jZGMtcGhvbmV0LmM9NDg9c3RhdGljIG5ldGRldl90eF90IHVzYnBuX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9jZGMtcGhvbmV0LmMtODItXFxuZHJpdmVycy9uZXQvdXNiL2NkYy1waG9uZXQuYzo4MzpzdGF0aWMgdm9pZCB0eF9jb21wbGV0ZShzdHJ1Y3QgdXJiICpyZXEpXFxuZHJpdmVycy9uZXQvdXNiL2NkYy1waG9uZXQuYy04NC17XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jPTM1ODE9c3RhdGljIGVudW0gc2tiX3N0YXRlIGRlZmVyX2JoKHN0cnVjdCBsYW43OHh4X25ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0zNjA0LVxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM6MzYwNTpzdGF0aWMgdm9pZCB0eF9jb21wbGV0ZShzdHJ1Y3QgdXJiICp1cmIpXFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0zNjA2LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYz0xMTg0PXVzYm5ldF9kZWZlcnJlZF9rZXZlbnQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jLTEyOTQtXFxuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jOjEyOTU6c3RhdGljIHZvaWQgdHhfY29tcGxldGUoc3RydWN0IHVyYiAqdXJiKVxcbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYy0xMjk2LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2I0M2xlZ2FjeS9waW8uYz02Mz1zdGF0aWMgdm9pZCB0eF9kYXRhKHN0cnVjdCBiNDNsZWdhY3lfcGlvcXVldWUgKnF1ZXVlLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYjQzbGVnYWN5L3Bpby5jLTg4LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2I0M2xlZ2FjeS9waW8uYzo4OTpzdGF0aWMgdm9pZCB0eF9jb21wbGV0ZShzdHJ1Y3QgYjQzbGVnYWN5X3Bpb3F1ZXVlICpxdWV1ZSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9iNDNsZWdhY3kvcGlvLmMtOTAtXFx0XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX3ByaW50ZXIuYz0yNjU9c3RhdGljIHZvaWQgcnhfY29tcGxldGUoc3RydWN0IHVzYl9lcCAqZXAsIHN0cnVjdCB1c2JfcmVxdWVzdCAqcmVxKVxcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfcHJpbnRlci5jLTMxMy1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9wcmludGVyLmM6MzE0OnN0YXRpYyB2b2lkIHR4X2NvbXBsZXRlKHN0cnVjdCB1c2JfZXAgKmVwLCBzdHJ1Y3QgdXNiX3JlcXVlc3QgKnJlcSlcXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9wcmludGVyLmMtMzE1LXtcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91X2V0aGVyLmM9Mzk2PXN0YXRpYyB2b2lkIGV0aF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91X2V0aGVyLmMtNDA4LVxcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91X2V0aGVyLmM6NDA5OnN0YXRpYyB2b2lkIHR4X2NvbXBsZXRlKHN0cnVjdCB1c2JfZXAgKmVwLCBzdHJ1Y3QgdXNiX3JlcXVlc3QgKnJlcSlcXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdV9ldGhlci5jLTQxMC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAyOjA5OjA5LjI2MTA2MDM0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyODA4MTg2OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6XG5cbioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgQm90dGxlbmVja3MgaW4gVVNCIE5ldHdvcmsgVHJhbnNtaXNzaW9uKipcblxuT2theSwgc28gd2UncmUgc2VlaW5nIHBlcmZvcm1hbmNlIGlzc3VlcyB3aXRoIHRoZSBVU0IgbmV0d29yayBzdGFjay4gVGhlIGZpcnN0IHBsYWNlIG15IG1pbmQgbmF0dXJhbGx5IGdvZXMgaXMgdGhlIHRyYW5zbWlzc2lvbiBwYXRoLCBhbmQgaW4gcGFydGljdWxhciwgdGhlIGNhbGxiYWNrIGFzc29jaWF0ZWQgd2l0aCBzZW5kaW5nIGRhdGEuIEkgbmVlZCB0byBkaWcgaW50byB0aGUgZnVuY3Rpb24gcmVzcG9uc2libGUgZm9yIGluaXRpYXRpbmcgdHJhbnNtaXNzaW9uLCB3aGljaCBJIHRoaW5rIGlzIGB1c2JuZXRfc3RhcnRfeG1pdGAgaW4gdGhpcyBjb250ZXh0LCBvciBhbnkgb3RoZXIgZnVuY3Rpb24gdGhhdCBtaWdodCBiZSBjYWxsaW5nIG9yIHJlbHlpbmcgb24gYHR4X2NvbXBsZXRlYC4gSSB3YW50IHRvIGxvb2sgY2xvc2VseSBhdCBob3cgdGhhdCBjYWxsYmFjaywgYHR4X2NvbXBsZXRlYCwgaXMgYmVpbmcgdXNlZCBhbmQgd2hhdCBkZXBlbmRlbmNpZXMgaXQgaGFzLiBJcyB0aGVyZSBibG9ja2luZyBnb2luZyBvbj8gQXJlIHdlIHdhaXRpbmcgb24gbXV0ZXhlcywgb3Igb3RoZXIgb3BlcmF0aW9ucywgdGhhdCBjb3VsZCBiZSBzbG93aW5nIHVzIGRvd24/IEFyZSB3ZSBwZXJoYXBzIHRocmFzaGluZyBtZW1vcnkgYXMgY29tcGxldGlvbnMgYXJlIHByb2Nlc3NlZD8gV2UgbmVlZCB0byBsb29rIGZvciBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzLCBsaWtlIGV4Y2Vzc2l2ZSBjb3B5aW5nLCBvciBldmVuIHNpbXBsZSBtaXNzZWQgb3Bwb3J0dW5pdGllcyBmb3IgcGlwZWxpbmluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNlcXVlbmNpbmcgYW5kIGNyaXRpY2FsIHBhdGhzIHRvIGNvbmZpcm0gd2hldGhlciBteSBmaXJzdCBpbnN0aW5jdCBpcyBjb3JyZWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTMxMiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAyOjA5OjExLjU0MTg4MTgyNVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcxNzUwMTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidHhfY29tcGxldGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYz0xMTg0PXVzYm5ldF9kZWZlcnJlZF9rZXZlbnQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jLTEyOTQtXFxuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jOjEyOTU6c3RhdGljIHZvaWQgdHhfY29tcGxldGUoc3RydWN0IHVyYiAqdXJiKVxcbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYy0xMjk2LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYz0xNDAwPW5ldGRldl90eF90IHVzYm5ldF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmMtMTQzNi1cXHR1c2JfZmlsbF9idWxrX3VyYih1cmIsIGRldi1cXHUwMDNldWRldiwgZGV2LVxcdTAwM2VvdXQsXFxuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jOjE0Mzc6XFx0XFx0XFx0ICBza2ItXFx1MDAzZWRhdGEsIHNrYi1cXHUwMDNlbGVuLCB0eF9jb21wbGV0ZSwgc2tiKTtcXG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmMtMTQzOC1cXHRpZiAoZGV2LVxcdTAwM2VjYW5fZG1hX3NnKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAyOjA5OjExLjU4OTA2MjU3NFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2Mjk2MzAwODYzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipGb2N1c2luZyBvbiBVU0IgTmV0d29yayBEcml2ZXIgQ29tcGxldGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byByZWFsbHkgZGlnIGludG8gaG93IHRoZSBVU0IgbmV0d29yayBkcml2ZXIgaGFuZGxlcyBwYWNrZXQgcmV0dXJuIGFuZCB0cmFuc21pc3Npb24gY29tcGxldGlvbi4gYHVzYm5ldF9za2JfcmV0dXJuYCBhbmQgdGhlIHJlbGF0ZWQgYHR4X2NvbXBsZXRlYCBvciBgdXNibmV0X3N0YXJ0X3htaXRgIGZ1bmN0aW9ucyDigJMgdGhvc2UgZmVlbCBsaWtlIHRoZSBrZXkgcG9pbnRzIG9mIGZvY3VzIHJpZ2h0IG5vdy4gVGhleSdyZSBnb2luZyB0byBpbGx1bWluYXRlIHRoZSBjb3JlIG9mIHRoZSBkYXRhIGZsb3cuXG5cbk15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgY2xlYXI6IEknbSBnb2luZyB0byBzY2FuIHRoZSBgdXNibmV0LmNgIHNvdXJjZSBjb2RlLCBidXQgSSBhbHNvIG5lZWQgdG8gYnJhbmNoIG91dCBhbmQgbG9vayBhdCAqb3RoZXIqIG5ldHdvcmsgZHJpdmVycyB0aGF0IGludGVyZmFjZSB3aXRoIFVTQi4gSSdsbCBzZWFyY2ggZm9yIGFsbCB0aGUgY2FsbGVycyBvZiBgdXNibmV0X3NrYl9yZXR1cm5gLCB0byBnZXQgYSBjb21wbGV0ZSBwaWN0dXJlIG9mIHRoZSBsYW5kc2NhcGUuIFNlZSBob3cgb3RoZXIgZHJpdmVycyBhcmUgdXNpbmcgYW5kIGludGVyZmFjaW5nIHdpdGggdGhlIHVzYiBzdGFjay4gVGhpcyBicm9hZGVyIHBlcnNwZWN0aXZlIG1pZ2h0IGV4cG9zZSBhbnkgYXJjaGl0ZWN0dXJhbCBwYXR0ZXJucyBvciBwb3RlbnRpYWwgYm90dGxlbmVja3MgSSBzaG91bGQgYmUgYXdhcmUgb2YuIFRoZSBnb2FsIGlzIGEgY29tcHJlaGVuc2l2ZSB1bmRlcnN0YW5kaW5nLCBub3QganVzdCBhIG5hcnJvdyB2aWV3LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTg0NSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAyOjEwOjE0LjU1MjA3MzQ3NFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgxNjk0MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidXNibmV0X3NrYl9yZXR1cm5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvdXNiL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC91c2IvYXFjMTExLmM9MTA3Mj1zdGF0aWMgaW50IGFxYzExMV9yeF9maXh1cChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtMTE2Mi1cXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmM6MTE2MzpcXHRcXHR1c2JuZXRfc2tiX3JldHVybihkZXYsIG5ld19za2IpO1xcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy0xMTY0LVxcdFxcdGlmIChwa3RfY291bnQgPT0gMClcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jPTEzNj1pbnQgYXNpeF9yeF9maXh1cF9pbnRlcm5hbChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0yMjMtXFx0XFx0XFx0aWYgKCFyeC1cXHUwMDNlcmVtYWluaW5nKSB7XFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmM6MjI0OlxcdFxcdFxcdFxcdHVzYm5ldF9za2JfcmV0dXJuKGRldiwgcngtXFx1MDAzZWF4X3NrYik7XFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtMjI1LVxcdFxcdFxcdFxcdHJ4LVxcdTAwM2VheF9za2IgPSBOVUxMO1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzlfMTc4YS5jPTEzNTc9c3RhdGljIGludCBheDg4MTc5X3J4X2ZpeHVwKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9heDg4MTc5XzE3OGEuYy0xNDY2LVxcdFxcdGF4ODgxNzlfcnhfY2hlY2tzdW0oYXhfc2tiLCBwa3RfaGRyKTtcXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3OV8xNzhhLmM6MTQ2NzpcXHRcXHR1c2JuZXRfc2tiX3JldHVybihkZXYsIGF4X3NrYik7XFxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzlfMTc4YS5jLTE0NjgtXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvY2RjX2VlbS5jPTE1ND1zdGF0aWMgaW50IGVlbV9yeF9maXh1cChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvY2RjX2VlbS5jLTMxOS1cXHRcXHRcXHR9IGVsc2VcXG5kcml2ZXJzL25ldC91c2IvY2RjX2VlbS5jOjMyMDpcXHRcXHRcXHRcXHR1c2JuZXRfc2tiX3JldHVybihkZXYsIHNrYjIpO1xcbmRyaXZlcnMvbmV0L3VzYi9jZGNfZWVtLmMtMzIxLVxcdFxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9jZGNfbWJpbS5jPTQxMj1zdGF0aWMgaW50IGNkY19tYmltX3J4X2ZpeHVwKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYl9pbilcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9jZGNfbWJpbS5jLTQ4Ni1cXHRcXHRcXHRcXHRnb3RvIGVycm9yO1xcbmRyaXZlcnMvbmV0L3VzYi9jZGNfbWJpbS5jOjQ4NzpcXHRcXHRcXHR1c2JuZXRfc2tiX3JldHVybihkZXYsIHNrYik7XFxuZHJpdmVycy9uZXQvdXNiL2NkY19tYmltLmMtNDg4LVxcdFxcdFxcdHBheWxvYWQgKz0gbGVuO1xcdC8qIGNvdW50IHBheWxvYWQgYnl0ZXMgaW4gdGhpcyBOVEIgKi9cXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9jZGNfbmNtLmM9MTcyNz1pbnQgY2RjX25jbV9yeF9maXh1cChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2JfaW4pXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvY2RjX25jbS5jLTE4MjEtXFx0XFx0XFx0c2tiX3B1dF9kYXRhKHNrYiwgc2tiX2luLVxcdTAwM2VkYXRhICsgb2Zmc2V0LCBsZW4pO1xcbmRyaXZlcnMvbmV0L3VzYi9jZGNfbmNtLmM6MTgyMjpcXHRcXHRcXHR1c2JuZXRfc2tiX3JldHVybihkZXYsIHNrYik7XFxuZHJpdmVycy9uZXQvdXNiL2NkY19uY20uYy0xODIzLVxcdFxcdFxcdHBheWxvYWQgKz0gbGVuO1xcdC8qIGNvdW50IHBheWxvYWQgYnl0ZXMgaW4gdGhpcyBOVEIgKi9cXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9jeDgyMzEwX2V0aC5jPTI0Mz1zdGF0aWMgaW50IGN4ODIzMTBfcnhfZml4dXAoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2N4ODIzMTBfZXRoLmMtMjYyLVxcdFxcdCAgICAgICBkZXYtXFx1MDAzZXBhcnRpYWxfcmVtKTtcXG5kcml2ZXJzL25ldC91c2IvY3g4MjMxMF9ldGguYzoyNjM6XFx0XFx0dXNibmV0X3NrYl9yZXR1cm4oZGV2LCBza2IyKTtcXG5kcml2ZXJzL25ldC91c2IvY3g4MjMxMF9ldGguYy0yNjQtXFx0XFx0c2tiX3B1bGwoc2tiLCAoZGV2LVxcdTAwM2VwYXJ0aWFsX3JlbSArIDEpIFxcdTAwMjYgfjEpO1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2N4ODIzMTBfZXRoLmMtMzA2LVxcdFxcdC8qIHByb2Nlc3MgdGhlIHBhY2tldCAqL1xcbmRyaXZlcnMvbmV0L3VzYi9jeDgyMzEwX2V0aC5jOjMwNzpcXHRcXHR1c2JuZXRfc2tiX3JldHVybihkZXYsIHNrYjIpO1xcbmRyaXZlcnMvbmV0L3VzYi9jeDgyMzEwX2V0aC5jLTMwOC1cXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9nbDYyMGEuYz02Nz1zdGF0aWMgaW50IGdlbmVsaW5rX3J4X2ZpeHVwKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9nbDYyMGEuYy0xMTUtXFx0XFx0XFx0c2tiX3B1dF9kYXRhKGdsX3NrYiwgcGFja2V0LVxcdTAwM2VwYWNrZXRfZGF0YSwgc2l6ZSk7XFxuZHJpdmVycy9uZXQvdXNiL2dsNjIwYS5jOjExNjpcXHRcXHRcXHR1c2JuZXRfc2tiX3JldHVybihkZXYsIGdsX3NrYik7XFxuZHJpdmVycy9uZXQvdXNiL2dsNjIwYS5jLTExNy1cXHRcXHR9XFxuLS1cXG5kcml2ZXJzL25ldC91c2Iva2FsbWlhLmM9MjMwPWthbG1pYV9yeF9maXh1cChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5kcml2ZXJzL25ldC91c2Iva2FsbWlhLmMtMzI4LVxcdFxcdGVsc2Uge1xcbmRyaXZlcnMvbmV0L3VzYi9rYWxtaWEuYzozMjk6XFx0XFx0XFx0dXNibmV0X3NrYl9yZXR1cm4oZGV2LCBza2IyKTtcXG5kcml2ZXJzL25ldC91c2Iva2FsbWlhLmMtMzMwLVxcdFxcdFxcdHNrYl9wdWxsKHNrYiwgZXRoZXJfcGFja2V0X2xlbmd0aCk7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvbGctdmw2MDAuYz05Nj1zdGF0aWMgaW50IHZsNjAwX3J4X2ZpeHVwKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9sZy12bDYwMC5jLTIwNC1cXHRcXHRcXHRza2JfdHJpbShjbG9uZSwgcGFja2V0X2xlbik7XFxuZHJpdmVycy9uZXQvdXNiL2xnLXZsNjAwLmM6MjA1OlxcdFxcdFxcdHVzYm5ldF9za2JfcmV0dXJuKGRldiwgY2xvbmUpO1xcbmRyaXZlcnMvbmV0L3VzYi9sZy12bDYwMC5jLTIwNi1cXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9sZy12bDYwMC5jLTIxMS1cXHRcXHRcXHRpZiAocy1cXHUwMDNlY3VycmVudF9yeF9idWYpIHtcXG5kcml2ZXJzL25ldC91c2IvbGctdmw2MDAuYzoyMTI6XFx0XFx0XFx0XFx0dXNibmV0X3NrYl9yZXR1cm4oZGV2LCBidWYpO1xcbmRyaXZlcnMvbmV0L3VzYi9sZy12bDYwMC5jLTIxMy1cXHRcXHRcXHRcXHRzLVxcdTAwM2VjdXJyZW50X3J4X2J1ZiA9IE5VTEw7XFxuLS1cXG5kcml2ZXJzL25ldC91c2Ivcm5kaXNfaG9zdC5jPTQ5NT1pbnQgcm5kaXNfcnhfZml4dXAoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3JuZGlzX2hvc3QuYy01NDUtXFxuZHJpdmVycy9uZXQvdXNiL3JuZGlzX2hvc3QuYzo1NDY6XFx0XFx0dXNibmV0X3NrYl9yZXR1cm4oZGV2LCBza2IyKTtcXG5kcml2ZXJzL25ldC91c2Ivcm5kaXNfaG9zdC5jLTU0Ny1cXHR9XFxuZHJpdmVycy9uZXQvdXNiL3JuZGlzX2hvc3QuYy01NDgtXFxuZHJpdmVycy9uZXQvdXNiL3JuZGlzX2hvc3QuYzo1NDk6XFx0LyogY2FsbGVyIHdpbGwgdXNibmV0X3NrYl9yZXR1cm4gdGhlIHJlbWFpbmluZyBwYWNrZXQgKi9cXG5kcml2ZXJzL25ldC91c2Ivcm5kaXNfaG9zdC5jLTU1MC1cXHRpZiAodW5saWtlbHkoZHN0X21hY19maXh1cCkpXFxuLS1cXG5kcml2ZXJzL25ldC91c2Ivc2llcnJhX25ldC5jPTc5NT1zdGF0aWMgaW50IHNpZXJyYV9uZXRfcnhfZml4dXAoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3NpZXJyYV9uZXQuYy04NDItXFx0XFx0aWYgKG5ld19za2IpXFxuZHJpdmVycy9uZXQvdXNiL3NpZXJyYV9uZXQuYzo4NDM6XFx0XFx0XFx0dXNibmV0X3NrYl9yZXR1cm4oZGV2LCBuZXdfc2tiKTtcXG5kcml2ZXJzL25ldC91c2Ivc2llcnJhX25ldC5jLTg0NC1cXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9zbXNjNzV4eC5jPTIxNzE9c3RhdGljIGludCBzbXNjNzV4eF9yeF9maXh1cChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5kcml2ZXJzL25ldC91c2Ivc21zYzc1eHguYy0yMjQyLVxcbmRyaXZlcnMvbmV0L3VzYi9zbXNjNzV4eC5jOjIyNDM6XFx0XFx0XFx0dXNibmV0X3NrYl9yZXR1cm4oZGV2LCBheF9za2IpO1xcbmRyaXZlcnMvbmV0L3VzYi9zbXNjNzV4eC5jLTIyNDQtXFx0XFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmM9MTg3OD1zdGF0aWMgaW50IHNtc2M5NXh4X3J4X2ZpeHVwKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jLTE5NDktXFxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmM6MTk1MDpcXHRcXHRcXHR1c2JuZXRfc2tiX3JldHVybihkZXYsIGF4X3NrYik7XFxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmMtMTk1MS1cXHRcXHR9XFxuLS1cXG5kcml2ZXJzL25ldC91c2Ivc3I5NzAwLmM9MzIzPXN0YXRpYyBpbnQgc3I5NzAwX3J4X2ZpeHVwKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9zcjk3MDAuYy0zNzQtXFx0XFx0bWVtY3B5KHNyX3NrYi1cXHUwMDNlZGF0YSwgc2tiLVxcdTAwM2VkYXRhICsgMywgbGVuKTtcXG5kcml2ZXJzL25ldC91c2Ivc3I5NzAwLmM6Mzc1OlxcdFxcdHVzYm5ldF9za2JfcmV0dXJuKGRldiwgc3Jfc2tiKTtcXG5kcml2ZXJzL25ldC91c2Ivc3I5NzAwLmMtMzc2LVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3NyOTgwMC5jPTYyPXN0YXRpYyBpbnQgc3JfcnhfZml4dXAoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3NyOTgwMC5jLTk1LVxcdFxcdG1lbWNweShzcl9za2ItXFx1MDAzZWRhdGEsIHNrYi1cXHUwMDNlZGF0YSArIG9mZnNldCwgc2l6ZSk7XFxuZHJpdmVycy9uZXQvdXNiL3NyOTgwMC5jOjk2OlxcdFxcdHVzYm5ldF9za2JfcmV0dXJuKGRldiwgc3Jfc2tiKTtcXG5kcml2ZXJzL25ldC91c2Ivc3I5ODAwLmMtOTctXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmM9MzEyPXN0YXRpYyB2b2lkIF9fdXNibmV0X3N0YXR1c19zdG9wX2ZvcmNlKHN0cnVjdCB1c2JuZXQgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYy0zMjUtICovXFxuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jOjMyNjp2b2lkIHVzYm5ldF9za2JfcmV0dXJuKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmMtMzI3LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYy0zNTgtfVxcbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYzozNTk6RVhQT1JUX1NZTUJPTF9HUEwodXNibmV0X3NrYl9yZXR1cm4pO1xcbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYy0zNjAtXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmM9NTcwPXN0YXRpYyBpbmxpbmUgaW50IHJ4X3Byb2Nlc3Moc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jLTU5MS1cXG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmM6NTkyOlxcdHVzYm5ldF9za2JfcmV0dXJuKGRldiwgc2tiKTtcXG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmMtNTkzLVxcdHJldHVybiAwO1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jPTY5OD12b2lkIHVzYm5ldF9yZXN1bWVfcngoc3RydWN0IHVzYm5ldCAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jLTcwNi1cXHR3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKFxcdTAwMjZkZXYtXFx1MDAzZXJ4cV9wYXVzZSkpICE9IE5VTEwpIHtcXG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmM6NzA3OlxcdFxcdHVzYm5ldF9za2JfcmV0dXJuKGRldiwgc2tiKTtcXG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmMtNzA4LVxcdFxcdG51bSsrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMjoxMDoxNC42MDAyNTA0NDRaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzgwODA2NzIxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBhIFJlY2VudCBVU0IgTmV0d29ya2luZyBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCwgcmlnaHQgb2ZmIHRoZSBiYXQsIEkgbmVlZCB0byB6ZXJvIGluIG9uIGEgY291cGxlIG9mIGNydWNpYWwgc3ltYm9sczogYHVzYm5ldF9za2JfcmV0dXJuYCBhbmQgYHR4X2NvbXBsZXRlYCwgb3IsIGluIHNvbWUgY2FzZXMsIGB1c2JuZXRfc3RhcnRfeG1pdGAuIExldCdzIGNvbmZpcm0gdGhhdCBgdHhfY29tcGxldGVgIGlzIGluZGVlZCBpbiBgdXNibmV0LmNgLiBBaGEsIHRoZXJlIGl0IGlzLCBsaW5lIDEyOTUuIEdvb2QuXG5cbk5vdywgYmVmb3JlIEkgZGl2ZSB0b28gZGVlcCwgbGV0J3MgbWFrZSBzdXJlIEkgaGF2ZSBhbGwgdGhlIHByZXJlcXVpc2l0ZXMgY292ZXJlZC4gU2VlbXMgdGhlIHN5c3RlbSBmbGFnZ2VkIGl0IGFzIGBXb3J0aEZ1enppbmc6IHRydWVgLCB3aGljaCBpcyBhIGdvb2QgaW5pdGlhbCBzaWduLiBUaGUgYEZvY3VzU3ltYm9sc2AgYXJlIHNwb3Qgb24sIGV4YWN0bHkgd2hhdCBJIGV4cGVjdGVkLiBUaGUgY29ycmVjdCBjb25maWdzIGFyZSBlbmFibGVkOiBgVVNCX1VTQk5FVGAsIGFuZCBgVVNCX05FVF9EUklWRVJTYC4gR29vZCwgZ29vZC4gVGhlc2UgYXJlIHRoZSBzcGVjaWZpYyBvbmVzLCB0aG91Z2ggYFVTQmAgYW5kIGBORVRgIGluIGdlbmVyYWwgd291bGQgYWxzbyBzdWZmaWNlLlxuXG5BbHJpZ2h0LCBsZXQncyBkbyBhIGZpbmFsIHNhbml0eSBjaGVjayBvZiB0aGUgY29yZSByZWFzb25pbmcgYmVoaW5kIHRoaXMgY2hhbmdlLiBUaGUgcGF0Y2gsIGFzIEkgdW5kZXJzdGFuZCBpdCwgaXMgZmlkZGxpbmcgd2l0aCBob3cgcGVyLUNQVSA2NC1iaXQgc3RhdHMgYXJlIHVwZGF0ZWQuIFNwZWNpZmljYWxseSwgaXQncyBtb2RpZnlpbmcgdGhlIGxvZ2ljIHdpdGhpbiB0aGUgYHVzYm5ldF9za2JfcmV0dXJuKClgIGFuZCBgdHhfY29tcGxldGUoKWAgZnVuY3Rpb25zIHdpdGhpbiB0aGUgY29yZSBVU0IgbmV0d29ya2luZyBkcml2ZXIsIGB1c2JuZXQuY2AuIEl0J3MgYSBzd2l0Y2hlcm9vIGZyb20gdXNpbmcgYHU2NF9zdGF0c191cGRhdGVfYmVnaW5faXJxc2F2ZSgpYCB0byBgZ2V0X2NwdV9wdHIoKWAgY29tYmluZWQgd2l0aCBgdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbigpYC4gVGhpcyBzaGlmdCBhbHRlcnMgdGhlIHN5bmNocm9uaXphdGlvbiwgcHJlZW1wdGlvbiwgYW5kIElSUSBoYW5kbGluZyBzZW1hbnRpY3MgaW4gYXJlYXMgb2YgbmV0d29yayBjb2RlIHRoYXQgYXJlIGFjY2Vzc2libGUgdmlhIGVtdWxhdGVkIFVTQiBkZXZpY2VzIGFuZCBzdWJzZXF1ZW50IG5ldHdvcmsgdHJhZmZpYy5cblxuT2theSwgdGhhdCBhbGwgbWFrZXMgc2Vuc2UuIFRpbWUgdG8gcmVjb3JkIHRoZSByZXN1bHRzLiBJJ2xsIGNhbGwgYHNldC1yZXN1bHRzYCBub3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MDMzLCJPdXRwdXRUb2tlbnMiOjE2MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMjoxMDoxOC40MDgzMjA1NDZaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3OTI2OTk3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVVNCX1VTQk5FVFwiLFxuICAgIFwiVVNCX05FVF9EUklWRVJTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidXNibmV0X3NrYl9yZXR1cm5cIixcbiAgICBcInR4X2NvbXBsZXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgcGVyLUNQVSA2NC1iaXQgbmV0d29yayBzdGF0aXN0aWNzIHVwZGF0ZSBzeW5jaHJvbml6YXRpb24gaW4gdXNibmV0X3NrYl9yZXR1cm4gYW5kIHR4X2NvbXBsZXRlIChkcml2ZXJzL25ldC91c2IvdXNibmV0LmMpLCByZXBsYWNpbmcgSVJRLXNhdmluZyB1NjRfc3RhdHMgaGVscGVycyB3aXRoIGdldF9jcHVfcHRyL3B1dF9jcHVfcHRyIHBhaXJzIGFuZCB1NjRfc3RhdHNfdXBkYXRlX2JlZ2luL2VuZC4gVGhpcyB0b3VjaGVzIHJlYWNoYWJsZSBVU0IgbmV0d29ya2luZyBkcml2ZXIgbG9naWMgdGhhdCBjYW4gYmUgdGVzdGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB3aXRoIGVtdWxhdGVkIFVTQiBuZXR3b3JrIGRldmljZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVVNCX1VTQk5FVFwiLFxuICAgIFwiVVNCX05FVF9EUklWRVJTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidXNibmV0X3NrYl9yZXR1cm5cIixcbiAgICBcInR4X2NvbXBsZXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgcGVyLUNQVSA2NC1iaXQgbmV0d29yayBzdGF0aXN0aWNzIHVwZGF0ZSBzeW5jaHJvbml6YXRpb24gaW4gdXNibmV0X3NrYl9yZXR1cm4gYW5kIHR4X2NvbXBsZXRlIChkcml2ZXJzL25ldC91c2IvdXNibmV0LmMpLCByZXBsYWNpbmcgSVJRLXNhdmluZyB1NjRfc3RhdHMgaGVscGVycyB3aXRoIGdldF9jcHVfcHRyL3B1dF9jcHVfcHRyIHBhaXJzIGFuZCB1NjRfc3RhdHNfdXBkYXRlX2JlZ2luL2VuZC4gVGhpcyB0b3VjaGVzIHJlYWNoYWJsZSBVU0IgbmV0d29ya2luZyBkcml2ZXIgbG9naWMgdGhhdCBjYW4gYmUgdGVzdGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB3aXRoIGVtdWxhdGVkIFVTQiBuZXR3b3JrIGRldmljZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAyOjEwOjE4LjQ4NzU5Nzg4NVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg1NjIyNzMxMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMjoxMDoxOC40ODgwNzUwOTVaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxODU2MTc5MjIxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgcGVyLUNQVSBuZXR3b3JrIHN0YXRpc3RpY3MgYWNjb3VudGluZyBpbiBkcml2ZXJzL25ldC91c2IvdXNibmV0LmMsIHJlcGxhY2luZyB0aGlzX2NwdV9wdHIoKSBhbmQgaXJxc2F2ZS9pcnFyZXN0b3JlIDY0LWJpdCBzdGF0cyB1cGRhdGUgaGVscGVycyB3aXRoIGdldF9jcHVfcHRyKCksIHU2NF9zdGF0c191cGRhdGVfYmVnaW4vZW5kKCksIGFuZCBwdXRfY3B1X3B0cigpLiBUaGlzIGVuc3VyZXMgcHJlZW1wdGlvbiBpcyBwcm9wZXJseSBkaXNhYmxlZCB3aGlsZSBhY2Nlc3NpbmcgdGhlIHBlci1DUFUgcG9pbnRlci5cXG5cXG5UaGUgY2hhbmdlcyBkbyBub3QgYWxsb2NhdGUgbmV3IGJ1ZmZlcnMsIG1hbmlwdWxhdGUgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGFsdGVyIGJ1ZmZlciBsZW5ndGgvYm91bmRzIGNhbGN1bGF0aW9ucywgb3IgY29weSBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm8tbGVhayByaXNrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIEtNU0FOIGZ1enppbmcuIEFueSBwb3RlbnRpYWwgc3luY2hyb25pemF0aW9uIG9yIHByZWVtcHRpb24gYnVncyB3b3VsZCBiZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dlcnMgKERFQlVHX1BSRUVNUFQsIExPQ0tERVAsIEtBU0FOKS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA2MTU2NWFjNDljOTg0YmU0MGQyMTIzY2EwMDlkYjJhY2Q3NDI3NzUwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgOCAwMjowNzoyNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi91c2JuZXQuYyBiL2RyaXZlcnMvbmV0L3VzYi91c2JuZXQuY1xuaW5kZXggYTE5ZWNmNzE4ZjM2YS4uM2RmNzJiMGM2YmNmYyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3VzYi91c2JuZXQuY1xuKysrIGIvZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jXG5AQCAtMzI1LDggKzMyNSw3IEBAIHN0YXRpYyB2b2lkIF9fdXNibmV0X3N0YXR1c19zdG9wX2ZvcmNlKHN0cnVjdCB1c2JuZXQgKmRldilcbiAgKi9cbiB2b2lkIHVzYm5ldF9za2JfcmV0dXJuKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG4tXHRzdHJ1Y3QgcGNwdV9zd19uZXRzdGF0cyAqc3RhdHM2NCA9IHRoaXNfY3B1X3B0cihkZXYtXHUwMDNlbmV0LVx1MDAzZXRzdGF0cyk7XG4tXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuK1x0c3RydWN0IHBjcHVfc3dfbmV0c3RhdHMgKnN0YXRzNjQ7XG4gXHRpbnRcdHN0YXR1cztcbiBcbiBcdGlmICh0ZXN0X2JpdChFVkVOVF9SWF9QQVVTRUQsIFx1MDAyNmRldi1cdTAwM2VmbGFncykpIHtcbkBAIC0zMzgsMTAgKzMzNywxMiBAQCB2b2lkIHVzYm5ldF9za2JfcmV0dXJuKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdGlmIChza2ItXHUwMDNlcHJvdG9jb2wgPT0gMClcbiBcdFx0c2tiLVx1MDAzZXByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBkZXYtXHUwMDNlbmV0KTtcbiBcbi1cdGZsYWdzID0gdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbl9pcnFzYXZlKFx1MDAyNnN0YXRzNjQtXHUwMDNlc3luY3ApO1xuK1x0c3RhdHM2NCA9IGdldF9jcHVfcHRyKGRldi1cdTAwM2VuZXQtXHUwMDNldHN0YXRzKTtcbitcdHU2NF9zdGF0c191cGRhdGVfYmVnaW4oXHUwMDI2c3RhdHM2NC1cdTAwM2VzeW5jcCk7XG4gXHR1NjRfc3RhdHNfaW5jKFx1MDAyNnN0YXRzNjQtXHUwMDNlcnhfcGFja2V0cyk7XG4gXHR1NjRfc3RhdHNfYWRkKFx1MDAyNnN0YXRzNjQtXHUwMDNlcnhfYnl0ZXMsIHNrYi1cdTAwM2VsZW4pO1xuLVx0dTY0X3N0YXRzX3VwZGF0ZV9lbmRfaXJxcmVzdG9yZShcdTAwMjZzdGF0czY0LVx1MDAzZXN5bmNwLCBmbGFncyk7XG4rXHR1NjRfc3RhdHNfdXBkYXRlX2VuZChcdTAwMjZzdGF0czY0LVx1MDAzZXN5bmNwKTtcbitcdHB1dF9jcHVfcHRyKGRldi1cdTAwM2VuZXQtXHUwMDNldHN0YXRzKTtcbiBcbiBcdG5ldGlmX2RiZyhkZXYsIHJ4X3N0YXR1cywgZGV2LVx1MDAzZW5ldCwgXCJcdTAwM2MgcngsIGxlbiAlenUsIHR5cGUgMHgleFxcblwiLFxuIFx0XHQgIHNrYi1cdTAwM2VsZW4gKyBzaXplb2Yoc3RydWN0IGV0aGhkciksIHNrYi1cdTAwM2Vwcm90b2NvbCk7XG5AQCAtMTI5OCwxMyArMTI5OSwxNCBAQCBzdGF0aWMgdm9pZCB0eF9jb21wbGV0ZShzdHJ1Y3QgdXJiICp1cmIpXG4gXHRzdHJ1Y3QgdXNibmV0XHRcdCpkZXYgPSBlbnRyeS1cdTAwM2VkZXY7XG4gXG4gXHRpZiAodXJiLVx1MDAzZXN0YXR1cyA9PSAwKSB7XG4tXHRcdHN0cnVjdCBwY3B1X3N3X25ldHN0YXRzICpzdGF0czY0ID0gdGhpc19jcHVfcHRyKGRldi1cdTAwM2VuZXQtXHUwMDNldHN0YXRzKTtcbi1cdFx0dW5zaWduZWQgbG9uZyBmbGFncztcbitcdFx0c3RydWN0IHBjcHVfc3dfbmV0c3RhdHMgKnN0YXRzNjQ7XG4gXG4tXHRcdGZsYWdzID0gdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbl9pcnFzYXZlKFx1MDAyNnN0YXRzNjQtXHUwMDNlc3luY3ApO1xuK1x0XHRzdGF0czY0ID0gZ2V0X2NwdV9wdHIoZGV2LVx1MDAzZW5ldC1cdTAwM2V0c3RhdHMpO1xuK1x0XHR1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKFx1MDAyNnN0YXRzNjQtXHUwMDNlc3luY3ApO1xuIFx0XHR1NjRfc3RhdHNfYWRkKFx1MDAyNnN0YXRzNjQtXHUwMDNldHhfcGFja2V0cywgZW50cnktXHUwMDNlcGFja2V0cyk7XG4gXHRcdHU2NF9zdGF0c19hZGQoXHUwMDI2c3RhdHM2NC1cdTAwM2V0eF9ieXRlcywgZW50cnktXHUwMDNlbGVuZ3RoKTtcbi1cdFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmRfaXJxcmVzdG9yZShcdTAwMjZzdGF0czY0LVx1MDAzZXN5bmNwLCBmbGFncyk7XG4rXHRcdHU2NF9zdGF0c191cGRhdGVfZW5kKFx1MDAyNnN0YXRzNjQtXHUwMDNlc3luY3ApO1xuK1x0XHRwdXRfY3B1X3B0cihkZXYtXHUwMDNlbmV0LVx1MDAzZXRzdGF0cyk7XG4gXHR9IGVsc2Uge1xuIFx0XHRkZXYtXHUwMDNlbmV0LVx1MDAzZXN0YXRzLnR4X2Vycm9ycysrO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDI6MTA6MTguNDg4MDc2Mjk1WiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjExMjQ2NzEwNzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIEtNU0FOIEZ1enppbmcgTmVlZHMqKlxuXG5Pa2F5LCBsZXQncyB0YWtlIGEgbG9vayBhdCB0aGlzIHBhdGNoIGFuZCBkZWNpZGUgaWYgd2UgbmVlZCB0byBjb25zaWRlciBLTVNBTiBmdXp6aW5nLiBJdCBhcHBlYXJzIHRoZSBjaGFuZ2VzIGFyZSBjb25maW5lZCB0byBgZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jYC4gU3BlY2lmaWNhbGx5LCB0aGV5J3ZlIHRvdWNoZWQgdGhlIGB1c2JuZXRfc2tiX3JldHVybmAgYW5kIGB0eF9jb21wbGV0ZWAgZnVuY3Rpb25zLlxuXG5JIGNhbiBzZWUgd2hhdCdzIGNoYW5nZWQgaW4gdGhlIGNvZGU6IHRoZXkndmUgbW92ZWQgZnJvbSB1c2luZyBgdGhpc19jcHVfcHRyYCB3aXRoIGludGVycnVwdCBzYXZlL3Jlc3RvcmUgYXJvdW5kIHRoZSBzdGF0cyB1cGRhdGUsIHRvIHVzaW5nIGBnZXRfY3B1X3B0cmAvYHB1dF9jcHVfcHRyYCBhbmQgdGhlIG5ld2VyIGB1NjRfc3RhdHNfdXBkYXRlX2JlZ2luYC9gZW5kYCBmdW5jdGlvbnMuIFNvLCB0aGV5J3JlIGV4cGxpY2l0bHkgb2J0YWluaW5nIHRoZSBwZXItQ1BVIHN0YXRpc3RpY3MgcG9pbnRlciBub3cuIEl0J3MgYSBzdHJhaWdodGZvcndhcmQgY2hhbmdlLCBsaWtlbHkgYWltZWQgYXQgaW1wcm92aW5nIHBlcmZvcm1hbmNlIG9yIGFsaWduaW5nIHdpdGggYSBuZXdlciBsb2NraW5nIHNjaGVtZSB3aXRoaW4gdGhlIGtlcm5lbCBzdGF0aXN0aWNzIGluZnJhc3RydWN0dXJlLiBUaGUgb2xkIGNvZGUgd2FzOiBvYnRhaW5pbmcgdGhlIHBlci1jcHUgdmFyaWFibGUgKmJlZm9yZSogc2F2aW5nIGludGVycnVwdHMsIHVwZGF0aW5nLCBhbmQgcmVzdG9yaW5nIGludGVycnVwdHMgdG8gYmUgc2FmZS4gVGhlIG5ldyBjb2RlIGlzOiBvYnRhaW5pbmcgdGhlIHBlci1jcHUgdmFyaWFibGUsIHVwZGF0aW5nIGl0LCBhbmQgKnRoZW4qIHJldHVybmluZyB0aGUgY3B1IHZhcmlhYmxlLlxuXG5HaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBjaGFuZ2UsIGl0J3MgYSByZWZhY3RvcmluZywgdG91Y2hpbmcgb24gc3luY2hyb25pemF0aW9uIGFuZCBwZXItQ1BVIGRhdGEuIEl0J3MgbGlrZWx5IHRoYXQgaXQncyBva2F5LCBidXQgaXQgZG9lcyB0b3VjaCBhIHNlbnNpdGl2ZSBhcmVhLCBhbmQgdGhlc2Uga2luZHMgb2YgY2hhbmdlcyBjYW4gYWx3YXlzIGludHJvZHVjZSBzdWJ0bGUgY29uY3VycmVuY3kgaXNzdWVzLiBJdCdzIHdvcnRoIGEgcXVpY2sgY2hlY2sgd2l0aCBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAganVzdCB0byBnZXQgYSBicm9hZGVyIHZpZXcgb2YgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gYGRyaXZlcnMvbmV0L3VzYi91c2JuZXQuY2AgdG8gbG9vayBmb3IgYW55IHJlbGF0ZWQgaXNzdWVzLiBXaGlsZSB0aGUgY2hhbmdlIHNlZW1zIHJlYXNvbmFibGUgb24gaXRzIG93biwgYSBxdWljayBjb250ZXh0dWFsIGluc3BlY3Rpb24gaXMgYWx3YXlzIGEgZ29vZCBwcmFjdGljZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjcxNiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAyOjEwOjI5LjczNDc4OTc4NVoiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTA3MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMyMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDMyMDpcXHR9XFxuIDMyMTpcXHRcXG4gMzIyOlxcdC8qIFBhc3NlcyB0aGlzIHBhY2tldCB1cCB0aGUgc3RhY2ssIHVwZGF0aW5nIGl0cyBhY2NvdW50aW5nLlxcbiAzMjM6XFx0ICogU29tZSBsaW5rIHByb3RvY29scyBiYXRjaCBwYWNrZXRzLCBzbyB0aGVpciByeF9maXh1cCBwYXRoc1xcbiAzMjQ6XFx0ICogY2FuIHJldHVybiBjbG9uZXMgYXMgd2VsbCBhcyBqdXN0IG1vZGlmeSB0aGUgb3JpZ2luYWwgc2tiLlxcbiAzMjU6XFx0ICovXFxuIDMyNjpcXHR2b2lkIHVzYm5ldF9za2JfcmV0dXJuKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gMzI3OlxcdHtcXG4gMzI4OlxcdFxcdHN0cnVjdCBwY3B1X3N3X25ldHN0YXRzICpzdGF0czY0O1xcbiAzMjk6XFx0XFx0aW50XFx0c3RhdHVzO1xcbiAzMzA6XFx0XFxuIDMzMTpcXHRcXHRpZiAodGVzdF9iaXQoRVZFTlRfUlhfUEFVU0VELCBcXHUwMDI2ZGV2LVxcdTAwM2VmbGFncykpIHtcXG4gMzMyOlxcdFxcdFxcdHNrYl9xdWV1ZV90YWlsKFxcdTAwMjZkZXYtXFx1MDAzZXJ4cV9wYXVzZSwgc2tiKTtcXG4gMzMzOlxcdFxcdFxcdHJldHVybjtcXG4gMzM0OlxcdFxcdH1cXG4gMzM1OlxcdFxcbiAzMzY6XFx0XFx0Lyogb25seSB1cGRhdGUgaWYgdW5zZXQgdG8gYWxsb3cgbWluaWRyaXZlciByeF9maXh1cCBvdmVycmlkZSAqL1xcbiAzMzc6XFx0XFx0aWYgKHNrYi1cXHUwMDNlcHJvdG9jb2wgPT0gMClcXG4gMzM4OlxcdFxcdFxcdHNrYi1cXHUwMDNlcHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldi1cXHUwMDNlbmV0KTtcXG4gMzM5OlxcdFxcbiAzNDA6XFx0XFx0c3RhdHM2NCA9IGdldF9jcHVfcHRyKGRldi1cXHUwMDNlbmV0LVxcdTAwM2V0c3RhdHMpO1xcbiAzNDE6XFx0XFx0dTY0X3N0YXRzX3VwZGF0ZV9iZWdpbihcXHUwMDI2c3RhdHM2NC1cXHUwMDNlc3luY3ApO1xcbiAzNDI6XFx0XFx0dTY0X3N0YXRzX2luYyhcXHUwMDI2c3RhdHM2NC1cXHUwMDNlcnhfcGFja2V0cyk7XFxuIDM0MzpcXHRcXHR1NjRfc3RhdHNfYWRkKFxcdTAwMjZzdGF0czY0LVxcdTAwM2VyeF9ieXRlcywgc2tiLVxcdTAwM2VsZW4pO1xcbiAzNDQ6XFx0XFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmQoXFx1MDAyNnN0YXRzNjQtXFx1MDAzZXN5bmNwKTtcXG4gMzQ1OlxcdFxcdHB1dF9jcHVfcHRyKGRldi1cXHUwMDNlbmV0LVxcdTAwM2V0c3RhdHMpO1xcbiAzNDY6XFx0XFxuIDM0NzpcXHRcXHRuZXRpZl9kYmcoZGV2LCByeF9zdGF0dXMsIGRldi1cXHUwMDNlbmV0LCBcXFwiXFx1MDAzYyByeCwgbGVuICV6dSwgdHlwZSAweCV4XFxcXG5cXFwiLFxcbiAzNDg6XFx0XFx0XFx0ICBza2ItXFx1MDAzZWxlbiArIHNpemVvZihzdHJ1Y3QgZXRoaGRyKSwgc2tiLVxcdTAwM2Vwcm90b2NvbCk7XFxuIDM0OTpcXHRcXHRtZW1zZXQoc2tiLVxcdTAwM2VjYiwgMCwgc2l6ZW9mKHN0cnVjdCBza2JfZGF0YSkpO1xcbiAzNTA6XFx0XFxuIDM1MTpcXHRcXHRpZiAoc2tiX2RlZmVyX3J4X3RpbWVzdGFtcChza2IpKVxcbiAzNTI6XFx0XFx0XFx0cmV0dXJuO1xcbiAzNTM6XFx0XFxuIDM1NDpcXHRcXHRzdGF0dXMgPSBuZXRpZl9yeCAoc2tiKTtcXG4gMzU1OlxcdFxcdGlmIChzdGF0dXMgIT0gTkVUX1JYX1NVQ0NFU1MpXFxuIDM1NjpcXHRcXHRcXHRuZXRpZl9kYmcoZGV2LCByeF9lcnIsIGRldi1cXHUwMDNlbmV0LFxcbiAzNTc6XFx0XFx0XFx0XFx0ICBcXFwibmV0aWZfcnggc3RhdHVzICVkXFxcXG5cXFwiLCBzdGF0dXMpO1xcbiAzNTg6XFx0fVxcbiAzNTk6XFx0RVhQT1JUX1NZTUJPTF9HUEwodXNibmV0X3NrYl9yZXR1cm4pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMjoxMDoyOS43MzQ5MDIyNTVaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQ0NjM4NDkyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkFuYWx5emluZyB0aGUgSW1wb3J0YW5jZSBvZiBgdHhfY29tcGxldGVgKipcblxuQWxyaWdodCwgc28gd2UndmUgY292ZXJlZCB0aGUgYmFzaWNzLCBidXQgbm93IEkgbmVlZCB0byBkaWcgZGVlcGVyLiBJJ20gdGhpbmtpbmcsIGxldCdzIG5vdCBqdXN0IGdsb3NzIG92ZXIgdGhpbmdzIOKAkyBpdCdzIGNydWNpYWwgd2UgYWxzbyB0aG9yb3VnaGx5IGV4YW1pbmUgdGhlIGB0eF9jb21wbGV0ZWAgZmllbGQgb3IgZnVuY3Rpb24sIHdoYXRldmVyIGl0J3MgY2FsbGVkIGluIHRoaXMgc3BlY2lmaWMgY29udGV4dC4gVW5kZXJzdGFuZGluZyB0aGUgbnVhbmNlcyBvZiB0cmFuc2FjdGlvbiBjb21wbGV0aW9uIGlzIGFic29sdXRlbHkgY3JpdGljYWwuIEkgbmVlZCB0byBrbm93OiB3aGF0IGV4YWN0bHkgZG9lcyBpdCBzaWduYWw/IElzIGl0IGEgYmluYXJ5IGZsYWcsIGEgc3RhdHVzIGNvZGUsIG9yIHNvbWV0aGluZyBtb3JlIGNvbXBsZXg/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgaXRzIGRpZmZlcmVudCBzdGF0ZXM/IERvZXMgaXQgbWVhbiB0aGUgdHJhbnNhY3Rpb24gaXMgZmluYWxpemVkLCBjb21taXR0ZWQsIHJvbGxlZCBiYWNrLCBvciBzdGlsbCBwZW5kaW5nPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBlZGdlIGNhc2VzIG9yIHJhY2UgY29uZGl0aW9ucyBhc3NvY2lhdGVkIHdpdGggaXRzIHN0YXRlP1xuXG5GcmFua2x5LCBJIGNhbid0IHByb2NlZWQgZnVydGhlciB1bnRpbCBJIGhhdmUgYSByb2NrLXNvbGlkIGdyYXNwIG9mIHdoYXQgYHR4X2NvbXBsZXRlYCByZXByZXNlbnRzIGFuZCBob3cgaXQgYmVoYXZlcy4gSXRzIGNoYXJhY3RlcmlzdGljcyBhcmUgZ29pbmcgdG8gYmUgZnVuZGFtZW50YWwgdG8gdGhlIGRlc2lnbiBvZiBhbnkgc3lzdGVtIG9yIHNvbHV0aW9uIGhlcmUuIEkgbmVlZCB0byBiZSBhYmxlIHRvIHByZWRpY3QgaXRzIGJlaGF2aW9yIGFuZCBpdHMgcG90ZW50aWFsIGltcGFjdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yIGluIHRoZSBjb250ZXh0IG9mIG91ciByZXF1aXJlbWVudHMuIFRoaXMgY291bGQgaGF2ZSBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMsIHNlY3VyaXR5IHJhbWlmaWNhdGlvbnMsIG9yIGV2ZW4gaW1wbGljYXRpb25zIGZvciBkYXRhIGludGVncml0eS4gQSB0aG9yb3VnaCB1bmRlcnN0YW5kaW5nIG9mIGB0eF9jb21wbGV0ZWAgaXMgZXNzZW50aWFsLiBXZSBjYW4ndCBhZmZvcmQgdG8gb3Zlcmxvb2sgYW55IGRldGFpbHMgYXQgdGhpcyBzdGFnZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDMwNiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDI6MTA6MzIuMTgxMjg5NTY4WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MDIxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC91c2IvdXNibmV0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTI5MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTI5MDpcXHRcXHRcXHRuZXRkZXZfZGJnKGRldi1cXHUwMDNlbmV0LCBcXFwia2V2ZW50IGRvbmUsIGZsYWdzID0gMHglbHhcXFxcblxcXCIsIGRldi1cXHUwMDNlZmxhZ3MpO1xcbjEyOTE6XFx0fVxcbjEyOTI6XFx0XFxuMTI5MzpcXHQvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xcbjEyOTQ6XFx0XFxuMTI5NTpcXHRzdGF0aWMgdm9pZCB0eF9jb21wbGV0ZShzdHJ1Y3QgdXJiICp1cmIpXFxuMTI5NjpcXHR7XFxuMTI5NzpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZlxcdFxcdCpza2IgPSAoc3RydWN0IHNrX2J1ZmYgKikgdXJiLVxcdTAwM2Vjb250ZXh0O1xcbjEyOTg6XFx0XFx0c3RydWN0IHNrYl9kYXRhXFx0XFx0KmVudHJ5ID0gKHN0cnVjdCBza2JfZGF0YSAqKSBza2ItXFx1MDAzZWNiO1xcbjEyOTk6XFx0XFx0c3RydWN0IHVzYm5ldFxcdFxcdCpkZXYgPSBlbnRyeS1cXHUwMDNlZGV2O1xcbjEzMDA6XFx0XFxuMTMwMTpcXHRcXHRpZiAodXJiLVxcdTAwM2VzdGF0dXMgPT0gMCkge1xcbjEzMDI6XFx0XFx0XFx0c3RydWN0IHBjcHVfc3dfbmV0c3RhdHMgKnN0YXRzNjQ7XFxuMTMwMzpcXHRcXG4xMzA0OlxcdFxcdFxcdHN0YXRzNjQgPSBnZXRfY3B1X3B0cihkZXYtXFx1MDAzZW5ldC1cXHUwMDNldHN0YXRzKTtcXG4xMzA1OlxcdFxcdFxcdHU2NF9zdGF0c191cGRhdGVfYmVnaW4oXFx1MDAyNnN0YXRzNjQtXFx1MDAzZXN5bmNwKTtcXG4xMzA2OlxcdFxcdFxcdHU2NF9zdGF0c19hZGQoXFx1MDAyNnN0YXRzNjQtXFx1MDAzZXR4X3BhY2tldHMsIGVudHJ5LVxcdTAwM2VwYWNrZXRzKTtcXG4xMzA3OlxcdFxcdFxcdHU2NF9zdGF0c19hZGQoXFx1MDAyNnN0YXRzNjQtXFx1MDAzZXR4X2J5dGVzLCBlbnRyeS1cXHUwMDNlbGVuZ3RoKTtcXG4xMzA4OlxcdFxcdFxcdHU2NF9zdGF0c191cGRhdGVfZW5kKFxcdTAwMjZzdGF0czY0LVxcdTAwM2VzeW5jcCk7XFxuMTMwOTpcXHRcXHRcXHRwdXRfY3B1X3B0cihkZXYtXFx1MDAzZW5ldC1cXHUwMDNldHN0YXRzKTtcXG4xMzEwOlxcdFxcdH0gZWxzZSB7XFxuMTMxMTpcXHRcXHRcXHRkZXYtXFx1MDAzZW5ldC1cXHUwMDNlc3RhdHMudHhfZXJyb3JzKys7XFxuMTMxMjpcXHRcXG4xMzEzOlxcdFxcdFxcdHN3aXRjaCAodXJiLVxcdTAwM2VzdGF0dXMpIHtcXG4xMzE0OlxcdFxcdFxcdGNhc2UgLUVQSVBFOlxcbjEzMTU6XFx0XFx0XFx0XFx0dXNibmV0X2RlZmVyX2tldmVudChkZXYsIEVWRU5UX1RYX0hBTFQpO1xcbjEzMTY6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMTMxNzpcXHRcXG4xMzE4OlxcdFxcdFxcdC8qIHNvZnR3YXJlLWRyaXZlbiBpbnRlcmZhY2Ugc2h1dGRvd24gKi9cXG4xMzE5OlxcdFxcdFxcdGNhc2UgLUVDT05OUkVTRVQ6XFx0XFx0Ly8gYXN5bmMgdW5saW5rXFxuMTMyMDpcXHRcXHRcXHRjYXNlIC1FU0hVVERPV046XFx0XFx0Ly8gaGFyZHdhcmUgZ29uZVxcbjEzMjE6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMTMyMjpcXHRcXG4xMzIzOlxcdFxcdFxcdC8qIGxpa2UgcngsIHR4IGdldHMgY29udHJvbGxlciBpL28gZmF1bHRzIGR1cmluZyBodWJfd3FcXG4xMzI0OlxcdFxcdFxcdCAqIGRlbGF5cyBhbmQgc28gaXQgdXNlcyB0aGUgc2FtZSB0aHJvdHRsaW5nIG1lY2hhbmlzbS5cXG4xMzI1OlxcdFxcdFxcdCAqL1xcbjEzMjY6XFx0XFx0XFx0Y2FzZSAtRVBST1RPOlxcbjEzMjc6XFx0XFx0XFx0Y2FzZSAtRVRJTUU6XFxuMTMyODpcXHRcXHRcXHRjYXNlIC1FSUxTRVE6XFxuMTMyOTpcXHRcXHRcXHRcXHR1c2JfbWFya19sYXN0X2J1c3koZGV2LVxcdTAwM2V1ZGV2KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDI6MTA6MzIuMTgxNDMxNzk4WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ4Njg0MTgwNDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIENvZGUgQ2hhbmdlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjaGFuZ2UgYW5kIGl0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guIFdlJ3JlIHJlcGxhY2luZyB0aGUgb2xkZXIgYHRoaXNfY3B1X3B0ciguLi4pYCBhbmQgdGhlIGB1NjRfc3RhdHNfdXBkYXRlX2JlZ2luX2lycXNhdmUvZW5kX2lycXJlc3RvcmVgIGZ1bmN0aW9ucyB3aXRoIHRoZSBuZXdlciBgZ2V0X2NwdV9wdHIoLi4uKWAsIGB1NjRfc3RhdHNfdXBkYXRlX2JlZ2luL2VuZGAsIGFuZCBgcHV0X2NwdV9wdHIoLi4uKWAgYXBwcm9hY2guIFRoZSBrZXkgZGlmZmVyZW5jZSBJIHNlZSBpcyB0aGF0IGB0aGlzX2NwdV9wdHJgIGhhcyB0aGUgcG90ZW50aWFsIHRvIGNhdXNlIGlzc3VlcyB3aXRoIHByZWVtcHRpb24gb3IgU01QIGlmIGl0J3MgdXNlZCBpbiBhIHByZWVtcHRpYmxlIGNvbnRleHQgYW5kIGNvdWxkIGV2ZW4gdHJpZ2dlciBgbWlnaHRfc2xlZXAoKWAuICBgZ2V0X2NwdV9wdHJgLCBvbiB0aGUgb3RoZXIgaGFuZCwgZXhwbGljaXRseSBkaXNhYmxlcyBwcmVlbXB0aW9uIHdpdGggYHByZWVtcHRfZGlzYWJsZSgpYCBhbmQgZ2l2ZXMgdXMgdGhlIHBlci1DUFUgcG9pbnRlciwgYW5kIHRoZW4gcmUtZW5hYmxlcyBpdCB3aXRoIHRoZSBtYXRjaGluZyBgcHV0X2NwdV9wdHIoKWAuXG5cbk15IGZpcnN0IGltbWVkaWF0ZSBjb25jZXJuLCBhcyBhbHdheXMsIGlzIHdoZXRoZXIgdGhpcyBpbnRyb2R1Y2VzIGFueSBzb3J0IG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcyBvciBwb3RlbnRpYWwgaW5mb3JtYXRpb24gbGVha3MuIExldCdzIGJyZWFrIHRoYXQgZG93bjpcbiogICBJIGNhbiBzZWUgdGhhdCB3ZSdyZSAqbm90KiBtYWtpbmcgYW55IG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMuXG4qICAgV2UncmUgKm5vdCogY29weWluZyBhbnkga2VybmVsIGRhdGEgdG8gdXNlciBzcGFjZSwgc28gdGhhdCdzIGEgcGx1cy5cbiogICBJIGRvbid0IHNlZSBhbnl0aGluZyB0aGF0IHdvdWxkIHN1Z2dlc3Qgd2UncmUgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeS5cbiogICBBbmQsIG1vc3QgaW1wb3J0YW50bHksIHRoZXJlJ3Mgbm8gY29uZGl0aW9uYWwgbG9naWMgdGhhdCBkZXBlbmRzIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLlxuXG5TbywgaXQncyBzZWVtaW5nIGxpa2UgdGhpcyBpcyBwdXJlbHkgYSBjaGFuZ2UgZm9yIHBlci1DUFUgc3RhdHMgc3luY2hyb25pemF0aW9uIGFuZCBwcmVlbXB0aW9uIHNhZmV0eS4gSXQncyBsb29raW5nIGdvb2QgZnJvbSBhbiB1bmluaXRpYWxpemVkIG1lbW9yeS9pbmZvLWxlYWsgcGVyc3BlY3RpdmUsIHNvIGBOZWVkc0tNU0FOYCBpcyBkZWZpbml0ZWx5IGBmYWxzZWAuXG5cbk5vdywgbGV0J3Mgc3RlcCBiYWNrIGFuZCBjb25zaWRlciBob3cgdGhpcyByZWxhdGVzIHRvIG91ciB1c3VhbCBkZWJ1Z2dpbmcgdG9vbHMgbGlrZSBLQVNBTiBhbmQgS01TQU4uIFdpdGggdGhlIGNoYW5nZXMgYmVpbmcgcHJpbWFyaWx5IGFib3V0IHByZWVtcHRpb24sIHBlci1DUFUgYWNjZXNzIHN5bmNocm9uaXphdGlvbiB1c2luZyBgZ2V0X2NwdV9wdHJgIC8gYHB1dF9jcHVfcHRyYCBhbmQgYHU2NF9zdGF0c191cGRhdGVfYmVnaW5gL2BlbmRgLCBhbnkgc3luY2hyb25pemF0aW9uIG9yIGNvbmN1cnJlbmN5IGlzc3VlcyAob3IgcHJlZW1wdGlibGUgY29udGV4dCB2aW9sYXRpb25zKSBhcmUgc29tZXRoaW5nIHRoYXQgYXJlIHdlbGwgaGFuZGxlZCBieSB0aGUgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2VycyAoREVCVUdfUFJFRU1QVCwgbG9ja2RlcCwgZXRjLikuIFRoaXMgaXMgYSBrbm93biBhbmQgd2VsbC11bmRlcnN0b29kIGFyZWEgZm9yIHBvdGVudGlhbCBpc3N1ZXMuIFRoZSBtYWluIGZvY3VzIG9mIEtNU0FOIGlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIGFuZCBsZWFrcyB0byB1c2VyIHNwYWNlLiBTaW5jZSB0aGlzIHBhdGNoIGRvZXNuJ3QgaW52b2x2ZSBhbnkgbWVtb3J5IGFsbG9jYXRpb24sIGNvcHlpbmcsIGZvcm1hdHRpbmcsIG9yIHJlYWRpbmcgb2YgdW5pbml0aWFsaXplZCBkYXRhLCBpdCBpcyBub3Qgc29tZXRoaW5nIHRoYXQgd291bGQgdHJpZ2dlciBhIEtNU0FOIHdhcm5pbmcuXG5cblRoZXJlZm9yZSwgSSdtIGNvbmZpZGVudCBpbiBzZXR0aW5nIHRoZSByZXN1bHRzIGFjY29yZGluZ2x5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MjkyLCJPdXRwdXRUb2tlbnMiOjE4OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAyOjEwOjM3LjA0OTg1MjY1NVoiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgcGVyLUNQVSBuZXR3b3JrIHN0YXRpc3RpY3MgYWNjb3VudGluZyBpbiBkcml2ZXJzL25ldC91c2IvdXNibmV0LmMsIHJlcGxhY2luZyB0aGlzX2NwdV9wdHIoKSBhbmQgaXJxc2F2ZS9pcnFyZXN0b3JlIDY0LWJpdCBzdGF0cyB1cGRhdGUgaGVscGVycyB3aXRoIGdldF9jcHVfcHRyKCksIHU2NF9zdGF0c191cGRhdGVfYmVnaW4vZW5kKCksIGFuZCBwdXRfY3B1X3B0cigpLiBUaGlzIGVuc3VyZXMgcHJlZW1wdGlvbiBpcyBwcm9wZXJseSBkaXNhYmxlZCB3aGlsZSBhY2Nlc3NpbmcgdGhlIHBlci1DUFUgcG9pbnRlci5cXG5cXG5UaGUgY2hhbmdlcyBkbyBub3QgYWxsb2NhdGUgbmV3IGJ1ZmZlcnMsIG1hbmlwdWxhdGUgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGFsdGVyIGJ1ZmZlciBsZW5ndGgvYm91bmRzIGNhbGN1bGF0aW9ucywgb3IgY29weSBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm8tbGVhayByaXNrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIEtNU0FOIGZ1enppbmcuIEFueSBwb3RlbnRpYWwgc3luY2hyb25pemF0aW9uIG9yIHByZWVtcHRpb24gYnVncyB3b3VsZCBiZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dlcnMgKERFQlVHX1BSRUVNUFQsIExPQ0tERVAsIEtBU0FOKS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBwZXItQ1BVIG5ldHdvcmsgc3RhdGlzdGljcyBhY2NvdW50aW5nIGluIGRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYywgcmVwbGFjaW5nIHRoaXNfY3B1X3B0cigpIGFuZCBpcnFzYXZlL2lycXJlc3RvcmUgNjQtYml0IHN0YXRzIHVwZGF0ZSBoZWxwZXJzIHdpdGggZ2V0X2NwdV9wdHIoKSwgdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbi9lbmQoKSwgYW5kIHB1dF9jcHVfcHRyKCkuIFRoaXMgZW5zdXJlcyBwcmVlbXB0aW9uIGlzIHByb3Blcmx5IGRpc2FibGVkIHdoaWxlIGFjY2Vzc2luZyB0aGUgcGVyLUNQVSBwb2ludGVyLlxcblxcblRoZSBjaGFuZ2VzIGRvIG5vdCBhbGxvY2F0ZSBuZXcgYnVmZmVycywgbWFuaXB1bGF0ZSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgYWx0ZXIgYnVmZmVyIGxlbmd0aC9ib3VuZHMgY2FsY3VsYXRpb25zLCBvciBjb3B5IGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mby1sZWFrIHJpc2tzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgS01TQU4gZnV6emluZy4gQW55IHBvdGVudGlhbCBzeW5jaHJvbml6YXRpb24gb3IgcHJlZW1wdGlvbiBidWdzIHdvdWxkIGJlIGNvdmVyZWQgYnkgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2VycyAoREVCVUdfUFJFRU1QVCwgTE9DS0RFUCwgS0FTQU4pLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowkxl8r[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-08 01:44:12 +0000 UTC FinishedAt: 2026-09-08 02:10:38 +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": "38b6be101006d3e7af972999f45d4f1e8250587a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USB_USBNET", "USB_NET_DRIVERS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "38b6be101006d3e7af972999f45d4f1e8250587a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USB_USBNET", "USB_NET_DRIVERS" ], "series_id": "d31463ae-eac4-4e26-9fd0-83de4f515992" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "usbnet_skb_return", "tx_complete" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA4IDAyOjA3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTQl9VU0JORVQmIzM0OywKICAgICYjMzQ7VVNCX05FVF9EUklWRVJTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dXNibmV0X3NrYl9yZXR1cm4mIzM0OywKICAgICYjMzQ7dHhfY29tcGxldGUmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBwZXItQ1BVIG5ldHdvcmsgc3RhdGlzdGljcyBhY2NvdW50aW5nIGluIGRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYywgcmVwbGFjaW5nIHRoaXNfY3B1X3B0cigpIGFuZCBpcnFzYXZlL2lycXJlc3RvcmUgNjQtYml0IHN0YXRzIHVwZGF0ZSBoZWxwZXJzIHdpdGggZ2V0X2NwdV9wdHIoKSwgdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbi9lbmQoKSwgYW5kIHB1dF9jcHVfcHRyKCkuIFRoaXMgZW5zdXJlcyBwcmVlbXB0aW9uIGlzIHByb3Blcmx5IGRpc2FibGVkIHdoaWxlIGFjY2Vzc2luZyB0aGUgcGVyLUNQVSBwb2ludGVyLlxuXG5UaGUgY2hhbmdlcyBkbyBub3QgYWxsb2NhdGUgbmV3IGJ1ZmZlcnMsIG1hbmlwdWxhdGUgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGFsdGVyIGJ1ZmZlciBsZW5ndGgvYm91bmRzIGNhbGN1bGF0aW9ucywgb3IgY29weSBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm8tbGVhayByaXNrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIEtNU0FOIGZ1enppbmcuIEFueSBwb3RlbnRpYWwgc3luY2hyb25pemF0aW9uIG9yIHByZWVtcHRpb24gYnVncyB3b3VsZCBiZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dlcnMgKERFQlVHX1BSRUVNUFQsIExPQ0tERVAsIEtBU0FOKS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgcGVyLUNQVSA2NC1iaXQgbmV0d29yayBzdGF0aXN0aWNzIHVwZGF0ZSBzeW5jaHJvbml6YXRpb24gaW4gdXNibmV0X3NrYl9yZXR1cm4gYW5kIHR4X2NvbXBsZXRlIChkcml2ZXJzL25ldC91c2IvdXNibmV0LmMpLCByZXBsYWNpbmcgSVJRLXNhdmluZyB1NjRfc3RhdHMgaGVscGVycyB3aXRoIGdldF9jcHVfcHRyL3B1dF9jcHVfcHRyIHBhaXJzIGFuZCB1NjRfc3RhdHNfdXBkYXRlX2JlZ2luL2VuZC4gVGhpcyB0b3VjaGVzIHJlYWNoYWJsZSBVU0IgbmV0d29ya2luZyBkcml2ZXIgbG9naWMgdGhhdCBjYW4gYmUgdGVzdGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB3aXRoIGVtdWxhdGVkIFVTQiBuZXR3b3JrIGRldmljZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDI6MDc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA2MTU2NWFjNDljOTg0YmU0MGQyMTIzY2EwMDlkYjJhY2Q3NDI3NzUwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgOCAwMjowNzoyNyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvdXNibmV0LmMgYi9kcml2ZXJzL25ldC91c2IvdXNibmV0LmNcbmluZGV4IGExOWVjZjcxOGYzNmEuLjNkZjcyYjBjNmJjZmMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC91c2IvdXNibmV0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3VzYi91c2JuZXQuY1xuQEAgLTMyNSw4ICYjNDM7MzI1LDcgQEAgc3RhdGljIHZvaWQgX191c2JuZXRfc3RhdHVzX3N0b3BfZm9yY2Uoc3RydWN0IHVzYm5ldCAqZGV2KVxuICAqL1xuIHZvaWQgdXNibmV0X3NrYl9yZXR1cm4oc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbi1cdHN0cnVjdCBwY3B1X3N3X25ldHN0YXRzICpzdGF0czY0ID0gdGhpc19jcHVfcHRyKGRldi1cdTAwM2VuZXQtXHUwMDNldHN0YXRzKTtcbi1cdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4mIzQzO1x0c3RydWN0IHBjcHVfc3dfbmV0c3RhdHMgKnN0YXRzNjQ7XG4gXHRpbnRcdHN0YXR1cztcbiBcbiBcdGlmICh0ZXN0X2JpdChFVkVOVF9SWF9QQVVTRUQsIFx1MDAyNmRldi1cdTAwM2VmbGFncykpIHtcbkBAIC0zMzgsMTAgJiM0MzszMzcsMTIgQEAgdm9pZCB1c2JuZXRfc2tiX3JldHVybihzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRpZiAoc2tiLVx1MDAzZXByb3RvY29sID09IDApXG4gXHRcdHNrYi1cdTAwM2Vwcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgZGV2LVx1MDAzZW5ldCk7XG4gXG4tXHRmbGFncyA9IHU2NF9zdGF0c191cGRhdGVfYmVnaW5faXJxc2F2ZShcdTAwMjZzdGF0czY0LVx1MDAzZXN5bmNwKTtcbiYjNDM7XHRzdGF0czY0ID0gZ2V0X2NwdV9wdHIoZGV2LVx1MDAzZW5ldC1cdTAwM2V0c3RhdHMpO1xuJiM0MztcdHU2NF9zdGF0c191cGRhdGVfYmVnaW4oXHUwMDI2c3RhdHM2NC1cdTAwM2VzeW5jcCk7XG4gXHR1NjRfc3RhdHNfaW5jKFx1MDAyNnN0YXRzNjQtXHUwMDNlcnhfcGFja2V0cyk7XG4gXHR1NjRfc3RhdHNfYWRkKFx1MDAyNnN0YXRzNjQtXHUwMDNlcnhfYnl0ZXMsIHNrYi1cdTAwM2VsZW4pO1xuLVx0dTY0X3N0YXRzX3VwZGF0ZV9lbmRfaXJxcmVzdG9yZShcdTAwMjZzdGF0czY0LVx1MDAzZXN5bmNwLCBmbGFncyk7XG4mIzQzO1x0dTY0X3N0YXRzX3VwZGF0ZV9lbmQoXHUwMDI2c3RhdHM2NC1cdTAwM2VzeW5jcCk7XG4mIzQzO1x0cHV0X2NwdV9wdHIoZGV2LVx1MDAzZW5ldC1cdTAwM2V0c3RhdHMpO1xuIFxuIFx0bmV0aWZfZGJnKGRldiwgcnhfc3RhdHVzLCBkZXYtXHUwMDNlbmV0LCBcJiMzNDtcdTAwM2MgcngsIGxlbiAlenUsIHR5cGUgMHgleFxcblwmIzM0OyxcbiBcdFx0ICBza2ItXHUwMDNlbGVuICYjNDM7IHNpemVvZihzdHJ1Y3QgZXRoaGRyKSwgc2tiLVx1MDAzZXByb3RvY29sKTtcbkBAIC0xMjk4LDEzICYjNDM7MTI5OSwxNCBAQCBzdGF0aWMgdm9pZCB0eF9jb21wbGV0ZShzdHJ1Y3QgdXJiICp1cmIpXG4gXHRzdHJ1Y3QgdXNibmV0XHRcdCpkZXYgPSBlbnRyeS1cdTAwM2VkZXY7XG4gXG4gXHRpZiAodXJiLVx1MDAzZXN0YXR1cyA9PSAwKSB7XG4tXHRcdHN0cnVjdCBwY3B1X3N3X25ldHN0YXRzICpzdGF0czY0ID0gdGhpc19jcHVfcHRyKGRldi1cdTAwM2VuZXQtXHUwMDNldHN0YXRzKTtcbi1cdFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiYjNDM7XHRcdHN0cnVjdCBwY3B1X3N3X25ldHN0YXRzICpzdGF0czY0O1xuIFxuLVx0XHRmbGFncyA9IHU2NF9zdGF0c191cGRhdGVfYmVnaW5faXJxc2F2ZShcdTAwMjZzdGF0czY0LVx1MDAzZXN5bmNwKTtcbiYjNDM7XHRcdHN0YXRzNjQgPSBnZXRfY3B1X3B0cihkZXYtXHUwMDNlbmV0LVx1MDAzZXRzdGF0cyk7XG4mIzQzO1x0XHR1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKFx1MDAyNnN0YXRzNjQtXHUwMDNlc3luY3ApO1xuIFx0XHR1NjRfc3RhdHNfYWRkKFx1MDAyNnN0YXRzNjQtXHUwMDNldHhfcGFja2V0cywgZW50cnktXHUwMDNlcGFja2V0cyk7XG4gXHRcdHU2NF9zdGF0c19hZGQoXHUwMDI2c3RhdHM2NC1cdTAwM2V0eF9ieXRlcywgZW50cnktXHUwMDNlbGVuZ3RoKTtcbi1cdFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmRfaXJxcmVzdG9yZShcdTAwMjZzdGF0czY0LVx1MDAzZXN5bmNwLCBmbGFncyk7XG4mIzQzO1x0XHR1NjRfc3RhdHNfdXBkYXRlX2VuZChcdTAwMjZzdGF0czY0LVx1MDAzZXN5bmNwKTtcbiYjNDM7XHRcdHB1dF9jcHVfcHRyKGRldi1cdTAwM2VuZXQtXHUwMDNldHN0YXRzKTtcbiBcdH0gZWxzZSB7XG4gXHRcdGRldi1cdTAwM2VuZXQtXHUwMDNlc3RhdHMudHhfZXJyb3JzJiM0MzsmIzQzOztcbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMjowNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtVU0JfVVNCTkVUJiMzNDssCiAgICAmIzM0O1VTQl9ORVRfRFJJVkVSUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3VzYm5ldF9za2JfcmV0dXJuJiMzNDssCiAgICAmIzM0O3R4X2NvbXBsZXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHBlci1DUFUgNjQtYml0IG5ldHdvcmsgc3RhdGlzdGljcyB1cGRhdGUgc3luY2hyb25pemF0aW9uIGluIHVzYm5ldF9za2JfcmV0dXJuIGFuZCB0eF9jb21wbGV0ZSAoZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jKSwgcmVwbGFjaW5nIElSUS1zYXZpbmcgdTY0X3N0YXRzIGhlbHBlcnMgd2l0aCBnZXRfY3B1X3B0ci9wdXRfY3B1X3B0ciBwYWlycyBhbmQgdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbi9lbmQuIFRoaXMgdG91Y2hlcyByZWFjaGFibGUgVVNCIG5ldHdvcmtpbmcgZHJpdmVyIGxvZ2ljIHRoYXQgY2FuIGJlIHRlc3RlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgd2l0aCBlbXVsYXRlZCBVU0IgbmV0d29yayBkZXZpY2VzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNjE1NjVhYzQ5Yzk4NGJlNDBkMjEyM2NhMDA5ZGIyYWNkNzQyNzc1MApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDggMDI6MDc6MjcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvdXNibmV0LmMgYi9kcml2ZXJzL25ldC91c2IvdXNibmV0LmMKaW5kZXggYTE5ZWNmNzE4ZjM2YS4uM2RmNzJiMGM2YmNmYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3VzYi91c2JuZXQuYwpAQCAtMzI1LDggJiM0MzszMjUsNyBAQCBzdGF0aWMgdm9pZCBfX3VzYm5ldF9zdGF0dXNfc3RvcF9mb3JjZShzdHJ1Y3QgdXNibmV0ICpkZXYpCiAgKi8KIHZvaWQgdXNibmV0X3NrYl9yZXR1cm4oc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCXN0cnVjdCBwY3B1X3N3X25ldHN0YXRzICpzdGF0czY0ID0gdGhpc19jcHVfcHRyKGRldi0mZ3Q7bmV0LSZndDt0c3RhdHMpOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiYjNDM7CXN0cnVjdCBwY3B1X3N3X25ldHN0YXRzICpzdGF0czY0OwogCWludAlzdGF0dXM7CiAKIAlpZiAodGVzdF9iaXQoRVZFTlRfUlhfUEFVU0VELCAmYW1wO2Rldi0mZ3Q7ZmxhZ3MpKSB7CkBAIC0zMzgsMTAgJiM0MzszMzcsMTIgQEAgdm9pZCB1c2JuZXRfc2tiX3JldHVybihzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpCiAJaWYgKHNrYi0mZ3Q7cHJvdG9jb2wgPT0gMCkKIAkJc2tiLSZndDtwcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgZGV2LSZndDtuZXQpOwogCi0JZmxhZ3MgPSB1NjRfc3RhdHNfdXBkYXRlX2JlZ2luX2lycXNhdmUoJmFtcDtzdGF0czY0LSZndDtzeW5jcCk7CiYjNDM7CXN0YXRzNjQgPSBnZXRfY3B1X3B0cihkZXYtJmd0O25ldC0mZ3Q7dHN0YXRzKTsKJiM0MzsJdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbigmYW1wO3N0YXRzNjQtJmd0O3N5bmNwKTsKIAl1NjRfc3RhdHNfaW5jKCZhbXA7c3RhdHM2NC0mZ3Q7cnhfcGFja2V0cyk7CiAJdTY0X3N0YXRzX2FkZCgmYW1wO3N0YXRzNjQtJmd0O3J4X2J5dGVzLCBza2ItJmd0O2xlbik7Ci0JdTY0X3N0YXRzX3VwZGF0ZV9lbmRfaXJxcmVzdG9yZSgmYW1wO3N0YXRzNjQtJmd0O3N5bmNwLCBmbGFncyk7CiYjNDM7CXU2NF9zdGF0c191cGRhdGVfZW5kKCZhbXA7c3RhdHM2NC0mZ3Q7c3luY3ApOwomIzQzOwlwdXRfY3B1X3B0cihkZXYtJmd0O25ldC0mZ3Q7dHN0YXRzKTsKIAogCW5ldGlmX2RiZyhkZXYsIHJ4X3N0YXR1cywgZGV2LSZndDtuZXQsICYjMzQ7Jmx0OyByeCwgbGVuICV6dSwgdHlwZSAweCV4XG4mIzM0OywKIAkJICBza2ItJmd0O2xlbiAmIzQzOyBzaXplb2Yoc3RydWN0IGV0aGhkciksIHNrYi0mZ3Q7cHJvdG9jb2wpOwpAQCAtMTI5OCwxMyAmIzQzOzEyOTksMTQgQEAgc3RhdGljIHZvaWQgdHhfY29tcGxldGUoc3RydWN0IHVyYiAqdXJiKQogCXN0cnVjdCB1c2JuZXQJCSpkZXYgPSBlbnRyeS0mZ3Q7ZGV2OwogCiAJaWYgKHVyYi0mZ3Q7c3RhdHVzID09IDApIHsKLQkJc3RydWN0IHBjcHVfc3dfbmV0c3RhdHMgKnN0YXRzNjQgPSB0aGlzX2NwdV9wdHIoZGV2LSZndDtuZXQtJmd0O3RzdGF0cyk7Ci0JCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiYjNDM7CQlzdHJ1Y3QgcGNwdV9zd19uZXRzdGF0cyAqc3RhdHM2NDsKIAotCQlmbGFncyA9IHU2NF9zdGF0c191cGRhdGVfYmVnaW5faXJxc2F2ZSgmYW1wO3N0YXRzNjQtJmd0O3N5bmNwKTsKJiM0MzsJCXN0YXRzNjQgPSBnZXRfY3B1X3B0cihkZXYtJmd0O25ldC0mZ3Q7dHN0YXRzKTsKJiM0MzsJCXU2NF9zdGF0c191cGRhdGVfYmVnaW4oJmFtcDtzdGF0czY0LSZndDtzeW5jcCk7CiAJCXU2NF9zdGF0c19hZGQoJmFtcDtzdGF0czY0LSZndDt0eF9wYWNrZXRzLCBlbnRyeS0mZ3Q7cGFja2V0cyk7CiAJCXU2NF9zdGF0c19hZGQoJmFtcDtzdGF0czY0LSZndDt0eF9ieXRlcywgZW50cnktJmd0O2xlbmd0aCk7Ci0JCXU2NF9zdGF0c191cGRhdGVfZW5kX2lycXJlc3RvcmUoJmFtcDtzdGF0czY0LSZndDtzeW5jcCwgZmxhZ3MpOwomIzQzOwkJdTY0X3N0YXRzX3VwZGF0ZV9lbmQoJmFtcDtzdGF0czY0LSZndDtzeW5jcCk7CiYjNDM7CQlwdXRfY3B1X3B0cihkZXYtJmd0O25ldC0mZ3Q7dHN0YXRzKTsKIAl9IGVsc2UgewogCQlkZXYtJmd0O25ldC0mZ3Q7c3RhdHMudHhfZXJyb3JzJiM0MzsmIzQzOzsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMjowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTA0CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMzUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktlcm5lbCBQYXRjaCBFdmFsdWF0aW9uIC0gVVNCbmV0IEZ1enppbmcqKgoKT2theSwgc28gdGhlIHVzZXIgd2FudHMgbWUgdG8gZXZhbHVhdGUgdGhpcyBrZXJuZWwgcGF0Y2ggc2VyaWVzIGZvciBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLCBzcGVjaWZpY2FsbHkgdGFyZ2V0aW5nIHRoZSBhbWQ2NCBhcmNoaXRlY3R1cmUuIE15IGZpcnN0IGluc3RpbmN0IGlzIGFsd2F5cyB0byBtZXRpY3Vsb3VzbHkgcmV2aWV3IHRoZSBpbnN0cnVjdGlvbnMgYW5kIHRoZSBkaWZmIGl0c2VsZi4gQWxyaWdodCwgaXQmIzM5O3MgbW9kaWZ5aW5nIGBkcml2ZXJzL25ldC91c2IvdXNibmV0LmNgLiAgU3BlY2lmaWNhbGx5LCB0aGUgY2hhbmdlcyBhcmUgaW4gYHVzYm5ldF9za2JfcmV0dXJuYCBhbmQgYHR4X2NvbXBsZXRlYC4gIFRoZSBvcmlnaW5hbCBjb2RlIHVzZWQgYHRoaXNfY3B1X3B0cmAgd2l0aCB0aGUgYHU2NF9zdGF0c191cGRhdGVfYmVnaW5faXJxc2F2ZWAvYHU2NF9zdGF0c191cGRhdGVfZW5kX2lycXJlc3RvcmVgIHBhaXIuIFRoaXMgcGF0Y2gsIGhvd2V2ZXIsIGlzIHJlcGxhY2luZyB0aGF0IHdpdGggYGdldF9jcHVfcHRyYCwgYHU2NF9zdGF0c191cGRhdGVfYmVnaW5gL2B1NjRfc3RhdHNfdXBkYXRlX2VuZGAsIGFuZCBgcHV0X2NwdV9wdHJgLgoKSG1tLCBiZWZvcmUgSSBkaWcgaW50byB0aGUgZmluZXIgcG9pbnRzIG9mIHRoZSBsb2NraW5nIG1lY2hhbmlzbXMsIEkgbmVlZCB0byBjb25maXJtIGlmIHRoaXMgY29kZSBpcyBldmVuICpyZWFjaGFibGUqIGluIGEgZnV6emluZyBjb250ZXh0LiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBgdXNibmV0LmNgLCB3aGljaCBpcyBwYXJ0IG9mIHRoZSBVU0IgbmV0d29ya2luZyBkcml2ZXJzIGluIExpbnV4LiBSaWdodCwgdGhhdCBtZWFucyBgQ09ORklHX1VTQl9ORVRfRFJJVkVSU2AsIGBDT05GSUdfVVNCX1VTQk5FVGAsIGFuZCB0aGUgbGlrZS4gTm93LCBjYW4gd2UgYWN0dWFsbHkgZnV6eiBVU0IgbmV0d29ya2luZyB3aXRoIHN5emthbGxlcj8gIEFoLCB5ZXMsIGFic29sdXRlbHkhIFN5emthbGxlciAqZnJlcXVlbnRseSogZnV6emVzIFVTQiBkcml2ZXJzLCBhbmQgSSBrbm93IGl0JiMzOTtzIGhpdCBVU0IgbmV0d29ya2luZyBiZWZvcmXigJRjZGNfZXRoZXIsIGFzaXgsIGFsbCBvZiB0aG9zZSB3aGljaCB1c2UgdXNibmV0IGFyZSBwcmV0dHkgY29tbW9uIHRhcmdldHMuCgpPa2F5LCB0aGlzIGxvb2tzIHByb21pc2luZy4gTm93LCBJIG5lZWQgdG8gZ2V0IHNvbWUgbW9yZSBjb250ZXh0IHRvIGRlY2lkZSB3aGF0IHRoZSBpbXBsaWNhdGlvbnMgYXJlIGFuZCBob3cgdG8gYXNzZXNzIGl0LiBJJiMzOTtsbCBuZWVkIHRvIHVzZSBteSB0b29scyB0byBkaWcgaW50byB0aGUgY29kZSBhbmQgS2NvbmZpZyBmaWxlcy4gVGltZSB0byBjaGVjayB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMgdXNpbmcgZ3JlcHBlciBhbmQgcmVhZC1maWxlLCB0byBtYWtlIHN1cmUgZXZlcnl0aGluZyBsaW5lcyB1cC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMjowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVVNCX1VTQk5FVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvS2NvbmZpZz0xMTM9Y29uZmlnIFVTQl9MQU43OFhYXG4tLVxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctMTMxLVxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6MTMyOmNvbmZpZyBVU0JfVVNCTkVUXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0xMzMtXHR0cmlzdGF0ZSBcJiMzNDtNdWx0aS1wdXJwb3NlIFVTQiBOZXR3b3JraW5nIEZyYW1ld29ya1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAyOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzODMKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkV4YW1pbmluZyBVU0IgTmV0d29ya2luZyBEZXBlbmRlbmNpZXMqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgZm9yIHRoZSBVU0IgbmV0d29ya2luZyBkcml2ZXJzLiBMZXQmIzM5O3Mgc3RhcnQgYnkgY2hlY2tpbmcgb3V0IHRoZSBgZHJpdmVycy9uZXQvdXNiL0tjb25maWdgIGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAxMzAuIFRoYXQmIzM5O3MgdXN1YWxseSB3aGVyZSB0aGUgbWFpbiBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIHRoZWlyIGRlcGVuZGVuY2llcyBhcmUgZGVmaW5lZC4gSSBleHBlY3QgdG8gc2VlIHRoZSB0eXBpY2FsIGBkZXBlbmRzIG9uYCBzdGF0ZW1lbnRzIGxpbmtpbmcgdGhlc2UgZHJpdmVycyB0byByZWxldmFudCBVU0IgY29yZSBjb21wb25lbnRzLCBuZXR3b3JraW5nIHN0YWNrIGZlYXR1cmVzLCBhbmQgbWF5YmUgZXZlbiBzcGVjaWZpYyBoYXJkd2FyZSBwbGF0Zm9ybXMuIEtub3dpbmcgdGhlc2UgcmVsYXRpb25zaGlwcyBpcyBjcnVjaWFsIGJlZm9yZSBtYWtpbmcgYW55IGNoYW5nZXMgb3IgdHJvdWJsZXNob290aW5nIGRyaXZlciBjb25maWd1cmF0aW9ucy4gSXQgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBvdmVydmlldyBvZiB3aGF0IG5lZWRzIHRvIGJlIGVuYWJsZWQgb3IgY29uc2lkZXJlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMjowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTI1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMjU6XHRcdCAgTEFONzgwMSA6IFVTQiAzIHRvIDEwLzEwMC8xMDAwIEV0aGVybmV0IGFkYXB0ZXIgKE1BQyBvbmx5KVxuIDEyNjpcdFxuIDEyNzpcdFx0ICBQcm9wZXIgUEhZIGRyaXZlciBpcyByZXF1aXJlZCBmb3IgTEFONzgwMS5cbiAxMjg6XHRcbiAxMjk6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXG4gMTMwOlx0XHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBsYW43OHh4LlxuIDEzMTpcdFxuIDEzMjpcdGNvbmZpZyBVU0JfVVNCTkVUXG4gMTMzOlx0XHR0cmlzdGF0ZSBcJiMzNDtNdWx0aS1wdXJwb3NlIFVTQiBOZXR3b3JraW5nIEZyYW1ld29ya1wmIzM0O1xuIDEzNDpcdFx0c2VsZWN0IE1JSVxuIDEzNTpcdFx0aGVscFxuIDEzNjpcdFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyBzZXZlcmFsIGtpbmRzIG9mIG5ldHdvcmsgbGlua3Mgb3ZlciBVU0IsXG4gMTM3Olx0XHQgIHdpdGggXCYjMzQ7bWluaWRyaXZlcnNcJiMzNDsgYnVpbHQgYXJvdW5kIGEgY29tbW9uIG5ldHdvcmsgZHJpdmVyIGNvcmVcbiAxMzg6XHRcdCAgdGhhdCBzdXBwb3J0cyBkZWVwIHF1ZXVlcyBmb3IgZWZmaWNpZW50IHRyYW5zZmVycy4gIChUaGlzIGdpdmVzXG4gMTM5Olx0XHQgIGJldHRlciBwZXJmb3JtYW5jZSB3aXRoIHNtYWxsIHBhY2tldHMgYW5kIGF0IGhpZ2ggc3BlZWRzKS5cbiAxNDA6XHRcbiAxNDE6XHRcdCAgVGhlIFVTQiBob3N0IHJ1bnMgXCYjMzQ7dXNibmV0XCYjMzQ7LCBhbmQgdGhlIG90aGVyIGVuZCBvZiB0aGUgbGluayBtaWdodCBiZTpcbiAxNDI6XHRcbiAxNDM6XHRcdCAgLSBBbm90aGVyIFVTQiBob3N0LCB3aGVuIHVzaW5nIFVTQiBcJiMzNDtuZXR3b3JrXCYjMzQ7IG9yIFwmIzM0O2RhdGEgdHJhbnNmZXJcJiMzNDtcbiAxNDQ6XHRcdCAgICBjYWJsZXMuICBUaGVzZSBhcmUgb2Z0ZW4gdXNlZCB0byBuZXR3b3JrIGxhcHRvcHMgdG8gUENzLCBsaWtlXG4gMTQ1Olx0XHQgICAgXCYjMzQ7TGFwbGlua1wmIzM0OyBwYXJhbGxlbCBjYWJsZXMgb3Igc29tZSBtb3RoZXJib2FyZHMuICBUaGVzZSByZWx5XG4gMTQ2Olx0XHQgICAgb24gc3BlY2lhbGl6ZWQgY2hpcHMgZnJvbSBtYW55IHN1cHBsaWVycy5cbiAxNDc6XHRcbiAxNDg6XHRcdCAgLSBBbiBpbnRlbGxpZ2VudCBVU0IgZ2FkZ2V0LCBwZXJoYXBzIGVtYmVkZGluZyBhIExpbnV4IHN5c3RlbS5cbiAxNDk6XHRcdCAgICBUaGVzZSBpbmNsdWRlIFBEQXMgcnVubmluZyBMaW51eCAoaVBhcSwgWW9weSwgWmF1cnVzLCBhbmRcbiAxNTA6XHRcdCAgICBvdGhlcnMpLCBhbmQgZGV2aWNlcyB0aGF0IGludGVyb3BlcmF0ZSB1c2luZyB0aGUgc3RhbmRhcmRcbiAxNTE6XHRcdCAgICBDREMtRXRoZXJuZXQgc3BlY2lmaWNhdGlvbiAoaW5jbHVkaW5nIG1hbnkgY2FibGUgbW9kZW1zKS5cbiAxNTI6XHRcbiAxNTM6XHRcdCAgLSBOZXR3b3JrIGFkYXB0ZXIgaGFyZHdhcmUgKGxpa2UgdGhvc2UgZm9yIDEwLzEwMCBFdGhlcm5ldCkgd2hpY2hcbiAxNTQ6XHRcdCAgICB1c2VzIHRoaXMgZHJpdmVyIGZyYW1ld29yay5cbiAxNTU6XHRcbiAxNTY6XHRcdCAgVGhlIGxpbmsgd2lsbCBhcHBlYXIgd2l0aCBhIG5hbWUgbGlrZSBcJiMzNDt1c2IwXCYjMzQ7LCB3aGVuIHRoZSBsaW5rIGlzXG4gMTU3Olx0XHQgIGEgdHdvLW5vZGUgbGluaywgb3IgXCYjMzQ7ZXRoMFwmIzM0OyBmb3IgbW9zdCBDREMtRXRoZXJuZXQgZGV2aWNlcy4gIFRob3NlXG4gMTU4Olx0XHQgIHR3by1ub2RlIGxpbmtzIGFyZSBtb3N0IGVhc2lseSBtYW5hZ2VkIHdpdGggRXRoZXJuZXQgQnJpZGdpbmdcbiAxNTk6XHRcdCAgKENPTkZJR19CUklER0UpIGluc3RlYWQgb2Ygcm91dGluZy5cbiAxNjA6XHRcbiAxNjE6XHRcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24gc2VlIFx1MDAzY2h0dHA6Ly93d3cubGludXgtdXNiLm9yZy91c2JuZXQvXHUwMDNlLlxuIDE2MjpcdFxuIDE2MzpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcbiAxNjQ6XHRcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHVzYm5ldC5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMjowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1Mjg0CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIFVTQiBEcml2ZXIgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIGZvciBhIHBhcnRpY3VsYXIgVVNCIGRyaXZlci4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIHRoZSBgS2NvbmZpZ2AgZmlsZSwgc3BlY2lmaWNhbGx5IHRoZSB0b3AgbGV2ZWwgb25lIGxvY2F0ZWQgaW4gYGRyaXZlcnMvbmV0L3VzYi9LY29uZmlnYC4gVGhhdCYjMzk7cyBnZW5lcmFsbHkgd2hlcmUgSSYjMzk7ZCBleHBlY3QgdG8gZmluZCB0aGUgbWVudSBzdHJ1Y3R1cmUgYW5kIHRoZSBrZXkgZGVwZW5kZW5jaWVzIGRlZmluZWQuIEl0JiMzOTtzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgdHJhY2luZyB3aGljaCBvdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbnMgZW5hYmxlIG9yIGRpc2FibGUgdGhpcyBwYXJ0aWN1bGFyIGRyaXZlciwgYW55IHJlbGV2YW50IGhhcmR3YXJlIHJlcXVpcmVtZW50cywgb3IgZXZlbiB3aGljaCBvdGhlciBkcml2ZXJzIGl0IG1pZ2h0IGRlcGVuZCBvbi4gSSYjMzk7bGwgcXVpY2tseSBzY2FuIHRoYXQgZmlsZSBhbmQgc2VlIGhvdyB0aGUgYFVTQmAgZHJpdmVyIG9wdGlvbnMgYXJlIHN0cnVjdHVyZWQgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDI6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCNcbiAgIDM6XHQjIFVTQiBOZXR3b3JrIGRldmljZXMgY29uZmlndXJhdGlvblxuICAgNDpcdCNcbiAgIDU6XHRjb21tZW50IFwmIzM0O0hvc3Qtc2lkZSBVU0Igc3VwcG9ydCBpcyBuZWVkZWQgZm9yIFVTQiBOZXR3b3JrIEFkYXB0ZXIgc3VwcG9ydFwmIzM0O1xuICAgNjpcdFx0ZGVwZW5kcyBvbiAhVVNCIFx1MDAyNlx1MDAyNiBORVRcbiAgIDc6XHRcbiAgIDg6XHRtZW51Y29uZmlnIFVTQl9ORVRfRFJJVkVSU1xuICAgOTpcdFx0dHJpc3RhdGUgXCYjMzQ7VVNCIE5ldHdvcmsgQWRhcHRlcnNcJiMzNDtcbiAgMTA6XHRcdGRlZmF1bHQgVVNCIGlmIFVTQlxuICAxMTpcdFx0ZGVwZW5kcyBvbiBVU0IgXHUwMDI2XHUwMDI2IE5FVFxuICAxMjpcdFxuICAxMzpcdGlmIFVTQl9ORVRfRFJJVkVSU1xuICAxNDpcdFxuICAxNTpcdGNvbmZpZyBVU0JfQ0FUQ1xuICAxNjpcdFx0dHJpc3RhdGUgXCYjMzQ7VVNCIENBVEMgTmV0TWF0ZS1iYXNlZCBFdGhlcm5ldCBkZXZpY2Ugc3VwcG9ydFwmIzM0O1xuICAxNzpcdFx0c2VsZWN0IENSQzMyXG4gIDE4Olx0XHRoZWxwXG4gIDE5Olx0XHQgIFNheSBZIGlmIHlvdSB3YW50IHRvIHVzZSBvbmUgb2YgdGhlIGZvbGxvd2luZyAxME1icHMgVVNCIEV0aGVybmV0XG4gIDIwOlx0XHQgIGRldmljZSBiYXNlZCBvbiB0aGUgRUwxMjEwQSBjaGlwLiBTdXBwb3J0ZWQgZGV2aWNlcyBhcmU6XG4gIDIxOlx0XHQgIEJlbGtpbiBGNVUwMTFcbiAgMjI6XHRcdCAgQmVsa2luIEY1VTExMVxuICAyMzpcdFx0ICBDQVRDIE5ldE1hdGVcbiAgMjQ6XHRcdCAgQ0FUQyBOZXRNYXRlIElJXG4gIDI1Olx0XHQgIHNtYXJ0QnJpZGdlcyBzbWFydE5JQ1xuICAyNjpcdFxuICAyNzpcdFx0ICBUaGlzIGRyaXZlciBtYWtlcyB0aGUgYWRhcHRlciBhcHBlYXIgYXMgYSBub3JtYWwgRXRoZXJuZXQgaW50ZXJmYWNlLFxuICAyODpcdFx0ICB0eXBpY2FsbHkgb24gZXRoMCwgaWYgaXQgaXMgdGhlIG9ubHkgZXRoZXJuZXQgZGV2aWNlLCBvciBwZXJoYXBzIG9uXG4gIDI5Olx0XHQgIGV0aDEsIGlmIHlvdSBoYXZlIGEgUENJIG9yIElTQSBldGhlcm5ldCBjYXJkIGluc3RhbGxlZC5cbiAgMzA6XHRcbiAgMzE6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXG4gIDMyOlx0XHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBjYXRjLlxuICAzMzpcdFxuICAzNDpcdGNvbmZpZyBVU0JfS0FXRVRIXG4gIDM1Olx0XHR0cmlzdGF0ZSBcJiMzNDtVU0IgS0xTSSBLTDVVU0IxMDEtYmFzZWQgZXRoZXJuZXQgZGV2aWNlIHN1cHBvcnRcJiMzNDtcbiAgMzY6XHRcdGhlbHBcbiAgMzc6XHRcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2Ugb25lIG9mIHRoZSBmb2xsb3dpbmcgMTBNYnBzIG9ubHlcbiAgMzg6XHRcdCAgVVNCIEV0aGVybmV0IGFkYXB0ZXJzIGJhc2VkIG9uIHRoZSBLTFNJIEtMNUtVU0IxMDFCIGNoaXBzZXQ6XG4gIDM5Olx0XHQgIDNDb20gM0MxOTI1MFxuICA0MDpcdFx0ICBBRFMgVVNCLTEwQlRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMjowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MDQ5CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyB0aG91Z2ggSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBVU0IgTmV0d29ya2luZyBNb2R1bGUmIzM5O3MgQnVpbGQgUHJvY2VzcyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYHVzYm5ldC5jYCB3aXRoaW4gdGhlIFVTQiBuZXR3b3JraW5nIGRyaXZlciBpcyBhY3R1YWxseSBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwuIFRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBpcyB0aGUgYGRyaXZlcnMvbmV0L3VzYi9NYWtlZmlsZWAuIFRoYXQgZmlsZSBpcyB0aGUgY2VudHJhbCBvcmdhbml6aW5nIHBvaW50IGZvciBhbGwgdGhlIGJ1aWxkIGluc3RydWN0aW9ucyB3aXRoaW4gdGhhdCBwYXJ0aWN1bGFyIGRpcmVjdG9yeSwgaXQmIzM5O3MgdGhlIHJlY2lwZSBib29rLCBzbyB0byBzcGVhay4gSXQmIzM5O2xsIGRlZmluZSBkZXBlbmRlbmNpZXMsIGNvbXBpbGF0aW9uIGZsYWdzLCBhbmQgdGhlIG9iamVjdCBmaWxlcyB0aGF0IGdldCBsaW5rZWQgdG8gY3JlYXRlIHRoZSBmaW5hbCBtb2R1bGUgb3IgaW50ZWdyYXRlZCBmdW5jdGlvbmFsaXR5LiBMZXQmIzM5O3MgZ2V0IHJpZ2h0IGludG8gaXQgYW5kIHNlZSBob3cgdGhpcyBpcyBjb25maWd1cmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMjowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9NYWtlZmlsZSYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHQjXG4gICAzOlx0IyBNYWtlZmlsZSBmb3IgVVNCIE5ldHdvcmsgZHJpdmVyc1xuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRvYmotJChDT05GSUdfVVNCX0NBVEMpXHRcdCYjNDM7PSBjYXRjLm9cbiAgIDc6XHRvYmotJChDT05GSUdfVVNCX0tBV0VUSClcdCYjNDM7PSBrYXdldGgub1xuICAgODpcdG9iai0kKENPTkZJR19VU0JfUEVHQVNVUylcdCYjNDM7PSBwZWdhc3VzLm9cbiAgIDk6XHRvYmotJChDT05GSUdfVVNCX1JUTDgxNTApXHQmIzQzOz0gcnRsODE1MC5vXG4gIDEwOlx0b2JqLSQoQ09ORklHX1VTQl9SVEw4MTUyKVx0JiM0Mzs9IHI4MTUyLm9cbiAgMTE6XHRvYmotJChDT05GSUdfVVNCX0hTTylcdFx0JiM0Mzs9IGhzby5vXG4gIDEyOlx0b2JqLSQoQ09ORklHX1VTQl9MQU43OFhYKVx0JiM0Mzs9IGxhbjc4eHgub1xuICAxMzpcdG9iai0kKENPTkZJR19VU0JfTkVUX0FYODgxN1gpXHQmIzQzOz0gYXNpeC5vXG4gIDE0Olx0YXNpeC15IDo9IGFzaXhfZGV2aWNlcy5vIGFzaXhfY29tbW9uLm8gYXg4ODE3MmEub1xuICAxNTpcdG9iai0kKENPTkZJR19VU0JfTkVUX0FYODgxNzlfMTc4QSkgICAgICAmIzQzOz0gYXg4ODE3OV8xNzhhLm9cbiAgMTY6XHRvYmotJChDT05GSUdfVVNCX05FVF9DRENFVEhFUilcdCYjNDM7PSBjZGNfZXRoZXIub1xuICAxNzpcdG9iai0kKENPTkZJR19VU0JfTkVUX0NEQ19FRU0pXHQmIzQzOz0gY2RjX2VlbS5vXG4gIDE4Olx0b2JqLSQoQ09ORklHX1VTQl9ORVRfRE05NjAxKVx0JiM0Mzs9IGRtOTYwMS5vXG4gIDE5Olx0b2JqLSQoQ09ORklHX1VTQl9ORVRfU1I5NzAwKVx0JiM0Mzs9IHNyOTcwMC5vXG4gIDIwOlx0b2JqLSQoQ09ORklHX1VTQl9ORVRfU1I5ODAwKVx0JiM0Mzs9IHNyOTgwMC5vXG4gIDIxOlx0b2JqLSQoQ09ORklHX1VTQl9ORVRfU01TQzc1WFgpXHQmIzQzOz0gc21zYzc1eHgub1xuICAyMjpcdG9iai0kKENPTkZJR19VU0JfTkVUX1NNU0M5NVhYKVx0JiM0Mzs9IHNtc2M5NXh4Lm9cbiAgMjM6XHRvYmotJChDT05GSUdfVVNCX05FVF9HTDYyMEEpXHQmIzQzOz0gZ2w2MjBhLm9cbiAgMjQ6XHRvYmotJChDT05GSUdfVVNCX05FVF9ORVQxMDgwKVx0JiM0Mzs9IG5ldDEwODAub1xuICAyNTpcdG9iai0kKENPTkZJR19VU0JfTkVUX1BMVVNCKVx0JiM0Mzs9IHBsdXNiLm9cbiAgMjY6XHRvYmotJChDT05GSUdfVVNCX05FVF9STkRJU19IT1NUKVx0JiM0Mzs9IHJuZGlzX2hvc3Qub1xuICAyNzpcdG9iai0kKENPTkZJR19VU0JfTkVUX0NEQ19TVUJTRVRfRU5BQkxFKVx0JiM0Mzs9IGNkY19zdWJzZXQub1xuICAyODpcdG9iai0kKENPTkZJR19VU0JfTkVUX1pBVVJVUylcdCYjNDM7PSB6YXVydXMub1xuICAyOTpcdG9iai0kKENPTkZJR19VU0JfTkVUX01DUzc4MzApXHQmIzQzOz0gbWNzNzgzMC5vXG4gIDMwOlx0b2JqLSQoQ09ORklHX1VTQl9VU0JORVQpXHQmIzQzOz0gdXNibmV0Lm9cbiAgMzE6XHRvYmotJChDT05GSUdfVVNCX05FVF9JTlQ1MVgxKVx0JiM0Mzs9IGludDUxeDEub1xuICAzMjpcdG9iai0kKENPTkZJR19VU0JfQ0RDX1BIT05FVClcdCYjNDM7PSBjZGMtcGhvbmV0Lm9cbiAgMzM6XHRvYmotJChDT05GSUdfVVNCX05FVF9LQUxNSUEpXHQmIzQzOz0ga2FsbWlhLm9cbiAgMzQ6XHRvYmotJChDT05GSUdfVVNCX0lQSEVUSClcdCYjNDM7PSBpcGhldGgub1xuICAzNTpcdG9iai0kKENPTkZJR19VU0JfU0lFUlJBX05FVClcdCYjNDM7PSBzaWVycmFfbmV0Lm9cbiAgMzY6XHRvYmotJChDT05GSUdfVVNCX05FVF9DWDgyMzEwX0VUSClcdCYjNDM7PSBjeDgyMzEwX2V0aC5vXG4gIDM3Olx0b2JqLSQoQ09ORklHX1VTQl9ORVRfQ0RDX05DTSlcdCYjNDM7PSBjZGNfbmNtLm9cbiAgMzg6XHRvYmotJChDT05GSUdfVVNCX05FVF9IVUFXRUlfQ0RDX05DTSlcdCYjNDM7PSBodWF3ZWlfY2RjX25jbS5vXG4gIDM5Olx0b2JqLSQoQ09ORklHX1VTQl9WTDYwMClcdFx0JiM0Mzs9IGxnLXZsNjAwLm9cbiAgNDA6XHRvYmotJChDT05GSUdfVVNCX05FVF9RTUlfV1dBTilcdCYjNDM7PSBxbWlfd3dhbi5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAyOjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyOTQKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgVVNCbmV0IERyaXZlciBDb2RlKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBgZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jYCBjb2RlLiBNeSBmaXJzdCBzdGVwIGlzIHRvIHplcm8gaW4gb24gdGhlIHJlY2VudCBjb21taXQgYW5kIHRoZSBtb2RpZmllZCBmdW5jdGlvbnMgd2l0aGluLiBLbm93aW5nIHRoZSByZWxldmFudCBjaGFuZ2VzIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBzcGVjaWZpYyBpc3N1ZSBvciBlbmhhbmNlbWVudCBJJiMzOTttIGludmVzdGlnYXRpbmcuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgZm9jdXNpbmcgb24gbGluZXMgMzI1IGFuZCAxMjk4LCBhcyB0aGV5JiMzOTtyZSBvZnRlbiB0aGUgaG90c3BvdHMgZm9yIG5ldHdvcmsgZHJpdmVyIGludGVyYWN0aW9uIGFuZCBkYXRhIGhhbmRsaW5nLiBSZWFkaW5nIGFyb3VuZCB0aGVzZSBsaW5lcyBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgaW5pdGlhbCBjb250ZXh0IGZvciBhbnkgcG90ZW50aWFsIHByb2JsZW0gYXJlYXMgb3IgaW1wcm92ZW1lbnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMjowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi91c2JuZXQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMxNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzE1Olx0XHRcdG11dGV4X2xvY2soXHUwMDI2ZGV2LVx1MDAzZWludGVycnVwdF9tdXRleCk7XG4gMzE2Olx0XHRcdHVzYl9raWxsX3VyYihkZXYtXHUwMDNlaW50ZXJydXB0KTtcbiAzMTc6XHRcdFx0ZGV2X2RiZyhcdTAwMjZkZXYtXHUwMDNldWRldi1cdTAwM2VkZXYsIFwmIzM0O2tpbGxlZCBpbnRlcnJ1cHQgVVJCIGZvciBzdXNwZW5kXFxuXCYjMzQ7KTtcbiAzMTg6XHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmRldi1cdTAwM2VpbnRlcnJ1cHRfbXV0ZXgpO1xuIDMxOTpcdFx0fVxuIDMyMDpcdH1cbiAzMjE6XHRcbiAzMjI6XHQvKiBQYXNzZXMgdGhpcyBwYWNrZXQgdXAgdGhlIHN0YWNrLCB1cGRhdGluZyBpdHMgYWNjb3VudGluZy5cbiAzMjM6XHQgKiBTb21lIGxpbmsgcHJvdG9jb2xzIGJhdGNoIHBhY2tldHMsIHNvIHRoZWlyIHJ4X2ZpeHVwIHBhdGhzXG4gMzI0Olx0ICogY2FuIHJldHVybiBjbG9uZXMgYXMgd2VsbCBhcyBqdXN0IG1vZGlmeSB0aGUgb3JpZ2luYWwgc2tiLlxuIDMyNTpcdCAqL1xuIDMyNjpcdHZvaWQgdXNibmV0X3NrYl9yZXR1cm4oc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIDMyNzpcdHtcbiAzMjg6XHRcdHN0cnVjdCBwY3B1X3N3X25ldHN0YXRzICpzdGF0czY0O1xuIDMyOTpcdFx0aW50XHRzdGF0dXM7XG4gMzMwOlx0XG4gMzMxOlx0XHRpZiAodGVzdF9iaXQoRVZFTlRfUlhfUEFVU0VELCBcdTAwMjZkZXYtXHUwMDNlZmxhZ3MpKSB7XG4gMzMyOlx0XHRcdHNrYl9xdWV1ZV90YWlsKFx1MDAyNmRldi1cdTAwM2VyeHFfcGF1c2UsIHNrYik7XG4gMzMzOlx0XHRcdHJldHVybjtcbiAzMzQ6XHRcdH1cbiAzMzU6XHRcbiAzMzY6XHRcdC8qIG9ubHkgdXBkYXRlIGlmIHVuc2V0IHRvIGFsbG93IG1pbmlkcml2ZXIgcnhfZml4dXAgb3ZlcnJpZGUgKi9cbiAzMzc6XHRcdGlmIChza2ItXHUwMDNlcHJvdG9jb2wgPT0gMClcbiAzMzg6XHRcdFx0c2tiLVx1MDAzZXByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBkZXYtXHUwMDNlbmV0KTtcbiAzMzk6XHRcbiAzNDA6XHRcdHN0YXRzNjQgPSBnZXRfY3B1X3B0cihkZXYtXHUwMDNlbmV0LVx1MDAzZXRzdGF0cyk7XG4gMzQxOlx0XHR1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKFx1MDAyNnN0YXRzNjQtXHUwMDNlc3luY3ApO1xuIDM0MjpcdFx0dTY0X3N0YXRzX2luYyhcdTAwMjZzdGF0czY0LVx1MDAzZXJ4X3BhY2tldHMpO1xuIDM0MzpcdFx0dTY0X3N0YXRzX2FkZChcdTAwMjZzdGF0czY0LVx1MDAzZXJ4X2J5dGVzLCBza2ItXHUwMDNlbGVuKTtcbiAzNDQ6XHRcdHU2NF9zdGF0c191cGRhdGVfZW5kKFx1MDAyNnN0YXRzNjQtXHUwMDNlc3luY3ApO1xuIDM0NTpcdFx0cHV0X2NwdV9wdHIoZGV2LVx1MDAzZW5ldC1cdTAwM2V0c3RhdHMpO1xuIDM0NjpcdFxuIDM0NzpcdFx0bmV0aWZfZGJnKGRldiwgcnhfc3RhdHVzLCBkZXYtXHUwMDNlbmV0LCBcJiMzNDtcdTAwM2MgcngsIGxlbiAlenUsIHR5cGUgMHgleFxcblwmIzM0OyxcbiAzNDg6XHRcdFx0ICBza2ItXHUwMDNlbGVuICYjNDM7IHNpemVvZihzdHJ1Y3QgZXRoaGRyKSwgc2tiLVx1MDAzZXByb3RvY29sKTtcbiAzNDk6XHRcdG1lbXNldChza2ItXHUwMDNlY2IsIDAsIHNpemVvZihzdHJ1Y3Qgc2tiX2RhdGEpKTtcbiAzNTA6XHRcbiAzNTE6XHRcdGlmIChza2JfZGVmZXJfcnhfdGltZXN0YW1wKHNrYikpXG4gMzUyOlx0XHRcdHJldHVybjtcbiAzNTM6XHRcbiAzNTQ6XHRcdHN0YXR1cyA9IG5ldGlmX3J4IChza2IpO1xuIDM1NTpcdFx0aWYgKHN0YXR1cyAhPSBORVRfUlhfU1VDQ0VTUylcbiAzNTY6XHRcdFx0bmV0aWZfZGJnKGRldiwgcnhfZXJyLCBkZXYtXHUwMDNlbmV0LFxuIDM1NzpcdFx0XHRcdCAgXCYjMzQ7bmV0aWZfcnggc3RhdHVzICVkXFxuXCYjMzQ7LCBzdGF0dXMpO1xuIDM1ODpcdH1cbiAzNTk6XHRFWFBPUlRfU1lNQk9MX0dQTCh1c2JuZXRfc2tiX3JldHVybik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAyOjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgyOTgKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipQZWVyaW5nIGludG8gdGhlIFRyYW5zYWN0aW9uIENvbXBsZXRpb24gTG9naWMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHplcm8gaW4gb24gYHR4X2NvbXBsZXRlYC4gSSYjMzk7bSBnZXR0aW5nIGEgaHVuY2ggYWJvdXQgc29tZXRoaW5nIGdvaW5nIG9uIGFyb3VuZCBsaW5lIDEyOTguIE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhhdCBhcmVhIGlzIGEgbGlrZWx5IHNwb3QgZm9yIHRoZSBmaW5hbGl6YXRpb24gbG9naWMsIHdoZXJlIHRoZSB0cmFuc2FjdGlvbiYjMzk7cyBmYXRlIGlzIHNlYWxlZC4gV2UmIzM5O3JlIHByb2JhYmx5IGRlYWxpbmcgd2l0aCB0aGUgZmxhZyYjMzk7cyBhc3NpZ25tZW50IG9yIHBlcmhhcHMgc29tZSBwb3N0LXByb2Nlc3NpbmcgcmVsYXRlZCB0byB0aGUgdHJhbnNhY3Rpb24mIzM5O3Mgc3VjY2Vzc2Z1bCAob3IgdW5zdWNjZXNzZnVsKSBjb25jbHVzaW9uLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHN1cnJvdW5kaW5nIGNvZGUsIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZyBqdXN0IGJlZm9yZSBhbmQganVzdCBhZnRlciB0aGF0IGxpbmUuIFRoaXMgZmxhZyYjMzk7cyBzdGF0ZSwgYW5kIHdoYXQgaGluZ2VzIG9uIGl0LCBpcyBrZXkgdG8gdGhlIG92ZXJhbGwgZmxvdywgZXNwZWNpYWxseSBpbiBhIHN5c3RlbSBsaWtlIHRoaXMuIEl0JiMzOTtzIHRpbWUgdG8gZGlnIGluIGFuZCBzZWUgaWYgYW55dGhpbmcganVtcHMgb3V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMjowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi91c2JuZXQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyOTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTI5MDpcdFx0XHRuZXRkZXZfZGJnKGRldi1cdTAwM2VuZXQsIFwmIzM0O2tldmVudCBkb25lLCBmbGFncyA9IDB4JWx4XFxuXCYjMzQ7LCBkZXYtXHUwMDNlZmxhZ3MpO1xuMTI5MTpcdH1cbjEyOTI6XHRcbjEyOTM6XHQvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuMTI5NDpcdFxuMTI5NTpcdHN0YXRpYyB2b2lkIHR4X2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVyYilcbjEyOTY6XHR7XG4xMjk3Olx0XHRzdHJ1Y3Qgc2tfYnVmZlx0XHQqc2tiID0gKHN0cnVjdCBza19idWZmICopIHVyYi1cdTAwM2Vjb250ZXh0O1xuMTI5ODpcdFx0c3RydWN0IHNrYl9kYXRhXHRcdCplbnRyeSA9IChzdHJ1Y3Qgc2tiX2RhdGEgKikgc2tiLVx1MDAzZWNiO1xuMTI5OTpcdFx0c3RydWN0IHVzYm5ldFx0XHQqZGV2ID0gZW50cnktXHUwMDNlZGV2O1xuMTMwMDpcdFxuMTMwMTpcdFx0aWYgKHVyYi1cdTAwM2VzdGF0dXMgPT0gMCkge1xuMTMwMjpcdFx0XHRzdHJ1Y3QgcGNwdV9zd19uZXRzdGF0cyAqc3RhdHM2NDtcbjEzMDM6XHRcbjEzMDQ6XHRcdFx0c3RhdHM2NCA9IGdldF9jcHVfcHRyKGRldi1cdTAwM2VuZXQtXHUwMDNldHN0YXRzKTtcbjEzMDU6XHRcdFx0dTY0X3N0YXRzX3VwZGF0ZV9iZWdpbihcdTAwMjZzdGF0czY0LVx1MDAzZXN5bmNwKTtcbjEzMDY6XHRcdFx0dTY0X3N0YXRzX2FkZChcdTAwMjZzdGF0czY0LVx1MDAzZXR4X3BhY2tldHMsIGVudHJ5LVx1MDAzZXBhY2tldHMpO1xuMTMwNzpcdFx0XHR1NjRfc3RhdHNfYWRkKFx1MDAyNnN0YXRzNjQtXHUwMDNldHhfYnl0ZXMsIGVudHJ5LVx1MDAzZWxlbmd0aCk7XG4xMzA4Olx0XHRcdHU2NF9zdGF0c191cGRhdGVfZW5kKFx1MDAyNnN0YXRzNjQtXHUwMDNlc3luY3ApO1xuMTMwOTpcdFx0XHRwdXRfY3B1X3B0cihkZXYtXHUwMDNlbmV0LVx1MDAzZXRzdGF0cyk7XG4xMzEwOlx0XHR9IGVsc2Uge1xuMTMxMTpcdFx0XHRkZXYtXHUwMDNlbmV0LVx1MDAzZXN0YXRzLnR4X2Vycm9ycyYjNDM7JiM0Mzs7XG4xMzEyOlx0XG4xMzEzOlx0XHRcdHN3aXRjaCAodXJiLVx1MDAzZXN0YXR1cykge1xuMTMxNDpcdFx0XHRjYXNlIC1FUElQRTpcbjEzMTU6XHRcdFx0XHR1c2JuZXRfZGVmZXJfa2V2ZW50KGRldiwgRVZFTlRfVFhfSEFMVCk7XG4xMzE2Olx0XHRcdFx0YnJlYWs7XG4xMzE3Olx0XG4xMzE4Olx0XHRcdC8qIHNvZnR3YXJlLWRyaXZlbiBpbnRlcmZhY2Ugc2h1dGRvd24gKi9cbjEzMTk6XHRcdFx0Y2FzZSAtRUNPTk5SRVNFVDpcdFx0Ly8gYXN5bmMgdW5saW5rXG4xMzIwOlx0XHRcdGNhc2UgLUVTSFVURE9XTjpcdFx0Ly8gaGFyZHdhcmUgZ29uZVxuMTMyMTpcdFx0XHRcdGJyZWFrO1xuMTMyMjpcdFxuMTMyMzpcdFx0XHQvKiBsaWtlIHJ4LCB0eCBnZXRzIGNvbnRyb2xsZXIgaS9vIGZhdWx0cyBkdXJpbmcgaHViX3dxXG4xMzI0Olx0XHRcdCAqIGRlbGF5cyBhbmQgc28gaXQgdXNlcyB0aGUgc2FtZSB0aHJvdHRsaW5nIG1lY2hhbmlzbS5cbjEzMjU6XHRcdFx0ICovXG4xMzI2Olx0XHRcdGNhc2UgLUVQUk9UTzpcbjEzMjc6XHRcdFx0Y2FzZSAtRVRJTUU6XG4xMzI4Olx0XHRcdGNhc2UgLUVJTFNFUTpcbjEzMjk6XHRcdFx0XHR1c2JfbWFya19sYXN0X2J1c3koZGV2LVx1MDAzZXVkZXYpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMjowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MTcwCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogOTkwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFN5bmNocm9uaXphdGlvbiBDaGFuZ2UgaW4gVVNCIE5ldHdvcmsgRHJpdmVyIFN0YXRzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgdGhlIGB1c2JuZXRfc2tiX3JldHVybmAgYW5kIGB0eF9jb21wbGV0ZWAgZnVuY3Rpb25zLCB3aGljaCBhcmUgY3JpdGljYWwgaW4gdGhlIGB1c2JuZXRgIGRyaXZlci4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBpcyBzd2l0Y2hpbmcgZnJvbSBgdGhpc19jcHVfcHRyYCBhbmQgdGhlIGBpcnFzYXZlYCB2YXJpYW50cyBvZiBgdTY0X3N0YXRzX3VwZGF0ZWAgdG8gYGdldF9jcHVfcHRyYCBhbmQgdGhlIG5vbi1gaXJxc2F2ZWAgdmVyc2lvbnMuIE15IGluaXRpYWwgdGhvdWdodCBpcywgdGhpcyBzZWVtcyBsaWtlIGEgcmVsYXRpdmVseSBzdHJhaWdodGZvcndhcmQgb3B0aW1pemF0aW9uLCBidXQgbGV0JiMzOTtzIG1ha2Ugc3VyZSBpdCYjMzk7cyB2YWxpZC4KClRoZSBrZXkgZGlmZmVyZW5jZSBJIHNlZSBpcyB0aGF0IGBnZXRfY3B1X3B0cmAgKmRpc2FibGVzIHByZWVtcHRpb24qIGJ1dCAqZG9lc24mIzM5O3QgZGlzYWJsZSBJUlFzKiwgdW5saWtlIHRoZSBwcmV2aW91cyBtZXRob2RzLiBUaGlzIHJhaXNlcyBhIHJlZCBmbGFnIGluIG15IG1pbmQgYmVjYXVzZSBgdHhfY29tcGxldGVgIGlzIGFuIGludGVycnVwdCBoYW5kbGVyIChvciBydW5zIGluIHNvZnRpcnEgY29udGV4dCB0aHJvdWdoIHRhc2tsZXRzL2JvdHRvbS1oYWx2ZXMgZGVwZW5kaW5nIG9uIHRoZSBVU0IgaG9zdCBjb250cm9sbGVyIGRyaXZlciksIGFuZCBgdXNibmV0X3NrYl9yZXR1cm5gIGFsc28gcnVucyB3aXRoaW4gYSBib3R0b20gaGFsZi4gSWYgc29tZXRoaW5nIHRoYXQgYWxzbyBtb2RpZmllcyB0aGUgNjQtYml0IHN0YXRzIGNvdWxkIGludGVycnVwdCB0aG9zZSBmdW5jdGlvbnMsIHRoZW4gdGhlIGxvY2tpbmcgc2VtYW50aWNzIGNvdWxkIGJlIGNvbXBsZXRlbHkgZGlmZmVyZW50LCBvciB0aGVyZSBjb3VsZCBiZSBhIGxvY2tkZXAgY29uZmxpY3QuIFRoaXMgbmVlZHMgdG8gYmUgY29uc2lkZXJlZCwgZXNwZWNpYWxseSBpZiBsb2NrZGVwIGNoZWNrcyBjb3VsZCBiZSB0cmlnZ2VyZWQgb3IgaWYgdGhlIGFyY2hpdGVjdHVyZSBpcyAzMi1iaXQgKHdoZXJlIHRoaXMgd291bGQgYmVoYXZlIGRpZmZlcmVudGx5KQoKT2theSwgc28gaXMgdGhpcyBldmVuIHJlYWNoYWJsZT8gRGVmaW5pdGVseSEgYHVzYm5ldGAgaXMgdGhlIHdvcmtob3JzZSBkcml2ZXIgZm9yIGEgdG9uIG9mIFVTQiBuZXR3b3JrIGRldmljZXMg4oCTIENEQyBFdGhlcm5ldCwgQVNJWCBhZGFwdGVycywgYW5kIGEgbG90IG1vcmUuIEFuZCB0aG9zZSBjYW4gKmFic29sdXRlbHkqIGJlIGVtdWxhdGVkIGluIFFFTVUgb3IgZXZlbiB3aXRoIHN5emthbGxlciwgZXNwZWNpYWxseSB1c2luZyBVU0IgZ2FkZ2V0IGVtdWxhdGlvbi4gU3l6a2FsbGVyIHJlZ3VsYXJseSBnZW5lcmF0ZXMgbmV0d29yayB0cmFmZmljIHRoYXQgY2F1c2VzIHRoZXNlIGZ1bmN0aW9ucyB0byBydW4uCgpOb3csIGxldCYjMzk7cyBhcHBseSB0aGUgdHJpYWdlIHJ1bGVzLgoKVGhpcyBjbGVhcmx5IGZhbGxzIHVuZGVyIHRoZSAmIzM0O1dvcnRoRnV6emluZz10cnVlJiMzNDsgY3JpdGVyaWE6IEl0JiMzOTtzICYjMzQ7cmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSYjMzQ7IGJlY2F1c2UgaXQmIzM5O3MgdGhlIGNvcmUgbmV0d29yayBkcml2ZXIuIEZ1cnRoZXIsIGl0JiMzOTtzIGEgJiMzNDtyZWZhY3RvcmluZyYjMzQ7IHRoYXQgY2hhbmdlcyBsb2NraW5nIGFuZCBzeW5jaHJvbml6YXRpb24uIEFsc28sIHJlYWNoYWJsZSBkcml2ZXJzIGFuZCBwcm90b2NvbHMgKFVTQiwgbmV0d29yaykgYXJlIGluY2x1ZGVkLiBUaGUgb25seSByZWFzb24gdG8gc2F5ICYjMzQ7ZmFsc2UmIzM0OyB3b3VsZCBiZSBpZiB0aGlzIHdhcyBhbiB1bnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aCAoZHJpdmVyIHRlYXJkb3duLCBldGMpIHdoaWNoIGlzIG5vdCB0aGUgY2FzZSBoZXJlLgoKVGhlcmVmb3JlLCBXb3J0aEZ1enppbmcgPSBUcnVlLgoKTm93LCB3aGljaCBjb25maWcgb3B0aW9ucyBhcmUgbmVlZGVkIHRvIHRyaWdnZXIgdGhpcyBjb2RlPyBJdCBsb29rcyBsaWtlIHdlIG5lZWQgYFVTQl9ORVRfRFJJVkVSU2AsIGBVU0JfVVNCTkVUYCwgYFVTQmAsIGFuZCBgTkVUYC4gRGlnZ2luZyBpbnRvIHRoZSBLY29uZmlnIGFuZCBNYWtlZmlsZSBmaWxlcyBjb25maXJtcyB0aGF0LiBgVVNCX1VTQk5FVGAgYWxzbyBzZWxlY3RzIGBNSUlgLCBzbyB0aGF0JiMzOTtzIGFub3RoZXIgZGVwZW5kZW5jeS4gV2UgcHJvYmFibHkgbmVlZCB0byBjaGVjayBpZiB0aGVyZSBhcmUgb3RoZXIsIG1vcmUgc3VidGxlIGRlcGVuZGVuY2llcyBsdXJraW5nIGluIHRoZSBgZHJpdmVycy9uZXQvS2NvbmZpZ2Agb3IgYGRyaXZlcnMvdXNiL0tjb25maWdgIGZpbGVzLCBidXQgdGhpcyBpcyBhIHNvbGlkIHN0YXJ0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMjowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvdXNiL0tjb25maWdcJiMzNDsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnPTUzMj1zb3VyY2UgXCYjMzQ7ZHJpdmVycy9zMzkwL25ldC9LY29uZmlnXCYjMzQ7XG5kcml2ZXJzL25ldC9LY29uZmlnLTUzMy1cbmRyaXZlcnMvbmV0L0tjb25maWc6NTM0OnNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC91c2IvS2NvbmZpZ1wmIzM0O1xuZHJpdmVycy9uZXQvS2NvbmZpZy01MzUtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAyOjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwODc5CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbCBDb25mbGljdHMgaW4gVVNCIEdhZGdldCBEcml2ZXIgU2VsZWN0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gYSBwb3RlbnRpYWwgaXNzdWUgaGVyZSwgYW5kIHRoZSBmaXJzdCB0aGluZyBJIHdhbnQgdG8gZG8gaXMgc2VlIGhvdyBwcmV2YWxlbnQgdGhlIHNlbGVjdGlvbiBvZiB0aGUgYFVTQl9VU0JORVRgIGRyaXZlciBpcy4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaW52b2x2ZXMgYSBxdWljayBkaWFnbm9zdGljOiBJIG5lZWQgdG8gYXNzZXNzIHRoZSBlY29zeXN0ZW0uIEFyZSB3ZSBzZWVpbmcgb3RoZXIgZHJpdmVycyBvciBjb25maWd1cmF0aW9ucyBhdHRlbXB0aW5nIHRvIGNsYWltIG9yIGludGVyYWN0IHdpdGggdGhpcyBzcGVjaWZpYyBtb2R1bGU/IEkmIzM5O20gbG9va2luZyBmb3IgcG90ZW50aWFsIGNvbnRlbnRpb24sIGNvbmZsaWN0cywgb3IgdW5leHBlY3RlZCBpbnRlcmFjdGlvbnMgYWNyb3NzIGRpZmZlcmVudCBkcml2ZXIgaW1wbGVtZW50YXRpb25zIG9yIHN5c3RlbSBzZXR1cHMuIElkZW50aWZ5aW5nIG92ZXJsYXBzIGVhcmx5IGNhbiBoZWxwIGRpYWdub3NlIGEgd2lkZSByYW5nZSBvZiBpc3N1ZXMuIExldCYjMzk7cyBzZWUgaWYgYW55b25lIGVsc2UgaXMgZXZlbiAqdXNpbmcqIHRoaXMsIGFuZCBob3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAyOjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VsZWN0IFVTQl9VU0JORVQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2ImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMjowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTA5NQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaXQgd2VudDoKCioqRXhhbWluaW5nIFVTQiBOZXR3b3JraW5nIERlcGVuZGVuY3kgaW4gS2VybmVsIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIGZvciB0aGUgVVNCIG5ldHdvcmsgZHJpdmVyLiBMZXQmIzM5O3Mgc2VlLi4uIHRoZSBtb3N0IG9idmlvdXMgcGxhY2UgdG8gc3RhcnQgaXMgdGhlIGBLY29uZmlnYCBmaWxlIHdpdGhpbiB0aGUgYGRyaXZlcnMvbmV0L3VzYi9gIGRpcmVjdG9yeS4gVGhhdCYjMzk7cyB3aGVyZSBhbGwgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGRlZmluZWQuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBJIG5lZWQgdG8gbG9vayBmb3IgYGRlcGVuZHMgb24gVVNCX1VTQk5FVGAuIFRoaXMgd2lsbCBzaG93IG1lIHRoZSBjb25kaXRpb25zIHRoYXQgKm11c3QqIGJlIG1ldCBmb3IgdGhlIFVTQiBuZXR3b3JrIGRyaXZlciB0byBiZSBzZWxlY3RhYmxlIG9yIGJ1aWx0LiBLbm93aW5nIHRoZSBkZXBlbmRlbmNpZXMgaXMgY3J1Y2lhbCBmb3IgdHJvdWJsZXNob290aW5nIGNvbmZpZ3VyYXRpb24gaXNzdWVzLCB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIGZlYXR1cmUgc2V0LCBhbmQgZW5zdXJpbmcgdGhlIGNvcnJlY3QgbW9kdWxlcyBhcmUgY29tcGlsZWQgd2hlbiBuZWVkZWQuIFRoaXMgc2hvdWxkIHRlbGwgbWUgd2hhdCBvdGhlciBvcHRpb25zIG5lZWQgdG8gYmUgZW5hYmxlZCBpbiBvcmRlciBmb3IgbWUgdG8gdXRpbGl6ZSBVU0IgbmV0d29ya2luZyBmZWF0dXJlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDI6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVwZW5kcyBvbi4qVVNCX1VTQk5FVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvS2NvbmZpZz0xNjY9Y29uZmlnIFVTQl9ORVRfQVg4ODE3WFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctMTY3LVx0dHJpc3RhdGUgXCYjMzQ7QVNJWCBBWDg4eHh4IEJhc2VkIFVTQiAyLjAgRXRoZXJuZXQgQWRhcHRlcnNcJiMzNDtcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnOjE2ODpcdGRlcGVuZHMgb24gVVNCX1VTQk5FVFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctMTY5LVx0c2VsZWN0IENSQzMyXG4tLVxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc9MTk4PWNvbmZpZyBVU0JfTkVUX0FYODgxNzlfMTc4QVxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctMTk5LVx0dHJpc3RhdGUgXCYjMzQ7QVNJWCBBWDg4MTc5LzE3OEEgVVNCIDMuMC8yLjAgdG8gR2lnYWJpdCBFdGhlcm5ldFwmIzM0O1xuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6MjAwOlx0ZGVwZW5kcyBvbiBVU0JfVVNCTkVUXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0yMDEtXHRzZWxlY3QgQ1JDMzJcbi0tXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZz0yMTY9Y29uZmlnIFVTQl9ORVRfQ0RDRVRIRVJcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTIxNy1cdHRyaXN0YXRlIFwmIzM0O0NEQyBFdGhlcm5ldCBzdXBwb3J0IChzbWFydCBkZXZpY2VzIHN1Y2ggYXMgY2FibGUgbW9kZW1zKVwmIzM0O1xuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6MjE4Olx0ZGVwZW5kcyBvbiBVU0JfVVNCTkVUXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0yMTktXHRkZWZhdWx0IHlcbi0tXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZz0yNDQ9Y29uZmlnIFVTQl9ORVRfQ0RDX0VFTVxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctMjQ1LVx0dHJpc3RhdGUgXCYjMzQ7Q0RDIEVFTSBzdXBwb3J0XCYjMzQ7XG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZzoyNDY6XHRkZXBlbmRzIG9uIFVTQl9VU0JORVRcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTI0Ny1cdGhlbHBcbi0tXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZz0yNTg9Y29uZmlnIFVTQl9ORVRfQ0RDX05DTVxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctMjU5LVx0dHJpc3RhdGUgXCYjMzQ7Q0RDIE5DTSBzdXBwb3J0XCYjMzQ7XG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZzoyNjA6XHRkZXBlbmRzIG9uIFVTQl9VU0JORVRcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTI2MS1cdHNlbGVjdCBVU0JfTkVUX0NEQ0VUSEVSXG4tLVxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc9Mjc4PWNvbmZpZyBVU0JfTkVUX0hVQVdFSV9DRENfTkNNXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0yNzktXHR0cmlzdGF0ZSBcJiMzNDtIdWF3ZWkgTkNNIGVtYmVkZGVkIEFUIGNoYW5uZWwgc3VwcG9ydFwmIzM0O1xuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6MjgwOlx0ZGVwZW5kcyBvbiBVU0JfVVNCTkVUXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0yODEtXHRzZWxlY3QgVVNCX1dETVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnPTI5Mz1jb25maWcgVVNCX05FVF9DRENfTUJJTVxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctMjk0LVx0dHJpc3RhdGUgXCYjMzQ7Q0RDIE1CSU0gc3VwcG9ydFwmIzM0O1xuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6Mjk1Olx0ZGVwZW5kcyBvbiBVU0JfVVNCTkVUXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0yOTYtXHRzZWxlY3QgVVNCX1dETVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnPTMxMT1jb25maWcgVVNCX05FVF9ETTk2MDFcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTMxMi1cdHRyaXN0YXRlIFwmIzM0O0Rhdmljb20gRE05Nnh4IGJhc2VkIFVTQiAxMC8xMDAgZXRoZXJuZXQgZGV2aWNlc1wmIzM0O1xuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6MzEzOlx0ZGVwZW5kcyBvbiBVU0JfVVNCTkVUXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0zMTQtXHRzZWxlY3QgQ1JDMzJcbi0tXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZz0zMTk9Y29uZmlnIFVTQl9ORVRfU1I5NzAwXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0zMjAtXHR0cmlzdGF0ZSBcJiMzNDtDb3JlQ2hpcC1zeiBTUjk3MDAgYmFzZWQgVVNCIDEuMSAxMC8xMDAgZXRoZXJuZXQgZGV2aWNlc1wmIzM0O1xuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6MzIxOlx0ZGVwZW5kcyBvbiBVU0JfVVNCTkVUXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0zMjItXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc9MzI2PWNvbmZpZyBVU0JfTkVUX1NSOTgwMFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctMzI3LVx0dHJpc3RhdGUgXCYjMzQ7Q29yZUNoaXAtc3ogU1I5ODAwIGJhc2VkIFVTQiAyLjAgMTAvMTAwIGV0aGVybmV0IGRldmljZXNcJiMzNDtcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnOjMyODpcdGRlcGVuZHMgb24gVVNCX1VTQk5FVFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctMzI5LVx0c2VsZWN0IENSQzMyXG4tLVxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc9MzQxPWNvbmZpZyBVU0JfTkVUX1NNU0M3NVhYXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0zNDItXHR0cmlzdGF0ZSBcJiMzNDtTTVNDIExBTjc1WFggYmFzZWQgVVNCIDIuMCBnaWdhYml0IGV0aGVybmV0IGRldmljZXNcJiMzNDtcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnOjM0MzpcdGRlcGVuZHMgb24gVVNCX1VTQk5FVFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctMzQ0LVx0c2VsZWN0IEJJVFJFVkVSU0Vcbi0tXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZz0zNTE9Y29uZmlnIFVTQl9ORVRfU01TQzk1WFhcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTM1Mi1cdHRyaXN0YXRlIFwmIzM0O1NNU0MgTEFOOTVYWCBiYXNlZCBVU0IgMi4wIDEwLzEwMCBldGhlcm5ldCBkZXZpY2VzXCYjMzQ7XG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZzozNTM6XHRkZXBlbmRzIG9uIFVTQl9VU0JORVRcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTM1NC1cdHNlbGVjdCBQSFlMSUJcbi0tXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZz0zNjQ9Y29uZmlnIFVTQl9ORVRfR0w2MjBBXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0zNjUtXHR0cmlzdGF0ZSBcJiMzNDtHZW5lU3lzIEdMNjIwVVNCLUEgYmFzZWQgY2FibGVzXCYjMzQ7XG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZzozNjY6XHRkZXBlbmRzIG9uIFVTQl9VU0JORVRcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTM2Ny1cdGhlbHBcbi0tXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZz0zNzM9Y29uZmlnIFVTQl9ORVRfTkVUMTA4MFxuLS1cbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTM3NS1cdGRlZmF1bHQgeVxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6Mzc2Olx0ZGVwZW5kcyBvbiBVU0JfVVNCTkVUXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0zNzctXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc9MzgyPWNvbmZpZyBVU0JfTkVUX1BMVVNCXG4tLVxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctMzg1LVx0IyBhcmUgZXZlciByZXNvbHZlZCAuLi4gdGhlbiByZW1vdmUgXCYjMzQ7ZXhwZXJpbWVudGFsXCYjMzQ7XG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZzozODY6XHRkZXBlbmRzIG9uIFVTQl9VU0JORVRcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTM4Ny1cdGhlbHBcbi0tXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZz0zOTE9Y29uZmlnIFVTQl9ORVRfTUNTNzgzMFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctMzkyLVx0dHJpc3RhdGUgXCYjMzQ7TW9zQ2hpcCBNQ1M3ODMwIGJhc2VkIEV0aGVybmV0IGFkYXB0ZXJzXCYjMzQ7XG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZzozOTM6XHRkZXBlbmRzIG9uIFVTQl9VU0JORVRcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTM5NC1cdGhlbHBcbi0tXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZz0zOTk9Y29uZmlnIFVTQl9ORVRfUk5ESVNfSE9TVFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctNDAwLVx0dHJpc3RhdGUgXCYjMzQ7SG9zdCBmb3IgUk5ESVMgYW5kIEFjdGl2ZVN5bmMgZGV2aWNlc1wmIzM0O1xuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6NDAxOlx0ZGVwZW5kcyBvbiBVU0JfVVNCTkVUXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy00MDItXHRzZWxlY3QgVVNCX05FVF9DRENFVEhFUlxuLS1cbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnPTQxOD1jb25maWcgVVNCX05FVF9DRENfU1VCU0VUXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy00MTktXHR0cmlzdGF0ZSBcJiMzNDtTaW1wbGUgVVNCIE5ldHdvcmsgTGlua3MgKENEQyBFdGhlcm5ldCBzdWJzZXQpXCYjMzQ7XG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZzo0MjA6XHRkZXBlbmRzIG9uIFVTQl9VU0JORVRcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTQyMS1cdGRlZmF1bHQgeVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnPTQ5ND1jb25maWcgVVNCX05FVF9aQVVSVVNcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTQ5NS1cdHRyaXN0YXRlIFwmIzM0O1NoYXJwIFphdXJ1cyAoc3RvY2sgUk9NcykgYW5kIGNvbXBhdGlibGVcJiMzNDtcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnOjQ5NjpcdGRlcGVuZHMgb24gVVNCX1VTQk5FVFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctNDk3LVx0c2VsZWN0IFVTQl9ORVRfQ0RDRVRIRVJcbi0tXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZz01MTI9Y29uZmlnIFVTQl9ORVRfQ1g4MjMxMF9FVEhcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTUxMy1cdHRyaXN0YXRlIFwmIzM0O0NvbmV4YW50IENYODIzMTAgVVNCIGV0aGVybmV0IHBvcnRcJiMzNDtcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnOjUxNDpcdGRlcGVuZHMgb24gVVNCX1VTQk5FVFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctNTE1LVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnPTUyMD1jb25maWcgVVNCX05FVF9LQUxNSUFcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTUyMS1cdHRyaXN0YXRlIFwmIzM0O1NhbXN1bmcgS2FsbWlhIGJhc2VkIExURSBVU0IgbW9kZW1cJiMzNDtcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnOjUyMjpcdGRlcGVuZHMgb24gVVNCX1VTQk5FVFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctNTIzLVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnPTUzMD1jb25maWcgVVNCX05FVF9RTUlfV1dBTlxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctNTMxLVx0dHJpc3RhdGUgXCYjMzQ7UU1JIFdXQU4gZHJpdmVyIGZvciBRdWFsY29tbSBNU00gYmFzZWQgM0cgYW5kIExURSBtb2RlbXNcJiMzNDtcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnOjUzMjpcdGRlcGVuZHMgb24gVVNCX1VTQk5FVFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctNTMzLVx0c2VsZWN0IFVTQl9XRE1cbi0tXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZz01NjM9Y29uZmlnIFVTQl9ORVRfSU5UNTFYMVxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctNTY0LVx0dHJpc3RhdGUgXCYjMzQ7SW50ZWxsb24gUExDIGJhc2VkIHVzYiBhZGFwdGVyXCYjMzQ7XG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZzo1NjU6XHRkZXBlbmRzIG9uIFVTQl9VU0JORVRcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTU2Ni1cdHNlbGVjdCBVU0JfTkVUX0NEQ0VUSEVSXG4tLVxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc9NTcyPWNvbmZpZyBVU0JfQ0RDX1BIT05FVFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctNTczLVx0dHJpc3RhdGUgXCYjMzQ7Q0RDIFBob25ldCBzdXBwb3J0XCYjMzQ7XG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZzo1NzQ6XHRkZXBlbmRzIG9uIFBIT05FVCBcdTAwMjZcdTAwMjYgVVNCX1VTQk5FVFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctNTc1LVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnPTU5MD1jb25maWcgVVNCX1NJRVJSQV9ORVRcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTU5MS1cdHRyaXN0YXRlIFwmIzM0O1VTQi10by1XV0FOIERyaXZlciBmb3IgU2llcnJhIFdpcmVsZXNzIG1vZGVtc1wmIzM0O1xuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6NTkyOlx0ZGVwZW5kcyBvbiBVU0JfVVNCTkVUXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy01OTMtXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc9NjE0PWNvbmZpZyBVU0JfTkVUX0NIOTIwMFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctNjE1LVx0dHJpc3RhdGUgXCYjMzQ7UWluZ0hlbmcgQ0g5MjAwIFVTQiBldGhlcm5ldCBzdXBwb3J0XCYjMzQ7XG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZzo2MTY6XHRkZXBlbmRzIG9uIFVTQl9VU0JORVRcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTYxNy1cdHNlbGVjdCBNSUlcbi0tXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZz02MjU9Y29uZmlnIFVTQl9ORVRfQVFDMTExXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy02MjYtXHR0cmlzdGF0ZSBcJiMzNDtBcXVhbnRpYSBBUXRpb24gVVNCIHRvIDUvMi41R2JFIENvbnRyb2xsZXJzIHN1cHBvcnRcJiMzNDtcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnOjYyNzpcdGRlcGVuZHMgb24gVVNCX1VTQk5FVFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctNjI4LVx0c2VsZWN0IENSQzMyXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAyOjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzOTc0CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMjExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVVNCIE5ldHdvcmsgRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgbXkgYnJhaW4gemVyb2VzIGluIG9uIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnM6IGBDT05GSUdfVVNCX1VTQk5FVGAsIGBDT05GSUdfVVNCX05FVF9EUklWRVJTYCwgYW5kIG9mIGNvdXJzZSwgdGhlIGJyb2FkZXIgYENPTkZJR19VU0JgIGFuZCBgQ09ORklHX05FVGAuIFRob3NlIGFyZSB0aGUgZ2F0ZWtlZXBlcnMgaGVyZTsgaWYgdGhleSYjMzk7cmUgbm90IHNldCwgdGhpcyBwYXRjaCBpcyBhIG5vbi1zdGFydGVyLgoKTm93LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBndXRzIG9mIHRoZSBjb2RlLiBUaGUgcGF0Y2ggdG91Y2hlcyB0d28gZnVuY3Rpb25zIHdpdGhpbiBgZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jYDogYHVzYm5ldF9za2JfcmV0dXJuYCBhbmQgYHR4X2NvbXBsZXRlYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlaXIgcm9sZXMgd2l0aGluIHRoZSBVU0IgbmV0d29yayBkcml2ZXIuCgpBIHF1aWNrIGNoZWNrIGNvbmZpcm1zIGB1c2JuZXRfc2tiX3JldHVybmAgaXMgZXhwb3J0ZWQsIG1lYW5pbmcgaXQmIzM5O3MgaW50ZW5kZWQgdG8gYmUgdXNlZCBieSBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsLiBIb3dldmVyLCBgdHhfY29tcGxldGVgIGlzIHN0YXRpYyB3aXRoaW4gYHVzYm5ldC5jYC4gVGhpcyB0ZWxscyBtZSBpbW1lZGlhdGVseSB0aGF0IGl0JiMzOTtzIGFuIGludGVybmFsIGZ1bmN0aW9uLCB3aGljaCBuYXJyb3dzIGRvd24gaXRzIGltcGFjdC4KCkJ1dCwgSSBzdGlsbCBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgbmFtZSBgdHhfY29tcGxldGVgIGlzbiYjMzk7dCB1c2VkIGVsc2V3aGVyZSwgY2F1c2luZyBwb3RlbnRpYWwgY29uZmxpY3RzLiBJJiMzOTtsbCBuZWVkIHRvIHJ1biBhIHF1aWNrIGdyZXAgYWNyb3NzIHRoZSBrZXJuZWwgc291cmNlIHRvIGNvbmZpcm0gdGhlIHNjb3BlIG9mIHRoaXMgbmFtZS4gSXQmIzM5O3MgcG9zc2libGUgSSYjMzk7dmUgc2VlbiBpdCB1c2VkIGVsc2V3aGVyZSwgYW5kIGl0JiMzOTtzIGFsd2F5cyBnb29kIHRvIGJlIHRob3JvdWdoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMjowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2b2lkIHR4X2NvbXBsZXRlXFwofHN0YXRpYyB2b2lkIHR4X2NvbXBsZXRlXFwoJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9jZGMtcGhvbmV0LmM9MjU9c3RydWN0IHVzYnBuX2RldiB7XG4tLVxuZHJpdmVycy9uZXQvdXNiL2NkYy1waG9uZXQuYy00MS1cbmRyaXZlcnMvbmV0L3VzYi9jZGMtcGhvbmV0LmM6NDI6c3RhdGljIHZvaWQgdHhfY29tcGxldGUoc3RydWN0IHVyYiAqcmVxKTtcbmRyaXZlcnMvbmV0L3VzYi9jZGMtcGhvbmV0LmMtNDMtc3RhdGljIHZvaWQgcnhfY29tcGxldGUoc3RydWN0IHVyYiAqcmVxKTtcbi0tXG5kcml2ZXJzL25ldC91c2IvY2RjLXBob25ldC5jPTQ4PXN0YXRpYyBuZXRkZXZfdHhfdCB1c2Jwbl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvdXNiL2NkYy1waG9uZXQuYy04Mi1cbmRyaXZlcnMvbmV0L3VzYi9jZGMtcGhvbmV0LmM6ODM6c3RhdGljIHZvaWQgdHhfY29tcGxldGUoc3RydWN0IHVyYiAqcmVxKVxuZHJpdmVycy9uZXQvdXNiL2NkYy1waG9uZXQuYy04NC17XG4tLVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYz0zNTgxPXN0YXRpYyBlbnVtIHNrYl9zdGF0ZSBkZWZlcl9iaChzdHJ1Y3QgbGFuNzh4eF9uZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTM2MDQtXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjM2MDU6c3RhdGljIHZvaWQgdHhfY29tcGxldGUoc3RydWN0IHVyYiAqdXJiKVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0zNjA2LXtcbi0tXG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmM9MTE4ND11c2JuZXRfZGVmZXJyZWRfa2V2ZW50KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmMtMTI5NC1cbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYzoxMjk1OnN0YXRpYyB2b2lkIHR4X2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVyYilcbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYy0xMjk2LXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9iNDNsZWdhY3kvcGlvLmM9NjM9c3RhdGljIHZvaWQgdHhfZGF0YShzdHJ1Y3QgYjQzbGVnYWN5X3Bpb3F1ZXVlICpxdWV1ZSxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9iNDNsZWdhY3kvcGlvLmMtODgtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9iNDNsZWdhY3kvcGlvLmM6ODk6c3RhdGljIHZvaWQgdHhfY29tcGxldGUoc3RydWN0IGI0M2xlZ2FjeV9waW9xdWV1ZSAqcXVldWUsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9iNDNsZWdhY3kvcGlvLmMtOTAtXHRcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9wcmludGVyLmM9MjY1PXN0YXRpYyB2b2lkIHJ4X2NvbXBsZXRlKHN0cnVjdCB1c2JfZXAgKmVwLCBzdHJ1Y3QgdXNiX3JlcXVlc3QgKnJlcSlcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9wcmludGVyLmMtMzEzLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfcHJpbnRlci5jOjMxNDpzdGF0aWMgdm9pZCB0eF9jb21wbGV0ZShzdHJ1Y3QgdXNiX2VwICplcCwgc3RydWN0IHVzYl9yZXF1ZXN0ICpyZXEpXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9wcmludGVyLmMtMzE1LXtcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdV9ldGhlci5jPTM5Nj1zdGF0aWMgdm9pZCBldGhfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL3VfZXRoZXIuYy00MDgtXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdV9ldGhlci5jOjQwOTpzdGF0aWMgdm9pZCB0eF9jb21wbGV0ZShzdHJ1Y3QgdXNiX2VwICplcCwgc3RydWN0IHVzYl9yZXF1ZXN0ICpyZXEpXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdV9ldGhlci5jLTQxMC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAyOjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MzEyCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOgoKKipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbCBCb3R0bGVuZWNrcyBpbiBVU0IgTmV0d29yayBUcmFuc21pc3Npb24qKgoKT2theSwgc28gd2UmIzM5O3JlIHNlZWluZyBwZXJmb3JtYW5jZSBpc3N1ZXMgd2l0aCB0aGUgVVNCIG5ldHdvcmsgc3RhY2suIFRoZSBmaXJzdCBwbGFjZSBteSBtaW5kIG5hdHVyYWxseSBnb2VzIGlzIHRoZSB0cmFuc21pc3Npb24gcGF0aCwgYW5kIGluIHBhcnRpY3VsYXIsIHRoZSBjYWxsYmFjayBhc3NvY2lhdGVkIHdpdGggc2VuZGluZyBkYXRhLiBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciBpbml0aWF0aW5nIHRyYW5zbWlzc2lvbiwgd2hpY2ggSSB0aGluayBpcyBgdXNibmV0X3N0YXJ0X3htaXRgIGluIHRoaXMgY29udGV4dCwgb3IgYW55IG90aGVyIGZ1bmN0aW9uIHRoYXQgbWlnaHQgYmUgY2FsbGluZyBvciByZWx5aW5nIG9uIGB0eF9jb21wbGV0ZWAuIEkgd2FudCB0byBsb29rIGNsb3NlbHkgYXQgaG93IHRoYXQgY2FsbGJhY2ssIGB0eF9jb21wbGV0ZWAsIGlzIGJlaW5nIHVzZWQgYW5kIHdoYXQgZGVwZW5kZW5jaWVzIGl0IGhhcy4gSXMgdGhlcmUgYmxvY2tpbmcgZ29pbmcgb24/IEFyZSB3ZSB3YWl0aW5nIG9uIG11dGV4ZXMsIG9yIG90aGVyIG9wZXJhdGlvbnMsIHRoYXQgY291bGQgYmUgc2xvd2luZyB1cyBkb3duPyBBcmUgd2UgcGVyaGFwcyB0aHJhc2hpbmcgbWVtb3J5IGFzIGNvbXBsZXRpb25zIGFyZSBwcm9jZXNzZWQ/IFdlIG5lZWQgdG8gbG9vayBmb3IgYW55IHBvdGVudGlhbCBib3R0bGVuZWNrcywgbGlrZSBleGNlc3NpdmUgY29weWluZywgb3IgZXZlbiBzaW1wbGUgbWlzc2VkIG9wcG9ydHVuaXRpZXMgZm9yIHBpcGVsaW5pbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzZXF1ZW5jaW5nIGFuZCBjcml0aWNhbCBwYXRocyB0byBjb25maXJtIHdoZXRoZXIgbXkgZmlyc3QgaW5zdGluY3QgaXMgY29ycmVjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDI6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dHhfY29tcGxldGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvdXNibmV0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jPTExODQ9dXNibmV0X2RlZmVycmVkX2tldmVudChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jLTEyOTQtXG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmM6MTI5NTpzdGF0aWMgdm9pZCB0eF9jb21wbGV0ZShzdHJ1Y3QgdXJiICp1cmIpXG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmMtMTI5Ni17XG4tLVxuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jPTE0MDA9bmV0ZGV2X3R4X3QgdXNibmV0X3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldClcbi0tXG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmMtMTQzNi1cdHVzYl9maWxsX2J1bGtfdXJiKHVyYiwgZGV2LVx1MDAzZXVkZXYsIGRldi1cdTAwM2VvdXQsXG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmM6MTQzNzpcdFx0XHQgIHNrYi1cdTAwM2VkYXRhLCBza2ItXHUwMDNlbGVuLCB0eF9jb21wbGV0ZSwgc2tiKTtcbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYy0xNDM4LVx0aWYgKGRldi1cdTAwM2VjYW5fZG1hX3NnKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAyOjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1ODQ1CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipGb2N1c2luZyBvbiBVU0IgTmV0d29yayBEcml2ZXIgQ29tcGxldGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gcmVhbGx5IGRpZyBpbnRvIGhvdyB0aGUgVVNCIG5ldHdvcmsgZHJpdmVyIGhhbmRsZXMgcGFja2V0IHJldHVybiBhbmQgdHJhbnNtaXNzaW9uIGNvbXBsZXRpb24uIGB1c2JuZXRfc2tiX3JldHVybmAgYW5kIHRoZSByZWxhdGVkIGB0eF9jb21wbGV0ZWAgb3IgYHVzYm5ldF9zdGFydF94bWl0YCBmdW5jdGlvbnMg4oCTIHRob3NlIGZlZWwgbGlrZSB0aGUga2V5IHBvaW50cyBvZiBmb2N1cyByaWdodCBub3cuIFRoZXkmIzM5O3JlIGdvaW5nIHRvIGlsbHVtaW5hdGUgdGhlIGNvcmUgb2YgdGhlIGRhdGEgZmxvdy4KCk15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgY2xlYXI6IEkmIzM5O20gZ29pbmcgdG8gc2NhbiB0aGUgYHVzYm5ldC5jYCBzb3VyY2UgY29kZSwgYnV0IEkgYWxzbyBuZWVkIHRvIGJyYW5jaCBvdXQgYW5kIGxvb2sgYXQgKm90aGVyKiBuZXR3b3JrIGRyaXZlcnMgdGhhdCBpbnRlcmZhY2Ugd2l0aCBVU0IuIEkmIzM5O2xsIHNlYXJjaCBmb3IgYWxsIHRoZSBjYWxsZXJzIG9mIGB1c2JuZXRfc2tiX3JldHVybmAsIHRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIGxhbmRzY2FwZS4gU2VlIGhvdyBvdGhlciBkcml2ZXJzIGFyZSB1c2luZyBhbmQgaW50ZXJmYWNpbmcgd2l0aCB0aGUgdXNiIHN0YWNrLiBUaGlzIGJyb2FkZXIgcGVyc3BlY3RpdmUgbWlnaHQgZXhwb3NlIGFueSBhcmNoaXRlY3R1cmFsIHBhdHRlcm5zIG9yIHBvdGVudGlhbCBib3R0bGVuZWNrcyBJIHNob3VsZCBiZSBhd2FyZSBvZi4gVGhlIGdvYWwgaXMgYSBjb21wcmVoZW5zaXZlIHVuZGVyc3RhbmRpbmcsIG5vdCBqdXN0IGEgbmFycm93IHZpZXcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAyOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3VzYm5ldF9za2JfcmV0dXJuJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvYXFjMTExLmM9MTA3Mj1zdGF0aWMgaW50IGFxYzExMV9yeF9maXh1cChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jLTExNjItXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmM6MTE2MzpcdFx0dXNibmV0X3NrYl9yZXR1cm4oZGV2LCBuZXdfc2tiKTtcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy0xMTY0LVx0XHRpZiAocGt0X2NvdW50ID09IDApXG4tLVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmM9MTM2PWludCBhc2l4X3J4X2ZpeHVwX2ludGVybmFsKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0yMjMtXHRcdFx0aWYgKCFyeC1cdTAwM2VyZW1haW5pbmcpIHtcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jOjIyNDpcdFx0XHRcdHVzYm5ldF9za2JfcmV0dXJuKGRldiwgcngtXHUwMDNlYXhfc2tiKTtcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jLTIyNS1cdFx0XHRcdHJ4LVx1MDAzZWF4X3NrYiA9IE5VTEw7XG4tLVxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzlfMTc4YS5jPTEzNTc9c3RhdGljIGludCBheDg4MTc5X3J4X2ZpeHVwKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3OV8xNzhhLmMtMTQ2Ni1cdFx0YXg4ODE3OV9yeF9jaGVja3N1bShheF9za2IsIHBrdF9oZHIpO1xuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzlfMTc4YS5jOjE0Njc6XHRcdHVzYm5ldF9za2JfcmV0dXJuKGRldiwgYXhfc2tiKTtcbmRyaXZlcnMvbmV0L3VzYi9heDg4MTc5XzE3OGEuYy0xNDY4LVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9jZGNfZWVtLmM9MTU0PXN0YXRpYyBpbnQgZWVtX3J4X2ZpeHVwKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5kcml2ZXJzL25ldC91c2IvY2RjX2VlbS5jLTMxOS1cdFx0XHR9IGVsc2VcbmRyaXZlcnMvbmV0L3VzYi9jZGNfZWVtLmM6MzIwOlx0XHRcdFx0dXNibmV0X3NrYl9yZXR1cm4oZGV2LCBza2IyKTtcbmRyaXZlcnMvbmV0L3VzYi9jZGNfZWVtLmMtMzIxLVx0XHR9XG4tLVxuZHJpdmVycy9uZXQvdXNiL2NkY19tYmltLmM9NDEyPXN0YXRpYyBpbnQgY2RjX21iaW1fcnhfZml4dXAoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2luKVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9jZGNfbWJpbS5jLTQ4Ni1cdFx0XHRcdGdvdG8gZXJyb3I7XG5kcml2ZXJzL25ldC91c2IvY2RjX21iaW0uYzo0ODc6XHRcdFx0dXNibmV0X3NrYl9yZXR1cm4oZGV2LCBza2IpO1xuZHJpdmVycy9uZXQvdXNiL2NkY19tYmltLmMtNDg4LVx0XHRcdHBheWxvYWQgJiM0Mzs9IGxlbjtcdC8qIGNvdW50IHBheWxvYWQgYnl0ZXMgaW4gdGhpcyBOVEIgKi9cbi0tXG5kcml2ZXJzL25ldC91c2IvY2RjX25jbS5jPTE3Mjc9aW50IGNkY19uY21fcnhfZml4dXAoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2luKVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9jZGNfbmNtLmMtMTgyMS1cdFx0XHRza2JfcHV0X2RhdGEoc2tiLCBza2JfaW4tXHUwMDNlZGF0YSAmIzQzOyBvZmZzZXQsIGxlbik7XG5kcml2ZXJzL25ldC91c2IvY2RjX25jbS5jOjE4MjI6XHRcdFx0dXNibmV0X3NrYl9yZXR1cm4oZGV2LCBza2IpO1xuZHJpdmVycy9uZXQvdXNiL2NkY19uY20uYy0xODIzLVx0XHRcdHBheWxvYWQgJiM0Mzs9IGxlbjtcdC8qIGNvdW50IHBheWxvYWQgYnl0ZXMgaW4gdGhpcyBOVEIgKi9cbi0tXG5kcml2ZXJzL25ldC91c2IvY3g4MjMxMF9ldGguYz0yNDM9c3RhdGljIGludCBjeDgyMzEwX3J4X2ZpeHVwKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5kcml2ZXJzL25ldC91c2IvY3g4MjMxMF9ldGguYy0yNjItXHRcdCAgICAgICBkZXYtXHUwMDNlcGFydGlhbF9yZW0pO1xuZHJpdmVycy9uZXQvdXNiL2N4ODIzMTBfZXRoLmM6MjYzOlx0XHR1c2JuZXRfc2tiX3JldHVybihkZXYsIHNrYjIpO1xuZHJpdmVycy9uZXQvdXNiL2N4ODIzMTBfZXRoLmMtMjY0LVx0XHRza2JfcHVsbChza2IsIChkZXYtXHUwMDNlcGFydGlhbF9yZW0gJiM0MzsgMSkgXHUwMDI2IH4xKTtcbi0tXG5kcml2ZXJzL25ldC91c2IvY3g4MjMxMF9ldGguYy0zMDYtXHRcdC8qIHByb2Nlc3MgdGhlIHBhY2tldCAqL1xuZHJpdmVycy9uZXQvdXNiL2N4ODIzMTBfZXRoLmM6MzA3Olx0XHR1c2JuZXRfc2tiX3JldHVybihkZXYsIHNrYjIpO1xuZHJpdmVycy9uZXQvdXNiL2N4ODIzMTBfZXRoLmMtMzA4LVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9nbDYyMGEuYz02Nz1zdGF0aWMgaW50IGdlbmVsaW5rX3J4X2ZpeHVwKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5kcml2ZXJzL25ldC91c2IvZ2w2MjBhLmMtMTE1LVx0XHRcdHNrYl9wdXRfZGF0YShnbF9za2IsIHBhY2tldC1cdTAwM2VwYWNrZXRfZGF0YSwgc2l6ZSk7XG5kcml2ZXJzL25ldC91c2IvZ2w2MjBhLmM6MTE2Olx0XHRcdHVzYm5ldF9za2JfcmV0dXJuKGRldiwgZ2xfc2tiKTtcbmRyaXZlcnMvbmV0L3VzYi9nbDYyMGEuYy0xMTctXHRcdH1cbi0tXG5kcml2ZXJzL25ldC91c2Iva2FsbWlhLmM9MjMwPWthbG1pYV9yeF9maXh1cChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuZHJpdmVycy9uZXQvdXNiL2thbG1pYS5jLTMyOC1cdFx0ZWxzZSB7XG5kcml2ZXJzL25ldC91c2Iva2FsbWlhLmM6MzI5Olx0XHRcdHVzYm5ldF9za2JfcmV0dXJuKGRldiwgc2tiMik7XG5kcml2ZXJzL25ldC91c2Iva2FsbWlhLmMtMzMwLVx0XHRcdHNrYl9wdWxsKHNrYiwgZXRoZXJfcGFja2V0X2xlbmd0aCk7XG4tLVxuZHJpdmVycy9uZXQvdXNiL2xnLXZsNjAwLmM9OTY9c3RhdGljIGludCB2bDYwMF9yeF9maXh1cChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuZHJpdmVycy9uZXQvdXNiL2xnLXZsNjAwLmMtMjA0LVx0XHRcdHNrYl90cmltKGNsb25lLCBwYWNrZXRfbGVuKTtcbmRyaXZlcnMvbmV0L3VzYi9sZy12bDYwMC5jOjIwNTpcdFx0XHR1c2JuZXRfc2tiX3JldHVybihkZXYsIGNsb25lKTtcbmRyaXZlcnMvbmV0L3VzYi9sZy12bDYwMC5jLTIwNi1cbi0tXG5kcml2ZXJzL25ldC91c2IvbGctdmw2MDAuYy0yMTEtXHRcdFx0aWYgKHMtXHUwMDNlY3VycmVudF9yeF9idWYpIHtcbmRyaXZlcnMvbmV0L3VzYi9sZy12bDYwMC5jOjIxMjpcdFx0XHRcdHVzYm5ldF9za2JfcmV0dXJuKGRldiwgYnVmKTtcbmRyaXZlcnMvbmV0L3VzYi9sZy12bDYwMC5jLTIxMy1cdFx0XHRcdHMtXHUwMDNlY3VycmVudF9yeF9idWYgPSBOVUxMO1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9ybmRpc19ob3N0LmM9NDk1PWludCBybmRpc19yeF9maXh1cChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuZHJpdmVycy9uZXQvdXNiL3JuZGlzX2hvc3QuYy01NDUtXG5kcml2ZXJzL25ldC91c2Ivcm5kaXNfaG9zdC5jOjU0NjpcdFx0dXNibmV0X3NrYl9yZXR1cm4oZGV2LCBza2IyKTtcbmRyaXZlcnMvbmV0L3VzYi9ybmRpc19ob3N0LmMtNTQ3LVx0fVxuZHJpdmVycy9uZXQvdXNiL3JuZGlzX2hvc3QuYy01NDgtXG5kcml2ZXJzL25ldC91c2Ivcm5kaXNfaG9zdC5jOjU0OTpcdC8qIGNhbGxlciB3aWxsIHVzYm5ldF9za2JfcmV0dXJuIHRoZSByZW1haW5pbmcgcGFja2V0ICovXG5kcml2ZXJzL25ldC91c2Ivcm5kaXNfaG9zdC5jLTU1MC1cdGlmICh1bmxpa2VseShkc3RfbWFjX2ZpeHVwKSlcbi0tXG5kcml2ZXJzL25ldC91c2Ivc2llcnJhX25ldC5jPTc5NT1zdGF0aWMgaW50IHNpZXJyYV9uZXRfcnhfZml4dXAoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9zaWVycmFfbmV0LmMtODQyLVx0XHRpZiAobmV3X3NrYilcbmRyaXZlcnMvbmV0L3VzYi9zaWVycmFfbmV0LmM6ODQzOlx0XHRcdHVzYm5ldF9za2JfcmV0dXJuKGRldiwgbmV3X3NrYik7XG5kcml2ZXJzL25ldC91c2Ivc2llcnJhX25ldC5jLTg0NC1cbi0tXG5kcml2ZXJzL25ldC91c2Ivc21zYzc1eHguYz0yMTcxPXN0YXRpYyBpbnQgc21zYzc1eHhfcnhfZml4dXAoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9zbXNjNzV4eC5jLTIyNDItXG5kcml2ZXJzL25ldC91c2Ivc21zYzc1eHguYzoyMjQzOlx0XHRcdHVzYm5ldF9za2JfcmV0dXJuKGRldiwgYXhfc2tiKTtcbmRyaXZlcnMvbmV0L3VzYi9zbXNjNzV4eC5jLTIyNDQtXHRcdH1cbi0tXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYz0xODc4PXN0YXRpYyBpbnQgc21zYzk1eHhfcnhfZml4dXAoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jLTE5NDktXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYzoxOTUwOlx0XHRcdHVzYm5ldF9za2JfcmV0dXJuKGRldiwgYXhfc2tiKTtcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jLTE5NTEtXHRcdH1cbi0tXG5kcml2ZXJzL25ldC91c2Ivc3I5NzAwLmM9MzIzPXN0YXRpYyBpbnQgc3I5NzAwX3J4X2ZpeHVwKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5kcml2ZXJzL25ldC91c2Ivc3I5NzAwLmMtMzc0LVx0XHRtZW1jcHkoc3Jfc2tiLVx1MDAzZWRhdGEsIHNrYi1cdTAwM2VkYXRhICYjNDM7IDMsIGxlbik7XG5kcml2ZXJzL25ldC91c2Ivc3I5NzAwLmM6Mzc1Olx0XHR1c2JuZXRfc2tiX3JldHVybihkZXYsIHNyX3NrYik7XG5kcml2ZXJzL25ldC91c2Ivc3I5NzAwLmMtMzc2LVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9zcjk4MDAuYz02Mj1zdGF0aWMgaW50IHNyX3J4X2ZpeHVwKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5kcml2ZXJzL25ldC91c2Ivc3I5ODAwLmMtOTUtXHRcdG1lbWNweShzcl9za2ItXHUwMDNlZGF0YSwgc2tiLVx1MDAzZWRhdGEgJiM0Mzsgb2Zmc2V0LCBzaXplKTtcbmRyaXZlcnMvbmV0L3VzYi9zcjk4MDAuYzo5NjpcdFx0dXNibmV0X3NrYl9yZXR1cm4oZGV2LCBzcl9za2IpO1xuZHJpdmVycy9uZXQvdXNiL3NyOTgwMC5jLTk3LVxuLS1cbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYz0zMTI9c3RhdGljIHZvaWQgX191c2JuZXRfc3RhdHVzX3N0b3BfZm9yY2Uoc3RydWN0IHVzYm5ldCAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYy0zMjUtICovXG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmM6MzI2OnZvaWQgdXNibmV0X3NrYl9yZXR1cm4oc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jLTMyNy17XG4tLVxuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jLTM1OC19XG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmM6MzU5OkVYUE9SVF9TWU1CT0xfR1BMKHVzYm5ldF9za2JfcmV0dXJuKTtcbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYy0zNjAtXG4tLVxuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jPTU3MD1zdGF0aWMgaW5saW5lIGludCByeF9wcm9jZXNzKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmMtNTkxLVxuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jOjU5MjpcdHVzYm5ldF9za2JfcmV0dXJuKGRldiwgc2tiKTtcbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYy01OTMtXHRyZXR1cm4gMDtcbi0tXG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmM9Njk4PXZvaWQgdXNibmV0X3Jlc3VtZV9yeChzdHJ1Y3QgdXNibmV0ICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jLTcwNi1cdHdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUoXHUwMDI2ZGV2LVx1MDAzZXJ4cV9wYXVzZSkpICE9IE5VTEwpIHtcbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYzo3MDc6XHRcdHVzYm5ldF9za2JfcmV0dXJuKGRldiwgc2tiKTtcbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYy03MDgtXHRcdG51bSYjNDM7JiM0Mzs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAyOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MDMzCgkJCQkJCQlvdXRwdXQ6IDE2MAoJCQkJCQkJdGhvdWdodHM6IDI3NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBhIFJlY2VudCBVU0IgTmV0d29ya2luZyBEcml2ZXIgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kLCByaWdodCBvZmYgdGhlIGJhdCwgSSBuZWVkIHRvIHplcm8gaW4gb24gYSBjb3VwbGUgb2YgY3J1Y2lhbCBzeW1ib2xzOiBgdXNibmV0X3NrYl9yZXR1cm5gIGFuZCBgdHhfY29tcGxldGVgLCBvciwgaW4gc29tZSBjYXNlcywgYHVzYm5ldF9zdGFydF94bWl0YC4gTGV0JiMzOTtzIGNvbmZpcm0gdGhhdCBgdHhfY29tcGxldGVgIGlzIGluZGVlZCBpbiBgdXNibmV0LmNgLiBBaGEsIHRoZXJlIGl0IGlzLCBsaW5lIDEyOTUuIEdvb2QuCgpOb3csIGJlZm9yZSBJIGRpdmUgdG9vIGRlZXAsIGxldCYjMzk7cyBtYWtlIHN1cmUgSSBoYXZlIGFsbCB0aGUgcHJlcmVxdWlzaXRlcyBjb3ZlcmVkLiBTZWVtcyB0aGUgc3lzdGVtIGZsYWdnZWQgaXQgYXMgYFdvcnRoRnV6emluZzogdHJ1ZWAsIHdoaWNoIGlzIGEgZ29vZCBpbml0aWFsIHNpZ24uIFRoZSBgRm9jdXNTeW1ib2xzYCBhcmUgc3BvdCBvbiwgZXhhY3RseSB3aGF0IEkgZXhwZWN0ZWQuIFRoZSBjb3JyZWN0IGNvbmZpZ3MgYXJlIGVuYWJsZWQ6IGBVU0JfVVNCTkVUYCwgYW5kIGBVU0JfTkVUX0RSSVZFUlNgLiBHb29kLCBnb29kLiBUaGVzZSBhcmUgdGhlIHNwZWNpZmljIG9uZXMsIHRob3VnaCBgVVNCYCBhbmQgYE5FVGAgaW4gZ2VuZXJhbCB3b3VsZCBhbHNvIHN1ZmZpY2UuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZG8gYSBmaW5hbCBzYW5pdHkgY2hlY2sgb2YgdGhlIGNvcmUgcmVhc29uaW5nIGJlaGluZCB0aGlzIGNoYW5nZS4gVGhlIHBhdGNoLCBhcyBJIHVuZGVyc3RhbmQgaXQsIGlzIGZpZGRsaW5nIHdpdGggaG93IHBlci1DUFUgNjQtYml0IHN0YXRzIGFyZSB1cGRhdGVkLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIG1vZGlmeWluZyB0aGUgbG9naWMgd2l0aGluIHRoZSBgdXNibmV0X3NrYl9yZXR1cm4oKWAgYW5kIGB0eF9jb21wbGV0ZSgpYCBmdW5jdGlvbnMgd2l0aGluIHRoZSBjb3JlIFVTQiBuZXR3b3JraW5nIGRyaXZlciwgYHVzYm5ldC5jYC4gSXQmIzM5O3MgYSBzd2l0Y2hlcm9vIGZyb20gdXNpbmcgYHU2NF9zdGF0c191cGRhdGVfYmVnaW5faXJxc2F2ZSgpYCB0byBgZ2V0X2NwdV9wdHIoKWAgY29tYmluZWQgd2l0aCBgdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbigpYC4gVGhpcyBzaGlmdCBhbHRlcnMgdGhlIHN5bmNocm9uaXphdGlvbiwgcHJlZW1wdGlvbiwgYW5kIElSUSBoYW5kbGluZyBzZW1hbnRpY3MgaW4gYXJlYXMgb2YgbmV0d29yayBjb2RlIHRoYXQgYXJlIGFjY2Vzc2libGUgdmlhIGVtdWxhdGVkIFVTQiBkZXZpY2VzIGFuZCBzdWJzZXF1ZW50IG5ldHdvcmsgdHJhZmZpYy4KCk9rYXksIHRoYXQgYWxsIG1ha2VzIHNlbnNlLiBUaW1lIHRvIHJlY29yZCB0aGUgcmVzdWx0cy4gSSYjMzk7bGwgY2FsbCBgc2V0LXJlc3VsdHNgIG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDI6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTQl9VU0JORVQmIzM0OywKICAgICYjMzQ7VVNCX05FVF9EUklWRVJTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dXNibmV0X3NrYl9yZXR1cm4mIzM0OywKICAgICYjMzQ7dHhfY29tcGxldGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgcGVyLUNQVSA2NC1iaXQgbmV0d29yayBzdGF0aXN0aWNzIHVwZGF0ZSBzeW5jaHJvbml6YXRpb24gaW4gdXNibmV0X3NrYl9yZXR1cm4gYW5kIHR4X2NvbXBsZXRlIChkcml2ZXJzL25ldC91c2IvdXNibmV0LmMpLCByZXBsYWNpbmcgSVJRLXNhdmluZyB1NjRfc3RhdHMgaGVscGVycyB3aXRoIGdldF9jcHVfcHRyL3B1dF9jcHVfcHRyIHBhaXJzIGFuZCB1NjRfc3RhdHNfdXBkYXRlX2JlZ2luL2VuZC4gVGhpcyB0b3VjaGVzIHJlYWNoYWJsZSBVU0IgbmV0d29ya2luZyBkcml2ZXIgbG9naWMgdGhhdCBjYW4gYmUgdGVzdGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB3aXRoIGVtdWxhdGVkIFVTQiBuZXR3b3JrIGRldmljZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTQl9VU0JORVQmIzM0OywKICAgICYjMzQ7VVNCX05FVF9EUklWRVJTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dXNibmV0X3NrYl9yZXR1cm4mIzM0OywKICAgICYjMzQ7dHhfY29tcGxldGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgcGVyLUNQVSA2NC1iaXQgbmV0d29yayBzdGF0aXN0aWNzIHVwZGF0ZSBzeW5jaHJvbml6YXRpb24gaW4gdXNibmV0X3NrYl9yZXR1cm4gYW5kIHR4X2NvbXBsZXRlIChkcml2ZXJzL25ldC91c2IvdXNibmV0LmMpLCByZXBsYWNpbmcgSVJRLXNhdmluZyB1NjRfc3RhdHMgaGVscGVycyB3aXRoIGdldF9jcHVfcHRyL3B1dF9jcHVfcHRyIHBhaXJzIGFuZCB1NjRfc3RhdHNfdXBkYXRlX2JlZ2luL2VuZC4gVGhpcyB0b3VjaGVzIHJlYWNoYWJsZSBVU0IgbmV0d29ya2luZyBkcml2ZXIgbG9naWMgdGhhdCBjYW4gYmUgdGVzdGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB3aXRoIGVtdWxhdGVkIFVTQiBuZXR3b3JrIGRldmljZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAyOjEwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDI6MTA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBwZXItQ1BVIG5ldHdvcmsgc3RhdGlzdGljcyBhY2NvdW50aW5nIGluIGRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYywgcmVwbGFjaW5nIHRoaXNfY3B1X3B0cigpIGFuZCBpcnFzYXZlL2lycXJlc3RvcmUgNjQtYml0IHN0YXRzIHVwZGF0ZSBoZWxwZXJzIHdpdGggZ2V0X2NwdV9wdHIoKSwgdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbi9lbmQoKSwgYW5kIHB1dF9jcHVfcHRyKCkuIFRoaXMgZW5zdXJlcyBwcmVlbXB0aW9uIGlzIHByb3Blcmx5IGRpc2FibGVkIHdoaWxlIGFjY2Vzc2luZyB0aGUgcGVyLUNQVSBwb2ludGVyLlxuXG5UaGUgY2hhbmdlcyBkbyBub3QgYWxsb2NhdGUgbmV3IGJ1ZmZlcnMsIG1hbmlwdWxhdGUgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGFsdGVyIGJ1ZmZlciBsZW5ndGgvYm91bmRzIGNhbGN1bGF0aW9ucywgb3IgY29weSBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm8tbGVhayByaXNrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIEtNU0FOIGZ1enppbmcuIEFueSBwb3RlbnRpYWwgc3luY2hyb25pemF0aW9uIG9yIHByZWVtcHRpb24gYnVncyB3b3VsZCBiZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dlcnMgKERFQlVHX1BSRUVNUFQsIExPQ0tERVAsIEtBU0FOKS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDYxNTY1YWM0OWM5ODRiZTQwZDIxMjNjYTAwOWRiMmFjZDc0Mjc3NTAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCA4IDAyOjA3OjI3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jIGIvZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jCmluZGV4IGExOWVjZjcxOGYzNmEuLjNkZjcyYjBjNmJjZmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi91c2JuZXQuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC91c2IvdXNibmV0LmMKQEAgLTMyNSw4ICYjNDM7MzI1LDcgQEAgc3RhdGljIHZvaWQgX191c2JuZXRfc3RhdHVzX3N0b3BfZm9yY2Uoc3RydWN0IHVzYm5ldCAqZGV2KQogICovCiB2b2lkIHVzYm5ldF9za2JfcmV0dXJuKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlzdHJ1Y3QgcGNwdV9zd19uZXRzdGF0cyAqc3RhdHM2NCA9IHRoaXNfY3B1X3B0cihkZXYtJmd0O25ldC0mZ3Q7dHN0YXRzKTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwomIzQzOwlzdHJ1Y3QgcGNwdV9zd19uZXRzdGF0cyAqc3RhdHM2NDsKIAlpbnQJc3RhdHVzOwogCiAJaWYgKHRlc3RfYml0KEVWRU5UX1JYX1BBVVNFRCwgJmFtcDtkZXYtJmd0O2ZsYWdzKSkgewpAQCAtMzM4LDEwICYjNDM7MzM3LDEyIEBAIHZvaWQgdXNibmV0X3NrYl9yZXR1cm4oc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCWlmIChza2ItJmd0O3Byb3RvY29sID09IDApCiAJCXNrYi0mZ3Q7cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldi0mZ3Q7bmV0KTsKIAotCWZsYWdzID0gdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbl9pcnFzYXZlKCZhbXA7c3RhdHM2NC0mZ3Q7c3luY3ApOwomIzQzOwlzdGF0czY0ID0gZ2V0X2NwdV9wdHIoZGV2LSZndDtuZXQtJmd0O3RzdGF0cyk7CiYjNDM7CXU2NF9zdGF0c191cGRhdGVfYmVnaW4oJmFtcDtzdGF0czY0LSZndDtzeW5jcCk7CiAJdTY0X3N0YXRzX2luYygmYW1wO3N0YXRzNjQtJmd0O3J4X3BhY2tldHMpOwogCXU2NF9zdGF0c19hZGQoJmFtcDtzdGF0czY0LSZndDtyeF9ieXRlcywgc2tiLSZndDtsZW4pOwotCXU2NF9zdGF0c191cGRhdGVfZW5kX2lycXJlc3RvcmUoJmFtcDtzdGF0czY0LSZndDtzeW5jcCwgZmxhZ3MpOwomIzQzOwl1NjRfc3RhdHNfdXBkYXRlX2VuZCgmYW1wO3N0YXRzNjQtJmd0O3N5bmNwKTsKJiM0MzsJcHV0X2NwdV9wdHIoZGV2LSZndDtuZXQtJmd0O3RzdGF0cyk7CiAKIAluZXRpZl9kYmcoZGV2LCByeF9zdGF0dXMsIGRldi0mZ3Q7bmV0LCAmIzM0OyZsdDsgcngsIGxlbiAlenUsIHR5cGUgMHgleFxuJiMzNDssCiAJCSAgc2tiLSZndDtsZW4gJiM0Mzsgc2l6ZW9mKHN0cnVjdCBldGhoZHIpLCBza2ItJmd0O3Byb3RvY29sKTsKQEAgLTEyOTgsMTMgJiM0MzsxMjk5LDE0IEBAIHN0YXRpYyB2b2lkIHR4X2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVyYikKIAlzdHJ1Y3QgdXNibmV0CQkqZGV2ID0gZW50cnktJmd0O2RldjsKIAogCWlmICh1cmItJmd0O3N0YXR1cyA9PSAwKSB7Ci0JCXN0cnVjdCBwY3B1X3N3X25ldHN0YXRzICpzdGF0czY0ID0gdGhpc19jcHVfcHRyKGRldi0mZ3Q7bmV0LSZndDt0c3RhdHMpOwotCQl1bnNpZ25lZCBsb25nIGZsYWdzOwomIzQzOwkJc3RydWN0IHBjcHVfc3dfbmV0c3RhdHMgKnN0YXRzNjQ7CiAKLQkJZmxhZ3MgPSB1NjRfc3RhdHNfdXBkYXRlX2JlZ2luX2lycXNhdmUoJmFtcDtzdGF0czY0LSZndDtzeW5jcCk7CiYjNDM7CQlzdGF0czY0ID0gZ2V0X2NwdV9wdHIoZGV2LSZndDtuZXQtJmd0O3RzdGF0cyk7CiYjNDM7CQl1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKCZhbXA7c3RhdHM2NC0mZ3Q7c3luY3ApOwogCQl1NjRfc3RhdHNfYWRkKCZhbXA7c3RhdHM2NC0mZ3Q7dHhfcGFja2V0cywgZW50cnktJmd0O3BhY2tldHMpOwogCQl1NjRfc3RhdHNfYWRkKCZhbXA7c3RhdHM2NC0mZ3Q7dHhfYnl0ZXMsIGVudHJ5LSZndDtsZW5ndGgpOwotCQl1NjRfc3RhdHNfdXBkYXRlX2VuZF9pcnFyZXN0b3JlKCZhbXA7c3RhdHM2NC0mZ3Q7c3luY3AsIGZsYWdzKTsKJiM0MzsJCXU2NF9zdGF0c191cGRhdGVfZW5kKCZhbXA7c3RhdHM2NC0mZ3Q7c3luY3ApOwomIzQzOwkJcHV0X2NwdV9wdHIoZGV2LSZndDtuZXQtJmd0O3RzdGF0cyk7CiAJfSBlbHNlIHsKIAkJZGV2LSZndDtuZXQtJmd0O3N0YXRzLnR4X2Vycm9ycyYjNDM7JiM0Mzs7CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAyOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3MTYKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA0ODQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgS01TQU4gRnV6emluZyBOZWVkcyoqCgpPa2F5LCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgdGhpcyBwYXRjaCBhbmQgZGVjaWRlIGlmIHdlIG5lZWQgdG8gY29uc2lkZXIgS01TQU4gZnV6emluZy4gSXQgYXBwZWFycyB0aGUgY2hhbmdlcyBhcmUgY29uZmluZWQgdG8gYGRyaXZlcnMvbmV0L3VzYi91c2JuZXQuY2AuIFNwZWNpZmljYWxseSwgdGhleSYjMzk7dmUgdG91Y2hlZCB0aGUgYHVzYm5ldF9za2JfcmV0dXJuYCBhbmQgYHR4X2NvbXBsZXRlYCBmdW5jdGlvbnMuCgpJIGNhbiBzZWUgd2hhdCYjMzk7cyBjaGFuZ2VkIGluIHRoZSBjb2RlOiB0aGV5JiMzOTt2ZSBtb3ZlZCBmcm9tIHVzaW5nIGB0aGlzX2NwdV9wdHJgIHdpdGggaW50ZXJydXB0IHNhdmUvcmVzdG9yZSBhcm91bmQgdGhlIHN0YXRzIHVwZGF0ZSwgdG8gdXNpbmcgYGdldF9jcHVfcHRyYC9gcHV0X2NwdV9wdHJgIGFuZCB0aGUgbmV3ZXIgYHU2NF9zdGF0c191cGRhdGVfYmVnaW5gL2BlbmRgIGZ1bmN0aW9ucy4gU28sIHRoZXkmIzM5O3JlIGV4cGxpY2l0bHkgb2J0YWluaW5nIHRoZSBwZXItQ1BVIHN0YXRpc3RpY3MgcG9pbnRlciBub3cuIEl0JiMzOTtzIGEgc3RyYWlnaHRmb3J3YXJkIGNoYW5nZSwgbGlrZWx5IGFpbWVkIGF0IGltcHJvdmluZyBwZXJmb3JtYW5jZSBvciBhbGlnbmluZyB3aXRoIGEgbmV3ZXIgbG9ja2luZyBzY2hlbWUgd2l0aGluIHRoZSBrZXJuZWwgc3RhdGlzdGljcyBpbmZyYXN0cnVjdHVyZS4gVGhlIG9sZCBjb2RlIHdhczogb2J0YWluaW5nIHRoZSBwZXItY3B1IHZhcmlhYmxlICpiZWZvcmUqIHNhdmluZyBpbnRlcnJ1cHRzLCB1cGRhdGluZywgYW5kIHJlc3RvcmluZyBpbnRlcnJ1cHRzIHRvIGJlIHNhZmUuIFRoZSBuZXcgY29kZSBpczogb2J0YWluaW5nIHRoZSBwZXItY3B1IHZhcmlhYmxlLCB1cGRhdGluZyBpdCwgYW5kICp0aGVuKiByZXR1cm5pbmcgdGhlIGNwdSB2YXJpYWJsZS4KCkdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIGNoYW5nZSwgaXQmIzM5O3MgYSByZWZhY3RvcmluZywgdG91Y2hpbmcgb24gc3luY2hyb25pemF0aW9uIGFuZCBwZXItQ1BVIGRhdGEuIEl0JiMzOTtzIGxpa2VseSB0aGF0IGl0JiMzOTtzIG9rYXksIGJ1dCBpdCBkb2VzIHRvdWNoIGEgc2Vuc2l0aXZlIGFyZWEsIGFuZCB0aGVzZSBraW5kcyBvZiBjaGFuZ2VzIGNhbiBhbHdheXMgaW50cm9kdWNlIHN1YnRsZSBjb25jdXJyZW5jeSBpc3N1ZXMuIEl0JiMzOTtzIHdvcnRoIGEgcXVpY2sgY2hlY2sgd2l0aCBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAganVzdCB0byBnZXQgYSBicm9hZGVyIHZpZXcgb2YgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gYGRyaXZlcnMvbmV0L3VzYi91c2JuZXQuY2AgdG8gbG9vayBmb3IgYW55IHJlbGF0ZWQgaXNzdWVzLiBXaGlsZSB0aGUgY2hhbmdlIHNlZW1zIHJlYXNvbmFibGUgb24gaXRzIG93biwgYSBxdWljayBjb250ZXh0dWFsIGluc3BlY3Rpb24gaXMgYWx3YXlzIGEgZ29vZCBwcmFjdGljZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDI6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvdXNibmV0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDMyMDpcdH1cbiAzMjE6XHRcbiAzMjI6XHQvKiBQYXNzZXMgdGhpcyBwYWNrZXQgdXAgdGhlIHN0YWNrLCB1cGRhdGluZyBpdHMgYWNjb3VudGluZy5cbiAzMjM6XHQgKiBTb21lIGxpbmsgcHJvdG9jb2xzIGJhdGNoIHBhY2tldHMsIHNvIHRoZWlyIHJ4X2ZpeHVwIHBhdGhzXG4gMzI0Olx0ICogY2FuIHJldHVybiBjbG9uZXMgYXMgd2VsbCBhcyBqdXN0IG1vZGlmeSB0aGUgb3JpZ2luYWwgc2tiLlxuIDMyNTpcdCAqL1xuIDMyNjpcdHZvaWQgdXNibmV0X3NrYl9yZXR1cm4oc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIDMyNzpcdHtcbiAzMjg6XHRcdHN0cnVjdCBwY3B1X3N3X25ldHN0YXRzICpzdGF0czY0O1xuIDMyOTpcdFx0aW50XHRzdGF0dXM7XG4gMzMwOlx0XG4gMzMxOlx0XHRpZiAodGVzdF9iaXQoRVZFTlRfUlhfUEFVU0VELCBcdTAwMjZkZXYtXHUwMDNlZmxhZ3MpKSB7XG4gMzMyOlx0XHRcdHNrYl9xdWV1ZV90YWlsKFx1MDAyNmRldi1cdTAwM2VyeHFfcGF1c2UsIHNrYik7XG4gMzMzOlx0XHRcdHJldHVybjtcbiAzMzQ6XHRcdH1cbiAzMzU6XHRcbiAzMzY6XHRcdC8qIG9ubHkgdXBkYXRlIGlmIHVuc2V0IHRvIGFsbG93IG1pbmlkcml2ZXIgcnhfZml4dXAgb3ZlcnJpZGUgKi9cbiAzMzc6XHRcdGlmIChza2ItXHUwMDNlcHJvdG9jb2wgPT0gMClcbiAzMzg6XHRcdFx0c2tiLVx1MDAzZXByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBkZXYtXHUwMDNlbmV0KTtcbiAzMzk6XHRcbiAzNDA6XHRcdHN0YXRzNjQgPSBnZXRfY3B1X3B0cihkZXYtXHUwMDNlbmV0LVx1MDAzZXRzdGF0cyk7XG4gMzQxOlx0XHR1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKFx1MDAyNnN0YXRzNjQtXHUwMDNlc3luY3ApO1xuIDM0MjpcdFx0dTY0X3N0YXRzX2luYyhcdTAwMjZzdGF0czY0LVx1MDAzZXJ4X3BhY2tldHMpO1xuIDM0MzpcdFx0dTY0X3N0YXRzX2FkZChcdTAwMjZzdGF0czY0LVx1MDAzZXJ4X2J5dGVzLCBza2ItXHUwMDNlbGVuKTtcbiAzNDQ6XHRcdHU2NF9zdGF0c191cGRhdGVfZW5kKFx1MDAyNnN0YXRzNjQtXHUwMDNlc3luY3ApO1xuIDM0NTpcdFx0cHV0X2NwdV9wdHIoZGV2LVx1MDAzZW5ldC1cdTAwM2V0c3RhdHMpO1xuIDM0NjpcdFxuIDM0NzpcdFx0bmV0aWZfZGJnKGRldiwgcnhfc3RhdHVzLCBkZXYtXHUwMDNlbmV0LCBcJiMzNDtcdTAwM2MgcngsIGxlbiAlenUsIHR5cGUgMHgleFxcblwmIzM0OyxcbiAzNDg6XHRcdFx0ICBza2ItXHUwMDNlbGVuICYjNDM7IHNpemVvZihzdHJ1Y3QgZXRoaGRyKSwgc2tiLVx1MDAzZXByb3RvY29sKTtcbiAzNDk6XHRcdG1lbXNldChza2ItXHUwMDNlY2IsIDAsIHNpemVvZihzdHJ1Y3Qgc2tiX2RhdGEpKTtcbiAzNTA6XHRcbiAzNTE6XHRcdGlmIChza2JfZGVmZXJfcnhfdGltZXN0YW1wKHNrYikpXG4gMzUyOlx0XHRcdHJldHVybjtcbiAzNTM6XHRcbiAzNTQ6XHRcdHN0YXR1cyA9IG5ldGlmX3J4IChza2IpO1xuIDM1NTpcdFx0aWYgKHN0YXR1cyAhPSBORVRfUlhfU1VDQ0VTUylcbiAzNTY6XHRcdFx0bmV0aWZfZGJnKGRldiwgcnhfZXJyLCBkZXYtXHUwMDNlbmV0LFxuIDM1NzpcdFx0XHRcdCAgXCYjMzQ7bmV0aWZfcnggc3RhdHVzICVkXFxuXCYjMzQ7LCBzdGF0dXMpO1xuIDM1ODpcdH1cbiAzNTk6XHRFWFBPUlRfU1lNQk9MX0dQTCh1c2JuZXRfc2tiX3JldHVybik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAyOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzMDYKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQW5hbHl6aW5nIHRoZSBJbXBvcnRhbmNlIG9mIGB0eF9jb21wbGV0ZWAqKgoKQWxyaWdodCwgc28gd2UmIzM5O3ZlIGNvdmVyZWQgdGhlIGJhc2ljcywgYnV0IG5vdyBJIG5lZWQgdG8gZGlnIGRlZXBlci4gSSYjMzk7bSB0aGlua2luZywgbGV0JiMzOTtzIG5vdCBqdXN0IGdsb3NzIG92ZXIgdGhpbmdzIOKAkyBpdCYjMzk7cyBjcnVjaWFsIHdlIGFsc28gdGhvcm91Z2hseSBleGFtaW5lIHRoZSBgdHhfY29tcGxldGVgIGZpZWxkIG9yIGZ1bmN0aW9uLCB3aGF0ZXZlciBpdCYjMzk7cyBjYWxsZWQgaW4gdGhpcyBzcGVjaWZpYyBjb250ZXh0LiBVbmRlcnN0YW5kaW5nIHRoZSBudWFuY2VzIG9mIHRyYW5zYWN0aW9uIGNvbXBsZXRpb24gaXMgYWJzb2x1dGVseSBjcml0aWNhbC4gSSBuZWVkIHRvIGtub3c6IHdoYXQgZXhhY3RseSBkb2VzIGl0IHNpZ25hbD8gSXMgaXQgYSBiaW5hcnkgZmxhZywgYSBzdGF0dXMgY29kZSwgb3Igc29tZXRoaW5nIG1vcmUgY29tcGxleD8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvZiBpdHMgZGlmZmVyZW50IHN0YXRlcz8gRG9lcyBpdCBtZWFuIHRoZSB0cmFuc2FjdGlvbiBpcyBmaW5hbGl6ZWQsIGNvbW1pdHRlZCwgcm9sbGVkIGJhY2ssIG9yIHN0aWxsIHBlbmRpbmc/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGVkZ2UgY2FzZXMgb3IgcmFjZSBjb25kaXRpb25zIGFzc29jaWF0ZWQgd2l0aCBpdHMgc3RhdGU/CgpGcmFua2x5LCBJIGNhbiYjMzk7dCBwcm9jZWVkIGZ1cnRoZXIgdW50aWwgSSBoYXZlIGEgcm9jay1zb2xpZCBncmFzcCBvZiB3aGF0IGB0eF9jb21wbGV0ZWAgcmVwcmVzZW50cyBhbmQgaG93IGl0IGJlaGF2ZXMuIEl0cyBjaGFyYWN0ZXJpc3RpY3MgYXJlIGdvaW5nIHRvIGJlIGZ1bmRhbWVudGFsIHRvIHRoZSBkZXNpZ24gb2YgYW55IHN5c3RlbSBvciBzb2x1dGlvbiBoZXJlLiBJIG5lZWQgdG8gYmUgYWJsZSB0byBwcmVkaWN0IGl0cyBiZWhhdmlvciBhbmQgaXRzIHBvdGVudGlhbCBpbXBhY3QuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvciBpbiB0aGUgY29udGV4dCBvZiBvdXIgcmVxdWlyZW1lbnRzLiBUaGlzIGNvdWxkIGhhdmUgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zLCBzZWN1cml0eSByYW1pZmljYXRpb25zLCBvciBldmVuIGltcGxpY2F0aW9ucyBmb3IgZGF0YSBpbnRlZ3JpdHkuIEEgdGhvcm91Z2ggdW5kZXJzdGFuZGluZyBvZiBgdHhfY29tcGxldGVgIGlzIGVzc2VudGlhbC4gV2UgY2FuJiMzOTt0IGFmZm9yZCB0byBvdmVybG9vayBhbnkgZGV0YWlscyBhdCB0aGlzIHN0YWdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMjoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi91c2JuZXQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyOTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTI5MDpcdFx0XHRuZXRkZXZfZGJnKGRldi1cdTAwM2VuZXQsIFwmIzM0O2tldmVudCBkb25lLCBmbGFncyA9IDB4JWx4XFxuXCYjMzQ7LCBkZXYtXHUwMDNlZmxhZ3MpO1xuMTI5MTpcdH1cbjEyOTI6XHRcbjEyOTM6XHQvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuMTI5NDpcdFxuMTI5NTpcdHN0YXRpYyB2b2lkIHR4X2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVyYilcbjEyOTY6XHR7XG4xMjk3Olx0XHRzdHJ1Y3Qgc2tfYnVmZlx0XHQqc2tiID0gKHN0cnVjdCBza19idWZmICopIHVyYi1cdTAwM2Vjb250ZXh0O1xuMTI5ODpcdFx0c3RydWN0IHNrYl9kYXRhXHRcdCplbnRyeSA9IChzdHJ1Y3Qgc2tiX2RhdGEgKikgc2tiLVx1MDAzZWNiO1xuMTI5OTpcdFx0c3RydWN0IHVzYm5ldFx0XHQqZGV2ID0gZW50cnktXHUwMDNlZGV2O1xuMTMwMDpcdFxuMTMwMTpcdFx0aWYgKHVyYi1cdTAwM2VzdGF0dXMgPT0gMCkge1xuMTMwMjpcdFx0XHRzdHJ1Y3QgcGNwdV9zd19uZXRzdGF0cyAqc3RhdHM2NDtcbjEzMDM6XHRcbjEzMDQ6XHRcdFx0c3RhdHM2NCA9IGdldF9jcHVfcHRyKGRldi1cdTAwM2VuZXQtXHUwMDNldHN0YXRzKTtcbjEzMDU6XHRcdFx0dTY0X3N0YXRzX3VwZGF0ZV9iZWdpbihcdTAwMjZzdGF0czY0LVx1MDAzZXN5bmNwKTtcbjEzMDY6XHRcdFx0dTY0X3N0YXRzX2FkZChcdTAwMjZzdGF0czY0LVx1MDAzZXR4X3BhY2tldHMsIGVudHJ5LVx1MDAzZXBhY2tldHMpO1xuMTMwNzpcdFx0XHR1NjRfc3RhdHNfYWRkKFx1MDAyNnN0YXRzNjQtXHUwMDNldHhfYnl0ZXMsIGVudHJ5LVx1MDAzZWxlbmd0aCk7XG4xMzA4Olx0XHRcdHU2NF9zdGF0c191cGRhdGVfZW5kKFx1MDAyNnN0YXRzNjQtXHUwMDNlc3luY3ApO1xuMTMwOTpcdFx0XHRwdXRfY3B1X3B0cihkZXYtXHUwMDNlbmV0LVx1MDAzZXRzdGF0cyk7XG4xMzEwOlx0XHR9IGVsc2Uge1xuMTMxMTpcdFx0XHRkZXYtXHUwMDNlbmV0LVx1MDAzZXN0YXRzLnR4X2Vycm9ycyYjNDM7JiM0Mzs7XG4xMzEyOlx0XG4xMzEzOlx0XHRcdHN3aXRjaCAodXJiLVx1MDAzZXN0YXR1cykge1xuMTMxNDpcdFx0XHRjYXNlIC1FUElQRTpcbjEzMTU6XHRcdFx0XHR1c2JuZXRfZGVmZXJfa2V2ZW50KGRldiwgRVZFTlRfVFhfSEFMVCk7XG4xMzE2Olx0XHRcdFx0YnJlYWs7XG4xMzE3Olx0XG4xMzE4Olx0XHRcdC8qIHNvZnR3YXJlLWRyaXZlbiBpbnRlcmZhY2Ugc2h1dGRvd24gKi9cbjEzMTk6XHRcdFx0Y2FzZSAtRUNPTk5SRVNFVDpcdFx0Ly8gYXN5bmMgdW5saW5rXG4xMzIwOlx0XHRcdGNhc2UgLUVTSFVURE9XTjpcdFx0Ly8gaGFyZHdhcmUgZ29uZVxuMTMyMTpcdFx0XHRcdGJyZWFrO1xuMTMyMjpcdFxuMTMyMzpcdFx0XHQvKiBsaWtlIHJ4LCB0eCBnZXRzIGNvbnRyb2xsZXIgaS9vIGZhdWx0cyBkdXJpbmcgaHViX3dxXG4xMzI0Olx0XHRcdCAqIGRlbGF5cyBhbmQgc28gaXQgdXNlcyB0aGUgc2FtZSB0aHJvdHRsaW5nIG1lY2hhbmlzbS5cbjEzMjU6XHRcdFx0ICovXG4xMzI2Olx0XHRcdGNhc2UgLUVQUk9UTzpcbjEzMjc6XHRcdFx0Y2FzZSAtRVRJTUU6XG4xMzI4Olx0XHRcdGNhc2UgLUVJTFNFUTpcbjEzMjk6XHRcdFx0XHR1c2JfbWFya19sYXN0X2J1c3koZGV2LVx1MDAzZXVkZXYpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMjoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MjkyCgkJCQkJCQlvdXRwdXQ6IDE4OQoJCQkJCQkJdGhvdWdodHM6IDM1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgQ29kZSBDaGFuZ2UqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY2hhbmdlIGFuZCBpdCBzZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLiBXZSYjMzk7cmUgcmVwbGFjaW5nIHRoZSBvbGRlciBgdGhpc19jcHVfcHRyKC4uLilgIGFuZCB0aGUgYHU2NF9zdGF0c191cGRhdGVfYmVnaW5faXJxc2F2ZS9lbmRfaXJxcmVzdG9yZWAgZnVuY3Rpb25zIHdpdGggdGhlIG5ld2VyIGBnZXRfY3B1X3B0ciguLi4pYCwgYHU2NF9zdGF0c191cGRhdGVfYmVnaW4vZW5kYCwgYW5kIGBwdXRfY3B1X3B0ciguLi4pYCBhcHByb2FjaC4gVGhlIGtleSBkaWZmZXJlbmNlIEkgc2VlIGlzIHRoYXQgYHRoaXNfY3B1X3B0cmAgaGFzIHRoZSBwb3RlbnRpYWwgdG8gY2F1c2UgaXNzdWVzIHdpdGggcHJlZW1wdGlvbiBvciBTTVAgaWYgaXQmIzM5O3MgdXNlZCBpbiBhIHByZWVtcHRpYmxlIGNvbnRleHQgYW5kIGNvdWxkIGV2ZW4gdHJpZ2dlciBgbWlnaHRfc2xlZXAoKWAuICBgZ2V0X2NwdV9wdHJgLCBvbiB0aGUgb3RoZXIgaGFuZCwgZXhwbGljaXRseSBkaXNhYmxlcyBwcmVlbXB0aW9uIHdpdGggYHByZWVtcHRfZGlzYWJsZSgpYCBhbmQgZ2l2ZXMgdXMgdGhlIHBlci1DUFUgcG9pbnRlciwgYW5kIHRoZW4gcmUtZW5hYmxlcyBpdCB3aXRoIHRoZSBtYXRjaGluZyBgcHV0X2NwdV9wdHIoKWAuCgpNeSBmaXJzdCBpbW1lZGlhdGUgY29uY2VybiwgYXMgYWx3YXlzLCBpcyB3aGV0aGVyIHRoaXMgaW50cm9kdWNlcyBhbnkgc29ydCBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMgb3IgcG90ZW50aWFsIGluZm9ybWF0aW9uIGxlYWtzLiBMZXQmIzM5O3MgYnJlYWsgdGhhdCBkb3duOgoqICAgSSBjYW4gc2VlIHRoYXQgd2UmIzM5O3JlICpub3QqIG1ha2luZyBhbnkgbmV3IG1lbW9yeSBhbGxvY2F0aW9ucy4KKiAgIFdlJiMzOTtyZSAqbm90KiBjb3B5aW5nIGFueSBrZXJuZWwgZGF0YSB0byB1c2VyIHNwYWNlLCBzbyB0aGF0JiMzOTtzIGEgcGx1cy4KKiAgIEkgZG9uJiMzOTt0IHNlZSBhbnl0aGluZyB0aGF0IHdvdWxkIHN1Z2dlc3Qgd2UmIzM5O3JlIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuCiogICBBbmQsIG1vc3QgaW1wb3J0YW50bHksIHRoZXJlJiMzOTtzIG5vIGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgZGVwZW5kcyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4KClNvLCBpdCYjMzk7cyBzZWVtaW5nIGxpa2UgdGhpcyBpcyBwdXJlbHkgYSBjaGFuZ2UgZm9yIHBlci1DUFUgc3RhdHMgc3luY2hyb25pemF0aW9uIGFuZCBwcmVlbXB0aW9uIHNhZmV0eS4gSXQmIzM5O3MgbG9va2luZyBnb29kIGZyb20gYW4gdW5pbml0aWFsaXplZCBtZW1vcnkvaW5mby1sZWFrIHBlcnNwZWN0aXZlLCBzbyBgTmVlZHNLTVNBTmAgaXMgZGVmaW5pdGVseSBgZmFsc2VgLgoKTm93LCBsZXQmIzM5O3Mgc3RlcCBiYWNrIGFuZCBjb25zaWRlciBob3cgdGhpcyByZWxhdGVzIHRvIG91ciB1c3VhbCBkZWJ1Z2dpbmcgdG9vbHMgbGlrZSBLQVNBTiBhbmQgS01TQU4uIFdpdGggdGhlIGNoYW5nZXMgYmVpbmcgcHJpbWFyaWx5IGFib3V0IHByZWVtcHRpb24sIHBlci1DUFUgYWNjZXNzIHN5bmNocm9uaXphdGlvbiB1c2luZyBgZ2V0X2NwdV9wdHJgIC8gYHB1dF9jcHVfcHRyYCBhbmQgYHU2NF9zdGF0c191cGRhdGVfYmVnaW5gL2BlbmRgLCBhbnkgc3luY2hyb25pemF0aW9uIG9yIGNvbmN1cnJlbmN5IGlzc3VlcyAob3IgcHJlZW1wdGlibGUgY29udGV4dCB2aW9sYXRpb25zKSBhcmUgc29tZXRoaW5nIHRoYXQgYXJlIHdlbGwgaGFuZGxlZCBieSB0aGUgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2VycyAoREVCVUdfUFJFRU1QVCwgbG9ja2RlcCwgZXRjLikuIFRoaXMgaXMgYSBrbm93biBhbmQgd2VsbC11bmRlcnN0b29kIGFyZWEgZm9yIHBvdGVudGlhbCBpc3N1ZXMuIFRoZSBtYWluIGZvY3VzIG9mIEtNU0FOIGlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIGFuZCBsZWFrcyB0byB1c2VyIHNwYWNlLiBTaW5jZSB0aGlzIHBhdGNoIGRvZXNuJiMzOTt0IGludm9sdmUgYW55IG1lbW9yeSBhbGxvY2F0aW9uLCBjb3B5aW5nLCBmb3JtYXR0aW5nLCBvciByZWFkaW5nIG9mIHVuaW5pdGlhbGl6ZWQgZGF0YSwgaXQgaXMgbm90IHNvbWV0aGluZyB0aGF0IHdvdWxkIHRyaWdnZXIgYSBLTVNBTiB3YXJuaW5nLgoKVGhlcmVmb3JlLCBJJiMzOTttIGNvbmZpZGVudCBpbiBzZXR0aW5nIHRoZSByZXN1bHRzIGFjY29yZGluZ2x5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMjoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBwZXItQ1BVIG5ldHdvcmsgc3RhdGlzdGljcyBhY2NvdW50aW5nIGluIGRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYywgcmVwbGFjaW5nIHRoaXNfY3B1X3B0cigpIGFuZCBpcnFzYXZlL2lycXJlc3RvcmUgNjQtYml0IHN0YXRzIHVwZGF0ZSBoZWxwZXJzIHdpdGggZ2V0X2NwdV9wdHIoKSwgdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbi9lbmQoKSwgYW5kIHB1dF9jcHVfcHRyKCkuIFRoaXMgZW5zdXJlcyBwcmVlbXB0aW9uIGlzIHByb3Blcmx5IGRpc2FibGVkIHdoaWxlIGFjY2Vzc2luZyB0aGUgcGVyLUNQVSBwb2ludGVyLlxuXG5UaGUgY2hhbmdlcyBkbyBub3QgYWxsb2NhdGUgbmV3IGJ1ZmZlcnMsIG1hbmlwdWxhdGUgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGFsdGVyIGJ1ZmZlciBsZW5ndGgvYm91bmRzIGNhbGN1bGF0aW9ucywgb3IgY29weSBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm8tbGVhayByaXNrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIEtNU0FOIGZ1enppbmcuIEFueSBwb3RlbnRpYWwgc3luY2hyb25pemF0aW9uIG9yIHByZWVtcHRpb24gYnVncyB3b3VsZCBiZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dlcnMgKERFQlVHX1BSRUVNUFQsIExPQ0tERVAsIEtBU0FOKS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHBlci1DUFUgbmV0d29yayBzdGF0aXN0aWNzIGFjY291bnRpbmcgaW4gZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jLCByZXBsYWNpbmcgdGhpc19jcHVfcHRyKCkgYW5kIGlycXNhdmUvaXJxcmVzdG9yZSA2NC1iaXQgc3RhdHMgdXBkYXRlIGhlbHBlcnMgd2l0aCBnZXRfY3B1X3B0cigpLCB1NjRfc3RhdHNfdXBkYXRlX2JlZ2luL2VuZCgpLCBhbmQgcHV0X2NwdV9wdHIoKS4gVGhpcyBlbnN1cmVzIHByZWVtcHRpb24gaXMgcHJvcGVybHkgZGlzYWJsZWQgd2hpbGUgYWNjZXNzaW5nIHRoZSBwZXItQ1BVIHBvaW50ZXIuXG5cblRoZSBjaGFuZ2VzIGRvIG5vdCBhbGxvY2F0ZSBuZXcgYnVmZmVycywgbWFuaXB1bGF0ZSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgYWx0ZXIgYnVmZmVyIGxlbmd0aC9ib3VuZHMgY2FsY3VsYXRpb25zLCBvciBjb3B5IGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mby1sZWFrIHJpc2tzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgS01TQU4gZnV6emluZy4gQW55IHBvdGVudGlhbCBzeW5jaHJvbml6YXRpb24gb3IgcHJlZW1wdGlvbiBidWdzIHdvdWxkIGJlIGNvdmVyZWQgYnkgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2VycyAoREVCVUdfUFJFRU1QVCwgTE9DS0RFUCwgS0FTQU4pLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMjowNzoyNy44NjYxODQ5MloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4OTE4MzY5NDA2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJVU0JfVVNCTkVUXCIsXG4gICAgXCJVU0JfTkVUX0RSSVZFUlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ1c2JuZXRfc2tiX3JldHVyblwiLFxuICAgIFwidHhfY29tcGxldGVcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHBlci1DUFUgbmV0d29yayBzdGF0aXN0aWNzIGFjY291bnRpbmcgaW4gZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jLCByZXBsYWNpbmcgdGhpc19jcHVfcHRyKCkgYW5kIGlycXNhdmUvaXJxcmVzdG9yZSA2NC1iaXQgc3RhdHMgdXBkYXRlIGhlbHBlcnMgd2l0aCBnZXRfY3B1X3B0cigpLCB1NjRfc3RhdHNfdXBkYXRlX2JlZ2luL2VuZCgpLCBhbmQgcHV0X2NwdV9wdHIoKS4gVGhpcyBlbnN1cmVzIHByZWVtcHRpb24gaXMgcHJvcGVybHkgZGlzYWJsZWQgd2hpbGUgYWNjZXNzaW5nIHRoZSBwZXItQ1BVIHBvaW50ZXIuXFxuXFxuVGhlIGNoYW5nZXMgZG8gbm90IGFsbG9jYXRlIG5ldyBidWZmZXJzLCBtYW5pcHVsYXRlIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBhbHRlciBidWZmZXIgbGVuZ3RoL2JvdW5kcyBjYWxjdWxhdGlvbnMsIG9yIGNvcHkga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvLWxlYWsgcmlza3MgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBLTVNBTiBmdXp6aW5nLiBBbnkgcG90ZW50aWFsIHN5bmNocm9uaXphdGlvbiBvciBwcmVlbXB0aW9uIGJ1Z3Mgd291bGQgYmUgY292ZXJlZCBieSBzdGFuZGFyZCBrZXJuZWwgZGVidWdnZXJzIChERUJVR19QUkVFTVBULCBMT0NLREVQLCBLQVNBTikuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgcGVyLUNQVSA2NC1iaXQgbmV0d29yayBzdGF0aXN0aWNzIHVwZGF0ZSBzeW5jaHJvbml6YXRpb24gaW4gdXNibmV0X3NrYl9yZXR1cm4gYW5kIHR4X2NvbXBsZXRlIChkcml2ZXJzL25ldC91c2IvdXNibmV0LmMpLCByZXBsYWNpbmcgSVJRLXNhdmluZyB1NjRfc3RhdHMgaGVscGVycyB3aXRoIGdldF9jcHVfcHRyL3B1dF9jcHVfcHRyIHBhaXJzIGFuZCB1NjRfc3RhdHNfdXBkYXRlX2JlZ2luL2VuZC4gVGhpcyB0b3VjaGVzIHJlYWNoYWJsZSBVU0IgbmV0d29ya2luZyBkcml2ZXIgbG9naWMgdGhhdCBjYW4gYmUgdGVzdGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB3aXRoIGVtdWxhdGVkIFVTQiBuZXR3b3JrIGRldmljZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAyOjA3OjI3Ljg2NjE5MDEyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjY3MjAxOTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA2MTU2NWFjNDljOTg0YmU0MGQyMTIzY2EwMDlkYjJhY2Q3NDI3NzUwXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgU2VwIDggMDI6MDc6MjcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jIGIvZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jXFxuaW5kZXggYTE5ZWNmNzE4ZjM2YS4uM2RmNzJiMGM2YmNmYyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC91c2IvdXNibmV0LmNcXG4rKysgYi9kcml2ZXJzL25ldC91c2IvdXNibmV0LmNcXG5AQCAtMzI1LDggKzMyNSw3IEBAIHN0YXRpYyB2b2lkIF9fdXNibmV0X3N0YXR1c19zdG9wX2ZvcmNlKHN0cnVjdCB1c2JuZXQgKmRldilcXG4gICovXFxuIHZvaWQgdXNibmV0X3NrYl9yZXR1cm4oc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiB7XFxuLVxcdHN0cnVjdCBwY3B1X3N3X25ldHN0YXRzICpzdGF0czY0ID0gdGhpc19jcHVfcHRyKGRldi1cXHUwMDNlbmV0LVxcdTAwM2V0c3RhdHMpO1xcbi1cXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbitcXHRzdHJ1Y3QgcGNwdV9zd19uZXRzdGF0cyAqc3RhdHM2NDtcXG4gXFx0aW50XFx0c3RhdHVzO1xcbiBcXG4gXFx0aWYgKHRlc3RfYml0KEVWRU5UX1JYX1BBVVNFRCwgXFx1MDAyNmRldi1cXHUwMDNlZmxhZ3MpKSB7XFxuQEAgLTMzOCwxMCArMzM3LDEyIEBAIHZvaWQgdXNibmV0X3NrYl9yZXR1cm4oc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXHRpZiAoc2tiLVxcdTAwM2Vwcm90b2NvbCA9PSAwKVxcbiBcXHRcXHRza2ItXFx1MDAzZXByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBkZXYtXFx1MDAzZW5ldCk7XFxuIFxcbi1cXHRmbGFncyA9IHU2NF9zdGF0c191cGRhdGVfYmVnaW5faXJxc2F2ZShcXHUwMDI2c3RhdHM2NC1cXHUwMDNlc3luY3ApO1xcbitcXHRzdGF0czY0ID0gZ2V0X2NwdV9wdHIoZGV2LVxcdTAwM2VuZXQtXFx1MDAzZXRzdGF0cyk7XFxuK1xcdHU2NF9zdGF0c191cGRhdGVfYmVnaW4oXFx1MDAyNnN0YXRzNjQtXFx1MDAzZXN5bmNwKTtcXG4gXFx0dTY0X3N0YXRzX2luYyhcXHUwMDI2c3RhdHM2NC1cXHUwMDNlcnhfcGFja2V0cyk7XFxuIFxcdHU2NF9zdGF0c19hZGQoXFx1MDAyNnN0YXRzNjQtXFx1MDAzZXJ4X2J5dGVzLCBza2ItXFx1MDAzZWxlbik7XFxuLVxcdHU2NF9zdGF0c191cGRhdGVfZW5kX2lycXJlc3RvcmUoXFx1MDAyNnN0YXRzNjQtXFx1MDAzZXN5bmNwLCBmbGFncyk7XFxuK1xcdHU2NF9zdGF0c191cGRhdGVfZW5kKFxcdTAwMjZzdGF0czY0LVxcdTAwM2VzeW5jcCk7XFxuK1xcdHB1dF9jcHVfcHRyKGRldi1cXHUwMDNlbmV0LVxcdTAwM2V0c3RhdHMpO1xcbiBcXG4gXFx0bmV0aWZfZGJnKGRldiwgcnhfc3RhdHVzLCBkZXYtXFx1MDAzZW5ldCwgXFxcIlxcdTAwM2MgcngsIGxlbiAlenUsIHR5cGUgMHgleFxcXFxuXFxcIixcXG4gXFx0XFx0ICBza2ItXFx1MDAzZWxlbiArIHNpemVvZihzdHJ1Y3QgZXRoaGRyKSwgc2tiLVxcdTAwM2Vwcm90b2NvbCk7XFxuQEAgLTEyOTgsMTMgKzEyOTksMTQgQEAgc3RhdGljIHZvaWQgdHhfY29tcGxldGUoc3RydWN0IHVyYiAqdXJiKVxcbiBcXHRzdHJ1Y3QgdXNibmV0XFx0XFx0KmRldiA9IGVudHJ5LVxcdTAwM2VkZXY7XFxuIFxcbiBcXHRpZiAodXJiLVxcdTAwM2VzdGF0dXMgPT0gMCkge1xcbi1cXHRcXHRzdHJ1Y3QgcGNwdV9zd19uZXRzdGF0cyAqc3RhdHM2NCA9IHRoaXNfY3B1X3B0cihkZXYtXFx1MDAzZW5ldC1cXHUwMDNldHN0YXRzKTtcXG4tXFx0XFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4rXFx0XFx0c3RydWN0IHBjcHVfc3dfbmV0c3RhdHMgKnN0YXRzNjQ7XFxuIFxcbi1cXHRcXHRmbGFncyA9IHU2NF9zdGF0c191cGRhdGVfYmVnaW5faXJxc2F2ZShcXHUwMDI2c3RhdHM2NC1cXHUwMDNlc3luY3ApO1xcbitcXHRcXHRzdGF0czY0ID0gZ2V0X2NwdV9wdHIoZGV2LVxcdTAwM2VuZXQtXFx1MDAzZXRzdGF0cyk7XFxuK1xcdFxcdHU2NF9zdGF0c191cGRhdGVfYmVnaW4oXFx1MDAyNnN0YXRzNjQtXFx1MDAzZXN5bmNwKTtcXG4gXFx0XFx0dTY0X3N0YXRzX2FkZChcXHUwMDI2c3RhdHM2NC1cXHUwMDNldHhfcGFja2V0cywgZW50cnktXFx1MDAzZXBhY2tldHMpO1xcbiBcXHRcXHR1NjRfc3RhdHNfYWRkKFxcdTAwMjZzdGF0czY0LVxcdTAwM2V0eF9ieXRlcywgZW50cnktXFx1MDAzZWxlbmd0aCk7XFxuLVxcdFxcdHU2NF9zdGF0c191cGRhdGVfZW5kX2lycXJlc3RvcmUoXFx1MDAyNnN0YXRzNjQtXFx1MDAzZXN5bmNwLCBmbGFncyk7XFxuK1xcdFxcdHU2NF9zdGF0c191cGRhdGVfZW5kKFxcdTAwMjZzdGF0czY0LVxcdTAwM2VzeW5jcCk7XFxuK1xcdFxcdHB1dF9jcHVfcHRyKGRldi1cXHUwMDNlbmV0LVxcdTAwM2V0c3RhdHMpO1xcbiBcXHR9IGVsc2Uge1xcbiBcXHRcXHRkZXYtXFx1MDAzZW5ldC1cXHUwMDNlc3RhdHMudHhfZXJyb3JzKys7XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMjowNzoyOC4zOTM1NjAxMDJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjE3MDA5NDAzMzg4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJVU0JfVVNCTkVUXCIsXG4gICAgXCJVU0JfTkVUX0RSSVZFUlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ1c2JuZXRfc2tiX3JldHVyblwiLFxuICAgIFwidHhfY29tcGxldGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBwZXItQ1BVIDY0LWJpdCBuZXR3b3JrIHN0YXRpc3RpY3MgdXBkYXRlIHN5bmNocm9uaXphdGlvbiBpbiB1c2JuZXRfc2tiX3JldHVybiBhbmQgdHhfY29tcGxldGUgKGRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYyksIHJlcGxhY2luZyBJUlEtc2F2aW5nIHU2NF9zdGF0cyBoZWxwZXJzIHdpdGggZ2V0X2NwdV9wdHIvcHV0X2NwdV9wdHIgcGFpcnMgYW5kIHU2NF9zdGF0c191cGRhdGVfYmVnaW4vZW5kLiBUaGlzIHRvdWNoZXMgcmVhY2hhYmxlIFVTQiBuZXR3b3JraW5nIGRyaXZlciBsb2dpYyB0aGF0IGNhbiBiZSB0ZXN0ZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHdpdGggZW11bGF0ZWQgVVNCIG5ldHdvcmsgZGV2aWNlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA2MTU2NWFjNDljOTg0YmU0MGQyMTIzY2EwMDlkYjJhY2Q3NDI3NzUwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgOCAwMjowNzoyNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi91c2JuZXQuYyBiL2RyaXZlcnMvbmV0L3VzYi91c2JuZXQuY1xuaW5kZXggYTE5ZWNmNzE4ZjM2YS4uM2RmNzJiMGM2YmNmYyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3VzYi91c2JuZXQuY1xuKysrIGIvZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jXG5AQCAtMzI1LDggKzMyNSw3IEBAIHN0YXRpYyB2b2lkIF9fdXNibmV0X3N0YXR1c19zdG9wX2ZvcmNlKHN0cnVjdCB1c2JuZXQgKmRldilcbiAgKi9cbiB2b2lkIHVzYm5ldF9za2JfcmV0dXJuKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG4tXHRzdHJ1Y3QgcGNwdV9zd19uZXRzdGF0cyAqc3RhdHM2NCA9IHRoaXNfY3B1X3B0cihkZXYtXHUwMDNlbmV0LVx1MDAzZXRzdGF0cyk7XG4tXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuK1x0c3RydWN0IHBjcHVfc3dfbmV0c3RhdHMgKnN0YXRzNjQ7XG4gXHRpbnRcdHN0YXR1cztcbiBcbiBcdGlmICh0ZXN0X2JpdChFVkVOVF9SWF9QQVVTRUQsIFx1MDAyNmRldi1cdTAwM2VmbGFncykpIHtcbkBAIC0zMzgsMTAgKzMzNywxMiBAQCB2b2lkIHVzYm5ldF9za2JfcmV0dXJuKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdGlmIChza2ItXHUwMDNlcHJvdG9jb2wgPT0gMClcbiBcdFx0c2tiLVx1MDAzZXByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBkZXYtXHUwMDNlbmV0KTtcbiBcbi1cdGZsYWdzID0gdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbl9pcnFzYXZlKFx1MDAyNnN0YXRzNjQtXHUwMDNlc3luY3ApO1xuK1x0c3RhdHM2NCA9IGdldF9jcHVfcHRyKGRldi1cdTAwM2VuZXQtXHUwMDNldHN0YXRzKTtcbitcdHU2NF9zdGF0c191cGRhdGVfYmVnaW4oXHUwMDI2c3RhdHM2NC1cdTAwM2VzeW5jcCk7XG4gXHR1NjRfc3RhdHNfaW5jKFx1MDAyNnN0YXRzNjQtXHUwMDNlcnhfcGFja2V0cyk7XG4gXHR1NjRfc3RhdHNfYWRkKFx1MDAyNnN0YXRzNjQtXHUwMDNlcnhfYnl0ZXMsIHNrYi1cdTAwM2VsZW4pO1xuLVx0dTY0X3N0YXRzX3VwZGF0ZV9lbmRfaXJxcmVzdG9yZShcdTAwMjZzdGF0czY0LVx1MDAzZXN5bmNwLCBmbGFncyk7XG4rXHR1NjRfc3RhdHNfdXBkYXRlX2VuZChcdTAwMjZzdGF0czY0LVx1MDAzZXN5bmNwKTtcbitcdHB1dF9jcHVfcHRyKGRldi1cdTAwM2VuZXQtXHUwMDNldHN0YXRzKTtcbiBcbiBcdG5ldGlmX2RiZyhkZXYsIHJ4X3N0YXR1cywgZGV2LVx1MDAzZW5ldCwgXCJcdTAwM2MgcngsIGxlbiAlenUsIHR5cGUgMHgleFxcblwiLFxuIFx0XHQgIHNrYi1cdTAwM2VsZW4gKyBzaXplb2Yoc3RydWN0IGV0aGhkciksIHNrYi1cdTAwM2Vwcm90b2NvbCk7XG5AQCAtMTI5OCwxMyArMTI5OSwxNCBAQCBzdGF0aWMgdm9pZCB0eF9jb21wbGV0ZShzdHJ1Y3QgdXJiICp1cmIpXG4gXHRzdHJ1Y3QgdXNibmV0XHRcdCpkZXYgPSBlbnRyeS1cdTAwM2VkZXY7XG4gXG4gXHRpZiAodXJiLVx1MDAzZXN0YXR1cyA9PSAwKSB7XG4tXHRcdHN0cnVjdCBwY3B1X3N3X25ldHN0YXRzICpzdGF0czY0ID0gdGhpc19jcHVfcHRyKGRldi1cdTAwM2VuZXQtXHUwMDNldHN0YXRzKTtcbi1cdFx0dW5zaWduZWQgbG9uZyBmbGFncztcbitcdFx0c3RydWN0IHBjcHVfc3dfbmV0c3RhdHMgKnN0YXRzNjQ7XG4gXG4tXHRcdGZsYWdzID0gdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbl9pcnFzYXZlKFx1MDAyNnN0YXRzNjQtXHUwMDNlc3luY3ApO1xuK1x0XHRzdGF0czY0ID0gZ2V0X2NwdV9wdHIoZGV2LVx1MDAzZW5ldC1cdTAwM2V0c3RhdHMpO1xuK1x0XHR1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKFx1MDAyNnN0YXRzNjQtXHUwMDNlc3luY3ApO1xuIFx0XHR1NjRfc3RhdHNfYWRkKFx1MDAyNnN0YXRzNjQtXHUwMDNldHhfcGFja2V0cywgZW50cnktXHUwMDNlcGFja2V0cyk7XG4gXHRcdHU2NF9zdGF0c19hZGQoXHUwMDI2c3RhdHM2NC1cdTAwM2V0eF9ieXRlcywgZW50cnktXHUwMDNlbGVuZ3RoKTtcbi1cdFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmRfaXJxcmVzdG9yZShcdTAwMjZzdGF0czY0LVx1MDAzZXN5bmNwLCBmbGFncyk7XG4rXHRcdHU2NF9zdGF0c191cGRhdGVfZW5kKFx1MDAyNnN0YXRzNjQtXHUwMDNlc3luY3ApO1xuK1x0XHRwdXRfY3B1X3B0cihkZXYtXHUwMDNlbmV0LVx1MDAzZXRzdGF0cyk7XG4gXHR9IGVsc2Uge1xuIFx0XHRkZXYtXHUwMDNlbmV0LVx1MDAzZXN0YXRzLnR4X2Vycm9ycysrO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDI6MDc6MjguMzkzNTYxOTUyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTI5NjE3Nzg1MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS2VybmVsIFBhdGNoIEV2YWx1YXRpb24gLSBVU0JuZXQgRnV6emluZyoqXG5cbk9rYXksIHNvIHRoZSB1c2VyIHdhbnRzIG1lIHRvIGV2YWx1YXRlIHRoaXMga2VybmVsIHBhdGNoIHNlcmllcyBmb3IgZnV6emluZyB3aXRoIHN5emthbGxlciwgc3BlY2lmaWNhbGx5IHRhcmdldGluZyB0aGUgYW1kNjQgYXJjaGl0ZWN0dXJlLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyBhbHdheXMgdG8gbWV0aWN1bG91c2x5IHJldmlldyB0aGUgaW5zdHJ1Y3Rpb25zIGFuZCB0aGUgZGlmZiBpdHNlbGYuIEFscmlnaHQsIGl0J3MgbW9kaWZ5aW5nIGBkcml2ZXJzL25ldC91c2IvdXNibmV0LmNgLiAgU3BlY2lmaWNhbGx5LCB0aGUgY2hhbmdlcyBhcmUgaW4gYHVzYm5ldF9za2JfcmV0dXJuYCBhbmQgYHR4X2NvbXBsZXRlYC4gIFRoZSBvcmlnaW5hbCBjb2RlIHVzZWQgYHRoaXNfY3B1X3B0cmAgd2l0aCB0aGUgYHU2NF9zdGF0c191cGRhdGVfYmVnaW5faXJxc2F2ZWAvYHU2NF9zdGF0c191cGRhdGVfZW5kX2lycXJlc3RvcmVgIHBhaXIuIFRoaXMgcGF0Y2gsIGhvd2V2ZXIsIGlzIHJlcGxhY2luZyB0aGF0IHdpdGggYGdldF9jcHVfcHRyYCwgYHU2NF9zdGF0c191cGRhdGVfYmVnaW5gL2B1NjRfc3RhdHNfdXBkYXRlX2VuZGAsIGFuZCBgcHV0X2NwdV9wdHJgLlxuXG5IbW0sIGJlZm9yZSBJIGRpZyBpbnRvIHRoZSBmaW5lciBwb2ludHMgb2YgdGhlIGxvY2tpbmcgbWVjaGFuaXNtcywgSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhpcyBjb2RlIGlzIGV2ZW4gKnJlYWNoYWJsZSogaW4gYSBmdXp6aW5nIGNvbnRleHQuIFdlJ3JlIHRhbGtpbmcgYWJvdXQgYHVzYm5ldC5jYCwgd2hpY2ggaXMgcGFydCBvZiB0aGUgVVNCIG5ldHdvcmtpbmcgZHJpdmVycyBpbiBMaW51eC4gUmlnaHQsIHRoYXQgbWVhbnMgYENPTkZJR19VU0JfTkVUX0RSSVZFUlNgLCBgQ09ORklHX1VTQl9VU0JORVRgLCBhbmQgdGhlIGxpa2UuIE5vdywgY2FuIHdlIGFjdHVhbGx5IGZ1enogVVNCIG5ldHdvcmtpbmcgd2l0aCBzeXprYWxsZXI/ICBBaCwgeWVzLCBhYnNvbHV0ZWx5ISBTeXprYWxsZXIgKmZyZXF1ZW50bHkqIGZ1enplcyBVU0IgZHJpdmVycywgYW5kIEkga25vdyBpdCdzIGhpdCBVU0IgbmV0d29ya2luZyBiZWZvcmXigJRjZGNfZXRoZXIsIGFzaXgsIGFsbCBvZiB0aG9zZSB3aGljaCB1c2UgdXNibmV0IGFyZSBwcmV0dHkgY29tbW9uIHRhcmdldHMuXG5cbk9rYXksIHRoaXMgbG9va3MgcHJvbWlzaW5nLiBOb3csIEkgbmVlZCB0byBnZXQgc29tZSBtb3JlIGNvbnRleHQgdG8gZGVjaWRlIHdoYXQgdGhlIGltcGxpY2F0aW9ucyBhcmUgYW5kIGhvdyB0byBhc3Nlc3MgaXQuIEknbGwgbmVlZCB0byB1c2UgbXkgdG9vbHMgdG8gZGlnIGludG8gdGhlIGNvZGUgYW5kIEtjb25maWcgZmlsZXMuIFRpbWUgdG8gY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzIHVzaW5nIGdyZXBwZXIgYW5kIHJlYWQtZmlsZSwgdG8gbWFrZSBzdXJlIGV2ZXJ5dGhpbmcgbGluZXMgdXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1MDQsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNTMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMjowNzo0MS4zNTUzNDQwMTZaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU1MTY3OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFVTQl9VU0JORVRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvdXNiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3VzYi9LY29uZmlnPTExMz1jb25maWcgVVNCX0xBTjc4WFhcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTEzMS1cXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZzoxMzI6Y29uZmlnIFVTQl9VU0JORVRcXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0xMzMtXFx0dHJpc3RhdGUgXFxcIk11bHRpLXB1cnBvc2UgVVNCIE5ldHdvcmtpbmcgRnJhbWV3b3JrXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMjowNzo0MS40MDA4Njc3NTZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTgxNTU2NTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkV4YW1pbmluZyBVU0IgTmV0d29ya2luZyBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGZvciB0aGUgVVNCIG5ldHdvcmtpbmcgZHJpdmVycy4gTGV0J3Mgc3RhcnQgYnkgY2hlY2tpbmcgb3V0IHRoZSBgZHJpdmVycy9uZXQvdXNiL0tjb25maWdgIGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAxMzAuIFRoYXQncyB1c3VhbGx5IHdoZXJlIHRoZSBtYWluIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgdGhlaXIgZGVwZW5kZW5jaWVzIGFyZSBkZWZpbmVkLiBJIGV4cGVjdCB0byBzZWUgdGhlIHR5cGljYWwgYGRlcGVuZHMgb25gIHN0YXRlbWVudHMgbGlua2luZyB0aGVzZSBkcml2ZXJzIHRvIHJlbGV2YW50IFVTQiBjb3JlIGNvbXBvbmVudHMsIG5ldHdvcmtpbmcgc3RhY2sgZmVhdHVyZXMsIGFuZCBtYXliZSBldmVuIHNwZWNpZmljIGhhcmR3YXJlIHBsYXRmb3Jtcy4gS25vd2luZyB0aGVzZSByZWxhdGlvbnNoaXBzIGlzIGNydWNpYWwgYmVmb3JlIG1ha2luZyBhbnkgY2hhbmdlcyBvciB0cm91Ymxlc2hvb3RpbmcgZHJpdmVyIGNvbmZpZ3VyYXRpb25zLiBJdCBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIG92ZXJ2aWV3IG9mIHdoYXQgbmVlZHMgdG8gYmUgZW5hYmxlZCBvciBjb25zaWRlcmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MzgzLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDI6MDc6NDMuNTgyNDI3MTEzWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODI0MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvdXNiL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTI1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTI1OlxcdFxcdCAgTEFONzgwMSA6IFVTQiAzIHRvIDEwLzEwMC8xMDAwIEV0aGVybmV0IGFkYXB0ZXIgKE1BQyBvbmx5KVxcbiAxMjY6XFx0XFxuIDEyNzpcXHRcXHQgIFByb3BlciBQSFkgZHJpdmVyIGlzIHJlcXVpcmVkIGZvciBMQU43ODAxLlxcbiAxMjg6XFx0XFxuIDEyOTpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiAxMzA6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgbGFuNzh4eC5cXG4gMTMxOlxcdFxcbiAxMzI6XFx0Y29uZmlnIFVTQl9VU0JORVRcXG4gMTMzOlxcdFxcdHRyaXN0YXRlIFxcXCJNdWx0aS1wdXJwb3NlIFVTQiBOZXR3b3JraW5nIEZyYW1ld29ya1xcXCJcXG4gMTM0OlxcdFxcdHNlbGVjdCBNSUlcXG4gMTM1OlxcdFxcdGhlbHBcXG4gMTM2OlxcdFxcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgc2V2ZXJhbCBraW5kcyBvZiBuZXR3b3JrIGxpbmtzIG92ZXIgVVNCLFxcbiAxMzc6XFx0XFx0ICB3aXRoIFxcXCJtaW5pZHJpdmVyc1xcXCIgYnVpbHQgYXJvdW5kIGEgY29tbW9uIG5ldHdvcmsgZHJpdmVyIGNvcmVcXG4gMTM4OlxcdFxcdCAgdGhhdCBzdXBwb3J0cyBkZWVwIHF1ZXVlcyBmb3IgZWZmaWNpZW50IHRyYW5zZmVycy4gIChUaGlzIGdpdmVzXFxuIDEzOTpcXHRcXHQgIGJldHRlciBwZXJmb3JtYW5jZSB3aXRoIHNtYWxsIHBhY2tldHMgYW5kIGF0IGhpZ2ggc3BlZWRzKS5cXG4gMTQwOlxcdFxcbiAxNDE6XFx0XFx0ICBUaGUgVVNCIGhvc3QgcnVucyBcXFwidXNibmV0XFxcIiwgYW5kIHRoZSBvdGhlciBlbmQgb2YgdGhlIGxpbmsgbWlnaHQgYmU6XFxuIDE0MjpcXHRcXG4gMTQzOlxcdFxcdCAgLSBBbm90aGVyIFVTQiBob3N0LCB3aGVuIHVzaW5nIFVTQiBcXFwibmV0d29ya1xcXCIgb3IgXFxcImRhdGEgdHJhbnNmZXJcXFwiXFxuIDE0NDpcXHRcXHQgICAgY2FibGVzLiAgVGhlc2UgYXJlIG9mdGVuIHVzZWQgdG8gbmV0d29yayBsYXB0b3BzIHRvIFBDcywgbGlrZVxcbiAxNDU6XFx0XFx0ICAgIFxcXCJMYXBsaW5rXFxcIiBwYXJhbGxlbCBjYWJsZXMgb3Igc29tZSBtb3RoZXJib2FyZHMuICBUaGVzZSByZWx5XFxuIDE0NjpcXHRcXHQgICAgb24gc3BlY2lhbGl6ZWQgY2hpcHMgZnJvbSBtYW55IHN1cHBsaWVycy5cXG4gMTQ3OlxcdFxcbiAxNDg6XFx0XFx0ICAtIEFuIGludGVsbGlnZW50IFVTQiBnYWRnZXQsIHBlcmhhcHMgZW1iZWRkaW5nIGEgTGludXggc3lzdGVtLlxcbiAxNDk6XFx0XFx0ICAgIFRoZXNlIGluY2x1ZGUgUERBcyBydW5uaW5nIExpbnV4IChpUGFxLCBZb3B5LCBaYXVydXMsIGFuZFxcbiAxNTA6XFx0XFx0ICAgIG90aGVycyksIGFuZCBkZXZpY2VzIHRoYXQgaW50ZXJvcGVyYXRlIHVzaW5nIHRoZSBzdGFuZGFyZFxcbiAxNTE6XFx0XFx0ICAgIENEQy1FdGhlcm5ldCBzcGVjaWZpY2F0aW9uIChpbmNsdWRpbmcgbWFueSBjYWJsZSBtb2RlbXMpLlxcbiAxNTI6XFx0XFxuIDE1MzpcXHRcXHQgIC0gTmV0d29yayBhZGFwdGVyIGhhcmR3YXJlIChsaWtlIHRob3NlIGZvciAxMC8xMDAgRXRoZXJuZXQpIHdoaWNoXFxuIDE1NDpcXHRcXHQgICAgdXNlcyB0aGlzIGRyaXZlciBmcmFtZXdvcmsuXFxuIDE1NTpcXHRcXG4gMTU2OlxcdFxcdCAgVGhlIGxpbmsgd2lsbCBhcHBlYXIgd2l0aCBhIG5hbWUgbGlrZSBcXFwidXNiMFxcXCIsIHdoZW4gdGhlIGxpbmsgaXNcXG4gMTU3OlxcdFxcdCAgYSB0d28tbm9kZSBsaW5rLCBvciBcXFwiZXRoMFxcXCIgZm9yIG1vc3QgQ0RDLUV0aGVybmV0IGRldmljZXMuICBUaG9zZVxcbiAxNTg6XFx0XFx0ICB0d28tbm9kZSBsaW5rcyBhcmUgbW9zdCBlYXNpbHkgbWFuYWdlZCB3aXRoIEV0aGVybmV0IEJyaWRnaW5nXFxuIDE1OTpcXHRcXHQgIChDT05GSUdfQlJJREdFKSBpbnN0ZWFkIG9mIHJvdXRpbmcuXFxuIDE2MDpcXHRcXG4gMTYxOlxcdFxcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24gc2VlIFxcdTAwM2NodHRwOi8vd3d3LmxpbnV4LXVzYi5vcmcvdXNibmV0L1xcdTAwM2UuXFxuIDE2MjpcXHRcXG4gMTYzOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXFxuIDE2NDpcXHRcXHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB1c2JuZXQuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAyOjA3OjQzLjU4MjUxMTk3M1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYyMDc0NTUzODMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgVVNCIERyaXZlciBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBmb3IgYSBwYXJ0aWN1bGFyIFVTQiBkcml2ZXIuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byB0aGUgYEtjb25maWdgIGZpbGUsIHNwZWNpZmljYWxseSB0aGUgdG9wIGxldmVsIG9uZSBsb2NhdGVkIGluIGBkcml2ZXJzL25ldC91c2IvS2NvbmZpZ2AuIFRoYXQncyBnZW5lcmFsbHkgd2hlcmUgSSdkIGV4cGVjdCB0byBmaW5kIHRoZSBtZW51IHN0cnVjdHVyZSBhbmQgdGhlIGtleSBkZXBlbmRlbmNpZXMgZGVmaW5lZC4gSXQncyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIHRyYWNpbmcgd2hpY2ggb3RoZXIgY29uZmlndXJhdGlvbiBvcHRpb25zIGVuYWJsZSBvciBkaXNhYmxlIHRoaXMgcGFydGljdWxhciBkcml2ZXIsIGFueSByZWxldmFudCBoYXJkd2FyZSByZXF1aXJlbWVudHMsIG9yIGV2ZW4gd2hpY2ggb3RoZXIgZHJpdmVycyBpdCBtaWdodCBkZXBlbmQgb24uIEknbGwgcXVpY2tseSBzY2FuIHRoYXQgZmlsZSBhbmQgc2VlIGhvdyB0aGUgYFVTQmAgZHJpdmVyIG9wdGlvbnMgYXJlIHN0cnVjdHVyZWQgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUyODQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAyOjA4OjQ1LjY1NzA2OTAwNloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxNzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3VzYi9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIFVTQiBOZXR3b3JrIGRldmljZXMgY29uZmlndXJhdGlvblxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0Y29tbWVudCBcXFwiSG9zdC1zaWRlIFVTQiBzdXBwb3J0IGlzIG5lZWRlZCBmb3IgVVNCIE5ldHdvcmsgQWRhcHRlciBzdXBwb3J0XFxcIlxcbiAgIDY6XFx0XFx0ZGVwZW5kcyBvbiAhVVNCIFxcdTAwMjZcXHUwMDI2IE5FVFxcbiAgIDc6XFx0XFxuICAgODpcXHRtZW51Y29uZmlnIFVTQl9ORVRfRFJJVkVSU1xcbiAgIDk6XFx0XFx0dHJpc3RhdGUgXFxcIlVTQiBOZXR3b3JrIEFkYXB0ZXJzXFxcIlxcbiAgMTA6XFx0XFx0ZGVmYXVsdCBVU0IgaWYgVVNCXFxuICAxMTpcXHRcXHRkZXBlbmRzIG9uIFVTQiBcXHUwMDI2XFx1MDAyNiBORVRcXG4gIDEyOlxcdFxcbiAgMTM6XFx0aWYgVVNCX05FVF9EUklWRVJTXFxuICAxNDpcXHRcXG4gIDE1OlxcdGNvbmZpZyBVU0JfQ0FUQ1xcbiAgMTY6XFx0XFx0dHJpc3RhdGUgXFxcIlVTQiBDQVRDIE5ldE1hdGUtYmFzZWQgRXRoZXJuZXQgZGV2aWNlIHN1cHBvcnRcXFwiXFxuICAxNzpcXHRcXHRzZWxlY3QgQ1JDMzJcXG4gIDE4OlxcdFxcdGhlbHBcXG4gIDE5OlxcdFxcdCAgU2F5IFkgaWYgeW91IHdhbnQgdG8gdXNlIG9uZSBvZiB0aGUgZm9sbG93aW5nIDEwTWJwcyBVU0IgRXRoZXJuZXRcXG4gIDIwOlxcdFxcdCAgZGV2aWNlIGJhc2VkIG9uIHRoZSBFTDEyMTBBIGNoaXAuIFN1cHBvcnRlZCBkZXZpY2VzIGFyZTpcXG4gIDIxOlxcdFxcdCAgQmVsa2luIEY1VTAxMVxcbiAgMjI6XFx0XFx0ICBCZWxraW4gRjVVMTExXFxuICAyMzpcXHRcXHQgIENBVEMgTmV0TWF0ZVxcbiAgMjQ6XFx0XFx0ICBDQVRDIE5ldE1hdGUgSUlcXG4gIDI1OlxcdFxcdCAgc21hcnRCcmlkZ2VzIHNtYXJ0TklDXFxuICAyNjpcXHRcXG4gIDI3OlxcdFxcdCAgVGhpcyBkcml2ZXIgbWFrZXMgdGhlIGFkYXB0ZXIgYXBwZWFyIGFzIGEgbm9ybWFsIEV0aGVybmV0IGludGVyZmFjZSxcXG4gIDI4OlxcdFxcdCAgdHlwaWNhbGx5IG9uIGV0aDAsIGlmIGl0IGlzIHRoZSBvbmx5IGV0aGVybmV0IGRldmljZSwgb3IgcGVyaGFwcyBvblxcbiAgMjk6XFx0XFx0ICBldGgxLCBpZiB5b3UgaGF2ZSBhIFBDSSBvciBJU0EgZXRoZXJuZXQgY2FyZCBpbnN0YWxsZWQuXFxuICAzMDpcXHRcXG4gIDMxOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXFxuICAzMjpcXHRcXHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBjYXRjLlxcbiAgMzM6XFx0XFxuICAzNDpcXHRjb25maWcgVVNCX0tBV0VUSFxcbiAgMzU6XFx0XFx0dHJpc3RhdGUgXFxcIlVTQiBLTFNJIEtMNVVTQjEwMS1iYXNlZCBldGhlcm5ldCBkZXZpY2Ugc3VwcG9ydFxcXCJcXG4gIDM2OlxcdFxcdGhlbHBcXG4gIDM3OlxcdFxcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2Ugb25lIG9mIHRoZSBmb2xsb3dpbmcgMTBNYnBzIG9ubHlcXG4gIDM4OlxcdFxcdCAgVVNCIEV0aGVybmV0IGFkYXB0ZXJzIGJhc2VkIG9uIHRoZSBLTFNJIEtMNUtVU0IxMDFCIGNoaXBzZXQ6XFxuICAzOTpcXHRcXHQgIDNDb20gM0MxOTI1MFxcbiAgNDA6XFx0XFx0ICBBRFMgVVNCLTEwQlRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDI6MDg6NDUuNjU3MTUyODQ2WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTc4MTgyMDU2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgdGhvdWdoIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBVU0IgTmV0d29ya2luZyBNb2R1bGUncyBCdWlsZCBQcm9jZXNzKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGB1c2JuZXQuY2Agd2l0aGluIHRoZSBVU0IgbmV0d29ya2luZyBkcml2ZXIgaXMgYWN0dWFsbHkgY29tcGlsZWQgaW50byB0aGUga2VybmVsLiBUaGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgaXMgdGhlIGBkcml2ZXJzL25ldC91c2IvTWFrZWZpbGVgLiBUaGF0IGZpbGUgaXMgdGhlIGNlbnRyYWwgb3JnYW5pemluZyBwb2ludCBmb3IgYWxsIHRoZSBidWlsZCBpbnN0cnVjdGlvbnMgd2l0aGluIHRoYXQgcGFydGljdWxhciBkaXJlY3RvcnksIGl0J3MgdGhlIHJlY2lwZSBib29rLCBzbyB0byBzcGVhay4gSXQnbGwgZGVmaW5lIGRlcGVuZGVuY2llcywgY29tcGlsYXRpb24gZmxhZ3MsIGFuZCB0aGUgb2JqZWN0IGZpbGVzIHRoYXQgZ2V0IGxpbmtlZCB0byBjcmVhdGUgdGhlIGZpbmFsIG1vZHVsZSBvciBpbnRlZ3JhdGVkIGZ1bmN0aW9uYWxpdHkuIExldCdzIGdldCByaWdodCBpbnRvIGl0IGFuZCBzZWUgaG93IHRoaXMgaXMgY29uZmlndXJlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjA0OSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDI6MDg6NDcuNDM4OTc1NzQ5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4NDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3VzYi9NYWtlZmlsZVwiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgTWFrZWZpbGUgZm9yIFVTQiBOZXR3b3JrIGRyaXZlcnNcXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0b2JqLSQoQ09ORklHX1VTQl9DQVRDKVxcdFxcdCs9IGNhdGMub1xcbiAgIDc6XFx0b2JqLSQoQ09ORklHX1VTQl9LQVdFVEgpXFx0Kz0ga2F3ZXRoLm9cXG4gICA4OlxcdG9iai0kKENPTkZJR19VU0JfUEVHQVNVUylcXHQrPSBwZWdhc3VzLm9cXG4gICA5OlxcdG9iai0kKENPTkZJR19VU0JfUlRMODE1MClcXHQrPSBydGw4MTUwLm9cXG4gIDEwOlxcdG9iai0kKENPTkZJR19VU0JfUlRMODE1MilcXHQrPSByODE1Mi5vXFxuICAxMTpcXHRvYmotJChDT05GSUdfVVNCX0hTTylcXHRcXHQrPSBoc28ub1xcbiAgMTI6XFx0b2JqLSQoQ09ORklHX1VTQl9MQU43OFhYKVxcdCs9IGxhbjc4eHgub1xcbiAgMTM6XFx0b2JqLSQoQ09ORklHX1VTQl9ORVRfQVg4ODE3WClcXHQrPSBhc2l4Lm9cXG4gIDE0OlxcdGFzaXgteSA6PSBhc2l4X2RldmljZXMubyBhc2l4X2NvbW1vbi5vIGF4ODgxNzJhLm9cXG4gIDE1OlxcdG9iai0kKENPTkZJR19VU0JfTkVUX0FYODgxNzlfMTc4QSkgICAgICArPSBheDg4MTc5XzE3OGEub1xcbiAgMTY6XFx0b2JqLSQoQ09ORklHX1VTQl9ORVRfQ0RDRVRIRVIpXFx0Kz0gY2RjX2V0aGVyLm9cXG4gIDE3OlxcdG9iai0kKENPTkZJR19VU0JfTkVUX0NEQ19FRU0pXFx0Kz0gY2RjX2VlbS5vXFxuICAxODpcXHRvYmotJChDT05GSUdfVVNCX05FVF9ETTk2MDEpXFx0Kz0gZG05NjAxLm9cXG4gIDE5OlxcdG9iai0kKENPTkZJR19VU0JfTkVUX1NSOTcwMClcXHQrPSBzcjk3MDAub1xcbiAgMjA6XFx0b2JqLSQoQ09ORklHX1VTQl9ORVRfU1I5ODAwKVxcdCs9IHNyOTgwMC5vXFxuICAyMTpcXHRvYmotJChDT05GSUdfVVNCX05FVF9TTVNDNzVYWClcXHQrPSBzbXNjNzV4eC5vXFxuICAyMjpcXHRvYmotJChDT05GSUdfVVNCX05FVF9TTVNDOTVYWClcXHQrPSBzbXNjOTV4eC5vXFxuICAyMzpcXHRvYmotJChDT05GSUdfVVNCX05FVF9HTDYyMEEpXFx0Kz0gZ2w2MjBhLm9cXG4gIDI0OlxcdG9iai0kKENPTkZJR19VU0JfTkVUX05FVDEwODApXFx0Kz0gbmV0MTA4MC5vXFxuICAyNTpcXHRvYmotJChDT05GSUdfVVNCX05FVF9QTFVTQilcXHQrPSBwbHVzYi5vXFxuICAyNjpcXHRvYmotJChDT05GSUdfVVNCX05FVF9STkRJU19IT1NUKVxcdCs9IHJuZGlzX2hvc3Qub1xcbiAgMjc6XFx0b2JqLSQoQ09ORklHX1VTQl9ORVRfQ0RDX1NVQlNFVF9FTkFCTEUpXFx0Kz0gY2RjX3N1YnNldC5vXFxuICAyODpcXHRvYmotJChDT05GSUdfVVNCX05FVF9aQVVSVVMpXFx0Kz0gemF1cnVzLm9cXG4gIDI5OlxcdG9iai0kKENPTkZJR19VU0JfTkVUX01DUzc4MzApXFx0Kz0gbWNzNzgzMC5vXFxuICAzMDpcXHRvYmotJChDT05GSUdfVVNCX1VTQk5FVClcXHQrPSB1c2JuZXQub1xcbiAgMzE6XFx0b2JqLSQoQ09ORklHX1VTQl9ORVRfSU5UNTFYMSlcXHQrPSBpbnQ1MXgxLm9cXG4gIDMyOlxcdG9iai0kKENPTkZJR19VU0JfQ0RDX1BIT05FVClcXHQrPSBjZGMtcGhvbmV0Lm9cXG4gIDMzOlxcdG9iai0kKENPTkZJR19VU0JfTkVUX0tBTE1JQSlcXHQrPSBrYWxtaWEub1xcbiAgMzQ6XFx0b2JqLSQoQ09ORklHX1VTQl9JUEhFVEgpXFx0Kz0gaXBoZXRoLm9cXG4gIDM1OlxcdG9iai0kKENPTkZJR19VU0JfU0lFUlJBX05FVClcXHQrPSBzaWVycmFfbmV0Lm9cXG4gIDM2OlxcdG9iai0kKENPTkZJR19VU0JfTkVUX0NYODIzMTBfRVRIKVxcdCs9IGN4ODIzMTBfZXRoLm9cXG4gIDM3OlxcdG9iai0kKENPTkZJR19VU0JfTkVUX0NEQ19OQ00pXFx0Kz0gY2RjX25jbS5vXFxuICAzODpcXHRvYmotJChDT05GSUdfVVNCX05FVF9IVUFXRUlfQ0RDX05DTSlcXHQrPSBodWF3ZWlfY2RjX25jbS5vXFxuICAzOTpcXHRvYmotJChDT05GSUdfVVNCX1ZMNjAwKVxcdFxcdCs9IGxnLXZsNjAwLm9cXG4gIDQwOlxcdG9iai0kKENPTkZJR19VU0JfTkVUX1FNSV9XV0FOKVxcdCs9IHFtaV93d2FuLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDI6MDg6NDcuNDM5MDU3MDE5WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMzNzE5MDU4MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFVTQm5ldCBEcml2ZXIgQ29kZSoqXG5cbk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBgZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jYCBjb2RlLiBNeSBmaXJzdCBzdGVwIGlzIHRvIHplcm8gaW4gb24gdGhlIHJlY2VudCBjb21taXQgYW5kIHRoZSBtb2RpZmllZCBmdW5jdGlvbnMgd2l0aGluLiBLbm93aW5nIHRoZSByZWxldmFudCBjaGFuZ2VzIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBzcGVjaWZpYyBpc3N1ZSBvciBlbmhhbmNlbWVudCBJJ20gaW52ZXN0aWdhdGluZy4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IGZvY3VzaW5nIG9uIGxpbmVzIDMyNSBhbmQgMTI5OCwgYXMgdGhleSdyZSBvZnRlbiB0aGUgaG90c3BvdHMgZm9yIG5ldHdvcmsgZHJpdmVyIGludGVyYWN0aW9uIGFuZCBkYXRhIGhhbmRsaW5nLiBSZWFkaW5nIGFyb3VuZCB0aGVzZSBsaW5lcyBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgaW5pdGlhbCBjb250ZXh0IGZvciBhbnkgcG90ZW50aWFsIHByb2JsZW0gYXJlYXMgb3IgaW1wcm92ZW1lbnRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3Mjk0LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMjowODo1MC44MTA5NjUyMzhaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM2MDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3VzYi91c2JuZXQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMTUsXG4gIFwiTGluZUNvdW50XCI6IDQ1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMTU6XFx0XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2ZGV2LVxcdTAwM2VpbnRlcnJ1cHRfbXV0ZXgpO1xcbiAzMTY6XFx0XFx0XFx0dXNiX2tpbGxfdXJiKGRldi1cXHUwMDNlaW50ZXJydXB0KTtcXG4gMzE3OlxcdFxcdFxcdGRldl9kYmcoXFx1MDAyNmRldi1cXHUwMDNldWRldi1cXHUwMDNlZGV2LCBcXFwia2lsbGVkIGludGVycnVwdCBVUkIgZm9yIHN1c3BlbmRcXFxcblxcXCIpO1xcbiAzMTg6XFx0XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZkZXYtXFx1MDAzZWludGVycnVwdF9tdXRleCk7XFxuIDMxOTpcXHRcXHR9XFxuIDMyMDpcXHR9XFxuIDMyMTpcXHRcXG4gMzIyOlxcdC8qIFBhc3NlcyB0aGlzIHBhY2tldCB1cCB0aGUgc3RhY2ssIHVwZGF0aW5nIGl0cyBhY2NvdW50aW5nLlxcbiAzMjM6XFx0ICogU29tZSBsaW5rIHByb3RvY29scyBiYXRjaCBwYWNrZXRzLCBzbyB0aGVpciByeF9maXh1cCBwYXRoc1xcbiAzMjQ6XFx0ICogY2FuIHJldHVybiBjbG9uZXMgYXMgd2VsbCBhcyBqdXN0IG1vZGlmeSB0aGUgb3JpZ2luYWwgc2tiLlxcbiAzMjU6XFx0ICovXFxuIDMyNjpcXHR2b2lkIHVzYm5ldF9za2JfcmV0dXJuKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gMzI3OlxcdHtcXG4gMzI4OlxcdFxcdHN0cnVjdCBwY3B1X3N3X25ldHN0YXRzICpzdGF0czY0O1xcbiAzMjk6XFx0XFx0aW50XFx0c3RhdHVzO1xcbiAzMzA6XFx0XFxuIDMzMTpcXHRcXHRpZiAodGVzdF9iaXQoRVZFTlRfUlhfUEFVU0VELCBcXHUwMDI2ZGV2LVxcdTAwM2VmbGFncykpIHtcXG4gMzMyOlxcdFxcdFxcdHNrYl9xdWV1ZV90YWlsKFxcdTAwMjZkZXYtXFx1MDAzZXJ4cV9wYXVzZSwgc2tiKTtcXG4gMzMzOlxcdFxcdFxcdHJldHVybjtcXG4gMzM0OlxcdFxcdH1cXG4gMzM1OlxcdFxcbiAzMzY6XFx0XFx0Lyogb25seSB1cGRhdGUgaWYgdW5zZXQgdG8gYWxsb3cgbWluaWRyaXZlciByeF9maXh1cCBvdmVycmlkZSAqL1xcbiAzMzc6XFx0XFx0aWYgKHNrYi1cXHUwMDNlcHJvdG9jb2wgPT0gMClcXG4gMzM4OlxcdFxcdFxcdHNrYi1cXHUwMDNlcHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldi1cXHUwMDNlbmV0KTtcXG4gMzM5OlxcdFxcbiAzNDA6XFx0XFx0c3RhdHM2NCA9IGdldF9jcHVfcHRyKGRldi1cXHUwMDNlbmV0LVxcdTAwM2V0c3RhdHMpO1xcbiAzNDE6XFx0XFx0dTY0X3N0YXRzX3VwZGF0ZV9iZWdpbihcXHUwMDI2c3RhdHM2NC1cXHUwMDNlc3luY3ApO1xcbiAzNDI6XFx0XFx0dTY0X3N0YXRzX2luYyhcXHUwMDI2c3RhdHM2NC1cXHUwMDNlcnhfcGFja2V0cyk7XFxuIDM0MzpcXHRcXHR1NjRfc3RhdHNfYWRkKFxcdTAwMjZzdGF0czY0LVxcdTAwM2VyeF9ieXRlcywgc2tiLVxcdTAwM2VsZW4pO1xcbiAzNDQ6XFx0XFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmQoXFx1MDAyNnN0YXRzNjQtXFx1MDAzZXN5bmNwKTtcXG4gMzQ1OlxcdFxcdHB1dF9jcHVfcHRyKGRldi1cXHUwMDNlbmV0LVxcdTAwM2V0c3RhdHMpO1xcbiAzNDY6XFx0XFxuIDM0NzpcXHRcXHRuZXRpZl9kYmcoZGV2LCByeF9zdGF0dXMsIGRldi1cXHUwMDNlbmV0LCBcXFwiXFx1MDAzYyByeCwgbGVuICV6dSwgdHlwZSAweCV4XFxcXG5cXFwiLFxcbiAzNDg6XFx0XFx0XFx0ICBza2ItXFx1MDAzZWxlbiArIHNpemVvZihzdHJ1Y3QgZXRoaGRyKSwgc2tiLVxcdTAwM2Vwcm90b2NvbCk7XFxuIDM0OTpcXHRcXHRtZW1zZXQoc2tiLVxcdTAwM2VjYiwgMCwgc2l6ZW9mKHN0cnVjdCBza2JfZGF0YSkpO1xcbiAzNTA6XFx0XFxuIDM1MTpcXHRcXHRpZiAoc2tiX2RlZmVyX3J4X3RpbWVzdGFtcChza2IpKVxcbiAzNTI6XFx0XFx0XFx0cmV0dXJuO1xcbiAzNTM6XFx0XFxuIDM1NDpcXHRcXHRzdGF0dXMgPSBuZXRpZl9yeCAoc2tiKTtcXG4gMzU1OlxcdFxcdGlmIChzdGF0dXMgIT0gTkVUX1JYX1NVQ0NFU1MpXFxuIDM1NjpcXHRcXHRcXHRuZXRpZl9kYmcoZGV2LCByeF9lcnIsIGRldi1cXHUwMDNlbmV0LFxcbiAzNTc6XFx0XFx0XFx0XFx0ICBcXFwibmV0aWZfcnggc3RhdHVzICVkXFxcXG5cXFwiLCBzdGF0dXMpO1xcbiAzNTg6XFx0fVxcbiAzNTk6XFx0RVhQT1JUX1NZTUJPTF9HUEwodXNibmV0X3NrYl9yZXR1cm4pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMjowODo1MC44MTExMDMwMDhaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTcwNjQ3NjYxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqUGVlcmluZyBpbnRvIHRoZSBUcmFuc2FjdGlvbiBDb21wbGV0aW9uIExvZ2ljKipcblxuQWxyaWdodCwgbGV0J3MgemVybyBpbiBvbiBgdHhfY29tcGxldGVgLiBJJ20gZ2V0dGluZyBhIGh1bmNoIGFib3V0IHNvbWV0aGluZyBnb2luZyBvbiBhcm91bmQgbGluZSAxMjk4LiBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoYXQgYXJlYSBpcyBhIGxpa2VseSBzcG90IGZvciB0aGUgZmluYWxpemF0aW9uIGxvZ2ljLCB3aGVyZSB0aGUgdHJhbnNhY3Rpb24ncyBmYXRlIGlzIHNlYWxlZC4gV2UncmUgcHJvYmFibHkgZGVhbGluZyB3aXRoIHRoZSBmbGFnJ3MgYXNzaWdubWVudCBvciBwZXJoYXBzIHNvbWUgcG9zdC1wcm9jZXNzaW5nIHJlbGF0ZWQgdG8gdGhlIHRyYW5zYWN0aW9uJ3Mgc3VjY2Vzc2Z1bCAob3IgdW5zdWNjZXNzZnVsKSBjb25jbHVzaW9uLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHN1cnJvdW5kaW5nIGNvZGUsIHNlZSB3aGF0J3MgaGFwcGVuaW5nIGp1c3QgYmVmb3JlIGFuZCBqdXN0IGFmdGVyIHRoYXQgbGluZS4gVGhpcyBmbGFnJ3Mgc3RhdGUsIGFuZCB3aGF0IGhpbmdlcyBvbiBpdCwgaXMga2V5IHRvIHRoZSBvdmVyYWxsIGZsb3csIGVzcGVjaWFsbHkgaW4gYSBzeXN0ZW0gbGlrZSB0aGlzLiBJdCdzIHRpbWUgdG8gZGlnIGluIGFuZCBzZWUgaWYgYW55dGhpbmcganVtcHMgb3V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4Mjk4LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMjowODo1Mi41MTc1ODE4MzJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQwNjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3VzYi91c2JuZXQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMjkwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMjkwOlxcdFxcdFxcdG5ldGRldl9kYmcoZGV2LVxcdTAwM2VuZXQsIFxcXCJrZXZlbnQgZG9uZSwgZmxhZ3MgPSAweCVseFxcXFxuXFxcIiwgZGV2LVxcdTAwM2VmbGFncyk7XFxuMTI5MTpcXHR9XFxuMTI5MjpcXHRcXG4xMjkzOlxcdC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXFxuMTI5NDpcXHRcXG4xMjk1OlxcdHN0YXRpYyB2b2lkIHR4X2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVyYilcXG4xMjk2OlxcdHtcXG4xMjk3OlxcdFxcdHN0cnVjdCBza19idWZmXFx0XFx0KnNrYiA9IChzdHJ1Y3Qgc2tfYnVmZiAqKSB1cmItXFx1MDAzZWNvbnRleHQ7XFxuMTI5ODpcXHRcXHRzdHJ1Y3Qgc2tiX2RhdGFcXHRcXHQqZW50cnkgPSAoc3RydWN0IHNrYl9kYXRhICopIHNrYi1cXHUwMDNlY2I7XFxuMTI5OTpcXHRcXHRzdHJ1Y3QgdXNibmV0XFx0XFx0KmRldiA9IGVudHJ5LVxcdTAwM2VkZXY7XFxuMTMwMDpcXHRcXG4xMzAxOlxcdFxcdGlmICh1cmItXFx1MDAzZXN0YXR1cyA9PSAwKSB7XFxuMTMwMjpcXHRcXHRcXHRzdHJ1Y3QgcGNwdV9zd19uZXRzdGF0cyAqc3RhdHM2NDtcXG4xMzAzOlxcdFxcbjEzMDQ6XFx0XFx0XFx0c3RhdHM2NCA9IGdldF9jcHVfcHRyKGRldi1cXHUwMDNlbmV0LVxcdTAwM2V0c3RhdHMpO1xcbjEzMDU6XFx0XFx0XFx0dTY0X3N0YXRzX3VwZGF0ZV9iZWdpbihcXHUwMDI2c3RhdHM2NC1cXHUwMDNlc3luY3ApO1xcbjEzMDY6XFx0XFx0XFx0dTY0X3N0YXRzX2FkZChcXHUwMDI2c3RhdHM2NC1cXHUwMDNldHhfcGFja2V0cywgZW50cnktXFx1MDAzZXBhY2tldHMpO1xcbjEzMDc6XFx0XFx0XFx0dTY0X3N0YXRzX2FkZChcXHUwMDI2c3RhdHM2NC1cXHUwMDNldHhfYnl0ZXMsIGVudHJ5LVxcdTAwM2VsZW5ndGgpO1xcbjEzMDg6XFx0XFx0XFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmQoXFx1MDAyNnN0YXRzNjQtXFx1MDAzZXN5bmNwKTtcXG4xMzA5OlxcdFxcdFxcdHB1dF9jcHVfcHRyKGRldi1cXHUwMDNlbmV0LVxcdTAwM2V0c3RhdHMpO1xcbjEzMTA6XFx0XFx0fSBlbHNlIHtcXG4xMzExOlxcdFxcdFxcdGRldi1cXHUwMDNlbmV0LVxcdTAwM2VzdGF0cy50eF9lcnJvcnMrKztcXG4xMzEyOlxcdFxcbjEzMTM6XFx0XFx0XFx0c3dpdGNoICh1cmItXFx1MDAzZXN0YXR1cykge1xcbjEzMTQ6XFx0XFx0XFx0Y2FzZSAtRVBJUEU6XFxuMTMxNTpcXHRcXHRcXHRcXHR1c2JuZXRfZGVmZXJfa2V2ZW50KGRldiwgRVZFTlRfVFhfSEFMVCk7XFxuMTMxNjpcXHRcXHRcXHRcXHRicmVhaztcXG4xMzE3OlxcdFxcbjEzMTg6XFx0XFx0XFx0Lyogc29mdHdhcmUtZHJpdmVuIGludGVyZmFjZSBzaHV0ZG93biAqL1xcbjEzMTk6XFx0XFx0XFx0Y2FzZSAtRUNPTk5SRVNFVDpcXHRcXHQvLyBhc3luYyB1bmxpbmtcXG4xMzIwOlxcdFxcdFxcdGNhc2UgLUVTSFVURE9XTjpcXHRcXHQvLyBoYXJkd2FyZSBnb25lXFxuMTMyMTpcXHRcXHRcXHRcXHRicmVhaztcXG4xMzIyOlxcdFxcbjEzMjM6XFx0XFx0XFx0LyogbGlrZSByeCwgdHggZ2V0cyBjb250cm9sbGVyIGkvbyBmYXVsdHMgZHVyaW5nIGh1Yl93cVxcbjEzMjQ6XFx0XFx0XFx0ICogZGVsYXlzIGFuZCBzbyBpdCB1c2VzIHRoZSBzYW1lIHRocm90dGxpbmcgbWVjaGFuaXNtLlxcbjEzMjU6XFx0XFx0XFx0ICovXFxuMTMyNjpcXHRcXHRcXHRjYXNlIC1FUFJPVE86XFxuMTMyNzpcXHRcXHRcXHRjYXNlIC1FVElNRTpcXG4xMzI4OlxcdFxcdFxcdGNhc2UgLUVJTFNFUTpcXG4xMzI5OlxcdFxcdFxcdFxcdHVzYl9tYXJrX2xhc3RfYnVzeShkZXYtXFx1MDAzZXVkZXYpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMjowODo1Mi41MTc3MjQxNjJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Njg3MzYyODkwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBTeW5jaHJvbml6YXRpb24gQ2hhbmdlIGluIFVTQiBOZXR3b3JrIERyaXZlciBTdGF0cyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyB0b3VjaGluZyB0aGUgYHVzYm5ldF9za2JfcmV0dXJuYCBhbmQgYHR4X2NvbXBsZXRlYCBmdW5jdGlvbnMsIHdoaWNoIGFyZSBjcml0aWNhbCBpbiB0aGUgYHVzYm5ldGAgZHJpdmVyLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIGlzIHN3aXRjaGluZyBmcm9tIGB0aGlzX2NwdV9wdHJgIGFuZCB0aGUgYGlycXNhdmVgIHZhcmlhbnRzIG9mIGB1NjRfc3RhdHNfdXBkYXRlYCB0byBgZ2V0X2NwdV9wdHJgIGFuZCB0aGUgbm9uLWBpcnFzYXZlYCB2ZXJzaW9ucy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCB0aGlzIHNlZW1zIGxpa2UgYSByZWxhdGl2ZWx5IHN0cmFpZ2h0Zm9yd2FyZCBvcHRpbWl6YXRpb24sIGJ1dCBsZXQncyBtYWtlIHN1cmUgaXQncyB2YWxpZC5cblxuVGhlIGtleSBkaWZmZXJlbmNlIEkgc2VlIGlzIHRoYXQgYGdldF9jcHVfcHRyYCAqZGlzYWJsZXMgcHJlZW1wdGlvbiogYnV0ICpkb2Vzbid0IGRpc2FibGUgSVJRcyosIHVubGlrZSB0aGUgcHJldmlvdXMgbWV0aG9kcy4gVGhpcyByYWlzZXMgYSByZWQgZmxhZyBpbiBteSBtaW5kIGJlY2F1c2UgYHR4X2NvbXBsZXRlYCBpcyBhbiBpbnRlcnJ1cHQgaGFuZGxlciAob3IgcnVucyBpbiBzb2Z0aXJxIGNvbnRleHQgdGhyb3VnaCB0YXNrbGV0cy9ib3R0b20taGFsdmVzIGRlcGVuZGluZyBvbiB0aGUgVVNCIGhvc3QgY29udHJvbGxlciBkcml2ZXIpLCBhbmQgYHVzYm5ldF9za2JfcmV0dXJuYCBhbHNvIHJ1bnMgd2l0aGluIGEgYm90dG9tIGhhbGYuIElmIHNvbWV0aGluZyB0aGF0IGFsc28gbW9kaWZpZXMgdGhlIDY0LWJpdCBzdGF0cyBjb3VsZCBpbnRlcnJ1cHQgdGhvc2UgZnVuY3Rpb25zLCB0aGVuIHRoZSBsb2NraW5nIHNlbWFudGljcyBjb3VsZCBiZSBjb21wbGV0ZWx5IGRpZmZlcmVudCwgb3IgdGhlcmUgY291bGQgYmUgYSBsb2NrZGVwIGNvbmZsaWN0LiBUaGlzIG5lZWRzIHRvIGJlIGNvbnNpZGVyZWQsIGVzcGVjaWFsbHkgaWYgbG9ja2RlcCBjaGVja3MgY291bGQgYmUgdHJpZ2dlcmVkIG9yIGlmIHRoZSBhcmNoaXRlY3R1cmUgaXMgMzItYml0ICh3aGVyZSB0aGlzIHdvdWxkIGJlaGF2ZSBkaWZmZXJlbnRseSlcblxuT2theSwgc28gaXMgdGhpcyBldmVuIHJlYWNoYWJsZT8gRGVmaW5pdGVseSEgYHVzYm5ldGAgaXMgdGhlIHdvcmtob3JzZSBkcml2ZXIgZm9yIGEgdG9uIG9mIFVTQiBuZXR3b3JrIGRldmljZXMg4oCTIENEQyBFdGhlcm5ldCwgQVNJWCBhZGFwdGVycywgYW5kIGEgbG90IG1vcmUuIEFuZCB0aG9zZSBjYW4gKmFic29sdXRlbHkqIGJlIGVtdWxhdGVkIGluIFFFTVUgb3IgZXZlbiB3aXRoIHN5emthbGxlciwgZXNwZWNpYWxseSB1c2luZyBVU0IgZ2FkZ2V0IGVtdWxhdGlvbi4gU3l6a2FsbGVyIHJlZ3VsYXJseSBnZW5lcmF0ZXMgbmV0d29yayB0cmFmZmljIHRoYXQgY2F1c2VzIHRoZXNlIGZ1bmN0aW9ucyB0byBydW4uXG5cbk5vdywgbGV0J3MgYXBwbHkgdGhlIHRyaWFnZSBydWxlcy5cblxuVGhpcyBjbGVhcmx5IGZhbGxzIHVuZGVyIHRoZSBcIldvcnRoRnV6emluZz10cnVlXCIgY3JpdGVyaWE6IEl0J3MgXCJyZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlXCIgYmVjYXVzZSBpdCdzIHRoZSBjb3JlIG5ldHdvcmsgZHJpdmVyLiBGdXJ0aGVyLCBpdCdzIGEgXCJyZWZhY3RvcmluZ1wiIHRoYXQgY2hhbmdlcyBsb2NraW5nIGFuZCBzeW5jaHJvbml6YXRpb24uIEFsc28sIHJlYWNoYWJsZSBkcml2ZXJzIGFuZCBwcm90b2NvbHMgKFVTQiwgbmV0d29yaykgYXJlIGluY2x1ZGVkLiBUaGUgb25seSByZWFzb24gdG8gc2F5IFwiZmFsc2VcIiB3b3VsZCBiZSBpZiB0aGlzIHdhcyBhbiB1bnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aCAoZHJpdmVyIHRlYXJkb3duLCBldGMpIHdoaWNoIGlzIG5vdCB0aGUgY2FzZSBoZXJlLlxuXG5UaGVyZWZvcmUsIFdvcnRoRnV6emluZyA9IFRydWUuXG5cbk5vdywgd2hpY2ggY29uZmlnIG9wdGlvbnMgYXJlIG5lZWRlZCB0byB0cmlnZ2VyIHRoaXMgY29kZT8gSXQgbG9va3MgbGlrZSB3ZSBuZWVkIGBVU0JfTkVUX0RSSVZFUlNgLCBgVVNCX1VTQk5FVGAsIGBVU0JgLCBhbmQgYE5FVGAuIERpZ2dpbmcgaW50byB0aGUgS2NvbmZpZyBhbmQgTWFrZWZpbGUgZmlsZXMgY29uZmlybXMgdGhhdC4gYFVTQl9VU0JORVRgIGFsc28gc2VsZWN0cyBgTUlJYCwgc28gdGhhdCdzIGFub3RoZXIgZGVwZW5kZW5jeS4gV2UgcHJvYmFibHkgbmVlZCB0byBjaGVjayBpZiB0aGVyZSBhcmUgb3RoZXIsIG1vcmUgc3VidGxlIGRlcGVuZGVuY2llcyBsdXJraW5nIGluIHRoZSBgZHJpdmVycy9uZXQvS2NvbmZpZ2Agb3IgYGRyaXZlcnMvdXNiL0tjb25maWdgIGZpbGVzLCBidXQgdGhpcyBpcyBhIHNvbGlkIHN0YXJ0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MTcwLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTkwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDI6MDg6NTkuMzkxMzU4MDA5WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTkxNTkwMjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic291cmNlIFxcXCJkcml2ZXJzL25ldC91c2IvS2NvbmZpZ1xcXCJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvS2NvbmZpZz01MzI9c291cmNlIFxcXCJkcml2ZXJzL3MzOTAvbmV0L0tjb25maWdcXFwiXFxuZHJpdmVycy9uZXQvS2NvbmZpZy01MzMtXFxuZHJpdmVycy9uZXQvS2NvbmZpZzo1MzQ6c291cmNlIFxcXCJkcml2ZXJzL25ldC91c2IvS2NvbmZpZ1xcXCJcXG5kcml2ZXJzL25ldC9LY29uZmlnLTUzNS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDI6MDg6NTkuNTUwNTIyOTg2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxMjI1NjM1MzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgQ29uZmxpY3RzIGluIFVTQiBHYWRnZXQgRHJpdmVyIFNlbGVjdGlvbioqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byBhIHBvdGVudGlhbCBpc3N1ZSBoZXJlLCBhbmQgdGhlIGZpcnN0IHRoaW5nIEkgd2FudCB0byBkbyBpcyBzZWUgaG93IHByZXZhbGVudCB0aGUgc2VsZWN0aW9uIG9mIHRoZSBgVVNCX1VTQk5FVGAgZHJpdmVyIGlzLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpbnZvbHZlcyBhIHF1aWNrIGRpYWdub3N0aWM6IEkgbmVlZCB0byBhc3Nlc3MgdGhlIGVjb3N5c3RlbS4gQXJlIHdlIHNlZWluZyBvdGhlciBkcml2ZXJzIG9yIGNvbmZpZ3VyYXRpb25zIGF0dGVtcHRpbmcgdG8gY2xhaW0gb3IgaW50ZXJhY3Qgd2l0aCB0aGlzIHNwZWNpZmljIG1vZHVsZT8gSSdtIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBjb250ZW50aW9uLCBjb25mbGljdHMsIG9yIHVuZXhwZWN0ZWQgaW50ZXJhY3Rpb25zIGFjcm9zcyBkaWZmZXJlbnQgZHJpdmVyIGltcGxlbWVudGF0aW9ucyBvciBzeXN0ZW0gc2V0dXBzLiBJZGVudGlmeWluZyBvdmVybGFwcyBlYXJseSBjYW4gaGVscCBkaWFnbm9zZSBhIHdpZGUgcmFuZ2Ugb2YgaXNzdWVzLiBMZXQncyBzZWUgaWYgYW55b25lIGVsc2UgaXMgZXZlbiAqdXNpbmcqIHRoaXMsIGFuZCBob3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwODc5LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDI6MDk6MDEuNjczMDg5MTE0WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzM4MDgzMCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VsZWN0IFVTQl9VU0JORVRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvdXNiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMjowOTowMS43MjA0NzczNTRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTkyNjg4Mzk5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaXQgd2VudDpcblxuKipFeGFtaW5pbmcgVVNCIE5ldHdvcmtpbmcgRGVwZW5kZW5jeSBpbiBLZXJuZWwgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBmb3IgdGhlIFVTQiBuZXR3b3JrIGRyaXZlci4gTGV0J3Mgc2VlLi4uIHRoZSBtb3N0IG9idmlvdXMgcGxhY2UgdG8gc3RhcnQgaXMgdGhlIGBLY29uZmlnYCBmaWxlIHdpdGhpbiB0aGUgYGRyaXZlcnMvbmV0L3VzYi9gIGRpcmVjdG9yeS4gVGhhdCdzIHdoZXJlIGFsbCB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZGVmaW5lZC4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgSSBuZWVkIHRvIGxvb2sgZm9yIGBkZXBlbmRzIG9uIFVTQl9VU0JORVRgLiBUaGlzIHdpbGwgc2hvdyBtZSB0aGUgY29uZGl0aW9ucyB0aGF0ICptdXN0KiBiZSBtZXQgZm9yIHRoZSBVU0IgbmV0d29yayBkcml2ZXIgdG8gYmUgc2VsZWN0YWJsZSBvciBidWlsdC4gS25vd2luZyB0aGUgZGVwZW5kZW5jaWVzIGlzIGNydWNpYWwgZm9yIHRyb3VibGVzaG9vdGluZyBjb25maWd1cmF0aW9uIGlzc3VlcywgdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBmZWF0dXJlIHNldCwgYW5kIGVuc3VyaW5nIHRoZSBjb3JyZWN0IG1vZHVsZXMgYXJlIGNvbXBpbGVkIHdoZW4gbmVlZGVkLiBUaGlzIHNob3VsZCB0ZWxsIG1lIHdoYXQgb3RoZXIgb3B0aW9ucyBuZWVkIHRvIGJlIGVuYWJsZWQgaW4gb3JkZXIgZm9yIG1lIHRvIHV0aWxpemUgVVNCIG5ldHdvcmtpbmcgZmVhdHVyZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMDk1LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDI6MDk6MDMuNjQ3MzY0Mjc0WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjgzMDk3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZXBlbmRzIG9uLipVU0JfVVNCTkVUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3VzYlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC91c2IvS2NvbmZpZz0xNjY9Y29uZmlnIFVTQl9ORVRfQVg4ODE3WFxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTE2Ny1cXHR0cmlzdGF0ZSBcXFwiQVNJWCBBWDg4eHh4IEJhc2VkIFVTQiAyLjAgRXRoZXJuZXQgQWRhcHRlcnNcXFwiXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6MTY4OlxcdGRlcGVuZHMgb24gVVNCX1VTQk5FVFxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTE2OS1cXHRzZWxlY3QgQ1JDMzJcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnPTE5OD1jb25maWcgVVNCX05FVF9BWDg4MTc5XzE3OEFcXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0xOTktXFx0dHJpc3RhdGUgXFxcIkFTSVggQVg4ODE3OS8xNzhBIFVTQiAzLjAvMi4wIHRvIEdpZ2FiaXQgRXRoZXJuZXRcXFwiXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6MjAwOlxcdGRlcGVuZHMgb24gVVNCX1VTQk5FVFxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTIwMS1cXHRzZWxlY3QgQ1JDMzJcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnPTIxNj1jb25maWcgVVNCX05FVF9DRENFVEhFUlxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTIxNy1cXHR0cmlzdGF0ZSBcXFwiQ0RDIEV0aGVybmV0IHN1cHBvcnQgKHNtYXJ0IGRldmljZXMgc3VjaCBhcyBjYWJsZSBtb2RlbXMpXFxcIlxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnOjIxODpcXHRkZXBlbmRzIG9uIFVTQl9VU0JORVRcXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0yMTktXFx0ZGVmYXVsdCB5XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZz0yNDQ9Y29uZmlnIFVTQl9ORVRfQ0RDX0VFTVxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTI0NS1cXHR0cmlzdGF0ZSBcXFwiQ0RDIEVFTSBzdXBwb3J0XFxcIlxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnOjI0NjpcXHRkZXBlbmRzIG9uIFVTQl9VU0JORVRcXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0yNDctXFx0aGVscFxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc9MjU4PWNvbmZpZyBVU0JfTkVUX0NEQ19OQ01cXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0yNTktXFx0dHJpc3RhdGUgXFxcIkNEQyBOQ00gc3VwcG9ydFxcXCJcXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZzoyNjA6XFx0ZGVwZW5kcyBvbiBVU0JfVVNCTkVUXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctMjYxLVxcdHNlbGVjdCBVU0JfTkVUX0NEQ0VUSEVSXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZz0yNzg9Y29uZmlnIFVTQl9ORVRfSFVBV0VJX0NEQ19OQ01cXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0yNzktXFx0dHJpc3RhdGUgXFxcIkh1YXdlaSBOQ00gZW1iZWRkZWQgQVQgY2hhbm5lbCBzdXBwb3J0XFxcIlxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnOjI4MDpcXHRkZXBlbmRzIG9uIFVTQl9VU0JORVRcXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0yODEtXFx0c2VsZWN0IFVTQl9XRE1cXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnPTI5Mz1jb25maWcgVVNCX05FVF9DRENfTUJJTVxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTI5NC1cXHR0cmlzdGF0ZSBcXFwiQ0RDIE1CSU0gc3VwcG9ydFxcXCJcXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZzoyOTU6XFx0ZGVwZW5kcyBvbiBVU0JfVVNCTkVUXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctMjk2LVxcdHNlbGVjdCBVU0JfV0RNXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZz0zMTE9Y29uZmlnIFVTQl9ORVRfRE05NjAxXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctMzEyLVxcdHRyaXN0YXRlIFxcXCJEYXZpY29tIERNOTZ4eCBiYXNlZCBVU0IgMTAvMTAwIGV0aGVybmV0IGRldmljZXNcXFwiXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6MzEzOlxcdGRlcGVuZHMgb24gVVNCX1VTQk5FVFxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTMxNC1cXHRzZWxlY3QgQ1JDMzJcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnPTMxOT1jb25maWcgVVNCX05FVF9TUjk3MDBcXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0zMjAtXFx0dHJpc3RhdGUgXFxcIkNvcmVDaGlwLXN6IFNSOTcwMCBiYXNlZCBVU0IgMS4xIDEwLzEwMCBldGhlcm5ldCBkZXZpY2VzXFxcIlxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnOjMyMTpcXHRkZXBlbmRzIG9uIFVTQl9VU0JORVRcXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0zMjItXFx0aGVscFxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc9MzI2PWNvbmZpZyBVU0JfTkVUX1NSOTgwMFxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTMyNy1cXHR0cmlzdGF0ZSBcXFwiQ29yZUNoaXAtc3ogU1I5ODAwIGJhc2VkIFVTQiAyLjAgMTAvMTAwIGV0aGVybmV0IGRldmljZXNcXFwiXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6MzI4OlxcdGRlcGVuZHMgb24gVVNCX1VTQk5FVFxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTMyOS1cXHRzZWxlY3QgQ1JDMzJcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnPTM0MT1jb25maWcgVVNCX05FVF9TTVNDNzVYWFxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTM0Mi1cXHR0cmlzdGF0ZSBcXFwiU01TQyBMQU43NVhYIGJhc2VkIFVTQiAyLjAgZ2lnYWJpdCBldGhlcm5ldCBkZXZpY2VzXFxcIlxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnOjM0MzpcXHRkZXBlbmRzIG9uIFVTQl9VU0JORVRcXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0zNDQtXFx0c2VsZWN0IEJJVFJFVkVSU0VcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnPTM1MT1jb25maWcgVVNCX05FVF9TTVNDOTVYWFxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTM1Mi1cXHR0cmlzdGF0ZSBcXFwiU01TQyBMQU45NVhYIGJhc2VkIFVTQiAyLjAgMTAvMTAwIGV0aGVybmV0IGRldmljZXNcXFwiXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6MzUzOlxcdGRlcGVuZHMgb24gVVNCX1VTQk5FVFxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTM1NC1cXHRzZWxlY3QgUEhZTElCXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZz0zNjQ9Y29uZmlnIFVTQl9ORVRfR0w2MjBBXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctMzY1LVxcdHRyaXN0YXRlIFxcXCJHZW5lU3lzIEdMNjIwVVNCLUEgYmFzZWQgY2FibGVzXFxcIlxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnOjM2NjpcXHRkZXBlbmRzIG9uIFVTQl9VU0JORVRcXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0zNjctXFx0aGVscFxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc9MzczPWNvbmZpZyBVU0JfTkVUX05FVDEwODBcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTM3NS1cXHRkZWZhdWx0IHlcXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZzozNzY6XFx0ZGVwZW5kcyBvbiBVU0JfVVNCTkVUXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctMzc3LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnPTM4Mj1jb25maWcgVVNCX05FVF9QTFVTQlxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctMzg1LVxcdCMgYXJlIGV2ZXIgcmVzb2x2ZWQgLi4uIHRoZW4gcmVtb3ZlIFxcXCJleHBlcmltZW50YWxcXFwiXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6Mzg2OlxcdGRlcGVuZHMgb24gVVNCX1VTQk5FVFxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTM4Ny1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZz0zOTE9Y29uZmlnIFVTQl9ORVRfTUNTNzgzMFxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTM5Mi1cXHR0cmlzdGF0ZSBcXFwiTW9zQ2hpcCBNQ1M3ODMwIGJhc2VkIEV0aGVybmV0IGFkYXB0ZXJzXFxcIlxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnOjM5MzpcXHRkZXBlbmRzIG9uIFVTQl9VU0JORVRcXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy0zOTQtXFx0aGVscFxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc9Mzk5PWNvbmZpZyBVU0JfTkVUX1JORElTX0hPU1RcXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy00MDAtXFx0dHJpc3RhdGUgXFxcIkhvc3QgZm9yIFJORElTIGFuZCBBY3RpdmVTeW5jIGRldmljZXNcXFwiXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6NDAxOlxcdGRlcGVuZHMgb24gVVNCX1VTQk5FVFxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTQwMi1cXHRzZWxlY3QgVVNCX05FVF9DRENFVEhFUlxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc9NDE4PWNvbmZpZyBVU0JfTkVUX0NEQ19TVUJTRVRcXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy00MTktXFx0dHJpc3RhdGUgXFxcIlNpbXBsZSBVU0IgTmV0d29yayBMaW5rcyAoQ0RDIEV0aGVybmV0IHN1YnNldClcXFwiXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6NDIwOlxcdGRlcGVuZHMgb24gVVNCX1VTQk5FVFxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTQyMS1cXHRkZWZhdWx0IHlcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnPTQ5ND1jb25maWcgVVNCX05FVF9aQVVSVVNcXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy00OTUtXFx0dHJpc3RhdGUgXFxcIlNoYXJwIFphdXJ1cyAoc3RvY2sgUk9NcykgYW5kIGNvbXBhdGlibGVcXFwiXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6NDk2OlxcdGRlcGVuZHMgb24gVVNCX1VTQk5FVFxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTQ5Ny1cXHRzZWxlY3QgVVNCX05FVF9DRENFVEhFUlxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc9NTEyPWNvbmZpZyBVU0JfTkVUX0NYODIzMTBfRVRIXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctNTEzLVxcdHRyaXN0YXRlIFxcXCJDb25leGFudCBDWDgyMzEwIFVTQiBldGhlcm5ldCBwb3J0XFxcIlxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnOjUxNDpcXHRkZXBlbmRzIG9uIFVTQl9VU0JORVRcXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy01MTUtXFx0aGVscFxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc9NTIwPWNvbmZpZyBVU0JfTkVUX0tBTE1JQVxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTUyMS1cXHR0cmlzdGF0ZSBcXFwiU2Ftc3VuZyBLYWxtaWEgYmFzZWQgTFRFIFVTQiBtb2RlbVxcXCJcXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZzo1MjI6XFx0ZGVwZW5kcyBvbiBVU0JfVVNCTkVUXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctNTIzLVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnPTUzMD1jb25maWcgVVNCX05FVF9RTUlfV1dBTlxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTUzMS1cXHR0cmlzdGF0ZSBcXFwiUU1JIFdXQU4gZHJpdmVyIGZvciBRdWFsY29tbSBNU00gYmFzZWQgM0cgYW5kIExURSBtb2RlbXNcXFwiXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6NTMyOlxcdGRlcGVuZHMgb24gVVNCX1VTQk5FVFxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTUzMy1cXHRzZWxlY3QgVVNCX1dETVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc9NTYzPWNvbmZpZyBVU0JfTkVUX0lOVDUxWDFcXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy01NjQtXFx0dHJpc3RhdGUgXFxcIkludGVsbG9uIFBMQyBiYXNlZCB1c2IgYWRhcHRlclxcXCJcXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZzo1NjU6XFx0ZGVwZW5kcyBvbiBVU0JfVVNCTkVUXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctNTY2LVxcdHNlbGVjdCBVU0JfTkVUX0NEQ0VUSEVSXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZz01NzI9Y29uZmlnIFVTQl9DRENfUEhPTkVUXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWctNTczLVxcdHRyaXN0YXRlIFxcXCJDREMgUGhvbmV0IHN1cHBvcnRcXFwiXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc6NTc0OlxcdGRlcGVuZHMgb24gUEhPTkVUIFxcdTAwMjZcXHUwMDI2IFVTQl9VU0JORVRcXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy01NzUtXFx0aGVscFxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc9NTkwPWNvbmZpZyBVU0JfU0lFUlJBX05FVFxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTU5MS1cXHR0cmlzdGF0ZSBcXFwiVVNCLXRvLVdXQU4gRHJpdmVyIGZvciBTaWVycmEgV2lyZWxlc3MgbW9kZW1zXFxcIlxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnOjU5MjpcXHRkZXBlbmRzIG9uIFVTQl9VU0JORVRcXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy01OTMtXFx0aGVscFxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc9NjE0PWNvbmZpZyBVU0JfTkVUX0NIOTIwMFxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTYxNS1cXHR0cmlzdGF0ZSBcXFwiUWluZ0hlbmcgQ0g5MjAwIFVTQiBldGhlcm5ldCBzdXBwb3J0XFxcIlxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnOjYxNjpcXHRkZXBlbmRzIG9uIFVTQl9VU0JORVRcXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy02MTctXFx0c2VsZWN0IE1JSVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL0tjb25maWc9NjI1PWNvbmZpZyBVU0JfTkVUX0FRQzExMVxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTYyNi1cXHR0cmlzdGF0ZSBcXFwiQXF1YW50aWEgQVF0aW9uIFVTQiB0byA1LzIuNUdiRSBDb250cm9sbGVycyBzdXBwb3J0XFxcIlxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnOjYyNzpcXHRkZXBlbmRzIG9uIFVTQl9VU0JORVRcXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy02MjgtXFx0c2VsZWN0IENSQzMyXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAyOjA5OjAzLjY5NDIwMzAyNFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyOTM0NjM0NjU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVVNCIE5ldHdvcmsgRHJpdmVyIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIG15IGJyYWluIHplcm9lcyBpbiBvbiB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zOiBgQ09ORklHX1VTQl9VU0JORVRgLCBgQ09ORklHX1VTQl9ORVRfRFJJVkVSU2AsIGFuZCBvZiBjb3Vyc2UsIHRoZSBicm9hZGVyIGBDT05GSUdfVVNCYCBhbmQgYENPTkZJR19ORVRgLiBUaG9zZSBhcmUgdGhlIGdhdGVrZWVwZXJzIGhlcmU7IGlmIHRoZXkncmUgbm90IHNldCwgdGhpcyBwYXRjaCBpcyBhIG5vbi1zdGFydGVyLlxuXG5Ob3csIGxldCdzIGRpdmUgaW50byB0aGUgZ3V0cyBvZiB0aGUgY29kZS4gVGhlIHBhdGNoIHRvdWNoZXMgdHdvIGZ1bmN0aW9ucyB3aXRoaW4gYGRyaXZlcnMvbmV0L3VzYi91c2JuZXQuY2A6IGB1c2JuZXRfc2tiX3JldHVybmAgYW5kIGB0eF9jb21wbGV0ZWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZWlyIHJvbGVzIHdpdGhpbiB0aGUgVVNCIG5ldHdvcmsgZHJpdmVyLlxuXG5BIHF1aWNrIGNoZWNrIGNvbmZpcm1zIGB1c2JuZXRfc2tiX3JldHVybmAgaXMgZXhwb3J0ZWQsIG1lYW5pbmcgaXQncyBpbnRlbmRlZCB0byBiZSB1c2VkIGJ5IG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwuIEhvd2V2ZXIsIGB0eF9jb21wbGV0ZWAgaXMgc3RhdGljIHdpdGhpbiBgdXNibmV0LmNgLiBUaGlzIHRlbGxzIG1lIGltbWVkaWF0ZWx5IHRoYXQgaXQncyBhbiBpbnRlcm5hbCBmdW5jdGlvbiwgd2hpY2ggbmFycm93cyBkb3duIGl0cyBpbXBhY3QuXG5cbkJ1dCwgSSBzdGlsbCBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgbmFtZSBgdHhfY29tcGxldGVgIGlzbid0IHVzZWQgZWxzZXdoZXJlLCBjYXVzaW5nIHBvdGVudGlhbCBjb25mbGljdHMuIEknbGwgbmVlZCB0byBydW4gYSBxdWljayBncmVwIGFjcm9zcyB0aGUga2VybmVsIHNvdXJjZSB0byBjb25maXJtIHRoZSBzY29wZSBvZiB0aGlzIG5hbWUuIEl0J3MgcG9zc2libGUgSSd2ZSBzZWVuIGl0IHVzZWQgZWxzZXdoZXJlLCBhbmQgaXQncyBhbHdheXMgZ29vZCB0byBiZSB0aG9yb3VnaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM5NzQsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDI6MDk6MDYuNjI4ODQwNThaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2MzIyMTM2MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm9pZCB0eF9jb21wbGV0ZVxcXFwofHN0YXRpYyB2b2lkIHR4X2NvbXBsZXRlXFxcXChcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvdXNiL2NkYy1waG9uZXQuYz0yNT1zdHJ1Y3QgdXNicG5fZGV2IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9jZGMtcGhvbmV0LmMtNDEtXFxuZHJpdmVycy9uZXQvdXNiL2NkYy1waG9uZXQuYzo0MjpzdGF0aWMgdm9pZCB0eF9jb21wbGV0ZShzdHJ1Y3QgdXJiICpyZXEpO1xcbmRyaXZlcnMvbmV0L3VzYi9jZGMtcGhvbmV0LmMtNDMtc3RhdGljIHZvaWQgcnhfY29tcGxldGUoc3RydWN0IHVyYiAqcmVxKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9jZGMtcGhvbmV0LmM9NDg9c3RhdGljIG5ldGRldl90eF90IHVzYnBuX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9jZGMtcGhvbmV0LmMtODItXFxuZHJpdmVycy9uZXQvdXNiL2NkYy1waG9uZXQuYzo4MzpzdGF0aWMgdm9pZCB0eF9jb21wbGV0ZShzdHJ1Y3QgdXJiICpyZXEpXFxuZHJpdmVycy9uZXQvdXNiL2NkYy1waG9uZXQuYy04NC17XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jPTM1ODE9c3RhdGljIGVudW0gc2tiX3N0YXRlIGRlZmVyX2JoKHN0cnVjdCBsYW43OHh4X25ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0zNjA0LVxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM6MzYwNTpzdGF0aWMgdm9pZCB0eF9jb21wbGV0ZShzdHJ1Y3QgdXJiICp1cmIpXFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0zNjA2LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYz0xMTg0PXVzYm5ldF9kZWZlcnJlZF9rZXZlbnQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jLTEyOTQtXFxuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jOjEyOTU6c3RhdGljIHZvaWQgdHhfY29tcGxldGUoc3RydWN0IHVyYiAqdXJiKVxcbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYy0xMjk2LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2I0M2xlZ2FjeS9waW8uYz02Mz1zdGF0aWMgdm9pZCB0eF9kYXRhKHN0cnVjdCBiNDNsZWdhY3lfcGlvcXVldWUgKnF1ZXVlLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYjQzbGVnYWN5L3Bpby5jLTg4LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2I0M2xlZ2FjeS9waW8uYzo4OTpzdGF0aWMgdm9pZCB0eF9jb21wbGV0ZShzdHJ1Y3QgYjQzbGVnYWN5X3Bpb3F1ZXVlICpxdWV1ZSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9iNDNsZWdhY3kvcGlvLmMtOTAtXFx0XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX3ByaW50ZXIuYz0yNjU9c3RhdGljIHZvaWQgcnhfY29tcGxldGUoc3RydWN0IHVzYl9lcCAqZXAsIHN0cnVjdCB1c2JfcmVxdWVzdCAqcmVxKVxcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfcHJpbnRlci5jLTMxMy1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9wcmludGVyLmM6MzE0OnN0YXRpYyB2b2lkIHR4X2NvbXBsZXRlKHN0cnVjdCB1c2JfZXAgKmVwLCBzdHJ1Y3QgdXNiX3JlcXVlc3QgKnJlcSlcXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9wcmludGVyLmMtMzE1LXtcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91X2V0aGVyLmM9Mzk2PXN0YXRpYyB2b2lkIGV0aF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91X2V0aGVyLmMtNDA4LVxcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91X2V0aGVyLmM6NDA5OnN0YXRpYyB2b2lkIHR4X2NvbXBsZXRlKHN0cnVjdCB1c2JfZXAgKmVwLCBzdHJ1Y3QgdXNiX3JlcXVlc3QgKnJlcSlcXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdV9ldGhlci5jLTQxMC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAyOjA5OjA5LjI2MTA2MDM0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyODA4MTg2OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6XG5cbioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgQm90dGxlbmVja3MgaW4gVVNCIE5ldHdvcmsgVHJhbnNtaXNzaW9uKipcblxuT2theSwgc28gd2UncmUgc2VlaW5nIHBlcmZvcm1hbmNlIGlzc3VlcyB3aXRoIHRoZSBVU0IgbmV0d29yayBzdGFjay4gVGhlIGZpcnN0IHBsYWNlIG15IG1pbmQgbmF0dXJhbGx5IGdvZXMgaXMgdGhlIHRyYW5zbWlzc2lvbiBwYXRoLCBhbmQgaW4gcGFydGljdWxhciwgdGhlIGNhbGxiYWNrIGFzc29jaWF0ZWQgd2l0aCBzZW5kaW5nIGRhdGEuIEkgbmVlZCB0byBkaWcgaW50byB0aGUgZnVuY3Rpb24gcmVzcG9uc2libGUgZm9yIGluaXRpYXRpbmcgdHJhbnNtaXNzaW9uLCB3aGljaCBJIHRoaW5rIGlzIGB1c2JuZXRfc3RhcnRfeG1pdGAgaW4gdGhpcyBjb250ZXh0LCBvciBhbnkgb3RoZXIgZnVuY3Rpb24gdGhhdCBtaWdodCBiZSBjYWxsaW5nIG9yIHJlbHlpbmcgb24gYHR4X2NvbXBsZXRlYC4gSSB3YW50IHRvIGxvb2sgY2xvc2VseSBhdCBob3cgdGhhdCBjYWxsYmFjaywgYHR4X2NvbXBsZXRlYCwgaXMgYmVpbmcgdXNlZCBhbmQgd2hhdCBkZXBlbmRlbmNpZXMgaXQgaGFzLiBJcyB0aGVyZSBibG9ja2luZyBnb2luZyBvbj8gQXJlIHdlIHdhaXRpbmcgb24gbXV0ZXhlcywgb3Igb3RoZXIgb3BlcmF0aW9ucywgdGhhdCBjb3VsZCBiZSBzbG93aW5nIHVzIGRvd24/IEFyZSB3ZSBwZXJoYXBzIHRocmFzaGluZyBtZW1vcnkgYXMgY29tcGxldGlvbnMgYXJlIHByb2Nlc3NlZD8gV2UgbmVlZCB0byBsb29rIGZvciBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzLCBsaWtlIGV4Y2Vzc2l2ZSBjb3B5aW5nLCBvciBldmVuIHNpbXBsZSBtaXNzZWQgb3Bwb3J0dW5pdGllcyBmb3IgcGlwZWxpbmluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNlcXVlbmNpbmcgYW5kIGNyaXRpY2FsIHBhdGhzIHRvIGNvbmZpcm0gd2hldGhlciBteSBmaXJzdCBpbnN0aW5jdCBpcyBjb3JyZWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTMxMiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAyOjA5OjExLjU0MTg4MTgyNVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcxNzUwMTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidHhfY29tcGxldGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYz0xMTg0PXVzYm5ldF9kZWZlcnJlZF9rZXZlbnQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jLTEyOTQtXFxuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jOjEyOTU6c3RhdGljIHZvaWQgdHhfY29tcGxldGUoc3RydWN0IHVyYiAqdXJiKVxcbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYy0xMjk2LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYz0xNDAwPW5ldGRldl90eF90IHVzYm5ldF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmMtMTQzNi1cXHR1c2JfZmlsbF9idWxrX3VyYih1cmIsIGRldi1cXHUwMDNldWRldiwgZGV2LVxcdTAwM2VvdXQsXFxuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jOjE0Mzc6XFx0XFx0XFx0ICBza2ItXFx1MDAzZWRhdGEsIHNrYi1cXHUwMDNlbGVuLCB0eF9jb21wbGV0ZSwgc2tiKTtcXG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmMtMTQzOC1cXHRpZiAoZGV2LVxcdTAwM2VjYW5fZG1hX3NnKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAyOjA5OjExLjU4OTA2MjU3NFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2Mjk2MzAwODYzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipGb2N1c2luZyBvbiBVU0IgTmV0d29yayBEcml2ZXIgQ29tcGxldGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byByZWFsbHkgZGlnIGludG8gaG93IHRoZSBVU0IgbmV0d29yayBkcml2ZXIgaGFuZGxlcyBwYWNrZXQgcmV0dXJuIGFuZCB0cmFuc21pc3Npb24gY29tcGxldGlvbi4gYHVzYm5ldF9za2JfcmV0dXJuYCBhbmQgdGhlIHJlbGF0ZWQgYHR4X2NvbXBsZXRlYCBvciBgdXNibmV0X3N0YXJ0X3htaXRgIGZ1bmN0aW9ucyDigJMgdGhvc2UgZmVlbCBsaWtlIHRoZSBrZXkgcG9pbnRzIG9mIGZvY3VzIHJpZ2h0IG5vdy4gVGhleSdyZSBnb2luZyB0byBpbGx1bWluYXRlIHRoZSBjb3JlIG9mIHRoZSBkYXRhIGZsb3cuXG5cbk15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgY2xlYXI6IEknbSBnb2luZyB0byBzY2FuIHRoZSBgdXNibmV0LmNgIHNvdXJjZSBjb2RlLCBidXQgSSBhbHNvIG5lZWQgdG8gYnJhbmNoIG91dCBhbmQgbG9vayBhdCAqb3RoZXIqIG5ldHdvcmsgZHJpdmVycyB0aGF0IGludGVyZmFjZSB3aXRoIFVTQi4gSSdsbCBzZWFyY2ggZm9yIGFsbCB0aGUgY2FsbGVycyBvZiBgdXNibmV0X3NrYl9yZXR1cm5gLCB0byBnZXQgYSBjb21wbGV0ZSBwaWN0dXJlIG9mIHRoZSBsYW5kc2NhcGUuIFNlZSBob3cgb3RoZXIgZHJpdmVycyBhcmUgdXNpbmcgYW5kIGludGVyZmFjaW5nIHdpdGggdGhlIHVzYiBzdGFjay4gVGhpcyBicm9hZGVyIHBlcnNwZWN0aXZlIG1pZ2h0IGV4cG9zZSBhbnkgYXJjaGl0ZWN0dXJhbCBwYXR0ZXJucyBvciBwb3RlbnRpYWwgYm90dGxlbmVja3MgSSBzaG91bGQgYmUgYXdhcmUgb2YuIFRoZSBnb2FsIGlzIGEgY29tcHJlaGVuc2l2ZSB1bmRlcnN0YW5kaW5nLCBub3QganVzdCBhIG5hcnJvdyB2aWV3LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTg0NSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAyOjEwOjE0LjU1MjA3MzQ3NFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgxNjk0MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidXNibmV0X3NrYl9yZXR1cm5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvdXNiL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC91c2IvYXFjMTExLmM9MTA3Mj1zdGF0aWMgaW50IGFxYzExMV9yeF9maXh1cChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmMtMTE2Mi1cXG5kcml2ZXJzL25ldC91c2IvYXFjMTExLmM6MTE2MzpcXHRcXHR1c2JuZXRfc2tiX3JldHVybihkZXYsIG5ld19za2IpO1xcbmRyaXZlcnMvbmV0L3VzYi9hcWMxMTEuYy0xMTY0LVxcdFxcdGlmIChwa3RfY291bnQgPT0gMClcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2NvbW1vbi5jPTEzNj1pbnQgYXNpeF9yeF9maXh1cF9pbnRlcm5hbChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9jb21tb24uYy0yMjMtXFx0XFx0XFx0aWYgKCFyeC1cXHUwMDNlcmVtYWluaW5nKSB7XFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmM6MjI0OlxcdFxcdFxcdFxcdHVzYm5ldF9za2JfcmV0dXJuKGRldiwgcngtXFx1MDAzZWF4X3NrYik7XFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfY29tbW9uLmMtMjI1LVxcdFxcdFxcdFxcdHJ4LVxcdTAwM2VheF9za2IgPSBOVUxMO1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzlfMTc4YS5jPTEzNTc9c3RhdGljIGludCBheDg4MTc5X3J4X2ZpeHVwKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9heDg4MTc5XzE3OGEuYy0xNDY2LVxcdFxcdGF4ODgxNzlfcnhfY2hlY2tzdW0oYXhfc2tiLCBwa3RfaGRyKTtcXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3OV8xNzhhLmM6MTQ2NzpcXHRcXHR1c2JuZXRfc2tiX3JldHVybihkZXYsIGF4X3NrYik7XFxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzlfMTc4YS5jLTE0NjgtXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvY2RjX2VlbS5jPTE1ND1zdGF0aWMgaW50IGVlbV9yeF9maXh1cChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvY2RjX2VlbS5jLTMxOS1cXHRcXHRcXHR9IGVsc2VcXG5kcml2ZXJzL25ldC91c2IvY2RjX2VlbS5jOjMyMDpcXHRcXHRcXHRcXHR1c2JuZXRfc2tiX3JldHVybihkZXYsIHNrYjIpO1xcbmRyaXZlcnMvbmV0L3VzYi9jZGNfZWVtLmMtMzIxLVxcdFxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9jZGNfbWJpbS5jPTQxMj1zdGF0aWMgaW50IGNkY19tYmltX3J4X2ZpeHVwKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYl9pbilcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9jZGNfbWJpbS5jLTQ4Ni1cXHRcXHRcXHRcXHRnb3RvIGVycm9yO1xcbmRyaXZlcnMvbmV0L3VzYi9jZGNfbWJpbS5jOjQ4NzpcXHRcXHRcXHR1c2JuZXRfc2tiX3JldHVybihkZXYsIHNrYik7XFxuZHJpdmVycy9uZXQvdXNiL2NkY19tYmltLmMtNDg4LVxcdFxcdFxcdHBheWxvYWQgKz0gbGVuO1xcdC8qIGNvdW50IHBheWxvYWQgYnl0ZXMgaW4gdGhpcyBOVEIgKi9cXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9jZGNfbmNtLmM9MTcyNz1pbnQgY2RjX25jbV9yeF9maXh1cChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2JfaW4pXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvY2RjX25jbS5jLTE4MjEtXFx0XFx0XFx0c2tiX3B1dF9kYXRhKHNrYiwgc2tiX2luLVxcdTAwM2VkYXRhICsgb2Zmc2V0LCBsZW4pO1xcbmRyaXZlcnMvbmV0L3VzYi9jZGNfbmNtLmM6MTgyMjpcXHRcXHRcXHR1c2JuZXRfc2tiX3JldHVybihkZXYsIHNrYik7XFxuZHJpdmVycy9uZXQvdXNiL2NkY19uY20uYy0xODIzLVxcdFxcdFxcdHBheWxvYWQgKz0gbGVuO1xcdC8qIGNvdW50IHBheWxvYWQgYnl0ZXMgaW4gdGhpcyBOVEIgKi9cXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9jeDgyMzEwX2V0aC5jPTI0Mz1zdGF0aWMgaW50IGN4ODIzMTBfcnhfZml4dXAoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2N4ODIzMTBfZXRoLmMtMjYyLVxcdFxcdCAgICAgICBkZXYtXFx1MDAzZXBhcnRpYWxfcmVtKTtcXG5kcml2ZXJzL25ldC91c2IvY3g4MjMxMF9ldGguYzoyNjM6XFx0XFx0dXNibmV0X3NrYl9yZXR1cm4oZGV2LCBza2IyKTtcXG5kcml2ZXJzL25ldC91c2IvY3g4MjMxMF9ldGguYy0yNjQtXFx0XFx0c2tiX3B1bGwoc2tiLCAoZGV2LVxcdTAwM2VwYXJ0aWFsX3JlbSArIDEpIFxcdTAwMjYgfjEpO1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2N4ODIzMTBfZXRoLmMtMzA2LVxcdFxcdC8qIHByb2Nlc3MgdGhlIHBhY2tldCAqL1xcbmRyaXZlcnMvbmV0L3VzYi9jeDgyMzEwX2V0aC5jOjMwNzpcXHRcXHR1c2JuZXRfc2tiX3JldHVybihkZXYsIHNrYjIpO1xcbmRyaXZlcnMvbmV0L3VzYi9jeDgyMzEwX2V0aC5jLTMwOC1cXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9nbDYyMGEuYz02Nz1zdGF0aWMgaW50IGdlbmVsaW5rX3J4X2ZpeHVwKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9nbDYyMGEuYy0xMTUtXFx0XFx0XFx0c2tiX3B1dF9kYXRhKGdsX3NrYiwgcGFja2V0LVxcdTAwM2VwYWNrZXRfZGF0YSwgc2l6ZSk7XFxuZHJpdmVycy9uZXQvdXNiL2dsNjIwYS5jOjExNjpcXHRcXHRcXHR1c2JuZXRfc2tiX3JldHVybihkZXYsIGdsX3NrYik7XFxuZHJpdmVycy9uZXQvdXNiL2dsNjIwYS5jLTExNy1cXHRcXHR9XFxuLS1cXG5kcml2ZXJzL25ldC91c2Iva2FsbWlhLmM9MjMwPWthbG1pYV9yeF9maXh1cChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5kcml2ZXJzL25ldC91c2Iva2FsbWlhLmMtMzI4LVxcdFxcdGVsc2Uge1xcbmRyaXZlcnMvbmV0L3VzYi9rYWxtaWEuYzozMjk6XFx0XFx0XFx0dXNibmV0X3NrYl9yZXR1cm4oZGV2LCBza2IyKTtcXG5kcml2ZXJzL25ldC91c2Iva2FsbWlhLmMtMzMwLVxcdFxcdFxcdHNrYl9wdWxsKHNrYiwgZXRoZXJfcGFja2V0X2xlbmd0aCk7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvbGctdmw2MDAuYz05Nj1zdGF0aWMgaW50IHZsNjAwX3J4X2ZpeHVwKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9sZy12bDYwMC5jLTIwNC1cXHRcXHRcXHRza2JfdHJpbShjbG9uZSwgcGFja2V0X2xlbik7XFxuZHJpdmVycy9uZXQvdXNiL2xnLXZsNjAwLmM6MjA1OlxcdFxcdFxcdHVzYm5ldF9za2JfcmV0dXJuKGRldiwgY2xvbmUpO1xcbmRyaXZlcnMvbmV0L3VzYi9sZy12bDYwMC5jLTIwNi1cXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9sZy12bDYwMC5jLTIxMS1cXHRcXHRcXHRpZiAocy1cXHUwMDNlY3VycmVudF9yeF9idWYpIHtcXG5kcml2ZXJzL25ldC91c2IvbGctdmw2MDAuYzoyMTI6XFx0XFx0XFx0XFx0dXNibmV0X3NrYl9yZXR1cm4oZGV2LCBidWYpO1xcbmRyaXZlcnMvbmV0L3VzYi9sZy12bDYwMC5jLTIxMy1cXHRcXHRcXHRcXHRzLVxcdTAwM2VjdXJyZW50X3J4X2J1ZiA9IE5VTEw7XFxuLS1cXG5kcml2ZXJzL25ldC91c2Ivcm5kaXNfaG9zdC5jPTQ5NT1pbnQgcm5kaXNfcnhfZml4dXAoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3JuZGlzX2hvc3QuYy01NDUtXFxuZHJpdmVycy9uZXQvdXNiL3JuZGlzX2hvc3QuYzo1NDY6XFx0XFx0dXNibmV0X3NrYl9yZXR1cm4oZGV2LCBza2IyKTtcXG5kcml2ZXJzL25ldC91c2Ivcm5kaXNfaG9zdC5jLTU0Ny1cXHR9XFxuZHJpdmVycy9uZXQvdXNiL3JuZGlzX2hvc3QuYy01NDgtXFxuZHJpdmVycy9uZXQvdXNiL3JuZGlzX2hvc3QuYzo1NDk6XFx0LyogY2FsbGVyIHdpbGwgdXNibmV0X3NrYl9yZXR1cm4gdGhlIHJlbWFpbmluZyBwYWNrZXQgKi9cXG5kcml2ZXJzL25ldC91c2Ivcm5kaXNfaG9zdC5jLTU1MC1cXHRpZiAodW5saWtlbHkoZHN0X21hY19maXh1cCkpXFxuLS1cXG5kcml2ZXJzL25ldC91c2Ivc2llcnJhX25ldC5jPTc5NT1zdGF0aWMgaW50IHNpZXJyYV9uZXRfcnhfZml4dXAoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3NpZXJyYV9uZXQuYy04NDItXFx0XFx0aWYgKG5ld19za2IpXFxuZHJpdmVycy9uZXQvdXNiL3NpZXJyYV9uZXQuYzo4NDM6XFx0XFx0XFx0dXNibmV0X3NrYl9yZXR1cm4oZGV2LCBuZXdfc2tiKTtcXG5kcml2ZXJzL25ldC91c2Ivc2llcnJhX25ldC5jLTg0NC1cXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9zbXNjNzV4eC5jPTIxNzE9c3RhdGljIGludCBzbXNjNzV4eF9yeF9maXh1cChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5kcml2ZXJzL25ldC91c2Ivc21zYzc1eHguYy0yMjQyLVxcbmRyaXZlcnMvbmV0L3VzYi9zbXNjNzV4eC5jOjIyNDM6XFx0XFx0XFx0dXNibmV0X3NrYl9yZXR1cm4oZGV2LCBheF9za2IpO1xcbmRyaXZlcnMvbmV0L3VzYi9zbXNjNzV4eC5jLTIyNDQtXFx0XFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmM9MTg3OD1zdGF0aWMgaW50IHNtc2M5NXh4X3J4X2ZpeHVwKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jLTE5NDktXFxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmM6MTk1MDpcXHRcXHRcXHR1c2JuZXRfc2tiX3JldHVybihkZXYsIGF4X3NrYik7XFxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmMtMTk1MS1cXHRcXHR9XFxuLS1cXG5kcml2ZXJzL25ldC91c2Ivc3I5NzAwLmM9MzIzPXN0YXRpYyBpbnQgc3I5NzAwX3J4X2ZpeHVwKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9zcjk3MDAuYy0zNzQtXFx0XFx0bWVtY3B5KHNyX3NrYi1cXHUwMDNlZGF0YSwgc2tiLVxcdTAwM2VkYXRhICsgMywgbGVuKTtcXG5kcml2ZXJzL25ldC91c2Ivc3I5NzAwLmM6Mzc1OlxcdFxcdHVzYm5ldF9za2JfcmV0dXJuKGRldiwgc3Jfc2tiKTtcXG5kcml2ZXJzL25ldC91c2Ivc3I5NzAwLmMtMzc2LVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3NyOTgwMC5jPTYyPXN0YXRpYyBpbnQgc3JfcnhfZml4dXAoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3NyOTgwMC5jLTk1LVxcdFxcdG1lbWNweShzcl9za2ItXFx1MDAzZWRhdGEsIHNrYi1cXHUwMDNlZGF0YSArIG9mZnNldCwgc2l6ZSk7XFxuZHJpdmVycy9uZXQvdXNiL3NyOTgwMC5jOjk2OlxcdFxcdHVzYm5ldF9za2JfcmV0dXJuKGRldiwgc3Jfc2tiKTtcXG5kcml2ZXJzL25ldC91c2Ivc3I5ODAwLmMtOTctXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmM9MzEyPXN0YXRpYyB2b2lkIF9fdXNibmV0X3N0YXR1c19zdG9wX2ZvcmNlKHN0cnVjdCB1c2JuZXQgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYy0zMjUtICovXFxuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jOjMyNjp2b2lkIHVzYm5ldF9za2JfcmV0dXJuKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmMtMzI3LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYy0zNTgtfVxcbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYzozNTk6RVhQT1JUX1NZTUJPTF9HUEwodXNibmV0X3NrYl9yZXR1cm4pO1xcbmRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYy0zNjAtXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmM9NTcwPXN0YXRpYyBpbmxpbmUgaW50IHJ4X3Byb2Nlc3Moc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jLTU5MS1cXG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmM6NTkyOlxcdHVzYm5ldF9za2JfcmV0dXJuKGRldiwgc2tiKTtcXG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmMtNTkzLVxcdHJldHVybiAwO1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jPTY5OD12b2lkIHVzYm5ldF9yZXN1bWVfcngoc3RydWN0IHVzYm5ldCAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jLTcwNi1cXHR3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKFxcdTAwMjZkZXYtXFx1MDAzZXJ4cV9wYXVzZSkpICE9IE5VTEwpIHtcXG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmM6NzA3OlxcdFxcdHVzYm5ldF9za2JfcmV0dXJuKGRldiwgc2tiKTtcXG5kcml2ZXJzL25ldC91c2IvdXNibmV0LmMtNzA4LVxcdFxcdG51bSsrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMjoxMDoxNC42MDAyNTA0NDRaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzgwODA2NzIxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBhIFJlY2VudCBVU0IgTmV0d29ya2luZyBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCwgcmlnaHQgb2ZmIHRoZSBiYXQsIEkgbmVlZCB0byB6ZXJvIGluIG9uIGEgY291cGxlIG9mIGNydWNpYWwgc3ltYm9sczogYHVzYm5ldF9za2JfcmV0dXJuYCBhbmQgYHR4X2NvbXBsZXRlYCwgb3IsIGluIHNvbWUgY2FzZXMsIGB1c2JuZXRfc3RhcnRfeG1pdGAuIExldCdzIGNvbmZpcm0gdGhhdCBgdHhfY29tcGxldGVgIGlzIGluZGVlZCBpbiBgdXNibmV0LmNgLiBBaGEsIHRoZXJlIGl0IGlzLCBsaW5lIDEyOTUuIEdvb2QuXG5cbk5vdywgYmVmb3JlIEkgZGl2ZSB0b28gZGVlcCwgbGV0J3MgbWFrZSBzdXJlIEkgaGF2ZSBhbGwgdGhlIHByZXJlcXVpc2l0ZXMgY292ZXJlZC4gU2VlbXMgdGhlIHN5c3RlbSBmbGFnZ2VkIGl0IGFzIGBXb3J0aEZ1enppbmc6IHRydWVgLCB3aGljaCBpcyBhIGdvb2QgaW5pdGlhbCBzaWduLiBUaGUgYEZvY3VzU3ltYm9sc2AgYXJlIHNwb3Qgb24sIGV4YWN0bHkgd2hhdCBJIGV4cGVjdGVkLiBUaGUgY29ycmVjdCBjb25maWdzIGFyZSBlbmFibGVkOiBgVVNCX1VTQk5FVGAsIGFuZCBgVVNCX05FVF9EUklWRVJTYC4gR29vZCwgZ29vZC4gVGhlc2UgYXJlIHRoZSBzcGVjaWZpYyBvbmVzLCB0aG91Z2ggYFVTQmAgYW5kIGBORVRgIGluIGdlbmVyYWwgd291bGQgYWxzbyBzdWZmaWNlLlxuXG5BbHJpZ2h0LCBsZXQncyBkbyBhIGZpbmFsIHNhbml0eSBjaGVjayBvZiB0aGUgY29yZSByZWFzb25pbmcgYmVoaW5kIHRoaXMgY2hhbmdlLiBUaGUgcGF0Y2gsIGFzIEkgdW5kZXJzdGFuZCBpdCwgaXMgZmlkZGxpbmcgd2l0aCBob3cgcGVyLUNQVSA2NC1iaXQgc3RhdHMgYXJlIHVwZGF0ZWQuIFNwZWNpZmljYWxseSwgaXQncyBtb2RpZnlpbmcgdGhlIGxvZ2ljIHdpdGhpbiB0aGUgYHVzYm5ldF9za2JfcmV0dXJuKClgIGFuZCBgdHhfY29tcGxldGUoKWAgZnVuY3Rpb25zIHdpdGhpbiB0aGUgY29yZSBVU0IgbmV0d29ya2luZyBkcml2ZXIsIGB1c2JuZXQuY2AuIEl0J3MgYSBzd2l0Y2hlcm9vIGZyb20gdXNpbmcgYHU2NF9zdGF0c191cGRhdGVfYmVnaW5faXJxc2F2ZSgpYCB0byBgZ2V0X2NwdV9wdHIoKWAgY29tYmluZWQgd2l0aCBgdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbigpYC4gVGhpcyBzaGlmdCBhbHRlcnMgdGhlIHN5bmNocm9uaXphdGlvbiwgcHJlZW1wdGlvbiwgYW5kIElSUSBoYW5kbGluZyBzZW1hbnRpY3MgaW4gYXJlYXMgb2YgbmV0d29yayBjb2RlIHRoYXQgYXJlIGFjY2Vzc2libGUgdmlhIGVtdWxhdGVkIFVTQiBkZXZpY2VzIGFuZCBzdWJzZXF1ZW50IG5ldHdvcmsgdHJhZmZpYy5cblxuT2theSwgdGhhdCBhbGwgbWFrZXMgc2Vuc2UuIFRpbWUgdG8gcmVjb3JkIHRoZSByZXN1bHRzLiBJJ2xsIGNhbGwgYHNldC1yZXN1bHRzYCBub3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MDMzLCJPdXRwdXRUb2tlbnMiOjE2MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMjoxMDoxOC40MDgzMjA1NDZaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3OTI2OTk3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVVNCX1VTQk5FVFwiLFxuICAgIFwiVVNCX05FVF9EUklWRVJTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidXNibmV0X3NrYl9yZXR1cm5cIixcbiAgICBcInR4X2NvbXBsZXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgcGVyLUNQVSA2NC1iaXQgbmV0d29yayBzdGF0aXN0aWNzIHVwZGF0ZSBzeW5jaHJvbml6YXRpb24gaW4gdXNibmV0X3NrYl9yZXR1cm4gYW5kIHR4X2NvbXBsZXRlIChkcml2ZXJzL25ldC91c2IvdXNibmV0LmMpLCByZXBsYWNpbmcgSVJRLXNhdmluZyB1NjRfc3RhdHMgaGVscGVycyB3aXRoIGdldF9jcHVfcHRyL3B1dF9jcHVfcHRyIHBhaXJzIGFuZCB1NjRfc3RhdHNfdXBkYXRlX2JlZ2luL2VuZC4gVGhpcyB0b3VjaGVzIHJlYWNoYWJsZSBVU0IgbmV0d29ya2luZyBkcml2ZXIgbG9naWMgdGhhdCBjYW4gYmUgdGVzdGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB3aXRoIGVtdWxhdGVkIFVTQiBuZXR3b3JrIGRldmljZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVVNCX1VTQk5FVFwiLFxuICAgIFwiVVNCX05FVF9EUklWRVJTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidXNibmV0X3NrYl9yZXR1cm5cIixcbiAgICBcInR4X2NvbXBsZXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgcGVyLUNQVSA2NC1iaXQgbmV0d29yayBzdGF0aXN0aWNzIHVwZGF0ZSBzeW5jaHJvbml6YXRpb24gaW4gdXNibmV0X3NrYl9yZXR1cm4gYW5kIHR4X2NvbXBsZXRlIChkcml2ZXJzL25ldC91c2IvdXNibmV0LmMpLCByZXBsYWNpbmcgSVJRLXNhdmluZyB1NjRfc3RhdHMgaGVscGVycyB3aXRoIGdldF9jcHVfcHRyL3B1dF9jcHVfcHRyIHBhaXJzIGFuZCB1NjRfc3RhdHNfdXBkYXRlX2JlZ2luL2VuZC4gVGhpcyB0b3VjaGVzIHJlYWNoYWJsZSBVU0IgbmV0d29ya2luZyBkcml2ZXIgbG9naWMgdGhhdCBjYW4gYmUgdGVzdGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB3aXRoIGVtdWxhdGVkIFVTQiBuZXR3b3JrIGRldmljZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAyOjEwOjE4LjQ4NzU5Nzg4NVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg1NjIyNzMxMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMjoxMDoxOC40ODgwNzUwOTVaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxODU2MTc5MjIxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgcGVyLUNQVSBuZXR3b3JrIHN0YXRpc3RpY3MgYWNjb3VudGluZyBpbiBkcml2ZXJzL25ldC91c2IvdXNibmV0LmMsIHJlcGxhY2luZyB0aGlzX2NwdV9wdHIoKSBhbmQgaXJxc2F2ZS9pcnFyZXN0b3JlIDY0LWJpdCBzdGF0cyB1cGRhdGUgaGVscGVycyB3aXRoIGdldF9jcHVfcHRyKCksIHU2NF9zdGF0c191cGRhdGVfYmVnaW4vZW5kKCksIGFuZCBwdXRfY3B1X3B0cigpLiBUaGlzIGVuc3VyZXMgcHJlZW1wdGlvbiBpcyBwcm9wZXJseSBkaXNhYmxlZCB3aGlsZSBhY2Nlc3NpbmcgdGhlIHBlci1DUFUgcG9pbnRlci5cXG5cXG5UaGUgY2hhbmdlcyBkbyBub3QgYWxsb2NhdGUgbmV3IGJ1ZmZlcnMsIG1hbmlwdWxhdGUgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGFsdGVyIGJ1ZmZlciBsZW5ndGgvYm91bmRzIGNhbGN1bGF0aW9ucywgb3IgY29weSBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm8tbGVhayByaXNrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIEtNU0FOIGZ1enppbmcuIEFueSBwb3RlbnRpYWwgc3luY2hyb25pemF0aW9uIG9yIHByZWVtcHRpb24gYnVncyB3b3VsZCBiZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dlcnMgKERFQlVHX1BSRUVNUFQsIExPQ0tERVAsIEtBU0FOKS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA2MTU2NWFjNDljOTg0YmU0MGQyMTIzY2EwMDlkYjJhY2Q3NDI3NzUwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgOCAwMjowNzoyNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi91c2JuZXQuYyBiL2RyaXZlcnMvbmV0L3VzYi91c2JuZXQuY1xuaW5kZXggYTE5ZWNmNzE4ZjM2YS4uM2RmNzJiMGM2YmNmYyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3VzYi91c2JuZXQuY1xuKysrIGIvZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jXG5AQCAtMzI1LDggKzMyNSw3IEBAIHN0YXRpYyB2b2lkIF9fdXNibmV0X3N0YXR1c19zdG9wX2ZvcmNlKHN0cnVjdCB1c2JuZXQgKmRldilcbiAgKi9cbiB2b2lkIHVzYm5ldF9za2JfcmV0dXJuKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG4tXHRzdHJ1Y3QgcGNwdV9zd19uZXRzdGF0cyAqc3RhdHM2NCA9IHRoaXNfY3B1X3B0cihkZXYtXHUwMDNlbmV0LVx1MDAzZXRzdGF0cyk7XG4tXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuK1x0c3RydWN0IHBjcHVfc3dfbmV0c3RhdHMgKnN0YXRzNjQ7XG4gXHRpbnRcdHN0YXR1cztcbiBcbiBcdGlmICh0ZXN0X2JpdChFVkVOVF9SWF9QQVVTRUQsIFx1MDAyNmRldi1cdTAwM2VmbGFncykpIHtcbkBAIC0zMzgsMTAgKzMzNywxMiBAQCB2b2lkIHVzYm5ldF9za2JfcmV0dXJuKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdGlmIChza2ItXHUwMDNlcHJvdG9jb2wgPT0gMClcbiBcdFx0c2tiLVx1MDAzZXByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBkZXYtXHUwMDNlbmV0KTtcbiBcbi1cdGZsYWdzID0gdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbl9pcnFzYXZlKFx1MDAyNnN0YXRzNjQtXHUwMDNlc3luY3ApO1xuK1x0c3RhdHM2NCA9IGdldF9jcHVfcHRyKGRldi1cdTAwM2VuZXQtXHUwMDNldHN0YXRzKTtcbitcdHU2NF9zdGF0c191cGRhdGVfYmVnaW4oXHUwMDI2c3RhdHM2NC1cdTAwM2VzeW5jcCk7XG4gXHR1NjRfc3RhdHNfaW5jKFx1MDAyNnN0YXRzNjQtXHUwMDNlcnhfcGFja2V0cyk7XG4gXHR1NjRfc3RhdHNfYWRkKFx1MDAyNnN0YXRzNjQtXHUwMDNlcnhfYnl0ZXMsIHNrYi1cdTAwM2VsZW4pO1xuLVx0dTY0X3N0YXRzX3VwZGF0ZV9lbmRfaXJxcmVzdG9yZShcdTAwMjZzdGF0czY0LVx1MDAzZXN5bmNwLCBmbGFncyk7XG4rXHR1NjRfc3RhdHNfdXBkYXRlX2VuZChcdTAwMjZzdGF0czY0LVx1MDAzZXN5bmNwKTtcbitcdHB1dF9jcHVfcHRyKGRldi1cdTAwM2VuZXQtXHUwMDNldHN0YXRzKTtcbiBcbiBcdG5ldGlmX2RiZyhkZXYsIHJ4X3N0YXR1cywgZGV2LVx1MDAzZW5ldCwgXCJcdTAwM2MgcngsIGxlbiAlenUsIHR5cGUgMHgleFxcblwiLFxuIFx0XHQgIHNrYi1cdTAwM2VsZW4gKyBzaXplb2Yoc3RydWN0IGV0aGhkciksIHNrYi1cdTAwM2Vwcm90b2NvbCk7XG5AQCAtMTI5OCwxMyArMTI5OSwxNCBAQCBzdGF0aWMgdm9pZCB0eF9jb21wbGV0ZShzdHJ1Y3QgdXJiICp1cmIpXG4gXHRzdHJ1Y3QgdXNibmV0XHRcdCpkZXYgPSBlbnRyeS1cdTAwM2VkZXY7XG4gXG4gXHRpZiAodXJiLVx1MDAzZXN0YXR1cyA9PSAwKSB7XG4tXHRcdHN0cnVjdCBwY3B1X3N3X25ldHN0YXRzICpzdGF0czY0ID0gdGhpc19jcHVfcHRyKGRldi1cdTAwM2VuZXQtXHUwMDNldHN0YXRzKTtcbi1cdFx0dW5zaWduZWQgbG9uZyBmbGFncztcbitcdFx0c3RydWN0IHBjcHVfc3dfbmV0c3RhdHMgKnN0YXRzNjQ7XG4gXG4tXHRcdGZsYWdzID0gdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbl9pcnFzYXZlKFx1MDAyNnN0YXRzNjQtXHUwMDNlc3luY3ApO1xuK1x0XHRzdGF0czY0ID0gZ2V0X2NwdV9wdHIoZGV2LVx1MDAzZW5ldC1cdTAwM2V0c3RhdHMpO1xuK1x0XHR1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKFx1MDAyNnN0YXRzNjQtXHUwMDNlc3luY3ApO1xuIFx0XHR1NjRfc3RhdHNfYWRkKFx1MDAyNnN0YXRzNjQtXHUwMDNldHhfcGFja2V0cywgZW50cnktXHUwMDNlcGFja2V0cyk7XG4gXHRcdHU2NF9zdGF0c19hZGQoXHUwMDI2c3RhdHM2NC1cdTAwM2V0eF9ieXRlcywgZW50cnktXHUwMDNlbGVuZ3RoKTtcbi1cdFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmRfaXJxcmVzdG9yZShcdTAwMjZzdGF0czY0LVx1MDAzZXN5bmNwLCBmbGFncyk7XG4rXHRcdHU2NF9zdGF0c191cGRhdGVfZW5kKFx1MDAyNnN0YXRzNjQtXHUwMDNlc3luY3ApO1xuK1x0XHRwdXRfY3B1X3B0cihkZXYtXHUwMDNlbmV0LVx1MDAzZXRzdGF0cyk7XG4gXHR9IGVsc2Uge1xuIFx0XHRkZXYtXHUwMDNlbmV0LVx1MDAzZXN0YXRzLnR4X2Vycm9ycysrO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDI6MTA6MTguNDg4MDc2Mjk1WiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjExMjQ2NzEwNzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIEtNU0FOIEZ1enppbmcgTmVlZHMqKlxuXG5Pa2F5LCBsZXQncyB0YWtlIGEgbG9vayBhdCB0aGlzIHBhdGNoIGFuZCBkZWNpZGUgaWYgd2UgbmVlZCB0byBjb25zaWRlciBLTVNBTiBmdXp6aW5nLiBJdCBhcHBlYXJzIHRoZSBjaGFuZ2VzIGFyZSBjb25maW5lZCB0byBgZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jYC4gU3BlY2lmaWNhbGx5LCB0aGV5J3ZlIHRvdWNoZWQgdGhlIGB1c2JuZXRfc2tiX3JldHVybmAgYW5kIGB0eF9jb21wbGV0ZWAgZnVuY3Rpb25zLlxuXG5JIGNhbiBzZWUgd2hhdCdzIGNoYW5nZWQgaW4gdGhlIGNvZGU6IHRoZXkndmUgbW92ZWQgZnJvbSB1c2luZyBgdGhpc19jcHVfcHRyYCB3aXRoIGludGVycnVwdCBzYXZlL3Jlc3RvcmUgYXJvdW5kIHRoZSBzdGF0cyB1cGRhdGUsIHRvIHVzaW5nIGBnZXRfY3B1X3B0cmAvYHB1dF9jcHVfcHRyYCBhbmQgdGhlIG5ld2VyIGB1NjRfc3RhdHNfdXBkYXRlX2JlZ2luYC9gZW5kYCBmdW5jdGlvbnMuIFNvLCB0aGV5J3JlIGV4cGxpY2l0bHkgb2J0YWluaW5nIHRoZSBwZXItQ1BVIHN0YXRpc3RpY3MgcG9pbnRlciBub3cuIEl0J3MgYSBzdHJhaWdodGZvcndhcmQgY2hhbmdlLCBsaWtlbHkgYWltZWQgYXQgaW1wcm92aW5nIHBlcmZvcm1hbmNlIG9yIGFsaWduaW5nIHdpdGggYSBuZXdlciBsb2NraW5nIHNjaGVtZSB3aXRoaW4gdGhlIGtlcm5lbCBzdGF0aXN0aWNzIGluZnJhc3RydWN0dXJlLiBUaGUgb2xkIGNvZGUgd2FzOiBvYnRhaW5pbmcgdGhlIHBlci1jcHUgdmFyaWFibGUgKmJlZm9yZSogc2F2aW5nIGludGVycnVwdHMsIHVwZGF0aW5nLCBhbmQgcmVzdG9yaW5nIGludGVycnVwdHMgdG8gYmUgc2FmZS4gVGhlIG5ldyBjb2RlIGlzOiBvYnRhaW5pbmcgdGhlIHBlci1jcHUgdmFyaWFibGUsIHVwZGF0aW5nIGl0LCBhbmQgKnRoZW4qIHJldHVybmluZyB0aGUgY3B1IHZhcmlhYmxlLlxuXG5HaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBjaGFuZ2UsIGl0J3MgYSByZWZhY3RvcmluZywgdG91Y2hpbmcgb24gc3luY2hyb25pemF0aW9uIGFuZCBwZXItQ1BVIGRhdGEuIEl0J3MgbGlrZWx5IHRoYXQgaXQncyBva2F5LCBidXQgaXQgZG9lcyB0b3VjaCBhIHNlbnNpdGl2ZSBhcmVhLCBhbmQgdGhlc2Uga2luZHMgb2YgY2hhbmdlcyBjYW4gYWx3YXlzIGludHJvZHVjZSBzdWJ0bGUgY29uY3VycmVuY3kgaXNzdWVzLiBJdCdzIHdvcnRoIGEgcXVpY2sgY2hlY2sgd2l0aCBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAganVzdCB0byBnZXQgYSBicm9hZGVyIHZpZXcgb2YgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gYGRyaXZlcnMvbmV0L3VzYi91c2JuZXQuY2AgdG8gbG9vayBmb3IgYW55IHJlbGF0ZWQgaXNzdWVzLiBXaGlsZSB0aGUgY2hhbmdlIHNlZW1zIHJlYXNvbmFibGUgb24gaXRzIG93biwgYSBxdWljayBjb250ZXh0dWFsIGluc3BlY3Rpb24gaXMgYWx3YXlzIGEgZ29vZCBwcmFjdGljZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjcxNiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAyOjEwOjI5LjczNDc4OTc4NVoiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTA3MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMyMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDMyMDpcXHR9XFxuIDMyMTpcXHRcXG4gMzIyOlxcdC8qIFBhc3NlcyB0aGlzIHBhY2tldCB1cCB0aGUgc3RhY2ssIHVwZGF0aW5nIGl0cyBhY2NvdW50aW5nLlxcbiAzMjM6XFx0ICogU29tZSBsaW5rIHByb3RvY29scyBiYXRjaCBwYWNrZXRzLCBzbyB0aGVpciByeF9maXh1cCBwYXRoc1xcbiAzMjQ6XFx0ICogY2FuIHJldHVybiBjbG9uZXMgYXMgd2VsbCBhcyBqdXN0IG1vZGlmeSB0aGUgb3JpZ2luYWwgc2tiLlxcbiAzMjU6XFx0ICovXFxuIDMyNjpcXHR2b2lkIHVzYm5ldF9za2JfcmV0dXJuKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gMzI3OlxcdHtcXG4gMzI4OlxcdFxcdHN0cnVjdCBwY3B1X3N3X25ldHN0YXRzICpzdGF0czY0O1xcbiAzMjk6XFx0XFx0aW50XFx0c3RhdHVzO1xcbiAzMzA6XFx0XFxuIDMzMTpcXHRcXHRpZiAodGVzdF9iaXQoRVZFTlRfUlhfUEFVU0VELCBcXHUwMDI2ZGV2LVxcdTAwM2VmbGFncykpIHtcXG4gMzMyOlxcdFxcdFxcdHNrYl9xdWV1ZV90YWlsKFxcdTAwMjZkZXYtXFx1MDAzZXJ4cV9wYXVzZSwgc2tiKTtcXG4gMzMzOlxcdFxcdFxcdHJldHVybjtcXG4gMzM0OlxcdFxcdH1cXG4gMzM1OlxcdFxcbiAzMzY6XFx0XFx0Lyogb25seSB1cGRhdGUgaWYgdW5zZXQgdG8gYWxsb3cgbWluaWRyaXZlciByeF9maXh1cCBvdmVycmlkZSAqL1xcbiAzMzc6XFx0XFx0aWYgKHNrYi1cXHUwMDNlcHJvdG9jb2wgPT0gMClcXG4gMzM4OlxcdFxcdFxcdHNrYi1cXHUwMDNlcHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldi1cXHUwMDNlbmV0KTtcXG4gMzM5OlxcdFxcbiAzNDA6XFx0XFx0c3RhdHM2NCA9IGdldF9jcHVfcHRyKGRldi1cXHUwMDNlbmV0LVxcdTAwM2V0c3RhdHMpO1xcbiAzNDE6XFx0XFx0dTY0X3N0YXRzX3VwZGF0ZV9iZWdpbihcXHUwMDI2c3RhdHM2NC1cXHUwMDNlc3luY3ApO1xcbiAzNDI6XFx0XFx0dTY0X3N0YXRzX2luYyhcXHUwMDI2c3RhdHM2NC1cXHUwMDNlcnhfcGFja2V0cyk7XFxuIDM0MzpcXHRcXHR1NjRfc3RhdHNfYWRkKFxcdTAwMjZzdGF0czY0LVxcdTAwM2VyeF9ieXRlcywgc2tiLVxcdTAwM2VsZW4pO1xcbiAzNDQ6XFx0XFx0dTY0X3N0YXRzX3VwZGF0ZV9lbmQoXFx1MDAyNnN0YXRzNjQtXFx1MDAzZXN5bmNwKTtcXG4gMzQ1OlxcdFxcdHB1dF9jcHVfcHRyKGRldi1cXHUwMDNlbmV0LVxcdTAwM2V0c3RhdHMpO1xcbiAzNDY6XFx0XFxuIDM0NzpcXHRcXHRuZXRpZl9kYmcoZGV2LCByeF9zdGF0dXMsIGRldi1cXHUwMDNlbmV0LCBcXFwiXFx1MDAzYyByeCwgbGVuICV6dSwgdHlwZSAweCV4XFxcXG5cXFwiLFxcbiAzNDg6XFx0XFx0XFx0ICBza2ItXFx1MDAzZWxlbiArIHNpemVvZihzdHJ1Y3QgZXRoaGRyKSwgc2tiLVxcdTAwM2Vwcm90b2NvbCk7XFxuIDM0OTpcXHRcXHRtZW1zZXQoc2tiLVxcdTAwM2VjYiwgMCwgc2l6ZW9mKHN0cnVjdCBza2JfZGF0YSkpO1xcbiAzNTA6XFx0XFxuIDM1MTpcXHRcXHRpZiAoc2tiX2RlZmVyX3J4X3RpbWVzdGFtcChza2IpKVxcbiAzNTI6XFx0XFx0XFx0cmV0dXJuO1xcbiAzNTM6XFx0XFxuIDM1NDpcXHRcXHRzdGF0dXMgPSBuZXRpZl9yeCAoc2tiKTtcXG4gMzU1OlxcdFxcdGlmIChzdGF0dXMgIT0gTkVUX1JYX1NVQ0NFU1MpXFxuIDM1NjpcXHRcXHRcXHRuZXRpZl9kYmcoZGV2LCByeF9lcnIsIGRldi1cXHUwMDNlbmV0LFxcbiAzNTc6XFx0XFx0XFx0XFx0ICBcXFwibmV0aWZfcnggc3RhdHVzICVkXFxcXG5cXFwiLCBzdGF0dXMpO1xcbiAzNTg6XFx0fVxcbiAzNTk6XFx0RVhQT1JUX1NZTUJPTF9HUEwodXNibmV0X3NrYl9yZXR1cm4pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMjoxMDoyOS43MzQ5MDIyNTVaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQ0NjM4NDkyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkFuYWx5emluZyB0aGUgSW1wb3J0YW5jZSBvZiBgdHhfY29tcGxldGVgKipcblxuQWxyaWdodCwgc28gd2UndmUgY292ZXJlZCB0aGUgYmFzaWNzLCBidXQgbm93IEkgbmVlZCB0byBkaWcgZGVlcGVyLiBJJ20gdGhpbmtpbmcsIGxldCdzIG5vdCBqdXN0IGdsb3NzIG92ZXIgdGhpbmdzIOKAkyBpdCdzIGNydWNpYWwgd2UgYWxzbyB0aG9yb3VnaGx5IGV4YW1pbmUgdGhlIGB0eF9jb21wbGV0ZWAgZmllbGQgb3IgZnVuY3Rpb24sIHdoYXRldmVyIGl0J3MgY2FsbGVkIGluIHRoaXMgc3BlY2lmaWMgY29udGV4dC4gVW5kZXJzdGFuZGluZyB0aGUgbnVhbmNlcyBvZiB0cmFuc2FjdGlvbiBjb21wbGV0aW9uIGlzIGFic29sdXRlbHkgY3JpdGljYWwuIEkgbmVlZCB0byBrbm93OiB3aGF0IGV4YWN0bHkgZG9lcyBpdCBzaWduYWw/IElzIGl0IGEgYmluYXJ5IGZsYWcsIGEgc3RhdHVzIGNvZGUsIG9yIHNvbWV0aGluZyBtb3JlIGNvbXBsZXg/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgaXRzIGRpZmZlcmVudCBzdGF0ZXM/IERvZXMgaXQgbWVhbiB0aGUgdHJhbnNhY3Rpb24gaXMgZmluYWxpemVkLCBjb21taXR0ZWQsIHJvbGxlZCBiYWNrLCBvciBzdGlsbCBwZW5kaW5nPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBlZGdlIGNhc2VzIG9yIHJhY2UgY29uZGl0aW9ucyBhc3NvY2lhdGVkIHdpdGggaXRzIHN0YXRlP1xuXG5GcmFua2x5LCBJIGNhbid0IHByb2NlZWQgZnVydGhlciB1bnRpbCBJIGhhdmUgYSByb2NrLXNvbGlkIGdyYXNwIG9mIHdoYXQgYHR4X2NvbXBsZXRlYCByZXByZXNlbnRzIGFuZCBob3cgaXQgYmVoYXZlcy4gSXRzIGNoYXJhY3RlcmlzdGljcyBhcmUgZ29pbmcgdG8gYmUgZnVuZGFtZW50YWwgdG8gdGhlIGRlc2lnbiBvZiBhbnkgc3lzdGVtIG9yIHNvbHV0aW9uIGhlcmUuIEkgbmVlZCB0byBiZSBhYmxlIHRvIHByZWRpY3QgaXRzIGJlaGF2aW9yIGFuZCBpdHMgcG90ZW50aWFsIGltcGFjdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yIGluIHRoZSBjb250ZXh0IG9mIG91ciByZXF1aXJlbWVudHMuIFRoaXMgY291bGQgaGF2ZSBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMsIHNlY3VyaXR5IHJhbWlmaWNhdGlvbnMsIG9yIGV2ZW4gaW1wbGljYXRpb25zIGZvciBkYXRhIGludGVncml0eS4gQSB0aG9yb3VnaCB1bmRlcnN0YW5kaW5nIG9mIGB0eF9jb21wbGV0ZWAgaXMgZXNzZW50aWFsLiBXZSBjYW4ndCBhZmZvcmQgdG8gb3Zlcmxvb2sgYW55IGRldGFpbHMgYXQgdGhpcyBzdGFnZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDMwNiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDI6MTA6MzIuMTgxMjg5NTY4WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MDIxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC91c2IvdXNibmV0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTI5MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTI5MDpcXHRcXHRcXHRuZXRkZXZfZGJnKGRldi1cXHUwMDNlbmV0LCBcXFwia2V2ZW50IGRvbmUsIGZsYWdzID0gMHglbHhcXFxcblxcXCIsIGRldi1cXHUwMDNlZmxhZ3MpO1xcbjEyOTE6XFx0fVxcbjEyOTI6XFx0XFxuMTI5MzpcXHQvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xcbjEyOTQ6XFx0XFxuMTI5NTpcXHRzdGF0aWMgdm9pZCB0eF9jb21wbGV0ZShzdHJ1Y3QgdXJiICp1cmIpXFxuMTI5NjpcXHR7XFxuMTI5NzpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZlxcdFxcdCpza2IgPSAoc3RydWN0IHNrX2J1ZmYgKikgdXJiLVxcdTAwM2Vjb250ZXh0O1xcbjEyOTg6XFx0XFx0c3RydWN0IHNrYl9kYXRhXFx0XFx0KmVudHJ5ID0gKHN0cnVjdCBza2JfZGF0YSAqKSBza2ItXFx1MDAzZWNiO1xcbjEyOTk6XFx0XFx0c3RydWN0IHVzYm5ldFxcdFxcdCpkZXYgPSBlbnRyeS1cXHUwMDNlZGV2O1xcbjEzMDA6XFx0XFxuMTMwMTpcXHRcXHRpZiAodXJiLVxcdTAwM2VzdGF0dXMgPT0gMCkge1xcbjEzMDI6XFx0XFx0XFx0c3RydWN0IHBjcHVfc3dfbmV0c3RhdHMgKnN0YXRzNjQ7XFxuMTMwMzpcXHRcXG4xMzA0OlxcdFxcdFxcdHN0YXRzNjQgPSBnZXRfY3B1X3B0cihkZXYtXFx1MDAzZW5ldC1cXHUwMDNldHN0YXRzKTtcXG4xMzA1OlxcdFxcdFxcdHU2NF9zdGF0c191cGRhdGVfYmVnaW4oXFx1MDAyNnN0YXRzNjQtXFx1MDAzZXN5bmNwKTtcXG4xMzA2OlxcdFxcdFxcdHU2NF9zdGF0c19hZGQoXFx1MDAyNnN0YXRzNjQtXFx1MDAzZXR4X3BhY2tldHMsIGVudHJ5LVxcdTAwM2VwYWNrZXRzKTtcXG4xMzA3OlxcdFxcdFxcdHU2NF9zdGF0c19hZGQoXFx1MDAyNnN0YXRzNjQtXFx1MDAzZXR4X2J5dGVzLCBlbnRyeS1cXHUwMDNlbGVuZ3RoKTtcXG4xMzA4OlxcdFxcdFxcdHU2NF9zdGF0c191cGRhdGVfZW5kKFxcdTAwMjZzdGF0czY0LVxcdTAwM2VzeW5jcCk7XFxuMTMwOTpcXHRcXHRcXHRwdXRfY3B1X3B0cihkZXYtXFx1MDAzZW5ldC1cXHUwMDNldHN0YXRzKTtcXG4xMzEwOlxcdFxcdH0gZWxzZSB7XFxuMTMxMTpcXHRcXHRcXHRkZXYtXFx1MDAzZW5ldC1cXHUwMDNlc3RhdHMudHhfZXJyb3JzKys7XFxuMTMxMjpcXHRcXG4xMzEzOlxcdFxcdFxcdHN3aXRjaCAodXJiLVxcdTAwM2VzdGF0dXMpIHtcXG4xMzE0OlxcdFxcdFxcdGNhc2UgLUVQSVBFOlxcbjEzMTU6XFx0XFx0XFx0XFx0dXNibmV0X2RlZmVyX2tldmVudChkZXYsIEVWRU5UX1RYX0hBTFQpO1xcbjEzMTY6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMTMxNzpcXHRcXG4xMzE4OlxcdFxcdFxcdC8qIHNvZnR3YXJlLWRyaXZlbiBpbnRlcmZhY2Ugc2h1dGRvd24gKi9cXG4xMzE5OlxcdFxcdFxcdGNhc2UgLUVDT05OUkVTRVQ6XFx0XFx0Ly8gYXN5bmMgdW5saW5rXFxuMTMyMDpcXHRcXHRcXHRjYXNlIC1FU0hVVERPV046XFx0XFx0Ly8gaGFyZHdhcmUgZ29uZVxcbjEzMjE6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMTMyMjpcXHRcXG4xMzIzOlxcdFxcdFxcdC8qIGxpa2UgcngsIHR4IGdldHMgY29udHJvbGxlciBpL28gZmF1bHRzIGR1cmluZyBodWJfd3FcXG4xMzI0OlxcdFxcdFxcdCAqIGRlbGF5cyBhbmQgc28gaXQgdXNlcyB0aGUgc2FtZSB0aHJvdHRsaW5nIG1lY2hhbmlzbS5cXG4xMzI1OlxcdFxcdFxcdCAqL1xcbjEzMjY6XFx0XFx0XFx0Y2FzZSAtRVBST1RPOlxcbjEzMjc6XFx0XFx0XFx0Y2FzZSAtRVRJTUU6XFxuMTMyODpcXHRcXHRcXHRjYXNlIC1FSUxTRVE6XFxuMTMyOTpcXHRcXHRcXHRcXHR1c2JfbWFya19sYXN0X2J1c3koZGV2LVxcdTAwM2V1ZGV2KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDI6MTA6MzIuMTgxNDMxNzk4WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ4Njg0MTgwNDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIENvZGUgQ2hhbmdlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjaGFuZ2UgYW5kIGl0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guIFdlJ3JlIHJlcGxhY2luZyB0aGUgb2xkZXIgYHRoaXNfY3B1X3B0ciguLi4pYCBhbmQgdGhlIGB1NjRfc3RhdHNfdXBkYXRlX2JlZ2luX2lycXNhdmUvZW5kX2lycXJlc3RvcmVgIGZ1bmN0aW9ucyB3aXRoIHRoZSBuZXdlciBgZ2V0X2NwdV9wdHIoLi4uKWAsIGB1NjRfc3RhdHNfdXBkYXRlX2JlZ2luL2VuZGAsIGFuZCBgcHV0X2NwdV9wdHIoLi4uKWAgYXBwcm9hY2guIFRoZSBrZXkgZGlmZmVyZW5jZSBJIHNlZSBpcyB0aGF0IGB0aGlzX2NwdV9wdHJgIGhhcyB0aGUgcG90ZW50aWFsIHRvIGNhdXNlIGlzc3VlcyB3aXRoIHByZWVtcHRpb24gb3IgU01QIGlmIGl0J3MgdXNlZCBpbiBhIHByZWVtcHRpYmxlIGNvbnRleHQgYW5kIGNvdWxkIGV2ZW4gdHJpZ2dlciBgbWlnaHRfc2xlZXAoKWAuICBgZ2V0X2NwdV9wdHJgLCBvbiB0aGUgb3RoZXIgaGFuZCwgZXhwbGljaXRseSBkaXNhYmxlcyBwcmVlbXB0aW9uIHdpdGggYHByZWVtcHRfZGlzYWJsZSgpYCBhbmQgZ2l2ZXMgdXMgdGhlIHBlci1DUFUgcG9pbnRlciwgYW5kIHRoZW4gcmUtZW5hYmxlcyBpdCB3aXRoIHRoZSBtYXRjaGluZyBgcHV0X2NwdV9wdHIoKWAuXG5cbk15IGZpcnN0IGltbWVkaWF0ZSBjb25jZXJuLCBhcyBhbHdheXMsIGlzIHdoZXRoZXIgdGhpcyBpbnRyb2R1Y2VzIGFueSBzb3J0IG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcyBvciBwb3RlbnRpYWwgaW5mb3JtYXRpb24gbGVha3MuIExldCdzIGJyZWFrIHRoYXQgZG93bjpcbiogICBJIGNhbiBzZWUgdGhhdCB3ZSdyZSAqbm90KiBtYWtpbmcgYW55IG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMuXG4qICAgV2UncmUgKm5vdCogY29weWluZyBhbnkga2VybmVsIGRhdGEgdG8gdXNlciBzcGFjZSwgc28gdGhhdCdzIGEgcGx1cy5cbiogICBJIGRvbid0IHNlZSBhbnl0aGluZyB0aGF0IHdvdWxkIHN1Z2dlc3Qgd2UncmUgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeS5cbiogICBBbmQsIG1vc3QgaW1wb3J0YW50bHksIHRoZXJlJ3Mgbm8gY29uZGl0aW9uYWwgbG9naWMgdGhhdCBkZXBlbmRzIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLlxuXG5TbywgaXQncyBzZWVtaW5nIGxpa2UgdGhpcyBpcyBwdXJlbHkgYSBjaGFuZ2UgZm9yIHBlci1DUFUgc3RhdHMgc3luY2hyb25pemF0aW9uIGFuZCBwcmVlbXB0aW9uIHNhZmV0eS4gSXQncyBsb29raW5nIGdvb2QgZnJvbSBhbiB1bmluaXRpYWxpemVkIG1lbW9yeS9pbmZvLWxlYWsgcGVyc3BlY3RpdmUsIHNvIGBOZWVkc0tNU0FOYCBpcyBkZWZpbml0ZWx5IGBmYWxzZWAuXG5cbk5vdywgbGV0J3Mgc3RlcCBiYWNrIGFuZCBjb25zaWRlciBob3cgdGhpcyByZWxhdGVzIHRvIG91ciB1c3VhbCBkZWJ1Z2dpbmcgdG9vbHMgbGlrZSBLQVNBTiBhbmQgS01TQU4uIFdpdGggdGhlIGNoYW5nZXMgYmVpbmcgcHJpbWFyaWx5IGFib3V0IHByZWVtcHRpb24sIHBlci1DUFUgYWNjZXNzIHN5bmNocm9uaXphdGlvbiB1c2luZyBgZ2V0X2NwdV9wdHJgIC8gYHB1dF9jcHVfcHRyYCBhbmQgYHU2NF9zdGF0c191cGRhdGVfYmVnaW5gL2BlbmRgLCBhbnkgc3luY2hyb25pemF0aW9uIG9yIGNvbmN1cnJlbmN5IGlzc3VlcyAob3IgcHJlZW1wdGlibGUgY29udGV4dCB2aW9sYXRpb25zKSBhcmUgc29tZXRoaW5nIHRoYXQgYXJlIHdlbGwgaGFuZGxlZCBieSB0aGUgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2VycyAoREVCVUdfUFJFRU1QVCwgbG9ja2RlcCwgZXRjLikuIFRoaXMgaXMgYSBrbm93biBhbmQgd2VsbC11bmRlcnN0b29kIGFyZWEgZm9yIHBvdGVudGlhbCBpc3N1ZXMuIFRoZSBtYWluIGZvY3VzIG9mIEtNU0FOIGlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIGFuZCBsZWFrcyB0byB1c2VyIHNwYWNlLiBTaW5jZSB0aGlzIHBhdGNoIGRvZXNuJ3QgaW52b2x2ZSBhbnkgbWVtb3J5IGFsbG9jYXRpb24sIGNvcHlpbmcsIGZvcm1hdHRpbmcsIG9yIHJlYWRpbmcgb2YgdW5pbml0aWFsaXplZCBkYXRhLCBpdCBpcyBub3Qgc29tZXRoaW5nIHRoYXQgd291bGQgdHJpZ2dlciBhIEtNU0FOIHdhcm5pbmcuXG5cblRoZXJlZm9yZSwgSSdtIGNvbmZpZGVudCBpbiBzZXR0aW5nIHRoZSByZXN1bHRzIGFjY29yZGluZ2x5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MjkyLCJPdXRwdXRUb2tlbnMiOjE4OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAyOjEwOjM3LjA0OTg1MjY1NVoiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgcGVyLUNQVSBuZXR3b3JrIHN0YXRpc3RpY3MgYWNjb3VudGluZyBpbiBkcml2ZXJzL25ldC91c2IvdXNibmV0LmMsIHJlcGxhY2luZyB0aGlzX2NwdV9wdHIoKSBhbmQgaXJxc2F2ZS9pcnFyZXN0b3JlIDY0LWJpdCBzdGF0cyB1cGRhdGUgaGVscGVycyB3aXRoIGdldF9jcHVfcHRyKCksIHU2NF9zdGF0c191cGRhdGVfYmVnaW4vZW5kKCksIGFuZCBwdXRfY3B1X3B0cigpLiBUaGlzIGVuc3VyZXMgcHJlZW1wdGlvbiBpcyBwcm9wZXJseSBkaXNhYmxlZCB3aGlsZSBhY2Nlc3NpbmcgdGhlIHBlci1DUFUgcG9pbnRlci5cXG5cXG5UaGUgY2hhbmdlcyBkbyBub3QgYWxsb2NhdGUgbmV3IGJ1ZmZlcnMsIG1hbmlwdWxhdGUgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGFsdGVyIGJ1ZmZlciBsZW5ndGgvYm91bmRzIGNhbGN1bGF0aW9ucywgb3IgY29weSBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm8tbGVhayByaXNrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIEtNU0FOIGZ1enppbmcuIEFueSBwb3RlbnRpYWwgc3luY2hyb25pemF0aW9uIG9yIHByZWVtcHRpb24gYnVncyB3b3VsZCBiZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dlcnMgKERFQlVHX1BSRUVNUFQsIExPQ0tERVAsIEtBU0FOKS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBwZXItQ1BVIG5ldHdvcmsgc3RhdGlzdGljcyBhY2NvdW50aW5nIGluIGRyaXZlcnMvbmV0L3VzYi91c2JuZXQuYywgcmVwbGFjaW5nIHRoaXNfY3B1X3B0cigpIGFuZCBpcnFzYXZlL2lycXJlc3RvcmUgNjQtYml0IHN0YXRzIHVwZGF0ZSBoZWxwZXJzIHdpdGggZ2V0X2NwdV9wdHIoKSwgdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbi9lbmQoKSwgYW5kIHB1dF9jcHVfcHRyKCkuIFRoaXMgZW5zdXJlcyBwcmVlbXB0aW9uIGlzIHByb3Blcmx5IGRpc2FibGVkIHdoaWxlIGFjY2Vzc2luZyB0aGUgcGVyLUNQVSBwb2ludGVyLlxcblxcblRoZSBjaGFuZ2VzIGRvIG5vdCBhbGxvY2F0ZSBuZXcgYnVmZmVycywgbWFuaXB1bGF0ZSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgYWx0ZXIgYnVmZmVyIGxlbmd0aC9ib3VuZHMgY2FsY3VsYXRpb25zLCBvciBjb3B5IGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mby1sZWFrIHJpc2tzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgS01TQU4gZnV6emluZy4gQW55IHBvdGVudGlhbCBzeW5jaHJvbml6YXRpb24gb3IgcHJlZW1wdGlvbiBidWdzIHdvdWxkIGJlIGNvdmVyZWQgYnkgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2VycyAoREVCVUdfUFJFRU1QVCwgTE9DS0RFUCwgS0FTQU4pLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowkxl8r[1] Phase: Succeeded StartedAt: 2026-09-08 02:10:48 +0000 UTC FinishedAt: 2026-09-08 02:10:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkxl8r[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-08 02:10:48 +0000 UTC FinishedAt: 2026-09-08 02:10:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkxl8r[2] Phase: Succeeded StartedAt: 2026-09-08 02:10:48 +0000 UTC FinishedAt: 2026-09-08 03:51:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkxl8r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS"],"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":["usbnet_skb_return","tx_complete"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS"],"series_id":"d31463ae-eac4-4e26-9fd0-83de4f515992","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-09-08 02:10:48 +0000 UTC FinishedAt: 2026-09-08 03:51:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS"],"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":["usbnet_skb_return","tx_complete"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS"],"series_id":"d31463ae-eac4-4e26-9fd0-83de4f515992","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-workflowkxl8r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS"],"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":["usbnet_skb_return","tx_complete"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS"],"series_id":"d31463ae-eac4-4e26-9fd0-83de4f515992","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-09-08 02:10:48 +0000 UTC FinishedAt: 2026-09-08 02:10:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkxl8r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS"],"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":["usbnet_skb_return","tx_complete"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS"],"series_id":"d31463ae-eac4-4e26-9fd0-83de4f515992","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-09-08 02:10:48 +0000 UTC FinishedAt: 2026-09-08 02:10:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS"],"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-workflowkxl8r/series-workflowkxl8r-convert-artifact-3634345724/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkxl8r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS"],"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":["usbnet_skb_return","tx_complete"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS"],"series_id":"d31463ae-eac4-4e26-9fd0-83de4f515992","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-09-08 02:10:58 +0000 UTC FinishedAt: 2026-09-08 02:28:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkxl8r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS"],"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":["usbnet_skb_return","tx_complete"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS"],"series_id":"d31463ae-eac4-4e26-9fd0-83de4f515992","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-09-08 02:10:58 +0000 UTC FinishedAt: 2026-09-08 02:28:53 +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:*c9128578-0da1-4ff3-9ef2-e256b7d055dd,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-workflowkxl8r/series-workflowkxl8r-convert-artifact-3634345724/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": "ad6cbba8-13eb-45c7-a91e-00dc27b1666e", "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-workflowkxl8r/series-workflowkxl8r-build-action-1531687466/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkxl8r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS"],"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":["usbnet_skb_return","tx_complete"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS"],"series_id":"d31463ae-eac4-4e26-9fd0-83de4f515992","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-09-08 02:10:58 +0000 UTC FinishedAt: 2026-09-08 02:28:43 +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:*c9128578-0da1-4ff3-9ef2-e256b7d055dd,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-workflowkxl8r/series-workflowkxl8r-convert-artifact-3634345724/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": "ad6cbba8-13eb-45c7-a91e-00dc27b1666e", "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-workflowkxl8r/series-workflowkxl8r-build-action-1531687466/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkxl8r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS"],"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":["usbnet_skb_return","tx_complete"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS"],"series_id":"d31463ae-eac4-4e26-9fd0-83de4f515992","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-09-08 02:28:53 +0000 UTC FinishedAt: 2026-09-08 02:28:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkxl8r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS"],"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":["usbnet_skb_return","tx_complete"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS"],"series_id":"d31463ae-eac4-4e26-9fd0-83de4f515992","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-09-08 02:28:53 +0000 UTC FinishedAt: 2026-09-08 02:28:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkxl8r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS"],"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":["usbnet_skb_return","tx_complete"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS"],"series_id":"d31463ae-eac4-4e26-9fd0-83de4f515992","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-09-08 02:28:53 +0000 UTC FinishedAt: 2026-09-08 02:29:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkxl8r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS"],"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":["usbnet_skb_return","tx_complete"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS"],"series_id":"d31463ae-eac4-4e26-9fd0-83de4f515992","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-09-08 02:28:53 +0000 UTC FinishedAt: 2026-09-08 02:29:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS"],"series_id":"d31463ae-eac4-4e26-9fd0-83de4f515992","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-workflowkxl8r/series-workflowkxl8r-convert-artifact-1601212987/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkxl8r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS"],"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":["usbnet_skb_return","tx_complete"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS"],"series_id":"d31463ae-eac4-4e26-9fd0-83de4f515992","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-09-08 02:29:03 +0000 UTC FinishedAt: 2026-09-08 02:30:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkxl8r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS"],"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":["usbnet_skb_return","tx_complete"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS"],"series_id":"d31463ae-eac4-4e26-9fd0-83de4f515992","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-09-08 02:29:03 +0000 UTC FinishedAt: 2026-09-08 02:30:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ad6cbba8-13eb-45c7-a91e-00dc27b1666e,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-workflowkxl8r/series-workflowkxl8r-build-action-1531687466/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-workflowkxl8r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS"],"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":["usbnet_skb_return","tx_complete"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS"],"series_id":"d31463ae-eac4-4e26-9fd0-83de4f515992","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-09-08 02:30:58 +0000 UTC FinishedAt: 2026-09-08 02:30:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkxl8r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS"],"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":["usbnet_skb_return","tx_complete"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS"],"series_id":"d31463ae-eac4-4e26-9fd0-83de4f515992","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-09-08 02:30:58 +0000 UTC FinishedAt: 2026-09-08 02:30:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkxl8r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS"],"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":["usbnet_skb_return","tx_complete"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS"],"series_id":"d31463ae-eac4-4e26-9fd0-83de4f515992","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-09-08 02:30:58 +0000 UTC FinishedAt: 2026-09-08 02:49:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkxl8r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS"],"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":["usbnet_skb_return","tx_complete"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS"],"series_id":"d31463ae-eac4-4e26-9fd0-83de4f515992","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-09-08 02:30:58 +0000 UTC FinishedAt: 2026-09-08 02:49:52 +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:*c9128578-0da1-4ff3-9ef2-e256b7d055dd,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-workflowkxl8r/series-workflowkxl8r-convert-artifact-1601212987/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": "4f4d712a-5534-4e47-b296-0b784f0337cd", "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-workflowkxl8r/series-workflowkxl8r-build-action-914951519/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkxl8r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS"],"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":["usbnet_skb_return","tx_complete"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS"],"series_id":"d31463ae-eac4-4e26-9fd0-83de4f515992","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-09-08 02:30:58 +0000 UTC FinishedAt: 2026-09-08 02:49:42 +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:*c9128578-0da1-4ff3-9ef2-e256b7d055dd,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-workflowkxl8r/series-workflowkxl8r-convert-artifact-1601212987/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": "4f4d712a-5534-4e47-b296-0b784f0337cd", "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-workflowkxl8r/series-workflowkxl8r-build-action-914951519/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkxl8r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS"],"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":["usbnet_skb_return","tx_complete"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS"],"series_id":"d31463ae-eac4-4e26-9fd0-83de4f515992","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-09-08 02:49:52 +0000 UTC FinishedAt: 2026-09-08 02:49:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkxl8r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS"],"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":["usbnet_skb_return","tx_complete"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS"],"series_id":"d31463ae-eac4-4e26-9fd0-83de4f515992","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-09-08 02:49:52 +0000 UTC FinishedAt: 2026-09-08 02:49:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkxl8r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS"],"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":["usbnet_skb_return","tx_complete"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS"],"series_id":"d31463ae-eac4-4e26-9fd0-83de4f515992","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-09-08 02:49:52 +0000 UTC FinishedAt: 2026-09-08 02:51:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkxl8r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS"],"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":["usbnet_skb_return","tx_complete"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS"],"series_id":"d31463ae-eac4-4e26-9fd0-83de4f515992","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-09-08 02:49:52 +0000 UTC FinishedAt: 2026-09-08 02:51:28 +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:*4f4d712a-5534-4e47-b296-0b784f0337cd,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-workflowkxl8r/series-workflowkxl8r-build-action-914951519/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-workflowkxl8r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS"],"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":["usbnet_skb_return","tx_complete"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS"],"series_id":"d31463ae-eac4-4e26-9fd0-83de4f515992","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-09-08 02:51:38 +0000 UTC FinishedAt: 2026-09-08 03:51:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkxl8r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS"],"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":["usbnet_skb_return","tx_complete"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS"],"series_id":"d31463ae-eac4-4e26-9fd0-83de4f515992","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-09-08 02:51:38 +0000 UTC FinishedAt: 2026-09-08 03:51:22 +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":["usbnet_skb_return","tx_complete"],"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:*ad6cbba8-13eb-45c7-a91e-00dc27b1666e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*4f4d712a-5534-4e47-b296-0b784f0337cd,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-workflowkxl8r/series-workflowkxl8r-build-action-1531687466/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-workflowkxl8r/series-workflowkxl8r-build-action-914951519/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowkxl8r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS"],"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":["usbnet_skb_return","tx_complete"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS"],"series_id":"d31463ae-eac4-4e26-9fd0-83de4f515992","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-09-08 02:51:38 +0000 UTC FinishedAt: 2026-09-08 02:51:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkxl8r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS"],"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":["usbnet_skb_return","tx_complete"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS"],"series_id":"d31463ae-eac4-4e26-9fd0-83de4f515992","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-09-08 02:51:38 +0000 UTC FinishedAt: 2026-09-08 02:51:43 +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":["usbnet_skb_return","tx_complete"],"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-workflowkxl8r/series-workflowkxl8r-convert-artifact-2071820852/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkxl8r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS"],"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":["usbnet_skb_return","tx_complete"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS"],"series_id":"d31463ae-eac4-4e26-9fd0-83de4f515992","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-09-08 02:51:38 +0000 UTC FinishedAt: 2026-09-08 02:51:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkxl8r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS"],"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":["usbnet_skb_return","tx_complete"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS"],"series_id":"d31463ae-eac4-4e26-9fd0-83de4f515992","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-09-08 02:51:38 +0000 UTC FinishedAt: 2026-09-08 02:51:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkxl8r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS"],"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":["usbnet_skb_return","tx_complete"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS"],"series_id":"d31463ae-eac4-4e26-9fd0-83de4f515992","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-09-08 02:51:38 +0000 UTC FinishedAt: 2026-09-08 02:51:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkxl8r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS"],"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":["usbnet_skb_return","tx_complete"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS"],"series_id":"d31463ae-eac4-4e26-9fd0-83de4f515992","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-09-08 02:51:48 +0000 UTC FinishedAt: 2026-09-08 03:51:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkxl8r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS"],"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":["usbnet_skb_return","tx_complete"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_USBNET","USB_NET_DRIVERS"],"series_id":"d31463ae-eac4-4e26-9fd0-83de4f515992","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-09-08 02:51:48 +0000 UTC FinishedAt: 2026-09-08 03:51:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ad6cbba8-13eb-45c7-a91e-00dc27b1666e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*4f4d712a-5534-4e47-b296-0b784f0337cd,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-workflowkxl8r/series-workflowkxl8r-build-action-1531687466/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-workflowkxl8r/series-workflowkxl8r-build-action-914951519/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-workflowkxl8r/series-workflowkxl8r-convert-artifact-2071820852/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,}