Name: series-workflow5w89c Phase: Succeeded StartedAt: 2026-08-16 00:24:36 +0000 UTC FinishedAt: 2026-08-16 04:08:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5w89c[0] Phase: Succeeded StartedAt: 2026-08-16 00:24:36 +0000 UTC FinishedAt: 2026-08-16 00:27:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5w89c[0].run-triage Phase: Succeeded StartedAt: 2026-08-16 00:24:36 +0000 UTC FinishedAt: 2026-08-16 00:27:28 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "3da8c3c8b8fa99505624b65ef590482f48e766b6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "RDS", "RDS_TCP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "3da8c3c8b8fa99505624b65ef590482f48e766b6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "RDS", "RDS_TCP" ], "series_id": "52dc30c6-ef29-4aa4-9480-c32f34e47ab6" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "rds_send_xmit", "rds_tcp_reset_callbacks", "rds_conn_shutdown" ], "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+CgkJCTx0ZD4yMDI2LzA4LzE2IDAwOjI2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1JEUyYjMzQ7LAogICAgJiMzNDtSRFNfVENQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmRzX3NlbmRfeG1pdCYjMzQ7LAogICAgJiMzNDtyZHNfdGNwX3Jlc2V0X2NhbGxiYWNrcyYjMzQ7LAogICAgJiMzNDtyZHNfY29ubl9zaHV0ZG93biYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7S01TQU4gaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGRldGVjdCB1c2VzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlLiBUaGlzIHBhdGNoIGZvY3VzZXMgZW50aXJlbHkgb24gZml4aW5nIGNvbmN1cnJlbmN5IGFuZCBzeW5jaHJvbml6YXRpb24gaXNzdWVzIHdpdGhpbiB0aGUgUkRTIHN1YnN5c3RlbS4gSXQgcmVwbGFjZXMgbm9uLWF0b21pYyBiaXQgY2xlYXJzIHdpdGggYXRvbWljIG9wZXJhdGlvbnMsIHVzZXMgYml0IGxvY2tzIChgdGVzdF9hbmRfc2V0X2JpdF9sb2NrYCkgdG8gcHJvcGVybHkgcXVpZXNjZSB0cmFuc21pdCBhbmQgcmVjZWl2ZSBwYXRocywgYW5kIGFkZHMgbWVtb3J5IGJhcnJpZXJzIChgd3FfaGFzX3NsZWVwZXJgKSB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9ucyBhbmQgbG9zdCB3YWtlLXVwcy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBtb2RpZnkgbWVtb3J5IGFsbG9jYXRpb25zLCBvciBhbHRlciBkYXRhIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIHNlbnQgb3ZlciB0aGUgbmV0d29yay4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgZXhwb3NlZCBieSB0aGVzZSBjaGFuZ2VzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIGJlIGNvbmN1cnJlbmN5IGlzc3VlcywgcmFjZSBjb25kaXRpb25zLCBvciBkZWFkbG9ja3MsIHdoaWNoIGFyZSBiZXN0IGNhdWdodCBieSBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIGxpa2UgS0FTQU4sIEtDU0FOLCBhbmQgTE9DS0RFUC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBkdXJpbmcgUkRTIGNvbm5lY3Rpb24gc2h1dGRvd24gYW5kIHJlc2V0LCB3aGVyZSB0aGUgUkRTX0lOX1hNSVQgYW5kIFJEU19SRUNWX1JFRklMTCBmbGFncyBjb3VsZCBiZSBjbG9iYmVyZWQgb3IgcmUtYWNxdWlyZWQgY29uY3VycmVudGx5LiBJdCB1c2VzIHRlc3RfYW5kX3NldF9iaXRfbG9jayB0byBwcm9wZXJseSBxdWllc2NlIHRoZSB0cmFuc21pdCBhbmQgcmVjZWl2ZSBwYXRocywgYW5kIHdxX2hhc19zbGVlcGVyIHRvIGVuc3VyZSBhIGZ1bGwgbWVtb3J5IGJhcnJpZXIgd2hlbiBjaGVja2luZyB0aGUgd2FpdCBxdWV1ZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIFJEUyBuZXR3b3JraW5nIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDAwOjI2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYmU4MmFmYjY5Y2RlMWI1ZTQ0M2YwM2U3ZmYyMjdiOTZmYmY1M2YxNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gQXVnIDE2IDAwOjI2OjMxIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9yZHMvY29ubmVjdGlvbi5jIGIvbmV0L3Jkcy9jb25uZWN0aW9uLmNcbmluZGV4IDdjOGFiOGU5NzNlMWIuLmExMGI2NjdjMDZjODcgMTAwNjQ0XG4tLS0gYS9uZXQvcmRzL2Nvbm5lY3Rpb24uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3Jkcy9jb25uZWN0aW9uLmNcbkBAIC0xMjAsNyAmIzQzOzEyMCwxNSBAQCBzdGF0aWMgdm9pZCByZHNfY29ubl9wYXRoX3Jlc2V0KHN0cnVjdCByZHNfY29ubl9wYXRoICpjcClcbiBcbiBcdHJkc19zdGF0c19pbmMoc19jb25uX3Jlc2V0KTtcbiBcdHJkc19zZW5kX3BhdGhfcmVzZXQoY3ApO1xuLVx0Y3AtXHUwMDNlY3BfZmxhZ3MgPSAwO1xuJiM0MztcbiYjNDM7XHQvKiBDbGVhciB0aGUgYml0cyB0aGUgcmVzZXQgaXMgcmVzcG9uc2libGUgZm9yIGluZGl2aWR1YWxseTogYVxuJiM0MztcdCAqIGJsYW5rZXQgY3BfZmxhZ3MgPSAwIGlzIGEgcGxhaW4gc3RvcmUgdGhhdCBjYW4gY2xvYmJlciBhXG4mIzQzO1x0ICogY29uY3VycmVudCBhdG9taWMgcmVhZC1tb2RpZnktd3JpdGUgb24gdGhlIHNhbWUgd29yZC5cbiYjNDM7XHQgKiBSRFNfSU5fWE1JVCBhbmQgUkRTX1JFQ1ZfUkVGSUxMIGFyZSBvd25lZCBieSB0aGUgY2FsbGVyLFxuJiM0MztcdCAqIHdoaWNoIHJlbGVhc2VzIHRoZW0gb25jZSB0aGUgdGVhcmRvd24gaXMgY29tcGxldGUuXG4mIzQzO1x0ICovXG4mIzQzO1x0Y2xlYXJfYml0KFJEU19MTF9TRU5EX0ZVTEwsIFx1MDAyNmNwLVx1MDAzZWNwX2ZsYWdzKTtcbiYjNDM7XHRjbGVhcl9iaXQoUkRTX1JFQ09OTkVDVF9QRU5ESU5HLCBcdTAwMjZjcC1cdTAwM2VjcF9mbGFncyk7XG4gXG4gXHQvKiBEbyBub3QgY2xlYXIgbmV4dF9yeF9zZXEgaGVyZSwgZWxzZSB3ZSBjYW5ub3QgZGlzdGluZ3Vpc2hcbiBcdCAqIHJldHJhbnNtaXR0ZWQgcGFja2V0cyBmcm9tIG5ldyBwYWNrZXRzLCBhbmQgd2lsbCBoYW5kIGFsbFxuQEAgLTQwNiwxNCAmIzQzOzQxNCwzMiBAQCB2b2lkIHJkc19jb25uX3NodXRkb3duKHN0cnVjdCByZHNfY29ubl9wYXRoICpjcClcbiBcdFx0fVxuIFx0XHRtdXRleF91bmxvY2soXHUwMDI2Y3AtXHUwMDNlY3BfY21fbG9jayk7XG4gXG4mIzQzO1x0XHQvKiBRdWllc2NlIHRoZSB0cmFuc21pdCBhbmQgcmVjZWl2ZS1yZWZpbGwgcGF0aHMgYnlcbiYjNDM7XHRcdCAqIGFjcXVpcmluZyB0aGVpciBiaXQgbG9ja3MsIG5vdCBtZXJlbHkgd2FpdGluZyBmb3JcbiYjNDM7XHRcdCAqIHRoZW0gdG8gYmUgcmVsZWFzZWQ6IHdpdGggYSBwbGFpbiB3YWl0LCBlaXRoZXIgcGF0aFxuJiM0MztcdFx0ICogY2FuIHJlLXRha2UgaXRzIGxvY2sgdGhlIGluc3RhbnQgYWZ0ZXIgd2Ugc2FtcGxlIGl0XG4mIzQzO1x0XHQgKiBjbGVhciBhbmQgdGhlbiBydW4gY29uY3VycmVudGx5IHdpdGggdGhlIHRyYW5zcG9ydFxuJiM0MztcdFx0ICogc2h1dGRvd24gYW5kIHRoZSBwYXRoIHJlc2V0IGJlbG93LiAgSG9sZGluZyBib3RoXG4mIzQzO1x0XHQgKiBsb2NrcyBhY3Jvc3MgdGhlIHRlYXJkb3duIG1ha2VzIHRoYXQgc3RydWN0dXJhbGx5XG4mIzQzO1x0XHQgKiBpbXBvc3NpYmxlLlxuJiM0MztcdFx0ICovXG4gXHRcdHdhaXRfZXZlbnQoY3AtXHUwMDNlY3Bfd2FpdHEsXG4tXHRcdFx0ICAgIXRlc3RfYml0KFJEU19JTl9YTUlULCBcdTAwMjZjcC1cdTAwM2VjcF9mbGFncykpO1xuJiM0MztcdFx0XHQgICAhdGVzdF9hbmRfc2V0X2JpdF9sb2NrKFJEU19JTl9YTUlULCBcdTAwMjZjcC1cdTAwM2VjcF9mbGFncykpO1xuIFx0XHR3YWl0X2V2ZW50KGNwLVx1MDAzZWNwX3dhaXRxLFxuLVx0XHRcdCAgICF0ZXN0X2JpdChSRFNfUkVDVl9SRUZJTEwsIFx1MDAyNmNwLVx1MDAzZWNwX2ZsYWdzKSk7XG4mIzQzO1x0XHRcdCAgICF0ZXN0X2FuZF9zZXRfYml0KFJEU19SRUNWX1JFRklMTCwgXHUwMDI2Y3AtXHUwMDNlY3BfZmxhZ3MpKTtcbiBcbiBcdFx0Y29ubi1cdTAwM2VjX3RyYW5zLVx1MDAzZWNvbm5fcGF0aF9zaHV0ZG93bihjcCk7XG4gXHRcdHJkc19jb25uX3BhdGhfcmVzZXQoY3ApO1xuIFxuJiM0MztcdFx0LyogUmVsZWFzZSB0aGUgdHdvIGxvY2tzIGFuZCB3YWtlIGFueSB3YWl0ZXIgKGUuZy5cbiYjNDM7XHRcdCAqIHJkc190Y3BfcmVzZXRfY2FsbGJhY2tzKCkpIHRoYXQgYmxvY2tlZCBvbiB0aGVtIHdoaWxlXG4mIzQzO1x0XHQgKiB3ZSBoZWxkIHRoZW0uICByZHNfY29ubl9wYXRoX3Jlc2V0KCkgbGVhdmVzIGJvdGggYml0c1xuJiM0MztcdFx0ICogYWxvbmU6IG93bmVyc2hpcCBlbmRzIGhlcmUsIG5vdCBpbnNpZGUgdGhlIHJlc2V0LlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRjbGVhcl9iaXRfdW5sb2NrKFJEU19JTl9YTUlULCBcdTAwMjZjcC1cdTAwM2VjcF9mbGFncyk7XG4mIzQzO1x0XHRjbGVhcl9iaXQoUkRTX1JFQ1ZfUkVGSUxMLCBcdTAwMjZjcC1cdTAwM2VjcF9mbGFncyk7XG4mIzQzO1x0XHR3YWtlX3VwX2FsbChcdTAwMjZjcC1cdTAwM2VjcF93YWl0cSk7XG4mIzQzO1xuIFx0XHRpZiAoIXJkc19jb25uX3BhdGhfdHJhbnNpdGlvbihjcCwgUkRTX0NPTk5fRElTQ09OTkVDVElORyxcbiBcdFx0XHRcdFx0ICAgICAgUkRTX0NPTk5fRE9XTikgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICAhcmRzX2Nvbm5fcGF0aF90cmFuc2l0aW9uKGNwLCBSRFNfQ09OTl9FUlJPUixcbmRpZmYgLS1naXQgYS9uZXQvcmRzL3NlbmQuYyBiL25ldC9yZHMvc2VuZC5jXG5pbmRleCAxNWExYjk3ZjEzZTc2Li5iOTBlMDU4NmY4MThjIDEwMDY0NFxuLS0tIGEvbmV0L3Jkcy9zZW5kLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9yZHMvc2VuZC5jXG5AQCAtMTE0LDggJiM0MzsxMTQsMTMgQEAgc3RhdGljIHZvaWQgcmVsZWFzZV9pbl94bWl0KHN0cnVjdCByZHNfY29ubl9wYXRoICpjcClcbiBcdCAqIGhvdCBwYXRoIGFuZCBmaW5kaW5nIHdhaXRlcnMgaXMgdmVyeSByYXJlLiAgV2UgZG9uJiMzOTt0IHdhbnQgdG8gd2Fsa1xuIFx0ICogdGhlIHN5c3RlbS13aWRlIGhhc2hlZCB3YWl0cXVldWUgYnVja2V0cyBpbiB0aGUgZmFzdCBwYXRoIG9ubHkgdG9cbiBcdCAqIGFsbW9zdCBuZXZlciBmaW5kIHdhaXRlcnMuXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiB3cV9oYXNfc2xlZXBlcigpIHN1cHBsaWVzIHRoZSBmdWxsIGJhcnJpZXIgdGhhdCBvcmRlcnMgdGhlIHdhaXRcbiYjNDM7XHQgKiBxdWV1ZSByZWFkIGFmdGVyIHRoZSBiaXQgY2xlYXI7IGNsZWFyX2JpdF91bmxvY2soKSBhbG9uZSBpcyBvbmx5XG4mIzQzO1x0ICogYSByZWxlYXNlIGFuZCB3b3VsZCBsZXQgdGhpcyBjaGVjayByZWFkIGEgc3RhbGUgZW1wdHkgcXVldWUsXG4mIzQzO1x0ICogbG9zaW5nIHRoZSB3YWtlLXVwLlxuIFx0ICovXG4tXHRpZiAod2FpdHF1ZXVlX2FjdGl2ZShcdTAwMjZjcC1cdTAwM2VjcF93YWl0cSkpXG4mIzQzO1x0aWYgKHdxX2hhc19zbGVlcGVyKFx1MDAyNmNwLVx1MDAzZWNwX3dhaXRxKSlcbiBcdFx0d2FrZV91cF9hbGwoXHUwMDI2Y3AtXHUwMDNlY3Bfd2FpdHEpO1xuIH1cbiBcbkBAIC0yMzksOCAmIzQzOzI0NCw5IEBAIGludCByZHNfc2VuZF94bWl0KHN0cnVjdCByZHNfY29ubl9wYXRoICpjcClcbiBcdFdSSVRFX09OQ0UoY3AtXHUwMDNlY3Bfc2VuZF9nZW4sIHNlbmRfZ2VuKTtcbiBcbiBcdC8qXG4tXHQgKiByZHNfY29ubl9zaHV0ZG93bigpIHNldHMgdGhlIGNvbm4gc3RhdGUgYW5kIHRoZW4gdGVzdHMgUkRTX0lOX1hNSVQsXG4tXHQgKiB3ZSBkbyB0aGUgb3Bwb3NpdGUgdG8gYXZvaWQgcmFjZXMuXG4mIzQzO1x0ICogcmRzX2Nvbm5fc2h1dGRvd24oKSBzZXRzIHRoZSBjb25uIHN0YXRlIGFuZCB0aGVuIGFjcXVpcmVzXG4mIzQzO1x0ICogUkRTX0lOX1hNSVQ7IHdlIHRha2UgdGhlIGxvY2sgZmlyc3QgYW5kIHRoZW4gY2hlY2sgdGhlIHN0YXRlLFxuJiM0MztcdCAqIHNvIG9uZSBvZiB1cyBpcyBndWFyYW50ZWVkIHRvIHNlZSB0aGUgb3RoZXImIzM5O3MgdXBkYXRlLlxuIFx0ICovXG4gXHRpZiAoIXJkc19jb25uX3BhdGhfdXAoY3ApKSB7XG4gXHRcdHJlbGVhc2VfaW5feG1pdChjcCk7XG5kaWZmIC0tZ2l0IGEvbmV0L3Jkcy90Y3AuYyBiL25ldC9yZHMvdGNwLmNcbmluZGV4IGIyNjM2MzRhYzc1MGQuLjFmZjllODQ2ZGZjN2MgMTAwNjQ0XG4tLS0gYS9uZXQvcmRzL3RjcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvcmRzL3RjcC5jXG5AQCAtMTE1LDQ1ICYjNDM7MTE1LDY2IEBAIHZvaWQgcmRzX3RjcF9yZXN0b3JlX2NhbGxiYWNrcyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxuIH1cbiBcbiAvKlxuLSAqIHJkc190Y3BfcmVzZXRfY2FsbGJhY2tzKCkgc3dpdGNoZXMgdGhlIHRvIHRoZSBuZXcgc29jayBhbmRcbi0gKiByZXR1cm5zIHRoZSBleGlzdGluZyB0Yy1cdTAwM2V0X3NvY2suXG4mIzQzOyAqIHJkc190Y3BfcmVzZXRfY2FsbGJhY2tzKCkgc3dpdGNoZXMgYSBwYXRoIHRvIGEgbmV3IHNvY2tldCBhbmRcbiYjNDM7ICogcmVsZWFzZXMgdGhlIG9sZCBvbmUgaXQgZmluZHMgaW4gdGMtXHUwMDNldF9zb2NrLCByZXNvbHZpbmcgYSBkdWVsbGluZ1xuJiM0MzsgKiBTWU4uXG4gICpcbi0gKiBUaGUgb25seSBmdW5jdGlvbnMgdGhhdCBzZXQgdGMtXHUwMDNldF9zb2NrIGFyZSByZHNfdGNwX3NldF9jYWxsYmFja3Ncbi0gKiBhbmQgcmRzX3RjcF9yZXNldF9jYWxsYmFja3MuICBTZW5kIGFuZCByZWNlaXZlIHRydXN0IHRoYXRcbi0gKiBpdCBpcyBzZXQuICBUaGUgYWJzZW5jZSBvZiBSRFNfQ09OTl9VUCBiaXQgcHJvdGVjdHMgdGhvc2UgcGF0aHNcbi0gKiBmcm9tIGJlaW5nIGNhbGxlZCB3aGlsZSBpdCBpc24mIzM5O3Qgc2V0LlxuJiM0MzsgKiB0Yy1cdTAwM2V0X3NvY2sgaXMgc2V0IGJ5IHJkc190Y3Bfc2V0X2NhbGxiYWNrcygpIGFuZCBjbGVhcmVkIGJ5XG4mIzQzOyAqIHJkc190Y3BfcmVzdG9yZV9jYWxsYmFja3MoKSwgZnJvbSByZHNfdGNwX2Nvbm5fcGF0aF9zaHV0ZG93bigpIGFuZFxuJiM0MzsgKiBmcm9tIGhlcmUuICBTZW5kIGFuZCByZWNlaXZlIHRydXN0IHRoYXQgaXQgaXMgc2V0OiB0aGUgYWJzZW5jZSBvZlxuJiM0MzsgKiBSRFNfQ09OTl9VUCBwcm90ZWN0cyB0aG9zZSBwYXRocyBmcm9tIGJlaW5nIGNhbGxlZCB3aGlsZSBpdCBpc24mIzM5O3QsXG4mIzQzOyAqIGFuZCB0aGUgc3dhcCBkb25lIGhlcmUgcnVucyB1bmRlciBSRFNfSU5fWE1JVCBzbyB0aGF0IGl0IGNhbm5vdFxuJiM0MzsgKiBpbnRlcmxlYXZlIHdpdGggYSBzZW5kZXIgYWxyZWFkeSBpbnNpZGUgcmRzX3NlbmRfeG1pdCgpLlxuICAqL1xuIHZvaWQgcmRzX3RjcF9yZXNldF9jYWxsYmFja3Moc3RydWN0IHNvY2tldCAqc29jayxcbiBcdFx0XHQgICAgIHN0cnVjdCByZHNfY29ubl9wYXRoICpjcClcbiB7XG4gXHRzdHJ1Y3QgcmRzX3RjcF9jb25uZWN0aW9uICp0YyA9IGNwLVx1MDAzZWNwX3RyYW5zcG9ydF9kYXRhO1xuLVx0c3RydWN0IHNvY2tldCAqb3NvY2sgPSB0Yy1cdTAwM2V0X3NvY2s7XG4tXG4tXHRpZiAoIW9zb2NrKVxuLVx0XHRnb3RvIG5ld3NvY2s7XG4mIzQzO1x0c3RydWN0IHNvY2tldCAqb3NvY2s7XG4gXG4gXHQvKiBOZWVkIHRvIHJlc29sdmUgYSBkdWVsbGluZyBTWU4gYmV0d2VlbiBwZWVycy5cbiBcdCAqIFdlIGhhdmUgYW4gb3V0c3RhbmRpbmcgU1lOIHRvIHRoaXMgcGVlciwgd2hpY2ggbWF5XG4gXHQgKiBwb3RlbnRpYWxseSBoYXZlIHRyYW5zaXRpb25lZCB0byB0aGUgUkRTX0NPTk5fVVAgc3RhdGUsXG4gXHQgKiBzbyB3ZSBtdXN0IHF1aWVzY2UgYW55IHNlbmQgdGhyZWFkcyBiZWZvcmUgcmVzZXR0aW5nXG4tXHQgKiBjcF90cmFuc3BvcnRfZGF0YS4gV2UgcXVpZXNjZSB0aGVzZSB0aHJlYWRzIGJ5IHNldHRpbmdcbi1cdCAqIGNwX3N0YXRlIHRvIHNvbWV0aGluZyBvdGhlciB0aGFuIFJEU19DT05OX1VQLCBhbmQgdGhlblxuLVx0ICogd2FpdGluZyBmb3IgYW55IGV4aXN0aW5nIHRocmVhZHMgaW4gcmRzX3NlbmRfeG1pdCB0b1xuLVx0ICogY29tcGxldGUgcmVsZWFzZV9pbl94bWl0KCkuIChTdWJzZXF1ZW50IHRocmVhZHMgZW50ZXJpbmdcbi1cdCAqIHJkc19zZW5kX3htaXQoKSB3aWxsIGJhaWwgb24gIXJkc19jb25uX3VwKCkuXG4mIzQzO1x0ICogY3BfdHJhbnNwb3J0X2RhdGEuICBTZXR0aW5nIGNwX3N0YXRlIHRvIHNvbWV0aGluZyBvdGhlclxuJiM0MztcdCAqIHRoYW4gUkRTX0NPTk5fVVAgc3RvcHMgbmV3IHNlbmRlcnMsIGFuZCBvd25pbmcgUkRTX0lOX1hNSVRcbiYjNDM7XHQgKiBleGNsdWRlcyBhbnkgdGhyZWFkIGFscmVhZHkgaW5zaWRlIHJkc19zZW5kX3htaXQoKSBmb3IgdGhlXG4mIzQzO1x0ICogd2hvbGUgc29ja2V0IHN3YXAgYW5kIHRoZSByZHNfc2VuZF9wYXRoX3Jlc2V0KCkgYmVsb3cuXG4gXHQgKlxuLVx0ICogSG93ZXZlciBhbiBpbmNvbWluZyBzeW4tYWNrIGF0IHRoaXMgcG9pbnQgd291bGQgZW5kIHVwXG4tXHQgKiBtYXJraW5nIHRoZSBjb25uIGFzIFJEU19DT05OX1VQLCBhbmQgd291bGQgYWdhaW4gcGVybWl0XG4tXHQgKiByZHNfc2VuZF94bWkoKSB0aHJlYWRzIHRocm91Z2gsIHNvIGlkZWFsbHkgd2Ugd291bGRcbi1cdCAqIHN5bmNocm9uaXplIG9uIFJEU19DT05OX1VQIGFmdGVyIGxvY2tfc29jaygpLCBidXQgY2Fubm90XG4tXHQgKiBkbyB0aGF0OiB3YWl0aW5nIG9uICFSRFNfSU5fWE1JVCBhZnRlciBsb2NrX3NvY2soKSBtYXlcbi1cdCAqIGVuZCB1cCBkZWFkbG9ja2luZyB3aXRoIHRjcF9zZW5kbXNnKCksIGFuZCB0aGUgUkRTX0lOX1hNSVRcbi1cdCAqIHdvdWxkIG5vdCBnZXQgc2V0LiBBcyBhIHJlc3VsdCwgd2Ugc2V0IGNfc3RhdGUgdG9cbi1cdCAqIFJEU19DT05OX1JFU0VUVFRJTkcsIHRvIGVuc3VyZSB0aGF0IHJkc190Y3Bfc3RhdGVfY2hhbmdlXG4tXHQgKiBjYW5ub3QgbWFyayByZHNfY29ubl9wYXRoX3VwKCkgaW4gdGhlIHdpbmRvdyBiZWZvcmUgbG9ja19zb2NrKClcbiYjNDM7XHQgKiBBbiBpbmNvbWluZyBzeW4tYWNrIGF0IHRoaXMgcG9pbnQgd291bGQgZW5kIHVwIG1hcmtpbmcgdGhlXG4mIzQzO1x0ICogY29ubiBhcyBSRFNfQ09OTl9VUCwgYW5kIHdvdWxkIGFnYWluIHBlcm1pdCByZHNfc2VuZF94bWl0KClcbiYjNDM7XHQgKiB0aHJlYWRzIHRocm91Z2gsIHNvIGlkZWFsbHkgd2Ugd291bGQgc3luY2hyb25pemUgb25cbiYjNDM7XHQgKiBSRFNfQ09OTl9VUCBhZnRlciBsb2NrX3NvY2soKSwgYnV0IGNhbm5vdCBkbyB0aGF0OiBhY3F1aXJpbmdcbiYjNDM7XHQgKiBSRFNfSU5fWE1JVCBhZnRlciBsb2NrX3NvY2soKSBtYXkgZW5kIHVwIGRlYWRsb2NraW5nIHdpdGhcbiYjNDM7XHQgKiB0Y3Bfc2VuZG1zZygpLCB3aGljaCB0YWtlcyB0aGUgc29ja2V0IGxvY2sgd2hpbGUgaG9sZGluZ1xuJiM0MztcdCAqIFJEU19JTl9YTUlULiAgQXMgYSByZXN1bHQsIHdlIHNldCBjX3N0YXRlIHRvXG4mIzQzO1x0ICogUkRTX0NPTk5fUkVTRVRUSU5HLCB0byBlbnN1cmUgdGhhdCByZHNfdGNwX3N0YXRlX2NoYW5nZVxuJiM0MztcdCAqIGNhbm5vdCBtYXJrIHJkc19jb25uX3BhdGhfdXAoKSBpbiB0aGUgd2luZG93IGJlZm9yZVxuJiM0MztcdCAqIGxvY2tfc29jaygpLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogT25seSBtYWtlIHRoYXQgdHJhbnNpdGlvbiBpZiB0aGUgcGF0aCBpcyBzdGlsbCBjb25uZWN0aW5nXG4mIzQzO1x0ICogKG9yIGFscmVhZHkgcmVzZXR0aW5nIGZyb20gYW4gZWFybGllciBkdWVsKSwgc28gdGhhdCBhXG4mIzQzO1x0ICogY29uY3VycmVudCBzaHV0ZG93biYjMzk7cyBSRFNfQ09OTl9FUlJPUi9SRFNfQ09OTl9ESVNDT05ORUNUSU5HXG4mIzQzO1x0ICogaXMgbm90IG92ZXJ3cml0dGVuOyBhIHBhdGggaW4gYW55IG90aGVyIHN0YXRlIGlzIGRyb3BwZWRcbiYjNDM7XHQgKiBhbmQgaXRzIHBlbmRpbmcgc2h1dGRvd24gd2lucy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIXJkc19jb25uX3BhdGhfdHJhbnNpdGlvbihjcCwgUkRTX0NPTk5fQ09OTkVDVElORyxcbiYjNDM7XHRcdFx0XHQgICAgICBSRFNfQ09OTl9SRVNFVFRJTkcpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAhcmRzX2Nvbm5fcGF0aF90cmFuc2l0aW9uKGNwLCBSRFNfQ09OTl9SRVNFVFRJTkcsXG4mIzQzO1x0XHRcdFx0ICAgICAgUkRTX0NPTk5fUkVTRVRUSU5HKSlcbiYjNDM7XHRcdHJkc19jb25uX3BhdGhfZHJvcChjcCwgMCk7XG4mIzQzO1x0d2FpdF9ldmVudChjcC1cdTAwM2VjcF93YWl0cSxcbiYjNDM7XHRcdCAgICF0ZXN0X2FuZF9zZXRfYml0X2xvY2soUkRTX0lOX1hNSVQsIFx1MDAyNmNwLVx1MDAzZWNwX2ZsYWdzKSk7XG4mIzQzO1xuJiM0MztcdC8qIFJlYWQgdF9zb2NrIG9ubHkgd2hpbGUgb3duaW5nIFJEU19JTl9YTUlULiAgVGhlIHRlYXJkb3duIGluXG4mIzQzO1x0ICogcmRzX2Nvbm5fc2h1dGRvd24oKSByZWxlYXNlcyB0aGUgb2xkIHNvY2tldCBhbmQgY2xlYXJzXG4mIzQzO1x0ICogdF9zb2NrLCBzbyBhIHBvaW50ZXIgc2FtcGxlZCBiZWZvcmUgdGhlIHdhaXQgY2FuIGJlIHN0YWxlXG4mIzQzO1x0ICogYnkgdGhlIHRpbWUgd2Ugd2FrZSB1cC5cbiBcdCAqL1xuLVx0YXRvbWljX3NldChcdTAwMjZjcC1cdTAwM2VjcF9zdGF0ZSwgUkRTX0NPTk5fUkVTRVRUSU5HKTtcbi1cdHdhaXRfZXZlbnQoY3AtXHUwMDNlY3Bfd2FpdHEsICF0ZXN0X2JpdChSRFNfSU5fWE1JVCwgXHUwMDI2Y3AtXHUwMDNlY3BfZmxhZ3MpKTtcbiYjNDM7XHRvc29jayA9IHRjLVx1MDAzZXRfc29jaztcbiYjNDM7XHRpZiAoIW9zb2NrKVxuJiM0MztcdFx0Z290byBuZXdzb2NrO1xuJiM0MztcbiBcdC8qIHJlc2V0IHJlY2VpdmUgc2lkZSBzdGF0ZSBmb3IgcmRzX3RjcF9kYXRhX3JlY3YoKSBmb3Igb3NvY2sgICovXG4gXHRjYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoXHUwMDI2Y3AtXHUwMDNlY3Bfc2VuZF93KTtcbiBcdGNhbmNlbF9kZWxheWVkX3dvcmtfc3luYyhcdTAwMjZjcC1cdTAwM2VjcF9yZWN2X3cpO1xuQEAgLTE3Miw2ICYjNDM7MTkzLDkgQEAgdm9pZCByZHNfdGNwX3Jlc2V0X2NhbGxiYWNrcyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxuIFx0bG9ja19zb2NrKHNvY2stXHUwMDNlc2spO1xuIFx0cmRzX3RjcF9zZXRfY2FsbGJhY2tzKHNvY2ssIGNwKTtcbiBcdHJlbGVhc2Vfc29jayhzb2NrLVx1MDAzZXNrKTtcbiYjNDM7XG4mIzQzO1x0Y2xlYXJfYml0X3VubG9jayhSRFNfSU5fWE1JVCwgXHUwMDI2Y3AtXHUwMDNlY3BfZmxhZ3MpO1xuJiM0MztcdHdha2VfdXBfYWxsKFx1MDAyNmNwLVx1MDAzZWNwX3dhaXRxKTtcbiB9XG4gXG4gLyogQWRkIHRjIHRvIHJkc190Y3BfdGNfbGlzdCBhbmQgc2V0IHRjLVx1MDAzZXRfc29jay4gU2VlIGNvbW1lbnRzXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMDA6MjY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1JEUyYjMzQ7LAogICAgJiMzNDtSRFNfVENQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmRzX3NlbmRfeG1pdCYjMzQ7LAogICAgJiMzNDtyZHNfdGNwX3Jlc2V0X2NhbGxiYWNrcyYjMzQ7LAogICAgJiMzNDtyZHNfY29ubl9zaHV0ZG93biYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGR1cmluZyBSRFMgY29ubmVjdGlvbiBzaHV0ZG93biBhbmQgcmVzZXQsIHdoZXJlIHRoZSBSRFNfSU5fWE1JVCBhbmQgUkRTX1JFQ1ZfUkVGSUxMIGZsYWdzIGNvdWxkIGJlIGNsb2JiZXJlZCBvciByZS1hY3F1aXJlZCBjb25jdXJyZW50bHkuIEl0IHVzZXMgdGVzdF9hbmRfc2V0X2JpdF9sb2NrIHRvIHByb3Blcmx5IHF1aWVzY2UgdGhlIHRyYW5zbWl0IGFuZCByZWNlaXZlIHBhdGhzLCBhbmQgd3FfaGFzX3NsZWVwZXIgdG8gZW5zdXJlIGEgZnVsbCBtZW1vcnkgYmFycmllciB3aGVuIGNoZWNraW5nIHRoZSB3YWl0IHF1ZXVlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgUkRTIG5ldHdvcmtpbmcgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBiZTgyYWZiNjljZGUxYjVlNDQzZjAzZTdmZjIyN2I5NmZiZjUzZjE1CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBBdWcgMTYgMDA6MjY6MzEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvcmRzL2Nvbm5lY3Rpb24uYyBiL25ldC9yZHMvY29ubmVjdGlvbi5jCmluZGV4IDdjOGFiOGU5NzNlMWIuLmExMGI2NjdjMDZjODcgMTAwNjQ0Ci0tLSBhL25ldC9yZHMvY29ubmVjdGlvbi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9yZHMvY29ubmVjdGlvbi5jCkBAIC0xMjAsNyAmIzQzOzEyMCwxNSBAQCBzdGF0aWMgdm9pZCByZHNfY29ubl9wYXRoX3Jlc2V0KHN0cnVjdCByZHNfY29ubl9wYXRoICpjcCkKIAogCXJkc19zdGF0c19pbmMoc19jb25uX3Jlc2V0KTsKIAlyZHNfc2VuZF9wYXRoX3Jlc2V0KGNwKTsKLQljcC0mZ3Q7Y3BfZmxhZ3MgPSAwOwomIzQzOwomIzQzOwkvKiBDbGVhciB0aGUgYml0cyB0aGUgcmVzZXQgaXMgcmVzcG9uc2libGUgZm9yIGluZGl2aWR1YWxseTogYQomIzQzOwkgKiBibGFua2V0IGNwX2ZsYWdzID0gMCBpcyBhIHBsYWluIHN0b3JlIHRoYXQgY2FuIGNsb2JiZXIgYQomIzQzOwkgKiBjb25jdXJyZW50IGF0b21pYyByZWFkLW1vZGlmeS13cml0ZSBvbiB0aGUgc2FtZSB3b3JkLgomIzQzOwkgKiBSRFNfSU5fWE1JVCBhbmQgUkRTX1JFQ1ZfUkVGSUxMIGFyZSBvd25lZCBieSB0aGUgY2FsbGVyLAomIzQzOwkgKiB3aGljaCByZWxlYXNlcyB0aGVtIG9uY2UgdGhlIHRlYXJkb3duIGlzIGNvbXBsZXRlLgomIzQzOwkgKi8KJiM0MzsJY2xlYXJfYml0KFJEU19MTF9TRU5EX0ZVTEwsICZhbXA7Y3AtJmd0O2NwX2ZsYWdzKTsKJiM0MzsJY2xlYXJfYml0KFJEU19SRUNPTk5FQ1RfUEVORElORywgJmFtcDtjcC0mZ3Q7Y3BfZmxhZ3MpOwogCiAJLyogRG8gbm90IGNsZWFyIG5leHRfcnhfc2VxIGhlcmUsIGVsc2Ugd2UgY2Fubm90IGRpc3Rpbmd1aXNoCiAJICogcmV0cmFuc21pdHRlZCBwYWNrZXRzIGZyb20gbmV3IHBhY2tldHMsIGFuZCB3aWxsIGhhbmQgYWxsCkBAIC00MDYsMTQgJiM0Mzs0MTQsMzIgQEAgdm9pZCByZHNfY29ubl9zaHV0ZG93bihzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApCiAJCX0KIAkJbXV0ZXhfdW5sb2NrKCZhbXA7Y3AtJmd0O2NwX2NtX2xvY2spOwogCiYjNDM7CQkvKiBRdWllc2NlIHRoZSB0cmFuc21pdCBhbmQgcmVjZWl2ZS1yZWZpbGwgcGF0aHMgYnkKJiM0MzsJCSAqIGFjcXVpcmluZyB0aGVpciBiaXQgbG9ja3MsIG5vdCBtZXJlbHkgd2FpdGluZyBmb3IKJiM0MzsJCSAqIHRoZW0gdG8gYmUgcmVsZWFzZWQ6IHdpdGggYSBwbGFpbiB3YWl0LCBlaXRoZXIgcGF0aAomIzQzOwkJICogY2FuIHJlLXRha2UgaXRzIGxvY2sgdGhlIGluc3RhbnQgYWZ0ZXIgd2Ugc2FtcGxlIGl0CiYjNDM7CQkgKiBjbGVhciBhbmQgdGhlbiBydW4gY29uY3VycmVudGx5IHdpdGggdGhlIHRyYW5zcG9ydAomIzQzOwkJICogc2h1dGRvd24gYW5kIHRoZSBwYXRoIHJlc2V0IGJlbG93LiAgSG9sZGluZyBib3RoCiYjNDM7CQkgKiBsb2NrcyBhY3Jvc3MgdGhlIHRlYXJkb3duIG1ha2VzIHRoYXQgc3RydWN0dXJhbGx5CiYjNDM7CQkgKiBpbXBvc3NpYmxlLgomIzQzOwkJICovCiAJCXdhaXRfZXZlbnQoY3AtJmd0O2NwX3dhaXRxLAotCQkJICAgIXRlc3RfYml0KFJEU19JTl9YTUlULCAmYW1wO2NwLSZndDtjcF9mbGFncykpOwomIzQzOwkJCSAgICF0ZXN0X2FuZF9zZXRfYml0X2xvY2soUkRTX0lOX1hNSVQsICZhbXA7Y3AtJmd0O2NwX2ZsYWdzKSk7CiAJCXdhaXRfZXZlbnQoY3AtJmd0O2NwX3dhaXRxLAotCQkJICAgIXRlc3RfYml0KFJEU19SRUNWX1JFRklMTCwgJmFtcDtjcC0mZ3Q7Y3BfZmxhZ3MpKTsKJiM0MzsJCQkgICAhdGVzdF9hbmRfc2V0X2JpdChSRFNfUkVDVl9SRUZJTEwsICZhbXA7Y3AtJmd0O2NwX2ZsYWdzKSk7CiAKIAkJY29ubi0mZ3Q7Y190cmFucy0mZ3Q7Y29ubl9wYXRoX3NodXRkb3duKGNwKTsKIAkJcmRzX2Nvbm5fcGF0aF9yZXNldChjcCk7CiAKJiM0MzsJCS8qIFJlbGVhc2UgdGhlIHR3byBsb2NrcyBhbmQgd2FrZSBhbnkgd2FpdGVyIChlLmcuCiYjNDM7CQkgKiByZHNfdGNwX3Jlc2V0X2NhbGxiYWNrcygpKSB0aGF0IGJsb2NrZWQgb24gdGhlbSB3aGlsZQomIzQzOwkJICogd2UgaGVsZCB0aGVtLiAgcmRzX2Nvbm5fcGF0aF9yZXNldCgpIGxlYXZlcyBib3RoIGJpdHMKJiM0MzsJCSAqIGFsb25lOiBvd25lcnNoaXAgZW5kcyBoZXJlLCBub3QgaW5zaWRlIHRoZSByZXNldC4KJiM0MzsJCSAqLwomIzQzOwkJY2xlYXJfYml0X3VubG9jayhSRFNfSU5fWE1JVCwgJmFtcDtjcC0mZ3Q7Y3BfZmxhZ3MpOwomIzQzOwkJY2xlYXJfYml0KFJEU19SRUNWX1JFRklMTCwgJmFtcDtjcC0mZ3Q7Y3BfZmxhZ3MpOwomIzQzOwkJd2FrZV91cF9hbGwoJmFtcDtjcC0mZ3Q7Y3Bfd2FpdHEpOwomIzQzOwogCQlpZiAoIXJkc19jb25uX3BhdGhfdHJhbnNpdGlvbihjcCwgUkRTX0NPTk5fRElTQ09OTkVDVElORywKIAkJCQkJICAgICAgUkRTX0NPTk5fRE9XTikgJmFtcDsmYW1wOwogCQkgICAgIXJkc19jb25uX3BhdGhfdHJhbnNpdGlvbihjcCwgUkRTX0NPTk5fRVJST1IsCmRpZmYgLS1naXQgYS9uZXQvcmRzL3NlbmQuYyBiL25ldC9yZHMvc2VuZC5jCmluZGV4IDE1YTFiOTdmMTNlNzYuLmI5MGUwNTg2ZjgxOGMgMTAwNjQ0Ci0tLSBhL25ldC9yZHMvc2VuZC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9yZHMvc2VuZC5jCkBAIC0xMTQsOCAmIzQzOzExNCwxMyBAQCBzdGF0aWMgdm9pZCByZWxlYXNlX2luX3htaXQoc3RydWN0IHJkc19jb25uX3BhdGggKmNwKQogCSAqIGhvdCBwYXRoIGFuZCBmaW5kaW5nIHdhaXRlcnMgaXMgdmVyeSByYXJlLiAgV2UgZG9uJiMzOTt0IHdhbnQgdG8gd2FsawogCSAqIHRoZSBzeXN0ZW0td2lkZSBoYXNoZWQgd2FpdHF1ZXVlIGJ1Y2tldHMgaW4gdGhlIGZhc3QgcGF0aCBvbmx5IHRvCiAJICogYWxtb3N0IG5ldmVyIGZpbmQgd2FpdGVycy4KJiM0MzsJICoKJiM0MzsJICogd3FfaGFzX3NsZWVwZXIoKSBzdXBwbGllcyB0aGUgZnVsbCBiYXJyaWVyIHRoYXQgb3JkZXJzIHRoZSB3YWl0CiYjNDM7CSAqIHF1ZXVlIHJlYWQgYWZ0ZXIgdGhlIGJpdCBjbGVhcjsgY2xlYXJfYml0X3VubG9jaygpIGFsb25lIGlzIG9ubHkKJiM0MzsJICogYSByZWxlYXNlIGFuZCB3b3VsZCBsZXQgdGhpcyBjaGVjayByZWFkIGEgc3RhbGUgZW1wdHkgcXVldWUsCiYjNDM7CSAqIGxvc2luZyB0aGUgd2FrZS11cC4KIAkgKi8KLQlpZiAod2FpdHF1ZXVlX2FjdGl2ZSgmYW1wO2NwLSZndDtjcF93YWl0cSkpCiYjNDM7CWlmICh3cV9oYXNfc2xlZXBlcigmYW1wO2NwLSZndDtjcF93YWl0cSkpCiAJCXdha2VfdXBfYWxsKCZhbXA7Y3AtJmd0O2NwX3dhaXRxKTsKIH0KIApAQCAtMjM5LDggJiM0MzsyNDQsOSBAQCBpbnQgcmRzX3NlbmRfeG1pdChzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApCiAJV1JJVEVfT05DRShjcC0mZ3Q7Y3Bfc2VuZF9nZW4sIHNlbmRfZ2VuKTsKIAogCS8qCi0JICogcmRzX2Nvbm5fc2h1dGRvd24oKSBzZXRzIHRoZSBjb25uIHN0YXRlIGFuZCB0aGVuIHRlc3RzIFJEU19JTl9YTUlULAotCSAqIHdlIGRvIHRoZSBvcHBvc2l0ZSB0byBhdm9pZCByYWNlcy4KJiM0MzsJICogcmRzX2Nvbm5fc2h1dGRvd24oKSBzZXRzIHRoZSBjb25uIHN0YXRlIGFuZCB0aGVuIGFjcXVpcmVzCiYjNDM7CSAqIFJEU19JTl9YTUlUOyB3ZSB0YWtlIHRoZSBsb2NrIGZpcnN0IGFuZCB0aGVuIGNoZWNrIHRoZSBzdGF0ZSwKJiM0MzsJICogc28gb25lIG9mIHVzIGlzIGd1YXJhbnRlZWQgdG8gc2VlIHRoZSBvdGhlciYjMzk7cyB1cGRhdGUuCiAJICovCiAJaWYgKCFyZHNfY29ubl9wYXRoX3VwKGNwKSkgewogCQlyZWxlYXNlX2luX3htaXQoY3ApOwpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy90Y3AuYyBiL25ldC9yZHMvdGNwLmMKaW5kZXggYjI2MzYzNGFjNzUwZC4uMWZmOWU4NDZkZmM3YyAxMDA2NDQKLS0tIGEvbmV0L3Jkcy90Y3AuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvcmRzL3RjcC5jCkBAIC0xMTUsNDUgJiM0MzsxMTUsNjYgQEAgdm9pZCByZHNfdGNwX3Jlc3RvcmVfY2FsbGJhY2tzKHN0cnVjdCBzb2NrZXQgKnNvY2ssCiB9CiAKIC8qCi0gKiByZHNfdGNwX3Jlc2V0X2NhbGxiYWNrcygpIHN3aXRjaGVzIHRoZSB0byB0aGUgbmV3IHNvY2sgYW5kCi0gKiByZXR1cm5zIHRoZSBleGlzdGluZyB0Yy0mZ3Q7dF9zb2NrLgomIzQzOyAqIHJkc190Y3BfcmVzZXRfY2FsbGJhY2tzKCkgc3dpdGNoZXMgYSBwYXRoIHRvIGEgbmV3IHNvY2tldCBhbmQKJiM0MzsgKiByZWxlYXNlcyB0aGUgb2xkIG9uZSBpdCBmaW5kcyBpbiB0Yy0mZ3Q7dF9zb2NrLCByZXNvbHZpbmcgYSBkdWVsbGluZwomIzQzOyAqIFNZTi4KICAqCi0gKiBUaGUgb25seSBmdW5jdGlvbnMgdGhhdCBzZXQgdGMtJmd0O3Rfc29jayBhcmUgcmRzX3RjcF9zZXRfY2FsbGJhY2tzCi0gKiBhbmQgcmRzX3RjcF9yZXNldF9jYWxsYmFja3MuICBTZW5kIGFuZCByZWNlaXZlIHRydXN0IHRoYXQKLSAqIGl0IGlzIHNldC4gIFRoZSBhYnNlbmNlIG9mIFJEU19DT05OX1VQIGJpdCBwcm90ZWN0cyB0aG9zZSBwYXRocwotICogZnJvbSBiZWluZyBjYWxsZWQgd2hpbGUgaXQgaXNuJiMzOTt0IHNldC4KJiM0MzsgKiB0Yy0mZ3Q7dF9zb2NrIGlzIHNldCBieSByZHNfdGNwX3NldF9jYWxsYmFja3MoKSBhbmQgY2xlYXJlZCBieQomIzQzOyAqIHJkc190Y3BfcmVzdG9yZV9jYWxsYmFja3MoKSwgZnJvbSByZHNfdGNwX2Nvbm5fcGF0aF9zaHV0ZG93bigpIGFuZAomIzQzOyAqIGZyb20gaGVyZS4gIFNlbmQgYW5kIHJlY2VpdmUgdHJ1c3QgdGhhdCBpdCBpcyBzZXQ6IHRoZSBhYnNlbmNlIG9mCiYjNDM7ICogUkRTX0NPTk5fVVAgcHJvdGVjdHMgdGhvc2UgcGF0aHMgZnJvbSBiZWluZyBjYWxsZWQgd2hpbGUgaXQgaXNuJiMzOTt0LAomIzQzOyAqIGFuZCB0aGUgc3dhcCBkb25lIGhlcmUgcnVucyB1bmRlciBSRFNfSU5fWE1JVCBzbyB0aGF0IGl0IGNhbm5vdAomIzQzOyAqIGludGVybGVhdmUgd2l0aCBhIHNlbmRlciBhbHJlYWR5IGluc2lkZSByZHNfc2VuZF94bWl0KCkuCiAgKi8KIHZvaWQgcmRzX3RjcF9yZXNldF9jYWxsYmFja3Moc3RydWN0IHNvY2tldCAqc29jaywKIAkJCSAgICAgc3RydWN0IHJkc19jb25uX3BhdGggKmNwKQogewogCXN0cnVjdCByZHNfdGNwX2Nvbm5lY3Rpb24gKnRjID0gY3AtJmd0O2NwX3RyYW5zcG9ydF9kYXRhOwotCXN0cnVjdCBzb2NrZXQgKm9zb2NrID0gdGMtJmd0O3Rfc29jazsKLQotCWlmICghb3NvY2spCi0JCWdvdG8gbmV3c29jazsKJiM0MzsJc3RydWN0IHNvY2tldCAqb3NvY2s7CiAKIAkvKiBOZWVkIHRvIHJlc29sdmUgYSBkdWVsbGluZyBTWU4gYmV0d2VlbiBwZWVycy4KIAkgKiBXZSBoYXZlIGFuIG91dHN0YW5kaW5nIFNZTiB0byB0aGlzIHBlZXIsIHdoaWNoIG1heQogCSAqIHBvdGVudGlhbGx5IGhhdmUgdHJhbnNpdGlvbmVkIHRvIHRoZSBSRFNfQ09OTl9VUCBzdGF0ZSwKIAkgKiBzbyB3ZSBtdXN0IHF1aWVzY2UgYW55IHNlbmQgdGhyZWFkcyBiZWZvcmUgcmVzZXR0aW5nCi0JICogY3BfdHJhbnNwb3J0X2RhdGEuIFdlIHF1aWVzY2UgdGhlc2UgdGhyZWFkcyBieSBzZXR0aW5nCi0JICogY3Bfc3RhdGUgdG8gc29tZXRoaW5nIG90aGVyIHRoYW4gUkRTX0NPTk5fVVAsIGFuZCB0aGVuCi0JICogd2FpdGluZyBmb3IgYW55IGV4aXN0aW5nIHRocmVhZHMgaW4gcmRzX3NlbmRfeG1pdCB0bwotCSAqIGNvbXBsZXRlIHJlbGVhc2VfaW5feG1pdCgpLiAoU3Vic2VxdWVudCB0aHJlYWRzIGVudGVyaW5nCi0JICogcmRzX3NlbmRfeG1pdCgpIHdpbGwgYmFpbCBvbiAhcmRzX2Nvbm5fdXAoKS4KJiM0MzsJICogY3BfdHJhbnNwb3J0X2RhdGEuICBTZXR0aW5nIGNwX3N0YXRlIHRvIHNvbWV0aGluZyBvdGhlcgomIzQzOwkgKiB0aGFuIFJEU19DT05OX1VQIHN0b3BzIG5ldyBzZW5kZXJzLCBhbmQgb3duaW5nIFJEU19JTl9YTUlUCiYjNDM7CSAqIGV4Y2x1ZGVzIGFueSB0aHJlYWQgYWxyZWFkeSBpbnNpZGUgcmRzX3NlbmRfeG1pdCgpIGZvciB0aGUKJiM0MzsJICogd2hvbGUgc29ja2V0IHN3YXAgYW5kIHRoZSByZHNfc2VuZF9wYXRoX3Jlc2V0KCkgYmVsb3cuCiAJICoKLQkgKiBIb3dldmVyIGFuIGluY29taW5nIHN5bi1hY2sgYXQgdGhpcyBwb2ludCB3b3VsZCBlbmQgdXAKLQkgKiBtYXJraW5nIHRoZSBjb25uIGFzIFJEU19DT05OX1VQLCBhbmQgd291bGQgYWdhaW4gcGVybWl0Ci0JICogcmRzX3NlbmRfeG1pKCkgdGhyZWFkcyB0aHJvdWdoLCBzbyBpZGVhbGx5IHdlIHdvdWxkCi0JICogc3luY2hyb25pemUgb24gUkRTX0NPTk5fVVAgYWZ0ZXIgbG9ja19zb2NrKCksIGJ1dCBjYW5ub3QKLQkgKiBkbyB0aGF0OiB3YWl0aW5nIG9uICFSRFNfSU5fWE1JVCBhZnRlciBsb2NrX3NvY2soKSBtYXkKLQkgKiBlbmQgdXAgZGVhZGxvY2tpbmcgd2l0aCB0Y3Bfc2VuZG1zZygpLCBhbmQgdGhlIFJEU19JTl9YTUlUCi0JICogd291bGQgbm90IGdldCBzZXQuIEFzIGEgcmVzdWx0LCB3ZSBzZXQgY19zdGF0ZSB0bwotCSAqIFJEU19DT05OX1JFU0VUVFRJTkcsIHRvIGVuc3VyZSB0aGF0IHJkc190Y3Bfc3RhdGVfY2hhbmdlCi0JICogY2Fubm90IG1hcmsgcmRzX2Nvbm5fcGF0aF91cCgpIGluIHRoZSB3aW5kb3cgYmVmb3JlIGxvY2tfc29jaygpCiYjNDM7CSAqIEFuIGluY29taW5nIHN5bi1hY2sgYXQgdGhpcyBwb2ludCB3b3VsZCBlbmQgdXAgbWFya2luZyB0aGUKJiM0MzsJICogY29ubiBhcyBSRFNfQ09OTl9VUCwgYW5kIHdvdWxkIGFnYWluIHBlcm1pdCByZHNfc2VuZF94bWl0KCkKJiM0MzsJICogdGhyZWFkcyB0aHJvdWdoLCBzbyBpZGVhbGx5IHdlIHdvdWxkIHN5bmNocm9uaXplIG9uCiYjNDM7CSAqIFJEU19DT05OX1VQIGFmdGVyIGxvY2tfc29jaygpLCBidXQgY2Fubm90IGRvIHRoYXQ6IGFjcXVpcmluZwomIzQzOwkgKiBSRFNfSU5fWE1JVCBhZnRlciBsb2NrX3NvY2soKSBtYXkgZW5kIHVwIGRlYWRsb2NraW5nIHdpdGgKJiM0MzsJICogdGNwX3NlbmRtc2coKSwgd2hpY2ggdGFrZXMgdGhlIHNvY2tldCBsb2NrIHdoaWxlIGhvbGRpbmcKJiM0MzsJICogUkRTX0lOX1hNSVQuICBBcyBhIHJlc3VsdCwgd2Ugc2V0IGNfc3RhdGUgdG8KJiM0MzsJICogUkRTX0NPTk5fUkVTRVRUSU5HLCB0byBlbnN1cmUgdGhhdCByZHNfdGNwX3N0YXRlX2NoYW5nZQomIzQzOwkgKiBjYW5ub3QgbWFyayByZHNfY29ubl9wYXRoX3VwKCkgaW4gdGhlIHdpbmRvdyBiZWZvcmUKJiM0MzsJICogbG9ja19zb2NrKCkuCiYjNDM7CSAqCiYjNDM7CSAqIE9ubHkgbWFrZSB0aGF0IHRyYW5zaXRpb24gaWYgdGhlIHBhdGggaXMgc3RpbGwgY29ubmVjdGluZwomIzQzOwkgKiAob3IgYWxyZWFkeSByZXNldHRpbmcgZnJvbSBhbiBlYXJsaWVyIGR1ZWwpLCBzbyB0aGF0IGEKJiM0MzsJICogY29uY3VycmVudCBzaHV0ZG93biYjMzk7cyBSRFNfQ09OTl9FUlJPUi9SRFNfQ09OTl9ESVNDT05ORUNUSU5HCiYjNDM7CSAqIGlzIG5vdCBvdmVyd3JpdHRlbjsgYSBwYXRoIGluIGFueSBvdGhlciBzdGF0ZSBpcyBkcm9wcGVkCiYjNDM7CSAqIGFuZCBpdHMgcGVuZGluZyBzaHV0ZG93biB3aW5zLgomIzQzOwkgKi8KJiM0MzsJaWYgKCFyZHNfY29ubl9wYXRoX3RyYW5zaXRpb24oY3AsIFJEU19DT05OX0NPTk5FQ1RJTkcsCiYjNDM7CQkJCSAgICAgIFJEU19DT05OX1JFU0VUVElORykgJmFtcDsmYW1wOwomIzQzOwkgICAgIXJkc19jb25uX3BhdGhfdHJhbnNpdGlvbihjcCwgUkRTX0NPTk5fUkVTRVRUSU5HLAomIzQzOwkJCQkgICAgICBSRFNfQ09OTl9SRVNFVFRJTkcpKQomIzQzOwkJcmRzX2Nvbm5fcGF0aF9kcm9wKGNwLCAwKTsKJiM0MzsJd2FpdF9ldmVudChjcC0mZ3Q7Y3Bfd2FpdHEsCiYjNDM7CQkgICAhdGVzdF9hbmRfc2V0X2JpdF9sb2NrKFJEU19JTl9YTUlULCAmYW1wO2NwLSZndDtjcF9mbGFncykpOwomIzQzOwomIzQzOwkvKiBSZWFkIHRfc29jayBvbmx5IHdoaWxlIG93bmluZyBSRFNfSU5fWE1JVC4gIFRoZSB0ZWFyZG93biBpbgomIzQzOwkgKiByZHNfY29ubl9zaHV0ZG93bigpIHJlbGVhc2VzIHRoZSBvbGQgc29ja2V0IGFuZCBjbGVhcnMKJiM0MzsJICogdF9zb2NrLCBzbyBhIHBvaW50ZXIgc2FtcGxlZCBiZWZvcmUgdGhlIHdhaXQgY2FuIGJlIHN0YWxlCiYjNDM7CSAqIGJ5IHRoZSB0aW1lIHdlIHdha2UgdXAuCiAJICovCi0JYXRvbWljX3NldCgmYW1wO2NwLSZndDtjcF9zdGF0ZSwgUkRTX0NPTk5fUkVTRVRUSU5HKTsKLQl3YWl0X2V2ZW50KGNwLSZndDtjcF93YWl0cSwgIXRlc3RfYml0KFJEU19JTl9YTUlULCAmYW1wO2NwLSZndDtjcF9mbGFncykpOwomIzQzOwlvc29jayA9IHRjLSZndDt0X3NvY2s7CiYjNDM7CWlmICghb3NvY2spCiYjNDM7CQlnb3RvIG5ld3NvY2s7CiYjNDM7CiAJLyogcmVzZXQgcmVjZWl2ZSBzaWRlIHN0YXRlIGZvciByZHNfdGNwX2RhdGFfcmVjdigpIGZvciBvc29jayAgKi8KIAljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmFtcDtjcC0mZ3Q7Y3Bfc2VuZF93KTsKIAljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmFtcDtjcC0mZ3Q7Y3BfcmVjdl93KTsKQEAgLTE3Miw2ICYjNDM7MTkzLDkgQEAgdm9pZCByZHNfdGNwX3Jlc2V0X2NhbGxiYWNrcyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLAogCWxvY2tfc29jayhzb2NrLSZndDtzayk7CiAJcmRzX3RjcF9zZXRfY2FsbGJhY2tzKHNvY2ssIGNwKTsKIAlyZWxlYXNlX3NvY2soc29jay0mZ3Q7c2spOwomIzQzOwomIzQzOwljbGVhcl9iaXRfdW5sb2NrKFJEU19JTl9YTUlULCAmYW1wO2NwLSZndDtjcF9mbGFncyk7CiYjNDM7CXdha2VfdXBfYWxsKCZhbXA7Y3AtJmd0O2NwX3dhaXRxKTsKIH0KIAogLyogQWRkIHRjIHRvIHJkc190Y3BfdGNfbGlzdCBhbmQgc2V0IHRjLSZndDt0X3NvY2suIFNlZSBjb21tZW50cwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAwMDoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NzcxCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFJEUyBDb25uZWN0aW9uIEhhbmRsaW5nIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIGhvdyBSZWxpYWJsZSBEYXRhZ3JhbSBTb2NrZXRzIChSRFMpIGhhbmRsZXMgY29ubmVjdGlvbnMsIHNwZWNpZmljYWxseSBkdXJpbmcgc2h1dGRvd24gYW5kIHJlc2V0LCBhY3Jvc3MgdGhvc2UgdGhyZWUgZmlsZXM6IGBjb25uZWN0aW9uLmNgLCBgc2VuZC5jYCwgYW5kIGB0Y3AuY2AuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgYWRkcmVzc2luZyBhIHJhY2UgY29uZGl0aW9uLCB3aGljaCBpcyBhbHdheXMgd29ydGggYSBjbG9zZXIgbG9vay4gVGhleSYjMzk7cmUgdXNpbmcgYHRlc3RfYW5kX3NldF9iaXRfbG9ja2AgaW5zdGVhZCBvZiBqdXN0IHdhaXRpbmcsIGFuZCBgd3FfaGFzX3NsZWVwZXJgIGZvciBhIHN0cm9uZ2VyIG1lbW9yeSBiYXJyaWVyLiBTbWFydCBtb3ZlIOKAkyB0aGF0IHNob3VsZCByZWFsbHkgdGlnaHRlbiB0aGluZ3MgdXAgYXJvdW5kIHRob3NlIGBSRFNfSU5fWE1JVGAgYW5kIGBSRFNfUkVDVl9SRUZJTExgIGZsYWdzLiBJbiBgcmRzX3RjcF9yZXNldF9jYWxsYmFja3NgLCBpdCBzZWVtcyB0aGV5IGFyZSBtYWtpbmcgc29tZSBsb2NrIG1hbmFnZW1lbnQgY2hhbmdlcyB3aGVuIHJlc2V0dGluZyB0aGUgc29ja2V0LgoKVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGRlZXAgaW4gUkRTLCB3aGljaCBjb3VsZCBiZSBpbXBvcnRhbnQuIEJlY2F1c2UgUkRTIGNhbiBvcGVyYXRlIG92ZXIgVENQIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgdGhpcyBtYWtlcyB0aGUgcGF0Y2ggaW50ZXJlc3RpbmcgZm9yIGFuYWx5c2lzLiBJJiMzOTttIHRoaW5raW5nLCB0aGlzIGRlZmluaXRlbHkgd2FycmFudHMgc29tZSBmdXp6aW5nLiBHb3R0YSBjaGVjayB0aGUgYXR0YWNrIHN1cmZhY2UuCgpMZXQmIzM5O3Mgc2VlLCB3aGF0IGZ1bmN0aW9ucyBkaWQgdGhleSB0b3VjaD8gT2theSwgSSYjMzk7dmUgZ290OiBgcmRzX2Nvbm5fcGF0aF9yZXNldGAsIGByZHNfY29ubl9zaHV0ZG93bmAsIGByZWxlYXNlX2luX3htaXRgLCBgcmRzX3NlbmRfeG1pdGAsIGFuZCBgcmRzX3RjcF9yZXNldF9jYWxsYmFja3NgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgZXhwb3NlZCB0aGV5IGFyZS4KClJpZ2h0LCBgcmRzX2Nvbm5fc2h1dGRvd25gIGlzIGNhbGxlZCBmcm9tIGByZHNfY29ubl9kZXN0cm95YCwgYHJkc19jb25uX2Ryb3BgLCBldGMuLCBzbyB0aGF0JiMzOTtzIGludGVyZXN0aW5nLiBgcmRzX3NlbmRfeG1pdGAgaXMgdHJpZ2dlcmVkIGJ5IGByZHNfc2VuZG1zZ2AsIHdoaWNoIGdpdmVzIHVzIGEgcG90ZW50aWFsIGVudHJ5IHBvaW50IGFuZCBgcmRzX3RjcF9yZXNldF9jYWxsYmFja3NgIGlzIGNhbGxlZCBmcm9tIGByZHNfdGNwX2FjY2VwdF9vbmVgLgoKT2theSwgSSYjMzk7bGwgZ28gYWhlYWQgYW5kIGRvIGEgcXVpY2sgc2VhcmNoIGZvciBgcmRzX2Nvbm5fc2h1dGRvd25gLCBgcmRzX3NlbmRfeG1pdGAsIGFuZCBgcmRzX3RjcF9yZXNldF9jYWxsYmFja3NgIHRvIHNlZSBob3cgdGhvc2UgYXJlIGNhbGxlZCwgYW5kIGdldCBhIGJldHRlciBwaWN0dXJlIG9mIHRoZSBwb3RlbnRpYWwgaW1wYWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDAwOjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Jkc19jb25uX3NodXRkb3duJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3Jkcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3Jkcy9jb25uZWN0aW9uLmM9Mzg3PUVYUE9SVF9TWU1CT0xfR1BMKHJkc19jb25uX2NyZWF0ZV9vdXRnb2luZyk7XG5uZXQvcmRzL2Nvbm5lY3Rpb24uYy0zODgtXG5uZXQvcmRzL2Nvbm5lY3Rpb24uYzozODk6dm9pZCByZHNfY29ubl9zaHV0ZG93bihzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApXG5uZXQvcmRzL2Nvbm5lY3Rpb24uYy0zOTAte1xuLS1cbm5ldC9yZHMvcmRzLmg9ODE1PXN0cnVjdCByZHNfY29ubmVjdGlvbiAqcmRzX2Nvbm5fY3JlYXRlX291dGdvaW5nKHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvcmRzL3Jkcy5oLTgxOS1cdFx0XHRcdFx0XHR1OCB0b3MsIGdmcF90IGdmcCwgaW50IGRldl9pZik7XG5uZXQvcmRzL3Jkcy5oOjgyMDp2b2lkIHJkc19jb25uX3NodXRkb3duKHN0cnVjdCByZHNfY29ubl9wYXRoICpjcGF0aCk7XG5uZXQvcmRzL3Jkcy5oLTgyMS12b2lkIHJkc19jb25uX2Rlc3Ryb3koc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKTtcbi0tXG5uZXQvcmRzL3NlbmQuYz0xOTI9aW50IHJkc19zZW5kX3htaXQoc3RydWN0IHJkc19jb25uX3BhdGggKmNwKVxuLS1cbm5ldC9yZHMvc2VuZC5jLTI0Ni1cdC8qXG5uZXQvcmRzL3NlbmQuYzoyNDc6XHQgKiByZHNfY29ubl9zaHV0ZG93bigpIHNldHMgdGhlIGNvbm4gc3RhdGUgYW5kIHRoZW4gYWNxdWlyZXNcbm5ldC9yZHMvc2VuZC5jLTI0OC1cdCAqIFJEU19JTl9YTUlUOyB3ZSB0YWtlIHRoZSBsb2NrIGZpcnN0IGFuZCB0aGVuIGNoZWNrIHRoZSBzdGF0ZSxcbi0tXG5uZXQvcmRzL3RjcC5jPTEyOT12b2lkIHJkc190Y3BfcmVzZXRfY2FsbGJhY2tzKHN0cnVjdCBzb2NrZXQgKnNvY2ssXG4tLVxubmV0L3Jkcy90Y3AuYy0xNjktXHQvKiBSZWFkIHRfc29jayBvbmx5IHdoaWxlIG93bmluZyBSRFNfSU5fWE1JVC4gIFRoZSB0ZWFyZG93biBpblxubmV0L3Jkcy90Y3AuYzoxNzA6XHQgKiByZHNfY29ubl9zaHV0ZG93bigpIHJlbGVhc2VzIHRoZSBvbGQgc29ja2V0IGFuZCBjbGVhcnNcbm5ldC9yZHMvdGNwLmMtMTcxLVx0ICogdF9zb2NrLCBzbyBhIHBvaW50ZXIgc2FtcGxlZCBiZWZvcmUgdGhlIHdhaXQgY2FuIGJlIHN0YWxlXG4tLVxubmV0L3Jkcy90aHJlYWRzLmM9MjQzPXZvaWQgcmRzX3NodXRkb3duX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxubmV0L3Jkcy90aHJlYWRzLmMtMjQ4LVxubmV0L3Jkcy90aHJlYWRzLmM6MjQ5Olx0cmRzX2Nvbm5fc2h1dGRvd24oY3ApO1xubmV0L3Jkcy90aHJlYWRzLmMtMjUwLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAwMDoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTgxCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyB0aGUgUkRTIENvbm5lY3Rpb24gU2h1dGRvd24gU2VxdWVuY2UqKgoKT2theSwgc28gYHJkc19jb25uX3NodXRkb3duYCBpcyB0aGUga2V5IGZ1bmN0aW9uIGJlaW5nIGNhbGxlZCBmcm9tIGByZHNfc2h1dGRvd25fd29ya2VyYC4gVGhhdCBpbW1lZGlhdGVseSBmbGFncyBhIHBvdGVudGlhbCBhcmVhIG9mIGNvbmNlcm4gd2hlbiB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGNvbm5lY3Rpb24gdGVhcmRvd24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBzaHV0ZG93biBwcm9jZWR1cmUuCgpNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIGZsb3cgYW5kIGlkZW50aWZ5IHdoZXJlIHRoZSBuZXR3b3JrIHJlc291cmNlcyBjb3VsZCBiZSBnZXR0aW5nIHJlbGVhc2VkLiBXZSBuZWVkIHRvIGJlIGNhcmVmdWwgd2l0aCByZXNvdXJjZSBtYW5hZ2VtZW50IHRvIGF2b2lkIG1lbW9yeSBjb3JydXB0aW9uLCB1c2UgYWZ0ZXIgZnJlZSBlcnJvcnMsIG9yIGRlYWRsb2NrcyBkdXJpbmcgYSBzaHV0ZG93bi4KCkkmIzM5O20gdGhpbmtpbmcgSSBzaG91bGQgbG9vayBjbG9zZWx5IGF0IGEgY291cGxlIG9mIGltcG9ydGFudCBwaWVjZXMuIEZpcnN0LCBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGRhdGEgaXMgaGFuZGxlZCB3aGVuIGEgY29ubmVjdGlvbiBpcyBzaHV0dGluZyBkb3duLCBzbyBJJiMzOTtsbCBjaGVjayBgcmRzX3NlbmRfeG1pdGAuIFNlY29uZGx5LCBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIFRDUCBjb25uZWN0aW9uIGlzIHJlc2V0IGFuZCBob3cgb3VyIGNhbGxiYWNrcyBhcmUgY2xlYXJlZCBkdXJpbmcgdGhpcyBwcm9jZWR1cmUsIHNvIEkmIzM5O2xsIHJldmlldyBgcmRzX3RjcF9yZXNldF9jYWxsYmFja3NgLiBCb3RoIG9mIHRoZXNlIGFyZSBhcmVhcyB3aGVyZSB3ZSBjb3VsZCBlYXNpbHkgaW50cm9kdWNlIGEgc3VidGxlIGJ1ZyByZWxhdGVkIHRvIHRoZSBzaHV0ZG93biBzZXF1ZW5jZSwgYW5kIEkga25vdyBmcm9tIGV4cGVyaWVuY2UgdGhhdCB0aGVzZSB0eXBlcyBvZiBpc3N1ZXMgY2FuIGJlIGRpZmZpY3VsdCB0byBkZWJ1Zy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAwMDoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZHNfc2VuZF94bWl0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3Jkcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3Jkcy9jb25nLmM9MjE3PXZvaWQgcmRzX2NvbmdfcXVldWVfdXBkYXRlcyhzdHJ1Y3QgcmRzX2NvbmdfbWFwICptYXApXG4tLVxubmV0L3Jkcy9jb25nLmMtMjMwLVx0XHRcdHJkc19zdGF0c19pbmMoc19jb25nX3VwZGF0ZV9xdWV1ZWQpO1xubmV0L3Jkcy9jb25nLmM6MjMxOlx0XHRcdC8qIFdlIGNhbm5vdCBpbmxpbmUgdGhlIGNhbGwgdG8gcmRzX3NlbmRfeG1pdCgpIGhlcmVcbm5ldC9yZHMvY29uZy5jLTIzMi1cdFx0XHQgKiBmb3IgdHdvIHJlYXNvbnMgKGJvdGggcGVydGFpbmluZyB0byBhIFRDUCB0cmFuc3BvcnQpOlxuLS1cbm5ldC9yZHMvaWJfY20uYz0yODI9c3RhdGljIHZvaWQgcmRzX2liX3Rhc2tsZXRfZm5fc2VuZCh1bnNpZ25lZCBsb25nIGRhdGEpXG4tLVxubmV0L3Jkcy9pYl9jbS5jLTI5OS1cdCAgICB0ZXN0X2JpdCgwLCBcdTAwMjZjb25uLVx1MDAzZWNfbWFwX3F1ZXVlZCkpKVxubmV0L3Jkcy9pYl9jbS5jOjMwMDpcdFx0cmRzX3NlbmRfeG1pdChcdTAwMjZpYy1cdTAwM2Vjb25uLVx1MDAzZWNfcGF0aFswXSk7XG5uZXQvcmRzL2liX2NtLmMtMzAxLX1cbi0tXG5uZXQvcmRzL2liX3NlbmQuYz0yNDU9dm9pZCByZHNfaWJfc2VuZF9jcWVfaGFuZGxlcihzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljLCBzdHJ1Y3QgaWJfd2MgKndjKVxuLS1cbm5ldC9yZHMvaWJfc2VuZC5jLTMzNS0gKlxubmV0L3Jkcy9pYl9zZW5kLmM6MzM2OiAqIFRoZSBSRFMgc2VuZCBjb2RlIGlzIGVzc2VudGlhbGx5IHNpbmdsZS10aHJlYWRlZDsgcmRzX3NlbmRfeG1pdFxubmV0L3Jkcy9pYl9zZW5kLmMtMzM3LSAqIHNldHMgUkRTX0lOX1hNSVQgdG8gZW5zdXJlIGV4Y2x1c2l2ZSBhY2Nlc3MgdG8gdGhlIHNlbmQgcmluZy5cbi0tXG5uZXQvcmRzL2xvb3AuYz0yMzU9dm9pZCByZHNfbG9vcF9uZXRfZXhpdCh2b2lkKVxuLS1cbm5ldC9yZHMvbG9vcC5jLTI0MS0gKiBUaGlzIGlzIG1pc3NpbmcgLnhtaXRfKiBiZWNhdXNlIGxvb3AgZG9lc24mIzM5O3QgZ28gdGhyb3VnaCBnZW5lcmljXG5uZXQvcmRzL2xvb3AuYzoyNDI6ICogcmRzX3NlbmRfeG1pdCgpIGFuZCBkb2VzbiYjMzk7dCBjYWxsIHJkc19yZWN2X2luY29taW5nKCkuICAubGlzdGVuX3N0b3AgYW5kXG5uZXQvcmRzL2xvb3AuYy0yNDMtICogLmxhZGRyX2NoZWNrIGFyZSBtaXNzaW5nIGJlY2F1c2UgdHJhbnNwb3J0LmMgZG9lc24mIzM5O3QgaXRlcmF0ZSBvdmVyXG4tLVxubmV0L3Jkcy9yZHMuaD01NDA9c3RydWN0IHJkc190cmFuc3BvcnQge1xuLS1cbm5ldC9yZHMvcmRzLmgtNTgwLVx0Lypcbm5ldC9yZHMvcmRzLmg6NTgxOlx0ICogLnhtaXQgaXMgY2FsbGVkIGJ5IHJkc19zZW5kX3htaXQoKSB0byB0ZWxsIHRoZSB0cmFuc3BvcnQgdG8gc2VuZFxubmV0L3Jkcy9yZHMuaC01ODItXHQgKiBwYXJ0IG9mIGEgbWVzc2FnZS4gIFRoZSBjYWxsZXIgc2VyaWFsaXplcyBvbiB0aGUgc2VuZF9zZW0gc28gdGhpc1xuLS1cbm5ldC9yZHMvcmRzLmg9OTU3PXZvaWQgcmRzX3NlbmRfcGF0aF9yZXNldChzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY29ubik7XG5uZXQvcmRzL3Jkcy5oOjk1ODppbnQgcmRzX3NlbmRfeG1pdChzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApO1xubmV0L3Jkcy9yZHMuaC05NTktc3RydWN0IHNvY2thZGRyX2luO1xuLS1cbm5ldC9yZHMvc2VuZC5jLTQ0LVxubmV0L3Jkcy9zZW5kLmM6NDU6LyogV2hlbiB0cmFuc21pdHRpbmcgbWVzc2FnZXMgaW4gcmRzX3NlbmRfeG1pdCwgd2UgbmVlZCB0byBlbWVyZ2UgZnJvbVxubmV0L3Jkcy9zZW5kLmMtNDYtICogdGltZSB0byB0aW1lIGFuZCBicmllZmx5IHJlbGVhc2UgdGhlIENQVS4gT3RoZXJ3aXNlIHRoZSBzb2Z0bG9jayB3YXRjaGRvZ1xuLS1cbm5ldC9yZHMvc2VuZC5jPTU5PXN0YXRpYyB2b2lkIHJkc19zZW5kX3JlbW92ZV9mcm9tX3NvY2soc3RydWN0IGxpc3RfaGVhZCAqbWVzc2FnZXMsIGludCBzdGF0dXMpO1xuLS1cbm5ldC9yZHMvc2VuZC5jLTYyLSAqIFJlc2V0IHRoZSBzZW5kIHN0YXRlLiAgQ2FsbGVycyBtdXN0IGVuc3VyZSB0aGF0IHRoaXMgZG9lc24mIzM5O3QgcmFjZSB3aXRoXG5uZXQvcmRzL3NlbmQuYzo2MzogKiByZHNfc2VuZF94bWl0KCkuXG5uZXQvcmRzL3NlbmQuYy02NC0gKi9cbi0tXG5uZXQvcmRzL3NlbmQuYz0xMzM9c3RhdGljIGJvb2wgcmRzX21wcmRzX2NwMF9jYXRjaHVwKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubilcbi0tXG5uZXQvcmRzL3NlbmQuYy0xOTEtICovXG5uZXQvcmRzL3NlbmQuYzoxOTI6aW50IHJkc19zZW5kX3htaXQoc3RydWN0IHJkc19jb25uX3BhdGggKmNwKVxubmV0L3Jkcy9zZW5kLmMtMTkzLXtcbi0tXG5uZXQvcmRzL3NlbmQuYy01NTUtfVxubmV0L3Jkcy9zZW5kLmM6NTU2OkVYUE9SVF9TWU1CT0xfR1BMKHJkc19zZW5kX3htaXQpO1xubmV0L3Jkcy9zZW5kLmMtNTU3LVxuLS1cbm5ldC9yZHMvc2VuZC5jPTY5MD1zdGF0aWMgdm9pZCByZHNfc2VuZF9yZW1vdmVfZnJvbV9zb2NrKHN0cnVjdCBsaXN0X2hlYWQgKm1lc3NhZ2VzLCBpbnQgc3RhdHVzKVxuLS1cbm5ldC9yZHMvc2VuZC5jLTc2NS0gKiBtZXNzYWdlcyB1cCB0bywgYW5kIGluY2x1ZGluZywgdGhlIGdpdmVuIHNlcXVlbmNlIG51bWJlci4gIE1lc3NhZ2VzIGFyZVxubmV0L3Jkcy9zZW5kLmM6NzY2OiAqIG1vdmVkIHRvIHRoZSByZXRyYW5zIHF1ZXVlIHdoZW4gcmRzX3NlbmRfeG1pdCBwaWNrcyB0aGVtIG9mZiB0aGUgc2VuZFxubmV0L3Jkcy9zZW5kLmMtNzY3LSAqIHF1ZXVlLiBUaGlzIG1lYW5zIHRoYXQgaW4gdGhlIFRDUCBjYXNlLCB0aGUgbWVzc2FnZSBtYXkgbm90IGhhdmUgYmVlblxuLS1cbm5ldC9yZHMvc2VuZC5jPTExNTI9aW50IHJkc19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHBheWxvYWRfbGVuKVxuLS1cbm5ldC9yZHMvc2VuZC5jLTE0NDktXG5uZXQvcmRzL3NlbmQuYzoxNDUwOlx0cmV0ID0gcmRzX3NlbmRfeG1pdChjcGF0aCk7XG5uZXQvcmRzL3NlbmQuYy0xNDUxLVx0aWYgKHJldCA9PSAtRU5PTUVNIHx8IHJldCA9PSAtRUFHQUlOKSB7XG4tLVxubmV0L3Jkcy90Y3AuYz05Nj12b2lkIHJkc190Y3BfcmVzdG9yZV9jYWxsYmFja3Moc3RydWN0IHNvY2tldCAqc29jayxcbi0tXG5uZXQvcmRzL3RjcC5jLTEyNi0gKiBhbmQgdGhlIHN3YXAgZG9uZSBoZXJlIHJ1bnMgdW5kZXIgUkRTX0lOX1hNSVQgc28gdGhhdCBpdCBjYW5ub3Rcbm5ldC9yZHMvdGNwLmM6MTI3OiAqIGludGVybGVhdmUgd2l0aCBhIHNlbmRlciBhbHJlYWR5IGluc2lkZSByZHNfc2VuZF94bWl0KCkuXG5uZXQvcmRzL3RjcC5jLTEyOC0gKi9cbm5ldC9yZHMvdGNwLmM9MTI5PXZvaWQgcmRzX3RjcF9yZXNldF9jYWxsYmFja3Moc3RydWN0IHNvY2tldCAqc29jayxcbi0tXG5uZXQvcmRzL3RjcC5jLTE0MC1cdCAqIHRoYW4gUkRTX0NPTk5fVVAgc3RvcHMgbmV3IHNlbmRlcnMsIGFuZCBvd25pbmcgUkRTX0lOX1hNSVRcbm5ldC9yZHMvdGNwLmM6MTQxOlx0ICogZXhjbHVkZXMgYW55IHRocmVhZCBhbHJlYWR5IGluc2lkZSByZHNfc2VuZF94bWl0KCkgZm9yIHRoZVxubmV0L3Jkcy90Y3AuYy0xNDItXHQgKiB3aG9sZSBzb2NrZXQgc3dhcCBhbmQgdGhlIHJkc19zZW5kX3BhdGhfcmVzZXQoKSBiZWxvdy5cbi0tXG5uZXQvcmRzL3RjcC5jLTE0NC1cdCAqIEFuIGluY29taW5nIHN5bi1hY2sgYXQgdGhpcyBwb2ludCB3b3VsZCBlbmQgdXAgbWFya2luZyB0aGVcbm5ldC9yZHMvdGNwLmM6MTQ1Olx0ICogY29ubiBhcyBSRFNfQ09OTl9VUCwgYW5kIHdvdWxkIGFnYWluIHBlcm1pdCByZHNfc2VuZF94bWl0KClcbm5ldC9yZHMvdGNwLmMtMTQ2LVx0ICogdGhyZWFkcyB0aHJvdWdoLCBzbyBpZGVhbGx5IHdlIHdvdWxkIHN5bmNocm9uaXplIG9uXG4tLVxubmV0L3Jkcy90aHJlYWRzLmM9MTkxPXZvaWQgcmRzX3NlbmRfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5uZXQvcmRzL3RocmVhZHMuYy0xOTktXHRcdGNsZWFyX2JpdChSRFNfTExfU0VORF9GVUxMLCBcdTAwMjZjcC1cdTAwM2VjcF9mbGFncyk7XG5uZXQvcmRzL3RocmVhZHMuYzoyMDA6XHRcdHJldCA9IHJkc19zZW5kX3htaXQoY3ApO1xubmV0L3Jkcy90aHJlYWRzLmMtMjAxLVx0XHRjb25kX3Jlc2NoZWQoKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAwMDoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MjAwCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkludGVybmFsIENvZGUgRmxvdyBDb25zaWRlcmF0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IGByZHNfc2VuZF94bWl0YCBpcyB1c2VkLiBJdCYjMzk7cyBkZWZpbml0ZWx5IGV4cG9ydGVkLCBtZWFuaW5nIGl0JiMzOTtzIHZpc2libGUgb3V0c2lkZSBpdHMgaW1tZWRpYXRlIHNjb3BlLiBTZWVtcyBsaWtlIGByZHNfc2VuZG1zZ2AgYW5kIGByZHNfc2VuZF93b3JrZXJgIGFyZSB0aGUga2V5IGNhbGwgc2l0ZXMuIFRoYXQgZ2l2ZXMgbWUgYSBoYW5kbGUgb24gdGhlIGRhdGEgcGF0aCBmb3IgdHJhbnNtaXNzaW9ucy4gS25vd2luZyB0aGVzZSBmdW5jdGlvbnMgY2FsbCBgcmRzX3NlbmRfeG1pdGAgdGVsbHMgbWUgd2hlcmUgdG8gc3RhcnQgbG9va2luZyB3aGVuIGRlYnVnZ2luZyBhIHNlbmQgaXNzdWUuCgpOb3csIGByZHNfdGNwX3Jlc2V0X2NhbGxiYWNrc2AuLi4gdGhhdCYjMzk7cyB0aGUgaW50ZXJlc3Rpbmcgb25lLiBUaGUgdGV4dCBzdWdnZXN0cyBpdCBpcyBjYWxsZWQgZnJvbSBgcmRzX3RjcF9hY2NlcHRfb25lYC4gTmVlZCB0byB2ZXJpZnkgdGhpcyBpbiB0aGUgY29kZS4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgY2FsbCBncmFwaCB0byBiZSBzdXJlIHRoYXQgYHJkc190Y3BfYWNjZXB0X29uZWAgaXMgdGhlIG9ubHkgY2FsbGVyIG9mIGByZHNfdGNwX3Jlc2V0X2NhbGxiYWNrc2AuIElmIHRoYXQmIzM5O3MgdGhlIGNhc2UsIGl0IGdpdmVzIG1lIGEgY2xlYXIgaWRlYSBvZiB3aGVuIHRob3NlIGNhbGxiYWNrcyBhcmUgYmVpbmcgcmVzZXQuIFVuZGVyc3RhbmRpbmcgdGhlc2UgZGVwZW5kZW5jaWVzIGFyZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDAwOjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Jkc190Y3BfcmVzZXRfY2FsbGJhY2tzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3Jkcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3Jkcy9jb25uZWN0aW9uLmM9Mzg5PXZvaWQgcmRzX2Nvbm5fc2h1dGRvd24oc3RydWN0IHJkc19jb25uX3BhdGggKmNwKVxuLS1cbm5ldC9yZHMvY29ubmVjdGlvbi5jLTQzNC1cdFx0LyogUmVsZWFzZSB0aGUgdHdvIGxvY2tzIGFuZCB3YWtlIGFueSB3YWl0ZXIgKGUuZy5cbm5ldC9yZHMvY29ubmVjdGlvbi5jOjQzNTpcdFx0ICogcmRzX3RjcF9yZXNldF9jYWxsYmFja3MoKSkgdGhhdCBibG9ja2VkIG9uIHRoZW0gd2hpbGVcbm5ldC9yZHMvY29ubmVjdGlvbi5jLTQzNi1cdFx0ICogd2UgaGVsZCB0aGVtLiAgcmRzX2Nvbm5fcGF0aF9yZXNldCgpIGxlYXZlcyBib3RoIGJpdHNcbi0tXG5uZXQvcmRzL3RjcC5jPTk2PXZvaWQgcmRzX3RjcF9yZXN0b3JlX2NhbGxiYWNrcyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxuLS1cbm5ldC9yZHMvdGNwLmMtMTE3LS8qXG5uZXQvcmRzL3RjcC5jOjExODogKiByZHNfdGNwX3Jlc2V0X2NhbGxiYWNrcygpIHN3aXRjaGVzIGEgcGF0aCB0byBhIG5ldyBzb2NrZXQgYW5kXG5uZXQvcmRzL3RjcC5jLTExOS0gKiByZWxlYXNlcyB0aGUgb2xkIG9uZSBpdCBmaW5kcyBpbiB0Yy1cdTAwM2V0X3NvY2ssIHJlc29sdmluZyBhIGR1ZWxsaW5nXG4tLVxubmV0L3Jkcy90Y3AuYy0xMjgtICovXG5uZXQvcmRzL3RjcC5jOjEyOTp2b2lkIHJkc190Y3BfcmVzZXRfY2FsbGJhY2tzKHN0cnVjdCBzb2NrZXQgKnNvY2ssXG5uZXQvcmRzL3RjcC5jLTEzMC1cdFx0XHQgICAgIHN0cnVjdCByZHNfY29ubl9wYXRoICpjcClcbi0tXG5uZXQvcmRzL3RjcC5jLTIwMS0vKiBBZGQgdGMgdG8gcmRzX3RjcF90Y19saXN0IGFuZCBzZXQgdGMtXHUwMDNldF9zb2NrLiBTZWUgY29tbWVudHNcbm5ldC9yZHMvdGNwLmM6MjAyOiAqIGFib3ZlIHJkc190Y3BfcmVzZXRfY2FsbGJhY2tzIGZvciBub3RlcyBhYm91dCBzeW5jaHJvbml6YXRpb25cbm5ldC9yZHMvdGNwLmMtMjAzLSAqIHdpdGggZGF0YSBwYXRoXG4tLVxubmV0L3Jkcy90Y3AuaD03ND12b2lkIHJkc190Y3Bfc2V0X2NhbGxiYWNrcyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApO1xubmV0L3Jkcy90Y3AuaDo3NTp2b2lkIHJkc190Y3BfcmVzZXRfY2FsbGJhY2tzKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCByZHNfY29ubl9wYXRoICpjcCk7XG5uZXQvcmRzL3RjcC5oLTc2LXZvaWQgcmRzX3RjcF9yZXN0b3JlX2NhbGxiYWNrcyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxuLS1cbm5ldC9yZHMvdGNwX2xpc3Rlbi5jPTE1Mj1pbnQgcmRzX3RjcF9hY2NlcHRfb25lKHN0cnVjdCByZHNfdGNwX25ldCAqcnRuKVxuLS1cbm5ldC9yZHMvdGNwX2xpc3Rlbi5jLTI5Ni1cdFx0LyogRHVlbGxpbmcgU1lOIGhhcyBiZWVuIGhhbmRsZWQgaW4gcmRzX3RjcF9hY2NlcHRfb25lKCkgKi9cbm5ldC9yZHMvdGNwX2xpc3Rlbi5jOjI5NzpcdFx0cmRzX3RjcF9yZXNldF9jYWxsYmFja3MobmV3X3NvY2ssIGNwKTtcbm5ldC9yZHMvdGNwX2xpc3Rlbi5jLTI5OC1cdFx0LyogcmRzX2Nvbm5lY3RfcGF0aF9jb21wbGV0ZSgpIG1hcmtzIFJEU19DT05OX1VQICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMDA6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTE0OAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYSBuZXR3b3JraW5nIGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyBSRFMgVENQIFJlc2V0IENhbGxiYWNrcyoqCgpBbHJpZ2h0LCBzbyB0aGUgY2x1ZSBoZXJlIGlzIHRoYXQgYHJkc190Y3BfcmVzZXRfY2FsbGJhY2tzYCBpcyBkZWZpbml0ZWx5IGNhbGxlZCBmcm9tIHdpdGhpbiBgcmRzX3RjcF9hY2NlcHRfb25lYC4gR29vZC4gVGhhdCBjb25maXJtcyBhIGNlcnRhaW4gY29ubmVjdGlvbiBmbG93LCBvciBhdCBsZWFzdCBhIHNwZWNpZmljIHBvaW50IG9mIGludGVncmF0aW9uLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsYXJnZXIgY29udGV4dCBvZiAqd2h5KiB0aGlzIGhhcHBlbnMuIEtub3dpbmcgdGhlIGNhbGwgcGF0aCBpcyBqdXN0IHRoZSBiZWdpbm5pbmcuIFRoZSBuZXh0IGxvZ2ljYWwgc3RlcCwgdG8gZ2V0IHRoZSBiaWdnZXIgcGljdHVyZSwgaXMgdG8gaW52ZXN0aWdhdGUgdGhlIGNhbGxlcnMgb2YgYHJkc19jb25uX3NodXRkb3duYC4gVGhhdCYjMzk7bGwgZ2l2ZSBtZSBhIHZpZXcgb2Ygd2hhdCB0cmlnZ2VycyB0aGUgY29ubmVjdGlvbiBzaHV0ZG93biBwcm9jZXNzLCBhbmQgdGhlcmVmb3JlIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIGByZXNldF9jYWxsYmFja3NgIGFyZSB1c2VkIGluIHJlbGF0aW9uIHRvIHRoZSBzaHV0ZG93biBwcm9jZWR1cmUuIFRoYXQgc2hvdWxkIGlsbHVtaW5hdGUgdGhlIGZhaWx1cmUgYW5kIHBvaW50IG1lIHRvIHBvdGVudGlhbCByb290IGNhdXNlcyBhbmQgZml4ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDAwOjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Jkc19jb25uX3NodXRkb3duJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3Jkcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3Jkcy9jb25uZWN0aW9uLmM9Mzg3PUVYUE9SVF9TWU1CT0xfR1BMKHJkc19jb25uX2NyZWF0ZV9vdXRnb2luZyk7XG5uZXQvcmRzL2Nvbm5lY3Rpb24uYy0zODgtXG5uZXQvcmRzL2Nvbm5lY3Rpb24uYzozODk6dm9pZCByZHNfY29ubl9zaHV0ZG93bihzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApXG5uZXQvcmRzL2Nvbm5lY3Rpb24uYy0zOTAte1xuLS1cbm5ldC9yZHMvcmRzLmg9ODE1PXN0cnVjdCByZHNfY29ubmVjdGlvbiAqcmRzX2Nvbm5fY3JlYXRlX291dGdvaW5nKHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvcmRzL3Jkcy5oLTgxOS1cdFx0XHRcdFx0XHR1OCB0b3MsIGdmcF90IGdmcCwgaW50IGRldl9pZik7XG5uZXQvcmRzL3Jkcy5oOjgyMDp2b2lkIHJkc19jb25uX3NodXRkb3duKHN0cnVjdCByZHNfY29ubl9wYXRoICpjcGF0aCk7XG5uZXQvcmRzL3Jkcy5oLTgyMS12b2lkIHJkc19jb25uX2Rlc3Ryb3koc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKTtcbi0tXG5uZXQvcmRzL3NlbmQuYz0xOTI9aW50IHJkc19zZW5kX3htaXQoc3RydWN0IHJkc19jb25uX3BhdGggKmNwKVxuLS1cbm5ldC9yZHMvc2VuZC5jLTI0Ni1cdC8qXG5uZXQvcmRzL3NlbmQuYzoyNDc6XHQgKiByZHNfY29ubl9zaHV0ZG93bigpIHNldHMgdGhlIGNvbm4gc3RhdGUgYW5kIHRoZW4gYWNxdWlyZXNcbm5ldC9yZHMvc2VuZC5jLTI0OC1cdCAqIFJEU19JTl9YTUlUOyB3ZSB0YWtlIHRoZSBsb2NrIGZpcnN0IGFuZCB0aGVuIGNoZWNrIHRoZSBzdGF0ZSxcbi0tXG5uZXQvcmRzL3RjcC5jPTEyOT12b2lkIHJkc190Y3BfcmVzZXRfY2FsbGJhY2tzKHN0cnVjdCBzb2NrZXQgKnNvY2ssXG4tLVxubmV0L3Jkcy90Y3AuYy0xNjktXHQvKiBSZWFkIHRfc29jayBvbmx5IHdoaWxlIG93bmluZyBSRFNfSU5fWE1JVC4gIFRoZSB0ZWFyZG93biBpblxubmV0L3Jkcy90Y3AuYzoxNzA6XHQgKiByZHNfY29ubl9zaHV0ZG93bigpIHJlbGVhc2VzIHRoZSBvbGQgc29ja2V0IGFuZCBjbGVhcnNcbm5ldC9yZHMvdGNwLmMtMTcxLVx0ICogdF9zb2NrLCBzbyBhIHBvaW50ZXIgc2FtcGxlZCBiZWZvcmUgdGhlIHdhaXQgY2FuIGJlIHN0YWxlXG4tLVxubmV0L3Jkcy90aHJlYWRzLmM9MjQzPXZvaWQgcmRzX3NodXRkb3duX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxubmV0L3Jkcy90aHJlYWRzLmMtMjQ4LVxubmV0L3Jkcy90aHJlYWRzLmM6MjQ5Olx0cmRzX2Nvbm5fc2h1dGRvd24oY3ApO1xubmV0L3Jkcy90aHJlYWRzLmMtMjUwLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMDA6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTkzOAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRoZSBleHBlcnQ6CgoqKkludmVzdGlnYXRpbmcgdGhlIFNodXRkb3duIFNlcXVlbmNlKioKCk9rYXksIHNvIEkgc2VlIGByZHNfY29ubl9zaHV0ZG93bmAgYmVpbmcgdHJpZ2dlcmVkIHdpdGhpbiBgcmRzX3NodXRkb3duX3dvcmtlcmAuIE5hdHVyYWxseSwgbXkgbmV4dCBtb3ZlIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuIEkgbmVlZCB0byB0cmFjZSBiYWNrIGFuZCBpZGVudGlmeSB0aGUgY2FsbGluZyBmdW5jdGlvbnMgb2YgYHJkc19zaHV0ZG93bl93b3JrZXJgLiBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsIGdyYXBoIGhlcmUgaXMgY3J1Y2lhbCB0byBzZWUgd2hhdCYjMzk7cyAqYWN0dWFsbHkqIGRyaXZpbmcgdGhlIGNvbm5lY3Rpb24gc2h1dGRvd24gcHJvY2Vzcy4gS25vd2luZyAqd2hvKiBpcyBpbml0aWF0aW5nIHRoaXMgc2h1dGRvd24gd2lsbCBwcm92aWRlIHRoZSBuZWNlc3NhcnkgY29udGV4dCB0byB0cm91Ymxlc2hvb3QgYW55IHByb2JsZW1zIGFuZCBlbnN1cmUgd2UmIzM5O3JlIHNodXR0aW5nIGRvd24gdGhpbmdzIGluIHRoZSBwcm9wZXIgc2VxdWVuY2UuIExldCYjMzk7cyBkaWcgaW4gYW5kIGZpZ3VyZSBvdXQgdGhlIGNoYWluIG9mIGV2ZW50cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMDA6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmRzX3NodXRkb3duX3dvcmtlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9yZHMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9yZHMvY29ubmVjdGlvbi5jPTEzOT1zdGF0aWMgdm9pZCBfX3Jkc19jb25uX3BhdGhfaW5pdChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sXG4tLVxubmV0L3Jkcy9jb25uZWN0aW9uLmMtMTU1LVx0SU5JVF9ERUxBWUVEX1dPUksoXHUwMDI2Y3AtXHUwMDNlY3BfY29ubl93LCByZHNfY29ubmVjdF93b3JrZXIpO1xubmV0L3Jkcy9jb25uZWN0aW9uLmM6MTU2Olx0SU5JVF9XT1JLKFx1MDAyNmNwLVx1MDAzZWNwX2Rvd25fdywgcmRzX3NodXRkb3duX3dvcmtlcik7XG5uZXQvcmRzL2Nvbm5lY3Rpb24uYy0xNTctXHRtdXRleF9pbml0KFx1MDAyNmNwLVx1MDAzZWNwX2NtX2xvY2spO1xuLS1cbm5ldC9yZHMvcmRzLmg9MTA0ND12b2lkIHJkc19jb25uZWN0X3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKik7XG5uZXQvcmRzL3Jkcy5oOjEwNDU6dm9pZCByZHNfc2h1dGRvd25fd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqKTtcbm5ldC9yZHMvcmRzLmgtMTA0Ni12b2lkIHJkc19zZW5kX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKik7XG4tLVxubmV0L3Jkcy90aHJlYWRzLmM9MjE4PXZvaWQgcmRzX3JlY3Zfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5uZXQvcmRzL3RocmVhZHMuYy0yNDItXG5uZXQvcmRzL3RocmVhZHMuYzoyNDM6dm9pZCByZHNfc2h1dGRvd25fd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbm5ldC9yZHMvdGhyZWFkcy5jLTI0NC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDAwOjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNDQzCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogNzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2Ygd2hhdCBuZWVkcyBhdHRlbnRpb24gd2hlbiBoYW5kbGluZyBjb25uZWN0aW9uIHNodXRkb3duIGluIFJEUywgYXBwcm9hY2hlZCBmcm9tIG15IGV4cGVydCBwZXJzcGVjdGl2ZToKCioqRm9jdXNpbmcgb24gUkRTIENvbm5lY3Rpb24gU2h1dGRvd24qKgoKT2theSwgc28gYHJkc19zaHV0ZG93bl93b3JrZXJgIGlzIHRoZSB3b3JrcXVldWUgZnVuY3Rpb24gdGhhdCB0cmlnZ2VycyB3aGVuIGEgY29ubmVjdGlvbiBpcyB0ZXJtaW5hdGVkLiBUaGF0JiMzOTtzIHRoZSBlbnRyeSBwb2ludCB0byBpbnZlc3RpZ2F0ZS4gTmF0dXJhbGx5LCB0aGF0JiMzOTtzIHdoZXJlIHRoZSBjcml0aWNhbCBhY3Rpb25zIHdpbGwgYmUuIEdpdmVuIHRoYXQsIEkga25vdyB0aGUgY3J1Y2lhbCBmdW5jdGlvbnMgdG8gZHJpbGwgZG93biBpbnRvIGFyZToKCiogICBgcmRzX3NlbmRfeG1pdGA6IEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGhhbmRsZXMgb25nb2luZyB0cmFuc21pc3Npb25zIGR1cmluZyBzaHV0ZG93bi4gRG9lcyBpdCBncmFjZWZ1bGx5IGZsdXNoLCBjYW5jZWwsIG9yIHNpbXBseSBkcm9wIHRoZW0/IEFyZSB0aGVyZSByYWNlIGNvbmRpdGlvbnMgdG8gd29ycnkgYWJvdXQ/CiogICBgcmRzX3RjcF9yZXNldF9jYWxsYmFja3NgOiBUaGlzIGlzIGxpa2VseSB3aGVyZSB0aGUgc29ja2V0JiMzOTtzIGFzc29jaWF0ZWQgY2FsbGJhY2tzIGFyZSBiZWluZyBjbGVhcmVkLiBJIG11c3QgY2hlY2sgd2hhdCB0aGVzZSBjYWxsYmFja3Mgd2VyZSBhbmQgaG93IGl0IGNsZWFucyB1cCB0aGVpciBpbnRlcm5hbCBzdGF0ZS4gSSBtdXN0IGVuc3VyZSB0aGlzIGlzIGhhbmRsZWQgcHJvcGVybHksIGNvbnNpZGVyaW5nIHBvdGVudGlhbCBjb25jdXJyZW50IGFjY2Vzcy4KKiAgIGByZHNfY29ubl9zaHV0ZG93bmA6IFRoZSBjb3JlIHNodXRkb3duIGxvZ2ljIGhhcyB0byBiZSBpbiB0aGlzIGZ1bmN0aW9uLiBUaGlzIGlzIHdoZXJlIEkmIzM5O2xsIGZpbmQgaG93IHRoZSBjb25uZWN0aW9uIHN0YXRlIHRyYW5zaXRpb25zIGFuZCBob3cgcmVzb3VyY2VzIGFyZSBmcmVlZC4gSXQgaXMgbGlrZWx5IGl0IHdpbGwgY2FsbCB0aGUgb3RoZXIgdHdvIGFzIHBhcnQgb2YgaXRzIGZ1bmN0aW9ucy4KCk5leHQsIEkmIzM5O2xsIGV4YW1pbmUgdGhlIGNvbmZpZ3VyYXRpb24gYXNwZWN0cyBvZiB0aGUgUkRTIHN1YnN5c3RlbS4gVGhpcyB3YXksIEkga25vdyBhbGwgdGhlIHZhcmlhYmxlcyBpbiB0aGUgbWl4LiBJIGhhdmUgdG8ga25vdyBhbGwgdGhlIHNldHRpbmdzIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzaHV0ZG93biBwcm9jZXNzIGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDAwOjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBSRFMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvcmRzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvcmRzL0tjb25maWctMi1cbm5ldC9yZHMvS2NvbmZpZzozOmNvbmZpZyBSRFNcbm5ldC9yZHMvS2NvbmZpZy00LVx0dHJpc3RhdGUgXCYjMzQ7VGhlIFJlbGlhYmxlIERhdGFncmFtIFNvY2tldHMgUHJvdG9jb2xcJiMzNDtcbi0tXG5uZXQvcmRzL0tjb25maWctOS1cbm5ldC9yZHMvS2NvbmZpZzoxMDpjb25maWcgUkRTX1JETUFcbm5ldC9yZHMvS2NvbmZpZy0xMS1cdHRyaXN0YXRlIFwmIzM0O1JEUyBvdmVyIEluZmluaWJhbmRcJiMzNDtcbi0tXG5uZXQvcmRzL0tjb25maWctMTYtXG5uZXQvcmRzL0tjb25maWc6MTc6Y29uZmlnIFJEU19UQ1Bcbm5ldC9yZHMvS2NvbmZpZy0xOC1cdHRyaXN0YXRlIFwmIzM0O1JEUyBvdmVyIFRDUFwmIzM0O1xuLS1cbm5ldC9yZHMvS2NvbmZpZy0yNC1cbm5ldC9yZHMvS2NvbmZpZzoyNTpjb25maWcgUkRTX0RFQlVHXG5uZXQvcmRzL0tjb25maWctMjYtXHRib29sIFwmIzM0O1JEUyBkZWJ1Z2dpbmcgbWVzc2FnZXNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMDA6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEwMzYKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBSRFMgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKQWxyaWdodCwgc28gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBgUkRTYCBhbmQgYFJEU19UQ1BgIGNvbmZpZ3VyYXRpb25zLiBNeSBmaXJzdCBpbnN0aW5jdCwgYXMgYWx3YXlzLCBpcyB0byBkaXZlIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZpbGVzLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGRlcGVuZGVuY3kgcmVsYXRpb25zaGlwcy4gV2hlcmUgZG8gdGhlc2UgYFJEU2Agb3B0aW9ucyBmaXQgd2l0aGluIHRoZSBicm9hZGVyIGtlcm5lbCBjb25maWd1cmF0aW9uIGxhbmRzY2FwZT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBvdGhlciBmZWF0dXJlcyBvciBtb2R1bGVzIHRoZXkgcmVseSBvbi4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYG5ldC9yZHMvS2NvbmZpZ2AuIFRoYXQmIzM5O3MgdGhlIG9idmlvdXMgcGxhY2UgdG8gZmluZCB0aGUgYW5zd2Vycy4gRnJvbSB0aGVyZSwgSSBjYW4gZGV0ZXJtaW5lIGlmIGFueSBwcmUtcmVxdWlzaXRlcyBhcmUgZW5hYmxlZCBmb3IgYFJEU2AgYW5kIGBSRFNfVENQYC4gSXQmIzM5O3MgYWxsIGFib3V0IGVuc3VyaW5nIHRoYXQgbm90aGluZyBpcyBicm9rZW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDAwOjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3Jkcy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdFxuICAgMzpcdGNvbmZpZyBSRFNcbiAgIDQ6XHRcdHRyaXN0YXRlIFwmIzM0O1RoZSBSZWxpYWJsZSBEYXRhZ3JhbSBTb2NrZXRzIFByb3RvY29sXCYjMzQ7XG4gICA1Olx0XHRkZXBlbmRzIG9uIElORVRcbiAgIDY6XHRcdGhlbHBcbiAgIDc6XHRcdCAgVGhlIFJEUyAoUmVsaWFibGUgRGF0YWdyYW0gU29ja2V0cykgcHJvdG9jb2wgcHJvdmlkZXMgcmVsaWFibGUsXG4gICA4Olx0XHQgIHNlcXVlbmNlZCBkZWxpdmVyeSBvZiBkYXRhZ3JhbXMgb3ZlciBJbmZpbmliYW5kIG9yIFRDUC5cbiAgIDk6XHRcbiAgMTA6XHRjb25maWcgUkRTX1JETUFcbiAgMTE6XHRcdHRyaXN0YXRlIFwmIzM0O1JEUyBvdmVyIEluZmluaWJhbmRcJiMzNDtcbiAgMTI6XHRcdGRlcGVuZHMgb24gUkRTIFx1MDAyNlx1MDAyNiBJTkZJTklCQU5EIFx1MDAyNlx1MDAyNiBJTkZJTklCQU5EX0FERFJfVFJBTlNcbiAgMTM6XHRcdGhlbHBcbiAgMTQ6XHRcdCAgQWxsb3cgUkRTIHRvIHVzZSBJbmZpbmliYW5kIGFzIGEgdHJhbnNwb3J0LlxuICAxNTpcdFx0ICBUaGlzIHRyYW5zcG9ydCBzdXBwb3J0cyBSRE1BIG9wZXJhdGlvbnMuXG4gIDE2Olx0XG4gIDE3Olx0Y29uZmlnIFJEU19UQ1BcbiAgMTg6XHRcdHRyaXN0YXRlIFwmIzM0O1JEUyBvdmVyIFRDUFwmIzM0O1xuICAxOTpcdFx0ZGVwZW5kcyBvbiBSRFNcbiAgMjA6XHRcdGRlcGVuZHMgb24gSVBWNiB8fCAhSVBWNlxuICAyMTpcdFx0aGVscFxuICAyMjpcdFx0ICBBbGxvdyBSRFMgdG8gdXNlIFRDUCBhcyBhIHRyYW5zcG9ydC5cbiAgMjM6XHRcdCAgVGhpcyB0cmFuc3BvcnQgZG9lcyBub3Qgc3VwcG9ydCBSRE1BIG9wZXJhdGlvbnMuXG4gIDI0Olx0XG4gIDI1Olx0Y29uZmlnIFJEU19ERUJVR1xuICAyNjpcdFx0Ym9vbCBcJiMzNDtSRFMgZGVidWdnaW5nIG1lc3NhZ2VzXCYjMzQ7XG4gIDI3Olx0XHRkZXBlbmRzIG9uIFJEU1xuICAyODpcdFx0ZGVmYXVsdCBuXG4gIDI5Olx0XG4gIDMwOlx0Y29uZmlnIEdDT1ZfUFJPRklMRV9SRFNcbiAgMzE6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIEdDT1YgcHJvZmlsaW5nIG9uIFJEU1wmIzM0O1xuICAzMjpcdFx0ZGVwZW5kcyBvbiBHQ09WX0tFUk5FTFxuICAzMzpcdFx0aGVscFxuICAzNDpcdFx0ICBFbmFibGUgR0NPViBwcm9maWxpbmcgb24gUkRTIGZvciBjaGVja2luZyB3aGljaCBmdW5jdGlvbnMvbGluZXNcbiAgMzU6XHRcdCAgYXJlIGV4ZWN1dGVkLlxuICAzNjpcdFxuICAzNzpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAwMDoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTcxMQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDIyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBUaG91Z2h0IFByb2Nlc3Mgb24gUkRTIENvbmZpZ3VyYXRpb24gYW5kIFJlbGV2YW50IEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgUkRTIGNvbmZpZ3VyYXRpb25zLCBgUkRTYCBhbmQgYFJEU19UQ1BgLCB3aXRoIGBJTkVUYCB1c3VhbGx5IGVuYWJsZWQuIEkmIzM5O3ZlIGdvdCBhIGZldyBmb2N1cyBzeW1ib2xzIHRvIGNvbnNpZGVyOiBgcmRzX3NlbmRfeG1pdGAsIGByZHNfdGNwX3Jlc2V0X2NhbGxiYWNrc2AsIGFuZCBgcmRzX2Nvbm5fc2h1dGRvd25gLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueSBvdGhlciBwb3RlbnRpYWxseSB1c2VmdWwgZnVuY3Rpb25zIGluIHRoaXMgYXJlYS4KCmByZHNfY29ubl9wYXRoX3Jlc2V0YCBsb29rcyBwcm9taXNpbmcsIGJ1dCBpdCBtaWdodCBiZSBpbmxpbmVkIG9yIHN0YXRpYywgc28gdGhhdCYjMzk7cyBhIHBvdGVudGlhbCBpc3N1ZS4gYHJkc19jb25uX3NodXRkb3duYCBpcyBwcm9iYWJseSBhIHN0cm9uZ2VyIGJldC4gQW5kLCBJIHNlZSBgcmVsZWFzZV9pbl94bWl0YCBpcyBzdGF0aWMsIHdoaWNoIGlzIG5vdCB3aGF0IEkgbmVlZC4gQWgsIGByZHNfc2VuZF94bWl0YCBzdGlsbCBzZWVtcyBsaWtlIGEgZ29vZCB0YXJnZXQuCgpXYWl0IGEgc2Vjb25kLCBgcmRzX3RjcF9yZXNldF9jYWxsYmFja3NgIOKAkyB0aGF0JiMzOTtzIGluIGBuZXQvcmRzL3RjcC5jYC4gTGV0IG1lIHF1aWNrbHkgY29uZmlybSBpZiB0aGF0IGZ1bmN0aW9uIGlzIGV4cG9ydGVkIG9yIGlmIGl0JiMzOTtzIHN0YXRpYy4gTm9wZSwgaXQmIzM5O3Mgbm90IHN0YXRpYywgd2hpY2ggaXMgYSBnb29kIHNpZ24uIE1heWJlIGByZHNfdGNwX2FjY2VwdF9vbmVgIGlzIGFuIGV2ZW4gYmV0dGVyIGNhbmRpZGF0ZT8gSSBzZWUgdGhhdCBgcmRzX3RjcF9hY2NlcHRfb25lYCAqY2FsbHMqIGByZHNfdGNwX3Jlc2V0X2NhbGxiYWNrc2AuIE5vdyBJIHNob3VsZCBjaGVjayB0aGUgY2FsbGVycyBvZiBgcmRzX3RjcF9hY2NlcHRfb25lYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMDA6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmRzX3RjcF9hY2NlcHRfb25lJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3Jkcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3Jkcy9yZHMuaD01NDA9c3RydWN0IHJkc190cmFuc3BvcnQge1xuLS1cbm5ldC9yZHMvcmRzLmgtNTU0LVx0ICogY29ubl9zbG90c19hdmFpbGFibGUgaXMgaW52b2tlZCB3aGVuIGEgcHJldmlvdXNseSB1bmF2YWlsYWJsZVxubmV0L3Jkcy9yZHMuaDo1NTU6XHQgKiBjb25uZWN0aW9uIHNsb3QgYmVjb21lcyBhdmFpbGFibGUgYWdhaW4uIHJkc190Y3BfYWNjZXB0X29uZV9wYXRoIG1heVxubmV0L3Jkcy9yZHMuaC01NTYtXHQgKiByZXR1cm4gLUVOT0JVRlMgaWYgaXQgY2Fubm90IGZpbmQgYW4gYXZhaWxhYmxlIHNsb3QsIGFuZCB0aGVuIHN0YXNoZXNcbm5ldC9yZHMvcmRzLmgtNTU3LVx0ICogdGhlIG5ldyBzb2NrZXQgaW4gXCYjMzQ7cmRzX3RjcF9hY2NlcHRlZF9zb2NrXCYjMzQ7LiBUaGlzIGZ1bmN0aW9uIHJlLWlzc3Vlc1xubmV0L3Jkcy9yZHMuaDo1NTg6XHQgKiBgcmRzX3RjcF9hY2NlcHRfb25lX3BhdGhgLCB3aGljaCBwaWNrcyB1cCB0aGUgc3Rhc2hlZCBzb2NrZXQgYW5kXG5uZXQvcmRzL3Jkcy5oLTU1OS1cdCAqIGNvbnRpbnVpbmcgd2hlcmUgaXQgbGVmdCB3aXRoIFwmIzM0Oy1FTk9CVUZTXCYjMzQ7IGxhc3QgdGltZS4gIFRoaXMgZW5zdXJlc1xuLS1cbm5ldC9yZHMvdGNwLmM9NTc0PXN0YXRpYyB2b2lkIHJkc190Y3BfYWNjZXB0X3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxubmV0L3Jkcy90Y3AuYy01NzktXG5uZXQvcmRzL3RjcC5jOjU4MDpcdHdoaWxlIChyZHNfdGNwX2FjY2VwdF9vbmUocnRuKSA9PSAwKVxubmV0L3Jkcy90Y3AuYy01ODEtXHRcdGNvbmRfcmVzY2hlZCgpO1xuLS1cbm5ldC9yZHMvdGNwLmg9OD1zdHJ1Y3QgcmRzX3RjcF9uZXQge1xubmV0L3Jkcy90Y3AuaDo5Olx0Lyogc2VyaWFsaXplIFwmIzM0O3Jkc190Y3BfYWNjZXB0X29uZVwmIzM0OyB3aXRoIFwmIzM0O3Jkc190Y3BfYWNjZXB0X2xvY2tcJiMzNDtcbm5ldC9yZHMvdGNwLmgtMTAtXHQgKiB0byBwcm90ZWN0IFwmIzM0O3Jkc190Y3BfYWNjZXB0ZWRfc29ja1wmIzM0O1xuLS1cbm5ldC9yZHMvdGNwLmg9Mjc9c3RydWN0IHJkc190Y3BfY29ubmVjdGlvbiB7XG4tLVxubmV0L3Jkcy90Y3AuaC0zMi1cdC8qIHRfY29ubl9wYXRoX2xvY2sgc3luY2hyb25pemVzIHRoZSBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQgYmV0d2VlblxubmV0L3Jkcy90Y3AuaDozMzpcdCAqIHJkc190Y3BfYWNjZXB0X29uZSBhbmQgcmRzX3RjcF9jb25uX3BhdGhfY29ubmVjdFxubmV0L3Jkcy90Y3AuaC0zNC1cdCAqL1xuLS1cbm5ldC9yZHMvdGNwLmg9OTM9dm9pZCByZHNfdGNwX2Nvbm5fc2xvdHNfYXZhaWxhYmxlKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgYm9vbCBmYW5fb3V0KTtcbm5ldC9yZHMvdGNwLmg6OTQ6aW50IHJkc190Y3BfYWNjZXB0X29uZShzdHJ1Y3QgcmRzX3RjcF9uZXQgKnJ0bik7XG5uZXQvcmRzL3RjcC5oLTk1LXZvaWQgcmRzX3RjcF9rZWVwYWxpdmUoc3RydWN0IHNvY2tldCAqc29jayk7XG4tLVxubmV0L3Jkcy90Y3BfbGlzdGVuLmM9NjA9cmRzX3RjcF9nZXRfcGVlcl9zcG9ydChzdHJ1Y3Qgc29ja2V0ICpzb2NrKVxuLS1cbm5ldC9yZHMvdGNwX2xpc3Rlbi5jLTY5LVxubmV0L3Jkcy90Y3BfbGlzdGVuLmM6NzA6LyogcmRzX3RjcF9hY2NlcHRfb25lX3BhdGgoKTogaWYgYWNjZXB0aW5nIG9uIGNwX2luZGV4IFx1MDAzZSAwLCBtYWtlIHN1cmUgdGhlXG5uZXQvcmRzL3RjcF9saXN0ZW4uYy03MS0gKiBjbGllbnQmIzM5O3MgaXBhZGRyIFx1MDAzYyBzZXJ2ZXImIzM5O3MgaXBhZGRyLiBPdGhlcndpc2UsIGNsb3NlIHRoZSBhY2NlcHRlZFxuLS1cbm5ldC9yZHMvdGNwX2xpc3Rlbi5jPTc2PXN0YXRpYyBzdHJ1Y3QgcmRzX3RjcF9jb25uZWN0aW9uICpcbm5ldC9yZHMvdGNwX2xpc3Rlbi5jOjc3OnJkc190Y3BfYWNjZXB0X29uZV9wYXRoKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgc3RydWN0IHNvY2tldCAqc29jaylcbm5ldC9yZHMvdGNwX2xpc3Rlbi5jLTc4LXtcbi0tXG5uZXQvcmRzL3RjcF9saXN0ZW4uYz0xMDg9dm9pZCByZHNfdGNwX2Nvbm5fc2xvdHNfYXZhaWxhYmxlKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgYm9vbCBmYW5fb3V0KVxuLS1cbm5ldC9yZHMvdGNwX2xpc3Rlbi5jLTEzOC1cdC8qIEFzIHNvb24gYXMgYSBjb25uZWN0aW9uIHdlbnQgZG93bixcbm5ldC9yZHMvdGNwX2xpc3Rlbi5jOjEzOTpcdCAqIGl0IGlzIHNhZmUgdG8gc2NoZWR1bGUgYSBcJiMzNDtyZHNfdGNwX2FjY2VwdF9vbmVcJiMzNDtcbm5ldC9yZHMvdGNwX2xpc3Rlbi5jLTE0MC1cdCAqIGF0dGVtcHQgZXZlbiBpZiB0aGVyZSBhcmUgbm8gY29ubmVjdGlvbnMgcGVuZGluZzpcbm5ldC9yZHMvdGNwX2xpc3Rlbi5jOjE0MTpcdCAqIEZ1bmN0aW9uIFwmIzM0O3Jkc190Y3BfYWNjZXB0X29uZVwmIzM0OyB3b24mIzM5O3QgYmxvY2tcbm5ldC9yZHMvdGNwX2xpc3Rlbi5jLTE0Mi1cdCAqIGJ1dCBzaW1wbHkgcmV0dXJuIC1FQUdBSU4gaW4gdGhhdCBjYXNlLlxuLS1cbm5ldC9yZHMvdGNwX2xpc3Rlbi5jLTE0Ni1cdCAqIHRvIGJlIGFjY2VwdGVkIHByaW9yIHRvIGEgZnJlZSBzbG90IGJlaW5nIGF2YWlsYWJsZTpcbm5ldC9yZHMvdGNwX2xpc3Rlbi5jOjE0NzpcdCAqIHRoZSAtRU5PQlVGUyBjYXNlIGluIFwmIzM0O3Jkc190Y3BfYWNjZXB0X29uZVwmIzM0Oy5cbm5ldC9yZHMvdGNwX2xpc3Rlbi5jLTE0OC1cdCAqL1xuLS1cbm5ldC9yZHMvdGNwX2xpc3Rlbi5jLTE1MS1cbm5ldC9yZHMvdGNwX2xpc3Rlbi5jOjE1MjppbnQgcmRzX3RjcF9hY2NlcHRfb25lKHN0cnVjdCByZHNfdGNwX25ldCAqcnRuKVxubmV0L3Jkcy90Y3BfbGlzdGVuLmMtMTUzLXtcbi0tXG5uZXQvcmRzL3RjcF9saXN0ZW4uYy0yNDYtXHRcdCAqL1xubmV0L3Jkcy90Y3BfbGlzdGVuLmM6MjQ3Olx0XHRyc190Y3AgPSByZHNfdGNwX2FjY2VwdF9vbmVfcGF0aChjb25uLCBuZXdfc29jayk7XG5uZXQvcmRzL3RjcF9saXN0ZW4uYy0yNDgtXHRcdGlmICghcnNfdGNwKSB7XG4tLVxubmV0L3Jkcy90Y3BfbGlzdGVuLmMtMjUwLVx0XHRcdCAqIFwmIzM0O3Jkc190Y3BfY29ubl9zbG90c19hdmFpbGFibGVcJiMzNDsgdHJpZ2dlcnNcbm5ldC9yZHMvdGNwX2xpc3Rlbi5jOjI1MTpcdFx0XHQgKiBcJiMzNDtyZHNfdGNwX2FjY2VwdF9vbmVcJiMzNDsgYWdhaW4gYXMgc29vbiBhcyBvbmUgb2YgdGhlXG5uZXQvcmRzL3RjcF9saXN0ZW4uYy0yNTItXHRcdFx0ICogY29ubmVjdGlvbiBzbG90cyBiZWNvbWVzIGF2YWlsYWJsZSBhZ2FpblxuLS1cbm5ldC9yZHMvdGNwX2xpc3Rlbi5jLTI5NS1cdGlmIChyc190Y3AtXHUwMDNldF9zb2NrKSB7XG5uZXQvcmRzL3RjcF9saXN0ZW4uYzoyOTY6XHRcdC8qIER1ZWxsaW5nIFNZTiBoYXMgYmVlbiBoYW5kbGVkIGluIHJkc190Y3BfYWNjZXB0X29uZSgpICovXG5uZXQvcmRzL3RjcF9saXN0ZW4uYy0yOTctXHRcdHJkc190Y3BfcmVzZXRfY2FsbGJhY2tzKG5ld19zb2NrLCBjcCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDAwOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNjM4CgkJCQkJCQlvdXRwdXQ6IDE2NwoJCQkJCQkJdGhvdWdodHM6IDE4MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBSRFMgQ29ubmVjdGlvbiBTaHV0ZG93biBQYXRjaCoqCgpPa2F5LCBzbyBgcmRzX3RjcF9yZXNldF9jYWxsYmFja3NgIGlzIGxvb2tpbmcgZ29vZCDigJMgbm8gaW1tZWRpYXRlIHJlZCBmbGFncyB0aGVyZS4gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IHRoZSBjb25maWd1cmF0aW9ucyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGFyZSBjZW50ZXJlZCBhcm91bmQgYFJEU2AgYW5kIGBSRFNfVENQYC4gRnJvbSB3aGF0IEkmIzM5O20gc2VlaW5nLCB0aGUgY29yZSBlbGVtZW50cyBoZXJlIGFyZSByZWFsbHkgcmV2b2x2aW5nIGFyb3VuZCBgcmRzX3NlbmRfeG1pdGAsIGByZHNfdGNwX3Jlc2V0X2NhbGxiYWNrc2AsIGFuZCBgcmRzX2Nvbm5fc2h1dGRvd25gLgoKVGhlIGNydXggb2YgdGhpcyBwYXRjaCBzZWVtcyB0byBhZGRyZXNzIGEgcHJldHR5IG5hc3R5IHJhY2UgY29uZGl0aW9uIHdpdGhpbiB0aGUgUkRTIGNvbm5lY3Rpb24gc2h1dGRvd24gYW5kIHJlc2V0IHNlcXVlbmNlLiBJdCBzb3VuZHMgbGlrZSB0aGVyZSB3YXMgYSBwb3RlbnRpYWwgZm9yIHRoZSBgUkRTX0lOX1hNSVRgIGFuZCBgUkRTX1JFQ1ZfUkVGSUxMYCBmbGFncyB0byBnZXQgY29ycnVwdGVkIG9yLCB3b3JzZSwgcmUtYWNxdWlyZWQgc2ltdWx0YW5lb3VzbHksIHdoaWNoIGlzIG9idmlvdXNseSBhIHByb2JsZW0uIFRoZSBmaXg/IFVzaW5nIGB0ZXN0X2FuZF9zZXRfYml0X2xvY2tgIHRvIGVuc3VyZSB0aGF0IHRoZSB0cmFuc21pdCBhbmQgcmVjZWl2ZSBwYXRocyBhcmUgcHJvcGVybHkgJiMzNDtxdWllc2NlZCYjMzQ7IOKAkyB0aGF0JiMzOTtzIGEgc21hcnQgYXBwcm9hY2guIEFsc28sIHRoZSB1dGlsaXphdGlvbiBvZiBgd3FfaGFzX3NsZWVwZXJgIHRvIGd1YXJhbnRlZSBhIGZ1bGwgbWVtb3J5IGJhcnJpZXIgd2hlbiB3ZSYjMzk7cmUgY2hlY2tpbmcgdGhlIHdhaXQgcXVldWUgaXMgY3J1Y2lhbCBmb3IgcHJldmVudGluZyB0aG9zZSBzdWJ0bGUgbWVtb3J5LXJlbGF0ZWQgaXNzdWVzLgoKVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBkaWdnaW5nIGRlZXAgaW50byB0aGUgY29yZSBSRFMgbmV0d29ya2luZyBsb2dpYy4gSXQmIzM5O3MgZGVmaW5pdGVseSByZWFjaGFibGUgYW5kIGEgcHJpbWUgY2FuZGlkYXRlIGZvciBmdXp6aW5nIHRvIHNoYWtlIG91dCBhbnkgcmVtYWluaW5nIGlzc3Vlcy4gSSYjMzk7bGwgdXNlIGBzZXQtcmVzdWx0c2AgdG8gdHJhY2sgbXkgd29yay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMDA6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1JEUyYjMzQ7LAogICAgJiMzNDtSRFNfVENQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmRzX3NlbmRfeG1pdCYjMzQ7LAogICAgJiMzNDtyZHNfdGNwX3Jlc2V0X2NhbGxiYWNrcyYjMzQ7LAogICAgJiMzNDtyZHNfY29ubl9zaHV0ZG93biYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGR1cmluZyBSRFMgY29ubmVjdGlvbiBzaHV0ZG93biBhbmQgcmVzZXQsIHdoZXJlIHRoZSBSRFNfSU5fWE1JVCBhbmQgUkRTX1JFQ1ZfUkVGSUxMIGZsYWdzIGNvdWxkIGJlIGNsb2JiZXJlZCBvciByZS1hY3F1aXJlZCBjb25jdXJyZW50bHkuIEl0IHVzZXMgdGVzdF9hbmRfc2V0X2JpdF9sb2NrIHRvIHByb3Blcmx5IHF1aWVzY2UgdGhlIHRyYW5zbWl0IGFuZCByZWNlaXZlIHBhdGhzLCBhbmQgd3FfaGFzX3NsZWVwZXIgdG8gZW5zdXJlIGEgZnVsbCBtZW1vcnkgYmFycmllciB3aGVuIGNoZWNraW5nIHRoZSB3YWl0IHF1ZXVlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgUkRTIG5ldHdvcmtpbmcgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1JEUyYjMzQ7LAogICAgJiMzNDtSRFNfVENQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmRzX3NlbmRfeG1pdCYjMzQ7LAogICAgJiMzNDtyZHNfdGNwX3Jlc2V0X2NhbGxiYWNrcyYjMzQ7LAogICAgJiMzNDtyZHNfY29ubl9zaHV0ZG93biYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGR1cmluZyBSRFMgY29ubmVjdGlvbiBzaHV0ZG93biBhbmQgcmVzZXQsIHdoZXJlIHRoZSBSRFNfSU5fWE1JVCBhbmQgUkRTX1JFQ1ZfUkVGSUxMIGZsYWdzIGNvdWxkIGJlIGNsb2JiZXJlZCBvciByZS1hY3F1aXJlZCBjb25jdXJyZW50bHkuIEl0IHVzZXMgdGVzdF9hbmRfc2V0X2JpdF9sb2NrIHRvIHByb3Blcmx5IHF1aWVzY2UgdGhlIHRyYW5zbWl0IGFuZCByZWNlaXZlIHBhdGhzLCBhbmQgd3FfaGFzX3NsZWVwZXIgdG8gZW5zdXJlIGEgZnVsbCBtZW1vcnkgYmFycmllciB3aGVuIGNoZWNraW5nIHRoZSB3YWl0IHF1ZXVlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgUkRTIG5ldHdvcmtpbmcgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDAwOjI3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMDA6Mjc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtLTVNBTiBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gZGV0ZWN0IHVzZXMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYW5kIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXIgc3BhY2UuIFRoaXMgcGF0Y2ggZm9jdXNlcyBlbnRpcmVseSBvbiBmaXhpbmcgY29uY3VycmVuY3kgYW5kIHN5bmNocm9uaXphdGlvbiBpc3N1ZXMgd2l0aGluIHRoZSBSRFMgc3Vic3lzdGVtLiBJdCByZXBsYWNlcyBub24tYXRvbWljIGJpdCBjbGVhcnMgd2l0aCBhdG9taWMgb3BlcmF0aW9ucywgdXNlcyBiaXQgbG9ja3MgKGB0ZXN0X2FuZF9zZXRfYml0X2xvY2tgKSB0byBwcm9wZXJseSBxdWllc2NlIHRyYW5zbWl0IGFuZCByZWNlaXZlIHBhdGhzLCBhbmQgYWRkcyBtZW1vcnkgYmFycmllcnMgKGB3cV9oYXNfc2xlZXBlcmApIHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25zIGFuZCBsb3N0IHdha2UtdXBzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1vZGlmeSBtZW1vcnkgYWxsb2NhdGlvbnMsIG9yIGFsdGVyIGRhdGEgY29waWVkIHRvIHVzZXIgc3BhY2Ugb3Igc2VudCBvdmVyIHRoZSBuZXR3b3JrLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyBleHBvc2VkIGJ5IHRoZXNlIGNoYW5nZXMuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggd291bGQgYmUgY29uY3VycmVuY3kgaXNzdWVzLCByYWNlIGNvbmRpdGlvbnMsIG9yIGRlYWRsb2Nrcywgd2hpY2ggYXJlIGJlc3QgY2F1Z2h0IGJ5IHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgbGlrZSBLQVNBTiwgS0NTQU4sIGFuZCBMT0NLREVQLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBiZTgyYWZiNjljZGUxYjVlNDQzZjAzZTdmZjIyN2I5NmZiZjUzZjE1CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBBdWcgMTYgMDA6MjY6MzEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvcmRzL2Nvbm5lY3Rpb24uYyBiL25ldC9yZHMvY29ubmVjdGlvbi5jCmluZGV4IDdjOGFiOGU5NzNlMWIuLmExMGI2NjdjMDZjODcgMTAwNjQ0Ci0tLSBhL25ldC9yZHMvY29ubmVjdGlvbi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9yZHMvY29ubmVjdGlvbi5jCkBAIC0xMjAsNyAmIzQzOzEyMCwxNSBAQCBzdGF0aWMgdm9pZCByZHNfY29ubl9wYXRoX3Jlc2V0KHN0cnVjdCByZHNfY29ubl9wYXRoICpjcCkKIAogCXJkc19zdGF0c19pbmMoc19jb25uX3Jlc2V0KTsKIAlyZHNfc2VuZF9wYXRoX3Jlc2V0KGNwKTsKLQljcC0mZ3Q7Y3BfZmxhZ3MgPSAwOwomIzQzOwomIzQzOwkvKiBDbGVhciB0aGUgYml0cyB0aGUgcmVzZXQgaXMgcmVzcG9uc2libGUgZm9yIGluZGl2aWR1YWxseTogYQomIzQzOwkgKiBibGFua2V0IGNwX2ZsYWdzID0gMCBpcyBhIHBsYWluIHN0b3JlIHRoYXQgY2FuIGNsb2JiZXIgYQomIzQzOwkgKiBjb25jdXJyZW50IGF0b21pYyByZWFkLW1vZGlmeS13cml0ZSBvbiB0aGUgc2FtZSB3b3JkLgomIzQzOwkgKiBSRFNfSU5fWE1JVCBhbmQgUkRTX1JFQ1ZfUkVGSUxMIGFyZSBvd25lZCBieSB0aGUgY2FsbGVyLAomIzQzOwkgKiB3aGljaCByZWxlYXNlcyB0aGVtIG9uY2UgdGhlIHRlYXJkb3duIGlzIGNvbXBsZXRlLgomIzQzOwkgKi8KJiM0MzsJY2xlYXJfYml0KFJEU19MTF9TRU5EX0ZVTEwsICZhbXA7Y3AtJmd0O2NwX2ZsYWdzKTsKJiM0MzsJY2xlYXJfYml0KFJEU19SRUNPTk5FQ1RfUEVORElORywgJmFtcDtjcC0mZ3Q7Y3BfZmxhZ3MpOwogCiAJLyogRG8gbm90IGNsZWFyIG5leHRfcnhfc2VxIGhlcmUsIGVsc2Ugd2UgY2Fubm90IGRpc3Rpbmd1aXNoCiAJICogcmV0cmFuc21pdHRlZCBwYWNrZXRzIGZyb20gbmV3IHBhY2tldHMsIGFuZCB3aWxsIGhhbmQgYWxsCkBAIC00MDYsMTQgJiM0Mzs0MTQsMzIgQEAgdm9pZCByZHNfY29ubl9zaHV0ZG93bihzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApCiAJCX0KIAkJbXV0ZXhfdW5sb2NrKCZhbXA7Y3AtJmd0O2NwX2NtX2xvY2spOwogCiYjNDM7CQkvKiBRdWllc2NlIHRoZSB0cmFuc21pdCBhbmQgcmVjZWl2ZS1yZWZpbGwgcGF0aHMgYnkKJiM0MzsJCSAqIGFjcXVpcmluZyB0aGVpciBiaXQgbG9ja3MsIG5vdCBtZXJlbHkgd2FpdGluZyBmb3IKJiM0MzsJCSAqIHRoZW0gdG8gYmUgcmVsZWFzZWQ6IHdpdGggYSBwbGFpbiB3YWl0LCBlaXRoZXIgcGF0aAomIzQzOwkJICogY2FuIHJlLXRha2UgaXRzIGxvY2sgdGhlIGluc3RhbnQgYWZ0ZXIgd2Ugc2FtcGxlIGl0CiYjNDM7CQkgKiBjbGVhciBhbmQgdGhlbiBydW4gY29uY3VycmVudGx5IHdpdGggdGhlIHRyYW5zcG9ydAomIzQzOwkJICogc2h1dGRvd24gYW5kIHRoZSBwYXRoIHJlc2V0IGJlbG93LiAgSG9sZGluZyBib3RoCiYjNDM7CQkgKiBsb2NrcyBhY3Jvc3MgdGhlIHRlYXJkb3duIG1ha2VzIHRoYXQgc3RydWN0dXJhbGx5CiYjNDM7CQkgKiBpbXBvc3NpYmxlLgomIzQzOwkJICovCiAJCXdhaXRfZXZlbnQoY3AtJmd0O2NwX3dhaXRxLAotCQkJICAgIXRlc3RfYml0KFJEU19JTl9YTUlULCAmYW1wO2NwLSZndDtjcF9mbGFncykpOwomIzQzOwkJCSAgICF0ZXN0X2FuZF9zZXRfYml0X2xvY2soUkRTX0lOX1hNSVQsICZhbXA7Y3AtJmd0O2NwX2ZsYWdzKSk7CiAJCXdhaXRfZXZlbnQoY3AtJmd0O2NwX3dhaXRxLAotCQkJICAgIXRlc3RfYml0KFJEU19SRUNWX1JFRklMTCwgJmFtcDtjcC0mZ3Q7Y3BfZmxhZ3MpKTsKJiM0MzsJCQkgICAhdGVzdF9hbmRfc2V0X2JpdChSRFNfUkVDVl9SRUZJTEwsICZhbXA7Y3AtJmd0O2NwX2ZsYWdzKSk7CiAKIAkJY29ubi0mZ3Q7Y190cmFucy0mZ3Q7Y29ubl9wYXRoX3NodXRkb3duKGNwKTsKIAkJcmRzX2Nvbm5fcGF0aF9yZXNldChjcCk7CiAKJiM0MzsJCS8qIFJlbGVhc2UgdGhlIHR3byBsb2NrcyBhbmQgd2FrZSBhbnkgd2FpdGVyIChlLmcuCiYjNDM7CQkgKiByZHNfdGNwX3Jlc2V0X2NhbGxiYWNrcygpKSB0aGF0IGJsb2NrZWQgb24gdGhlbSB3aGlsZQomIzQzOwkJICogd2UgaGVsZCB0aGVtLiAgcmRzX2Nvbm5fcGF0aF9yZXNldCgpIGxlYXZlcyBib3RoIGJpdHMKJiM0MzsJCSAqIGFsb25lOiBvd25lcnNoaXAgZW5kcyBoZXJlLCBub3QgaW5zaWRlIHRoZSByZXNldC4KJiM0MzsJCSAqLwomIzQzOwkJY2xlYXJfYml0X3VubG9jayhSRFNfSU5fWE1JVCwgJmFtcDtjcC0mZ3Q7Y3BfZmxhZ3MpOwomIzQzOwkJY2xlYXJfYml0KFJEU19SRUNWX1JFRklMTCwgJmFtcDtjcC0mZ3Q7Y3BfZmxhZ3MpOwomIzQzOwkJd2FrZV91cF9hbGwoJmFtcDtjcC0mZ3Q7Y3Bfd2FpdHEpOwomIzQzOwogCQlpZiAoIXJkc19jb25uX3BhdGhfdHJhbnNpdGlvbihjcCwgUkRTX0NPTk5fRElTQ09OTkVDVElORywKIAkJCQkJICAgICAgUkRTX0NPTk5fRE9XTikgJmFtcDsmYW1wOwogCQkgICAgIXJkc19jb25uX3BhdGhfdHJhbnNpdGlvbihjcCwgUkRTX0NPTk5fRVJST1IsCmRpZmYgLS1naXQgYS9uZXQvcmRzL3NlbmQuYyBiL25ldC9yZHMvc2VuZC5jCmluZGV4IDE1YTFiOTdmMTNlNzYuLmI5MGUwNTg2ZjgxOGMgMTAwNjQ0Ci0tLSBhL25ldC9yZHMvc2VuZC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9yZHMvc2VuZC5jCkBAIC0xMTQsOCAmIzQzOzExNCwxMyBAQCBzdGF0aWMgdm9pZCByZWxlYXNlX2luX3htaXQoc3RydWN0IHJkc19jb25uX3BhdGggKmNwKQogCSAqIGhvdCBwYXRoIGFuZCBmaW5kaW5nIHdhaXRlcnMgaXMgdmVyeSByYXJlLiAgV2UgZG9uJiMzOTt0IHdhbnQgdG8gd2FsawogCSAqIHRoZSBzeXN0ZW0td2lkZSBoYXNoZWQgd2FpdHF1ZXVlIGJ1Y2tldHMgaW4gdGhlIGZhc3QgcGF0aCBvbmx5IHRvCiAJICogYWxtb3N0IG5ldmVyIGZpbmQgd2FpdGVycy4KJiM0MzsJICoKJiM0MzsJICogd3FfaGFzX3NsZWVwZXIoKSBzdXBwbGllcyB0aGUgZnVsbCBiYXJyaWVyIHRoYXQgb3JkZXJzIHRoZSB3YWl0CiYjNDM7CSAqIHF1ZXVlIHJlYWQgYWZ0ZXIgdGhlIGJpdCBjbGVhcjsgY2xlYXJfYml0X3VubG9jaygpIGFsb25lIGlzIG9ubHkKJiM0MzsJICogYSByZWxlYXNlIGFuZCB3b3VsZCBsZXQgdGhpcyBjaGVjayByZWFkIGEgc3RhbGUgZW1wdHkgcXVldWUsCiYjNDM7CSAqIGxvc2luZyB0aGUgd2FrZS11cC4KIAkgKi8KLQlpZiAod2FpdHF1ZXVlX2FjdGl2ZSgmYW1wO2NwLSZndDtjcF93YWl0cSkpCiYjNDM7CWlmICh3cV9oYXNfc2xlZXBlcigmYW1wO2NwLSZndDtjcF93YWl0cSkpCiAJCXdha2VfdXBfYWxsKCZhbXA7Y3AtJmd0O2NwX3dhaXRxKTsKIH0KIApAQCAtMjM5LDggJiM0MzsyNDQsOSBAQCBpbnQgcmRzX3NlbmRfeG1pdChzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApCiAJV1JJVEVfT05DRShjcC0mZ3Q7Y3Bfc2VuZF9nZW4sIHNlbmRfZ2VuKTsKIAogCS8qCi0JICogcmRzX2Nvbm5fc2h1dGRvd24oKSBzZXRzIHRoZSBjb25uIHN0YXRlIGFuZCB0aGVuIHRlc3RzIFJEU19JTl9YTUlULAotCSAqIHdlIGRvIHRoZSBvcHBvc2l0ZSB0byBhdm9pZCByYWNlcy4KJiM0MzsJICogcmRzX2Nvbm5fc2h1dGRvd24oKSBzZXRzIHRoZSBjb25uIHN0YXRlIGFuZCB0aGVuIGFjcXVpcmVzCiYjNDM7CSAqIFJEU19JTl9YTUlUOyB3ZSB0YWtlIHRoZSBsb2NrIGZpcnN0IGFuZCB0aGVuIGNoZWNrIHRoZSBzdGF0ZSwKJiM0MzsJICogc28gb25lIG9mIHVzIGlzIGd1YXJhbnRlZWQgdG8gc2VlIHRoZSBvdGhlciYjMzk7cyB1cGRhdGUuCiAJICovCiAJaWYgKCFyZHNfY29ubl9wYXRoX3VwKGNwKSkgewogCQlyZWxlYXNlX2luX3htaXQoY3ApOwpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy90Y3AuYyBiL25ldC9yZHMvdGNwLmMKaW5kZXggYjI2MzYzNGFjNzUwZC4uMWZmOWU4NDZkZmM3YyAxMDA2NDQKLS0tIGEvbmV0L3Jkcy90Y3AuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvcmRzL3RjcC5jCkBAIC0xMTUsNDUgJiM0MzsxMTUsNjYgQEAgdm9pZCByZHNfdGNwX3Jlc3RvcmVfY2FsbGJhY2tzKHN0cnVjdCBzb2NrZXQgKnNvY2ssCiB9CiAKIC8qCi0gKiByZHNfdGNwX3Jlc2V0X2NhbGxiYWNrcygpIHN3aXRjaGVzIHRoZSB0byB0aGUgbmV3IHNvY2sgYW5kCi0gKiByZXR1cm5zIHRoZSBleGlzdGluZyB0Yy0mZ3Q7dF9zb2NrLgomIzQzOyAqIHJkc190Y3BfcmVzZXRfY2FsbGJhY2tzKCkgc3dpdGNoZXMgYSBwYXRoIHRvIGEgbmV3IHNvY2tldCBhbmQKJiM0MzsgKiByZWxlYXNlcyB0aGUgb2xkIG9uZSBpdCBmaW5kcyBpbiB0Yy0mZ3Q7dF9zb2NrLCByZXNvbHZpbmcgYSBkdWVsbGluZwomIzQzOyAqIFNZTi4KICAqCi0gKiBUaGUgb25seSBmdW5jdGlvbnMgdGhhdCBzZXQgdGMtJmd0O3Rfc29jayBhcmUgcmRzX3RjcF9zZXRfY2FsbGJhY2tzCi0gKiBhbmQgcmRzX3RjcF9yZXNldF9jYWxsYmFja3MuICBTZW5kIGFuZCByZWNlaXZlIHRydXN0IHRoYXQKLSAqIGl0IGlzIHNldC4gIFRoZSBhYnNlbmNlIG9mIFJEU19DT05OX1VQIGJpdCBwcm90ZWN0cyB0aG9zZSBwYXRocwotICogZnJvbSBiZWluZyBjYWxsZWQgd2hpbGUgaXQgaXNuJiMzOTt0IHNldC4KJiM0MzsgKiB0Yy0mZ3Q7dF9zb2NrIGlzIHNldCBieSByZHNfdGNwX3NldF9jYWxsYmFja3MoKSBhbmQgY2xlYXJlZCBieQomIzQzOyAqIHJkc190Y3BfcmVzdG9yZV9jYWxsYmFja3MoKSwgZnJvbSByZHNfdGNwX2Nvbm5fcGF0aF9zaHV0ZG93bigpIGFuZAomIzQzOyAqIGZyb20gaGVyZS4gIFNlbmQgYW5kIHJlY2VpdmUgdHJ1c3QgdGhhdCBpdCBpcyBzZXQ6IHRoZSBhYnNlbmNlIG9mCiYjNDM7ICogUkRTX0NPTk5fVVAgcHJvdGVjdHMgdGhvc2UgcGF0aHMgZnJvbSBiZWluZyBjYWxsZWQgd2hpbGUgaXQgaXNuJiMzOTt0LAomIzQzOyAqIGFuZCB0aGUgc3dhcCBkb25lIGhlcmUgcnVucyB1bmRlciBSRFNfSU5fWE1JVCBzbyB0aGF0IGl0IGNhbm5vdAomIzQzOyAqIGludGVybGVhdmUgd2l0aCBhIHNlbmRlciBhbHJlYWR5IGluc2lkZSByZHNfc2VuZF94bWl0KCkuCiAgKi8KIHZvaWQgcmRzX3RjcF9yZXNldF9jYWxsYmFja3Moc3RydWN0IHNvY2tldCAqc29jaywKIAkJCSAgICAgc3RydWN0IHJkc19jb25uX3BhdGggKmNwKQogewogCXN0cnVjdCByZHNfdGNwX2Nvbm5lY3Rpb24gKnRjID0gY3AtJmd0O2NwX3RyYW5zcG9ydF9kYXRhOwotCXN0cnVjdCBzb2NrZXQgKm9zb2NrID0gdGMtJmd0O3Rfc29jazsKLQotCWlmICghb3NvY2spCi0JCWdvdG8gbmV3c29jazsKJiM0MzsJc3RydWN0IHNvY2tldCAqb3NvY2s7CiAKIAkvKiBOZWVkIHRvIHJlc29sdmUgYSBkdWVsbGluZyBTWU4gYmV0d2VlbiBwZWVycy4KIAkgKiBXZSBoYXZlIGFuIG91dHN0YW5kaW5nIFNZTiB0byB0aGlzIHBlZXIsIHdoaWNoIG1heQogCSAqIHBvdGVudGlhbGx5IGhhdmUgdHJhbnNpdGlvbmVkIHRvIHRoZSBSRFNfQ09OTl9VUCBzdGF0ZSwKIAkgKiBzbyB3ZSBtdXN0IHF1aWVzY2UgYW55IHNlbmQgdGhyZWFkcyBiZWZvcmUgcmVzZXR0aW5nCi0JICogY3BfdHJhbnNwb3J0X2RhdGEuIFdlIHF1aWVzY2UgdGhlc2UgdGhyZWFkcyBieSBzZXR0aW5nCi0JICogY3Bfc3RhdGUgdG8gc29tZXRoaW5nIG90aGVyIHRoYW4gUkRTX0NPTk5fVVAsIGFuZCB0aGVuCi0JICogd2FpdGluZyBmb3IgYW55IGV4aXN0aW5nIHRocmVhZHMgaW4gcmRzX3NlbmRfeG1pdCB0bwotCSAqIGNvbXBsZXRlIHJlbGVhc2VfaW5feG1pdCgpLiAoU3Vic2VxdWVudCB0aHJlYWRzIGVudGVyaW5nCi0JICogcmRzX3NlbmRfeG1pdCgpIHdpbGwgYmFpbCBvbiAhcmRzX2Nvbm5fdXAoKS4KJiM0MzsJICogY3BfdHJhbnNwb3J0X2RhdGEuICBTZXR0aW5nIGNwX3N0YXRlIHRvIHNvbWV0aGluZyBvdGhlcgomIzQzOwkgKiB0aGFuIFJEU19DT05OX1VQIHN0b3BzIG5ldyBzZW5kZXJzLCBhbmQgb3duaW5nIFJEU19JTl9YTUlUCiYjNDM7CSAqIGV4Y2x1ZGVzIGFueSB0aHJlYWQgYWxyZWFkeSBpbnNpZGUgcmRzX3NlbmRfeG1pdCgpIGZvciB0aGUKJiM0MzsJICogd2hvbGUgc29ja2V0IHN3YXAgYW5kIHRoZSByZHNfc2VuZF9wYXRoX3Jlc2V0KCkgYmVsb3cuCiAJICoKLQkgKiBIb3dldmVyIGFuIGluY29taW5nIHN5bi1hY2sgYXQgdGhpcyBwb2ludCB3b3VsZCBlbmQgdXAKLQkgKiBtYXJraW5nIHRoZSBjb25uIGFzIFJEU19DT05OX1VQLCBhbmQgd291bGQgYWdhaW4gcGVybWl0Ci0JICogcmRzX3NlbmRfeG1pKCkgdGhyZWFkcyB0aHJvdWdoLCBzbyBpZGVhbGx5IHdlIHdvdWxkCi0JICogc3luY2hyb25pemUgb24gUkRTX0NPTk5fVVAgYWZ0ZXIgbG9ja19zb2NrKCksIGJ1dCBjYW5ub3QKLQkgKiBkbyB0aGF0OiB3YWl0aW5nIG9uICFSRFNfSU5fWE1JVCBhZnRlciBsb2NrX3NvY2soKSBtYXkKLQkgKiBlbmQgdXAgZGVhZGxvY2tpbmcgd2l0aCB0Y3Bfc2VuZG1zZygpLCBhbmQgdGhlIFJEU19JTl9YTUlUCi0JICogd291bGQgbm90IGdldCBzZXQuIEFzIGEgcmVzdWx0LCB3ZSBzZXQgY19zdGF0ZSB0bwotCSAqIFJEU19DT05OX1JFU0VUVFRJTkcsIHRvIGVuc3VyZSB0aGF0IHJkc190Y3Bfc3RhdGVfY2hhbmdlCi0JICogY2Fubm90IG1hcmsgcmRzX2Nvbm5fcGF0aF91cCgpIGluIHRoZSB3aW5kb3cgYmVmb3JlIGxvY2tfc29jaygpCiYjNDM7CSAqIEFuIGluY29taW5nIHN5bi1hY2sgYXQgdGhpcyBwb2ludCB3b3VsZCBlbmQgdXAgbWFya2luZyB0aGUKJiM0MzsJICogY29ubiBhcyBSRFNfQ09OTl9VUCwgYW5kIHdvdWxkIGFnYWluIHBlcm1pdCByZHNfc2VuZF94bWl0KCkKJiM0MzsJICogdGhyZWFkcyB0aHJvdWdoLCBzbyBpZGVhbGx5IHdlIHdvdWxkIHN5bmNocm9uaXplIG9uCiYjNDM7CSAqIFJEU19DT05OX1VQIGFmdGVyIGxvY2tfc29jaygpLCBidXQgY2Fubm90IGRvIHRoYXQ6IGFjcXVpcmluZwomIzQzOwkgKiBSRFNfSU5fWE1JVCBhZnRlciBsb2NrX3NvY2soKSBtYXkgZW5kIHVwIGRlYWRsb2NraW5nIHdpdGgKJiM0MzsJICogdGNwX3NlbmRtc2coKSwgd2hpY2ggdGFrZXMgdGhlIHNvY2tldCBsb2NrIHdoaWxlIGhvbGRpbmcKJiM0MzsJICogUkRTX0lOX1hNSVQuICBBcyBhIHJlc3VsdCwgd2Ugc2V0IGNfc3RhdGUgdG8KJiM0MzsJICogUkRTX0NPTk5fUkVTRVRUSU5HLCB0byBlbnN1cmUgdGhhdCByZHNfdGNwX3N0YXRlX2NoYW5nZQomIzQzOwkgKiBjYW5ub3QgbWFyayByZHNfY29ubl9wYXRoX3VwKCkgaW4gdGhlIHdpbmRvdyBiZWZvcmUKJiM0MzsJICogbG9ja19zb2NrKCkuCiYjNDM7CSAqCiYjNDM7CSAqIE9ubHkgbWFrZSB0aGF0IHRyYW5zaXRpb24gaWYgdGhlIHBhdGggaXMgc3RpbGwgY29ubmVjdGluZwomIzQzOwkgKiAob3IgYWxyZWFkeSByZXNldHRpbmcgZnJvbSBhbiBlYXJsaWVyIGR1ZWwpLCBzbyB0aGF0IGEKJiM0MzsJICogY29uY3VycmVudCBzaHV0ZG93biYjMzk7cyBSRFNfQ09OTl9FUlJPUi9SRFNfQ09OTl9ESVNDT05ORUNUSU5HCiYjNDM7CSAqIGlzIG5vdCBvdmVyd3JpdHRlbjsgYSBwYXRoIGluIGFueSBvdGhlciBzdGF0ZSBpcyBkcm9wcGVkCiYjNDM7CSAqIGFuZCBpdHMgcGVuZGluZyBzaHV0ZG93biB3aW5zLgomIzQzOwkgKi8KJiM0MzsJaWYgKCFyZHNfY29ubl9wYXRoX3RyYW5zaXRpb24oY3AsIFJEU19DT05OX0NPTk5FQ1RJTkcsCiYjNDM7CQkJCSAgICAgIFJEU19DT05OX1JFU0VUVElORykgJmFtcDsmYW1wOwomIzQzOwkgICAgIXJkc19jb25uX3BhdGhfdHJhbnNpdGlvbihjcCwgUkRTX0NPTk5fUkVTRVRUSU5HLAomIzQzOwkJCQkgICAgICBSRFNfQ09OTl9SRVNFVFRJTkcpKQomIzQzOwkJcmRzX2Nvbm5fcGF0aF9kcm9wKGNwLCAwKTsKJiM0MzsJd2FpdF9ldmVudChjcC0mZ3Q7Y3Bfd2FpdHEsCiYjNDM7CQkgICAhdGVzdF9hbmRfc2V0X2JpdF9sb2NrKFJEU19JTl9YTUlULCAmYW1wO2NwLSZndDtjcF9mbGFncykpOwomIzQzOwomIzQzOwkvKiBSZWFkIHRfc29jayBvbmx5IHdoaWxlIG93bmluZyBSRFNfSU5fWE1JVC4gIFRoZSB0ZWFyZG93biBpbgomIzQzOwkgKiByZHNfY29ubl9zaHV0ZG93bigpIHJlbGVhc2VzIHRoZSBvbGQgc29ja2V0IGFuZCBjbGVhcnMKJiM0MzsJICogdF9zb2NrLCBzbyBhIHBvaW50ZXIgc2FtcGxlZCBiZWZvcmUgdGhlIHdhaXQgY2FuIGJlIHN0YWxlCiYjNDM7CSAqIGJ5IHRoZSB0aW1lIHdlIHdha2UgdXAuCiAJICovCi0JYXRvbWljX3NldCgmYW1wO2NwLSZndDtjcF9zdGF0ZSwgUkRTX0NPTk5fUkVTRVRUSU5HKTsKLQl3YWl0X2V2ZW50KGNwLSZndDtjcF93YWl0cSwgIXRlc3RfYml0KFJEU19JTl9YTUlULCAmYW1wO2NwLSZndDtjcF9mbGFncykpOwomIzQzOwlvc29jayA9IHRjLSZndDt0X3NvY2s7CiYjNDM7CWlmICghb3NvY2spCiYjNDM7CQlnb3RvIG5ld3NvY2s7CiYjNDM7CiAJLyogcmVzZXQgcmVjZWl2ZSBzaWRlIHN0YXRlIGZvciByZHNfdGNwX2RhdGFfcmVjdigpIGZvciBvc29jayAgKi8KIAljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmFtcDtjcC0mZ3Q7Y3Bfc2VuZF93KTsKIAljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmFtcDtjcC0mZ3Q7Y3BfcmVjdl93KTsKQEAgLTE3Miw2ICYjNDM7MTkzLDkgQEAgdm9pZCByZHNfdGNwX3Jlc2V0X2NhbGxiYWNrcyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLAogCWxvY2tfc29jayhzb2NrLSZndDtzayk7CiAJcmRzX3RjcF9zZXRfY2FsbGJhY2tzKHNvY2ssIGNwKTsKIAlyZWxlYXNlX3NvY2soc29jay0mZ3Q7c2spOwomIzQzOwomIzQzOwljbGVhcl9iaXRfdW5sb2NrKFJEU19JTl9YTUlULCAmYW1wO2NwLSZndDtjcF9mbGFncyk7CiYjNDM7CXdha2VfdXBfYWxsKCZhbXA7Y3AtJmd0O2NwX3dhaXRxKTsKIH0KIAogLyogQWRkIHRjIHRvIHJkc190Y3BfdGNfbGlzdCBhbmQgc2V0IHRjLSZndDt0X3NvY2suIFNlZSBjb21tZW50cwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMDA6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDc2OAoJCQkJCQkJb3V0cHV0OiAyMDQKCQkJCQkJCXRob3VnaHRzOiA2MjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUkRTIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGxvb2tlZCBvdmVyIHRoaXMgcGF0Y2guIEl0JiMzOTtzIHRvdWNoaW5nIGBuZXQvcmRzL2Nvbm5lY3Rpb24uY2AsIGBuZXQvcmRzL3NlbmQuY2AsIGFuZCBgbmV0L3Jkcy90Y3AuY2AsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBob3cgdGhlIGBjcC0mZ3Q7Y3BfZmxhZ3NgIGJpdCBmbGFncyAobGlrZSBgUkRTX0lOX1hNSVRgLCBgUkRTX1JFQ1ZfUkVGSUxMYCwgZXRjLikgYXJlIG1hbmFnZWQuIFRoZSBrZXkgY2hhbmdlIGlzIHRoZSByZXBsYWNlbWVudCBvZiBiYXNpYyBiaXQgbWFuaXB1bGF0aW9uIHdpdGggYXRvbWljIG9wZXJhdGlvbnMgdXNpbmcgYHRlc3RfYW5kX3NldF9iaXRfbG9ja2AgYW5kIGBjbGVhcl9iaXRfdW5sb2NrYCwgYW5kIHRoZSBzd2FwIG91dCBvZiBgd2FpdHF1ZXVlX2FjdGl2ZWAgd2l0aCBgd3FfaGFzX3NsZWVwZXJgIHRvIG1ha2Ugc3VyZSBtZW1vcnkgYmFycmllcnMgYXJlIHdvcmtpbmcgY29ycmVjdGx5LiBBbHNvLCBpdCB1cGRhdGVzIGByZHNfdGNwX3Jlc2V0X2NhbGxiYWNrc2AgdG8gcHJvcGVybHkgaGFuZGxlIHNvY2tldCBzd2FwcGluZyB3aGVuIGBSRFNfSU5fWE1JVGAgaXMgYWN0aXZlLgoKQmFzaWNhbGx5LCB0aGlzIGlzIGFsbCBhYm91dCBmaXhpbmcgY29uY3VycmVuY3kgcHJvYmxlbXMgaW4gdGhlIFJlbGlhYmxlIERhdGFncmFtIFNvY2tldHMgKFJEUykgc3Vic3lzdGVtLiBUaGluZ3MgbGlrZSByYWNlIGNvbmRpdGlvbnMsIHBvdGVudGlhbCBkZWFkbG9ja3MsIGFuZCBtaXNzZWQgd2FrZS11cHMgYXJlIHRoZSB0YXJnZXRzIGhlcmUuIEkgY2FuIHNlZSBubyBjaGFuZ2VzIHRoYXQgY3JlYXRlIG5ldyBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm8gbmV3IGFsbG9jYXRpb25zLCBubyBjaGFuZ2VzIHRvIGJvdW5kcyBjaGVja3Mgb3IgbGVuZ3RocyB0aGF0IHdvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gU3RhbmRhcmQgdGVzdGluZywgS0FTQU4sIG9yIExPQ0tERVAg4oCTIGVzcGVjaWFsbHkgaWYgc3RhbmRhcmQgbG9ja3Mgd2VyZSBpbnZvbHZlZCAoYWx0aG91Z2gsIHRoZXkgYXJlIGJpdCBsb2NrcyBoZXJlKSwgd291bGQgcGljayB1cCBvbiB0aGVzZSBzb3J0cyBvZiBjb25jdXJyZW5jeSBpc3N1ZXMuCgpTbywgZ2l2ZW4gdGhhdCwgSSYjMzk7bSBwcmV0dHkgY29uZmlkZW50IHRoYXQgdGhpcyBwYXRjaCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UuCgpMZXQmIzM5O3MgcXVpY2tseSByZWNhcCB0aGUga2V5IGNoYW5nZXMgYWdhaW4gdG8gY29uZmlybToKCiogICBgcmRzX2Nvbm5fcGF0aF9yZXNldGAgbm93IGNsZWFycyBzcGVjaWZpYyBiaXRzIGluc3RlYWQgb2Ygd2lwaW5nIGBjcC0mZ3Q7Y3BfZmxhZ3NgIHRvIGF2b2lkIGNsb2JiZXJpbmcgY29uY3VycmVudCBhdG9taWMgcmVhZC1tb2RpZnktd3JpdGUuCiogICBgcmRzX2Nvbm5fc2h1dGRvd25gIHVzZXMgYHRlc3RfYW5kX3NldF9iaXRfbG9ja2AgYW5kIGB0ZXN0X2FuZF9zZXRfYml0YCB0byBxdWllc2NlIHRyYW5zbWl0IGFuZCByZWNlaXZlLXJlZmlsbCBwYXRocyBwcmV2ZW50aW5nIGNvbmN1cnJlbmN5CiogICBgcmVsZWFzZV9pbl94bWl0YCBub3cgdXNlcyBgd3FfaGFzX3NsZWVwZXJgIGluc3RlYWQgb2YgYHdhaXRxdWV1ZV9hY3RpdmVgLCB3aGljaCBwcm92aWRlcyBhIG1lbW9yeSBiYXJyaWVyCiogICBgcmRzX3RjcF9yZXNldF9jYWxsYmFja3NgIHVzZXMgYHRlc3RfYW5kX3NldF9iaXRfbG9ja2AgdG8gYWNxdWlyZSBgUkRTX0lOX1hNSVRgIGJlZm9yZSByZWFkaW5nIGB0Yy0mZ3Q7dF9zb2NrYCBhbmQgc3dhcHBpbmcgc29ja2V0cy4KCkFsbCBvZiB0aGVzZSBhcmUgc3RyaWN0bHkgcmVsYXRlZCB0byBzeW5jaHJvbml6YXRpb24gYW5kIGNvbmN1cnJlbmN5IOKAkyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBpbiB0aGUgcGljdHVyZSBoZXJlLgoKVGhlcmVmb3JlLCBteSBLTVNBTlJlYXNvbmluZyBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBLTVNBTiBpcyB0aGVyZSB0byBjYXRjaCB1c2VzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGlzIHBhdGNoIGZvY3VzZXMgZW50aXJlbHkgb24gdGhlIHN5bmNocm9uaXphdGlvbiBhbmQgY29uY3VycmVuY3kgcHJvYmxlbXMgaW4gdGhlIFJEUyBzdWJzeXN0ZW0sIHN1Y2ggYXMgcmVwbGFjaW5nIG5vbi1hdG9taWMgYml0IGNsZWFycyB3aXRoIGF0b21pYyBvbmVzLCBjb3JyZWN0bHkgcXVpZXNjaW5nIHRyYW5zbWl0L3JlY2VpdmUgcGF0aHMgdXNpbmcgYml0IGxvY2tzLCBhbmQgYWRkaW5nIG1lbW9yeSBiYXJyaWVycyBmb3Igd2FpdCBxdWV1ZXMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcywgbW9kaWZ5IG1lbW9yeSBhbGxvY2F0aW9ucywgb3IgYWx0ZXIgZGF0YSBiZWluZyBjb3BpZWQgdG8gdXNlciBzcGFjZS4gSGVuY2UsIHRoZXJlIGlzIGFic29sdXRlbHkgbm8gcG9zc2liaWxpdHkgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIGFuZCBLQVNBTi9MT0NLREVQIHdpbGwgY2F0Y2ggYW55IG1lbW9yeSBjb3JydXB0aW9uIG9yIGxvY2tpbmcgaXNzdWVzIGluIHRoaXMgY29udGV4dC4gSSB3aWxsIG1hcmsgTmVlZHNLTVNBTiBhcyBmYWxzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMDA6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtLTVNBTiBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gZGV0ZWN0IHVzZXMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYW5kIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXIgc3BhY2UuIFRoaXMgcGF0Y2ggZm9jdXNlcyBlbnRpcmVseSBvbiBmaXhpbmcgY29uY3VycmVuY3kgYW5kIHN5bmNocm9uaXphdGlvbiBpc3N1ZXMgd2l0aGluIHRoZSBSRFMgc3Vic3lzdGVtLiBJdCByZXBsYWNlcyBub24tYXRvbWljIGJpdCBjbGVhcnMgd2l0aCBhdG9taWMgb3BlcmF0aW9ucywgdXNlcyBiaXQgbG9ja3MgKGB0ZXN0X2FuZF9zZXRfYml0X2xvY2tgKSB0byBwcm9wZXJseSBxdWllc2NlIHRyYW5zbWl0IGFuZCByZWNlaXZlIHBhdGhzLCBhbmQgYWRkcyBtZW1vcnkgYmFycmllcnMgKGB3cV9oYXNfc2xlZXBlcmApIHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25zIGFuZCBsb3N0IHdha2UtdXBzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1vZGlmeSBtZW1vcnkgYWxsb2NhdGlvbnMsIG9yIGFsdGVyIGRhdGEgY29waWVkIHRvIHVzZXIgc3BhY2Ugb3Igc2VudCBvdmVyIHRoZSBuZXR3b3JrLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyBleHBvc2VkIGJ5IHRoZXNlIGNoYW5nZXMuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggd291bGQgYmUgY29uY3VycmVuY3kgaXNzdWVzLCByYWNlIGNvbmRpdGlvbnMsIG9yIGRlYWRsb2Nrcywgd2hpY2ggYXJlIGJlc3QgY2F1Z2h0IGJ5IHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgbGlrZSBLQVNBTiwgS0NTQU4sIGFuZCBMT0NLREVQLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtLTVNBTiBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gZGV0ZWN0IHVzZXMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYW5kIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXIgc3BhY2UuIFRoaXMgcGF0Y2ggZm9jdXNlcyBlbnRpcmVseSBvbiBmaXhpbmcgY29uY3VycmVuY3kgYW5kIHN5bmNocm9uaXphdGlvbiBpc3N1ZXMgd2l0aGluIHRoZSBSRFMgc3Vic3lzdGVtLiBJdCByZXBsYWNlcyBub24tYXRvbWljIGJpdCBjbGVhcnMgd2l0aCBhdG9taWMgb3BlcmF0aW9ucywgdXNlcyBiaXQgbG9ja3MgKGB0ZXN0X2FuZF9zZXRfYml0X2xvY2tgKSB0byBwcm9wZXJseSBxdWllc2NlIHRyYW5zbWl0IGFuZCByZWNlaXZlIHBhdGhzLCBhbmQgYWRkcyBtZW1vcnkgYmFycmllcnMgKGB3cV9oYXNfc2xlZXBlcmApIHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25zIGFuZCBsb3N0IHdha2UtdXBzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1vZGlmeSBtZW1vcnkgYWxsb2NhdGlvbnMsIG9yIGFsdGVyIGRhdGEgY29waWVkIHRvIHVzZXIgc3BhY2Ugb3Igc2VudCBvdmVyIHRoZSBuZXR3b3JrLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyBleHBvc2VkIGJ5IHRoZXNlIGNoYW5nZXMuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggd291bGQgYmUgY29uY3VycmVuY3kgaXNzdWVzLCByYWNlIGNvbmRpdGlvbnMsIG9yIGRlYWRsb2Nrcywgd2hpY2ggYXJlIGJlc3QgY2F1Z2h0IGJ5IHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgbGlrZSBLQVNBTiwgS0NTQU4sIGFuZCBMT0NLREVQLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xNlQwMDoyNjozMS45NzYwMzc4MzFaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTIwMzAwODk2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJSRFNcIixcbiAgICBcIlJEU19UQ1BcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyZHNfc2VuZF94bWl0XCIsXG4gICAgXCJyZHNfdGNwX3Jlc2V0X2NhbGxiYWNrc1wiLFxuICAgIFwicmRzX2Nvbm5fc2h1dGRvd25cIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiS01TQU4gaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGRldGVjdCB1c2VzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlLiBUaGlzIHBhdGNoIGZvY3VzZXMgZW50aXJlbHkgb24gZml4aW5nIGNvbmN1cnJlbmN5IGFuZCBzeW5jaHJvbml6YXRpb24gaXNzdWVzIHdpdGhpbiB0aGUgUkRTIHN1YnN5c3RlbS4gSXQgcmVwbGFjZXMgbm9uLWF0b21pYyBiaXQgY2xlYXJzIHdpdGggYXRvbWljIG9wZXJhdGlvbnMsIHVzZXMgYml0IGxvY2tzIChgdGVzdF9hbmRfc2V0X2JpdF9sb2NrYCkgdG8gcHJvcGVybHkgcXVpZXNjZSB0cmFuc21pdCBhbmQgcmVjZWl2ZSBwYXRocywgYW5kIGFkZHMgbWVtb3J5IGJhcnJpZXJzIChgd3FfaGFzX3NsZWVwZXJgKSB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9ucyBhbmQgbG9zdCB3YWtlLXVwcy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBtb2RpZnkgbWVtb3J5IGFsbG9jYXRpb25zLCBvciBhbHRlciBkYXRhIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIHNlbnQgb3ZlciB0aGUgbmV0d29yay4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgZXhwb3NlZCBieSB0aGVzZSBjaGFuZ2VzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIGJlIGNvbmN1cnJlbmN5IGlzc3VlcywgcmFjZSBjb25kaXRpb25zLCBvciBkZWFkbG9ja3MsIHdoaWNoIGFyZSBiZXN0IGNhdWdodCBieSBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIGxpa2UgS0FTQU4sIEtDU0FOLCBhbmQgTE9DS0RFUC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGR1cmluZyBSRFMgY29ubmVjdGlvbiBzaHV0ZG93biBhbmQgcmVzZXQsIHdoZXJlIHRoZSBSRFNfSU5fWE1JVCBhbmQgUkRTX1JFQ1ZfUkVGSUxMIGZsYWdzIGNvdWxkIGJlIGNsb2JiZXJlZCBvciByZS1hY3F1aXJlZCBjb25jdXJyZW50bHkuIEl0IHVzZXMgdGVzdF9hbmRfc2V0X2JpdF9sb2NrIHRvIHByb3Blcmx5IHF1aWVzY2UgdGhlIHRyYW5zbWl0IGFuZCByZWNlaXZlIHBhdGhzLCBhbmQgd3FfaGFzX3NsZWVwZXIgdG8gZW5zdXJlIGEgZnVsbCBtZW1vcnkgYmFycmllciB3aGVuIGNoZWNraW5nIHRoZSB3YWl0IHF1ZXVlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgUkRTIG5ldHdvcmtpbmcgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDAwOjI2OjMxLjk3NjA0MzQ2MVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ2MDM5OTM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYmU4MmFmYjY5Y2RlMWI1ZTQ0M2YwM2U3ZmYyMjdiOTZmYmY1M2YxNVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU3VuIEF1ZyAxNiAwMDoyNjozMSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvcmRzL2Nvbm5lY3Rpb24uYyBiL25ldC9yZHMvY29ubmVjdGlvbi5jXFxuaW5kZXggN2M4YWI4ZTk3M2UxYi4uYTEwYjY2N2MwNmM4NyAxMDA2NDRcXG4tLS0gYS9uZXQvcmRzL2Nvbm5lY3Rpb24uY1xcbisrKyBiL25ldC9yZHMvY29ubmVjdGlvbi5jXFxuQEAgLTEyMCw3ICsxMjAsMTUgQEAgc3RhdGljIHZvaWQgcmRzX2Nvbm5fcGF0aF9yZXNldChzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApXFxuIFxcbiBcXHRyZHNfc3RhdHNfaW5jKHNfY29ubl9yZXNldCk7XFxuIFxcdHJkc19zZW5kX3BhdGhfcmVzZXQoY3ApO1xcbi1cXHRjcC1cXHUwMDNlY3BfZmxhZ3MgPSAwO1xcbitcXG4rXFx0LyogQ2xlYXIgdGhlIGJpdHMgdGhlIHJlc2V0IGlzIHJlc3BvbnNpYmxlIGZvciBpbmRpdmlkdWFsbHk6IGFcXG4rXFx0ICogYmxhbmtldCBjcF9mbGFncyA9IDAgaXMgYSBwbGFpbiBzdG9yZSB0aGF0IGNhbiBjbG9iYmVyIGFcXG4rXFx0ICogY29uY3VycmVudCBhdG9taWMgcmVhZC1tb2RpZnktd3JpdGUgb24gdGhlIHNhbWUgd29yZC5cXG4rXFx0ICogUkRTX0lOX1hNSVQgYW5kIFJEU19SRUNWX1JFRklMTCBhcmUgb3duZWQgYnkgdGhlIGNhbGxlcixcXG4rXFx0ICogd2hpY2ggcmVsZWFzZXMgdGhlbSBvbmNlIHRoZSB0ZWFyZG93biBpcyBjb21wbGV0ZS5cXG4rXFx0ICovXFxuK1xcdGNsZWFyX2JpdChSRFNfTExfU0VORF9GVUxMLCBcXHUwMDI2Y3AtXFx1MDAzZWNwX2ZsYWdzKTtcXG4rXFx0Y2xlYXJfYml0KFJEU19SRUNPTk5FQ1RfUEVORElORywgXFx1MDAyNmNwLVxcdTAwM2VjcF9mbGFncyk7XFxuIFxcbiBcXHQvKiBEbyBub3QgY2xlYXIgbmV4dF9yeF9zZXEgaGVyZSwgZWxzZSB3ZSBjYW5ub3QgZGlzdGluZ3Vpc2hcXG4gXFx0ICogcmV0cmFuc21pdHRlZCBwYWNrZXRzIGZyb20gbmV3IHBhY2tldHMsIGFuZCB3aWxsIGhhbmQgYWxsXFxuQEAgLTQwNiwxNCArNDE0LDMyIEBAIHZvaWQgcmRzX2Nvbm5fc2h1dGRvd24oc3RydWN0IHJkc19jb25uX3BhdGggKmNwKVxcbiBcXHRcXHR9XFxuIFxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2Y3AtXFx1MDAzZWNwX2NtX2xvY2spO1xcbiBcXG4rXFx0XFx0LyogUXVpZXNjZSB0aGUgdHJhbnNtaXQgYW5kIHJlY2VpdmUtcmVmaWxsIHBhdGhzIGJ5XFxuK1xcdFxcdCAqIGFjcXVpcmluZyB0aGVpciBiaXQgbG9ja3MsIG5vdCBtZXJlbHkgd2FpdGluZyBmb3JcXG4rXFx0XFx0ICogdGhlbSB0byBiZSByZWxlYXNlZDogd2l0aCBhIHBsYWluIHdhaXQsIGVpdGhlciBwYXRoXFxuK1xcdFxcdCAqIGNhbiByZS10YWtlIGl0cyBsb2NrIHRoZSBpbnN0YW50IGFmdGVyIHdlIHNhbXBsZSBpdFxcbitcXHRcXHQgKiBjbGVhciBhbmQgdGhlbiBydW4gY29uY3VycmVudGx5IHdpdGggdGhlIHRyYW5zcG9ydFxcbitcXHRcXHQgKiBzaHV0ZG93biBhbmQgdGhlIHBhdGggcmVzZXQgYmVsb3cuICBIb2xkaW5nIGJvdGhcXG4rXFx0XFx0ICogbG9ja3MgYWNyb3NzIHRoZSB0ZWFyZG93biBtYWtlcyB0aGF0IHN0cnVjdHVyYWxseVxcbitcXHRcXHQgKiBpbXBvc3NpYmxlLlxcbitcXHRcXHQgKi9cXG4gXFx0XFx0d2FpdF9ldmVudChjcC1cXHUwMDNlY3Bfd2FpdHEsXFxuLVxcdFxcdFxcdCAgICF0ZXN0X2JpdChSRFNfSU5fWE1JVCwgXFx1MDAyNmNwLVxcdTAwM2VjcF9mbGFncykpO1xcbitcXHRcXHRcXHQgICAhdGVzdF9hbmRfc2V0X2JpdF9sb2NrKFJEU19JTl9YTUlULCBcXHUwMDI2Y3AtXFx1MDAzZWNwX2ZsYWdzKSk7XFxuIFxcdFxcdHdhaXRfZXZlbnQoY3AtXFx1MDAzZWNwX3dhaXRxLFxcbi1cXHRcXHRcXHQgICAhdGVzdF9iaXQoUkRTX1JFQ1ZfUkVGSUxMLCBcXHUwMDI2Y3AtXFx1MDAzZWNwX2ZsYWdzKSk7XFxuK1xcdFxcdFxcdCAgICF0ZXN0X2FuZF9zZXRfYml0KFJEU19SRUNWX1JFRklMTCwgXFx1MDAyNmNwLVxcdTAwM2VjcF9mbGFncykpO1xcbiBcXG4gXFx0XFx0Y29ubi1cXHUwMDNlY190cmFucy1cXHUwMDNlY29ubl9wYXRoX3NodXRkb3duKGNwKTtcXG4gXFx0XFx0cmRzX2Nvbm5fcGF0aF9yZXNldChjcCk7XFxuIFxcbitcXHRcXHQvKiBSZWxlYXNlIHRoZSB0d28gbG9ja3MgYW5kIHdha2UgYW55IHdhaXRlciAoZS5nLlxcbitcXHRcXHQgKiByZHNfdGNwX3Jlc2V0X2NhbGxiYWNrcygpKSB0aGF0IGJsb2NrZWQgb24gdGhlbSB3aGlsZVxcbitcXHRcXHQgKiB3ZSBoZWxkIHRoZW0uICByZHNfY29ubl9wYXRoX3Jlc2V0KCkgbGVhdmVzIGJvdGggYml0c1xcbitcXHRcXHQgKiBhbG9uZTogb3duZXJzaGlwIGVuZHMgaGVyZSwgbm90IGluc2lkZSB0aGUgcmVzZXQuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRjbGVhcl9iaXRfdW5sb2NrKFJEU19JTl9YTUlULCBcXHUwMDI2Y3AtXFx1MDAzZWNwX2ZsYWdzKTtcXG4rXFx0XFx0Y2xlYXJfYml0KFJEU19SRUNWX1JFRklMTCwgXFx1MDAyNmNwLVxcdTAwM2VjcF9mbGFncyk7XFxuK1xcdFxcdHdha2VfdXBfYWxsKFxcdTAwMjZjcC1cXHUwMDNlY3Bfd2FpdHEpO1xcbitcXG4gXFx0XFx0aWYgKCFyZHNfY29ubl9wYXRoX3RyYW5zaXRpb24oY3AsIFJEU19DT05OX0RJU0NPTk5FQ1RJTkcsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgIFJEU19DT05OX0RPV04pIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdCAgICAhcmRzX2Nvbm5fcGF0aF90cmFuc2l0aW9uKGNwLCBSRFNfQ09OTl9FUlJPUixcXG5kaWZmIC0tZ2l0IGEvbmV0L3Jkcy9zZW5kLmMgYi9uZXQvcmRzL3NlbmQuY1xcbmluZGV4IDE1YTFiOTdmMTNlNzYuLmI5MGUwNTg2ZjgxOGMgMTAwNjQ0XFxuLS0tIGEvbmV0L3Jkcy9zZW5kLmNcXG4rKysgYi9uZXQvcmRzL3NlbmQuY1xcbkBAIC0xMTQsOCArMTE0LDEzIEBAIHN0YXRpYyB2b2lkIHJlbGVhc2VfaW5feG1pdChzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApXFxuIFxcdCAqIGhvdCBwYXRoIGFuZCBmaW5kaW5nIHdhaXRlcnMgaXMgdmVyeSByYXJlLiAgV2UgZG9uJ3Qgd2FudCB0byB3YWxrXFxuIFxcdCAqIHRoZSBzeXN0ZW0td2lkZSBoYXNoZWQgd2FpdHF1ZXVlIGJ1Y2tldHMgaW4gdGhlIGZhc3QgcGF0aCBvbmx5IHRvXFxuIFxcdCAqIGFsbW9zdCBuZXZlciBmaW5kIHdhaXRlcnMuXFxuK1xcdCAqXFxuK1xcdCAqIHdxX2hhc19zbGVlcGVyKCkgc3VwcGxpZXMgdGhlIGZ1bGwgYmFycmllciB0aGF0IG9yZGVycyB0aGUgd2FpdFxcbitcXHQgKiBxdWV1ZSByZWFkIGFmdGVyIHRoZSBiaXQgY2xlYXI7IGNsZWFyX2JpdF91bmxvY2soKSBhbG9uZSBpcyBvbmx5XFxuK1xcdCAqIGEgcmVsZWFzZSBhbmQgd291bGQgbGV0IHRoaXMgY2hlY2sgcmVhZCBhIHN0YWxlIGVtcHR5IHF1ZXVlLFxcbitcXHQgKiBsb3NpbmcgdGhlIHdha2UtdXAuXFxuIFxcdCAqL1xcbi1cXHRpZiAod2FpdHF1ZXVlX2FjdGl2ZShcXHUwMDI2Y3AtXFx1MDAzZWNwX3dhaXRxKSlcXG4rXFx0aWYgKHdxX2hhc19zbGVlcGVyKFxcdTAwMjZjcC1cXHUwMDNlY3Bfd2FpdHEpKVxcbiBcXHRcXHR3YWtlX3VwX2FsbChcXHUwMDI2Y3AtXFx1MDAzZWNwX3dhaXRxKTtcXG4gfVxcbiBcXG5AQCAtMjM5LDggKzI0NCw5IEBAIGludCByZHNfc2VuZF94bWl0KHN0cnVjdCByZHNfY29ubl9wYXRoICpjcClcXG4gXFx0V1JJVEVfT05DRShjcC1cXHUwMDNlY3Bfc2VuZF9nZW4sIHNlbmRfZ2VuKTtcXG4gXFxuIFxcdC8qXFxuLVxcdCAqIHJkc19jb25uX3NodXRkb3duKCkgc2V0cyB0aGUgY29ubiBzdGF0ZSBhbmQgdGhlbiB0ZXN0cyBSRFNfSU5fWE1JVCxcXG4tXFx0ICogd2UgZG8gdGhlIG9wcG9zaXRlIHRvIGF2b2lkIHJhY2VzLlxcbitcXHQgKiByZHNfY29ubl9zaHV0ZG93bigpIHNldHMgdGhlIGNvbm4gc3RhdGUgYW5kIHRoZW4gYWNxdWlyZXNcXG4rXFx0ICogUkRTX0lOX1hNSVQ7IHdlIHRha2UgdGhlIGxvY2sgZmlyc3QgYW5kIHRoZW4gY2hlY2sgdGhlIHN0YXRlLFxcbitcXHQgKiBzbyBvbmUgb2YgdXMgaXMgZ3VhcmFudGVlZCB0byBzZWUgdGhlIG90aGVyJ3MgdXBkYXRlLlxcbiBcXHQgKi9cXG4gXFx0aWYgKCFyZHNfY29ubl9wYXRoX3VwKGNwKSkge1xcbiBcXHRcXHRyZWxlYXNlX2luX3htaXQoY3ApO1xcbmRpZmYgLS1naXQgYS9uZXQvcmRzL3RjcC5jIGIvbmV0L3Jkcy90Y3AuY1xcbmluZGV4IGIyNjM2MzRhYzc1MGQuLjFmZjllODQ2ZGZjN2MgMTAwNjQ0XFxuLS0tIGEvbmV0L3Jkcy90Y3AuY1xcbisrKyBiL25ldC9yZHMvdGNwLmNcXG5AQCAtMTE1LDQ1ICsxMTUsNjYgQEAgdm9pZCByZHNfdGNwX3Jlc3RvcmVfY2FsbGJhY2tzKHN0cnVjdCBzb2NrZXQgKnNvY2ssXFxuIH1cXG4gXFxuIC8qXFxuLSAqIHJkc190Y3BfcmVzZXRfY2FsbGJhY2tzKCkgc3dpdGNoZXMgdGhlIHRvIHRoZSBuZXcgc29jayBhbmRcXG4tICogcmV0dXJucyB0aGUgZXhpc3RpbmcgdGMtXFx1MDAzZXRfc29jay5cXG4rICogcmRzX3RjcF9yZXNldF9jYWxsYmFja3MoKSBzd2l0Y2hlcyBhIHBhdGggdG8gYSBuZXcgc29ja2V0IGFuZFxcbisgKiByZWxlYXNlcyB0aGUgb2xkIG9uZSBpdCBmaW5kcyBpbiB0Yy1cXHUwMDNldF9zb2NrLCByZXNvbHZpbmcgYSBkdWVsbGluZ1xcbisgKiBTWU4uXFxuICAqXFxuLSAqIFRoZSBvbmx5IGZ1bmN0aW9ucyB0aGF0IHNldCB0Yy1cXHUwMDNldF9zb2NrIGFyZSByZHNfdGNwX3NldF9jYWxsYmFja3NcXG4tICogYW5kIHJkc190Y3BfcmVzZXRfY2FsbGJhY2tzLiAgU2VuZCBhbmQgcmVjZWl2ZSB0cnVzdCB0aGF0XFxuLSAqIGl0IGlzIHNldC4gIFRoZSBhYnNlbmNlIG9mIFJEU19DT05OX1VQIGJpdCBwcm90ZWN0cyB0aG9zZSBwYXRoc1xcbi0gKiBmcm9tIGJlaW5nIGNhbGxlZCB3aGlsZSBpdCBpc24ndCBzZXQuXFxuKyAqIHRjLVxcdTAwM2V0X3NvY2sgaXMgc2V0IGJ5IHJkc190Y3Bfc2V0X2NhbGxiYWNrcygpIGFuZCBjbGVhcmVkIGJ5XFxuKyAqIHJkc190Y3BfcmVzdG9yZV9jYWxsYmFja3MoKSwgZnJvbSByZHNfdGNwX2Nvbm5fcGF0aF9zaHV0ZG93bigpIGFuZFxcbisgKiBmcm9tIGhlcmUuICBTZW5kIGFuZCByZWNlaXZlIHRydXN0IHRoYXQgaXQgaXMgc2V0OiB0aGUgYWJzZW5jZSBvZlxcbisgKiBSRFNfQ09OTl9VUCBwcm90ZWN0cyB0aG9zZSBwYXRocyBmcm9tIGJlaW5nIGNhbGxlZCB3aGlsZSBpdCBpc24ndCxcXG4rICogYW5kIHRoZSBzd2FwIGRvbmUgaGVyZSBydW5zIHVuZGVyIFJEU19JTl9YTUlUIHNvIHRoYXQgaXQgY2Fubm90XFxuKyAqIGludGVybGVhdmUgd2l0aCBhIHNlbmRlciBhbHJlYWR5IGluc2lkZSByZHNfc2VuZF94bWl0KCkuXFxuICAqL1xcbiB2b2lkIHJkc190Y3BfcmVzZXRfY2FsbGJhY2tzKHN0cnVjdCBzb2NrZXQgKnNvY2ssXFxuIFxcdFxcdFxcdCAgICAgc3RydWN0IHJkc19jb25uX3BhdGggKmNwKVxcbiB7XFxuIFxcdHN0cnVjdCByZHNfdGNwX2Nvbm5lY3Rpb24gKnRjID0gY3AtXFx1MDAzZWNwX3RyYW5zcG9ydF9kYXRhO1xcbi1cXHRzdHJ1Y3Qgc29ja2V0ICpvc29jayA9IHRjLVxcdTAwM2V0X3NvY2s7XFxuLVxcbi1cXHRpZiAoIW9zb2NrKVxcbi1cXHRcXHRnb3RvIG5ld3NvY2s7XFxuK1xcdHN0cnVjdCBzb2NrZXQgKm9zb2NrO1xcbiBcXG4gXFx0LyogTmVlZCB0byByZXNvbHZlIGEgZHVlbGxpbmcgU1lOIGJldHdlZW4gcGVlcnMuXFxuIFxcdCAqIFdlIGhhdmUgYW4gb3V0c3RhbmRpbmcgU1lOIHRvIHRoaXMgcGVlciwgd2hpY2ggbWF5XFxuIFxcdCAqIHBvdGVudGlhbGx5IGhhdmUgdHJhbnNpdGlvbmVkIHRvIHRoZSBSRFNfQ09OTl9VUCBzdGF0ZSxcXG4gXFx0ICogc28gd2UgbXVzdCBxdWllc2NlIGFueSBzZW5kIHRocmVhZHMgYmVmb3JlIHJlc2V0dGluZ1xcbi1cXHQgKiBjcF90cmFuc3BvcnRfZGF0YS4gV2UgcXVpZXNjZSB0aGVzZSB0aHJlYWRzIGJ5IHNldHRpbmdcXG4tXFx0ICogY3Bfc3RhdGUgdG8gc29tZXRoaW5nIG90aGVyIHRoYW4gUkRTX0NPTk5fVVAsIGFuZCB0aGVuXFxuLVxcdCAqIHdhaXRpbmcgZm9yIGFueSBleGlzdGluZyB0aHJlYWRzIGluIHJkc19zZW5kX3htaXQgdG9cXG4tXFx0ICogY29tcGxldGUgcmVsZWFzZV9pbl94bWl0KCkuIChTdWJzZXF1ZW50IHRocmVhZHMgZW50ZXJpbmdcXG4tXFx0ICogcmRzX3NlbmRfeG1pdCgpIHdpbGwgYmFpbCBvbiAhcmRzX2Nvbm5fdXAoKS5cXG4rXFx0ICogY3BfdHJhbnNwb3J0X2RhdGEuICBTZXR0aW5nIGNwX3N0YXRlIHRvIHNvbWV0aGluZyBvdGhlclxcbitcXHQgKiB0aGFuIFJEU19DT05OX1VQIHN0b3BzIG5ldyBzZW5kZXJzLCBhbmQgb3duaW5nIFJEU19JTl9YTUlUXFxuK1xcdCAqIGV4Y2x1ZGVzIGFueSB0aHJlYWQgYWxyZWFkeSBpbnNpZGUgcmRzX3NlbmRfeG1pdCgpIGZvciB0aGVcXG4rXFx0ICogd2hvbGUgc29ja2V0IHN3YXAgYW5kIHRoZSByZHNfc2VuZF9wYXRoX3Jlc2V0KCkgYmVsb3cuXFxuIFxcdCAqXFxuLVxcdCAqIEhvd2V2ZXIgYW4gaW5jb21pbmcgc3luLWFjayBhdCB0aGlzIHBvaW50IHdvdWxkIGVuZCB1cFxcbi1cXHQgKiBtYXJraW5nIHRoZSBjb25uIGFzIFJEU19DT05OX1VQLCBhbmQgd291bGQgYWdhaW4gcGVybWl0XFxuLVxcdCAqIHJkc19zZW5kX3htaSgpIHRocmVhZHMgdGhyb3VnaCwgc28gaWRlYWxseSB3ZSB3b3VsZFxcbi1cXHQgKiBzeW5jaHJvbml6ZSBvbiBSRFNfQ09OTl9VUCBhZnRlciBsb2NrX3NvY2soKSwgYnV0IGNhbm5vdFxcbi1cXHQgKiBkbyB0aGF0OiB3YWl0aW5nIG9uICFSRFNfSU5fWE1JVCBhZnRlciBsb2NrX3NvY2soKSBtYXlcXG4tXFx0ICogZW5kIHVwIGRlYWRsb2NraW5nIHdpdGggdGNwX3NlbmRtc2coKSwgYW5kIHRoZSBSRFNfSU5fWE1JVFxcbi1cXHQgKiB3b3VsZCBub3QgZ2V0IHNldC4gQXMgYSByZXN1bHQsIHdlIHNldCBjX3N0YXRlIHRvXFxuLVxcdCAqIFJEU19DT05OX1JFU0VUVFRJTkcsIHRvIGVuc3VyZSB0aGF0IHJkc190Y3Bfc3RhdGVfY2hhbmdlXFxuLVxcdCAqIGNhbm5vdCBtYXJrIHJkc19jb25uX3BhdGhfdXAoKSBpbiB0aGUgd2luZG93IGJlZm9yZSBsb2NrX3NvY2soKVxcbitcXHQgKiBBbiBpbmNvbWluZyBzeW4tYWNrIGF0IHRoaXMgcG9pbnQgd291bGQgZW5kIHVwIG1hcmtpbmcgdGhlXFxuK1xcdCAqIGNvbm4gYXMgUkRTX0NPTk5fVVAsIGFuZCB3b3VsZCBhZ2FpbiBwZXJtaXQgcmRzX3NlbmRfeG1pdCgpXFxuK1xcdCAqIHRocmVhZHMgdGhyb3VnaCwgc28gaWRlYWxseSB3ZSB3b3VsZCBzeW5jaHJvbml6ZSBvblxcbitcXHQgKiBSRFNfQ09OTl9VUCBhZnRlciBsb2NrX3NvY2soKSwgYnV0IGNhbm5vdCBkbyB0aGF0OiBhY3F1aXJpbmdcXG4rXFx0ICogUkRTX0lOX1hNSVQgYWZ0ZXIgbG9ja19zb2NrKCkgbWF5IGVuZCB1cCBkZWFkbG9ja2luZyB3aXRoXFxuK1xcdCAqIHRjcF9zZW5kbXNnKCksIHdoaWNoIHRha2VzIHRoZSBzb2NrZXQgbG9jayB3aGlsZSBob2xkaW5nXFxuK1xcdCAqIFJEU19JTl9YTUlULiAgQXMgYSByZXN1bHQsIHdlIHNldCBjX3N0YXRlIHRvXFxuK1xcdCAqIFJEU19DT05OX1JFU0VUVElORywgdG8gZW5zdXJlIHRoYXQgcmRzX3RjcF9zdGF0ZV9jaGFuZ2VcXG4rXFx0ICogY2Fubm90IG1hcmsgcmRzX2Nvbm5fcGF0aF91cCgpIGluIHRoZSB3aW5kb3cgYmVmb3JlXFxuK1xcdCAqIGxvY2tfc29jaygpLlxcbitcXHQgKlxcbitcXHQgKiBPbmx5IG1ha2UgdGhhdCB0cmFuc2l0aW9uIGlmIHRoZSBwYXRoIGlzIHN0aWxsIGNvbm5lY3RpbmdcXG4rXFx0ICogKG9yIGFscmVhZHkgcmVzZXR0aW5nIGZyb20gYW4gZWFybGllciBkdWVsKSwgc28gdGhhdCBhXFxuK1xcdCAqIGNvbmN1cnJlbnQgc2h1dGRvd24ncyBSRFNfQ09OTl9FUlJPUi9SRFNfQ09OTl9ESVNDT05ORUNUSU5HXFxuK1xcdCAqIGlzIG5vdCBvdmVyd3JpdHRlbjsgYSBwYXRoIGluIGFueSBvdGhlciBzdGF0ZSBpcyBkcm9wcGVkXFxuK1xcdCAqIGFuZCBpdHMgcGVuZGluZyBzaHV0ZG93biB3aW5zLlxcbitcXHQgKi9cXG4rXFx0aWYgKCFyZHNfY29ubl9wYXRoX3RyYW5zaXRpb24oY3AsIFJEU19DT05OX0NPTk5FQ1RJTkcsXFxuK1xcdFxcdFxcdFxcdCAgICAgIFJEU19DT05OX1JFU0VUVElORykgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICFyZHNfY29ubl9wYXRoX3RyYW5zaXRpb24oY3AsIFJEU19DT05OX1JFU0VUVElORyxcXG4rXFx0XFx0XFx0XFx0ICAgICAgUkRTX0NPTk5fUkVTRVRUSU5HKSlcXG4rXFx0XFx0cmRzX2Nvbm5fcGF0aF9kcm9wKGNwLCAwKTtcXG4rXFx0d2FpdF9ldmVudChjcC1cXHUwMDNlY3Bfd2FpdHEsXFxuK1xcdFxcdCAgICF0ZXN0X2FuZF9zZXRfYml0X2xvY2soUkRTX0lOX1hNSVQsIFxcdTAwMjZjcC1cXHUwMDNlY3BfZmxhZ3MpKTtcXG4rXFxuK1xcdC8qIFJlYWQgdF9zb2NrIG9ubHkgd2hpbGUgb3duaW5nIFJEU19JTl9YTUlULiAgVGhlIHRlYXJkb3duIGluXFxuK1xcdCAqIHJkc19jb25uX3NodXRkb3duKCkgcmVsZWFzZXMgdGhlIG9sZCBzb2NrZXQgYW5kIGNsZWFyc1xcbitcXHQgKiB0X3NvY2ssIHNvIGEgcG9pbnRlciBzYW1wbGVkIGJlZm9yZSB0aGUgd2FpdCBjYW4gYmUgc3RhbGVcXG4rXFx0ICogYnkgdGhlIHRpbWUgd2Ugd2FrZSB1cC5cXG4gXFx0ICovXFxuLVxcdGF0b21pY19zZXQoXFx1MDAyNmNwLVxcdTAwM2VjcF9zdGF0ZSwgUkRTX0NPTk5fUkVTRVRUSU5HKTtcXG4tXFx0d2FpdF9ldmVudChjcC1cXHUwMDNlY3Bfd2FpdHEsICF0ZXN0X2JpdChSRFNfSU5fWE1JVCwgXFx1MDAyNmNwLVxcdTAwM2VjcF9mbGFncykpO1xcbitcXHRvc29jayA9IHRjLVxcdTAwM2V0X3NvY2s7XFxuK1xcdGlmICghb3NvY2spXFxuK1xcdFxcdGdvdG8gbmV3c29jaztcXG4rXFxuIFxcdC8qIHJlc2V0IHJlY2VpdmUgc2lkZSBzdGF0ZSBmb3IgcmRzX3RjcF9kYXRhX3JlY3YoKSBmb3Igb3NvY2sgICovXFxuIFxcdGNhbmNlbF9kZWxheWVkX3dvcmtfc3luYyhcXHUwMDI2Y3AtXFx1MDAzZWNwX3NlbmRfdyk7XFxuIFxcdGNhbmNlbF9kZWxheWVkX3dvcmtfc3luYyhcXHUwMDI2Y3AtXFx1MDAzZWNwX3JlY3Zfdyk7XFxuQEAgLTE3Miw2ICsxOTMsOSBAQCB2b2lkIHJkc190Y3BfcmVzZXRfY2FsbGJhY2tzKHN0cnVjdCBzb2NrZXQgKnNvY2ssXFxuIFxcdGxvY2tfc29jayhzb2NrLVxcdTAwM2Vzayk7XFxuIFxcdHJkc190Y3Bfc2V0X2NhbGxiYWNrcyhzb2NrLCBjcCk7XFxuIFxcdHJlbGVhc2Vfc29jayhzb2NrLVxcdTAwM2Vzayk7XFxuK1xcbitcXHRjbGVhcl9iaXRfdW5sb2NrKFJEU19JTl9YTUlULCBcXHUwMDI2Y3AtXFx1MDAzZWNwX2ZsYWdzKTtcXG4rXFx0d2FrZV91cF9hbGwoXFx1MDAyNmNwLVxcdTAwM2VjcF93YWl0cSk7XFxuIH1cXG4gXFxuIC8qIEFkZCB0YyB0byByZHNfdGNwX3RjX2xpc3QgYW5kIHNldCB0Yy1cXHUwMDNldF9zb2NrLiBTZWUgY29tbWVudHNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDA6MjY6MzIuNDIyNzY2MDA1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MzU5NzU0MDgxODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUkRTXCIsXG4gICAgXCJSRFNfVENQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicmRzX3NlbmRfeG1pdFwiLFxuICAgIFwicmRzX3RjcF9yZXNldF9jYWxsYmFja3NcIixcbiAgICBcInJkc19jb25uX3NodXRkb3duXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBkdXJpbmcgUkRTIGNvbm5lY3Rpb24gc2h1dGRvd24gYW5kIHJlc2V0LCB3aGVyZSB0aGUgUkRTX0lOX1hNSVQgYW5kIFJEU19SRUNWX1JFRklMTCBmbGFncyBjb3VsZCBiZSBjbG9iYmVyZWQgb3IgcmUtYWNxdWlyZWQgY29uY3VycmVudGx5LiBJdCB1c2VzIHRlc3RfYW5kX3NldF9iaXRfbG9jayB0byBwcm9wZXJseSBxdWllc2NlIHRoZSB0cmFuc21pdCBhbmQgcmVjZWl2ZSBwYXRocywgYW5kIHdxX2hhc19zbGVlcGVyIHRvIGVuc3VyZSBhIGZ1bGwgbWVtb3J5IGJhcnJpZXIgd2hlbiBjaGVja2luZyB0aGUgd2FpdCBxdWV1ZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIFJEUyBuZXR3b3JraW5nIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiZTgyYWZiNjljZGUxYjVlNDQzZjAzZTdmZjIyN2I5NmZiZjUzZjE1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBBdWcgMTYgMDA6MjY6MzEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvcmRzL2Nvbm5lY3Rpb24uYyBiL25ldC9yZHMvY29ubmVjdGlvbi5jXG5pbmRleCA3YzhhYjhlOTczZTFiLi5hMTBiNjY3YzA2Yzg3IDEwMDY0NFxuLS0tIGEvbmV0L3Jkcy9jb25uZWN0aW9uLmNcbisrKyBiL25ldC9yZHMvY29ubmVjdGlvbi5jXG5AQCAtMTIwLDcgKzEyMCwxNSBAQCBzdGF0aWMgdm9pZCByZHNfY29ubl9wYXRoX3Jlc2V0KHN0cnVjdCByZHNfY29ubl9wYXRoICpjcClcbiBcbiBcdHJkc19zdGF0c19pbmMoc19jb25uX3Jlc2V0KTtcbiBcdHJkc19zZW5kX3BhdGhfcmVzZXQoY3ApO1xuLVx0Y3AtXHUwMDNlY3BfZmxhZ3MgPSAwO1xuK1xuK1x0LyogQ2xlYXIgdGhlIGJpdHMgdGhlIHJlc2V0IGlzIHJlc3BvbnNpYmxlIGZvciBpbmRpdmlkdWFsbHk6IGFcbitcdCAqIGJsYW5rZXQgY3BfZmxhZ3MgPSAwIGlzIGEgcGxhaW4gc3RvcmUgdGhhdCBjYW4gY2xvYmJlciBhXG4rXHQgKiBjb25jdXJyZW50IGF0b21pYyByZWFkLW1vZGlmeS13cml0ZSBvbiB0aGUgc2FtZSB3b3JkLlxuK1x0ICogUkRTX0lOX1hNSVQgYW5kIFJEU19SRUNWX1JFRklMTCBhcmUgb3duZWQgYnkgdGhlIGNhbGxlcixcbitcdCAqIHdoaWNoIHJlbGVhc2VzIHRoZW0gb25jZSB0aGUgdGVhcmRvd24gaXMgY29tcGxldGUuXG4rXHQgKi9cbitcdGNsZWFyX2JpdChSRFNfTExfU0VORF9GVUxMLCBcdTAwMjZjcC1cdTAwM2VjcF9mbGFncyk7XG4rXHRjbGVhcl9iaXQoUkRTX1JFQ09OTkVDVF9QRU5ESU5HLCBcdTAwMjZjcC1cdTAwM2VjcF9mbGFncyk7XG4gXG4gXHQvKiBEbyBub3QgY2xlYXIgbmV4dF9yeF9zZXEgaGVyZSwgZWxzZSB3ZSBjYW5ub3QgZGlzdGluZ3Vpc2hcbiBcdCAqIHJldHJhbnNtaXR0ZWQgcGFja2V0cyBmcm9tIG5ldyBwYWNrZXRzLCBhbmQgd2lsbCBoYW5kIGFsbFxuQEAgLTQwNiwxNCArNDE0LDMyIEBAIHZvaWQgcmRzX2Nvbm5fc2h1dGRvd24oc3RydWN0IHJkc19jb25uX3BhdGggKmNwKVxuIFx0XHR9XG4gXHRcdG11dGV4X3VubG9jayhcdTAwMjZjcC1cdTAwM2VjcF9jbV9sb2NrKTtcbiBcbitcdFx0LyogUXVpZXNjZSB0aGUgdHJhbnNtaXQgYW5kIHJlY2VpdmUtcmVmaWxsIHBhdGhzIGJ5XG4rXHRcdCAqIGFjcXVpcmluZyB0aGVpciBiaXQgbG9ja3MsIG5vdCBtZXJlbHkgd2FpdGluZyBmb3JcbitcdFx0ICogdGhlbSB0byBiZSByZWxlYXNlZDogd2l0aCBhIHBsYWluIHdhaXQsIGVpdGhlciBwYXRoXG4rXHRcdCAqIGNhbiByZS10YWtlIGl0cyBsb2NrIHRoZSBpbnN0YW50IGFmdGVyIHdlIHNhbXBsZSBpdFxuK1x0XHQgKiBjbGVhciBhbmQgdGhlbiBydW4gY29uY3VycmVudGx5IHdpdGggdGhlIHRyYW5zcG9ydFxuK1x0XHQgKiBzaHV0ZG93biBhbmQgdGhlIHBhdGggcmVzZXQgYmVsb3cuICBIb2xkaW5nIGJvdGhcbitcdFx0ICogbG9ja3MgYWNyb3NzIHRoZSB0ZWFyZG93biBtYWtlcyB0aGF0IHN0cnVjdHVyYWxseVxuK1x0XHQgKiBpbXBvc3NpYmxlLlxuK1x0XHQgKi9cbiBcdFx0d2FpdF9ldmVudChjcC1cdTAwM2VjcF93YWl0cSxcbi1cdFx0XHQgICAhdGVzdF9iaXQoUkRTX0lOX1hNSVQsIFx1MDAyNmNwLVx1MDAzZWNwX2ZsYWdzKSk7XG4rXHRcdFx0ICAgIXRlc3RfYW5kX3NldF9iaXRfbG9jayhSRFNfSU5fWE1JVCwgXHUwMDI2Y3AtXHUwMDNlY3BfZmxhZ3MpKTtcbiBcdFx0d2FpdF9ldmVudChjcC1cdTAwM2VjcF93YWl0cSxcbi1cdFx0XHQgICAhdGVzdF9iaXQoUkRTX1JFQ1ZfUkVGSUxMLCBcdTAwMjZjcC1cdTAwM2VjcF9mbGFncykpO1xuK1x0XHRcdCAgICF0ZXN0X2FuZF9zZXRfYml0KFJEU19SRUNWX1JFRklMTCwgXHUwMDI2Y3AtXHUwMDNlY3BfZmxhZ3MpKTtcbiBcbiBcdFx0Y29ubi1cdTAwM2VjX3RyYW5zLVx1MDAzZWNvbm5fcGF0aF9zaHV0ZG93bihjcCk7XG4gXHRcdHJkc19jb25uX3BhdGhfcmVzZXQoY3ApO1xuIFxuK1x0XHQvKiBSZWxlYXNlIHRoZSB0d28gbG9ja3MgYW5kIHdha2UgYW55IHdhaXRlciAoZS5nLlxuK1x0XHQgKiByZHNfdGNwX3Jlc2V0X2NhbGxiYWNrcygpKSB0aGF0IGJsb2NrZWQgb24gdGhlbSB3aGlsZVxuK1x0XHQgKiB3ZSBoZWxkIHRoZW0uICByZHNfY29ubl9wYXRoX3Jlc2V0KCkgbGVhdmVzIGJvdGggYml0c1xuK1x0XHQgKiBhbG9uZTogb3duZXJzaGlwIGVuZHMgaGVyZSwgbm90IGluc2lkZSB0aGUgcmVzZXQuXG4rXHRcdCAqL1xuK1x0XHRjbGVhcl9iaXRfdW5sb2NrKFJEU19JTl9YTUlULCBcdTAwMjZjcC1cdTAwM2VjcF9mbGFncyk7XG4rXHRcdGNsZWFyX2JpdChSRFNfUkVDVl9SRUZJTEwsIFx1MDAyNmNwLVx1MDAzZWNwX2ZsYWdzKTtcbitcdFx0d2FrZV91cF9hbGwoXHUwMDI2Y3AtXHUwMDNlY3Bfd2FpdHEpO1xuK1xuIFx0XHRpZiAoIXJkc19jb25uX3BhdGhfdHJhbnNpdGlvbihjcCwgUkRTX0NPTk5fRElTQ09OTkVDVElORyxcbiBcdFx0XHRcdFx0ICAgICAgUkRTX0NPTk5fRE9XTikgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICAhcmRzX2Nvbm5fcGF0aF90cmFuc2l0aW9uKGNwLCBSRFNfQ09OTl9FUlJPUixcbmRpZmYgLS1naXQgYS9uZXQvcmRzL3NlbmQuYyBiL25ldC9yZHMvc2VuZC5jXG5pbmRleCAxNWExYjk3ZjEzZTc2Li5iOTBlMDU4NmY4MThjIDEwMDY0NFxuLS0tIGEvbmV0L3Jkcy9zZW5kLmNcbisrKyBiL25ldC9yZHMvc2VuZC5jXG5AQCAtMTE0LDggKzExNCwxMyBAQCBzdGF0aWMgdm9pZCByZWxlYXNlX2luX3htaXQoc3RydWN0IHJkc19jb25uX3BhdGggKmNwKVxuIFx0ICogaG90IHBhdGggYW5kIGZpbmRpbmcgd2FpdGVycyBpcyB2ZXJ5IHJhcmUuICBXZSBkb24ndCB3YW50IHRvIHdhbGtcbiBcdCAqIHRoZSBzeXN0ZW0td2lkZSBoYXNoZWQgd2FpdHF1ZXVlIGJ1Y2tldHMgaW4gdGhlIGZhc3QgcGF0aCBvbmx5IHRvXG4gXHQgKiBhbG1vc3QgbmV2ZXIgZmluZCB3YWl0ZXJzLlxuK1x0ICpcbitcdCAqIHdxX2hhc19zbGVlcGVyKCkgc3VwcGxpZXMgdGhlIGZ1bGwgYmFycmllciB0aGF0IG9yZGVycyB0aGUgd2FpdFxuK1x0ICogcXVldWUgcmVhZCBhZnRlciB0aGUgYml0IGNsZWFyOyBjbGVhcl9iaXRfdW5sb2NrKCkgYWxvbmUgaXMgb25seVxuK1x0ICogYSByZWxlYXNlIGFuZCB3b3VsZCBsZXQgdGhpcyBjaGVjayByZWFkIGEgc3RhbGUgZW1wdHkgcXVldWUsXG4rXHQgKiBsb3NpbmcgdGhlIHdha2UtdXAuXG4gXHQgKi9cbi1cdGlmICh3YWl0cXVldWVfYWN0aXZlKFx1MDAyNmNwLVx1MDAzZWNwX3dhaXRxKSlcbitcdGlmICh3cV9oYXNfc2xlZXBlcihcdTAwMjZjcC1cdTAwM2VjcF93YWl0cSkpXG4gXHRcdHdha2VfdXBfYWxsKFx1MDAyNmNwLVx1MDAzZWNwX3dhaXRxKTtcbiB9XG4gXG5AQCAtMjM5LDggKzI0NCw5IEBAIGludCByZHNfc2VuZF94bWl0KHN0cnVjdCByZHNfY29ubl9wYXRoICpjcClcbiBcdFdSSVRFX09OQ0UoY3AtXHUwMDNlY3Bfc2VuZF9nZW4sIHNlbmRfZ2VuKTtcbiBcbiBcdC8qXG4tXHQgKiByZHNfY29ubl9zaHV0ZG93bigpIHNldHMgdGhlIGNvbm4gc3RhdGUgYW5kIHRoZW4gdGVzdHMgUkRTX0lOX1hNSVQsXG4tXHQgKiB3ZSBkbyB0aGUgb3Bwb3NpdGUgdG8gYXZvaWQgcmFjZXMuXG4rXHQgKiByZHNfY29ubl9zaHV0ZG93bigpIHNldHMgdGhlIGNvbm4gc3RhdGUgYW5kIHRoZW4gYWNxdWlyZXNcbitcdCAqIFJEU19JTl9YTUlUOyB3ZSB0YWtlIHRoZSBsb2NrIGZpcnN0IGFuZCB0aGVuIGNoZWNrIHRoZSBzdGF0ZSxcbitcdCAqIHNvIG9uZSBvZiB1cyBpcyBndWFyYW50ZWVkIHRvIHNlZSB0aGUgb3RoZXIncyB1cGRhdGUuXG4gXHQgKi9cbiBcdGlmICghcmRzX2Nvbm5fcGF0aF91cChjcCkpIHtcbiBcdFx0cmVsZWFzZV9pbl94bWl0KGNwKTtcbmRpZmYgLS1naXQgYS9uZXQvcmRzL3RjcC5jIGIvbmV0L3Jkcy90Y3AuY1xuaW5kZXggYjI2MzYzNGFjNzUwZC4uMWZmOWU4NDZkZmM3YyAxMDA2NDRcbi0tLSBhL25ldC9yZHMvdGNwLmNcbisrKyBiL25ldC9yZHMvdGNwLmNcbkBAIC0xMTUsNDUgKzExNSw2NiBAQCB2b2lkIHJkc190Y3BfcmVzdG9yZV9jYWxsYmFja3Moc3RydWN0IHNvY2tldCAqc29jayxcbiB9XG4gXG4gLypcbi0gKiByZHNfdGNwX3Jlc2V0X2NhbGxiYWNrcygpIHN3aXRjaGVzIHRoZSB0byB0aGUgbmV3IHNvY2sgYW5kXG4tICogcmV0dXJucyB0aGUgZXhpc3RpbmcgdGMtXHUwMDNldF9zb2NrLlxuKyAqIHJkc190Y3BfcmVzZXRfY2FsbGJhY2tzKCkgc3dpdGNoZXMgYSBwYXRoIHRvIGEgbmV3IHNvY2tldCBhbmRcbisgKiByZWxlYXNlcyB0aGUgb2xkIG9uZSBpdCBmaW5kcyBpbiB0Yy1cdTAwM2V0X3NvY2ssIHJlc29sdmluZyBhIGR1ZWxsaW5nXG4rICogU1lOLlxuICAqXG4tICogVGhlIG9ubHkgZnVuY3Rpb25zIHRoYXQgc2V0IHRjLVx1MDAzZXRfc29jayBhcmUgcmRzX3RjcF9zZXRfY2FsbGJhY2tzXG4tICogYW5kIHJkc190Y3BfcmVzZXRfY2FsbGJhY2tzLiAgU2VuZCBhbmQgcmVjZWl2ZSB0cnVzdCB0aGF0XG4tICogaXQgaXMgc2V0LiAgVGhlIGFic2VuY2Ugb2YgUkRTX0NPTk5fVVAgYml0IHByb3RlY3RzIHRob3NlIHBhdGhzXG4tICogZnJvbSBiZWluZyBjYWxsZWQgd2hpbGUgaXQgaXNuJ3Qgc2V0LlxuKyAqIHRjLVx1MDAzZXRfc29jayBpcyBzZXQgYnkgcmRzX3RjcF9zZXRfY2FsbGJhY2tzKCkgYW5kIGNsZWFyZWQgYnlcbisgKiByZHNfdGNwX3Jlc3RvcmVfY2FsbGJhY2tzKCksIGZyb20gcmRzX3RjcF9jb25uX3BhdGhfc2h1dGRvd24oKSBhbmRcbisgKiBmcm9tIGhlcmUuICBTZW5kIGFuZCByZWNlaXZlIHRydXN0IHRoYXQgaXQgaXMgc2V0OiB0aGUgYWJzZW5jZSBvZlxuKyAqIFJEU19DT05OX1VQIHByb3RlY3RzIHRob3NlIHBhdGhzIGZyb20gYmVpbmcgY2FsbGVkIHdoaWxlIGl0IGlzbid0LFxuKyAqIGFuZCB0aGUgc3dhcCBkb25lIGhlcmUgcnVucyB1bmRlciBSRFNfSU5fWE1JVCBzbyB0aGF0IGl0IGNhbm5vdFxuKyAqIGludGVybGVhdmUgd2l0aCBhIHNlbmRlciBhbHJlYWR5IGluc2lkZSByZHNfc2VuZF94bWl0KCkuXG4gICovXG4gdm9pZCByZHNfdGNwX3Jlc2V0X2NhbGxiYWNrcyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxuIFx0XHRcdCAgICAgc3RydWN0IHJkc19jb25uX3BhdGggKmNwKVxuIHtcbiBcdHN0cnVjdCByZHNfdGNwX2Nvbm5lY3Rpb24gKnRjID0gY3AtXHUwMDNlY3BfdHJhbnNwb3J0X2RhdGE7XG4tXHRzdHJ1Y3Qgc29ja2V0ICpvc29jayA9IHRjLVx1MDAzZXRfc29jaztcbi1cbi1cdGlmICghb3NvY2spXG4tXHRcdGdvdG8gbmV3c29jaztcbitcdHN0cnVjdCBzb2NrZXQgKm9zb2NrO1xuIFxuIFx0LyogTmVlZCB0byByZXNvbHZlIGEgZHVlbGxpbmcgU1lOIGJldHdlZW4gcGVlcnMuXG4gXHQgKiBXZSBoYXZlIGFuIG91dHN0YW5kaW5nIFNZTiB0byB0aGlzIHBlZXIsIHdoaWNoIG1heVxuIFx0ICogcG90ZW50aWFsbHkgaGF2ZSB0cmFuc2l0aW9uZWQgdG8gdGhlIFJEU19DT05OX1VQIHN0YXRlLFxuIFx0ICogc28gd2UgbXVzdCBxdWllc2NlIGFueSBzZW5kIHRocmVhZHMgYmVmb3JlIHJlc2V0dGluZ1xuLVx0ICogY3BfdHJhbnNwb3J0X2RhdGEuIFdlIHF1aWVzY2UgdGhlc2UgdGhyZWFkcyBieSBzZXR0aW5nXG4tXHQgKiBjcF9zdGF0ZSB0byBzb21ldGhpbmcgb3RoZXIgdGhhbiBSRFNfQ09OTl9VUCwgYW5kIHRoZW5cbi1cdCAqIHdhaXRpbmcgZm9yIGFueSBleGlzdGluZyB0aHJlYWRzIGluIHJkc19zZW5kX3htaXQgdG9cbi1cdCAqIGNvbXBsZXRlIHJlbGVhc2VfaW5feG1pdCgpLiAoU3Vic2VxdWVudCB0aHJlYWRzIGVudGVyaW5nXG4tXHQgKiByZHNfc2VuZF94bWl0KCkgd2lsbCBiYWlsIG9uICFyZHNfY29ubl91cCgpLlxuK1x0ICogY3BfdHJhbnNwb3J0X2RhdGEuICBTZXR0aW5nIGNwX3N0YXRlIHRvIHNvbWV0aGluZyBvdGhlclxuK1x0ICogdGhhbiBSRFNfQ09OTl9VUCBzdG9wcyBuZXcgc2VuZGVycywgYW5kIG93bmluZyBSRFNfSU5fWE1JVFxuK1x0ICogZXhjbHVkZXMgYW55IHRocmVhZCBhbHJlYWR5IGluc2lkZSByZHNfc2VuZF94bWl0KCkgZm9yIHRoZVxuK1x0ICogd2hvbGUgc29ja2V0IHN3YXAgYW5kIHRoZSByZHNfc2VuZF9wYXRoX3Jlc2V0KCkgYmVsb3cuXG4gXHQgKlxuLVx0ICogSG93ZXZlciBhbiBpbmNvbWluZyBzeW4tYWNrIGF0IHRoaXMgcG9pbnQgd291bGQgZW5kIHVwXG4tXHQgKiBtYXJraW5nIHRoZSBjb25uIGFzIFJEU19DT05OX1VQLCBhbmQgd291bGQgYWdhaW4gcGVybWl0XG4tXHQgKiByZHNfc2VuZF94bWkoKSB0aHJlYWRzIHRocm91Z2gsIHNvIGlkZWFsbHkgd2Ugd291bGRcbi1cdCAqIHN5bmNocm9uaXplIG9uIFJEU19DT05OX1VQIGFmdGVyIGxvY2tfc29jaygpLCBidXQgY2Fubm90XG4tXHQgKiBkbyB0aGF0OiB3YWl0aW5nIG9uICFSRFNfSU5fWE1JVCBhZnRlciBsb2NrX3NvY2soKSBtYXlcbi1cdCAqIGVuZCB1cCBkZWFkbG9ja2luZyB3aXRoIHRjcF9zZW5kbXNnKCksIGFuZCB0aGUgUkRTX0lOX1hNSVRcbi1cdCAqIHdvdWxkIG5vdCBnZXQgc2V0LiBBcyBhIHJlc3VsdCwgd2Ugc2V0IGNfc3RhdGUgdG9cbi1cdCAqIFJEU19DT05OX1JFU0VUVFRJTkcsIHRvIGVuc3VyZSB0aGF0IHJkc190Y3Bfc3RhdGVfY2hhbmdlXG4tXHQgKiBjYW5ub3QgbWFyayByZHNfY29ubl9wYXRoX3VwKCkgaW4gdGhlIHdpbmRvdyBiZWZvcmUgbG9ja19zb2NrKClcbitcdCAqIEFuIGluY29taW5nIHN5bi1hY2sgYXQgdGhpcyBwb2ludCB3b3VsZCBlbmQgdXAgbWFya2luZyB0aGVcbitcdCAqIGNvbm4gYXMgUkRTX0NPTk5fVVAsIGFuZCB3b3VsZCBhZ2FpbiBwZXJtaXQgcmRzX3NlbmRfeG1pdCgpXG4rXHQgKiB0aHJlYWRzIHRocm91Z2gsIHNvIGlkZWFsbHkgd2Ugd291bGQgc3luY2hyb25pemUgb25cbitcdCAqIFJEU19DT05OX1VQIGFmdGVyIGxvY2tfc29jaygpLCBidXQgY2Fubm90IGRvIHRoYXQ6IGFjcXVpcmluZ1xuK1x0ICogUkRTX0lOX1hNSVQgYWZ0ZXIgbG9ja19zb2NrKCkgbWF5IGVuZCB1cCBkZWFkbG9ja2luZyB3aXRoXG4rXHQgKiB0Y3Bfc2VuZG1zZygpLCB3aGljaCB0YWtlcyB0aGUgc29ja2V0IGxvY2sgd2hpbGUgaG9sZGluZ1xuK1x0ICogUkRTX0lOX1hNSVQuICBBcyBhIHJlc3VsdCwgd2Ugc2V0IGNfc3RhdGUgdG9cbitcdCAqIFJEU19DT05OX1JFU0VUVElORywgdG8gZW5zdXJlIHRoYXQgcmRzX3RjcF9zdGF0ZV9jaGFuZ2VcbitcdCAqIGNhbm5vdCBtYXJrIHJkc19jb25uX3BhdGhfdXAoKSBpbiB0aGUgd2luZG93IGJlZm9yZVxuK1x0ICogbG9ja19zb2NrKCkuXG4rXHQgKlxuK1x0ICogT25seSBtYWtlIHRoYXQgdHJhbnNpdGlvbiBpZiB0aGUgcGF0aCBpcyBzdGlsbCBjb25uZWN0aW5nXG4rXHQgKiAob3IgYWxyZWFkeSByZXNldHRpbmcgZnJvbSBhbiBlYXJsaWVyIGR1ZWwpLCBzbyB0aGF0IGFcbitcdCAqIGNvbmN1cnJlbnQgc2h1dGRvd24ncyBSRFNfQ09OTl9FUlJPUi9SRFNfQ09OTl9ESVNDT05ORUNUSU5HXG4rXHQgKiBpcyBub3Qgb3ZlcndyaXR0ZW47IGEgcGF0aCBpbiBhbnkgb3RoZXIgc3RhdGUgaXMgZHJvcHBlZFxuK1x0ICogYW5kIGl0cyBwZW5kaW5nIHNodXRkb3duIHdpbnMuXG4rXHQgKi9cbitcdGlmICghcmRzX2Nvbm5fcGF0aF90cmFuc2l0aW9uKGNwLCBSRFNfQ09OTl9DT05ORUNUSU5HLFxuK1x0XHRcdFx0ICAgICAgUkRTX0NPTk5fUkVTRVRUSU5HKSBcdTAwMjZcdTAwMjZcbitcdCAgICAhcmRzX2Nvbm5fcGF0aF90cmFuc2l0aW9uKGNwLCBSRFNfQ09OTl9SRVNFVFRJTkcsXG4rXHRcdFx0XHQgICAgICBSRFNfQ09OTl9SRVNFVFRJTkcpKVxuK1x0XHRyZHNfY29ubl9wYXRoX2Ryb3AoY3AsIDApO1xuK1x0d2FpdF9ldmVudChjcC1cdTAwM2VjcF93YWl0cSxcbitcdFx0ICAgIXRlc3RfYW5kX3NldF9iaXRfbG9jayhSRFNfSU5fWE1JVCwgXHUwMDI2Y3AtXHUwMDNlY3BfZmxhZ3MpKTtcbitcbitcdC8qIFJlYWQgdF9zb2NrIG9ubHkgd2hpbGUgb3duaW5nIFJEU19JTl9YTUlULiAgVGhlIHRlYXJkb3duIGluXG4rXHQgKiByZHNfY29ubl9zaHV0ZG93bigpIHJlbGVhc2VzIHRoZSBvbGQgc29ja2V0IGFuZCBjbGVhcnNcbitcdCAqIHRfc29jaywgc28gYSBwb2ludGVyIHNhbXBsZWQgYmVmb3JlIHRoZSB3YWl0IGNhbiBiZSBzdGFsZVxuK1x0ICogYnkgdGhlIHRpbWUgd2Ugd2FrZSB1cC5cbiBcdCAqL1xuLVx0YXRvbWljX3NldChcdTAwMjZjcC1cdTAwM2VjcF9zdGF0ZSwgUkRTX0NPTk5fUkVTRVRUSU5HKTtcbi1cdHdhaXRfZXZlbnQoY3AtXHUwMDNlY3Bfd2FpdHEsICF0ZXN0X2JpdChSRFNfSU5fWE1JVCwgXHUwMDI2Y3AtXHUwMDNlY3BfZmxhZ3MpKTtcbitcdG9zb2NrID0gdGMtXHUwMDNldF9zb2NrO1xuK1x0aWYgKCFvc29jaylcbitcdFx0Z290byBuZXdzb2NrO1xuK1xuIFx0LyogcmVzZXQgcmVjZWl2ZSBzaWRlIHN0YXRlIGZvciByZHNfdGNwX2RhdGFfcmVjdigpIGZvciBvc29jayAgKi9cbiBcdGNhbmNlbF9kZWxheWVkX3dvcmtfc3luYyhcdTAwMjZjcC1cdTAwM2VjcF9zZW5kX3cpO1xuIFx0Y2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKFx1MDAyNmNwLVx1MDAzZWNwX3JlY3Zfdyk7XG5AQCAtMTcyLDYgKzE5Myw5IEBAIHZvaWQgcmRzX3RjcF9yZXNldF9jYWxsYmFja3Moc3RydWN0IHNvY2tldCAqc29jayxcbiBcdGxvY2tfc29jayhzb2NrLVx1MDAzZXNrKTtcbiBcdHJkc190Y3Bfc2V0X2NhbGxiYWNrcyhzb2NrLCBjcCk7XG4gXHRyZWxlYXNlX3NvY2soc29jay1cdTAwM2Vzayk7XG4rXG4rXHRjbGVhcl9iaXRfdW5sb2NrKFJEU19JTl9YTUlULCBcdTAwMjZjcC1cdTAwM2VjcF9mbGFncyk7XG4rXHR3YWtlX3VwX2FsbChcdTAwMjZjcC1cdTAwM2VjcF93YWl0cSk7XG4gfVxuIFxuIC8qIEFkZCB0YyB0byByZHNfdGNwX3RjX2xpc3QgYW5kIHNldCB0Yy1cdTAwM2V0X3NvY2suIFNlZSBjb21tZW50c1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDA6MjY6MzIuNDIyNzY3NTI1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTgwMTEyOTE2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBSRFMgQ29ubmVjdGlvbiBIYW5kbGluZyBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgaG93IFJlbGlhYmxlIERhdGFncmFtIFNvY2tldHMgKFJEUykgaGFuZGxlcyBjb25uZWN0aW9ucywgc3BlY2lmaWNhbGx5IGR1cmluZyBzaHV0ZG93biBhbmQgcmVzZXQsIGFjcm9zcyB0aG9zZSB0aHJlZSBmaWxlczogYGNvbm5lY3Rpb24uY2AsIGBzZW5kLmNgLCBhbmQgYHRjcC5jYC4gSXQgbG9va3MgbGlrZSBpdCdzIGFkZHJlc3NpbmcgYSByYWNlIGNvbmRpdGlvbiwgd2hpY2ggaXMgYWx3YXlzIHdvcnRoIGEgY2xvc2VyIGxvb2suIFRoZXkncmUgdXNpbmcgYHRlc3RfYW5kX3NldF9iaXRfbG9ja2AgaW5zdGVhZCBvZiBqdXN0IHdhaXRpbmcsIGFuZCBgd3FfaGFzX3NsZWVwZXJgIGZvciBhIHN0cm9uZ2VyIG1lbW9yeSBiYXJyaWVyLiBTbWFydCBtb3ZlIOKAkyB0aGF0IHNob3VsZCByZWFsbHkgdGlnaHRlbiB0aGluZ3MgdXAgYXJvdW5kIHRob3NlIGBSRFNfSU5fWE1JVGAgYW5kIGBSRFNfUkVDVl9SRUZJTExgIGZsYWdzLiBJbiBgcmRzX3RjcF9yZXNldF9jYWxsYmFja3NgLCBpdCBzZWVtcyB0aGV5IGFyZSBtYWtpbmcgc29tZSBsb2NrIG1hbmFnZW1lbnQgY2hhbmdlcyB3aGVuIHJlc2V0dGluZyB0aGUgc29ja2V0LlxuXG5UaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgZGVlcCBpbiBSRFMsIHdoaWNoIGNvdWxkIGJlIGltcG9ydGFudC4gQmVjYXVzZSBSRFMgY2FuIG9wZXJhdGUgb3ZlciBUQ1AgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCB0aGlzIG1ha2VzIHRoZSBwYXRjaCBpbnRlcmVzdGluZyBmb3IgYW5hbHlzaXMuIEknbSB0aGlua2luZywgdGhpcyBkZWZpbml0ZWx5IHdhcnJhbnRzIHNvbWUgZnV6emluZy4gR290dGEgY2hlY2sgdGhlIGF0dGFjayBzdXJmYWNlLlxuXG5MZXQncyBzZWUsIHdoYXQgZnVuY3Rpb25zIGRpZCB0aGV5IHRvdWNoPyBPa2F5LCBJJ3ZlIGdvdDogYHJkc19jb25uX3BhdGhfcmVzZXRgLCBgcmRzX2Nvbm5fc2h1dGRvd25gLCBgcmVsZWFzZV9pbl94bWl0YCwgYHJkc19zZW5kX3htaXRgLCBhbmQgYHJkc190Y3BfcmVzZXRfY2FsbGJhY2tzYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGV4cG9zZWQgdGhleSBhcmUuXG5cblJpZ2h0LCBgcmRzX2Nvbm5fc2h1dGRvd25gIGlzIGNhbGxlZCBmcm9tIGByZHNfY29ubl9kZXN0cm95YCwgYHJkc19jb25uX2Ryb3BgLCBldGMuLCBzbyB0aGF0J3MgaW50ZXJlc3RpbmcuIGByZHNfc2VuZF94bWl0YCBpcyB0cmlnZ2VyZWQgYnkgYHJkc19zZW5kbXNnYCwgd2hpY2ggZ2l2ZXMgdXMgYSBwb3RlbnRpYWwgZW50cnkgcG9pbnQgYW5kIGByZHNfdGNwX3Jlc2V0X2NhbGxiYWNrc2AgaXMgY2FsbGVkIGZyb20gYHJkc190Y3BfYWNjZXB0X29uZWAuXG5cbk9rYXksIEknbGwgZ28gYWhlYWQgYW5kIGRvIGEgcXVpY2sgc2VhcmNoIGZvciBgcmRzX2Nvbm5fc2h1dGRvd25gLCBgcmRzX3NlbmRfeG1pdGAsIGFuZCBgcmRzX3RjcF9yZXNldF9jYWxsYmFja3NgIHRvIHNlZSBob3cgdGhvc2UgYXJlIGNhbGxlZCwgYW5kIGdldCBhIGJldHRlciBwaWN0dXJlIG9mIHRoZSBwb3RlbnRpYWwgaW1wYWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NzcxLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDA6MjY6MzguMjIzODk5MzI4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1MDE5ODQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJkc19jb25uX3NodXRkb3duXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9yZHMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9yZHMvY29ubmVjdGlvbi5jPTM4Nz1FWFBPUlRfU1lNQk9MX0dQTChyZHNfY29ubl9jcmVhdGVfb3V0Z29pbmcpO1xcbm5ldC9yZHMvY29ubmVjdGlvbi5jLTM4OC1cXG5uZXQvcmRzL2Nvbm5lY3Rpb24uYzozODk6dm9pZCByZHNfY29ubl9zaHV0ZG93bihzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApXFxubmV0L3Jkcy9jb25uZWN0aW9uLmMtMzkwLXtcXG4tLVxcbm5ldC9yZHMvcmRzLmg9ODE1PXN0cnVjdCByZHNfY29ubmVjdGlvbiAqcmRzX2Nvbm5fY3JlYXRlX291dGdvaW5nKHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9yZHMvcmRzLmgtODE5LVxcdFxcdFxcdFxcdFxcdFxcdHU4IHRvcywgZ2ZwX3QgZ2ZwLCBpbnQgZGV2X2lmKTtcXG5uZXQvcmRzL3Jkcy5oOjgyMDp2b2lkIHJkc19jb25uX3NodXRkb3duKHN0cnVjdCByZHNfY29ubl9wYXRoICpjcGF0aCk7XFxubmV0L3Jkcy9yZHMuaC04MjEtdm9pZCByZHNfY29ubl9kZXN0cm95KHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubik7XFxuLS1cXG5uZXQvcmRzL3NlbmQuYz0xOTI9aW50IHJkc19zZW5kX3htaXQoc3RydWN0IHJkc19jb25uX3BhdGggKmNwKVxcbi0tXFxubmV0L3Jkcy9zZW5kLmMtMjQ2LVxcdC8qXFxubmV0L3Jkcy9zZW5kLmM6MjQ3OlxcdCAqIHJkc19jb25uX3NodXRkb3duKCkgc2V0cyB0aGUgY29ubiBzdGF0ZSBhbmQgdGhlbiBhY3F1aXJlc1xcbm5ldC9yZHMvc2VuZC5jLTI0OC1cXHQgKiBSRFNfSU5fWE1JVDsgd2UgdGFrZSB0aGUgbG9jayBmaXJzdCBhbmQgdGhlbiBjaGVjayB0aGUgc3RhdGUsXFxuLS1cXG5uZXQvcmRzL3RjcC5jPTEyOT12b2lkIHJkc190Y3BfcmVzZXRfY2FsbGJhY2tzKHN0cnVjdCBzb2NrZXQgKnNvY2ssXFxuLS1cXG5uZXQvcmRzL3RjcC5jLTE2OS1cXHQvKiBSZWFkIHRfc29jayBvbmx5IHdoaWxlIG93bmluZyBSRFNfSU5fWE1JVC4gIFRoZSB0ZWFyZG93biBpblxcbm5ldC9yZHMvdGNwLmM6MTcwOlxcdCAqIHJkc19jb25uX3NodXRkb3duKCkgcmVsZWFzZXMgdGhlIG9sZCBzb2NrZXQgYW5kIGNsZWFyc1xcbm5ldC9yZHMvdGNwLmMtMTcxLVxcdCAqIHRfc29jaywgc28gYSBwb2ludGVyIHNhbXBsZWQgYmVmb3JlIHRoZSB3YWl0IGNhbiBiZSBzdGFsZVxcbi0tXFxubmV0L3Jkcy90aHJlYWRzLmM9MjQzPXZvaWQgcmRzX3NodXRkb3duX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5uZXQvcmRzL3RocmVhZHMuYy0yNDgtXFxubmV0L3Jkcy90aHJlYWRzLmM6MjQ5OlxcdHJkc19jb25uX3NodXRkb3duKGNwKTtcXG5uZXQvcmRzL3RocmVhZHMuYy0yNTAtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQwMDoyNjozOC4yNzg5MjI5NTNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTA3NTkzOTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBSRFMgQ29ubmVjdGlvbiBTaHV0ZG93biBTZXF1ZW5jZSoqXG5cbk9rYXksIHNvIGByZHNfY29ubl9zaHV0ZG93bmAgaXMgdGhlIGtleSBmdW5jdGlvbiBiZWluZyBjYWxsZWQgZnJvbSBgcmRzX3NodXRkb3duX3dvcmtlcmAuIFRoYXQgaW1tZWRpYXRlbHkgZmxhZ3MgYSBwb3RlbnRpYWwgYXJlYSBvZiBjb25jZXJuIHdoZW4gd2UncmUgZGVhbGluZyB3aXRoIGNvbm5lY3Rpb24gdGVhcmRvd24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBzaHV0ZG93biBwcm9jZWR1cmUuXG5cbk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gZmxvdyBhbmQgaWRlbnRpZnkgd2hlcmUgdGhlIG5ldHdvcmsgcmVzb3VyY2VzIGNvdWxkIGJlIGdldHRpbmcgcmVsZWFzZWQuIFdlIG5lZWQgdG8gYmUgY2FyZWZ1bCB3aXRoIHJlc291cmNlIG1hbmFnZW1lbnQgdG8gYXZvaWQgbWVtb3J5IGNvcnJ1cHRpb24sIHVzZSBhZnRlciBmcmVlIGVycm9ycywgb3IgZGVhZGxvY2tzIGR1cmluZyBhIHNodXRkb3duLlxuXG5JJ20gdGhpbmtpbmcgSSBzaG91bGQgbG9vayBjbG9zZWx5IGF0IGEgY291cGxlIG9mIGltcG9ydGFudCBwaWVjZXMuIEZpcnN0LCBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGRhdGEgaXMgaGFuZGxlZCB3aGVuIGEgY29ubmVjdGlvbiBpcyBzaHV0dGluZyBkb3duLCBzbyBJJ2xsIGNoZWNrIGByZHNfc2VuZF94bWl0YC4gU2Vjb25kbHksIEkgd2FudCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgVENQIGNvbm5lY3Rpb24gaXMgcmVzZXQgYW5kIGhvdyBvdXIgY2FsbGJhY2tzIGFyZSBjbGVhcmVkIGR1cmluZyB0aGlzIHByb2NlZHVyZSwgc28gSSdsbCByZXZpZXcgYHJkc190Y3BfcmVzZXRfY2FsbGJhY2tzYC4gQm90aCBvZiB0aGVzZSBhcmUgYXJlYXMgd2hlcmUgd2UgY291bGQgZWFzaWx5IGludHJvZHVjZSBhIHN1YnRsZSBidWcgcmVsYXRlZCB0byB0aGUgc2h1dGRvd24gc2VxdWVuY2UsIGFuZCBJIGtub3cgZnJvbSBleHBlcmllbmNlIHRoYXQgdGhlc2UgdHlwZXMgb2YgaXNzdWVzIGNhbiBiZSBkaWZmaWN1bHQgdG8gZGVidWcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYxODEsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQwMDoyNjo0MS43ODY1MTk0MTJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc3MzM0MDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmRzX3NlbmRfeG1pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvcmRzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvcmRzL2NvbmcuYz0yMTc9dm9pZCByZHNfY29uZ19xdWV1ZV91cGRhdGVzKHN0cnVjdCByZHNfY29uZ19tYXAgKm1hcClcXG4tLVxcbm5ldC9yZHMvY29uZy5jLTIzMC1cXHRcXHRcXHRyZHNfc3RhdHNfaW5jKHNfY29uZ191cGRhdGVfcXVldWVkKTtcXG5uZXQvcmRzL2NvbmcuYzoyMzE6XFx0XFx0XFx0LyogV2UgY2Fubm90IGlubGluZSB0aGUgY2FsbCB0byByZHNfc2VuZF94bWl0KCkgaGVyZVxcbm5ldC9yZHMvY29uZy5jLTIzMi1cXHRcXHRcXHQgKiBmb3IgdHdvIHJlYXNvbnMgKGJvdGggcGVydGFpbmluZyB0byBhIFRDUCB0cmFuc3BvcnQpOlxcbi0tXFxubmV0L3Jkcy9pYl9jbS5jPTI4Mj1zdGF0aWMgdm9pZCByZHNfaWJfdGFza2xldF9mbl9zZW5kKHVuc2lnbmVkIGxvbmcgZGF0YSlcXG4tLVxcbm5ldC9yZHMvaWJfY20uYy0yOTktXFx0ICAgIHRlc3RfYml0KDAsIFxcdTAwMjZjb25uLVxcdTAwM2VjX21hcF9xdWV1ZWQpKSlcXG5uZXQvcmRzL2liX2NtLmM6MzAwOlxcdFxcdHJkc19zZW5kX3htaXQoXFx1MDAyNmljLVxcdTAwM2Vjb25uLVxcdTAwM2VjX3BhdGhbMF0pO1xcbm5ldC9yZHMvaWJfY20uYy0zMDEtfVxcbi0tXFxubmV0L3Jkcy9pYl9zZW5kLmM9MjQ1PXZvaWQgcmRzX2liX3NlbmRfY3FlX2hhbmRsZXIoc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYywgc3RydWN0IGliX3djICp3YylcXG4tLVxcbm5ldC9yZHMvaWJfc2VuZC5jLTMzNS0gKlxcbm5ldC9yZHMvaWJfc2VuZC5jOjMzNjogKiBUaGUgUkRTIHNlbmQgY29kZSBpcyBlc3NlbnRpYWxseSBzaW5nbGUtdGhyZWFkZWQ7IHJkc19zZW5kX3htaXRcXG5uZXQvcmRzL2liX3NlbmQuYy0zMzctICogc2V0cyBSRFNfSU5fWE1JVCB0byBlbnN1cmUgZXhjbHVzaXZlIGFjY2VzcyB0byB0aGUgc2VuZCByaW5nLlxcbi0tXFxubmV0L3Jkcy9sb29wLmM9MjM1PXZvaWQgcmRzX2xvb3BfbmV0X2V4aXQodm9pZClcXG4tLVxcbm5ldC9yZHMvbG9vcC5jLTI0MS0gKiBUaGlzIGlzIG1pc3NpbmcgLnhtaXRfKiBiZWNhdXNlIGxvb3AgZG9lc24ndCBnbyB0aHJvdWdoIGdlbmVyaWNcXG5uZXQvcmRzL2xvb3AuYzoyNDI6ICogcmRzX3NlbmRfeG1pdCgpIGFuZCBkb2Vzbid0IGNhbGwgcmRzX3JlY3ZfaW5jb21pbmcoKS4gIC5saXN0ZW5fc3RvcCBhbmRcXG5uZXQvcmRzL2xvb3AuYy0yNDMtICogLmxhZGRyX2NoZWNrIGFyZSBtaXNzaW5nIGJlY2F1c2UgdHJhbnNwb3J0LmMgZG9lc24ndCBpdGVyYXRlIG92ZXJcXG4tLVxcbm5ldC9yZHMvcmRzLmg9NTQwPXN0cnVjdCByZHNfdHJhbnNwb3J0IHtcXG4tLVxcbm5ldC9yZHMvcmRzLmgtNTgwLVxcdC8qXFxubmV0L3Jkcy9yZHMuaDo1ODE6XFx0ICogLnhtaXQgaXMgY2FsbGVkIGJ5IHJkc19zZW5kX3htaXQoKSB0byB0ZWxsIHRoZSB0cmFuc3BvcnQgdG8gc2VuZFxcbm5ldC9yZHMvcmRzLmgtNTgyLVxcdCAqIHBhcnQgb2YgYSBtZXNzYWdlLiAgVGhlIGNhbGxlciBzZXJpYWxpemVzIG9uIHRoZSBzZW5kX3NlbSBzbyB0aGlzXFxuLS1cXG5uZXQvcmRzL3Jkcy5oPTk1Nz12b2lkIHJkc19zZW5kX3BhdGhfcmVzZXQoc3RydWN0IHJkc19jb25uX3BhdGggKmNvbm4pO1xcbm5ldC9yZHMvcmRzLmg6OTU4OmludCByZHNfc2VuZF94bWl0KHN0cnVjdCByZHNfY29ubl9wYXRoICpjcCk7XFxubmV0L3Jkcy9yZHMuaC05NTktc3RydWN0IHNvY2thZGRyX2luO1xcbi0tXFxubmV0L3Jkcy9zZW5kLmMtNDQtXFxubmV0L3Jkcy9zZW5kLmM6NDU6LyogV2hlbiB0cmFuc21pdHRpbmcgbWVzc2FnZXMgaW4gcmRzX3NlbmRfeG1pdCwgd2UgbmVlZCB0byBlbWVyZ2UgZnJvbVxcbm5ldC9yZHMvc2VuZC5jLTQ2LSAqIHRpbWUgdG8gdGltZSBhbmQgYnJpZWZseSByZWxlYXNlIHRoZSBDUFUuIE90aGVyd2lzZSB0aGUgc29mdGxvY2sgd2F0Y2hkb2dcXG4tLVxcbm5ldC9yZHMvc2VuZC5jPTU5PXN0YXRpYyB2b2lkIHJkc19zZW5kX3JlbW92ZV9mcm9tX3NvY2soc3RydWN0IGxpc3RfaGVhZCAqbWVzc2FnZXMsIGludCBzdGF0dXMpO1xcbi0tXFxubmV0L3Jkcy9zZW5kLmMtNjItICogUmVzZXQgdGhlIHNlbmQgc3RhdGUuICBDYWxsZXJzIG11c3QgZW5zdXJlIHRoYXQgdGhpcyBkb2Vzbid0IHJhY2Ugd2l0aFxcbm5ldC9yZHMvc2VuZC5jOjYzOiAqIHJkc19zZW5kX3htaXQoKS5cXG5uZXQvcmRzL3NlbmQuYy02NC0gKi9cXG4tLVxcbm5ldC9yZHMvc2VuZC5jPTEzMz1zdGF0aWMgYm9vbCByZHNfbXByZHNfY3AwX2NhdGNodXAoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKVxcbi0tXFxubmV0L3Jkcy9zZW5kLmMtMTkxLSAqL1xcbm5ldC9yZHMvc2VuZC5jOjE5MjppbnQgcmRzX3NlbmRfeG1pdChzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApXFxubmV0L3Jkcy9zZW5kLmMtMTkzLXtcXG4tLVxcbm5ldC9yZHMvc2VuZC5jLTU1NS19XFxubmV0L3Jkcy9zZW5kLmM6NTU2OkVYUE9SVF9TWU1CT0xfR1BMKHJkc19zZW5kX3htaXQpO1xcbm5ldC9yZHMvc2VuZC5jLTU1Ny1cXG4tLVxcbm5ldC9yZHMvc2VuZC5jPTY5MD1zdGF0aWMgdm9pZCByZHNfc2VuZF9yZW1vdmVfZnJvbV9zb2NrKHN0cnVjdCBsaXN0X2hlYWQgKm1lc3NhZ2VzLCBpbnQgc3RhdHVzKVxcbi0tXFxubmV0L3Jkcy9zZW5kLmMtNzY1LSAqIG1lc3NhZ2VzIHVwIHRvLCBhbmQgaW5jbHVkaW5nLCB0aGUgZ2l2ZW4gc2VxdWVuY2UgbnVtYmVyLiAgTWVzc2FnZXMgYXJlXFxubmV0L3Jkcy9zZW5kLmM6NzY2OiAqIG1vdmVkIHRvIHRoZSByZXRyYW5zIHF1ZXVlIHdoZW4gcmRzX3NlbmRfeG1pdCBwaWNrcyB0aGVtIG9mZiB0aGUgc2VuZFxcbm5ldC9yZHMvc2VuZC5jLTc2Ny0gKiBxdWV1ZS4gVGhpcyBtZWFucyB0aGF0IGluIHRoZSBUQ1AgY2FzZSwgdGhlIG1lc3NhZ2UgbWF5IG5vdCBoYXZlIGJlZW5cXG4tLVxcbm5ldC9yZHMvc2VuZC5jPTExNTI9aW50IHJkc19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHBheWxvYWRfbGVuKVxcbi0tXFxubmV0L3Jkcy9zZW5kLmMtMTQ0OS1cXG5uZXQvcmRzL3NlbmQuYzoxNDUwOlxcdHJldCA9IHJkc19zZW5kX3htaXQoY3BhdGgpO1xcbm5ldC9yZHMvc2VuZC5jLTE0NTEtXFx0aWYgKHJldCA9PSAtRU5PTUVNIHx8IHJldCA9PSAtRUFHQUlOKSB7XFxuLS1cXG5uZXQvcmRzL3RjcC5jPTk2PXZvaWQgcmRzX3RjcF9yZXN0b3JlX2NhbGxiYWNrcyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxcbi0tXFxubmV0L3Jkcy90Y3AuYy0xMjYtICogYW5kIHRoZSBzd2FwIGRvbmUgaGVyZSBydW5zIHVuZGVyIFJEU19JTl9YTUlUIHNvIHRoYXQgaXQgY2Fubm90XFxubmV0L3Jkcy90Y3AuYzoxMjc6ICogaW50ZXJsZWF2ZSB3aXRoIGEgc2VuZGVyIGFscmVhZHkgaW5zaWRlIHJkc19zZW5kX3htaXQoKS5cXG5uZXQvcmRzL3RjcC5jLTEyOC0gKi9cXG5uZXQvcmRzL3RjcC5jPTEyOT12b2lkIHJkc190Y3BfcmVzZXRfY2FsbGJhY2tzKHN0cnVjdCBzb2NrZXQgKnNvY2ssXFxuLS1cXG5uZXQvcmRzL3RjcC5jLTE0MC1cXHQgKiB0aGFuIFJEU19DT05OX1VQIHN0b3BzIG5ldyBzZW5kZXJzLCBhbmQgb3duaW5nIFJEU19JTl9YTUlUXFxubmV0L3Jkcy90Y3AuYzoxNDE6XFx0ICogZXhjbHVkZXMgYW55IHRocmVhZCBhbHJlYWR5IGluc2lkZSByZHNfc2VuZF94bWl0KCkgZm9yIHRoZVxcbm5ldC9yZHMvdGNwLmMtMTQyLVxcdCAqIHdob2xlIHNvY2tldCBzd2FwIGFuZCB0aGUgcmRzX3NlbmRfcGF0aF9yZXNldCgpIGJlbG93Llxcbi0tXFxubmV0L3Jkcy90Y3AuYy0xNDQtXFx0ICogQW4gaW5jb21pbmcgc3luLWFjayBhdCB0aGlzIHBvaW50IHdvdWxkIGVuZCB1cCBtYXJraW5nIHRoZVxcbm5ldC9yZHMvdGNwLmM6MTQ1OlxcdCAqIGNvbm4gYXMgUkRTX0NPTk5fVVAsIGFuZCB3b3VsZCBhZ2FpbiBwZXJtaXQgcmRzX3NlbmRfeG1pdCgpXFxubmV0L3Jkcy90Y3AuYy0xNDYtXFx0ICogdGhyZWFkcyB0aHJvdWdoLCBzbyBpZGVhbGx5IHdlIHdvdWxkIHN5bmNocm9uaXplIG9uXFxuLS1cXG5uZXQvcmRzL3RocmVhZHMuYz0xOTE9dm9pZCByZHNfc2VuZF93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxubmV0L3Jkcy90aHJlYWRzLmMtMTk5LVxcdFxcdGNsZWFyX2JpdChSRFNfTExfU0VORF9GVUxMLCBcXHUwMDI2Y3AtXFx1MDAzZWNwX2ZsYWdzKTtcXG5uZXQvcmRzL3RocmVhZHMuYzoyMDA6XFx0XFx0cmV0ID0gcmRzX3NlbmRfeG1pdChjcCk7XFxubmV0L3Jkcy90aHJlYWRzLmMtMjAxLVxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQwMDoyNjo0MS44MzQyNTczMTdaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjYxNzk5MTYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipJbnRlcm5hbCBDb2RlIEZsb3cgQ29uc2lkZXJhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgYHJkc19zZW5kX3htaXRgIGlzIHVzZWQuIEl0J3MgZGVmaW5pdGVseSBleHBvcnRlZCwgbWVhbmluZyBpdCdzIHZpc2libGUgb3V0c2lkZSBpdHMgaW1tZWRpYXRlIHNjb3BlLiBTZWVtcyBsaWtlIGByZHNfc2VuZG1zZ2AgYW5kIGByZHNfc2VuZF93b3JrZXJgIGFyZSB0aGUga2V5IGNhbGwgc2l0ZXMuIFRoYXQgZ2l2ZXMgbWUgYSBoYW5kbGUgb24gdGhlIGRhdGEgcGF0aCBmb3IgdHJhbnNtaXNzaW9ucy4gS25vd2luZyB0aGVzZSBmdW5jdGlvbnMgY2FsbCBgcmRzX3NlbmRfeG1pdGAgdGVsbHMgbWUgd2hlcmUgdG8gc3RhcnQgbG9va2luZyB3aGVuIGRlYnVnZ2luZyBhIHNlbmQgaXNzdWUuXG5cbk5vdywgYHJkc190Y3BfcmVzZXRfY2FsbGJhY2tzYC4uLiB0aGF0J3MgdGhlIGludGVyZXN0aW5nIG9uZS4gVGhlIHRleHQgc3VnZ2VzdHMgaXQgaXMgY2FsbGVkIGZyb20gYHJkc190Y3BfYWNjZXB0X29uZWAuIE5lZWQgdG8gdmVyaWZ5IHRoaXMgaW4gdGhlIGNvZGUuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgY2FsbCBncmFwaCB0byBiZSBzdXJlIHRoYXQgYHJkc190Y3BfYWNjZXB0X29uZWAgaXMgdGhlIG9ubHkgY2FsbGVyIG9mIGByZHNfdGNwX3Jlc2V0X2NhbGxiYWNrc2AuIElmIHRoYXQncyB0aGUgY2FzZSwgaXQgZ2l2ZXMgbWUgYSBjbGVhciBpZGVhIG9mIHdoZW4gdGhvc2UgY2FsbGJhY2tzIGFyZSBiZWluZyByZXNldC4gVW5kZXJzdGFuZGluZyB0aGVzZSBkZXBlbmRlbmNpZXMgYXJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgyMDAsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQwMDoyNjo0NS4wOTYwNjQ5NDlaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg0OTU0NDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmRzX3RjcF9yZXNldF9jYWxsYmFja3NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3Jkcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3Jkcy9jb25uZWN0aW9uLmM9Mzg5PXZvaWQgcmRzX2Nvbm5fc2h1dGRvd24oc3RydWN0IHJkc19jb25uX3BhdGggKmNwKVxcbi0tXFxubmV0L3Jkcy9jb25uZWN0aW9uLmMtNDM0LVxcdFxcdC8qIFJlbGVhc2UgdGhlIHR3byBsb2NrcyBhbmQgd2FrZSBhbnkgd2FpdGVyIChlLmcuXFxubmV0L3Jkcy9jb25uZWN0aW9uLmM6NDM1OlxcdFxcdCAqIHJkc190Y3BfcmVzZXRfY2FsbGJhY2tzKCkpIHRoYXQgYmxvY2tlZCBvbiB0aGVtIHdoaWxlXFxubmV0L3Jkcy9jb25uZWN0aW9uLmMtNDM2LVxcdFxcdCAqIHdlIGhlbGQgdGhlbS4gIHJkc19jb25uX3BhdGhfcmVzZXQoKSBsZWF2ZXMgYm90aCBiaXRzXFxuLS1cXG5uZXQvcmRzL3RjcC5jPTk2PXZvaWQgcmRzX3RjcF9yZXN0b3JlX2NhbGxiYWNrcyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxcbi0tXFxubmV0L3Jkcy90Y3AuYy0xMTctLypcXG5uZXQvcmRzL3RjcC5jOjExODogKiByZHNfdGNwX3Jlc2V0X2NhbGxiYWNrcygpIHN3aXRjaGVzIGEgcGF0aCB0byBhIG5ldyBzb2NrZXQgYW5kXFxubmV0L3Jkcy90Y3AuYy0xMTktICogcmVsZWFzZXMgdGhlIG9sZCBvbmUgaXQgZmluZHMgaW4gdGMtXFx1MDAzZXRfc29jaywgcmVzb2x2aW5nIGEgZHVlbGxpbmdcXG4tLVxcbm5ldC9yZHMvdGNwLmMtMTI4LSAqL1xcbm5ldC9yZHMvdGNwLmM6MTI5OnZvaWQgcmRzX3RjcF9yZXNldF9jYWxsYmFja3Moc3RydWN0IHNvY2tldCAqc29jayxcXG5uZXQvcmRzL3RjcC5jLTEzMC1cXHRcXHRcXHQgICAgIHN0cnVjdCByZHNfY29ubl9wYXRoICpjcClcXG4tLVxcbm5ldC9yZHMvdGNwLmMtMjAxLS8qIEFkZCB0YyB0byByZHNfdGNwX3RjX2xpc3QgYW5kIHNldCB0Yy1cXHUwMDNldF9zb2NrLiBTZWUgY29tbWVudHNcXG5uZXQvcmRzL3RjcC5jOjIwMjogKiBhYm92ZSByZHNfdGNwX3Jlc2V0X2NhbGxiYWNrcyBmb3Igbm90ZXMgYWJvdXQgc3luY2hyb25pemF0aW9uXFxubmV0L3Jkcy90Y3AuYy0yMDMtICogd2l0aCBkYXRhIHBhdGhcXG4tLVxcbm5ldC9yZHMvdGNwLmg9NzQ9dm9pZCByZHNfdGNwX3NldF9jYWxsYmFja3Moc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHJkc19jb25uX3BhdGggKmNwKTtcXG5uZXQvcmRzL3RjcC5oOjc1OnZvaWQgcmRzX3RjcF9yZXNldF9jYWxsYmFja3Moc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHJkc19jb25uX3BhdGggKmNwKTtcXG5uZXQvcmRzL3RjcC5oLTc2LXZvaWQgcmRzX3RjcF9yZXN0b3JlX2NhbGxiYWNrcyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxcbi0tXFxubmV0L3Jkcy90Y3BfbGlzdGVuLmM9MTUyPWludCByZHNfdGNwX2FjY2VwdF9vbmUoc3RydWN0IHJkc190Y3BfbmV0ICpydG4pXFxuLS1cXG5uZXQvcmRzL3RjcF9saXN0ZW4uYy0yOTYtXFx0XFx0LyogRHVlbGxpbmcgU1lOIGhhcyBiZWVuIGhhbmRsZWQgaW4gcmRzX3RjcF9hY2NlcHRfb25lKCkgKi9cXG5uZXQvcmRzL3RjcF9saXN0ZW4uYzoyOTc6XFx0XFx0cmRzX3RjcF9yZXNldF9jYWxsYmFja3MobmV3X3NvY2ssIGNwKTtcXG5uZXQvcmRzL3RjcF9saXN0ZW4uYy0yOTgtXFx0XFx0LyogcmRzX2Nvbm5lY3RfcGF0aF9jb21wbGV0ZSgpIG1hcmtzIFJEU19DT05OX1VQICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDAwOjI2OjQ1LjE0NDU2NTM3NFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNDAwNjgxMjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGEgbmV0d29ya2luZyBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyBSRFMgVENQIFJlc2V0IENhbGxiYWNrcyoqXG5cbkFscmlnaHQsIHNvIHRoZSBjbHVlIGhlcmUgaXMgdGhhdCBgcmRzX3RjcF9yZXNldF9jYWxsYmFja3NgIGlzIGRlZmluaXRlbHkgY2FsbGVkIGZyb20gd2l0aGluIGByZHNfdGNwX2FjY2VwdF9vbmVgLiBHb29kLiBUaGF0IGNvbmZpcm1zIGEgY2VydGFpbiBjb25uZWN0aW9uIGZsb3csIG9yIGF0IGxlYXN0IGEgc3BlY2lmaWMgcG9pbnQgb2YgaW50ZWdyYXRpb24uIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxhcmdlciBjb250ZXh0IG9mICp3aHkqIHRoaXMgaGFwcGVucy4gS25vd2luZyB0aGUgY2FsbCBwYXRoIGlzIGp1c3QgdGhlIGJlZ2lubmluZy4gVGhlIG5leHQgbG9naWNhbCBzdGVwLCB0byBnZXQgdGhlIGJpZ2dlciBwaWN0dXJlLCBpcyB0byBpbnZlc3RpZ2F0ZSB0aGUgY2FsbGVycyBvZiBgcmRzX2Nvbm5fc2h1dGRvd25gLiBUaGF0J2xsIGdpdmUgbWUgYSB2aWV3IG9mIHdoYXQgdHJpZ2dlcnMgdGhlIGNvbm5lY3Rpb24gc2h1dGRvd24gcHJvY2VzcywgYW5kIHRoZXJlZm9yZSBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBgcmVzZXRfY2FsbGJhY2tzYCBhcmUgdXNlZCBpbiByZWxhdGlvbiB0byB0aGUgc2h1dGRvd24gcHJvY2VkdXJlLiBUaGF0IHNob3VsZCBpbGx1bWluYXRlIHRoZSBmYWlsdXJlIGFuZCBwb2ludCBtZSB0byBwb3RlbnRpYWwgcm9vdCBjYXVzZXMgYW5kIGZpeGVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MTQ4LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDA6MjY6NDguMTg0NjM4MTVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4OTA2MTI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJkc19jb25uX3NodXRkb3duXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9yZHMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9yZHMvY29ubmVjdGlvbi5jPTM4Nz1FWFBPUlRfU1lNQk9MX0dQTChyZHNfY29ubl9jcmVhdGVfb3V0Z29pbmcpO1xcbm5ldC9yZHMvY29ubmVjdGlvbi5jLTM4OC1cXG5uZXQvcmRzL2Nvbm5lY3Rpb24uYzozODk6dm9pZCByZHNfY29ubl9zaHV0ZG93bihzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApXFxubmV0L3Jkcy9jb25uZWN0aW9uLmMtMzkwLXtcXG4tLVxcbm5ldC9yZHMvcmRzLmg9ODE1PXN0cnVjdCByZHNfY29ubmVjdGlvbiAqcmRzX2Nvbm5fY3JlYXRlX291dGdvaW5nKHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9yZHMvcmRzLmgtODE5LVxcdFxcdFxcdFxcdFxcdFxcdHU4IHRvcywgZ2ZwX3QgZ2ZwLCBpbnQgZGV2X2lmKTtcXG5uZXQvcmRzL3Jkcy5oOjgyMDp2b2lkIHJkc19jb25uX3NodXRkb3duKHN0cnVjdCByZHNfY29ubl9wYXRoICpjcGF0aCk7XFxubmV0L3Jkcy9yZHMuaC04MjEtdm9pZCByZHNfY29ubl9kZXN0cm95KHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubik7XFxuLS1cXG5uZXQvcmRzL3NlbmQuYz0xOTI9aW50IHJkc19zZW5kX3htaXQoc3RydWN0IHJkc19jb25uX3BhdGggKmNwKVxcbi0tXFxubmV0L3Jkcy9zZW5kLmMtMjQ2LVxcdC8qXFxubmV0L3Jkcy9zZW5kLmM6MjQ3OlxcdCAqIHJkc19jb25uX3NodXRkb3duKCkgc2V0cyB0aGUgY29ubiBzdGF0ZSBhbmQgdGhlbiBhY3F1aXJlc1xcbm5ldC9yZHMvc2VuZC5jLTI0OC1cXHQgKiBSRFNfSU5fWE1JVDsgd2UgdGFrZSB0aGUgbG9jayBmaXJzdCBhbmQgdGhlbiBjaGVjayB0aGUgc3RhdGUsXFxuLS1cXG5uZXQvcmRzL3RjcC5jPTEyOT12b2lkIHJkc190Y3BfcmVzZXRfY2FsbGJhY2tzKHN0cnVjdCBzb2NrZXQgKnNvY2ssXFxuLS1cXG5uZXQvcmRzL3RjcC5jLTE2OS1cXHQvKiBSZWFkIHRfc29jayBvbmx5IHdoaWxlIG93bmluZyBSRFNfSU5fWE1JVC4gIFRoZSB0ZWFyZG93biBpblxcbm5ldC9yZHMvdGNwLmM6MTcwOlxcdCAqIHJkc19jb25uX3NodXRkb3duKCkgcmVsZWFzZXMgdGhlIG9sZCBzb2NrZXQgYW5kIGNsZWFyc1xcbm5ldC9yZHMvdGNwLmMtMTcxLVxcdCAqIHRfc29jaywgc28gYSBwb2ludGVyIHNhbXBsZWQgYmVmb3JlIHRoZSB3YWl0IGNhbiBiZSBzdGFsZVxcbi0tXFxubmV0L3Jkcy90aHJlYWRzLmM9MjQzPXZvaWQgcmRzX3NodXRkb3duX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5uZXQvcmRzL3RocmVhZHMuYy0yNDgtXFxubmV0L3Jkcy90aHJlYWRzLmM6MjQ5OlxcdHJkc19jb25uX3NodXRkb3duKGNwKTtcXG5uZXQvcmRzL3RocmVhZHMuYy0yNTAtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQwMDoyNjo0OC4yMzM1NTMyMDVaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzAyNzkzNjQ0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRoZSBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgU2h1dGRvd24gU2VxdWVuY2UqKlxuXG5Pa2F5LCBzbyBJIHNlZSBgcmRzX2Nvbm5fc2h1dGRvd25gIGJlaW5nIHRyaWdnZXJlZCB3aXRoaW4gYHJkc19zaHV0ZG93bl93b3JrZXJgLiBOYXR1cmFsbHksIG15IG5leHQgbW92ZSBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBJIG5lZWQgdG8gdHJhY2UgYmFjayBhbmQgaWRlbnRpZnkgdGhlIGNhbGxpbmcgZnVuY3Rpb25zIG9mIGByZHNfc2h1dGRvd25fd29ya2VyYC4gVW5kZXJzdGFuZGluZyB0aGUgY2FsbCBncmFwaCBoZXJlIGlzIGNydWNpYWwgdG8gc2VlIHdoYXQncyAqYWN0dWFsbHkqIGRyaXZpbmcgdGhlIGNvbm5lY3Rpb24gc2h1dGRvd24gcHJvY2Vzcy4gS25vd2luZyAqd2hvKiBpcyBpbml0aWF0aW5nIHRoaXMgc2h1dGRvd24gd2lsbCBwcm92aWRlIHRoZSBuZWNlc3NhcnkgY29udGV4dCB0byB0cm91Ymxlc2hvb3QgYW55IHByb2JsZW1zIGFuZCBlbnN1cmUgd2UncmUgc2h1dHRpbmcgZG93biB0aGluZ3MgaW4gdGhlIHByb3BlciBzZXF1ZW5jZS4gTGV0J3MgZGlnIGluIGFuZCBmaWd1cmUgb3V0IHRoZSBjaGFpbiBvZiBldmVudHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk5MzgsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQwMDoyNjo1MS4yNjE0OTI1MDFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NzQ4NjA0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJkc19zaHV0ZG93bl93b3JrZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3Jkcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3Jkcy9jb25uZWN0aW9uLmM9MTM5PXN0YXRpYyB2b2lkIF9fcmRzX2Nvbm5fcGF0aF9pbml0KHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubixcXG4tLVxcbm5ldC9yZHMvY29ubmVjdGlvbi5jLTE1NS1cXHRJTklUX0RFTEFZRURfV09SSyhcXHUwMDI2Y3AtXFx1MDAzZWNwX2Nvbm5fdywgcmRzX2Nvbm5lY3Rfd29ya2VyKTtcXG5uZXQvcmRzL2Nvbm5lY3Rpb24uYzoxNTY6XFx0SU5JVF9XT1JLKFxcdTAwMjZjcC1cXHUwMDNlY3BfZG93bl93LCByZHNfc2h1dGRvd25fd29ya2VyKTtcXG5uZXQvcmRzL2Nvbm5lY3Rpb24uYy0xNTctXFx0bXV0ZXhfaW5pdChcXHUwMDI2Y3AtXFx1MDAzZWNwX2NtX2xvY2spO1xcbi0tXFxubmV0L3Jkcy9yZHMuaD0xMDQ0PXZvaWQgcmRzX2Nvbm5lY3Rfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqKTtcXG5uZXQvcmRzL3Jkcy5oOjEwNDU6dm9pZCByZHNfc2h1dGRvd25fd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqKTtcXG5uZXQvcmRzL3Jkcy5oLTEwNDYtdm9pZCByZHNfc2VuZF93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICopO1xcbi0tXFxubmV0L3Jkcy90aHJlYWRzLmM9MjE4PXZvaWQgcmRzX3JlY3Zfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbm5ldC9yZHMvdGhyZWFkcy5jLTI0Mi1cXG5uZXQvcmRzL3RocmVhZHMuYzoyNDM6dm9pZCByZHNfc2h1dGRvd25fd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG5uZXQvcmRzL3RocmVhZHMuYy0yNDQte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQwMDoyNjo1MS4zMDcyNDY0MjdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg4MDU0OTcyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHdoYXQgbmVlZHMgYXR0ZW50aW9uIHdoZW4gaGFuZGxpbmcgY29ubmVjdGlvbiBzaHV0ZG93biBpbiBSRFMsIGFwcHJvYWNoZWQgZnJvbSBteSBleHBlcnQgcGVyc3BlY3RpdmU6XG5cbioqRm9jdXNpbmcgb24gUkRTIENvbm5lY3Rpb24gU2h1dGRvd24qKlxuXG5Pa2F5LCBzbyBgcmRzX3NodXRkb3duX3dvcmtlcmAgaXMgdGhlIHdvcmtxdWV1ZSBmdW5jdGlvbiB0aGF0IHRyaWdnZXJzIHdoZW4gYSBjb25uZWN0aW9uIGlzIHRlcm1pbmF0ZWQuIFRoYXQncyB0aGUgZW50cnkgcG9pbnQgdG8gaW52ZXN0aWdhdGUuIE5hdHVyYWxseSwgdGhhdCdzIHdoZXJlIHRoZSBjcml0aWNhbCBhY3Rpb25zIHdpbGwgYmUuIEdpdmVuIHRoYXQsIEkga25vdyB0aGUgY3J1Y2lhbCBmdW5jdGlvbnMgdG8gZHJpbGwgZG93biBpbnRvIGFyZTpcblxuKiAgIGByZHNfc2VuZF94bWl0YDogSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgaGFuZGxlcyBvbmdvaW5nIHRyYW5zbWlzc2lvbnMgZHVyaW5nIHNodXRkb3duLiBEb2VzIGl0IGdyYWNlZnVsbHkgZmx1c2gsIGNhbmNlbCwgb3Igc2ltcGx5IGRyb3AgdGhlbT8gQXJlIHRoZXJlIHJhY2UgY29uZGl0aW9ucyB0byB3b3JyeSBhYm91dD9cbiogICBgcmRzX3RjcF9yZXNldF9jYWxsYmFja3NgOiBUaGlzIGlzIGxpa2VseSB3aGVyZSB0aGUgc29ja2V0J3MgYXNzb2NpYXRlZCBjYWxsYmFja3MgYXJlIGJlaW5nIGNsZWFyZWQuIEkgbXVzdCBjaGVjayB3aGF0IHRoZXNlIGNhbGxiYWNrcyB3ZXJlIGFuZCBob3cgaXQgY2xlYW5zIHVwIHRoZWlyIGludGVybmFsIHN0YXRlLiBJIG11c3QgZW5zdXJlIHRoaXMgaXMgaGFuZGxlZCBwcm9wZXJseSwgY29uc2lkZXJpbmcgcG90ZW50aWFsIGNvbmN1cnJlbnQgYWNjZXNzLlxuKiAgIGByZHNfY29ubl9zaHV0ZG93bmA6IFRoZSBjb3JlIHNodXRkb3duIGxvZ2ljIGhhcyB0byBiZSBpbiB0aGlzIGZ1bmN0aW9uLiBUaGlzIGlzIHdoZXJlIEknbGwgZmluZCBob3cgdGhlIGNvbm5lY3Rpb24gc3RhdGUgdHJhbnNpdGlvbnMgYW5kIGhvdyByZXNvdXJjZXMgYXJlIGZyZWVkLiBJdCBpcyBsaWtlbHkgaXQgd2lsbCBjYWxsIHRoZSBvdGhlciB0d28gYXMgcGFydCBvZiBpdHMgZnVuY3Rpb25zLlxuXG5OZXh0LCBJJ2xsIGV4YW1pbmUgdGhlIGNvbmZpZ3VyYXRpb24gYXNwZWN0cyBvZiB0aGUgUkRTIHN1YnN5c3RlbS4gVGhpcyB3YXksIEkga25vdyBhbGwgdGhlIHZhcmlhYmxlcyBpbiB0aGUgbWl4LiBJIGhhdmUgdG8ga25vdyBhbGwgdGhlIHNldHRpbmdzIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzaHV0ZG93biBwcm9jZXNzIGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNDQzLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDA6MjY6NTUuMTg3Nzk4NjE3WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjA0MzUyMjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFJEU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvcmRzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvcmRzL0tjb25maWctMi1cXG5uZXQvcmRzL0tjb25maWc6Mzpjb25maWcgUkRTXFxubmV0L3Jkcy9LY29uZmlnLTQtXFx0dHJpc3RhdGUgXFxcIlRoZSBSZWxpYWJsZSBEYXRhZ3JhbSBTb2NrZXRzIFByb3RvY29sXFxcIlxcbi0tXFxubmV0L3Jkcy9LY29uZmlnLTktXFxubmV0L3Jkcy9LY29uZmlnOjEwOmNvbmZpZyBSRFNfUkRNQVxcbm5ldC9yZHMvS2NvbmZpZy0xMS1cXHR0cmlzdGF0ZSBcXFwiUkRTIG92ZXIgSW5maW5pYmFuZFxcXCJcXG4tLVxcbm5ldC9yZHMvS2NvbmZpZy0xNi1cXG5uZXQvcmRzL0tjb25maWc6MTc6Y29uZmlnIFJEU19UQ1BcXG5uZXQvcmRzL0tjb25maWctMTgtXFx0dHJpc3RhdGUgXFxcIlJEUyBvdmVyIFRDUFxcXCJcXG4tLVxcbm5ldC9yZHMvS2NvbmZpZy0yNC1cXG5uZXQvcmRzL0tjb25maWc6MjU6Y29uZmlnIFJEU19ERUJVR1xcbm5ldC9yZHMvS2NvbmZpZy0yNi1cXHRib29sIFxcXCJSRFMgZGVidWdnaW5nIG1lc3NhZ2VzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQwMDoyNjo1NS40NDgyNDEyNloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTk2MDkwOTAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIFJEUyBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIHNvIHdlJ3JlIGRlYWxpbmcgd2l0aCBgUkRTYCBhbmQgYFJEU19UQ1BgIGNvbmZpZ3VyYXRpb25zLiBNeSBmaXJzdCBpbnN0aW5jdCwgYXMgYWx3YXlzLCBpcyB0byBkaXZlIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZpbGVzLiBTcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBhYm91dCB0aGUgZGVwZW5kZW5jeSByZWxhdGlvbnNoaXBzLiBXaGVyZSBkbyB0aGVzZSBgUkRTYCBvcHRpb25zIGZpdCB3aXRoaW4gdGhlIGJyb2FkZXIga2VybmVsIGNvbmZpZ3VyYXRpb24gbGFuZHNjYXBlPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IG90aGVyIGZlYXR1cmVzIG9yIG1vZHVsZXMgdGhleSByZWx5IG9uLiBMZXQncyBzdGFydCB3aXRoIGBuZXQvcmRzL0tjb25maWdgLiBUaGF0J3MgdGhlIG9idmlvdXMgcGxhY2UgdG8gZmluZCB0aGUgYW5zd2Vycy4gRnJvbSB0aGVyZSwgSSBjYW4gZGV0ZXJtaW5lIGlmIGFueSBwcmUtcmVxdWlzaXRlcyBhcmUgZW5hYmxlZCBmb3IgYFJEU2AgYW5kIGBSRFNfVENQYC4gSXQncyBhbGwgYWJvdXQgZW5zdXJpbmcgdGhhdCBub3RoaW5nIGlzIGJyb2tlbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEwMzYsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQwMDoyNjo1OC40NDQzMzQ1NjFaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTkxNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3Jkcy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0XFxuICAgMzpcXHRjb25maWcgUkRTXFxuICAgNDpcXHRcXHR0cmlzdGF0ZSBcXFwiVGhlIFJlbGlhYmxlIERhdGFncmFtIFNvY2tldHMgUHJvdG9jb2xcXFwiXFxuICAgNTpcXHRcXHRkZXBlbmRzIG9uIElORVRcXG4gICA2OlxcdFxcdGhlbHBcXG4gICA3OlxcdFxcdCAgVGhlIFJEUyAoUmVsaWFibGUgRGF0YWdyYW0gU29ja2V0cykgcHJvdG9jb2wgcHJvdmlkZXMgcmVsaWFibGUsXFxuICAgODpcXHRcXHQgIHNlcXVlbmNlZCBkZWxpdmVyeSBvZiBkYXRhZ3JhbXMgb3ZlciBJbmZpbmliYW5kIG9yIFRDUC5cXG4gICA5OlxcdFxcbiAgMTA6XFx0Y29uZmlnIFJEU19SRE1BXFxuICAxMTpcXHRcXHR0cmlzdGF0ZSBcXFwiUkRTIG92ZXIgSW5maW5pYmFuZFxcXCJcXG4gIDEyOlxcdFxcdGRlcGVuZHMgb24gUkRTIFxcdTAwMjZcXHUwMDI2IElORklOSUJBTkQgXFx1MDAyNlxcdTAwMjYgSU5GSU5JQkFORF9BRERSX1RSQU5TXFxuICAxMzpcXHRcXHRoZWxwXFxuICAxNDpcXHRcXHQgIEFsbG93IFJEUyB0byB1c2UgSW5maW5pYmFuZCBhcyBhIHRyYW5zcG9ydC5cXG4gIDE1OlxcdFxcdCAgVGhpcyB0cmFuc3BvcnQgc3VwcG9ydHMgUkRNQSBvcGVyYXRpb25zLlxcbiAgMTY6XFx0XFxuICAxNzpcXHRjb25maWcgUkRTX1RDUFxcbiAgMTg6XFx0XFx0dHJpc3RhdGUgXFxcIlJEUyBvdmVyIFRDUFxcXCJcXG4gIDE5OlxcdFxcdGRlcGVuZHMgb24gUkRTXFxuICAyMDpcXHRcXHRkZXBlbmRzIG9uIElQVjYgfHwgIUlQVjZcXG4gIDIxOlxcdFxcdGhlbHBcXG4gIDIyOlxcdFxcdCAgQWxsb3cgUkRTIHRvIHVzZSBUQ1AgYXMgYSB0cmFuc3BvcnQuXFxuICAyMzpcXHRcXHQgIFRoaXMgdHJhbnNwb3J0IGRvZXMgbm90IHN1cHBvcnQgUkRNQSBvcGVyYXRpb25zLlxcbiAgMjQ6XFx0XFxuICAyNTpcXHRjb25maWcgUkRTX0RFQlVHXFxuICAyNjpcXHRcXHRib29sIFxcXCJSRFMgZGVidWdnaW5nIG1lc3NhZ2VzXFxcIlxcbiAgMjc6XFx0XFx0ZGVwZW5kcyBvbiBSRFNcXG4gIDI4OlxcdFxcdGRlZmF1bHQgblxcbiAgMjk6XFx0XFxuICAzMDpcXHRjb25maWcgR0NPVl9QUk9GSUxFX1JEU1xcbiAgMzE6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIEdDT1YgcHJvZmlsaW5nIG9uIFJEU1xcXCJcXG4gIDMyOlxcdFxcdGRlcGVuZHMgb24gR0NPVl9LRVJORUxcXG4gIDMzOlxcdFxcdGhlbHBcXG4gIDM0OlxcdFxcdCAgRW5hYmxlIEdDT1YgcHJvZmlsaW5nIG9uIFJEUyBmb3IgY2hlY2tpbmcgd2hpY2ggZnVuY3Rpb25zL2xpbmVzXFxuICAzNTpcXHRcXHQgIGFyZSBleGVjdXRlZC5cXG4gIDM2OlxcdFxcbiAgMzc6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQwMDoyNjo1OC40NDQzOTUwMDFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDk4NjUxODMxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBUaG91Z2h0IFByb2Nlc3Mgb24gUkRTIENvbmZpZ3VyYXRpb24gYW5kIFJlbGV2YW50IEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIFJEUyBjb25maWd1cmF0aW9ucywgYFJEU2AgYW5kIGBSRFNfVENQYCwgd2l0aCBgSU5FVGAgdXN1YWxseSBlbmFibGVkLiBJJ3ZlIGdvdCBhIGZldyBmb2N1cyBzeW1ib2xzIHRvIGNvbnNpZGVyOiBgcmRzX3NlbmRfeG1pdGAsIGByZHNfdGNwX3Jlc2V0X2NhbGxiYWNrc2AsIGFuZCBgcmRzX2Nvbm5fc2h1dGRvd25gLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55IG90aGVyIHBvdGVudGlhbGx5IHVzZWZ1bCBmdW5jdGlvbnMgaW4gdGhpcyBhcmVhLlxuXG5gcmRzX2Nvbm5fcGF0aF9yZXNldGAgbG9va3MgcHJvbWlzaW5nLCBidXQgaXQgbWlnaHQgYmUgaW5saW5lZCBvciBzdGF0aWMsIHNvIHRoYXQncyBhIHBvdGVudGlhbCBpc3N1ZS4gYHJkc19jb25uX3NodXRkb3duYCBpcyBwcm9iYWJseSBhIHN0cm9uZ2VyIGJldC4gQW5kLCBJIHNlZSBgcmVsZWFzZV9pbl94bWl0YCBpcyBzdGF0aWMsIHdoaWNoIGlzIG5vdCB3aGF0IEkgbmVlZC4gQWgsIGByZHNfc2VuZF94bWl0YCBzdGlsbCBzZWVtcyBsaWtlIGEgZ29vZCB0YXJnZXQuXG5cbldhaXQgYSBzZWNvbmQsIGByZHNfdGNwX3Jlc2V0X2NhbGxiYWNrc2Ag4oCTIHRoYXQncyBpbiBgbmV0L3Jkcy90Y3AuY2AuIExldCBtZSBxdWlja2x5IGNvbmZpcm0gaWYgdGhhdCBmdW5jdGlvbiBpcyBleHBvcnRlZCBvciBpZiBpdCdzIHN0YXRpYy4gTm9wZSwgaXQncyBub3Qgc3RhdGljLCB3aGljaCBpcyBhIGdvb2Qgc2lnbi4gTWF5YmUgYHJkc190Y3BfYWNjZXB0X29uZWAgaXMgYW4gZXZlbiBiZXR0ZXIgY2FuZGlkYXRlPyBJIHNlZSB0aGF0IGByZHNfdGNwX2FjY2VwdF9vbmVgICpjYWxscyogYHJkc190Y3BfcmVzZXRfY2FsbGJhY2tzYC4gTm93IEkgc2hvdWxkIGNoZWNrIHRoZSBjYWxsZXJzIG9mIGByZHNfdGNwX2FjY2VwdF9vbmVgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTcxMSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDAwOjI3OjAzLjQzMDkxNTc5N1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY4MTYyMTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmRzX3RjcF9hY2NlcHRfb25lXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9yZHMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9yZHMvcmRzLmg9NTQwPXN0cnVjdCByZHNfdHJhbnNwb3J0IHtcXG4tLVxcbm5ldC9yZHMvcmRzLmgtNTU0LVxcdCAqIGNvbm5fc2xvdHNfYXZhaWxhYmxlIGlzIGludm9rZWQgd2hlbiBhIHByZXZpb3VzbHkgdW5hdmFpbGFibGVcXG5uZXQvcmRzL3Jkcy5oOjU1NTpcXHQgKiBjb25uZWN0aW9uIHNsb3QgYmVjb21lcyBhdmFpbGFibGUgYWdhaW4uIHJkc190Y3BfYWNjZXB0X29uZV9wYXRoIG1heVxcbm5ldC9yZHMvcmRzLmgtNTU2LVxcdCAqIHJldHVybiAtRU5PQlVGUyBpZiBpdCBjYW5ub3QgZmluZCBhbiBhdmFpbGFibGUgc2xvdCwgYW5kIHRoZW4gc3Rhc2hlc1xcbm5ldC9yZHMvcmRzLmgtNTU3LVxcdCAqIHRoZSBuZXcgc29ja2V0IGluIFxcXCJyZHNfdGNwX2FjY2VwdGVkX3NvY2tcXFwiLiBUaGlzIGZ1bmN0aW9uIHJlLWlzc3Vlc1xcbm5ldC9yZHMvcmRzLmg6NTU4OlxcdCAqIGByZHNfdGNwX2FjY2VwdF9vbmVfcGF0aGAsIHdoaWNoIHBpY2tzIHVwIHRoZSBzdGFzaGVkIHNvY2tldCBhbmRcXG5uZXQvcmRzL3Jkcy5oLTU1OS1cXHQgKiBjb250aW51aW5nIHdoZXJlIGl0IGxlZnQgd2l0aCBcXFwiLUVOT0JVRlNcXFwiIGxhc3QgdGltZS4gIFRoaXMgZW5zdXJlc1xcbi0tXFxubmV0L3Jkcy90Y3AuYz01NzQ9c3RhdGljIHZvaWQgcmRzX3RjcF9hY2NlcHRfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbm5ldC9yZHMvdGNwLmMtNTc5LVxcbm5ldC9yZHMvdGNwLmM6NTgwOlxcdHdoaWxlIChyZHNfdGNwX2FjY2VwdF9vbmUocnRuKSA9PSAwKVxcbm5ldC9yZHMvdGNwLmMtNTgxLVxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbi0tXFxubmV0L3Jkcy90Y3AuaD04PXN0cnVjdCByZHNfdGNwX25ldCB7XFxubmV0L3Jkcy90Y3AuaDo5OlxcdC8qIHNlcmlhbGl6ZSBcXFwicmRzX3RjcF9hY2NlcHRfb25lXFxcIiB3aXRoIFxcXCJyZHNfdGNwX2FjY2VwdF9sb2NrXFxcIlxcbm5ldC9yZHMvdGNwLmgtMTAtXFx0ICogdG8gcHJvdGVjdCBcXFwicmRzX3RjcF9hY2NlcHRlZF9zb2NrXFxcIlxcbi0tXFxubmV0L3Jkcy90Y3AuaD0yNz1zdHJ1Y3QgcmRzX3RjcF9jb25uZWN0aW9uIHtcXG4tLVxcbm5ldC9yZHMvdGNwLmgtMzItXFx0LyogdF9jb25uX3BhdGhfbG9jayBzeW5jaHJvbml6ZXMgdGhlIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCBiZXR3ZWVuXFxubmV0L3Jkcy90Y3AuaDozMzpcXHQgKiByZHNfdGNwX2FjY2VwdF9vbmUgYW5kIHJkc190Y3BfY29ubl9wYXRoX2Nvbm5lY3RcXG5uZXQvcmRzL3RjcC5oLTM0LVxcdCAqL1xcbi0tXFxubmV0L3Jkcy90Y3AuaD05Mz12b2lkIHJkc190Y3BfY29ubl9zbG90c19hdmFpbGFibGUoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCBib29sIGZhbl9vdXQpO1xcbm5ldC9yZHMvdGNwLmg6OTQ6aW50IHJkc190Y3BfYWNjZXB0X29uZShzdHJ1Y3QgcmRzX3RjcF9uZXQgKnJ0bik7XFxubmV0L3Jkcy90Y3AuaC05NS12b2lkIHJkc190Y3Bfa2VlcGFsaXZlKHN0cnVjdCBzb2NrZXQgKnNvY2spO1xcbi0tXFxubmV0L3Jkcy90Y3BfbGlzdGVuLmM9NjA9cmRzX3RjcF9nZXRfcGVlcl9zcG9ydChzdHJ1Y3Qgc29ja2V0ICpzb2NrKVxcbi0tXFxubmV0L3Jkcy90Y3BfbGlzdGVuLmMtNjktXFxubmV0L3Jkcy90Y3BfbGlzdGVuLmM6NzA6LyogcmRzX3RjcF9hY2NlcHRfb25lX3BhdGgoKTogaWYgYWNjZXB0aW5nIG9uIGNwX2luZGV4IFxcdTAwM2UgMCwgbWFrZSBzdXJlIHRoZVxcbm5ldC9yZHMvdGNwX2xpc3Rlbi5jLTcxLSAqIGNsaWVudCdzIGlwYWRkciBcXHUwMDNjIHNlcnZlcidzIGlwYWRkci4gT3RoZXJ3aXNlLCBjbG9zZSB0aGUgYWNjZXB0ZWRcXG4tLVxcbm5ldC9yZHMvdGNwX2xpc3Rlbi5jPTc2PXN0YXRpYyBzdHJ1Y3QgcmRzX3RjcF9jb25uZWN0aW9uICpcXG5uZXQvcmRzL3RjcF9saXN0ZW4uYzo3NzpyZHNfdGNwX2FjY2VwdF9vbmVfcGF0aChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIHN0cnVjdCBzb2NrZXQgKnNvY2spXFxubmV0L3Jkcy90Y3BfbGlzdGVuLmMtNzgte1xcbi0tXFxubmV0L3Jkcy90Y3BfbGlzdGVuLmM9MTA4PXZvaWQgcmRzX3RjcF9jb25uX3Nsb3RzX2F2YWlsYWJsZShzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIGJvb2wgZmFuX291dClcXG4tLVxcbm5ldC9yZHMvdGNwX2xpc3Rlbi5jLTEzOC1cXHQvKiBBcyBzb29uIGFzIGEgY29ubmVjdGlvbiB3ZW50IGRvd24sXFxubmV0L3Jkcy90Y3BfbGlzdGVuLmM6MTM5OlxcdCAqIGl0IGlzIHNhZmUgdG8gc2NoZWR1bGUgYSBcXFwicmRzX3RjcF9hY2NlcHRfb25lXFxcIlxcbm5ldC9yZHMvdGNwX2xpc3Rlbi5jLTE0MC1cXHQgKiBhdHRlbXB0IGV2ZW4gaWYgdGhlcmUgYXJlIG5vIGNvbm5lY3Rpb25zIHBlbmRpbmc6XFxubmV0L3Jkcy90Y3BfbGlzdGVuLmM6MTQxOlxcdCAqIEZ1bmN0aW9uIFxcXCJyZHNfdGNwX2FjY2VwdF9vbmVcXFwiIHdvbid0IGJsb2NrXFxubmV0L3Jkcy90Y3BfbGlzdGVuLmMtMTQyLVxcdCAqIGJ1dCBzaW1wbHkgcmV0dXJuIC1FQUdBSU4gaW4gdGhhdCBjYXNlLlxcbi0tXFxubmV0L3Jkcy90Y3BfbGlzdGVuLmMtMTQ2LVxcdCAqIHRvIGJlIGFjY2VwdGVkIHByaW9yIHRvIGEgZnJlZSBzbG90IGJlaW5nIGF2YWlsYWJsZTpcXG5uZXQvcmRzL3RjcF9saXN0ZW4uYzoxNDc6XFx0ICogdGhlIC1FTk9CVUZTIGNhc2UgaW4gXFxcInJkc190Y3BfYWNjZXB0X29uZVxcXCIuXFxubmV0L3Jkcy90Y3BfbGlzdGVuLmMtMTQ4LVxcdCAqL1xcbi0tXFxubmV0L3Jkcy90Y3BfbGlzdGVuLmMtMTUxLVxcbm5ldC9yZHMvdGNwX2xpc3Rlbi5jOjE1MjppbnQgcmRzX3RjcF9hY2NlcHRfb25lKHN0cnVjdCByZHNfdGNwX25ldCAqcnRuKVxcbm5ldC9yZHMvdGNwX2xpc3Rlbi5jLTE1My17XFxuLS1cXG5uZXQvcmRzL3RjcF9saXN0ZW4uYy0yNDYtXFx0XFx0ICovXFxubmV0L3Jkcy90Y3BfbGlzdGVuLmM6MjQ3OlxcdFxcdHJzX3RjcCA9IHJkc190Y3BfYWNjZXB0X29uZV9wYXRoKGNvbm4sIG5ld19zb2NrKTtcXG5uZXQvcmRzL3RjcF9saXN0ZW4uYy0yNDgtXFx0XFx0aWYgKCFyc190Y3ApIHtcXG4tLVxcbm5ldC9yZHMvdGNwX2xpc3Rlbi5jLTI1MC1cXHRcXHRcXHQgKiBcXFwicmRzX3RjcF9jb25uX3Nsb3RzX2F2YWlsYWJsZVxcXCIgdHJpZ2dlcnNcXG5uZXQvcmRzL3RjcF9saXN0ZW4uYzoyNTE6XFx0XFx0XFx0ICogXFxcInJkc190Y3BfYWNjZXB0X29uZVxcXCIgYWdhaW4gYXMgc29vbiBhcyBvbmUgb2YgdGhlXFxubmV0L3Jkcy90Y3BfbGlzdGVuLmMtMjUyLVxcdFxcdFxcdCAqIGNvbm5lY3Rpb24gc2xvdHMgYmVjb21lcyBhdmFpbGFibGUgYWdhaW5cXG4tLVxcbm5ldC9yZHMvdGNwX2xpc3Rlbi5jLTI5NS1cXHRpZiAocnNfdGNwLVxcdTAwM2V0X3NvY2spIHtcXG5uZXQvcmRzL3RjcF9saXN0ZW4uYzoyOTY6XFx0XFx0LyogRHVlbGxpbmcgU1lOIGhhcyBiZWVuIGhhbmRsZWQgaW4gcmRzX3RjcF9hY2NlcHRfb25lKCkgKi9cXG5uZXQvcmRzL3RjcF9saXN0ZW4uYy0yOTctXFx0XFx0cmRzX3RjcF9yZXNldF9jYWxsYmFja3MobmV3X3NvY2ssIGNwKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDA6Mjc6MDMuNDc3NzM5MzMzWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4NDQzMjk5NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUkRTIENvbm5lY3Rpb24gU2h1dGRvd24gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBgcmRzX3RjcF9yZXNldF9jYWxsYmFja3NgIGlzIGxvb2tpbmcgZ29vZCDigJMgbm8gaW1tZWRpYXRlIHJlZCBmbGFncyB0aGVyZS4gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IHRoZSBjb25maWd1cmF0aW9ucyB3ZSdyZSBkZWFsaW5nIHdpdGggYXJlIGNlbnRlcmVkIGFyb3VuZCBgUkRTYCBhbmQgYFJEU19UQ1BgLiBGcm9tIHdoYXQgSSdtIHNlZWluZywgdGhlIGNvcmUgZWxlbWVudHMgaGVyZSBhcmUgcmVhbGx5IHJldm9sdmluZyBhcm91bmQgYHJkc19zZW5kX3htaXRgLCBgcmRzX3RjcF9yZXNldF9jYWxsYmFja3NgLCBhbmQgYHJkc19jb25uX3NodXRkb3duYC5cblxuVGhlIGNydXggb2YgdGhpcyBwYXRjaCBzZWVtcyB0byBhZGRyZXNzIGEgcHJldHR5IG5hc3R5IHJhY2UgY29uZGl0aW9uIHdpdGhpbiB0aGUgUkRTIGNvbm5lY3Rpb24gc2h1dGRvd24gYW5kIHJlc2V0IHNlcXVlbmNlLiBJdCBzb3VuZHMgbGlrZSB0aGVyZSB3YXMgYSBwb3RlbnRpYWwgZm9yIHRoZSBgUkRTX0lOX1hNSVRgIGFuZCBgUkRTX1JFQ1ZfUkVGSUxMYCBmbGFncyB0byBnZXQgY29ycnVwdGVkIG9yLCB3b3JzZSwgcmUtYWNxdWlyZWQgc2ltdWx0YW5lb3VzbHksIHdoaWNoIGlzIG9idmlvdXNseSBhIHByb2JsZW0uIFRoZSBmaXg/IFVzaW5nIGB0ZXN0X2FuZF9zZXRfYml0X2xvY2tgIHRvIGVuc3VyZSB0aGF0IHRoZSB0cmFuc21pdCBhbmQgcmVjZWl2ZSBwYXRocyBhcmUgcHJvcGVybHkgXCJxdWllc2NlZFwiIOKAkyB0aGF0J3MgYSBzbWFydCBhcHByb2FjaC4gQWxzbywgdGhlIHV0aWxpemF0aW9uIG9mIGB3cV9oYXNfc2xlZXBlcmAgdG8gZ3VhcmFudGVlIGEgZnVsbCBtZW1vcnkgYmFycmllciB3aGVuIHdlJ3JlIGNoZWNraW5nIHRoZSB3YWl0IHF1ZXVlIGlzIGNydWNpYWwgZm9yIHByZXZlbnRpbmcgdGhvc2Ugc3VidGxlIG1lbW9yeS1yZWxhdGVkIGlzc3Vlcy5cblxuVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBkaWdnaW5nIGRlZXAgaW50byB0aGUgY29yZSBSRFMgbmV0d29ya2luZyBsb2dpYy4gSXQncyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBhbmQgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1enppbmcgdG8gc2hha2Ugb3V0IGFueSByZW1haW5pbmcgaXNzdWVzLiBJJ2xsIHVzZSBgc2V0LXJlc3VsdHNgIHRvIHRyYWNrIG15IHdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNjM4LCJPdXRwdXRUb2tlbnMiOjE2NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQwMDoyNzowOC4zMjIwNzE5NzRaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjA5OTY5MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUkRTXCIsXG4gICAgXCJSRFNfVENQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicmRzX3NlbmRfeG1pdFwiLFxuICAgIFwicmRzX3RjcF9yZXNldF9jYWxsYmFja3NcIixcbiAgICBcInJkc19jb25uX3NodXRkb3duXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBkdXJpbmcgUkRTIGNvbm5lY3Rpb24gc2h1dGRvd24gYW5kIHJlc2V0LCB3aGVyZSB0aGUgUkRTX0lOX1hNSVQgYW5kIFJEU19SRUNWX1JFRklMTCBmbGFncyBjb3VsZCBiZSBjbG9iYmVyZWQgb3IgcmUtYWNxdWlyZWQgY29uY3VycmVudGx5LiBJdCB1c2VzIHRlc3RfYW5kX3NldF9iaXRfbG9jayB0byBwcm9wZXJseSBxdWllc2NlIHRoZSB0cmFuc21pdCBhbmQgcmVjZWl2ZSBwYXRocywgYW5kIHdxX2hhc19zbGVlcGVyIHRvIGVuc3VyZSBhIGZ1bGwgbWVtb3J5IGJhcnJpZXIgd2hlbiBjaGVja2luZyB0aGUgd2FpdCBxdWV1ZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIFJEUyBuZXR3b3JraW5nIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlJEU1wiLFxuICAgIFwiUkRTX1RDUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJkc19zZW5kX3htaXRcIixcbiAgICBcInJkc190Y3BfcmVzZXRfY2FsbGJhY2tzXCIsXG4gICAgXCJyZHNfY29ubl9zaHV0ZG93blwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gZHVyaW5nIFJEUyBjb25uZWN0aW9uIHNodXRkb3duIGFuZCByZXNldCwgd2hlcmUgdGhlIFJEU19JTl9YTUlUIGFuZCBSRFNfUkVDVl9SRUZJTEwgZmxhZ3MgY291bGQgYmUgY2xvYmJlcmVkIG9yIHJlLWFjcXVpcmVkIGNvbmN1cnJlbnRseS4gSXQgdXNlcyB0ZXN0X2FuZF9zZXRfYml0X2xvY2sgdG8gcHJvcGVybHkgcXVpZXNjZSB0aGUgdHJhbnNtaXQgYW5kIHJlY2VpdmUgcGF0aHMsIGFuZCB3cV9oYXNfc2xlZXBlciB0byBlbnN1cmUgYSBmdWxsIG1lbW9yeSBiYXJyaWVyIHdoZW4gY2hlY2tpbmcgdGhlIHdhaXQgcXVldWUuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBSRFMgbmV0d29ya2luZyBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDA6Mjc6MDguMzk4MTc3MjM2WiIsIlNlcSI6MjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NzgwODU4OTEzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDA6Mjc6MDguMzk4NzEyNjI2WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjg3ODAzMTk4NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiS01TQU4gaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGRldGVjdCB1c2VzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlLiBUaGlzIHBhdGNoIGZvY3VzZXMgZW50aXJlbHkgb24gZml4aW5nIGNvbmN1cnJlbmN5IGFuZCBzeW5jaHJvbml6YXRpb24gaXNzdWVzIHdpdGhpbiB0aGUgUkRTIHN1YnN5c3RlbS4gSXQgcmVwbGFjZXMgbm9uLWF0b21pYyBiaXQgY2xlYXJzIHdpdGggYXRvbWljIG9wZXJhdGlvbnMsIHVzZXMgYml0IGxvY2tzIChgdGVzdF9hbmRfc2V0X2JpdF9sb2NrYCkgdG8gcHJvcGVybHkgcXVpZXNjZSB0cmFuc21pdCBhbmQgcmVjZWl2ZSBwYXRocywgYW5kIGFkZHMgbWVtb3J5IGJhcnJpZXJzIChgd3FfaGFzX3NsZWVwZXJgKSB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9ucyBhbmQgbG9zdCB3YWtlLXVwcy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBtb2RpZnkgbWVtb3J5IGFsbG9jYXRpb25zLCBvciBhbHRlciBkYXRhIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIHNlbnQgb3ZlciB0aGUgbmV0d29yay4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgZXhwb3NlZCBieSB0aGVzZSBjaGFuZ2VzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIGJlIGNvbmN1cnJlbmN5IGlzc3VlcywgcmFjZSBjb25kaXRpb25zLCBvciBkZWFkbG9ja3MsIHdoaWNoIGFyZSBiZXN0IGNhdWdodCBieSBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIGxpa2UgS0FTQU4sIEtDU0FOLCBhbmQgTE9DS0RFUC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiZTgyYWZiNjljZGUxYjVlNDQzZjAzZTdmZjIyN2I5NmZiZjUzZjE1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBBdWcgMTYgMDA6MjY6MzEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvcmRzL2Nvbm5lY3Rpb24uYyBiL25ldC9yZHMvY29ubmVjdGlvbi5jXG5pbmRleCA3YzhhYjhlOTczZTFiLi5hMTBiNjY3YzA2Yzg3IDEwMDY0NFxuLS0tIGEvbmV0L3Jkcy9jb25uZWN0aW9uLmNcbisrKyBiL25ldC9yZHMvY29ubmVjdGlvbi5jXG5AQCAtMTIwLDcgKzEyMCwxNSBAQCBzdGF0aWMgdm9pZCByZHNfY29ubl9wYXRoX3Jlc2V0KHN0cnVjdCByZHNfY29ubl9wYXRoICpjcClcbiBcbiBcdHJkc19zdGF0c19pbmMoc19jb25uX3Jlc2V0KTtcbiBcdHJkc19zZW5kX3BhdGhfcmVzZXQoY3ApO1xuLVx0Y3AtXHUwMDNlY3BfZmxhZ3MgPSAwO1xuK1xuK1x0LyogQ2xlYXIgdGhlIGJpdHMgdGhlIHJlc2V0IGlzIHJlc3BvbnNpYmxlIGZvciBpbmRpdmlkdWFsbHk6IGFcbitcdCAqIGJsYW5rZXQgY3BfZmxhZ3MgPSAwIGlzIGEgcGxhaW4gc3RvcmUgdGhhdCBjYW4gY2xvYmJlciBhXG4rXHQgKiBjb25jdXJyZW50IGF0b21pYyByZWFkLW1vZGlmeS13cml0ZSBvbiB0aGUgc2FtZSB3b3JkLlxuK1x0ICogUkRTX0lOX1hNSVQgYW5kIFJEU19SRUNWX1JFRklMTCBhcmUgb3duZWQgYnkgdGhlIGNhbGxlcixcbitcdCAqIHdoaWNoIHJlbGVhc2VzIHRoZW0gb25jZSB0aGUgdGVhcmRvd24gaXMgY29tcGxldGUuXG4rXHQgKi9cbitcdGNsZWFyX2JpdChSRFNfTExfU0VORF9GVUxMLCBcdTAwMjZjcC1cdTAwM2VjcF9mbGFncyk7XG4rXHRjbGVhcl9iaXQoUkRTX1JFQ09OTkVDVF9QRU5ESU5HLCBcdTAwMjZjcC1cdTAwM2VjcF9mbGFncyk7XG4gXG4gXHQvKiBEbyBub3QgY2xlYXIgbmV4dF9yeF9zZXEgaGVyZSwgZWxzZSB3ZSBjYW5ub3QgZGlzdGluZ3Vpc2hcbiBcdCAqIHJldHJhbnNtaXR0ZWQgcGFja2V0cyBmcm9tIG5ldyBwYWNrZXRzLCBhbmQgd2lsbCBoYW5kIGFsbFxuQEAgLTQwNiwxNCArNDE0LDMyIEBAIHZvaWQgcmRzX2Nvbm5fc2h1dGRvd24oc3RydWN0IHJkc19jb25uX3BhdGggKmNwKVxuIFx0XHR9XG4gXHRcdG11dGV4X3VubG9jayhcdTAwMjZjcC1cdTAwM2VjcF9jbV9sb2NrKTtcbiBcbitcdFx0LyogUXVpZXNjZSB0aGUgdHJhbnNtaXQgYW5kIHJlY2VpdmUtcmVmaWxsIHBhdGhzIGJ5XG4rXHRcdCAqIGFjcXVpcmluZyB0aGVpciBiaXQgbG9ja3MsIG5vdCBtZXJlbHkgd2FpdGluZyBmb3JcbitcdFx0ICogdGhlbSB0byBiZSByZWxlYXNlZDogd2l0aCBhIHBsYWluIHdhaXQsIGVpdGhlciBwYXRoXG4rXHRcdCAqIGNhbiByZS10YWtlIGl0cyBsb2NrIHRoZSBpbnN0YW50IGFmdGVyIHdlIHNhbXBsZSBpdFxuK1x0XHQgKiBjbGVhciBhbmQgdGhlbiBydW4gY29uY3VycmVudGx5IHdpdGggdGhlIHRyYW5zcG9ydFxuK1x0XHQgKiBzaHV0ZG93biBhbmQgdGhlIHBhdGggcmVzZXQgYmVsb3cuICBIb2xkaW5nIGJvdGhcbitcdFx0ICogbG9ja3MgYWNyb3NzIHRoZSB0ZWFyZG93biBtYWtlcyB0aGF0IHN0cnVjdHVyYWxseVxuK1x0XHQgKiBpbXBvc3NpYmxlLlxuK1x0XHQgKi9cbiBcdFx0d2FpdF9ldmVudChjcC1cdTAwM2VjcF93YWl0cSxcbi1cdFx0XHQgICAhdGVzdF9iaXQoUkRTX0lOX1hNSVQsIFx1MDAyNmNwLVx1MDAzZWNwX2ZsYWdzKSk7XG4rXHRcdFx0ICAgIXRlc3RfYW5kX3NldF9iaXRfbG9jayhSRFNfSU5fWE1JVCwgXHUwMDI2Y3AtXHUwMDNlY3BfZmxhZ3MpKTtcbiBcdFx0d2FpdF9ldmVudChjcC1cdTAwM2VjcF93YWl0cSxcbi1cdFx0XHQgICAhdGVzdF9iaXQoUkRTX1JFQ1ZfUkVGSUxMLCBcdTAwMjZjcC1cdTAwM2VjcF9mbGFncykpO1xuK1x0XHRcdCAgICF0ZXN0X2FuZF9zZXRfYml0KFJEU19SRUNWX1JFRklMTCwgXHUwMDI2Y3AtXHUwMDNlY3BfZmxhZ3MpKTtcbiBcbiBcdFx0Y29ubi1cdTAwM2VjX3RyYW5zLVx1MDAzZWNvbm5fcGF0aF9zaHV0ZG93bihjcCk7XG4gXHRcdHJkc19jb25uX3BhdGhfcmVzZXQoY3ApO1xuIFxuK1x0XHQvKiBSZWxlYXNlIHRoZSB0d28gbG9ja3MgYW5kIHdha2UgYW55IHdhaXRlciAoZS5nLlxuK1x0XHQgKiByZHNfdGNwX3Jlc2V0X2NhbGxiYWNrcygpKSB0aGF0IGJsb2NrZWQgb24gdGhlbSB3aGlsZVxuK1x0XHQgKiB3ZSBoZWxkIHRoZW0uICByZHNfY29ubl9wYXRoX3Jlc2V0KCkgbGVhdmVzIGJvdGggYml0c1xuK1x0XHQgKiBhbG9uZTogb3duZXJzaGlwIGVuZHMgaGVyZSwgbm90IGluc2lkZSB0aGUgcmVzZXQuXG4rXHRcdCAqL1xuK1x0XHRjbGVhcl9iaXRfdW5sb2NrKFJEU19JTl9YTUlULCBcdTAwMjZjcC1cdTAwM2VjcF9mbGFncyk7XG4rXHRcdGNsZWFyX2JpdChSRFNfUkVDVl9SRUZJTEwsIFx1MDAyNmNwLVx1MDAzZWNwX2ZsYWdzKTtcbitcdFx0d2FrZV91cF9hbGwoXHUwMDI2Y3AtXHUwMDNlY3Bfd2FpdHEpO1xuK1xuIFx0XHRpZiAoIXJkc19jb25uX3BhdGhfdHJhbnNpdGlvbihjcCwgUkRTX0NPTk5fRElTQ09OTkVDVElORyxcbiBcdFx0XHRcdFx0ICAgICAgUkRTX0NPTk5fRE9XTikgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICAhcmRzX2Nvbm5fcGF0aF90cmFuc2l0aW9uKGNwLCBSRFNfQ09OTl9FUlJPUixcbmRpZmYgLS1naXQgYS9uZXQvcmRzL3NlbmQuYyBiL25ldC9yZHMvc2VuZC5jXG5pbmRleCAxNWExYjk3ZjEzZTc2Li5iOTBlMDU4NmY4MThjIDEwMDY0NFxuLS0tIGEvbmV0L3Jkcy9zZW5kLmNcbisrKyBiL25ldC9yZHMvc2VuZC5jXG5AQCAtMTE0LDggKzExNCwxMyBAQCBzdGF0aWMgdm9pZCByZWxlYXNlX2luX3htaXQoc3RydWN0IHJkc19jb25uX3BhdGggKmNwKVxuIFx0ICogaG90IHBhdGggYW5kIGZpbmRpbmcgd2FpdGVycyBpcyB2ZXJ5IHJhcmUuICBXZSBkb24ndCB3YW50IHRvIHdhbGtcbiBcdCAqIHRoZSBzeXN0ZW0td2lkZSBoYXNoZWQgd2FpdHF1ZXVlIGJ1Y2tldHMgaW4gdGhlIGZhc3QgcGF0aCBvbmx5IHRvXG4gXHQgKiBhbG1vc3QgbmV2ZXIgZmluZCB3YWl0ZXJzLlxuK1x0ICpcbitcdCAqIHdxX2hhc19zbGVlcGVyKCkgc3VwcGxpZXMgdGhlIGZ1bGwgYmFycmllciB0aGF0IG9yZGVycyB0aGUgd2FpdFxuK1x0ICogcXVldWUgcmVhZCBhZnRlciB0aGUgYml0IGNsZWFyOyBjbGVhcl9iaXRfdW5sb2NrKCkgYWxvbmUgaXMgb25seVxuK1x0ICogYSByZWxlYXNlIGFuZCB3b3VsZCBsZXQgdGhpcyBjaGVjayByZWFkIGEgc3RhbGUgZW1wdHkgcXVldWUsXG4rXHQgKiBsb3NpbmcgdGhlIHdha2UtdXAuXG4gXHQgKi9cbi1cdGlmICh3YWl0cXVldWVfYWN0aXZlKFx1MDAyNmNwLVx1MDAzZWNwX3dhaXRxKSlcbitcdGlmICh3cV9oYXNfc2xlZXBlcihcdTAwMjZjcC1cdTAwM2VjcF93YWl0cSkpXG4gXHRcdHdha2VfdXBfYWxsKFx1MDAyNmNwLVx1MDAzZWNwX3dhaXRxKTtcbiB9XG4gXG5AQCAtMjM5LDggKzI0NCw5IEBAIGludCByZHNfc2VuZF94bWl0KHN0cnVjdCByZHNfY29ubl9wYXRoICpjcClcbiBcdFdSSVRFX09OQ0UoY3AtXHUwMDNlY3Bfc2VuZF9nZW4sIHNlbmRfZ2VuKTtcbiBcbiBcdC8qXG4tXHQgKiByZHNfY29ubl9zaHV0ZG93bigpIHNldHMgdGhlIGNvbm4gc3RhdGUgYW5kIHRoZW4gdGVzdHMgUkRTX0lOX1hNSVQsXG4tXHQgKiB3ZSBkbyB0aGUgb3Bwb3NpdGUgdG8gYXZvaWQgcmFjZXMuXG4rXHQgKiByZHNfY29ubl9zaHV0ZG93bigpIHNldHMgdGhlIGNvbm4gc3RhdGUgYW5kIHRoZW4gYWNxdWlyZXNcbitcdCAqIFJEU19JTl9YTUlUOyB3ZSB0YWtlIHRoZSBsb2NrIGZpcnN0IGFuZCB0aGVuIGNoZWNrIHRoZSBzdGF0ZSxcbitcdCAqIHNvIG9uZSBvZiB1cyBpcyBndWFyYW50ZWVkIHRvIHNlZSB0aGUgb3RoZXIncyB1cGRhdGUuXG4gXHQgKi9cbiBcdGlmICghcmRzX2Nvbm5fcGF0aF91cChjcCkpIHtcbiBcdFx0cmVsZWFzZV9pbl94bWl0KGNwKTtcbmRpZmYgLS1naXQgYS9uZXQvcmRzL3RjcC5jIGIvbmV0L3Jkcy90Y3AuY1xuaW5kZXggYjI2MzYzNGFjNzUwZC4uMWZmOWU4NDZkZmM3YyAxMDA2NDRcbi0tLSBhL25ldC9yZHMvdGNwLmNcbisrKyBiL25ldC9yZHMvdGNwLmNcbkBAIC0xMTUsNDUgKzExNSw2NiBAQCB2b2lkIHJkc190Y3BfcmVzdG9yZV9jYWxsYmFja3Moc3RydWN0IHNvY2tldCAqc29jayxcbiB9XG4gXG4gLypcbi0gKiByZHNfdGNwX3Jlc2V0X2NhbGxiYWNrcygpIHN3aXRjaGVzIHRoZSB0byB0aGUgbmV3IHNvY2sgYW5kXG4tICogcmV0dXJucyB0aGUgZXhpc3RpbmcgdGMtXHUwMDNldF9zb2NrLlxuKyAqIHJkc190Y3BfcmVzZXRfY2FsbGJhY2tzKCkgc3dpdGNoZXMgYSBwYXRoIHRvIGEgbmV3IHNvY2tldCBhbmRcbisgKiByZWxlYXNlcyB0aGUgb2xkIG9uZSBpdCBmaW5kcyBpbiB0Yy1cdTAwM2V0X3NvY2ssIHJlc29sdmluZyBhIGR1ZWxsaW5nXG4rICogU1lOLlxuICAqXG4tICogVGhlIG9ubHkgZnVuY3Rpb25zIHRoYXQgc2V0IHRjLVx1MDAzZXRfc29jayBhcmUgcmRzX3RjcF9zZXRfY2FsbGJhY2tzXG4tICogYW5kIHJkc190Y3BfcmVzZXRfY2FsbGJhY2tzLiAgU2VuZCBhbmQgcmVjZWl2ZSB0cnVzdCB0aGF0XG4tICogaXQgaXMgc2V0LiAgVGhlIGFic2VuY2Ugb2YgUkRTX0NPTk5fVVAgYml0IHByb3RlY3RzIHRob3NlIHBhdGhzXG4tICogZnJvbSBiZWluZyBjYWxsZWQgd2hpbGUgaXQgaXNuJ3Qgc2V0LlxuKyAqIHRjLVx1MDAzZXRfc29jayBpcyBzZXQgYnkgcmRzX3RjcF9zZXRfY2FsbGJhY2tzKCkgYW5kIGNsZWFyZWQgYnlcbisgKiByZHNfdGNwX3Jlc3RvcmVfY2FsbGJhY2tzKCksIGZyb20gcmRzX3RjcF9jb25uX3BhdGhfc2h1dGRvd24oKSBhbmRcbisgKiBmcm9tIGhlcmUuICBTZW5kIGFuZCByZWNlaXZlIHRydXN0IHRoYXQgaXQgaXMgc2V0OiB0aGUgYWJzZW5jZSBvZlxuKyAqIFJEU19DT05OX1VQIHByb3RlY3RzIHRob3NlIHBhdGhzIGZyb20gYmVpbmcgY2FsbGVkIHdoaWxlIGl0IGlzbid0LFxuKyAqIGFuZCB0aGUgc3dhcCBkb25lIGhlcmUgcnVucyB1bmRlciBSRFNfSU5fWE1JVCBzbyB0aGF0IGl0IGNhbm5vdFxuKyAqIGludGVybGVhdmUgd2l0aCBhIHNlbmRlciBhbHJlYWR5IGluc2lkZSByZHNfc2VuZF94bWl0KCkuXG4gICovXG4gdm9pZCByZHNfdGNwX3Jlc2V0X2NhbGxiYWNrcyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxuIFx0XHRcdCAgICAgc3RydWN0IHJkc19jb25uX3BhdGggKmNwKVxuIHtcbiBcdHN0cnVjdCByZHNfdGNwX2Nvbm5lY3Rpb24gKnRjID0gY3AtXHUwMDNlY3BfdHJhbnNwb3J0X2RhdGE7XG4tXHRzdHJ1Y3Qgc29ja2V0ICpvc29jayA9IHRjLVx1MDAzZXRfc29jaztcbi1cbi1cdGlmICghb3NvY2spXG4tXHRcdGdvdG8gbmV3c29jaztcbitcdHN0cnVjdCBzb2NrZXQgKm9zb2NrO1xuIFxuIFx0LyogTmVlZCB0byByZXNvbHZlIGEgZHVlbGxpbmcgU1lOIGJldHdlZW4gcGVlcnMuXG4gXHQgKiBXZSBoYXZlIGFuIG91dHN0YW5kaW5nIFNZTiB0byB0aGlzIHBlZXIsIHdoaWNoIG1heVxuIFx0ICogcG90ZW50aWFsbHkgaGF2ZSB0cmFuc2l0aW9uZWQgdG8gdGhlIFJEU19DT05OX1VQIHN0YXRlLFxuIFx0ICogc28gd2UgbXVzdCBxdWllc2NlIGFueSBzZW5kIHRocmVhZHMgYmVmb3JlIHJlc2V0dGluZ1xuLVx0ICogY3BfdHJhbnNwb3J0X2RhdGEuIFdlIHF1aWVzY2UgdGhlc2UgdGhyZWFkcyBieSBzZXR0aW5nXG4tXHQgKiBjcF9zdGF0ZSB0byBzb21ldGhpbmcgb3RoZXIgdGhhbiBSRFNfQ09OTl9VUCwgYW5kIHRoZW5cbi1cdCAqIHdhaXRpbmcgZm9yIGFueSBleGlzdGluZyB0aHJlYWRzIGluIHJkc19zZW5kX3htaXQgdG9cbi1cdCAqIGNvbXBsZXRlIHJlbGVhc2VfaW5feG1pdCgpLiAoU3Vic2VxdWVudCB0aHJlYWRzIGVudGVyaW5nXG4tXHQgKiByZHNfc2VuZF94bWl0KCkgd2lsbCBiYWlsIG9uICFyZHNfY29ubl91cCgpLlxuK1x0ICogY3BfdHJhbnNwb3J0X2RhdGEuICBTZXR0aW5nIGNwX3N0YXRlIHRvIHNvbWV0aGluZyBvdGhlclxuK1x0ICogdGhhbiBSRFNfQ09OTl9VUCBzdG9wcyBuZXcgc2VuZGVycywgYW5kIG93bmluZyBSRFNfSU5fWE1JVFxuK1x0ICogZXhjbHVkZXMgYW55IHRocmVhZCBhbHJlYWR5IGluc2lkZSByZHNfc2VuZF94bWl0KCkgZm9yIHRoZVxuK1x0ICogd2hvbGUgc29ja2V0IHN3YXAgYW5kIHRoZSByZHNfc2VuZF9wYXRoX3Jlc2V0KCkgYmVsb3cuXG4gXHQgKlxuLVx0ICogSG93ZXZlciBhbiBpbmNvbWluZyBzeW4tYWNrIGF0IHRoaXMgcG9pbnQgd291bGQgZW5kIHVwXG4tXHQgKiBtYXJraW5nIHRoZSBjb25uIGFzIFJEU19DT05OX1VQLCBhbmQgd291bGQgYWdhaW4gcGVybWl0XG4tXHQgKiByZHNfc2VuZF94bWkoKSB0aHJlYWRzIHRocm91Z2gsIHNvIGlkZWFsbHkgd2Ugd291bGRcbi1cdCAqIHN5bmNocm9uaXplIG9uIFJEU19DT05OX1VQIGFmdGVyIGxvY2tfc29jaygpLCBidXQgY2Fubm90XG4tXHQgKiBkbyB0aGF0OiB3YWl0aW5nIG9uICFSRFNfSU5fWE1JVCBhZnRlciBsb2NrX3NvY2soKSBtYXlcbi1cdCAqIGVuZCB1cCBkZWFkbG9ja2luZyB3aXRoIHRjcF9zZW5kbXNnKCksIGFuZCB0aGUgUkRTX0lOX1hNSVRcbi1cdCAqIHdvdWxkIG5vdCBnZXQgc2V0LiBBcyBhIHJlc3VsdCwgd2Ugc2V0IGNfc3RhdGUgdG9cbi1cdCAqIFJEU19DT05OX1JFU0VUVFRJTkcsIHRvIGVuc3VyZSB0aGF0IHJkc190Y3Bfc3RhdGVfY2hhbmdlXG4tXHQgKiBjYW5ub3QgbWFyayByZHNfY29ubl9wYXRoX3VwKCkgaW4gdGhlIHdpbmRvdyBiZWZvcmUgbG9ja19zb2NrKClcbitcdCAqIEFuIGluY29taW5nIHN5bi1hY2sgYXQgdGhpcyBwb2ludCB3b3VsZCBlbmQgdXAgbWFya2luZyB0aGVcbitcdCAqIGNvbm4gYXMgUkRTX0NPTk5fVVAsIGFuZCB3b3VsZCBhZ2FpbiBwZXJtaXQgcmRzX3NlbmRfeG1pdCgpXG4rXHQgKiB0aHJlYWRzIHRocm91Z2gsIHNvIGlkZWFsbHkgd2Ugd291bGQgc3luY2hyb25pemUgb25cbitcdCAqIFJEU19DT05OX1VQIGFmdGVyIGxvY2tfc29jaygpLCBidXQgY2Fubm90IGRvIHRoYXQ6IGFjcXVpcmluZ1xuK1x0ICogUkRTX0lOX1hNSVQgYWZ0ZXIgbG9ja19zb2NrKCkgbWF5IGVuZCB1cCBkZWFkbG9ja2luZyB3aXRoXG4rXHQgKiB0Y3Bfc2VuZG1zZygpLCB3aGljaCB0YWtlcyB0aGUgc29ja2V0IGxvY2sgd2hpbGUgaG9sZGluZ1xuK1x0ICogUkRTX0lOX1hNSVQuICBBcyBhIHJlc3VsdCwgd2Ugc2V0IGNfc3RhdGUgdG9cbitcdCAqIFJEU19DT05OX1JFU0VUVElORywgdG8gZW5zdXJlIHRoYXQgcmRzX3RjcF9zdGF0ZV9jaGFuZ2VcbitcdCAqIGNhbm5vdCBtYXJrIHJkc19jb25uX3BhdGhfdXAoKSBpbiB0aGUgd2luZG93IGJlZm9yZVxuK1x0ICogbG9ja19zb2NrKCkuXG4rXHQgKlxuK1x0ICogT25seSBtYWtlIHRoYXQgdHJhbnNpdGlvbiBpZiB0aGUgcGF0aCBpcyBzdGlsbCBjb25uZWN0aW5nXG4rXHQgKiAob3IgYWxyZWFkeSByZXNldHRpbmcgZnJvbSBhbiBlYXJsaWVyIGR1ZWwpLCBzbyB0aGF0IGFcbitcdCAqIGNvbmN1cnJlbnQgc2h1dGRvd24ncyBSRFNfQ09OTl9FUlJPUi9SRFNfQ09OTl9ESVNDT05ORUNUSU5HXG4rXHQgKiBpcyBub3Qgb3ZlcndyaXR0ZW47IGEgcGF0aCBpbiBhbnkgb3RoZXIgc3RhdGUgaXMgZHJvcHBlZFxuK1x0ICogYW5kIGl0cyBwZW5kaW5nIHNodXRkb3duIHdpbnMuXG4rXHQgKi9cbitcdGlmICghcmRzX2Nvbm5fcGF0aF90cmFuc2l0aW9uKGNwLCBSRFNfQ09OTl9DT05ORUNUSU5HLFxuK1x0XHRcdFx0ICAgICAgUkRTX0NPTk5fUkVTRVRUSU5HKSBcdTAwMjZcdTAwMjZcbitcdCAgICAhcmRzX2Nvbm5fcGF0aF90cmFuc2l0aW9uKGNwLCBSRFNfQ09OTl9SRVNFVFRJTkcsXG4rXHRcdFx0XHQgICAgICBSRFNfQ09OTl9SRVNFVFRJTkcpKVxuK1x0XHRyZHNfY29ubl9wYXRoX2Ryb3AoY3AsIDApO1xuK1x0d2FpdF9ldmVudChjcC1cdTAwM2VjcF93YWl0cSxcbitcdFx0ICAgIXRlc3RfYW5kX3NldF9iaXRfbG9jayhSRFNfSU5fWE1JVCwgXHUwMDI2Y3AtXHUwMDNlY3BfZmxhZ3MpKTtcbitcbitcdC8qIFJlYWQgdF9zb2NrIG9ubHkgd2hpbGUgb3duaW5nIFJEU19JTl9YTUlULiAgVGhlIHRlYXJkb3duIGluXG4rXHQgKiByZHNfY29ubl9zaHV0ZG93bigpIHJlbGVhc2VzIHRoZSBvbGQgc29ja2V0IGFuZCBjbGVhcnNcbitcdCAqIHRfc29jaywgc28gYSBwb2ludGVyIHNhbXBsZWQgYmVmb3JlIHRoZSB3YWl0IGNhbiBiZSBzdGFsZVxuK1x0ICogYnkgdGhlIHRpbWUgd2Ugd2FrZSB1cC5cbiBcdCAqL1xuLVx0YXRvbWljX3NldChcdTAwMjZjcC1cdTAwM2VjcF9zdGF0ZSwgUkRTX0NPTk5fUkVTRVRUSU5HKTtcbi1cdHdhaXRfZXZlbnQoY3AtXHUwMDNlY3Bfd2FpdHEsICF0ZXN0X2JpdChSRFNfSU5fWE1JVCwgXHUwMDI2Y3AtXHUwMDNlY3BfZmxhZ3MpKTtcbitcdG9zb2NrID0gdGMtXHUwMDNldF9zb2NrO1xuK1x0aWYgKCFvc29jaylcbitcdFx0Z290byBuZXdzb2NrO1xuK1xuIFx0LyogcmVzZXQgcmVjZWl2ZSBzaWRlIHN0YXRlIGZvciByZHNfdGNwX2RhdGFfcmVjdigpIGZvciBvc29jayAgKi9cbiBcdGNhbmNlbF9kZWxheWVkX3dvcmtfc3luYyhcdTAwMjZjcC1cdTAwM2VjcF9zZW5kX3cpO1xuIFx0Y2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKFx1MDAyNmNwLVx1MDAzZWNwX3JlY3Zfdyk7XG5AQCAtMTcyLDYgKzE5Myw5IEBAIHZvaWQgcmRzX3RjcF9yZXNldF9jYWxsYmFja3Moc3RydWN0IHNvY2tldCAqc29jayxcbiBcdGxvY2tfc29jayhzb2NrLVx1MDAzZXNrKTtcbiBcdHJkc190Y3Bfc2V0X2NhbGxiYWNrcyhzb2NrLCBjcCk7XG4gXHRyZWxlYXNlX3NvY2soc29jay1cdTAwM2Vzayk7XG4rXG4rXHRjbGVhcl9iaXRfdW5sb2NrKFJEU19JTl9YTUlULCBcdTAwMjZjcC1cdTAwM2VjcF9mbGFncyk7XG4rXHR3YWtlX3VwX2FsbChcdTAwMjZjcC1cdTAwM2VjcF93YWl0cSk7XG4gfVxuIFxuIC8qIEFkZCB0YyB0byByZHNfdGNwX3RjX2xpc3QgYW5kIHNldCB0Yy1cdTAwM2V0X3NvY2suIFNlZSBjb21tZW50c1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDA6Mjc6MDguMzk4NzEzNDE2WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg3ODAyOTcwNzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUkRTIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBsb29rZWQgb3ZlciB0aGlzIHBhdGNoLiBJdCdzIHRvdWNoaW5nIGBuZXQvcmRzL2Nvbm5lY3Rpb24uY2AsIGBuZXQvcmRzL3NlbmQuY2AsIGFuZCBgbmV0L3Jkcy90Y3AuY2AsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBob3cgdGhlIGBjcC1cdTAwM2VjcF9mbGFnc2AgYml0IGZsYWdzIChsaWtlIGBSRFNfSU5fWE1JVGAsIGBSRFNfUkVDVl9SRUZJTExgLCBldGMuKSBhcmUgbWFuYWdlZC4gVGhlIGtleSBjaGFuZ2UgaXMgdGhlIHJlcGxhY2VtZW50IG9mIGJhc2ljIGJpdCBtYW5pcHVsYXRpb24gd2l0aCBhdG9taWMgb3BlcmF0aW9ucyB1c2luZyBgdGVzdF9hbmRfc2V0X2JpdF9sb2NrYCBhbmQgYGNsZWFyX2JpdF91bmxvY2tgLCBhbmQgdGhlIHN3YXAgb3V0IG9mIGB3YWl0cXVldWVfYWN0aXZlYCB3aXRoIGB3cV9oYXNfc2xlZXBlcmAgdG8gbWFrZSBzdXJlIG1lbW9yeSBiYXJyaWVycyBhcmUgd29ya2luZyBjb3JyZWN0bHkuIEFsc28sIGl0IHVwZGF0ZXMgYHJkc190Y3BfcmVzZXRfY2FsbGJhY2tzYCB0byBwcm9wZXJseSBoYW5kbGUgc29ja2V0IHN3YXBwaW5nIHdoZW4gYFJEU19JTl9YTUlUYCBpcyBhY3RpdmUuXG5cbkJhc2ljYWxseSwgdGhpcyBpcyBhbGwgYWJvdXQgZml4aW5nIGNvbmN1cnJlbmN5IHByb2JsZW1zIGluIHRoZSBSZWxpYWJsZSBEYXRhZ3JhbSBTb2NrZXRzIChSRFMpIHN1YnN5c3RlbS4gVGhpbmdzIGxpa2UgcmFjZSBjb25kaXRpb25zLCBwb3RlbnRpYWwgZGVhZGxvY2tzLCBhbmQgbWlzc2VkIHdha2UtdXBzIGFyZSB0aGUgdGFyZ2V0cyBoZXJlLiBJIGNhbiBzZWUgbm8gY2hhbmdlcyB0aGF0IGNyZWF0ZSBuZXcgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vIG5ldyBhbGxvY2F0aW9ucywgbm8gY2hhbmdlcyB0byBib3VuZHMgY2hlY2tzIG9yIGxlbmd0aHMgdGhhdCB3b3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFN0YW5kYXJkIHRlc3RpbmcsIEtBU0FOLCBvciBMT0NLREVQIOKAkyBlc3BlY2lhbGx5IGlmIHN0YW5kYXJkIGxvY2tzIHdlcmUgaW52b2x2ZWQgKGFsdGhvdWdoLCB0aGV5IGFyZSBiaXQgbG9ja3MgaGVyZSksIHdvdWxkIHBpY2sgdXAgb24gdGhlc2Ugc29ydHMgb2YgY29uY3VycmVuY3kgaXNzdWVzLlxuXG5TbywgZ2l2ZW4gdGhhdCwgSSdtIHByZXR0eSBjb25maWRlbnQgdGhhdCB0aGlzIHBhdGNoIGRvZXNuJ3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLlxuXG5MZXQncyBxdWlja2x5IHJlY2FwIHRoZSBrZXkgY2hhbmdlcyBhZ2FpbiB0byBjb25maXJtOlxuXG4qICAgYHJkc19jb25uX3BhdGhfcmVzZXRgIG5vdyBjbGVhcnMgc3BlY2lmaWMgYml0cyBpbnN0ZWFkIG9mIHdpcGluZyBgY3AtXHUwMDNlY3BfZmxhZ3NgIHRvIGF2b2lkIGNsb2JiZXJpbmcgY29uY3VycmVudCBhdG9taWMgcmVhZC1tb2RpZnktd3JpdGUuXG4qICAgYHJkc19jb25uX3NodXRkb3duYCB1c2VzIGB0ZXN0X2FuZF9zZXRfYml0X2xvY2tgIGFuZCBgdGVzdF9hbmRfc2V0X2JpdGAgdG8gcXVpZXNjZSB0cmFuc21pdCBhbmQgcmVjZWl2ZS1yZWZpbGwgcGF0aHMgcHJldmVudGluZyBjb25jdXJyZW5jeVxuKiAgIGByZWxlYXNlX2luX3htaXRgIG5vdyB1c2VzIGB3cV9oYXNfc2xlZXBlcmAgaW5zdGVhZCBvZiBgd2FpdHF1ZXVlX2FjdGl2ZWAsIHdoaWNoIHByb3ZpZGVzIGEgbWVtb3J5IGJhcnJpZXJcbiogICBgcmRzX3RjcF9yZXNldF9jYWxsYmFja3NgIHVzZXMgYHRlc3RfYW5kX3NldF9iaXRfbG9ja2AgdG8gYWNxdWlyZSBgUkRTX0lOX1hNSVRgIGJlZm9yZSByZWFkaW5nIGB0Yy1cdTAwM2V0X3NvY2tgIGFuZCBzd2FwcGluZyBzb2NrZXRzLlxuXG5BbGwgb2YgdGhlc2UgYXJlIHN0cmljdGx5IHJlbGF0ZWQgdG8gc3luY2hyb25pemF0aW9uIGFuZCBjb25jdXJyZW5jeSDigJMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgaW4gdGhlIHBpY3R1cmUgaGVyZS5cblxuVGhlcmVmb3JlLCBteSBLTVNBTlJlYXNvbmluZyBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBLTVNBTiBpcyB0aGVyZSB0byBjYXRjaCB1c2VzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGlzIHBhdGNoIGZvY3VzZXMgZW50aXJlbHkgb24gdGhlIHN5bmNocm9uaXphdGlvbiBhbmQgY29uY3VycmVuY3kgcHJvYmxlbXMgaW4gdGhlIFJEUyBzdWJzeXN0ZW0sIHN1Y2ggYXMgcmVwbGFjaW5nIG5vbi1hdG9taWMgYml0IGNsZWFycyB3aXRoIGF0b21pYyBvbmVzLCBjb3JyZWN0bHkgcXVpZXNjaW5nIHRyYW5zbWl0L3JlY2VpdmUgcGF0aHMgdXNpbmcgYml0IGxvY2tzLCBhbmQgYWRkaW5nIG1lbW9yeSBiYXJyaWVycyBmb3Igd2FpdCBxdWV1ZXMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcywgbW9kaWZ5IG1lbW9yeSBhbGxvY2F0aW9ucywgb3IgYWx0ZXIgZGF0YSBiZWluZyBjb3BpZWQgdG8gdXNlciBzcGFjZS4gSGVuY2UsIHRoZXJlIGlzIGFic29sdXRlbHkgbm8gcG9zc2liaWxpdHkgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIGFuZCBLQVNBTi9MT0NLREVQIHdpbGwgY2F0Y2ggYW55IG1lbW9yeSBjb3JydXB0aW9uIG9yIGxvY2tpbmcgaXNzdWVzIGluIHRoaXMgY29udGV4dC4gSSB3aWxsIG1hcmsgTmVlZHNLTVNBTiBhcyBmYWxzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDc2OCwiT3V0cHV0VG9rZW5zIjoyMDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MjMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQwMDoyNzoxNy4xNzkwMTM4NDlaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjkwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiS01TQU4gaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGRldGVjdCB1c2VzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlLiBUaGlzIHBhdGNoIGZvY3VzZXMgZW50aXJlbHkgb24gZml4aW5nIGNvbmN1cnJlbmN5IGFuZCBzeW5jaHJvbml6YXRpb24gaXNzdWVzIHdpdGhpbiB0aGUgUkRTIHN1YnN5c3RlbS4gSXQgcmVwbGFjZXMgbm9uLWF0b21pYyBiaXQgY2xlYXJzIHdpdGggYXRvbWljIG9wZXJhdGlvbnMsIHVzZXMgYml0IGxvY2tzIChgdGVzdF9hbmRfc2V0X2JpdF9sb2NrYCkgdG8gcHJvcGVybHkgcXVpZXNjZSB0cmFuc21pdCBhbmQgcmVjZWl2ZSBwYXRocywgYW5kIGFkZHMgbWVtb3J5IGJhcnJpZXJzIChgd3FfaGFzX3NsZWVwZXJgKSB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9ucyBhbmQgbG9zdCB3YWtlLXVwcy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBtb2RpZnkgbWVtb3J5IGFsbG9jYXRpb25zLCBvciBhbHRlciBkYXRhIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIHNlbnQgb3ZlciB0aGUgbmV0d29yay4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgZXhwb3NlZCBieSB0aGVzZSBjaGFuZ2VzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIGJlIGNvbmN1cnJlbmN5IGlzc3VlcywgcmFjZSBjb25kaXRpb25zLCBvciBkZWFkbG9ja3MsIHdoaWNoIGFyZSBiZXN0IGNhdWdodCBieSBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIGxpa2UgS0FTQU4sIEtDU0FOLCBhbmQgTE9DS0RFUC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIktNU0FOIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBkZXRlY3QgdXNlcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlciBzcGFjZS4gVGhpcyBwYXRjaCBmb2N1c2VzIGVudGlyZWx5IG9uIGZpeGluZyBjb25jdXJyZW5jeSBhbmQgc3luY2hyb25pemF0aW9uIGlzc3VlcyB3aXRoaW4gdGhlIFJEUyBzdWJzeXN0ZW0uIEl0IHJlcGxhY2VzIG5vbi1hdG9taWMgYml0IGNsZWFycyB3aXRoIGF0b21pYyBvcGVyYXRpb25zLCB1c2VzIGJpdCBsb2NrcyAoYHRlc3RfYW5kX3NldF9iaXRfbG9ja2ApIHRvIHByb3Blcmx5IHF1aWVzY2UgdHJhbnNtaXQgYW5kIHJlY2VpdmUgcGF0aHMsIGFuZCBhZGRzIG1lbW9yeSBiYXJyaWVycyAoYHdxX2hhc19zbGVlcGVyYCkgdG8gcHJldmVudCByYWNlIGNvbmRpdGlvbnMgYW5kIGxvc3Qgd2FrZS11cHMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcywgbW9kaWZ5IG1lbW9yeSBhbGxvY2F0aW9ucywgb3IgYWx0ZXIgZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZSBvciBzZW50IG92ZXIgdGhlIG5ldHdvcmsuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIGV4cG9zZWQgYnkgdGhlc2UgY2hhbmdlcy4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBiZSBjb25jdXJyZW5jeSBpc3N1ZXMsIHJhY2UgY29uZGl0aW9ucywgb3IgZGVhZGxvY2tzLCB3aGljaCBhcmUgYmVzdCBjYXVnaHQgYnkgc3RhbmRhcmQgYnVnIGRldGVjdG9ycyBsaWtlIEtBU0FOLCBLQ1NBTiwgYW5kIExPQ0tERVAuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow5w89c[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-16 00:24:36 +0000 UTC FinishedAt: 2026-08-16 00:27:18 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "3da8c3c8b8fa99505624b65ef590482f48e766b6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "RDS", "RDS_TCP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "3da8c3c8b8fa99505624b65ef590482f48e766b6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "RDS", "RDS_TCP" ], "series_id": "52dc30c6-ef29-4aa4-9480-c32f34e47ab6" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "rds_send_xmit", "rds_tcp_reset_callbacks", "rds_conn_shutdown" ], "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+CgkJCTx0ZD4yMDI2LzA4LzE2IDAwOjI2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1JEUyYjMzQ7LAogICAgJiMzNDtSRFNfVENQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmRzX3NlbmRfeG1pdCYjMzQ7LAogICAgJiMzNDtyZHNfdGNwX3Jlc2V0X2NhbGxiYWNrcyYjMzQ7LAogICAgJiMzNDtyZHNfY29ubl9zaHV0ZG93biYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7S01TQU4gaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGRldGVjdCB1c2VzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlLiBUaGlzIHBhdGNoIGZvY3VzZXMgZW50aXJlbHkgb24gZml4aW5nIGNvbmN1cnJlbmN5IGFuZCBzeW5jaHJvbml6YXRpb24gaXNzdWVzIHdpdGhpbiB0aGUgUkRTIHN1YnN5c3RlbS4gSXQgcmVwbGFjZXMgbm9uLWF0b21pYyBiaXQgY2xlYXJzIHdpdGggYXRvbWljIG9wZXJhdGlvbnMsIHVzZXMgYml0IGxvY2tzIChgdGVzdF9hbmRfc2V0X2JpdF9sb2NrYCkgdG8gcHJvcGVybHkgcXVpZXNjZSB0cmFuc21pdCBhbmQgcmVjZWl2ZSBwYXRocywgYW5kIGFkZHMgbWVtb3J5IGJhcnJpZXJzIChgd3FfaGFzX3NsZWVwZXJgKSB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9ucyBhbmQgbG9zdCB3YWtlLXVwcy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBtb2RpZnkgbWVtb3J5IGFsbG9jYXRpb25zLCBvciBhbHRlciBkYXRhIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIHNlbnQgb3ZlciB0aGUgbmV0d29yay4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgZXhwb3NlZCBieSB0aGVzZSBjaGFuZ2VzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIGJlIGNvbmN1cnJlbmN5IGlzc3VlcywgcmFjZSBjb25kaXRpb25zLCBvciBkZWFkbG9ja3MsIHdoaWNoIGFyZSBiZXN0IGNhdWdodCBieSBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIGxpa2UgS0FTQU4sIEtDU0FOLCBhbmQgTE9DS0RFUC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBkdXJpbmcgUkRTIGNvbm5lY3Rpb24gc2h1dGRvd24gYW5kIHJlc2V0LCB3aGVyZSB0aGUgUkRTX0lOX1hNSVQgYW5kIFJEU19SRUNWX1JFRklMTCBmbGFncyBjb3VsZCBiZSBjbG9iYmVyZWQgb3IgcmUtYWNxdWlyZWQgY29uY3VycmVudGx5LiBJdCB1c2VzIHRlc3RfYW5kX3NldF9iaXRfbG9jayB0byBwcm9wZXJseSBxdWllc2NlIHRoZSB0cmFuc21pdCBhbmQgcmVjZWl2ZSBwYXRocywgYW5kIHdxX2hhc19zbGVlcGVyIHRvIGVuc3VyZSBhIGZ1bGwgbWVtb3J5IGJhcnJpZXIgd2hlbiBjaGVja2luZyB0aGUgd2FpdCBxdWV1ZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIFJEUyBuZXR3b3JraW5nIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDAwOjI2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYmU4MmFmYjY5Y2RlMWI1ZTQ0M2YwM2U3ZmYyMjdiOTZmYmY1M2YxNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gQXVnIDE2IDAwOjI2OjMxIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9yZHMvY29ubmVjdGlvbi5jIGIvbmV0L3Jkcy9jb25uZWN0aW9uLmNcbmluZGV4IDdjOGFiOGU5NzNlMWIuLmExMGI2NjdjMDZjODcgMTAwNjQ0XG4tLS0gYS9uZXQvcmRzL2Nvbm5lY3Rpb24uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3Jkcy9jb25uZWN0aW9uLmNcbkBAIC0xMjAsNyAmIzQzOzEyMCwxNSBAQCBzdGF0aWMgdm9pZCByZHNfY29ubl9wYXRoX3Jlc2V0KHN0cnVjdCByZHNfY29ubl9wYXRoICpjcClcbiBcbiBcdHJkc19zdGF0c19pbmMoc19jb25uX3Jlc2V0KTtcbiBcdHJkc19zZW5kX3BhdGhfcmVzZXQoY3ApO1xuLVx0Y3AtXHUwMDNlY3BfZmxhZ3MgPSAwO1xuJiM0MztcbiYjNDM7XHQvKiBDbGVhciB0aGUgYml0cyB0aGUgcmVzZXQgaXMgcmVzcG9uc2libGUgZm9yIGluZGl2aWR1YWxseTogYVxuJiM0MztcdCAqIGJsYW5rZXQgY3BfZmxhZ3MgPSAwIGlzIGEgcGxhaW4gc3RvcmUgdGhhdCBjYW4gY2xvYmJlciBhXG4mIzQzO1x0ICogY29uY3VycmVudCBhdG9taWMgcmVhZC1tb2RpZnktd3JpdGUgb24gdGhlIHNhbWUgd29yZC5cbiYjNDM7XHQgKiBSRFNfSU5fWE1JVCBhbmQgUkRTX1JFQ1ZfUkVGSUxMIGFyZSBvd25lZCBieSB0aGUgY2FsbGVyLFxuJiM0MztcdCAqIHdoaWNoIHJlbGVhc2VzIHRoZW0gb25jZSB0aGUgdGVhcmRvd24gaXMgY29tcGxldGUuXG4mIzQzO1x0ICovXG4mIzQzO1x0Y2xlYXJfYml0KFJEU19MTF9TRU5EX0ZVTEwsIFx1MDAyNmNwLVx1MDAzZWNwX2ZsYWdzKTtcbiYjNDM7XHRjbGVhcl9iaXQoUkRTX1JFQ09OTkVDVF9QRU5ESU5HLCBcdTAwMjZjcC1cdTAwM2VjcF9mbGFncyk7XG4gXG4gXHQvKiBEbyBub3QgY2xlYXIgbmV4dF9yeF9zZXEgaGVyZSwgZWxzZSB3ZSBjYW5ub3QgZGlzdGluZ3Vpc2hcbiBcdCAqIHJldHJhbnNtaXR0ZWQgcGFja2V0cyBmcm9tIG5ldyBwYWNrZXRzLCBhbmQgd2lsbCBoYW5kIGFsbFxuQEAgLTQwNiwxNCAmIzQzOzQxNCwzMiBAQCB2b2lkIHJkc19jb25uX3NodXRkb3duKHN0cnVjdCByZHNfY29ubl9wYXRoICpjcClcbiBcdFx0fVxuIFx0XHRtdXRleF91bmxvY2soXHUwMDI2Y3AtXHUwMDNlY3BfY21fbG9jayk7XG4gXG4mIzQzO1x0XHQvKiBRdWllc2NlIHRoZSB0cmFuc21pdCBhbmQgcmVjZWl2ZS1yZWZpbGwgcGF0aHMgYnlcbiYjNDM7XHRcdCAqIGFjcXVpcmluZyB0aGVpciBiaXQgbG9ja3MsIG5vdCBtZXJlbHkgd2FpdGluZyBmb3JcbiYjNDM7XHRcdCAqIHRoZW0gdG8gYmUgcmVsZWFzZWQ6IHdpdGggYSBwbGFpbiB3YWl0LCBlaXRoZXIgcGF0aFxuJiM0MztcdFx0ICogY2FuIHJlLXRha2UgaXRzIGxvY2sgdGhlIGluc3RhbnQgYWZ0ZXIgd2Ugc2FtcGxlIGl0XG4mIzQzO1x0XHQgKiBjbGVhciBhbmQgdGhlbiBydW4gY29uY3VycmVudGx5IHdpdGggdGhlIHRyYW5zcG9ydFxuJiM0MztcdFx0ICogc2h1dGRvd24gYW5kIHRoZSBwYXRoIHJlc2V0IGJlbG93LiAgSG9sZGluZyBib3RoXG4mIzQzO1x0XHQgKiBsb2NrcyBhY3Jvc3MgdGhlIHRlYXJkb3duIG1ha2VzIHRoYXQgc3RydWN0dXJhbGx5XG4mIzQzO1x0XHQgKiBpbXBvc3NpYmxlLlxuJiM0MztcdFx0ICovXG4gXHRcdHdhaXRfZXZlbnQoY3AtXHUwMDNlY3Bfd2FpdHEsXG4tXHRcdFx0ICAgIXRlc3RfYml0KFJEU19JTl9YTUlULCBcdTAwMjZjcC1cdTAwM2VjcF9mbGFncykpO1xuJiM0MztcdFx0XHQgICAhdGVzdF9hbmRfc2V0X2JpdF9sb2NrKFJEU19JTl9YTUlULCBcdTAwMjZjcC1cdTAwM2VjcF9mbGFncykpO1xuIFx0XHR3YWl0X2V2ZW50KGNwLVx1MDAzZWNwX3dhaXRxLFxuLVx0XHRcdCAgICF0ZXN0X2JpdChSRFNfUkVDVl9SRUZJTEwsIFx1MDAyNmNwLVx1MDAzZWNwX2ZsYWdzKSk7XG4mIzQzO1x0XHRcdCAgICF0ZXN0X2FuZF9zZXRfYml0KFJEU19SRUNWX1JFRklMTCwgXHUwMDI2Y3AtXHUwMDNlY3BfZmxhZ3MpKTtcbiBcbiBcdFx0Y29ubi1cdTAwM2VjX3RyYW5zLVx1MDAzZWNvbm5fcGF0aF9zaHV0ZG93bihjcCk7XG4gXHRcdHJkc19jb25uX3BhdGhfcmVzZXQoY3ApO1xuIFxuJiM0MztcdFx0LyogUmVsZWFzZSB0aGUgdHdvIGxvY2tzIGFuZCB3YWtlIGFueSB3YWl0ZXIgKGUuZy5cbiYjNDM7XHRcdCAqIHJkc190Y3BfcmVzZXRfY2FsbGJhY2tzKCkpIHRoYXQgYmxvY2tlZCBvbiB0aGVtIHdoaWxlXG4mIzQzO1x0XHQgKiB3ZSBoZWxkIHRoZW0uICByZHNfY29ubl9wYXRoX3Jlc2V0KCkgbGVhdmVzIGJvdGggYml0c1xuJiM0MztcdFx0ICogYWxvbmU6IG93bmVyc2hpcCBlbmRzIGhlcmUsIG5vdCBpbnNpZGUgdGhlIHJlc2V0LlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRjbGVhcl9iaXRfdW5sb2NrKFJEU19JTl9YTUlULCBcdTAwMjZjcC1cdTAwM2VjcF9mbGFncyk7XG4mIzQzO1x0XHRjbGVhcl9iaXQoUkRTX1JFQ1ZfUkVGSUxMLCBcdTAwMjZjcC1cdTAwM2VjcF9mbGFncyk7XG4mIzQzO1x0XHR3YWtlX3VwX2FsbChcdTAwMjZjcC1cdTAwM2VjcF93YWl0cSk7XG4mIzQzO1xuIFx0XHRpZiAoIXJkc19jb25uX3BhdGhfdHJhbnNpdGlvbihjcCwgUkRTX0NPTk5fRElTQ09OTkVDVElORyxcbiBcdFx0XHRcdFx0ICAgICAgUkRTX0NPTk5fRE9XTikgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICAhcmRzX2Nvbm5fcGF0aF90cmFuc2l0aW9uKGNwLCBSRFNfQ09OTl9FUlJPUixcbmRpZmYgLS1naXQgYS9uZXQvcmRzL3NlbmQuYyBiL25ldC9yZHMvc2VuZC5jXG5pbmRleCAxNWExYjk3ZjEzZTc2Li5iOTBlMDU4NmY4MThjIDEwMDY0NFxuLS0tIGEvbmV0L3Jkcy9zZW5kLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9yZHMvc2VuZC5jXG5AQCAtMTE0LDggJiM0MzsxMTQsMTMgQEAgc3RhdGljIHZvaWQgcmVsZWFzZV9pbl94bWl0KHN0cnVjdCByZHNfY29ubl9wYXRoICpjcClcbiBcdCAqIGhvdCBwYXRoIGFuZCBmaW5kaW5nIHdhaXRlcnMgaXMgdmVyeSByYXJlLiAgV2UgZG9uJiMzOTt0IHdhbnQgdG8gd2Fsa1xuIFx0ICogdGhlIHN5c3RlbS13aWRlIGhhc2hlZCB3YWl0cXVldWUgYnVja2V0cyBpbiB0aGUgZmFzdCBwYXRoIG9ubHkgdG9cbiBcdCAqIGFsbW9zdCBuZXZlciBmaW5kIHdhaXRlcnMuXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiB3cV9oYXNfc2xlZXBlcigpIHN1cHBsaWVzIHRoZSBmdWxsIGJhcnJpZXIgdGhhdCBvcmRlcnMgdGhlIHdhaXRcbiYjNDM7XHQgKiBxdWV1ZSByZWFkIGFmdGVyIHRoZSBiaXQgY2xlYXI7IGNsZWFyX2JpdF91bmxvY2soKSBhbG9uZSBpcyBvbmx5XG4mIzQzO1x0ICogYSByZWxlYXNlIGFuZCB3b3VsZCBsZXQgdGhpcyBjaGVjayByZWFkIGEgc3RhbGUgZW1wdHkgcXVldWUsXG4mIzQzO1x0ICogbG9zaW5nIHRoZSB3YWtlLXVwLlxuIFx0ICovXG4tXHRpZiAod2FpdHF1ZXVlX2FjdGl2ZShcdTAwMjZjcC1cdTAwM2VjcF93YWl0cSkpXG4mIzQzO1x0aWYgKHdxX2hhc19zbGVlcGVyKFx1MDAyNmNwLVx1MDAzZWNwX3dhaXRxKSlcbiBcdFx0d2FrZV91cF9hbGwoXHUwMDI2Y3AtXHUwMDNlY3Bfd2FpdHEpO1xuIH1cbiBcbkBAIC0yMzksOCAmIzQzOzI0NCw5IEBAIGludCByZHNfc2VuZF94bWl0KHN0cnVjdCByZHNfY29ubl9wYXRoICpjcClcbiBcdFdSSVRFX09OQ0UoY3AtXHUwMDNlY3Bfc2VuZF9nZW4sIHNlbmRfZ2VuKTtcbiBcbiBcdC8qXG4tXHQgKiByZHNfY29ubl9zaHV0ZG93bigpIHNldHMgdGhlIGNvbm4gc3RhdGUgYW5kIHRoZW4gdGVzdHMgUkRTX0lOX1hNSVQsXG4tXHQgKiB3ZSBkbyB0aGUgb3Bwb3NpdGUgdG8gYXZvaWQgcmFjZXMuXG4mIzQzO1x0ICogcmRzX2Nvbm5fc2h1dGRvd24oKSBzZXRzIHRoZSBjb25uIHN0YXRlIGFuZCB0aGVuIGFjcXVpcmVzXG4mIzQzO1x0ICogUkRTX0lOX1hNSVQ7IHdlIHRha2UgdGhlIGxvY2sgZmlyc3QgYW5kIHRoZW4gY2hlY2sgdGhlIHN0YXRlLFxuJiM0MztcdCAqIHNvIG9uZSBvZiB1cyBpcyBndWFyYW50ZWVkIHRvIHNlZSB0aGUgb3RoZXImIzM5O3MgdXBkYXRlLlxuIFx0ICovXG4gXHRpZiAoIXJkc19jb25uX3BhdGhfdXAoY3ApKSB7XG4gXHRcdHJlbGVhc2VfaW5feG1pdChjcCk7XG5kaWZmIC0tZ2l0IGEvbmV0L3Jkcy90Y3AuYyBiL25ldC9yZHMvdGNwLmNcbmluZGV4IGIyNjM2MzRhYzc1MGQuLjFmZjllODQ2ZGZjN2MgMTAwNjQ0XG4tLS0gYS9uZXQvcmRzL3RjcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvcmRzL3RjcC5jXG5AQCAtMTE1LDQ1ICYjNDM7MTE1LDY2IEBAIHZvaWQgcmRzX3RjcF9yZXN0b3JlX2NhbGxiYWNrcyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxuIH1cbiBcbiAvKlxuLSAqIHJkc190Y3BfcmVzZXRfY2FsbGJhY2tzKCkgc3dpdGNoZXMgdGhlIHRvIHRoZSBuZXcgc29jayBhbmRcbi0gKiByZXR1cm5zIHRoZSBleGlzdGluZyB0Yy1cdTAwM2V0X3NvY2suXG4mIzQzOyAqIHJkc190Y3BfcmVzZXRfY2FsbGJhY2tzKCkgc3dpdGNoZXMgYSBwYXRoIHRvIGEgbmV3IHNvY2tldCBhbmRcbiYjNDM7ICogcmVsZWFzZXMgdGhlIG9sZCBvbmUgaXQgZmluZHMgaW4gdGMtXHUwMDNldF9zb2NrLCByZXNvbHZpbmcgYSBkdWVsbGluZ1xuJiM0MzsgKiBTWU4uXG4gICpcbi0gKiBUaGUgb25seSBmdW5jdGlvbnMgdGhhdCBzZXQgdGMtXHUwMDNldF9zb2NrIGFyZSByZHNfdGNwX3NldF9jYWxsYmFja3Ncbi0gKiBhbmQgcmRzX3RjcF9yZXNldF9jYWxsYmFja3MuICBTZW5kIGFuZCByZWNlaXZlIHRydXN0IHRoYXRcbi0gKiBpdCBpcyBzZXQuICBUaGUgYWJzZW5jZSBvZiBSRFNfQ09OTl9VUCBiaXQgcHJvdGVjdHMgdGhvc2UgcGF0aHNcbi0gKiBmcm9tIGJlaW5nIGNhbGxlZCB3aGlsZSBpdCBpc24mIzM5O3Qgc2V0LlxuJiM0MzsgKiB0Yy1cdTAwM2V0X3NvY2sgaXMgc2V0IGJ5IHJkc190Y3Bfc2V0X2NhbGxiYWNrcygpIGFuZCBjbGVhcmVkIGJ5XG4mIzQzOyAqIHJkc190Y3BfcmVzdG9yZV9jYWxsYmFja3MoKSwgZnJvbSByZHNfdGNwX2Nvbm5fcGF0aF9zaHV0ZG93bigpIGFuZFxuJiM0MzsgKiBmcm9tIGhlcmUuICBTZW5kIGFuZCByZWNlaXZlIHRydXN0IHRoYXQgaXQgaXMgc2V0OiB0aGUgYWJzZW5jZSBvZlxuJiM0MzsgKiBSRFNfQ09OTl9VUCBwcm90ZWN0cyB0aG9zZSBwYXRocyBmcm9tIGJlaW5nIGNhbGxlZCB3aGlsZSBpdCBpc24mIzM5O3QsXG4mIzQzOyAqIGFuZCB0aGUgc3dhcCBkb25lIGhlcmUgcnVucyB1bmRlciBSRFNfSU5fWE1JVCBzbyB0aGF0IGl0IGNhbm5vdFxuJiM0MzsgKiBpbnRlcmxlYXZlIHdpdGggYSBzZW5kZXIgYWxyZWFkeSBpbnNpZGUgcmRzX3NlbmRfeG1pdCgpLlxuICAqL1xuIHZvaWQgcmRzX3RjcF9yZXNldF9jYWxsYmFja3Moc3RydWN0IHNvY2tldCAqc29jayxcbiBcdFx0XHQgICAgIHN0cnVjdCByZHNfY29ubl9wYXRoICpjcClcbiB7XG4gXHRzdHJ1Y3QgcmRzX3RjcF9jb25uZWN0aW9uICp0YyA9IGNwLVx1MDAzZWNwX3RyYW5zcG9ydF9kYXRhO1xuLVx0c3RydWN0IHNvY2tldCAqb3NvY2sgPSB0Yy1cdTAwM2V0X3NvY2s7XG4tXG4tXHRpZiAoIW9zb2NrKVxuLVx0XHRnb3RvIG5ld3NvY2s7XG4mIzQzO1x0c3RydWN0IHNvY2tldCAqb3NvY2s7XG4gXG4gXHQvKiBOZWVkIHRvIHJlc29sdmUgYSBkdWVsbGluZyBTWU4gYmV0d2VlbiBwZWVycy5cbiBcdCAqIFdlIGhhdmUgYW4gb3V0c3RhbmRpbmcgU1lOIHRvIHRoaXMgcGVlciwgd2hpY2ggbWF5XG4gXHQgKiBwb3RlbnRpYWxseSBoYXZlIHRyYW5zaXRpb25lZCB0byB0aGUgUkRTX0NPTk5fVVAgc3RhdGUsXG4gXHQgKiBzbyB3ZSBtdXN0IHF1aWVzY2UgYW55IHNlbmQgdGhyZWFkcyBiZWZvcmUgcmVzZXR0aW5nXG4tXHQgKiBjcF90cmFuc3BvcnRfZGF0YS4gV2UgcXVpZXNjZSB0aGVzZSB0aHJlYWRzIGJ5IHNldHRpbmdcbi1cdCAqIGNwX3N0YXRlIHRvIHNvbWV0aGluZyBvdGhlciB0aGFuIFJEU19DT05OX1VQLCBhbmQgdGhlblxuLVx0ICogd2FpdGluZyBmb3IgYW55IGV4aXN0aW5nIHRocmVhZHMgaW4gcmRzX3NlbmRfeG1pdCB0b1xuLVx0ICogY29tcGxldGUgcmVsZWFzZV9pbl94bWl0KCkuIChTdWJzZXF1ZW50IHRocmVhZHMgZW50ZXJpbmdcbi1cdCAqIHJkc19zZW5kX3htaXQoKSB3aWxsIGJhaWwgb24gIXJkc19jb25uX3VwKCkuXG4mIzQzO1x0ICogY3BfdHJhbnNwb3J0X2RhdGEuICBTZXR0aW5nIGNwX3N0YXRlIHRvIHNvbWV0aGluZyBvdGhlclxuJiM0MztcdCAqIHRoYW4gUkRTX0NPTk5fVVAgc3RvcHMgbmV3IHNlbmRlcnMsIGFuZCBvd25pbmcgUkRTX0lOX1hNSVRcbiYjNDM7XHQgKiBleGNsdWRlcyBhbnkgdGhyZWFkIGFscmVhZHkgaW5zaWRlIHJkc19zZW5kX3htaXQoKSBmb3IgdGhlXG4mIzQzO1x0ICogd2hvbGUgc29ja2V0IHN3YXAgYW5kIHRoZSByZHNfc2VuZF9wYXRoX3Jlc2V0KCkgYmVsb3cuXG4gXHQgKlxuLVx0ICogSG93ZXZlciBhbiBpbmNvbWluZyBzeW4tYWNrIGF0IHRoaXMgcG9pbnQgd291bGQgZW5kIHVwXG4tXHQgKiBtYXJraW5nIHRoZSBjb25uIGFzIFJEU19DT05OX1VQLCBhbmQgd291bGQgYWdhaW4gcGVybWl0XG4tXHQgKiByZHNfc2VuZF94bWkoKSB0aHJlYWRzIHRocm91Z2gsIHNvIGlkZWFsbHkgd2Ugd291bGRcbi1cdCAqIHN5bmNocm9uaXplIG9uIFJEU19DT05OX1VQIGFmdGVyIGxvY2tfc29jaygpLCBidXQgY2Fubm90XG4tXHQgKiBkbyB0aGF0OiB3YWl0aW5nIG9uICFSRFNfSU5fWE1JVCBhZnRlciBsb2NrX3NvY2soKSBtYXlcbi1cdCAqIGVuZCB1cCBkZWFkbG9ja2luZyB3aXRoIHRjcF9zZW5kbXNnKCksIGFuZCB0aGUgUkRTX0lOX1hNSVRcbi1cdCAqIHdvdWxkIG5vdCBnZXQgc2V0LiBBcyBhIHJlc3VsdCwgd2Ugc2V0IGNfc3RhdGUgdG9cbi1cdCAqIFJEU19DT05OX1JFU0VUVFRJTkcsIHRvIGVuc3VyZSB0aGF0IHJkc190Y3Bfc3RhdGVfY2hhbmdlXG4tXHQgKiBjYW5ub3QgbWFyayByZHNfY29ubl9wYXRoX3VwKCkgaW4gdGhlIHdpbmRvdyBiZWZvcmUgbG9ja19zb2NrKClcbiYjNDM7XHQgKiBBbiBpbmNvbWluZyBzeW4tYWNrIGF0IHRoaXMgcG9pbnQgd291bGQgZW5kIHVwIG1hcmtpbmcgdGhlXG4mIzQzO1x0ICogY29ubiBhcyBSRFNfQ09OTl9VUCwgYW5kIHdvdWxkIGFnYWluIHBlcm1pdCByZHNfc2VuZF94bWl0KClcbiYjNDM7XHQgKiB0aHJlYWRzIHRocm91Z2gsIHNvIGlkZWFsbHkgd2Ugd291bGQgc3luY2hyb25pemUgb25cbiYjNDM7XHQgKiBSRFNfQ09OTl9VUCBhZnRlciBsb2NrX3NvY2soKSwgYnV0IGNhbm5vdCBkbyB0aGF0OiBhY3F1aXJpbmdcbiYjNDM7XHQgKiBSRFNfSU5fWE1JVCBhZnRlciBsb2NrX3NvY2soKSBtYXkgZW5kIHVwIGRlYWRsb2NraW5nIHdpdGhcbiYjNDM7XHQgKiB0Y3Bfc2VuZG1zZygpLCB3aGljaCB0YWtlcyB0aGUgc29ja2V0IGxvY2sgd2hpbGUgaG9sZGluZ1xuJiM0MztcdCAqIFJEU19JTl9YTUlULiAgQXMgYSByZXN1bHQsIHdlIHNldCBjX3N0YXRlIHRvXG4mIzQzO1x0ICogUkRTX0NPTk5fUkVTRVRUSU5HLCB0byBlbnN1cmUgdGhhdCByZHNfdGNwX3N0YXRlX2NoYW5nZVxuJiM0MztcdCAqIGNhbm5vdCBtYXJrIHJkc19jb25uX3BhdGhfdXAoKSBpbiB0aGUgd2luZG93IGJlZm9yZVxuJiM0MztcdCAqIGxvY2tfc29jaygpLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogT25seSBtYWtlIHRoYXQgdHJhbnNpdGlvbiBpZiB0aGUgcGF0aCBpcyBzdGlsbCBjb25uZWN0aW5nXG4mIzQzO1x0ICogKG9yIGFscmVhZHkgcmVzZXR0aW5nIGZyb20gYW4gZWFybGllciBkdWVsKSwgc28gdGhhdCBhXG4mIzQzO1x0ICogY29uY3VycmVudCBzaHV0ZG93biYjMzk7cyBSRFNfQ09OTl9FUlJPUi9SRFNfQ09OTl9ESVNDT05ORUNUSU5HXG4mIzQzO1x0ICogaXMgbm90IG92ZXJ3cml0dGVuOyBhIHBhdGggaW4gYW55IG90aGVyIHN0YXRlIGlzIGRyb3BwZWRcbiYjNDM7XHQgKiBhbmQgaXRzIHBlbmRpbmcgc2h1dGRvd24gd2lucy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIXJkc19jb25uX3BhdGhfdHJhbnNpdGlvbihjcCwgUkRTX0NPTk5fQ09OTkVDVElORyxcbiYjNDM7XHRcdFx0XHQgICAgICBSRFNfQ09OTl9SRVNFVFRJTkcpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAhcmRzX2Nvbm5fcGF0aF90cmFuc2l0aW9uKGNwLCBSRFNfQ09OTl9SRVNFVFRJTkcsXG4mIzQzO1x0XHRcdFx0ICAgICAgUkRTX0NPTk5fUkVTRVRUSU5HKSlcbiYjNDM7XHRcdHJkc19jb25uX3BhdGhfZHJvcChjcCwgMCk7XG4mIzQzO1x0d2FpdF9ldmVudChjcC1cdTAwM2VjcF93YWl0cSxcbiYjNDM7XHRcdCAgICF0ZXN0X2FuZF9zZXRfYml0X2xvY2soUkRTX0lOX1hNSVQsIFx1MDAyNmNwLVx1MDAzZWNwX2ZsYWdzKSk7XG4mIzQzO1xuJiM0MztcdC8qIFJlYWQgdF9zb2NrIG9ubHkgd2hpbGUgb3duaW5nIFJEU19JTl9YTUlULiAgVGhlIHRlYXJkb3duIGluXG4mIzQzO1x0ICogcmRzX2Nvbm5fc2h1dGRvd24oKSByZWxlYXNlcyB0aGUgb2xkIHNvY2tldCBhbmQgY2xlYXJzXG4mIzQzO1x0ICogdF9zb2NrLCBzbyBhIHBvaW50ZXIgc2FtcGxlZCBiZWZvcmUgdGhlIHdhaXQgY2FuIGJlIHN0YWxlXG4mIzQzO1x0ICogYnkgdGhlIHRpbWUgd2Ugd2FrZSB1cC5cbiBcdCAqL1xuLVx0YXRvbWljX3NldChcdTAwMjZjcC1cdTAwM2VjcF9zdGF0ZSwgUkRTX0NPTk5fUkVTRVRUSU5HKTtcbi1cdHdhaXRfZXZlbnQoY3AtXHUwMDNlY3Bfd2FpdHEsICF0ZXN0X2JpdChSRFNfSU5fWE1JVCwgXHUwMDI2Y3AtXHUwMDNlY3BfZmxhZ3MpKTtcbiYjNDM7XHRvc29jayA9IHRjLVx1MDAzZXRfc29jaztcbiYjNDM7XHRpZiAoIW9zb2NrKVxuJiM0MztcdFx0Z290byBuZXdzb2NrO1xuJiM0MztcbiBcdC8qIHJlc2V0IHJlY2VpdmUgc2lkZSBzdGF0ZSBmb3IgcmRzX3RjcF9kYXRhX3JlY3YoKSBmb3Igb3NvY2sgICovXG4gXHRjYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoXHUwMDI2Y3AtXHUwMDNlY3Bfc2VuZF93KTtcbiBcdGNhbmNlbF9kZWxheWVkX3dvcmtfc3luYyhcdTAwMjZjcC1cdTAwM2VjcF9yZWN2X3cpO1xuQEAgLTE3Miw2ICYjNDM7MTkzLDkgQEAgdm9pZCByZHNfdGNwX3Jlc2V0X2NhbGxiYWNrcyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxuIFx0bG9ja19zb2NrKHNvY2stXHUwMDNlc2spO1xuIFx0cmRzX3RjcF9zZXRfY2FsbGJhY2tzKHNvY2ssIGNwKTtcbiBcdHJlbGVhc2Vfc29jayhzb2NrLVx1MDAzZXNrKTtcbiYjNDM7XG4mIzQzO1x0Y2xlYXJfYml0X3VubG9jayhSRFNfSU5fWE1JVCwgXHUwMDI2Y3AtXHUwMDNlY3BfZmxhZ3MpO1xuJiM0MztcdHdha2VfdXBfYWxsKFx1MDAyNmNwLVx1MDAzZWNwX3dhaXRxKTtcbiB9XG4gXG4gLyogQWRkIHRjIHRvIHJkc190Y3BfdGNfbGlzdCBhbmQgc2V0IHRjLVx1MDAzZXRfc29jay4gU2VlIGNvbW1lbnRzXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMDA6MjY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1JEUyYjMzQ7LAogICAgJiMzNDtSRFNfVENQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmRzX3NlbmRfeG1pdCYjMzQ7LAogICAgJiMzNDtyZHNfdGNwX3Jlc2V0X2NhbGxiYWNrcyYjMzQ7LAogICAgJiMzNDtyZHNfY29ubl9zaHV0ZG93biYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGR1cmluZyBSRFMgY29ubmVjdGlvbiBzaHV0ZG93biBhbmQgcmVzZXQsIHdoZXJlIHRoZSBSRFNfSU5fWE1JVCBhbmQgUkRTX1JFQ1ZfUkVGSUxMIGZsYWdzIGNvdWxkIGJlIGNsb2JiZXJlZCBvciByZS1hY3F1aXJlZCBjb25jdXJyZW50bHkuIEl0IHVzZXMgdGVzdF9hbmRfc2V0X2JpdF9sb2NrIHRvIHByb3Blcmx5IHF1aWVzY2UgdGhlIHRyYW5zbWl0IGFuZCByZWNlaXZlIHBhdGhzLCBhbmQgd3FfaGFzX3NsZWVwZXIgdG8gZW5zdXJlIGEgZnVsbCBtZW1vcnkgYmFycmllciB3aGVuIGNoZWNraW5nIHRoZSB3YWl0IHF1ZXVlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgUkRTIG5ldHdvcmtpbmcgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBiZTgyYWZiNjljZGUxYjVlNDQzZjAzZTdmZjIyN2I5NmZiZjUzZjE1CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBBdWcgMTYgMDA6MjY6MzEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvcmRzL2Nvbm5lY3Rpb24uYyBiL25ldC9yZHMvY29ubmVjdGlvbi5jCmluZGV4IDdjOGFiOGU5NzNlMWIuLmExMGI2NjdjMDZjODcgMTAwNjQ0Ci0tLSBhL25ldC9yZHMvY29ubmVjdGlvbi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9yZHMvY29ubmVjdGlvbi5jCkBAIC0xMjAsNyAmIzQzOzEyMCwxNSBAQCBzdGF0aWMgdm9pZCByZHNfY29ubl9wYXRoX3Jlc2V0KHN0cnVjdCByZHNfY29ubl9wYXRoICpjcCkKIAogCXJkc19zdGF0c19pbmMoc19jb25uX3Jlc2V0KTsKIAlyZHNfc2VuZF9wYXRoX3Jlc2V0KGNwKTsKLQljcC0mZ3Q7Y3BfZmxhZ3MgPSAwOwomIzQzOwomIzQzOwkvKiBDbGVhciB0aGUgYml0cyB0aGUgcmVzZXQgaXMgcmVzcG9uc2libGUgZm9yIGluZGl2aWR1YWxseTogYQomIzQzOwkgKiBibGFua2V0IGNwX2ZsYWdzID0gMCBpcyBhIHBsYWluIHN0b3JlIHRoYXQgY2FuIGNsb2JiZXIgYQomIzQzOwkgKiBjb25jdXJyZW50IGF0b21pYyByZWFkLW1vZGlmeS13cml0ZSBvbiB0aGUgc2FtZSB3b3JkLgomIzQzOwkgKiBSRFNfSU5fWE1JVCBhbmQgUkRTX1JFQ1ZfUkVGSUxMIGFyZSBvd25lZCBieSB0aGUgY2FsbGVyLAomIzQzOwkgKiB3aGljaCByZWxlYXNlcyB0aGVtIG9uY2UgdGhlIHRlYXJkb3duIGlzIGNvbXBsZXRlLgomIzQzOwkgKi8KJiM0MzsJY2xlYXJfYml0KFJEU19MTF9TRU5EX0ZVTEwsICZhbXA7Y3AtJmd0O2NwX2ZsYWdzKTsKJiM0MzsJY2xlYXJfYml0KFJEU19SRUNPTk5FQ1RfUEVORElORywgJmFtcDtjcC0mZ3Q7Y3BfZmxhZ3MpOwogCiAJLyogRG8gbm90IGNsZWFyIG5leHRfcnhfc2VxIGhlcmUsIGVsc2Ugd2UgY2Fubm90IGRpc3Rpbmd1aXNoCiAJICogcmV0cmFuc21pdHRlZCBwYWNrZXRzIGZyb20gbmV3IHBhY2tldHMsIGFuZCB3aWxsIGhhbmQgYWxsCkBAIC00MDYsMTQgJiM0Mzs0MTQsMzIgQEAgdm9pZCByZHNfY29ubl9zaHV0ZG93bihzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApCiAJCX0KIAkJbXV0ZXhfdW5sb2NrKCZhbXA7Y3AtJmd0O2NwX2NtX2xvY2spOwogCiYjNDM7CQkvKiBRdWllc2NlIHRoZSB0cmFuc21pdCBhbmQgcmVjZWl2ZS1yZWZpbGwgcGF0aHMgYnkKJiM0MzsJCSAqIGFjcXVpcmluZyB0aGVpciBiaXQgbG9ja3MsIG5vdCBtZXJlbHkgd2FpdGluZyBmb3IKJiM0MzsJCSAqIHRoZW0gdG8gYmUgcmVsZWFzZWQ6IHdpdGggYSBwbGFpbiB3YWl0LCBlaXRoZXIgcGF0aAomIzQzOwkJICogY2FuIHJlLXRha2UgaXRzIGxvY2sgdGhlIGluc3RhbnQgYWZ0ZXIgd2Ugc2FtcGxlIGl0CiYjNDM7CQkgKiBjbGVhciBhbmQgdGhlbiBydW4gY29uY3VycmVudGx5IHdpdGggdGhlIHRyYW5zcG9ydAomIzQzOwkJICogc2h1dGRvd24gYW5kIHRoZSBwYXRoIHJlc2V0IGJlbG93LiAgSG9sZGluZyBib3RoCiYjNDM7CQkgKiBsb2NrcyBhY3Jvc3MgdGhlIHRlYXJkb3duIG1ha2VzIHRoYXQgc3RydWN0dXJhbGx5CiYjNDM7CQkgKiBpbXBvc3NpYmxlLgomIzQzOwkJICovCiAJCXdhaXRfZXZlbnQoY3AtJmd0O2NwX3dhaXRxLAotCQkJICAgIXRlc3RfYml0KFJEU19JTl9YTUlULCAmYW1wO2NwLSZndDtjcF9mbGFncykpOwomIzQzOwkJCSAgICF0ZXN0X2FuZF9zZXRfYml0X2xvY2soUkRTX0lOX1hNSVQsICZhbXA7Y3AtJmd0O2NwX2ZsYWdzKSk7CiAJCXdhaXRfZXZlbnQoY3AtJmd0O2NwX3dhaXRxLAotCQkJICAgIXRlc3RfYml0KFJEU19SRUNWX1JFRklMTCwgJmFtcDtjcC0mZ3Q7Y3BfZmxhZ3MpKTsKJiM0MzsJCQkgICAhdGVzdF9hbmRfc2V0X2JpdChSRFNfUkVDVl9SRUZJTEwsICZhbXA7Y3AtJmd0O2NwX2ZsYWdzKSk7CiAKIAkJY29ubi0mZ3Q7Y190cmFucy0mZ3Q7Y29ubl9wYXRoX3NodXRkb3duKGNwKTsKIAkJcmRzX2Nvbm5fcGF0aF9yZXNldChjcCk7CiAKJiM0MzsJCS8qIFJlbGVhc2UgdGhlIHR3byBsb2NrcyBhbmQgd2FrZSBhbnkgd2FpdGVyIChlLmcuCiYjNDM7CQkgKiByZHNfdGNwX3Jlc2V0X2NhbGxiYWNrcygpKSB0aGF0IGJsb2NrZWQgb24gdGhlbSB3aGlsZQomIzQzOwkJICogd2UgaGVsZCB0aGVtLiAgcmRzX2Nvbm5fcGF0aF9yZXNldCgpIGxlYXZlcyBib3RoIGJpdHMKJiM0MzsJCSAqIGFsb25lOiBvd25lcnNoaXAgZW5kcyBoZXJlLCBub3QgaW5zaWRlIHRoZSByZXNldC4KJiM0MzsJCSAqLwomIzQzOwkJY2xlYXJfYml0X3VubG9jayhSRFNfSU5fWE1JVCwgJmFtcDtjcC0mZ3Q7Y3BfZmxhZ3MpOwomIzQzOwkJY2xlYXJfYml0KFJEU19SRUNWX1JFRklMTCwgJmFtcDtjcC0mZ3Q7Y3BfZmxhZ3MpOwomIzQzOwkJd2FrZV91cF9hbGwoJmFtcDtjcC0mZ3Q7Y3Bfd2FpdHEpOwomIzQzOwogCQlpZiAoIXJkc19jb25uX3BhdGhfdHJhbnNpdGlvbihjcCwgUkRTX0NPTk5fRElTQ09OTkVDVElORywKIAkJCQkJICAgICAgUkRTX0NPTk5fRE9XTikgJmFtcDsmYW1wOwogCQkgICAgIXJkc19jb25uX3BhdGhfdHJhbnNpdGlvbihjcCwgUkRTX0NPTk5fRVJST1IsCmRpZmYgLS1naXQgYS9uZXQvcmRzL3NlbmQuYyBiL25ldC9yZHMvc2VuZC5jCmluZGV4IDE1YTFiOTdmMTNlNzYuLmI5MGUwNTg2ZjgxOGMgMTAwNjQ0Ci0tLSBhL25ldC9yZHMvc2VuZC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9yZHMvc2VuZC5jCkBAIC0xMTQsOCAmIzQzOzExNCwxMyBAQCBzdGF0aWMgdm9pZCByZWxlYXNlX2luX3htaXQoc3RydWN0IHJkc19jb25uX3BhdGggKmNwKQogCSAqIGhvdCBwYXRoIGFuZCBmaW5kaW5nIHdhaXRlcnMgaXMgdmVyeSByYXJlLiAgV2UgZG9uJiMzOTt0IHdhbnQgdG8gd2FsawogCSAqIHRoZSBzeXN0ZW0td2lkZSBoYXNoZWQgd2FpdHF1ZXVlIGJ1Y2tldHMgaW4gdGhlIGZhc3QgcGF0aCBvbmx5IHRvCiAJICogYWxtb3N0IG5ldmVyIGZpbmQgd2FpdGVycy4KJiM0MzsJICoKJiM0MzsJICogd3FfaGFzX3NsZWVwZXIoKSBzdXBwbGllcyB0aGUgZnVsbCBiYXJyaWVyIHRoYXQgb3JkZXJzIHRoZSB3YWl0CiYjNDM7CSAqIHF1ZXVlIHJlYWQgYWZ0ZXIgdGhlIGJpdCBjbGVhcjsgY2xlYXJfYml0X3VubG9jaygpIGFsb25lIGlzIG9ubHkKJiM0MzsJICogYSByZWxlYXNlIGFuZCB3b3VsZCBsZXQgdGhpcyBjaGVjayByZWFkIGEgc3RhbGUgZW1wdHkgcXVldWUsCiYjNDM7CSAqIGxvc2luZyB0aGUgd2FrZS11cC4KIAkgKi8KLQlpZiAod2FpdHF1ZXVlX2FjdGl2ZSgmYW1wO2NwLSZndDtjcF93YWl0cSkpCiYjNDM7CWlmICh3cV9oYXNfc2xlZXBlcigmYW1wO2NwLSZndDtjcF93YWl0cSkpCiAJCXdha2VfdXBfYWxsKCZhbXA7Y3AtJmd0O2NwX3dhaXRxKTsKIH0KIApAQCAtMjM5LDggJiM0MzsyNDQsOSBAQCBpbnQgcmRzX3NlbmRfeG1pdChzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApCiAJV1JJVEVfT05DRShjcC0mZ3Q7Y3Bfc2VuZF9nZW4sIHNlbmRfZ2VuKTsKIAogCS8qCi0JICogcmRzX2Nvbm5fc2h1dGRvd24oKSBzZXRzIHRoZSBjb25uIHN0YXRlIGFuZCB0aGVuIHRlc3RzIFJEU19JTl9YTUlULAotCSAqIHdlIGRvIHRoZSBvcHBvc2l0ZSB0byBhdm9pZCByYWNlcy4KJiM0MzsJICogcmRzX2Nvbm5fc2h1dGRvd24oKSBzZXRzIHRoZSBjb25uIHN0YXRlIGFuZCB0aGVuIGFjcXVpcmVzCiYjNDM7CSAqIFJEU19JTl9YTUlUOyB3ZSB0YWtlIHRoZSBsb2NrIGZpcnN0IGFuZCB0aGVuIGNoZWNrIHRoZSBzdGF0ZSwKJiM0MzsJICogc28gb25lIG9mIHVzIGlzIGd1YXJhbnRlZWQgdG8gc2VlIHRoZSBvdGhlciYjMzk7cyB1cGRhdGUuCiAJICovCiAJaWYgKCFyZHNfY29ubl9wYXRoX3VwKGNwKSkgewogCQlyZWxlYXNlX2luX3htaXQoY3ApOwpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy90Y3AuYyBiL25ldC9yZHMvdGNwLmMKaW5kZXggYjI2MzYzNGFjNzUwZC4uMWZmOWU4NDZkZmM3YyAxMDA2NDQKLS0tIGEvbmV0L3Jkcy90Y3AuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvcmRzL3RjcC5jCkBAIC0xMTUsNDUgJiM0MzsxMTUsNjYgQEAgdm9pZCByZHNfdGNwX3Jlc3RvcmVfY2FsbGJhY2tzKHN0cnVjdCBzb2NrZXQgKnNvY2ssCiB9CiAKIC8qCi0gKiByZHNfdGNwX3Jlc2V0X2NhbGxiYWNrcygpIHN3aXRjaGVzIHRoZSB0byB0aGUgbmV3IHNvY2sgYW5kCi0gKiByZXR1cm5zIHRoZSBleGlzdGluZyB0Yy0mZ3Q7dF9zb2NrLgomIzQzOyAqIHJkc190Y3BfcmVzZXRfY2FsbGJhY2tzKCkgc3dpdGNoZXMgYSBwYXRoIHRvIGEgbmV3IHNvY2tldCBhbmQKJiM0MzsgKiByZWxlYXNlcyB0aGUgb2xkIG9uZSBpdCBmaW5kcyBpbiB0Yy0mZ3Q7dF9zb2NrLCByZXNvbHZpbmcgYSBkdWVsbGluZwomIzQzOyAqIFNZTi4KICAqCi0gKiBUaGUgb25seSBmdW5jdGlvbnMgdGhhdCBzZXQgdGMtJmd0O3Rfc29jayBhcmUgcmRzX3RjcF9zZXRfY2FsbGJhY2tzCi0gKiBhbmQgcmRzX3RjcF9yZXNldF9jYWxsYmFja3MuICBTZW5kIGFuZCByZWNlaXZlIHRydXN0IHRoYXQKLSAqIGl0IGlzIHNldC4gIFRoZSBhYnNlbmNlIG9mIFJEU19DT05OX1VQIGJpdCBwcm90ZWN0cyB0aG9zZSBwYXRocwotICogZnJvbSBiZWluZyBjYWxsZWQgd2hpbGUgaXQgaXNuJiMzOTt0IHNldC4KJiM0MzsgKiB0Yy0mZ3Q7dF9zb2NrIGlzIHNldCBieSByZHNfdGNwX3NldF9jYWxsYmFja3MoKSBhbmQgY2xlYXJlZCBieQomIzQzOyAqIHJkc190Y3BfcmVzdG9yZV9jYWxsYmFja3MoKSwgZnJvbSByZHNfdGNwX2Nvbm5fcGF0aF9zaHV0ZG93bigpIGFuZAomIzQzOyAqIGZyb20gaGVyZS4gIFNlbmQgYW5kIHJlY2VpdmUgdHJ1c3QgdGhhdCBpdCBpcyBzZXQ6IHRoZSBhYnNlbmNlIG9mCiYjNDM7ICogUkRTX0NPTk5fVVAgcHJvdGVjdHMgdGhvc2UgcGF0aHMgZnJvbSBiZWluZyBjYWxsZWQgd2hpbGUgaXQgaXNuJiMzOTt0LAomIzQzOyAqIGFuZCB0aGUgc3dhcCBkb25lIGhlcmUgcnVucyB1bmRlciBSRFNfSU5fWE1JVCBzbyB0aGF0IGl0IGNhbm5vdAomIzQzOyAqIGludGVybGVhdmUgd2l0aCBhIHNlbmRlciBhbHJlYWR5IGluc2lkZSByZHNfc2VuZF94bWl0KCkuCiAgKi8KIHZvaWQgcmRzX3RjcF9yZXNldF9jYWxsYmFja3Moc3RydWN0IHNvY2tldCAqc29jaywKIAkJCSAgICAgc3RydWN0IHJkc19jb25uX3BhdGggKmNwKQogewogCXN0cnVjdCByZHNfdGNwX2Nvbm5lY3Rpb24gKnRjID0gY3AtJmd0O2NwX3RyYW5zcG9ydF9kYXRhOwotCXN0cnVjdCBzb2NrZXQgKm9zb2NrID0gdGMtJmd0O3Rfc29jazsKLQotCWlmICghb3NvY2spCi0JCWdvdG8gbmV3c29jazsKJiM0MzsJc3RydWN0IHNvY2tldCAqb3NvY2s7CiAKIAkvKiBOZWVkIHRvIHJlc29sdmUgYSBkdWVsbGluZyBTWU4gYmV0d2VlbiBwZWVycy4KIAkgKiBXZSBoYXZlIGFuIG91dHN0YW5kaW5nIFNZTiB0byB0aGlzIHBlZXIsIHdoaWNoIG1heQogCSAqIHBvdGVudGlhbGx5IGhhdmUgdHJhbnNpdGlvbmVkIHRvIHRoZSBSRFNfQ09OTl9VUCBzdGF0ZSwKIAkgKiBzbyB3ZSBtdXN0IHF1aWVzY2UgYW55IHNlbmQgdGhyZWFkcyBiZWZvcmUgcmVzZXR0aW5nCi0JICogY3BfdHJhbnNwb3J0X2RhdGEuIFdlIHF1aWVzY2UgdGhlc2UgdGhyZWFkcyBieSBzZXR0aW5nCi0JICogY3Bfc3RhdGUgdG8gc29tZXRoaW5nIG90aGVyIHRoYW4gUkRTX0NPTk5fVVAsIGFuZCB0aGVuCi0JICogd2FpdGluZyBmb3IgYW55IGV4aXN0aW5nIHRocmVhZHMgaW4gcmRzX3NlbmRfeG1pdCB0bwotCSAqIGNvbXBsZXRlIHJlbGVhc2VfaW5feG1pdCgpLiAoU3Vic2VxdWVudCB0aHJlYWRzIGVudGVyaW5nCi0JICogcmRzX3NlbmRfeG1pdCgpIHdpbGwgYmFpbCBvbiAhcmRzX2Nvbm5fdXAoKS4KJiM0MzsJICogY3BfdHJhbnNwb3J0X2RhdGEuICBTZXR0aW5nIGNwX3N0YXRlIHRvIHNvbWV0aGluZyBvdGhlcgomIzQzOwkgKiB0aGFuIFJEU19DT05OX1VQIHN0b3BzIG5ldyBzZW5kZXJzLCBhbmQgb3duaW5nIFJEU19JTl9YTUlUCiYjNDM7CSAqIGV4Y2x1ZGVzIGFueSB0aHJlYWQgYWxyZWFkeSBpbnNpZGUgcmRzX3NlbmRfeG1pdCgpIGZvciB0aGUKJiM0MzsJICogd2hvbGUgc29ja2V0IHN3YXAgYW5kIHRoZSByZHNfc2VuZF9wYXRoX3Jlc2V0KCkgYmVsb3cuCiAJICoKLQkgKiBIb3dldmVyIGFuIGluY29taW5nIHN5bi1hY2sgYXQgdGhpcyBwb2ludCB3b3VsZCBlbmQgdXAKLQkgKiBtYXJraW5nIHRoZSBjb25uIGFzIFJEU19DT05OX1VQLCBhbmQgd291bGQgYWdhaW4gcGVybWl0Ci0JICogcmRzX3NlbmRfeG1pKCkgdGhyZWFkcyB0aHJvdWdoLCBzbyBpZGVhbGx5IHdlIHdvdWxkCi0JICogc3luY2hyb25pemUgb24gUkRTX0NPTk5fVVAgYWZ0ZXIgbG9ja19zb2NrKCksIGJ1dCBjYW5ub3QKLQkgKiBkbyB0aGF0OiB3YWl0aW5nIG9uICFSRFNfSU5fWE1JVCBhZnRlciBsb2NrX3NvY2soKSBtYXkKLQkgKiBlbmQgdXAgZGVhZGxvY2tpbmcgd2l0aCB0Y3Bfc2VuZG1zZygpLCBhbmQgdGhlIFJEU19JTl9YTUlUCi0JICogd291bGQgbm90IGdldCBzZXQuIEFzIGEgcmVzdWx0LCB3ZSBzZXQgY19zdGF0ZSB0bwotCSAqIFJEU19DT05OX1JFU0VUVFRJTkcsIHRvIGVuc3VyZSB0aGF0IHJkc190Y3Bfc3RhdGVfY2hhbmdlCi0JICogY2Fubm90IG1hcmsgcmRzX2Nvbm5fcGF0aF91cCgpIGluIHRoZSB3aW5kb3cgYmVmb3JlIGxvY2tfc29jaygpCiYjNDM7CSAqIEFuIGluY29taW5nIHN5bi1hY2sgYXQgdGhpcyBwb2ludCB3b3VsZCBlbmQgdXAgbWFya2luZyB0aGUKJiM0MzsJICogY29ubiBhcyBSRFNfQ09OTl9VUCwgYW5kIHdvdWxkIGFnYWluIHBlcm1pdCByZHNfc2VuZF94bWl0KCkKJiM0MzsJICogdGhyZWFkcyB0aHJvdWdoLCBzbyBpZGVhbGx5IHdlIHdvdWxkIHN5bmNocm9uaXplIG9uCiYjNDM7CSAqIFJEU19DT05OX1VQIGFmdGVyIGxvY2tfc29jaygpLCBidXQgY2Fubm90IGRvIHRoYXQ6IGFjcXVpcmluZwomIzQzOwkgKiBSRFNfSU5fWE1JVCBhZnRlciBsb2NrX3NvY2soKSBtYXkgZW5kIHVwIGRlYWRsb2NraW5nIHdpdGgKJiM0MzsJICogdGNwX3NlbmRtc2coKSwgd2hpY2ggdGFrZXMgdGhlIHNvY2tldCBsb2NrIHdoaWxlIGhvbGRpbmcKJiM0MzsJICogUkRTX0lOX1hNSVQuICBBcyBhIHJlc3VsdCwgd2Ugc2V0IGNfc3RhdGUgdG8KJiM0MzsJICogUkRTX0NPTk5fUkVTRVRUSU5HLCB0byBlbnN1cmUgdGhhdCByZHNfdGNwX3N0YXRlX2NoYW5nZQomIzQzOwkgKiBjYW5ub3QgbWFyayByZHNfY29ubl9wYXRoX3VwKCkgaW4gdGhlIHdpbmRvdyBiZWZvcmUKJiM0MzsJICogbG9ja19zb2NrKCkuCiYjNDM7CSAqCiYjNDM7CSAqIE9ubHkgbWFrZSB0aGF0IHRyYW5zaXRpb24gaWYgdGhlIHBhdGggaXMgc3RpbGwgY29ubmVjdGluZwomIzQzOwkgKiAob3IgYWxyZWFkeSByZXNldHRpbmcgZnJvbSBhbiBlYXJsaWVyIGR1ZWwpLCBzbyB0aGF0IGEKJiM0MzsJICogY29uY3VycmVudCBzaHV0ZG93biYjMzk7cyBSRFNfQ09OTl9FUlJPUi9SRFNfQ09OTl9ESVNDT05ORUNUSU5HCiYjNDM7CSAqIGlzIG5vdCBvdmVyd3JpdHRlbjsgYSBwYXRoIGluIGFueSBvdGhlciBzdGF0ZSBpcyBkcm9wcGVkCiYjNDM7CSAqIGFuZCBpdHMgcGVuZGluZyBzaHV0ZG93biB3aW5zLgomIzQzOwkgKi8KJiM0MzsJaWYgKCFyZHNfY29ubl9wYXRoX3RyYW5zaXRpb24oY3AsIFJEU19DT05OX0NPTk5FQ1RJTkcsCiYjNDM7CQkJCSAgICAgIFJEU19DT05OX1JFU0VUVElORykgJmFtcDsmYW1wOwomIzQzOwkgICAgIXJkc19jb25uX3BhdGhfdHJhbnNpdGlvbihjcCwgUkRTX0NPTk5fUkVTRVRUSU5HLAomIzQzOwkJCQkgICAgICBSRFNfQ09OTl9SRVNFVFRJTkcpKQomIzQzOwkJcmRzX2Nvbm5fcGF0aF9kcm9wKGNwLCAwKTsKJiM0MzsJd2FpdF9ldmVudChjcC0mZ3Q7Y3Bfd2FpdHEsCiYjNDM7CQkgICAhdGVzdF9hbmRfc2V0X2JpdF9sb2NrKFJEU19JTl9YTUlULCAmYW1wO2NwLSZndDtjcF9mbGFncykpOwomIzQzOwomIzQzOwkvKiBSZWFkIHRfc29jayBvbmx5IHdoaWxlIG93bmluZyBSRFNfSU5fWE1JVC4gIFRoZSB0ZWFyZG93biBpbgomIzQzOwkgKiByZHNfY29ubl9zaHV0ZG93bigpIHJlbGVhc2VzIHRoZSBvbGQgc29ja2V0IGFuZCBjbGVhcnMKJiM0MzsJICogdF9zb2NrLCBzbyBhIHBvaW50ZXIgc2FtcGxlZCBiZWZvcmUgdGhlIHdhaXQgY2FuIGJlIHN0YWxlCiYjNDM7CSAqIGJ5IHRoZSB0aW1lIHdlIHdha2UgdXAuCiAJICovCi0JYXRvbWljX3NldCgmYW1wO2NwLSZndDtjcF9zdGF0ZSwgUkRTX0NPTk5fUkVTRVRUSU5HKTsKLQl3YWl0X2V2ZW50KGNwLSZndDtjcF93YWl0cSwgIXRlc3RfYml0KFJEU19JTl9YTUlULCAmYW1wO2NwLSZndDtjcF9mbGFncykpOwomIzQzOwlvc29jayA9IHRjLSZndDt0X3NvY2s7CiYjNDM7CWlmICghb3NvY2spCiYjNDM7CQlnb3RvIG5ld3NvY2s7CiYjNDM7CiAJLyogcmVzZXQgcmVjZWl2ZSBzaWRlIHN0YXRlIGZvciByZHNfdGNwX2RhdGFfcmVjdigpIGZvciBvc29jayAgKi8KIAljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmFtcDtjcC0mZ3Q7Y3Bfc2VuZF93KTsKIAljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmFtcDtjcC0mZ3Q7Y3BfcmVjdl93KTsKQEAgLTE3Miw2ICYjNDM7MTkzLDkgQEAgdm9pZCByZHNfdGNwX3Jlc2V0X2NhbGxiYWNrcyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLAogCWxvY2tfc29jayhzb2NrLSZndDtzayk7CiAJcmRzX3RjcF9zZXRfY2FsbGJhY2tzKHNvY2ssIGNwKTsKIAlyZWxlYXNlX3NvY2soc29jay0mZ3Q7c2spOwomIzQzOwomIzQzOwljbGVhcl9iaXRfdW5sb2NrKFJEU19JTl9YTUlULCAmYW1wO2NwLSZndDtjcF9mbGFncyk7CiYjNDM7CXdha2VfdXBfYWxsKCZhbXA7Y3AtJmd0O2NwX3dhaXRxKTsKIH0KIAogLyogQWRkIHRjIHRvIHJkc190Y3BfdGNfbGlzdCBhbmQgc2V0IHRjLSZndDt0X3NvY2suIFNlZSBjb21tZW50cwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAwMDoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NzcxCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFJEUyBDb25uZWN0aW9uIEhhbmRsaW5nIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIGhvdyBSZWxpYWJsZSBEYXRhZ3JhbSBTb2NrZXRzIChSRFMpIGhhbmRsZXMgY29ubmVjdGlvbnMsIHNwZWNpZmljYWxseSBkdXJpbmcgc2h1dGRvd24gYW5kIHJlc2V0LCBhY3Jvc3MgdGhvc2UgdGhyZWUgZmlsZXM6IGBjb25uZWN0aW9uLmNgLCBgc2VuZC5jYCwgYW5kIGB0Y3AuY2AuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgYWRkcmVzc2luZyBhIHJhY2UgY29uZGl0aW9uLCB3aGljaCBpcyBhbHdheXMgd29ydGggYSBjbG9zZXIgbG9vay4gVGhleSYjMzk7cmUgdXNpbmcgYHRlc3RfYW5kX3NldF9iaXRfbG9ja2AgaW5zdGVhZCBvZiBqdXN0IHdhaXRpbmcsIGFuZCBgd3FfaGFzX3NsZWVwZXJgIGZvciBhIHN0cm9uZ2VyIG1lbW9yeSBiYXJyaWVyLiBTbWFydCBtb3ZlIOKAkyB0aGF0IHNob3VsZCByZWFsbHkgdGlnaHRlbiB0aGluZ3MgdXAgYXJvdW5kIHRob3NlIGBSRFNfSU5fWE1JVGAgYW5kIGBSRFNfUkVDVl9SRUZJTExgIGZsYWdzLiBJbiBgcmRzX3RjcF9yZXNldF9jYWxsYmFja3NgLCBpdCBzZWVtcyB0aGV5IGFyZSBtYWtpbmcgc29tZSBsb2NrIG1hbmFnZW1lbnQgY2hhbmdlcyB3aGVuIHJlc2V0dGluZyB0aGUgc29ja2V0LgoKVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGRlZXAgaW4gUkRTLCB3aGljaCBjb3VsZCBiZSBpbXBvcnRhbnQuIEJlY2F1c2UgUkRTIGNhbiBvcGVyYXRlIG92ZXIgVENQIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgdGhpcyBtYWtlcyB0aGUgcGF0Y2ggaW50ZXJlc3RpbmcgZm9yIGFuYWx5c2lzLiBJJiMzOTttIHRoaW5raW5nLCB0aGlzIGRlZmluaXRlbHkgd2FycmFudHMgc29tZSBmdXp6aW5nLiBHb3R0YSBjaGVjayB0aGUgYXR0YWNrIHN1cmZhY2UuCgpMZXQmIzM5O3Mgc2VlLCB3aGF0IGZ1bmN0aW9ucyBkaWQgdGhleSB0b3VjaD8gT2theSwgSSYjMzk7dmUgZ290OiBgcmRzX2Nvbm5fcGF0aF9yZXNldGAsIGByZHNfY29ubl9zaHV0ZG93bmAsIGByZWxlYXNlX2luX3htaXRgLCBgcmRzX3NlbmRfeG1pdGAsIGFuZCBgcmRzX3RjcF9yZXNldF9jYWxsYmFja3NgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgZXhwb3NlZCB0aGV5IGFyZS4KClJpZ2h0LCBgcmRzX2Nvbm5fc2h1dGRvd25gIGlzIGNhbGxlZCBmcm9tIGByZHNfY29ubl9kZXN0cm95YCwgYHJkc19jb25uX2Ryb3BgLCBldGMuLCBzbyB0aGF0JiMzOTtzIGludGVyZXN0aW5nLiBgcmRzX3NlbmRfeG1pdGAgaXMgdHJpZ2dlcmVkIGJ5IGByZHNfc2VuZG1zZ2AsIHdoaWNoIGdpdmVzIHVzIGEgcG90ZW50aWFsIGVudHJ5IHBvaW50IGFuZCBgcmRzX3RjcF9yZXNldF9jYWxsYmFja3NgIGlzIGNhbGxlZCBmcm9tIGByZHNfdGNwX2FjY2VwdF9vbmVgLgoKT2theSwgSSYjMzk7bGwgZ28gYWhlYWQgYW5kIGRvIGEgcXVpY2sgc2VhcmNoIGZvciBgcmRzX2Nvbm5fc2h1dGRvd25gLCBgcmRzX3NlbmRfeG1pdGAsIGFuZCBgcmRzX3RjcF9yZXNldF9jYWxsYmFja3NgIHRvIHNlZSBob3cgdGhvc2UgYXJlIGNhbGxlZCwgYW5kIGdldCBhIGJldHRlciBwaWN0dXJlIG9mIHRoZSBwb3RlbnRpYWwgaW1wYWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDAwOjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Jkc19jb25uX3NodXRkb3duJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3Jkcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3Jkcy9jb25uZWN0aW9uLmM9Mzg3PUVYUE9SVF9TWU1CT0xfR1BMKHJkc19jb25uX2NyZWF0ZV9vdXRnb2luZyk7XG5uZXQvcmRzL2Nvbm5lY3Rpb24uYy0zODgtXG5uZXQvcmRzL2Nvbm5lY3Rpb24uYzozODk6dm9pZCByZHNfY29ubl9zaHV0ZG93bihzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApXG5uZXQvcmRzL2Nvbm5lY3Rpb24uYy0zOTAte1xuLS1cbm5ldC9yZHMvcmRzLmg9ODE1PXN0cnVjdCByZHNfY29ubmVjdGlvbiAqcmRzX2Nvbm5fY3JlYXRlX291dGdvaW5nKHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvcmRzL3Jkcy5oLTgxOS1cdFx0XHRcdFx0XHR1OCB0b3MsIGdmcF90IGdmcCwgaW50IGRldl9pZik7XG5uZXQvcmRzL3Jkcy5oOjgyMDp2b2lkIHJkc19jb25uX3NodXRkb3duKHN0cnVjdCByZHNfY29ubl9wYXRoICpjcGF0aCk7XG5uZXQvcmRzL3Jkcy5oLTgyMS12b2lkIHJkc19jb25uX2Rlc3Ryb3koc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKTtcbi0tXG5uZXQvcmRzL3NlbmQuYz0xOTI9aW50IHJkc19zZW5kX3htaXQoc3RydWN0IHJkc19jb25uX3BhdGggKmNwKVxuLS1cbm5ldC9yZHMvc2VuZC5jLTI0Ni1cdC8qXG5uZXQvcmRzL3NlbmQuYzoyNDc6XHQgKiByZHNfY29ubl9zaHV0ZG93bigpIHNldHMgdGhlIGNvbm4gc3RhdGUgYW5kIHRoZW4gYWNxdWlyZXNcbm5ldC9yZHMvc2VuZC5jLTI0OC1cdCAqIFJEU19JTl9YTUlUOyB3ZSB0YWtlIHRoZSBsb2NrIGZpcnN0IGFuZCB0aGVuIGNoZWNrIHRoZSBzdGF0ZSxcbi0tXG5uZXQvcmRzL3RjcC5jPTEyOT12b2lkIHJkc190Y3BfcmVzZXRfY2FsbGJhY2tzKHN0cnVjdCBzb2NrZXQgKnNvY2ssXG4tLVxubmV0L3Jkcy90Y3AuYy0xNjktXHQvKiBSZWFkIHRfc29jayBvbmx5IHdoaWxlIG93bmluZyBSRFNfSU5fWE1JVC4gIFRoZSB0ZWFyZG93biBpblxubmV0L3Jkcy90Y3AuYzoxNzA6XHQgKiByZHNfY29ubl9zaHV0ZG93bigpIHJlbGVhc2VzIHRoZSBvbGQgc29ja2V0IGFuZCBjbGVhcnNcbm5ldC9yZHMvdGNwLmMtMTcxLVx0ICogdF9zb2NrLCBzbyBhIHBvaW50ZXIgc2FtcGxlZCBiZWZvcmUgdGhlIHdhaXQgY2FuIGJlIHN0YWxlXG4tLVxubmV0L3Jkcy90aHJlYWRzLmM9MjQzPXZvaWQgcmRzX3NodXRkb3duX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxubmV0L3Jkcy90aHJlYWRzLmMtMjQ4LVxubmV0L3Jkcy90aHJlYWRzLmM6MjQ5Olx0cmRzX2Nvbm5fc2h1dGRvd24oY3ApO1xubmV0L3Jkcy90aHJlYWRzLmMtMjUwLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAwMDoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTgxCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyB0aGUgUkRTIENvbm5lY3Rpb24gU2h1dGRvd24gU2VxdWVuY2UqKgoKT2theSwgc28gYHJkc19jb25uX3NodXRkb3duYCBpcyB0aGUga2V5IGZ1bmN0aW9uIGJlaW5nIGNhbGxlZCBmcm9tIGByZHNfc2h1dGRvd25fd29ya2VyYC4gVGhhdCBpbW1lZGlhdGVseSBmbGFncyBhIHBvdGVudGlhbCBhcmVhIG9mIGNvbmNlcm4gd2hlbiB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGNvbm5lY3Rpb24gdGVhcmRvd24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBzaHV0ZG93biBwcm9jZWR1cmUuCgpNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIGZsb3cgYW5kIGlkZW50aWZ5IHdoZXJlIHRoZSBuZXR3b3JrIHJlc291cmNlcyBjb3VsZCBiZSBnZXR0aW5nIHJlbGVhc2VkLiBXZSBuZWVkIHRvIGJlIGNhcmVmdWwgd2l0aCByZXNvdXJjZSBtYW5hZ2VtZW50IHRvIGF2b2lkIG1lbW9yeSBjb3JydXB0aW9uLCB1c2UgYWZ0ZXIgZnJlZSBlcnJvcnMsIG9yIGRlYWRsb2NrcyBkdXJpbmcgYSBzaHV0ZG93bi4KCkkmIzM5O20gdGhpbmtpbmcgSSBzaG91bGQgbG9vayBjbG9zZWx5IGF0IGEgY291cGxlIG9mIGltcG9ydGFudCBwaWVjZXMuIEZpcnN0LCBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGRhdGEgaXMgaGFuZGxlZCB3aGVuIGEgY29ubmVjdGlvbiBpcyBzaHV0dGluZyBkb3duLCBzbyBJJiMzOTtsbCBjaGVjayBgcmRzX3NlbmRfeG1pdGAuIFNlY29uZGx5LCBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIFRDUCBjb25uZWN0aW9uIGlzIHJlc2V0IGFuZCBob3cgb3VyIGNhbGxiYWNrcyBhcmUgY2xlYXJlZCBkdXJpbmcgdGhpcyBwcm9jZWR1cmUsIHNvIEkmIzM5O2xsIHJldmlldyBgcmRzX3RjcF9yZXNldF9jYWxsYmFja3NgLiBCb3RoIG9mIHRoZXNlIGFyZSBhcmVhcyB3aGVyZSB3ZSBjb3VsZCBlYXNpbHkgaW50cm9kdWNlIGEgc3VidGxlIGJ1ZyByZWxhdGVkIHRvIHRoZSBzaHV0ZG93biBzZXF1ZW5jZSwgYW5kIEkga25vdyBmcm9tIGV4cGVyaWVuY2UgdGhhdCB0aGVzZSB0eXBlcyBvZiBpc3N1ZXMgY2FuIGJlIGRpZmZpY3VsdCB0byBkZWJ1Zy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAwMDoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZHNfc2VuZF94bWl0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3Jkcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3Jkcy9jb25nLmM9MjE3PXZvaWQgcmRzX2NvbmdfcXVldWVfdXBkYXRlcyhzdHJ1Y3QgcmRzX2NvbmdfbWFwICptYXApXG4tLVxubmV0L3Jkcy9jb25nLmMtMjMwLVx0XHRcdHJkc19zdGF0c19pbmMoc19jb25nX3VwZGF0ZV9xdWV1ZWQpO1xubmV0L3Jkcy9jb25nLmM6MjMxOlx0XHRcdC8qIFdlIGNhbm5vdCBpbmxpbmUgdGhlIGNhbGwgdG8gcmRzX3NlbmRfeG1pdCgpIGhlcmVcbm5ldC9yZHMvY29uZy5jLTIzMi1cdFx0XHQgKiBmb3IgdHdvIHJlYXNvbnMgKGJvdGggcGVydGFpbmluZyB0byBhIFRDUCB0cmFuc3BvcnQpOlxuLS1cbm5ldC9yZHMvaWJfY20uYz0yODI9c3RhdGljIHZvaWQgcmRzX2liX3Rhc2tsZXRfZm5fc2VuZCh1bnNpZ25lZCBsb25nIGRhdGEpXG4tLVxubmV0L3Jkcy9pYl9jbS5jLTI5OS1cdCAgICB0ZXN0X2JpdCgwLCBcdTAwMjZjb25uLVx1MDAzZWNfbWFwX3F1ZXVlZCkpKVxubmV0L3Jkcy9pYl9jbS5jOjMwMDpcdFx0cmRzX3NlbmRfeG1pdChcdTAwMjZpYy1cdTAwM2Vjb25uLVx1MDAzZWNfcGF0aFswXSk7XG5uZXQvcmRzL2liX2NtLmMtMzAxLX1cbi0tXG5uZXQvcmRzL2liX3NlbmQuYz0yNDU9dm9pZCByZHNfaWJfc2VuZF9jcWVfaGFuZGxlcihzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljLCBzdHJ1Y3QgaWJfd2MgKndjKVxuLS1cbm5ldC9yZHMvaWJfc2VuZC5jLTMzNS0gKlxubmV0L3Jkcy9pYl9zZW5kLmM6MzM2OiAqIFRoZSBSRFMgc2VuZCBjb2RlIGlzIGVzc2VudGlhbGx5IHNpbmdsZS10aHJlYWRlZDsgcmRzX3NlbmRfeG1pdFxubmV0L3Jkcy9pYl9zZW5kLmMtMzM3LSAqIHNldHMgUkRTX0lOX1hNSVQgdG8gZW5zdXJlIGV4Y2x1c2l2ZSBhY2Nlc3MgdG8gdGhlIHNlbmQgcmluZy5cbi0tXG5uZXQvcmRzL2xvb3AuYz0yMzU9dm9pZCByZHNfbG9vcF9uZXRfZXhpdCh2b2lkKVxuLS1cbm5ldC9yZHMvbG9vcC5jLTI0MS0gKiBUaGlzIGlzIG1pc3NpbmcgLnhtaXRfKiBiZWNhdXNlIGxvb3AgZG9lc24mIzM5O3QgZ28gdGhyb3VnaCBnZW5lcmljXG5uZXQvcmRzL2xvb3AuYzoyNDI6ICogcmRzX3NlbmRfeG1pdCgpIGFuZCBkb2VzbiYjMzk7dCBjYWxsIHJkc19yZWN2X2luY29taW5nKCkuICAubGlzdGVuX3N0b3AgYW5kXG5uZXQvcmRzL2xvb3AuYy0yNDMtICogLmxhZGRyX2NoZWNrIGFyZSBtaXNzaW5nIGJlY2F1c2UgdHJhbnNwb3J0LmMgZG9lc24mIzM5O3QgaXRlcmF0ZSBvdmVyXG4tLVxubmV0L3Jkcy9yZHMuaD01NDA9c3RydWN0IHJkc190cmFuc3BvcnQge1xuLS1cbm5ldC9yZHMvcmRzLmgtNTgwLVx0Lypcbm5ldC9yZHMvcmRzLmg6NTgxOlx0ICogLnhtaXQgaXMgY2FsbGVkIGJ5IHJkc19zZW5kX3htaXQoKSB0byB0ZWxsIHRoZSB0cmFuc3BvcnQgdG8gc2VuZFxubmV0L3Jkcy9yZHMuaC01ODItXHQgKiBwYXJ0IG9mIGEgbWVzc2FnZS4gIFRoZSBjYWxsZXIgc2VyaWFsaXplcyBvbiB0aGUgc2VuZF9zZW0gc28gdGhpc1xuLS1cbm5ldC9yZHMvcmRzLmg9OTU3PXZvaWQgcmRzX3NlbmRfcGF0aF9yZXNldChzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY29ubik7XG5uZXQvcmRzL3Jkcy5oOjk1ODppbnQgcmRzX3NlbmRfeG1pdChzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApO1xubmV0L3Jkcy9yZHMuaC05NTktc3RydWN0IHNvY2thZGRyX2luO1xuLS1cbm5ldC9yZHMvc2VuZC5jLTQ0LVxubmV0L3Jkcy9zZW5kLmM6NDU6LyogV2hlbiB0cmFuc21pdHRpbmcgbWVzc2FnZXMgaW4gcmRzX3NlbmRfeG1pdCwgd2UgbmVlZCB0byBlbWVyZ2UgZnJvbVxubmV0L3Jkcy9zZW5kLmMtNDYtICogdGltZSB0byB0aW1lIGFuZCBicmllZmx5IHJlbGVhc2UgdGhlIENQVS4gT3RoZXJ3aXNlIHRoZSBzb2Z0bG9jayB3YXRjaGRvZ1xuLS1cbm5ldC9yZHMvc2VuZC5jPTU5PXN0YXRpYyB2b2lkIHJkc19zZW5kX3JlbW92ZV9mcm9tX3NvY2soc3RydWN0IGxpc3RfaGVhZCAqbWVzc2FnZXMsIGludCBzdGF0dXMpO1xuLS1cbm5ldC9yZHMvc2VuZC5jLTYyLSAqIFJlc2V0IHRoZSBzZW5kIHN0YXRlLiAgQ2FsbGVycyBtdXN0IGVuc3VyZSB0aGF0IHRoaXMgZG9lc24mIzM5O3QgcmFjZSB3aXRoXG5uZXQvcmRzL3NlbmQuYzo2MzogKiByZHNfc2VuZF94bWl0KCkuXG5uZXQvcmRzL3NlbmQuYy02NC0gKi9cbi0tXG5uZXQvcmRzL3NlbmQuYz0xMzM9c3RhdGljIGJvb2wgcmRzX21wcmRzX2NwMF9jYXRjaHVwKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubilcbi0tXG5uZXQvcmRzL3NlbmQuYy0xOTEtICovXG5uZXQvcmRzL3NlbmQuYzoxOTI6aW50IHJkc19zZW5kX3htaXQoc3RydWN0IHJkc19jb25uX3BhdGggKmNwKVxubmV0L3Jkcy9zZW5kLmMtMTkzLXtcbi0tXG5uZXQvcmRzL3NlbmQuYy01NTUtfVxubmV0L3Jkcy9zZW5kLmM6NTU2OkVYUE9SVF9TWU1CT0xfR1BMKHJkc19zZW5kX3htaXQpO1xubmV0L3Jkcy9zZW5kLmMtNTU3LVxuLS1cbm5ldC9yZHMvc2VuZC5jPTY5MD1zdGF0aWMgdm9pZCByZHNfc2VuZF9yZW1vdmVfZnJvbV9zb2NrKHN0cnVjdCBsaXN0X2hlYWQgKm1lc3NhZ2VzLCBpbnQgc3RhdHVzKVxuLS1cbm5ldC9yZHMvc2VuZC5jLTc2NS0gKiBtZXNzYWdlcyB1cCB0bywgYW5kIGluY2x1ZGluZywgdGhlIGdpdmVuIHNlcXVlbmNlIG51bWJlci4gIE1lc3NhZ2VzIGFyZVxubmV0L3Jkcy9zZW5kLmM6NzY2OiAqIG1vdmVkIHRvIHRoZSByZXRyYW5zIHF1ZXVlIHdoZW4gcmRzX3NlbmRfeG1pdCBwaWNrcyB0aGVtIG9mZiB0aGUgc2VuZFxubmV0L3Jkcy9zZW5kLmMtNzY3LSAqIHF1ZXVlLiBUaGlzIG1lYW5zIHRoYXQgaW4gdGhlIFRDUCBjYXNlLCB0aGUgbWVzc2FnZSBtYXkgbm90IGhhdmUgYmVlblxuLS1cbm5ldC9yZHMvc2VuZC5jPTExNTI9aW50IHJkc19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHBheWxvYWRfbGVuKVxuLS1cbm5ldC9yZHMvc2VuZC5jLTE0NDktXG5uZXQvcmRzL3NlbmQuYzoxNDUwOlx0cmV0ID0gcmRzX3NlbmRfeG1pdChjcGF0aCk7XG5uZXQvcmRzL3NlbmQuYy0xNDUxLVx0aWYgKHJldCA9PSAtRU5PTUVNIHx8IHJldCA9PSAtRUFHQUlOKSB7XG4tLVxubmV0L3Jkcy90Y3AuYz05Nj12b2lkIHJkc190Y3BfcmVzdG9yZV9jYWxsYmFja3Moc3RydWN0IHNvY2tldCAqc29jayxcbi0tXG5uZXQvcmRzL3RjcC5jLTEyNi0gKiBhbmQgdGhlIHN3YXAgZG9uZSBoZXJlIHJ1bnMgdW5kZXIgUkRTX0lOX1hNSVQgc28gdGhhdCBpdCBjYW5ub3Rcbm5ldC9yZHMvdGNwLmM6MTI3OiAqIGludGVybGVhdmUgd2l0aCBhIHNlbmRlciBhbHJlYWR5IGluc2lkZSByZHNfc2VuZF94bWl0KCkuXG5uZXQvcmRzL3RjcC5jLTEyOC0gKi9cbm5ldC9yZHMvdGNwLmM9MTI5PXZvaWQgcmRzX3RjcF9yZXNldF9jYWxsYmFja3Moc3RydWN0IHNvY2tldCAqc29jayxcbi0tXG5uZXQvcmRzL3RjcC5jLTE0MC1cdCAqIHRoYW4gUkRTX0NPTk5fVVAgc3RvcHMgbmV3IHNlbmRlcnMsIGFuZCBvd25pbmcgUkRTX0lOX1hNSVRcbm5ldC9yZHMvdGNwLmM6MTQxOlx0ICogZXhjbHVkZXMgYW55IHRocmVhZCBhbHJlYWR5IGluc2lkZSByZHNfc2VuZF94bWl0KCkgZm9yIHRoZVxubmV0L3Jkcy90Y3AuYy0xNDItXHQgKiB3aG9sZSBzb2NrZXQgc3dhcCBhbmQgdGhlIHJkc19zZW5kX3BhdGhfcmVzZXQoKSBiZWxvdy5cbi0tXG5uZXQvcmRzL3RjcC5jLTE0NC1cdCAqIEFuIGluY29taW5nIHN5bi1hY2sgYXQgdGhpcyBwb2ludCB3b3VsZCBlbmQgdXAgbWFya2luZyB0aGVcbm5ldC9yZHMvdGNwLmM6MTQ1Olx0ICogY29ubiBhcyBSRFNfQ09OTl9VUCwgYW5kIHdvdWxkIGFnYWluIHBlcm1pdCByZHNfc2VuZF94bWl0KClcbm5ldC9yZHMvdGNwLmMtMTQ2LVx0ICogdGhyZWFkcyB0aHJvdWdoLCBzbyBpZGVhbGx5IHdlIHdvdWxkIHN5bmNocm9uaXplIG9uXG4tLVxubmV0L3Jkcy90aHJlYWRzLmM9MTkxPXZvaWQgcmRzX3NlbmRfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5uZXQvcmRzL3RocmVhZHMuYy0xOTktXHRcdGNsZWFyX2JpdChSRFNfTExfU0VORF9GVUxMLCBcdTAwMjZjcC1cdTAwM2VjcF9mbGFncyk7XG5uZXQvcmRzL3RocmVhZHMuYzoyMDA6XHRcdHJldCA9IHJkc19zZW5kX3htaXQoY3ApO1xubmV0L3Jkcy90aHJlYWRzLmMtMjAxLVx0XHRjb25kX3Jlc2NoZWQoKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAwMDoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MjAwCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkludGVybmFsIENvZGUgRmxvdyBDb25zaWRlcmF0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IGByZHNfc2VuZF94bWl0YCBpcyB1c2VkLiBJdCYjMzk7cyBkZWZpbml0ZWx5IGV4cG9ydGVkLCBtZWFuaW5nIGl0JiMzOTtzIHZpc2libGUgb3V0c2lkZSBpdHMgaW1tZWRpYXRlIHNjb3BlLiBTZWVtcyBsaWtlIGByZHNfc2VuZG1zZ2AgYW5kIGByZHNfc2VuZF93b3JrZXJgIGFyZSB0aGUga2V5IGNhbGwgc2l0ZXMuIFRoYXQgZ2l2ZXMgbWUgYSBoYW5kbGUgb24gdGhlIGRhdGEgcGF0aCBmb3IgdHJhbnNtaXNzaW9ucy4gS25vd2luZyB0aGVzZSBmdW5jdGlvbnMgY2FsbCBgcmRzX3NlbmRfeG1pdGAgdGVsbHMgbWUgd2hlcmUgdG8gc3RhcnQgbG9va2luZyB3aGVuIGRlYnVnZ2luZyBhIHNlbmQgaXNzdWUuCgpOb3csIGByZHNfdGNwX3Jlc2V0X2NhbGxiYWNrc2AuLi4gdGhhdCYjMzk7cyB0aGUgaW50ZXJlc3Rpbmcgb25lLiBUaGUgdGV4dCBzdWdnZXN0cyBpdCBpcyBjYWxsZWQgZnJvbSBgcmRzX3RjcF9hY2NlcHRfb25lYC4gTmVlZCB0byB2ZXJpZnkgdGhpcyBpbiB0aGUgY29kZS4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgY2FsbCBncmFwaCB0byBiZSBzdXJlIHRoYXQgYHJkc190Y3BfYWNjZXB0X29uZWAgaXMgdGhlIG9ubHkgY2FsbGVyIG9mIGByZHNfdGNwX3Jlc2V0X2NhbGxiYWNrc2AuIElmIHRoYXQmIzM5O3MgdGhlIGNhc2UsIGl0IGdpdmVzIG1lIGEgY2xlYXIgaWRlYSBvZiB3aGVuIHRob3NlIGNhbGxiYWNrcyBhcmUgYmVpbmcgcmVzZXQuIFVuZGVyc3RhbmRpbmcgdGhlc2UgZGVwZW5kZW5jaWVzIGFyZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDAwOjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Jkc190Y3BfcmVzZXRfY2FsbGJhY2tzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3Jkcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3Jkcy9jb25uZWN0aW9uLmM9Mzg5PXZvaWQgcmRzX2Nvbm5fc2h1dGRvd24oc3RydWN0IHJkc19jb25uX3BhdGggKmNwKVxuLS1cbm5ldC9yZHMvY29ubmVjdGlvbi5jLTQzNC1cdFx0LyogUmVsZWFzZSB0aGUgdHdvIGxvY2tzIGFuZCB3YWtlIGFueSB3YWl0ZXIgKGUuZy5cbm5ldC9yZHMvY29ubmVjdGlvbi5jOjQzNTpcdFx0ICogcmRzX3RjcF9yZXNldF9jYWxsYmFja3MoKSkgdGhhdCBibG9ja2VkIG9uIHRoZW0gd2hpbGVcbm5ldC9yZHMvY29ubmVjdGlvbi5jLTQzNi1cdFx0ICogd2UgaGVsZCB0aGVtLiAgcmRzX2Nvbm5fcGF0aF9yZXNldCgpIGxlYXZlcyBib3RoIGJpdHNcbi0tXG5uZXQvcmRzL3RjcC5jPTk2PXZvaWQgcmRzX3RjcF9yZXN0b3JlX2NhbGxiYWNrcyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxuLS1cbm5ldC9yZHMvdGNwLmMtMTE3LS8qXG5uZXQvcmRzL3RjcC5jOjExODogKiByZHNfdGNwX3Jlc2V0X2NhbGxiYWNrcygpIHN3aXRjaGVzIGEgcGF0aCB0byBhIG5ldyBzb2NrZXQgYW5kXG5uZXQvcmRzL3RjcC5jLTExOS0gKiByZWxlYXNlcyB0aGUgb2xkIG9uZSBpdCBmaW5kcyBpbiB0Yy1cdTAwM2V0X3NvY2ssIHJlc29sdmluZyBhIGR1ZWxsaW5nXG4tLVxubmV0L3Jkcy90Y3AuYy0xMjgtICovXG5uZXQvcmRzL3RjcC5jOjEyOTp2b2lkIHJkc190Y3BfcmVzZXRfY2FsbGJhY2tzKHN0cnVjdCBzb2NrZXQgKnNvY2ssXG5uZXQvcmRzL3RjcC5jLTEzMC1cdFx0XHQgICAgIHN0cnVjdCByZHNfY29ubl9wYXRoICpjcClcbi0tXG5uZXQvcmRzL3RjcC5jLTIwMS0vKiBBZGQgdGMgdG8gcmRzX3RjcF90Y19saXN0IGFuZCBzZXQgdGMtXHUwMDNldF9zb2NrLiBTZWUgY29tbWVudHNcbm5ldC9yZHMvdGNwLmM6MjAyOiAqIGFib3ZlIHJkc190Y3BfcmVzZXRfY2FsbGJhY2tzIGZvciBub3RlcyBhYm91dCBzeW5jaHJvbml6YXRpb25cbm5ldC9yZHMvdGNwLmMtMjAzLSAqIHdpdGggZGF0YSBwYXRoXG4tLVxubmV0L3Jkcy90Y3AuaD03ND12b2lkIHJkc190Y3Bfc2V0X2NhbGxiYWNrcyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApO1xubmV0L3Jkcy90Y3AuaDo3NTp2b2lkIHJkc190Y3BfcmVzZXRfY2FsbGJhY2tzKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCByZHNfY29ubl9wYXRoICpjcCk7XG5uZXQvcmRzL3RjcC5oLTc2LXZvaWQgcmRzX3RjcF9yZXN0b3JlX2NhbGxiYWNrcyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxuLS1cbm5ldC9yZHMvdGNwX2xpc3Rlbi5jPTE1Mj1pbnQgcmRzX3RjcF9hY2NlcHRfb25lKHN0cnVjdCByZHNfdGNwX25ldCAqcnRuKVxuLS1cbm5ldC9yZHMvdGNwX2xpc3Rlbi5jLTI5Ni1cdFx0LyogRHVlbGxpbmcgU1lOIGhhcyBiZWVuIGhhbmRsZWQgaW4gcmRzX3RjcF9hY2NlcHRfb25lKCkgKi9cbm5ldC9yZHMvdGNwX2xpc3Rlbi5jOjI5NzpcdFx0cmRzX3RjcF9yZXNldF9jYWxsYmFja3MobmV3X3NvY2ssIGNwKTtcbm5ldC9yZHMvdGNwX2xpc3Rlbi5jLTI5OC1cdFx0LyogcmRzX2Nvbm5lY3RfcGF0aF9jb21wbGV0ZSgpIG1hcmtzIFJEU19DT05OX1VQICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMDA6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTE0OAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYSBuZXR3b3JraW5nIGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyBSRFMgVENQIFJlc2V0IENhbGxiYWNrcyoqCgpBbHJpZ2h0LCBzbyB0aGUgY2x1ZSBoZXJlIGlzIHRoYXQgYHJkc190Y3BfcmVzZXRfY2FsbGJhY2tzYCBpcyBkZWZpbml0ZWx5IGNhbGxlZCBmcm9tIHdpdGhpbiBgcmRzX3RjcF9hY2NlcHRfb25lYC4gR29vZC4gVGhhdCBjb25maXJtcyBhIGNlcnRhaW4gY29ubmVjdGlvbiBmbG93LCBvciBhdCBsZWFzdCBhIHNwZWNpZmljIHBvaW50IG9mIGludGVncmF0aW9uLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsYXJnZXIgY29udGV4dCBvZiAqd2h5KiB0aGlzIGhhcHBlbnMuIEtub3dpbmcgdGhlIGNhbGwgcGF0aCBpcyBqdXN0IHRoZSBiZWdpbm5pbmcuIFRoZSBuZXh0IGxvZ2ljYWwgc3RlcCwgdG8gZ2V0IHRoZSBiaWdnZXIgcGljdHVyZSwgaXMgdG8gaW52ZXN0aWdhdGUgdGhlIGNhbGxlcnMgb2YgYHJkc19jb25uX3NodXRkb3duYC4gVGhhdCYjMzk7bGwgZ2l2ZSBtZSBhIHZpZXcgb2Ygd2hhdCB0cmlnZ2VycyB0aGUgY29ubmVjdGlvbiBzaHV0ZG93biBwcm9jZXNzLCBhbmQgdGhlcmVmb3JlIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIGByZXNldF9jYWxsYmFja3NgIGFyZSB1c2VkIGluIHJlbGF0aW9uIHRvIHRoZSBzaHV0ZG93biBwcm9jZWR1cmUuIFRoYXQgc2hvdWxkIGlsbHVtaW5hdGUgdGhlIGZhaWx1cmUgYW5kIHBvaW50IG1lIHRvIHBvdGVudGlhbCByb290IGNhdXNlcyBhbmQgZml4ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDAwOjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Jkc19jb25uX3NodXRkb3duJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3Jkcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3Jkcy9jb25uZWN0aW9uLmM9Mzg3PUVYUE9SVF9TWU1CT0xfR1BMKHJkc19jb25uX2NyZWF0ZV9vdXRnb2luZyk7XG5uZXQvcmRzL2Nvbm5lY3Rpb24uYy0zODgtXG5uZXQvcmRzL2Nvbm5lY3Rpb24uYzozODk6dm9pZCByZHNfY29ubl9zaHV0ZG93bihzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApXG5uZXQvcmRzL2Nvbm5lY3Rpb24uYy0zOTAte1xuLS1cbm5ldC9yZHMvcmRzLmg9ODE1PXN0cnVjdCByZHNfY29ubmVjdGlvbiAqcmRzX2Nvbm5fY3JlYXRlX291dGdvaW5nKHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvcmRzL3Jkcy5oLTgxOS1cdFx0XHRcdFx0XHR1OCB0b3MsIGdmcF90IGdmcCwgaW50IGRldl9pZik7XG5uZXQvcmRzL3Jkcy5oOjgyMDp2b2lkIHJkc19jb25uX3NodXRkb3duKHN0cnVjdCByZHNfY29ubl9wYXRoICpjcGF0aCk7XG5uZXQvcmRzL3Jkcy5oLTgyMS12b2lkIHJkc19jb25uX2Rlc3Ryb3koc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKTtcbi0tXG5uZXQvcmRzL3NlbmQuYz0xOTI9aW50IHJkc19zZW5kX3htaXQoc3RydWN0IHJkc19jb25uX3BhdGggKmNwKVxuLS1cbm5ldC9yZHMvc2VuZC5jLTI0Ni1cdC8qXG5uZXQvcmRzL3NlbmQuYzoyNDc6XHQgKiByZHNfY29ubl9zaHV0ZG93bigpIHNldHMgdGhlIGNvbm4gc3RhdGUgYW5kIHRoZW4gYWNxdWlyZXNcbm5ldC9yZHMvc2VuZC5jLTI0OC1cdCAqIFJEU19JTl9YTUlUOyB3ZSB0YWtlIHRoZSBsb2NrIGZpcnN0IGFuZCB0aGVuIGNoZWNrIHRoZSBzdGF0ZSxcbi0tXG5uZXQvcmRzL3RjcC5jPTEyOT12b2lkIHJkc190Y3BfcmVzZXRfY2FsbGJhY2tzKHN0cnVjdCBzb2NrZXQgKnNvY2ssXG4tLVxubmV0L3Jkcy90Y3AuYy0xNjktXHQvKiBSZWFkIHRfc29jayBvbmx5IHdoaWxlIG93bmluZyBSRFNfSU5fWE1JVC4gIFRoZSB0ZWFyZG93biBpblxubmV0L3Jkcy90Y3AuYzoxNzA6XHQgKiByZHNfY29ubl9zaHV0ZG93bigpIHJlbGVhc2VzIHRoZSBvbGQgc29ja2V0IGFuZCBjbGVhcnNcbm5ldC9yZHMvdGNwLmMtMTcxLVx0ICogdF9zb2NrLCBzbyBhIHBvaW50ZXIgc2FtcGxlZCBiZWZvcmUgdGhlIHdhaXQgY2FuIGJlIHN0YWxlXG4tLVxubmV0L3Jkcy90aHJlYWRzLmM9MjQzPXZvaWQgcmRzX3NodXRkb3duX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxubmV0L3Jkcy90aHJlYWRzLmMtMjQ4LVxubmV0L3Jkcy90aHJlYWRzLmM6MjQ5Olx0cmRzX2Nvbm5fc2h1dGRvd24oY3ApO1xubmV0L3Jkcy90aHJlYWRzLmMtMjUwLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMDA6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTkzOAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRoZSBleHBlcnQ6CgoqKkludmVzdGlnYXRpbmcgdGhlIFNodXRkb3duIFNlcXVlbmNlKioKCk9rYXksIHNvIEkgc2VlIGByZHNfY29ubl9zaHV0ZG93bmAgYmVpbmcgdHJpZ2dlcmVkIHdpdGhpbiBgcmRzX3NodXRkb3duX3dvcmtlcmAuIE5hdHVyYWxseSwgbXkgbmV4dCBtb3ZlIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuIEkgbmVlZCB0byB0cmFjZSBiYWNrIGFuZCBpZGVudGlmeSB0aGUgY2FsbGluZyBmdW5jdGlvbnMgb2YgYHJkc19zaHV0ZG93bl93b3JrZXJgLiBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsIGdyYXBoIGhlcmUgaXMgY3J1Y2lhbCB0byBzZWUgd2hhdCYjMzk7cyAqYWN0dWFsbHkqIGRyaXZpbmcgdGhlIGNvbm5lY3Rpb24gc2h1dGRvd24gcHJvY2Vzcy4gS25vd2luZyAqd2hvKiBpcyBpbml0aWF0aW5nIHRoaXMgc2h1dGRvd24gd2lsbCBwcm92aWRlIHRoZSBuZWNlc3NhcnkgY29udGV4dCB0byB0cm91Ymxlc2hvb3QgYW55IHByb2JsZW1zIGFuZCBlbnN1cmUgd2UmIzM5O3JlIHNodXR0aW5nIGRvd24gdGhpbmdzIGluIHRoZSBwcm9wZXIgc2VxdWVuY2UuIExldCYjMzk7cyBkaWcgaW4gYW5kIGZpZ3VyZSBvdXQgdGhlIGNoYWluIG9mIGV2ZW50cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMDA6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmRzX3NodXRkb3duX3dvcmtlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9yZHMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9yZHMvY29ubmVjdGlvbi5jPTEzOT1zdGF0aWMgdm9pZCBfX3Jkc19jb25uX3BhdGhfaW5pdChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sXG4tLVxubmV0L3Jkcy9jb25uZWN0aW9uLmMtMTU1LVx0SU5JVF9ERUxBWUVEX1dPUksoXHUwMDI2Y3AtXHUwMDNlY3BfY29ubl93LCByZHNfY29ubmVjdF93b3JrZXIpO1xubmV0L3Jkcy9jb25uZWN0aW9uLmM6MTU2Olx0SU5JVF9XT1JLKFx1MDAyNmNwLVx1MDAzZWNwX2Rvd25fdywgcmRzX3NodXRkb3duX3dvcmtlcik7XG5uZXQvcmRzL2Nvbm5lY3Rpb24uYy0xNTctXHRtdXRleF9pbml0KFx1MDAyNmNwLVx1MDAzZWNwX2NtX2xvY2spO1xuLS1cbm5ldC9yZHMvcmRzLmg9MTA0ND12b2lkIHJkc19jb25uZWN0X3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKik7XG5uZXQvcmRzL3Jkcy5oOjEwNDU6dm9pZCByZHNfc2h1dGRvd25fd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqKTtcbm5ldC9yZHMvcmRzLmgtMTA0Ni12b2lkIHJkc19zZW5kX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKik7XG4tLVxubmV0L3Jkcy90aHJlYWRzLmM9MjE4PXZvaWQgcmRzX3JlY3Zfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5uZXQvcmRzL3RocmVhZHMuYy0yNDItXG5uZXQvcmRzL3RocmVhZHMuYzoyNDM6dm9pZCByZHNfc2h1dGRvd25fd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbm5ldC9yZHMvdGhyZWFkcy5jLTI0NC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDAwOjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNDQzCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogNzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2Ygd2hhdCBuZWVkcyBhdHRlbnRpb24gd2hlbiBoYW5kbGluZyBjb25uZWN0aW9uIHNodXRkb3duIGluIFJEUywgYXBwcm9hY2hlZCBmcm9tIG15IGV4cGVydCBwZXJzcGVjdGl2ZToKCioqRm9jdXNpbmcgb24gUkRTIENvbm5lY3Rpb24gU2h1dGRvd24qKgoKT2theSwgc28gYHJkc19zaHV0ZG93bl93b3JrZXJgIGlzIHRoZSB3b3JrcXVldWUgZnVuY3Rpb24gdGhhdCB0cmlnZ2VycyB3aGVuIGEgY29ubmVjdGlvbiBpcyB0ZXJtaW5hdGVkLiBUaGF0JiMzOTtzIHRoZSBlbnRyeSBwb2ludCB0byBpbnZlc3RpZ2F0ZS4gTmF0dXJhbGx5LCB0aGF0JiMzOTtzIHdoZXJlIHRoZSBjcml0aWNhbCBhY3Rpb25zIHdpbGwgYmUuIEdpdmVuIHRoYXQsIEkga25vdyB0aGUgY3J1Y2lhbCBmdW5jdGlvbnMgdG8gZHJpbGwgZG93biBpbnRvIGFyZToKCiogICBgcmRzX3NlbmRfeG1pdGA6IEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGhhbmRsZXMgb25nb2luZyB0cmFuc21pc3Npb25zIGR1cmluZyBzaHV0ZG93bi4gRG9lcyBpdCBncmFjZWZ1bGx5IGZsdXNoLCBjYW5jZWwsIG9yIHNpbXBseSBkcm9wIHRoZW0/IEFyZSB0aGVyZSByYWNlIGNvbmRpdGlvbnMgdG8gd29ycnkgYWJvdXQ/CiogICBgcmRzX3RjcF9yZXNldF9jYWxsYmFja3NgOiBUaGlzIGlzIGxpa2VseSB3aGVyZSB0aGUgc29ja2V0JiMzOTtzIGFzc29jaWF0ZWQgY2FsbGJhY2tzIGFyZSBiZWluZyBjbGVhcmVkLiBJIG11c3QgY2hlY2sgd2hhdCB0aGVzZSBjYWxsYmFja3Mgd2VyZSBhbmQgaG93IGl0IGNsZWFucyB1cCB0aGVpciBpbnRlcm5hbCBzdGF0ZS4gSSBtdXN0IGVuc3VyZSB0aGlzIGlzIGhhbmRsZWQgcHJvcGVybHksIGNvbnNpZGVyaW5nIHBvdGVudGlhbCBjb25jdXJyZW50IGFjY2Vzcy4KKiAgIGByZHNfY29ubl9zaHV0ZG93bmA6IFRoZSBjb3JlIHNodXRkb3duIGxvZ2ljIGhhcyB0byBiZSBpbiB0aGlzIGZ1bmN0aW9uLiBUaGlzIGlzIHdoZXJlIEkmIzM5O2xsIGZpbmQgaG93IHRoZSBjb25uZWN0aW9uIHN0YXRlIHRyYW5zaXRpb25zIGFuZCBob3cgcmVzb3VyY2VzIGFyZSBmcmVlZC4gSXQgaXMgbGlrZWx5IGl0IHdpbGwgY2FsbCB0aGUgb3RoZXIgdHdvIGFzIHBhcnQgb2YgaXRzIGZ1bmN0aW9ucy4KCk5leHQsIEkmIzM5O2xsIGV4YW1pbmUgdGhlIGNvbmZpZ3VyYXRpb24gYXNwZWN0cyBvZiB0aGUgUkRTIHN1YnN5c3RlbS4gVGhpcyB3YXksIEkga25vdyBhbGwgdGhlIHZhcmlhYmxlcyBpbiB0aGUgbWl4LiBJIGhhdmUgdG8ga25vdyBhbGwgdGhlIHNldHRpbmdzIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzaHV0ZG93biBwcm9jZXNzIGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDAwOjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBSRFMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvcmRzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvcmRzL0tjb25maWctMi1cbm5ldC9yZHMvS2NvbmZpZzozOmNvbmZpZyBSRFNcbm5ldC9yZHMvS2NvbmZpZy00LVx0dHJpc3RhdGUgXCYjMzQ7VGhlIFJlbGlhYmxlIERhdGFncmFtIFNvY2tldHMgUHJvdG9jb2xcJiMzNDtcbi0tXG5uZXQvcmRzL0tjb25maWctOS1cbm5ldC9yZHMvS2NvbmZpZzoxMDpjb25maWcgUkRTX1JETUFcbm5ldC9yZHMvS2NvbmZpZy0xMS1cdHRyaXN0YXRlIFwmIzM0O1JEUyBvdmVyIEluZmluaWJhbmRcJiMzNDtcbi0tXG5uZXQvcmRzL0tjb25maWctMTYtXG5uZXQvcmRzL0tjb25maWc6MTc6Y29uZmlnIFJEU19UQ1Bcbm5ldC9yZHMvS2NvbmZpZy0xOC1cdHRyaXN0YXRlIFwmIzM0O1JEUyBvdmVyIFRDUFwmIzM0O1xuLS1cbm5ldC9yZHMvS2NvbmZpZy0yNC1cbm5ldC9yZHMvS2NvbmZpZzoyNTpjb25maWcgUkRTX0RFQlVHXG5uZXQvcmRzL0tjb25maWctMjYtXHRib29sIFwmIzM0O1JEUyBkZWJ1Z2dpbmcgbWVzc2FnZXNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMDA6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEwMzYKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBSRFMgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKQWxyaWdodCwgc28gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBgUkRTYCBhbmQgYFJEU19UQ1BgIGNvbmZpZ3VyYXRpb25zLiBNeSBmaXJzdCBpbnN0aW5jdCwgYXMgYWx3YXlzLCBpcyB0byBkaXZlIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZpbGVzLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGRlcGVuZGVuY3kgcmVsYXRpb25zaGlwcy4gV2hlcmUgZG8gdGhlc2UgYFJEU2Agb3B0aW9ucyBmaXQgd2l0aGluIHRoZSBicm9hZGVyIGtlcm5lbCBjb25maWd1cmF0aW9uIGxhbmRzY2FwZT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBvdGhlciBmZWF0dXJlcyBvciBtb2R1bGVzIHRoZXkgcmVseSBvbi4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYG5ldC9yZHMvS2NvbmZpZ2AuIFRoYXQmIzM5O3MgdGhlIG9idmlvdXMgcGxhY2UgdG8gZmluZCB0aGUgYW5zd2Vycy4gRnJvbSB0aGVyZSwgSSBjYW4gZGV0ZXJtaW5lIGlmIGFueSBwcmUtcmVxdWlzaXRlcyBhcmUgZW5hYmxlZCBmb3IgYFJEU2AgYW5kIGBSRFNfVENQYC4gSXQmIzM5O3MgYWxsIGFib3V0IGVuc3VyaW5nIHRoYXQgbm90aGluZyBpcyBicm9rZW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDAwOjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3Jkcy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdFxuICAgMzpcdGNvbmZpZyBSRFNcbiAgIDQ6XHRcdHRyaXN0YXRlIFwmIzM0O1RoZSBSZWxpYWJsZSBEYXRhZ3JhbSBTb2NrZXRzIFByb3RvY29sXCYjMzQ7XG4gICA1Olx0XHRkZXBlbmRzIG9uIElORVRcbiAgIDY6XHRcdGhlbHBcbiAgIDc6XHRcdCAgVGhlIFJEUyAoUmVsaWFibGUgRGF0YWdyYW0gU29ja2V0cykgcHJvdG9jb2wgcHJvdmlkZXMgcmVsaWFibGUsXG4gICA4Olx0XHQgIHNlcXVlbmNlZCBkZWxpdmVyeSBvZiBkYXRhZ3JhbXMgb3ZlciBJbmZpbmliYW5kIG9yIFRDUC5cbiAgIDk6XHRcbiAgMTA6XHRjb25maWcgUkRTX1JETUFcbiAgMTE6XHRcdHRyaXN0YXRlIFwmIzM0O1JEUyBvdmVyIEluZmluaWJhbmRcJiMzNDtcbiAgMTI6XHRcdGRlcGVuZHMgb24gUkRTIFx1MDAyNlx1MDAyNiBJTkZJTklCQU5EIFx1MDAyNlx1MDAyNiBJTkZJTklCQU5EX0FERFJfVFJBTlNcbiAgMTM6XHRcdGhlbHBcbiAgMTQ6XHRcdCAgQWxsb3cgUkRTIHRvIHVzZSBJbmZpbmliYW5kIGFzIGEgdHJhbnNwb3J0LlxuICAxNTpcdFx0ICBUaGlzIHRyYW5zcG9ydCBzdXBwb3J0cyBSRE1BIG9wZXJhdGlvbnMuXG4gIDE2Olx0XG4gIDE3Olx0Y29uZmlnIFJEU19UQ1BcbiAgMTg6XHRcdHRyaXN0YXRlIFwmIzM0O1JEUyBvdmVyIFRDUFwmIzM0O1xuICAxOTpcdFx0ZGVwZW5kcyBvbiBSRFNcbiAgMjA6XHRcdGRlcGVuZHMgb24gSVBWNiB8fCAhSVBWNlxuICAyMTpcdFx0aGVscFxuICAyMjpcdFx0ICBBbGxvdyBSRFMgdG8gdXNlIFRDUCBhcyBhIHRyYW5zcG9ydC5cbiAgMjM6XHRcdCAgVGhpcyB0cmFuc3BvcnQgZG9lcyBub3Qgc3VwcG9ydCBSRE1BIG9wZXJhdGlvbnMuXG4gIDI0Olx0XG4gIDI1Olx0Y29uZmlnIFJEU19ERUJVR1xuICAyNjpcdFx0Ym9vbCBcJiMzNDtSRFMgZGVidWdnaW5nIG1lc3NhZ2VzXCYjMzQ7XG4gIDI3Olx0XHRkZXBlbmRzIG9uIFJEU1xuICAyODpcdFx0ZGVmYXVsdCBuXG4gIDI5Olx0XG4gIDMwOlx0Y29uZmlnIEdDT1ZfUFJPRklMRV9SRFNcbiAgMzE6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIEdDT1YgcHJvZmlsaW5nIG9uIFJEU1wmIzM0O1xuICAzMjpcdFx0ZGVwZW5kcyBvbiBHQ09WX0tFUk5FTFxuICAzMzpcdFx0aGVscFxuICAzNDpcdFx0ICBFbmFibGUgR0NPViBwcm9maWxpbmcgb24gUkRTIGZvciBjaGVja2luZyB3aGljaCBmdW5jdGlvbnMvbGluZXNcbiAgMzU6XHRcdCAgYXJlIGV4ZWN1dGVkLlxuICAzNjpcdFxuICAzNzpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAwMDoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTcxMQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDIyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBUaG91Z2h0IFByb2Nlc3Mgb24gUkRTIENvbmZpZ3VyYXRpb24gYW5kIFJlbGV2YW50IEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgUkRTIGNvbmZpZ3VyYXRpb25zLCBgUkRTYCBhbmQgYFJEU19UQ1BgLCB3aXRoIGBJTkVUYCB1c3VhbGx5IGVuYWJsZWQuIEkmIzM5O3ZlIGdvdCBhIGZldyBmb2N1cyBzeW1ib2xzIHRvIGNvbnNpZGVyOiBgcmRzX3NlbmRfeG1pdGAsIGByZHNfdGNwX3Jlc2V0X2NhbGxiYWNrc2AsIGFuZCBgcmRzX2Nvbm5fc2h1dGRvd25gLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueSBvdGhlciBwb3RlbnRpYWxseSB1c2VmdWwgZnVuY3Rpb25zIGluIHRoaXMgYXJlYS4KCmByZHNfY29ubl9wYXRoX3Jlc2V0YCBsb29rcyBwcm9taXNpbmcsIGJ1dCBpdCBtaWdodCBiZSBpbmxpbmVkIG9yIHN0YXRpYywgc28gdGhhdCYjMzk7cyBhIHBvdGVudGlhbCBpc3N1ZS4gYHJkc19jb25uX3NodXRkb3duYCBpcyBwcm9iYWJseSBhIHN0cm9uZ2VyIGJldC4gQW5kLCBJIHNlZSBgcmVsZWFzZV9pbl94bWl0YCBpcyBzdGF0aWMsIHdoaWNoIGlzIG5vdCB3aGF0IEkgbmVlZC4gQWgsIGByZHNfc2VuZF94bWl0YCBzdGlsbCBzZWVtcyBsaWtlIGEgZ29vZCB0YXJnZXQuCgpXYWl0IGEgc2Vjb25kLCBgcmRzX3RjcF9yZXNldF9jYWxsYmFja3NgIOKAkyB0aGF0JiMzOTtzIGluIGBuZXQvcmRzL3RjcC5jYC4gTGV0IG1lIHF1aWNrbHkgY29uZmlybSBpZiB0aGF0IGZ1bmN0aW9uIGlzIGV4cG9ydGVkIG9yIGlmIGl0JiMzOTtzIHN0YXRpYy4gTm9wZSwgaXQmIzM5O3Mgbm90IHN0YXRpYywgd2hpY2ggaXMgYSBnb29kIHNpZ24uIE1heWJlIGByZHNfdGNwX2FjY2VwdF9vbmVgIGlzIGFuIGV2ZW4gYmV0dGVyIGNhbmRpZGF0ZT8gSSBzZWUgdGhhdCBgcmRzX3RjcF9hY2NlcHRfb25lYCAqY2FsbHMqIGByZHNfdGNwX3Jlc2V0X2NhbGxiYWNrc2AuIE5vdyBJIHNob3VsZCBjaGVjayB0aGUgY2FsbGVycyBvZiBgcmRzX3RjcF9hY2NlcHRfb25lYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMDA6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmRzX3RjcF9hY2NlcHRfb25lJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3Jkcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3Jkcy9yZHMuaD01NDA9c3RydWN0IHJkc190cmFuc3BvcnQge1xuLS1cbm5ldC9yZHMvcmRzLmgtNTU0LVx0ICogY29ubl9zbG90c19hdmFpbGFibGUgaXMgaW52b2tlZCB3aGVuIGEgcHJldmlvdXNseSB1bmF2YWlsYWJsZVxubmV0L3Jkcy9yZHMuaDo1NTU6XHQgKiBjb25uZWN0aW9uIHNsb3QgYmVjb21lcyBhdmFpbGFibGUgYWdhaW4uIHJkc190Y3BfYWNjZXB0X29uZV9wYXRoIG1heVxubmV0L3Jkcy9yZHMuaC01NTYtXHQgKiByZXR1cm4gLUVOT0JVRlMgaWYgaXQgY2Fubm90IGZpbmQgYW4gYXZhaWxhYmxlIHNsb3QsIGFuZCB0aGVuIHN0YXNoZXNcbm5ldC9yZHMvcmRzLmgtNTU3LVx0ICogdGhlIG5ldyBzb2NrZXQgaW4gXCYjMzQ7cmRzX3RjcF9hY2NlcHRlZF9zb2NrXCYjMzQ7LiBUaGlzIGZ1bmN0aW9uIHJlLWlzc3Vlc1xubmV0L3Jkcy9yZHMuaDo1NTg6XHQgKiBgcmRzX3RjcF9hY2NlcHRfb25lX3BhdGhgLCB3aGljaCBwaWNrcyB1cCB0aGUgc3Rhc2hlZCBzb2NrZXQgYW5kXG5uZXQvcmRzL3Jkcy5oLTU1OS1cdCAqIGNvbnRpbnVpbmcgd2hlcmUgaXQgbGVmdCB3aXRoIFwmIzM0Oy1FTk9CVUZTXCYjMzQ7IGxhc3QgdGltZS4gIFRoaXMgZW5zdXJlc1xuLS1cbm5ldC9yZHMvdGNwLmM9NTc0PXN0YXRpYyB2b2lkIHJkc190Y3BfYWNjZXB0X3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxubmV0L3Jkcy90Y3AuYy01NzktXG5uZXQvcmRzL3RjcC5jOjU4MDpcdHdoaWxlIChyZHNfdGNwX2FjY2VwdF9vbmUocnRuKSA9PSAwKVxubmV0L3Jkcy90Y3AuYy01ODEtXHRcdGNvbmRfcmVzY2hlZCgpO1xuLS1cbm5ldC9yZHMvdGNwLmg9OD1zdHJ1Y3QgcmRzX3RjcF9uZXQge1xubmV0L3Jkcy90Y3AuaDo5Olx0Lyogc2VyaWFsaXplIFwmIzM0O3Jkc190Y3BfYWNjZXB0X29uZVwmIzM0OyB3aXRoIFwmIzM0O3Jkc190Y3BfYWNjZXB0X2xvY2tcJiMzNDtcbm5ldC9yZHMvdGNwLmgtMTAtXHQgKiB0byBwcm90ZWN0IFwmIzM0O3Jkc190Y3BfYWNjZXB0ZWRfc29ja1wmIzM0O1xuLS1cbm5ldC9yZHMvdGNwLmg9Mjc9c3RydWN0IHJkc190Y3BfY29ubmVjdGlvbiB7XG4tLVxubmV0L3Jkcy90Y3AuaC0zMi1cdC8qIHRfY29ubl9wYXRoX2xvY2sgc3luY2hyb25pemVzIHRoZSBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQgYmV0d2VlblxubmV0L3Jkcy90Y3AuaDozMzpcdCAqIHJkc190Y3BfYWNjZXB0X29uZSBhbmQgcmRzX3RjcF9jb25uX3BhdGhfY29ubmVjdFxubmV0L3Jkcy90Y3AuaC0zNC1cdCAqL1xuLS1cbm5ldC9yZHMvdGNwLmg9OTM9dm9pZCByZHNfdGNwX2Nvbm5fc2xvdHNfYXZhaWxhYmxlKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgYm9vbCBmYW5fb3V0KTtcbm5ldC9yZHMvdGNwLmg6OTQ6aW50IHJkc190Y3BfYWNjZXB0X29uZShzdHJ1Y3QgcmRzX3RjcF9uZXQgKnJ0bik7XG5uZXQvcmRzL3RjcC5oLTk1LXZvaWQgcmRzX3RjcF9rZWVwYWxpdmUoc3RydWN0IHNvY2tldCAqc29jayk7XG4tLVxubmV0L3Jkcy90Y3BfbGlzdGVuLmM9NjA9cmRzX3RjcF9nZXRfcGVlcl9zcG9ydChzdHJ1Y3Qgc29ja2V0ICpzb2NrKVxuLS1cbm5ldC9yZHMvdGNwX2xpc3Rlbi5jLTY5LVxubmV0L3Jkcy90Y3BfbGlzdGVuLmM6NzA6LyogcmRzX3RjcF9hY2NlcHRfb25lX3BhdGgoKTogaWYgYWNjZXB0aW5nIG9uIGNwX2luZGV4IFx1MDAzZSAwLCBtYWtlIHN1cmUgdGhlXG5uZXQvcmRzL3RjcF9saXN0ZW4uYy03MS0gKiBjbGllbnQmIzM5O3MgaXBhZGRyIFx1MDAzYyBzZXJ2ZXImIzM5O3MgaXBhZGRyLiBPdGhlcndpc2UsIGNsb3NlIHRoZSBhY2NlcHRlZFxuLS1cbm5ldC9yZHMvdGNwX2xpc3Rlbi5jPTc2PXN0YXRpYyBzdHJ1Y3QgcmRzX3RjcF9jb25uZWN0aW9uICpcbm5ldC9yZHMvdGNwX2xpc3Rlbi5jOjc3OnJkc190Y3BfYWNjZXB0X29uZV9wYXRoKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgc3RydWN0IHNvY2tldCAqc29jaylcbm5ldC9yZHMvdGNwX2xpc3Rlbi5jLTc4LXtcbi0tXG5uZXQvcmRzL3RjcF9saXN0ZW4uYz0xMDg9dm9pZCByZHNfdGNwX2Nvbm5fc2xvdHNfYXZhaWxhYmxlKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgYm9vbCBmYW5fb3V0KVxuLS1cbm5ldC9yZHMvdGNwX2xpc3Rlbi5jLTEzOC1cdC8qIEFzIHNvb24gYXMgYSBjb25uZWN0aW9uIHdlbnQgZG93bixcbm5ldC9yZHMvdGNwX2xpc3Rlbi5jOjEzOTpcdCAqIGl0IGlzIHNhZmUgdG8gc2NoZWR1bGUgYSBcJiMzNDtyZHNfdGNwX2FjY2VwdF9vbmVcJiMzNDtcbm5ldC9yZHMvdGNwX2xpc3Rlbi5jLTE0MC1cdCAqIGF0dGVtcHQgZXZlbiBpZiB0aGVyZSBhcmUgbm8gY29ubmVjdGlvbnMgcGVuZGluZzpcbm5ldC9yZHMvdGNwX2xpc3Rlbi5jOjE0MTpcdCAqIEZ1bmN0aW9uIFwmIzM0O3Jkc190Y3BfYWNjZXB0X29uZVwmIzM0OyB3b24mIzM5O3QgYmxvY2tcbm5ldC9yZHMvdGNwX2xpc3Rlbi5jLTE0Mi1cdCAqIGJ1dCBzaW1wbHkgcmV0dXJuIC1FQUdBSU4gaW4gdGhhdCBjYXNlLlxuLS1cbm5ldC9yZHMvdGNwX2xpc3Rlbi5jLTE0Ni1cdCAqIHRvIGJlIGFjY2VwdGVkIHByaW9yIHRvIGEgZnJlZSBzbG90IGJlaW5nIGF2YWlsYWJsZTpcbm5ldC9yZHMvdGNwX2xpc3Rlbi5jOjE0NzpcdCAqIHRoZSAtRU5PQlVGUyBjYXNlIGluIFwmIzM0O3Jkc190Y3BfYWNjZXB0X29uZVwmIzM0Oy5cbm5ldC9yZHMvdGNwX2xpc3Rlbi5jLTE0OC1cdCAqL1xuLS1cbm5ldC9yZHMvdGNwX2xpc3Rlbi5jLTE1MS1cbm5ldC9yZHMvdGNwX2xpc3Rlbi5jOjE1MjppbnQgcmRzX3RjcF9hY2NlcHRfb25lKHN0cnVjdCByZHNfdGNwX25ldCAqcnRuKVxubmV0L3Jkcy90Y3BfbGlzdGVuLmMtMTUzLXtcbi0tXG5uZXQvcmRzL3RjcF9saXN0ZW4uYy0yNDYtXHRcdCAqL1xubmV0L3Jkcy90Y3BfbGlzdGVuLmM6MjQ3Olx0XHRyc190Y3AgPSByZHNfdGNwX2FjY2VwdF9vbmVfcGF0aChjb25uLCBuZXdfc29jayk7XG5uZXQvcmRzL3RjcF9saXN0ZW4uYy0yNDgtXHRcdGlmICghcnNfdGNwKSB7XG4tLVxubmV0L3Jkcy90Y3BfbGlzdGVuLmMtMjUwLVx0XHRcdCAqIFwmIzM0O3Jkc190Y3BfY29ubl9zbG90c19hdmFpbGFibGVcJiMzNDsgdHJpZ2dlcnNcbm5ldC9yZHMvdGNwX2xpc3Rlbi5jOjI1MTpcdFx0XHQgKiBcJiMzNDtyZHNfdGNwX2FjY2VwdF9vbmVcJiMzNDsgYWdhaW4gYXMgc29vbiBhcyBvbmUgb2YgdGhlXG5uZXQvcmRzL3RjcF9saXN0ZW4uYy0yNTItXHRcdFx0ICogY29ubmVjdGlvbiBzbG90cyBiZWNvbWVzIGF2YWlsYWJsZSBhZ2FpblxuLS1cbm5ldC9yZHMvdGNwX2xpc3Rlbi5jLTI5NS1cdGlmIChyc190Y3AtXHUwMDNldF9zb2NrKSB7XG5uZXQvcmRzL3RjcF9saXN0ZW4uYzoyOTY6XHRcdC8qIER1ZWxsaW5nIFNZTiBoYXMgYmVlbiBoYW5kbGVkIGluIHJkc190Y3BfYWNjZXB0X29uZSgpICovXG5uZXQvcmRzL3RjcF9saXN0ZW4uYy0yOTctXHRcdHJkc190Y3BfcmVzZXRfY2FsbGJhY2tzKG5ld19zb2NrLCBjcCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDAwOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNjM4CgkJCQkJCQlvdXRwdXQ6IDE2NwoJCQkJCQkJdGhvdWdodHM6IDE4MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBSRFMgQ29ubmVjdGlvbiBTaHV0ZG93biBQYXRjaCoqCgpPa2F5LCBzbyBgcmRzX3RjcF9yZXNldF9jYWxsYmFja3NgIGlzIGxvb2tpbmcgZ29vZCDigJMgbm8gaW1tZWRpYXRlIHJlZCBmbGFncyB0aGVyZS4gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IHRoZSBjb25maWd1cmF0aW9ucyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGFyZSBjZW50ZXJlZCBhcm91bmQgYFJEU2AgYW5kIGBSRFNfVENQYC4gRnJvbSB3aGF0IEkmIzM5O20gc2VlaW5nLCB0aGUgY29yZSBlbGVtZW50cyBoZXJlIGFyZSByZWFsbHkgcmV2b2x2aW5nIGFyb3VuZCBgcmRzX3NlbmRfeG1pdGAsIGByZHNfdGNwX3Jlc2V0X2NhbGxiYWNrc2AsIGFuZCBgcmRzX2Nvbm5fc2h1dGRvd25gLgoKVGhlIGNydXggb2YgdGhpcyBwYXRjaCBzZWVtcyB0byBhZGRyZXNzIGEgcHJldHR5IG5hc3R5IHJhY2UgY29uZGl0aW9uIHdpdGhpbiB0aGUgUkRTIGNvbm5lY3Rpb24gc2h1dGRvd24gYW5kIHJlc2V0IHNlcXVlbmNlLiBJdCBzb3VuZHMgbGlrZSB0aGVyZSB3YXMgYSBwb3RlbnRpYWwgZm9yIHRoZSBgUkRTX0lOX1hNSVRgIGFuZCBgUkRTX1JFQ1ZfUkVGSUxMYCBmbGFncyB0byBnZXQgY29ycnVwdGVkIG9yLCB3b3JzZSwgcmUtYWNxdWlyZWQgc2ltdWx0YW5lb3VzbHksIHdoaWNoIGlzIG9idmlvdXNseSBhIHByb2JsZW0uIFRoZSBmaXg/IFVzaW5nIGB0ZXN0X2FuZF9zZXRfYml0X2xvY2tgIHRvIGVuc3VyZSB0aGF0IHRoZSB0cmFuc21pdCBhbmQgcmVjZWl2ZSBwYXRocyBhcmUgcHJvcGVybHkgJiMzNDtxdWllc2NlZCYjMzQ7IOKAkyB0aGF0JiMzOTtzIGEgc21hcnQgYXBwcm9hY2guIEFsc28sIHRoZSB1dGlsaXphdGlvbiBvZiBgd3FfaGFzX3NsZWVwZXJgIHRvIGd1YXJhbnRlZSBhIGZ1bGwgbWVtb3J5IGJhcnJpZXIgd2hlbiB3ZSYjMzk7cmUgY2hlY2tpbmcgdGhlIHdhaXQgcXVldWUgaXMgY3J1Y2lhbCBmb3IgcHJldmVudGluZyB0aG9zZSBzdWJ0bGUgbWVtb3J5LXJlbGF0ZWQgaXNzdWVzLgoKVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBkaWdnaW5nIGRlZXAgaW50byB0aGUgY29yZSBSRFMgbmV0d29ya2luZyBsb2dpYy4gSXQmIzM5O3MgZGVmaW5pdGVseSByZWFjaGFibGUgYW5kIGEgcHJpbWUgY2FuZGlkYXRlIGZvciBmdXp6aW5nIHRvIHNoYWtlIG91dCBhbnkgcmVtYWluaW5nIGlzc3Vlcy4gSSYjMzk7bGwgdXNlIGBzZXQtcmVzdWx0c2AgdG8gdHJhY2sgbXkgd29yay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMDA6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1JEUyYjMzQ7LAogICAgJiMzNDtSRFNfVENQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmRzX3NlbmRfeG1pdCYjMzQ7LAogICAgJiMzNDtyZHNfdGNwX3Jlc2V0X2NhbGxiYWNrcyYjMzQ7LAogICAgJiMzNDtyZHNfY29ubl9zaHV0ZG93biYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGR1cmluZyBSRFMgY29ubmVjdGlvbiBzaHV0ZG93biBhbmQgcmVzZXQsIHdoZXJlIHRoZSBSRFNfSU5fWE1JVCBhbmQgUkRTX1JFQ1ZfUkVGSUxMIGZsYWdzIGNvdWxkIGJlIGNsb2JiZXJlZCBvciByZS1hY3F1aXJlZCBjb25jdXJyZW50bHkuIEl0IHVzZXMgdGVzdF9hbmRfc2V0X2JpdF9sb2NrIHRvIHByb3Blcmx5IHF1aWVzY2UgdGhlIHRyYW5zbWl0IGFuZCByZWNlaXZlIHBhdGhzLCBhbmQgd3FfaGFzX3NsZWVwZXIgdG8gZW5zdXJlIGEgZnVsbCBtZW1vcnkgYmFycmllciB3aGVuIGNoZWNraW5nIHRoZSB3YWl0IHF1ZXVlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgUkRTIG5ldHdvcmtpbmcgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1JEUyYjMzQ7LAogICAgJiMzNDtSRFNfVENQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmRzX3NlbmRfeG1pdCYjMzQ7LAogICAgJiMzNDtyZHNfdGNwX3Jlc2V0X2NhbGxiYWNrcyYjMzQ7LAogICAgJiMzNDtyZHNfY29ubl9zaHV0ZG93biYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGR1cmluZyBSRFMgY29ubmVjdGlvbiBzaHV0ZG93biBhbmQgcmVzZXQsIHdoZXJlIHRoZSBSRFNfSU5fWE1JVCBhbmQgUkRTX1JFQ1ZfUkVGSUxMIGZsYWdzIGNvdWxkIGJlIGNsb2JiZXJlZCBvciByZS1hY3F1aXJlZCBjb25jdXJyZW50bHkuIEl0IHVzZXMgdGVzdF9hbmRfc2V0X2JpdF9sb2NrIHRvIHByb3Blcmx5IHF1aWVzY2UgdGhlIHRyYW5zbWl0IGFuZCByZWNlaXZlIHBhdGhzLCBhbmQgd3FfaGFzX3NsZWVwZXIgdG8gZW5zdXJlIGEgZnVsbCBtZW1vcnkgYmFycmllciB3aGVuIGNoZWNraW5nIHRoZSB3YWl0IHF1ZXVlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgUkRTIG5ldHdvcmtpbmcgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDAwOjI3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMDA6Mjc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtLTVNBTiBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gZGV0ZWN0IHVzZXMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYW5kIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXIgc3BhY2UuIFRoaXMgcGF0Y2ggZm9jdXNlcyBlbnRpcmVseSBvbiBmaXhpbmcgY29uY3VycmVuY3kgYW5kIHN5bmNocm9uaXphdGlvbiBpc3N1ZXMgd2l0aGluIHRoZSBSRFMgc3Vic3lzdGVtLiBJdCByZXBsYWNlcyBub24tYXRvbWljIGJpdCBjbGVhcnMgd2l0aCBhdG9taWMgb3BlcmF0aW9ucywgdXNlcyBiaXQgbG9ja3MgKGB0ZXN0X2FuZF9zZXRfYml0X2xvY2tgKSB0byBwcm9wZXJseSBxdWllc2NlIHRyYW5zbWl0IGFuZCByZWNlaXZlIHBhdGhzLCBhbmQgYWRkcyBtZW1vcnkgYmFycmllcnMgKGB3cV9oYXNfc2xlZXBlcmApIHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25zIGFuZCBsb3N0IHdha2UtdXBzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1vZGlmeSBtZW1vcnkgYWxsb2NhdGlvbnMsIG9yIGFsdGVyIGRhdGEgY29waWVkIHRvIHVzZXIgc3BhY2Ugb3Igc2VudCBvdmVyIHRoZSBuZXR3b3JrLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyBleHBvc2VkIGJ5IHRoZXNlIGNoYW5nZXMuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggd291bGQgYmUgY29uY3VycmVuY3kgaXNzdWVzLCByYWNlIGNvbmRpdGlvbnMsIG9yIGRlYWRsb2Nrcywgd2hpY2ggYXJlIGJlc3QgY2F1Z2h0IGJ5IHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgbGlrZSBLQVNBTiwgS0NTQU4sIGFuZCBMT0NLREVQLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBiZTgyYWZiNjljZGUxYjVlNDQzZjAzZTdmZjIyN2I5NmZiZjUzZjE1CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBBdWcgMTYgMDA6MjY6MzEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvcmRzL2Nvbm5lY3Rpb24uYyBiL25ldC9yZHMvY29ubmVjdGlvbi5jCmluZGV4IDdjOGFiOGU5NzNlMWIuLmExMGI2NjdjMDZjODcgMTAwNjQ0Ci0tLSBhL25ldC9yZHMvY29ubmVjdGlvbi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9yZHMvY29ubmVjdGlvbi5jCkBAIC0xMjAsNyAmIzQzOzEyMCwxNSBAQCBzdGF0aWMgdm9pZCByZHNfY29ubl9wYXRoX3Jlc2V0KHN0cnVjdCByZHNfY29ubl9wYXRoICpjcCkKIAogCXJkc19zdGF0c19pbmMoc19jb25uX3Jlc2V0KTsKIAlyZHNfc2VuZF9wYXRoX3Jlc2V0KGNwKTsKLQljcC0mZ3Q7Y3BfZmxhZ3MgPSAwOwomIzQzOwomIzQzOwkvKiBDbGVhciB0aGUgYml0cyB0aGUgcmVzZXQgaXMgcmVzcG9uc2libGUgZm9yIGluZGl2aWR1YWxseTogYQomIzQzOwkgKiBibGFua2V0IGNwX2ZsYWdzID0gMCBpcyBhIHBsYWluIHN0b3JlIHRoYXQgY2FuIGNsb2JiZXIgYQomIzQzOwkgKiBjb25jdXJyZW50IGF0b21pYyByZWFkLW1vZGlmeS13cml0ZSBvbiB0aGUgc2FtZSB3b3JkLgomIzQzOwkgKiBSRFNfSU5fWE1JVCBhbmQgUkRTX1JFQ1ZfUkVGSUxMIGFyZSBvd25lZCBieSB0aGUgY2FsbGVyLAomIzQzOwkgKiB3aGljaCByZWxlYXNlcyB0aGVtIG9uY2UgdGhlIHRlYXJkb3duIGlzIGNvbXBsZXRlLgomIzQzOwkgKi8KJiM0MzsJY2xlYXJfYml0KFJEU19MTF9TRU5EX0ZVTEwsICZhbXA7Y3AtJmd0O2NwX2ZsYWdzKTsKJiM0MzsJY2xlYXJfYml0KFJEU19SRUNPTk5FQ1RfUEVORElORywgJmFtcDtjcC0mZ3Q7Y3BfZmxhZ3MpOwogCiAJLyogRG8gbm90IGNsZWFyIG5leHRfcnhfc2VxIGhlcmUsIGVsc2Ugd2UgY2Fubm90IGRpc3Rpbmd1aXNoCiAJICogcmV0cmFuc21pdHRlZCBwYWNrZXRzIGZyb20gbmV3IHBhY2tldHMsIGFuZCB3aWxsIGhhbmQgYWxsCkBAIC00MDYsMTQgJiM0Mzs0MTQsMzIgQEAgdm9pZCByZHNfY29ubl9zaHV0ZG93bihzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApCiAJCX0KIAkJbXV0ZXhfdW5sb2NrKCZhbXA7Y3AtJmd0O2NwX2NtX2xvY2spOwogCiYjNDM7CQkvKiBRdWllc2NlIHRoZSB0cmFuc21pdCBhbmQgcmVjZWl2ZS1yZWZpbGwgcGF0aHMgYnkKJiM0MzsJCSAqIGFjcXVpcmluZyB0aGVpciBiaXQgbG9ja3MsIG5vdCBtZXJlbHkgd2FpdGluZyBmb3IKJiM0MzsJCSAqIHRoZW0gdG8gYmUgcmVsZWFzZWQ6IHdpdGggYSBwbGFpbiB3YWl0LCBlaXRoZXIgcGF0aAomIzQzOwkJICogY2FuIHJlLXRha2UgaXRzIGxvY2sgdGhlIGluc3RhbnQgYWZ0ZXIgd2Ugc2FtcGxlIGl0CiYjNDM7CQkgKiBjbGVhciBhbmQgdGhlbiBydW4gY29uY3VycmVudGx5IHdpdGggdGhlIHRyYW5zcG9ydAomIzQzOwkJICogc2h1dGRvd24gYW5kIHRoZSBwYXRoIHJlc2V0IGJlbG93LiAgSG9sZGluZyBib3RoCiYjNDM7CQkgKiBsb2NrcyBhY3Jvc3MgdGhlIHRlYXJkb3duIG1ha2VzIHRoYXQgc3RydWN0dXJhbGx5CiYjNDM7CQkgKiBpbXBvc3NpYmxlLgomIzQzOwkJICovCiAJCXdhaXRfZXZlbnQoY3AtJmd0O2NwX3dhaXRxLAotCQkJICAgIXRlc3RfYml0KFJEU19JTl9YTUlULCAmYW1wO2NwLSZndDtjcF9mbGFncykpOwomIzQzOwkJCSAgICF0ZXN0X2FuZF9zZXRfYml0X2xvY2soUkRTX0lOX1hNSVQsICZhbXA7Y3AtJmd0O2NwX2ZsYWdzKSk7CiAJCXdhaXRfZXZlbnQoY3AtJmd0O2NwX3dhaXRxLAotCQkJICAgIXRlc3RfYml0KFJEU19SRUNWX1JFRklMTCwgJmFtcDtjcC0mZ3Q7Y3BfZmxhZ3MpKTsKJiM0MzsJCQkgICAhdGVzdF9hbmRfc2V0X2JpdChSRFNfUkVDVl9SRUZJTEwsICZhbXA7Y3AtJmd0O2NwX2ZsYWdzKSk7CiAKIAkJY29ubi0mZ3Q7Y190cmFucy0mZ3Q7Y29ubl9wYXRoX3NodXRkb3duKGNwKTsKIAkJcmRzX2Nvbm5fcGF0aF9yZXNldChjcCk7CiAKJiM0MzsJCS8qIFJlbGVhc2UgdGhlIHR3byBsb2NrcyBhbmQgd2FrZSBhbnkgd2FpdGVyIChlLmcuCiYjNDM7CQkgKiByZHNfdGNwX3Jlc2V0X2NhbGxiYWNrcygpKSB0aGF0IGJsb2NrZWQgb24gdGhlbSB3aGlsZQomIzQzOwkJICogd2UgaGVsZCB0aGVtLiAgcmRzX2Nvbm5fcGF0aF9yZXNldCgpIGxlYXZlcyBib3RoIGJpdHMKJiM0MzsJCSAqIGFsb25lOiBvd25lcnNoaXAgZW5kcyBoZXJlLCBub3QgaW5zaWRlIHRoZSByZXNldC4KJiM0MzsJCSAqLwomIzQzOwkJY2xlYXJfYml0X3VubG9jayhSRFNfSU5fWE1JVCwgJmFtcDtjcC0mZ3Q7Y3BfZmxhZ3MpOwomIzQzOwkJY2xlYXJfYml0KFJEU19SRUNWX1JFRklMTCwgJmFtcDtjcC0mZ3Q7Y3BfZmxhZ3MpOwomIzQzOwkJd2FrZV91cF9hbGwoJmFtcDtjcC0mZ3Q7Y3Bfd2FpdHEpOwomIzQzOwogCQlpZiAoIXJkc19jb25uX3BhdGhfdHJhbnNpdGlvbihjcCwgUkRTX0NPTk5fRElTQ09OTkVDVElORywKIAkJCQkJICAgICAgUkRTX0NPTk5fRE9XTikgJmFtcDsmYW1wOwogCQkgICAgIXJkc19jb25uX3BhdGhfdHJhbnNpdGlvbihjcCwgUkRTX0NPTk5fRVJST1IsCmRpZmYgLS1naXQgYS9uZXQvcmRzL3NlbmQuYyBiL25ldC9yZHMvc2VuZC5jCmluZGV4IDE1YTFiOTdmMTNlNzYuLmI5MGUwNTg2ZjgxOGMgMTAwNjQ0Ci0tLSBhL25ldC9yZHMvc2VuZC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9yZHMvc2VuZC5jCkBAIC0xMTQsOCAmIzQzOzExNCwxMyBAQCBzdGF0aWMgdm9pZCByZWxlYXNlX2luX3htaXQoc3RydWN0IHJkc19jb25uX3BhdGggKmNwKQogCSAqIGhvdCBwYXRoIGFuZCBmaW5kaW5nIHdhaXRlcnMgaXMgdmVyeSByYXJlLiAgV2UgZG9uJiMzOTt0IHdhbnQgdG8gd2FsawogCSAqIHRoZSBzeXN0ZW0td2lkZSBoYXNoZWQgd2FpdHF1ZXVlIGJ1Y2tldHMgaW4gdGhlIGZhc3QgcGF0aCBvbmx5IHRvCiAJICogYWxtb3N0IG5ldmVyIGZpbmQgd2FpdGVycy4KJiM0MzsJICoKJiM0MzsJICogd3FfaGFzX3NsZWVwZXIoKSBzdXBwbGllcyB0aGUgZnVsbCBiYXJyaWVyIHRoYXQgb3JkZXJzIHRoZSB3YWl0CiYjNDM7CSAqIHF1ZXVlIHJlYWQgYWZ0ZXIgdGhlIGJpdCBjbGVhcjsgY2xlYXJfYml0X3VubG9jaygpIGFsb25lIGlzIG9ubHkKJiM0MzsJICogYSByZWxlYXNlIGFuZCB3b3VsZCBsZXQgdGhpcyBjaGVjayByZWFkIGEgc3RhbGUgZW1wdHkgcXVldWUsCiYjNDM7CSAqIGxvc2luZyB0aGUgd2FrZS11cC4KIAkgKi8KLQlpZiAod2FpdHF1ZXVlX2FjdGl2ZSgmYW1wO2NwLSZndDtjcF93YWl0cSkpCiYjNDM7CWlmICh3cV9oYXNfc2xlZXBlcigmYW1wO2NwLSZndDtjcF93YWl0cSkpCiAJCXdha2VfdXBfYWxsKCZhbXA7Y3AtJmd0O2NwX3dhaXRxKTsKIH0KIApAQCAtMjM5LDggJiM0MzsyNDQsOSBAQCBpbnQgcmRzX3NlbmRfeG1pdChzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApCiAJV1JJVEVfT05DRShjcC0mZ3Q7Y3Bfc2VuZF9nZW4sIHNlbmRfZ2VuKTsKIAogCS8qCi0JICogcmRzX2Nvbm5fc2h1dGRvd24oKSBzZXRzIHRoZSBjb25uIHN0YXRlIGFuZCB0aGVuIHRlc3RzIFJEU19JTl9YTUlULAotCSAqIHdlIGRvIHRoZSBvcHBvc2l0ZSB0byBhdm9pZCByYWNlcy4KJiM0MzsJICogcmRzX2Nvbm5fc2h1dGRvd24oKSBzZXRzIHRoZSBjb25uIHN0YXRlIGFuZCB0aGVuIGFjcXVpcmVzCiYjNDM7CSAqIFJEU19JTl9YTUlUOyB3ZSB0YWtlIHRoZSBsb2NrIGZpcnN0IGFuZCB0aGVuIGNoZWNrIHRoZSBzdGF0ZSwKJiM0MzsJICogc28gb25lIG9mIHVzIGlzIGd1YXJhbnRlZWQgdG8gc2VlIHRoZSBvdGhlciYjMzk7cyB1cGRhdGUuCiAJICovCiAJaWYgKCFyZHNfY29ubl9wYXRoX3VwKGNwKSkgewogCQlyZWxlYXNlX2luX3htaXQoY3ApOwpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy90Y3AuYyBiL25ldC9yZHMvdGNwLmMKaW5kZXggYjI2MzYzNGFjNzUwZC4uMWZmOWU4NDZkZmM3YyAxMDA2NDQKLS0tIGEvbmV0L3Jkcy90Y3AuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvcmRzL3RjcC5jCkBAIC0xMTUsNDUgJiM0MzsxMTUsNjYgQEAgdm9pZCByZHNfdGNwX3Jlc3RvcmVfY2FsbGJhY2tzKHN0cnVjdCBzb2NrZXQgKnNvY2ssCiB9CiAKIC8qCi0gKiByZHNfdGNwX3Jlc2V0X2NhbGxiYWNrcygpIHN3aXRjaGVzIHRoZSB0byB0aGUgbmV3IHNvY2sgYW5kCi0gKiByZXR1cm5zIHRoZSBleGlzdGluZyB0Yy0mZ3Q7dF9zb2NrLgomIzQzOyAqIHJkc190Y3BfcmVzZXRfY2FsbGJhY2tzKCkgc3dpdGNoZXMgYSBwYXRoIHRvIGEgbmV3IHNvY2tldCBhbmQKJiM0MzsgKiByZWxlYXNlcyB0aGUgb2xkIG9uZSBpdCBmaW5kcyBpbiB0Yy0mZ3Q7dF9zb2NrLCByZXNvbHZpbmcgYSBkdWVsbGluZwomIzQzOyAqIFNZTi4KICAqCi0gKiBUaGUgb25seSBmdW5jdGlvbnMgdGhhdCBzZXQgdGMtJmd0O3Rfc29jayBhcmUgcmRzX3RjcF9zZXRfY2FsbGJhY2tzCi0gKiBhbmQgcmRzX3RjcF9yZXNldF9jYWxsYmFja3MuICBTZW5kIGFuZCByZWNlaXZlIHRydXN0IHRoYXQKLSAqIGl0IGlzIHNldC4gIFRoZSBhYnNlbmNlIG9mIFJEU19DT05OX1VQIGJpdCBwcm90ZWN0cyB0aG9zZSBwYXRocwotICogZnJvbSBiZWluZyBjYWxsZWQgd2hpbGUgaXQgaXNuJiMzOTt0IHNldC4KJiM0MzsgKiB0Yy0mZ3Q7dF9zb2NrIGlzIHNldCBieSByZHNfdGNwX3NldF9jYWxsYmFja3MoKSBhbmQgY2xlYXJlZCBieQomIzQzOyAqIHJkc190Y3BfcmVzdG9yZV9jYWxsYmFja3MoKSwgZnJvbSByZHNfdGNwX2Nvbm5fcGF0aF9zaHV0ZG93bigpIGFuZAomIzQzOyAqIGZyb20gaGVyZS4gIFNlbmQgYW5kIHJlY2VpdmUgdHJ1c3QgdGhhdCBpdCBpcyBzZXQ6IHRoZSBhYnNlbmNlIG9mCiYjNDM7ICogUkRTX0NPTk5fVVAgcHJvdGVjdHMgdGhvc2UgcGF0aHMgZnJvbSBiZWluZyBjYWxsZWQgd2hpbGUgaXQgaXNuJiMzOTt0LAomIzQzOyAqIGFuZCB0aGUgc3dhcCBkb25lIGhlcmUgcnVucyB1bmRlciBSRFNfSU5fWE1JVCBzbyB0aGF0IGl0IGNhbm5vdAomIzQzOyAqIGludGVybGVhdmUgd2l0aCBhIHNlbmRlciBhbHJlYWR5IGluc2lkZSByZHNfc2VuZF94bWl0KCkuCiAgKi8KIHZvaWQgcmRzX3RjcF9yZXNldF9jYWxsYmFja3Moc3RydWN0IHNvY2tldCAqc29jaywKIAkJCSAgICAgc3RydWN0IHJkc19jb25uX3BhdGggKmNwKQogewogCXN0cnVjdCByZHNfdGNwX2Nvbm5lY3Rpb24gKnRjID0gY3AtJmd0O2NwX3RyYW5zcG9ydF9kYXRhOwotCXN0cnVjdCBzb2NrZXQgKm9zb2NrID0gdGMtJmd0O3Rfc29jazsKLQotCWlmICghb3NvY2spCi0JCWdvdG8gbmV3c29jazsKJiM0MzsJc3RydWN0IHNvY2tldCAqb3NvY2s7CiAKIAkvKiBOZWVkIHRvIHJlc29sdmUgYSBkdWVsbGluZyBTWU4gYmV0d2VlbiBwZWVycy4KIAkgKiBXZSBoYXZlIGFuIG91dHN0YW5kaW5nIFNZTiB0byB0aGlzIHBlZXIsIHdoaWNoIG1heQogCSAqIHBvdGVudGlhbGx5IGhhdmUgdHJhbnNpdGlvbmVkIHRvIHRoZSBSRFNfQ09OTl9VUCBzdGF0ZSwKIAkgKiBzbyB3ZSBtdXN0IHF1aWVzY2UgYW55IHNlbmQgdGhyZWFkcyBiZWZvcmUgcmVzZXR0aW5nCi0JICogY3BfdHJhbnNwb3J0X2RhdGEuIFdlIHF1aWVzY2UgdGhlc2UgdGhyZWFkcyBieSBzZXR0aW5nCi0JICogY3Bfc3RhdGUgdG8gc29tZXRoaW5nIG90aGVyIHRoYW4gUkRTX0NPTk5fVVAsIGFuZCB0aGVuCi0JICogd2FpdGluZyBmb3IgYW55IGV4aXN0aW5nIHRocmVhZHMgaW4gcmRzX3NlbmRfeG1pdCB0bwotCSAqIGNvbXBsZXRlIHJlbGVhc2VfaW5feG1pdCgpLiAoU3Vic2VxdWVudCB0aHJlYWRzIGVudGVyaW5nCi0JICogcmRzX3NlbmRfeG1pdCgpIHdpbGwgYmFpbCBvbiAhcmRzX2Nvbm5fdXAoKS4KJiM0MzsJICogY3BfdHJhbnNwb3J0X2RhdGEuICBTZXR0aW5nIGNwX3N0YXRlIHRvIHNvbWV0aGluZyBvdGhlcgomIzQzOwkgKiB0aGFuIFJEU19DT05OX1VQIHN0b3BzIG5ldyBzZW5kZXJzLCBhbmQgb3duaW5nIFJEU19JTl9YTUlUCiYjNDM7CSAqIGV4Y2x1ZGVzIGFueSB0aHJlYWQgYWxyZWFkeSBpbnNpZGUgcmRzX3NlbmRfeG1pdCgpIGZvciB0aGUKJiM0MzsJICogd2hvbGUgc29ja2V0IHN3YXAgYW5kIHRoZSByZHNfc2VuZF9wYXRoX3Jlc2V0KCkgYmVsb3cuCiAJICoKLQkgKiBIb3dldmVyIGFuIGluY29taW5nIHN5bi1hY2sgYXQgdGhpcyBwb2ludCB3b3VsZCBlbmQgdXAKLQkgKiBtYXJraW5nIHRoZSBjb25uIGFzIFJEU19DT05OX1VQLCBhbmQgd291bGQgYWdhaW4gcGVybWl0Ci0JICogcmRzX3NlbmRfeG1pKCkgdGhyZWFkcyB0aHJvdWdoLCBzbyBpZGVhbGx5IHdlIHdvdWxkCi0JICogc3luY2hyb25pemUgb24gUkRTX0NPTk5fVVAgYWZ0ZXIgbG9ja19zb2NrKCksIGJ1dCBjYW5ub3QKLQkgKiBkbyB0aGF0OiB3YWl0aW5nIG9uICFSRFNfSU5fWE1JVCBhZnRlciBsb2NrX3NvY2soKSBtYXkKLQkgKiBlbmQgdXAgZGVhZGxvY2tpbmcgd2l0aCB0Y3Bfc2VuZG1zZygpLCBhbmQgdGhlIFJEU19JTl9YTUlUCi0JICogd291bGQgbm90IGdldCBzZXQuIEFzIGEgcmVzdWx0LCB3ZSBzZXQgY19zdGF0ZSB0bwotCSAqIFJEU19DT05OX1JFU0VUVFRJTkcsIHRvIGVuc3VyZSB0aGF0IHJkc190Y3Bfc3RhdGVfY2hhbmdlCi0JICogY2Fubm90IG1hcmsgcmRzX2Nvbm5fcGF0aF91cCgpIGluIHRoZSB3aW5kb3cgYmVmb3JlIGxvY2tfc29jaygpCiYjNDM7CSAqIEFuIGluY29taW5nIHN5bi1hY2sgYXQgdGhpcyBwb2ludCB3b3VsZCBlbmQgdXAgbWFya2luZyB0aGUKJiM0MzsJICogY29ubiBhcyBSRFNfQ09OTl9VUCwgYW5kIHdvdWxkIGFnYWluIHBlcm1pdCByZHNfc2VuZF94bWl0KCkKJiM0MzsJICogdGhyZWFkcyB0aHJvdWdoLCBzbyBpZGVhbGx5IHdlIHdvdWxkIHN5bmNocm9uaXplIG9uCiYjNDM7CSAqIFJEU19DT05OX1VQIGFmdGVyIGxvY2tfc29jaygpLCBidXQgY2Fubm90IGRvIHRoYXQ6IGFjcXVpcmluZwomIzQzOwkgKiBSRFNfSU5fWE1JVCBhZnRlciBsb2NrX3NvY2soKSBtYXkgZW5kIHVwIGRlYWRsb2NraW5nIHdpdGgKJiM0MzsJICogdGNwX3NlbmRtc2coKSwgd2hpY2ggdGFrZXMgdGhlIHNvY2tldCBsb2NrIHdoaWxlIGhvbGRpbmcKJiM0MzsJICogUkRTX0lOX1hNSVQuICBBcyBhIHJlc3VsdCwgd2Ugc2V0IGNfc3RhdGUgdG8KJiM0MzsJICogUkRTX0NPTk5fUkVTRVRUSU5HLCB0byBlbnN1cmUgdGhhdCByZHNfdGNwX3N0YXRlX2NoYW5nZQomIzQzOwkgKiBjYW5ub3QgbWFyayByZHNfY29ubl9wYXRoX3VwKCkgaW4gdGhlIHdpbmRvdyBiZWZvcmUKJiM0MzsJICogbG9ja19zb2NrKCkuCiYjNDM7CSAqCiYjNDM7CSAqIE9ubHkgbWFrZSB0aGF0IHRyYW5zaXRpb24gaWYgdGhlIHBhdGggaXMgc3RpbGwgY29ubmVjdGluZwomIzQzOwkgKiAob3IgYWxyZWFkeSByZXNldHRpbmcgZnJvbSBhbiBlYXJsaWVyIGR1ZWwpLCBzbyB0aGF0IGEKJiM0MzsJICogY29uY3VycmVudCBzaHV0ZG93biYjMzk7cyBSRFNfQ09OTl9FUlJPUi9SRFNfQ09OTl9ESVNDT05ORUNUSU5HCiYjNDM7CSAqIGlzIG5vdCBvdmVyd3JpdHRlbjsgYSBwYXRoIGluIGFueSBvdGhlciBzdGF0ZSBpcyBkcm9wcGVkCiYjNDM7CSAqIGFuZCBpdHMgcGVuZGluZyBzaHV0ZG93biB3aW5zLgomIzQzOwkgKi8KJiM0MzsJaWYgKCFyZHNfY29ubl9wYXRoX3RyYW5zaXRpb24oY3AsIFJEU19DT05OX0NPTk5FQ1RJTkcsCiYjNDM7CQkJCSAgICAgIFJEU19DT05OX1JFU0VUVElORykgJmFtcDsmYW1wOwomIzQzOwkgICAgIXJkc19jb25uX3BhdGhfdHJhbnNpdGlvbihjcCwgUkRTX0NPTk5fUkVTRVRUSU5HLAomIzQzOwkJCQkgICAgICBSRFNfQ09OTl9SRVNFVFRJTkcpKQomIzQzOwkJcmRzX2Nvbm5fcGF0aF9kcm9wKGNwLCAwKTsKJiM0MzsJd2FpdF9ldmVudChjcC0mZ3Q7Y3Bfd2FpdHEsCiYjNDM7CQkgICAhdGVzdF9hbmRfc2V0X2JpdF9sb2NrKFJEU19JTl9YTUlULCAmYW1wO2NwLSZndDtjcF9mbGFncykpOwomIzQzOwomIzQzOwkvKiBSZWFkIHRfc29jayBvbmx5IHdoaWxlIG93bmluZyBSRFNfSU5fWE1JVC4gIFRoZSB0ZWFyZG93biBpbgomIzQzOwkgKiByZHNfY29ubl9zaHV0ZG93bigpIHJlbGVhc2VzIHRoZSBvbGQgc29ja2V0IGFuZCBjbGVhcnMKJiM0MzsJICogdF9zb2NrLCBzbyBhIHBvaW50ZXIgc2FtcGxlZCBiZWZvcmUgdGhlIHdhaXQgY2FuIGJlIHN0YWxlCiYjNDM7CSAqIGJ5IHRoZSB0aW1lIHdlIHdha2UgdXAuCiAJICovCi0JYXRvbWljX3NldCgmYW1wO2NwLSZndDtjcF9zdGF0ZSwgUkRTX0NPTk5fUkVTRVRUSU5HKTsKLQl3YWl0X2V2ZW50KGNwLSZndDtjcF93YWl0cSwgIXRlc3RfYml0KFJEU19JTl9YTUlULCAmYW1wO2NwLSZndDtjcF9mbGFncykpOwomIzQzOwlvc29jayA9IHRjLSZndDt0X3NvY2s7CiYjNDM7CWlmICghb3NvY2spCiYjNDM7CQlnb3RvIG5ld3NvY2s7CiYjNDM7CiAJLyogcmVzZXQgcmVjZWl2ZSBzaWRlIHN0YXRlIGZvciByZHNfdGNwX2RhdGFfcmVjdigpIGZvciBvc29jayAgKi8KIAljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmFtcDtjcC0mZ3Q7Y3Bfc2VuZF93KTsKIAljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmFtcDtjcC0mZ3Q7Y3BfcmVjdl93KTsKQEAgLTE3Miw2ICYjNDM7MTkzLDkgQEAgdm9pZCByZHNfdGNwX3Jlc2V0X2NhbGxiYWNrcyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLAogCWxvY2tfc29jayhzb2NrLSZndDtzayk7CiAJcmRzX3RjcF9zZXRfY2FsbGJhY2tzKHNvY2ssIGNwKTsKIAlyZWxlYXNlX3NvY2soc29jay0mZ3Q7c2spOwomIzQzOwomIzQzOwljbGVhcl9iaXRfdW5sb2NrKFJEU19JTl9YTUlULCAmYW1wO2NwLSZndDtjcF9mbGFncyk7CiYjNDM7CXdha2VfdXBfYWxsKCZhbXA7Y3AtJmd0O2NwX3dhaXRxKTsKIH0KIAogLyogQWRkIHRjIHRvIHJkc190Y3BfdGNfbGlzdCBhbmQgc2V0IHRjLSZndDt0X3NvY2suIFNlZSBjb21tZW50cwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMDA6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDc2OAoJCQkJCQkJb3V0cHV0OiAyMDQKCQkJCQkJCXRob3VnaHRzOiA2MjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUkRTIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGxvb2tlZCBvdmVyIHRoaXMgcGF0Y2guIEl0JiMzOTtzIHRvdWNoaW5nIGBuZXQvcmRzL2Nvbm5lY3Rpb24uY2AsIGBuZXQvcmRzL3NlbmQuY2AsIGFuZCBgbmV0L3Jkcy90Y3AuY2AsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBob3cgdGhlIGBjcC0mZ3Q7Y3BfZmxhZ3NgIGJpdCBmbGFncyAobGlrZSBgUkRTX0lOX1hNSVRgLCBgUkRTX1JFQ1ZfUkVGSUxMYCwgZXRjLikgYXJlIG1hbmFnZWQuIFRoZSBrZXkgY2hhbmdlIGlzIHRoZSByZXBsYWNlbWVudCBvZiBiYXNpYyBiaXQgbWFuaXB1bGF0aW9uIHdpdGggYXRvbWljIG9wZXJhdGlvbnMgdXNpbmcgYHRlc3RfYW5kX3NldF9iaXRfbG9ja2AgYW5kIGBjbGVhcl9iaXRfdW5sb2NrYCwgYW5kIHRoZSBzd2FwIG91dCBvZiBgd2FpdHF1ZXVlX2FjdGl2ZWAgd2l0aCBgd3FfaGFzX3NsZWVwZXJgIHRvIG1ha2Ugc3VyZSBtZW1vcnkgYmFycmllcnMgYXJlIHdvcmtpbmcgY29ycmVjdGx5LiBBbHNvLCBpdCB1cGRhdGVzIGByZHNfdGNwX3Jlc2V0X2NhbGxiYWNrc2AgdG8gcHJvcGVybHkgaGFuZGxlIHNvY2tldCBzd2FwcGluZyB3aGVuIGBSRFNfSU5fWE1JVGAgaXMgYWN0aXZlLgoKQmFzaWNhbGx5LCB0aGlzIGlzIGFsbCBhYm91dCBmaXhpbmcgY29uY3VycmVuY3kgcHJvYmxlbXMgaW4gdGhlIFJlbGlhYmxlIERhdGFncmFtIFNvY2tldHMgKFJEUykgc3Vic3lzdGVtLiBUaGluZ3MgbGlrZSByYWNlIGNvbmRpdGlvbnMsIHBvdGVudGlhbCBkZWFkbG9ja3MsIGFuZCBtaXNzZWQgd2FrZS11cHMgYXJlIHRoZSB0YXJnZXRzIGhlcmUuIEkgY2FuIHNlZSBubyBjaGFuZ2VzIHRoYXQgY3JlYXRlIG5ldyBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm8gbmV3IGFsbG9jYXRpb25zLCBubyBjaGFuZ2VzIHRvIGJvdW5kcyBjaGVja3Mgb3IgbGVuZ3RocyB0aGF0IHdvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gU3RhbmRhcmQgdGVzdGluZywgS0FTQU4sIG9yIExPQ0tERVAg4oCTIGVzcGVjaWFsbHkgaWYgc3RhbmRhcmQgbG9ja3Mgd2VyZSBpbnZvbHZlZCAoYWx0aG91Z2gsIHRoZXkgYXJlIGJpdCBsb2NrcyBoZXJlKSwgd291bGQgcGljayB1cCBvbiB0aGVzZSBzb3J0cyBvZiBjb25jdXJyZW5jeSBpc3N1ZXMuCgpTbywgZ2l2ZW4gdGhhdCwgSSYjMzk7bSBwcmV0dHkgY29uZmlkZW50IHRoYXQgdGhpcyBwYXRjaCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UuCgpMZXQmIzM5O3MgcXVpY2tseSByZWNhcCB0aGUga2V5IGNoYW5nZXMgYWdhaW4gdG8gY29uZmlybToKCiogICBgcmRzX2Nvbm5fcGF0aF9yZXNldGAgbm93IGNsZWFycyBzcGVjaWZpYyBiaXRzIGluc3RlYWQgb2Ygd2lwaW5nIGBjcC0mZ3Q7Y3BfZmxhZ3NgIHRvIGF2b2lkIGNsb2JiZXJpbmcgY29uY3VycmVudCBhdG9taWMgcmVhZC1tb2RpZnktd3JpdGUuCiogICBgcmRzX2Nvbm5fc2h1dGRvd25gIHVzZXMgYHRlc3RfYW5kX3NldF9iaXRfbG9ja2AgYW5kIGB0ZXN0X2FuZF9zZXRfYml0YCB0byBxdWllc2NlIHRyYW5zbWl0IGFuZCByZWNlaXZlLXJlZmlsbCBwYXRocyBwcmV2ZW50aW5nIGNvbmN1cnJlbmN5CiogICBgcmVsZWFzZV9pbl94bWl0YCBub3cgdXNlcyBgd3FfaGFzX3NsZWVwZXJgIGluc3RlYWQgb2YgYHdhaXRxdWV1ZV9hY3RpdmVgLCB3aGljaCBwcm92aWRlcyBhIG1lbW9yeSBiYXJyaWVyCiogICBgcmRzX3RjcF9yZXNldF9jYWxsYmFja3NgIHVzZXMgYHRlc3RfYW5kX3NldF9iaXRfbG9ja2AgdG8gYWNxdWlyZSBgUkRTX0lOX1hNSVRgIGJlZm9yZSByZWFkaW5nIGB0Yy0mZ3Q7dF9zb2NrYCBhbmQgc3dhcHBpbmcgc29ja2V0cy4KCkFsbCBvZiB0aGVzZSBhcmUgc3RyaWN0bHkgcmVsYXRlZCB0byBzeW5jaHJvbml6YXRpb24gYW5kIGNvbmN1cnJlbmN5IOKAkyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBpbiB0aGUgcGljdHVyZSBoZXJlLgoKVGhlcmVmb3JlLCBteSBLTVNBTlJlYXNvbmluZyBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBLTVNBTiBpcyB0aGVyZSB0byBjYXRjaCB1c2VzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGlzIHBhdGNoIGZvY3VzZXMgZW50aXJlbHkgb24gdGhlIHN5bmNocm9uaXphdGlvbiBhbmQgY29uY3VycmVuY3kgcHJvYmxlbXMgaW4gdGhlIFJEUyBzdWJzeXN0ZW0sIHN1Y2ggYXMgcmVwbGFjaW5nIG5vbi1hdG9taWMgYml0IGNsZWFycyB3aXRoIGF0b21pYyBvbmVzLCBjb3JyZWN0bHkgcXVpZXNjaW5nIHRyYW5zbWl0L3JlY2VpdmUgcGF0aHMgdXNpbmcgYml0IGxvY2tzLCBhbmQgYWRkaW5nIG1lbW9yeSBiYXJyaWVycyBmb3Igd2FpdCBxdWV1ZXMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcywgbW9kaWZ5IG1lbW9yeSBhbGxvY2F0aW9ucywgb3IgYWx0ZXIgZGF0YSBiZWluZyBjb3BpZWQgdG8gdXNlciBzcGFjZS4gSGVuY2UsIHRoZXJlIGlzIGFic29sdXRlbHkgbm8gcG9zc2liaWxpdHkgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIGFuZCBLQVNBTi9MT0NLREVQIHdpbGwgY2F0Y2ggYW55IG1lbW9yeSBjb3JydXB0aW9uIG9yIGxvY2tpbmcgaXNzdWVzIGluIHRoaXMgY29udGV4dC4gSSB3aWxsIG1hcmsgTmVlZHNLTVNBTiBhcyBmYWxzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMDA6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtLTVNBTiBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gZGV0ZWN0IHVzZXMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYW5kIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXIgc3BhY2UuIFRoaXMgcGF0Y2ggZm9jdXNlcyBlbnRpcmVseSBvbiBmaXhpbmcgY29uY3VycmVuY3kgYW5kIHN5bmNocm9uaXphdGlvbiBpc3N1ZXMgd2l0aGluIHRoZSBSRFMgc3Vic3lzdGVtLiBJdCByZXBsYWNlcyBub24tYXRvbWljIGJpdCBjbGVhcnMgd2l0aCBhdG9taWMgb3BlcmF0aW9ucywgdXNlcyBiaXQgbG9ja3MgKGB0ZXN0X2FuZF9zZXRfYml0X2xvY2tgKSB0byBwcm9wZXJseSBxdWllc2NlIHRyYW5zbWl0IGFuZCByZWNlaXZlIHBhdGhzLCBhbmQgYWRkcyBtZW1vcnkgYmFycmllcnMgKGB3cV9oYXNfc2xlZXBlcmApIHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25zIGFuZCBsb3N0IHdha2UtdXBzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1vZGlmeSBtZW1vcnkgYWxsb2NhdGlvbnMsIG9yIGFsdGVyIGRhdGEgY29waWVkIHRvIHVzZXIgc3BhY2Ugb3Igc2VudCBvdmVyIHRoZSBuZXR3b3JrLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyBleHBvc2VkIGJ5IHRoZXNlIGNoYW5nZXMuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggd291bGQgYmUgY29uY3VycmVuY3kgaXNzdWVzLCByYWNlIGNvbmRpdGlvbnMsIG9yIGRlYWRsb2Nrcywgd2hpY2ggYXJlIGJlc3QgY2F1Z2h0IGJ5IHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgbGlrZSBLQVNBTiwgS0NTQU4sIGFuZCBMT0NLREVQLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtLTVNBTiBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gZGV0ZWN0IHVzZXMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYW5kIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXIgc3BhY2UuIFRoaXMgcGF0Y2ggZm9jdXNlcyBlbnRpcmVseSBvbiBmaXhpbmcgY29uY3VycmVuY3kgYW5kIHN5bmNocm9uaXphdGlvbiBpc3N1ZXMgd2l0aGluIHRoZSBSRFMgc3Vic3lzdGVtLiBJdCByZXBsYWNlcyBub24tYXRvbWljIGJpdCBjbGVhcnMgd2l0aCBhdG9taWMgb3BlcmF0aW9ucywgdXNlcyBiaXQgbG9ja3MgKGB0ZXN0X2FuZF9zZXRfYml0X2xvY2tgKSB0byBwcm9wZXJseSBxdWllc2NlIHRyYW5zbWl0IGFuZCByZWNlaXZlIHBhdGhzLCBhbmQgYWRkcyBtZW1vcnkgYmFycmllcnMgKGB3cV9oYXNfc2xlZXBlcmApIHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25zIGFuZCBsb3N0IHdha2UtdXBzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1vZGlmeSBtZW1vcnkgYWxsb2NhdGlvbnMsIG9yIGFsdGVyIGRhdGEgY29waWVkIHRvIHVzZXIgc3BhY2Ugb3Igc2VudCBvdmVyIHRoZSBuZXR3b3JrLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyBleHBvc2VkIGJ5IHRoZXNlIGNoYW5nZXMuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggd291bGQgYmUgY29uY3VycmVuY3kgaXNzdWVzLCByYWNlIGNvbmRpdGlvbnMsIG9yIGRlYWRsb2Nrcywgd2hpY2ggYXJlIGJlc3QgY2F1Z2h0IGJ5IHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgbGlrZSBLQVNBTiwgS0NTQU4sIGFuZCBMT0NLREVQLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xNlQwMDoyNjozMS45NzYwMzc4MzFaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTIwMzAwODk2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJSRFNcIixcbiAgICBcIlJEU19UQ1BcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyZHNfc2VuZF94bWl0XCIsXG4gICAgXCJyZHNfdGNwX3Jlc2V0X2NhbGxiYWNrc1wiLFxuICAgIFwicmRzX2Nvbm5fc2h1dGRvd25cIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiS01TQU4gaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGRldGVjdCB1c2VzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlLiBUaGlzIHBhdGNoIGZvY3VzZXMgZW50aXJlbHkgb24gZml4aW5nIGNvbmN1cnJlbmN5IGFuZCBzeW5jaHJvbml6YXRpb24gaXNzdWVzIHdpdGhpbiB0aGUgUkRTIHN1YnN5c3RlbS4gSXQgcmVwbGFjZXMgbm9uLWF0b21pYyBiaXQgY2xlYXJzIHdpdGggYXRvbWljIG9wZXJhdGlvbnMsIHVzZXMgYml0IGxvY2tzIChgdGVzdF9hbmRfc2V0X2JpdF9sb2NrYCkgdG8gcHJvcGVybHkgcXVpZXNjZSB0cmFuc21pdCBhbmQgcmVjZWl2ZSBwYXRocywgYW5kIGFkZHMgbWVtb3J5IGJhcnJpZXJzIChgd3FfaGFzX3NsZWVwZXJgKSB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9ucyBhbmQgbG9zdCB3YWtlLXVwcy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBtb2RpZnkgbWVtb3J5IGFsbG9jYXRpb25zLCBvciBhbHRlciBkYXRhIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIHNlbnQgb3ZlciB0aGUgbmV0d29yay4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgZXhwb3NlZCBieSB0aGVzZSBjaGFuZ2VzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIGJlIGNvbmN1cnJlbmN5IGlzc3VlcywgcmFjZSBjb25kaXRpb25zLCBvciBkZWFkbG9ja3MsIHdoaWNoIGFyZSBiZXN0IGNhdWdodCBieSBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIGxpa2UgS0FTQU4sIEtDU0FOLCBhbmQgTE9DS0RFUC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGR1cmluZyBSRFMgY29ubmVjdGlvbiBzaHV0ZG93biBhbmQgcmVzZXQsIHdoZXJlIHRoZSBSRFNfSU5fWE1JVCBhbmQgUkRTX1JFQ1ZfUkVGSUxMIGZsYWdzIGNvdWxkIGJlIGNsb2JiZXJlZCBvciByZS1hY3F1aXJlZCBjb25jdXJyZW50bHkuIEl0IHVzZXMgdGVzdF9hbmRfc2V0X2JpdF9sb2NrIHRvIHByb3Blcmx5IHF1aWVzY2UgdGhlIHRyYW5zbWl0IGFuZCByZWNlaXZlIHBhdGhzLCBhbmQgd3FfaGFzX3NsZWVwZXIgdG8gZW5zdXJlIGEgZnVsbCBtZW1vcnkgYmFycmllciB3aGVuIGNoZWNraW5nIHRoZSB3YWl0IHF1ZXVlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgUkRTIG5ldHdvcmtpbmcgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDAwOjI2OjMxLjk3NjA0MzQ2MVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ2MDM5OTM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYmU4MmFmYjY5Y2RlMWI1ZTQ0M2YwM2U3ZmYyMjdiOTZmYmY1M2YxNVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU3VuIEF1ZyAxNiAwMDoyNjozMSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvcmRzL2Nvbm5lY3Rpb24uYyBiL25ldC9yZHMvY29ubmVjdGlvbi5jXFxuaW5kZXggN2M4YWI4ZTk3M2UxYi4uYTEwYjY2N2MwNmM4NyAxMDA2NDRcXG4tLS0gYS9uZXQvcmRzL2Nvbm5lY3Rpb24uY1xcbisrKyBiL25ldC9yZHMvY29ubmVjdGlvbi5jXFxuQEAgLTEyMCw3ICsxMjAsMTUgQEAgc3RhdGljIHZvaWQgcmRzX2Nvbm5fcGF0aF9yZXNldChzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApXFxuIFxcbiBcXHRyZHNfc3RhdHNfaW5jKHNfY29ubl9yZXNldCk7XFxuIFxcdHJkc19zZW5kX3BhdGhfcmVzZXQoY3ApO1xcbi1cXHRjcC1cXHUwMDNlY3BfZmxhZ3MgPSAwO1xcbitcXG4rXFx0LyogQ2xlYXIgdGhlIGJpdHMgdGhlIHJlc2V0IGlzIHJlc3BvbnNpYmxlIGZvciBpbmRpdmlkdWFsbHk6IGFcXG4rXFx0ICogYmxhbmtldCBjcF9mbGFncyA9IDAgaXMgYSBwbGFpbiBzdG9yZSB0aGF0IGNhbiBjbG9iYmVyIGFcXG4rXFx0ICogY29uY3VycmVudCBhdG9taWMgcmVhZC1tb2RpZnktd3JpdGUgb24gdGhlIHNhbWUgd29yZC5cXG4rXFx0ICogUkRTX0lOX1hNSVQgYW5kIFJEU19SRUNWX1JFRklMTCBhcmUgb3duZWQgYnkgdGhlIGNhbGxlcixcXG4rXFx0ICogd2hpY2ggcmVsZWFzZXMgdGhlbSBvbmNlIHRoZSB0ZWFyZG93biBpcyBjb21wbGV0ZS5cXG4rXFx0ICovXFxuK1xcdGNsZWFyX2JpdChSRFNfTExfU0VORF9GVUxMLCBcXHUwMDI2Y3AtXFx1MDAzZWNwX2ZsYWdzKTtcXG4rXFx0Y2xlYXJfYml0KFJEU19SRUNPTk5FQ1RfUEVORElORywgXFx1MDAyNmNwLVxcdTAwM2VjcF9mbGFncyk7XFxuIFxcbiBcXHQvKiBEbyBub3QgY2xlYXIgbmV4dF9yeF9zZXEgaGVyZSwgZWxzZSB3ZSBjYW5ub3QgZGlzdGluZ3Vpc2hcXG4gXFx0ICogcmV0cmFuc21pdHRlZCBwYWNrZXRzIGZyb20gbmV3IHBhY2tldHMsIGFuZCB3aWxsIGhhbmQgYWxsXFxuQEAgLTQwNiwxNCArNDE0LDMyIEBAIHZvaWQgcmRzX2Nvbm5fc2h1dGRvd24oc3RydWN0IHJkc19jb25uX3BhdGggKmNwKVxcbiBcXHRcXHR9XFxuIFxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2Y3AtXFx1MDAzZWNwX2NtX2xvY2spO1xcbiBcXG4rXFx0XFx0LyogUXVpZXNjZSB0aGUgdHJhbnNtaXQgYW5kIHJlY2VpdmUtcmVmaWxsIHBhdGhzIGJ5XFxuK1xcdFxcdCAqIGFjcXVpcmluZyB0aGVpciBiaXQgbG9ja3MsIG5vdCBtZXJlbHkgd2FpdGluZyBmb3JcXG4rXFx0XFx0ICogdGhlbSB0byBiZSByZWxlYXNlZDogd2l0aCBhIHBsYWluIHdhaXQsIGVpdGhlciBwYXRoXFxuK1xcdFxcdCAqIGNhbiByZS10YWtlIGl0cyBsb2NrIHRoZSBpbnN0YW50IGFmdGVyIHdlIHNhbXBsZSBpdFxcbitcXHRcXHQgKiBjbGVhciBhbmQgdGhlbiBydW4gY29uY3VycmVudGx5IHdpdGggdGhlIHRyYW5zcG9ydFxcbitcXHRcXHQgKiBzaHV0ZG93biBhbmQgdGhlIHBhdGggcmVzZXQgYmVsb3cuICBIb2xkaW5nIGJvdGhcXG4rXFx0XFx0ICogbG9ja3MgYWNyb3NzIHRoZSB0ZWFyZG93biBtYWtlcyB0aGF0IHN0cnVjdHVyYWxseVxcbitcXHRcXHQgKiBpbXBvc3NpYmxlLlxcbitcXHRcXHQgKi9cXG4gXFx0XFx0d2FpdF9ldmVudChjcC1cXHUwMDNlY3Bfd2FpdHEsXFxuLVxcdFxcdFxcdCAgICF0ZXN0X2JpdChSRFNfSU5fWE1JVCwgXFx1MDAyNmNwLVxcdTAwM2VjcF9mbGFncykpO1xcbitcXHRcXHRcXHQgICAhdGVzdF9hbmRfc2V0X2JpdF9sb2NrKFJEU19JTl9YTUlULCBcXHUwMDI2Y3AtXFx1MDAzZWNwX2ZsYWdzKSk7XFxuIFxcdFxcdHdhaXRfZXZlbnQoY3AtXFx1MDAzZWNwX3dhaXRxLFxcbi1cXHRcXHRcXHQgICAhdGVzdF9iaXQoUkRTX1JFQ1ZfUkVGSUxMLCBcXHUwMDI2Y3AtXFx1MDAzZWNwX2ZsYWdzKSk7XFxuK1xcdFxcdFxcdCAgICF0ZXN0X2FuZF9zZXRfYml0KFJEU19SRUNWX1JFRklMTCwgXFx1MDAyNmNwLVxcdTAwM2VjcF9mbGFncykpO1xcbiBcXG4gXFx0XFx0Y29ubi1cXHUwMDNlY190cmFucy1cXHUwMDNlY29ubl9wYXRoX3NodXRkb3duKGNwKTtcXG4gXFx0XFx0cmRzX2Nvbm5fcGF0aF9yZXNldChjcCk7XFxuIFxcbitcXHRcXHQvKiBSZWxlYXNlIHRoZSB0d28gbG9ja3MgYW5kIHdha2UgYW55IHdhaXRlciAoZS5nLlxcbitcXHRcXHQgKiByZHNfdGNwX3Jlc2V0X2NhbGxiYWNrcygpKSB0aGF0IGJsb2NrZWQgb24gdGhlbSB3aGlsZVxcbitcXHRcXHQgKiB3ZSBoZWxkIHRoZW0uICByZHNfY29ubl9wYXRoX3Jlc2V0KCkgbGVhdmVzIGJvdGggYml0c1xcbitcXHRcXHQgKiBhbG9uZTogb3duZXJzaGlwIGVuZHMgaGVyZSwgbm90IGluc2lkZSB0aGUgcmVzZXQuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRjbGVhcl9iaXRfdW5sb2NrKFJEU19JTl9YTUlULCBcXHUwMDI2Y3AtXFx1MDAzZWNwX2ZsYWdzKTtcXG4rXFx0XFx0Y2xlYXJfYml0KFJEU19SRUNWX1JFRklMTCwgXFx1MDAyNmNwLVxcdTAwM2VjcF9mbGFncyk7XFxuK1xcdFxcdHdha2VfdXBfYWxsKFxcdTAwMjZjcC1cXHUwMDNlY3Bfd2FpdHEpO1xcbitcXG4gXFx0XFx0aWYgKCFyZHNfY29ubl9wYXRoX3RyYW5zaXRpb24oY3AsIFJEU19DT05OX0RJU0NPTk5FQ1RJTkcsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgIFJEU19DT05OX0RPV04pIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdCAgICAhcmRzX2Nvbm5fcGF0aF90cmFuc2l0aW9uKGNwLCBSRFNfQ09OTl9FUlJPUixcXG5kaWZmIC0tZ2l0IGEvbmV0L3Jkcy9zZW5kLmMgYi9uZXQvcmRzL3NlbmQuY1xcbmluZGV4IDE1YTFiOTdmMTNlNzYuLmI5MGUwNTg2ZjgxOGMgMTAwNjQ0XFxuLS0tIGEvbmV0L3Jkcy9zZW5kLmNcXG4rKysgYi9uZXQvcmRzL3NlbmQuY1xcbkBAIC0xMTQsOCArMTE0LDEzIEBAIHN0YXRpYyB2b2lkIHJlbGVhc2VfaW5feG1pdChzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApXFxuIFxcdCAqIGhvdCBwYXRoIGFuZCBmaW5kaW5nIHdhaXRlcnMgaXMgdmVyeSByYXJlLiAgV2UgZG9uJ3Qgd2FudCB0byB3YWxrXFxuIFxcdCAqIHRoZSBzeXN0ZW0td2lkZSBoYXNoZWQgd2FpdHF1ZXVlIGJ1Y2tldHMgaW4gdGhlIGZhc3QgcGF0aCBvbmx5IHRvXFxuIFxcdCAqIGFsbW9zdCBuZXZlciBmaW5kIHdhaXRlcnMuXFxuK1xcdCAqXFxuK1xcdCAqIHdxX2hhc19zbGVlcGVyKCkgc3VwcGxpZXMgdGhlIGZ1bGwgYmFycmllciB0aGF0IG9yZGVycyB0aGUgd2FpdFxcbitcXHQgKiBxdWV1ZSByZWFkIGFmdGVyIHRoZSBiaXQgY2xlYXI7IGNsZWFyX2JpdF91bmxvY2soKSBhbG9uZSBpcyBvbmx5XFxuK1xcdCAqIGEgcmVsZWFzZSBhbmQgd291bGQgbGV0IHRoaXMgY2hlY2sgcmVhZCBhIHN0YWxlIGVtcHR5IHF1ZXVlLFxcbitcXHQgKiBsb3NpbmcgdGhlIHdha2UtdXAuXFxuIFxcdCAqL1xcbi1cXHRpZiAod2FpdHF1ZXVlX2FjdGl2ZShcXHUwMDI2Y3AtXFx1MDAzZWNwX3dhaXRxKSlcXG4rXFx0aWYgKHdxX2hhc19zbGVlcGVyKFxcdTAwMjZjcC1cXHUwMDNlY3Bfd2FpdHEpKVxcbiBcXHRcXHR3YWtlX3VwX2FsbChcXHUwMDI2Y3AtXFx1MDAzZWNwX3dhaXRxKTtcXG4gfVxcbiBcXG5AQCAtMjM5LDggKzI0NCw5IEBAIGludCByZHNfc2VuZF94bWl0KHN0cnVjdCByZHNfY29ubl9wYXRoICpjcClcXG4gXFx0V1JJVEVfT05DRShjcC1cXHUwMDNlY3Bfc2VuZF9nZW4sIHNlbmRfZ2VuKTtcXG4gXFxuIFxcdC8qXFxuLVxcdCAqIHJkc19jb25uX3NodXRkb3duKCkgc2V0cyB0aGUgY29ubiBzdGF0ZSBhbmQgdGhlbiB0ZXN0cyBSRFNfSU5fWE1JVCxcXG4tXFx0ICogd2UgZG8gdGhlIG9wcG9zaXRlIHRvIGF2b2lkIHJhY2VzLlxcbitcXHQgKiByZHNfY29ubl9zaHV0ZG93bigpIHNldHMgdGhlIGNvbm4gc3RhdGUgYW5kIHRoZW4gYWNxdWlyZXNcXG4rXFx0ICogUkRTX0lOX1hNSVQ7IHdlIHRha2UgdGhlIGxvY2sgZmlyc3QgYW5kIHRoZW4gY2hlY2sgdGhlIHN0YXRlLFxcbitcXHQgKiBzbyBvbmUgb2YgdXMgaXMgZ3VhcmFudGVlZCB0byBzZWUgdGhlIG90aGVyJ3MgdXBkYXRlLlxcbiBcXHQgKi9cXG4gXFx0aWYgKCFyZHNfY29ubl9wYXRoX3VwKGNwKSkge1xcbiBcXHRcXHRyZWxlYXNlX2luX3htaXQoY3ApO1xcbmRpZmYgLS1naXQgYS9uZXQvcmRzL3RjcC5jIGIvbmV0L3Jkcy90Y3AuY1xcbmluZGV4IGIyNjM2MzRhYzc1MGQuLjFmZjllODQ2ZGZjN2MgMTAwNjQ0XFxuLS0tIGEvbmV0L3Jkcy90Y3AuY1xcbisrKyBiL25ldC9yZHMvdGNwLmNcXG5AQCAtMTE1LDQ1ICsxMTUsNjYgQEAgdm9pZCByZHNfdGNwX3Jlc3RvcmVfY2FsbGJhY2tzKHN0cnVjdCBzb2NrZXQgKnNvY2ssXFxuIH1cXG4gXFxuIC8qXFxuLSAqIHJkc190Y3BfcmVzZXRfY2FsbGJhY2tzKCkgc3dpdGNoZXMgdGhlIHRvIHRoZSBuZXcgc29jayBhbmRcXG4tICogcmV0dXJucyB0aGUgZXhpc3RpbmcgdGMtXFx1MDAzZXRfc29jay5cXG4rICogcmRzX3RjcF9yZXNldF9jYWxsYmFja3MoKSBzd2l0Y2hlcyBhIHBhdGggdG8gYSBuZXcgc29ja2V0IGFuZFxcbisgKiByZWxlYXNlcyB0aGUgb2xkIG9uZSBpdCBmaW5kcyBpbiB0Yy1cXHUwMDNldF9zb2NrLCByZXNvbHZpbmcgYSBkdWVsbGluZ1xcbisgKiBTWU4uXFxuICAqXFxuLSAqIFRoZSBvbmx5IGZ1bmN0aW9ucyB0aGF0IHNldCB0Yy1cXHUwMDNldF9zb2NrIGFyZSByZHNfdGNwX3NldF9jYWxsYmFja3NcXG4tICogYW5kIHJkc190Y3BfcmVzZXRfY2FsbGJhY2tzLiAgU2VuZCBhbmQgcmVjZWl2ZSB0cnVzdCB0aGF0XFxuLSAqIGl0IGlzIHNldC4gIFRoZSBhYnNlbmNlIG9mIFJEU19DT05OX1VQIGJpdCBwcm90ZWN0cyB0aG9zZSBwYXRoc1xcbi0gKiBmcm9tIGJlaW5nIGNhbGxlZCB3aGlsZSBpdCBpc24ndCBzZXQuXFxuKyAqIHRjLVxcdTAwM2V0X3NvY2sgaXMgc2V0IGJ5IHJkc190Y3Bfc2V0X2NhbGxiYWNrcygpIGFuZCBjbGVhcmVkIGJ5XFxuKyAqIHJkc190Y3BfcmVzdG9yZV9jYWxsYmFja3MoKSwgZnJvbSByZHNfdGNwX2Nvbm5fcGF0aF9zaHV0ZG93bigpIGFuZFxcbisgKiBmcm9tIGhlcmUuICBTZW5kIGFuZCByZWNlaXZlIHRydXN0IHRoYXQgaXQgaXMgc2V0OiB0aGUgYWJzZW5jZSBvZlxcbisgKiBSRFNfQ09OTl9VUCBwcm90ZWN0cyB0aG9zZSBwYXRocyBmcm9tIGJlaW5nIGNhbGxlZCB3aGlsZSBpdCBpc24ndCxcXG4rICogYW5kIHRoZSBzd2FwIGRvbmUgaGVyZSBydW5zIHVuZGVyIFJEU19JTl9YTUlUIHNvIHRoYXQgaXQgY2Fubm90XFxuKyAqIGludGVybGVhdmUgd2l0aCBhIHNlbmRlciBhbHJlYWR5IGluc2lkZSByZHNfc2VuZF94bWl0KCkuXFxuICAqL1xcbiB2b2lkIHJkc190Y3BfcmVzZXRfY2FsbGJhY2tzKHN0cnVjdCBzb2NrZXQgKnNvY2ssXFxuIFxcdFxcdFxcdCAgICAgc3RydWN0IHJkc19jb25uX3BhdGggKmNwKVxcbiB7XFxuIFxcdHN0cnVjdCByZHNfdGNwX2Nvbm5lY3Rpb24gKnRjID0gY3AtXFx1MDAzZWNwX3RyYW5zcG9ydF9kYXRhO1xcbi1cXHRzdHJ1Y3Qgc29ja2V0ICpvc29jayA9IHRjLVxcdTAwM2V0X3NvY2s7XFxuLVxcbi1cXHRpZiAoIW9zb2NrKVxcbi1cXHRcXHRnb3RvIG5ld3NvY2s7XFxuK1xcdHN0cnVjdCBzb2NrZXQgKm9zb2NrO1xcbiBcXG4gXFx0LyogTmVlZCB0byByZXNvbHZlIGEgZHVlbGxpbmcgU1lOIGJldHdlZW4gcGVlcnMuXFxuIFxcdCAqIFdlIGhhdmUgYW4gb3V0c3RhbmRpbmcgU1lOIHRvIHRoaXMgcGVlciwgd2hpY2ggbWF5XFxuIFxcdCAqIHBvdGVudGlhbGx5IGhhdmUgdHJhbnNpdGlvbmVkIHRvIHRoZSBSRFNfQ09OTl9VUCBzdGF0ZSxcXG4gXFx0ICogc28gd2UgbXVzdCBxdWllc2NlIGFueSBzZW5kIHRocmVhZHMgYmVmb3JlIHJlc2V0dGluZ1xcbi1cXHQgKiBjcF90cmFuc3BvcnRfZGF0YS4gV2UgcXVpZXNjZSB0aGVzZSB0aHJlYWRzIGJ5IHNldHRpbmdcXG4tXFx0ICogY3Bfc3RhdGUgdG8gc29tZXRoaW5nIG90aGVyIHRoYW4gUkRTX0NPTk5fVVAsIGFuZCB0aGVuXFxuLVxcdCAqIHdhaXRpbmcgZm9yIGFueSBleGlzdGluZyB0aHJlYWRzIGluIHJkc19zZW5kX3htaXQgdG9cXG4tXFx0ICogY29tcGxldGUgcmVsZWFzZV9pbl94bWl0KCkuIChTdWJzZXF1ZW50IHRocmVhZHMgZW50ZXJpbmdcXG4tXFx0ICogcmRzX3NlbmRfeG1pdCgpIHdpbGwgYmFpbCBvbiAhcmRzX2Nvbm5fdXAoKS5cXG4rXFx0ICogY3BfdHJhbnNwb3J0X2RhdGEuICBTZXR0aW5nIGNwX3N0YXRlIHRvIHNvbWV0aGluZyBvdGhlclxcbitcXHQgKiB0aGFuIFJEU19DT05OX1VQIHN0b3BzIG5ldyBzZW5kZXJzLCBhbmQgb3duaW5nIFJEU19JTl9YTUlUXFxuK1xcdCAqIGV4Y2x1ZGVzIGFueSB0aHJlYWQgYWxyZWFkeSBpbnNpZGUgcmRzX3NlbmRfeG1pdCgpIGZvciB0aGVcXG4rXFx0ICogd2hvbGUgc29ja2V0IHN3YXAgYW5kIHRoZSByZHNfc2VuZF9wYXRoX3Jlc2V0KCkgYmVsb3cuXFxuIFxcdCAqXFxuLVxcdCAqIEhvd2V2ZXIgYW4gaW5jb21pbmcgc3luLWFjayBhdCB0aGlzIHBvaW50IHdvdWxkIGVuZCB1cFxcbi1cXHQgKiBtYXJraW5nIHRoZSBjb25uIGFzIFJEU19DT05OX1VQLCBhbmQgd291bGQgYWdhaW4gcGVybWl0XFxuLVxcdCAqIHJkc19zZW5kX3htaSgpIHRocmVhZHMgdGhyb3VnaCwgc28gaWRlYWxseSB3ZSB3b3VsZFxcbi1cXHQgKiBzeW5jaHJvbml6ZSBvbiBSRFNfQ09OTl9VUCBhZnRlciBsb2NrX3NvY2soKSwgYnV0IGNhbm5vdFxcbi1cXHQgKiBkbyB0aGF0OiB3YWl0aW5nIG9uICFSRFNfSU5fWE1JVCBhZnRlciBsb2NrX3NvY2soKSBtYXlcXG4tXFx0ICogZW5kIHVwIGRlYWRsb2NraW5nIHdpdGggdGNwX3NlbmRtc2coKSwgYW5kIHRoZSBSRFNfSU5fWE1JVFxcbi1cXHQgKiB3b3VsZCBub3QgZ2V0IHNldC4gQXMgYSByZXN1bHQsIHdlIHNldCBjX3N0YXRlIHRvXFxuLVxcdCAqIFJEU19DT05OX1JFU0VUVFRJTkcsIHRvIGVuc3VyZSB0aGF0IHJkc190Y3Bfc3RhdGVfY2hhbmdlXFxuLVxcdCAqIGNhbm5vdCBtYXJrIHJkc19jb25uX3BhdGhfdXAoKSBpbiB0aGUgd2luZG93IGJlZm9yZSBsb2NrX3NvY2soKVxcbitcXHQgKiBBbiBpbmNvbWluZyBzeW4tYWNrIGF0IHRoaXMgcG9pbnQgd291bGQgZW5kIHVwIG1hcmtpbmcgdGhlXFxuK1xcdCAqIGNvbm4gYXMgUkRTX0NPTk5fVVAsIGFuZCB3b3VsZCBhZ2FpbiBwZXJtaXQgcmRzX3NlbmRfeG1pdCgpXFxuK1xcdCAqIHRocmVhZHMgdGhyb3VnaCwgc28gaWRlYWxseSB3ZSB3b3VsZCBzeW5jaHJvbml6ZSBvblxcbitcXHQgKiBSRFNfQ09OTl9VUCBhZnRlciBsb2NrX3NvY2soKSwgYnV0IGNhbm5vdCBkbyB0aGF0OiBhY3F1aXJpbmdcXG4rXFx0ICogUkRTX0lOX1hNSVQgYWZ0ZXIgbG9ja19zb2NrKCkgbWF5IGVuZCB1cCBkZWFkbG9ja2luZyB3aXRoXFxuK1xcdCAqIHRjcF9zZW5kbXNnKCksIHdoaWNoIHRha2VzIHRoZSBzb2NrZXQgbG9jayB3aGlsZSBob2xkaW5nXFxuK1xcdCAqIFJEU19JTl9YTUlULiAgQXMgYSByZXN1bHQsIHdlIHNldCBjX3N0YXRlIHRvXFxuK1xcdCAqIFJEU19DT05OX1JFU0VUVElORywgdG8gZW5zdXJlIHRoYXQgcmRzX3RjcF9zdGF0ZV9jaGFuZ2VcXG4rXFx0ICogY2Fubm90IG1hcmsgcmRzX2Nvbm5fcGF0aF91cCgpIGluIHRoZSB3aW5kb3cgYmVmb3JlXFxuK1xcdCAqIGxvY2tfc29jaygpLlxcbitcXHQgKlxcbitcXHQgKiBPbmx5IG1ha2UgdGhhdCB0cmFuc2l0aW9uIGlmIHRoZSBwYXRoIGlzIHN0aWxsIGNvbm5lY3RpbmdcXG4rXFx0ICogKG9yIGFscmVhZHkgcmVzZXR0aW5nIGZyb20gYW4gZWFybGllciBkdWVsKSwgc28gdGhhdCBhXFxuK1xcdCAqIGNvbmN1cnJlbnQgc2h1dGRvd24ncyBSRFNfQ09OTl9FUlJPUi9SRFNfQ09OTl9ESVNDT05ORUNUSU5HXFxuK1xcdCAqIGlzIG5vdCBvdmVyd3JpdHRlbjsgYSBwYXRoIGluIGFueSBvdGhlciBzdGF0ZSBpcyBkcm9wcGVkXFxuK1xcdCAqIGFuZCBpdHMgcGVuZGluZyBzaHV0ZG93biB3aW5zLlxcbitcXHQgKi9cXG4rXFx0aWYgKCFyZHNfY29ubl9wYXRoX3RyYW5zaXRpb24oY3AsIFJEU19DT05OX0NPTk5FQ1RJTkcsXFxuK1xcdFxcdFxcdFxcdCAgICAgIFJEU19DT05OX1JFU0VUVElORykgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICFyZHNfY29ubl9wYXRoX3RyYW5zaXRpb24oY3AsIFJEU19DT05OX1JFU0VUVElORyxcXG4rXFx0XFx0XFx0XFx0ICAgICAgUkRTX0NPTk5fUkVTRVRUSU5HKSlcXG4rXFx0XFx0cmRzX2Nvbm5fcGF0aF9kcm9wKGNwLCAwKTtcXG4rXFx0d2FpdF9ldmVudChjcC1cXHUwMDNlY3Bfd2FpdHEsXFxuK1xcdFxcdCAgICF0ZXN0X2FuZF9zZXRfYml0X2xvY2soUkRTX0lOX1hNSVQsIFxcdTAwMjZjcC1cXHUwMDNlY3BfZmxhZ3MpKTtcXG4rXFxuK1xcdC8qIFJlYWQgdF9zb2NrIG9ubHkgd2hpbGUgb3duaW5nIFJEU19JTl9YTUlULiAgVGhlIHRlYXJkb3duIGluXFxuK1xcdCAqIHJkc19jb25uX3NodXRkb3duKCkgcmVsZWFzZXMgdGhlIG9sZCBzb2NrZXQgYW5kIGNsZWFyc1xcbitcXHQgKiB0X3NvY2ssIHNvIGEgcG9pbnRlciBzYW1wbGVkIGJlZm9yZSB0aGUgd2FpdCBjYW4gYmUgc3RhbGVcXG4rXFx0ICogYnkgdGhlIHRpbWUgd2Ugd2FrZSB1cC5cXG4gXFx0ICovXFxuLVxcdGF0b21pY19zZXQoXFx1MDAyNmNwLVxcdTAwM2VjcF9zdGF0ZSwgUkRTX0NPTk5fUkVTRVRUSU5HKTtcXG4tXFx0d2FpdF9ldmVudChjcC1cXHUwMDNlY3Bfd2FpdHEsICF0ZXN0X2JpdChSRFNfSU5fWE1JVCwgXFx1MDAyNmNwLVxcdTAwM2VjcF9mbGFncykpO1xcbitcXHRvc29jayA9IHRjLVxcdTAwM2V0X3NvY2s7XFxuK1xcdGlmICghb3NvY2spXFxuK1xcdFxcdGdvdG8gbmV3c29jaztcXG4rXFxuIFxcdC8qIHJlc2V0IHJlY2VpdmUgc2lkZSBzdGF0ZSBmb3IgcmRzX3RjcF9kYXRhX3JlY3YoKSBmb3Igb3NvY2sgICovXFxuIFxcdGNhbmNlbF9kZWxheWVkX3dvcmtfc3luYyhcXHUwMDI2Y3AtXFx1MDAzZWNwX3NlbmRfdyk7XFxuIFxcdGNhbmNlbF9kZWxheWVkX3dvcmtfc3luYyhcXHUwMDI2Y3AtXFx1MDAzZWNwX3JlY3Zfdyk7XFxuQEAgLTE3Miw2ICsxOTMsOSBAQCB2b2lkIHJkc190Y3BfcmVzZXRfY2FsbGJhY2tzKHN0cnVjdCBzb2NrZXQgKnNvY2ssXFxuIFxcdGxvY2tfc29jayhzb2NrLVxcdTAwM2Vzayk7XFxuIFxcdHJkc190Y3Bfc2V0X2NhbGxiYWNrcyhzb2NrLCBjcCk7XFxuIFxcdHJlbGVhc2Vfc29jayhzb2NrLVxcdTAwM2Vzayk7XFxuK1xcbitcXHRjbGVhcl9iaXRfdW5sb2NrKFJEU19JTl9YTUlULCBcXHUwMDI2Y3AtXFx1MDAzZWNwX2ZsYWdzKTtcXG4rXFx0d2FrZV91cF9hbGwoXFx1MDAyNmNwLVxcdTAwM2VjcF93YWl0cSk7XFxuIH1cXG4gXFxuIC8qIEFkZCB0YyB0byByZHNfdGNwX3RjX2xpc3QgYW5kIHNldCB0Yy1cXHUwMDNldF9zb2NrLiBTZWUgY29tbWVudHNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDA6MjY6MzIuNDIyNzY2MDA1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MzU5NzU0MDgxODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUkRTXCIsXG4gICAgXCJSRFNfVENQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicmRzX3NlbmRfeG1pdFwiLFxuICAgIFwicmRzX3RjcF9yZXNldF9jYWxsYmFja3NcIixcbiAgICBcInJkc19jb25uX3NodXRkb3duXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBkdXJpbmcgUkRTIGNvbm5lY3Rpb24gc2h1dGRvd24gYW5kIHJlc2V0LCB3aGVyZSB0aGUgUkRTX0lOX1hNSVQgYW5kIFJEU19SRUNWX1JFRklMTCBmbGFncyBjb3VsZCBiZSBjbG9iYmVyZWQgb3IgcmUtYWNxdWlyZWQgY29uY3VycmVudGx5LiBJdCB1c2VzIHRlc3RfYW5kX3NldF9iaXRfbG9jayB0byBwcm9wZXJseSBxdWllc2NlIHRoZSB0cmFuc21pdCBhbmQgcmVjZWl2ZSBwYXRocywgYW5kIHdxX2hhc19zbGVlcGVyIHRvIGVuc3VyZSBhIGZ1bGwgbWVtb3J5IGJhcnJpZXIgd2hlbiBjaGVja2luZyB0aGUgd2FpdCBxdWV1ZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIFJEUyBuZXR3b3JraW5nIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiZTgyYWZiNjljZGUxYjVlNDQzZjAzZTdmZjIyN2I5NmZiZjUzZjE1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBBdWcgMTYgMDA6MjY6MzEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvcmRzL2Nvbm5lY3Rpb24uYyBiL25ldC9yZHMvY29ubmVjdGlvbi5jXG5pbmRleCA3YzhhYjhlOTczZTFiLi5hMTBiNjY3YzA2Yzg3IDEwMDY0NFxuLS0tIGEvbmV0L3Jkcy9jb25uZWN0aW9uLmNcbisrKyBiL25ldC9yZHMvY29ubmVjdGlvbi5jXG5AQCAtMTIwLDcgKzEyMCwxNSBAQCBzdGF0aWMgdm9pZCByZHNfY29ubl9wYXRoX3Jlc2V0KHN0cnVjdCByZHNfY29ubl9wYXRoICpjcClcbiBcbiBcdHJkc19zdGF0c19pbmMoc19jb25uX3Jlc2V0KTtcbiBcdHJkc19zZW5kX3BhdGhfcmVzZXQoY3ApO1xuLVx0Y3AtXHUwMDNlY3BfZmxhZ3MgPSAwO1xuK1xuK1x0LyogQ2xlYXIgdGhlIGJpdHMgdGhlIHJlc2V0IGlzIHJlc3BvbnNpYmxlIGZvciBpbmRpdmlkdWFsbHk6IGFcbitcdCAqIGJsYW5rZXQgY3BfZmxhZ3MgPSAwIGlzIGEgcGxhaW4gc3RvcmUgdGhhdCBjYW4gY2xvYmJlciBhXG4rXHQgKiBjb25jdXJyZW50IGF0b21pYyByZWFkLW1vZGlmeS13cml0ZSBvbiB0aGUgc2FtZSB3b3JkLlxuK1x0ICogUkRTX0lOX1hNSVQgYW5kIFJEU19SRUNWX1JFRklMTCBhcmUgb3duZWQgYnkgdGhlIGNhbGxlcixcbitcdCAqIHdoaWNoIHJlbGVhc2VzIHRoZW0gb25jZSB0aGUgdGVhcmRvd24gaXMgY29tcGxldGUuXG4rXHQgKi9cbitcdGNsZWFyX2JpdChSRFNfTExfU0VORF9GVUxMLCBcdTAwMjZjcC1cdTAwM2VjcF9mbGFncyk7XG4rXHRjbGVhcl9iaXQoUkRTX1JFQ09OTkVDVF9QRU5ESU5HLCBcdTAwMjZjcC1cdTAwM2VjcF9mbGFncyk7XG4gXG4gXHQvKiBEbyBub3QgY2xlYXIgbmV4dF9yeF9zZXEgaGVyZSwgZWxzZSB3ZSBjYW5ub3QgZGlzdGluZ3Vpc2hcbiBcdCAqIHJldHJhbnNtaXR0ZWQgcGFja2V0cyBmcm9tIG5ldyBwYWNrZXRzLCBhbmQgd2lsbCBoYW5kIGFsbFxuQEAgLTQwNiwxNCArNDE0LDMyIEBAIHZvaWQgcmRzX2Nvbm5fc2h1dGRvd24oc3RydWN0IHJkc19jb25uX3BhdGggKmNwKVxuIFx0XHR9XG4gXHRcdG11dGV4X3VubG9jayhcdTAwMjZjcC1cdTAwM2VjcF9jbV9sb2NrKTtcbiBcbitcdFx0LyogUXVpZXNjZSB0aGUgdHJhbnNtaXQgYW5kIHJlY2VpdmUtcmVmaWxsIHBhdGhzIGJ5XG4rXHRcdCAqIGFjcXVpcmluZyB0aGVpciBiaXQgbG9ja3MsIG5vdCBtZXJlbHkgd2FpdGluZyBmb3JcbitcdFx0ICogdGhlbSB0byBiZSByZWxlYXNlZDogd2l0aCBhIHBsYWluIHdhaXQsIGVpdGhlciBwYXRoXG4rXHRcdCAqIGNhbiByZS10YWtlIGl0cyBsb2NrIHRoZSBpbnN0YW50IGFmdGVyIHdlIHNhbXBsZSBpdFxuK1x0XHQgKiBjbGVhciBhbmQgdGhlbiBydW4gY29uY3VycmVudGx5IHdpdGggdGhlIHRyYW5zcG9ydFxuK1x0XHQgKiBzaHV0ZG93biBhbmQgdGhlIHBhdGggcmVzZXQgYmVsb3cuICBIb2xkaW5nIGJvdGhcbitcdFx0ICogbG9ja3MgYWNyb3NzIHRoZSB0ZWFyZG93biBtYWtlcyB0aGF0IHN0cnVjdHVyYWxseVxuK1x0XHQgKiBpbXBvc3NpYmxlLlxuK1x0XHQgKi9cbiBcdFx0d2FpdF9ldmVudChjcC1cdTAwM2VjcF93YWl0cSxcbi1cdFx0XHQgICAhdGVzdF9iaXQoUkRTX0lOX1hNSVQsIFx1MDAyNmNwLVx1MDAzZWNwX2ZsYWdzKSk7XG4rXHRcdFx0ICAgIXRlc3RfYW5kX3NldF9iaXRfbG9jayhSRFNfSU5fWE1JVCwgXHUwMDI2Y3AtXHUwMDNlY3BfZmxhZ3MpKTtcbiBcdFx0d2FpdF9ldmVudChjcC1cdTAwM2VjcF93YWl0cSxcbi1cdFx0XHQgICAhdGVzdF9iaXQoUkRTX1JFQ1ZfUkVGSUxMLCBcdTAwMjZjcC1cdTAwM2VjcF9mbGFncykpO1xuK1x0XHRcdCAgICF0ZXN0X2FuZF9zZXRfYml0KFJEU19SRUNWX1JFRklMTCwgXHUwMDI2Y3AtXHUwMDNlY3BfZmxhZ3MpKTtcbiBcbiBcdFx0Y29ubi1cdTAwM2VjX3RyYW5zLVx1MDAzZWNvbm5fcGF0aF9zaHV0ZG93bihjcCk7XG4gXHRcdHJkc19jb25uX3BhdGhfcmVzZXQoY3ApO1xuIFxuK1x0XHQvKiBSZWxlYXNlIHRoZSB0d28gbG9ja3MgYW5kIHdha2UgYW55IHdhaXRlciAoZS5nLlxuK1x0XHQgKiByZHNfdGNwX3Jlc2V0X2NhbGxiYWNrcygpKSB0aGF0IGJsb2NrZWQgb24gdGhlbSB3aGlsZVxuK1x0XHQgKiB3ZSBoZWxkIHRoZW0uICByZHNfY29ubl9wYXRoX3Jlc2V0KCkgbGVhdmVzIGJvdGggYml0c1xuK1x0XHQgKiBhbG9uZTogb3duZXJzaGlwIGVuZHMgaGVyZSwgbm90IGluc2lkZSB0aGUgcmVzZXQuXG4rXHRcdCAqL1xuK1x0XHRjbGVhcl9iaXRfdW5sb2NrKFJEU19JTl9YTUlULCBcdTAwMjZjcC1cdTAwM2VjcF9mbGFncyk7XG4rXHRcdGNsZWFyX2JpdChSRFNfUkVDVl9SRUZJTEwsIFx1MDAyNmNwLVx1MDAzZWNwX2ZsYWdzKTtcbitcdFx0d2FrZV91cF9hbGwoXHUwMDI2Y3AtXHUwMDNlY3Bfd2FpdHEpO1xuK1xuIFx0XHRpZiAoIXJkc19jb25uX3BhdGhfdHJhbnNpdGlvbihjcCwgUkRTX0NPTk5fRElTQ09OTkVDVElORyxcbiBcdFx0XHRcdFx0ICAgICAgUkRTX0NPTk5fRE9XTikgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICAhcmRzX2Nvbm5fcGF0aF90cmFuc2l0aW9uKGNwLCBSRFNfQ09OTl9FUlJPUixcbmRpZmYgLS1naXQgYS9uZXQvcmRzL3NlbmQuYyBiL25ldC9yZHMvc2VuZC5jXG5pbmRleCAxNWExYjk3ZjEzZTc2Li5iOTBlMDU4NmY4MThjIDEwMDY0NFxuLS0tIGEvbmV0L3Jkcy9zZW5kLmNcbisrKyBiL25ldC9yZHMvc2VuZC5jXG5AQCAtMTE0LDggKzExNCwxMyBAQCBzdGF0aWMgdm9pZCByZWxlYXNlX2luX3htaXQoc3RydWN0IHJkc19jb25uX3BhdGggKmNwKVxuIFx0ICogaG90IHBhdGggYW5kIGZpbmRpbmcgd2FpdGVycyBpcyB2ZXJ5IHJhcmUuICBXZSBkb24ndCB3YW50IHRvIHdhbGtcbiBcdCAqIHRoZSBzeXN0ZW0td2lkZSBoYXNoZWQgd2FpdHF1ZXVlIGJ1Y2tldHMgaW4gdGhlIGZhc3QgcGF0aCBvbmx5IHRvXG4gXHQgKiBhbG1vc3QgbmV2ZXIgZmluZCB3YWl0ZXJzLlxuK1x0ICpcbitcdCAqIHdxX2hhc19zbGVlcGVyKCkgc3VwcGxpZXMgdGhlIGZ1bGwgYmFycmllciB0aGF0IG9yZGVycyB0aGUgd2FpdFxuK1x0ICogcXVldWUgcmVhZCBhZnRlciB0aGUgYml0IGNsZWFyOyBjbGVhcl9iaXRfdW5sb2NrKCkgYWxvbmUgaXMgb25seVxuK1x0ICogYSByZWxlYXNlIGFuZCB3b3VsZCBsZXQgdGhpcyBjaGVjayByZWFkIGEgc3RhbGUgZW1wdHkgcXVldWUsXG4rXHQgKiBsb3NpbmcgdGhlIHdha2UtdXAuXG4gXHQgKi9cbi1cdGlmICh3YWl0cXVldWVfYWN0aXZlKFx1MDAyNmNwLVx1MDAzZWNwX3dhaXRxKSlcbitcdGlmICh3cV9oYXNfc2xlZXBlcihcdTAwMjZjcC1cdTAwM2VjcF93YWl0cSkpXG4gXHRcdHdha2VfdXBfYWxsKFx1MDAyNmNwLVx1MDAzZWNwX3dhaXRxKTtcbiB9XG4gXG5AQCAtMjM5LDggKzI0NCw5IEBAIGludCByZHNfc2VuZF94bWl0KHN0cnVjdCByZHNfY29ubl9wYXRoICpjcClcbiBcdFdSSVRFX09OQ0UoY3AtXHUwMDNlY3Bfc2VuZF9nZW4sIHNlbmRfZ2VuKTtcbiBcbiBcdC8qXG4tXHQgKiByZHNfY29ubl9zaHV0ZG93bigpIHNldHMgdGhlIGNvbm4gc3RhdGUgYW5kIHRoZW4gdGVzdHMgUkRTX0lOX1hNSVQsXG4tXHQgKiB3ZSBkbyB0aGUgb3Bwb3NpdGUgdG8gYXZvaWQgcmFjZXMuXG4rXHQgKiByZHNfY29ubl9zaHV0ZG93bigpIHNldHMgdGhlIGNvbm4gc3RhdGUgYW5kIHRoZW4gYWNxdWlyZXNcbitcdCAqIFJEU19JTl9YTUlUOyB3ZSB0YWtlIHRoZSBsb2NrIGZpcnN0IGFuZCB0aGVuIGNoZWNrIHRoZSBzdGF0ZSxcbitcdCAqIHNvIG9uZSBvZiB1cyBpcyBndWFyYW50ZWVkIHRvIHNlZSB0aGUgb3RoZXIncyB1cGRhdGUuXG4gXHQgKi9cbiBcdGlmICghcmRzX2Nvbm5fcGF0aF91cChjcCkpIHtcbiBcdFx0cmVsZWFzZV9pbl94bWl0KGNwKTtcbmRpZmYgLS1naXQgYS9uZXQvcmRzL3RjcC5jIGIvbmV0L3Jkcy90Y3AuY1xuaW5kZXggYjI2MzYzNGFjNzUwZC4uMWZmOWU4NDZkZmM3YyAxMDA2NDRcbi0tLSBhL25ldC9yZHMvdGNwLmNcbisrKyBiL25ldC9yZHMvdGNwLmNcbkBAIC0xMTUsNDUgKzExNSw2NiBAQCB2b2lkIHJkc190Y3BfcmVzdG9yZV9jYWxsYmFja3Moc3RydWN0IHNvY2tldCAqc29jayxcbiB9XG4gXG4gLypcbi0gKiByZHNfdGNwX3Jlc2V0X2NhbGxiYWNrcygpIHN3aXRjaGVzIHRoZSB0byB0aGUgbmV3IHNvY2sgYW5kXG4tICogcmV0dXJucyB0aGUgZXhpc3RpbmcgdGMtXHUwMDNldF9zb2NrLlxuKyAqIHJkc190Y3BfcmVzZXRfY2FsbGJhY2tzKCkgc3dpdGNoZXMgYSBwYXRoIHRvIGEgbmV3IHNvY2tldCBhbmRcbisgKiByZWxlYXNlcyB0aGUgb2xkIG9uZSBpdCBmaW5kcyBpbiB0Yy1cdTAwM2V0X3NvY2ssIHJlc29sdmluZyBhIGR1ZWxsaW5nXG4rICogU1lOLlxuICAqXG4tICogVGhlIG9ubHkgZnVuY3Rpb25zIHRoYXQgc2V0IHRjLVx1MDAzZXRfc29jayBhcmUgcmRzX3RjcF9zZXRfY2FsbGJhY2tzXG4tICogYW5kIHJkc190Y3BfcmVzZXRfY2FsbGJhY2tzLiAgU2VuZCBhbmQgcmVjZWl2ZSB0cnVzdCB0aGF0XG4tICogaXQgaXMgc2V0LiAgVGhlIGFic2VuY2Ugb2YgUkRTX0NPTk5fVVAgYml0IHByb3RlY3RzIHRob3NlIHBhdGhzXG4tICogZnJvbSBiZWluZyBjYWxsZWQgd2hpbGUgaXQgaXNuJ3Qgc2V0LlxuKyAqIHRjLVx1MDAzZXRfc29jayBpcyBzZXQgYnkgcmRzX3RjcF9zZXRfY2FsbGJhY2tzKCkgYW5kIGNsZWFyZWQgYnlcbisgKiByZHNfdGNwX3Jlc3RvcmVfY2FsbGJhY2tzKCksIGZyb20gcmRzX3RjcF9jb25uX3BhdGhfc2h1dGRvd24oKSBhbmRcbisgKiBmcm9tIGhlcmUuICBTZW5kIGFuZCByZWNlaXZlIHRydXN0IHRoYXQgaXQgaXMgc2V0OiB0aGUgYWJzZW5jZSBvZlxuKyAqIFJEU19DT05OX1VQIHByb3RlY3RzIHRob3NlIHBhdGhzIGZyb20gYmVpbmcgY2FsbGVkIHdoaWxlIGl0IGlzbid0LFxuKyAqIGFuZCB0aGUgc3dhcCBkb25lIGhlcmUgcnVucyB1bmRlciBSRFNfSU5fWE1JVCBzbyB0aGF0IGl0IGNhbm5vdFxuKyAqIGludGVybGVhdmUgd2l0aCBhIHNlbmRlciBhbHJlYWR5IGluc2lkZSByZHNfc2VuZF94bWl0KCkuXG4gICovXG4gdm9pZCByZHNfdGNwX3Jlc2V0X2NhbGxiYWNrcyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxuIFx0XHRcdCAgICAgc3RydWN0IHJkc19jb25uX3BhdGggKmNwKVxuIHtcbiBcdHN0cnVjdCByZHNfdGNwX2Nvbm5lY3Rpb24gKnRjID0gY3AtXHUwMDNlY3BfdHJhbnNwb3J0X2RhdGE7XG4tXHRzdHJ1Y3Qgc29ja2V0ICpvc29jayA9IHRjLVx1MDAzZXRfc29jaztcbi1cbi1cdGlmICghb3NvY2spXG4tXHRcdGdvdG8gbmV3c29jaztcbitcdHN0cnVjdCBzb2NrZXQgKm9zb2NrO1xuIFxuIFx0LyogTmVlZCB0byByZXNvbHZlIGEgZHVlbGxpbmcgU1lOIGJldHdlZW4gcGVlcnMuXG4gXHQgKiBXZSBoYXZlIGFuIG91dHN0YW5kaW5nIFNZTiB0byB0aGlzIHBlZXIsIHdoaWNoIG1heVxuIFx0ICogcG90ZW50aWFsbHkgaGF2ZSB0cmFuc2l0aW9uZWQgdG8gdGhlIFJEU19DT05OX1VQIHN0YXRlLFxuIFx0ICogc28gd2UgbXVzdCBxdWllc2NlIGFueSBzZW5kIHRocmVhZHMgYmVmb3JlIHJlc2V0dGluZ1xuLVx0ICogY3BfdHJhbnNwb3J0X2RhdGEuIFdlIHF1aWVzY2UgdGhlc2UgdGhyZWFkcyBieSBzZXR0aW5nXG4tXHQgKiBjcF9zdGF0ZSB0byBzb21ldGhpbmcgb3RoZXIgdGhhbiBSRFNfQ09OTl9VUCwgYW5kIHRoZW5cbi1cdCAqIHdhaXRpbmcgZm9yIGFueSBleGlzdGluZyB0aHJlYWRzIGluIHJkc19zZW5kX3htaXQgdG9cbi1cdCAqIGNvbXBsZXRlIHJlbGVhc2VfaW5feG1pdCgpLiAoU3Vic2VxdWVudCB0aHJlYWRzIGVudGVyaW5nXG4tXHQgKiByZHNfc2VuZF94bWl0KCkgd2lsbCBiYWlsIG9uICFyZHNfY29ubl91cCgpLlxuK1x0ICogY3BfdHJhbnNwb3J0X2RhdGEuICBTZXR0aW5nIGNwX3N0YXRlIHRvIHNvbWV0aGluZyBvdGhlclxuK1x0ICogdGhhbiBSRFNfQ09OTl9VUCBzdG9wcyBuZXcgc2VuZGVycywgYW5kIG93bmluZyBSRFNfSU5fWE1JVFxuK1x0ICogZXhjbHVkZXMgYW55IHRocmVhZCBhbHJlYWR5IGluc2lkZSByZHNfc2VuZF94bWl0KCkgZm9yIHRoZVxuK1x0ICogd2hvbGUgc29ja2V0IHN3YXAgYW5kIHRoZSByZHNfc2VuZF9wYXRoX3Jlc2V0KCkgYmVsb3cuXG4gXHQgKlxuLVx0ICogSG93ZXZlciBhbiBpbmNvbWluZyBzeW4tYWNrIGF0IHRoaXMgcG9pbnQgd291bGQgZW5kIHVwXG4tXHQgKiBtYXJraW5nIHRoZSBjb25uIGFzIFJEU19DT05OX1VQLCBhbmQgd291bGQgYWdhaW4gcGVybWl0XG4tXHQgKiByZHNfc2VuZF94bWkoKSB0aHJlYWRzIHRocm91Z2gsIHNvIGlkZWFsbHkgd2Ugd291bGRcbi1cdCAqIHN5bmNocm9uaXplIG9uIFJEU19DT05OX1VQIGFmdGVyIGxvY2tfc29jaygpLCBidXQgY2Fubm90XG4tXHQgKiBkbyB0aGF0OiB3YWl0aW5nIG9uICFSRFNfSU5fWE1JVCBhZnRlciBsb2NrX3NvY2soKSBtYXlcbi1cdCAqIGVuZCB1cCBkZWFkbG9ja2luZyB3aXRoIHRjcF9zZW5kbXNnKCksIGFuZCB0aGUgUkRTX0lOX1hNSVRcbi1cdCAqIHdvdWxkIG5vdCBnZXQgc2V0LiBBcyBhIHJlc3VsdCwgd2Ugc2V0IGNfc3RhdGUgdG9cbi1cdCAqIFJEU19DT05OX1JFU0VUVFRJTkcsIHRvIGVuc3VyZSB0aGF0IHJkc190Y3Bfc3RhdGVfY2hhbmdlXG4tXHQgKiBjYW5ub3QgbWFyayByZHNfY29ubl9wYXRoX3VwKCkgaW4gdGhlIHdpbmRvdyBiZWZvcmUgbG9ja19zb2NrKClcbitcdCAqIEFuIGluY29taW5nIHN5bi1hY2sgYXQgdGhpcyBwb2ludCB3b3VsZCBlbmQgdXAgbWFya2luZyB0aGVcbitcdCAqIGNvbm4gYXMgUkRTX0NPTk5fVVAsIGFuZCB3b3VsZCBhZ2FpbiBwZXJtaXQgcmRzX3NlbmRfeG1pdCgpXG4rXHQgKiB0aHJlYWRzIHRocm91Z2gsIHNvIGlkZWFsbHkgd2Ugd291bGQgc3luY2hyb25pemUgb25cbitcdCAqIFJEU19DT05OX1VQIGFmdGVyIGxvY2tfc29jaygpLCBidXQgY2Fubm90IGRvIHRoYXQ6IGFjcXVpcmluZ1xuK1x0ICogUkRTX0lOX1hNSVQgYWZ0ZXIgbG9ja19zb2NrKCkgbWF5IGVuZCB1cCBkZWFkbG9ja2luZyB3aXRoXG4rXHQgKiB0Y3Bfc2VuZG1zZygpLCB3aGljaCB0YWtlcyB0aGUgc29ja2V0IGxvY2sgd2hpbGUgaG9sZGluZ1xuK1x0ICogUkRTX0lOX1hNSVQuICBBcyBhIHJlc3VsdCwgd2Ugc2V0IGNfc3RhdGUgdG9cbitcdCAqIFJEU19DT05OX1JFU0VUVElORywgdG8gZW5zdXJlIHRoYXQgcmRzX3RjcF9zdGF0ZV9jaGFuZ2VcbitcdCAqIGNhbm5vdCBtYXJrIHJkc19jb25uX3BhdGhfdXAoKSBpbiB0aGUgd2luZG93IGJlZm9yZVxuK1x0ICogbG9ja19zb2NrKCkuXG4rXHQgKlxuK1x0ICogT25seSBtYWtlIHRoYXQgdHJhbnNpdGlvbiBpZiB0aGUgcGF0aCBpcyBzdGlsbCBjb25uZWN0aW5nXG4rXHQgKiAob3IgYWxyZWFkeSByZXNldHRpbmcgZnJvbSBhbiBlYXJsaWVyIGR1ZWwpLCBzbyB0aGF0IGFcbitcdCAqIGNvbmN1cnJlbnQgc2h1dGRvd24ncyBSRFNfQ09OTl9FUlJPUi9SRFNfQ09OTl9ESVNDT05ORUNUSU5HXG4rXHQgKiBpcyBub3Qgb3ZlcndyaXR0ZW47IGEgcGF0aCBpbiBhbnkgb3RoZXIgc3RhdGUgaXMgZHJvcHBlZFxuK1x0ICogYW5kIGl0cyBwZW5kaW5nIHNodXRkb3duIHdpbnMuXG4rXHQgKi9cbitcdGlmICghcmRzX2Nvbm5fcGF0aF90cmFuc2l0aW9uKGNwLCBSRFNfQ09OTl9DT05ORUNUSU5HLFxuK1x0XHRcdFx0ICAgICAgUkRTX0NPTk5fUkVTRVRUSU5HKSBcdTAwMjZcdTAwMjZcbitcdCAgICAhcmRzX2Nvbm5fcGF0aF90cmFuc2l0aW9uKGNwLCBSRFNfQ09OTl9SRVNFVFRJTkcsXG4rXHRcdFx0XHQgICAgICBSRFNfQ09OTl9SRVNFVFRJTkcpKVxuK1x0XHRyZHNfY29ubl9wYXRoX2Ryb3AoY3AsIDApO1xuK1x0d2FpdF9ldmVudChjcC1cdTAwM2VjcF93YWl0cSxcbitcdFx0ICAgIXRlc3RfYW5kX3NldF9iaXRfbG9jayhSRFNfSU5fWE1JVCwgXHUwMDI2Y3AtXHUwMDNlY3BfZmxhZ3MpKTtcbitcbitcdC8qIFJlYWQgdF9zb2NrIG9ubHkgd2hpbGUgb3duaW5nIFJEU19JTl9YTUlULiAgVGhlIHRlYXJkb3duIGluXG4rXHQgKiByZHNfY29ubl9zaHV0ZG93bigpIHJlbGVhc2VzIHRoZSBvbGQgc29ja2V0IGFuZCBjbGVhcnNcbitcdCAqIHRfc29jaywgc28gYSBwb2ludGVyIHNhbXBsZWQgYmVmb3JlIHRoZSB3YWl0IGNhbiBiZSBzdGFsZVxuK1x0ICogYnkgdGhlIHRpbWUgd2Ugd2FrZSB1cC5cbiBcdCAqL1xuLVx0YXRvbWljX3NldChcdTAwMjZjcC1cdTAwM2VjcF9zdGF0ZSwgUkRTX0NPTk5fUkVTRVRUSU5HKTtcbi1cdHdhaXRfZXZlbnQoY3AtXHUwMDNlY3Bfd2FpdHEsICF0ZXN0X2JpdChSRFNfSU5fWE1JVCwgXHUwMDI2Y3AtXHUwMDNlY3BfZmxhZ3MpKTtcbitcdG9zb2NrID0gdGMtXHUwMDNldF9zb2NrO1xuK1x0aWYgKCFvc29jaylcbitcdFx0Z290byBuZXdzb2NrO1xuK1xuIFx0LyogcmVzZXQgcmVjZWl2ZSBzaWRlIHN0YXRlIGZvciByZHNfdGNwX2RhdGFfcmVjdigpIGZvciBvc29jayAgKi9cbiBcdGNhbmNlbF9kZWxheWVkX3dvcmtfc3luYyhcdTAwMjZjcC1cdTAwM2VjcF9zZW5kX3cpO1xuIFx0Y2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKFx1MDAyNmNwLVx1MDAzZWNwX3JlY3Zfdyk7XG5AQCAtMTcyLDYgKzE5Myw5IEBAIHZvaWQgcmRzX3RjcF9yZXNldF9jYWxsYmFja3Moc3RydWN0IHNvY2tldCAqc29jayxcbiBcdGxvY2tfc29jayhzb2NrLVx1MDAzZXNrKTtcbiBcdHJkc190Y3Bfc2V0X2NhbGxiYWNrcyhzb2NrLCBjcCk7XG4gXHRyZWxlYXNlX3NvY2soc29jay1cdTAwM2Vzayk7XG4rXG4rXHRjbGVhcl9iaXRfdW5sb2NrKFJEU19JTl9YTUlULCBcdTAwMjZjcC1cdTAwM2VjcF9mbGFncyk7XG4rXHR3YWtlX3VwX2FsbChcdTAwMjZjcC1cdTAwM2VjcF93YWl0cSk7XG4gfVxuIFxuIC8qIEFkZCB0YyB0byByZHNfdGNwX3RjX2xpc3QgYW5kIHNldCB0Yy1cdTAwM2V0X3NvY2suIFNlZSBjb21tZW50c1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDA6MjY6MzIuNDIyNzY3NTI1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTgwMTEyOTE2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBSRFMgQ29ubmVjdGlvbiBIYW5kbGluZyBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgaG93IFJlbGlhYmxlIERhdGFncmFtIFNvY2tldHMgKFJEUykgaGFuZGxlcyBjb25uZWN0aW9ucywgc3BlY2lmaWNhbGx5IGR1cmluZyBzaHV0ZG93biBhbmQgcmVzZXQsIGFjcm9zcyB0aG9zZSB0aHJlZSBmaWxlczogYGNvbm5lY3Rpb24uY2AsIGBzZW5kLmNgLCBhbmQgYHRjcC5jYC4gSXQgbG9va3MgbGlrZSBpdCdzIGFkZHJlc3NpbmcgYSByYWNlIGNvbmRpdGlvbiwgd2hpY2ggaXMgYWx3YXlzIHdvcnRoIGEgY2xvc2VyIGxvb2suIFRoZXkncmUgdXNpbmcgYHRlc3RfYW5kX3NldF9iaXRfbG9ja2AgaW5zdGVhZCBvZiBqdXN0IHdhaXRpbmcsIGFuZCBgd3FfaGFzX3NsZWVwZXJgIGZvciBhIHN0cm9uZ2VyIG1lbW9yeSBiYXJyaWVyLiBTbWFydCBtb3ZlIOKAkyB0aGF0IHNob3VsZCByZWFsbHkgdGlnaHRlbiB0aGluZ3MgdXAgYXJvdW5kIHRob3NlIGBSRFNfSU5fWE1JVGAgYW5kIGBSRFNfUkVDVl9SRUZJTExgIGZsYWdzLiBJbiBgcmRzX3RjcF9yZXNldF9jYWxsYmFja3NgLCBpdCBzZWVtcyB0aGV5IGFyZSBtYWtpbmcgc29tZSBsb2NrIG1hbmFnZW1lbnQgY2hhbmdlcyB3aGVuIHJlc2V0dGluZyB0aGUgc29ja2V0LlxuXG5UaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgZGVlcCBpbiBSRFMsIHdoaWNoIGNvdWxkIGJlIGltcG9ydGFudC4gQmVjYXVzZSBSRFMgY2FuIG9wZXJhdGUgb3ZlciBUQ1AgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCB0aGlzIG1ha2VzIHRoZSBwYXRjaCBpbnRlcmVzdGluZyBmb3IgYW5hbHlzaXMuIEknbSB0aGlua2luZywgdGhpcyBkZWZpbml0ZWx5IHdhcnJhbnRzIHNvbWUgZnV6emluZy4gR290dGEgY2hlY2sgdGhlIGF0dGFjayBzdXJmYWNlLlxuXG5MZXQncyBzZWUsIHdoYXQgZnVuY3Rpb25zIGRpZCB0aGV5IHRvdWNoPyBPa2F5LCBJJ3ZlIGdvdDogYHJkc19jb25uX3BhdGhfcmVzZXRgLCBgcmRzX2Nvbm5fc2h1dGRvd25gLCBgcmVsZWFzZV9pbl94bWl0YCwgYHJkc19zZW5kX3htaXRgLCBhbmQgYHJkc190Y3BfcmVzZXRfY2FsbGJhY2tzYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGV4cG9zZWQgdGhleSBhcmUuXG5cblJpZ2h0LCBgcmRzX2Nvbm5fc2h1dGRvd25gIGlzIGNhbGxlZCBmcm9tIGByZHNfY29ubl9kZXN0cm95YCwgYHJkc19jb25uX2Ryb3BgLCBldGMuLCBzbyB0aGF0J3MgaW50ZXJlc3RpbmcuIGByZHNfc2VuZF94bWl0YCBpcyB0cmlnZ2VyZWQgYnkgYHJkc19zZW5kbXNnYCwgd2hpY2ggZ2l2ZXMgdXMgYSBwb3RlbnRpYWwgZW50cnkgcG9pbnQgYW5kIGByZHNfdGNwX3Jlc2V0X2NhbGxiYWNrc2AgaXMgY2FsbGVkIGZyb20gYHJkc190Y3BfYWNjZXB0X29uZWAuXG5cbk9rYXksIEknbGwgZ28gYWhlYWQgYW5kIGRvIGEgcXVpY2sgc2VhcmNoIGZvciBgcmRzX2Nvbm5fc2h1dGRvd25gLCBgcmRzX3NlbmRfeG1pdGAsIGFuZCBgcmRzX3RjcF9yZXNldF9jYWxsYmFja3NgIHRvIHNlZSBob3cgdGhvc2UgYXJlIGNhbGxlZCwgYW5kIGdldCBhIGJldHRlciBwaWN0dXJlIG9mIHRoZSBwb3RlbnRpYWwgaW1wYWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NzcxLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDA6MjY6MzguMjIzODk5MzI4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1MDE5ODQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJkc19jb25uX3NodXRkb3duXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9yZHMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9yZHMvY29ubmVjdGlvbi5jPTM4Nz1FWFBPUlRfU1lNQk9MX0dQTChyZHNfY29ubl9jcmVhdGVfb3V0Z29pbmcpO1xcbm5ldC9yZHMvY29ubmVjdGlvbi5jLTM4OC1cXG5uZXQvcmRzL2Nvbm5lY3Rpb24uYzozODk6dm9pZCByZHNfY29ubl9zaHV0ZG93bihzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApXFxubmV0L3Jkcy9jb25uZWN0aW9uLmMtMzkwLXtcXG4tLVxcbm5ldC9yZHMvcmRzLmg9ODE1PXN0cnVjdCByZHNfY29ubmVjdGlvbiAqcmRzX2Nvbm5fY3JlYXRlX291dGdvaW5nKHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9yZHMvcmRzLmgtODE5LVxcdFxcdFxcdFxcdFxcdFxcdHU4IHRvcywgZ2ZwX3QgZ2ZwLCBpbnQgZGV2X2lmKTtcXG5uZXQvcmRzL3Jkcy5oOjgyMDp2b2lkIHJkc19jb25uX3NodXRkb3duKHN0cnVjdCByZHNfY29ubl9wYXRoICpjcGF0aCk7XFxubmV0L3Jkcy9yZHMuaC04MjEtdm9pZCByZHNfY29ubl9kZXN0cm95KHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubik7XFxuLS1cXG5uZXQvcmRzL3NlbmQuYz0xOTI9aW50IHJkc19zZW5kX3htaXQoc3RydWN0IHJkc19jb25uX3BhdGggKmNwKVxcbi0tXFxubmV0L3Jkcy9zZW5kLmMtMjQ2LVxcdC8qXFxubmV0L3Jkcy9zZW5kLmM6MjQ3OlxcdCAqIHJkc19jb25uX3NodXRkb3duKCkgc2V0cyB0aGUgY29ubiBzdGF0ZSBhbmQgdGhlbiBhY3F1aXJlc1xcbm5ldC9yZHMvc2VuZC5jLTI0OC1cXHQgKiBSRFNfSU5fWE1JVDsgd2UgdGFrZSB0aGUgbG9jayBmaXJzdCBhbmQgdGhlbiBjaGVjayB0aGUgc3RhdGUsXFxuLS1cXG5uZXQvcmRzL3RjcC5jPTEyOT12b2lkIHJkc190Y3BfcmVzZXRfY2FsbGJhY2tzKHN0cnVjdCBzb2NrZXQgKnNvY2ssXFxuLS1cXG5uZXQvcmRzL3RjcC5jLTE2OS1cXHQvKiBSZWFkIHRfc29jayBvbmx5IHdoaWxlIG93bmluZyBSRFNfSU5fWE1JVC4gIFRoZSB0ZWFyZG93biBpblxcbm5ldC9yZHMvdGNwLmM6MTcwOlxcdCAqIHJkc19jb25uX3NodXRkb3duKCkgcmVsZWFzZXMgdGhlIG9sZCBzb2NrZXQgYW5kIGNsZWFyc1xcbm5ldC9yZHMvdGNwLmMtMTcxLVxcdCAqIHRfc29jaywgc28gYSBwb2ludGVyIHNhbXBsZWQgYmVmb3JlIHRoZSB3YWl0IGNhbiBiZSBzdGFsZVxcbi0tXFxubmV0L3Jkcy90aHJlYWRzLmM9MjQzPXZvaWQgcmRzX3NodXRkb3duX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5uZXQvcmRzL3RocmVhZHMuYy0yNDgtXFxubmV0L3Jkcy90aHJlYWRzLmM6MjQ5OlxcdHJkc19jb25uX3NodXRkb3duKGNwKTtcXG5uZXQvcmRzL3RocmVhZHMuYy0yNTAtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQwMDoyNjozOC4yNzg5MjI5NTNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTA3NTkzOTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBSRFMgQ29ubmVjdGlvbiBTaHV0ZG93biBTZXF1ZW5jZSoqXG5cbk9rYXksIHNvIGByZHNfY29ubl9zaHV0ZG93bmAgaXMgdGhlIGtleSBmdW5jdGlvbiBiZWluZyBjYWxsZWQgZnJvbSBgcmRzX3NodXRkb3duX3dvcmtlcmAuIFRoYXQgaW1tZWRpYXRlbHkgZmxhZ3MgYSBwb3RlbnRpYWwgYXJlYSBvZiBjb25jZXJuIHdoZW4gd2UncmUgZGVhbGluZyB3aXRoIGNvbm5lY3Rpb24gdGVhcmRvd24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBzaHV0ZG93biBwcm9jZWR1cmUuXG5cbk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gZmxvdyBhbmQgaWRlbnRpZnkgd2hlcmUgdGhlIG5ldHdvcmsgcmVzb3VyY2VzIGNvdWxkIGJlIGdldHRpbmcgcmVsZWFzZWQuIFdlIG5lZWQgdG8gYmUgY2FyZWZ1bCB3aXRoIHJlc291cmNlIG1hbmFnZW1lbnQgdG8gYXZvaWQgbWVtb3J5IGNvcnJ1cHRpb24sIHVzZSBhZnRlciBmcmVlIGVycm9ycywgb3IgZGVhZGxvY2tzIGR1cmluZyBhIHNodXRkb3duLlxuXG5JJ20gdGhpbmtpbmcgSSBzaG91bGQgbG9vayBjbG9zZWx5IGF0IGEgY291cGxlIG9mIGltcG9ydGFudCBwaWVjZXMuIEZpcnN0LCBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGRhdGEgaXMgaGFuZGxlZCB3aGVuIGEgY29ubmVjdGlvbiBpcyBzaHV0dGluZyBkb3duLCBzbyBJJ2xsIGNoZWNrIGByZHNfc2VuZF94bWl0YC4gU2Vjb25kbHksIEkgd2FudCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgVENQIGNvbm5lY3Rpb24gaXMgcmVzZXQgYW5kIGhvdyBvdXIgY2FsbGJhY2tzIGFyZSBjbGVhcmVkIGR1cmluZyB0aGlzIHByb2NlZHVyZSwgc28gSSdsbCByZXZpZXcgYHJkc190Y3BfcmVzZXRfY2FsbGJhY2tzYC4gQm90aCBvZiB0aGVzZSBhcmUgYXJlYXMgd2hlcmUgd2UgY291bGQgZWFzaWx5IGludHJvZHVjZSBhIHN1YnRsZSBidWcgcmVsYXRlZCB0byB0aGUgc2h1dGRvd24gc2VxdWVuY2UsIGFuZCBJIGtub3cgZnJvbSBleHBlcmllbmNlIHRoYXQgdGhlc2UgdHlwZXMgb2YgaXNzdWVzIGNhbiBiZSBkaWZmaWN1bHQgdG8gZGVidWcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYxODEsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQwMDoyNjo0MS43ODY1MTk0MTJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc3MzM0MDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmRzX3NlbmRfeG1pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvcmRzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvcmRzL2NvbmcuYz0yMTc9dm9pZCByZHNfY29uZ19xdWV1ZV91cGRhdGVzKHN0cnVjdCByZHNfY29uZ19tYXAgKm1hcClcXG4tLVxcbm5ldC9yZHMvY29uZy5jLTIzMC1cXHRcXHRcXHRyZHNfc3RhdHNfaW5jKHNfY29uZ191cGRhdGVfcXVldWVkKTtcXG5uZXQvcmRzL2NvbmcuYzoyMzE6XFx0XFx0XFx0LyogV2UgY2Fubm90IGlubGluZSB0aGUgY2FsbCB0byByZHNfc2VuZF94bWl0KCkgaGVyZVxcbm5ldC9yZHMvY29uZy5jLTIzMi1cXHRcXHRcXHQgKiBmb3IgdHdvIHJlYXNvbnMgKGJvdGggcGVydGFpbmluZyB0byBhIFRDUCB0cmFuc3BvcnQpOlxcbi0tXFxubmV0L3Jkcy9pYl9jbS5jPTI4Mj1zdGF0aWMgdm9pZCByZHNfaWJfdGFza2xldF9mbl9zZW5kKHVuc2lnbmVkIGxvbmcgZGF0YSlcXG4tLVxcbm5ldC9yZHMvaWJfY20uYy0yOTktXFx0ICAgIHRlc3RfYml0KDAsIFxcdTAwMjZjb25uLVxcdTAwM2VjX21hcF9xdWV1ZWQpKSlcXG5uZXQvcmRzL2liX2NtLmM6MzAwOlxcdFxcdHJkc19zZW5kX3htaXQoXFx1MDAyNmljLVxcdTAwM2Vjb25uLVxcdTAwM2VjX3BhdGhbMF0pO1xcbm5ldC9yZHMvaWJfY20uYy0zMDEtfVxcbi0tXFxubmV0L3Jkcy9pYl9zZW5kLmM9MjQ1PXZvaWQgcmRzX2liX3NlbmRfY3FlX2hhbmRsZXIoc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYywgc3RydWN0IGliX3djICp3YylcXG4tLVxcbm5ldC9yZHMvaWJfc2VuZC5jLTMzNS0gKlxcbm5ldC9yZHMvaWJfc2VuZC5jOjMzNjogKiBUaGUgUkRTIHNlbmQgY29kZSBpcyBlc3NlbnRpYWxseSBzaW5nbGUtdGhyZWFkZWQ7IHJkc19zZW5kX3htaXRcXG5uZXQvcmRzL2liX3NlbmQuYy0zMzctICogc2V0cyBSRFNfSU5fWE1JVCB0byBlbnN1cmUgZXhjbHVzaXZlIGFjY2VzcyB0byB0aGUgc2VuZCByaW5nLlxcbi0tXFxubmV0L3Jkcy9sb29wLmM9MjM1PXZvaWQgcmRzX2xvb3BfbmV0X2V4aXQodm9pZClcXG4tLVxcbm5ldC9yZHMvbG9vcC5jLTI0MS0gKiBUaGlzIGlzIG1pc3NpbmcgLnhtaXRfKiBiZWNhdXNlIGxvb3AgZG9lc24ndCBnbyB0aHJvdWdoIGdlbmVyaWNcXG5uZXQvcmRzL2xvb3AuYzoyNDI6ICogcmRzX3NlbmRfeG1pdCgpIGFuZCBkb2Vzbid0IGNhbGwgcmRzX3JlY3ZfaW5jb21pbmcoKS4gIC5saXN0ZW5fc3RvcCBhbmRcXG5uZXQvcmRzL2xvb3AuYy0yNDMtICogLmxhZGRyX2NoZWNrIGFyZSBtaXNzaW5nIGJlY2F1c2UgdHJhbnNwb3J0LmMgZG9lc24ndCBpdGVyYXRlIG92ZXJcXG4tLVxcbm5ldC9yZHMvcmRzLmg9NTQwPXN0cnVjdCByZHNfdHJhbnNwb3J0IHtcXG4tLVxcbm5ldC9yZHMvcmRzLmgtNTgwLVxcdC8qXFxubmV0L3Jkcy9yZHMuaDo1ODE6XFx0ICogLnhtaXQgaXMgY2FsbGVkIGJ5IHJkc19zZW5kX3htaXQoKSB0byB0ZWxsIHRoZSB0cmFuc3BvcnQgdG8gc2VuZFxcbm5ldC9yZHMvcmRzLmgtNTgyLVxcdCAqIHBhcnQgb2YgYSBtZXNzYWdlLiAgVGhlIGNhbGxlciBzZXJpYWxpemVzIG9uIHRoZSBzZW5kX3NlbSBzbyB0aGlzXFxuLS1cXG5uZXQvcmRzL3Jkcy5oPTk1Nz12b2lkIHJkc19zZW5kX3BhdGhfcmVzZXQoc3RydWN0IHJkc19jb25uX3BhdGggKmNvbm4pO1xcbm5ldC9yZHMvcmRzLmg6OTU4OmludCByZHNfc2VuZF94bWl0KHN0cnVjdCByZHNfY29ubl9wYXRoICpjcCk7XFxubmV0L3Jkcy9yZHMuaC05NTktc3RydWN0IHNvY2thZGRyX2luO1xcbi0tXFxubmV0L3Jkcy9zZW5kLmMtNDQtXFxubmV0L3Jkcy9zZW5kLmM6NDU6LyogV2hlbiB0cmFuc21pdHRpbmcgbWVzc2FnZXMgaW4gcmRzX3NlbmRfeG1pdCwgd2UgbmVlZCB0byBlbWVyZ2UgZnJvbVxcbm5ldC9yZHMvc2VuZC5jLTQ2LSAqIHRpbWUgdG8gdGltZSBhbmQgYnJpZWZseSByZWxlYXNlIHRoZSBDUFUuIE90aGVyd2lzZSB0aGUgc29mdGxvY2sgd2F0Y2hkb2dcXG4tLVxcbm5ldC9yZHMvc2VuZC5jPTU5PXN0YXRpYyB2b2lkIHJkc19zZW5kX3JlbW92ZV9mcm9tX3NvY2soc3RydWN0IGxpc3RfaGVhZCAqbWVzc2FnZXMsIGludCBzdGF0dXMpO1xcbi0tXFxubmV0L3Jkcy9zZW5kLmMtNjItICogUmVzZXQgdGhlIHNlbmQgc3RhdGUuICBDYWxsZXJzIG11c3QgZW5zdXJlIHRoYXQgdGhpcyBkb2Vzbid0IHJhY2Ugd2l0aFxcbm5ldC9yZHMvc2VuZC5jOjYzOiAqIHJkc19zZW5kX3htaXQoKS5cXG5uZXQvcmRzL3NlbmQuYy02NC0gKi9cXG4tLVxcbm5ldC9yZHMvc2VuZC5jPTEzMz1zdGF0aWMgYm9vbCByZHNfbXByZHNfY3AwX2NhdGNodXAoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKVxcbi0tXFxubmV0L3Jkcy9zZW5kLmMtMTkxLSAqL1xcbm5ldC9yZHMvc2VuZC5jOjE5MjppbnQgcmRzX3NlbmRfeG1pdChzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApXFxubmV0L3Jkcy9zZW5kLmMtMTkzLXtcXG4tLVxcbm5ldC9yZHMvc2VuZC5jLTU1NS19XFxubmV0L3Jkcy9zZW5kLmM6NTU2OkVYUE9SVF9TWU1CT0xfR1BMKHJkc19zZW5kX3htaXQpO1xcbm5ldC9yZHMvc2VuZC5jLTU1Ny1cXG4tLVxcbm5ldC9yZHMvc2VuZC5jPTY5MD1zdGF0aWMgdm9pZCByZHNfc2VuZF9yZW1vdmVfZnJvbV9zb2NrKHN0cnVjdCBsaXN0X2hlYWQgKm1lc3NhZ2VzLCBpbnQgc3RhdHVzKVxcbi0tXFxubmV0L3Jkcy9zZW5kLmMtNzY1LSAqIG1lc3NhZ2VzIHVwIHRvLCBhbmQgaW5jbHVkaW5nLCB0aGUgZ2l2ZW4gc2VxdWVuY2UgbnVtYmVyLiAgTWVzc2FnZXMgYXJlXFxubmV0L3Jkcy9zZW5kLmM6NzY2OiAqIG1vdmVkIHRvIHRoZSByZXRyYW5zIHF1ZXVlIHdoZW4gcmRzX3NlbmRfeG1pdCBwaWNrcyB0aGVtIG9mZiB0aGUgc2VuZFxcbm5ldC9yZHMvc2VuZC5jLTc2Ny0gKiBxdWV1ZS4gVGhpcyBtZWFucyB0aGF0IGluIHRoZSBUQ1AgY2FzZSwgdGhlIG1lc3NhZ2UgbWF5IG5vdCBoYXZlIGJlZW5cXG4tLVxcbm5ldC9yZHMvc2VuZC5jPTExNTI9aW50IHJkc19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHBheWxvYWRfbGVuKVxcbi0tXFxubmV0L3Jkcy9zZW5kLmMtMTQ0OS1cXG5uZXQvcmRzL3NlbmQuYzoxNDUwOlxcdHJldCA9IHJkc19zZW5kX3htaXQoY3BhdGgpO1xcbm5ldC9yZHMvc2VuZC5jLTE0NTEtXFx0aWYgKHJldCA9PSAtRU5PTUVNIHx8IHJldCA9PSAtRUFHQUlOKSB7XFxuLS1cXG5uZXQvcmRzL3RjcC5jPTk2PXZvaWQgcmRzX3RjcF9yZXN0b3JlX2NhbGxiYWNrcyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxcbi0tXFxubmV0L3Jkcy90Y3AuYy0xMjYtICogYW5kIHRoZSBzd2FwIGRvbmUgaGVyZSBydW5zIHVuZGVyIFJEU19JTl9YTUlUIHNvIHRoYXQgaXQgY2Fubm90XFxubmV0L3Jkcy90Y3AuYzoxMjc6ICogaW50ZXJsZWF2ZSB3aXRoIGEgc2VuZGVyIGFscmVhZHkgaW5zaWRlIHJkc19zZW5kX3htaXQoKS5cXG5uZXQvcmRzL3RjcC5jLTEyOC0gKi9cXG5uZXQvcmRzL3RjcC5jPTEyOT12b2lkIHJkc190Y3BfcmVzZXRfY2FsbGJhY2tzKHN0cnVjdCBzb2NrZXQgKnNvY2ssXFxuLS1cXG5uZXQvcmRzL3RjcC5jLTE0MC1cXHQgKiB0aGFuIFJEU19DT05OX1VQIHN0b3BzIG5ldyBzZW5kZXJzLCBhbmQgb3duaW5nIFJEU19JTl9YTUlUXFxubmV0L3Jkcy90Y3AuYzoxNDE6XFx0ICogZXhjbHVkZXMgYW55IHRocmVhZCBhbHJlYWR5IGluc2lkZSByZHNfc2VuZF94bWl0KCkgZm9yIHRoZVxcbm5ldC9yZHMvdGNwLmMtMTQyLVxcdCAqIHdob2xlIHNvY2tldCBzd2FwIGFuZCB0aGUgcmRzX3NlbmRfcGF0aF9yZXNldCgpIGJlbG93Llxcbi0tXFxubmV0L3Jkcy90Y3AuYy0xNDQtXFx0ICogQW4gaW5jb21pbmcgc3luLWFjayBhdCB0aGlzIHBvaW50IHdvdWxkIGVuZCB1cCBtYXJraW5nIHRoZVxcbm5ldC9yZHMvdGNwLmM6MTQ1OlxcdCAqIGNvbm4gYXMgUkRTX0NPTk5fVVAsIGFuZCB3b3VsZCBhZ2FpbiBwZXJtaXQgcmRzX3NlbmRfeG1pdCgpXFxubmV0L3Jkcy90Y3AuYy0xNDYtXFx0ICogdGhyZWFkcyB0aHJvdWdoLCBzbyBpZGVhbGx5IHdlIHdvdWxkIHN5bmNocm9uaXplIG9uXFxuLS1cXG5uZXQvcmRzL3RocmVhZHMuYz0xOTE9dm9pZCByZHNfc2VuZF93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxubmV0L3Jkcy90aHJlYWRzLmMtMTk5LVxcdFxcdGNsZWFyX2JpdChSRFNfTExfU0VORF9GVUxMLCBcXHUwMDI2Y3AtXFx1MDAzZWNwX2ZsYWdzKTtcXG5uZXQvcmRzL3RocmVhZHMuYzoyMDA6XFx0XFx0cmV0ID0gcmRzX3NlbmRfeG1pdChjcCk7XFxubmV0L3Jkcy90aHJlYWRzLmMtMjAxLVxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQwMDoyNjo0MS44MzQyNTczMTdaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjYxNzk5MTYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipJbnRlcm5hbCBDb2RlIEZsb3cgQ29uc2lkZXJhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgYHJkc19zZW5kX3htaXRgIGlzIHVzZWQuIEl0J3MgZGVmaW5pdGVseSBleHBvcnRlZCwgbWVhbmluZyBpdCdzIHZpc2libGUgb3V0c2lkZSBpdHMgaW1tZWRpYXRlIHNjb3BlLiBTZWVtcyBsaWtlIGByZHNfc2VuZG1zZ2AgYW5kIGByZHNfc2VuZF93b3JrZXJgIGFyZSB0aGUga2V5IGNhbGwgc2l0ZXMuIFRoYXQgZ2l2ZXMgbWUgYSBoYW5kbGUgb24gdGhlIGRhdGEgcGF0aCBmb3IgdHJhbnNtaXNzaW9ucy4gS25vd2luZyB0aGVzZSBmdW5jdGlvbnMgY2FsbCBgcmRzX3NlbmRfeG1pdGAgdGVsbHMgbWUgd2hlcmUgdG8gc3RhcnQgbG9va2luZyB3aGVuIGRlYnVnZ2luZyBhIHNlbmQgaXNzdWUuXG5cbk5vdywgYHJkc190Y3BfcmVzZXRfY2FsbGJhY2tzYC4uLiB0aGF0J3MgdGhlIGludGVyZXN0aW5nIG9uZS4gVGhlIHRleHQgc3VnZ2VzdHMgaXQgaXMgY2FsbGVkIGZyb20gYHJkc190Y3BfYWNjZXB0X29uZWAuIE5lZWQgdG8gdmVyaWZ5IHRoaXMgaW4gdGhlIGNvZGUuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgY2FsbCBncmFwaCB0byBiZSBzdXJlIHRoYXQgYHJkc190Y3BfYWNjZXB0X29uZWAgaXMgdGhlIG9ubHkgY2FsbGVyIG9mIGByZHNfdGNwX3Jlc2V0X2NhbGxiYWNrc2AuIElmIHRoYXQncyB0aGUgY2FzZSwgaXQgZ2l2ZXMgbWUgYSBjbGVhciBpZGVhIG9mIHdoZW4gdGhvc2UgY2FsbGJhY2tzIGFyZSBiZWluZyByZXNldC4gVW5kZXJzdGFuZGluZyB0aGVzZSBkZXBlbmRlbmNpZXMgYXJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgyMDAsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQwMDoyNjo0NS4wOTYwNjQ5NDlaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg0OTU0NDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmRzX3RjcF9yZXNldF9jYWxsYmFja3NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3Jkcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3Jkcy9jb25uZWN0aW9uLmM9Mzg5PXZvaWQgcmRzX2Nvbm5fc2h1dGRvd24oc3RydWN0IHJkc19jb25uX3BhdGggKmNwKVxcbi0tXFxubmV0L3Jkcy9jb25uZWN0aW9uLmMtNDM0LVxcdFxcdC8qIFJlbGVhc2UgdGhlIHR3byBsb2NrcyBhbmQgd2FrZSBhbnkgd2FpdGVyIChlLmcuXFxubmV0L3Jkcy9jb25uZWN0aW9uLmM6NDM1OlxcdFxcdCAqIHJkc190Y3BfcmVzZXRfY2FsbGJhY2tzKCkpIHRoYXQgYmxvY2tlZCBvbiB0aGVtIHdoaWxlXFxubmV0L3Jkcy9jb25uZWN0aW9uLmMtNDM2LVxcdFxcdCAqIHdlIGhlbGQgdGhlbS4gIHJkc19jb25uX3BhdGhfcmVzZXQoKSBsZWF2ZXMgYm90aCBiaXRzXFxuLS1cXG5uZXQvcmRzL3RjcC5jPTk2PXZvaWQgcmRzX3RjcF9yZXN0b3JlX2NhbGxiYWNrcyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxcbi0tXFxubmV0L3Jkcy90Y3AuYy0xMTctLypcXG5uZXQvcmRzL3RjcC5jOjExODogKiByZHNfdGNwX3Jlc2V0X2NhbGxiYWNrcygpIHN3aXRjaGVzIGEgcGF0aCB0byBhIG5ldyBzb2NrZXQgYW5kXFxubmV0L3Jkcy90Y3AuYy0xMTktICogcmVsZWFzZXMgdGhlIG9sZCBvbmUgaXQgZmluZHMgaW4gdGMtXFx1MDAzZXRfc29jaywgcmVzb2x2aW5nIGEgZHVlbGxpbmdcXG4tLVxcbm5ldC9yZHMvdGNwLmMtMTI4LSAqL1xcbm5ldC9yZHMvdGNwLmM6MTI5OnZvaWQgcmRzX3RjcF9yZXNldF9jYWxsYmFja3Moc3RydWN0IHNvY2tldCAqc29jayxcXG5uZXQvcmRzL3RjcC5jLTEzMC1cXHRcXHRcXHQgICAgIHN0cnVjdCByZHNfY29ubl9wYXRoICpjcClcXG4tLVxcbm5ldC9yZHMvdGNwLmMtMjAxLS8qIEFkZCB0YyB0byByZHNfdGNwX3RjX2xpc3QgYW5kIHNldCB0Yy1cXHUwMDNldF9zb2NrLiBTZWUgY29tbWVudHNcXG5uZXQvcmRzL3RjcC5jOjIwMjogKiBhYm92ZSByZHNfdGNwX3Jlc2V0X2NhbGxiYWNrcyBmb3Igbm90ZXMgYWJvdXQgc3luY2hyb25pemF0aW9uXFxubmV0L3Jkcy90Y3AuYy0yMDMtICogd2l0aCBkYXRhIHBhdGhcXG4tLVxcbm5ldC9yZHMvdGNwLmg9NzQ9dm9pZCByZHNfdGNwX3NldF9jYWxsYmFja3Moc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHJkc19jb25uX3BhdGggKmNwKTtcXG5uZXQvcmRzL3RjcC5oOjc1OnZvaWQgcmRzX3RjcF9yZXNldF9jYWxsYmFja3Moc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHJkc19jb25uX3BhdGggKmNwKTtcXG5uZXQvcmRzL3RjcC5oLTc2LXZvaWQgcmRzX3RjcF9yZXN0b3JlX2NhbGxiYWNrcyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxcbi0tXFxubmV0L3Jkcy90Y3BfbGlzdGVuLmM9MTUyPWludCByZHNfdGNwX2FjY2VwdF9vbmUoc3RydWN0IHJkc190Y3BfbmV0ICpydG4pXFxuLS1cXG5uZXQvcmRzL3RjcF9saXN0ZW4uYy0yOTYtXFx0XFx0LyogRHVlbGxpbmcgU1lOIGhhcyBiZWVuIGhhbmRsZWQgaW4gcmRzX3RjcF9hY2NlcHRfb25lKCkgKi9cXG5uZXQvcmRzL3RjcF9saXN0ZW4uYzoyOTc6XFx0XFx0cmRzX3RjcF9yZXNldF9jYWxsYmFja3MobmV3X3NvY2ssIGNwKTtcXG5uZXQvcmRzL3RjcF9saXN0ZW4uYy0yOTgtXFx0XFx0LyogcmRzX2Nvbm5lY3RfcGF0aF9jb21wbGV0ZSgpIG1hcmtzIFJEU19DT05OX1VQICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDAwOjI2OjQ1LjE0NDU2NTM3NFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNDAwNjgxMjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGEgbmV0d29ya2luZyBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyBSRFMgVENQIFJlc2V0IENhbGxiYWNrcyoqXG5cbkFscmlnaHQsIHNvIHRoZSBjbHVlIGhlcmUgaXMgdGhhdCBgcmRzX3RjcF9yZXNldF9jYWxsYmFja3NgIGlzIGRlZmluaXRlbHkgY2FsbGVkIGZyb20gd2l0aGluIGByZHNfdGNwX2FjY2VwdF9vbmVgLiBHb29kLiBUaGF0IGNvbmZpcm1zIGEgY2VydGFpbiBjb25uZWN0aW9uIGZsb3csIG9yIGF0IGxlYXN0IGEgc3BlY2lmaWMgcG9pbnQgb2YgaW50ZWdyYXRpb24uIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxhcmdlciBjb250ZXh0IG9mICp3aHkqIHRoaXMgaGFwcGVucy4gS25vd2luZyB0aGUgY2FsbCBwYXRoIGlzIGp1c3QgdGhlIGJlZ2lubmluZy4gVGhlIG5leHQgbG9naWNhbCBzdGVwLCB0byBnZXQgdGhlIGJpZ2dlciBwaWN0dXJlLCBpcyB0byBpbnZlc3RpZ2F0ZSB0aGUgY2FsbGVycyBvZiBgcmRzX2Nvbm5fc2h1dGRvd25gLiBUaGF0J2xsIGdpdmUgbWUgYSB2aWV3IG9mIHdoYXQgdHJpZ2dlcnMgdGhlIGNvbm5lY3Rpb24gc2h1dGRvd24gcHJvY2VzcywgYW5kIHRoZXJlZm9yZSBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBgcmVzZXRfY2FsbGJhY2tzYCBhcmUgdXNlZCBpbiByZWxhdGlvbiB0byB0aGUgc2h1dGRvd24gcHJvY2VkdXJlLiBUaGF0IHNob3VsZCBpbGx1bWluYXRlIHRoZSBmYWlsdXJlIGFuZCBwb2ludCBtZSB0byBwb3RlbnRpYWwgcm9vdCBjYXVzZXMgYW5kIGZpeGVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MTQ4LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDA6MjY6NDguMTg0NjM4MTVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4OTA2MTI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJkc19jb25uX3NodXRkb3duXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9yZHMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9yZHMvY29ubmVjdGlvbi5jPTM4Nz1FWFBPUlRfU1lNQk9MX0dQTChyZHNfY29ubl9jcmVhdGVfb3V0Z29pbmcpO1xcbm5ldC9yZHMvY29ubmVjdGlvbi5jLTM4OC1cXG5uZXQvcmRzL2Nvbm5lY3Rpb24uYzozODk6dm9pZCByZHNfY29ubl9zaHV0ZG93bihzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApXFxubmV0L3Jkcy9jb25uZWN0aW9uLmMtMzkwLXtcXG4tLVxcbm5ldC9yZHMvcmRzLmg9ODE1PXN0cnVjdCByZHNfY29ubmVjdGlvbiAqcmRzX2Nvbm5fY3JlYXRlX291dGdvaW5nKHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9yZHMvcmRzLmgtODE5LVxcdFxcdFxcdFxcdFxcdFxcdHU4IHRvcywgZ2ZwX3QgZ2ZwLCBpbnQgZGV2X2lmKTtcXG5uZXQvcmRzL3Jkcy5oOjgyMDp2b2lkIHJkc19jb25uX3NodXRkb3duKHN0cnVjdCByZHNfY29ubl9wYXRoICpjcGF0aCk7XFxubmV0L3Jkcy9yZHMuaC04MjEtdm9pZCByZHNfY29ubl9kZXN0cm95KHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubik7XFxuLS1cXG5uZXQvcmRzL3NlbmQuYz0xOTI9aW50IHJkc19zZW5kX3htaXQoc3RydWN0IHJkc19jb25uX3BhdGggKmNwKVxcbi0tXFxubmV0L3Jkcy9zZW5kLmMtMjQ2LVxcdC8qXFxubmV0L3Jkcy9zZW5kLmM6MjQ3OlxcdCAqIHJkc19jb25uX3NodXRkb3duKCkgc2V0cyB0aGUgY29ubiBzdGF0ZSBhbmQgdGhlbiBhY3F1aXJlc1xcbm5ldC9yZHMvc2VuZC5jLTI0OC1cXHQgKiBSRFNfSU5fWE1JVDsgd2UgdGFrZSB0aGUgbG9jayBmaXJzdCBhbmQgdGhlbiBjaGVjayB0aGUgc3RhdGUsXFxuLS1cXG5uZXQvcmRzL3RjcC5jPTEyOT12b2lkIHJkc190Y3BfcmVzZXRfY2FsbGJhY2tzKHN0cnVjdCBzb2NrZXQgKnNvY2ssXFxuLS1cXG5uZXQvcmRzL3RjcC5jLTE2OS1cXHQvKiBSZWFkIHRfc29jayBvbmx5IHdoaWxlIG93bmluZyBSRFNfSU5fWE1JVC4gIFRoZSB0ZWFyZG93biBpblxcbm5ldC9yZHMvdGNwLmM6MTcwOlxcdCAqIHJkc19jb25uX3NodXRkb3duKCkgcmVsZWFzZXMgdGhlIG9sZCBzb2NrZXQgYW5kIGNsZWFyc1xcbm5ldC9yZHMvdGNwLmMtMTcxLVxcdCAqIHRfc29jaywgc28gYSBwb2ludGVyIHNhbXBsZWQgYmVmb3JlIHRoZSB3YWl0IGNhbiBiZSBzdGFsZVxcbi0tXFxubmV0L3Jkcy90aHJlYWRzLmM9MjQzPXZvaWQgcmRzX3NodXRkb3duX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5uZXQvcmRzL3RocmVhZHMuYy0yNDgtXFxubmV0L3Jkcy90aHJlYWRzLmM6MjQ5OlxcdHJkc19jb25uX3NodXRkb3duKGNwKTtcXG5uZXQvcmRzL3RocmVhZHMuYy0yNTAtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQwMDoyNjo0OC4yMzM1NTMyMDVaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzAyNzkzNjQ0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRoZSBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgU2h1dGRvd24gU2VxdWVuY2UqKlxuXG5Pa2F5LCBzbyBJIHNlZSBgcmRzX2Nvbm5fc2h1dGRvd25gIGJlaW5nIHRyaWdnZXJlZCB3aXRoaW4gYHJkc19zaHV0ZG93bl93b3JrZXJgLiBOYXR1cmFsbHksIG15IG5leHQgbW92ZSBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBJIG5lZWQgdG8gdHJhY2UgYmFjayBhbmQgaWRlbnRpZnkgdGhlIGNhbGxpbmcgZnVuY3Rpb25zIG9mIGByZHNfc2h1dGRvd25fd29ya2VyYC4gVW5kZXJzdGFuZGluZyB0aGUgY2FsbCBncmFwaCBoZXJlIGlzIGNydWNpYWwgdG8gc2VlIHdoYXQncyAqYWN0dWFsbHkqIGRyaXZpbmcgdGhlIGNvbm5lY3Rpb24gc2h1dGRvd24gcHJvY2Vzcy4gS25vd2luZyAqd2hvKiBpcyBpbml0aWF0aW5nIHRoaXMgc2h1dGRvd24gd2lsbCBwcm92aWRlIHRoZSBuZWNlc3NhcnkgY29udGV4dCB0byB0cm91Ymxlc2hvb3QgYW55IHByb2JsZW1zIGFuZCBlbnN1cmUgd2UncmUgc2h1dHRpbmcgZG93biB0aGluZ3MgaW4gdGhlIHByb3BlciBzZXF1ZW5jZS4gTGV0J3MgZGlnIGluIGFuZCBmaWd1cmUgb3V0IHRoZSBjaGFpbiBvZiBldmVudHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk5MzgsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQwMDoyNjo1MS4yNjE0OTI1MDFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NzQ4NjA0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJkc19zaHV0ZG93bl93b3JrZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3Jkcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3Jkcy9jb25uZWN0aW9uLmM9MTM5PXN0YXRpYyB2b2lkIF9fcmRzX2Nvbm5fcGF0aF9pbml0KHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubixcXG4tLVxcbm5ldC9yZHMvY29ubmVjdGlvbi5jLTE1NS1cXHRJTklUX0RFTEFZRURfV09SSyhcXHUwMDI2Y3AtXFx1MDAzZWNwX2Nvbm5fdywgcmRzX2Nvbm5lY3Rfd29ya2VyKTtcXG5uZXQvcmRzL2Nvbm5lY3Rpb24uYzoxNTY6XFx0SU5JVF9XT1JLKFxcdTAwMjZjcC1cXHUwMDNlY3BfZG93bl93LCByZHNfc2h1dGRvd25fd29ya2VyKTtcXG5uZXQvcmRzL2Nvbm5lY3Rpb24uYy0xNTctXFx0bXV0ZXhfaW5pdChcXHUwMDI2Y3AtXFx1MDAzZWNwX2NtX2xvY2spO1xcbi0tXFxubmV0L3Jkcy9yZHMuaD0xMDQ0PXZvaWQgcmRzX2Nvbm5lY3Rfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqKTtcXG5uZXQvcmRzL3Jkcy5oOjEwNDU6dm9pZCByZHNfc2h1dGRvd25fd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqKTtcXG5uZXQvcmRzL3Jkcy5oLTEwNDYtdm9pZCByZHNfc2VuZF93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICopO1xcbi0tXFxubmV0L3Jkcy90aHJlYWRzLmM9MjE4PXZvaWQgcmRzX3JlY3Zfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbm5ldC9yZHMvdGhyZWFkcy5jLTI0Mi1cXG5uZXQvcmRzL3RocmVhZHMuYzoyNDM6dm9pZCByZHNfc2h1dGRvd25fd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG5uZXQvcmRzL3RocmVhZHMuYy0yNDQte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQwMDoyNjo1MS4zMDcyNDY0MjdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg4MDU0OTcyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHdoYXQgbmVlZHMgYXR0ZW50aW9uIHdoZW4gaGFuZGxpbmcgY29ubmVjdGlvbiBzaHV0ZG93biBpbiBSRFMsIGFwcHJvYWNoZWQgZnJvbSBteSBleHBlcnQgcGVyc3BlY3RpdmU6XG5cbioqRm9jdXNpbmcgb24gUkRTIENvbm5lY3Rpb24gU2h1dGRvd24qKlxuXG5Pa2F5LCBzbyBgcmRzX3NodXRkb3duX3dvcmtlcmAgaXMgdGhlIHdvcmtxdWV1ZSBmdW5jdGlvbiB0aGF0IHRyaWdnZXJzIHdoZW4gYSBjb25uZWN0aW9uIGlzIHRlcm1pbmF0ZWQuIFRoYXQncyB0aGUgZW50cnkgcG9pbnQgdG8gaW52ZXN0aWdhdGUuIE5hdHVyYWxseSwgdGhhdCdzIHdoZXJlIHRoZSBjcml0aWNhbCBhY3Rpb25zIHdpbGwgYmUuIEdpdmVuIHRoYXQsIEkga25vdyB0aGUgY3J1Y2lhbCBmdW5jdGlvbnMgdG8gZHJpbGwgZG93biBpbnRvIGFyZTpcblxuKiAgIGByZHNfc2VuZF94bWl0YDogSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgaGFuZGxlcyBvbmdvaW5nIHRyYW5zbWlzc2lvbnMgZHVyaW5nIHNodXRkb3duLiBEb2VzIGl0IGdyYWNlZnVsbHkgZmx1c2gsIGNhbmNlbCwgb3Igc2ltcGx5IGRyb3AgdGhlbT8gQXJlIHRoZXJlIHJhY2UgY29uZGl0aW9ucyB0byB3b3JyeSBhYm91dD9cbiogICBgcmRzX3RjcF9yZXNldF9jYWxsYmFja3NgOiBUaGlzIGlzIGxpa2VseSB3aGVyZSB0aGUgc29ja2V0J3MgYXNzb2NpYXRlZCBjYWxsYmFja3MgYXJlIGJlaW5nIGNsZWFyZWQuIEkgbXVzdCBjaGVjayB3aGF0IHRoZXNlIGNhbGxiYWNrcyB3ZXJlIGFuZCBob3cgaXQgY2xlYW5zIHVwIHRoZWlyIGludGVybmFsIHN0YXRlLiBJIG11c3QgZW5zdXJlIHRoaXMgaXMgaGFuZGxlZCBwcm9wZXJseSwgY29uc2lkZXJpbmcgcG90ZW50aWFsIGNvbmN1cnJlbnQgYWNjZXNzLlxuKiAgIGByZHNfY29ubl9zaHV0ZG93bmA6IFRoZSBjb3JlIHNodXRkb3duIGxvZ2ljIGhhcyB0byBiZSBpbiB0aGlzIGZ1bmN0aW9uLiBUaGlzIGlzIHdoZXJlIEknbGwgZmluZCBob3cgdGhlIGNvbm5lY3Rpb24gc3RhdGUgdHJhbnNpdGlvbnMgYW5kIGhvdyByZXNvdXJjZXMgYXJlIGZyZWVkLiBJdCBpcyBsaWtlbHkgaXQgd2lsbCBjYWxsIHRoZSBvdGhlciB0d28gYXMgcGFydCBvZiBpdHMgZnVuY3Rpb25zLlxuXG5OZXh0LCBJJ2xsIGV4YW1pbmUgdGhlIGNvbmZpZ3VyYXRpb24gYXNwZWN0cyBvZiB0aGUgUkRTIHN1YnN5c3RlbS4gVGhpcyB3YXksIEkga25vdyBhbGwgdGhlIHZhcmlhYmxlcyBpbiB0aGUgbWl4LiBJIGhhdmUgdG8ga25vdyBhbGwgdGhlIHNldHRpbmdzIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzaHV0ZG93biBwcm9jZXNzIGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNDQzLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDA6MjY6NTUuMTg3Nzk4NjE3WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjA0MzUyMjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFJEU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvcmRzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvcmRzL0tjb25maWctMi1cXG5uZXQvcmRzL0tjb25maWc6Mzpjb25maWcgUkRTXFxubmV0L3Jkcy9LY29uZmlnLTQtXFx0dHJpc3RhdGUgXFxcIlRoZSBSZWxpYWJsZSBEYXRhZ3JhbSBTb2NrZXRzIFByb3RvY29sXFxcIlxcbi0tXFxubmV0L3Jkcy9LY29uZmlnLTktXFxubmV0L3Jkcy9LY29uZmlnOjEwOmNvbmZpZyBSRFNfUkRNQVxcbm5ldC9yZHMvS2NvbmZpZy0xMS1cXHR0cmlzdGF0ZSBcXFwiUkRTIG92ZXIgSW5maW5pYmFuZFxcXCJcXG4tLVxcbm5ldC9yZHMvS2NvbmZpZy0xNi1cXG5uZXQvcmRzL0tjb25maWc6MTc6Y29uZmlnIFJEU19UQ1BcXG5uZXQvcmRzL0tjb25maWctMTgtXFx0dHJpc3RhdGUgXFxcIlJEUyBvdmVyIFRDUFxcXCJcXG4tLVxcbm5ldC9yZHMvS2NvbmZpZy0yNC1cXG5uZXQvcmRzL0tjb25maWc6MjU6Y29uZmlnIFJEU19ERUJVR1xcbm5ldC9yZHMvS2NvbmZpZy0yNi1cXHRib29sIFxcXCJSRFMgZGVidWdnaW5nIG1lc3NhZ2VzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQwMDoyNjo1NS40NDgyNDEyNloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTk2MDkwOTAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIFJEUyBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIHNvIHdlJ3JlIGRlYWxpbmcgd2l0aCBgUkRTYCBhbmQgYFJEU19UQ1BgIGNvbmZpZ3VyYXRpb25zLiBNeSBmaXJzdCBpbnN0aW5jdCwgYXMgYWx3YXlzLCBpcyB0byBkaXZlIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZpbGVzLiBTcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBhYm91dCB0aGUgZGVwZW5kZW5jeSByZWxhdGlvbnNoaXBzLiBXaGVyZSBkbyB0aGVzZSBgUkRTYCBvcHRpb25zIGZpdCB3aXRoaW4gdGhlIGJyb2FkZXIga2VybmVsIGNvbmZpZ3VyYXRpb24gbGFuZHNjYXBlPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IG90aGVyIGZlYXR1cmVzIG9yIG1vZHVsZXMgdGhleSByZWx5IG9uLiBMZXQncyBzdGFydCB3aXRoIGBuZXQvcmRzL0tjb25maWdgLiBUaGF0J3MgdGhlIG9idmlvdXMgcGxhY2UgdG8gZmluZCB0aGUgYW5zd2Vycy4gRnJvbSB0aGVyZSwgSSBjYW4gZGV0ZXJtaW5lIGlmIGFueSBwcmUtcmVxdWlzaXRlcyBhcmUgZW5hYmxlZCBmb3IgYFJEU2AgYW5kIGBSRFNfVENQYC4gSXQncyBhbGwgYWJvdXQgZW5zdXJpbmcgdGhhdCBub3RoaW5nIGlzIGJyb2tlbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEwMzYsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQwMDoyNjo1OC40NDQzMzQ1NjFaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTkxNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3Jkcy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0XFxuICAgMzpcXHRjb25maWcgUkRTXFxuICAgNDpcXHRcXHR0cmlzdGF0ZSBcXFwiVGhlIFJlbGlhYmxlIERhdGFncmFtIFNvY2tldHMgUHJvdG9jb2xcXFwiXFxuICAgNTpcXHRcXHRkZXBlbmRzIG9uIElORVRcXG4gICA2OlxcdFxcdGhlbHBcXG4gICA3OlxcdFxcdCAgVGhlIFJEUyAoUmVsaWFibGUgRGF0YWdyYW0gU29ja2V0cykgcHJvdG9jb2wgcHJvdmlkZXMgcmVsaWFibGUsXFxuICAgODpcXHRcXHQgIHNlcXVlbmNlZCBkZWxpdmVyeSBvZiBkYXRhZ3JhbXMgb3ZlciBJbmZpbmliYW5kIG9yIFRDUC5cXG4gICA5OlxcdFxcbiAgMTA6XFx0Y29uZmlnIFJEU19SRE1BXFxuICAxMTpcXHRcXHR0cmlzdGF0ZSBcXFwiUkRTIG92ZXIgSW5maW5pYmFuZFxcXCJcXG4gIDEyOlxcdFxcdGRlcGVuZHMgb24gUkRTIFxcdTAwMjZcXHUwMDI2IElORklOSUJBTkQgXFx1MDAyNlxcdTAwMjYgSU5GSU5JQkFORF9BRERSX1RSQU5TXFxuICAxMzpcXHRcXHRoZWxwXFxuICAxNDpcXHRcXHQgIEFsbG93IFJEUyB0byB1c2UgSW5maW5pYmFuZCBhcyBhIHRyYW5zcG9ydC5cXG4gIDE1OlxcdFxcdCAgVGhpcyB0cmFuc3BvcnQgc3VwcG9ydHMgUkRNQSBvcGVyYXRpb25zLlxcbiAgMTY6XFx0XFxuICAxNzpcXHRjb25maWcgUkRTX1RDUFxcbiAgMTg6XFx0XFx0dHJpc3RhdGUgXFxcIlJEUyBvdmVyIFRDUFxcXCJcXG4gIDE5OlxcdFxcdGRlcGVuZHMgb24gUkRTXFxuICAyMDpcXHRcXHRkZXBlbmRzIG9uIElQVjYgfHwgIUlQVjZcXG4gIDIxOlxcdFxcdGhlbHBcXG4gIDIyOlxcdFxcdCAgQWxsb3cgUkRTIHRvIHVzZSBUQ1AgYXMgYSB0cmFuc3BvcnQuXFxuICAyMzpcXHRcXHQgIFRoaXMgdHJhbnNwb3J0IGRvZXMgbm90IHN1cHBvcnQgUkRNQSBvcGVyYXRpb25zLlxcbiAgMjQ6XFx0XFxuICAyNTpcXHRjb25maWcgUkRTX0RFQlVHXFxuICAyNjpcXHRcXHRib29sIFxcXCJSRFMgZGVidWdnaW5nIG1lc3NhZ2VzXFxcIlxcbiAgMjc6XFx0XFx0ZGVwZW5kcyBvbiBSRFNcXG4gIDI4OlxcdFxcdGRlZmF1bHQgblxcbiAgMjk6XFx0XFxuICAzMDpcXHRjb25maWcgR0NPVl9QUk9GSUxFX1JEU1xcbiAgMzE6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIEdDT1YgcHJvZmlsaW5nIG9uIFJEU1xcXCJcXG4gIDMyOlxcdFxcdGRlcGVuZHMgb24gR0NPVl9LRVJORUxcXG4gIDMzOlxcdFxcdGhlbHBcXG4gIDM0OlxcdFxcdCAgRW5hYmxlIEdDT1YgcHJvZmlsaW5nIG9uIFJEUyBmb3IgY2hlY2tpbmcgd2hpY2ggZnVuY3Rpb25zL2xpbmVzXFxuICAzNTpcXHRcXHQgIGFyZSBleGVjdXRlZC5cXG4gIDM2OlxcdFxcbiAgMzc6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQwMDoyNjo1OC40NDQzOTUwMDFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDk4NjUxODMxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBUaG91Z2h0IFByb2Nlc3Mgb24gUkRTIENvbmZpZ3VyYXRpb24gYW5kIFJlbGV2YW50IEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIFJEUyBjb25maWd1cmF0aW9ucywgYFJEU2AgYW5kIGBSRFNfVENQYCwgd2l0aCBgSU5FVGAgdXN1YWxseSBlbmFibGVkLiBJJ3ZlIGdvdCBhIGZldyBmb2N1cyBzeW1ib2xzIHRvIGNvbnNpZGVyOiBgcmRzX3NlbmRfeG1pdGAsIGByZHNfdGNwX3Jlc2V0X2NhbGxiYWNrc2AsIGFuZCBgcmRzX2Nvbm5fc2h1dGRvd25gLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55IG90aGVyIHBvdGVudGlhbGx5IHVzZWZ1bCBmdW5jdGlvbnMgaW4gdGhpcyBhcmVhLlxuXG5gcmRzX2Nvbm5fcGF0aF9yZXNldGAgbG9va3MgcHJvbWlzaW5nLCBidXQgaXQgbWlnaHQgYmUgaW5saW5lZCBvciBzdGF0aWMsIHNvIHRoYXQncyBhIHBvdGVudGlhbCBpc3N1ZS4gYHJkc19jb25uX3NodXRkb3duYCBpcyBwcm9iYWJseSBhIHN0cm9uZ2VyIGJldC4gQW5kLCBJIHNlZSBgcmVsZWFzZV9pbl94bWl0YCBpcyBzdGF0aWMsIHdoaWNoIGlzIG5vdCB3aGF0IEkgbmVlZC4gQWgsIGByZHNfc2VuZF94bWl0YCBzdGlsbCBzZWVtcyBsaWtlIGEgZ29vZCB0YXJnZXQuXG5cbldhaXQgYSBzZWNvbmQsIGByZHNfdGNwX3Jlc2V0X2NhbGxiYWNrc2Ag4oCTIHRoYXQncyBpbiBgbmV0L3Jkcy90Y3AuY2AuIExldCBtZSBxdWlja2x5IGNvbmZpcm0gaWYgdGhhdCBmdW5jdGlvbiBpcyBleHBvcnRlZCBvciBpZiBpdCdzIHN0YXRpYy4gTm9wZSwgaXQncyBub3Qgc3RhdGljLCB3aGljaCBpcyBhIGdvb2Qgc2lnbi4gTWF5YmUgYHJkc190Y3BfYWNjZXB0X29uZWAgaXMgYW4gZXZlbiBiZXR0ZXIgY2FuZGlkYXRlPyBJIHNlZSB0aGF0IGByZHNfdGNwX2FjY2VwdF9vbmVgICpjYWxscyogYHJkc190Y3BfcmVzZXRfY2FsbGJhY2tzYC4gTm93IEkgc2hvdWxkIGNoZWNrIHRoZSBjYWxsZXJzIG9mIGByZHNfdGNwX2FjY2VwdF9vbmVgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTcxMSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDAwOjI3OjAzLjQzMDkxNTc5N1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY4MTYyMTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmRzX3RjcF9hY2NlcHRfb25lXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9yZHMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9yZHMvcmRzLmg9NTQwPXN0cnVjdCByZHNfdHJhbnNwb3J0IHtcXG4tLVxcbm5ldC9yZHMvcmRzLmgtNTU0LVxcdCAqIGNvbm5fc2xvdHNfYXZhaWxhYmxlIGlzIGludm9rZWQgd2hlbiBhIHByZXZpb3VzbHkgdW5hdmFpbGFibGVcXG5uZXQvcmRzL3Jkcy5oOjU1NTpcXHQgKiBjb25uZWN0aW9uIHNsb3QgYmVjb21lcyBhdmFpbGFibGUgYWdhaW4uIHJkc190Y3BfYWNjZXB0X29uZV9wYXRoIG1heVxcbm5ldC9yZHMvcmRzLmgtNTU2LVxcdCAqIHJldHVybiAtRU5PQlVGUyBpZiBpdCBjYW5ub3QgZmluZCBhbiBhdmFpbGFibGUgc2xvdCwgYW5kIHRoZW4gc3Rhc2hlc1xcbm5ldC9yZHMvcmRzLmgtNTU3LVxcdCAqIHRoZSBuZXcgc29ja2V0IGluIFxcXCJyZHNfdGNwX2FjY2VwdGVkX3NvY2tcXFwiLiBUaGlzIGZ1bmN0aW9uIHJlLWlzc3Vlc1xcbm5ldC9yZHMvcmRzLmg6NTU4OlxcdCAqIGByZHNfdGNwX2FjY2VwdF9vbmVfcGF0aGAsIHdoaWNoIHBpY2tzIHVwIHRoZSBzdGFzaGVkIHNvY2tldCBhbmRcXG5uZXQvcmRzL3Jkcy5oLTU1OS1cXHQgKiBjb250aW51aW5nIHdoZXJlIGl0IGxlZnQgd2l0aCBcXFwiLUVOT0JVRlNcXFwiIGxhc3QgdGltZS4gIFRoaXMgZW5zdXJlc1xcbi0tXFxubmV0L3Jkcy90Y3AuYz01NzQ9c3RhdGljIHZvaWQgcmRzX3RjcF9hY2NlcHRfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbm5ldC9yZHMvdGNwLmMtNTc5LVxcbm5ldC9yZHMvdGNwLmM6NTgwOlxcdHdoaWxlIChyZHNfdGNwX2FjY2VwdF9vbmUocnRuKSA9PSAwKVxcbm5ldC9yZHMvdGNwLmMtNTgxLVxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbi0tXFxubmV0L3Jkcy90Y3AuaD04PXN0cnVjdCByZHNfdGNwX25ldCB7XFxubmV0L3Jkcy90Y3AuaDo5OlxcdC8qIHNlcmlhbGl6ZSBcXFwicmRzX3RjcF9hY2NlcHRfb25lXFxcIiB3aXRoIFxcXCJyZHNfdGNwX2FjY2VwdF9sb2NrXFxcIlxcbm5ldC9yZHMvdGNwLmgtMTAtXFx0ICogdG8gcHJvdGVjdCBcXFwicmRzX3RjcF9hY2NlcHRlZF9zb2NrXFxcIlxcbi0tXFxubmV0L3Jkcy90Y3AuaD0yNz1zdHJ1Y3QgcmRzX3RjcF9jb25uZWN0aW9uIHtcXG4tLVxcbm5ldC9yZHMvdGNwLmgtMzItXFx0LyogdF9jb25uX3BhdGhfbG9jayBzeW5jaHJvbml6ZXMgdGhlIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCBiZXR3ZWVuXFxubmV0L3Jkcy90Y3AuaDozMzpcXHQgKiByZHNfdGNwX2FjY2VwdF9vbmUgYW5kIHJkc190Y3BfY29ubl9wYXRoX2Nvbm5lY3RcXG5uZXQvcmRzL3RjcC5oLTM0LVxcdCAqL1xcbi0tXFxubmV0L3Jkcy90Y3AuaD05Mz12b2lkIHJkc190Y3BfY29ubl9zbG90c19hdmFpbGFibGUoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCBib29sIGZhbl9vdXQpO1xcbm5ldC9yZHMvdGNwLmg6OTQ6aW50IHJkc190Y3BfYWNjZXB0X29uZShzdHJ1Y3QgcmRzX3RjcF9uZXQgKnJ0bik7XFxubmV0L3Jkcy90Y3AuaC05NS12b2lkIHJkc190Y3Bfa2VlcGFsaXZlKHN0cnVjdCBzb2NrZXQgKnNvY2spO1xcbi0tXFxubmV0L3Jkcy90Y3BfbGlzdGVuLmM9NjA9cmRzX3RjcF9nZXRfcGVlcl9zcG9ydChzdHJ1Y3Qgc29ja2V0ICpzb2NrKVxcbi0tXFxubmV0L3Jkcy90Y3BfbGlzdGVuLmMtNjktXFxubmV0L3Jkcy90Y3BfbGlzdGVuLmM6NzA6LyogcmRzX3RjcF9hY2NlcHRfb25lX3BhdGgoKTogaWYgYWNjZXB0aW5nIG9uIGNwX2luZGV4IFxcdTAwM2UgMCwgbWFrZSBzdXJlIHRoZVxcbm5ldC9yZHMvdGNwX2xpc3Rlbi5jLTcxLSAqIGNsaWVudCdzIGlwYWRkciBcXHUwMDNjIHNlcnZlcidzIGlwYWRkci4gT3RoZXJ3aXNlLCBjbG9zZSB0aGUgYWNjZXB0ZWRcXG4tLVxcbm5ldC9yZHMvdGNwX2xpc3Rlbi5jPTc2PXN0YXRpYyBzdHJ1Y3QgcmRzX3RjcF9jb25uZWN0aW9uICpcXG5uZXQvcmRzL3RjcF9saXN0ZW4uYzo3NzpyZHNfdGNwX2FjY2VwdF9vbmVfcGF0aChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIHN0cnVjdCBzb2NrZXQgKnNvY2spXFxubmV0L3Jkcy90Y3BfbGlzdGVuLmMtNzgte1xcbi0tXFxubmV0L3Jkcy90Y3BfbGlzdGVuLmM9MTA4PXZvaWQgcmRzX3RjcF9jb25uX3Nsb3RzX2F2YWlsYWJsZShzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIGJvb2wgZmFuX291dClcXG4tLVxcbm5ldC9yZHMvdGNwX2xpc3Rlbi5jLTEzOC1cXHQvKiBBcyBzb29uIGFzIGEgY29ubmVjdGlvbiB3ZW50IGRvd24sXFxubmV0L3Jkcy90Y3BfbGlzdGVuLmM6MTM5OlxcdCAqIGl0IGlzIHNhZmUgdG8gc2NoZWR1bGUgYSBcXFwicmRzX3RjcF9hY2NlcHRfb25lXFxcIlxcbm5ldC9yZHMvdGNwX2xpc3Rlbi5jLTE0MC1cXHQgKiBhdHRlbXB0IGV2ZW4gaWYgdGhlcmUgYXJlIG5vIGNvbm5lY3Rpb25zIHBlbmRpbmc6XFxubmV0L3Jkcy90Y3BfbGlzdGVuLmM6MTQxOlxcdCAqIEZ1bmN0aW9uIFxcXCJyZHNfdGNwX2FjY2VwdF9vbmVcXFwiIHdvbid0IGJsb2NrXFxubmV0L3Jkcy90Y3BfbGlzdGVuLmMtMTQyLVxcdCAqIGJ1dCBzaW1wbHkgcmV0dXJuIC1FQUdBSU4gaW4gdGhhdCBjYXNlLlxcbi0tXFxubmV0L3Jkcy90Y3BfbGlzdGVuLmMtMTQ2LVxcdCAqIHRvIGJlIGFjY2VwdGVkIHByaW9yIHRvIGEgZnJlZSBzbG90IGJlaW5nIGF2YWlsYWJsZTpcXG5uZXQvcmRzL3RjcF9saXN0ZW4uYzoxNDc6XFx0ICogdGhlIC1FTk9CVUZTIGNhc2UgaW4gXFxcInJkc190Y3BfYWNjZXB0X29uZVxcXCIuXFxubmV0L3Jkcy90Y3BfbGlzdGVuLmMtMTQ4LVxcdCAqL1xcbi0tXFxubmV0L3Jkcy90Y3BfbGlzdGVuLmMtMTUxLVxcbm5ldC9yZHMvdGNwX2xpc3Rlbi5jOjE1MjppbnQgcmRzX3RjcF9hY2NlcHRfb25lKHN0cnVjdCByZHNfdGNwX25ldCAqcnRuKVxcbm5ldC9yZHMvdGNwX2xpc3Rlbi5jLTE1My17XFxuLS1cXG5uZXQvcmRzL3RjcF9saXN0ZW4uYy0yNDYtXFx0XFx0ICovXFxubmV0L3Jkcy90Y3BfbGlzdGVuLmM6MjQ3OlxcdFxcdHJzX3RjcCA9IHJkc190Y3BfYWNjZXB0X29uZV9wYXRoKGNvbm4sIG5ld19zb2NrKTtcXG5uZXQvcmRzL3RjcF9saXN0ZW4uYy0yNDgtXFx0XFx0aWYgKCFyc190Y3ApIHtcXG4tLVxcbm5ldC9yZHMvdGNwX2xpc3Rlbi5jLTI1MC1cXHRcXHRcXHQgKiBcXFwicmRzX3RjcF9jb25uX3Nsb3RzX2F2YWlsYWJsZVxcXCIgdHJpZ2dlcnNcXG5uZXQvcmRzL3RjcF9saXN0ZW4uYzoyNTE6XFx0XFx0XFx0ICogXFxcInJkc190Y3BfYWNjZXB0X29uZVxcXCIgYWdhaW4gYXMgc29vbiBhcyBvbmUgb2YgdGhlXFxubmV0L3Jkcy90Y3BfbGlzdGVuLmMtMjUyLVxcdFxcdFxcdCAqIGNvbm5lY3Rpb24gc2xvdHMgYmVjb21lcyBhdmFpbGFibGUgYWdhaW5cXG4tLVxcbm5ldC9yZHMvdGNwX2xpc3Rlbi5jLTI5NS1cXHRpZiAocnNfdGNwLVxcdTAwM2V0X3NvY2spIHtcXG5uZXQvcmRzL3RjcF9saXN0ZW4uYzoyOTY6XFx0XFx0LyogRHVlbGxpbmcgU1lOIGhhcyBiZWVuIGhhbmRsZWQgaW4gcmRzX3RjcF9hY2NlcHRfb25lKCkgKi9cXG5uZXQvcmRzL3RjcF9saXN0ZW4uYy0yOTctXFx0XFx0cmRzX3RjcF9yZXNldF9jYWxsYmFja3MobmV3X3NvY2ssIGNwKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDA6Mjc6MDMuNDc3NzM5MzMzWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4NDQzMjk5NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUkRTIENvbm5lY3Rpb24gU2h1dGRvd24gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBgcmRzX3RjcF9yZXNldF9jYWxsYmFja3NgIGlzIGxvb2tpbmcgZ29vZCDigJMgbm8gaW1tZWRpYXRlIHJlZCBmbGFncyB0aGVyZS4gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IHRoZSBjb25maWd1cmF0aW9ucyB3ZSdyZSBkZWFsaW5nIHdpdGggYXJlIGNlbnRlcmVkIGFyb3VuZCBgUkRTYCBhbmQgYFJEU19UQ1BgLiBGcm9tIHdoYXQgSSdtIHNlZWluZywgdGhlIGNvcmUgZWxlbWVudHMgaGVyZSBhcmUgcmVhbGx5IHJldm9sdmluZyBhcm91bmQgYHJkc19zZW5kX3htaXRgLCBgcmRzX3RjcF9yZXNldF9jYWxsYmFja3NgLCBhbmQgYHJkc19jb25uX3NodXRkb3duYC5cblxuVGhlIGNydXggb2YgdGhpcyBwYXRjaCBzZWVtcyB0byBhZGRyZXNzIGEgcHJldHR5IG5hc3R5IHJhY2UgY29uZGl0aW9uIHdpdGhpbiB0aGUgUkRTIGNvbm5lY3Rpb24gc2h1dGRvd24gYW5kIHJlc2V0IHNlcXVlbmNlLiBJdCBzb3VuZHMgbGlrZSB0aGVyZSB3YXMgYSBwb3RlbnRpYWwgZm9yIHRoZSBgUkRTX0lOX1hNSVRgIGFuZCBgUkRTX1JFQ1ZfUkVGSUxMYCBmbGFncyB0byBnZXQgY29ycnVwdGVkIG9yLCB3b3JzZSwgcmUtYWNxdWlyZWQgc2ltdWx0YW5lb3VzbHksIHdoaWNoIGlzIG9idmlvdXNseSBhIHByb2JsZW0uIFRoZSBmaXg/IFVzaW5nIGB0ZXN0X2FuZF9zZXRfYml0X2xvY2tgIHRvIGVuc3VyZSB0aGF0IHRoZSB0cmFuc21pdCBhbmQgcmVjZWl2ZSBwYXRocyBhcmUgcHJvcGVybHkgXCJxdWllc2NlZFwiIOKAkyB0aGF0J3MgYSBzbWFydCBhcHByb2FjaC4gQWxzbywgdGhlIHV0aWxpemF0aW9uIG9mIGB3cV9oYXNfc2xlZXBlcmAgdG8gZ3VhcmFudGVlIGEgZnVsbCBtZW1vcnkgYmFycmllciB3aGVuIHdlJ3JlIGNoZWNraW5nIHRoZSB3YWl0IHF1ZXVlIGlzIGNydWNpYWwgZm9yIHByZXZlbnRpbmcgdGhvc2Ugc3VidGxlIG1lbW9yeS1yZWxhdGVkIGlzc3Vlcy5cblxuVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBkaWdnaW5nIGRlZXAgaW50byB0aGUgY29yZSBSRFMgbmV0d29ya2luZyBsb2dpYy4gSXQncyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBhbmQgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1enppbmcgdG8gc2hha2Ugb3V0IGFueSByZW1haW5pbmcgaXNzdWVzLiBJJ2xsIHVzZSBgc2V0LXJlc3VsdHNgIHRvIHRyYWNrIG15IHdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNjM4LCJPdXRwdXRUb2tlbnMiOjE2NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQwMDoyNzowOC4zMjIwNzE5NzRaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjA5OTY5MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUkRTXCIsXG4gICAgXCJSRFNfVENQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicmRzX3NlbmRfeG1pdFwiLFxuICAgIFwicmRzX3RjcF9yZXNldF9jYWxsYmFja3NcIixcbiAgICBcInJkc19jb25uX3NodXRkb3duXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBkdXJpbmcgUkRTIGNvbm5lY3Rpb24gc2h1dGRvd24gYW5kIHJlc2V0LCB3aGVyZSB0aGUgUkRTX0lOX1hNSVQgYW5kIFJEU19SRUNWX1JFRklMTCBmbGFncyBjb3VsZCBiZSBjbG9iYmVyZWQgb3IgcmUtYWNxdWlyZWQgY29uY3VycmVudGx5LiBJdCB1c2VzIHRlc3RfYW5kX3NldF9iaXRfbG9jayB0byBwcm9wZXJseSBxdWllc2NlIHRoZSB0cmFuc21pdCBhbmQgcmVjZWl2ZSBwYXRocywgYW5kIHdxX2hhc19zbGVlcGVyIHRvIGVuc3VyZSBhIGZ1bGwgbWVtb3J5IGJhcnJpZXIgd2hlbiBjaGVja2luZyB0aGUgd2FpdCBxdWV1ZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIFJEUyBuZXR3b3JraW5nIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlJEU1wiLFxuICAgIFwiUkRTX1RDUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJkc19zZW5kX3htaXRcIixcbiAgICBcInJkc190Y3BfcmVzZXRfY2FsbGJhY2tzXCIsXG4gICAgXCJyZHNfY29ubl9zaHV0ZG93blwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gZHVyaW5nIFJEUyBjb25uZWN0aW9uIHNodXRkb3duIGFuZCByZXNldCwgd2hlcmUgdGhlIFJEU19JTl9YTUlUIGFuZCBSRFNfUkVDVl9SRUZJTEwgZmxhZ3MgY291bGQgYmUgY2xvYmJlcmVkIG9yIHJlLWFjcXVpcmVkIGNvbmN1cnJlbnRseS4gSXQgdXNlcyB0ZXN0X2FuZF9zZXRfYml0X2xvY2sgdG8gcHJvcGVybHkgcXVpZXNjZSB0aGUgdHJhbnNtaXQgYW5kIHJlY2VpdmUgcGF0aHMsIGFuZCB3cV9oYXNfc2xlZXBlciB0byBlbnN1cmUgYSBmdWxsIG1lbW9yeSBiYXJyaWVyIHdoZW4gY2hlY2tpbmcgdGhlIHdhaXQgcXVldWUuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBSRFMgbmV0d29ya2luZyBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDA6Mjc6MDguMzk4MTc3MjM2WiIsIlNlcSI6MjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NzgwODU4OTEzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDA6Mjc6MDguMzk4NzEyNjI2WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjg3ODAzMTk4NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiS01TQU4gaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGRldGVjdCB1c2VzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlLiBUaGlzIHBhdGNoIGZvY3VzZXMgZW50aXJlbHkgb24gZml4aW5nIGNvbmN1cnJlbmN5IGFuZCBzeW5jaHJvbml6YXRpb24gaXNzdWVzIHdpdGhpbiB0aGUgUkRTIHN1YnN5c3RlbS4gSXQgcmVwbGFjZXMgbm9uLWF0b21pYyBiaXQgY2xlYXJzIHdpdGggYXRvbWljIG9wZXJhdGlvbnMsIHVzZXMgYml0IGxvY2tzIChgdGVzdF9hbmRfc2V0X2JpdF9sb2NrYCkgdG8gcHJvcGVybHkgcXVpZXNjZSB0cmFuc21pdCBhbmQgcmVjZWl2ZSBwYXRocywgYW5kIGFkZHMgbWVtb3J5IGJhcnJpZXJzIChgd3FfaGFzX3NsZWVwZXJgKSB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9ucyBhbmQgbG9zdCB3YWtlLXVwcy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBtb2RpZnkgbWVtb3J5IGFsbG9jYXRpb25zLCBvciBhbHRlciBkYXRhIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIHNlbnQgb3ZlciB0aGUgbmV0d29yay4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgZXhwb3NlZCBieSB0aGVzZSBjaGFuZ2VzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIGJlIGNvbmN1cnJlbmN5IGlzc3VlcywgcmFjZSBjb25kaXRpb25zLCBvciBkZWFkbG9ja3MsIHdoaWNoIGFyZSBiZXN0IGNhdWdodCBieSBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIGxpa2UgS0FTQU4sIEtDU0FOLCBhbmQgTE9DS0RFUC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiZTgyYWZiNjljZGUxYjVlNDQzZjAzZTdmZjIyN2I5NmZiZjUzZjE1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBBdWcgMTYgMDA6MjY6MzEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvcmRzL2Nvbm5lY3Rpb24uYyBiL25ldC9yZHMvY29ubmVjdGlvbi5jXG5pbmRleCA3YzhhYjhlOTczZTFiLi5hMTBiNjY3YzA2Yzg3IDEwMDY0NFxuLS0tIGEvbmV0L3Jkcy9jb25uZWN0aW9uLmNcbisrKyBiL25ldC9yZHMvY29ubmVjdGlvbi5jXG5AQCAtMTIwLDcgKzEyMCwxNSBAQCBzdGF0aWMgdm9pZCByZHNfY29ubl9wYXRoX3Jlc2V0KHN0cnVjdCByZHNfY29ubl9wYXRoICpjcClcbiBcbiBcdHJkc19zdGF0c19pbmMoc19jb25uX3Jlc2V0KTtcbiBcdHJkc19zZW5kX3BhdGhfcmVzZXQoY3ApO1xuLVx0Y3AtXHUwMDNlY3BfZmxhZ3MgPSAwO1xuK1xuK1x0LyogQ2xlYXIgdGhlIGJpdHMgdGhlIHJlc2V0IGlzIHJlc3BvbnNpYmxlIGZvciBpbmRpdmlkdWFsbHk6IGFcbitcdCAqIGJsYW5rZXQgY3BfZmxhZ3MgPSAwIGlzIGEgcGxhaW4gc3RvcmUgdGhhdCBjYW4gY2xvYmJlciBhXG4rXHQgKiBjb25jdXJyZW50IGF0b21pYyByZWFkLW1vZGlmeS13cml0ZSBvbiB0aGUgc2FtZSB3b3JkLlxuK1x0ICogUkRTX0lOX1hNSVQgYW5kIFJEU19SRUNWX1JFRklMTCBhcmUgb3duZWQgYnkgdGhlIGNhbGxlcixcbitcdCAqIHdoaWNoIHJlbGVhc2VzIHRoZW0gb25jZSB0aGUgdGVhcmRvd24gaXMgY29tcGxldGUuXG4rXHQgKi9cbitcdGNsZWFyX2JpdChSRFNfTExfU0VORF9GVUxMLCBcdTAwMjZjcC1cdTAwM2VjcF9mbGFncyk7XG4rXHRjbGVhcl9iaXQoUkRTX1JFQ09OTkVDVF9QRU5ESU5HLCBcdTAwMjZjcC1cdTAwM2VjcF9mbGFncyk7XG4gXG4gXHQvKiBEbyBub3QgY2xlYXIgbmV4dF9yeF9zZXEgaGVyZSwgZWxzZSB3ZSBjYW5ub3QgZGlzdGluZ3Vpc2hcbiBcdCAqIHJldHJhbnNtaXR0ZWQgcGFja2V0cyBmcm9tIG5ldyBwYWNrZXRzLCBhbmQgd2lsbCBoYW5kIGFsbFxuQEAgLTQwNiwxNCArNDE0LDMyIEBAIHZvaWQgcmRzX2Nvbm5fc2h1dGRvd24oc3RydWN0IHJkc19jb25uX3BhdGggKmNwKVxuIFx0XHR9XG4gXHRcdG11dGV4X3VubG9jayhcdTAwMjZjcC1cdTAwM2VjcF9jbV9sb2NrKTtcbiBcbitcdFx0LyogUXVpZXNjZSB0aGUgdHJhbnNtaXQgYW5kIHJlY2VpdmUtcmVmaWxsIHBhdGhzIGJ5XG4rXHRcdCAqIGFjcXVpcmluZyB0aGVpciBiaXQgbG9ja3MsIG5vdCBtZXJlbHkgd2FpdGluZyBmb3JcbitcdFx0ICogdGhlbSB0byBiZSByZWxlYXNlZDogd2l0aCBhIHBsYWluIHdhaXQsIGVpdGhlciBwYXRoXG4rXHRcdCAqIGNhbiByZS10YWtlIGl0cyBsb2NrIHRoZSBpbnN0YW50IGFmdGVyIHdlIHNhbXBsZSBpdFxuK1x0XHQgKiBjbGVhciBhbmQgdGhlbiBydW4gY29uY3VycmVudGx5IHdpdGggdGhlIHRyYW5zcG9ydFxuK1x0XHQgKiBzaHV0ZG93biBhbmQgdGhlIHBhdGggcmVzZXQgYmVsb3cuICBIb2xkaW5nIGJvdGhcbitcdFx0ICogbG9ja3MgYWNyb3NzIHRoZSB0ZWFyZG93biBtYWtlcyB0aGF0IHN0cnVjdHVyYWxseVxuK1x0XHQgKiBpbXBvc3NpYmxlLlxuK1x0XHQgKi9cbiBcdFx0d2FpdF9ldmVudChjcC1cdTAwM2VjcF93YWl0cSxcbi1cdFx0XHQgICAhdGVzdF9iaXQoUkRTX0lOX1hNSVQsIFx1MDAyNmNwLVx1MDAzZWNwX2ZsYWdzKSk7XG4rXHRcdFx0ICAgIXRlc3RfYW5kX3NldF9iaXRfbG9jayhSRFNfSU5fWE1JVCwgXHUwMDI2Y3AtXHUwMDNlY3BfZmxhZ3MpKTtcbiBcdFx0d2FpdF9ldmVudChjcC1cdTAwM2VjcF93YWl0cSxcbi1cdFx0XHQgICAhdGVzdF9iaXQoUkRTX1JFQ1ZfUkVGSUxMLCBcdTAwMjZjcC1cdTAwM2VjcF9mbGFncykpO1xuK1x0XHRcdCAgICF0ZXN0X2FuZF9zZXRfYml0KFJEU19SRUNWX1JFRklMTCwgXHUwMDI2Y3AtXHUwMDNlY3BfZmxhZ3MpKTtcbiBcbiBcdFx0Y29ubi1cdTAwM2VjX3RyYW5zLVx1MDAzZWNvbm5fcGF0aF9zaHV0ZG93bihjcCk7XG4gXHRcdHJkc19jb25uX3BhdGhfcmVzZXQoY3ApO1xuIFxuK1x0XHQvKiBSZWxlYXNlIHRoZSB0d28gbG9ja3MgYW5kIHdha2UgYW55IHdhaXRlciAoZS5nLlxuK1x0XHQgKiByZHNfdGNwX3Jlc2V0X2NhbGxiYWNrcygpKSB0aGF0IGJsb2NrZWQgb24gdGhlbSB3aGlsZVxuK1x0XHQgKiB3ZSBoZWxkIHRoZW0uICByZHNfY29ubl9wYXRoX3Jlc2V0KCkgbGVhdmVzIGJvdGggYml0c1xuK1x0XHQgKiBhbG9uZTogb3duZXJzaGlwIGVuZHMgaGVyZSwgbm90IGluc2lkZSB0aGUgcmVzZXQuXG4rXHRcdCAqL1xuK1x0XHRjbGVhcl9iaXRfdW5sb2NrKFJEU19JTl9YTUlULCBcdTAwMjZjcC1cdTAwM2VjcF9mbGFncyk7XG4rXHRcdGNsZWFyX2JpdChSRFNfUkVDVl9SRUZJTEwsIFx1MDAyNmNwLVx1MDAzZWNwX2ZsYWdzKTtcbitcdFx0d2FrZV91cF9hbGwoXHUwMDI2Y3AtXHUwMDNlY3Bfd2FpdHEpO1xuK1xuIFx0XHRpZiAoIXJkc19jb25uX3BhdGhfdHJhbnNpdGlvbihjcCwgUkRTX0NPTk5fRElTQ09OTkVDVElORyxcbiBcdFx0XHRcdFx0ICAgICAgUkRTX0NPTk5fRE9XTikgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICAhcmRzX2Nvbm5fcGF0aF90cmFuc2l0aW9uKGNwLCBSRFNfQ09OTl9FUlJPUixcbmRpZmYgLS1naXQgYS9uZXQvcmRzL3NlbmQuYyBiL25ldC9yZHMvc2VuZC5jXG5pbmRleCAxNWExYjk3ZjEzZTc2Li5iOTBlMDU4NmY4MThjIDEwMDY0NFxuLS0tIGEvbmV0L3Jkcy9zZW5kLmNcbisrKyBiL25ldC9yZHMvc2VuZC5jXG5AQCAtMTE0LDggKzExNCwxMyBAQCBzdGF0aWMgdm9pZCByZWxlYXNlX2luX3htaXQoc3RydWN0IHJkc19jb25uX3BhdGggKmNwKVxuIFx0ICogaG90IHBhdGggYW5kIGZpbmRpbmcgd2FpdGVycyBpcyB2ZXJ5IHJhcmUuICBXZSBkb24ndCB3YW50IHRvIHdhbGtcbiBcdCAqIHRoZSBzeXN0ZW0td2lkZSBoYXNoZWQgd2FpdHF1ZXVlIGJ1Y2tldHMgaW4gdGhlIGZhc3QgcGF0aCBvbmx5IHRvXG4gXHQgKiBhbG1vc3QgbmV2ZXIgZmluZCB3YWl0ZXJzLlxuK1x0ICpcbitcdCAqIHdxX2hhc19zbGVlcGVyKCkgc3VwcGxpZXMgdGhlIGZ1bGwgYmFycmllciB0aGF0IG9yZGVycyB0aGUgd2FpdFxuK1x0ICogcXVldWUgcmVhZCBhZnRlciB0aGUgYml0IGNsZWFyOyBjbGVhcl9iaXRfdW5sb2NrKCkgYWxvbmUgaXMgb25seVxuK1x0ICogYSByZWxlYXNlIGFuZCB3b3VsZCBsZXQgdGhpcyBjaGVjayByZWFkIGEgc3RhbGUgZW1wdHkgcXVldWUsXG4rXHQgKiBsb3NpbmcgdGhlIHdha2UtdXAuXG4gXHQgKi9cbi1cdGlmICh3YWl0cXVldWVfYWN0aXZlKFx1MDAyNmNwLVx1MDAzZWNwX3dhaXRxKSlcbitcdGlmICh3cV9oYXNfc2xlZXBlcihcdTAwMjZjcC1cdTAwM2VjcF93YWl0cSkpXG4gXHRcdHdha2VfdXBfYWxsKFx1MDAyNmNwLVx1MDAzZWNwX3dhaXRxKTtcbiB9XG4gXG5AQCAtMjM5LDggKzI0NCw5IEBAIGludCByZHNfc2VuZF94bWl0KHN0cnVjdCByZHNfY29ubl9wYXRoICpjcClcbiBcdFdSSVRFX09OQ0UoY3AtXHUwMDNlY3Bfc2VuZF9nZW4sIHNlbmRfZ2VuKTtcbiBcbiBcdC8qXG4tXHQgKiByZHNfY29ubl9zaHV0ZG93bigpIHNldHMgdGhlIGNvbm4gc3RhdGUgYW5kIHRoZW4gdGVzdHMgUkRTX0lOX1hNSVQsXG4tXHQgKiB3ZSBkbyB0aGUgb3Bwb3NpdGUgdG8gYXZvaWQgcmFjZXMuXG4rXHQgKiByZHNfY29ubl9zaHV0ZG93bigpIHNldHMgdGhlIGNvbm4gc3RhdGUgYW5kIHRoZW4gYWNxdWlyZXNcbitcdCAqIFJEU19JTl9YTUlUOyB3ZSB0YWtlIHRoZSBsb2NrIGZpcnN0IGFuZCB0aGVuIGNoZWNrIHRoZSBzdGF0ZSxcbitcdCAqIHNvIG9uZSBvZiB1cyBpcyBndWFyYW50ZWVkIHRvIHNlZSB0aGUgb3RoZXIncyB1cGRhdGUuXG4gXHQgKi9cbiBcdGlmICghcmRzX2Nvbm5fcGF0aF91cChjcCkpIHtcbiBcdFx0cmVsZWFzZV9pbl94bWl0KGNwKTtcbmRpZmYgLS1naXQgYS9uZXQvcmRzL3RjcC5jIGIvbmV0L3Jkcy90Y3AuY1xuaW5kZXggYjI2MzYzNGFjNzUwZC4uMWZmOWU4NDZkZmM3YyAxMDA2NDRcbi0tLSBhL25ldC9yZHMvdGNwLmNcbisrKyBiL25ldC9yZHMvdGNwLmNcbkBAIC0xMTUsNDUgKzExNSw2NiBAQCB2b2lkIHJkc190Y3BfcmVzdG9yZV9jYWxsYmFja3Moc3RydWN0IHNvY2tldCAqc29jayxcbiB9XG4gXG4gLypcbi0gKiByZHNfdGNwX3Jlc2V0X2NhbGxiYWNrcygpIHN3aXRjaGVzIHRoZSB0byB0aGUgbmV3IHNvY2sgYW5kXG4tICogcmV0dXJucyB0aGUgZXhpc3RpbmcgdGMtXHUwMDNldF9zb2NrLlxuKyAqIHJkc190Y3BfcmVzZXRfY2FsbGJhY2tzKCkgc3dpdGNoZXMgYSBwYXRoIHRvIGEgbmV3IHNvY2tldCBhbmRcbisgKiByZWxlYXNlcyB0aGUgb2xkIG9uZSBpdCBmaW5kcyBpbiB0Yy1cdTAwM2V0X3NvY2ssIHJlc29sdmluZyBhIGR1ZWxsaW5nXG4rICogU1lOLlxuICAqXG4tICogVGhlIG9ubHkgZnVuY3Rpb25zIHRoYXQgc2V0IHRjLVx1MDAzZXRfc29jayBhcmUgcmRzX3RjcF9zZXRfY2FsbGJhY2tzXG4tICogYW5kIHJkc190Y3BfcmVzZXRfY2FsbGJhY2tzLiAgU2VuZCBhbmQgcmVjZWl2ZSB0cnVzdCB0aGF0XG4tICogaXQgaXMgc2V0LiAgVGhlIGFic2VuY2Ugb2YgUkRTX0NPTk5fVVAgYml0IHByb3RlY3RzIHRob3NlIHBhdGhzXG4tICogZnJvbSBiZWluZyBjYWxsZWQgd2hpbGUgaXQgaXNuJ3Qgc2V0LlxuKyAqIHRjLVx1MDAzZXRfc29jayBpcyBzZXQgYnkgcmRzX3RjcF9zZXRfY2FsbGJhY2tzKCkgYW5kIGNsZWFyZWQgYnlcbisgKiByZHNfdGNwX3Jlc3RvcmVfY2FsbGJhY2tzKCksIGZyb20gcmRzX3RjcF9jb25uX3BhdGhfc2h1dGRvd24oKSBhbmRcbisgKiBmcm9tIGhlcmUuICBTZW5kIGFuZCByZWNlaXZlIHRydXN0IHRoYXQgaXQgaXMgc2V0OiB0aGUgYWJzZW5jZSBvZlxuKyAqIFJEU19DT05OX1VQIHByb3RlY3RzIHRob3NlIHBhdGhzIGZyb20gYmVpbmcgY2FsbGVkIHdoaWxlIGl0IGlzbid0LFxuKyAqIGFuZCB0aGUgc3dhcCBkb25lIGhlcmUgcnVucyB1bmRlciBSRFNfSU5fWE1JVCBzbyB0aGF0IGl0IGNhbm5vdFxuKyAqIGludGVybGVhdmUgd2l0aCBhIHNlbmRlciBhbHJlYWR5IGluc2lkZSByZHNfc2VuZF94bWl0KCkuXG4gICovXG4gdm9pZCByZHNfdGNwX3Jlc2V0X2NhbGxiYWNrcyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxuIFx0XHRcdCAgICAgc3RydWN0IHJkc19jb25uX3BhdGggKmNwKVxuIHtcbiBcdHN0cnVjdCByZHNfdGNwX2Nvbm5lY3Rpb24gKnRjID0gY3AtXHUwMDNlY3BfdHJhbnNwb3J0X2RhdGE7XG4tXHRzdHJ1Y3Qgc29ja2V0ICpvc29jayA9IHRjLVx1MDAzZXRfc29jaztcbi1cbi1cdGlmICghb3NvY2spXG4tXHRcdGdvdG8gbmV3c29jaztcbitcdHN0cnVjdCBzb2NrZXQgKm9zb2NrO1xuIFxuIFx0LyogTmVlZCB0byByZXNvbHZlIGEgZHVlbGxpbmcgU1lOIGJldHdlZW4gcGVlcnMuXG4gXHQgKiBXZSBoYXZlIGFuIG91dHN0YW5kaW5nIFNZTiB0byB0aGlzIHBlZXIsIHdoaWNoIG1heVxuIFx0ICogcG90ZW50aWFsbHkgaGF2ZSB0cmFuc2l0aW9uZWQgdG8gdGhlIFJEU19DT05OX1VQIHN0YXRlLFxuIFx0ICogc28gd2UgbXVzdCBxdWllc2NlIGFueSBzZW5kIHRocmVhZHMgYmVmb3JlIHJlc2V0dGluZ1xuLVx0ICogY3BfdHJhbnNwb3J0X2RhdGEuIFdlIHF1aWVzY2UgdGhlc2UgdGhyZWFkcyBieSBzZXR0aW5nXG4tXHQgKiBjcF9zdGF0ZSB0byBzb21ldGhpbmcgb3RoZXIgdGhhbiBSRFNfQ09OTl9VUCwgYW5kIHRoZW5cbi1cdCAqIHdhaXRpbmcgZm9yIGFueSBleGlzdGluZyB0aHJlYWRzIGluIHJkc19zZW5kX3htaXQgdG9cbi1cdCAqIGNvbXBsZXRlIHJlbGVhc2VfaW5feG1pdCgpLiAoU3Vic2VxdWVudCB0aHJlYWRzIGVudGVyaW5nXG4tXHQgKiByZHNfc2VuZF94bWl0KCkgd2lsbCBiYWlsIG9uICFyZHNfY29ubl91cCgpLlxuK1x0ICogY3BfdHJhbnNwb3J0X2RhdGEuICBTZXR0aW5nIGNwX3N0YXRlIHRvIHNvbWV0aGluZyBvdGhlclxuK1x0ICogdGhhbiBSRFNfQ09OTl9VUCBzdG9wcyBuZXcgc2VuZGVycywgYW5kIG93bmluZyBSRFNfSU5fWE1JVFxuK1x0ICogZXhjbHVkZXMgYW55IHRocmVhZCBhbHJlYWR5IGluc2lkZSByZHNfc2VuZF94bWl0KCkgZm9yIHRoZVxuK1x0ICogd2hvbGUgc29ja2V0IHN3YXAgYW5kIHRoZSByZHNfc2VuZF9wYXRoX3Jlc2V0KCkgYmVsb3cuXG4gXHQgKlxuLVx0ICogSG93ZXZlciBhbiBpbmNvbWluZyBzeW4tYWNrIGF0IHRoaXMgcG9pbnQgd291bGQgZW5kIHVwXG4tXHQgKiBtYXJraW5nIHRoZSBjb25uIGFzIFJEU19DT05OX1VQLCBhbmQgd291bGQgYWdhaW4gcGVybWl0XG4tXHQgKiByZHNfc2VuZF94bWkoKSB0aHJlYWRzIHRocm91Z2gsIHNvIGlkZWFsbHkgd2Ugd291bGRcbi1cdCAqIHN5bmNocm9uaXplIG9uIFJEU19DT05OX1VQIGFmdGVyIGxvY2tfc29jaygpLCBidXQgY2Fubm90XG4tXHQgKiBkbyB0aGF0OiB3YWl0aW5nIG9uICFSRFNfSU5fWE1JVCBhZnRlciBsb2NrX3NvY2soKSBtYXlcbi1cdCAqIGVuZCB1cCBkZWFkbG9ja2luZyB3aXRoIHRjcF9zZW5kbXNnKCksIGFuZCB0aGUgUkRTX0lOX1hNSVRcbi1cdCAqIHdvdWxkIG5vdCBnZXQgc2V0LiBBcyBhIHJlc3VsdCwgd2Ugc2V0IGNfc3RhdGUgdG9cbi1cdCAqIFJEU19DT05OX1JFU0VUVFRJTkcsIHRvIGVuc3VyZSB0aGF0IHJkc190Y3Bfc3RhdGVfY2hhbmdlXG4tXHQgKiBjYW5ub3QgbWFyayByZHNfY29ubl9wYXRoX3VwKCkgaW4gdGhlIHdpbmRvdyBiZWZvcmUgbG9ja19zb2NrKClcbitcdCAqIEFuIGluY29taW5nIHN5bi1hY2sgYXQgdGhpcyBwb2ludCB3b3VsZCBlbmQgdXAgbWFya2luZyB0aGVcbitcdCAqIGNvbm4gYXMgUkRTX0NPTk5fVVAsIGFuZCB3b3VsZCBhZ2FpbiBwZXJtaXQgcmRzX3NlbmRfeG1pdCgpXG4rXHQgKiB0aHJlYWRzIHRocm91Z2gsIHNvIGlkZWFsbHkgd2Ugd291bGQgc3luY2hyb25pemUgb25cbitcdCAqIFJEU19DT05OX1VQIGFmdGVyIGxvY2tfc29jaygpLCBidXQgY2Fubm90IGRvIHRoYXQ6IGFjcXVpcmluZ1xuK1x0ICogUkRTX0lOX1hNSVQgYWZ0ZXIgbG9ja19zb2NrKCkgbWF5IGVuZCB1cCBkZWFkbG9ja2luZyB3aXRoXG4rXHQgKiB0Y3Bfc2VuZG1zZygpLCB3aGljaCB0YWtlcyB0aGUgc29ja2V0IGxvY2sgd2hpbGUgaG9sZGluZ1xuK1x0ICogUkRTX0lOX1hNSVQuICBBcyBhIHJlc3VsdCwgd2Ugc2V0IGNfc3RhdGUgdG9cbitcdCAqIFJEU19DT05OX1JFU0VUVElORywgdG8gZW5zdXJlIHRoYXQgcmRzX3RjcF9zdGF0ZV9jaGFuZ2VcbitcdCAqIGNhbm5vdCBtYXJrIHJkc19jb25uX3BhdGhfdXAoKSBpbiB0aGUgd2luZG93IGJlZm9yZVxuK1x0ICogbG9ja19zb2NrKCkuXG4rXHQgKlxuK1x0ICogT25seSBtYWtlIHRoYXQgdHJhbnNpdGlvbiBpZiB0aGUgcGF0aCBpcyBzdGlsbCBjb25uZWN0aW5nXG4rXHQgKiAob3IgYWxyZWFkeSByZXNldHRpbmcgZnJvbSBhbiBlYXJsaWVyIGR1ZWwpLCBzbyB0aGF0IGFcbitcdCAqIGNvbmN1cnJlbnQgc2h1dGRvd24ncyBSRFNfQ09OTl9FUlJPUi9SRFNfQ09OTl9ESVNDT05ORUNUSU5HXG4rXHQgKiBpcyBub3Qgb3ZlcndyaXR0ZW47IGEgcGF0aCBpbiBhbnkgb3RoZXIgc3RhdGUgaXMgZHJvcHBlZFxuK1x0ICogYW5kIGl0cyBwZW5kaW5nIHNodXRkb3duIHdpbnMuXG4rXHQgKi9cbitcdGlmICghcmRzX2Nvbm5fcGF0aF90cmFuc2l0aW9uKGNwLCBSRFNfQ09OTl9DT05ORUNUSU5HLFxuK1x0XHRcdFx0ICAgICAgUkRTX0NPTk5fUkVTRVRUSU5HKSBcdTAwMjZcdTAwMjZcbitcdCAgICAhcmRzX2Nvbm5fcGF0aF90cmFuc2l0aW9uKGNwLCBSRFNfQ09OTl9SRVNFVFRJTkcsXG4rXHRcdFx0XHQgICAgICBSRFNfQ09OTl9SRVNFVFRJTkcpKVxuK1x0XHRyZHNfY29ubl9wYXRoX2Ryb3AoY3AsIDApO1xuK1x0d2FpdF9ldmVudChjcC1cdTAwM2VjcF93YWl0cSxcbitcdFx0ICAgIXRlc3RfYW5kX3NldF9iaXRfbG9jayhSRFNfSU5fWE1JVCwgXHUwMDI2Y3AtXHUwMDNlY3BfZmxhZ3MpKTtcbitcbitcdC8qIFJlYWQgdF9zb2NrIG9ubHkgd2hpbGUgb3duaW5nIFJEU19JTl9YTUlULiAgVGhlIHRlYXJkb3duIGluXG4rXHQgKiByZHNfY29ubl9zaHV0ZG93bigpIHJlbGVhc2VzIHRoZSBvbGQgc29ja2V0IGFuZCBjbGVhcnNcbitcdCAqIHRfc29jaywgc28gYSBwb2ludGVyIHNhbXBsZWQgYmVmb3JlIHRoZSB3YWl0IGNhbiBiZSBzdGFsZVxuK1x0ICogYnkgdGhlIHRpbWUgd2Ugd2FrZSB1cC5cbiBcdCAqL1xuLVx0YXRvbWljX3NldChcdTAwMjZjcC1cdTAwM2VjcF9zdGF0ZSwgUkRTX0NPTk5fUkVTRVRUSU5HKTtcbi1cdHdhaXRfZXZlbnQoY3AtXHUwMDNlY3Bfd2FpdHEsICF0ZXN0X2JpdChSRFNfSU5fWE1JVCwgXHUwMDI2Y3AtXHUwMDNlY3BfZmxhZ3MpKTtcbitcdG9zb2NrID0gdGMtXHUwMDNldF9zb2NrO1xuK1x0aWYgKCFvc29jaylcbitcdFx0Z290byBuZXdzb2NrO1xuK1xuIFx0LyogcmVzZXQgcmVjZWl2ZSBzaWRlIHN0YXRlIGZvciByZHNfdGNwX2RhdGFfcmVjdigpIGZvciBvc29jayAgKi9cbiBcdGNhbmNlbF9kZWxheWVkX3dvcmtfc3luYyhcdTAwMjZjcC1cdTAwM2VjcF9zZW5kX3cpO1xuIFx0Y2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKFx1MDAyNmNwLVx1MDAzZWNwX3JlY3Zfdyk7XG5AQCAtMTcyLDYgKzE5Myw5IEBAIHZvaWQgcmRzX3RjcF9yZXNldF9jYWxsYmFja3Moc3RydWN0IHNvY2tldCAqc29jayxcbiBcdGxvY2tfc29jayhzb2NrLVx1MDAzZXNrKTtcbiBcdHJkc190Y3Bfc2V0X2NhbGxiYWNrcyhzb2NrLCBjcCk7XG4gXHRyZWxlYXNlX3NvY2soc29jay1cdTAwM2Vzayk7XG4rXG4rXHRjbGVhcl9iaXRfdW5sb2NrKFJEU19JTl9YTUlULCBcdTAwMjZjcC1cdTAwM2VjcF9mbGFncyk7XG4rXHR3YWtlX3VwX2FsbChcdTAwMjZjcC1cdTAwM2VjcF93YWl0cSk7XG4gfVxuIFxuIC8qIEFkZCB0YyB0byByZHNfdGNwX3RjX2xpc3QgYW5kIHNldCB0Yy1cdTAwM2V0X3NvY2suIFNlZSBjb21tZW50c1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDA6Mjc6MDguMzk4NzEzNDE2WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg3ODAyOTcwNzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUkRTIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBsb29rZWQgb3ZlciB0aGlzIHBhdGNoLiBJdCdzIHRvdWNoaW5nIGBuZXQvcmRzL2Nvbm5lY3Rpb24uY2AsIGBuZXQvcmRzL3NlbmQuY2AsIGFuZCBgbmV0L3Jkcy90Y3AuY2AsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBob3cgdGhlIGBjcC1cdTAwM2VjcF9mbGFnc2AgYml0IGZsYWdzIChsaWtlIGBSRFNfSU5fWE1JVGAsIGBSRFNfUkVDVl9SRUZJTExgLCBldGMuKSBhcmUgbWFuYWdlZC4gVGhlIGtleSBjaGFuZ2UgaXMgdGhlIHJlcGxhY2VtZW50IG9mIGJhc2ljIGJpdCBtYW5pcHVsYXRpb24gd2l0aCBhdG9taWMgb3BlcmF0aW9ucyB1c2luZyBgdGVzdF9hbmRfc2V0X2JpdF9sb2NrYCBhbmQgYGNsZWFyX2JpdF91bmxvY2tgLCBhbmQgdGhlIHN3YXAgb3V0IG9mIGB3YWl0cXVldWVfYWN0aXZlYCB3aXRoIGB3cV9oYXNfc2xlZXBlcmAgdG8gbWFrZSBzdXJlIG1lbW9yeSBiYXJyaWVycyBhcmUgd29ya2luZyBjb3JyZWN0bHkuIEFsc28sIGl0IHVwZGF0ZXMgYHJkc190Y3BfcmVzZXRfY2FsbGJhY2tzYCB0byBwcm9wZXJseSBoYW5kbGUgc29ja2V0IHN3YXBwaW5nIHdoZW4gYFJEU19JTl9YTUlUYCBpcyBhY3RpdmUuXG5cbkJhc2ljYWxseSwgdGhpcyBpcyBhbGwgYWJvdXQgZml4aW5nIGNvbmN1cnJlbmN5IHByb2JsZW1zIGluIHRoZSBSZWxpYWJsZSBEYXRhZ3JhbSBTb2NrZXRzIChSRFMpIHN1YnN5c3RlbS4gVGhpbmdzIGxpa2UgcmFjZSBjb25kaXRpb25zLCBwb3RlbnRpYWwgZGVhZGxvY2tzLCBhbmQgbWlzc2VkIHdha2UtdXBzIGFyZSB0aGUgdGFyZ2V0cyBoZXJlLiBJIGNhbiBzZWUgbm8gY2hhbmdlcyB0aGF0IGNyZWF0ZSBuZXcgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vIG5ldyBhbGxvY2F0aW9ucywgbm8gY2hhbmdlcyB0byBib3VuZHMgY2hlY2tzIG9yIGxlbmd0aHMgdGhhdCB3b3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFN0YW5kYXJkIHRlc3RpbmcsIEtBU0FOLCBvciBMT0NLREVQIOKAkyBlc3BlY2lhbGx5IGlmIHN0YW5kYXJkIGxvY2tzIHdlcmUgaW52b2x2ZWQgKGFsdGhvdWdoLCB0aGV5IGFyZSBiaXQgbG9ja3MgaGVyZSksIHdvdWxkIHBpY2sgdXAgb24gdGhlc2Ugc29ydHMgb2YgY29uY3VycmVuY3kgaXNzdWVzLlxuXG5TbywgZ2l2ZW4gdGhhdCwgSSdtIHByZXR0eSBjb25maWRlbnQgdGhhdCB0aGlzIHBhdGNoIGRvZXNuJ3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLlxuXG5MZXQncyBxdWlja2x5IHJlY2FwIHRoZSBrZXkgY2hhbmdlcyBhZ2FpbiB0byBjb25maXJtOlxuXG4qICAgYHJkc19jb25uX3BhdGhfcmVzZXRgIG5vdyBjbGVhcnMgc3BlY2lmaWMgYml0cyBpbnN0ZWFkIG9mIHdpcGluZyBgY3AtXHUwMDNlY3BfZmxhZ3NgIHRvIGF2b2lkIGNsb2JiZXJpbmcgY29uY3VycmVudCBhdG9taWMgcmVhZC1tb2RpZnktd3JpdGUuXG4qICAgYHJkc19jb25uX3NodXRkb3duYCB1c2VzIGB0ZXN0X2FuZF9zZXRfYml0X2xvY2tgIGFuZCBgdGVzdF9hbmRfc2V0X2JpdGAgdG8gcXVpZXNjZSB0cmFuc21pdCBhbmQgcmVjZWl2ZS1yZWZpbGwgcGF0aHMgcHJldmVudGluZyBjb25jdXJyZW5jeVxuKiAgIGByZWxlYXNlX2luX3htaXRgIG5vdyB1c2VzIGB3cV9oYXNfc2xlZXBlcmAgaW5zdGVhZCBvZiBgd2FpdHF1ZXVlX2FjdGl2ZWAsIHdoaWNoIHByb3ZpZGVzIGEgbWVtb3J5IGJhcnJpZXJcbiogICBgcmRzX3RjcF9yZXNldF9jYWxsYmFja3NgIHVzZXMgYHRlc3RfYW5kX3NldF9iaXRfbG9ja2AgdG8gYWNxdWlyZSBgUkRTX0lOX1hNSVRgIGJlZm9yZSByZWFkaW5nIGB0Yy1cdTAwM2V0X3NvY2tgIGFuZCBzd2FwcGluZyBzb2NrZXRzLlxuXG5BbGwgb2YgdGhlc2UgYXJlIHN0cmljdGx5IHJlbGF0ZWQgdG8gc3luY2hyb25pemF0aW9uIGFuZCBjb25jdXJyZW5jeSDigJMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgaW4gdGhlIHBpY3R1cmUgaGVyZS5cblxuVGhlcmVmb3JlLCBteSBLTVNBTlJlYXNvbmluZyBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBLTVNBTiBpcyB0aGVyZSB0byBjYXRjaCB1c2VzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGlzIHBhdGNoIGZvY3VzZXMgZW50aXJlbHkgb24gdGhlIHN5bmNocm9uaXphdGlvbiBhbmQgY29uY3VycmVuY3kgcHJvYmxlbXMgaW4gdGhlIFJEUyBzdWJzeXN0ZW0sIHN1Y2ggYXMgcmVwbGFjaW5nIG5vbi1hdG9taWMgYml0IGNsZWFycyB3aXRoIGF0b21pYyBvbmVzLCBjb3JyZWN0bHkgcXVpZXNjaW5nIHRyYW5zbWl0L3JlY2VpdmUgcGF0aHMgdXNpbmcgYml0IGxvY2tzLCBhbmQgYWRkaW5nIG1lbW9yeSBiYXJyaWVycyBmb3Igd2FpdCBxdWV1ZXMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcywgbW9kaWZ5IG1lbW9yeSBhbGxvY2F0aW9ucywgb3IgYWx0ZXIgZGF0YSBiZWluZyBjb3BpZWQgdG8gdXNlciBzcGFjZS4gSGVuY2UsIHRoZXJlIGlzIGFic29sdXRlbHkgbm8gcG9zc2liaWxpdHkgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIGFuZCBLQVNBTi9MT0NLREVQIHdpbGwgY2F0Y2ggYW55IG1lbW9yeSBjb3JydXB0aW9uIG9yIGxvY2tpbmcgaXNzdWVzIGluIHRoaXMgY29udGV4dC4gSSB3aWxsIG1hcmsgTmVlZHNLTVNBTiBhcyBmYWxzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDc2OCwiT3V0cHV0VG9rZW5zIjoyMDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MjMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQwMDoyNzoxNy4xNzkwMTM4NDlaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjkwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiS01TQU4gaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGRldGVjdCB1c2VzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlLiBUaGlzIHBhdGNoIGZvY3VzZXMgZW50aXJlbHkgb24gZml4aW5nIGNvbmN1cnJlbmN5IGFuZCBzeW5jaHJvbml6YXRpb24gaXNzdWVzIHdpdGhpbiB0aGUgUkRTIHN1YnN5c3RlbS4gSXQgcmVwbGFjZXMgbm9uLWF0b21pYyBiaXQgY2xlYXJzIHdpdGggYXRvbWljIG9wZXJhdGlvbnMsIHVzZXMgYml0IGxvY2tzIChgdGVzdF9hbmRfc2V0X2JpdF9sb2NrYCkgdG8gcHJvcGVybHkgcXVpZXNjZSB0cmFuc21pdCBhbmQgcmVjZWl2ZSBwYXRocywgYW5kIGFkZHMgbWVtb3J5IGJhcnJpZXJzIChgd3FfaGFzX3NsZWVwZXJgKSB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9ucyBhbmQgbG9zdCB3YWtlLXVwcy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBtb2RpZnkgbWVtb3J5IGFsbG9jYXRpb25zLCBvciBhbHRlciBkYXRhIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIHNlbnQgb3ZlciB0aGUgbmV0d29yay4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgZXhwb3NlZCBieSB0aGVzZSBjaGFuZ2VzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIGJlIGNvbmN1cnJlbmN5IGlzc3VlcywgcmFjZSBjb25kaXRpb25zLCBvciBkZWFkbG9ja3MsIHdoaWNoIGFyZSBiZXN0IGNhdWdodCBieSBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIGxpa2UgS0FTQU4sIEtDU0FOLCBhbmQgTE9DS0RFUC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIktNU0FOIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBkZXRlY3QgdXNlcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlciBzcGFjZS4gVGhpcyBwYXRjaCBmb2N1c2VzIGVudGlyZWx5IG9uIGZpeGluZyBjb25jdXJyZW5jeSBhbmQgc3luY2hyb25pemF0aW9uIGlzc3VlcyB3aXRoaW4gdGhlIFJEUyBzdWJzeXN0ZW0uIEl0IHJlcGxhY2VzIG5vbi1hdG9taWMgYml0IGNsZWFycyB3aXRoIGF0b21pYyBvcGVyYXRpb25zLCB1c2VzIGJpdCBsb2NrcyAoYHRlc3RfYW5kX3NldF9iaXRfbG9ja2ApIHRvIHByb3Blcmx5IHF1aWVzY2UgdHJhbnNtaXQgYW5kIHJlY2VpdmUgcGF0aHMsIGFuZCBhZGRzIG1lbW9yeSBiYXJyaWVycyAoYHdxX2hhc19zbGVlcGVyYCkgdG8gcHJldmVudCByYWNlIGNvbmRpdGlvbnMgYW5kIGxvc3Qgd2FrZS11cHMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcywgbW9kaWZ5IG1lbW9yeSBhbGxvY2F0aW9ucywgb3IgYWx0ZXIgZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZSBvciBzZW50IG92ZXIgdGhlIG5ldHdvcmsuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIGV4cG9zZWQgYnkgdGhlc2UgY2hhbmdlcy4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBiZSBjb25jdXJyZW5jeSBpc3N1ZXMsIHJhY2UgY29uZGl0aW9ucywgb3IgZGVhZGxvY2tzLCB3aGljaCBhcmUgYmVzdCBjYXVnaHQgYnkgc3RhbmRhcmQgYnVnIGRldGVjdG9ycyBsaWtlIEtBU0FOLCBLQ1NBTiwgYW5kIExPQ0tERVAuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow5w89c[1] Phase: Succeeded StartedAt: 2026-08-16 00:27:28 +0000 UTC FinishedAt: 2026-08-16 00:27:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5w89c[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-16 00:27:28 +0000 UTC FinishedAt: 2026-08-16 00:27:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5w89c[2] Phase: Succeeded StartedAt: 2026-08-16 00:27:28 +0000 UTC FinishedAt: 2026-08-16 04:08:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5w89c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rds_send_xmit","rds_tcp_reset_callbacks","rds_conn_shutdown"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP"],"series_id":"52dc30c6-ef29-4aa4-9480-c32f34e47ab6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-16 00:27:28 +0000 UTC FinishedAt: 2026-08-16 04:08:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rds_send_xmit","rds_tcp_reset_callbacks","rds_conn_shutdown"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP"],"series_id":"52dc30c6-ef29-4aa4-9480-c32f34e47ab6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow5w89c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rds_send_xmit","rds_tcp_reset_callbacks","rds_conn_shutdown"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP"],"series_id":"52dc30c6-ef29-4aa4-9480-c32f34e47ab6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-16 00:27:28 +0000 UTC FinishedAt: 2026-08-16 00:27:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5w89c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rds_send_xmit","rds_tcp_reset_callbacks","rds_conn_shutdown"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP"],"series_id":"52dc30c6-ef29-4aa4-9480-c32f34e47ab6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-16 00:27:28 +0000 UTC FinishedAt: 2026-08-16 00:27:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflow5w89c/series-workflow5w89c-convert-artifact-1610752906/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5w89c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rds_send_xmit","rds_tcp_reset_callbacks","rds_conn_shutdown"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP"],"series_id":"52dc30c6-ef29-4aa4-9480-c32f34e47ab6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-16 00:27:38 +0000 UTC FinishedAt: 2026-08-16 00:44:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5w89c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rds_send_xmit","rds_tcp_reset_callbacks","rds_conn_shutdown"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP"],"series_id":"52dc30c6-ef29-4aa4-9480-c32f34e47ab6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-16 00:27:38 +0000 UTC FinishedAt: 2026-08-16 00:44:12 +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:*77842ada-e652-46f5-a156-1af959cc2f87,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-workflow5w89c/series-workflow5w89c-convert-artifact-1610752906/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": "291f01e8-9411-4fd7-a572-321a5e157c0e", "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-workflow5w89c/series-workflow5w89c-build-action-2312294008/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5w89c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rds_send_xmit","rds_tcp_reset_callbacks","rds_conn_shutdown"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP"],"series_id":"52dc30c6-ef29-4aa4-9480-c32f34e47ab6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-16 00:27:38 +0000 UTC FinishedAt: 2026-08-16 00:44:02 +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:*77842ada-e652-46f5-a156-1af959cc2f87,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-workflow5w89c/series-workflow5w89c-convert-artifact-1610752906/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": "291f01e8-9411-4fd7-a572-321a5e157c0e", "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-workflow5w89c/series-workflow5w89c-build-action-2312294008/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5w89c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rds_send_xmit","rds_tcp_reset_callbacks","rds_conn_shutdown"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP"],"series_id":"52dc30c6-ef29-4aa4-9480-c32f34e47ab6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-16 00:44:12 +0000 UTC FinishedAt: 2026-08-16 00:44:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5w89c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rds_send_xmit","rds_tcp_reset_callbacks","rds_conn_shutdown"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP"],"series_id":"52dc30c6-ef29-4aa4-9480-c32f34e47ab6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-16 00:44:12 +0000 UTC FinishedAt: 2026-08-16 00:44:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5w89c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rds_send_xmit","rds_tcp_reset_callbacks","rds_conn_shutdown"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP"],"series_id":"52dc30c6-ef29-4aa4-9480-c32f34e47ab6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-16 00:44:12 +0000 UTC FinishedAt: 2026-08-16 00:44:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5w89c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rds_send_xmit","rds_tcp_reset_callbacks","rds_conn_shutdown"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP"],"series_id":"52dc30c6-ef29-4aa4-9480-c32f34e47ab6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-16 00:44:12 +0000 UTC FinishedAt: 2026-08-16 00:44:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP"],"series_id":"52dc30c6-ef29-4aa4-9480-c32f34e47ab6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflow5w89c/series-workflow5w89c-convert-artifact-3670424869/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5w89c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rds_send_xmit","rds_tcp_reset_callbacks","rds_conn_shutdown"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP"],"series_id":"52dc30c6-ef29-4aa4-9480-c32f34e47ab6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-16 00:44:22 +0000 UTC FinishedAt: 2026-08-16 00:46:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5w89c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rds_send_xmit","rds_tcp_reset_callbacks","rds_conn_shutdown"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP"],"series_id":"52dc30c6-ef29-4aa4-9480-c32f34e47ab6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-16 00:44:22 +0000 UTC FinishedAt: 2026-08-16 00:46:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*291f01e8-9411-4fd7-a572-321a5e157c0e,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-workflow5w89c/series-workflow5w89c-build-action-2312294008/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-workflow5w89c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rds_send_xmit","rds_tcp_reset_callbacks","rds_conn_shutdown"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP"],"series_id":"52dc30c6-ef29-4aa4-9480-c32f34e47ab6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-16 00:46:24 +0000 UTC FinishedAt: 2026-08-16 00:46:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5w89c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rds_send_xmit","rds_tcp_reset_callbacks","rds_conn_shutdown"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP"],"series_id":"52dc30c6-ef29-4aa4-9480-c32f34e47ab6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-16 00:46:24 +0000 UTC FinishedAt: 2026-08-16 00:46:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5w89c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rds_send_xmit","rds_tcp_reset_callbacks","rds_conn_shutdown"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP"],"series_id":"52dc30c6-ef29-4aa4-9480-c32f34e47ab6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-16 00:46:24 +0000 UTC FinishedAt: 2026-08-16 01:03:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5w89c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rds_send_xmit","rds_tcp_reset_callbacks","rds_conn_shutdown"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP"],"series_id":"52dc30c6-ef29-4aa4-9480-c32f34e47ab6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-16 00:46:24 +0000 UTC FinishedAt: 2026-08-16 01:03:03 +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:*77842ada-e652-46f5-a156-1af959cc2f87,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-workflow5w89c/series-workflow5w89c-convert-artifact-3670424869/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": "39f86c6b-a681-4efe-beae-bf1755a42091", "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-workflow5w89c/series-workflow5w89c-build-action-1912567153/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5w89c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rds_send_xmit","rds_tcp_reset_callbacks","rds_conn_shutdown"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP"],"series_id":"52dc30c6-ef29-4aa4-9480-c32f34e47ab6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-16 00:46:24 +0000 UTC FinishedAt: 2026-08-16 01:02:53 +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:*77842ada-e652-46f5-a156-1af959cc2f87,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-workflow5w89c/series-workflow5w89c-convert-artifact-3670424869/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": "39f86c6b-a681-4efe-beae-bf1755a42091", "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-workflow5w89c/series-workflow5w89c-build-action-1912567153/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5w89c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rds_send_xmit","rds_tcp_reset_callbacks","rds_conn_shutdown"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP"],"series_id":"52dc30c6-ef29-4aa4-9480-c32f34e47ab6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-16 01:03:03 +0000 UTC FinishedAt: 2026-08-16 01:03:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5w89c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rds_send_xmit","rds_tcp_reset_callbacks","rds_conn_shutdown"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP"],"series_id":"52dc30c6-ef29-4aa4-9480-c32f34e47ab6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-16 01:03:03 +0000 UTC FinishedAt: 2026-08-16 01:03:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5w89c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rds_send_xmit","rds_tcp_reset_callbacks","rds_conn_shutdown"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP"],"series_id":"52dc30c6-ef29-4aa4-9480-c32f34e47ab6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-16 01:03:03 +0000 UTC FinishedAt: 2026-08-16 01:05:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5w89c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rds_send_xmit","rds_tcp_reset_callbacks","rds_conn_shutdown"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP"],"series_id":"52dc30c6-ef29-4aa4-9480-c32f34e47ab6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-16 01:03:03 +0000 UTC FinishedAt: 2026-08-16 01:04:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*39f86c6b-a681-4efe-beae-bf1755a42091,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-workflow5w89c/series-workflow5w89c-build-action-1912567153/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-workflow5w89c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rds_send_xmit","rds_tcp_reset_callbacks","rds_conn_shutdown"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP"],"series_id":"52dc30c6-ef29-4aa4-9480-c32f34e47ab6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-16 01:05:08 +0000 UTC FinishedAt: 2026-08-16 04:08:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5w89c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rds_send_xmit","rds_tcp_reset_callbacks","rds_conn_shutdown"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP"],"series_id":"52dc30c6-ef29-4aa4-9480-c32f34e47ab6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-16 01:05:08 +0000 UTC FinishedAt: 2026-08-16 04:08: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":["rds_send_xmit","rds_tcp_reset_callbacks","rds_conn_shutdown"],"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:*291f01e8-9411-4fd7-a572-321a5e157c0e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*39f86c6b-a681-4efe-beae-bf1755a42091,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-workflow5w89c/series-workflow5w89c-build-action-2312294008/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-workflow5w89c/series-workflow5w89c-build-action-1912567153/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow5w89c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rds_send_xmit","rds_tcp_reset_callbacks","rds_conn_shutdown"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP"],"series_id":"52dc30c6-ef29-4aa4-9480-c32f34e47ab6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-16 01:05:08 +0000 UTC FinishedAt: 2026-08-16 01:05:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5w89c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rds_send_xmit","rds_tcp_reset_callbacks","rds_conn_shutdown"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP"],"series_id":"52dc30c6-ef29-4aa4-9480-c32f34e47ab6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-16 01:05:08 +0000 UTC FinishedAt: 2026-08-16 01:05:13 +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":["rds_send_xmit","rds_tcp_reset_callbacks","rds_conn_shutdown"],"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-workflow5w89c/series-workflow5w89c-convert-artifact-2847360426/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5w89c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rds_send_xmit","rds_tcp_reset_callbacks","rds_conn_shutdown"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP"],"series_id":"52dc30c6-ef29-4aa4-9480-c32f34e47ab6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-16 01:05:08 +0000 UTC FinishedAt: 2026-08-16 01:05:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5w89c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rds_send_xmit","rds_tcp_reset_callbacks","rds_conn_shutdown"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP"],"series_id":"52dc30c6-ef29-4aa4-9480-c32f34e47ab6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-16 01:05:08 +0000 UTC FinishedAt: 2026-08-16 01:05:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5w89c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rds_send_xmit","rds_tcp_reset_callbacks","rds_conn_shutdown"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP"],"series_id":"52dc30c6-ef29-4aa4-9480-c32f34e47ab6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-16 01:05:08 +0000 UTC FinishedAt: 2026-08-16 01:05:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5w89c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rds_send_xmit","rds_tcp_reset_callbacks","rds_conn_shutdown"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP"],"series_id":"52dc30c6-ef29-4aa4-9480-c32f34e47ab6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-16 01:05:18 +0000 UTC FinishedAt: 2026-08-16 04:08:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5w89c[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rds_send_xmit","rds_tcp_reset_callbacks","rds_conn_shutdown"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3da8c3c8b8fa99505624b65ef590482f48e766b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP"],"series_id":"52dc30c6-ef29-4aa4-9480-c32f34e47ab6","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-16 01:05:18 +0000 UTC FinishedAt: 2026-08-16 04:08:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*291f01e8-9411-4fd7-a572-321a5e157c0e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*39f86c6b-a681-4efe-beae-bf1755a42091,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-workflow5w89c/series-workflow5w89c-build-action-2312294008/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-workflow5w89c/series-workflow5w89c-build-action-1912567153/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-workflow5w89c/series-workflow5w89c-convert-artifact-2847360426/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,}