Name: series-workflowvjsbw Phase: Succeeded StartedAt: 2026-07-13 09:25:50 +0000 UTC FinishedAt: 2026-07-13 14:24:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvjsbw[0] Phase: Succeeded StartedAt: 2026-07-13 09:25:50 +0000 UTC FinishedAt: 2026-07-13 09:51:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvjsbw[0].run-triage Phase: Succeeded StartedAt: 2026-07-13 09:25:50 +0000 UTC FinishedAt: 2026-07-13 09:51:21 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MPTCP", "MPTCP_IPV6" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MPTCP", "MPTCP_IPV6" ], "series_id": "8be81062-4bbc-46e4-ac2c-40fe2cea6ddb" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "mptcp_setsockopt_v6_set_tclass", "mptcp_setsockopt_v6", "mptcp_getsockopt_v6" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDA5OjQ5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01QVENQJiMzNDssCiAgICAmIzM0O01QVENQX0lQVjYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttcHRjcF9zZXRzb2Nrb3B0X3Y2X3NldF90Y2xhc3MmIzM0OywKICAgICYjMzQ7bXB0Y3Bfc2V0c29ja29wdF92NiYjMzQ7LAogICAgJiMzNDttcHRjcF9nZXRzb2Nrb3B0X3Y2JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3Igc2V0dGluZyBhbmQgZ2V0dGluZyB0aGUgSVBWNl9UQ0xBU1Mgc29ja2V0IG9wdGlvbiBvbiBNUFRDUCBzb2NrZXRzLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IGZ1bmN0aW9uIG1wdGNwX3NldHNvY2tvcHRfdjZfc2V0X3RjbGFzcyB0byBwcm9wYWdhdGUgdGhlIHRjbGFzcyB2YWx1ZSB0byBhbGwgc3ViZmxvd3MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDk6NDk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA0MWMyNTMxYWQxM2UxMzExMTc3NTgzNDg3ZTViNjI3MWY5ODllNWQ5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdWwgMTMgMDk6NDk6MDUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3NvY2tvcHQuYyBiL25ldC9tcHRjcC9zb2Nrb3B0LmNcbmluZGV4IGZjZjZmZWIyYTllYjVkLi5lZGRkYWZlYmI4ZGVmYyAxMDA2NDRcbi0tLSBhL25ldC9tcHRjcC9zb2Nrb3B0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tcHRjcC9zb2Nrb3B0LmNcbkBAIC0zOTQsNiAmIzQzOzM5NCwzNSBAQCBzdGF0aWMgaW50IG1wdGNwX3NldHNvY2tvcHRfc29sX3NvY2tldChzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBpbnQgb3B0bmFtZSxcbiBcdHJldHVybiAtRU9QTk9UU1VQUDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgbXB0Y3Bfc2V0c29ja29wdF92Nl9zZXRfdGNsYXNzKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIGludCBvcHRuYW1lLFxuJiM0MztcdFx0XHRcdFx0ICBzb2NrcHRyX3Qgb3B0dmFsLCB1bnNpZ25lZCBpbnQgb3B0bGVuKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqc3ViZmxvdztcbiYjNDM7XHRzdHJ1Y3Qgc29jayAqc2sgPSAoc3RydWN0IHNvY2sgKiltc2s7XG4mIzQzO1x0aW50IGVyciwgdmFsO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBpcHY2X3NldHNvY2tvcHQoc2ssIFNPTF9JUFY2LCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7XG4mIzQzO1xuJiM0MztcdGlmIChlcnIgIT0gMClcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4mIzQzO1xuJiM0MztcdGxvY2tfc29jayhzayk7XG4mIzQzO1x0c29ja29wdF9zZXFfaW5jKG1zayk7XG4mIzQzO1x0dmFsID0gUkVBRF9PTkNFKGluZXQ2X3NrKHNrKS1cdTAwM2V0Y2xhc3MpO1xuJiM0MztcdG1wdGNwX2Zvcl9lYWNoX3N1YmZsb3cobXNrLCBzdWJmbG93KSB7XG4mIzQzO1x0XHRzdHJ1Y3Qgc29jayAqc3NrID0gbXB0Y3Bfc3ViZmxvd190Y3Bfc29jayhzdWJmbG93KTtcbiYjNDM7XHRcdGJvb2wgc2xvdztcbiYjNDM7XG4mIzQzO1x0XHRzbG93ID0gbG9ja19zb2NrX2Zhc3Qoc3NrKTtcbiYjNDM7XHRcdGluZXQ2X3NrKHNzayktXHUwMDNldGNsYXNzID0gdmFsO1xuJiM0MztcdFx0c2tfZHN0X3Jlc2V0KHNzayk7XG4mIzQzO1x0XHR1bmxvY2tfc29ja19mYXN0KHNzaywgc2xvdyk7XG4mIzQzO1x0fVxuJiM0MztcdHJlbGVhc2Vfc29jayhzayk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgbXB0Y3Bfc2V0c29ja29wdF92NihzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBpbnQgb3B0bmFtZSxcbiBcdFx0XHQgICAgICAgc29ja3B0cl90IG9wdHZhbCwgdW5zaWduZWQgaW50IG9wdGxlbilcbiB7XG5AQCAtNDM2LDYgJiM0Mzs0NjUsOCBAQCBzdGF0aWMgaW50IG1wdGNwX3NldHNvY2tvcHRfdjYoc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgaW50IG9wdG5hbWUsXG4gXG4gXHRcdHJlbGVhc2Vfc29jayhzayk7XG4gXHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgSVBWNl9UQ0xBU1M6XG4mIzQzO1x0XHRyZXR1cm4gbXB0Y3Bfc2V0c29ja29wdF92Nl9zZXRfdGNsYXNzKG1zaywgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pO1xuIFx0fVxuIFxuIFx0cmV0dXJuIHJldDtcbkBAIC0xNDg1LDYgJiM0MzsxNTE2LDkgQEAgc3RhdGljIGludCBtcHRjcF9nZXRzb2Nrb3B0X3Y2KHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIGludCBvcHRuYW1lLFxuIFx0c3RydWN0IHNvY2sgKnNrID0gKHZvaWQgKiltc2s7XG4gXG4gXHRzd2l0Y2ggKG9wdG5hbWUpIHtcbiYjNDM7XHRjYXNlIElQVjZfVENMQVNTOlxuJiM0MztcdFx0cmV0dXJuIG1wdGNwX3B1dF9pbnRfb3B0aW9uKG1zaywgb3B0dmFsLCBvcHRsZW4sXG4mIzQzO1x0XHRcdFx0XHQgICAgUkVBRF9PTkNFKGluZXQ2X3NrKHNrKS1cdTAwM2V0Y2xhc3MpKTtcbiBcdGNhc2UgSVBWNl9WNk9OTFk6XG4gXHRcdHJldHVybiBtcHRjcF9wdXRfaW50X29wdGlvbihtc2ssIG9wdHZhbCwgb3B0bGVuLFxuIFx0XHRcdFx0XHQgICAgc2stXHUwMDNlc2tfaXB2Nm9ubHkpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDA5OjQ5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01QVENQJiMzNDssCiAgICAmIzM0O01QVENQX0lQVjYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttcHRjcF9zZXRzb2Nrb3B0X3Y2X3NldF90Y2xhc3MmIzM0OywKICAgICYjMzQ7bXB0Y3Bfc2V0c29ja29wdF92NiYjMzQ7LAogICAgJiMzNDttcHRjcF9nZXRzb2Nrb3B0X3Y2JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3Igc2V0dGluZyBhbmQgZ2V0dGluZyB0aGUgSVBWNl9UQ0xBU1Mgc29ja2V0IG9wdGlvbiBvbiBNUFRDUCBzb2NrZXRzLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IGZ1bmN0aW9uIG1wdGNwX3NldHNvY2tvcHRfdjZfc2V0X3RjbGFzcyB0byBwcm9wYWdhdGUgdGhlIHRjbGFzcyB2YWx1ZSB0byBhbGwgc3ViZmxvd3MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDQxYzI1MzFhZDEzZTEzMTExNzc1ODM0ODdlNWI2MjcxZjk4OWU1ZDkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEp1bCAxMyAwOTo0OTowNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9zb2Nrb3B0LmMgYi9uZXQvbXB0Y3Avc29ja29wdC5jCmluZGV4IGZjZjZmZWIyYTllYjVkLi5lZGRkYWZlYmI4ZGVmYyAxMDA2NDQKLS0tIGEvbmV0L21wdGNwL3NvY2tvcHQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbXB0Y3Avc29ja29wdC5jCkBAIC0zOTQsNiAmIzQzOzM5NCwzNSBAQCBzdGF0aWMgaW50IG1wdGNwX3NldHNvY2tvcHRfc29sX3NvY2tldChzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBpbnQgb3B0bmFtZSwKIAlyZXR1cm4gLUVPUE5PVFNVUFA7CiB9CiAKJiM0MztzdGF0aWMgaW50IG1wdGNwX3NldHNvY2tvcHRfdjZfc2V0X3RjbGFzcyhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBpbnQgb3B0bmFtZSwKJiM0MzsJCQkJCSAgc29ja3B0cl90IG9wdHZhbCwgdW5zaWduZWQgaW50IG9wdGxlbikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtcHRjcF9zdWJmbG93X2NvbnRleHQgKnN1YmZsb3c7CiYjNDM7CXN0cnVjdCBzb2NrICpzayA9IChzdHJ1Y3Qgc29jayAqKW1zazsKJiM0MzsJaW50IGVyciwgdmFsOwomIzQzOwomIzQzOwllcnIgPSBpcHY2X3NldHNvY2tvcHQoc2ssIFNPTF9JUFY2LCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7CiYjNDM7CiYjNDM7CWlmIChlcnIgIT0gMCkKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CiYjNDM7CWxvY2tfc29jayhzayk7CiYjNDM7CXNvY2tvcHRfc2VxX2luYyhtc2spOwomIzQzOwl2YWwgPSBSRUFEX09OQ0UoaW5ldDZfc2soc2spLSZndDt0Y2xhc3MpOwomIzQzOwltcHRjcF9mb3JfZWFjaF9zdWJmbG93KG1zaywgc3ViZmxvdykgewomIzQzOwkJc3RydWN0IHNvY2sgKnNzayA9IG1wdGNwX3N1YmZsb3dfdGNwX3NvY2soc3ViZmxvdyk7CiYjNDM7CQlib29sIHNsb3c7CiYjNDM7CiYjNDM7CQlzbG93ID0gbG9ja19zb2NrX2Zhc3Qoc3NrKTsKJiM0MzsJCWluZXQ2X3NrKHNzayktJmd0O3RjbGFzcyA9IHZhbDsKJiM0MzsJCXNrX2RzdF9yZXNldChzc2spOwomIzQzOwkJdW5sb2NrX3NvY2tfZmFzdChzc2ssIHNsb3cpOwomIzQzOwl9CiYjNDM7CXJlbGVhc2Vfc29jayhzayk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgbXB0Y3Bfc2V0c29ja29wdF92NihzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBpbnQgb3B0bmFtZSwKIAkJCSAgICAgICBzb2NrcHRyX3Qgb3B0dmFsLCB1bnNpZ25lZCBpbnQgb3B0bGVuKQogewpAQCAtNDM2LDYgJiM0Mzs0NjUsOCBAQCBzdGF0aWMgaW50IG1wdGNwX3NldHNvY2tvcHRfdjYoc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgaW50IG9wdG5hbWUsCiAKIAkJcmVsZWFzZV9zb2NrKHNrKTsKIAkJYnJlYWs7CiYjNDM7CWNhc2UgSVBWNl9UQ0xBU1M6CiYjNDM7CQlyZXR1cm4gbXB0Y3Bfc2V0c29ja29wdF92Nl9zZXRfdGNsYXNzKG1zaywgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pOwogCX0KIAogCXJldHVybiByZXQ7CkBAIC0xNDg1LDYgJiM0MzsxNTE2LDkgQEAgc3RhdGljIGludCBtcHRjcF9nZXRzb2Nrb3B0X3Y2KHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIGludCBvcHRuYW1lLAogCXN0cnVjdCBzb2NrICpzayA9ICh2b2lkICopbXNrOwogCiAJc3dpdGNoIChvcHRuYW1lKSB7CiYjNDM7CWNhc2UgSVBWNl9UQ0xBU1M6CiYjNDM7CQlyZXR1cm4gbXB0Y3BfcHV0X2ludF9vcHRpb24obXNrLCBvcHR2YWwsIG9wdGxlbiwKJiM0MzsJCQkJCSAgICBSRUFEX09OQ0UoaW5ldDZfc2soc2spLSZndDt0Y2xhc3MpKTsKIAljYXNlIElQVjZfVjZPTkxZOgogCQlyZXR1cm4gbXB0Y3BfcHV0X2ludF9vcHRpb24obXNrLCBvcHR2YWwsIG9wdGxlbiwKIAkJCQkJICAgIHNrLSZndDtza19pcHY2b25seSk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDA5OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzOTcKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxMDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTVBUQ1AgSVBWNl9UQ0xBU1MgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBhaW1lZCBhdCBleHRlbmRpbmcgTVBUQ1AgZnVuY3Rpb25hbGl0eSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBJUHY2IHRyYWZmaWMgY2xhc3MgaGFuZGxpbmcuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgaW50cm9kdWNpbmcgdGhlIGFiaWxpdHkgdG8gc2V0IGFuZCByZXRyaWV2ZSB0aGUgYElQVjZfVENMQVNTYCBzb2NrZXQgb3B0aW9uIOKAkyBhIHZhbHVhYmxlIGFkZGl0aW9uLiBUaGUgY29yZSBtb2RpZmljYXRpb24gc2VlbXMgdG8gcmVzaWRlIHdpdGhpbiBgbmV0L21wdGNwL3NvY2tvcHQuY2AsIHdoaWNoIG1ha2VzIHNlbnNlIGFzIHRoaXMgZmlsZSBvZnRlbiBoYW5kbGVzIHNvY2tldC1sZXZlbCBjb25maWd1cmF0aW9ucyBmb3IgdGhlIHByb3RvY29sLgoKSSBzZWUgaXQmIzM5O3MgYWRkZWQgb3IgbW9kaWZpZWQgZnVuY3Rpb25zOiBgbXB0Y3Bfc2V0c29ja29wdF92Nl9zZXRfdGNsYXNzYCwgYG1wdGNwX3NldHNvY2tvcHRfdjZgLCBhbmQgYG1wdGNwX2dldHNvY2tvcHRfdjZgLiBUaGF0JiMzOTtzIHRoZSBleHBlY3RlZCBmb290cHJpbnQsIHNldHRpbmcgYW5kIGdldHRpbmcsIGFsb25nIHdpdGggdGhlIHdyYXBwZXIuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMsIGJ1dCBhdCBmaXJzdCBnbGFuY2UsIGl0IGFwcGVhcnMgc291bmQuIEkmIzM5O2xsIHRha2UgYSBxdWljayBsb29rIGF0IHRoZSBjb250ZXh0IGFuZCB0aGUgc3Vycm91bmRpbmcgY29kZSwgYW5kIG9mIGNvdXJzZSwgSSBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIGNvbmZpZ3VyYXRpb24gZm9yIE1QVENQIGl0c2VsZiB0byBlbnN1cmUgaXQmIzM5O3MgcHJvcGVybHkgZW5hYmxlZCBhbmQgaW50ZWdyYXRlZCB3aXRoaW4gdGhlIGJ1aWxkIHN5c3RlbS4gVGhlbiBJIGNhbiBnZXQgaW50byB0aGUgcmVhbCBkZXRhaWxzIG9mIHRoZSBpbXBsZW1lbnRhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAwOTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTVBUQ1AmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbXB0Y3AvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbXB0Y3AvS2NvbmZpZy0xLVxubmV0L21wdGNwL0tjb25maWc6Mjpjb25maWcgTVBUQ1Bcbm5ldC9tcHRjcC9LY29uZmlnLTMtXHRib29sIFwmIzM0O01QVENQOiBNdWx0aXBhdGggVENQXCYjMzQ7XG4tLVxubmV0L21wdGNwL0tjb25maWc9MTY9Y29uZmlnIElORVRfTVBUQ1BfRElBR1xuLS1cbm5ldC9tcHRjcC9LY29uZmlnLTE5LVxubmV0L21wdGNwL0tjb25maWc6MjA6Y29uZmlnIE1QVENQX0lQVjZcbm5ldC9tcHRjcC9LY29uZmlnLTIxLVx0Ym9vbCBcJiMzNDtNUFRDUDogSVB2NiBzdXBwb3J0IGZvciBNdWx0aXBhdGggVENQXCYjMzQ7XG4tLVxubmV0L21wdGNwL0tjb25maWctMjQtXG5uZXQvbXB0Y3AvS2NvbmZpZzoyNTpjb25maWcgTVBUQ1BfS1VOSVRfVEVTVFxubmV0L21wdGNwL0tjb25maWctMjYtXHR0cmlzdGF0ZSBcJiMzNDtUaGlzIGJ1aWxkcyB0aGUgTVBUQ1AgS1VuaXQgdGVzdHNcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDA5OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwMDIKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA3NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE1QVENQIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgY29uZmlndXJhdGlvbiBvcHRpb25zLCBgTVBUQ1BgIGFuZCBgTVBUQ1BfSVBWNmAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZyBjcnVjaWFsIGhlcmUuIEl0JiMzOTtzIHVzdWFsbHkgYSBnb29kIHByYWN0aWNlIHRvIHRob3JvdWdobHkgcmV2aWV3IGFsbCBhdmFpbGFibGUgb3B0aW9ucywgYXMgYSBmaWVsZCBleHBlcnQsIHRvIGd1YXJhbnRlZSBJIGZ1bGx5IHVuZGVyc3RhbmQgYWxsIHRoZSBzeXN0ZW0mIzM5O3MgY2FwYWJpbGl0aWVzLgoKTm93LCBJIHNlZSB0aGUgcGF0Y2ggaXMgc3BlY2lmaWNhbGx5IG1vZGlmeWluZyBgbXB0Y3Bfc2V0c29ja29wdF92NmAgYW5kIGBtcHRjcF9nZXRzb2Nrb3B0X3Y2YC4gQWgsIHRoaXMgaXMgaW1tZWRpYXRlbHkgaW5zaWdodGZ1bC4gR2l2ZW4gdGhlc2UgbW9kaWZpY2F0aW9ucywgYW5kIHRoZSBuYW1pbmcgY29udmVudGlvbiwgdGhlc2UgZnVuY3Rpb25zIGFyZSBhbG1vc3QgY2VydGFpbmx5IGNvbXBpbGVkIGNvbmRpdGlvbmFsbHksIGJhc2VkIG9uIHRoZSBgTVBUQ1BfSVBWNmAgZmxhZyBiZWluZyBlbmFibGVkLiBUaGlzIHRlbGxzIG1lIHRoYXQgSVBWNiBpcyBpbnRlZ3JhdGVkIHdpdGggdGhlIGBNUFRDUGAgZmVhdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAwOTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttcHRjcF9zZXRzb2Nrb3B0X3Y2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L21wdGNwL3NvY2tvcHQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbXB0Y3Avc29ja29wdC5jPTMwMD1zdGF0aWMgaW50IG1wdGNwX3NldHNvY2tvcHRfc29sX3NvY2tldChzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBpbnQgb3B0bmFtZSxcbi0tXG5uZXQvbXB0Y3Avc29ja29wdC5jLTM5Ni1cbm5ldC9tcHRjcC9zb2Nrb3B0LmM6Mzk3OnN0YXRpYyBpbnQgbXB0Y3Bfc2V0c29ja29wdF92Nl9zZXRfdGNsYXNzKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIGludCBvcHRuYW1lLFxubmV0L21wdGNwL3NvY2tvcHQuYy0zOTgtXHRcdFx0XHRcdCAgc29ja3B0cl90IG9wdHZhbCwgdW5zaWduZWQgaW50IG9wdGxlbilcbi0tXG5uZXQvbXB0Y3Avc29ja29wdC5jLTQyNS1cbm5ldC9tcHRjcC9zb2Nrb3B0LmM6NDI2OnN0YXRpYyBpbnQgbXB0Y3Bfc2V0c29ja29wdF92NihzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBpbnQgb3B0bmFtZSxcbm5ldC9tcHRjcC9zb2Nrb3B0LmMtNDI3LVx0XHRcdCAgICAgICBzb2NrcHRyX3Qgb3B0dmFsLCB1bnNpZ25lZCBpbnQgb3B0bGVuKVxuLS1cbm5ldC9tcHRjcC9zb2Nrb3B0LmMtNDY4LVx0Y2FzZSBJUFY2X1RDTEFTUzpcbm5ldC9tcHRjcC9zb2Nrb3B0LmM6NDY5Olx0XHRyZXR1cm4gbXB0Y3Bfc2V0c29ja29wdF92Nl9zZXRfdGNsYXNzKG1zaywgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pO1xubmV0L21wdGNwL3NvY2tvcHQuYy00NzAtXHR9XG4tLVxubmV0L21wdGNwL3NvY2tvcHQuYz05Mzg9aW50IG1wdGNwX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuLS1cbm5ldC9tcHRjcC9zb2Nrb3B0LmMtOTY3LVx0aWYgKGxldmVsID09IFNPTF9JUFY2KVxubmV0L21wdGNwL3NvY2tvcHQuYzo5Njg6XHRcdHJldHVybiBtcHRjcF9zZXRzb2Nrb3B0X3Y2KG1zaywgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pO1xubmV0L21wdGNwL3NvY2tvcHQuYy05NjktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDk6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzc0MgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24gaW4gdGhlIE1QVENQIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgYG1wdGNwX3NldHNvY2tvcHRfdjZgIGZ1bmN0aW9uLCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaXQmIzM5O3MgbG9jYXRlZCBpbiBgbmV0L21wdGNwL3NvY2tvcHQuY2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb21waWxhdGlvbiBwcm9jZXNzLiBNeSBwcmltYXJ5IGNvbmNlcm4gaGVyZSBpcyBkZXRlcm1pbmluZyB3aGV0aGVyIHRoYXQgZmlsZSBpdHNlbGYgaXMgY29tcGlsZWQgY29uZGl0aW9uYWxseSwgb3IgaWYgdGhlIHNwZWNpZmljIGZ1bmN0aW9uLCBgbXB0Y3Bfc2V0c29ja29wdF92NmAsIGlzIGd1YXJkZWQgYnkgYSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlLCBsaWtlIGFuIGAjaWZkZWYgQ09ORklHX01QVENQX0lQVjZgLiBVbmRlcnN0YW5kaW5nIHRoaXMgd2lsbCBiZSBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgaG93IE1QVENQJiMzOTtzIElQdjYgc3VwcG9ydCBpcyBlbmFibGVkIHdpdGhpbiB0aGUga2VybmVsLiBJIG5lZWQgdG8gY2hlY2sgZm9yIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiB0aGF0IGFmZmVjdHMgdGhlIGV4aXN0ZW5jZSBvZiB0aGlzIGZ1bmN0aW9uLiBUaGF0IGlzIG15IG5leHQgc3RlcC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAwOTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19NUFRDUF9JUFY2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L21wdGNwL3NvY2tvcHQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDk6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDAzMwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIERlZXAgaW50byBNUFRDUCBhbmQgSVB2NiBJbnRlZ3JhdGlvbioqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJIHdhcyB1bmRlciB0aGUgaW1wcmVzc2lvbiB0aGF0IHRoZSBNUFRDUCBzb2Nrb3B0IGNvZGUgaW4gYG5ldC9tcHRjcC9zb2Nrb3B0LmNgIHdvdWxkIGRlZmluaXRlbHkgYWNjb3VudCBmb3IgSVB2NiwgZXNwZWNpYWxseSB3aXRoIHRoZSBwb3RlbnRpYWwgZm9yIGR1YWwtc3RhY2sgY29uZmlndXJhdGlvbnMuIEkgbmVlZCB0byB2ZXJpZnkgaWYgdGhlIElQdjYgY29uZmlndXJhdGlvbiBpcyBlbmFibGVkLCBidXQgdGhlIGZhY3QgdGhhdCBJIGRvbiYjMzk7dCBzZWUgYENPTkZJR19NUFRDUF9JUFY2YCBvdXRyaWdodCBpcyBtYWtpbmcgbWUgc2Vjb25kIGd1ZXNzIHRoaW5ncy4gTGV0JiMzOTtzIG5vdCBtYWtlIGFzc3VtcHRpb25zIGhlcmUuIFRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSYjMzk7bSBnb2luZyB0byBzY2FuIHRoZSBgbmV0L21wdGNwL3NvY2tvcHQuY2Agc291cmNlIGNvZGUsIGxvb2tpbmcgc3BlY2lmaWNhbGx5IGZvciBhbnkgYCNpZmRlZiBDT05GSUdfSVBWNmAgZGlyZWN0aXZlcywgb3IgYW55IG90aGVyIGNvbmRpdGlvbmFsIGNoZWNrcyB0aGF0IG1pZ2h0IHN1Z2dlc3QgaG93IElQdjYgc3VwcG9ydCBpcyBoYW5kbGVkIHdpdGhpbiB0aGUgc29ja29wdCBpbXBsZW1lbnRhdGlvbi4gVGhpcyBpcyBnb2luZyB0byBiZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgaW50ZXJwbGF5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAwOTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfSVBWNiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9tcHRjcC9zb2Nrb3B0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21wdGNwL3NvY2tvcHQuYz0xMjAyPXN0YXRpYyB2b2lkIG1wdGNwX2dldF9zdWJfYWRkcnMoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19hZGRycyAqYSlcbi0tXG5uZXQvbXB0Y3Avc29ja29wdC5jLTEyMTgtXHRcdGEtXHUwMDNlc2luX3JlbW90ZS5zaW5fYWRkci5zX2FkZHIgPSBpbmV0LVx1MDAzZWluZXRfZGFkZHI7XG5uZXQvbXB0Y3Avc29ja29wdC5jOjEyMTk6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG5uZXQvbXB0Y3Avc29ja29wdC5jLTEyMjAtXHR9IGVsc2UgaWYgKHNrLVx1MDAzZXNrX2ZhbWlseSA9PSBBRl9JTkVUNikge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAwOTo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDc4CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUuIE15IGZpcnN0IHRob3VnaHQgaXM6CgoqKkNoZWNraW5nIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uIG9mIGBtcHRjcF9zZXRzb2Nrb3B0X3Y2YCoqCgpJIG5lZWQgdG8gY29uZmlybSBzb21ldGhpbmcgY3J1Y2lhbCBhYm91dCB0aGUgY29kZTogaXMgdGhlIGZ1bmN0aW9uIGBtcHRjcF9zZXRzb2Nrb3B0X3Y2YCBjb21waWxlZCB1bmNvbmRpdGlvbmFsbHk/IEluIG90aGVyIHdvcmRzLCBpcyBpdCBhbHdheXMgaW5jbHVkZWQgaW4gdGhlIGJ1aWxkLCByZWdhcmRsZXNzIG9mIHRoZSBjb25maWd1cmF0aW9uIG9yIHBsYXRmb3JtPyBUaGlzIGlzIGEgZnVuZGFtZW50YWwgcXVlc3Rpb24gZm9yIGl0cyBwb3J0YWJpbGl0eSBhbmQgaG93IGl0IGZ1bmN0aW9ucyBhcyBhIGNvbXBvbmVudCBvZiB0aGUgbGFyZ2VyIGNvZGUgYmFzZS4gSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiBvZiBpdHMgY29tcGlsYXRpb24gc3RyYXRlZ3kuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDA5OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21wdGNwX3NldHNvY2tvcHRfdjYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbXB0Y3Avc29ja29wdC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tcHRjcC9zb2Nrb3B0LmM9MzAwPXN0YXRpYyBpbnQgbXB0Y3Bfc2V0c29ja29wdF9zb2xfc29ja2V0KHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIGludCBvcHRuYW1lLFxuLS1cbm5ldC9tcHRjcC9zb2Nrb3B0LmMtMzk2LVxubmV0L21wdGNwL3NvY2tvcHQuYzozOTc6c3RhdGljIGludCBtcHRjcF9zZXRzb2Nrb3B0X3Y2X3NldF90Y2xhc3Moc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgaW50IG9wdG5hbWUsXG5uZXQvbXB0Y3Avc29ja29wdC5jLTM5OC1cdFx0XHRcdFx0ICBzb2NrcHRyX3Qgb3B0dmFsLCB1bnNpZ25lZCBpbnQgb3B0bGVuKVxuLS1cbm5ldC9tcHRjcC9zb2Nrb3B0LmMtNDI1LVxubmV0L21wdGNwL3NvY2tvcHQuYzo0MjY6c3RhdGljIGludCBtcHRjcF9zZXRzb2Nrb3B0X3Y2KHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIGludCBvcHRuYW1lLFxubmV0L21wdGNwL3NvY2tvcHQuYy00MjctXHRcdFx0ICAgICAgIHNvY2twdHJfdCBvcHR2YWwsIHVuc2lnbmVkIGludCBvcHRsZW4pXG4tLVxubmV0L21wdGNwL3NvY2tvcHQuYy00NjgtXHRjYXNlIElQVjZfVENMQVNTOlxubmV0L21wdGNwL3NvY2tvcHQuYzo0Njk6XHRcdHJldHVybiBtcHRjcF9zZXRzb2Nrb3B0X3Y2X3NldF90Y2xhc3MobXNrLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7XG5uZXQvbXB0Y3Avc29ja29wdC5jLTQ3MC1cdH1cbi0tXG5uZXQvbXB0Y3Avc29ja29wdC5jPTkzOD1pbnQgbXB0Y3Bfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG4tLVxubmV0L21wdGNwL3NvY2tvcHQuYy05NjctXHRpZiAobGV2ZWwgPT0gU09MX0lQVjYpXG5uZXQvbXB0Y3Avc29ja29wdC5jOjk2ODpcdFx0cmV0dXJuIG1wdGNwX3NldHNvY2tvcHRfdjYobXNrLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7XG5uZXQvbXB0Y3Avc29ja29wdC5jLTk2OS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDk6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTEwNAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk1QVENQIENvbmZpZ3VyYXRpb24gQ29udW5kcnVtKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBtcHRjcF9zZXRzb2Nrb3B0X3Y2YCBmdW5jdGlvbiBhbmQgc29tZXRoaW5nJiMzOTtzIG5vdCBxdWl0ZSByaWdodC4gSXQgc2VlbXMgdG8gYmUgZ2V0dGluZyBjb21waWxlZCByZWdhcmRsZXNzLCB3aGljaCBpcyBhIGJpdCBzdHJhbmdlLCBidXQgSSBzdXNwZWN0IGl0JiMzOTtzIGRlcGVuZGVudCBvbiBzb21lIG90aGVyIGZsYWcgdG8gYWN0dWFsbHkgKndvcmsqLiBNeSBndXQgc2F5cyBpdCBwcm9iYWJseSBuZWVkcyBlaXRoZXIgYE1QVENQX0lQVjZgIHRvIGJlIGVuYWJsZWQsIG9yIHBlcmhhcHMgdGhlIHdob2xlIGBNUFRDUGAgZmVhdHVyZSBpcyByZWxpYW50IG9uIElQdjYgYmVpbmcgcHJlc2VudC4gVG8gYmUgY2VydGFpbiwgSSBuZWVkIHRvIGNoZWNrIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gVGhlIGBLY29uZmlnYCBmaWxlcyBhcmUgYWx3YXlzIHRoZSBiZXN0IHBsYWNlIHRvIGZpbmQgdGhlc2Uga2luZHMgb2YgZGVwZW5kZW5jaWVzLiBMZXQgbWUgbmF2aWdhdGUgdG8gYG5ldC9tcHRjcC9LY29uZmlnYCBhbmQgc2VlIHdoYXQgdGhlIHRydXRoIG9mIHRoZSBtYXR0ZXIgaXMuIFRoYXQgc2hvdWxkIGNsZWFyIHRoaXMgdXAgcHJldHR5IHF1aWNrbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDA5OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNUFRDUF9JUFY2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L21wdGNwL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21wdGNwL0tjb25maWc9MTY9Y29uZmlnIElORVRfTVBUQ1BfRElBR1xuLS1cbm5ldC9tcHRjcC9LY29uZmlnLTE5LVxubmV0L21wdGNwL0tjb25maWc6MjA6Y29uZmlnIE1QVENQX0lQVjZcbm5ldC9tcHRjcC9LY29uZmlnLTIxLVx0Ym9vbCBcJiMzNDtNUFRDUDogSVB2NiBzdXBwb3J0IGZvciBNdWx0aXBhdGggVENQXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDA5OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0NjMKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgTVBUQ1AgS2NvbmZpZyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MgYW5kIGNyYWNrIG9wZW4gdGhlIGBuZXQvbXB0Y3AvS2NvbmZpZ2AgZmlsZS4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIE11bHRwYXRoIFRDUCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXZhaWxhYmxlIGluIHRoZSBrZXJuZWwuIFRoaXMgY29uZmlnIGZpbGUgaXMgdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIgd2hlbiBpdCBjb21lcyB0byBlbmFibGluZyBhbmQgY3VzdG9taXppbmcgTVBUQ1AmIzM5O3MgYmVoYXZpb3IuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHNlZWluZyB3aGF0IGxldmVsIG9mIGNvbnRyb2wgaXQgcHJvdmlkZXMgb3ZlciBkaWZmZXJlbnQgZmVhdHVyZXMg4oCTIHRoaW5ncyBsaWtlIHBhdGggbWFuYWdlbWVudCwgY29uZ2VzdGlvbiBjb250cm9sIGFsZ29yaXRobXMgKGFuZCB0aGUgcG90ZW50aWFsIHRvIGFkZCBjdXN0b20gb25lcyksIHN1YmZsb3cgZXN0YWJsaXNobWVudCwgYW5kIGhvdyBpdCBoYW5kbGVzIGRpZmZlcmVudCBuZXR3b3JrIGVudmlyb25tZW50cy4gSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIGEgc3RydWN0dXJlZCBicmVha2Rvd24gb2YgZGVwZW5kZW5jaWVzIGFuZCBkZWZhdWx0IHZhbHVlcywgd2hpY2ggaGVscHMgdW5kZXJzdGFuZCBob3cgdGhlIGRpZmZlcmVudCBwaWVjZXMgb2YgTVBUQ1AgZml0IHRvZ2V0aGVyLiBBcmUgdGhlcmUgYW55IGNvbmRpdGlvbmFsIGRlcGVuZGVuY2llcz8gQXJlIGFueSBmZWF0dXJlcyBleHBlcmltZW50YWwgYW5kIHRodXMgYmVoaW5kIGEgY29uZmlnIGZsYWc/IEkmIzM5O20gaG9waW5nIGl0IGNsZWFybHkgbWFwcyBvdXQgdGhlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiB0aGUgdmFyaW91cyBNUFRDUCBjb21wb25lbnRzIGFuZCB0aGVpciByZXNwZWN0aXZlIGNvbXBpbGUtdGltZSBzZXR0aW5ncy4gSXQmIzM5O3MgdGltZSB0byBzZWUgd2hhdCB0aGlzIEtjb25maWcgZmlsZSBob2xkcyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDk6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbXB0Y3AvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdFxuICAgMjpcdGNvbmZpZyBNUFRDUFxuICAgMzpcdFx0Ym9vbCBcJiMzNDtNUFRDUDogTXVsdGlwYXRoIFRDUFwmIzM0O1xuICAgNDpcdFx0ZGVwZW5kcyBvbiBJTkVUXG4gICA1Olx0XHRzZWxlY3QgU0tCX0VYVEVOU0lPTlNcbiAgIDY6XHRcdHNlbGVjdCBDUllQVE9fTElCX1NIQTI1NlxuICAgNzpcdFx0c2VsZWN0IENSWVBUT19MSUJfVVRJTFNcbiAgIDg6XHRcdGhlbHBcbiAgIDk6XHRcdCAgTXVsdGlwYXRoIFRDUCAoTVBUQ1ApIGNvbm5lY3Rpb25zIHNlbmQgYW5kIHJlY2VpdmUgZGF0YSBvdmVyIG11bHRpcGxlXG4gIDEwOlx0XHQgIHN1YmZsb3dzIGluIG9yZGVyIHRvIHV0aWxpemUgbXVsdGlwbGUgbmV0d29yayBwYXRocy4gRWFjaCBzdWJmbG93XG4gIDExOlx0XHQgIHVzZXMgdGhlIFRDUCBwcm90b2NvbCwgYW5kIFRDUCBvcHRpb25zIGNhcnJ5IGhlYWRlciBpbmZvcm1hdGlvbiBmb3JcbiAgMTI6XHRcdCAgTVBUQ1AuXG4gIDEzOlx0XG4gIDE0Olx0aWYgTVBUQ1BcbiAgMTU6XHRcbiAgMTY6XHRjb25maWcgSU5FVF9NUFRDUF9ESUFHXG4gIDE3Olx0XHRkZXBlbmRzIG9uIElORVRfRElBR1xuICAxODpcdFx0ZGVmX3RyaXN0YXRlIElORVRfRElBR1xuICAxOTpcdFxuICAyMDpcdGNvbmZpZyBNUFRDUF9JUFY2XG4gIDIxOlx0XHRib29sIFwmIzM0O01QVENQOiBJUHY2IHN1cHBvcnQgZm9yIE11bHRpcGF0aCBUQ1BcJiMzNDtcbiAgMjI6XHRcdGRlcGVuZHMgb24gSVBWNj15XG4gIDIzOlx0XHRkZWZhdWx0IHlcbiAgMjQ6XHRcbiAgMjU6XHRjb25maWcgTVBUQ1BfS1VOSVRfVEVTVFxuICAyNjpcdFx0dHJpc3RhdGUgXCYjMzQ7VGhpcyBidWlsZHMgdGhlIE1QVENQIEtVbml0IHRlc3RzXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbiAgMjc6XHRcdGRlcGVuZHMgb24gS1VOSVRcbiAgMjg6XHRcdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXG4gIDI5Olx0XHRoZWxwXG4gIDMwOlx0XHQgIEN1cnJlbnRseSBjb3ZlcnMgdGhlIE1QVENQIGNyeXB0byBhbmQgdG9rZW4gaGVscGVycy5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDk6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjEyNgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDgxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipNUFRDUCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqCgpBbHJpZ2h0LCBzbyBJIHNlZSBgTVBUQ1BgIGFuZCBgTVBUQ1BfSVBWNmAgYXMgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIGhlcmUuIE5hdHVyYWxseSwgbXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdGhhdCBgTVBUQ1BfSVBWNmAgaXMgcHJvYmFibHkgY29udGluZ2VudCBvbiBgSVBWNj15YCBiZWluZyBzZXQuIFRoYXQgbWFrZXMgaW50dWl0aXZlIHNlbnNlOyB3ZSBjYW4mIzM5O3QgZW5hYmxlIElQdjYtc3BlY2lmaWMgTVBUQ1AgZmVhdHVyZXMgd2l0aG91dCBJUHY2IGl0c2VsZi4KCk5vdywgSSBuZWVkIHRvIGNvbmZpcm0gc29tZXRoaW5nOiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhlIGBtcHRjcF9zZXRzb2Nrb3B0X3Y2YCBmdW5jdGlvbmFsaXR5IGlzIGluZGVlZCBwcm90ZWN0ZWQgYnkgdGhhdCBgI2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpYCBjb25kaXRpb25hbCB3aXRoaW4gYG5ldC9tcHRjcC9zb2Nrb3B0LmNgLiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIGNoZWNrLCBtYWtpbmcgc3VyZSB0aGUgSVB2Ni1zcGVjaWZpYyBzb2NrZXQgb3B0aW9ucyBhcmVuJiMzOTt0IGFjY2lkZW50YWxseSBleHBvc2VkIHdoZW4gSVB2NiBzdXBwb3J0IGlzIGRpc2FibGVkLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayB0aGUgY29kZSB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDk6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbXB0Y3Avc29ja29wdC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0MjA6XHRcdH1cbiA0MjE6XHRcdHJlbGVhc2Vfc29jayhzayk7XG4gNDIyOlx0XG4gNDIzOlx0XHRyZXR1cm4gMDtcbiA0MjQ6XHR9XG4gNDI1Olx0XG4gNDI2Olx0c3RhdGljIGludCBtcHRjcF9zZXRzb2Nrb3B0X3Y2KHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIGludCBvcHRuYW1lLFxuIDQyNzpcdFx0XHRcdCAgICAgICBzb2NrcHRyX3Qgb3B0dmFsLCB1bnNpZ25lZCBpbnQgb3B0bGVuKVxuIDQyODpcdHtcbiA0Mjk6XHRcdHN0cnVjdCBzb2NrICpzayA9IChzdHJ1Y3Qgc29jayAqKW1zaztcbiA0MzA6XHRcdGludCByZXQgPSAtRU9QTk9UU1VQUDtcbiA0MzE6XHRcdHN0cnVjdCBzb2NrICpzc2s7XG4gNDMyOlx0XG4gNDMzOlx0XHRzd2l0Y2ggKG9wdG5hbWUpIHtcbiA0MzQ6XHRcdGNhc2UgSVBWNl9WNk9OTFk6XG4gNDM1Olx0XHRjYXNlIElQVjZfVFJBTlNQQVJFTlQ6XG4gNDM2Olx0XHRjYXNlIElQVjZfRlJFRUJJTkQ6XG4gNDM3Olx0XHRcdGxvY2tfc29jayhzayk7XG4gNDM4Olx0XHRcdHNzayA9IF9fbXB0Y3Bfbm1wY19zayhtc2spO1xuIDQzOTpcdFx0XHRpZiAoSVNfRVJSKHNzaykpIHtcbiA0NDA6XHRcdFx0XHRyZWxlYXNlX3NvY2soc2spO1xuIDQ0MTpcdFx0XHRcdHJldHVybiBQVFJfRVJSKHNzayk7XG4gNDQyOlx0XHRcdH1cbiA0NDM6XHRcbiA0NDQ6XHRcdFx0cmV0ID0gdGNwX3NldHNvY2tvcHQoc3NrLCBTT0xfSVBWNiwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pO1xuIDQ0NTpcdFx0XHRpZiAocmV0ICE9IDApIHtcbiA0NDY6XHRcdFx0XHRyZWxlYXNlX3NvY2soc2spO1xuIDQ0NzpcdFx0XHRcdHJldHVybiByZXQ7XG4gNDQ4Olx0XHRcdH1cbiA0NDk6XHRcbiA0NTA6XHRcdFx0c29ja29wdF9zZXFfaW5jKG1zayk7XG4gNDUxOlx0XG4gNDUyOlx0XHRcdHN3aXRjaCAob3B0bmFtZSkge1xuIDQ1MzpcdFx0XHRjYXNlIElQVjZfVjZPTkxZOlxuIDQ1NDpcdFx0XHRcdHNrLVx1MDAzZXNrX2lwdjZvbmx5ID0gc3NrLVx1MDAzZXNrX2lwdjZvbmx5O1xuIDQ1NTpcdFx0XHRcdGJyZWFrO1xuIDQ1NjpcdFx0XHRjYXNlIElQVjZfVFJBTlNQQVJFTlQ6XG4gNDU3Olx0XHRcdFx0aW5ldF9hc3NpZ25fYml0KFRSQU5TUEFSRU5ULCBzayxcbiA0NTg6XHRcdFx0XHRcdFx0aW5ldF90ZXN0X2JpdChUUkFOU1BBUkVOVCwgc3NrKSk7XG4gNDU5Olx0XHRcdFx0YnJlYWs7XG4gNDYwOlx0XHRcdGNhc2UgSVBWNl9GUkVFQklORDpcbiA0NjE6XHRcdFx0XHRpbmV0X2Fzc2lnbl9iaXQoRlJFRUJJTkQsIHNrLFxuIDQ2MjpcdFx0XHRcdFx0XHRpbmV0X3Rlc3RfYml0KEZSRUVCSU5ELCBzc2spKTtcbiA0NjM6XHRcdFx0XHRicmVhaztcbiA0NjQ6XHRcdFx0fVxuIDQ2NTpcdFxuIDQ2NjpcdFx0XHRyZWxlYXNlX3NvY2soc2spO1xuIDQ2NzpcdFx0XHRicmVhaztcbiA0Njg6XHRcdGNhc2UgSVBWNl9UQ0xBU1M6XG4gNDY5Olx0XHRcdHJldHVybiBtcHRjcF9zZXRzb2Nrb3B0X3Y2X3NldF90Y2xhc3MobXNrLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDA5OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcxNTYKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIE1QVENQdjYgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBTb21ldGhpbmcgZG9lc24mIzM5O3QgZmVlbCByaWdodC4gSSB3YXMgZXhwZWN0aW5nIGBtcHRjcF9zZXRzb2Nrb3B0X3Y2YCB0byBiZSBndWFyZGVkIGJ5IGFuIGAjaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilgIGNvbmRpdGlvbmFsLiBCdXQgaXQmIzM5O3Mgbm90LiBUaGF0JiMzOTtzIHN0cmFuZ2UuIFRoaXMgY291bGQgbGVhZCB0byB1bmRlZmluZWQgYmVoYXZpb3VyIGlmIElQdjYgaXMgbm90IGVuYWJsZWQuCgpMZXQgbWUganVzdCBxdWlja2x5IHZlcmlmeSBzb21ldGhpbmcuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZSBgbmV0L21wdGNwL3NvY2tvcHQuY2AgZmlsZSBhbmQgc2VlIHdoYXQgdGhlIGJ1aWxkIGRpcmVjdGl2ZXMgbG9vayBsaWtlIHRoZXJlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBJUHY2IGNvbmZpZ3VyYXRpb24gaXMgYXBwbGllZCB0byB0aGUgc29ja2V0IG9wdGlvbnMgZmlsZS4gVGhlcmUgaXMgYSBjaGFuY2UgdGhhdCBpdCBpcyBzb21laG93IGJlaW5nIGluY2x1ZGVkLCBldmVuIHdoZW4gaXQgc2hvdWxkbiYjMzk7dCBiZS4gVGhpcyBuZWVkcyB0byBiZSB0aG9yb3VnaGx5IGludmVzdGlnYXRlZCBhbmQgcG90ZW50aWFsbHkgY29ycmVjdGVkLiBJIG5lZWQgdG8gaGF2ZSBhIGxvb2sgYXQgdGhlIGZpbGUmIzM5O3MgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMgdG8gY29uZmlybSB0aGF0IGl0JiMzOTtzIGJlaGF2aW5nIGFzIGV4cGVjdGVkIHdpdGggcmVzcGVjdCB0byB0aGUgSVB2NiBjb25maWd1cmF0aW9uIG9wdGlvbi4gVGhpcyBjb3VsZCBiZSBhIHNpZ25pZmljYW50IGJ1ZyBpZiBpdCYjMzk7cyBub3QgaGFuZGxlZCBjb3JyZWN0bHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDA5OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19NUFRDUF9JUFY2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L21wdGNwLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbXB0Y3AvY3RybC5jPTU4Nz12b2lkIF9faW5pdCBtcHRjcF9pbml0KHZvaWQpXG4tLVxubmV0L21wdGNwL2N0cmwuYy01OTUtXG5uZXQvbXB0Y3AvY3RybC5jOjU5NjojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcbm5ldC9tcHRjcC9jdHJsLmMtNTk3LWludCBfX2luaXQgbXB0Y3B2Nl9pbml0KHZvaWQpXG4tLVxubmV0L21wdGNwL29wdGlvbnMuYz0yMz1zdGF0aWMgdm9pZCBtcHRjcF9wYXJzZV9vcHRpb24oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTI0MS1cdFx0XHRcdG1wX29wdC1cdTAwM2VhZGRyLmZhbWlseSA9IEFGX0lORVQ7XG5uZXQvbXB0Y3Avb3B0aW9ucy5jOjI0MjojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcbm5ldC9tcHRjcC9vcHRpb25zLmMtMjQzLVx0XHRcdGVsc2UgaWYgKG9wc2l6ZSA9PSBUQ1BPTEVOX01QVENQX0FERF9BRERSNiB8fFxuLS1cbm5ldC9tcHRjcC9vcHRpb25zLmMtMjUyLVx0XHRcdFx0bXBfb3B0LVx1MDAzZWFkZHIuZmFtaWx5ID0gQUZfSU5FVDtcbm5ldC9tcHRjcC9vcHRpb25zLmM6MjUzOiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxubmV0L21wdGNwL29wdGlvbnMuYy0yNTQtXHRcdFx0ZWxzZSBpZiAob3BzaXplID09IFRDUE9MRU5fTVBUQ1BfQUREX0FERFI2X0JBU0UgfHxcbi0tXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTI3NC1cdFx0fVxubmV0L21wdGNwL29wdGlvbnMuYzoyNzU6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTI3Ni1cdFx0ZWxzZSB7XG4tLVxubmV0L21wdGNwL29wdGlvbnMuYz02MzI9c3RhdGljIHU2NCBhZGRfYWRkcl9nZW5lcmF0ZV9obWFjKHU2NCBrZXkxLCB1NjQga2V5Mixcbi0tXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTY0NC1cdH1cbm5ldC9tcHRjcC9vcHRpb25zLmM6NjQ1OiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxubmV0L21wdGNwL29wdGlvbnMuYy02NDYtXHRlbHNlIGlmIChhZGRyLVx1MDAzZWZhbWlseSA9PSBBRl9JTkVUNikge1xuLS1cbm5ldC9tcHRjcC9vcHRpb25zLmM9MTM4ND12b2lkIG1wdGNwX3dyaXRlX29wdGlvbnMoc3RydWN0IHRjcGhkciAqdGgsIF9fYmUzMiAqcHRyLCBzdHJ1Y3QgdGNwX3NvY2sgKnRwLFxuLS1cbm5ldC9tcHRjcC9vcHRpb25zLmMtMTU2Ny1cbm5ldC9tcHRjcC9vcHRpb25zLmM6MTU2ODojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcbm5ldC9tcHRjcC9vcHRpb25zLmMtMTU2OS1cdFx0aWYgKG9wdHMtXHUwMDNlYWRkci5mYW1pbHkgPT0gQUZfSU5FVDYpXG4tLVxubmV0L21wdGNwL29wdGlvbnMuYy0xNTg2LVx0XHR9XG5uZXQvbXB0Y3Avb3B0aW9ucy5jOjE1ODc6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTE1ODgtXHRcdGVsc2UgaWYgKG9wdHMtXHUwMDNlYWRkci5mYW1pbHkgPT0gQUZfSU5FVDYpIHtcbi0tXG5uZXQvbXB0Y3AvcG0uYz0zMz1ib29sIG1wdGNwX3BtX2FkZHJfZmFtaWxpZXNfbWF0Y2goY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9tcHRjcC9wbS5jLTM4LVxubmV0L21wdGNwL3BtLmM6Mzk6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXG5uZXQvbXB0Y3AvcG0uYy00MC1cdGJvb2wgbG9jX2lzX3Y0ID0gbG9jLVx1MDAzZWZhbWlseSA9PSBBRl9JTkVUIHx8IGlwdjZfYWRkcl92NG1hcHBlZChcdTAwMjZsb2MtXHUwMDNlYWRkcjYpO1xuLS1cbm5ldC9tcHRjcC9wbS5jPTU1PWJvb2wgbXB0Y3BfYWRkcmVzc2VzX2VxdWFsKGNvbnN0IHN0cnVjdCBtcHRjcF9hZGRyX2luZm8gKmEsXG4tLVxubmV0L21wdGNwL3BtLmMtNjItXHRcdFx0YWRkcl9lcXVhbHMgPSBhLVx1MDAzZWFkZHIuc19hZGRyID09IGItXHUwMDNlYWRkci5zX2FkZHI7XG5uZXQvbXB0Y3AvcG0uYzo2MzojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcbm5ldC9tcHRjcC9wbS5jLTY0LVx0XHRlbHNlXG4tLVxubmV0L21wdGNwL3BtLmM9ODM9dm9pZCBtcHRjcF9sb2NhbF9hZGRyZXNzKGNvbnN0IHN0cnVjdCBzb2NrX2NvbW1vbiAqc2tjLFxuLS1cbm5ldC9tcHRjcC9wbS5jLTg5LVx0XHRhZGRyLVx1MDAzZWFkZHIuc19hZGRyID0gc2tjLVx1MDAzZXNrY19yY3Zfc2FkZHI7XG5uZXQvbXB0Y3AvcG0uYzo5MDojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcbm5ldC9tcHRjcC9wbS5jLTkxLVx0ZWxzZSBpZiAoYWRkci1cdTAwM2VmYW1pbHkgPT0gQUZfSU5FVDYpXG4tLVxubmV0L21wdGNwL3BtLmM9OTY9dm9pZCBtcHRjcF9yZW1vdGVfYWRkcmVzcyhjb25zdCBzdHJ1Y3Qgc29ja19jb21tb24gKnNrYyxcbi0tXG5uZXQvbXB0Y3AvcG0uYy0xMDItXHRcdGFkZHItXHUwMDNlYWRkci5zX2FkZHIgPSBza2MtXHUwMDNlc2tjX2RhZGRyO1xubmV0L21wdGNwL3BtLmM6MTAzOiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxubmV0L21wdGNwL3BtLmMtMTA0LVx0ZWxzZSBpZiAoYWRkci1cdTAwM2VmYW1pbHkgPT0gQUZfSU5FVDYpXG4tLVxubmV0L21wdGNwL3BtX2tlcm5lbC5jPTYwNj1maWxsX2xvY2FsX2FkZHJlc3NfYW55KHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIHN0cnVjdCBtcHRjcF9hZGRyX2luZm8gKnJlbW90ZSxcbi0tXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmMtNjEyLVx0bG9jYWwtXHUwMDNlYWRkci5mYW1pbHkgPVxubmV0L21wdGNwL3BtX2tlcm5lbC5jOjYxMzojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcbm5ldC9tcHRjcC9wbV9rZXJuZWwuYy02MTQtXHRcdFx0cmVtb3RlLVx1MDAzZWZhbWlseSA9PSBBRl9JTkVUNiBcdTAwMjZcdTAwMjZcbi0tXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmM9ODUyPXN0YXRpYyBpbnQgbXB0Y3BfcG1fbmxfY3JlYXRlX2xpc3Rlbl9zb2NrZXQoc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9tcHRjcC9wbV9rZXJuZWwuYy04ODktXHRtcHRjcF9pbmZvMnNvY2thZGRyKFx1MDAyNmVudHJ5LVx1MDAzZWFkZHIsIFx1MDAyNmFkZHIsIGVudHJ5LVx1MDAzZWFkZHIuZmFtaWx5KTtcbm5ldC9tcHRjcC9wbV9rZXJuZWwuYzo4OTA6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmMtODkxLVx0aWYgKGVudHJ5LVx1MDAzZWFkZHIuZmFtaWx5ID09IEFGX0lORVQ2KVxuLS1cbm5ldC9tcHRjcC9wbV9rZXJuZWwuYy04OTUtXHRcdGVyciA9IGluZXRfYmluZF9zayhzc2ssIChzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqKVx1MDAyNmFkZHIsIGFkZHJsZW4pO1xubmV0L21wdGNwL3BtX2tlcm5lbC5jOjg5NjojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcbm5ldC9tcHRjcC9wbV9rZXJuZWwuYy04OTctXHRlbHNlIGlmIChzc2stXHUwMDNlc2tfZmFtaWx5ID09IEFGX0lORVQ2KVxuLS1cbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmM9MjI9c3RhdGljIGludCBtcHRjcF9wbV9mYW1pbHlfdG9fYWRkcihpbnQgZmFtaWx5KVxubmV0L21wdGNwL3BtX25ldGxpbmsuYy0yMy17XG5uZXQvbXB0Y3AvcG1fbmV0bGluay5jOjI0OiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxubmV0L21wdGNwL3BtX25ldGxpbmsuYy0yNS1cdGlmIChmYW1pbHkgPT0gQUZfSU5FVDYpXG4tLVxubmV0L21wdGNwL3BtX25ldGxpbmsuYz0zMT1zdGF0aWMgaW50IG1wdGNwX3BtX3BhcnNlX3BtX2FkZHJfYXR0cihzdHJ1Y3QgbmxhdHRyICp0YltdLFxuLS1cbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmMtNjMtXHRpZiAoYWRkci1cdTAwM2VmYW1pbHkgIT0gQUZfSU5FVFxubmV0L21wdGNwL3BtX25ldGxpbmsuYzo2NDojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmMtNjUtXHQgICAgXHUwMDI2XHUwMDI2IGFkZHItXHUwMDNlZmFtaWx5ICE9IEFGX0lORVQ2XG4tLVxubmV0L21wdGNwL3BtX25ldGxpbmsuYy03OC1cbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmM6Nzk6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXG5uZXQvbXB0Y3AvcG1fbmV0bGluay5jLTgwLVx0aWYgKGFkZHItXHUwMDNlZmFtaWx5ID09IEFGX0lORVQ2KVxuLS1cbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmM9MTMxPXN0YXRpYyBpbnQgbXB0Y3BfbmxfZmlsbF9hZGRyKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L21wdGNwL3BtX25ldGxpbmsuYy0xNTYtXHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xubmV0L21wdGNwL3BtX25ldGxpbmsuYzoxNTc6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXG5uZXQvbXB0Y3AvcG1fbmV0bGluay5jLTE1OC1cdGVsc2UgaWYgKGFkZHItXHUwMDNlZmFtaWx5ID09IEFGX0lORVQ2IFx1MDAyNlx1MDAyNlxuLS1cbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmM9Mjk4PXN0YXRpYyBpbnQgbXB0Y3BfZXZlbnRfYWRkX3N1YmZsb3coc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHNvY2sgKnNzaylcbi0tXG5uZXQvbXB0Y3AvcG1fbmV0bGluay5jLTMxMi1cdFx0YnJlYWs7XG5uZXQvbXB0Y3AvcG1fbmV0bGluay5jOjMxMzojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmMtMzE0LVx0Y2FzZSBBRl9JTkVUNjoge1xuLS1cbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmM9NDY1PXZvaWQgbXB0Y3BfZXZlbnRfYWRkcl9hbm5vdW5jZWQoY29uc3Qgc3RydWN0IHNvY2sgKnNzayxcbi0tXG5uZXQvbXB0Y3AvcG1fbmV0bGluay5jLTUwMi1cdFx0YnJlYWs7XG5uZXQvbXB0Y3AvcG1fbmV0bGluay5jOjUwMzojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmMtNTA0LVx0Y2FzZSBBRl9JTkVUNjpcbi0tXG5uZXQvbXB0Y3AvcG1fbmV0bGluay5jPTUyMj12b2lkIG1wdGNwX2V2ZW50X3BtX2xpc3RlbmVyKGNvbnN0IHN0cnVjdCBzb2NrICpzc2ssXG4tLVxubmV0L21wdGNwL3BtX25ldGxpbmsuYy01NTEtXHRcdGJyZWFrO1xubmV0L21wdGNwL3BtX25ldGxpbmsuYzo1NTI6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXG5uZXQvbXB0Y3AvcG1fbmV0bGluay5jLTU1My1cdGNhc2UgQUZfSU5FVDY6IHtcbi0tXG5uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmM9NDMyPXN0YXRpYyBzdHJ1Y3Qgc29jayAqbXB0Y3BfbmxfZmluZF9zc2soc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcbi0tXG5uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmMtNDU3LVx0XHRcdGJyZWFrO1xubmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jOjQ1ODojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcbm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYy00NTktXHRcdGNhc2UgQUZfSU5FVDY6IHtcbi0tXG5uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmM9NDc4PWludCBtcHRjcF9wbV9ubF9zdWJmbG93X2Rlc3Ryb3lfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYy01MDYtXG5uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmM6NTA3OiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxubmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jLTUwOC1cdGlmIChhZGRyX2wuYWRkci5mYW1pbHkgPT0gQUZfSU5FVCBcdTAwMjZcdTAwMjYgaXB2Nl9hZGRyX3Y0bWFwcGVkKFx1MDAyNmFkZHJfci5hZGRyNikpIHtcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yMC0jaW5jbHVkZSBcdTAwM2NuZXQvdGNwX3N0YXRlcy5oXHUwMDNlXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoyMTojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTIyLSNpbmNsdWRlIFx1MDAzY25ldC90cmFuc3BfdjYuaFx1MDAzZVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jPTMxPXN0YXRpYyB1bnNpZ25lZCBpbnQgbXB0Y3BfaW5xX2hpbnQoY29uc3Qgc3RydWN0IHNvY2sgKnNrKTtcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zNS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jOjM2OiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxubmV0L21wdGNwL3Byb3RvY29sLmMtMzctc3RydWN0IG1wdGNwNl9zb2NrIHtcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz02ND1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyAqbXB0Y3BfZmFsbGJhY2tfdGNwX29wcyhjb25zdCBzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtNjctXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzo2ODojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTY5LVx0aWYgKGZhbWlseSA9PSBBRl9JTkVUNilcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0zMzk3PXN0YXRpYyB2b2lkIG1wdGNwX2NvcHlfaW5hZGRycyhzdHJ1Y3Qgc29jayAqbXNrLCBjb25zdCBzdHJ1Y3Qgc29jayAqc3NrKVxubmV0L21wdGNwL3Byb3RvY29sLmMtMzM5OC17XG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzozMzk5OiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxubmV0L21wdGNwL3Byb3RvY29sLmMtMzQwMC1cdGNvbnN0IHN0cnVjdCBpcHY2X3BpbmZvICpzc2s2ID0gaW5ldDZfc2soc3NrKTtcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0zNDQyPXN0YXRpYyBpbnQgbXB0Y3BfZGlzY29ubmVjdChzdHJ1Y3Qgc29jayAqc2ssIGludCBmbGFncylcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zNTA0LVxubmV0L21wdGNwL3Byb3RvY29sLmM6MzUwNTojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTM1MDYtc3RhdGljIHN0cnVjdCBpcHY2X3BpbmZvICptcHRjcF9pbmV0Nl9zayhjb25zdCBzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmM9MzU1Mz1zdHJ1Y3Qgc29jayAqbXB0Y3Bfc2tfY2xvbmVfaW5pdChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMzU2NS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jOjM1NjY6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zNTY3LVx0aWYgKG5zay1cdTAwM2Vza19mYW1pbHkgPT0gQUZfSU5FVDYpXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMzU3Mi1cbm5ldC9tcHRjcC9wcm90b2NvbC5jOjM1NzM6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zNTc0LVx0aWYgKG5zay1cdTAwM2Vza19mYW1pbHkgPT0gQUZfSU5FVDYpXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmM9NDA5OT1zdGF0aWMgaW50IG1wdGNwX2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKnVhZGRyLCBpbnQgYWRkcl9sZW4pXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtNDExMy1cdFx0ZXJyID0gaW5ldF9iaW5kX3NrKHNzaywgdWFkZHIsIGFkZHJfbGVuKTtcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjQxMTQ6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy00MTE1LVx0ZWxzZSBpZiAoc2stXHUwMDNlc2tfZmFtaWx5ID09IEFGX0lORVQ2KVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jPTQ2MzU9dm9pZCBfX2luaXQgbXB0Y3BfcHJvdG9faW5pdCh2b2lkKVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTQ2NzQtXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzo0Njc1OiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxubmV0L21wdGNwL3Byb3RvY29sLmMtNDY3Ni1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBtcHRjcF92Nl9zdHJlYW1fb3BzID0ge1xuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5oPTkxMj12b2lkIF9faW5pdCBtcHRjcF9wcm90b19pbml0KHZvaWQpO1xubmV0L21wdGNwL3Byb3RvY29sLmg6OTEzOiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxubmV0L21wdGNwL3Byb3RvY29sLmgtOTE0LWludCBfX2luaXQgbXB0Y3BfcHJvdG9fdjZfaW5pdCh2b2lkKTtcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE3LSNpbmNsdWRlIFx1MDAzY25ldC9wcm90b2NvbC5oXHUwMDNlXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjE4OiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxubmV0L21wdGNwL3N1YmZsb3cuYy0xOS0jaW5jbHVkZSBcdTAwM2NuZXQvaXA2X3JvdXRlLmhcdTAwM2Vcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTM1OD1zdGF0aWMgaW50IHN1YmZsb3dfdjRfc2VuZF9zeW5hY2soY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsXG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYy0zNzAtXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjM3MTojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcbm5ldC9tcHRjcC9zdWJmbG93LmMtMzcyLXN0YXRpYyBpbnQgc3ViZmxvd192Nl9zZW5kX3N5bmFjayhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBkc3RfZW50cnkgKmRzdCxcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTY0OT1zdGF0aWMgaW50IHN1YmZsb3dfcmVidWlsZF9oZWFkZXIoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmMtNjU4LVxubmV0L21wdGNwL3N1YmZsb3cuYzo2NTk6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTY2MC1zdGF0aWMgaW50IHN1YmZsb3dfdjZfcmVidWlsZF9oZWFkZXIoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmM9NjkyPXN0YXRpYyB2b2lkIHN1YmZsb3dfdjRfcmVxX2Rlc3RydWN0b3Ioc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmMtNjk3LVxubmV0L21wdGNwL3N1YmZsb3cuYzo2OTg6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTY5OS1zdGF0aWMgc3RydWN0IHJlcXVlc3Rfc29ja19vcHMgbXB0Y3Bfc3ViZmxvd192Nl9yZXF1ZXN0X3NvY2tfb3BzIF9fcm9fYWZ0ZXJfaW5pdDtcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTczNz1zdHJ1Y3QgcmVxdWVzdF9zb2NrICptcHRjcF9zdWJmbG93X3JlcXNrX2FsbG9jKGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2tfb3BzICpvcHMsXG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYy03NDItXHRcdG9wcyA9IFx1MDAyNm1wdGNwX3N1YmZsb3dfdjRfcmVxdWVzdF9zb2NrX29wcztcbm5ldC9tcHRjcC9zdWJmbG93LmM6NzQzOiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxubmV0L21wdGNwL3N1YmZsb3cuYy03NDQtXHRlbHNlIGlmIChvcHMtXHUwMDNlZmFtaWx5ID09IEFGX0lORVQ2KVxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmM9MTU1Mz1zdWJmbG93X2RlZmF1bHRfYWZfb3BzKHN0cnVjdCBzb2NrICpzaylcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTU1NC17XG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjE1NTU6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE1NTYtXHRpZiAoc2stXHUwMDNlc2tfZmFtaWx5ID09IEFGX0lORVQ2KVxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmMtMTU2MS1cbm5ldC9tcHRjcC9zdWJmbG93LmM6MTU2MjojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTU2My12b2lkIG1wdGNwdjZfaGFuZGxlX21hcHBlZChzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgbWFwcGVkKVxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmM9MTU4Mj12b2lkIG1wdGNwX2luZm8yc29ja2FkZHIoY29uc3Qgc3RydWN0IG1wdGNwX2FkZHJfaW5mbyAqaW5mbyxcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE1OTItXHRcdFx0aW5fYWRkci1cdTAwM2VzaW5fYWRkciA9IGluZm8tXHUwMDNlYWRkcjtcbm5ldC9tcHRjcC9zdWJmbG93LmM6MTU5MzojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTU5NC1cdFx0ZWxzZSBpZiAoaXB2Nl9hZGRyX3Y0bWFwcGVkKFx1MDAyNmluZm8tXHUwMDNlYWRkcjYpKVxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmMtMTU5OC1cdH1cbm5ldC9tcHRjcC9zdWJmbG93LmM6MTU5OTojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTYwMC1cdGVsc2UgaWYgKGFkZHItXHUwMDNlc3NfZmFtaWx5ID09IEFGX0lORVQ2KSB7XG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYz0xNjEzPWludCBfX21wdGNwX3N1YmZsb3dfY29ubmVjdChzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBtcHRjcF9wbV9sb2NhbCAqbG9jYWwsXG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYy0xNjQ4LVx0XHRcdGxvY2FsX2lkID0gLTE7XG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjE2NDk6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE2NTAtXHR9IGVsc2UgaWYgKHNrLVx1MDAzZXNrX2ZhbWlseSA9PSBBRl9JTkVUNikge1xuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmMtMTY2NS1cdGFkZHJsZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTtcbm5ldC9tcHRjcC9zdWJmbG93LmM6MTY2NjojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTY2Ny1cdGlmIChhZGRyLnNzX2ZhbWlseSA9PSBBRl9JTkVUNilcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTE3NTY9c3RhdGljIHZvaWQgbXB0Y3Bfc3ViZmxvd19vcHNfb3ZlcnJpZGUoc3RydWN0IHNvY2sgKnNzaylcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTc1Ny17XG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjE3NTg6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE3NTktXHRpZiAoc3NrLVx1MDAzZXNrX3Byb3QgPT0gXHUwMDI2dGNwdjZfcHJvdClcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTE3NjY9c3RhdGljIHZvaWQgbXB0Y3Bfc3ViZmxvd19vcHNfdW5kb19vdmVycmlkZShzdHJ1Y3Qgc29jayAqc3NrKVxubmV0L21wdGNwL3N1YmZsb3cuYy0xNzY3LXtcbm5ldC9tcHRjcC9zdWJmbG93LmM6MTc2ODojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTc2OS1cdGlmIChzc2stXHUwMDNlc2tfcHJvdCA9PSBcdTAwMjZ0Y3B2Nl9wcm90X292ZXJyaWRlKVxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmM9MjE0MT12b2lkIF9faW5pdCBtcHRjcF9zdWJmbG93X2luaXQodm9pZClcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTIxNzMtXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjIxNzQ6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTIxNzUtdm9pZCBfX2luaXQgbXB0Y3Bfc3ViZmxvd192Nl9pbml0KHZvaWQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDA5OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyODAwCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gYW4gZXhwZXJ0IGluIG5ldHdvcmsgcHJvZ3JhbW1pbmcgYW5kIE1QVENQLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKkRpZ2dpbmcgaW50byB0aGUgTVBUQ1AgU29ja2V0IE9wdGlvbnMqKgoKUmlnaHQsIHNvIGBtcHRjcF9zZXRzb2Nrb3B0X3Y2YCBpcyBkZWZpbml0ZWx5IHRoZSB0YXJnZXQgd2hlbiB3ZSYjMzk7cmUgc2V0dGluZyBJUHY2LXNwZWNpZmljIHNvY2tldCBvcHRpb25zIHVzaW5nIE1QVENQLiBUaGF0IG1ha2VzIHNlbnNlLCBsb2dpY2FsbHkuIFdlJiMzOTtyZSB1c2luZyBgU09MX0lQVjZgIGFzIHRoZSBsZXZlbC4gTm93LCBJIG5lZWQgdG8gc2VlICpob3cqIHRoaXMgaW50ZXJhY3Rpb24gd29ya3Mgd2l0aGluIHRoZSBiaWdnZXIgcGljdHVyZS4gTGV0IG1lIHB1bGwgdXAgYG5ldC9tcHRjcC9zb2Nrb3B0LmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93LiBJJiMzOTtsbCBmb2N1cyBvbiBgbXB0Y3Bfc2V0c29ja29wdGAgZmlyc3QsIG9mIGNvdXJzZSwgYmVjYXVzZSB0aGF0JiMzOTtzIHRoZSBlbnRyeSBwb2ludC4gSSB3YW50IHRvIHNlZSBob3cgaXQgaGFuZGxlcyB0aGUgZGlmZmVyZW50IGxldmVscyBhbmQgd2hhdCBhY3Rpb25zIGl0IHRha2VzIGRlcGVuZGluZyBvbiB0aGUgbGV2ZWwgc3BlY2lmaWVkLiBUaGUgSVB2NiBjYXNlIGlzIHdoYXQgaW50ZXJlc3RzIG1lLCBidXQgSSYjMzk7bGwgbWFrZSBzdXJlIHRvIG5vdGUgdGhlIG90aGVyIG9wdGlvbnMgYWxvbmcgdGhlIHdheS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDk6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbXB0Y3Avc29ja29wdC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTM4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA5Mzg6XHRpbnQgbXB0Y3Bfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG4gOTM5Olx0XHRcdCAgICAgc29ja3B0cl90IG9wdHZhbCwgdW5zaWduZWQgaW50IG9wdGxlbilcbiA5NDA6XHR7XG4gOTQxOlx0XHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrID0gbXB0Y3Bfc2soc2spO1xuIDk0MjpcdFx0c3RydWN0IHNvY2sgKnNzaztcbiA5NDM6XHRcbiA5NDQ6XHRcdHByX2RlYnVnKFwmIzM0O21zaz0lcFxcblwmIzM0OywgbXNrKTtcbiA5NDU6XHRcbiA5NDY6XHRcdGlmIChsZXZlbCA9PSBTT0xfU09DS0VUKVxuIDk0NzpcdFx0XHRyZXR1cm4gbXB0Y3Bfc2V0c29ja29wdF9zb2xfc29ja2V0KG1zaywgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pO1xuIDk0ODpcdFxuIDk0OTpcdFx0aWYgKCFtcHRjcF9zdXBwb3J0ZWRfc29ja29wdChsZXZlbCwgb3B0bmFtZSkpXG4gOTUwOlx0XHRcdHJldHVybiAtRU5PUFJPVE9PUFQ7XG4gOTUxOlx0XG4gOTUyOlx0XHQvKiBAQCB0aGUgbWVhbmluZyBvZiBzZXRzb2Nrb3B0KCkgd2hlbiB0aGUgc29ja2V0IGlzIGNvbm5lY3RlZCBhbmRcbiA5NTM6XHRcdCAqIHRoZXJlIGFyZSBtdWx0aXBsZSBzdWJmbG93cyBpcyBub3QgeWV0IGRlZmluZWQuIEl0IGlzIHVwIHRvIHRoZVxuIDk1NDpcdFx0ICogTVBUQ1AtbGV2ZWwgc29ja2V0IHRvIGNvbmZpZ3VyZSB0aGUgc3ViZmxvd3MgdW50aWwgdGhlIHN1YmZsb3dcbiA5NTU6XHRcdCAqIGlzIGluIFRDUCBmYWxsYmFjaywgd2hlbiBUQ1Agc29ja2V0IG9wdGlvbnMgYXJlIHBhc3NlZCB0aHJvdWdoXG4gOTU2Olx0XHQgKiB0byB0aGUgb25lIHJlbWFpbmluZyBzdWJmbG93LlxuIDk1NzpcdFx0ICovXG4gOTU4Olx0XHRsb2NrX3NvY2soc2spO1xuIDk1OTpcdFx0c3NrID0gX19tcHRjcF90Y3BfZmFsbGJhY2sobXNrKTtcbiA5NjA6XHRcdHJlbGVhc2Vfc29jayhzayk7XG4gOTYxOlx0XHRpZiAoc3NrKVxuIDk2MjpcdFx0XHRyZXR1cm4gdGNwX3NldHNvY2tvcHQoc3NrLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pO1xuIDk2MzpcdFxuIDk2NDpcdFx0aWYgKGxldmVsID09IFNPTF9JUClcbiA5NjU6XHRcdFx0cmV0dXJuIG1wdGNwX3NldHNvY2tvcHRfdjQobXNrLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7XG4gOTY2Olx0XG4gOTY3Olx0XHRpZiAobGV2ZWwgPT0gU09MX0lQVjYpXG4gOTY4Olx0XHRcdHJldHVybiBtcHRjcF9zZXRzb2Nrb3B0X3Y2KG1zaywgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pO1xuIDk2OTpcdFxuIDk3MDpcdFx0aWYgKGxldmVsID09IFNPTF9UQ1ApXG4gOTcxOlx0XHRcdHJldHVybiBtcHRjcF9zZXRzb2Nrb3B0X3NvbF90Y3AobXNrLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7XG4gOTcyOlx0XG4gOTczOlx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gOTc0Olx0fVxuIDk3NTpcdFxuIDk3NjpcdHN0YXRpYyBpbnQgbXB0Y3BfZ2V0c29ja29wdF9maXJzdF9zZl9vbmx5KHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG4gOTc3Olx0XHRcdFx0XHRcdCAgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IF9fdXNlciAqb3B0bGVuKVxuIDk3ODpcdHtcbiA5Nzk6XHRcdHN0cnVjdCBzb2NrICpzayA9IChzdHJ1Y3Qgc29jayAqKW1zaztcbiA5ODA6XHRcdHN0cnVjdCBzb2NrICpzc2s7XG4gOTgxOlx0XHRpbnQgcmV0O1xuIDk4MjpcdFxuIDk4MzpcdFx0bG9ja19zb2NrKHNrKTtcbiA5ODQ6XHRcdHNzayA9IG1zay1cdTAwM2VmaXJzdDtcbiA5ODU6XHRcdGlmIChzc2spXG4gOTg2Olx0XHRcdGdvdG8gZ2V0O1xuIDk4NzpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAwOTo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzkxMQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDE0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBNUFRDUCBJUFY2IFRDTEFTUyBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgY29kZSwgYG1wdGNwX3NldHNvY2tvcHRfdjZgIGlzIGJlaW5nIGNvbXBpbGVkIGluIHJlZ2FyZGxlc3Mgb2YgYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb24g4oCTIHRoYXQmIzM5O3Mgc29tZXRoaW5nIHRvIGtlZXAgaW4gbWluZC4gSSBzZWUgaXQmIzM5O3MgdHJpZ2dlcmVkIHdoZW4gdGhlIGBsZXZlbGAgYXJndW1lbnQgaXMgYFNPTF9JUFY2YC4gVGhlIHBhdGNoIGludHJvZHVjZXMgYElQVjZfVENMQVNTYCBmdW5jdGlvbmFsaXR5IHdpdGhpbiBgbXB0Y3Bfc2V0c29ja29wdF92NmAgYW5kLCBieSBleHRlbnNpb24sIGBtcHRjcF9nZXRzb2Nrb3B0X3Y2YC4gVGhlIGtleSB0aGluZyBoZXJlIGlzIGhvdyBgbXB0Y3Bfc2V0c29ja29wdF92Nl9zZXRfdGNsYXNzYCB3b3JrczogaXQgaXRlcmF0ZXMgdGhyb3VnaCBhbGwgdGhlIHN1YmZsb3dzIG9mIGFuIE1QVENQIGNvbm5lY3Rpb24gYW5kIHNldHMgdGhlIFRyYWZmaWMgQ2xhc3MgKGB0Y2xhc3NgKSBvbiBlYWNoIGBpbmV0Nl9za2AgdG8gdGhlIHByb3ZpZGVkIGB2YWxgLiBGcm9tIGEgZnVuY3Rpb25hbCBwZXJzcGVjdGl2ZSwgdGhpcyBpcyBhIGNsZWFyIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gVGhlIGZhY3QgdGhhdCBpdCBpbnRlcmFjdHMgd2l0aCBhbGwgc3ViZmxvd3MgaXMgZXNwZWNpYWxseSBpbnRlcmVzdGluZywgYW5kIGxpa2VseSB3aGVyZSB2dWxuZXJhYmlsaXRpZXMgY291bGQgYmUgZXhwb3NlZC4KCk5vdywgYmVmb3JlIEkgZGlnIGluIGRlZXBlciwgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGBJUFY2X1RDTEFTU2AgaXMgZXZlbiAqcGVybWl0dGVkKiB3aXRoaW4gdGhlIE1QVENQIGNvbnRleHQuIExldCYjMzk7cyBxdWlja2x5IGNoZWNrIHRoZSBgbXB0Y3Bfc3VwcG9ydGVkX3NvY2tvcHRgIGZ1bmN0aW9uIHRvIGNvbmZpcm0gdGhhdCB0aGlzIG5ldyBvcHRpb24gaXMgaGFuZGxlZCBjb3JyZWN0bHkuIElmIHRoZSBzdXBwb3J0IGlzbiYjMzk7dCB0aGVyZSwgd2UmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDA5OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21wdGNwX3N1cHBvcnRlZF9zb2Nrb3B0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L21wdGNwL3NvY2tvcHQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbXB0Y3Avc29ja29wdC5jPTQyNj1zdGF0aWMgaW50IG1wdGNwX3NldHNvY2tvcHRfdjYoc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgaW50IG9wdG5hbWUsXG4tLVxubmV0L21wdGNwL3NvY2tvcHQuYy00NzQtXG5uZXQvbXB0Y3Avc29ja29wdC5jOjQ3NTpzdGF0aWMgYm9vbCBtcHRjcF9zdXBwb3J0ZWRfc29ja29wdChpbnQgbGV2ZWwsIGludCBvcHRuYW1lKVxubmV0L21wdGNwL3NvY2tvcHQuYy00NzYte1xuLS1cbm5ldC9tcHRjcC9zb2Nrb3B0LmM9OTM4PWludCBtcHRjcF9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbi0tXG5uZXQvbXB0Y3Avc29ja29wdC5jLTk0OC1cbm5ldC9tcHRjcC9zb2Nrb3B0LmM6OTQ5Olx0aWYgKCFtcHRjcF9zdXBwb3J0ZWRfc29ja29wdChsZXZlbCwgb3B0bmFtZSkpXG5uZXQvbXB0Y3Avc29ja29wdC5jLTk1MC1cdFx0cmV0dXJuIC1FTk9QUk9UT09QVDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDk6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ2MjEKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkmIzM5O3JlIG15IG93bjoKCioqQW5hbHl6aW5nIHRoZSBtcHRjcF9zdXBwb3J0ZWRfc29ja29wdCBDb2RlKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IGludG8gaXQuIEkmIzM5O20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGBtcHRjcF9zdXBwb3J0ZWRfc29ja29wdGAgY29kZS4gSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgdGhlIHNvY2tldCBvcHRpb25zIGZvciBNdWx0aXBhdGggVENQLiBUaGlzIG1lYW5zIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIG1lY2hhbmlzbXMgYnkgd2hpY2ggYW4gYXBwbGljYXRpb24gY2FuIHRlbGwgdGhlIGtlcm5lbCwgJiMzNDtIZXksIEkgd2FudCB0byB1c2UgTVBUQ1AmIzM0OyBhbmQgcG90ZW50aWFsbHksIHdoYXQgc3BlY2lmaWMgTVBUQ1AgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZCBhbmQgZW5hYmxlZCBmb3IgdGhpcyBzb2NrZXQuIEkmIzM5O2xsIGJlIHNlYXJjaGluZyBmb3IgaG93IHRoZSBrZXJuZWwgZXhwb3NlcyB0aGUgTVBUQ1AgY2FwYWJpbGl0eSB0byB1c2VyIHNwYWNlLiBJdCBzaG91bGQgaW5jbHVkZSB0aGUgc3lzdGVtIGNhbGxzLCBzdHJ1Y3RzLCBhbmQgbGlrZWx5IGZsYWdzIG9yIHZhbHVlcyByZWxhdGVkIHRvIHNvY2tldCBvcHRpb25zIChsaWtlIGBzZXRzb2Nrb3B0YCBhbmQgYGdldHNvY2tvcHRgKSB0aGF0IGFyZSBzcGVjaWZpY2FsbHkgcmVsZXZhbnQgdG8gTVBUQ1AgY29uZmlndXJhdGlvbnMuIEkmIzM5O20gYW50aWNpcGF0aW5nIHRoZXJlIHdpbGwgYmUgc29tZSBjaGVja3MgYW5kIGJhbGFuY2VzIGluIHRoZXJlOiBwZXJoYXBzIHZhbGlkYXRpb24gdG8gZW5zdXJlIHRoZSBrZXJuZWwgaXMgY29tcGlsZWQgd2l0aCBNUFRDUCBzdXBwb3J0LCBhbmQgbWF5YmUgc29tZSBydW50aW1lIGNoZWNrcyBkZXBlbmRpbmcgb24gdGhlIGtlcm5lbCB2ZXJzaW9uIG9yIG90aGVyIGNvbmZpZ3VyYXRpb25zLiBJJiMzOTtsbCBiZSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiB1bmRlcnN0YW5kaW5nIGhvdyB0aGlzIGBzb2Nrb3B0YCBpbnRlcmFjdHMgd2l0aCB0aGUgdW5kZXJseWluZyBUQ1Agc3RhY2ssIGFuZCBob3cgaXQgaGFuZGxlcyBkaWZmZXJlbnQgTVBUQ1Atc3BlY2lmaWMgYmVoYXZpb3JzIGFuZCBzZXR0aW5ncy4gSeKAmWxsIGFsc28gYmUgbG9va2luZyBmb3IgYW55IGluZGljYXRpb25zIGFib3V0IHBvdGVudGlhbCBzZWN1cml0eSBjb25zaWRlcmF0aW9ucyBpbiBleHBvc2luZyB0aGlzIGZ1bmN0aW9uYWxpdHkuIFVsdGltYXRlbHksIEkmIzM5O20gaG9waW5nIHRvIGdldCBhIHNvbGlkIGdyYXNwIG9mIGhvdyB0aGlzIGtlcm5lbCBjb2RlIGVuYWJsZXMgYW5kIGNvbnRyb2xzIE1QVENQIHVzYWdlIGF0IHRoZSBzb2NrZXQgbGV2ZWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDA5OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L21wdGNwL3NvY2tvcHQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ3NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDc1Olx0c3RhdGljIGJvb2wgbXB0Y3Bfc3VwcG9ydGVkX3NvY2tvcHQoaW50IGxldmVsLCBpbnQgb3B0bmFtZSlcbiA0NzY6XHR7XG4gNDc3Olx0XHRpZiAobGV2ZWwgPT0gU09MX0lQKSB7XG4gNDc4Olx0XHRcdHN3aXRjaCAob3B0bmFtZSkge1xuIDQ3OTpcdFx0XHQvKiBzaG91bGQgd29yayBmaW5lICovXG4gNDgwOlx0XHRcdGNhc2UgSVBfRlJFRUJJTkQ6XG4gNDgxOlx0XHRcdGNhc2UgSVBfVFJBTlNQQVJFTlQ6XG4gNDgyOlx0XHRcdGNhc2UgSVBfQklORF9BRERSRVNTX05PX1BPUlQ6XG4gNDgzOlx0XHRcdGNhc2UgSVBfTE9DQUxfUE9SVF9SQU5HRTpcbiA0ODQ6XHRcbiA0ODU6XHRcdFx0LyogdGhlIGZvbGxvd2luZyBhcmUgY29udHJvbCBjbXNnIHJlbGF0ZWQgKi9cbiA0ODY6XHRcdFx0Y2FzZSBJUF9QS1RJTkZPOlxuIDQ4NzpcdFx0XHRjYXNlIElQX1JFQ1ZUVEw6XG4gNDg4Olx0XHRcdGNhc2UgSVBfUkVDVlRPUzpcbiA0ODk6XHRcdFx0Y2FzZSBJUF9SRUNWT1BUUzpcbiA0OTA6XHRcdFx0Y2FzZSBJUF9SRVRPUFRTOlxuIDQ5MTpcdFx0XHRjYXNlIElQX1BBU1NTRUM6XG4gNDkyOlx0XHRcdGNhc2UgSVBfUkVDVk9SSUdEU1RBRERSOlxuIDQ5MzpcdFx0XHRjYXNlIElQX0NIRUNLU1VNOlxuIDQ5NDpcdFx0XHRjYXNlIElQX1JFQ1ZGUkFHU0laRTpcbiA0OTU6XHRcbiA0OTY6XHRcdFx0LyogY29tbW9uIHN0dWZmIHRoYXQgbmVlZCBzb21lIGxvdmUgKi9cbiA0OTc6XHRcdFx0Y2FzZSBJUF9UT1M6XG4gNDk4Olx0XHRcdGNhc2UgSVBfVFRMOlxuIDQ5OTpcdFx0XHRjYXNlIElQX01UVV9ESVNDT1ZFUjpcbiA1MDA6XHRcdFx0Y2FzZSBJUF9SRUNWRVJSOlxuIDUwMTpcdFxuIDUwMjpcdFx0XHQvKiBwb3NzaWJseSBsZXNzIGNvbW1vbiBtYXkgZGVzZXJ2ZSBzb21lIGxvdmUgKi9cbiA1MDM6XHRcdFx0Y2FzZSBJUF9NSU5UVEw6XG4gNTA0Olx0XG4gNTA1Olx0XHRcdC8qIHRoZSBmb2xsb3dpbmcgaXMgYXBwYXJlbnRseSBhIG5vLW9wIGZvciBwbGFpbiBUQ1AgKi9cbiA1MDY6XHRcdFx0Y2FzZSBJUF9SRUNWRVJSX1JGQzQ4ODQ6XG4gNTA3Olx0XHRcdFx0cmV0dXJuIHRydWU7XG4gNTA4Olx0XHRcdH1cbiA1MDk6XHRcbiA1MTA6XHRcdFx0LyogSVBfT1BUSU9OUyBpcyBub3Qgc3VwcG9ydGVkLCBuZWVkcyBzdWJmbG93IGNhcmUgKi9cbiA1MTE6XHRcdFx0LyogSVBfSERSSU5DTCwgSVBfTk9ERUZSQUcgYXJlIG5vdCBzdXBwb3J0ZWQsIFJBVyBzcGVjaWZpYyAqL1xuIDUxMjpcdFx0XHQvKiBJUF9NVUxUSUNBU1RfVFRMLCBJUF9NVUxUSUNBU1RfTE9PUCwgSVBfVU5JQ0FTVF9JRixcbiA1MTM6XHRcdFx0ICogSVBfQUREX01FTUJFUlNISVAsIElQX0FERF9TT1VSQ0VfTUVNQkVSU0hJUCwgSVBfRFJPUF9NRU1CRVJTSElQLFxuIDUxNDpcdFx0XHQgKiBJUF9EUk9QX1NPVVJDRV9NRU1CRVJTSElQLCBJUF9CTE9DS19TT1VSQ0UsIElQX1VOQkxPQ0tfU09VUkNFLFxuIDUxNTpcdFx0XHQgKiBNQ0FTVF9KT0lOX0dST1VQLCBNQ0FTVF9MRUFWRV9HUk9VUCBNQ0FTVF9KT0lOX1NPVVJDRV9HUk9VUCxcbiA1MTY6XHRcdFx0ICogTUNBU1RfTEVBVkVfU09VUkNFX0dST1VQLCBNQ0FTVF9CTE9DS19TT1VSQ0UsIE1DQVNUX1VOQkxPQ0tfU09VUkNFLFxuIDUxNzpcdFx0XHQgKiBNQ0FTVF9NU0ZJTFRFUiwgSVBfTVVMVElDQVNUX0FMTCBhcmUgbm90IHN1cHBvcnRlZCwgYmV0dGVyIG5vdCBkZWFsXG4gNTE4Olx0XHRcdCAqIHdpdGggbWNhc3Qgc3R1ZmZcbiA1MTk6XHRcdFx0ICovXG4gNTIwOlx0XHRcdC8qIElQX0lQU0VDX1BPTElDWSwgSVBfWEZSTV9QT0xJQ1kgYXJlIG51dCBzdXBwb3J0ZWQsIHVucmVsYXRlZCBoZXJlICovXG4gNTIxOlx0XHRcdHJldHVybiBmYWxzZTtcbiA1MjI6XHRcdH1cbiA1MjM6XHRcdGlmIChsZXZlbCA9PSBTT0xfSVBWNikge1xuIDUyNDpcdFx0XHRzd2l0Y2ggKG9wdG5hbWUpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDk6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU4MTEKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqRGl2aW5nIERlZXBlciBpbnRvIGBtcHRjcF9zdXBwb3J0ZWRfc29ja29wdGAqKgoKQWxyaWdodCwgc28gdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHJlYWxseSBkaWcgaW50byBgbXB0Y3Bfc3VwcG9ydGVkX3NvY2tvcHRgLiBXZSYjMzk7dmUgdG91Y2hlZCBvbiBpdCwgd2UgdW5kZXJzdGFuZCBpdHMgYmFzaWMgcHVycG9zZSwgYnV0IGxldCYjMzk7cyBub3QganVzdCBza2ltIHRoZSBzdXJmYWNlLiBXaGF0JiMzOTtzIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBzdXBwb3J0ZWQgb3B0aW9ucz8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyAqdGhvcm91Z2hseSogdG8gYXNzZXNzIGl0cyByb2xlIGluIHRoaXMgc3BlY2lmaWMgbmV0d29yayBjb25maWd1cmF0aW9uLgoKSSBuZWVkIHRvIGtub3cgdGhlIGdyYW51bGFyIGRldGFpbHMgb2YgaG93IHRoaXMgc29ja2V0IG9wdGlvbiBvcGVyYXRlcy4gQXJlIHRoZXJlIGFueSB1bmV4cGVjdGVkIHNpZGUgZWZmZWN0cyB0byBjZXJ0YWluIGNvbWJpbmF0aW9ucyBvZiBvcHRpb25zPyBXaGF0JiMzOTtzIHRoZSBwZXJmb3JtYW5jZSBvdmVyaGVhZCwgaWYgYW55PyBBcmUgdGhlcmUgYW55IGxpbWl0YXRpb25zIG9yIGVkZ2UgY2FzZXMgSSBzaG91bGQgYmUgYXdhcmUgb2Y/IEkgbmVlZCB0byB0aGluayBsaWtlIGEgc3lzdGVtcyBwcm9ncmFtbWVyIGFuZCBhbnRpY2lwYXRlIHBvdGVudGlhbCBpc3N1ZXMuCgpMZXQmIzM5O3MgZ2V0IGludG8gdGhlIG5pdHR5LWdyaXR0eSBhbmQgc2VlIHdoYXQgc2VjcmV0cyB0aGlzIG9wdGlvbiBpcyBoaWRpbmcuIEtub3dpbmcgdGhlIGRldGFpbHMgaXMgdGhlIG9ubHkgd2F5IHRvIGVmZmVjdGl2ZWx5IHVzZSBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDk6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbXB0Y3Avc29ja29wdC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTIzLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1MjM6XHRcdGlmIChsZXZlbCA9PSBTT0xfSVBWNikge1xuIDUyNDpcdFx0XHRzd2l0Y2ggKG9wdG5hbWUpIHtcbiA1MjU6XHRcdFx0Y2FzZSBJUFY2X1Y2T05MWTpcbiA1MjY6XHRcbiA1Mjc6XHRcdFx0LyogdGhlIGZvbGxvd2luZyBhcmUgY29udHJvbCBjbXNnIHJlbGF0ZWQgKi9cbiA1Mjg6XHRcdFx0Y2FzZSBJUFY2X1JFQ1ZQS1RJTkZPOlxuIDUyOTpcdFx0XHRjYXNlIElQVjZfMjI5MlBLVElORk86XG4gNTMwOlx0XHRcdGNhc2UgSVBWNl9SRUNWSE9QTElNSVQ6XG4gNTMxOlx0XHRcdGNhc2UgSVBWNl8yMjkySE9QTElNSVQ6XG4gNTMyOlx0XHRcdGNhc2UgSVBWNl9SRUNWUlRIRFI6XG4gNTMzOlx0XHRcdGNhc2UgSVBWNl8yMjkyUlRIRFI6XG4gNTM0Olx0XHRcdGNhc2UgSVBWNl9SRUNWSE9QT1BUUzpcbiA1MzU6XHRcdFx0Y2FzZSBJUFY2XzIyOTJIT1BPUFRTOlxuIDUzNjpcdFx0XHRjYXNlIElQVjZfUkVDVkRTVE9QVFM6XG4gNTM3Olx0XHRcdGNhc2UgSVBWNl8yMjkyRFNUT1BUUzpcbiA1Mzg6XHRcdFx0Y2FzZSBJUFY2X1JFQ1ZUQ0xBU1M6XG4gNTM5Olx0XHRcdGNhc2UgSVBWNl9GTE9XSU5GTzpcbiA1NDA6XHRcdFx0Y2FzZSBJUFY2X1JFQ1ZQQVRITVRVOlxuIDU0MTpcdFx0XHRjYXNlIElQVjZfUkVDVk9SSUdEU1RBRERSOlxuIDU0MjpcdFx0XHRjYXNlIElQVjZfUkVDVkZSQUdTSVpFOlxuIDU0MzpcdFxuIDU0NDpcdFx0XHQvKiB0aGUgZm9sbG93aW5nIG9uZXMgbmVlZCBzb21lIGxvdmUgYnV0IGFyZSBxdWl0ZSBjb21tb24gKi9cbiA1NDU6XHRcdFx0Y2FzZSBJUFY2X1RDTEFTUzpcbiA1NDY6XHRcdFx0Y2FzZSBJUFY2X1RSQU5TUEFSRU5UOlxuIDU0NzpcdFx0XHRjYXNlIElQVjZfRlJFRUJJTkQ6XG4gNTQ4Olx0XHRcdGNhc2UgSVBWNl9QS1RJTkZPOlxuIDU0OTpcdFx0XHRjYXNlIElQVjZfMjI5MlBLVE9QVElPTlM6XG4gNTUwOlx0XHRcdGNhc2UgSVBWNl9VTklDQVNUX0hPUFM6XG4gNTUxOlx0XHRcdGNhc2UgSVBWNl9NVFVfRElTQ09WRVI6XG4gNTUyOlx0XHRcdGNhc2UgSVBWNl9NVFU6XG4gNTUzOlx0XHRcdGNhc2UgSVBWNl9SRUNWRVJSOlxuIDU1NDpcdFx0XHRjYXNlIElQVjZfRkxPV0lORk9fU0VORDpcbiA1NTU6XHRcdFx0Y2FzZSBJUFY2X0ZMT1dMQUJFTF9NR1I6XG4gNTU2Olx0XHRcdGNhc2UgSVBWNl9NSU5IT1BDT1VOVDpcbiA1NTc6XHRcdFx0Y2FzZSBJUFY2X0RPTlRGUkFHOlxuIDU1ODpcdFx0XHRjYXNlIElQVjZfQVVUT0ZMT1dMQUJFTDpcbiA1NTk6XHRcbiA1NjA6XHRcdFx0LyogdGhlIGZvbGxvd2luZyBvbmUgaXMgYSBuby1vcCBmb3IgcGxhaW4gVENQICovXG4gNTYxOlx0XHRcdGNhc2UgSVBWNl9SRUNWRVJSX1JGQzQ4ODQ6XG4gNTYyOlx0XHRcdFx0cmV0dXJuIHRydWU7XG4gNTYzOlx0XHRcdH1cbiA1NjQ6XHRcbiA1NjU6XHRcdFx0LyogSVBWNl9IT1BPUFRTLCBJUFY2X1JUSERSRFNUT1BUUywgSVBWNl9SVEhEUiwgSVBWNl9EU1RPUFRTIGFyZVxuIDU2NjpcdFx0XHQgKiBub3Qgc3VwcG9ydGVkXG4gNTY3Olx0XHRcdCAqL1xuIDU2ODpcdFx0XHQvKiBJUFY2X01VTFRJQ0FTVF9IT1BTLCBJUFY2X01VTFRJQ0FTVF9MT09QLCBJUFY2X1VOSUNBU1RfSUYsXG4gNTY5Olx0XHRcdCAqIElQVjZfTVVMVElDQVNUX0lGLCBJUFY2X0FERFJGT1JNLFxuIDU3MDpcdFx0XHQgKiBJUFY2X0FERF9NRU1CRVJTSElQLCBJUFY2X0RST1BfTUVNQkVSU0hJUCwgSVBWNl9KT0lOX0FOWUNBU1QsXG4gNTcxOlx0XHRcdCAqIElQVjZfTEVBVkVfQU5ZQ0FTVCwgSVBWNl9NVUxUSUNBU1RfQUxMLCBNQ0FTVF9KT0lOX0dST1VQLCBNQ0FTVF9MRUFWRV9HUk9VUCxcbiA1NzI6XHRcdFx0ICogTUNBU1RfSk9JTl9TT1VSQ0VfR1JPVVAsIE1DQVNUX0xFQVZFX1NPVVJDRV9HUk9VUCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDk6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcwMDUKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJUHY2IFRDTEFTUyBQYXRjaCoqCgpPa2F5LCBzbyBgSVBWNl9UQ0xBU1NgIGlzIHN1cHBvcnRlZCwgd2hpY2ggaXMgZ29vZC4gVGhpcyBwYXRjaCBpcyBhZGRpbmcgdGhlIG5lY2Vzc2FyeSBoYW5kbGluZyBmb3IgaXQgd2l0aGluIHRoZSBNUFRDUCBjb2RlLCBzcGVjaWZpY2FsbHkgaW4gYG1wdGNwX3NldHNvY2tvcHRfdjZgIGFuZCBgbXB0Y3BfZ2V0c29ja29wdF92NmAuIEl0IGxvb2tzIGxpa2UgdGhlIGZpbGUgYmVpbmcgbW9kaWZpZWQgaXMgYG5ldC9tcHRjcC9zb2Nrb3B0LmNgLgoKTXkgZm9jdXMgbmVlZHMgdG8gYmUgb24gdGhlc2UgZnVuY3Rpb25zOiBgbXB0Y3Bfc2V0c29ja29wdF92Nl9zZXRfdGNsYXNzYCwgYG1wdGNwX3NldHNvY2tvcHRfdjZgLCBhbmQgYG1wdGNwX2dldHNvY2tvcHRfdjZgLiBBaCwgSSBzZWUsIGBtcHRjcF9zZXRzb2Nrb3B0X3Y2YCBhbmQgYG1wdGNwX2dldHNvY2tvcHRfdjZgIGFscmVhZHkgZXhpc3QuIGBtcHRjcF9zZXRzb2Nrb3B0X3Y2X3NldF90Y2xhc3NgIGlzIHRoZSBuZXcgZnVuY3Rpb24sIHdoaWNoIG1ha2VzIHNlbnNlLgoKRm9yIHRoZSBjb25maWd1cmF0aW9ucywgaXQgcmVxdWlyZXMgYE1QVENQYCBhbmQgYE1QVENQX0lQVjZgLiBXYWl0IGEgc2Vjb25k4oCmV2hpbGUgYE1QVENQX0lQVjZgIGlzbiYjMzk7dCAqc3RyaWN0bHkqIG5lZWRlZCBmb3IgYG1wdGNwX3NldHNvY2tvcHRfdjZgIHRvIGNvbXBpbGUsIGl0JiMzOTtzIGVzc2VudGlhbCBmb3IgTVBUQ1AgdG8gYWN0dWFsbHkgKndvcmsqIHdpdGggSVB2NiBzb2NrZXRzLiBJdCYjMzk7cyBhIHN1YnRsZSBkaXN0aW5jdGlvbiwgYnV0IGltcG9ydGFudC4gVGhlcmVmb3JlLCBJIHNob3VsZCBkb3VibGUtY2hlY2sgd2hldGhlciBgTVBUQ1BfSVBWNmAgaXMgcmVxdWlyZWQgdG8gY3JlYXRlIGFuIElQdjYgTVBUQ1Agc29ja2V0LiBUaGF0JiMzOTtzIHRoZSBrZXkgcXVlc3Rpb24gaGVyZSwgaXQmIzM5O3Mgbm90IHN0cmljdGx5IGEgY29tcGlsZSB0aW1lIGRlcGVuZGVuY3kuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDA5OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O01QVENQX0lQVjYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbXB0Y3AvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tcHRjcC9LY29uZmlnPTE2PWNvbmZpZyBJTkVUX01QVENQX0RJQUdcbi0tXG5uZXQvbXB0Y3AvS2NvbmZpZy0xOS1cbm5ldC9tcHRjcC9LY29uZmlnOjIwOmNvbmZpZyBNUFRDUF9JUFY2XG5uZXQvbXB0Y3AvS2NvbmZpZy0yMS1cdGJvb2wgXCYjMzQ7TVBUQ1A6IElQdjYgc3VwcG9ydCBmb3IgTXVsdGlwYXRoIFRDUFwmIzM0O1xuLS1cbm5ldC9tcHRjcC9jdHJsLmM9NTg3PXZvaWQgX19pbml0IG1wdGNwX2luaXQodm9pZClcbi0tXG5uZXQvbXB0Y3AvY3RybC5jLTU5NS1cbm5ldC9tcHRjcC9jdHJsLmM6NTk2OiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxubmV0L21wdGNwL2N0cmwuYy01OTctaW50IF9faW5pdCBtcHRjcHY2X2luaXQodm9pZClcbi0tXG5uZXQvbXB0Y3Avb3B0aW9ucy5jPTIzPXN0YXRpYyB2b2lkIG1wdGNwX3BhcnNlX29wdGlvbihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9tcHRjcC9vcHRpb25zLmMtMjQxLVx0XHRcdFx0bXBfb3B0LVx1MDAzZWFkZHIuZmFtaWx5ID0gQUZfSU5FVDtcbm5ldC9tcHRjcC9vcHRpb25zLmM6MjQyOiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxubmV0L21wdGNwL29wdGlvbnMuYy0yNDMtXHRcdFx0ZWxzZSBpZiAob3BzaXplID09IFRDUE9MRU5fTVBUQ1BfQUREX0FERFI2IHx8XG4tLVxubmV0L21wdGNwL29wdGlvbnMuYy0yNTItXHRcdFx0XHRtcF9vcHQtXHUwMDNlYWRkci5mYW1pbHkgPSBBRl9JTkVUO1xubmV0L21wdGNwL29wdGlvbnMuYzoyNTM6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTI1NC1cdFx0XHRlbHNlIGlmIChvcHNpemUgPT0gVENQT0xFTl9NUFRDUF9BRERfQUREUjZfQkFTRSB8fFxuLS1cbm5ldC9tcHRjcC9vcHRpb25zLmMtMjc0LVx0XHR9XG5uZXQvbXB0Y3Avb3B0aW9ucy5jOjI3NTojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcbm5ldC9tcHRjcC9vcHRpb25zLmMtMjc2LVx0XHRlbHNlIHtcbi0tXG5uZXQvbXB0Y3Avb3B0aW9ucy5jPTYzMj1zdGF0aWMgdTY0IGFkZF9hZGRyX2dlbmVyYXRlX2htYWModTY0IGtleTEsIHU2NCBrZXkyLFxuLS1cbm5ldC9tcHRjcC9vcHRpb25zLmMtNjQ0LVx0fVxubmV0L21wdGNwL29wdGlvbnMuYzo2NDU6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTY0Ni1cdGVsc2UgaWYgKGFkZHItXHUwMDNlZmFtaWx5ID09IEFGX0lORVQ2KSB7XG4tLVxubmV0L21wdGNwL29wdGlvbnMuYz0xMzg0PXZvaWQgbXB0Y3Bfd3JpdGVfb3B0aW9ucyhzdHJ1Y3QgdGNwaGRyICp0aCwgX19iZTMyICpwdHIsIHN0cnVjdCB0Y3Bfc29jayAqdHAsXG4tLVxubmV0L21wdGNwL29wdGlvbnMuYy0xNTY3LVxubmV0L21wdGNwL29wdGlvbnMuYzoxNTY4OiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxubmV0L21wdGNwL29wdGlvbnMuYy0xNTY5LVx0XHRpZiAob3B0cy1cdTAwM2VhZGRyLmZhbWlseSA9PSBBRl9JTkVUNilcbi0tXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTE1ODYtXHRcdH1cbm5ldC9tcHRjcC9vcHRpb25zLmM6MTU4NzojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcbm5ldC9tcHRjcC9vcHRpb25zLmMtMTU4OC1cdFx0ZWxzZSBpZiAob3B0cy1cdTAwM2VhZGRyLmZhbWlseSA9PSBBRl9JTkVUNikge1xuLS1cbm5ldC9tcHRjcC9wbS5jPTMzPWJvb2wgbXB0Y3BfcG1fYWRkcl9mYW1pbGllc19tYXRjaChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L21wdGNwL3BtLmMtMzgtXG5uZXQvbXB0Y3AvcG0uYzozOTojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcbm5ldC9tcHRjcC9wbS5jLTQwLVx0Ym9vbCBsb2NfaXNfdjQgPSBsb2MtXHUwMDNlZmFtaWx5ID09IEFGX0lORVQgfHwgaXB2Nl9hZGRyX3Y0bWFwcGVkKFx1MDAyNmxvYy1cdTAwM2VhZGRyNik7XG4tLVxubmV0L21wdGNwL3BtLmM9NTU9Ym9vbCBtcHRjcF9hZGRyZXNzZXNfZXF1YWwoY29uc3Qgc3RydWN0IG1wdGNwX2FkZHJfaW5mbyAqYSxcbi0tXG5uZXQvbXB0Y3AvcG0uYy02Mi1cdFx0XHRhZGRyX2VxdWFscyA9IGEtXHUwMDNlYWRkci5zX2FkZHIgPT0gYi1cdTAwM2VhZGRyLnNfYWRkcjtcbm5ldC9tcHRjcC9wbS5jOjYzOiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxubmV0L21wdGNwL3BtLmMtNjQtXHRcdGVsc2Vcbi0tXG5uZXQvbXB0Y3AvcG0uYz04Mz12b2lkIG1wdGNwX2xvY2FsX2FkZHJlc3MoY29uc3Qgc3RydWN0IHNvY2tfY29tbW9uICpza2MsXG4tLVxubmV0L21wdGNwL3BtLmMtODktXHRcdGFkZHItXHUwMDNlYWRkci5zX2FkZHIgPSBza2MtXHUwMDNlc2tjX3Jjdl9zYWRkcjtcbm5ldC9tcHRjcC9wbS5jOjkwOiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxubmV0L21wdGNwL3BtLmMtOTEtXHRlbHNlIGlmIChhZGRyLVx1MDAzZWZhbWlseSA9PSBBRl9JTkVUNilcbi0tXG5uZXQvbXB0Y3AvcG0uYz05Nj12b2lkIG1wdGNwX3JlbW90ZV9hZGRyZXNzKGNvbnN0IHN0cnVjdCBzb2NrX2NvbW1vbiAqc2tjLFxuLS1cbm5ldC9tcHRjcC9wbS5jLTEwMi1cdFx0YWRkci1cdTAwM2VhZGRyLnNfYWRkciA9IHNrYy1cdTAwM2Vza2NfZGFkZHI7XG5uZXQvbXB0Y3AvcG0uYzoxMDM6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXG5uZXQvbXB0Y3AvcG0uYy0xMDQtXHRlbHNlIGlmIChhZGRyLVx1MDAzZWZhbWlseSA9PSBBRl9JTkVUNilcbi0tXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmM9NjA2PWZpbGxfbG9jYWxfYWRkcmVzc19hbnkoc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgc3RydWN0IG1wdGNwX2FkZHJfaW5mbyAqcmVtb3RlLFxuLS1cbm5ldC9tcHRjcC9wbV9rZXJuZWwuYy02MTItXHRsb2NhbC1cdTAwM2VhZGRyLmZhbWlseSA9XG5uZXQvbXB0Y3AvcG1fa2VybmVsLmM6NjEzOiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxubmV0L21wdGNwL3BtX2tlcm5lbC5jLTYxNC1cdFx0XHRyZW1vdGUtXHUwMDNlZmFtaWx5ID09IEFGX0lORVQ2IFx1MDAyNlx1MDAyNlxuLS1cbm5ldC9tcHRjcC9wbV9rZXJuZWwuYz04NTI9c3RhdGljIGludCBtcHRjcF9wbV9ubF9jcmVhdGVfbGlzdGVuX3NvY2tldChzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L21wdGNwL3BtX2tlcm5lbC5jLTg4OS1cdG1wdGNwX2luZm8yc29ja2FkZHIoXHUwMDI2ZW50cnktXHUwMDNlYWRkciwgXHUwMDI2YWRkciwgZW50cnktXHUwMDNlYWRkci5mYW1pbHkpO1xubmV0L21wdGNwL3BtX2tlcm5lbC5jOjg5MDojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcbm5ldC9tcHRjcC9wbV9rZXJuZWwuYy04OTEtXHRpZiAoZW50cnktXHUwMDNlYWRkci5mYW1pbHkgPT0gQUZfSU5FVDYpXG4tLVxubmV0L21wdGNwL3BtX2tlcm5lbC5jLTg5NS1cdFx0ZXJyID0gaW5ldF9iaW5kX3NrKHNzaywgKHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICopXHUwMDI2YWRkciwgYWRkcmxlbik7XG5uZXQvbXB0Y3AvcG1fa2VybmVsLmM6ODk2OiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxubmV0L21wdGNwL3BtX2tlcm5lbC5jLTg5Ny1cdGVsc2UgaWYgKHNzay1cdTAwM2Vza19mYW1pbHkgPT0gQUZfSU5FVDYpXG4tLVxubmV0L21wdGNwL3BtX25ldGxpbmsuYz0yMj1zdGF0aWMgaW50IG1wdGNwX3BtX2ZhbWlseV90b19hZGRyKGludCBmYW1pbHkpXG5uZXQvbXB0Y3AvcG1fbmV0bGluay5jLTIzLXtcbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmM6MjQ6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXG5uZXQvbXB0Y3AvcG1fbmV0bGluay5jLTI1LVx0aWYgKGZhbWlseSA9PSBBRl9JTkVUNilcbi0tXG5uZXQvbXB0Y3AvcG1fbmV0bGluay5jPTMxPXN0YXRpYyBpbnQgbXB0Y3BfcG1fcGFyc2VfcG1fYWRkcl9hdHRyKHN0cnVjdCBubGF0dHIgKnRiW10sXG4tLVxubmV0L21wdGNwL3BtX25ldGxpbmsuYy02My1cdGlmIChhZGRyLVx1MDAzZWZhbWlseSAhPSBBRl9JTkVUXG5uZXQvbXB0Y3AvcG1fbmV0bGluay5jOjY0OiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxubmV0L21wdGNwL3BtX25ldGxpbmsuYy02NS1cdCAgICBcdTAwMjZcdTAwMjYgYWRkci1cdTAwM2VmYW1pbHkgIT0gQUZfSU5FVDZcbi0tXG5uZXQvbXB0Y3AvcG1fbmV0bGluay5jLTc4LVxubmV0L21wdGNwL3BtX25ldGxpbmsuYzo3OTojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmMtODAtXHRpZiAoYWRkci1cdTAwM2VmYW1pbHkgPT0gQUZfSU5FVDYpXG4tLVxubmV0L21wdGNwL3BtX25ldGxpbmsuYz0xMzE9c3RhdGljIGludCBtcHRjcF9ubF9maWxsX2FkZHIoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbXB0Y3AvcG1fbmV0bGluay5jLTE1Ni1cdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG5uZXQvbXB0Y3AvcG1fbmV0bGluay5jOjE1NzojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmMtMTU4LVx0ZWxzZSBpZiAoYWRkci1cdTAwM2VmYW1pbHkgPT0gQUZfSU5FVDYgXHUwMDI2XHUwMDI2XG4tLVxubmV0L21wdGNwL3BtX25ldGxpbmsuYz0yOTg9c3RhdGljIGludCBtcHRjcF9ldmVudF9hZGRfc3ViZmxvdyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3Qgc29jayAqc3NrKVxuLS1cbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmMtMzEyLVx0XHRicmVhaztcbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmM6MzEzOiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxubmV0L21wdGNwL3BtX25ldGxpbmsuYy0zMTQtXHRjYXNlIEFGX0lORVQ2OiB7XG4tLVxubmV0L21wdGNwL3BtX25ldGxpbmsuYz00NjU9dm9pZCBtcHRjcF9ldmVudF9hZGRyX2Fubm91bmNlZChjb25zdCBzdHJ1Y3Qgc29jayAqc3NrLFxuLS1cbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmMtNTAyLVx0XHRicmVhaztcbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmM6NTAzOiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxubmV0L21wdGNwL3BtX25ldGxpbmsuYy01MDQtXHRjYXNlIEFGX0lORVQ2OlxuLS1cbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmM9NTIyPXZvaWQgbXB0Y3BfZXZlbnRfcG1fbGlzdGVuZXIoY29uc3Qgc3RydWN0IHNvY2sgKnNzayxcbi0tXG5uZXQvbXB0Y3AvcG1fbmV0bGluay5jLTU1MS1cdFx0YnJlYWs7XG5uZXQvbXB0Y3AvcG1fbmV0bGluay5jOjU1MjojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmMtNTUzLVx0Y2FzZSBBRl9JTkVUNjoge1xuLS1cbm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYz00MzI9c3RhdGljIHN0cnVjdCBzb2NrICptcHRjcF9ubF9maW5kX3NzayhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLFxuLS1cbm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYy00NTctXHRcdFx0YnJlYWs7XG5uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmM6NDU4OiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxubmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jLTQ1OS1cdFx0Y2FzZSBBRl9JTkVUNjoge1xuLS1cbm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYz00Nzg9aW50IG1wdGNwX3BtX25sX3N1YmZsb3dfZGVzdHJveV9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxubmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jLTUwNi1cbm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYzo1MDc6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXG5uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmMtNTA4LVx0aWYgKGFkZHJfbC5hZGRyLmZhbWlseSA9PSBBRl9JTkVUIFx1MDAyNlx1MDAyNiBpcHY2X2FkZHJfdjRtYXBwZWQoXHUwMDI2YWRkcl9yLmFkZHI2KSkge1xuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTIwLSNpbmNsdWRlIFx1MDAzY25ldC90Y3Bfc3RhdGVzLmhcdTAwM2Vcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjIxOiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxubmV0L21wdGNwL3Byb3RvY29sLmMtMjItI2luY2x1ZGUgXHUwMDNjbmV0L3RyYW5zcF92Ni5oXHUwMDNlXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmM9MzE9c3RhdGljIHVuc2lnbmVkIGludCBtcHRjcF9pbnFfaGludChjb25zdCBzdHJ1Y3Qgc29jayAqc2spO1xuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTM1LVxubmV0L21wdGNwL3Byb3RvY29sLmM6MzY6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zNy1zdHJ1Y3QgbXB0Y3A2X3NvY2sge1xuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jPTY0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzICptcHRjcF9mYWxsYmFja190Y3Bfb3BzKGNvbnN0IHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy02Ny1cbm5ldC9tcHRjcC9wcm90b2NvbC5jOjY4OiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxubmV0L21wdGNwL3Byb3RvY29sLmMtNjktXHRpZiAoZmFtaWx5ID09IEFGX0lORVQ2KVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jPTMzOTc9c3RhdGljIHZvaWQgbXB0Y3BfY29weV9pbmFkZHJzKHN0cnVjdCBzb2NrICptc2ssIGNvbnN0IHN0cnVjdCBzb2NrICpzc2spXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zMzk4LXtcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjMzOTk6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zNDAwLVx0Y29uc3Qgc3RydWN0IGlwdjZfcGluZm8gKnNzazYgPSBpbmV0Nl9zayhzc2spO1xuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jPTM0NDI9c3RhdGljIGludCBtcHRjcF9kaXNjb25uZWN0KHN0cnVjdCBzb2NrICpzaywgaW50IGZsYWdzKVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTM1MDQtXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzozNTA1OiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxubmV0L21wdGNwL3Byb3RvY29sLmMtMzUwNi1zdGF0aWMgc3RydWN0IGlwdjZfcGluZm8gKm1wdGNwX2luZXQ2X3NrKGNvbnN0IHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0zNTUzPXN0cnVjdCBzb2NrICptcHRjcF9za19jbG9uZV9pbml0KGNvbnN0IHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zNTY1LVxubmV0L21wdGNwL3Byb3RvY29sLmM6MzU2NjojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTM1NjctXHRpZiAobnNrLVx1MDAzZXNrX2ZhbWlseSA9PSBBRl9JTkVUNilcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zNTcyLVxubmV0L21wdGNwL3Byb3RvY29sLmM6MzU3MzojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTM1NzQtXHRpZiAobnNrLVx1MDAzZXNrX2ZhbWlseSA9PSBBRl9JTkVUNilcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz00MDk5PXN0YXRpYyBpbnQgbXB0Y3BfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqdWFkZHIsIGludCBhZGRyX2xlbilcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy00MTEzLVx0XHRlcnIgPSBpbmV0X2JpbmRfc2soc3NrLCB1YWRkciwgYWRkcl9sZW4pO1xubmV0L21wdGNwL3Byb3RvY29sLmM6NDExNDojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTQxMTUtXHRlbHNlIGlmIChzay1cdTAwM2Vza19mYW1pbHkgPT0gQUZfSU5FVDYpXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmM9NDYzNT12b2lkIF9faW5pdCBtcHRjcF9wcm90b19pbml0KHZvaWQpXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtNDY3NC1cbm5ldC9tcHRjcC9wcm90b2NvbC5jOjQ2NzU6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy00Njc2LXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIG1wdGNwX3Y2X3N0cmVhbV9vcHMgPSB7XG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmg9OTEyPXZvaWQgX19pbml0IG1wdGNwX3Byb3RvX2luaXQodm9pZCk7XG5uZXQvbXB0Y3AvcHJvdG9jb2wuaDo5MTM6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaC05MTQtaW50IF9faW5pdCBtcHRjcF9wcm90b192Nl9pbml0KHZvaWQpO1xuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmMtMTctI2luY2x1ZGUgXHUwMDNjbmV0L3Byb3RvY29sLmhcdTAwM2Vcbm5ldC9tcHRjcC9zdWJmbG93LmM6MTg6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE5LSNpbmNsdWRlIFx1MDAzY25ldC9pcDZfcm91dGUuaFx1MDAzZVxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmM9MzU4PXN0YXRpYyBpbnQgc3ViZmxvd192NF9zZW5kX3N5bmFjayhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBkc3RfZW50cnkgKmRzdCxcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTM3MC1cbm5ldC9tcHRjcC9zdWJmbG93LmM6MzcxOiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxubmV0L21wdGNwL3N1YmZsb3cuYy0zNzItc3RhdGljIGludCBzdWJmbG93X3Y2X3NlbmRfc3luYWNrKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGRzdF9lbnRyeSAqZHN0LFxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmM9NjQ5PXN0YXRpYyBpbnQgc3ViZmxvd19yZWJ1aWxkX2hlYWRlcihzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYy02NTgtXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjY1OTojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcbm5ldC9tcHRjcC9zdWJmbG93LmMtNjYwLXN0YXRpYyBpbnQgc3ViZmxvd192Nl9yZWJ1aWxkX2hlYWRlcihzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYz02OTI9c3RhdGljIHZvaWQgc3ViZmxvd192NF9yZXFfZGVzdHJ1Y3RvcihzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpXG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYy02OTctXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjY5ODojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcbm5ldC9tcHRjcC9zdWJmbG93LmMtNjk5LXN0YXRpYyBzdHJ1Y3QgcmVxdWVzdF9zb2NrX29wcyBtcHRjcF9zdWJmbG93X3Y2X3JlcXVlc3Rfc29ja19vcHMgX19yb19hZnRlcl9pbml0O1xuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmM9NzM3PXN0cnVjdCByZXF1ZXN0X3NvY2sgKm1wdGNwX3N1YmZsb3dfcmVxc2tfYWxsb2MoY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29ja19vcHMgKm9wcyxcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTc0Mi1cdFx0b3BzID0gXHUwMDI2bXB0Y3Bfc3ViZmxvd192NF9yZXF1ZXN0X3NvY2tfb3BzO1xubmV0L21wdGNwL3N1YmZsb3cuYzo3NDM6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTc0NC1cdGVsc2UgaWYgKG9wcy1cdTAwM2VmYW1pbHkgPT0gQUZfSU5FVDYpXG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYz0xNTUzPXN1YmZsb3dfZGVmYXVsdF9hZl9vcHMoc3RydWN0IHNvY2sgKnNrKVxubmV0L21wdGNwL3N1YmZsb3cuYy0xNTU0LXtcbm5ldC9tcHRjcC9zdWJmbG93LmM6MTU1NTojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTU1Ni1cdGlmIChzay1cdTAwM2Vza19mYW1pbHkgPT0gQUZfSU5FVDYpXG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYy0xNTYxLVxubmV0L21wdGNwL3N1YmZsb3cuYzoxNTYyOiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxubmV0L21wdGNwL3N1YmZsb3cuYy0xNTYzLXZvaWQgbXB0Y3B2Nl9oYW5kbGVfbWFwcGVkKHN0cnVjdCBzb2NrICpzaywgYm9vbCBtYXBwZWQpXG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYz0xNTgyPXZvaWQgbXB0Y3BfaW5mbzJzb2NrYWRkcihjb25zdCBzdHJ1Y3QgbXB0Y3BfYWRkcl9pbmZvICppbmZvLFxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmMtMTU5Mi1cdFx0XHRpbl9hZGRyLVx1MDAzZXNpbl9hZGRyID0gaW5mby1cdTAwM2VhZGRyO1xubmV0L21wdGNwL3N1YmZsb3cuYzoxNTkzOiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxubmV0L21wdGNwL3N1YmZsb3cuYy0xNTk0LVx0XHRlbHNlIGlmIChpcHY2X2FkZHJfdjRtYXBwZWQoXHUwMDI2aW5mby1cdTAwM2VhZGRyNikpXG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYy0xNTk4LVx0fVxubmV0L21wdGNwL3N1YmZsb3cuYzoxNTk5OiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxubmV0L21wdGNwL3N1YmZsb3cuYy0xNjAwLVx0ZWxzZSBpZiAoYWRkci1cdTAwM2Vzc19mYW1pbHkgPT0gQUZfSU5FVDYpIHtcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTE2MTM9aW50IF9fbXB0Y3Bfc3ViZmxvd19jb25uZWN0KHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IG1wdGNwX3BtX2xvY2FsICpsb2NhbCxcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE2NDgtXHRcdFx0bG9jYWxfaWQgPSAtMTtcbm5ldC9tcHRjcC9zdWJmbG93LmM6MTY0OTojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTY1MC1cdH0gZWxzZSBpZiAoc2stXHUwMDNlc2tfZmFtaWx5ID09IEFGX0lORVQ2KSB7XG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYy0xNjY1LVx0YWRkcmxlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pO1xubmV0L21wdGNwL3N1YmZsb3cuYzoxNjY2OiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxubmV0L21wdGNwL3N1YmZsb3cuYy0xNjY3LVx0aWYgKGFkZHIuc3NfZmFtaWx5ID09IEFGX0lORVQ2KVxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmM9MTc1Nj1zdGF0aWMgdm9pZCBtcHRjcF9zdWJmbG93X29wc19vdmVycmlkZShzdHJ1Y3Qgc29jayAqc3NrKVxubmV0L21wdGNwL3N1YmZsb3cuYy0xNzU3LXtcbm5ldC9tcHRjcC9zdWJmbG93LmM6MTc1ODojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTc1OS1cdGlmIChzc2stXHUwMDNlc2tfcHJvdCA9PSBcdTAwMjZ0Y3B2Nl9wcm90KVxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmM9MTc2Nj1zdGF0aWMgdm9pZCBtcHRjcF9zdWJmbG93X29wc191bmRvX292ZXJyaWRlKHN0cnVjdCBzb2NrICpzc2spXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE3Njcte1xubmV0L21wdGNwL3N1YmZsb3cuYzoxNzY4OiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxubmV0L21wdGNwL3N1YmZsb3cuYy0xNzY5LVx0aWYgKHNzay1cdTAwM2Vza19wcm90ID09IFx1MDAyNnRjcHY2X3Byb3Rfb3ZlcnJpZGUpXG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYz0yMTQxPXZvaWQgX19pbml0IG1wdGNwX3N1YmZsb3dfaW5pdCh2b2lkKVxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmMtMjE3My1cbm5ldC9tcHRjcC9zdWJmbG93LmM6MjE3NDojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcbm5ldC9tcHRjcC9zdWJmbG93LmMtMjE3NS12b2lkIF9faW5pdCBtcHRjcF9zdWJmbG93X3Y2X2luaXQodm9pZClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDk6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMwMzUKCQkJCQkJCW91dHB1dDogMTQwCgkJCQkJCQl0aG91Z2h0czogNzg0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIE1QVENQIElQdjYgU29ja2V0IE9wdGlvbiBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIGl0JiMzOTtzIGNsZWFyIHRoYXQgYE1QVENQX0lQVjZgIGlzIGEgbmVjZXNzYXJ5IGNvbmZpZyB0byBlbmFibGUgSVB2NiBNUFRDUCBzb2NrZXRzLiBUaGF0IG1ha2VzIHNlbnNlLCB0aGUgY29kZSAoYG1wdGNwX3Y2X3N0cmVhbV9vcHNgKSBpcyBvbmx5IHJlZ2lzdGVyZWQgd2hlbiB0aGF0IGNvbmZpZyBpcyBlbmFibGVkLiBTbywgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBgTVBUQ1BgIGFuZCBgTVBUQ1BfSVBWNmAgYXMgdGhlIHByaW1hcnkgY29uZmlndXJhdGlvbnMgdG8gYmUgYXdhcmUgb2YuIFdlIGFsc28gbmVlZCBgSVBWNj15YCwgYnV0IHRoYXQgaXMgYSBnZW5lcmljIGNvbmZpZywgd2UgY2FuIGp1c3QgZm9jdXMgb24gYE1QVENQYCBhbmQgYE1QVENQX0lQVjZgIGZvciBub3cuCgpGdW5jdGlvbi13aXNlLCBJIG5lZWQgdG8gZm9jdXMgb24gYSBmZXcgdGhpbmdzLiBgbXB0Y3Bfc2V0c29ja29wdF92Nl9zZXRfdGNsYXNzYCBpcyBhIG5ldyBmdW5jdGlvbiwgYW5kIHRoZW4gYG1wdGNwX3NldHNvY2tvcHRfdjZgIGFuZCBgbXB0Y3BfZ2V0c29ja29wdF92NmAgYXJlIGV4aXN0aW5nLCBidXQgSSBzZWUgdGhleSBhcmUgbW9kaWZpZWQgaGVyZS4gSSBjaGVja2VkIHRoYXQgYG1wdGNwX3NldHNvY2tvcHRfdjZfc2V0X3RjbGFzc2AgaXMgaW5kZWVkIHN0YXRpYy4KCkkmIzM5O3ZlIHJldmlld2VkIHRoZSBjb2RlIGZvciBgbXB0Y3Bfc2V0c29ja29wdF92Nl9zZXRfdGNsYXNzYCBjYXJlZnVsbHkuIEl0IGNhbGxzIGBpcHY2X3NldHNvY2tvcHRgIHdoaWNoIGlzIGdvb2QgdG8gc2VlIGFzIGl0IGNvbmZpcm1zIHRoYXQgc3RhbmRhcmQgSVB2NiBmdW5jdGlvbmFsaXR5IGlzIGxldmVyYWdlZC4gVGhlIGNyaXRpY2FsIHBhcnQgaXMgaG93IHRoZSBUQ0xBU1MgdmFsdWUgaXMgcHJvcGFnYXRlZCB0byB0aGUgc3ViZmxvd3Mgd2l0aGluIGFuIE1QVENQIHNvY2tldC4gSXQgc2VlbXMgY29ycmVjdDsgaXQgbG9ja3MgdGhlIG1haW4gc29ja2V0LCB0aGVuIGluY3JlbWVudHMgdGhlIHNvY2tvcHQgc2VxdWVuY2UgbnVtYmVyLCByZWFkcyB0aGUgVENMQVNTIHZhbHVlLCBhbmQgdGhlbiBpdGVyYXRlcyB0aHJvdWdoIGFsbCB0aGUgc3ViZmxvd3MgdG8gc2V0IHRoZSBUQ0xBU1Mgb24gZWFjaCwgcmVzZXR0aW5nIHRoZSBkZXN0aW5hdGlvbiBvZiB0aGUgc3ViZmxvdyYjMzk7cyBzb2NrZXQuIFRoaXMgaXMgYWxsIHJlYWNoYWJsZSBhbmQgZnVuY3Rpb25hbC4KClRoZXJlZm9yZSwgZm9yIHRoaXMgZnV6emluZyBlZmZvcnQsIEkgd2lsbCBzZXQgYFdvcnRoRnV6emluZ2AgdG8gYHRydWVgLiBNeSBgRW5hYmxlQ29uZmlnc2Agd2lsbCBiZSBgWyYjMzQ7TVBUQ1AmIzM0OywgJiMzNDtNUFRDUF9JUFY2JiMzNDtdYC4gVGhlIGBGb2N1c1N5bWJvbHNgIHdpbGwgYmUgYFsmIzM0O21wdGNwX3NldHNvY2tvcHRfdjZfc2V0X3RjbGFzcyYjMzQ7LCAmIzM0O21wdGNwX3NldHNvY2tvcHRfdjYmIzM0OywgJiMzNDttcHRjcF9nZXRzb2Nrb3B0X3Y2JiMzNDtdYC4gVGhlIGBSZWFzb25pbmdgIHdpbGwgYmU6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3Igc2V0dGluZyBhbmQgZ2V0dGluZyB0aGUgSVBWNl9UQ0xBU1Mgc29ja2V0IG9wdGlvbiBvbiBNUFRDUCBzb2NrZXRzLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IGZ1bmN0aW9uIG1wdGNwX3NldHNvY2tvcHRfdjZfc2V0X3RjbGFzcyB0byBwcm9wYWdhdGUgdGhlIHRjbGFzcyB2YWx1ZSB0byBhbGwgc3ViZmxvd3MuJiMzNDsKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDk6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01QVENQJiMzNDssCiAgICAmIzM0O01QVENQX0lQVjYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttcHRjcF9zZXRzb2Nrb3B0X3Y2X3NldF90Y2xhc3MmIzM0OywKICAgICYjMzQ7bXB0Y3Bfc2V0c29ja29wdF92NiYjMzQ7LAogICAgJiMzNDttcHRjcF9nZXRzb2Nrb3B0X3Y2JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3Igc2V0dGluZyBhbmQgZ2V0dGluZyB0aGUgSVBWNl9UQ0xBU1Mgc29ja2V0IG9wdGlvbiBvbiBNUFRDUCBzb2NrZXRzLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IGZ1bmN0aW9uIG1wdGNwX3NldHNvY2tvcHRfdjZfc2V0X3RjbGFzcyB0byBwcm9wYWdhdGUgdGhlIHRjbGFzcyB2YWx1ZSB0byBhbGwgc3ViZmxvd3MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01QVENQJiMzNDssCiAgICAmIzM0O01QVENQX0lQVjYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttcHRjcF9zZXRzb2Nrb3B0X3Y2X3NldF90Y2xhc3MmIzM0OywKICAgICYjMzQ7bXB0Y3Bfc2V0c29ja29wdF92NiYjMzQ7LAogICAgJiMzNDttcHRjcF9nZXRzb2Nrb3B0X3Y2JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3Igc2V0dGluZyBhbmQgZ2V0dGluZyB0aGUgSVBWNl9UQ0xBU1Mgc29ja2V0IG9wdGlvbiBvbiBNUFRDUCBzb2NrZXRzLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IGZ1bmN0aW9uIG1wdGNwX3NldHNvY2tvcHRfdjZfc2V0X3RjbGFzcyB0byBwcm9wYWdhdGUgdGhlIHRjbGFzcyB2YWx1ZSB0byBhbGwgc3ViZmxvd3MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0xM1QwOTo0OTowNy44ODIzNzcyNTZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjI1NTYyMzAyOTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTVBUQ1BcIixcbiAgICBcIk1QVENQX0lQVjZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtcHRjcF9zZXRzb2Nrb3B0X3Y2X3NldF90Y2xhc3NcIixcbiAgICBcIm1wdGNwX3NldHNvY2tvcHRfdjZcIixcbiAgICBcIm1wdGNwX2dldHNvY2tvcHRfdjZcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHNldHRpbmcgYW5kIGdldHRpbmcgdGhlIElQVjZfVENMQVNTIHNvY2tldCBvcHRpb24gb24gTVBUQ1Agc29ja2V0cy4gSXQgaW50cm9kdWNlcyBhIG5ldyBmdW5jdGlvbiBtcHRjcF9zZXRzb2Nrb3B0X3Y2X3NldF90Y2xhc3MgdG8gcHJvcGFnYXRlIHRoZSB0Y2xhc3MgdmFsdWUgdG8gYWxsIHN1YmZsb3dzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QwOTo0OTowNy44ODIzODM1MjZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzMzIzNDQwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDQxYzI1MzFhZDEzZTEzMTExNzc1ODM0ODdlNWI2MjcxZjk4OWU1ZDlcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBKdWwgMTMgMDk6NDk6MDUgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3NvY2tvcHQuYyBiL25ldC9tcHRjcC9zb2Nrb3B0LmNcXG5pbmRleCBmY2Y2ZmViMmE5ZWI1ZC4uZWRkZGFmZWJiOGRlZmMgMTAwNjQ0XFxuLS0tIGEvbmV0L21wdGNwL3NvY2tvcHQuY1xcbisrKyBiL25ldC9tcHRjcC9zb2Nrb3B0LmNcXG5AQCAtMzk0LDYgKzM5NCwzNSBAQCBzdGF0aWMgaW50IG1wdGNwX3NldHNvY2tvcHRfc29sX3NvY2tldChzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBpbnQgb3B0bmFtZSxcXG4gXFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IG1wdGNwX3NldHNvY2tvcHRfdjZfc2V0X3RjbGFzcyhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBpbnQgb3B0bmFtZSxcXG4rXFx0XFx0XFx0XFx0XFx0ICBzb2NrcHRyX3Qgb3B0dmFsLCB1bnNpZ25lZCBpbnQgb3B0bGVuKVxcbit7XFxuK1xcdHN0cnVjdCBtcHRjcF9zdWJmbG93X2NvbnRleHQgKnN1YmZsb3c7XFxuK1xcdHN0cnVjdCBzb2NrICpzayA9IChzdHJ1Y3Qgc29jayAqKW1zaztcXG4rXFx0aW50IGVyciwgdmFsO1xcbitcXG4rXFx0ZXJyID0gaXB2Nl9zZXRzb2Nrb3B0KHNrLCBTT0xfSVBWNiwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pO1xcbitcXG4rXFx0aWYgKGVyciAhPSAwKVxcbitcXHRcXHRyZXR1cm4gZXJyO1xcbitcXG4rXFx0bG9ja19zb2NrKHNrKTtcXG4rXFx0c29ja29wdF9zZXFfaW5jKG1zayk7XFxuK1xcdHZhbCA9IFJFQURfT05DRShpbmV0Nl9zayhzayktXFx1MDAzZXRjbGFzcyk7XFxuK1xcdG1wdGNwX2Zvcl9lYWNoX3N1YmZsb3cobXNrLCBzdWJmbG93KSB7XFxuK1xcdFxcdHN0cnVjdCBzb2NrICpzc2sgPSBtcHRjcF9zdWJmbG93X3RjcF9zb2NrKHN1YmZsb3cpO1xcbitcXHRcXHRib29sIHNsb3c7XFxuK1xcbitcXHRcXHRzbG93ID0gbG9ja19zb2NrX2Zhc3Qoc3NrKTtcXG4rXFx0XFx0aW5ldDZfc2soc3NrKS1cXHUwMDNldGNsYXNzID0gdmFsO1xcbitcXHRcXHRza19kc3RfcmVzZXQoc3NrKTtcXG4rXFx0XFx0dW5sb2NrX3NvY2tfZmFzdChzc2ssIHNsb3cpO1xcbitcXHR9XFxuK1xcdHJlbGVhc2Vfc29jayhzayk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gc3RhdGljIGludCBtcHRjcF9zZXRzb2Nrb3B0X3Y2KHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIGludCBvcHRuYW1lLFxcbiBcXHRcXHRcXHQgICAgICAgc29ja3B0cl90IG9wdHZhbCwgdW5zaWduZWQgaW50IG9wdGxlbilcXG4ge1xcbkBAIC00MzYsNiArNDY1LDggQEAgc3RhdGljIGludCBtcHRjcF9zZXRzb2Nrb3B0X3Y2KHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIGludCBvcHRuYW1lLFxcbiBcXG4gXFx0XFx0cmVsZWFzZV9zb2NrKHNrKTtcXG4gXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgSVBWNl9UQ0xBU1M6XFxuK1xcdFxcdHJldHVybiBtcHRjcF9zZXRzb2Nrb3B0X3Y2X3NldF90Y2xhc3MobXNrLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7XFxuIFxcdH1cXG4gXFxuIFxcdHJldHVybiByZXQ7XFxuQEAgLTE0ODUsNiArMTUxNiw5IEBAIHN0YXRpYyBpbnQgbXB0Y3BfZ2V0c29ja29wdF92NihzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBpbnQgb3B0bmFtZSxcXG4gXFx0c3RydWN0IHNvY2sgKnNrID0gKHZvaWQgKiltc2s7XFxuIFxcbiBcXHRzd2l0Y2ggKG9wdG5hbWUpIHtcXG4rXFx0Y2FzZSBJUFY2X1RDTEFTUzpcXG4rXFx0XFx0cmV0dXJuIG1wdGNwX3B1dF9pbnRfb3B0aW9uKG1zaywgb3B0dmFsLCBvcHRsZW4sXFxuK1xcdFxcdFxcdFxcdFxcdCAgICBSRUFEX09OQ0UoaW5ldDZfc2soc2spLVxcdTAwM2V0Y2xhc3MpKTtcXG4gXFx0Y2FzZSBJUFY2X1Y2T05MWTpcXG4gXFx0XFx0cmV0dXJuIG1wdGNwX3B1dF9pbnRfb3B0aW9uKG1zaywgb3B0dmFsLCBvcHRsZW4sXFxuIFxcdFxcdFxcdFxcdFxcdCAgICBzay1cXHUwMDNlc2tfaXB2Nm9ubHkpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QwOTo0OTowOC41MTg2NjE4NzlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyMTkxOTkzNjc3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNUFRDUFwiLFxuICAgIFwiTVBUQ1BfSVBWNlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1wdGNwX3NldHNvY2tvcHRfdjZfc2V0X3RjbGFzc1wiLFxuICAgIFwibXB0Y3Bfc2V0c29ja29wdF92NlwiLFxuICAgIFwibXB0Y3BfZ2V0c29ja29wdF92NlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3Igc2V0dGluZyBhbmQgZ2V0dGluZyB0aGUgSVBWNl9UQ0xBU1Mgc29ja2V0IG9wdGlvbiBvbiBNUFRDUCBzb2NrZXRzLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IGZ1bmN0aW9uIG1wdGNwX3NldHNvY2tvcHRfdjZfc2V0X3RjbGFzcyB0byBwcm9wYWdhdGUgdGhlIHRjbGFzcyB2YWx1ZSB0byBhbGwgc3ViZmxvd3MuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNDFjMjUzMWFkMTNlMTMxMTE3NzU4MzQ4N2U1YjYyNzFmOTg5ZTVkOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVsIDEzIDA5OjQ5OjA1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3NvY2tvcHQuYyBiL25ldC9tcHRjcC9zb2Nrb3B0LmNcbmluZGV4IGZjZjZmZWIyYTllYjVkLi5lZGRkYWZlYmI4ZGVmYyAxMDA2NDRcbi0tLSBhL25ldC9tcHRjcC9zb2Nrb3B0LmNcbisrKyBiL25ldC9tcHRjcC9zb2Nrb3B0LmNcbkBAIC0zOTQsNiArMzk0LDM1IEBAIHN0YXRpYyBpbnQgbXB0Y3Bfc2V0c29ja29wdF9zb2xfc29ja2V0KHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIGludCBvcHRuYW1lLFxuIFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIH1cbiBcbitzdGF0aWMgaW50IG1wdGNwX3NldHNvY2tvcHRfdjZfc2V0X3RjbGFzcyhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBpbnQgb3B0bmFtZSxcbitcdFx0XHRcdFx0ICBzb2NrcHRyX3Qgb3B0dmFsLCB1bnNpZ25lZCBpbnQgb3B0bGVuKVxuK3tcbitcdHN0cnVjdCBtcHRjcF9zdWJmbG93X2NvbnRleHQgKnN1YmZsb3c7XG4rXHRzdHJ1Y3Qgc29jayAqc2sgPSAoc3RydWN0IHNvY2sgKiltc2s7XG4rXHRpbnQgZXJyLCB2YWw7XG4rXG4rXHRlcnIgPSBpcHY2X3NldHNvY2tvcHQoc2ssIFNPTF9JUFY2LCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7XG4rXG4rXHRpZiAoZXJyICE9IDApXG4rXHRcdHJldHVybiBlcnI7XG4rXG4rXHRsb2NrX3NvY2soc2spO1xuK1x0c29ja29wdF9zZXFfaW5jKG1zayk7XG4rXHR2YWwgPSBSRUFEX09OQ0UoaW5ldDZfc2soc2spLVx1MDAzZXRjbGFzcyk7XG4rXHRtcHRjcF9mb3JfZWFjaF9zdWJmbG93KG1zaywgc3ViZmxvdykge1xuK1x0XHRzdHJ1Y3Qgc29jayAqc3NrID0gbXB0Y3Bfc3ViZmxvd190Y3Bfc29jayhzdWJmbG93KTtcbitcdFx0Ym9vbCBzbG93O1xuK1xuK1x0XHRzbG93ID0gbG9ja19zb2NrX2Zhc3Qoc3NrKTtcbitcdFx0aW5ldDZfc2soc3NrKS1cdTAwM2V0Y2xhc3MgPSB2YWw7XG4rXHRcdHNrX2RzdF9yZXNldChzc2spO1xuK1x0XHR1bmxvY2tfc29ja19mYXN0KHNzaywgc2xvdyk7XG4rXHR9XG4rXHRyZWxlYXNlX3NvY2soc2spO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIHN0YXRpYyBpbnQgbXB0Y3Bfc2V0c29ja29wdF92NihzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBpbnQgb3B0bmFtZSxcbiBcdFx0XHQgICAgICAgc29ja3B0cl90IG9wdHZhbCwgdW5zaWduZWQgaW50IG9wdGxlbilcbiB7XG5AQCAtNDM2LDYgKzQ2NSw4IEBAIHN0YXRpYyBpbnQgbXB0Y3Bfc2V0c29ja29wdF92NihzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBpbnQgb3B0bmFtZSxcbiBcbiBcdFx0cmVsZWFzZV9zb2NrKHNrKTtcbiBcdFx0YnJlYWs7XG4rXHRjYXNlIElQVjZfVENMQVNTOlxuK1x0XHRyZXR1cm4gbXB0Y3Bfc2V0c29ja29wdF92Nl9zZXRfdGNsYXNzKG1zaywgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pO1xuIFx0fVxuIFxuIFx0cmV0dXJuIHJldDtcbkBAIC0xNDg1LDYgKzE1MTYsOSBAQCBzdGF0aWMgaW50IG1wdGNwX2dldHNvY2tvcHRfdjYoc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgaW50IG9wdG5hbWUsXG4gXHRzdHJ1Y3Qgc29jayAqc2sgPSAodm9pZCAqKW1zaztcbiBcbiBcdHN3aXRjaCAob3B0bmFtZSkge1xuK1x0Y2FzZSBJUFY2X1RDTEFTUzpcbitcdFx0cmV0dXJuIG1wdGNwX3B1dF9pbnRfb3B0aW9uKG1zaywgb3B0dmFsLCBvcHRsZW4sXG4rXHRcdFx0XHRcdCAgICBSRUFEX09OQ0UoaW5ldDZfc2soc2spLVx1MDAzZXRjbGFzcykpO1xuIFx0Y2FzZSBJUFY2X1Y2T05MWTpcbiBcdFx0cmV0dXJuIG1wdGNwX3B1dF9pbnRfb3B0aW9uKG1zaywgb3B0dmFsLCBvcHRsZW4sXG4gXHRcdFx0XHRcdCAgICBzay1cdTAwM2Vza19pcHY2b25seSk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QwOTo0OTowOC41MTg2NjQ0ODlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NDIzMjA2MDk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIE1QVENQIElQVjZfVENMQVNTIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBhaW1lZCBhdCBleHRlbmRpbmcgTVBUQ1AgZnVuY3Rpb25hbGl0eSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBJUHY2IHRyYWZmaWMgY2xhc3MgaGFuZGxpbmcuIEl0IGxvb2tzIGxpa2UgaXQncyBpbnRyb2R1Y2luZyB0aGUgYWJpbGl0eSB0byBzZXQgYW5kIHJldHJpZXZlIHRoZSBgSVBWNl9UQ0xBU1NgIHNvY2tldCBvcHRpb24g4oCTIGEgdmFsdWFibGUgYWRkaXRpb24uIFRoZSBjb3JlIG1vZGlmaWNhdGlvbiBzZWVtcyB0byByZXNpZGUgd2l0aGluIGBuZXQvbXB0Y3Avc29ja29wdC5jYCwgd2hpY2ggbWFrZXMgc2Vuc2UgYXMgdGhpcyBmaWxlIG9mdGVuIGhhbmRsZXMgc29ja2V0LWxldmVsIGNvbmZpZ3VyYXRpb25zIGZvciB0aGUgcHJvdG9jb2wuXG5cbkkgc2VlIGl0J3MgYWRkZWQgb3IgbW9kaWZpZWQgZnVuY3Rpb25zOiBgbXB0Y3Bfc2V0c29ja29wdF92Nl9zZXRfdGNsYXNzYCwgYG1wdGNwX3NldHNvY2tvcHRfdjZgLCBhbmQgYG1wdGNwX2dldHNvY2tvcHRfdjZgLiBUaGF0J3MgdGhlIGV4cGVjdGVkIGZvb3RwcmludCwgc2V0dGluZyBhbmQgZ2V0dGluZywgYWxvbmcgd2l0aCB0aGUgd3JhcHBlci4gSSdsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBidXQgYXQgZmlyc3QgZ2xhbmNlLCBpdCBhcHBlYXJzIHNvdW5kLiBJJ2xsIHRha2UgYSBxdWljayBsb29rIGF0IHRoZSBjb250ZXh0IGFuZCB0aGUgc3Vycm91bmRpbmcgY29kZSwgYW5kIG9mIGNvdXJzZSwgSSBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIGNvbmZpZ3VyYXRpb24gZm9yIE1QVENQIGl0c2VsZiB0byBlbnN1cmUgaXQncyBwcm9wZXJseSBlbmFibGVkIGFuZCBpbnRlZ3JhdGVkIHdpdGhpbiB0aGUgYnVpbGQgc3lzdGVtLiBUaGVuIEkgY2FuIGdldCBpbnRvIHRoZSByZWFsIGRldGFpbHMgb2YgdGhlIGltcGxlbWVudGF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzk3LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMDk6NDk6MTQuOTQxODcyNTc1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwMTY2ODcyMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTVBUQ1BcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21wdGNwL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21wdGNwL0tjb25maWctMS1cXG5uZXQvbXB0Y3AvS2NvbmZpZzoyOmNvbmZpZyBNUFRDUFxcbm5ldC9tcHRjcC9LY29uZmlnLTMtXFx0Ym9vbCBcXFwiTVBUQ1A6IE11bHRpcGF0aCBUQ1BcXFwiXFxuLS1cXG5uZXQvbXB0Y3AvS2NvbmZpZz0xNj1jb25maWcgSU5FVF9NUFRDUF9ESUFHXFxuLS1cXG5uZXQvbXB0Y3AvS2NvbmZpZy0xOS1cXG5uZXQvbXB0Y3AvS2NvbmZpZzoyMDpjb25maWcgTVBUQ1BfSVBWNlxcbm5ldC9tcHRjcC9LY29uZmlnLTIxLVxcdGJvb2wgXFxcIk1QVENQOiBJUHY2IHN1cHBvcnQgZm9yIE11bHRpcGF0aCBUQ1BcXFwiXFxuLS1cXG5uZXQvbXB0Y3AvS2NvbmZpZy0yNC1cXG5uZXQvbXB0Y3AvS2NvbmZpZzoyNTpjb25maWcgTVBUQ1BfS1VOSVRfVEVTVFxcbm5ldC9tcHRjcC9LY29uZmlnLTI2LVxcdHRyaXN0YXRlIFxcXCJUaGlzIGJ1aWxkcyB0aGUgTVBUQ1AgS1VuaXQgdGVzdHNcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMDk6NDk6MTUuNDQzNTQ2MjU4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA5MzM0ODY1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1QVENQIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgYE1QVENQYCBhbmQgYE1QVENQX0lQVjZgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZyBjcnVjaWFsIGhlcmUuIEl0J3MgdXN1YWxseSBhIGdvb2QgcHJhY3RpY2UgdG8gdGhvcm91Z2hseSByZXZpZXcgYWxsIGF2YWlsYWJsZSBvcHRpb25zLCBhcyBhIGZpZWxkIGV4cGVydCwgdG8gZ3VhcmFudGVlIEkgZnVsbHkgdW5kZXJzdGFuZCBhbGwgdGhlIHN5c3RlbSdzIGNhcGFiaWxpdGllcy5cblxuTm93LCBJIHNlZSB0aGUgcGF0Y2ggaXMgc3BlY2lmaWNhbGx5IG1vZGlmeWluZyBgbXB0Y3Bfc2V0c29ja29wdF92NmAgYW5kIGBtcHRjcF9nZXRzb2Nrb3B0X3Y2YC4gQWgsIHRoaXMgaXMgaW1tZWRpYXRlbHkgaW5zaWdodGZ1bC4gR2l2ZW4gdGhlc2UgbW9kaWZpY2F0aW9ucywgYW5kIHRoZSBuYW1pbmcgY29udmVudGlvbiwgdGhlc2UgZnVuY3Rpb25zIGFyZSBhbG1vc3QgY2VydGFpbmx5IGNvbXBpbGVkIGNvbmRpdGlvbmFsbHksIGJhc2VkIG9uIHRoZSBgTVBUQ1BfSVBWNmAgZmxhZyBiZWluZyBlbmFibGVkLiBUaGlzIHRlbGxzIG1lIHRoYXQgSVBWNiBpcyBpbnRlZ3JhdGVkIHdpdGggdGhlIGBNUFRDUGAgZmVhdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzAwMiwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDA5OjQ5OjE5LjUzNjg5NjQ0NVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTQwODU4MjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibXB0Y3Bfc2V0c29ja29wdF92NlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbXB0Y3Avc29ja29wdC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tcHRjcC9zb2Nrb3B0LmM9MzAwPXN0YXRpYyBpbnQgbXB0Y3Bfc2V0c29ja29wdF9zb2xfc29ja2V0KHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIGludCBvcHRuYW1lLFxcbi0tXFxubmV0L21wdGNwL3NvY2tvcHQuYy0zOTYtXFxubmV0L21wdGNwL3NvY2tvcHQuYzozOTc6c3RhdGljIGludCBtcHRjcF9zZXRzb2Nrb3B0X3Y2X3NldF90Y2xhc3Moc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgaW50IG9wdG5hbWUsXFxubmV0L21wdGNwL3NvY2tvcHQuYy0zOTgtXFx0XFx0XFx0XFx0XFx0ICBzb2NrcHRyX3Qgb3B0dmFsLCB1bnNpZ25lZCBpbnQgb3B0bGVuKVxcbi0tXFxubmV0L21wdGNwL3NvY2tvcHQuYy00MjUtXFxubmV0L21wdGNwL3NvY2tvcHQuYzo0MjY6c3RhdGljIGludCBtcHRjcF9zZXRzb2Nrb3B0X3Y2KHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIGludCBvcHRuYW1lLFxcbm5ldC9tcHRjcC9zb2Nrb3B0LmMtNDI3LVxcdFxcdFxcdCAgICAgICBzb2NrcHRyX3Qgb3B0dmFsLCB1bnNpZ25lZCBpbnQgb3B0bGVuKVxcbi0tXFxubmV0L21wdGNwL3NvY2tvcHQuYy00NjgtXFx0Y2FzZSBJUFY2X1RDTEFTUzpcXG5uZXQvbXB0Y3Avc29ja29wdC5jOjQ2OTpcXHRcXHRyZXR1cm4gbXB0Y3Bfc2V0c29ja29wdF92Nl9zZXRfdGNsYXNzKG1zaywgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pO1xcbm5ldC9tcHRjcC9zb2Nrb3B0LmMtNDcwLVxcdH1cXG4tLVxcbm5ldC9tcHRjcC9zb2Nrb3B0LmM9OTM4PWludCBtcHRjcF9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcXG4tLVxcbm5ldC9tcHRjcC9zb2Nrb3B0LmMtOTY3LVxcdGlmIChsZXZlbCA9PSBTT0xfSVBWNilcXG5uZXQvbXB0Y3Avc29ja29wdC5jOjk2ODpcXHRcXHRyZXR1cm4gbXB0Y3Bfc2V0c29ja29wdF92Nihtc2ssIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTtcXG5uZXQvbXB0Y3Avc29ja29wdC5jLTk2OS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMDk6NDk6MTkuNjUwOTg2MzA2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDY3NjI1MTM1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uIGluIHRoZSBNUFRDUCBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBgbXB0Y3Bfc2V0c29ja29wdF92NmAgZnVuY3Rpb24sIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCdzIGxvY2F0ZWQgaW4gYG5ldC9tcHRjcC9zb2Nrb3B0LmNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29tcGlsYXRpb24gcHJvY2Vzcy4gTXkgcHJpbWFyeSBjb25jZXJuIGhlcmUgaXMgZGV0ZXJtaW5pbmcgd2hldGhlciB0aGF0IGZpbGUgaXRzZWxmIGlzIGNvbXBpbGVkIGNvbmRpdGlvbmFsbHksIG9yIGlmIHRoZSBzcGVjaWZpYyBmdW5jdGlvbiwgYG1wdGNwX3NldHNvY2tvcHRfdjZgLCBpcyBndWFyZGVkIGJ5IGEgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZSwgbGlrZSBhbiBgI2lmZGVmIENPTkZJR19NUFRDUF9JUFY2YC4gVW5kZXJzdGFuZGluZyB0aGlzIHdpbGwgYmUgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIGhvdyBNUFRDUCdzIElQdjYgc3VwcG9ydCBpcyBlbmFibGVkIHdpdGhpbiB0aGUga2VybmVsLiBJIG5lZWQgdG8gY2hlY2sgZm9yIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiB0aGF0IGFmZmVjdHMgdGhlIGV4aXN0ZW5jZSBvZiB0aGlzIGZ1bmN0aW9uLiBUaGF0IGlzIG15IG5leHQgc3RlcC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzc0MiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDA5OjQ5OjI0LjMyNzI0MTQxWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExOTA3MDQ3MSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX01QVENQX0lQVjZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21wdGNwL3NvY2tvcHQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMDk6NDk6MjQuNDQ2MzIxNTAxWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE1MzcxMTQ3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgRGVlcCBpbnRvIE1QVENQIGFuZCBJUHY2IEludGVncmF0aW9uKipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSB3YXMgdW5kZXIgdGhlIGltcHJlc3Npb24gdGhhdCB0aGUgTVBUQ1Agc29ja29wdCBjb2RlIGluIGBuZXQvbXB0Y3Avc29ja29wdC5jYCB3b3VsZCBkZWZpbml0ZWx5IGFjY291bnQgZm9yIElQdjYsIGVzcGVjaWFsbHkgd2l0aCB0aGUgcG90ZW50aWFsIGZvciBkdWFsLXN0YWNrIGNvbmZpZ3VyYXRpb25zLiBJIG5lZWQgdG8gdmVyaWZ5IGlmIHRoZSBJUHY2IGNvbmZpZ3VyYXRpb24gaXMgZW5hYmxlZCwgYnV0IHRoZSBmYWN0IHRoYXQgSSBkb24ndCBzZWUgYENPTkZJR19NUFRDUF9JUFY2YCBvdXRyaWdodCBpcyBtYWtpbmcgbWUgc2Vjb25kIGd1ZXNzIHRoaW5ncy4gTGV0J3Mgbm90IG1ha2UgYXNzdW1wdGlvbnMgaGVyZS4gVG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJ20gZ29pbmcgdG8gc2NhbiB0aGUgYG5ldC9tcHRjcC9zb2Nrb3B0LmNgIHNvdXJjZSBjb2RlLCBsb29raW5nIHNwZWNpZmljYWxseSBmb3IgYW55IGAjaWZkZWYgQ09ORklHX0lQVjZgIGRpcmVjdGl2ZXMsIG9yIGFueSBvdGhlciBjb25kaXRpb25hbCBjaGVja3MgdGhhdCBtaWdodCBzdWdnZXN0IGhvdyBJUHY2IHN1cHBvcnQgaXMgaGFuZGxlZCB3aXRoaW4gdGhlIHNvY2tvcHQgaW1wbGVtZW50YXRpb24uIFRoaXMgaXMgZ29pbmcgdG8gYmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGludGVycGxheS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDAzMywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDA5OjQ5OjI4LjYwMDAzNTYxMVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzA4NzE4MjM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19JUFY2XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tcHRjcC9zb2Nrb3B0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21wdGNwL3NvY2tvcHQuYz0xMjAyPXN0YXRpYyB2b2lkIG1wdGNwX2dldF9zdWJfYWRkcnMoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19hZGRycyAqYSlcXG4tLVxcbm5ldC9tcHRjcC9zb2Nrb3B0LmMtMTIxOC1cXHRcXHRhLVxcdTAwM2VzaW5fcmVtb3RlLnNpbl9hZGRyLnNfYWRkciA9IGluZXQtXFx1MDAzZWluZXRfZGFkZHI7XFxubmV0L21wdGNwL3NvY2tvcHQuYzoxMjE5OiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbm5ldC9tcHRjcC9zb2Nrb3B0LmMtMTIyMC1cXHR9IGVsc2UgaWYgKHNrLVxcdTAwM2Vza19mYW1pbHkgPT0gQUZfSU5FVDYpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMDk6NDk6MjguOTA4NzY0MzE3WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY0NjU5NzE1MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZS4gTXkgZmlyc3QgdGhvdWdodCBpczpcblxuKipDaGVja2luZyBDb25kaXRpb25hbCBDb21waWxhdGlvbiBvZiBgbXB0Y3Bfc2V0c29ja29wdF92NmAqKlxuXG5JIG5lZWQgdG8gY29uZmlybSBzb21ldGhpbmcgY3J1Y2lhbCBhYm91dCB0aGUgY29kZTogaXMgdGhlIGZ1bmN0aW9uIGBtcHRjcF9zZXRzb2Nrb3B0X3Y2YCBjb21waWxlZCB1bmNvbmRpdGlvbmFsbHk/IEluIG90aGVyIHdvcmRzLCBpcyBpdCBhbHdheXMgaW5jbHVkZWQgaW4gdGhlIGJ1aWxkLCByZWdhcmRsZXNzIG9mIHRoZSBjb25maWd1cmF0aW9uIG9yIHBsYXRmb3JtPyBUaGlzIGlzIGEgZnVuZGFtZW50YWwgcXVlc3Rpb24gZm9yIGl0cyBwb3J0YWJpbGl0eSBhbmQgaG93IGl0IGZ1bmN0aW9ucyBhcyBhIGNvbXBvbmVudCBvZiB0aGUgbGFyZ2VyIGNvZGUgYmFzZS4gSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiBvZiBpdHMgY29tcGlsYXRpb24gc3RyYXRlZ3kuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0NzgsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QwOTo0OTozNS4zNzQ3MzgyNFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA5MjgzMTkzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1wdGNwX3NldHNvY2tvcHRfdjZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21wdGNwL3NvY2tvcHQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbXB0Y3Avc29ja29wdC5jPTMwMD1zdGF0aWMgaW50IG1wdGNwX3NldHNvY2tvcHRfc29sX3NvY2tldChzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBpbnQgb3B0bmFtZSxcXG4tLVxcbm5ldC9tcHRjcC9zb2Nrb3B0LmMtMzk2LVxcbm5ldC9tcHRjcC9zb2Nrb3B0LmM6Mzk3OnN0YXRpYyBpbnQgbXB0Y3Bfc2V0c29ja29wdF92Nl9zZXRfdGNsYXNzKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIGludCBvcHRuYW1lLFxcbm5ldC9tcHRjcC9zb2Nrb3B0LmMtMzk4LVxcdFxcdFxcdFxcdFxcdCAgc29ja3B0cl90IG9wdHZhbCwgdW5zaWduZWQgaW50IG9wdGxlbilcXG4tLVxcbm5ldC9tcHRjcC9zb2Nrb3B0LmMtNDI1LVxcbm5ldC9tcHRjcC9zb2Nrb3B0LmM6NDI2OnN0YXRpYyBpbnQgbXB0Y3Bfc2V0c29ja29wdF92NihzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBpbnQgb3B0bmFtZSxcXG5uZXQvbXB0Y3Avc29ja29wdC5jLTQyNy1cXHRcXHRcXHQgICAgICAgc29ja3B0cl90IG9wdHZhbCwgdW5zaWduZWQgaW50IG9wdGxlbilcXG4tLVxcbm5ldC9tcHRjcC9zb2Nrb3B0LmMtNDY4LVxcdGNhc2UgSVBWNl9UQ0xBU1M6XFxubmV0L21wdGNwL3NvY2tvcHQuYzo0Njk6XFx0XFx0cmV0dXJuIG1wdGNwX3NldHNvY2tvcHRfdjZfc2V0X3RjbGFzcyhtc2ssIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTtcXG5uZXQvbXB0Y3Avc29ja29wdC5jLTQ3MC1cXHR9XFxuLS1cXG5uZXQvbXB0Y3Avc29ja29wdC5jPTkzOD1pbnQgbXB0Y3Bfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXFxuLS1cXG5uZXQvbXB0Y3Avc29ja29wdC5jLTk2Ny1cXHRpZiAobGV2ZWwgPT0gU09MX0lQVjYpXFxubmV0L21wdGNwL3NvY2tvcHQuYzo5Njg6XFx0XFx0cmV0dXJuIG1wdGNwX3NldHNvY2tvcHRfdjYobXNrLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7XFxubmV0L21wdGNwL3NvY2tvcHQuYy05NjktXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDA5OjQ5OjM1LjQ4NDAyNjk3M1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTY1ODA2NzI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk1QVENQIENvbmZpZ3VyYXRpb24gQ29udW5kcnVtKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgbXB0Y3Bfc2V0c29ja29wdF92NmAgZnVuY3Rpb24gYW5kIHNvbWV0aGluZydzIG5vdCBxdWl0ZSByaWdodC4gSXQgc2VlbXMgdG8gYmUgZ2V0dGluZyBjb21waWxlZCByZWdhcmRsZXNzLCB3aGljaCBpcyBhIGJpdCBzdHJhbmdlLCBidXQgSSBzdXNwZWN0IGl0J3MgZGVwZW5kZW50IG9uIHNvbWUgb3RoZXIgZmxhZyB0byBhY3R1YWxseSAqd29yayouIE15IGd1dCBzYXlzIGl0IHByb2JhYmx5IG5lZWRzIGVpdGhlciBgTVBUQ1BfSVBWNmAgdG8gYmUgZW5hYmxlZCwgb3IgcGVyaGFwcyB0aGUgd2hvbGUgYE1QVENQYCBmZWF0dXJlIGlzIHJlbGlhbnQgb24gSVB2NiBiZWluZyBwcmVzZW50LiBUbyBiZSBjZXJ0YWluLCBJIG5lZWQgdG8gY2hlY2sgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBUaGUgYEtjb25maWdgIGZpbGVzIGFyZSBhbHdheXMgdGhlIGJlc3QgcGxhY2UgdG8gZmluZCB0aGVzZSBraW5kcyBvZiBkZXBlbmRlbmNpZXMuIExldCBtZSBuYXZpZ2F0ZSB0byBgbmV0L21wdGNwL0tjb25maWdgIGFuZCBzZWUgd2hhdCB0aGUgdHJ1dGggb2YgdGhlIG1hdHRlciBpcy4gVGhhdCBzaG91bGQgY2xlYXIgdGhpcyB1cCBwcmV0dHkgcXVpY2tseS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTEwNCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDA5OjQ5OjM5LjQ0OTgzNjAyOVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjk2MTgyNjM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNUFRDUF9JUFY2XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tcHRjcC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tcHRjcC9LY29uZmlnPTE2PWNvbmZpZyBJTkVUX01QVENQX0RJQUdcXG4tLVxcbm5ldC9tcHRjcC9LY29uZmlnLTE5LVxcbm5ldC9tcHRjcC9LY29uZmlnOjIwOmNvbmZpZyBNUFRDUF9JUFY2XFxubmV0L21wdGNwL0tjb25maWctMjEtXFx0Ym9vbCBcXFwiTVBUQ1A6IElQdjYgc3VwcG9ydCBmb3IgTXVsdGlwYXRoIFRDUFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMDk6NDk6MzkuNzQ2MDIyODY3WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNzkyNzQzMTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBNUFRDUCBLY29uZmlnKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MgYW5kIGNyYWNrIG9wZW4gdGhlIGBuZXQvbXB0Y3AvS2NvbmZpZ2AgZmlsZS4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIE11bHRwYXRoIFRDUCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXZhaWxhYmxlIGluIHRoZSBrZXJuZWwuIFRoaXMgY29uZmlnIGZpbGUgaXMgdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIgd2hlbiBpdCBjb21lcyB0byBlbmFibGluZyBhbmQgY3VzdG9taXppbmcgTVBUQ1AncyBiZWhhdmlvci4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBzZWVpbmcgd2hhdCBsZXZlbCBvZiBjb250cm9sIGl0IHByb3ZpZGVzIG92ZXIgZGlmZmVyZW50IGZlYXR1cmVzIOKAkyB0aGluZ3MgbGlrZSBwYXRoIG1hbmFnZW1lbnQsIGNvbmdlc3Rpb24gY29udHJvbCBhbGdvcml0aG1zIChhbmQgdGhlIHBvdGVudGlhbCB0byBhZGQgY3VzdG9tIG9uZXMpLCBzdWJmbG93IGVzdGFibGlzaG1lbnQsIGFuZCBob3cgaXQgaGFuZGxlcyBkaWZmZXJlbnQgbmV0d29yayBlbnZpcm9ubWVudHMuIEknbSBleHBlY3RpbmcgdG8gc2VlIGEgc3RydWN0dXJlZCBicmVha2Rvd24gb2YgZGVwZW5kZW5jaWVzIGFuZCBkZWZhdWx0IHZhbHVlcywgd2hpY2ggaGVscHMgdW5kZXJzdGFuZCBob3cgdGhlIGRpZmZlcmVudCBwaWVjZXMgb2YgTVBUQ1AgZml0IHRvZ2V0aGVyLiBBcmUgdGhlcmUgYW55IGNvbmRpdGlvbmFsIGRlcGVuZGVuY2llcz8gQXJlIGFueSBmZWF0dXJlcyBleHBlcmltZW50YWwgYW5kIHRodXMgYmVoaW5kIGEgY29uZmlnIGZsYWc/IEknbSBob3BpbmcgaXQgY2xlYXJseSBtYXBzIG91dCB0aGUgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIHRoZSB2YXJpb3VzIE1QVENQIGNvbXBvbmVudHMgYW5kIHRoZWlyIHJlc3BlY3RpdmUgY29tcGlsZS10aW1lIHNldHRpbmdzLiBJdCdzIHRpbWUgdG8gc2VlIHdoYXQgdGhpcyBLY29uZmlnIGZpbGUgaG9sZHMhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0NjMsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QwOTo0OTo0My4xMjUyOTkyNDdaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQxNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L21wdGNwL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHRcXG4gICAyOlxcdGNvbmZpZyBNUFRDUFxcbiAgIDM6XFx0XFx0Ym9vbCBcXFwiTVBUQ1A6IE11bHRpcGF0aCBUQ1BcXFwiXFxuICAgNDpcXHRcXHRkZXBlbmRzIG9uIElORVRcXG4gICA1OlxcdFxcdHNlbGVjdCBTS0JfRVhURU5TSU9OU1xcbiAgIDY6XFx0XFx0c2VsZWN0IENSWVBUT19MSUJfU0hBMjU2XFxuICAgNzpcXHRcXHRzZWxlY3QgQ1JZUFRPX0xJQl9VVElMU1xcbiAgIDg6XFx0XFx0aGVscFxcbiAgIDk6XFx0XFx0ICBNdWx0aXBhdGggVENQIChNUFRDUCkgY29ubmVjdGlvbnMgc2VuZCBhbmQgcmVjZWl2ZSBkYXRhIG92ZXIgbXVsdGlwbGVcXG4gIDEwOlxcdFxcdCAgc3ViZmxvd3MgaW4gb3JkZXIgdG8gdXRpbGl6ZSBtdWx0aXBsZSBuZXR3b3JrIHBhdGhzLiBFYWNoIHN1YmZsb3dcXG4gIDExOlxcdFxcdCAgdXNlcyB0aGUgVENQIHByb3RvY29sLCBhbmQgVENQIG9wdGlvbnMgY2FycnkgaGVhZGVyIGluZm9ybWF0aW9uIGZvclxcbiAgMTI6XFx0XFx0ICBNUFRDUC5cXG4gIDEzOlxcdFxcbiAgMTQ6XFx0aWYgTVBUQ1BcXG4gIDE1OlxcdFxcbiAgMTY6XFx0Y29uZmlnIElORVRfTVBUQ1BfRElBR1xcbiAgMTc6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUX0RJQUdcXG4gIDE4OlxcdFxcdGRlZl90cmlzdGF0ZSBJTkVUX0RJQUdcXG4gIDE5OlxcdFxcbiAgMjA6XFx0Y29uZmlnIE1QVENQX0lQVjZcXG4gIDIxOlxcdFxcdGJvb2wgXFxcIk1QVENQOiBJUHY2IHN1cHBvcnQgZm9yIE11bHRpcGF0aCBUQ1BcXFwiXFxuICAyMjpcXHRcXHRkZXBlbmRzIG9uIElQVjY9eVxcbiAgMjM6XFx0XFx0ZGVmYXVsdCB5XFxuICAyNDpcXHRcXG4gIDI1OlxcdGNvbmZpZyBNUFRDUF9LVU5JVF9URVNUXFxuICAyNjpcXHRcXHR0cmlzdGF0ZSBcXFwiVGhpcyBidWlsZHMgdGhlIE1QVENQIEtVbml0IHRlc3RzXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuICAyNzpcXHRcXHRkZXBlbmRzIG9uIEtVTklUXFxuICAyODpcXHRcXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xcbiAgMjk6XFx0XFx0aGVscFxcbiAgMzA6XFx0XFx0ICBDdXJyZW50bHkgY292ZXJzIHRoZSBNUFRDUCBjcnlwdG8gYW5kIHRva2VuIGhlbHBlcnMuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDA5OjQ5OjQzLjEyNTM3NTE0N1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODc5Njg5MDg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqTVBUQ1AgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5BbHJpZ2h0LCBzbyBJIHNlZSBgTVBUQ1BgIGFuZCBgTVBUQ1BfSVBWNmAgYXMgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIGhlcmUuIE5hdHVyYWxseSwgbXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdGhhdCBgTVBUQ1BfSVBWNmAgaXMgcHJvYmFibHkgY29udGluZ2VudCBvbiBgSVBWNj15YCBiZWluZyBzZXQuIFRoYXQgbWFrZXMgaW50dWl0aXZlIHNlbnNlOyB3ZSBjYW4ndCBlbmFibGUgSVB2Ni1zcGVjaWZpYyBNUFRDUCBmZWF0dXJlcyB3aXRob3V0IElQdjYgaXRzZWxmLlxuXG5Ob3csIEkgbmVlZCB0byBjb25maXJtIHNvbWV0aGluZzogSSBuZWVkIHRvIHZlcmlmeSB0aGF0IHRoZSBgbXB0Y3Bfc2V0c29ja29wdF92NmAgZnVuY3Rpb25hbGl0eSBpcyBpbmRlZWQgcHJvdGVjdGVkIGJ5IHRoYXQgYCNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KWAgY29uZGl0aW9uYWwgd2l0aGluIGBuZXQvbXB0Y3Avc29ja29wdC5jYC4gSXQncyBhIGZ1bmRhbWVudGFsIGNoZWNrLCBtYWtpbmcgc3VyZSB0aGUgSVB2Ni1zcGVjaWZpYyBzb2NrZXQgb3B0aW9ucyBhcmVuJ3QgYWNjaWRlbnRhbGx5IGV4cG9zZWQgd2hlbiBJUHY2IHN1cHBvcnQgaXMgZGlzYWJsZWQuIEknbGwgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhlIGNvZGUgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYxMjYsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDA5OjQ5OjQ4LjAwNTA2NjM5NVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzM4MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L21wdGNwL3NvY2tvcHQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MjAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0MjA6XFx0XFx0fVxcbiA0MjE6XFx0XFx0cmVsZWFzZV9zb2NrKHNrKTtcXG4gNDIyOlxcdFxcbiA0MjM6XFx0XFx0cmV0dXJuIDA7XFxuIDQyNDpcXHR9XFxuIDQyNTpcXHRcXG4gNDI2OlxcdHN0YXRpYyBpbnQgbXB0Y3Bfc2V0c29ja29wdF92NihzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBpbnQgb3B0bmFtZSxcXG4gNDI3OlxcdFxcdFxcdFxcdCAgICAgICBzb2NrcHRyX3Qgb3B0dmFsLCB1bnNpZ25lZCBpbnQgb3B0bGVuKVxcbiA0Mjg6XFx0e1xcbiA0Mjk6XFx0XFx0c3RydWN0IHNvY2sgKnNrID0gKHN0cnVjdCBzb2NrICopbXNrO1xcbiA0MzA6XFx0XFx0aW50IHJldCA9IC1FT1BOT1RTVVBQO1xcbiA0MzE6XFx0XFx0c3RydWN0IHNvY2sgKnNzaztcXG4gNDMyOlxcdFxcbiA0MzM6XFx0XFx0c3dpdGNoIChvcHRuYW1lKSB7XFxuIDQzNDpcXHRcXHRjYXNlIElQVjZfVjZPTkxZOlxcbiA0MzU6XFx0XFx0Y2FzZSBJUFY2X1RSQU5TUEFSRU5UOlxcbiA0MzY6XFx0XFx0Y2FzZSBJUFY2X0ZSRUVCSU5EOlxcbiA0Mzc6XFx0XFx0XFx0bG9ja19zb2NrKHNrKTtcXG4gNDM4OlxcdFxcdFxcdHNzayA9IF9fbXB0Y3Bfbm1wY19zayhtc2spO1xcbiA0Mzk6XFx0XFx0XFx0aWYgKElTX0VSUihzc2spKSB7XFxuIDQ0MDpcXHRcXHRcXHRcXHRyZWxlYXNlX3NvY2soc2spO1xcbiA0NDE6XFx0XFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIoc3NrKTtcXG4gNDQyOlxcdFxcdFxcdH1cXG4gNDQzOlxcdFxcbiA0NDQ6XFx0XFx0XFx0cmV0ID0gdGNwX3NldHNvY2tvcHQoc3NrLCBTT0xfSVBWNiwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pO1xcbiA0NDU6XFx0XFx0XFx0aWYgKHJldCAhPSAwKSB7XFxuIDQ0NjpcXHRcXHRcXHRcXHRyZWxlYXNlX3NvY2soc2spO1xcbiA0NDc6XFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gNDQ4OlxcdFxcdFxcdH1cXG4gNDQ5OlxcdFxcbiA0NTA6XFx0XFx0XFx0c29ja29wdF9zZXFfaW5jKG1zayk7XFxuIDQ1MTpcXHRcXG4gNDUyOlxcdFxcdFxcdHN3aXRjaCAob3B0bmFtZSkge1xcbiA0NTM6XFx0XFx0XFx0Y2FzZSBJUFY2X1Y2T05MWTpcXG4gNDU0OlxcdFxcdFxcdFxcdHNrLVxcdTAwM2Vza19pcHY2b25seSA9IHNzay1cXHUwMDNlc2tfaXB2Nm9ubHk7XFxuIDQ1NTpcXHRcXHRcXHRcXHRicmVhaztcXG4gNDU2OlxcdFxcdFxcdGNhc2UgSVBWNl9UUkFOU1BBUkVOVDpcXG4gNDU3OlxcdFxcdFxcdFxcdGluZXRfYXNzaWduX2JpdChUUkFOU1BBUkVOVCwgc2ssXFxuIDQ1ODpcXHRcXHRcXHRcXHRcXHRcXHRpbmV0X3Rlc3RfYml0KFRSQU5TUEFSRU5ULCBzc2spKTtcXG4gNDU5OlxcdFxcdFxcdFxcdGJyZWFrO1xcbiA0NjA6XFx0XFx0XFx0Y2FzZSBJUFY2X0ZSRUVCSU5EOlxcbiA0NjE6XFx0XFx0XFx0XFx0aW5ldF9hc3NpZ25fYml0KEZSRUVCSU5ELCBzayxcXG4gNDYyOlxcdFxcdFxcdFxcdFxcdFxcdGluZXRfdGVzdF9iaXQoRlJFRUJJTkQsIHNzaykpO1xcbiA0NjM6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDQ2NDpcXHRcXHRcXHR9XFxuIDQ2NTpcXHRcXG4gNDY2OlxcdFxcdFxcdHJlbGVhc2Vfc29jayhzayk7XFxuIDQ2NzpcXHRcXHRcXHRicmVhaztcXG4gNDY4OlxcdFxcdGNhc2UgSVBWNl9UQ0xBU1M6XFxuIDQ2OTpcXHRcXHRcXHRyZXR1cm4gbXB0Y3Bfc2V0c29ja29wdF92Nl9zZXRfdGNsYXNzKG1zaywgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QwOTo0OTo0OC4wMDUyNDMwODVaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDIzMjA0ODQ5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIE1QVENQdjYgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIFNvbWV0aGluZyBkb2Vzbid0IGZlZWwgcmlnaHQuIEkgd2FzIGV4cGVjdGluZyBgbXB0Y3Bfc2V0c29ja29wdF92NmAgdG8gYmUgZ3VhcmRlZCBieSBhbiBgI2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpYCBjb25kaXRpb25hbC4gQnV0IGl0J3Mgbm90LiBUaGF0J3Mgc3RyYW5nZS4gVGhpcyBjb3VsZCBsZWFkIHRvIHVuZGVmaW5lZCBiZWhhdmlvdXIgaWYgSVB2NiBpcyBub3QgZW5hYmxlZC5cblxuTGV0IG1lIGp1c3QgcXVpY2tseSB2ZXJpZnkgc29tZXRoaW5nLiBJJ2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZSBgbmV0L21wdGNwL3NvY2tvcHQuY2AgZmlsZSBhbmQgc2VlIHdoYXQgdGhlIGJ1aWxkIGRpcmVjdGl2ZXMgbG9vayBsaWtlIHRoZXJlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBJUHY2IGNvbmZpZ3VyYXRpb24gaXMgYXBwbGllZCB0byB0aGUgc29ja2V0IG9wdGlvbnMgZmlsZS4gVGhlcmUgaXMgYSBjaGFuY2UgdGhhdCBpdCBpcyBzb21laG93IGJlaW5nIGluY2x1ZGVkLCBldmVuIHdoZW4gaXQgc2hvdWxkbid0IGJlLiBUaGlzIG5lZWRzIHRvIGJlIHRob3JvdWdobHkgaW52ZXN0aWdhdGVkIGFuZCBwb3RlbnRpYWxseSBjb3JyZWN0ZWQuIEkgbmVlZCB0byBoYXZlIGEgbG9vayBhdCB0aGUgZmlsZSdzIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzIHRvIGNvbmZpcm0gdGhhdCBpdCdzIGJlaGF2aW5nIGFzIGV4cGVjdGVkIHdpdGggcmVzcGVjdCB0byB0aGUgSVB2NiBjb25maWd1cmF0aW9uIG9wdGlvbi4gVGhpcyBjb3VsZCBiZSBhIHNpZ25pZmljYW50IGJ1ZyBpZiBpdCdzIG5vdCBoYW5kbGVkIGNvcnJlY3RseS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzE1NiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMDk6NDk6NTIuMjM3MjkzODcxWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDAxOTg2NzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX01QVENQX0lQVjZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21wdGNwL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbXB0Y3AvY3RybC5jPTU4Nz12b2lkIF9faW5pdCBtcHRjcF9pbml0KHZvaWQpXFxuLS1cXG5uZXQvbXB0Y3AvY3RybC5jLTU5NS1cXG5uZXQvbXB0Y3AvY3RybC5jOjU5NjojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcXG5uZXQvbXB0Y3AvY3RybC5jLTU5Ny1pbnQgX19pbml0IG1wdGNwdjZfaW5pdCh2b2lkKVxcbi0tXFxubmV0L21wdGNwL29wdGlvbnMuYz0yMz1zdGF0aWMgdm9pZCBtcHRjcF9wYXJzZV9vcHRpb24oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9tcHRjcC9vcHRpb25zLmMtMjQxLVxcdFxcdFxcdFxcdG1wX29wdC1cXHUwMDNlYWRkci5mYW1pbHkgPSBBRl9JTkVUO1xcbm5ldC9tcHRjcC9vcHRpb25zLmM6MjQyOiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxcbm5ldC9tcHRjcC9vcHRpb25zLmMtMjQzLVxcdFxcdFxcdGVsc2UgaWYgKG9wc2l6ZSA9PSBUQ1BPTEVOX01QVENQX0FERF9BRERSNiB8fFxcbi0tXFxubmV0L21wdGNwL29wdGlvbnMuYy0yNTItXFx0XFx0XFx0XFx0bXBfb3B0LVxcdTAwM2VhZGRyLmZhbWlseSA9IEFGX0lORVQ7XFxubmV0L21wdGNwL29wdGlvbnMuYzoyNTM6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXFxubmV0L21wdGNwL29wdGlvbnMuYy0yNTQtXFx0XFx0XFx0ZWxzZSBpZiAob3BzaXplID09IFRDUE9MRU5fTVBUQ1BfQUREX0FERFI2X0JBU0UgfHxcXG4tLVxcbm5ldC9tcHRjcC9vcHRpb25zLmMtMjc0LVxcdFxcdH1cXG5uZXQvbXB0Y3Avb3B0aW9ucy5jOjI3NTojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTI3Ni1cXHRcXHRlbHNlIHtcXG4tLVxcbm5ldC9tcHRjcC9vcHRpb25zLmM9NjMyPXN0YXRpYyB1NjQgYWRkX2FkZHJfZ2VuZXJhdGVfaG1hYyh1NjQga2V5MSwgdTY0IGtleTIsXFxuLS1cXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTY0NC1cXHR9XFxubmV0L21wdGNwL29wdGlvbnMuYzo2NDU6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXFxubmV0L21wdGNwL29wdGlvbnMuYy02NDYtXFx0ZWxzZSBpZiAoYWRkci1cXHUwMDNlZmFtaWx5ID09IEFGX0lORVQ2KSB7XFxuLS1cXG5uZXQvbXB0Y3Avb3B0aW9ucy5jPTEzODQ9dm9pZCBtcHRjcF93cml0ZV9vcHRpb25zKHN0cnVjdCB0Y3BoZHIgKnRoLCBfX2JlMzIgKnB0ciwgc3RydWN0IHRjcF9zb2NrICp0cCxcXG4tLVxcbm5ldC9tcHRjcC9vcHRpb25zLmMtMTU2Ny1cXG5uZXQvbXB0Y3Avb3B0aW9ucy5jOjE1Njg6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXFxubmV0L21wdGNwL29wdGlvbnMuYy0xNTY5LVxcdFxcdGlmIChvcHRzLVxcdTAwM2VhZGRyLmZhbWlseSA9PSBBRl9JTkVUNilcXG4tLVxcbm5ldC9tcHRjcC9vcHRpb25zLmMtMTU4Ni1cXHRcXHR9XFxubmV0L21wdGNwL29wdGlvbnMuYzoxNTg3OiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxcbm5ldC9tcHRjcC9vcHRpb25zLmMtMTU4OC1cXHRcXHRlbHNlIGlmIChvcHRzLVxcdTAwM2VhZGRyLmZhbWlseSA9PSBBRl9JTkVUNikge1xcbi0tXFxubmV0L21wdGNwL3BtLmM9MzM9Ym9vbCBtcHRjcF9wbV9hZGRyX2ZhbWlsaWVzX21hdGNoKGNvbnN0IHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9tcHRjcC9wbS5jLTM4LVxcbm5ldC9tcHRjcC9wbS5jOjM5OiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxcbm5ldC9tcHRjcC9wbS5jLTQwLVxcdGJvb2wgbG9jX2lzX3Y0ID0gbG9jLVxcdTAwM2VmYW1pbHkgPT0gQUZfSU5FVCB8fCBpcHY2X2FkZHJfdjRtYXBwZWQoXFx1MDAyNmxvYy1cXHUwMDNlYWRkcjYpO1xcbi0tXFxubmV0L21wdGNwL3BtLmM9NTU9Ym9vbCBtcHRjcF9hZGRyZXNzZXNfZXF1YWwoY29uc3Qgc3RydWN0IG1wdGNwX2FkZHJfaW5mbyAqYSxcXG4tLVxcbm5ldC9tcHRjcC9wbS5jLTYyLVxcdFxcdFxcdGFkZHJfZXF1YWxzID0gYS1cXHUwMDNlYWRkci5zX2FkZHIgPT0gYi1cXHUwMDNlYWRkci5zX2FkZHI7XFxubmV0L21wdGNwL3BtLmM6NjM6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXFxubmV0L21wdGNwL3BtLmMtNjQtXFx0XFx0ZWxzZVxcbi0tXFxubmV0L21wdGNwL3BtLmM9ODM9dm9pZCBtcHRjcF9sb2NhbF9hZGRyZXNzKGNvbnN0IHN0cnVjdCBzb2NrX2NvbW1vbiAqc2tjLFxcbi0tXFxubmV0L21wdGNwL3BtLmMtODktXFx0XFx0YWRkci1cXHUwMDNlYWRkci5zX2FkZHIgPSBza2MtXFx1MDAzZXNrY19yY3Zfc2FkZHI7XFxubmV0L21wdGNwL3BtLmM6OTA6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXFxubmV0L21wdGNwL3BtLmMtOTEtXFx0ZWxzZSBpZiAoYWRkci1cXHUwMDNlZmFtaWx5ID09IEFGX0lORVQ2KVxcbi0tXFxubmV0L21wdGNwL3BtLmM9OTY9dm9pZCBtcHRjcF9yZW1vdGVfYWRkcmVzcyhjb25zdCBzdHJ1Y3Qgc29ja19jb21tb24gKnNrYyxcXG4tLVxcbm5ldC9tcHRjcC9wbS5jLTEwMi1cXHRcXHRhZGRyLVxcdTAwM2VhZGRyLnNfYWRkciA9IHNrYy1cXHUwMDNlc2tjX2RhZGRyO1xcbm5ldC9tcHRjcC9wbS5jOjEwMzojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcXG5uZXQvbXB0Y3AvcG0uYy0xMDQtXFx0ZWxzZSBpZiAoYWRkci1cXHUwMDNlZmFtaWx5ID09IEFGX0lORVQ2KVxcbi0tXFxubmV0L21wdGNwL3BtX2tlcm5lbC5jPTYwNj1maWxsX2xvY2FsX2FkZHJlc3NfYW55KHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIHN0cnVjdCBtcHRjcF9hZGRyX2luZm8gKnJlbW90ZSxcXG4tLVxcbm5ldC9tcHRjcC9wbV9rZXJuZWwuYy02MTItXFx0bG9jYWwtXFx1MDAzZWFkZHIuZmFtaWx5ID1cXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmM6NjEzOiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxcbm5ldC9tcHRjcC9wbV9rZXJuZWwuYy02MTQtXFx0XFx0XFx0cmVtb3RlLVxcdTAwM2VmYW1pbHkgPT0gQUZfSU5FVDYgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbm5ldC9tcHRjcC9wbV9rZXJuZWwuYz04NTI9c3RhdGljIGludCBtcHRjcF9wbV9ubF9jcmVhdGVfbGlzdGVuX3NvY2tldChzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmMtODg5LVxcdG1wdGNwX2luZm8yc29ja2FkZHIoXFx1MDAyNmVudHJ5LVxcdTAwM2VhZGRyLCBcXHUwMDI2YWRkciwgZW50cnktXFx1MDAzZWFkZHIuZmFtaWx5KTtcXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmM6ODkwOiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxcbm5ldC9tcHRjcC9wbV9rZXJuZWwuYy04OTEtXFx0aWYgKGVudHJ5LVxcdTAwM2VhZGRyLmZhbWlseSA9PSBBRl9JTkVUNilcXG4tLVxcbm5ldC9tcHRjcC9wbV9rZXJuZWwuYy04OTUtXFx0XFx0ZXJyID0gaW5ldF9iaW5kX3NrKHNzaywgKHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICopXFx1MDAyNmFkZHIsIGFkZHJsZW4pO1xcbm5ldC9tcHRjcC9wbV9rZXJuZWwuYzo4OTY6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXFxubmV0L21wdGNwL3BtX2tlcm5lbC5jLTg5Ny1cXHRlbHNlIGlmIChzc2stXFx1MDAzZXNrX2ZhbWlseSA9PSBBRl9JTkVUNilcXG4tLVxcbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmM9MjI9c3RhdGljIGludCBtcHRjcF9wbV9mYW1pbHlfdG9fYWRkcihpbnQgZmFtaWx5KVxcbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmMtMjMte1xcbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmM6MjQ6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXFxubmV0L21wdGNwL3BtX25ldGxpbmsuYy0yNS1cXHRpZiAoZmFtaWx5ID09IEFGX0lORVQ2KVxcbi0tXFxubmV0L21wdGNwL3BtX25ldGxpbmsuYz0zMT1zdGF0aWMgaW50IG1wdGNwX3BtX3BhcnNlX3BtX2FkZHJfYXR0cihzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbi0tXFxubmV0L21wdGNwL3BtX25ldGxpbmsuYy02My1cXHRpZiAoYWRkci1cXHUwMDNlZmFtaWx5ICE9IEFGX0lORVRcXG5uZXQvbXB0Y3AvcG1fbmV0bGluay5jOjY0OiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxcbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmMtNjUtXFx0ICAgIFxcdTAwMjZcXHUwMDI2IGFkZHItXFx1MDAzZWZhbWlseSAhPSBBRl9JTkVUNlxcbi0tXFxubmV0L21wdGNwL3BtX25ldGxpbmsuYy03OC1cXG5uZXQvbXB0Y3AvcG1fbmV0bGluay5jOjc5OiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxcbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmMtODAtXFx0aWYgKGFkZHItXFx1MDAzZWZhbWlseSA9PSBBRl9JTkVUNilcXG4tLVxcbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmM9MTMxPXN0YXRpYyBpbnQgbXB0Y3BfbmxfZmlsbF9hZGRyKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbXB0Y3AvcG1fbmV0bGluay5jLTE1Ni1cXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG5uZXQvbXB0Y3AvcG1fbmV0bGluay5jOjE1NzojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcXG5uZXQvbXB0Y3AvcG1fbmV0bGluay5jLTE1OC1cXHRlbHNlIGlmIChhZGRyLVxcdTAwM2VmYW1pbHkgPT0gQUZfSU5FVDYgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmM9Mjk4PXN0YXRpYyBpbnQgbXB0Y3BfZXZlbnRfYWRkX3N1YmZsb3coc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHNvY2sgKnNzaylcXG4tLVxcbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmMtMzEyLVxcdFxcdGJyZWFrO1xcbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmM6MzEzOiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxcbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmMtMzE0LVxcdGNhc2UgQUZfSU5FVDY6IHtcXG4tLVxcbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmM9NDY1PXZvaWQgbXB0Y3BfZXZlbnRfYWRkcl9hbm5vdW5jZWQoY29uc3Qgc3RydWN0IHNvY2sgKnNzayxcXG4tLVxcbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmMtNTAyLVxcdFxcdGJyZWFrO1xcbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmM6NTAzOiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxcbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmMtNTA0LVxcdGNhc2UgQUZfSU5FVDY6XFxuLS1cXG5uZXQvbXB0Y3AvcG1fbmV0bGluay5jPTUyMj12b2lkIG1wdGNwX2V2ZW50X3BtX2xpc3RlbmVyKGNvbnN0IHN0cnVjdCBzb2NrICpzc2ssXFxuLS1cXG5uZXQvbXB0Y3AvcG1fbmV0bGluay5jLTU1MS1cXHRcXHRicmVhaztcXG5uZXQvbXB0Y3AvcG1fbmV0bGluay5jOjU1MjojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcXG5uZXQvbXB0Y3AvcG1fbmV0bGluay5jLTU1My1cXHRjYXNlIEFGX0lORVQ2OiB7XFxuLS1cXG5uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmM9NDMyPXN0YXRpYyBzdHJ1Y3Qgc29jayAqbXB0Y3BfbmxfZmluZF9zc2soc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcXG4tLVxcbm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYy00NTctXFx0XFx0XFx0YnJlYWs7XFxubmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jOjQ1ODojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcXG5uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmMtNDU5LVxcdFxcdGNhc2UgQUZfSU5FVDY6IHtcXG4tLVxcbm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYz00Nzg9aW50IG1wdGNwX3BtX25sX3N1YmZsb3dfZGVzdHJveV9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmMtNTA2LVxcbm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYzo1MDc6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXFxubmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jLTUwOC1cXHRpZiAoYWRkcl9sLmFkZHIuZmFtaWx5ID09IEFGX0lORVQgXFx1MDAyNlxcdTAwMjYgaXB2Nl9hZGRyX3Y0bWFwcGVkKFxcdTAwMjZhZGRyX3IuYWRkcjYpKSB7XFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yMC0jaW5jbHVkZSBcXHUwMDNjbmV0L3RjcF9zdGF0ZXMuaFxcdTAwM2VcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoyMTojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yMi0jaW5jbHVkZSBcXHUwMDNjbmV0L3RyYW5zcF92Ni5oXFx1MDAzZVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmM9MzE9c3RhdGljIHVuc2lnbmVkIGludCBtcHRjcF9pbnFfaGludChjb25zdCBzdHJ1Y3Qgc29jayAqc2spO1xcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMzUtXFxubmV0L21wdGNwL3Byb3RvY29sLmM6MzY6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMzctc3RydWN0IG1wdGNwNl9zb2NrIHtcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jPTY0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzICptcHRjcF9mYWxsYmFja190Y3Bfb3BzKGNvbnN0IHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTY3LVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjY4OiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTY5LVxcdGlmIChmYW1pbHkgPT0gQUZfSU5FVDYpXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0zMzk3PXN0YXRpYyB2b2lkIG1wdGNwX2NvcHlfaW5hZGRycyhzdHJ1Y3Qgc29jayAqbXNrLCBjb25zdCBzdHJ1Y3Qgc29jayAqc3NrKVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTMzOTgte1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjMzOTk6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMzQwMC1cXHRjb25zdCBzdHJ1Y3QgaXB2Nl9waW5mbyAqc3NrNiA9IGluZXQ2X3NrKHNzayk7XFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0zNDQyPXN0YXRpYyBpbnQgbXB0Y3BfZGlzY29ubmVjdChzdHJ1Y3Qgc29jayAqc2ssIGludCBmbGFncylcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTM1MDQtXFxubmV0L21wdGNwL3Byb3RvY29sLmM6MzUwNTojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zNTA2LXN0YXRpYyBzdHJ1Y3QgaXB2Nl9waW5mbyAqbXB0Y3BfaW5ldDZfc2soY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmM9MzU1Mz1zdHJ1Y3Qgc29jayAqbXB0Y3Bfc2tfY2xvbmVfaW5pdChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zNTY1LVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjM1NjY6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMzU2Ny1cXHRpZiAobnNrLVxcdTAwM2Vza19mYW1pbHkgPT0gQUZfSU5FVDYpXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zNTcyLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjM1NzM6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMzU3NC1cXHRpZiAobnNrLVxcdTAwM2Vza19mYW1pbHkgPT0gQUZfSU5FVDYpXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz00MDk5PXN0YXRpYyBpbnQgbXB0Y3BfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqdWFkZHIsIGludCBhZGRyX2xlbilcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTQxMTMtXFx0XFx0ZXJyID0gaW5ldF9iaW5kX3NrKHNzaywgdWFkZHIsIGFkZHJfbGVuKTtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzo0MTE0OiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTQxMTUtXFx0ZWxzZSBpZiAoc2stXFx1MDAzZXNrX2ZhbWlseSA9PSBBRl9JTkVUNilcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jPTQ2MzU9dm9pZCBfX2luaXQgbXB0Y3BfcHJvdG9faW5pdCh2b2lkKVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtNDY3NC1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzo0Njc1OiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTQ2NzYtc3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgbXB0Y3BfdjZfc3RyZWFtX29wcyA9IHtcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5oPTkxMj12b2lkIF9faW5pdCBtcHRjcF9wcm90b19pbml0KHZvaWQpO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5oOjkxMzojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaC05MTQtaW50IF9faW5pdCBtcHRjcF9wcm90b192Nl9pbml0KHZvaWQpO1xcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYy0xNy0jaW5jbHVkZSBcXHUwMDNjbmV0L3Byb3RvY29sLmhcXHUwMDNlXFxubmV0L21wdGNwL3N1YmZsb3cuYzoxODojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE5LSNpbmNsdWRlIFxcdTAwM2NuZXQvaXA2X3JvdXRlLmhcXHUwMDNlXFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTM1OD1zdGF0aWMgaW50IHN1YmZsb3dfdjRfc2VuZF9zeW5hY2soY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsXFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTM3MC1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjM3MTojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTM3Mi1zdGF0aWMgaW50IHN1YmZsb3dfdjZfc2VuZF9zeW5hY2soY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsXFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTY0OT1zdGF0aWMgaW50IHN1YmZsb3dfcmVidWlsZF9oZWFkZXIoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYy02NTgtXFxubmV0L21wdGNwL3N1YmZsb3cuYzo2NTk6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXFxubmV0L21wdGNwL3N1YmZsb3cuYy02NjAtc3RhdGljIGludCBzdWJmbG93X3Y2X3JlYnVpbGRfaGVhZGVyKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmM9NjkyPXN0YXRpYyB2b2lkIHN1YmZsb3dfdjRfcmVxX2Rlc3RydWN0b3Ioc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYy02OTctXFxubmV0L21wdGNwL3N1YmZsb3cuYzo2OTg6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXFxubmV0L21wdGNwL3N1YmZsb3cuYy02OTktc3RhdGljIHN0cnVjdCByZXF1ZXN0X3NvY2tfb3BzIG1wdGNwX3N1YmZsb3dfdjZfcmVxdWVzdF9zb2NrX29wcyBfX3JvX2FmdGVyX2luaXQ7XFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTczNz1zdHJ1Y3QgcmVxdWVzdF9zb2NrICptcHRjcF9zdWJmbG93X3JlcXNrX2FsbG9jKGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2tfb3BzICpvcHMsXFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTc0Mi1cXHRcXHRvcHMgPSBcXHUwMDI2bXB0Y3Bfc3ViZmxvd192NF9yZXF1ZXN0X3NvY2tfb3BzO1xcbm5ldC9tcHRjcC9zdWJmbG93LmM6NzQzOiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtNzQ0LVxcdGVsc2UgaWYgKG9wcy1cXHUwMDNlZmFtaWx5ID09IEFGX0lORVQ2KVxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYz0xNTUzPXN1YmZsb3dfZGVmYXVsdF9hZl9vcHMoc3RydWN0IHNvY2sgKnNrKVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTU1NC17XFxubmV0L21wdGNwL3N1YmZsb3cuYzoxNTU1OiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTU1Ni1cXHRpZiAoc2stXFx1MDAzZXNrX2ZhbWlseSA9PSBBRl9JTkVUNilcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTU2MS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjE1NjI6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXFxubmV0L21wdGNwL3N1YmZsb3cuYy0xNTYzLXZvaWQgbXB0Y3B2Nl9oYW5kbGVfbWFwcGVkKHN0cnVjdCBzb2NrICpzaywgYm9vbCBtYXBwZWQpXFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTE1ODI9dm9pZCBtcHRjcF9pbmZvMnNvY2thZGRyKGNvbnN0IHN0cnVjdCBtcHRjcF9hZGRyX2luZm8gKmluZm8sXFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE1OTItXFx0XFx0XFx0aW5fYWRkci1cXHUwMDNlc2luX2FkZHIgPSBpbmZvLVxcdTAwM2VhZGRyO1xcbm5ldC9tcHRjcC9zdWJmbG93LmM6MTU5MzojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE1OTQtXFx0XFx0ZWxzZSBpZiAoaXB2Nl9hZGRyX3Y0bWFwcGVkKFxcdTAwMjZpbmZvLVxcdTAwM2VhZGRyNikpXFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE1OTgtXFx0fVxcbm5ldC9tcHRjcC9zdWJmbG93LmM6MTU5OTojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE2MDAtXFx0ZWxzZSBpZiAoYWRkci1cXHUwMDNlc3NfZmFtaWx5ID09IEFGX0lORVQ2KSB7XFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTE2MTM9aW50IF9fbXB0Y3Bfc3ViZmxvd19jb25uZWN0KHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IG1wdGNwX3BtX2xvY2FsICpsb2NhbCxcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTY0OC1cXHRcXHRcXHRsb2NhbF9pZCA9IC0xO1xcbm5ldC9tcHRjcC9zdWJmbG93LmM6MTY0OTojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE2NTAtXFx0fSBlbHNlIGlmIChzay1cXHUwMDNlc2tfZmFtaWx5ID09IEFGX0lORVQ2KSB7XFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE2NjUtXFx0YWRkcmxlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pO1xcbm5ldC9tcHRjcC9zdWJmbG93LmM6MTY2NjojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE2NjctXFx0aWYgKGFkZHIuc3NfZmFtaWx5ID09IEFGX0lORVQ2KVxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYz0xNzU2PXN0YXRpYyB2b2lkIG1wdGNwX3N1YmZsb3dfb3BzX292ZXJyaWRlKHN0cnVjdCBzb2NrICpzc2spXFxubmV0L21wdGNwL3N1YmZsb3cuYy0xNzU3LXtcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjE3NTg6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXFxubmV0L21wdGNwL3N1YmZsb3cuYy0xNzU5LVxcdGlmIChzc2stXFx1MDAzZXNrX3Byb3QgPT0gXFx1MDAyNnRjcHY2X3Byb3QpXFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTE3NjY9c3RhdGljIHZvaWQgbXB0Y3Bfc3ViZmxvd19vcHNfdW5kb19vdmVycmlkZShzdHJ1Y3Qgc29jayAqc3NrKVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTc2Ny17XFxubmV0L21wdGNwL3N1YmZsb3cuYzoxNzY4OiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTc2OS1cXHRpZiAoc3NrLVxcdTAwM2Vza19wcm90ID09IFxcdTAwMjZ0Y3B2Nl9wcm90X292ZXJyaWRlKVxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYz0yMTQxPXZvaWQgX19pbml0IG1wdGNwX3N1YmZsb3dfaW5pdCh2b2lkKVxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYy0yMTczLVxcbm5ldC9tcHRjcC9zdWJmbG93LmM6MjE3NDojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTIxNzUtdm9pZCBfX2luaXQgbXB0Y3Bfc3ViZmxvd192Nl9pbml0KHZvaWQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDA5OjQ5OjUyLjMzNzQ5NzIyNFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjYzMzc3Nzc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBhbiBleHBlcnQgaW4gbmV0d29yayBwcm9ncmFtbWluZyBhbmQgTVBUQ1AsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipEaWdnaW5nIGludG8gdGhlIE1QVENQIFNvY2tldCBPcHRpb25zKipcblxuUmlnaHQsIHNvIGBtcHRjcF9zZXRzb2Nrb3B0X3Y2YCBpcyBkZWZpbml0ZWx5IHRoZSB0YXJnZXQgd2hlbiB3ZSdyZSBzZXR0aW5nIElQdjYtc3BlY2lmaWMgc29ja2V0IG9wdGlvbnMgdXNpbmcgTVBUQ1AuIFRoYXQgbWFrZXMgc2Vuc2UsIGxvZ2ljYWxseS4gV2UncmUgdXNpbmcgYFNPTF9JUFY2YCBhcyB0aGUgbGV2ZWwuIE5vdywgSSBuZWVkIHRvIHNlZSAqaG93KiB0aGlzIGludGVyYWN0aW9uIHdvcmtzIHdpdGhpbiB0aGUgYmlnZ2VyIHBpY3R1cmUuIExldCBtZSBwdWxsIHVwIGBuZXQvbXB0Y3Avc29ja29wdC5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdy4gSSdsbCBmb2N1cyBvbiBgbXB0Y3Bfc2V0c29ja29wdGAgZmlyc3QsIG9mIGNvdXJzZSwgYmVjYXVzZSB0aGF0J3MgdGhlIGVudHJ5IHBvaW50LiBJIHdhbnQgdG8gc2VlIGhvdyBpdCBoYW5kbGVzIHRoZSBkaWZmZXJlbnQgbGV2ZWxzIGFuZCB3aGF0IGFjdGlvbnMgaXQgdGFrZXMgZGVwZW5kaW5nIG9uIHRoZSBsZXZlbCBzcGVjaWZpZWQuIFRoZSBJUHY2IGNhc2UgaXMgd2hhdCBpbnRlcmVzdHMgbWUsIGJ1dCBJJ2xsIG1ha2Ugc3VyZSB0byBub3RlIHRoZSBvdGhlciBvcHRpb25zIGFsb25nIHRoZSB3YXkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyODAwLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMDk6NDk6NTYuMDAwODc3NzIyWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNjU2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbXB0Y3Avc29ja29wdC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDkzOCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDkzODpcXHRpbnQgbXB0Y3Bfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXFxuIDkzOTpcXHRcXHRcXHQgICAgIHNvY2twdHJfdCBvcHR2YWwsIHVuc2lnbmVkIGludCBvcHRsZW4pXFxuIDk0MDpcXHR7XFxuIDk0MTpcXHRcXHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrID0gbXB0Y3Bfc2soc2spO1xcbiA5NDI6XFx0XFx0c3RydWN0IHNvY2sgKnNzaztcXG4gOTQzOlxcdFxcbiA5NDQ6XFx0XFx0cHJfZGVidWcoXFxcIm1zaz0lcFxcXFxuXFxcIiwgbXNrKTtcXG4gOTQ1OlxcdFxcbiA5NDY6XFx0XFx0aWYgKGxldmVsID09IFNPTF9TT0NLRVQpXFxuIDk0NzpcXHRcXHRcXHRyZXR1cm4gbXB0Y3Bfc2V0c29ja29wdF9zb2xfc29ja2V0KG1zaywgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pO1xcbiA5NDg6XFx0XFxuIDk0OTpcXHRcXHRpZiAoIW1wdGNwX3N1cHBvcnRlZF9zb2Nrb3B0KGxldmVsLCBvcHRuYW1lKSlcXG4gOTUwOlxcdFxcdFxcdHJldHVybiAtRU5PUFJPVE9PUFQ7XFxuIDk1MTpcXHRcXG4gOTUyOlxcdFxcdC8qIEBAIHRoZSBtZWFuaW5nIG9mIHNldHNvY2tvcHQoKSB3aGVuIHRoZSBzb2NrZXQgaXMgY29ubmVjdGVkIGFuZFxcbiA5NTM6XFx0XFx0ICogdGhlcmUgYXJlIG11bHRpcGxlIHN1YmZsb3dzIGlzIG5vdCB5ZXQgZGVmaW5lZC4gSXQgaXMgdXAgdG8gdGhlXFxuIDk1NDpcXHRcXHQgKiBNUFRDUC1sZXZlbCBzb2NrZXQgdG8gY29uZmlndXJlIHRoZSBzdWJmbG93cyB1bnRpbCB0aGUgc3ViZmxvd1xcbiA5NTU6XFx0XFx0ICogaXMgaW4gVENQIGZhbGxiYWNrLCB3aGVuIFRDUCBzb2NrZXQgb3B0aW9ucyBhcmUgcGFzc2VkIHRocm91Z2hcXG4gOTU2OlxcdFxcdCAqIHRvIHRoZSBvbmUgcmVtYWluaW5nIHN1YmZsb3cuXFxuIDk1NzpcXHRcXHQgKi9cXG4gOTU4OlxcdFxcdGxvY2tfc29jayhzayk7XFxuIDk1OTpcXHRcXHRzc2sgPSBfX21wdGNwX3RjcF9mYWxsYmFjayhtc2spO1xcbiA5NjA6XFx0XFx0cmVsZWFzZV9zb2NrKHNrKTtcXG4gOTYxOlxcdFxcdGlmIChzc2spXFxuIDk2MjpcXHRcXHRcXHRyZXR1cm4gdGNwX3NldHNvY2tvcHQoc3NrLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pO1xcbiA5NjM6XFx0XFxuIDk2NDpcXHRcXHRpZiAobGV2ZWwgPT0gU09MX0lQKVxcbiA5NjU6XFx0XFx0XFx0cmV0dXJuIG1wdGNwX3NldHNvY2tvcHRfdjQobXNrLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7XFxuIDk2NjpcXHRcXG4gOTY3OlxcdFxcdGlmIChsZXZlbCA9PSBTT0xfSVBWNilcXG4gOTY4OlxcdFxcdFxcdHJldHVybiBtcHRjcF9zZXRzb2Nrb3B0X3Y2KG1zaywgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pO1xcbiA5Njk6XFx0XFxuIDk3MDpcXHRcXHRpZiAobGV2ZWwgPT0gU09MX1RDUClcXG4gOTcxOlxcdFxcdFxcdHJldHVybiBtcHRjcF9zZXRzb2Nrb3B0X3NvbF90Y3AobXNrLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7XFxuIDk3MjpcXHRcXG4gOTczOlxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4gOTc0OlxcdH1cXG4gOTc1OlxcdFxcbiA5NzY6XFx0c3RhdGljIGludCBtcHRjcF9nZXRzb2Nrb3B0X2ZpcnN0X3NmX29ubHkoc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcXG4gOTc3OlxcdFxcdFxcdFxcdFxcdFxcdCAgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IF9fdXNlciAqb3B0bGVuKVxcbiA5Nzg6XFx0e1xcbiA5Nzk6XFx0XFx0c3RydWN0IHNvY2sgKnNrID0gKHN0cnVjdCBzb2NrICopbXNrO1xcbiA5ODA6XFx0XFx0c3RydWN0IHNvY2sgKnNzaztcXG4gOTgxOlxcdFxcdGludCByZXQ7XFxuIDk4MjpcXHRcXG4gOTgzOlxcdFxcdGxvY2tfc29jayhzayk7XFxuIDk4NDpcXHRcXHRzc2sgPSBtc2stXFx1MDAzZWZpcnN0O1xcbiA5ODU6XFx0XFx0aWYgKHNzaylcXG4gOTg2OlxcdFxcdFxcdGdvdG8gZ2V0O1xcbiA5ODc6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDA5OjQ5OjU2LjAwMTEwNzQwMloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjMzOTUzODM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIE1QVENQIElQVjYgVENMQVNTIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gbG9va2luZyBhdCB0aGlzIGNvZGUsIGBtcHRjcF9zZXRzb2Nrb3B0X3Y2YCBpcyBiZWluZyBjb21waWxlZCBpbiByZWdhcmRsZXNzIG9mIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIOKAkyB0aGF0J3Mgc29tZXRoaW5nIHRvIGtlZXAgaW4gbWluZC4gSSBzZWUgaXQncyB0cmlnZ2VyZWQgd2hlbiB0aGUgYGxldmVsYCBhcmd1bWVudCBpcyBgU09MX0lQVjZgLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBgSVBWNl9UQ0xBU1NgIGZ1bmN0aW9uYWxpdHkgd2l0aGluIGBtcHRjcF9zZXRzb2Nrb3B0X3Y2YCBhbmQsIGJ5IGV4dGVuc2lvbiwgYG1wdGNwX2dldHNvY2tvcHRfdjZgLiBUaGUga2V5IHRoaW5nIGhlcmUgaXMgaG93IGBtcHRjcF9zZXRzb2Nrb3B0X3Y2X3NldF90Y2xhc3NgIHdvcmtzOiBpdCBpdGVyYXRlcyB0aHJvdWdoIGFsbCB0aGUgc3ViZmxvd3Mgb2YgYW4gTVBUQ1AgY29ubmVjdGlvbiBhbmQgc2V0cyB0aGUgVHJhZmZpYyBDbGFzcyAoYHRjbGFzc2ApIG9uIGVhY2ggYGluZXQ2X3NrYCB0byB0aGUgcHJvdmlkZWQgYHZhbGAuIEZyb20gYSBmdW5jdGlvbmFsIHBlcnNwZWN0aXZlLCB0aGlzIGlzIGEgY2xlYXIgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBUaGUgZmFjdCB0aGF0IGl0IGludGVyYWN0cyB3aXRoIGFsbCBzdWJmbG93cyBpcyBlc3BlY2lhbGx5IGludGVyZXN0aW5nLCBhbmQgbGlrZWx5IHdoZXJlIHZ1bG5lcmFiaWxpdGllcyBjb3VsZCBiZSBleHBvc2VkLlxuXG5Ob3csIGJlZm9yZSBJIGRpZyBpbiBkZWVwZXIsIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBgSVBWNl9UQ0xBU1NgIGlzIGV2ZW4gKnBlcm1pdHRlZCogd2l0aGluIHRoZSBNUFRDUCBjb250ZXh0LiBMZXQncyBxdWlja2x5IGNoZWNrIHRoZSBgbXB0Y3Bfc3VwcG9ydGVkX3NvY2tvcHRgIGZ1bmN0aW9uIHRvIGNvbmZpcm0gdGhhdCB0aGlzIG5ldyBvcHRpb24gaXMgaGFuZGxlZCBjb3JyZWN0bHkuIElmIHRoZSBzdXBwb3J0IGlzbid0IHRoZXJlLCB3ZSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzkxMSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDA5OjUwOjAwLjIzNTA2Mzc0OFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA0MTUzNTQzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1wdGNwX3N1cHBvcnRlZF9zb2Nrb3B0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tcHRjcC9zb2Nrb3B0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21wdGNwL3NvY2tvcHQuYz00MjY9c3RhdGljIGludCBtcHRjcF9zZXRzb2Nrb3B0X3Y2KHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIGludCBvcHRuYW1lLFxcbi0tXFxubmV0L21wdGNwL3NvY2tvcHQuYy00NzQtXFxubmV0L21wdGNwL3NvY2tvcHQuYzo0NzU6c3RhdGljIGJvb2wgbXB0Y3Bfc3VwcG9ydGVkX3NvY2tvcHQoaW50IGxldmVsLCBpbnQgb3B0bmFtZSlcXG5uZXQvbXB0Y3Avc29ja29wdC5jLTQ3Ni17XFxuLS1cXG5uZXQvbXB0Y3Avc29ja29wdC5jPTkzOD1pbnQgbXB0Y3Bfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXFxuLS1cXG5uZXQvbXB0Y3Avc29ja29wdC5jLTk0OC1cXG5uZXQvbXB0Y3Avc29ja29wdC5jOjk0OTpcXHRpZiAoIW1wdGNwX3N1cHBvcnRlZF9zb2Nrb3B0KGxldmVsLCBvcHRuYW1lKSlcXG5uZXQvbXB0Y3Avc29ja29wdC5jLTk1MC1cXHRcXHRyZXR1cm4gLUVOT1BST1RPT1BUO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QwOTo1MDowMC43MzkyMjI3OTFaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDY1OTUyNDg4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBpZiB0aGV5J3JlIG15IG93bjpcblxuKipBbmFseXppbmcgdGhlIG1wdGNwX3N1cHBvcnRlZF9zb2Nrb3B0IENvZGUqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBpbnRvIGl0LiBJJ20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGBtcHRjcF9zdXBwb3J0ZWRfc29ja29wdGAgY29kZS4gSSdtIGV4cGVjdGluZyB0byBzZWUgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyB0aGUgc29ja2V0IG9wdGlvbnMgZm9yIE11bHRpcGF0aCBUQ1AuIFRoaXMgbWVhbnMgSSdtIGxvb2tpbmcgZm9yIHRoZSBtZWNoYW5pc21zIGJ5IHdoaWNoIGFuIGFwcGxpY2F0aW9uIGNhbiB0ZWxsIHRoZSBrZXJuZWwsIFwiSGV5LCBJIHdhbnQgdG8gdXNlIE1QVENQXCIgYW5kIHBvdGVudGlhbGx5LCB3aGF0IHNwZWNpZmljIE1QVENQIGZlYXR1cmVzIGFyZSBzdXBwb3J0ZWQgYW5kIGVuYWJsZWQgZm9yIHRoaXMgc29ja2V0LiBJJ2xsIGJlIHNlYXJjaGluZyBmb3IgaG93IHRoZSBrZXJuZWwgZXhwb3NlcyB0aGUgTVBUQ1AgY2FwYWJpbGl0eSB0byB1c2VyIHNwYWNlLiBJdCBzaG91bGQgaW5jbHVkZSB0aGUgc3lzdGVtIGNhbGxzLCBzdHJ1Y3RzLCBhbmQgbGlrZWx5IGZsYWdzIG9yIHZhbHVlcyByZWxhdGVkIHRvIHNvY2tldCBvcHRpb25zIChsaWtlIGBzZXRzb2Nrb3B0YCBhbmQgYGdldHNvY2tvcHRgKSB0aGF0IGFyZSBzcGVjaWZpY2FsbHkgcmVsZXZhbnQgdG8gTVBUQ1AgY29uZmlndXJhdGlvbnMuIEknbSBhbnRpY2lwYXRpbmcgdGhlcmUgd2lsbCBiZSBzb21lIGNoZWNrcyBhbmQgYmFsYW5jZXMgaW4gdGhlcmU6IHBlcmhhcHMgdmFsaWRhdGlvbiB0byBlbnN1cmUgdGhlIGtlcm5lbCBpcyBjb21waWxlZCB3aXRoIE1QVENQIHN1cHBvcnQsIGFuZCBtYXliZSBzb21lIHJ1bnRpbWUgY2hlY2tzIGRlcGVuZGluZyBvbiB0aGUga2VybmVsIHZlcnNpb24gb3Igb3RoZXIgY29uZmlndXJhdGlvbnMuIEknbGwgYmUgcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gdW5kZXJzdGFuZGluZyBob3cgdGhpcyBgc29ja29wdGAgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgVENQIHN0YWNrLCBhbmQgaG93IGl0IGhhbmRsZXMgZGlmZmVyZW50IE1QVENQLXNwZWNpZmljIGJlaGF2aW9ycyBhbmQgc2V0dGluZ3MuIEnigJlsbCBhbHNvIGJlIGxvb2tpbmcgZm9yIGFueSBpbmRpY2F0aW9ucyBhYm91dCBwb3RlbnRpYWwgc2VjdXJpdHkgY29uc2lkZXJhdGlvbnMgaW4gZXhwb3NpbmcgdGhpcyBmdW5jdGlvbmFsaXR5LiBVbHRpbWF0ZWx5LCBJJ20gaG9waW5nIHRvIGdldCBhIHNvbGlkIGdyYXNwIG9mIGhvdyB0aGlzIGtlcm5lbCBjb2RlIGVuYWJsZXMgYW5kIGNvbnRyb2xzIE1QVENQIHVzYWdlIGF0IHRoZSBzb2NrZXQgbGV2ZWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NjIxLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMDk6NTA6MDUuMzk4NzUwNzY1WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NTIwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbXB0Y3Avc29ja29wdC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ3NSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQ3NTpcXHRzdGF0aWMgYm9vbCBtcHRjcF9zdXBwb3J0ZWRfc29ja29wdChpbnQgbGV2ZWwsIGludCBvcHRuYW1lKVxcbiA0NzY6XFx0e1xcbiA0Nzc6XFx0XFx0aWYgKGxldmVsID09IFNPTF9JUCkge1xcbiA0Nzg6XFx0XFx0XFx0c3dpdGNoIChvcHRuYW1lKSB7XFxuIDQ3OTpcXHRcXHRcXHQvKiBzaG91bGQgd29yayBmaW5lICovXFxuIDQ4MDpcXHRcXHRcXHRjYXNlIElQX0ZSRUVCSU5EOlxcbiA0ODE6XFx0XFx0XFx0Y2FzZSBJUF9UUkFOU1BBUkVOVDpcXG4gNDgyOlxcdFxcdFxcdGNhc2UgSVBfQklORF9BRERSRVNTX05PX1BPUlQ6XFxuIDQ4MzpcXHRcXHRcXHRjYXNlIElQX0xPQ0FMX1BPUlRfUkFOR0U6XFxuIDQ4NDpcXHRcXG4gNDg1OlxcdFxcdFxcdC8qIHRoZSBmb2xsb3dpbmcgYXJlIGNvbnRyb2wgY21zZyByZWxhdGVkICovXFxuIDQ4NjpcXHRcXHRcXHRjYXNlIElQX1BLVElORk86XFxuIDQ4NzpcXHRcXHRcXHRjYXNlIElQX1JFQ1ZUVEw6XFxuIDQ4ODpcXHRcXHRcXHRjYXNlIElQX1JFQ1ZUT1M6XFxuIDQ4OTpcXHRcXHRcXHRjYXNlIElQX1JFQ1ZPUFRTOlxcbiA0OTA6XFx0XFx0XFx0Y2FzZSBJUF9SRVRPUFRTOlxcbiA0OTE6XFx0XFx0XFx0Y2FzZSBJUF9QQVNTU0VDOlxcbiA0OTI6XFx0XFx0XFx0Y2FzZSBJUF9SRUNWT1JJR0RTVEFERFI6XFxuIDQ5MzpcXHRcXHRcXHRjYXNlIElQX0NIRUNLU1VNOlxcbiA0OTQ6XFx0XFx0XFx0Y2FzZSBJUF9SRUNWRlJBR1NJWkU6XFxuIDQ5NTpcXHRcXG4gNDk2OlxcdFxcdFxcdC8qIGNvbW1vbiBzdHVmZiB0aGF0IG5lZWQgc29tZSBsb3ZlICovXFxuIDQ5NzpcXHRcXHRcXHRjYXNlIElQX1RPUzpcXG4gNDk4OlxcdFxcdFxcdGNhc2UgSVBfVFRMOlxcbiA0OTk6XFx0XFx0XFx0Y2FzZSBJUF9NVFVfRElTQ09WRVI6XFxuIDUwMDpcXHRcXHRcXHRjYXNlIElQX1JFQ1ZFUlI6XFxuIDUwMTpcXHRcXG4gNTAyOlxcdFxcdFxcdC8qIHBvc3NpYmx5IGxlc3MgY29tbW9uIG1heSBkZXNlcnZlIHNvbWUgbG92ZSAqL1xcbiA1MDM6XFx0XFx0XFx0Y2FzZSBJUF9NSU5UVEw6XFxuIDUwNDpcXHRcXG4gNTA1OlxcdFxcdFxcdC8qIHRoZSBmb2xsb3dpbmcgaXMgYXBwYXJlbnRseSBhIG5vLW9wIGZvciBwbGFpbiBUQ1AgKi9cXG4gNTA2OlxcdFxcdFxcdGNhc2UgSVBfUkVDVkVSUl9SRkM0ODg0OlxcbiA1MDc6XFx0XFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuIDUwODpcXHRcXHRcXHR9XFxuIDUwOTpcXHRcXG4gNTEwOlxcdFxcdFxcdC8qIElQX09QVElPTlMgaXMgbm90IHN1cHBvcnRlZCwgbmVlZHMgc3ViZmxvdyBjYXJlICovXFxuIDUxMTpcXHRcXHRcXHQvKiBJUF9IRFJJTkNMLCBJUF9OT0RFRlJBRyBhcmUgbm90IHN1cHBvcnRlZCwgUkFXIHNwZWNpZmljICovXFxuIDUxMjpcXHRcXHRcXHQvKiBJUF9NVUxUSUNBU1RfVFRMLCBJUF9NVUxUSUNBU1RfTE9PUCwgSVBfVU5JQ0FTVF9JRixcXG4gNTEzOlxcdFxcdFxcdCAqIElQX0FERF9NRU1CRVJTSElQLCBJUF9BRERfU09VUkNFX01FTUJFUlNISVAsIElQX0RST1BfTUVNQkVSU0hJUCxcXG4gNTE0OlxcdFxcdFxcdCAqIElQX0RST1BfU09VUkNFX01FTUJFUlNISVAsIElQX0JMT0NLX1NPVVJDRSwgSVBfVU5CTE9DS19TT1VSQ0UsXFxuIDUxNTpcXHRcXHRcXHQgKiBNQ0FTVF9KT0lOX0dST1VQLCBNQ0FTVF9MRUFWRV9HUk9VUCBNQ0FTVF9KT0lOX1NPVVJDRV9HUk9VUCxcXG4gNTE2OlxcdFxcdFxcdCAqIE1DQVNUX0xFQVZFX1NPVVJDRV9HUk9VUCwgTUNBU1RfQkxPQ0tfU09VUkNFLCBNQ0FTVF9VTkJMT0NLX1NPVVJDRSxcXG4gNTE3OlxcdFxcdFxcdCAqIE1DQVNUX01TRklMVEVSLCBJUF9NVUxUSUNBU1RfQUxMIGFyZSBub3Qgc3VwcG9ydGVkLCBiZXR0ZXIgbm90IGRlYWxcXG4gNTE4OlxcdFxcdFxcdCAqIHdpdGggbWNhc3Qgc3R1ZmZcXG4gNTE5OlxcdFxcdFxcdCAqL1xcbiA1MjA6XFx0XFx0XFx0LyogSVBfSVBTRUNfUE9MSUNZLCBJUF9YRlJNX1BPTElDWSBhcmUgbnV0IHN1cHBvcnRlZCwgdW5yZWxhdGVkIGhlcmUgKi9cXG4gNTIxOlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gNTIyOlxcdFxcdH1cXG4gNTIzOlxcdFxcdGlmIChsZXZlbCA9PSBTT0xfSVBWNikge1xcbiA1MjQ6XFx0XFx0XFx0c3dpdGNoIChvcHRuYW1lKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDA5OjUwOjA1LjM5OTIyMjk0NVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDk3NTkxMDgxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkRpdmluZyBEZWVwZXIgaW50byBgbXB0Y3Bfc3VwcG9ydGVkX3NvY2tvcHRgKipcblxuQWxyaWdodCwgc28gdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHJlYWxseSBkaWcgaW50byBgbXB0Y3Bfc3VwcG9ydGVkX3NvY2tvcHRgLiBXZSd2ZSB0b3VjaGVkIG9uIGl0LCB3ZSB1bmRlcnN0YW5kIGl0cyBiYXNpYyBwdXJwb3NlLCBidXQgbGV0J3Mgbm90IGp1c3Qgc2tpbSB0aGUgc3VyZmFjZS4gV2hhdCdzIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBzdXBwb3J0ZWQgb3B0aW9ucz8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyAqdGhvcm91Z2hseSogdG8gYXNzZXNzIGl0cyByb2xlIGluIHRoaXMgc3BlY2lmaWMgbmV0d29yayBjb25maWd1cmF0aW9uLlxuXG5JIG5lZWQgdG8ga25vdyB0aGUgZ3JhbnVsYXIgZGV0YWlscyBvZiBob3cgdGhpcyBzb2NrZXQgb3B0aW9uIG9wZXJhdGVzLiBBcmUgdGhlcmUgYW55IHVuZXhwZWN0ZWQgc2lkZSBlZmZlY3RzIHRvIGNlcnRhaW4gY29tYmluYXRpb25zIG9mIG9wdGlvbnM/IFdoYXQncyB0aGUgcGVyZm9ybWFuY2Ugb3ZlcmhlYWQsIGlmIGFueT8gQXJlIHRoZXJlIGFueSBsaW1pdGF0aW9ucyBvciBlZGdlIGNhc2VzIEkgc2hvdWxkIGJlIGF3YXJlIG9mPyBJIG5lZWQgdG8gdGhpbmsgbGlrZSBhIHN5c3RlbXMgcHJvZ3JhbW1lciBhbmQgYW50aWNpcGF0ZSBwb3RlbnRpYWwgaXNzdWVzLlxuXG5MZXQncyBnZXQgaW50byB0aGUgbml0dHktZ3JpdHR5IGFuZCBzZWUgd2hhdCBzZWNyZXRzIHRoaXMgb3B0aW9uIGlzIGhpZGluZy4gS25vd2luZyB0aGUgZGV0YWlscyBpcyB0aGUgb25seSB3YXkgdG8gZWZmZWN0aXZlbHkgdXNlIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTgxMSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMDk6NTA6MTYuMzc1MTM2MzIyWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExOTUxNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L21wdGNwL3NvY2tvcHQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1MjMsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1MjM6XFx0XFx0aWYgKGxldmVsID09IFNPTF9JUFY2KSB7XFxuIDUyNDpcXHRcXHRcXHRzd2l0Y2ggKG9wdG5hbWUpIHtcXG4gNTI1OlxcdFxcdFxcdGNhc2UgSVBWNl9WNk9OTFk6XFxuIDUyNjpcXHRcXG4gNTI3OlxcdFxcdFxcdC8qIHRoZSBmb2xsb3dpbmcgYXJlIGNvbnRyb2wgY21zZyByZWxhdGVkICovXFxuIDUyODpcXHRcXHRcXHRjYXNlIElQVjZfUkVDVlBLVElORk86XFxuIDUyOTpcXHRcXHRcXHRjYXNlIElQVjZfMjI5MlBLVElORk86XFxuIDUzMDpcXHRcXHRcXHRjYXNlIElQVjZfUkVDVkhPUExJTUlUOlxcbiA1MzE6XFx0XFx0XFx0Y2FzZSBJUFY2XzIyOTJIT1BMSU1JVDpcXG4gNTMyOlxcdFxcdFxcdGNhc2UgSVBWNl9SRUNWUlRIRFI6XFxuIDUzMzpcXHRcXHRcXHRjYXNlIElQVjZfMjI5MlJUSERSOlxcbiA1MzQ6XFx0XFx0XFx0Y2FzZSBJUFY2X1JFQ1ZIT1BPUFRTOlxcbiA1MzU6XFx0XFx0XFx0Y2FzZSBJUFY2XzIyOTJIT1BPUFRTOlxcbiA1MzY6XFx0XFx0XFx0Y2FzZSBJUFY2X1JFQ1ZEU1RPUFRTOlxcbiA1Mzc6XFx0XFx0XFx0Y2FzZSBJUFY2XzIyOTJEU1RPUFRTOlxcbiA1Mzg6XFx0XFx0XFx0Y2FzZSBJUFY2X1JFQ1ZUQ0xBU1M6XFxuIDUzOTpcXHRcXHRcXHRjYXNlIElQVjZfRkxPV0lORk86XFxuIDU0MDpcXHRcXHRcXHRjYXNlIElQVjZfUkVDVlBBVEhNVFU6XFxuIDU0MTpcXHRcXHRcXHRjYXNlIElQVjZfUkVDVk9SSUdEU1RBRERSOlxcbiA1NDI6XFx0XFx0XFx0Y2FzZSBJUFY2X1JFQ1ZGUkFHU0laRTpcXG4gNTQzOlxcdFxcbiA1NDQ6XFx0XFx0XFx0LyogdGhlIGZvbGxvd2luZyBvbmVzIG5lZWQgc29tZSBsb3ZlIGJ1dCBhcmUgcXVpdGUgY29tbW9uICovXFxuIDU0NTpcXHRcXHRcXHRjYXNlIElQVjZfVENMQVNTOlxcbiA1NDY6XFx0XFx0XFx0Y2FzZSBJUFY2X1RSQU5TUEFSRU5UOlxcbiA1NDc6XFx0XFx0XFx0Y2FzZSBJUFY2X0ZSRUVCSU5EOlxcbiA1NDg6XFx0XFx0XFx0Y2FzZSBJUFY2X1BLVElORk86XFxuIDU0OTpcXHRcXHRcXHRjYXNlIElQVjZfMjI5MlBLVE9QVElPTlM6XFxuIDU1MDpcXHRcXHRcXHRjYXNlIElQVjZfVU5JQ0FTVF9IT1BTOlxcbiA1NTE6XFx0XFx0XFx0Y2FzZSBJUFY2X01UVV9ESVNDT1ZFUjpcXG4gNTUyOlxcdFxcdFxcdGNhc2UgSVBWNl9NVFU6XFxuIDU1MzpcXHRcXHRcXHRjYXNlIElQVjZfUkVDVkVSUjpcXG4gNTU0OlxcdFxcdFxcdGNhc2UgSVBWNl9GTE9XSU5GT19TRU5EOlxcbiA1NTU6XFx0XFx0XFx0Y2FzZSBJUFY2X0ZMT1dMQUJFTF9NR1I6XFxuIDU1NjpcXHRcXHRcXHRjYXNlIElQVjZfTUlOSE9QQ09VTlQ6XFxuIDU1NzpcXHRcXHRcXHRjYXNlIElQVjZfRE9OVEZSQUc6XFxuIDU1ODpcXHRcXHRcXHRjYXNlIElQVjZfQVVUT0ZMT1dMQUJFTDpcXG4gNTU5OlxcdFxcbiA1NjA6XFx0XFx0XFx0LyogdGhlIGZvbGxvd2luZyBvbmUgaXMgYSBuby1vcCBmb3IgcGxhaW4gVENQICovXFxuIDU2MTpcXHRcXHRcXHRjYXNlIElQVjZfUkVDVkVSUl9SRkM0ODg0OlxcbiA1NjI6XFx0XFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuIDU2MzpcXHRcXHRcXHR9XFxuIDU2NDpcXHRcXG4gNTY1OlxcdFxcdFxcdC8qIElQVjZfSE9QT1BUUywgSVBWNl9SVEhEUkRTVE9QVFMsIElQVjZfUlRIRFIsIElQVjZfRFNUT1BUUyBhcmVcXG4gNTY2OlxcdFxcdFxcdCAqIG5vdCBzdXBwb3J0ZWRcXG4gNTY3OlxcdFxcdFxcdCAqL1xcbiA1Njg6XFx0XFx0XFx0LyogSVBWNl9NVUxUSUNBU1RfSE9QUywgSVBWNl9NVUxUSUNBU1RfTE9PUCwgSVBWNl9VTklDQVNUX0lGLFxcbiA1Njk6XFx0XFx0XFx0ICogSVBWNl9NVUxUSUNBU1RfSUYsIElQVjZfQUREUkZPUk0sXFxuIDU3MDpcXHRcXHRcXHQgKiBJUFY2X0FERF9NRU1CRVJTSElQLCBJUFY2X0RST1BfTUVNQkVSU0hJUCwgSVBWNl9KT0lOX0FOWUNBU1QsXFxuIDU3MTpcXHRcXHRcXHQgKiBJUFY2X0xFQVZFX0FOWUNBU1QsIElQVjZfTVVMVElDQVNUX0FMTCwgTUNBU1RfSk9JTl9HUk9VUCwgTUNBU1RfTEVBVkVfR1JPVVAsXFxuIDU3MjpcXHRcXHRcXHQgKiBNQ0FTVF9KT0lOX1NPVVJDRV9HUk9VUCwgTUNBU1RfTEVBVkVfU09VUkNFX0dST1VQLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QwOTo1MDoxNi4zNzYzMzQyMzJaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjY2NTI1MzY2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIElQdjYgVENMQVNTIFBhdGNoKipcblxuT2theSwgc28gYElQVjZfVENMQVNTYCBpcyBzdXBwb3J0ZWQsIHdoaWNoIGlzIGdvb2QuIFRoaXMgcGF0Y2ggaXMgYWRkaW5nIHRoZSBuZWNlc3NhcnkgaGFuZGxpbmcgZm9yIGl0IHdpdGhpbiB0aGUgTVBUQ1AgY29kZSwgc3BlY2lmaWNhbGx5IGluIGBtcHRjcF9zZXRzb2Nrb3B0X3Y2YCBhbmQgYG1wdGNwX2dldHNvY2tvcHRfdjZgLiBJdCBsb29rcyBsaWtlIHRoZSBmaWxlIGJlaW5nIG1vZGlmaWVkIGlzIGBuZXQvbXB0Y3Avc29ja29wdC5jYC5cblxuTXkgZm9jdXMgbmVlZHMgdG8gYmUgb24gdGhlc2UgZnVuY3Rpb25zOiBgbXB0Y3Bfc2V0c29ja29wdF92Nl9zZXRfdGNsYXNzYCwgYG1wdGNwX3NldHNvY2tvcHRfdjZgLCBhbmQgYG1wdGNwX2dldHNvY2tvcHRfdjZgLiBBaCwgSSBzZWUsIGBtcHRjcF9zZXRzb2Nrb3B0X3Y2YCBhbmQgYG1wdGNwX2dldHNvY2tvcHRfdjZgIGFscmVhZHkgZXhpc3QuIGBtcHRjcF9zZXRzb2Nrb3B0X3Y2X3NldF90Y2xhc3NgIGlzIHRoZSBuZXcgZnVuY3Rpb24sIHdoaWNoIG1ha2VzIHNlbnNlLlxuXG5Gb3IgdGhlIGNvbmZpZ3VyYXRpb25zLCBpdCByZXF1aXJlcyBgTVBUQ1BgIGFuZCBgTVBUQ1BfSVBWNmAuIFdhaXQgYSBzZWNvbmTigKZXaGlsZSBgTVBUQ1BfSVBWNmAgaXNuJ3QgKnN0cmljdGx5KiBuZWVkZWQgZm9yIGBtcHRjcF9zZXRzb2Nrb3B0X3Y2YCB0byBjb21waWxlLCBpdCdzIGVzc2VudGlhbCBmb3IgTVBUQ1AgdG8gYWN0dWFsbHkgKndvcmsqIHdpdGggSVB2NiBzb2NrZXRzLiBJdCdzIGEgc3VidGxlIGRpc3RpbmN0aW9uLCBidXQgaW1wb3J0YW50LiBUaGVyZWZvcmUsIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB3aGV0aGVyIGBNUFRDUF9JUFY2YCBpcyByZXF1aXJlZCB0byBjcmVhdGUgYW4gSVB2NiBNUFRDUCBzb2NrZXQuIFRoYXQncyB0aGUga2V5IHF1ZXN0aW9uIGhlcmUsIGl0J3Mgbm90IHN0cmljdGx5IGEgY29tcGlsZSB0aW1lIGRlcGVuZGVuY3kuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MDA1LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjU3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMDk6NTA6MjMuMDQxNTkwMDM4WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDk5MzcwODIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTVBUQ1BfSVBWNlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbXB0Y3AvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tcHRjcC9LY29uZmlnPTE2PWNvbmZpZyBJTkVUX01QVENQX0RJQUdcXG4tLVxcbm5ldC9tcHRjcC9LY29uZmlnLTE5LVxcbm5ldC9tcHRjcC9LY29uZmlnOjIwOmNvbmZpZyBNUFRDUF9JUFY2XFxubmV0L21wdGNwL0tjb25maWctMjEtXFx0Ym9vbCBcXFwiTVBUQ1A6IElQdjYgc3VwcG9ydCBmb3IgTXVsdGlwYXRoIFRDUFxcXCJcXG4tLVxcbm5ldC9tcHRjcC9jdHJsLmM9NTg3PXZvaWQgX19pbml0IG1wdGNwX2luaXQodm9pZClcXG4tLVxcbm5ldC9tcHRjcC9jdHJsLmMtNTk1LVxcbm5ldC9tcHRjcC9jdHJsLmM6NTk2OiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxcbm5ldC9tcHRjcC9jdHJsLmMtNTk3LWludCBfX2luaXQgbXB0Y3B2Nl9pbml0KHZvaWQpXFxuLS1cXG5uZXQvbXB0Y3Avb3B0aW9ucy5jPTIzPXN0YXRpYyB2b2lkIG1wdGNwX3BhcnNlX29wdGlvbihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L21wdGNwL29wdGlvbnMuYy0yNDEtXFx0XFx0XFx0XFx0bXBfb3B0LVxcdTAwM2VhZGRyLmZhbWlseSA9IEFGX0lORVQ7XFxubmV0L21wdGNwL29wdGlvbnMuYzoyNDI6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXFxubmV0L21wdGNwL29wdGlvbnMuYy0yNDMtXFx0XFx0XFx0ZWxzZSBpZiAob3BzaXplID09IFRDUE9MRU5fTVBUQ1BfQUREX0FERFI2IHx8XFxuLS1cXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTI1Mi1cXHRcXHRcXHRcXHRtcF9vcHQtXFx1MDAzZWFkZHIuZmFtaWx5ID0gQUZfSU5FVDtcXG5uZXQvbXB0Y3Avb3B0aW9ucy5jOjI1MzojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTI1NC1cXHRcXHRcXHRlbHNlIGlmIChvcHNpemUgPT0gVENQT0xFTl9NUFRDUF9BRERfQUREUjZfQkFTRSB8fFxcbi0tXFxubmV0L21wdGNwL29wdGlvbnMuYy0yNzQtXFx0XFx0fVxcbm5ldC9tcHRjcC9vcHRpb25zLmM6Mjc1OiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxcbm5ldC9tcHRjcC9vcHRpb25zLmMtMjc2LVxcdFxcdGVsc2Uge1xcbi0tXFxubmV0L21wdGNwL29wdGlvbnMuYz02MzI9c3RhdGljIHU2NCBhZGRfYWRkcl9nZW5lcmF0ZV9obWFjKHU2NCBrZXkxLCB1NjQga2V5MixcXG4tLVxcbm5ldC9tcHRjcC9vcHRpb25zLmMtNjQ0LVxcdH1cXG5uZXQvbXB0Y3Avb3B0aW9ucy5jOjY0NTojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTY0Ni1cXHRlbHNlIGlmIChhZGRyLVxcdTAwM2VmYW1pbHkgPT0gQUZfSU5FVDYpIHtcXG4tLVxcbm5ldC9tcHRjcC9vcHRpb25zLmM9MTM4ND12b2lkIG1wdGNwX3dyaXRlX29wdGlvbnMoc3RydWN0IHRjcGhkciAqdGgsIF9fYmUzMiAqcHRyLCBzdHJ1Y3QgdGNwX3NvY2sgKnRwLFxcbi0tXFxubmV0L21wdGNwL29wdGlvbnMuYy0xNTY3LVxcbm5ldC9tcHRjcC9vcHRpb25zLmM6MTU2ODojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTE1NjktXFx0XFx0aWYgKG9wdHMtXFx1MDAzZWFkZHIuZmFtaWx5ID09IEFGX0lORVQ2KVxcbi0tXFxubmV0L21wdGNwL29wdGlvbnMuYy0xNTg2LVxcdFxcdH1cXG5uZXQvbXB0Y3Avb3B0aW9ucy5jOjE1ODc6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXFxubmV0L21wdGNwL29wdGlvbnMuYy0xNTg4LVxcdFxcdGVsc2UgaWYgKG9wdHMtXFx1MDAzZWFkZHIuZmFtaWx5ID09IEFGX0lORVQ2KSB7XFxuLS1cXG5uZXQvbXB0Y3AvcG0uYz0zMz1ib29sIG1wdGNwX3BtX2FkZHJfZmFtaWxpZXNfbWF0Y2goY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L21wdGNwL3BtLmMtMzgtXFxubmV0L21wdGNwL3BtLmM6Mzk6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXFxubmV0L21wdGNwL3BtLmMtNDAtXFx0Ym9vbCBsb2NfaXNfdjQgPSBsb2MtXFx1MDAzZWZhbWlseSA9PSBBRl9JTkVUIHx8IGlwdjZfYWRkcl92NG1hcHBlZChcXHUwMDI2bG9jLVxcdTAwM2VhZGRyNik7XFxuLS1cXG5uZXQvbXB0Y3AvcG0uYz01NT1ib29sIG1wdGNwX2FkZHJlc3Nlc19lcXVhbChjb25zdCBzdHJ1Y3QgbXB0Y3BfYWRkcl9pbmZvICphLFxcbi0tXFxubmV0L21wdGNwL3BtLmMtNjItXFx0XFx0XFx0YWRkcl9lcXVhbHMgPSBhLVxcdTAwM2VhZGRyLnNfYWRkciA9PSBiLVxcdTAwM2VhZGRyLnNfYWRkcjtcXG5uZXQvbXB0Y3AvcG0uYzo2MzojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcXG5uZXQvbXB0Y3AvcG0uYy02NC1cXHRcXHRlbHNlXFxuLS1cXG5uZXQvbXB0Y3AvcG0uYz04Mz12b2lkIG1wdGNwX2xvY2FsX2FkZHJlc3MoY29uc3Qgc3RydWN0IHNvY2tfY29tbW9uICpza2MsXFxuLS1cXG5uZXQvbXB0Y3AvcG0uYy04OS1cXHRcXHRhZGRyLVxcdTAwM2VhZGRyLnNfYWRkciA9IHNrYy1cXHUwMDNlc2tjX3Jjdl9zYWRkcjtcXG5uZXQvbXB0Y3AvcG0uYzo5MDojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcXG5uZXQvbXB0Y3AvcG0uYy05MS1cXHRlbHNlIGlmIChhZGRyLVxcdTAwM2VmYW1pbHkgPT0gQUZfSU5FVDYpXFxuLS1cXG5uZXQvbXB0Y3AvcG0uYz05Nj12b2lkIG1wdGNwX3JlbW90ZV9hZGRyZXNzKGNvbnN0IHN0cnVjdCBzb2NrX2NvbW1vbiAqc2tjLFxcbi0tXFxubmV0L21wdGNwL3BtLmMtMTAyLVxcdFxcdGFkZHItXFx1MDAzZWFkZHIuc19hZGRyID0gc2tjLVxcdTAwM2Vza2NfZGFkZHI7XFxubmV0L21wdGNwL3BtLmM6MTAzOiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxcbm5ldC9tcHRjcC9wbS5jLTEwNC1cXHRlbHNlIGlmIChhZGRyLVxcdTAwM2VmYW1pbHkgPT0gQUZfSU5FVDYpXFxuLS1cXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmM9NjA2PWZpbGxfbG9jYWxfYWRkcmVzc19hbnkoc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgc3RydWN0IG1wdGNwX2FkZHJfaW5mbyAqcmVtb3RlLFxcbi0tXFxubmV0L21wdGNwL3BtX2tlcm5lbC5jLTYxMi1cXHRsb2NhbC1cXHUwMDNlYWRkci5mYW1pbHkgPVxcbm5ldC9tcHRjcC9wbV9rZXJuZWwuYzo2MTM6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXFxubmV0L21wdGNwL3BtX2tlcm5lbC5jLTYxNC1cXHRcXHRcXHRyZW1vdGUtXFx1MDAzZWZhbWlseSA9PSBBRl9JTkVUNiBcXHUwMDI2XFx1MDAyNlxcbi0tXFxubmV0L21wdGNwL3BtX2tlcm5lbC5jPTg1Mj1zdGF0aWMgaW50IG1wdGNwX3BtX25sX2NyZWF0ZV9saXN0ZW5fc29ja2V0KHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9tcHRjcC9wbV9rZXJuZWwuYy04ODktXFx0bXB0Y3BfaW5mbzJzb2NrYWRkcihcXHUwMDI2ZW50cnktXFx1MDAzZWFkZHIsIFxcdTAwMjZhZGRyLCBlbnRyeS1cXHUwMDNlYWRkci5mYW1pbHkpO1xcbm5ldC9tcHRjcC9wbV9rZXJuZWwuYzo4OTA6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXFxubmV0L21wdGNwL3BtX2tlcm5lbC5jLTg5MS1cXHRpZiAoZW50cnktXFx1MDAzZWFkZHIuZmFtaWx5ID09IEFGX0lORVQ2KVxcbi0tXFxubmV0L21wdGNwL3BtX2tlcm5lbC5jLTg5NS1cXHRcXHRlcnIgPSBpbmV0X2JpbmRfc2soc3NrLCAoc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKilcXHUwMDI2YWRkciwgYWRkcmxlbik7XFxubmV0L21wdGNwL3BtX2tlcm5lbC5jOjg5NjojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmMtODk3LVxcdGVsc2UgaWYgKHNzay1cXHUwMDNlc2tfZmFtaWx5ID09IEFGX0lORVQ2KVxcbi0tXFxubmV0L21wdGNwL3BtX25ldGxpbmsuYz0yMj1zdGF0aWMgaW50IG1wdGNwX3BtX2ZhbWlseV90b19hZGRyKGludCBmYW1pbHkpXFxubmV0L21wdGNwL3BtX25ldGxpbmsuYy0yMy17XFxubmV0L21wdGNwL3BtX25ldGxpbmsuYzoyNDojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcXG5uZXQvbXB0Y3AvcG1fbmV0bGluay5jLTI1LVxcdGlmIChmYW1pbHkgPT0gQUZfSU5FVDYpXFxuLS1cXG5uZXQvbXB0Y3AvcG1fbmV0bGluay5jPTMxPXN0YXRpYyBpbnQgbXB0Y3BfcG1fcGFyc2VfcG1fYWRkcl9hdHRyKHN0cnVjdCBubGF0dHIgKnRiW10sXFxuLS1cXG5uZXQvbXB0Y3AvcG1fbmV0bGluay5jLTYzLVxcdGlmIChhZGRyLVxcdTAwM2VmYW1pbHkgIT0gQUZfSU5FVFxcbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmM6NjQ6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXFxubmV0L21wdGNwL3BtX25ldGxpbmsuYy02NS1cXHQgICAgXFx1MDAyNlxcdTAwMjYgYWRkci1cXHUwMDNlZmFtaWx5ICE9IEFGX0lORVQ2XFxuLS1cXG5uZXQvbXB0Y3AvcG1fbmV0bGluay5jLTc4LVxcbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmM6Nzk6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXFxubmV0L21wdGNwL3BtX25ldGxpbmsuYy04MC1cXHRpZiAoYWRkci1cXHUwMDNlZmFtaWx5ID09IEFGX0lORVQ2KVxcbi0tXFxubmV0L21wdGNwL3BtX25ldGxpbmsuYz0xMzE9c3RhdGljIGludCBtcHRjcF9ubF9maWxsX2FkZHIoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmMtMTU2LVxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmM6MTU3OiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxcbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmMtMTU4LVxcdGVsc2UgaWYgKGFkZHItXFx1MDAzZWZhbWlseSA9PSBBRl9JTkVUNiBcXHUwMDI2XFx1MDAyNlxcbi0tXFxubmV0L21wdGNwL3BtX25ldGxpbmsuYz0yOTg9c3RhdGljIGludCBtcHRjcF9ldmVudF9hZGRfc3ViZmxvdyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3Qgc29jayAqc3NrKVxcbi0tXFxubmV0L21wdGNwL3BtX25ldGxpbmsuYy0zMTItXFx0XFx0YnJlYWs7XFxubmV0L21wdGNwL3BtX25ldGxpbmsuYzozMTM6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXFxubmV0L21wdGNwL3BtX25ldGxpbmsuYy0zMTQtXFx0Y2FzZSBBRl9JTkVUNjoge1xcbi0tXFxubmV0L21wdGNwL3BtX25ldGxpbmsuYz00NjU9dm9pZCBtcHRjcF9ldmVudF9hZGRyX2Fubm91bmNlZChjb25zdCBzdHJ1Y3Qgc29jayAqc3NrLFxcbi0tXFxubmV0L21wdGNwL3BtX25ldGxpbmsuYy01MDItXFx0XFx0YnJlYWs7XFxubmV0L21wdGNwL3BtX25ldGxpbmsuYzo1MDM6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXFxubmV0L21wdGNwL3BtX25ldGxpbmsuYy01MDQtXFx0Y2FzZSBBRl9JTkVUNjpcXG4tLVxcbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmM9NTIyPXZvaWQgbXB0Y3BfZXZlbnRfcG1fbGlzdGVuZXIoY29uc3Qgc3RydWN0IHNvY2sgKnNzayxcXG4tLVxcbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmMtNTUxLVxcdFxcdGJyZWFrO1xcbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmM6NTUyOiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxcbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmMtNTUzLVxcdGNhc2UgQUZfSU5FVDY6IHtcXG4tLVxcbm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYz00MzI9c3RhdGljIHN0cnVjdCBzb2NrICptcHRjcF9ubF9maW5kX3NzayhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLFxcbi0tXFxubmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jLTQ1Ny1cXHRcXHRcXHRicmVhaztcXG5uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmM6NDU4OiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxcbm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYy00NTktXFx0XFx0Y2FzZSBBRl9JTkVUNjoge1xcbi0tXFxubmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jPTQ3OD1pbnQgbXB0Y3BfcG1fbmxfc3ViZmxvd19kZXN0cm95X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYy01MDYtXFxubmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jOjUwNzojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcXG5uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmMtNTA4LVxcdGlmIChhZGRyX2wuYWRkci5mYW1pbHkgPT0gQUZfSU5FVCBcXHUwMDI2XFx1MDAyNiBpcHY2X2FkZHJfdjRtYXBwZWQoXFx1MDAyNmFkZHJfci5hZGRyNikpIHtcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTIwLSNpbmNsdWRlIFxcdTAwM2NuZXQvdGNwX3N0YXRlcy5oXFx1MDAzZVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjIxOiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTIyLSNpbmNsdWRlIFxcdTAwM2NuZXQvdHJhbnNwX3Y2LmhcXHUwMDNlXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0zMT1zdGF0aWMgdW5zaWduZWQgaW50IG1wdGNwX2lucV9oaW50KGNvbnN0IHN0cnVjdCBzb2NrICpzayk7XFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zNS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzozNjojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zNy1zdHJ1Y3QgbXB0Y3A2X3NvY2sge1xcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmM9NjQ9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgKm1wdGNwX2ZhbGxiYWNrX3RjcF9vcHMoY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtNjctXFxubmV0L21wdGNwL3Byb3RvY29sLmM6Njg6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXFxubmV0L21wdGNwL3Byb3RvY29sLmMtNjktXFx0aWYgKGZhbWlseSA9PSBBRl9JTkVUNilcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jPTMzOTc9c3RhdGljIHZvaWQgbXB0Y3BfY29weV9pbmFkZHJzKHN0cnVjdCBzb2NrICptc2ssIGNvbnN0IHN0cnVjdCBzb2NrICpzc2spXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMzM5OC17XFxubmV0L21wdGNwL3Byb3RvY29sLmM6MzM5OTojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zNDAwLVxcdGNvbnN0IHN0cnVjdCBpcHY2X3BpbmZvICpzc2s2ID0gaW5ldDZfc2soc3NrKTtcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jPTM0NDI9c3RhdGljIGludCBtcHRjcF9kaXNjb25uZWN0KHN0cnVjdCBzb2NrICpzaywgaW50IGZsYWdzKVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMzUwNC1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzozNTA1OiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTM1MDYtc3RhdGljIHN0cnVjdCBpcHY2X3BpbmZvICptcHRjcF9pbmV0Nl9zayhjb25zdCBzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0zNTUzPXN0cnVjdCBzb2NrICptcHRjcF9za19jbG9uZV9pbml0KGNvbnN0IHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTM1NjUtXFxubmV0L21wdGNwL3Byb3RvY29sLmM6MzU2NjojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zNTY3LVxcdGlmIChuc2stXFx1MDAzZXNrX2ZhbWlseSA9PSBBRl9JTkVUNilcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTM1NzItXFxubmV0L21wdGNwL3Byb3RvY29sLmM6MzU3MzojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zNTc0LVxcdGlmIChuc2stXFx1MDAzZXNrX2ZhbWlseSA9PSBBRl9JTkVUNilcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jPTQwOTk9c3RhdGljIGludCBtcHRjcF9iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICp1YWRkciwgaW50IGFkZHJfbGVuKVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtNDExMy1cXHRcXHRlcnIgPSBpbmV0X2JpbmRfc2soc3NrLCB1YWRkciwgYWRkcl9sZW4pO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjQxMTQ6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXFxubmV0L21wdGNwL3Byb3RvY29sLmMtNDExNS1cXHRlbHNlIGlmIChzay1cXHUwMDNlc2tfZmFtaWx5ID09IEFGX0lORVQ2KVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmM9NDYzNT12b2lkIF9faW5pdCBtcHRjcF9wcm90b19pbml0KHZvaWQpXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy00Njc0LVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjQ2NzU6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXFxubmV0L21wdGNwL3Byb3RvY29sLmMtNDY3Ni1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBtcHRjcF92Nl9zdHJlYW1fb3BzID0ge1xcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmg9OTEyPXZvaWQgX19pbml0IG1wdGNwX3Byb3RvX2luaXQodm9pZCk7XFxubmV0L21wdGNwL3Byb3RvY29sLmg6OTEzOiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxcbm5ldC9tcHRjcC9wcm90b2NvbC5oLTkxNC1pbnQgX19pbml0IG1wdGNwX3Byb3RvX3Y2X2luaXQodm9pZCk7XFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE3LSNpbmNsdWRlIFxcdTAwM2NuZXQvcHJvdG9jb2wuaFxcdTAwM2VcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjE4OiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTktI2luY2x1ZGUgXFx1MDAzY25ldC9pcDZfcm91dGUuaFxcdTAwM2VcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmM9MzU4PXN0YXRpYyBpbnQgc3ViZmxvd192NF9zZW5kX3N5bmFjayhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBkc3RfZW50cnkgKmRzdCxcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtMzcwLVxcbm5ldC9tcHRjcC9zdWJmbG93LmM6MzcxOiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtMzcyLXN0YXRpYyBpbnQgc3ViZmxvd192Nl9zZW5kX3N5bmFjayhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBkc3RfZW50cnkgKmRzdCxcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmM9NjQ5PXN0YXRpYyBpbnQgc3ViZmxvd19yZWJ1aWxkX2hlYWRlcihzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTY1OC1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjY1OTojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTY2MC1zdGF0aWMgaW50IHN1YmZsb3dfdjZfcmVidWlsZF9oZWFkZXIoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYz02OTI9c3RhdGljIHZvaWQgc3ViZmxvd192NF9yZXFfZGVzdHJ1Y3RvcihzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpXFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTY5Ny1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjY5ODojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTY5OS1zdGF0aWMgc3RydWN0IHJlcXVlc3Rfc29ja19vcHMgbXB0Y3Bfc3ViZmxvd192Nl9yZXF1ZXN0X3NvY2tfb3BzIF9fcm9fYWZ0ZXJfaW5pdDtcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmM9NzM3PXN0cnVjdCByZXF1ZXN0X3NvY2sgKm1wdGNwX3N1YmZsb3dfcmVxc2tfYWxsb2MoY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29ja19vcHMgKm9wcyxcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtNzQyLVxcdFxcdG9wcyA9IFxcdTAwMjZtcHRjcF9zdWJmbG93X3Y0X3JlcXVlc3Rfc29ja19vcHM7XFxubmV0L21wdGNwL3N1YmZsb3cuYzo3NDM6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXFxubmV0L21wdGNwL3N1YmZsb3cuYy03NDQtXFx0ZWxzZSBpZiAob3BzLVxcdTAwM2VmYW1pbHkgPT0gQUZfSU5FVDYpXFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTE1NTM9c3ViZmxvd19kZWZhdWx0X2FmX29wcyhzdHJ1Y3Qgc29jayAqc2spXFxubmV0L21wdGNwL3N1YmZsb3cuYy0xNTU0LXtcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjE1NTU6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXFxubmV0L21wdGNwL3N1YmZsb3cuYy0xNTU2LVxcdGlmIChzay1cXHUwMDNlc2tfZmFtaWx5ID09IEFGX0lORVQ2KVxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYy0xNTYxLVxcbm5ldC9tcHRjcC9zdWJmbG93LmM6MTU2MjojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE1NjMtdm9pZCBtcHRjcHY2X2hhbmRsZV9tYXBwZWQoc3RydWN0IHNvY2sgKnNrLCBib29sIG1hcHBlZClcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmM9MTU4Mj12b2lkIG1wdGNwX2luZm8yc29ja2FkZHIoY29uc3Qgc3RydWN0IG1wdGNwX2FkZHJfaW5mbyAqaW5mbyxcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTU5Mi1cXHRcXHRcXHRpbl9hZGRyLVxcdTAwM2VzaW5fYWRkciA9IGluZm8tXFx1MDAzZWFkZHI7XFxubmV0L21wdGNwL3N1YmZsb3cuYzoxNTkzOiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTU5NC1cXHRcXHRlbHNlIGlmIChpcHY2X2FkZHJfdjRtYXBwZWQoXFx1MDAyNmluZm8tXFx1MDAzZWFkZHI2KSlcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTU5OC1cXHR9XFxubmV0L21wdGNwL3N1YmZsb3cuYzoxNTk5OiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTYwMC1cXHRlbHNlIGlmIChhZGRyLVxcdTAwM2Vzc19mYW1pbHkgPT0gQUZfSU5FVDYpIHtcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmM9MTYxMz1pbnQgX19tcHRjcF9zdWJmbG93X2Nvbm5lY3Qoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3QgbXB0Y3BfcG1fbG9jYWwgKmxvY2FsLFxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYy0xNjQ4LVxcdFxcdFxcdGxvY2FsX2lkID0gLTE7XFxubmV0L21wdGNwL3N1YmZsb3cuYzoxNjQ5OiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTY1MC1cXHR9IGVsc2UgaWYgKHNrLVxcdTAwM2Vza19mYW1pbHkgPT0gQUZfSU5FVDYpIHtcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTY2NS1cXHRhZGRybGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7XFxubmV0L21wdGNwL3N1YmZsb3cuYzoxNjY2OiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTY2Ny1cXHRpZiAoYWRkci5zc19mYW1pbHkgPT0gQUZfSU5FVDYpXFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTE3NTY9c3RhdGljIHZvaWQgbXB0Y3Bfc3ViZmxvd19vcHNfb3ZlcnJpZGUoc3RydWN0IHNvY2sgKnNzaylcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE3NTcte1xcbm5ldC9tcHRjcC9zdWJmbG93LmM6MTc1ODojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE3NTktXFx0aWYgKHNzay1cXHUwMDNlc2tfcHJvdCA9PSBcXHUwMDI2dGNwdjZfcHJvdClcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmM9MTc2Nj1zdGF0aWMgdm9pZCBtcHRjcF9zdWJmbG93X29wc191bmRvX292ZXJyaWRlKHN0cnVjdCBzb2NrICpzc2spXFxubmV0L21wdGNwL3N1YmZsb3cuYy0xNzY3LXtcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjE3Njg6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXFxubmV0L21wdGNwL3N1YmZsb3cuYy0xNzY5LVxcdGlmIChzc2stXFx1MDAzZXNrX3Byb3QgPT0gXFx1MDAyNnRjcHY2X3Byb3Rfb3ZlcnJpZGUpXFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTIxNDE9dm9pZCBfX2luaXQgbXB0Y3Bfc3ViZmxvd19pbml0KHZvaWQpXFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTIxNzMtXFxubmV0L21wdGNwL3N1YmZsb3cuYzoyMTc0OiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtMjE3NS12b2lkIF9faW5pdCBtcHRjcF9zdWJmbG93X3Y2X2luaXQodm9pZClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMDk6NTA6MjMuMTUxNTMyNDRaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDcxMzY2ODIwMTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgTVBUQ1AgSVB2NiBTb2NrZXQgT3B0aW9uIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIGl0J3MgY2xlYXIgdGhhdCBgTVBUQ1BfSVBWNmAgaXMgYSBuZWNlc3NhcnkgY29uZmlnIHRvIGVuYWJsZSBJUHY2IE1QVENQIHNvY2tldHMuIFRoYXQgbWFrZXMgc2Vuc2UsIHRoZSBjb2RlIChgbXB0Y3BfdjZfc3RyZWFtX29wc2ApIGlzIG9ubHkgcmVnaXN0ZXJlZCB3aGVuIHRoYXQgY29uZmlnIGlzIGVuYWJsZWQuIFNvLCB3ZSdyZSBkZWFsaW5nIHdpdGggYE1QVENQYCBhbmQgYE1QVENQX0lQVjZgIGFzIHRoZSBwcmltYXJ5IGNvbmZpZ3VyYXRpb25zIHRvIGJlIGF3YXJlIG9mLiBXZSBhbHNvIG5lZWQgYElQVjY9eWAsIGJ1dCB0aGF0IGlzIGEgZ2VuZXJpYyBjb25maWcsIHdlIGNhbiBqdXN0IGZvY3VzIG9uIGBNUFRDUGAgYW5kIGBNUFRDUF9JUFY2YCBmb3Igbm93LlxuXG5GdW5jdGlvbi13aXNlLCBJIG5lZWQgdG8gZm9jdXMgb24gYSBmZXcgdGhpbmdzLiBgbXB0Y3Bfc2V0c29ja29wdF92Nl9zZXRfdGNsYXNzYCBpcyBhIG5ldyBmdW5jdGlvbiwgYW5kIHRoZW4gYG1wdGNwX3NldHNvY2tvcHRfdjZgIGFuZCBgbXB0Y3BfZ2V0c29ja29wdF92NmAgYXJlIGV4aXN0aW5nLCBidXQgSSBzZWUgdGhleSBhcmUgbW9kaWZpZWQgaGVyZS4gSSBjaGVja2VkIHRoYXQgYG1wdGNwX3NldHNvY2tvcHRfdjZfc2V0X3RjbGFzc2AgaXMgaW5kZWVkIHN0YXRpYy5cblxuSSd2ZSByZXZpZXdlZCB0aGUgY29kZSBmb3IgYG1wdGNwX3NldHNvY2tvcHRfdjZfc2V0X3RjbGFzc2AgY2FyZWZ1bGx5LiBJdCBjYWxscyBgaXB2Nl9zZXRzb2Nrb3B0YCB3aGljaCBpcyBnb29kIHRvIHNlZSBhcyBpdCBjb25maXJtcyB0aGF0IHN0YW5kYXJkIElQdjYgZnVuY3Rpb25hbGl0eSBpcyBsZXZlcmFnZWQuIFRoZSBjcml0aWNhbCBwYXJ0IGlzIGhvdyB0aGUgVENMQVNTIHZhbHVlIGlzIHByb3BhZ2F0ZWQgdG8gdGhlIHN1YmZsb3dzIHdpdGhpbiBhbiBNUFRDUCBzb2NrZXQuIEl0IHNlZW1zIGNvcnJlY3Q7IGl0IGxvY2tzIHRoZSBtYWluIHNvY2tldCwgdGhlbiBpbmNyZW1lbnRzIHRoZSBzb2Nrb3B0IHNlcXVlbmNlIG51bWJlciwgcmVhZHMgdGhlIFRDTEFTUyB2YWx1ZSwgYW5kIHRoZW4gaXRlcmF0ZXMgdGhyb3VnaCBhbGwgdGhlIHN1YmZsb3dzIHRvIHNldCB0aGUgVENMQVNTIG9uIGVhY2gsIHJlc2V0dGluZyB0aGUgZGVzdGluYXRpb24gb2YgdGhlIHN1YmZsb3cncyBzb2NrZXQuIFRoaXMgaXMgYWxsIHJlYWNoYWJsZSBhbmQgZnVuY3Rpb25hbC5cblxuVGhlcmVmb3JlLCBmb3IgdGhpcyBmdXp6aW5nIGVmZm9ydCwgSSB3aWxsIHNldCBgV29ydGhGdXp6aW5nYCB0byBgdHJ1ZWAuIE15IGBFbmFibGVDb25maWdzYCB3aWxsIGJlIGBbXCJNUFRDUFwiLCBcIk1QVENQX0lQVjZcIl1gLiBUaGUgYEZvY3VzU3ltYm9sc2Agd2lsbCBiZSBgW1wibXB0Y3Bfc2V0c29ja29wdF92Nl9zZXRfdGNsYXNzXCIsIFwibXB0Y3Bfc2V0c29ja29wdF92NlwiLCBcIm1wdGNwX2dldHNvY2tvcHRfdjZcIl1gLiBUaGUgYFJlYXNvbmluZ2Agd2lsbCBiZTogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBzZXR0aW5nIGFuZCBnZXR0aW5nIHRoZSBJUFY2X1RDTEFTUyBzb2NrZXQgb3B0aW9uIG9uIE1QVENQIHNvY2tldHMuIEl0IGludHJvZHVjZXMgYSBuZXcgZnVuY3Rpb24gbXB0Y3Bfc2V0c29ja29wdF92Nl9zZXRfdGNsYXNzIHRvIHByb3BhZ2F0ZSB0aGUgdGNsYXNzIHZhbHVlIHRvIGFsbCBzdWJmbG93cy5cIlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzAzNSwiT3V0cHV0VG9rZW5zIjoxNDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3ODQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMDk6NTE6MTAuMjg4MjE4MDY1WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUwMzc2MDg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNUFRDUFwiLFxuICAgIFwiTVBUQ1BfSVBWNlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1wdGNwX3NldHNvY2tvcHRfdjZfc2V0X3RjbGFzc1wiLFxuICAgIFwibXB0Y3Bfc2V0c29ja29wdF92NlwiLFxuICAgIFwibXB0Y3BfZ2V0c29ja29wdF92NlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3Igc2V0dGluZyBhbmQgZ2V0dGluZyB0aGUgSVBWNl9UQ0xBU1Mgc29ja2V0IG9wdGlvbiBvbiBNUFRDUCBzb2NrZXRzLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IGZ1bmN0aW9uIG1wdGNwX3NldHNvY2tvcHRfdjZfc2V0X3RjbGFzcyB0byBwcm9wYWdhdGUgdGhlIHRjbGFzcyB2YWx1ZSB0byBhbGwgc3ViZmxvd3MuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTVBUQ1BcIixcbiAgICBcIk1QVENQX0lQVjZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtcHRjcF9zZXRzb2Nrb3B0X3Y2X3NldF90Y2xhc3NcIixcbiAgICBcIm1wdGNwX3NldHNvY2tvcHRfdjZcIixcbiAgICBcIm1wdGNwX2dldHNvY2tvcHRfdjZcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHNldHRpbmcgYW5kIGdldHRpbmcgdGhlIElQVjZfVENMQVNTIHNvY2tldCBvcHRpb24gb24gTVBUQ1Agc29ja2V0cy4gSXQgaW50cm9kdWNlcyBhIG5ldyBmdW5jdGlvbiBtcHRjcF9zZXRzb2Nrb3B0X3Y2X3NldF90Y2xhc3MgdG8gcHJvcGFnYXRlIHRoZSB0Y2xhc3MgdmFsdWUgdG8gYWxsIHN1YmZsb3dzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowvjsbw[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-13 09:25:50 +0000 UTC FinishedAt: 2026-07-13 09:51:12 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MPTCP", "MPTCP_IPV6" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MPTCP", "MPTCP_IPV6" ], "series_id": "8be81062-4bbc-46e4-ac2c-40fe2cea6ddb" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "mptcp_setsockopt_v6_set_tclass", "mptcp_setsockopt_v6", "mptcp_getsockopt_v6" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDA5OjQ5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01QVENQJiMzNDssCiAgICAmIzM0O01QVENQX0lQVjYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttcHRjcF9zZXRzb2Nrb3B0X3Y2X3NldF90Y2xhc3MmIzM0OywKICAgICYjMzQ7bXB0Y3Bfc2V0c29ja29wdF92NiYjMzQ7LAogICAgJiMzNDttcHRjcF9nZXRzb2Nrb3B0X3Y2JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3Igc2V0dGluZyBhbmQgZ2V0dGluZyB0aGUgSVBWNl9UQ0xBU1Mgc29ja2V0IG9wdGlvbiBvbiBNUFRDUCBzb2NrZXRzLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IGZ1bmN0aW9uIG1wdGNwX3NldHNvY2tvcHRfdjZfc2V0X3RjbGFzcyB0byBwcm9wYWdhdGUgdGhlIHRjbGFzcyB2YWx1ZSB0byBhbGwgc3ViZmxvd3MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDk6NDk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA0MWMyNTMxYWQxM2UxMzExMTc3NTgzNDg3ZTViNjI3MWY5ODllNWQ5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdWwgMTMgMDk6NDk6MDUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3NvY2tvcHQuYyBiL25ldC9tcHRjcC9zb2Nrb3B0LmNcbmluZGV4IGZjZjZmZWIyYTllYjVkLi5lZGRkYWZlYmI4ZGVmYyAxMDA2NDRcbi0tLSBhL25ldC9tcHRjcC9zb2Nrb3B0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tcHRjcC9zb2Nrb3B0LmNcbkBAIC0zOTQsNiAmIzQzOzM5NCwzNSBAQCBzdGF0aWMgaW50IG1wdGNwX3NldHNvY2tvcHRfc29sX3NvY2tldChzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBpbnQgb3B0bmFtZSxcbiBcdHJldHVybiAtRU9QTk9UU1VQUDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgbXB0Y3Bfc2V0c29ja29wdF92Nl9zZXRfdGNsYXNzKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIGludCBvcHRuYW1lLFxuJiM0MztcdFx0XHRcdFx0ICBzb2NrcHRyX3Qgb3B0dmFsLCB1bnNpZ25lZCBpbnQgb3B0bGVuKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1wdGNwX3N1YmZsb3dfY29udGV4dCAqc3ViZmxvdztcbiYjNDM7XHRzdHJ1Y3Qgc29jayAqc2sgPSAoc3RydWN0IHNvY2sgKiltc2s7XG4mIzQzO1x0aW50IGVyciwgdmFsO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBpcHY2X3NldHNvY2tvcHQoc2ssIFNPTF9JUFY2LCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7XG4mIzQzO1xuJiM0MztcdGlmIChlcnIgIT0gMClcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4mIzQzO1xuJiM0MztcdGxvY2tfc29jayhzayk7XG4mIzQzO1x0c29ja29wdF9zZXFfaW5jKG1zayk7XG4mIzQzO1x0dmFsID0gUkVBRF9PTkNFKGluZXQ2X3NrKHNrKS1cdTAwM2V0Y2xhc3MpO1xuJiM0MztcdG1wdGNwX2Zvcl9lYWNoX3N1YmZsb3cobXNrLCBzdWJmbG93KSB7XG4mIzQzO1x0XHRzdHJ1Y3Qgc29jayAqc3NrID0gbXB0Y3Bfc3ViZmxvd190Y3Bfc29jayhzdWJmbG93KTtcbiYjNDM7XHRcdGJvb2wgc2xvdztcbiYjNDM7XG4mIzQzO1x0XHRzbG93ID0gbG9ja19zb2NrX2Zhc3Qoc3NrKTtcbiYjNDM7XHRcdGluZXQ2X3NrKHNzayktXHUwMDNldGNsYXNzID0gdmFsO1xuJiM0MztcdFx0c2tfZHN0X3Jlc2V0KHNzayk7XG4mIzQzO1x0XHR1bmxvY2tfc29ja19mYXN0KHNzaywgc2xvdyk7XG4mIzQzO1x0fVxuJiM0MztcdHJlbGVhc2Vfc29jayhzayk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgbXB0Y3Bfc2V0c29ja29wdF92NihzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBpbnQgb3B0bmFtZSxcbiBcdFx0XHQgICAgICAgc29ja3B0cl90IG9wdHZhbCwgdW5zaWduZWQgaW50IG9wdGxlbilcbiB7XG5AQCAtNDM2LDYgJiM0Mzs0NjUsOCBAQCBzdGF0aWMgaW50IG1wdGNwX3NldHNvY2tvcHRfdjYoc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgaW50IG9wdG5hbWUsXG4gXG4gXHRcdHJlbGVhc2Vfc29jayhzayk7XG4gXHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgSVBWNl9UQ0xBU1M6XG4mIzQzO1x0XHRyZXR1cm4gbXB0Y3Bfc2V0c29ja29wdF92Nl9zZXRfdGNsYXNzKG1zaywgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pO1xuIFx0fVxuIFxuIFx0cmV0dXJuIHJldDtcbkBAIC0xNDg1LDYgJiM0MzsxNTE2LDkgQEAgc3RhdGljIGludCBtcHRjcF9nZXRzb2Nrb3B0X3Y2KHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIGludCBvcHRuYW1lLFxuIFx0c3RydWN0IHNvY2sgKnNrID0gKHZvaWQgKiltc2s7XG4gXG4gXHRzd2l0Y2ggKG9wdG5hbWUpIHtcbiYjNDM7XHRjYXNlIElQVjZfVENMQVNTOlxuJiM0MztcdFx0cmV0dXJuIG1wdGNwX3B1dF9pbnRfb3B0aW9uKG1zaywgb3B0dmFsLCBvcHRsZW4sXG4mIzQzO1x0XHRcdFx0XHQgICAgUkVBRF9PTkNFKGluZXQ2X3NrKHNrKS1cdTAwM2V0Y2xhc3MpKTtcbiBcdGNhc2UgSVBWNl9WNk9OTFk6XG4gXHRcdHJldHVybiBtcHRjcF9wdXRfaW50X29wdGlvbihtc2ssIG9wdHZhbCwgb3B0bGVuLFxuIFx0XHRcdFx0XHQgICAgc2stXHUwMDNlc2tfaXB2Nm9ubHkpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDA5OjQ5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01QVENQJiMzNDssCiAgICAmIzM0O01QVENQX0lQVjYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttcHRjcF9zZXRzb2Nrb3B0X3Y2X3NldF90Y2xhc3MmIzM0OywKICAgICYjMzQ7bXB0Y3Bfc2V0c29ja29wdF92NiYjMzQ7LAogICAgJiMzNDttcHRjcF9nZXRzb2Nrb3B0X3Y2JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3Igc2V0dGluZyBhbmQgZ2V0dGluZyB0aGUgSVBWNl9UQ0xBU1Mgc29ja2V0IG9wdGlvbiBvbiBNUFRDUCBzb2NrZXRzLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IGZ1bmN0aW9uIG1wdGNwX3NldHNvY2tvcHRfdjZfc2V0X3RjbGFzcyB0byBwcm9wYWdhdGUgdGhlIHRjbGFzcyB2YWx1ZSB0byBhbGwgc3ViZmxvd3MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDQxYzI1MzFhZDEzZTEzMTExNzc1ODM0ODdlNWI2MjcxZjk4OWU1ZDkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEp1bCAxMyAwOTo0OTowNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9tcHRjcC9zb2Nrb3B0LmMgYi9uZXQvbXB0Y3Avc29ja29wdC5jCmluZGV4IGZjZjZmZWIyYTllYjVkLi5lZGRkYWZlYmI4ZGVmYyAxMDA2NDQKLS0tIGEvbmV0L21wdGNwL3NvY2tvcHQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbXB0Y3Avc29ja29wdC5jCkBAIC0zOTQsNiAmIzQzOzM5NCwzNSBAQCBzdGF0aWMgaW50IG1wdGNwX3NldHNvY2tvcHRfc29sX3NvY2tldChzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBpbnQgb3B0bmFtZSwKIAlyZXR1cm4gLUVPUE5PVFNVUFA7CiB9CiAKJiM0MztzdGF0aWMgaW50IG1wdGNwX3NldHNvY2tvcHRfdjZfc2V0X3RjbGFzcyhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBpbnQgb3B0bmFtZSwKJiM0MzsJCQkJCSAgc29ja3B0cl90IG9wdHZhbCwgdW5zaWduZWQgaW50IG9wdGxlbikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtcHRjcF9zdWJmbG93X2NvbnRleHQgKnN1YmZsb3c7CiYjNDM7CXN0cnVjdCBzb2NrICpzayA9IChzdHJ1Y3Qgc29jayAqKW1zazsKJiM0MzsJaW50IGVyciwgdmFsOwomIzQzOwomIzQzOwllcnIgPSBpcHY2X3NldHNvY2tvcHQoc2ssIFNPTF9JUFY2LCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7CiYjNDM7CiYjNDM7CWlmIChlcnIgIT0gMCkKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CiYjNDM7CWxvY2tfc29jayhzayk7CiYjNDM7CXNvY2tvcHRfc2VxX2luYyhtc2spOwomIzQzOwl2YWwgPSBSRUFEX09OQ0UoaW5ldDZfc2soc2spLSZndDt0Y2xhc3MpOwomIzQzOwltcHRjcF9mb3JfZWFjaF9zdWJmbG93KG1zaywgc3ViZmxvdykgewomIzQzOwkJc3RydWN0IHNvY2sgKnNzayA9IG1wdGNwX3N1YmZsb3dfdGNwX3NvY2soc3ViZmxvdyk7CiYjNDM7CQlib29sIHNsb3c7CiYjNDM7CiYjNDM7CQlzbG93ID0gbG9ja19zb2NrX2Zhc3Qoc3NrKTsKJiM0MzsJCWluZXQ2X3NrKHNzayktJmd0O3RjbGFzcyA9IHZhbDsKJiM0MzsJCXNrX2RzdF9yZXNldChzc2spOwomIzQzOwkJdW5sb2NrX3NvY2tfZmFzdChzc2ssIHNsb3cpOwomIzQzOwl9CiYjNDM7CXJlbGVhc2Vfc29jayhzayk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgbXB0Y3Bfc2V0c29ja29wdF92NihzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBpbnQgb3B0bmFtZSwKIAkJCSAgICAgICBzb2NrcHRyX3Qgb3B0dmFsLCB1bnNpZ25lZCBpbnQgb3B0bGVuKQogewpAQCAtNDM2LDYgJiM0Mzs0NjUsOCBAQCBzdGF0aWMgaW50IG1wdGNwX3NldHNvY2tvcHRfdjYoc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgaW50IG9wdG5hbWUsCiAKIAkJcmVsZWFzZV9zb2NrKHNrKTsKIAkJYnJlYWs7CiYjNDM7CWNhc2UgSVBWNl9UQ0xBU1M6CiYjNDM7CQlyZXR1cm4gbXB0Y3Bfc2V0c29ja29wdF92Nl9zZXRfdGNsYXNzKG1zaywgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pOwogCX0KIAogCXJldHVybiByZXQ7CkBAIC0xNDg1LDYgJiM0MzsxNTE2LDkgQEAgc3RhdGljIGludCBtcHRjcF9nZXRzb2Nrb3B0X3Y2KHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIGludCBvcHRuYW1lLAogCXN0cnVjdCBzb2NrICpzayA9ICh2b2lkICopbXNrOwogCiAJc3dpdGNoIChvcHRuYW1lKSB7CiYjNDM7CWNhc2UgSVBWNl9UQ0xBU1M6CiYjNDM7CQlyZXR1cm4gbXB0Y3BfcHV0X2ludF9vcHRpb24obXNrLCBvcHR2YWwsIG9wdGxlbiwKJiM0MzsJCQkJCSAgICBSRUFEX09OQ0UoaW5ldDZfc2soc2spLSZndDt0Y2xhc3MpKTsKIAljYXNlIElQVjZfVjZPTkxZOgogCQlyZXR1cm4gbXB0Y3BfcHV0X2ludF9vcHRpb24obXNrLCBvcHR2YWwsIG9wdGxlbiwKIAkJCQkJICAgIHNrLSZndDtza19pcHY2b25seSk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDA5OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzOTcKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxMDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTVBUQ1AgSVBWNl9UQ0xBU1MgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBhaW1lZCBhdCBleHRlbmRpbmcgTVBUQ1AgZnVuY3Rpb25hbGl0eSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBJUHY2IHRyYWZmaWMgY2xhc3MgaGFuZGxpbmcuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgaW50cm9kdWNpbmcgdGhlIGFiaWxpdHkgdG8gc2V0IGFuZCByZXRyaWV2ZSB0aGUgYElQVjZfVENMQVNTYCBzb2NrZXQgb3B0aW9uIOKAkyBhIHZhbHVhYmxlIGFkZGl0aW9uLiBUaGUgY29yZSBtb2RpZmljYXRpb24gc2VlbXMgdG8gcmVzaWRlIHdpdGhpbiBgbmV0L21wdGNwL3NvY2tvcHQuY2AsIHdoaWNoIG1ha2VzIHNlbnNlIGFzIHRoaXMgZmlsZSBvZnRlbiBoYW5kbGVzIHNvY2tldC1sZXZlbCBjb25maWd1cmF0aW9ucyBmb3IgdGhlIHByb3RvY29sLgoKSSBzZWUgaXQmIzM5O3MgYWRkZWQgb3IgbW9kaWZpZWQgZnVuY3Rpb25zOiBgbXB0Y3Bfc2V0c29ja29wdF92Nl9zZXRfdGNsYXNzYCwgYG1wdGNwX3NldHNvY2tvcHRfdjZgLCBhbmQgYG1wdGNwX2dldHNvY2tvcHRfdjZgLiBUaGF0JiMzOTtzIHRoZSBleHBlY3RlZCBmb290cHJpbnQsIHNldHRpbmcgYW5kIGdldHRpbmcsIGFsb25nIHdpdGggdGhlIHdyYXBwZXIuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMsIGJ1dCBhdCBmaXJzdCBnbGFuY2UsIGl0IGFwcGVhcnMgc291bmQuIEkmIzM5O2xsIHRha2UgYSBxdWljayBsb29rIGF0IHRoZSBjb250ZXh0IGFuZCB0aGUgc3Vycm91bmRpbmcgY29kZSwgYW5kIG9mIGNvdXJzZSwgSSBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIGNvbmZpZ3VyYXRpb24gZm9yIE1QVENQIGl0c2VsZiB0byBlbnN1cmUgaXQmIzM5O3MgcHJvcGVybHkgZW5hYmxlZCBhbmQgaW50ZWdyYXRlZCB3aXRoaW4gdGhlIGJ1aWxkIHN5c3RlbS4gVGhlbiBJIGNhbiBnZXQgaW50byB0aGUgcmVhbCBkZXRhaWxzIG9mIHRoZSBpbXBsZW1lbnRhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAwOTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTVBUQ1AmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbXB0Y3AvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbXB0Y3AvS2NvbmZpZy0xLVxubmV0L21wdGNwL0tjb25maWc6Mjpjb25maWcgTVBUQ1Bcbm5ldC9tcHRjcC9LY29uZmlnLTMtXHRib29sIFwmIzM0O01QVENQOiBNdWx0aXBhdGggVENQXCYjMzQ7XG4tLVxubmV0L21wdGNwL0tjb25maWc9MTY9Y29uZmlnIElORVRfTVBUQ1BfRElBR1xuLS1cbm5ldC9tcHRjcC9LY29uZmlnLTE5LVxubmV0L21wdGNwL0tjb25maWc6MjA6Y29uZmlnIE1QVENQX0lQVjZcbm5ldC9tcHRjcC9LY29uZmlnLTIxLVx0Ym9vbCBcJiMzNDtNUFRDUDogSVB2NiBzdXBwb3J0IGZvciBNdWx0aXBhdGggVENQXCYjMzQ7XG4tLVxubmV0L21wdGNwL0tjb25maWctMjQtXG5uZXQvbXB0Y3AvS2NvbmZpZzoyNTpjb25maWcgTVBUQ1BfS1VOSVRfVEVTVFxubmV0L21wdGNwL0tjb25maWctMjYtXHR0cmlzdGF0ZSBcJiMzNDtUaGlzIGJ1aWxkcyB0aGUgTVBUQ1AgS1VuaXQgdGVzdHNcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDA5OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwMDIKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA3NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE1QVENQIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgY29uZmlndXJhdGlvbiBvcHRpb25zLCBgTVBUQ1BgIGFuZCBgTVBUQ1BfSVBWNmAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZyBjcnVjaWFsIGhlcmUuIEl0JiMzOTtzIHVzdWFsbHkgYSBnb29kIHByYWN0aWNlIHRvIHRob3JvdWdobHkgcmV2aWV3IGFsbCBhdmFpbGFibGUgb3B0aW9ucywgYXMgYSBmaWVsZCBleHBlcnQsIHRvIGd1YXJhbnRlZSBJIGZ1bGx5IHVuZGVyc3RhbmQgYWxsIHRoZSBzeXN0ZW0mIzM5O3MgY2FwYWJpbGl0aWVzLgoKTm93LCBJIHNlZSB0aGUgcGF0Y2ggaXMgc3BlY2lmaWNhbGx5IG1vZGlmeWluZyBgbXB0Y3Bfc2V0c29ja29wdF92NmAgYW5kIGBtcHRjcF9nZXRzb2Nrb3B0X3Y2YC4gQWgsIHRoaXMgaXMgaW1tZWRpYXRlbHkgaW5zaWdodGZ1bC4gR2l2ZW4gdGhlc2UgbW9kaWZpY2F0aW9ucywgYW5kIHRoZSBuYW1pbmcgY29udmVudGlvbiwgdGhlc2UgZnVuY3Rpb25zIGFyZSBhbG1vc3QgY2VydGFpbmx5IGNvbXBpbGVkIGNvbmRpdGlvbmFsbHksIGJhc2VkIG9uIHRoZSBgTVBUQ1BfSVBWNmAgZmxhZyBiZWluZyBlbmFibGVkLiBUaGlzIHRlbGxzIG1lIHRoYXQgSVBWNiBpcyBpbnRlZ3JhdGVkIHdpdGggdGhlIGBNUFRDUGAgZmVhdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAwOTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttcHRjcF9zZXRzb2Nrb3B0X3Y2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L21wdGNwL3NvY2tvcHQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbXB0Y3Avc29ja29wdC5jPTMwMD1zdGF0aWMgaW50IG1wdGNwX3NldHNvY2tvcHRfc29sX3NvY2tldChzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBpbnQgb3B0bmFtZSxcbi0tXG5uZXQvbXB0Y3Avc29ja29wdC5jLTM5Ni1cbm5ldC9tcHRjcC9zb2Nrb3B0LmM6Mzk3OnN0YXRpYyBpbnQgbXB0Y3Bfc2V0c29ja29wdF92Nl9zZXRfdGNsYXNzKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIGludCBvcHRuYW1lLFxubmV0L21wdGNwL3NvY2tvcHQuYy0zOTgtXHRcdFx0XHRcdCAgc29ja3B0cl90IG9wdHZhbCwgdW5zaWduZWQgaW50IG9wdGxlbilcbi0tXG5uZXQvbXB0Y3Avc29ja29wdC5jLTQyNS1cbm5ldC9tcHRjcC9zb2Nrb3B0LmM6NDI2OnN0YXRpYyBpbnQgbXB0Y3Bfc2V0c29ja29wdF92NihzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBpbnQgb3B0bmFtZSxcbm5ldC9tcHRjcC9zb2Nrb3B0LmMtNDI3LVx0XHRcdCAgICAgICBzb2NrcHRyX3Qgb3B0dmFsLCB1bnNpZ25lZCBpbnQgb3B0bGVuKVxuLS1cbm5ldC9tcHRjcC9zb2Nrb3B0LmMtNDY4LVx0Y2FzZSBJUFY2X1RDTEFTUzpcbm5ldC9tcHRjcC9zb2Nrb3B0LmM6NDY5Olx0XHRyZXR1cm4gbXB0Y3Bfc2V0c29ja29wdF92Nl9zZXRfdGNsYXNzKG1zaywgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pO1xubmV0L21wdGNwL3NvY2tvcHQuYy00NzAtXHR9XG4tLVxubmV0L21wdGNwL3NvY2tvcHQuYz05Mzg9aW50IG1wdGNwX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuLS1cbm5ldC9tcHRjcC9zb2Nrb3B0LmMtOTY3LVx0aWYgKGxldmVsID09IFNPTF9JUFY2KVxubmV0L21wdGNwL3NvY2tvcHQuYzo5Njg6XHRcdHJldHVybiBtcHRjcF9zZXRzb2Nrb3B0X3Y2KG1zaywgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pO1xubmV0L21wdGNwL3NvY2tvcHQuYy05NjktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDk6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzc0MgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24gaW4gdGhlIE1QVENQIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgYG1wdGNwX3NldHNvY2tvcHRfdjZgIGZ1bmN0aW9uLCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaXQmIzM5O3MgbG9jYXRlZCBpbiBgbmV0L21wdGNwL3NvY2tvcHQuY2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb21waWxhdGlvbiBwcm9jZXNzLiBNeSBwcmltYXJ5IGNvbmNlcm4gaGVyZSBpcyBkZXRlcm1pbmluZyB3aGV0aGVyIHRoYXQgZmlsZSBpdHNlbGYgaXMgY29tcGlsZWQgY29uZGl0aW9uYWxseSwgb3IgaWYgdGhlIHNwZWNpZmljIGZ1bmN0aW9uLCBgbXB0Y3Bfc2V0c29ja29wdF92NmAsIGlzIGd1YXJkZWQgYnkgYSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlLCBsaWtlIGFuIGAjaWZkZWYgQ09ORklHX01QVENQX0lQVjZgLiBVbmRlcnN0YW5kaW5nIHRoaXMgd2lsbCBiZSBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgaG93IE1QVENQJiMzOTtzIElQdjYgc3VwcG9ydCBpcyBlbmFibGVkIHdpdGhpbiB0aGUga2VybmVsLiBJIG5lZWQgdG8gY2hlY2sgZm9yIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiB0aGF0IGFmZmVjdHMgdGhlIGV4aXN0ZW5jZSBvZiB0aGlzIGZ1bmN0aW9uLiBUaGF0IGlzIG15IG5leHQgc3RlcC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAwOTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19NUFRDUF9JUFY2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L21wdGNwL3NvY2tvcHQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDk6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDAzMwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIERlZXAgaW50byBNUFRDUCBhbmQgSVB2NiBJbnRlZ3JhdGlvbioqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJIHdhcyB1bmRlciB0aGUgaW1wcmVzc2lvbiB0aGF0IHRoZSBNUFRDUCBzb2Nrb3B0IGNvZGUgaW4gYG5ldC9tcHRjcC9zb2Nrb3B0LmNgIHdvdWxkIGRlZmluaXRlbHkgYWNjb3VudCBmb3IgSVB2NiwgZXNwZWNpYWxseSB3aXRoIHRoZSBwb3RlbnRpYWwgZm9yIGR1YWwtc3RhY2sgY29uZmlndXJhdGlvbnMuIEkgbmVlZCB0byB2ZXJpZnkgaWYgdGhlIElQdjYgY29uZmlndXJhdGlvbiBpcyBlbmFibGVkLCBidXQgdGhlIGZhY3QgdGhhdCBJIGRvbiYjMzk7dCBzZWUgYENPTkZJR19NUFRDUF9JUFY2YCBvdXRyaWdodCBpcyBtYWtpbmcgbWUgc2Vjb25kIGd1ZXNzIHRoaW5ncy4gTGV0JiMzOTtzIG5vdCBtYWtlIGFzc3VtcHRpb25zIGhlcmUuIFRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSYjMzk7bSBnb2luZyB0byBzY2FuIHRoZSBgbmV0L21wdGNwL3NvY2tvcHQuY2Agc291cmNlIGNvZGUsIGxvb2tpbmcgc3BlY2lmaWNhbGx5IGZvciBhbnkgYCNpZmRlZiBDT05GSUdfSVBWNmAgZGlyZWN0aXZlcywgb3IgYW55IG90aGVyIGNvbmRpdGlvbmFsIGNoZWNrcyB0aGF0IG1pZ2h0IHN1Z2dlc3QgaG93IElQdjYgc3VwcG9ydCBpcyBoYW5kbGVkIHdpdGhpbiB0aGUgc29ja29wdCBpbXBsZW1lbnRhdGlvbi4gVGhpcyBpcyBnb2luZyB0byBiZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgaW50ZXJwbGF5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAwOTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfSVBWNiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9tcHRjcC9zb2Nrb3B0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21wdGNwL3NvY2tvcHQuYz0xMjAyPXN0YXRpYyB2b2lkIG1wdGNwX2dldF9zdWJfYWRkcnMoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19hZGRycyAqYSlcbi0tXG5uZXQvbXB0Y3Avc29ja29wdC5jLTEyMTgtXHRcdGEtXHUwMDNlc2luX3JlbW90ZS5zaW5fYWRkci5zX2FkZHIgPSBpbmV0LVx1MDAzZWluZXRfZGFkZHI7XG5uZXQvbXB0Y3Avc29ja29wdC5jOjEyMTk6I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG5uZXQvbXB0Y3Avc29ja29wdC5jLTEyMjAtXHR9IGVsc2UgaWYgKHNrLVx1MDAzZXNrX2ZhbWlseSA9PSBBRl9JTkVUNikge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAwOTo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDc4CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUuIE15IGZpcnN0IHRob3VnaHQgaXM6CgoqKkNoZWNraW5nIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uIG9mIGBtcHRjcF9zZXRzb2Nrb3B0X3Y2YCoqCgpJIG5lZWQgdG8gY29uZmlybSBzb21ldGhpbmcgY3J1Y2lhbCBhYm91dCB0aGUgY29kZTogaXMgdGhlIGZ1bmN0aW9uIGBtcHRjcF9zZXRzb2Nrb3B0X3Y2YCBjb21waWxlZCB1bmNvbmRpdGlvbmFsbHk/IEluIG90aGVyIHdvcmRzLCBpcyBpdCBhbHdheXMgaW5jbHVkZWQgaW4gdGhlIGJ1aWxkLCByZWdhcmRsZXNzIG9mIHRoZSBjb25maWd1cmF0aW9uIG9yIHBsYXRmb3JtPyBUaGlzIGlzIGEgZnVuZGFtZW50YWwgcXVlc3Rpb24gZm9yIGl0cyBwb3J0YWJpbGl0eSBhbmQgaG93IGl0IGZ1bmN0aW9ucyBhcyBhIGNvbXBvbmVudCBvZiB0aGUgbGFyZ2VyIGNvZGUgYmFzZS4gSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiBvZiBpdHMgY29tcGlsYXRpb24gc3RyYXRlZ3kuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDA5OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21wdGNwX3NldHNvY2tvcHRfdjYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbXB0Y3Avc29ja29wdC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tcHRjcC9zb2Nrb3B0LmM9MzAwPXN0YXRpYyBpbnQgbXB0Y3Bfc2V0c29ja29wdF9zb2xfc29ja2V0KHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIGludCBvcHRuYW1lLFxuLS1cbm5ldC9tcHRjcC9zb2Nrb3B0LmMtMzk2LVxubmV0L21wdGNwL3NvY2tvcHQuYzozOTc6c3RhdGljIGludCBtcHRjcF9zZXRzb2Nrb3B0X3Y2X3NldF90Y2xhc3Moc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgaW50IG9wdG5hbWUsXG5uZXQvbXB0Y3Avc29ja29wdC5jLTM5OC1cdFx0XHRcdFx0ICBzb2NrcHRyX3Qgb3B0dmFsLCB1bnNpZ25lZCBpbnQgb3B0bGVuKVxuLS1cbm5ldC9tcHRjcC9zb2Nrb3B0LmMtNDI1LVxubmV0L21wdGNwL3NvY2tvcHQuYzo0MjY6c3RhdGljIGludCBtcHRjcF9zZXRzb2Nrb3B0X3Y2KHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIGludCBvcHRuYW1lLFxubmV0L21wdGNwL3NvY2tvcHQuYy00MjctXHRcdFx0ICAgICAgIHNvY2twdHJfdCBvcHR2YWwsIHVuc2lnbmVkIGludCBvcHRsZW4pXG4tLVxubmV0L21wdGNwL3NvY2tvcHQuYy00NjgtXHRjYXNlIElQVjZfVENMQVNTOlxubmV0L21wdGNwL3NvY2tvcHQuYzo0Njk6XHRcdHJldHVybiBtcHRjcF9zZXRzb2Nrb3B0X3Y2X3NldF90Y2xhc3MobXNrLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7XG5uZXQvbXB0Y3Avc29ja29wdC5jLTQ3MC1cdH1cbi0tXG5uZXQvbXB0Y3Avc29ja29wdC5jPTkzOD1pbnQgbXB0Y3Bfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG4tLVxubmV0L21wdGNwL3NvY2tvcHQuYy05NjctXHRpZiAobGV2ZWwgPT0gU09MX0lQVjYpXG5uZXQvbXB0Y3Avc29ja29wdC5jOjk2ODpcdFx0cmV0dXJuIG1wdGNwX3NldHNvY2tvcHRfdjYobXNrLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7XG5uZXQvbXB0Y3Avc29ja29wdC5jLTk2OS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDk6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTEwNAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk1QVENQIENvbmZpZ3VyYXRpb24gQ29udW5kcnVtKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBtcHRjcF9zZXRzb2Nrb3B0X3Y2YCBmdW5jdGlvbiBhbmQgc29tZXRoaW5nJiMzOTtzIG5vdCBxdWl0ZSByaWdodC4gSXQgc2VlbXMgdG8gYmUgZ2V0dGluZyBjb21waWxlZCByZWdhcmRsZXNzLCB3aGljaCBpcyBhIGJpdCBzdHJhbmdlLCBidXQgSSBzdXNwZWN0IGl0JiMzOTtzIGRlcGVuZGVudCBvbiBzb21lIG90aGVyIGZsYWcgdG8gYWN0dWFsbHkgKndvcmsqLiBNeSBndXQgc2F5cyBpdCBwcm9iYWJseSBuZWVkcyBlaXRoZXIgYE1QVENQX0lQVjZgIHRvIGJlIGVuYWJsZWQsIG9yIHBlcmhhcHMgdGhlIHdob2xlIGBNUFRDUGAgZmVhdHVyZSBpcyByZWxpYW50IG9uIElQdjYgYmVpbmcgcHJlc2VudC4gVG8gYmUgY2VydGFpbiwgSSBuZWVkIHRvIGNoZWNrIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gVGhlIGBLY29uZmlnYCBmaWxlcyBhcmUgYWx3YXlzIHRoZSBiZXN0IHBsYWNlIHRvIGZpbmQgdGhlc2Uga2luZHMgb2YgZGVwZW5kZW5jaWVzLiBMZXQgbWUgbmF2aWdhdGUgdG8gYG5ldC9tcHRjcC9LY29uZmlnYCBhbmQgc2VlIHdoYXQgdGhlIHRydXRoIG9mIHRoZSBtYXR0ZXIgaXMuIFRoYXQgc2hvdWxkIGNsZWFyIHRoaXMgdXAgcHJldHR5IHF1aWNrbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDA5OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNUFRDUF9JUFY2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L21wdGNwL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21wdGNwL0tjb25maWc9MTY9Y29uZmlnIElORVRfTVBUQ1BfRElBR1xuLS1cbm5ldC9tcHRjcC9LY29uZmlnLTE5LVxubmV0L21wdGNwL0tjb25maWc6MjA6Y29uZmlnIE1QVENQX0lQVjZcbm5ldC9tcHRjcC9LY29uZmlnLTIxLVx0Ym9vbCBcJiMzNDtNUFRDUDogSVB2NiBzdXBwb3J0IGZvciBNdWx0aXBhdGggVENQXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDA5OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0NjMKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgTVBUQ1AgS2NvbmZpZyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MgYW5kIGNyYWNrIG9wZW4gdGhlIGBuZXQvbXB0Y3AvS2NvbmZpZ2AgZmlsZS4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIE11bHRwYXRoIFRDUCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXZhaWxhYmxlIGluIHRoZSBrZXJuZWwuIFRoaXMgY29uZmlnIGZpbGUgaXMgdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIgd2hlbiBpdCBjb21lcyB0byBlbmFibGluZyBhbmQgY3VzdG9taXppbmcgTVBUQ1AmIzM5O3MgYmVoYXZpb3IuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHNlZWluZyB3aGF0IGxldmVsIG9mIGNvbnRyb2wgaXQgcHJvdmlkZXMgb3ZlciBkaWZmZXJlbnQgZmVhdHVyZXMg4oCTIHRoaW5ncyBsaWtlIHBhdGggbWFuYWdlbWVudCwgY29uZ2VzdGlvbiBjb250cm9sIGFsZ29yaXRobXMgKGFuZCB0aGUgcG90ZW50aWFsIHRvIGFkZCBjdXN0b20gb25lcyksIHN1YmZsb3cgZXN0YWJsaXNobWVudCwgYW5kIGhvdyBpdCBoYW5kbGVzIGRpZmZlcmVudCBuZXR3b3JrIGVudmlyb25tZW50cy4gSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIGEgc3RydWN0dXJlZCBicmVha2Rvd24gb2YgZGVwZW5kZW5jaWVzIGFuZCBkZWZhdWx0IHZhbHVlcywgd2hpY2ggaGVscHMgdW5kZXJzdGFuZCBob3cgdGhlIGRpZmZlcmVudCBwaWVjZXMgb2YgTVBUQ1AgZml0IHRvZ2V0aGVyLiBBcmUgdGhlcmUgYW55IGNvbmRpdGlvbmFsIGRlcGVuZGVuY2llcz8gQXJlIGFueSBmZWF0dXJlcyBleHBlcmltZW50YWwgYW5kIHRodXMgYmVoaW5kIGEgY29uZmlnIGZsYWc/IEkmIzM5O20gaG9waW5nIGl0IGNsZWFybHkgbWFwcyBvdXQgdGhlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiB0aGUgdmFyaW91cyBNUFRDUCBjb21wb25lbnRzIGFuZCB0aGVpciByZXNwZWN0aXZlIGNvbXBpbGUtdGltZSBzZXR0aW5ncy4gSXQmIzM5O3MgdGltZSB0byBzZWUgd2hhdCB0aGlzIEtjb25maWcgZmlsZSBob2xkcyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDk6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbXB0Y3AvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdFxuICAgMjpcdGNvbmZpZyBNUFRDUFxuICAgMzpcdFx0Ym9vbCBcJiMzNDtNUFRDUDogTXVsdGlwYXRoIFRDUFwmIzM0O1xuICAgNDpcdFx0ZGVwZW5kcyBvbiBJTkVUXG4gICA1Olx0XHRzZWxlY3QgU0tCX0VYVEVOU0lPTlNcbiAgIDY6XHRcdHNlbGVjdCBDUllQVE9fTElCX1NIQTI1NlxuICAgNzpcdFx0c2VsZWN0IENSWVBUT19MSUJfVVRJTFNcbiAgIDg6XHRcdGhlbHBcbiAgIDk6XHRcdCAgTXVsdGlwYXRoIFRDUCAoTVBUQ1ApIGNvbm5lY3Rpb25zIHNlbmQgYW5kIHJlY2VpdmUgZGF0YSBvdmVyIG11bHRpcGxlXG4gIDEwOlx0XHQgIHN1YmZsb3dzIGluIG9yZGVyIHRvIHV0aWxpemUgbXVsdGlwbGUgbmV0d29yayBwYXRocy4gRWFjaCBzdWJmbG93XG4gIDExOlx0XHQgIHVzZXMgdGhlIFRDUCBwcm90b2NvbCwgYW5kIFRDUCBvcHRpb25zIGNhcnJ5IGhlYWRlciBpbmZvcm1hdGlvbiBmb3JcbiAgMTI6XHRcdCAgTVBUQ1AuXG4gIDEzOlx0XG4gIDE0Olx0aWYgTVBUQ1BcbiAgMTU6XHRcbiAgMTY6XHRjb25maWcgSU5FVF9NUFRDUF9ESUFHXG4gIDE3Olx0XHRkZXBlbmRzIG9uIElORVRfRElBR1xuICAxODpcdFx0ZGVmX3RyaXN0YXRlIElORVRfRElBR1xuICAxOTpcdFxuICAyMDpcdGNvbmZpZyBNUFRDUF9JUFY2XG4gIDIxOlx0XHRib29sIFwmIzM0O01QVENQOiBJUHY2IHN1cHBvcnQgZm9yIE11bHRpcGF0aCBUQ1BcJiMzNDtcbiAgMjI6XHRcdGRlcGVuZHMgb24gSVBWNj15XG4gIDIzOlx0XHRkZWZhdWx0IHlcbiAgMjQ6XHRcbiAgMjU6XHRjb25maWcgTVBUQ1BfS1VOSVRfVEVTVFxuICAyNjpcdFx0dHJpc3RhdGUgXCYjMzQ7VGhpcyBidWlsZHMgdGhlIE1QVENQIEtVbml0IHRlc3RzXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbiAgMjc6XHRcdGRlcGVuZHMgb24gS1VOSVRcbiAgMjg6XHRcdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXG4gIDI5Olx0XHRoZWxwXG4gIDMwOlx0XHQgIEN1cnJlbnRseSBjb3ZlcnMgdGhlIE1QVENQIGNyeXB0byBhbmQgdG9rZW4gaGVscGVycy5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDk6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjEyNgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDgxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipNUFRDUCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqCgpBbHJpZ2h0LCBzbyBJIHNlZSBgTVBUQ1BgIGFuZCBgTVBUQ1BfSVBWNmAgYXMgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIGhlcmUuIE5hdHVyYWxseSwgbXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdGhhdCBgTVBUQ1BfSVBWNmAgaXMgcHJvYmFibHkgY29udGluZ2VudCBvbiBgSVBWNj15YCBiZWluZyBzZXQuIFRoYXQgbWFrZXMgaW50dWl0aXZlIHNlbnNlOyB3ZSBjYW4mIzM5O3QgZW5hYmxlIElQdjYtc3BlY2lmaWMgTVBUQ1AgZmVhdHVyZXMgd2l0aG91dCBJUHY2IGl0c2VsZi4KCk5vdywgSSBuZWVkIHRvIGNvbmZpcm0gc29tZXRoaW5nOiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhlIGBtcHRjcF9zZXRzb2Nrb3B0X3Y2YCBmdW5jdGlvbmFsaXR5IGlzIGluZGVlZCBwcm90ZWN0ZWQgYnkgdGhhdCBgI2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpYCBjb25kaXRpb25hbCB3aXRoaW4gYG5ldC9tcHRjcC9zb2Nrb3B0LmNgLiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIGNoZWNrLCBtYWtpbmcgc3VyZSB0aGUgSVB2Ni1zcGVjaWZpYyBzb2NrZXQgb3B0aW9ucyBhcmVuJiMzOTt0IGFjY2lkZW50YWxseSBleHBvc2VkIHdoZW4gSVB2NiBzdXBwb3J0IGlzIGRpc2FibGVkLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayB0aGUgY29kZSB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDk6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbXB0Y3Avc29ja29wdC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0MjA6XHRcdH1cbiA0MjE6XHRcdHJlbGVhc2Vfc29jayhzayk7XG4gNDIyOlx0XG4gNDIzOlx0XHRyZXR1cm4gMDtcbiA0MjQ6XHR9XG4gNDI1Olx0XG4gNDI2Olx0c3RhdGljIGludCBtcHRjcF9zZXRzb2Nrb3B0X3Y2KHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIGludCBvcHRuYW1lLFxuIDQyNzpcdFx0XHRcdCAgICAgICBzb2NrcHRyX3Qgb3B0dmFsLCB1bnNpZ25lZCBpbnQgb3B0bGVuKVxuIDQyODpcdHtcbiA0Mjk6XHRcdHN0cnVjdCBzb2NrICpzayA9IChzdHJ1Y3Qgc29jayAqKW1zaztcbiA0MzA6XHRcdGludCByZXQgPSAtRU9QTk9UU1VQUDtcbiA0MzE6XHRcdHN0cnVjdCBzb2NrICpzc2s7XG4gNDMyOlx0XG4gNDMzOlx0XHRzd2l0Y2ggKG9wdG5hbWUpIHtcbiA0MzQ6XHRcdGNhc2UgSVBWNl9WNk9OTFk6XG4gNDM1Olx0XHRjYXNlIElQVjZfVFJBTlNQQVJFTlQ6XG4gNDM2Olx0XHRjYXNlIElQVjZfRlJFRUJJTkQ6XG4gNDM3Olx0XHRcdGxvY2tfc29jayhzayk7XG4gNDM4Olx0XHRcdHNzayA9IF9fbXB0Y3Bfbm1wY19zayhtc2spO1xuIDQzOTpcdFx0XHRpZiAoSVNfRVJSKHNzaykpIHtcbiA0NDA6XHRcdFx0XHRyZWxlYXNlX3NvY2soc2spO1xuIDQ0MTpcdFx0XHRcdHJldHVybiBQVFJfRVJSKHNzayk7XG4gNDQyOlx0XHRcdH1cbiA0NDM6XHRcbiA0NDQ6XHRcdFx0cmV0ID0gdGNwX3NldHNvY2tvcHQoc3NrLCBTT0xfSVBWNiwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pO1xuIDQ0NTpcdFx0XHRpZiAocmV0ICE9IDApIHtcbiA0NDY6XHRcdFx0XHRyZWxlYXNlX3NvY2soc2spO1xuIDQ0NzpcdFx0XHRcdHJldHVybiByZXQ7XG4gNDQ4Olx0XHRcdH1cbiA0NDk6XHRcbiA0NTA6XHRcdFx0c29ja29wdF9zZXFfaW5jKG1zayk7XG4gNDUxOlx0XG4gNDUyOlx0XHRcdHN3aXRjaCAob3B0bmFtZSkge1xuIDQ1MzpcdFx0XHRjYXNlIElQVjZfVjZPTkxZOlxuIDQ1NDpcdFx0XHRcdHNrLVx1MDAzZXNrX2lwdjZvbmx5ID0gc3NrLVx1MDAzZXNrX2lwdjZvbmx5O1xuIDQ1NTpcdFx0XHRcdGJyZWFrO1xuIDQ1NjpcdFx0XHRjYXNlIElQVjZfVFJBTlNQQVJFTlQ6XG4gNDU3Olx0XHRcdFx0aW5ldF9hc3NpZ25fYml0KFRSQU5TUEFSRU5ULCBzayxcbiA0NTg6XHRcdFx0XHRcdFx0aW5ldF90ZXN0X2JpdChUUkFOU1BBUkVOVCwgc3NrKSk7XG4gNDU5Olx0XHRcdFx0YnJlYWs7XG4gNDYwOlx0XHRcdGNhc2UgSVBWNl9GUkVFQklORDpcbiA0NjE6XHRcdFx0XHRpbmV0X2Fzc2lnbl9iaXQoRlJFRUJJTkQsIHNrLFxuIDQ2MjpcdFx0XHRcdFx0XHRpbmV0X3Rlc3RfYml0KEZSRUVCSU5ELCBzc2spKTtcbiA0NjM6XHRcdFx0XHRicmVhaztcbiA0NjQ6XHRcdFx0fVxuIDQ2NTpcdFxuIDQ2NjpcdFx0XHRyZWxlYXNlX3NvY2soc2spO1xuIDQ2NzpcdFx0XHRicmVhaztcbiA0Njg6XHRcdGNhc2UgSVBWNl9UQ0xBU1M6XG4gNDY5Olx0XHRcdHJldHVybiBtcHRjcF9zZXRzb2Nrb3B0X3Y2X3NldF90Y2xhc3MobXNrLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDA5OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcxNTYKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIE1QVENQdjYgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBTb21ldGhpbmcgZG9lc24mIzM5O3QgZmVlbCByaWdodC4gSSB3YXMgZXhwZWN0aW5nIGBtcHRjcF9zZXRzb2Nrb3B0X3Y2YCB0byBiZSBndWFyZGVkIGJ5IGFuIGAjaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilgIGNvbmRpdGlvbmFsLiBCdXQgaXQmIzM5O3Mgbm90LiBUaGF0JiMzOTtzIHN0cmFuZ2UuIFRoaXMgY291bGQgbGVhZCB0byB1bmRlZmluZWQgYmVoYXZpb3VyIGlmIElQdjYgaXMgbm90IGVuYWJsZWQuCgpMZXQgbWUganVzdCBxdWlja2x5IHZlcmlmeSBzb21ldGhpbmcuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZSBgbmV0L21wdGNwL3NvY2tvcHQuY2AgZmlsZSBhbmQgc2VlIHdoYXQgdGhlIGJ1aWxkIGRpcmVjdGl2ZXMgbG9vayBsaWtlIHRoZXJlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBJUHY2IGNvbmZpZ3VyYXRpb24gaXMgYXBwbGllZCB0byB0aGUgc29ja2V0IG9wdGlvbnMgZmlsZS4gVGhlcmUgaXMgYSBjaGFuY2UgdGhhdCBpdCBpcyBzb21laG93IGJlaW5nIGluY2x1ZGVkLCBldmVuIHdoZW4gaXQgc2hvdWxkbiYjMzk7dCBiZS4gVGhpcyBuZWVkcyB0byBiZSB0aG9yb3VnaGx5IGludmVzdGlnYXRlZCBhbmQgcG90ZW50aWFsbHkgY29ycmVjdGVkLiBJIG5lZWQgdG8gaGF2ZSBhIGxvb2sgYXQgdGhlIGZpbGUmIzM5O3MgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMgdG8gY29uZmlybSB0aGF0IGl0JiMzOTtzIGJlaGF2aW5nIGFzIGV4cGVjdGVkIHdpdGggcmVzcGVjdCB0byB0aGUgSVB2NiBjb25maWd1cmF0aW9uIG9wdGlvbi4gVGhpcyBjb3VsZCBiZSBhIHNpZ25pZmljYW50IGJ1ZyBpZiBpdCYjMzk7cyBub3QgaGFuZGxlZCBjb3JyZWN0bHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDA5OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19NUFRDUF9JUFY2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L21wdGNwLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbXB0Y3AvY3RybC5jPTU4Nz12b2lkIF9faW5pdCBtcHRjcF9pbml0KHZvaWQpXG4tLVxubmV0L21wdGNwL2N0cmwuYy01OTUtXG5uZXQvbXB0Y3AvY3RybC5jOjU5NjojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcbm5ldC9tcHRjcC9jdHJsLmMtNTk3LWludCBfX2luaXQgbXB0Y3B2Nl9pbml0KHZvaWQpXG4tLVxubmV0L21wdGNwL29wdGlvbnMuYz0yMz1zdGF0aWMgdm9pZCBtcHRjcF9wYXJzZV9vcHRpb24oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTI0MS1cdFx0XHRcdG1wX29wdC1cdTAwM2VhZGRyLmZhbWlseSA9IEFGX0lORVQ7XG5uZXQvbXB0Y3Avb3B0aW9ucy5jOjI0MjojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcbm5ldC9tcHRjcC9vcHRpb25zLmMtMjQzLVx0XHRcdGVsc2UgaWYgKG9wc2l6ZSA9PSBUQ1BPTEVOX01QVENQX0FERF9BRERSNiB8fFxuLS1cbm5ldC9tcHRjcC9vcHRpb25zLmMtMjUyLVx0XHRcdFx0bXBfb3B0LVx1MDAzZWFkZHIuZmFtaWx5ID0gQUZfSU5FVDtcbm5ldC9tcHRjcC9vcHRpb25zLmM6MjUzOiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxubmV0L21wdGNwL29wdGlvbnMuYy0yNTQtXHRcdFx0ZWxzZSBpZiAob3BzaXplID09IFRDUE9MRU5fTVBUQ1BfQUREX0FERFI2X0JBU0UgfHxcbi0tXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTI3NC1cdFx0fVxubmV0L21wdGNwL29wdGlvbnMuYzoyNzU6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTI3Ni1cdFx0ZWxzZSB7XG4tLVxubmV0L21wdGNwL29wdGlvbnMuYz02MzI9c3RhdGljIHU2NCBhZGRfYWRkcl9nZW5lcmF0ZV9obWFjKHU2NCBrZXkxLCB1NjQga2V5Mixcbi0tXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTY0NC1cdH1cbm5ldC9tcHRjcC9vcHRpb25zLmM6NjQ1OiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxubmV0L21wdGNwL29wdGlvbnMuYy02NDYtXHRlbHNlIGlmIChhZGRyLVx1MDAzZWZhbWlseSA9PSBBRl9JTkVUNikge1xuLS1cbm5ldC9tcHRjcC9vcHRpb25zLmM9MTM4ND12b2lkIG1wdGNwX3dyaXRlX29wdGlvbnMoc3RydWN0IHRjcGhkciAqdGgsIF9fYmUzMiAqcHRyLCBzdHJ1Y3QgdGNwX3NvY2sgKnRwLFxuLS1cbm5ldC9tcHRjcC9vcHRpb25zLmMtMTU2Ny1cbm5ldC9tcHRjcC9vcHRpb25zLmM6MTU2ODojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcbm5ldC9tcHRjcC9vcHRpb25zLmMtMTU2OS1cdFx0aWYgKG9wdHMtXHUwMDNlYWRkci5mYW1pbHkgPT0gQUZfSU5FVDYpXG4tLVxubmV0L21wdGNwL29wdGlvbnMuYy0xNTg2LVx0XHR9XG5uZXQvbXB0Y3Avb3B0aW9ucy5jOjE1ODc6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTE1ODgtXHRcdGVsc2UgaWYgKG9wdHMtXHUwMDNlYWRkci5mYW1pbHkgPT0gQUZfSU5FVDYpIHtcbi0tXG5uZXQvbXB0Y3AvcG0uYz0zMz1ib29sIG1wdGNwX3BtX2FkZHJfZmFtaWxpZXNfbWF0Y2goY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9tcHRjcC9wbS5jLTM4LVxubmV0L21wdGNwL3BtLmM6Mzk6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXG5uZXQvbXB0Y3AvcG0uYy00MC1cdGJvb2wgbG9jX2lzX3Y0ID0gbG9jLVx1MDAzZWZhbWlseSA9PSBBRl9JTkVUIHx8IGlwdjZfYWRkcl92NG1hcHBlZChcdTAwMjZsb2MtXHUwMDNlYWRkcjYpO1xuLS1cbm5ldC9tcHRjcC9wbS5jPTU1PWJvb2wgbXB0Y3BfYWRkcmVzc2VzX2VxdWFsKGNvbnN0IHN0cnVjdCBtcHRjcF9hZGRyX2luZm8gKmEsXG4tLVxubmV0L21wdGNwL3BtLmMtNjItXHRcdFx0YWRkcl9lcXVhbHMgPSBhLVx1MDAzZWFkZHIuc19hZGRyID09IGItXHUwMDNlYWRkci5zX2FkZHI7XG5uZXQvbXB0Y3AvcG0uYzo2MzojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcbm5ldC9tcHRjcC9wbS5jLTY0LVx0XHRlbHNlXG4tLVxubmV0L21wdGNwL3BtLmM9ODM9dm9pZCBtcHRjcF9sb2NhbF9hZGRyZXNzKGNvbnN0IHN0cnVjdCBzb2NrX2NvbW1vbiAqc2tjLFxuLS1cbm5ldC9tcHRjcC9wbS5jLTg5LVx0XHRhZGRyLVx1MDAzZWFkZHIuc19hZGRyID0gc2tjLVx1MDAzZXNrY19yY3Zfc2FkZHI7XG5uZXQvbXB0Y3AvcG0uYzo5MDojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcbm5ldC9tcHRjcC9wbS5jLTkxLVx0ZWxzZSBpZiAoYWRkci1cdTAwM2VmYW1pbHkgPT0gQUZfSU5FVDYpXG4tLVxubmV0L21wdGNwL3BtLmM9OTY9dm9pZCBtcHRjcF9yZW1vdGVfYWRkcmVzcyhjb25zdCBzdHJ1Y3Qgc29ja19jb21tb24gKnNrYyxcbi0tXG5uZXQvbXB0Y3AvcG0uYy0xMDItXHRcdGFkZHItXHUwMDNlYWRkci5zX2FkZHIgPSBza2MtXHUwMDNlc2tjX2RhZGRyO1xubmV0L21wdGNwL3BtLmM6MTAzOiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxubmV0L21wdGNwL3BtLmMtMTA0LVx0ZWxzZSBpZiAoYWRkci1cdTAwM2VmYW1pbHkgPT0gQUZfSU5FVDYpXG4tLVxubmV0L21wdGNwL3BtX2tlcm5lbC5jPTYwNj1maWxsX2xvY2FsX2FkZHJlc3NfYW55KHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIHN0cnVjdCBtcHRjcF9hZGRyX2luZm8gKnJlbW90ZSxcbi0tXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmMtNjEyLVx0bG9jYWwtXHUwMDNlYWRkci5mYW1pbHkgPVxubmV0L21wdGNwL3BtX2tlcm5lbC5jOjYxMzojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcbm5ldC9tcHRjcC9wbV9rZXJuZWwuYy02MTQtXHRcdFx0cmVtb3RlLVx1MDAzZWZhbWlseSA9PSBBRl9JTkVUNiBcdTAwMjZcdTAwMjZcbi0tXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmM9ODUyPXN0YXRpYyBpbnQgbXB0Y3BfcG1fbmxfY3JlYXRlX2xpc3Rlbl9zb2NrZXQoc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9tcHRjcC9wbV9rZXJuZWwuYy04ODktXHRtcHRjcF9pbmZvMnNvY2thZGRyKFx1MDAyNmVudHJ5LVx1MDAzZWFkZHIsIFx1MDAyNmFkZHIsIGVudHJ5LVx1MDAzZWFkZHIuZmFtaWx5KTtcbm5ldC9tcHRjcC9wbV9rZXJuZWwuYzo4OTA6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmMtODkxLVx0aWYgKGVudHJ5LVx1MDAzZWFkZHIuZmFtaWx5ID09IEFGX0lORVQ2KVxuLS1cbm5ldC9tcHRjcC9wbV9rZXJuZWwuYy04OTUtXHRcdGVyciA9IGluZXRfYmluZF9zayhzc2ssIChzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqKVx1MDAyNmFkZHIsIGFkZHJsZW4pO1xubmV0L21wdGNwL3BtX2tlcm5lbC5jOjg5NjojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcbm5ldC9tcHRjcC9wbV9rZXJuZWwuYy04OTctXHRlbHNlIGlmIChzc2stXHUwMDNlc2tfZmFtaWx5ID09IEFGX0lORVQ2KVxuLS1cbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmM9MjI9c3RhdGljIGludCBtcHRjcF9wbV9mYW1pbHlfdG9fYWRkcihpbnQgZmFtaWx5KVxubmV0L21wdGNwL3BtX25ldGxpbmsuYy0yMy17XG5uZXQvbXB0Y3AvcG1fbmV0bGluay5jOjI0OiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxubmV0L21wdGNwL3BtX25ldGxpbmsuYy0yNS1cdGlmIChmYW1pbHkgPT0gQUZfSU5FVDYpXG4tLVxubmV0L21wdGNwL3BtX25ldGxpbmsuYz0zMT1zdGF0aWMgaW50IG1wdGNwX3BtX3BhcnNlX3BtX2FkZHJfYXR0cihzdHJ1Y3QgbmxhdHRyICp0YltdLFxuLS1cbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmMtNjMtXHRpZiAoYWRkci1cdTAwM2VmYW1pbHkgIT0gQUZfSU5FVFxubmV0L21wdGNwL3BtX25ldGxpbmsuYzo2NDojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmMtNjUtXHQgICAgXHUwMDI2XHUwMDI2IGFkZHItXHUwMDNlZmFtaWx5ICE9IEFGX0lORVQ2XG4tLVxubmV0L21wdGNwL3BtX25ldGxpbmsuYy03OC1cbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmM6Nzk6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXG5uZXQvbXB0Y3AvcG1fbmV0bGluay5jLTgwLVx0aWYgKGFkZHItXHUwMDNlZmFtaWx5ID09IEFGX0lORVQ2KVxuLS1cbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmM9MTMxPXN0YXRpYyBpbnQgbXB0Y3BfbmxfZmlsbF9hZGRyKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L21wdGNwL3BtX25ldGxpbmsuYy0xNTYtXHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xubmV0L21wdGNwL3BtX25ldGxpbmsuYzoxNTc6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXG5uZXQvbXB0Y3AvcG1fbmV0bGluay5jLTE1OC1cdGVsc2UgaWYgKGFkZHItXHUwMDNlZmFtaWx5ID09IEFGX0lORVQ2IFx1MDAyNlx1MDAyNlxuLS1cbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmM9Mjk4PXN0YXRpYyBpbnQgbXB0Y3BfZXZlbnRfYWRkX3N1YmZsb3coc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHNvY2sgKnNzaylcbi0tXG5uZXQvbXB0Y3AvcG1fbmV0bGluay5jLTMxMi1cdFx0YnJlYWs7XG5uZXQvbXB0Y3AvcG1fbmV0bGluay5jOjMxMzojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmMtMzE0LVx0Y2FzZSBBRl9JTkVUNjoge1xuLS1cbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmM9NDY1PXZvaWQgbXB0Y3BfZXZlbnRfYWRkcl9hbm5vdW5jZWQoY29uc3Qgc3RydWN0IHNvY2sgKnNzayxcbi0tXG5uZXQvbXB0Y3AvcG1fbmV0bGluay5jLTUwMi1cdFx0YnJlYWs7XG5uZXQvbXB0Y3AvcG1fbmV0bGluay5jOjUwMzojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmMtNTA0LVx0Y2FzZSBBRl9JTkVUNjpcbi0tXG5uZXQvbXB0Y3AvcG1fbmV0bGluay5jPTUyMj12b2lkIG1wdGNwX2V2ZW50X3BtX2xpc3RlbmVyKGNvbnN0IHN0cnVjdCBzb2NrICpzc2ssXG4tLVxubmV0L21wdGNwL3BtX25ldGxpbmsuYy01NTEtXHRcdGJyZWFrO1xubmV0L21wdGNwL3BtX25ldGxpbmsuYzo1NTI6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXG5uZXQvbXB0Y3AvcG1fbmV0bGluay5jLTU1My1cdGNhc2UgQUZfSU5FVDY6IHtcbi0tXG5uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmM9NDMyPXN0YXRpYyBzdHJ1Y3Qgc29jayAqbXB0Y3BfbmxfZmluZF9zc2soc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcbi0tXG5uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmMtNDU3LVx0XHRcdGJyZWFrO1xubmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jOjQ1ODojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcbm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYy00NTktXHRcdGNhc2UgQUZfSU5FVDY6IHtcbi0tXG5uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmM9NDc4PWludCBtcHRjcF9wbV9ubF9zdWJmbG93X2Rlc3Ryb3lfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYy01MDYtXG5uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmM6NTA3OiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxubmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jLTUwOC1cdGlmIChhZGRyX2wuYWRkci5mYW1pbHkgPT0gQUZfSU5FVCBcdTAwMjZcdTAwMjYgaXB2Nl9hZGRyX3Y0bWFwcGVkKFx1MDAyNmFkZHJfci5hZGRyNikpIHtcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yMC0jaW5jbHVkZSBcdTAwM2NuZXQvdGNwX3N0YXRlcy5oXHUwMDNlXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoyMTojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTIyLSNpbmNsdWRlIFx1MDAzY25ldC90cmFuc3BfdjYuaFx1MDAzZVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jPTMxPXN0YXRpYyB1bnNpZ25lZCBpbnQgbXB0Y3BfaW5xX2hpbnQoY29uc3Qgc3RydWN0IHNvY2sgKnNrKTtcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zNS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jOjM2OiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxubmV0L21wdGNwL3Byb3RvY29sLmMtMzctc3RydWN0IG1wdGNwNl9zb2NrIHtcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz02ND1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyAqbXB0Y3BfZmFsbGJhY2tfdGNwX29wcyhjb25zdCBzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtNjctXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzo2ODojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTY5LVx0aWYgKGZhbWlseSA9PSBBRl9JTkVUNilcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0zMzk3PXN0YXRpYyB2b2lkIG1wdGNwX2NvcHlfaW5hZGRycyhzdHJ1Y3Qgc29jayAqbXNrLCBjb25zdCBzdHJ1Y3Qgc29jayAqc3NrKVxubmV0L21wdGNwL3Byb3RvY29sLmMtMzM5OC17XG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzozMzk5OiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxubmV0L21wdGNwL3Byb3RvY29sLmMtMzQwMC1cdGNvbnN0IHN0cnVjdCBpcHY2X3BpbmZvICpzc2s2ID0gaW5ldDZfc2soc3NrKTtcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0zNDQyPXN0YXRpYyBpbnQgbXB0Y3BfZGlzY29ubmVjdChzdHJ1Y3Qgc29jayAqc2ssIGludCBmbGFncylcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zNTA0LVxubmV0L21wdGNwL3Byb3RvY29sLmM6MzUwNTojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTM1MDYtc3RhdGljIHN0cnVjdCBpcHY2X3BpbmZvICptcHRjcF9pbmV0Nl9zayhjb25zdCBzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmM9MzU1Mz1zdHJ1Y3Qgc29jayAqbXB0Y3Bfc2tfY2xvbmVfaW5pdChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMzU2NS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jOjM1NjY6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zNTY3LVx0aWYgKG5zay1cdTAwM2Vza19mYW1pbHkgPT0gQUZfSU5FVDYpXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtMzU3Mi1cbm5ldC9tcHRjcC9wcm90b2NvbC5jOjM1NzM6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zNTc0LVx0aWYgKG5zay1cdTAwM2Vza19mYW1pbHkgPT0gQUZfSU5FVDYpXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmM9NDA5OT1zdGF0aWMgaW50IG1wdGNwX2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKnVhZGRyLCBpbnQgYWRkcl9sZW4pXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtNDExMy1cdFx0ZXJyID0gaW5ldF9iaW5kX3NrKHNzaywgdWFkZHIsIGFkZHJfbGVuKTtcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjQxMTQ6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy00MTE1LVx0ZWxzZSBpZiAoc2stXHUwMDNlc2tfZmFtaWx5ID09IEFGX0lORVQ2KVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jPTQ2MzU9dm9pZCBfX2luaXQgbXB0Y3BfcHJvdG9faW5pdCh2b2lkKVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTQ2NzQtXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzo0Njc1OiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxubmV0L21wdGNwL3Byb3RvY29sLmMtNDY3Ni1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBtcHRjcF92Nl9zdHJlYW1fb3BzID0ge1xuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5oPTkxMj12b2lkIF9faW5pdCBtcHRjcF9wcm90b19pbml0KHZvaWQpO1xubmV0L21wdGNwL3Byb3RvY29sLmg6OTEzOiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxubmV0L21wdGNwL3Byb3RvY29sLmgtOTE0LWludCBfX2luaXQgbXB0Y3BfcHJvdG9fdjZfaW5pdCh2b2lkKTtcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE3LSNpbmNsdWRlIFx1MDAzY25ldC9wcm90b2NvbC5oXHUwMDNlXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjE4OiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxubmV0L21wdGNwL3N1YmZsb3cuYy0xOS0jaW5jbHVkZSBcdTAwM2NuZXQvaXA2X3JvdXRlLmhcdTAwM2Vcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTM1OD1zdGF0aWMgaW50IHN1YmZsb3dfdjRfc2VuZF9zeW5hY2soY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsXG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYy0zNzAtXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjM3MTojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcbm5ldC9tcHRjcC9zdWJmbG93LmMtMzcyLXN0YXRpYyBpbnQgc3ViZmxvd192Nl9zZW5kX3N5bmFjayhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBkc3RfZW50cnkgKmRzdCxcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTY0OT1zdGF0aWMgaW50IHN1YmZsb3dfcmVidWlsZF9oZWFkZXIoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmMtNjU4LVxubmV0L21wdGNwL3N1YmZsb3cuYzo2NTk6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTY2MC1zdGF0aWMgaW50IHN1YmZsb3dfdjZfcmVidWlsZF9oZWFkZXIoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmM9NjkyPXN0YXRpYyB2b2lkIHN1YmZsb3dfdjRfcmVxX2Rlc3RydWN0b3Ioc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmMtNjk3LVxubmV0L21wdGNwL3N1YmZsb3cuYzo2OTg6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTY5OS1zdGF0aWMgc3RydWN0IHJlcXVlc3Rfc29ja19vcHMgbXB0Y3Bfc3ViZmxvd192Nl9yZXF1ZXN0X3NvY2tfb3BzIF9fcm9fYWZ0ZXJfaW5pdDtcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTczNz1zdHJ1Y3QgcmVxdWVzdF9zb2NrICptcHRjcF9zdWJmbG93X3JlcXNrX2FsbG9jKGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2tfb3BzICpvcHMsXG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYy03NDItXHRcdG9wcyA9IFx1MDAyNm1wdGNwX3N1YmZsb3dfdjRfcmVxdWVzdF9zb2NrX29wcztcbm5ldC9tcHRjcC9zdWJmbG93LmM6NzQzOiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxubmV0L21wdGNwL3N1YmZsb3cuYy03NDQtXHRlbHNlIGlmIChvcHMtXHUwMDNlZmFtaWx5ID09IEFGX0lORVQ2KVxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmM9MTU1Mz1zdWJmbG93X2RlZmF1bHRfYWZfb3BzKHN0cnVjdCBzb2NrICpzaylcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTU1NC17XG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjE1NTU6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE1NTYtXHRpZiAoc2stXHUwMDNlc2tfZmFtaWx5ID09IEFGX0lORVQ2KVxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmMtMTU2MS1cbm5ldC9tcHRjcC9zdWJmbG93LmM6MTU2MjojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTU2My12b2lkIG1wdGNwdjZfaGFuZGxlX21hcHBlZChzdHJ1Y3Qgc29jayAqc2ssIGJvb2wgbWFwcGVkKVxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmM9MTU4Mj12b2lkIG1wdGNwX2luZm8yc29ja2FkZHIoY29uc3Qgc3RydWN0IG1wdGNwX2FkZHJfaW5mbyAqaW5mbyxcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE1OTItXHRcdFx0aW5fYWRkci1cdTAwM2VzaW5fYWRkciA9IGluZm8tXHUwMDNlYWRkcjtcbm5ldC9tcHRjcC9zdWJmbG93LmM6MTU5MzojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTU5NC1cdFx0ZWxzZSBpZiAoaXB2Nl9hZGRyX3Y0bWFwcGVkKFx1MDAyNmluZm8tXHUwMDNlYWRkcjYpKVxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmMtMTU5OC1cdH1cbm5ldC9tcHRjcC9zdWJmbG93LmM6MTU5OTojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTYwMC1cdGVsc2UgaWYgKGFkZHItXHUwMDNlc3NfZmFtaWx5ID09IEFGX0lORVQ2KSB7XG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYz0xNjEzPWludCBfX21wdGNwX3N1YmZsb3dfY29ubmVjdChzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBtcHRjcF9wbV9sb2NhbCAqbG9jYWwsXG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYy0xNjQ4LVx0XHRcdGxvY2FsX2lkID0gLTE7XG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjE2NDk6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE2NTAtXHR9IGVsc2UgaWYgKHNrLVx1MDAzZXNrX2ZhbWlseSA9PSBBRl9JTkVUNikge1xuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmMtMTY2NS1cdGFkZHJsZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTtcbm5ldC9tcHRjcC9zdWJmbG93LmM6MTY2NjojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTY2Ny1cdGlmIChhZGRyLnNzX2ZhbWlseSA9PSBBRl9JTkVUNilcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTE3NTY9c3RhdGljIHZvaWQgbXB0Y3Bfc3ViZmxvd19vcHNfb3ZlcnJpZGUoc3RydWN0IHNvY2sgKnNzaylcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTc1Ny17XG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjE3NTg6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE3NTktXHRpZiAoc3NrLVx1MDAzZXNrX3Byb3QgPT0gXHUwMDI2dGNwdjZfcHJvdClcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTE3NjY9c3RhdGljIHZvaWQgbXB0Y3Bfc3ViZmxvd19vcHNfdW5kb19vdmVycmlkZShzdHJ1Y3Qgc29jayAqc3NrKVxubmV0L21wdGNwL3N1YmZsb3cuYy0xNzY3LXtcbm5ldC9tcHRjcC9zdWJmbG93LmM6MTc2ODojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTc2OS1cdGlmIChzc2stXHUwMDNlc2tfcHJvdCA9PSBcdTAwMjZ0Y3B2Nl9wcm90X292ZXJyaWRlKVxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmM9MjE0MT12b2lkIF9faW5pdCBtcHRjcF9zdWJmbG93X2luaXQodm9pZClcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTIxNzMtXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjIxNzQ6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTIxNzUtdm9pZCBfX2luaXQgbXB0Y3Bfc3ViZmxvd192Nl9pbml0KHZvaWQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDA5OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyODAwCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gYW4gZXhwZXJ0IGluIG5ldHdvcmsgcHJvZ3JhbW1pbmcgYW5kIE1QVENQLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKkRpZ2dpbmcgaW50byB0aGUgTVBUQ1AgU29ja2V0IE9wdGlvbnMqKgoKUmlnaHQsIHNvIGBtcHRjcF9zZXRzb2Nrb3B0X3Y2YCBpcyBkZWZpbml0ZWx5IHRoZSB0YXJnZXQgd2hlbiB3ZSYjMzk7cmUgc2V0dGluZyBJUHY2LXNwZWNpZmljIHNvY2tldCBvcHRpb25zIHVzaW5nIE1QVENQLiBUaGF0IG1ha2VzIHNlbnNlLCBsb2dpY2FsbHkuIFdlJiMzOTtyZSB1c2luZyBgU09MX0lQVjZgIGFzIHRoZSBsZXZlbC4gTm93LCBJIG5lZWQgdG8gc2VlICpob3cqIHRoaXMgaW50ZXJhY3Rpb24gd29ya3Mgd2l0aGluIHRoZSBiaWdnZXIgcGljdHVyZS4gTGV0IG1lIHB1bGwgdXAgYG5ldC9tcHRjcC9zb2Nrb3B0LmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93LiBJJiMzOTtsbCBmb2N1cyBvbiBgbXB0Y3Bfc2V0c29ja29wdGAgZmlyc3QsIG9mIGNvdXJzZSwgYmVjYXVzZSB0aGF0JiMzOTtzIHRoZSBlbnRyeSBwb2ludC4gSSB3YW50IHRvIHNlZSBob3cgaXQgaGFuZGxlcyB0aGUgZGlmZmVyZW50IGxldmVscyBhbmQgd2hhdCBhY3Rpb25zIGl0IHRha2VzIGRlcGVuZGluZyBvbiB0aGUgbGV2ZWwgc3BlY2lmaWVkLiBUaGUgSVB2NiBjYXNlIGlzIHdoYXQgaW50ZXJlc3RzIG1lLCBidXQgSSYjMzk7bGwgbWFrZSBzdXJlIHRvIG5vdGUgdGhlIG90aGVyIG9wdGlvbnMgYWxvbmcgdGhlIHdheS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDk6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbXB0Y3Avc29ja29wdC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTM4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA5Mzg6XHRpbnQgbXB0Y3Bfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG4gOTM5Olx0XHRcdCAgICAgc29ja3B0cl90IG9wdHZhbCwgdW5zaWduZWQgaW50IG9wdGxlbilcbiA5NDA6XHR7XG4gOTQxOlx0XHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrID0gbXB0Y3Bfc2soc2spO1xuIDk0MjpcdFx0c3RydWN0IHNvY2sgKnNzaztcbiA5NDM6XHRcbiA5NDQ6XHRcdHByX2RlYnVnKFwmIzM0O21zaz0lcFxcblwmIzM0OywgbXNrKTtcbiA5NDU6XHRcbiA5NDY6XHRcdGlmIChsZXZlbCA9PSBTT0xfU09DS0VUKVxuIDk0NzpcdFx0XHRyZXR1cm4gbXB0Y3Bfc2V0c29ja29wdF9zb2xfc29ja2V0KG1zaywgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pO1xuIDk0ODpcdFxuIDk0OTpcdFx0aWYgKCFtcHRjcF9zdXBwb3J0ZWRfc29ja29wdChsZXZlbCwgb3B0bmFtZSkpXG4gOTUwOlx0XHRcdHJldHVybiAtRU5PUFJPVE9PUFQ7XG4gOTUxOlx0XG4gOTUyOlx0XHQvKiBAQCB0aGUgbWVhbmluZyBvZiBzZXRzb2Nrb3B0KCkgd2hlbiB0aGUgc29ja2V0IGlzIGNvbm5lY3RlZCBhbmRcbiA5NTM6XHRcdCAqIHRoZXJlIGFyZSBtdWx0aXBsZSBzdWJmbG93cyBpcyBub3QgeWV0IGRlZmluZWQuIEl0IGlzIHVwIHRvIHRoZVxuIDk1NDpcdFx0ICogTVBUQ1AtbGV2ZWwgc29ja2V0IHRvIGNvbmZpZ3VyZSB0aGUgc3ViZmxvd3MgdW50aWwgdGhlIHN1YmZsb3dcbiA5NTU6XHRcdCAqIGlzIGluIFRDUCBmYWxsYmFjaywgd2hlbiBUQ1Agc29ja2V0IG9wdGlvbnMgYXJlIHBhc3NlZCB0aHJvdWdoXG4gOTU2Olx0XHQgKiB0byB0aGUgb25lIHJlbWFpbmluZyBzdWJmbG93LlxuIDk1NzpcdFx0ICovXG4gOTU4Olx0XHRsb2NrX3NvY2soc2spO1xuIDk1OTpcdFx0c3NrID0gX19tcHRjcF90Y3BfZmFsbGJhY2sobXNrKTtcbiA5NjA6XHRcdHJlbGVhc2Vfc29jayhzayk7XG4gOTYxOlx0XHRpZiAoc3NrKVxuIDk2MjpcdFx0XHRyZXR1cm4gdGNwX3NldHNvY2tvcHQoc3NrLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pO1xuIDk2MzpcdFxuIDk2NDpcdFx0aWYgKGxldmVsID09IFNPTF9JUClcbiA5NjU6XHRcdFx0cmV0dXJuIG1wdGNwX3NldHNvY2tvcHRfdjQobXNrLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7XG4gOTY2Olx0XG4gOTY3Olx0XHRpZiAobGV2ZWwgPT0gU09MX0lQVjYpXG4gOTY4Olx0XHRcdHJldHVybiBtcHRjcF9zZXRzb2Nrb3B0X3Y2KG1zaywgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pO1xuIDk2OTpcdFxuIDk3MDpcdFx0aWYgKGxldmVsID09IFNPTF9UQ1ApXG4gOTcxOlx0XHRcdHJldHVybiBtcHRjcF9zZXRzb2Nrb3B0X3NvbF90Y3AobXNrLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7XG4gOTcyOlx0XG4gOTczOlx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gOTc0Olx0fVxuIDk3NTpcdFxuIDk3NjpcdHN0YXRpYyBpbnQgbXB0Y3BfZ2V0c29ja29wdF9maXJzdF9zZl9vbmx5KHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG4gOTc3Olx0XHRcdFx0XHRcdCAgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IF9fdXNlciAqb3B0bGVuKVxuIDk3ODpcdHtcbiA5Nzk6XHRcdHN0cnVjdCBzb2NrICpzayA9IChzdHJ1Y3Qgc29jayAqKW1zaztcbiA5ODA6XHRcdHN0cnVjdCBzb2NrICpzc2s7XG4gOTgxOlx0XHRpbnQgcmV0O1xuIDk4MjpcdFxuIDk4MzpcdFx0bG9ja19zb2NrKHNrKTtcbiA5ODQ6XHRcdHNzayA9IG1zay1cdTAwM2VmaXJzdDtcbiA5ODU6XHRcdGlmIChzc2spXG4gOTg2Olx0XHRcdGdvdG8gZ2V0O1xuIDk4NzpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMyAwOTo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzkxMQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDE0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBNUFRDUCBJUFY2IFRDTEFTUyBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgY29kZSwgYG1wdGNwX3NldHNvY2tvcHRfdjZgIGlzIGJlaW5nIGNvbXBpbGVkIGluIHJlZ2FyZGxlc3Mgb2YgYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb24g4oCTIHRoYXQmIzM5O3Mgc29tZXRoaW5nIHRvIGtlZXAgaW4gbWluZC4gSSBzZWUgaXQmIzM5O3MgdHJpZ2dlcmVkIHdoZW4gdGhlIGBsZXZlbGAgYXJndW1lbnQgaXMgYFNPTF9JUFY2YC4gVGhlIHBhdGNoIGludHJvZHVjZXMgYElQVjZfVENMQVNTYCBmdW5jdGlvbmFsaXR5IHdpdGhpbiBgbXB0Y3Bfc2V0c29ja29wdF92NmAgYW5kLCBieSBleHRlbnNpb24sIGBtcHRjcF9nZXRzb2Nrb3B0X3Y2YC4gVGhlIGtleSB0aGluZyBoZXJlIGlzIGhvdyBgbXB0Y3Bfc2V0c29ja29wdF92Nl9zZXRfdGNsYXNzYCB3b3JrczogaXQgaXRlcmF0ZXMgdGhyb3VnaCBhbGwgdGhlIHN1YmZsb3dzIG9mIGFuIE1QVENQIGNvbm5lY3Rpb24gYW5kIHNldHMgdGhlIFRyYWZmaWMgQ2xhc3MgKGB0Y2xhc3NgKSBvbiBlYWNoIGBpbmV0Nl9za2AgdG8gdGhlIHByb3ZpZGVkIGB2YWxgLiBGcm9tIGEgZnVuY3Rpb25hbCBwZXJzcGVjdGl2ZSwgdGhpcyBpcyBhIGNsZWFyIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gVGhlIGZhY3QgdGhhdCBpdCBpbnRlcmFjdHMgd2l0aCBhbGwgc3ViZmxvd3MgaXMgZXNwZWNpYWxseSBpbnRlcmVzdGluZywgYW5kIGxpa2VseSB3aGVyZSB2dWxuZXJhYmlsaXRpZXMgY291bGQgYmUgZXhwb3NlZC4KCk5vdywgYmVmb3JlIEkgZGlnIGluIGRlZXBlciwgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGBJUFY2X1RDTEFTU2AgaXMgZXZlbiAqcGVybWl0dGVkKiB3aXRoaW4gdGhlIE1QVENQIGNvbnRleHQuIExldCYjMzk7cyBxdWlja2x5IGNoZWNrIHRoZSBgbXB0Y3Bfc3VwcG9ydGVkX3NvY2tvcHRgIGZ1bmN0aW9uIHRvIGNvbmZpcm0gdGhhdCB0aGlzIG5ldyBvcHRpb24gaXMgaGFuZGxlZCBjb3JyZWN0bHkuIElmIHRoZSBzdXBwb3J0IGlzbiYjMzk7dCB0aGVyZSwgd2UmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDA5OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21wdGNwX3N1cHBvcnRlZF9zb2Nrb3B0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L21wdGNwL3NvY2tvcHQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbXB0Y3Avc29ja29wdC5jPTQyNj1zdGF0aWMgaW50IG1wdGNwX3NldHNvY2tvcHRfdjYoc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgaW50IG9wdG5hbWUsXG4tLVxubmV0L21wdGNwL3NvY2tvcHQuYy00NzQtXG5uZXQvbXB0Y3Avc29ja29wdC5jOjQ3NTpzdGF0aWMgYm9vbCBtcHRjcF9zdXBwb3J0ZWRfc29ja29wdChpbnQgbGV2ZWwsIGludCBvcHRuYW1lKVxubmV0L21wdGNwL3NvY2tvcHQuYy00NzYte1xuLS1cbm5ldC9tcHRjcC9zb2Nrb3B0LmM9OTM4PWludCBtcHRjcF9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbi0tXG5uZXQvbXB0Y3Avc29ja29wdC5jLTk0OC1cbm5ldC9tcHRjcC9zb2Nrb3B0LmM6OTQ5Olx0aWYgKCFtcHRjcF9zdXBwb3J0ZWRfc29ja29wdChsZXZlbCwgb3B0bmFtZSkpXG5uZXQvbXB0Y3Avc29ja29wdC5jLTk1MC1cdFx0cmV0dXJuIC1FTk9QUk9UT09QVDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDk6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ2MjEKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkmIzM5O3JlIG15IG93bjoKCioqQW5hbHl6aW5nIHRoZSBtcHRjcF9zdXBwb3J0ZWRfc29ja29wdCBDb2RlKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IGludG8gaXQuIEkmIzM5O20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGBtcHRjcF9zdXBwb3J0ZWRfc29ja29wdGAgY29kZS4gSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgdGhlIHNvY2tldCBvcHRpb25zIGZvciBNdWx0aXBhdGggVENQLiBUaGlzIG1lYW5zIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIG1lY2hhbmlzbXMgYnkgd2hpY2ggYW4gYXBwbGljYXRpb24gY2FuIHRlbGwgdGhlIGtlcm5lbCwgJiMzNDtIZXksIEkgd2FudCB0byB1c2UgTVBUQ1AmIzM0OyBhbmQgcG90ZW50aWFsbHksIHdoYXQgc3BlY2lmaWMgTVBUQ1AgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZCBhbmQgZW5hYmxlZCBmb3IgdGhpcyBzb2NrZXQuIEkmIzM5O2xsIGJlIHNlYXJjaGluZyBmb3IgaG93IHRoZSBrZXJuZWwgZXhwb3NlcyB0aGUgTVBUQ1AgY2FwYWJpbGl0eSB0byB1c2VyIHNwYWNlLiBJdCBzaG91bGQgaW5jbHVkZSB0aGUgc3lzdGVtIGNhbGxzLCBzdHJ1Y3RzLCBhbmQgbGlrZWx5IGZsYWdzIG9yIHZhbHVlcyByZWxhdGVkIHRvIHNvY2tldCBvcHRpb25zIChsaWtlIGBzZXRzb2Nrb3B0YCBhbmQgYGdldHNvY2tvcHRgKSB0aGF0IGFyZSBzcGVjaWZpY2FsbHkgcmVsZXZhbnQgdG8gTVBUQ1AgY29uZmlndXJhdGlvbnMuIEkmIzM5O20gYW50aWNpcGF0aW5nIHRoZXJlIHdpbGwgYmUgc29tZSBjaGVja3MgYW5kIGJhbGFuY2VzIGluIHRoZXJlOiBwZXJoYXBzIHZhbGlkYXRpb24gdG8gZW5zdXJlIHRoZSBrZXJuZWwgaXMgY29tcGlsZWQgd2l0aCBNUFRDUCBzdXBwb3J0LCBhbmQgbWF5YmUgc29tZSBydW50aW1lIGNoZWNrcyBkZXBlbmRpbmcgb24gdGhlIGtlcm5lbCB2ZXJzaW9uIG9yIG90aGVyIGNvbmZpZ3VyYXRpb25zLiBJJiMzOTtsbCBiZSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiB1bmRlcnN0YW5kaW5nIGhvdyB0aGlzIGBzb2Nrb3B0YCBpbnRlcmFjdHMgd2l0aCB0aGUgdW5kZXJseWluZyBUQ1Agc3RhY2ssIGFuZCBob3cgaXQgaGFuZGxlcyBkaWZmZXJlbnQgTVBUQ1Atc3BlY2lmaWMgYmVoYXZpb3JzIGFuZCBzZXR0aW5ncy4gSeKAmWxsIGFsc28gYmUgbG9va2luZyBmb3IgYW55IGluZGljYXRpb25zIGFib3V0IHBvdGVudGlhbCBzZWN1cml0eSBjb25zaWRlcmF0aW9ucyBpbiBleHBvc2luZyB0aGlzIGZ1bmN0aW9uYWxpdHkuIFVsdGltYXRlbHksIEkmIzM5O20gaG9waW5nIHRvIGdldCBhIHNvbGlkIGdyYXNwIG9mIGhvdyB0aGlzIGtlcm5lbCBjb2RlIGVuYWJsZXMgYW5kIGNvbnRyb2xzIE1QVENQIHVzYWdlIGF0IHRoZSBzb2NrZXQgbGV2ZWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDA5OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L21wdGNwL3NvY2tvcHQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ3NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDc1Olx0c3RhdGljIGJvb2wgbXB0Y3Bfc3VwcG9ydGVkX3NvY2tvcHQoaW50IGxldmVsLCBpbnQgb3B0bmFtZSlcbiA0NzY6XHR7XG4gNDc3Olx0XHRpZiAobGV2ZWwgPT0gU09MX0lQKSB7XG4gNDc4Olx0XHRcdHN3aXRjaCAob3B0bmFtZSkge1xuIDQ3OTpcdFx0XHQvKiBzaG91bGQgd29yayBmaW5lICovXG4gNDgwOlx0XHRcdGNhc2UgSVBfRlJFRUJJTkQ6XG4gNDgxOlx0XHRcdGNhc2UgSVBfVFJBTlNQQVJFTlQ6XG4gNDgyOlx0XHRcdGNhc2UgSVBfQklORF9BRERSRVNTX05PX1BPUlQ6XG4gNDgzOlx0XHRcdGNhc2UgSVBfTE9DQUxfUE9SVF9SQU5HRTpcbiA0ODQ6XHRcbiA0ODU6XHRcdFx0LyogdGhlIGZvbGxvd2luZyBhcmUgY29udHJvbCBjbXNnIHJlbGF0ZWQgKi9cbiA0ODY6XHRcdFx0Y2FzZSBJUF9QS1RJTkZPOlxuIDQ4NzpcdFx0XHRjYXNlIElQX1JFQ1ZUVEw6XG4gNDg4Olx0XHRcdGNhc2UgSVBfUkVDVlRPUzpcbiA0ODk6XHRcdFx0Y2FzZSBJUF9SRUNWT1BUUzpcbiA0OTA6XHRcdFx0Y2FzZSBJUF9SRVRPUFRTOlxuIDQ5MTpcdFx0XHRjYXNlIElQX1BBU1NTRUM6XG4gNDkyOlx0XHRcdGNhc2UgSVBfUkVDVk9SSUdEU1RBRERSOlxuIDQ5MzpcdFx0XHRjYXNlIElQX0NIRUNLU1VNOlxuIDQ5NDpcdFx0XHRjYXNlIElQX1JFQ1ZGUkFHU0laRTpcbiA0OTU6XHRcbiA0OTY6XHRcdFx0LyogY29tbW9uIHN0dWZmIHRoYXQgbmVlZCBzb21lIGxvdmUgKi9cbiA0OTc6XHRcdFx0Y2FzZSBJUF9UT1M6XG4gNDk4Olx0XHRcdGNhc2UgSVBfVFRMOlxuIDQ5OTpcdFx0XHRjYXNlIElQX01UVV9ESVNDT1ZFUjpcbiA1MDA6XHRcdFx0Y2FzZSBJUF9SRUNWRVJSOlxuIDUwMTpcdFxuIDUwMjpcdFx0XHQvKiBwb3NzaWJseSBsZXNzIGNvbW1vbiBtYXkgZGVzZXJ2ZSBzb21lIGxvdmUgKi9cbiA1MDM6XHRcdFx0Y2FzZSBJUF9NSU5UVEw6XG4gNTA0Olx0XG4gNTA1Olx0XHRcdC8qIHRoZSBmb2xsb3dpbmcgaXMgYXBwYXJlbnRseSBhIG5vLW9wIGZvciBwbGFpbiBUQ1AgKi9cbiA1MDY6XHRcdFx0Y2FzZSBJUF9SRUNWRVJSX1JGQzQ4ODQ6XG4gNTA3Olx0XHRcdFx0cmV0dXJuIHRydWU7XG4gNTA4Olx0XHRcdH1cbiA1MDk6XHRcbiA1MTA6XHRcdFx0LyogSVBfT1BUSU9OUyBpcyBub3Qgc3VwcG9ydGVkLCBuZWVkcyBzdWJmbG93IGNhcmUgKi9cbiA1MTE6XHRcdFx0LyogSVBfSERSSU5DTCwgSVBfTk9ERUZSQUcgYXJlIG5vdCBzdXBwb3J0ZWQsIFJBVyBzcGVjaWZpYyAqL1xuIDUxMjpcdFx0XHQvKiBJUF9NVUxUSUNBU1RfVFRMLCBJUF9NVUxUSUNBU1RfTE9PUCwgSVBfVU5JQ0FTVF9JRixcbiA1MTM6XHRcdFx0ICogSVBfQUREX01FTUJFUlNISVAsIElQX0FERF9TT1VSQ0VfTUVNQkVSU0hJUCwgSVBfRFJPUF9NRU1CRVJTSElQLFxuIDUxNDpcdFx0XHQgKiBJUF9EUk9QX1NPVVJDRV9NRU1CRVJTSElQLCBJUF9CTE9DS19TT1VSQ0UsIElQX1VOQkxPQ0tfU09VUkNFLFxuIDUxNTpcdFx0XHQgKiBNQ0FTVF9KT0lOX0dST1VQLCBNQ0FTVF9MRUFWRV9HUk9VUCBNQ0FTVF9KT0lOX1NPVVJDRV9HUk9VUCxcbiA1MTY6XHRcdFx0ICogTUNBU1RfTEVBVkVfU09VUkNFX0dST1VQLCBNQ0FTVF9CTE9DS19TT1VSQ0UsIE1DQVNUX1VOQkxPQ0tfU09VUkNFLFxuIDUxNzpcdFx0XHQgKiBNQ0FTVF9NU0ZJTFRFUiwgSVBfTVVMVElDQVNUX0FMTCBhcmUgbm90IHN1cHBvcnRlZCwgYmV0dGVyIG5vdCBkZWFsXG4gNTE4Olx0XHRcdCAqIHdpdGggbWNhc3Qgc3R1ZmZcbiA1MTk6XHRcdFx0ICovXG4gNTIwOlx0XHRcdC8qIElQX0lQU0VDX1BPTElDWSwgSVBfWEZSTV9QT0xJQ1kgYXJlIG51dCBzdXBwb3J0ZWQsIHVucmVsYXRlZCBoZXJlICovXG4gNTIxOlx0XHRcdHJldHVybiBmYWxzZTtcbiA1MjI6XHRcdH1cbiA1MjM6XHRcdGlmIChsZXZlbCA9PSBTT0xfSVBWNikge1xuIDUyNDpcdFx0XHRzd2l0Y2ggKG9wdG5hbWUpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDk6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU4MTEKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqRGl2aW5nIERlZXBlciBpbnRvIGBtcHRjcF9zdXBwb3J0ZWRfc29ja29wdGAqKgoKQWxyaWdodCwgc28gdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHJlYWxseSBkaWcgaW50byBgbXB0Y3Bfc3VwcG9ydGVkX3NvY2tvcHRgLiBXZSYjMzk7dmUgdG91Y2hlZCBvbiBpdCwgd2UgdW5kZXJzdGFuZCBpdHMgYmFzaWMgcHVycG9zZSwgYnV0IGxldCYjMzk7cyBub3QganVzdCBza2ltIHRoZSBzdXJmYWNlLiBXaGF0JiMzOTtzIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBzdXBwb3J0ZWQgb3B0aW9ucz8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyAqdGhvcm91Z2hseSogdG8gYXNzZXNzIGl0cyByb2xlIGluIHRoaXMgc3BlY2lmaWMgbmV0d29yayBjb25maWd1cmF0aW9uLgoKSSBuZWVkIHRvIGtub3cgdGhlIGdyYW51bGFyIGRldGFpbHMgb2YgaG93IHRoaXMgc29ja2V0IG9wdGlvbiBvcGVyYXRlcy4gQXJlIHRoZXJlIGFueSB1bmV4cGVjdGVkIHNpZGUgZWZmZWN0cyB0byBjZXJ0YWluIGNvbWJpbmF0aW9ucyBvZiBvcHRpb25zPyBXaGF0JiMzOTtzIHRoZSBwZXJmb3JtYW5jZSBvdmVyaGVhZCwgaWYgYW55PyBBcmUgdGhlcmUgYW55IGxpbWl0YXRpb25zIG9yIGVkZ2UgY2FzZXMgSSBzaG91bGQgYmUgYXdhcmUgb2Y/IEkgbmVlZCB0byB0aGluayBsaWtlIGEgc3lzdGVtcyBwcm9ncmFtbWVyIGFuZCBhbnRpY2lwYXRlIHBvdGVudGlhbCBpc3N1ZXMuCgpMZXQmIzM5O3MgZ2V0IGludG8gdGhlIG5pdHR5LWdyaXR0eSBhbmQgc2VlIHdoYXQgc2VjcmV0cyB0aGlzIG9wdGlvbiBpcyBoaWRpbmcuIEtub3dpbmcgdGhlIGRldGFpbHMgaXMgdGhlIG9ubHkgd2F5IHRvIGVmZmVjdGl2ZWx5IHVzZSBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDk6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbXB0Y3Avc29ja29wdC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTIzLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1MjM6XHRcdGlmIChsZXZlbCA9PSBTT0xfSVBWNikge1xuIDUyNDpcdFx0XHRzd2l0Y2ggKG9wdG5hbWUpIHtcbiA1MjU6XHRcdFx0Y2FzZSBJUFY2X1Y2T05MWTpcbiA1MjY6XHRcbiA1Mjc6XHRcdFx0LyogdGhlIGZvbGxvd2luZyBhcmUgY29udHJvbCBjbXNnIHJlbGF0ZWQgKi9cbiA1Mjg6XHRcdFx0Y2FzZSBJUFY2X1JFQ1ZQS1RJTkZPOlxuIDUyOTpcdFx0XHRjYXNlIElQVjZfMjI5MlBLVElORk86XG4gNTMwOlx0XHRcdGNhc2UgSVBWNl9SRUNWSE9QTElNSVQ6XG4gNTMxOlx0XHRcdGNhc2UgSVBWNl8yMjkySE9QTElNSVQ6XG4gNTMyOlx0XHRcdGNhc2UgSVBWNl9SRUNWUlRIRFI6XG4gNTMzOlx0XHRcdGNhc2UgSVBWNl8yMjkyUlRIRFI6XG4gNTM0Olx0XHRcdGNhc2UgSVBWNl9SRUNWSE9QT1BUUzpcbiA1MzU6XHRcdFx0Y2FzZSBJUFY2XzIyOTJIT1BPUFRTOlxuIDUzNjpcdFx0XHRjYXNlIElQVjZfUkVDVkRTVE9QVFM6XG4gNTM3Olx0XHRcdGNhc2UgSVBWNl8yMjkyRFNUT1BUUzpcbiA1Mzg6XHRcdFx0Y2FzZSBJUFY2X1JFQ1ZUQ0xBU1M6XG4gNTM5Olx0XHRcdGNhc2UgSVBWNl9GTE9XSU5GTzpcbiA1NDA6XHRcdFx0Y2FzZSBJUFY2X1JFQ1ZQQVRITVRVOlxuIDU0MTpcdFx0XHRjYXNlIElQVjZfUkVDVk9SSUdEU1RBRERSOlxuIDU0MjpcdFx0XHRjYXNlIElQVjZfUkVDVkZSQUdTSVpFOlxuIDU0MzpcdFxuIDU0NDpcdFx0XHQvKiB0aGUgZm9sbG93aW5nIG9uZXMgbmVlZCBzb21lIGxvdmUgYnV0IGFyZSBxdWl0ZSBjb21tb24gKi9cbiA1NDU6XHRcdFx0Y2FzZSBJUFY2X1RDTEFTUzpcbiA1NDY6XHRcdFx0Y2FzZSBJUFY2X1RSQU5TUEFSRU5UOlxuIDU0NzpcdFx0XHRjYXNlIElQVjZfRlJFRUJJTkQ6XG4gNTQ4Olx0XHRcdGNhc2UgSVBWNl9QS1RJTkZPOlxuIDU0OTpcdFx0XHRjYXNlIElQVjZfMjI5MlBLVE9QVElPTlM6XG4gNTUwOlx0XHRcdGNhc2UgSVBWNl9VTklDQVNUX0hPUFM6XG4gNTUxOlx0XHRcdGNhc2UgSVBWNl9NVFVfRElTQ09WRVI6XG4gNTUyOlx0XHRcdGNhc2UgSVBWNl9NVFU6XG4gNTUzOlx0XHRcdGNhc2UgSVBWNl9SRUNWRVJSOlxuIDU1NDpcdFx0XHRjYXNlIElQVjZfRkxPV0lORk9fU0VORDpcbiA1NTU6XHRcdFx0Y2FzZSBJUFY2X0ZMT1dMQUJFTF9NR1I6XG4gNTU2Olx0XHRcdGNhc2UgSVBWNl9NSU5IT1BDT1VOVDpcbiA1NTc6XHRcdFx0Y2FzZSBJUFY2X0RPTlRGUkFHOlxuIDU1ODpcdFx0XHRjYXNlIElQVjZfQVVUT0ZMT1dMQUJFTDpcbiA1NTk6XHRcbiA1NjA6XHRcdFx0LyogdGhlIGZvbGxvd2luZyBvbmUgaXMgYSBuby1vcCBmb3IgcGxhaW4gVENQICovXG4gNTYxOlx0XHRcdGNhc2UgSVBWNl9SRUNWRVJSX1JGQzQ4ODQ6XG4gNTYyOlx0XHRcdFx0cmV0dXJuIHRydWU7XG4gNTYzOlx0XHRcdH1cbiA1NjQ6XHRcbiA1NjU6XHRcdFx0LyogSVBWNl9IT1BPUFRTLCBJUFY2X1JUSERSRFNUT1BUUywgSVBWNl9SVEhEUiwgSVBWNl9EU1RPUFRTIGFyZVxuIDU2NjpcdFx0XHQgKiBub3Qgc3VwcG9ydGVkXG4gNTY3Olx0XHRcdCAqL1xuIDU2ODpcdFx0XHQvKiBJUFY2X01VTFRJQ0FTVF9IT1BTLCBJUFY2X01VTFRJQ0FTVF9MT09QLCBJUFY2X1VOSUNBU1RfSUYsXG4gNTY5Olx0XHRcdCAqIElQVjZfTVVMVElDQVNUX0lGLCBJUFY2X0FERFJGT1JNLFxuIDU3MDpcdFx0XHQgKiBJUFY2X0FERF9NRU1CRVJTSElQLCBJUFY2X0RST1BfTUVNQkVSU0hJUCwgSVBWNl9KT0lOX0FOWUNBU1QsXG4gNTcxOlx0XHRcdCAqIElQVjZfTEVBVkVfQU5ZQ0FTVCwgSVBWNl9NVUxUSUNBU1RfQUxMLCBNQ0FTVF9KT0lOX0dST1VQLCBNQ0FTVF9MRUFWRV9HUk9VUCxcbiA1NzI6XHRcdFx0ICogTUNBU1RfSk9JTl9TT1VSQ0VfR1JPVVAsIE1DQVNUX0xFQVZFX1NPVVJDRV9HUk9VUCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDk6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcwMDUKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJUHY2IFRDTEFTUyBQYXRjaCoqCgpPa2F5LCBzbyBgSVBWNl9UQ0xBU1NgIGlzIHN1cHBvcnRlZCwgd2hpY2ggaXMgZ29vZC4gVGhpcyBwYXRjaCBpcyBhZGRpbmcgdGhlIG5lY2Vzc2FyeSBoYW5kbGluZyBmb3IgaXQgd2l0aGluIHRoZSBNUFRDUCBjb2RlLCBzcGVjaWZpY2FsbHkgaW4gYG1wdGNwX3NldHNvY2tvcHRfdjZgIGFuZCBgbXB0Y3BfZ2V0c29ja29wdF92NmAuIEl0IGxvb2tzIGxpa2UgdGhlIGZpbGUgYmVpbmcgbW9kaWZpZWQgaXMgYG5ldC9tcHRjcC9zb2Nrb3B0LmNgLgoKTXkgZm9jdXMgbmVlZHMgdG8gYmUgb24gdGhlc2UgZnVuY3Rpb25zOiBgbXB0Y3Bfc2V0c29ja29wdF92Nl9zZXRfdGNsYXNzYCwgYG1wdGNwX3NldHNvY2tvcHRfdjZgLCBhbmQgYG1wdGNwX2dldHNvY2tvcHRfdjZgLiBBaCwgSSBzZWUsIGBtcHRjcF9zZXRzb2Nrb3B0X3Y2YCBhbmQgYG1wdGNwX2dldHNvY2tvcHRfdjZgIGFscmVhZHkgZXhpc3QuIGBtcHRjcF9zZXRzb2Nrb3B0X3Y2X3NldF90Y2xhc3NgIGlzIHRoZSBuZXcgZnVuY3Rpb24sIHdoaWNoIG1ha2VzIHNlbnNlLgoKRm9yIHRoZSBjb25maWd1cmF0aW9ucywgaXQgcmVxdWlyZXMgYE1QVENQYCBhbmQgYE1QVENQX0lQVjZgLiBXYWl0IGEgc2Vjb25k4oCmV2hpbGUgYE1QVENQX0lQVjZgIGlzbiYjMzk7dCAqc3RyaWN0bHkqIG5lZWRlZCBmb3IgYG1wdGNwX3NldHNvY2tvcHRfdjZgIHRvIGNvbXBpbGUsIGl0JiMzOTtzIGVzc2VudGlhbCBmb3IgTVBUQ1AgdG8gYWN0dWFsbHkgKndvcmsqIHdpdGggSVB2NiBzb2NrZXRzLiBJdCYjMzk7cyBhIHN1YnRsZSBkaXN0aW5jdGlvbiwgYnV0IGltcG9ydGFudC4gVGhlcmVmb3JlLCBJIHNob3VsZCBkb3VibGUtY2hlY2sgd2hldGhlciBgTVBUQ1BfSVBWNmAgaXMgcmVxdWlyZWQgdG8gY3JlYXRlIGFuIElQdjYgTVBUQ1Agc29ja2V0LiBUaGF0JiMzOTtzIHRoZSBrZXkgcXVlc3Rpb24gaGVyZSwgaXQmIzM5O3Mgbm90IHN0cmljdGx5IGEgY29tcGlsZSB0aW1lIGRlcGVuZGVuY3kuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEzIDA5OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O01QVENQX0lQVjYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbXB0Y3AvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tcHRjcC9LY29uZmlnPTE2PWNvbmZpZyBJTkVUX01QVENQX0RJQUdcbi0tXG5uZXQvbXB0Y3AvS2NvbmZpZy0xOS1cbm5ldC9tcHRjcC9LY29uZmlnOjIwOmNvbmZpZyBNUFRDUF9JUFY2XG5uZXQvbXB0Y3AvS2NvbmZpZy0yMS1cdGJvb2wgXCYjMzQ7TVBUQ1A6IElQdjYgc3VwcG9ydCBmb3IgTXVsdGlwYXRoIFRDUFwmIzM0O1xuLS1cbm5ldC9tcHRjcC9jdHJsLmM9NTg3PXZvaWQgX19pbml0IG1wdGNwX2luaXQodm9pZClcbi0tXG5uZXQvbXB0Y3AvY3RybC5jLTU5NS1cbm5ldC9tcHRjcC9jdHJsLmM6NTk2OiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxubmV0L21wdGNwL2N0cmwuYy01OTctaW50IF9faW5pdCBtcHRjcHY2X2luaXQodm9pZClcbi0tXG5uZXQvbXB0Y3Avb3B0aW9ucy5jPTIzPXN0YXRpYyB2b2lkIG1wdGNwX3BhcnNlX29wdGlvbihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9tcHRjcC9vcHRpb25zLmMtMjQxLVx0XHRcdFx0bXBfb3B0LVx1MDAzZWFkZHIuZmFtaWx5ID0gQUZfSU5FVDtcbm5ldC9tcHRjcC9vcHRpb25zLmM6MjQyOiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxubmV0L21wdGNwL29wdGlvbnMuYy0yNDMtXHRcdFx0ZWxzZSBpZiAob3BzaXplID09IFRDUE9MRU5fTVBUQ1BfQUREX0FERFI2IHx8XG4tLVxubmV0L21wdGNwL29wdGlvbnMuYy0yNTItXHRcdFx0XHRtcF9vcHQtXHUwMDNlYWRkci5mYW1pbHkgPSBBRl9JTkVUO1xubmV0L21wdGNwL29wdGlvbnMuYzoyNTM6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTI1NC1cdFx0XHRlbHNlIGlmIChvcHNpemUgPT0gVENQT0xFTl9NUFRDUF9BRERfQUREUjZfQkFTRSB8fFxuLS1cbm5ldC9tcHRjcC9vcHRpb25zLmMtMjc0LVx0XHR9XG5uZXQvbXB0Y3Avb3B0aW9ucy5jOjI3NTojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcbm5ldC9tcHRjcC9vcHRpb25zLmMtMjc2LVx0XHRlbHNlIHtcbi0tXG5uZXQvbXB0Y3Avb3B0aW9ucy5jPTYzMj1zdGF0aWMgdTY0IGFkZF9hZGRyX2dlbmVyYXRlX2htYWModTY0IGtleTEsIHU2NCBrZXkyLFxuLS1cbm5ldC9tcHRjcC9vcHRpb25zLmMtNjQ0LVx0fVxubmV0L21wdGNwL29wdGlvbnMuYzo2NDU6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTY0Ni1cdGVsc2UgaWYgKGFkZHItXHUwMDNlZmFtaWx5ID09IEFGX0lORVQ2KSB7XG4tLVxubmV0L21wdGNwL29wdGlvbnMuYz0xMzg0PXZvaWQgbXB0Y3Bfd3JpdGVfb3B0aW9ucyhzdHJ1Y3QgdGNwaGRyICp0aCwgX19iZTMyICpwdHIsIHN0cnVjdCB0Y3Bfc29jayAqdHAsXG4tLVxubmV0L21wdGNwL29wdGlvbnMuYy0xNTY3LVxubmV0L21wdGNwL29wdGlvbnMuYzoxNTY4OiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxubmV0L21wdGNwL29wdGlvbnMuYy0xNTY5LVx0XHRpZiAob3B0cy1cdTAwM2VhZGRyLmZhbWlseSA9PSBBRl9JTkVUNilcbi0tXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTE1ODYtXHRcdH1cbm5ldC9tcHRjcC9vcHRpb25zLmM6MTU4NzojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcbm5ldC9tcHRjcC9vcHRpb25zLmMtMTU4OC1cdFx0ZWxzZSBpZiAob3B0cy1cdTAwM2VhZGRyLmZhbWlseSA9PSBBRl9JTkVUNikge1xuLS1cbm5ldC9tcHRjcC9wbS5jPTMzPWJvb2wgbXB0Y3BfcG1fYWRkcl9mYW1pbGllc19tYXRjaChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L21wdGNwL3BtLmMtMzgtXG5uZXQvbXB0Y3AvcG0uYzozOTojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcbm5ldC9tcHRjcC9wbS5jLTQwLVx0Ym9vbCBsb2NfaXNfdjQgPSBsb2MtXHUwMDNlZmFtaWx5ID09IEFGX0lORVQgfHwgaXB2Nl9hZGRyX3Y0bWFwcGVkKFx1MDAyNmxvYy1cdTAwM2VhZGRyNik7XG4tLVxubmV0L21wdGNwL3BtLmM9NTU9Ym9vbCBtcHRjcF9hZGRyZXNzZXNfZXF1YWwoY29uc3Qgc3RydWN0IG1wdGNwX2FkZHJfaW5mbyAqYSxcbi0tXG5uZXQvbXB0Y3AvcG0uYy02Mi1cdFx0XHRhZGRyX2VxdWFscyA9IGEtXHUwMDNlYWRkci5zX2FkZHIgPT0gYi1cdTAwM2VhZGRyLnNfYWRkcjtcbm5ldC9tcHRjcC9wbS5jOjYzOiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxubmV0L21wdGNwL3BtLmMtNjQtXHRcdGVsc2Vcbi0tXG5uZXQvbXB0Y3AvcG0uYz04Mz12b2lkIG1wdGNwX2xvY2FsX2FkZHJlc3MoY29uc3Qgc3RydWN0IHNvY2tfY29tbW9uICpza2MsXG4tLVxubmV0L21wdGNwL3BtLmMtODktXHRcdGFkZHItXHUwMDNlYWRkci5zX2FkZHIgPSBza2MtXHUwMDNlc2tjX3Jjdl9zYWRkcjtcbm5ldC9tcHRjcC9wbS5jOjkwOiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxubmV0L21wdGNwL3BtLmMtOTEtXHRlbHNlIGlmIChhZGRyLVx1MDAzZWZhbWlseSA9PSBBRl9JTkVUNilcbi0tXG5uZXQvbXB0Y3AvcG0uYz05Nj12b2lkIG1wdGNwX3JlbW90ZV9hZGRyZXNzKGNvbnN0IHN0cnVjdCBzb2NrX2NvbW1vbiAqc2tjLFxuLS1cbm5ldC9tcHRjcC9wbS5jLTEwMi1cdFx0YWRkci1cdTAwM2VhZGRyLnNfYWRkciA9IHNrYy1cdTAwM2Vza2NfZGFkZHI7XG5uZXQvbXB0Y3AvcG0uYzoxMDM6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXG5uZXQvbXB0Y3AvcG0uYy0xMDQtXHRlbHNlIGlmIChhZGRyLVx1MDAzZWZhbWlseSA9PSBBRl9JTkVUNilcbi0tXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmM9NjA2PWZpbGxfbG9jYWxfYWRkcmVzc19hbnkoc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgc3RydWN0IG1wdGNwX2FkZHJfaW5mbyAqcmVtb3RlLFxuLS1cbm5ldC9tcHRjcC9wbV9rZXJuZWwuYy02MTItXHRsb2NhbC1cdTAwM2VhZGRyLmZhbWlseSA9XG5uZXQvbXB0Y3AvcG1fa2VybmVsLmM6NjEzOiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxubmV0L21wdGNwL3BtX2tlcm5lbC5jLTYxNC1cdFx0XHRyZW1vdGUtXHUwMDNlZmFtaWx5ID09IEFGX0lORVQ2IFx1MDAyNlx1MDAyNlxuLS1cbm5ldC9tcHRjcC9wbV9rZXJuZWwuYz04NTI9c3RhdGljIGludCBtcHRjcF9wbV9ubF9jcmVhdGVfbGlzdGVuX3NvY2tldChzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L21wdGNwL3BtX2tlcm5lbC5jLTg4OS1cdG1wdGNwX2luZm8yc29ja2FkZHIoXHUwMDI2ZW50cnktXHUwMDNlYWRkciwgXHUwMDI2YWRkciwgZW50cnktXHUwMDNlYWRkci5mYW1pbHkpO1xubmV0L21wdGNwL3BtX2tlcm5lbC5jOjg5MDojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcbm5ldC9tcHRjcC9wbV9rZXJuZWwuYy04OTEtXHRpZiAoZW50cnktXHUwMDNlYWRkci5mYW1pbHkgPT0gQUZfSU5FVDYpXG4tLVxubmV0L21wdGNwL3BtX2tlcm5lbC5jLTg5NS1cdFx0ZXJyID0gaW5ldF9iaW5kX3NrKHNzaywgKHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICopXHUwMDI2YWRkciwgYWRkcmxlbik7XG5uZXQvbXB0Y3AvcG1fa2VybmVsLmM6ODk2OiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxubmV0L21wdGNwL3BtX2tlcm5lbC5jLTg5Ny1cdGVsc2UgaWYgKHNzay1cdTAwM2Vza19mYW1pbHkgPT0gQUZfSU5FVDYpXG4tLVxubmV0L21wdGNwL3BtX25ldGxpbmsuYz0yMj1zdGF0aWMgaW50IG1wdGNwX3BtX2ZhbWlseV90b19hZGRyKGludCBmYW1pbHkpXG5uZXQvbXB0Y3AvcG1fbmV0bGluay5jLTIzLXtcbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmM6MjQ6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXG5uZXQvbXB0Y3AvcG1fbmV0bGluay5jLTI1LVx0aWYgKGZhbWlseSA9PSBBRl9JTkVUNilcbi0tXG5uZXQvbXB0Y3AvcG1fbmV0bGluay5jPTMxPXN0YXRpYyBpbnQgbXB0Y3BfcG1fcGFyc2VfcG1fYWRkcl9hdHRyKHN0cnVjdCBubGF0dHIgKnRiW10sXG4tLVxubmV0L21wdGNwL3BtX25ldGxpbmsuYy02My1cdGlmIChhZGRyLVx1MDAzZWZhbWlseSAhPSBBRl9JTkVUXG5uZXQvbXB0Y3AvcG1fbmV0bGluay5jOjY0OiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxubmV0L21wdGNwL3BtX25ldGxpbmsuYy02NS1cdCAgICBcdTAwMjZcdTAwMjYgYWRkci1cdTAwM2VmYW1pbHkgIT0gQUZfSU5FVDZcbi0tXG5uZXQvbXB0Y3AvcG1fbmV0bGluay5jLTc4LVxubmV0L21wdGNwL3BtX25ldGxpbmsuYzo3OTojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmMtODAtXHRpZiAoYWRkci1cdTAwM2VmYW1pbHkgPT0gQUZfSU5FVDYpXG4tLVxubmV0L21wdGNwL3BtX25ldGxpbmsuYz0xMzE9c3RhdGljIGludCBtcHRjcF9ubF9maWxsX2FkZHIoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbXB0Y3AvcG1fbmV0bGluay5jLTE1Ni1cdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG5uZXQvbXB0Y3AvcG1fbmV0bGluay5jOjE1NzojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmMtMTU4LVx0ZWxzZSBpZiAoYWRkci1cdTAwM2VmYW1pbHkgPT0gQUZfSU5FVDYgXHUwMDI2XHUwMDI2XG4tLVxubmV0L21wdGNwL3BtX25ldGxpbmsuYz0yOTg9c3RhdGljIGludCBtcHRjcF9ldmVudF9hZGRfc3ViZmxvdyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3Qgc29jayAqc3NrKVxuLS1cbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmMtMzEyLVx0XHRicmVhaztcbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmM6MzEzOiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxubmV0L21wdGNwL3BtX25ldGxpbmsuYy0zMTQtXHRjYXNlIEFGX0lORVQ2OiB7XG4tLVxubmV0L21wdGNwL3BtX25ldGxpbmsuYz00NjU9dm9pZCBtcHRjcF9ldmVudF9hZGRyX2Fubm91bmNlZChjb25zdCBzdHJ1Y3Qgc29jayAqc3NrLFxuLS1cbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmMtNTAyLVx0XHRicmVhaztcbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmM6NTAzOiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxubmV0L21wdGNwL3BtX25ldGxpbmsuYy01MDQtXHRjYXNlIEFGX0lORVQ2OlxuLS1cbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmM9NTIyPXZvaWQgbXB0Y3BfZXZlbnRfcG1fbGlzdGVuZXIoY29uc3Qgc3RydWN0IHNvY2sgKnNzayxcbi0tXG5uZXQvbXB0Y3AvcG1fbmV0bGluay5jLTU1MS1cdFx0YnJlYWs7XG5uZXQvbXB0Y3AvcG1fbmV0bGluay5jOjU1MjojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmMtNTUzLVx0Y2FzZSBBRl9JTkVUNjoge1xuLS1cbm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYz00MzI9c3RhdGljIHN0cnVjdCBzb2NrICptcHRjcF9ubF9maW5kX3NzayhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLFxuLS1cbm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYy00NTctXHRcdFx0YnJlYWs7XG5uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmM6NDU4OiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxubmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jLTQ1OS1cdFx0Y2FzZSBBRl9JTkVUNjoge1xuLS1cbm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYz00Nzg9aW50IG1wdGNwX3BtX25sX3N1YmZsb3dfZGVzdHJveV9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxubmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jLTUwNi1cbm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYzo1MDc6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXG5uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmMtNTA4LVx0aWYgKGFkZHJfbC5hZGRyLmZhbWlseSA9PSBBRl9JTkVUIFx1MDAyNlx1MDAyNiBpcHY2X2FkZHJfdjRtYXBwZWQoXHUwMDI2YWRkcl9yLmFkZHI2KSkge1xuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTIwLSNpbmNsdWRlIFx1MDAzY25ldC90Y3Bfc3RhdGVzLmhcdTAwM2Vcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjIxOiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxubmV0L21wdGNwL3Byb3RvY29sLmMtMjItI2luY2x1ZGUgXHUwMDNjbmV0L3RyYW5zcF92Ni5oXHUwMDNlXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmM9MzE9c3RhdGljIHVuc2lnbmVkIGludCBtcHRjcF9pbnFfaGludChjb25zdCBzdHJ1Y3Qgc29jayAqc2spO1xuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTM1LVxubmV0L21wdGNwL3Byb3RvY29sLmM6MzY6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zNy1zdHJ1Y3QgbXB0Y3A2X3NvY2sge1xuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jPTY0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzICptcHRjcF9mYWxsYmFja190Y3Bfb3BzKGNvbnN0IHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy02Ny1cbm5ldC9tcHRjcC9wcm90b2NvbC5jOjY4OiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxubmV0L21wdGNwL3Byb3RvY29sLmMtNjktXHRpZiAoZmFtaWx5ID09IEFGX0lORVQ2KVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jPTMzOTc9c3RhdGljIHZvaWQgbXB0Y3BfY29weV9pbmFkZHJzKHN0cnVjdCBzb2NrICptc2ssIGNvbnN0IHN0cnVjdCBzb2NrICpzc2spXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zMzk4LXtcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjMzOTk6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zNDAwLVx0Y29uc3Qgc3RydWN0IGlwdjZfcGluZm8gKnNzazYgPSBpbmV0Nl9zayhzc2spO1xuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jPTM0NDI9c3RhdGljIGludCBtcHRjcF9kaXNjb25uZWN0KHN0cnVjdCBzb2NrICpzaywgaW50IGZsYWdzKVxuLS1cbm5ldC9tcHRjcC9wcm90b2NvbC5jLTM1MDQtXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzozNTA1OiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxubmV0L21wdGNwL3Byb3RvY29sLmMtMzUwNi1zdGF0aWMgc3RydWN0IGlwdjZfcGluZm8gKm1wdGNwX2luZXQ2X3NrKGNvbnN0IHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0zNTUzPXN0cnVjdCBzb2NrICptcHRjcF9za19jbG9uZV9pbml0KGNvbnN0IHN0cnVjdCBzb2NrICpzayxcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zNTY1LVxubmV0L21wdGNwL3Byb3RvY29sLmM6MzU2NjojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTM1NjctXHRpZiAobnNrLVx1MDAzZXNrX2ZhbWlseSA9PSBBRl9JTkVUNilcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zNTcyLVxubmV0L21wdGNwL3Byb3RvY29sLmM6MzU3MzojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTM1NzQtXHRpZiAobnNrLVx1MDAzZXNrX2ZhbWlseSA9PSBBRl9JTkVUNilcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz00MDk5PXN0YXRpYyBpbnQgbXB0Y3BfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqdWFkZHIsIGludCBhZGRyX2xlbilcbi0tXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy00MTEzLVx0XHRlcnIgPSBpbmV0X2JpbmRfc2soc3NrLCB1YWRkciwgYWRkcl9sZW4pO1xubmV0L21wdGNwL3Byb3RvY29sLmM6NDExNDojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTQxMTUtXHRlbHNlIGlmIChzay1cdTAwM2Vza19mYW1pbHkgPT0gQUZfSU5FVDYpXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmM9NDYzNT12b2lkIF9faW5pdCBtcHRjcF9wcm90b19pbml0KHZvaWQpXG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmMtNDY3NC1cbm5ldC9tcHRjcC9wcm90b2NvbC5jOjQ2NzU6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy00Njc2LXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIG1wdGNwX3Y2X3N0cmVhbV9vcHMgPSB7XG4tLVxubmV0L21wdGNwL3Byb3RvY29sLmg9OTEyPXZvaWQgX19pbml0IG1wdGNwX3Byb3RvX2luaXQodm9pZCk7XG5uZXQvbXB0Y3AvcHJvdG9jb2wuaDo5MTM6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaC05MTQtaW50IF9faW5pdCBtcHRjcF9wcm90b192Nl9pbml0KHZvaWQpO1xuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmMtMTctI2luY2x1ZGUgXHUwMDNjbmV0L3Byb3RvY29sLmhcdTAwM2Vcbm5ldC9tcHRjcC9zdWJmbG93LmM6MTg6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE5LSNpbmNsdWRlIFx1MDAzY25ldC9pcDZfcm91dGUuaFx1MDAzZVxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmM9MzU4PXN0YXRpYyBpbnQgc3ViZmxvd192NF9zZW5kX3N5bmFjayhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBkc3RfZW50cnkgKmRzdCxcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTM3MC1cbm5ldC9tcHRjcC9zdWJmbG93LmM6MzcxOiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxubmV0L21wdGNwL3N1YmZsb3cuYy0zNzItc3RhdGljIGludCBzdWJmbG93X3Y2X3NlbmRfc3luYWNrKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGRzdF9lbnRyeSAqZHN0LFxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmM9NjQ5PXN0YXRpYyBpbnQgc3ViZmxvd19yZWJ1aWxkX2hlYWRlcihzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYy02NTgtXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjY1OTojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcbm5ldC9tcHRjcC9zdWJmbG93LmMtNjYwLXN0YXRpYyBpbnQgc3ViZmxvd192Nl9yZWJ1aWxkX2hlYWRlcihzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYz02OTI9c3RhdGljIHZvaWQgc3ViZmxvd192NF9yZXFfZGVzdHJ1Y3RvcihzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpXG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYy02OTctXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjY5ODojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcbm5ldC9tcHRjcC9zdWJmbG93LmMtNjk5LXN0YXRpYyBzdHJ1Y3QgcmVxdWVzdF9zb2NrX29wcyBtcHRjcF9zdWJmbG93X3Y2X3JlcXVlc3Rfc29ja19vcHMgX19yb19hZnRlcl9pbml0O1xuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmM9NzM3PXN0cnVjdCByZXF1ZXN0X3NvY2sgKm1wdGNwX3N1YmZsb3dfcmVxc2tfYWxsb2MoY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29ja19vcHMgKm9wcyxcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTc0Mi1cdFx0b3BzID0gXHUwMDI2bXB0Y3Bfc3ViZmxvd192NF9yZXF1ZXN0X3NvY2tfb3BzO1xubmV0L21wdGNwL3N1YmZsb3cuYzo3NDM6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTc0NC1cdGVsc2UgaWYgKG9wcy1cdTAwM2VmYW1pbHkgPT0gQUZfSU5FVDYpXG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYz0xNTUzPXN1YmZsb3dfZGVmYXVsdF9hZl9vcHMoc3RydWN0IHNvY2sgKnNrKVxubmV0L21wdGNwL3N1YmZsb3cuYy0xNTU0LXtcbm5ldC9tcHRjcC9zdWJmbG93LmM6MTU1NTojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTU1Ni1cdGlmIChzay1cdTAwM2Vza19mYW1pbHkgPT0gQUZfSU5FVDYpXG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYy0xNTYxLVxubmV0L21wdGNwL3N1YmZsb3cuYzoxNTYyOiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxubmV0L21wdGNwL3N1YmZsb3cuYy0xNTYzLXZvaWQgbXB0Y3B2Nl9oYW5kbGVfbWFwcGVkKHN0cnVjdCBzb2NrICpzaywgYm9vbCBtYXBwZWQpXG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYz0xNTgyPXZvaWQgbXB0Y3BfaW5mbzJzb2NrYWRkcihjb25zdCBzdHJ1Y3QgbXB0Y3BfYWRkcl9pbmZvICppbmZvLFxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmMtMTU5Mi1cdFx0XHRpbl9hZGRyLVx1MDAzZXNpbl9hZGRyID0gaW5mby1cdTAwM2VhZGRyO1xubmV0L21wdGNwL3N1YmZsb3cuYzoxNTkzOiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxubmV0L21wdGNwL3N1YmZsb3cuYy0xNTk0LVx0XHRlbHNlIGlmIChpcHY2X2FkZHJfdjRtYXBwZWQoXHUwMDI2aW5mby1cdTAwM2VhZGRyNikpXG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYy0xNTk4LVx0fVxubmV0L21wdGNwL3N1YmZsb3cuYzoxNTk5OiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxubmV0L21wdGNwL3N1YmZsb3cuYy0xNjAwLVx0ZWxzZSBpZiAoYWRkci1cdTAwM2Vzc19mYW1pbHkgPT0gQUZfSU5FVDYpIHtcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTE2MTM9aW50IF9fbXB0Y3Bfc3ViZmxvd19jb25uZWN0KHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IG1wdGNwX3BtX2xvY2FsICpsb2NhbCxcbi0tXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE2NDgtXHRcdFx0bG9jYWxfaWQgPSAtMTtcbm5ldC9tcHRjcC9zdWJmbG93LmM6MTY0OTojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTY1MC1cdH0gZWxzZSBpZiAoc2stXHUwMDNlc2tfZmFtaWx5ID09IEFGX0lORVQ2KSB7XG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYy0xNjY1LVx0YWRkcmxlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pO1xubmV0L21wdGNwL3N1YmZsb3cuYzoxNjY2OiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxubmV0L21wdGNwL3N1YmZsb3cuYy0xNjY3LVx0aWYgKGFkZHIuc3NfZmFtaWx5ID09IEFGX0lORVQ2KVxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmM9MTc1Nj1zdGF0aWMgdm9pZCBtcHRjcF9zdWJmbG93X29wc19vdmVycmlkZShzdHJ1Y3Qgc29jayAqc3NrKVxubmV0L21wdGNwL3N1YmZsb3cuYy0xNzU3LXtcbm5ldC9tcHRjcC9zdWJmbG93LmM6MTc1ODojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTc1OS1cdGlmIChzc2stXHUwMDNlc2tfcHJvdCA9PSBcdTAwMjZ0Y3B2Nl9wcm90KVxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmM9MTc2Nj1zdGF0aWMgdm9pZCBtcHRjcF9zdWJmbG93X29wc191bmRvX292ZXJyaWRlKHN0cnVjdCBzb2NrICpzc2spXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE3Njcte1xubmV0L21wdGNwL3N1YmZsb3cuYzoxNzY4OiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxubmV0L21wdGNwL3N1YmZsb3cuYy0xNzY5LVx0aWYgKHNzay1cdTAwM2Vza19wcm90ID09IFx1MDAyNnRjcHY2X3Byb3Rfb3ZlcnJpZGUpXG4tLVxubmV0L21wdGNwL3N1YmZsb3cuYz0yMTQxPXZvaWQgX19pbml0IG1wdGNwX3N1YmZsb3dfaW5pdCh2b2lkKVxuLS1cbm5ldC9tcHRjcC9zdWJmbG93LmMtMjE3My1cbm5ldC9tcHRjcC9zdWJmbG93LmM6MjE3NDojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcbm5ldC9tcHRjcC9zdWJmbG93LmMtMjE3NS12b2lkIF9faW5pdCBtcHRjcF9zdWJmbG93X3Y2X2luaXQodm9pZClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDk6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMwMzUKCQkJCQkJCW91dHB1dDogMTQwCgkJCQkJCQl0aG91Z2h0czogNzg0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIE1QVENQIElQdjYgU29ja2V0IE9wdGlvbiBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIGl0JiMzOTtzIGNsZWFyIHRoYXQgYE1QVENQX0lQVjZgIGlzIGEgbmVjZXNzYXJ5IGNvbmZpZyB0byBlbmFibGUgSVB2NiBNUFRDUCBzb2NrZXRzLiBUaGF0IG1ha2VzIHNlbnNlLCB0aGUgY29kZSAoYG1wdGNwX3Y2X3N0cmVhbV9vcHNgKSBpcyBvbmx5IHJlZ2lzdGVyZWQgd2hlbiB0aGF0IGNvbmZpZyBpcyBlbmFibGVkLiBTbywgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBgTVBUQ1BgIGFuZCBgTVBUQ1BfSVBWNmAgYXMgdGhlIHByaW1hcnkgY29uZmlndXJhdGlvbnMgdG8gYmUgYXdhcmUgb2YuIFdlIGFsc28gbmVlZCBgSVBWNj15YCwgYnV0IHRoYXQgaXMgYSBnZW5lcmljIGNvbmZpZywgd2UgY2FuIGp1c3QgZm9jdXMgb24gYE1QVENQYCBhbmQgYE1QVENQX0lQVjZgIGZvciBub3cuCgpGdW5jdGlvbi13aXNlLCBJIG5lZWQgdG8gZm9jdXMgb24gYSBmZXcgdGhpbmdzLiBgbXB0Y3Bfc2V0c29ja29wdF92Nl9zZXRfdGNsYXNzYCBpcyBhIG5ldyBmdW5jdGlvbiwgYW5kIHRoZW4gYG1wdGNwX3NldHNvY2tvcHRfdjZgIGFuZCBgbXB0Y3BfZ2V0c29ja29wdF92NmAgYXJlIGV4aXN0aW5nLCBidXQgSSBzZWUgdGhleSBhcmUgbW9kaWZpZWQgaGVyZS4gSSBjaGVja2VkIHRoYXQgYG1wdGNwX3NldHNvY2tvcHRfdjZfc2V0X3RjbGFzc2AgaXMgaW5kZWVkIHN0YXRpYy4KCkkmIzM5O3ZlIHJldmlld2VkIHRoZSBjb2RlIGZvciBgbXB0Y3Bfc2V0c29ja29wdF92Nl9zZXRfdGNsYXNzYCBjYXJlZnVsbHkuIEl0IGNhbGxzIGBpcHY2X3NldHNvY2tvcHRgIHdoaWNoIGlzIGdvb2QgdG8gc2VlIGFzIGl0IGNvbmZpcm1zIHRoYXQgc3RhbmRhcmQgSVB2NiBmdW5jdGlvbmFsaXR5IGlzIGxldmVyYWdlZC4gVGhlIGNyaXRpY2FsIHBhcnQgaXMgaG93IHRoZSBUQ0xBU1MgdmFsdWUgaXMgcHJvcGFnYXRlZCB0byB0aGUgc3ViZmxvd3Mgd2l0aGluIGFuIE1QVENQIHNvY2tldC4gSXQgc2VlbXMgY29ycmVjdDsgaXQgbG9ja3MgdGhlIG1haW4gc29ja2V0LCB0aGVuIGluY3JlbWVudHMgdGhlIHNvY2tvcHQgc2VxdWVuY2UgbnVtYmVyLCByZWFkcyB0aGUgVENMQVNTIHZhbHVlLCBhbmQgdGhlbiBpdGVyYXRlcyB0aHJvdWdoIGFsbCB0aGUgc3ViZmxvd3MgdG8gc2V0IHRoZSBUQ0xBU1Mgb24gZWFjaCwgcmVzZXR0aW5nIHRoZSBkZXN0aW5hdGlvbiBvZiB0aGUgc3ViZmxvdyYjMzk7cyBzb2NrZXQuIFRoaXMgaXMgYWxsIHJlYWNoYWJsZSBhbmQgZnVuY3Rpb25hbC4KClRoZXJlZm9yZSwgZm9yIHRoaXMgZnV6emluZyBlZmZvcnQsIEkgd2lsbCBzZXQgYFdvcnRoRnV6emluZ2AgdG8gYHRydWVgLiBNeSBgRW5hYmxlQ29uZmlnc2Agd2lsbCBiZSBgWyYjMzQ7TVBUQ1AmIzM0OywgJiMzNDtNUFRDUF9JUFY2JiMzNDtdYC4gVGhlIGBGb2N1c1N5bWJvbHNgIHdpbGwgYmUgYFsmIzM0O21wdGNwX3NldHNvY2tvcHRfdjZfc2V0X3RjbGFzcyYjMzQ7LCAmIzM0O21wdGNwX3NldHNvY2tvcHRfdjYmIzM0OywgJiMzNDttcHRjcF9nZXRzb2Nrb3B0X3Y2JiMzNDtdYC4gVGhlIGBSZWFzb25pbmdgIHdpbGwgYmU6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3Igc2V0dGluZyBhbmQgZ2V0dGluZyB0aGUgSVBWNl9UQ0xBU1Mgc29ja2V0IG9wdGlvbiBvbiBNUFRDUCBzb2NrZXRzLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IGZ1bmN0aW9uIG1wdGNwX3NldHNvY2tvcHRfdjZfc2V0X3RjbGFzcyB0byBwcm9wYWdhdGUgdGhlIHRjbGFzcyB2YWx1ZSB0byBhbGwgc3ViZmxvd3MuJiMzNDsKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTMgMDk6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01QVENQJiMzNDssCiAgICAmIzM0O01QVENQX0lQVjYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttcHRjcF9zZXRzb2Nrb3B0X3Y2X3NldF90Y2xhc3MmIzM0OywKICAgICYjMzQ7bXB0Y3Bfc2V0c29ja29wdF92NiYjMzQ7LAogICAgJiMzNDttcHRjcF9nZXRzb2Nrb3B0X3Y2JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3Igc2V0dGluZyBhbmQgZ2V0dGluZyB0aGUgSVBWNl9UQ0xBU1Mgc29ja2V0IG9wdGlvbiBvbiBNUFRDUCBzb2NrZXRzLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IGZ1bmN0aW9uIG1wdGNwX3NldHNvY2tvcHRfdjZfc2V0X3RjbGFzcyB0byBwcm9wYWdhdGUgdGhlIHRjbGFzcyB2YWx1ZSB0byBhbGwgc3ViZmxvd3MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01QVENQJiMzNDssCiAgICAmIzM0O01QVENQX0lQVjYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttcHRjcF9zZXRzb2Nrb3B0X3Y2X3NldF90Y2xhc3MmIzM0OywKICAgICYjMzQ7bXB0Y3Bfc2V0c29ja29wdF92NiYjMzQ7LAogICAgJiMzNDttcHRjcF9nZXRzb2Nrb3B0X3Y2JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3Igc2V0dGluZyBhbmQgZ2V0dGluZyB0aGUgSVBWNl9UQ0xBU1Mgc29ja2V0IG9wdGlvbiBvbiBNUFRDUCBzb2NrZXRzLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IGZ1bmN0aW9uIG1wdGNwX3NldHNvY2tvcHRfdjZfc2V0X3RjbGFzcyB0byBwcm9wYWdhdGUgdGhlIHRjbGFzcyB2YWx1ZSB0byBhbGwgc3ViZmxvd3MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0xM1QwOTo0OTowNy44ODIzNzcyNTZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjI1NTYyMzAyOTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTVBUQ1BcIixcbiAgICBcIk1QVENQX0lQVjZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtcHRjcF9zZXRzb2Nrb3B0X3Y2X3NldF90Y2xhc3NcIixcbiAgICBcIm1wdGNwX3NldHNvY2tvcHRfdjZcIixcbiAgICBcIm1wdGNwX2dldHNvY2tvcHRfdjZcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHNldHRpbmcgYW5kIGdldHRpbmcgdGhlIElQVjZfVENMQVNTIHNvY2tldCBvcHRpb24gb24gTVBUQ1Agc29ja2V0cy4gSXQgaW50cm9kdWNlcyBhIG5ldyBmdW5jdGlvbiBtcHRjcF9zZXRzb2Nrb3B0X3Y2X3NldF90Y2xhc3MgdG8gcHJvcGFnYXRlIHRoZSB0Y2xhc3MgdmFsdWUgdG8gYWxsIHN1YmZsb3dzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QwOTo0OTowNy44ODIzODM1MjZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzMzIzNDQwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDQxYzI1MzFhZDEzZTEzMTExNzc1ODM0ODdlNWI2MjcxZjk4OWU1ZDlcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBKdWwgMTMgMDk6NDk6MDUgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3NvY2tvcHQuYyBiL25ldC9tcHRjcC9zb2Nrb3B0LmNcXG5pbmRleCBmY2Y2ZmViMmE5ZWI1ZC4uZWRkZGFmZWJiOGRlZmMgMTAwNjQ0XFxuLS0tIGEvbmV0L21wdGNwL3NvY2tvcHQuY1xcbisrKyBiL25ldC9tcHRjcC9zb2Nrb3B0LmNcXG5AQCAtMzk0LDYgKzM5NCwzNSBAQCBzdGF0aWMgaW50IG1wdGNwX3NldHNvY2tvcHRfc29sX3NvY2tldChzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBpbnQgb3B0bmFtZSxcXG4gXFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IG1wdGNwX3NldHNvY2tvcHRfdjZfc2V0X3RjbGFzcyhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBpbnQgb3B0bmFtZSxcXG4rXFx0XFx0XFx0XFx0XFx0ICBzb2NrcHRyX3Qgb3B0dmFsLCB1bnNpZ25lZCBpbnQgb3B0bGVuKVxcbit7XFxuK1xcdHN0cnVjdCBtcHRjcF9zdWJmbG93X2NvbnRleHQgKnN1YmZsb3c7XFxuK1xcdHN0cnVjdCBzb2NrICpzayA9IChzdHJ1Y3Qgc29jayAqKW1zaztcXG4rXFx0aW50IGVyciwgdmFsO1xcbitcXG4rXFx0ZXJyID0gaXB2Nl9zZXRzb2Nrb3B0KHNrLCBTT0xfSVBWNiwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pO1xcbitcXG4rXFx0aWYgKGVyciAhPSAwKVxcbitcXHRcXHRyZXR1cm4gZXJyO1xcbitcXG4rXFx0bG9ja19zb2NrKHNrKTtcXG4rXFx0c29ja29wdF9zZXFfaW5jKG1zayk7XFxuK1xcdHZhbCA9IFJFQURfT05DRShpbmV0Nl9zayhzayktXFx1MDAzZXRjbGFzcyk7XFxuK1xcdG1wdGNwX2Zvcl9lYWNoX3N1YmZsb3cobXNrLCBzdWJmbG93KSB7XFxuK1xcdFxcdHN0cnVjdCBzb2NrICpzc2sgPSBtcHRjcF9zdWJmbG93X3RjcF9zb2NrKHN1YmZsb3cpO1xcbitcXHRcXHRib29sIHNsb3c7XFxuK1xcbitcXHRcXHRzbG93ID0gbG9ja19zb2NrX2Zhc3Qoc3NrKTtcXG4rXFx0XFx0aW5ldDZfc2soc3NrKS1cXHUwMDNldGNsYXNzID0gdmFsO1xcbitcXHRcXHRza19kc3RfcmVzZXQoc3NrKTtcXG4rXFx0XFx0dW5sb2NrX3NvY2tfZmFzdChzc2ssIHNsb3cpO1xcbitcXHR9XFxuK1xcdHJlbGVhc2Vfc29jayhzayk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gc3RhdGljIGludCBtcHRjcF9zZXRzb2Nrb3B0X3Y2KHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIGludCBvcHRuYW1lLFxcbiBcXHRcXHRcXHQgICAgICAgc29ja3B0cl90IG9wdHZhbCwgdW5zaWduZWQgaW50IG9wdGxlbilcXG4ge1xcbkBAIC00MzYsNiArNDY1LDggQEAgc3RhdGljIGludCBtcHRjcF9zZXRzb2Nrb3B0X3Y2KHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIGludCBvcHRuYW1lLFxcbiBcXG4gXFx0XFx0cmVsZWFzZV9zb2NrKHNrKTtcXG4gXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgSVBWNl9UQ0xBU1M6XFxuK1xcdFxcdHJldHVybiBtcHRjcF9zZXRzb2Nrb3B0X3Y2X3NldF90Y2xhc3MobXNrLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7XFxuIFxcdH1cXG4gXFxuIFxcdHJldHVybiByZXQ7XFxuQEAgLTE0ODUsNiArMTUxNiw5IEBAIHN0YXRpYyBpbnQgbXB0Y3BfZ2V0c29ja29wdF92NihzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBpbnQgb3B0bmFtZSxcXG4gXFx0c3RydWN0IHNvY2sgKnNrID0gKHZvaWQgKiltc2s7XFxuIFxcbiBcXHRzd2l0Y2ggKG9wdG5hbWUpIHtcXG4rXFx0Y2FzZSBJUFY2X1RDTEFTUzpcXG4rXFx0XFx0cmV0dXJuIG1wdGNwX3B1dF9pbnRfb3B0aW9uKG1zaywgb3B0dmFsLCBvcHRsZW4sXFxuK1xcdFxcdFxcdFxcdFxcdCAgICBSRUFEX09OQ0UoaW5ldDZfc2soc2spLVxcdTAwM2V0Y2xhc3MpKTtcXG4gXFx0Y2FzZSBJUFY2X1Y2T05MWTpcXG4gXFx0XFx0cmV0dXJuIG1wdGNwX3B1dF9pbnRfb3B0aW9uKG1zaywgb3B0dmFsLCBvcHRsZW4sXFxuIFxcdFxcdFxcdFxcdFxcdCAgICBzay1cXHUwMDNlc2tfaXB2Nm9ubHkpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QwOTo0OTowOC41MTg2NjE4NzlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyMTkxOTkzNjc3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNUFRDUFwiLFxuICAgIFwiTVBUQ1BfSVBWNlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1wdGNwX3NldHNvY2tvcHRfdjZfc2V0X3RjbGFzc1wiLFxuICAgIFwibXB0Y3Bfc2V0c29ja29wdF92NlwiLFxuICAgIFwibXB0Y3BfZ2V0c29ja29wdF92NlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3Igc2V0dGluZyBhbmQgZ2V0dGluZyB0aGUgSVBWNl9UQ0xBU1Mgc29ja2V0IG9wdGlvbiBvbiBNUFRDUCBzb2NrZXRzLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IGZ1bmN0aW9uIG1wdGNwX3NldHNvY2tvcHRfdjZfc2V0X3RjbGFzcyB0byBwcm9wYWdhdGUgdGhlIHRjbGFzcyB2YWx1ZSB0byBhbGwgc3ViZmxvd3MuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNDFjMjUzMWFkMTNlMTMxMTE3NzU4MzQ4N2U1YjYyNzFmOTg5ZTVkOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVsIDEzIDA5OjQ5OjA1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L21wdGNwL3NvY2tvcHQuYyBiL25ldC9tcHRjcC9zb2Nrb3B0LmNcbmluZGV4IGZjZjZmZWIyYTllYjVkLi5lZGRkYWZlYmI4ZGVmYyAxMDA2NDRcbi0tLSBhL25ldC9tcHRjcC9zb2Nrb3B0LmNcbisrKyBiL25ldC9tcHRjcC9zb2Nrb3B0LmNcbkBAIC0zOTQsNiArMzk0LDM1IEBAIHN0YXRpYyBpbnQgbXB0Y3Bfc2V0c29ja29wdF9zb2xfc29ja2V0KHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIGludCBvcHRuYW1lLFxuIFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIH1cbiBcbitzdGF0aWMgaW50IG1wdGNwX3NldHNvY2tvcHRfdjZfc2V0X3RjbGFzcyhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBpbnQgb3B0bmFtZSxcbitcdFx0XHRcdFx0ICBzb2NrcHRyX3Qgb3B0dmFsLCB1bnNpZ25lZCBpbnQgb3B0bGVuKVxuK3tcbitcdHN0cnVjdCBtcHRjcF9zdWJmbG93X2NvbnRleHQgKnN1YmZsb3c7XG4rXHRzdHJ1Y3Qgc29jayAqc2sgPSAoc3RydWN0IHNvY2sgKiltc2s7XG4rXHRpbnQgZXJyLCB2YWw7XG4rXG4rXHRlcnIgPSBpcHY2X3NldHNvY2tvcHQoc2ssIFNPTF9JUFY2LCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7XG4rXG4rXHRpZiAoZXJyICE9IDApXG4rXHRcdHJldHVybiBlcnI7XG4rXG4rXHRsb2NrX3NvY2soc2spO1xuK1x0c29ja29wdF9zZXFfaW5jKG1zayk7XG4rXHR2YWwgPSBSRUFEX09OQ0UoaW5ldDZfc2soc2spLVx1MDAzZXRjbGFzcyk7XG4rXHRtcHRjcF9mb3JfZWFjaF9zdWJmbG93KG1zaywgc3ViZmxvdykge1xuK1x0XHRzdHJ1Y3Qgc29jayAqc3NrID0gbXB0Y3Bfc3ViZmxvd190Y3Bfc29jayhzdWJmbG93KTtcbitcdFx0Ym9vbCBzbG93O1xuK1xuK1x0XHRzbG93ID0gbG9ja19zb2NrX2Zhc3Qoc3NrKTtcbitcdFx0aW5ldDZfc2soc3NrKS1cdTAwM2V0Y2xhc3MgPSB2YWw7XG4rXHRcdHNrX2RzdF9yZXNldChzc2spO1xuK1x0XHR1bmxvY2tfc29ja19mYXN0KHNzaywgc2xvdyk7XG4rXHR9XG4rXHRyZWxlYXNlX3NvY2soc2spO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIHN0YXRpYyBpbnQgbXB0Y3Bfc2V0c29ja29wdF92NihzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBpbnQgb3B0bmFtZSxcbiBcdFx0XHQgICAgICAgc29ja3B0cl90IG9wdHZhbCwgdW5zaWduZWQgaW50IG9wdGxlbilcbiB7XG5AQCAtNDM2LDYgKzQ2NSw4IEBAIHN0YXRpYyBpbnQgbXB0Y3Bfc2V0c29ja29wdF92NihzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBpbnQgb3B0bmFtZSxcbiBcbiBcdFx0cmVsZWFzZV9zb2NrKHNrKTtcbiBcdFx0YnJlYWs7XG4rXHRjYXNlIElQVjZfVENMQVNTOlxuK1x0XHRyZXR1cm4gbXB0Y3Bfc2V0c29ja29wdF92Nl9zZXRfdGNsYXNzKG1zaywgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pO1xuIFx0fVxuIFxuIFx0cmV0dXJuIHJldDtcbkBAIC0xNDg1LDYgKzE1MTYsOSBAQCBzdGF0aWMgaW50IG1wdGNwX2dldHNvY2tvcHRfdjYoc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgaW50IG9wdG5hbWUsXG4gXHRzdHJ1Y3Qgc29jayAqc2sgPSAodm9pZCAqKW1zaztcbiBcbiBcdHN3aXRjaCAob3B0bmFtZSkge1xuK1x0Y2FzZSBJUFY2X1RDTEFTUzpcbitcdFx0cmV0dXJuIG1wdGNwX3B1dF9pbnRfb3B0aW9uKG1zaywgb3B0dmFsLCBvcHRsZW4sXG4rXHRcdFx0XHRcdCAgICBSRUFEX09OQ0UoaW5ldDZfc2soc2spLVx1MDAzZXRjbGFzcykpO1xuIFx0Y2FzZSBJUFY2X1Y2T05MWTpcbiBcdFx0cmV0dXJuIG1wdGNwX3B1dF9pbnRfb3B0aW9uKG1zaywgb3B0dmFsLCBvcHRsZW4sXG4gXHRcdFx0XHRcdCAgICBzay1cdTAwM2Vza19pcHY2b25seSk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QwOTo0OTowOC41MTg2NjQ0ODlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NDIzMjA2MDk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIE1QVENQIElQVjZfVENMQVNTIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBhaW1lZCBhdCBleHRlbmRpbmcgTVBUQ1AgZnVuY3Rpb25hbGl0eSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBJUHY2IHRyYWZmaWMgY2xhc3MgaGFuZGxpbmcuIEl0IGxvb2tzIGxpa2UgaXQncyBpbnRyb2R1Y2luZyB0aGUgYWJpbGl0eSB0byBzZXQgYW5kIHJldHJpZXZlIHRoZSBgSVBWNl9UQ0xBU1NgIHNvY2tldCBvcHRpb24g4oCTIGEgdmFsdWFibGUgYWRkaXRpb24uIFRoZSBjb3JlIG1vZGlmaWNhdGlvbiBzZWVtcyB0byByZXNpZGUgd2l0aGluIGBuZXQvbXB0Y3Avc29ja29wdC5jYCwgd2hpY2ggbWFrZXMgc2Vuc2UgYXMgdGhpcyBmaWxlIG9mdGVuIGhhbmRsZXMgc29ja2V0LWxldmVsIGNvbmZpZ3VyYXRpb25zIGZvciB0aGUgcHJvdG9jb2wuXG5cbkkgc2VlIGl0J3MgYWRkZWQgb3IgbW9kaWZpZWQgZnVuY3Rpb25zOiBgbXB0Y3Bfc2V0c29ja29wdF92Nl9zZXRfdGNsYXNzYCwgYG1wdGNwX3NldHNvY2tvcHRfdjZgLCBhbmQgYG1wdGNwX2dldHNvY2tvcHRfdjZgLiBUaGF0J3MgdGhlIGV4cGVjdGVkIGZvb3RwcmludCwgc2V0dGluZyBhbmQgZ2V0dGluZywgYWxvbmcgd2l0aCB0aGUgd3JhcHBlci4gSSdsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBidXQgYXQgZmlyc3QgZ2xhbmNlLCBpdCBhcHBlYXJzIHNvdW5kLiBJJ2xsIHRha2UgYSBxdWljayBsb29rIGF0IHRoZSBjb250ZXh0IGFuZCB0aGUgc3Vycm91bmRpbmcgY29kZSwgYW5kIG9mIGNvdXJzZSwgSSBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIGNvbmZpZ3VyYXRpb24gZm9yIE1QVENQIGl0c2VsZiB0byBlbnN1cmUgaXQncyBwcm9wZXJseSBlbmFibGVkIGFuZCBpbnRlZ3JhdGVkIHdpdGhpbiB0aGUgYnVpbGQgc3lzdGVtLiBUaGVuIEkgY2FuIGdldCBpbnRvIHRoZSByZWFsIGRldGFpbHMgb2YgdGhlIGltcGxlbWVudGF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzk3LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMDk6NDk6MTQuOTQxODcyNTc1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwMTY2ODcyMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTVBUQ1BcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21wdGNwL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21wdGNwL0tjb25maWctMS1cXG5uZXQvbXB0Y3AvS2NvbmZpZzoyOmNvbmZpZyBNUFRDUFxcbm5ldC9tcHRjcC9LY29uZmlnLTMtXFx0Ym9vbCBcXFwiTVBUQ1A6IE11bHRpcGF0aCBUQ1BcXFwiXFxuLS1cXG5uZXQvbXB0Y3AvS2NvbmZpZz0xNj1jb25maWcgSU5FVF9NUFRDUF9ESUFHXFxuLS1cXG5uZXQvbXB0Y3AvS2NvbmZpZy0xOS1cXG5uZXQvbXB0Y3AvS2NvbmZpZzoyMDpjb25maWcgTVBUQ1BfSVBWNlxcbm5ldC9tcHRjcC9LY29uZmlnLTIxLVxcdGJvb2wgXFxcIk1QVENQOiBJUHY2IHN1cHBvcnQgZm9yIE11bHRpcGF0aCBUQ1BcXFwiXFxuLS1cXG5uZXQvbXB0Y3AvS2NvbmZpZy0yNC1cXG5uZXQvbXB0Y3AvS2NvbmZpZzoyNTpjb25maWcgTVBUQ1BfS1VOSVRfVEVTVFxcbm5ldC9tcHRjcC9LY29uZmlnLTI2LVxcdHRyaXN0YXRlIFxcXCJUaGlzIGJ1aWxkcyB0aGUgTVBUQ1AgS1VuaXQgdGVzdHNcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMDk6NDk6MTUuNDQzNTQ2MjU4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA5MzM0ODY1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1QVENQIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgYE1QVENQYCBhbmQgYE1QVENQX0lQVjZgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZyBjcnVjaWFsIGhlcmUuIEl0J3MgdXN1YWxseSBhIGdvb2QgcHJhY3RpY2UgdG8gdGhvcm91Z2hseSByZXZpZXcgYWxsIGF2YWlsYWJsZSBvcHRpb25zLCBhcyBhIGZpZWxkIGV4cGVydCwgdG8gZ3VhcmFudGVlIEkgZnVsbHkgdW5kZXJzdGFuZCBhbGwgdGhlIHN5c3RlbSdzIGNhcGFiaWxpdGllcy5cblxuTm93LCBJIHNlZSB0aGUgcGF0Y2ggaXMgc3BlY2lmaWNhbGx5IG1vZGlmeWluZyBgbXB0Y3Bfc2V0c29ja29wdF92NmAgYW5kIGBtcHRjcF9nZXRzb2Nrb3B0X3Y2YC4gQWgsIHRoaXMgaXMgaW1tZWRpYXRlbHkgaW5zaWdodGZ1bC4gR2l2ZW4gdGhlc2UgbW9kaWZpY2F0aW9ucywgYW5kIHRoZSBuYW1pbmcgY29udmVudGlvbiwgdGhlc2UgZnVuY3Rpb25zIGFyZSBhbG1vc3QgY2VydGFpbmx5IGNvbXBpbGVkIGNvbmRpdGlvbmFsbHksIGJhc2VkIG9uIHRoZSBgTVBUQ1BfSVBWNmAgZmxhZyBiZWluZyBlbmFibGVkLiBUaGlzIHRlbGxzIG1lIHRoYXQgSVBWNiBpcyBpbnRlZ3JhdGVkIHdpdGggdGhlIGBNUFRDUGAgZmVhdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzAwMiwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDA5OjQ5OjE5LjUzNjg5NjQ0NVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTQwODU4MjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibXB0Y3Bfc2V0c29ja29wdF92NlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbXB0Y3Avc29ja29wdC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tcHRjcC9zb2Nrb3B0LmM9MzAwPXN0YXRpYyBpbnQgbXB0Y3Bfc2V0c29ja29wdF9zb2xfc29ja2V0KHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIGludCBvcHRuYW1lLFxcbi0tXFxubmV0L21wdGNwL3NvY2tvcHQuYy0zOTYtXFxubmV0L21wdGNwL3NvY2tvcHQuYzozOTc6c3RhdGljIGludCBtcHRjcF9zZXRzb2Nrb3B0X3Y2X3NldF90Y2xhc3Moc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgaW50IG9wdG5hbWUsXFxubmV0L21wdGNwL3NvY2tvcHQuYy0zOTgtXFx0XFx0XFx0XFx0XFx0ICBzb2NrcHRyX3Qgb3B0dmFsLCB1bnNpZ25lZCBpbnQgb3B0bGVuKVxcbi0tXFxubmV0L21wdGNwL3NvY2tvcHQuYy00MjUtXFxubmV0L21wdGNwL3NvY2tvcHQuYzo0MjY6c3RhdGljIGludCBtcHRjcF9zZXRzb2Nrb3B0X3Y2KHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIGludCBvcHRuYW1lLFxcbm5ldC9tcHRjcC9zb2Nrb3B0LmMtNDI3LVxcdFxcdFxcdCAgICAgICBzb2NrcHRyX3Qgb3B0dmFsLCB1bnNpZ25lZCBpbnQgb3B0bGVuKVxcbi0tXFxubmV0L21wdGNwL3NvY2tvcHQuYy00NjgtXFx0Y2FzZSBJUFY2X1RDTEFTUzpcXG5uZXQvbXB0Y3Avc29ja29wdC5jOjQ2OTpcXHRcXHRyZXR1cm4gbXB0Y3Bfc2V0c29ja29wdF92Nl9zZXRfdGNsYXNzKG1zaywgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pO1xcbm5ldC9tcHRjcC9zb2Nrb3B0LmMtNDcwLVxcdH1cXG4tLVxcbm5ldC9tcHRjcC9zb2Nrb3B0LmM9OTM4PWludCBtcHRjcF9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcXG4tLVxcbm5ldC9tcHRjcC9zb2Nrb3B0LmMtOTY3LVxcdGlmIChsZXZlbCA9PSBTT0xfSVBWNilcXG5uZXQvbXB0Y3Avc29ja29wdC5jOjk2ODpcXHRcXHRyZXR1cm4gbXB0Y3Bfc2V0c29ja29wdF92Nihtc2ssIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTtcXG5uZXQvbXB0Y3Avc29ja29wdC5jLTk2OS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMDk6NDk6MTkuNjUwOTg2MzA2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDY3NjI1MTM1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uIGluIHRoZSBNUFRDUCBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBgbXB0Y3Bfc2V0c29ja29wdF92NmAgZnVuY3Rpb24sIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCdzIGxvY2F0ZWQgaW4gYG5ldC9tcHRjcC9zb2Nrb3B0LmNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29tcGlsYXRpb24gcHJvY2Vzcy4gTXkgcHJpbWFyeSBjb25jZXJuIGhlcmUgaXMgZGV0ZXJtaW5pbmcgd2hldGhlciB0aGF0IGZpbGUgaXRzZWxmIGlzIGNvbXBpbGVkIGNvbmRpdGlvbmFsbHksIG9yIGlmIHRoZSBzcGVjaWZpYyBmdW5jdGlvbiwgYG1wdGNwX3NldHNvY2tvcHRfdjZgLCBpcyBndWFyZGVkIGJ5IGEgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZSwgbGlrZSBhbiBgI2lmZGVmIENPTkZJR19NUFRDUF9JUFY2YC4gVW5kZXJzdGFuZGluZyB0aGlzIHdpbGwgYmUgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIGhvdyBNUFRDUCdzIElQdjYgc3VwcG9ydCBpcyBlbmFibGVkIHdpdGhpbiB0aGUga2VybmVsLiBJIG5lZWQgdG8gY2hlY2sgZm9yIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiB0aGF0IGFmZmVjdHMgdGhlIGV4aXN0ZW5jZSBvZiB0aGlzIGZ1bmN0aW9uLiBUaGF0IGlzIG15IG5leHQgc3RlcC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzc0MiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDA5OjQ5OjI0LjMyNzI0MTQxWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExOTA3MDQ3MSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX01QVENQX0lQVjZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21wdGNwL3NvY2tvcHQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMDk6NDk6MjQuNDQ2MzIxNTAxWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE1MzcxMTQ3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgRGVlcCBpbnRvIE1QVENQIGFuZCBJUHY2IEludGVncmF0aW9uKipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSB3YXMgdW5kZXIgdGhlIGltcHJlc3Npb24gdGhhdCB0aGUgTVBUQ1Agc29ja29wdCBjb2RlIGluIGBuZXQvbXB0Y3Avc29ja29wdC5jYCB3b3VsZCBkZWZpbml0ZWx5IGFjY291bnQgZm9yIElQdjYsIGVzcGVjaWFsbHkgd2l0aCB0aGUgcG90ZW50aWFsIGZvciBkdWFsLXN0YWNrIGNvbmZpZ3VyYXRpb25zLiBJIG5lZWQgdG8gdmVyaWZ5IGlmIHRoZSBJUHY2IGNvbmZpZ3VyYXRpb24gaXMgZW5hYmxlZCwgYnV0IHRoZSBmYWN0IHRoYXQgSSBkb24ndCBzZWUgYENPTkZJR19NUFRDUF9JUFY2YCBvdXRyaWdodCBpcyBtYWtpbmcgbWUgc2Vjb25kIGd1ZXNzIHRoaW5ncy4gTGV0J3Mgbm90IG1ha2UgYXNzdW1wdGlvbnMgaGVyZS4gVG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJ20gZ29pbmcgdG8gc2NhbiB0aGUgYG5ldC9tcHRjcC9zb2Nrb3B0LmNgIHNvdXJjZSBjb2RlLCBsb29raW5nIHNwZWNpZmljYWxseSBmb3IgYW55IGAjaWZkZWYgQ09ORklHX0lQVjZgIGRpcmVjdGl2ZXMsIG9yIGFueSBvdGhlciBjb25kaXRpb25hbCBjaGVja3MgdGhhdCBtaWdodCBzdWdnZXN0IGhvdyBJUHY2IHN1cHBvcnQgaXMgaGFuZGxlZCB3aXRoaW4gdGhlIHNvY2tvcHQgaW1wbGVtZW50YXRpb24uIFRoaXMgaXMgZ29pbmcgdG8gYmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGludGVycGxheS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDAzMywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDA5OjQ5OjI4LjYwMDAzNTYxMVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzA4NzE4MjM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19JUFY2XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tcHRjcC9zb2Nrb3B0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21wdGNwL3NvY2tvcHQuYz0xMjAyPXN0YXRpYyB2b2lkIG1wdGNwX2dldF9zdWJfYWRkcnMoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXB0Y3Bfc3ViZmxvd19hZGRycyAqYSlcXG4tLVxcbm5ldC9tcHRjcC9zb2Nrb3B0LmMtMTIxOC1cXHRcXHRhLVxcdTAwM2VzaW5fcmVtb3RlLnNpbl9hZGRyLnNfYWRkciA9IGluZXQtXFx1MDAzZWluZXRfZGFkZHI7XFxubmV0L21wdGNwL3NvY2tvcHQuYzoxMjE5OiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbm5ldC9tcHRjcC9zb2Nrb3B0LmMtMTIyMC1cXHR9IGVsc2UgaWYgKHNrLVxcdTAwM2Vza19mYW1pbHkgPT0gQUZfSU5FVDYpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMDk6NDk6MjguOTA4NzY0MzE3WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY0NjU5NzE1MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZS4gTXkgZmlyc3QgdGhvdWdodCBpczpcblxuKipDaGVja2luZyBDb25kaXRpb25hbCBDb21waWxhdGlvbiBvZiBgbXB0Y3Bfc2V0c29ja29wdF92NmAqKlxuXG5JIG5lZWQgdG8gY29uZmlybSBzb21ldGhpbmcgY3J1Y2lhbCBhYm91dCB0aGUgY29kZTogaXMgdGhlIGZ1bmN0aW9uIGBtcHRjcF9zZXRzb2Nrb3B0X3Y2YCBjb21waWxlZCB1bmNvbmRpdGlvbmFsbHk/IEluIG90aGVyIHdvcmRzLCBpcyBpdCBhbHdheXMgaW5jbHVkZWQgaW4gdGhlIGJ1aWxkLCByZWdhcmRsZXNzIG9mIHRoZSBjb25maWd1cmF0aW9uIG9yIHBsYXRmb3JtPyBUaGlzIGlzIGEgZnVuZGFtZW50YWwgcXVlc3Rpb24gZm9yIGl0cyBwb3J0YWJpbGl0eSBhbmQgaG93IGl0IGZ1bmN0aW9ucyBhcyBhIGNvbXBvbmVudCBvZiB0aGUgbGFyZ2VyIGNvZGUgYmFzZS4gSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiBvZiBpdHMgY29tcGlsYXRpb24gc3RyYXRlZ3kuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0NzgsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QwOTo0OTozNS4zNzQ3MzgyNFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA5MjgzMTkzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1wdGNwX3NldHNvY2tvcHRfdjZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21wdGNwL3NvY2tvcHQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbXB0Y3Avc29ja29wdC5jPTMwMD1zdGF0aWMgaW50IG1wdGNwX3NldHNvY2tvcHRfc29sX3NvY2tldChzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBpbnQgb3B0bmFtZSxcXG4tLVxcbm5ldC9tcHRjcC9zb2Nrb3B0LmMtMzk2LVxcbm5ldC9tcHRjcC9zb2Nrb3B0LmM6Mzk3OnN0YXRpYyBpbnQgbXB0Y3Bfc2V0c29ja29wdF92Nl9zZXRfdGNsYXNzKHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIGludCBvcHRuYW1lLFxcbm5ldC9tcHRjcC9zb2Nrb3B0LmMtMzk4LVxcdFxcdFxcdFxcdFxcdCAgc29ja3B0cl90IG9wdHZhbCwgdW5zaWduZWQgaW50IG9wdGxlbilcXG4tLVxcbm5ldC9tcHRjcC9zb2Nrb3B0LmMtNDI1LVxcbm5ldC9tcHRjcC9zb2Nrb3B0LmM6NDI2OnN0YXRpYyBpbnQgbXB0Y3Bfc2V0c29ja29wdF92NihzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBpbnQgb3B0bmFtZSxcXG5uZXQvbXB0Y3Avc29ja29wdC5jLTQyNy1cXHRcXHRcXHQgICAgICAgc29ja3B0cl90IG9wdHZhbCwgdW5zaWduZWQgaW50IG9wdGxlbilcXG4tLVxcbm5ldC9tcHRjcC9zb2Nrb3B0LmMtNDY4LVxcdGNhc2UgSVBWNl9UQ0xBU1M6XFxubmV0L21wdGNwL3NvY2tvcHQuYzo0Njk6XFx0XFx0cmV0dXJuIG1wdGNwX3NldHNvY2tvcHRfdjZfc2V0X3RjbGFzcyhtc2ssIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTtcXG5uZXQvbXB0Y3Avc29ja29wdC5jLTQ3MC1cXHR9XFxuLS1cXG5uZXQvbXB0Y3Avc29ja29wdC5jPTkzOD1pbnQgbXB0Y3Bfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXFxuLS1cXG5uZXQvbXB0Y3Avc29ja29wdC5jLTk2Ny1cXHRpZiAobGV2ZWwgPT0gU09MX0lQVjYpXFxubmV0L21wdGNwL3NvY2tvcHQuYzo5Njg6XFx0XFx0cmV0dXJuIG1wdGNwX3NldHNvY2tvcHRfdjYobXNrLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7XFxubmV0L21wdGNwL3NvY2tvcHQuYy05NjktXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDA5OjQ5OjM1LjQ4NDAyNjk3M1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTY1ODA2NzI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk1QVENQIENvbmZpZ3VyYXRpb24gQ29udW5kcnVtKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgbXB0Y3Bfc2V0c29ja29wdF92NmAgZnVuY3Rpb24gYW5kIHNvbWV0aGluZydzIG5vdCBxdWl0ZSByaWdodC4gSXQgc2VlbXMgdG8gYmUgZ2V0dGluZyBjb21waWxlZCByZWdhcmRsZXNzLCB3aGljaCBpcyBhIGJpdCBzdHJhbmdlLCBidXQgSSBzdXNwZWN0IGl0J3MgZGVwZW5kZW50IG9uIHNvbWUgb3RoZXIgZmxhZyB0byBhY3R1YWxseSAqd29yayouIE15IGd1dCBzYXlzIGl0IHByb2JhYmx5IG5lZWRzIGVpdGhlciBgTVBUQ1BfSVBWNmAgdG8gYmUgZW5hYmxlZCwgb3IgcGVyaGFwcyB0aGUgd2hvbGUgYE1QVENQYCBmZWF0dXJlIGlzIHJlbGlhbnQgb24gSVB2NiBiZWluZyBwcmVzZW50LiBUbyBiZSBjZXJ0YWluLCBJIG5lZWQgdG8gY2hlY2sgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBUaGUgYEtjb25maWdgIGZpbGVzIGFyZSBhbHdheXMgdGhlIGJlc3QgcGxhY2UgdG8gZmluZCB0aGVzZSBraW5kcyBvZiBkZXBlbmRlbmNpZXMuIExldCBtZSBuYXZpZ2F0ZSB0byBgbmV0L21wdGNwL0tjb25maWdgIGFuZCBzZWUgd2hhdCB0aGUgdHJ1dGggb2YgdGhlIG1hdHRlciBpcy4gVGhhdCBzaG91bGQgY2xlYXIgdGhpcyB1cCBwcmV0dHkgcXVpY2tseS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTEwNCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDA5OjQ5OjM5LjQ0OTgzNjAyOVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjk2MTgyNjM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNUFRDUF9JUFY2XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tcHRjcC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tcHRjcC9LY29uZmlnPTE2PWNvbmZpZyBJTkVUX01QVENQX0RJQUdcXG4tLVxcbm5ldC9tcHRjcC9LY29uZmlnLTE5LVxcbm5ldC9tcHRjcC9LY29uZmlnOjIwOmNvbmZpZyBNUFRDUF9JUFY2XFxubmV0L21wdGNwL0tjb25maWctMjEtXFx0Ym9vbCBcXFwiTVBUQ1A6IElQdjYgc3VwcG9ydCBmb3IgTXVsdGlwYXRoIFRDUFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMDk6NDk6MzkuNzQ2MDIyODY3WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNzkyNzQzMTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBNUFRDUCBLY29uZmlnKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MgYW5kIGNyYWNrIG9wZW4gdGhlIGBuZXQvbXB0Y3AvS2NvbmZpZ2AgZmlsZS4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIE11bHRwYXRoIFRDUCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXZhaWxhYmxlIGluIHRoZSBrZXJuZWwuIFRoaXMgY29uZmlnIGZpbGUgaXMgdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIgd2hlbiBpdCBjb21lcyB0byBlbmFibGluZyBhbmQgY3VzdG9taXppbmcgTVBUQ1AncyBiZWhhdmlvci4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBzZWVpbmcgd2hhdCBsZXZlbCBvZiBjb250cm9sIGl0IHByb3ZpZGVzIG92ZXIgZGlmZmVyZW50IGZlYXR1cmVzIOKAkyB0aGluZ3MgbGlrZSBwYXRoIG1hbmFnZW1lbnQsIGNvbmdlc3Rpb24gY29udHJvbCBhbGdvcml0aG1zIChhbmQgdGhlIHBvdGVudGlhbCB0byBhZGQgY3VzdG9tIG9uZXMpLCBzdWJmbG93IGVzdGFibGlzaG1lbnQsIGFuZCBob3cgaXQgaGFuZGxlcyBkaWZmZXJlbnQgbmV0d29yayBlbnZpcm9ubWVudHMuIEknbSBleHBlY3RpbmcgdG8gc2VlIGEgc3RydWN0dXJlZCBicmVha2Rvd24gb2YgZGVwZW5kZW5jaWVzIGFuZCBkZWZhdWx0IHZhbHVlcywgd2hpY2ggaGVscHMgdW5kZXJzdGFuZCBob3cgdGhlIGRpZmZlcmVudCBwaWVjZXMgb2YgTVBUQ1AgZml0IHRvZ2V0aGVyLiBBcmUgdGhlcmUgYW55IGNvbmRpdGlvbmFsIGRlcGVuZGVuY2llcz8gQXJlIGFueSBmZWF0dXJlcyBleHBlcmltZW50YWwgYW5kIHRodXMgYmVoaW5kIGEgY29uZmlnIGZsYWc/IEknbSBob3BpbmcgaXQgY2xlYXJseSBtYXBzIG91dCB0aGUgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIHRoZSB2YXJpb3VzIE1QVENQIGNvbXBvbmVudHMgYW5kIHRoZWlyIHJlc3BlY3RpdmUgY29tcGlsZS10aW1lIHNldHRpbmdzLiBJdCdzIHRpbWUgdG8gc2VlIHdoYXQgdGhpcyBLY29uZmlnIGZpbGUgaG9sZHMhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0NjMsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QwOTo0OTo0My4xMjUyOTkyNDdaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQxNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L21wdGNwL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHRcXG4gICAyOlxcdGNvbmZpZyBNUFRDUFxcbiAgIDM6XFx0XFx0Ym9vbCBcXFwiTVBUQ1A6IE11bHRpcGF0aCBUQ1BcXFwiXFxuICAgNDpcXHRcXHRkZXBlbmRzIG9uIElORVRcXG4gICA1OlxcdFxcdHNlbGVjdCBTS0JfRVhURU5TSU9OU1xcbiAgIDY6XFx0XFx0c2VsZWN0IENSWVBUT19MSUJfU0hBMjU2XFxuICAgNzpcXHRcXHRzZWxlY3QgQ1JZUFRPX0xJQl9VVElMU1xcbiAgIDg6XFx0XFx0aGVscFxcbiAgIDk6XFx0XFx0ICBNdWx0aXBhdGggVENQIChNUFRDUCkgY29ubmVjdGlvbnMgc2VuZCBhbmQgcmVjZWl2ZSBkYXRhIG92ZXIgbXVsdGlwbGVcXG4gIDEwOlxcdFxcdCAgc3ViZmxvd3MgaW4gb3JkZXIgdG8gdXRpbGl6ZSBtdWx0aXBsZSBuZXR3b3JrIHBhdGhzLiBFYWNoIHN1YmZsb3dcXG4gIDExOlxcdFxcdCAgdXNlcyB0aGUgVENQIHByb3RvY29sLCBhbmQgVENQIG9wdGlvbnMgY2FycnkgaGVhZGVyIGluZm9ybWF0aW9uIGZvclxcbiAgMTI6XFx0XFx0ICBNUFRDUC5cXG4gIDEzOlxcdFxcbiAgMTQ6XFx0aWYgTVBUQ1BcXG4gIDE1OlxcdFxcbiAgMTY6XFx0Y29uZmlnIElORVRfTVBUQ1BfRElBR1xcbiAgMTc6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUX0RJQUdcXG4gIDE4OlxcdFxcdGRlZl90cmlzdGF0ZSBJTkVUX0RJQUdcXG4gIDE5OlxcdFxcbiAgMjA6XFx0Y29uZmlnIE1QVENQX0lQVjZcXG4gIDIxOlxcdFxcdGJvb2wgXFxcIk1QVENQOiBJUHY2IHN1cHBvcnQgZm9yIE11bHRpcGF0aCBUQ1BcXFwiXFxuICAyMjpcXHRcXHRkZXBlbmRzIG9uIElQVjY9eVxcbiAgMjM6XFx0XFx0ZGVmYXVsdCB5XFxuICAyNDpcXHRcXG4gIDI1OlxcdGNvbmZpZyBNUFRDUF9LVU5JVF9URVNUXFxuICAyNjpcXHRcXHR0cmlzdGF0ZSBcXFwiVGhpcyBidWlsZHMgdGhlIE1QVENQIEtVbml0IHRlc3RzXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuICAyNzpcXHRcXHRkZXBlbmRzIG9uIEtVTklUXFxuICAyODpcXHRcXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xcbiAgMjk6XFx0XFx0aGVscFxcbiAgMzA6XFx0XFx0ICBDdXJyZW50bHkgY292ZXJzIHRoZSBNUFRDUCBjcnlwdG8gYW5kIHRva2VuIGhlbHBlcnMuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDA5OjQ5OjQzLjEyNTM3NTE0N1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODc5Njg5MDg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqTVBUQ1AgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5BbHJpZ2h0LCBzbyBJIHNlZSBgTVBUQ1BgIGFuZCBgTVBUQ1BfSVBWNmAgYXMgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIGhlcmUuIE5hdHVyYWxseSwgbXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdGhhdCBgTVBUQ1BfSVBWNmAgaXMgcHJvYmFibHkgY29udGluZ2VudCBvbiBgSVBWNj15YCBiZWluZyBzZXQuIFRoYXQgbWFrZXMgaW50dWl0aXZlIHNlbnNlOyB3ZSBjYW4ndCBlbmFibGUgSVB2Ni1zcGVjaWZpYyBNUFRDUCBmZWF0dXJlcyB3aXRob3V0IElQdjYgaXRzZWxmLlxuXG5Ob3csIEkgbmVlZCB0byBjb25maXJtIHNvbWV0aGluZzogSSBuZWVkIHRvIHZlcmlmeSB0aGF0IHRoZSBgbXB0Y3Bfc2V0c29ja29wdF92NmAgZnVuY3Rpb25hbGl0eSBpcyBpbmRlZWQgcHJvdGVjdGVkIGJ5IHRoYXQgYCNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KWAgY29uZGl0aW9uYWwgd2l0aGluIGBuZXQvbXB0Y3Avc29ja29wdC5jYC4gSXQncyBhIGZ1bmRhbWVudGFsIGNoZWNrLCBtYWtpbmcgc3VyZSB0aGUgSVB2Ni1zcGVjaWZpYyBzb2NrZXQgb3B0aW9ucyBhcmVuJ3QgYWNjaWRlbnRhbGx5IGV4cG9zZWQgd2hlbiBJUHY2IHN1cHBvcnQgaXMgZGlzYWJsZWQuIEknbGwgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhlIGNvZGUgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYxMjYsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDA5OjQ5OjQ4LjAwNTA2NjM5NVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzM4MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L21wdGNwL3NvY2tvcHQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MjAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0MjA6XFx0XFx0fVxcbiA0MjE6XFx0XFx0cmVsZWFzZV9zb2NrKHNrKTtcXG4gNDIyOlxcdFxcbiA0MjM6XFx0XFx0cmV0dXJuIDA7XFxuIDQyNDpcXHR9XFxuIDQyNTpcXHRcXG4gNDI2OlxcdHN0YXRpYyBpbnQgbXB0Y3Bfc2V0c29ja29wdF92NihzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLCBpbnQgb3B0bmFtZSxcXG4gNDI3OlxcdFxcdFxcdFxcdCAgICAgICBzb2NrcHRyX3Qgb3B0dmFsLCB1bnNpZ25lZCBpbnQgb3B0bGVuKVxcbiA0Mjg6XFx0e1xcbiA0Mjk6XFx0XFx0c3RydWN0IHNvY2sgKnNrID0gKHN0cnVjdCBzb2NrICopbXNrO1xcbiA0MzA6XFx0XFx0aW50IHJldCA9IC1FT1BOT1RTVVBQO1xcbiA0MzE6XFx0XFx0c3RydWN0IHNvY2sgKnNzaztcXG4gNDMyOlxcdFxcbiA0MzM6XFx0XFx0c3dpdGNoIChvcHRuYW1lKSB7XFxuIDQzNDpcXHRcXHRjYXNlIElQVjZfVjZPTkxZOlxcbiA0MzU6XFx0XFx0Y2FzZSBJUFY2X1RSQU5TUEFSRU5UOlxcbiA0MzY6XFx0XFx0Y2FzZSBJUFY2X0ZSRUVCSU5EOlxcbiA0Mzc6XFx0XFx0XFx0bG9ja19zb2NrKHNrKTtcXG4gNDM4OlxcdFxcdFxcdHNzayA9IF9fbXB0Y3Bfbm1wY19zayhtc2spO1xcbiA0Mzk6XFx0XFx0XFx0aWYgKElTX0VSUihzc2spKSB7XFxuIDQ0MDpcXHRcXHRcXHRcXHRyZWxlYXNlX3NvY2soc2spO1xcbiA0NDE6XFx0XFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIoc3NrKTtcXG4gNDQyOlxcdFxcdFxcdH1cXG4gNDQzOlxcdFxcbiA0NDQ6XFx0XFx0XFx0cmV0ID0gdGNwX3NldHNvY2tvcHQoc3NrLCBTT0xfSVBWNiwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pO1xcbiA0NDU6XFx0XFx0XFx0aWYgKHJldCAhPSAwKSB7XFxuIDQ0NjpcXHRcXHRcXHRcXHRyZWxlYXNlX3NvY2soc2spO1xcbiA0NDc6XFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gNDQ4OlxcdFxcdFxcdH1cXG4gNDQ5OlxcdFxcbiA0NTA6XFx0XFx0XFx0c29ja29wdF9zZXFfaW5jKG1zayk7XFxuIDQ1MTpcXHRcXG4gNDUyOlxcdFxcdFxcdHN3aXRjaCAob3B0bmFtZSkge1xcbiA0NTM6XFx0XFx0XFx0Y2FzZSBJUFY2X1Y2T05MWTpcXG4gNDU0OlxcdFxcdFxcdFxcdHNrLVxcdTAwM2Vza19pcHY2b25seSA9IHNzay1cXHUwMDNlc2tfaXB2Nm9ubHk7XFxuIDQ1NTpcXHRcXHRcXHRcXHRicmVhaztcXG4gNDU2OlxcdFxcdFxcdGNhc2UgSVBWNl9UUkFOU1BBUkVOVDpcXG4gNDU3OlxcdFxcdFxcdFxcdGluZXRfYXNzaWduX2JpdChUUkFOU1BBUkVOVCwgc2ssXFxuIDQ1ODpcXHRcXHRcXHRcXHRcXHRcXHRpbmV0X3Rlc3RfYml0KFRSQU5TUEFSRU5ULCBzc2spKTtcXG4gNDU5OlxcdFxcdFxcdFxcdGJyZWFrO1xcbiA0NjA6XFx0XFx0XFx0Y2FzZSBJUFY2X0ZSRUVCSU5EOlxcbiA0NjE6XFx0XFx0XFx0XFx0aW5ldF9hc3NpZ25fYml0KEZSRUVCSU5ELCBzayxcXG4gNDYyOlxcdFxcdFxcdFxcdFxcdFxcdGluZXRfdGVzdF9iaXQoRlJFRUJJTkQsIHNzaykpO1xcbiA0NjM6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDQ2NDpcXHRcXHRcXHR9XFxuIDQ2NTpcXHRcXG4gNDY2OlxcdFxcdFxcdHJlbGVhc2Vfc29jayhzayk7XFxuIDQ2NzpcXHRcXHRcXHRicmVhaztcXG4gNDY4OlxcdFxcdGNhc2UgSVBWNl9UQ0xBU1M6XFxuIDQ2OTpcXHRcXHRcXHRyZXR1cm4gbXB0Y3Bfc2V0c29ja29wdF92Nl9zZXRfdGNsYXNzKG1zaywgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QwOTo0OTo0OC4wMDUyNDMwODVaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDIzMjA0ODQ5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIE1QVENQdjYgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIFNvbWV0aGluZyBkb2Vzbid0IGZlZWwgcmlnaHQuIEkgd2FzIGV4cGVjdGluZyBgbXB0Y3Bfc2V0c29ja29wdF92NmAgdG8gYmUgZ3VhcmRlZCBieSBhbiBgI2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpYCBjb25kaXRpb25hbC4gQnV0IGl0J3Mgbm90LiBUaGF0J3Mgc3RyYW5nZS4gVGhpcyBjb3VsZCBsZWFkIHRvIHVuZGVmaW5lZCBiZWhhdmlvdXIgaWYgSVB2NiBpcyBub3QgZW5hYmxlZC5cblxuTGV0IG1lIGp1c3QgcXVpY2tseSB2ZXJpZnkgc29tZXRoaW5nLiBJJ2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoZSBgbmV0L21wdGNwL3NvY2tvcHQuY2AgZmlsZSBhbmQgc2VlIHdoYXQgdGhlIGJ1aWxkIGRpcmVjdGl2ZXMgbG9vayBsaWtlIHRoZXJlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBJUHY2IGNvbmZpZ3VyYXRpb24gaXMgYXBwbGllZCB0byB0aGUgc29ja2V0IG9wdGlvbnMgZmlsZS4gVGhlcmUgaXMgYSBjaGFuY2UgdGhhdCBpdCBpcyBzb21laG93IGJlaW5nIGluY2x1ZGVkLCBldmVuIHdoZW4gaXQgc2hvdWxkbid0IGJlLiBUaGlzIG5lZWRzIHRvIGJlIHRob3JvdWdobHkgaW52ZXN0aWdhdGVkIGFuZCBwb3RlbnRpYWxseSBjb3JyZWN0ZWQuIEkgbmVlZCB0byBoYXZlIGEgbG9vayBhdCB0aGUgZmlsZSdzIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzIHRvIGNvbmZpcm0gdGhhdCBpdCdzIGJlaGF2aW5nIGFzIGV4cGVjdGVkIHdpdGggcmVzcGVjdCB0byB0aGUgSVB2NiBjb25maWd1cmF0aW9uIG9wdGlvbi4gVGhpcyBjb3VsZCBiZSBhIHNpZ25pZmljYW50IGJ1ZyBpZiBpdCdzIG5vdCBoYW5kbGVkIGNvcnJlY3RseS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzE1NiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMDk6NDk6NTIuMjM3MjkzODcxWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDAxOTg2NzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX01QVENQX0lQVjZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21wdGNwL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbXB0Y3AvY3RybC5jPTU4Nz12b2lkIF9faW5pdCBtcHRjcF9pbml0KHZvaWQpXFxuLS1cXG5uZXQvbXB0Y3AvY3RybC5jLTU5NS1cXG5uZXQvbXB0Y3AvY3RybC5jOjU5NjojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcXG5uZXQvbXB0Y3AvY3RybC5jLTU5Ny1pbnQgX19pbml0IG1wdGNwdjZfaW5pdCh2b2lkKVxcbi0tXFxubmV0L21wdGNwL29wdGlvbnMuYz0yMz1zdGF0aWMgdm9pZCBtcHRjcF9wYXJzZV9vcHRpb24oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9tcHRjcC9vcHRpb25zLmMtMjQxLVxcdFxcdFxcdFxcdG1wX29wdC1cXHUwMDNlYWRkci5mYW1pbHkgPSBBRl9JTkVUO1xcbm5ldC9tcHRjcC9vcHRpb25zLmM6MjQyOiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxcbm5ldC9tcHRjcC9vcHRpb25zLmMtMjQzLVxcdFxcdFxcdGVsc2UgaWYgKG9wc2l6ZSA9PSBUQ1BPTEVOX01QVENQX0FERF9BRERSNiB8fFxcbi0tXFxubmV0L21wdGNwL29wdGlvbnMuYy0yNTItXFx0XFx0XFx0XFx0bXBfb3B0LVxcdTAwM2VhZGRyLmZhbWlseSA9IEFGX0lORVQ7XFxubmV0L21wdGNwL29wdGlvbnMuYzoyNTM6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXFxubmV0L21wdGNwL29wdGlvbnMuYy0yNTQtXFx0XFx0XFx0ZWxzZSBpZiAob3BzaXplID09IFRDUE9MRU5fTVBUQ1BfQUREX0FERFI2X0JBU0UgfHxcXG4tLVxcbm5ldC9tcHRjcC9vcHRpb25zLmMtMjc0LVxcdFxcdH1cXG5uZXQvbXB0Y3Avb3B0aW9ucy5jOjI3NTojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTI3Ni1cXHRcXHRlbHNlIHtcXG4tLVxcbm5ldC9tcHRjcC9vcHRpb25zLmM9NjMyPXN0YXRpYyB1NjQgYWRkX2FkZHJfZ2VuZXJhdGVfaG1hYyh1NjQga2V5MSwgdTY0IGtleTIsXFxuLS1cXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTY0NC1cXHR9XFxubmV0L21wdGNwL29wdGlvbnMuYzo2NDU6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXFxubmV0L21wdGNwL29wdGlvbnMuYy02NDYtXFx0ZWxzZSBpZiAoYWRkci1cXHUwMDNlZmFtaWx5ID09IEFGX0lORVQ2KSB7XFxuLS1cXG5uZXQvbXB0Y3Avb3B0aW9ucy5jPTEzODQ9dm9pZCBtcHRjcF93cml0ZV9vcHRpb25zKHN0cnVjdCB0Y3BoZHIgKnRoLCBfX2JlMzIgKnB0ciwgc3RydWN0IHRjcF9zb2NrICp0cCxcXG4tLVxcbm5ldC9tcHRjcC9vcHRpb25zLmMtMTU2Ny1cXG5uZXQvbXB0Y3Avb3B0aW9ucy5jOjE1Njg6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXFxubmV0L21wdGNwL29wdGlvbnMuYy0xNTY5LVxcdFxcdGlmIChvcHRzLVxcdTAwM2VhZGRyLmZhbWlseSA9PSBBRl9JTkVUNilcXG4tLVxcbm5ldC9tcHRjcC9vcHRpb25zLmMtMTU4Ni1cXHRcXHR9XFxubmV0L21wdGNwL29wdGlvbnMuYzoxNTg3OiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxcbm5ldC9tcHRjcC9vcHRpb25zLmMtMTU4OC1cXHRcXHRlbHNlIGlmIChvcHRzLVxcdTAwM2VhZGRyLmZhbWlseSA9PSBBRl9JTkVUNikge1xcbi0tXFxubmV0L21wdGNwL3BtLmM9MzM9Ym9vbCBtcHRjcF9wbV9hZGRyX2ZhbWlsaWVzX21hdGNoKGNvbnN0IHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9tcHRjcC9wbS5jLTM4LVxcbm5ldC9tcHRjcC9wbS5jOjM5OiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxcbm5ldC9tcHRjcC9wbS5jLTQwLVxcdGJvb2wgbG9jX2lzX3Y0ID0gbG9jLVxcdTAwM2VmYW1pbHkgPT0gQUZfSU5FVCB8fCBpcHY2X2FkZHJfdjRtYXBwZWQoXFx1MDAyNmxvYy1cXHUwMDNlYWRkcjYpO1xcbi0tXFxubmV0L21wdGNwL3BtLmM9NTU9Ym9vbCBtcHRjcF9hZGRyZXNzZXNfZXF1YWwoY29uc3Qgc3RydWN0IG1wdGNwX2FkZHJfaW5mbyAqYSxcXG4tLVxcbm5ldC9tcHRjcC9wbS5jLTYyLVxcdFxcdFxcdGFkZHJfZXF1YWxzID0gYS1cXHUwMDNlYWRkci5zX2FkZHIgPT0gYi1cXHUwMDNlYWRkci5zX2FkZHI7XFxubmV0L21wdGNwL3BtLmM6NjM6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXFxubmV0L21wdGNwL3BtLmMtNjQtXFx0XFx0ZWxzZVxcbi0tXFxubmV0L21wdGNwL3BtLmM9ODM9dm9pZCBtcHRjcF9sb2NhbF9hZGRyZXNzKGNvbnN0IHN0cnVjdCBzb2NrX2NvbW1vbiAqc2tjLFxcbi0tXFxubmV0L21wdGNwL3BtLmMtODktXFx0XFx0YWRkci1cXHUwMDNlYWRkci5zX2FkZHIgPSBza2MtXFx1MDAzZXNrY19yY3Zfc2FkZHI7XFxubmV0L21wdGNwL3BtLmM6OTA6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXFxubmV0L21wdGNwL3BtLmMtOTEtXFx0ZWxzZSBpZiAoYWRkci1cXHUwMDNlZmFtaWx5ID09IEFGX0lORVQ2KVxcbi0tXFxubmV0L21wdGNwL3BtLmM9OTY9dm9pZCBtcHRjcF9yZW1vdGVfYWRkcmVzcyhjb25zdCBzdHJ1Y3Qgc29ja19jb21tb24gKnNrYyxcXG4tLVxcbm5ldC9tcHRjcC9wbS5jLTEwMi1cXHRcXHRhZGRyLVxcdTAwM2VhZGRyLnNfYWRkciA9IHNrYy1cXHUwMDNlc2tjX2RhZGRyO1xcbm5ldC9tcHRjcC9wbS5jOjEwMzojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcXG5uZXQvbXB0Y3AvcG0uYy0xMDQtXFx0ZWxzZSBpZiAoYWRkci1cXHUwMDNlZmFtaWx5ID09IEFGX0lORVQ2KVxcbi0tXFxubmV0L21wdGNwL3BtX2tlcm5lbC5jPTYwNj1maWxsX2xvY2FsX2FkZHJlc3NfYW55KHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIHN0cnVjdCBtcHRjcF9hZGRyX2luZm8gKnJlbW90ZSxcXG4tLVxcbm5ldC9tcHRjcC9wbV9rZXJuZWwuYy02MTItXFx0bG9jYWwtXFx1MDAzZWFkZHIuZmFtaWx5ID1cXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmM6NjEzOiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxcbm5ldC9tcHRjcC9wbV9rZXJuZWwuYy02MTQtXFx0XFx0XFx0cmVtb3RlLVxcdTAwM2VmYW1pbHkgPT0gQUZfSU5FVDYgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbm5ldC9tcHRjcC9wbV9rZXJuZWwuYz04NTI9c3RhdGljIGludCBtcHRjcF9wbV9ubF9jcmVhdGVfbGlzdGVuX3NvY2tldChzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmMtODg5LVxcdG1wdGNwX2luZm8yc29ja2FkZHIoXFx1MDAyNmVudHJ5LVxcdTAwM2VhZGRyLCBcXHUwMDI2YWRkciwgZW50cnktXFx1MDAzZWFkZHIuZmFtaWx5KTtcXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmM6ODkwOiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxcbm5ldC9tcHRjcC9wbV9rZXJuZWwuYy04OTEtXFx0aWYgKGVudHJ5LVxcdTAwM2VhZGRyLmZhbWlseSA9PSBBRl9JTkVUNilcXG4tLVxcbm5ldC9tcHRjcC9wbV9rZXJuZWwuYy04OTUtXFx0XFx0ZXJyID0gaW5ldF9iaW5kX3NrKHNzaywgKHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICopXFx1MDAyNmFkZHIsIGFkZHJsZW4pO1xcbm5ldC9tcHRjcC9wbV9rZXJuZWwuYzo4OTY6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXFxubmV0L21wdGNwL3BtX2tlcm5lbC5jLTg5Ny1cXHRlbHNlIGlmIChzc2stXFx1MDAzZXNrX2ZhbWlseSA9PSBBRl9JTkVUNilcXG4tLVxcbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmM9MjI9c3RhdGljIGludCBtcHRjcF9wbV9mYW1pbHlfdG9fYWRkcihpbnQgZmFtaWx5KVxcbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmMtMjMte1xcbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmM6MjQ6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXFxubmV0L21wdGNwL3BtX25ldGxpbmsuYy0yNS1cXHRpZiAoZmFtaWx5ID09IEFGX0lORVQ2KVxcbi0tXFxubmV0L21wdGNwL3BtX25ldGxpbmsuYz0zMT1zdGF0aWMgaW50IG1wdGNwX3BtX3BhcnNlX3BtX2FkZHJfYXR0cihzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbi0tXFxubmV0L21wdGNwL3BtX25ldGxpbmsuYy02My1cXHRpZiAoYWRkci1cXHUwMDNlZmFtaWx5ICE9IEFGX0lORVRcXG5uZXQvbXB0Y3AvcG1fbmV0bGluay5jOjY0OiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxcbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmMtNjUtXFx0ICAgIFxcdTAwMjZcXHUwMDI2IGFkZHItXFx1MDAzZWZhbWlseSAhPSBBRl9JTkVUNlxcbi0tXFxubmV0L21wdGNwL3BtX25ldGxpbmsuYy03OC1cXG5uZXQvbXB0Y3AvcG1fbmV0bGluay5jOjc5OiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxcbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmMtODAtXFx0aWYgKGFkZHItXFx1MDAzZWZhbWlseSA9PSBBRl9JTkVUNilcXG4tLVxcbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmM9MTMxPXN0YXRpYyBpbnQgbXB0Y3BfbmxfZmlsbF9hZGRyKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbXB0Y3AvcG1fbmV0bGluay5jLTE1Ni1cXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG5uZXQvbXB0Y3AvcG1fbmV0bGluay5jOjE1NzojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcXG5uZXQvbXB0Y3AvcG1fbmV0bGluay5jLTE1OC1cXHRlbHNlIGlmIChhZGRyLVxcdTAwM2VmYW1pbHkgPT0gQUZfSU5FVDYgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmM9Mjk4PXN0YXRpYyBpbnQgbXB0Y3BfZXZlbnRfYWRkX3N1YmZsb3coc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHNvY2sgKnNzaylcXG4tLVxcbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmMtMzEyLVxcdFxcdGJyZWFrO1xcbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmM6MzEzOiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxcbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmMtMzE0LVxcdGNhc2UgQUZfSU5FVDY6IHtcXG4tLVxcbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmM9NDY1PXZvaWQgbXB0Y3BfZXZlbnRfYWRkcl9hbm5vdW5jZWQoY29uc3Qgc3RydWN0IHNvY2sgKnNzayxcXG4tLVxcbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmMtNTAyLVxcdFxcdGJyZWFrO1xcbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmM6NTAzOiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxcbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmMtNTA0LVxcdGNhc2UgQUZfSU5FVDY6XFxuLS1cXG5uZXQvbXB0Y3AvcG1fbmV0bGluay5jPTUyMj12b2lkIG1wdGNwX2V2ZW50X3BtX2xpc3RlbmVyKGNvbnN0IHN0cnVjdCBzb2NrICpzc2ssXFxuLS1cXG5uZXQvbXB0Y3AvcG1fbmV0bGluay5jLTU1MS1cXHRcXHRicmVhaztcXG5uZXQvbXB0Y3AvcG1fbmV0bGluay5jOjU1MjojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcXG5uZXQvbXB0Y3AvcG1fbmV0bGluay5jLTU1My1cXHRjYXNlIEFGX0lORVQ2OiB7XFxuLS1cXG5uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmM9NDMyPXN0YXRpYyBzdHJ1Y3Qgc29jayAqbXB0Y3BfbmxfZmluZF9zc2soc3RydWN0IG1wdGNwX3NvY2sgKm1zayxcXG4tLVxcbm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYy00NTctXFx0XFx0XFx0YnJlYWs7XFxubmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jOjQ1ODojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcXG5uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmMtNDU5LVxcdFxcdGNhc2UgQUZfSU5FVDY6IHtcXG4tLVxcbm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYz00Nzg9aW50IG1wdGNwX3BtX25sX3N1YmZsb3dfZGVzdHJveV9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmMtNTA2LVxcbm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYzo1MDc6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXFxubmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jLTUwOC1cXHRpZiAoYWRkcl9sLmFkZHIuZmFtaWx5ID09IEFGX0lORVQgXFx1MDAyNlxcdTAwMjYgaXB2Nl9hZGRyX3Y0bWFwcGVkKFxcdTAwMjZhZGRyX3IuYWRkcjYpKSB7XFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yMC0jaW5jbHVkZSBcXHUwMDNjbmV0L3RjcF9zdGF0ZXMuaFxcdTAwM2VcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzoyMTojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0yMi0jaW5jbHVkZSBcXHUwMDNjbmV0L3RyYW5zcF92Ni5oXFx1MDAzZVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmM9MzE9c3RhdGljIHVuc2lnbmVkIGludCBtcHRjcF9pbnFfaGludChjb25zdCBzdHJ1Y3Qgc29jayAqc2spO1xcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMzUtXFxubmV0L21wdGNwL3Byb3RvY29sLmM6MzY6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMzctc3RydWN0IG1wdGNwNl9zb2NrIHtcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jPTY0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzICptcHRjcF9mYWxsYmFja190Y3Bfb3BzKGNvbnN0IHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTY3LVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjY4OiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTY5LVxcdGlmIChmYW1pbHkgPT0gQUZfSU5FVDYpXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0zMzk3PXN0YXRpYyB2b2lkIG1wdGNwX2NvcHlfaW5hZGRycyhzdHJ1Y3Qgc29jayAqbXNrLCBjb25zdCBzdHJ1Y3Qgc29jayAqc3NrKVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTMzOTgte1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjMzOTk6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMzQwMC1cXHRjb25zdCBzdHJ1Y3QgaXB2Nl9waW5mbyAqc3NrNiA9IGluZXQ2X3NrKHNzayk7XFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0zNDQyPXN0YXRpYyBpbnQgbXB0Y3BfZGlzY29ubmVjdChzdHJ1Y3Qgc29jayAqc2ssIGludCBmbGFncylcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTM1MDQtXFxubmV0L21wdGNwL3Byb3RvY29sLmM6MzUwNTojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zNTA2LXN0YXRpYyBzdHJ1Y3QgaXB2Nl9waW5mbyAqbXB0Y3BfaW5ldDZfc2soY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmM9MzU1Mz1zdHJ1Y3Qgc29jayAqbXB0Y3Bfc2tfY2xvbmVfaW5pdChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zNTY1LVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjM1NjY6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMzU2Ny1cXHRpZiAobnNrLVxcdTAwM2Vza19mYW1pbHkgPT0gQUZfSU5FVDYpXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zNTcyLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjM1NzM6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMzU3NC1cXHRpZiAobnNrLVxcdTAwM2Vza19mYW1pbHkgPT0gQUZfSU5FVDYpXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz00MDk5PXN0YXRpYyBpbnQgbXB0Y3BfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqdWFkZHIsIGludCBhZGRyX2xlbilcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTQxMTMtXFx0XFx0ZXJyID0gaW5ldF9iaW5kX3NrKHNzaywgdWFkZHIsIGFkZHJfbGVuKTtcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzo0MTE0OiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTQxMTUtXFx0ZWxzZSBpZiAoc2stXFx1MDAzZXNrX2ZhbWlseSA9PSBBRl9JTkVUNilcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jPTQ2MzU9dm9pZCBfX2luaXQgbXB0Y3BfcHJvdG9faW5pdCh2b2lkKVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtNDY3NC1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzo0Njc1OiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTQ2NzYtc3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgbXB0Y3BfdjZfc3RyZWFtX29wcyA9IHtcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5oPTkxMj12b2lkIF9faW5pdCBtcHRjcF9wcm90b19pbml0KHZvaWQpO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5oOjkxMzojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuaC05MTQtaW50IF9faW5pdCBtcHRjcF9wcm90b192Nl9pbml0KHZvaWQpO1xcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYy0xNy0jaW5jbHVkZSBcXHUwMDNjbmV0L3Byb3RvY29sLmhcXHUwMDNlXFxubmV0L21wdGNwL3N1YmZsb3cuYzoxODojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE5LSNpbmNsdWRlIFxcdTAwM2NuZXQvaXA2X3JvdXRlLmhcXHUwMDNlXFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTM1OD1zdGF0aWMgaW50IHN1YmZsb3dfdjRfc2VuZF9zeW5hY2soY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsXFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTM3MC1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjM3MTojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTM3Mi1zdGF0aWMgaW50IHN1YmZsb3dfdjZfc2VuZF9zeW5hY2soY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsXFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTY0OT1zdGF0aWMgaW50IHN1YmZsb3dfcmVidWlsZF9oZWFkZXIoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYy02NTgtXFxubmV0L21wdGNwL3N1YmZsb3cuYzo2NTk6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXFxubmV0L21wdGNwL3N1YmZsb3cuYy02NjAtc3RhdGljIGludCBzdWJmbG93X3Y2X3JlYnVpbGRfaGVhZGVyKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmM9NjkyPXN0YXRpYyB2b2lkIHN1YmZsb3dfdjRfcmVxX2Rlc3RydWN0b3Ioc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKVxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYy02OTctXFxubmV0L21wdGNwL3N1YmZsb3cuYzo2OTg6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXFxubmV0L21wdGNwL3N1YmZsb3cuYy02OTktc3RhdGljIHN0cnVjdCByZXF1ZXN0X3NvY2tfb3BzIG1wdGNwX3N1YmZsb3dfdjZfcmVxdWVzdF9zb2NrX29wcyBfX3JvX2FmdGVyX2luaXQ7XFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTczNz1zdHJ1Y3QgcmVxdWVzdF9zb2NrICptcHRjcF9zdWJmbG93X3JlcXNrX2FsbG9jKGNvbnN0IHN0cnVjdCByZXF1ZXN0X3NvY2tfb3BzICpvcHMsXFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTc0Mi1cXHRcXHRvcHMgPSBcXHUwMDI2bXB0Y3Bfc3ViZmxvd192NF9yZXF1ZXN0X3NvY2tfb3BzO1xcbm5ldC9tcHRjcC9zdWJmbG93LmM6NzQzOiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtNzQ0LVxcdGVsc2UgaWYgKG9wcy1cXHUwMDNlZmFtaWx5ID09IEFGX0lORVQ2KVxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYz0xNTUzPXN1YmZsb3dfZGVmYXVsdF9hZl9vcHMoc3RydWN0IHNvY2sgKnNrKVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTU1NC17XFxubmV0L21wdGNwL3N1YmZsb3cuYzoxNTU1OiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTU1Ni1cXHRpZiAoc2stXFx1MDAzZXNrX2ZhbWlseSA9PSBBRl9JTkVUNilcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTU2MS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjE1NjI6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXFxubmV0L21wdGNwL3N1YmZsb3cuYy0xNTYzLXZvaWQgbXB0Y3B2Nl9oYW5kbGVfbWFwcGVkKHN0cnVjdCBzb2NrICpzaywgYm9vbCBtYXBwZWQpXFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTE1ODI9dm9pZCBtcHRjcF9pbmZvMnNvY2thZGRyKGNvbnN0IHN0cnVjdCBtcHRjcF9hZGRyX2luZm8gKmluZm8sXFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE1OTItXFx0XFx0XFx0aW5fYWRkci1cXHUwMDNlc2luX2FkZHIgPSBpbmZvLVxcdTAwM2VhZGRyO1xcbm5ldC9tcHRjcC9zdWJmbG93LmM6MTU5MzojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE1OTQtXFx0XFx0ZWxzZSBpZiAoaXB2Nl9hZGRyX3Y0bWFwcGVkKFxcdTAwMjZpbmZvLVxcdTAwM2VhZGRyNikpXFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE1OTgtXFx0fVxcbm5ldC9tcHRjcC9zdWJmbG93LmM6MTU5OTojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE2MDAtXFx0ZWxzZSBpZiAoYWRkci1cXHUwMDNlc3NfZmFtaWx5ID09IEFGX0lORVQ2KSB7XFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTE2MTM9aW50IF9fbXB0Y3Bfc3ViZmxvd19jb25uZWN0KHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IG1wdGNwX3BtX2xvY2FsICpsb2NhbCxcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTY0OC1cXHRcXHRcXHRsb2NhbF9pZCA9IC0xO1xcbm5ldC9tcHRjcC9zdWJmbG93LmM6MTY0OTojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE2NTAtXFx0fSBlbHNlIGlmIChzay1cXHUwMDNlc2tfZmFtaWx5ID09IEFGX0lORVQ2KSB7XFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE2NjUtXFx0YWRkcmxlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pO1xcbm5ldC9tcHRjcC9zdWJmbG93LmM6MTY2NjojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE2NjctXFx0aWYgKGFkZHIuc3NfZmFtaWx5ID09IEFGX0lORVQ2KVxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYz0xNzU2PXN0YXRpYyB2b2lkIG1wdGNwX3N1YmZsb3dfb3BzX292ZXJyaWRlKHN0cnVjdCBzb2NrICpzc2spXFxubmV0L21wdGNwL3N1YmZsb3cuYy0xNzU3LXtcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjE3NTg6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXFxubmV0L21wdGNwL3N1YmZsb3cuYy0xNzU5LVxcdGlmIChzc2stXFx1MDAzZXNrX3Byb3QgPT0gXFx1MDAyNnRjcHY2X3Byb3QpXFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTE3NjY9c3RhdGljIHZvaWQgbXB0Y3Bfc3ViZmxvd19vcHNfdW5kb19vdmVycmlkZShzdHJ1Y3Qgc29jayAqc3NrKVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTc2Ny17XFxubmV0L21wdGNwL3N1YmZsb3cuYzoxNzY4OiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTc2OS1cXHRpZiAoc3NrLVxcdTAwM2Vza19wcm90ID09IFxcdTAwMjZ0Y3B2Nl9wcm90X292ZXJyaWRlKVxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYz0yMTQxPXZvaWQgX19pbml0IG1wdGNwX3N1YmZsb3dfaW5pdCh2b2lkKVxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYy0yMTczLVxcbm5ldC9tcHRjcC9zdWJmbG93LmM6MjE3NDojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTIxNzUtdm9pZCBfX2luaXQgbXB0Y3Bfc3ViZmxvd192Nl9pbml0KHZvaWQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDA5OjQ5OjUyLjMzNzQ5NzIyNFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjYzMzc3Nzc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBhbiBleHBlcnQgaW4gbmV0d29yayBwcm9ncmFtbWluZyBhbmQgTVBUQ1AsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipEaWdnaW5nIGludG8gdGhlIE1QVENQIFNvY2tldCBPcHRpb25zKipcblxuUmlnaHQsIHNvIGBtcHRjcF9zZXRzb2Nrb3B0X3Y2YCBpcyBkZWZpbml0ZWx5IHRoZSB0YXJnZXQgd2hlbiB3ZSdyZSBzZXR0aW5nIElQdjYtc3BlY2lmaWMgc29ja2V0IG9wdGlvbnMgdXNpbmcgTVBUQ1AuIFRoYXQgbWFrZXMgc2Vuc2UsIGxvZ2ljYWxseS4gV2UncmUgdXNpbmcgYFNPTF9JUFY2YCBhcyB0aGUgbGV2ZWwuIE5vdywgSSBuZWVkIHRvIHNlZSAqaG93KiB0aGlzIGludGVyYWN0aW9uIHdvcmtzIHdpdGhpbiB0aGUgYmlnZ2VyIHBpY3R1cmUuIExldCBtZSBwdWxsIHVwIGBuZXQvbXB0Y3Avc29ja29wdC5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdy4gSSdsbCBmb2N1cyBvbiBgbXB0Y3Bfc2V0c29ja29wdGAgZmlyc3QsIG9mIGNvdXJzZSwgYmVjYXVzZSB0aGF0J3MgdGhlIGVudHJ5IHBvaW50LiBJIHdhbnQgdG8gc2VlIGhvdyBpdCBoYW5kbGVzIHRoZSBkaWZmZXJlbnQgbGV2ZWxzIGFuZCB3aGF0IGFjdGlvbnMgaXQgdGFrZXMgZGVwZW5kaW5nIG9uIHRoZSBsZXZlbCBzcGVjaWZpZWQuIFRoZSBJUHY2IGNhc2UgaXMgd2hhdCBpbnRlcmVzdHMgbWUsIGJ1dCBJJ2xsIG1ha2Ugc3VyZSB0byBub3RlIHRoZSBvdGhlciBvcHRpb25zIGFsb25nIHRoZSB3YXkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyODAwLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMDk6NDk6NTYuMDAwODc3NzIyWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNjU2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbXB0Y3Avc29ja29wdC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDkzOCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDkzODpcXHRpbnQgbXB0Y3Bfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXFxuIDkzOTpcXHRcXHRcXHQgICAgIHNvY2twdHJfdCBvcHR2YWwsIHVuc2lnbmVkIGludCBvcHRsZW4pXFxuIDk0MDpcXHR7XFxuIDk0MTpcXHRcXHRzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrID0gbXB0Y3Bfc2soc2spO1xcbiA5NDI6XFx0XFx0c3RydWN0IHNvY2sgKnNzaztcXG4gOTQzOlxcdFxcbiA5NDQ6XFx0XFx0cHJfZGVidWcoXFxcIm1zaz0lcFxcXFxuXFxcIiwgbXNrKTtcXG4gOTQ1OlxcdFxcbiA5NDY6XFx0XFx0aWYgKGxldmVsID09IFNPTF9TT0NLRVQpXFxuIDk0NzpcXHRcXHRcXHRyZXR1cm4gbXB0Y3Bfc2V0c29ja29wdF9zb2xfc29ja2V0KG1zaywgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pO1xcbiA5NDg6XFx0XFxuIDk0OTpcXHRcXHRpZiAoIW1wdGNwX3N1cHBvcnRlZF9zb2Nrb3B0KGxldmVsLCBvcHRuYW1lKSlcXG4gOTUwOlxcdFxcdFxcdHJldHVybiAtRU5PUFJPVE9PUFQ7XFxuIDk1MTpcXHRcXG4gOTUyOlxcdFxcdC8qIEBAIHRoZSBtZWFuaW5nIG9mIHNldHNvY2tvcHQoKSB3aGVuIHRoZSBzb2NrZXQgaXMgY29ubmVjdGVkIGFuZFxcbiA5NTM6XFx0XFx0ICogdGhlcmUgYXJlIG11bHRpcGxlIHN1YmZsb3dzIGlzIG5vdCB5ZXQgZGVmaW5lZC4gSXQgaXMgdXAgdG8gdGhlXFxuIDk1NDpcXHRcXHQgKiBNUFRDUC1sZXZlbCBzb2NrZXQgdG8gY29uZmlndXJlIHRoZSBzdWJmbG93cyB1bnRpbCB0aGUgc3ViZmxvd1xcbiA5NTU6XFx0XFx0ICogaXMgaW4gVENQIGZhbGxiYWNrLCB3aGVuIFRDUCBzb2NrZXQgb3B0aW9ucyBhcmUgcGFzc2VkIHRocm91Z2hcXG4gOTU2OlxcdFxcdCAqIHRvIHRoZSBvbmUgcmVtYWluaW5nIHN1YmZsb3cuXFxuIDk1NzpcXHRcXHQgKi9cXG4gOTU4OlxcdFxcdGxvY2tfc29jayhzayk7XFxuIDk1OTpcXHRcXHRzc2sgPSBfX21wdGNwX3RjcF9mYWxsYmFjayhtc2spO1xcbiA5NjA6XFx0XFx0cmVsZWFzZV9zb2NrKHNrKTtcXG4gOTYxOlxcdFxcdGlmIChzc2spXFxuIDk2MjpcXHRcXHRcXHRyZXR1cm4gdGNwX3NldHNvY2tvcHQoc3NrLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pO1xcbiA5NjM6XFx0XFxuIDk2NDpcXHRcXHRpZiAobGV2ZWwgPT0gU09MX0lQKVxcbiA5NjU6XFx0XFx0XFx0cmV0dXJuIG1wdGNwX3NldHNvY2tvcHRfdjQobXNrLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7XFxuIDk2NjpcXHRcXG4gOTY3OlxcdFxcdGlmIChsZXZlbCA9PSBTT0xfSVBWNilcXG4gOTY4OlxcdFxcdFxcdHJldHVybiBtcHRjcF9zZXRzb2Nrb3B0X3Y2KG1zaywgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pO1xcbiA5Njk6XFx0XFxuIDk3MDpcXHRcXHRpZiAobGV2ZWwgPT0gU09MX1RDUClcXG4gOTcxOlxcdFxcdFxcdHJldHVybiBtcHRjcF9zZXRzb2Nrb3B0X3NvbF90Y3AobXNrLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7XFxuIDk3MjpcXHRcXG4gOTczOlxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4gOTc0OlxcdH1cXG4gOTc1OlxcdFxcbiA5NzY6XFx0c3RhdGljIGludCBtcHRjcF9nZXRzb2Nrb3B0X2ZpcnN0X3NmX29ubHkoc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcXG4gOTc3OlxcdFxcdFxcdFxcdFxcdFxcdCAgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IF9fdXNlciAqb3B0bGVuKVxcbiA5Nzg6XFx0e1xcbiA5Nzk6XFx0XFx0c3RydWN0IHNvY2sgKnNrID0gKHN0cnVjdCBzb2NrICopbXNrO1xcbiA5ODA6XFx0XFx0c3RydWN0IHNvY2sgKnNzaztcXG4gOTgxOlxcdFxcdGludCByZXQ7XFxuIDk4MjpcXHRcXG4gOTgzOlxcdFxcdGxvY2tfc29jayhzayk7XFxuIDk4NDpcXHRcXHRzc2sgPSBtc2stXFx1MDAzZWZpcnN0O1xcbiA5ODU6XFx0XFx0aWYgKHNzaylcXG4gOTg2OlxcdFxcdFxcdGdvdG8gZ2V0O1xcbiA5ODc6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDA5OjQ5OjU2LjAwMTEwNzQwMloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjMzOTUzODM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIE1QVENQIElQVjYgVENMQVNTIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gbG9va2luZyBhdCB0aGlzIGNvZGUsIGBtcHRjcF9zZXRzb2Nrb3B0X3Y2YCBpcyBiZWluZyBjb21waWxlZCBpbiByZWdhcmRsZXNzIG9mIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIOKAkyB0aGF0J3Mgc29tZXRoaW5nIHRvIGtlZXAgaW4gbWluZC4gSSBzZWUgaXQncyB0cmlnZ2VyZWQgd2hlbiB0aGUgYGxldmVsYCBhcmd1bWVudCBpcyBgU09MX0lQVjZgLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBgSVBWNl9UQ0xBU1NgIGZ1bmN0aW9uYWxpdHkgd2l0aGluIGBtcHRjcF9zZXRzb2Nrb3B0X3Y2YCBhbmQsIGJ5IGV4dGVuc2lvbiwgYG1wdGNwX2dldHNvY2tvcHRfdjZgLiBUaGUga2V5IHRoaW5nIGhlcmUgaXMgaG93IGBtcHRjcF9zZXRzb2Nrb3B0X3Y2X3NldF90Y2xhc3NgIHdvcmtzOiBpdCBpdGVyYXRlcyB0aHJvdWdoIGFsbCB0aGUgc3ViZmxvd3Mgb2YgYW4gTVBUQ1AgY29ubmVjdGlvbiBhbmQgc2V0cyB0aGUgVHJhZmZpYyBDbGFzcyAoYHRjbGFzc2ApIG9uIGVhY2ggYGluZXQ2X3NrYCB0byB0aGUgcHJvdmlkZWQgYHZhbGAuIEZyb20gYSBmdW5jdGlvbmFsIHBlcnNwZWN0aXZlLCB0aGlzIGlzIGEgY2xlYXIgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBUaGUgZmFjdCB0aGF0IGl0IGludGVyYWN0cyB3aXRoIGFsbCBzdWJmbG93cyBpcyBlc3BlY2lhbGx5IGludGVyZXN0aW5nLCBhbmQgbGlrZWx5IHdoZXJlIHZ1bG5lcmFiaWxpdGllcyBjb3VsZCBiZSBleHBvc2VkLlxuXG5Ob3csIGJlZm9yZSBJIGRpZyBpbiBkZWVwZXIsIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBgSVBWNl9UQ0xBU1NgIGlzIGV2ZW4gKnBlcm1pdHRlZCogd2l0aGluIHRoZSBNUFRDUCBjb250ZXh0LiBMZXQncyBxdWlja2x5IGNoZWNrIHRoZSBgbXB0Y3Bfc3VwcG9ydGVkX3NvY2tvcHRgIGZ1bmN0aW9uIHRvIGNvbmZpcm0gdGhhdCB0aGlzIG5ldyBvcHRpb24gaXMgaGFuZGxlZCBjb3JyZWN0bHkuIElmIHRoZSBzdXBwb3J0IGlzbid0IHRoZXJlLCB3ZSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzkxMSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDA5OjUwOjAwLjIzNTA2Mzc0OFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA0MTUzNTQzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1wdGNwX3N1cHBvcnRlZF9zb2Nrb3B0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tcHRjcC9zb2Nrb3B0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21wdGNwL3NvY2tvcHQuYz00MjY9c3RhdGljIGludCBtcHRjcF9zZXRzb2Nrb3B0X3Y2KHN0cnVjdCBtcHRjcF9zb2NrICptc2ssIGludCBvcHRuYW1lLFxcbi0tXFxubmV0L21wdGNwL3NvY2tvcHQuYy00NzQtXFxubmV0L21wdGNwL3NvY2tvcHQuYzo0NzU6c3RhdGljIGJvb2wgbXB0Y3Bfc3VwcG9ydGVkX3NvY2tvcHQoaW50IGxldmVsLCBpbnQgb3B0bmFtZSlcXG5uZXQvbXB0Y3Avc29ja29wdC5jLTQ3Ni17XFxuLS1cXG5uZXQvbXB0Y3Avc29ja29wdC5jPTkzOD1pbnQgbXB0Y3Bfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXFxuLS1cXG5uZXQvbXB0Y3Avc29ja29wdC5jLTk0OC1cXG5uZXQvbXB0Y3Avc29ja29wdC5jOjk0OTpcXHRpZiAoIW1wdGNwX3N1cHBvcnRlZF9zb2Nrb3B0KGxldmVsLCBvcHRuYW1lKSlcXG5uZXQvbXB0Y3Avc29ja29wdC5jLTk1MC1cXHRcXHRyZXR1cm4gLUVOT1BST1RPT1BUO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QwOTo1MDowMC43MzkyMjI3OTFaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDY1OTUyNDg4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBpZiB0aGV5J3JlIG15IG93bjpcblxuKipBbmFseXppbmcgdGhlIG1wdGNwX3N1cHBvcnRlZF9zb2Nrb3B0IENvZGUqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBpbnRvIGl0LiBJJ20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGBtcHRjcF9zdXBwb3J0ZWRfc29ja29wdGAgY29kZS4gSSdtIGV4cGVjdGluZyB0byBzZWUgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyB0aGUgc29ja2V0IG9wdGlvbnMgZm9yIE11bHRpcGF0aCBUQ1AuIFRoaXMgbWVhbnMgSSdtIGxvb2tpbmcgZm9yIHRoZSBtZWNoYW5pc21zIGJ5IHdoaWNoIGFuIGFwcGxpY2F0aW9uIGNhbiB0ZWxsIHRoZSBrZXJuZWwsIFwiSGV5LCBJIHdhbnQgdG8gdXNlIE1QVENQXCIgYW5kIHBvdGVudGlhbGx5LCB3aGF0IHNwZWNpZmljIE1QVENQIGZlYXR1cmVzIGFyZSBzdXBwb3J0ZWQgYW5kIGVuYWJsZWQgZm9yIHRoaXMgc29ja2V0LiBJJ2xsIGJlIHNlYXJjaGluZyBmb3IgaG93IHRoZSBrZXJuZWwgZXhwb3NlcyB0aGUgTVBUQ1AgY2FwYWJpbGl0eSB0byB1c2VyIHNwYWNlLiBJdCBzaG91bGQgaW5jbHVkZSB0aGUgc3lzdGVtIGNhbGxzLCBzdHJ1Y3RzLCBhbmQgbGlrZWx5IGZsYWdzIG9yIHZhbHVlcyByZWxhdGVkIHRvIHNvY2tldCBvcHRpb25zIChsaWtlIGBzZXRzb2Nrb3B0YCBhbmQgYGdldHNvY2tvcHRgKSB0aGF0IGFyZSBzcGVjaWZpY2FsbHkgcmVsZXZhbnQgdG8gTVBUQ1AgY29uZmlndXJhdGlvbnMuIEknbSBhbnRpY2lwYXRpbmcgdGhlcmUgd2lsbCBiZSBzb21lIGNoZWNrcyBhbmQgYmFsYW5jZXMgaW4gdGhlcmU6IHBlcmhhcHMgdmFsaWRhdGlvbiB0byBlbnN1cmUgdGhlIGtlcm5lbCBpcyBjb21waWxlZCB3aXRoIE1QVENQIHN1cHBvcnQsIGFuZCBtYXliZSBzb21lIHJ1bnRpbWUgY2hlY2tzIGRlcGVuZGluZyBvbiB0aGUga2VybmVsIHZlcnNpb24gb3Igb3RoZXIgY29uZmlndXJhdGlvbnMuIEknbGwgYmUgcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gdW5kZXJzdGFuZGluZyBob3cgdGhpcyBgc29ja29wdGAgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgVENQIHN0YWNrLCBhbmQgaG93IGl0IGhhbmRsZXMgZGlmZmVyZW50IE1QVENQLXNwZWNpZmljIGJlaGF2aW9ycyBhbmQgc2V0dGluZ3MuIEnigJlsbCBhbHNvIGJlIGxvb2tpbmcgZm9yIGFueSBpbmRpY2F0aW9ucyBhYm91dCBwb3RlbnRpYWwgc2VjdXJpdHkgY29uc2lkZXJhdGlvbnMgaW4gZXhwb3NpbmcgdGhpcyBmdW5jdGlvbmFsaXR5LiBVbHRpbWF0ZWx5LCBJJ20gaG9waW5nIHRvIGdldCBhIHNvbGlkIGdyYXNwIG9mIGhvdyB0aGlzIGtlcm5lbCBjb2RlIGVuYWJsZXMgYW5kIGNvbnRyb2xzIE1QVENQIHVzYWdlIGF0IHRoZSBzb2NrZXQgbGV2ZWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NjIxLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMDk6NTA6MDUuMzk4NzUwNzY1WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NTIwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbXB0Y3Avc29ja29wdC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ3NSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQ3NTpcXHRzdGF0aWMgYm9vbCBtcHRjcF9zdXBwb3J0ZWRfc29ja29wdChpbnQgbGV2ZWwsIGludCBvcHRuYW1lKVxcbiA0NzY6XFx0e1xcbiA0Nzc6XFx0XFx0aWYgKGxldmVsID09IFNPTF9JUCkge1xcbiA0Nzg6XFx0XFx0XFx0c3dpdGNoIChvcHRuYW1lKSB7XFxuIDQ3OTpcXHRcXHRcXHQvKiBzaG91bGQgd29yayBmaW5lICovXFxuIDQ4MDpcXHRcXHRcXHRjYXNlIElQX0ZSRUVCSU5EOlxcbiA0ODE6XFx0XFx0XFx0Y2FzZSBJUF9UUkFOU1BBUkVOVDpcXG4gNDgyOlxcdFxcdFxcdGNhc2UgSVBfQklORF9BRERSRVNTX05PX1BPUlQ6XFxuIDQ4MzpcXHRcXHRcXHRjYXNlIElQX0xPQ0FMX1BPUlRfUkFOR0U6XFxuIDQ4NDpcXHRcXG4gNDg1OlxcdFxcdFxcdC8qIHRoZSBmb2xsb3dpbmcgYXJlIGNvbnRyb2wgY21zZyByZWxhdGVkICovXFxuIDQ4NjpcXHRcXHRcXHRjYXNlIElQX1BLVElORk86XFxuIDQ4NzpcXHRcXHRcXHRjYXNlIElQX1JFQ1ZUVEw6XFxuIDQ4ODpcXHRcXHRcXHRjYXNlIElQX1JFQ1ZUT1M6XFxuIDQ4OTpcXHRcXHRcXHRjYXNlIElQX1JFQ1ZPUFRTOlxcbiA0OTA6XFx0XFx0XFx0Y2FzZSBJUF9SRVRPUFRTOlxcbiA0OTE6XFx0XFx0XFx0Y2FzZSBJUF9QQVNTU0VDOlxcbiA0OTI6XFx0XFx0XFx0Y2FzZSBJUF9SRUNWT1JJR0RTVEFERFI6XFxuIDQ5MzpcXHRcXHRcXHRjYXNlIElQX0NIRUNLU1VNOlxcbiA0OTQ6XFx0XFx0XFx0Y2FzZSBJUF9SRUNWRlJBR1NJWkU6XFxuIDQ5NTpcXHRcXG4gNDk2OlxcdFxcdFxcdC8qIGNvbW1vbiBzdHVmZiB0aGF0IG5lZWQgc29tZSBsb3ZlICovXFxuIDQ5NzpcXHRcXHRcXHRjYXNlIElQX1RPUzpcXG4gNDk4OlxcdFxcdFxcdGNhc2UgSVBfVFRMOlxcbiA0OTk6XFx0XFx0XFx0Y2FzZSBJUF9NVFVfRElTQ09WRVI6XFxuIDUwMDpcXHRcXHRcXHRjYXNlIElQX1JFQ1ZFUlI6XFxuIDUwMTpcXHRcXG4gNTAyOlxcdFxcdFxcdC8qIHBvc3NpYmx5IGxlc3MgY29tbW9uIG1heSBkZXNlcnZlIHNvbWUgbG92ZSAqL1xcbiA1MDM6XFx0XFx0XFx0Y2FzZSBJUF9NSU5UVEw6XFxuIDUwNDpcXHRcXG4gNTA1OlxcdFxcdFxcdC8qIHRoZSBmb2xsb3dpbmcgaXMgYXBwYXJlbnRseSBhIG5vLW9wIGZvciBwbGFpbiBUQ1AgKi9cXG4gNTA2OlxcdFxcdFxcdGNhc2UgSVBfUkVDVkVSUl9SRkM0ODg0OlxcbiA1MDc6XFx0XFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuIDUwODpcXHRcXHRcXHR9XFxuIDUwOTpcXHRcXG4gNTEwOlxcdFxcdFxcdC8qIElQX09QVElPTlMgaXMgbm90IHN1cHBvcnRlZCwgbmVlZHMgc3ViZmxvdyBjYXJlICovXFxuIDUxMTpcXHRcXHRcXHQvKiBJUF9IRFJJTkNMLCBJUF9OT0RFRlJBRyBhcmUgbm90IHN1cHBvcnRlZCwgUkFXIHNwZWNpZmljICovXFxuIDUxMjpcXHRcXHRcXHQvKiBJUF9NVUxUSUNBU1RfVFRMLCBJUF9NVUxUSUNBU1RfTE9PUCwgSVBfVU5JQ0FTVF9JRixcXG4gNTEzOlxcdFxcdFxcdCAqIElQX0FERF9NRU1CRVJTSElQLCBJUF9BRERfU09VUkNFX01FTUJFUlNISVAsIElQX0RST1BfTUVNQkVSU0hJUCxcXG4gNTE0OlxcdFxcdFxcdCAqIElQX0RST1BfU09VUkNFX01FTUJFUlNISVAsIElQX0JMT0NLX1NPVVJDRSwgSVBfVU5CTE9DS19TT1VSQ0UsXFxuIDUxNTpcXHRcXHRcXHQgKiBNQ0FTVF9KT0lOX0dST1VQLCBNQ0FTVF9MRUFWRV9HUk9VUCBNQ0FTVF9KT0lOX1NPVVJDRV9HUk9VUCxcXG4gNTE2OlxcdFxcdFxcdCAqIE1DQVNUX0xFQVZFX1NPVVJDRV9HUk9VUCwgTUNBU1RfQkxPQ0tfU09VUkNFLCBNQ0FTVF9VTkJMT0NLX1NPVVJDRSxcXG4gNTE3OlxcdFxcdFxcdCAqIE1DQVNUX01TRklMVEVSLCBJUF9NVUxUSUNBU1RfQUxMIGFyZSBub3Qgc3VwcG9ydGVkLCBiZXR0ZXIgbm90IGRlYWxcXG4gNTE4OlxcdFxcdFxcdCAqIHdpdGggbWNhc3Qgc3R1ZmZcXG4gNTE5OlxcdFxcdFxcdCAqL1xcbiA1MjA6XFx0XFx0XFx0LyogSVBfSVBTRUNfUE9MSUNZLCBJUF9YRlJNX1BPTElDWSBhcmUgbnV0IHN1cHBvcnRlZCwgdW5yZWxhdGVkIGhlcmUgKi9cXG4gNTIxOlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gNTIyOlxcdFxcdH1cXG4gNTIzOlxcdFxcdGlmIChsZXZlbCA9PSBTT0xfSVBWNikge1xcbiA1MjQ6XFx0XFx0XFx0c3dpdGNoIChvcHRuYW1lKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEzVDA5OjUwOjA1LjM5OTIyMjk0NVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDk3NTkxMDgxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkRpdmluZyBEZWVwZXIgaW50byBgbXB0Y3Bfc3VwcG9ydGVkX3NvY2tvcHRgKipcblxuQWxyaWdodCwgc28gdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHJlYWxseSBkaWcgaW50byBgbXB0Y3Bfc3VwcG9ydGVkX3NvY2tvcHRgLiBXZSd2ZSB0b3VjaGVkIG9uIGl0LCB3ZSB1bmRlcnN0YW5kIGl0cyBiYXNpYyBwdXJwb3NlLCBidXQgbGV0J3Mgbm90IGp1c3Qgc2tpbSB0aGUgc3VyZmFjZS4gV2hhdCdzIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBzdXBwb3J0ZWQgb3B0aW9ucz8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyAqdGhvcm91Z2hseSogdG8gYXNzZXNzIGl0cyByb2xlIGluIHRoaXMgc3BlY2lmaWMgbmV0d29yayBjb25maWd1cmF0aW9uLlxuXG5JIG5lZWQgdG8ga25vdyB0aGUgZ3JhbnVsYXIgZGV0YWlscyBvZiBob3cgdGhpcyBzb2NrZXQgb3B0aW9uIG9wZXJhdGVzLiBBcmUgdGhlcmUgYW55IHVuZXhwZWN0ZWQgc2lkZSBlZmZlY3RzIHRvIGNlcnRhaW4gY29tYmluYXRpb25zIG9mIG9wdGlvbnM/IFdoYXQncyB0aGUgcGVyZm9ybWFuY2Ugb3ZlcmhlYWQsIGlmIGFueT8gQXJlIHRoZXJlIGFueSBsaW1pdGF0aW9ucyBvciBlZGdlIGNhc2VzIEkgc2hvdWxkIGJlIGF3YXJlIG9mPyBJIG5lZWQgdG8gdGhpbmsgbGlrZSBhIHN5c3RlbXMgcHJvZ3JhbW1lciBhbmQgYW50aWNpcGF0ZSBwb3RlbnRpYWwgaXNzdWVzLlxuXG5MZXQncyBnZXQgaW50byB0aGUgbml0dHktZ3JpdHR5IGFuZCBzZWUgd2hhdCBzZWNyZXRzIHRoaXMgb3B0aW9uIGlzIGhpZGluZy4gS25vd2luZyB0aGUgZGV0YWlscyBpcyB0aGUgb25seSB3YXkgdG8gZWZmZWN0aXZlbHkgdXNlIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTgxMSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMDk6NTA6MTYuMzc1MTM2MzIyWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExOTUxNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L21wdGNwL3NvY2tvcHQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1MjMsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1MjM6XFx0XFx0aWYgKGxldmVsID09IFNPTF9JUFY2KSB7XFxuIDUyNDpcXHRcXHRcXHRzd2l0Y2ggKG9wdG5hbWUpIHtcXG4gNTI1OlxcdFxcdFxcdGNhc2UgSVBWNl9WNk9OTFk6XFxuIDUyNjpcXHRcXG4gNTI3OlxcdFxcdFxcdC8qIHRoZSBmb2xsb3dpbmcgYXJlIGNvbnRyb2wgY21zZyByZWxhdGVkICovXFxuIDUyODpcXHRcXHRcXHRjYXNlIElQVjZfUkVDVlBLVElORk86XFxuIDUyOTpcXHRcXHRcXHRjYXNlIElQVjZfMjI5MlBLVElORk86XFxuIDUzMDpcXHRcXHRcXHRjYXNlIElQVjZfUkVDVkhPUExJTUlUOlxcbiA1MzE6XFx0XFx0XFx0Y2FzZSBJUFY2XzIyOTJIT1BMSU1JVDpcXG4gNTMyOlxcdFxcdFxcdGNhc2UgSVBWNl9SRUNWUlRIRFI6XFxuIDUzMzpcXHRcXHRcXHRjYXNlIElQVjZfMjI5MlJUSERSOlxcbiA1MzQ6XFx0XFx0XFx0Y2FzZSBJUFY2X1JFQ1ZIT1BPUFRTOlxcbiA1MzU6XFx0XFx0XFx0Y2FzZSBJUFY2XzIyOTJIT1BPUFRTOlxcbiA1MzY6XFx0XFx0XFx0Y2FzZSBJUFY2X1JFQ1ZEU1RPUFRTOlxcbiA1Mzc6XFx0XFx0XFx0Y2FzZSBJUFY2XzIyOTJEU1RPUFRTOlxcbiA1Mzg6XFx0XFx0XFx0Y2FzZSBJUFY2X1JFQ1ZUQ0xBU1M6XFxuIDUzOTpcXHRcXHRcXHRjYXNlIElQVjZfRkxPV0lORk86XFxuIDU0MDpcXHRcXHRcXHRjYXNlIElQVjZfUkVDVlBBVEhNVFU6XFxuIDU0MTpcXHRcXHRcXHRjYXNlIElQVjZfUkVDVk9SSUdEU1RBRERSOlxcbiA1NDI6XFx0XFx0XFx0Y2FzZSBJUFY2X1JFQ1ZGUkFHU0laRTpcXG4gNTQzOlxcdFxcbiA1NDQ6XFx0XFx0XFx0LyogdGhlIGZvbGxvd2luZyBvbmVzIG5lZWQgc29tZSBsb3ZlIGJ1dCBhcmUgcXVpdGUgY29tbW9uICovXFxuIDU0NTpcXHRcXHRcXHRjYXNlIElQVjZfVENMQVNTOlxcbiA1NDY6XFx0XFx0XFx0Y2FzZSBJUFY2X1RSQU5TUEFSRU5UOlxcbiA1NDc6XFx0XFx0XFx0Y2FzZSBJUFY2X0ZSRUVCSU5EOlxcbiA1NDg6XFx0XFx0XFx0Y2FzZSBJUFY2X1BLVElORk86XFxuIDU0OTpcXHRcXHRcXHRjYXNlIElQVjZfMjI5MlBLVE9QVElPTlM6XFxuIDU1MDpcXHRcXHRcXHRjYXNlIElQVjZfVU5JQ0FTVF9IT1BTOlxcbiA1NTE6XFx0XFx0XFx0Y2FzZSBJUFY2X01UVV9ESVNDT1ZFUjpcXG4gNTUyOlxcdFxcdFxcdGNhc2UgSVBWNl9NVFU6XFxuIDU1MzpcXHRcXHRcXHRjYXNlIElQVjZfUkVDVkVSUjpcXG4gNTU0OlxcdFxcdFxcdGNhc2UgSVBWNl9GTE9XSU5GT19TRU5EOlxcbiA1NTU6XFx0XFx0XFx0Y2FzZSBJUFY2X0ZMT1dMQUJFTF9NR1I6XFxuIDU1NjpcXHRcXHRcXHRjYXNlIElQVjZfTUlOSE9QQ09VTlQ6XFxuIDU1NzpcXHRcXHRcXHRjYXNlIElQVjZfRE9OVEZSQUc6XFxuIDU1ODpcXHRcXHRcXHRjYXNlIElQVjZfQVVUT0ZMT1dMQUJFTDpcXG4gNTU5OlxcdFxcbiA1NjA6XFx0XFx0XFx0LyogdGhlIGZvbGxvd2luZyBvbmUgaXMgYSBuby1vcCBmb3IgcGxhaW4gVENQICovXFxuIDU2MTpcXHRcXHRcXHRjYXNlIElQVjZfUkVDVkVSUl9SRkM0ODg0OlxcbiA1NjI6XFx0XFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuIDU2MzpcXHRcXHRcXHR9XFxuIDU2NDpcXHRcXG4gNTY1OlxcdFxcdFxcdC8qIElQVjZfSE9QT1BUUywgSVBWNl9SVEhEUkRTVE9QVFMsIElQVjZfUlRIRFIsIElQVjZfRFNUT1BUUyBhcmVcXG4gNTY2OlxcdFxcdFxcdCAqIG5vdCBzdXBwb3J0ZWRcXG4gNTY3OlxcdFxcdFxcdCAqL1xcbiA1Njg6XFx0XFx0XFx0LyogSVBWNl9NVUxUSUNBU1RfSE9QUywgSVBWNl9NVUxUSUNBU1RfTE9PUCwgSVBWNl9VTklDQVNUX0lGLFxcbiA1Njk6XFx0XFx0XFx0ICogSVBWNl9NVUxUSUNBU1RfSUYsIElQVjZfQUREUkZPUk0sXFxuIDU3MDpcXHRcXHRcXHQgKiBJUFY2X0FERF9NRU1CRVJTSElQLCBJUFY2X0RST1BfTUVNQkVSU0hJUCwgSVBWNl9KT0lOX0FOWUNBU1QsXFxuIDU3MTpcXHRcXHRcXHQgKiBJUFY2X0xFQVZFX0FOWUNBU1QsIElQVjZfTVVMVElDQVNUX0FMTCwgTUNBU1RfSk9JTl9HUk9VUCwgTUNBU1RfTEVBVkVfR1JPVVAsXFxuIDU3MjpcXHRcXHRcXHQgKiBNQ0FTVF9KT0lOX1NPVVJDRV9HUk9VUCwgTUNBU1RfTEVBVkVfU09VUkNFX0dST1VQLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xM1QwOTo1MDoxNi4zNzYzMzQyMzJaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjY2NTI1MzY2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIElQdjYgVENMQVNTIFBhdGNoKipcblxuT2theSwgc28gYElQVjZfVENMQVNTYCBpcyBzdXBwb3J0ZWQsIHdoaWNoIGlzIGdvb2QuIFRoaXMgcGF0Y2ggaXMgYWRkaW5nIHRoZSBuZWNlc3NhcnkgaGFuZGxpbmcgZm9yIGl0IHdpdGhpbiB0aGUgTVBUQ1AgY29kZSwgc3BlY2lmaWNhbGx5IGluIGBtcHRjcF9zZXRzb2Nrb3B0X3Y2YCBhbmQgYG1wdGNwX2dldHNvY2tvcHRfdjZgLiBJdCBsb29rcyBsaWtlIHRoZSBmaWxlIGJlaW5nIG1vZGlmaWVkIGlzIGBuZXQvbXB0Y3Avc29ja29wdC5jYC5cblxuTXkgZm9jdXMgbmVlZHMgdG8gYmUgb24gdGhlc2UgZnVuY3Rpb25zOiBgbXB0Y3Bfc2V0c29ja29wdF92Nl9zZXRfdGNsYXNzYCwgYG1wdGNwX3NldHNvY2tvcHRfdjZgLCBhbmQgYG1wdGNwX2dldHNvY2tvcHRfdjZgLiBBaCwgSSBzZWUsIGBtcHRjcF9zZXRzb2Nrb3B0X3Y2YCBhbmQgYG1wdGNwX2dldHNvY2tvcHRfdjZgIGFscmVhZHkgZXhpc3QuIGBtcHRjcF9zZXRzb2Nrb3B0X3Y2X3NldF90Y2xhc3NgIGlzIHRoZSBuZXcgZnVuY3Rpb24sIHdoaWNoIG1ha2VzIHNlbnNlLlxuXG5Gb3IgdGhlIGNvbmZpZ3VyYXRpb25zLCBpdCByZXF1aXJlcyBgTVBUQ1BgIGFuZCBgTVBUQ1BfSVBWNmAuIFdhaXQgYSBzZWNvbmTigKZXaGlsZSBgTVBUQ1BfSVBWNmAgaXNuJ3QgKnN0cmljdGx5KiBuZWVkZWQgZm9yIGBtcHRjcF9zZXRzb2Nrb3B0X3Y2YCB0byBjb21waWxlLCBpdCdzIGVzc2VudGlhbCBmb3IgTVBUQ1AgdG8gYWN0dWFsbHkgKndvcmsqIHdpdGggSVB2NiBzb2NrZXRzLiBJdCdzIGEgc3VidGxlIGRpc3RpbmN0aW9uLCBidXQgaW1wb3J0YW50LiBUaGVyZWZvcmUsIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB3aGV0aGVyIGBNUFRDUF9JUFY2YCBpcyByZXF1aXJlZCB0byBjcmVhdGUgYW4gSVB2NiBNUFRDUCBzb2NrZXQuIFRoYXQncyB0aGUga2V5IHF1ZXN0aW9uIGhlcmUsIGl0J3Mgbm90IHN0cmljdGx5IGEgY29tcGlsZSB0aW1lIGRlcGVuZGVuY3kuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MDA1LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjU3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMDk6NTA6MjMuMDQxNTkwMDM4WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDk5MzcwODIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTVBUQ1BfSVBWNlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbXB0Y3AvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tcHRjcC9LY29uZmlnPTE2PWNvbmZpZyBJTkVUX01QVENQX0RJQUdcXG4tLVxcbm5ldC9tcHRjcC9LY29uZmlnLTE5LVxcbm5ldC9tcHRjcC9LY29uZmlnOjIwOmNvbmZpZyBNUFRDUF9JUFY2XFxubmV0L21wdGNwL0tjb25maWctMjEtXFx0Ym9vbCBcXFwiTVBUQ1A6IElQdjYgc3VwcG9ydCBmb3IgTXVsdGlwYXRoIFRDUFxcXCJcXG4tLVxcbm5ldC9tcHRjcC9jdHJsLmM9NTg3PXZvaWQgX19pbml0IG1wdGNwX2luaXQodm9pZClcXG4tLVxcbm5ldC9tcHRjcC9jdHJsLmMtNTk1LVxcbm5ldC9tcHRjcC9jdHJsLmM6NTk2OiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxcbm5ldC9tcHRjcC9jdHJsLmMtNTk3LWludCBfX2luaXQgbXB0Y3B2Nl9pbml0KHZvaWQpXFxuLS1cXG5uZXQvbXB0Y3Avb3B0aW9ucy5jPTIzPXN0YXRpYyB2b2lkIG1wdGNwX3BhcnNlX29wdGlvbihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L21wdGNwL29wdGlvbnMuYy0yNDEtXFx0XFx0XFx0XFx0bXBfb3B0LVxcdTAwM2VhZGRyLmZhbWlseSA9IEFGX0lORVQ7XFxubmV0L21wdGNwL29wdGlvbnMuYzoyNDI6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXFxubmV0L21wdGNwL29wdGlvbnMuYy0yNDMtXFx0XFx0XFx0ZWxzZSBpZiAob3BzaXplID09IFRDUE9MRU5fTVBUQ1BfQUREX0FERFI2IHx8XFxuLS1cXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTI1Mi1cXHRcXHRcXHRcXHRtcF9vcHQtXFx1MDAzZWFkZHIuZmFtaWx5ID0gQUZfSU5FVDtcXG5uZXQvbXB0Y3Avb3B0aW9ucy5jOjI1MzojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTI1NC1cXHRcXHRcXHRlbHNlIGlmIChvcHNpemUgPT0gVENQT0xFTl9NUFRDUF9BRERfQUREUjZfQkFTRSB8fFxcbi0tXFxubmV0L21wdGNwL29wdGlvbnMuYy0yNzQtXFx0XFx0fVxcbm5ldC9tcHRjcC9vcHRpb25zLmM6Mjc1OiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxcbm5ldC9tcHRjcC9vcHRpb25zLmMtMjc2LVxcdFxcdGVsc2Uge1xcbi0tXFxubmV0L21wdGNwL29wdGlvbnMuYz02MzI9c3RhdGljIHU2NCBhZGRfYWRkcl9nZW5lcmF0ZV9obWFjKHU2NCBrZXkxLCB1NjQga2V5MixcXG4tLVxcbm5ldC9tcHRjcC9vcHRpb25zLmMtNjQ0LVxcdH1cXG5uZXQvbXB0Y3Avb3B0aW9ucy5jOjY0NTojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTY0Ni1cXHRlbHNlIGlmIChhZGRyLVxcdTAwM2VmYW1pbHkgPT0gQUZfSU5FVDYpIHtcXG4tLVxcbm5ldC9tcHRjcC9vcHRpb25zLmM9MTM4ND12b2lkIG1wdGNwX3dyaXRlX29wdGlvbnMoc3RydWN0IHRjcGhkciAqdGgsIF9fYmUzMiAqcHRyLCBzdHJ1Y3QgdGNwX3NvY2sgKnRwLFxcbi0tXFxubmV0L21wdGNwL29wdGlvbnMuYy0xNTY3LVxcbm5ldC9tcHRjcC9vcHRpb25zLmM6MTU2ODojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcXG5uZXQvbXB0Y3Avb3B0aW9ucy5jLTE1NjktXFx0XFx0aWYgKG9wdHMtXFx1MDAzZWFkZHIuZmFtaWx5ID09IEFGX0lORVQ2KVxcbi0tXFxubmV0L21wdGNwL29wdGlvbnMuYy0xNTg2LVxcdFxcdH1cXG5uZXQvbXB0Y3Avb3B0aW9ucy5jOjE1ODc6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXFxubmV0L21wdGNwL29wdGlvbnMuYy0xNTg4LVxcdFxcdGVsc2UgaWYgKG9wdHMtXFx1MDAzZWFkZHIuZmFtaWx5ID09IEFGX0lORVQ2KSB7XFxuLS1cXG5uZXQvbXB0Y3AvcG0uYz0zMz1ib29sIG1wdGNwX3BtX2FkZHJfZmFtaWxpZXNfbWF0Y2goY29uc3Qgc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L21wdGNwL3BtLmMtMzgtXFxubmV0L21wdGNwL3BtLmM6Mzk6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXFxubmV0L21wdGNwL3BtLmMtNDAtXFx0Ym9vbCBsb2NfaXNfdjQgPSBsb2MtXFx1MDAzZWZhbWlseSA9PSBBRl9JTkVUIHx8IGlwdjZfYWRkcl92NG1hcHBlZChcXHUwMDI2bG9jLVxcdTAwM2VhZGRyNik7XFxuLS1cXG5uZXQvbXB0Y3AvcG0uYz01NT1ib29sIG1wdGNwX2FkZHJlc3Nlc19lcXVhbChjb25zdCBzdHJ1Y3QgbXB0Y3BfYWRkcl9pbmZvICphLFxcbi0tXFxubmV0L21wdGNwL3BtLmMtNjItXFx0XFx0XFx0YWRkcl9lcXVhbHMgPSBhLVxcdTAwM2VhZGRyLnNfYWRkciA9PSBiLVxcdTAwM2VhZGRyLnNfYWRkcjtcXG5uZXQvbXB0Y3AvcG0uYzo2MzojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcXG5uZXQvbXB0Y3AvcG0uYy02NC1cXHRcXHRlbHNlXFxuLS1cXG5uZXQvbXB0Y3AvcG0uYz04Mz12b2lkIG1wdGNwX2xvY2FsX2FkZHJlc3MoY29uc3Qgc3RydWN0IHNvY2tfY29tbW9uICpza2MsXFxuLS1cXG5uZXQvbXB0Y3AvcG0uYy04OS1cXHRcXHRhZGRyLVxcdTAwM2VhZGRyLnNfYWRkciA9IHNrYy1cXHUwMDNlc2tjX3Jjdl9zYWRkcjtcXG5uZXQvbXB0Y3AvcG0uYzo5MDojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcXG5uZXQvbXB0Y3AvcG0uYy05MS1cXHRlbHNlIGlmIChhZGRyLVxcdTAwM2VmYW1pbHkgPT0gQUZfSU5FVDYpXFxuLS1cXG5uZXQvbXB0Y3AvcG0uYz05Nj12b2lkIG1wdGNwX3JlbW90ZV9hZGRyZXNzKGNvbnN0IHN0cnVjdCBzb2NrX2NvbW1vbiAqc2tjLFxcbi0tXFxubmV0L21wdGNwL3BtLmMtMTAyLVxcdFxcdGFkZHItXFx1MDAzZWFkZHIuc19hZGRyID0gc2tjLVxcdTAwM2Vza2NfZGFkZHI7XFxubmV0L21wdGNwL3BtLmM6MTAzOiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxcbm5ldC9tcHRjcC9wbS5jLTEwNC1cXHRlbHNlIGlmIChhZGRyLVxcdTAwM2VmYW1pbHkgPT0gQUZfSU5FVDYpXFxuLS1cXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmM9NjA2PWZpbGxfbG9jYWxfYWRkcmVzc19hbnkoc3RydWN0IG1wdGNwX3NvY2sgKm1zaywgc3RydWN0IG1wdGNwX2FkZHJfaW5mbyAqcmVtb3RlLFxcbi0tXFxubmV0L21wdGNwL3BtX2tlcm5lbC5jLTYxMi1cXHRsb2NhbC1cXHUwMDNlYWRkci5mYW1pbHkgPVxcbm5ldC9tcHRjcC9wbV9rZXJuZWwuYzo2MTM6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXFxubmV0L21wdGNwL3BtX2tlcm5lbC5jLTYxNC1cXHRcXHRcXHRyZW1vdGUtXFx1MDAzZWZhbWlseSA9PSBBRl9JTkVUNiBcXHUwMDI2XFx1MDAyNlxcbi0tXFxubmV0L21wdGNwL3BtX2tlcm5lbC5jPTg1Mj1zdGF0aWMgaW50IG1wdGNwX3BtX25sX2NyZWF0ZV9saXN0ZW5fc29ja2V0KHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9tcHRjcC9wbV9rZXJuZWwuYy04ODktXFx0bXB0Y3BfaW5mbzJzb2NrYWRkcihcXHUwMDI2ZW50cnktXFx1MDAzZWFkZHIsIFxcdTAwMjZhZGRyLCBlbnRyeS1cXHUwMDNlYWRkci5mYW1pbHkpO1xcbm5ldC9tcHRjcC9wbV9rZXJuZWwuYzo4OTA6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXFxubmV0L21wdGNwL3BtX2tlcm5lbC5jLTg5MS1cXHRpZiAoZW50cnktXFx1MDAzZWFkZHIuZmFtaWx5ID09IEFGX0lORVQ2KVxcbi0tXFxubmV0L21wdGNwL3BtX2tlcm5lbC5jLTg5NS1cXHRcXHRlcnIgPSBpbmV0X2JpbmRfc2soc3NrLCAoc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKilcXHUwMDI2YWRkciwgYWRkcmxlbik7XFxubmV0L21wdGNwL3BtX2tlcm5lbC5jOjg5NjojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcXG5uZXQvbXB0Y3AvcG1fa2VybmVsLmMtODk3LVxcdGVsc2UgaWYgKHNzay1cXHUwMDNlc2tfZmFtaWx5ID09IEFGX0lORVQ2KVxcbi0tXFxubmV0L21wdGNwL3BtX25ldGxpbmsuYz0yMj1zdGF0aWMgaW50IG1wdGNwX3BtX2ZhbWlseV90b19hZGRyKGludCBmYW1pbHkpXFxubmV0L21wdGNwL3BtX25ldGxpbmsuYy0yMy17XFxubmV0L21wdGNwL3BtX25ldGxpbmsuYzoyNDojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcXG5uZXQvbXB0Y3AvcG1fbmV0bGluay5jLTI1LVxcdGlmIChmYW1pbHkgPT0gQUZfSU5FVDYpXFxuLS1cXG5uZXQvbXB0Y3AvcG1fbmV0bGluay5jPTMxPXN0YXRpYyBpbnQgbXB0Y3BfcG1fcGFyc2VfcG1fYWRkcl9hdHRyKHN0cnVjdCBubGF0dHIgKnRiW10sXFxuLS1cXG5uZXQvbXB0Y3AvcG1fbmV0bGluay5jLTYzLVxcdGlmIChhZGRyLVxcdTAwM2VmYW1pbHkgIT0gQUZfSU5FVFxcbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmM6NjQ6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXFxubmV0L21wdGNwL3BtX25ldGxpbmsuYy02NS1cXHQgICAgXFx1MDAyNlxcdTAwMjYgYWRkci1cXHUwMDNlZmFtaWx5ICE9IEFGX0lORVQ2XFxuLS1cXG5uZXQvbXB0Y3AvcG1fbmV0bGluay5jLTc4LVxcbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmM6Nzk6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXFxubmV0L21wdGNwL3BtX25ldGxpbmsuYy04MC1cXHRpZiAoYWRkci1cXHUwMDNlZmFtaWx5ID09IEFGX0lORVQ2KVxcbi0tXFxubmV0L21wdGNwL3BtX25ldGxpbmsuYz0xMzE9c3RhdGljIGludCBtcHRjcF9ubF9maWxsX2FkZHIoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmMtMTU2LVxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmM6MTU3OiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxcbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmMtMTU4LVxcdGVsc2UgaWYgKGFkZHItXFx1MDAzZWZhbWlseSA9PSBBRl9JTkVUNiBcXHUwMDI2XFx1MDAyNlxcbi0tXFxubmV0L21wdGNwL3BtX25ldGxpbmsuYz0yOTg9c3RhdGljIGludCBtcHRjcF9ldmVudF9hZGRfc3ViZmxvdyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3Qgc29jayAqc3NrKVxcbi0tXFxubmV0L21wdGNwL3BtX25ldGxpbmsuYy0zMTItXFx0XFx0YnJlYWs7XFxubmV0L21wdGNwL3BtX25ldGxpbmsuYzozMTM6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXFxubmV0L21wdGNwL3BtX25ldGxpbmsuYy0zMTQtXFx0Y2FzZSBBRl9JTkVUNjoge1xcbi0tXFxubmV0L21wdGNwL3BtX25ldGxpbmsuYz00NjU9dm9pZCBtcHRjcF9ldmVudF9hZGRyX2Fubm91bmNlZChjb25zdCBzdHJ1Y3Qgc29jayAqc3NrLFxcbi0tXFxubmV0L21wdGNwL3BtX25ldGxpbmsuYy01MDItXFx0XFx0YnJlYWs7XFxubmV0L21wdGNwL3BtX25ldGxpbmsuYzo1MDM6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXFxubmV0L21wdGNwL3BtX25ldGxpbmsuYy01MDQtXFx0Y2FzZSBBRl9JTkVUNjpcXG4tLVxcbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmM9NTIyPXZvaWQgbXB0Y3BfZXZlbnRfcG1fbGlzdGVuZXIoY29uc3Qgc3RydWN0IHNvY2sgKnNzayxcXG4tLVxcbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmMtNTUxLVxcdFxcdGJyZWFrO1xcbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmM6NTUyOiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxcbm5ldC9tcHRjcC9wbV9uZXRsaW5rLmMtNTUzLVxcdGNhc2UgQUZfSU5FVDY6IHtcXG4tLVxcbm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYz00MzI9c3RhdGljIHN0cnVjdCBzb2NrICptcHRjcF9ubF9maW5kX3NzayhzdHJ1Y3QgbXB0Y3Bfc29jayAqbXNrLFxcbi0tXFxubmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jLTQ1Ny1cXHRcXHRcXHRicmVhaztcXG5uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmM6NDU4OiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxcbm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYy00NTktXFx0XFx0Y2FzZSBBRl9JTkVUNjoge1xcbi0tXFxubmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jPTQ3OD1pbnQgbXB0Y3BfcG1fbmxfc3ViZmxvd19kZXN0cm95X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbm5ldC9tcHRjcC9wbV91c2Vyc3BhY2UuYy01MDYtXFxubmV0L21wdGNwL3BtX3VzZXJzcGFjZS5jOjUwNzojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcXG5uZXQvbXB0Y3AvcG1fdXNlcnNwYWNlLmMtNTA4LVxcdGlmIChhZGRyX2wuYWRkci5mYW1pbHkgPT0gQUZfSU5FVCBcXHUwMDI2XFx1MDAyNiBpcHY2X2FkZHJfdjRtYXBwZWQoXFx1MDAyNmFkZHJfci5hZGRyNikpIHtcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTIwLSNpbmNsdWRlIFxcdTAwM2NuZXQvdGNwX3N0YXRlcy5oXFx1MDAzZVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjIxOiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTIyLSNpbmNsdWRlIFxcdTAwM2NuZXQvdHJhbnNwX3Y2LmhcXHUwMDNlXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0zMT1zdGF0aWMgdW5zaWduZWQgaW50IG1wdGNwX2lucV9oaW50KGNvbnN0IHN0cnVjdCBzb2NrICpzayk7XFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zNS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzozNjojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zNy1zdHJ1Y3QgbXB0Y3A2X3NvY2sge1xcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmM9NjQ9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgKm1wdGNwX2ZhbGxiYWNrX3RjcF9vcHMoY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtNjctXFxubmV0L21wdGNwL3Byb3RvY29sLmM6Njg6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXFxubmV0L21wdGNwL3Byb3RvY29sLmMtNjktXFx0aWYgKGZhbWlseSA9PSBBRl9JTkVUNilcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jPTMzOTc9c3RhdGljIHZvaWQgbXB0Y3BfY29weV9pbmFkZHJzKHN0cnVjdCBzb2NrICptc2ssIGNvbnN0IHN0cnVjdCBzb2NrICpzc2spXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMzM5OC17XFxubmV0L21wdGNwL3Byb3RvY29sLmM6MzM5OTojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zNDAwLVxcdGNvbnN0IHN0cnVjdCBpcHY2X3BpbmZvICpzc2s2ID0gaW5ldDZfc2soc3NrKTtcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jPTM0NDI9c3RhdGljIGludCBtcHRjcF9kaXNjb25uZWN0KHN0cnVjdCBzb2NrICpzaywgaW50IGZsYWdzKVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtMzUwNC1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYzozNTA1OiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTM1MDYtc3RhdGljIHN0cnVjdCBpcHY2X3BpbmZvICptcHRjcF9pbmV0Nl9zayhjb25zdCBzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYz0zNTUzPXN0cnVjdCBzb2NrICptcHRjcF9za19jbG9uZV9pbml0KGNvbnN0IHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTM1NjUtXFxubmV0L21wdGNwL3Byb3RvY29sLmM6MzU2NjojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zNTY3LVxcdGlmIChuc2stXFx1MDAzZXNrX2ZhbWlseSA9PSBBRl9JTkVUNilcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jLTM1NzItXFxubmV0L21wdGNwL3Byb3RvY29sLmM6MzU3MzojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy0zNTc0LVxcdGlmIChuc2stXFx1MDAzZXNrX2ZhbWlseSA9PSBBRl9JTkVUNilcXG4tLVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jPTQwOTk9c3RhdGljIGludCBtcHRjcF9iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICp1YWRkciwgaW50IGFkZHJfbGVuKVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmMtNDExMy1cXHRcXHRlcnIgPSBpbmV0X2JpbmRfc2soc3NrLCB1YWRkciwgYWRkcl9sZW4pO1xcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjQxMTQ6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXFxubmV0L21wdGNwL3Byb3RvY29sLmMtNDExNS1cXHRlbHNlIGlmIChzay1cXHUwMDNlc2tfZmFtaWx5ID09IEFGX0lORVQ2KVxcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmM9NDYzNT12b2lkIF9faW5pdCBtcHRjcF9wcm90b19pbml0KHZvaWQpXFxuLS1cXG5uZXQvbXB0Y3AvcHJvdG9jb2wuYy00Njc0LVxcbm5ldC9tcHRjcC9wcm90b2NvbC5jOjQ2NzU6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXFxubmV0L21wdGNwL3Byb3RvY29sLmMtNDY3Ni1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBtcHRjcF92Nl9zdHJlYW1fb3BzID0ge1xcbi0tXFxubmV0L21wdGNwL3Byb3RvY29sLmg9OTEyPXZvaWQgX19pbml0IG1wdGNwX3Byb3RvX2luaXQodm9pZCk7XFxubmV0L21wdGNwL3Byb3RvY29sLmg6OTEzOiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxcbm5ldC9tcHRjcC9wcm90b2NvbC5oLTkxNC1pbnQgX19pbml0IG1wdGNwX3Byb3RvX3Y2X2luaXQodm9pZCk7XFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE3LSNpbmNsdWRlIFxcdTAwM2NuZXQvcHJvdG9jb2wuaFxcdTAwM2VcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjE4OiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTktI2luY2x1ZGUgXFx1MDAzY25ldC9pcDZfcm91dGUuaFxcdTAwM2VcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmM9MzU4PXN0YXRpYyBpbnQgc3ViZmxvd192NF9zZW5kX3N5bmFjayhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBkc3RfZW50cnkgKmRzdCxcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtMzcwLVxcbm5ldC9tcHRjcC9zdWJmbG93LmM6MzcxOiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtMzcyLXN0YXRpYyBpbnQgc3ViZmxvd192Nl9zZW5kX3N5bmFjayhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBkc3RfZW50cnkgKmRzdCxcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmM9NjQ5PXN0YXRpYyBpbnQgc3ViZmxvd19yZWJ1aWxkX2hlYWRlcihzdHJ1Y3Qgc29jayAqc2spXFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTY1OC1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjY1OTojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTY2MC1zdGF0aWMgaW50IHN1YmZsb3dfdjZfcmVidWlsZF9oZWFkZXIoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYz02OTI9c3RhdGljIHZvaWQgc3ViZmxvd192NF9yZXFfZGVzdHJ1Y3RvcihzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpXFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTY5Ny1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjY5ODojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTY5OS1zdGF0aWMgc3RydWN0IHJlcXVlc3Rfc29ja19vcHMgbXB0Y3Bfc3ViZmxvd192Nl9yZXF1ZXN0X3NvY2tfb3BzIF9fcm9fYWZ0ZXJfaW5pdDtcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmM9NzM3PXN0cnVjdCByZXF1ZXN0X3NvY2sgKm1wdGNwX3N1YmZsb3dfcmVxc2tfYWxsb2MoY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29ja19vcHMgKm9wcyxcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtNzQyLVxcdFxcdG9wcyA9IFxcdTAwMjZtcHRjcF9zdWJmbG93X3Y0X3JlcXVlc3Rfc29ja19vcHM7XFxubmV0L21wdGNwL3N1YmZsb3cuYzo3NDM6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXFxubmV0L21wdGNwL3N1YmZsb3cuYy03NDQtXFx0ZWxzZSBpZiAob3BzLVxcdTAwM2VmYW1pbHkgPT0gQUZfSU5FVDYpXFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTE1NTM9c3ViZmxvd19kZWZhdWx0X2FmX29wcyhzdHJ1Y3Qgc29jayAqc2spXFxubmV0L21wdGNwL3N1YmZsb3cuYy0xNTU0LXtcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjE1NTU6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXFxubmV0L21wdGNwL3N1YmZsb3cuYy0xNTU2LVxcdGlmIChzay1cXHUwMDNlc2tfZmFtaWx5ID09IEFGX0lORVQ2KVxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYy0xNTYxLVxcbm5ldC9tcHRjcC9zdWJmbG93LmM6MTU2MjojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE1NjMtdm9pZCBtcHRjcHY2X2hhbmRsZV9tYXBwZWQoc3RydWN0IHNvY2sgKnNrLCBib29sIG1hcHBlZClcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmM9MTU4Mj12b2lkIG1wdGNwX2luZm8yc29ja2FkZHIoY29uc3Qgc3RydWN0IG1wdGNwX2FkZHJfaW5mbyAqaW5mbyxcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTU5Mi1cXHRcXHRcXHRpbl9hZGRyLVxcdTAwM2VzaW5fYWRkciA9IGluZm8tXFx1MDAzZWFkZHI7XFxubmV0L21wdGNwL3N1YmZsb3cuYzoxNTkzOiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTU5NC1cXHRcXHRlbHNlIGlmIChpcHY2X2FkZHJfdjRtYXBwZWQoXFx1MDAyNmluZm8tXFx1MDAzZWFkZHI2KSlcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTU5OC1cXHR9XFxubmV0L21wdGNwL3N1YmZsb3cuYzoxNTk5OiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTYwMC1cXHRlbHNlIGlmIChhZGRyLVxcdTAwM2Vzc19mYW1pbHkgPT0gQUZfSU5FVDYpIHtcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmM9MTYxMz1pbnQgX19tcHRjcF9zdWJmbG93X2Nvbm5lY3Qoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3QgbXB0Y3BfcG1fbG9jYWwgKmxvY2FsLFxcbi0tXFxubmV0L21wdGNwL3N1YmZsb3cuYy0xNjQ4LVxcdFxcdFxcdGxvY2FsX2lkID0gLTE7XFxubmV0L21wdGNwL3N1YmZsb3cuYzoxNjQ5OiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTY1MC1cXHR9IGVsc2UgaWYgKHNrLVxcdTAwM2Vza19mYW1pbHkgPT0gQUZfSU5FVDYpIHtcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTY2NS1cXHRhZGRybGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7XFxubmV0L21wdGNwL3N1YmZsb3cuYzoxNjY2OiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtMTY2Ny1cXHRpZiAoYWRkci5zc19mYW1pbHkgPT0gQUZfSU5FVDYpXFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTE3NTY9c3RhdGljIHZvaWQgbXB0Y3Bfc3ViZmxvd19vcHNfb3ZlcnJpZGUoc3RydWN0IHNvY2sgKnNzaylcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE3NTcte1xcbm5ldC9tcHRjcC9zdWJmbG93LmM6MTc1ODojaWYgSVNfRU5BQkxFRChDT05GSUdfTVBUQ1BfSVBWNilcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTE3NTktXFx0aWYgKHNzay1cXHUwMDNlc2tfcHJvdCA9PSBcXHUwMDI2dGNwdjZfcHJvdClcXG4tLVxcbm5ldC9tcHRjcC9zdWJmbG93LmM9MTc2Nj1zdGF0aWMgdm9pZCBtcHRjcF9zdWJmbG93X29wc191bmRvX292ZXJyaWRlKHN0cnVjdCBzb2NrICpzc2spXFxubmV0L21wdGNwL3N1YmZsb3cuYy0xNzY3LXtcXG5uZXQvbXB0Y3Avc3ViZmxvdy5jOjE3Njg6I2lmIElTX0VOQUJMRUQoQ09ORklHX01QVENQX0lQVjYpXFxubmV0L21wdGNwL3N1YmZsb3cuYy0xNzY5LVxcdGlmIChzc2stXFx1MDAzZXNrX3Byb3QgPT0gXFx1MDAyNnRjcHY2X3Byb3Rfb3ZlcnJpZGUpXFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jPTIxNDE9dm9pZCBfX2luaXQgbXB0Y3Bfc3ViZmxvd19pbml0KHZvaWQpXFxuLS1cXG5uZXQvbXB0Y3Avc3ViZmxvdy5jLTIxNzMtXFxubmV0L21wdGNwL3N1YmZsb3cuYzoyMTc0OiNpZiBJU19FTkFCTEVEKENPTkZJR19NUFRDUF9JUFY2KVxcbm5ldC9tcHRjcC9zdWJmbG93LmMtMjE3NS12b2lkIF9faW5pdCBtcHRjcF9zdWJmbG93X3Y2X2luaXQodm9pZClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMDk6NTA6MjMuMTUxNTMyNDRaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDcxMzY2ODIwMTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgTVBUQ1AgSVB2NiBTb2NrZXQgT3B0aW9uIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIGl0J3MgY2xlYXIgdGhhdCBgTVBUQ1BfSVBWNmAgaXMgYSBuZWNlc3NhcnkgY29uZmlnIHRvIGVuYWJsZSBJUHY2IE1QVENQIHNvY2tldHMuIFRoYXQgbWFrZXMgc2Vuc2UsIHRoZSBjb2RlIChgbXB0Y3BfdjZfc3RyZWFtX29wc2ApIGlzIG9ubHkgcmVnaXN0ZXJlZCB3aGVuIHRoYXQgY29uZmlnIGlzIGVuYWJsZWQuIFNvLCB3ZSdyZSBkZWFsaW5nIHdpdGggYE1QVENQYCBhbmQgYE1QVENQX0lQVjZgIGFzIHRoZSBwcmltYXJ5IGNvbmZpZ3VyYXRpb25zIHRvIGJlIGF3YXJlIG9mLiBXZSBhbHNvIG5lZWQgYElQVjY9eWAsIGJ1dCB0aGF0IGlzIGEgZ2VuZXJpYyBjb25maWcsIHdlIGNhbiBqdXN0IGZvY3VzIG9uIGBNUFRDUGAgYW5kIGBNUFRDUF9JUFY2YCBmb3Igbm93LlxuXG5GdW5jdGlvbi13aXNlLCBJIG5lZWQgdG8gZm9jdXMgb24gYSBmZXcgdGhpbmdzLiBgbXB0Y3Bfc2V0c29ja29wdF92Nl9zZXRfdGNsYXNzYCBpcyBhIG5ldyBmdW5jdGlvbiwgYW5kIHRoZW4gYG1wdGNwX3NldHNvY2tvcHRfdjZgIGFuZCBgbXB0Y3BfZ2V0c29ja29wdF92NmAgYXJlIGV4aXN0aW5nLCBidXQgSSBzZWUgdGhleSBhcmUgbW9kaWZpZWQgaGVyZS4gSSBjaGVja2VkIHRoYXQgYG1wdGNwX3NldHNvY2tvcHRfdjZfc2V0X3RjbGFzc2AgaXMgaW5kZWVkIHN0YXRpYy5cblxuSSd2ZSByZXZpZXdlZCB0aGUgY29kZSBmb3IgYG1wdGNwX3NldHNvY2tvcHRfdjZfc2V0X3RjbGFzc2AgY2FyZWZ1bGx5LiBJdCBjYWxscyBgaXB2Nl9zZXRzb2Nrb3B0YCB3aGljaCBpcyBnb29kIHRvIHNlZSBhcyBpdCBjb25maXJtcyB0aGF0IHN0YW5kYXJkIElQdjYgZnVuY3Rpb25hbGl0eSBpcyBsZXZlcmFnZWQuIFRoZSBjcml0aWNhbCBwYXJ0IGlzIGhvdyB0aGUgVENMQVNTIHZhbHVlIGlzIHByb3BhZ2F0ZWQgdG8gdGhlIHN1YmZsb3dzIHdpdGhpbiBhbiBNUFRDUCBzb2NrZXQuIEl0IHNlZW1zIGNvcnJlY3Q7IGl0IGxvY2tzIHRoZSBtYWluIHNvY2tldCwgdGhlbiBpbmNyZW1lbnRzIHRoZSBzb2Nrb3B0IHNlcXVlbmNlIG51bWJlciwgcmVhZHMgdGhlIFRDTEFTUyB2YWx1ZSwgYW5kIHRoZW4gaXRlcmF0ZXMgdGhyb3VnaCBhbGwgdGhlIHN1YmZsb3dzIHRvIHNldCB0aGUgVENMQVNTIG9uIGVhY2gsIHJlc2V0dGluZyB0aGUgZGVzdGluYXRpb24gb2YgdGhlIHN1YmZsb3cncyBzb2NrZXQuIFRoaXMgaXMgYWxsIHJlYWNoYWJsZSBhbmQgZnVuY3Rpb25hbC5cblxuVGhlcmVmb3JlLCBmb3IgdGhpcyBmdXp6aW5nIGVmZm9ydCwgSSB3aWxsIHNldCBgV29ydGhGdXp6aW5nYCB0byBgdHJ1ZWAuIE15IGBFbmFibGVDb25maWdzYCB3aWxsIGJlIGBbXCJNUFRDUFwiLCBcIk1QVENQX0lQVjZcIl1gLiBUaGUgYEZvY3VzU3ltYm9sc2Agd2lsbCBiZSBgW1wibXB0Y3Bfc2V0c29ja29wdF92Nl9zZXRfdGNsYXNzXCIsIFwibXB0Y3Bfc2V0c29ja29wdF92NlwiLCBcIm1wdGNwX2dldHNvY2tvcHRfdjZcIl1gLiBUaGUgYFJlYXNvbmluZ2Agd2lsbCBiZTogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBzZXR0aW5nIGFuZCBnZXR0aW5nIHRoZSBJUFY2X1RDTEFTUyBzb2NrZXQgb3B0aW9uIG9uIE1QVENQIHNvY2tldHMuIEl0IGludHJvZHVjZXMgYSBuZXcgZnVuY3Rpb24gbXB0Y3Bfc2V0c29ja29wdF92Nl9zZXRfdGNsYXNzIHRvIHByb3BhZ2F0ZSB0aGUgdGNsYXNzIHZhbHVlIHRvIGFsbCBzdWJmbG93cy5cIlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzAzNSwiT3V0cHV0VG9rZW5zIjoxNDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3ODQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTNUMDk6NTE6MTAuMjg4MjE4MDY1WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUwMzc2MDg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNUFRDUFwiLFxuICAgIFwiTVBUQ1BfSVBWNlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1wdGNwX3NldHNvY2tvcHRfdjZfc2V0X3RjbGFzc1wiLFxuICAgIFwibXB0Y3Bfc2V0c29ja29wdF92NlwiLFxuICAgIFwibXB0Y3BfZ2V0c29ja29wdF92NlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3Igc2V0dGluZyBhbmQgZ2V0dGluZyB0aGUgSVBWNl9UQ0xBU1Mgc29ja2V0IG9wdGlvbiBvbiBNUFRDUCBzb2NrZXRzLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IGZ1bmN0aW9uIG1wdGNwX3NldHNvY2tvcHRfdjZfc2V0X3RjbGFzcyB0byBwcm9wYWdhdGUgdGhlIHRjbGFzcyB2YWx1ZSB0byBhbGwgc3ViZmxvd3MuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTVBUQ1BcIixcbiAgICBcIk1QVENQX0lQVjZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtcHRjcF9zZXRzb2Nrb3B0X3Y2X3NldF90Y2xhc3NcIixcbiAgICBcIm1wdGNwX3NldHNvY2tvcHRfdjZcIixcbiAgICBcIm1wdGNwX2dldHNvY2tvcHRfdjZcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHNldHRpbmcgYW5kIGdldHRpbmcgdGhlIElQVjZfVENMQVNTIHNvY2tldCBvcHRpb24gb24gTVBUQ1Agc29ja2V0cy4gSXQgaW50cm9kdWNlcyBhIG5ldyBmdW5jdGlvbiBtcHRjcF9zZXRzb2Nrb3B0X3Y2X3NldF90Y2xhc3MgdG8gcHJvcGFnYXRlIHRoZSB0Y2xhc3MgdmFsdWUgdG8gYWxsIHN1YmZsb3dzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowvjsbw[1] Phase: Succeeded StartedAt: 2026-07-13 09:51:21 +0000 UTC FinishedAt: 2026-07-13 09:51:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvjsbw[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-13 09:51:21 +0000 UTC FinishedAt: 2026-07-13 09:51:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvjsbw[2] Phase: Succeeded StartedAt: 2026-07-13 09:51:21 +0000 UTC FinishedAt: 2026-07-13 14:24:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvjsbw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_setsockopt_v6_set_tclass","mptcp_setsockopt_v6","mptcp_getsockopt_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"8be81062-4bbc-46e4-ac2c-40fe2cea6ddb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-13 09:51:21 +0000 UTC FinishedAt: 2026-07-13 14:24:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_setsockopt_v6_set_tclass","mptcp_setsockopt_v6","mptcp_getsockopt_v6"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"8be81062-4bbc-46e4-ac2c-40fe2cea6ddb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowvjsbw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_setsockopt_v6_set_tclass","mptcp_setsockopt_v6","mptcp_getsockopt_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"8be81062-4bbc-46e4-ac2c-40fe2cea6ddb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-13 09:51:21 +0000 UTC FinishedAt: 2026-07-13 09:52:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvjsbw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_setsockopt_v6_set_tclass","mptcp_setsockopt_v6","mptcp_getsockopt_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"8be81062-4bbc-46e4-ac2c-40fe2cea6ddb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-13 09:51:21 +0000 UTC FinishedAt: 2026-07-13 09:51:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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-workflowvjsbw/series-workflowvjsbw-convert-artifact-1649508937/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvjsbw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_setsockopt_v6_set_tclass","mptcp_setsockopt_v6","mptcp_getsockopt_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"8be81062-4bbc-46e4-ac2c-40fe2cea6ddb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-13 09:52:00 +0000 UTC FinishedAt: 2026-07-13 10:18:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvjsbw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_setsockopt_v6_set_tclass","mptcp_setsockopt_v6","mptcp_getsockopt_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"8be81062-4bbc-46e4-ac2c-40fe2cea6ddb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-13 09:52:00 +0000 UTC FinishedAt: 2026-07-13 10:18:08 +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:*6f42a4ad-a690-4710-8366-72f0c3086a11,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-workflowvjsbw/series-workflowvjsbw-convert-artifact-1649508937/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": "a963b41d-9521-4492-95ee-e085ad8bf49c", "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-workflowvjsbw/series-workflowvjsbw-build-action-3243442471/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvjsbw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_setsockopt_v6_set_tclass","mptcp_setsockopt_v6","mptcp_getsockopt_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"8be81062-4bbc-46e4-ac2c-40fe2cea6ddb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-13 09:52:00 +0000 UTC FinishedAt: 2026-07-13 10:17:58 +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:*6f42a4ad-a690-4710-8366-72f0c3086a11,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-workflowvjsbw/series-workflowvjsbw-convert-artifact-1649508937/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": "a963b41d-9521-4492-95ee-e085ad8bf49c", "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-workflowvjsbw/series-workflowvjsbw-build-action-3243442471/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvjsbw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_setsockopt_v6_set_tclass","mptcp_setsockopt_v6","mptcp_getsockopt_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"8be81062-4bbc-46e4-ac2c-40fe2cea6ddb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-13 10:18:08 +0000 UTC FinishedAt: 2026-07-13 10:18:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvjsbw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_setsockopt_v6_set_tclass","mptcp_setsockopt_v6","mptcp_getsockopt_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"8be81062-4bbc-46e4-ac2c-40fe2cea6ddb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-13 10:18:08 +0000 UTC FinishedAt: 2026-07-13 10:18:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvjsbw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_setsockopt_v6_set_tclass","mptcp_setsockopt_v6","mptcp_getsockopt_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"8be81062-4bbc-46e4-ac2c-40fe2cea6ddb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-13 10:18:08 +0000 UTC FinishedAt: 2026-07-13 10:18:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvjsbw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_setsockopt_v6_set_tclass","mptcp_setsockopt_v6","mptcp_getsockopt_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"8be81062-4bbc-46e4-ac2c-40fe2cea6ddb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-13 10:18:08 +0000 UTC FinishedAt: 2026-07-13 10:18:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"8be81062-4bbc-46e4-ac2c-40fe2cea6ddb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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-workflowvjsbw/series-workflowvjsbw-convert-artifact-3754898012/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvjsbw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_setsockopt_v6_set_tclass","mptcp_setsockopt_v6","mptcp_getsockopt_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"8be81062-4bbc-46e4-ac2c-40fe2cea6ddb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-13 10:18:28 +0000 UTC FinishedAt: 2026-07-13 10:20:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvjsbw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_setsockopt_v6_set_tclass","mptcp_setsockopt_v6","mptcp_getsockopt_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"8be81062-4bbc-46e4-ac2c-40fe2cea6ddb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-13 10:18:28 +0000 UTC FinishedAt: 2026-07-13 10:20:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a963b41d-9521-4492-95ee-e085ad8bf49c,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-workflowvjsbw/series-workflowvjsbw-build-action-3243442471/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-workflowvjsbw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_setsockopt_v6_set_tclass","mptcp_setsockopt_v6","mptcp_getsockopt_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"8be81062-4bbc-46e4-ac2c-40fe2cea6ddb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-13 10:20:30 +0000 UTC FinishedAt: 2026-07-13 10:20:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvjsbw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_setsockopt_v6_set_tclass","mptcp_setsockopt_v6","mptcp_getsockopt_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"8be81062-4bbc-46e4-ac2c-40fe2cea6ddb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-13 10:20:30 +0000 UTC FinishedAt: 2026-07-13 10:20:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvjsbw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_setsockopt_v6_set_tclass","mptcp_setsockopt_v6","mptcp_getsockopt_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"8be81062-4bbc-46e4-ac2c-40fe2cea6ddb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-13 10:20:30 +0000 UTC FinishedAt: 2026-07-13 11:20:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvjsbw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_setsockopt_v6_set_tclass","mptcp_setsockopt_v6","mptcp_getsockopt_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"8be81062-4bbc-46e4-ac2c-40fe2cea6ddb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-13 10:20:30 +0000 UTC FinishedAt: 2026-07-13 11:20:55 +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:*6f42a4ad-a690-4710-8366-72f0c3086a11,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-workflowvjsbw/series-workflowvjsbw-convert-artifact-3754898012/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": "ae20a86e-bc3c-4b6a-bf07-73acaebb91fe", "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-workflowvjsbw/series-workflowvjsbw-build-action-4067817144/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvjsbw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_setsockopt_v6_set_tclass","mptcp_setsockopt_v6","mptcp_getsockopt_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"8be81062-4bbc-46e4-ac2c-40fe2cea6ddb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-13 10:20:30 +0000 UTC FinishedAt: 2026-07-13 11:20:45 +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:*6f42a4ad-a690-4710-8366-72f0c3086a11,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-workflowvjsbw/series-workflowvjsbw-convert-artifact-3754898012/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": "ae20a86e-bc3c-4b6a-bf07-73acaebb91fe", "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-workflowvjsbw/series-workflowvjsbw-build-action-4067817144/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvjsbw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_setsockopt_v6_set_tclass","mptcp_setsockopt_v6","mptcp_getsockopt_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"8be81062-4bbc-46e4-ac2c-40fe2cea6ddb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-13 11:20:55 +0000 UTC FinishedAt: 2026-07-13 11:20:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvjsbw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_setsockopt_v6_set_tclass","mptcp_setsockopt_v6","mptcp_getsockopt_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"8be81062-4bbc-46e4-ac2c-40fe2cea6ddb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-13 11:20:55 +0000 UTC FinishedAt: 2026-07-13 11:20:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvjsbw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_setsockopt_v6_set_tclass","mptcp_setsockopt_v6","mptcp_getsockopt_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"8be81062-4bbc-46e4-ac2c-40fe2cea6ddb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-13 11:20:55 +0000 UTC FinishedAt: 2026-07-13 11:23:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvjsbw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_setsockopt_v6_set_tclass","mptcp_setsockopt_v6","mptcp_getsockopt_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"8be81062-4bbc-46e4-ac2c-40fe2cea6ddb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-13 11:20:55 +0000 UTC FinishedAt: 2026-07-13 11:23:00 +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:*ae20a86e-bc3c-4b6a-bf07-73acaebb91fe,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-workflowvjsbw/series-workflowvjsbw-build-action-4067817144/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-workflowvjsbw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_setsockopt_v6_set_tclass","mptcp_setsockopt_v6","mptcp_getsockopt_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"8be81062-4bbc-46e4-ac2c-40fe2cea6ddb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-13 11:23:10 +0000 UTC FinishedAt: 2026-07-13 14:24:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvjsbw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_setsockopt_v6_set_tclass","mptcp_setsockopt_v6","mptcp_getsockopt_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"8be81062-4bbc-46e4-ac2c-40fe2cea6ddb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-13 11:23:10 +0000 UTC FinishedAt: 2026-07-13 14:24:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_setsockopt_v6_set_tclass","mptcp_setsockopt_v6","mptcp_getsockopt_v6"],"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:*a963b41d-9521-4492-95ee-e085ad8bf49c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*ae20a86e-bc3c-4b6a-bf07-73acaebb91fe,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-workflowvjsbw/series-workflowvjsbw-build-action-3243442471/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-workflowvjsbw/series-workflowvjsbw-build-action-4067817144/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowvjsbw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_setsockopt_v6_set_tclass","mptcp_setsockopt_v6","mptcp_getsockopt_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"8be81062-4bbc-46e4-ac2c-40fe2cea6ddb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-13 11:23:10 +0000 UTC FinishedAt: 2026-07-13 11:23:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvjsbw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_setsockopt_v6_set_tclass","mptcp_setsockopt_v6","mptcp_getsockopt_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"8be81062-4bbc-46e4-ac2c-40fe2cea6ddb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-13 11:23:10 +0000 UTC FinishedAt: 2026-07-13 11:23:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_setsockopt_v6_set_tclass","mptcp_setsockopt_v6","mptcp_getsockopt_v6"],"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-workflowvjsbw/series-workflowvjsbw-convert-artifact-2219829541/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvjsbw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_setsockopt_v6_set_tclass","mptcp_setsockopt_v6","mptcp_getsockopt_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"8be81062-4bbc-46e4-ac2c-40fe2cea6ddb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-13 11:23:10 +0000 UTC FinishedAt: 2026-07-13 11:23:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvjsbw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_setsockopt_v6_set_tclass","mptcp_setsockopt_v6","mptcp_getsockopt_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"8be81062-4bbc-46e4-ac2c-40fe2cea6ddb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-13 11:23:10 +0000 UTC FinishedAt: 2026-07-13 11:23:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvjsbw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_setsockopt_v6_set_tclass","mptcp_setsockopt_v6","mptcp_getsockopt_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"8be81062-4bbc-46e4-ac2c-40fe2cea6ddb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-13 11:23:10 +0000 UTC FinishedAt: 2026-07-13 11:23:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvjsbw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_setsockopt_v6_set_tclass","mptcp_setsockopt_v6","mptcp_getsockopt_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"8be81062-4bbc-46e4-ac2c-40fe2cea6ddb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-13 11:23:20 +0000 UTC FinishedAt: 2026-07-13 14:24:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvjsbw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mptcp_setsockopt_v6_set_tclass","mptcp_setsockopt_v6","mptcp_getsockopt_v6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MPTCP","MPTCP_IPV6"],"series_id":"8be81062-4bbc-46e4-ac2c-40fe2cea6ddb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-13 11:23:20 +0000 UTC FinishedAt: 2026-07-13 14:24:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a963b41d-9521-4492-95ee-e085ad8bf49c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*ae20a86e-bc3c-4b6a-bf07-73acaebb91fe,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-workflowvjsbw/series-workflowvjsbw-build-action-3243442471/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-workflowvjsbw/series-workflowvjsbw-build-action-4067817144/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-workflowvjsbw/series-workflowvjsbw-convert-artifact-2219829541/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,}