Name: series-workflow6twnc Phase: Succeeded StartedAt: 2026-09-15 14:11:59 +0000 UTC FinishedAt: 2026-09-15 19:45:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6twnc[0] Phase: Succeeded StartedAt: 2026-09-15 14:11:59 +0000 UTC FinishedAt: 2026-09-15 15:54:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6twnc[0].run-triage Phase: Succeeded StartedAt: 2026-09-15 14:11:59 +0000 UTC FinishedAt: 2026-09-15 15:54:22 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "5ef40d69b38a93bc9951dadb1a15c85c597e1a40", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TLS", "BPF_SYSCALL", "BPF_STREAM_PARSER", "NET_SOCK_MSG" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "5ef40d69b38a93bc9951dadb1a15c85c597e1a40", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TLS", "BPF_SYSCALL", "BPF_STREAM_PARSER", "NET_SOCK_MSG" ], "series_id": "17e7d4a6-a526-4adb-8072-651ee4e5f6ac" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "tls_push_sg", "tls_tx_records", "tls_push_partial_record", "tcp_bpf_push", "tcp_bpf_sendmsg", "tcp_bpf_sendmsg_redir" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "", "base_commit": "5ef40d69b38a93bc9951dadb1a15c85c597e1a40", "base_tree": "bpf-next" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDE1OjAxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NTJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtUTFMmIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7QlBGX1NUUkVBTV9QQVJTRVImIzM0OywKICAgICYjMzQ7TkVUX1NPQ0tfTVNHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGxzX3B1c2hfc2cmIzM0OywKICAgICYjMzQ7dGxzX3R4X3JlY29yZHMmIzM0OywKICAgICYjMzQ7dGxzX3B1c2hfcGFydGlhbF9yZWNvcmQmIzM0OywKICAgICYjMzQ7dGNwX2JwZl9wdXNoJiMzNDssCiAgICAmIzM0O3RjcF9icGZfc2VuZG1zZyYjMzQ7LAogICAgJiMzNDt0Y3BfYnBmX3NlbmRtc2dfcmVkaXImIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZW1vdmVzIHJlZHVuZGFudCBjYWxscyB0byB0Y3BfcmF0ZV9jaGVja19hcHBfbGltaXRlZChzaykgZnJvbSB0Y3BfYnBmX3B1c2goKSBpbiBuZXQvaXB2NC90Y3BfYnBmLmMgYW5kIHRsc19wdXNoX3NnKCkgaW4gbmV0L3Rscy90bHNfbWFpbi5jLiBJbiBib3RoIGNhc2VzLCB0Y3Bfc2VuZG1zZ19sb2NrZWQoKSBpcyBjYWxsZWQgaW1tZWRpYXRlbHkgZm9sbG93aW5nIGFuZCBhbHJlYWR5IGludm9rZXMgdGNwX3JhdGVfY2hlY2tfYXBwX2xpbWl0ZWQoc2spLlxuXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbiwgYnVmZmVyIGxlbmd0aHMsIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBjb3B5aW5nIHRvIHVzZXIgc3BhY2UuIFRoZXJlIGlzIG5vIHJpc2sgb2YgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSwgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZmllbGRzLCBvciBjYXVzaW5nIGluZm9ybWF0aW9uIGxlYWtzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZW1vdmVzIHJlZHVuZGFudCBjYWxscyB0byB0Y3BfcmF0ZV9jaGVja19hcHBfbGltaXRlZCgpIGZyb20gdGNwX2JwZl9wdXNoKCkgaW4gbmV0L2lwdjQvdGNwX2JwZi5jIGFuZCB0bHNfcHVzaF9zZygpIGluIG5ldC90bHMvdGxzX21haW4uYywgYmVjYXVzZSB0Y3Bfc2VuZG1zZ19sb2NrZWQoKSBhbHJlYWR5IGludm9rZXMgdGNwX3JhdGVfY2hlY2tfYXBwX2xpbWl0ZWQoKS4gVGhlIG1vZGlmaWNhdGlvbnMgYWZmZWN0IHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSBwYXRocyBpbiB0aGUgVENQIEJQRiBhbmQgVExTIFVMUCB0cmFuc21pdCBwaXBlbGluZXMuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciB1bmV4cGVjdGVkIHNpZGUgZWZmZWN0cyBvY2N1ciBpbiBUQ1AgcmF0ZSBsaW1pdGluZyBhbmQgdHJhbnNtaXNzaW9uIGxvZ2ljIHdoZW4gc2VuZGluZyBkYXRhIG92ZXIgVExTIG9yIEJQRiByZWRpcmVjdGVkIHNvY2tldHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTU6MDE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBhNWRlZDA4NDRiZTU2OTRiNmIyMDI1MDdhZDY1MTRiODQxM2FjYWIzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgMTUgMTU6MDE6MDkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2JwZi5jIGIvbmV0L2lwdjQvdGNwX2JwZi5jXG5pbmRleCAyZTIzNGQxNTViNWU2Li5kNWZjZjNjZTQ4NjFhIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvdGNwX2JwZi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC90Y3BfYnBmLmNcbkBAIC0xMDgsNyAmIzQzOzEwOCw2IEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9wdXNoKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX21zZyAqbXNnLCB1MzIgYXBwbHlfYnl0ZXMsXG4gXHRcdG9mZiAgPSBzZ2UtXHUwMDNlb2Zmc2V0O1xuIFx0XHRwYWdlID0gc2dfcGFnZShzZ2UpO1xuIFxuLVx0XHR0Y3BfcmF0ZV9jaGVja19hcHBfbGltaXRlZChzayk7XG4gcmV0cnk6XG4gXHRcdG1zZ2hkci5tc2dfZmxhZ3MgPSBmbGFncyB8IE1TR19TUExJQ0VfUEFHRVM7XG4gXHRcdGhhc190eF91bHAgPSB0bHNfc3dfaGFzX2N0eF90eChzayk7XG5kaWZmIC0tZ2l0IGEvbmV0L3Rscy90bHNfbWFpbi5jIGIvbmV0L3Rscy90bHNfbWFpbi5jXG5pbmRleCBmYmIyNzQyODdhYTVmLi44YmRiNzg3MThhOGQ0IDEwMDY0NFxuLS0tIGEvbmV0L3Rscy90bHNfbWFpbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvdGxzL3Rsc19tYWluLmNcbkBAIC0xODUsOCAmIzQzOzE4NSw2IEBAIGludCB0bHNfcHVzaF9zZyhzdHJ1Y3Qgc29jayAqc2ssXG4gXG4gXHRjdHgtXHUwMDNlc3BsaWNpbmdfcGFnZXMgPSB0cnVlO1xuIFx0d2hpbGUgKDEpIHtcbi1cdFx0LyogaXMgc2VuZGluZyBhcHBsaWNhdGlvbi1saW1pdGVkPyAqL1xuLVx0XHR0Y3BfcmF0ZV9jaGVja19hcHBfbGltaXRlZChzayk7XG4gXHRcdHAgPSBzZ19wYWdlKHNnKTtcbiByZXRyeTpcbiBcdFx0YnZlY19zZXRfcGFnZShcdTAwMjZidmVjLCBwLCBzaXplLCBvZmZzZXQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDE1OjAxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjUwbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtUTFMmIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7QlBGX1NUUkVBTV9QQVJTRVImIzM0OywKICAgICYjMzQ7TkVUX1NPQ0tfTVNHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGxzX3B1c2hfc2cmIzM0OywKICAgICYjMzQ7dGxzX3R4X3JlY29yZHMmIzM0OywKICAgICYjMzQ7dGxzX3B1c2hfcGFydGlhbF9yZWNvcmQmIzM0OywKICAgICYjMzQ7dGNwX2JwZl9wdXNoJiMzNDssCiAgICAmIzM0O3RjcF9icGZfc2VuZG1zZyYjMzQ7LAogICAgJiMzNDt0Y3BfYnBmX3NlbmRtc2dfcmVkaXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVtb3ZlcyByZWR1bmRhbnQgY2FsbHMgdG8gdGNwX3JhdGVfY2hlY2tfYXBwX2xpbWl0ZWQoKSBmcm9tIHRjcF9icGZfcHVzaCgpIGluIG5ldC9pcHY0L3RjcF9icGYuYyBhbmQgdGxzX3B1c2hfc2coKSBpbiBuZXQvdGxzL3Rsc19tYWluLmMsIGJlY2F1c2UgdGNwX3NlbmRtc2dfbG9ja2VkKCkgYWxyZWFkeSBpbnZva2VzIHRjcF9yYXRlX2NoZWNrX2FwcF9saW1pdGVkKCkuIFRoZSBtb2RpZmljYXRpb25zIGFmZmVjdCByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgcGF0aHMgaW4gdGhlIFRDUCBCUEYgYW5kIFRMUyBVTFAgdHJhbnNtaXQgcGlwZWxpbmVzLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3IgdW5leHBlY3RlZCBzaWRlIGVmZmVjdHMgb2NjdXIgaW4gVENQIHJhdGUgbGltaXRpbmcgYW5kIHRyYW5zbWlzc2lvbiBsb2dpYyB3aGVuIHNlbmRpbmcgZGF0YSBvdmVyIFRMUyBvciBCUEYgcmVkaXJlY3RlZCBzb2NrZXRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYTVkZWQwODQ0YmU1Njk0YjZiMjAyNTA3YWQ2NTE0Yjg0MTNhY2FiMwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDE1IDE1OjAxOjA5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2JwZi5jIGIvbmV0L2lwdjQvdGNwX2JwZi5jCmluZGV4IDJlMjM0ZDE1NWI1ZTYuLmQ1ZmNmM2NlNDg2MWEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9icGYuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC90Y3BfYnBmLmMKQEAgLTEwOCw3ICYjNDM7MTA4LDYgQEAgc3RhdGljIGludCB0Y3BfYnBmX3B1c2goc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfbXNnICptc2csIHUzMiBhcHBseV9ieXRlcywKIAkJb2ZmICA9IHNnZS0mZ3Q7b2Zmc2V0OwogCQlwYWdlID0gc2dfcGFnZShzZ2UpOwogCi0JCXRjcF9yYXRlX2NoZWNrX2FwcF9saW1pdGVkKHNrKTsKIHJldHJ5OgogCQltc2doZHIubXNnX2ZsYWdzID0gZmxhZ3MgfCBNU0dfU1BMSUNFX1BBR0VTOwogCQloYXNfdHhfdWxwID0gdGxzX3N3X2hhc19jdHhfdHgoc2spOwpkaWZmIC0tZ2l0IGEvbmV0L3Rscy90bHNfbWFpbi5jIGIvbmV0L3Rscy90bHNfbWFpbi5jCmluZGV4IGZiYjI3NDI4N2FhNWYuLjhiZGI3ODcxOGE4ZDQgMTAwNjQ0Ci0tLSBhL25ldC90bHMvdGxzX21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvdGxzL3Rsc19tYWluLmMKQEAgLTE4NSw4ICYjNDM7MTg1LDYgQEAgaW50IHRsc19wdXNoX3NnKHN0cnVjdCBzb2NrICpzaywKIAogCWN0eC0mZ3Q7c3BsaWNpbmdfcGFnZXMgPSB0cnVlOwogCXdoaWxlICgxKSB7Ci0JCS8qIGlzIHNlbmRpbmcgYXBwbGljYXRpb24tbGltaXRlZD8gKi8KLQkJdGNwX3JhdGVfY2hlY2tfYXBwX2xpbWl0ZWQoc2spOwogCQlwID0gc2dfcGFnZShzZyk7CiByZXRyeToKIAkJYnZlY19zZXRfcGFnZSgmYW1wO2J2ZWMsIHAsIHNpemUsIG9mZnNldCk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDE1OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT40OG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDc1CgkJCQkJCQlvdXRwdXQ6IDc1CgkJCQkJCQl0aG91Z2h0czogOTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkgd2VyZSB0aGlua2luZyB0aHJvdWdoIHRoZSBwcm9ibGVtOgoKKipBbmFseXppbmcgdGhlIENvZGUgQ2hhbmdlczogVENQIFJhdGUgTGltaXRpbmcgUmVtb3ZhbCoqCgpPa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBkaWZmLiBJdCBsb29rcyBsaWtlIHdlJiMzOTtyZSByZW1vdmluZyBjYWxscyB0byBgdGNwX3JhdGVfY2hlY2tfYXBwX2xpbWl0ZWQoc2spYC4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBiZWluZyByaXBwZWQgb3V0IG9mIGB0Y3BfYnBmX3B1c2hgIHdpdGhpbiBgbmV0L2lwdjQvdGNwX2JwZi5jYCBhbmQgYWxzbyBmcm9tIGB0bHNfcHVzaF9zZ2AgaW4gYG5ldC90bHMvdGxzX21haW4uY2AuIEhtbSwgaW50ZXJlc3RpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGlzIHdhcyBkb25lLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSB3aWRlciBjb250ZXh0IG9mIHRoaXMgY2hhbmdlLiBMZXQmIzM5O3Mgc2VlIGlmIEkgY2FuIGdldCBzb21lIGNvbnRleHQgdXNpbmcgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgLiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBmdW5jdGlvbmFsaXR5IGlzIGxvc3QsIG9yIHBlcmhhcHMsIGlmIHNvbWUgb3RoZXIgbWVjaGFuaXNtIGlzIGhhbmRsaW5nIGl0IG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxNTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcF9icGYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDk1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgOTU6XHRcdGJvb2wgYXBwbHkgPSBhcHBseV9ieXRlcztcbiAgOTY6XHRcdHN0cnVjdCBzY2F0dGVybGlzdCAqc2dlO1xuICA5NzpcdFx0c3RydWN0IHBhZ2UgKnBhZ2U7XG4gIDk4Olx0XHRpbnQgc2l6ZSwgcmV0ID0gMDtcbiAgOTk6XHRcdHUzMiBvZmY7XG4gMTAwOlx0XG4gMTAxOlx0XHR3aGlsZSAoMSkge1xuIDEwMjpcdFx0XHRzdHJ1Y3QgYmlvX3ZlYyBidmVjO1xuIDEwMzpcdFx0XHRib29sIGhhc190eF91bHA7XG4gMTA0Olx0XG4gMTA1Olx0XHRcdHNnZSA9IHNrX21zZ19lbGVtKG1zZywgbXNnLVx1MDAzZXNnLnN0YXJ0KTtcbiAxMDY6XHRcdFx0c2l6ZSA9IChhcHBseSBcdTAwMjZcdTAwMjYgYXBwbHlfYnl0ZXMgXHUwMDNjIHNnZS1cdTAwM2VsZW5ndGgpID9cbiAxMDc6XHRcdFx0XHRhcHBseV9ieXRlcyA6IHNnZS1cdTAwM2VsZW5ndGg7XG4gMTA4Olx0XHRcdG9mZiAgPSBzZ2UtXHUwMDNlb2Zmc2V0O1xuIDEwOTpcdFx0XHRwYWdlID0gc2dfcGFnZShzZ2UpO1xuIDExMDpcdFxuIDExMTpcdHJldHJ5OlxuIDExMjpcdFx0XHRtc2doZHIubXNnX2ZsYWdzID0gZmxhZ3MgfCBNU0dfU1BMSUNFX1BBR0VTO1xuIDExMzpcdFx0XHRoYXNfdHhfdWxwID0gdGxzX3N3X2hhc19jdHhfdHgoc2spO1xuIDExNDpcdFx0XHRpZiAoaGFzX3R4X3VscClcbiAxMTU6XHRcdFx0XHRtc2doZHIubXNnX2ZsYWdzIHw9IE1TR19TRU5EUEFHRV9OT1BPTElDWTtcbiAxMTY6XHRcbiAxMTc6XHRcdFx0aWYgKHNpemUgXHUwMDNjIHNnZS1cdTAwM2VsZW5ndGggXHUwMDI2XHUwMDI2IG1zZy1cdTAwM2VzZy5zdGFydCAhPSBtc2ctXHUwMDNlc2cuZW5kKVxuIDExODpcdFx0XHRcdG1zZ2hkci5tc2dfZmxhZ3MgfD0gTVNHX01PUkU7XG4gMTE5Olx0XG4gMTIwOlx0XHRcdGJ2ZWNfc2V0X3BhZ2UoXHUwMDI2YnZlYywgcGFnZSwgc2l6ZSwgb2ZmKTtcbiAxMjE6XHRcdFx0aW92X2l0ZXJfYnZlYyhcdTAwMjZtc2doZHIubXNnX2l0ZXIsIElURVJfU09VUkNFLCBcdTAwMjZidmVjLCAxLCBzaXplKTtcbiAxMjI6XHRcdFx0cmV0ID0gdGNwX3NlbmRtc2dfbG9ja2VkKHNrLCBcdTAwMjZtc2doZHIsIHNpemUpO1xuIDEyMzpcdFx0XHRpZiAocmV0IFx1MDAzYz0gMClcbiAxMjQ6XHRcdFx0XHRyZXR1cm4gcmV0O1xuIDEyNTpcdFxuIDEyNjpcdFx0XHRpZiAoYXBwbHkpXG4gMTI3Olx0XHRcdFx0YXBwbHlfYnl0ZXMgLT0gcmV0O1xuIDEyODpcdFx0XHRtc2ctXHUwMDNlc2cuc2l6ZSAtPSByZXQ7XG4gMTI5Olx0XHRcdHNnZS1cdTAwM2VvZmZzZXQgJiM0Mzs9IHJldDtcbiAxMzA6XHRcdFx0c2dlLVx1MDAzZWxlbmd0aCAtPSByZXQ7XG4gMTMxOlx0XHRcdGlmICh1bmNoYXJnZSlcbiAxMzI6XHRcdFx0XHRza19tZW1fdW5jaGFyZ2Uoc2ssIHJldCk7XG4gMTMzOlx0XHRcdGlmIChyZXQgIT0gc2l6ZSkge1xuIDEzNDpcdFx0XHRcdHNpemUgLT0gcmV0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDE1OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3Rscy90bHNfbWFpbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTc1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNzU6XHRcdHN0cnVjdCBtc2doZHIgbXNnID0ge1xuIDE3NjpcdFx0XHQubXNnX2ZsYWdzID0gTVNHX1NQTElDRV9QQUdFUyB8IGZsYWdzLFxuIDE3NzpcdFx0fTtcbiAxNzg6XHRcdGludCByZXQgPSAwO1xuIDE3OTpcdFx0c3RydWN0IHBhZ2UgKnA7XG4gMTgwOlx0XHRzaXplX3Qgc2l6ZTtcbiAxODE6XHRcdGludCBvZmZzZXQgPSBmaXJzdF9vZmZzZXQ7XG4gMTgyOlx0XG4gMTgzOlx0XHRzaXplID0gc2ctXHUwMDNlbGVuZ3RoIC0gb2Zmc2V0O1xuIDE4NDpcdFx0b2Zmc2V0ICYjNDM7PSBzZy1cdTAwM2VvZmZzZXQ7XG4gMTg1Olx0XG4gMTg2Olx0XHRjdHgtXHUwMDNlc3BsaWNpbmdfcGFnZXMgPSB0cnVlO1xuIDE4NzpcdFx0d2hpbGUgKDEpIHtcbiAxODg6XHRcdFx0cCA9IHNnX3BhZ2Uoc2cpO1xuIDE4OTpcdHJldHJ5OlxuIDE5MDpcdFx0XHRidmVjX3NldF9wYWdlKFx1MDAyNmJ2ZWMsIHAsIHNpemUsIG9mZnNldCk7XG4gMTkxOlx0XHRcdGlvdl9pdGVyX2J2ZWMoXHUwMDI2bXNnLm1zZ19pdGVyLCBJVEVSX1NPVVJDRSwgXHUwMDI2YnZlYywgMSwgc2l6ZSk7XG4gMTkyOlx0XG4gMTkzOlx0XHRcdHJldCA9IHRjcF9zZW5kbXNnX2xvY2tlZChzaywgXHUwMDI2bXNnLCBzaXplKTtcbiAxOTQ6XHRcbiAxOTU6XHRcdFx0aWYgKHJldCAhPSBzaXplKSB7XG4gMTk2Olx0XHRcdFx0aWYgKHJldCBcdTAwM2UgMCkge1xuIDE5NzpcdFx0XHRcdFx0b2Zmc2V0ICYjNDM7PSByZXQ7XG4gMTk4Olx0XHRcdFx0XHRzaXplIC09IHJldDtcbiAxOTk6XHRcdFx0XHRcdGdvdG8gcmV0cnk7XG4gMjAwOlx0XHRcdFx0fVxuIDIwMTpcdFxuIDIwMjpcdFx0XHRcdG9mZnNldCAtPSBzZy1cdTAwM2VvZmZzZXQ7XG4gMjAzOlx0XHRcdFx0Y3R4LVx1MDAzZXBhcnRpYWxseV9zZW50X29mZnNldCA9IG9mZnNldDtcbiAyMDQ6XHRcdFx0XHRjdHgtXHUwMDNlcGFydGlhbGx5X3NlbnRfcmVjb3JkID0gKHZvaWQgKilzZztcbiAyMDU6XHRcdFx0XHRjdHgtXHUwMDNlc3BsaWNpbmdfcGFnZXMgPSBmYWxzZTtcbiAyMDY6XHRcdFx0XHRyZXR1cm4gcmV0O1xuIDIwNzpcdFx0XHR9XG4gMjA4Olx0XG4gMjA5Olx0XHRcdHB1dF9wYWdlKHApO1xuIDIxMDpcdFx0XHRza19tZW1fdW5jaGFyZ2Uoc2ssIHNnLVx1MDAzZWxlbmd0aCk7XG4gMjExOlx0XHRcdHNnID0gc2dfbmV4dChzZyk7XG4gMjEyOlx0XHRcdGlmICghc2cpXG4gMjEzOlx0XHRcdFx0YnJlYWs7XG4gMjE0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTU6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDU5NwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcmVtb3ZhbCBvZiBgdGNwX3JhdGVfY2hlY2tfYXBwX2xpbWl0ZWQoc2spYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhhdCBkZWNpc2lvbiwgcGFydGljdWxhcmx5IHNpbmNlIGl0IHdhcyBsaWtlbHkgcGFydCBvZiBjb25nZXN0aW9uIGNvbnRyb2wgb3IgZmxvdyByZWd1bGF0aW9uLiBNeSBmaXJzdCBzdGVwIGlzIHRvIHRyYWNlIHdoZXJlIGl0IHdhcyB1c2VkLCBwZXJoYXBzIGluIHJlbGF0ZWQgdmVyc2lvbnMgb2YgdGhlIGtlcm5lbC4KCk5leHQsIEkmIzM5O2xsIG5lZWQgdG8gc2NydXRpbml6ZSB0aGUgYHRjcF9zZW5kbXNnX2xvY2tlZGAgZnVuY3Rpb24uIEkgd2FudCB0byBzZWUgcHJlY2lzZWx5IGhvdyBpdCBoYW5kbGVzIHRoZSBzZW5kaW5nIHByb2Nlc3Mgbm93LCBpbiB0aGUgYWJzZW5jZSBvZiBgdGNwX3JhdGVfY2hlY2tfYXBwX2xpbWl0ZWRgLiBJcyB0aGUgZnVuY3Rpb25hbGl0eSBiZWluZyBoYW5kbGVkIGVsc2V3aGVyZT8gSGFzIHRoZSByYXRlIGxpbWl0aW5nIGxvZ2ljIGJlZW4gc2hpZnRlZCwgb3IgY29tcGxldGVseSBlbGltaW5hdGVkPyBJIG5lZWQgdG8gYW5hbHl6ZSBpdHMgY3VycmVudCBpbXBsZW1lbnRhdGlvbiB0byBncmFzcCB0aGUgb3ZlcmFsbCBpbXBhY3Qgb24gdGhlIFRDUCBzdGFjay4gVW5kZXJzdGFuZGluZyB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBgdGNwX3NlbmRtc2dfbG9ja2VkYCBhbmQgYW55IG90aGVyIHBvdGVudGlhbCByZXBsYWNlbWVudCBtZWNoYW5pc21zIGlzIGtleS4gVGhpcyBpcyBhIGNydWNpYWwgYXJlYSBhbmQgSSBuZWVkIHRvIGJlIGRpbGlnZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDE1OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjcF9yYXRlX2NoZWNrX2FwcF9saW1pdGVkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcC5jPTEwNTE9aW50IHRjcF9zZW5kbXNnX2Zhc3RvcGVuKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBpbnQgKmNvcGllZCxcbi0tXG5uZXQvaXB2NC90Y3AuYy0xMDk4LS8qIElmIGEgZ2FwIGlzIGRldGVjdGVkIGJldHdlZW4gc2VuZHMsIG1hcmsgdGhlIHNvY2tldCBhcHBsaWNhdGlvbi1saW1pdGVkLiAqL1xubmV0L2lwdjQvdGNwLmM6MTA5OTp2b2lkIHRjcF9yYXRlX2NoZWNrX2FwcF9saW1pdGVkKHN0cnVjdCBzb2NrICpzaylcbm5ldC9pcHY0L3RjcC5jLTExMDAte1xuLS1cbm5ldC9pcHY0L3RjcC5jLTExMTMtfVxubmV0L2lwdjQvdGNwLmM6MTExNDpFWFBPUlRfU1lNQk9MX0dQTCh0Y3BfcmF0ZV9jaGVja19hcHBfbGltaXRlZCk7XG5uZXQvaXB2NC90Y3AuYy0xMTE1LVxubmV0L2lwdjQvdGNwLmM9MTExNj1pbnQgdGNwX3NlbmRtc2dfbG9ja2VkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcbi0tXG5uZXQvaXB2NC90Y3AuYy0xMTg5LVxubmV0L2lwdjQvdGNwLmM6MTE5MDpcdHRjcF9yYXRlX2NoZWNrX2FwcF9saW1pdGVkKHNrKTsgIC8qIGlzIHNlbmRpbmcgYXBwbGljYXRpb24tbGltaXRlZD8gKi9cbm5ldC9pcHY0L3RjcC5jLTExOTEtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTU6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTE2MgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDcwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBteXNlbGY6CgoqKkludmVzdGlnYXRpbmcgVENQIFJhdGUgTGltaXRpbmcqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBUQ1AgcmF0ZSBsaW1pdGluZyBpc3N1ZS4gVGhlIGNvcmUgb2YgaXQgc2VlbXMgdG8gYmUgaW4gdGhlIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgIGZ1bmN0aW9uLiBMZXQgbWUgc2VlLi4uIHllcywgbGluZSAxMTkwIGluIGBuZXQvaXB2NC90Y3AuY2AgaXMgdGhlIGNydWNpYWwgc3BvdC4gQW5kLCBnb29kLCBJIHNlZSB0aGF0IGB0Y3Bfc2VuZG1zZ19sb2NrZWRgICphbHJlYWR5KiBjYWxscyBgdGNwX3JhdGVfY2hlY2tfYXBwX2xpbWl0ZWQoc2spYC4gVGhhdCYjMzk7cyBhIGtleSBwaWVjZSBvZiBpbmZvcm1hdGlvbi4KCk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQgYSBiaXQgYmV0dGVyLiBJJiMzOTtsbCBuZWVkIHRvIGdvIGJhY2sgYW5kIGdldCBhIHdpZGVyIHZpZXcgYW5kIHNlZSB3aGF0IGlzIGdvaW5nIG9uIGF0IHRoZSBlbnRyeSB0byB0aGUgZnVuY3Rpb24uIExldCBtZSBzY2FuIHRoZSBjb2RlIGFyb3VuZCBsaW5lcyAxMTgwIHRvIDEyMDAgaW4gYG5ldC9pcHY0L3RjcC5jYC4gR2V0dGluZyB0aGUgd2lkZXIgY29kZSBwaWN0dXJlIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIGhvdyB0aGlzIHJhdGUgY2hlY2sgZml0cyBpbnRvIHRoZSBvdmVyYWxsIHNlbmQgcGF0aCBhbmQgd2hldGhlciBhbnl0aGluZyYjMzk7cyBtaXNjb25maWd1cmVkIGFyb3VuZCB0aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDE1OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzExODA6XHRcdCAgICAhdHAtXHUwMDNlcmVwYWlyKSB7XG4xMTgxOlx0XHRcdGVyciA9IHRjcF9zZW5kbXNnX2Zhc3RvcGVuKHNrLCBtc2csIFx1MDAyNmNvcGllZF9zeW4sIHNpemUsIHVhcmcpO1xuMTE4MjpcdFx0XHRpZiAoZXJyID09IC1FSU5QUk9HUkVTUyBcdTAwMjZcdTAwMjYgY29waWVkX3N5biBcdTAwM2UgMClcbjExODM6XHRcdFx0XHRnb3RvIG91dDtcbjExODQ6XHRcdFx0ZWxzZSBpZiAoZXJyKVxuMTE4NTpcdFx0XHRcdGdvdG8gb3V0X2VycjtcbjExODY6XHRcdH1cbjExODc6XHRcbjExODg6XHRcdHRpbWVvID0gc29ja19zbmR0aW1lbyhzaywgZmxhZ3MgXHUwMDI2IE1TR19ET05UV0FJVCk7XG4xMTg5Olx0XG4xMTkwOlx0XHR0Y3BfcmF0ZV9jaGVja19hcHBfbGltaXRlZChzayk7ICAvKiBpcyBzZW5kaW5nIGFwcGxpY2F0aW9uLWxpbWl0ZWQ/ICovXG4xMTkxOlx0XG4xMTkyOlx0XHQvKiBXYWl0IGZvciBhIGNvbm5lY3Rpb24gdG8gZmluaXNoLiBPbmUgZXhjZXB0aW9uIGlzIFRDUCBGYXN0IE9wZW5cbjExOTM6XHRcdCAqIChwYXNzaXZlIHNpZGUpIHdoZXJlIGRhdGEgaXMgYWxsb3dlZCB0byBiZSBzZW50IGJlZm9yZSBhIGNvbm5lY3Rpb25cbjExOTQ6XHRcdCAqIGlzIGZ1bGx5IGVzdGFibGlzaGVkLlxuMTE5NTpcdFx0ICovXG4xMTk2Olx0XHRpZiAoKCgxIFx1MDAzY1x1MDAzYyBzay1cdTAwM2Vza19zdGF0ZSkgXHUwMDI2IH4oVENQRl9FU1RBQkxJU0hFRCB8IFRDUEZfQ0xPU0VfV0FJVCkpIFx1MDAyNlx1MDAyNlxuMTE5NzpcdFx0ICAgICF0Y3BfcGFzc2l2ZV9mYXN0b3BlbihzaykpIHtcbjExOTg6XHRcdFx0ZXJyID0gc2tfc3RyZWFtX3dhaXRfY29ubmVjdChzaywgXHUwMDI2dGltZW8pO1xuMTE5OTpcdFx0XHRpZiAoZXJyICE9IDApXG4xMjAwOlx0XHRcdFx0Z290byBkb19lcnJvcjtcbjEyMDE6XHRcdH1cbjEyMDI6XHRcbjEyMDM6XHRcdGlmICh1bmxpa2VseSh0cC1cdTAwM2VyZXBhaXIpKSB7XG4xMjA0Olx0XHRcdGlmICh0cC1cdTAwM2VyZXBhaXJfcXVldWUgPT0gVENQX1JFQ1ZfUVVFVUUpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTU6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTkxMQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDU2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBUaGlzIENvZGUgQ2hhbmdlKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCByZWFsaXplZCBzb21ldGhpbmcga2V5OiB0aGUgY2FsbHMgdG8gYHRjcF9yYXRlX2NoZWNrX2FwcF9saW1pdGVkKHNrKWAgYmVmb3JlIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgIGluIGB0Y3BfYnBmX3B1c2hgIGFuZCBgdGxzX3B1c2hfc2dgIHdlcmUgcmVkdW5kYW50ISBUaGF0IGZ1bmN0aW9uIGlzIGFscmVhZHkgYmVpbmcgY2FsbGVkIHdpdGhpbiBgdGNwX3NlbmRtc2dfbG9ja2VkYC4gR29vZCBjYXRjaCwgdGhhdCYjMzk7cyBkZWZpbml0ZWx5IGEgY2xlYW51cC4KCk5vdywgbGV0JiMzOTtzIHB1dCBvbiB0aGUgZnV6emluZyBoYXQuIEkgaGF2ZSB0byBiZSB0aG9yb3VnaCwgZXNwZWNpYWxseSB3aGVuIGl0IGNvbWVzIHRvIHJlZmFjdG9yaW5ncyBhbmQgbmV0d29ya2luZyBjb2RlLiBJIG5lZWQgdG8gdHJlYXQgY2xhaW1zIG9mICYjMzQ7bm8gZnVuY3Rpb25hbCBjaGFuZ2UmIzM0OyB3aXRoIHNlcmlvdXMgc2tlcHRpY2lzbS4gVGhlIGd1aWRlbGluZXMgYXJlIHByZXR0eSBjbGVhciBvbiB0aGlzOiBhbnkgcmVzdHJ1Y3R1cmluZywgZXZlbiBzZWVtaW5nbHkgbWlub3IsIHdhcnJhbnRzIGEgY2xvc2VyIGxvb2suCgpBY2NvcmRpbmcgdG8gdGhvc2UgZ3VpZGVsaW5lcywgU2VjdGlvbiAxIG1ha2VzIGl0IGV4cGxpY2l0IHRoYXQgSSBzaG91bGRuJiMzOTt0IHRha2UgdGhvc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUsIHJlZmFjdG9yaW5ncyBhbmQgY2xlYW51cHMgY2FuIGludHJvZHVjZSBzdWJ0bGUgaXNzdWVzLgoKU2VjdGlvbiAyIHByb3ZpZGVzIG5lZ2F0aXZlIGNyaXRlcmlhLCBidXQgbm9uZSBhcHBseS4gSXQgc2F5cyBJIGNhbiBpZ25vcmUgY2hhbmdlcyB0aGF0IGFyZSBub24tZXhlY3V0YWJsZSwgZG9jdW1lbnRhdGlvbiwgdXNlciBzcGFjZSwgYW5kIHNvIG9uLCBidXQgdGhpcyBkb2VzbiYjMzk7dCBmaXQgdGhhdCBkZXNjcmlwdGlvbi4KClNlY3Rpb24gMyBsYXlzIG91dCB0aGUgcG9zaXRpdmUgY3JpdGVyaWEsIGFuZCB0aGF0JiMzOTtzIHdoZXJlIHRoaXMgbGFuZHMuIFRoZSBtb2RpZmllZCBjb2RlIGlzIGluIGBuZXQvaXB2NC90Y3BfYnBmLmNgIGFuZCBgbmV0L3Rscy90bHNfbWFpbi5jYCDigJMgY29yZSBuZXR3b3JraW5nIHN1YnN5c3RlbXMuIFRoaXMgdG91Y2hlcyAqcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSosIHdoaWNoIG1lYW5zIHRoZSBwYXRjaCBmYWxscyB1bmRlciB0aGUgdW1icmVsbGEgb2YgJiMzNDthbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuJiMzNDsgVGhhdCBtZWFucyBJJiMzOTt2ZSBnb3QgYSByZXNwb25zaWJpbGl0eSB0byBzYXkgYFdvcnRoRnV6emluZz10cnVlYC4KCk5vdyBJIG5lZWQgdG8gZ2F0aGVyIHNvbWUgbW9yZSBpbmZvLiBJIHNob3VsZCBjaGVjayB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zLCB0aGUgS2NvbmZpZyBvcHRpb25zLCBhbmQgbG9vayBhdCB0aGUgTWFrZWZpbGUuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgS2NvbmZpZyBvcHRpb25zIGdvdmVybiBgbmV0L2lwdjQvdGNwX2JwZi5jYCBhbmQgYG5ldC90bHMvdGxzX21haW4uY2AuIExldCYjMzk7cyBjaGVjayBgbmV0L2lwdjQvTWFrZWZpbGVgIGFuZCB0aGVuIGxvb2sgYXQgYG5ldC90bHMvS2NvbmZpZ2AgYW5kIGBuZXQvdGxzL01ha2VmaWxlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTU6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGNwX2JwZiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9NYWtlZmlsZT02Mj1vYmotJChDT05GSUdfVENQX0NPTkdfSUxMSU5PSVMpICYjNDM7PSB0Y3BfaWxsaW5vaXMub1xubmV0L2lwdjQvTWFrZWZpbGU6NjM6b2JqLSQoQ09ORklHX05FVF9TT0NLX01TRykgJiM0Mzs9IHRjcF9icGYub1xubmV0L2lwdjQvTWFrZWZpbGUtNjQtb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gdWRwX2JwZi5vXG4tLVxubmV0L2lwdjQvdGNwLmM9NDQ4MT1pbnQgZG9fdGNwX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsXG4tLVxubmV0L2lwdjQvdGNwLmMtNDg1NS1cbm5ldC9pcHY0L3RjcC5jOjQ4NTY6Ym9vbCB0Y3BfYnBmX2J5cGFzc19nZXRzb2Nrb3B0KGludCBsZXZlbCwgaW50IG9wdG5hbWUpXG5uZXQvaXB2NC90Y3AuYy00ODU3LXtcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmM9MzM9c3RhdGljIGludCBicGZfdGNwX2luZ3Jlc3Moc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLFxuLS1cbm5ldC9pcHY0L3RjcF9icGYuYy05MC1cbm5ldC9pcHY0L3RjcF9icGYuYzo5MTpzdGF0aWMgaW50IHRjcF9icGZfcHVzaChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19tc2cgKm1zZywgdTMyIGFwcGx5X2J5dGVzLFxubmV0L2lwdjQvdGNwX2JwZi5jLTkyLVx0XHRcdGludCBmbGFncywgYm9vbCB1bmNoYXJnZSlcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmMtMTUxLVxubmV0L2lwdjQvdGNwX2JwZi5jOjE1MjpzdGF0aWMgaW50IHRjcF9icGZfcHVzaF9sb2NrZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfbXNnICptc2csXG5uZXQvaXB2NC90Y3BfYnBmLmMtMTUzLVx0XHRcdCAgICAgICB1MzIgYXBwbHlfYnl0ZXMsIGludCBmbGFncywgYm9vbCB1bmNoYXJnZSlcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmMtMTU3LVx0bG9ja19zb2NrKHNrKTtcbm5ldC9pcHY0L3RjcF9icGYuYzoxNTg6XHRyZXQgPSB0Y3BfYnBmX3B1c2goc2ssIG1zZywgYXBwbHlfYnl0ZXMsIGZsYWdzLCB1bmNoYXJnZSk7XG5uZXQvaXB2NC90Y3BfYnBmLmMtMTU5LVx0cmVsZWFzZV9zb2NrKHNrKTtcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmMtMTYyLVxubmV0L2lwdjQvdGNwX2JwZi5jOjE2MzppbnQgdGNwX2JwZl9zZW5kbXNnX3JlZGlyKHN0cnVjdCBzb2NrICpzaywgYm9vbCBpbmdyZXNzLFxubmV0L2lwdjQvdGNwX2JwZi5jLTE2NC1cdFx0XHQgIHN0cnVjdCBza19tc2cgKm1zZywgdTMyIGJ5dGVzLCBpbnQgZmxhZ3MpXG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jLTE3Mi1cdHJldCA9IGluZ3Jlc3MgPyBicGZfdGNwX2luZ3Jlc3Moc2ssIHBzb2NrLCBtc2csIGJ5dGVzKSA6XG5uZXQvaXB2NC90Y3BfYnBmLmM6MTczOlx0XHRcdHRjcF9icGZfcHVzaF9sb2NrZWQoc2ssIG1zZywgYnl0ZXMsIGZsYWdzLCBmYWxzZSk7XG5uZXQvaXB2NC90Y3BfYnBmLmMtMTc0LVx0c2tfcHNvY2tfcHV0KHNrLCBwc29jayk7XG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jLTE3Ni19XG5uZXQvaXB2NC90Y3BfYnBmLmM6MTc3OkVYUE9SVF9TWU1CT0xfR1BMKHRjcF9icGZfc2VuZG1zZ19yZWRpcik7XG5uZXQvaXB2NC90Y3BfYnBmLmMtMTc4LVxuLS1cbm5ldC9pcHY0L3RjcF9icGYuYz0yMDI9c3RhdGljIGJvb2wgaXNfbmV4dF9tc2dfZmluKHN0cnVjdCBza19wc29jayAqcHNvY2spXG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jLTIxOS1cbm5ldC9pcHY0L3RjcF9icGYuYzoyMjA6c3RhdGljIGludCB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyKHN0cnVjdCBzb2NrICpzayxcbm5ldC9pcHY0L3RjcF9icGYuYy0yMjEtXHRcdFx0XHQgIHN0cnVjdCBtc2doZHIgKm1zZyxcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmMtMzMzLVxubmV0L2lwdjQvdGNwX2JwZi5jOjMzNDpzdGF0aWMgaW50IHRjcF9icGZfaW9jdGwoc3RydWN0IHNvY2sgKnNrLCBpbnQgY21kLCBpbnQgKmthcmcpXG5uZXQvaXB2NC90Y3BfYnBmLmMtMzM1LXtcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmMtMzY2LVxubmV0L2lwdjQvdGNwX2JwZi5jOjM2NzpzdGF0aWMgaW50IHRjcF9icGZfcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcbm5ldC9pcHY0L3RjcF9icGYuYy0zNjgtXHRcdFx0ICAgaW50IGZsYWdzKVxuLS1cbm5ldC9pcHY0L3RjcF9icGYuYy00MTYtXG5uZXQvaXB2NC90Y3BfYnBmLmM6NDE3OnN0YXRpYyBpbnQgdGNwX2JwZl9zZW5kX3ZlcmRpY3Qoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLFxubmV0L2lwdjQvdGNwX2JwZi5jLTQxOC1cdFx0XHRcdHN0cnVjdCBza19tc2cgKm1zZywgaW50ICpjb3BpZWQsIGludCBmbGFncylcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmMtNDYwLVx0Y2FzZSBfX1NLX1BBU1M6XG5uZXQvaXB2NC90Y3BfYnBmLmM6NDYxOlx0XHRyZXQgPSB0Y3BfYnBmX3B1c2goc2ssIG1zZywgdG9zZW5kLCBmbGFncywgdHJ1ZSk7XG5uZXQvaXB2NC90Y3BfYnBmLmMtNDYyLVx0XHRpZiAodW5saWtlbHkocmV0KSkge1xuLS1cbm5ldC9pcHY0L3RjcF9icGYuYy00ODUtXHRcdG9yaWdzaXplID0gbXNnLVx1MDAzZXNnLnNpemU7XG5uZXQvaXB2NC90Y3BfYnBmLmM6NDg2Olx0XHRyZXQgPSB0Y3BfYnBmX3NlbmRtc2dfcmVkaXIoc2tfcmVkaXIsIHJlZGlyX2luZ3Jlc3MsXG5uZXQvaXB2NC90Y3BfYnBmLmMtNDg3LVx0XHRcdFx0XHQgICAgbXNnLCB0b3NlbmQsIGZsYWdzKTtcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmMtNTMyLVxubmV0L2lwdjQvdGNwX2JwZi5jOjUzMzpzdGF0aWMgaW50IHRjcF9icGZfc2VuZG1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXG5uZXQvaXB2NC90Y3BfYnBmLmMtNTM0LXtcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmMtNTk4LVxubmV0L2lwdjQvdGNwX2JwZi5jOjU5OTpcdFx0ZXJyID0gdGNwX2JwZl9zZW5kX3ZlcmRpY3Qoc2ssIHBzb2NrLCBtc2dfdHgsIFx1MDAyNmNvcGllZCwgZmxhZ3MpO1xubmV0L2lwdjQvdGNwX2JwZi5jLTYwMC1cdFx0aWYgKHVubGlrZWx5KGVyciBcdTAwM2MgMCkpXG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jPTYzNj1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKHRjcHY2X3Byb3RfbG9jayk7XG5uZXQvaXB2NC90Y3BfYnBmLmM6NjM3OnN0YXRpYyBzdHJ1Y3QgcHJvdG8gdGNwX2JwZl9wcm90c1tUQ1BfQlBGX05VTV9QUk9UU11bVENQX0JQRl9OVU1fQ0ZHU107XG5uZXQvaXB2NC90Y3BfYnBmLmMtNjM4LVxubmV0L2lwdjQvdGNwX2JwZi5jOjYzOTpzdGF0aWMgdm9pZCB0Y3BfYnBmX3JlYnVpbGRfcHJvdG9zKHN0cnVjdCBwcm90byBwcm90W1RDUF9CUEZfTlVNX0NGR1NdLFxubmV0L2lwdjQvdGNwX2JwZi5jLTY0MC1cdFx0XHRcdCAgIHN0cnVjdCBwcm90byAqYmFzZSlcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmMtNjQ0LVx0cHJvdFtUQ1BfQlBGX0JBU0VdLmNsb3NlXHRcdD0gc29ja19tYXBfY2xvc2U7XG5uZXQvaXB2NC90Y3BfYnBmLmM6NjQ1Olx0cHJvdFtUQ1BfQlBGX0JBU0VdLnJlY3Ztc2dcdFx0PSB0Y3BfYnBmX3JlY3Ztc2c7XG5uZXQvaXB2NC90Y3BfYnBmLmMtNjQ2LVx0cHJvdFtUQ1BfQlBGX0JBU0VdLnNvY2tfaXNfcmVhZGFibGVcdD0gc2tfbXNnX2lzX3JlYWRhYmxlO1xubmV0L2lwdjQvdGNwX2JwZi5jOjY0NzpcdHByb3RbVENQX0JQRl9CQVNFXS5pb2N0bFx0XHQ9IHRjcF9icGZfaW9jdGw7XG5uZXQvaXB2NC90Y3BfYnBmLmMtNjQ4LVxubmV0L2lwdjQvdGNwX2JwZi5jLTY0OS1cdHByb3RbVENQX0JQRl9UWF1cdFx0XHQ9IHByb3RbVENQX0JQRl9CQVNFXTtcbm5ldC9pcHY0L3RjcF9icGYuYzo2NTA6XHRwcm90W1RDUF9CUEZfVFhdLnNlbmRtc2dcdFx0PSB0Y3BfYnBmX3NlbmRtc2c7XG5uZXQvaXB2NC90Y3BfYnBmLmMtNjUxLVxubmV0L2lwdjQvdGNwX2JwZi5jLTY1Mi1cdHByb3RbVENQX0JQRl9SWF1cdFx0XHQ9IHByb3RbVENQX0JQRl9CQVNFXTtcbm5ldC9pcHY0L3RjcF9icGYuYzo2NTM6XHRwcm90W1RDUF9CUEZfUlhdLnJlY3Ztc2dcdFx0PSB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyO1xubmV0L2lwdjQvdGNwX2JwZi5jLTY1NC1cbm5ldC9pcHY0L3RjcF9icGYuYy02NTUtXHRwcm90W1RDUF9CUEZfVFhSWF1cdFx0XHQ9IHByb3RbVENQX0JQRl9UWF07XG5uZXQvaXB2NC90Y3BfYnBmLmM6NjU2Olx0cHJvdFtUQ1BfQlBGX1RYUlhdLnJlY3Ztc2dcdFx0PSB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyO1xubmV0L2lwdjQvdGNwX2JwZi5jLTY1Ny19XG5uZXQvaXB2NC90Y3BfYnBmLmMtNjU4LVxubmV0L2lwdjQvdGNwX2JwZi5jOjY1OTpzdGF0aWMgdm9pZCB0Y3BfYnBmX2NoZWNrX3Y2X25lZWRzX3JlYnVpbGQoc3RydWN0IHByb3RvICpvcHMpXG5uZXQvaXB2NC90Y3BfYnBmLmMtNjYwLXtcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmMtNjYzLVx0XHRpZiAobGlrZWx5KG9wcyAhPSB0Y3B2Nl9wcm90X3NhdmVkKSkge1xubmV0L2lwdjQvdGNwX2JwZi5jOjY2NDpcdFx0XHR0Y3BfYnBmX3JlYnVpbGRfcHJvdG9zKHRjcF9icGZfcHJvdHNbVENQX0JQRl9JUFY2XSwgb3BzKTtcbm5ldC9pcHY0L3RjcF9icGYuYy02NjUtXHRcdFx0c21wX3N0b3JlX3JlbGVhc2UoXHUwMDI2dGNwdjZfcHJvdF9zYXZlZCwgb3BzKTtcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmMtNjcwLVxubmV0L2lwdjQvdGNwX2JwZi5jOjY3MTpzdGF0aWMgaW50IF9faW5pdCB0Y3BfYnBmX3Y0X2J1aWxkX3Byb3RvKHZvaWQpXG5uZXQvaXB2NC90Y3BfYnBmLmMtNjcyLXtcbm5ldC9pcHY0L3RjcF9icGYuYzo2NzM6XHR0Y3BfYnBmX3JlYnVpbGRfcHJvdG9zKHRjcF9icGZfcHJvdHNbVENQX0JQRl9JUFY0XSwgXHUwMDI2dGNwX3Byb3QpO1xubmV0L2lwdjQvdGNwX2JwZi5jLTY3NC1cdHJldHVybiAwO1xubmV0L2lwdjQvdGNwX2JwZi5jLTY3NS19XG5uZXQvaXB2NC90Y3BfYnBmLmM6Njc2OmxhdGVfaW5pdGNhbGwodGNwX2JwZl92NF9idWlsZF9wcm90byk7XG5uZXQvaXB2NC90Y3BfYnBmLmMtNjc3LVxubmV0L2lwdjQvdGNwX2JwZi5jOjY3ODpzdGF0aWMgaW50IHRjcF9icGZfYXNzZXJ0X3Byb3RvX29wcyhzdHJ1Y3QgcHJvdG8gKm9wcylcbm5ldC9pcHY0L3RjcF9icGYuYy02Nzkte1xuLS1cbm5ldC9pcHY0L3RjcF9icGYuYy02ODgtI2lmIElTX0VOQUJMRUQoQ09ORklHX0JQRl9TVFJFQU1fUEFSU0VSKVxubmV0L2lwdjQvdGNwX2JwZi5jOjY4OTppbnQgdGNwX2JwZl9zdHJwX3JlYWRfc29jayhzdHJ1Y3Qgc3RycGFyc2VyICpzdHJwLCByZWFkX2Rlc2NyaXB0b3JfdCAqZGVzYyxcbm5ldC9pcHY0L3RjcF9icGYuYy02OTAtXHRcdFx0ICAgc2tfcmVhZF9hY3Rvcl90IHJlY3ZfYWN0b3IpXG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jLTcxMi1cdCAqIEZvciBTS19SRURJUkVDVCwgd2UgbmVlZCB0byBhY2sgdGhlIGZyYW1lIGltbWVkaWF0ZWx5IGJ1dCBmb3Jcbm5ldC9pcHY0L3RjcF9icGYuYzo3MTM6XHQgKiBTS19QQVNTLCB3ZSB3YW50IHRvIGRlbGF5IHRoZSBhY2sgdW50aWwgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcigpLlxubmV0L2lwdjQvdGNwX2JwZi5jLTcxNC1cdCAqL1xuLS1cbm5ldC9pcHY0L3RjcF9icGYuYy03MjMtXG5uZXQvaXB2NC90Y3BfYnBmLmM6NzI0OmludCB0Y3BfYnBmX3VwZGF0ZV9wcm90byhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2ssIGJvb2wgcmVzdG9yZSlcbm5ldC9pcHY0L3RjcF9icGYuYy03MjUte1xuLS1cbm5ldC9pcHY0L3RjcF9icGYuYy03NTAtXHRpZiAoc2stXHUwMDNlc2tfZmFtaWx5ID09IEFGX0lORVQ2KSB7XG5uZXQvaXB2NC90Y3BfYnBmLmM6NzUxOlx0XHRpZiAodGNwX2JwZl9hc3NlcnRfcHJvdG9fb3BzKHBzb2NrLVx1MDAzZXNrX3Byb3RvKSlcbm5ldC9pcHY0L3RjcF9icGYuYy03NTItXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG5uZXQvaXB2NC90Y3BfYnBmLmMtNzUzLVxubmV0L2lwdjQvdGNwX2JwZi5jOjc1NDpcdFx0dGNwX2JwZl9jaGVja192Nl9uZWVkc19yZWJ1aWxkKHBzb2NrLVx1MDAzZXNrX3Byb3RvKTtcbm5ldC9pcHY0L3RjcF9icGYuYy03NTUtXHR9XG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jLTc1Ny1cdC8qIFBhaXJzIHdpdGggbG9ja2xlc3MgcmVhZCBpbiBza19jbG9uZV9sb2NrKCkgKi9cbm5ldC9pcHY0L3RjcF9icGYuYzo3NTg6XHRzb2NrX3JlcGxhY2VfcHJvdG8oc2ssIFx1MDAyNnRjcF9icGZfcHJvdHNbZmFtaWx5XVtjb25maWddKTtcbm5ldC9pcHY0L3RjcF9icGYuYy03NTktXHRyZXR1cm4gMDtcbm5ldC9pcHY0L3RjcF9icGYuYy03NjAtfVxubmV0L2lwdjQvdGNwX2JwZi5jOjc2MTpFWFBPUlRfU1lNQk9MX0dQTCh0Y3BfYnBmX3VwZGF0ZV9wcm90byk7XG5uZXQvaXB2NC90Y3BfYnBmLmMtNzYyLVxubmV0L2lwdjQvdGNwX2JwZi5jOjc2MzovKiBJZiBhIGNoaWxkIGdvdCBjbG9uZWQgZnJvbSBhIGxpc3RlbmluZyBzb2NrZXQgdGhhdCBoYWQgdGNwX2JwZlxubmV0L2lwdjQvdGNwX2JwZi5jLTc2NC0gKiBwcm90b2NvbCBjYWxsYmFja3MgaW5zdGFsbGVkLCB3ZSBuZWVkIHRvIHJlc3RvcmUgdGhlIGNhbGxiYWNrcyB0b1xubmV0L2lwdjQvdGNwX2JwZi5jLTc2NS0gKiB0aGUgZGVmYXVsdCBvbmVzIGJlY2F1c2UgdGhlIGNoaWxkIGRvZXMgbm90IGluaGVyaXQgdGhlIHBzb2NrIHN0YXRlXG5uZXQvaXB2NC90Y3BfYnBmLmM6NzY2OiAqIHRoYXQgdGNwX2JwZiBjYWxsYmFja3MgZXhwZWN0LlxubmV0L2lwdjQvdGNwX2JwZi5jLTc2Ny0gKi9cbm5ldC9pcHY0L3RjcF9icGYuYzo3Njg6dm9pZCB0Y3BfYnBmX2Nsb25lKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKm5ld3NrKVxubmV0L2lwdjQvdGNwX2JwZi5jLTc2OS17XG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jLTc3MS1cbm5ldC9pcHY0L3RjcF9icGYuYzo3NzI6XHRpZiAoaXNfaW5zaWRldmFyKHByb3QsIHRjcF9icGZfcHJvdHMpKVxubmV0L2lwdjQvdGNwX2JwZi5jLTc3My1cdFx0bmV3c2stXHUwMDNlc2tfcHJvdCA9IHNrLVx1MDAzZXNrX3Byb3RfY3JlYXRvcjtcbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz0xMDcwPXN0YXRpYyB2b2lkIHRjcF9ydHRfZXN0aW1hdG9yKHN0cnVjdCBzb2NrICpzaywgbG9uZyBtcnR0X3VzKVxuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTExMjItXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzoxMTIzOlx0XHRcdHRjcF9icGZfcnR0KHNrLCBtcnR0X3VzLCBzcnR0KTtcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTExMjQtXHRcdH1cbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy0xMTMyLVxubmV0L2lwdjQvdGNwX2lucHV0LmM6MTEzMzpcdFx0dGNwX2JwZl9ydHQoc2ssIG1ydHRfdXMsIHNydHQpO1xubmV0L2lwdjQvdGNwX2lucHV0LmMtMTEzNC1cdH1cbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz03NDU0PXN0YXRpYyB2b2lkIHRjcF9lY25fY3JlYXRlX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTc0ODQtXHQgICAgKGVjbl9va19kc3QgXHUwMDI2IERTVF9GRUFUVVJFX0VDTl9DQSkgfHxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjc0ODU6XHQgICAgdGNwX2JwZl9jYV9uZWVkc19lY24oKHN0cnVjdCBzb2NrICopcmVxKSlcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTc0ODYtXHRcdGluZXRfcnNrKHJlcSktXHUwMDNlZWNuX29rID0gMTtcbi0tXG5uZXQvaXB2NC90Y3BfaXB2NC5jPTExNjI9c3RhdGljIGludCB0Y3BfdjRfc2VuZF9zeW5hY2soY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsXG4tLVxubmV0L2lwdjQvdGNwX2lwdjQuYy0xMTkxLVx0XHRpZiAoIUlORVRfRUNOX2lzX2NhcGFibGUodG9zKSBcdTAwMjZcdTAwMjZcbm5ldC9pcHY0L3RjcF9pcHY0LmM6MTE5MjpcdFx0ICAgIHRjcF9icGZfY2FfbmVlZHNfZWNuKChzdHJ1Y3Qgc29jayAqKXJlcSkpXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTExOTMtXHRcdFx0dG9zIHw9IElORVRfRUNOX0VDVF8wO1xuLS1cbm5ldC9pcHY0L3RjcF9pcHY0LmM9MzM0OD1zdHJ1Y3QgcHJvdG8gdGNwX3Byb3QgPSB7XG4tLVxubmV0L2lwdjQvdGNwX2lwdjQuYy0zMzYxLVx0LmdldHNvY2tvcHRcdFx0PSB0Y3BfZ2V0c29ja29wdCxcbm5ldC9pcHY0L3RjcF9pcHY0LmM6MzM2MjpcdC5icGZfYnlwYXNzX2dldHNvY2tvcHRcdD0gdGNwX2JwZl9ieXBhc3NfZ2V0c29ja29wdCxcbm5ldC9pcHY0L3RjcF9pcHY0LmMtMzM2My1cdC5rZWVwYWxpdmVcdFx0PSB0Y3Bfc2V0X2tlZXBhbGl2ZSxcbi0tXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTMzNzMtI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxubmV0L2lwdjQvdGNwX2lwdjQuYzozMzc0Olx0LnBzb2NrX3VwZGF0ZV9za19wcm90XHQ9IHRjcF9icGZfdXBkYXRlX3Byb3RvLFxubmV0L2lwdjQvdGNwX2lwdjQuYy0zMzc1LSNlbmRpZlxuLS1cbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYz01NDY9c3RydWN0IHNvY2sgKnRjcF9jcmVhdGVfb3BlbnJlcV9jaGlsZChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jLTY2My1cdG5ld3RwLVx1MDAzZWJwZl9jaGdfY2NfaW5wcm9ncmVzcyA9IDA7XG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmM6NjY0Olx0dGNwX2JwZl9jbG9uZShzaywgbmV3c2spO1xubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jLTY2NS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTU6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEyNDMKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipDaGVja2luZyBOZXQvVExTIE1ha2VmaWxlIGFuZCBLY29uZmlnKioKCk9rYXksIHNvIHdlIG5lZWQgdG8gY2lyY2xlIGJhY2sgYW5kIGdpdmUgdGhlIGBuZXQvdGxzL2AgZGlyZWN0b3J5IGFub3RoZXIgb25jZS1vdmVyLCBzcGVjaWZpY2FsbHkgdGhlIGBNYWtlZmlsZWAgYW5kIGBLY29uZmlnYCBmaWxlcy4gSSYjMzk7bSB0aGlua2luZyB3ZSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBUTFMtcmVsYXRlZCBidWlsZCBwcm9jZXNzIGlzIGNvbnNpc3RlbnQgYW5kIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgcmVncmVzc2lvbnMgb3IgYnVpbGQgYnJlYWtzLiBUaGlzIGxpa2VseSBtZWFucyB2ZXJpZnlpbmcgdGhlIGRlcGVuZGVuY2llcywgY29tcGlsZSBmbGFncywgYW5kIGFueSBjb25kaXRpb25hbCBidWlsZCBsb2dpYyBiYXNlZCBvbiBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zLiBXZSB3YW50IHRvIGJlIGNlcnRhaW4gdGhhdCB0aGVzZSBmaWxlcyBhcmUgdXAtdG8tZGF0ZSBhbmQgY29ycmVjdGx5IHJlZmxlY3QgdGhlIGRlc2lyZWQgYmVoYXZpb3Igd2l0aCB0aGUgbGF0ZXN0IGNoYW5nZXMgbWFkZSB1cHN0cmVhbS4gTm8gc3VycHJpc2VzIGluIHRoZSBidWlsZCBwcm9jZXNzLCB0aGF0JiMzOTtzIHRoZSBnb2FsLiBMZXQmIzM5O3MgbWFrZSBzdXJlIHRoYXQgYW55IGZlYXR1cmUgZmxhZ3MgYXJlIGNvcnJlY3RseSBzZXQsIHRoYXQgdGhleSBpbnRlZ3JhdGUgcHJvcGVybHksIGFuZCB0aGF0IG91ciBjdXN0b20gZGVmaW5pdGlvbnMgYXJlIGNvcnJlY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDE1OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Rsc19wdXNoX3NnJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3Rscy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3Rscy90bHMuaD0yNjI9dGxzX2RldmljZV9kZWNyeXB0ZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgdGxzX2NvbnRleHQgKnRsc19jdHgpXG4tLVxubmV0L3Rscy90bHMuaC0yNjctXG5uZXQvdGxzL3Rscy5oOjI2ODppbnQgdGxzX3B1c2hfc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgdGxzX2NvbnRleHQgKmN0eCxcbm5ldC90bHMvdGxzLmgtMjY5LVx0XHRzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCB1MTYgZmlyc3Rfb2Zmc2V0LFxuLS1cbm5ldC90bHMvdGxzX2RldmljZS5jPTI3OT1zdGF0aWMgaW50IHRsc19wdXNoX3JlY29yZChzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L3Rscy90bHNfZGV2aWNlLmMtMzA5LVx0LyogYWxsIHJlYWR5LCBzZW5kICovXG5uZXQvdGxzL3Rsc19kZXZpY2UuYzozMTA6XHRyZXR1cm4gdGxzX3B1c2hfc2coc2ssIGN0eCwgb2ZmbG9hZF9jdHgtXHUwMDNlc2dfdHhfZGF0YSwgMCwgZmxhZ3MpO1xubmV0L3Rscy90bHNfZGV2aWNlLmMtMzExLX1cbi0tXG5uZXQvdGxzL3Rsc19tYWluLmM9MTM5PWludCB3YWl0X29uX3BlbmRpbmdfd3JpdGVyKHN0cnVjdCBzb2NrICpzaywgbG9uZyAqdGltZW8pXG4tLVxubmV0L3Rscy90bHNfbWFpbi5jLTE2Ny1cbm5ldC90bHMvdGxzX21haW4uYzoxNjg6aW50IHRsc19wdXNoX3NnKHN0cnVjdCBzb2NrICpzayxcbm5ldC90bHMvdGxzX21haW4uYy0xNjktXHRcdHN0cnVjdCB0bHNfY29udGV4dCAqY3R4LFxuLS1cbm5ldC90bHMvdGxzX21haW4uYz0yNjY9aW50IHRsc19wdXNoX3BhcnRpYWxfcmVjb3JkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHRsc19jb250ZXh0ICpjdHgsXG4tLVxubmV0L3Rscy90bHNfbWFpbi5jLTI3NS1cdGN0eC1cdTAwM2VwYXJ0aWFsbHlfc2VudF9yZWNvcmQgPSBOVUxMO1xubmV0L3Rscy90bHNfbWFpbi5jOjI3NjpcdHJldHVybiB0bHNfcHVzaF9zZyhzaywgY3R4LCBzZywgb2Zmc2V0LCBmbGFncyk7XG5uZXQvdGxzL3Rsc19tYWluLmMtMjc3LX1cbi0tXG5uZXQvdGxzL3Rsc19zdy5jPTQwOD1pbnQgdGxzX3R4X3JlY29yZHMoc3RydWN0IHNvY2sgKnNrLCBpbnQgZmxhZ3MpXG4tLVxubmV0L3Rscy90bHNfc3cuYy00NDUtXHRcdFx0bXNnX2VuID0gXHUwMDI2cmVjLVx1MDAzZW1zZ19lbmNyeXB0ZWQ7XG5uZXQvdGxzL3Rsc19zdy5jOjQ0NjpcdFx0XHRyYyA9IHRsc19wdXNoX3NnKHNrLCB0bHNfY3R4LFxubmV0L3Rscy90bHNfc3cuYy00NDctXHRcdFx0XHRcdCBcdTAwMjZtc2dfZW4tXHUwMDNlc2cuZGF0YVttc2dfZW4tXHUwMDNlc2cuY3Vycl0sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDE1OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMDM4CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyBOZXR3b3JrIFNvY2tldCBNZXNzYWdpbmcgYW5kIFRMUyBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGBDT05GSUdfTkVUX1NPQ0tfTVNHYCBhbmQgYENPTkZJR19UTFNgLiBUaG9zZSB0d28gYXJlIGtleSBwbGF5ZXJzLCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlaXIgZGVmaW5pdGlvbnMgd2l0aGluIHRoZSBLY29uZmlnIHN5c3RlbS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nLCAmIzM0O0xldCYjMzk7cyBmaWd1cmUgb3V0IHdoYXQgKnByZWNpc2VseSogS2NvbmZpZyBkaWN0YXRlcyBmb3IgYENPTkZJR19ORVRfU09DS19NU0dgIGFuZCBgQ09ORklHX1RMU2AuJiMzNDsgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZGVmaW5lZCwgdGhlaXIgZGVwZW5kZW5jaWVzLCBhbmQgYW55IGltcGxpY2F0aW9ucyB0aGV5IG1pZ2h0IGhhdmUgb24gdGhlIGJyb2FkZXIgc3lzdGVtLiBJJiMzOTttIGdvaW5nIHRvIGNvbnN1bHQgdGhlIEtjb25maWcgZmlsZXMgZGlyZWN0bHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDE1OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRfU09DS19NU0cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9LY29uZmlnPTQ3NT1jb25maWcgTkVUX1NFTEZURVNUU1xuLS1cbm5ldC9LY29uZmlnLTQ3OC1cbm5ldC9LY29uZmlnOjQ3OTpjb25maWcgTkVUX1NPQ0tfTVNHXG5uZXQvS2NvbmZpZy00ODAtXHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDE1OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMzI2CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkluaXRpYWwgQXNzZXNzbWVudDogRGVjaXBoZXJpbmcgdGhlIE5FVF9TT0NLX01TRyBTZWxlY3RvcioqCgpBbHJpZ2h0LCBzbyB0aGUgZmlyc3QgdGhpbmcgSSYjMzk7bSBkb2luZyBpcyBtZW50YWxseSB0cmFjaW5nIHRoZSBjb2RlIHBhdGhzIHRoYXQgYXJlIGdvaW5nIHRvIHBpY2sgdGhlIGBORVRfU09DS19NU0dgIHNlbGVjdG9yLiBXaGF0IGNvbnRleHQgYXJlIHdlIGluPyBJcyBpdCBhIGtlcm5lbCBtb2R1bGU/IFVzZXItc3BhY2UgYXBwbGljYXRpb24/IFRoZSBpbXBsaWNhdGlvbnMgYXJlIHZhc3RseSBkaWZmZXJlbnQuIEkmIzM5O20gaW1tZWRpYXRlbHkgcnVubmluZyB0aHJvdWdoIHRoZSBsaWtlbHkgc2NlbmFyaW9zIGluIG15IGhlYWQ6IG5ldHdvcmsgc3RhY2sgaW50ZXJhY3Rpb25zLCBzb2NrZXQgaW1wbGVtZW50YXRpb25zLCBtZXNzYWdlIHF1ZXVpbmcsIGFuZCBzbyBvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgdGhpcyBzZWxlY3Rpb24gaXMgKmhhcHBlbmluZyogYmVmb3JlIEkgY2FuIGV2ZW4gYmVnaW4gdG8gdW5kZXJzdGFuZCAqd2h5Ki4gVGhpcyBzZWxlY3Rpb24gbWVjaGFuaXNtIOKAkyB3aGV0aGVyIGl0JiMzOTtzIGFuIGV2ZW50IGxvb3AsIGludGVycnVwdCBoYW5kbGVyLCBvciBzb21lIG90aGVyIHBvbGxpbmcgc3RyYXRlZ3kg4oCTIGlzIGtleS4gSSYjMzk7bSBhbHJlYWR5IGVudmlzaW9uaW5nIHRoZSBwb3NzaWJsZSBib3R0bGVuZWNrcyBhbmQgcmFjZSBjb25kaXRpb25zIHRoYXQgY291bGQgYXJpc2UgZGVwZW5kaW5nIG9uIHRoZSBjaG9zZW4gY29udGV4dC4gSXMgdGhpcyBhIG5ldyBwaWVjZSBvZiBjb2RlLCBvciBhbSBJIGRlYnVnZ2luZyBhbiBleGlzdGluZyBzeXN0ZW0/IFRoZSBpbXBsaWNhdGlvbnMgY2hhbmdlIHRoZSBhcHByb2FjaCBJJiMzOTtsbCB0YWtlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxNTo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZWxlY3QgTkVUX1NPQ0tfTVNHJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvS2NvbmZpZz0zNjE9Y29uZmlnIEJQRl9TVFJFQU1fUEFSU0VSXG4tLVxubmV0L0tjb25maWctMzY2LVx0c2VsZWN0IFNUUkVBTV9QQVJTRVJcbm5ldC9LY29uZmlnOjM2NzpcdHNlbGVjdCBORVRfU09DS19NU0dcbm5ldC9LY29uZmlnLTM2OC1cdGhlbHBcbi0tXG5uZXQvaXB2NC9LY29uZmlnPTM4Mj1jb25maWcgSU5FVF9FU1BJTlRDUFxuLS1cbm5ldC9pcHY0L0tjb25maWctMzg1LVx0c2VsZWN0IFNUUkVBTV9QQVJTRVJcbm5ldC9pcHY0L0tjb25maWc6Mzg2Olx0c2VsZWN0IE5FVF9TT0NLX01TR1xubmV0L2lwdjQvS2NvbmZpZy0zODctXHRzZWxlY3QgWEZSTV9FU1BJTlRDUFxuLS1cbm5ldC9pcHY2L0tjb25maWc9OTA9Y29uZmlnIElORVQ2X0VTUElOVENQXG4tLVxubmV0L2lwdjYvS2NvbmZpZy05My1cdHNlbGVjdCBTVFJFQU1fUEFSU0VSXG5uZXQvaXB2Ni9LY29uZmlnOjk0Olx0c2VsZWN0IE5FVF9TT0NLX01TR1xubmV0L2lwdjYvS2NvbmZpZy05NS1cdHNlbGVjdCBYRlJNX0VTUElOVENQXG4tLVxubmV0L3Rscy9LY29uZmlnPTU9Y29uZmlnIFRMU1xuLS1cbm5ldC90bHMvS2NvbmZpZy0xMC1cdHNlbGVjdCBDUllQVE9fR0NNXG5uZXQvdGxzL0tjb25maWc6MTE6XHRzZWxlY3QgTkVUX1NPQ0tfTVNHXG5uZXQvdGxzL0tjb25maWctMTItXHRkZWZhdWx0IG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTU6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI4OTMKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyBhIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jeSoqCgpIbW0sIHNvIGBDT05GSUdfVExTYCBhbmQgYENPTkZJR19CUEZfU1RSRUFNX1BBUlNFUmAgYXJlIGJvdGggcHVsbGluZyBpbiBgTkVUX1NPQ0tfTVNHYC4gVGhhdOKAmXMgYSBiaXQgdW51c3VhbDsgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IHRoZXNlIHNlZW1pbmdseSBkaXNwYXJhdGUgZmVhdHVyZXMgcmVxdWlyZSB0aGUgc2FtZSB1bmRlcmx5aW5nIG1lY2hhbmlzbS4gSXQgbWVhbnMgdGhhdCB0aGVyZSYjMzk7cyBzb21lIGNvbW1vbiBncm91bmQgb3IgZGVwZW5kZW5jeSB0aGF0IEkgbmVlZCB0byBjbGFyaWZ5LiBJIHNob3VsZCBwcm9iYWJseSBkaXZlIGludG8gYG5ldC90bHMvS2NvbmZpZ2AgZmlyc3QuIFRoYXTigJlzIGxpa2VseSB0aGUgb3JpZ2luIG9mIHRoZSBkZXBlbmRlbmN5LCBhbmQgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IG15IGludmVzdGlnYXRpb24uIFBlcmhhcHMgaXQgd2lsbCBzaGVkIHNvbWUgbGlnaHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDE1OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3Rscy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgVExTIGNvbmZpZ3VyYXRpb25cbiAgIDQ6XHQjXG4gICA1Olx0Y29uZmlnIFRMU1xuICAgNjpcdFx0dHJpc3RhdGUgXCYjMzQ7VHJhbnNwb3J0IExheWVyIFNlY3VyaXR5IHN1cHBvcnRcJiMzNDtcbiAgIDc6XHRcdGRlcGVuZHMgb24gSU5FVFxuICAgODpcdFx0c2VsZWN0IENSWVBUT1xuICAgOTpcdFx0c2VsZWN0IENSWVBUT19BRVNcbiAgMTA6XHRcdHNlbGVjdCBDUllQVE9fR0NNXG4gIDExOlx0XHRzZWxlY3QgTkVUX1NPQ0tfTVNHXG4gIDEyOlx0XHRkZWZhdWx0IG5cbiAgMTM6XHRcdGhlbHBcbiAgMTQ6XHRcdEVuYWJsZSBrZXJuZWwgc3VwcG9ydCBmb3IgVExTIHByb3RvY29sLiBUaGlzIGFsbG93cyBzeW1tZXRyaWNcbiAgMTU6XHRcdGVuY3J5cHRpb24gaGFuZGxpbmcgb2YgdGhlIFRMUyBwcm90b2NvbCB0byBiZSBkb25lIGluLWtlcm5lbC5cbiAgMTY6XHRcbiAgMTc6XHRcdElmIHVuc3VyZSwgc2F5IE4uXG4gIDE4Olx0XG4gIDE5Olx0Y29uZmlnIFRMU19ERVZJQ0VcbiAgMjA6XHRcdGJvb2wgXCYjMzQ7VHJhbnNwb3J0IExheWVyIFNlY3VyaXR5IEhXIG9mZmxvYWRcJiMzNDtcbiAgMjE6XHRcdGRlcGVuZHMgb24gVExTXG4gIDIyOlx0XHRzZWxlY3QgU0tCX0RFQ1JZUFRFRFxuICAyMzpcdFx0c2VsZWN0IFNPQ0tfVkFMSURBVEVfWE1JVFxuICAyNDpcdFx0c2VsZWN0IFNPQ0tfUlhfUVVFVUVfTUFQUElOR1xuICAyNTpcdFx0ZGVmYXVsdCBuXG4gIDI2Olx0XHRoZWxwXG4gIDI3Olx0XHRFbmFibGUga2VybmVsIHN1cHBvcnQgZm9yIEhXIG9mZmxvYWQgb2YgdGhlIFRMUyBwcm90b2NvbC5cbiAgMjg6XHRcbiAgMjk6XHRcdElmIHVuc3VyZSwgc2F5IE4uXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDE1OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNDM0CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgaXQ6CgoqKkRpZ2dpbmcgaW50byBlQlBGIGFuZCBOZXR3b3JrIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgbmV0d29yay1yZWxhdGVkIGVCUEYgZnVuY3Rpb25hbGl0eS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nLiBJJiMzOTt2ZSBiZWVuIGNvbnNpZGVyaW5nIHRoaXMgZnJvbSB0aGUgcGVyc3BlY3RpdmUgb2YgdGhlIGJyb2FkZXIga2VybmVsIGRlc2lnbiwgYW5kIHNvIEkgd2FudCB0byBtYWtlIHN1cmUgSSYjMzk7bSBmdWxseSBhd2FyZSBvZiBldmVyeSBvcHRpb24uCgpSaWdodCwgc28gdG8gYmUgdGhvcm91Z2gsIEkgc2hvdWxkIGFsc28gc3BlY2lmaWNhbGx5IGNoZWNrIHRoZSBgQlBGX1NUUkVBTV9QQVJTRVJgIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHdpdGhpbiBgbmV0L0tjb25maWdgLiBUaGlzIGlzIHByb2JhYmx5IHdoZXJlIHRoZSByZWFsbHkgZmluZS1ncmFpbmVkLCBzdHJlYW0tYmFzZWQgcGFja2V0IGluc3BlY3Rpb24gYW5kIG1hbmlwdWxhdGlvbiBsaXZlcy4gSSB3YW50IHRvIG1ha2Ugc3VyZSBJIGNvbXBsZXRlbHkgdW5kZXJzdGFuZCBpdHMgY2FwYWJpbGl0aWVzIGFuZCBob3cgaXQgbWlnaHQgZml0IGludG8gdGhlIGxhcmdlciBwaWN0dXJlIG9mIG91ciBlQlBGIHdvcmsuIEl0IG1pZ2h0IGJlIGEga2V5IGNvbXBvbmVudCwgb3IgaXQgbWlnaHQgYmUgdGFuZ2VudGlhbC4gRWl0aGVyIHdheSwgYmVzdCB0byBjb25maXJtLiBJIHNob3VsZCBhZGQgdGhpcyB0byBteSBtZW50YWwgY2hlY2tsaXN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxNTo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzU1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzNTU6XHRcdGJvb2xcbiAzNTY6XHRcdHByb21wdCBcJiMzNDtFbmFibGUgQnl0ZSBRdWV1ZSBMaW1pdHNcJiMzNDtcbiAzNTc6XHRcdGRlcGVuZHMgb24gU1lTRlNcbiAzNTg6XHRcdHNlbGVjdCBEUUxcbiAzNTk6XHRcdGRlZmF1bHQgeVxuIDM2MDpcdFxuIDM2MTpcdGNvbmZpZyBCUEZfU1RSRUFNX1BBUlNFUlxuIDM2MjpcdFx0Ym9vbCBcJiMzNDtlbmFibGUgQlBGIFNUUkVBTV9QQVJTRVJcJiMzNDtcbiAzNjM6XHRcdGRlcGVuZHMgb24gSU5FVFxuIDM2NDpcdFx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTFxuIDM2NTpcdFx0ZGVwZW5kcyBvbiBDR1JPVVBfQlBGXG4gMzY2Olx0XHRzZWxlY3QgU1RSRUFNX1BBUlNFUlxuIDM2NzpcdFx0c2VsZWN0IE5FVF9TT0NLX01TR1xuIDM2ODpcdFx0aGVscFxuIDM2OTpcdFx0ICBFbmFibGluZyB0aGlzIGFsbG93cyBhIFRDUCBzdHJlYW0gcGFyc2VyIHRvIGJlIHVzZWQgd2l0aFxuIDM3MDpcdFx0ICBCUEZfTUFQX1RZUEVfU09DS01BUC5cbiAzNzE6XHRcbiAzNzI6XHRjb25maWcgTkVUX0ZMT1dfTElNSVRcbiAzNzM6XHRcdGJvb2wgXCYjMzQ7TmV0IGZsb3cgbGltaXRcJiMzNDtcbiAzNzQ6XHRcdGRlcGVuZHMgb24gUlBTXG4gMzc1Olx0XHRkZWZhdWx0IHlcbiAzNzY6XHRcdGhlbHBcbiAzNzc6XHRcdCAgVGhlIG5ldHdvcmsgc3RhY2sgaGFzIHRvIGRyb3AgcGFja2V0cyB3aGVuIGEgcmVjZWl2ZSBwcm9jZXNzaW5nIENQVSYjMzk7c1xuIDM3ODpcdFx0ICBiYWNrbG9nIHJlYWNoZXMgbmV0ZGV2X21heF9iYWNrbG9nLiBJZiBhIGZldyBvdXQgb2YgbWFueSBhY3RpdmUgZmxvd3NcbiAzNzk6XHRcdCAgZ2VuZXJhdGUgdGhlIHZhc3QgbWFqb3JpdHkgb2YgbG9hZCwgZHJvcCB0aGVpciB0cmFmZmljIGVhcmxpZXIgdG9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTU6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQwMjUKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAyNzQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIEtlcm5lbCBQYXRjaCBmb3IgRnV6emluZyBQcmlvcml0aXphdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgZmlyc3QgdGhpbmcgSSYjMzk7bSBkb2luZyBpcyBleGFtaW5pbmcgdGhlIEdpdCBoaXN0b3J5IHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhlIHBhdGNoLiBJJiMzOTttIGxvb2tpbmcgZm9yIGNsdWVzIGluIHRoZSBjb21taXQgbWVzc2FnZXMgdG8gc2VlIHRoZSAqd2h5KiBiZWhpbmQgdGhpcyBjb2RlIGNoYW5nZS4gR3JlcHBpbmcgaXNuJiMzOTt0IGltbWVkaWF0ZWx5IHlpZWxkaW5nIGFueXRoaW5nIGRpcmVjdGx5LCBidXQgSSBjYW4gc2VlIHRoZSBwYXRjaCBpdHNlbGYgaXMgbW9kaWZ5aW5nIGBuZXQvaXB2NC90Y3BfYnBmLmNgIGFuZCBgbmV0L3Rscy90bHNfbWFpbi5jYC4KClRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgdGhlIHJlbW92YWwgb2YgcmVkdW5kYW50IGNhbGxzIHRvIGB0Y3BfcmF0ZV9jaGVja19hcHBfbGltaXRlZChzaylgIHdpdGhpbiB0aGUgYHRjcF9icGZfcHVzaGAgYW5kIGB0bHNfcHVzaF9zZ2AgZnVuY3Rpb25zLiBUaGVzZSBmdW5jdGlvbnMgYXJlIGludm9sdmVkIGluIHB1c2hpbmcgZGF0YSwgaW4gQlBGIGFuZCBUTFMgY29udGV4dHMgcmVzcGVjdGl2ZWx5LCBvdmVyIFRDUC4gVGhlIHJlZHVuZGFudCBjaGVjaywgaWYgbm90IHJlbW92ZWQsIGNvdWxkIGhhdmUgYWZmZWN0ZWQgcGVyZm9ybWFuY2UsIGNhdXNpbmcgYW4gdW5uZWNlc3NhcnkgdGhyb3R0bGUuCgpOb3csIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgcmVhY2hhYmlsaXR5LiBBcmUgdGhlc2UgZnVuY3Rpb25zIGV4cG9zZWQgdG8gZnV6emVyPyBZZXMsIGFuZCB0aGF0IGlzIHZlcnkgaW1wb3J0YW50IHRvIGNvbnNpZGVyIHdoZW4gZGVjaWRpbmcgaWYgdGhpcyBpcyB3b3J0aHkgb2YgZnV6emluZy4gSSBjYW4gY29uZmlybSB0aGVzZSBhcmUgZGVmaW5pdGVseSByZWFjaGFibGUgdmlhIHN5emthbGxlciwgY29uc2lkZXJpbmcgc3RhbmRhcmQgc3l6a2FsbGVyIHRhcmdldHMgZm9yIHNvY2tldHMgd2l0aCBUTFMgVUxQLCBhcyB3ZWxsIGFzIEJQRiBzb2NrbWFwL3NrX21zZyBwcm9ncmFtcy4gVGhhdCBtYWtlcyB0aGlzIGEgcHJpbWUgY2FuZGlkYXRlIGZvciBmdXp6aW5nLCBhbmQgaXQmIzM5O3MgYSBnb29kIHBsYWNlIHRvIHN0YXJ0LCBiYXNlZCBvbiBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzeXN0ZW0uCgpOb3csIEkmIzM5O20gY29uc2lkZXJpbmcgZnV6emluZyBwcmlvcml0eS4gVGhpcyBpcyBhIHJlZmFjdG9yaW5nL2NsZWFudXAgd2hlcmUgcmVhY2hhYmxlIGNvZGUgaXMgbW9kaWZpZWQsIHNvIGJ5IG15IGNyaXRlcmlhIGFuZCB0aGUgJiMzNDtXb3J0aEZ1enppbmcmIzM0OyBndWlkZWxpbmVzLCB0aGlzIGlzIGEgZGVmaW5pdGUgJiMzNDt0cnVlJiMzNDsuIFRoZSByZW1vdmFsIG9mIHRoZSBgdGNwX3JhdGVfY2hlY2tfYXBwX2xpbWl0ZWQoKWAgY2FsbHMsIHdoaWxlIHNlZW1pbmdseSBtaW5vciwgY291bGQgcG90ZW50aWFsbHkgYWx0ZXIgdGltaW5nIG9yIGludHJvZHVjZSBzdWJ0bGUgYmVoYXZpb3JhbCBjaGFuZ2VzIHRoYXQgbWlnaHQgdW5jb3ZlciBhIGJ1Zy4KCk5leHQsIEkmIzM5O20gaWRlbnRpZnlpbmcgdGhlIG1vc3QgcmVsZXZhbnQgc3ltYm9scyB0byB0YXJnZXQgd2l0aCB0aGUgZnV6emVyLiBNeSBmb2N1cyBpcyBvbiBlbnRyeSBwb2ludHMgYW5kIHRoZSBmdW5jdGlvbnMgdGhhdCBhcmUgZGlyZWN0bHkgbW9kaWZpZWQuIExldCYjMzk7cyBzZWUuLi4KKiAgIGB0Y3BfYnBmX3B1c2hgOiBBbHRob3VnaCBpdCBpcyBhIHN0YXRpYyBmdW5jdGlvbiwgSSYjMzk7bGwgY2hlY2sgaXRzIGNhbGxlcnMgYW5kIHNlZSBpZiBpdCBjYW4gYmUgdGFyZ2V0ZWQuIElmIG5vdCBpbmxpbmVkLCBpdCBtYXkgaGF2ZSBhIHN5bWJvbCwgYnV0IEkgd2lsbCBzdGlsbCB0YXJnZXQgdGhlIGZ1bmN0aW9ucyB0aGF0IGNhbGwgaXQuCiogICBgdGxzX3B1c2hfc2dgOiBUaGlzIGxvb2tzIGxpa2UgYW4gZXhjZWxsZW50IGNhbmRpZGF0ZSBzaW5jZSBpdCYjMzk7cyBkaXJlY3RseSBtb2RpZmllZCwgbm9uLXN0YXRpYywgYW5kIHBhcnQgb2YgdGhlIG1haW4gY2hhbmdlLgoqICAgYHRjcF9icGZfc2VuZG1zZ2A6IFRoaXMgaXMgYSBub24tc3RhdGljIGNhbGxlciBvZiB0aGUgbW9kaWZpZWQgYHRjcF9icGZfcHVzaGAuCiogICBgdGNwX2JwZl9zZW5kbXNnX3JlZGlyYDogVGhpcyBpcyBhbHNvIGEgbm9uLXN0YXRpYyBjYWxsZXIgb2YgdGhlIG1vZGlmaWVkIGB0Y3BfYnBmX3B1c2hgLgoKQW5kIEkmIzM5O2xsIGFkZCBgdGxzX3R4X3JlY29yZHNgIG9yIGB0bHNfc3dfc2VuZG1zZ2AgdG8gbXkgc3ltYm9sIGxpc3QgYXMgd2VsbC4KCkZpbmFsbHksIEkgbmVlZCB0byBsb29rIGF0IHRoZSByZXF1aXJlZCBrZXJuZWwgY29uZmlndXJhdGlvbnMuIFRvIGNvbXBpbGUgdGhlIGNvZGUsIGBORVRfU09DS19NU0dgIGlzIHJlcXVpcmVkLCB3aGljaCBpcyBlbmFibGVkIGJ5IGBCUEZfU1RSRUFNX1BBUlNFUmAsIGBJTkVUX0VTUElOVENQYCwgYElORVQ2X0VTUElOVENQYCwgYW5kIGBUTFNgLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gdGhlc2UgYXJlIGFjdGl2ZSB0byByZXByb2R1Y2UgdGhlIHRhcmdldCBmdW5jdGlvbmFsaXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxNTo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtORVRfU09DS19NU0cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9LY29uZmlnPTM2MT1jb25maWcgQlBGX1NUUkVBTV9QQVJTRVJcbi0tXG5uZXQvS2NvbmZpZy0zNjYtXHRzZWxlY3QgU1RSRUFNX1BBUlNFUlxubmV0L0tjb25maWc6MzY3Olx0c2VsZWN0IE5FVF9TT0NLX01TR1xubmV0L0tjb25maWctMzY4LVx0aGVscFxuLS1cbm5ldC9LY29uZmlnPTQ3NT1jb25maWcgTkVUX1NFTEZURVNUU1xuLS1cbm5ldC9LY29uZmlnLTQ3OC1cbm5ldC9LY29uZmlnOjQ3OTpjb25maWcgTkVUX1NPQ0tfTVNHXG5uZXQvS2NvbmZpZy00ODAtXHRib29sXG4tLVxubmV0L0tjb25maWctNDgyLVx0aGVscFxubmV0L0tjb25maWc6NDgzOlx0ICBUaGUgTkVUX1NPQ0tfTVNHIHByb3ZpZGVzIGEgZnJhbWV3b3JrIGZvciBwbGFpbiBzb2NrZXRzIChlLmcuIFRDUCkgb3Jcbm5ldC9LY29uZmlnLTQ4NC1cdCAgVUxQcyAodXBwZXIgbGF5ZXIgbW9kdWxlcywgZS5nLiBUTFMpIHRvIHByb2Nlc3MgTDcgYXBwbGljYXRpb24gZGF0YVxuLS1cbm5ldC9jb3JlL01ha2VmaWxlPTQzPW9iai0kKENPTkZJR19GQUlMT1ZFUikgJiM0Mzs9IGZhaWxvdmVyLm9cbm5ldC9jb3JlL01ha2VmaWxlOjQ0Om9iai0kKENPTkZJR19ORVRfU09DS19NU0cpICYjNDM7PSBza21zZy5vXG5uZXQvY29yZS9NYWtlZmlsZS00NS1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBzb2NrX21hcC5vXG4tLVxubmV0L2lwdjQvS2NvbmZpZz0zODI9Y29uZmlnIElORVRfRVNQSU5UQ1Bcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTM4NS1cdHNlbGVjdCBTVFJFQU1fUEFSU0VSXG5uZXQvaXB2NC9LY29uZmlnOjM4NjpcdHNlbGVjdCBORVRfU09DS19NU0dcbm5ldC9pcHY0L0tjb25maWctMzg3LVx0c2VsZWN0IFhGUk1fRVNQSU5UQ1Bcbi0tXG5uZXQvaXB2NC9NYWtlZmlsZT02Mj1vYmotJChDT05GSUdfVENQX0NPTkdfSUxMSU5PSVMpICYjNDM7PSB0Y3BfaWxsaW5vaXMub1xubmV0L2lwdjQvTWFrZWZpbGU6NjM6b2JqLSQoQ09ORklHX05FVF9TT0NLX01TRykgJiM0Mzs9IHRjcF9icGYub1xubmV0L2lwdjQvTWFrZWZpbGUtNjQtb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gdWRwX2JwZi5vXG4tLVxubmV0L2lwdjYvS2NvbmZpZz05MD1jb25maWcgSU5FVDZfRVNQSU5UQ1Bcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTkzLVx0c2VsZWN0IFNUUkVBTV9QQVJTRVJcbm5ldC9pcHY2L0tjb25maWc6OTQ6XHRzZWxlY3QgTkVUX1NPQ0tfTVNHXG5uZXQvaXB2Ni9LY29uZmlnLTk1LVx0c2VsZWN0IFhGUk1fRVNQSU5UQ1Bcbi0tXG5uZXQvdGxzL0tjb25maWc9NT1jb25maWcgVExTXG4tLVxubmV0L3Rscy9LY29uZmlnLTEwLVx0c2VsZWN0IENSWVBUT19HQ01cbm5ldC90bHMvS2NvbmZpZzoxMTpcdHNlbGVjdCBORVRfU09DS19NU0dcbm5ldC90bHMvS2NvbmZpZy0xMi1cdGRlZmF1bHQgblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxNTo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODA4OQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHByb2Nlc3MsIHRoaW5raW5nIGFzIGlmIEkmIzM5O20gbmF2aWdhdGluZyB0aGlzIG15c2VsZjoKCioqRGl2aW5nIGludG8gYG5ldC90bHMvTWFrZWZpbGVgKioKCk9rYXksIHNvIEkgbmVlZCB0byBjaGVjayBvdXQgYG5ldC90bHMvTWFrZWZpbGVgLiBUaGlzIGxpa2VseSBtZWFucyBJJiMzOTttIHdvcmtpbmcgd2l0aCB0aGUgVExTIGltcGxlbWVudGF0aW9uIHdpdGhpbiB0aGlzIG5ldHdvcmsgY29udGV4dC4gSSYjMzk7bSBwcm9iYWJseSBsb29raW5nIGZvciBidWlsZCBpbnN0cnVjdGlvbnMsIGRlcGVuZGVuY2llcywgb3IgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gVExTLiBNeSBpbnR1aXRpb24gdGVsbHMgbWUgdGhhdCB0aGlzIE1ha2VmaWxlIGlzIGEgY2VudHJhbCBwb2ludCBmb3IgbWFuYWdpbmcgdGhlIGNvbXBpbGF0aW9uIGFuZCBsaW5raW5nIG9mIFRMUy1yZWxhdGVkIGNvZGUgd2l0aGluIHRoaXMgcHJvamVjdCwgYXNzdW1pbmcgdGhpcyBpcyBhIHByb2plY3QgZm9sbG93aW5nIGNvbnZlbnRpb25hbCBtYWtlZmlsZSBzdHJ1Y3R1cmVzLiBJJiMzOTtsbCBuZWVkIHRvIHNlZSBob3cgaXQgaW50ZWdyYXRlcyB3aXRoIHRoZSByZXN0IG9mIHRoZSBidWlsZCBzeXN0ZW0uIEFyZSB0aGVyZSBzcGVjaWZpYyBjb21waWxlciBmbGFncyBkZWZpbmVkPyBBcmUgdGhlcmUgYW55IGN1c3RvbSBsaW5raW5nIHN0ZXBzPyBJdOKAmXMgYWxzbyBwb3NzaWJsZSBJIGFtIGRlYnVnZ2luZywgYW5kIHRodXMgbmVlZCB0byBleGFtaW5lIHNwZWNpZmljIHRhcmdldHMgb3IgdmFyaWFibGVzLCBwZXJoYXBzIHJlbGF0ZWQgdG8gZGVidWcgZmxhZ3MuIEkmIzM5O2xsIG5lZWQgdG8gcXVpY2tseSBnZXQgYSBzZW5zZSBvZiB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUgYW5kIGxvZ2ljIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBnb2luZyBvbiBoZXJlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgY2FuIGRpZyB1cC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTU6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvdGxzL01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgTWFrZWZpbGUgZm9yIHRoZSBUTFMgc3Vic3lzdGVtLlxuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRDRkxBR1NfdHJhY2UubyA6PSAtSSQoc3JjKVxuICAgNzpcdFxuICAgODpcdG9iai0kKENPTkZJR19UTFMpICYjNDM7PSB0bHMub1xuICAgOTpcdFxuICAxMDpcdHRscy15IDo9IHRsc19tYWluLm8gdGxzX3N3Lm8gdGxzX3Byb2MubyB0cmFjZS5vIHRsc19zdHJwLm9cbiAgMTE6XHRcbiAgMTI6XHR0bHMtJChDT05GSUdfVExTX0RFVklDRSkgJiM0Mzs9IHRsc19kZXZpY2UubyB0bHNfZGV2aWNlX2ZhbGxiYWNrLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTU6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg1MTIKCQkJCQkJCW91dHB1dDogMjQzCgkJCQkJCQl0aG91Z2h0czogODY3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIEtlcm5lbCBUTFMgYW5kIEJQRiBTb2NrbWFwIEludGVncmF0aW9uIGZvciBGdXp6aW5nKioKCk9rYXksIHNvIGhlcmUmIzM5O3MgdGhlIGJyZWFrZG93biBvZiB3aGF0IEkmIzM5O3ZlIGp1c3QgYmVlbiB3b3JraW5nIHRocm91Z2guIE15IHByaW1hcnkgZ29hbCBoZXJlIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9ucyBhbmQgY29kZSBwYXRocyByZWxldmFudCB0byBUQ1AgQlBGIHNvY2ttYXAgYW5kIEtlcm5lbCBUTFMsIGluIG9yZGVyIHRvIGRldGVybWluZSBhIGdvb2QgZnV6emVyIGNvbmZpZ3VyYXRpb24uCgpGaXJzdCwgYENPTkZJR19UTFNgIGlzIGNyaXRpY2FsLiBJdCBjb21waWxlcyBgdGxzLm9gLCB3aGljaCBpbmNsdWRlcyBgdGxzX21haW4ub2AuIENydWNpYWxseSwgYENPTkZJR19UTFNgIGRlcGVuZHMgb24gYENPTkZJR19JTkVUYCwgd2hpY2ggaXMgZXhwZWN0ZWQuIEFsc28sIGBDT05GSUdfVExTYCBhdXRvbWF0aWNhbGx5IHNlbGVjdHMgYENPTkZJR19ORVRfU09DS19NU0dgLCBhbmQgdGhhdOKAmXMgaW1wb3J0YW50IGJlY2F1c2UgaXQgYnVpbGRzIGB0Y3BfYnBmLm9gLgoKTm93LCBpZiB3ZSB3YW50IHRvIHVzZSBCUEYgc29ja21hcCB3aXRoIFRDUCwgd2UmIzM5O3JlIGdvaW5nIHRvIG5lZWQgYENPTkZJR19CUEZfU1lTQ0FMTGAgYW5kIGBDT05GSUdfQlBGX1NUUkVBTV9QQVJTRVJgLiBgQ09ORklHX0JQRl9TVFJFQU1fUEFSU0VSYCBhbHNvIGltcGxpY2l0bHkgc2VsZWN0cyBgTkVUX1NPQ0tfTVNHYC4KCk15IGltbWVkaWF0ZSBjb25jbHVzaW9uIGlzIHRoYXQgZW5hYmxpbmcgYFRMU2AgYW5kIGBCUEZfU1RSRUFNX1BBUlNFUmAgYWxvbmdzaWRlIGBCUEZfU1lTQ0FMTGAsIGBORVRfU09DS19NU0dgLCBhbmQgYElORVRgIGd1YXJhbnRlZXMgdGhhdCBib3RoIGB0Y3BfYnBmLmNgIGFuZCBgdGxzX21haW4uY2AgYXJlIGNvbXBpbGVkIGFuZCBhdmFpbGFibGUuIEkgbmVlZCB0byBtYWtlIHN1cmUgYENPTkZJR19UTFNgIGNhbiBiZSBzZXQgdG8gZWl0aGVyIGJ1aWx0LWluIG9yIGEgbW9kdWxlIHNpbmNlIFN5emthbGxlciBydW5zIGtlcm5lbHMgd2l0aCBlaXRoZXIgb2YgdGhvc2Ugc2V0dGluZ3MuCgpMZXQmIzM5O3Mgc3VtbWFyaXplIHRoZSBrZXkgY29uZmlndXJhdGlvbnM6Ci0gICBgVExTYDogQnVpbGRzIGBuZXQvdGxzL3Rsc19tYWluLmNgIGFuZCBzZWxlY3RzIGBORVRfU09DS19NU0dgLgotICAgYE5FVF9TT0NLX01TR2A6IEJ1aWxkcyBgbmV0L2lwdjQvdGNwX2JwZi5jYCAoc2VsZWN0ZWQgYnkgYFRMU2AgYW5kIGBCUEZfU1RSRUFNX1BBUlNFUmAgYnV0IGNhbiBhbHNvIGJlIGV4cGxpY2l0bHkgc3BlY2lmaWVkKS4KLSAgIGBCUEZfU1lTQ0FMTGA6IEVzc2VudGlhbCBmb3IgdXRpbGl6aW5nIGB0Y3BfYnBmYCBzb2NrbWFwIGZ1bmN0aW9uYWxpdHkuCi0gICBgQlBGX1NUUkVBTV9QQVJTRVJgOiBFbmFibGVzIHRoZSBCUEYgc3RyZWFtIHBhcnNlciBzb2NrbWFwLgoKSSYjMzk7dmUgYWxzbyBjb25maXJtZWQgdGhhdCBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBlc3NlbnRpYWwgZm9yIGhvb2tpbmcgYHRjcF9icGZfdXBkYXRlX3Byb3RvYCBpbnRvIHRoZSBzb2NrZXQsIHNwZWNpZmljYWxseSB2aWEgYSBjaGVjayBpbiBgdGNwX2JwZi5jYCB0aGF0IHNob3dzIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIHJlcXVpcmVkIGZvciBhdHRhY2hpbmcgdGhlIHBzb2NrIGFuZCB1c2luZyBgdGNwX2JwZmAgZnVuY3Rpb25hbGl0eS4gV2l0aG91dCBpdCwgdGhlIG9wZXJhdGlvbnMgZnJvbSBgdGNwX2JwZmAgYXJlIG5vdCB1c2VkIGJ5IHRoZSBzb2NrbWFwLgoKVG8gcmVjYXAsIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb25zIEkmIzM5O2xsIHdhbnQgdG8gdGFyZ2V0IGFyZToKCiogICBgVExTYAoqICAgYEJQRl9TWVNDQUxMYAoqICAgYEJQRl9TVFJFQU1fUEFSU0VSYAoqICAgYE5FVF9TT0NLX01TR2AKCk15IG5leHQgdGhvdWdodCBwcm9jZXNzIGludm9sdmVzIGNvbnNpZGVyaW5nIHBvdGVudGlhbCBmb2N1cyBzeW1ib2xzLiBJJiMzOTt2ZSBub3RlZCBkb3duIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIHRvIGNvbnNpZGVyIGZvciBtb3JlIGNhcmVmdWwgaW52ZXN0aWdhdGlvbjoKCiogICBgdGNwX2JwZl9wdXNoYAoqICAgYHRjcF9icGZfc2VuZG1zZ2AKKiAgIGB0Y3BfYnBmX3NlbmRtc2dfcmVkaXJgCiogICBgdGxzX3B1c2hfc2dgCiogICBgdGxzX3R4X3JlY29yZHNgCiogICBgdGxzX3B1c2hfcGFydGlhbF9yZWNvcmRgCgpVcG9uIGEgY2FyZWZ1bCByZXZpZXcsIEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IG5vbmUgb2YgdGhlc2UgYXJlIGNvbnNpZGVyZWQgYXMgdWJpcXVpdG91cyBsaWZlY3ljbGUgZnVuY3Rpb25zIGFuZCB0aGV5IGFyZSBhbGwgc3BlY2lmaWMgdG8gVENQIEJQRiBzdHJlYW0gaGFuZGxpbmcgYW5kIHRoZSBLZXJuZWwgVExTIHRyYW5zbWl0IHBhdGguCgpGaW5hbGx5LCBJJiMzOTt2ZSByZXZpZXdlZCB0aGUgcmVhc29uaW5nIGJlaGluZCB0aGUgY2hhbmdlcyB0byBtYWtlIHN1cmUgSSBjbGVhcmx5IHVuZGVyc3RhbmQgdGhlIGludGVudC4gVGhlIHBhdGNoIHJlbW92ZXMgcmVkdW5kYW50IGNhbGxzIHRvIGB0Y3BfcmF0ZV9jaGVja19hcHBfbGltaXRlZCgpYCBmcm9tIGB0Y3BfYnBmX3B1c2hgIGluIGBuZXQvaXB2NC90Y3BfYnBmLmNgIGFuZCBgdGxzX3B1c2hfc2dgIGluIGBuZXQvdGxzL3Rsc19tYWluLmNgLiBgdGNwX3NlbmRtc2dfbG9ja2VkKClgIGlzIGFscmVhZHkgaW50ZXJuYWxseSBwZXJmb3JtaW5nIHRoaXMgcmF0ZSBjaGVjay4gVGhlc2UgY2hhbmdlcyBtb2RpZnkgZXhlY3V0aW9uIHBhdGhzIGluIGNvcmUgVENQIEJQRiBhbmQgVExTIG5ldHdvcmtpbmcsIHdoaWNoIGFyZSBhY2Nlc3NlZCBmcm9tIHVzZXJzcGFjZSB2aWEgVENQIHNvY2tldHMgd2l0aCBUTFMgVUxQIG9yIEJQRiBzb2NrbWFwLiBUaGUgZnV6emluZyBhcHByb2FjaCBpcyBmdWxseSBqdXN0aWZpZWQgdG8gZW5zdXJlIHRoYXQgcmVtb3ZpbmcgdGhlc2UgY2FsbHMgZG9lcyBub3QgYWZmZWN0IHJhdGUgY2hlY2sgc3RhdGUgaGFuZGxpbmcgb3Igc29ja2V0IGJlaGF2aW9yIGR1cmluZyB0cmFuc21pc3Npb24uCgpJJiMzOTttIGNvbmZpZGVudCBpbiBteSBhbmFseXNpcy4gSXQgYWxpZ25zIHdpdGggdGhlIGluc3RydWN0aW9ucywgYW5kIEkmIzM5O20gcmVhZHkgdG8gcHJvY2VlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTU6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RMUyYjMzQ7LAogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtCUEZfU1RSRUFNX1BBUlNFUiYjMzQ7LAogICAgJiMzNDtORVRfU09DS19NU0cmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0bHNfcHVzaF9zZyYjMzQ7LAogICAgJiMzNDt0bHNfdHhfcmVjb3JkcyYjMzQ7LAogICAgJiMzNDt0bHNfcHVzaF9wYXJ0aWFsX3JlY29yZCYjMzQ7LAogICAgJiMzNDt0Y3BfYnBmX3B1c2gmIzM0OywKICAgICYjMzQ7dGNwX2JwZl9zZW5kbXNnJiMzNDssCiAgICAmIzM0O3RjcF9icGZfc2VuZG1zZ19yZWRpciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZW1vdmVzIHJlZHVuZGFudCBjYWxscyB0byB0Y3BfcmF0ZV9jaGVja19hcHBfbGltaXRlZCgpIGZyb20gdGNwX2JwZl9wdXNoKCkgaW4gbmV0L2lwdjQvdGNwX2JwZi5jIGFuZCB0bHNfcHVzaF9zZygpIGluIG5ldC90bHMvdGxzX21haW4uYywgYmVjYXVzZSB0Y3Bfc2VuZG1zZ19sb2NrZWQoKSBhbHJlYWR5IGludm9rZXMgdGNwX3JhdGVfY2hlY2tfYXBwX2xpbWl0ZWQoKS4gVGhlIG1vZGlmaWNhdGlvbnMgYWZmZWN0IHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSBwYXRocyBpbiB0aGUgVENQIEJQRiBhbmQgVExTIFVMUCB0cmFuc21pdCBwaXBlbGluZXMuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciB1bmV4cGVjdGVkIHNpZGUgZWZmZWN0cyBvY2N1ciBpbiBUQ1AgcmF0ZSBsaW1pdGluZyBhbmQgdHJhbnNtaXNzaW9uIGxvZ2ljIHdoZW4gc2VuZGluZyBkYXRhIG92ZXIgVExTIG9yIEJQRiByZWRpcmVjdGVkIHNvY2tldHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RMUyYjMzQ7LAogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtCUEZfU1RSRUFNX1BBUlNFUiYjMzQ7LAogICAgJiMzNDtORVRfU09DS19NU0cmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0bHNfcHVzaF9zZyYjMzQ7LAogICAgJiMzNDt0bHNfdHhfcmVjb3JkcyYjMzQ7LAogICAgJiMzNDt0bHNfcHVzaF9wYXJ0aWFsX3JlY29yZCYjMzQ7LAogICAgJiMzNDt0Y3BfYnBmX3B1c2gmIzM0OywKICAgICYjMzQ7dGNwX2JwZl9zZW5kbXNnJiMzNDssCiAgICAmIzM0O3RjcF9icGZfc2VuZG1zZ19yZWRpciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZW1vdmVzIHJlZHVuZGFudCBjYWxscyB0byB0Y3BfcmF0ZV9jaGVja19hcHBfbGltaXRlZCgpIGZyb20gdGNwX2JwZl9wdXNoKCkgaW4gbmV0L2lwdjQvdGNwX2JwZi5jIGFuZCB0bHNfcHVzaF9zZygpIGluIG5ldC90bHMvdGxzX21haW4uYywgYmVjYXVzZSB0Y3Bfc2VuZG1zZ19sb2NrZWQoKSBhbHJlYWR5IGludm9rZXMgdGNwX3JhdGVfY2hlY2tfYXBwX2xpbWl0ZWQoKS4gVGhlIG1vZGlmaWNhdGlvbnMgYWZmZWN0IHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSBwYXRocyBpbiB0aGUgVENQIEJQRiBhbmQgVExTIFVMUCB0cmFuc21pdCBwaXBlbGluZXMuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciB1bmV4cGVjdGVkIHNpZGUgZWZmZWN0cyBvY2N1ciBpbiBUQ1AgcmF0ZSBsaW1pdGluZyBhbmQgdHJhbnNtaXNzaW9uIGxvZ2ljIHdoZW4gc2VuZGluZyBkYXRhIG92ZXIgVExTIG9yIEJQRiByZWRpcmVjdGVkIHNvY2tldHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDE1OjUxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTU6NTE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZW1vdmVzIHJlZHVuZGFudCBjYWxscyB0byB0Y3BfcmF0ZV9jaGVja19hcHBfbGltaXRlZChzaykgZnJvbSB0Y3BfYnBmX3B1c2goKSBpbiBuZXQvaXB2NC90Y3BfYnBmLmMgYW5kIHRsc19wdXNoX3NnKCkgaW4gbmV0L3Rscy90bHNfbWFpbi5jLiBJbiBib3RoIGNhc2VzLCB0Y3Bfc2VuZG1zZ19sb2NrZWQoKSBpcyBjYWxsZWQgaW1tZWRpYXRlbHkgZm9sbG93aW5nIGFuZCBhbHJlYWR5IGludm9rZXMgdGNwX3JhdGVfY2hlY2tfYXBwX2xpbWl0ZWQoc2spLlxuXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbiwgYnVmZmVyIGxlbmd0aHMsIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBjb3B5aW5nIHRvIHVzZXIgc3BhY2UuIFRoZXJlIGlzIG5vIHJpc2sgb2YgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSwgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZmllbGRzLCBvciBjYXVzaW5nIGluZm9ybWF0aW9uIGxlYWtzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYTVkZWQwODQ0YmU1Njk0YjZiMjAyNTA3YWQ2NTE0Yjg0MTNhY2FiMwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDE1IDE1OjAxOjA5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2JwZi5jIGIvbmV0L2lwdjQvdGNwX2JwZi5jCmluZGV4IDJlMjM0ZDE1NWI1ZTYuLmQ1ZmNmM2NlNDg2MWEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9icGYuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC90Y3BfYnBmLmMKQEAgLTEwOCw3ICYjNDM7MTA4LDYgQEAgc3RhdGljIGludCB0Y3BfYnBmX3B1c2goc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfbXNnICptc2csIHUzMiBhcHBseV9ieXRlcywKIAkJb2ZmICA9IHNnZS0mZ3Q7b2Zmc2V0OwogCQlwYWdlID0gc2dfcGFnZShzZ2UpOwogCi0JCXRjcF9yYXRlX2NoZWNrX2FwcF9saW1pdGVkKHNrKTsKIHJldHJ5OgogCQltc2doZHIubXNnX2ZsYWdzID0gZmxhZ3MgfCBNU0dfU1BMSUNFX1BBR0VTOwogCQloYXNfdHhfdWxwID0gdGxzX3N3X2hhc19jdHhfdHgoc2spOwpkaWZmIC0tZ2l0IGEvbmV0L3Rscy90bHNfbWFpbi5jIGIvbmV0L3Rscy90bHNfbWFpbi5jCmluZGV4IGZiYjI3NDI4N2FhNWYuLjhiZGI3ODcxOGE4ZDQgMTAwNjQ0Ci0tLSBhL25ldC90bHMvdGxzX21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvdGxzL3Rsc19tYWluLmMKQEAgLTE4NSw4ICYjNDM7MTg1LDYgQEAgaW50IHRsc19wdXNoX3NnKHN0cnVjdCBzb2NrICpzaywKIAogCWN0eC0mZ3Q7c3BsaWNpbmdfcGFnZXMgPSB0cnVlOwogCXdoaWxlICgxKSB7Ci0JCS8qIGlzIHNlbmRpbmcgYXBwbGljYXRpb24tbGltaXRlZD8gKi8KLQkJdGNwX3JhdGVfY2hlY2tfYXBwX2xpbWl0ZWQoc2spOwogCQlwID0gc2dfcGFnZShzZyk7CiByZXRyeToKIAkJYnZlY19zZXRfcGFnZSgmYW1wO2J2ZWMsIHAsIHNpemUsIG9mZnNldCk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxNTo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjg3CgkJCQkJCQlvdXRwdXQ6IDEwNgoJCQkJCQkJdGhvdWdodHM6IDUyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoIFNlcmllcyBmb3IgS01TQU4gRnV6emluZyBOZWVkcyoqCgpPa2F5LCBzbyB0aGUgdXNlciB3YW50cyBtZSB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCBzZXJpZXMgbmVjZXNzaXRhdGVzIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvLCBvZiBjb3Vyc2UsIGRpdmUgc3RyYWlnaHQgaW50byB0aGUgZGlmZiBwcm92aWRlZC4gTGV0JiMzOTtzIHNlZS4uLiBpdCBsb29rcyBsaWtlIGB0Y3BfcmF0ZV9jaGVja19hcHBfbGltaXRlZChzaylgIHdhcyByZW1vdmVkIGZyb20gdHdvIGxvY2F0aW9uczogYG5ldC9pcHY0L3RjcF9icGYuY2AgYW5kIGBuZXQvdGxzL3Rsc19tYWluLmNgLiBIbW0sIHRoYXQmIzM5O3MgaW50ZXJlc3RpbmcuCgpNeSBuZXh0IHN0ZXAgaXMgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlLiBJIG5lZWQgdG8gcmVhZCB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBib3RoIHRob3NlIGZpbGVzIHRvIHVuZGVyc3RhbmQgdGhlICp3aHkqIGJlaGluZCB0aGlzIHJlbW92YWwuIFdoYXQgd2FzIGB0Y3BfcmF0ZV9jaGVja19hcHBfbGltaXRlZChzaylgIGRvaW5nIGluIHRoZSBmaXJzdCBwbGFjZT8gV2FzIGl0IGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uPyBBIGNvcnJlY3RuZXNzIGNoZWNrPyBBbmQgaXMgdGhlcmUgYSBjbGVhciByZXBsYWNlbWVudCwgb3IgaGFzIHRoZSBsb2dpYyBiZWVuIG1vdmVkIGVsc2V3aGVyZT8gSSBuZWVkIGNvbnRleHQuCgpGaW5hbGx5LCBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBHaXQgaGlzdG9yeS4gSSB3YW50IHRvIGtub3cgdGhlIGNvbW1pdCBtZXNzYWdlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNoYW5nZS4gSXQgc2hvdWxkIGNsYXJpZnkgdGhlIHJhdGlvbmFsZSBmb3IgdGhpcyByZW1vdmFsLiBUaGF0IGNvbnRleHQgd2lsbCB0ZWxsIG1lIHdoZXRoZXIgdGhpcyBjaGFuZ2UgdG91Y2hlcyBtZW1vcnkgbWFuYWdlbWVudCBpbiBhIHdheSB0aGF0IGlzIGxpa2VseSB0byB0cmlnZ2VyIEtNU0FOIGlzc3Vlcy4gSXQgd2lsbCB0aGVuIHRlbGwgbWUgaWYgdGhlcmUmIzM5O3MgYSBuZWVkIHRvIGFkZCBhIGRlZGljYXRlZCBmdXp6aW5nIHNlc3Npb24sIG9yIGlmIHRoaXMgY2hhbmdlIGlzIHJlbGF0aXZlbHkgYmVuaWduLiBVbmRlcnN0YW5kaW5nIHRoZSBjb21taXQgbWVzc2FnZSB3aWxsIGJlIGtleSB0byBteSBmaW5hbCBkZXRlcm1pbmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxNTo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcF9icGYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDk1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgOTU6XHRcdGJvb2wgYXBwbHkgPSBhcHBseV9ieXRlcztcbiAgOTY6XHRcdHN0cnVjdCBzY2F0dGVybGlzdCAqc2dlO1xuICA5NzpcdFx0c3RydWN0IHBhZ2UgKnBhZ2U7XG4gIDk4Olx0XHRpbnQgc2l6ZSwgcmV0ID0gMDtcbiAgOTk6XHRcdHUzMiBvZmY7XG4gMTAwOlx0XG4gMTAxOlx0XHR3aGlsZSAoMSkge1xuIDEwMjpcdFx0XHRzdHJ1Y3QgYmlvX3ZlYyBidmVjO1xuIDEwMzpcdFx0XHRib29sIGhhc190eF91bHA7XG4gMTA0Olx0XG4gMTA1Olx0XHRcdHNnZSA9IHNrX21zZ19lbGVtKG1zZywgbXNnLVx1MDAzZXNnLnN0YXJ0KTtcbiAxMDY6XHRcdFx0c2l6ZSA9IChhcHBseSBcdTAwMjZcdTAwMjYgYXBwbHlfYnl0ZXMgXHUwMDNjIHNnZS1cdTAwM2VsZW5ndGgpID9cbiAxMDc6XHRcdFx0XHRhcHBseV9ieXRlcyA6IHNnZS1cdTAwM2VsZW5ndGg7XG4gMTA4Olx0XHRcdG9mZiAgPSBzZ2UtXHUwMDNlb2Zmc2V0O1xuIDEwOTpcdFx0XHRwYWdlID0gc2dfcGFnZShzZ2UpO1xuIDExMDpcdFxuIDExMTpcdHJldHJ5OlxuIDExMjpcdFx0XHRtc2doZHIubXNnX2ZsYWdzID0gZmxhZ3MgfCBNU0dfU1BMSUNFX1BBR0VTO1xuIDExMzpcdFx0XHRoYXNfdHhfdWxwID0gdGxzX3N3X2hhc19jdHhfdHgoc2spO1xuIDExNDpcdFx0XHRpZiAoaGFzX3R4X3VscClcbiAxMTU6XHRcdFx0XHRtc2doZHIubXNnX2ZsYWdzIHw9IE1TR19TRU5EUEFHRV9OT1BPTElDWTtcbiAxMTY6XHRcbiAxMTc6XHRcdFx0aWYgKHNpemUgXHUwMDNjIHNnZS1cdTAwM2VsZW5ndGggXHUwMDI2XHUwMDI2IG1zZy1cdTAwM2VzZy5zdGFydCAhPSBtc2ctXHUwMDNlc2cuZW5kKVxuIDExODpcdFx0XHRcdG1zZ2hkci5tc2dfZmxhZ3MgfD0gTVNHX01PUkU7XG4gMTE5Olx0XG4gMTIwOlx0XHRcdGJ2ZWNfc2V0X3BhZ2UoXHUwMDI2YnZlYywgcGFnZSwgc2l6ZSwgb2ZmKTtcbiAxMjE6XHRcdFx0aW92X2l0ZXJfYnZlYyhcdTAwMjZtc2doZHIubXNnX2l0ZXIsIElURVJfU09VUkNFLCBcdTAwMjZidmVjLCAxLCBzaXplKTtcbiAxMjI6XHRcdFx0cmV0ID0gdGNwX3NlbmRtc2dfbG9ja2VkKHNrLCBcdTAwMjZtc2doZHIsIHNpemUpO1xuIDEyMzpcdFx0XHRpZiAocmV0IFx1MDAzYz0gMClcbiAxMjQ6XHRcdFx0XHRyZXR1cm4gcmV0O1xuIDEyNTpcdFxuIDEyNjpcdFx0XHRpZiAoYXBwbHkpXG4gMTI3Olx0XHRcdFx0YXBwbHlfYnl0ZXMgLT0gcmV0O1xuIDEyODpcdFx0XHRtc2ctXHUwMDNlc2cuc2l6ZSAtPSByZXQ7XG4gMTI5Olx0XHRcdHNnZS1cdTAwM2VvZmZzZXQgJiM0Mzs9IHJldDtcbiAxMzA6XHRcdFx0c2dlLVx1MDAzZWxlbmd0aCAtPSByZXQ7XG4gMTMxOlx0XHRcdGlmICh1bmNoYXJnZSlcbiAxMzI6XHRcdFx0XHRza19tZW1fdW5jaGFyZ2Uoc2ssIHJldCk7XG4gMTMzOlx0XHRcdGlmIChyZXQgIT0gc2l6ZSkge1xuIDEzNDpcdFx0XHRcdHNpemUgLT0gcmV0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxNTo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC90bHMvdGxzX21haW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE3NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTc1Olx0XHRzdHJ1Y3QgbXNnaGRyIG1zZyA9IHtcbiAxNzY6XHRcdFx0Lm1zZ19mbGFncyA9IE1TR19TUExJQ0VfUEFHRVMgfCBmbGFncyxcbiAxNzc6XHRcdH07XG4gMTc4Olx0XHRpbnQgcmV0ID0gMDtcbiAxNzk6XHRcdHN0cnVjdCBwYWdlICpwO1xuIDE4MDpcdFx0c2l6ZV90IHNpemU7XG4gMTgxOlx0XHRpbnQgb2Zmc2V0ID0gZmlyc3Rfb2Zmc2V0O1xuIDE4MjpcdFxuIDE4MzpcdFx0c2l6ZSA9IHNnLVx1MDAzZWxlbmd0aCAtIG9mZnNldDtcbiAxODQ6XHRcdG9mZnNldCAmIzQzOz0gc2ctXHUwMDNlb2Zmc2V0O1xuIDE4NTpcdFxuIDE4NjpcdFx0Y3R4LVx1MDAzZXNwbGljaW5nX3BhZ2VzID0gdHJ1ZTtcbiAxODc6XHRcdHdoaWxlICgxKSB7XG4gMTg4Olx0XHRcdHAgPSBzZ19wYWdlKHNnKTtcbiAxODk6XHRyZXRyeTpcbiAxOTA6XHRcdFx0YnZlY19zZXRfcGFnZShcdTAwMjZidmVjLCBwLCBzaXplLCBvZmZzZXQpO1xuIDE5MTpcdFx0XHRpb3ZfaXRlcl9idmVjKFx1MDAyNm1zZy5tc2dfaXRlciwgSVRFUl9TT1VSQ0UsIFx1MDAyNmJ2ZWMsIDEsIHNpemUpO1xuIDE5MjpcdFxuIDE5MzpcdFx0XHRyZXQgPSB0Y3Bfc2VuZG1zZ19sb2NrZWQoc2ssIFx1MDAyNm1zZywgc2l6ZSk7XG4gMTk0Olx0XG4gMTk1Olx0XHRcdGlmIChyZXQgIT0gc2l6ZSkge1xuIDE5NjpcdFx0XHRcdGlmIChyZXQgXHUwMDNlIDApIHtcbiAxOTc6XHRcdFx0XHRcdG9mZnNldCAmIzQzOz0gcmV0O1xuIDE5ODpcdFx0XHRcdFx0c2l6ZSAtPSByZXQ7XG4gMTk5Olx0XHRcdFx0XHRnb3RvIHJldHJ5O1xuIDIwMDpcdFx0XHRcdH1cbiAyMDE6XHRcbiAyMDI6XHRcdFx0XHRvZmZzZXQgLT0gc2ctXHUwMDNlb2Zmc2V0O1xuIDIwMzpcdFx0XHRcdGN0eC1cdTAwM2VwYXJ0aWFsbHlfc2VudF9vZmZzZXQgPSBvZmZzZXQ7XG4gMjA0Olx0XHRcdFx0Y3R4LVx1MDAzZXBhcnRpYWxseV9zZW50X3JlY29yZCA9ICh2b2lkICopc2c7XG4gMjA1Olx0XHRcdFx0Y3R4LVx1MDAzZXNwbGljaW5nX3BhZ2VzID0gZmFsc2U7XG4gMjA2Olx0XHRcdFx0cmV0dXJuIHJldDtcbiAyMDc6XHRcdFx0fVxuIDIwODpcdFxuIDIwOTpcdFx0XHRwdXRfcGFnZShwKTtcbiAyMTA6XHRcdFx0c2tfbWVtX3VuY2hhcmdlKHNrLCBzZy1cdTAwM2VsZW5ndGgpO1xuIDIxMTpcdFx0XHRzZyA9IHNnX25leHQoc2cpO1xuIDIxMjpcdFx0XHRpZiAoIXNnKVxuIDIxMzpcdFx0XHRcdGJyZWFrO1xuIDIxNDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxNTo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Y3BfcmF0ZV9jaGVja19hcHBfbGltaXRlZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwLmM9MTA1MT1pbnQgdGNwX3NlbmRtc2dfZmFzdG9wZW4oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIGludCAqY29waWVkLFxuLS1cbm5ldC9pcHY0L3RjcC5jLTEwOTgtLyogSWYgYSBnYXAgaXMgZGV0ZWN0ZWQgYmV0d2VlbiBzZW5kcywgbWFyayB0aGUgc29ja2V0IGFwcGxpY2F0aW9uLWxpbWl0ZWQuICovXG5uZXQvaXB2NC90Y3AuYzoxMDk5OnZvaWQgdGNwX3JhdGVfY2hlY2tfYXBwX2xpbWl0ZWQoc3RydWN0IHNvY2sgKnNrKVxubmV0L2lwdjQvdGNwLmMtMTEwMC17XG4tLVxubmV0L2lwdjQvdGNwLmMtMTExMy19XG5uZXQvaXB2NC90Y3AuYzoxMTE0OkVYUE9SVF9TWU1CT0xfR1BMKHRjcF9yYXRlX2NoZWNrX2FwcF9saW1pdGVkKTtcbm5ldC9pcHY0L3RjcC5jLTExMTUtXG5uZXQvaXB2NC90Y3AuYz0xMTE2PWludCB0Y3Bfc2VuZG1zZ19sb2NrZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxuLS1cbm5ldC9pcHY0L3RjcC5jLTExODktXG5uZXQvaXB2NC90Y3AuYzoxMTkwOlx0dGNwX3JhdGVfY2hlY2tfYXBwX2xpbWl0ZWQoc2spOyAgLyogaXMgc2VuZGluZyBhcHBsaWNhdGlvbi1saW1pdGVkPyAqL1xubmV0L2lwdjQvdGNwLmMtMTE5MS1cbi0tXG5uZXQveGZybS9lc3BpbnRjcC5jPTMwNz1zdGF0aWMgaW50IGVzcGludGNwX3NlbmRtc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxuLS1cbm5ldC94ZnJtL2VzcGludGNwLmMtMzcwLVxubmV0L3hmcm0vZXNwaW50Y3AuYzozNzE6XHR0Y3BfcmF0ZV9jaGVja19hcHBfbGltaXRlZChzayk7XG5uZXQveGZybS9lc3BpbnRjcC5jLTM3Mi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTU6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDc4MgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkRpdmluZyBpbnRvIHRoZSBUQ1AgU2VuZCBQYXRoKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgVENQIHNlbmQgcGF0aCByaWdodCBub3cuIFRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCB0byBtZSwgZ2l2ZW4gdGhlIGNvbnRleHQsIGlzIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgIGluIGBuZXQvaXB2NC90Y3AuY2AuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIG1hZ2ljIHByb2JhYmx5IGhhcHBlbnMuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0gKmFjdHVhbGx5KiBzZW5kcyB0aGUgZGF0YSwgc28gbGV0JiMzOTtzIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGF0IGZ1bmN0aW9uLgoKT2theSwgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IGBuZXQvaXB2NC90Y3AuY2AsIGxpbmUgMTE4OSB0byAxMTk1LiBJIHN1c3BlY3QgdGhlcmUmIzM5O3Mgc29tZXRoaW5nIGludGVyZXN0aW5nIHJpZ2h0IHRoZXJlIC0gdGhpcyBsaWtlbHkgaG9sZHMgdGhlIGFuc3dlci4gSSYjMzk7bSBleHBlY3Rpbmcgc29tZXRoaW5nIGluIHRoaXMgc25pcHBldCByZWxhdGVkIHRvIHBhY2tldCBjcmVhdGlvbiBhbmQgZGF0YSBjb3B5aW5nLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxNTo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTE4NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMTg1Olx0XHRcdFx0Z290byBvdXRfZXJyO1xuMTE4NjpcdFx0fVxuMTE4NzpcdFxuMTE4ODpcdFx0dGltZW8gPSBzb2NrX3NuZHRpbWVvKHNrLCBmbGFncyBcdTAwMjYgTVNHX0RPTlRXQUlUKTtcbjExODk6XHRcbjExOTA6XHRcdHRjcF9yYXRlX2NoZWNrX2FwcF9saW1pdGVkKHNrKTsgIC8qIGlzIHNlbmRpbmcgYXBwbGljYXRpb24tbGltaXRlZD8gKi9cbjExOTE6XHRcbjExOTI6XHRcdC8qIFdhaXQgZm9yIGEgY29ubmVjdGlvbiB0byBmaW5pc2guIE9uZSBleGNlcHRpb24gaXMgVENQIEZhc3QgT3BlblxuMTE5MzpcdFx0ICogKHBhc3NpdmUgc2lkZSkgd2hlcmUgZGF0YSBpcyBhbGxvd2VkIHRvIGJlIHNlbnQgYmVmb3JlIGEgY29ubmVjdGlvblxuMTE5NDpcdFx0ICogaXMgZnVsbHkgZXN0YWJsaXNoZWQuXG4xMTk1Olx0XHQgKi9cbjExOTY6XHRcdGlmICgoKDEgXHUwMDNjXHUwMDNjIHNrLVx1MDAzZXNrX3N0YXRlKSBcdTAwMjYgfihUQ1BGX0VTVEFCTElTSEVEIHwgVENQRl9DTE9TRV9XQUlUKSkgXHUwMDI2XHUwMDI2XG4xMTk3Olx0XHQgICAgIXRjcF9wYXNzaXZlX2Zhc3RvcGVuKHNrKSkge1xuMTE5ODpcdFx0XHRlcnIgPSBza19zdHJlYW1fd2FpdF9jb25uZWN0KHNrLCBcdTAwMjZ0aW1lbyk7XG4xMTk5Olx0XHRcdGlmIChlcnIgIT0gMClcbjEyMDA6XHRcdFx0XHRnb3RvIGRvX2Vycm9yO1xuMTIwMTpcdFx0fVxuMTIwMjpcdFxuMTIwMzpcdFx0aWYgKHVubGlrZWx5KHRwLVx1MDAzZXJlcGFpcikpIHtcbjEyMDQ6XHRcdFx0aWYgKHRwLVx1MDAzZXJlcGFpcl9xdWV1ZSA9PSBUQ1BfUkVDVl9RVUVVRSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxNTo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1Mzg3CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlZHVuZGFuY3kgRGV0ZWN0ZWQ6IFRDUCBSYXRlIExpbWl0aW5nIEFuYWx5c2lzKioKCk9rYXksIGhlcmUmIzM5O3Mgd2hhdCYjMzk7cyBoaXR0aW5nIG1lLiBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBUQ1Agc2VuZGluZyBwYXRocywgYW5kIEkmIzM5O3ZlIGdvdCBhIHJlZCBmbGFnIHdhdmluZyBpbiBteSBicmFpbi4gSSYjMzk7bSBzZWVpbmcgdGhhdCBgdGNwX3NlbmRtc2dfbG9ja2VkYCAqYWxyZWFkeSogY2FsbHMgYHRjcF9yYXRlX2NoZWNrX2FwcF9saW1pdGVkKHNrKWAuIFRoYXQmIzM5O3MgYSBrZXkgZnVuY3Rpb24gZm9yIHJhdGUgbGltaXRpbmcgYXBwbGljYXRpb24tbGltaXRlZCBzZW5kcy4gTm93LCBib3RoIGB0Y3BfYnBmX3B1c2hgIGFuZCBgdGxzX3B1c2hfc2dgIOKAkyB0aGUgb25lcyB0aGF0IGFyZSBwdXNoaW5nIGRhdGEg4oCTIHRoZXkmIzM5O3JlIHVzaW5nIGB0Y3Bfc2VuZG1zZ19sb2NrZWQoc2ssIC4uLilgIGluIHRoZWlyIHNlbmRpbmcgbG9vcHMuCgpTbywgaGVyZSYjMzk7cyB0aGUga2lja2VyOiBjYWxsaW5nIGB0Y3BfcmF0ZV9jaGVja19hcHBfbGltaXRlZChzaylgICpiZWZvcmUqIGNhbGxpbmcgYHRjcF9zZW5kbXNnX2xvY2tlZGAgaXMgY29tcGxldGVseSByZWR1bmRhbnQuIEl0JiMzOTtzIGEgZHVwbGljYXRlIGNoZWNrLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhpcyBtdXN0IGJlIGhpc3RvcmljYWwgYmFnZ2FnZS4gUHJvYmFibHkgd2hlbiB3ZSB3ZXJlIHVzaW5nIGBkb190Y3Bfc2VuZHBhZ2VzYCBvciBgdGNwX3NlbmRwYWdlX2xvY2tlZGAsIHdoaWNoICpkaWRuJiMzOTt0KiBjYWxsIHRoZSByYXRlIGNoZWNrLCBidXQgdGhlbiBnb3QgcmVmYWN0b3JlZCB0byB1c2UgYHRjcF9zZW5kbXNnX2xvY2tlZGAgYW5kIHRoZSBjaGVjayB3YXMganVzdCBuZXZlciByZW1vdmVkLiBDbGFzc2ljLgoKTGV0JiMzOTtzIGRpdmUgZGVlcGVyIGFuZCBzZWUgZXhhY3RseSB3aGF0IGB0Y3BfcmF0ZV9jaGVja19hcHBfbGltaXRlZChzaylgIGFjdHVhbGx5IGRvZXMuLi5nb3R0YSB1bmRlcnN0YW5kIHRoZSBmdW5jdGlvbiB0byBzZWUgdGhlIGltcGFjdCBvZiB0aGlzIHVubmVjZXNzYXJ5IGNhbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDE1OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDk4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwOTg6XHQvKiBJZiBhIGdhcCBpcyBkZXRlY3RlZCBiZXR3ZWVuIHNlbmRzLCBtYXJrIHRoZSBzb2NrZXQgYXBwbGljYXRpb24tbGltaXRlZC4gKi9cbjEwOTk6XHR2b2lkIHRjcF9yYXRlX2NoZWNrX2FwcF9saW1pdGVkKHN0cnVjdCBzb2NrICpzaylcbjExMDA6XHR7XG4xMTAxOlx0XHRzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTtcbjExMDI6XHRcbjExMDM6XHRcdGlmICgvKiBXZSBoYXZlIGxlc3MgdGhhbiBvbmUgcGFja2V0IHRvIHNlbmQuICovXG4xMTA0Olx0XHQgICAgdHAtXHUwMDNld3JpdGVfc2VxIC0gdHAtXHUwMDNlc25kX254dCBcdTAwM2MgdHAtXHUwMDNlbXNzX2NhY2hlIFx1MDAyNlx1MDAyNlxuMTEwNTpcdFx0ICAgIC8qIE5vdGhpbmcgaW4gc2VuZGluZyBob3N0JiMzOTtzIHFkaXNjIHF1ZXVlcyBvciBOSUMgdHggcXVldWUuICovXG4xMTA2Olx0XHQgICAgc2tfd21lbV9hbGxvY19nZXQoc2spIFx1MDAzYyBTS0JfVFJVRVNJWkUoMSkgXHUwMDI2XHUwMDI2XG4xMTA3Olx0XHQgICAgLyogV2UgYXJlIG5vdCBsaW1pdGVkIGJ5IENXTkQuICovXG4xMTA4Olx0XHQgICAgdGNwX3BhY2tldHNfaW5fZmxpZ2h0KHRwKSBcdTAwM2MgdGNwX3NuZF9jd25kKHRwKSBcdTAwMjZcdTAwMjZcbjExMDk6XHRcdCAgICAvKiBBbGwgbG9zdCBwYWNrZXRzIGhhdmUgYmVlbiByZXRyYW5zbWl0dGVkLiAqL1xuMTExMDpcdFx0ICAgIHRwLVx1MDAzZWxvc3Rfb3V0IFx1MDAzYz0gdHAtXHUwMDNlcmV0cmFuc19vdXQpXG4xMTExOlx0XHRcdHRwLVx1MDAzZWFwcF9saW1pdGVkID1cbjExMTI6XHRcdFx0XHQodHAtXHUwMDNlZGVsaXZlcmVkICYjNDM7IHRjcF9wYWNrZXRzX2luX2ZsaWdodCh0cCkpID8gOiAxO1xuMTExMzpcdH1cbjExMTQ6XHRFWFBPUlRfU1lNQk9MX0dQTCh0Y3BfcmF0ZV9jaGVja19hcHBfbGltaXRlZCk7XG4xMTE1Olx0XG4xMTE2Olx0aW50IHRjcF9zZW5kbXNnX2xvY2tlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXG4xMTE3Olx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxNTo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2Mjg2CgkJCQkJCQlvdXRwdXQ6IDE3NAoJCQkJCQkJdGhvdWdodHM6IDcyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBc3Nlc3NtZW50OiBObyBOZWVkIGZvciBEZWRpY2F0ZWQgRnV6emluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQsIGJhc2ljYWxseSwgaXQmIzM5O3MgY2xlYW5pbmcgdXAgc29tZSByZWR1bmRhbnQgZnVuY3Rpb24gY2FsbHMuIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgcmVtb3ZpbmcgZHVwbGljYXRlIGNhbGxzIHRvIGB0Y3BfcmF0ZV9jaGVja19hcHBfbGltaXRlZChzaylgIGZyb20gYHRjcF9icGZfcHVzaGAgYW5kIGB0bHNfcHVzaF9zZ2AuIFRoZSBpbXBvcnRhbnQgdGhpbmcgaGVyZSBpcyB0aGF0IGB0Y3Bfc2VuZG1zZ19sb2NrZWQoc2ssIC4uLilgIGlzIGNhbGxlZCAqaW1tZWRpYXRlbHkqIGFmdGVyIHRob3NlIGNhbGxzLCBhbmQgYHRjcF9zZW5kbXNnX2xvY2tlZGAgKmFscmVhZHkqIGludm9rZXMgYHRjcF9yYXRlX2NoZWNrX2FwcF9saW1pdGVkKHNrKWAuIFNvLCBpdCYjMzk7cyBqdXN0IGVsaW1pbmF0aW5nIGFuIHVubmVjZXNzYXJ5IGNhbGwuCgpOb3csIHRoZSBxdWVzdGlvbiBpcywgZG9lcyB0aGlzIGludHJvZHVjZSAqYW55KiB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMgb3IgaW5mb3JtYXRpb24gbGVha3M/IExldCYjMzk7cyBnbyB0aHJvdWdoIHRoZSBLTVNBTiBjaGVja2xpc3QuIFJlbWVtYmVyIHRoZSBydWxlczogd2UgbmVlZCBLTVNBTiBpZiB3ZSYjMzk7cmUgdG91Y2hpbmcga2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2UsIG1lc3Npbmcgd2l0aCBjb25kaXRpb25hbCBsb2dpYyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgYWxsb2NhdGluZyBhbmQgcG90ZW50aWFsbHkgcmVhZGluZyB1bmluaXRpYWxpemVkIGZpZWxkcywgb3IgYWx0ZXJpbmcgYm91bmRzIGNoZWNrcy4KCkluIHRoaXMgY2FzZSwgaXQmIzM5O3MgYSBzdHJhaWdodGZvcndhcmQgJiMzNDtubyYjMzQ7IGFjcm9zcyB0aGUgYm9hcmQuIFRoZSBwYXRjaCBkb2VzbiYjMzk7dCB0b3VjaCBhbnkgc3RydWN0dXJlcyB0aGF0IGFyZSBwYXNzZWQgdG8gdXNlcnNwYWNlLiBXZSYjMzk7cmUgbm90IGRvaW5nIGFueSBjb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIGRhdGEuIFRoZXJlIGFyZSBubyBuZXcgYWxsb2NhdGlvbnMsIGFuZCBjZXJ0YWlubHkgbm8gcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuIFdlJiMzOTtyZSBub3QgbW9kaWZ5aW5nIGJvdW5kcyBjaGVja3MgZWl0aGVyLiBXZSYjMzk7cmUganVzdCAqcmVtb3ZpbmcqIGEgZnVuY3Rpb24gY2FsbC4KClNvLCBJJiMzOTttIGNvbmZpZGVudCBpbiBzZXR0aW5nIGBOZWVkc0tNU0FOID0gZmFsc2VgLiBUaGlzIGNoYW5nZSBwcmltYXJpbHkgZGVhbHMgd2l0aCBjb2RlIHJlZHVuZGFuY3kgYW5kIHBlcmZvcm1hbmNlIGFuZCBpdCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4gS0FTQU4gd2lsbCwgb2YgY291cnNlLCBjb250aW51ZSB0byBjYXRjaCBhbnkgc3BhdGlhbCBvciB0ZW1wb3JhbCBtZW1vcnkgaXNzdWVzIGlmIHRoZXkgZXhpc3QuIEtNU0FOJiMzOTtzIHB1cnBvc2UgaXMgc3BlY2lmaWNhbGx5IHRvIGRldGVjdCByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQgaW5mb3JtYXRpb24gbGVha3MuCgpFc3NlbnRpYWxseSwgS01TQU4gaXMgZm9yIGRldGVjdGluZyB0aGUgJiMzNDt3aG9vcHMsIEkgZm9yZ290IHRvIGluaXRpYWxpemUgdGhhdCYjMzQ7IGtpbmQgb2YgZXJyb3IuIFRoaXMgcGF0Y2ggZG9lc24mIzM5O3Qgb3BlbiB0aGUgZG9vciBmb3IgdGhhdCBraW5kIG9mIHByb2JsZW0uIFRoZXJlZm9yZSwgaXQgaXMgYXBwcm9wcmlhdGUgdG8gc3RhdGUgdGhhdCBgS01TQU5SZWFzb25pbmdgIHNob3VsZCBiZSB0aGF0IHRoZSBwYXRjaCBtZXJlbHkgZGVsZXRlcyByZWR1bmRhbnQgY2FsbHMgdG8gYHRjcF9yYXRlX2NoZWNrX2FwcF9saW1pdGVkKHNrKWAgZnJvbSBgdGNwX2JwZl9wdXNoKClgIGFuZCBgdGxzX3B1c2hfc2coKWAsIHNpbmNlIGB0Y3Bfc2VuZG1zZ19sb2NrZWQoKWAsIGNhbGxlZCBpbW1lZGlhdGVseSBhZnRlcndhcmRzLCBhbHJlYWR5IHBlcmZvcm1zIGB0Y3BfcmF0ZV9jaGVja19hcHBfbGltaXRlZChzaylgLiBJdCBkb2VzIG5vdCBhbGxvY2F0ZSBuZXcgbWVtb3J5LCBpbml0aWFsaXplIG9yIHJlYWQgdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzLCBhbHRlciBidWZmZXIgYm91bmRhcmllcywgb3IgY29weSBrZXJuZWwgZGF0YSB0byB1c2VyIHNwYWNlLiBUaGVyZSBhcmUgemVybyByaXNrcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvcm1hdGlvbiBsZWFrcyBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQgYnkgdGhpcyBjaGFuZ2UsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiBBbmQgdGhlIHRvb2wgY2FsbCBmb3JtYXQgaXMgY29ycmVjdCBhcyBgc2V0LXJlc3VsdHNgIGFjY2VwdHMgYEtNU0FOUmVhc29uaW5nYCAoc3RyaW5nKSBhbmQgYE5lZWRzS01TQU5gIChib29sKS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTU6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVtb3ZlcyByZWR1bmRhbnQgY2FsbHMgdG8gdGNwX3JhdGVfY2hlY2tfYXBwX2xpbWl0ZWQoc2spIGZyb20gdGNwX2JwZl9wdXNoKCkgaW4gbmV0L2lwdjQvdGNwX2JwZi5jIGFuZCB0bHNfcHVzaF9zZygpIGluIG5ldC90bHMvdGxzX21haW4uYy4gSW4gYm90aCBjYXNlcywgdGNwX3NlbmRtc2dfbG9ja2VkKCkgaXMgY2FsbGVkIGltbWVkaWF0ZWx5IGZvbGxvd2luZyBhbmQgYWxyZWFkeSBpbnZva2VzIHRjcF9yYXRlX2NoZWNrX2FwcF9saW1pdGVkKHNrKS5cblxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24sIGJ1ZmZlciBsZW5ndGhzLCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgY29weWluZyB0byB1c2VyIHNwYWNlLiBUaGVyZSBpcyBubyByaXNrIG9mIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnksIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGZpZWxkcywgb3IgY2F1c2luZyBpbmZvcm1hdGlvbiBsZWFrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlbW92ZXMgcmVkdW5kYW50IGNhbGxzIHRvIHRjcF9yYXRlX2NoZWNrX2FwcF9saW1pdGVkKHNrKSBmcm9tIHRjcF9icGZfcHVzaCgpIGluIG5ldC9pcHY0L3RjcF9icGYuYyBhbmQgdGxzX3B1c2hfc2coKSBpbiBuZXQvdGxzL3Rsc19tYWluLmMuIEluIGJvdGggY2FzZXMsIHRjcF9zZW5kbXNnX2xvY2tlZCgpIGlzIGNhbGxlZCBpbW1lZGlhdGVseSBmb2xsb3dpbmcgYW5kIGFscmVhZHkgaW52b2tlcyB0Y3BfcmF0ZV9jaGVja19hcHBfbGltaXRlZChzaykuXG5cblRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uLCBidWZmZXIgbGVuZ3RocywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGNvcHlpbmcgdG8gdXNlciBzcGFjZS4gVGhlcmUgaXMgbm8gcmlzayBvZiByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBmaWVsZHMsIG9yIGNhdXNpbmcgaW5mb3JtYXRpb24gbGVha3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDE1OjAxOjExLjUxNDYyODU5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzE3OTg1MzEzODI3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUTFNcIixcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJCUEZfU1RSRUFNX1BBUlNFUlwiLFxuICAgIFwiTkVUX1NPQ0tfTVNHXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGxzX3B1c2hfc2dcIixcbiAgICBcInRsc190eF9yZWNvcmRzXCIsXG4gICAgXCJ0bHNfcHVzaF9wYXJ0aWFsX3JlY29yZFwiLFxuICAgIFwidGNwX2JwZl9wdXNoXCIsXG4gICAgXCJ0Y3BfYnBmX3NlbmRtc2dcIixcbiAgICBcInRjcF9icGZfc2VuZG1zZ19yZWRpclwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVtb3ZlcyByZWR1bmRhbnQgY2FsbHMgdG8gdGNwX3JhdGVfY2hlY2tfYXBwX2xpbWl0ZWQoc2spIGZyb20gdGNwX2JwZl9wdXNoKCkgaW4gbmV0L2lwdjQvdGNwX2JwZi5jIGFuZCB0bHNfcHVzaF9zZygpIGluIG5ldC90bHMvdGxzX21haW4uYy4gSW4gYm90aCBjYXNlcywgdGNwX3NlbmRtc2dfbG9ja2VkKCkgaXMgY2FsbGVkIGltbWVkaWF0ZWx5IGZvbGxvd2luZyBhbmQgYWxyZWFkeSBpbnZva2VzIHRjcF9yYXRlX2NoZWNrX2FwcF9saW1pdGVkKHNrKS5cXG5cXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbiwgYnVmZmVyIGxlbmd0aHMsIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBjb3B5aW5nIHRvIHVzZXIgc3BhY2UuIFRoZXJlIGlzIG5vIHJpc2sgb2YgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSwgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZmllbGRzLCBvciBjYXVzaW5nIGluZm9ybWF0aW9uIGxlYWtzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlbW92ZXMgcmVkdW5kYW50IGNhbGxzIHRvIHRjcF9yYXRlX2NoZWNrX2FwcF9saW1pdGVkKCkgZnJvbSB0Y3BfYnBmX3B1c2goKSBpbiBuZXQvaXB2NC90Y3BfYnBmLmMgYW5kIHRsc19wdXNoX3NnKCkgaW4gbmV0L3Rscy90bHNfbWFpbi5jLCBiZWNhdXNlIHRjcF9zZW5kbXNnX2xvY2tlZCgpIGFscmVhZHkgaW52b2tlcyB0Y3BfcmF0ZV9jaGVja19hcHBfbGltaXRlZCgpLiBUaGUgbW9kaWZpY2F0aW9ucyBhZmZlY3QgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlIHBhdGhzIGluIHRoZSBUQ1AgQlBGIGFuZCBUTFMgVUxQIHRyYW5zbWl0IHBpcGVsaW5lcy4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIHVuZXhwZWN0ZWQgc2lkZSBlZmZlY3RzIG9jY3VyIGluIFRDUCByYXRlIGxpbWl0aW5nIGFuZCB0cmFuc21pc3Npb24gbG9naWMgd2hlbiBzZW5kaW5nIGRhdGEgb3ZlciBUTFMgb3IgQlBGIHJlZGlyZWN0ZWQgc29ja2V0cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTU6MDE6MTEuNTE0NjMzNDYxWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDIyODczOTUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYTVkZWQwODQ0YmU1Njk0YjZiMjAyNTA3YWQ2NTE0Yjg0MTNhY2FiM1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIFNlcCAxNSAxNTowMTowOSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfYnBmLmMgYi9uZXQvaXB2NC90Y3BfYnBmLmNcXG5pbmRleCAyZTIzNGQxNTViNWU2Li5kNWZjZjNjZTQ4NjFhIDEwMDY0NFxcbi0tLSBhL25ldC9pcHY0L3RjcF9icGYuY1xcbisrKyBiL25ldC9pcHY0L3RjcF9icGYuY1xcbkBAIC0xMDgsNyArMTA4LDYgQEAgc3RhdGljIGludCB0Y3BfYnBmX3B1c2goc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfbXNnICptc2csIHUzMiBhcHBseV9ieXRlcyxcXG4gXFx0XFx0b2ZmICA9IHNnZS1cXHUwMDNlb2Zmc2V0O1xcbiBcXHRcXHRwYWdlID0gc2dfcGFnZShzZ2UpO1xcbiBcXG4tXFx0XFx0dGNwX3JhdGVfY2hlY2tfYXBwX2xpbWl0ZWQoc2spO1xcbiByZXRyeTpcXG4gXFx0XFx0bXNnaGRyLm1zZ19mbGFncyA9IGZsYWdzIHwgTVNHX1NQTElDRV9QQUdFUztcXG4gXFx0XFx0aGFzX3R4X3VscCA9IHRsc19zd19oYXNfY3R4X3R4KHNrKTtcXG5kaWZmIC0tZ2l0IGEvbmV0L3Rscy90bHNfbWFpbi5jIGIvbmV0L3Rscy90bHNfbWFpbi5jXFxuaW5kZXggZmJiMjc0Mjg3YWE1Zi4uOGJkYjc4NzE4YThkNCAxMDA2NDRcXG4tLS0gYS9uZXQvdGxzL3Rsc19tYWluLmNcXG4rKysgYi9uZXQvdGxzL3Rsc19tYWluLmNcXG5AQCAtMTg1LDggKzE4NSw2IEBAIGludCB0bHNfcHVzaF9zZyhzdHJ1Y3Qgc29jayAqc2ssXFxuIFxcbiBcXHRjdHgtXFx1MDAzZXNwbGljaW5nX3BhZ2VzID0gdHJ1ZTtcXG4gXFx0d2hpbGUgKDEpIHtcXG4tXFx0XFx0LyogaXMgc2VuZGluZyBhcHBsaWNhdGlvbi1saW1pdGVkPyAqL1xcbi1cXHRcXHR0Y3BfcmF0ZV9jaGVja19hcHBfbGltaXRlZChzayk7XFxuIFxcdFxcdHAgPSBzZ19wYWdlKHNnKTtcXG4gcmV0cnk6XFxuIFxcdFxcdGJ2ZWNfc2V0X3BhZ2UoXFx1MDAyNmJ2ZWMsIHAsIHNpemUsIG9mZnNldCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDE1OjAxOjEyLjkzODI5NTM2MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MzAzMzk1NTk0NDQ3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUTFNcIixcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJCUEZfU1RSRUFNX1BBUlNFUlwiLFxuICAgIFwiTkVUX1NPQ0tfTVNHXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGxzX3B1c2hfc2dcIixcbiAgICBcInRsc190eF9yZWNvcmRzXCIsXG4gICAgXCJ0bHNfcHVzaF9wYXJ0aWFsX3JlY29yZFwiLFxuICAgIFwidGNwX2JwZl9wdXNoXCIsXG4gICAgXCJ0Y3BfYnBmX3NlbmRtc2dcIixcbiAgICBcInRjcF9icGZfc2VuZG1zZ19yZWRpclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlbW92ZXMgcmVkdW5kYW50IGNhbGxzIHRvIHRjcF9yYXRlX2NoZWNrX2FwcF9saW1pdGVkKCkgZnJvbSB0Y3BfYnBmX3B1c2goKSBpbiBuZXQvaXB2NC90Y3BfYnBmLmMgYW5kIHRsc19wdXNoX3NnKCkgaW4gbmV0L3Rscy90bHNfbWFpbi5jLCBiZWNhdXNlIHRjcF9zZW5kbXNnX2xvY2tlZCgpIGFscmVhZHkgaW52b2tlcyB0Y3BfcmF0ZV9jaGVja19hcHBfbGltaXRlZCgpLiBUaGUgbW9kaWZpY2F0aW9ucyBhZmZlY3QgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlIHBhdGhzIGluIHRoZSBUQ1AgQlBGIGFuZCBUTFMgVUxQIHRyYW5zbWl0IHBpcGVsaW5lcy4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIHVuZXhwZWN0ZWQgc2lkZSBlZmZlY3RzIG9jY3VyIGluIFRDUCByYXRlIGxpbWl0aW5nIGFuZCB0cmFuc21pc3Npb24gbG9naWMgd2hlbiBzZW5kaW5nIGRhdGEgb3ZlciBUTFMgb3IgQlBGIHJlZGlyZWN0ZWQgc29ja2V0cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhNWRlZDA4NDRiZTU2OTRiNmIyMDI1MDdhZDY1MTRiODQxM2FjYWIzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgMTUgMTU6MDE6MDkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfYnBmLmMgYi9uZXQvaXB2NC90Y3BfYnBmLmNcbmluZGV4IDJlMjM0ZDE1NWI1ZTYuLmQ1ZmNmM2NlNDg2MWEgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC90Y3BfYnBmLmNcbisrKyBiL25ldC9pcHY0L3RjcF9icGYuY1xuQEAgLTEwOCw3ICsxMDgsNiBAQCBzdGF0aWMgaW50IHRjcF9icGZfcHVzaChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19tc2cgKm1zZywgdTMyIGFwcGx5X2J5dGVzLFxuIFx0XHRvZmYgID0gc2dlLVx1MDAzZW9mZnNldDtcbiBcdFx0cGFnZSA9IHNnX3BhZ2Uoc2dlKTtcbiBcbi1cdFx0dGNwX3JhdGVfY2hlY2tfYXBwX2xpbWl0ZWQoc2spO1xuIHJldHJ5OlxuIFx0XHRtc2doZHIubXNnX2ZsYWdzID0gZmxhZ3MgfCBNU0dfU1BMSUNFX1BBR0VTO1xuIFx0XHRoYXNfdHhfdWxwID0gdGxzX3N3X2hhc19jdHhfdHgoc2spO1xuZGlmZiAtLWdpdCBhL25ldC90bHMvdGxzX21haW4uYyBiL25ldC90bHMvdGxzX21haW4uY1xuaW5kZXggZmJiMjc0Mjg3YWE1Zi4uOGJkYjc4NzE4YThkNCAxMDA2NDRcbi0tLSBhL25ldC90bHMvdGxzX21haW4uY1xuKysrIGIvbmV0L3Rscy90bHNfbWFpbi5jXG5AQCAtMTg1LDggKzE4NSw2IEBAIGludCB0bHNfcHVzaF9zZyhzdHJ1Y3Qgc29jayAqc2ssXG4gXG4gXHRjdHgtXHUwMDNlc3BsaWNpbmdfcGFnZXMgPSB0cnVlO1xuIFx0d2hpbGUgKDEpIHtcbi1cdFx0LyogaXMgc2VuZGluZyBhcHBsaWNhdGlvbi1saW1pdGVkPyAqL1xuLVx0XHR0Y3BfcmF0ZV9jaGVja19hcHBfbGltaXRlZChzayk7XG4gXHRcdHAgPSBzZ19wYWdlKHNnKTtcbiByZXRyeTpcbiBcdFx0YnZlY19zZXRfcGFnZShcdTAwMjZidmVjLCBwLCBzaXplLCBvZmZzZXQpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTU6MDE6MTIuOTM4MzAwNTMxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjkxNzYxMzc5MjUyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJIHdlcmUgdGhpbmtpbmcgdGhyb3VnaCB0aGUgcHJvYmxlbTpcblxuKipBbmFseXppbmcgdGhlIENvZGUgQ2hhbmdlczogVENQIFJhdGUgTGltaXRpbmcgUmVtb3ZhbCoqXG5cbk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgZGlmZi4gSXQgbG9va3MgbGlrZSB3ZSdyZSByZW1vdmluZyBjYWxscyB0byBgdGNwX3JhdGVfY2hlY2tfYXBwX2xpbWl0ZWQoc2spYC4gU3BlY2lmaWNhbGx5LCBpdCdzIGJlaW5nIHJpcHBlZCBvdXQgb2YgYHRjcF9icGZfcHVzaGAgd2l0aGluIGBuZXQvaXB2NC90Y3BfYnBmLmNgIGFuZCBhbHNvIGZyb20gYHRsc19wdXNoX3NnYCBpbiBgbmV0L3Rscy90bHNfbWFpbi5jYC4gSG1tLCBpbnRlcmVzdGluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IHRoaXMgd2FzIGRvbmUuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgd2lkZXIgY29udGV4dCBvZiB0aGlzIGNoYW5nZS4gTGV0J3Mgc2VlIGlmIEkgY2FuIGdldCBzb21lIGNvbnRleHQgdXNpbmcgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgLiBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGZ1bmN0aW9uYWxpdHkgaXMgbG9zdCwgb3IgcGVyaGFwcywgaWYgc29tZSBvdGhlciBtZWNoYW5pc20gaXMgaGFuZGxpbmcgaXQgbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDc1LCJPdXRwdXRUb2tlbnMiOjc1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxNTo0OTo1MC41NTIwOTU3MzFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDQyMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvdGNwX2JwZi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDk1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDk1OlxcdFxcdGJvb2wgYXBwbHkgPSBhcHBseV9ieXRlcztcXG4gIDk2OlxcdFxcdHN0cnVjdCBzY2F0dGVybGlzdCAqc2dlO1xcbiAgOTc6XFx0XFx0c3RydWN0IHBhZ2UgKnBhZ2U7XFxuICA5ODpcXHRcXHRpbnQgc2l6ZSwgcmV0ID0gMDtcXG4gIDk5OlxcdFxcdHUzMiBvZmY7XFxuIDEwMDpcXHRcXG4gMTAxOlxcdFxcdHdoaWxlICgxKSB7XFxuIDEwMjpcXHRcXHRcXHRzdHJ1Y3QgYmlvX3ZlYyBidmVjO1xcbiAxMDM6XFx0XFx0XFx0Ym9vbCBoYXNfdHhfdWxwO1xcbiAxMDQ6XFx0XFxuIDEwNTpcXHRcXHRcXHRzZ2UgPSBza19tc2dfZWxlbShtc2csIG1zZy1cXHUwMDNlc2cuc3RhcnQpO1xcbiAxMDY6XFx0XFx0XFx0c2l6ZSA9IChhcHBseSBcXHUwMDI2XFx1MDAyNiBhcHBseV9ieXRlcyBcXHUwMDNjIHNnZS1cXHUwMDNlbGVuZ3RoKSA/XFxuIDEwNzpcXHRcXHRcXHRcXHRhcHBseV9ieXRlcyA6IHNnZS1cXHUwMDNlbGVuZ3RoO1xcbiAxMDg6XFx0XFx0XFx0b2ZmICA9IHNnZS1cXHUwMDNlb2Zmc2V0O1xcbiAxMDk6XFx0XFx0XFx0cGFnZSA9IHNnX3BhZ2Uoc2dlKTtcXG4gMTEwOlxcdFxcbiAxMTE6XFx0cmV0cnk6XFxuIDExMjpcXHRcXHRcXHRtc2doZHIubXNnX2ZsYWdzID0gZmxhZ3MgfCBNU0dfU1BMSUNFX1BBR0VTO1xcbiAxMTM6XFx0XFx0XFx0aGFzX3R4X3VscCA9IHRsc19zd19oYXNfY3R4X3R4KHNrKTtcXG4gMTE0OlxcdFxcdFxcdGlmIChoYXNfdHhfdWxwKVxcbiAxMTU6XFx0XFx0XFx0XFx0bXNnaGRyLm1zZ19mbGFncyB8PSBNU0dfU0VORFBBR0VfTk9QT0xJQ1k7XFxuIDExNjpcXHRcXG4gMTE3OlxcdFxcdFxcdGlmIChzaXplIFxcdTAwM2Mgc2dlLVxcdTAwM2VsZW5ndGggXFx1MDAyNlxcdTAwMjYgbXNnLVxcdTAwM2VzZy5zdGFydCAhPSBtc2ctXFx1MDAzZXNnLmVuZClcXG4gMTE4OlxcdFxcdFxcdFxcdG1zZ2hkci5tc2dfZmxhZ3MgfD0gTVNHX01PUkU7XFxuIDExOTpcXHRcXG4gMTIwOlxcdFxcdFxcdGJ2ZWNfc2V0X3BhZ2UoXFx1MDAyNmJ2ZWMsIHBhZ2UsIHNpemUsIG9mZik7XFxuIDEyMTpcXHRcXHRcXHRpb3ZfaXRlcl9idmVjKFxcdTAwMjZtc2doZHIubXNnX2l0ZXIsIElURVJfU09VUkNFLCBcXHUwMDI2YnZlYywgMSwgc2l6ZSk7XFxuIDEyMjpcXHRcXHRcXHRyZXQgPSB0Y3Bfc2VuZG1zZ19sb2NrZWQoc2ssIFxcdTAwMjZtc2doZHIsIHNpemUpO1xcbiAxMjM6XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjPSAwKVxcbiAxMjQ6XFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gMTI1OlxcdFxcbiAxMjY6XFx0XFx0XFx0aWYgKGFwcGx5KVxcbiAxMjc6XFx0XFx0XFx0XFx0YXBwbHlfYnl0ZXMgLT0gcmV0O1xcbiAxMjg6XFx0XFx0XFx0bXNnLVxcdTAwM2VzZy5zaXplIC09IHJldDtcXG4gMTI5OlxcdFxcdFxcdHNnZS1cXHUwMDNlb2Zmc2V0ICs9IHJldDtcXG4gMTMwOlxcdFxcdFxcdHNnZS1cXHUwMDNlbGVuZ3RoIC09IHJldDtcXG4gMTMxOlxcdFxcdFxcdGlmICh1bmNoYXJnZSlcXG4gMTMyOlxcdFxcdFxcdFxcdHNrX21lbV91bmNoYXJnZShzaywgcmV0KTtcXG4gMTMzOlxcdFxcdFxcdGlmIChyZXQgIT0gc2l6ZSkge1xcbiAxMzQ6XFx0XFx0XFx0XFx0c2l6ZSAtPSByZXQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDE1OjQ5OjUwLjU1MjIwMTY1MVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg1MjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC90bHMvdGxzX21haW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNzUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNzU6XFx0XFx0c3RydWN0IG1zZ2hkciBtc2cgPSB7XFxuIDE3NjpcXHRcXHRcXHQubXNnX2ZsYWdzID0gTVNHX1NQTElDRV9QQUdFUyB8IGZsYWdzLFxcbiAxNzc6XFx0XFx0fTtcXG4gMTc4OlxcdFxcdGludCByZXQgPSAwO1xcbiAxNzk6XFx0XFx0c3RydWN0IHBhZ2UgKnA7XFxuIDE4MDpcXHRcXHRzaXplX3Qgc2l6ZTtcXG4gMTgxOlxcdFxcdGludCBvZmZzZXQgPSBmaXJzdF9vZmZzZXQ7XFxuIDE4MjpcXHRcXG4gMTgzOlxcdFxcdHNpemUgPSBzZy1cXHUwMDNlbGVuZ3RoIC0gb2Zmc2V0O1xcbiAxODQ6XFx0XFx0b2Zmc2V0ICs9IHNnLVxcdTAwM2VvZmZzZXQ7XFxuIDE4NTpcXHRcXG4gMTg2OlxcdFxcdGN0eC1cXHUwMDNlc3BsaWNpbmdfcGFnZXMgPSB0cnVlO1xcbiAxODc6XFx0XFx0d2hpbGUgKDEpIHtcXG4gMTg4OlxcdFxcdFxcdHAgPSBzZ19wYWdlKHNnKTtcXG4gMTg5OlxcdHJldHJ5OlxcbiAxOTA6XFx0XFx0XFx0YnZlY19zZXRfcGFnZShcXHUwMDI2YnZlYywgcCwgc2l6ZSwgb2Zmc2V0KTtcXG4gMTkxOlxcdFxcdFxcdGlvdl9pdGVyX2J2ZWMoXFx1MDAyNm1zZy5tc2dfaXRlciwgSVRFUl9TT1VSQ0UsIFxcdTAwMjZidmVjLCAxLCBzaXplKTtcXG4gMTkyOlxcdFxcbiAxOTM6XFx0XFx0XFx0cmV0ID0gdGNwX3NlbmRtc2dfbG9ja2VkKHNrLCBcXHUwMDI2bXNnLCBzaXplKTtcXG4gMTk0OlxcdFxcbiAxOTU6XFx0XFx0XFx0aWYgKHJldCAhPSBzaXplKSB7XFxuIDE5NjpcXHRcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2UgMCkge1xcbiAxOTc6XFx0XFx0XFx0XFx0XFx0b2Zmc2V0ICs9IHJldDtcXG4gMTk4OlxcdFxcdFxcdFxcdFxcdHNpemUgLT0gcmV0O1xcbiAxOTk6XFx0XFx0XFx0XFx0XFx0Z290byByZXRyeTtcXG4gMjAwOlxcdFxcdFxcdFxcdH1cXG4gMjAxOlxcdFxcbiAyMDI6XFx0XFx0XFx0XFx0b2Zmc2V0IC09IHNnLVxcdTAwM2VvZmZzZXQ7XFxuIDIwMzpcXHRcXHRcXHRcXHRjdHgtXFx1MDAzZXBhcnRpYWxseV9zZW50X29mZnNldCA9IG9mZnNldDtcXG4gMjA0OlxcdFxcdFxcdFxcdGN0eC1cXHUwMDNlcGFydGlhbGx5X3NlbnRfcmVjb3JkID0gKHZvaWQgKilzZztcXG4gMjA1OlxcdFxcdFxcdFxcdGN0eC1cXHUwMDNlc3BsaWNpbmdfcGFnZXMgPSBmYWxzZTtcXG4gMjA2OlxcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDIwNzpcXHRcXHRcXHR9XFxuIDIwODpcXHRcXG4gMjA5OlxcdFxcdFxcdHB1dF9wYWdlKHApO1xcbiAyMTA6XFx0XFx0XFx0c2tfbWVtX3VuY2hhcmdlKHNrLCBzZy1cXHUwMDNlbGVuZ3RoKTtcXG4gMjExOlxcdFxcdFxcdHNnID0gc2dfbmV4dChzZyk7XFxuIDIxMjpcXHRcXHRcXHRpZiAoIXNnKVxcbiAyMTM6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDIxNDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTU6NDk6NTAuNTUyMjg5MjQxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzMzMzk3MDgyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcmVtb3ZhbCBvZiBgdGNwX3JhdGVfY2hlY2tfYXBwX2xpbWl0ZWQoc2spYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhhdCBkZWNpc2lvbiwgcGFydGljdWxhcmx5IHNpbmNlIGl0IHdhcyBsaWtlbHkgcGFydCBvZiBjb25nZXN0aW9uIGNvbnRyb2wgb3IgZmxvdyByZWd1bGF0aW9uLiBNeSBmaXJzdCBzdGVwIGlzIHRvIHRyYWNlIHdoZXJlIGl0IHdhcyB1c2VkLCBwZXJoYXBzIGluIHJlbGF0ZWQgdmVyc2lvbnMgb2YgdGhlIGtlcm5lbC5cblxuTmV4dCwgSSdsbCBuZWVkIHRvIHNjcnV0aW5pemUgdGhlIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgIGZ1bmN0aW9uLiBJIHdhbnQgdG8gc2VlIHByZWNpc2VseSBob3cgaXQgaGFuZGxlcyB0aGUgc2VuZGluZyBwcm9jZXNzIG5vdywgaW4gdGhlIGFic2VuY2Ugb2YgYHRjcF9yYXRlX2NoZWNrX2FwcF9saW1pdGVkYC4gSXMgdGhlIGZ1bmN0aW9uYWxpdHkgYmVpbmcgaGFuZGxlZCBlbHNld2hlcmU/IEhhcyB0aGUgcmF0ZSBsaW1pdGluZyBsb2dpYyBiZWVuIHNoaWZ0ZWQsIG9yIGNvbXBsZXRlbHkgZWxpbWluYXRlZD8gSSBuZWVkIHRvIGFuYWx5emUgaXRzIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gdG8gZ3Jhc3AgdGhlIG92ZXJhbGwgaW1wYWN0IG9uIHRoZSBUQ1Agc3RhY2suIFVuZGVyc3RhbmRpbmcgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gYHRjcF9zZW5kbXNnX2xvY2tlZGAgYW5kIGFueSBvdGhlciBwb3RlbnRpYWwgcmVwbGFjZW1lbnQgbWVjaGFuaXNtcyBpcyBrZXkuIFRoaXMgaXMgYSBjcnVjaWFsIGFyZWEgYW5kIEkgbmVlZCB0byBiZSBkaWxpZ2VudC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDU5NywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIiwicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTU6NDk6NTMuODg2MjYyNDE4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NDE1NzEyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRjcF9yYXRlX2NoZWNrX2FwcF9saW1pdGVkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC90Y3AuYz0xMDUxPWludCB0Y3Bfc2VuZG1zZ19mYXN0b3BlbihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgaW50ICpjb3BpZWQsXFxuLS1cXG5uZXQvaXB2NC90Y3AuYy0xMDk4LS8qIElmIGEgZ2FwIGlzIGRldGVjdGVkIGJldHdlZW4gc2VuZHMsIG1hcmsgdGhlIHNvY2tldCBhcHBsaWNhdGlvbi1saW1pdGVkLiAqL1xcbm5ldC9pcHY0L3RjcC5jOjEwOTk6dm9pZCB0Y3BfcmF0ZV9jaGVja19hcHBfbGltaXRlZChzdHJ1Y3Qgc29jayAqc2spXFxubmV0L2lwdjQvdGNwLmMtMTEwMC17XFxuLS1cXG5uZXQvaXB2NC90Y3AuYy0xMTEzLX1cXG5uZXQvaXB2NC90Y3AuYzoxMTE0OkVYUE9SVF9TWU1CT0xfR1BMKHRjcF9yYXRlX2NoZWNrX2FwcF9saW1pdGVkKTtcXG5uZXQvaXB2NC90Y3AuYy0xMTE1LVxcbm5ldC9pcHY0L3RjcC5jPTExMTY9aW50IHRjcF9zZW5kbXNnX2xvY2tlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXFxuLS1cXG5uZXQvaXB2NC90Y3AuYy0xMTg5LVxcbm5ldC9pcHY0L3RjcC5jOjExOTA6XFx0dGNwX3JhdGVfY2hlY2tfYXBwX2xpbWl0ZWQoc2spOyAgLyogaXMgc2VuZGluZyBhcHBsaWNhdGlvbi1saW1pdGVkPyAqL1xcbm5ldC9pcHY0L3RjcC5jLTExOTEtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDE1OjQ5OjUzLjkzNDY4MjY0WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTQ1MTU1MzcxNTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBteXNlbGY6XG5cbioqSW52ZXN0aWdhdGluZyBUQ1AgUmF0ZSBMaW1pdGluZyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBUQ1AgcmF0ZSBsaW1pdGluZyBpc3N1ZS4gVGhlIGNvcmUgb2YgaXQgc2VlbXMgdG8gYmUgaW4gdGhlIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgIGZ1bmN0aW9uLiBMZXQgbWUgc2VlLi4uIHllcywgbGluZSAxMTkwIGluIGBuZXQvaXB2NC90Y3AuY2AgaXMgdGhlIGNydWNpYWwgc3BvdC4gQW5kLCBnb29kLCBJIHNlZSB0aGF0IGB0Y3Bfc2VuZG1zZ19sb2NrZWRgICphbHJlYWR5KiBjYWxscyBgdGNwX3JhdGVfY2hlY2tfYXBwX2xpbWl0ZWQoc2spYC4gVGhhdCdzIGEga2V5IHBpZWNlIG9mIGluZm9ybWF0aW9uLlxuXG5Ob3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0IGEgYml0IGJldHRlci4gSSdsbCBuZWVkIHRvIGdvIGJhY2sgYW5kIGdldCBhIHdpZGVyIHZpZXcgYW5kIHNlZSB3aGF0IGlzIGdvaW5nIG9uIGF0IHRoZSBlbnRyeSB0byB0aGUgZnVuY3Rpb24uIExldCBtZSBzY2FuIHRoZSBjb2RlIGFyb3VuZCBsaW5lcyAxMTgwIHRvIDEyMDAgaW4gYG5ldC9pcHY0L3RjcC5jYC4gR2V0dGluZyB0aGUgd2lkZXIgY29kZSBwaWN0dXJlIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIGhvdyB0aGlzIHJhdGUgY2hlY2sgZml0cyBpbnRvIHRoZSBvdmVyYWxsIHNlbmQgcGF0aCBhbmQgd2hldGhlciBhbnl0aGluZydzIG1pc2NvbmZpZ3VyZWQgYXJvdW5kIHRoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUxNjIsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxNTo1MDowOC40NTAyMjMyOTRaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozODk3MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvdGNwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTE4MCxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTE4MDpcXHRcXHQgICAgIXRwLVxcdTAwM2VyZXBhaXIpIHtcXG4xMTgxOlxcdFxcdFxcdGVyciA9IHRjcF9zZW5kbXNnX2Zhc3RvcGVuKHNrLCBtc2csIFxcdTAwMjZjb3BpZWRfc3luLCBzaXplLCB1YXJnKTtcXG4xMTgyOlxcdFxcdFxcdGlmIChlcnIgPT0gLUVJTlBST0dSRVNTIFxcdTAwMjZcXHUwMDI2IGNvcGllZF9zeW4gXFx1MDAzZSAwKVxcbjExODM6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuMTE4NDpcXHRcXHRcXHRlbHNlIGlmIChlcnIpXFxuMTE4NTpcXHRcXHRcXHRcXHRnb3RvIG91dF9lcnI7XFxuMTE4NjpcXHRcXHR9XFxuMTE4NzpcXHRcXG4xMTg4OlxcdFxcdHRpbWVvID0gc29ja19zbmR0aW1lbyhzaywgZmxhZ3MgXFx1MDAyNiBNU0dfRE9OVFdBSVQpO1xcbjExODk6XFx0XFxuMTE5MDpcXHRcXHR0Y3BfcmF0ZV9jaGVja19hcHBfbGltaXRlZChzayk7ICAvKiBpcyBzZW5kaW5nIGFwcGxpY2F0aW9uLWxpbWl0ZWQ/ICovXFxuMTE5MTpcXHRcXG4xMTkyOlxcdFxcdC8qIFdhaXQgZm9yIGEgY29ubmVjdGlvbiB0byBmaW5pc2guIE9uZSBleGNlcHRpb24gaXMgVENQIEZhc3QgT3BlblxcbjExOTM6XFx0XFx0ICogKHBhc3NpdmUgc2lkZSkgd2hlcmUgZGF0YSBpcyBhbGxvd2VkIHRvIGJlIHNlbnQgYmVmb3JlIGEgY29ubmVjdGlvblxcbjExOTQ6XFx0XFx0ICogaXMgZnVsbHkgZXN0YWJsaXNoZWQuXFxuMTE5NTpcXHRcXHQgKi9cXG4xMTk2OlxcdFxcdGlmICgoKDEgXFx1MDAzY1xcdTAwM2Mgc2stXFx1MDAzZXNrX3N0YXRlKSBcXHUwMDI2IH4oVENQRl9FU1RBQkxJU0hFRCB8IFRDUEZfQ0xPU0VfV0FJVCkpIFxcdTAwMjZcXHUwMDI2XFxuMTE5NzpcXHRcXHQgICAgIXRjcF9wYXNzaXZlX2Zhc3RvcGVuKHNrKSkge1xcbjExOTg6XFx0XFx0XFx0ZXJyID0gc2tfc3RyZWFtX3dhaXRfY29ubmVjdChzaywgXFx1MDAyNnRpbWVvKTtcXG4xMTk5OlxcdFxcdFxcdGlmIChlcnIgIT0gMClcXG4xMjAwOlxcdFxcdFxcdFxcdGdvdG8gZG9fZXJyb3I7XFxuMTIwMTpcXHRcXHR9XFxuMTIwMjpcXHRcXG4xMjAzOlxcdFxcdGlmICh1bmxpa2VseSh0cC1cXHUwMDNlcmVwYWlyKSkge1xcbjEyMDQ6XFx0XFx0XFx0aWYgKHRwLVxcdTAwM2VyZXBhaXJfcXVldWUgPT0gVENQX1JFQ1ZfUVVFVUUpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTU6NTA6MDguNDUwNjE1Njc0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjUzMzkxODg3MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgVGhpcyBDb2RlIENoYW5nZSoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIHJlYWxpemVkIHNvbWV0aGluZyBrZXk6IHRoZSBjYWxscyB0byBgdGNwX3JhdGVfY2hlY2tfYXBwX2xpbWl0ZWQoc2spYCBiZWZvcmUgYHRjcF9zZW5kbXNnX2xvY2tlZGAgaW4gYHRjcF9icGZfcHVzaGAgYW5kIGB0bHNfcHVzaF9zZ2Agd2VyZSByZWR1bmRhbnQhIFRoYXQgZnVuY3Rpb24gaXMgYWxyZWFkeSBiZWluZyBjYWxsZWQgd2l0aGluIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgLiBHb29kIGNhdGNoLCB0aGF0J3MgZGVmaW5pdGVseSBhIGNsZWFudXAuXG5cbk5vdywgbGV0J3MgcHV0IG9uIHRoZSBmdXp6aW5nIGhhdC4gSSBoYXZlIHRvIGJlIHRob3JvdWdoLCBlc3BlY2lhbGx5IHdoZW4gaXQgY29tZXMgdG8gcmVmYWN0b3JpbmdzIGFuZCBuZXR3b3JraW5nIGNvZGUuIEkgbmVlZCB0byB0cmVhdCBjbGFpbXMgb2YgXCJubyBmdW5jdGlvbmFsIGNoYW5nZVwiIHdpdGggc2VyaW91cyBza2VwdGljaXNtLiBUaGUgZ3VpZGVsaW5lcyBhcmUgcHJldHR5IGNsZWFyIG9uIHRoaXM6IGFueSByZXN0cnVjdHVyaW5nLCBldmVuIHNlZW1pbmdseSBtaW5vciwgd2FycmFudHMgYSBjbG9zZXIgbG9vay5cblxuQWNjb3JkaW5nIHRvIHRob3NlIGd1aWRlbGluZXMsIFNlY3Rpb24gMSBtYWtlcyBpdCBleHBsaWNpdCB0aGF0IEkgc2hvdWxkbid0IHRha2UgdGhvc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUsIHJlZmFjdG9yaW5ncyBhbmQgY2xlYW51cHMgY2FuIGludHJvZHVjZSBzdWJ0bGUgaXNzdWVzLlxuXG5TZWN0aW9uIDIgcHJvdmlkZXMgbmVnYXRpdmUgY3JpdGVyaWEsIGJ1dCBub25lIGFwcGx5LiBJdCBzYXlzIEkgY2FuIGlnbm9yZSBjaGFuZ2VzIHRoYXQgYXJlIG5vbi1leGVjdXRhYmxlLCBkb2N1bWVudGF0aW9uLCB1c2VyIHNwYWNlLCBhbmQgc28gb24sIGJ1dCB0aGlzIGRvZXNuJ3QgZml0IHRoYXQgZGVzY3JpcHRpb24uXG5cblNlY3Rpb24gMyBsYXlzIG91dCB0aGUgcG9zaXRpdmUgY3JpdGVyaWEsIGFuZCB0aGF0J3Mgd2hlcmUgdGhpcyBsYW5kcy4gVGhlIG1vZGlmaWVkIGNvZGUgaXMgaW4gYG5ldC9pcHY0L3RjcF9icGYuY2AgYW5kIGBuZXQvdGxzL3Rsc19tYWluLmNgIOKAkyBjb3JlIG5ldHdvcmtpbmcgc3Vic3lzdGVtcy4gVGhpcyB0b3VjaGVzICpyZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlKiwgd2hpY2ggbWVhbnMgdGhlIHBhdGNoIGZhbGxzIHVuZGVyIHRoZSB1bWJyZWxsYSBvZiBcImFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cIiBUaGF0IG1lYW5zIEkndmUgZ290IGEgcmVzcG9uc2liaWxpdHkgdG8gc2F5IGBXb3J0aEZ1enppbmc9dHJ1ZWAuXG5cbk5vdyBJIG5lZWQgdG8gZ2F0aGVyIHNvbWUgbW9yZSBpbmZvLiBJIHNob3VsZCBjaGVjayB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zLCB0aGUgS2NvbmZpZyBvcHRpb25zLCBhbmQgbG9vayBhdCB0aGUgTWFrZWZpbGUuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgS2NvbmZpZyBvcHRpb25zIGdvdmVybiBgbmV0L2lwdjQvdGNwX2JwZi5jYCBhbmQgYG5ldC90bHMvdGxzX21haW4uY2AuIExldCdzIGNoZWNrIGBuZXQvaXB2NC9NYWtlZmlsZWAgYW5kIHRoZW4gbG9vayBhdCBgbmV0L3Rscy9LY29uZmlnYCBhbmQgYG5ldC90bHMvTWFrZWZpbGVgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1OTExLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTY4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTU6NTA6MTMuNzg5ODA2OTI0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTk3ODQ1MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Y3BfYnBmXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9NYWtlZmlsZT02Mj1vYmotJChDT05GSUdfVENQX0NPTkdfSUxMSU5PSVMpICs9IHRjcF9pbGxpbm9pcy5vXFxubmV0L2lwdjQvTWFrZWZpbGU6NjM6b2JqLSQoQ09ORklHX05FVF9TT0NLX01TRykgKz0gdGNwX2JwZi5vXFxubmV0L2lwdjQvTWFrZWZpbGUtNjQtb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSB1ZHBfYnBmLm9cXG4tLVxcbm5ldC9pcHY0L3RjcC5jPTQ0ODE9aW50IGRvX3RjcF9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLFxcbi0tXFxubmV0L2lwdjQvdGNwLmMtNDg1NS1cXG5uZXQvaXB2NC90Y3AuYzo0ODU2OmJvb2wgdGNwX2JwZl9ieXBhc3NfZ2V0c29ja29wdChpbnQgbGV2ZWwsIGludCBvcHRuYW1lKVxcbm5ldC9pcHY0L3RjcC5jLTQ4NTcte1xcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jPTMzPXN0YXRpYyBpbnQgYnBmX3RjcF9pbmdyZXNzKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jayxcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYy05MC1cXG5uZXQvaXB2NC90Y3BfYnBmLmM6OTE6c3RhdGljIGludCB0Y3BfYnBmX3B1c2goc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfbXNnICptc2csIHUzMiBhcHBseV9ieXRlcyxcXG5uZXQvaXB2NC90Y3BfYnBmLmMtOTItXFx0XFx0XFx0aW50IGZsYWdzLCBib29sIHVuY2hhcmdlKVxcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jLTE1MS1cXG5uZXQvaXB2NC90Y3BfYnBmLmM6MTUyOnN0YXRpYyBpbnQgdGNwX2JwZl9wdXNoX2xvY2tlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19tc2cgKm1zZyxcXG5uZXQvaXB2NC90Y3BfYnBmLmMtMTUzLVxcdFxcdFxcdCAgICAgICB1MzIgYXBwbHlfYnl0ZXMsIGludCBmbGFncywgYm9vbCB1bmNoYXJnZSlcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYy0xNTctXFx0bG9ja19zb2NrKHNrKTtcXG5uZXQvaXB2NC90Y3BfYnBmLmM6MTU4OlxcdHJldCA9IHRjcF9icGZfcHVzaChzaywgbXNnLCBhcHBseV9ieXRlcywgZmxhZ3MsIHVuY2hhcmdlKTtcXG5uZXQvaXB2NC90Y3BfYnBmLmMtMTU5LVxcdHJlbGVhc2Vfc29jayhzayk7XFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmMtMTYyLVxcbm5ldC9pcHY0L3RjcF9icGYuYzoxNjM6aW50IHRjcF9icGZfc2VuZG1zZ19yZWRpcihzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgaW5ncmVzcyxcXG5uZXQvaXB2NC90Y3BfYnBmLmMtMTY0LVxcdFxcdFxcdCAgc3RydWN0IHNrX21zZyAqbXNnLCB1MzIgYnl0ZXMsIGludCBmbGFncylcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYy0xNzItXFx0cmV0ID0gaW5ncmVzcyA/IGJwZl90Y3BfaW5ncmVzcyhzaywgcHNvY2ssIG1zZywgYnl0ZXMpIDpcXG5uZXQvaXB2NC90Y3BfYnBmLmM6MTczOlxcdFxcdFxcdHRjcF9icGZfcHVzaF9sb2NrZWQoc2ssIG1zZywgYnl0ZXMsIGZsYWdzLCBmYWxzZSk7XFxubmV0L2lwdjQvdGNwX2JwZi5jLTE3NC1cXHRza19wc29ja19wdXQoc2ssIHBzb2NrKTtcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYy0xNzYtfVxcbm5ldC9pcHY0L3RjcF9icGYuYzoxNzc6RVhQT1JUX1NZTUJPTF9HUEwodGNwX2JwZl9zZW5kbXNnX3JlZGlyKTtcXG5uZXQvaXB2NC90Y3BfYnBmLmMtMTc4LVxcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jPTIwMj1zdGF0aWMgYm9vbCBpc19uZXh0X21zZ19maW4oc3RydWN0IHNrX3Bzb2NrICpwc29jaylcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYy0yMTktXFxubmV0L2lwdjQvdGNwX2JwZi5jOjIyMDpzdGF0aWMgaW50IHRjcF9icGZfcmVjdm1zZ19wYXJzZXIoc3RydWN0IHNvY2sgKnNrLFxcbm5ldC9pcHY0L3RjcF9icGYuYy0yMjEtXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbXNnaGRyICptc2csXFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmMtMzMzLVxcbm5ldC9pcHY0L3RjcF9icGYuYzozMzQ6c3RhdGljIGludCB0Y3BfYnBmX2lvY3RsKHN0cnVjdCBzb2NrICpzaywgaW50IGNtZCwgaW50ICprYXJnKVxcbm5ldC9pcHY0L3RjcF9icGYuYy0zMzUte1xcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jLTM2Ni1cXG5uZXQvaXB2NC90Y3BfYnBmLmM6MzY3OnN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxcbm5ldC9pcHY0L3RjcF9icGYuYy0zNjgtXFx0XFx0XFx0ICAgaW50IGZsYWdzKVxcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jLTQxNi1cXG5uZXQvaXB2NC90Y3BfYnBmLmM6NDE3OnN0YXRpYyBpbnQgdGNwX2JwZl9zZW5kX3ZlcmRpY3Qoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLFxcbm5ldC9pcHY0L3RjcF9icGYuYy00MTgtXFx0XFx0XFx0XFx0c3RydWN0IHNrX21zZyAqbXNnLCBpbnQgKmNvcGllZCwgaW50IGZsYWdzKVxcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jLTQ2MC1cXHRjYXNlIF9fU0tfUEFTUzpcXG5uZXQvaXB2NC90Y3BfYnBmLmM6NDYxOlxcdFxcdHJldCA9IHRjcF9icGZfcHVzaChzaywgbXNnLCB0b3NlbmQsIGZsYWdzLCB0cnVlKTtcXG5uZXQvaXB2NC90Y3BfYnBmLmMtNDYyLVxcdFxcdGlmICh1bmxpa2VseShyZXQpKSB7XFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmMtNDg1LVxcdFxcdG9yaWdzaXplID0gbXNnLVxcdTAwM2VzZy5zaXplO1xcbm5ldC9pcHY0L3RjcF9icGYuYzo0ODY6XFx0XFx0cmV0ID0gdGNwX2JwZl9zZW5kbXNnX3JlZGlyKHNrX3JlZGlyLCByZWRpcl9pbmdyZXNzLFxcbm5ldC9pcHY0L3RjcF9icGYuYy00ODctXFx0XFx0XFx0XFx0XFx0ICAgIG1zZywgdG9zZW5kLCBmbGFncyk7XFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmMtNTMyLVxcbm5ldC9pcHY0L3RjcF9icGYuYzo1MzM6c3RhdGljIGludCB0Y3BfYnBmX3NlbmRtc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxcbm5ldC9pcHY0L3RjcF9icGYuYy01MzQte1xcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jLTU5OC1cXG5uZXQvaXB2NC90Y3BfYnBmLmM6NTk5OlxcdFxcdGVyciA9IHRjcF9icGZfc2VuZF92ZXJkaWN0KHNrLCBwc29jaywgbXNnX3R4LCBcXHUwMDI2Y29waWVkLCBmbGFncyk7XFxubmV0L2lwdjQvdGNwX2JwZi5jLTYwMC1cXHRcXHRpZiAodW5saWtlbHkoZXJyIFxcdTAwM2MgMCkpXFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmM9NjM2PXN0YXRpYyBERUZJTkVfU1BJTkxPQ0sodGNwdjZfcHJvdF9sb2NrKTtcXG5uZXQvaXB2NC90Y3BfYnBmLmM6NjM3OnN0YXRpYyBzdHJ1Y3QgcHJvdG8gdGNwX2JwZl9wcm90c1tUQ1BfQlBGX05VTV9QUk9UU11bVENQX0JQRl9OVU1fQ0ZHU107XFxubmV0L2lwdjQvdGNwX2JwZi5jLTYzOC1cXG5uZXQvaXB2NC90Y3BfYnBmLmM6NjM5OnN0YXRpYyB2b2lkIHRjcF9icGZfcmVidWlsZF9wcm90b3Moc3RydWN0IHByb3RvIHByb3RbVENQX0JQRl9OVU1fQ0ZHU10sXFxubmV0L2lwdjQvdGNwX2JwZi5jLTY0MC1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgcHJvdG8gKmJhc2UpXFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmMtNjQ0LVxcdHByb3RbVENQX0JQRl9CQVNFXS5jbG9zZVxcdFxcdD0gc29ja19tYXBfY2xvc2U7XFxubmV0L2lwdjQvdGNwX2JwZi5jOjY0NTpcXHRwcm90W1RDUF9CUEZfQkFTRV0ucmVjdm1zZ1xcdFxcdD0gdGNwX2JwZl9yZWN2bXNnO1xcbm5ldC9pcHY0L3RjcF9icGYuYy02NDYtXFx0cHJvdFtUQ1BfQlBGX0JBU0VdLnNvY2tfaXNfcmVhZGFibGVcXHQ9IHNrX21zZ19pc19yZWFkYWJsZTtcXG5uZXQvaXB2NC90Y3BfYnBmLmM6NjQ3OlxcdHByb3RbVENQX0JQRl9CQVNFXS5pb2N0bFxcdFxcdD0gdGNwX2JwZl9pb2N0bDtcXG5uZXQvaXB2NC90Y3BfYnBmLmMtNjQ4LVxcbm5ldC9pcHY0L3RjcF9icGYuYy02NDktXFx0cHJvdFtUQ1BfQlBGX1RYXVxcdFxcdFxcdD0gcHJvdFtUQ1BfQlBGX0JBU0VdO1xcbm5ldC9pcHY0L3RjcF9icGYuYzo2NTA6XFx0cHJvdFtUQ1BfQlBGX1RYXS5zZW5kbXNnXFx0XFx0PSB0Y3BfYnBmX3NlbmRtc2c7XFxubmV0L2lwdjQvdGNwX2JwZi5jLTY1MS1cXG5uZXQvaXB2NC90Y3BfYnBmLmMtNjUyLVxcdHByb3RbVENQX0JQRl9SWF1cXHRcXHRcXHQ9IHByb3RbVENQX0JQRl9CQVNFXTtcXG5uZXQvaXB2NC90Y3BfYnBmLmM6NjUzOlxcdHByb3RbVENQX0JQRl9SWF0ucmVjdm1zZ1xcdFxcdD0gdGNwX2JwZl9yZWN2bXNnX3BhcnNlcjtcXG5uZXQvaXB2NC90Y3BfYnBmLmMtNjU0LVxcbm5ldC9pcHY0L3RjcF9icGYuYy02NTUtXFx0cHJvdFtUQ1BfQlBGX1RYUlhdXFx0XFx0XFx0PSBwcm90W1RDUF9CUEZfVFhdO1xcbm5ldC9pcHY0L3RjcF9icGYuYzo2NTY6XFx0cHJvdFtUQ1BfQlBGX1RYUlhdLnJlY3Ztc2dcXHRcXHQ9IHRjcF9icGZfcmVjdm1zZ19wYXJzZXI7XFxubmV0L2lwdjQvdGNwX2JwZi5jLTY1Ny19XFxubmV0L2lwdjQvdGNwX2JwZi5jLTY1OC1cXG5uZXQvaXB2NC90Y3BfYnBmLmM6NjU5OnN0YXRpYyB2b2lkIHRjcF9icGZfY2hlY2tfdjZfbmVlZHNfcmVidWlsZChzdHJ1Y3QgcHJvdG8gKm9wcylcXG5uZXQvaXB2NC90Y3BfYnBmLmMtNjYwLXtcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYy02NjMtXFx0XFx0aWYgKGxpa2VseShvcHMgIT0gdGNwdjZfcHJvdF9zYXZlZCkpIHtcXG5uZXQvaXB2NC90Y3BfYnBmLmM6NjY0OlxcdFxcdFxcdHRjcF9icGZfcmVidWlsZF9wcm90b3ModGNwX2JwZl9wcm90c1tUQ1BfQlBGX0lQVjZdLCBvcHMpO1xcbm5ldC9pcHY0L3RjcF9icGYuYy02NjUtXFx0XFx0XFx0c21wX3N0b3JlX3JlbGVhc2UoXFx1MDAyNnRjcHY2X3Byb3Rfc2F2ZWQsIG9wcyk7XFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmMtNjcwLVxcbm5ldC9pcHY0L3RjcF9icGYuYzo2NzE6c3RhdGljIGludCBfX2luaXQgdGNwX2JwZl92NF9idWlsZF9wcm90byh2b2lkKVxcbm5ldC9pcHY0L3RjcF9icGYuYy02NzIte1xcbm5ldC9pcHY0L3RjcF9icGYuYzo2NzM6XFx0dGNwX2JwZl9yZWJ1aWxkX3Byb3Rvcyh0Y3BfYnBmX3Byb3RzW1RDUF9CUEZfSVBWNF0sIFxcdTAwMjZ0Y3BfcHJvdCk7XFxubmV0L2lwdjQvdGNwX2JwZi5jLTY3NC1cXHRyZXR1cm4gMDtcXG5uZXQvaXB2NC90Y3BfYnBmLmMtNjc1LX1cXG5uZXQvaXB2NC90Y3BfYnBmLmM6Njc2OmxhdGVfaW5pdGNhbGwodGNwX2JwZl92NF9idWlsZF9wcm90byk7XFxubmV0L2lwdjQvdGNwX2JwZi5jLTY3Ny1cXG5uZXQvaXB2NC90Y3BfYnBmLmM6Njc4OnN0YXRpYyBpbnQgdGNwX2JwZl9hc3NlcnRfcHJvdG9fb3BzKHN0cnVjdCBwcm90byAqb3BzKVxcbm5ldC9pcHY0L3RjcF9icGYuYy02Nzkte1xcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jLTY4OC0jaWYgSVNfRU5BQkxFRChDT05GSUdfQlBGX1NUUkVBTV9QQVJTRVIpXFxubmV0L2lwdjQvdGNwX2JwZi5jOjY4OTppbnQgdGNwX2JwZl9zdHJwX3JlYWRfc29jayhzdHJ1Y3Qgc3RycGFyc2VyICpzdHJwLCByZWFkX2Rlc2NyaXB0b3JfdCAqZGVzYyxcXG5uZXQvaXB2NC90Y3BfYnBmLmMtNjkwLVxcdFxcdFxcdCAgIHNrX3JlYWRfYWN0b3JfdCByZWN2X2FjdG9yKVxcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jLTcxMi1cXHQgKiBGb3IgU0tfUkVESVJFQ1QsIHdlIG5lZWQgdG8gYWNrIHRoZSBmcmFtZSBpbW1lZGlhdGVseSBidXQgZm9yXFxubmV0L2lwdjQvdGNwX2JwZi5jOjcxMzpcXHQgKiBTS19QQVNTLCB3ZSB3YW50IHRvIGRlbGF5IHRoZSBhY2sgdW50aWwgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcigpLlxcbm5ldC9pcHY0L3RjcF9icGYuYy03MTQtXFx0ICovXFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmMtNzIzLVxcbm5ldC9pcHY0L3RjcF9icGYuYzo3MjQ6aW50IHRjcF9icGZfdXBkYXRlX3Byb3RvKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jaywgYm9vbCByZXN0b3JlKVxcbm5ldC9pcHY0L3RjcF9icGYuYy03MjUte1xcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jLTc1MC1cXHRpZiAoc2stXFx1MDAzZXNrX2ZhbWlseSA9PSBBRl9JTkVUNikge1xcbm5ldC9pcHY0L3RjcF9icGYuYzo3NTE6XFx0XFx0aWYgKHRjcF9icGZfYXNzZXJ0X3Byb3RvX29wcyhwc29jay1cXHUwMDNlc2tfcHJvdG8pKVxcbm5ldC9pcHY0L3RjcF9icGYuYy03NTItXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxubmV0L2lwdjQvdGNwX2JwZi5jLTc1My1cXG5uZXQvaXB2NC90Y3BfYnBmLmM6NzU0OlxcdFxcdHRjcF9icGZfY2hlY2tfdjZfbmVlZHNfcmVidWlsZChwc29jay1cXHUwMDNlc2tfcHJvdG8pO1xcbm5ldC9pcHY0L3RjcF9icGYuYy03NTUtXFx0fVxcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jLTc1Ny1cXHQvKiBQYWlycyB3aXRoIGxvY2tsZXNzIHJlYWQgaW4gc2tfY2xvbmVfbG9jaygpICovXFxubmV0L2lwdjQvdGNwX2JwZi5jOjc1ODpcXHRzb2NrX3JlcGxhY2VfcHJvdG8oc2ssIFxcdTAwMjZ0Y3BfYnBmX3Byb3RzW2ZhbWlseV1bY29uZmlnXSk7XFxubmV0L2lwdjQvdGNwX2JwZi5jLTc1OS1cXHRyZXR1cm4gMDtcXG5uZXQvaXB2NC90Y3BfYnBmLmMtNzYwLX1cXG5uZXQvaXB2NC90Y3BfYnBmLmM6NzYxOkVYUE9SVF9TWU1CT0xfR1BMKHRjcF9icGZfdXBkYXRlX3Byb3RvKTtcXG5uZXQvaXB2NC90Y3BfYnBmLmMtNzYyLVxcbm5ldC9pcHY0L3RjcF9icGYuYzo3NjM6LyogSWYgYSBjaGlsZCBnb3QgY2xvbmVkIGZyb20gYSBsaXN0ZW5pbmcgc29ja2V0IHRoYXQgaGFkIHRjcF9icGZcXG5uZXQvaXB2NC90Y3BfYnBmLmMtNzY0LSAqIHByb3RvY29sIGNhbGxiYWNrcyBpbnN0YWxsZWQsIHdlIG5lZWQgdG8gcmVzdG9yZSB0aGUgY2FsbGJhY2tzIHRvXFxubmV0L2lwdjQvdGNwX2JwZi5jLTc2NS0gKiB0aGUgZGVmYXVsdCBvbmVzIGJlY2F1c2UgdGhlIGNoaWxkIGRvZXMgbm90IGluaGVyaXQgdGhlIHBzb2NrIHN0YXRlXFxubmV0L2lwdjQvdGNwX2JwZi5jOjc2NjogKiB0aGF0IHRjcF9icGYgY2FsbGJhY2tzIGV4cGVjdC5cXG5uZXQvaXB2NC90Y3BfYnBmLmMtNzY3LSAqL1xcbm5ldC9pcHY0L3RjcF9icGYuYzo3Njg6dm9pZCB0Y3BfYnBmX2Nsb25lKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKm5ld3NrKVxcbm5ldC9pcHY0L3RjcF9icGYuYy03Njkte1xcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jLTc3MS1cXG5uZXQvaXB2NC90Y3BfYnBmLmM6NzcyOlxcdGlmIChpc19pbnNpZGV2YXIocHJvdCwgdGNwX2JwZl9wcm90cykpXFxubmV0L2lwdjQvdGNwX2JwZi5jLTc3My1cXHRcXHRuZXdzay1cXHUwMDNlc2tfcHJvdCA9IHNrLVxcdTAwM2Vza19wcm90X2NyZWF0b3I7XFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz0xMDcwPXN0YXRpYyB2b2lkIHRjcF9ydHRfZXN0aW1hdG9yKHN0cnVjdCBzb2NrICpzaywgbG9uZyBtcnR0X3VzKVxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtMTEyMi1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzoxMTIzOlxcdFxcdFxcdHRjcF9icGZfcnR0KHNrLCBtcnR0X3VzLCBzcnR0KTtcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy0xMTI0LVxcdFxcdH1cXG4tLVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTExMzItXFxubmV0L2lwdjQvdGNwX2lucHV0LmM6MTEzMzpcXHRcXHR0Y3BfYnBmX3J0dChzaywgbXJ0dF91cywgc3J0dCk7XFxubmV0L2lwdjQvdGNwX2lucHV0LmMtMTEzNC1cXHR9XFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz03NDU0PXN0YXRpYyB2b2lkIHRjcF9lY25fY3JlYXRlX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNzQ4NC1cXHQgICAgKGVjbl9va19kc3QgXFx1MDAyNiBEU1RfRkVBVFVSRV9FQ05fQ0EpIHx8XFxubmV0L2lwdjQvdGNwX2lucHV0LmM6NzQ4NTpcXHQgICAgdGNwX2JwZl9jYV9uZWVkc19lY24oKHN0cnVjdCBzb2NrICopcmVxKSlcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy03NDg2LVxcdFxcdGluZXRfcnNrKHJlcSktXFx1MDAzZWVjbl9vayA9IDE7XFxuLS1cXG5uZXQvaXB2NC90Y3BfaXB2NC5jPTExNjI9c3RhdGljIGludCB0Y3BfdjRfc2VuZF9zeW5hY2soY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsXFxuLS1cXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTExOTEtXFx0XFx0aWYgKCFJTkVUX0VDTl9pc19jYXBhYmxlKHRvcykgXFx1MDAyNlxcdTAwMjZcXG5uZXQvaXB2NC90Y3BfaXB2NC5jOjExOTI6XFx0XFx0ICAgIHRjcF9icGZfY2FfbmVlZHNfZWNuKChzdHJ1Y3Qgc29jayAqKXJlcSkpXFxubmV0L2lwdjQvdGNwX2lwdjQuYy0xMTkzLVxcdFxcdFxcdHRvcyB8PSBJTkVUX0VDTl9FQ1RfMDtcXG4tLVxcbm5ldC9pcHY0L3RjcF9pcHY0LmM9MzM0OD1zdHJ1Y3QgcHJvdG8gdGNwX3Byb3QgPSB7XFxuLS1cXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTMzNjEtXFx0LmdldHNvY2tvcHRcXHRcXHQ9IHRjcF9nZXRzb2Nrb3B0LFxcbm5ldC9pcHY0L3RjcF9pcHY0LmM6MzM2MjpcXHQuYnBmX2J5cGFzc19nZXRzb2Nrb3B0XFx0PSB0Y3BfYnBmX2J5cGFzc19nZXRzb2Nrb3B0LFxcbm5ldC9pcHY0L3RjcF9pcHY0LmMtMzM2My1cXHQua2VlcGFsaXZlXFx0XFx0PSB0Y3Bfc2V0X2tlZXBhbGl2ZSxcXG4tLVxcbm5ldC9pcHY0L3RjcF9pcHY0LmMtMzM3My0jaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXFxubmV0L2lwdjQvdGNwX2lwdjQuYzozMzc0OlxcdC5wc29ja191cGRhdGVfc2tfcHJvdFxcdD0gdGNwX2JwZl91cGRhdGVfcHJvdG8sXFxubmV0L2lwdjQvdGNwX2lwdjQuYy0zMzc1LSNlbmRpZlxcbi0tXFxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jPTU0Nj1zdHJ1Y3Qgc29jayAqdGNwX2NyZWF0ZV9vcGVucmVxX2NoaWxkKGNvbnN0IHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYy02NjMtXFx0bmV3dHAtXFx1MDAzZWJwZl9jaGdfY2NfaW5wcm9ncmVzcyA9IDA7XFxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jOjY2NDpcXHR0Y3BfYnBmX2Nsb25lKHNrLCBuZXdzayk7XFxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jLTY2NS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTU6NTA6MTMuODM5NzkyOTI1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIxNjE4ODUyMTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkNoZWNraW5nIE5ldC9UTFMgTWFrZWZpbGUgYW5kIEtjb25maWcqKlxuXG5Pa2F5LCBzbyB3ZSBuZWVkIHRvIGNpcmNsZSBiYWNrIGFuZCBnaXZlIHRoZSBgbmV0L3Rscy9gIGRpcmVjdG9yeSBhbm90aGVyIG9uY2Utb3Zlciwgc3BlY2lmaWNhbGx5IHRoZSBgTWFrZWZpbGVgIGFuZCBgS2NvbmZpZ2AgZmlsZXMuIEknbSB0aGlua2luZyB3ZSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBUTFMtcmVsYXRlZCBidWlsZCBwcm9jZXNzIGlzIGNvbnNpc3RlbnQgYW5kIGRvZXNuJ3QgaW50cm9kdWNlIGFueSByZWdyZXNzaW9ucyBvciBidWlsZCBicmVha3MuIFRoaXMgbGlrZWx5IG1lYW5zIHZlcmlmeWluZyB0aGUgZGVwZW5kZW5jaWVzLCBjb21waWxlIGZsYWdzLCBhbmQgYW55IGNvbmRpdGlvbmFsIGJ1aWxkIGxvZ2ljIGJhc2VkIG9uIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFdlIHdhbnQgdG8gYmUgY2VydGFpbiB0aGF0IHRoZXNlIGZpbGVzIGFyZSB1cC10by1kYXRlIGFuZCBjb3JyZWN0bHkgcmVmbGVjdCB0aGUgZGVzaXJlZCBiZWhhdmlvciB3aXRoIHRoZSBsYXRlc3QgY2hhbmdlcyBtYWRlIHVwc3RyZWFtLiBObyBzdXJwcmlzZXMgaW4gdGhlIGJ1aWxkIHByb2Nlc3MsIHRoYXQncyB0aGUgZ29hbC4gTGV0J3MgbWFrZSBzdXJlIHRoYXQgYW55IGZlYXR1cmUgZmxhZ3MgYXJlIGNvcnJlY3RseSBzZXQsIHRoYXQgdGhleSBpbnRlZ3JhdGUgcHJvcGVybHksIGFuZCB0aGF0IG91ciBjdXN0b20gZGVmaW5pdGlvbnMgYXJlIGNvcnJlY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMjQzLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTU6NTA6MTYuMDAxNjgyNTQzWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzU3OTE0MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0bHNfcHVzaF9zZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvdGxzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvdGxzL3Rscy5oPTI2Mj10bHNfZGV2aWNlX2RlY3J5cHRlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCB0bHNfY29udGV4dCAqdGxzX2N0eClcXG4tLVxcbm5ldC90bHMvdGxzLmgtMjY3LVxcbm5ldC90bHMvdGxzLmg6MjY4OmludCB0bHNfcHVzaF9zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCB0bHNfY29udGV4dCAqY3R4LFxcbm5ldC90bHMvdGxzLmgtMjY5LVxcdFxcdHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIHUxNiBmaXJzdF9vZmZzZXQsXFxuLS1cXG5uZXQvdGxzL3Rsc19kZXZpY2UuYz0yNzk9c3RhdGljIGludCB0bHNfcHVzaF9yZWNvcmQoc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L3Rscy90bHNfZGV2aWNlLmMtMzA5LVxcdC8qIGFsbCByZWFkeSwgc2VuZCAqL1xcbm5ldC90bHMvdGxzX2RldmljZS5jOjMxMDpcXHRyZXR1cm4gdGxzX3B1c2hfc2coc2ssIGN0eCwgb2ZmbG9hZF9jdHgtXFx1MDAzZXNnX3R4X2RhdGEsIDAsIGZsYWdzKTtcXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy0zMTEtfVxcbi0tXFxubmV0L3Rscy90bHNfbWFpbi5jPTEzOT1pbnQgd2FpdF9vbl9wZW5kaW5nX3dyaXRlcihzdHJ1Y3Qgc29jayAqc2ssIGxvbmcgKnRpbWVvKVxcbi0tXFxubmV0L3Rscy90bHNfbWFpbi5jLTE2Ny1cXG5uZXQvdGxzL3Rsc19tYWluLmM6MTY4OmludCB0bHNfcHVzaF9zZyhzdHJ1Y3Qgc29jayAqc2ssXFxubmV0L3Rscy90bHNfbWFpbi5jLTE2OS1cXHRcXHRzdHJ1Y3QgdGxzX2NvbnRleHQgKmN0eCxcXG4tLVxcbm5ldC90bHMvdGxzX21haW4uYz0yNjY9aW50IHRsc19wdXNoX3BhcnRpYWxfcmVjb3JkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHRsc19jb250ZXh0ICpjdHgsXFxuLS1cXG5uZXQvdGxzL3Rsc19tYWluLmMtMjc1LVxcdGN0eC1cXHUwMDNlcGFydGlhbGx5X3NlbnRfcmVjb3JkID0gTlVMTDtcXG5uZXQvdGxzL3Rsc19tYWluLmM6Mjc2OlxcdHJldHVybiB0bHNfcHVzaF9zZyhzaywgY3R4LCBzZywgb2Zmc2V0LCBmbGFncyk7XFxubmV0L3Rscy90bHNfbWFpbi5jLTI3Ny19XFxuLS1cXG5uZXQvdGxzL3Rsc19zdy5jPTQwOD1pbnQgdGxzX3R4X3JlY29yZHMoc3RydWN0IHNvY2sgKnNrLCBpbnQgZmxhZ3MpXFxuLS1cXG5uZXQvdGxzL3Rsc19zdy5jLTQ0NS1cXHRcXHRcXHRtc2dfZW4gPSBcXHUwMDI2cmVjLVxcdTAwM2Vtc2dfZW5jcnlwdGVkO1xcbm5ldC90bHMvdGxzX3N3LmM6NDQ2OlxcdFxcdFxcdHJjID0gdGxzX3B1c2hfc2coc2ssIHRsc19jdHgsXFxubmV0L3Rscy90bHNfc3cuYy00NDctXFx0XFx0XFx0XFx0XFx0IFxcdTAwMjZtc2dfZW4tXFx1MDAzZXNnLmRhdGFbbXNnX2VuLVxcdTAwM2VzZy5jdXJyXSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTU6NTA6MTYuMDQ5MjY3NDA1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI2Mzg2NDM2MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgTmV0d29yayBTb2NrZXQgTWVzc2FnaW5nIGFuZCBUTFMgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGBDT05GSUdfTkVUX1NPQ0tfTVNHYCBhbmQgYENPTkZJR19UTFNgLiBUaG9zZSB0d28gYXJlIGtleSBwbGF5ZXJzLCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlaXIgZGVmaW5pdGlvbnMgd2l0aGluIHRoZSBLY29uZmlnIHN5c3RlbS4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcsIFwiTGV0J3MgZmlndXJlIG91dCB3aGF0ICpwcmVjaXNlbHkqIEtjb25maWcgZGljdGF0ZXMgZm9yIGBDT05GSUdfTkVUX1NPQ0tfTVNHYCBhbmQgYENPTkZJR19UTFNgLlwiIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGRlZmluZWQsIHRoZWlyIGRlcGVuZGVuY2llcywgYW5kIGFueSBpbXBsaWNhdGlvbnMgdGhleSBtaWdodCBoYXZlIG9uIHRoZSBicm9hZGVyIHN5c3RlbS4gSSdtIGdvaW5nIHRvIGNvbnN1bHQgdGhlIEtjb25maWcgZmlsZXMgZGlyZWN0bHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMDM4LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTU6NTA6MTguNjg3OTEzMDI1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NzcxMzI0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVUX1NPQ0tfTVNHXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L0tjb25maWc9NDc1PWNvbmZpZyBORVRfU0VMRlRFU1RTXFxuLS1cXG5uZXQvS2NvbmZpZy00NzgtXFxubmV0L0tjb25maWc6NDc5OmNvbmZpZyBORVRfU09DS19NU0dcXG5uZXQvS2NvbmZpZy00ODAtXFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxNTo1MDoxOC43NTU2MzE5NzRaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjYyNDYwMDAzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudDogRGVjaXBoZXJpbmcgdGhlIE5FVF9TT0NLX01TRyBTZWxlY3RvcioqXG5cbkFscmlnaHQsIHNvIHRoZSBmaXJzdCB0aGluZyBJJ20gZG9pbmcgaXMgbWVudGFsbHkgdHJhY2luZyB0aGUgY29kZSBwYXRocyB0aGF0IGFyZSBnb2luZyB0byBwaWNrIHRoZSBgTkVUX1NPQ0tfTVNHYCBzZWxlY3Rvci4gV2hhdCBjb250ZXh0IGFyZSB3ZSBpbj8gSXMgaXQgYSBrZXJuZWwgbW9kdWxlPyBVc2VyLXNwYWNlIGFwcGxpY2F0aW9uPyBUaGUgaW1wbGljYXRpb25zIGFyZSB2YXN0bHkgZGlmZmVyZW50LiBJJ20gaW1tZWRpYXRlbHkgcnVubmluZyB0aHJvdWdoIHRoZSBsaWtlbHkgc2NlbmFyaW9zIGluIG15IGhlYWQ6IG5ldHdvcmsgc3RhY2sgaW50ZXJhY3Rpb25zLCBzb2NrZXQgaW1wbGVtZW50YXRpb25zLCBtZXNzYWdlIHF1ZXVpbmcsIGFuZCBzbyBvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgdGhpcyBzZWxlY3Rpb24gaXMgKmhhcHBlbmluZyogYmVmb3JlIEkgY2FuIGV2ZW4gYmVnaW4gdG8gdW5kZXJzdGFuZCAqd2h5Ki4gVGhpcyBzZWxlY3Rpb24gbWVjaGFuaXNtIOKAkyB3aGV0aGVyIGl0J3MgYW4gZXZlbnQgbG9vcCwgaW50ZXJydXB0IGhhbmRsZXIsIG9yIHNvbWUgb3RoZXIgcG9sbGluZyBzdHJhdGVneSDigJMgaXMga2V5LiBJJ20gYWxyZWFkeSBlbnZpc2lvbmluZyB0aGUgcG9zc2libGUgYm90dGxlbmVja3MgYW5kIHJhY2UgY29uZGl0aW9ucyB0aGF0IGNvdWxkIGFyaXNlIGRlcGVuZGluZyBvbiB0aGUgY2hvc2VuIGNvbnRleHQuIElzIHRoaXMgYSBuZXcgcGllY2Ugb2YgY29kZSwgb3IgYW0gSSBkZWJ1Z2dpbmcgYW4gZXhpc3Rpbmcgc3lzdGVtPyBUaGUgaW1wbGljYXRpb25zIGNoYW5nZSB0aGUgYXBwcm9hY2ggSSdsbCB0YWtlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjMyNiwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDE1OjUwOjIxLjM4MDIzNDgxNloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njg1MTE2MTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VsZWN0IE5FVF9TT0NLX01TR1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9LY29uZmlnPTM2MT1jb25maWcgQlBGX1NUUkVBTV9QQVJTRVJcXG4tLVxcbm5ldC9LY29uZmlnLTM2Ni1cXHRzZWxlY3QgU1RSRUFNX1BBUlNFUlxcbm5ldC9LY29uZmlnOjM2NzpcXHRzZWxlY3QgTkVUX1NPQ0tfTVNHXFxubmV0L0tjb25maWctMzY4LVxcdGhlbHBcXG4tLVxcbm5ldC9pcHY0L0tjb25maWc9MzgyPWNvbmZpZyBJTkVUX0VTUElOVENQXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTM4NS1cXHRzZWxlY3QgU1RSRUFNX1BBUlNFUlxcbm5ldC9pcHY0L0tjb25maWc6Mzg2OlxcdHNlbGVjdCBORVRfU09DS19NU0dcXG5uZXQvaXB2NC9LY29uZmlnLTM4Ny1cXHRzZWxlY3QgWEZSTV9FU1BJTlRDUFxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZz05MD1jb25maWcgSU5FVDZfRVNQSU5UQ1BcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctOTMtXFx0c2VsZWN0IFNUUkVBTV9QQVJTRVJcXG5uZXQvaXB2Ni9LY29uZmlnOjk0OlxcdHNlbGVjdCBORVRfU09DS19NU0dcXG5uZXQvaXB2Ni9LY29uZmlnLTk1LVxcdHNlbGVjdCBYRlJNX0VTUElOVENQXFxuLS1cXG5uZXQvdGxzL0tjb25maWc9NT1jb25maWcgVExTXFxuLS1cXG5uZXQvdGxzL0tjb25maWctMTAtXFx0c2VsZWN0IENSWVBUT19HQ01cXG5uZXQvdGxzL0tjb25maWc6MTE6XFx0c2VsZWN0IE5FVF9TT0NLX01TR1xcbm5ldC90bHMvS2NvbmZpZy0xMi1cXHRkZWZhdWx0IG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTU6NTA6MjEuNDQ4NzUzMjE1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE2OTU4Mjg0ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIGEgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmN5KipcblxuSG1tLCBzbyBgQ09ORklHX1RMU2AgYW5kIGBDT05GSUdfQlBGX1NUUkVBTV9QQVJTRVJgIGFyZSBib3RoIHB1bGxpbmcgaW4gYE5FVF9TT0NLX01TR2AuIFRoYXTigJlzIGEgYml0IHVudXN1YWw7IEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGVzZSBzZWVtaW5nbHkgZGlzcGFyYXRlIGZlYXR1cmVzIHJlcXVpcmUgdGhlIHNhbWUgdW5kZXJseWluZyBtZWNoYW5pc20uIEl0IG1lYW5zIHRoYXQgdGhlcmUncyBzb21lIGNvbW1vbiBncm91bmQgb3IgZGVwZW5kZW5jeSB0aGF0IEkgbmVlZCB0byBjbGFyaWZ5LiBJIHNob3VsZCBwcm9iYWJseSBkaXZlIGludG8gYG5ldC90bHMvS2NvbmZpZ2AgZmlyc3QuIFRoYXTigJlzIGxpa2VseSB0aGUgb3JpZ2luIG9mIHRoZSBkZXBlbmRlbmN5LCBhbmQgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IG15IGludmVzdGlnYXRpb24uIFBlcmhhcHMgaXQgd2lsbCBzaGVkIHNvbWUgbGlnaHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyODkzLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTU6NTA6MjMuMTQ0NTg0NjU5WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5MzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC90bHMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBUTFMgY29uZmlndXJhdGlvblxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0Y29uZmlnIFRMU1xcbiAgIDY6XFx0XFx0dHJpc3RhdGUgXFxcIlRyYW5zcG9ydCBMYXllciBTZWN1cml0eSBzdXBwb3J0XFxcIlxcbiAgIDc6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUXFxuICAgODpcXHRcXHRzZWxlY3QgQ1JZUFRPXFxuICAgOTpcXHRcXHRzZWxlY3QgQ1JZUFRPX0FFU1xcbiAgMTA6XFx0XFx0c2VsZWN0IENSWVBUT19HQ01cXG4gIDExOlxcdFxcdHNlbGVjdCBORVRfU09DS19NU0dcXG4gIDEyOlxcdFxcdGRlZmF1bHQgblxcbiAgMTM6XFx0XFx0aGVscFxcbiAgMTQ6XFx0XFx0RW5hYmxlIGtlcm5lbCBzdXBwb3J0IGZvciBUTFMgcHJvdG9jb2wuIFRoaXMgYWxsb3dzIHN5bW1ldHJpY1xcbiAgMTU6XFx0XFx0ZW5jcnlwdGlvbiBoYW5kbGluZyBvZiB0aGUgVExTIHByb3RvY29sIHRvIGJlIGRvbmUgaW4ta2VybmVsLlxcbiAgMTY6XFx0XFxuICAxNzpcXHRcXHRJZiB1bnN1cmUsIHNheSBOLlxcbiAgMTg6XFx0XFxuICAxOTpcXHRjb25maWcgVExTX0RFVklDRVxcbiAgMjA6XFx0XFx0Ym9vbCBcXFwiVHJhbnNwb3J0IExheWVyIFNlY3VyaXR5IEhXIG9mZmxvYWRcXFwiXFxuICAyMTpcXHRcXHRkZXBlbmRzIG9uIFRMU1xcbiAgMjI6XFx0XFx0c2VsZWN0IFNLQl9ERUNSWVBURURcXG4gIDIzOlxcdFxcdHNlbGVjdCBTT0NLX1ZBTElEQVRFX1hNSVRcXG4gIDI0OlxcdFxcdHNlbGVjdCBTT0NLX1JYX1FVRVVFX01BUFBJTkdcXG4gIDI1OlxcdFxcdGRlZmF1bHQgblxcbiAgMjY6XFx0XFx0aGVscFxcbiAgMjc6XFx0XFx0RW5hYmxlIGtlcm5lbCBzdXBwb3J0IGZvciBIVyBvZmZsb2FkIG9mIHRoZSBUTFMgcHJvdG9jb2wuXFxuICAyODpcXHRcXG4gIDI5OlxcdFxcdElmIHVuc3VyZSwgc2F5IE4uXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDE1OjUwOjIzLjE0NDY0NjMxOVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxMDk4NDU1MDQwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgaXQ6XG5cbioqRGlnZ2luZyBpbnRvIGVCUEYgYW5kIE5ldHdvcmsgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIHdlJ3JlIGxvb2tpbmcgYXQgbmV0d29yay1yZWxhdGVkIGVCUEYgZnVuY3Rpb25hbGl0eS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcuIEkndmUgYmVlbiBjb25zaWRlcmluZyB0aGlzIGZyb20gdGhlIHBlcnNwZWN0aXZlIG9mIHRoZSBicm9hZGVyIGtlcm5lbCBkZXNpZ24sIGFuZCBzbyBJIHdhbnQgdG8gbWFrZSBzdXJlIEknbSBmdWxseSBhd2FyZSBvZiBldmVyeSBvcHRpb24uXG5cblJpZ2h0LCBzbyB0byBiZSB0aG9yb3VnaCwgSSBzaG91bGQgYWxzbyBzcGVjaWZpY2FsbHkgY2hlY2sgdGhlIGBCUEZfU1RSRUFNX1BBUlNFUmAgY29uZmlndXJhdGlvbiBvcHRpb24gd2l0aGluIGBuZXQvS2NvbmZpZ2AuIFRoaXMgaXMgcHJvYmFibHkgd2hlcmUgdGhlIHJlYWxseSBmaW5lLWdyYWluZWQsIHN0cmVhbS1iYXNlZCBwYWNrZXQgaW5zcGVjdGlvbiBhbmQgbWFuaXB1bGF0aW9uIGxpdmVzLiBJIHdhbnQgdG8gbWFrZSBzdXJlIEkgY29tcGxldGVseSB1bmRlcnN0YW5kIGl0cyBjYXBhYmlsaXRpZXMgYW5kIGhvdyBpdCBtaWdodCBmaXQgaW50byB0aGUgbGFyZ2VyIHBpY3R1cmUgb2Ygb3VyIGVCUEYgd29yay4gSXQgbWlnaHQgYmUgYSBrZXkgY29tcG9uZW50LCBvciBpdCBtaWdodCBiZSB0YW5nZW50aWFsLiBFaXRoZXIgd2F5LCBiZXN0IHRvIGNvbmZpcm0uIEkgc2hvdWxkIGFkZCB0aGlzIHRvIG15IG1lbnRhbCBjaGVja2xpc3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNDM0LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxNTo1MDozNC4xMjkxOTg3NThaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzA4MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMzU1LFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzU1OlxcdFxcdGJvb2xcXG4gMzU2OlxcdFxcdHByb21wdCBcXFwiRW5hYmxlIEJ5dGUgUXVldWUgTGltaXRzXFxcIlxcbiAzNTc6XFx0XFx0ZGVwZW5kcyBvbiBTWVNGU1xcbiAzNTg6XFx0XFx0c2VsZWN0IERRTFxcbiAzNTk6XFx0XFx0ZGVmYXVsdCB5XFxuIDM2MDpcXHRcXG4gMzYxOlxcdGNvbmZpZyBCUEZfU1RSRUFNX1BBUlNFUlxcbiAzNjI6XFx0XFx0Ym9vbCBcXFwiZW5hYmxlIEJQRiBTVFJFQU1fUEFSU0VSXFxcIlxcbiAzNjM6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUXFxuIDM2NDpcXHRcXHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMXFxuIDM2NTpcXHRcXHRkZXBlbmRzIG9uIENHUk9VUF9CUEZcXG4gMzY2OlxcdFxcdHNlbGVjdCBTVFJFQU1fUEFSU0VSXFxuIDM2NzpcXHRcXHRzZWxlY3QgTkVUX1NPQ0tfTVNHXFxuIDM2ODpcXHRcXHRoZWxwXFxuIDM2OTpcXHRcXHQgIEVuYWJsaW5nIHRoaXMgYWxsb3dzIGEgVENQIHN0cmVhbSBwYXJzZXIgdG8gYmUgdXNlZCB3aXRoXFxuIDM3MDpcXHRcXHQgIEJQRl9NQVBfVFlQRV9TT0NLTUFQLlxcbiAzNzE6XFx0XFxuIDM3MjpcXHRjb25maWcgTkVUX0ZMT1dfTElNSVRcXG4gMzczOlxcdFxcdGJvb2wgXFxcIk5ldCBmbG93IGxpbWl0XFxcIlxcbiAzNzQ6XFx0XFx0ZGVwZW5kcyBvbiBSUFNcXG4gMzc1OlxcdFxcdGRlZmF1bHQgeVxcbiAzNzY6XFx0XFx0aGVscFxcbiAzNzc6XFx0XFx0ICBUaGUgbmV0d29yayBzdGFjayBoYXMgdG8gZHJvcCBwYWNrZXRzIHdoZW4gYSByZWNlaXZlIHByb2Nlc3NpbmcgQ1BVJ3NcXG4gMzc4OlxcdFxcdCAgYmFja2xvZyByZWFjaGVzIG5ldGRldl9tYXhfYmFja2xvZy4gSWYgYSBmZXcgb3V0IG9mIG1hbnkgYWN0aXZlIGZsb3dzXFxuIDM3OTpcXHRcXHQgIGdlbmVyYXRlIHRoZSB2YXN0IG1ham9yaXR5IG9mIGxvYWQsIGRyb3AgdGhlaXIgdHJhZmZpYyBlYXJsaWVyIHRvXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDE1OjUwOjM0LjEyOTI3MTQ2OFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo1NTc5NTAzMzM5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBLZXJuZWwgUGF0Y2ggZm9yIEZ1enppbmcgUHJpb3JpdGl6YXRpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoZSBmaXJzdCB0aGluZyBJJ20gZG9pbmcgaXMgZXhhbWluaW5nIHRoZSBHaXQgaGlzdG9yeSB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoZSBwYXRjaC4gSSdtIGxvb2tpbmcgZm9yIGNsdWVzIGluIHRoZSBjb21taXQgbWVzc2FnZXMgdG8gc2VlIHRoZSAqd2h5KiBiZWhpbmQgdGhpcyBjb2RlIGNoYW5nZS4gR3JlcHBpbmcgaXNuJ3QgaW1tZWRpYXRlbHkgeWllbGRpbmcgYW55dGhpbmcgZGlyZWN0bHksIGJ1dCBJIGNhbiBzZWUgdGhlIHBhdGNoIGl0c2VsZiBpcyBtb2RpZnlpbmcgYG5ldC9pcHY0L3RjcF9icGYuY2AgYW5kIGBuZXQvdGxzL3Rsc19tYWluLmNgLlxuXG5UaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIHRoZSByZW1vdmFsIG9mIHJlZHVuZGFudCBjYWxscyB0byBgdGNwX3JhdGVfY2hlY2tfYXBwX2xpbWl0ZWQoc2spYCB3aXRoaW4gdGhlIGB0Y3BfYnBmX3B1c2hgIGFuZCBgdGxzX3B1c2hfc2dgIGZ1bmN0aW9ucy4gVGhlc2UgZnVuY3Rpb25zIGFyZSBpbnZvbHZlZCBpbiBwdXNoaW5nIGRhdGEsIGluIEJQRiBhbmQgVExTIGNvbnRleHRzIHJlc3BlY3RpdmVseSwgb3ZlciBUQ1AuIFRoZSByZWR1bmRhbnQgY2hlY2ssIGlmIG5vdCByZW1vdmVkLCBjb3VsZCBoYXZlIGFmZmVjdGVkIHBlcmZvcm1hbmNlLCBjYXVzaW5nIGFuIHVubmVjZXNzYXJ5IHRocm90dGxlLlxuXG5Ob3csIEknbSB0aGlua2luZyBhYm91dCByZWFjaGFiaWxpdHkuIEFyZSB0aGVzZSBmdW5jdGlvbnMgZXhwb3NlZCB0byBmdXp6ZXI/IFllcywgYW5kIHRoYXQgaXMgdmVyeSBpbXBvcnRhbnQgdG8gY29uc2lkZXIgd2hlbiBkZWNpZGluZyBpZiB0aGlzIGlzIHdvcnRoeSBvZiBmdXp6aW5nLiBJIGNhbiBjb25maXJtIHRoZXNlIGFyZSBkZWZpbml0ZWx5IHJlYWNoYWJsZSB2aWEgc3l6a2FsbGVyLCBjb25zaWRlcmluZyBzdGFuZGFyZCBzeXprYWxsZXIgdGFyZ2V0cyBmb3Igc29ja2V0cyB3aXRoIFRMUyBVTFAsIGFzIHdlbGwgYXMgQlBGIHNvY2ttYXAvc2tfbXNnIHByb2dyYW1zLiBUaGF0IG1ha2VzIHRoaXMgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1enppbmcsIGFuZCBpdCdzIGEgZ29vZCBwbGFjZSB0byBzdGFydCwgYmFzZWQgb24gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgc3lzdGVtLlxuXG5Ob3csIEknbSBjb25zaWRlcmluZyBmdXp6aW5nIHByaW9yaXR5LiBUaGlzIGlzIGEgcmVmYWN0b3JpbmcvY2xlYW51cCB3aGVyZSByZWFjaGFibGUgY29kZSBpcyBtb2RpZmllZCwgc28gYnkgbXkgY3JpdGVyaWEgYW5kIHRoZSBcIldvcnRoRnV6emluZ1wiIGd1aWRlbGluZXMsIHRoaXMgaXMgYSBkZWZpbml0ZSBcInRydWVcIi4gVGhlIHJlbW92YWwgb2YgdGhlIGB0Y3BfcmF0ZV9jaGVja19hcHBfbGltaXRlZCgpYCBjYWxscywgd2hpbGUgc2VlbWluZ2x5IG1pbm9yLCBjb3VsZCBwb3RlbnRpYWxseSBhbHRlciB0aW1pbmcgb3IgaW50cm9kdWNlIHN1YnRsZSBiZWhhdmlvcmFsIGNoYW5nZXMgdGhhdCBtaWdodCB1bmNvdmVyIGEgYnVnLlxuXG5OZXh0LCBJJ20gaWRlbnRpZnlpbmcgdGhlIG1vc3QgcmVsZXZhbnQgc3ltYm9scyB0byB0YXJnZXQgd2l0aCB0aGUgZnV6emVyLiBNeSBmb2N1cyBpcyBvbiBlbnRyeSBwb2ludHMgYW5kIHRoZSBmdW5jdGlvbnMgdGhhdCBhcmUgZGlyZWN0bHkgbW9kaWZpZWQuIExldCdzIHNlZS4uLlxuKiAgIGB0Y3BfYnBmX3B1c2hgOiBBbHRob3VnaCBpdCBpcyBhIHN0YXRpYyBmdW5jdGlvbiwgSSdsbCBjaGVjayBpdHMgY2FsbGVycyBhbmQgc2VlIGlmIGl0IGNhbiBiZSB0YXJnZXRlZC4gSWYgbm90IGlubGluZWQsIGl0IG1heSBoYXZlIGEgc3ltYm9sLCBidXQgSSB3aWxsIHN0aWxsIHRhcmdldCB0aGUgZnVuY3Rpb25zIHRoYXQgY2FsbCBpdC5cbiogICBgdGxzX3B1c2hfc2dgOiBUaGlzIGxvb2tzIGxpa2UgYW4gZXhjZWxsZW50IGNhbmRpZGF0ZSBzaW5jZSBpdCdzIGRpcmVjdGx5IG1vZGlmaWVkLCBub24tc3RhdGljLCBhbmQgcGFydCBvZiB0aGUgbWFpbiBjaGFuZ2UuXG4qICAgYHRjcF9icGZfc2VuZG1zZ2A6IFRoaXMgaXMgYSBub24tc3RhdGljIGNhbGxlciBvZiB0aGUgbW9kaWZpZWQgYHRjcF9icGZfcHVzaGAuXG4qICAgYHRjcF9icGZfc2VuZG1zZ19yZWRpcmA6IFRoaXMgaXMgYWxzbyBhIG5vbi1zdGF0aWMgY2FsbGVyIG9mIHRoZSBtb2RpZmllZCBgdGNwX2JwZl9wdXNoYC5cblxuQW5kIEknbGwgYWRkIGB0bHNfdHhfcmVjb3Jkc2Agb3IgYHRsc19zd19zZW5kbXNnYCB0byBteSBzeW1ib2wgbGlzdCBhcyB3ZWxsLlxuXG5GaW5hbGx5LCBJIG5lZWQgdG8gbG9vayBhdCB0aGUgcmVxdWlyZWQga2VybmVsIGNvbmZpZ3VyYXRpb25zLiBUbyBjb21waWxlIHRoZSBjb2RlLCBgTkVUX1NPQ0tfTVNHYCBpcyByZXF1aXJlZCwgd2hpY2ggaXMgZW5hYmxlZCBieSBgQlBGX1NUUkVBTV9QQVJTRVJgLCBgSU5FVF9FU1BJTlRDUGAsIGBJTkVUNl9FU1BJTlRDUGAsIGFuZCBgVExTYC4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhlc2UgYXJlIGFjdGl2ZSB0byByZXByb2R1Y2UgdGhlIHRhcmdldCBmdW5jdGlvbmFsaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDAyNSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3NDksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxNTo1MToyOS45MjQzMDc0MjRaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3Mzg2NDA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIk5FVF9TT0NLX01TR1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9LY29uZmlnPTM2MT1jb25maWcgQlBGX1NUUkVBTV9QQVJTRVJcXG4tLVxcbm5ldC9LY29uZmlnLTM2Ni1cXHRzZWxlY3QgU1RSRUFNX1BBUlNFUlxcbm5ldC9LY29uZmlnOjM2NzpcXHRzZWxlY3QgTkVUX1NPQ0tfTVNHXFxubmV0L0tjb25maWctMzY4LVxcdGhlbHBcXG4tLVxcbm5ldC9LY29uZmlnPTQ3NT1jb25maWcgTkVUX1NFTEZURVNUU1xcbi0tXFxubmV0L0tjb25maWctNDc4LVxcbm5ldC9LY29uZmlnOjQ3OTpjb25maWcgTkVUX1NPQ0tfTVNHXFxubmV0L0tjb25maWctNDgwLVxcdGJvb2xcXG4tLVxcbm5ldC9LY29uZmlnLTQ4Mi1cXHRoZWxwXFxubmV0L0tjb25maWc6NDgzOlxcdCAgVGhlIE5FVF9TT0NLX01TRyBwcm92aWRlcyBhIGZyYW1ld29yayBmb3IgcGxhaW4gc29ja2V0cyAoZS5nLiBUQ1ApIG9yXFxubmV0L0tjb25maWctNDg0LVxcdCAgVUxQcyAodXBwZXIgbGF5ZXIgbW9kdWxlcywgZS5nLiBUTFMpIHRvIHByb2Nlc3MgTDcgYXBwbGljYXRpb24gZGF0YVxcbi0tXFxubmV0L2NvcmUvTWFrZWZpbGU9NDM9b2JqLSQoQ09ORklHX0ZBSUxPVkVSKSArPSBmYWlsb3Zlci5vXFxubmV0L2NvcmUvTWFrZWZpbGU6NDQ6b2JqLSQoQ09ORklHX05FVF9TT0NLX01TRykgKz0gc2ttc2cub1xcbm5ldC9jb3JlL01ha2VmaWxlLTQ1LW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gc29ja19tYXAub1xcbi0tXFxubmV0L2lwdjQvS2NvbmZpZz0zODI9Y29uZmlnIElORVRfRVNQSU5UQ1BcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctMzg1LVxcdHNlbGVjdCBTVFJFQU1fUEFSU0VSXFxubmV0L2lwdjQvS2NvbmZpZzozODY6XFx0c2VsZWN0IE5FVF9TT0NLX01TR1xcbm5ldC9pcHY0L0tjb25maWctMzg3LVxcdHNlbGVjdCBYRlJNX0VTUElOVENQXFxuLS1cXG5uZXQvaXB2NC9NYWtlZmlsZT02Mj1vYmotJChDT05GSUdfVENQX0NPTkdfSUxMSU5PSVMpICs9IHRjcF9pbGxpbm9pcy5vXFxubmV0L2lwdjQvTWFrZWZpbGU6NjM6b2JqLSQoQ09ORklHX05FVF9TT0NLX01TRykgKz0gdGNwX2JwZi5vXFxubmV0L2lwdjQvTWFrZWZpbGUtNjQtb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSB1ZHBfYnBmLm9cXG4tLVxcbm5ldC9pcHY2L0tjb25maWc9OTA9Y29uZmlnIElORVQ2X0VTUElOVENQXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTkzLVxcdHNlbGVjdCBTVFJFQU1fUEFSU0VSXFxubmV0L2lwdjYvS2NvbmZpZzo5NDpcXHRzZWxlY3QgTkVUX1NPQ0tfTVNHXFxubmV0L2lwdjYvS2NvbmZpZy05NS1cXHRzZWxlY3QgWEZSTV9FU1BJTlRDUFxcbi0tXFxubmV0L3Rscy9LY29uZmlnPTU9Y29uZmlnIFRMU1xcbi0tXFxubmV0L3Rscy9LY29uZmlnLTEwLVxcdHNlbGVjdCBDUllQVE9fR0NNXFxubmV0L3Rscy9LY29uZmlnOjExOlxcdHNlbGVjdCBORVRfU09DS19NU0dcXG5uZXQvdGxzL0tjb25maWctMTItXFx0ZGVmYXVsdCBuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDE1OjUxOjI5Ljk5MTcwMTE4M1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo2OTc2MzY0MjEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgcHJvY2VzcywgdGhpbmtpbmcgYXMgaWYgSSdtIG5hdmlnYXRpbmcgdGhpcyBteXNlbGY6XG5cbioqRGl2aW5nIGludG8gYG5ldC90bHMvTWFrZWZpbGVgKipcblxuT2theSwgc28gSSBuZWVkIHRvIGNoZWNrIG91dCBgbmV0L3Rscy9NYWtlZmlsZWAuIFRoaXMgbGlrZWx5IG1lYW5zIEknbSB3b3JraW5nIHdpdGggdGhlIFRMUyBpbXBsZW1lbnRhdGlvbiB3aXRoaW4gdGhpcyBuZXR3b3JrIGNvbnRleHQuIEknbSBwcm9iYWJseSBsb29raW5nIGZvciBidWlsZCBpbnN0cnVjdGlvbnMsIGRlcGVuZGVuY2llcywgb3IgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gVExTLiBNeSBpbnR1aXRpb24gdGVsbHMgbWUgdGhhdCB0aGlzIE1ha2VmaWxlIGlzIGEgY2VudHJhbCBwb2ludCBmb3IgbWFuYWdpbmcgdGhlIGNvbXBpbGF0aW9uIGFuZCBsaW5raW5nIG9mIFRMUy1yZWxhdGVkIGNvZGUgd2l0aGluIHRoaXMgcHJvamVjdCwgYXNzdW1pbmcgdGhpcyBpcyBhIHByb2plY3QgZm9sbG93aW5nIGNvbnZlbnRpb25hbCBtYWtlZmlsZSBzdHJ1Y3R1cmVzLiBJJ2xsIG5lZWQgdG8gc2VlIGhvdyBpdCBpbnRlZ3JhdGVzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIGJ1aWxkIHN5c3RlbS4gQXJlIHRoZXJlIHNwZWNpZmljIGNvbXBpbGVyIGZsYWdzIGRlZmluZWQ/IEFyZSB0aGVyZSBhbnkgY3VzdG9tIGxpbmtpbmcgc3RlcHM/IEl04oCZcyBhbHNvIHBvc3NpYmxlIEkgYW0gZGVidWdnaW5nLCBhbmQgdGh1cyBuZWVkIHRvIGV4YW1pbmUgc3BlY2lmaWMgdGFyZ2V0cyBvciB2YXJpYWJsZXMsIHBlcmhhcHMgcmVsYXRlZCB0byBkZWJ1ZyBmbGFncy4gSSdsbCBuZWVkIHRvIHF1aWNrbHkgZ2V0IGEgc2Vuc2Ugb2YgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlIGFuZCBsb2dpYyB0byB1bmRlcnN0YW5kIHdoYXQncyBnb2luZyBvbiBoZXJlLiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZGlnIHVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODA4OSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDE1OjUxOjM2Ljk2ODA2ODc0NloiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NDMyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvdGxzL01ha2VmaWxlXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIE1ha2VmaWxlIGZvciB0aGUgVExTIHN1YnN5c3RlbS5cXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0Q0ZMQUdTX3RyYWNlLm8gOj0gLUkkKHNyYylcXG4gICA3OlxcdFxcbiAgIDg6XFx0b2JqLSQoQ09ORklHX1RMUykgKz0gdGxzLm9cXG4gICA5OlxcdFxcbiAgMTA6XFx0dGxzLXkgOj0gdGxzX21haW4ubyB0bHNfc3cubyB0bHNfcHJvYy5vIHRyYWNlLm8gdGxzX3N0cnAub1xcbiAgMTE6XFx0XFxuICAxMjpcXHR0bHMtJChDT05GSUdfVExTX0RFVklDRSkgKz0gdGxzX2RldmljZS5vIHRsc19kZXZpY2VfZmFsbGJhY2sub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxNTo1MTozNi45NjgxNTUyNDZaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6OTg0NDc4NDYzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBLZXJuZWwgVExTIGFuZCBCUEYgU29ja21hcCBJbnRlZ3JhdGlvbiBmb3IgRnV6emluZyoqXG5cbk9rYXksIHNvIGhlcmUncyB0aGUgYnJlYWtkb3duIG9mIHdoYXQgSSd2ZSBqdXN0IGJlZW4gd29ya2luZyB0aHJvdWdoLiBNeSBwcmltYXJ5IGdvYWwgaGVyZSBpcyB0byB1bmRlcnN0YW5kIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbnMgYW5kIGNvZGUgcGF0aHMgcmVsZXZhbnQgdG8gVENQIEJQRiBzb2NrbWFwIGFuZCBLZXJuZWwgVExTLCBpbiBvcmRlciB0byBkZXRlcm1pbmUgYSBnb29kIGZ1enplciBjb25maWd1cmF0aW9uLlxuXG5GaXJzdCwgYENPTkZJR19UTFNgIGlzIGNyaXRpY2FsLiBJdCBjb21waWxlcyBgdGxzLm9gLCB3aGljaCBpbmNsdWRlcyBgdGxzX21haW4ub2AuIENydWNpYWxseSwgYENPTkZJR19UTFNgIGRlcGVuZHMgb24gYENPTkZJR19JTkVUYCwgd2hpY2ggaXMgZXhwZWN0ZWQuIEFsc28sIGBDT05GSUdfVExTYCBhdXRvbWF0aWNhbGx5IHNlbGVjdHMgYENPTkZJR19ORVRfU09DS19NU0dgLCBhbmQgdGhhdOKAmXMgaW1wb3J0YW50IGJlY2F1c2UgaXQgYnVpbGRzIGB0Y3BfYnBmLm9gLlxuXG5Ob3csIGlmIHdlIHdhbnQgdG8gdXNlIEJQRiBzb2NrbWFwIHdpdGggVENQLCB3ZSdyZSBnb2luZyB0byBuZWVkIGBDT05GSUdfQlBGX1NZU0NBTExgIGFuZCBgQ09ORklHX0JQRl9TVFJFQU1fUEFSU0VSYC4gYENPTkZJR19CUEZfU1RSRUFNX1BBUlNFUmAgYWxzbyBpbXBsaWNpdGx5IHNlbGVjdHMgYE5FVF9TT0NLX01TR2AuXG5cbk15IGltbWVkaWF0ZSBjb25jbHVzaW9uIGlzIHRoYXQgZW5hYmxpbmcgYFRMU2AgYW5kIGBCUEZfU1RSRUFNX1BBUlNFUmAgYWxvbmdzaWRlIGBCUEZfU1lTQ0FMTGAsIGBORVRfU09DS19NU0dgLCBhbmQgYElORVRgIGd1YXJhbnRlZXMgdGhhdCBib3RoIGB0Y3BfYnBmLmNgIGFuZCBgdGxzX21haW4uY2AgYXJlIGNvbXBpbGVkIGFuZCBhdmFpbGFibGUuIEkgbmVlZCB0byBtYWtlIHN1cmUgYENPTkZJR19UTFNgIGNhbiBiZSBzZXQgdG8gZWl0aGVyIGJ1aWx0LWluIG9yIGEgbW9kdWxlIHNpbmNlIFN5emthbGxlciBydW5zIGtlcm5lbHMgd2l0aCBlaXRoZXIgb2YgdGhvc2Ugc2V0dGluZ3MuXG5cbkxldCdzIHN1bW1hcml6ZSB0aGUga2V5IGNvbmZpZ3VyYXRpb25zOlxuLSAgIGBUTFNgOiBCdWlsZHMgYG5ldC90bHMvdGxzX21haW4uY2AgYW5kIHNlbGVjdHMgYE5FVF9TT0NLX01TR2AuXG4tICAgYE5FVF9TT0NLX01TR2A6IEJ1aWxkcyBgbmV0L2lwdjQvdGNwX2JwZi5jYCAoc2VsZWN0ZWQgYnkgYFRMU2AgYW5kIGBCUEZfU1RSRUFNX1BBUlNFUmAgYnV0IGNhbiBhbHNvIGJlIGV4cGxpY2l0bHkgc3BlY2lmaWVkKS5cbi0gICBgQlBGX1NZU0NBTExgOiBFc3NlbnRpYWwgZm9yIHV0aWxpemluZyBgdGNwX2JwZmAgc29ja21hcCBmdW5jdGlvbmFsaXR5LlxuLSAgIGBCUEZfU1RSRUFNX1BBUlNFUmA6IEVuYWJsZXMgdGhlIEJQRiBzdHJlYW0gcGFyc2VyIHNvY2ttYXAuXG5cbkkndmUgYWxzbyBjb25maXJtZWQgdGhhdCBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBlc3NlbnRpYWwgZm9yIGhvb2tpbmcgYHRjcF9icGZfdXBkYXRlX3Byb3RvYCBpbnRvIHRoZSBzb2NrZXQsIHNwZWNpZmljYWxseSB2aWEgYSBjaGVjayBpbiBgdGNwX2JwZi5jYCB0aGF0IHNob3dzIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIHJlcXVpcmVkIGZvciBhdHRhY2hpbmcgdGhlIHBzb2NrIGFuZCB1c2luZyBgdGNwX2JwZmAgZnVuY3Rpb25hbGl0eS4gV2l0aG91dCBpdCwgdGhlIG9wZXJhdGlvbnMgZnJvbSBgdGNwX2JwZmAgYXJlIG5vdCB1c2VkIGJ5IHRoZSBzb2NrbWFwLlxuXG5UbyByZWNhcCwgdGhlIGNvcmUgY29uZmlndXJhdGlvbnMgSSdsbCB3YW50IHRvIHRhcmdldCBhcmU6XG5cbiogICBgVExTYFxuKiAgIGBCUEZfU1lTQ0FMTGBcbiogICBgQlBGX1NUUkVBTV9QQVJTRVJgXG4qICAgYE5FVF9TT0NLX01TR2BcblxuTXkgbmV4dCB0aG91Z2h0IHByb2Nlc3MgaW52b2x2ZXMgY29uc2lkZXJpbmcgcG90ZW50aWFsIGZvY3VzIHN5bWJvbHMuIEkndmUgbm90ZWQgZG93biB0aGUgZm9sbG93aW5nIGZ1bmN0aW9ucyB0byBjb25zaWRlciBmb3IgbW9yZSBjYXJlZnVsIGludmVzdGlnYXRpb246XG5cbiogICBgdGNwX2JwZl9wdXNoYFxuKiAgIGB0Y3BfYnBmX3NlbmRtc2dgXG4qICAgYHRjcF9icGZfc2VuZG1zZ19yZWRpcmBcbiogICBgdGxzX3B1c2hfc2dgXG4qICAgYHRsc190eF9yZWNvcmRzYFxuKiAgIGB0bHNfcHVzaF9wYXJ0aWFsX3JlY29yZGBcblxuVXBvbiBhIGNhcmVmdWwgcmV2aWV3LCBJJ3ZlIGNvbmZpcm1lZCB0aGF0IG5vbmUgb2YgdGhlc2UgYXJlIGNvbnNpZGVyZWQgYXMgdWJpcXVpdG91cyBsaWZlY3ljbGUgZnVuY3Rpb25zIGFuZCB0aGV5IGFyZSBhbGwgc3BlY2lmaWMgdG8gVENQIEJQRiBzdHJlYW0gaGFuZGxpbmcgYW5kIHRoZSBLZXJuZWwgVExTIHRyYW5zbWl0IHBhdGguXG5cbkZpbmFsbHksIEkndmUgcmV2aWV3ZWQgdGhlIHJlYXNvbmluZyBiZWhpbmQgdGhlIGNoYW5nZXMgdG8gbWFrZSBzdXJlIEkgY2xlYXJseSB1bmRlcnN0YW5kIHRoZSBpbnRlbnQuIFRoZSBwYXRjaCByZW1vdmVzIHJlZHVuZGFudCBjYWxscyB0byBgdGNwX3JhdGVfY2hlY2tfYXBwX2xpbWl0ZWQoKWAgZnJvbSBgdGNwX2JwZl9wdXNoYCBpbiBgbmV0L2lwdjQvdGNwX2JwZi5jYCBhbmQgYHRsc19wdXNoX3NnYCBpbiBgbmV0L3Rscy90bHNfbWFpbi5jYC4gYHRjcF9zZW5kbXNnX2xvY2tlZCgpYCBpcyBhbHJlYWR5IGludGVybmFsbHkgcGVyZm9ybWluZyB0aGlzIHJhdGUgY2hlY2suIFRoZXNlIGNoYW5nZXMgbW9kaWZ5IGV4ZWN1dGlvbiBwYXRocyBpbiBjb3JlIFRDUCBCUEYgYW5kIFRMUyBuZXR3b3JraW5nLCB3aGljaCBhcmUgYWNjZXNzZWQgZnJvbSB1c2Vyc3BhY2UgdmlhIFRDUCBzb2NrZXRzIHdpdGggVExTIFVMUCBvciBCUEYgc29ja21hcC4gVGhlIGZ1enppbmcgYXBwcm9hY2ggaXMgZnVsbHkganVzdGlmaWVkIHRvIGVuc3VyZSB0aGF0IHJlbW92aW5nIHRoZXNlIGNhbGxzIGRvZXMgbm90IGFmZmVjdCByYXRlIGNoZWNrIHN0YXRlIGhhbmRsaW5nIG9yIHNvY2tldCBiZWhhdmlvciBkdXJpbmcgdHJhbnNtaXNzaW9uLlxuXG5JJ20gY29uZmlkZW50IGluIG15IGFuYWx5c2lzLiBJdCBhbGlnbnMgd2l0aCB0aGUgaW5zdHJ1Y3Rpb25zLCBhbmQgSSdtIHJlYWR5IHRvIHByb2NlZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NTEyLCJPdXRwdXRUb2tlbnMiOjI0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg2NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDE1OjUxOjQ2LjgxMjk0MjI5MVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxMjkyNjQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUTFNcIixcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJCUEZfU1RSRUFNX1BBUlNFUlwiLFxuICAgIFwiTkVUX1NPQ0tfTVNHXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGxzX3B1c2hfc2dcIixcbiAgICBcInRsc190eF9yZWNvcmRzXCIsXG4gICAgXCJ0bHNfcHVzaF9wYXJ0aWFsX3JlY29yZFwiLFxuICAgIFwidGNwX2JwZl9wdXNoXCIsXG4gICAgXCJ0Y3BfYnBmX3NlbmRtc2dcIixcbiAgICBcInRjcF9icGZfc2VuZG1zZ19yZWRpclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlbW92ZXMgcmVkdW5kYW50IGNhbGxzIHRvIHRjcF9yYXRlX2NoZWNrX2FwcF9saW1pdGVkKCkgZnJvbSB0Y3BfYnBmX3B1c2goKSBpbiBuZXQvaXB2NC90Y3BfYnBmLmMgYW5kIHRsc19wdXNoX3NnKCkgaW4gbmV0L3Rscy90bHNfbWFpbi5jLCBiZWNhdXNlIHRjcF9zZW5kbXNnX2xvY2tlZCgpIGFscmVhZHkgaW52b2tlcyB0Y3BfcmF0ZV9jaGVja19hcHBfbGltaXRlZCgpLiBUaGUgbW9kaWZpY2F0aW9ucyBhZmZlY3QgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlIHBhdGhzIGluIHRoZSBUQ1AgQlBGIGFuZCBUTFMgVUxQIHRyYW5zbWl0IHBpcGVsaW5lcy4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIHVuZXhwZWN0ZWQgc2lkZSBlZmZlY3RzIG9jY3VyIGluIFRDUCByYXRlIGxpbWl0aW5nIGFuZCB0cmFuc21pc3Npb24gbG9naWMgd2hlbiBzZW5kaW5nIGRhdGEgb3ZlciBUTFMgb3IgQlBGIHJlZGlyZWN0ZWQgc29ja2V0cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUTFNcIixcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJCUEZfU1RSRUFNX1BBUlNFUlwiLFxuICAgIFwiTkVUX1NPQ0tfTVNHXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGxzX3B1c2hfc2dcIixcbiAgICBcInRsc190eF9yZWNvcmRzXCIsXG4gICAgXCJ0bHNfcHVzaF9wYXJ0aWFsX3JlY29yZFwiLFxuICAgIFwidGNwX2JwZl9wdXNoXCIsXG4gICAgXCJ0Y3BfYnBmX3NlbmRtc2dcIixcbiAgICBcInRjcF9icGZfc2VuZG1zZ19yZWRpclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlbW92ZXMgcmVkdW5kYW50IGNhbGxzIHRvIHRjcF9yYXRlX2NoZWNrX2FwcF9saW1pdGVkKCkgZnJvbSB0Y3BfYnBmX3B1c2goKSBpbiBuZXQvaXB2NC90Y3BfYnBmLmMgYW5kIHRsc19wdXNoX3NnKCkgaW4gbmV0L3Rscy90bHNfbWFpbi5jLCBiZWNhdXNlIHRjcF9zZW5kbXNnX2xvY2tlZCgpIGFscmVhZHkgaW52b2tlcyB0Y3BfcmF0ZV9jaGVja19hcHBfbGltaXRlZCgpLiBUaGUgbW9kaWZpY2F0aW9ucyBhZmZlY3QgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlIHBhdGhzIGluIHRoZSBUQ1AgQlBGIGFuZCBUTFMgVUxQIHRyYW5zbWl0IHBpcGVsaW5lcy4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIHVuZXhwZWN0ZWQgc2lkZSBlZmZlY3RzIG9jY3VyIGluIFRDUCByYXRlIGxpbWl0aW5nIGFuZCB0cmFuc21pc3Npb24gbG9naWMgd2hlbiBzZW5kaW5nIGRhdGEgb3ZlciBUTFMgb3IgQlBGIHJlZGlyZWN0ZWQgc29ja2V0cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTU6NTE6NDYuODk0MjQzNDQ4WiIsIlNlcSI6MjgsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDQ0NzM1MTMxNDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxNTo1MTo0Ni44OTQ3MjE1MjhaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxNDQ0NzMwMjk4OTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlbW92ZXMgcmVkdW5kYW50IGNhbGxzIHRvIHRjcF9yYXRlX2NoZWNrX2FwcF9saW1pdGVkKHNrKSBmcm9tIHRjcF9icGZfcHVzaCgpIGluIG5ldC9pcHY0L3RjcF9icGYuYyBhbmQgdGxzX3B1c2hfc2coKSBpbiBuZXQvdGxzL3Rsc19tYWluLmMuIEluIGJvdGggY2FzZXMsIHRjcF9zZW5kbXNnX2xvY2tlZCgpIGlzIGNhbGxlZCBpbW1lZGlhdGVseSBmb2xsb3dpbmcgYW5kIGFscmVhZHkgaW52b2tlcyB0Y3BfcmF0ZV9jaGVja19hcHBfbGltaXRlZChzaykuXFxuXFxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24sIGJ1ZmZlciBsZW5ndGhzLCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgY29weWluZyB0byB1c2VyIHNwYWNlLiBUaGVyZSBpcyBubyByaXNrIG9mIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnksIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGZpZWxkcywgb3IgY2F1c2luZyBpbmZvcm1hdGlvbiBsZWFrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhNWRlZDA4NDRiZTU2OTRiNmIyMDI1MDdhZDY1MTRiODQxM2FjYWIzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgMTUgMTU6MDE6MDkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfYnBmLmMgYi9uZXQvaXB2NC90Y3BfYnBmLmNcbmluZGV4IDJlMjM0ZDE1NWI1ZTYuLmQ1ZmNmM2NlNDg2MWEgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC90Y3BfYnBmLmNcbisrKyBiL25ldC9pcHY0L3RjcF9icGYuY1xuQEAgLTEwOCw3ICsxMDgsNiBAQCBzdGF0aWMgaW50IHRjcF9icGZfcHVzaChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19tc2cgKm1zZywgdTMyIGFwcGx5X2J5dGVzLFxuIFx0XHRvZmYgID0gc2dlLVx1MDAzZW9mZnNldDtcbiBcdFx0cGFnZSA9IHNnX3BhZ2Uoc2dlKTtcbiBcbi1cdFx0dGNwX3JhdGVfY2hlY2tfYXBwX2xpbWl0ZWQoc2spO1xuIHJldHJ5OlxuIFx0XHRtc2doZHIubXNnX2ZsYWdzID0gZmxhZ3MgfCBNU0dfU1BMSUNFX1BBR0VTO1xuIFx0XHRoYXNfdHhfdWxwID0gdGxzX3N3X2hhc19jdHhfdHgoc2spO1xuZGlmZiAtLWdpdCBhL25ldC90bHMvdGxzX21haW4uYyBiL25ldC90bHMvdGxzX21haW4uY1xuaW5kZXggZmJiMjc0Mjg3YWE1Zi4uOGJkYjc4NzE4YThkNCAxMDA2NDRcbi0tLSBhL25ldC90bHMvdGxzX21haW4uY1xuKysrIGIvbmV0L3Rscy90bHNfbWFpbi5jXG5AQCAtMTg1LDggKzE4NSw2IEBAIGludCB0bHNfcHVzaF9zZyhzdHJ1Y3Qgc29jayAqc2ssXG4gXG4gXHRjdHgtXHUwMDNlc3BsaWNpbmdfcGFnZXMgPSB0cnVlO1xuIFx0d2hpbGUgKDEpIHtcbi1cdFx0LyogaXMgc2VuZGluZyBhcHBsaWNhdGlvbi1saW1pdGVkPyAqL1xuLVx0XHR0Y3BfcmF0ZV9jaGVja19hcHBfbGltaXRlZChzayk7XG4gXHRcdHAgPSBzZ19wYWdlKHNnKTtcbiByZXRyeTpcbiBcdFx0YnZlY19zZXRfcGFnZShcdTAwMjZidmVjLCBwLCBzaXplLCBvZmZzZXQpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTU6NTE6NDYuODk0NzIzMDc4WiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjg4MzA2MDc4OTA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2ggU2VyaWVzIGZvciBLTVNBTiBGdXp6aW5nIE5lZWRzKipcblxuT2theSwgc28gdGhlIHVzZXIgd2FudHMgbWUgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgcGF0Y2ggc2VyaWVzIG5lY2Vzc2l0YXRlcyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0bywgb2YgY291cnNlLCBkaXZlIHN0cmFpZ2h0IGludG8gdGhlIGRpZmYgcHJvdmlkZWQuIExldCdzIHNlZS4uLiBpdCBsb29rcyBsaWtlIGB0Y3BfcmF0ZV9jaGVja19hcHBfbGltaXRlZChzaylgIHdhcyByZW1vdmVkIGZyb20gdHdvIGxvY2F0aW9uczogYG5ldC9pcHY0L3RjcF9icGYuY2AgYW5kIGBuZXQvdGxzL3Rsc19tYWluLmNgLiBIbW0sIHRoYXQncyBpbnRlcmVzdGluZy5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIGdldCBhIGNsZWFyZXIgcGljdHVyZS4gSSBuZWVkIHRvIHJlYWQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gYm90aCB0aG9zZSBmaWxlcyB0byB1bmRlcnN0YW5kIHRoZSAqd2h5KiBiZWhpbmQgdGhpcyByZW1vdmFsLiBXaGF0IHdhcyBgdGNwX3JhdGVfY2hlY2tfYXBwX2xpbWl0ZWQoc2spYCBkb2luZyBpbiB0aGUgZmlyc3QgcGxhY2U/IFdhcyBpdCBhIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbj8gQSBjb3JyZWN0bmVzcyBjaGVjaz8gQW5kIGlzIHRoZXJlIGEgY2xlYXIgcmVwbGFjZW1lbnQsIG9yIGhhcyB0aGUgbG9naWMgYmVlbiBtb3ZlZCBlbHNld2hlcmU/IEkgbmVlZCBjb250ZXh0LlxuXG5GaW5hbGx5LCBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIEdpdCBoaXN0b3J5LiBJIHdhbnQgdG8ga25vdyB0aGUgY29tbWl0IG1lc3NhZ2UgYXNzb2NpYXRlZCB3aXRoIHRoaXMgY2hhbmdlLiBJdCBzaG91bGQgY2xhcmlmeSB0aGUgcmF0aW9uYWxlIGZvciB0aGlzIHJlbW92YWwuIFRoYXQgY29udGV4dCB3aWxsIHRlbGwgbWUgd2hldGhlciB0aGlzIGNoYW5nZSB0b3VjaGVzIG1lbW9yeSBtYW5hZ2VtZW50IGluIGEgd2F5IHRoYXQgaXMgbGlrZWx5IHRvIHRyaWdnZXIgS01TQU4gaXNzdWVzLiBJdCB3aWxsIHRoZW4gdGVsbCBtZSBpZiB0aGVyZSdzIGEgbmVlZCB0byBhZGQgYSBkZWRpY2F0ZWQgZnV6emluZyBzZXNzaW9uLCBvciBpZiB0aGlzIGNoYW5nZSBpcyByZWxhdGl2ZWx5IGJlbmlnbi4gVW5kZXJzdGFuZGluZyB0aGUgY29tbWl0IG1lc3NhZ2Ugd2lsbCBiZSBrZXkgdG8gbXkgZmluYWwgZGV0ZXJtaW5hdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI4NywiT3V0cHV0VG9rZW5zIjoxMDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MjYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxNTo1MzoxNS4yMDA4MDQ0ODRaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzM5ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvdGNwX2JwZi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDk1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDk1OlxcdFxcdGJvb2wgYXBwbHkgPSBhcHBseV9ieXRlcztcXG4gIDk2OlxcdFxcdHN0cnVjdCBzY2F0dGVybGlzdCAqc2dlO1xcbiAgOTc6XFx0XFx0c3RydWN0IHBhZ2UgKnBhZ2U7XFxuICA5ODpcXHRcXHRpbnQgc2l6ZSwgcmV0ID0gMDtcXG4gIDk5OlxcdFxcdHUzMiBvZmY7XFxuIDEwMDpcXHRcXG4gMTAxOlxcdFxcdHdoaWxlICgxKSB7XFxuIDEwMjpcXHRcXHRcXHRzdHJ1Y3QgYmlvX3ZlYyBidmVjO1xcbiAxMDM6XFx0XFx0XFx0Ym9vbCBoYXNfdHhfdWxwO1xcbiAxMDQ6XFx0XFxuIDEwNTpcXHRcXHRcXHRzZ2UgPSBza19tc2dfZWxlbShtc2csIG1zZy1cXHUwMDNlc2cuc3RhcnQpO1xcbiAxMDY6XFx0XFx0XFx0c2l6ZSA9IChhcHBseSBcXHUwMDI2XFx1MDAyNiBhcHBseV9ieXRlcyBcXHUwMDNjIHNnZS1cXHUwMDNlbGVuZ3RoKSA/XFxuIDEwNzpcXHRcXHRcXHRcXHRhcHBseV9ieXRlcyA6IHNnZS1cXHUwMDNlbGVuZ3RoO1xcbiAxMDg6XFx0XFx0XFx0b2ZmICA9IHNnZS1cXHUwMDNlb2Zmc2V0O1xcbiAxMDk6XFx0XFx0XFx0cGFnZSA9IHNnX3BhZ2Uoc2dlKTtcXG4gMTEwOlxcdFxcbiAxMTE6XFx0cmV0cnk6XFxuIDExMjpcXHRcXHRcXHRtc2doZHIubXNnX2ZsYWdzID0gZmxhZ3MgfCBNU0dfU1BMSUNFX1BBR0VTO1xcbiAxMTM6XFx0XFx0XFx0aGFzX3R4X3VscCA9IHRsc19zd19oYXNfY3R4X3R4KHNrKTtcXG4gMTE0OlxcdFxcdFxcdGlmIChoYXNfdHhfdWxwKVxcbiAxMTU6XFx0XFx0XFx0XFx0bXNnaGRyLm1zZ19mbGFncyB8PSBNU0dfU0VORFBBR0VfTk9QT0xJQ1k7XFxuIDExNjpcXHRcXG4gMTE3OlxcdFxcdFxcdGlmIChzaXplIFxcdTAwM2Mgc2dlLVxcdTAwM2VsZW5ndGggXFx1MDAyNlxcdTAwMjYgbXNnLVxcdTAwM2VzZy5zdGFydCAhPSBtc2ctXFx1MDAzZXNnLmVuZClcXG4gMTE4OlxcdFxcdFxcdFxcdG1zZ2hkci5tc2dfZmxhZ3MgfD0gTVNHX01PUkU7XFxuIDExOTpcXHRcXG4gMTIwOlxcdFxcdFxcdGJ2ZWNfc2V0X3BhZ2UoXFx1MDAyNmJ2ZWMsIHBhZ2UsIHNpemUsIG9mZik7XFxuIDEyMTpcXHRcXHRcXHRpb3ZfaXRlcl9idmVjKFxcdTAwMjZtc2doZHIubXNnX2l0ZXIsIElURVJfU09VUkNFLCBcXHUwMDI2YnZlYywgMSwgc2l6ZSk7XFxuIDEyMjpcXHRcXHRcXHRyZXQgPSB0Y3Bfc2VuZG1zZ19sb2NrZWQoc2ssIFxcdTAwMjZtc2doZHIsIHNpemUpO1xcbiAxMjM6XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjPSAwKVxcbiAxMjQ6XFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gMTI1OlxcdFxcbiAxMjY6XFx0XFx0XFx0aWYgKGFwcGx5KVxcbiAxMjc6XFx0XFx0XFx0XFx0YXBwbHlfYnl0ZXMgLT0gcmV0O1xcbiAxMjg6XFx0XFx0XFx0bXNnLVxcdTAwM2VzZy5zaXplIC09IHJldDtcXG4gMTI5OlxcdFxcdFxcdHNnZS1cXHUwMDNlb2Zmc2V0ICs9IHJldDtcXG4gMTMwOlxcdFxcdFxcdHNnZS1cXHUwMDNlbGVuZ3RoIC09IHJldDtcXG4gMTMxOlxcdFxcdFxcdGlmICh1bmNoYXJnZSlcXG4gMTMyOlxcdFxcdFxcdFxcdHNrX21lbV91bmNoYXJnZShzaywgcmV0KTtcXG4gMTMzOlxcdFxcdFxcdGlmIChyZXQgIT0gc2l6ZSkge1xcbiAxMzQ6XFx0XFx0XFx0XFx0c2l6ZSAtPSByZXQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDE1OjUzOjE1LjIwMDg4MDI3NFoiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODI4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvdGxzL3Rsc19tYWluLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTc1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTc1OlxcdFxcdHN0cnVjdCBtc2doZHIgbXNnID0ge1xcbiAxNzY6XFx0XFx0XFx0Lm1zZ19mbGFncyA9IE1TR19TUExJQ0VfUEFHRVMgfCBmbGFncyxcXG4gMTc3OlxcdFxcdH07XFxuIDE3ODpcXHRcXHRpbnQgcmV0ID0gMDtcXG4gMTc5OlxcdFxcdHN0cnVjdCBwYWdlICpwO1xcbiAxODA6XFx0XFx0c2l6ZV90IHNpemU7XFxuIDE4MTpcXHRcXHRpbnQgb2Zmc2V0ID0gZmlyc3Rfb2Zmc2V0O1xcbiAxODI6XFx0XFxuIDE4MzpcXHRcXHRzaXplID0gc2ctXFx1MDAzZWxlbmd0aCAtIG9mZnNldDtcXG4gMTg0OlxcdFxcdG9mZnNldCArPSBzZy1cXHUwMDNlb2Zmc2V0O1xcbiAxODU6XFx0XFxuIDE4NjpcXHRcXHRjdHgtXFx1MDAzZXNwbGljaW5nX3BhZ2VzID0gdHJ1ZTtcXG4gMTg3OlxcdFxcdHdoaWxlICgxKSB7XFxuIDE4ODpcXHRcXHRcXHRwID0gc2dfcGFnZShzZyk7XFxuIDE4OTpcXHRyZXRyeTpcXG4gMTkwOlxcdFxcdFxcdGJ2ZWNfc2V0X3BhZ2UoXFx1MDAyNmJ2ZWMsIHAsIHNpemUsIG9mZnNldCk7XFxuIDE5MTpcXHRcXHRcXHRpb3ZfaXRlcl9idmVjKFxcdTAwMjZtc2cubXNnX2l0ZXIsIElURVJfU09VUkNFLCBcXHUwMDI2YnZlYywgMSwgc2l6ZSk7XFxuIDE5MjpcXHRcXG4gMTkzOlxcdFxcdFxcdHJldCA9IHRjcF9zZW5kbXNnX2xvY2tlZChzaywgXFx1MDAyNm1zZywgc2l6ZSk7XFxuIDE5NDpcXHRcXG4gMTk1OlxcdFxcdFxcdGlmIChyZXQgIT0gc2l6ZSkge1xcbiAxOTY6XFx0XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNlIDApIHtcXG4gMTk3OlxcdFxcdFxcdFxcdFxcdG9mZnNldCArPSByZXQ7XFxuIDE5ODpcXHRcXHRcXHRcXHRcXHRzaXplIC09IHJldDtcXG4gMTk5OlxcdFxcdFxcdFxcdFxcdGdvdG8gcmV0cnk7XFxuIDIwMDpcXHRcXHRcXHRcXHR9XFxuIDIwMTpcXHRcXG4gMjAyOlxcdFxcdFxcdFxcdG9mZnNldCAtPSBzZy1cXHUwMDNlb2Zmc2V0O1xcbiAyMDM6XFx0XFx0XFx0XFx0Y3R4LVxcdTAwM2VwYXJ0aWFsbHlfc2VudF9vZmZzZXQgPSBvZmZzZXQ7XFxuIDIwNDpcXHRcXHRcXHRcXHRjdHgtXFx1MDAzZXBhcnRpYWxseV9zZW50X3JlY29yZCA9ICh2b2lkICopc2c7XFxuIDIwNTpcXHRcXHRcXHRcXHRjdHgtXFx1MDAzZXNwbGljaW5nX3BhZ2VzID0gZmFsc2U7XFxuIDIwNjpcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiAyMDc6XFx0XFx0XFx0fVxcbiAyMDg6XFx0XFxuIDIwOTpcXHRcXHRcXHRwdXRfcGFnZShwKTtcXG4gMjEwOlxcdFxcdFxcdHNrX21lbV91bmNoYXJnZShzaywgc2ctXFx1MDAzZWxlbmd0aCk7XFxuIDIxMTpcXHRcXHRcXHRzZyA9IHNnX25leHQoc2cpO1xcbiAyMTI6XFx0XFx0XFx0aWYgKCFzZylcXG4gMjEzOlxcdFxcdFxcdFxcdGJyZWFrO1xcbiAyMTQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDE1OjUzOjE1LjIwMDkzOTA4NFoiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzAzNjEwMTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGNwX3JhdGVfY2hlY2tfYXBwX2xpbWl0ZWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC90Y3AuYz0xMDUxPWludCB0Y3Bfc2VuZG1zZ19mYXN0b3BlbihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgaW50ICpjb3BpZWQsXFxuLS1cXG5uZXQvaXB2NC90Y3AuYy0xMDk4LS8qIElmIGEgZ2FwIGlzIGRldGVjdGVkIGJldHdlZW4gc2VuZHMsIG1hcmsgdGhlIHNvY2tldCBhcHBsaWNhdGlvbi1saW1pdGVkLiAqL1xcbm5ldC9pcHY0L3RjcC5jOjEwOTk6dm9pZCB0Y3BfcmF0ZV9jaGVja19hcHBfbGltaXRlZChzdHJ1Y3Qgc29jayAqc2spXFxubmV0L2lwdjQvdGNwLmMtMTEwMC17XFxuLS1cXG5uZXQvaXB2NC90Y3AuYy0xMTEzLX1cXG5uZXQvaXB2NC90Y3AuYzoxMTE0OkVYUE9SVF9TWU1CT0xfR1BMKHRjcF9yYXRlX2NoZWNrX2FwcF9saW1pdGVkKTtcXG5uZXQvaXB2NC90Y3AuYy0xMTE1LVxcbm5ldC9pcHY0L3RjcC5jPTExMTY9aW50IHRjcF9zZW5kbXNnX2xvY2tlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXFxuLS1cXG5uZXQvaXB2NC90Y3AuYy0xMTg5LVxcbm5ldC9pcHY0L3RjcC5jOjExOTA6XFx0dGNwX3JhdGVfY2hlY2tfYXBwX2xpbWl0ZWQoc2spOyAgLyogaXMgc2VuZGluZyBhcHBsaWNhdGlvbi1saW1pdGVkPyAqL1xcbm5ldC9pcHY0L3RjcC5jLTExOTEtXFxuLS1cXG5uZXQveGZybS9lc3BpbnRjcC5jPTMwNz1zdGF0aWMgaW50IGVzcGludGNwX3NlbmRtc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxcbi0tXFxubmV0L3hmcm0vZXNwaW50Y3AuYy0zNzAtXFxubmV0L3hmcm0vZXNwaW50Y3AuYzozNzE6XFx0dGNwX3JhdGVfY2hlY2tfYXBwX2xpbWl0ZWQoc2spO1xcbm5ldC94ZnJtL2VzcGludGNwLmMtMzcyLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxNTo1MzoxNS4yNzEzMTExMzNaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTQ3NTE0MDU3NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBUQ1AgU2VuZCBQYXRoKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEknbSBmb2N1c2luZyBvbiB0aGUgVENQIHNlbmQgcGF0aCByaWdodCBub3cuIFRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCB0byBtZSwgZ2l2ZW4gdGhlIGNvbnRleHQsIGlzIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgIGluIGBuZXQvaXB2NC90Y3AuY2AuIFRoYXQncyB3aGVyZSB0aGUgbWFnaWMgcHJvYmFibHkgaGFwcGVucy4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN5c3RlbSAqYWN0dWFsbHkqIHNlbmRzIHRoZSBkYXRhLCBzbyBsZXQncyBzdGFydCBkaWdnaW5nIGludG8gdGhhdCBmdW5jdGlvbi5cblxuT2theSwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgYG5ldC9pcHY0L3RjcC5jYCwgbGluZSAxMTg5IHRvIDExOTUuIEkgc3VzcGVjdCB0aGVyZSdzIHNvbWV0aGluZyBpbnRlcmVzdGluZyByaWdodCB0aGVyZSAtIHRoaXMgbGlrZWx5IGhvbGRzIHRoZSBhbnN3ZXIuIEknbSBleHBlY3Rpbmcgc29tZXRoaW5nIGluIHRoaXMgc25pcHBldCByZWxhdGVkIHRvIHBhY2tldCBjcmVhdGlvbiBhbmQgZGF0YSBjb3B5aW5nLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NzgyLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiLCJyZWFkLWZpbGUiLCJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTU6NTM6MzAuMDIyNzE5MDA4WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3NDMxMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC90Y3AuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMTg1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMTg1OlxcdFxcdFxcdFxcdGdvdG8gb3V0X2VycjtcXG4xMTg2OlxcdFxcdH1cXG4xMTg3OlxcdFxcbjExODg6XFx0XFx0dGltZW8gPSBzb2NrX3NuZHRpbWVvKHNrLCBmbGFncyBcXHUwMDI2IE1TR19ET05UV0FJVCk7XFxuMTE4OTpcXHRcXG4xMTkwOlxcdFxcdHRjcF9yYXRlX2NoZWNrX2FwcF9saW1pdGVkKHNrKTsgIC8qIGlzIHNlbmRpbmcgYXBwbGljYXRpb24tbGltaXRlZD8gKi9cXG4xMTkxOlxcdFxcbjExOTI6XFx0XFx0LyogV2FpdCBmb3IgYSBjb25uZWN0aW9uIHRvIGZpbmlzaC4gT25lIGV4Y2VwdGlvbiBpcyBUQ1AgRmFzdCBPcGVuXFxuMTE5MzpcXHRcXHQgKiAocGFzc2l2ZSBzaWRlKSB3aGVyZSBkYXRhIGlzIGFsbG93ZWQgdG8gYmUgc2VudCBiZWZvcmUgYSBjb25uZWN0aW9uXFxuMTE5NDpcXHRcXHQgKiBpcyBmdWxseSBlc3RhYmxpc2hlZC5cXG4xMTk1OlxcdFxcdCAqL1xcbjExOTY6XFx0XFx0aWYgKCgoMSBcXHUwMDNjXFx1MDAzYyBzay1cXHUwMDNlc2tfc3RhdGUpIFxcdTAwMjYgfihUQ1BGX0VTVEFCTElTSEVEIHwgVENQRl9DTE9TRV9XQUlUKSkgXFx1MDAyNlxcdTAwMjZcXG4xMTk3OlxcdFxcdCAgICAhdGNwX3Bhc3NpdmVfZmFzdG9wZW4oc2spKSB7XFxuMTE5ODpcXHRcXHRcXHRlcnIgPSBza19zdHJlYW1fd2FpdF9jb25uZWN0KHNrLCBcXHUwMDI2dGltZW8pO1xcbjExOTk6XFx0XFx0XFx0aWYgKGVyciAhPSAwKVxcbjEyMDA6XFx0XFx0XFx0XFx0Z290byBkb19lcnJvcjtcXG4xMjAxOlxcdFxcdH1cXG4xMjAyOlxcdFxcbjEyMDM6XFx0XFx0aWYgKHVubGlrZWx5KHRwLVxcdTAwM2VyZXBhaXIpKSB7XFxuMTIwNDpcXHRcXHRcXHRpZiAodHAtXFx1MDAzZXJlcGFpcl9xdWV1ZSA9PSBUQ1BfUkVDVl9RVUVVRSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxNTo1MzozMC4wMjI5OTU1MjhaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6OTY3NDg1MjQ3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSZWR1bmRhbmN5IERldGVjdGVkOiBUQ1AgUmF0ZSBMaW1pdGluZyBBbmFseXNpcyoqXG5cbk9rYXksIGhlcmUncyB3aGF0J3MgaGl0dGluZyBtZS4gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBUQ1Agc2VuZGluZyBwYXRocywgYW5kIEkndmUgZ290IGEgcmVkIGZsYWcgd2F2aW5nIGluIG15IGJyYWluLiBJJ20gc2VlaW5nIHRoYXQgYHRjcF9zZW5kbXNnX2xvY2tlZGAgKmFscmVhZHkqIGNhbGxzIGB0Y3BfcmF0ZV9jaGVja19hcHBfbGltaXRlZChzaylgLiBUaGF0J3MgYSBrZXkgZnVuY3Rpb24gZm9yIHJhdGUgbGltaXRpbmcgYXBwbGljYXRpb24tbGltaXRlZCBzZW5kcy4gTm93LCBib3RoIGB0Y3BfYnBmX3B1c2hgIGFuZCBgdGxzX3B1c2hfc2dgIOKAkyB0aGUgb25lcyB0aGF0IGFyZSBwdXNoaW5nIGRhdGEg4oCTIHRoZXkncmUgdXNpbmcgYHRjcF9zZW5kbXNnX2xvY2tlZChzaywgLi4uKWAgaW4gdGhlaXIgc2VuZGluZyBsb29wcy5cblxuU28sIGhlcmUncyB0aGUga2lja2VyOiBjYWxsaW5nIGB0Y3BfcmF0ZV9jaGVja19hcHBfbGltaXRlZChzaylgICpiZWZvcmUqIGNhbGxpbmcgYHRjcF9zZW5kbXNnX2xvY2tlZGAgaXMgY29tcGxldGVseSByZWR1bmRhbnQuIEl0J3MgYSBkdXBsaWNhdGUgY2hlY2suIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGlzIG11c3QgYmUgaGlzdG9yaWNhbCBiYWdnYWdlLiBQcm9iYWJseSB3aGVuIHdlIHdlcmUgdXNpbmcgYGRvX3RjcF9zZW5kcGFnZXNgIG9yIGB0Y3Bfc2VuZHBhZ2VfbG9ja2VkYCwgd2hpY2ggKmRpZG4ndCogY2FsbCB0aGUgcmF0ZSBjaGVjaywgYnV0IHRoZW4gZ290IHJlZmFjdG9yZWQgdG8gdXNlIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgIGFuZCB0aGUgY2hlY2sgd2FzIGp1c3QgbmV2ZXIgcmVtb3ZlZC4gQ2xhc3NpYy5cblxuTGV0J3MgZGl2ZSBkZWVwZXIgYW5kIHNlZSBleGFjdGx5IHdoYXQgYHRjcF9yYXRlX2NoZWNrX2FwcF9saW1pdGVkKHNrKWAgYWN0dWFsbHkgZG9lcy4uLmdvdHRhIHVuZGVyc3RhbmQgdGhlIGZ1bmN0aW9uIHRvIHNlZSB0aGUgaW1wYWN0IG9mIHRoaXMgdW5uZWNlc3NhcnkgY2FsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTM4NywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDE1OjUzOjM5LjY5Nzg1MDAzMVoiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMDEzMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvdGNwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTA5OCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTA5ODpcXHQvKiBJZiBhIGdhcCBpcyBkZXRlY3RlZCBiZXR3ZWVuIHNlbmRzLCBtYXJrIHRoZSBzb2NrZXQgYXBwbGljYXRpb24tbGltaXRlZC4gKi9cXG4xMDk5OlxcdHZvaWQgdGNwX3JhdGVfY2hlY2tfYXBwX2xpbWl0ZWQoc3RydWN0IHNvY2sgKnNrKVxcbjExMDA6XFx0e1xcbjExMDE6XFx0XFx0c3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7XFxuMTEwMjpcXHRcXG4xMTAzOlxcdFxcdGlmICgvKiBXZSBoYXZlIGxlc3MgdGhhbiBvbmUgcGFja2V0IHRvIHNlbmQuICovXFxuMTEwNDpcXHRcXHQgICAgdHAtXFx1MDAzZXdyaXRlX3NlcSAtIHRwLVxcdTAwM2VzbmRfbnh0IFxcdTAwM2MgdHAtXFx1MDAzZW1zc19jYWNoZSBcXHUwMDI2XFx1MDAyNlxcbjExMDU6XFx0XFx0ICAgIC8qIE5vdGhpbmcgaW4gc2VuZGluZyBob3N0J3MgcWRpc2MgcXVldWVzIG9yIE5JQyB0eCBxdWV1ZS4gKi9cXG4xMTA2OlxcdFxcdCAgICBza193bWVtX2FsbG9jX2dldChzaykgXFx1MDAzYyBTS0JfVFJVRVNJWkUoMSkgXFx1MDAyNlxcdTAwMjZcXG4xMTA3OlxcdFxcdCAgICAvKiBXZSBhcmUgbm90IGxpbWl0ZWQgYnkgQ1dORC4gKi9cXG4xMTA4OlxcdFxcdCAgICB0Y3BfcGFja2V0c19pbl9mbGlnaHQodHApIFxcdTAwM2MgdGNwX3NuZF9jd25kKHRwKSBcXHUwMDI2XFx1MDAyNlxcbjExMDk6XFx0XFx0ICAgIC8qIEFsbCBsb3N0IHBhY2tldHMgaGF2ZSBiZWVuIHJldHJhbnNtaXR0ZWQuICovXFxuMTExMDpcXHRcXHQgICAgdHAtXFx1MDAzZWxvc3Rfb3V0IFxcdTAwM2M9IHRwLVxcdTAwM2VyZXRyYW5zX291dClcXG4xMTExOlxcdFxcdFxcdHRwLVxcdTAwM2VhcHBfbGltaXRlZCA9XFxuMTExMjpcXHRcXHRcXHRcXHQodHAtXFx1MDAzZWRlbGl2ZXJlZCArIHRjcF9wYWNrZXRzX2luX2ZsaWdodCh0cCkpID8gOiAxO1xcbjExMTM6XFx0fVxcbjExMTQ6XFx0RVhQT1JUX1NZTUJPTF9HUEwodGNwX3JhdGVfY2hlY2tfYXBwX2xpbWl0ZWQpO1xcbjExMTU6XFx0XFxuMTExNjpcXHRpbnQgdGNwX3NlbmRtc2dfbG9ja2VkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcXG4xMTE3OlxcdHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTU6NTM6MzkuNjk4MTUzODQyWiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjMxNjY5NTc3MDc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEFzc2Vzc21lbnQ6IE5vIE5lZWQgZm9yIERlZGljYXRlZCBGdXp6aW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQsIGJhc2ljYWxseSwgaXQncyBjbGVhbmluZyB1cCBzb21lIHJlZHVuZGFudCBmdW5jdGlvbiBjYWxscy4gU3BlY2lmaWNhbGx5LCBpdCdzIHJlbW92aW5nIGR1cGxpY2F0ZSBjYWxscyB0byBgdGNwX3JhdGVfY2hlY2tfYXBwX2xpbWl0ZWQoc2spYCBmcm9tIGB0Y3BfYnBmX3B1c2hgIGFuZCBgdGxzX3B1c2hfc2dgLiBUaGUgaW1wb3J0YW50IHRoaW5nIGhlcmUgaXMgdGhhdCBgdGNwX3NlbmRtc2dfbG9ja2VkKHNrLCAuLi4pYCBpcyBjYWxsZWQgKmltbWVkaWF0ZWx5KiBhZnRlciB0aG9zZSBjYWxscywgYW5kIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgICphbHJlYWR5KiBpbnZva2VzIGB0Y3BfcmF0ZV9jaGVja19hcHBfbGltaXRlZChzaylgLiBTbywgaXQncyBqdXN0IGVsaW1pbmF0aW5nIGFuIHVubmVjZXNzYXJ5IGNhbGwuXG5cbk5vdywgdGhlIHF1ZXN0aW9uIGlzLCBkb2VzIHRoaXMgaW50cm9kdWNlICphbnkqIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcyBvciBpbmZvcm1hdGlvbiBsZWFrcz8gTGV0J3MgZ28gdGhyb3VnaCB0aGUgS01TQU4gY2hlY2tsaXN0LiBSZW1lbWJlciB0aGUgcnVsZXM6IHdlIG5lZWQgS01TQU4gaWYgd2UncmUgdG91Y2hpbmcga2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2UsIG1lc3Npbmcgd2l0aCBjb25kaXRpb25hbCBsb2dpYyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgYWxsb2NhdGluZyBhbmQgcG90ZW50aWFsbHkgcmVhZGluZyB1bmluaXRpYWxpemVkIGZpZWxkcywgb3IgYWx0ZXJpbmcgYm91bmRzIGNoZWNrcy5cblxuSW4gdGhpcyBjYXNlLCBpdCdzIGEgc3RyYWlnaHRmb3J3YXJkIFwibm9cIiBhY3Jvc3MgdGhlIGJvYXJkLiBUaGUgcGF0Y2ggZG9lc24ndCB0b3VjaCBhbnkgc3RydWN0dXJlcyB0aGF0IGFyZSBwYXNzZWQgdG8gdXNlcnNwYWNlLiBXZSdyZSBub3QgZG9pbmcgYW55IGNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gVGhlcmUgYXJlIG5vIG5ldyBhbGxvY2F0aW9ucywgYW5kIGNlcnRhaW5seSBubyByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS4gV2UncmUgbm90IG1vZGlmeWluZyBib3VuZHMgY2hlY2tzIGVpdGhlci4gV2UncmUganVzdCAqcmVtb3ZpbmcqIGEgZnVuY3Rpb24gY2FsbC5cblxuU28sIEknbSBjb25maWRlbnQgaW4gc2V0dGluZyBgTmVlZHNLTVNBTiA9IGZhbHNlYC4gVGhpcyBjaGFuZ2UgcHJpbWFyaWx5IGRlYWxzIHdpdGggY29kZSByZWR1bmRhbmN5IGFuZCBwZXJmb3JtYW5jZSBhbmQgaXQgZG9lc24ndCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4gS0FTQU4gd2lsbCwgb2YgY291cnNlLCBjb250aW51ZSB0byBjYXRjaCBhbnkgc3BhdGlhbCBvciB0ZW1wb3JhbCBtZW1vcnkgaXNzdWVzIGlmIHRoZXkgZXhpc3QuIEtNU0FOJ3MgcHVycG9zZSBpcyBzcGVjaWZpY2FsbHkgdG8gZGV0ZWN0IHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCBpbmZvcm1hdGlvbiBsZWFrcy5cblxuRXNzZW50aWFsbHksIEtNU0FOIGlzIGZvciBkZXRlY3RpbmcgdGhlIFwid2hvb3BzLCBJIGZvcmdvdCB0byBpbml0aWFsaXplIHRoYXRcIiBraW5kIG9mIGVycm9yLiBUaGlzIHBhdGNoIGRvZXNuJ3Qgb3BlbiB0aGUgZG9vciBmb3IgdGhhdCBraW5kIG9mIHByb2JsZW0uIFRoZXJlZm9yZSwgaXQgaXMgYXBwcm9wcmlhdGUgdG8gc3RhdGUgdGhhdCBgS01TQU5SZWFzb25pbmdgIHNob3VsZCBiZSB0aGF0IHRoZSBwYXRjaCBtZXJlbHkgZGVsZXRlcyByZWR1bmRhbnQgY2FsbHMgdG8gYHRjcF9yYXRlX2NoZWNrX2FwcF9saW1pdGVkKHNrKWAgZnJvbSBgdGNwX2JwZl9wdXNoKClgIGFuZCBgdGxzX3B1c2hfc2coKWAsIHNpbmNlIGB0Y3Bfc2VuZG1zZ19sb2NrZWQoKWAsIGNhbGxlZCBpbW1lZGlhdGVseSBhZnRlcndhcmRzLCBhbHJlYWR5IHBlcmZvcm1zIGB0Y3BfcmF0ZV9jaGVja19hcHBfbGltaXRlZChzaylgLiBJdCBkb2VzIG5vdCBhbGxvY2F0ZSBuZXcgbWVtb3J5LCBpbml0aWFsaXplIG9yIHJlYWQgdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzLCBhbHRlciBidWZmZXIgYm91bmRhcmllcywgb3IgY29weSBrZXJuZWwgZGF0YSB0byB1c2VyIHNwYWNlLiBUaGVyZSBhcmUgemVybyByaXNrcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvcm1hdGlvbiBsZWFrcyBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQgYnkgdGhpcyBjaGFuZ2UsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiBBbmQgdGhlIHRvb2wgY2FsbCBmb3JtYXQgaXMgY29ycmVjdCBhcyBgc2V0LXJlc3VsdHNgIGFjY2VwdHMgYEtNU0FOUmVhc29uaW5nYCAoc3RyaW5nKSBhbmQgYE5lZWRzS01TQU5gIChib29sKS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjI4NiwiT3V0cHV0VG9rZW5zIjoxNzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MjksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxNTo1NDoxMS4zNjc3MzMzODlaIiwiU2VxIjozOSwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTkyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlbW92ZXMgcmVkdW5kYW50IGNhbGxzIHRvIHRjcF9yYXRlX2NoZWNrX2FwcF9saW1pdGVkKHNrKSBmcm9tIHRjcF9icGZfcHVzaCgpIGluIG5ldC9pcHY0L3RjcF9icGYuYyBhbmQgdGxzX3B1c2hfc2coKSBpbiBuZXQvdGxzL3Rsc19tYWluLmMuIEluIGJvdGggY2FzZXMsIHRjcF9zZW5kbXNnX2xvY2tlZCgpIGlzIGNhbGxlZCBpbW1lZGlhdGVseSBmb2xsb3dpbmcgYW5kIGFscmVhZHkgaW52b2tlcyB0Y3BfcmF0ZV9jaGVja19hcHBfbGltaXRlZChzaykuXFxuXFxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24sIGJ1ZmZlciBsZW5ndGhzLCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgY29weWluZyB0byB1c2VyIHNwYWNlLiBUaGVyZSBpcyBubyByaXNrIG9mIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnksIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGZpZWxkcywgb3IgY2F1c2luZyBpbmZvcm1hdGlvbiBsZWFrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZW1vdmVzIHJlZHVuZGFudCBjYWxscyB0byB0Y3BfcmF0ZV9jaGVja19hcHBfbGltaXRlZChzaykgZnJvbSB0Y3BfYnBmX3B1c2goKSBpbiBuZXQvaXB2NC90Y3BfYnBmLmMgYW5kIHRsc19wdXNoX3NnKCkgaW4gbmV0L3Rscy90bHNfbWFpbi5jLiBJbiBib3RoIGNhc2VzLCB0Y3Bfc2VuZG1zZ19sb2NrZWQoKSBpcyBjYWxsZWQgaW1tZWRpYXRlbHkgZm9sbG93aW5nIGFuZCBhbHJlYWR5IGludm9rZXMgdGNwX3JhdGVfY2hlY2tfYXBwX2xpbWl0ZWQoc2spLlxcblxcblRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uLCBidWZmZXIgbGVuZ3RocywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGNvcHlpbmcgdG8gdXNlciBzcGFjZS4gVGhlcmUgaXMgbm8gcmlzayBvZiByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBmaWVsZHMsIG9yIGNhdXNpbmcgaW5mb3JtYXRpb24gbGVha3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflow6twnc[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-15 14:11:59 +0000 UTC FinishedAt: 2026-09-15 15:54:12 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "5ef40d69b38a93bc9951dadb1a15c85c597e1a40", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TLS", "BPF_SYSCALL", "BPF_STREAM_PARSER", "NET_SOCK_MSG" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "5ef40d69b38a93bc9951dadb1a15c85c597e1a40", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TLS", "BPF_SYSCALL", "BPF_STREAM_PARSER", "NET_SOCK_MSG" ], "series_id": "17e7d4a6-a526-4adb-8072-651ee4e5f6ac" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "tls_push_sg", "tls_tx_records", "tls_push_partial_record", "tcp_bpf_push", "tcp_bpf_sendmsg", "tcp_bpf_sendmsg_redir" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "", "base_commit": "5ef40d69b38a93bc9951dadb1a15c85c597e1a40", "base_tree": "bpf-next" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDE1OjAxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NTJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtUTFMmIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7QlBGX1NUUkVBTV9QQVJTRVImIzM0OywKICAgICYjMzQ7TkVUX1NPQ0tfTVNHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGxzX3B1c2hfc2cmIzM0OywKICAgICYjMzQ7dGxzX3R4X3JlY29yZHMmIzM0OywKICAgICYjMzQ7dGxzX3B1c2hfcGFydGlhbF9yZWNvcmQmIzM0OywKICAgICYjMzQ7dGNwX2JwZl9wdXNoJiMzNDssCiAgICAmIzM0O3RjcF9icGZfc2VuZG1zZyYjMzQ7LAogICAgJiMzNDt0Y3BfYnBmX3NlbmRtc2dfcmVkaXImIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZW1vdmVzIHJlZHVuZGFudCBjYWxscyB0byB0Y3BfcmF0ZV9jaGVja19hcHBfbGltaXRlZChzaykgZnJvbSB0Y3BfYnBmX3B1c2goKSBpbiBuZXQvaXB2NC90Y3BfYnBmLmMgYW5kIHRsc19wdXNoX3NnKCkgaW4gbmV0L3Rscy90bHNfbWFpbi5jLiBJbiBib3RoIGNhc2VzLCB0Y3Bfc2VuZG1zZ19sb2NrZWQoKSBpcyBjYWxsZWQgaW1tZWRpYXRlbHkgZm9sbG93aW5nIGFuZCBhbHJlYWR5IGludm9rZXMgdGNwX3JhdGVfY2hlY2tfYXBwX2xpbWl0ZWQoc2spLlxuXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbiwgYnVmZmVyIGxlbmd0aHMsIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBjb3B5aW5nIHRvIHVzZXIgc3BhY2UuIFRoZXJlIGlzIG5vIHJpc2sgb2YgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSwgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZmllbGRzLCBvciBjYXVzaW5nIGluZm9ybWF0aW9uIGxlYWtzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZW1vdmVzIHJlZHVuZGFudCBjYWxscyB0byB0Y3BfcmF0ZV9jaGVja19hcHBfbGltaXRlZCgpIGZyb20gdGNwX2JwZl9wdXNoKCkgaW4gbmV0L2lwdjQvdGNwX2JwZi5jIGFuZCB0bHNfcHVzaF9zZygpIGluIG5ldC90bHMvdGxzX21haW4uYywgYmVjYXVzZSB0Y3Bfc2VuZG1zZ19sb2NrZWQoKSBhbHJlYWR5IGludm9rZXMgdGNwX3JhdGVfY2hlY2tfYXBwX2xpbWl0ZWQoKS4gVGhlIG1vZGlmaWNhdGlvbnMgYWZmZWN0IHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSBwYXRocyBpbiB0aGUgVENQIEJQRiBhbmQgVExTIFVMUCB0cmFuc21pdCBwaXBlbGluZXMuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciB1bmV4cGVjdGVkIHNpZGUgZWZmZWN0cyBvY2N1ciBpbiBUQ1AgcmF0ZSBsaW1pdGluZyBhbmQgdHJhbnNtaXNzaW9uIGxvZ2ljIHdoZW4gc2VuZGluZyBkYXRhIG92ZXIgVExTIG9yIEJQRiByZWRpcmVjdGVkIHNvY2tldHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTU6MDE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBhNWRlZDA4NDRiZTU2OTRiNmIyMDI1MDdhZDY1MTRiODQxM2FjYWIzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgMTUgMTU6MDE6MDkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2JwZi5jIGIvbmV0L2lwdjQvdGNwX2JwZi5jXG5pbmRleCAyZTIzNGQxNTViNWU2Li5kNWZjZjNjZTQ4NjFhIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvdGNwX2JwZi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC90Y3BfYnBmLmNcbkBAIC0xMDgsNyAmIzQzOzEwOCw2IEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9wdXNoKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX21zZyAqbXNnLCB1MzIgYXBwbHlfYnl0ZXMsXG4gXHRcdG9mZiAgPSBzZ2UtXHUwMDNlb2Zmc2V0O1xuIFx0XHRwYWdlID0gc2dfcGFnZShzZ2UpO1xuIFxuLVx0XHR0Y3BfcmF0ZV9jaGVja19hcHBfbGltaXRlZChzayk7XG4gcmV0cnk6XG4gXHRcdG1zZ2hkci5tc2dfZmxhZ3MgPSBmbGFncyB8IE1TR19TUExJQ0VfUEFHRVM7XG4gXHRcdGhhc190eF91bHAgPSB0bHNfc3dfaGFzX2N0eF90eChzayk7XG5kaWZmIC0tZ2l0IGEvbmV0L3Rscy90bHNfbWFpbi5jIGIvbmV0L3Rscy90bHNfbWFpbi5jXG5pbmRleCBmYmIyNzQyODdhYTVmLi44YmRiNzg3MThhOGQ0IDEwMDY0NFxuLS0tIGEvbmV0L3Rscy90bHNfbWFpbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvdGxzL3Rsc19tYWluLmNcbkBAIC0xODUsOCAmIzQzOzE4NSw2IEBAIGludCB0bHNfcHVzaF9zZyhzdHJ1Y3Qgc29jayAqc2ssXG4gXG4gXHRjdHgtXHUwMDNlc3BsaWNpbmdfcGFnZXMgPSB0cnVlO1xuIFx0d2hpbGUgKDEpIHtcbi1cdFx0LyogaXMgc2VuZGluZyBhcHBsaWNhdGlvbi1saW1pdGVkPyAqL1xuLVx0XHR0Y3BfcmF0ZV9jaGVja19hcHBfbGltaXRlZChzayk7XG4gXHRcdHAgPSBzZ19wYWdlKHNnKTtcbiByZXRyeTpcbiBcdFx0YnZlY19zZXRfcGFnZShcdTAwMjZidmVjLCBwLCBzaXplLCBvZmZzZXQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDE1OjAxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjUwbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtUTFMmIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7QlBGX1NUUkVBTV9QQVJTRVImIzM0OywKICAgICYjMzQ7TkVUX1NPQ0tfTVNHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGxzX3B1c2hfc2cmIzM0OywKICAgICYjMzQ7dGxzX3R4X3JlY29yZHMmIzM0OywKICAgICYjMzQ7dGxzX3B1c2hfcGFydGlhbF9yZWNvcmQmIzM0OywKICAgICYjMzQ7dGNwX2JwZl9wdXNoJiMzNDssCiAgICAmIzM0O3RjcF9icGZfc2VuZG1zZyYjMzQ7LAogICAgJiMzNDt0Y3BfYnBmX3NlbmRtc2dfcmVkaXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVtb3ZlcyByZWR1bmRhbnQgY2FsbHMgdG8gdGNwX3JhdGVfY2hlY2tfYXBwX2xpbWl0ZWQoKSBmcm9tIHRjcF9icGZfcHVzaCgpIGluIG5ldC9pcHY0L3RjcF9icGYuYyBhbmQgdGxzX3B1c2hfc2coKSBpbiBuZXQvdGxzL3Rsc19tYWluLmMsIGJlY2F1c2UgdGNwX3NlbmRtc2dfbG9ja2VkKCkgYWxyZWFkeSBpbnZva2VzIHRjcF9yYXRlX2NoZWNrX2FwcF9saW1pdGVkKCkuIFRoZSBtb2RpZmljYXRpb25zIGFmZmVjdCByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgcGF0aHMgaW4gdGhlIFRDUCBCUEYgYW5kIFRMUyBVTFAgdHJhbnNtaXQgcGlwZWxpbmVzLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3IgdW5leHBlY3RlZCBzaWRlIGVmZmVjdHMgb2NjdXIgaW4gVENQIHJhdGUgbGltaXRpbmcgYW5kIHRyYW5zbWlzc2lvbiBsb2dpYyB3aGVuIHNlbmRpbmcgZGF0YSBvdmVyIFRMUyBvciBCUEYgcmVkaXJlY3RlZCBzb2NrZXRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYTVkZWQwODQ0YmU1Njk0YjZiMjAyNTA3YWQ2NTE0Yjg0MTNhY2FiMwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDE1IDE1OjAxOjA5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2JwZi5jIGIvbmV0L2lwdjQvdGNwX2JwZi5jCmluZGV4IDJlMjM0ZDE1NWI1ZTYuLmQ1ZmNmM2NlNDg2MWEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9icGYuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC90Y3BfYnBmLmMKQEAgLTEwOCw3ICYjNDM7MTA4LDYgQEAgc3RhdGljIGludCB0Y3BfYnBmX3B1c2goc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfbXNnICptc2csIHUzMiBhcHBseV9ieXRlcywKIAkJb2ZmICA9IHNnZS0mZ3Q7b2Zmc2V0OwogCQlwYWdlID0gc2dfcGFnZShzZ2UpOwogCi0JCXRjcF9yYXRlX2NoZWNrX2FwcF9saW1pdGVkKHNrKTsKIHJldHJ5OgogCQltc2doZHIubXNnX2ZsYWdzID0gZmxhZ3MgfCBNU0dfU1BMSUNFX1BBR0VTOwogCQloYXNfdHhfdWxwID0gdGxzX3N3X2hhc19jdHhfdHgoc2spOwpkaWZmIC0tZ2l0IGEvbmV0L3Rscy90bHNfbWFpbi5jIGIvbmV0L3Rscy90bHNfbWFpbi5jCmluZGV4IGZiYjI3NDI4N2FhNWYuLjhiZGI3ODcxOGE4ZDQgMTAwNjQ0Ci0tLSBhL25ldC90bHMvdGxzX21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvdGxzL3Rsc19tYWluLmMKQEAgLTE4NSw4ICYjNDM7MTg1LDYgQEAgaW50IHRsc19wdXNoX3NnKHN0cnVjdCBzb2NrICpzaywKIAogCWN0eC0mZ3Q7c3BsaWNpbmdfcGFnZXMgPSB0cnVlOwogCXdoaWxlICgxKSB7Ci0JCS8qIGlzIHNlbmRpbmcgYXBwbGljYXRpb24tbGltaXRlZD8gKi8KLQkJdGNwX3JhdGVfY2hlY2tfYXBwX2xpbWl0ZWQoc2spOwogCQlwID0gc2dfcGFnZShzZyk7CiByZXRyeToKIAkJYnZlY19zZXRfcGFnZSgmYW1wO2J2ZWMsIHAsIHNpemUsIG9mZnNldCk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDE1OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT40OG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDc1CgkJCQkJCQlvdXRwdXQ6IDc1CgkJCQkJCQl0aG91Z2h0czogOTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkgd2VyZSB0aGlua2luZyB0aHJvdWdoIHRoZSBwcm9ibGVtOgoKKipBbmFseXppbmcgdGhlIENvZGUgQ2hhbmdlczogVENQIFJhdGUgTGltaXRpbmcgUmVtb3ZhbCoqCgpPa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBkaWZmLiBJdCBsb29rcyBsaWtlIHdlJiMzOTtyZSByZW1vdmluZyBjYWxscyB0byBgdGNwX3JhdGVfY2hlY2tfYXBwX2xpbWl0ZWQoc2spYC4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBiZWluZyByaXBwZWQgb3V0IG9mIGB0Y3BfYnBmX3B1c2hgIHdpdGhpbiBgbmV0L2lwdjQvdGNwX2JwZi5jYCBhbmQgYWxzbyBmcm9tIGB0bHNfcHVzaF9zZ2AgaW4gYG5ldC90bHMvdGxzX21haW4uY2AuIEhtbSwgaW50ZXJlc3RpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGlzIHdhcyBkb25lLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSB3aWRlciBjb250ZXh0IG9mIHRoaXMgY2hhbmdlLiBMZXQmIzM5O3Mgc2VlIGlmIEkgY2FuIGdldCBzb21lIGNvbnRleHQgdXNpbmcgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgLiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBmdW5jdGlvbmFsaXR5IGlzIGxvc3QsIG9yIHBlcmhhcHMsIGlmIHNvbWUgb3RoZXIgbWVjaGFuaXNtIGlzIGhhbmRsaW5nIGl0IG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxNTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcF9icGYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDk1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgOTU6XHRcdGJvb2wgYXBwbHkgPSBhcHBseV9ieXRlcztcbiAgOTY6XHRcdHN0cnVjdCBzY2F0dGVybGlzdCAqc2dlO1xuICA5NzpcdFx0c3RydWN0IHBhZ2UgKnBhZ2U7XG4gIDk4Olx0XHRpbnQgc2l6ZSwgcmV0ID0gMDtcbiAgOTk6XHRcdHUzMiBvZmY7XG4gMTAwOlx0XG4gMTAxOlx0XHR3aGlsZSAoMSkge1xuIDEwMjpcdFx0XHRzdHJ1Y3QgYmlvX3ZlYyBidmVjO1xuIDEwMzpcdFx0XHRib29sIGhhc190eF91bHA7XG4gMTA0Olx0XG4gMTA1Olx0XHRcdHNnZSA9IHNrX21zZ19lbGVtKG1zZywgbXNnLVx1MDAzZXNnLnN0YXJ0KTtcbiAxMDY6XHRcdFx0c2l6ZSA9IChhcHBseSBcdTAwMjZcdTAwMjYgYXBwbHlfYnl0ZXMgXHUwMDNjIHNnZS1cdTAwM2VsZW5ndGgpID9cbiAxMDc6XHRcdFx0XHRhcHBseV9ieXRlcyA6IHNnZS1cdTAwM2VsZW5ndGg7XG4gMTA4Olx0XHRcdG9mZiAgPSBzZ2UtXHUwMDNlb2Zmc2V0O1xuIDEwOTpcdFx0XHRwYWdlID0gc2dfcGFnZShzZ2UpO1xuIDExMDpcdFxuIDExMTpcdHJldHJ5OlxuIDExMjpcdFx0XHRtc2doZHIubXNnX2ZsYWdzID0gZmxhZ3MgfCBNU0dfU1BMSUNFX1BBR0VTO1xuIDExMzpcdFx0XHRoYXNfdHhfdWxwID0gdGxzX3N3X2hhc19jdHhfdHgoc2spO1xuIDExNDpcdFx0XHRpZiAoaGFzX3R4X3VscClcbiAxMTU6XHRcdFx0XHRtc2doZHIubXNnX2ZsYWdzIHw9IE1TR19TRU5EUEFHRV9OT1BPTElDWTtcbiAxMTY6XHRcbiAxMTc6XHRcdFx0aWYgKHNpemUgXHUwMDNjIHNnZS1cdTAwM2VsZW5ndGggXHUwMDI2XHUwMDI2IG1zZy1cdTAwM2VzZy5zdGFydCAhPSBtc2ctXHUwMDNlc2cuZW5kKVxuIDExODpcdFx0XHRcdG1zZ2hkci5tc2dfZmxhZ3MgfD0gTVNHX01PUkU7XG4gMTE5Olx0XG4gMTIwOlx0XHRcdGJ2ZWNfc2V0X3BhZ2UoXHUwMDI2YnZlYywgcGFnZSwgc2l6ZSwgb2ZmKTtcbiAxMjE6XHRcdFx0aW92X2l0ZXJfYnZlYyhcdTAwMjZtc2doZHIubXNnX2l0ZXIsIElURVJfU09VUkNFLCBcdTAwMjZidmVjLCAxLCBzaXplKTtcbiAxMjI6XHRcdFx0cmV0ID0gdGNwX3NlbmRtc2dfbG9ja2VkKHNrLCBcdTAwMjZtc2doZHIsIHNpemUpO1xuIDEyMzpcdFx0XHRpZiAocmV0IFx1MDAzYz0gMClcbiAxMjQ6XHRcdFx0XHRyZXR1cm4gcmV0O1xuIDEyNTpcdFxuIDEyNjpcdFx0XHRpZiAoYXBwbHkpXG4gMTI3Olx0XHRcdFx0YXBwbHlfYnl0ZXMgLT0gcmV0O1xuIDEyODpcdFx0XHRtc2ctXHUwMDNlc2cuc2l6ZSAtPSByZXQ7XG4gMTI5Olx0XHRcdHNnZS1cdTAwM2VvZmZzZXQgJiM0Mzs9IHJldDtcbiAxMzA6XHRcdFx0c2dlLVx1MDAzZWxlbmd0aCAtPSByZXQ7XG4gMTMxOlx0XHRcdGlmICh1bmNoYXJnZSlcbiAxMzI6XHRcdFx0XHRza19tZW1fdW5jaGFyZ2Uoc2ssIHJldCk7XG4gMTMzOlx0XHRcdGlmIChyZXQgIT0gc2l6ZSkge1xuIDEzNDpcdFx0XHRcdHNpemUgLT0gcmV0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDE1OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3Rscy90bHNfbWFpbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTc1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNzU6XHRcdHN0cnVjdCBtc2doZHIgbXNnID0ge1xuIDE3NjpcdFx0XHQubXNnX2ZsYWdzID0gTVNHX1NQTElDRV9QQUdFUyB8IGZsYWdzLFxuIDE3NzpcdFx0fTtcbiAxNzg6XHRcdGludCByZXQgPSAwO1xuIDE3OTpcdFx0c3RydWN0IHBhZ2UgKnA7XG4gMTgwOlx0XHRzaXplX3Qgc2l6ZTtcbiAxODE6XHRcdGludCBvZmZzZXQgPSBmaXJzdF9vZmZzZXQ7XG4gMTgyOlx0XG4gMTgzOlx0XHRzaXplID0gc2ctXHUwMDNlbGVuZ3RoIC0gb2Zmc2V0O1xuIDE4NDpcdFx0b2Zmc2V0ICYjNDM7PSBzZy1cdTAwM2VvZmZzZXQ7XG4gMTg1Olx0XG4gMTg2Olx0XHRjdHgtXHUwMDNlc3BsaWNpbmdfcGFnZXMgPSB0cnVlO1xuIDE4NzpcdFx0d2hpbGUgKDEpIHtcbiAxODg6XHRcdFx0cCA9IHNnX3BhZ2Uoc2cpO1xuIDE4OTpcdHJldHJ5OlxuIDE5MDpcdFx0XHRidmVjX3NldF9wYWdlKFx1MDAyNmJ2ZWMsIHAsIHNpemUsIG9mZnNldCk7XG4gMTkxOlx0XHRcdGlvdl9pdGVyX2J2ZWMoXHUwMDI2bXNnLm1zZ19pdGVyLCBJVEVSX1NPVVJDRSwgXHUwMDI2YnZlYywgMSwgc2l6ZSk7XG4gMTkyOlx0XG4gMTkzOlx0XHRcdHJldCA9IHRjcF9zZW5kbXNnX2xvY2tlZChzaywgXHUwMDI2bXNnLCBzaXplKTtcbiAxOTQ6XHRcbiAxOTU6XHRcdFx0aWYgKHJldCAhPSBzaXplKSB7XG4gMTk2Olx0XHRcdFx0aWYgKHJldCBcdTAwM2UgMCkge1xuIDE5NzpcdFx0XHRcdFx0b2Zmc2V0ICYjNDM7PSByZXQ7XG4gMTk4Olx0XHRcdFx0XHRzaXplIC09IHJldDtcbiAxOTk6XHRcdFx0XHRcdGdvdG8gcmV0cnk7XG4gMjAwOlx0XHRcdFx0fVxuIDIwMTpcdFxuIDIwMjpcdFx0XHRcdG9mZnNldCAtPSBzZy1cdTAwM2VvZmZzZXQ7XG4gMjAzOlx0XHRcdFx0Y3R4LVx1MDAzZXBhcnRpYWxseV9zZW50X29mZnNldCA9IG9mZnNldDtcbiAyMDQ6XHRcdFx0XHRjdHgtXHUwMDNlcGFydGlhbGx5X3NlbnRfcmVjb3JkID0gKHZvaWQgKilzZztcbiAyMDU6XHRcdFx0XHRjdHgtXHUwMDNlc3BsaWNpbmdfcGFnZXMgPSBmYWxzZTtcbiAyMDY6XHRcdFx0XHRyZXR1cm4gcmV0O1xuIDIwNzpcdFx0XHR9XG4gMjA4Olx0XG4gMjA5Olx0XHRcdHB1dF9wYWdlKHApO1xuIDIxMDpcdFx0XHRza19tZW1fdW5jaGFyZ2Uoc2ssIHNnLVx1MDAzZWxlbmd0aCk7XG4gMjExOlx0XHRcdHNnID0gc2dfbmV4dChzZyk7XG4gMjEyOlx0XHRcdGlmICghc2cpXG4gMjEzOlx0XHRcdFx0YnJlYWs7XG4gMjE0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTU6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDU5NwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcmVtb3ZhbCBvZiBgdGNwX3JhdGVfY2hlY2tfYXBwX2xpbWl0ZWQoc2spYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhhdCBkZWNpc2lvbiwgcGFydGljdWxhcmx5IHNpbmNlIGl0IHdhcyBsaWtlbHkgcGFydCBvZiBjb25nZXN0aW9uIGNvbnRyb2wgb3IgZmxvdyByZWd1bGF0aW9uLiBNeSBmaXJzdCBzdGVwIGlzIHRvIHRyYWNlIHdoZXJlIGl0IHdhcyB1c2VkLCBwZXJoYXBzIGluIHJlbGF0ZWQgdmVyc2lvbnMgb2YgdGhlIGtlcm5lbC4KCk5leHQsIEkmIzM5O2xsIG5lZWQgdG8gc2NydXRpbml6ZSB0aGUgYHRjcF9zZW5kbXNnX2xvY2tlZGAgZnVuY3Rpb24uIEkgd2FudCB0byBzZWUgcHJlY2lzZWx5IGhvdyBpdCBoYW5kbGVzIHRoZSBzZW5kaW5nIHByb2Nlc3Mgbm93LCBpbiB0aGUgYWJzZW5jZSBvZiBgdGNwX3JhdGVfY2hlY2tfYXBwX2xpbWl0ZWRgLiBJcyB0aGUgZnVuY3Rpb25hbGl0eSBiZWluZyBoYW5kbGVkIGVsc2V3aGVyZT8gSGFzIHRoZSByYXRlIGxpbWl0aW5nIGxvZ2ljIGJlZW4gc2hpZnRlZCwgb3IgY29tcGxldGVseSBlbGltaW5hdGVkPyBJIG5lZWQgdG8gYW5hbHl6ZSBpdHMgY3VycmVudCBpbXBsZW1lbnRhdGlvbiB0byBncmFzcCB0aGUgb3ZlcmFsbCBpbXBhY3Qgb24gdGhlIFRDUCBzdGFjay4gVW5kZXJzdGFuZGluZyB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBgdGNwX3NlbmRtc2dfbG9ja2VkYCBhbmQgYW55IG90aGVyIHBvdGVudGlhbCByZXBsYWNlbWVudCBtZWNoYW5pc21zIGlzIGtleS4gVGhpcyBpcyBhIGNydWNpYWwgYXJlYSBhbmQgSSBuZWVkIHRvIGJlIGRpbGlnZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDE1OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjcF9yYXRlX2NoZWNrX2FwcF9saW1pdGVkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcC5jPTEwNTE9aW50IHRjcF9zZW5kbXNnX2Zhc3RvcGVuKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBpbnQgKmNvcGllZCxcbi0tXG5uZXQvaXB2NC90Y3AuYy0xMDk4LS8qIElmIGEgZ2FwIGlzIGRldGVjdGVkIGJldHdlZW4gc2VuZHMsIG1hcmsgdGhlIHNvY2tldCBhcHBsaWNhdGlvbi1saW1pdGVkLiAqL1xubmV0L2lwdjQvdGNwLmM6MTA5OTp2b2lkIHRjcF9yYXRlX2NoZWNrX2FwcF9saW1pdGVkKHN0cnVjdCBzb2NrICpzaylcbm5ldC9pcHY0L3RjcC5jLTExMDAte1xuLS1cbm5ldC9pcHY0L3RjcC5jLTExMTMtfVxubmV0L2lwdjQvdGNwLmM6MTExNDpFWFBPUlRfU1lNQk9MX0dQTCh0Y3BfcmF0ZV9jaGVja19hcHBfbGltaXRlZCk7XG5uZXQvaXB2NC90Y3AuYy0xMTE1LVxubmV0L2lwdjQvdGNwLmM9MTExNj1pbnQgdGNwX3NlbmRtc2dfbG9ja2VkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcbi0tXG5uZXQvaXB2NC90Y3AuYy0xMTg5LVxubmV0L2lwdjQvdGNwLmM6MTE5MDpcdHRjcF9yYXRlX2NoZWNrX2FwcF9saW1pdGVkKHNrKTsgIC8qIGlzIHNlbmRpbmcgYXBwbGljYXRpb24tbGltaXRlZD8gKi9cbm5ldC9pcHY0L3RjcC5jLTExOTEtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTU6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTE2MgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDcwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBteXNlbGY6CgoqKkludmVzdGlnYXRpbmcgVENQIFJhdGUgTGltaXRpbmcqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBUQ1AgcmF0ZSBsaW1pdGluZyBpc3N1ZS4gVGhlIGNvcmUgb2YgaXQgc2VlbXMgdG8gYmUgaW4gdGhlIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgIGZ1bmN0aW9uLiBMZXQgbWUgc2VlLi4uIHllcywgbGluZSAxMTkwIGluIGBuZXQvaXB2NC90Y3AuY2AgaXMgdGhlIGNydWNpYWwgc3BvdC4gQW5kLCBnb29kLCBJIHNlZSB0aGF0IGB0Y3Bfc2VuZG1zZ19sb2NrZWRgICphbHJlYWR5KiBjYWxscyBgdGNwX3JhdGVfY2hlY2tfYXBwX2xpbWl0ZWQoc2spYC4gVGhhdCYjMzk7cyBhIGtleSBwaWVjZSBvZiBpbmZvcm1hdGlvbi4KCk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQgYSBiaXQgYmV0dGVyLiBJJiMzOTtsbCBuZWVkIHRvIGdvIGJhY2sgYW5kIGdldCBhIHdpZGVyIHZpZXcgYW5kIHNlZSB3aGF0IGlzIGdvaW5nIG9uIGF0IHRoZSBlbnRyeSB0byB0aGUgZnVuY3Rpb24uIExldCBtZSBzY2FuIHRoZSBjb2RlIGFyb3VuZCBsaW5lcyAxMTgwIHRvIDEyMDAgaW4gYG5ldC9pcHY0L3RjcC5jYC4gR2V0dGluZyB0aGUgd2lkZXIgY29kZSBwaWN0dXJlIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIGhvdyB0aGlzIHJhdGUgY2hlY2sgZml0cyBpbnRvIHRoZSBvdmVyYWxsIHNlbmQgcGF0aCBhbmQgd2hldGhlciBhbnl0aGluZyYjMzk7cyBtaXNjb25maWd1cmVkIGFyb3VuZCB0aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDE1OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzExODA6XHRcdCAgICAhdHAtXHUwMDNlcmVwYWlyKSB7XG4xMTgxOlx0XHRcdGVyciA9IHRjcF9zZW5kbXNnX2Zhc3RvcGVuKHNrLCBtc2csIFx1MDAyNmNvcGllZF9zeW4sIHNpemUsIHVhcmcpO1xuMTE4MjpcdFx0XHRpZiAoZXJyID09IC1FSU5QUk9HUkVTUyBcdTAwMjZcdTAwMjYgY29waWVkX3N5biBcdTAwM2UgMClcbjExODM6XHRcdFx0XHRnb3RvIG91dDtcbjExODQ6XHRcdFx0ZWxzZSBpZiAoZXJyKVxuMTE4NTpcdFx0XHRcdGdvdG8gb3V0X2VycjtcbjExODY6XHRcdH1cbjExODc6XHRcbjExODg6XHRcdHRpbWVvID0gc29ja19zbmR0aW1lbyhzaywgZmxhZ3MgXHUwMDI2IE1TR19ET05UV0FJVCk7XG4xMTg5Olx0XG4xMTkwOlx0XHR0Y3BfcmF0ZV9jaGVja19hcHBfbGltaXRlZChzayk7ICAvKiBpcyBzZW5kaW5nIGFwcGxpY2F0aW9uLWxpbWl0ZWQ/ICovXG4xMTkxOlx0XG4xMTkyOlx0XHQvKiBXYWl0IGZvciBhIGNvbm5lY3Rpb24gdG8gZmluaXNoLiBPbmUgZXhjZXB0aW9uIGlzIFRDUCBGYXN0IE9wZW5cbjExOTM6XHRcdCAqIChwYXNzaXZlIHNpZGUpIHdoZXJlIGRhdGEgaXMgYWxsb3dlZCB0byBiZSBzZW50IGJlZm9yZSBhIGNvbm5lY3Rpb25cbjExOTQ6XHRcdCAqIGlzIGZ1bGx5IGVzdGFibGlzaGVkLlxuMTE5NTpcdFx0ICovXG4xMTk2Olx0XHRpZiAoKCgxIFx1MDAzY1x1MDAzYyBzay1cdTAwM2Vza19zdGF0ZSkgXHUwMDI2IH4oVENQRl9FU1RBQkxJU0hFRCB8IFRDUEZfQ0xPU0VfV0FJVCkpIFx1MDAyNlx1MDAyNlxuMTE5NzpcdFx0ICAgICF0Y3BfcGFzc2l2ZV9mYXN0b3BlbihzaykpIHtcbjExOTg6XHRcdFx0ZXJyID0gc2tfc3RyZWFtX3dhaXRfY29ubmVjdChzaywgXHUwMDI2dGltZW8pO1xuMTE5OTpcdFx0XHRpZiAoZXJyICE9IDApXG4xMjAwOlx0XHRcdFx0Z290byBkb19lcnJvcjtcbjEyMDE6XHRcdH1cbjEyMDI6XHRcbjEyMDM6XHRcdGlmICh1bmxpa2VseSh0cC1cdTAwM2VyZXBhaXIpKSB7XG4xMjA0Olx0XHRcdGlmICh0cC1cdTAwM2VyZXBhaXJfcXVldWUgPT0gVENQX1JFQ1ZfUVVFVUUpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTU6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTkxMQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDU2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBUaGlzIENvZGUgQ2hhbmdlKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCByZWFsaXplZCBzb21ldGhpbmcga2V5OiB0aGUgY2FsbHMgdG8gYHRjcF9yYXRlX2NoZWNrX2FwcF9saW1pdGVkKHNrKWAgYmVmb3JlIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgIGluIGB0Y3BfYnBmX3B1c2hgIGFuZCBgdGxzX3B1c2hfc2dgIHdlcmUgcmVkdW5kYW50ISBUaGF0IGZ1bmN0aW9uIGlzIGFscmVhZHkgYmVpbmcgY2FsbGVkIHdpdGhpbiBgdGNwX3NlbmRtc2dfbG9ja2VkYC4gR29vZCBjYXRjaCwgdGhhdCYjMzk7cyBkZWZpbml0ZWx5IGEgY2xlYW51cC4KCk5vdywgbGV0JiMzOTtzIHB1dCBvbiB0aGUgZnV6emluZyBoYXQuIEkgaGF2ZSB0byBiZSB0aG9yb3VnaCwgZXNwZWNpYWxseSB3aGVuIGl0IGNvbWVzIHRvIHJlZmFjdG9yaW5ncyBhbmQgbmV0d29ya2luZyBjb2RlLiBJIG5lZWQgdG8gdHJlYXQgY2xhaW1zIG9mICYjMzQ7bm8gZnVuY3Rpb25hbCBjaGFuZ2UmIzM0OyB3aXRoIHNlcmlvdXMgc2tlcHRpY2lzbS4gVGhlIGd1aWRlbGluZXMgYXJlIHByZXR0eSBjbGVhciBvbiB0aGlzOiBhbnkgcmVzdHJ1Y3R1cmluZywgZXZlbiBzZWVtaW5nbHkgbWlub3IsIHdhcnJhbnRzIGEgY2xvc2VyIGxvb2suCgpBY2NvcmRpbmcgdG8gdGhvc2UgZ3VpZGVsaW5lcywgU2VjdGlvbiAxIG1ha2VzIGl0IGV4cGxpY2l0IHRoYXQgSSBzaG91bGRuJiMzOTt0IHRha2UgdGhvc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUsIHJlZmFjdG9yaW5ncyBhbmQgY2xlYW51cHMgY2FuIGludHJvZHVjZSBzdWJ0bGUgaXNzdWVzLgoKU2VjdGlvbiAyIHByb3ZpZGVzIG5lZ2F0aXZlIGNyaXRlcmlhLCBidXQgbm9uZSBhcHBseS4gSXQgc2F5cyBJIGNhbiBpZ25vcmUgY2hhbmdlcyB0aGF0IGFyZSBub24tZXhlY3V0YWJsZSwgZG9jdW1lbnRhdGlvbiwgdXNlciBzcGFjZSwgYW5kIHNvIG9uLCBidXQgdGhpcyBkb2VzbiYjMzk7dCBmaXQgdGhhdCBkZXNjcmlwdGlvbi4KClNlY3Rpb24gMyBsYXlzIG91dCB0aGUgcG9zaXRpdmUgY3JpdGVyaWEsIGFuZCB0aGF0JiMzOTtzIHdoZXJlIHRoaXMgbGFuZHMuIFRoZSBtb2RpZmllZCBjb2RlIGlzIGluIGBuZXQvaXB2NC90Y3BfYnBmLmNgIGFuZCBgbmV0L3Rscy90bHNfbWFpbi5jYCDigJMgY29yZSBuZXR3b3JraW5nIHN1YnN5c3RlbXMuIFRoaXMgdG91Y2hlcyAqcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSosIHdoaWNoIG1lYW5zIHRoZSBwYXRjaCBmYWxscyB1bmRlciB0aGUgdW1icmVsbGEgb2YgJiMzNDthbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuJiMzNDsgVGhhdCBtZWFucyBJJiMzOTt2ZSBnb3QgYSByZXNwb25zaWJpbGl0eSB0byBzYXkgYFdvcnRoRnV6emluZz10cnVlYC4KCk5vdyBJIG5lZWQgdG8gZ2F0aGVyIHNvbWUgbW9yZSBpbmZvLiBJIHNob3VsZCBjaGVjayB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zLCB0aGUgS2NvbmZpZyBvcHRpb25zLCBhbmQgbG9vayBhdCB0aGUgTWFrZWZpbGUuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgS2NvbmZpZyBvcHRpb25zIGdvdmVybiBgbmV0L2lwdjQvdGNwX2JwZi5jYCBhbmQgYG5ldC90bHMvdGxzX21haW4uY2AuIExldCYjMzk7cyBjaGVjayBgbmV0L2lwdjQvTWFrZWZpbGVgIGFuZCB0aGVuIGxvb2sgYXQgYG5ldC90bHMvS2NvbmZpZ2AgYW5kIGBuZXQvdGxzL01ha2VmaWxlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTU6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGNwX2JwZiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9NYWtlZmlsZT02Mj1vYmotJChDT05GSUdfVENQX0NPTkdfSUxMSU5PSVMpICYjNDM7PSB0Y3BfaWxsaW5vaXMub1xubmV0L2lwdjQvTWFrZWZpbGU6NjM6b2JqLSQoQ09ORklHX05FVF9TT0NLX01TRykgJiM0Mzs9IHRjcF9icGYub1xubmV0L2lwdjQvTWFrZWZpbGUtNjQtb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gdWRwX2JwZi5vXG4tLVxubmV0L2lwdjQvdGNwLmM9NDQ4MT1pbnQgZG9fdGNwX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsXG4tLVxubmV0L2lwdjQvdGNwLmMtNDg1NS1cbm5ldC9pcHY0L3RjcC5jOjQ4NTY6Ym9vbCB0Y3BfYnBmX2J5cGFzc19nZXRzb2Nrb3B0KGludCBsZXZlbCwgaW50IG9wdG5hbWUpXG5uZXQvaXB2NC90Y3AuYy00ODU3LXtcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmM9MzM9c3RhdGljIGludCBicGZfdGNwX2luZ3Jlc3Moc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLFxuLS1cbm5ldC9pcHY0L3RjcF9icGYuYy05MC1cbm5ldC9pcHY0L3RjcF9icGYuYzo5MTpzdGF0aWMgaW50IHRjcF9icGZfcHVzaChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19tc2cgKm1zZywgdTMyIGFwcGx5X2J5dGVzLFxubmV0L2lwdjQvdGNwX2JwZi5jLTkyLVx0XHRcdGludCBmbGFncywgYm9vbCB1bmNoYXJnZSlcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmMtMTUxLVxubmV0L2lwdjQvdGNwX2JwZi5jOjE1MjpzdGF0aWMgaW50IHRjcF9icGZfcHVzaF9sb2NrZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfbXNnICptc2csXG5uZXQvaXB2NC90Y3BfYnBmLmMtMTUzLVx0XHRcdCAgICAgICB1MzIgYXBwbHlfYnl0ZXMsIGludCBmbGFncywgYm9vbCB1bmNoYXJnZSlcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmMtMTU3LVx0bG9ja19zb2NrKHNrKTtcbm5ldC9pcHY0L3RjcF9icGYuYzoxNTg6XHRyZXQgPSB0Y3BfYnBmX3B1c2goc2ssIG1zZywgYXBwbHlfYnl0ZXMsIGZsYWdzLCB1bmNoYXJnZSk7XG5uZXQvaXB2NC90Y3BfYnBmLmMtMTU5LVx0cmVsZWFzZV9zb2NrKHNrKTtcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmMtMTYyLVxubmV0L2lwdjQvdGNwX2JwZi5jOjE2MzppbnQgdGNwX2JwZl9zZW5kbXNnX3JlZGlyKHN0cnVjdCBzb2NrICpzaywgYm9vbCBpbmdyZXNzLFxubmV0L2lwdjQvdGNwX2JwZi5jLTE2NC1cdFx0XHQgIHN0cnVjdCBza19tc2cgKm1zZywgdTMyIGJ5dGVzLCBpbnQgZmxhZ3MpXG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jLTE3Mi1cdHJldCA9IGluZ3Jlc3MgPyBicGZfdGNwX2luZ3Jlc3Moc2ssIHBzb2NrLCBtc2csIGJ5dGVzKSA6XG5uZXQvaXB2NC90Y3BfYnBmLmM6MTczOlx0XHRcdHRjcF9icGZfcHVzaF9sb2NrZWQoc2ssIG1zZywgYnl0ZXMsIGZsYWdzLCBmYWxzZSk7XG5uZXQvaXB2NC90Y3BfYnBmLmMtMTc0LVx0c2tfcHNvY2tfcHV0KHNrLCBwc29jayk7XG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jLTE3Ni19XG5uZXQvaXB2NC90Y3BfYnBmLmM6MTc3OkVYUE9SVF9TWU1CT0xfR1BMKHRjcF9icGZfc2VuZG1zZ19yZWRpcik7XG5uZXQvaXB2NC90Y3BfYnBmLmMtMTc4LVxuLS1cbm5ldC9pcHY0L3RjcF9icGYuYz0yMDI9c3RhdGljIGJvb2wgaXNfbmV4dF9tc2dfZmluKHN0cnVjdCBza19wc29jayAqcHNvY2spXG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jLTIxOS1cbm5ldC9pcHY0L3RjcF9icGYuYzoyMjA6c3RhdGljIGludCB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyKHN0cnVjdCBzb2NrICpzayxcbm5ldC9pcHY0L3RjcF9icGYuYy0yMjEtXHRcdFx0XHQgIHN0cnVjdCBtc2doZHIgKm1zZyxcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmMtMzMzLVxubmV0L2lwdjQvdGNwX2JwZi5jOjMzNDpzdGF0aWMgaW50IHRjcF9icGZfaW9jdGwoc3RydWN0IHNvY2sgKnNrLCBpbnQgY21kLCBpbnQgKmthcmcpXG5uZXQvaXB2NC90Y3BfYnBmLmMtMzM1LXtcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmMtMzY2LVxubmV0L2lwdjQvdGNwX2JwZi5jOjM2NzpzdGF0aWMgaW50IHRjcF9icGZfcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcbm5ldC9pcHY0L3RjcF9icGYuYy0zNjgtXHRcdFx0ICAgaW50IGZsYWdzKVxuLS1cbm5ldC9pcHY0L3RjcF9icGYuYy00MTYtXG5uZXQvaXB2NC90Y3BfYnBmLmM6NDE3OnN0YXRpYyBpbnQgdGNwX2JwZl9zZW5kX3ZlcmRpY3Qoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLFxubmV0L2lwdjQvdGNwX2JwZi5jLTQxOC1cdFx0XHRcdHN0cnVjdCBza19tc2cgKm1zZywgaW50ICpjb3BpZWQsIGludCBmbGFncylcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmMtNDYwLVx0Y2FzZSBfX1NLX1BBU1M6XG5uZXQvaXB2NC90Y3BfYnBmLmM6NDYxOlx0XHRyZXQgPSB0Y3BfYnBmX3B1c2goc2ssIG1zZywgdG9zZW5kLCBmbGFncywgdHJ1ZSk7XG5uZXQvaXB2NC90Y3BfYnBmLmMtNDYyLVx0XHRpZiAodW5saWtlbHkocmV0KSkge1xuLS1cbm5ldC9pcHY0L3RjcF9icGYuYy00ODUtXHRcdG9yaWdzaXplID0gbXNnLVx1MDAzZXNnLnNpemU7XG5uZXQvaXB2NC90Y3BfYnBmLmM6NDg2Olx0XHRyZXQgPSB0Y3BfYnBmX3NlbmRtc2dfcmVkaXIoc2tfcmVkaXIsIHJlZGlyX2luZ3Jlc3MsXG5uZXQvaXB2NC90Y3BfYnBmLmMtNDg3LVx0XHRcdFx0XHQgICAgbXNnLCB0b3NlbmQsIGZsYWdzKTtcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmMtNTMyLVxubmV0L2lwdjQvdGNwX2JwZi5jOjUzMzpzdGF0aWMgaW50IHRjcF9icGZfc2VuZG1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXG5uZXQvaXB2NC90Y3BfYnBmLmMtNTM0LXtcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmMtNTk4LVxubmV0L2lwdjQvdGNwX2JwZi5jOjU5OTpcdFx0ZXJyID0gdGNwX2JwZl9zZW5kX3ZlcmRpY3Qoc2ssIHBzb2NrLCBtc2dfdHgsIFx1MDAyNmNvcGllZCwgZmxhZ3MpO1xubmV0L2lwdjQvdGNwX2JwZi5jLTYwMC1cdFx0aWYgKHVubGlrZWx5KGVyciBcdTAwM2MgMCkpXG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jPTYzNj1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKHRjcHY2X3Byb3RfbG9jayk7XG5uZXQvaXB2NC90Y3BfYnBmLmM6NjM3OnN0YXRpYyBzdHJ1Y3QgcHJvdG8gdGNwX2JwZl9wcm90c1tUQ1BfQlBGX05VTV9QUk9UU11bVENQX0JQRl9OVU1fQ0ZHU107XG5uZXQvaXB2NC90Y3BfYnBmLmMtNjM4LVxubmV0L2lwdjQvdGNwX2JwZi5jOjYzOTpzdGF0aWMgdm9pZCB0Y3BfYnBmX3JlYnVpbGRfcHJvdG9zKHN0cnVjdCBwcm90byBwcm90W1RDUF9CUEZfTlVNX0NGR1NdLFxubmV0L2lwdjQvdGNwX2JwZi5jLTY0MC1cdFx0XHRcdCAgIHN0cnVjdCBwcm90byAqYmFzZSlcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmMtNjQ0LVx0cHJvdFtUQ1BfQlBGX0JBU0VdLmNsb3NlXHRcdD0gc29ja19tYXBfY2xvc2U7XG5uZXQvaXB2NC90Y3BfYnBmLmM6NjQ1Olx0cHJvdFtUQ1BfQlBGX0JBU0VdLnJlY3Ztc2dcdFx0PSB0Y3BfYnBmX3JlY3Ztc2c7XG5uZXQvaXB2NC90Y3BfYnBmLmMtNjQ2LVx0cHJvdFtUQ1BfQlBGX0JBU0VdLnNvY2tfaXNfcmVhZGFibGVcdD0gc2tfbXNnX2lzX3JlYWRhYmxlO1xubmV0L2lwdjQvdGNwX2JwZi5jOjY0NzpcdHByb3RbVENQX0JQRl9CQVNFXS5pb2N0bFx0XHQ9IHRjcF9icGZfaW9jdGw7XG5uZXQvaXB2NC90Y3BfYnBmLmMtNjQ4LVxubmV0L2lwdjQvdGNwX2JwZi5jLTY0OS1cdHByb3RbVENQX0JQRl9UWF1cdFx0XHQ9IHByb3RbVENQX0JQRl9CQVNFXTtcbm5ldC9pcHY0L3RjcF9icGYuYzo2NTA6XHRwcm90W1RDUF9CUEZfVFhdLnNlbmRtc2dcdFx0PSB0Y3BfYnBmX3NlbmRtc2c7XG5uZXQvaXB2NC90Y3BfYnBmLmMtNjUxLVxubmV0L2lwdjQvdGNwX2JwZi5jLTY1Mi1cdHByb3RbVENQX0JQRl9SWF1cdFx0XHQ9IHByb3RbVENQX0JQRl9CQVNFXTtcbm5ldC9pcHY0L3RjcF9icGYuYzo2NTM6XHRwcm90W1RDUF9CUEZfUlhdLnJlY3Ztc2dcdFx0PSB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyO1xubmV0L2lwdjQvdGNwX2JwZi5jLTY1NC1cbm5ldC9pcHY0L3RjcF9icGYuYy02NTUtXHRwcm90W1RDUF9CUEZfVFhSWF1cdFx0XHQ9IHByb3RbVENQX0JQRl9UWF07XG5uZXQvaXB2NC90Y3BfYnBmLmM6NjU2Olx0cHJvdFtUQ1BfQlBGX1RYUlhdLnJlY3Ztc2dcdFx0PSB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyO1xubmV0L2lwdjQvdGNwX2JwZi5jLTY1Ny19XG5uZXQvaXB2NC90Y3BfYnBmLmMtNjU4LVxubmV0L2lwdjQvdGNwX2JwZi5jOjY1OTpzdGF0aWMgdm9pZCB0Y3BfYnBmX2NoZWNrX3Y2X25lZWRzX3JlYnVpbGQoc3RydWN0IHByb3RvICpvcHMpXG5uZXQvaXB2NC90Y3BfYnBmLmMtNjYwLXtcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmMtNjYzLVx0XHRpZiAobGlrZWx5KG9wcyAhPSB0Y3B2Nl9wcm90X3NhdmVkKSkge1xubmV0L2lwdjQvdGNwX2JwZi5jOjY2NDpcdFx0XHR0Y3BfYnBmX3JlYnVpbGRfcHJvdG9zKHRjcF9icGZfcHJvdHNbVENQX0JQRl9JUFY2XSwgb3BzKTtcbm5ldC9pcHY0L3RjcF9icGYuYy02NjUtXHRcdFx0c21wX3N0b3JlX3JlbGVhc2UoXHUwMDI2dGNwdjZfcHJvdF9zYXZlZCwgb3BzKTtcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmMtNjcwLVxubmV0L2lwdjQvdGNwX2JwZi5jOjY3MTpzdGF0aWMgaW50IF9faW5pdCB0Y3BfYnBmX3Y0X2J1aWxkX3Byb3RvKHZvaWQpXG5uZXQvaXB2NC90Y3BfYnBmLmMtNjcyLXtcbm5ldC9pcHY0L3RjcF9icGYuYzo2NzM6XHR0Y3BfYnBmX3JlYnVpbGRfcHJvdG9zKHRjcF9icGZfcHJvdHNbVENQX0JQRl9JUFY0XSwgXHUwMDI2dGNwX3Byb3QpO1xubmV0L2lwdjQvdGNwX2JwZi5jLTY3NC1cdHJldHVybiAwO1xubmV0L2lwdjQvdGNwX2JwZi5jLTY3NS19XG5uZXQvaXB2NC90Y3BfYnBmLmM6Njc2OmxhdGVfaW5pdGNhbGwodGNwX2JwZl92NF9idWlsZF9wcm90byk7XG5uZXQvaXB2NC90Y3BfYnBmLmMtNjc3LVxubmV0L2lwdjQvdGNwX2JwZi5jOjY3ODpzdGF0aWMgaW50IHRjcF9icGZfYXNzZXJ0X3Byb3RvX29wcyhzdHJ1Y3QgcHJvdG8gKm9wcylcbm5ldC9pcHY0L3RjcF9icGYuYy02Nzkte1xuLS1cbm5ldC9pcHY0L3RjcF9icGYuYy02ODgtI2lmIElTX0VOQUJMRUQoQ09ORklHX0JQRl9TVFJFQU1fUEFSU0VSKVxubmV0L2lwdjQvdGNwX2JwZi5jOjY4OTppbnQgdGNwX2JwZl9zdHJwX3JlYWRfc29jayhzdHJ1Y3Qgc3RycGFyc2VyICpzdHJwLCByZWFkX2Rlc2NyaXB0b3JfdCAqZGVzYyxcbm5ldC9pcHY0L3RjcF9icGYuYy02OTAtXHRcdFx0ICAgc2tfcmVhZF9hY3Rvcl90IHJlY3ZfYWN0b3IpXG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jLTcxMi1cdCAqIEZvciBTS19SRURJUkVDVCwgd2UgbmVlZCB0byBhY2sgdGhlIGZyYW1lIGltbWVkaWF0ZWx5IGJ1dCBmb3Jcbm5ldC9pcHY0L3RjcF9icGYuYzo3MTM6XHQgKiBTS19QQVNTLCB3ZSB3YW50IHRvIGRlbGF5IHRoZSBhY2sgdW50aWwgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcigpLlxubmV0L2lwdjQvdGNwX2JwZi5jLTcxNC1cdCAqL1xuLS1cbm5ldC9pcHY0L3RjcF9icGYuYy03MjMtXG5uZXQvaXB2NC90Y3BfYnBmLmM6NzI0OmludCB0Y3BfYnBmX3VwZGF0ZV9wcm90byhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2ssIGJvb2wgcmVzdG9yZSlcbm5ldC9pcHY0L3RjcF9icGYuYy03MjUte1xuLS1cbm5ldC9pcHY0L3RjcF9icGYuYy03NTAtXHRpZiAoc2stXHUwMDNlc2tfZmFtaWx5ID09IEFGX0lORVQ2KSB7XG5uZXQvaXB2NC90Y3BfYnBmLmM6NzUxOlx0XHRpZiAodGNwX2JwZl9hc3NlcnRfcHJvdG9fb3BzKHBzb2NrLVx1MDAzZXNrX3Byb3RvKSlcbm5ldC9pcHY0L3RjcF9icGYuYy03NTItXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG5uZXQvaXB2NC90Y3BfYnBmLmMtNzUzLVxubmV0L2lwdjQvdGNwX2JwZi5jOjc1NDpcdFx0dGNwX2JwZl9jaGVja192Nl9uZWVkc19yZWJ1aWxkKHBzb2NrLVx1MDAzZXNrX3Byb3RvKTtcbm5ldC9pcHY0L3RjcF9icGYuYy03NTUtXHR9XG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jLTc1Ny1cdC8qIFBhaXJzIHdpdGggbG9ja2xlc3MgcmVhZCBpbiBza19jbG9uZV9sb2NrKCkgKi9cbm5ldC9pcHY0L3RjcF9icGYuYzo3NTg6XHRzb2NrX3JlcGxhY2VfcHJvdG8oc2ssIFx1MDAyNnRjcF9icGZfcHJvdHNbZmFtaWx5XVtjb25maWddKTtcbm5ldC9pcHY0L3RjcF9icGYuYy03NTktXHRyZXR1cm4gMDtcbm5ldC9pcHY0L3RjcF9icGYuYy03NjAtfVxubmV0L2lwdjQvdGNwX2JwZi5jOjc2MTpFWFBPUlRfU1lNQk9MX0dQTCh0Y3BfYnBmX3VwZGF0ZV9wcm90byk7XG5uZXQvaXB2NC90Y3BfYnBmLmMtNzYyLVxubmV0L2lwdjQvdGNwX2JwZi5jOjc2MzovKiBJZiBhIGNoaWxkIGdvdCBjbG9uZWQgZnJvbSBhIGxpc3RlbmluZyBzb2NrZXQgdGhhdCBoYWQgdGNwX2JwZlxubmV0L2lwdjQvdGNwX2JwZi5jLTc2NC0gKiBwcm90b2NvbCBjYWxsYmFja3MgaW5zdGFsbGVkLCB3ZSBuZWVkIHRvIHJlc3RvcmUgdGhlIGNhbGxiYWNrcyB0b1xubmV0L2lwdjQvdGNwX2JwZi5jLTc2NS0gKiB0aGUgZGVmYXVsdCBvbmVzIGJlY2F1c2UgdGhlIGNoaWxkIGRvZXMgbm90IGluaGVyaXQgdGhlIHBzb2NrIHN0YXRlXG5uZXQvaXB2NC90Y3BfYnBmLmM6NzY2OiAqIHRoYXQgdGNwX2JwZiBjYWxsYmFja3MgZXhwZWN0LlxubmV0L2lwdjQvdGNwX2JwZi5jLTc2Ny0gKi9cbm5ldC9pcHY0L3RjcF9icGYuYzo3Njg6dm9pZCB0Y3BfYnBmX2Nsb25lKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKm5ld3NrKVxubmV0L2lwdjQvdGNwX2JwZi5jLTc2OS17XG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jLTc3MS1cbm5ldC9pcHY0L3RjcF9icGYuYzo3NzI6XHRpZiAoaXNfaW5zaWRldmFyKHByb3QsIHRjcF9icGZfcHJvdHMpKVxubmV0L2lwdjQvdGNwX2JwZi5jLTc3My1cdFx0bmV3c2stXHUwMDNlc2tfcHJvdCA9IHNrLVx1MDAzZXNrX3Byb3RfY3JlYXRvcjtcbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz0xMDcwPXN0YXRpYyB2b2lkIHRjcF9ydHRfZXN0aW1hdG9yKHN0cnVjdCBzb2NrICpzaywgbG9uZyBtcnR0X3VzKVxuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTExMjItXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzoxMTIzOlx0XHRcdHRjcF9icGZfcnR0KHNrLCBtcnR0X3VzLCBzcnR0KTtcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTExMjQtXHRcdH1cbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy0xMTMyLVxubmV0L2lwdjQvdGNwX2lucHV0LmM6MTEzMzpcdFx0dGNwX2JwZl9ydHQoc2ssIG1ydHRfdXMsIHNydHQpO1xubmV0L2lwdjQvdGNwX2lucHV0LmMtMTEzNC1cdH1cbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz03NDU0PXN0YXRpYyB2b2lkIHRjcF9lY25fY3JlYXRlX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTc0ODQtXHQgICAgKGVjbl9va19kc3QgXHUwMDI2IERTVF9GRUFUVVJFX0VDTl9DQSkgfHxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjc0ODU6XHQgICAgdGNwX2JwZl9jYV9uZWVkc19lY24oKHN0cnVjdCBzb2NrICopcmVxKSlcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTc0ODYtXHRcdGluZXRfcnNrKHJlcSktXHUwMDNlZWNuX29rID0gMTtcbi0tXG5uZXQvaXB2NC90Y3BfaXB2NC5jPTExNjI9c3RhdGljIGludCB0Y3BfdjRfc2VuZF9zeW5hY2soY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsXG4tLVxubmV0L2lwdjQvdGNwX2lwdjQuYy0xMTkxLVx0XHRpZiAoIUlORVRfRUNOX2lzX2NhcGFibGUodG9zKSBcdTAwMjZcdTAwMjZcbm5ldC9pcHY0L3RjcF9pcHY0LmM6MTE5MjpcdFx0ICAgIHRjcF9icGZfY2FfbmVlZHNfZWNuKChzdHJ1Y3Qgc29jayAqKXJlcSkpXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTExOTMtXHRcdFx0dG9zIHw9IElORVRfRUNOX0VDVF8wO1xuLS1cbm5ldC9pcHY0L3RjcF9pcHY0LmM9MzM0OD1zdHJ1Y3QgcHJvdG8gdGNwX3Byb3QgPSB7XG4tLVxubmV0L2lwdjQvdGNwX2lwdjQuYy0zMzYxLVx0LmdldHNvY2tvcHRcdFx0PSB0Y3BfZ2V0c29ja29wdCxcbm5ldC9pcHY0L3RjcF9pcHY0LmM6MzM2MjpcdC5icGZfYnlwYXNzX2dldHNvY2tvcHRcdD0gdGNwX2JwZl9ieXBhc3NfZ2V0c29ja29wdCxcbm5ldC9pcHY0L3RjcF9pcHY0LmMtMzM2My1cdC5rZWVwYWxpdmVcdFx0PSB0Y3Bfc2V0X2tlZXBhbGl2ZSxcbi0tXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTMzNzMtI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxubmV0L2lwdjQvdGNwX2lwdjQuYzozMzc0Olx0LnBzb2NrX3VwZGF0ZV9za19wcm90XHQ9IHRjcF9icGZfdXBkYXRlX3Byb3RvLFxubmV0L2lwdjQvdGNwX2lwdjQuYy0zMzc1LSNlbmRpZlxuLS1cbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYz01NDY9c3RydWN0IHNvY2sgKnRjcF9jcmVhdGVfb3BlbnJlcV9jaGlsZChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jLTY2My1cdG5ld3RwLVx1MDAzZWJwZl9jaGdfY2NfaW5wcm9ncmVzcyA9IDA7XG5uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmM6NjY0Olx0dGNwX2JwZl9jbG9uZShzaywgbmV3c2spO1xubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jLTY2NS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTU6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEyNDMKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipDaGVja2luZyBOZXQvVExTIE1ha2VmaWxlIGFuZCBLY29uZmlnKioKCk9rYXksIHNvIHdlIG5lZWQgdG8gY2lyY2xlIGJhY2sgYW5kIGdpdmUgdGhlIGBuZXQvdGxzL2AgZGlyZWN0b3J5IGFub3RoZXIgb25jZS1vdmVyLCBzcGVjaWZpY2FsbHkgdGhlIGBNYWtlZmlsZWAgYW5kIGBLY29uZmlnYCBmaWxlcy4gSSYjMzk7bSB0aGlua2luZyB3ZSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBUTFMtcmVsYXRlZCBidWlsZCBwcm9jZXNzIGlzIGNvbnNpc3RlbnQgYW5kIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgcmVncmVzc2lvbnMgb3IgYnVpbGQgYnJlYWtzLiBUaGlzIGxpa2VseSBtZWFucyB2ZXJpZnlpbmcgdGhlIGRlcGVuZGVuY2llcywgY29tcGlsZSBmbGFncywgYW5kIGFueSBjb25kaXRpb25hbCBidWlsZCBsb2dpYyBiYXNlZCBvbiBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zLiBXZSB3YW50IHRvIGJlIGNlcnRhaW4gdGhhdCB0aGVzZSBmaWxlcyBhcmUgdXAtdG8tZGF0ZSBhbmQgY29ycmVjdGx5IHJlZmxlY3QgdGhlIGRlc2lyZWQgYmVoYXZpb3Igd2l0aCB0aGUgbGF0ZXN0IGNoYW5nZXMgbWFkZSB1cHN0cmVhbS4gTm8gc3VycHJpc2VzIGluIHRoZSBidWlsZCBwcm9jZXNzLCB0aGF0JiMzOTtzIHRoZSBnb2FsLiBMZXQmIzM5O3MgbWFrZSBzdXJlIHRoYXQgYW55IGZlYXR1cmUgZmxhZ3MgYXJlIGNvcnJlY3RseSBzZXQsIHRoYXQgdGhleSBpbnRlZ3JhdGUgcHJvcGVybHksIGFuZCB0aGF0IG91ciBjdXN0b20gZGVmaW5pdGlvbnMgYXJlIGNvcnJlY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDE1OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Rsc19wdXNoX3NnJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3Rscy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3Rscy90bHMuaD0yNjI9dGxzX2RldmljZV9kZWNyeXB0ZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgdGxzX2NvbnRleHQgKnRsc19jdHgpXG4tLVxubmV0L3Rscy90bHMuaC0yNjctXG5uZXQvdGxzL3Rscy5oOjI2ODppbnQgdGxzX3B1c2hfc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgdGxzX2NvbnRleHQgKmN0eCxcbm5ldC90bHMvdGxzLmgtMjY5LVx0XHRzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCB1MTYgZmlyc3Rfb2Zmc2V0LFxuLS1cbm5ldC90bHMvdGxzX2RldmljZS5jPTI3OT1zdGF0aWMgaW50IHRsc19wdXNoX3JlY29yZChzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L3Rscy90bHNfZGV2aWNlLmMtMzA5LVx0LyogYWxsIHJlYWR5LCBzZW5kICovXG5uZXQvdGxzL3Rsc19kZXZpY2UuYzozMTA6XHRyZXR1cm4gdGxzX3B1c2hfc2coc2ssIGN0eCwgb2ZmbG9hZF9jdHgtXHUwMDNlc2dfdHhfZGF0YSwgMCwgZmxhZ3MpO1xubmV0L3Rscy90bHNfZGV2aWNlLmMtMzExLX1cbi0tXG5uZXQvdGxzL3Rsc19tYWluLmM9MTM5PWludCB3YWl0X29uX3BlbmRpbmdfd3JpdGVyKHN0cnVjdCBzb2NrICpzaywgbG9uZyAqdGltZW8pXG4tLVxubmV0L3Rscy90bHNfbWFpbi5jLTE2Ny1cbm5ldC90bHMvdGxzX21haW4uYzoxNjg6aW50IHRsc19wdXNoX3NnKHN0cnVjdCBzb2NrICpzayxcbm5ldC90bHMvdGxzX21haW4uYy0xNjktXHRcdHN0cnVjdCB0bHNfY29udGV4dCAqY3R4LFxuLS1cbm5ldC90bHMvdGxzX21haW4uYz0yNjY9aW50IHRsc19wdXNoX3BhcnRpYWxfcmVjb3JkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHRsc19jb250ZXh0ICpjdHgsXG4tLVxubmV0L3Rscy90bHNfbWFpbi5jLTI3NS1cdGN0eC1cdTAwM2VwYXJ0aWFsbHlfc2VudF9yZWNvcmQgPSBOVUxMO1xubmV0L3Rscy90bHNfbWFpbi5jOjI3NjpcdHJldHVybiB0bHNfcHVzaF9zZyhzaywgY3R4LCBzZywgb2Zmc2V0LCBmbGFncyk7XG5uZXQvdGxzL3Rsc19tYWluLmMtMjc3LX1cbi0tXG5uZXQvdGxzL3Rsc19zdy5jPTQwOD1pbnQgdGxzX3R4X3JlY29yZHMoc3RydWN0IHNvY2sgKnNrLCBpbnQgZmxhZ3MpXG4tLVxubmV0L3Rscy90bHNfc3cuYy00NDUtXHRcdFx0bXNnX2VuID0gXHUwMDI2cmVjLVx1MDAzZW1zZ19lbmNyeXB0ZWQ7XG5uZXQvdGxzL3Rsc19zdy5jOjQ0NjpcdFx0XHRyYyA9IHRsc19wdXNoX3NnKHNrLCB0bHNfY3R4LFxubmV0L3Rscy90bHNfc3cuYy00NDctXHRcdFx0XHRcdCBcdTAwMjZtc2dfZW4tXHUwMDNlc2cuZGF0YVttc2dfZW4tXHUwMDNlc2cuY3Vycl0sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDE1OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMDM4CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyBOZXR3b3JrIFNvY2tldCBNZXNzYWdpbmcgYW5kIFRMUyBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGBDT05GSUdfTkVUX1NPQ0tfTVNHYCBhbmQgYENPTkZJR19UTFNgLiBUaG9zZSB0d28gYXJlIGtleSBwbGF5ZXJzLCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlaXIgZGVmaW5pdGlvbnMgd2l0aGluIHRoZSBLY29uZmlnIHN5c3RlbS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nLCAmIzM0O0xldCYjMzk7cyBmaWd1cmUgb3V0IHdoYXQgKnByZWNpc2VseSogS2NvbmZpZyBkaWN0YXRlcyBmb3IgYENPTkZJR19ORVRfU09DS19NU0dgIGFuZCBgQ09ORklHX1RMU2AuJiMzNDsgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZGVmaW5lZCwgdGhlaXIgZGVwZW5kZW5jaWVzLCBhbmQgYW55IGltcGxpY2F0aW9ucyB0aGV5IG1pZ2h0IGhhdmUgb24gdGhlIGJyb2FkZXIgc3lzdGVtLiBJJiMzOTttIGdvaW5nIHRvIGNvbnN1bHQgdGhlIEtjb25maWcgZmlsZXMgZGlyZWN0bHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDE1OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRfU09DS19NU0cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9LY29uZmlnPTQ3NT1jb25maWcgTkVUX1NFTEZURVNUU1xuLS1cbm5ldC9LY29uZmlnLTQ3OC1cbm5ldC9LY29uZmlnOjQ3OTpjb25maWcgTkVUX1NPQ0tfTVNHXG5uZXQvS2NvbmZpZy00ODAtXHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDE1OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMzI2CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkluaXRpYWwgQXNzZXNzbWVudDogRGVjaXBoZXJpbmcgdGhlIE5FVF9TT0NLX01TRyBTZWxlY3RvcioqCgpBbHJpZ2h0LCBzbyB0aGUgZmlyc3QgdGhpbmcgSSYjMzk7bSBkb2luZyBpcyBtZW50YWxseSB0cmFjaW5nIHRoZSBjb2RlIHBhdGhzIHRoYXQgYXJlIGdvaW5nIHRvIHBpY2sgdGhlIGBORVRfU09DS19NU0dgIHNlbGVjdG9yLiBXaGF0IGNvbnRleHQgYXJlIHdlIGluPyBJcyBpdCBhIGtlcm5lbCBtb2R1bGU/IFVzZXItc3BhY2UgYXBwbGljYXRpb24/IFRoZSBpbXBsaWNhdGlvbnMgYXJlIHZhc3RseSBkaWZmZXJlbnQuIEkmIzM5O20gaW1tZWRpYXRlbHkgcnVubmluZyB0aHJvdWdoIHRoZSBsaWtlbHkgc2NlbmFyaW9zIGluIG15IGhlYWQ6IG5ldHdvcmsgc3RhY2sgaW50ZXJhY3Rpb25zLCBzb2NrZXQgaW1wbGVtZW50YXRpb25zLCBtZXNzYWdlIHF1ZXVpbmcsIGFuZCBzbyBvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgdGhpcyBzZWxlY3Rpb24gaXMgKmhhcHBlbmluZyogYmVmb3JlIEkgY2FuIGV2ZW4gYmVnaW4gdG8gdW5kZXJzdGFuZCAqd2h5Ki4gVGhpcyBzZWxlY3Rpb24gbWVjaGFuaXNtIOKAkyB3aGV0aGVyIGl0JiMzOTtzIGFuIGV2ZW50IGxvb3AsIGludGVycnVwdCBoYW5kbGVyLCBvciBzb21lIG90aGVyIHBvbGxpbmcgc3RyYXRlZ3kg4oCTIGlzIGtleS4gSSYjMzk7bSBhbHJlYWR5IGVudmlzaW9uaW5nIHRoZSBwb3NzaWJsZSBib3R0bGVuZWNrcyBhbmQgcmFjZSBjb25kaXRpb25zIHRoYXQgY291bGQgYXJpc2UgZGVwZW5kaW5nIG9uIHRoZSBjaG9zZW4gY29udGV4dC4gSXMgdGhpcyBhIG5ldyBwaWVjZSBvZiBjb2RlLCBvciBhbSBJIGRlYnVnZ2luZyBhbiBleGlzdGluZyBzeXN0ZW0/IFRoZSBpbXBsaWNhdGlvbnMgY2hhbmdlIHRoZSBhcHByb2FjaCBJJiMzOTtsbCB0YWtlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxNTo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZWxlY3QgTkVUX1NPQ0tfTVNHJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvS2NvbmZpZz0zNjE9Y29uZmlnIEJQRl9TVFJFQU1fUEFSU0VSXG4tLVxubmV0L0tjb25maWctMzY2LVx0c2VsZWN0IFNUUkVBTV9QQVJTRVJcbm5ldC9LY29uZmlnOjM2NzpcdHNlbGVjdCBORVRfU09DS19NU0dcbm5ldC9LY29uZmlnLTM2OC1cdGhlbHBcbi0tXG5uZXQvaXB2NC9LY29uZmlnPTM4Mj1jb25maWcgSU5FVF9FU1BJTlRDUFxuLS1cbm5ldC9pcHY0L0tjb25maWctMzg1LVx0c2VsZWN0IFNUUkVBTV9QQVJTRVJcbm5ldC9pcHY0L0tjb25maWc6Mzg2Olx0c2VsZWN0IE5FVF9TT0NLX01TR1xubmV0L2lwdjQvS2NvbmZpZy0zODctXHRzZWxlY3QgWEZSTV9FU1BJTlRDUFxuLS1cbm5ldC9pcHY2L0tjb25maWc9OTA9Y29uZmlnIElORVQ2X0VTUElOVENQXG4tLVxubmV0L2lwdjYvS2NvbmZpZy05My1cdHNlbGVjdCBTVFJFQU1fUEFSU0VSXG5uZXQvaXB2Ni9LY29uZmlnOjk0Olx0c2VsZWN0IE5FVF9TT0NLX01TR1xubmV0L2lwdjYvS2NvbmZpZy05NS1cdHNlbGVjdCBYRlJNX0VTUElOVENQXG4tLVxubmV0L3Rscy9LY29uZmlnPTU9Y29uZmlnIFRMU1xuLS1cbm5ldC90bHMvS2NvbmZpZy0xMC1cdHNlbGVjdCBDUllQVE9fR0NNXG5uZXQvdGxzL0tjb25maWc6MTE6XHRzZWxlY3QgTkVUX1NPQ0tfTVNHXG5uZXQvdGxzL0tjb25maWctMTItXHRkZWZhdWx0IG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTU6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI4OTMKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyBhIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jeSoqCgpIbW0sIHNvIGBDT05GSUdfVExTYCBhbmQgYENPTkZJR19CUEZfU1RSRUFNX1BBUlNFUmAgYXJlIGJvdGggcHVsbGluZyBpbiBgTkVUX1NPQ0tfTVNHYC4gVGhhdOKAmXMgYSBiaXQgdW51c3VhbDsgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IHRoZXNlIHNlZW1pbmdseSBkaXNwYXJhdGUgZmVhdHVyZXMgcmVxdWlyZSB0aGUgc2FtZSB1bmRlcmx5aW5nIG1lY2hhbmlzbS4gSXQgbWVhbnMgdGhhdCB0aGVyZSYjMzk7cyBzb21lIGNvbW1vbiBncm91bmQgb3IgZGVwZW5kZW5jeSB0aGF0IEkgbmVlZCB0byBjbGFyaWZ5LiBJIHNob3VsZCBwcm9iYWJseSBkaXZlIGludG8gYG5ldC90bHMvS2NvbmZpZ2AgZmlyc3QuIFRoYXTigJlzIGxpa2VseSB0aGUgb3JpZ2luIG9mIHRoZSBkZXBlbmRlbmN5LCBhbmQgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IG15IGludmVzdGlnYXRpb24uIFBlcmhhcHMgaXQgd2lsbCBzaGVkIHNvbWUgbGlnaHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDE1OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3Rscy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgVExTIGNvbmZpZ3VyYXRpb25cbiAgIDQ6XHQjXG4gICA1Olx0Y29uZmlnIFRMU1xuICAgNjpcdFx0dHJpc3RhdGUgXCYjMzQ7VHJhbnNwb3J0IExheWVyIFNlY3VyaXR5IHN1cHBvcnRcJiMzNDtcbiAgIDc6XHRcdGRlcGVuZHMgb24gSU5FVFxuICAgODpcdFx0c2VsZWN0IENSWVBUT1xuICAgOTpcdFx0c2VsZWN0IENSWVBUT19BRVNcbiAgMTA6XHRcdHNlbGVjdCBDUllQVE9fR0NNXG4gIDExOlx0XHRzZWxlY3QgTkVUX1NPQ0tfTVNHXG4gIDEyOlx0XHRkZWZhdWx0IG5cbiAgMTM6XHRcdGhlbHBcbiAgMTQ6XHRcdEVuYWJsZSBrZXJuZWwgc3VwcG9ydCBmb3IgVExTIHByb3RvY29sLiBUaGlzIGFsbG93cyBzeW1tZXRyaWNcbiAgMTU6XHRcdGVuY3J5cHRpb24gaGFuZGxpbmcgb2YgdGhlIFRMUyBwcm90b2NvbCB0byBiZSBkb25lIGluLWtlcm5lbC5cbiAgMTY6XHRcbiAgMTc6XHRcdElmIHVuc3VyZSwgc2F5IE4uXG4gIDE4Olx0XG4gIDE5Olx0Y29uZmlnIFRMU19ERVZJQ0VcbiAgMjA6XHRcdGJvb2wgXCYjMzQ7VHJhbnNwb3J0IExheWVyIFNlY3VyaXR5IEhXIG9mZmxvYWRcJiMzNDtcbiAgMjE6XHRcdGRlcGVuZHMgb24gVExTXG4gIDIyOlx0XHRzZWxlY3QgU0tCX0RFQ1JZUFRFRFxuICAyMzpcdFx0c2VsZWN0IFNPQ0tfVkFMSURBVEVfWE1JVFxuICAyNDpcdFx0c2VsZWN0IFNPQ0tfUlhfUVVFVUVfTUFQUElOR1xuICAyNTpcdFx0ZGVmYXVsdCBuXG4gIDI2Olx0XHRoZWxwXG4gIDI3Olx0XHRFbmFibGUga2VybmVsIHN1cHBvcnQgZm9yIEhXIG9mZmxvYWQgb2YgdGhlIFRMUyBwcm90b2NvbC5cbiAgMjg6XHRcbiAgMjk6XHRcdElmIHVuc3VyZSwgc2F5IE4uXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDE1OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNDM0CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgaXQ6CgoqKkRpZ2dpbmcgaW50byBlQlBGIGFuZCBOZXR3b3JrIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgbmV0d29yay1yZWxhdGVkIGVCUEYgZnVuY3Rpb25hbGl0eS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nLiBJJiMzOTt2ZSBiZWVuIGNvbnNpZGVyaW5nIHRoaXMgZnJvbSB0aGUgcGVyc3BlY3RpdmUgb2YgdGhlIGJyb2FkZXIga2VybmVsIGRlc2lnbiwgYW5kIHNvIEkgd2FudCB0byBtYWtlIHN1cmUgSSYjMzk7bSBmdWxseSBhd2FyZSBvZiBldmVyeSBvcHRpb24uCgpSaWdodCwgc28gdG8gYmUgdGhvcm91Z2gsIEkgc2hvdWxkIGFsc28gc3BlY2lmaWNhbGx5IGNoZWNrIHRoZSBgQlBGX1NUUkVBTV9QQVJTRVJgIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHdpdGhpbiBgbmV0L0tjb25maWdgLiBUaGlzIGlzIHByb2JhYmx5IHdoZXJlIHRoZSByZWFsbHkgZmluZS1ncmFpbmVkLCBzdHJlYW0tYmFzZWQgcGFja2V0IGluc3BlY3Rpb24gYW5kIG1hbmlwdWxhdGlvbiBsaXZlcy4gSSB3YW50IHRvIG1ha2Ugc3VyZSBJIGNvbXBsZXRlbHkgdW5kZXJzdGFuZCBpdHMgY2FwYWJpbGl0aWVzIGFuZCBob3cgaXQgbWlnaHQgZml0IGludG8gdGhlIGxhcmdlciBwaWN0dXJlIG9mIG91ciBlQlBGIHdvcmsuIEl0IG1pZ2h0IGJlIGEga2V5IGNvbXBvbmVudCwgb3IgaXQgbWlnaHQgYmUgdGFuZ2VudGlhbC4gRWl0aGVyIHdheSwgYmVzdCB0byBjb25maXJtLiBJIHNob3VsZCBhZGQgdGhpcyB0byBteSBtZW50YWwgY2hlY2tsaXN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxNTo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzU1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzNTU6XHRcdGJvb2xcbiAzNTY6XHRcdHByb21wdCBcJiMzNDtFbmFibGUgQnl0ZSBRdWV1ZSBMaW1pdHNcJiMzNDtcbiAzNTc6XHRcdGRlcGVuZHMgb24gU1lTRlNcbiAzNTg6XHRcdHNlbGVjdCBEUUxcbiAzNTk6XHRcdGRlZmF1bHQgeVxuIDM2MDpcdFxuIDM2MTpcdGNvbmZpZyBCUEZfU1RSRUFNX1BBUlNFUlxuIDM2MjpcdFx0Ym9vbCBcJiMzNDtlbmFibGUgQlBGIFNUUkVBTV9QQVJTRVJcJiMzNDtcbiAzNjM6XHRcdGRlcGVuZHMgb24gSU5FVFxuIDM2NDpcdFx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTFxuIDM2NTpcdFx0ZGVwZW5kcyBvbiBDR1JPVVBfQlBGXG4gMzY2Olx0XHRzZWxlY3QgU1RSRUFNX1BBUlNFUlxuIDM2NzpcdFx0c2VsZWN0IE5FVF9TT0NLX01TR1xuIDM2ODpcdFx0aGVscFxuIDM2OTpcdFx0ICBFbmFibGluZyB0aGlzIGFsbG93cyBhIFRDUCBzdHJlYW0gcGFyc2VyIHRvIGJlIHVzZWQgd2l0aFxuIDM3MDpcdFx0ICBCUEZfTUFQX1RZUEVfU09DS01BUC5cbiAzNzE6XHRcbiAzNzI6XHRjb25maWcgTkVUX0ZMT1dfTElNSVRcbiAzNzM6XHRcdGJvb2wgXCYjMzQ7TmV0IGZsb3cgbGltaXRcJiMzNDtcbiAzNzQ6XHRcdGRlcGVuZHMgb24gUlBTXG4gMzc1Olx0XHRkZWZhdWx0IHlcbiAzNzY6XHRcdGhlbHBcbiAzNzc6XHRcdCAgVGhlIG5ldHdvcmsgc3RhY2sgaGFzIHRvIGRyb3AgcGFja2V0cyB3aGVuIGEgcmVjZWl2ZSBwcm9jZXNzaW5nIENQVSYjMzk7c1xuIDM3ODpcdFx0ICBiYWNrbG9nIHJlYWNoZXMgbmV0ZGV2X21heF9iYWNrbG9nLiBJZiBhIGZldyBvdXQgb2YgbWFueSBhY3RpdmUgZmxvd3NcbiAzNzk6XHRcdCAgZ2VuZXJhdGUgdGhlIHZhc3QgbWFqb3JpdHkgb2YgbG9hZCwgZHJvcCB0aGVpciB0cmFmZmljIGVhcmxpZXIgdG9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTU6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQwMjUKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAyNzQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIEtlcm5lbCBQYXRjaCBmb3IgRnV6emluZyBQcmlvcml0aXphdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgZmlyc3QgdGhpbmcgSSYjMzk7bSBkb2luZyBpcyBleGFtaW5pbmcgdGhlIEdpdCBoaXN0b3J5IHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhlIHBhdGNoLiBJJiMzOTttIGxvb2tpbmcgZm9yIGNsdWVzIGluIHRoZSBjb21taXQgbWVzc2FnZXMgdG8gc2VlIHRoZSAqd2h5KiBiZWhpbmQgdGhpcyBjb2RlIGNoYW5nZS4gR3JlcHBpbmcgaXNuJiMzOTt0IGltbWVkaWF0ZWx5IHlpZWxkaW5nIGFueXRoaW5nIGRpcmVjdGx5LCBidXQgSSBjYW4gc2VlIHRoZSBwYXRjaCBpdHNlbGYgaXMgbW9kaWZ5aW5nIGBuZXQvaXB2NC90Y3BfYnBmLmNgIGFuZCBgbmV0L3Rscy90bHNfbWFpbi5jYC4KClRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgdGhlIHJlbW92YWwgb2YgcmVkdW5kYW50IGNhbGxzIHRvIGB0Y3BfcmF0ZV9jaGVja19hcHBfbGltaXRlZChzaylgIHdpdGhpbiB0aGUgYHRjcF9icGZfcHVzaGAgYW5kIGB0bHNfcHVzaF9zZ2AgZnVuY3Rpb25zLiBUaGVzZSBmdW5jdGlvbnMgYXJlIGludm9sdmVkIGluIHB1c2hpbmcgZGF0YSwgaW4gQlBGIGFuZCBUTFMgY29udGV4dHMgcmVzcGVjdGl2ZWx5LCBvdmVyIFRDUC4gVGhlIHJlZHVuZGFudCBjaGVjaywgaWYgbm90IHJlbW92ZWQsIGNvdWxkIGhhdmUgYWZmZWN0ZWQgcGVyZm9ybWFuY2UsIGNhdXNpbmcgYW4gdW5uZWNlc3NhcnkgdGhyb3R0bGUuCgpOb3csIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgcmVhY2hhYmlsaXR5LiBBcmUgdGhlc2UgZnVuY3Rpb25zIGV4cG9zZWQgdG8gZnV6emVyPyBZZXMsIGFuZCB0aGF0IGlzIHZlcnkgaW1wb3J0YW50IHRvIGNvbnNpZGVyIHdoZW4gZGVjaWRpbmcgaWYgdGhpcyBpcyB3b3J0aHkgb2YgZnV6emluZy4gSSBjYW4gY29uZmlybSB0aGVzZSBhcmUgZGVmaW5pdGVseSByZWFjaGFibGUgdmlhIHN5emthbGxlciwgY29uc2lkZXJpbmcgc3RhbmRhcmQgc3l6a2FsbGVyIHRhcmdldHMgZm9yIHNvY2tldHMgd2l0aCBUTFMgVUxQLCBhcyB3ZWxsIGFzIEJQRiBzb2NrbWFwL3NrX21zZyBwcm9ncmFtcy4gVGhhdCBtYWtlcyB0aGlzIGEgcHJpbWUgY2FuZGlkYXRlIGZvciBmdXp6aW5nLCBhbmQgaXQmIzM5O3MgYSBnb29kIHBsYWNlIHRvIHN0YXJ0LCBiYXNlZCBvbiBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzeXN0ZW0uCgpOb3csIEkmIzM5O20gY29uc2lkZXJpbmcgZnV6emluZyBwcmlvcml0eS4gVGhpcyBpcyBhIHJlZmFjdG9yaW5nL2NsZWFudXAgd2hlcmUgcmVhY2hhYmxlIGNvZGUgaXMgbW9kaWZpZWQsIHNvIGJ5IG15IGNyaXRlcmlhIGFuZCB0aGUgJiMzNDtXb3J0aEZ1enppbmcmIzM0OyBndWlkZWxpbmVzLCB0aGlzIGlzIGEgZGVmaW5pdGUgJiMzNDt0cnVlJiMzNDsuIFRoZSByZW1vdmFsIG9mIHRoZSBgdGNwX3JhdGVfY2hlY2tfYXBwX2xpbWl0ZWQoKWAgY2FsbHMsIHdoaWxlIHNlZW1pbmdseSBtaW5vciwgY291bGQgcG90ZW50aWFsbHkgYWx0ZXIgdGltaW5nIG9yIGludHJvZHVjZSBzdWJ0bGUgYmVoYXZpb3JhbCBjaGFuZ2VzIHRoYXQgbWlnaHQgdW5jb3ZlciBhIGJ1Zy4KCk5leHQsIEkmIzM5O20gaWRlbnRpZnlpbmcgdGhlIG1vc3QgcmVsZXZhbnQgc3ltYm9scyB0byB0YXJnZXQgd2l0aCB0aGUgZnV6emVyLiBNeSBmb2N1cyBpcyBvbiBlbnRyeSBwb2ludHMgYW5kIHRoZSBmdW5jdGlvbnMgdGhhdCBhcmUgZGlyZWN0bHkgbW9kaWZpZWQuIExldCYjMzk7cyBzZWUuLi4KKiAgIGB0Y3BfYnBmX3B1c2hgOiBBbHRob3VnaCBpdCBpcyBhIHN0YXRpYyBmdW5jdGlvbiwgSSYjMzk7bGwgY2hlY2sgaXRzIGNhbGxlcnMgYW5kIHNlZSBpZiBpdCBjYW4gYmUgdGFyZ2V0ZWQuIElmIG5vdCBpbmxpbmVkLCBpdCBtYXkgaGF2ZSBhIHN5bWJvbCwgYnV0IEkgd2lsbCBzdGlsbCB0YXJnZXQgdGhlIGZ1bmN0aW9ucyB0aGF0IGNhbGwgaXQuCiogICBgdGxzX3B1c2hfc2dgOiBUaGlzIGxvb2tzIGxpa2UgYW4gZXhjZWxsZW50IGNhbmRpZGF0ZSBzaW5jZSBpdCYjMzk7cyBkaXJlY3RseSBtb2RpZmllZCwgbm9uLXN0YXRpYywgYW5kIHBhcnQgb2YgdGhlIG1haW4gY2hhbmdlLgoqICAgYHRjcF9icGZfc2VuZG1zZ2A6IFRoaXMgaXMgYSBub24tc3RhdGljIGNhbGxlciBvZiB0aGUgbW9kaWZpZWQgYHRjcF9icGZfcHVzaGAuCiogICBgdGNwX2JwZl9zZW5kbXNnX3JlZGlyYDogVGhpcyBpcyBhbHNvIGEgbm9uLXN0YXRpYyBjYWxsZXIgb2YgdGhlIG1vZGlmaWVkIGB0Y3BfYnBmX3B1c2hgLgoKQW5kIEkmIzM5O2xsIGFkZCBgdGxzX3R4X3JlY29yZHNgIG9yIGB0bHNfc3dfc2VuZG1zZ2AgdG8gbXkgc3ltYm9sIGxpc3QgYXMgd2VsbC4KCkZpbmFsbHksIEkgbmVlZCB0byBsb29rIGF0IHRoZSByZXF1aXJlZCBrZXJuZWwgY29uZmlndXJhdGlvbnMuIFRvIGNvbXBpbGUgdGhlIGNvZGUsIGBORVRfU09DS19NU0dgIGlzIHJlcXVpcmVkLCB3aGljaCBpcyBlbmFibGVkIGJ5IGBCUEZfU1RSRUFNX1BBUlNFUmAsIGBJTkVUX0VTUElOVENQYCwgYElORVQ2X0VTUElOVENQYCwgYW5kIGBUTFNgLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gdGhlc2UgYXJlIGFjdGl2ZSB0byByZXByb2R1Y2UgdGhlIHRhcmdldCBmdW5jdGlvbmFsaXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxNTo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtORVRfU09DS19NU0cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9LY29uZmlnPTM2MT1jb25maWcgQlBGX1NUUkVBTV9QQVJTRVJcbi0tXG5uZXQvS2NvbmZpZy0zNjYtXHRzZWxlY3QgU1RSRUFNX1BBUlNFUlxubmV0L0tjb25maWc6MzY3Olx0c2VsZWN0IE5FVF9TT0NLX01TR1xubmV0L0tjb25maWctMzY4LVx0aGVscFxuLS1cbm5ldC9LY29uZmlnPTQ3NT1jb25maWcgTkVUX1NFTEZURVNUU1xuLS1cbm5ldC9LY29uZmlnLTQ3OC1cbm5ldC9LY29uZmlnOjQ3OTpjb25maWcgTkVUX1NPQ0tfTVNHXG5uZXQvS2NvbmZpZy00ODAtXHRib29sXG4tLVxubmV0L0tjb25maWctNDgyLVx0aGVscFxubmV0L0tjb25maWc6NDgzOlx0ICBUaGUgTkVUX1NPQ0tfTVNHIHByb3ZpZGVzIGEgZnJhbWV3b3JrIGZvciBwbGFpbiBzb2NrZXRzIChlLmcuIFRDUCkgb3Jcbm5ldC9LY29uZmlnLTQ4NC1cdCAgVUxQcyAodXBwZXIgbGF5ZXIgbW9kdWxlcywgZS5nLiBUTFMpIHRvIHByb2Nlc3MgTDcgYXBwbGljYXRpb24gZGF0YVxuLS1cbm5ldC9jb3JlL01ha2VmaWxlPTQzPW9iai0kKENPTkZJR19GQUlMT1ZFUikgJiM0Mzs9IGZhaWxvdmVyLm9cbm5ldC9jb3JlL01ha2VmaWxlOjQ0Om9iai0kKENPTkZJR19ORVRfU09DS19NU0cpICYjNDM7PSBza21zZy5vXG5uZXQvY29yZS9NYWtlZmlsZS00NS1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBzb2NrX21hcC5vXG4tLVxubmV0L2lwdjQvS2NvbmZpZz0zODI9Y29uZmlnIElORVRfRVNQSU5UQ1Bcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTM4NS1cdHNlbGVjdCBTVFJFQU1fUEFSU0VSXG5uZXQvaXB2NC9LY29uZmlnOjM4NjpcdHNlbGVjdCBORVRfU09DS19NU0dcbm5ldC9pcHY0L0tjb25maWctMzg3LVx0c2VsZWN0IFhGUk1fRVNQSU5UQ1Bcbi0tXG5uZXQvaXB2NC9NYWtlZmlsZT02Mj1vYmotJChDT05GSUdfVENQX0NPTkdfSUxMSU5PSVMpICYjNDM7PSB0Y3BfaWxsaW5vaXMub1xubmV0L2lwdjQvTWFrZWZpbGU6NjM6b2JqLSQoQ09ORklHX05FVF9TT0NLX01TRykgJiM0Mzs9IHRjcF9icGYub1xubmV0L2lwdjQvTWFrZWZpbGUtNjQtb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gdWRwX2JwZi5vXG4tLVxubmV0L2lwdjYvS2NvbmZpZz05MD1jb25maWcgSU5FVDZfRVNQSU5UQ1Bcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTkzLVx0c2VsZWN0IFNUUkVBTV9QQVJTRVJcbm5ldC9pcHY2L0tjb25maWc6OTQ6XHRzZWxlY3QgTkVUX1NPQ0tfTVNHXG5uZXQvaXB2Ni9LY29uZmlnLTk1LVx0c2VsZWN0IFhGUk1fRVNQSU5UQ1Bcbi0tXG5uZXQvdGxzL0tjb25maWc9NT1jb25maWcgVExTXG4tLVxubmV0L3Rscy9LY29uZmlnLTEwLVx0c2VsZWN0IENSWVBUT19HQ01cbm5ldC90bHMvS2NvbmZpZzoxMTpcdHNlbGVjdCBORVRfU09DS19NU0dcbm5ldC90bHMvS2NvbmZpZy0xMi1cdGRlZmF1bHQgblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxNTo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODA4OQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHByb2Nlc3MsIHRoaW5raW5nIGFzIGlmIEkmIzM5O20gbmF2aWdhdGluZyB0aGlzIG15c2VsZjoKCioqRGl2aW5nIGludG8gYG5ldC90bHMvTWFrZWZpbGVgKioKCk9rYXksIHNvIEkgbmVlZCB0byBjaGVjayBvdXQgYG5ldC90bHMvTWFrZWZpbGVgLiBUaGlzIGxpa2VseSBtZWFucyBJJiMzOTttIHdvcmtpbmcgd2l0aCB0aGUgVExTIGltcGxlbWVudGF0aW9uIHdpdGhpbiB0aGlzIG5ldHdvcmsgY29udGV4dC4gSSYjMzk7bSBwcm9iYWJseSBsb29raW5nIGZvciBidWlsZCBpbnN0cnVjdGlvbnMsIGRlcGVuZGVuY2llcywgb3IgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gVExTLiBNeSBpbnR1aXRpb24gdGVsbHMgbWUgdGhhdCB0aGlzIE1ha2VmaWxlIGlzIGEgY2VudHJhbCBwb2ludCBmb3IgbWFuYWdpbmcgdGhlIGNvbXBpbGF0aW9uIGFuZCBsaW5raW5nIG9mIFRMUy1yZWxhdGVkIGNvZGUgd2l0aGluIHRoaXMgcHJvamVjdCwgYXNzdW1pbmcgdGhpcyBpcyBhIHByb2plY3QgZm9sbG93aW5nIGNvbnZlbnRpb25hbCBtYWtlZmlsZSBzdHJ1Y3R1cmVzLiBJJiMzOTtsbCBuZWVkIHRvIHNlZSBob3cgaXQgaW50ZWdyYXRlcyB3aXRoIHRoZSByZXN0IG9mIHRoZSBidWlsZCBzeXN0ZW0uIEFyZSB0aGVyZSBzcGVjaWZpYyBjb21waWxlciBmbGFncyBkZWZpbmVkPyBBcmUgdGhlcmUgYW55IGN1c3RvbSBsaW5raW5nIHN0ZXBzPyBJdOKAmXMgYWxzbyBwb3NzaWJsZSBJIGFtIGRlYnVnZ2luZywgYW5kIHRodXMgbmVlZCB0byBleGFtaW5lIHNwZWNpZmljIHRhcmdldHMgb3IgdmFyaWFibGVzLCBwZXJoYXBzIHJlbGF0ZWQgdG8gZGVidWcgZmxhZ3MuIEkmIzM5O2xsIG5lZWQgdG8gcXVpY2tseSBnZXQgYSBzZW5zZSBvZiB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUgYW5kIGxvZ2ljIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBnb2luZyBvbiBoZXJlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgY2FuIGRpZyB1cC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTU6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvdGxzL01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgTWFrZWZpbGUgZm9yIHRoZSBUTFMgc3Vic3lzdGVtLlxuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRDRkxBR1NfdHJhY2UubyA6PSAtSSQoc3JjKVxuICAgNzpcdFxuICAgODpcdG9iai0kKENPTkZJR19UTFMpICYjNDM7PSB0bHMub1xuICAgOTpcdFxuICAxMDpcdHRscy15IDo9IHRsc19tYWluLm8gdGxzX3N3Lm8gdGxzX3Byb2MubyB0cmFjZS5vIHRsc19zdHJwLm9cbiAgMTE6XHRcbiAgMTI6XHR0bHMtJChDT05GSUdfVExTX0RFVklDRSkgJiM0Mzs9IHRsc19kZXZpY2UubyB0bHNfZGV2aWNlX2ZhbGxiYWNrLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTU6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg1MTIKCQkJCQkJCW91dHB1dDogMjQzCgkJCQkJCQl0aG91Z2h0czogODY3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIEtlcm5lbCBUTFMgYW5kIEJQRiBTb2NrbWFwIEludGVncmF0aW9uIGZvciBGdXp6aW5nKioKCk9rYXksIHNvIGhlcmUmIzM5O3MgdGhlIGJyZWFrZG93biBvZiB3aGF0IEkmIzM5O3ZlIGp1c3QgYmVlbiB3b3JraW5nIHRocm91Z2guIE15IHByaW1hcnkgZ29hbCBoZXJlIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9ucyBhbmQgY29kZSBwYXRocyByZWxldmFudCB0byBUQ1AgQlBGIHNvY2ttYXAgYW5kIEtlcm5lbCBUTFMsIGluIG9yZGVyIHRvIGRldGVybWluZSBhIGdvb2QgZnV6emVyIGNvbmZpZ3VyYXRpb24uCgpGaXJzdCwgYENPTkZJR19UTFNgIGlzIGNyaXRpY2FsLiBJdCBjb21waWxlcyBgdGxzLm9gLCB3aGljaCBpbmNsdWRlcyBgdGxzX21haW4ub2AuIENydWNpYWxseSwgYENPTkZJR19UTFNgIGRlcGVuZHMgb24gYENPTkZJR19JTkVUYCwgd2hpY2ggaXMgZXhwZWN0ZWQuIEFsc28sIGBDT05GSUdfVExTYCBhdXRvbWF0aWNhbGx5IHNlbGVjdHMgYENPTkZJR19ORVRfU09DS19NU0dgLCBhbmQgdGhhdOKAmXMgaW1wb3J0YW50IGJlY2F1c2UgaXQgYnVpbGRzIGB0Y3BfYnBmLm9gLgoKTm93LCBpZiB3ZSB3YW50IHRvIHVzZSBCUEYgc29ja21hcCB3aXRoIFRDUCwgd2UmIzM5O3JlIGdvaW5nIHRvIG5lZWQgYENPTkZJR19CUEZfU1lTQ0FMTGAgYW5kIGBDT05GSUdfQlBGX1NUUkVBTV9QQVJTRVJgLiBgQ09ORklHX0JQRl9TVFJFQU1fUEFSU0VSYCBhbHNvIGltcGxpY2l0bHkgc2VsZWN0cyBgTkVUX1NPQ0tfTVNHYC4KCk15IGltbWVkaWF0ZSBjb25jbHVzaW9uIGlzIHRoYXQgZW5hYmxpbmcgYFRMU2AgYW5kIGBCUEZfU1RSRUFNX1BBUlNFUmAgYWxvbmdzaWRlIGBCUEZfU1lTQ0FMTGAsIGBORVRfU09DS19NU0dgLCBhbmQgYElORVRgIGd1YXJhbnRlZXMgdGhhdCBib3RoIGB0Y3BfYnBmLmNgIGFuZCBgdGxzX21haW4uY2AgYXJlIGNvbXBpbGVkIGFuZCBhdmFpbGFibGUuIEkgbmVlZCB0byBtYWtlIHN1cmUgYENPTkZJR19UTFNgIGNhbiBiZSBzZXQgdG8gZWl0aGVyIGJ1aWx0LWluIG9yIGEgbW9kdWxlIHNpbmNlIFN5emthbGxlciBydW5zIGtlcm5lbHMgd2l0aCBlaXRoZXIgb2YgdGhvc2Ugc2V0dGluZ3MuCgpMZXQmIzM5O3Mgc3VtbWFyaXplIHRoZSBrZXkgY29uZmlndXJhdGlvbnM6Ci0gICBgVExTYDogQnVpbGRzIGBuZXQvdGxzL3Rsc19tYWluLmNgIGFuZCBzZWxlY3RzIGBORVRfU09DS19NU0dgLgotICAgYE5FVF9TT0NLX01TR2A6IEJ1aWxkcyBgbmV0L2lwdjQvdGNwX2JwZi5jYCAoc2VsZWN0ZWQgYnkgYFRMU2AgYW5kIGBCUEZfU1RSRUFNX1BBUlNFUmAgYnV0IGNhbiBhbHNvIGJlIGV4cGxpY2l0bHkgc3BlY2lmaWVkKS4KLSAgIGBCUEZfU1lTQ0FMTGA6IEVzc2VudGlhbCBmb3IgdXRpbGl6aW5nIGB0Y3BfYnBmYCBzb2NrbWFwIGZ1bmN0aW9uYWxpdHkuCi0gICBgQlBGX1NUUkVBTV9QQVJTRVJgOiBFbmFibGVzIHRoZSBCUEYgc3RyZWFtIHBhcnNlciBzb2NrbWFwLgoKSSYjMzk7dmUgYWxzbyBjb25maXJtZWQgdGhhdCBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBlc3NlbnRpYWwgZm9yIGhvb2tpbmcgYHRjcF9icGZfdXBkYXRlX3Byb3RvYCBpbnRvIHRoZSBzb2NrZXQsIHNwZWNpZmljYWxseSB2aWEgYSBjaGVjayBpbiBgdGNwX2JwZi5jYCB0aGF0IHNob3dzIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIHJlcXVpcmVkIGZvciBhdHRhY2hpbmcgdGhlIHBzb2NrIGFuZCB1c2luZyBgdGNwX2JwZmAgZnVuY3Rpb25hbGl0eS4gV2l0aG91dCBpdCwgdGhlIG9wZXJhdGlvbnMgZnJvbSBgdGNwX2JwZmAgYXJlIG5vdCB1c2VkIGJ5IHRoZSBzb2NrbWFwLgoKVG8gcmVjYXAsIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb25zIEkmIzM5O2xsIHdhbnQgdG8gdGFyZ2V0IGFyZToKCiogICBgVExTYAoqICAgYEJQRl9TWVNDQUxMYAoqICAgYEJQRl9TVFJFQU1fUEFSU0VSYAoqICAgYE5FVF9TT0NLX01TR2AKCk15IG5leHQgdGhvdWdodCBwcm9jZXNzIGludm9sdmVzIGNvbnNpZGVyaW5nIHBvdGVudGlhbCBmb2N1cyBzeW1ib2xzLiBJJiMzOTt2ZSBub3RlZCBkb3duIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIHRvIGNvbnNpZGVyIGZvciBtb3JlIGNhcmVmdWwgaW52ZXN0aWdhdGlvbjoKCiogICBgdGNwX2JwZl9wdXNoYAoqICAgYHRjcF9icGZfc2VuZG1zZ2AKKiAgIGB0Y3BfYnBmX3NlbmRtc2dfcmVkaXJgCiogICBgdGxzX3B1c2hfc2dgCiogICBgdGxzX3R4X3JlY29yZHNgCiogICBgdGxzX3B1c2hfcGFydGlhbF9yZWNvcmRgCgpVcG9uIGEgY2FyZWZ1bCByZXZpZXcsIEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IG5vbmUgb2YgdGhlc2UgYXJlIGNvbnNpZGVyZWQgYXMgdWJpcXVpdG91cyBsaWZlY3ljbGUgZnVuY3Rpb25zIGFuZCB0aGV5IGFyZSBhbGwgc3BlY2lmaWMgdG8gVENQIEJQRiBzdHJlYW0gaGFuZGxpbmcgYW5kIHRoZSBLZXJuZWwgVExTIHRyYW5zbWl0IHBhdGguCgpGaW5hbGx5LCBJJiMzOTt2ZSByZXZpZXdlZCB0aGUgcmVhc29uaW5nIGJlaGluZCB0aGUgY2hhbmdlcyB0byBtYWtlIHN1cmUgSSBjbGVhcmx5IHVuZGVyc3RhbmQgdGhlIGludGVudC4gVGhlIHBhdGNoIHJlbW92ZXMgcmVkdW5kYW50IGNhbGxzIHRvIGB0Y3BfcmF0ZV9jaGVja19hcHBfbGltaXRlZCgpYCBmcm9tIGB0Y3BfYnBmX3B1c2hgIGluIGBuZXQvaXB2NC90Y3BfYnBmLmNgIGFuZCBgdGxzX3B1c2hfc2dgIGluIGBuZXQvdGxzL3Rsc19tYWluLmNgLiBgdGNwX3NlbmRtc2dfbG9ja2VkKClgIGlzIGFscmVhZHkgaW50ZXJuYWxseSBwZXJmb3JtaW5nIHRoaXMgcmF0ZSBjaGVjay4gVGhlc2UgY2hhbmdlcyBtb2RpZnkgZXhlY3V0aW9uIHBhdGhzIGluIGNvcmUgVENQIEJQRiBhbmQgVExTIG5ldHdvcmtpbmcsIHdoaWNoIGFyZSBhY2Nlc3NlZCBmcm9tIHVzZXJzcGFjZSB2aWEgVENQIHNvY2tldHMgd2l0aCBUTFMgVUxQIG9yIEJQRiBzb2NrbWFwLiBUaGUgZnV6emluZyBhcHByb2FjaCBpcyBmdWxseSBqdXN0aWZpZWQgdG8gZW5zdXJlIHRoYXQgcmVtb3ZpbmcgdGhlc2UgY2FsbHMgZG9lcyBub3QgYWZmZWN0IHJhdGUgY2hlY2sgc3RhdGUgaGFuZGxpbmcgb3Igc29ja2V0IGJlaGF2aW9yIGR1cmluZyB0cmFuc21pc3Npb24uCgpJJiMzOTttIGNvbmZpZGVudCBpbiBteSBhbmFseXNpcy4gSXQgYWxpZ25zIHdpdGggdGhlIGluc3RydWN0aW9ucywgYW5kIEkmIzM5O20gcmVhZHkgdG8gcHJvY2VlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTU6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RMUyYjMzQ7LAogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtCUEZfU1RSRUFNX1BBUlNFUiYjMzQ7LAogICAgJiMzNDtORVRfU09DS19NU0cmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0bHNfcHVzaF9zZyYjMzQ7LAogICAgJiMzNDt0bHNfdHhfcmVjb3JkcyYjMzQ7LAogICAgJiMzNDt0bHNfcHVzaF9wYXJ0aWFsX3JlY29yZCYjMzQ7LAogICAgJiMzNDt0Y3BfYnBmX3B1c2gmIzM0OywKICAgICYjMzQ7dGNwX2JwZl9zZW5kbXNnJiMzNDssCiAgICAmIzM0O3RjcF9icGZfc2VuZG1zZ19yZWRpciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZW1vdmVzIHJlZHVuZGFudCBjYWxscyB0byB0Y3BfcmF0ZV9jaGVja19hcHBfbGltaXRlZCgpIGZyb20gdGNwX2JwZl9wdXNoKCkgaW4gbmV0L2lwdjQvdGNwX2JwZi5jIGFuZCB0bHNfcHVzaF9zZygpIGluIG5ldC90bHMvdGxzX21haW4uYywgYmVjYXVzZSB0Y3Bfc2VuZG1zZ19sb2NrZWQoKSBhbHJlYWR5IGludm9rZXMgdGNwX3JhdGVfY2hlY2tfYXBwX2xpbWl0ZWQoKS4gVGhlIG1vZGlmaWNhdGlvbnMgYWZmZWN0IHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSBwYXRocyBpbiB0aGUgVENQIEJQRiBhbmQgVExTIFVMUCB0cmFuc21pdCBwaXBlbGluZXMuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciB1bmV4cGVjdGVkIHNpZGUgZWZmZWN0cyBvY2N1ciBpbiBUQ1AgcmF0ZSBsaW1pdGluZyBhbmQgdHJhbnNtaXNzaW9uIGxvZ2ljIHdoZW4gc2VuZGluZyBkYXRhIG92ZXIgVExTIG9yIEJQRiByZWRpcmVjdGVkIHNvY2tldHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RMUyYjMzQ7LAogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtCUEZfU1RSRUFNX1BBUlNFUiYjMzQ7LAogICAgJiMzNDtORVRfU09DS19NU0cmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0bHNfcHVzaF9zZyYjMzQ7LAogICAgJiMzNDt0bHNfdHhfcmVjb3JkcyYjMzQ7LAogICAgJiMzNDt0bHNfcHVzaF9wYXJ0aWFsX3JlY29yZCYjMzQ7LAogICAgJiMzNDt0Y3BfYnBmX3B1c2gmIzM0OywKICAgICYjMzQ7dGNwX2JwZl9zZW5kbXNnJiMzNDssCiAgICAmIzM0O3RjcF9icGZfc2VuZG1zZ19yZWRpciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZW1vdmVzIHJlZHVuZGFudCBjYWxscyB0byB0Y3BfcmF0ZV9jaGVja19hcHBfbGltaXRlZCgpIGZyb20gdGNwX2JwZl9wdXNoKCkgaW4gbmV0L2lwdjQvdGNwX2JwZi5jIGFuZCB0bHNfcHVzaF9zZygpIGluIG5ldC90bHMvdGxzX21haW4uYywgYmVjYXVzZSB0Y3Bfc2VuZG1zZ19sb2NrZWQoKSBhbHJlYWR5IGludm9rZXMgdGNwX3JhdGVfY2hlY2tfYXBwX2xpbWl0ZWQoKS4gVGhlIG1vZGlmaWNhdGlvbnMgYWZmZWN0IHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSBwYXRocyBpbiB0aGUgVENQIEJQRiBhbmQgVExTIFVMUCB0cmFuc21pdCBwaXBlbGluZXMuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciB1bmV4cGVjdGVkIHNpZGUgZWZmZWN0cyBvY2N1ciBpbiBUQ1AgcmF0ZSBsaW1pdGluZyBhbmQgdHJhbnNtaXNzaW9uIGxvZ2ljIHdoZW4gc2VuZGluZyBkYXRhIG92ZXIgVExTIG9yIEJQRiByZWRpcmVjdGVkIHNvY2tldHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDE1OjUxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTU6NTE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZW1vdmVzIHJlZHVuZGFudCBjYWxscyB0byB0Y3BfcmF0ZV9jaGVja19hcHBfbGltaXRlZChzaykgZnJvbSB0Y3BfYnBmX3B1c2goKSBpbiBuZXQvaXB2NC90Y3BfYnBmLmMgYW5kIHRsc19wdXNoX3NnKCkgaW4gbmV0L3Rscy90bHNfbWFpbi5jLiBJbiBib3RoIGNhc2VzLCB0Y3Bfc2VuZG1zZ19sb2NrZWQoKSBpcyBjYWxsZWQgaW1tZWRpYXRlbHkgZm9sbG93aW5nIGFuZCBhbHJlYWR5IGludm9rZXMgdGNwX3JhdGVfY2hlY2tfYXBwX2xpbWl0ZWQoc2spLlxuXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbiwgYnVmZmVyIGxlbmd0aHMsIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBjb3B5aW5nIHRvIHVzZXIgc3BhY2UuIFRoZXJlIGlzIG5vIHJpc2sgb2YgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSwgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZmllbGRzLCBvciBjYXVzaW5nIGluZm9ybWF0aW9uIGxlYWtzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYTVkZWQwODQ0YmU1Njk0YjZiMjAyNTA3YWQ2NTE0Yjg0MTNhY2FiMwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDE1IDE1OjAxOjA5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2JwZi5jIGIvbmV0L2lwdjQvdGNwX2JwZi5jCmluZGV4IDJlMjM0ZDE1NWI1ZTYuLmQ1ZmNmM2NlNDg2MWEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9icGYuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC90Y3BfYnBmLmMKQEAgLTEwOCw3ICYjNDM7MTA4LDYgQEAgc3RhdGljIGludCB0Y3BfYnBmX3B1c2goc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfbXNnICptc2csIHUzMiBhcHBseV9ieXRlcywKIAkJb2ZmICA9IHNnZS0mZ3Q7b2Zmc2V0OwogCQlwYWdlID0gc2dfcGFnZShzZ2UpOwogCi0JCXRjcF9yYXRlX2NoZWNrX2FwcF9saW1pdGVkKHNrKTsKIHJldHJ5OgogCQltc2doZHIubXNnX2ZsYWdzID0gZmxhZ3MgfCBNU0dfU1BMSUNFX1BBR0VTOwogCQloYXNfdHhfdWxwID0gdGxzX3N3X2hhc19jdHhfdHgoc2spOwpkaWZmIC0tZ2l0IGEvbmV0L3Rscy90bHNfbWFpbi5jIGIvbmV0L3Rscy90bHNfbWFpbi5jCmluZGV4IGZiYjI3NDI4N2FhNWYuLjhiZGI3ODcxOGE4ZDQgMTAwNjQ0Ci0tLSBhL25ldC90bHMvdGxzX21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvdGxzL3Rsc19tYWluLmMKQEAgLTE4NSw4ICYjNDM7MTg1LDYgQEAgaW50IHRsc19wdXNoX3NnKHN0cnVjdCBzb2NrICpzaywKIAogCWN0eC0mZ3Q7c3BsaWNpbmdfcGFnZXMgPSB0cnVlOwogCXdoaWxlICgxKSB7Ci0JCS8qIGlzIHNlbmRpbmcgYXBwbGljYXRpb24tbGltaXRlZD8gKi8KLQkJdGNwX3JhdGVfY2hlY2tfYXBwX2xpbWl0ZWQoc2spOwogCQlwID0gc2dfcGFnZShzZyk7CiByZXRyeToKIAkJYnZlY19zZXRfcGFnZSgmYW1wO2J2ZWMsIHAsIHNpemUsIG9mZnNldCk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxNTo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjg3CgkJCQkJCQlvdXRwdXQ6IDEwNgoJCQkJCQkJdGhvdWdodHM6IDUyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoIFNlcmllcyBmb3IgS01TQU4gRnV6emluZyBOZWVkcyoqCgpPa2F5LCBzbyB0aGUgdXNlciB3YW50cyBtZSB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCBzZXJpZXMgbmVjZXNzaXRhdGVzIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvLCBvZiBjb3Vyc2UsIGRpdmUgc3RyYWlnaHQgaW50byB0aGUgZGlmZiBwcm92aWRlZC4gTGV0JiMzOTtzIHNlZS4uLiBpdCBsb29rcyBsaWtlIGB0Y3BfcmF0ZV9jaGVja19hcHBfbGltaXRlZChzaylgIHdhcyByZW1vdmVkIGZyb20gdHdvIGxvY2F0aW9uczogYG5ldC9pcHY0L3RjcF9icGYuY2AgYW5kIGBuZXQvdGxzL3Rsc19tYWluLmNgLiBIbW0sIHRoYXQmIzM5O3MgaW50ZXJlc3RpbmcuCgpNeSBuZXh0IHN0ZXAgaXMgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlLiBJIG5lZWQgdG8gcmVhZCB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBib3RoIHRob3NlIGZpbGVzIHRvIHVuZGVyc3RhbmQgdGhlICp3aHkqIGJlaGluZCB0aGlzIHJlbW92YWwuIFdoYXQgd2FzIGB0Y3BfcmF0ZV9jaGVja19hcHBfbGltaXRlZChzaylgIGRvaW5nIGluIHRoZSBmaXJzdCBwbGFjZT8gV2FzIGl0IGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uPyBBIGNvcnJlY3RuZXNzIGNoZWNrPyBBbmQgaXMgdGhlcmUgYSBjbGVhciByZXBsYWNlbWVudCwgb3IgaGFzIHRoZSBsb2dpYyBiZWVuIG1vdmVkIGVsc2V3aGVyZT8gSSBuZWVkIGNvbnRleHQuCgpGaW5hbGx5LCBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBHaXQgaGlzdG9yeS4gSSB3YW50IHRvIGtub3cgdGhlIGNvbW1pdCBtZXNzYWdlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNoYW5nZS4gSXQgc2hvdWxkIGNsYXJpZnkgdGhlIHJhdGlvbmFsZSBmb3IgdGhpcyByZW1vdmFsLiBUaGF0IGNvbnRleHQgd2lsbCB0ZWxsIG1lIHdoZXRoZXIgdGhpcyBjaGFuZ2UgdG91Y2hlcyBtZW1vcnkgbWFuYWdlbWVudCBpbiBhIHdheSB0aGF0IGlzIGxpa2VseSB0byB0cmlnZ2VyIEtNU0FOIGlzc3Vlcy4gSXQgd2lsbCB0aGVuIHRlbGwgbWUgaWYgdGhlcmUmIzM5O3MgYSBuZWVkIHRvIGFkZCBhIGRlZGljYXRlZCBmdXp6aW5nIHNlc3Npb24sIG9yIGlmIHRoaXMgY2hhbmdlIGlzIHJlbGF0aXZlbHkgYmVuaWduLiBVbmRlcnN0YW5kaW5nIHRoZSBjb21taXQgbWVzc2FnZSB3aWxsIGJlIGtleSB0byBteSBmaW5hbCBkZXRlcm1pbmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxNTo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcF9icGYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDk1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgOTU6XHRcdGJvb2wgYXBwbHkgPSBhcHBseV9ieXRlcztcbiAgOTY6XHRcdHN0cnVjdCBzY2F0dGVybGlzdCAqc2dlO1xuICA5NzpcdFx0c3RydWN0IHBhZ2UgKnBhZ2U7XG4gIDk4Olx0XHRpbnQgc2l6ZSwgcmV0ID0gMDtcbiAgOTk6XHRcdHUzMiBvZmY7XG4gMTAwOlx0XG4gMTAxOlx0XHR3aGlsZSAoMSkge1xuIDEwMjpcdFx0XHRzdHJ1Y3QgYmlvX3ZlYyBidmVjO1xuIDEwMzpcdFx0XHRib29sIGhhc190eF91bHA7XG4gMTA0Olx0XG4gMTA1Olx0XHRcdHNnZSA9IHNrX21zZ19lbGVtKG1zZywgbXNnLVx1MDAzZXNnLnN0YXJ0KTtcbiAxMDY6XHRcdFx0c2l6ZSA9IChhcHBseSBcdTAwMjZcdTAwMjYgYXBwbHlfYnl0ZXMgXHUwMDNjIHNnZS1cdTAwM2VsZW5ndGgpID9cbiAxMDc6XHRcdFx0XHRhcHBseV9ieXRlcyA6IHNnZS1cdTAwM2VsZW5ndGg7XG4gMTA4Olx0XHRcdG9mZiAgPSBzZ2UtXHUwMDNlb2Zmc2V0O1xuIDEwOTpcdFx0XHRwYWdlID0gc2dfcGFnZShzZ2UpO1xuIDExMDpcdFxuIDExMTpcdHJldHJ5OlxuIDExMjpcdFx0XHRtc2doZHIubXNnX2ZsYWdzID0gZmxhZ3MgfCBNU0dfU1BMSUNFX1BBR0VTO1xuIDExMzpcdFx0XHRoYXNfdHhfdWxwID0gdGxzX3N3X2hhc19jdHhfdHgoc2spO1xuIDExNDpcdFx0XHRpZiAoaGFzX3R4X3VscClcbiAxMTU6XHRcdFx0XHRtc2doZHIubXNnX2ZsYWdzIHw9IE1TR19TRU5EUEFHRV9OT1BPTElDWTtcbiAxMTY6XHRcbiAxMTc6XHRcdFx0aWYgKHNpemUgXHUwMDNjIHNnZS1cdTAwM2VsZW5ndGggXHUwMDI2XHUwMDI2IG1zZy1cdTAwM2VzZy5zdGFydCAhPSBtc2ctXHUwMDNlc2cuZW5kKVxuIDExODpcdFx0XHRcdG1zZ2hkci5tc2dfZmxhZ3MgfD0gTVNHX01PUkU7XG4gMTE5Olx0XG4gMTIwOlx0XHRcdGJ2ZWNfc2V0X3BhZ2UoXHUwMDI2YnZlYywgcGFnZSwgc2l6ZSwgb2ZmKTtcbiAxMjE6XHRcdFx0aW92X2l0ZXJfYnZlYyhcdTAwMjZtc2doZHIubXNnX2l0ZXIsIElURVJfU09VUkNFLCBcdTAwMjZidmVjLCAxLCBzaXplKTtcbiAxMjI6XHRcdFx0cmV0ID0gdGNwX3NlbmRtc2dfbG9ja2VkKHNrLCBcdTAwMjZtc2doZHIsIHNpemUpO1xuIDEyMzpcdFx0XHRpZiAocmV0IFx1MDAzYz0gMClcbiAxMjQ6XHRcdFx0XHRyZXR1cm4gcmV0O1xuIDEyNTpcdFxuIDEyNjpcdFx0XHRpZiAoYXBwbHkpXG4gMTI3Olx0XHRcdFx0YXBwbHlfYnl0ZXMgLT0gcmV0O1xuIDEyODpcdFx0XHRtc2ctXHUwMDNlc2cuc2l6ZSAtPSByZXQ7XG4gMTI5Olx0XHRcdHNnZS1cdTAwM2VvZmZzZXQgJiM0Mzs9IHJldDtcbiAxMzA6XHRcdFx0c2dlLVx1MDAzZWxlbmd0aCAtPSByZXQ7XG4gMTMxOlx0XHRcdGlmICh1bmNoYXJnZSlcbiAxMzI6XHRcdFx0XHRza19tZW1fdW5jaGFyZ2Uoc2ssIHJldCk7XG4gMTMzOlx0XHRcdGlmIChyZXQgIT0gc2l6ZSkge1xuIDEzNDpcdFx0XHRcdHNpemUgLT0gcmV0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxNTo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC90bHMvdGxzX21haW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE3NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTc1Olx0XHRzdHJ1Y3QgbXNnaGRyIG1zZyA9IHtcbiAxNzY6XHRcdFx0Lm1zZ19mbGFncyA9IE1TR19TUExJQ0VfUEFHRVMgfCBmbGFncyxcbiAxNzc6XHRcdH07XG4gMTc4Olx0XHRpbnQgcmV0ID0gMDtcbiAxNzk6XHRcdHN0cnVjdCBwYWdlICpwO1xuIDE4MDpcdFx0c2l6ZV90IHNpemU7XG4gMTgxOlx0XHRpbnQgb2Zmc2V0ID0gZmlyc3Rfb2Zmc2V0O1xuIDE4MjpcdFxuIDE4MzpcdFx0c2l6ZSA9IHNnLVx1MDAzZWxlbmd0aCAtIG9mZnNldDtcbiAxODQ6XHRcdG9mZnNldCAmIzQzOz0gc2ctXHUwMDNlb2Zmc2V0O1xuIDE4NTpcdFxuIDE4NjpcdFx0Y3R4LVx1MDAzZXNwbGljaW5nX3BhZ2VzID0gdHJ1ZTtcbiAxODc6XHRcdHdoaWxlICgxKSB7XG4gMTg4Olx0XHRcdHAgPSBzZ19wYWdlKHNnKTtcbiAxODk6XHRyZXRyeTpcbiAxOTA6XHRcdFx0YnZlY19zZXRfcGFnZShcdTAwMjZidmVjLCBwLCBzaXplLCBvZmZzZXQpO1xuIDE5MTpcdFx0XHRpb3ZfaXRlcl9idmVjKFx1MDAyNm1zZy5tc2dfaXRlciwgSVRFUl9TT1VSQ0UsIFx1MDAyNmJ2ZWMsIDEsIHNpemUpO1xuIDE5MjpcdFxuIDE5MzpcdFx0XHRyZXQgPSB0Y3Bfc2VuZG1zZ19sb2NrZWQoc2ssIFx1MDAyNm1zZywgc2l6ZSk7XG4gMTk0Olx0XG4gMTk1Olx0XHRcdGlmIChyZXQgIT0gc2l6ZSkge1xuIDE5NjpcdFx0XHRcdGlmIChyZXQgXHUwMDNlIDApIHtcbiAxOTc6XHRcdFx0XHRcdG9mZnNldCAmIzQzOz0gcmV0O1xuIDE5ODpcdFx0XHRcdFx0c2l6ZSAtPSByZXQ7XG4gMTk5Olx0XHRcdFx0XHRnb3RvIHJldHJ5O1xuIDIwMDpcdFx0XHRcdH1cbiAyMDE6XHRcbiAyMDI6XHRcdFx0XHRvZmZzZXQgLT0gc2ctXHUwMDNlb2Zmc2V0O1xuIDIwMzpcdFx0XHRcdGN0eC1cdTAwM2VwYXJ0aWFsbHlfc2VudF9vZmZzZXQgPSBvZmZzZXQ7XG4gMjA0Olx0XHRcdFx0Y3R4LVx1MDAzZXBhcnRpYWxseV9zZW50X3JlY29yZCA9ICh2b2lkICopc2c7XG4gMjA1Olx0XHRcdFx0Y3R4LVx1MDAzZXNwbGljaW5nX3BhZ2VzID0gZmFsc2U7XG4gMjA2Olx0XHRcdFx0cmV0dXJuIHJldDtcbiAyMDc6XHRcdFx0fVxuIDIwODpcdFxuIDIwOTpcdFx0XHRwdXRfcGFnZShwKTtcbiAyMTA6XHRcdFx0c2tfbWVtX3VuY2hhcmdlKHNrLCBzZy1cdTAwM2VsZW5ndGgpO1xuIDIxMTpcdFx0XHRzZyA9IHNnX25leHQoc2cpO1xuIDIxMjpcdFx0XHRpZiAoIXNnKVxuIDIxMzpcdFx0XHRcdGJyZWFrO1xuIDIxNDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxNTo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Y3BfcmF0ZV9jaGVja19hcHBfbGltaXRlZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwLmM9MTA1MT1pbnQgdGNwX3NlbmRtc2dfZmFzdG9wZW4oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIGludCAqY29waWVkLFxuLS1cbm5ldC9pcHY0L3RjcC5jLTEwOTgtLyogSWYgYSBnYXAgaXMgZGV0ZWN0ZWQgYmV0d2VlbiBzZW5kcywgbWFyayB0aGUgc29ja2V0IGFwcGxpY2F0aW9uLWxpbWl0ZWQuICovXG5uZXQvaXB2NC90Y3AuYzoxMDk5OnZvaWQgdGNwX3JhdGVfY2hlY2tfYXBwX2xpbWl0ZWQoc3RydWN0IHNvY2sgKnNrKVxubmV0L2lwdjQvdGNwLmMtMTEwMC17XG4tLVxubmV0L2lwdjQvdGNwLmMtMTExMy19XG5uZXQvaXB2NC90Y3AuYzoxMTE0OkVYUE9SVF9TWU1CT0xfR1BMKHRjcF9yYXRlX2NoZWNrX2FwcF9saW1pdGVkKTtcbm5ldC9pcHY0L3RjcC5jLTExMTUtXG5uZXQvaXB2NC90Y3AuYz0xMTE2PWludCB0Y3Bfc2VuZG1zZ19sb2NrZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxuLS1cbm5ldC9pcHY0L3RjcC5jLTExODktXG5uZXQvaXB2NC90Y3AuYzoxMTkwOlx0dGNwX3JhdGVfY2hlY2tfYXBwX2xpbWl0ZWQoc2spOyAgLyogaXMgc2VuZGluZyBhcHBsaWNhdGlvbi1saW1pdGVkPyAqL1xubmV0L2lwdjQvdGNwLmMtMTE5MS1cbi0tXG5uZXQveGZybS9lc3BpbnRjcC5jPTMwNz1zdGF0aWMgaW50IGVzcGludGNwX3NlbmRtc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxuLS1cbm5ldC94ZnJtL2VzcGludGNwLmMtMzcwLVxubmV0L3hmcm0vZXNwaW50Y3AuYzozNzE6XHR0Y3BfcmF0ZV9jaGVja19hcHBfbGltaXRlZChzayk7XG5uZXQveGZybS9lc3BpbnRjcC5jLTM3Mi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTU6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDc4MgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkRpdmluZyBpbnRvIHRoZSBUQ1AgU2VuZCBQYXRoKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgVENQIHNlbmQgcGF0aCByaWdodCBub3cuIFRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCB0byBtZSwgZ2l2ZW4gdGhlIGNvbnRleHQsIGlzIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgIGluIGBuZXQvaXB2NC90Y3AuY2AuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIG1hZ2ljIHByb2JhYmx5IGhhcHBlbnMuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0gKmFjdHVhbGx5KiBzZW5kcyB0aGUgZGF0YSwgc28gbGV0JiMzOTtzIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGF0IGZ1bmN0aW9uLgoKT2theSwgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IGBuZXQvaXB2NC90Y3AuY2AsIGxpbmUgMTE4OSB0byAxMTk1LiBJIHN1c3BlY3QgdGhlcmUmIzM5O3Mgc29tZXRoaW5nIGludGVyZXN0aW5nIHJpZ2h0IHRoZXJlIC0gdGhpcyBsaWtlbHkgaG9sZHMgdGhlIGFuc3dlci4gSSYjMzk7bSBleHBlY3Rpbmcgc29tZXRoaW5nIGluIHRoaXMgc25pcHBldCByZWxhdGVkIHRvIHBhY2tldCBjcmVhdGlvbiBhbmQgZGF0YSBjb3B5aW5nLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxNTo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTE4NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMTg1Olx0XHRcdFx0Z290byBvdXRfZXJyO1xuMTE4NjpcdFx0fVxuMTE4NzpcdFxuMTE4ODpcdFx0dGltZW8gPSBzb2NrX3NuZHRpbWVvKHNrLCBmbGFncyBcdTAwMjYgTVNHX0RPTlRXQUlUKTtcbjExODk6XHRcbjExOTA6XHRcdHRjcF9yYXRlX2NoZWNrX2FwcF9saW1pdGVkKHNrKTsgIC8qIGlzIHNlbmRpbmcgYXBwbGljYXRpb24tbGltaXRlZD8gKi9cbjExOTE6XHRcbjExOTI6XHRcdC8qIFdhaXQgZm9yIGEgY29ubmVjdGlvbiB0byBmaW5pc2guIE9uZSBleGNlcHRpb24gaXMgVENQIEZhc3QgT3BlblxuMTE5MzpcdFx0ICogKHBhc3NpdmUgc2lkZSkgd2hlcmUgZGF0YSBpcyBhbGxvd2VkIHRvIGJlIHNlbnQgYmVmb3JlIGEgY29ubmVjdGlvblxuMTE5NDpcdFx0ICogaXMgZnVsbHkgZXN0YWJsaXNoZWQuXG4xMTk1Olx0XHQgKi9cbjExOTY6XHRcdGlmICgoKDEgXHUwMDNjXHUwMDNjIHNrLVx1MDAzZXNrX3N0YXRlKSBcdTAwMjYgfihUQ1BGX0VTVEFCTElTSEVEIHwgVENQRl9DTE9TRV9XQUlUKSkgXHUwMDI2XHUwMDI2XG4xMTk3Olx0XHQgICAgIXRjcF9wYXNzaXZlX2Zhc3RvcGVuKHNrKSkge1xuMTE5ODpcdFx0XHRlcnIgPSBza19zdHJlYW1fd2FpdF9jb25uZWN0KHNrLCBcdTAwMjZ0aW1lbyk7XG4xMTk5Olx0XHRcdGlmIChlcnIgIT0gMClcbjEyMDA6XHRcdFx0XHRnb3RvIGRvX2Vycm9yO1xuMTIwMTpcdFx0fVxuMTIwMjpcdFxuMTIwMzpcdFx0aWYgKHVubGlrZWx5KHRwLVx1MDAzZXJlcGFpcikpIHtcbjEyMDQ6XHRcdFx0aWYgKHRwLVx1MDAzZXJlcGFpcl9xdWV1ZSA9PSBUQ1BfUkVDVl9RVUVVRSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxNTo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1Mzg3CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlZHVuZGFuY3kgRGV0ZWN0ZWQ6IFRDUCBSYXRlIExpbWl0aW5nIEFuYWx5c2lzKioKCk9rYXksIGhlcmUmIzM5O3Mgd2hhdCYjMzk7cyBoaXR0aW5nIG1lLiBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBUQ1Agc2VuZGluZyBwYXRocywgYW5kIEkmIzM5O3ZlIGdvdCBhIHJlZCBmbGFnIHdhdmluZyBpbiBteSBicmFpbi4gSSYjMzk7bSBzZWVpbmcgdGhhdCBgdGNwX3NlbmRtc2dfbG9ja2VkYCAqYWxyZWFkeSogY2FsbHMgYHRjcF9yYXRlX2NoZWNrX2FwcF9saW1pdGVkKHNrKWAuIFRoYXQmIzM5O3MgYSBrZXkgZnVuY3Rpb24gZm9yIHJhdGUgbGltaXRpbmcgYXBwbGljYXRpb24tbGltaXRlZCBzZW5kcy4gTm93LCBib3RoIGB0Y3BfYnBmX3B1c2hgIGFuZCBgdGxzX3B1c2hfc2dgIOKAkyB0aGUgb25lcyB0aGF0IGFyZSBwdXNoaW5nIGRhdGEg4oCTIHRoZXkmIzM5O3JlIHVzaW5nIGB0Y3Bfc2VuZG1zZ19sb2NrZWQoc2ssIC4uLilgIGluIHRoZWlyIHNlbmRpbmcgbG9vcHMuCgpTbywgaGVyZSYjMzk7cyB0aGUga2lja2VyOiBjYWxsaW5nIGB0Y3BfcmF0ZV9jaGVja19hcHBfbGltaXRlZChzaylgICpiZWZvcmUqIGNhbGxpbmcgYHRjcF9zZW5kbXNnX2xvY2tlZGAgaXMgY29tcGxldGVseSByZWR1bmRhbnQuIEl0JiMzOTtzIGEgZHVwbGljYXRlIGNoZWNrLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhpcyBtdXN0IGJlIGhpc3RvcmljYWwgYmFnZ2FnZS4gUHJvYmFibHkgd2hlbiB3ZSB3ZXJlIHVzaW5nIGBkb190Y3Bfc2VuZHBhZ2VzYCBvciBgdGNwX3NlbmRwYWdlX2xvY2tlZGAsIHdoaWNoICpkaWRuJiMzOTt0KiBjYWxsIHRoZSByYXRlIGNoZWNrLCBidXQgdGhlbiBnb3QgcmVmYWN0b3JlZCB0byB1c2UgYHRjcF9zZW5kbXNnX2xvY2tlZGAgYW5kIHRoZSBjaGVjayB3YXMganVzdCBuZXZlciByZW1vdmVkLiBDbGFzc2ljLgoKTGV0JiMzOTtzIGRpdmUgZGVlcGVyIGFuZCBzZWUgZXhhY3RseSB3aGF0IGB0Y3BfcmF0ZV9jaGVja19hcHBfbGltaXRlZChzaylgIGFjdHVhbGx5IGRvZXMuLi5nb3R0YSB1bmRlcnN0YW5kIHRoZSBmdW5jdGlvbiB0byBzZWUgdGhlIGltcGFjdCBvZiB0aGlzIHVubmVjZXNzYXJ5IGNhbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDE1OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDk4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwOTg6XHQvKiBJZiBhIGdhcCBpcyBkZXRlY3RlZCBiZXR3ZWVuIHNlbmRzLCBtYXJrIHRoZSBzb2NrZXQgYXBwbGljYXRpb24tbGltaXRlZC4gKi9cbjEwOTk6XHR2b2lkIHRjcF9yYXRlX2NoZWNrX2FwcF9saW1pdGVkKHN0cnVjdCBzb2NrICpzaylcbjExMDA6XHR7XG4xMTAxOlx0XHRzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTtcbjExMDI6XHRcbjExMDM6XHRcdGlmICgvKiBXZSBoYXZlIGxlc3MgdGhhbiBvbmUgcGFja2V0IHRvIHNlbmQuICovXG4xMTA0Olx0XHQgICAgdHAtXHUwMDNld3JpdGVfc2VxIC0gdHAtXHUwMDNlc25kX254dCBcdTAwM2MgdHAtXHUwMDNlbXNzX2NhY2hlIFx1MDAyNlx1MDAyNlxuMTEwNTpcdFx0ICAgIC8qIE5vdGhpbmcgaW4gc2VuZGluZyBob3N0JiMzOTtzIHFkaXNjIHF1ZXVlcyBvciBOSUMgdHggcXVldWUuICovXG4xMTA2Olx0XHQgICAgc2tfd21lbV9hbGxvY19nZXQoc2spIFx1MDAzYyBTS0JfVFJVRVNJWkUoMSkgXHUwMDI2XHUwMDI2XG4xMTA3Olx0XHQgICAgLyogV2UgYXJlIG5vdCBsaW1pdGVkIGJ5IENXTkQuICovXG4xMTA4Olx0XHQgICAgdGNwX3BhY2tldHNfaW5fZmxpZ2h0KHRwKSBcdTAwM2MgdGNwX3NuZF9jd25kKHRwKSBcdTAwMjZcdTAwMjZcbjExMDk6XHRcdCAgICAvKiBBbGwgbG9zdCBwYWNrZXRzIGhhdmUgYmVlbiByZXRyYW5zbWl0dGVkLiAqL1xuMTExMDpcdFx0ICAgIHRwLVx1MDAzZWxvc3Rfb3V0IFx1MDAzYz0gdHAtXHUwMDNlcmV0cmFuc19vdXQpXG4xMTExOlx0XHRcdHRwLVx1MDAzZWFwcF9saW1pdGVkID1cbjExMTI6XHRcdFx0XHQodHAtXHUwMDNlZGVsaXZlcmVkICYjNDM7IHRjcF9wYWNrZXRzX2luX2ZsaWdodCh0cCkpID8gOiAxO1xuMTExMzpcdH1cbjExMTQ6XHRFWFBPUlRfU1lNQk9MX0dQTCh0Y3BfcmF0ZV9jaGVja19hcHBfbGltaXRlZCk7XG4xMTE1Olx0XG4xMTE2Olx0aW50IHRjcF9zZW5kbXNnX2xvY2tlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXG4xMTE3Olx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxNTo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2Mjg2CgkJCQkJCQlvdXRwdXQ6IDE3NAoJCQkJCQkJdGhvdWdodHM6IDcyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBc3Nlc3NtZW50OiBObyBOZWVkIGZvciBEZWRpY2F0ZWQgRnV6emluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQsIGJhc2ljYWxseSwgaXQmIzM5O3MgY2xlYW5pbmcgdXAgc29tZSByZWR1bmRhbnQgZnVuY3Rpb24gY2FsbHMuIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgcmVtb3ZpbmcgZHVwbGljYXRlIGNhbGxzIHRvIGB0Y3BfcmF0ZV9jaGVja19hcHBfbGltaXRlZChzaylgIGZyb20gYHRjcF9icGZfcHVzaGAgYW5kIGB0bHNfcHVzaF9zZ2AuIFRoZSBpbXBvcnRhbnQgdGhpbmcgaGVyZSBpcyB0aGF0IGB0Y3Bfc2VuZG1zZ19sb2NrZWQoc2ssIC4uLilgIGlzIGNhbGxlZCAqaW1tZWRpYXRlbHkqIGFmdGVyIHRob3NlIGNhbGxzLCBhbmQgYHRjcF9zZW5kbXNnX2xvY2tlZGAgKmFscmVhZHkqIGludm9rZXMgYHRjcF9yYXRlX2NoZWNrX2FwcF9saW1pdGVkKHNrKWAuIFNvLCBpdCYjMzk7cyBqdXN0IGVsaW1pbmF0aW5nIGFuIHVubmVjZXNzYXJ5IGNhbGwuCgpOb3csIHRoZSBxdWVzdGlvbiBpcywgZG9lcyB0aGlzIGludHJvZHVjZSAqYW55KiB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMgb3IgaW5mb3JtYXRpb24gbGVha3M/IExldCYjMzk7cyBnbyB0aHJvdWdoIHRoZSBLTVNBTiBjaGVja2xpc3QuIFJlbWVtYmVyIHRoZSBydWxlczogd2UgbmVlZCBLTVNBTiBpZiB3ZSYjMzk7cmUgdG91Y2hpbmcga2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2UsIG1lc3Npbmcgd2l0aCBjb25kaXRpb25hbCBsb2dpYyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgYWxsb2NhdGluZyBhbmQgcG90ZW50aWFsbHkgcmVhZGluZyB1bmluaXRpYWxpemVkIGZpZWxkcywgb3IgYWx0ZXJpbmcgYm91bmRzIGNoZWNrcy4KCkluIHRoaXMgY2FzZSwgaXQmIzM5O3MgYSBzdHJhaWdodGZvcndhcmQgJiMzNDtubyYjMzQ7IGFjcm9zcyB0aGUgYm9hcmQuIFRoZSBwYXRjaCBkb2VzbiYjMzk7dCB0b3VjaCBhbnkgc3RydWN0dXJlcyB0aGF0IGFyZSBwYXNzZWQgdG8gdXNlcnNwYWNlLiBXZSYjMzk7cmUgbm90IGRvaW5nIGFueSBjb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIGRhdGEuIFRoZXJlIGFyZSBubyBuZXcgYWxsb2NhdGlvbnMsIGFuZCBjZXJ0YWlubHkgbm8gcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuIFdlJiMzOTtyZSBub3QgbW9kaWZ5aW5nIGJvdW5kcyBjaGVja3MgZWl0aGVyLiBXZSYjMzk7cmUganVzdCAqcmVtb3ZpbmcqIGEgZnVuY3Rpb24gY2FsbC4KClNvLCBJJiMzOTttIGNvbmZpZGVudCBpbiBzZXR0aW5nIGBOZWVkc0tNU0FOID0gZmFsc2VgLiBUaGlzIGNoYW5nZSBwcmltYXJpbHkgZGVhbHMgd2l0aCBjb2RlIHJlZHVuZGFuY3kgYW5kIHBlcmZvcm1hbmNlIGFuZCBpdCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4gS0FTQU4gd2lsbCwgb2YgY291cnNlLCBjb250aW51ZSB0byBjYXRjaCBhbnkgc3BhdGlhbCBvciB0ZW1wb3JhbCBtZW1vcnkgaXNzdWVzIGlmIHRoZXkgZXhpc3QuIEtNU0FOJiMzOTtzIHB1cnBvc2UgaXMgc3BlY2lmaWNhbGx5IHRvIGRldGVjdCByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQgaW5mb3JtYXRpb24gbGVha3MuCgpFc3NlbnRpYWxseSwgS01TQU4gaXMgZm9yIGRldGVjdGluZyB0aGUgJiMzNDt3aG9vcHMsIEkgZm9yZ290IHRvIGluaXRpYWxpemUgdGhhdCYjMzQ7IGtpbmQgb2YgZXJyb3IuIFRoaXMgcGF0Y2ggZG9lc24mIzM5O3Qgb3BlbiB0aGUgZG9vciBmb3IgdGhhdCBraW5kIG9mIHByb2JsZW0uIFRoZXJlZm9yZSwgaXQgaXMgYXBwcm9wcmlhdGUgdG8gc3RhdGUgdGhhdCBgS01TQU5SZWFzb25pbmdgIHNob3VsZCBiZSB0aGF0IHRoZSBwYXRjaCBtZXJlbHkgZGVsZXRlcyByZWR1bmRhbnQgY2FsbHMgdG8gYHRjcF9yYXRlX2NoZWNrX2FwcF9saW1pdGVkKHNrKWAgZnJvbSBgdGNwX2JwZl9wdXNoKClgIGFuZCBgdGxzX3B1c2hfc2coKWAsIHNpbmNlIGB0Y3Bfc2VuZG1zZ19sb2NrZWQoKWAsIGNhbGxlZCBpbW1lZGlhdGVseSBhZnRlcndhcmRzLCBhbHJlYWR5IHBlcmZvcm1zIGB0Y3BfcmF0ZV9jaGVja19hcHBfbGltaXRlZChzaylgLiBJdCBkb2VzIG5vdCBhbGxvY2F0ZSBuZXcgbWVtb3J5LCBpbml0aWFsaXplIG9yIHJlYWQgdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzLCBhbHRlciBidWZmZXIgYm91bmRhcmllcywgb3IgY29weSBrZXJuZWwgZGF0YSB0byB1c2VyIHNwYWNlLiBUaGVyZSBhcmUgemVybyByaXNrcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvcm1hdGlvbiBsZWFrcyBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQgYnkgdGhpcyBjaGFuZ2UsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiBBbmQgdGhlIHRvb2wgY2FsbCBmb3JtYXQgaXMgY29ycmVjdCBhcyBgc2V0LXJlc3VsdHNgIGFjY2VwdHMgYEtNU0FOUmVhc29uaW5nYCAoc3RyaW5nKSBhbmQgYE5lZWRzS01TQU5gIChib29sKS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTU6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVtb3ZlcyByZWR1bmRhbnQgY2FsbHMgdG8gdGNwX3JhdGVfY2hlY2tfYXBwX2xpbWl0ZWQoc2spIGZyb20gdGNwX2JwZl9wdXNoKCkgaW4gbmV0L2lwdjQvdGNwX2JwZi5jIGFuZCB0bHNfcHVzaF9zZygpIGluIG5ldC90bHMvdGxzX21haW4uYy4gSW4gYm90aCBjYXNlcywgdGNwX3NlbmRtc2dfbG9ja2VkKCkgaXMgY2FsbGVkIGltbWVkaWF0ZWx5IGZvbGxvd2luZyBhbmQgYWxyZWFkeSBpbnZva2VzIHRjcF9yYXRlX2NoZWNrX2FwcF9saW1pdGVkKHNrKS5cblxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24sIGJ1ZmZlciBsZW5ndGhzLCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgY29weWluZyB0byB1c2VyIHNwYWNlLiBUaGVyZSBpcyBubyByaXNrIG9mIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnksIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGZpZWxkcywgb3IgY2F1c2luZyBpbmZvcm1hdGlvbiBsZWFrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlbW92ZXMgcmVkdW5kYW50IGNhbGxzIHRvIHRjcF9yYXRlX2NoZWNrX2FwcF9saW1pdGVkKHNrKSBmcm9tIHRjcF9icGZfcHVzaCgpIGluIG5ldC9pcHY0L3RjcF9icGYuYyBhbmQgdGxzX3B1c2hfc2coKSBpbiBuZXQvdGxzL3Rsc19tYWluLmMuIEluIGJvdGggY2FzZXMsIHRjcF9zZW5kbXNnX2xvY2tlZCgpIGlzIGNhbGxlZCBpbW1lZGlhdGVseSBmb2xsb3dpbmcgYW5kIGFscmVhZHkgaW52b2tlcyB0Y3BfcmF0ZV9jaGVja19hcHBfbGltaXRlZChzaykuXG5cblRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uLCBidWZmZXIgbGVuZ3RocywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGNvcHlpbmcgdG8gdXNlciBzcGFjZS4gVGhlcmUgaXMgbm8gcmlzayBvZiByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBmaWVsZHMsIG9yIGNhdXNpbmcgaW5mb3JtYXRpb24gbGVha3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDE1OjAxOjExLjUxNDYyODU5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzE3OTg1MzEzODI3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUTFNcIixcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJCUEZfU1RSRUFNX1BBUlNFUlwiLFxuICAgIFwiTkVUX1NPQ0tfTVNHXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGxzX3B1c2hfc2dcIixcbiAgICBcInRsc190eF9yZWNvcmRzXCIsXG4gICAgXCJ0bHNfcHVzaF9wYXJ0aWFsX3JlY29yZFwiLFxuICAgIFwidGNwX2JwZl9wdXNoXCIsXG4gICAgXCJ0Y3BfYnBmX3NlbmRtc2dcIixcbiAgICBcInRjcF9icGZfc2VuZG1zZ19yZWRpclwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVtb3ZlcyByZWR1bmRhbnQgY2FsbHMgdG8gdGNwX3JhdGVfY2hlY2tfYXBwX2xpbWl0ZWQoc2spIGZyb20gdGNwX2JwZl9wdXNoKCkgaW4gbmV0L2lwdjQvdGNwX2JwZi5jIGFuZCB0bHNfcHVzaF9zZygpIGluIG5ldC90bHMvdGxzX21haW4uYy4gSW4gYm90aCBjYXNlcywgdGNwX3NlbmRtc2dfbG9ja2VkKCkgaXMgY2FsbGVkIGltbWVkaWF0ZWx5IGZvbGxvd2luZyBhbmQgYWxyZWFkeSBpbnZva2VzIHRjcF9yYXRlX2NoZWNrX2FwcF9saW1pdGVkKHNrKS5cXG5cXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbiwgYnVmZmVyIGxlbmd0aHMsIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBjb3B5aW5nIHRvIHVzZXIgc3BhY2UuIFRoZXJlIGlzIG5vIHJpc2sgb2YgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSwgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZmllbGRzLCBvciBjYXVzaW5nIGluZm9ybWF0aW9uIGxlYWtzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlbW92ZXMgcmVkdW5kYW50IGNhbGxzIHRvIHRjcF9yYXRlX2NoZWNrX2FwcF9saW1pdGVkKCkgZnJvbSB0Y3BfYnBmX3B1c2goKSBpbiBuZXQvaXB2NC90Y3BfYnBmLmMgYW5kIHRsc19wdXNoX3NnKCkgaW4gbmV0L3Rscy90bHNfbWFpbi5jLCBiZWNhdXNlIHRjcF9zZW5kbXNnX2xvY2tlZCgpIGFscmVhZHkgaW52b2tlcyB0Y3BfcmF0ZV9jaGVja19hcHBfbGltaXRlZCgpLiBUaGUgbW9kaWZpY2F0aW9ucyBhZmZlY3QgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlIHBhdGhzIGluIHRoZSBUQ1AgQlBGIGFuZCBUTFMgVUxQIHRyYW5zbWl0IHBpcGVsaW5lcy4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIHVuZXhwZWN0ZWQgc2lkZSBlZmZlY3RzIG9jY3VyIGluIFRDUCByYXRlIGxpbWl0aW5nIGFuZCB0cmFuc21pc3Npb24gbG9naWMgd2hlbiBzZW5kaW5nIGRhdGEgb3ZlciBUTFMgb3IgQlBGIHJlZGlyZWN0ZWQgc29ja2V0cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTU6MDE6MTEuNTE0NjMzNDYxWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDIyODczOTUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYTVkZWQwODQ0YmU1Njk0YjZiMjAyNTA3YWQ2NTE0Yjg0MTNhY2FiM1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIFNlcCAxNSAxNTowMTowOSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfYnBmLmMgYi9uZXQvaXB2NC90Y3BfYnBmLmNcXG5pbmRleCAyZTIzNGQxNTViNWU2Li5kNWZjZjNjZTQ4NjFhIDEwMDY0NFxcbi0tLSBhL25ldC9pcHY0L3RjcF9icGYuY1xcbisrKyBiL25ldC9pcHY0L3RjcF9icGYuY1xcbkBAIC0xMDgsNyArMTA4LDYgQEAgc3RhdGljIGludCB0Y3BfYnBmX3B1c2goc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfbXNnICptc2csIHUzMiBhcHBseV9ieXRlcyxcXG4gXFx0XFx0b2ZmICA9IHNnZS1cXHUwMDNlb2Zmc2V0O1xcbiBcXHRcXHRwYWdlID0gc2dfcGFnZShzZ2UpO1xcbiBcXG4tXFx0XFx0dGNwX3JhdGVfY2hlY2tfYXBwX2xpbWl0ZWQoc2spO1xcbiByZXRyeTpcXG4gXFx0XFx0bXNnaGRyLm1zZ19mbGFncyA9IGZsYWdzIHwgTVNHX1NQTElDRV9QQUdFUztcXG4gXFx0XFx0aGFzX3R4X3VscCA9IHRsc19zd19oYXNfY3R4X3R4KHNrKTtcXG5kaWZmIC0tZ2l0IGEvbmV0L3Rscy90bHNfbWFpbi5jIGIvbmV0L3Rscy90bHNfbWFpbi5jXFxuaW5kZXggZmJiMjc0Mjg3YWE1Zi4uOGJkYjc4NzE4YThkNCAxMDA2NDRcXG4tLS0gYS9uZXQvdGxzL3Rsc19tYWluLmNcXG4rKysgYi9uZXQvdGxzL3Rsc19tYWluLmNcXG5AQCAtMTg1LDggKzE4NSw2IEBAIGludCB0bHNfcHVzaF9zZyhzdHJ1Y3Qgc29jayAqc2ssXFxuIFxcbiBcXHRjdHgtXFx1MDAzZXNwbGljaW5nX3BhZ2VzID0gdHJ1ZTtcXG4gXFx0d2hpbGUgKDEpIHtcXG4tXFx0XFx0LyogaXMgc2VuZGluZyBhcHBsaWNhdGlvbi1saW1pdGVkPyAqL1xcbi1cXHRcXHR0Y3BfcmF0ZV9jaGVja19hcHBfbGltaXRlZChzayk7XFxuIFxcdFxcdHAgPSBzZ19wYWdlKHNnKTtcXG4gcmV0cnk6XFxuIFxcdFxcdGJ2ZWNfc2V0X3BhZ2UoXFx1MDAyNmJ2ZWMsIHAsIHNpemUsIG9mZnNldCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDE1OjAxOjEyLjkzODI5NTM2MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MzAzMzk1NTk0NDQ3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUTFNcIixcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJCUEZfU1RSRUFNX1BBUlNFUlwiLFxuICAgIFwiTkVUX1NPQ0tfTVNHXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGxzX3B1c2hfc2dcIixcbiAgICBcInRsc190eF9yZWNvcmRzXCIsXG4gICAgXCJ0bHNfcHVzaF9wYXJ0aWFsX3JlY29yZFwiLFxuICAgIFwidGNwX2JwZl9wdXNoXCIsXG4gICAgXCJ0Y3BfYnBmX3NlbmRtc2dcIixcbiAgICBcInRjcF9icGZfc2VuZG1zZ19yZWRpclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlbW92ZXMgcmVkdW5kYW50IGNhbGxzIHRvIHRjcF9yYXRlX2NoZWNrX2FwcF9saW1pdGVkKCkgZnJvbSB0Y3BfYnBmX3B1c2goKSBpbiBuZXQvaXB2NC90Y3BfYnBmLmMgYW5kIHRsc19wdXNoX3NnKCkgaW4gbmV0L3Rscy90bHNfbWFpbi5jLCBiZWNhdXNlIHRjcF9zZW5kbXNnX2xvY2tlZCgpIGFscmVhZHkgaW52b2tlcyB0Y3BfcmF0ZV9jaGVja19hcHBfbGltaXRlZCgpLiBUaGUgbW9kaWZpY2F0aW9ucyBhZmZlY3QgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlIHBhdGhzIGluIHRoZSBUQ1AgQlBGIGFuZCBUTFMgVUxQIHRyYW5zbWl0IHBpcGVsaW5lcy4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIHVuZXhwZWN0ZWQgc2lkZSBlZmZlY3RzIG9jY3VyIGluIFRDUCByYXRlIGxpbWl0aW5nIGFuZCB0cmFuc21pc3Npb24gbG9naWMgd2hlbiBzZW5kaW5nIGRhdGEgb3ZlciBUTFMgb3IgQlBGIHJlZGlyZWN0ZWQgc29ja2V0cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhNWRlZDA4NDRiZTU2OTRiNmIyMDI1MDdhZDY1MTRiODQxM2FjYWIzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgMTUgMTU6MDE6MDkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfYnBmLmMgYi9uZXQvaXB2NC90Y3BfYnBmLmNcbmluZGV4IDJlMjM0ZDE1NWI1ZTYuLmQ1ZmNmM2NlNDg2MWEgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC90Y3BfYnBmLmNcbisrKyBiL25ldC9pcHY0L3RjcF9icGYuY1xuQEAgLTEwOCw3ICsxMDgsNiBAQCBzdGF0aWMgaW50IHRjcF9icGZfcHVzaChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19tc2cgKm1zZywgdTMyIGFwcGx5X2J5dGVzLFxuIFx0XHRvZmYgID0gc2dlLVx1MDAzZW9mZnNldDtcbiBcdFx0cGFnZSA9IHNnX3BhZ2Uoc2dlKTtcbiBcbi1cdFx0dGNwX3JhdGVfY2hlY2tfYXBwX2xpbWl0ZWQoc2spO1xuIHJldHJ5OlxuIFx0XHRtc2doZHIubXNnX2ZsYWdzID0gZmxhZ3MgfCBNU0dfU1BMSUNFX1BBR0VTO1xuIFx0XHRoYXNfdHhfdWxwID0gdGxzX3N3X2hhc19jdHhfdHgoc2spO1xuZGlmZiAtLWdpdCBhL25ldC90bHMvdGxzX21haW4uYyBiL25ldC90bHMvdGxzX21haW4uY1xuaW5kZXggZmJiMjc0Mjg3YWE1Zi4uOGJkYjc4NzE4YThkNCAxMDA2NDRcbi0tLSBhL25ldC90bHMvdGxzX21haW4uY1xuKysrIGIvbmV0L3Rscy90bHNfbWFpbi5jXG5AQCAtMTg1LDggKzE4NSw2IEBAIGludCB0bHNfcHVzaF9zZyhzdHJ1Y3Qgc29jayAqc2ssXG4gXG4gXHRjdHgtXHUwMDNlc3BsaWNpbmdfcGFnZXMgPSB0cnVlO1xuIFx0d2hpbGUgKDEpIHtcbi1cdFx0LyogaXMgc2VuZGluZyBhcHBsaWNhdGlvbi1saW1pdGVkPyAqL1xuLVx0XHR0Y3BfcmF0ZV9jaGVja19hcHBfbGltaXRlZChzayk7XG4gXHRcdHAgPSBzZ19wYWdlKHNnKTtcbiByZXRyeTpcbiBcdFx0YnZlY19zZXRfcGFnZShcdTAwMjZidmVjLCBwLCBzaXplLCBvZmZzZXQpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTU6MDE6MTIuOTM4MzAwNTMxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjkxNzYxMzc5MjUyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJIHdlcmUgdGhpbmtpbmcgdGhyb3VnaCB0aGUgcHJvYmxlbTpcblxuKipBbmFseXppbmcgdGhlIENvZGUgQ2hhbmdlczogVENQIFJhdGUgTGltaXRpbmcgUmVtb3ZhbCoqXG5cbk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgZGlmZi4gSXQgbG9va3MgbGlrZSB3ZSdyZSByZW1vdmluZyBjYWxscyB0byBgdGNwX3JhdGVfY2hlY2tfYXBwX2xpbWl0ZWQoc2spYC4gU3BlY2lmaWNhbGx5LCBpdCdzIGJlaW5nIHJpcHBlZCBvdXQgb2YgYHRjcF9icGZfcHVzaGAgd2l0aGluIGBuZXQvaXB2NC90Y3BfYnBmLmNgIGFuZCBhbHNvIGZyb20gYHRsc19wdXNoX3NnYCBpbiBgbmV0L3Rscy90bHNfbWFpbi5jYC4gSG1tLCBpbnRlcmVzdGluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IHRoaXMgd2FzIGRvbmUuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgd2lkZXIgY29udGV4dCBvZiB0aGlzIGNoYW5nZS4gTGV0J3Mgc2VlIGlmIEkgY2FuIGdldCBzb21lIGNvbnRleHQgdXNpbmcgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgLiBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGZ1bmN0aW9uYWxpdHkgaXMgbG9zdCwgb3IgcGVyaGFwcywgaWYgc29tZSBvdGhlciBtZWNoYW5pc20gaXMgaGFuZGxpbmcgaXQgbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDc1LCJPdXRwdXRUb2tlbnMiOjc1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxNTo0OTo1MC41NTIwOTU3MzFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDQyMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvdGNwX2JwZi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDk1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDk1OlxcdFxcdGJvb2wgYXBwbHkgPSBhcHBseV9ieXRlcztcXG4gIDk2OlxcdFxcdHN0cnVjdCBzY2F0dGVybGlzdCAqc2dlO1xcbiAgOTc6XFx0XFx0c3RydWN0IHBhZ2UgKnBhZ2U7XFxuICA5ODpcXHRcXHRpbnQgc2l6ZSwgcmV0ID0gMDtcXG4gIDk5OlxcdFxcdHUzMiBvZmY7XFxuIDEwMDpcXHRcXG4gMTAxOlxcdFxcdHdoaWxlICgxKSB7XFxuIDEwMjpcXHRcXHRcXHRzdHJ1Y3QgYmlvX3ZlYyBidmVjO1xcbiAxMDM6XFx0XFx0XFx0Ym9vbCBoYXNfdHhfdWxwO1xcbiAxMDQ6XFx0XFxuIDEwNTpcXHRcXHRcXHRzZ2UgPSBza19tc2dfZWxlbShtc2csIG1zZy1cXHUwMDNlc2cuc3RhcnQpO1xcbiAxMDY6XFx0XFx0XFx0c2l6ZSA9IChhcHBseSBcXHUwMDI2XFx1MDAyNiBhcHBseV9ieXRlcyBcXHUwMDNjIHNnZS1cXHUwMDNlbGVuZ3RoKSA/XFxuIDEwNzpcXHRcXHRcXHRcXHRhcHBseV9ieXRlcyA6IHNnZS1cXHUwMDNlbGVuZ3RoO1xcbiAxMDg6XFx0XFx0XFx0b2ZmICA9IHNnZS1cXHUwMDNlb2Zmc2V0O1xcbiAxMDk6XFx0XFx0XFx0cGFnZSA9IHNnX3BhZ2Uoc2dlKTtcXG4gMTEwOlxcdFxcbiAxMTE6XFx0cmV0cnk6XFxuIDExMjpcXHRcXHRcXHRtc2doZHIubXNnX2ZsYWdzID0gZmxhZ3MgfCBNU0dfU1BMSUNFX1BBR0VTO1xcbiAxMTM6XFx0XFx0XFx0aGFzX3R4X3VscCA9IHRsc19zd19oYXNfY3R4X3R4KHNrKTtcXG4gMTE0OlxcdFxcdFxcdGlmIChoYXNfdHhfdWxwKVxcbiAxMTU6XFx0XFx0XFx0XFx0bXNnaGRyLm1zZ19mbGFncyB8PSBNU0dfU0VORFBBR0VfTk9QT0xJQ1k7XFxuIDExNjpcXHRcXG4gMTE3OlxcdFxcdFxcdGlmIChzaXplIFxcdTAwM2Mgc2dlLVxcdTAwM2VsZW5ndGggXFx1MDAyNlxcdTAwMjYgbXNnLVxcdTAwM2VzZy5zdGFydCAhPSBtc2ctXFx1MDAzZXNnLmVuZClcXG4gMTE4OlxcdFxcdFxcdFxcdG1zZ2hkci5tc2dfZmxhZ3MgfD0gTVNHX01PUkU7XFxuIDExOTpcXHRcXG4gMTIwOlxcdFxcdFxcdGJ2ZWNfc2V0X3BhZ2UoXFx1MDAyNmJ2ZWMsIHBhZ2UsIHNpemUsIG9mZik7XFxuIDEyMTpcXHRcXHRcXHRpb3ZfaXRlcl9idmVjKFxcdTAwMjZtc2doZHIubXNnX2l0ZXIsIElURVJfU09VUkNFLCBcXHUwMDI2YnZlYywgMSwgc2l6ZSk7XFxuIDEyMjpcXHRcXHRcXHRyZXQgPSB0Y3Bfc2VuZG1zZ19sb2NrZWQoc2ssIFxcdTAwMjZtc2doZHIsIHNpemUpO1xcbiAxMjM6XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjPSAwKVxcbiAxMjQ6XFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gMTI1OlxcdFxcbiAxMjY6XFx0XFx0XFx0aWYgKGFwcGx5KVxcbiAxMjc6XFx0XFx0XFx0XFx0YXBwbHlfYnl0ZXMgLT0gcmV0O1xcbiAxMjg6XFx0XFx0XFx0bXNnLVxcdTAwM2VzZy5zaXplIC09IHJldDtcXG4gMTI5OlxcdFxcdFxcdHNnZS1cXHUwMDNlb2Zmc2V0ICs9IHJldDtcXG4gMTMwOlxcdFxcdFxcdHNnZS1cXHUwMDNlbGVuZ3RoIC09IHJldDtcXG4gMTMxOlxcdFxcdFxcdGlmICh1bmNoYXJnZSlcXG4gMTMyOlxcdFxcdFxcdFxcdHNrX21lbV91bmNoYXJnZShzaywgcmV0KTtcXG4gMTMzOlxcdFxcdFxcdGlmIChyZXQgIT0gc2l6ZSkge1xcbiAxMzQ6XFx0XFx0XFx0XFx0c2l6ZSAtPSByZXQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDE1OjQ5OjUwLjU1MjIwMTY1MVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg1MjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC90bHMvdGxzX21haW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNzUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNzU6XFx0XFx0c3RydWN0IG1zZ2hkciBtc2cgPSB7XFxuIDE3NjpcXHRcXHRcXHQubXNnX2ZsYWdzID0gTVNHX1NQTElDRV9QQUdFUyB8IGZsYWdzLFxcbiAxNzc6XFx0XFx0fTtcXG4gMTc4OlxcdFxcdGludCByZXQgPSAwO1xcbiAxNzk6XFx0XFx0c3RydWN0IHBhZ2UgKnA7XFxuIDE4MDpcXHRcXHRzaXplX3Qgc2l6ZTtcXG4gMTgxOlxcdFxcdGludCBvZmZzZXQgPSBmaXJzdF9vZmZzZXQ7XFxuIDE4MjpcXHRcXG4gMTgzOlxcdFxcdHNpemUgPSBzZy1cXHUwMDNlbGVuZ3RoIC0gb2Zmc2V0O1xcbiAxODQ6XFx0XFx0b2Zmc2V0ICs9IHNnLVxcdTAwM2VvZmZzZXQ7XFxuIDE4NTpcXHRcXG4gMTg2OlxcdFxcdGN0eC1cXHUwMDNlc3BsaWNpbmdfcGFnZXMgPSB0cnVlO1xcbiAxODc6XFx0XFx0d2hpbGUgKDEpIHtcXG4gMTg4OlxcdFxcdFxcdHAgPSBzZ19wYWdlKHNnKTtcXG4gMTg5OlxcdHJldHJ5OlxcbiAxOTA6XFx0XFx0XFx0YnZlY19zZXRfcGFnZShcXHUwMDI2YnZlYywgcCwgc2l6ZSwgb2Zmc2V0KTtcXG4gMTkxOlxcdFxcdFxcdGlvdl9pdGVyX2J2ZWMoXFx1MDAyNm1zZy5tc2dfaXRlciwgSVRFUl9TT1VSQ0UsIFxcdTAwMjZidmVjLCAxLCBzaXplKTtcXG4gMTkyOlxcdFxcbiAxOTM6XFx0XFx0XFx0cmV0ID0gdGNwX3NlbmRtc2dfbG9ja2VkKHNrLCBcXHUwMDI2bXNnLCBzaXplKTtcXG4gMTk0OlxcdFxcbiAxOTU6XFx0XFx0XFx0aWYgKHJldCAhPSBzaXplKSB7XFxuIDE5NjpcXHRcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2UgMCkge1xcbiAxOTc6XFx0XFx0XFx0XFx0XFx0b2Zmc2V0ICs9IHJldDtcXG4gMTk4OlxcdFxcdFxcdFxcdFxcdHNpemUgLT0gcmV0O1xcbiAxOTk6XFx0XFx0XFx0XFx0XFx0Z290byByZXRyeTtcXG4gMjAwOlxcdFxcdFxcdFxcdH1cXG4gMjAxOlxcdFxcbiAyMDI6XFx0XFx0XFx0XFx0b2Zmc2V0IC09IHNnLVxcdTAwM2VvZmZzZXQ7XFxuIDIwMzpcXHRcXHRcXHRcXHRjdHgtXFx1MDAzZXBhcnRpYWxseV9zZW50X29mZnNldCA9IG9mZnNldDtcXG4gMjA0OlxcdFxcdFxcdFxcdGN0eC1cXHUwMDNlcGFydGlhbGx5X3NlbnRfcmVjb3JkID0gKHZvaWQgKilzZztcXG4gMjA1OlxcdFxcdFxcdFxcdGN0eC1cXHUwMDNlc3BsaWNpbmdfcGFnZXMgPSBmYWxzZTtcXG4gMjA2OlxcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDIwNzpcXHRcXHRcXHR9XFxuIDIwODpcXHRcXG4gMjA5OlxcdFxcdFxcdHB1dF9wYWdlKHApO1xcbiAyMTA6XFx0XFx0XFx0c2tfbWVtX3VuY2hhcmdlKHNrLCBzZy1cXHUwMDNlbGVuZ3RoKTtcXG4gMjExOlxcdFxcdFxcdHNnID0gc2dfbmV4dChzZyk7XFxuIDIxMjpcXHRcXHRcXHRpZiAoIXNnKVxcbiAyMTM6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDIxNDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTU6NDk6NTAuNTUyMjg5MjQxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzMzMzk3MDgyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcmVtb3ZhbCBvZiBgdGNwX3JhdGVfY2hlY2tfYXBwX2xpbWl0ZWQoc2spYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhhdCBkZWNpc2lvbiwgcGFydGljdWxhcmx5IHNpbmNlIGl0IHdhcyBsaWtlbHkgcGFydCBvZiBjb25nZXN0aW9uIGNvbnRyb2wgb3IgZmxvdyByZWd1bGF0aW9uLiBNeSBmaXJzdCBzdGVwIGlzIHRvIHRyYWNlIHdoZXJlIGl0IHdhcyB1c2VkLCBwZXJoYXBzIGluIHJlbGF0ZWQgdmVyc2lvbnMgb2YgdGhlIGtlcm5lbC5cblxuTmV4dCwgSSdsbCBuZWVkIHRvIHNjcnV0aW5pemUgdGhlIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgIGZ1bmN0aW9uLiBJIHdhbnQgdG8gc2VlIHByZWNpc2VseSBob3cgaXQgaGFuZGxlcyB0aGUgc2VuZGluZyBwcm9jZXNzIG5vdywgaW4gdGhlIGFic2VuY2Ugb2YgYHRjcF9yYXRlX2NoZWNrX2FwcF9saW1pdGVkYC4gSXMgdGhlIGZ1bmN0aW9uYWxpdHkgYmVpbmcgaGFuZGxlZCBlbHNld2hlcmU/IEhhcyB0aGUgcmF0ZSBsaW1pdGluZyBsb2dpYyBiZWVuIHNoaWZ0ZWQsIG9yIGNvbXBsZXRlbHkgZWxpbWluYXRlZD8gSSBuZWVkIHRvIGFuYWx5emUgaXRzIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gdG8gZ3Jhc3AgdGhlIG92ZXJhbGwgaW1wYWN0IG9uIHRoZSBUQ1Agc3RhY2suIFVuZGVyc3RhbmRpbmcgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gYHRjcF9zZW5kbXNnX2xvY2tlZGAgYW5kIGFueSBvdGhlciBwb3RlbnRpYWwgcmVwbGFjZW1lbnQgbWVjaGFuaXNtcyBpcyBrZXkuIFRoaXMgaXMgYSBjcnVjaWFsIGFyZWEgYW5kIEkgbmVlZCB0byBiZSBkaWxpZ2VudC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDU5NywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIiwicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTU6NDk6NTMuODg2MjYyNDE4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NDE1NzEyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRjcF9yYXRlX2NoZWNrX2FwcF9saW1pdGVkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC90Y3AuYz0xMDUxPWludCB0Y3Bfc2VuZG1zZ19mYXN0b3BlbihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgaW50ICpjb3BpZWQsXFxuLS1cXG5uZXQvaXB2NC90Y3AuYy0xMDk4LS8qIElmIGEgZ2FwIGlzIGRldGVjdGVkIGJldHdlZW4gc2VuZHMsIG1hcmsgdGhlIHNvY2tldCBhcHBsaWNhdGlvbi1saW1pdGVkLiAqL1xcbm5ldC9pcHY0L3RjcC5jOjEwOTk6dm9pZCB0Y3BfcmF0ZV9jaGVja19hcHBfbGltaXRlZChzdHJ1Y3Qgc29jayAqc2spXFxubmV0L2lwdjQvdGNwLmMtMTEwMC17XFxuLS1cXG5uZXQvaXB2NC90Y3AuYy0xMTEzLX1cXG5uZXQvaXB2NC90Y3AuYzoxMTE0OkVYUE9SVF9TWU1CT0xfR1BMKHRjcF9yYXRlX2NoZWNrX2FwcF9saW1pdGVkKTtcXG5uZXQvaXB2NC90Y3AuYy0xMTE1LVxcbm5ldC9pcHY0L3RjcC5jPTExMTY9aW50IHRjcF9zZW5kbXNnX2xvY2tlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXFxuLS1cXG5uZXQvaXB2NC90Y3AuYy0xMTg5LVxcbm5ldC9pcHY0L3RjcC5jOjExOTA6XFx0dGNwX3JhdGVfY2hlY2tfYXBwX2xpbWl0ZWQoc2spOyAgLyogaXMgc2VuZGluZyBhcHBsaWNhdGlvbi1saW1pdGVkPyAqL1xcbm5ldC9pcHY0L3RjcC5jLTExOTEtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDE1OjQ5OjUzLjkzNDY4MjY0WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTQ1MTU1MzcxNTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBteXNlbGY6XG5cbioqSW52ZXN0aWdhdGluZyBUQ1AgUmF0ZSBMaW1pdGluZyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBUQ1AgcmF0ZSBsaW1pdGluZyBpc3N1ZS4gVGhlIGNvcmUgb2YgaXQgc2VlbXMgdG8gYmUgaW4gdGhlIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgIGZ1bmN0aW9uLiBMZXQgbWUgc2VlLi4uIHllcywgbGluZSAxMTkwIGluIGBuZXQvaXB2NC90Y3AuY2AgaXMgdGhlIGNydWNpYWwgc3BvdC4gQW5kLCBnb29kLCBJIHNlZSB0aGF0IGB0Y3Bfc2VuZG1zZ19sb2NrZWRgICphbHJlYWR5KiBjYWxscyBgdGNwX3JhdGVfY2hlY2tfYXBwX2xpbWl0ZWQoc2spYC4gVGhhdCdzIGEga2V5IHBpZWNlIG9mIGluZm9ybWF0aW9uLlxuXG5Ob3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0IGEgYml0IGJldHRlci4gSSdsbCBuZWVkIHRvIGdvIGJhY2sgYW5kIGdldCBhIHdpZGVyIHZpZXcgYW5kIHNlZSB3aGF0IGlzIGdvaW5nIG9uIGF0IHRoZSBlbnRyeSB0byB0aGUgZnVuY3Rpb24uIExldCBtZSBzY2FuIHRoZSBjb2RlIGFyb3VuZCBsaW5lcyAxMTgwIHRvIDEyMDAgaW4gYG5ldC9pcHY0L3RjcC5jYC4gR2V0dGluZyB0aGUgd2lkZXIgY29kZSBwaWN0dXJlIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIGhvdyB0aGlzIHJhdGUgY2hlY2sgZml0cyBpbnRvIHRoZSBvdmVyYWxsIHNlbmQgcGF0aCBhbmQgd2hldGhlciBhbnl0aGluZydzIG1pc2NvbmZpZ3VyZWQgYXJvdW5kIHRoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUxNjIsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxNTo1MDowOC40NTAyMjMyOTRaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozODk3MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvdGNwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTE4MCxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTE4MDpcXHRcXHQgICAgIXRwLVxcdTAwM2VyZXBhaXIpIHtcXG4xMTgxOlxcdFxcdFxcdGVyciA9IHRjcF9zZW5kbXNnX2Zhc3RvcGVuKHNrLCBtc2csIFxcdTAwMjZjb3BpZWRfc3luLCBzaXplLCB1YXJnKTtcXG4xMTgyOlxcdFxcdFxcdGlmIChlcnIgPT0gLUVJTlBST0dSRVNTIFxcdTAwMjZcXHUwMDI2IGNvcGllZF9zeW4gXFx1MDAzZSAwKVxcbjExODM6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuMTE4NDpcXHRcXHRcXHRlbHNlIGlmIChlcnIpXFxuMTE4NTpcXHRcXHRcXHRcXHRnb3RvIG91dF9lcnI7XFxuMTE4NjpcXHRcXHR9XFxuMTE4NzpcXHRcXG4xMTg4OlxcdFxcdHRpbWVvID0gc29ja19zbmR0aW1lbyhzaywgZmxhZ3MgXFx1MDAyNiBNU0dfRE9OVFdBSVQpO1xcbjExODk6XFx0XFxuMTE5MDpcXHRcXHR0Y3BfcmF0ZV9jaGVja19hcHBfbGltaXRlZChzayk7ICAvKiBpcyBzZW5kaW5nIGFwcGxpY2F0aW9uLWxpbWl0ZWQ/ICovXFxuMTE5MTpcXHRcXG4xMTkyOlxcdFxcdC8qIFdhaXQgZm9yIGEgY29ubmVjdGlvbiB0byBmaW5pc2guIE9uZSBleGNlcHRpb24gaXMgVENQIEZhc3QgT3BlblxcbjExOTM6XFx0XFx0ICogKHBhc3NpdmUgc2lkZSkgd2hlcmUgZGF0YSBpcyBhbGxvd2VkIHRvIGJlIHNlbnQgYmVmb3JlIGEgY29ubmVjdGlvblxcbjExOTQ6XFx0XFx0ICogaXMgZnVsbHkgZXN0YWJsaXNoZWQuXFxuMTE5NTpcXHRcXHQgKi9cXG4xMTk2OlxcdFxcdGlmICgoKDEgXFx1MDAzY1xcdTAwM2Mgc2stXFx1MDAzZXNrX3N0YXRlKSBcXHUwMDI2IH4oVENQRl9FU1RBQkxJU0hFRCB8IFRDUEZfQ0xPU0VfV0FJVCkpIFxcdTAwMjZcXHUwMDI2XFxuMTE5NzpcXHRcXHQgICAgIXRjcF9wYXNzaXZlX2Zhc3RvcGVuKHNrKSkge1xcbjExOTg6XFx0XFx0XFx0ZXJyID0gc2tfc3RyZWFtX3dhaXRfY29ubmVjdChzaywgXFx1MDAyNnRpbWVvKTtcXG4xMTk5OlxcdFxcdFxcdGlmIChlcnIgIT0gMClcXG4xMjAwOlxcdFxcdFxcdFxcdGdvdG8gZG9fZXJyb3I7XFxuMTIwMTpcXHRcXHR9XFxuMTIwMjpcXHRcXG4xMjAzOlxcdFxcdGlmICh1bmxpa2VseSh0cC1cXHUwMDNlcmVwYWlyKSkge1xcbjEyMDQ6XFx0XFx0XFx0aWYgKHRwLVxcdTAwM2VyZXBhaXJfcXVldWUgPT0gVENQX1JFQ1ZfUVVFVUUpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTU6NTA6MDguNDUwNjE1Njc0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjUzMzkxODg3MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgVGhpcyBDb2RlIENoYW5nZSoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIHJlYWxpemVkIHNvbWV0aGluZyBrZXk6IHRoZSBjYWxscyB0byBgdGNwX3JhdGVfY2hlY2tfYXBwX2xpbWl0ZWQoc2spYCBiZWZvcmUgYHRjcF9zZW5kbXNnX2xvY2tlZGAgaW4gYHRjcF9icGZfcHVzaGAgYW5kIGB0bHNfcHVzaF9zZ2Agd2VyZSByZWR1bmRhbnQhIFRoYXQgZnVuY3Rpb24gaXMgYWxyZWFkeSBiZWluZyBjYWxsZWQgd2l0aGluIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgLiBHb29kIGNhdGNoLCB0aGF0J3MgZGVmaW5pdGVseSBhIGNsZWFudXAuXG5cbk5vdywgbGV0J3MgcHV0IG9uIHRoZSBmdXp6aW5nIGhhdC4gSSBoYXZlIHRvIGJlIHRob3JvdWdoLCBlc3BlY2lhbGx5IHdoZW4gaXQgY29tZXMgdG8gcmVmYWN0b3JpbmdzIGFuZCBuZXR3b3JraW5nIGNvZGUuIEkgbmVlZCB0byB0cmVhdCBjbGFpbXMgb2YgXCJubyBmdW5jdGlvbmFsIGNoYW5nZVwiIHdpdGggc2VyaW91cyBza2VwdGljaXNtLiBUaGUgZ3VpZGVsaW5lcyBhcmUgcHJldHR5IGNsZWFyIG9uIHRoaXM6IGFueSByZXN0cnVjdHVyaW5nLCBldmVuIHNlZW1pbmdseSBtaW5vciwgd2FycmFudHMgYSBjbG9zZXIgbG9vay5cblxuQWNjb3JkaW5nIHRvIHRob3NlIGd1aWRlbGluZXMsIFNlY3Rpb24gMSBtYWtlcyBpdCBleHBsaWNpdCB0aGF0IEkgc2hvdWxkbid0IHRha2UgdGhvc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUsIHJlZmFjdG9yaW5ncyBhbmQgY2xlYW51cHMgY2FuIGludHJvZHVjZSBzdWJ0bGUgaXNzdWVzLlxuXG5TZWN0aW9uIDIgcHJvdmlkZXMgbmVnYXRpdmUgY3JpdGVyaWEsIGJ1dCBub25lIGFwcGx5LiBJdCBzYXlzIEkgY2FuIGlnbm9yZSBjaGFuZ2VzIHRoYXQgYXJlIG5vbi1leGVjdXRhYmxlLCBkb2N1bWVudGF0aW9uLCB1c2VyIHNwYWNlLCBhbmQgc28gb24sIGJ1dCB0aGlzIGRvZXNuJ3QgZml0IHRoYXQgZGVzY3JpcHRpb24uXG5cblNlY3Rpb24gMyBsYXlzIG91dCB0aGUgcG9zaXRpdmUgY3JpdGVyaWEsIGFuZCB0aGF0J3Mgd2hlcmUgdGhpcyBsYW5kcy4gVGhlIG1vZGlmaWVkIGNvZGUgaXMgaW4gYG5ldC9pcHY0L3RjcF9icGYuY2AgYW5kIGBuZXQvdGxzL3Rsc19tYWluLmNgIOKAkyBjb3JlIG5ldHdvcmtpbmcgc3Vic3lzdGVtcy4gVGhpcyB0b3VjaGVzICpyZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlKiwgd2hpY2ggbWVhbnMgdGhlIHBhdGNoIGZhbGxzIHVuZGVyIHRoZSB1bWJyZWxsYSBvZiBcImFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cIiBUaGF0IG1lYW5zIEkndmUgZ290IGEgcmVzcG9uc2liaWxpdHkgdG8gc2F5IGBXb3J0aEZ1enppbmc9dHJ1ZWAuXG5cbk5vdyBJIG5lZWQgdG8gZ2F0aGVyIHNvbWUgbW9yZSBpbmZvLiBJIHNob3VsZCBjaGVjayB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zLCB0aGUgS2NvbmZpZyBvcHRpb25zLCBhbmQgbG9vayBhdCB0aGUgTWFrZWZpbGUuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgS2NvbmZpZyBvcHRpb25zIGdvdmVybiBgbmV0L2lwdjQvdGNwX2JwZi5jYCBhbmQgYG5ldC90bHMvdGxzX21haW4uY2AuIExldCdzIGNoZWNrIGBuZXQvaXB2NC9NYWtlZmlsZWAgYW5kIHRoZW4gbG9vayBhdCBgbmV0L3Rscy9LY29uZmlnYCBhbmQgYG5ldC90bHMvTWFrZWZpbGVgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1OTExLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTY4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTU6NTA6MTMuNzg5ODA2OTI0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTk3ODQ1MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Y3BfYnBmXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9NYWtlZmlsZT02Mj1vYmotJChDT05GSUdfVENQX0NPTkdfSUxMSU5PSVMpICs9IHRjcF9pbGxpbm9pcy5vXFxubmV0L2lwdjQvTWFrZWZpbGU6NjM6b2JqLSQoQ09ORklHX05FVF9TT0NLX01TRykgKz0gdGNwX2JwZi5vXFxubmV0L2lwdjQvTWFrZWZpbGUtNjQtb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSB1ZHBfYnBmLm9cXG4tLVxcbm5ldC9pcHY0L3RjcC5jPTQ0ODE9aW50IGRvX3RjcF9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLFxcbi0tXFxubmV0L2lwdjQvdGNwLmMtNDg1NS1cXG5uZXQvaXB2NC90Y3AuYzo0ODU2OmJvb2wgdGNwX2JwZl9ieXBhc3NfZ2V0c29ja29wdChpbnQgbGV2ZWwsIGludCBvcHRuYW1lKVxcbm5ldC9pcHY0L3RjcC5jLTQ4NTcte1xcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jPTMzPXN0YXRpYyBpbnQgYnBmX3RjcF9pbmdyZXNzKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jayxcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYy05MC1cXG5uZXQvaXB2NC90Y3BfYnBmLmM6OTE6c3RhdGljIGludCB0Y3BfYnBmX3B1c2goc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfbXNnICptc2csIHUzMiBhcHBseV9ieXRlcyxcXG5uZXQvaXB2NC90Y3BfYnBmLmMtOTItXFx0XFx0XFx0aW50IGZsYWdzLCBib29sIHVuY2hhcmdlKVxcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jLTE1MS1cXG5uZXQvaXB2NC90Y3BfYnBmLmM6MTUyOnN0YXRpYyBpbnQgdGNwX2JwZl9wdXNoX2xvY2tlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19tc2cgKm1zZyxcXG5uZXQvaXB2NC90Y3BfYnBmLmMtMTUzLVxcdFxcdFxcdCAgICAgICB1MzIgYXBwbHlfYnl0ZXMsIGludCBmbGFncywgYm9vbCB1bmNoYXJnZSlcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYy0xNTctXFx0bG9ja19zb2NrKHNrKTtcXG5uZXQvaXB2NC90Y3BfYnBmLmM6MTU4OlxcdHJldCA9IHRjcF9icGZfcHVzaChzaywgbXNnLCBhcHBseV9ieXRlcywgZmxhZ3MsIHVuY2hhcmdlKTtcXG5uZXQvaXB2NC90Y3BfYnBmLmMtMTU5LVxcdHJlbGVhc2Vfc29jayhzayk7XFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmMtMTYyLVxcbm5ldC9pcHY0L3RjcF9icGYuYzoxNjM6aW50IHRjcF9icGZfc2VuZG1zZ19yZWRpcihzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgaW5ncmVzcyxcXG5uZXQvaXB2NC90Y3BfYnBmLmMtMTY0LVxcdFxcdFxcdCAgc3RydWN0IHNrX21zZyAqbXNnLCB1MzIgYnl0ZXMsIGludCBmbGFncylcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYy0xNzItXFx0cmV0ID0gaW5ncmVzcyA/IGJwZl90Y3BfaW5ncmVzcyhzaywgcHNvY2ssIG1zZywgYnl0ZXMpIDpcXG5uZXQvaXB2NC90Y3BfYnBmLmM6MTczOlxcdFxcdFxcdHRjcF9icGZfcHVzaF9sb2NrZWQoc2ssIG1zZywgYnl0ZXMsIGZsYWdzLCBmYWxzZSk7XFxubmV0L2lwdjQvdGNwX2JwZi5jLTE3NC1cXHRza19wc29ja19wdXQoc2ssIHBzb2NrKTtcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYy0xNzYtfVxcbm5ldC9pcHY0L3RjcF9icGYuYzoxNzc6RVhQT1JUX1NZTUJPTF9HUEwodGNwX2JwZl9zZW5kbXNnX3JlZGlyKTtcXG5uZXQvaXB2NC90Y3BfYnBmLmMtMTc4LVxcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jPTIwMj1zdGF0aWMgYm9vbCBpc19uZXh0X21zZ19maW4oc3RydWN0IHNrX3Bzb2NrICpwc29jaylcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYy0yMTktXFxubmV0L2lwdjQvdGNwX2JwZi5jOjIyMDpzdGF0aWMgaW50IHRjcF9icGZfcmVjdm1zZ19wYXJzZXIoc3RydWN0IHNvY2sgKnNrLFxcbm5ldC9pcHY0L3RjcF9icGYuYy0yMjEtXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbXNnaGRyICptc2csXFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmMtMzMzLVxcbm5ldC9pcHY0L3RjcF9icGYuYzozMzQ6c3RhdGljIGludCB0Y3BfYnBmX2lvY3RsKHN0cnVjdCBzb2NrICpzaywgaW50IGNtZCwgaW50ICprYXJnKVxcbm5ldC9pcHY0L3RjcF9icGYuYy0zMzUte1xcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jLTM2Ni1cXG5uZXQvaXB2NC90Y3BfYnBmLmM6MzY3OnN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxcbm5ldC9pcHY0L3RjcF9icGYuYy0zNjgtXFx0XFx0XFx0ICAgaW50IGZsYWdzKVxcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jLTQxNi1cXG5uZXQvaXB2NC90Y3BfYnBmLmM6NDE3OnN0YXRpYyBpbnQgdGNwX2JwZl9zZW5kX3ZlcmRpY3Qoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLFxcbm5ldC9pcHY0L3RjcF9icGYuYy00MTgtXFx0XFx0XFx0XFx0c3RydWN0IHNrX21zZyAqbXNnLCBpbnQgKmNvcGllZCwgaW50IGZsYWdzKVxcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jLTQ2MC1cXHRjYXNlIF9fU0tfUEFTUzpcXG5uZXQvaXB2NC90Y3BfYnBmLmM6NDYxOlxcdFxcdHJldCA9IHRjcF9icGZfcHVzaChzaywgbXNnLCB0b3NlbmQsIGZsYWdzLCB0cnVlKTtcXG5uZXQvaXB2NC90Y3BfYnBmLmMtNDYyLVxcdFxcdGlmICh1bmxpa2VseShyZXQpKSB7XFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmMtNDg1LVxcdFxcdG9yaWdzaXplID0gbXNnLVxcdTAwM2VzZy5zaXplO1xcbm5ldC9pcHY0L3RjcF9icGYuYzo0ODY6XFx0XFx0cmV0ID0gdGNwX2JwZl9zZW5kbXNnX3JlZGlyKHNrX3JlZGlyLCByZWRpcl9pbmdyZXNzLFxcbm5ldC9pcHY0L3RjcF9icGYuYy00ODctXFx0XFx0XFx0XFx0XFx0ICAgIG1zZywgdG9zZW5kLCBmbGFncyk7XFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmMtNTMyLVxcbm5ldC9pcHY0L3RjcF9icGYuYzo1MzM6c3RhdGljIGludCB0Y3BfYnBmX3NlbmRtc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxcbm5ldC9pcHY0L3RjcF9icGYuYy01MzQte1xcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jLTU5OC1cXG5uZXQvaXB2NC90Y3BfYnBmLmM6NTk5OlxcdFxcdGVyciA9IHRjcF9icGZfc2VuZF92ZXJkaWN0KHNrLCBwc29jaywgbXNnX3R4LCBcXHUwMDI2Y29waWVkLCBmbGFncyk7XFxubmV0L2lwdjQvdGNwX2JwZi5jLTYwMC1cXHRcXHRpZiAodW5saWtlbHkoZXJyIFxcdTAwM2MgMCkpXFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmM9NjM2PXN0YXRpYyBERUZJTkVfU1BJTkxPQ0sodGNwdjZfcHJvdF9sb2NrKTtcXG5uZXQvaXB2NC90Y3BfYnBmLmM6NjM3OnN0YXRpYyBzdHJ1Y3QgcHJvdG8gdGNwX2JwZl9wcm90c1tUQ1BfQlBGX05VTV9QUk9UU11bVENQX0JQRl9OVU1fQ0ZHU107XFxubmV0L2lwdjQvdGNwX2JwZi5jLTYzOC1cXG5uZXQvaXB2NC90Y3BfYnBmLmM6NjM5OnN0YXRpYyB2b2lkIHRjcF9icGZfcmVidWlsZF9wcm90b3Moc3RydWN0IHByb3RvIHByb3RbVENQX0JQRl9OVU1fQ0ZHU10sXFxubmV0L2lwdjQvdGNwX2JwZi5jLTY0MC1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgcHJvdG8gKmJhc2UpXFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmMtNjQ0LVxcdHByb3RbVENQX0JQRl9CQVNFXS5jbG9zZVxcdFxcdD0gc29ja19tYXBfY2xvc2U7XFxubmV0L2lwdjQvdGNwX2JwZi5jOjY0NTpcXHRwcm90W1RDUF9CUEZfQkFTRV0ucmVjdm1zZ1xcdFxcdD0gdGNwX2JwZl9yZWN2bXNnO1xcbm5ldC9pcHY0L3RjcF9icGYuYy02NDYtXFx0cHJvdFtUQ1BfQlBGX0JBU0VdLnNvY2tfaXNfcmVhZGFibGVcXHQ9IHNrX21zZ19pc19yZWFkYWJsZTtcXG5uZXQvaXB2NC90Y3BfYnBmLmM6NjQ3OlxcdHByb3RbVENQX0JQRl9CQVNFXS5pb2N0bFxcdFxcdD0gdGNwX2JwZl9pb2N0bDtcXG5uZXQvaXB2NC90Y3BfYnBmLmMtNjQ4LVxcbm5ldC9pcHY0L3RjcF9icGYuYy02NDktXFx0cHJvdFtUQ1BfQlBGX1RYXVxcdFxcdFxcdD0gcHJvdFtUQ1BfQlBGX0JBU0VdO1xcbm5ldC9pcHY0L3RjcF9icGYuYzo2NTA6XFx0cHJvdFtUQ1BfQlBGX1RYXS5zZW5kbXNnXFx0XFx0PSB0Y3BfYnBmX3NlbmRtc2c7XFxubmV0L2lwdjQvdGNwX2JwZi5jLTY1MS1cXG5uZXQvaXB2NC90Y3BfYnBmLmMtNjUyLVxcdHByb3RbVENQX0JQRl9SWF1cXHRcXHRcXHQ9IHByb3RbVENQX0JQRl9CQVNFXTtcXG5uZXQvaXB2NC90Y3BfYnBmLmM6NjUzOlxcdHByb3RbVENQX0JQRl9SWF0ucmVjdm1zZ1xcdFxcdD0gdGNwX2JwZl9yZWN2bXNnX3BhcnNlcjtcXG5uZXQvaXB2NC90Y3BfYnBmLmMtNjU0LVxcbm5ldC9pcHY0L3RjcF9icGYuYy02NTUtXFx0cHJvdFtUQ1BfQlBGX1RYUlhdXFx0XFx0XFx0PSBwcm90W1RDUF9CUEZfVFhdO1xcbm5ldC9pcHY0L3RjcF9icGYuYzo2NTY6XFx0cHJvdFtUQ1BfQlBGX1RYUlhdLnJlY3Ztc2dcXHRcXHQ9IHRjcF9icGZfcmVjdm1zZ19wYXJzZXI7XFxubmV0L2lwdjQvdGNwX2JwZi5jLTY1Ny19XFxubmV0L2lwdjQvdGNwX2JwZi5jLTY1OC1cXG5uZXQvaXB2NC90Y3BfYnBmLmM6NjU5OnN0YXRpYyB2b2lkIHRjcF9icGZfY2hlY2tfdjZfbmVlZHNfcmVidWlsZChzdHJ1Y3QgcHJvdG8gKm9wcylcXG5uZXQvaXB2NC90Y3BfYnBmLmMtNjYwLXtcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYy02NjMtXFx0XFx0aWYgKGxpa2VseShvcHMgIT0gdGNwdjZfcHJvdF9zYXZlZCkpIHtcXG5uZXQvaXB2NC90Y3BfYnBmLmM6NjY0OlxcdFxcdFxcdHRjcF9icGZfcmVidWlsZF9wcm90b3ModGNwX2JwZl9wcm90c1tUQ1BfQlBGX0lQVjZdLCBvcHMpO1xcbm5ldC9pcHY0L3RjcF9icGYuYy02NjUtXFx0XFx0XFx0c21wX3N0b3JlX3JlbGVhc2UoXFx1MDAyNnRjcHY2X3Byb3Rfc2F2ZWQsIG9wcyk7XFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmMtNjcwLVxcbm5ldC9pcHY0L3RjcF9icGYuYzo2NzE6c3RhdGljIGludCBfX2luaXQgdGNwX2JwZl92NF9idWlsZF9wcm90byh2b2lkKVxcbm5ldC9pcHY0L3RjcF9icGYuYy02NzIte1xcbm5ldC9pcHY0L3RjcF9icGYuYzo2NzM6XFx0dGNwX2JwZl9yZWJ1aWxkX3Byb3Rvcyh0Y3BfYnBmX3Byb3RzW1RDUF9CUEZfSVBWNF0sIFxcdTAwMjZ0Y3BfcHJvdCk7XFxubmV0L2lwdjQvdGNwX2JwZi5jLTY3NC1cXHRyZXR1cm4gMDtcXG5uZXQvaXB2NC90Y3BfYnBmLmMtNjc1LX1cXG5uZXQvaXB2NC90Y3BfYnBmLmM6Njc2OmxhdGVfaW5pdGNhbGwodGNwX2JwZl92NF9idWlsZF9wcm90byk7XFxubmV0L2lwdjQvdGNwX2JwZi5jLTY3Ny1cXG5uZXQvaXB2NC90Y3BfYnBmLmM6Njc4OnN0YXRpYyBpbnQgdGNwX2JwZl9hc3NlcnRfcHJvdG9fb3BzKHN0cnVjdCBwcm90byAqb3BzKVxcbm5ldC9pcHY0L3RjcF9icGYuYy02Nzkte1xcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jLTY4OC0jaWYgSVNfRU5BQkxFRChDT05GSUdfQlBGX1NUUkVBTV9QQVJTRVIpXFxubmV0L2lwdjQvdGNwX2JwZi5jOjY4OTppbnQgdGNwX2JwZl9zdHJwX3JlYWRfc29jayhzdHJ1Y3Qgc3RycGFyc2VyICpzdHJwLCByZWFkX2Rlc2NyaXB0b3JfdCAqZGVzYyxcXG5uZXQvaXB2NC90Y3BfYnBmLmMtNjkwLVxcdFxcdFxcdCAgIHNrX3JlYWRfYWN0b3JfdCByZWN2X2FjdG9yKVxcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jLTcxMi1cXHQgKiBGb3IgU0tfUkVESVJFQ1QsIHdlIG5lZWQgdG8gYWNrIHRoZSBmcmFtZSBpbW1lZGlhdGVseSBidXQgZm9yXFxubmV0L2lwdjQvdGNwX2JwZi5jOjcxMzpcXHQgKiBTS19QQVNTLCB3ZSB3YW50IHRvIGRlbGF5IHRoZSBhY2sgdW50aWwgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcigpLlxcbm5ldC9pcHY0L3RjcF9icGYuYy03MTQtXFx0ICovXFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmMtNzIzLVxcbm5ldC9pcHY0L3RjcF9icGYuYzo3MjQ6aW50IHRjcF9icGZfdXBkYXRlX3Byb3RvKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jaywgYm9vbCByZXN0b3JlKVxcbm5ldC9pcHY0L3RjcF9icGYuYy03MjUte1xcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jLTc1MC1cXHRpZiAoc2stXFx1MDAzZXNrX2ZhbWlseSA9PSBBRl9JTkVUNikge1xcbm5ldC9pcHY0L3RjcF9icGYuYzo3NTE6XFx0XFx0aWYgKHRjcF9icGZfYXNzZXJ0X3Byb3RvX29wcyhwc29jay1cXHUwMDNlc2tfcHJvdG8pKVxcbm5ldC9pcHY0L3RjcF9icGYuYy03NTItXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxubmV0L2lwdjQvdGNwX2JwZi5jLTc1My1cXG5uZXQvaXB2NC90Y3BfYnBmLmM6NzU0OlxcdFxcdHRjcF9icGZfY2hlY2tfdjZfbmVlZHNfcmVidWlsZChwc29jay1cXHUwMDNlc2tfcHJvdG8pO1xcbm5ldC9pcHY0L3RjcF9icGYuYy03NTUtXFx0fVxcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jLTc1Ny1cXHQvKiBQYWlycyB3aXRoIGxvY2tsZXNzIHJlYWQgaW4gc2tfY2xvbmVfbG9jaygpICovXFxubmV0L2lwdjQvdGNwX2JwZi5jOjc1ODpcXHRzb2NrX3JlcGxhY2VfcHJvdG8oc2ssIFxcdTAwMjZ0Y3BfYnBmX3Byb3RzW2ZhbWlseV1bY29uZmlnXSk7XFxubmV0L2lwdjQvdGNwX2JwZi5jLTc1OS1cXHRyZXR1cm4gMDtcXG5uZXQvaXB2NC90Y3BfYnBmLmMtNzYwLX1cXG5uZXQvaXB2NC90Y3BfYnBmLmM6NzYxOkVYUE9SVF9TWU1CT0xfR1BMKHRjcF9icGZfdXBkYXRlX3Byb3RvKTtcXG5uZXQvaXB2NC90Y3BfYnBmLmMtNzYyLVxcbm5ldC9pcHY0L3RjcF9icGYuYzo3NjM6LyogSWYgYSBjaGlsZCBnb3QgY2xvbmVkIGZyb20gYSBsaXN0ZW5pbmcgc29ja2V0IHRoYXQgaGFkIHRjcF9icGZcXG5uZXQvaXB2NC90Y3BfYnBmLmMtNzY0LSAqIHByb3RvY29sIGNhbGxiYWNrcyBpbnN0YWxsZWQsIHdlIG5lZWQgdG8gcmVzdG9yZSB0aGUgY2FsbGJhY2tzIHRvXFxubmV0L2lwdjQvdGNwX2JwZi5jLTc2NS0gKiB0aGUgZGVmYXVsdCBvbmVzIGJlY2F1c2UgdGhlIGNoaWxkIGRvZXMgbm90IGluaGVyaXQgdGhlIHBzb2NrIHN0YXRlXFxubmV0L2lwdjQvdGNwX2JwZi5jOjc2NjogKiB0aGF0IHRjcF9icGYgY2FsbGJhY2tzIGV4cGVjdC5cXG5uZXQvaXB2NC90Y3BfYnBmLmMtNzY3LSAqL1xcbm5ldC9pcHY0L3RjcF9icGYuYzo3Njg6dm9pZCB0Y3BfYnBmX2Nsb25lKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKm5ld3NrKVxcbm5ldC9pcHY0L3RjcF9icGYuYy03Njkte1xcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jLTc3MS1cXG5uZXQvaXB2NC90Y3BfYnBmLmM6NzcyOlxcdGlmIChpc19pbnNpZGV2YXIocHJvdCwgdGNwX2JwZl9wcm90cykpXFxubmV0L2lwdjQvdGNwX2JwZi5jLTc3My1cXHRcXHRuZXdzay1cXHUwMDNlc2tfcHJvdCA9IHNrLVxcdTAwM2Vza19wcm90X2NyZWF0b3I7XFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz0xMDcwPXN0YXRpYyB2b2lkIHRjcF9ydHRfZXN0aW1hdG9yKHN0cnVjdCBzb2NrICpzaywgbG9uZyBtcnR0X3VzKVxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtMTEyMi1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzoxMTIzOlxcdFxcdFxcdHRjcF9icGZfcnR0KHNrLCBtcnR0X3VzLCBzcnR0KTtcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy0xMTI0LVxcdFxcdH1cXG4tLVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTExMzItXFxubmV0L2lwdjQvdGNwX2lucHV0LmM6MTEzMzpcXHRcXHR0Y3BfYnBmX3J0dChzaywgbXJ0dF91cywgc3J0dCk7XFxubmV0L2lwdjQvdGNwX2lucHV0LmMtMTEzNC1cXHR9XFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz03NDU0PXN0YXRpYyB2b2lkIHRjcF9lY25fY3JlYXRlX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLFxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNzQ4NC1cXHQgICAgKGVjbl9va19kc3QgXFx1MDAyNiBEU1RfRkVBVFVSRV9FQ05fQ0EpIHx8XFxubmV0L2lwdjQvdGNwX2lucHV0LmM6NzQ4NTpcXHQgICAgdGNwX2JwZl9jYV9uZWVkc19lY24oKHN0cnVjdCBzb2NrICopcmVxKSlcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy03NDg2LVxcdFxcdGluZXRfcnNrKHJlcSktXFx1MDAzZWVjbl9vayA9IDE7XFxuLS1cXG5uZXQvaXB2NC90Y3BfaXB2NC5jPTExNjI9c3RhdGljIGludCB0Y3BfdjRfc2VuZF9zeW5hY2soY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsXFxuLS1cXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTExOTEtXFx0XFx0aWYgKCFJTkVUX0VDTl9pc19jYXBhYmxlKHRvcykgXFx1MDAyNlxcdTAwMjZcXG5uZXQvaXB2NC90Y3BfaXB2NC5jOjExOTI6XFx0XFx0ICAgIHRjcF9icGZfY2FfbmVlZHNfZWNuKChzdHJ1Y3Qgc29jayAqKXJlcSkpXFxubmV0L2lwdjQvdGNwX2lwdjQuYy0xMTkzLVxcdFxcdFxcdHRvcyB8PSBJTkVUX0VDTl9FQ1RfMDtcXG4tLVxcbm5ldC9pcHY0L3RjcF9pcHY0LmM9MzM0OD1zdHJ1Y3QgcHJvdG8gdGNwX3Byb3QgPSB7XFxuLS1cXG5uZXQvaXB2NC90Y3BfaXB2NC5jLTMzNjEtXFx0LmdldHNvY2tvcHRcXHRcXHQ9IHRjcF9nZXRzb2Nrb3B0LFxcbm5ldC9pcHY0L3RjcF9pcHY0LmM6MzM2MjpcXHQuYnBmX2J5cGFzc19nZXRzb2Nrb3B0XFx0PSB0Y3BfYnBmX2J5cGFzc19nZXRzb2Nrb3B0LFxcbm5ldC9pcHY0L3RjcF9pcHY0LmMtMzM2My1cXHQua2VlcGFsaXZlXFx0XFx0PSB0Y3Bfc2V0X2tlZXBhbGl2ZSxcXG4tLVxcbm5ldC9pcHY0L3RjcF9pcHY0LmMtMzM3My0jaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXFxubmV0L2lwdjQvdGNwX2lwdjQuYzozMzc0OlxcdC5wc29ja191cGRhdGVfc2tfcHJvdFxcdD0gdGNwX2JwZl91cGRhdGVfcHJvdG8sXFxubmV0L2lwdjQvdGNwX2lwdjQuYy0zMzc1LSNlbmRpZlxcbi0tXFxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jPTU0Nj1zdHJ1Y3Qgc29jayAqdGNwX2NyZWF0ZV9vcGVucmVxX2NoaWxkKGNvbnN0IHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9pcHY0L3RjcF9taW5pc29ja3MuYy02NjMtXFx0bmV3dHAtXFx1MDAzZWJwZl9jaGdfY2NfaW5wcm9ncmVzcyA9IDA7XFxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jOjY2NDpcXHR0Y3BfYnBmX2Nsb25lKHNrLCBuZXdzayk7XFxubmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jLTY2NS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTU6NTA6MTMuODM5NzkyOTI1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIxNjE4ODUyMTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkNoZWNraW5nIE5ldC9UTFMgTWFrZWZpbGUgYW5kIEtjb25maWcqKlxuXG5Pa2F5LCBzbyB3ZSBuZWVkIHRvIGNpcmNsZSBiYWNrIGFuZCBnaXZlIHRoZSBgbmV0L3Rscy9gIGRpcmVjdG9yeSBhbm90aGVyIG9uY2Utb3Zlciwgc3BlY2lmaWNhbGx5IHRoZSBgTWFrZWZpbGVgIGFuZCBgS2NvbmZpZ2AgZmlsZXMuIEknbSB0aGlua2luZyB3ZSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBUTFMtcmVsYXRlZCBidWlsZCBwcm9jZXNzIGlzIGNvbnNpc3RlbnQgYW5kIGRvZXNuJ3QgaW50cm9kdWNlIGFueSByZWdyZXNzaW9ucyBvciBidWlsZCBicmVha3MuIFRoaXMgbGlrZWx5IG1lYW5zIHZlcmlmeWluZyB0aGUgZGVwZW5kZW5jaWVzLCBjb21waWxlIGZsYWdzLCBhbmQgYW55IGNvbmRpdGlvbmFsIGJ1aWxkIGxvZ2ljIGJhc2VkIG9uIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFdlIHdhbnQgdG8gYmUgY2VydGFpbiB0aGF0IHRoZXNlIGZpbGVzIGFyZSB1cC10by1kYXRlIGFuZCBjb3JyZWN0bHkgcmVmbGVjdCB0aGUgZGVzaXJlZCBiZWhhdmlvciB3aXRoIHRoZSBsYXRlc3QgY2hhbmdlcyBtYWRlIHVwc3RyZWFtLiBObyBzdXJwcmlzZXMgaW4gdGhlIGJ1aWxkIHByb2Nlc3MsIHRoYXQncyB0aGUgZ29hbC4gTGV0J3MgbWFrZSBzdXJlIHRoYXQgYW55IGZlYXR1cmUgZmxhZ3MgYXJlIGNvcnJlY3RseSBzZXQsIHRoYXQgdGhleSBpbnRlZ3JhdGUgcHJvcGVybHksIGFuZCB0aGF0IG91ciBjdXN0b20gZGVmaW5pdGlvbnMgYXJlIGNvcnJlY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMjQzLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTU6NTA6MTYuMDAxNjgyNTQzWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzU3OTE0MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0bHNfcHVzaF9zZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvdGxzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvdGxzL3Rscy5oPTI2Mj10bHNfZGV2aWNlX2RlY3J5cHRlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCB0bHNfY29udGV4dCAqdGxzX2N0eClcXG4tLVxcbm5ldC90bHMvdGxzLmgtMjY3LVxcbm5ldC90bHMvdGxzLmg6MjY4OmludCB0bHNfcHVzaF9zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCB0bHNfY29udGV4dCAqY3R4LFxcbm5ldC90bHMvdGxzLmgtMjY5LVxcdFxcdHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIHUxNiBmaXJzdF9vZmZzZXQsXFxuLS1cXG5uZXQvdGxzL3Rsc19kZXZpY2UuYz0yNzk9c3RhdGljIGludCB0bHNfcHVzaF9yZWNvcmQoc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L3Rscy90bHNfZGV2aWNlLmMtMzA5LVxcdC8qIGFsbCByZWFkeSwgc2VuZCAqL1xcbm5ldC90bHMvdGxzX2RldmljZS5jOjMxMDpcXHRyZXR1cm4gdGxzX3B1c2hfc2coc2ssIGN0eCwgb2ZmbG9hZF9jdHgtXFx1MDAzZXNnX3R4X2RhdGEsIDAsIGZsYWdzKTtcXG5uZXQvdGxzL3Rsc19kZXZpY2UuYy0zMTEtfVxcbi0tXFxubmV0L3Rscy90bHNfbWFpbi5jPTEzOT1pbnQgd2FpdF9vbl9wZW5kaW5nX3dyaXRlcihzdHJ1Y3Qgc29jayAqc2ssIGxvbmcgKnRpbWVvKVxcbi0tXFxubmV0L3Rscy90bHNfbWFpbi5jLTE2Ny1cXG5uZXQvdGxzL3Rsc19tYWluLmM6MTY4OmludCB0bHNfcHVzaF9zZyhzdHJ1Y3Qgc29jayAqc2ssXFxubmV0L3Rscy90bHNfbWFpbi5jLTE2OS1cXHRcXHRzdHJ1Y3QgdGxzX2NvbnRleHQgKmN0eCxcXG4tLVxcbm5ldC90bHMvdGxzX21haW4uYz0yNjY9aW50IHRsc19wdXNoX3BhcnRpYWxfcmVjb3JkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHRsc19jb250ZXh0ICpjdHgsXFxuLS1cXG5uZXQvdGxzL3Rsc19tYWluLmMtMjc1LVxcdGN0eC1cXHUwMDNlcGFydGlhbGx5X3NlbnRfcmVjb3JkID0gTlVMTDtcXG5uZXQvdGxzL3Rsc19tYWluLmM6Mjc2OlxcdHJldHVybiB0bHNfcHVzaF9zZyhzaywgY3R4LCBzZywgb2Zmc2V0LCBmbGFncyk7XFxubmV0L3Rscy90bHNfbWFpbi5jLTI3Ny19XFxuLS1cXG5uZXQvdGxzL3Rsc19zdy5jPTQwOD1pbnQgdGxzX3R4X3JlY29yZHMoc3RydWN0IHNvY2sgKnNrLCBpbnQgZmxhZ3MpXFxuLS1cXG5uZXQvdGxzL3Rsc19zdy5jLTQ0NS1cXHRcXHRcXHRtc2dfZW4gPSBcXHUwMDI2cmVjLVxcdTAwM2Vtc2dfZW5jcnlwdGVkO1xcbm5ldC90bHMvdGxzX3N3LmM6NDQ2OlxcdFxcdFxcdHJjID0gdGxzX3B1c2hfc2coc2ssIHRsc19jdHgsXFxubmV0L3Rscy90bHNfc3cuYy00NDctXFx0XFx0XFx0XFx0XFx0IFxcdTAwMjZtc2dfZW4tXFx1MDAzZXNnLmRhdGFbbXNnX2VuLVxcdTAwM2VzZy5jdXJyXSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTU6NTA6MTYuMDQ5MjY3NDA1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI2Mzg2NDM2MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgTmV0d29yayBTb2NrZXQgTWVzc2FnaW5nIGFuZCBUTFMgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGBDT05GSUdfTkVUX1NPQ0tfTVNHYCBhbmQgYENPTkZJR19UTFNgLiBUaG9zZSB0d28gYXJlIGtleSBwbGF5ZXJzLCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlaXIgZGVmaW5pdGlvbnMgd2l0aGluIHRoZSBLY29uZmlnIHN5c3RlbS4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcsIFwiTGV0J3MgZmlndXJlIG91dCB3aGF0ICpwcmVjaXNlbHkqIEtjb25maWcgZGljdGF0ZXMgZm9yIGBDT05GSUdfTkVUX1NPQ0tfTVNHYCBhbmQgYENPTkZJR19UTFNgLlwiIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGRlZmluZWQsIHRoZWlyIGRlcGVuZGVuY2llcywgYW5kIGFueSBpbXBsaWNhdGlvbnMgdGhleSBtaWdodCBoYXZlIG9uIHRoZSBicm9hZGVyIHN5c3RlbS4gSSdtIGdvaW5nIHRvIGNvbnN1bHQgdGhlIEtjb25maWcgZmlsZXMgZGlyZWN0bHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMDM4LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTU6NTA6MTguNjg3OTEzMDI1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NzcxMzI0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVUX1NPQ0tfTVNHXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L0tjb25maWc9NDc1PWNvbmZpZyBORVRfU0VMRlRFU1RTXFxuLS1cXG5uZXQvS2NvbmZpZy00NzgtXFxubmV0L0tjb25maWc6NDc5OmNvbmZpZyBORVRfU09DS19NU0dcXG5uZXQvS2NvbmZpZy00ODAtXFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxNTo1MDoxOC43NTU2MzE5NzRaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjYyNDYwMDAzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudDogRGVjaXBoZXJpbmcgdGhlIE5FVF9TT0NLX01TRyBTZWxlY3RvcioqXG5cbkFscmlnaHQsIHNvIHRoZSBmaXJzdCB0aGluZyBJJ20gZG9pbmcgaXMgbWVudGFsbHkgdHJhY2luZyB0aGUgY29kZSBwYXRocyB0aGF0IGFyZSBnb2luZyB0byBwaWNrIHRoZSBgTkVUX1NPQ0tfTVNHYCBzZWxlY3Rvci4gV2hhdCBjb250ZXh0IGFyZSB3ZSBpbj8gSXMgaXQgYSBrZXJuZWwgbW9kdWxlPyBVc2VyLXNwYWNlIGFwcGxpY2F0aW9uPyBUaGUgaW1wbGljYXRpb25zIGFyZSB2YXN0bHkgZGlmZmVyZW50LiBJJ20gaW1tZWRpYXRlbHkgcnVubmluZyB0aHJvdWdoIHRoZSBsaWtlbHkgc2NlbmFyaW9zIGluIG15IGhlYWQ6IG5ldHdvcmsgc3RhY2sgaW50ZXJhY3Rpb25zLCBzb2NrZXQgaW1wbGVtZW50YXRpb25zLCBtZXNzYWdlIHF1ZXVpbmcsIGFuZCBzbyBvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgdGhpcyBzZWxlY3Rpb24gaXMgKmhhcHBlbmluZyogYmVmb3JlIEkgY2FuIGV2ZW4gYmVnaW4gdG8gdW5kZXJzdGFuZCAqd2h5Ki4gVGhpcyBzZWxlY3Rpb24gbWVjaGFuaXNtIOKAkyB3aGV0aGVyIGl0J3MgYW4gZXZlbnQgbG9vcCwgaW50ZXJydXB0IGhhbmRsZXIsIG9yIHNvbWUgb3RoZXIgcG9sbGluZyBzdHJhdGVneSDigJMgaXMga2V5LiBJJ20gYWxyZWFkeSBlbnZpc2lvbmluZyB0aGUgcG9zc2libGUgYm90dGxlbmVja3MgYW5kIHJhY2UgY29uZGl0aW9ucyB0aGF0IGNvdWxkIGFyaXNlIGRlcGVuZGluZyBvbiB0aGUgY2hvc2VuIGNvbnRleHQuIElzIHRoaXMgYSBuZXcgcGllY2Ugb2YgY29kZSwgb3IgYW0gSSBkZWJ1Z2dpbmcgYW4gZXhpc3Rpbmcgc3lzdGVtPyBUaGUgaW1wbGljYXRpb25zIGNoYW5nZSB0aGUgYXBwcm9hY2ggSSdsbCB0YWtlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjMyNiwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDE1OjUwOjIxLjM4MDIzNDgxNloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njg1MTE2MTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VsZWN0IE5FVF9TT0NLX01TR1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9LY29uZmlnPTM2MT1jb25maWcgQlBGX1NUUkVBTV9QQVJTRVJcXG4tLVxcbm5ldC9LY29uZmlnLTM2Ni1cXHRzZWxlY3QgU1RSRUFNX1BBUlNFUlxcbm5ldC9LY29uZmlnOjM2NzpcXHRzZWxlY3QgTkVUX1NPQ0tfTVNHXFxubmV0L0tjb25maWctMzY4LVxcdGhlbHBcXG4tLVxcbm5ldC9pcHY0L0tjb25maWc9MzgyPWNvbmZpZyBJTkVUX0VTUElOVENQXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTM4NS1cXHRzZWxlY3QgU1RSRUFNX1BBUlNFUlxcbm5ldC9pcHY0L0tjb25maWc6Mzg2OlxcdHNlbGVjdCBORVRfU09DS19NU0dcXG5uZXQvaXB2NC9LY29uZmlnLTM4Ny1cXHRzZWxlY3QgWEZSTV9FU1BJTlRDUFxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZz05MD1jb25maWcgSU5FVDZfRVNQSU5UQ1BcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctOTMtXFx0c2VsZWN0IFNUUkVBTV9QQVJTRVJcXG5uZXQvaXB2Ni9LY29uZmlnOjk0OlxcdHNlbGVjdCBORVRfU09DS19NU0dcXG5uZXQvaXB2Ni9LY29uZmlnLTk1LVxcdHNlbGVjdCBYRlJNX0VTUElOVENQXFxuLS1cXG5uZXQvdGxzL0tjb25maWc9NT1jb25maWcgVExTXFxuLS1cXG5uZXQvdGxzL0tjb25maWctMTAtXFx0c2VsZWN0IENSWVBUT19HQ01cXG5uZXQvdGxzL0tjb25maWc6MTE6XFx0c2VsZWN0IE5FVF9TT0NLX01TR1xcbm5ldC90bHMvS2NvbmZpZy0xMi1cXHRkZWZhdWx0IG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTU6NTA6MjEuNDQ4NzUzMjE1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE2OTU4Mjg0ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIGEgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmN5KipcblxuSG1tLCBzbyBgQ09ORklHX1RMU2AgYW5kIGBDT05GSUdfQlBGX1NUUkVBTV9QQVJTRVJgIGFyZSBib3RoIHB1bGxpbmcgaW4gYE5FVF9TT0NLX01TR2AuIFRoYXTigJlzIGEgYml0IHVudXN1YWw7IEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGVzZSBzZWVtaW5nbHkgZGlzcGFyYXRlIGZlYXR1cmVzIHJlcXVpcmUgdGhlIHNhbWUgdW5kZXJseWluZyBtZWNoYW5pc20uIEl0IG1lYW5zIHRoYXQgdGhlcmUncyBzb21lIGNvbW1vbiBncm91bmQgb3IgZGVwZW5kZW5jeSB0aGF0IEkgbmVlZCB0byBjbGFyaWZ5LiBJIHNob3VsZCBwcm9iYWJseSBkaXZlIGludG8gYG5ldC90bHMvS2NvbmZpZ2AgZmlyc3QuIFRoYXTigJlzIGxpa2VseSB0aGUgb3JpZ2luIG9mIHRoZSBkZXBlbmRlbmN5LCBhbmQgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IG15IGludmVzdGlnYXRpb24uIFBlcmhhcHMgaXQgd2lsbCBzaGVkIHNvbWUgbGlnaHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyODkzLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTU6NTA6MjMuMTQ0NTg0NjU5WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5MzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC90bHMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBUTFMgY29uZmlndXJhdGlvblxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0Y29uZmlnIFRMU1xcbiAgIDY6XFx0XFx0dHJpc3RhdGUgXFxcIlRyYW5zcG9ydCBMYXllciBTZWN1cml0eSBzdXBwb3J0XFxcIlxcbiAgIDc6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUXFxuICAgODpcXHRcXHRzZWxlY3QgQ1JZUFRPXFxuICAgOTpcXHRcXHRzZWxlY3QgQ1JZUFRPX0FFU1xcbiAgMTA6XFx0XFx0c2VsZWN0IENSWVBUT19HQ01cXG4gIDExOlxcdFxcdHNlbGVjdCBORVRfU09DS19NU0dcXG4gIDEyOlxcdFxcdGRlZmF1bHQgblxcbiAgMTM6XFx0XFx0aGVscFxcbiAgMTQ6XFx0XFx0RW5hYmxlIGtlcm5lbCBzdXBwb3J0IGZvciBUTFMgcHJvdG9jb2wuIFRoaXMgYWxsb3dzIHN5bW1ldHJpY1xcbiAgMTU6XFx0XFx0ZW5jcnlwdGlvbiBoYW5kbGluZyBvZiB0aGUgVExTIHByb3RvY29sIHRvIGJlIGRvbmUgaW4ta2VybmVsLlxcbiAgMTY6XFx0XFxuICAxNzpcXHRcXHRJZiB1bnN1cmUsIHNheSBOLlxcbiAgMTg6XFx0XFxuICAxOTpcXHRjb25maWcgVExTX0RFVklDRVxcbiAgMjA6XFx0XFx0Ym9vbCBcXFwiVHJhbnNwb3J0IExheWVyIFNlY3VyaXR5IEhXIG9mZmxvYWRcXFwiXFxuICAyMTpcXHRcXHRkZXBlbmRzIG9uIFRMU1xcbiAgMjI6XFx0XFx0c2VsZWN0IFNLQl9ERUNSWVBURURcXG4gIDIzOlxcdFxcdHNlbGVjdCBTT0NLX1ZBTElEQVRFX1hNSVRcXG4gIDI0OlxcdFxcdHNlbGVjdCBTT0NLX1JYX1FVRVVFX01BUFBJTkdcXG4gIDI1OlxcdFxcdGRlZmF1bHQgblxcbiAgMjY6XFx0XFx0aGVscFxcbiAgMjc6XFx0XFx0RW5hYmxlIGtlcm5lbCBzdXBwb3J0IGZvciBIVyBvZmZsb2FkIG9mIHRoZSBUTFMgcHJvdG9jb2wuXFxuICAyODpcXHRcXG4gIDI5OlxcdFxcdElmIHVuc3VyZSwgc2F5IE4uXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDE1OjUwOjIzLjE0NDY0NjMxOVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxMDk4NDU1MDQwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgaXQ6XG5cbioqRGlnZ2luZyBpbnRvIGVCUEYgYW5kIE5ldHdvcmsgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIHdlJ3JlIGxvb2tpbmcgYXQgbmV0d29yay1yZWxhdGVkIGVCUEYgZnVuY3Rpb25hbGl0eS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcuIEkndmUgYmVlbiBjb25zaWRlcmluZyB0aGlzIGZyb20gdGhlIHBlcnNwZWN0aXZlIG9mIHRoZSBicm9hZGVyIGtlcm5lbCBkZXNpZ24sIGFuZCBzbyBJIHdhbnQgdG8gbWFrZSBzdXJlIEknbSBmdWxseSBhd2FyZSBvZiBldmVyeSBvcHRpb24uXG5cblJpZ2h0LCBzbyB0byBiZSB0aG9yb3VnaCwgSSBzaG91bGQgYWxzbyBzcGVjaWZpY2FsbHkgY2hlY2sgdGhlIGBCUEZfU1RSRUFNX1BBUlNFUmAgY29uZmlndXJhdGlvbiBvcHRpb24gd2l0aGluIGBuZXQvS2NvbmZpZ2AuIFRoaXMgaXMgcHJvYmFibHkgd2hlcmUgdGhlIHJlYWxseSBmaW5lLWdyYWluZWQsIHN0cmVhbS1iYXNlZCBwYWNrZXQgaW5zcGVjdGlvbiBhbmQgbWFuaXB1bGF0aW9uIGxpdmVzLiBJIHdhbnQgdG8gbWFrZSBzdXJlIEkgY29tcGxldGVseSB1bmRlcnN0YW5kIGl0cyBjYXBhYmlsaXRpZXMgYW5kIGhvdyBpdCBtaWdodCBmaXQgaW50byB0aGUgbGFyZ2VyIHBpY3R1cmUgb2Ygb3VyIGVCUEYgd29yay4gSXQgbWlnaHQgYmUgYSBrZXkgY29tcG9uZW50LCBvciBpdCBtaWdodCBiZSB0YW5nZW50aWFsLiBFaXRoZXIgd2F5LCBiZXN0IHRvIGNvbmZpcm0uIEkgc2hvdWxkIGFkZCB0aGlzIHRvIG15IG1lbnRhbCBjaGVja2xpc3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNDM0LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxNTo1MDozNC4xMjkxOTg3NThaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzA4MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMzU1LFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzU1OlxcdFxcdGJvb2xcXG4gMzU2OlxcdFxcdHByb21wdCBcXFwiRW5hYmxlIEJ5dGUgUXVldWUgTGltaXRzXFxcIlxcbiAzNTc6XFx0XFx0ZGVwZW5kcyBvbiBTWVNGU1xcbiAzNTg6XFx0XFx0c2VsZWN0IERRTFxcbiAzNTk6XFx0XFx0ZGVmYXVsdCB5XFxuIDM2MDpcXHRcXG4gMzYxOlxcdGNvbmZpZyBCUEZfU1RSRUFNX1BBUlNFUlxcbiAzNjI6XFx0XFx0Ym9vbCBcXFwiZW5hYmxlIEJQRiBTVFJFQU1fUEFSU0VSXFxcIlxcbiAzNjM6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUXFxuIDM2NDpcXHRcXHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMXFxuIDM2NTpcXHRcXHRkZXBlbmRzIG9uIENHUk9VUF9CUEZcXG4gMzY2OlxcdFxcdHNlbGVjdCBTVFJFQU1fUEFSU0VSXFxuIDM2NzpcXHRcXHRzZWxlY3QgTkVUX1NPQ0tfTVNHXFxuIDM2ODpcXHRcXHRoZWxwXFxuIDM2OTpcXHRcXHQgIEVuYWJsaW5nIHRoaXMgYWxsb3dzIGEgVENQIHN0cmVhbSBwYXJzZXIgdG8gYmUgdXNlZCB3aXRoXFxuIDM3MDpcXHRcXHQgIEJQRl9NQVBfVFlQRV9TT0NLTUFQLlxcbiAzNzE6XFx0XFxuIDM3MjpcXHRjb25maWcgTkVUX0ZMT1dfTElNSVRcXG4gMzczOlxcdFxcdGJvb2wgXFxcIk5ldCBmbG93IGxpbWl0XFxcIlxcbiAzNzQ6XFx0XFx0ZGVwZW5kcyBvbiBSUFNcXG4gMzc1OlxcdFxcdGRlZmF1bHQgeVxcbiAzNzY6XFx0XFx0aGVscFxcbiAzNzc6XFx0XFx0ICBUaGUgbmV0d29yayBzdGFjayBoYXMgdG8gZHJvcCBwYWNrZXRzIHdoZW4gYSByZWNlaXZlIHByb2Nlc3NpbmcgQ1BVJ3NcXG4gMzc4OlxcdFxcdCAgYmFja2xvZyByZWFjaGVzIG5ldGRldl9tYXhfYmFja2xvZy4gSWYgYSBmZXcgb3V0IG9mIG1hbnkgYWN0aXZlIGZsb3dzXFxuIDM3OTpcXHRcXHQgIGdlbmVyYXRlIHRoZSB2YXN0IG1ham9yaXR5IG9mIGxvYWQsIGRyb3AgdGhlaXIgdHJhZmZpYyBlYXJsaWVyIHRvXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDE1OjUwOjM0LjEyOTI3MTQ2OFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo1NTc5NTAzMzM5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBLZXJuZWwgUGF0Y2ggZm9yIEZ1enppbmcgUHJpb3JpdGl6YXRpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoZSBmaXJzdCB0aGluZyBJJ20gZG9pbmcgaXMgZXhhbWluaW5nIHRoZSBHaXQgaGlzdG9yeSB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoZSBwYXRjaC4gSSdtIGxvb2tpbmcgZm9yIGNsdWVzIGluIHRoZSBjb21taXQgbWVzc2FnZXMgdG8gc2VlIHRoZSAqd2h5KiBiZWhpbmQgdGhpcyBjb2RlIGNoYW5nZS4gR3JlcHBpbmcgaXNuJ3QgaW1tZWRpYXRlbHkgeWllbGRpbmcgYW55dGhpbmcgZGlyZWN0bHksIGJ1dCBJIGNhbiBzZWUgdGhlIHBhdGNoIGl0c2VsZiBpcyBtb2RpZnlpbmcgYG5ldC9pcHY0L3RjcF9icGYuY2AgYW5kIGBuZXQvdGxzL3Rsc19tYWluLmNgLlxuXG5UaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIHRoZSByZW1vdmFsIG9mIHJlZHVuZGFudCBjYWxscyB0byBgdGNwX3JhdGVfY2hlY2tfYXBwX2xpbWl0ZWQoc2spYCB3aXRoaW4gdGhlIGB0Y3BfYnBmX3B1c2hgIGFuZCBgdGxzX3B1c2hfc2dgIGZ1bmN0aW9ucy4gVGhlc2UgZnVuY3Rpb25zIGFyZSBpbnZvbHZlZCBpbiBwdXNoaW5nIGRhdGEsIGluIEJQRiBhbmQgVExTIGNvbnRleHRzIHJlc3BlY3RpdmVseSwgb3ZlciBUQ1AuIFRoZSByZWR1bmRhbnQgY2hlY2ssIGlmIG5vdCByZW1vdmVkLCBjb3VsZCBoYXZlIGFmZmVjdGVkIHBlcmZvcm1hbmNlLCBjYXVzaW5nIGFuIHVubmVjZXNzYXJ5IHRocm90dGxlLlxuXG5Ob3csIEknbSB0aGlua2luZyBhYm91dCByZWFjaGFiaWxpdHkuIEFyZSB0aGVzZSBmdW5jdGlvbnMgZXhwb3NlZCB0byBmdXp6ZXI/IFllcywgYW5kIHRoYXQgaXMgdmVyeSBpbXBvcnRhbnQgdG8gY29uc2lkZXIgd2hlbiBkZWNpZGluZyBpZiB0aGlzIGlzIHdvcnRoeSBvZiBmdXp6aW5nLiBJIGNhbiBjb25maXJtIHRoZXNlIGFyZSBkZWZpbml0ZWx5IHJlYWNoYWJsZSB2aWEgc3l6a2FsbGVyLCBjb25zaWRlcmluZyBzdGFuZGFyZCBzeXprYWxsZXIgdGFyZ2V0cyBmb3Igc29ja2V0cyB3aXRoIFRMUyBVTFAsIGFzIHdlbGwgYXMgQlBGIHNvY2ttYXAvc2tfbXNnIHByb2dyYW1zLiBUaGF0IG1ha2VzIHRoaXMgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1enppbmcsIGFuZCBpdCdzIGEgZ29vZCBwbGFjZSB0byBzdGFydCwgYmFzZWQgb24gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgc3lzdGVtLlxuXG5Ob3csIEknbSBjb25zaWRlcmluZyBmdXp6aW5nIHByaW9yaXR5LiBUaGlzIGlzIGEgcmVmYWN0b3JpbmcvY2xlYW51cCB3aGVyZSByZWFjaGFibGUgY29kZSBpcyBtb2RpZmllZCwgc28gYnkgbXkgY3JpdGVyaWEgYW5kIHRoZSBcIldvcnRoRnV6emluZ1wiIGd1aWRlbGluZXMsIHRoaXMgaXMgYSBkZWZpbml0ZSBcInRydWVcIi4gVGhlIHJlbW92YWwgb2YgdGhlIGB0Y3BfcmF0ZV9jaGVja19hcHBfbGltaXRlZCgpYCBjYWxscywgd2hpbGUgc2VlbWluZ2x5IG1pbm9yLCBjb3VsZCBwb3RlbnRpYWxseSBhbHRlciB0aW1pbmcgb3IgaW50cm9kdWNlIHN1YnRsZSBiZWhhdmlvcmFsIGNoYW5nZXMgdGhhdCBtaWdodCB1bmNvdmVyIGEgYnVnLlxuXG5OZXh0LCBJJ20gaWRlbnRpZnlpbmcgdGhlIG1vc3QgcmVsZXZhbnQgc3ltYm9scyB0byB0YXJnZXQgd2l0aCB0aGUgZnV6emVyLiBNeSBmb2N1cyBpcyBvbiBlbnRyeSBwb2ludHMgYW5kIHRoZSBmdW5jdGlvbnMgdGhhdCBhcmUgZGlyZWN0bHkgbW9kaWZpZWQuIExldCdzIHNlZS4uLlxuKiAgIGB0Y3BfYnBmX3B1c2hgOiBBbHRob3VnaCBpdCBpcyBhIHN0YXRpYyBmdW5jdGlvbiwgSSdsbCBjaGVjayBpdHMgY2FsbGVycyBhbmQgc2VlIGlmIGl0IGNhbiBiZSB0YXJnZXRlZC4gSWYgbm90IGlubGluZWQsIGl0IG1heSBoYXZlIGEgc3ltYm9sLCBidXQgSSB3aWxsIHN0aWxsIHRhcmdldCB0aGUgZnVuY3Rpb25zIHRoYXQgY2FsbCBpdC5cbiogICBgdGxzX3B1c2hfc2dgOiBUaGlzIGxvb2tzIGxpa2UgYW4gZXhjZWxsZW50IGNhbmRpZGF0ZSBzaW5jZSBpdCdzIGRpcmVjdGx5IG1vZGlmaWVkLCBub24tc3RhdGljLCBhbmQgcGFydCBvZiB0aGUgbWFpbiBjaGFuZ2UuXG4qICAgYHRjcF9icGZfc2VuZG1zZ2A6IFRoaXMgaXMgYSBub24tc3RhdGljIGNhbGxlciBvZiB0aGUgbW9kaWZpZWQgYHRjcF9icGZfcHVzaGAuXG4qICAgYHRjcF9icGZfc2VuZG1zZ19yZWRpcmA6IFRoaXMgaXMgYWxzbyBhIG5vbi1zdGF0aWMgY2FsbGVyIG9mIHRoZSBtb2RpZmllZCBgdGNwX2JwZl9wdXNoYC5cblxuQW5kIEknbGwgYWRkIGB0bHNfdHhfcmVjb3Jkc2Agb3IgYHRsc19zd19zZW5kbXNnYCB0byBteSBzeW1ib2wgbGlzdCBhcyB3ZWxsLlxuXG5GaW5hbGx5LCBJIG5lZWQgdG8gbG9vayBhdCB0aGUgcmVxdWlyZWQga2VybmVsIGNvbmZpZ3VyYXRpb25zLiBUbyBjb21waWxlIHRoZSBjb2RlLCBgTkVUX1NPQ0tfTVNHYCBpcyByZXF1aXJlZCwgd2hpY2ggaXMgZW5hYmxlZCBieSBgQlBGX1NUUkVBTV9QQVJTRVJgLCBgSU5FVF9FU1BJTlRDUGAsIGBJTkVUNl9FU1BJTlRDUGAsIGFuZCBgVExTYC4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhlc2UgYXJlIGFjdGl2ZSB0byByZXByb2R1Y2UgdGhlIHRhcmdldCBmdW5jdGlvbmFsaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDAyNSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3NDksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxNTo1MToyOS45MjQzMDc0MjRaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3Mzg2NDA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIk5FVF9TT0NLX01TR1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9LY29uZmlnPTM2MT1jb25maWcgQlBGX1NUUkVBTV9QQVJTRVJcXG4tLVxcbm5ldC9LY29uZmlnLTM2Ni1cXHRzZWxlY3QgU1RSRUFNX1BBUlNFUlxcbm5ldC9LY29uZmlnOjM2NzpcXHRzZWxlY3QgTkVUX1NPQ0tfTVNHXFxubmV0L0tjb25maWctMzY4LVxcdGhlbHBcXG4tLVxcbm5ldC9LY29uZmlnPTQ3NT1jb25maWcgTkVUX1NFTEZURVNUU1xcbi0tXFxubmV0L0tjb25maWctNDc4LVxcbm5ldC9LY29uZmlnOjQ3OTpjb25maWcgTkVUX1NPQ0tfTVNHXFxubmV0L0tjb25maWctNDgwLVxcdGJvb2xcXG4tLVxcbm5ldC9LY29uZmlnLTQ4Mi1cXHRoZWxwXFxubmV0L0tjb25maWc6NDgzOlxcdCAgVGhlIE5FVF9TT0NLX01TRyBwcm92aWRlcyBhIGZyYW1ld29yayBmb3IgcGxhaW4gc29ja2V0cyAoZS5nLiBUQ1ApIG9yXFxubmV0L0tjb25maWctNDg0LVxcdCAgVUxQcyAodXBwZXIgbGF5ZXIgbW9kdWxlcywgZS5nLiBUTFMpIHRvIHByb2Nlc3MgTDcgYXBwbGljYXRpb24gZGF0YVxcbi0tXFxubmV0L2NvcmUvTWFrZWZpbGU9NDM9b2JqLSQoQ09ORklHX0ZBSUxPVkVSKSArPSBmYWlsb3Zlci5vXFxubmV0L2NvcmUvTWFrZWZpbGU6NDQ6b2JqLSQoQ09ORklHX05FVF9TT0NLX01TRykgKz0gc2ttc2cub1xcbm5ldC9jb3JlL01ha2VmaWxlLTQ1LW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gc29ja19tYXAub1xcbi0tXFxubmV0L2lwdjQvS2NvbmZpZz0zODI9Y29uZmlnIElORVRfRVNQSU5UQ1BcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctMzg1LVxcdHNlbGVjdCBTVFJFQU1fUEFSU0VSXFxubmV0L2lwdjQvS2NvbmZpZzozODY6XFx0c2VsZWN0IE5FVF9TT0NLX01TR1xcbm5ldC9pcHY0L0tjb25maWctMzg3LVxcdHNlbGVjdCBYRlJNX0VTUElOVENQXFxuLS1cXG5uZXQvaXB2NC9NYWtlZmlsZT02Mj1vYmotJChDT05GSUdfVENQX0NPTkdfSUxMSU5PSVMpICs9IHRjcF9pbGxpbm9pcy5vXFxubmV0L2lwdjQvTWFrZWZpbGU6NjM6b2JqLSQoQ09ORklHX05FVF9TT0NLX01TRykgKz0gdGNwX2JwZi5vXFxubmV0L2lwdjQvTWFrZWZpbGUtNjQtb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSB1ZHBfYnBmLm9cXG4tLVxcbm5ldC9pcHY2L0tjb25maWc9OTA9Y29uZmlnIElORVQ2X0VTUElOVENQXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTkzLVxcdHNlbGVjdCBTVFJFQU1fUEFSU0VSXFxubmV0L2lwdjYvS2NvbmZpZzo5NDpcXHRzZWxlY3QgTkVUX1NPQ0tfTVNHXFxubmV0L2lwdjYvS2NvbmZpZy05NS1cXHRzZWxlY3QgWEZSTV9FU1BJTlRDUFxcbi0tXFxubmV0L3Rscy9LY29uZmlnPTU9Y29uZmlnIFRMU1xcbi0tXFxubmV0L3Rscy9LY29uZmlnLTEwLVxcdHNlbGVjdCBDUllQVE9fR0NNXFxubmV0L3Rscy9LY29uZmlnOjExOlxcdHNlbGVjdCBORVRfU09DS19NU0dcXG5uZXQvdGxzL0tjb25maWctMTItXFx0ZGVmYXVsdCBuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDE1OjUxOjI5Ljk5MTcwMTE4M1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo2OTc2MzY0MjEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgcHJvY2VzcywgdGhpbmtpbmcgYXMgaWYgSSdtIG5hdmlnYXRpbmcgdGhpcyBteXNlbGY6XG5cbioqRGl2aW5nIGludG8gYG5ldC90bHMvTWFrZWZpbGVgKipcblxuT2theSwgc28gSSBuZWVkIHRvIGNoZWNrIG91dCBgbmV0L3Rscy9NYWtlZmlsZWAuIFRoaXMgbGlrZWx5IG1lYW5zIEknbSB3b3JraW5nIHdpdGggdGhlIFRMUyBpbXBsZW1lbnRhdGlvbiB3aXRoaW4gdGhpcyBuZXR3b3JrIGNvbnRleHQuIEknbSBwcm9iYWJseSBsb29raW5nIGZvciBidWlsZCBpbnN0cnVjdGlvbnMsIGRlcGVuZGVuY2llcywgb3IgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gVExTLiBNeSBpbnR1aXRpb24gdGVsbHMgbWUgdGhhdCB0aGlzIE1ha2VmaWxlIGlzIGEgY2VudHJhbCBwb2ludCBmb3IgbWFuYWdpbmcgdGhlIGNvbXBpbGF0aW9uIGFuZCBsaW5raW5nIG9mIFRMUy1yZWxhdGVkIGNvZGUgd2l0aGluIHRoaXMgcHJvamVjdCwgYXNzdW1pbmcgdGhpcyBpcyBhIHByb2plY3QgZm9sbG93aW5nIGNvbnZlbnRpb25hbCBtYWtlZmlsZSBzdHJ1Y3R1cmVzLiBJJ2xsIG5lZWQgdG8gc2VlIGhvdyBpdCBpbnRlZ3JhdGVzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIGJ1aWxkIHN5c3RlbS4gQXJlIHRoZXJlIHNwZWNpZmljIGNvbXBpbGVyIGZsYWdzIGRlZmluZWQ/IEFyZSB0aGVyZSBhbnkgY3VzdG9tIGxpbmtpbmcgc3RlcHM/IEl04oCZcyBhbHNvIHBvc3NpYmxlIEkgYW0gZGVidWdnaW5nLCBhbmQgdGh1cyBuZWVkIHRvIGV4YW1pbmUgc3BlY2lmaWMgdGFyZ2V0cyBvciB2YXJpYWJsZXMsIHBlcmhhcHMgcmVsYXRlZCB0byBkZWJ1ZyBmbGFncy4gSSdsbCBuZWVkIHRvIHF1aWNrbHkgZ2V0IGEgc2Vuc2Ugb2YgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlIGFuZCBsb2dpYyB0byB1bmRlcnN0YW5kIHdoYXQncyBnb2luZyBvbiBoZXJlLiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZGlnIHVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODA4OSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDE1OjUxOjM2Ljk2ODA2ODc0NloiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NDMyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvdGxzL01ha2VmaWxlXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIE1ha2VmaWxlIGZvciB0aGUgVExTIHN1YnN5c3RlbS5cXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0Q0ZMQUdTX3RyYWNlLm8gOj0gLUkkKHNyYylcXG4gICA3OlxcdFxcbiAgIDg6XFx0b2JqLSQoQ09ORklHX1RMUykgKz0gdGxzLm9cXG4gICA5OlxcdFxcbiAgMTA6XFx0dGxzLXkgOj0gdGxzX21haW4ubyB0bHNfc3cubyB0bHNfcHJvYy5vIHRyYWNlLm8gdGxzX3N0cnAub1xcbiAgMTE6XFx0XFxuICAxMjpcXHR0bHMtJChDT05GSUdfVExTX0RFVklDRSkgKz0gdGxzX2RldmljZS5vIHRsc19kZXZpY2VfZmFsbGJhY2sub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxNTo1MTozNi45NjgxNTUyNDZaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6OTg0NDc4NDYzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBLZXJuZWwgVExTIGFuZCBCUEYgU29ja21hcCBJbnRlZ3JhdGlvbiBmb3IgRnV6emluZyoqXG5cbk9rYXksIHNvIGhlcmUncyB0aGUgYnJlYWtkb3duIG9mIHdoYXQgSSd2ZSBqdXN0IGJlZW4gd29ya2luZyB0aHJvdWdoLiBNeSBwcmltYXJ5IGdvYWwgaGVyZSBpcyB0byB1bmRlcnN0YW5kIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbnMgYW5kIGNvZGUgcGF0aHMgcmVsZXZhbnQgdG8gVENQIEJQRiBzb2NrbWFwIGFuZCBLZXJuZWwgVExTLCBpbiBvcmRlciB0byBkZXRlcm1pbmUgYSBnb29kIGZ1enplciBjb25maWd1cmF0aW9uLlxuXG5GaXJzdCwgYENPTkZJR19UTFNgIGlzIGNyaXRpY2FsLiBJdCBjb21waWxlcyBgdGxzLm9gLCB3aGljaCBpbmNsdWRlcyBgdGxzX21haW4ub2AuIENydWNpYWxseSwgYENPTkZJR19UTFNgIGRlcGVuZHMgb24gYENPTkZJR19JTkVUYCwgd2hpY2ggaXMgZXhwZWN0ZWQuIEFsc28sIGBDT05GSUdfVExTYCBhdXRvbWF0aWNhbGx5IHNlbGVjdHMgYENPTkZJR19ORVRfU09DS19NU0dgLCBhbmQgdGhhdOKAmXMgaW1wb3J0YW50IGJlY2F1c2UgaXQgYnVpbGRzIGB0Y3BfYnBmLm9gLlxuXG5Ob3csIGlmIHdlIHdhbnQgdG8gdXNlIEJQRiBzb2NrbWFwIHdpdGggVENQLCB3ZSdyZSBnb2luZyB0byBuZWVkIGBDT05GSUdfQlBGX1NZU0NBTExgIGFuZCBgQ09ORklHX0JQRl9TVFJFQU1fUEFSU0VSYC4gYENPTkZJR19CUEZfU1RSRUFNX1BBUlNFUmAgYWxzbyBpbXBsaWNpdGx5IHNlbGVjdHMgYE5FVF9TT0NLX01TR2AuXG5cbk15IGltbWVkaWF0ZSBjb25jbHVzaW9uIGlzIHRoYXQgZW5hYmxpbmcgYFRMU2AgYW5kIGBCUEZfU1RSRUFNX1BBUlNFUmAgYWxvbmdzaWRlIGBCUEZfU1lTQ0FMTGAsIGBORVRfU09DS19NU0dgLCBhbmQgYElORVRgIGd1YXJhbnRlZXMgdGhhdCBib3RoIGB0Y3BfYnBmLmNgIGFuZCBgdGxzX21haW4uY2AgYXJlIGNvbXBpbGVkIGFuZCBhdmFpbGFibGUuIEkgbmVlZCB0byBtYWtlIHN1cmUgYENPTkZJR19UTFNgIGNhbiBiZSBzZXQgdG8gZWl0aGVyIGJ1aWx0LWluIG9yIGEgbW9kdWxlIHNpbmNlIFN5emthbGxlciBydW5zIGtlcm5lbHMgd2l0aCBlaXRoZXIgb2YgdGhvc2Ugc2V0dGluZ3MuXG5cbkxldCdzIHN1bW1hcml6ZSB0aGUga2V5IGNvbmZpZ3VyYXRpb25zOlxuLSAgIGBUTFNgOiBCdWlsZHMgYG5ldC90bHMvdGxzX21haW4uY2AgYW5kIHNlbGVjdHMgYE5FVF9TT0NLX01TR2AuXG4tICAgYE5FVF9TT0NLX01TR2A6IEJ1aWxkcyBgbmV0L2lwdjQvdGNwX2JwZi5jYCAoc2VsZWN0ZWQgYnkgYFRMU2AgYW5kIGBCUEZfU1RSRUFNX1BBUlNFUmAgYnV0IGNhbiBhbHNvIGJlIGV4cGxpY2l0bHkgc3BlY2lmaWVkKS5cbi0gICBgQlBGX1NZU0NBTExgOiBFc3NlbnRpYWwgZm9yIHV0aWxpemluZyBgdGNwX2JwZmAgc29ja21hcCBmdW5jdGlvbmFsaXR5LlxuLSAgIGBCUEZfU1RSRUFNX1BBUlNFUmA6IEVuYWJsZXMgdGhlIEJQRiBzdHJlYW0gcGFyc2VyIHNvY2ttYXAuXG5cbkkndmUgYWxzbyBjb25maXJtZWQgdGhhdCBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBlc3NlbnRpYWwgZm9yIGhvb2tpbmcgYHRjcF9icGZfdXBkYXRlX3Byb3RvYCBpbnRvIHRoZSBzb2NrZXQsIHNwZWNpZmljYWxseSB2aWEgYSBjaGVjayBpbiBgdGNwX2JwZi5jYCB0aGF0IHNob3dzIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIHJlcXVpcmVkIGZvciBhdHRhY2hpbmcgdGhlIHBzb2NrIGFuZCB1c2luZyBgdGNwX2JwZmAgZnVuY3Rpb25hbGl0eS4gV2l0aG91dCBpdCwgdGhlIG9wZXJhdGlvbnMgZnJvbSBgdGNwX2JwZmAgYXJlIG5vdCB1c2VkIGJ5IHRoZSBzb2NrbWFwLlxuXG5UbyByZWNhcCwgdGhlIGNvcmUgY29uZmlndXJhdGlvbnMgSSdsbCB3YW50IHRvIHRhcmdldCBhcmU6XG5cbiogICBgVExTYFxuKiAgIGBCUEZfU1lTQ0FMTGBcbiogICBgQlBGX1NUUkVBTV9QQVJTRVJgXG4qICAgYE5FVF9TT0NLX01TR2BcblxuTXkgbmV4dCB0aG91Z2h0IHByb2Nlc3MgaW52b2x2ZXMgY29uc2lkZXJpbmcgcG90ZW50aWFsIGZvY3VzIHN5bWJvbHMuIEkndmUgbm90ZWQgZG93biB0aGUgZm9sbG93aW5nIGZ1bmN0aW9ucyB0byBjb25zaWRlciBmb3IgbW9yZSBjYXJlZnVsIGludmVzdGlnYXRpb246XG5cbiogICBgdGNwX2JwZl9wdXNoYFxuKiAgIGB0Y3BfYnBmX3NlbmRtc2dgXG4qICAgYHRjcF9icGZfc2VuZG1zZ19yZWRpcmBcbiogICBgdGxzX3B1c2hfc2dgXG4qICAgYHRsc190eF9yZWNvcmRzYFxuKiAgIGB0bHNfcHVzaF9wYXJ0aWFsX3JlY29yZGBcblxuVXBvbiBhIGNhcmVmdWwgcmV2aWV3LCBJJ3ZlIGNvbmZpcm1lZCB0aGF0IG5vbmUgb2YgdGhlc2UgYXJlIGNvbnNpZGVyZWQgYXMgdWJpcXVpdG91cyBsaWZlY3ljbGUgZnVuY3Rpb25zIGFuZCB0aGV5IGFyZSBhbGwgc3BlY2lmaWMgdG8gVENQIEJQRiBzdHJlYW0gaGFuZGxpbmcgYW5kIHRoZSBLZXJuZWwgVExTIHRyYW5zbWl0IHBhdGguXG5cbkZpbmFsbHksIEkndmUgcmV2aWV3ZWQgdGhlIHJlYXNvbmluZyBiZWhpbmQgdGhlIGNoYW5nZXMgdG8gbWFrZSBzdXJlIEkgY2xlYXJseSB1bmRlcnN0YW5kIHRoZSBpbnRlbnQuIFRoZSBwYXRjaCByZW1vdmVzIHJlZHVuZGFudCBjYWxscyB0byBgdGNwX3JhdGVfY2hlY2tfYXBwX2xpbWl0ZWQoKWAgZnJvbSBgdGNwX2JwZl9wdXNoYCBpbiBgbmV0L2lwdjQvdGNwX2JwZi5jYCBhbmQgYHRsc19wdXNoX3NnYCBpbiBgbmV0L3Rscy90bHNfbWFpbi5jYC4gYHRjcF9zZW5kbXNnX2xvY2tlZCgpYCBpcyBhbHJlYWR5IGludGVybmFsbHkgcGVyZm9ybWluZyB0aGlzIHJhdGUgY2hlY2suIFRoZXNlIGNoYW5nZXMgbW9kaWZ5IGV4ZWN1dGlvbiBwYXRocyBpbiBjb3JlIFRDUCBCUEYgYW5kIFRMUyBuZXR3b3JraW5nLCB3aGljaCBhcmUgYWNjZXNzZWQgZnJvbSB1c2Vyc3BhY2UgdmlhIFRDUCBzb2NrZXRzIHdpdGggVExTIFVMUCBvciBCUEYgc29ja21hcC4gVGhlIGZ1enppbmcgYXBwcm9hY2ggaXMgZnVsbHkganVzdGlmaWVkIHRvIGVuc3VyZSB0aGF0IHJlbW92aW5nIHRoZXNlIGNhbGxzIGRvZXMgbm90IGFmZmVjdCByYXRlIGNoZWNrIHN0YXRlIGhhbmRsaW5nIG9yIHNvY2tldCBiZWhhdmlvciBkdXJpbmcgdHJhbnNtaXNzaW9uLlxuXG5JJ20gY29uZmlkZW50IGluIG15IGFuYWx5c2lzLiBJdCBhbGlnbnMgd2l0aCB0aGUgaW5zdHJ1Y3Rpb25zLCBhbmQgSSdtIHJlYWR5IHRvIHByb2NlZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NTEyLCJPdXRwdXRUb2tlbnMiOjI0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg2NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDE1OjUxOjQ2LjgxMjk0MjI5MVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxMjkyNjQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUTFNcIixcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJCUEZfU1RSRUFNX1BBUlNFUlwiLFxuICAgIFwiTkVUX1NPQ0tfTVNHXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGxzX3B1c2hfc2dcIixcbiAgICBcInRsc190eF9yZWNvcmRzXCIsXG4gICAgXCJ0bHNfcHVzaF9wYXJ0aWFsX3JlY29yZFwiLFxuICAgIFwidGNwX2JwZl9wdXNoXCIsXG4gICAgXCJ0Y3BfYnBmX3NlbmRtc2dcIixcbiAgICBcInRjcF9icGZfc2VuZG1zZ19yZWRpclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlbW92ZXMgcmVkdW5kYW50IGNhbGxzIHRvIHRjcF9yYXRlX2NoZWNrX2FwcF9saW1pdGVkKCkgZnJvbSB0Y3BfYnBmX3B1c2goKSBpbiBuZXQvaXB2NC90Y3BfYnBmLmMgYW5kIHRsc19wdXNoX3NnKCkgaW4gbmV0L3Rscy90bHNfbWFpbi5jLCBiZWNhdXNlIHRjcF9zZW5kbXNnX2xvY2tlZCgpIGFscmVhZHkgaW52b2tlcyB0Y3BfcmF0ZV9jaGVja19hcHBfbGltaXRlZCgpLiBUaGUgbW9kaWZpY2F0aW9ucyBhZmZlY3QgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlIHBhdGhzIGluIHRoZSBUQ1AgQlBGIGFuZCBUTFMgVUxQIHRyYW5zbWl0IHBpcGVsaW5lcy4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIHVuZXhwZWN0ZWQgc2lkZSBlZmZlY3RzIG9jY3VyIGluIFRDUCByYXRlIGxpbWl0aW5nIGFuZCB0cmFuc21pc3Npb24gbG9naWMgd2hlbiBzZW5kaW5nIGRhdGEgb3ZlciBUTFMgb3IgQlBGIHJlZGlyZWN0ZWQgc29ja2V0cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUTFNcIixcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJCUEZfU1RSRUFNX1BBUlNFUlwiLFxuICAgIFwiTkVUX1NPQ0tfTVNHXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGxzX3B1c2hfc2dcIixcbiAgICBcInRsc190eF9yZWNvcmRzXCIsXG4gICAgXCJ0bHNfcHVzaF9wYXJ0aWFsX3JlY29yZFwiLFxuICAgIFwidGNwX2JwZl9wdXNoXCIsXG4gICAgXCJ0Y3BfYnBmX3NlbmRtc2dcIixcbiAgICBcInRjcF9icGZfc2VuZG1zZ19yZWRpclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlbW92ZXMgcmVkdW5kYW50IGNhbGxzIHRvIHRjcF9yYXRlX2NoZWNrX2FwcF9saW1pdGVkKCkgZnJvbSB0Y3BfYnBmX3B1c2goKSBpbiBuZXQvaXB2NC90Y3BfYnBmLmMgYW5kIHRsc19wdXNoX3NnKCkgaW4gbmV0L3Rscy90bHNfbWFpbi5jLCBiZWNhdXNlIHRjcF9zZW5kbXNnX2xvY2tlZCgpIGFscmVhZHkgaW52b2tlcyB0Y3BfcmF0ZV9jaGVja19hcHBfbGltaXRlZCgpLiBUaGUgbW9kaWZpY2F0aW9ucyBhZmZlY3QgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlIHBhdGhzIGluIHRoZSBUQ1AgQlBGIGFuZCBUTFMgVUxQIHRyYW5zbWl0IHBpcGVsaW5lcy4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIHVuZXhwZWN0ZWQgc2lkZSBlZmZlY3RzIG9jY3VyIGluIFRDUCByYXRlIGxpbWl0aW5nIGFuZCB0cmFuc21pc3Npb24gbG9naWMgd2hlbiBzZW5kaW5nIGRhdGEgb3ZlciBUTFMgb3IgQlBGIHJlZGlyZWN0ZWQgc29ja2V0cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTU6NTE6NDYuODk0MjQzNDQ4WiIsIlNlcSI6MjgsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDQ0NzM1MTMxNDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxNTo1MTo0Ni44OTQ3MjE1MjhaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxNDQ0NzMwMjk4OTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlbW92ZXMgcmVkdW5kYW50IGNhbGxzIHRvIHRjcF9yYXRlX2NoZWNrX2FwcF9saW1pdGVkKHNrKSBmcm9tIHRjcF9icGZfcHVzaCgpIGluIG5ldC9pcHY0L3RjcF9icGYuYyBhbmQgdGxzX3B1c2hfc2coKSBpbiBuZXQvdGxzL3Rsc19tYWluLmMuIEluIGJvdGggY2FzZXMsIHRjcF9zZW5kbXNnX2xvY2tlZCgpIGlzIGNhbGxlZCBpbW1lZGlhdGVseSBmb2xsb3dpbmcgYW5kIGFscmVhZHkgaW52b2tlcyB0Y3BfcmF0ZV9jaGVja19hcHBfbGltaXRlZChzaykuXFxuXFxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24sIGJ1ZmZlciBsZW5ndGhzLCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgY29weWluZyB0byB1c2VyIHNwYWNlLiBUaGVyZSBpcyBubyByaXNrIG9mIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnksIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGZpZWxkcywgb3IgY2F1c2luZyBpbmZvcm1hdGlvbiBsZWFrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhNWRlZDA4NDRiZTU2OTRiNmIyMDI1MDdhZDY1MTRiODQxM2FjYWIzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgMTUgMTU6MDE6MDkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfYnBmLmMgYi9uZXQvaXB2NC90Y3BfYnBmLmNcbmluZGV4IDJlMjM0ZDE1NWI1ZTYuLmQ1ZmNmM2NlNDg2MWEgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC90Y3BfYnBmLmNcbisrKyBiL25ldC9pcHY0L3RjcF9icGYuY1xuQEAgLTEwOCw3ICsxMDgsNiBAQCBzdGF0aWMgaW50IHRjcF9icGZfcHVzaChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19tc2cgKm1zZywgdTMyIGFwcGx5X2J5dGVzLFxuIFx0XHRvZmYgID0gc2dlLVx1MDAzZW9mZnNldDtcbiBcdFx0cGFnZSA9IHNnX3BhZ2Uoc2dlKTtcbiBcbi1cdFx0dGNwX3JhdGVfY2hlY2tfYXBwX2xpbWl0ZWQoc2spO1xuIHJldHJ5OlxuIFx0XHRtc2doZHIubXNnX2ZsYWdzID0gZmxhZ3MgfCBNU0dfU1BMSUNFX1BBR0VTO1xuIFx0XHRoYXNfdHhfdWxwID0gdGxzX3N3X2hhc19jdHhfdHgoc2spO1xuZGlmZiAtLWdpdCBhL25ldC90bHMvdGxzX21haW4uYyBiL25ldC90bHMvdGxzX21haW4uY1xuaW5kZXggZmJiMjc0Mjg3YWE1Zi4uOGJkYjc4NzE4YThkNCAxMDA2NDRcbi0tLSBhL25ldC90bHMvdGxzX21haW4uY1xuKysrIGIvbmV0L3Rscy90bHNfbWFpbi5jXG5AQCAtMTg1LDggKzE4NSw2IEBAIGludCB0bHNfcHVzaF9zZyhzdHJ1Y3Qgc29jayAqc2ssXG4gXG4gXHRjdHgtXHUwMDNlc3BsaWNpbmdfcGFnZXMgPSB0cnVlO1xuIFx0d2hpbGUgKDEpIHtcbi1cdFx0LyogaXMgc2VuZGluZyBhcHBsaWNhdGlvbi1saW1pdGVkPyAqL1xuLVx0XHR0Y3BfcmF0ZV9jaGVja19hcHBfbGltaXRlZChzayk7XG4gXHRcdHAgPSBzZ19wYWdlKHNnKTtcbiByZXRyeTpcbiBcdFx0YnZlY19zZXRfcGFnZShcdTAwMjZidmVjLCBwLCBzaXplLCBvZmZzZXQpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTU6NTE6NDYuODk0NzIzMDc4WiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjg4MzA2MDc4OTA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2ggU2VyaWVzIGZvciBLTVNBTiBGdXp6aW5nIE5lZWRzKipcblxuT2theSwgc28gdGhlIHVzZXIgd2FudHMgbWUgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgcGF0Y2ggc2VyaWVzIG5lY2Vzc2l0YXRlcyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0bywgb2YgY291cnNlLCBkaXZlIHN0cmFpZ2h0IGludG8gdGhlIGRpZmYgcHJvdmlkZWQuIExldCdzIHNlZS4uLiBpdCBsb29rcyBsaWtlIGB0Y3BfcmF0ZV9jaGVja19hcHBfbGltaXRlZChzaylgIHdhcyByZW1vdmVkIGZyb20gdHdvIGxvY2F0aW9uczogYG5ldC9pcHY0L3RjcF9icGYuY2AgYW5kIGBuZXQvdGxzL3Rsc19tYWluLmNgLiBIbW0sIHRoYXQncyBpbnRlcmVzdGluZy5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIGdldCBhIGNsZWFyZXIgcGljdHVyZS4gSSBuZWVkIHRvIHJlYWQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gYm90aCB0aG9zZSBmaWxlcyB0byB1bmRlcnN0YW5kIHRoZSAqd2h5KiBiZWhpbmQgdGhpcyByZW1vdmFsLiBXaGF0IHdhcyBgdGNwX3JhdGVfY2hlY2tfYXBwX2xpbWl0ZWQoc2spYCBkb2luZyBpbiB0aGUgZmlyc3QgcGxhY2U/IFdhcyBpdCBhIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbj8gQSBjb3JyZWN0bmVzcyBjaGVjaz8gQW5kIGlzIHRoZXJlIGEgY2xlYXIgcmVwbGFjZW1lbnQsIG9yIGhhcyB0aGUgbG9naWMgYmVlbiBtb3ZlZCBlbHNld2hlcmU/IEkgbmVlZCBjb250ZXh0LlxuXG5GaW5hbGx5LCBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIEdpdCBoaXN0b3J5LiBJIHdhbnQgdG8ga25vdyB0aGUgY29tbWl0IG1lc3NhZ2UgYXNzb2NpYXRlZCB3aXRoIHRoaXMgY2hhbmdlLiBJdCBzaG91bGQgY2xhcmlmeSB0aGUgcmF0aW9uYWxlIGZvciB0aGlzIHJlbW92YWwuIFRoYXQgY29udGV4dCB3aWxsIHRlbGwgbWUgd2hldGhlciB0aGlzIGNoYW5nZSB0b3VjaGVzIG1lbW9yeSBtYW5hZ2VtZW50IGluIGEgd2F5IHRoYXQgaXMgbGlrZWx5IHRvIHRyaWdnZXIgS01TQU4gaXNzdWVzLiBJdCB3aWxsIHRoZW4gdGVsbCBtZSBpZiB0aGVyZSdzIGEgbmVlZCB0byBhZGQgYSBkZWRpY2F0ZWQgZnV6emluZyBzZXNzaW9uLCBvciBpZiB0aGlzIGNoYW5nZSBpcyByZWxhdGl2ZWx5IGJlbmlnbi4gVW5kZXJzdGFuZGluZyB0aGUgY29tbWl0IG1lc3NhZ2Ugd2lsbCBiZSBrZXkgdG8gbXkgZmluYWwgZGV0ZXJtaW5hdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI4NywiT3V0cHV0VG9rZW5zIjoxMDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MjYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxNTo1MzoxNS4yMDA4MDQ0ODRaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzM5ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvdGNwX2JwZi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDk1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDk1OlxcdFxcdGJvb2wgYXBwbHkgPSBhcHBseV9ieXRlcztcXG4gIDk2OlxcdFxcdHN0cnVjdCBzY2F0dGVybGlzdCAqc2dlO1xcbiAgOTc6XFx0XFx0c3RydWN0IHBhZ2UgKnBhZ2U7XFxuICA5ODpcXHRcXHRpbnQgc2l6ZSwgcmV0ID0gMDtcXG4gIDk5OlxcdFxcdHUzMiBvZmY7XFxuIDEwMDpcXHRcXG4gMTAxOlxcdFxcdHdoaWxlICgxKSB7XFxuIDEwMjpcXHRcXHRcXHRzdHJ1Y3QgYmlvX3ZlYyBidmVjO1xcbiAxMDM6XFx0XFx0XFx0Ym9vbCBoYXNfdHhfdWxwO1xcbiAxMDQ6XFx0XFxuIDEwNTpcXHRcXHRcXHRzZ2UgPSBza19tc2dfZWxlbShtc2csIG1zZy1cXHUwMDNlc2cuc3RhcnQpO1xcbiAxMDY6XFx0XFx0XFx0c2l6ZSA9IChhcHBseSBcXHUwMDI2XFx1MDAyNiBhcHBseV9ieXRlcyBcXHUwMDNjIHNnZS1cXHUwMDNlbGVuZ3RoKSA/XFxuIDEwNzpcXHRcXHRcXHRcXHRhcHBseV9ieXRlcyA6IHNnZS1cXHUwMDNlbGVuZ3RoO1xcbiAxMDg6XFx0XFx0XFx0b2ZmICA9IHNnZS1cXHUwMDNlb2Zmc2V0O1xcbiAxMDk6XFx0XFx0XFx0cGFnZSA9IHNnX3BhZ2Uoc2dlKTtcXG4gMTEwOlxcdFxcbiAxMTE6XFx0cmV0cnk6XFxuIDExMjpcXHRcXHRcXHRtc2doZHIubXNnX2ZsYWdzID0gZmxhZ3MgfCBNU0dfU1BMSUNFX1BBR0VTO1xcbiAxMTM6XFx0XFx0XFx0aGFzX3R4X3VscCA9IHRsc19zd19oYXNfY3R4X3R4KHNrKTtcXG4gMTE0OlxcdFxcdFxcdGlmIChoYXNfdHhfdWxwKVxcbiAxMTU6XFx0XFx0XFx0XFx0bXNnaGRyLm1zZ19mbGFncyB8PSBNU0dfU0VORFBBR0VfTk9QT0xJQ1k7XFxuIDExNjpcXHRcXG4gMTE3OlxcdFxcdFxcdGlmIChzaXplIFxcdTAwM2Mgc2dlLVxcdTAwM2VsZW5ndGggXFx1MDAyNlxcdTAwMjYgbXNnLVxcdTAwM2VzZy5zdGFydCAhPSBtc2ctXFx1MDAzZXNnLmVuZClcXG4gMTE4OlxcdFxcdFxcdFxcdG1zZ2hkci5tc2dfZmxhZ3MgfD0gTVNHX01PUkU7XFxuIDExOTpcXHRcXG4gMTIwOlxcdFxcdFxcdGJ2ZWNfc2V0X3BhZ2UoXFx1MDAyNmJ2ZWMsIHBhZ2UsIHNpemUsIG9mZik7XFxuIDEyMTpcXHRcXHRcXHRpb3ZfaXRlcl9idmVjKFxcdTAwMjZtc2doZHIubXNnX2l0ZXIsIElURVJfU09VUkNFLCBcXHUwMDI2YnZlYywgMSwgc2l6ZSk7XFxuIDEyMjpcXHRcXHRcXHRyZXQgPSB0Y3Bfc2VuZG1zZ19sb2NrZWQoc2ssIFxcdTAwMjZtc2doZHIsIHNpemUpO1xcbiAxMjM6XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjPSAwKVxcbiAxMjQ6XFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gMTI1OlxcdFxcbiAxMjY6XFx0XFx0XFx0aWYgKGFwcGx5KVxcbiAxMjc6XFx0XFx0XFx0XFx0YXBwbHlfYnl0ZXMgLT0gcmV0O1xcbiAxMjg6XFx0XFx0XFx0bXNnLVxcdTAwM2VzZy5zaXplIC09IHJldDtcXG4gMTI5OlxcdFxcdFxcdHNnZS1cXHUwMDNlb2Zmc2V0ICs9IHJldDtcXG4gMTMwOlxcdFxcdFxcdHNnZS1cXHUwMDNlbGVuZ3RoIC09IHJldDtcXG4gMTMxOlxcdFxcdFxcdGlmICh1bmNoYXJnZSlcXG4gMTMyOlxcdFxcdFxcdFxcdHNrX21lbV91bmNoYXJnZShzaywgcmV0KTtcXG4gMTMzOlxcdFxcdFxcdGlmIChyZXQgIT0gc2l6ZSkge1xcbiAxMzQ6XFx0XFx0XFx0XFx0c2l6ZSAtPSByZXQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDE1OjUzOjE1LjIwMDg4MDI3NFoiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODI4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvdGxzL3Rsc19tYWluLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTc1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTc1OlxcdFxcdHN0cnVjdCBtc2doZHIgbXNnID0ge1xcbiAxNzY6XFx0XFx0XFx0Lm1zZ19mbGFncyA9IE1TR19TUExJQ0VfUEFHRVMgfCBmbGFncyxcXG4gMTc3OlxcdFxcdH07XFxuIDE3ODpcXHRcXHRpbnQgcmV0ID0gMDtcXG4gMTc5OlxcdFxcdHN0cnVjdCBwYWdlICpwO1xcbiAxODA6XFx0XFx0c2l6ZV90IHNpemU7XFxuIDE4MTpcXHRcXHRpbnQgb2Zmc2V0ID0gZmlyc3Rfb2Zmc2V0O1xcbiAxODI6XFx0XFxuIDE4MzpcXHRcXHRzaXplID0gc2ctXFx1MDAzZWxlbmd0aCAtIG9mZnNldDtcXG4gMTg0OlxcdFxcdG9mZnNldCArPSBzZy1cXHUwMDNlb2Zmc2V0O1xcbiAxODU6XFx0XFxuIDE4NjpcXHRcXHRjdHgtXFx1MDAzZXNwbGljaW5nX3BhZ2VzID0gdHJ1ZTtcXG4gMTg3OlxcdFxcdHdoaWxlICgxKSB7XFxuIDE4ODpcXHRcXHRcXHRwID0gc2dfcGFnZShzZyk7XFxuIDE4OTpcXHRyZXRyeTpcXG4gMTkwOlxcdFxcdFxcdGJ2ZWNfc2V0X3BhZ2UoXFx1MDAyNmJ2ZWMsIHAsIHNpemUsIG9mZnNldCk7XFxuIDE5MTpcXHRcXHRcXHRpb3ZfaXRlcl9idmVjKFxcdTAwMjZtc2cubXNnX2l0ZXIsIElURVJfU09VUkNFLCBcXHUwMDI2YnZlYywgMSwgc2l6ZSk7XFxuIDE5MjpcXHRcXG4gMTkzOlxcdFxcdFxcdHJldCA9IHRjcF9zZW5kbXNnX2xvY2tlZChzaywgXFx1MDAyNm1zZywgc2l6ZSk7XFxuIDE5NDpcXHRcXG4gMTk1OlxcdFxcdFxcdGlmIChyZXQgIT0gc2l6ZSkge1xcbiAxOTY6XFx0XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNlIDApIHtcXG4gMTk3OlxcdFxcdFxcdFxcdFxcdG9mZnNldCArPSByZXQ7XFxuIDE5ODpcXHRcXHRcXHRcXHRcXHRzaXplIC09IHJldDtcXG4gMTk5OlxcdFxcdFxcdFxcdFxcdGdvdG8gcmV0cnk7XFxuIDIwMDpcXHRcXHRcXHRcXHR9XFxuIDIwMTpcXHRcXG4gMjAyOlxcdFxcdFxcdFxcdG9mZnNldCAtPSBzZy1cXHUwMDNlb2Zmc2V0O1xcbiAyMDM6XFx0XFx0XFx0XFx0Y3R4LVxcdTAwM2VwYXJ0aWFsbHlfc2VudF9vZmZzZXQgPSBvZmZzZXQ7XFxuIDIwNDpcXHRcXHRcXHRcXHRjdHgtXFx1MDAzZXBhcnRpYWxseV9zZW50X3JlY29yZCA9ICh2b2lkICopc2c7XFxuIDIwNTpcXHRcXHRcXHRcXHRjdHgtXFx1MDAzZXNwbGljaW5nX3BhZ2VzID0gZmFsc2U7XFxuIDIwNjpcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiAyMDc6XFx0XFx0XFx0fVxcbiAyMDg6XFx0XFxuIDIwOTpcXHRcXHRcXHRwdXRfcGFnZShwKTtcXG4gMjEwOlxcdFxcdFxcdHNrX21lbV91bmNoYXJnZShzaywgc2ctXFx1MDAzZWxlbmd0aCk7XFxuIDIxMTpcXHRcXHRcXHRzZyA9IHNnX25leHQoc2cpO1xcbiAyMTI6XFx0XFx0XFx0aWYgKCFzZylcXG4gMjEzOlxcdFxcdFxcdFxcdGJyZWFrO1xcbiAyMTQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDE1OjUzOjE1LjIwMDkzOTA4NFoiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzAzNjEwMTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGNwX3JhdGVfY2hlY2tfYXBwX2xpbWl0ZWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC90Y3AuYz0xMDUxPWludCB0Y3Bfc2VuZG1zZ19mYXN0b3BlbihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgaW50ICpjb3BpZWQsXFxuLS1cXG5uZXQvaXB2NC90Y3AuYy0xMDk4LS8qIElmIGEgZ2FwIGlzIGRldGVjdGVkIGJldHdlZW4gc2VuZHMsIG1hcmsgdGhlIHNvY2tldCBhcHBsaWNhdGlvbi1saW1pdGVkLiAqL1xcbm5ldC9pcHY0L3RjcC5jOjEwOTk6dm9pZCB0Y3BfcmF0ZV9jaGVja19hcHBfbGltaXRlZChzdHJ1Y3Qgc29jayAqc2spXFxubmV0L2lwdjQvdGNwLmMtMTEwMC17XFxuLS1cXG5uZXQvaXB2NC90Y3AuYy0xMTEzLX1cXG5uZXQvaXB2NC90Y3AuYzoxMTE0OkVYUE9SVF9TWU1CT0xfR1BMKHRjcF9yYXRlX2NoZWNrX2FwcF9saW1pdGVkKTtcXG5uZXQvaXB2NC90Y3AuYy0xMTE1LVxcbm5ldC9pcHY0L3RjcC5jPTExMTY9aW50IHRjcF9zZW5kbXNnX2xvY2tlZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXFxuLS1cXG5uZXQvaXB2NC90Y3AuYy0xMTg5LVxcbm5ldC9pcHY0L3RjcC5jOjExOTA6XFx0dGNwX3JhdGVfY2hlY2tfYXBwX2xpbWl0ZWQoc2spOyAgLyogaXMgc2VuZGluZyBhcHBsaWNhdGlvbi1saW1pdGVkPyAqL1xcbm5ldC9pcHY0L3RjcC5jLTExOTEtXFxuLS1cXG5uZXQveGZybS9lc3BpbnRjcC5jPTMwNz1zdGF0aWMgaW50IGVzcGludGNwX3NlbmRtc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxcbi0tXFxubmV0L3hmcm0vZXNwaW50Y3AuYy0zNzAtXFxubmV0L3hmcm0vZXNwaW50Y3AuYzozNzE6XFx0dGNwX3JhdGVfY2hlY2tfYXBwX2xpbWl0ZWQoc2spO1xcbm5ldC94ZnJtL2VzcGludGNwLmMtMzcyLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxNTo1MzoxNS4yNzEzMTExMzNaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTQ3NTE0MDU3NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBUQ1AgU2VuZCBQYXRoKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEknbSBmb2N1c2luZyBvbiB0aGUgVENQIHNlbmQgcGF0aCByaWdodCBub3cuIFRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCB0byBtZSwgZ2l2ZW4gdGhlIGNvbnRleHQsIGlzIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgIGluIGBuZXQvaXB2NC90Y3AuY2AuIFRoYXQncyB3aGVyZSB0aGUgbWFnaWMgcHJvYmFibHkgaGFwcGVucy4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN5c3RlbSAqYWN0dWFsbHkqIHNlbmRzIHRoZSBkYXRhLCBzbyBsZXQncyBzdGFydCBkaWdnaW5nIGludG8gdGhhdCBmdW5jdGlvbi5cblxuT2theSwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgYG5ldC9pcHY0L3RjcC5jYCwgbGluZSAxMTg5IHRvIDExOTUuIEkgc3VzcGVjdCB0aGVyZSdzIHNvbWV0aGluZyBpbnRlcmVzdGluZyByaWdodCB0aGVyZSAtIHRoaXMgbGlrZWx5IGhvbGRzIHRoZSBhbnN3ZXIuIEknbSBleHBlY3Rpbmcgc29tZXRoaW5nIGluIHRoaXMgc25pcHBldCByZWxhdGVkIHRvIHBhY2tldCBjcmVhdGlvbiBhbmQgZGF0YSBjb3B5aW5nLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NzgyLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiLCJyZWFkLWZpbGUiLCJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTU6NTM6MzAuMDIyNzE5MDA4WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3NDMxMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC90Y3AuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMTg1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMTg1OlxcdFxcdFxcdFxcdGdvdG8gb3V0X2VycjtcXG4xMTg2OlxcdFxcdH1cXG4xMTg3OlxcdFxcbjExODg6XFx0XFx0dGltZW8gPSBzb2NrX3NuZHRpbWVvKHNrLCBmbGFncyBcXHUwMDI2IE1TR19ET05UV0FJVCk7XFxuMTE4OTpcXHRcXG4xMTkwOlxcdFxcdHRjcF9yYXRlX2NoZWNrX2FwcF9saW1pdGVkKHNrKTsgIC8qIGlzIHNlbmRpbmcgYXBwbGljYXRpb24tbGltaXRlZD8gKi9cXG4xMTkxOlxcdFxcbjExOTI6XFx0XFx0LyogV2FpdCBmb3IgYSBjb25uZWN0aW9uIHRvIGZpbmlzaC4gT25lIGV4Y2VwdGlvbiBpcyBUQ1AgRmFzdCBPcGVuXFxuMTE5MzpcXHRcXHQgKiAocGFzc2l2ZSBzaWRlKSB3aGVyZSBkYXRhIGlzIGFsbG93ZWQgdG8gYmUgc2VudCBiZWZvcmUgYSBjb25uZWN0aW9uXFxuMTE5NDpcXHRcXHQgKiBpcyBmdWxseSBlc3RhYmxpc2hlZC5cXG4xMTk1OlxcdFxcdCAqL1xcbjExOTY6XFx0XFx0aWYgKCgoMSBcXHUwMDNjXFx1MDAzYyBzay1cXHUwMDNlc2tfc3RhdGUpIFxcdTAwMjYgfihUQ1BGX0VTVEFCTElTSEVEIHwgVENQRl9DTE9TRV9XQUlUKSkgXFx1MDAyNlxcdTAwMjZcXG4xMTk3OlxcdFxcdCAgICAhdGNwX3Bhc3NpdmVfZmFzdG9wZW4oc2spKSB7XFxuMTE5ODpcXHRcXHRcXHRlcnIgPSBza19zdHJlYW1fd2FpdF9jb25uZWN0KHNrLCBcXHUwMDI2dGltZW8pO1xcbjExOTk6XFx0XFx0XFx0aWYgKGVyciAhPSAwKVxcbjEyMDA6XFx0XFx0XFx0XFx0Z290byBkb19lcnJvcjtcXG4xMjAxOlxcdFxcdH1cXG4xMjAyOlxcdFxcbjEyMDM6XFx0XFx0aWYgKHVubGlrZWx5KHRwLVxcdTAwM2VyZXBhaXIpKSB7XFxuMTIwNDpcXHRcXHRcXHRpZiAodHAtXFx1MDAzZXJlcGFpcl9xdWV1ZSA9PSBUQ1BfUkVDVl9RVUVVRSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxNTo1MzozMC4wMjI5OTU1MjhaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6OTY3NDg1MjQ3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSZWR1bmRhbmN5IERldGVjdGVkOiBUQ1AgUmF0ZSBMaW1pdGluZyBBbmFseXNpcyoqXG5cbk9rYXksIGhlcmUncyB3aGF0J3MgaGl0dGluZyBtZS4gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBUQ1Agc2VuZGluZyBwYXRocywgYW5kIEkndmUgZ290IGEgcmVkIGZsYWcgd2F2aW5nIGluIG15IGJyYWluLiBJJ20gc2VlaW5nIHRoYXQgYHRjcF9zZW5kbXNnX2xvY2tlZGAgKmFscmVhZHkqIGNhbGxzIGB0Y3BfcmF0ZV9jaGVja19hcHBfbGltaXRlZChzaylgLiBUaGF0J3MgYSBrZXkgZnVuY3Rpb24gZm9yIHJhdGUgbGltaXRpbmcgYXBwbGljYXRpb24tbGltaXRlZCBzZW5kcy4gTm93LCBib3RoIGB0Y3BfYnBmX3B1c2hgIGFuZCBgdGxzX3B1c2hfc2dgIOKAkyB0aGUgb25lcyB0aGF0IGFyZSBwdXNoaW5nIGRhdGEg4oCTIHRoZXkncmUgdXNpbmcgYHRjcF9zZW5kbXNnX2xvY2tlZChzaywgLi4uKWAgaW4gdGhlaXIgc2VuZGluZyBsb29wcy5cblxuU28sIGhlcmUncyB0aGUga2lja2VyOiBjYWxsaW5nIGB0Y3BfcmF0ZV9jaGVja19hcHBfbGltaXRlZChzaylgICpiZWZvcmUqIGNhbGxpbmcgYHRjcF9zZW5kbXNnX2xvY2tlZGAgaXMgY29tcGxldGVseSByZWR1bmRhbnQuIEl0J3MgYSBkdXBsaWNhdGUgY2hlY2suIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGlzIG11c3QgYmUgaGlzdG9yaWNhbCBiYWdnYWdlLiBQcm9iYWJseSB3aGVuIHdlIHdlcmUgdXNpbmcgYGRvX3RjcF9zZW5kcGFnZXNgIG9yIGB0Y3Bfc2VuZHBhZ2VfbG9ja2VkYCwgd2hpY2ggKmRpZG4ndCogY2FsbCB0aGUgcmF0ZSBjaGVjaywgYnV0IHRoZW4gZ290IHJlZmFjdG9yZWQgdG8gdXNlIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgIGFuZCB0aGUgY2hlY2sgd2FzIGp1c3QgbmV2ZXIgcmVtb3ZlZC4gQ2xhc3NpYy5cblxuTGV0J3MgZGl2ZSBkZWVwZXIgYW5kIHNlZSBleGFjdGx5IHdoYXQgYHRjcF9yYXRlX2NoZWNrX2FwcF9saW1pdGVkKHNrKWAgYWN0dWFsbHkgZG9lcy4uLmdvdHRhIHVuZGVyc3RhbmQgdGhlIGZ1bmN0aW9uIHRvIHNlZSB0aGUgaW1wYWN0IG9mIHRoaXMgdW5uZWNlc3NhcnkgY2FsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTM4NywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDE1OjUzOjM5LjY5Nzg1MDAzMVoiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMDEzMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvdGNwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTA5OCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTA5ODpcXHQvKiBJZiBhIGdhcCBpcyBkZXRlY3RlZCBiZXR3ZWVuIHNlbmRzLCBtYXJrIHRoZSBzb2NrZXQgYXBwbGljYXRpb24tbGltaXRlZC4gKi9cXG4xMDk5OlxcdHZvaWQgdGNwX3JhdGVfY2hlY2tfYXBwX2xpbWl0ZWQoc3RydWN0IHNvY2sgKnNrKVxcbjExMDA6XFx0e1xcbjExMDE6XFx0XFx0c3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7XFxuMTEwMjpcXHRcXG4xMTAzOlxcdFxcdGlmICgvKiBXZSBoYXZlIGxlc3MgdGhhbiBvbmUgcGFja2V0IHRvIHNlbmQuICovXFxuMTEwNDpcXHRcXHQgICAgdHAtXFx1MDAzZXdyaXRlX3NlcSAtIHRwLVxcdTAwM2VzbmRfbnh0IFxcdTAwM2MgdHAtXFx1MDAzZW1zc19jYWNoZSBcXHUwMDI2XFx1MDAyNlxcbjExMDU6XFx0XFx0ICAgIC8qIE5vdGhpbmcgaW4gc2VuZGluZyBob3N0J3MgcWRpc2MgcXVldWVzIG9yIE5JQyB0eCBxdWV1ZS4gKi9cXG4xMTA2OlxcdFxcdCAgICBza193bWVtX2FsbG9jX2dldChzaykgXFx1MDAzYyBTS0JfVFJVRVNJWkUoMSkgXFx1MDAyNlxcdTAwMjZcXG4xMTA3OlxcdFxcdCAgICAvKiBXZSBhcmUgbm90IGxpbWl0ZWQgYnkgQ1dORC4gKi9cXG4xMTA4OlxcdFxcdCAgICB0Y3BfcGFja2V0c19pbl9mbGlnaHQodHApIFxcdTAwM2MgdGNwX3NuZF9jd25kKHRwKSBcXHUwMDI2XFx1MDAyNlxcbjExMDk6XFx0XFx0ICAgIC8qIEFsbCBsb3N0IHBhY2tldHMgaGF2ZSBiZWVuIHJldHJhbnNtaXR0ZWQuICovXFxuMTExMDpcXHRcXHQgICAgdHAtXFx1MDAzZWxvc3Rfb3V0IFxcdTAwM2M9IHRwLVxcdTAwM2VyZXRyYW5zX291dClcXG4xMTExOlxcdFxcdFxcdHRwLVxcdTAwM2VhcHBfbGltaXRlZCA9XFxuMTExMjpcXHRcXHRcXHRcXHQodHAtXFx1MDAzZWRlbGl2ZXJlZCArIHRjcF9wYWNrZXRzX2luX2ZsaWdodCh0cCkpID8gOiAxO1xcbjExMTM6XFx0fVxcbjExMTQ6XFx0RVhQT1JUX1NZTUJPTF9HUEwodGNwX3JhdGVfY2hlY2tfYXBwX2xpbWl0ZWQpO1xcbjExMTU6XFx0XFxuMTExNjpcXHRpbnQgdGNwX3NlbmRtc2dfbG9ja2VkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcXG4xMTE3OlxcdHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTU6NTM6MzkuNjk4MTUzODQyWiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjMxNjY5NTc3MDc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEFzc2Vzc21lbnQ6IE5vIE5lZWQgZm9yIERlZGljYXRlZCBGdXp6aW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQsIGJhc2ljYWxseSwgaXQncyBjbGVhbmluZyB1cCBzb21lIHJlZHVuZGFudCBmdW5jdGlvbiBjYWxscy4gU3BlY2lmaWNhbGx5LCBpdCdzIHJlbW92aW5nIGR1cGxpY2F0ZSBjYWxscyB0byBgdGNwX3JhdGVfY2hlY2tfYXBwX2xpbWl0ZWQoc2spYCBmcm9tIGB0Y3BfYnBmX3B1c2hgIGFuZCBgdGxzX3B1c2hfc2dgLiBUaGUgaW1wb3J0YW50IHRoaW5nIGhlcmUgaXMgdGhhdCBgdGNwX3NlbmRtc2dfbG9ja2VkKHNrLCAuLi4pYCBpcyBjYWxsZWQgKmltbWVkaWF0ZWx5KiBhZnRlciB0aG9zZSBjYWxscywgYW5kIGB0Y3Bfc2VuZG1zZ19sb2NrZWRgICphbHJlYWR5KiBpbnZva2VzIGB0Y3BfcmF0ZV9jaGVja19hcHBfbGltaXRlZChzaylgLiBTbywgaXQncyBqdXN0IGVsaW1pbmF0aW5nIGFuIHVubmVjZXNzYXJ5IGNhbGwuXG5cbk5vdywgdGhlIHF1ZXN0aW9uIGlzLCBkb2VzIHRoaXMgaW50cm9kdWNlICphbnkqIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcyBvciBpbmZvcm1hdGlvbiBsZWFrcz8gTGV0J3MgZ28gdGhyb3VnaCB0aGUgS01TQU4gY2hlY2tsaXN0LiBSZW1lbWJlciB0aGUgcnVsZXM6IHdlIG5lZWQgS01TQU4gaWYgd2UncmUgdG91Y2hpbmcga2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2UsIG1lc3Npbmcgd2l0aCBjb25kaXRpb25hbCBsb2dpYyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgYWxsb2NhdGluZyBhbmQgcG90ZW50aWFsbHkgcmVhZGluZyB1bmluaXRpYWxpemVkIGZpZWxkcywgb3IgYWx0ZXJpbmcgYm91bmRzIGNoZWNrcy5cblxuSW4gdGhpcyBjYXNlLCBpdCdzIGEgc3RyYWlnaHRmb3J3YXJkIFwibm9cIiBhY3Jvc3MgdGhlIGJvYXJkLiBUaGUgcGF0Y2ggZG9lc24ndCB0b3VjaCBhbnkgc3RydWN0dXJlcyB0aGF0IGFyZSBwYXNzZWQgdG8gdXNlcnNwYWNlLiBXZSdyZSBub3QgZG9pbmcgYW55IGNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gVGhlcmUgYXJlIG5vIG5ldyBhbGxvY2F0aW9ucywgYW5kIGNlcnRhaW5seSBubyByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS4gV2UncmUgbm90IG1vZGlmeWluZyBib3VuZHMgY2hlY2tzIGVpdGhlci4gV2UncmUganVzdCAqcmVtb3ZpbmcqIGEgZnVuY3Rpb24gY2FsbC5cblxuU28sIEknbSBjb25maWRlbnQgaW4gc2V0dGluZyBgTmVlZHNLTVNBTiA9IGZhbHNlYC4gVGhpcyBjaGFuZ2UgcHJpbWFyaWx5IGRlYWxzIHdpdGggY29kZSByZWR1bmRhbmN5IGFuZCBwZXJmb3JtYW5jZSBhbmQgaXQgZG9lc24ndCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4gS0FTQU4gd2lsbCwgb2YgY291cnNlLCBjb250aW51ZSB0byBjYXRjaCBhbnkgc3BhdGlhbCBvciB0ZW1wb3JhbCBtZW1vcnkgaXNzdWVzIGlmIHRoZXkgZXhpc3QuIEtNU0FOJ3MgcHVycG9zZSBpcyBzcGVjaWZpY2FsbHkgdG8gZGV0ZWN0IHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCBpbmZvcm1hdGlvbiBsZWFrcy5cblxuRXNzZW50aWFsbHksIEtNU0FOIGlzIGZvciBkZXRlY3RpbmcgdGhlIFwid2hvb3BzLCBJIGZvcmdvdCB0byBpbml0aWFsaXplIHRoYXRcIiBraW5kIG9mIGVycm9yLiBUaGlzIHBhdGNoIGRvZXNuJ3Qgb3BlbiB0aGUgZG9vciBmb3IgdGhhdCBraW5kIG9mIHByb2JsZW0uIFRoZXJlZm9yZSwgaXQgaXMgYXBwcm9wcmlhdGUgdG8gc3RhdGUgdGhhdCBgS01TQU5SZWFzb25pbmdgIHNob3VsZCBiZSB0aGF0IHRoZSBwYXRjaCBtZXJlbHkgZGVsZXRlcyByZWR1bmRhbnQgY2FsbHMgdG8gYHRjcF9yYXRlX2NoZWNrX2FwcF9saW1pdGVkKHNrKWAgZnJvbSBgdGNwX2JwZl9wdXNoKClgIGFuZCBgdGxzX3B1c2hfc2coKWAsIHNpbmNlIGB0Y3Bfc2VuZG1zZ19sb2NrZWQoKWAsIGNhbGxlZCBpbW1lZGlhdGVseSBhZnRlcndhcmRzLCBhbHJlYWR5IHBlcmZvcm1zIGB0Y3BfcmF0ZV9jaGVja19hcHBfbGltaXRlZChzaylgLiBJdCBkb2VzIG5vdCBhbGxvY2F0ZSBuZXcgbWVtb3J5LCBpbml0aWFsaXplIG9yIHJlYWQgdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzLCBhbHRlciBidWZmZXIgYm91bmRhcmllcywgb3IgY29weSBrZXJuZWwgZGF0YSB0byB1c2VyIHNwYWNlLiBUaGVyZSBhcmUgemVybyByaXNrcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvcm1hdGlvbiBsZWFrcyBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQgYnkgdGhpcyBjaGFuZ2UsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiBBbmQgdGhlIHRvb2wgY2FsbCBmb3JtYXQgaXMgY29ycmVjdCBhcyBgc2V0LXJlc3VsdHNgIGFjY2VwdHMgYEtNU0FOUmVhc29uaW5nYCAoc3RyaW5nKSBhbmQgYE5lZWRzS01TQU5gIChib29sKS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjI4NiwiT3V0cHV0VG9rZW5zIjoxNzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MjksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxNTo1NDoxMS4zNjc3MzMzODlaIiwiU2VxIjozOSwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTkyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlbW92ZXMgcmVkdW5kYW50IGNhbGxzIHRvIHRjcF9yYXRlX2NoZWNrX2FwcF9saW1pdGVkKHNrKSBmcm9tIHRjcF9icGZfcHVzaCgpIGluIG5ldC9pcHY0L3RjcF9icGYuYyBhbmQgdGxzX3B1c2hfc2coKSBpbiBuZXQvdGxzL3Rsc19tYWluLmMuIEluIGJvdGggY2FzZXMsIHRjcF9zZW5kbXNnX2xvY2tlZCgpIGlzIGNhbGxlZCBpbW1lZGlhdGVseSBmb2xsb3dpbmcgYW5kIGFscmVhZHkgaW52b2tlcyB0Y3BfcmF0ZV9jaGVja19hcHBfbGltaXRlZChzaykuXFxuXFxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24sIGJ1ZmZlciBsZW5ndGhzLCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgY29weWluZyB0byB1c2VyIHNwYWNlLiBUaGVyZSBpcyBubyByaXNrIG9mIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnksIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGZpZWxkcywgb3IgY2F1c2luZyBpbmZvcm1hdGlvbiBsZWFrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZW1vdmVzIHJlZHVuZGFudCBjYWxscyB0byB0Y3BfcmF0ZV9jaGVja19hcHBfbGltaXRlZChzaykgZnJvbSB0Y3BfYnBmX3B1c2goKSBpbiBuZXQvaXB2NC90Y3BfYnBmLmMgYW5kIHRsc19wdXNoX3NnKCkgaW4gbmV0L3Rscy90bHNfbWFpbi5jLiBJbiBib3RoIGNhc2VzLCB0Y3Bfc2VuZG1zZ19sb2NrZWQoKSBpcyBjYWxsZWQgaW1tZWRpYXRlbHkgZm9sbG93aW5nIGFuZCBhbHJlYWR5IGludm9rZXMgdGNwX3JhdGVfY2hlY2tfYXBwX2xpbWl0ZWQoc2spLlxcblxcblRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uLCBidWZmZXIgbGVuZ3RocywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGNvcHlpbmcgdG8gdXNlciBzcGFjZS4gVGhlcmUgaXMgbm8gcmlzayBvZiByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBmaWVsZHMsIG9yIGNhdXNpbmcgaW5mb3JtYXRpb24gbGVha3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflow6twnc[1] Phase: Succeeded StartedAt: 2026-09-15 15:54:22 +0000 UTC FinishedAt: 2026-09-15 15:54:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6twnc[1].abort-on-skip-outcome Phase: Skipped Message: when 'false' evaluated false StartedAt: 2026-09-15 15:54:22 +0000 UTC FinishedAt: 2026-09-15 15:54:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6twnc[2] Phase: Succeeded StartedAt: 2026-09-15 15:54:22 +0000 UTC FinishedAt: 2026-09-15 19:45:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6twnc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ef40d69b38a93bc9951dadb1a15c85c597e1a40","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"base_commit":"5ef40d69b38a93bc9951dadb1a15c85c597e1a40","base_tree":"bpf-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tls_push_sg","tls_tx_records","tls_push_partial_record","tcp_bpf_push","tcp_bpf_sendmsg","tcp_bpf_sendmsg_redir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ef40d69b38a93bc9951dadb1a15c85c597e1a40","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"17e7d4a6-a526-4adb-8072-651ee4e5f6ac","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-15 15:54:22 +0000 UTC FinishedAt: 2026-09-15 19:45:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"5ef40d69b38a93bc9951dadb1a15c85c597e1a40","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"fuzz":{"base_commit":"5ef40d69b38a93bc9951dadb1a15c85c597e1a40","base_tree":"bpf-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tls_push_sg","tls_tx_records","tls_push_partial_record","tcp_bpf_push","tcp_bpf_sendmsg","tcp_bpf_sendmsg_redir"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"5ef40d69b38a93bc9951dadb1a15c85c597e1a40","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"17e7d4a6-a526-4adb-8072-651ee4e5f6ac","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow6twnc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ef40d69b38a93bc9951dadb1a15c85c597e1a40","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"base_commit":"5ef40d69b38a93bc9951dadb1a15c85c597e1a40","base_tree":"bpf-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tls_push_sg","tls_tx_records","tls_push_partial_record","tcp_bpf_push","tcp_bpf_sendmsg","tcp_bpf_sendmsg_redir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ef40d69b38a93bc9951dadb1a15c85c597e1a40","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"17e7d4a6-a526-4adb-8072-651ee4e5f6ac","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-15 15:54:22 +0000 UTC FinishedAt: 2026-09-15 15:54:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6twnc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ef40d69b38a93bc9951dadb1a15c85c597e1a40","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"base_commit":"5ef40d69b38a93bc9951dadb1a15c85c597e1a40","base_tree":"bpf-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tls_push_sg","tls_tx_records","tls_push_partial_record","tcp_bpf_push","tcp_bpf_sendmsg","tcp_bpf_sendmsg_redir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ef40d69b38a93bc9951dadb1a15c85c597e1a40","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"17e7d4a6-a526-4adb-8072-651ee4e5f6ac","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-15 15:54:22 +0000 UTC FinishedAt: 2026-09-15 15:54:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"5ef40d69b38a93bc9951dadb1a15c85c597e1a40","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.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-workflow6twnc/series-workflow6twnc-convert-artifact-435256491/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6twnc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ef40d69b38a93bc9951dadb1a15c85c597e1a40","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"base_commit":"5ef40d69b38a93bc9951dadb1a15c85c597e1a40","base_tree":"bpf-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tls_push_sg","tls_tx_records","tls_push_partial_record","tcp_bpf_push","tcp_bpf_sendmsg","tcp_bpf_sendmsg_redir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ef40d69b38a93bc9951dadb1a15c85c597e1a40","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"17e7d4a6-a526-4adb-8072-651ee4e5f6ac","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-15 15:54:32 +0000 UTC FinishedAt: 2026-09-15 16:10:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6twnc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ef40d69b38a93bc9951dadb1a15c85c597e1a40","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"base_commit":"5ef40d69b38a93bc9951dadb1a15c85c597e1a40","base_tree":"bpf-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tls_push_sg","tls_tx_records","tls_push_partial_record","tcp_bpf_push","tcp_bpf_sendmsg","tcp_bpf_sendmsg_redir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ef40d69b38a93bc9951dadb1a15c85c597e1a40","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"17e7d4a6-a526-4adb-8072-651ee4e5f6ac","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-15 15:54:32 +0000 UTC FinishedAt: 2026-09-15 16:10:39 +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:*21112954-da5e-4452-812e-6083728e5c4e,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-workflow6twnc/series-workflow6twnc-convert-artifact-435256491/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": "6c52ea15-3e60-4ecb-a357-2022d0d9197c", "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-workflow6twnc/series-workflow6twnc-build-action-1514474921/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6twnc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ef40d69b38a93bc9951dadb1a15c85c597e1a40","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"base_commit":"5ef40d69b38a93bc9951dadb1a15c85c597e1a40","base_tree":"bpf-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tls_push_sg","tls_tx_records","tls_push_partial_record","tcp_bpf_push","tcp_bpf_sendmsg","tcp_bpf_sendmsg_redir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ef40d69b38a93bc9951dadb1a15c85c597e1a40","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"17e7d4a6-a526-4adb-8072-651ee4e5f6ac","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-15 15:54:32 +0000 UTC FinishedAt: 2026-09-15 16:10:29 +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:*21112954-da5e-4452-812e-6083728e5c4e,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-workflow6twnc/series-workflow6twnc-convert-artifact-435256491/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": "6c52ea15-3e60-4ecb-a357-2022d0d9197c", "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-workflow6twnc/series-workflow6twnc-build-action-1514474921/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6twnc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ef40d69b38a93bc9951dadb1a15c85c597e1a40","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"base_commit":"5ef40d69b38a93bc9951dadb1a15c85c597e1a40","base_tree":"bpf-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tls_push_sg","tls_tx_records","tls_push_partial_record","tcp_bpf_push","tcp_bpf_sendmsg","tcp_bpf_sendmsg_redir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ef40d69b38a93bc9951dadb1a15c85c597e1a40","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"17e7d4a6-a526-4adb-8072-651ee4e5f6ac","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-15 16:10:39 +0000 UTC FinishedAt: 2026-09-15 16:10:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6twnc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ef40d69b38a93bc9951dadb1a15c85c597e1a40","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"base_commit":"5ef40d69b38a93bc9951dadb1a15c85c597e1a40","base_tree":"bpf-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tls_push_sg","tls_tx_records","tls_push_partial_record","tcp_bpf_push","tcp_bpf_sendmsg","tcp_bpf_sendmsg_redir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ef40d69b38a93bc9951dadb1a15c85c597e1a40","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"17e7d4a6-a526-4adb-8072-651ee4e5f6ac","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped Message: when 'false' evaluated false StartedAt: 2026-09-15 16:10:39 +0000 UTC FinishedAt: 2026-09-15 16:10:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6twnc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ef40d69b38a93bc9951dadb1a15c85c597e1a40","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"base_commit":"5ef40d69b38a93bc9951dadb1a15c85c597e1a40","base_tree":"bpf-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tls_push_sg","tls_tx_records","tls_push_partial_record","tcp_bpf_push","tcp_bpf_sendmsg","tcp_bpf_sendmsg_redir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ef40d69b38a93bc9951dadb1a15c85c597e1a40","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"17e7d4a6-a526-4adb-8072-651ee4e5f6ac","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-15 16:10:39 +0000 UTC FinishedAt: 2026-09-15 16:10:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6twnc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ef40d69b38a93bc9951dadb1a15c85c597e1a40","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"base_commit":"5ef40d69b38a93bc9951dadb1a15c85c597e1a40","base_tree":"bpf-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tls_push_sg","tls_tx_records","tls_push_partial_record","tcp_bpf_push","tcp_bpf_sendmsg","tcp_bpf_sendmsg_redir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ef40d69b38a93bc9951dadb1a15c85c597e1a40","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"17e7d4a6-a526-4adb-8072-651ee4e5f6ac","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-15 16:10:39 +0000 UTC FinishedAt: 2026-09-15 16:10:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"5ef40d69b38a93bc9951dadb1a15c85c597e1a40","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"17e7d4a6-a526-4adb-8072-651ee4e5f6ac","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.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-workflow6twnc/series-workflow6twnc-convert-artifact-1601900930/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6twnc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ef40d69b38a93bc9951dadb1a15c85c597e1a40","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"base_commit":"5ef40d69b38a93bc9951dadb1a15c85c597e1a40","base_tree":"bpf-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tls_push_sg","tls_tx_records","tls_push_partial_record","tcp_bpf_push","tcp_bpf_sendmsg","tcp_bpf_sendmsg_redir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ef40d69b38a93bc9951dadb1a15c85c597e1a40","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"17e7d4a6-a526-4adb-8072-651ee4e5f6ac","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-15 16:10:49 +0000 UTC FinishedAt: 2026-09-15 16:12:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6twnc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ef40d69b38a93bc9951dadb1a15c85c597e1a40","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"base_commit":"5ef40d69b38a93bc9951dadb1a15c85c597e1a40","base_tree":"bpf-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tls_push_sg","tls_tx_records","tls_push_partial_record","tcp_bpf_push","tcp_bpf_sendmsg","tcp_bpf_sendmsg_redir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ef40d69b38a93bc9951dadb1a15c85c597e1a40","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"17e7d4a6-a526-4adb-8072-651ee4e5f6ac","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-15 16:10:49 +0000 UTC FinishedAt: 2026-09-15 16:12:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*6c52ea15-3e60-4ecb-a357-2022d0d9197c,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-workflow6twnc/series-workflow6twnc-build-action-1514474921/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-workflow6twnc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ef40d69b38a93bc9951dadb1a15c85c597e1a40","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"base_commit":"5ef40d69b38a93bc9951dadb1a15c85c597e1a40","base_tree":"bpf-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tls_push_sg","tls_tx_records","tls_push_partial_record","tcp_bpf_push","tcp_bpf_sendmsg","tcp_bpf_sendmsg_redir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ef40d69b38a93bc9951dadb1a15c85c597e1a40","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"17e7d4a6-a526-4adb-8072-651ee4e5f6ac","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-15 16:12:43 +0000 UTC FinishedAt: 2026-09-15 16:12:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6twnc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ef40d69b38a93bc9951dadb1a15c85c597e1a40","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"base_commit":"5ef40d69b38a93bc9951dadb1a15c85c597e1a40","base_tree":"bpf-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tls_push_sg","tls_tx_records","tls_push_partial_record","tcp_bpf_push","tcp_bpf_sendmsg","tcp_bpf_sendmsg_redir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ef40d69b38a93bc9951dadb1a15c85c597e1a40","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"17e7d4a6-a526-4adb-8072-651ee4e5f6ac","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped Message: when 'false' evaluated false StartedAt: 2026-09-15 16:12:43 +0000 UTC FinishedAt: 2026-09-15 16:12:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6twnc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ef40d69b38a93bc9951dadb1a15c85c597e1a40","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"base_commit":"5ef40d69b38a93bc9951dadb1a15c85c597e1a40","base_tree":"bpf-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tls_push_sg","tls_tx_records","tls_push_partial_record","tcp_bpf_push","tcp_bpf_sendmsg","tcp_bpf_sendmsg_redir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ef40d69b38a93bc9951dadb1a15c85c597e1a40","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"17e7d4a6-a526-4adb-8072-651ee4e5f6ac","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-15 16:12:43 +0000 UTC FinishedAt: 2026-09-15 16:28:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6twnc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ef40d69b38a93bc9951dadb1a15c85c597e1a40","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"base_commit":"5ef40d69b38a93bc9951dadb1a15c85c597e1a40","base_tree":"bpf-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tls_push_sg","tls_tx_records","tls_push_partial_record","tcp_bpf_push","tcp_bpf_sendmsg","tcp_bpf_sendmsg_redir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ef40d69b38a93bc9951dadb1a15c85c597e1a40","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"17e7d4a6-a526-4adb-8072-651ee4e5f6ac","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-15 16:12:43 +0000 UTC FinishedAt: 2026-09-15 16:28:41 +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:*21112954-da5e-4452-812e-6083728e5c4e,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-workflow6twnc/series-workflow6twnc-convert-artifact-1601900930/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": "b3d7a03b-60ea-4c8f-966e-d171eca15da9", "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-workflow6twnc/series-workflow6twnc-build-action-2762931158/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6twnc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ef40d69b38a93bc9951dadb1a15c85c597e1a40","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"base_commit":"5ef40d69b38a93bc9951dadb1a15c85c597e1a40","base_tree":"bpf-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tls_push_sg","tls_tx_records","tls_push_partial_record","tcp_bpf_push","tcp_bpf_sendmsg","tcp_bpf_sendmsg_redir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ef40d69b38a93bc9951dadb1a15c85c597e1a40","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"17e7d4a6-a526-4adb-8072-651ee4e5f6ac","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-15 16:12:43 +0000 UTC FinishedAt: 2026-09-15 16:28:31 +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:*21112954-da5e-4452-812e-6083728e5c4e,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-workflow6twnc/series-workflow6twnc-convert-artifact-1601900930/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": "b3d7a03b-60ea-4c8f-966e-d171eca15da9", "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-workflow6twnc/series-workflow6twnc-build-action-2762931158/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6twnc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ef40d69b38a93bc9951dadb1a15c85c597e1a40","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"base_commit":"5ef40d69b38a93bc9951dadb1a15c85c597e1a40","base_tree":"bpf-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tls_push_sg","tls_tx_records","tls_push_partial_record","tcp_bpf_push","tcp_bpf_sendmsg","tcp_bpf_sendmsg_redir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ef40d69b38a93bc9951dadb1a15c85c597e1a40","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"17e7d4a6-a526-4adb-8072-651ee4e5f6ac","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-15 16:28:41 +0000 UTC FinishedAt: 2026-09-15 16:28:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6twnc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ef40d69b38a93bc9951dadb1a15c85c597e1a40","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"base_commit":"5ef40d69b38a93bc9951dadb1a15c85c597e1a40","base_tree":"bpf-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tls_push_sg","tls_tx_records","tls_push_partial_record","tcp_bpf_push","tcp_bpf_sendmsg","tcp_bpf_sendmsg_redir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ef40d69b38a93bc9951dadb1a15c85c597e1a40","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"17e7d4a6-a526-4adb-8072-651ee4e5f6ac","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped Message: when 'false' evaluated false StartedAt: 2026-09-15 16:28:41 +0000 UTC FinishedAt: 2026-09-15 16:28:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6twnc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ef40d69b38a93bc9951dadb1a15c85c597e1a40","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"base_commit":"5ef40d69b38a93bc9951dadb1a15c85c597e1a40","base_tree":"bpf-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tls_push_sg","tls_tx_records","tls_push_partial_record","tcp_bpf_push","tcp_bpf_sendmsg","tcp_bpf_sendmsg_redir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ef40d69b38a93bc9951dadb1a15c85c597e1a40","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"17e7d4a6-a526-4adb-8072-651ee4e5f6ac","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-15 16:28:41 +0000 UTC FinishedAt: 2026-09-15 16:30:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6twnc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ef40d69b38a93bc9951dadb1a15c85c597e1a40","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"base_commit":"5ef40d69b38a93bc9951dadb1a15c85c597e1a40","base_tree":"bpf-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tls_push_sg","tls_tx_records","tls_push_partial_record","tcp_bpf_push","tcp_bpf_sendmsg","tcp_bpf_sendmsg_redir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ef40d69b38a93bc9951dadb1a15c85c597e1a40","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"17e7d4a6-a526-4adb-8072-651ee4e5f6ac","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-15 16:28:41 +0000 UTC FinishedAt: 2026-09-15 16:29:59 +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:*b3d7a03b-60ea-4c8f-966e-d171eca15da9,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-workflow6twnc/series-workflow6twnc-build-action-2762931158/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-workflow6twnc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ef40d69b38a93bc9951dadb1a15c85c597e1a40","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"base_commit":"5ef40d69b38a93bc9951dadb1a15c85c597e1a40","base_tree":"bpf-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tls_push_sg","tls_tx_records","tls_push_partial_record","tcp_bpf_push","tcp_bpf_sendmsg","tcp_bpf_sendmsg_redir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ef40d69b38a93bc9951dadb1a15c85c597e1a40","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"17e7d4a6-a526-4adb-8072-651ee4e5f6ac","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-15 16:30:09 +0000 UTC FinishedAt: 2026-09-15 19:45:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6twnc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ef40d69b38a93bc9951dadb1a15c85c597e1a40","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"base_commit":"5ef40d69b38a93bc9951dadb1a15c85c597e1a40","base_tree":"bpf-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tls_push_sg","tls_tx_records","tls_push_partial_record","tcp_bpf_push","tcp_bpf_sendmsg","tcp_bpf_sendmsg_redir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ef40d69b38a93bc9951dadb1a15c85c597e1a40","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"17e7d4a6-a526-4adb-8072-651ee4e5f6ac","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-15 16:30:09 +0000 UTC FinishedAt: 2026-09-15 19:45:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"base_commit":"5ef40d69b38a93bc9951dadb1a15c85c597e1a40","base_tree":"bpf-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tls_push_sg","tls_tx_records","tls_push_partial_record","tcp_bpf_push","tcp_bpf_sendmsg","tcp_bpf_sendmsg_redir"],"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:*6c52ea15-3e60-4ecb-a357-2022d0d9197c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*b3d7a03b-60ea-4c8f-966e-d171eca15da9,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-workflow6twnc/series-workflow6twnc-build-action-1514474921/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-workflow6twnc/series-workflow6twnc-build-action-2762931158/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow6twnc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ef40d69b38a93bc9951dadb1a15c85c597e1a40","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"base_commit":"5ef40d69b38a93bc9951dadb1a15c85c597e1a40","base_tree":"bpf-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tls_push_sg","tls_tx_records","tls_push_partial_record","tcp_bpf_push","tcp_bpf_sendmsg","tcp_bpf_sendmsg_redir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ef40d69b38a93bc9951dadb1a15c85c597e1a40","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"17e7d4a6-a526-4adb-8072-651ee4e5f6ac","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-15 16:30:09 +0000 UTC FinishedAt: 2026-09-15 16:30:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6twnc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ef40d69b38a93bc9951dadb1a15c85c597e1a40","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"base_commit":"5ef40d69b38a93bc9951dadb1a15c85c597e1a40","base_tree":"bpf-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tls_push_sg","tls_tx_records","tls_push_partial_record","tcp_bpf_push","tcp_bpf_sendmsg","tcp_bpf_sendmsg_redir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ef40d69b38a93bc9951dadb1a15c85c597e1a40","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"17e7d4a6-a526-4adb-8072-651ee4e5f6ac","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-15 16:30:09 +0000 UTC FinishedAt: 2026-09-15 16:30:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"base_commit":"5ef40d69b38a93bc9951dadb1a15c85c597e1a40","base_tree":"bpf-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tls_push_sg","tls_tx_records","tls_push_partial_record","tcp_bpf_push","tcp_bpf_sendmsg","tcp_bpf_sendmsg_redir"],"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-workflow6twnc/series-workflow6twnc-convert-artifact-2276208823/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6twnc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ef40d69b38a93bc9951dadb1a15c85c597e1a40","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"base_commit":"5ef40d69b38a93bc9951dadb1a15c85c597e1a40","base_tree":"bpf-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tls_push_sg","tls_tx_records","tls_push_partial_record","tcp_bpf_push","tcp_bpf_sendmsg","tcp_bpf_sendmsg_redir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ef40d69b38a93bc9951dadb1a15c85c597e1a40","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"17e7d4a6-a526-4adb-8072-651ee4e5f6ac","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped Message: when 'false' evaluated false StartedAt: 2026-09-15 16:30:09 +0000 UTC FinishedAt: 2026-09-15 16:30:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6twnc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ef40d69b38a93bc9951dadb1a15c85c597e1a40","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"base_commit":"5ef40d69b38a93bc9951dadb1a15c85c597e1a40","base_tree":"bpf-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tls_push_sg","tls_tx_records","tls_push_partial_record","tcp_bpf_push","tcp_bpf_sendmsg","tcp_bpf_sendmsg_redir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ef40d69b38a93bc9951dadb1a15c85c597e1a40","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"17e7d4a6-a526-4adb-8072-651ee4e5f6ac","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-15 16:30:09 +0000 UTC FinishedAt: 2026-09-15 16:30:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6twnc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ef40d69b38a93bc9951dadb1a15c85c597e1a40","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"base_commit":"5ef40d69b38a93bc9951dadb1a15c85c597e1a40","base_tree":"bpf-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tls_push_sg","tls_tx_records","tls_push_partial_record","tcp_bpf_push","tcp_bpf_sendmsg","tcp_bpf_sendmsg_redir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ef40d69b38a93bc9951dadb1a15c85c597e1a40","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"17e7d4a6-a526-4adb-8072-651ee4e5f6ac","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped Message: when 'false' evaluated false StartedAt: 2026-09-15 16:30:09 +0000 UTC FinishedAt: 2026-09-15 16:30:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6twnc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ef40d69b38a93bc9951dadb1a15c85c597e1a40","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"base_commit":"5ef40d69b38a93bc9951dadb1a15c85c597e1a40","base_tree":"bpf-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tls_push_sg","tls_tx_records","tls_push_partial_record","tcp_bpf_push","tcp_bpf_sendmsg","tcp_bpf_sendmsg_redir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ef40d69b38a93bc9951dadb1a15c85c597e1a40","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"17e7d4a6-a526-4adb-8072-651ee4e5f6ac","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-15 16:30:19 +0000 UTC FinishedAt: 2026-09-15 19:45:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6twnc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5ef40d69b38a93bc9951dadb1a15c85c597e1a40","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"base_commit":"5ef40d69b38a93bc9951dadb1a15c85c597e1a40","base_tree":"bpf-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tls_push_sg","tls_tx_records","tls_push_partial_record","tcp_bpf_push","tcp_bpf_sendmsg","tcp_bpf_sendmsg_redir"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5ef40d69b38a93bc9951dadb1a15c85c597e1a40","config_name":"upstream-apparmor-kasan.config","enable_configs":["TLS","BPF_SYSCALL","BPF_STREAM_PARSER","NET_SOCK_MSG"],"series_id":"17e7d4a6-a526-4adb-8072-651ee4e5f6ac","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-15 16:30:19 +0000 UTC FinishedAt: 2026-09-15 19:45:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*6c52ea15-3e60-4ecb-a357-2022d0d9197c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*b3d7a03b-60ea-4c8f-966e-d171eca15da9,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-workflow6twnc/series-workflow6twnc-build-action-1514474921/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-workflow6twnc/series-workflow6twnc-build-action-2762931158/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-workflow6twnc/series-workflow6twnc-convert-artifact-2276208823/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,}