Name: series-workflowzmk8h Phase: Succeeded StartedAt: 2026-07-16 03:54:09 +0000 UTC FinishedAt: 2026-07-16 08:46:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzmk8h[0] Phase: Succeeded StartedAt: 2026-07-16 03:54:09 +0000 UTC FinishedAt: 2026-07-16 04:15:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzmk8h[0].run-triage Phase: Succeeded StartedAt: 2026-07-16 03:54:09 +0000 UTC FinishedAt: 2026-07-16 04:15:17 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "d1f4b56417a3dc1a0600f960b14f46bd25eda89d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "NET_SOCK_MSG" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "d1f4b56417a3dc1a0600f960b14f46bd25eda89d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "NET_SOCK_MSG" ], "series_id": "56ae867f-1d48-4c9b-ac36-55084c9e5fdf" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "tcp_bpf_recvmsg_parser", "tcp_bpf_recvmsg", "tcp_msg_wait_data" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDA0OjE0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O05FVF9TT0NLX01TRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RjcF9icGZfcmVjdm1zZ19wYXJzZXImIzM0OywKICAgICYjMzQ7dGNwX2JwZl9yZWN2bXNnJiMzNDssCiAgICAmIzM0O3RjcF9tc2dfd2FpdF9kYXRhJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRpbWVvdXQgaGFuZGxpbmcgaW4gQlBGIHNvY2ttYXAmIzM5O3MgcmVjdm1zZyBpbXBsZW1lbnRhdGlvbnMgKHRjcF9icGZfcmVjdm1zZyBhbmQgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcikuIEl0IGNvcnJlY3RseSB1cGRhdGVzIHRoZSByZW1haW5pbmcgdGltZW91dCB2YWx1ZSBpbiB0Y3BfbXNnX3dhaXRfZGF0YSBhbmQgcmV0cmllcyByZWFkaW5nIGlmIHRoZSB0aW1lb3V0IGhhc24mIzM5O3QgZXhwaXJlZC4gVGhpcyBpcyBmdW5jdGlvbmFsIGNvcmUgbmV0d29ya2luZyBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDQ6MTQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAwM2FmNDM1NWJlNDJmOGVjNDZiYmI1MzQ4NzYwM2M4MGI1NTgxOWI5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMTYgMDQ6MTQ6MTcgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2JwZi5jIGIvbmV0L2lwdjQvdGNwX2JwZi5jXG5pbmRleCBjYzBiZDczZjM2YjZkNi4uYWE1YzVkNzQxNTk5YTMgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC90Y3BfYnBmLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L3RjcF9icGYuY1xuQEAgLTE3OSw3ICYjNDM7MTc5LDcgQEAgRVhQT1JUX1NZTUJPTF9HUEwodGNwX2JwZl9zZW5kbXNnX3JlZGlyKTtcbiBcbiAjaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXG4gc3RhdGljIGludCB0Y3BfbXNnX3dhaXRfZGF0YShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2ssXG4tXHRcdFx0ICAgICBsb25nIHRpbWVvKVxuJiM0MztcdFx0XHQgICAgIGxvbmcgKnRpbWVvKVxuIHtcbiBcdERFRklORV9XQUlUX0ZVTkMod2FpdCwgd29rZW5fd2FrZV9mdW5jdGlvbik7XG4gXHRpbnQgcmV0ID0gMDtcbkBAIC0xODcsMTIgJiM0MzsxODcsMTIgQEAgc3RhdGljIGludCB0Y3BfbXNnX3dhaXRfZGF0YShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2ssXG4gXHRpZiAoc2stXHUwMDNlc2tfc2h1dGRvd24gXHUwMDI2IFJDVl9TSFVURE9XTilcbiBcdFx0cmV0dXJuIDE7XG4gXG4tXHRpZiAoIXRpbWVvKVxuJiM0MztcdGlmICghKnRpbWVvKVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuIFx0YWRkX3dhaXRfcXVldWUoc2tfc2xlZXAoc2spLCBcdTAwMjZ3YWl0KTtcbiBcdHNrX3NldF9iaXQoU09DS1dRX0FTWU5DX1dBSVREQVRBLCBzayk7XG4tXHRyZXQgPSBza193YWl0X2V2ZW50KHNrLCBcdTAwMjZ0aW1lbyxcbiYjNDM7XHRyZXQgPSBza193YWl0X2V2ZW50KHNrLCB0aW1lbyxcbiBcdFx0XHQgICAgIWxpc3RfZW1wdHkoXHUwMDI2cHNvY2stXHUwMDNlaW5ncmVzc19tc2cpIHx8XG4gXHRcdFx0ICAgICFza2JfcXVldWVfZW1wdHlfbG9ja2xlc3MoXHUwMDI2c2stXHUwMDNlc2tfcmVjZWl2ZV9xdWV1ZSksIFx1MDAyNndhaXQpO1xuIFx0c2tfY2xlYXJfYml0KFNPQ0tXUV9BU1lOQ19XQUlUREFUQSwgc2spO1xuQEAgLTIyOSw2ICYjNDM7MjI5LDcgQEAgc3RhdGljIGludCB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyKHN0cnVjdCBzb2NrICpzayxcbiBcdGludCBjb3BpZWRfZnJvbV9zZWxmID0gMDtcbiBcdGludCBjb3BpZWQgPSAwO1xuIFx0dTMyIHNlcTtcbiYjNDM7XHRsb25nIHRpbWVvO1xuIFxuIFx0aWYgKHVubGlrZWx5KGZsYWdzIFx1MDAyNiBNU0dfRVJSUVVFVUUpKVxuIFx0XHRyZXR1cm4gaW5ldF9yZWN2X2Vycm9yKHNrLCBtc2csIGxlbik7XG5AQCAtMjYyLDYgJiM0MzsyNjMsOCBAQCBzdGF0aWMgaW50IHRjcF9icGZfcmVjdm1zZ19wYXJzZXIoc3RydWN0IHNvY2sgKnNrLFxuIFx0XHR9XG4gXHR9XG4gXG4mIzQzO1x0dGltZW8gPSBzb2NrX3JjdnRpbWVvKHNrLCBmbGFncyBcdTAwMjYgTVNHX0RPTlRXQUlUKTtcbiYjNDM7XG4gbXNnX2J5dGVzX3JlYWR5OlxuIFx0Y29waWVkID0gX19za19tc2dfcmVjdm1zZyhzaywgcHNvY2ssIG1zZywgbGVuLCBmbGFncywgXHUwMDI2Y29waWVkX2Zyb21fc2VsZik7XG4gXHQvKiBUaGUgdHlwaWNhbCBjYXNlIGZvciBFRkFVTFQgaXMgdGhlIHNvY2tldCB3YXMgZ3JhY2VmdWxseVxuQEAgLTI4MCw3ICYjNDM7MjgzLDYgQEAgc3RhdGljIGludCB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyKHN0cnVjdCBzb2NrICpzayxcbiBcdH1cbiBcdHNlcSAmIzQzOz0gY29waWVkX2Zyb21fc2VsZjtcbiBcdGlmICghY29waWVkKSB7XG4tXHRcdGxvbmcgdGltZW87XG4gXHRcdGludCBkYXRhO1xuIFxuIFx0XHRpZiAoc29ja19mbGFnKHNrLCBTT0NLX0RPTkUpKVxuQEAgLTI5OSw3ICYjNDM7MzAxLDYgQEAgc3RhdGljIGludCB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyKHN0cnVjdCBzb2NrICpzayxcbiBcdFx0XHRnb3RvIG91dDtcbiBcdFx0fVxuIFxuLVx0XHR0aW1lbyA9IHNvY2tfcmN2dGltZW8oc2ssIGZsYWdzIFx1MDAyNiBNU0dfRE9OVFdBSVQpO1xuIFx0XHRpZiAoIXRpbWVvKSB7XG4gXHRcdFx0Y29waWVkID0gLUVBR0FJTjtcbiBcdFx0XHRnb3RvIG91dDtcbkBAIC0zMTAsMTMgJiM0MzszMTEsMTUgQEAgc3RhdGljIGludCB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyKHN0cnVjdCBzb2NrICpzayxcbiBcdFx0XHRnb3RvIG91dDtcbiBcdFx0fVxuIFxuLVx0XHRkYXRhID0gdGNwX21zZ193YWl0X2RhdGEoc2ssIHBzb2NrLCB0aW1lbyk7XG4mIzQzO1x0XHRkYXRhID0gdGNwX21zZ193YWl0X2RhdGEoc2ssIHBzb2NrLCBcdTAwMjZ0aW1lbyk7XG4gXHRcdGlmIChkYXRhIFx1MDAzYyAwKSB7XG4gXHRcdFx0Y29waWVkID0gZGF0YTtcbiBcdFx0XHRnb3RvIHVubG9jaztcbiBcdFx0fVxuIFx0XHRpZiAoZGF0YSBcdTAwMjZcdTAwMjYgIXNrX3Bzb2NrX3F1ZXVlX2VtcHR5KHBzb2NrKSlcbiBcdFx0XHRnb3RvIG1zZ19ieXRlc19yZWFkeTtcbiYjNDM7XHRcdGlmICghZGF0YSBcdTAwMjZcdTAwMjYgdGltZW8gXHUwMDNlIDApXG4mIzQzO1x0XHRcdGdvdG8gbXNnX2J5dGVzX3JlYWR5O1xuIFx0XHRjb3BpZWQgPSAtRUFHQUlOO1xuIFx0fVxuIG91dDpcbkBAIC0zNTUsNiAmIzQzOzM1OCw3IEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxuIHtcbiBcdHN0cnVjdCBza19wc29jayAqcHNvY2s7XG4gXHRpbnQgY29waWVkLCByZXQ7XG4mIzQzO1x0bG9uZyB0aW1lbztcbiBcbiBcdGlmICh1bmxpa2VseShmbGFncyBcdTAwMjYgTVNHX0VSUlFVRVVFKSlcbiBcdFx0cmV0dXJuIGluZXRfcmVjdl9lcnJvcihzaywgbXNnLCBsZW4pO1xuQEAgLTM3MSwxNCAmIzQzOzM3NSw1OSBAQCBzdGF0aWMgaW50IHRjcF9icGZfcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcbiBcdFx0cmV0dXJuIHRjcF9yZWN2bXNnKHNrLCBtc2csIGxlbiwgZmxhZ3MpO1xuIFx0fVxuIFx0bG9ja19zb2NrKHNrKTtcbiYjNDM7XG4mIzQzO1x0dGltZW8gPSBzb2NrX3JjdnRpbWVvKHNrLCBmbGFncyBcdTAwMjYgTVNHX0RPTlRXQUlUKTtcbiYjNDM7XG4gbXNnX2J5dGVzX3JlYWR5OlxuIFx0Y29waWVkID0gc2tfbXNnX3JlY3Ztc2coc2ssIHBzb2NrLCBtc2csIGxlbiwgZmxhZ3MpO1xuIFx0aWYgKCFjb3BpZWQpIHtcbi1cdFx0bG9uZyB0aW1lbztcbiBcdFx0aW50IGRhdGE7XG4gXG4tXHRcdHRpbWVvID0gc29ja19yY3Z0aW1lbyhzaywgZmxhZ3MgXHUwMDI2IE1TR19ET05UV0FJVCk7XG4tXHRcdGRhdGEgPSB0Y3BfbXNnX3dhaXRfZGF0YShzaywgcHNvY2ssIHRpbWVvKTtcbiYjNDM7XHRcdGlmIChzb2NrX2ZsYWcoc2ssIFNPQ0tfRE9ORSkpIHtcbiYjNDM7XHRcdFx0cmV0ID0gMDtcbiYjNDM7XHRcdFx0Z290byB1bmxvY2s7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0aWYgKHNrLVx1MDAzZXNrX2Vycikge1xuJiM0MztcdFx0XHRpZiAoIXNrX3Bzb2NrX3F1ZXVlX2VtcHR5KHBzb2NrKSlcbiYjNDM7XHRcdFx0XHRnb3RvIG1zZ19ieXRlc19yZWFkeTtcbiYjNDM7XHRcdFx0aWYgKCFza2JfcXVldWVfZW1wdHkoXHUwMDI2c2stXHUwMDNlc2tfcmVjZWl2ZV9xdWV1ZSkpIHtcbiYjNDM7XHRcdFx0XHRyZWxlYXNlX3NvY2soc2spO1xuJiM0MztcdFx0XHRcdHNrX3Bzb2NrX3B1dChzaywgcHNvY2spO1xuJiM0MztcdFx0XHRcdHJldHVybiB0Y3BfcmVjdm1zZyhzaywgbXNnLCBsZW4sIGZsYWdzKTtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0XHRyZXQgPSBzb2NrX2Vycm9yKHNrKTtcbiYjNDM7XHRcdFx0Z290byB1bmxvY2s7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0aWYgKHNrLVx1MDAzZXNrX3NodXRkb3duIFx1MDAyNiBSQ1ZfU0hVVERPV04pIHtcbiYjNDM7XHRcdFx0aWYgKCFza19wc29ja19xdWV1ZV9lbXB0eShwc29jaykpXG4mIzQzO1x0XHRcdFx0Z290byBtc2dfYnl0ZXNfcmVhZHk7XG4mIzQzO1x0XHRcdGlmICghc2tiX3F1ZXVlX2VtcHR5KFx1MDAyNnNrLVx1MDAzZXNrX3JlY2VpdmVfcXVldWUpKSB7XG4mIzQzO1x0XHRcdFx0cmVsZWFzZV9zb2NrKHNrKTtcbiYjNDM7XHRcdFx0XHRza19wc29ja19wdXQoc2ssIHBzb2NrKTtcbiYjNDM7XHRcdFx0XHRyZXR1cm4gdGNwX3JlY3Ztc2coc2ssIG1zZywgbGVuLCBmbGFncyk7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdFx0cmV0ID0gMDtcbiYjNDM7XHRcdFx0Z290byB1bmxvY2s7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0aWYgKHNrLVx1MDAzZXNrX3N0YXRlID09IFRDUF9DTE9TRSkge1xuJiM0MztcdFx0XHRyZXQgPSAtRU5PVENPTk47XG4mIzQzO1x0XHRcdGdvdG8gdW5sb2NrO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGlmICghdGltZW8pIHtcbiYjNDM7XHRcdFx0cmV0ID0gLUVBR0FJTjtcbiYjNDM7XHRcdFx0Z290byB1bmxvY2s7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0aWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7XG4mIzQzO1x0XHRcdHJldCA9IHNvY2tfaW50cl9lcnJubyh0aW1lbyk7XG4mIzQzO1x0XHRcdGdvdG8gdW5sb2NrO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGRhdGEgPSB0Y3BfbXNnX3dhaXRfZGF0YShzaywgcHNvY2ssIFx1MDAyNnRpbWVvKTtcbiBcdFx0aWYgKGRhdGEgXHUwMDNjIDApIHtcbiBcdFx0XHRyZXQgPSBkYXRhO1xuIFx0XHRcdGdvdG8gdW5sb2NrO1xuQEAgLTM5MCw2ICYjNDM7NDM5LDggQEAgc3RhdGljIGludCB0Y3BfYnBmX3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXG4gXHRcdFx0c2tfcHNvY2tfcHV0KHNrLCBwc29jayk7XG4gXHRcdFx0cmV0dXJuIHRjcF9yZWN2bXNnKHNrLCBtc2csIGxlbiwgZmxhZ3MpO1xuIFx0XHR9XG4mIzQzO1x0XHRpZiAoIWRhdGEgXHUwMDI2XHUwMDI2IHRpbWVvIFx1MDAzZSAwKVxuJiM0MztcdFx0XHRnb3RvIG1zZ19ieXRlc19yZWFkeTtcbiBcdFx0Y29waWVkID0gLUVBR0FJTjtcbiBcdH1cbiBcdHJldCA9IGNvcGllZDtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvLmdpdGlnbm9yZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC8uZ2l0aWdub3JlXG5pbmRleCBjOWY0NjAzMWFjNzNiMi4uYTE4NDBhNWQ0NWY2N2MgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvLmdpdGlnbm9yZVxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0Ly5naXRpZ25vcmVcbkBAIC0zOSw2ICYjNDM7MzksOCBAQCBza19jb25uZWN0X3plcm9fYWRkclxuIHNrX3NvX3BlZWtfb2ZmXG4gc2tmX25ldF9vZmZcbiBzb2NrZXRcbiYjNDM7c29ja21hcF9yZWN2ZnJvbVxuJiM0Mztzb2NrbWFwX3JlY3Zmcm9tLmJwZi5vXG4gc29faW5jb21pbmdfY3B1XG4gc29fbmV0bnNfY29va2llXG4gc29fcmN2X2xpc3RlbmVyXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L01ha2VmaWxlXG5pbmRleCA3MDhkOTYwYWUwN2Q1Yi4uZGQwNGI4MDcyNWM2NzkgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9NYWtlZmlsZVxuQEAgLTE5MSw2ICYjNDM7MTkxLDcgQEAgVEVTVF9HRU5fUFJPR1MgOj0gXFxcbiBcdHNrX2Nvbm5lY3RfemVyb19hZGRyIFxcXG4gXHRza19zb19wZWVrX29mZiBcXFxuIFx0c29faW5jb21pbmdfY3B1IFxcXG4mIzQzO1x0c29ja21hcF9yZWN2ZnJvbSBcXFxuIFx0dGFwIFxcXG4gXHR0Y3BfcG9ydF9zaGFyZSBcXFxuIFx0dGxzIFxcXG5AQCAtMjM4LDMgJiM0MzsyMzksNyBAQCAkKE9VVFBVVCkvYmluZF9iaGFzaDogTERMSUJTICYjNDM7PSAtbHB0aHJlYWRcbiAkKE9VVFBVVCkvaW9fdXJpbmdfemVyb2NvcHlfdHg6IENGTEFHUyAmIzQzOz0gLUkuLi8uLi8uLi9pbmNsdWRlL1xuIFxuIGluY2x1ZGUgYnBmLm1rXG4mIzQzO1xuJiM0MzskKE9VVFBVVCkvc29ja21hcF9yZWN2ZnJvbTogJChCUEZPQkopXG4mIzQzOyQoT1VUUFVUKS9zb2NrbWFwX3JlY3Zmcm9tOiBMRExJQlMgJiM0Mzs9ICQoQlBGT0JKKSAtbGVsZiAtbHogLWxwdGhyZWFkXG4mIzQzOyQoT1VUUFVUKS9zb2NrbWFwX3JlY3Zmcm9tOiBDRkxBR1MgJiM0Mzs9IC1JJChPVVRQVVQpL3Rvb2xzL2luY2x1ZGVcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvc29ja21hcF9yZWN2ZnJvbS5icGYuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9zb2NrbWFwX3JlY3Zmcm9tLmJwZi5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmZlYzQ3MGM3MzhmMWU4XG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvc29ja21hcF9yZWN2ZnJvbS5icGYuY1xuQEAgLTAsMCAmIzQzOzEsMzEgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvYnBmLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNkZWZpbmUgQUZfSU5FVCAyXG4mIzQzO1xuJiM0MztjaGFyIExJQ0VOU0VbXSBTRUMoXCYjMzQ7bGljZW5zZVwmIzM0OykgPSBcJiMzNDtHUExcJiMzNDs7XG4mIzQzO1xuJiM0MztzdHJ1Y3Qge1xuJiM0MztcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfU09DS0hBU0gpO1xuJiM0MztcdF9fdWludChtYXhfZW50cmllcywgMTAyNCk7XG4mIzQzO1x0X190eXBlKGtleSwgX191NjQpO1xuJiM0MztcdF9fdHlwZSh2YWx1ZSwgX191NjQpO1xuJiM0MztcbiYjNDM7fSBtYXBfc29ja3MgU0VDKFwmIzM0Oy5tYXBzXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDtzb2Nrb3BzXCYjMzQ7KSBpbnQgb25fc29ja29wcyhzdHJ1Y3QgYnBmX3NvY2tfb3BzICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRpZiAoY3R4LVx1MDAzZWZhbWlseSA9PSBBRl9JTkVUIFx1MDAyNlx1MDAyNiBjdHgtXHUwMDNlb3AgPT0gQlBGX1NPQ0tfT1BTX0FDVElWRV9FU1RBQkxJU0hFRF9DQikge1xuJiM0MztcdFx0X191NjQgY29va2llID0gYnBmX2dldF9zb2NrZXRfY29va2llKGN0eCk7XG4mIzQzO1xuJiM0MztcdFx0YnBmX3NvY2tfaGFzaF91cGRhdGUoY3R4LCBcdTAwMjZtYXBfc29ja3MsIFx1MDAyNmNvb2tpZSwgQlBGX05PRVhJU1QpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDtza19za2Ivc3RyZWFtX3ZlcmRpY3RcJiMzNDspIGludCBvbl9yZWN2KHN0cnVjdCBfX3NrX2J1ZmYgKmN0eClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBTS19QQVNTO1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3NvY2ttYXBfcmVjdmZyb20uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9zb2NrbWFwX3JlY3Zmcm9tLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMjU2NTdmYzNkYmNkMjJcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9zb2NrbWFwX3JlY3Zmcm9tLmNcbkBAIC0wLDAgJiM0MzsxLDI5OSBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MzsjaW5jbHVkZSBcdTAwM2NhcnBhL2luZXQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NicGYvbGliYnBmLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjZmNudGwuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NwdGhyZWFkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3RkYXRvbWljLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3lzL3NvY2tldC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N5cy90aW1lLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2tzZWxmdGVzdF9oYXJuZXNzLmhcJiMzNDtcbiYjNDM7XG4mIzQzOyNkZWZpbmUgTUFYX0lURVJBVElPTlMgMTAwXG4mIzQzOyNkZWZpbmUgUEFZTE9BRF9FTkQgJiMzOTtlJiMzOTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgc3RhcnRfbGlzdGVuaW5nKHN0cnVjdCBfX3Rlc3RfbWV0YWRhdGEgKl9tZXRhZGF0YSwgdWludDE2X3QgKnBvcnQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgc29ja2FkZHJfaW4gYWRkcjtcbiYjNDM7XHRzb2NrbGVuX3QgYWRkcmxlbjtcbiYjNDM7XHRpbnQgZmQ7XG4mIzQzO1xuJiM0MztcdG1lbXNldChcdTAwMjZhZGRyLCAwLCBzaXplb2YoYWRkcikpO1xuJiM0MztcdGFkZHIuc2luX2ZhbWlseSA9IEFGX0lORVQ7XG4mIzQzO1x0YWRkci5zaW5fYWRkci5zX2FkZHIgPSBJTkFERFJfQU5ZO1xuJiM0MztcbiYjNDM7XHRmZCA9IHNvY2tldChBRl9JTkVULCBTT0NLX1NUUkVBTSwgSVBQUk9UT19UQ1ApO1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfTkUoZmQsIC0xKTtcbiYjNDM7XHRBU1NFUlRfRVEoYmluZChmZCwgKHN0cnVjdCBzb2NrYWRkciAqKVx1MDAyNmFkZHIsIHNpemVvZihhZGRyKSksIDApO1xuJiM0MztcdEFTU0VSVF9FUShsaXN0ZW4oZmQsIDUpLCAwKTtcbiYjNDM7XG4mIzQzO1x0YWRkcmxlbiA9IHNpemVvZihhZGRyKTtcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX0VRKGdldHNvY2tuYW1lKGZkLCAoc3RydWN0IHNvY2thZGRyICopXHUwMDI2YWRkciwgXHUwMDI2YWRkcmxlbiksIDApO1xuJiM0MztcbiYjNDM7XHQqcG9ydCA9IGFkZHIuc2luX3BvcnQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiBmZDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcHJvY2Vzc19jbGllbnQoaW50IGZkLCBhdG9taWNfaW50ICpydW5uaW5nLCBib29sICpmYWlsZWQpXG4mIzQzO3tcbiYjNDM7XHRjaGFyIGJ1ZlsxMDI0XTtcbiYjNDM7XHRzdHJ1Y3QgdGltZXZhbCB0aW1lbztcbiYjNDM7XG4mIzQzO1x0dGltZW8udHZfc2VjID0gMDtcbiYjNDM7XHR0aW1lby50dl91c2VjID0gMTAwMDtcbiYjNDM7XG4mIzQzO1x0aWYgKHNldHNvY2tvcHQoZmQsIFNPTF9TT0NLRVQsIFNPX1JDVlRJTUVPLCBcdTAwMjZ0aW1lbywgc2l6ZW9mKHRpbWVvKSkpXG4mIzQzO1x0XHQqZmFpbGVkID0gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0d2hpbGUgKGF0b21pY19sb2FkKHJ1bm5pbmcpKSB7XG4mIzQzO1x0XHRzc2l6ZV90IGxlbiA9IHJlY3Zmcm9tKGZkLCBidWYsIHNpemVvZihidWYpLCAwLCBOVUxMLCBOVUxMKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAobGVuID09IC0xKSB7XG4mIzQzO1x0XHRcdGlmIChlcnJubyAhPSBFQUdBSU4gXHUwMDI2XHUwMDI2IGVycm5vICE9IEVJTlRSKVxuJiM0MztcdFx0XHRcdCpmYWlsZWQgPSB0cnVlO1xuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRpZiAobGVuIFx1MDAzYz0gMCB8fCBidWZbbGVuIC0gMV0gPT0gUEFZTE9BRF9FTkQpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0c2VuZChmZCwgXCYjMzQ7dGVzdFwmIzM0OywgNCwgTVNHX05PU0lHTkFMKTtcbiYjNDM7XG4mIzQzO1x0Y2xvc2UoZmQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdHJ1Y3QgYnBmX3Qge1xuJiM0MztcdHN0cnVjdCBicGZfb2JqZWN0ICpvYmo7XG4mIzQzO1x0c3RydWN0IGJwZl9saW5rICpvbl9zb2Nrb3BzO1xuJiM0MztcdHN0cnVjdCBicGZfbGluayAqb25fcmVjdjtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHNldHVwX2JwZihzdHJ1Y3QgX190ZXN0X21ldGFkYXRhICpfbWV0YWRhdGEsIGNvbnN0IGNoYXIgKnBhdGgsIGJvb2wgcmVjdixcbiYjNDM7XHRcdFx0XHRcdFx0c3RydWN0IGJwZl90ICpicGYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2c7XG4mIzQzO1x0aW50IGNncm91cDtcbiYjNDM7XG4mIzQzO1x0bWVtc2V0KGJwZiwgMCwgc2l6ZW9mKCpicGYpKTtcbiYjNDM7XHRicGYtXHUwMDNlb2JqID0gYnBmX29iamVjdF9fb3Blbl9maWxlKHBhdGgsIE5VTEwpO1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfTkUoYnBmLVx1MDAzZW9iaiwgTlVMTCk7XG4mIzQzO1x0QVNTRVJUX0VRKGJwZl9vYmplY3RfX2xvYWQoYnBmLVx1MDAzZW9iaiksIDApO1xuJiM0MztcbiYjNDM7XHRwcm9nID0gYnBmX29iamVjdF9fZmluZF9wcm9ncmFtX2J5X25hbWUoYnBmLVx1MDAzZW9iaiwgXCYjMzQ7b25fc29ja29wc1wmIzM0Oyk7XG4mIzQzO1x0QVNTRVJUX05FKHByb2csIE5VTEwpO1xuJiM0MztcbiYjNDM7XHRjZ3JvdXAgPSBvcGVuKFwmIzM0Oy9zeXMvZnMvY2dyb3VwXCYjMzQ7LCBPX1JET05MWSk7XG4mIzQzO1x0QVNTRVJUX05FKGNncm91cCwgLTEpO1xuJiM0MztcbiYjNDM7XHRicGYtXHUwMDNlb25fc29ja29wcyA9IGJwZl9wcm9ncmFtX19hdHRhY2hfY2dyb3VwKHByb2csIGNncm91cCk7XG4mIzQzO1x0Y2xvc2UoY2dyb3VwKTtcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX05FKGJwZi1cdTAwM2Vvbl9zb2Nrb3BzLCBOVUxMKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHJlY3YpIHtcbiYjNDM7XHRcdHN0cnVjdCBicGZfbWFwICptYXAgPSBicGZfb2JqZWN0X19maW5kX21hcF9ieV9uYW1lKGJwZi1cdTAwM2VvYmosIFwmIzM0O21hcF9zb2Nrc1wmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdFx0QVNTRVJUX05FKG1hcCwgTlVMTCk7XG4mIzQzO1xuJiM0MztcdFx0cHJvZyA9IGJwZl9vYmplY3RfX2ZpbmRfcHJvZ3JhbV9ieV9uYW1lKGJwZi1cdTAwM2VvYmosIFwmIzM0O29uX3JlY3ZcJiMzNDspO1xuJiM0MztcdFx0QVNTRVJUX05FKHByb2csIE5VTEwpO1xuJiM0MztcbiYjNDM7XHRcdGJwZi1cdTAwM2Vvbl9yZWN2ID0gYnBmX3Byb2dyYW1fX2F0dGFjaF9zb2NrbWFwKHByb2csIGJwZl9tYXBfX2ZkKG1hcCkpO1xuJiM0MztcdFx0QVNTRVJUX05FKGJwZi1cdTAwM2Vvbl9yZWN2LCBOVUxMKTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0cnVjdCBzZXJ2ZXJfdCB7XG4mIzQzO1x0aW50IGZkO1xuJiM0MztcdGF0b21pY19pbnQgcnVubmluZztcbiYjNDM7XHRwdGhyZWFkX3QgdGhyZWFkO1xuJiM0MztcdGJvb2wgdGhyZWFkX2NyZWF0ZWQ7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCAqcnVuX3NlcnZlcih2b2lkICphcmcpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgc2VydmVyX3QgKnNlcnZlciA9IGFyZztcbiYjNDM7XHRib29sIGZhaWxlZCA9IGZhbHNlO1xuJiM0MztcbiYjNDM7XHR3aGlsZSAoYXRvbWljX2xvYWQoXHUwMDI2c2VydmVyLVx1MDAzZXJ1bm5pbmcpKSB7XG4mIzQzO1x0XHRpbnQgY2xpZW50X2ZkID0gYWNjZXB0KHNlcnZlci1cdTAwM2VmZCwgTlVMTCwgTlVMTCk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGNsaWVudF9mZCA9PSAtMSkge1xuJiM0MztcdFx0XHRpZiAoIWF0b21pY19sb2FkKFx1MDAyNnNlcnZlci1cdTAwM2VydW5uaW5nKSlcbiYjNDM7XHRcdFx0XHRicmVhaztcbiYjNDM7XG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdHByb2Nlc3NfY2xpZW50KGNsaWVudF9mZCwgXHUwMDI2c2VydmVyLVx1MDAzZXJ1bm5pbmcsIFx1MDAyNmZhaWxlZCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoZmFpbGVkKVxuJiM0MztcdFx0cmV0dXJuICh2b2lkICopMTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIE5VTEw7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgc2VuZF9wYXlsb2FkKHN0cnVjdCBfX3Rlc3RfbWV0YWRhdGEgKl9tZXRhZGF0YSwgaW50IGZkLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pXG4mIzQzO3tcbiYjNDM7XHRzaXplX3QgcmVtYWluaW5nID0gbGVuO1xuJiM0MztcbiYjNDM7XHRkbyB7XG4mIzQzO1x0XHRzc2l6ZV90IGJ5dGVzID0gd3JpdGUoZmQsIGJ1ZiAmIzQzOyAobGVuIC0gcmVtYWluaW5nKSwgcmVtYWluaW5nKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoYnl0ZXMgXHUwMDNjIDApIHtcbiYjNDM7XHRcdFx0aWYgKGVycm5vID09IEVJTlRSKVxuJiM0MztcdFx0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdFx0cmV0dXJuIC0xO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdHJlbWFpbmluZyAtPSBieXRlcztcbiYjNDM7XHR9IHdoaWxlIChyZW1haW5pbmcpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7RklYVFVSRShzb2NrbWFwX3JlY3Zmcm9tKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHNlcnZlcl90IHNlcnZlcjtcbiYjNDM7XHRzdHJ1Y3Qgc29ja2FkZHJfaW4gYWRkcjtcbiYjNDM7XHRzdHJ1Y3QgYnBmX3QgYnBmO1xuJiM0MztcdGNoYXIgKnBheWxvYWQ7XG4mIzQzO1x0c2l6ZV90IHBheWxvYWRfbGVuO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7RklYVFVSRV9WQVJJQU5UKHNvY2ttYXBfcmVjdmZyb20pXG4mIzQzO3tcbiYjNDM7XHRib29sIHdpdGhfcmVjdjtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO0ZJWFRVUkVfVkFSSUFOVF9BREQoc29ja21hcF9yZWN2ZnJvbSwgcmVjdm1zZylcbiYjNDM7e1xuJiM0MztcdC53aXRoX3JlY3YgPSBmYWxzZVxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7RklYVFVSRV9WQVJJQU5UX0FERChzb2NrbWFwX3JlY3Zmcm9tLCByZWN2bXNnX3BhcnNlcilcbiYjNDM7e1xuJiM0MztcdC53aXRoX3JlY3YgPSB0cnVlXG4mIzQzO307XG4mIzQzO1xuJiM0MztGSVhUVVJFX1NFVFVQKHNvY2ttYXBfcmVjdmZyb20pXG4mIzQzO3tcbiYjNDM7XHRtZW1zZXQoXHUwMDI2c2VsZi1cdTAwM2VzZXJ2ZXIsIDAsIHNpemVvZihzZWxmLVx1MDAzZXNlcnZlcikpO1xuJiM0MztcdHNlbGYtXHUwMDNlc2VydmVyLmZkID0gLTE7XG4mIzQzO1xuJiM0MztcdG1lbXNldChcdTAwMjZzZWxmLVx1MDAzZWFkZHIsIDAsIHNpemVvZihzZWxmLVx1MDAzZWFkZHIpKTtcbiYjNDM7XG4mIzQzO1x0c2VsZi1cdTAwM2VwYXlsb2FkX2xlbiA9IDEwMjQgKiAxMDI0ICogMjU7XG4mIzQzO1x0c2VsZi1cdTAwM2VwYXlsb2FkID0gbWFsbG9jKHNlbGYtXHUwMDNlcGF5bG9hZF9sZW4pO1xuJiM0MztcdEFTU0VSVF9ORShzZWxmLVx1MDAzZXBheWxvYWQsIE5VTEwpO1xuJiM0MztcbiYjNDM7XHRtZW1zZXQoc2VsZi1cdTAwM2VwYXlsb2FkLCAwLCBzZWxmLVx1MDAzZXBheWxvYWRfbGVuKTtcbiYjNDM7XHRzZWxmLVx1MDAzZXBheWxvYWRbc2VsZi1cdTAwM2VwYXlsb2FkX2xlbiAtIDFdID0gUEFZTE9BRF9FTkQ7XG4mIzQzO1xuJiM0MztcdHNldHVwX2JwZihfbWV0YWRhdGEsIFwmIzM0O3NvY2ttYXBfcmVjdmZyb20uYnBmLm9cJiMzNDssIHZhcmlhbnQtXHUwMDNld2l0aF9yZWN2LCBcdTAwMjZzZWxmLVx1MDAzZWJwZik7XG4mIzQzO1x0YXRvbWljX3N0b3JlKFx1MDAyNnNlbGYtXHUwMDNlc2VydmVyLnJ1bm5pbmcsIDEpO1xuJiM0MztcdHNlbGYtXHUwMDNlc2VydmVyLmZkID0gc3RhcnRfbGlzdGVuaW5nKF9tZXRhZGF0YSwgXHUwMDI2c2VsZi1cdTAwM2VhZGRyLnNpbl9wb3J0KTtcbiYjNDM7XG4mIzQzO1x0c2VsZi1cdTAwM2VhZGRyLnNpbl9mYW1pbHkgPSBBRl9JTkVUO1xuJiM0MztcdHNlbGYtXHUwMDNlYWRkci5zaW5fYWRkci5zX2FkZHIgPSBodG9ubChJTkFERFJfTE9PUEJBQ0spO1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfRVEocHRocmVhZF9jcmVhdGUoXHUwMDI2c2VsZi1cdTAwM2VzZXJ2ZXIudGhyZWFkLCBOVUxMLCBcdTAwMjZydW5fc2VydmVyLCBcdTAwMjZzZWxmLVx1MDAzZXNlcnZlciksIDApO1xuJiM0MztcdHNlbGYtXHUwMDNlc2VydmVyLnRocmVhZF9jcmVhdGVkID0gdHJ1ZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7RklYVFVSRV9URUFSRE9XTihzb2NrbWFwX3JlY3Zmcm9tKVxuJiM0Mzt7XG4mIzQzO1x0YXRvbWljX3N0b3JlKFx1MDAyNnNlbGYtXHUwMDNlc2VydmVyLnJ1bm5pbmcsIDApO1xuJiM0MztcbiYjNDM7XHRpZiAoc2VsZi1cdTAwM2VzZXJ2ZXIuZmQgIT0gLTEpXG4mIzQzO1x0XHRzaHV0ZG93bihzZWxmLVx1MDAzZXNlcnZlci5mZCwgU0hVVF9SRCk7XG4mIzQzO1xuJiM0MztcdGlmIChzZWxmLVx1MDAzZXNlcnZlci50aHJlYWRfY3JlYXRlZCkge1xuJiM0MztcdFx0dm9pZCAqcmV0dmFsID0gTlVMTDtcbiYjNDM7XG4mIzQzO1x0XHRwdGhyZWFkX2pvaW4oc2VsZi1cdTAwM2VzZXJ2ZXIudGhyZWFkLCBcdTAwMjZyZXR2YWwpO1xuJiM0MztcdFx0RVhQRUNUX0VRKHJldHZhbCwgTlVMTCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoc2VsZi1cdTAwM2VzZXJ2ZXIuZmQgIT0gLTEpXG4mIzQzO1x0XHRjbG9zZShzZWxmLVx1MDAzZXNlcnZlci5mZCk7XG4mIzQzO1xuJiM0MztcdGZyZWUoc2VsZi1cdTAwM2VwYXlsb2FkKTtcbiYjNDM7XHRicGZfbGlua19fZGVzdHJveShzZWxmLVx1MDAzZWJwZi5vbl9zb2Nrb3BzKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHNlbGYtXHUwMDNlYnBmLm9uX3JlY3YpXG4mIzQzO1x0XHRicGZfbGlua19fZGVzdHJveShzZWxmLVx1MDAzZWJwZi5vbl9yZWN2KTtcbiYjNDM7XG4mIzQzO1x0YnBmX29iamVjdF9fY2xvc2Uoc2VsZi1cdTAwM2VicGYub2JqKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7VEVTVF9GKHNvY2ttYXBfcmVjdmZyb20sIG5vX3RpbWVvdXQpXG4mIzQzO3tcbiYjNDM7XHRjaGFyIGlnbm9yZWRbMTI4XTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIE1BWF9JVEVSQVRJT05TOyAmIzQzOyYjNDM7aSkge1xuJiM0MztcdFx0aW50IGZkID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfU1RSRUFNLCBJUFBST1RPX1RDUCk7XG4mIzQzO1xuJiM0MztcdFx0QVNTRVJUX05FKGZkLCAtMSk7XG4mIzQzO1x0XHRBU1NFUlRfRVEoY29ubmVjdChmZCwgKHN0cnVjdCBzb2NrYWRkciAqKVx1MDAyNnNlbGYtXHUwMDNlYWRkciwgc2l6ZW9mKHNlbGYtXHUwMDNlYWRkcikpLCAwKTtcbiYjNDM7XG4mIzQzO1x0XHRBU1NFUlRfRVEoc2VuZF9wYXlsb2FkKF9tZXRhZGF0YSwgZmQsIHNlbGYtXHUwMDNlcGF5bG9hZCwgc2VsZi1cdTAwM2VwYXlsb2FkX2xlbiksIDApO1xuJiM0MztcbiYjNDM7XHRcdGlmIChyZWN2ZnJvbShmZCwgaWdub3JlZCwgc2l6ZW9mKGlnbm9yZWQpLCAwLCBOVUxMLCBOVUxMKSBcdTAwM2MgMClcbiYjNDM7XHRcdFx0QVNTRVJUX05FKGVycm5vLCBFQUdBSU4pO1xuJiM0MztcbiYjNDM7XHRcdGNsb3NlKGZkKTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQ2NF90IHRvX25hbm9zKHN0cnVjdCB0aW1lc3BlYyAqdGltZSlcbiYjNDM7e1xuJiM0MztcdHJldHVybiAodGltZS1cdTAwM2V0dl9zZWMgKiAxMDAwMDAwMDAwTEwpICYjNDM7IHRpbWUtXHUwMDNldHZfbnNlYztcbiYjNDM7fVxuJiM0MztcbiYjNDM7VEVTVF9GKHNvY2ttYXBfcmVjdmZyb20sIHdpdGhfdGltZW91dClcbiYjNDM7e1xuJiM0MztcdGNoYXIgaWdub3JlZFsxMjhdO1xuJiM0MztcdHN0cnVjdCB0aW1ldmFsIHRpbWVvO1xuJiM0MztcbiYjNDM7XHR0aW1lby50dl9zZWMgPSAwO1xuJiM0MztcdHRpbWVvLnR2X3VzZWMgPSA1MDAwO1xuJiM0MztcbiYjNDM7XHQvKiByZW1vdmUgdGhlIHBheWxvYWQgZW5kIGRlbGltaXRlciBzbyB0aGUgc2VydmVyIG5ldmVyIHJlc3BvbmRzIGFuZCByZWN2ZnJvbSB0aW1lcyBvdXQuICovXG4mIzQzO1x0c2VsZi1cdTAwM2VwYXlsb2FkW3NlbGYtXHUwMDNlcGF5bG9hZF9sZW4gLSAxXSA9IDA7XG4mIzQzO1xuJiM0MztcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBNQVhfSVRFUkFUSU9OUzsgJiM0MzsmIzQzO2kpIHtcbiYjNDM7XHRcdHN0cnVjdCB0aW1lc3BlYyBiZWc7XG4mIzQzO1x0XHRzdHJ1Y3QgdGltZXNwZWMgZW5kO1xuJiM0MztcdFx0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0XHRpbnQgZmQgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19TVFJFQU0sIElQUFJPVE9fVENQKTtcbiYjNDM7XG4mIzQzO1x0XHRBU1NFUlRfTkUoZmQsIC0xKTtcbiYjNDM7XHRcdEFTU0VSVF9FUShjb25uZWN0KGZkLCAoc3RydWN0IHNvY2thZGRyICopXHUwMDI2c2VsZi1cdTAwM2VhZGRyLCBzaXplb2Yoc2VsZi1cdTAwM2VhZGRyKSksIDApO1xuJiM0MztcbiYjNDM7XHRcdEFTU0VSVF9FUShzZW5kX3BheWxvYWQoX21ldGFkYXRhLCBmZCwgc2VsZi1cdTAwM2VwYXlsb2FkLCBzZWxmLVx1MDAzZXBheWxvYWRfbGVuKSwgMCk7XG4mIzQzO1xuJiM0MztcdFx0QVNTRVJUX0VRKHNldHNvY2tvcHQoZmQsIFNPTF9TT0NLRVQsIFNPX1JDVlRJTUVPLCBcdTAwMjZ0aW1lbywgc2l6ZW9mKHRpbWVvKSksIDApO1xuJiM0MztcbiYjNDM7XHRcdGNsb2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDLCBcdTAwMjZiZWcpO1xuJiM0MztcdFx0QVNTRVJUX0VRKHJlY3Zmcm9tKGZkLCBpZ25vcmVkLCBzaXplb2YoaWdub3JlZCksIDAsIE5VTEwsIE5VTEwpLCAtMSk7XG4mIzQzO1x0XHRlcnIgPSBlcnJubztcbiYjNDM7XHRcdGNsb2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDLCBcdTAwMjZlbmQpO1xuJiM0MztcbiYjNDM7XHRcdEFTU0VSVF9FUShlcnIsIEVBR0FJTik7XG4mIzQzO1x0XHRBU1NFUlRfR0UodG9fbmFub3MoXHUwMDI2ZW5kKSAtIHRvX25hbm9zKFx1MDAyNmJlZyksIHRpbWVvLnR2X3VzZWMgKiAxMDAwKTtcbiYjNDM7XG4mIzQzO1x0XHRjbG9zZShmZCk7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztURVNUX0hBUk5FU1NfTUFJTlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDA0OjE0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O05FVF9TT0NLX01TRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RjcF9icGZfcmVjdm1zZ19wYXJzZXImIzM0OywKICAgICYjMzQ7dGNwX2JwZl9yZWN2bXNnJiMzNDssCiAgICAmIzM0O3RjcF9tc2dfd2FpdF9kYXRhJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRpbWVvdXQgaGFuZGxpbmcgaW4gQlBGIHNvY2ttYXAmIzM5O3MgcmVjdm1zZyBpbXBsZW1lbnRhdGlvbnMgKHRjcF9icGZfcmVjdm1zZyBhbmQgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcikuIEl0IGNvcnJlY3RseSB1cGRhdGVzIHRoZSByZW1haW5pbmcgdGltZW91dCB2YWx1ZSBpbiB0Y3BfbXNnX3dhaXRfZGF0YSBhbmQgcmV0cmllcyByZWFkaW5nIGlmIHRoZSB0aW1lb3V0IGhhc24mIzM5O3QgZXhwaXJlZC4gVGhpcyBpcyBmdW5jdGlvbmFsIGNvcmUgbmV0d29ya2luZyBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDAzYWY0MzU1YmU0MmY4ZWM0NmJiYjUzNDg3NjAzYzgwYjU1ODE5YjkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEp1bCAxNiAwNDoxNDoxNyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9icGYuYyBiL25ldC9pcHY0L3RjcF9icGYuYwppbmRleCBjYzBiZDczZjM2YjZkNi4uYWE1YzVkNzQxNTk5YTMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9icGYuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC90Y3BfYnBmLmMKQEAgLTE3OSw3ICYjNDM7MTc5LDcgQEAgRVhQT1JUX1NZTUJPTF9HUEwodGNwX2JwZl9zZW5kbXNnX3JlZGlyKTsKIAogI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTAogc3RhdGljIGludCB0Y3BfbXNnX3dhaXRfZGF0YShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2ssCi0JCQkgICAgIGxvbmcgdGltZW8pCiYjNDM7CQkJICAgICBsb25nICp0aW1lbykKIHsKIAlERUZJTkVfV0FJVF9GVU5DKHdhaXQsIHdva2VuX3dha2VfZnVuY3Rpb24pOwogCWludCByZXQgPSAwOwpAQCAtMTg3LDEyICYjNDM7MTg3LDEyIEBAIHN0YXRpYyBpbnQgdGNwX21zZ193YWl0X2RhdGEoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLAogCWlmIChzay0mZ3Q7c2tfc2h1dGRvd24gJmFtcDsgUkNWX1NIVVRET1dOKQogCQlyZXR1cm4gMTsKIAotCWlmICghdGltZW8pCiYjNDM7CWlmICghKnRpbWVvKQogCQlyZXR1cm4gcmV0OwogCiAJYWRkX3dhaXRfcXVldWUoc2tfc2xlZXAoc2spLCAmYW1wO3dhaXQpOwogCXNrX3NldF9iaXQoU09DS1dRX0FTWU5DX1dBSVREQVRBLCBzayk7Ci0JcmV0ID0gc2tfd2FpdF9ldmVudChzaywgJmFtcDt0aW1lbywKJiM0MzsJcmV0ID0gc2tfd2FpdF9ldmVudChzaywgdGltZW8sCiAJCQkgICAgIWxpc3RfZW1wdHkoJmFtcDtwc29jay0mZ3Q7aW5ncmVzc19tc2cpIHx8CiAJCQkgICAgIXNrYl9xdWV1ZV9lbXB0eV9sb2NrbGVzcygmYW1wO3NrLSZndDtza19yZWNlaXZlX3F1ZXVlKSwgJmFtcDt3YWl0KTsKIAlza19jbGVhcl9iaXQoU09DS1dRX0FTWU5DX1dBSVREQVRBLCBzayk7CkBAIC0yMjksNiAmIzQzOzIyOSw3IEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcihzdHJ1Y3Qgc29jayAqc2ssCiAJaW50IGNvcGllZF9mcm9tX3NlbGYgPSAwOwogCWludCBjb3BpZWQgPSAwOwogCXUzMiBzZXE7CiYjNDM7CWxvbmcgdGltZW87CiAKIAlpZiAodW5saWtlbHkoZmxhZ3MgJmFtcDsgTVNHX0VSUlFVRVVFKSkKIAkJcmV0dXJuIGluZXRfcmVjdl9lcnJvcihzaywgbXNnLCBsZW4pOwpAQCAtMjYyLDYgJiM0MzsyNjMsOCBAQCBzdGF0aWMgaW50IHRjcF9icGZfcmVjdm1zZ19wYXJzZXIoc3RydWN0IHNvY2sgKnNrLAogCQl9CiAJfQogCiYjNDM7CXRpbWVvID0gc29ja19yY3Z0aW1lbyhzaywgZmxhZ3MgJmFtcDsgTVNHX0RPTlRXQUlUKTsKJiM0MzsKIG1zZ19ieXRlc19yZWFkeToKIAljb3BpZWQgPSBfX3NrX21zZ19yZWN2bXNnKHNrLCBwc29jaywgbXNnLCBsZW4sIGZsYWdzLCAmYW1wO2NvcGllZF9mcm9tX3NlbGYpOwogCS8qIFRoZSB0eXBpY2FsIGNhc2UgZm9yIEVGQVVMVCBpcyB0aGUgc29ja2V0IHdhcyBncmFjZWZ1bGx5CkBAIC0yODAsNyAmIzQzOzI4Myw2IEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcihzdHJ1Y3Qgc29jayAqc2ssCiAJfQogCXNlcSAmIzQzOz0gY29waWVkX2Zyb21fc2VsZjsKIAlpZiAoIWNvcGllZCkgewotCQlsb25nIHRpbWVvOwogCQlpbnQgZGF0YTsKIAogCQlpZiAoc29ja19mbGFnKHNrLCBTT0NLX0RPTkUpKQpAQCAtMjk5LDcgJiM0MzszMDEsNiBAQCBzdGF0aWMgaW50IHRjcF9icGZfcmVjdm1zZ19wYXJzZXIoc3RydWN0IHNvY2sgKnNrLAogCQkJZ290byBvdXQ7CiAJCX0KIAotCQl0aW1lbyA9IHNvY2tfcmN2dGltZW8oc2ssIGZsYWdzICZhbXA7IE1TR19ET05UV0FJVCk7CiAJCWlmICghdGltZW8pIHsKIAkJCWNvcGllZCA9IC1FQUdBSU47CiAJCQlnb3RvIG91dDsKQEAgLTMxMCwxMyAmIzQzOzMxMSwxNSBAQCBzdGF0aWMgaW50IHRjcF9icGZfcmVjdm1zZ19wYXJzZXIoc3RydWN0IHNvY2sgKnNrLAogCQkJZ290byBvdXQ7CiAJCX0KIAotCQlkYXRhID0gdGNwX21zZ193YWl0X2RhdGEoc2ssIHBzb2NrLCB0aW1lbyk7CiYjNDM7CQlkYXRhID0gdGNwX21zZ193YWl0X2RhdGEoc2ssIHBzb2NrLCAmYW1wO3RpbWVvKTsKIAkJaWYgKGRhdGEgJmx0OyAwKSB7CiAJCQljb3BpZWQgPSBkYXRhOwogCQkJZ290byB1bmxvY2s7CiAJCX0KIAkJaWYgKGRhdGEgJmFtcDsmYW1wOyAhc2tfcHNvY2tfcXVldWVfZW1wdHkocHNvY2spKQogCQkJZ290byBtc2dfYnl0ZXNfcmVhZHk7CiYjNDM7CQlpZiAoIWRhdGEgJmFtcDsmYW1wOyB0aW1lbyAmZ3Q7IDApCiYjNDM7CQkJZ290byBtc2dfYnl0ZXNfcmVhZHk7CiAJCWNvcGllZCA9IC1FQUdBSU47CiAJfQogb3V0OgpAQCAtMzU1LDYgJiM0MzszNTgsNyBAQCBzdGF0aWMgaW50IHRjcF9icGZfcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbiwKIHsKIAlzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrOwogCWludCBjb3BpZWQsIHJldDsKJiM0MzsJbG9uZyB0aW1lbzsKIAogCWlmICh1bmxpa2VseShmbGFncyAmYW1wOyBNU0dfRVJSUVVFVUUpKQogCQlyZXR1cm4gaW5ldF9yZWN2X2Vycm9yKHNrLCBtc2csIGxlbik7CkBAIC0zNzEsMTQgJiM0MzszNzUsNTkgQEAgc3RhdGljIGludCB0Y3BfYnBmX3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sCiAJCXJldHVybiB0Y3BfcmVjdm1zZyhzaywgbXNnLCBsZW4sIGZsYWdzKTsKIAl9CiAJbG9ja19zb2NrKHNrKTsKJiM0MzsKJiM0MzsJdGltZW8gPSBzb2NrX3JjdnRpbWVvKHNrLCBmbGFncyAmYW1wOyBNU0dfRE9OVFdBSVQpOwomIzQzOwogbXNnX2J5dGVzX3JlYWR5OgogCWNvcGllZCA9IHNrX21zZ19yZWN2bXNnKHNrLCBwc29jaywgbXNnLCBsZW4sIGZsYWdzKTsKIAlpZiAoIWNvcGllZCkgewotCQlsb25nIHRpbWVvOwogCQlpbnQgZGF0YTsKIAotCQl0aW1lbyA9IHNvY2tfcmN2dGltZW8oc2ssIGZsYWdzICZhbXA7IE1TR19ET05UV0FJVCk7Ci0JCWRhdGEgPSB0Y3BfbXNnX3dhaXRfZGF0YShzaywgcHNvY2ssIHRpbWVvKTsKJiM0MzsJCWlmIChzb2NrX2ZsYWcoc2ssIFNPQ0tfRE9ORSkpIHsKJiM0MzsJCQlyZXQgPSAwOwomIzQzOwkJCWdvdG8gdW5sb2NrOwomIzQzOwkJfQomIzQzOwomIzQzOwkJaWYgKHNrLSZndDtza19lcnIpIHsKJiM0MzsJCQlpZiAoIXNrX3Bzb2NrX3F1ZXVlX2VtcHR5KHBzb2NrKSkKJiM0MzsJCQkJZ290byBtc2dfYnl0ZXNfcmVhZHk7CiYjNDM7CQkJaWYgKCFza2JfcXVldWVfZW1wdHkoJmFtcDtzay0mZ3Q7c2tfcmVjZWl2ZV9xdWV1ZSkpIHsKJiM0MzsJCQkJcmVsZWFzZV9zb2NrKHNrKTsKJiM0MzsJCQkJc2tfcHNvY2tfcHV0KHNrLCBwc29jayk7CiYjNDM7CQkJCXJldHVybiB0Y3BfcmVjdm1zZyhzaywgbXNnLCBsZW4sIGZsYWdzKTsKJiM0MzsJCQl9CiYjNDM7CQkJcmV0ID0gc29ja19lcnJvcihzayk7CiYjNDM7CQkJZ290byB1bmxvY2s7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlpZiAoc2stJmd0O3NrX3NodXRkb3duICZhbXA7IFJDVl9TSFVURE9XTikgewomIzQzOwkJCWlmICghc2tfcHNvY2tfcXVldWVfZW1wdHkocHNvY2spKQomIzQzOwkJCQlnb3RvIG1zZ19ieXRlc19yZWFkeTsKJiM0MzsJCQlpZiAoIXNrYl9xdWV1ZV9lbXB0eSgmYW1wO3NrLSZndDtza19yZWNlaXZlX3F1ZXVlKSkgewomIzQzOwkJCQlyZWxlYXNlX3NvY2soc2spOwomIzQzOwkJCQlza19wc29ja19wdXQoc2ssIHBzb2NrKTsKJiM0MzsJCQkJcmV0dXJuIHRjcF9yZWN2bXNnKHNrLCBtc2csIGxlbiwgZmxhZ3MpOwomIzQzOwkJCX0KJiM0MzsJCQlyZXQgPSAwOwomIzQzOwkJCWdvdG8gdW5sb2NrOwomIzQzOwkJfQomIzQzOwomIzQzOwkJaWYgKHNrLSZndDtza19zdGF0ZSA9PSBUQ1BfQ0xPU0UpIHsKJiM0MzsJCQlyZXQgPSAtRU5PVENPTk47CiYjNDM7CQkJZ290byB1bmxvY2s7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlpZiAoIXRpbWVvKSB7CiYjNDM7CQkJcmV0ID0gLUVBR0FJTjsKJiM0MzsJCQlnb3RvIHVubG9jazsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgewomIzQzOwkJCXJldCA9IHNvY2tfaW50cl9lcnJubyh0aW1lbyk7CiYjNDM7CQkJZ290byB1bmxvY2s7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlkYXRhID0gdGNwX21zZ193YWl0X2RhdGEoc2ssIHBzb2NrLCAmYW1wO3RpbWVvKTsKIAkJaWYgKGRhdGEgJmx0OyAwKSB7CiAJCQlyZXQgPSBkYXRhOwogCQkJZ290byB1bmxvY2s7CkBAIC0zOTAsNiAmIzQzOzQzOSw4IEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLAogCQkJc2tfcHNvY2tfcHV0KHNrLCBwc29jayk7CiAJCQlyZXR1cm4gdGNwX3JlY3Ztc2coc2ssIG1zZywgbGVuLCBmbGFncyk7CiAJCX0KJiM0MzsJCWlmICghZGF0YSAmYW1wOyZhbXA7IHRpbWVvICZndDsgMCkKJiM0MzsJCQlnb3RvIG1zZ19ieXRlc19yZWFkeTsKIAkJY29waWVkID0gLUVBR0FJTjsKIAl9CiAJcmV0ID0gY29waWVkOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0Ly5naXRpZ25vcmUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvLmdpdGlnbm9yZQppbmRleCBjOWY0NjAzMWFjNzNiMi4uYTE4NDBhNWQ0NWY2N2MgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC8uZ2l0aWdub3JlCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC8uZ2l0aWdub3JlCkBAIC0zOSw2ICYjNDM7MzksOCBAQCBza19jb25uZWN0X3plcm9fYWRkcgogc2tfc29fcGVla19vZmYKIHNrZl9uZXRfb2ZmCiBzb2NrZXQKJiM0Mztzb2NrbWFwX3JlY3Zmcm9tCiYjNDM7c29ja21hcF9yZWN2ZnJvbS5icGYubwogc29faW5jb21pbmdfY3B1CiBzb19uZXRuc19jb29raWUKIHNvX3Jjdl9saXN0ZW5lcgpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L01ha2VmaWxlCmluZGV4IDcwOGQ5NjBhZTA3ZDViLi5kZDA0YjgwNzI1YzY3OSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9NYWtlZmlsZQpAQCAtMTkxLDYgJiM0MzsxOTEsNyBAQCBURVNUX0dFTl9QUk9HUyA6PSBcCiAJc2tfY29ubmVjdF96ZXJvX2FkZHIgXAogCXNrX3NvX3BlZWtfb2ZmIFwKIAlzb19pbmNvbWluZ19jcHUgXAomIzQzOwlzb2NrbWFwX3JlY3Zmcm9tIFwKIAl0YXAgXAogCXRjcF9wb3J0X3NoYXJlIFwKIAl0bHMgXApAQCAtMjM4LDMgJiM0MzsyMzksNyBAQCAkKE9VVFBVVCkvYmluZF9iaGFzaDogTERMSUJTICYjNDM7PSAtbHB0aHJlYWQKICQoT1VUUFVUKS9pb191cmluZ196ZXJvY29weV90eDogQ0ZMQUdTICYjNDM7PSAtSS4uLy4uLy4uL2luY2x1ZGUvCiAKIGluY2x1ZGUgYnBmLm1rCiYjNDM7CiYjNDM7JChPVVRQVVQpL3NvY2ttYXBfcmVjdmZyb206ICQoQlBGT0JKKQomIzQzOyQoT1VUUFVUKS9zb2NrbWFwX3JlY3Zmcm9tOiBMRExJQlMgJiM0Mzs9ICQoQlBGT0JKKSAtbGVsZiAtbHogLWxwdGhyZWFkCiYjNDM7JChPVVRQVVQpL3NvY2ttYXBfcmVjdmZyb206IENGTEFHUyAmIzQzOz0gLUkkKE9VVFBVVCkvdG9vbHMvaW5jbHVkZQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3NvY2ttYXBfcmVjdmZyb20uYnBmLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvc29ja21hcF9yZWN2ZnJvbS5icGYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uZmVjNDcwYzczOGYxZTgKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvc29ja21hcF9yZWN2ZnJvbS5icGYuYwpAQCAtMCwwICYjNDM7MSwzMSBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2JwZi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDticGYvYnBmX2hlbHBlcnMuaCZndDsKJiM0MzsKJiM0MzsjZGVmaW5lIEFGX0lORVQgMgomIzQzOwomIzQzO2NoYXIgTElDRU5TRVtdIFNFQygmIzM0O2xpY2Vuc2UmIzM0OykgPSAmIzM0O0dQTCYjMzQ7OwomIzQzOwomIzQzO3N0cnVjdCB7CiYjNDM7CV9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfU09DS0hBU0gpOwomIzQzOwlfX3VpbnQobWF4X2VudHJpZXMsIDEwMjQpOwomIzQzOwlfX3R5cGUoa2V5LCBfX3U2NCk7CiYjNDM7CV9fdHlwZSh2YWx1ZSwgX191NjQpOwomIzQzOwomIzQzO30gbWFwX3NvY2tzIFNFQygmIzM0Oy5tYXBzJiMzNDspOwomIzQzOwomIzQzO1NFQygmIzM0O3NvY2tvcHMmIzM0OykgaW50IG9uX3NvY2tvcHMoc3RydWN0IGJwZl9zb2NrX29wcyAqY3R4KQomIzQzO3sKJiM0MzsJaWYgKGN0eC0mZ3Q7ZmFtaWx5ID09IEFGX0lORVQgJmFtcDsmYW1wOyBjdHgtJmd0O29wID09IEJQRl9TT0NLX09QU19BQ1RJVkVfRVNUQUJMSVNIRURfQ0IpIHsKJiM0MzsJCV9fdTY0IGNvb2tpZSA9IGJwZl9nZXRfc29ja2V0X2Nvb2tpZShjdHgpOwomIzQzOwomIzQzOwkJYnBmX3NvY2tfaGFzaF91cGRhdGUoY3R4LCAmYW1wO21hcF9zb2NrcywgJmFtcDtjb29raWUsIEJQRl9OT0VYSVNUKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7c2tfc2tiL3N0cmVhbV92ZXJkaWN0JiMzNDspIGludCBvbl9yZWN2KHN0cnVjdCBfX3NrX2J1ZmYgKmN0eCkKJiM0Mzt7CiYjNDM7CXJldHVybiBTS19QQVNTOwomIzQzO30KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9zb2NrbWFwX3JlY3Zmcm9tLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvc29ja21hcF9yZWN2ZnJvbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi4yNTY1N2ZjM2RiY2QyMgotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9zb2NrbWFwX3JlY3Zmcm9tLmMKQEAgLTAsMCAmIzQzOzEsMjk5IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsjaW5jbHVkZSAmbHQ7YXJwYS9pbmV0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2JwZi9saWJicGYuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7ZmNudGwuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7cHRocmVhZC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdGRhdG9taWMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3lzL3NvY2tldC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzeXMvdGltZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDt1bmlzdGQuaCZndDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0O2tzZWxmdGVzdF9oYXJuZXNzLmgmIzM0OwomIzQzOwomIzQzOyNkZWZpbmUgTUFYX0lURVJBVElPTlMgMTAwCiYjNDM7I2RlZmluZSBQQVlMT0FEX0VORCAmIzM5O2UmIzM5OwomIzQzOwomIzQzO3N0YXRpYyBpbnQgc3RhcnRfbGlzdGVuaW5nKHN0cnVjdCBfX3Rlc3RfbWV0YWRhdGEgKl9tZXRhZGF0YSwgdWludDE2X3QgKnBvcnQpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgc29ja2FkZHJfaW4gYWRkcjsKJiM0MzsJc29ja2xlbl90IGFkZHJsZW47CiYjNDM7CWludCBmZDsKJiM0MzsKJiM0MzsJbWVtc2V0KCZhbXA7YWRkciwgMCwgc2l6ZW9mKGFkZHIpKTsKJiM0MzsJYWRkci5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKJiM0MzsJYWRkci5zaW5fYWRkci5zX2FkZHIgPSBJTkFERFJfQU5ZOwomIzQzOwomIzQzOwlmZCA9IHNvY2tldChBRl9JTkVULCBTT0NLX1NUUkVBTSwgSVBQUk9UT19UQ1ApOwomIzQzOwomIzQzOwlBU1NFUlRfTkUoZmQsIC0xKTsKJiM0MzsJQVNTRVJUX0VRKGJpbmQoZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKikmYW1wO2FkZHIsIHNpemVvZihhZGRyKSksIDApOwomIzQzOwlBU1NFUlRfRVEobGlzdGVuKGZkLCA1KSwgMCk7CiYjNDM7CiYjNDM7CWFkZHJsZW4gPSBzaXplb2YoYWRkcik7CiYjNDM7CiYjNDM7CUFTU0VSVF9FUShnZXRzb2NrbmFtZShmZCwgKHN0cnVjdCBzb2NrYWRkciAqKSZhbXA7YWRkciwgJmFtcDthZGRybGVuKSwgMCk7CiYjNDM7CiYjNDM7CSpwb3J0ID0gYWRkci5zaW5fcG9ydDsKJiM0MzsKJiM0MzsJcmV0dXJuIGZkOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBwcm9jZXNzX2NsaWVudChpbnQgZmQsIGF0b21pY19pbnQgKnJ1bm5pbmcsIGJvb2wgKmZhaWxlZCkKJiM0Mzt7CiYjNDM7CWNoYXIgYnVmWzEwMjRdOwomIzQzOwlzdHJ1Y3QgdGltZXZhbCB0aW1lbzsKJiM0MzsKJiM0MzsJdGltZW8udHZfc2VjID0gMDsKJiM0MzsJdGltZW8udHZfdXNlYyA9IDEwMDA7CiYjNDM7CiYjNDM7CWlmIChzZXRzb2Nrb3B0KGZkLCBTT0xfU09DS0VULCBTT19SQ1ZUSU1FTywgJmFtcDt0aW1lbywgc2l6ZW9mKHRpbWVvKSkpCiYjNDM7CQkqZmFpbGVkID0gdHJ1ZTsKJiM0MzsKJiM0MzsJd2hpbGUgKGF0b21pY19sb2FkKHJ1bm5pbmcpKSB7CiYjNDM7CQlzc2l6ZV90IGxlbiA9IHJlY3Zmcm9tKGZkLCBidWYsIHNpemVvZihidWYpLCAwLCBOVUxMLCBOVUxMKTsKJiM0MzsKJiM0MzsJCWlmIChsZW4gPT0gLTEpIHsKJiM0MzsJCQlpZiAoZXJybm8gIT0gRUFHQUlOICZhbXA7JmFtcDsgZXJybm8gIT0gRUlOVFIpCiYjNDM7CQkJCSpmYWlsZWQgPSB0cnVlOwomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJfQomIzQzOwomIzQzOwkJaWYgKGxlbiAmbHQ7PSAwIHx8IGJ1ZltsZW4gLSAxXSA9PSBQQVlMT0FEX0VORCkKJiM0MzsJCQlicmVhazsKJiM0MzsJfQomIzQzOwomIzQzOwlzZW5kKGZkLCAmIzM0O3Rlc3QmIzM0OywgNCwgTVNHX05PU0lHTkFMKTsKJiM0MzsKJiM0MzsJY2xvc2UoZmQpOwomIzQzO30KJiM0MzsKJiM0MztzdHJ1Y3QgYnBmX3QgewomIzQzOwlzdHJ1Y3QgYnBmX29iamVjdCAqb2JqOwomIzQzOwlzdHJ1Y3QgYnBmX2xpbmsgKm9uX3NvY2tvcHM7CiYjNDM7CXN0cnVjdCBicGZfbGluayAqb25fcmVjdjsKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHNldHVwX2JwZihzdHJ1Y3QgX190ZXN0X21ldGFkYXRhICpfbWV0YWRhdGEsIGNvbnN0IGNoYXIgKnBhdGgsIGJvb2wgcmVjdiwKJiM0MzsJCQkJCQlzdHJ1Y3QgYnBmX3QgKmJwZikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZzsKJiM0MzsJaW50IGNncm91cDsKJiM0MzsKJiM0MzsJbWVtc2V0KGJwZiwgMCwgc2l6ZW9mKCpicGYpKTsKJiM0MzsJYnBmLSZndDtvYmogPSBicGZfb2JqZWN0X19vcGVuX2ZpbGUocGF0aCwgTlVMTCk7CiYjNDM7CiYjNDM7CUFTU0VSVF9ORShicGYtJmd0O29iaiwgTlVMTCk7CiYjNDM7CUFTU0VSVF9FUShicGZfb2JqZWN0X19sb2FkKGJwZi0mZ3Q7b2JqKSwgMCk7CiYjNDM7CiYjNDM7CXByb2cgPSBicGZfb2JqZWN0X19maW5kX3Byb2dyYW1fYnlfbmFtZShicGYtJmd0O29iaiwgJiMzNDtvbl9zb2Nrb3BzJiMzNDspOwomIzQzOwlBU1NFUlRfTkUocHJvZywgTlVMTCk7CiYjNDM7CiYjNDM7CWNncm91cCA9IG9wZW4oJiMzNDsvc3lzL2ZzL2Nncm91cCYjMzQ7LCBPX1JET05MWSk7CiYjNDM7CUFTU0VSVF9ORShjZ3JvdXAsIC0xKTsKJiM0MzsKJiM0MzsJYnBmLSZndDtvbl9zb2Nrb3BzID0gYnBmX3Byb2dyYW1fX2F0dGFjaF9jZ3JvdXAocHJvZywgY2dyb3VwKTsKJiM0MzsJY2xvc2UoY2dyb3VwKTsKJiM0MzsKJiM0MzsJQVNTRVJUX05FKGJwZi0mZ3Q7b25fc29ja29wcywgTlVMTCk7CiYjNDM7CiYjNDM7CWlmIChyZWN2KSB7CiYjNDM7CQlzdHJ1Y3QgYnBmX21hcCAqbWFwID0gYnBmX29iamVjdF9fZmluZF9tYXBfYnlfbmFtZShicGYtJmd0O29iaiwgJiMzNDttYXBfc29ja3MmIzM0Oyk7CiYjNDM7CiYjNDM7CQlBU1NFUlRfTkUobWFwLCBOVUxMKTsKJiM0MzsKJiM0MzsJCXByb2cgPSBicGZfb2JqZWN0X19maW5kX3Byb2dyYW1fYnlfbmFtZShicGYtJmd0O29iaiwgJiMzNDtvbl9yZWN2JiMzNDspOwomIzQzOwkJQVNTRVJUX05FKHByb2csIE5VTEwpOwomIzQzOwomIzQzOwkJYnBmLSZndDtvbl9yZWN2ID0gYnBmX3Byb2dyYW1fX2F0dGFjaF9zb2NrbWFwKHByb2csIGJwZl9tYXBfX2ZkKG1hcCkpOwomIzQzOwkJQVNTRVJUX05FKGJwZi0mZ3Q7b25fcmVjdiwgTlVMTCk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RydWN0IHNlcnZlcl90IHsKJiM0MzsJaW50IGZkOwomIzQzOwlhdG9taWNfaW50IHJ1bm5pbmc7CiYjNDM7CXB0aHJlYWRfdCB0aHJlYWQ7CiYjNDM7CWJvb2wgdGhyZWFkX2NyZWF0ZWQ7CiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgdm9pZCAqcnVuX3NlcnZlcih2b2lkICphcmcpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgc2VydmVyX3QgKnNlcnZlciA9IGFyZzsKJiM0MzsJYm9vbCBmYWlsZWQgPSBmYWxzZTsKJiM0MzsKJiM0MzsJd2hpbGUgKGF0b21pY19sb2FkKCZhbXA7c2VydmVyLSZndDtydW5uaW5nKSkgewomIzQzOwkJaW50IGNsaWVudF9mZCA9IGFjY2VwdChzZXJ2ZXItJmd0O2ZkLCBOVUxMLCBOVUxMKTsKJiM0MzsKJiM0MzsJCWlmIChjbGllbnRfZmQgPT0gLTEpIHsKJiM0MzsJCQlpZiAoIWF0b21pY19sb2FkKCZhbXA7c2VydmVyLSZndDtydW5uaW5nKSkKJiM0MzsJCQkJYnJlYWs7CiYjNDM7CiYjNDM7CQkJY29udGludWU7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlwcm9jZXNzX2NsaWVudChjbGllbnRfZmQsICZhbXA7c2VydmVyLSZndDtydW5uaW5nLCAmYW1wO2ZhaWxlZCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKGZhaWxlZCkKJiM0MzsJCXJldHVybiAodm9pZCAqKTE7CiYjNDM7CiYjNDM7CXJldHVybiBOVUxMOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHNlbmRfcGF5bG9hZChzdHJ1Y3QgX190ZXN0X21ldGFkYXRhICpfbWV0YWRhdGEsIGludCBmZCwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKQomIzQzO3sKJiM0MzsJc2l6ZV90IHJlbWFpbmluZyA9IGxlbjsKJiM0MzsKJiM0MzsJZG8gewomIzQzOwkJc3NpemVfdCBieXRlcyA9IHdyaXRlKGZkLCBidWYgJiM0MzsgKGxlbiAtIHJlbWFpbmluZyksIHJlbWFpbmluZyk7CiYjNDM7CiYjNDM7CQlpZiAoYnl0ZXMgJmx0OyAwKSB7CiYjNDM7CQkJaWYgKGVycm5vID09IEVJTlRSKQomIzQzOwkJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCQlyZXR1cm4gLTE7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlyZW1haW5pbmcgLT0gYnl0ZXM7CiYjNDM7CX0gd2hpbGUgKHJlbWFpbmluZyk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztGSVhUVVJFKHNvY2ttYXBfcmVjdmZyb20pCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgc2VydmVyX3Qgc2VydmVyOwomIzQzOwlzdHJ1Y3Qgc29ja2FkZHJfaW4gYWRkcjsKJiM0MzsJc3RydWN0IGJwZl90IGJwZjsKJiM0MzsJY2hhciAqcGF5bG9hZDsKJiM0MzsJc2l6ZV90IHBheWxvYWRfbGVuOwomIzQzO307CiYjNDM7CiYjNDM7RklYVFVSRV9WQVJJQU5UKHNvY2ttYXBfcmVjdmZyb20pCiYjNDM7ewomIzQzOwlib29sIHdpdGhfcmVjdjsKJiM0Mzt9OwomIzQzOwomIzQzO0ZJWFRVUkVfVkFSSUFOVF9BREQoc29ja21hcF9yZWN2ZnJvbSwgcmVjdm1zZykKJiM0Mzt7CiYjNDM7CS53aXRoX3JlY3YgPSBmYWxzZQomIzQzO307CiYjNDM7CiYjNDM7RklYVFVSRV9WQVJJQU5UX0FERChzb2NrbWFwX3JlY3Zmcm9tLCByZWN2bXNnX3BhcnNlcikKJiM0Mzt7CiYjNDM7CS53aXRoX3JlY3YgPSB0cnVlCiYjNDM7fTsKJiM0MzsKJiM0MztGSVhUVVJFX1NFVFVQKHNvY2ttYXBfcmVjdmZyb20pCiYjNDM7ewomIzQzOwltZW1zZXQoJmFtcDtzZWxmLSZndDtzZXJ2ZXIsIDAsIHNpemVvZihzZWxmLSZndDtzZXJ2ZXIpKTsKJiM0MzsJc2VsZi0mZ3Q7c2VydmVyLmZkID0gLTE7CiYjNDM7CiYjNDM7CW1lbXNldCgmYW1wO3NlbGYtJmd0O2FkZHIsIDAsIHNpemVvZihzZWxmLSZndDthZGRyKSk7CiYjNDM7CiYjNDM7CXNlbGYtJmd0O3BheWxvYWRfbGVuID0gMTAyNCAqIDEwMjQgKiAyNTsKJiM0MzsJc2VsZi0mZ3Q7cGF5bG9hZCA9IG1hbGxvYyhzZWxmLSZndDtwYXlsb2FkX2xlbik7CiYjNDM7CUFTU0VSVF9ORShzZWxmLSZndDtwYXlsb2FkLCBOVUxMKTsKJiM0MzsKJiM0MzsJbWVtc2V0KHNlbGYtJmd0O3BheWxvYWQsIDAsIHNlbGYtJmd0O3BheWxvYWRfbGVuKTsKJiM0MzsJc2VsZi0mZ3Q7cGF5bG9hZFtzZWxmLSZndDtwYXlsb2FkX2xlbiAtIDFdID0gUEFZTE9BRF9FTkQ7CiYjNDM7CiYjNDM7CXNldHVwX2JwZihfbWV0YWRhdGEsICYjMzQ7c29ja21hcF9yZWN2ZnJvbS5icGYubyYjMzQ7LCB2YXJpYW50LSZndDt3aXRoX3JlY3YsICZhbXA7c2VsZi0mZ3Q7YnBmKTsKJiM0MzsJYXRvbWljX3N0b3JlKCZhbXA7c2VsZi0mZ3Q7c2VydmVyLnJ1bm5pbmcsIDEpOwomIzQzOwlzZWxmLSZndDtzZXJ2ZXIuZmQgPSBzdGFydF9saXN0ZW5pbmcoX21ldGFkYXRhLCAmYW1wO3NlbGYtJmd0O2FkZHIuc2luX3BvcnQpOwomIzQzOwomIzQzOwlzZWxmLSZndDthZGRyLnNpbl9mYW1pbHkgPSBBRl9JTkVUOwomIzQzOwlzZWxmLSZndDthZGRyLnNpbl9hZGRyLnNfYWRkciA9IGh0b25sKElOQUREUl9MT09QQkFDSyk7CiYjNDM7CiYjNDM7CUFTU0VSVF9FUShwdGhyZWFkX2NyZWF0ZSgmYW1wO3NlbGYtJmd0O3NlcnZlci50aHJlYWQsIE5VTEwsICZhbXA7cnVuX3NlcnZlciwgJmFtcDtzZWxmLSZndDtzZXJ2ZXIpLCAwKTsKJiM0MzsJc2VsZi0mZ3Q7c2VydmVyLnRocmVhZF9jcmVhdGVkID0gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiYjNDM7RklYVFVSRV9URUFSRE9XTihzb2NrbWFwX3JlY3Zmcm9tKQomIzQzO3sKJiM0MzsJYXRvbWljX3N0b3JlKCZhbXA7c2VsZi0mZ3Q7c2VydmVyLnJ1bm5pbmcsIDApOwomIzQzOwomIzQzOwlpZiAoc2VsZi0mZ3Q7c2VydmVyLmZkICE9IC0xKQomIzQzOwkJc2h1dGRvd24oc2VsZi0mZ3Q7c2VydmVyLmZkLCBTSFVUX1JEKTsKJiM0MzsKJiM0MzsJaWYgKHNlbGYtJmd0O3NlcnZlci50aHJlYWRfY3JlYXRlZCkgewomIzQzOwkJdm9pZCAqcmV0dmFsID0gTlVMTDsKJiM0MzsKJiM0MzsJCXB0aHJlYWRfam9pbihzZWxmLSZndDtzZXJ2ZXIudGhyZWFkLCAmYW1wO3JldHZhbCk7CiYjNDM7CQlFWFBFQ1RfRVEocmV0dmFsLCBOVUxMKTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoc2VsZi0mZ3Q7c2VydmVyLmZkICE9IC0xKQomIzQzOwkJY2xvc2Uoc2VsZi0mZ3Q7c2VydmVyLmZkKTsKJiM0MzsKJiM0MzsJZnJlZShzZWxmLSZndDtwYXlsb2FkKTsKJiM0MzsJYnBmX2xpbmtfX2Rlc3Ryb3koc2VsZi0mZ3Q7YnBmLm9uX3NvY2tvcHMpOwomIzQzOwomIzQzOwlpZiAoc2VsZi0mZ3Q7YnBmLm9uX3JlY3YpCiYjNDM7CQlicGZfbGlua19fZGVzdHJveShzZWxmLSZndDticGYub25fcmVjdik7CiYjNDM7CiYjNDM7CWJwZl9vYmplY3RfX2Nsb3NlKHNlbGYtJmd0O2JwZi5vYmopOwomIzQzO30KJiM0MzsKJiM0MztURVNUX0Yoc29ja21hcF9yZWN2ZnJvbSwgbm9fdGltZW91dCkKJiM0Mzt7CiYjNDM7CWNoYXIgaWdub3JlZFsxMjhdOwomIzQzOwomIzQzOwlmb3IgKGludCBpID0gMDsgaSAmbHQ7IE1BWF9JVEVSQVRJT05TOyAmIzQzOyYjNDM7aSkgewomIzQzOwkJaW50IGZkID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfU1RSRUFNLCBJUFBST1RPX1RDUCk7CiYjNDM7CiYjNDM7CQlBU1NFUlRfTkUoZmQsIC0xKTsKJiM0MzsJCUFTU0VSVF9FUShjb25uZWN0KGZkLCAoc3RydWN0IHNvY2thZGRyICopJmFtcDtzZWxmLSZndDthZGRyLCBzaXplb2Yoc2VsZi0mZ3Q7YWRkcikpLCAwKTsKJiM0MzsKJiM0MzsJCUFTU0VSVF9FUShzZW5kX3BheWxvYWQoX21ldGFkYXRhLCBmZCwgc2VsZi0mZ3Q7cGF5bG9hZCwgc2VsZi0mZ3Q7cGF5bG9hZF9sZW4pLCAwKTsKJiM0MzsKJiM0MzsJCWlmIChyZWN2ZnJvbShmZCwgaWdub3JlZCwgc2l6ZW9mKGlnbm9yZWQpLCAwLCBOVUxMLCBOVUxMKSAmbHQ7IDApCiYjNDM7CQkJQVNTRVJUX05FKGVycm5vLCBFQUdBSU4pOwomIzQzOwomIzQzOwkJY2xvc2UoZmQpOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQ2NF90IHRvX25hbm9zKHN0cnVjdCB0aW1lc3BlYyAqdGltZSkKJiM0Mzt7CiYjNDM7CXJldHVybiAodGltZS0mZ3Q7dHZfc2VjICogMTAwMDAwMDAwMExMKSAmIzQzOyB0aW1lLSZndDt0dl9uc2VjOwomIzQzO30KJiM0MzsKJiM0MztURVNUX0Yoc29ja21hcF9yZWN2ZnJvbSwgd2l0aF90aW1lb3V0KQomIzQzO3sKJiM0MzsJY2hhciBpZ25vcmVkWzEyOF07CiYjNDM7CXN0cnVjdCB0aW1ldmFsIHRpbWVvOwomIzQzOwomIzQzOwl0aW1lby50dl9zZWMgPSAwOwomIzQzOwl0aW1lby50dl91c2VjID0gNTAwMDsKJiM0MzsKJiM0MzsJLyogcmVtb3ZlIHRoZSBwYXlsb2FkIGVuZCBkZWxpbWl0ZXIgc28gdGhlIHNlcnZlciBuZXZlciByZXNwb25kcyBhbmQgcmVjdmZyb20gdGltZXMgb3V0LiAqLwomIzQzOwlzZWxmLSZndDtwYXlsb2FkW3NlbGYtJmd0O3BheWxvYWRfbGVuIC0gMV0gPSAwOwomIzQzOwomIzQzOwlmb3IgKGludCBpID0gMDsgaSAmbHQ7IE1BWF9JVEVSQVRJT05TOyAmIzQzOyYjNDM7aSkgewomIzQzOwkJc3RydWN0IHRpbWVzcGVjIGJlZzsKJiM0MzsJCXN0cnVjdCB0aW1lc3BlYyBlbmQ7CiYjNDM7CQlpbnQgZXJyOwomIzQzOwomIzQzOwkJaW50IGZkID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfU1RSRUFNLCBJUFBST1RPX1RDUCk7CiYjNDM7CiYjNDM7CQlBU1NFUlRfTkUoZmQsIC0xKTsKJiM0MzsJCUFTU0VSVF9FUShjb25uZWN0KGZkLCAoc3RydWN0IHNvY2thZGRyICopJmFtcDtzZWxmLSZndDthZGRyLCBzaXplb2Yoc2VsZi0mZ3Q7YWRkcikpLCAwKTsKJiM0MzsKJiM0MzsJCUFTU0VSVF9FUShzZW5kX3BheWxvYWQoX21ldGFkYXRhLCBmZCwgc2VsZi0mZ3Q7cGF5bG9hZCwgc2VsZi0mZ3Q7cGF5bG9hZF9sZW4pLCAwKTsKJiM0MzsKJiM0MzsJCUFTU0VSVF9FUShzZXRzb2Nrb3B0KGZkLCBTT0xfU09DS0VULCBTT19SQ1ZUSU1FTywgJmFtcDt0aW1lbywgc2l6ZW9mKHRpbWVvKSksIDApOwomIzQzOwomIzQzOwkJY2xvY2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUMsICZhbXA7YmVnKTsKJiM0MzsJCUFTU0VSVF9FUShyZWN2ZnJvbShmZCwgaWdub3JlZCwgc2l6ZW9mKGlnbm9yZWQpLCAwLCBOVUxMLCBOVUxMKSwgLTEpOwomIzQzOwkJZXJyID0gZXJybm87CiYjNDM7CQljbG9ja19nZXR0aW1lKENMT0NLX01PTk9UT05JQywgJmFtcDtlbmQpOwomIzQzOwomIzQzOwkJQVNTRVJUX0VRKGVyciwgRUFHQUlOKTsKJiM0MzsJCUFTU0VSVF9HRSh0b19uYW5vcygmYW1wO2VuZCkgLSB0b19uYW5vcygmYW1wO2JlZyksIHRpbWVvLnR2X3VzZWMgKiAxMDAwKTsKJiM0MzsKJiM0MzsJCWNsb3NlKGZkKTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztURVNUX0hBUk5FU1NfTUFJTgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwNDoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NDU1CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjY3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFRDUCBCUEYgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBuZXQvaXB2NC90Y3BfYnBmLmNgLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIGluIGhvdyBgdGNwX21zZ193YWl0X2RhdGFgIGhhbmRsZXMgdGhlIHRpbWVvdXQ7IGl0JiMzOTtzIG5vdyB0YWtpbmcgYSBwb2ludGVyIHRvIGB0aW1lb2AgaW5zdGVhZCBvZiB0aGUgdmFsdWUgaXRzZWxmLiBUaGF0JiMzOTtzIGEgZnVuZGFtZW50YWwgc2hpZnQgaW4gaG93IHRoZSBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgdGltZW91dCBtZWNoYW5pc20sIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zLiBUaGUgcGF0Y2ggYWxzbyB1cGRhdGVzIGB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyYCBhbmQgYHRjcF9icGZfcmVjdm1zZ2AsIHNwZWNpZmljYWxseSB0byBwYXNzIHRoZSBhZGRyZXNzIG9mIGB0aW1lb2AgYW5kIGhhbmRsZSBhIHBvdGVudGlhbCBqdW1wIHRvIGBtc2dfYnl0ZXNfcmVhZHlgLiBUaGlzIGlzIG1ha2luZyBtZSB0aGluayBhYm91dCBob3cgdGhlIHRpbWVvdXQgaXMgdXNlZCBpbiB0aGUgQlBGIHNvY2ttYXAgY29udGV4dCDigJMgaXMgaXQgYW4gb3B0aW1pemF0aW9uLCBhIGJ1ZyBmaXgsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaGUgaW50cm9kdWN0aW9uIG9mIHRoZSBgc29ja21hcF9yZWN2ZnJvbWAgc2VsZnRlc3QgaXMgYSBnb29kIHNpZ24sIGJ1dCBJIG5lZWQgdG8gY29uZmlybSBpdHMgY292ZXJhZ2UuCgpNeSBpbW1lZGlhdGUgY29uY2VybiBpcyByZWFjaGFiaWxpdHkgYW5kIGZ1bmN0aW9uYWxpdHkuIFRoZSBjaGFuZ2VzIGRpcmVjdGx5IGltcGFjdCBgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcmAgYW5kIGB0Y3BfYnBmX3JlY3Ztc2dgLCB3aGljaCBhcmUgb2J2aW91c2x5IGNyaXRpY2FsIHRvIHRoZSBCUEYgc29ja21hcCBmdW5jdGlvbmFsaXR5LCBzbyBhIGRlZXAgZGl2ZSBpbnRvIHRoZSBCUEYgaW1wbGVtZW50YXRpb24gaXMgcmVxdWlyZWQuIEdpdmVuIHRoYXQgdGhpcyBpcyB0b3VjaGluZyBjb3JlIG5ldHdvcmtpbmcgYW5kIEJQRiBsb2dpYywgZnV6emluZyBzZWVtcyBsaWtlIGEgdmVyeSBnb29kIGlkZWEuCgpOZXh0LCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgYnVpbGQgY29uZmlndXJhdGlvbi4gSSYjMzk7bSBnb2luZyB0byBoYXZlIHRvIGNoZWNrIHdoYXQmIzM5O3MgZ29pbmcgb24gaW4gYG5ldC9pcHY0L01ha2VmaWxlYC4gSSYjMzk7bSBndWVzc2luZyBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBhIGdpdmVuLCBidXQgSSYjMzk7bGwgYWxzbyBoYXZlIHRvIHNlZSBpZiBgQ09ORklHX05FVF9TT0NLX01TR2Agb3IgYENPTkZJR19CUEZfU1RSRUFNX1BBUlNFUmAgYXJlIGFsc28gZGVwZW5kZW5jaWVzLiBVbmRlcnN0YW5kaW5nIHRoZSBidWlsZCBjb25maWd1cmF0aW9uIHdpbGwgdGVsbCBtZSBob3cgdG8gYnVpbGQgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwNDoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Y3BfYnBmJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvTWFrZWZpbGU9NjI9b2JqLSQoQ09ORklHX1RDUF9DT05HX0lMTElOT0lTKSAmIzQzOz0gdGNwX2lsbGlub2lzLm9cbm5ldC9pcHY0L01ha2VmaWxlOjYzOm9iai0kKENPTkZJR19ORVRfU09DS19NU0cpICYjNDM7PSB0Y3BfYnBmLm9cbm5ldC9pcHY0L01ha2VmaWxlLTY0LW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IHVkcF9icGYub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDA0OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgyMzgKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipLZXJuZWwgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMgZm9yIFNvY2tldCBGaWx0ZXJpbmcqKgoKUmlnaHQsIHNvIEkgc2VlIHdlIGFic29sdXRlbHkgbmVlZCBgQ09ORklHX05FVF9TT0NLX01TR2AgZW5hYmxlZC4gVGhhdCYjMzk7cyBhIGdpdmVuOyBpdCYjMzk7cyB0aGUgZm91bmRhdGlvbi4gTm93LCBzaW5jZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHNvY2tldHMsIHBhcnRpY3VsYXJseSB0aGUgcG90ZW50aWFsIGZvciBCUEYgZmlsdGVyaW5nIHdpdGhpbiB0aGUgVENQIHN0YWNrLCBteSBuZXh0IG1vdmUgaXMgdG8gZGl2ZSBzdHJhaWdodCBpbnRvIGB0Y3BfYnBmLmNgLiBJIG5lZWQgdG8gZW5zdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IG90aGVyLCBsZXNzIG9idmlvdXMgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgbHVya2luZyB3aXRoaW4gdGhhdCBmaWxlIHRoYXQgSSBtaWdodCBuZWVkIHRvIGNvbnNpZGVyLiBXZSBjYW4mIzM5O3QgaGF2ZSBhbnkgc3VycHJpc2VzIHdoZW4gd2Ugc3RhcnQgbWFraW5nIGNoYW5nZXMuIE15IGFpbSBoZXJlIGlzIHRvIGVuc3VyZSB0aGUgY29uZmlndXJhdGlvbiBpcyBjb21wbGV0ZSwgYW5kIHRoYXQgd2UgaGF2ZSB0aGUgbWF4aW11bSBwZXJmb3JtYW5jZSBwcm9maWxlIHRvIHdvcmsgd2l0aC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwNDoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwX2JwZi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcF9icGYuYz0xNzg9RVhQT1JUX1NZTUJPTF9HUEwodGNwX2JwZl9zZW5kbXNnX3JlZGlyKTtcbm5ldC9pcHY0L3RjcF9icGYuYy0xNzktXG5uZXQvaXB2NC90Y3BfYnBmLmM6MTgwOiNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcbm5ldC9pcHY0L3RjcF9icGYuYy0xODEtc3RhdGljIGludCB0Y3BfbXNnX3dhaXRfZGF0YShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2ssXG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jPTcxMz1zdGF0aWMgaW50IHRjcF9icGZfYXNzZXJ0X3Byb3RvX29wcyhzdHJ1Y3QgcHJvdG8gKm9wcylcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmMtNzIyLVxubmV0L2lwdjQvdGNwX2JwZi5jOjcyMzojaWYgSVNfRU5BQkxFRChDT05GSUdfQlBGX1NUUkVBTV9QQVJTRVIpXG5uZXQvaXB2NC90Y3BfYnBmLmMtNzI0LWludCB0Y3BfYnBmX3N0cnBfcmVhZF9zb2NrKHN0cnVjdCBzdHJwYXJzZXIgKnN0cnAsIHJlYWRfZGVzY3JpcHRvcl90ICpkZXNjLFxuLS1cbm5ldC9pcHY0L3RjcF9icGYuYy03NTYtfVxubmV0L2lwdjQvdGNwX2JwZi5jOjc1NzojZW5kaWYgLyogQ09ORklHX0JQRl9TVFJFQU1fUEFSU0VSICovXG5uZXQvaXB2NC90Y3BfYnBmLmMtNzU4LVxuLS1cbm5ldC9pcHY0L3RjcF9icGYuYz04MDM9dm9pZCB0Y3BfYnBmX2Nsb25lKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKm5ld3NrKVxuLS1cbm5ldC9pcHY0L3RjcF9icGYuYy04MDktfVxubmV0L2lwdjQvdGNwX2JwZi5jOjgxMDojZW5kaWYgLyogQ09ORklHX0JQRl9TWVNDQUxMICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDQ6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODg3NQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDIwNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgQlBGLVJlbGF0ZWQgVENQIEZ1bmN0aW9uYWxpdHkqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIG1vZGlmaWVkIFRDUCBmdW5jdGlvbnM6IGB0Y3BfbXNnX3dhaXRfZGF0YWAsIGB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyYCwgYW5kIGB0Y3BfYnBmX3JlY3Ztc2dgLiBUaGV5JiMzOTtyZSBhbGwgZ3VhcmRlZCBieSBgI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTGAsIHdoaWNoIG1lYW5zIEkgbmVlZCB0byBtYWtlIHN1cmUgYEJQRl9TWVNDQUxMYCBhbmQgYE5FVF9TT0NLX01TR2AgYXJlIGFjY291bnRlZCBmb3IgaW4gbXkgYW5hbHlzaXMuIAoKTm93LCBsZXQmIzM5O3MgaG9uZSBpbiBvbiB0aGUgY29yZSBmdW5jdGlvbnMuIEkgbmVlZCB0byBmb2N1cyBvbiBgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcmAsIGB0Y3BfYnBmX3JlY3Ztc2dgLCBhbmQgYHRjcF9tc2dfd2FpdF9kYXRhYC4KCk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGB0Y3BfYnBmX3JlY3Ztc2dgIGFuZCBgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcmAgYXJlIHByaW1lIHRhcmdldHMgZm9yIGRlZXBlciBleGFtaW5hdGlvbiBhcyBwb3RlbnRpYWwgJiMzNDtob3QtcGF0aCYjMzQ7IGFyZWFzLiBTaW5jZSB0aGV5IGFyZSByZWN2bXNnIGltcGxlbWVudGF0aW9ucyBzcGVjaWZpYyB0byBzb2NrbWFwLCBub3QgdGhlIGdlbmVyaWMgYHRjcF9yZWN2bXNnYCwgdGhleSBhcmUgZXhjZWxsZW50IGNhbmRpZGF0ZXMgZm9yIGluY2x1c2lvbiBpbiBGb2N1c1N5bWJvbHMuCgpKdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSYjMzk7bSBnb2luZyB0byBkb3VibGUtY2hlY2sgdGhvc2UgdHdvIHNwZWNpZmljIGZ1bmN0aW9ucywgYHRjcF9icGZfcmVjdm1zZ19wYXJzZXJgIGFuZCBgdGNwX2JwZl9yZWN2bXNnYCwgdG8gY29uZmlybSBteSB1bmRlcnN0YW5kaW5nIGFuZCBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDQ6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGNwX2JwZl9yZWN2bXNnJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwX2JwZi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcF9icGYuYz0yMDM9c3RhdGljIGJvb2wgaXNfbmV4dF9tc2dfZmluKHN0cnVjdCBza19wc29jayAqcHNvY2spXG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jLTIyMC1cbm5ldC9pcHY0L3RjcF9icGYuYzoyMjE6c3RhdGljIGludCB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyKHN0cnVjdCBzb2NrICpzayxcbm5ldC9pcHY0L3RjcF9icGYuYy0yMjItXHRcdFx0XHQgIHN0cnVjdCBtc2doZHIgKm1zZyxcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmM9MzM4PXN0YXRpYyBpbnQgdGNwX2JwZl9pb2N0bChzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIGludCAqa2FyZylcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmMtMzU1LVxubmV0L2lwdjQvdGNwX2JwZi5jOjM1NjpzdGF0aWMgaW50IHRjcF9icGZfcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcbm5ldC9pcHY0L3RjcF9icGYuYy0zNTctXHRcdFx0ICAgaW50IGZsYWdzKVxuLS1cbm5ldC9pcHY0L3RjcF9icGYuYz02NzQ9c3RhdGljIHZvaWQgdGNwX2JwZl9yZWJ1aWxkX3Byb3RvcyhzdHJ1Y3QgcHJvdG8gcHJvdFtUQ1BfQlBGX05VTV9DRkdTXSxcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmMtNjc5LVx0cHJvdFtUQ1BfQlBGX0JBU0VdLmNsb3NlXHRcdD0gc29ja19tYXBfY2xvc2U7XG5uZXQvaXB2NC90Y3BfYnBmLmM6NjgwOlx0cHJvdFtUQ1BfQlBGX0JBU0VdLnJlY3Ztc2dcdFx0PSB0Y3BfYnBmX3JlY3Ztc2c7XG5uZXQvaXB2NC90Y3BfYnBmLmMtNjgxLVx0cHJvdFtUQ1BfQlBGX0JBU0VdLnNvY2tfaXNfcmVhZGFibGVcdD0gc2tfbXNnX2lzX3JlYWRhYmxlO1xuLS1cbm5ldC9pcHY0L3RjcF9icGYuYy02ODctXHRwcm90W1RDUF9CUEZfUlhdXHRcdFx0PSBwcm90W1RDUF9CUEZfQkFTRV07XG5uZXQvaXB2NC90Y3BfYnBmLmM6Njg4Olx0cHJvdFtUQ1BfQlBGX1JYXS5yZWN2bXNnXHRcdD0gdGNwX2JwZl9yZWN2bXNnX3BhcnNlcjtcbm5ldC9pcHY0L3RjcF9icGYuYy02ODktXG5uZXQvaXB2NC90Y3BfYnBmLmMtNjkwLVx0cHJvdFtUQ1BfQlBGX1RYUlhdXHRcdFx0PSBwcm90W1RDUF9CUEZfVFhdO1xubmV0L2lwdjQvdGNwX2JwZi5jOjY5MTpcdHByb3RbVENQX0JQRl9UWFJYXS5yZWN2bXNnXHRcdD0gdGNwX2JwZl9yZWN2bXNnX3BhcnNlcjtcbm5ldC9pcHY0L3RjcF9icGYuYy02OTItfVxuLS1cbm5ldC9pcHY0L3RjcF9icGYuYz03MjQ9aW50IHRjcF9icGZfc3RycF9yZWFkX3NvY2soc3RydWN0IHN0cnBhcnNlciAqc3RycCwgcmVhZF9kZXNjcmlwdG9yX3QgKmRlc2MsXG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jLTc0Ny1cdCAqIEZvciBTS19SRURJUkVDVCwgd2UgbmVlZCB0byBhY2sgdGhlIGZyYW1lIGltbWVkaWF0ZWx5IGJ1dCBmb3Jcbm5ldC9pcHY0L3RjcF9icGYuYzo3NDg6XHQgKiBTS19QQVNTLCB3ZSB3YW50IHRvIGRlbGF5IHRoZSBhY2sgdW50aWwgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcigpLlxubmV0L2lwdjQvdGNwX2JwZi5jLTc0OS1cdCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDA0OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMTUwCgkJCQkJCQlvdXRwdXQ6IDE1MgoJCQkJCQkJdGhvdWdodHM6IDE3MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgQlBGIFNvY2ttYXAgVGltZW91dCBGaXgqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0JiMzOTtzIGRlYWxpbmcgd2l0aCBgcmVjdm1zZ2AgaGFuZGxlcnMuIFNwZWNpZmljYWxseSwgdGhlc2UgaGFuZGxlcnMgYXJlIHVzZWQgd2l0aCBUQ1Agc29ja2V0cyB0aGF0IGFyZSBwbGFjZWQgd2l0aGluIGEgQlBGIHNvY2ttYXAg4oCTIHNvLCB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBhIHZlcnkgdGFyZ2V0ZWQgYXJlYSBoZXJlLCB3aGljaCBpcyBnb29kIGJlY2F1c2UgaXQgbWFrZXMgdGhlIHNjb3BlIG1hbmFnZWFibGUuIEl0JiMzOTtzIG5vdCBhIGdlbmVyaWMgaXNzdWU7IGl0JiMzOTtzIHJpZ2h0IGluIHRoZSBzd2VldCBzcG90IG9mIHRoaXMgc3BlY2lmaWMgbmV0d29ya2luZyBjb25maWd1cmF0aW9uLgoKVGhlIGNvbmZpZ3VyYXRpb25zIGJlaW5nIGNoYW5nZWQsIGBCUEZfU1lTQ0FMTGAgYW5kIGBORVRfU09DS19NU0dgLCBjb25maXJtIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggc3lzdGVtIGNhbGxzIHJlbGF0ZWQgdG8gbmV0d29ya2luZyBtZXNzYWdlcyB3aXRoaW4gdGhlIEJQRiBjb250ZXh0LCBzbyB0aGlzIGlzIGRlZmluaXRlbHkgcmVsYXRlZCB0byB0aGUgcmlnaHQgc3Vic3lzdGVtLiBJIHNlZSB3ZSYjMzk7cmUgZm9jdXNpbmcgb24gdGhlIGB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyYCwgYHRjcF9icGZfcmVjdm1zZ2AsIGFuZCBgdGNwX21zZ193YWl0X2RhdGFgIHN5bWJvbHMuIFRoYXQgbmFycm93cyB0aGluZ3MgZG93biBldmVuIGZ1cnRoZXIg4oCTIGl0JiMzOTtzIGFsbCBhYm91dCBob3cgdGhlc2UgZnVuY3Rpb25zIGhhbmRsZSB0aGUgcmV0cmlldmFsIG9mIGRhdGEuCgpNeSByZWFzb25pbmcgbGVhZHMgbWUgdG8gYmVsaWV2ZSB0aGUgcGF0Y2ggaXMgdGFyZ2V0aW5nIHRpbWVvdXQgaGFuZGxpbmcgd2l0aGluIGB0Y3BfYnBmX3JlY3Ztc2dgIGFuZCBgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcmAuIFRoZSBmaXggc3BlY2lmaWNhbGx5IGFkZHJlc3NlcyB0aGUgdGltZW91dCB2YWx1ZSB1cGRhdGUgd2l0aGluIGB0Y3BfbXNnX3dhaXRfZGF0YWAgYW5kIGludHJvZHVjZXMgYSByZXRyeSBtZWNoYW5pc20gaWYgdGhlIHRpbWVvdXQgaGFzbiYjMzk7dCB5ZXQgZWxhcHNlZC4gVGhpcyBpcyBjcml0aWNhbCBjb3JlIG5ldHdvcmtpbmcgbG9naWMg4oCTIHRoZSBoYW5kbGluZyBvZiBzb2NrZXQgcmVhZHMgYW5kIG1lc3NhZ2Ugd2FpdHMgdW5kZXIgQlBGIHNvY2ttYXAsIHdoaWNoIG1lYW5zIGNvcnJlY3QgdGltZW91dCBoYW5kbGluZyBpcyBlc3NlbnRpYWwgZm9yIHJlbGlhYmxlIG9wZXJhdGlvbi4gVGhpcyBpcyBhIHZlcnkgdGFyZ2V0ZWQgZml4IHJlbGF0ZWQgdG8gYSBCUEYgc29ja21hcC4gSXQmIzM5O3Mgbm90IGEgcGVyZm9ybWFuY2UgdHdlYWssIGJ1dCBtb3JlIG9mIGEgcmVsaWFiaWxpdHkgZml4IHJlbGF0ZWQgdG8gYSB2ZXJ5IHNwZWNpZmljIG5ldHdvcmsgY29uZGl0aW9uLiBMZXQmIzM5O3MgY2FsbCB0aGlzIHNldC1yZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwNDoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7TkVUX1NPQ0tfTVNHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGNwX2JwZl9yZWN2bXNnX3BhcnNlciYjMzQ7LAogICAgJiMzNDt0Y3BfYnBmX3JlY3Ztc2cmIzM0OywKICAgICYjMzQ7dGNwX21zZ193YWl0X2RhdGEmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGltZW91dCBoYW5kbGluZyBpbiBCUEYgc29ja21hcCYjMzk7cyByZWN2bXNnIGltcGxlbWVudGF0aW9ucyAodGNwX2JwZl9yZWN2bXNnIGFuZCB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyKS4gSXQgY29ycmVjdGx5IHVwZGF0ZXMgdGhlIHJlbWFpbmluZyB0aW1lb3V0IHZhbHVlIGluIHRjcF9tc2dfd2FpdF9kYXRhIGFuZCByZXRyaWVzIHJlYWRpbmcgaWYgdGhlIHRpbWVvdXQgaGFzbiYjMzk7dCBleHBpcmVkLiBUaGlzIGlzIGZ1bmN0aW9uYWwgY29yZSBuZXR3b3JraW5nIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7TkVUX1NPQ0tfTVNHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGNwX2JwZl9yZWN2bXNnX3BhcnNlciYjMzQ7LAogICAgJiMzNDt0Y3BfYnBmX3JlY3Ztc2cmIzM0OywKICAgICYjMzQ7dGNwX21zZ193YWl0X2RhdGEmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGltZW91dCBoYW5kbGluZyBpbiBCUEYgc29ja21hcCYjMzk7cyByZWN2bXNnIGltcGxlbWVudGF0aW9ucyAodGNwX2JwZl9yZWN2bXNnIGFuZCB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyKS4gSXQgY29ycmVjdGx5IHVwZGF0ZXMgdGhlIHJlbWFpbmluZyB0aW1lb3V0IHZhbHVlIGluIHRjcF9tc2dfd2FpdF9kYXRhIGFuZCByZXRyaWVzIHJlYWRpbmcgaWYgdGhlIHRpbWVvdXQgaGFzbiYjMzk7dCBleHBpcmVkLiBUaGlzIGlzIGZ1bmN0aW9uYWwgY29yZSBuZXR3b3JraW5nIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDA0OjE0OjE4LjcwOTk2NDgyN1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMDY1NDk0MTQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJORVRfU09DS19NU0dcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyXCIsXG4gICAgXCJ0Y3BfYnBmX3JlY3Ztc2dcIixcbiAgICBcInRjcF9tc2dfd2FpdF9kYXRhXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGltZW91dCBoYW5kbGluZyBpbiBCUEYgc29ja21hcCdzIHJlY3Ztc2cgaW1wbGVtZW50YXRpb25zICh0Y3BfYnBmX3JlY3Ztc2cgYW5kIHRjcF9icGZfcmVjdm1zZ19wYXJzZXIpLiBJdCBjb3JyZWN0bHkgdXBkYXRlcyB0aGUgcmVtYWluaW5nIHRpbWVvdXQgdmFsdWUgaW4gdGNwX21zZ193YWl0X2RhdGEgYW5kIHJldHJpZXMgcmVhZGluZyBpZiB0aGUgdGltZW91dCBoYXNuJ3QgZXhwaXJlZC4gVGhpcyBpcyBmdW5jdGlvbmFsIGNvcmUgbmV0d29ya2luZyBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDA0OjE0OjE4LjcwOTk3NDQ4N1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzI3MDk2ODcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMDNhZjQzNTViZTQyZjhlYzQ2YmJiNTM0ODc2MDNjODBiNTU4MTliOVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEp1bCAxNiAwNDoxNDoxNyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfYnBmLmMgYi9uZXQvaXB2NC90Y3BfYnBmLmNcXG5pbmRleCBjYzBiZDczZjM2YjZkNi4uYWE1YzVkNzQxNTk5YTMgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjQvdGNwX2JwZi5jXFxuKysrIGIvbmV0L2lwdjQvdGNwX2JwZi5jXFxuQEAgLTE3OSw3ICsxNzksNyBAQCBFWFBPUlRfU1lNQk9MX0dQTCh0Y3BfYnBmX3NlbmRtc2dfcmVkaXIpO1xcbiBcXG4gI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxcbiBzdGF0aWMgaW50IHRjcF9tc2dfd2FpdF9kYXRhKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jayxcXG4tXFx0XFx0XFx0ICAgICBsb25nIHRpbWVvKVxcbitcXHRcXHRcXHQgICAgIGxvbmcgKnRpbWVvKVxcbiB7XFxuIFxcdERFRklORV9XQUlUX0ZVTkMod2FpdCwgd29rZW5fd2FrZV9mdW5jdGlvbik7XFxuIFxcdGludCByZXQgPSAwO1xcbkBAIC0xODcsMTIgKzE4NywxMiBAQCBzdGF0aWMgaW50IHRjcF9tc2dfd2FpdF9kYXRhKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jayxcXG4gXFx0aWYgKHNrLVxcdTAwM2Vza19zaHV0ZG93biBcXHUwMDI2IFJDVl9TSFVURE9XTilcXG4gXFx0XFx0cmV0dXJuIDE7XFxuIFxcbi1cXHRpZiAoIXRpbWVvKVxcbitcXHRpZiAoISp0aW1lbylcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuIFxcdGFkZF93YWl0X3F1ZXVlKHNrX3NsZWVwKHNrKSwgXFx1MDAyNndhaXQpO1xcbiBcXHRza19zZXRfYml0KFNPQ0tXUV9BU1lOQ19XQUlUREFUQSwgc2spO1xcbi1cXHRyZXQgPSBza193YWl0X2V2ZW50KHNrLCBcXHUwMDI2dGltZW8sXFxuK1xcdHJldCA9IHNrX3dhaXRfZXZlbnQoc2ssIHRpbWVvLFxcbiBcXHRcXHRcXHQgICAgIWxpc3RfZW1wdHkoXFx1MDAyNnBzb2NrLVxcdTAwM2VpbmdyZXNzX21zZykgfHxcXG4gXFx0XFx0XFx0ICAgICFza2JfcXVldWVfZW1wdHlfbG9ja2xlc3MoXFx1MDAyNnNrLVxcdTAwM2Vza19yZWNlaXZlX3F1ZXVlKSwgXFx1MDAyNndhaXQpO1xcbiBcXHRza19jbGVhcl9iaXQoU09DS1dRX0FTWU5DX1dBSVREQVRBLCBzayk7XFxuQEAgLTIyOSw2ICsyMjksNyBAQCBzdGF0aWMgaW50IHRjcF9icGZfcmVjdm1zZ19wYXJzZXIoc3RydWN0IHNvY2sgKnNrLFxcbiBcXHRpbnQgY29waWVkX2Zyb21fc2VsZiA9IDA7XFxuIFxcdGludCBjb3BpZWQgPSAwO1xcbiBcXHR1MzIgc2VxO1xcbitcXHRsb25nIHRpbWVvO1xcbiBcXG4gXFx0aWYgKHVubGlrZWx5KGZsYWdzIFxcdTAwMjYgTVNHX0VSUlFVRVVFKSlcXG4gXFx0XFx0cmV0dXJuIGluZXRfcmVjdl9lcnJvcihzaywgbXNnLCBsZW4pO1xcbkBAIC0yNjIsNiArMjYzLDggQEAgc3RhdGljIGludCB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyKHN0cnVjdCBzb2NrICpzayxcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbitcXHR0aW1lbyA9IHNvY2tfcmN2dGltZW8oc2ssIGZsYWdzIFxcdTAwMjYgTVNHX0RPTlRXQUlUKTtcXG4rXFxuIG1zZ19ieXRlc19yZWFkeTpcXG4gXFx0Y29waWVkID0gX19za19tc2dfcmVjdm1zZyhzaywgcHNvY2ssIG1zZywgbGVuLCBmbGFncywgXFx1MDAyNmNvcGllZF9mcm9tX3NlbGYpO1xcbiBcXHQvKiBUaGUgdHlwaWNhbCBjYXNlIGZvciBFRkFVTFQgaXMgdGhlIHNvY2tldCB3YXMgZ3JhY2VmdWxseVxcbkBAIC0yODAsNyArMjgzLDYgQEAgc3RhdGljIGludCB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyKHN0cnVjdCBzb2NrICpzayxcXG4gXFx0fVxcbiBcXHRzZXEgKz0gY29waWVkX2Zyb21fc2VsZjtcXG4gXFx0aWYgKCFjb3BpZWQpIHtcXG4tXFx0XFx0bG9uZyB0aW1lbztcXG4gXFx0XFx0aW50IGRhdGE7XFxuIFxcbiBcXHRcXHRpZiAoc29ja19mbGFnKHNrLCBTT0NLX0RPTkUpKVxcbkBAIC0yOTksNyArMzAxLDYgQEAgc3RhdGljIGludCB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyKHN0cnVjdCBzb2NrICpzayxcXG4gXFx0XFx0XFx0Z290byBvdXQ7XFxuIFxcdFxcdH1cXG4gXFxuLVxcdFxcdHRpbWVvID0gc29ja19yY3Z0aW1lbyhzaywgZmxhZ3MgXFx1MDAyNiBNU0dfRE9OVFdBSVQpO1xcbiBcXHRcXHRpZiAoIXRpbWVvKSB7XFxuIFxcdFxcdFxcdGNvcGllZCA9IC1FQUdBSU47XFxuIFxcdFxcdFxcdGdvdG8gb3V0O1xcbkBAIC0zMTAsMTMgKzMxMSwxNSBAQCBzdGF0aWMgaW50IHRjcF9icGZfcmVjdm1zZ19wYXJzZXIoc3RydWN0IHNvY2sgKnNrLFxcbiBcXHRcXHRcXHRnb3RvIG91dDtcXG4gXFx0XFx0fVxcbiBcXG4tXFx0XFx0ZGF0YSA9IHRjcF9tc2dfd2FpdF9kYXRhKHNrLCBwc29jaywgdGltZW8pO1xcbitcXHRcXHRkYXRhID0gdGNwX21zZ193YWl0X2RhdGEoc2ssIHBzb2NrLCBcXHUwMDI2dGltZW8pO1xcbiBcXHRcXHRpZiAoZGF0YSBcXHUwMDNjIDApIHtcXG4gXFx0XFx0XFx0Y29waWVkID0gZGF0YTtcXG4gXFx0XFx0XFx0Z290byB1bmxvY2s7XFxuIFxcdFxcdH1cXG4gXFx0XFx0aWYgKGRhdGEgXFx1MDAyNlxcdTAwMjYgIXNrX3Bzb2NrX3F1ZXVlX2VtcHR5KHBzb2NrKSlcXG4gXFx0XFx0XFx0Z290byBtc2dfYnl0ZXNfcmVhZHk7XFxuK1xcdFxcdGlmICghZGF0YSBcXHUwMDI2XFx1MDAyNiB0aW1lbyBcXHUwMDNlIDApXFxuK1xcdFxcdFxcdGdvdG8gbXNnX2J5dGVzX3JlYWR5O1xcbiBcXHRcXHRjb3BpZWQgPSAtRUFHQUlOO1xcbiBcXHR9XFxuIG91dDpcXG5AQCAtMzU1LDYgKzM1OCw3IEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxcbiB7XFxuIFxcdHN0cnVjdCBza19wc29jayAqcHNvY2s7XFxuIFxcdGludCBjb3BpZWQsIHJldDtcXG4rXFx0bG9uZyB0aW1lbztcXG4gXFxuIFxcdGlmICh1bmxpa2VseShmbGFncyBcXHUwMDI2IE1TR19FUlJRVUVVRSkpXFxuIFxcdFxcdHJldHVybiBpbmV0X3JlY3ZfZXJyb3Ioc2ssIG1zZywgbGVuKTtcXG5AQCAtMzcxLDE0ICszNzUsNTkgQEAgc3RhdGljIGludCB0Y3BfYnBmX3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXFxuIFxcdFxcdHJldHVybiB0Y3BfcmVjdm1zZyhzaywgbXNnLCBsZW4sIGZsYWdzKTtcXG4gXFx0fVxcbiBcXHRsb2NrX3NvY2soc2spO1xcbitcXG4rXFx0dGltZW8gPSBzb2NrX3JjdnRpbWVvKHNrLCBmbGFncyBcXHUwMDI2IE1TR19ET05UV0FJVCk7XFxuK1xcbiBtc2dfYnl0ZXNfcmVhZHk6XFxuIFxcdGNvcGllZCA9IHNrX21zZ19yZWN2bXNnKHNrLCBwc29jaywgbXNnLCBsZW4sIGZsYWdzKTtcXG4gXFx0aWYgKCFjb3BpZWQpIHtcXG4tXFx0XFx0bG9uZyB0aW1lbztcXG4gXFx0XFx0aW50IGRhdGE7XFxuIFxcbi1cXHRcXHR0aW1lbyA9IHNvY2tfcmN2dGltZW8oc2ssIGZsYWdzIFxcdTAwMjYgTVNHX0RPTlRXQUlUKTtcXG4tXFx0XFx0ZGF0YSA9IHRjcF9tc2dfd2FpdF9kYXRhKHNrLCBwc29jaywgdGltZW8pO1xcbitcXHRcXHRpZiAoc29ja19mbGFnKHNrLCBTT0NLX0RPTkUpKSB7XFxuK1xcdFxcdFxcdHJldCA9IDA7XFxuK1xcdFxcdFxcdGdvdG8gdW5sb2NrO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRpZiAoc2stXFx1MDAzZXNrX2Vycikge1xcbitcXHRcXHRcXHRpZiAoIXNrX3Bzb2NrX3F1ZXVlX2VtcHR5KHBzb2NrKSlcXG4rXFx0XFx0XFx0XFx0Z290byBtc2dfYnl0ZXNfcmVhZHk7XFxuK1xcdFxcdFxcdGlmICghc2tiX3F1ZXVlX2VtcHR5KFxcdTAwMjZzay1cXHUwMDNlc2tfcmVjZWl2ZV9xdWV1ZSkpIHtcXG4rXFx0XFx0XFx0XFx0cmVsZWFzZV9zb2NrKHNrKTtcXG4rXFx0XFx0XFx0XFx0c2tfcHNvY2tfcHV0KHNrLCBwc29jayk7XFxuK1xcdFxcdFxcdFxcdHJldHVybiB0Y3BfcmVjdm1zZyhzaywgbXNnLCBsZW4sIGZsYWdzKTtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHRcXHRyZXQgPSBzb2NrX2Vycm9yKHNrKTtcXG4rXFx0XFx0XFx0Z290byB1bmxvY2s7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGlmIChzay1cXHUwMDNlc2tfc2h1dGRvd24gXFx1MDAyNiBSQ1ZfU0hVVERPV04pIHtcXG4rXFx0XFx0XFx0aWYgKCFza19wc29ja19xdWV1ZV9lbXB0eShwc29jaykpXFxuK1xcdFxcdFxcdFxcdGdvdG8gbXNnX2J5dGVzX3JlYWR5O1xcbitcXHRcXHRcXHRpZiAoIXNrYl9xdWV1ZV9lbXB0eShcXHUwMDI2c2stXFx1MDAzZXNrX3JlY2VpdmVfcXVldWUpKSB7XFxuK1xcdFxcdFxcdFxcdHJlbGVhc2Vfc29jayhzayk7XFxuK1xcdFxcdFxcdFxcdHNrX3Bzb2NrX3B1dChzaywgcHNvY2spO1xcbitcXHRcXHRcXHRcXHRyZXR1cm4gdGNwX3JlY3Ztc2coc2ssIG1zZywgbGVuLCBmbGFncyk7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0XFx0cmV0ID0gMDtcXG4rXFx0XFx0XFx0Z290byB1bmxvY2s7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGlmIChzay1cXHUwMDNlc2tfc3RhdGUgPT0gVENQX0NMT1NFKSB7XFxuK1xcdFxcdFxcdHJldCA9IC1FTk9UQ09OTjtcXG4rXFx0XFx0XFx0Z290byB1bmxvY2s7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGlmICghdGltZW8pIHtcXG4rXFx0XFx0XFx0cmV0ID0gLUVBR0FJTjtcXG4rXFx0XFx0XFx0Z290byB1bmxvY2s7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkge1xcbitcXHRcXHRcXHRyZXQgPSBzb2NrX2ludHJfZXJybm8odGltZW8pO1xcbitcXHRcXHRcXHRnb3RvIHVubG9jaztcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0ZGF0YSA9IHRjcF9tc2dfd2FpdF9kYXRhKHNrLCBwc29jaywgXFx1MDAyNnRpbWVvKTtcXG4gXFx0XFx0aWYgKGRhdGEgXFx1MDAzYyAwKSB7XFxuIFxcdFxcdFxcdHJldCA9IGRhdGE7XFxuIFxcdFxcdFxcdGdvdG8gdW5sb2NrO1xcbkBAIC0zOTAsNiArNDM5LDggQEAgc3RhdGljIGludCB0Y3BfYnBmX3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXFxuIFxcdFxcdFxcdHNrX3Bzb2NrX3B1dChzaywgcHNvY2spO1xcbiBcXHRcXHRcXHRyZXR1cm4gdGNwX3JlY3Ztc2coc2ssIG1zZywgbGVuLCBmbGFncyk7XFxuIFxcdFxcdH1cXG4rXFx0XFx0aWYgKCFkYXRhIFxcdTAwMjZcXHUwMDI2IHRpbWVvIFxcdTAwM2UgMClcXG4rXFx0XFx0XFx0Z290byBtc2dfYnl0ZXNfcmVhZHk7XFxuIFxcdFxcdGNvcGllZCA9IC1FQUdBSU47XFxuIFxcdH1cXG4gXFx0cmV0ID0gY29waWVkO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvLmdpdGlnbm9yZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC8uZ2l0aWdub3JlXFxuaW5kZXggYzlmNDYwMzFhYzczYjIuLmExODQwYTVkNDVmNjdjIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC8uZ2l0aWdub3JlXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0Ly5naXRpZ25vcmVcXG5AQCAtMzksNiArMzksOCBAQCBza19jb25uZWN0X3plcm9fYWRkclxcbiBza19zb19wZWVrX29mZlxcbiBza2ZfbmV0X29mZlxcbiBzb2NrZXRcXG4rc29ja21hcF9yZWN2ZnJvbVxcbitzb2NrbWFwX3JlY3Zmcm9tLmJwZi5vXFxuIHNvX2luY29taW5nX2NwdVxcbiBzb19uZXRuc19jb29raWVcXG4gc29fcmN2X2xpc3RlbmVyXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9NYWtlZmlsZVxcbmluZGV4IDcwOGQ5NjBhZTA3ZDViLi5kZDA0YjgwNzI1YzY3OSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvTWFrZWZpbGVcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvTWFrZWZpbGVcXG5AQCAtMTkxLDYgKzE5MSw3IEBAIFRFU1RfR0VOX1BST0dTIDo9IFxcXFxcXG4gXFx0c2tfY29ubmVjdF96ZXJvX2FkZHIgXFxcXFxcbiBcXHRza19zb19wZWVrX29mZiBcXFxcXFxuIFxcdHNvX2luY29taW5nX2NwdSBcXFxcXFxuK1xcdHNvY2ttYXBfcmVjdmZyb20gXFxcXFxcbiBcXHR0YXAgXFxcXFxcbiBcXHR0Y3BfcG9ydF9zaGFyZSBcXFxcXFxuIFxcdHRscyBcXFxcXFxuQEAgLTIzOCwzICsyMzksNyBAQCAkKE9VVFBVVCkvYmluZF9iaGFzaDogTERMSUJTICs9IC1scHRocmVhZFxcbiAkKE9VVFBVVCkvaW9fdXJpbmdfemVyb2NvcHlfdHg6IENGTEFHUyArPSAtSS4uLy4uLy4uL2luY2x1ZGUvXFxuIFxcbiBpbmNsdWRlIGJwZi5ta1xcbitcXG4rJChPVVRQVVQpL3NvY2ttYXBfcmVjdmZyb206ICQoQlBGT0JKKVxcbiskKE9VVFBVVCkvc29ja21hcF9yZWN2ZnJvbTogTERMSUJTICs9ICQoQlBGT0JKKSAtbGVsZiAtbHogLWxwdGhyZWFkXFxuKyQoT1VUUFVUKS9zb2NrbWFwX3JlY3Zmcm9tOiBDRkxBR1MgKz0gLUkkKE9VVFBVVCkvdG9vbHMvaW5jbHVkZVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvc29ja21hcF9yZWN2ZnJvbS5icGYuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9zb2NrbWFwX3JlY3Zmcm9tLmJwZi5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uZmVjNDcwYzczOGYxZThcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3NvY2ttYXBfcmVjdmZyb20uYnBmLmNcXG5AQCAtMCwwICsxLDMxIEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9icGYuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2JwZi9icGZfaGVscGVycy5oXFx1MDAzZVxcbitcXG4rI2RlZmluZSBBRl9JTkVUIDJcXG4rXFxuK2NoYXIgTElDRU5TRVtdIFNFQyhcXFwibGljZW5zZVxcXCIpID0gXFxcIkdQTFxcXCI7XFxuK1xcbitzdHJ1Y3Qge1xcbitcXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX1NPQ0tIQVNIKTtcXG4rXFx0X191aW50KG1heF9lbnRyaWVzLCAxMDI0KTtcXG4rXFx0X190eXBlKGtleSwgX191NjQpO1xcbitcXHRfX3R5cGUodmFsdWUsIF9fdTY0KTtcXG4rXFxuK30gbWFwX3NvY2tzIFNFQyhcXFwiLm1hcHNcXFwiKTtcXG4rXFxuK1NFQyhcXFwic29ja29wc1xcXCIpIGludCBvbl9zb2Nrb3BzKHN0cnVjdCBicGZfc29ja19vcHMgKmN0eClcXG4re1xcbitcXHRpZiAoY3R4LVxcdTAwM2VmYW1pbHkgPT0gQUZfSU5FVCBcXHUwMDI2XFx1MDAyNiBjdHgtXFx1MDAzZW9wID09IEJQRl9TT0NLX09QU19BQ1RJVkVfRVNUQUJMSVNIRURfQ0IpIHtcXG4rXFx0XFx0X191NjQgY29va2llID0gYnBmX2dldF9zb2NrZXRfY29va2llKGN0eCk7XFxuK1xcbitcXHRcXHRicGZfc29ja19oYXNoX3VwZGF0ZShjdHgsIFxcdTAwMjZtYXBfc29ja3MsIFxcdTAwMjZjb29raWUsIEJQRl9OT0VYSVNUKTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK1NFQyhcXFwic2tfc2tiL3N0cmVhbV92ZXJkaWN0XFxcIikgaW50IG9uX3JlY3Yoc3RydWN0IF9fc2tfYnVmZiAqY3R4KVxcbit7XFxuK1xcdHJldHVybiBTS19QQVNTO1xcbit9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9zb2NrbWFwX3JlY3Zmcm9tLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvc29ja21hcF9yZWN2ZnJvbS5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMjU2NTdmYzNkYmNkMjJcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3NvY2ttYXBfcmVjdmZyb20uY1xcbkBAIC0wLDAgKzEsMjk5IEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKyNpbmNsdWRlIFxcdTAwM2NhcnBhL2luZXQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2JwZi9saWJicGYuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2ZjbnRsLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NwdGhyZWFkLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzdGRhdG9taWMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N5cy9zb2NrZXQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N5cy90aW1lLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2N1bmlzdGQuaFxcdTAwM2VcXG4rXFxuKyNpbmNsdWRlIFxcXCJrc2VsZnRlc3RfaGFybmVzcy5oXFxcIlxcbitcXG4rI2RlZmluZSBNQVhfSVRFUkFUSU9OUyAxMDBcXG4rI2RlZmluZSBQQVlMT0FEX0VORCAnZSdcXG4rXFxuK3N0YXRpYyBpbnQgc3RhcnRfbGlzdGVuaW5nKHN0cnVjdCBfX3Rlc3RfbWV0YWRhdGEgKl9tZXRhZGF0YSwgdWludDE2X3QgKnBvcnQpXFxuK3tcXG4rXFx0c3RydWN0IHNvY2thZGRyX2luIGFkZHI7XFxuK1xcdHNvY2tsZW5fdCBhZGRybGVuO1xcbitcXHRpbnQgZmQ7XFxuK1xcbitcXHRtZW1zZXQoXFx1MDAyNmFkZHIsIDAsIHNpemVvZihhZGRyKSk7XFxuK1xcdGFkZHIuc2luX2ZhbWlseSA9IEFGX0lORVQ7XFxuK1xcdGFkZHIuc2luX2FkZHIuc19hZGRyID0gSU5BRERSX0FOWTtcXG4rXFxuK1xcdGZkID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfU1RSRUFNLCBJUFBST1RPX1RDUCk7XFxuK1xcbitcXHRBU1NFUlRfTkUoZmQsIC0xKTtcXG4rXFx0QVNTRVJUX0VRKGJpbmQoZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKilcXHUwMDI2YWRkciwgc2l6ZW9mKGFkZHIpKSwgMCk7XFxuK1xcdEFTU0VSVF9FUShsaXN0ZW4oZmQsIDUpLCAwKTtcXG4rXFxuK1xcdGFkZHJsZW4gPSBzaXplb2YoYWRkcik7XFxuK1xcbitcXHRBU1NFUlRfRVEoZ2V0c29ja25hbWUoZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKilcXHUwMDI2YWRkciwgXFx1MDAyNmFkZHJsZW4pLCAwKTtcXG4rXFxuK1xcdCpwb3J0ID0gYWRkci5zaW5fcG9ydDtcXG4rXFxuK1xcdHJldHVybiBmZDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcHJvY2Vzc19jbGllbnQoaW50IGZkLCBhdG9taWNfaW50ICpydW5uaW5nLCBib29sICpmYWlsZWQpXFxuK3tcXG4rXFx0Y2hhciBidWZbMTAyNF07XFxuK1xcdHN0cnVjdCB0aW1ldmFsIHRpbWVvO1xcbitcXG4rXFx0dGltZW8udHZfc2VjID0gMDtcXG4rXFx0dGltZW8udHZfdXNlYyA9IDEwMDA7XFxuK1xcbitcXHRpZiAoc2V0c29ja29wdChmZCwgU09MX1NPQ0tFVCwgU09fUkNWVElNRU8sIFxcdTAwMjZ0aW1lbywgc2l6ZW9mKHRpbWVvKSkpXFxuK1xcdFxcdCpmYWlsZWQgPSB0cnVlO1xcbitcXG4rXFx0d2hpbGUgKGF0b21pY19sb2FkKHJ1bm5pbmcpKSB7XFxuK1xcdFxcdHNzaXplX3QgbGVuID0gcmVjdmZyb20oZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZiksIDAsIE5VTEwsIE5VTEwpO1xcbitcXG4rXFx0XFx0aWYgKGxlbiA9PSAtMSkge1xcbitcXHRcXHRcXHRpZiAoZXJybm8gIT0gRUFHQUlOIFxcdTAwMjZcXHUwMDI2IGVycm5vICE9IEVJTlRSKVxcbitcXHRcXHRcXHRcXHQqZmFpbGVkID0gdHJ1ZTtcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGlmIChsZW4gXFx1MDAzYz0gMCB8fCBidWZbbGVuIC0gMV0gPT0gUEFZTE9BRF9FTkQpXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHR9XFxuK1xcbitcXHRzZW5kKGZkLCBcXFwidGVzdFxcXCIsIDQsIE1TR19OT1NJR05BTCk7XFxuK1xcbitcXHRjbG9zZShmZCk7XFxuK31cXG4rXFxuK3N0cnVjdCBicGZfdCB7XFxuK1xcdHN0cnVjdCBicGZfb2JqZWN0ICpvYmo7XFxuK1xcdHN0cnVjdCBicGZfbGluayAqb25fc29ja29wcztcXG4rXFx0c3RydWN0IGJwZl9saW5rICpvbl9yZWN2O1xcbit9O1xcbitcXG4rc3RhdGljIHZvaWQgc2V0dXBfYnBmKHN0cnVjdCBfX3Rlc3RfbWV0YWRhdGEgKl9tZXRhZGF0YSwgY29uc3QgY2hhciAqcGF0aCwgYm9vbCByZWN2LFxcbitcXHRcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgYnBmX3QgKmJwZilcXG4re1xcbitcXHRzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2c7XFxuK1xcdGludCBjZ3JvdXA7XFxuK1xcbitcXHRtZW1zZXQoYnBmLCAwLCBzaXplb2YoKmJwZikpO1xcbitcXHRicGYtXFx1MDAzZW9iaiA9IGJwZl9vYmplY3RfX29wZW5fZmlsZShwYXRoLCBOVUxMKTtcXG4rXFxuK1xcdEFTU0VSVF9ORShicGYtXFx1MDAzZW9iaiwgTlVMTCk7XFxuK1xcdEFTU0VSVF9FUShicGZfb2JqZWN0X19sb2FkKGJwZi1cXHUwMDNlb2JqKSwgMCk7XFxuK1xcbitcXHRwcm9nID0gYnBmX29iamVjdF9fZmluZF9wcm9ncmFtX2J5X25hbWUoYnBmLVxcdTAwM2VvYmosIFxcXCJvbl9zb2Nrb3BzXFxcIik7XFxuK1xcdEFTU0VSVF9ORShwcm9nLCBOVUxMKTtcXG4rXFxuK1xcdGNncm91cCA9IG9wZW4oXFxcIi9zeXMvZnMvY2dyb3VwXFxcIiwgT19SRE9OTFkpO1xcbitcXHRBU1NFUlRfTkUoY2dyb3VwLCAtMSk7XFxuK1xcbitcXHRicGYtXFx1MDAzZW9uX3NvY2tvcHMgPSBicGZfcHJvZ3JhbV9fYXR0YWNoX2Nncm91cChwcm9nLCBjZ3JvdXApO1xcbitcXHRjbG9zZShjZ3JvdXApO1xcbitcXG4rXFx0QVNTRVJUX05FKGJwZi1cXHUwMDNlb25fc29ja29wcywgTlVMTCk7XFxuK1xcbitcXHRpZiAocmVjdikge1xcbitcXHRcXHRzdHJ1Y3QgYnBmX21hcCAqbWFwID0gYnBmX29iamVjdF9fZmluZF9tYXBfYnlfbmFtZShicGYtXFx1MDAzZW9iaiwgXFxcIm1hcF9zb2Nrc1xcXCIpO1xcbitcXG4rXFx0XFx0QVNTRVJUX05FKG1hcCwgTlVMTCk7XFxuK1xcbitcXHRcXHRwcm9nID0gYnBmX29iamVjdF9fZmluZF9wcm9ncmFtX2J5X25hbWUoYnBmLVxcdTAwM2VvYmosIFxcXCJvbl9yZWN2XFxcIik7XFxuK1xcdFxcdEFTU0VSVF9ORShwcm9nLCBOVUxMKTtcXG4rXFxuK1xcdFxcdGJwZi1cXHUwMDNlb25fcmVjdiA9IGJwZl9wcm9ncmFtX19hdHRhY2hfc29ja21hcChwcm9nLCBicGZfbWFwX19mZChtYXApKTtcXG4rXFx0XFx0QVNTRVJUX05FKGJwZi1cXHUwMDNlb25fcmVjdiwgTlVMTCk7XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RydWN0IHNlcnZlcl90IHtcXG4rXFx0aW50IGZkO1xcbitcXHRhdG9taWNfaW50IHJ1bm5pbmc7XFxuK1xcdHB0aHJlYWRfdCB0aHJlYWQ7XFxuK1xcdGJvb2wgdGhyZWFkX2NyZWF0ZWQ7XFxuK307XFxuK1xcbitzdGF0aWMgdm9pZCAqcnVuX3NlcnZlcih2b2lkICphcmcpXFxuK3tcXG4rXFx0c3RydWN0IHNlcnZlcl90ICpzZXJ2ZXIgPSBhcmc7XFxuK1xcdGJvb2wgZmFpbGVkID0gZmFsc2U7XFxuK1xcbitcXHR3aGlsZSAoYXRvbWljX2xvYWQoXFx1MDAyNnNlcnZlci1cXHUwMDNlcnVubmluZykpIHtcXG4rXFx0XFx0aW50IGNsaWVudF9mZCA9IGFjY2VwdChzZXJ2ZXItXFx1MDAzZWZkLCBOVUxMLCBOVUxMKTtcXG4rXFxuK1xcdFxcdGlmIChjbGllbnRfZmQgPT0gLTEpIHtcXG4rXFx0XFx0XFx0aWYgKCFhdG9taWNfbG9hZChcXHUwMDI2c2VydmVyLVxcdTAwM2VydW5uaW5nKSlcXG4rXFx0XFx0XFx0XFx0YnJlYWs7XFxuK1xcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0cHJvY2Vzc19jbGllbnQoY2xpZW50X2ZkLCBcXHUwMDI2c2VydmVyLVxcdTAwM2VydW5uaW5nLCBcXHUwMDI2ZmFpbGVkKTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKGZhaWxlZClcXG4rXFx0XFx0cmV0dXJuICh2b2lkICopMTtcXG4rXFxuK1xcdHJldHVybiBOVUxMO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHNlbmRfcGF5bG9hZChzdHJ1Y3QgX190ZXN0X21ldGFkYXRhICpfbWV0YWRhdGEsIGludCBmZCwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxcbit7XFxuK1xcdHNpemVfdCByZW1haW5pbmcgPSBsZW47XFxuK1xcbitcXHRkbyB7XFxuK1xcdFxcdHNzaXplX3QgYnl0ZXMgPSB3cml0ZShmZCwgYnVmICsgKGxlbiAtIHJlbWFpbmluZyksIHJlbWFpbmluZyk7XFxuK1xcbitcXHRcXHRpZiAoYnl0ZXMgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdFxcdGlmIChlcnJubyA9PSBFSU5UUilcXG4rXFx0XFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRcXHRyZXR1cm4gLTE7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdHJlbWFpbmluZyAtPSBieXRlcztcXG4rXFx0fSB3aGlsZSAocmVtYWluaW5nKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitGSVhUVVJFKHNvY2ttYXBfcmVjdmZyb20pXFxuK3tcXG4rXFx0c3RydWN0IHNlcnZlcl90IHNlcnZlcjtcXG4rXFx0c3RydWN0IHNvY2thZGRyX2luIGFkZHI7XFxuK1xcdHN0cnVjdCBicGZfdCBicGY7XFxuK1xcdGNoYXIgKnBheWxvYWQ7XFxuK1xcdHNpemVfdCBwYXlsb2FkX2xlbjtcXG4rfTtcXG4rXFxuK0ZJWFRVUkVfVkFSSUFOVChzb2NrbWFwX3JlY3Zmcm9tKVxcbit7XFxuK1xcdGJvb2wgd2l0aF9yZWN2O1xcbit9O1xcbitcXG4rRklYVFVSRV9WQVJJQU5UX0FERChzb2NrbWFwX3JlY3Zmcm9tLCByZWN2bXNnKVxcbit7XFxuK1xcdC53aXRoX3JlY3YgPSBmYWxzZVxcbit9O1xcbitcXG4rRklYVFVSRV9WQVJJQU5UX0FERChzb2NrbWFwX3JlY3Zmcm9tLCByZWN2bXNnX3BhcnNlcilcXG4re1xcbitcXHQud2l0aF9yZWN2ID0gdHJ1ZVxcbit9O1xcbitcXG4rRklYVFVSRV9TRVRVUChzb2NrbWFwX3JlY3Zmcm9tKVxcbit7XFxuK1xcdG1lbXNldChcXHUwMDI2c2VsZi1cXHUwMDNlc2VydmVyLCAwLCBzaXplb2Yoc2VsZi1cXHUwMDNlc2VydmVyKSk7XFxuK1xcdHNlbGYtXFx1MDAzZXNlcnZlci5mZCA9IC0xO1xcbitcXG4rXFx0bWVtc2V0KFxcdTAwMjZzZWxmLVxcdTAwM2VhZGRyLCAwLCBzaXplb2Yoc2VsZi1cXHUwMDNlYWRkcikpO1xcbitcXG4rXFx0c2VsZi1cXHUwMDNlcGF5bG9hZF9sZW4gPSAxMDI0ICogMTAyNCAqIDI1O1xcbitcXHRzZWxmLVxcdTAwM2VwYXlsb2FkID0gbWFsbG9jKHNlbGYtXFx1MDAzZXBheWxvYWRfbGVuKTtcXG4rXFx0QVNTRVJUX05FKHNlbGYtXFx1MDAzZXBheWxvYWQsIE5VTEwpO1xcbitcXG4rXFx0bWVtc2V0KHNlbGYtXFx1MDAzZXBheWxvYWQsIDAsIHNlbGYtXFx1MDAzZXBheWxvYWRfbGVuKTtcXG4rXFx0c2VsZi1cXHUwMDNlcGF5bG9hZFtzZWxmLVxcdTAwM2VwYXlsb2FkX2xlbiAtIDFdID0gUEFZTE9BRF9FTkQ7XFxuK1xcbitcXHRzZXR1cF9icGYoX21ldGFkYXRhLCBcXFwic29ja21hcF9yZWN2ZnJvbS5icGYub1xcXCIsIHZhcmlhbnQtXFx1MDAzZXdpdGhfcmVjdiwgXFx1MDAyNnNlbGYtXFx1MDAzZWJwZik7XFxuK1xcdGF0b21pY19zdG9yZShcXHUwMDI2c2VsZi1cXHUwMDNlc2VydmVyLnJ1bm5pbmcsIDEpO1xcbitcXHRzZWxmLVxcdTAwM2VzZXJ2ZXIuZmQgPSBzdGFydF9saXN0ZW5pbmcoX21ldGFkYXRhLCBcXHUwMDI2c2VsZi1cXHUwMDNlYWRkci5zaW5fcG9ydCk7XFxuK1xcbitcXHRzZWxmLVxcdTAwM2VhZGRyLnNpbl9mYW1pbHkgPSBBRl9JTkVUO1xcbitcXHRzZWxmLVxcdTAwM2VhZGRyLnNpbl9hZGRyLnNfYWRkciA9IGh0b25sKElOQUREUl9MT09QQkFDSyk7XFxuK1xcbitcXHRBU1NFUlRfRVEocHRocmVhZF9jcmVhdGUoXFx1MDAyNnNlbGYtXFx1MDAzZXNlcnZlci50aHJlYWQsIE5VTEwsIFxcdTAwMjZydW5fc2VydmVyLCBcXHUwMDI2c2VsZi1cXHUwMDNlc2VydmVyKSwgMCk7XFxuK1xcdHNlbGYtXFx1MDAzZXNlcnZlci50aHJlYWRfY3JlYXRlZCA9IHRydWU7XFxuK31cXG4rXFxuK0ZJWFRVUkVfVEVBUkRPV04oc29ja21hcF9yZWN2ZnJvbSlcXG4re1xcbitcXHRhdG9taWNfc3RvcmUoXFx1MDAyNnNlbGYtXFx1MDAzZXNlcnZlci5ydW5uaW5nLCAwKTtcXG4rXFxuK1xcdGlmIChzZWxmLVxcdTAwM2VzZXJ2ZXIuZmQgIT0gLTEpXFxuK1xcdFxcdHNodXRkb3duKHNlbGYtXFx1MDAzZXNlcnZlci5mZCwgU0hVVF9SRCk7XFxuK1xcbitcXHRpZiAoc2VsZi1cXHUwMDNlc2VydmVyLnRocmVhZF9jcmVhdGVkKSB7XFxuK1xcdFxcdHZvaWQgKnJldHZhbCA9IE5VTEw7XFxuK1xcbitcXHRcXHRwdGhyZWFkX2pvaW4oc2VsZi1cXHUwMDNlc2VydmVyLnRocmVhZCwgXFx1MDAyNnJldHZhbCk7XFxuK1xcdFxcdEVYUEVDVF9FUShyZXR2YWwsIE5VTEwpO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoc2VsZi1cXHUwMDNlc2VydmVyLmZkICE9IC0xKVxcbitcXHRcXHRjbG9zZShzZWxmLVxcdTAwM2VzZXJ2ZXIuZmQpO1xcbitcXG4rXFx0ZnJlZShzZWxmLVxcdTAwM2VwYXlsb2FkKTtcXG4rXFx0YnBmX2xpbmtfX2Rlc3Ryb3koc2VsZi1cXHUwMDNlYnBmLm9uX3NvY2tvcHMpO1xcbitcXG4rXFx0aWYgKHNlbGYtXFx1MDAzZWJwZi5vbl9yZWN2KVxcbitcXHRcXHRicGZfbGlua19fZGVzdHJveShzZWxmLVxcdTAwM2VicGYub25fcmVjdik7XFxuK1xcbitcXHRicGZfb2JqZWN0X19jbG9zZShzZWxmLVxcdTAwM2VicGYub2JqKTtcXG4rfVxcbitcXG4rVEVTVF9GKHNvY2ttYXBfcmVjdmZyb20sIG5vX3RpbWVvdXQpXFxuK3tcXG4rXFx0Y2hhciBpZ25vcmVkWzEyOF07XFxuK1xcbitcXHRmb3IgKGludCBpID0gMDsgaSBcXHUwMDNjIE1BWF9JVEVSQVRJT05TOyArK2kpIHtcXG4rXFx0XFx0aW50IGZkID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfU1RSRUFNLCBJUFBST1RPX1RDUCk7XFxuK1xcbitcXHRcXHRBU1NFUlRfTkUoZmQsIC0xKTtcXG4rXFx0XFx0QVNTRVJUX0VRKGNvbm5lY3QoZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKilcXHUwMDI2c2VsZi1cXHUwMDNlYWRkciwgc2l6ZW9mKHNlbGYtXFx1MDAzZWFkZHIpKSwgMCk7XFxuK1xcbitcXHRcXHRBU1NFUlRfRVEoc2VuZF9wYXlsb2FkKF9tZXRhZGF0YSwgZmQsIHNlbGYtXFx1MDAzZXBheWxvYWQsIHNlbGYtXFx1MDAzZXBheWxvYWRfbGVuKSwgMCk7XFxuK1xcbitcXHRcXHRpZiAocmVjdmZyb20oZmQsIGlnbm9yZWQsIHNpemVvZihpZ25vcmVkKSwgMCwgTlVMTCwgTlVMTCkgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRBU1NFUlRfTkUoZXJybm8sIEVBR0FJTik7XFxuK1xcbitcXHRcXHRjbG9zZShmZCk7XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIGludDY0X3QgdG9fbmFub3Moc3RydWN0IHRpbWVzcGVjICp0aW1lKVxcbit7XFxuK1xcdHJldHVybiAodGltZS1cXHUwMDNldHZfc2VjICogMTAwMDAwMDAwMExMKSArIHRpbWUtXFx1MDAzZXR2X25zZWM7XFxuK31cXG4rXFxuK1RFU1RfRihzb2NrbWFwX3JlY3Zmcm9tLCB3aXRoX3RpbWVvdXQpXFxuK3tcXG4rXFx0Y2hhciBpZ25vcmVkWzEyOF07XFxuK1xcdHN0cnVjdCB0aW1ldmFsIHRpbWVvO1xcbitcXG4rXFx0dGltZW8udHZfc2VjID0gMDtcXG4rXFx0dGltZW8udHZfdXNlYyA9IDUwMDA7XFxuK1xcbitcXHQvKiByZW1vdmUgdGhlIHBheWxvYWQgZW5kIGRlbGltaXRlciBzbyB0aGUgc2VydmVyIG5ldmVyIHJlc3BvbmRzIGFuZCByZWN2ZnJvbSB0aW1lcyBvdXQuICovXFxuK1xcdHNlbGYtXFx1MDAzZXBheWxvYWRbc2VsZi1cXHUwMDNlcGF5bG9hZF9sZW4gLSAxXSA9IDA7XFxuK1xcbitcXHRmb3IgKGludCBpID0gMDsgaSBcXHUwMDNjIE1BWF9JVEVSQVRJT05TOyArK2kpIHtcXG4rXFx0XFx0c3RydWN0IHRpbWVzcGVjIGJlZztcXG4rXFx0XFx0c3RydWN0IHRpbWVzcGVjIGVuZDtcXG4rXFx0XFx0aW50IGVycjtcXG4rXFxuK1xcdFxcdGludCBmZCA9IHNvY2tldChBRl9JTkVULCBTT0NLX1NUUkVBTSwgSVBQUk9UT19UQ1ApO1xcbitcXG4rXFx0XFx0QVNTRVJUX05FKGZkLCAtMSk7XFxuK1xcdFxcdEFTU0VSVF9FUShjb25uZWN0KGZkLCAoc3RydWN0IHNvY2thZGRyICopXFx1MDAyNnNlbGYtXFx1MDAzZWFkZHIsIHNpemVvZihzZWxmLVxcdTAwM2VhZGRyKSksIDApO1xcbitcXG4rXFx0XFx0QVNTRVJUX0VRKHNlbmRfcGF5bG9hZChfbWV0YWRhdGEsIGZkLCBzZWxmLVxcdTAwM2VwYXlsb2FkLCBzZWxmLVxcdTAwM2VwYXlsb2FkX2xlbiksIDApO1xcbitcXG4rXFx0XFx0QVNTRVJUX0VRKHNldHNvY2tvcHQoZmQsIFNPTF9TT0NLRVQsIFNPX1JDVlRJTUVPLCBcXHUwMDI2dGltZW8sIHNpemVvZih0aW1lbykpLCAwKTtcXG4rXFxuK1xcdFxcdGNsb2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDLCBcXHUwMDI2YmVnKTtcXG4rXFx0XFx0QVNTRVJUX0VRKHJlY3Zmcm9tKGZkLCBpZ25vcmVkLCBzaXplb2YoaWdub3JlZCksIDAsIE5VTEwsIE5VTEwpLCAtMSk7XFxuK1xcdFxcdGVyciA9IGVycm5vO1xcbitcXHRcXHRjbG9ja19nZXR0aW1lKENMT0NLX01PTk9UT05JQywgXFx1MDAyNmVuZCk7XFxuK1xcbitcXHRcXHRBU1NFUlRfRVEoZXJyLCBFQUdBSU4pO1xcbitcXHRcXHRBU1NFUlRfR0UodG9fbmFub3MoXFx1MDAyNmVuZCkgLSB0b19uYW5vcyhcXHUwMDI2YmVnKSwgdGltZW8udHZfdXNlYyAqIDEwMDApO1xcbitcXG4rXFx0XFx0Y2xvc2UoZmQpO1xcbitcXHR9XFxuK31cXG4rXFxuK1RFU1RfSEFSTkVTU19NQUlOXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDA0OjE0OjE5LjQzOTM4ODg0OFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTkzMzYwNjAzMzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIk5FVF9TT0NLX01TR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRjcF9icGZfcmVjdm1zZ19wYXJzZXJcIixcbiAgICBcInRjcF9icGZfcmVjdm1zZ1wiLFxuICAgIFwidGNwX21zZ193YWl0X2RhdGFcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aW1lb3V0IGhhbmRsaW5nIGluIEJQRiBzb2NrbWFwJ3MgcmVjdm1zZyBpbXBsZW1lbnRhdGlvbnMgKHRjcF9icGZfcmVjdm1zZyBhbmQgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcikuIEl0IGNvcnJlY3RseSB1cGRhdGVzIHRoZSByZW1haW5pbmcgdGltZW91dCB2YWx1ZSBpbiB0Y3BfbXNnX3dhaXRfZGF0YSBhbmQgcmV0cmllcyByZWFkaW5nIGlmIHRoZSB0aW1lb3V0IGhhc24ndCBleHBpcmVkLiBUaGlzIGlzIGZ1bmN0aW9uYWwgY29yZSBuZXR3b3JraW5nIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAwM2FmNDM1NWJlNDJmOGVjNDZiYmI1MzQ4NzYwM2M4MGI1NTgxOWI5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMTYgMDQ6MTQ6MTcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfYnBmLmMgYi9uZXQvaXB2NC90Y3BfYnBmLmNcbmluZGV4IGNjMGJkNzNmMzZiNmQ2Li5hYTVjNWQ3NDE1OTlhMyAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L3RjcF9icGYuY1xuKysrIGIvbmV0L2lwdjQvdGNwX2JwZi5jXG5AQCAtMTc5LDcgKzE3OSw3IEBAIEVYUE9SVF9TWU1CT0xfR1BMKHRjcF9icGZfc2VuZG1zZ19yZWRpcik7XG4gXG4gI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxuIHN0YXRpYyBpbnQgdGNwX21zZ193YWl0X2RhdGEoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLFxuLVx0XHRcdCAgICAgbG9uZyB0aW1lbylcbitcdFx0XHQgICAgIGxvbmcgKnRpbWVvKVxuIHtcbiBcdERFRklORV9XQUlUX0ZVTkMod2FpdCwgd29rZW5fd2FrZV9mdW5jdGlvbik7XG4gXHRpbnQgcmV0ID0gMDtcbkBAIC0xODcsMTIgKzE4NywxMiBAQCBzdGF0aWMgaW50IHRjcF9tc2dfd2FpdF9kYXRhKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jayxcbiBcdGlmIChzay1cdTAwM2Vza19zaHV0ZG93biBcdTAwMjYgUkNWX1NIVVRET1dOKVxuIFx0XHRyZXR1cm4gMTtcbiBcbi1cdGlmICghdGltZW8pXG4rXHRpZiAoISp0aW1lbylcbiBcdFx0cmV0dXJuIHJldDtcbiBcbiBcdGFkZF93YWl0X3F1ZXVlKHNrX3NsZWVwKHNrKSwgXHUwMDI2d2FpdCk7XG4gXHRza19zZXRfYml0KFNPQ0tXUV9BU1lOQ19XQUlUREFUQSwgc2spO1xuLVx0cmV0ID0gc2tfd2FpdF9ldmVudChzaywgXHUwMDI2dGltZW8sXG4rXHRyZXQgPSBza193YWl0X2V2ZW50KHNrLCB0aW1lbyxcbiBcdFx0XHQgICAgIWxpc3RfZW1wdHkoXHUwMDI2cHNvY2stXHUwMDNlaW5ncmVzc19tc2cpIHx8XG4gXHRcdFx0ICAgICFza2JfcXVldWVfZW1wdHlfbG9ja2xlc3MoXHUwMDI2c2stXHUwMDNlc2tfcmVjZWl2ZV9xdWV1ZSksIFx1MDAyNndhaXQpO1xuIFx0c2tfY2xlYXJfYml0KFNPQ0tXUV9BU1lOQ19XQUlUREFUQSwgc2spO1xuQEAgLTIyOSw2ICsyMjksNyBAQCBzdGF0aWMgaW50IHRjcF9icGZfcmVjdm1zZ19wYXJzZXIoc3RydWN0IHNvY2sgKnNrLFxuIFx0aW50IGNvcGllZF9mcm9tX3NlbGYgPSAwO1xuIFx0aW50IGNvcGllZCA9IDA7XG4gXHR1MzIgc2VxO1xuK1x0bG9uZyB0aW1lbztcbiBcbiBcdGlmICh1bmxpa2VseShmbGFncyBcdTAwMjYgTVNHX0VSUlFVRVVFKSlcbiBcdFx0cmV0dXJuIGluZXRfcmVjdl9lcnJvcihzaywgbXNnLCBsZW4pO1xuQEAgLTI2Miw2ICsyNjMsOCBAQCBzdGF0aWMgaW50IHRjcF9icGZfcmVjdm1zZ19wYXJzZXIoc3RydWN0IHNvY2sgKnNrLFxuIFx0XHR9XG4gXHR9XG4gXG4rXHR0aW1lbyA9IHNvY2tfcmN2dGltZW8oc2ssIGZsYWdzIFx1MDAyNiBNU0dfRE9OVFdBSVQpO1xuK1xuIG1zZ19ieXRlc19yZWFkeTpcbiBcdGNvcGllZCA9IF9fc2tfbXNnX3JlY3Ztc2coc2ssIHBzb2NrLCBtc2csIGxlbiwgZmxhZ3MsIFx1MDAyNmNvcGllZF9mcm9tX3NlbGYpO1xuIFx0LyogVGhlIHR5cGljYWwgY2FzZSBmb3IgRUZBVUxUIGlzIHRoZSBzb2NrZXQgd2FzIGdyYWNlZnVsbHlcbkBAIC0yODAsNyArMjgzLDYgQEAgc3RhdGljIGludCB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyKHN0cnVjdCBzb2NrICpzayxcbiBcdH1cbiBcdHNlcSArPSBjb3BpZWRfZnJvbV9zZWxmO1xuIFx0aWYgKCFjb3BpZWQpIHtcbi1cdFx0bG9uZyB0aW1lbztcbiBcdFx0aW50IGRhdGE7XG4gXG4gXHRcdGlmIChzb2NrX2ZsYWcoc2ssIFNPQ0tfRE9ORSkpXG5AQCAtMjk5LDcgKzMwMSw2IEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcihzdHJ1Y3Qgc29jayAqc2ssXG4gXHRcdFx0Z290byBvdXQ7XG4gXHRcdH1cbiBcbi1cdFx0dGltZW8gPSBzb2NrX3JjdnRpbWVvKHNrLCBmbGFncyBcdTAwMjYgTVNHX0RPTlRXQUlUKTtcbiBcdFx0aWYgKCF0aW1lbykge1xuIFx0XHRcdGNvcGllZCA9IC1FQUdBSU47XG4gXHRcdFx0Z290byBvdXQ7XG5AQCAtMzEwLDEzICszMTEsMTUgQEAgc3RhdGljIGludCB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyKHN0cnVjdCBzb2NrICpzayxcbiBcdFx0XHRnb3RvIG91dDtcbiBcdFx0fVxuIFxuLVx0XHRkYXRhID0gdGNwX21zZ193YWl0X2RhdGEoc2ssIHBzb2NrLCB0aW1lbyk7XG4rXHRcdGRhdGEgPSB0Y3BfbXNnX3dhaXRfZGF0YShzaywgcHNvY2ssIFx1MDAyNnRpbWVvKTtcbiBcdFx0aWYgKGRhdGEgXHUwMDNjIDApIHtcbiBcdFx0XHRjb3BpZWQgPSBkYXRhO1xuIFx0XHRcdGdvdG8gdW5sb2NrO1xuIFx0XHR9XG4gXHRcdGlmIChkYXRhIFx1MDAyNlx1MDAyNiAhc2tfcHNvY2tfcXVldWVfZW1wdHkocHNvY2spKVxuIFx0XHRcdGdvdG8gbXNnX2J5dGVzX3JlYWR5O1xuK1x0XHRpZiAoIWRhdGEgXHUwMDI2XHUwMDI2IHRpbWVvIFx1MDAzZSAwKVxuK1x0XHRcdGdvdG8gbXNnX2J5dGVzX3JlYWR5O1xuIFx0XHRjb3BpZWQgPSAtRUFHQUlOO1xuIFx0fVxuIG91dDpcbkBAIC0zNTUsNiArMzU4LDcgQEAgc3RhdGljIGludCB0Y3BfYnBmX3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXG4ge1xuIFx0c3RydWN0IHNrX3Bzb2NrICpwc29jaztcbiBcdGludCBjb3BpZWQsIHJldDtcbitcdGxvbmcgdGltZW87XG4gXG4gXHRpZiAodW5saWtlbHkoZmxhZ3MgXHUwMDI2IE1TR19FUlJRVUVVRSkpXG4gXHRcdHJldHVybiBpbmV0X3JlY3ZfZXJyb3Ioc2ssIG1zZywgbGVuKTtcbkBAIC0zNzEsMTQgKzM3NSw1OSBAQCBzdGF0aWMgaW50IHRjcF9icGZfcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcbiBcdFx0cmV0dXJuIHRjcF9yZWN2bXNnKHNrLCBtc2csIGxlbiwgZmxhZ3MpO1xuIFx0fVxuIFx0bG9ja19zb2NrKHNrKTtcbitcbitcdHRpbWVvID0gc29ja19yY3Z0aW1lbyhzaywgZmxhZ3MgXHUwMDI2IE1TR19ET05UV0FJVCk7XG4rXG4gbXNnX2J5dGVzX3JlYWR5OlxuIFx0Y29waWVkID0gc2tfbXNnX3JlY3Ztc2coc2ssIHBzb2NrLCBtc2csIGxlbiwgZmxhZ3MpO1xuIFx0aWYgKCFjb3BpZWQpIHtcbi1cdFx0bG9uZyB0aW1lbztcbiBcdFx0aW50IGRhdGE7XG4gXG4tXHRcdHRpbWVvID0gc29ja19yY3Z0aW1lbyhzaywgZmxhZ3MgXHUwMDI2IE1TR19ET05UV0FJVCk7XG4tXHRcdGRhdGEgPSB0Y3BfbXNnX3dhaXRfZGF0YShzaywgcHNvY2ssIHRpbWVvKTtcbitcdFx0aWYgKHNvY2tfZmxhZyhzaywgU09DS19ET05FKSkge1xuK1x0XHRcdHJldCA9IDA7XG4rXHRcdFx0Z290byB1bmxvY2s7XG4rXHRcdH1cbitcbitcdFx0aWYgKHNrLVx1MDAzZXNrX2Vycikge1xuK1x0XHRcdGlmICghc2tfcHNvY2tfcXVldWVfZW1wdHkocHNvY2spKVxuK1x0XHRcdFx0Z290byBtc2dfYnl0ZXNfcmVhZHk7XG4rXHRcdFx0aWYgKCFza2JfcXVldWVfZW1wdHkoXHUwMDI2c2stXHUwMDNlc2tfcmVjZWl2ZV9xdWV1ZSkpIHtcbitcdFx0XHRcdHJlbGVhc2Vfc29jayhzayk7XG4rXHRcdFx0XHRza19wc29ja19wdXQoc2ssIHBzb2NrKTtcbitcdFx0XHRcdHJldHVybiB0Y3BfcmVjdm1zZyhzaywgbXNnLCBsZW4sIGZsYWdzKTtcbitcdFx0XHR9XG4rXHRcdFx0cmV0ID0gc29ja19lcnJvcihzayk7XG4rXHRcdFx0Z290byB1bmxvY2s7XG4rXHRcdH1cbitcbitcdFx0aWYgKHNrLVx1MDAzZXNrX3NodXRkb3duIFx1MDAyNiBSQ1ZfU0hVVERPV04pIHtcbitcdFx0XHRpZiAoIXNrX3Bzb2NrX3F1ZXVlX2VtcHR5KHBzb2NrKSlcbitcdFx0XHRcdGdvdG8gbXNnX2J5dGVzX3JlYWR5O1xuK1x0XHRcdGlmICghc2tiX3F1ZXVlX2VtcHR5KFx1MDAyNnNrLVx1MDAzZXNrX3JlY2VpdmVfcXVldWUpKSB7XG4rXHRcdFx0XHRyZWxlYXNlX3NvY2soc2spO1xuK1x0XHRcdFx0c2tfcHNvY2tfcHV0KHNrLCBwc29jayk7XG4rXHRcdFx0XHRyZXR1cm4gdGNwX3JlY3Ztc2coc2ssIG1zZywgbGVuLCBmbGFncyk7XG4rXHRcdFx0fVxuK1x0XHRcdHJldCA9IDA7XG4rXHRcdFx0Z290byB1bmxvY2s7XG4rXHRcdH1cbitcbitcdFx0aWYgKHNrLVx1MDAzZXNrX3N0YXRlID09IFRDUF9DTE9TRSkge1xuK1x0XHRcdHJldCA9IC1FTk9UQ09OTjtcbitcdFx0XHRnb3RvIHVubG9jaztcbitcdFx0fVxuK1xuK1x0XHRpZiAoIXRpbWVvKSB7XG4rXHRcdFx0cmV0ID0gLUVBR0FJTjtcbitcdFx0XHRnb3RvIHVubG9jaztcbitcdFx0fVxuK1xuK1x0XHRpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHtcbitcdFx0XHRyZXQgPSBzb2NrX2ludHJfZXJybm8odGltZW8pO1xuK1x0XHRcdGdvdG8gdW5sb2NrO1xuK1x0XHR9XG4rXG4rXHRcdGRhdGEgPSB0Y3BfbXNnX3dhaXRfZGF0YShzaywgcHNvY2ssIFx1MDAyNnRpbWVvKTtcbiBcdFx0aWYgKGRhdGEgXHUwMDNjIDApIHtcbiBcdFx0XHRyZXQgPSBkYXRhO1xuIFx0XHRcdGdvdG8gdW5sb2NrO1xuQEAgLTM5MCw2ICs0MzksOCBAQCBzdGF0aWMgaW50IHRjcF9icGZfcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcbiBcdFx0XHRza19wc29ja19wdXQoc2ssIHBzb2NrKTtcbiBcdFx0XHRyZXR1cm4gdGNwX3JlY3Ztc2coc2ssIG1zZywgbGVuLCBmbGFncyk7XG4gXHRcdH1cbitcdFx0aWYgKCFkYXRhIFx1MDAyNlx1MDAyNiB0aW1lbyBcdTAwM2UgMClcbitcdFx0XHRnb3RvIG1zZ19ieXRlc19yZWFkeTtcbiBcdFx0Y29waWVkID0gLUVBR0FJTjtcbiBcdH1cbiBcdHJldCA9IGNvcGllZDtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvLmdpdGlnbm9yZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC8uZ2l0aWdub3JlXG5pbmRleCBjOWY0NjAzMWFjNzNiMi4uYTE4NDBhNWQ0NWY2N2MgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvLmdpdGlnbm9yZVxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0Ly5naXRpZ25vcmVcbkBAIC0zOSw2ICszOSw4IEBAIHNrX2Nvbm5lY3RfemVyb19hZGRyXG4gc2tfc29fcGVla19vZmZcbiBza2ZfbmV0X29mZlxuIHNvY2tldFxuK3NvY2ttYXBfcmVjdmZyb21cbitzb2NrbWFwX3JlY3Zmcm9tLmJwZi5vXG4gc29faW5jb21pbmdfY3B1XG4gc29fbmV0bnNfY29va2llXG4gc29fcmN2X2xpc3RlbmVyXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L01ha2VmaWxlXG5pbmRleCA3MDhkOTYwYWUwN2Q1Yi4uZGQwNGI4MDcyNWM2NzkgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvTWFrZWZpbGVcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9NYWtlZmlsZVxuQEAgLTE5MSw2ICsxOTEsNyBAQCBURVNUX0dFTl9QUk9HUyA6PSBcXFxuIFx0c2tfY29ubmVjdF96ZXJvX2FkZHIgXFxcbiBcdHNrX3NvX3BlZWtfb2ZmIFxcXG4gXHRzb19pbmNvbWluZ19jcHUgXFxcbitcdHNvY2ttYXBfcmVjdmZyb20gXFxcbiBcdHRhcCBcXFxuIFx0dGNwX3BvcnRfc2hhcmUgXFxcbiBcdHRscyBcXFxuQEAgLTIzOCwzICsyMzksNyBAQCAkKE9VVFBVVCkvYmluZF9iaGFzaDogTERMSUJTICs9IC1scHRocmVhZFxuICQoT1VUUFVUKS9pb191cmluZ196ZXJvY29weV90eDogQ0ZMQUdTICs9IC1JLi4vLi4vLi4vaW5jbHVkZS9cbiBcbiBpbmNsdWRlIGJwZi5ta1xuK1xuKyQoT1VUUFVUKS9zb2NrbWFwX3JlY3Zmcm9tOiAkKEJQRk9CSilcbiskKE9VVFBVVCkvc29ja21hcF9yZWN2ZnJvbTogTERMSUJTICs9ICQoQlBGT0JKKSAtbGVsZiAtbHogLWxwdGhyZWFkXG4rJChPVVRQVVQpL3NvY2ttYXBfcmVjdmZyb206IENGTEFHUyArPSAtSSQoT1VUUFVUKS90b29scy9pbmNsdWRlXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3NvY2ttYXBfcmVjdmZyb20uYnBmLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvc29ja21hcF9yZWN2ZnJvbS5icGYuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5mZWM0NzBjNzM4ZjFlOFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3NvY2ttYXBfcmVjdmZyb20uYnBmLmNcbkBAIC0wLDAgKzEsMzEgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JwZi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbitcbisjZGVmaW5lIEFGX0lORVQgMlxuK1xuK2NoYXIgTElDRU5TRVtdIFNFQyhcImxpY2Vuc2VcIikgPSBcIkdQTFwiO1xuK1xuK3N0cnVjdCB7XG4rXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX1NPQ0tIQVNIKTtcbitcdF9fdWludChtYXhfZW50cmllcywgMTAyNCk7XG4rXHRfX3R5cGUoa2V5LCBfX3U2NCk7XG4rXHRfX3R5cGUodmFsdWUsIF9fdTY0KTtcbitcbit9IG1hcF9zb2NrcyBTRUMoXCIubWFwc1wiKTtcbitcbitTRUMoXCJzb2Nrb3BzXCIpIGludCBvbl9zb2Nrb3BzKHN0cnVjdCBicGZfc29ja19vcHMgKmN0eClcbit7XG4rXHRpZiAoY3R4LVx1MDAzZWZhbWlseSA9PSBBRl9JTkVUIFx1MDAyNlx1MDAyNiBjdHgtXHUwMDNlb3AgPT0gQlBGX1NPQ0tfT1BTX0FDVElWRV9FU1RBQkxJU0hFRF9DQikge1xuK1x0XHRfX3U2NCBjb29raWUgPSBicGZfZ2V0X3NvY2tldF9jb29raWUoY3R4KTtcbitcbitcdFx0YnBmX3NvY2tfaGFzaF91cGRhdGUoY3R4LCBcdTAwMjZtYXBfc29ja3MsIFx1MDAyNmNvb2tpZSwgQlBGX05PRVhJU1QpO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK1NFQyhcInNrX3NrYi9zdHJlYW1fdmVyZGljdFwiKSBpbnQgb25fcmVjdihzdHJ1Y3QgX19za19idWZmICpjdHgpXG4re1xuK1x0cmV0dXJuIFNLX1BBU1M7XG4rfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9zb2NrbWFwX3JlY3Zmcm9tLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvc29ja21hcF9yZWN2ZnJvbS5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjI1NjU3ZmMzZGJjZDIyXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvc29ja21hcF9yZWN2ZnJvbS5jXG5AQCAtMCwwICsxLDI5OSBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rI2luY2x1ZGUgXHUwMDNjYXJwYS9pbmV0LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NicGYvbGliYnBmLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NmY250bC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjcHRocmVhZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RkYXRvbWljLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzeXMvc29ja2V0LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzeXMvdGltZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbitcbisjaW5jbHVkZSBcImtzZWxmdGVzdF9oYXJuZXNzLmhcIlxuK1xuKyNkZWZpbmUgTUFYX0lURVJBVElPTlMgMTAwXG4rI2RlZmluZSBQQVlMT0FEX0VORCAnZSdcbitcbitzdGF0aWMgaW50IHN0YXJ0X2xpc3RlbmluZyhzdHJ1Y3QgX190ZXN0X21ldGFkYXRhICpfbWV0YWRhdGEsIHVpbnQxNl90ICpwb3J0KVxuK3tcbitcdHN0cnVjdCBzb2NrYWRkcl9pbiBhZGRyO1xuK1x0c29ja2xlbl90IGFkZHJsZW47XG4rXHRpbnQgZmQ7XG4rXG4rXHRtZW1zZXQoXHUwMDI2YWRkciwgMCwgc2l6ZW9mKGFkZHIpKTtcbitcdGFkZHIuc2luX2ZhbWlseSA9IEFGX0lORVQ7XG4rXHRhZGRyLnNpbl9hZGRyLnNfYWRkciA9IElOQUREUl9BTlk7XG4rXG4rXHRmZCA9IHNvY2tldChBRl9JTkVULCBTT0NLX1NUUkVBTSwgSVBQUk9UT19UQ1ApO1xuK1xuK1x0QVNTRVJUX05FKGZkLCAtMSk7XG4rXHRBU1NFUlRfRVEoYmluZChmZCwgKHN0cnVjdCBzb2NrYWRkciAqKVx1MDAyNmFkZHIsIHNpemVvZihhZGRyKSksIDApO1xuK1x0QVNTRVJUX0VRKGxpc3RlbihmZCwgNSksIDApO1xuK1xuK1x0YWRkcmxlbiA9IHNpemVvZihhZGRyKTtcbitcbitcdEFTU0VSVF9FUShnZXRzb2NrbmFtZShmZCwgKHN0cnVjdCBzb2NrYWRkciAqKVx1MDAyNmFkZHIsIFx1MDAyNmFkZHJsZW4pLCAwKTtcbitcbitcdCpwb3J0ID0gYWRkci5zaW5fcG9ydDtcbitcbitcdHJldHVybiBmZDtcbit9XG4rXG4rc3RhdGljIHZvaWQgcHJvY2Vzc19jbGllbnQoaW50IGZkLCBhdG9taWNfaW50ICpydW5uaW5nLCBib29sICpmYWlsZWQpXG4re1xuK1x0Y2hhciBidWZbMTAyNF07XG4rXHRzdHJ1Y3QgdGltZXZhbCB0aW1lbztcbitcbitcdHRpbWVvLnR2X3NlYyA9IDA7XG4rXHR0aW1lby50dl91c2VjID0gMTAwMDtcbitcbitcdGlmIChzZXRzb2Nrb3B0KGZkLCBTT0xfU09DS0VULCBTT19SQ1ZUSU1FTywgXHUwMDI2dGltZW8sIHNpemVvZih0aW1lbykpKVxuK1x0XHQqZmFpbGVkID0gdHJ1ZTtcbitcbitcdHdoaWxlIChhdG9taWNfbG9hZChydW5uaW5nKSkge1xuK1x0XHRzc2l6ZV90IGxlbiA9IHJlY3Zmcm9tKGZkLCBidWYsIHNpemVvZihidWYpLCAwLCBOVUxMLCBOVUxMKTtcbitcbitcdFx0aWYgKGxlbiA9PSAtMSkge1xuK1x0XHRcdGlmIChlcnJubyAhPSBFQUdBSU4gXHUwMDI2XHUwMDI2IGVycm5vICE9IEVJTlRSKVxuK1x0XHRcdFx0KmZhaWxlZCA9IHRydWU7XG4rXHRcdFx0Y29udGludWU7XG4rXHRcdH1cbitcbitcdFx0aWYgKGxlbiBcdTAwM2M9IDAgfHwgYnVmW2xlbiAtIDFdID09IFBBWUxPQURfRU5EKVxuK1x0XHRcdGJyZWFrO1xuK1x0fVxuK1xuK1x0c2VuZChmZCwgXCJ0ZXN0XCIsIDQsIE1TR19OT1NJR05BTCk7XG4rXG4rXHRjbG9zZShmZCk7XG4rfVxuK1xuK3N0cnVjdCBicGZfdCB7XG4rXHRzdHJ1Y3QgYnBmX29iamVjdCAqb2JqO1xuK1x0c3RydWN0IGJwZl9saW5rICpvbl9zb2Nrb3BzO1xuK1x0c3RydWN0IGJwZl9saW5rICpvbl9yZWN2O1xuK307XG4rXG4rc3RhdGljIHZvaWQgc2V0dXBfYnBmKHN0cnVjdCBfX3Rlc3RfbWV0YWRhdGEgKl9tZXRhZGF0YSwgY29uc3QgY2hhciAqcGF0aCwgYm9vbCByZWN2LFxuK1x0XHRcdFx0XHRcdHN0cnVjdCBicGZfdCAqYnBmKVxuK3tcbitcdHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZztcbitcdGludCBjZ3JvdXA7XG4rXG4rXHRtZW1zZXQoYnBmLCAwLCBzaXplb2YoKmJwZikpO1xuK1x0YnBmLVx1MDAzZW9iaiA9IGJwZl9vYmplY3RfX29wZW5fZmlsZShwYXRoLCBOVUxMKTtcbitcbitcdEFTU0VSVF9ORShicGYtXHUwMDNlb2JqLCBOVUxMKTtcbitcdEFTU0VSVF9FUShicGZfb2JqZWN0X19sb2FkKGJwZi1cdTAwM2VvYmopLCAwKTtcbitcbitcdHByb2cgPSBicGZfb2JqZWN0X19maW5kX3Byb2dyYW1fYnlfbmFtZShicGYtXHUwMDNlb2JqLCBcIm9uX3NvY2tvcHNcIik7XG4rXHRBU1NFUlRfTkUocHJvZywgTlVMTCk7XG4rXG4rXHRjZ3JvdXAgPSBvcGVuKFwiL3N5cy9mcy9jZ3JvdXBcIiwgT19SRE9OTFkpO1xuK1x0QVNTRVJUX05FKGNncm91cCwgLTEpO1xuK1xuK1x0YnBmLVx1MDAzZW9uX3NvY2tvcHMgPSBicGZfcHJvZ3JhbV9fYXR0YWNoX2Nncm91cChwcm9nLCBjZ3JvdXApO1xuK1x0Y2xvc2UoY2dyb3VwKTtcbitcbitcdEFTU0VSVF9ORShicGYtXHUwMDNlb25fc29ja29wcywgTlVMTCk7XG4rXG4rXHRpZiAocmVjdikge1xuK1x0XHRzdHJ1Y3QgYnBmX21hcCAqbWFwID0gYnBmX29iamVjdF9fZmluZF9tYXBfYnlfbmFtZShicGYtXHUwMDNlb2JqLCBcIm1hcF9zb2Nrc1wiKTtcbitcbitcdFx0QVNTRVJUX05FKG1hcCwgTlVMTCk7XG4rXG4rXHRcdHByb2cgPSBicGZfb2JqZWN0X19maW5kX3Byb2dyYW1fYnlfbmFtZShicGYtXHUwMDNlb2JqLCBcIm9uX3JlY3ZcIik7XG4rXHRcdEFTU0VSVF9ORShwcm9nLCBOVUxMKTtcbitcbitcdFx0YnBmLVx1MDAzZW9uX3JlY3YgPSBicGZfcHJvZ3JhbV9fYXR0YWNoX3NvY2ttYXAocHJvZywgYnBmX21hcF9fZmQobWFwKSk7XG4rXHRcdEFTU0VSVF9ORShicGYtXHUwMDNlb25fcmVjdiwgTlVMTCk7XG4rXHR9XG4rfVxuK1xuK3N0cnVjdCBzZXJ2ZXJfdCB7XG4rXHRpbnQgZmQ7XG4rXHRhdG9taWNfaW50IHJ1bm5pbmc7XG4rXHRwdGhyZWFkX3QgdGhyZWFkO1xuK1x0Ym9vbCB0aHJlYWRfY3JlYXRlZDtcbit9O1xuK1xuK3N0YXRpYyB2b2lkICpydW5fc2VydmVyKHZvaWQgKmFyZylcbit7XG4rXHRzdHJ1Y3Qgc2VydmVyX3QgKnNlcnZlciA9IGFyZztcbitcdGJvb2wgZmFpbGVkID0gZmFsc2U7XG4rXG4rXHR3aGlsZSAoYXRvbWljX2xvYWQoXHUwMDI2c2VydmVyLVx1MDAzZXJ1bm5pbmcpKSB7XG4rXHRcdGludCBjbGllbnRfZmQgPSBhY2NlcHQoc2VydmVyLVx1MDAzZWZkLCBOVUxMLCBOVUxMKTtcbitcbitcdFx0aWYgKGNsaWVudF9mZCA9PSAtMSkge1xuK1x0XHRcdGlmICghYXRvbWljX2xvYWQoXHUwMDI2c2VydmVyLVx1MDAzZXJ1bm5pbmcpKVxuK1x0XHRcdFx0YnJlYWs7XG4rXG4rXHRcdFx0Y29udGludWU7XG4rXHRcdH1cbitcbitcdFx0cHJvY2Vzc19jbGllbnQoY2xpZW50X2ZkLCBcdTAwMjZzZXJ2ZXItXHUwMDNlcnVubmluZywgXHUwMDI2ZmFpbGVkKTtcbitcdH1cbitcbitcdGlmIChmYWlsZWQpXG4rXHRcdHJldHVybiAodm9pZCAqKTE7XG4rXG4rXHRyZXR1cm4gTlVMTDtcbit9XG4rXG4rc3RhdGljIGludCBzZW5kX3BheWxvYWQoc3RydWN0IF9fdGVzdF9tZXRhZGF0YSAqX21ldGFkYXRhLCBpbnQgZmQsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcbit7XG4rXHRzaXplX3QgcmVtYWluaW5nID0gbGVuO1xuK1xuK1x0ZG8ge1xuK1x0XHRzc2l6ZV90IGJ5dGVzID0gd3JpdGUoZmQsIGJ1ZiArIChsZW4gLSByZW1haW5pbmcpLCByZW1haW5pbmcpO1xuK1xuK1x0XHRpZiAoYnl0ZXMgXHUwMDNjIDApIHtcbitcdFx0XHRpZiAoZXJybm8gPT0gRUlOVFIpXG4rXHRcdFx0XHRjb250aW51ZTtcbitcbitcdFx0XHRyZXR1cm4gLTE7XG4rXHRcdH1cbitcbitcdFx0cmVtYWluaW5nIC09IGJ5dGVzO1xuK1x0fSB3aGlsZSAocmVtYWluaW5nKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitGSVhUVVJFKHNvY2ttYXBfcmVjdmZyb20pXG4re1xuK1x0c3RydWN0IHNlcnZlcl90IHNlcnZlcjtcbitcdHN0cnVjdCBzb2NrYWRkcl9pbiBhZGRyO1xuK1x0c3RydWN0IGJwZl90IGJwZjtcbitcdGNoYXIgKnBheWxvYWQ7XG4rXHRzaXplX3QgcGF5bG9hZF9sZW47XG4rfTtcbitcbitGSVhUVVJFX1ZBUklBTlQoc29ja21hcF9yZWN2ZnJvbSlcbit7XG4rXHRib29sIHdpdGhfcmVjdjtcbit9O1xuK1xuK0ZJWFRVUkVfVkFSSUFOVF9BREQoc29ja21hcF9yZWN2ZnJvbSwgcmVjdm1zZylcbit7XG4rXHQud2l0aF9yZWN2ID0gZmFsc2Vcbit9O1xuK1xuK0ZJWFRVUkVfVkFSSUFOVF9BREQoc29ja21hcF9yZWN2ZnJvbSwgcmVjdm1zZ19wYXJzZXIpXG4re1xuK1x0LndpdGhfcmVjdiA9IHRydWVcbit9O1xuK1xuK0ZJWFRVUkVfU0VUVVAoc29ja21hcF9yZWN2ZnJvbSlcbit7XG4rXHRtZW1zZXQoXHUwMDI2c2VsZi1cdTAwM2VzZXJ2ZXIsIDAsIHNpemVvZihzZWxmLVx1MDAzZXNlcnZlcikpO1xuK1x0c2VsZi1cdTAwM2VzZXJ2ZXIuZmQgPSAtMTtcbitcbitcdG1lbXNldChcdTAwMjZzZWxmLVx1MDAzZWFkZHIsIDAsIHNpemVvZihzZWxmLVx1MDAzZWFkZHIpKTtcbitcbitcdHNlbGYtXHUwMDNlcGF5bG9hZF9sZW4gPSAxMDI0ICogMTAyNCAqIDI1O1xuK1x0c2VsZi1cdTAwM2VwYXlsb2FkID0gbWFsbG9jKHNlbGYtXHUwMDNlcGF5bG9hZF9sZW4pO1xuK1x0QVNTRVJUX05FKHNlbGYtXHUwMDNlcGF5bG9hZCwgTlVMTCk7XG4rXG4rXHRtZW1zZXQoc2VsZi1cdTAwM2VwYXlsb2FkLCAwLCBzZWxmLVx1MDAzZXBheWxvYWRfbGVuKTtcbitcdHNlbGYtXHUwMDNlcGF5bG9hZFtzZWxmLVx1MDAzZXBheWxvYWRfbGVuIC0gMV0gPSBQQVlMT0FEX0VORDtcbitcbitcdHNldHVwX2JwZihfbWV0YWRhdGEsIFwic29ja21hcF9yZWN2ZnJvbS5icGYub1wiLCB2YXJpYW50LVx1MDAzZXdpdGhfcmVjdiwgXHUwMDI2c2VsZi1cdTAwM2VicGYpO1xuK1x0YXRvbWljX3N0b3JlKFx1MDAyNnNlbGYtXHUwMDNlc2VydmVyLnJ1bm5pbmcsIDEpO1xuK1x0c2VsZi1cdTAwM2VzZXJ2ZXIuZmQgPSBzdGFydF9saXN0ZW5pbmcoX21ldGFkYXRhLCBcdTAwMjZzZWxmLVx1MDAzZWFkZHIuc2luX3BvcnQpO1xuK1xuK1x0c2VsZi1cdTAwM2VhZGRyLnNpbl9mYW1pbHkgPSBBRl9JTkVUO1xuK1x0c2VsZi1cdTAwM2VhZGRyLnNpbl9hZGRyLnNfYWRkciA9IGh0b25sKElOQUREUl9MT09QQkFDSyk7XG4rXG4rXHRBU1NFUlRfRVEocHRocmVhZF9jcmVhdGUoXHUwMDI2c2VsZi1cdTAwM2VzZXJ2ZXIudGhyZWFkLCBOVUxMLCBcdTAwMjZydW5fc2VydmVyLCBcdTAwMjZzZWxmLVx1MDAzZXNlcnZlciksIDApO1xuK1x0c2VsZi1cdTAwM2VzZXJ2ZXIudGhyZWFkX2NyZWF0ZWQgPSB0cnVlO1xuK31cbitcbitGSVhUVVJFX1RFQVJET1dOKHNvY2ttYXBfcmVjdmZyb20pXG4re1xuK1x0YXRvbWljX3N0b3JlKFx1MDAyNnNlbGYtXHUwMDNlc2VydmVyLnJ1bm5pbmcsIDApO1xuK1xuK1x0aWYgKHNlbGYtXHUwMDNlc2VydmVyLmZkICE9IC0xKVxuK1x0XHRzaHV0ZG93bihzZWxmLVx1MDAzZXNlcnZlci5mZCwgU0hVVF9SRCk7XG4rXG4rXHRpZiAoc2VsZi1cdTAwM2VzZXJ2ZXIudGhyZWFkX2NyZWF0ZWQpIHtcbitcdFx0dm9pZCAqcmV0dmFsID0gTlVMTDtcbitcbitcdFx0cHRocmVhZF9qb2luKHNlbGYtXHUwMDNlc2VydmVyLnRocmVhZCwgXHUwMDI2cmV0dmFsKTtcbitcdFx0RVhQRUNUX0VRKHJldHZhbCwgTlVMTCk7XG4rXHR9XG4rXG4rXHRpZiAoc2VsZi1cdTAwM2VzZXJ2ZXIuZmQgIT0gLTEpXG4rXHRcdGNsb3NlKHNlbGYtXHUwMDNlc2VydmVyLmZkKTtcbitcbitcdGZyZWUoc2VsZi1cdTAwM2VwYXlsb2FkKTtcbitcdGJwZl9saW5rX19kZXN0cm95KHNlbGYtXHUwMDNlYnBmLm9uX3NvY2tvcHMpO1xuK1xuK1x0aWYgKHNlbGYtXHUwMDNlYnBmLm9uX3JlY3YpXG4rXHRcdGJwZl9saW5rX19kZXN0cm95KHNlbGYtXHUwMDNlYnBmLm9uX3JlY3YpO1xuK1xuK1x0YnBmX29iamVjdF9fY2xvc2Uoc2VsZi1cdTAwM2VicGYub2JqKTtcbit9XG4rXG4rVEVTVF9GKHNvY2ttYXBfcmVjdmZyb20sIG5vX3RpbWVvdXQpXG4re1xuK1x0Y2hhciBpZ25vcmVkWzEyOF07XG4rXG4rXHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgTUFYX0lURVJBVElPTlM7ICsraSkge1xuK1x0XHRpbnQgZmQgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19TVFJFQU0sIElQUFJPVE9fVENQKTtcbitcbitcdFx0QVNTRVJUX05FKGZkLCAtMSk7XG4rXHRcdEFTU0VSVF9FUShjb25uZWN0KGZkLCAoc3RydWN0IHNvY2thZGRyICopXHUwMDI2c2VsZi1cdTAwM2VhZGRyLCBzaXplb2Yoc2VsZi1cdTAwM2VhZGRyKSksIDApO1xuK1xuK1x0XHRBU1NFUlRfRVEoc2VuZF9wYXlsb2FkKF9tZXRhZGF0YSwgZmQsIHNlbGYtXHUwMDNlcGF5bG9hZCwgc2VsZi1cdTAwM2VwYXlsb2FkX2xlbiksIDApO1xuK1xuK1x0XHRpZiAocmVjdmZyb20oZmQsIGlnbm9yZWQsIHNpemVvZihpZ25vcmVkKSwgMCwgTlVMTCwgTlVMTCkgXHUwMDNjIDApXG4rXHRcdFx0QVNTRVJUX05FKGVycm5vLCBFQUdBSU4pO1xuK1xuK1x0XHRjbG9zZShmZCk7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyBpbnQ2NF90IHRvX25hbm9zKHN0cnVjdCB0aW1lc3BlYyAqdGltZSlcbit7XG4rXHRyZXR1cm4gKHRpbWUtXHUwMDNldHZfc2VjICogMTAwMDAwMDAwMExMKSArIHRpbWUtXHUwMDNldHZfbnNlYztcbit9XG4rXG4rVEVTVF9GKHNvY2ttYXBfcmVjdmZyb20sIHdpdGhfdGltZW91dClcbit7XG4rXHRjaGFyIGlnbm9yZWRbMTI4XTtcbitcdHN0cnVjdCB0aW1ldmFsIHRpbWVvO1xuK1xuK1x0dGltZW8udHZfc2VjID0gMDtcbitcdHRpbWVvLnR2X3VzZWMgPSA1MDAwO1xuK1xuK1x0LyogcmVtb3ZlIHRoZSBwYXlsb2FkIGVuZCBkZWxpbWl0ZXIgc28gdGhlIHNlcnZlciBuZXZlciByZXNwb25kcyBhbmQgcmVjdmZyb20gdGltZXMgb3V0LiAqL1xuK1x0c2VsZi1cdTAwM2VwYXlsb2FkW3NlbGYtXHUwMDNlcGF5bG9hZF9sZW4gLSAxXSA9IDA7XG4rXG4rXHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgTUFYX0lURVJBVElPTlM7ICsraSkge1xuK1x0XHRzdHJ1Y3QgdGltZXNwZWMgYmVnO1xuK1x0XHRzdHJ1Y3QgdGltZXNwZWMgZW5kO1xuK1x0XHRpbnQgZXJyO1xuK1xuK1x0XHRpbnQgZmQgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19TVFJFQU0sIElQUFJPVE9fVENQKTtcbitcbitcdFx0QVNTRVJUX05FKGZkLCAtMSk7XG4rXHRcdEFTU0VSVF9FUShjb25uZWN0KGZkLCAoc3RydWN0IHNvY2thZGRyICopXHUwMDI2c2VsZi1cdTAwM2VhZGRyLCBzaXplb2Yoc2VsZi1cdTAwM2VhZGRyKSksIDApO1xuK1xuK1x0XHRBU1NFUlRfRVEoc2VuZF9wYXlsb2FkKF9tZXRhZGF0YSwgZmQsIHNlbGYtXHUwMDNlcGF5bG9hZCwgc2VsZi1cdTAwM2VwYXlsb2FkX2xlbiksIDApO1xuK1xuK1x0XHRBU1NFUlRfRVEoc2V0c29ja29wdChmZCwgU09MX1NPQ0tFVCwgU09fUkNWVElNRU8sIFx1MDAyNnRpbWVvLCBzaXplb2YodGltZW8pKSwgMCk7XG4rXG4rXHRcdGNsb2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDLCBcdTAwMjZiZWcpO1xuK1x0XHRBU1NFUlRfRVEocmVjdmZyb20oZmQsIGlnbm9yZWQsIHNpemVvZihpZ25vcmVkKSwgMCwgTlVMTCwgTlVMTCksIC0xKTtcbitcdFx0ZXJyID0gZXJybm87XG4rXHRcdGNsb2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDLCBcdTAwMjZlbmQpO1xuK1xuK1x0XHRBU1NFUlRfRVEoZXJyLCBFQUdBSU4pO1xuK1x0XHRBU1NFUlRfR0UodG9fbmFub3MoXHUwMDI2ZW5kKSAtIHRvX25hbm9zKFx1MDAyNmJlZyksIHRpbWVvLnR2X3VzZWMgKiAxMDAwKTtcbitcbitcdFx0Y2xvc2UoZmQpO1xuK1x0fVxuK31cbitcbitURVNUX0hBUk5FU1NfTUFJTlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMDQ6MTQ6MTkuNDM5MzkxMDM4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTM3MDg3MDEwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBUQ1AgQlBGIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG5ldC9pcHY0L3RjcF9icGYuY2AuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgaW4gaG93IGB0Y3BfbXNnX3dhaXRfZGF0YWAgaGFuZGxlcyB0aGUgdGltZW91dDsgaXQncyBub3cgdGFraW5nIGEgcG9pbnRlciB0byBgdGltZW9gIGluc3RlYWQgb2YgdGhlIHZhbHVlIGl0c2VsZi4gVGhhdCdzIGEgZnVuZGFtZW50YWwgc2hpZnQgaW4gaG93IHRoZSBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgdGltZW91dCBtZWNoYW5pc20sIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zLiBUaGUgcGF0Y2ggYWxzbyB1cGRhdGVzIGB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyYCBhbmQgYHRjcF9icGZfcmVjdm1zZ2AsIHNwZWNpZmljYWxseSB0byBwYXNzIHRoZSBhZGRyZXNzIG9mIGB0aW1lb2AgYW5kIGhhbmRsZSBhIHBvdGVudGlhbCBqdW1wIHRvIGBtc2dfYnl0ZXNfcmVhZHlgLiBUaGlzIGlzIG1ha2luZyBtZSB0aGluayBhYm91dCBob3cgdGhlIHRpbWVvdXQgaXMgdXNlZCBpbiB0aGUgQlBGIHNvY2ttYXAgY29udGV4dCDigJMgaXMgaXQgYW4gb3B0aW1pemF0aW9uLCBhIGJ1ZyBmaXgsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaGUgaW50cm9kdWN0aW9uIG9mIHRoZSBgc29ja21hcF9yZWN2ZnJvbWAgc2VsZnRlc3QgaXMgYSBnb29kIHNpZ24sIGJ1dCBJIG5lZWQgdG8gY29uZmlybSBpdHMgY292ZXJhZ2UuXG5cbk15IGltbWVkaWF0ZSBjb25jZXJuIGlzIHJlYWNoYWJpbGl0eSBhbmQgZnVuY3Rpb25hbGl0eS4gVGhlIGNoYW5nZXMgZGlyZWN0bHkgaW1wYWN0IGB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyYCBhbmQgYHRjcF9icGZfcmVjdm1zZ2AsIHdoaWNoIGFyZSBvYnZpb3VzbHkgY3JpdGljYWwgdG8gdGhlIEJQRiBzb2NrbWFwIGZ1bmN0aW9uYWxpdHksIHNvIGEgZGVlcCBkaXZlIGludG8gdGhlIEJQRiBpbXBsZW1lbnRhdGlvbiBpcyByZXF1aXJlZC4gR2l2ZW4gdGhhdCB0aGlzIGlzIHRvdWNoaW5nIGNvcmUgbmV0d29ya2luZyBhbmQgQlBGIGxvZ2ljLCBmdXp6aW5nIHNlZW1zIGxpa2UgYSB2ZXJ5IGdvb2QgaWRlYS5cblxuTmV4dCwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24uIEknbSBnb2luZyB0byBoYXZlIHRvIGNoZWNrIHdoYXQncyBnb2luZyBvbiBpbiBgbmV0L2lwdjQvTWFrZWZpbGVgLiBJJ20gZ3Vlc3NpbmcgYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgYSBnaXZlbiwgYnV0IEknbGwgYWxzbyBoYXZlIHRvIHNlZSBpZiBgQ09ORklHX05FVF9TT0NLX01TR2Agb3IgYENPTkZJR19CUEZfU1RSRUFNX1BBUlNFUmAgYXJlIGFsc28gZGVwZW5kZW5jaWVzLiBVbmRlcnN0YW5kaW5nIHRoZSBidWlsZCBjb25maWd1cmF0aW9uIHdpbGwgdGVsbCBtZSBob3cgdG8gYnVpbGQgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzQ1NSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2NywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDA0OjE0OjI0LjgxMDI2MzM4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1ODg4MDk1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Y3BfYnBmXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L01ha2VmaWxlPTYyPW9iai0kKENPTkZJR19UQ1BfQ09OR19JTExJTk9JUykgKz0gdGNwX2lsbGlub2lzLm9cXG5uZXQvaXB2NC9NYWtlZmlsZTo2MzpvYmotJChDT05GSUdfTkVUX1NPQ0tfTVNHKSArPSB0Y3BfYnBmLm9cXG5uZXQvaXB2NC9NYWtlZmlsZS02NC1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IHVkcF9icGYub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwNDoxNDoyNS4yNjkxNDkwOTVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTM0NzE5NDkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipLZXJuZWwgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMgZm9yIFNvY2tldCBGaWx0ZXJpbmcqKlxuXG5SaWdodCwgc28gSSBzZWUgd2UgYWJzb2x1dGVseSBuZWVkIGBDT05GSUdfTkVUX1NPQ0tfTVNHYCBlbmFibGVkLiBUaGF0J3MgYSBnaXZlbjsgaXQncyB0aGUgZm91bmRhdGlvbi4gTm93LCBzaW5jZSB3ZSdyZSBkZWFsaW5nIHdpdGggc29ja2V0cywgcGFydGljdWxhcmx5IHRoZSBwb3RlbnRpYWwgZm9yIEJQRiBmaWx0ZXJpbmcgd2l0aGluIHRoZSBUQ1Agc3RhY2ssIG15IG5leHQgbW92ZSBpcyB0byBkaXZlIHN0cmFpZ2h0IGludG8gYHRjcF9icGYuY2AuIEkgbmVlZCB0byBlbnN1cmUgdGhlcmUgYXJlbid0IGFueSBvdGhlciwgbGVzcyBvYnZpb3VzIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIGx1cmtpbmcgd2l0aGluIHRoYXQgZmlsZSB0aGF0IEkgbWlnaHQgbmVlZCB0byBjb25zaWRlci4gV2UgY2FuJ3QgaGF2ZSBhbnkgc3VycHJpc2VzIHdoZW4gd2Ugc3RhcnQgbWFraW5nIGNoYW5nZXMuIE15IGFpbSBoZXJlIGlzIHRvIGVuc3VyZSB0aGUgY29uZmlndXJhdGlvbiBpcyBjb21wbGV0ZSwgYW5kIHRoYXQgd2UgaGF2ZSB0aGUgbWF4aW11bSBwZXJmb3JtYW5jZSBwcm9maWxlIHRvIHdvcmsgd2l0aC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODIzOCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDA0OjE0OjI4LjQwMzg3MDc1N1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTk3ODU2NTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC90Y3BfYnBmLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvdGNwX2JwZi5jPTE3OD1FWFBPUlRfU1lNQk9MX0dQTCh0Y3BfYnBmX3NlbmRtc2dfcmVkaXIpO1xcbm5ldC9pcHY0L3RjcF9icGYuYy0xNzktXFxubmV0L2lwdjQvdGNwX2JwZi5jOjE4MDojaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXFxubmV0L2lwdjQvdGNwX2JwZi5jLTE4MS1zdGF0aWMgaW50IHRjcF9tc2dfd2FpdF9kYXRhKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jayxcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYz03MTM9c3RhdGljIGludCB0Y3BfYnBmX2Fzc2VydF9wcm90b19vcHMoc3RydWN0IHByb3RvICpvcHMpXFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmMtNzIyLVxcbm5ldC9pcHY0L3RjcF9icGYuYzo3MjM6I2lmIElTX0VOQUJMRUQoQ09ORklHX0JQRl9TVFJFQU1fUEFSU0VSKVxcbm5ldC9pcHY0L3RjcF9icGYuYy03MjQtaW50IHRjcF9icGZfc3RycF9yZWFkX3NvY2soc3RydWN0IHN0cnBhcnNlciAqc3RycCwgcmVhZF9kZXNjcmlwdG9yX3QgKmRlc2MsXFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmMtNzU2LX1cXG5uZXQvaXB2NC90Y3BfYnBmLmM6NzU3OiNlbmRpZiAvKiBDT05GSUdfQlBGX1NUUkVBTV9QQVJTRVIgKi9cXG5uZXQvaXB2NC90Y3BfYnBmLmMtNzU4LVxcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jPTgwMz12b2lkIHRjcF9icGZfY2xvbmUoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqbmV3c2spXFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmMtODA5LX1cXG5uZXQvaXB2NC90Y3BfYnBmLmM6ODEwOiNlbmRpZiAvKiBDT05GSUdfQlBGX1NZU0NBTEwgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMDQ6MTQ6MjguNTYzNjYxNDU4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM4MjcxNjUxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgQlBGLVJlbGF0ZWQgVENQIEZ1bmN0aW9uYWxpdHkqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBtb2RpZmllZCBUQ1AgZnVuY3Rpb25zOiBgdGNwX21zZ193YWl0X2RhdGFgLCBgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcmAsIGFuZCBgdGNwX2JwZl9yZWN2bXNnYC4gVGhleSdyZSBhbGwgZ3VhcmRlZCBieSBgI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTGAsIHdoaWNoIG1lYW5zIEkgbmVlZCB0byBtYWtlIHN1cmUgYEJQRl9TWVNDQUxMYCBhbmQgYE5FVF9TT0NLX01TR2AgYXJlIGFjY291bnRlZCBmb3IgaW4gbXkgYW5hbHlzaXMuIFxuXG5Ob3csIGxldCdzIGhvbmUgaW4gb24gdGhlIGNvcmUgZnVuY3Rpb25zLiBJIG5lZWQgdG8gZm9jdXMgb24gYHRjcF9icGZfcmVjdm1zZ19wYXJzZXJgLCBgdGNwX2JwZl9yZWN2bXNnYCwgYW5kIGB0Y3BfbXNnX3dhaXRfZGF0YWAuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGB0Y3BfYnBmX3JlY3Ztc2dgIGFuZCBgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcmAgYXJlIHByaW1lIHRhcmdldHMgZm9yIGRlZXBlciBleGFtaW5hdGlvbiBhcyBwb3RlbnRpYWwgXCJob3QtcGF0aFwiIGFyZWFzLiBTaW5jZSB0aGV5IGFyZSByZWN2bXNnIGltcGxlbWVudGF0aW9ucyBzcGVjaWZpYyB0byBzb2NrbWFwLCBub3QgdGhlIGdlbmVyaWMgYHRjcF9yZWN2bXNnYCwgdGhleSBhcmUgZXhjZWxsZW50IGNhbmRpZGF0ZXMgZm9yIGluY2x1c2lvbiBpbiBGb2N1c1N5bWJvbHMuXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJ20gZ29pbmcgdG8gZG91YmxlLWNoZWNrIHRob3NlIHR3byBzcGVjaWZpYyBmdW5jdGlvbnMsIGB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyYCBhbmQgYHRjcF9icGZfcmVjdm1zZ2AsIHRvIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZyBhbmQgbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg4NzUsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMDQ6MTQ6MzIuOTQ2MzgwNDIzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1MjE3MDc2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRjcF9icGZfcmVjdm1zZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC90Y3BfYnBmLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvdGNwX2JwZi5jPTIwMz1zdGF0aWMgYm9vbCBpc19uZXh0X21zZ19maW4oc3RydWN0IHNrX3Bzb2NrICpwc29jaylcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYy0yMjAtXFxubmV0L2lwdjQvdGNwX2JwZi5jOjIyMTpzdGF0aWMgaW50IHRjcF9icGZfcmVjdm1zZ19wYXJzZXIoc3RydWN0IHNvY2sgKnNrLFxcbm5ldC9pcHY0L3RjcF9icGYuYy0yMjItXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbXNnaGRyICptc2csXFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmM9MzM4PXN0YXRpYyBpbnQgdGNwX2JwZl9pb2N0bChzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIGludCAqa2FyZylcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYy0zNTUtXFxubmV0L2lwdjQvdGNwX2JwZi5jOjM1NjpzdGF0aWMgaW50IHRjcF9icGZfcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcXG5uZXQvaXB2NC90Y3BfYnBmLmMtMzU3LVxcdFxcdFxcdCAgIGludCBmbGFncylcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYz02NzQ9c3RhdGljIHZvaWQgdGNwX2JwZl9yZWJ1aWxkX3Byb3RvcyhzdHJ1Y3QgcHJvdG8gcHJvdFtUQ1BfQlBGX05VTV9DRkdTXSxcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYy02NzktXFx0cHJvdFtUQ1BfQlBGX0JBU0VdLmNsb3NlXFx0XFx0PSBzb2NrX21hcF9jbG9zZTtcXG5uZXQvaXB2NC90Y3BfYnBmLmM6NjgwOlxcdHByb3RbVENQX0JQRl9CQVNFXS5yZWN2bXNnXFx0XFx0PSB0Y3BfYnBmX3JlY3Ztc2c7XFxubmV0L2lwdjQvdGNwX2JwZi5jLTY4MS1cXHRwcm90W1RDUF9CUEZfQkFTRV0uc29ja19pc19yZWFkYWJsZVxcdD0gc2tfbXNnX2lzX3JlYWRhYmxlO1xcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jLTY4Ny1cXHRwcm90W1RDUF9CUEZfUlhdXFx0XFx0XFx0PSBwcm90W1RDUF9CUEZfQkFTRV07XFxubmV0L2lwdjQvdGNwX2JwZi5jOjY4ODpcXHRwcm90W1RDUF9CUEZfUlhdLnJlY3Ztc2dcXHRcXHQ9IHRjcF9icGZfcmVjdm1zZ19wYXJzZXI7XFxubmV0L2lwdjQvdGNwX2JwZi5jLTY4OS1cXG5uZXQvaXB2NC90Y3BfYnBmLmMtNjkwLVxcdHByb3RbVENQX0JQRl9UWFJYXVxcdFxcdFxcdD0gcHJvdFtUQ1BfQlBGX1RYXTtcXG5uZXQvaXB2NC90Y3BfYnBmLmM6NjkxOlxcdHByb3RbVENQX0JQRl9UWFJYXS5yZWN2bXNnXFx0XFx0PSB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyO1xcbm5ldC9pcHY0L3RjcF9icGYuYy02OTItfVxcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jPTcyND1pbnQgdGNwX2JwZl9zdHJwX3JlYWRfc29jayhzdHJ1Y3Qgc3RycGFyc2VyICpzdHJwLCByZWFkX2Rlc2NyaXB0b3JfdCAqZGVzYyxcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYy03NDctXFx0ICogRm9yIFNLX1JFRElSRUNULCB3ZSBuZWVkIHRvIGFjayB0aGUgZnJhbWUgaW1tZWRpYXRlbHkgYnV0IGZvclxcbm5ldC9pcHY0L3RjcF9icGYuYzo3NDg6XFx0ICogU0tfUEFTUywgd2Ugd2FudCB0byBkZWxheSB0aGUgYWNrIHVudGlsIHRjcF9icGZfcmVjdm1zZ19wYXJzZXIoKS5cXG5uZXQvaXB2NC90Y3BfYnBmLmMtNzQ5LVxcdCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwNDoxNDozMy4wMjE2MjExOTlaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NjI3ODIxOTk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBCUEYgU29ja21hcCBUaW1lb3V0IEZpeCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0J3MgZGVhbGluZyB3aXRoIGByZWN2bXNnYCBoYW5kbGVycy4gU3BlY2lmaWNhbGx5LCB0aGVzZSBoYW5kbGVycyBhcmUgdXNlZCB3aXRoIFRDUCBzb2NrZXRzIHRoYXQgYXJlIHBsYWNlZCB3aXRoaW4gYSBCUEYgc29ja21hcCDigJMgc28sIHdlJ3JlIHRhbGtpbmcgYWJvdXQgYSB2ZXJ5IHRhcmdldGVkIGFyZWEgaGVyZSwgd2hpY2ggaXMgZ29vZCBiZWNhdXNlIGl0IG1ha2VzIHRoZSBzY29wZSBtYW5hZ2VhYmxlLiBJdCdzIG5vdCBhIGdlbmVyaWMgaXNzdWU7IGl0J3MgcmlnaHQgaW4gdGhlIHN3ZWV0IHNwb3Qgb2YgdGhpcyBzcGVjaWZpYyBuZXR3b3JraW5nIGNvbmZpZ3VyYXRpb24uXG5cblRoZSBjb25maWd1cmF0aW9ucyBiZWluZyBjaGFuZ2VkLCBgQlBGX1NZU0NBTExgIGFuZCBgTkVUX1NPQ0tfTVNHYCwgY29uZmlybSB3ZSdyZSBkZWFsaW5nIHdpdGggc3lzdGVtIGNhbGxzIHJlbGF0ZWQgdG8gbmV0d29ya2luZyBtZXNzYWdlcyB3aXRoaW4gdGhlIEJQRiBjb250ZXh0LCBzbyB0aGlzIGlzIGRlZmluaXRlbHkgcmVsYXRlZCB0byB0aGUgcmlnaHQgc3Vic3lzdGVtLiBJIHNlZSB3ZSdyZSBmb2N1c2luZyBvbiB0aGUgYHRjcF9icGZfcmVjdm1zZ19wYXJzZXJgLCBgdGNwX2JwZl9yZWN2bXNnYCwgYW5kIGB0Y3BfbXNnX3dhaXRfZGF0YWAgc3ltYm9scy4gVGhhdCBuYXJyb3dzIHRoaW5ncyBkb3duIGV2ZW4gZnVydGhlciDigJMgaXQncyBhbGwgYWJvdXQgaG93IHRoZXNlIGZ1bmN0aW9ucyBoYW5kbGUgdGhlIHJldHJpZXZhbCBvZiBkYXRhLlxuXG5NeSByZWFzb25pbmcgbGVhZHMgbWUgdG8gYmVsaWV2ZSB0aGUgcGF0Y2ggaXMgdGFyZ2V0aW5nIHRpbWVvdXQgaGFuZGxpbmcgd2l0aGluIGB0Y3BfYnBmX3JlY3Ztc2dgIGFuZCBgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcmAuIFRoZSBmaXggc3BlY2lmaWNhbGx5IGFkZHJlc3NlcyB0aGUgdGltZW91dCB2YWx1ZSB1cGRhdGUgd2l0aGluIGB0Y3BfbXNnX3dhaXRfZGF0YWAgYW5kIGludHJvZHVjZXMgYSByZXRyeSBtZWNoYW5pc20gaWYgdGhlIHRpbWVvdXQgaGFzbid0IHlldCBlbGFwc2VkLiBUaGlzIGlzIGNyaXRpY2FsIGNvcmUgbmV0d29ya2luZyBsb2dpYyDigJMgdGhlIGhhbmRsaW5nIG9mIHNvY2tldCByZWFkcyBhbmQgbWVzc2FnZSB3YWl0cyB1bmRlciBCUEYgc29ja21hcCwgd2hpY2ggbWVhbnMgY29ycmVjdCB0aW1lb3V0IGhhbmRsaW5nIGlzIGVzc2VudGlhbCBmb3IgcmVsaWFibGUgb3BlcmF0aW9uLiBUaGlzIGlzIGEgdmVyeSB0YXJnZXRlZCBmaXggcmVsYXRlZCB0byBhIEJQRiBzb2NrbWFwLiBJdCdzIG5vdCBhIHBlcmZvcm1hbmNlIHR3ZWFrLCBidXQgbW9yZSBvZiBhIHJlbGlhYmlsaXR5IGZpeCByZWxhdGVkIHRvIGEgdmVyeSBzcGVjaWZpYyBuZXR3b3JrIGNvbmRpdGlvbi4gTGV0J3MgY2FsbCB0aGlzIHNldC1yZXN1bHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDE1MCwiT3V0cHV0VG9rZW5zIjoxNTIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMDQ6MTQ6MzguNjQ5NDQ1NDU3WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI1OTk4NjEzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiTkVUX1NPQ0tfTVNHXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGNwX2JwZl9yZWN2bXNnX3BhcnNlclwiLFxuICAgIFwidGNwX2JwZl9yZWN2bXNnXCIsXG4gICAgXCJ0Y3BfbXNnX3dhaXRfZGF0YVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRpbWVvdXQgaGFuZGxpbmcgaW4gQlBGIHNvY2ttYXAncyByZWN2bXNnIGltcGxlbWVudGF0aW9ucyAodGNwX2JwZl9yZWN2bXNnIGFuZCB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyKS4gSXQgY29ycmVjdGx5IHVwZGF0ZXMgdGhlIHJlbWFpbmluZyB0aW1lb3V0IHZhbHVlIGluIHRjcF9tc2dfd2FpdF9kYXRhIGFuZCByZXRyaWVzIHJlYWRpbmcgaWYgdGhlIHRpbWVvdXQgaGFzbid0IGV4cGlyZWQuIFRoaXMgaXMgZnVuY3Rpb25hbCBjb3JlIG5ldHdvcmtpbmcgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJORVRfU09DS19NU0dcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyXCIsXG4gICAgXCJ0Y3BfYnBmX3JlY3Ztc2dcIixcbiAgICBcInRjcF9tc2dfd2FpdF9kYXRhXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGltZW91dCBoYW5kbGluZyBpbiBCUEYgc29ja21hcCdzIHJlY3Ztc2cgaW1wbGVtZW50YXRpb25zICh0Y3BfYnBmX3JlY3Ztc2cgYW5kIHRjcF9icGZfcmVjdm1zZ19wYXJzZXIpLiBJdCBjb3JyZWN0bHkgdXBkYXRlcyB0aGUgcmVtYWluaW5nIHRpbWVvdXQgdmFsdWUgaW4gdGNwX21zZ193YWl0X2RhdGEgYW5kIHJldHJpZXMgcmVhZGluZyBpZiB0aGUgdGltZW91dCBoYXNuJ3QgZXhwaXJlZC4gVGhpcyBpcyBmdW5jdGlvbmFsIGNvcmUgbmV0d29ya2luZyBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowzmk8h[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-16 03:54:09 +0000 UTC FinishedAt: 2026-07-16 04:14:40 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "d1f4b56417a3dc1a0600f960b14f46bd25eda89d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "NET_SOCK_MSG" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "d1f4b56417a3dc1a0600f960b14f46bd25eda89d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "NET_SOCK_MSG" ], "series_id": "56ae867f-1d48-4c9b-ac36-55084c9e5fdf" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "tcp_bpf_recvmsg_parser", "tcp_bpf_recvmsg", "tcp_msg_wait_data" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDA0OjE0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O05FVF9TT0NLX01TRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RjcF9icGZfcmVjdm1zZ19wYXJzZXImIzM0OywKICAgICYjMzQ7dGNwX2JwZl9yZWN2bXNnJiMzNDssCiAgICAmIzM0O3RjcF9tc2dfd2FpdF9kYXRhJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRpbWVvdXQgaGFuZGxpbmcgaW4gQlBGIHNvY2ttYXAmIzM5O3MgcmVjdm1zZyBpbXBsZW1lbnRhdGlvbnMgKHRjcF9icGZfcmVjdm1zZyBhbmQgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcikuIEl0IGNvcnJlY3RseSB1cGRhdGVzIHRoZSByZW1haW5pbmcgdGltZW91dCB2YWx1ZSBpbiB0Y3BfbXNnX3dhaXRfZGF0YSBhbmQgcmV0cmllcyByZWFkaW5nIGlmIHRoZSB0aW1lb3V0IGhhc24mIzM5O3QgZXhwaXJlZC4gVGhpcyBpcyBmdW5jdGlvbmFsIGNvcmUgbmV0d29ya2luZyBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDQ6MTQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAwM2FmNDM1NWJlNDJmOGVjNDZiYmI1MzQ4NzYwM2M4MGI1NTgxOWI5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMTYgMDQ6MTQ6MTcgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2JwZi5jIGIvbmV0L2lwdjQvdGNwX2JwZi5jXG5pbmRleCBjYzBiZDczZjM2YjZkNi4uYWE1YzVkNzQxNTk5YTMgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC90Y3BfYnBmLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L3RjcF9icGYuY1xuQEAgLTE3OSw3ICYjNDM7MTc5LDcgQEAgRVhQT1JUX1NZTUJPTF9HUEwodGNwX2JwZl9zZW5kbXNnX3JlZGlyKTtcbiBcbiAjaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXG4gc3RhdGljIGludCB0Y3BfbXNnX3dhaXRfZGF0YShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2ssXG4tXHRcdFx0ICAgICBsb25nIHRpbWVvKVxuJiM0MztcdFx0XHQgICAgIGxvbmcgKnRpbWVvKVxuIHtcbiBcdERFRklORV9XQUlUX0ZVTkMod2FpdCwgd29rZW5fd2FrZV9mdW5jdGlvbik7XG4gXHRpbnQgcmV0ID0gMDtcbkBAIC0xODcsMTIgJiM0MzsxODcsMTIgQEAgc3RhdGljIGludCB0Y3BfbXNnX3dhaXRfZGF0YShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2ssXG4gXHRpZiAoc2stXHUwMDNlc2tfc2h1dGRvd24gXHUwMDI2IFJDVl9TSFVURE9XTilcbiBcdFx0cmV0dXJuIDE7XG4gXG4tXHRpZiAoIXRpbWVvKVxuJiM0MztcdGlmICghKnRpbWVvKVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuIFx0YWRkX3dhaXRfcXVldWUoc2tfc2xlZXAoc2spLCBcdTAwMjZ3YWl0KTtcbiBcdHNrX3NldF9iaXQoU09DS1dRX0FTWU5DX1dBSVREQVRBLCBzayk7XG4tXHRyZXQgPSBza193YWl0X2V2ZW50KHNrLCBcdTAwMjZ0aW1lbyxcbiYjNDM7XHRyZXQgPSBza193YWl0X2V2ZW50KHNrLCB0aW1lbyxcbiBcdFx0XHQgICAgIWxpc3RfZW1wdHkoXHUwMDI2cHNvY2stXHUwMDNlaW5ncmVzc19tc2cpIHx8XG4gXHRcdFx0ICAgICFza2JfcXVldWVfZW1wdHlfbG9ja2xlc3MoXHUwMDI2c2stXHUwMDNlc2tfcmVjZWl2ZV9xdWV1ZSksIFx1MDAyNndhaXQpO1xuIFx0c2tfY2xlYXJfYml0KFNPQ0tXUV9BU1lOQ19XQUlUREFUQSwgc2spO1xuQEAgLTIyOSw2ICYjNDM7MjI5LDcgQEAgc3RhdGljIGludCB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyKHN0cnVjdCBzb2NrICpzayxcbiBcdGludCBjb3BpZWRfZnJvbV9zZWxmID0gMDtcbiBcdGludCBjb3BpZWQgPSAwO1xuIFx0dTMyIHNlcTtcbiYjNDM7XHRsb25nIHRpbWVvO1xuIFxuIFx0aWYgKHVubGlrZWx5KGZsYWdzIFx1MDAyNiBNU0dfRVJSUVVFVUUpKVxuIFx0XHRyZXR1cm4gaW5ldF9yZWN2X2Vycm9yKHNrLCBtc2csIGxlbik7XG5AQCAtMjYyLDYgJiM0MzsyNjMsOCBAQCBzdGF0aWMgaW50IHRjcF9icGZfcmVjdm1zZ19wYXJzZXIoc3RydWN0IHNvY2sgKnNrLFxuIFx0XHR9XG4gXHR9XG4gXG4mIzQzO1x0dGltZW8gPSBzb2NrX3JjdnRpbWVvKHNrLCBmbGFncyBcdTAwMjYgTVNHX0RPTlRXQUlUKTtcbiYjNDM7XG4gbXNnX2J5dGVzX3JlYWR5OlxuIFx0Y29waWVkID0gX19za19tc2dfcmVjdm1zZyhzaywgcHNvY2ssIG1zZywgbGVuLCBmbGFncywgXHUwMDI2Y29waWVkX2Zyb21fc2VsZik7XG4gXHQvKiBUaGUgdHlwaWNhbCBjYXNlIGZvciBFRkFVTFQgaXMgdGhlIHNvY2tldCB3YXMgZ3JhY2VmdWxseVxuQEAgLTI4MCw3ICYjNDM7MjgzLDYgQEAgc3RhdGljIGludCB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyKHN0cnVjdCBzb2NrICpzayxcbiBcdH1cbiBcdHNlcSAmIzQzOz0gY29waWVkX2Zyb21fc2VsZjtcbiBcdGlmICghY29waWVkKSB7XG4tXHRcdGxvbmcgdGltZW87XG4gXHRcdGludCBkYXRhO1xuIFxuIFx0XHRpZiAoc29ja19mbGFnKHNrLCBTT0NLX0RPTkUpKVxuQEAgLTI5OSw3ICYjNDM7MzAxLDYgQEAgc3RhdGljIGludCB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyKHN0cnVjdCBzb2NrICpzayxcbiBcdFx0XHRnb3RvIG91dDtcbiBcdFx0fVxuIFxuLVx0XHR0aW1lbyA9IHNvY2tfcmN2dGltZW8oc2ssIGZsYWdzIFx1MDAyNiBNU0dfRE9OVFdBSVQpO1xuIFx0XHRpZiAoIXRpbWVvKSB7XG4gXHRcdFx0Y29waWVkID0gLUVBR0FJTjtcbiBcdFx0XHRnb3RvIG91dDtcbkBAIC0zMTAsMTMgJiM0MzszMTEsMTUgQEAgc3RhdGljIGludCB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyKHN0cnVjdCBzb2NrICpzayxcbiBcdFx0XHRnb3RvIG91dDtcbiBcdFx0fVxuIFxuLVx0XHRkYXRhID0gdGNwX21zZ193YWl0X2RhdGEoc2ssIHBzb2NrLCB0aW1lbyk7XG4mIzQzO1x0XHRkYXRhID0gdGNwX21zZ193YWl0X2RhdGEoc2ssIHBzb2NrLCBcdTAwMjZ0aW1lbyk7XG4gXHRcdGlmIChkYXRhIFx1MDAzYyAwKSB7XG4gXHRcdFx0Y29waWVkID0gZGF0YTtcbiBcdFx0XHRnb3RvIHVubG9jaztcbiBcdFx0fVxuIFx0XHRpZiAoZGF0YSBcdTAwMjZcdTAwMjYgIXNrX3Bzb2NrX3F1ZXVlX2VtcHR5KHBzb2NrKSlcbiBcdFx0XHRnb3RvIG1zZ19ieXRlc19yZWFkeTtcbiYjNDM7XHRcdGlmICghZGF0YSBcdTAwMjZcdTAwMjYgdGltZW8gXHUwMDNlIDApXG4mIzQzO1x0XHRcdGdvdG8gbXNnX2J5dGVzX3JlYWR5O1xuIFx0XHRjb3BpZWQgPSAtRUFHQUlOO1xuIFx0fVxuIG91dDpcbkBAIC0zNTUsNiAmIzQzOzM1OCw3IEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxuIHtcbiBcdHN0cnVjdCBza19wc29jayAqcHNvY2s7XG4gXHRpbnQgY29waWVkLCByZXQ7XG4mIzQzO1x0bG9uZyB0aW1lbztcbiBcbiBcdGlmICh1bmxpa2VseShmbGFncyBcdTAwMjYgTVNHX0VSUlFVRVVFKSlcbiBcdFx0cmV0dXJuIGluZXRfcmVjdl9lcnJvcihzaywgbXNnLCBsZW4pO1xuQEAgLTM3MSwxNCAmIzQzOzM3NSw1OSBAQCBzdGF0aWMgaW50IHRjcF9icGZfcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcbiBcdFx0cmV0dXJuIHRjcF9yZWN2bXNnKHNrLCBtc2csIGxlbiwgZmxhZ3MpO1xuIFx0fVxuIFx0bG9ja19zb2NrKHNrKTtcbiYjNDM7XG4mIzQzO1x0dGltZW8gPSBzb2NrX3JjdnRpbWVvKHNrLCBmbGFncyBcdTAwMjYgTVNHX0RPTlRXQUlUKTtcbiYjNDM7XG4gbXNnX2J5dGVzX3JlYWR5OlxuIFx0Y29waWVkID0gc2tfbXNnX3JlY3Ztc2coc2ssIHBzb2NrLCBtc2csIGxlbiwgZmxhZ3MpO1xuIFx0aWYgKCFjb3BpZWQpIHtcbi1cdFx0bG9uZyB0aW1lbztcbiBcdFx0aW50IGRhdGE7XG4gXG4tXHRcdHRpbWVvID0gc29ja19yY3Z0aW1lbyhzaywgZmxhZ3MgXHUwMDI2IE1TR19ET05UV0FJVCk7XG4tXHRcdGRhdGEgPSB0Y3BfbXNnX3dhaXRfZGF0YShzaywgcHNvY2ssIHRpbWVvKTtcbiYjNDM7XHRcdGlmIChzb2NrX2ZsYWcoc2ssIFNPQ0tfRE9ORSkpIHtcbiYjNDM7XHRcdFx0cmV0ID0gMDtcbiYjNDM7XHRcdFx0Z290byB1bmxvY2s7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0aWYgKHNrLVx1MDAzZXNrX2Vycikge1xuJiM0MztcdFx0XHRpZiAoIXNrX3Bzb2NrX3F1ZXVlX2VtcHR5KHBzb2NrKSlcbiYjNDM7XHRcdFx0XHRnb3RvIG1zZ19ieXRlc19yZWFkeTtcbiYjNDM7XHRcdFx0aWYgKCFza2JfcXVldWVfZW1wdHkoXHUwMDI2c2stXHUwMDNlc2tfcmVjZWl2ZV9xdWV1ZSkpIHtcbiYjNDM7XHRcdFx0XHRyZWxlYXNlX3NvY2soc2spO1xuJiM0MztcdFx0XHRcdHNrX3Bzb2NrX3B1dChzaywgcHNvY2spO1xuJiM0MztcdFx0XHRcdHJldHVybiB0Y3BfcmVjdm1zZyhzaywgbXNnLCBsZW4sIGZsYWdzKTtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0XHRyZXQgPSBzb2NrX2Vycm9yKHNrKTtcbiYjNDM7XHRcdFx0Z290byB1bmxvY2s7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0aWYgKHNrLVx1MDAzZXNrX3NodXRkb3duIFx1MDAyNiBSQ1ZfU0hVVERPV04pIHtcbiYjNDM7XHRcdFx0aWYgKCFza19wc29ja19xdWV1ZV9lbXB0eShwc29jaykpXG4mIzQzO1x0XHRcdFx0Z290byBtc2dfYnl0ZXNfcmVhZHk7XG4mIzQzO1x0XHRcdGlmICghc2tiX3F1ZXVlX2VtcHR5KFx1MDAyNnNrLVx1MDAzZXNrX3JlY2VpdmVfcXVldWUpKSB7XG4mIzQzO1x0XHRcdFx0cmVsZWFzZV9zb2NrKHNrKTtcbiYjNDM7XHRcdFx0XHRza19wc29ja19wdXQoc2ssIHBzb2NrKTtcbiYjNDM7XHRcdFx0XHRyZXR1cm4gdGNwX3JlY3Ztc2coc2ssIG1zZywgbGVuLCBmbGFncyk7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdFx0cmV0ID0gMDtcbiYjNDM7XHRcdFx0Z290byB1bmxvY2s7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0aWYgKHNrLVx1MDAzZXNrX3N0YXRlID09IFRDUF9DTE9TRSkge1xuJiM0MztcdFx0XHRyZXQgPSAtRU5PVENPTk47XG4mIzQzO1x0XHRcdGdvdG8gdW5sb2NrO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGlmICghdGltZW8pIHtcbiYjNDM7XHRcdFx0cmV0ID0gLUVBR0FJTjtcbiYjNDM7XHRcdFx0Z290byB1bmxvY2s7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0aWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7XG4mIzQzO1x0XHRcdHJldCA9IHNvY2tfaW50cl9lcnJubyh0aW1lbyk7XG4mIzQzO1x0XHRcdGdvdG8gdW5sb2NrO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGRhdGEgPSB0Y3BfbXNnX3dhaXRfZGF0YShzaywgcHNvY2ssIFx1MDAyNnRpbWVvKTtcbiBcdFx0aWYgKGRhdGEgXHUwMDNjIDApIHtcbiBcdFx0XHRyZXQgPSBkYXRhO1xuIFx0XHRcdGdvdG8gdW5sb2NrO1xuQEAgLTM5MCw2ICYjNDM7NDM5LDggQEAgc3RhdGljIGludCB0Y3BfYnBmX3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXG4gXHRcdFx0c2tfcHNvY2tfcHV0KHNrLCBwc29jayk7XG4gXHRcdFx0cmV0dXJuIHRjcF9yZWN2bXNnKHNrLCBtc2csIGxlbiwgZmxhZ3MpO1xuIFx0XHR9XG4mIzQzO1x0XHRpZiAoIWRhdGEgXHUwMDI2XHUwMDI2IHRpbWVvIFx1MDAzZSAwKVxuJiM0MztcdFx0XHRnb3RvIG1zZ19ieXRlc19yZWFkeTtcbiBcdFx0Y29waWVkID0gLUVBR0FJTjtcbiBcdH1cbiBcdHJldCA9IGNvcGllZDtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvLmdpdGlnbm9yZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC8uZ2l0aWdub3JlXG5pbmRleCBjOWY0NjAzMWFjNzNiMi4uYTE4NDBhNWQ0NWY2N2MgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvLmdpdGlnbm9yZVxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0Ly5naXRpZ25vcmVcbkBAIC0zOSw2ICYjNDM7MzksOCBAQCBza19jb25uZWN0X3plcm9fYWRkclxuIHNrX3NvX3BlZWtfb2ZmXG4gc2tmX25ldF9vZmZcbiBzb2NrZXRcbiYjNDM7c29ja21hcF9yZWN2ZnJvbVxuJiM0Mztzb2NrbWFwX3JlY3Zmcm9tLmJwZi5vXG4gc29faW5jb21pbmdfY3B1XG4gc29fbmV0bnNfY29va2llXG4gc29fcmN2X2xpc3RlbmVyXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L01ha2VmaWxlXG5pbmRleCA3MDhkOTYwYWUwN2Q1Yi4uZGQwNGI4MDcyNWM2NzkgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9NYWtlZmlsZVxuQEAgLTE5MSw2ICYjNDM7MTkxLDcgQEAgVEVTVF9HRU5fUFJPR1MgOj0gXFxcbiBcdHNrX2Nvbm5lY3RfemVyb19hZGRyIFxcXG4gXHRza19zb19wZWVrX29mZiBcXFxuIFx0c29faW5jb21pbmdfY3B1IFxcXG4mIzQzO1x0c29ja21hcF9yZWN2ZnJvbSBcXFxuIFx0dGFwIFxcXG4gXHR0Y3BfcG9ydF9zaGFyZSBcXFxuIFx0dGxzIFxcXG5AQCAtMjM4LDMgJiM0MzsyMzksNyBAQCAkKE9VVFBVVCkvYmluZF9iaGFzaDogTERMSUJTICYjNDM7PSAtbHB0aHJlYWRcbiAkKE9VVFBVVCkvaW9fdXJpbmdfemVyb2NvcHlfdHg6IENGTEFHUyAmIzQzOz0gLUkuLi8uLi8uLi9pbmNsdWRlL1xuIFxuIGluY2x1ZGUgYnBmLm1rXG4mIzQzO1xuJiM0MzskKE9VVFBVVCkvc29ja21hcF9yZWN2ZnJvbTogJChCUEZPQkopXG4mIzQzOyQoT1VUUFVUKS9zb2NrbWFwX3JlY3Zmcm9tOiBMRExJQlMgJiM0Mzs9ICQoQlBGT0JKKSAtbGVsZiAtbHogLWxwdGhyZWFkXG4mIzQzOyQoT1VUUFVUKS9zb2NrbWFwX3JlY3Zmcm9tOiBDRkxBR1MgJiM0Mzs9IC1JJChPVVRQVVQpL3Rvb2xzL2luY2x1ZGVcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvc29ja21hcF9yZWN2ZnJvbS5icGYuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9zb2NrbWFwX3JlY3Zmcm9tLmJwZi5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmZlYzQ3MGM3MzhmMWU4XG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvc29ja21hcF9yZWN2ZnJvbS5icGYuY1xuQEAgLTAsMCAmIzQzOzEsMzEgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvYnBmLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNkZWZpbmUgQUZfSU5FVCAyXG4mIzQzO1xuJiM0MztjaGFyIExJQ0VOU0VbXSBTRUMoXCYjMzQ7bGljZW5zZVwmIzM0OykgPSBcJiMzNDtHUExcJiMzNDs7XG4mIzQzO1xuJiM0MztzdHJ1Y3Qge1xuJiM0MztcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfU09DS0hBU0gpO1xuJiM0MztcdF9fdWludChtYXhfZW50cmllcywgMTAyNCk7XG4mIzQzO1x0X190eXBlKGtleSwgX191NjQpO1xuJiM0MztcdF9fdHlwZSh2YWx1ZSwgX191NjQpO1xuJiM0MztcbiYjNDM7fSBtYXBfc29ja3MgU0VDKFwmIzM0Oy5tYXBzXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDtzb2Nrb3BzXCYjMzQ7KSBpbnQgb25fc29ja29wcyhzdHJ1Y3QgYnBmX3NvY2tfb3BzICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRpZiAoY3R4LVx1MDAzZWZhbWlseSA9PSBBRl9JTkVUIFx1MDAyNlx1MDAyNiBjdHgtXHUwMDNlb3AgPT0gQlBGX1NPQ0tfT1BTX0FDVElWRV9FU1RBQkxJU0hFRF9DQikge1xuJiM0MztcdFx0X191NjQgY29va2llID0gYnBmX2dldF9zb2NrZXRfY29va2llKGN0eCk7XG4mIzQzO1xuJiM0MztcdFx0YnBmX3NvY2tfaGFzaF91cGRhdGUoY3R4LCBcdTAwMjZtYXBfc29ja3MsIFx1MDAyNmNvb2tpZSwgQlBGX05PRVhJU1QpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDtza19za2Ivc3RyZWFtX3ZlcmRpY3RcJiMzNDspIGludCBvbl9yZWN2KHN0cnVjdCBfX3NrX2J1ZmYgKmN0eClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBTS19QQVNTO1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3NvY2ttYXBfcmVjdmZyb20uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9zb2NrbWFwX3JlY3Zmcm9tLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMjU2NTdmYzNkYmNkMjJcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9zb2NrbWFwX3JlY3Zmcm9tLmNcbkBAIC0wLDAgJiM0MzsxLDI5OSBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MzsjaW5jbHVkZSBcdTAwM2NhcnBhL2luZXQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NicGYvbGliYnBmLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjZmNudGwuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NwdGhyZWFkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3RkYXRvbWljLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3lzL3NvY2tldC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N5cy90aW1lLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2tzZWxmdGVzdF9oYXJuZXNzLmhcJiMzNDtcbiYjNDM7XG4mIzQzOyNkZWZpbmUgTUFYX0lURVJBVElPTlMgMTAwXG4mIzQzOyNkZWZpbmUgUEFZTE9BRF9FTkQgJiMzOTtlJiMzOTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgc3RhcnRfbGlzdGVuaW5nKHN0cnVjdCBfX3Rlc3RfbWV0YWRhdGEgKl9tZXRhZGF0YSwgdWludDE2X3QgKnBvcnQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgc29ja2FkZHJfaW4gYWRkcjtcbiYjNDM7XHRzb2NrbGVuX3QgYWRkcmxlbjtcbiYjNDM7XHRpbnQgZmQ7XG4mIzQzO1xuJiM0MztcdG1lbXNldChcdTAwMjZhZGRyLCAwLCBzaXplb2YoYWRkcikpO1xuJiM0MztcdGFkZHIuc2luX2ZhbWlseSA9IEFGX0lORVQ7XG4mIzQzO1x0YWRkci5zaW5fYWRkci5zX2FkZHIgPSBJTkFERFJfQU5ZO1xuJiM0MztcbiYjNDM7XHRmZCA9IHNvY2tldChBRl9JTkVULCBTT0NLX1NUUkVBTSwgSVBQUk9UT19UQ1ApO1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfTkUoZmQsIC0xKTtcbiYjNDM7XHRBU1NFUlRfRVEoYmluZChmZCwgKHN0cnVjdCBzb2NrYWRkciAqKVx1MDAyNmFkZHIsIHNpemVvZihhZGRyKSksIDApO1xuJiM0MztcdEFTU0VSVF9FUShsaXN0ZW4oZmQsIDUpLCAwKTtcbiYjNDM7XG4mIzQzO1x0YWRkcmxlbiA9IHNpemVvZihhZGRyKTtcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX0VRKGdldHNvY2tuYW1lKGZkLCAoc3RydWN0IHNvY2thZGRyICopXHUwMDI2YWRkciwgXHUwMDI2YWRkcmxlbiksIDApO1xuJiM0MztcbiYjNDM7XHQqcG9ydCA9IGFkZHIuc2luX3BvcnQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiBmZDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcHJvY2Vzc19jbGllbnQoaW50IGZkLCBhdG9taWNfaW50ICpydW5uaW5nLCBib29sICpmYWlsZWQpXG4mIzQzO3tcbiYjNDM7XHRjaGFyIGJ1ZlsxMDI0XTtcbiYjNDM7XHRzdHJ1Y3QgdGltZXZhbCB0aW1lbztcbiYjNDM7XG4mIzQzO1x0dGltZW8udHZfc2VjID0gMDtcbiYjNDM7XHR0aW1lby50dl91c2VjID0gMTAwMDtcbiYjNDM7XG4mIzQzO1x0aWYgKHNldHNvY2tvcHQoZmQsIFNPTF9TT0NLRVQsIFNPX1JDVlRJTUVPLCBcdTAwMjZ0aW1lbywgc2l6ZW9mKHRpbWVvKSkpXG4mIzQzO1x0XHQqZmFpbGVkID0gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0d2hpbGUgKGF0b21pY19sb2FkKHJ1bm5pbmcpKSB7XG4mIzQzO1x0XHRzc2l6ZV90IGxlbiA9IHJlY3Zmcm9tKGZkLCBidWYsIHNpemVvZihidWYpLCAwLCBOVUxMLCBOVUxMKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAobGVuID09IC0xKSB7XG4mIzQzO1x0XHRcdGlmIChlcnJubyAhPSBFQUdBSU4gXHUwMDI2XHUwMDI2IGVycm5vICE9IEVJTlRSKVxuJiM0MztcdFx0XHRcdCpmYWlsZWQgPSB0cnVlO1xuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRpZiAobGVuIFx1MDAzYz0gMCB8fCBidWZbbGVuIC0gMV0gPT0gUEFZTE9BRF9FTkQpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0c2VuZChmZCwgXCYjMzQ7dGVzdFwmIzM0OywgNCwgTVNHX05PU0lHTkFMKTtcbiYjNDM7XG4mIzQzO1x0Y2xvc2UoZmQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdHJ1Y3QgYnBmX3Qge1xuJiM0MztcdHN0cnVjdCBicGZfb2JqZWN0ICpvYmo7XG4mIzQzO1x0c3RydWN0IGJwZl9saW5rICpvbl9zb2Nrb3BzO1xuJiM0MztcdHN0cnVjdCBicGZfbGluayAqb25fcmVjdjtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHNldHVwX2JwZihzdHJ1Y3QgX190ZXN0X21ldGFkYXRhICpfbWV0YWRhdGEsIGNvbnN0IGNoYXIgKnBhdGgsIGJvb2wgcmVjdixcbiYjNDM7XHRcdFx0XHRcdFx0c3RydWN0IGJwZl90ICpicGYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2c7XG4mIzQzO1x0aW50IGNncm91cDtcbiYjNDM7XG4mIzQzO1x0bWVtc2V0KGJwZiwgMCwgc2l6ZW9mKCpicGYpKTtcbiYjNDM7XHRicGYtXHUwMDNlb2JqID0gYnBmX29iamVjdF9fb3Blbl9maWxlKHBhdGgsIE5VTEwpO1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfTkUoYnBmLVx1MDAzZW9iaiwgTlVMTCk7XG4mIzQzO1x0QVNTRVJUX0VRKGJwZl9vYmplY3RfX2xvYWQoYnBmLVx1MDAzZW9iaiksIDApO1xuJiM0MztcbiYjNDM7XHRwcm9nID0gYnBmX29iamVjdF9fZmluZF9wcm9ncmFtX2J5X25hbWUoYnBmLVx1MDAzZW9iaiwgXCYjMzQ7b25fc29ja29wc1wmIzM0Oyk7XG4mIzQzO1x0QVNTRVJUX05FKHByb2csIE5VTEwpO1xuJiM0MztcbiYjNDM7XHRjZ3JvdXAgPSBvcGVuKFwmIzM0Oy9zeXMvZnMvY2dyb3VwXCYjMzQ7LCBPX1JET05MWSk7XG4mIzQzO1x0QVNTRVJUX05FKGNncm91cCwgLTEpO1xuJiM0MztcbiYjNDM7XHRicGYtXHUwMDNlb25fc29ja29wcyA9IGJwZl9wcm9ncmFtX19hdHRhY2hfY2dyb3VwKHByb2csIGNncm91cCk7XG4mIzQzO1x0Y2xvc2UoY2dyb3VwKTtcbiYjNDM7XG4mIzQzO1x0QVNTRVJUX05FKGJwZi1cdTAwM2Vvbl9zb2Nrb3BzLCBOVUxMKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHJlY3YpIHtcbiYjNDM7XHRcdHN0cnVjdCBicGZfbWFwICptYXAgPSBicGZfb2JqZWN0X19maW5kX21hcF9ieV9uYW1lKGJwZi1cdTAwM2VvYmosIFwmIzM0O21hcF9zb2Nrc1wmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdFx0QVNTRVJUX05FKG1hcCwgTlVMTCk7XG4mIzQzO1xuJiM0MztcdFx0cHJvZyA9IGJwZl9vYmplY3RfX2ZpbmRfcHJvZ3JhbV9ieV9uYW1lKGJwZi1cdTAwM2VvYmosIFwmIzM0O29uX3JlY3ZcJiMzNDspO1xuJiM0MztcdFx0QVNTRVJUX05FKHByb2csIE5VTEwpO1xuJiM0MztcbiYjNDM7XHRcdGJwZi1cdTAwM2Vvbl9yZWN2ID0gYnBmX3Byb2dyYW1fX2F0dGFjaF9zb2NrbWFwKHByb2csIGJwZl9tYXBfX2ZkKG1hcCkpO1xuJiM0MztcdFx0QVNTRVJUX05FKGJwZi1cdTAwM2Vvbl9yZWN2LCBOVUxMKTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0cnVjdCBzZXJ2ZXJfdCB7XG4mIzQzO1x0aW50IGZkO1xuJiM0MztcdGF0b21pY19pbnQgcnVubmluZztcbiYjNDM7XHRwdGhyZWFkX3QgdGhyZWFkO1xuJiM0MztcdGJvb2wgdGhyZWFkX2NyZWF0ZWQ7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCAqcnVuX3NlcnZlcih2b2lkICphcmcpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgc2VydmVyX3QgKnNlcnZlciA9IGFyZztcbiYjNDM7XHRib29sIGZhaWxlZCA9IGZhbHNlO1xuJiM0MztcbiYjNDM7XHR3aGlsZSAoYXRvbWljX2xvYWQoXHUwMDI2c2VydmVyLVx1MDAzZXJ1bm5pbmcpKSB7XG4mIzQzO1x0XHRpbnQgY2xpZW50X2ZkID0gYWNjZXB0KHNlcnZlci1cdTAwM2VmZCwgTlVMTCwgTlVMTCk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGNsaWVudF9mZCA9PSAtMSkge1xuJiM0MztcdFx0XHRpZiAoIWF0b21pY19sb2FkKFx1MDAyNnNlcnZlci1cdTAwM2VydW5uaW5nKSlcbiYjNDM7XHRcdFx0XHRicmVhaztcbiYjNDM7XG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdHByb2Nlc3NfY2xpZW50KGNsaWVudF9mZCwgXHUwMDI2c2VydmVyLVx1MDAzZXJ1bm5pbmcsIFx1MDAyNmZhaWxlZCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoZmFpbGVkKVxuJiM0MztcdFx0cmV0dXJuICh2b2lkICopMTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIE5VTEw7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgc2VuZF9wYXlsb2FkKHN0cnVjdCBfX3Rlc3RfbWV0YWRhdGEgKl9tZXRhZGF0YSwgaW50IGZkLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pXG4mIzQzO3tcbiYjNDM7XHRzaXplX3QgcmVtYWluaW5nID0gbGVuO1xuJiM0MztcbiYjNDM7XHRkbyB7XG4mIzQzO1x0XHRzc2l6ZV90IGJ5dGVzID0gd3JpdGUoZmQsIGJ1ZiAmIzQzOyAobGVuIC0gcmVtYWluaW5nKSwgcmVtYWluaW5nKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoYnl0ZXMgXHUwMDNjIDApIHtcbiYjNDM7XHRcdFx0aWYgKGVycm5vID09IEVJTlRSKVxuJiM0MztcdFx0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdFx0cmV0dXJuIC0xO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdHJlbWFpbmluZyAtPSBieXRlcztcbiYjNDM7XHR9IHdoaWxlIChyZW1haW5pbmcpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7RklYVFVSRShzb2NrbWFwX3JlY3Zmcm9tKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHNlcnZlcl90IHNlcnZlcjtcbiYjNDM7XHRzdHJ1Y3Qgc29ja2FkZHJfaW4gYWRkcjtcbiYjNDM7XHRzdHJ1Y3QgYnBmX3QgYnBmO1xuJiM0MztcdGNoYXIgKnBheWxvYWQ7XG4mIzQzO1x0c2l6ZV90IHBheWxvYWRfbGVuO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7RklYVFVSRV9WQVJJQU5UKHNvY2ttYXBfcmVjdmZyb20pXG4mIzQzO3tcbiYjNDM7XHRib29sIHdpdGhfcmVjdjtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO0ZJWFRVUkVfVkFSSUFOVF9BREQoc29ja21hcF9yZWN2ZnJvbSwgcmVjdm1zZylcbiYjNDM7e1xuJiM0MztcdC53aXRoX3JlY3YgPSBmYWxzZVxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7RklYVFVSRV9WQVJJQU5UX0FERChzb2NrbWFwX3JlY3Zmcm9tLCByZWN2bXNnX3BhcnNlcilcbiYjNDM7e1xuJiM0MztcdC53aXRoX3JlY3YgPSB0cnVlXG4mIzQzO307XG4mIzQzO1xuJiM0MztGSVhUVVJFX1NFVFVQKHNvY2ttYXBfcmVjdmZyb20pXG4mIzQzO3tcbiYjNDM7XHRtZW1zZXQoXHUwMDI2c2VsZi1cdTAwM2VzZXJ2ZXIsIDAsIHNpemVvZihzZWxmLVx1MDAzZXNlcnZlcikpO1xuJiM0MztcdHNlbGYtXHUwMDNlc2VydmVyLmZkID0gLTE7XG4mIzQzO1xuJiM0MztcdG1lbXNldChcdTAwMjZzZWxmLVx1MDAzZWFkZHIsIDAsIHNpemVvZihzZWxmLVx1MDAzZWFkZHIpKTtcbiYjNDM7XG4mIzQzO1x0c2VsZi1cdTAwM2VwYXlsb2FkX2xlbiA9IDEwMjQgKiAxMDI0ICogMjU7XG4mIzQzO1x0c2VsZi1cdTAwM2VwYXlsb2FkID0gbWFsbG9jKHNlbGYtXHUwMDNlcGF5bG9hZF9sZW4pO1xuJiM0MztcdEFTU0VSVF9ORShzZWxmLVx1MDAzZXBheWxvYWQsIE5VTEwpO1xuJiM0MztcbiYjNDM7XHRtZW1zZXQoc2VsZi1cdTAwM2VwYXlsb2FkLCAwLCBzZWxmLVx1MDAzZXBheWxvYWRfbGVuKTtcbiYjNDM7XHRzZWxmLVx1MDAzZXBheWxvYWRbc2VsZi1cdTAwM2VwYXlsb2FkX2xlbiAtIDFdID0gUEFZTE9BRF9FTkQ7XG4mIzQzO1xuJiM0MztcdHNldHVwX2JwZihfbWV0YWRhdGEsIFwmIzM0O3NvY2ttYXBfcmVjdmZyb20uYnBmLm9cJiMzNDssIHZhcmlhbnQtXHUwMDNld2l0aF9yZWN2LCBcdTAwMjZzZWxmLVx1MDAzZWJwZik7XG4mIzQzO1x0YXRvbWljX3N0b3JlKFx1MDAyNnNlbGYtXHUwMDNlc2VydmVyLnJ1bm5pbmcsIDEpO1xuJiM0MztcdHNlbGYtXHUwMDNlc2VydmVyLmZkID0gc3RhcnRfbGlzdGVuaW5nKF9tZXRhZGF0YSwgXHUwMDI2c2VsZi1cdTAwM2VhZGRyLnNpbl9wb3J0KTtcbiYjNDM7XG4mIzQzO1x0c2VsZi1cdTAwM2VhZGRyLnNpbl9mYW1pbHkgPSBBRl9JTkVUO1xuJiM0MztcdHNlbGYtXHUwMDNlYWRkci5zaW5fYWRkci5zX2FkZHIgPSBodG9ubChJTkFERFJfTE9PUEJBQ0spO1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfRVEocHRocmVhZF9jcmVhdGUoXHUwMDI2c2VsZi1cdTAwM2VzZXJ2ZXIudGhyZWFkLCBOVUxMLCBcdTAwMjZydW5fc2VydmVyLCBcdTAwMjZzZWxmLVx1MDAzZXNlcnZlciksIDApO1xuJiM0MztcdHNlbGYtXHUwMDNlc2VydmVyLnRocmVhZF9jcmVhdGVkID0gdHJ1ZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7RklYVFVSRV9URUFSRE9XTihzb2NrbWFwX3JlY3Zmcm9tKVxuJiM0Mzt7XG4mIzQzO1x0YXRvbWljX3N0b3JlKFx1MDAyNnNlbGYtXHUwMDNlc2VydmVyLnJ1bm5pbmcsIDApO1xuJiM0MztcbiYjNDM7XHRpZiAoc2VsZi1cdTAwM2VzZXJ2ZXIuZmQgIT0gLTEpXG4mIzQzO1x0XHRzaHV0ZG93bihzZWxmLVx1MDAzZXNlcnZlci5mZCwgU0hVVF9SRCk7XG4mIzQzO1xuJiM0MztcdGlmIChzZWxmLVx1MDAzZXNlcnZlci50aHJlYWRfY3JlYXRlZCkge1xuJiM0MztcdFx0dm9pZCAqcmV0dmFsID0gTlVMTDtcbiYjNDM7XG4mIzQzO1x0XHRwdGhyZWFkX2pvaW4oc2VsZi1cdTAwM2VzZXJ2ZXIudGhyZWFkLCBcdTAwMjZyZXR2YWwpO1xuJiM0MztcdFx0RVhQRUNUX0VRKHJldHZhbCwgTlVMTCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoc2VsZi1cdTAwM2VzZXJ2ZXIuZmQgIT0gLTEpXG4mIzQzO1x0XHRjbG9zZShzZWxmLVx1MDAzZXNlcnZlci5mZCk7XG4mIzQzO1xuJiM0MztcdGZyZWUoc2VsZi1cdTAwM2VwYXlsb2FkKTtcbiYjNDM7XHRicGZfbGlua19fZGVzdHJveShzZWxmLVx1MDAzZWJwZi5vbl9zb2Nrb3BzKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHNlbGYtXHUwMDNlYnBmLm9uX3JlY3YpXG4mIzQzO1x0XHRicGZfbGlua19fZGVzdHJveShzZWxmLVx1MDAzZWJwZi5vbl9yZWN2KTtcbiYjNDM7XG4mIzQzO1x0YnBmX29iamVjdF9fY2xvc2Uoc2VsZi1cdTAwM2VicGYub2JqKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7VEVTVF9GKHNvY2ttYXBfcmVjdmZyb20sIG5vX3RpbWVvdXQpXG4mIzQzO3tcbiYjNDM7XHRjaGFyIGlnbm9yZWRbMTI4XTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIE1BWF9JVEVSQVRJT05TOyAmIzQzOyYjNDM7aSkge1xuJiM0MztcdFx0aW50IGZkID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfU1RSRUFNLCBJUFBST1RPX1RDUCk7XG4mIzQzO1xuJiM0MztcdFx0QVNTRVJUX05FKGZkLCAtMSk7XG4mIzQzO1x0XHRBU1NFUlRfRVEoY29ubmVjdChmZCwgKHN0cnVjdCBzb2NrYWRkciAqKVx1MDAyNnNlbGYtXHUwMDNlYWRkciwgc2l6ZW9mKHNlbGYtXHUwMDNlYWRkcikpLCAwKTtcbiYjNDM7XG4mIzQzO1x0XHRBU1NFUlRfRVEoc2VuZF9wYXlsb2FkKF9tZXRhZGF0YSwgZmQsIHNlbGYtXHUwMDNlcGF5bG9hZCwgc2VsZi1cdTAwM2VwYXlsb2FkX2xlbiksIDApO1xuJiM0MztcbiYjNDM7XHRcdGlmIChyZWN2ZnJvbShmZCwgaWdub3JlZCwgc2l6ZW9mKGlnbm9yZWQpLCAwLCBOVUxMLCBOVUxMKSBcdTAwM2MgMClcbiYjNDM7XHRcdFx0QVNTRVJUX05FKGVycm5vLCBFQUdBSU4pO1xuJiM0MztcbiYjNDM7XHRcdGNsb3NlKGZkKTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQ2NF90IHRvX25hbm9zKHN0cnVjdCB0aW1lc3BlYyAqdGltZSlcbiYjNDM7e1xuJiM0MztcdHJldHVybiAodGltZS1cdTAwM2V0dl9zZWMgKiAxMDAwMDAwMDAwTEwpICYjNDM7IHRpbWUtXHUwMDNldHZfbnNlYztcbiYjNDM7fVxuJiM0MztcbiYjNDM7VEVTVF9GKHNvY2ttYXBfcmVjdmZyb20sIHdpdGhfdGltZW91dClcbiYjNDM7e1xuJiM0MztcdGNoYXIgaWdub3JlZFsxMjhdO1xuJiM0MztcdHN0cnVjdCB0aW1ldmFsIHRpbWVvO1xuJiM0MztcbiYjNDM7XHR0aW1lby50dl9zZWMgPSAwO1xuJiM0MztcdHRpbWVvLnR2X3VzZWMgPSA1MDAwO1xuJiM0MztcbiYjNDM7XHQvKiByZW1vdmUgdGhlIHBheWxvYWQgZW5kIGRlbGltaXRlciBzbyB0aGUgc2VydmVyIG5ldmVyIHJlc3BvbmRzIGFuZCByZWN2ZnJvbSB0aW1lcyBvdXQuICovXG4mIzQzO1x0c2VsZi1cdTAwM2VwYXlsb2FkW3NlbGYtXHUwMDNlcGF5bG9hZF9sZW4gLSAxXSA9IDA7XG4mIzQzO1xuJiM0MztcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBNQVhfSVRFUkFUSU9OUzsgJiM0MzsmIzQzO2kpIHtcbiYjNDM7XHRcdHN0cnVjdCB0aW1lc3BlYyBiZWc7XG4mIzQzO1x0XHRzdHJ1Y3QgdGltZXNwZWMgZW5kO1xuJiM0MztcdFx0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0XHRpbnQgZmQgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19TVFJFQU0sIElQUFJPVE9fVENQKTtcbiYjNDM7XG4mIzQzO1x0XHRBU1NFUlRfTkUoZmQsIC0xKTtcbiYjNDM7XHRcdEFTU0VSVF9FUShjb25uZWN0KGZkLCAoc3RydWN0IHNvY2thZGRyICopXHUwMDI2c2VsZi1cdTAwM2VhZGRyLCBzaXplb2Yoc2VsZi1cdTAwM2VhZGRyKSksIDApO1xuJiM0MztcbiYjNDM7XHRcdEFTU0VSVF9FUShzZW5kX3BheWxvYWQoX21ldGFkYXRhLCBmZCwgc2VsZi1cdTAwM2VwYXlsb2FkLCBzZWxmLVx1MDAzZXBheWxvYWRfbGVuKSwgMCk7XG4mIzQzO1xuJiM0MztcdFx0QVNTRVJUX0VRKHNldHNvY2tvcHQoZmQsIFNPTF9TT0NLRVQsIFNPX1JDVlRJTUVPLCBcdTAwMjZ0aW1lbywgc2l6ZW9mKHRpbWVvKSksIDApO1xuJiM0MztcbiYjNDM7XHRcdGNsb2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDLCBcdTAwMjZiZWcpO1xuJiM0MztcdFx0QVNTRVJUX0VRKHJlY3Zmcm9tKGZkLCBpZ25vcmVkLCBzaXplb2YoaWdub3JlZCksIDAsIE5VTEwsIE5VTEwpLCAtMSk7XG4mIzQzO1x0XHRlcnIgPSBlcnJubztcbiYjNDM7XHRcdGNsb2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDLCBcdTAwMjZlbmQpO1xuJiM0MztcbiYjNDM7XHRcdEFTU0VSVF9FUShlcnIsIEVBR0FJTik7XG4mIzQzO1x0XHRBU1NFUlRfR0UodG9fbmFub3MoXHUwMDI2ZW5kKSAtIHRvX25hbm9zKFx1MDAyNmJlZyksIHRpbWVvLnR2X3VzZWMgKiAxMDAwKTtcbiYjNDM7XG4mIzQzO1x0XHRjbG9zZShmZCk7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztURVNUX0hBUk5FU1NfTUFJTlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDA0OjE0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O05FVF9TT0NLX01TRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RjcF9icGZfcmVjdm1zZ19wYXJzZXImIzM0OywKICAgICYjMzQ7dGNwX2JwZl9yZWN2bXNnJiMzNDssCiAgICAmIzM0O3RjcF9tc2dfd2FpdF9kYXRhJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRpbWVvdXQgaGFuZGxpbmcgaW4gQlBGIHNvY2ttYXAmIzM5O3MgcmVjdm1zZyBpbXBsZW1lbnRhdGlvbnMgKHRjcF9icGZfcmVjdm1zZyBhbmQgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcikuIEl0IGNvcnJlY3RseSB1cGRhdGVzIHRoZSByZW1haW5pbmcgdGltZW91dCB2YWx1ZSBpbiB0Y3BfbXNnX3dhaXRfZGF0YSBhbmQgcmV0cmllcyByZWFkaW5nIGlmIHRoZSB0aW1lb3V0IGhhc24mIzM5O3QgZXhwaXJlZC4gVGhpcyBpcyBmdW5jdGlvbmFsIGNvcmUgbmV0d29ya2luZyBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDAzYWY0MzU1YmU0MmY4ZWM0NmJiYjUzNDg3NjAzYzgwYjU1ODE5YjkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEp1bCAxNiAwNDoxNDoxNyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9icGYuYyBiL25ldC9pcHY0L3RjcF9icGYuYwppbmRleCBjYzBiZDczZjM2YjZkNi4uYWE1YzVkNzQxNTk5YTMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9icGYuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC90Y3BfYnBmLmMKQEAgLTE3OSw3ICYjNDM7MTc5LDcgQEAgRVhQT1JUX1NZTUJPTF9HUEwodGNwX2JwZl9zZW5kbXNnX3JlZGlyKTsKIAogI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTAogc3RhdGljIGludCB0Y3BfbXNnX3dhaXRfZGF0YShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2ssCi0JCQkgICAgIGxvbmcgdGltZW8pCiYjNDM7CQkJICAgICBsb25nICp0aW1lbykKIHsKIAlERUZJTkVfV0FJVF9GVU5DKHdhaXQsIHdva2VuX3dha2VfZnVuY3Rpb24pOwogCWludCByZXQgPSAwOwpAQCAtMTg3LDEyICYjNDM7MTg3LDEyIEBAIHN0YXRpYyBpbnQgdGNwX21zZ193YWl0X2RhdGEoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLAogCWlmIChzay0mZ3Q7c2tfc2h1dGRvd24gJmFtcDsgUkNWX1NIVVRET1dOKQogCQlyZXR1cm4gMTsKIAotCWlmICghdGltZW8pCiYjNDM7CWlmICghKnRpbWVvKQogCQlyZXR1cm4gcmV0OwogCiAJYWRkX3dhaXRfcXVldWUoc2tfc2xlZXAoc2spLCAmYW1wO3dhaXQpOwogCXNrX3NldF9iaXQoU09DS1dRX0FTWU5DX1dBSVREQVRBLCBzayk7Ci0JcmV0ID0gc2tfd2FpdF9ldmVudChzaywgJmFtcDt0aW1lbywKJiM0MzsJcmV0ID0gc2tfd2FpdF9ldmVudChzaywgdGltZW8sCiAJCQkgICAgIWxpc3RfZW1wdHkoJmFtcDtwc29jay0mZ3Q7aW5ncmVzc19tc2cpIHx8CiAJCQkgICAgIXNrYl9xdWV1ZV9lbXB0eV9sb2NrbGVzcygmYW1wO3NrLSZndDtza19yZWNlaXZlX3F1ZXVlKSwgJmFtcDt3YWl0KTsKIAlza19jbGVhcl9iaXQoU09DS1dRX0FTWU5DX1dBSVREQVRBLCBzayk7CkBAIC0yMjksNiAmIzQzOzIyOSw3IEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcihzdHJ1Y3Qgc29jayAqc2ssCiAJaW50IGNvcGllZF9mcm9tX3NlbGYgPSAwOwogCWludCBjb3BpZWQgPSAwOwogCXUzMiBzZXE7CiYjNDM7CWxvbmcgdGltZW87CiAKIAlpZiAodW5saWtlbHkoZmxhZ3MgJmFtcDsgTVNHX0VSUlFVRVVFKSkKIAkJcmV0dXJuIGluZXRfcmVjdl9lcnJvcihzaywgbXNnLCBsZW4pOwpAQCAtMjYyLDYgJiM0MzsyNjMsOCBAQCBzdGF0aWMgaW50IHRjcF9icGZfcmVjdm1zZ19wYXJzZXIoc3RydWN0IHNvY2sgKnNrLAogCQl9CiAJfQogCiYjNDM7CXRpbWVvID0gc29ja19yY3Z0aW1lbyhzaywgZmxhZ3MgJmFtcDsgTVNHX0RPTlRXQUlUKTsKJiM0MzsKIG1zZ19ieXRlc19yZWFkeToKIAljb3BpZWQgPSBfX3NrX21zZ19yZWN2bXNnKHNrLCBwc29jaywgbXNnLCBsZW4sIGZsYWdzLCAmYW1wO2NvcGllZF9mcm9tX3NlbGYpOwogCS8qIFRoZSB0eXBpY2FsIGNhc2UgZm9yIEVGQVVMVCBpcyB0aGUgc29ja2V0IHdhcyBncmFjZWZ1bGx5CkBAIC0yODAsNyAmIzQzOzI4Myw2IEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcihzdHJ1Y3Qgc29jayAqc2ssCiAJfQogCXNlcSAmIzQzOz0gY29waWVkX2Zyb21fc2VsZjsKIAlpZiAoIWNvcGllZCkgewotCQlsb25nIHRpbWVvOwogCQlpbnQgZGF0YTsKIAogCQlpZiAoc29ja19mbGFnKHNrLCBTT0NLX0RPTkUpKQpAQCAtMjk5LDcgJiM0MzszMDEsNiBAQCBzdGF0aWMgaW50IHRjcF9icGZfcmVjdm1zZ19wYXJzZXIoc3RydWN0IHNvY2sgKnNrLAogCQkJZ290byBvdXQ7CiAJCX0KIAotCQl0aW1lbyA9IHNvY2tfcmN2dGltZW8oc2ssIGZsYWdzICZhbXA7IE1TR19ET05UV0FJVCk7CiAJCWlmICghdGltZW8pIHsKIAkJCWNvcGllZCA9IC1FQUdBSU47CiAJCQlnb3RvIG91dDsKQEAgLTMxMCwxMyAmIzQzOzMxMSwxNSBAQCBzdGF0aWMgaW50IHRjcF9icGZfcmVjdm1zZ19wYXJzZXIoc3RydWN0IHNvY2sgKnNrLAogCQkJZ290byBvdXQ7CiAJCX0KIAotCQlkYXRhID0gdGNwX21zZ193YWl0X2RhdGEoc2ssIHBzb2NrLCB0aW1lbyk7CiYjNDM7CQlkYXRhID0gdGNwX21zZ193YWl0X2RhdGEoc2ssIHBzb2NrLCAmYW1wO3RpbWVvKTsKIAkJaWYgKGRhdGEgJmx0OyAwKSB7CiAJCQljb3BpZWQgPSBkYXRhOwogCQkJZ290byB1bmxvY2s7CiAJCX0KIAkJaWYgKGRhdGEgJmFtcDsmYW1wOyAhc2tfcHNvY2tfcXVldWVfZW1wdHkocHNvY2spKQogCQkJZ290byBtc2dfYnl0ZXNfcmVhZHk7CiYjNDM7CQlpZiAoIWRhdGEgJmFtcDsmYW1wOyB0aW1lbyAmZ3Q7IDApCiYjNDM7CQkJZ290byBtc2dfYnl0ZXNfcmVhZHk7CiAJCWNvcGllZCA9IC1FQUdBSU47CiAJfQogb3V0OgpAQCAtMzU1LDYgJiM0MzszNTgsNyBAQCBzdGF0aWMgaW50IHRjcF9icGZfcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbiwKIHsKIAlzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrOwogCWludCBjb3BpZWQsIHJldDsKJiM0MzsJbG9uZyB0aW1lbzsKIAogCWlmICh1bmxpa2VseShmbGFncyAmYW1wOyBNU0dfRVJSUVVFVUUpKQogCQlyZXR1cm4gaW5ldF9yZWN2X2Vycm9yKHNrLCBtc2csIGxlbik7CkBAIC0zNzEsMTQgJiM0MzszNzUsNTkgQEAgc3RhdGljIGludCB0Y3BfYnBmX3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sCiAJCXJldHVybiB0Y3BfcmVjdm1zZyhzaywgbXNnLCBsZW4sIGZsYWdzKTsKIAl9CiAJbG9ja19zb2NrKHNrKTsKJiM0MzsKJiM0MzsJdGltZW8gPSBzb2NrX3JjdnRpbWVvKHNrLCBmbGFncyAmYW1wOyBNU0dfRE9OVFdBSVQpOwomIzQzOwogbXNnX2J5dGVzX3JlYWR5OgogCWNvcGllZCA9IHNrX21zZ19yZWN2bXNnKHNrLCBwc29jaywgbXNnLCBsZW4sIGZsYWdzKTsKIAlpZiAoIWNvcGllZCkgewotCQlsb25nIHRpbWVvOwogCQlpbnQgZGF0YTsKIAotCQl0aW1lbyA9IHNvY2tfcmN2dGltZW8oc2ssIGZsYWdzICZhbXA7IE1TR19ET05UV0FJVCk7Ci0JCWRhdGEgPSB0Y3BfbXNnX3dhaXRfZGF0YShzaywgcHNvY2ssIHRpbWVvKTsKJiM0MzsJCWlmIChzb2NrX2ZsYWcoc2ssIFNPQ0tfRE9ORSkpIHsKJiM0MzsJCQlyZXQgPSAwOwomIzQzOwkJCWdvdG8gdW5sb2NrOwomIzQzOwkJfQomIzQzOwomIzQzOwkJaWYgKHNrLSZndDtza19lcnIpIHsKJiM0MzsJCQlpZiAoIXNrX3Bzb2NrX3F1ZXVlX2VtcHR5KHBzb2NrKSkKJiM0MzsJCQkJZ290byBtc2dfYnl0ZXNfcmVhZHk7CiYjNDM7CQkJaWYgKCFza2JfcXVldWVfZW1wdHkoJmFtcDtzay0mZ3Q7c2tfcmVjZWl2ZV9xdWV1ZSkpIHsKJiM0MzsJCQkJcmVsZWFzZV9zb2NrKHNrKTsKJiM0MzsJCQkJc2tfcHNvY2tfcHV0KHNrLCBwc29jayk7CiYjNDM7CQkJCXJldHVybiB0Y3BfcmVjdm1zZyhzaywgbXNnLCBsZW4sIGZsYWdzKTsKJiM0MzsJCQl9CiYjNDM7CQkJcmV0ID0gc29ja19lcnJvcihzayk7CiYjNDM7CQkJZ290byB1bmxvY2s7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlpZiAoc2stJmd0O3NrX3NodXRkb3duICZhbXA7IFJDVl9TSFVURE9XTikgewomIzQzOwkJCWlmICghc2tfcHNvY2tfcXVldWVfZW1wdHkocHNvY2spKQomIzQzOwkJCQlnb3RvIG1zZ19ieXRlc19yZWFkeTsKJiM0MzsJCQlpZiAoIXNrYl9xdWV1ZV9lbXB0eSgmYW1wO3NrLSZndDtza19yZWNlaXZlX3F1ZXVlKSkgewomIzQzOwkJCQlyZWxlYXNlX3NvY2soc2spOwomIzQzOwkJCQlza19wc29ja19wdXQoc2ssIHBzb2NrKTsKJiM0MzsJCQkJcmV0dXJuIHRjcF9yZWN2bXNnKHNrLCBtc2csIGxlbiwgZmxhZ3MpOwomIzQzOwkJCX0KJiM0MzsJCQlyZXQgPSAwOwomIzQzOwkJCWdvdG8gdW5sb2NrOwomIzQzOwkJfQomIzQzOwomIzQzOwkJaWYgKHNrLSZndDtza19zdGF0ZSA9PSBUQ1BfQ0xPU0UpIHsKJiM0MzsJCQlyZXQgPSAtRU5PVENPTk47CiYjNDM7CQkJZ290byB1bmxvY2s7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlpZiAoIXRpbWVvKSB7CiYjNDM7CQkJcmV0ID0gLUVBR0FJTjsKJiM0MzsJCQlnb3RvIHVubG9jazsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgewomIzQzOwkJCXJldCA9IHNvY2tfaW50cl9lcnJubyh0aW1lbyk7CiYjNDM7CQkJZ290byB1bmxvY2s7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlkYXRhID0gdGNwX21zZ193YWl0X2RhdGEoc2ssIHBzb2NrLCAmYW1wO3RpbWVvKTsKIAkJaWYgKGRhdGEgJmx0OyAwKSB7CiAJCQlyZXQgPSBkYXRhOwogCQkJZ290byB1bmxvY2s7CkBAIC0zOTAsNiAmIzQzOzQzOSw4IEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLAogCQkJc2tfcHNvY2tfcHV0KHNrLCBwc29jayk7CiAJCQlyZXR1cm4gdGNwX3JlY3Ztc2coc2ssIG1zZywgbGVuLCBmbGFncyk7CiAJCX0KJiM0MzsJCWlmICghZGF0YSAmYW1wOyZhbXA7IHRpbWVvICZndDsgMCkKJiM0MzsJCQlnb3RvIG1zZ19ieXRlc19yZWFkeTsKIAkJY29waWVkID0gLUVBR0FJTjsKIAl9CiAJcmV0ID0gY29waWVkOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0Ly5naXRpZ25vcmUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvLmdpdGlnbm9yZQppbmRleCBjOWY0NjAzMWFjNzNiMi4uYTE4NDBhNWQ0NWY2N2MgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC8uZ2l0aWdub3JlCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC8uZ2l0aWdub3JlCkBAIC0zOSw2ICYjNDM7MzksOCBAQCBza19jb25uZWN0X3plcm9fYWRkcgogc2tfc29fcGVla19vZmYKIHNrZl9uZXRfb2ZmCiBzb2NrZXQKJiM0Mztzb2NrbWFwX3JlY3Zmcm9tCiYjNDM7c29ja21hcF9yZWN2ZnJvbS5icGYubwogc29faW5jb21pbmdfY3B1CiBzb19uZXRuc19jb29raWUKIHNvX3Jjdl9saXN0ZW5lcgpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L01ha2VmaWxlCmluZGV4IDcwOGQ5NjBhZTA3ZDViLi5kZDA0YjgwNzI1YzY3OSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9NYWtlZmlsZQpAQCAtMTkxLDYgJiM0MzsxOTEsNyBAQCBURVNUX0dFTl9QUk9HUyA6PSBcCiAJc2tfY29ubmVjdF96ZXJvX2FkZHIgXAogCXNrX3NvX3BlZWtfb2ZmIFwKIAlzb19pbmNvbWluZ19jcHUgXAomIzQzOwlzb2NrbWFwX3JlY3Zmcm9tIFwKIAl0YXAgXAogCXRjcF9wb3J0X3NoYXJlIFwKIAl0bHMgXApAQCAtMjM4LDMgJiM0MzsyMzksNyBAQCAkKE9VVFBVVCkvYmluZF9iaGFzaDogTERMSUJTICYjNDM7PSAtbHB0aHJlYWQKICQoT1VUUFVUKS9pb191cmluZ196ZXJvY29weV90eDogQ0ZMQUdTICYjNDM7PSAtSS4uLy4uLy4uL2luY2x1ZGUvCiAKIGluY2x1ZGUgYnBmLm1rCiYjNDM7CiYjNDM7JChPVVRQVVQpL3NvY2ttYXBfcmVjdmZyb206ICQoQlBGT0JKKQomIzQzOyQoT1VUUFVUKS9zb2NrbWFwX3JlY3Zmcm9tOiBMRExJQlMgJiM0Mzs9ICQoQlBGT0JKKSAtbGVsZiAtbHogLWxwdGhyZWFkCiYjNDM7JChPVVRQVVQpL3NvY2ttYXBfcmVjdmZyb206IENGTEFHUyAmIzQzOz0gLUkkKE9VVFBVVCkvdG9vbHMvaW5jbHVkZQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3NvY2ttYXBfcmVjdmZyb20uYnBmLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvc29ja21hcF9yZWN2ZnJvbS5icGYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uZmVjNDcwYzczOGYxZTgKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvc29ja21hcF9yZWN2ZnJvbS5icGYuYwpAQCAtMCwwICYjNDM7MSwzMSBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2JwZi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDticGYvYnBmX2hlbHBlcnMuaCZndDsKJiM0MzsKJiM0MzsjZGVmaW5lIEFGX0lORVQgMgomIzQzOwomIzQzO2NoYXIgTElDRU5TRVtdIFNFQygmIzM0O2xpY2Vuc2UmIzM0OykgPSAmIzM0O0dQTCYjMzQ7OwomIzQzOwomIzQzO3N0cnVjdCB7CiYjNDM7CV9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfU09DS0hBU0gpOwomIzQzOwlfX3VpbnQobWF4X2VudHJpZXMsIDEwMjQpOwomIzQzOwlfX3R5cGUoa2V5LCBfX3U2NCk7CiYjNDM7CV9fdHlwZSh2YWx1ZSwgX191NjQpOwomIzQzOwomIzQzO30gbWFwX3NvY2tzIFNFQygmIzM0Oy5tYXBzJiMzNDspOwomIzQzOwomIzQzO1NFQygmIzM0O3NvY2tvcHMmIzM0OykgaW50IG9uX3NvY2tvcHMoc3RydWN0IGJwZl9zb2NrX29wcyAqY3R4KQomIzQzO3sKJiM0MzsJaWYgKGN0eC0mZ3Q7ZmFtaWx5ID09IEFGX0lORVQgJmFtcDsmYW1wOyBjdHgtJmd0O29wID09IEJQRl9TT0NLX09QU19BQ1RJVkVfRVNUQUJMSVNIRURfQ0IpIHsKJiM0MzsJCV9fdTY0IGNvb2tpZSA9IGJwZl9nZXRfc29ja2V0X2Nvb2tpZShjdHgpOwomIzQzOwomIzQzOwkJYnBmX3NvY2tfaGFzaF91cGRhdGUoY3R4LCAmYW1wO21hcF9zb2NrcywgJmFtcDtjb29raWUsIEJQRl9OT0VYSVNUKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7c2tfc2tiL3N0cmVhbV92ZXJkaWN0JiMzNDspIGludCBvbl9yZWN2KHN0cnVjdCBfX3NrX2J1ZmYgKmN0eCkKJiM0Mzt7CiYjNDM7CXJldHVybiBTS19QQVNTOwomIzQzO30KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9zb2NrbWFwX3JlY3Zmcm9tLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvc29ja21hcF9yZWN2ZnJvbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi4yNTY1N2ZjM2RiY2QyMgotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9zb2NrbWFwX3JlY3Zmcm9tLmMKQEAgLTAsMCAmIzQzOzEsMjk5IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsjaW5jbHVkZSAmbHQ7YXJwYS9pbmV0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2JwZi9saWJicGYuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7ZmNudGwuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7cHRocmVhZC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdGRhdG9taWMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3lzL3NvY2tldC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzeXMvdGltZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDt1bmlzdGQuaCZndDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0O2tzZWxmdGVzdF9oYXJuZXNzLmgmIzM0OwomIzQzOwomIzQzOyNkZWZpbmUgTUFYX0lURVJBVElPTlMgMTAwCiYjNDM7I2RlZmluZSBQQVlMT0FEX0VORCAmIzM5O2UmIzM5OwomIzQzOwomIzQzO3N0YXRpYyBpbnQgc3RhcnRfbGlzdGVuaW5nKHN0cnVjdCBfX3Rlc3RfbWV0YWRhdGEgKl9tZXRhZGF0YSwgdWludDE2X3QgKnBvcnQpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgc29ja2FkZHJfaW4gYWRkcjsKJiM0MzsJc29ja2xlbl90IGFkZHJsZW47CiYjNDM7CWludCBmZDsKJiM0MzsKJiM0MzsJbWVtc2V0KCZhbXA7YWRkciwgMCwgc2l6ZW9mKGFkZHIpKTsKJiM0MzsJYWRkci5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKJiM0MzsJYWRkci5zaW5fYWRkci5zX2FkZHIgPSBJTkFERFJfQU5ZOwomIzQzOwomIzQzOwlmZCA9IHNvY2tldChBRl9JTkVULCBTT0NLX1NUUkVBTSwgSVBQUk9UT19UQ1ApOwomIzQzOwomIzQzOwlBU1NFUlRfTkUoZmQsIC0xKTsKJiM0MzsJQVNTRVJUX0VRKGJpbmQoZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKikmYW1wO2FkZHIsIHNpemVvZihhZGRyKSksIDApOwomIzQzOwlBU1NFUlRfRVEobGlzdGVuKGZkLCA1KSwgMCk7CiYjNDM7CiYjNDM7CWFkZHJsZW4gPSBzaXplb2YoYWRkcik7CiYjNDM7CiYjNDM7CUFTU0VSVF9FUShnZXRzb2NrbmFtZShmZCwgKHN0cnVjdCBzb2NrYWRkciAqKSZhbXA7YWRkciwgJmFtcDthZGRybGVuKSwgMCk7CiYjNDM7CiYjNDM7CSpwb3J0ID0gYWRkci5zaW5fcG9ydDsKJiM0MzsKJiM0MzsJcmV0dXJuIGZkOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBwcm9jZXNzX2NsaWVudChpbnQgZmQsIGF0b21pY19pbnQgKnJ1bm5pbmcsIGJvb2wgKmZhaWxlZCkKJiM0Mzt7CiYjNDM7CWNoYXIgYnVmWzEwMjRdOwomIzQzOwlzdHJ1Y3QgdGltZXZhbCB0aW1lbzsKJiM0MzsKJiM0MzsJdGltZW8udHZfc2VjID0gMDsKJiM0MzsJdGltZW8udHZfdXNlYyA9IDEwMDA7CiYjNDM7CiYjNDM7CWlmIChzZXRzb2Nrb3B0KGZkLCBTT0xfU09DS0VULCBTT19SQ1ZUSU1FTywgJmFtcDt0aW1lbywgc2l6ZW9mKHRpbWVvKSkpCiYjNDM7CQkqZmFpbGVkID0gdHJ1ZTsKJiM0MzsKJiM0MzsJd2hpbGUgKGF0b21pY19sb2FkKHJ1bm5pbmcpKSB7CiYjNDM7CQlzc2l6ZV90IGxlbiA9IHJlY3Zmcm9tKGZkLCBidWYsIHNpemVvZihidWYpLCAwLCBOVUxMLCBOVUxMKTsKJiM0MzsKJiM0MzsJCWlmIChsZW4gPT0gLTEpIHsKJiM0MzsJCQlpZiAoZXJybm8gIT0gRUFHQUlOICZhbXA7JmFtcDsgZXJybm8gIT0gRUlOVFIpCiYjNDM7CQkJCSpmYWlsZWQgPSB0cnVlOwomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJfQomIzQzOwomIzQzOwkJaWYgKGxlbiAmbHQ7PSAwIHx8IGJ1ZltsZW4gLSAxXSA9PSBQQVlMT0FEX0VORCkKJiM0MzsJCQlicmVhazsKJiM0MzsJfQomIzQzOwomIzQzOwlzZW5kKGZkLCAmIzM0O3Rlc3QmIzM0OywgNCwgTVNHX05PU0lHTkFMKTsKJiM0MzsKJiM0MzsJY2xvc2UoZmQpOwomIzQzO30KJiM0MzsKJiM0MztzdHJ1Y3QgYnBmX3QgewomIzQzOwlzdHJ1Y3QgYnBmX29iamVjdCAqb2JqOwomIzQzOwlzdHJ1Y3QgYnBmX2xpbmsgKm9uX3NvY2tvcHM7CiYjNDM7CXN0cnVjdCBicGZfbGluayAqb25fcmVjdjsKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHNldHVwX2JwZihzdHJ1Y3QgX190ZXN0X21ldGFkYXRhICpfbWV0YWRhdGEsIGNvbnN0IGNoYXIgKnBhdGgsIGJvb2wgcmVjdiwKJiM0MzsJCQkJCQlzdHJ1Y3QgYnBmX3QgKmJwZikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZzsKJiM0MzsJaW50IGNncm91cDsKJiM0MzsKJiM0MzsJbWVtc2V0KGJwZiwgMCwgc2l6ZW9mKCpicGYpKTsKJiM0MzsJYnBmLSZndDtvYmogPSBicGZfb2JqZWN0X19vcGVuX2ZpbGUocGF0aCwgTlVMTCk7CiYjNDM7CiYjNDM7CUFTU0VSVF9ORShicGYtJmd0O29iaiwgTlVMTCk7CiYjNDM7CUFTU0VSVF9FUShicGZfb2JqZWN0X19sb2FkKGJwZi0mZ3Q7b2JqKSwgMCk7CiYjNDM7CiYjNDM7CXByb2cgPSBicGZfb2JqZWN0X19maW5kX3Byb2dyYW1fYnlfbmFtZShicGYtJmd0O29iaiwgJiMzNDtvbl9zb2Nrb3BzJiMzNDspOwomIzQzOwlBU1NFUlRfTkUocHJvZywgTlVMTCk7CiYjNDM7CiYjNDM7CWNncm91cCA9IG9wZW4oJiMzNDsvc3lzL2ZzL2Nncm91cCYjMzQ7LCBPX1JET05MWSk7CiYjNDM7CUFTU0VSVF9ORShjZ3JvdXAsIC0xKTsKJiM0MzsKJiM0MzsJYnBmLSZndDtvbl9zb2Nrb3BzID0gYnBmX3Byb2dyYW1fX2F0dGFjaF9jZ3JvdXAocHJvZywgY2dyb3VwKTsKJiM0MzsJY2xvc2UoY2dyb3VwKTsKJiM0MzsKJiM0MzsJQVNTRVJUX05FKGJwZi0mZ3Q7b25fc29ja29wcywgTlVMTCk7CiYjNDM7CiYjNDM7CWlmIChyZWN2KSB7CiYjNDM7CQlzdHJ1Y3QgYnBmX21hcCAqbWFwID0gYnBmX29iamVjdF9fZmluZF9tYXBfYnlfbmFtZShicGYtJmd0O29iaiwgJiMzNDttYXBfc29ja3MmIzM0Oyk7CiYjNDM7CiYjNDM7CQlBU1NFUlRfTkUobWFwLCBOVUxMKTsKJiM0MzsKJiM0MzsJCXByb2cgPSBicGZfb2JqZWN0X19maW5kX3Byb2dyYW1fYnlfbmFtZShicGYtJmd0O29iaiwgJiMzNDtvbl9yZWN2JiMzNDspOwomIzQzOwkJQVNTRVJUX05FKHByb2csIE5VTEwpOwomIzQzOwomIzQzOwkJYnBmLSZndDtvbl9yZWN2ID0gYnBmX3Byb2dyYW1fX2F0dGFjaF9zb2NrbWFwKHByb2csIGJwZl9tYXBfX2ZkKG1hcCkpOwomIzQzOwkJQVNTRVJUX05FKGJwZi0mZ3Q7b25fcmVjdiwgTlVMTCk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RydWN0IHNlcnZlcl90IHsKJiM0MzsJaW50IGZkOwomIzQzOwlhdG9taWNfaW50IHJ1bm5pbmc7CiYjNDM7CXB0aHJlYWRfdCB0aHJlYWQ7CiYjNDM7CWJvb2wgdGhyZWFkX2NyZWF0ZWQ7CiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgdm9pZCAqcnVuX3NlcnZlcih2b2lkICphcmcpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgc2VydmVyX3QgKnNlcnZlciA9IGFyZzsKJiM0MzsJYm9vbCBmYWlsZWQgPSBmYWxzZTsKJiM0MzsKJiM0MzsJd2hpbGUgKGF0b21pY19sb2FkKCZhbXA7c2VydmVyLSZndDtydW5uaW5nKSkgewomIzQzOwkJaW50IGNsaWVudF9mZCA9IGFjY2VwdChzZXJ2ZXItJmd0O2ZkLCBOVUxMLCBOVUxMKTsKJiM0MzsKJiM0MzsJCWlmIChjbGllbnRfZmQgPT0gLTEpIHsKJiM0MzsJCQlpZiAoIWF0b21pY19sb2FkKCZhbXA7c2VydmVyLSZndDtydW5uaW5nKSkKJiM0MzsJCQkJYnJlYWs7CiYjNDM7CiYjNDM7CQkJY29udGludWU7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlwcm9jZXNzX2NsaWVudChjbGllbnRfZmQsICZhbXA7c2VydmVyLSZndDtydW5uaW5nLCAmYW1wO2ZhaWxlZCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKGZhaWxlZCkKJiM0MzsJCXJldHVybiAodm9pZCAqKTE7CiYjNDM7CiYjNDM7CXJldHVybiBOVUxMOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHNlbmRfcGF5bG9hZChzdHJ1Y3QgX190ZXN0X21ldGFkYXRhICpfbWV0YWRhdGEsIGludCBmZCwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKQomIzQzO3sKJiM0MzsJc2l6ZV90IHJlbWFpbmluZyA9IGxlbjsKJiM0MzsKJiM0MzsJZG8gewomIzQzOwkJc3NpemVfdCBieXRlcyA9IHdyaXRlKGZkLCBidWYgJiM0MzsgKGxlbiAtIHJlbWFpbmluZyksIHJlbWFpbmluZyk7CiYjNDM7CiYjNDM7CQlpZiAoYnl0ZXMgJmx0OyAwKSB7CiYjNDM7CQkJaWYgKGVycm5vID09IEVJTlRSKQomIzQzOwkJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCQlyZXR1cm4gLTE7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlyZW1haW5pbmcgLT0gYnl0ZXM7CiYjNDM7CX0gd2hpbGUgKHJlbWFpbmluZyk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztGSVhUVVJFKHNvY2ttYXBfcmVjdmZyb20pCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgc2VydmVyX3Qgc2VydmVyOwomIzQzOwlzdHJ1Y3Qgc29ja2FkZHJfaW4gYWRkcjsKJiM0MzsJc3RydWN0IGJwZl90IGJwZjsKJiM0MzsJY2hhciAqcGF5bG9hZDsKJiM0MzsJc2l6ZV90IHBheWxvYWRfbGVuOwomIzQzO307CiYjNDM7CiYjNDM7RklYVFVSRV9WQVJJQU5UKHNvY2ttYXBfcmVjdmZyb20pCiYjNDM7ewomIzQzOwlib29sIHdpdGhfcmVjdjsKJiM0Mzt9OwomIzQzOwomIzQzO0ZJWFRVUkVfVkFSSUFOVF9BREQoc29ja21hcF9yZWN2ZnJvbSwgcmVjdm1zZykKJiM0Mzt7CiYjNDM7CS53aXRoX3JlY3YgPSBmYWxzZQomIzQzO307CiYjNDM7CiYjNDM7RklYVFVSRV9WQVJJQU5UX0FERChzb2NrbWFwX3JlY3Zmcm9tLCByZWN2bXNnX3BhcnNlcikKJiM0Mzt7CiYjNDM7CS53aXRoX3JlY3YgPSB0cnVlCiYjNDM7fTsKJiM0MzsKJiM0MztGSVhUVVJFX1NFVFVQKHNvY2ttYXBfcmVjdmZyb20pCiYjNDM7ewomIzQzOwltZW1zZXQoJmFtcDtzZWxmLSZndDtzZXJ2ZXIsIDAsIHNpemVvZihzZWxmLSZndDtzZXJ2ZXIpKTsKJiM0MzsJc2VsZi0mZ3Q7c2VydmVyLmZkID0gLTE7CiYjNDM7CiYjNDM7CW1lbXNldCgmYW1wO3NlbGYtJmd0O2FkZHIsIDAsIHNpemVvZihzZWxmLSZndDthZGRyKSk7CiYjNDM7CiYjNDM7CXNlbGYtJmd0O3BheWxvYWRfbGVuID0gMTAyNCAqIDEwMjQgKiAyNTsKJiM0MzsJc2VsZi0mZ3Q7cGF5bG9hZCA9IG1hbGxvYyhzZWxmLSZndDtwYXlsb2FkX2xlbik7CiYjNDM7CUFTU0VSVF9ORShzZWxmLSZndDtwYXlsb2FkLCBOVUxMKTsKJiM0MzsKJiM0MzsJbWVtc2V0KHNlbGYtJmd0O3BheWxvYWQsIDAsIHNlbGYtJmd0O3BheWxvYWRfbGVuKTsKJiM0MzsJc2VsZi0mZ3Q7cGF5bG9hZFtzZWxmLSZndDtwYXlsb2FkX2xlbiAtIDFdID0gUEFZTE9BRF9FTkQ7CiYjNDM7CiYjNDM7CXNldHVwX2JwZihfbWV0YWRhdGEsICYjMzQ7c29ja21hcF9yZWN2ZnJvbS5icGYubyYjMzQ7LCB2YXJpYW50LSZndDt3aXRoX3JlY3YsICZhbXA7c2VsZi0mZ3Q7YnBmKTsKJiM0MzsJYXRvbWljX3N0b3JlKCZhbXA7c2VsZi0mZ3Q7c2VydmVyLnJ1bm5pbmcsIDEpOwomIzQzOwlzZWxmLSZndDtzZXJ2ZXIuZmQgPSBzdGFydF9saXN0ZW5pbmcoX21ldGFkYXRhLCAmYW1wO3NlbGYtJmd0O2FkZHIuc2luX3BvcnQpOwomIzQzOwomIzQzOwlzZWxmLSZndDthZGRyLnNpbl9mYW1pbHkgPSBBRl9JTkVUOwomIzQzOwlzZWxmLSZndDthZGRyLnNpbl9hZGRyLnNfYWRkciA9IGh0b25sKElOQUREUl9MT09QQkFDSyk7CiYjNDM7CiYjNDM7CUFTU0VSVF9FUShwdGhyZWFkX2NyZWF0ZSgmYW1wO3NlbGYtJmd0O3NlcnZlci50aHJlYWQsIE5VTEwsICZhbXA7cnVuX3NlcnZlciwgJmFtcDtzZWxmLSZndDtzZXJ2ZXIpLCAwKTsKJiM0MzsJc2VsZi0mZ3Q7c2VydmVyLnRocmVhZF9jcmVhdGVkID0gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiYjNDM7RklYVFVSRV9URUFSRE9XTihzb2NrbWFwX3JlY3Zmcm9tKQomIzQzO3sKJiM0MzsJYXRvbWljX3N0b3JlKCZhbXA7c2VsZi0mZ3Q7c2VydmVyLnJ1bm5pbmcsIDApOwomIzQzOwomIzQzOwlpZiAoc2VsZi0mZ3Q7c2VydmVyLmZkICE9IC0xKQomIzQzOwkJc2h1dGRvd24oc2VsZi0mZ3Q7c2VydmVyLmZkLCBTSFVUX1JEKTsKJiM0MzsKJiM0MzsJaWYgKHNlbGYtJmd0O3NlcnZlci50aHJlYWRfY3JlYXRlZCkgewomIzQzOwkJdm9pZCAqcmV0dmFsID0gTlVMTDsKJiM0MzsKJiM0MzsJCXB0aHJlYWRfam9pbihzZWxmLSZndDtzZXJ2ZXIudGhyZWFkLCAmYW1wO3JldHZhbCk7CiYjNDM7CQlFWFBFQ1RfRVEocmV0dmFsLCBOVUxMKTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoc2VsZi0mZ3Q7c2VydmVyLmZkICE9IC0xKQomIzQzOwkJY2xvc2Uoc2VsZi0mZ3Q7c2VydmVyLmZkKTsKJiM0MzsKJiM0MzsJZnJlZShzZWxmLSZndDtwYXlsb2FkKTsKJiM0MzsJYnBmX2xpbmtfX2Rlc3Ryb3koc2VsZi0mZ3Q7YnBmLm9uX3NvY2tvcHMpOwomIzQzOwomIzQzOwlpZiAoc2VsZi0mZ3Q7YnBmLm9uX3JlY3YpCiYjNDM7CQlicGZfbGlua19fZGVzdHJveShzZWxmLSZndDticGYub25fcmVjdik7CiYjNDM7CiYjNDM7CWJwZl9vYmplY3RfX2Nsb3NlKHNlbGYtJmd0O2JwZi5vYmopOwomIzQzO30KJiM0MzsKJiM0MztURVNUX0Yoc29ja21hcF9yZWN2ZnJvbSwgbm9fdGltZW91dCkKJiM0Mzt7CiYjNDM7CWNoYXIgaWdub3JlZFsxMjhdOwomIzQzOwomIzQzOwlmb3IgKGludCBpID0gMDsgaSAmbHQ7IE1BWF9JVEVSQVRJT05TOyAmIzQzOyYjNDM7aSkgewomIzQzOwkJaW50IGZkID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfU1RSRUFNLCBJUFBST1RPX1RDUCk7CiYjNDM7CiYjNDM7CQlBU1NFUlRfTkUoZmQsIC0xKTsKJiM0MzsJCUFTU0VSVF9FUShjb25uZWN0KGZkLCAoc3RydWN0IHNvY2thZGRyICopJmFtcDtzZWxmLSZndDthZGRyLCBzaXplb2Yoc2VsZi0mZ3Q7YWRkcikpLCAwKTsKJiM0MzsKJiM0MzsJCUFTU0VSVF9FUShzZW5kX3BheWxvYWQoX21ldGFkYXRhLCBmZCwgc2VsZi0mZ3Q7cGF5bG9hZCwgc2VsZi0mZ3Q7cGF5bG9hZF9sZW4pLCAwKTsKJiM0MzsKJiM0MzsJCWlmIChyZWN2ZnJvbShmZCwgaWdub3JlZCwgc2l6ZW9mKGlnbm9yZWQpLCAwLCBOVUxMLCBOVUxMKSAmbHQ7IDApCiYjNDM7CQkJQVNTRVJUX05FKGVycm5vLCBFQUdBSU4pOwomIzQzOwomIzQzOwkJY2xvc2UoZmQpOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQ2NF90IHRvX25hbm9zKHN0cnVjdCB0aW1lc3BlYyAqdGltZSkKJiM0Mzt7CiYjNDM7CXJldHVybiAodGltZS0mZ3Q7dHZfc2VjICogMTAwMDAwMDAwMExMKSAmIzQzOyB0aW1lLSZndDt0dl9uc2VjOwomIzQzO30KJiM0MzsKJiM0MztURVNUX0Yoc29ja21hcF9yZWN2ZnJvbSwgd2l0aF90aW1lb3V0KQomIzQzO3sKJiM0MzsJY2hhciBpZ25vcmVkWzEyOF07CiYjNDM7CXN0cnVjdCB0aW1ldmFsIHRpbWVvOwomIzQzOwomIzQzOwl0aW1lby50dl9zZWMgPSAwOwomIzQzOwl0aW1lby50dl91c2VjID0gNTAwMDsKJiM0MzsKJiM0MzsJLyogcmVtb3ZlIHRoZSBwYXlsb2FkIGVuZCBkZWxpbWl0ZXIgc28gdGhlIHNlcnZlciBuZXZlciByZXNwb25kcyBhbmQgcmVjdmZyb20gdGltZXMgb3V0LiAqLwomIzQzOwlzZWxmLSZndDtwYXlsb2FkW3NlbGYtJmd0O3BheWxvYWRfbGVuIC0gMV0gPSAwOwomIzQzOwomIzQzOwlmb3IgKGludCBpID0gMDsgaSAmbHQ7IE1BWF9JVEVSQVRJT05TOyAmIzQzOyYjNDM7aSkgewomIzQzOwkJc3RydWN0IHRpbWVzcGVjIGJlZzsKJiM0MzsJCXN0cnVjdCB0aW1lc3BlYyBlbmQ7CiYjNDM7CQlpbnQgZXJyOwomIzQzOwomIzQzOwkJaW50IGZkID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfU1RSRUFNLCBJUFBST1RPX1RDUCk7CiYjNDM7CiYjNDM7CQlBU1NFUlRfTkUoZmQsIC0xKTsKJiM0MzsJCUFTU0VSVF9FUShjb25uZWN0KGZkLCAoc3RydWN0IHNvY2thZGRyICopJmFtcDtzZWxmLSZndDthZGRyLCBzaXplb2Yoc2VsZi0mZ3Q7YWRkcikpLCAwKTsKJiM0MzsKJiM0MzsJCUFTU0VSVF9FUShzZW5kX3BheWxvYWQoX21ldGFkYXRhLCBmZCwgc2VsZi0mZ3Q7cGF5bG9hZCwgc2VsZi0mZ3Q7cGF5bG9hZF9sZW4pLCAwKTsKJiM0MzsKJiM0MzsJCUFTU0VSVF9FUShzZXRzb2Nrb3B0KGZkLCBTT0xfU09DS0VULCBTT19SQ1ZUSU1FTywgJmFtcDt0aW1lbywgc2l6ZW9mKHRpbWVvKSksIDApOwomIzQzOwomIzQzOwkJY2xvY2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUMsICZhbXA7YmVnKTsKJiM0MzsJCUFTU0VSVF9FUShyZWN2ZnJvbShmZCwgaWdub3JlZCwgc2l6ZW9mKGlnbm9yZWQpLCAwLCBOVUxMLCBOVUxMKSwgLTEpOwomIzQzOwkJZXJyID0gZXJybm87CiYjNDM7CQljbG9ja19nZXR0aW1lKENMT0NLX01PTk9UT05JQywgJmFtcDtlbmQpOwomIzQzOwomIzQzOwkJQVNTRVJUX0VRKGVyciwgRUFHQUlOKTsKJiM0MzsJCUFTU0VSVF9HRSh0b19uYW5vcygmYW1wO2VuZCkgLSB0b19uYW5vcygmYW1wO2JlZyksIHRpbWVvLnR2X3VzZWMgKiAxMDAwKTsKJiM0MzsKJiM0MzsJCWNsb3NlKGZkKTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztURVNUX0hBUk5FU1NfTUFJTgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwNDoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NDU1CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjY3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFRDUCBCUEYgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBuZXQvaXB2NC90Y3BfYnBmLmNgLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIGluIGhvdyBgdGNwX21zZ193YWl0X2RhdGFgIGhhbmRsZXMgdGhlIHRpbWVvdXQ7IGl0JiMzOTtzIG5vdyB0YWtpbmcgYSBwb2ludGVyIHRvIGB0aW1lb2AgaW5zdGVhZCBvZiB0aGUgdmFsdWUgaXRzZWxmLiBUaGF0JiMzOTtzIGEgZnVuZGFtZW50YWwgc2hpZnQgaW4gaG93IHRoZSBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgdGltZW91dCBtZWNoYW5pc20sIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zLiBUaGUgcGF0Y2ggYWxzbyB1cGRhdGVzIGB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyYCBhbmQgYHRjcF9icGZfcmVjdm1zZ2AsIHNwZWNpZmljYWxseSB0byBwYXNzIHRoZSBhZGRyZXNzIG9mIGB0aW1lb2AgYW5kIGhhbmRsZSBhIHBvdGVudGlhbCBqdW1wIHRvIGBtc2dfYnl0ZXNfcmVhZHlgLiBUaGlzIGlzIG1ha2luZyBtZSB0aGluayBhYm91dCBob3cgdGhlIHRpbWVvdXQgaXMgdXNlZCBpbiB0aGUgQlBGIHNvY2ttYXAgY29udGV4dCDigJMgaXMgaXQgYW4gb3B0aW1pemF0aW9uLCBhIGJ1ZyBmaXgsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaGUgaW50cm9kdWN0aW9uIG9mIHRoZSBgc29ja21hcF9yZWN2ZnJvbWAgc2VsZnRlc3QgaXMgYSBnb29kIHNpZ24sIGJ1dCBJIG5lZWQgdG8gY29uZmlybSBpdHMgY292ZXJhZ2UuCgpNeSBpbW1lZGlhdGUgY29uY2VybiBpcyByZWFjaGFiaWxpdHkgYW5kIGZ1bmN0aW9uYWxpdHkuIFRoZSBjaGFuZ2VzIGRpcmVjdGx5IGltcGFjdCBgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcmAgYW5kIGB0Y3BfYnBmX3JlY3Ztc2dgLCB3aGljaCBhcmUgb2J2aW91c2x5IGNyaXRpY2FsIHRvIHRoZSBCUEYgc29ja21hcCBmdW5jdGlvbmFsaXR5LCBzbyBhIGRlZXAgZGl2ZSBpbnRvIHRoZSBCUEYgaW1wbGVtZW50YXRpb24gaXMgcmVxdWlyZWQuIEdpdmVuIHRoYXQgdGhpcyBpcyB0b3VjaGluZyBjb3JlIG5ldHdvcmtpbmcgYW5kIEJQRiBsb2dpYywgZnV6emluZyBzZWVtcyBsaWtlIGEgdmVyeSBnb29kIGlkZWEuCgpOZXh0LCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgYnVpbGQgY29uZmlndXJhdGlvbi4gSSYjMzk7bSBnb2luZyB0byBoYXZlIHRvIGNoZWNrIHdoYXQmIzM5O3MgZ29pbmcgb24gaW4gYG5ldC9pcHY0L01ha2VmaWxlYC4gSSYjMzk7bSBndWVzc2luZyBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBhIGdpdmVuLCBidXQgSSYjMzk7bGwgYWxzbyBoYXZlIHRvIHNlZSBpZiBgQ09ORklHX05FVF9TT0NLX01TR2Agb3IgYENPTkZJR19CUEZfU1RSRUFNX1BBUlNFUmAgYXJlIGFsc28gZGVwZW5kZW5jaWVzLiBVbmRlcnN0YW5kaW5nIHRoZSBidWlsZCBjb25maWd1cmF0aW9uIHdpbGwgdGVsbCBtZSBob3cgdG8gYnVpbGQgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwNDoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Y3BfYnBmJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvTWFrZWZpbGU9NjI9b2JqLSQoQ09ORklHX1RDUF9DT05HX0lMTElOT0lTKSAmIzQzOz0gdGNwX2lsbGlub2lzLm9cbm5ldC9pcHY0L01ha2VmaWxlOjYzOm9iai0kKENPTkZJR19ORVRfU09DS19NU0cpICYjNDM7PSB0Y3BfYnBmLm9cbm5ldC9pcHY0L01ha2VmaWxlLTY0LW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IHVkcF9icGYub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDA0OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgyMzgKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipLZXJuZWwgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMgZm9yIFNvY2tldCBGaWx0ZXJpbmcqKgoKUmlnaHQsIHNvIEkgc2VlIHdlIGFic29sdXRlbHkgbmVlZCBgQ09ORklHX05FVF9TT0NLX01TR2AgZW5hYmxlZC4gVGhhdCYjMzk7cyBhIGdpdmVuOyBpdCYjMzk7cyB0aGUgZm91bmRhdGlvbi4gTm93LCBzaW5jZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHNvY2tldHMsIHBhcnRpY3VsYXJseSB0aGUgcG90ZW50aWFsIGZvciBCUEYgZmlsdGVyaW5nIHdpdGhpbiB0aGUgVENQIHN0YWNrLCBteSBuZXh0IG1vdmUgaXMgdG8gZGl2ZSBzdHJhaWdodCBpbnRvIGB0Y3BfYnBmLmNgLiBJIG5lZWQgdG8gZW5zdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IG90aGVyLCBsZXNzIG9idmlvdXMgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgbHVya2luZyB3aXRoaW4gdGhhdCBmaWxlIHRoYXQgSSBtaWdodCBuZWVkIHRvIGNvbnNpZGVyLiBXZSBjYW4mIzM5O3QgaGF2ZSBhbnkgc3VycHJpc2VzIHdoZW4gd2Ugc3RhcnQgbWFraW5nIGNoYW5nZXMuIE15IGFpbSBoZXJlIGlzIHRvIGVuc3VyZSB0aGUgY29uZmlndXJhdGlvbiBpcyBjb21wbGV0ZSwgYW5kIHRoYXQgd2UgaGF2ZSB0aGUgbWF4aW11bSBwZXJmb3JtYW5jZSBwcm9maWxlIHRvIHdvcmsgd2l0aC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwNDoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwX2JwZi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcF9icGYuYz0xNzg9RVhQT1JUX1NZTUJPTF9HUEwodGNwX2JwZl9zZW5kbXNnX3JlZGlyKTtcbm5ldC9pcHY0L3RjcF9icGYuYy0xNzktXG5uZXQvaXB2NC90Y3BfYnBmLmM6MTgwOiNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcbm5ldC9pcHY0L3RjcF9icGYuYy0xODEtc3RhdGljIGludCB0Y3BfbXNnX3dhaXRfZGF0YShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19wc29jayAqcHNvY2ssXG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jPTcxMz1zdGF0aWMgaW50IHRjcF9icGZfYXNzZXJ0X3Byb3RvX29wcyhzdHJ1Y3QgcHJvdG8gKm9wcylcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmMtNzIyLVxubmV0L2lwdjQvdGNwX2JwZi5jOjcyMzojaWYgSVNfRU5BQkxFRChDT05GSUdfQlBGX1NUUkVBTV9QQVJTRVIpXG5uZXQvaXB2NC90Y3BfYnBmLmMtNzI0LWludCB0Y3BfYnBmX3N0cnBfcmVhZF9zb2NrKHN0cnVjdCBzdHJwYXJzZXIgKnN0cnAsIHJlYWRfZGVzY3JpcHRvcl90ICpkZXNjLFxuLS1cbm5ldC9pcHY0L3RjcF9icGYuYy03NTYtfVxubmV0L2lwdjQvdGNwX2JwZi5jOjc1NzojZW5kaWYgLyogQ09ORklHX0JQRl9TVFJFQU1fUEFSU0VSICovXG5uZXQvaXB2NC90Y3BfYnBmLmMtNzU4LVxuLS1cbm5ldC9pcHY0L3RjcF9icGYuYz04MDM9dm9pZCB0Y3BfYnBmX2Nsb25lKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKm5ld3NrKVxuLS1cbm5ldC9pcHY0L3RjcF9icGYuYy04MDktfVxubmV0L2lwdjQvdGNwX2JwZi5jOjgxMDojZW5kaWYgLyogQ09ORklHX0JQRl9TWVNDQUxMICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDQ6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODg3NQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDIwNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgQlBGLVJlbGF0ZWQgVENQIEZ1bmN0aW9uYWxpdHkqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIG1vZGlmaWVkIFRDUCBmdW5jdGlvbnM6IGB0Y3BfbXNnX3dhaXRfZGF0YWAsIGB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyYCwgYW5kIGB0Y3BfYnBmX3JlY3Ztc2dgLiBUaGV5JiMzOTtyZSBhbGwgZ3VhcmRlZCBieSBgI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTGAsIHdoaWNoIG1lYW5zIEkgbmVlZCB0byBtYWtlIHN1cmUgYEJQRl9TWVNDQUxMYCBhbmQgYE5FVF9TT0NLX01TR2AgYXJlIGFjY291bnRlZCBmb3IgaW4gbXkgYW5hbHlzaXMuIAoKTm93LCBsZXQmIzM5O3MgaG9uZSBpbiBvbiB0aGUgY29yZSBmdW5jdGlvbnMuIEkgbmVlZCB0byBmb2N1cyBvbiBgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcmAsIGB0Y3BfYnBmX3JlY3Ztc2dgLCBhbmQgYHRjcF9tc2dfd2FpdF9kYXRhYC4KCk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGB0Y3BfYnBmX3JlY3Ztc2dgIGFuZCBgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcmAgYXJlIHByaW1lIHRhcmdldHMgZm9yIGRlZXBlciBleGFtaW5hdGlvbiBhcyBwb3RlbnRpYWwgJiMzNDtob3QtcGF0aCYjMzQ7IGFyZWFzLiBTaW5jZSB0aGV5IGFyZSByZWN2bXNnIGltcGxlbWVudGF0aW9ucyBzcGVjaWZpYyB0byBzb2NrbWFwLCBub3QgdGhlIGdlbmVyaWMgYHRjcF9yZWN2bXNnYCwgdGhleSBhcmUgZXhjZWxsZW50IGNhbmRpZGF0ZXMgZm9yIGluY2x1c2lvbiBpbiBGb2N1c1N5bWJvbHMuCgpKdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSYjMzk7bSBnb2luZyB0byBkb3VibGUtY2hlY2sgdGhvc2UgdHdvIHNwZWNpZmljIGZ1bmN0aW9ucywgYHRjcF9icGZfcmVjdm1zZ19wYXJzZXJgIGFuZCBgdGNwX2JwZl9yZWN2bXNnYCwgdG8gY29uZmlybSBteSB1bmRlcnN0YW5kaW5nIGFuZCBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMDQ6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGNwX2JwZl9yZWN2bXNnJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwX2JwZi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcF9icGYuYz0yMDM9c3RhdGljIGJvb2wgaXNfbmV4dF9tc2dfZmluKHN0cnVjdCBza19wc29jayAqcHNvY2spXG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jLTIyMC1cbm5ldC9pcHY0L3RjcF9icGYuYzoyMjE6c3RhdGljIGludCB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyKHN0cnVjdCBzb2NrICpzayxcbm5ldC9pcHY0L3RjcF9icGYuYy0yMjItXHRcdFx0XHQgIHN0cnVjdCBtc2doZHIgKm1zZyxcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmM9MzM4PXN0YXRpYyBpbnQgdGNwX2JwZl9pb2N0bChzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIGludCAqa2FyZylcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmMtMzU1LVxubmV0L2lwdjQvdGNwX2JwZi5jOjM1NjpzdGF0aWMgaW50IHRjcF9icGZfcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcbm5ldC9pcHY0L3RjcF9icGYuYy0zNTctXHRcdFx0ICAgaW50IGZsYWdzKVxuLS1cbm5ldC9pcHY0L3RjcF9icGYuYz02NzQ9c3RhdGljIHZvaWQgdGNwX2JwZl9yZWJ1aWxkX3Byb3RvcyhzdHJ1Y3QgcHJvdG8gcHJvdFtUQ1BfQlBGX05VTV9DRkdTXSxcbi0tXG5uZXQvaXB2NC90Y3BfYnBmLmMtNjc5LVx0cHJvdFtUQ1BfQlBGX0JBU0VdLmNsb3NlXHRcdD0gc29ja19tYXBfY2xvc2U7XG5uZXQvaXB2NC90Y3BfYnBmLmM6NjgwOlx0cHJvdFtUQ1BfQlBGX0JBU0VdLnJlY3Ztc2dcdFx0PSB0Y3BfYnBmX3JlY3Ztc2c7XG5uZXQvaXB2NC90Y3BfYnBmLmMtNjgxLVx0cHJvdFtUQ1BfQlBGX0JBU0VdLnNvY2tfaXNfcmVhZGFibGVcdD0gc2tfbXNnX2lzX3JlYWRhYmxlO1xuLS1cbm5ldC9pcHY0L3RjcF9icGYuYy02ODctXHRwcm90W1RDUF9CUEZfUlhdXHRcdFx0PSBwcm90W1RDUF9CUEZfQkFTRV07XG5uZXQvaXB2NC90Y3BfYnBmLmM6Njg4Olx0cHJvdFtUQ1BfQlBGX1JYXS5yZWN2bXNnXHRcdD0gdGNwX2JwZl9yZWN2bXNnX3BhcnNlcjtcbm5ldC9pcHY0L3RjcF9icGYuYy02ODktXG5uZXQvaXB2NC90Y3BfYnBmLmMtNjkwLVx0cHJvdFtUQ1BfQlBGX1RYUlhdXHRcdFx0PSBwcm90W1RDUF9CUEZfVFhdO1xubmV0L2lwdjQvdGNwX2JwZi5jOjY5MTpcdHByb3RbVENQX0JQRl9UWFJYXS5yZWN2bXNnXHRcdD0gdGNwX2JwZl9yZWN2bXNnX3BhcnNlcjtcbm5ldC9pcHY0L3RjcF9icGYuYy02OTItfVxuLS1cbm5ldC9pcHY0L3RjcF9icGYuYz03MjQ9aW50IHRjcF9icGZfc3RycF9yZWFkX3NvY2soc3RydWN0IHN0cnBhcnNlciAqc3RycCwgcmVhZF9kZXNjcmlwdG9yX3QgKmRlc2MsXG4tLVxubmV0L2lwdjQvdGNwX2JwZi5jLTc0Ny1cdCAqIEZvciBTS19SRURJUkVDVCwgd2UgbmVlZCB0byBhY2sgdGhlIGZyYW1lIGltbWVkaWF0ZWx5IGJ1dCBmb3Jcbm5ldC9pcHY0L3RjcF9icGYuYzo3NDg6XHQgKiBTS19QQVNTLCB3ZSB3YW50IHRvIGRlbGF5IHRoZSBhY2sgdW50aWwgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcigpLlxubmV0L2lwdjQvdGNwX2JwZi5jLTc0OS1cdCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDA0OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMTUwCgkJCQkJCQlvdXRwdXQ6IDE1MgoJCQkJCQkJdGhvdWdodHM6IDE3MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgQlBGIFNvY2ttYXAgVGltZW91dCBGaXgqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0JiMzOTtzIGRlYWxpbmcgd2l0aCBgcmVjdm1zZ2AgaGFuZGxlcnMuIFNwZWNpZmljYWxseSwgdGhlc2UgaGFuZGxlcnMgYXJlIHVzZWQgd2l0aCBUQ1Agc29ja2V0cyB0aGF0IGFyZSBwbGFjZWQgd2l0aGluIGEgQlBGIHNvY2ttYXAg4oCTIHNvLCB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBhIHZlcnkgdGFyZ2V0ZWQgYXJlYSBoZXJlLCB3aGljaCBpcyBnb29kIGJlY2F1c2UgaXQgbWFrZXMgdGhlIHNjb3BlIG1hbmFnZWFibGUuIEl0JiMzOTtzIG5vdCBhIGdlbmVyaWMgaXNzdWU7IGl0JiMzOTtzIHJpZ2h0IGluIHRoZSBzd2VldCBzcG90IG9mIHRoaXMgc3BlY2lmaWMgbmV0d29ya2luZyBjb25maWd1cmF0aW9uLgoKVGhlIGNvbmZpZ3VyYXRpb25zIGJlaW5nIGNoYW5nZWQsIGBCUEZfU1lTQ0FMTGAgYW5kIGBORVRfU09DS19NU0dgLCBjb25maXJtIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggc3lzdGVtIGNhbGxzIHJlbGF0ZWQgdG8gbmV0d29ya2luZyBtZXNzYWdlcyB3aXRoaW4gdGhlIEJQRiBjb250ZXh0LCBzbyB0aGlzIGlzIGRlZmluaXRlbHkgcmVsYXRlZCB0byB0aGUgcmlnaHQgc3Vic3lzdGVtLiBJIHNlZSB3ZSYjMzk7cmUgZm9jdXNpbmcgb24gdGhlIGB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyYCwgYHRjcF9icGZfcmVjdm1zZ2AsIGFuZCBgdGNwX21zZ193YWl0X2RhdGFgIHN5bWJvbHMuIFRoYXQgbmFycm93cyB0aGluZ3MgZG93biBldmVuIGZ1cnRoZXIg4oCTIGl0JiMzOTtzIGFsbCBhYm91dCBob3cgdGhlc2UgZnVuY3Rpb25zIGhhbmRsZSB0aGUgcmV0cmlldmFsIG9mIGRhdGEuCgpNeSByZWFzb25pbmcgbGVhZHMgbWUgdG8gYmVsaWV2ZSB0aGUgcGF0Y2ggaXMgdGFyZ2V0aW5nIHRpbWVvdXQgaGFuZGxpbmcgd2l0aGluIGB0Y3BfYnBmX3JlY3Ztc2dgIGFuZCBgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcmAuIFRoZSBmaXggc3BlY2lmaWNhbGx5IGFkZHJlc3NlcyB0aGUgdGltZW91dCB2YWx1ZSB1cGRhdGUgd2l0aGluIGB0Y3BfbXNnX3dhaXRfZGF0YWAgYW5kIGludHJvZHVjZXMgYSByZXRyeSBtZWNoYW5pc20gaWYgdGhlIHRpbWVvdXQgaGFzbiYjMzk7dCB5ZXQgZWxhcHNlZC4gVGhpcyBpcyBjcml0aWNhbCBjb3JlIG5ldHdvcmtpbmcgbG9naWMg4oCTIHRoZSBoYW5kbGluZyBvZiBzb2NrZXQgcmVhZHMgYW5kIG1lc3NhZ2Ugd2FpdHMgdW5kZXIgQlBGIHNvY2ttYXAsIHdoaWNoIG1lYW5zIGNvcnJlY3QgdGltZW91dCBoYW5kbGluZyBpcyBlc3NlbnRpYWwgZm9yIHJlbGlhYmxlIG9wZXJhdGlvbi4gVGhpcyBpcyBhIHZlcnkgdGFyZ2V0ZWQgZml4IHJlbGF0ZWQgdG8gYSBCUEYgc29ja21hcC4gSXQmIzM5O3Mgbm90IGEgcGVyZm9ybWFuY2UgdHdlYWssIGJ1dCBtb3JlIG9mIGEgcmVsaWFiaWxpdHkgZml4IHJlbGF0ZWQgdG8gYSB2ZXJ5IHNwZWNpZmljIG5ldHdvcmsgY29uZGl0aW9uLiBMZXQmIzM5O3MgY2FsbCB0aGlzIHNldC1yZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAwNDoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7TkVUX1NPQ0tfTVNHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGNwX2JwZl9yZWN2bXNnX3BhcnNlciYjMzQ7LAogICAgJiMzNDt0Y3BfYnBmX3JlY3Ztc2cmIzM0OywKICAgICYjMzQ7dGNwX21zZ193YWl0X2RhdGEmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGltZW91dCBoYW5kbGluZyBpbiBCUEYgc29ja21hcCYjMzk7cyByZWN2bXNnIGltcGxlbWVudGF0aW9ucyAodGNwX2JwZl9yZWN2bXNnIGFuZCB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyKS4gSXQgY29ycmVjdGx5IHVwZGF0ZXMgdGhlIHJlbWFpbmluZyB0aW1lb3V0IHZhbHVlIGluIHRjcF9tc2dfd2FpdF9kYXRhIGFuZCByZXRyaWVzIHJlYWRpbmcgaWYgdGhlIHRpbWVvdXQgaGFzbiYjMzk7dCBleHBpcmVkLiBUaGlzIGlzIGZ1bmN0aW9uYWwgY29yZSBuZXR3b3JraW5nIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7TkVUX1NPQ0tfTVNHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGNwX2JwZl9yZWN2bXNnX3BhcnNlciYjMzQ7LAogICAgJiMzNDt0Y3BfYnBmX3JlY3Ztc2cmIzM0OywKICAgICYjMzQ7dGNwX21zZ193YWl0X2RhdGEmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGltZW91dCBoYW5kbGluZyBpbiBCUEYgc29ja21hcCYjMzk7cyByZWN2bXNnIGltcGxlbWVudGF0aW9ucyAodGNwX2JwZl9yZWN2bXNnIGFuZCB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyKS4gSXQgY29ycmVjdGx5IHVwZGF0ZXMgdGhlIHJlbWFpbmluZyB0aW1lb3V0IHZhbHVlIGluIHRjcF9tc2dfd2FpdF9kYXRhIGFuZCByZXRyaWVzIHJlYWRpbmcgaWYgdGhlIHRpbWVvdXQgaGFzbiYjMzk7dCBleHBpcmVkLiBUaGlzIGlzIGZ1bmN0aW9uYWwgY29yZSBuZXR3b3JraW5nIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDA0OjE0OjE4LjcwOTk2NDgyN1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMDY1NDk0MTQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJORVRfU09DS19NU0dcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyXCIsXG4gICAgXCJ0Y3BfYnBmX3JlY3Ztc2dcIixcbiAgICBcInRjcF9tc2dfd2FpdF9kYXRhXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGltZW91dCBoYW5kbGluZyBpbiBCUEYgc29ja21hcCdzIHJlY3Ztc2cgaW1wbGVtZW50YXRpb25zICh0Y3BfYnBmX3JlY3Ztc2cgYW5kIHRjcF9icGZfcmVjdm1zZ19wYXJzZXIpLiBJdCBjb3JyZWN0bHkgdXBkYXRlcyB0aGUgcmVtYWluaW5nIHRpbWVvdXQgdmFsdWUgaW4gdGNwX21zZ193YWl0X2RhdGEgYW5kIHJldHJpZXMgcmVhZGluZyBpZiB0aGUgdGltZW91dCBoYXNuJ3QgZXhwaXJlZC4gVGhpcyBpcyBmdW5jdGlvbmFsIGNvcmUgbmV0d29ya2luZyBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDA0OjE0OjE4LjcwOTk3NDQ4N1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzI3MDk2ODcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMDNhZjQzNTViZTQyZjhlYzQ2YmJiNTM0ODc2MDNjODBiNTU4MTliOVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEp1bCAxNiAwNDoxNDoxNyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfYnBmLmMgYi9uZXQvaXB2NC90Y3BfYnBmLmNcXG5pbmRleCBjYzBiZDczZjM2YjZkNi4uYWE1YzVkNzQxNTk5YTMgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjQvdGNwX2JwZi5jXFxuKysrIGIvbmV0L2lwdjQvdGNwX2JwZi5jXFxuQEAgLTE3OSw3ICsxNzksNyBAQCBFWFBPUlRfU1lNQk9MX0dQTCh0Y3BfYnBmX3NlbmRtc2dfcmVkaXIpO1xcbiBcXG4gI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxcbiBzdGF0aWMgaW50IHRjcF9tc2dfd2FpdF9kYXRhKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jayxcXG4tXFx0XFx0XFx0ICAgICBsb25nIHRpbWVvKVxcbitcXHRcXHRcXHQgICAgIGxvbmcgKnRpbWVvKVxcbiB7XFxuIFxcdERFRklORV9XQUlUX0ZVTkMod2FpdCwgd29rZW5fd2FrZV9mdW5jdGlvbik7XFxuIFxcdGludCByZXQgPSAwO1xcbkBAIC0xODcsMTIgKzE4NywxMiBAQCBzdGF0aWMgaW50IHRjcF9tc2dfd2FpdF9kYXRhKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jayxcXG4gXFx0aWYgKHNrLVxcdTAwM2Vza19zaHV0ZG93biBcXHUwMDI2IFJDVl9TSFVURE9XTilcXG4gXFx0XFx0cmV0dXJuIDE7XFxuIFxcbi1cXHRpZiAoIXRpbWVvKVxcbitcXHRpZiAoISp0aW1lbylcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuIFxcdGFkZF93YWl0X3F1ZXVlKHNrX3NsZWVwKHNrKSwgXFx1MDAyNndhaXQpO1xcbiBcXHRza19zZXRfYml0KFNPQ0tXUV9BU1lOQ19XQUlUREFUQSwgc2spO1xcbi1cXHRyZXQgPSBza193YWl0X2V2ZW50KHNrLCBcXHUwMDI2dGltZW8sXFxuK1xcdHJldCA9IHNrX3dhaXRfZXZlbnQoc2ssIHRpbWVvLFxcbiBcXHRcXHRcXHQgICAgIWxpc3RfZW1wdHkoXFx1MDAyNnBzb2NrLVxcdTAwM2VpbmdyZXNzX21zZykgfHxcXG4gXFx0XFx0XFx0ICAgICFza2JfcXVldWVfZW1wdHlfbG9ja2xlc3MoXFx1MDAyNnNrLVxcdTAwM2Vza19yZWNlaXZlX3F1ZXVlKSwgXFx1MDAyNndhaXQpO1xcbiBcXHRza19jbGVhcl9iaXQoU09DS1dRX0FTWU5DX1dBSVREQVRBLCBzayk7XFxuQEAgLTIyOSw2ICsyMjksNyBAQCBzdGF0aWMgaW50IHRjcF9icGZfcmVjdm1zZ19wYXJzZXIoc3RydWN0IHNvY2sgKnNrLFxcbiBcXHRpbnQgY29waWVkX2Zyb21fc2VsZiA9IDA7XFxuIFxcdGludCBjb3BpZWQgPSAwO1xcbiBcXHR1MzIgc2VxO1xcbitcXHRsb25nIHRpbWVvO1xcbiBcXG4gXFx0aWYgKHVubGlrZWx5KGZsYWdzIFxcdTAwMjYgTVNHX0VSUlFVRVVFKSlcXG4gXFx0XFx0cmV0dXJuIGluZXRfcmVjdl9lcnJvcihzaywgbXNnLCBsZW4pO1xcbkBAIC0yNjIsNiArMjYzLDggQEAgc3RhdGljIGludCB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyKHN0cnVjdCBzb2NrICpzayxcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbitcXHR0aW1lbyA9IHNvY2tfcmN2dGltZW8oc2ssIGZsYWdzIFxcdTAwMjYgTVNHX0RPTlRXQUlUKTtcXG4rXFxuIG1zZ19ieXRlc19yZWFkeTpcXG4gXFx0Y29waWVkID0gX19za19tc2dfcmVjdm1zZyhzaywgcHNvY2ssIG1zZywgbGVuLCBmbGFncywgXFx1MDAyNmNvcGllZF9mcm9tX3NlbGYpO1xcbiBcXHQvKiBUaGUgdHlwaWNhbCBjYXNlIGZvciBFRkFVTFQgaXMgdGhlIHNvY2tldCB3YXMgZ3JhY2VmdWxseVxcbkBAIC0yODAsNyArMjgzLDYgQEAgc3RhdGljIGludCB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyKHN0cnVjdCBzb2NrICpzayxcXG4gXFx0fVxcbiBcXHRzZXEgKz0gY29waWVkX2Zyb21fc2VsZjtcXG4gXFx0aWYgKCFjb3BpZWQpIHtcXG4tXFx0XFx0bG9uZyB0aW1lbztcXG4gXFx0XFx0aW50IGRhdGE7XFxuIFxcbiBcXHRcXHRpZiAoc29ja19mbGFnKHNrLCBTT0NLX0RPTkUpKVxcbkBAIC0yOTksNyArMzAxLDYgQEAgc3RhdGljIGludCB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyKHN0cnVjdCBzb2NrICpzayxcXG4gXFx0XFx0XFx0Z290byBvdXQ7XFxuIFxcdFxcdH1cXG4gXFxuLVxcdFxcdHRpbWVvID0gc29ja19yY3Z0aW1lbyhzaywgZmxhZ3MgXFx1MDAyNiBNU0dfRE9OVFdBSVQpO1xcbiBcXHRcXHRpZiAoIXRpbWVvKSB7XFxuIFxcdFxcdFxcdGNvcGllZCA9IC1FQUdBSU47XFxuIFxcdFxcdFxcdGdvdG8gb3V0O1xcbkBAIC0zMTAsMTMgKzMxMSwxNSBAQCBzdGF0aWMgaW50IHRjcF9icGZfcmVjdm1zZ19wYXJzZXIoc3RydWN0IHNvY2sgKnNrLFxcbiBcXHRcXHRcXHRnb3RvIG91dDtcXG4gXFx0XFx0fVxcbiBcXG4tXFx0XFx0ZGF0YSA9IHRjcF9tc2dfd2FpdF9kYXRhKHNrLCBwc29jaywgdGltZW8pO1xcbitcXHRcXHRkYXRhID0gdGNwX21zZ193YWl0X2RhdGEoc2ssIHBzb2NrLCBcXHUwMDI2dGltZW8pO1xcbiBcXHRcXHRpZiAoZGF0YSBcXHUwMDNjIDApIHtcXG4gXFx0XFx0XFx0Y29waWVkID0gZGF0YTtcXG4gXFx0XFx0XFx0Z290byB1bmxvY2s7XFxuIFxcdFxcdH1cXG4gXFx0XFx0aWYgKGRhdGEgXFx1MDAyNlxcdTAwMjYgIXNrX3Bzb2NrX3F1ZXVlX2VtcHR5KHBzb2NrKSlcXG4gXFx0XFx0XFx0Z290byBtc2dfYnl0ZXNfcmVhZHk7XFxuK1xcdFxcdGlmICghZGF0YSBcXHUwMDI2XFx1MDAyNiB0aW1lbyBcXHUwMDNlIDApXFxuK1xcdFxcdFxcdGdvdG8gbXNnX2J5dGVzX3JlYWR5O1xcbiBcXHRcXHRjb3BpZWQgPSAtRUFHQUlOO1xcbiBcXHR9XFxuIG91dDpcXG5AQCAtMzU1LDYgKzM1OCw3IEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLFxcbiB7XFxuIFxcdHN0cnVjdCBza19wc29jayAqcHNvY2s7XFxuIFxcdGludCBjb3BpZWQsIHJldDtcXG4rXFx0bG9uZyB0aW1lbztcXG4gXFxuIFxcdGlmICh1bmxpa2VseShmbGFncyBcXHUwMDI2IE1TR19FUlJRVUVVRSkpXFxuIFxcdFxcdHJldHVybiBpbmV0X3JlY3ZfZXJyb3Ioc2ssIG1zZywgbGVuKTtcXG5AQCAtMzcxLDE0ICszNzUsNTkgQEAgc3RhdGljIGludCB0Y3BfYnBmX3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXFxuIFxcdFxcdHJldHVybiB0Y3BfcmVjdm1zZyhzaywgbXNnLCBsZW4sIGZsYWdzKTtcXG4gXFx0fVxcbiBcXHRsb2NrX3NvY2soc2spO1xcbitcXG4rXFx0dGltZW8gPSBzb2NrX3JjdnRpbWVvKHNrLCBmbGFncyBcXHUwMDI2IE1TR19ET05UV0FJVCk7XFxuK1xcbiBtc2dfYnl0ZXNfcmVhZHk6XFxuIFxcdGNvcGllZCA9IHNrX21zZ19yZWN2bXNnKHNrLCBwc29jaywgbXNnLCBsZW4sIGZsYWdzKTtcXG4gXFx0aWYgKCFjb3BpZWQpIHtcXG4tXFx0XFx0bG9uZyB0aW1lbztcXG4gXFx0XFx0aW50IGRhdGE7XFxuIFxcbi1cXHRcXHR0aW1lbyA9IHNvY2tfcmN2dGltZW8oc2ssIGZsYWdzIFxcdTAwMjYgTVNHX0RPTlRXQUlUKTtcXG4tXFx0XFx0ZGF0YSA9IHRjcF9tc2dfd2FpdF9kYXRhKHNrLCBwc29jaywgdGltZW8pO1xcbitcXHRcXHRpZiAoc29ja19mbGFnKHNrLCBTT0NLX0RPTkUpKSB7XFxuK1xcdFxcdFxcdHJldCA9IDA7XFxuK1xcdFxcdFxcdGdvdG8gdW5sb2NrO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRpZiAoc2stXFx1MDAzZXNrX2Vycikge1xcbitcXHRcXHRcXHRpZiAoIXNrX3Bzb2NrX3F1ZXVlX2VtcHR5KHBzb2NrKSlcXG4rXFx0XFx0XFx0XFx0Z290byBtc2dfYnl0ZXNfcmVhZHk7XFxuK1xcdFxcdFxcdGlmICghc2tiX3F1ZXVlX2VtcHR5KFxcdTAwMjZzay1cXHUwMDNlc2tfcmVjZWl2ZV9xdWV1ZSkpIHtcXG4rXFx0XFx0XFx0XFx0cmVsZWFzZV9zb2NrKHNrKTtcXG4rXFx0XFx0XFx0XFx0c2tfcHNvY2tfcHV0KHNrLCBwc29jayk7XFxuK1xcdFxcdFxcdFxcdHJldHVybiB0Y3BfcmVjdm1zZyhzaywgbXNnLCBsZW4sIGZsYWdzKTtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHRcXHRyZXQgPSBzb2NrX2Vycm9yKHNrKTtcXG4rXFx0XFx0XFx0Z290byB1bmxvY2s7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGlmIChzay1cXHUwMDNlc2tfc2h1dGRvd24gXFx1MDAyNiBSQ1ZfU0hVVERPV04pIHtcXG4rXFx0XFx0XFx0aWYgKCFza19wc29ja19xdWV1ZV9lbXB0eShwc29jaykpXFxuK1xcdFxcdFxcdFxcdGdvdG8gbXNnX2J5dGVzX3JlYWR5O1xcbitcXHRcXHRcXHRpZiAoIXNrYl9xdWV1ZV9lbXB0eShcXHUwMDI2c2stXFx1MDAzZXNrX3JlY2VpdmVfcXVldWUpKSB7XFxuK1xcdFxcdFxcdFxcdHJlbGVhc2Vfc29jayhzayk7XFxuK1xcdFxcdFxcdFxcdHNrX3Bzb2NrX3B1dChzaywgcHNvY2spO1xcbitcXHRcXHRcXHRcXHRyZXR1cm4gdGNwX3JlY3Ztc2coc2ssIG1zZywgbGVuLCBmbGFncyk7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0XFx0cmV0ID0gMDtcXG4rXFx0XFx0XFx0Z290byB1bmxvY2s7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGlmIChzay1cXHUwMDNlc2tfc3RhdGUgPT0gVENQX0NMT1NFKSB7XFxuK1xcdFxcdFxcdHJldCA9IC1FTk9UQ09OTjtcXG4rXFx0XFx0XFx0Z290byB1bmxvY2s7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGlmICghdGltZW8pIHtcXG4rXFx0XFx0XFx0cmV0ID0gLUVBR0FJTjtcXG4rXFx0XFx0XFx0Z290byB1bmxvY2s7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkge1xcbitcXHRcXHRcXHRyZXQgPSBzb2NrX2ludHJfZXJybm8odGltZW8pO1xcbitcXHRcXHRcXHRnb3RvIHVubG9jaztcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0ZGF0YSA9IHRjcF9tc2dfd2FpdF9kYXRhKHNrLCBwc29jaywgXFx1MDAyNnRpbWVvKTtcXG4gXFx0XFx0aWYgKGRhdGEgXFx1MDAzYyAwKSB7XFxuIFxcdFxcdFxcdHJldCA9IGRhdGE7XFxuIFxcdFxcdFxcdGdvdG8gdW5sb2NrO1xcbkBAIC0zOTAsNiArNDM5LDggQEAgc3RhdGljIGludCB0Y3BfYnBmX3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXFxuIFxcdFxcdFxcdHNrX3Bzb2NrX3B1dChzaywgcHNvY2spO1xcbiBcXHRcXHRcXHRyZXR1cm4gdGNwX3JlY3Ztc2coc2ssIG1zZywgbGVuLCBmbGFncyk7XFxuIFxcdFxcdH1cXG4rXFx0XFx0aWYgKCFkYXRhIFxcdTAwMjZcXHUwMDI2IHRpbWVvIFxcdTAwM2UgMClcXG4rXFx0XFx0XFx0Z290byBtc2dfYnl0ZXNfcmVhZHk7XFxuIFxcdFxcdGNvcGllZCA9IC1FQUdBSU47XFxuIFxcdH1cXG4gXFx0cmV0ID0gY29waWVkO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvLmdpdGlnbm9yZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC8uZ2l0aWdub3JlXFxuaW5kZXggYzlmNDYwMzFhYzczYjIuLmExODQwYTVkNDVmNjdjIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC8uZ2l0aWdub3JlXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0Ly5naXRpZ25vcmVcXG5AQCAtMzksNiArMzksOCBAQCBza19jb25uZWN0X3plcm9fYWRkclxcbiBza19zb19wZWVrX29mZlxcbiBza2ZfbmV0X29mZlxcbiBzb2NrZXRcXG4rc29ja21hcF9yZWN2ZnJvbVxcbitzb2NrbWFwX3JlY3Zmcm9tLmJwZi5vXFxuIHNvX2luY29taW5nX2NwdVxcbiBzb19uZXRuc19jb29raWVcXG4gc29fcmN2X2xpc3RlbmVyXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9NYWtlZmlsZVxcbmluZGV4IDcwOGQ5NjBhZTA3ZDViLi5kZDA0YjgwNzI1YzY3OSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvTWFrZWZpbGVcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvTWFrZWZpbGVcXG5AQCAtMTkxLDYgKzE5MSw3IEBAIFRFU1RfR0VOX1BST0dTIDo9IFxcXFxcXG4gXFx0c2tfY29ubmVjdF96ZXJvX2FkZHIgXFxcXFxcbiBcXHRza19zb19wZWVrX29mZiBcXFxcXFxuIFxcdHNvX2luY29taW5nX2NwdSBcXFxcXFxuK1xcdHNvY2ttYXBfcmVjdmZyb20gXFxcXFxcbiBcXHR0YXAgXFxcXFxcbiBcXHR0Y3BfcG9ydF9zaGFyZSBcXFxcXFxuIFxcdHRscyBcXFxcXFxuQEAgLTIzOCwzICsyMzksNyBAQCAkKE9VVFBVVCkvYmluZF9iaGFzaDogTERMSUJTICs9IC1scHRocmVhZFxcbiAkKE9VVFBVVCkvaW9fdXJpbmdfemVyb2NvcHlfdHg6IENGTEFHUyArPSAtSS4uLy4uLy4uL2luY2x1ZGUvXFxuIFxcbiBpbmNsdWRlIGJwZi5ta1xcbitcXG4rJChPVVRQVVQpL3NvY2ttYXBfcmVjdmZyb206ICQoQlBGT0JKKVxcbiskKE9VVFBVVCkvc29ja21hcF9yZWN2ZnJvbTogTERMSUJTICs9ICQoQlBGT0JKKSAtbGVsZiAtbHogLWxwdGhyZWFkXFxuKyQoT1VUUFVUKS9zb2NrbWFwX3JlY3Zmcm9tOiBDRkxBR1MgKz0gLUkkKE9VVFBVVCkvdG9vbHMvaW5jbHVkZVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvc29ja21hcF9yZWN2ZnJvbS5icGYuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9zb2NrbWFwX3JlY3Zmcm9tLmJwZi5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uZmVjNDcwYzczOGYxZThcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3NvY2ttYXBfcmVjdmZyb20uYnBmLmNcXG5AQCAtMCwwICsxLDMxIEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9icGYuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2JwZi9icGZfaGVscGVycy5oXFx1MDAzZVxcbitcXG4rI2RlZmluZSBBRl9JTkVUIDJcXG4rXFxuK2NoYXIgTElDRU5TRVtdIFNFQyhcXFwibGljZW5zZVxcXCIpID0gXFxcIkdQTFxcXCI7XFxuK1xcbitzdHJ1Y3Qge1xcbitcXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX1NPQ0tIQVNIKTtcXG4rXFx0X191aW50KG1heF9lbnRyaWVzLCAxMDI0KTtcXG4rXFx0X190eXBlKGtleSwgX191NjQpO1xcbitcXHRfX3R5cGUodmFsdWUsIF9fdTY0KTtcXG4rXFxuK30gbWFwX3NvY2tzIFNFQyhcXFwiLm1hcHNcXFwiKTtcXG4rXFxuK1NFQyhcXFwic29ja29wc1xcXCIpIGludCBvbl9zb2Nrb3BzKHN0cnVjdCBicGZfc29ja19vcHMgKmN0eClcXG4re1xcbitcXHRpZiAoY3R4LVxcdTAwM2VmYW1pbHkgPT0gQUZfSU5FVCBcXHUwMDI2XFx1MDAyNiBjdHgtXFx1MDAzZW9wID09IEJQRl9TT0NLX09QU19BQ1RJVkVfRVNUQUJMSVNIRURfQ0IpIHtcXG4rXFx0XFx0X191NjQgY29va2llID0gYnBmX2dldF9zb2NrZXRfY29va2llKGN0eCk7XFxuK1xcbitcXHRcXHRicGZfc29ja19oYXNoX3VwZGF0ZShjdHgsIFxcdTAwMjZtYXBfc29ja3MsIFxcdTAwMjZjb29raWUsIEJQRl9OT0VYSVNUKTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK1NFQyhcXFwic2tfc2tiL3N0cmVhbV92ZXJkaWN0XFxcIikgaW50IG9uX3JlY3Yoc3RydWN0IF9fc2tfYnVmZiAqY3R4KVxcbit7XFxuK1xcdHJldHVybiBTS19QQVNTO1xcbit9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9zb2NrbWFwX3JlY3Zmcm9tLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvc29ja21hcF9yZWN2ZnJvbS5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMjU2NTdmYzNkYmNkMjJcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3NvY2ttYXBfcmVjdmZyb20uY1xcbkBAIC0wLDAgKzEsMjk5IEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKyNpbmNsdWRlIFxcdTAwM2NhcnBhL2luZXQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2JwZi9saWJicGYuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2ZjbnRsLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NwdGhyZWFkLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzdGRhdG9taWMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N5cy9zb2NrZXQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N5cy90aW1lLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2N1bmlzdGQuaFxcdTAwM2VcXG4rXFxuKyNpbmNsdWRlIFxcXCJrc2VsZnRlc3RfaGFybmVzcy5oXFxcIlxcbitcXG4rI2RlZmluZSBNQVhfSVRFUkFUSU9OUyAxMDBcXG4rI2RlZmluZSBQQVlMT0FEX0VORCAnZSdcXG4rXFxuK3N0YXRpYyBpbnQgc3RhcnRfbGlzdGVuaW5nKHN0cnVjdCBfX3Rlc3RfbWV0YWRhdGEgKl9tZXRhZGF0YSwgdWludDE2X3QgKnBvcnQpXFxuK3tcXG4rXFx0c3RydWN0IHNvY2thZGRyX2luIGFkZHI7XFxuK1xcdHNvY2tsZW5fdCBhZGRybGVuO1xcbitcXHRpbnQgZmQ7XFxuK1xcbitcXHRtZW1zZXQoXFx1MDAyNmFkZHIsIDAsIHNpemVvZihhZGRyKSk7XFxuK1xcdGFkZHIuc2luX2ZhbWlseSA9IEFGX0lORVQ7XFxuK1xcdGFkZHIuc2luX2FkZHIuc19hZGRyID0gSU5BRERSX0FOWTtcXG4rXFxuK1xcdGZkID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfU1RSRUFNLCBJUFBST1RPX1RDUCk7XFxuK1xcbitcXHRBU1NFUlRfTkUoZmQsIC0xKTtcXG4rXFx0QVNTRVJUX0VRKGJpbmQoZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKilcXHUwMDI2YWRkciwgc2l6ZW9mKGFkZHIpKSwgMCk7XFxuK1xcdEFTU0VSVF9FUShsaXN0ZW4oZmQsIDUpLCAwKTtcXG4rXFxuK1xcdGFkZHJsZW4gPSBzaXplb2YoYWRkcik7XFxuK1xcbitcXHRBU1NFUlRfRVEoZ2V0c29ja25hbWUoZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKilcXHUwMDI2YWRkciwgXFx1MDAyNmFkZHJsZW4pLCAwKTtcXG4rXFxuK1xcdCpwb3J0ID0gYWRkci5zaW5fcG9ydDtcXG4rXFxuK1xcdHJldHVybiBmZDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcHJvY2Vzc19jbGllbnQoaW50IGZkLCBhdG9taWNfaW50ICpydW5uaW5nLCBib29sICpmYWlsZWQpXFxuK3tcXG4rXFx0Y2hhciBidWZbMTAyNF07XFxuK1xcdHN0cnVjdCB0aW1ldmFsIHRpbWVvO1xcbitcXG4rXFx0dGltZW8udHZfc2VjID0gMDtcXG4rXFx0dGltZW8udHZfdXNlYyA9IDEwMDA7XFxuK1xcbitcXHRpZiAoc2V0c29ja29wdChmZCwgU09MX1NPQ0tFVCwgU09fUkNWVElNRU8sIFxcdTAwMjZ0aW1lbywgc2l6ZW9mKHRpbWVvKSkpXFxuK1xcdFxcdCpmYWlsZWQgPSB0cnVlO1xcbitcXG4rXFx0d2hpbGUgKGF0b21pY19sb2FkKHJ1bm5pbmcpKSB7XFxuK1xcdFxcdHNzaXplX3QgbGVuID0gcmVjdmZyb20oZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZiksIDAsIE5VTEwsIE5VTEwpO1xcbitcXG4rXFx0XFx0aWYgKGxlbiA9PSAtMSkge1xcbitcXHRcXHRcXHRpZiAoZXJybm8gIT0gRUFHQUlOIFxcdTAwMjZcXHUwMDI2IGVycm5vICE9IEVJTlRSKVxcbitcXHRcXHRcXHRcXHQqZmFpbGVkID0gdHJ1ZTtcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGlmIChsZW4gXFx1MDAzYz0gMCB8fCBidWZbbGVuIC0gMV0gPT0gUEFZTE9BRF9FTkQpXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHR9XFxuK1xcbitcXHRzZW5kKGZkLCBcXFwidGVzdFxcXCIsIDQsIE1TR19OT1NJR05BTCk7XFxuK1xcbitcXHRjbG9zZShmZCk7XFxuK31cXG4rXFxuK3N0cnVjdCBicGZfdCB7XFxuK1xcdHN0cnVjdCBicGZfb2JqZWN0ICpvYmo7XFxuK1xcdHN0cnVjdCBicGZfbGluayAqb25fc29ja29wcztcXG4rXFx0c3RydWN0IGJwZl9saW5rICpvbl9yZWN2O1xcbit9O1xcbitcXG4rc3RhdGljIHZvaWQgc2V0dXBfYnBmKHN0cnVjdCBfX3Rlc3RfbWV0YWRhdGEgKl9tZXRhZGF0YSwgY29uc3QgY2hhciAqcGF0aCwgYm9vbCByZWN2LFxcbitcXHRcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgYnBmX3QgKmJwZilcXG4re1xcbitcXHRzdHJ1Y3QgYnBmX3Byb2dyYW0gKnByb2c7XFxuK1xcdGludCBjZ3JvdXA7XFxuK1xcbitcXHRtZW1zZXQoYnBmLCAwLCBzaXplb2YoKmJwZikpO1xcbitcXHRicGYtXFx1MDAzZW9iaiA9IGJwZl9vYmplY3RfX29wZW5fZmlsZShwYXRoLCBOVUxMKTtcXG4rXFxuK1xcdEFTU0VSVF9ORShicGYtXFx1MDAzZW9iaiwgTlVMTCk7XFxuK1xcdEFTU0VSVF9FUShicGZfb2JqZWN0X19sb2FkKGJwZi1cXHUwMDNlb2JqKSwgMCk7XFxuK1xcbitcXHRwcm9nID0gYnBmX29iamVjdF9fZmluZF9wcm9ncmFtX2J5X25hbWUoYnBmLVxcdTAwM2VvYmosIFxcXCJvbl9zb2Nrb3BzXFxcIik7XFxuK1xcdEFTU0VSVF9ORShwcm9nLCBOVUxMKTtcXG4rXFxuK1xcdGNncm91cCA9IG9wZW4oXFxcIi9zeXMvZnMvY2dyb3VwXFxcIiwgT19SRE9OTFkpO1xcbitcXHRBU1NFUlRfTkUoY2dyb3VwLCAtMSk7XFxuK1xcbitcXHRicGYtXFx1MDAzZW9uX3NvY2tvcHMgPSBicGZfcHJvZ3JhbV9fYXR0YWNoX2Nncm91cChwcm9nLCBjZ3JvdXApO1xcbitcXHRjbG9zZShjZ3JvdXApO1xcbitcXG4rXFx0QVNTRVJUX05FKGJwZi1cXHUwMDNlb25fc29ja29wcywgTlVMTCk7XFxuK1xcbitcXHRpZiAocmVjdikge1xcbitcXHRcXHRzdHJ1Y3QgYnBmX21hcCAqbWFwID0gYnBmX29iamVjdF9fZmluZF9tYXBfYnlfbmFtZShicGYtXFx1MDAzZW9iaiwgXFxcIm1hcF9zb2Nrc1xcXCIpO1xcbitcXG4rXFx0XFx0QVNTRVJUX05FKG1hcCwgTlVMTCk7XFxuK1xcbitcXHRcXHRwcm9nID0gYnBmX29iamVjdF9fZmluZF9wcm9ncmFtX2J5X25hbWUoYnBmLVxcdTAwM2VvYmosIFxcXCJvbl9yZWN2XFxcIik7XFxuK1xcdFxcdEFTU0VSVF9ORShwcm9nLCBOVUxMKTtcXG4rXFxuK1xcdFxcdGJwZi1cXHUwMDNlb25fcmVjdiA9IGJwZl9wcm9ncmFtX19hdHRhY2hfc29ja21hcChwcm9nLCBicGZfbWFwX19mZChtYXApKTtcXG4rXFx0XFx0QVNTRVJUX05FKGJwZi1cXHUwMDNlb25fcmVjdiwgTlVMTCk7XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RydWN0IHNlcnZlcl90IHtcXG4rXFx0aW50IGZkO1xcbitcXHRhdG9taWNfaW50IHJ1bm5pbmc7XFxuK1xcdHB0aHJlYWRfdCB0aHJlYWQ7XFxuK1xcdGJvb2wgdGhyZWFkX2NyZWF0ZWQ7XFxuK307XFxuK1xcbitzdGF0aWMgdm9pZCAqcnVuX3NlcnZlcih2b2lkICphcmcpXFxuK3tcXG4rXFx0c3RydWN0IHNlcnZlcl90ICpzZXJ2ZXIgPSBhcmc7XFxuK1xcdGJvb2wgZmFpbGVkID0gZmFsc2U7XFxuK1xcbitcXHR3aGlsZSAoYXRvbWljX2xvYWQoXFx1MDAyNnNlcnZlci1cXHUwMDNlcnVubmluZykpIHtcXG4rXFx0XFx0aW50IGNsaWVudF9mZCA9IGFjY2VwdChzZXJ2ZXItXFx1MDAzZWZkLCBOVUxMLCBOVUxMKTtcXG4rXFxuK1xcdFxcdGlmIChjbGllbnRfZmQgPT0gLTEpIHtcXG4rXFx0XFx0XFx0aWYgKCFhdG9taWNfbG9hZChcXHUwMDI2c2VydmVyLVxcdTAwM2VydW5uaW5nKSlcXG4rXFx0XFx0XFx0XFx0YnJlYWs7XFxuK1xcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0cHJvY2Vzc19jbGllbnQoY2xpZW50X2ZkLCBcXHUwMDI2c2VydmVyLVxcdTAwM2VydW5uaW5nLCBcXHUwMDI2ZmFpbGVkKTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKGZhaWxlZClcXG4rXFx0XFx0cmV0dXJuICh2b2lkICopMTtcXG4rXFxuK1xcdHJldHVybiBOVUxMO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHNlbmRfcGF5bG9hZChzdHJ1Y3QgX190ZXN0X21ldGFkYXRhICpfbWV0YWRhdGEsIGludCBmZCwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxcbit7XFxuK1xcdHNpemVfdCByZW1haW5pbmcgPSBsZW47XFxuK1xcbitcXHRkbyB7XFxuK1xcdFxcdHNzaXplX3QgYnl0ZXMgPSB3cml0ZShmZCwgYnVmICsgKGxlbiAtIHJlbWFpbmluZyksIHJlbWFpbmluZyk7XFxuK1xcbitcXHRcXHRpZiAoYnl0ZXMgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdFxcdGlmIChlcnJubyA9PSBFSU5UUilcXG4rXFx0XFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRcXHRyZXR1cm4gLTE7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdHJlbWFpbmluZyAtPSBieXRlcztcXG4rXFx0fSB3aGlsZSAocmVtYWluaW5nKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitGSVhUVVJFKHNvY2ttYXBfcmVjdmZyb20pXFxuK3tcXG4rXFx0c3RydWN0IHNlcnZlcl90IHNlcnZlcjtcXG4rXFx0c3RydWN0IHNvY2thZGRyX2luIGFkZHI7XFxuK1xcdHN0cnVjdCBicGZfdCBicGY7XFxuK1xcdGNoYXIgKnBheWxvYWQ7XFxuK1xcdHNpemVfdCBwYXlsb2FkX2xlbjtcXG4rfTtcXG4rXFxuK0ZJWFRVUkVfVkFSSUFOVChzb2NrbWFwX3JlY3Zmcm9tKVxcbit7XFxuK1xcdGJvb2wgd2l0aF9yZWN2O1xcbit9O1xcbitcXG4rRklYVFVSRV9WQVJJQU5UX0FERChzb2NrbWFwX3JlY3Zmcm9tLCByZWN2bXNnKVxcbit7XFxuK1xcdC53aXRoX3JlY3YgPSBmYWxzZVxcbit9O1xcbitcXG4rRklYVFVSRV9WQVJJQU5UX0FERChzb2NrbWFwX3JlY3Zmcm9tLCByZWN2bXNnX3BhcnNlcilcXG4re1xcbitcXHQud2l0aF9yZWN2ID0gdHJ1ZVxcbit9O1xcbitcXG4rRklYVFVSRV9TRVRVUChzb2NrbWFwX3JlY3Zmcm9tKVxcbit7XFxuK1xcdG1lbXNldChcXHUwMDI2c2VsZi1cXHUwMDNlc2VydmVyLCAwLCBzaXplb2Yoc2VsZi1cXHUwMDNlc2VydmVyKSk7XFxuK1xcdHNlbGYtXFx1MDAzZXNlcnZlci5mZCA9IC0xO1xcbitcXG4rXFx0bWVtc2V0KFxcdTAwMjZzZWxmLVxcdTAwM2VhZGRyLCAwLCBzaXplb2Yoc2VsZi1cXHUwMDNlYWRkcikpO1xcbitcXG4rXFx0c2VsZi1cXHUwMDNlcGF5bG9hZF9sZW4gPSAxMDI0ICogMTAyNCAqIDI1O1xcbitcXHRzZWxmLVxcdTAwM2VwYXlsb2FkID0gbWFsbG9jKHNlbGYtXFx1MDAzZXBheWxvYWRfbGVuKTtcXG4rXFx0QVNTRVJUX05FKHNlbGYtXFx1MDAzZXBheWxvYWQsIE5VTEwpO1xcbitcXG4rXFx0bWVtc2V0KHNlbGYtXFx1MDAzZXBheWxvYWQsIDAsIHNlbGYtXFx1MDAzZXBheWxvYWRfbGVuKTtcXG4rXFx0c2VsZi1cXHUwMDNlcGF5bG9hZFtzZWxmLVxcdTAwM2VwYXlsb2FkX2xlbiAtIDFdID0gUEFZTE9BRF9FTkQ7XFxuK1xcbitcXHRzZXR1cF9icGYoX21ldGFkYXRhLCBcXFwic29ja21hcF9yZWN2ZnJvbS5icGYub1xcXCIsIHZhcmlhbnQtXFx1MDAzZXdpdGhfcmVjdiwgXFx1MDAyNnNlbGYtXFx1MDAzZWJwZik7XFxuK1xcdGF0b21pY19zdG9yZShcXHUwMDI2c2VsZi1cXHUwMDNlc2VydmVyLnJ1bm5pbmcsIDEpO1xcbitcXHRzZWxmLVxcdTAwM2VzZXJ2ZXIuZmQgPSBzdGFydF9saXN0ZW5pbmcoX21ldGFkYXRhLCBcXHUwMDI2c2VsZi1cXHUwMDNlYWRkci5zaW5fcG9ydCk7XFxuK1xcbitcXHRzZWxmLVxcdTAwM2VhZGRyLnNpbl9mYW1pbHkgPSBBRl9JTkVUO1xcbitcXHRzZWxmLVxcdTAwM2VhZGRyLnNpbl9hZGRyLnNfYWRkciA9IGh0b25sKElOQUREUl9MT09QQkFDSyk7XFxuK1xcbitcXHRBU1NFUlRfRVEocHRocmVhZF9jcmVhdGUoXFx1MDAyNnNlbGYtXFx1MDAzZXNlcnZlci50aHJlYWQsIE5VTEwsIFxcdTAwMjZydW5fc2VydmVyLCBcXHUwMDI2c2VsZi1cXHUwMDNlc2VydmVyKSwgMCk7XFxuK1xcdHNlbGYtXFx1MDAzZXNlcnZlci50aHJlYWRfY3JlYXRlZCA9IHRydWU7XFxuK31cXG4rXFxuK0ZJWFRVUkVfVEVBUkRPV04oc29ja21hcF9yZWN2ZnJvbSlcXG4re1xcbitcXHRhdG9taWNfc3RvcmUoXFx1MDAyNnNlbGYtXFx1MDAzZXNlcnZlci5ydW5uaW5nLCAwKTtcXG4rXFxuK1xcdGlmIChzZWxmLVxcdTAwM2VzZXJ2ZXIuZmQgIT0gLTEpXFxuK1xcdFxcdHNodXRkb3duKHNlbGYtXFx1MDAzZXNlcnZlci5mZCwgU0hVVF9SRCk7XFxuK1xcbitcXHRpZiAoc2VsZi1cXHUwMDNlc2VydmVyLnRocmVhZF9jcmVhdGVkKSB7XFxuK1xcdFxcdHZvaWQgKnJldHZhbCA9IE5VTEw7XFxuK1xcbitcXHRcXHRwdGhyZWFkX2pvaW4oc2VsZi1cXHUwMDNlc2VydmVyLnRocmVhZCwgXFx1MDAyNnJldHZhbCk7XFxuK1xcdFxcdEVYUEVDVF9FUShyZXR2YWwsIE5VTEwpO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoc2VsZi1cXHUwMDNlc2VydmVyLmZkICE9IC0xKVxcbitcXHRcXHRjbG9zZShzZWxmLVxcdTAwM2VzZXJ2ZXIuZmQpO1xcbitcXG4rXFx0ZnJlZShzZWxmLVxcdTAwM2VwYXlsb2FkKTtcXG4rXFx0YnBmX2xpbmtfX2Rlc3Ryb3koc2VsZi1cXHUwMDNlYnBmLm9uX3NvY2tvcHMpO1xcbitcXG4rXFx0aWYgKHNlbGYtXFx1MDAzZWJwZi5vbl9yZWN2KVxcbitcXHRcXHRicGZfbGlua19fZGVzdHJveShzZWxmLVxcdTAwM2VicGYub25fcmVjdik7XFxuK1xcbitcXHRicGZfb2JqZWN0X19jbG9zZShzZWxmLVxcdTAwM2VicGYub2JqKTtcXG4rfVxcbitcXG4rVEVTVF9GKHNvY2ttYXBfcmVjdmZyb20sIG5vX3RpbWVvdXQpXFxuK3tcXG4rXFx0Y2hhciBpZ25vcmVkWzEyOF07XFxuK1xcbitcXHRmb3IgKGludCBpID0gMDsgaSBcXHUwMDNjIE1BWF9JVEVSQVRJT05TOyArK2kpIHtcXG4rXFx0XFx0aW50IGZkID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfU1RSRUFNLCBJUFBST1RPX1RDUCk7XFxuK1xcbitcXHRcXHRBU1NFUlRfTkUoZmQsIC0xKTtcXG4rXFx0XFx0QVNTRVJUX0VRKGNvbm5lY3QoZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKilcXHUwMDI2c2VsZi1cXHUwMDNlYWRkciwgc2l6ZW9mKHNlbGYtXFx1MDAzZWFkZHIpKSwgMCk7XFxuK1xcbitcXHRcXHRBU1NFUlRfRVEoc2VuZF9wYXlsb2FkKF9tZXRhZGF0YSwgZmQsIHNlbGYtXFx1MDAzZXBheWxvYWQsIHNlbGYtXFx1MDAzZXBheWxvYWRfbGVuKSwgMCk7XFxuK1xcbitcXHRcXHRpZiAocmVjdmZyb20oZmQsIGlnbm9yZWQsIHNpemVvZihpZ25vcmVkKSwgMCwgTlVMTCwgTlVMTCkgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRBU1NFUlRfTkUoZXJybm8sIEVBR0FJTik7XFxuK1xcbitcXHRcXHRjbG9zZShmZCk7XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIGludDY0X3QgdG9fbmFub3Moc3RydWN0IHRpbWVzcGVjICp0aW1lKVxcbit7XFxuK1xcdHJldHVybiAodGltZS1cXHUwMDNldHZfc2VjICogMTAwMDAwMDAwMExMKSArIHRpbWUtXFx1MDAzZXR2X25zZWM7XFxuK31cXG4rXFxuK1RFU1RfRihzb2NrbWFwX3JlY3Zmcm9tLCB3aXRoX3RpbWVvdXQpXFxuK3tcXG4rXFx0Y2hhciBpZ25vcmVkWzEyOF07XFxuK1xcdHN0cnVjdCB0aW1ldmFsIHRpbWVvO1xcbitcXG4rXFx0dGltZW8udHZfc2VjID0gMDtcXG4rXFx0dGltZW8udHZfdXNlYyA9IDUwMDA7XFxuK1xcbitcXHQvKiByZW1vdmUgdGhlIHBheWxvYWQgZW5kIGRlbGltaXRlciBzbyB0aGUgc2VydmVyIG5ldmVyIHJlc3BvbmRzIGFuZCByZWN2ZnJvbSB0aW1lcyBvdXQuICovXFxuK1xcdHNlbGYtXFx1MDAzZXBheWxvYWRbc2VsZi1cXHUwMDNlcGF5bG9hZF9sZW4gLSAxXSA9IDA7XFxuK1xcbitcXHRmb3IgKGludCBpID0gMDsgaSBcXHUwMDNjIE1BWF9JVEVSQVRJT05TOyArK2kpIHtcXG4rXFx0XFx0c3RydWN0IHRpbWVzcGVjIGJlZztcXG4rXFx0XFx0c3RydWN0IHRpbWVzcGVjIGVuZDtcXG4rXFx0XFx0aW50IGVycjtcXG4rXFxuK1xcdFxcdGludCBmZCA9IHNvY2tldChBRl9JTkVULCBTT0NLX1NUUkVBTSwgSVBQUk9UT19UQ1ApO1xcbitcXG4rXFx0XFx0QVNTRVJUX05FKGZkLCAtMSk7XFxuK1xcdFxcdEFTU0VSVF9FUShjb25uZWN0KGZkLCAoc3RydWN0IHNvY2thZGRyICopXFx1MDAyNnNlbGYtXFx1MDAzZWFkZHIsIHNpemVvZihzZWxmLVxcdTAwM2VhZGRyKSksIDApO1xcbitcXG4rXFx0XFx0QVNTRVJUX0VRKHNlbmRfcGF5bG9hZChfbWV0YWRhdGEsIGZkLCBzZWxmLVxcdTAwM2VwYXlsb2FkLCBzZWxmLVxcdTAwM2VwYXlsb2FkX2xlbiksIDApO1xcbitcXG4rXFx0XFx0QVNTRVJUX0VRKHNldHNvY2tvcHQoZmQsIFNPTF9TT0NLRVQsIFNPX1JDVlRJTUVPLCBcXHUwMDI2dGltZW8sIHNpemVvZih0aW1lbykpLCAwKTtcXG4rXFxuK1xcdFxcdGNsb2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDLCBcXHUwMDI2YmVnKTtcXG4rXFx0XFx0QVNTRVJUX0VRKHJlY3Zmcm9tKGZkLCBpZ25vcmVkLCBzaXplb2YoaWdub3JlZCksIDAsIE5VTEwsIE5VTEwpLCAtMSk7XFxuK1xcdFxcdGVyciA9IGVycm5vO1xcbitcXHRcXHRjbG9ja19nZXR0aW1lKENMT0NLX01PTk9UT05JQywgXFx1MDAyNmVuZCk7XFxuK1xcbitcXHRcXHRBU1NFUlRfRVEoZXJyLCBFQUdBSU4pO1xcbitcXHRcXHRBU1NFUlRfR0UodG9fbmFub3MoXFx1MDAyNmVuZCkgLSB0b19uYW5vcyhcXHUwMDI2YmVnKSwgdGltZW8udHZfdXNlYyAqIDEwMDApO1xcbitcXG4rXFx0XFx0Y2xvc2UoZmQpO1xcbitcXHR9XFxuK31cXG4rXFxuK1RFU1RfSEFSTkVTU19NQUlOXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDA0OjE0OjE5LjQzOTM4ODg0OFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTkzMzYwNjAzMzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIk5FVF9TT0NLX01TR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRjcF9icGZfcmVjdm1zZ19wYXJzZXJcIixcbiAgICBcInRjcF9icGZfcmVjdm1zZ1wiLFxuICAgIFwidGNwX21zZ193YWl0X2RhdGFcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aW1lb3V0IGhhbmRsaW5nIGluIEJQRiBzb2NrbWFwJ3MgcmVjdm1zZyBpbXBsZW1lbnRhdGlvbnMgKHRjcF9icGZfcmVjdm1zZyBhbmQgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcikuIEl0IGNvcnJlY3RseSB1cGRhdGVzIHRoZSByZW1haW5pbmcgdGltZW91dCB2YWx1ZSBpbiB0Y3BfbXNnX3dhaXRfZGF0YSBhbmQgcmV0cmllcyByZWFkaW5nIGlmIHRoZSB0aW1lb3V0IGhhc24ndCBleHBpcmVkLiBUaGlzIGlzIGZ1bmN0aW9uYWwgY29yZSBuZXR3b3JraW5nIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAwM2FmNDM1NWJlNDJmOGVjNDZiYmI1MzQ4NzYwM2M4MGI1NTgxOWI5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMTYgMDQ6MTQ6MTcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfYnBmLmMgYi9uZXQvaXB2NC90Y3BfYnBmLmNcbmluZGV4IGNjMGJkNzNmMzZiNmQ2Li5hYTVjNWQ3NDE1OTlhMyAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L3RjcF9icGYuY1xuKysrIGIvbmV0L2lwdjQvdGNwX2JwZi5jXG5AQCAtMTc5LDcgKzE3OSw3IEBAIEVYUE9SVF9TWU1CT0xfR1BMKHRjcF9icGZfc2VuZG1zZ19yZWRpcik7XG4gXG4gI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxuIHN0YXRpYyBpbnQgdGNwX21zZ193YWl0X2RhdGEoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfcHNvY2sgKnBzb2NrLFxuLVx0XHRcdCAgICAgbG9uZyB0aW1lbylcbitcdFx0XHQgICAgIGxvbmcgKnRpbWVvKVxuIHtcbiBcdERFRklORV9XQUlUX0ZVTkMod2FpdCwgd29rZW5fd2FrZV9mdW5jdGlvbik7XG4gXHRpbnQgcmV0ID0gMDtcbkBAIC0xODcsMTIgKzE4NywxMiBAQCBzdGF0aWMgaW50IHRjcF9tc2dfd2FpdF9kYXRhKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jayxcbiBcdGlmIChzay1cdTAwM2Vza19zaHV0ZG93biBcdTAwMjYgUkNWX1NIVVRET1dOKVxuIFx0XHRyZXR1cm4gMTtcbiBcbi1cdGlmICghdGltZW8pXG4rXHRpZiAoISp0aW1lbylcbiBcdFx0cmV0dXJuIHJldDtcbiBcbiBcdGFkZF93YWl0X3F1ZXVlKHNrX3NsZWVwKHNrKSwgXHUwMDI2d2FpdCk7XG4gXHRza19zZXRfYml0KFNPQ0tXUV9BU1lOQ19XQUlUREFUQSwgc2spO1xuLVx0cmV0ID0gc2tfd2FpdF9ldmVudChzaywgXHUwMDI2dGltZW8sXG4rXHRyZXQgPSBza193YWl0X2V2ZW50KHNrLCB0aW1lbyxcbiBcdFx0XHQgICAgIWxpc3RfZW1wdHkoXHUwMDI2cHNvY2stXHUwMDNlaW5ncmVzc19tc2cpIHx8XG4gXHRcdFx0ICAgICFza2JfcXVldWVfZW1wdHlfbG9ja2xlc3MoXHUwMDI2c2stXHUwMDNlc2tfcmVjZWl2ZV9xdWV1ZSksIFx1MDAyNndhaXQpO1xuIFx0c2tfY2xlYXJfYml0KFNPQ0tXUV9BU1lOQ19XQUlUREFUQSwgc2spO1xuQEAgLTIyOSw2ICsyMjksNyBAQCBzdGF0aWMgaW50IHRjcF9icGZfcmVjdm1zZ19wYXJzZXIoc3RydWN0IHNvY2sgKnNrLFxuIFx0aW50IGNvcGllZF9mcm9tX3NlbGYgPSAwO1xuIFx0aW50IGNvcGllZCA9IDA7XG4gXHR1MzIgc2VxO1xuK1x0bG9uZyB0aW1lbztcbiBcbiBcdGlmICh1bmxpa2VseShmbGFncyBcdTAwMjYgTVNHX0VSUlFVRVVFKSlcbiBcdFx0cmV0dXJuIGluZXRfcmVjdl9lcnJvcihzaywgbXNnLCBsZW4pO1xuQEAgLTI2Miw2ICsyNjMsOCBAQCBzdGF0aWMgaW50IHRjcF9icGZfcmVjdm1zZ19wYXJzZXIoc3RydWN0IHNvY2sgKnNrLFxuIFx0XHR9XG4gXHR9XG4gXG4rXHR0aW1lbyA9IHNvY2tfcmN2dGltZW8oc2ssIGZsYWdzIFx1MDAyNiBNU0dfRE9OVFdBSVQpO1xuK1xuIG1zZ19ieXRlc19yZWFkeTpcbiBcdGNvcGllZCA9IF9fc2tfbXNnX3JlY3Ztc2coc2ssIHBzb2NrLCBtc2csIGxlbiwgZmxhZ3MsIFx1MDAyNmNvcGllZF9mcm9tX3NlbGYpO1xuIFx0LyogVGhlIHR5cGljYWwgY2FzZSBmb3IgRUZBVUxUIGlzIHRoZSBzb2NrZXQgd2FzIGdyYWNlZnVsbHlcbkBAIC0yODAsNyArMjgzLDYgQEAgc3RhdGljIGludCB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyKHN0cnVjdCBzb2NrICpzayxcbiBcdH1cbiBcdHNlcSArPSBjb3BpZWRfZnJvbV9zZWxmO1xuIFx0aWYgKCFjb3BpZWQpIHtcbi1cdFx0bG9uZyB0aW1lbztcbiBcdFx0aW50IGRhdGE7XG4gXG4gXHRcdGlmIChzb2NrX2ZsYWcoc2ssIFNPQ0tfRE9ORSkpXG5AQCAtMjk5LDcgKzMwMSw2IEBAIHN0YXRpYyBpbnQgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcihzdHJ1Y3Qgc29jayAqc2ssXG4gXHRcdFx0Z290byBvdXQ7XG4gXHRcdH1cbiBcbi1cdFx0dGltZW8gPSBzb2NrX3JjdnRpbWVvKHNrLCBmbGFncyBcdTAwMjYgTVNHX0RPTlRXQUlUKTtcbiBcdFx0aWYgKCF0aW1lbykge1xuIFx0XHRcdGNvcGllZCA9IC1FQUdBSU47XG4gXHRcdFx0Z290byBvdXQ7XG5AQCAtMzEwLDEzICszMTEsMTUgQEAgc3RhdGljIGludCB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyKHN0cnVjdCBzb2NrICpzayxcbiBcdFx0XHRnb3RvIG91dDtcbiBcdFx0fVxuIFxuLVx0XHRkYXRhID0gdGNwX21zZ193YWl0X2RhdGEoc2ssIHBzb2NrLCB0aW1lbyk7XG4rXHRcdGRhdGEgPSB0Y3BfbXNnX3dhaXRfZGF0YShzaywgcHNvY2ssIFx1MDAyNnRpbWVvKTtcbiBcdFx0aWYgKGRhdGEgXHUwMDNjIDApIHtcbiBcdFx0XHRjb3BpZWQgPSBkYXRhO1xuIFx0XHRcdGdvdG8gdW5sb2NrO1xuIFx0XHR9XG4gXHRcdGlmIChkYXRhIFx1MDAyNlx1MDAyNiAhc2tfcHNvY2tfcXVldWVfZW1wdHkocHNvY2spKVxuIFx0XHRcdGdvdG8gbXNnX2J5dGVzX3JlYWR5O1xuK1x0XHRpZiAoIWRhdGEgXHUwMDI2XHUwMDI2IHRpbWVvIFx1MDAzZSAwKVxuK1x0XHRcdGdvdG8gbXNnX2J5dGVzX3JlYWR5O1xuIFx0XHRjb3BpZWQgPSAtRUFHQUlOO1xuIFx0fVxuIG91dDpcbkBAIC0zNTUsNiArMzU4LDcgQEAgc3RhdGljIGludCB0Y3BfYnBmX3JlY3Ztc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sXG4ge1xuIFx0c3RydWN0IHNrX3Bzb2NrICpwc29jaztcbiBcdGludCBjb3BpZWQsIHJldDtcbitcdGxvbmcgdGltZW87XG4gXG4gXHRpZiAodW5saWtlbHkoZmxhZ3MgXHUwMDI2IE1TR19FUlJRVUVVRSkpXG4gXHRcdHJldHVybiBpbmV0X3JlY3ZfZXJyb3Ioc2ssIG1zZywgbGVuKTtcbkBAIC0zNzEsMTQgKzM3NSw1OSBAQCBzdGF0aWMgaW50IHRjcF9icGZfcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcbiBcdFx0cmV0dXJuIHRjcF9yZWN2bXNnKHNrLCBtc2csIGxlbiwgZmxhZ3MpO1xuIFx0fVxuIFx0bG9ja19zb2NrKHNrKTtcbitcbitcdHRpbWVvID0gc29ja19yY3Z0aW1lbyhzaywgZmxhZ3MgXHUwMDI2IE1TR19ET05UV0FJVCk7XG4rXG4gbXNnX2J5dGVzX3JlYWR5OlxuIFx0Y29waWVkID0gc2tfbXNnX3JlY3Ztc2coc2ssIHBzb2NrLCBtc2csIGxlbiwgZmxhZ3MpO1xuIFx0aWYgKCFjb3BpZWQpIHtcbi1cdFx0bG9uZyB0aW1lbztcbiBcdFx0aW50IGRhdGE7XG4gXG4tXHRcdHRpbWVvID0gc29ja19yY3Z0aW1lbyhzaywgZmxhZ3MgXHUwMDI2IE1TR19ET05UV0FJVCk7XG4tXHRcdGRhdGEgPSB0Y3BfbXNnX3dhaXRfZGF0YShzaywgcHNvY2ssIHRpbWVvKTtcbitcdFx0aWYgKHNvY2tfZmxhZyhzaywgU09DS19ET05FKSkge1xuK1x0XHRcdHJldCA9IDA7XG4rXHRcdFx0Z290byB1bmxvY2s7XG4rXHRcdH1cbitcbitcdFx0aWYgKHNrLVx1MDAzZXNrX2Vycikge1xuK1x0XHRcdGlmICghc2tfcHNvY2tfcXVldWVfZW1wdHkocHNvY2spKVxuK1x0XHRcdFx0Z290byBtc2dfYnl0ZXNfcmVhZHk7XG4rXHRcdFx0aWYgKCFza2JfcXVldWVfZW1wdHkoXHUwMDI2c2stXHUwMDNlc2tfcmVjZWl2ZV9xdWV1ZSkpIHtcbitcdFx0XHRcdHJlbGVhc2Vfc29jayhzayk7XG4rXHRcdFx0XHRza19wc29ja19wdXQoc2ssIHBzb2NrKTtcbitcdFx0XHRcdHJldHVybiB0Y3BfcmVjdm1zZyhzaywgbXNnLCBsZW4sIGZsYWdzKTtcbitcdFx0XHR9XG4rXHRcdFx0cmV0ID0gc29ja19lcnJvcihzayk7XG4rXHRcdFx0Z290byB1bmxvY2s7XG4rXHRcdH1cbitcbitcdFx0aWYgKHNrLVx1MDAzZXNrX3NodXRkb3duIFx1MDAyNiBSQ1ZfU0hVVERPV04pIHtcbitcdFx0XHRpZiAoIXNrX3Bzb2NrX3F1ZXVlX2VtcHR5KHBzb2NrKSlcbitcdFx0XHRcdGdvdG8gbXNnX2J5dGVzX3JlYWR5O1xuK1x0XHRcdGlmICghc2tiX3F1ZXVlX2VtcHR5KFx1MDAyNnNrLVx1MDAzZXNrX3JlY2VpdmVfcXVldWUpKSB7XG4rXHRcdFx0XHRyZWxlYXNlX3NvY2soc2spO1xuK1x0XHRcdFx0c2tfcHNvY2tfcHV0KHNrLCBwc29jayk7XG4rXHRcdFx0XHRyZXR1cm4gdGNwX3JlY3Ztc2coc2ssIG1zZywgbGVuLCBmbGFncyk7XG4rXHRcdFx0fVxuK1x0XHRcdHJldCA9IDA7XG4rXHRcdFx0Z290byB1bmxvY2s7XG4rXHRcdH1cbitcbitcdFx0aWYgKHNrLVx1MDAzZXNrX3N0YXRlID09IFRDUF9DTE9TRSkge1xuK1x0XHRcdHJldCA9IC1FTk9UQ09OTjtcbitcdFx0XHRnb3RvIHVubG9jaztcbitcdFx0fVxuK1xuK1x0XHRpZiAoIXRpbWVvKSB7XG4rXHRcdFx0cmV0ID0gLUVBR0FJTjtcbitcdFx0XHRnb3RvIHVubG9jaztcbitcdFx0fVxuK1xuK1x0XHRpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHtcbitcdFx0XHRyZXQgPSBzb2NrX2ludHJfZXJybm8odGltZW8pO1xuK1x0XHRcdGdvdG8gdW5sb2NrO1xuK1x0XHR9XG4rXG4rXHRcdGRhdGEgPSB0Y3BfbXNnX3dhaXRfZGF0YShzaywgcHNvY2ssIFx1MDAyNnRpbWVvKTtcbiBcdFx0aWYgKGRhdGEgXHUwMDNjIDApIHtcbiBcdFx0XHRyZXQgPSBkYXRhO1xuIFx0XHRcdGdvdG8gdW5sb2NrO1xuQEAgLTM5MCw2ICs0MzksOCBAQCBzdGF0aWMgaW50IHRjcF9icGZfcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcbiBcdFx0XHRza19wc29ja19wdXQoc2ssIHBzb2NrKTtcbiBcdFx0XHRyZXR1cm4gdGNwX3JlY3Ztc2coc2ssIG1zZywgbGVuLCBmbGFncyk7XG4gXHRcdH1cbitcdFx0aWYgKCFkYXRhIFx1MDAyNlx1MDAyNiB0aW1lbyBcdTAwM2UgMClcbitcdFx0XHRnb3RvIG1zZ19ieXRlc19yZWFkeTtcbiBcdFx0Y29waWVkID0gLUVBR0FJTjtcbiBcdH1cbiBcdHJldCA9IGNvcGllZDtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvLmdpdGlnbm9yZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC8uZ2l0aWdub3JlXG5pbmRleCBjOWY0NjAzMWFjNzNiMi4uYTE4NDBhNWQ0NWY2N2MgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvLmdpdGlnbm9yZVxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0Ly5naXRpZ25vcmVcbkBAIC0zOSw2ICszOSw4IEBAIHNrX2Nvbm5lY3RfemVyb19hZGRyXG4gc2tfc29fcGVla19vZmZcbiBza2ZfbmV0X29mZlxuIHNvY2tldFxuK3NvY2ttYXBfcmVjdmZyb21cbitzb2NrbWFwX3JlY3Zmcm9tLmJwZi5vXG4gc29faW5jb21pbmdfY3B1XG4gc29fbmV0bnNfY29va2llXG4gc29fcmN2X2xpc3RlbmVyXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L01ha2VmaWxlXG5pbmRleCA3MDhkOTYwYWUwN2Q1Yi4uZGQwNGI4MDcyNWM2NzkgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvTWFrZWZpbGVcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9NYWtlZmlsZVxuQEAgLTE5MSw2ICsxOTEsNyBAQCBURVNUX0dFTl9QUk9HUyA6PSBcXFxuIFx0c2tfY29ubmVjdF96ZXJvX2FkZHIgXFxcbiBcdHNrX3NvX3BlZWtfb2ZmIFxcXG4gXHRzb19pbmNvbWluZ19jcHUgXFxcbitcdHNvY2ttYXBfcmVjdmZyb20gXFxcbiBcdHRhcCBcXFxuIFx0dGNwX3BvcnRfc2hhcmUgXFxcbiBcdHRscyBcXFxuQEAgLTIzOCwzICsyMzksNyBAQCAkKE9VVFBVVCkvYmluZF9iaGFzaDogTERMSUJTICs9IC1scHRocmVhZFxuICQoT1VUUFVUKS9pb191cmluZ196ZXJvY29weV90eDogQ0ZMQUdTICs9IC1JLi4vLi4vLi4vaW5jbHVkZS9cbiBcbiBpbmNsdWRlIGJwZi5ta1xuK1xuKyQoT1VUUFVUKS9zb2NrbWFwX3JlY3Zmcm9tOiAkKEJQRk9CSilcbiskKE9VVFBVVCkvc29ja21hcF9yZWN2ZnJvbTogTERMSUJTICs9ICQoQlBGT0JKKSAtbGVsZiAtbHogLWxwdGhyZWFkXG4rJChPVVRQVVQpL3NvY2ttYXBfcmVjdmZyb206IENGTEFHUyArPSAtSSQoT1VUUFVUKS90b29scy9pbmNsdWRlXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3NvY2ttYXBfcmVjdmZyb20uYnBmLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvc29ja21hcF9yZWN2ZnJvbS5icGYuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5mZWM0NzBjNzM4ZjFlOFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3NvY2ttYXBfcmVjdmZyb20uYnBmLmNcbkBAIC0wLDAgKzEsMzEgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JwZi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbitcbisjZGVmaW5lIEFGX0lORVQgMlxuK1xuK2NoYXIgTElDRU5TRVtdIFNFQyhcImxpY2Vuc2VcIikgPSBcIkdQTFwiO1xuK1xuK3N0cnVjdCB7XG4rXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX1NPQ0tIQVNIKTtcbitcdF9fdWludChtYXhfZW50cmllcywgMTAyNCk7XG4rXHRfX3R5cGUoa2V5LCBfX3U2NCk7XG4rXHRfX3R5cGUodmFsdWUsIF9fdTY0KTtcbitcbit9IG1hcF9zb2NrcyBTRUMoXCIubWFwc1wiKTtcbitcbitTRUMoXCJzb2Nrb3BzXCIpIGludCBvbl9zb2Nrb3BzKHN0cnVjdCBicGZfc29ja19vcHMgKmN0eClcbit7XG4rXHRpZiAoY3R4LVx1MDAzZWZhbWlseSA9PSBBRl9JTkVUIFx1MDAyNlx1MDAyNiBjdHgtXHUwMDNlb3AgPT0gQlBGX1NPQ0tfT1BTX0FDVElWRV9FU1RBQkxJU0hFRF9DQikge1xuK1x0XHRfX3U2NCBjb29raWUgPSBicGZfZ2V0X3NvY2tldF9jb29raWUoY3R4KTtcbitcbitcdFx0YnBmX3NvY2tfaGFzaF91cGRhdGUoY3R4LCBcdTAwMjZtYXBfc29ja3MsIFx1MDAyNmNvb2tpZSwgQlBGX05PRVhJU1QpO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK1NFQyhcInNrX3NrYi9zdHJlYW1fdmVyZGljdFwiKSBpbnQgb25fcmVjdihzdHJ1Y3QgX19za19idWZmICpjdHgpXG4re1xuK1x0cmV0dXJuIFNLX1BBU1M7XG4rfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9zb2NrbWFwX3JlY3Zmcm9tLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvc29ja21hcF9yZWN2ZnJvbS5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjI1NjU3ZmMzZGJjZDIyXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvc29ja21hcF9yZWN2ZnJvbS5jXG5AQCAtMCwwICsxLDI5OSBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rI2luY2x1ZGUgXHUwMDNjYXJwYS9pbmV0LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NicGYvbGliYnBmLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NmY250bC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjcHRocmVhZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RkYXRvbWljLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzeXMvc29ja2V0LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzeXMvdGltZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbitcbisjaW5jbHVkZSBcImtzZWxmdGVzdF9oYXJuZXNzLmhcIlxuK1xuKyNkZWZpbmUgTUFYX0lURVJBVElPTlMgMTAwXG4rI2RlZmluZSBQQVlMT0FEX0VORCAnZSdcbitcbitzdGF0aWMgaW50IHN0YXJ0X2xpc3RlbmluZyhzdHJ1Y3QgX190ZXN0X21ldGFkYXRhICpfbWV0YWRhdGEsIHVpbnQxNl90ICpwb3J0KVxuK3tcbitcdHN0cnVjdCBzb2NrYWRkcl9pbiBhZGRyO1xuK1x0c29ja2xlbl90IGFkZHJsZW47XG4rXHRpbnQgZmQ7XG4rXG4rXHRtZW1zZXQoXHUwMDI2YWRkciwgMCwgc2l6ZW9mKGFkZHIpKTtcbitcdGFkZHIuc2luX2ZhbWlseSA9IEFGX0lORVQ7XG4rXHRhZGRyLnNpbl9hZGRyLnNfYWRkciA9IElOQUREUl9BTlk7XG4rXG4rXHRmZCA9IHNvY2tldChBRl9JTkVULCBTT0NLX1NUUkVBTSwgSVBQUk9UT19UQ1ApO1xuK1xuK1x0QVNTRVJUX05FKGZkLCAtMSk7XG4rXHRBU1NFUlRfRVEoYmluZChmZCwgKHN0cnVjdCBzb2NrYWRkciAqKVx1MDAyNmFkZHIsIHNpemVvZihhZGRyKSksIDApO1xuK1x0QVNTRVJUX0VRKGxpc3RlbihmZCwgNSksIDApO1xuK1xuK1x0YWRkcmxlbiA9IHNpemVvZihhZGRyKTtcbitcbitcdEFTU0VSVF9FUShnZXRzb2NrbmFtZShmZCwgKHN0cnVjdCBzb2NrYWRkciAqKVx1MDAyNmFkZHIsIFx1MDAyNmFkZHJsZW4pLCAwKTtcbitcbitcdCpwb3J0ID0gYWRkci5zaW5fcG9ydDtcbitcbitcdHJldHVybiBmZDtcbit9XG4rXG4rc3RhdGljIHZvaWQgcHJvY2Vzc19jbGllbnQoaW50IGZkLCBhdG9taWNfaW50ICpydW5uaW5nLCBib29sICpmYWlsZWQpXG4re1xuK1x0Y2hhciBidWZbMTAyNF07XG4rXHRzdHJ1Y3QgdGltZXZhbCB0aW1lbztcbitcbitcdHRpbWVvLnR2X3NlYyA9IDA7XG4rXHR0aW1lby50dl91c2VjID0gMTAwMDtcbitcbitcdGlmIChzZXRzb2Nrb3B0KGZkLCBTT0xfU09DS0VULCBTT19SQ1ZUSU1FTywgXHUwMDI2dGltZW8sIHNpemVvZih0aW1lbykpKVxuK1x0XHQqZmFpbGVkID0gdHJ1ZTtcbitcbitcdHdoaWxlIChhdG9taWNfbG9hZChydW5uaW5nKSkge1xuK1x0XHRzc2l6ZV90IGxlbiA9IHJlY3Zmcm9tKGZkLCBidWYsIHNpemVvZihidWYpLCAwLCBOVUxMLCBOVUxMKTtcbitcbitcdFx0aWYgKGxlbiA9PSAtMSkge1xuK1x0XHRcdGlmIChlcnJubyAhPSBFQUdBSU4gXHUwMDI2XHUwMDI2IGVycm5vICE9IEVJTlRSKVxuK1x0XHRcdFx0KmZhaWxlZCA9IHRydWU7XG4rXHRcdFx0Y29udGludWU7XG4rXHRcdH1cbitcbitcdFx0aWYgKGxlbiBcdTAwM2M9IDAgfHwgYnVmW2xlbiAtIDFdID09IFBBWUxPQURfRU5EKVxuK1x0XHRcdGJyZWFrO1xuK1x0fVxuK1xuK1x0c2VuZChmZCwgXCJ0ZXN0XCIsIDQsIE1TR19OT1NJR05BTCk7XG4rXG4rXHRjbG9zZShmZCk7XG4rfVxuK1xuK3N0cnVjdCBicGZfdCB7XG4rXHRzdHJ1Y3QgYnBmX29iamVjdCAqb2JqO1xuK1x0c3RydWN0IGJwZl9saW5rICpvbl9zb2Nrb3BzO1xuK1x0c3RydWN0IGJwZl9saW5rICpvbl9yZWN2O1xuK307XG4rXG4rc3RhdGljIHZvaWQgc2V0dXBfYnBmKHN0cnVjdCBfX3Rlc3RfbWV0YWRhdGEgKl9tZXRhZGF0YSwgY29uc3QgY2hhciAqcGF0aCwgYm9vbCByZWN2LFxuK1x0XHRcdFx0XHRcdHN0cnVjdCBicGZfdCAqYnBmKVxuK3tcbitcdHN0cnVjdCBicGZfcHJvZ3JhbSAqcHJvZztcbitcdGludCBjZ3JvdXA7XG4rXG4rXHRtZW1zZXQoYnBmLCAwLCBzaXplb2YoKmJwZikpO1xuK1x0YnBmLVx1MDAzZW9iaiA9IGJwZl9vYmplY3RfX29wZW5fZmlsZShwYXRoLCBOVUxMKTtcbitcbitcdEFTU0VSVF9ORShicGYtXHUwMDNlb2JqLCBOVUxMKTtcbitcdEFTU0VSVF9FUShicGZfb2JqZWN0X19sb2FkKGJwZi1cdTAwM2VvYmopLCAwKTtcbitcbitcdHByb2cgPSBicGZfb2JqZWN0X19maW5kX3Byb2dyYW1fYnlfbmFtZShicGYtXHUwMDNlb2JqLCBcIm9uX3NvY2tvcHNcIik7XG4rXHRBU1NFUlRfTkUocHJvZywgTlVMTCk7XG4rXG4rXHRjZ3JvdXAgPSBvcGVuKFwiL3N5cy9mcy9jZ3JvdXBcIiwgT19SRE9OTFkpO1xuK1x0QVNTRVJUX05FKGNncm91cCwgLTEpO1xuK1xuK1x0YnBmLVx1MDAzZW9uX3NvY2tvcHMgPSBicGZfcHJvZ3JhbV9fYXR0YWNoX2Nncm91cChwcm9nLCBjZ3JvdXApO1xuK1x0Y2xvc2UoY2dyb3VwKTtcbitcbitcdEFTU0VSVF9ORShicGYtXHUwMDNlb25fc29ja29wcywgTlVMTCk7XG4rXG4rXHRpZiAocmVjdikge1xuK1x0XHRzdHJ1Y3QgYnBmX21hcCAqbWFwID0gYnBmX29iamVjdF9fZmluZF9tYXBfYnlfbmFtZShicGYtXHUwMDNlb2JqLCBcIm1hcF9zb2Nrc1wiKTtcbitcbitcdFx0QVNTRVJUX05FKG1hcCwgTlVMTCk7XG4rXG4rXHRcdHByb2cgPSBicGZfb2JqZWN0X19maW5kX3Byb2dyYW1fYnlfbmFtZShicGYtXHUwMDNlb2JqLCBcIm9uX3JlY3ZcIik7XG4rXHRcdEFTU0VSVF9ORShwcm9nLCBOVUxMKTtcbitcbitcdFx0YnBmLVx1MDAzZW9uX3JlY3YgPSBicGZfcHJvZ3JhbV9fYXR0YWNoX3NvY2ttYXAocHJvZywgYnBmX21hcF9fZmQobWFwKSk7XG4rXHRcdEFTU0VSVF9ORShicGYtXHUwMDNlb25fcmVjdiwgTlVMTCk7XG4rXHR9XG4rfVxuK1xuK3N0cnVjdCBzZXJ2ZXJfdCB7XG4rXHRpbnQgZmQ7XG4rXHRhdG9taWNfaW50IHJ1bm5pbmc7XG4rXHRwdGhyZWFkX3QgdGhyZWFkO1xuK1x0Ym9vbCB0aHJlYWRfY3JlYXRlZDtcbit9O1xuK1xuK3N0YXRpYyB2b2lkICpydW5fc2VydmVyKHZvaWQgKmFyZylcbit7XG4rXHRzdHJ1Y3Qgc2VydmVyX3QgKnNlcnZlciA9IGFyZztcbitcdGJvb2wgZmFpbGVkID0gZmFsc2U7XG4rXG4rXHR3aGlsZSAoYXRvbWljX2xvYWQoXHUwMDI2c2VydmVyLVx1MDAzZXJ1bm5pbmcpKSB7XG4rXHRcdGludCBjbGllbnRfZmQgPSBhY2NlcHQoc2VydmVyLVx1MDAzZWZkLCBOVUxMLCBOVUxMKTtcbitcbitcdFx0aWYgKGNsaWVudF9mZCA9PSAtMSkge1xuK1x0XHRcdGlmICghYXRvbWljX2xvYWQoXHUwMDI2c2VydmVyLVx1MDAzZXJ1bm5pbmcpKVxuK1x0XHRcdFx0YnJlYWs7XG4rXG4rXHRcdFx0Y29udGludWU7XG4rXHRcdH1cbitcbitcdFx0cHJvY2Vzc19jbGllbnQoY2xpZW50X2ZkLCBcdTAwMjZzZXJ2ZXItXHUwMDNlcnVubmluZywgXHUwMDI2ZmFpbGVkKTtcbitcdH1cbitcbitcdGlmIChmYWlsZWQpXG4rXHRcdHJldHVybiAodm9pZCAqKTE7XG4rXG4rXHRyZXR1cm4gTlVMTDtcbit9XG4rXG4rc3RhdGljIGludCBzZW5kX3BheWxvYWQoc3RydWN0IF9fdGVzdF9tZXRhZGF0YSAqX21ldGFkYXRhLCBpbnQgZmQsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcbit7XG4rXHRzaXplX3QgcmVtYWluaW5nID0gbGVuO1xuK1xuK1x0ZG8ge1xuK1x0XHRzc2l6ZV90IGJ5dGVzID0gd3JpdGUoZmQsIGJ1ZiArIChsZW4gLSByZW1haW5pbmcpLCByZW1haW5pbmcpO1xuK1xuK1x0XHRpZiAoYnl0ZXMgXHUwMDNjIDApIHtcbitcdFx0XHRpZiAoZXJybm8gPT0gRUlOVFIpXG4rXHRcdFx0XHRjb250aW51ZTtcbitcbitcdFx0XHRyZXR1cm4gLTE7XG4rXHRcdH1cbitcbitcdFx0cmVtYWluaW5nIC09IGJ5dGVzO1xuK1x0fSB3aGlsZSAocmVtYWluaW5nKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitGSVhUVVJFKHNvY2ttYXBfcmVjdmZyb20pXG4re1xuK1x0c3RydWN0IHNlcnZlcl90IHNlcnZlcjtcbitcdHN0cnVjdCBzb2NrYWRkcl9pbiBhZGRyO1xuK1x0c3RydWN0IGJwZl90IGJwZjtcbitcdGNoYXIgKnBheWxvYWQ7XG4rXHRzaXplX3QgcGF5bG9hZF9sZW47XG4rfTtcbitcbitGSVhUVVJFX1ZBUklBTlQoc29ja21hcF9yZWN2ZnJvbSlcbit7XG4rXHRib29sIHdpdGhfcmVjdjtcbit9O1xuK1xuK0ZJWFRVUkVfVkFSSUFOVF9BREQoc29ja21hcF9yZWN2ZnJvbSwgcmVjdm1zZylcbit7XG4rXHQud2l0aF9yZWN2ID0gZmFsc2Vcbit9O1xuK1xuK0ZJWFRVUkVfVkFSSUFOVF9BREQoc29ja21hcF9yZWN2ZnJvbSwgcmVjdm1zZ19wYXJzZXIpXG4re1xuK1x0LndpdGhfcmVjdiA9IHRydWVcbit9O1xuK1xuK0ZJWFRVUkVfU0VUVVAoc29ja21hcF9yZWN2ZnJvbSlcbit7XG4rXHRtZW1zZXQoXHUwMDI2c2VsZi1cdTAwM2VzZXJ2ZXIsIDAsIHNpemVvZihzZWxmLVx1MDAzZXNlcnZlcikpO1xuK1x0c2VsZi1cdTAwM2VzZXJ2ZXIuZmQgPSAtMTtcbitcbitcdG1lbXNldChcdTAwMjZzZWxmLVx1MDAzZWFkZHIsIDAsIHNpemVvZihzZWxmLVx1MDAzZWFkZHIpKTtcbitcbitcdHNlbGYtXHUwMDNlcGF5bG9hZF9sZW4gPSAxMDI0ICogMTAyNCAqIDI1O1xuK1x0c2VsZi1cdTAwM2VwYXlsb2FkID0gbWFsbG9jKHNlbGYtXHUwMDNlcGF5bG9hZF9sZW4pO1xuK1x0QVNTRVJUX05FKHNlbGYtXHUwMDNlcGF5bG9hZCwgTlVMTCk7XG4rXG4rXHRtZW1zZXQoc2VsZi1cdTAwM2VwYXlsb2FkLCAwLCBzZWxmLVx1MDAzZXBheWxvYWRfbGVuKTtcbitcdHNlbGYtXHUwMDNlcGF5bG9hZFtzZWxmLVx1MDAzZXBheWxvYWRfbGVuIC0gMV0gPSBQQVlMT0FEX0VORDtcbitcbitcdHNldHVwX2JwZihfbWV0YWRhdGEsIFwic29ja21hcF9yZWN2ZnJvbS5icGYub1wiLCB2YXJpYW50LVx1MDAzZXdpdGhfcmVjdiwgXHUwMDI2c2VsZi1cdTAwM2VicGYpO1xuK1x0YXRvbWljX3N0b3JlKFx1MDAyNnNlbGYtXHUwMDNlc2VydmVyLnJ1bm5pbmcsIDEpO1xuK1x0c2VsZi1cdTAwM2VzZXJ2ZXIuZmQgPSBzdGFydF9saXN0ZW5pbmcoX21ldGFkYXRhLCBcdTAwMjZzZWxmLVx1MDAzZWFkZHIuc2luX3BvcnQpO1xuK1xuK1x0c2VsZi1cdTAwM2VhZGRyLnNpbl9mYW1pbHkgPSBBRl9JTkVUO1xuK1x0c2VsZi1cdTAwM2VhZGRyLnNpbl9hZGRyLnNfYWRkciA9IGh0b25sKElOQUREUl9MT09QQkFDSyk7XG4rXG4rXHRBU1NFUlRfRVEocHRocmVhZF9jcmVhdGUoXHUwMDI2c2VsZi1cdTAwM2VzZXJ2ZXIudGhyZWFkLCBOVUxMLCBcdTAwMjZydW5fc2VydmVyLCBcdTAwMjZzZWxmLVx1MDAzZXNlcnZlciksIDApO1xuK1x0c2VsZi1cdTAwM2VzZXJ2ZXIudGhyZWFkX2NyZWF0ZWQgPSB0cnVlO1xuK31cbitcbitGSVhUVVJFX1RFQVJET1dOKHNvY2ttYXBfcmVjdmZyb20pXG4re1xuK1x0YXRvbWljX3N0b3JlKFx1MDAyNnNlbGYtXHUwMDNlc2VydmVyLnJ1bm5pbmcsIDApO1xuK1xuK1x0aWYgKHNlbGYtXHUwMDNlc2VydmVyLmZkICE9IC0xKVxuK1x0XHRzaHV0ZG93bihzZWxmLVx1MDAzZXNlcnZlci5mZCwgU0hVVF9SRCk7XG4rXG4rXHRpZiAoc2VsZi1cdTAwM2VzZXJ2ZXIudGhyZWFkX2NyZWF0ZWQpIHtcbitcdFx0dm9pZCAqcmV0dmFsID0gTlVMTDtcbitcbitcdFx0cHRocmVhZF9qb2luKHNlbGYtXHUwMDNlc2VydmVyLnRocmVhZCwgXHUwMDI2cmV0dmFsKTtcbitcdFx0RVhQRUNUX0VRKHJldHZhbCwgTlVMTCk7XG4rXHR9XG4rXG4rXHRpZiAoc2VsZi1cdTAwM2VzZXJ2ZXIuZmQgIT0gLTEpXG4rXHRcdGNsb3NlKHNlbGYtXHUwMDNlc2VydmVyLmZkKTtcbitcbitcdGZyZWUoc2VsZi1cdTAwM2VwYXlsb2FkKTtcbitcdGJwZl9saW5rX19kZXN0cm95KHNlbGYtXHUwMDNlYnBmLm9uX3NvY2tvcHMpO1xuK1xuK1x0aWYgKHNlbGYtXHUwMDNlYnBmLm9uX3JlY3YpXG4rXHRcdGJwZl9saW5rX19kZXN0cm95KHNlbGYtXHUwMDNlYnBmLm9uX3JlY3YpO1xuK1xuK1x0YnBmX29iamVjdF9fY2xvc2Uoc2VsZi1cdTAwM2VicGYub2JqKTtcbit9XG4rXG4rVEVTVF9GKHNvY2ttYXBfcmVjdmZyb20sIG5vX3RpbWVvdXQpXG4re1xuK1x0Y2hhciBpZ25vcmVkWzEyOF07XG4rXG4rXHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgTUFYX0lURVJBVElPTlM7ICsraSkge1xuK1x0XHRpbnQgZmQgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19TVFJFQU0sIElQUFJPVE9fVENQKTtcbitcbitcdFx0QVNTRVJUX05FKGZkLCAtMSk7XG4rXHRcdEFTU0VSVF9FUShjb25uZWN0KGZkLCAoc3RydWN0IHNvY2thZGRyICopXHUwMDI2c2VsZi1cdTAwM2VhZGRyLCBzaXplb2Yoc2VsZi1cdTAwM2VhZGRyKSksIDApO1xuK1xuK1x0XHRBU1NFUlRfRVEoc2VuZF9wYXlsb2FkKF9tZXRhZGF0YSwgZmQsIHNlbGYtXHUwMDNlcGF5bG9hZCwgc2VsZi1cdTAwM2VwYXlsb2FkX2xlbiksIDApO1xuK1xuK1x0XHRpZiAocmVjdmZyb20oZmQsIGlnbm9yZWQsIHNpemVvZihpZ25vcmVkKSwgMCwgTlVMTCwgTlVMTCkgXHUwMDNjIDApXG4rXHRcdFx0QVNTRVJUX05FKGVycm5vLCBFQUdBSU4pO1xuK1xuK1x0XHRjbG9zZShmZCk7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyBpbnQ2NF90IHRvX25hbm9zKHN0cnVjdCB0aW1lc3BlYyAqdGltZSlcbit7XG4rXHRyZXR1cm4gKHRpbWUtXHUwMDNldHZfc2VjICogMTAwMDAwMDAwMExMKSArIHRpbWUtXHUwMDNldHZfbnNlYztcbit9XG4rXG4rVEVTVF9GKHNvY2ttYXBfcmVjdmZyb20sIHdpdGhfdGltZW91dClcbit7XG4rXHRjaGFyIGlnbm9yZWRbMTI4XTtcbitcdHN0cnVjdCB0aW1ldmFsIHRpbWVvO1xuK1xuK1x0dGltZW8udHZfc2VjID0gMDtcbitcdHRpbWVvLnR2X3VzZWMgPSA1MDAwO1xuK1xuK1x0LyogcmVtb3ZlIHRoZSBwYXlsb2FkIGVuZCBkZWxpbWl0ZXIgc28gdGhlIHNlcnZlciBuZXZlciByZXNwb25kcyBhbmQgcmVjdmZyb20gdGltZXMgb3V0LiAqL1xuK1x0c2VsZi1cdTAwM2VwYXlsb2FkW3NlbGYtXHUwMDNlcGF5bG9hZF9sZW4gLSAxXSA9IDA7XG4rXG4rXHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgTUFYX0lURVJBVElPTlM7ICsraSkge1xuK1x0XHRzdHJ1Y3QgdGltZXNwZWMgYmVnO1xuK1x0XHRzdHJ1Y3QgdGltZXNwZWMgZW5kO1xuK1x0XHRpbnQgZXJyO1xuK1xuK1x0XHRpbnQgZmQgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19TVFJFQU0sIElQUFJPVE9fVENQKTtcbitcbitcdFx0QVNTRVJUX05FKGZkLCAtMSk7XG4rXHRcdEFTU0VSVF9FUShjb25uZWN0KGZkLCAoc3RydWN0IHNvY2thZGRyICopXHUwMDI2c2VsZi1cdTAwM2VhZGRyLCBzaXplb2Yoc2VsZi1cdTAwM2VhZGRyKSksIDApO1xuK1xuK1x0XHRBU1NFUlRfRVEoc2VuZF9wYXlsb2FkKF9tZXRhZGF0YSwgZmQsIHNlbGYtXHUwMDNlcGF5bG9hZCwgc2VsZi1cdTAwM2VwYXlsb2FkX2xlbiksIDApO1xuK1xuK1x0XHRBU1NFUlRfRVEoc2V0c29ja29wdChmZCwgU09MX1NPQ0tFVCwgU09fUkNWVElNRU8sIFx1MDAyNnRpbWVvLCBzaXplb2YodGltZW8pKSwgMCk7XG4rXG4rXHRcdGNsb2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDLCBcdTAwMjZiZWcpO1xuK1x0XHRBU1NFUlRfRVEocmVjdmZyb20oZmQsIGlnbm9yZWQsIHNpemVvZihpZ25vcmVkKSwgMCwgTlVMTCwgTlVMTCksIC0xKTtcbitcdFx0ZXJyID0gZXJybm87XG4rXHRcdGNsb2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDLCBcdTAwMjZlbmQpO1xuK1xuK1x0XHRBU1NFUlRfRVEoZXJyLCBFQUdBSU4pO1xuK1x0XHRBU1NFUlRfR0UodG9fbmFub3MoXHUwMDI2ZW5kKSAtIHRvX25hbm9zKFx1MDAyNmJlZyksIHRpbWVvLnR2X3VzZWMgKiAxMDAwKTtcbitcbitcdFx0Y2xvc2UoZmQpO1xuK1x0fVxuK31cbitcbitURVNUX0hBUk5FU1NfTUFJTlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMDQ6MTQ6MTkuNDM5MzkxMDM4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTM3MDg3MDEwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBUQ1AgQlBGIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG5ldC9pcHY0L3RjcF9icGYuY2AuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgaW4gaG93IGB0Y3BfbXNnX3dhaXRfZGF0YWAgaGFuZGxlcyB0aGUgdGltZW91dDsgaXQncyBub3cgdGFraW5nIGEgcG9pbnRlciB0byBgdGltZW9gIGluc3RlYWQgb2YgdGhlIHZhbHVlIGl0c2VsZi4gVGhhdCdzIGEgZnVuZGFtZW50YWwgc2hpZnQgaW4gaG93IHRoZSBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgdGltZW91dCBtZWNoYW5pc20sIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zLiBUaGUgcGF0Y2ggYWxzbyB1cGRhdGVzIGB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyYCBhbmQgYHRjcF9icGZfcmVjdm1zZ2AsIHNwZWNpZmljYWxseSB0byBwYXNzIHRoZSBhZGRyZXNzIG9mIGB0aW1lb2AgYW5kIGhhbmRsZSBhIHBvdGVudGlhbCBqdW1wIHRvIGBtc2dfYnl0ZXNfcmVhZHlgLiBUaGlzIGlzIG1ha2luZyBtZSB0aGluayBhYm91dCBob3cgdGhlIHRpbWVvdXQgaXMgdXNlZCBpbiB0aGUgQlBGIHNvY2ttYXAgY29udGV4dCDigJMgaXMgaXQgYW4gb3B0aW1pemF0aW9uLCBhIGJ1ZyBmaXgsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaGUgaW50cm9kdWN0aW9uIG9mIHRoZSBgc29ja21hcF9yZWN2ZnJvbWAgc2VsZnRlc3QgaXMgYSBnb29kIHNpZ24sIGJ1dCBJIG5lZWQgdG8gY29uZmlybSBpdHMgY292ZXJhZ2UuXG5cbk15IGltbWVkaWF0ZSBjb25jZXJuIGlzIHJlYWNoYWJpbGl0eSBhbmQgZnVuY3Rpb25hbGl0eS4gVGhlIGNoYW5nZXMgZGlyZWN0bHkgaW1wYWN0IGB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyYCBhbmQgYHRjcF9icGZfcmVjdm1zZ2AsIHdoaWNoIGFyZSBvYnZpb3VzbHkgY3JpdGljYWwgdG8gdGhlIEJQRiBzb2NrbWFwIGZ1bmN0aW9uYWxpdHksIHNvIGEgZGVlcCBkaXZlIGludG8gdGhlIEJQRiBpbXBsZW1lbnRhdGlvbiBpcyByZXF1aXJlZC4gR2l2ZW4gdGhhdCB0aGlzIGlzIHRvdWNoaW5nIGNvcmUgbmV0d29ya2luZyBhbmQgQlBGIGxvZ2ljLCBmdXp6aW5nIHNlZW1zIGxpa2UgYSB2ZXJ5IGdvb2QgaWRlYS5cblxuTmV4dCwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24uIEknbSBnb2luZyB0byBoYXZlIHRvIGNoZWNrIHdoYXQncyBnb2luZyBvbiBpbiBgbmV0L2lwdjQvTWFrZWZpbGVgLiBJJ20gZ3Vlc3NpbmcgYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgYSBnaXZlbiwgYnV0IEknbGwgYWxzbyBoYXZlIHRvIHNlZSBpZiBgQ09ORklHX05FVF9TT0NLX01TR2Agb3IgYENPTkZJR19CUEZfU1RSRUFNX1BBUlNFUmAgYXJlIGFsc28gZGVwZW5kZW5jaWVzLiBVbmRlcnN0YW5kaW5nIHRoZSBidWlsZCBjb25maWd1cmF0aW9uIHdpbGwgdGVsbCBtZSBob3cgdG8gYnVpbGQgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzQ1NSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2NywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDA0OjE0OjI0LjgxMDI2MzM4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1ODg4MDk1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Y3BfYnBmXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L01ha2VmaWxlPTYyPW9iai0kKENPTkZJR19UQ1BfQ09OR19JTExJTk9JUykgKz0gdGNwX2lsbGlub2lzLm9cXG5uZXQvaXB2NC9NYWtlZmlsZTo2MzpvYmotJChDT05GSUdfTkVUX1NPQ0tfTVNHKSArPSB0Y3BfYnBmLm9cXG5uZXQvaXB2NC9NYWtlZmlsZS02NC1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IHVkcF9icGYub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwNDoxNDoyNS4yNjkxNDkwOTVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTM0NzE5NDkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipLZXJuZWwgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMgZm9yIFNvY2tldCBGaWx0ZXJpbmcqKlxuXG5SaWdodCwgc28gSSBzZWUgd2UgYWJzb2x1dGVseSBuZWVkIGBDT05GSUdfTkVUX1NPQ0tfTVNHYCBlbmFibGVkLiBUaGF0J3MgYSBnaXZlbjsgaXQncyB0aGUgZm91bmRhdGlvbi4gTm93LCBzaW5jZSB3ZSdyZSBkZWFsaW5nIHdpdGggc29ja2V0cywgcGFydGljdWxhcmx5IHRoZSBwb3RlbnRpYWwgZm9yIEJQRiBmaWx0ZXJpbmcgd2l0aGluIHRoZSBUQ1Agc3RhY2ssIG15IG5leHQgbW92ZSBpcyB0byBkaXZlIHN0cmFpZ2h0IGludG8gYHRjcF9icGYuY2AuIEkgbmVlZCB0byBlbnN1cmUgdGhlcmUgYXJlbid0IGFueSBvdGhlciwgbGVzcyBvYnZpb3VzIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIGx1cmtpbmcgd2l0aGluIHRoYXQgZmlsZSB0aGF0IEkgbWlnaHQgbmVlZCB0byBjb25zaWRlci4gV2UgY2FuJ3QgaGF2ZSBhbnkgc3VycHJpc2VzIHdoZW4gd2Ugc3RhcnQgbWFraW5nIGNoYW5nZXMuIE15IGFpbSBoZXJlIGlzIHRvIGVuc3VyZSB0aGUgY29uZmlndXJhdGlvbiBpcyBjb21wbGV0ZSwgYW5kIHRoYXQgd2UgaGF2ZSB0aGUgbWF4aW11bSBwZXJmb3JtYW5jZSBwcm9maWxlIHRvIHdvcmsgd2l0aC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODIzOCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDA0OjE0OjI4LjQwMzg3MDc1N1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTk3ODU2NTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC90Y3BfYnBmLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvdGNwX2JwZi5jPTE3OD1FWFBPUlRfU1lNQk9MX0dQTCh0Y3BfYnBmX3NlbmRtc2dfcmVkaXIpO1xcbm5ldC9pcHY0L3RjcF9icGYuYy0xNzktXFxubmV0L2lwdjQvdGNwX2JwZi5jOjE4MDojaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXFxubmV0L2lwdjQvdGNwX2JwZi5jLTE4MS1zdGF0aWMgaW50IHRjcF9tc2dfd2FpdF9kYXRhKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX3Bzb2NrICpwc29jayxcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYz03MTM9c3RhdGljIGludCB0Y3BfYnBmX2Fzc2VydF9wcm90b19vcHMoc3RydWN0IHByb3RvICpvcHMpXFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmMtNzIyLVxcbm5ldC9pcHY0L3RjcF9icGYuYzo3MjM6I2lmIElTX0VOQUJMRUQoQ09ORklHX0JQRl9TVFJFQU1fUEFSU0VSKVxcbm5ldC9pcHY0L3RjcF9icGYuYy03MjQtaW50IHRjcF9icGZfc3RycF9yZWFkX3NvY2soc3RydWN0IHN0cnBhcnNlciAqc3RycCwgcmVhZF9kZXNjcmlwdG9yX3QgKmRlc2MsXFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmMtNzU2LX1cXG5uZXQvaXB2NC90Y3BfYnBmLmM6NzU3OiNlbmRpZiAvKiBDT05GSUdfQlBGX1NUUkVBTV9QQVJTRVIgKi9cXG5uZXQvaXB2NC90Y3BfYnBmLmMtNzU4LVxcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jPTgwMz12b2lkIHRjcF9icGZfY2xvbmUoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqbmV3c2spXFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmMtODA5LX1cXG5uZXQvaXB2NC90Y3BfYnBmLmM6ODEwOiNlbmRpZiAvKiBDT05GSUdfQlBGX1NZU0NBTEwgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMDQ6MTQ6MjguNTYzNjYxNDU4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM4MjcxNjUxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgQlBGLVJlbGF0ZWQgVENQIEZ1bmN0aW9uYWxpdHkqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBtb2RpZmllZCBUQ1AgZnVuY3Rpb25zOiBgdGNwX21zZ193YWl0X2RhdGFgLCBgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcmAsIGFuZCBgdGNwX2JwZl9yZWN2bXNnYC4gVGhleSdyZSBhbGwgZ3VhcmRlZCBieSBgI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTGAsIHdoaWNoIG1lYW5zIEkgbmVlZCB0byBtYWtlIHN1cmUgYEJQRl9TWVNDQUxMYCBhbmQgYE5FVF9TT0NLX01TR2AgYXJlIGFjY291bnRlZCBmb3IgaW4gbXkgYW5hbHlzaXMuIFxuXG5Ob3csIGxldCdzIGhvbmUgaW4gb24gdGhlIGNvcmUgZnVuY3Rpb25zLiBJIG5lZWQgdG8gZm9jdXMgb24gYHRjcF9icGZfcmVjdm1zZ19wYXJzZXJgLCBgdGNwX2JwZl9yZWN2bXNnYCwgYW5kIGB0Y3BfbXNnX3dhaXRfZGF0YWAuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGB0Y3BfYnBmX3JlY3Ztc2dgIGFuZCBgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcmAgYXJlIHByaW1lIHRhcmdldHMgZm9yIGRlZXBlciBleGFtaW5hdGlvbiBhcyBwb3RlbnRpYWwgXCJob3QtcGF0aFwiIGFyZWFzLiBTaW5jZSB0aGV5IGFyZSByZWN2bXNnIGltcGxlbWVudGF0aW9ucyBzcGVjaWZpYyB0byBzb2NrbWFwLCBub3QgdGhlIGdlbmVyaWMgYHRjcF9yZWN2bXNnYCwgdGhleSBhcmUgZXhjZWxsZW50IGNhbmRpZGF0ZXMgZm9yIGluY2x1c2lvbiBpbiBGb2N1c1N5bWJvbHMuXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJ20gZ29pbmcgdG8gZG91YmxlLWNoZWNrIHRob3NlIHR3byBzcGVjaWZpYyBmdW5jdGlvbnMsIGB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyYCBhbmQgYHRjcF9icGZfcmVjdm1zZ2AsIHRvIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZyBhbmQgbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg4NzUsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMDQ6MTQ6MzIuOTQ2MzgwNDIzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1MjE3MDc2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRjcF9icGZfcmVjdm1zZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC90Y3BfYnBmLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvdGNwX2JwZi5jPTIwMz1zdGF0aWMgYm9vbCBpc19uZXh0X21zZ19maW4oc3RydWN0IHNrX3Bzb2NrICpwc29jaylcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYy0yMjAtXFxubmV0L2lwdjQvdGNwX2JwZi5jOjIyMTpzdGF0aWMgaW50IHRjcF9icGZfcmVjdm1zZ19wYXJzZXIoc3RydWN0IHNvY2sgKnNrLFxcbm5ldC9pcHY0L3RjcF9icGYuYy0yMjItXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbXNnaGRyICptc2csXFxuLS1cXG5uZXQvaXB2NC90Y3BfYnBmLmM9MzM4PXN0YXRpYyBpbnQgdGNwX2JwZl9pb2N0bChzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIGludCAqa2FyZylcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYy0zNTUtXFxubmV0L2lwdjQvdGNwX2JwZi5jOjM1NjpzdGF0aWMgaW50IHRjcF9icGZfcmVjdm1zZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbixcXG5uZXQvaXB2NC90Y3BfYnBmLmMtMzU3LVxcdFxcdFxcdCAgIGludCBmbGFncylcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYz02NzQ9c3RhdGljIHZvaWQgdGNwX2JwZl9yZWJ1aWxkX3Byb3RvcyhzdHJ1Y3QgcHJvdG8gcHJvdFtUQ1BfQlBGX05VTV9DRkdTXSxcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYy02NzktXFx0cHJvdFtUQ1BfQlBGX0JBU0VdLmNsb3NlXFx0XFx0PSBzb2NrX21hcF9jbG9zZTtcXG5uZXQvaXB2NC90Y3BfYnBmLmM6NjgwOlxcdHByb3RbVENQX0JQRl9CQVNFXS5yZWN2bXNnXFx0XFx0PSB0Y3BfYnBmX3JlY3Ztc2c7XFxubmV0L2lwdjQvdGNwX2JwZi5jLTY4MS1cXHRwcm90W1RDUF9CUEZfQkFTRV0uc29ja19pc19yZWFkYWJsZVxcdD0gc2tfbXNnX2lzX3JlYWRhYmxlO1xcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jLTY4Ny1cXHRwcm90W1RDUF9CUEZfUlhdXFx0XFx0XFx0PSBwcm90W1RDUF9CUEZfQkFTRV07XFxubmV0L2lwdjQvdGNwX2JwZi5jOjY4ODpcXHRwcm90W1RDUF9CUEZfUlhdLnJlY3Ztc2dcXHRcXHQ9IHRjcF9icGZfcmVjdm1zZ19wYXJzZXI7XFxubmV0L2lwdjQvdGNwX2JwZi5jLTY4OS1cXG5uZXQvaXB2NC90Y3BfYnBmLmMtNjkwLVxcdHByb3RbVENQX0JQRl9UWFJYXVxcdFxcdFxcdD0gcHJvdFtUQ1BfQlBGX1RYXTtcXG5uZXQvaXB2NC90Y3BfYnBmLmM6NjkxOlxcdHByb3RbVENQX0JQRl9UWFJYXS5yZWN2bXNnXFx0XFx0PSB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyO1xcbm5ldC9pcHY0L3RjcF9icGYuYy02OTItfVxcbi0tXFxubmV0L2lwdjQvdGNwX2JwZi5jPTcyND1pbnQgdGNwX2JwZl9zdHJwX3JlYWRfc29jayhzdHJ1Y3Qgc3RycGFyc2VyICpzdHJwLCByZWFkX2Rlc2NyaXB0b3JfdCAqZGVzYyxcXG4tLVxcbm5ldC9pcHY0L3RjcF9icGYuYy03NDctXFx0ICogRm9yIFNLX1JFRElSRUNULCB3ZSBuZWVkIHRvIGFjayB0aGUgZnJhbWUgaW1tZWRpYXRlbHkgYnV0IGZvclxcbm5ldC9pcHY0L3RjcF9icGYuYzo3NDg6XFx0ICogU0tfUEFTUywgd2Ugd2FudCB0byBkZWxheSB0aGUgYWNrIHVudGlsIHRjcF9icGZfcmVjdm1zZ19wYXJzZXIoKS5cXG5uZXQvaXB2NC90Y3BfYnBmLmMtNzQ5LVxcdCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQwNDoxNDozMy4wMjE2MjExOTlaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NjI3ODIxOTk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBCUEYgU29ja21hcCBUaW1lb3V0IEZpeCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0J3MgZGVhbGluZyB3aXRoIGByZWN2bXNnYCBoYW5kbGVycy4gU3BlY2lmaWNhbGx5LCB0aGVzZSBoYW5kbGVycyBhcmUgdXNlZCB3aXRoIFRDUCBzb2NrZXRzIHRoYXQgYXJlIHBsYWNlZCB3aXRoaW4gYSBCUEYgc29ja21hcCDigJMgc28sIHdlJ3JlIHRhbGtpbmcgYWJvdXQgYSB2ZXJ5IHRhcmdldGVkIGFyZWEgaGVyZSwgd2hpY2ggaXMgZ29vZCBiZWNhdXNlIGl0IG1ha2VzIHRoZSBzY29wZSBtYW5hZ2VhYmxlLiBJdCdzIG5vdCBhIGdlbmVyaWMgaXNzdWU7IGl0J3MgcmlnaHQgaW4gdGhlIHN3ZWV0IHNwb3Qgb2YgdGhpcyBzcGVjaWZpYyBuZXR3b3JraW5nIGNvbmZpZ3VyYXRpb24uXG5cblRoZSBjb25maWd1cmF0aW9ucyBiZWluZyBjaGFuZ2VkLCBgQlBGX1NZU0NBTExgIGFuZCBgTkVUX1NPQ0tfTVNHYCwgY29uZmlybSB3ZSdyZSBkZWFsaW5nIHdpdGggc3lzdGVtIGNhbGxzIHJlbGF0ZWQgdG8gbmV0d29ya2luZyBtZXNzYWdlcyB3aXRoaW4gdGhlIEJQRiBjb250ZXh0LCBzbyB0aGlzIGlzIGRlZmluaXRlbHkgcmVsYXRlZCB0byB0aGUgcmlnaHQgc3Vic3lzdGVtLiBJIHNlZSB3ZSdyZSBmb2N1c2luZyBvbiB0aGUgYHRjcF9icGZfcmVjdm1zZ19wYXJzZXJgLCBgdGNwX2JwZl9yZWN2bXNnYCwgYW5kIGB0Y3BfbXNnX3dhaXRfZGF0YWAgc3ltYm9scy4gVGhhdCBuYXJyb3dzIHRoaW5ncyBkb3duIGV2ZW4gZnVydGhlciDigJMgaXQncyBhbGwgYWJvdXQgaG93IHRoZXNlIGZ1bmN0aW9ucyBoYW5kbGUgdGhlIHJldHJpZXZhbCBvZiBkYXRhLlxuXG5NeSByZWFzb25pbmcgbGVhZHMgbWUgdG8gYmVsaWV2ZSB0aGUgcGF0Y2ggaXMgdGFyZ2V0aW5nIHRpbWVvdXQgaGFuZGxpbmcgd2l0aGluIGB0Y3BfYnBmX3JlY3Ztc2dgIGFuZCBgdGNwX2JwZl9yZWN2bXNnX3BhcnNlcmAuIFRoZSBmaXggc3BlY2lmaWNhbGx5IGFkZHJlc3NlcyB0aGUgdGltZW91dCB2YWx1ZSB1cGRhdGUgd2l0aGluIGB0Y3BfbXNnX3dhaXRfZGF0YWAgYW5kIGludHJvZHVjZXMgYSByZXRyeSBtZWNoYW5pc20gaWYgdGhlIHRpbWVvdXQgaGFzbid0IHlldCBlbGFwc2VkLiBUaGlzIGlzIGNyaXRpY2FsIGNvcmUgbmV0d29ya2luZyBsb2dpYyDigJMgdGhlIGhhbmRsaW5nIG9mIHNvY2tldCByZWFkcyBhbmQgbWVzc2FnZSB3YWl0cyB1bmRlciBCUEYgc29ja21hcCwgd2hpY2ggbWVhbnMgY29ycmVjdCB0aW1lb3V0IGhhbmRsaW5nIGlzIGVzc2VudGlhbCBmb3IgcmVsaWFibGUgb3BlcmF0aW9uLiBUaGlzIGlzIGEgdmVyeSB0YXJnZXRlZCBmaXggcmVsYXRlZCB0byBhIEJQRiBzb2NrbWFwLiBJdCdzIG5vdCBhIHBlcmZvcm1hbmNlIHR3ZWFrLCBidXQgbW9yZSBvZiBhIHJlbGlhYmlsaXR5IGZpeCByZWxhdGVkIHRvIGEgdmVyeSBzcGVjaWZpYyBuZXR3b3JrIGNvbmRpdGlvbi4gTGV0J3MgY2FsbCB0aGlzIHNldC1yZXN1bHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDE1MCwiT3V0cHV0VG9rZW5zIjoxNTIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMDQ6MTQ6MzguNjQ5NDQ1NDU3WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI1OTk4NjEzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiTkVUX1NPQ0tfTVNHXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGNwX2JwZl9yZWN2bXNnX3BhcnNlclwiLFxuICAgIFwidGNwX2JwZl9yZWN2bXNnXCIsXG4gICAgXCJ0Y3BfbXNnX3dhaXRfZGF0YVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRpbWVvdXQgaGFuZGxpbmcgaW4gQlBGIHNvY2ttYXAncyByZWN2bXNnIGltcGxlbWVudGF0aW9ucyAodGNwX2JwZl9yZWN2bXNnIGFuZCB0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyKS4gSXQgY29ycmVjdGx5IHVwZGF0ZXMgdGhlIHJlbWFpbmluZyB0aW1lb3V0IHZhbHVlIGluIHRjcF9tc2dfd2FpdF9kYXRhIGFuZCByZXRyaWVzIHJlYWRpbmcgaWYgdGhlIHRpbWVvdXQgaGFzbid0IGV4cGlyZWQuIFRoaXMgaXMgZnVuY3Rpb25hbCBjb3JlIG5ldHdvcmtpbmcgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJORVRfU09DS19NU0dcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0Y3BfYnBmX3JlY3Ztc2dfcGFyc2VyXCIsXG4gICAgXCJ0Y3BfYnBmX3JlY3Ztc2dcIixcbiAgICBcInRjcF9tc2dfd2FpdF9kYXRhXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGltZW91dCBoYW5kbGluZyBpbiBCUEYgc29ja21hcCdzIHJlY3Ztc2cgaW1wbGVtZW50YXRpb25zICh0Y3BfYnBmX3JlY3Ztc2cgYW5kIHRjcF9icGZfcmVjdm1zZ19wYXJzZXIpLiBJdCBjb3JyZWN0bHkgdXBkYXRlcyB0aGUgcmVtYWluaW5nIHRpbWVvdXQgdmFsdWUgaW4gdGNwX21zZ193YWl0X2RhdGEgYW5kIHJldHJpZXMgcmVhZGluZyBpZiB0aGUgdGltZW91dCBoYXNuJ3QgZXhwaXJlZC4gVGhpcyBpcyBmdW5jdGlvbmFsIGNvcmUgbmV0d29ya2luZyBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowzmk8h[1] Phase: Succeeded StartedAt: 2026-07-16 04:15:17 +0000 UTC FinishedAt: 2026-07-16 04:15:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzmk8h[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-16 04:15:17 +0000 UTC FinishedAt: 2026-07-16 04:15:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzmk8h[2] Phase: Succeeded StartedAt: 2026-07-16 04:15:17 +0000 UTC FinishedAt: 2026-07-16 08:46:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzmk8h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_recvmsg_parser","tcp_bpf_recvmsg","tcp_msg_wait_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"56ae867f-1d48-4c9b-ac36-55084c9e5fdf","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-16 04:15:17 +0000 UTC FinishedAt: 2026-07-16 08:46:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_recvmsg_parser","tcp_bpf_recvmsg","tcp_msg_wait_data"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"56ae867f-1d48-4c9b-ac36-55084c9e5fdf","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowzmk8h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_recvmsg_parser","tcp_bpf_recvmsg","tcp_msg_wait_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"56ae867f-1d48-4c9b-ac36-55084c9e5fdf","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-16 04:15:17 +0000 UTC FinishedAt: 2026-07-16 04:17:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzmk8h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_recvmsg_parser","tcp_bpf_recvmsg","tcp_msg_wait_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"56ae867f-1d48-4c9b-ac36-55084c9e5fdf","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-16 04:15:17 +0000 UTC FinishedAt: 2026-07-16 04:16:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowzmk8h/series-workflowzmk8h-convert-artifact-3484647443/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzmk8h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_recvmsg_parser","tcp_bpf_recvmsg","tcp_msg_wait_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"56ae867f-1d48-4c9b-ac36-55084c9e5fdf","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-16 04:17:03 +0000 UTC FinishedAt: 2026-07-16 04:56:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzmk8h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_recvmsg_parser","tcp_bpf_recvmsg","tcp_msg_wait_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"56ae867f-1d48-4c9b-ac36-55084c9e5fdf","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-16 04:17:03 +0000 UTC FinishedAt: 2026-07-16 04:56:04 +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:*f1c814af-cde8-4db6-b808-96eda9c87b3c,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-workflowzmk8h/series-workflowzmk8h-convert-artifact-3484647443/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": "7aad2080-18a5-49f2-b211-7ef3644e59b3", "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-workflowzmk8h/series-workflowzmk8h-build-action-2634521921/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzmk8h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_recvmsg_parser","tcp_bpf_recvmsg","tcp_msg_wait_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"56ae867f-1d48-4c9b-ac36-55084c9e5fdf","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-16 04:17:03 +0000 UTC FinishedAt: 2026-07-16 04:55:48 +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:*f1c814af-cde8-4db6-b808-96eda9c87b3c,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-workflowzmk8h/series-workflowzmk8h-convert-artifact-3484647443/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": "7aad2080-18a5-49f2-b211-7ef3644e59b3", "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-workflowzmk8h/series-workflowzmk8h-build-action-2634521921/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzmk8h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_recvmsg_parser","tcp_bpf_recvmsg","tcp_msg_wait_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"56ae867f-1d48-4c9b-ac36-55084c9e5fdf","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-16 04:56:04 +0000 UTC FinishedAt: 2026-07-16 04:56:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzmk8h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_recvmsg_parser","tcp_bpf_recvmsg","tcp_msg_wait_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"56ae867f-1d48-4c9b-ac36-55084c9e5fdf","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-16 04:56:04 +0000 UTC FinishedAt: 2026-07-16 04:56:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzmk8h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_recvmsg_parser","tcp_bpf_recvmsg","tcp_msg_wait_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"56ae867f-1d48-4c9b-ac36-55084c9e5fdf","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-16 04:56:04 +0000 UTC FinishedAt: 2026-07-16 04:56:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzmk8h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_recvmsg_parser","tcp_bpf_recvmsg","tcp_msg_wait_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"56ae867f-1d48-4c9b-ac36-55084c9e5fdf","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-16 04:56:04 +0000 UTC FinishedAt: 2026-07-16 04:56:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"56ae867f-1d48-4c9b-ac36-55084c9e5fdf","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowzmk8h/series-workflowzmk8h-convert-artifact-4007551754/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzmk8h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_recvmsg_parser","tcp_bpf_recvmsg","tcp_msg_wait_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"56ae867f-1d48-4c9b-ac36-55084c9e5fdf","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-16 04:56:25 +0000 UTC FinishedAt: 2026-07-16 04:58:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzmk8h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_recvmsg_parser","tcp_bpf_recvmsg","tcp_msg_wait_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"56ae867f-1d48-4c9b-ac36-55084c9e5fdf","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-16 04:56:25 +0000 UTC FinishedAt: 2026-07-16 04:58:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*7aad2080-18a5-49f2-b211-7ef3644e59b3,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-workflowzmk8h/series-workflowzmk8h-build-action-2634521921/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-workflowzmk8h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_recvmsg_parser","tcp_bpf_recvmsg","tcp_msg_wait_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"56ae867f-1d48-4c9b-ac36-55084c9e5fdf","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-16 04:58:27 +0000 UTC FinishedAt: 2026-07-16 04:58:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzmk8h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_recvmsg_parser","tcp_bpf_recvmsg","tcp_msg_wait_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"56ae867f-1d48-4c9b-ac36-55084c9e5fdf","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-16 04:58:27 +0000 UTC FinishedAt: 2026-07-16 04:58:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzmk8h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_recvmsg_parser","tcp_bpf_recvmsg","tcp_msg_wait_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"56ae867f-1d48-4c9b-ac36-55084c9e5fdf","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-16 04:58:27 +0000 UTC FinishedAt: 2026-07-16 05:40:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzmk8h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_recvmsg_parser","tcp_bpf_recvmsg","tcp_msg_wait_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"56ae867f-1d48-4c9b-ac36-55084c9e5fdf","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-16 04:58:27 +0000 UTC FinishedAt: 2026-07-16 05:40:56 +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:*f1c814af-cde8-4db6-b808-96eda9c87b3c,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-workflowzmk8h/series-workflowzmk8h-convert-artifact-4007551754/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": "704df40b-4a91-4d33-9b8d-85b9eb8d2d2a", "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-workflowzmk8h/series-workflowzmk8h-build-action-4196245806/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzmk8h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_recvmsg_parser","tcp_bpf_recvmsg","tcp_msg_wait_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"56ae867f-1d48-4c9b-ac36-55084c9e5fdf","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-16 04:58:27 +0000 UTC FinishedAt: 2026-07-16 05:40:46 +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:*f1c814af-cde8-4db6-b808-96eda9c87b3c,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-workflowzmk8h/series-workflowzmk8h-convert-artifact-4007551754/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": "704df40b-4a91-4d33-9b8d-85b9eb8d2d2a", "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-workflowzmk8h/series-workflowzmk8h-build-action-4196245806/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzmk8h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_recvmsg_parser","tcp_bpf_recvmsg","tcp_msg_wait_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"56ae867f-1d48-4c9b-ac36-55084c9e5fdf","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-16 05:40:56 +0000 UTC FinishedAt: 2026-07-16 05:40:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzmk8h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_recvmsg_parser","tcp_bpf_recvmsg","tcp_msg_wait_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"56ae867f-1d48-4c9b-ac36-55084c9e5fdf","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-16 05:40:56 +0000 UTC FinishedAt: 2026-07-16 05:40:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzmk8h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_recvmsg_parser","tcp_bpf_recvmsg","tcp_msg_wait_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"56ae867f-1d48-4c9b-ac36-55084c9e5fdf","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-16 05:40:56 +0000 UTC FinishedAt: 2026-07-16 05:43:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzmk8h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_recvmsg_parser","tcp_bpf_recvmsg","tcp_msg_wait_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"56ae867f-1d48-4c9b-ac36-55084c9e5fdf","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-16 05:40:56 +0000 UTC FinishedAt: 2026-07-16 05:42:57 +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:*704df40b-4a91-4d33-9b8d-85b9eb8d2d2a,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-workflowzmk8h/series-workflowzmk8h-build-action-4196245806/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-workflowzmk8h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_recvmsg_parser","tcp_bpf_recvmsg","tcp_msg_wait_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"56ae867f-1d48-4c9b-ac36-55084c9e5fdf","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-16 05:43:07 +0000 UTC FinishedAt: 2026-07-16 08:46:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzmk8h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_recvmsg_parser","tcp_bpf_recvmsg","tcp_msg_wait_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"56ae867f-1d48-4c9b-ac36-55084c9e5fdf","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-16 05:43:07 +0000 UTC FinishedAt: 2026-07-16 08:46:27 +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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_recvmsg_parser","tcp_bpf_recvmsg","tcp_msg_wait_data"],"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:*7aad2080-18a5-49f2-b211-7ef3644e59b3,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*704df40b-4a91-4d33-9b8d-85b9eb8d2d2a,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-workflowzmk8h/series-workflowzmk8h-build-action-2634521921/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-workflowzmk8h/series-workflowzmk8h-build-action-4196245806/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowzmk8h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_recvmsg_parser","tcp_bpf_recvmsg","tcp_msg_wait_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"56ae867f-1d48-4c9b-ac36-55084c9e5fdf","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-16 05:43:07 +0000 UTC FinishedAt: 2026-07-16 05:44:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzmk8h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_recvmsg_parser","tcp_bpf_recvmsg","tcp_msg_wait_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"56ae867f-1d48-4c9b-ac36-55084c9e5fdf","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-16 05:43:07 +0000 UTC FinishedAt: 2026-07-16 05:44:39 +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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_recvmsg_parser","tcp_bpf_recvmsg","tcp_msg_wait_data"],"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-workflowzmk8h/series-workflowzmk8h-convert-artifact-1854297759/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzmk8h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_recvmsg_parser","tcp_bpf_recvmsg","tcp_msg_wait_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"56ae867f-1d48-4c9b-ac36-55084c9e5fdf","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-16 05:43:07 +0000 UTC FinishedAt: 2026-07-16 05:43:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzmk8h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_recvmsg_parser","tcp_bpf_recvmsg","tcp_msg_wait_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"56ae867f-1d48-4c9b-ac36-55084c9e5fdf","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-16 05:43:07 +0000 UTC FinishedAt: 2026-07-16 05:43:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzmk8h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_recvmsg_parser","tcp_bpf_recvmsg","tcp_msg_wait_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"56ae867f-1d48-4c9b-ac36-55084c9e5fdf","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-16 05:43:07 +0000 UTC FinishedAt: 2026-07-16 05:43:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzmk8h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_recvmsg_parser","tcp_bpf_recvmsg","tcp_msg_wait_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"56ae867f-1d48-4c9b-ac36-55084c9e5fdf","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-16 05:44:59 +0000 UTC FinishedAt: 2026-07-16 08:46:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzmk8h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["tcp_bpf_recvmsg_parser","tcp_bpf_recvmsg","tcp_msg_wait_data"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d1f4b56417a3dc1a0600f960b14f46bd25eda89d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET_SOCK_MSG"],"series_id":"56ae867f-1d48-4c9b-ac36-55084c9e5fdf","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-16 05:44:59 +0000 UTC FinishedAt: 2026-07-16 08:46:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*7aad2080-18a5-49f2-b211-7ef3644e59b3,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*704df40b-4a91-4d33-9b8d-85b9eb8d2d2a,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-workflowzmk8h/series-workflowzmk8h-build-action-2634521921/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-workflowzmk8h/series-workflowzmk8h-build-action-4196245806/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-workflowzmk8h/series-workflowzmk8h-convert-artifact-1854297759/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,}