Name: series-workflowwt5bh Phase: Succeeded StartedAt: 2026-08-16 11:15:52 +0000 UTC FinishedAt: 2026-08-16 15:00:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwt5bh[0] Phase: Succeeded StartedAt: 2026-08-16 11:15:52 +0000 UTC FinishedAt: 2026-08-16 11:19:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwt5bh[0].run-triage Phase: Succeeded StartedAt: 2026-08-16 11:15:52 +0000 UTC FinishedAt: 2026-08-16 11:19:41 +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": "c93cbdb13f995f87b5356329b3fe551c80bb482d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "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": "c93cbdb13f995f87b5356329b3fe551c80bb482d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "8fc3091d-16ab-4ef6-aa07-77456a36db91" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_check" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-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+CgkJCTx0ZD4yMDI2LzA4LzE2IDExOjE4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2NoZWNrJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBCUEYgdmVyaWZpZXIgYnVnIHdoZXJlIGBzYXZlX2F1eF9wdHJfdHlwZSgpYCB3YXMgbm90IGNhbGxlZCBmb3IgYWxsIHBvaW50ZXIgdHlwZXMgZHVyaW5nIGF0b21pYyByZWFkLW1vZGlmeS13cml0ZSAoUk1XKSBpbnN0cnVjdGlvbiB2ZXJpZmljYXRpb24uIFRoaXMgb21pc3Npb24gYWxsb3dlZCBhIG1hbGljaW91cyBCUEYgcHJvZ3JhbSB0byB1c2UgdGhlIHNhbWUgYXRvbWljIGluc3RydWN0aW9uIHdpdGggZGlmZmVyZW50IHBvaW50ZXIgdHlwZXMgKGUuZy4sIG1peGluZyBgUFRSX1RPX0FSRU5BYCBhbmQgYFBUUl9UT19TVEFDS2AgaW4gZGlmZmVyZW50IGJyYW5jaGVzKS4gU3VjaCB2ZXJpZmllciBieXBhc3NlcyB0eXBpY2FsbHkgbGVhZCB0byBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbWVtb3J5IGNvcnJ1cHRpb24gZHVlIHRvIGluY29ycmVjdCBKSVQgY29tcGlsYXRpb24gb3IgbWlzc2luZyBydW50aW1lIGNoZWNrcy4gVGhlc2UgdHlwZXMgb2YgbWVtb3J5IHNhZmV0eSB2aW9sYXRpb25zIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXImIzM5O3MgaGFuZGxpbmcgb2YgYXRvbWljIHJlYWQtbW9kaWZ5LXdyaXRlIChSTVcpIGluc3RydWN0aW9ucyBieSBzYXZpbmcgdGhlIGF1eGlsaWFyeSBwb2ludGVyIHR5cGUgZm9yIGFsbCBkZXN0aW5hdGlvbiByZWdpc3RlcnMsIG5vdCBqdXN0IGFyZW5hIHJlZ2lzdGVycy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIGtlcm5lbCBCUEYgdmVyaWZpZXIgbG9naWMgdGhhdCBhZmZlY3RzIGhvdyBhdG9taWMgb3BlcmF0aW9ucyBhcmUgdmVyaWZpZWQgYW5kIGhhbmRsZWQsIHBhcnRpY3VsYXJseSB3aGVuIG1peGluZyBkaWZmZXJlbnQgcG9pbnRlciB0eXBlcyAobGlrZSBhcmVuYSBhbmQgc3RhY2sgcG9pbnRlcnMpIGluIHRoZSBzYW1lIGluc3RydWN0aW9uLiBUaGlzIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIHRoZSBicGYoKSBzeXNjYWxsIGFuZCBpcyB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDExOjE4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYzM3MDFhODFhYTU1ZThmOTgyNDgwODExZjY5NTRkZmIyOWFmMDEwMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gQXVnIDE2IDExOjE4OjIxIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuaW5kZXggZDE3ZjE0YjM1Yjc5Zi4uOTM0NjNjYWY1YzlhZCAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5AQCAtNjczOSwxMSAmIzQzOzY3MzksOSBAQCBzdGF0aWMgaW50IGNoZWNrX2F0b21pY19ybXcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG4gXG4tXHRpZiAoaXNfYXJlbmFfcmVnKGVudiwgaW5zbi1cdTAwM2Vkc3RfcmVnKSkge1xuLVx0XHRlcnIgPSBzYXZlX2F1eF9wdHJfdHlwZShlbnYsIFBUUl9UT19BUkVOQSwgZmFsc2UpO1xuLVx0XHRpZiAoZXJyKVxuLVx0XHRcdHJldHVybiBlcnI7XG4tXHR9XG4mIzQzO1x0ZXJyID0gc2F2ZV9hdXhfcHRyX3R5cGUoZW52LCBkc3RfcmVnLVx1MDAzZXR5cGUsIGZhbHNlKTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0cmV0dXJuIGVycjtcbiBcdC8qIENoZWNrIHdoZXRoZXIgd2UgY2FuIHdyaXRlIGludG8gdGhlIHNhbWUgbWVtb3J5LiAqL1xuIFx0ZXJyID0gY2hlY2tfbWVtX2FjY2VzcyhlbnYsIGVudi1cdTAwM2VpbnNuX2lkeCwgZHN0X3JlZywgYXJnbm9fZnJvbV9yZWcoaW5zbi1cdTAwM2Vkc3RfcmVnKSwgaW5zbi1cdTAwM2VvZmYsXG4gXHRcdFx0ICAgICAgIEJQRl9TSVpFKGluc24tXHUwMDNlY29kZSksIEJQRl9XUklURSwgLTEsIHRydWUsIGZhbHNlKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jXG5pbmRleCBiMjQxYmJjZjU0YThhLi5iMjJiYWIzMzMwMWFiIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jXG5AQCAtNjM3LDYgJiM0Mzs2MzcsNDUgQEAgaW50IG5vbl9hcmVuYV9wdHJfYWRkX3RvX2FyZW5hX3B0cih2b2lkICpjdHgpXG4gXG4gI2VuZGlmXG4gXG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2luc24gYWRkcl9zcGFjZV9jYXN0X2luc24gPSB7XG4mIzQzO1x0LmNvZGUgPSAweGJmLFxuJiM0MztcdC5kc3RfcmVnID0gQlBGX1JFR183LFxuJiM0MztcdC5zcmNfcmVnID0gQlBGX1JFR183LFxuJiM0MztcdC5vZmYgPSAxLFxuJiM0MztcdC5pbW0gPSAxLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7U0VDKFwmIzM0O3NvY2tldFwmIzM0OylcbiYjNDM7X19kZXNjcmlwdGlvbihcJiMzNDthcmVuYSBhbmQgc3RhY2sgYXRvbWljIGF0IHRoZSBzYW1lIGluc3RydWN0aW9uXCYjMzQ7KVxuJiM0MztfX2ZhaWx1cmUgX19tc2coXCYjMzQ7c2FtZSBpbnNuIGNhbm5vdCBiZSB1c2VkIHdpdGggZGlmZmVyZW50IHBvaW50ZXJzXCYjMzQ7KVxuJiM0MztfX2FyY2hfeDg2XzY0XG4mIzQzO19fbG9hZF9pZl9KSVRlZCgpXG4mIzQzO19fbmFrZWQgdm9pZCBtaXhlZF9hcmVuYV9zdGFja19hdG9taWModm9pZClcbiYjNDM7e1xuJiM0MztcdGFzbSB2b2xhdGlsZSAoXCYjMzQ7XHRcdFx0XHRcdFxcXG4mIzQzO1x0cjEgPSAlW2FyZW5hXSBsbDtcdFx0XHRcdFxcXG4mIzQzO1x0cjYgPSByMTA7XHRcdFx0XHRcdFxcXG4mIzQzO1x0cjYgJiM0Mzs9IC04O1x0XHRcdFx0XHRcXFxuJiM0MztcdHI5ID0gMDtcdFx0XHRcdFx0XFxcbiYjNDM7XHQqKHU2NCAqKShyNiAmIzQzOyAwKSA9IHI5O1x0XHRcdFxcXG4mIzQzO1x0cjcgPSA4MTkyO1x0XHRcdFx0XHRcXFxuJiM0MztcdC44Ynl0ZSAlW2FkZHJfc3BhY2VfY2FzdF07XHRcdFx0XFxcbiYjNDM7XHRjYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07XHRcdFx0XFxcbiYjNDM7XHRpZiB3MCAhPSAwIGdvdG8gMWY7XHRcdFx0XHRcXFxuJiM0MztcdHI4ID0gcjY7XHRcdFx0XHRcdFxcXG4mIzQzO1x0Z290byAyZjtcdFx0XHRcdFx0XFxcbiYjNDM7MTpcdHI4ID0gcjc7XHRcdFx0XHRcdFxcXG4mIzQzOzI6XHRyOSA9IDE7XHRcdFx0XHRcdFxcXG4mIzQzO1x0bG9jayAqKHU2NCAqKShyOCAmIzQzOyAwKSAmIzQzOz0gcjk7XHRcdFx0XFxcbiYjNDM7XHRyMCA9IDA7XHRcdFx0XHRcdFxcXG4mIzQzO1x0ZXhpdDtcdFx0XHRcdFx0XHRcXFxuJiM0MztcJiMzNDtcdDpcbiYjNDM7XHQ6IF9faW1tX2FkZHIoYXJlbmEpLFxuJiM0MztcdCAgX19pbW1faW5zbihhZGRyX3NwYWNlX2Nhc3QsIGFkZHJfc3BhY2VfY2FzdF9pbnNuKSxcbiYjNDM7XHQgIF9faW1tKGJwZl9nZXRfcHJhbmRvbV91MzIpXG4mIzQzO1x0OiBfX2Nsb2JiZXJfYWxsKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgX19ub2lubGluZVxuIHUzMiBfX2FyZW5hICpjaGVja19hcmVuYV9hcmdfbm9uZ2xvYmFsKHUzMiBfX2FyZW5hICphcmcpXG4ge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDExOjE4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9jaGVjayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyJiMzOTtzIGhhbmRsaW5nIG9mIGF0b21pYyByZWFkLW1vZGlmeS13cml0ZSAoUk1XKSBpbnN0cnVjdGlvbnMgYnkgc2F2aW5nIHRoZSBhdXhpbGlhcnkgcG9pbnRlciB0eXBlIGZvciBhbGwgZGVzdGluYXRpb24gcmVnaXN0ZXJzLCBub3QganVzdCBhcmVuYSByZWdpc3RlcnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBrZXJuZWwgQlBGIHZlcmlmaWVyIGxvZ2ljIHRoYXQgYWZmZWN0cyBob3cgYXRvbWljIG9wZXJhdGlvbnMgYXJlIHZlcmlmaWVkIGFuZCBoYW5kbGVkLCBwYXJ0aWN1bGFybHkgd2hlbiBtaXhpbmcgZGlmZmVyZW50IHBvaW50ZXIgdHlwZXMgKGxpa2UgYXJlbmEgYW5kIHN0YWNrIHBvaW50ZXJzKSBpbiB0aGUgc2FtZSBpbnN0cnVjdGlvbi4gVGhpcyBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSB0aGUgYnBmKCkgc3lzY2FsbCBhbmQgaXMgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGMzNzAxYTgxYWE1NWU4Zjk4MjQ4MDgxMWY2OTU0ZGZiMjlhZjAxMDEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIEF1ZyAxNiAxMToxODoyMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuYwppbmRleCBkMTdmMTRiMzViNzlmLi45MzQ2M2NhZjVjOWFkIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi92ZXJpZmllci5jCkBAIC02NzM5LDExICYjNDM7NjczOSw5IEBAIHN0YXRpYyBpbnQgY2hlY2tfYXRvbWljX3JtdyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LAogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKLQlpZiAoaXNfYXJlbmFfcmVnKGVudiwgaW5zbi0mZ3Q7ZHN0X3JlZykpIHsKLQkJZXJyID0gc2F2ZV9hdXhfcHRyX3R5cGUoZW52LCBQVFJfVE9fQVJFTkEsIGZhbHNlKTsKLQkJaWYgKGVycikKLQkJCXJldHVybiBlcnI7Ci0JfQomIzQzOwllcnIgPSBzYXZlX2F1eF9wdHJfdHlwZShlbnYsIGRzdF9yZWctJmd0O3R5cGUsIGZhbHNlKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCXJldHVybiBlcnI7CiAJLyogQ2hlY2sgd2hldGhlciB3ZSBjYW4gd3JpdGUgaW50byB0aGUgc2FtZSBtZW1vcnkuICovCiAJZXJyID0gY2hlY2tfbWVtX2FjY2VzcyhlbnYsIGVudi0mZ3Q7aW5zbl9pZHgsIGRzdF9yZWcsIGFyZ25vX2Zyb21fcmVnKGluc24tJmd0O2RzdF9yZWcpLCBpbnNuLSZndDtvZmYsCiAJCQkgICAgICAgQlBGX1NJWkUoaW5zbi0mZ3Q7Y29kZSksIEJQRl9XUklURSwgLTEsIHRydWUsIGZhbHNlKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMKaW5kZXggYjI0MWJiY2Y1NGE4YS4uYjIyYmFiMzMzMDFhYiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMKQEAgLTYzNyw2ICYjNDM7NjM3LDQ1IEBAIGludCBub25fYXJlbmFfcHRyX2FkZF90b19hcmVuYV9wdHIodm9pZCAqY3R4KQogCiAjZW5kaWYKIAomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2luc24gYWRkcl9zcGFjZV9jYXN0X2luc24gPSB7CiYjNDM7CS5jb2RlID0gMHhiZiwKJiM0MzsJLmRzdF9yZWcgPSBCUEZfUkVHXzcsCiYjNDM7CS5zcmNfcmVnID0gQlBGX1JFR183LAomIzQzOwkub2ZmID0gMSwKJiM0MzsJLmltbSA9IDEsCiYjNDM7fTsKJiM0MzsKJiM0MztTRUMoJiMzNDtzb2NrZXQmIzM0OykKJiM0MztfX2Rlc2NyaXB0aW9uKCYjMzQ7YXJlbmEgYW5kIHN0YWNrIGF0b21pYyBhdCB0aGUgc2FtZSBpbnN0cnVjdGlvbiYjMzQ7KQomIzQzO19fZmFpbHVyZSBfX21zZygmIzM0O3NhbWUgaW5zbiBjYW5ub3QgYmUgdXNlZCB3aXRoIGRpZmZlcmVudCBwb2ludGVycyYjMzQ7KQomIzQzO19fYXJjaF94ODZfNjQKJiM0MztfX2xvYWRfaWZfSklUZWQoKQomIzQzO19fbmFrZWQgdm9pZCBtaXhlZF9hcmVuYV9zdGFja19hdG9taWModm9pZCkKJiM0Mzt7CiYjNDM7CWFzbSB2b2xhdGlsZSAoJiMzNDsJCQkJCVwKJiM0MzsJcjEgPSAlW2FyZW5hXSBsbDsJCQkJXAomIzQzOwlyNiA9IHIxMDsJCQkJCVwKJiM0MzsJcjYgJiM0Mzs9IC04OwkJCQkJXAomIzQzOwlyOSA9IDA7CQkJCQlcCiYjNDM7CSoodTY0ICopKHI2ICYjNDM7IDApID0gcjk7CQkJXAomIzQzOwlyNyA9IDgxOTI7CQkJCQlcCiYjNDM7CS44Ynl0ZSAlW2FkZHJfc3BhY2VfY2FzdF07CQkJXAomIzQzOwljYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07CQkJXAomIzQzOwlpZiB3MCAhPSAwIGdvdG8gMWY7CQkJCVwKJiM0MzsJcjggPSByNjsJCQkJCVwKJiM0MzsJZ290byAyZjsJCQkJCVwKJiM0MzsxOglyOCA9IHI3OwkJCQkJXAomIzQzOzI6CXI5ID0gMTsJCQkJCVwKJiM0MzsJbG9jayAqKHU2NCAqKShyOCAmIzQzOyAwKSAmIzQzOz0gcjk7CQkJXAomIzQzOwlyMCA9IDA7CQkJCQlcCiYjNDM7CWV4aXQ7CQkJCQkJXAomIzQzOyYjMzQ7CToKJiM0MzsJOiBfX2ltbV9hZGRyKGFyZW5hKSwKJiM0MzsJICBfX2ltbV9pbnNuKGFkZHJfc3BhY2VfY2FzdCwgYWRkcl9zcGFjZV9jYXN0X2luc24pLAomIzQzOwkgIF9faW1tKGJwZl9nZXRfcHJhbmRvbV91MzIpCiYjNDM7CTogX19jbG9iYmVyX2FsbCk7CiYjNDM7fQomIzQzOwogc3RhdGljIF9fbm9pbmxpbmUKIHUzMiBfX2FyZW5hICpjaGVja19hcmVuYV9hcmdfbm9uZ2xvYmFsKHUzMiBfX2FyZW5hICphcmcpCiB7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDExOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3NTEKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzMDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgQlBGIFZlcmlmaWVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIHRoZSBCUEYgdmVyaWZpZXIsIHNwZWNpZmljYWxseSB3aXRoaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuIFRoZSBjaGFuZ2UgaXMgZm9jdXNlZCBvbiB0aGUgYGNoZWNrX2F0b21pY19ybXdgIGZ1bmN0aW9uLiBJbml0aWFsbHksIGl0IHdhcyBjb25kaXRpb25hbGx5IHNhdmluZyB0aGUgYXV4aWxpYXJ5IHBvaW50ZXIgdHlwZSwgb25seSBpZiB0aGUgZGVzdGluYXRpb24gcmVnaXN0ZXIgKGBpbnNuLSZndDtkc3RfcmVnYCkgd2FzIGFuIGFyZW5hIHJlZ2lzdGVyLiBOb3csIHRoZSBwYXRjaCB1bmNvbmRpdGlvbmFsbHkgc2F2ZXMgdGhlIHR5cGUgdXNpbmcgYGRzdF9yZWctJmd0O3R5cGVgLiBUaGF0JiMzOTtzIGEgZGVmaW5pdGUgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gaG93IHRoZSB2ZXJpZmllciBvcGVyYXRlcyBvbiBhdG9taWMgUk1XIGluc3RydWN0aW9ucy4gSSBuZWVkIHRvIGJlIHByZWNpc2UgYWJvdXQgdGhhdDogaXQgYWZmZWN0cyB0aGUgcG9pbnRlciAqdHlwZSogdXNlZCBpbiB0aGVzZSBhdG9taWMgb3BlcmF0aW9ucywgd2hpY2ggaXMgY29yZSBmdW5jdGlvbmFsaXR5IGluIHRoaXMgdmVyaWZpZXIuCgpUaGUgdGVzdCBjYXNlIGFkZGVkLCBgbWl4ZWRfYXJlbmFfc3RhY2tfYXRvbWljYCwgc2VlbXMgZGVzaWduZWQgdG8gaGlnaGxpZ2h0IHRoaXMgY2hhbmdlLiBJdCYjMzk7cyBhdHRlbXB0aW5nIHRvIHVzZSB0aGUgc2FtZSBpbnN0cnVjdGlvbiB3aXRoIGRpZmZlcmVudCBwb2ludGVyIHR5cGVzOiBhcmVuYSBhbmQgc3RhY2sgcG9pbnRlcnMuIEEgY2xhc3NpYyBjb3ZlcmFnZSB0ZXN0LgoKR2l2ZW4gdGhhdCB0aGlzIHRvdWNoZXMgdGhlIGNvcmUgQlBGIHZlcmlmaWVyLCBhbmQgaW1wYWN0cyBob3cgYXRvbWljIGluc3RydWN0aW9ucyBhcmUgdmFsaWRhdGVkLCB0aGlzIGlzICphYnNvbHV0ZWx5KiBzb21ldGhpbmcgdGhhdCB3YXJyYW50cyBjYXJlZnVsIHNjcnV0aW55LiBXb3J0aHkgb2YgZnV6emluZywgbm8gZG91YnQuIFRoZSBrZXkgZnVuY3Rpb25zIHRvIGludmVzdGlnYXRlIGhlcmUgYXJlIGBzYXZlX2F1eF9wdHJfdHlwZWAgYW5kIGBjaGVja19hdG9taWNfcm13YCB3aXRoaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuIEkgc2hvdWxkIGFsc28gZG91YmxlIGNoZWNrIHRoYXQgYEJQRl9TWVNDQUxMYCBpcyBlbmFibGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDExOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NoZWNrX2F0b21pY19ybXcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jPTY2MzA9c3RhdGljIGludCBjaGVja19zdG9yZV9yZWcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NjY3LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjY2Njg6c3RhdGljIGludCBjaGVja19hdG9taWNfcm13KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjY2OS1cdFx0XHQgICAgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz02NzkxPXN0YXRpYyBpbnQgY2hlY2tfYXRvbWljKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjgwMy1cdGNhc2UgQlBGX0NNUFhDSEc6XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjgwNDpcdFx0cmV0dXJuIGNoZWNrX2F0b21pY19ybXcoZW52LCBpbnNuKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02ODA1LVx0Y2FzZSBCUEZfTE9BRF9BQ1E6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMTE6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzY0MQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIHRoZSBBdG9taWMgUk1XIENoZWNrKioKCkFscmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCBgY2hlY2tfYXRvbWljX3Jtd2AsIGFuZCBpdCYjMzk7cyBkZWZpbmVkIGFzIGEgc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gSSBpbW1lZGlhdGVseSBrbm93IHRoYXQgbWVhbnMgaXQgaGFzIGludGVybmFsIGxpbmthZ2Ugd2l0aGluIHRoZSBjdXJyZW50IHRyYW5zbGF0aW9uIHVuaXQuIEl0JiMzOTtzIG5vdCB2aXNpYmxlIG91dHNpZGUgb2YgdGhlIGZpbGUgaXQmIzM5O3MgZGVjbGFyZWQgaW4sIHdoaWNoIHN1Z2dlc3RzIGl0JiMzOTtzIGEgaGVscGVyIGZ1bmN0aW9uIHNwZWNpZmljYWxseSBmb3IgdGhpcyBtb2R1bGUuIE5vdywgSSBzZWUgaXQmIzM5O3MgY2FsbGVkIGZyb20gYGNoZWNrX2F0b21pY2AuIFRoYXQgZ2l2ZXMgbWUgdGhlIGltbWVkaWF0ZSBjb250ZXh0LiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgYGNoZWNrX2F0b21pY2AgdG8gZnVsbHkgZ3Jhc3Agd2hhdCBgY2hlY2tfYXRvbWljX3Jtd2AgaXMgZG9pbmcgYW5kIGl0cyBwdXJwb3NlIHdpdGhpbiB0aGUgbGFyZ2VyIHNjaGVtZS4gTGV0JiMzOTtzIGRlbHZlIGludG8gdGhlIGxvZ2ljIG9mIGBjaGVja19hdG9taWNgIGFuZCBzZWUgd2hhdCYjMzk7cyBnb2luZyBvbi4gSSYjMzk7bSBndWVzc2luZyBgY2hlY2tfYXRvbWljX3Jtd2AgaGFuZGxlcyBhIHNwZWNpZmljIHR5cGUgb2YgYXRvbWljIG9wZXJhdGlvbiB3aXRoaW4gdGhhdCBicm9hZGVyIGBjaGVja19hdG9taWNgIGZ1bmN0aW9uLiBJJiMzOTtsbCBmb2N1cyBvbiBob3cgdGhleSBpbnRlcmFjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAxMToxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjaGVja19hdG9taWMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jPTY2MzA9c3RhdGljIGludCBjaGVja19zdG9yZV9yZWcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NjY3LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjY2Njg6c3RhdGljIGludCBjaGVja19hdG9taWNfcm13KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjY2OS1cdFx0XHQgICAgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NzUyLVxua2VybmVsL2JwZi92ZXJpZmllci5jOjY3NTM6c3RhdGljIGludCBjaGVja19hdG9taWNfbG9hZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY3NTQtXHRcdFx0ICAgICBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTY3NzEtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6Njc3MjpzdGF0aWMgaW50IGNoZWNrX2F0b21pY19zdG9yZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY3NzMtXHRcdFx0ICAgICAgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NzkwLVxua2VybmVsL2JwZi92ZXJpZmllci5jOjY3OTE6c3RhdGljIGludCBjaGVja19hdG9taWMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTY3OTIte1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02ODAzLVx0Y2FzZSBCUEZfQ01QWENIRzpcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2ODA0Olx0XHRyZXR1cm4gY2hlY2tfYXRvbWljX3JtdyhlbnYsIGluc24pO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTY4MDUtXHRjYXNlIEJQRl9MT0FEX0FDUTpcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjgxMC1cdFx0fVxua2VybmVsL2JwZi92ZXJpZmllci5jOjY4MTE6XHRcdHJldHVybiBjaGVja19hdG9taWNfbG9hZChlbnYsIGluc24pO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTY4MTItXHRjYXNlIEJQRl9TVE9SRV9SRUw6XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTY4MTctXHRcdH1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2ODE4Olx0XHRyZXR1cm4gY2hlY2tfYXRvbWljX3N0b3JlKGVudiwgaW5zbik7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjgxOS1cdGRlZmF1bHQ6XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE4MDcwPXN0YXRpYyBpbnQgZG9fY2hlY2tfaW5zbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBib29sICpkb19wcmludF9zdGF0ZSlcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTgwODctXHRcdGlmIChCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9BVE9NSUMpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTgwODg6XHRcdFx0cmV0dXJuIGNoZWNrX2F0b21pYyhlbnYsIGluc24pO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE4MDg5LVx0XHRyZXR1cm4gY2hlY2tfc3RvcmVfcmVnKGVudiwgaW5zbiwgZmFsc2UpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDExOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ2MzcKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhpcyBjb2RlOgoKKipGaW5kaW5nIHRoZSBWZXJpZmllciYjMzk7cyBFbnRyeSBQb2ludCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIHZlcmlmaWNhdGlvbiBwcm9jZXNzICphY3R1YWxseSogYmVnaW5zLiBJIHNlZSBhIGZldyBzdGF0aWMgZnVuY3Rpb25zIGhlcmUgdGhhdCBsb29rIHBvdGVudGlhbGx5IGltcG9ydGFudDogYGNoZWNrX2F0b21pY2AsIGBkb19jaGVja19pbnNuYCwgYW5kIHRoZW4gYGRvX2NoZWNrX21haW5gIG9yIGp1c3QgYGRvX2NoZWNrYC4gVGhlIGZhY3QgdGhhdCBgY2hlY2tfYXRvbWljYCBhbmQgYGRvX2NoZWNrX2luc25gIGFyZSBzdGF0aWMgc3VnZ2VzdHMgdGhleSBhcmUgaW50ZXJuYWwgaGVscGVycywgbGlrZWx5IHBhcnQgb2YgYSBsYXJnZXIgZnVuY3Rpb24uIE15IGd1dCBzYXlzIHRoYXQgYGRvX2NoZWNrX21haW5gIG9yIGBkb19jaGVja2AgaXMgKnByb2JhYmx5KiB0aGUgdG9wLWxldmVsIGVudHJ5IHBvaW50LCB0aGUgZnVuY3Rpb24gdGhhdCBraWNrcyBvZmYgdGhlIHdob2xlIHZlcmlmaWNhdGlvbiBwcm9jZXNzLiBUaW1lIHRvIGRpZyBpbiBhbmQgY29uZmlybSB0aGF0IGFzc3VtcHRpb24uIExldCYjMzk7cyBzZWUgaWYgSSBjYW4gcGlucG9pbnQgdGhhdCBtYWluIGVudHJ5IHBvaW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDExOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RvX2NoZWNrX2luc24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jPTE4MDEyPXN0YXRpYyBpbnQgY2hlY2tfaW5kaXJlY3RfanVtcChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4MDY5LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjE4MDcwOnN0YXRpYyBpbnQgZG9fY2hlY2tfaW5zbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBib29sICpkb19wcmludF9zdGF0ZSlcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODA3MS17XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE4MTgwPXN0YXRpYyBpbnQgZG9fY2hlY2soc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTgzMjktXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTgzMzA6XHRcdGVyciA9IGRvX2NoZWNrX2luc24oZW52LCBcdTAwMjZkb19wcmludF9zdGF0ZSk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTgzMzEtXHRcdGlmIChlcnJvcl9yZWNvdmVyYWJsZV93aXRoX25vc3BlYyhlcnIpIFx1MDAyNlx1MDAyNiBzdGF0ZS1cdTAwM2VzcGVjdWxhdGl2ZSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDExOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxNzAKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIGNvZGU6CgoqKlN0YXRpYyBGdW5jdGlvbiBBbmFseXNpcyoqCgpPa2F5LCBzbyBgZG9fY2hlY2tgIGlzIGFub3RoZXIgb25lIG9mIHRoZXNlIHN0YXRpYyBmdW5jdGlvbnMuIFRoYXQmIzM5O3MgYSBrZXkgZGV0YWlsIHRvIG5vdGUsIGJlY2F1c2UgaXQgbWVhbnMgaXRzIHNjb3BlIGlzIGxpbWl0ZWQgdG8gdGhpcyBjb21waWxhdGlvbiB1bml0LiBUaGlzIGNvbnRleHQgaXMgaW1wb3J0YW50IGJlY2F1c2UgaXQgbmFycm93cyBkb3duIHRoZSBwbGFjZXMgd2hlcmUgSSBuZWVkIHRvIGxvb2sgZm9yIGNhbGxzIG9yIHBvdGVudGlhbCBpbnRlcmFjdGlvbnMuIE5vdywgdGhlIG5leHQgc3RlcCBpbiBteSBtZW50YWwgcHJvY2VzcyBpcyB0byBmaWd1cmUgb3V0IGhvdyB0aGlzIGZ1bmN0aW9uIGZpdHMgaW50byB0aGUgb3ZlcmFsbCBzY2hlbWUuIExldCYjMzk7cyBzZWUuLi4gd2hhdCYjMzk7cyBpdCBjb25uZWN0ZWQgdG8/IEkgbmVlZCB0byB0cmFjayBkb3duIHRoZSBgYnBmX2NoZWNrYCBmdW5jdGlvbi4gVGhhdCBzZWVtcyBsaWtlIHRoZSBsb2dpY2FsIG5leHQgc3RlcCB0byB1bmRlcnN0YW5kIHRoZSBicm9hZGVyIGltcGxpY2F0aW9ucyBvZiBgZG9fY2hlY2tgLiBJJiMzOTtsbCBzdGFydCB3aXRoIGEgc2VhcmNoIG9yIGNyb3NzLXJlZmVyZW5jZSBmb3IgYGJwZl9jaGVja2AgYW5kIGFuYWx5emUgaXRzIHJlbGF0aW9uc2hpcCB0byBgZG9fY2hlY2tgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAxMToxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfY2hlY2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jPTU4PXN0YXRpYyBib29sIGJwZl9nbG9iYWxfcGVyY3B1X21hX3NldDtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy01OS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2MDovKiBicGZfY2hlY2soKSBpcyBhIHN0YXRpYyBjb2RlIGFuYWx5emVyIHRoYXQgd2Fsa3MgZUJQRiBwcm9ncmFtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjEtICogaW5zdHJ1Y3Rpb24gYnkgaW5zdHJ1Y3Rpb24gYW5kIHVwZGF0ZXMgcmVnaXN0ZXIvc3RhY2sgc3RhdGUuXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTEyNTMzPXN0YXRpYyBpbnQgcHJvY2Vzc19rZl9hcmdfcHRyX3RvX3JidHJlZV9ub2RlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyNTQ0LSAqIExTTSBob29rcyBhbmQgaXRlcnMgKGJvdGggc2xlZXBhYmxlIGFuZCBub24tc2xlZXBhYmxlKSBhcmUgc2FmZS5cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMjU0NTogKiBBbnkgc2xlZXBhYmxlIHByb2dzIGFyZSBhbHNvIHNhZmUgc2luY2UgYnBmX2NoZWNrX2F0dGFjaF90YXJnZXQoKSBlbmZvcmNlXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTI1NDYtICogdGhlbSBjYW4gb25seSBiZSBhdHRhY2hlZCB0byBzb21lIHNwZWNpZmljIGhvb2sgcG9pbnRzLlxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xOTg2Nj1zdGF0aWMgYm9vbCBhdHRhY2hfdXNlc190cmFtcG9saW5lX3JldHZhbChlbnVtIGJwZl9hdHRhY2hfdHlwZSB0eXBlKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTg3OS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTg4MDppbnQgYnBmX2NoZWNrX2F0dGFjaF90YXJnZXQoc3RydWN0IGJwZl92ZXJpZmllcl9sb2cgKmxvZyxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTg4MS1cdFx0XHQgICAgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0yMDMwMz1zdGF0aWMgaW50IGNoZWNrX2F0dGFjaF9idGZfaWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjAzMzMtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjAzMzQ6XHRyZXQgPSBicGZfY2hlY2tfYXR0YWNoX3RhcmdldChcdTAwMjZlbnYtXHUwMDNlbG9nLCBwcm9nLCB0Z3RfcHJvZywgYnRmX2lkLCBcdTAwMjZ0Z3RfaW5mbyk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjAzMzUtXHRpZiAocmV0KVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDQwMi1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMDQwMzppbnQgYnBmX2NoZWNrX2F0dGFjaF9idGZfaWRfbXVsdGkoc3RydWN0IGJ0ZiAqYnRmLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBidGZfaWQsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjA0MDQtXHRcdFx0XHQgIHN0cnVjdCBicGZfYXR0YWNoX3RhcmdldF9pbmZvICp0Z3RfaW5mbylcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MjA4MzY9c3RhdGljIGVudW0gYnBmX3NpZ19rZXlyaW5nIGJwZl9jbGFzc2lmeV9rZXlyaW5nKHMzMiBrZXlyaW5nX2lkKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDg1MC0vKlxua2VybmVsL2JwZi92ZXJpZmllci5jOjIwODUxOiAqIFZlcmlmeSB0aGUgUEtDUyM3IHNpZ25hdHVyZSBvZiBhIGxvYWRlZCBwcm9ncmFtLiBDYWxsZWQgZnJvbSBicGZfY2hlY2soKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwODUyLSAqIG9uY2UgdGhlIHByb2dyYW0mIzM5O3MgbWV0YWRhdGEgbWFwcyBoYXZlIGJlZW4gcmVzb2x2ZWQgaW50byB1c2VkX21hcHMsIHNvXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTIwODU5PXN0YXRpYyBpbnQgYnBmX3Byb2dfdmVyaWZ5X3NpZ25hdHVyZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDk3NS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMDk3NjppbnQgYnBmX2NoZWNrKHN0cnVjdCBicGZfcHJvZyAqKnByb2csIHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cixcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDk3Ny1cdCAgICAgIHN0cnVjdCBicGZfbG9nX2F0dHIgKmF0dHJfbG9nKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDk5MC1cdC8qICYjMzk7c3RydWN0IGJwZl92ZXJpZmllcl9lbnYmIzM5OyBjYW4gYmUgZ2xvYmFsLCBidXQgc2luY2UgaXQmIzM5O3Mgbm90IHNtYWxsLFxua2VybmVsL2JwZi92ZXJpZmllci5jOjIwOTkxOlx0ICogYWxsb2NhdGUvZnJlZSBpdCBldmVyeSB0aW1lIGJwZl9jaGVjaygpIGlzIGNhbGxlZFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwOTkyLVx0ICovXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTIxMTAxLVx0LyogVmFsaWRhdGUgQlRGIGFnYWluc3QgdGhlIGNvbXBsZXRlIHN1YnByb2dyYW0gbGF5b3V0IGFuZCBhcHBseSBDTy1SRS4gKi9cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMTEwMjpcdHJldCA9IGJwZl9jaGVja19idGZfaW5mbyhlbnYsIGF0dHIsIHVhdHRyKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMTEwMy1cdGlmIChyZXQgXHUwMDNjIDApXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTIxMTIxLVxua2VybmVsL2JwZi92ZXJpZmllci5jOjIxMTIyOlx0cmV0ID0gYnBmX2NoZWNrX2NmZyhlbnYpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTIxMTIzLVx0aWYgKHJldCBcdTAwM2MgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMTE6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjUxNwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBDb3JlIExvZ2ljOiBUaGUgYGJwZl9jaGVja2AgRnVuY3Rpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGNvZGUsIGFuZCB0aGUgY2VudHJhbCBmb2N1cyBoZXJlIHNlZW1zIHRvIGJlIGBicGZfY2hlY2tgLiBJdCBtYWtlcyBzZW5zZTsgYXMgdGhlIG5hbWUgaW1wbGllcywgaXQmIzM5O3MgbGlrZWx5IHRoZSBwcmltYXJ5IGdhdGVrZWVwZXIgZm9yIHZlcmlmeWluZyBCUEYgcHJvZ3JhbXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBnbyBkaXJlY3RseSB0byB0aGlzIGZ1bmN0aW9uLiBJdCYjMzk7cyB0aGUgbW9zdCBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIHRoZSBjb3JlIHZhbGlkYXRpb24gcHJvY2Vzcy4gVGhlIGVudGlyZSBpbnRlZ3JpdHkgb2YgdGhlIHN5c3RlbSBoaW5nZXMgb24gdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMTE6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW50IGJwZl9jaGVjayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTk4NjY9c3RhdGljIGJvb2wgYXR0YWNoX3VzZXNfdHJhbXBvbGluZV9yZXR2YWwoZW51bSBicGZfYXR0YWNoX3R5cGUgdHlwZSlcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk4NzktXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk4ODA6aW50IGJwZl9jaGVja19hdHRhY2hfdGFyZ2V0KHN0cnVjdCBicGZfdmVyaWZpZXJfbG9nICpsb2csXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk4ODEtXHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MjAzMDM9c3RhdGljIGludCBjaGVja19hdHRhY2hfYnRmX2lkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwNDAyLVxua2VybmVsL2JwZi92ZXJpZmllci5jOjIwNDAzOmludCBicGZfY2hlY2tfYXR0YWNoX2J0Zl9pZF9tdWx0aShzdHJ1Y3QgYnRmICpidGYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyIGJ0Zl9pZCxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDQwNC1cdFx0XHRcdCAgc3RydWN0IGJwZl9hdHRhY2hfdGFyZ2V0X2luZm8gKnRndF9pbmZvKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0yMDg1OT1zdGF0aWMgaW50IGJwZl9wcm9nX3ZlcmlmeV9zaWduYXR1cmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjA5NzUtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjA5NzY6aW50IGJwZl9jaGVjayhzdHJ1Y3QgYnBmX3Byb2cgKipwcm9nLCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjA5NzctXHQgICAgICBzdHJ1Y3QgYnBmX2xvZ19hdHRyICphdHRyX2xvZylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMTE6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzA5NwoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDE2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBGdXp6aW5nIFN0cmF0ZWd5OiBJbml0aWFsIFRob3VnaHRzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgdG8gYXBwcm9hY2ggZnV6emluZyB0aGlzIEJQRiBjb2RlLiBUaGUgdGFzayBmb2N1c2VzIG1lIG9uIGBicGZfY2hlY2tgIC0gdGhhdCYjMzk7cyB0aGUgcHJpbWFyeSBmdW5jdGlvbiBpbiB0aGUgc3BvdGxpZ2h0LiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGNhc3QgYSB3aWRlciBuZXQuIEFyZSB0aGVyZSBvdGhlciBmdW5jdGlvbnMgaW4gdGhlIHZpY2luaXR5IHRoYXQgbWlnaHQgYWxzbyBiZW5lZml0IGZyb20gZnV6emluZz8gYGJwZl9jaGVja2AgZmVlbHMgcHJldHR5IGdlbmVyaWMsIHdoaWNoIGNvdWxkIG1ha2UgaXQgYSBsZXNzLXRoYW4taWRlYWwgdGFyZ2V0IGZvciBza2V3aW5nIHRoZSB0ZXN0IGRpc3RyaWJ1dGlvbi4gVGhlIGNvZGUgY2hhbmdlIEkmIzM5O20gaW52ZXN0aWdhdGluZyBpcyBzcGVjaWZpY2FsbHkgYXJvdW5kIGBjaGVja19hdG9taWNfcm13YCwgc28gaXMgdGhlcmUgYW5vdGhlciBmdW5jdGlvbiB0aGF0IGludGVyYWN0cyB3aXRoIGl0IGRpcmVjdGx5PwoKUGVyaGFwcyBgYnBmX2NoZWNrYCBpcyB0aGUgYmVzdCBjaG9pY2UgYWZ0ZXIgYWxsLiBXYWl0LCB0aGUgaW5zdHJ1Y3Rpb25zLi4uIGFoLCBoZXJlIHdlIGdvLiBUaGUgZ3VpZGFuY2UgZXhwbGljaXRseSB0ZWxscyBtZSB0byBhdm9pZCBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucywgZmF2b3Jpbmcgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMuIFRoaXMgbWFrZXMgc2Vuc2UgZnJvbSBhIHRlc3RpbmcgcGVyc3BlY3RpdmUuCgpBbHJpZ2h0LCBgYnBmX2NoZWNrYCAqaXMqIGFuIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9uLiBCdXQganVzdCB0byBiZSB0aG9yb3VnaCwgSSBzaG91bGQgbG9vayBpbnRvIHRoZSBzb3VyY2UgZmlsZSB0byBzZWUgaWYgdGhlcmUgaXMgYW5vdGhlciBleHBvc2VkIGZ1bmN0aW9uIHRoYXQgbWF5IGFsc28gYmUgYSBnb29kIHRhcmdldC4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayBga2VybmVsL2JwZi92ZXJpZmllci5jYCBmb3IgZXhwb3J0ZWQgZnVuY3Rpb25zLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGF2YWlsYWJsZSBvcHRpb25zIGFuZCBlbnN1cmUgSSYjMzk7bSBtYWtpbmcgdGhlIG1vc3QgaW5mb3JtZWQgZGVjaXNpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDExOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDExOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc1OTgKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgQlBGIEZ1bmN0aW9uYWxpdHkqKgoKT2theSwgc28gSSBuZWVkIHRvIGRpZyBpbnRvIGhvdyBgYnBmX2NoZWNrYCBpcyBiZWluZyB1c2VkIHdpdGhpbiB0aGUga2VybmVsJiMzOTtzIEJQRiBpbmZyYXN0cnVjdHVyZS4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBnbyBzdHJhaWdodCB0byB0aGUgc291cmNlLiBTcGVjaWZpY2FsbHksIEkgc2hvdWxkIGxvb2sgd2l0aGluIHRoZSBga2VybmVsL2JwZi9gIGRpcmVjdG9yeS4gVGhhdCYjMzk7cyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBodW50aW5nIGZvciB0aGUgZGVmaW5pdGlvbiBhbmQgYW55IHNpZ25pZmljYW50IHVzZXMgb2YgdGhhdCBmdW5jdGlvbi4gSSYjMzk7bSBleHBlY3RpbmcgdGhpcyB3aWxsIGxpa2VseSByZXZlYWwgY3JpdGljYWwgcGFydHMgb2YgdGhlIHZlcmlmaWVyIG9yIHBlcmhhcHMgc2VjdXJpdHkgY2hlY2tzLiBJJiMzOTttIHJlYWxseSBsb29raW5nIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bmN0aW9uJiMzOTtzIHB1cnBvc2UsIGhvdyBpdCYjMzk7cyBjYWxsZWQsIGFuZCB3aGF0IGl0cyByZXR1cm4gdmFsdWVzIHNpZ25pZnkgaW4gdGhlIGNvbnRleHQgb2YgQlBGIHByb2dyYW0gZXhlY3V0aW9uIGFuZCB2YWxpZGF0aW9uLiBIb3BlZnVsbHksIHRoZSBzZWFyY2ggcmVzdWx0cyB3aWxsIHBvaW50IG1lIHRvd2FyZCBrZXkgYXJlYXMgZm9yIGRlZXBlciBpbnZlc3RpZ2F0aW9uLCBsaWtlIHJlbGF0ZWQgZXJyb3IgaGFuZGxpbmcgb3Igc3BlY2lmaWMgc2VjdXJpdHkgY29uc3RyYWludHMgaXQgZW5mb3JjZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDExOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9jaGVjayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvYnBmX2l0ZXIuYz01MDQ9aW50IGJwZl9pdGVyX2xpbmtfYXR0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cixcbi0tXG5rZXJuZWwvYnBmL2JwZl9pdGVyLmMtNTI1LVx0aWYgKCFicGZwdHJfaXNfbnVsbCh1bGluZm8pKSB7XG5rZXJuZWwvYnBmL2JwZl9pdGVyLmM6NTI2Olx0XHRlcnIgPSBicGZfY2hlY2tfdWFyZ190YWlsX3plcm8odWxpbmZvLCBzaXplb2YobGluZm8pLFxua2VybmVsL2JwZi9icGZfaXRlci5jLTUyNy1cdFx0XHRcdFx0ICAgICAgIGxpbmZvX2xlbik7XG4tLVxua2VybmVsL2JwZi9idGYuYz02ODQ5PWJvb2wgYnRmX2N0eF9hY2Nlc3MoaW50IG9mZiwgaW50IHNpemUsIGVudW0gYnBmX2FjY2Vzc190eXBlIHR5cGUsXG4tLVxua2VybmVsL2JwZi9idGYuYy03MDMwLVx0XHRcdHJldHVybiBmYWxzZTtcbmtlcm5lbC9icGYvYnRmLmM6NzAzMTpcdFx0LyogQ2hlY2tlZCBieSBicGZfY2hlY2tfYXR0YWNoX3RhcmdldCAqL1xua2VybmVsL2JwZi9idGYuYy03MDMyLVx0XHR0bmFtZSAmIzQzOz0gc2l6ZW9mKFwmIzM0O2J0Zl90cmFjZV9cJiMzNDspIC0gMTtcbi0tXG5rZXJuZWwvYnBmL2NmZy5jPTQ1MT1zdGF0aWMgaW50IHZpc2l0X2luc24oaW50IHQsIHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4tLVxua2VybmVsL2JwZi9jZmcuYy01ODYtICovXG5rZXJuZWwvYnBmL2NmZy5jOjU4NzppbnQgYnBmX2NoZWNrX2NmZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxua2VybmVsL2JwZi9jZmcuYy01ODgte1xuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmM9MTc5Mz1FWFBPUlRfU1lNQk9MKF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX3NvY2tfb3BzKTtcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTc5NC1cbmtlcm5lbC9icGYvY2dyb3VwLmM6MTc5NTppbnQgX19jZ3JvdXBfYnBmX2NoZWNrX2Rldl9wZXJtaXNzaW9uKHNob3J0IGRldl90eXBlLCB1MzIgbWFqb3IsIHUzMiBtaW5vcixcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTc5Ni1cdFx0XHRcdCAgICAgIHNob3J0IGFjY2VzcywgZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlKVxuLS1cbmtlcm5lbC9icGYvY2hlY2tfYnRmLmM9MzE9c3RhdGljIGludCBwcmVwYXJlX2J0Zl9mdW5jKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi9jaGVja19idGYuYy03MC1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5mdW5jczsgaSYjNDM7JiM0MzspIHtcbmtlcm5lbC9icGYvY2hlY2tfYnRmLmM6NzE6XHRcdHJldCA9IGJwZl9jaGVja191YXJnX3RhaWxfemVybyh1cmVjb3JkLCBrcmVjX3NpemUsIHVyZWNfc2l6ZSk7XG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jLTcyLVx0XHRpZiAocmV0KSB7XG4tLVxua2VybmVsL2JwZi9jaGVja19idGYuYz0yMTM9c3RhdGljIGludCBjaGVja19idGZfbGluZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvY2hlY2tfYnRmLmMtMjUzLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfbGluZm87IGkmIzQzOyYjNDM7KSB7XG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jOjI1NDpcdFx0ZXJyID0gYnBmX2NoZWNrX3VhcmdfdGFpbF96ZXJvKHVsaW5mbywgZXhwZWN0ZWRfc2l6ZSwgcmVjX3NpemUpO1xua2VybmVsL2JwZi9jaGVja19idGYuYy0yNTUtXHRcdGlmIChlcnIpIHtcbi0tXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jPTM0MT1zdGF0aWMgaW50IGNoZWNrX2NvcmVfcmVsbyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvY2hlY2tfYnRmLmMtMzc2LVx0XHQvKiBmdXR1cmUgcHJvb2Zpbmcgd2hlbiBzaXplb2YoYnBmX2NvcmVfcmVsbykgY2hhbmdlcyAqL1xua2VybmVsL2JwZi9jaGVja19idGYuYzozNzc6XHRcdGVyciA9IGJwZl9jaGVja191YXJnX3RhaWxfemVybyh1X2NvcmVfcmVsbywgZXhwZWN0ZWRfc2l6ZSwgcmVjX3NpemUpO1xua2VybmVsL2JwZi9jaGVja19idGYuYy0zNzgtXHRcdGlmIChlcnIpIHtcbi0tXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jPTQxMD1pbnQgYnBmX3ByZXBhcmVfYnRmX2luZm8oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jLTQzNy1cbmtlcm5lbC9icGYvY2hlY2tfYnRmLmM6NDM4OmludCBicGZfY2hlY2tfYnRmX2luZm8oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbmtlcm5lbC9icGYvY2hlY2tfYnRmLmMtNDM5LVx0XHQgICAgICAgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXG4tLVxua2VybmVsL2JwZi9jb3JlLmMtMTYtICogQW5kaSBLbGVlbiAtIEZpeCBhIGZldyBiYWQgYnVncyBhbmQgcmFjZXMuXG5rZXJuZWwvYnBmL2NvcmUuYzoxNzogKiBLcmlzIEthdHRlcmpvaG4gLSBBZGRlZCBtYW55IGFkZGl0aW9uYWwgY2hlY2tzIGluIGJwZl9jaGVja19jbGFzc2ljKClcbmtlcm5lbC9icGYvY29yZS5jLTE4LSAqL1xuLS1cbmtlcm5lbC9icGYvY29yZS5jPTI1NzQ9Ym9vbCBicGZfcHJvZ19tYXBfY29tcGF0aWJsZShzdHJ1Y3QgYnBmX21hcCAqbWFwLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKmZwKVxuLS1cbmtlcm5lbC9icGYvY29yZS5jLTI1ODYtXG5rZXJuZWwvYnBmL2NvcmUuYzoyNTg3OnN0YXRpYyBpbnQgYnBmX2NoZWNrX3RhaWxfY2FsbChjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKmZwKVxua2VybmVsL2JwZi9jb3JlLmMtMjU4OC17XG4tLVxua2VybmVsL2JwZi9jb3JlLmM9MjY2ND1zdHJ1Y3QgYnBmX3Byb2cgKl9fYnBmX3Byb2dfc2VsZWN0X3J1bnRpbWUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpmcCxcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYy0yNzEwLVx0ICovXG5rZXJuZWwvYnBmL2NvcmUuYzoyNzExOlx0KmVyciA9IGJwZl9jaGVja190YWlsX2NhbGwoZnApO1xua2VybmVsL2JwZi9jb3JlLmMtMjcxMi1cbi0tXG5rZXJuZWwvYnBmL2NvcmUuYz0zMzg5PXN0YXRpYyBub2lubGluZSB2b2lkIGJwZl9wcm9nX3JlcG9ydF9tYXlfZ290b192aW9sYXRpb24odm9pZClcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYy0zNDA0LVxua2VybmVsL2JwZi9jb3JlLmM6MzQwNTp1NjQgYnBmX2NoZWNrX3RpbWVkX21heV9nb3RvKHN0cnVjdCBicGZfdGltZWRfbWF5X2dvdG8gKnApXG5rZXJuZWwvYnBmL2NvcmUuYy0zNDA2LXtcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz03MT1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzICogY29uc3QgYnBmX21hcF90eXBlc1tdID0ge1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTkwLSAqL1xua2VybmVsL2JwZi9zeXNjYWxsLmM6OTE6aW50IGJwZl9jaGVja191YXJnX3RhaWxfemVybyhicGZwdHJfdCB1YWRkcixcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTkyLVx0XHRcdCAgICAgc2l6ZV90IGV4cGVjdGVkX3NpemUsXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9MjkxNz1zdGF0aWMgaW50IGJwZl9wcm9nX2xvYWQodW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLCBzdHJ1Y3QgYnBmX2xvZ19hdHRyICphdHRyX2xvZylcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zMTMyLVx0LyogcnVuIGVCUEYgdmVyaWZpZXIgKi9cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjMxMzM6XHRlcnIgPSBicGZfY2hlY2soXHUwMDI2cHJvZywgYXR0ciwgdWF0dHIsIGF0dHJfbG9nKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTMxMzQtXHRpZiAoZXJyIFx1MDAzYyAwKVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTM2MzQ9c3RhdGljIGludCBicGZfdHJhY2luZ19wcm9nX2F0dGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzc2Ni1cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjM3Njc6XHRcdGVyciA9IGJwZl9jaGVja19hdHRhY2hfdGFyZ2V0KE5VTEwsIHByb2csIHRndF9wcm9nLCBidGZfaWQsXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zNzY4LVx0XHRcdFx0XHQgICAgICBcdTAwMjZ0Z3RfaW5mbyk7XG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9NTA5OT1zdGF0aWMgaW50IGJwZl9wcm9nX2dldF9pbmZvX2J5X2ZkKHN0cnVjdCBmaWxlICpmaWxlLFxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTUxMTMtXHRsZW4gPSBvZmZzZXRvZmVuZChzdHJ1Y3QgYnBmX3Byb2dfaW5mbywgYXR0YWNoX2J0Zl9pZCk7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo1MTE0Olx0ZXJyID0gYnBmX2NoZWNrX3VhcmdfdGFpbF96ZXJvKFVTRVJfQlBGUFRSKHVpbmZvKSwgbGVuLCBpbmZvX2xlbik7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01MTE1LVx0aWYgKGVycilcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz01Mzg5PXN0YXRpYyBpbnQgYnBmX21hcF9nZXRfaW5mb19ieV9mZChzdHJ1Y3QgZmlsZSAqZmlsZSxcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01Mzk5LVx0bGVuID0gb2Zmc2V0b2ZlbmQoc3RydWN0IGJwZl9tYXBfaW5mbywgaGFzaF9zaXplKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjU0MDA6XHRlcnIgPSBicGZfY2hlY2tfdWFyZ190YWlsX3plcm8oVVNFUl9CUEZQVFIodWluZm8pLCBsZW4sIGluZm9fbGVuKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU0MDEtXHRpZiAoZXJyKVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTU0NjA9c3RhdGljIGludCBicGZfYnRmX2dldF9pbmZvX2J5X2ZkKHN0cnVjdCBmaWxlICpmaWxlLFxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU0NjgtXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo1NDY5Olx0ZXJyID0gYnBmX2NoZWNrX3VhcmdfdGFpbF96ZXJvKFVTRVJfQlBGUFRSKHVpbmZvKSwgc2l6ZW9mKCp1aW5mbyksIGluZm9fbGVuKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU0NzAtXHRpZiAoZXJyKVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTU0NzY9c3RhdGljIGludCBicGZfbGlua19nZXRfaW5mb19ieV9mZChzdHJ1Y3QgZmlsZSAqZmlsZSxcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01NDg2LVxua2VybmVsL2JwZi9zeXNjYWxsLmM6NTQ4NzpcdGVyciA9IGJwZl9jaGVja191YXJnX3RhaWxfemVybyhVU0VSX0JQRlBUUih1aW5mbyksIHNpemVvZihpbmZvKSwgaW5mb19sZW4pO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtNTQ4OC1cdGlmIChlcnIpXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9NTUxOD1zdGF0aWMgaW50IHRva2VuX2dldF9pbmZvX2J5X2ZkKHN0cnVjdCBmaWxlICpmaWxlLFxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU1MjYtXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo1NTI3Olx0ZXJyID0gYnBmX2NoZWNrX3VhcmdfdGFpbF96ZXJvKFVTRVJfQlBGUFRSKHVpbmZvKSwgc2l6ZW9mKCp1aW5mbyksIGluZm9fbGVuKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU1MjgtXHRpZiAoZXJyKVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTYzMDM9c3RhdGljIGludCBfX3N5c19icGYoZW51bSBicGZfY21kIGNtZCwgYnBmcHRyX3QgdWF0dHIsIHVuc2lnbmVkIGludCBzaXplLFxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYzMTEtXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2MzEyOlx0ZXJyID0gYnBmX2NoZWNrX3VhcmdfdGFpbF96ZXJvKHVhdHRyLCBzaXplb2YoYXR0ciksIHNpemUpO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtNjMxMy1cdGlmIChlcnIpXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjMyMy1cdGlmIChjbWQgXHUwMDI2IEJQRl9DT01NT05fQVRUUlMpIHtcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjYzMjQ6XHRcdGVyciA9IGJwZl9jaGVja191YXJnX3RhaWxfemVybyh1YXR0cl9jb21tb24sXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02MzI1LVx0XHRcdFx0XHQgICAgICAgb2Zmc2V0b2ZlbmQoc3RydWN0IGJwZl9jb21tb25fYXR0ciwgbG9nX3RydWVfc2l6ZSksXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9MTEyMz1pbnQgYnBmX3RyYW1wb2xpbmVfbGlua19jZ3JvdXBfc2hpbShzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTEzMy1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjExMzQ6XHRlcnIgPSBicGZfY2hlY2tfYXR0YWNoX3RhcmdldChOVUxMLCBwcm9nLCBOVUxMLFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTEzNS1cdFx0XHRcdCAgICAgIHByb2ctXHUwMDNlYXV4LVx1MDAzZWF0dGFjaF9idGZfaWQsXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9MTY2OT1pbnQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyICppZHMsXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTY4Mi1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE2ODM6XHRcdGVyciA9IGJwZl9jaGVja19hdHRhY2hfYnRmX2lkX211bHRpKGJ0ZiwgcHJvZywgaWRzW2ldLCBcdTAwMjZ0Z3RfaW5mbyk7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNjg0LVx0XHRpZiAoZXJyKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz01OD1zdGF0aWMgYm9vbCBicGZfZ2xvYmFsX3BlcmNwdV9tYV9zZXQ7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTktXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjA6LyogYnBmX2NoZWNrKCkgaXMgYSBzdGF0aWMgY29kZSBhbmFseXplciB0aGF0IHdhbGtzIGVCUEYgcHJvZ3JhbVxua2VybmVsL2JwZi92ZXJpZmllci5jLTYxLSAqIGluc3RydWN0aW9uIGJ5IGluc3RydWN0aW9uIGFuZCB1cGRhdGVzIHJlZ2lzdGVyL3N0YWNrIHN0YXRlLlxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMjUzMz1zdGF0aWMgaW50IHByb2Nlc3Nfa2ZfYXJnX3B0cl90b19yYnRyZWVfbm9kZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjU0NC0gKiBMU00gaG9va3MgYW5kIGl0ZXJzIChib3RoIHNsZWVwYWJsZSBhbmQgbm9uLXNsZWVwYWJsZSkgYXJlIHNhZmUuXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTI1NDU6ICogQW55IHNsZWVwYWJsZSBwcm9ncyBhcmUgYWxzbyBzYWZlIHNpbmNlIGJwZl9jaGVja19hdHRhY2hfdGFyZ2V0KCkgZW5mb3JjZVxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyNTQ2LSAqIHRoZW0gY2FuIG9ubHkgYmUgYXR0YWNoZWQgdG8gc29tZSBzcGVjaWZpYyBob29rIHBvaW50cy5cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTk4NjY9c3RhdGljIGJvb2wgYXR0YWNoX3VzZXNfdHJhbXBvbGluZV9yZXR2YWwoZW51bSBicGZfYXR0YWNoX3R5cGUgdHlwZSlcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk4NzktXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk4ODA6aW50IGJwZl9jaGVja19hdHRhY2hfdGFyZ2V0KHN0cnVjdCBicGZfdmVyaWZpZXJfbG9nICpsb2csXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk4ODEtXHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MjAzMDM9c3RhdGljIGludCBjaGVja19hdHRhY2hfYnRmX2lkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwMzMzLVxua2VybmVsL2JwZi92ZXJpZmllci5jOjIwMzM0Olx0cmV0ID0gYnBmX2NoZWNrX2F0dGFjaF90YXJnZXQoXHUwMDI2ZW52LVx1MDAzZWxvZywgcHJvZywgdGd0X3Byb2csIGJ0Zl9pZCwgXHUwMDI2dGd0X2luZm8pO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTIwMzM1LVx0aWYgKHJldClcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjA0MDItXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjA0MDM6aW50IGJwZl9jaGVja19hdHRhY2hfYnRmX2lkX211bHRpKHN0cnVjdCBidGYgKmJ0Ziwgc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIgYnRmX2lkLFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwNDA0LVx0XHRcdFx0ICBzdHJ1Y3QgYnBmX2F0dGFjaF90YXJnZXRfaW5mbyAqdGd0X2luZm8pXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTIwODM2PXN0YXRpYyBlbnVtIGJwZl9zaWdfa2V5cmluZyBicGZfY2xhc3NpZnlfa2V5cmluZyhzMzIga2V5cmluZ19pZClcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjA4NTAtLypcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMDg1MTogKiBWZXJpZnkgdGhlIFBLQ1MjNyBzaWduYXR1cmUgb2YgYSBsb2FkZWQgcHJvZ3JhbS4gQ2FsbGVkIGZyb20gYnBmX2NoZWNrKClcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDg1Mi0gKiBvbmNlIHRoZSBwcm9ncmFtJiMzOTtzIG1ldGFkYXRhIG1hcHMgaGF2ZSBiZWVuIHJlc29sdmVkIGludG8gdXNlZF9tYXBzLCBzb1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0yMDg1OT1zdGF0aWMgaW50IGJwZl9wcm9nX3ZlcmlmeV9zaWduYXR1cmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjA5NzUtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjA5NzY6aW50IGJwZl9jaGVjayhzdHJ1Y3QgYnBmX3Byb2cgKipwcm9nLCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjA5NzctXHQgICAgICBzdHJ1Y3QgYnBmX2xvZ19hdHRyICphdHRyX2xvZylcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjA5OTAtXHQvKiAmIzM5O3N0cnVjdCBicGZfdmVyaWZpZXJfZW52JiMzOTsgY2FuIGJlIGdsb2JhbCwgYnV0IHNpbmNlIGl0JiMzOTtzIG5vdCBzbWFsbCxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMDk5MTpcdCAqIGFsbG9jYXRlL2ZyZWUgaXQgZXZlcnkgdGltZSBicGZfY2hlY2soKSBpcyBjYWxsZWRcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDk5Mi1cdCAqL1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMTEwMS1cdC8qIFZhbGlkYXRlIEJURiBhZ2FpbnN0IHRoZSBjb21wbGV0ZSBzdWJwcm9ncmFtIGxheW91dCBhbmQgYXBwbHkgQ08tUkUuICovXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjExMDI6XHRyZXQgPSBicGZfY2hlY2tfYnRmX2luZm8oZW52LCBhdHRyLCB1YXR0cik7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjExMDMtXHRpZiAocmV0IFx1MDAzYyAwKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMTEyMS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMTEyMjpcdHJldCA9IGJwZl9jaGVja19jZmcoZW52KTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMTEyMy1cdGlmIChyZXQgXHUwMDNjIDApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDExOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExODc1CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMjU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBCUEYgVmVyaWZpZXIgRW50cnkgUG9pbnQqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBCUEYgdmVyaWZpZXIgc3R1ZmYuIEkgc2VlIHRoYXQgYGJwZl9jaGVja2AgaXMgY2FsbGVkIGZyb20gYGJwZl9wcm9nX2xvYWRgIGluIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AuIFRoaXMgc3Ryb25nbHkgc3VnZ2VzdHMgdGhhdCBgYnBmX2NoZWNrYCBpcyB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludCBmb3IgdGhlIHZlcmlmaWVyLCB3aGljaCBtYWtlcyBzZW5zZS4gSSYjMzk7bSB3b25kZXJpbmcsIHRob3VnaCwgaXMgdGhlcmUgKmFub3RoZXIqIGZ1bmN0aW9uIEkgc2hvdWxkIGJlIGNvbnNpZGVyaW5nPyBgYnBmX3Byb2dfbG9hZGAgaXRzZWxmIGlzIHN0YXRpYywgc28gSSBjYW4gZGlzbWlzcyB0aGF0LiBUaGUgcmVhbCBzeXNjYWxsIGVudHJ5IHBvaW50IGlzIGBzeXNfYnBmYC4gR2l2ZW4gdGhlIGluc3RydWN0aW9ucywgYGJwZl9jaGVja2Agc2VlbXMgbGlrZSB0aGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIGZvY3VzIOKAkyBpdOKAmXMgKnRoZSogdmVyaWZpZXImIzM5O3MgZ2F0ZXdheS4KCkJ1dCB0aGVuLCBJIHBhdXNlLiBgYnBmX2NoZWNrYCBpcyBhIHByZXR0eSBnZW5lcmljIG5hbWUuIFRoZSBpbnN0cnVjdGlvbnMgZW1waGFzaXplIGF2b2lkaW5nICYjMzQ7Z2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMmIzM0OyB0byBwcmV2ZW50IHRlc3QgZGlzdHJpYnV0aW9uIHNrZXdpbmcuIFRoZXkgc3VnZ2VzdCBmYXZvcmluZyBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgb3ZlciBpbnRlcm5hbCwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMuIFRoaXMgZ2l2ZXMgbWUgcGF1c2UuIElzIGBicGZfY2hlY2tgICp0b28qIGdlbmVyaWM/CgpJIHRoaW5rIEkmIzM5O3ZlIGNvbnZpbmNlZCBteXNlbGYuIEl0JiMzOTtzIHRoZSB2ZXJpZmllciBlbnRyeSBwb2ludCwgcGVyaW9kLiBJdCYjMzk7cyBub3QgYSBob3QtcGF0aCBmdW5jdGlvbiwgc2luY2UgaXQmIzM5O3Mgb25seSBjYWxsZWQgZHVyaW5nIHByb2dyYW0gbG9hZC4gU28sIGl0JiMzOTtzIGFjdHVhbGx5ICppZGVhbCogZnJvbSB0aGUgcGVyc3BlY3RpdmUgb2YgZm9jdXNpbmcgb24gYSB3ZWxsLWRlZmluZWQgcG9pbnQgb2YgZW50cnkuCgpOb3csIGxldCYjMzk7cyBzd2l0Y2ggZ2VhcnMgYSBiaXQuIFRoZSB0ZXN0IEkmIzM5O20gd29ya2luZyB3aXRoIHV0aWxpemVzIHRoZSBgYXJlbmFgIGZlYXR1cmUuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBgYXJlbmFgIGZlYXR1cmUgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cy4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgY29uZmlncy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMTE6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthcmVuYSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDExOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNTI3CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgaXQ6CgoqKkRpZ2dpbmcgaW50byBNZW1vcnkgQWxsb2NhdGlvbiBmb3IgQlBGKioKCk9rYXksIHNvIHdlJiMzOTt2ZSBnb3QgYSBCUEYtcmVsYXRlZCBtZW1vcnkgaXNzdWUsIGFuZCBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBpdCYjMzk7cyBzdGVtbWluZyBmcm9tLiBNeSBndXQgZmVlbGluZywgYmFzZWQgb24gcHJldmlvdXMgZXhwZXJpZW5jZXMsIHNheXMgdGhlIGFyZW5hIGFsbG9jYXRvciBpcyBhIHByaW1lIHN1c3BlY3QuIExldCYjMzk7cyBzdGFydCBieSB6ZXJvaW5nIGluIG9uIGBrZXJuZWwvYnBmL2FyZW5hLmNgIHNwZWNpZmljYWxseS4gVGhhdCBmaWxlJiMzOTtzIHRoZSBoZWFydCBvZiBCUEYmIzM5O3MgbWVtb3J5IG1hbmFnZW1lbnQuIEkgc3VzcGVjdCB0aGUgaXNzdWUgY291bGQgYmUgcmVsYXRlZCB0byBhbGxvY2F0aW9uIHNpemVzLCBmcmFnbWVudGF0aW9uLCBvciBwZXJoYXBzIHNvbWUgc3VidGxlIHJhY2UgY29uZGl0aW9ucyB3aXRoIGNvbmN1cnJlbnQgYWNjZXNzLiBBbHRlcm5hdGl2ZWx5LCB0aGUgaXNzdWUgY291bGQgYmUgd2l0aCBzaW1pbGFyIGZpbGVzIGhhbmRsaW5nIHRoZSBzYW1lIG9wZXJhdGlvbnMsIEkgd2lsbCBuZWVkIHRvIGV4cGFuZCB0aGUgc2VhcmNoIGlmIEkgY29tZSB1cCBlbXB0eS4gSSYjMzk7bGwgc3RhcnQgYnkgcmVhZGluZyB0aGUgY29kZSwgZm9jdXNpbmcgb24gdGhlIGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbiBwYXRocywgYW5kIHNlZSBpZiBhbnl0aGluZyBqdW1wcyBvdXQgaW1tZWRpYXRlbHkuIElmIG5vdCwgSSYjMzk7bGwgcHJvYmFibHkgbmVlZCB0byBicmVhayBvdXQgc29tZSBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHN0YXJ0IHRyYWNpbmcgbWVtb3J5IG9wZXJhdGlvbnMuIFRoaXMgc2hvdWxkIHBvaW50IG1lIGluIHRoZSByaWdodCBkaXJlY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDExOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FyZW5hJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDExMjEgbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbmtlcm5lbC9icGYvTWFrZWZpbGU9MTk9aWZlcSAoJChDT05GSUdfTU1VKSQoQ09ORklHXzY0QklUKSx5eSlcbmtlcm5lbC9icGYvTWFrZWZpbGU6MjA6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gYXJlbmEubyByYW5nZV90cmVlLm9cbmtlcm5lbC9icGYvTWFrZWZpbGUtMjEtZW5kaWZcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTYtLypcbmtlcm5lbC9icGYvYXJlbmEuYzoxNzogKiBicGZfYXJlbmEgaXMgYSBzcGFyc2VseSBwb3B1bGF0ZWQgc2hhcmVkIG1lbW9yeSByZWdpb24gYmV0d2VlbiBicGYgcHJvZ3JhbSBhbmRcbmtlcm5lbC9icGYvYXJlbmEuYy0xOC0gKiB1c2VyIHNwYWNlIHByb2Nlc3MuXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTIyLSAqIGtlcm5fdm1fc3RhcnQgZmZmZmM5MDAwMWU2OTAwMCAvLyBwaWNrZWQgYnkgZ2V0X3ZtX2FyZWEoKVxua2VybmVsL2JwZi9hcmVuYS5jOjIzOiAqIEZvciB1c2VyIHNwYWNlIGFsbCBwb2ludGVycyB3aXRoaW4gdGhlIGFyZW5hIGFyZSBub3JtYWwgOC1ieXRlIGFkZHJlc3Nlcy5cbmtlcm5lbC9icGYvYXJlbmEuYy0yNC0gKiBJbiB0aGlzIGV4YW1wbGUgN2Y3ZDI2MjAwMDAwIGlzIHRoZSBhZGRyZXNzIG9mIHRoZSBmaXJzdCBwYWdlIChwZ29mZj0wKS5cbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtMzAtICpcbmtlcm5lbC9icGYvYXJlbmEuYzozMTogKiBCUEYgSklUcyBnZW5lcmF0ZSB0aGUgZm9sbG93aW5nIGNvZGUgdG8gYWNjZXNzIGFyZW5hOlxua2VybmVsL2JwZi9hcmVuYS5jLTMyLSAqICAgbW92IGVheCwgZWF4ICAvLyBlYXggaGFzIGxvd2VyIDMyLWJpdCBvZiB1c2VyIHBvaW50ZXJcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtMzktICogaW50byBrZXJuZWwgYW5kIHVzZXIgdm1hLlxua2VybmVsL2JwZi9hcmVuYS5jOjQwOiAqIGJwZiBwcm9ncmFtIGNhbiBhbGxvY2F0ZSBhIHBhZ2UgdmlhIGJwZl9hcmVuYV9hbGxvY19wYWdlcygpIGtmdW5jXG5rZXJuZWwvYnBmL2FyZW5hLmMtNDEtICogd2hpY2ggd2lsbCBpbnNlcnQgaXQgaW50byBrZXJuZWwgdm1fYXJlYS5cbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtNDgtXG5rZXJuZWwvYnBmL2FyZW5hLmM6NDk6c3RhdGljIHZvaWQgYXJlbmFfZnJlZV9wYWdlcyhzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSwgbG9uZyB1YWRkciwgbG9uZyBwYWdlX2NudCwgYm9vbCBzbGVlcGFibGUpO1xua2VybmVsL2JwZi9hcmVuYS5jLTUwLVxua2VybmVsL2JwZi9hcmVuYS5jOjUxOnN0cnVjdCBicGZfYXJlbmEge1xua2VybmVsL2JwZi9hcmVuYS5jLTUyLVx0c3RydWN0IGJwZl9tYXAgbWFwO1xuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy01OS1cdHJxc3BpbmxvY2tfdCBzcGlubG9jaztcbmtlcm5lbC9icGYvYXJlbmEuYzo2MDpcdC8qIG51bWJlciBvZiBwYWdlcyBjdXJyZW50bHkgcG9wdWxhdGVkIGluIHRoZSBhcmVuYSAqL1xua2VybmVsL2JwZi9hcmVuYS5jLTYxLVx0dTY0IG5yX3BhZ2VzO1xuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy03MS1cbmtlcm5lbC9icGYvYXJlbmEuYzo3MjpzdGF0aWMgdm9pZCBhcmVuYV9mcmVlX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xua2VybmVsL2JwZi9hcmVuYS5jOjczOnN0YXRpYyB2b2lkIGFyZW5hX2ZyZWVfaXJxKHN0cnVjdCBpcnFfd29yayAqaXcpO1xua2VybmVsL2JwZi9hcmVuYS5jLTc0LVxua2VybmVsL2JwZi9hcmVuYS5jOjc1OnN0cnVjdCBhcmVuYV9mcmVlX3NwYW4ge1xua2VybmVsL2JwZi9hcmVuYS5jLTc2LVx0c3RydWN0IGxsaXN0X25vZGUgbm9kZTtcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtODAtXG5rZXJuZWwvYnBmL2FyZW5hLmM6ODE6dTY0IGJwZl9hcmVuYV9nZXRfa2Vybl92bV9zdGFydChzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSlcbmtlcm5lbC9icGYvYXJlbmEuYy04Mi17XG5rZXJuZWwvYnBmL2FyZW5hLmM6ODM6XHRyZXR1cm4gYXJlbmEgPyAodTY0KSAobG9uZykgYXJlbmEtXHUwMDNla2Vybl92bS1cdTAwM2VhZGRyICYjNDM7IEdVQVJEX1NaIC8gMiA6IDA7XG5rZXJuZWwvYnBmL2FyZW5hLmMtODQtfVxua2VybmVsL2JwZi9hcmVuYS5jLTg1LVxua2VybmVsL2JwZi9hcmVuYS5jOjg2OnU2NCBicGZfYXJlbmFfZ2V0X3VzZXJfdm1fc3RhcnQoc3RydWN0IGJwZl9hcmVuYSAqYXJlbmEpXG5rZXJuZWwvYnBmL2FyZW5hLmMtODcte1xua2VybmVsL2JwZi9hcmVuYS5jOjg4Olx0cmV0dXJuIGFyZW5hID8gYXJlbmEtXHUwMDNldXNlcl92bV9zdGFydCA6IDA7XG5rZXJuZWwvYnBmL2FyZW5hLmMtODktfVxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy05MS0vKipcbmtlcm5lbC9icGYvYXJlbmEuYzo5MjogKiBicGZfYXJlbmFfbWFwX2tlcm5fdm1fc3RhcnQgLSBrZXJuX3ZtX3N0YXJ0IGxvb2t1cCBieSBzdHJ1Y3QgYnBmX21hcCAqXG5rZXJuZWwvYnBmL2FyZW5hLmMtOTMtICogQG1hcDogYSBCUEZfTUFQX1RZUEVfQVJFTkEgbWFwXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTk2LSAqL1xua2VybmVsL2JwZi9hcmVuYS5jOjk3OnU2NCBicGZfYXJlbmFfbWFwX2tlcm5fdm1fc3RhcnQoc3RydWN0IGJwZl9tYXAgKm1hcClcbmtlcm5lbC9icGYvYXJlbmEuYy05OC17XG5rZXJuZWwvYnBmL2FyZW5hLmM6OTk6XHRyZXR1cm4gYnBmX2FyZW5hX2dldF9rZXJuX3ZtX3N0YXJ0KGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfYXJlbmEsIG1hcCkpO1xua2VybmVsL2JwZi9hcmVuYS5jLTEwMC19XG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTEwMi0vKipcbmtlcm5lbC9icGYvYXJlbmEuYzoxMDM6ICogYnBmX3Byb2dfYXJlbmEgLSByZXR1cm4gdGhlIGJwZl9tYXAgb2YgdGhlIGFyZW5hIHJlZmVyZW5jZWQgYnkgQHByb2dcbmtlcm5lbC9icGYvYXJlbmEuYy0xMDQtICogQHByb2c6IGEgbG9hZGVkIEJQRiBwcm9ncmFtXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTA1LSAqXG5rZXJuZWwvYnBmL2FyZW5hLmM6MTA2OiAqIFRoZSB2ZXJpZmllciBlbmZvcmNlcyBhdCBtb3N0IG9uZSBhcmVuYSBwZXIgcHJvZ3JhbSBhbmQgc3RvcmVzIGl0IGluXG5rZXJuZWwvYnBmL2FyZW5hLmM6MTA3OiAqIHByb2ctXHUwMDNlYXV4LVx1MDAzZWFyZW5hLiBSZXR1cm4gdGhhdCBhcmVuYSYjMzk7cyB1bmRlcmx5aW5nIGJwZl9tYXAsIG9yIE5VTEwgaWZcbmtlcm5lbC9icGYvYXJlbmEuYzoxMDg6ICogQHByb2cgZG9lcyBub3QgcmVmZXJlbmNlIGFuIGFyZW5hLlxua2VybmVsL2JwZi9hcmVuYS5jLTEwOS0gKi9cbmtlcm5lbC9icGYvYXJlbmEuYzoxMTA6c3RydWN0IGJwZl9tYXAgKmJwZl9wcm9nX2FyZW5hKHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbmtlcm5lbC9icGYvYXJlbmEuYy0xMTEte1xua2VybmVsL2JwZi9hcmVuYS5jOjExMjpcdHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hID0gcHJvZy1cdTAwM2VhdXgtXHUwMDNlYXJlbmE7XG5rZXJuZWwvYnBmL2FyZW5hLmMtMTEzLVxua2VybmVsL2JwZi9hcmVuYS5jOjExNDpcdHJldHVybiBhcmVuYSA/IFx1MDAyNmFyZW5hLVx1MDAzZW1hcCA6IE5VTEw7XG5rZXJuZWwvYnBmL2FyZW5hLmMtMTE1LX1cbmtlcm5lbC9icGYvYXJlbmEuYy0xMTYtXG5rZXJuZWwvYnBmL2FyZW5hLmM6MTE3OnN0YXRpYyBsb25nIGFyZW5hX21hcF9wZWVrX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqdmFsdWUpXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTE4LXtcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTIxLVxua2VybmVsL2JwZi9hcmVuYS5jOjEyMjpzdGF0aWMgbG9uZyBhcmVuYV9tYXBfcHVzaF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKnZhbHVlLCB1NjQgZmxhZ3MpXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTIzLXtcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTI2LVxua2VybmVsL2JwZi9hcmVuYS5jOjEyNzpzdGF0aWMgbG9uZyBhcmVuYV9tYXBfcG9wX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqdmFsdWUpXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTI4LXtcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTMxLVxua2VybmVsL2JwZi9hcmVuYS5jOjEzMjpzdGF0aWMgbG9uZyBhcmVuYV9tYXBfZGVsZXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqdmFsdWUpXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTMzLXtcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTM2LVxua2VybmVsL2JwZi9hcmVuYS5jOjEzNzpzdGF0aWMgaW50IGFyZW5hX21hcF9nZXRfbmV4dF9rZXkoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICpuZXh0X2tleSlcbmtlcm5lbC9icGYvYXJlbmEuYy0xMzgte1xuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy0xNDEtXG5rZXJuZWwvYnBmL2FyZW5hLmM6MTQyOnN0YXRpYyBsb25nIGNvbXB1dGVfcGdvZmYoc3RydWN0IGJwZl9hcmVuYSAqYXJlbmEsIGxvbmcgdWFkZHIpXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTQzLXtcbmtlcm5lbC9icGYvYXJlbmEuYzoxNDQ6XHRyZXR1cm4gKHUzMikodWFkZHIgLSAodTMyKWFyZW5hLVx1MDAzZXVzZXJfdm1fc3RhcnQpIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xua2VybmVsL2JwZi9hcmVuYS5jLTE0NS19XG4tLVxua2VybmVsL2JwZi9hcmVuYS5jPTE0Nz1zdHJ1Y3QgYXBwbHlfcmFuZ2VfZGF0YSB7XG5rZXJuZWwvYnBmL2FyZW5hLmM6MTQ4Olx0c3RydWN0IGJwZl9hcmVuYSAqYXJlbmE7XG5rZXJuZWwvYnBmL2FyZW5hLmMtMTQ5LVx0c3RydWN0IHBhZ2UgKipwYWdlcztcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmM9MTUzPXN0cnVjdCBjbGVhcl9yYW5nZV9kYXRhIHtcbmtlcm5lbC9icGYvYXJlbmEuYzoxNTQ6XHRzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYTtcbmtlcm5lbC9icGYvYXJlbmEuYy0xNTUtXHRzdHJ1Y3QgbGxpc3RfaGVhZCAqZnJlZV9wYWdlcztcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmM9MTU4PXN0YXRpYyBpbnQgYXBwbHlfcmFuZ2Vfc2V0X2NiKHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqZGF0YSlcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTg0LVx0XHRcdGNvbnRpbnVlO1xua2VybmVsL2JwZi9hcmVuYS5jOjE4NTpcdFx0aWYgKFdBUk5fT05fT05DRShwdGVfcGFnZShvbGQpICE9IGQtXHUwMDNlYXJlbmEtXHUwMDNlc2NyYXRjaF9wYWdlKSlcbmtlcm5lbC9icGYvYXJlbmEuYy0xODYtXHRcdFx0cmV0dXJuIC1FQlVTWTtcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTkyLVx0ICogV2l0aG91dCBwdGVwX3RyeV9zZXQoKSB0aGVyZSBpcyBubyBhdG9taWMgaW5zdGFsbGVyLCBidXQgc3VjaCBhcmNoZXNcbmtlcm5lbC9icGYvYXJlbmEuYzoxOTM6XHQgKiBhbHNvIGRvIG5vdCB3aXJlIHVwIGJwZl9hcmVuYV9oYW5kbGVfcGFnZV9mYXVsdCgpLCBzbyBubyBzY3JhdGNoIHBhZ2Vcbmtlcm5lbC9icGYvYXJlbmEuYy0xOTQtXHQgKiBpcyBldmVyIGluc3RhbGxlZCBhbmQgdGhlIHNsb3QgaXMgYWx3YXlzIG5vbmUgaGVyZS5cbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtMjAwLVx0ZC1cdTAwM2VpJiM0MzsmIzQzOztcbmtlcm5lbC9icGYvYXJlbmEuYzoyMDE6XHRXUklURV9PTkNFKGQtXHUwMDNlYXJlbmEtXHUwMDNlbnJfcGFnZXMsIGQtXHUwMDNlYXJlbmEtXHUwMDNlbnJfcGFnZXMgJiM0MzsgMSk7XG5rZXJuZWwvYnBmL2FyZW5hLmMtMjAyLVx0cmV0dXJuIDA7XG4tLVxua2VybmVsL2JwZi9hcmVuYS5jPTIxMD1zdGF0aWMgaW50IGFwcGx5X3JhbmdlX2NsZWFyX2NiKHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqZGF0YSlcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtMjI4LVx0Lypcbmtlcm5lbC9icGYvYXJlbmEuYzoyMjk6XHQgKiBTa2lwIHRoZSBwZXItYXJlbmEgc2NyYXRjaCBwYWdlLiBBIGtlcm5lbCBmYXVsdCBvbiBhbiB1bmFsbG9jYXRlZCB1YWRkclxua2VybmVsL2JwZi9hcmVuYS5jOjIzMDpcdCAqIHNjcmF0Y2hlcyBpdHMgUFRFLiBBIGxhdGVyIGJwZl9hcmVuYV9mcmVlX3BhZ2VzKCkgb3ZlciB0aGF0IHJhbmdlIHdhbGtzXG5rZXJuZWwvYnBmL2FyZW5hLmMtMjMxLVx0ICogaGVyZS4gV2l0aG91dCB0aGUgc2tpcCwgc2NyYXRjaF9wYWdlIHdvdWxkIGJlIGZyZWVkLlxua2VybmVsL2JwZi9hcmVuYS5jLTIzMi1cdCAqL1xua2VybmVsL2JwZi9hcmVuYS5jOjIzMzpcdGlmIChwYWdlID09IGQtXHUwMDNlYXJlbmEtXHUwMDNlc2NyYXRjaF9wYWdlKVxua2VybmVsL2JwZi9hcmVuYS5jLTIzNC1cdFx0cmV0dXJuIDA7XG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTIzNi1cdF9fbGxpc3RfYWRkKFx1MDAyNnBhZ2UtXHUwMDNlcGNwX2xsaXN0LCBkLVx1MDAzZWZyZWVfcGFnZXMpO1xua2VybmVsL2JwZi9hcmVuYS5jOjIzNzpcdFdSSVRFX09OQ0UoZC1cdTAwM2VhcmVuYS1cdTAwM2Vucl9wYWdlcywgZC1cdTAwM2VhcmVuYS1cdTAwM2Vucl9wYWdlcyAtIDEpO1xua2VybmVsL2JwZi9hcmVuYS5jLTIzOC1cdHJldHVybiAwO1xuLS1cbmtlcm5lbC9icGYvYXJlbmEuYz0yNDE9c3RhdGljIGludCBhcHBseV9yYW5nZV9zZXRfc2NyYXRjaF9jYihwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGFkZHIsIHZvaWQgKmRhdGEpXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTI1OC1cbmtlcm5lbC9icGYvYXJlbmEuYzoyNTk6c3RhdGljIGludCBwb3B1bGF0ZV9wZ3RhYmxlX2V4Y2VwdF9wdGUoc3RydWN0IGJwZl9hcmVuYSAqYXJlbmEpXG5rZXJuZWwvYnBmL2FyZW5hLmMtMjYwLXtcbmtlcm5lbC9icGYvYXJlbmEuYy0yNjEtXHQvKiBQb3B1bGF0ZSBpbnRlcm1lZGlhdGVzIGZvciB0aGUgcmVjb3ZlcnkgcmFuZ2UgKDQgR2lCICYjNDM7IHVwcGVyIGhhbGYtZ3VhcmQpLiAqL1xua2VybmVsL2JwZi9hcmVuYS5jOjI2MjpcdHJldHVybiBhcHBseV90b19wYWdlX3JhbmdlKFx1MDAyNmluaXRfbW0sIGJwZl9hcmVuYV9nZXRfa2Vybl92bV9zdGFydChhcmVuYSksXG5rZXJuZWwvYnBmL2FyZW5hLmMtMjYzLVx0XHRcdFx0ICAgU1pfNEcgJiM0MzsgR1VBUkRfU1ogLyAyLCBhcHBseV9yYW5nZV9zZXRfY2IsIE5VTEwpO1xuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy0yNjUtXG5rZXJuZWwvYnBmL2FyZW5hLmM6MjY2OnN0YXRpYyBzdHJ1Y3QgYnBmX21hcCAqYXJlbmFfbWFwX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxua2VybmVsL2JwZi9hcmVuYS5jLTI2Ny17XG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTI2OS1cdGludCBudW1hX25vZGUgPSBicGZfbWFwX2F0dHJfbnVtYV9ub2RlKGF0dHIpO1xua2VybmVsL2JwZi9hcmVuYS5jOjI3MDpcdHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hO1xua2VybmVsL2JwZi9hcmVuYS5jLTI3MS1cdHU2NCB2bV9yYW5nZTtcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtMjczLVxua2VybmVsL2JwZi9hcmVuYS5jOjI3NDpcdGlmICghYnBmX2ppdF9zdXBwb3J0c19hcmVuYSgpKVxua2VybmVsL2JwZi9hcmVuYS5jLTI3NS1cdFx0cmV0dXJuIEVSUl9QVFIoLUVPUE5PVFNVUFApO1xuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy0yOTktXG5rZXJuZWwvYnBmL2FyZW5hLmM6MzAwOlx0YXJlbmEgPSBicGZfbWFwX2FyZWFfYWxsb2Moc2l6ZW9mKCphcmVuYSksIG51bWFfbm9kZSk7XG5rZXJuZWwvYnBmL2FyZW5hLmM6MzAxOlx0aWYgKCFhcmVuYSlcbmtlcm5lbC9icGYvYXJlbmEuYy0zMDItXHRcdGdvdG8gZXJyO1xua2VybmVsL2JwZi9hcmVuYS5jLTMwMy1cbmtlcm5lbC9icGYvYXJlbmEuYzozMDQ6XHRhcmVuYS1cdTAwM2VrZXJuX3ZtID0ga2Vybl92bTtcbmtlcm5lbC9icGYvYXJlbmEuYzozMDU6XHRhcmVuYS1cdTAwM2V1c2VyX3ZtX3N0YXJ0ID0gYXR0ci1cdTAwM2VtYXBfZXh0cmE7XG5rZXJuZWwvYnBmL2FyZW5hLmM6MzA2Olx0aWYgKGFyZW5hLVx1MDAzZXVzZXJfdm1fc3RhcnQpXG5rZXJuZWwvYnBmL2FyZW5hLmM6MzA3Olx0XHRhcmVuYS1cdTAwM2V1c2VyX3ZtX2VuZCA9IGFyZW5hLVx1MDAzZXVzZXJfdm1fc3RhcnQgJiM0Mzsgdm1fcmFuZ2U7XG5rZXJuZWwvYnBmL2FyZW5hLmMtMzA4LVxua2VybmVsL2JwZi9hcmVuYS5jOjMwOTpcdElOSVRfTElTVF9IRUFEKFx1MDAyNmFyZW5hLVx1MDAzZXZtYV9saXN0KTtcbmtlcm5lbC9icGYvYXJlbmEuYzozMTA6XHRpbml0X2xsaXN0X2hlYWQoXHUwMDI2YXJlbmEtXHUwMDNlZnJlZV9zcGFucyk7XG5rZXJuZWwvYnBmL2FyZW5hLmM6MzExOlx0aW5pdF9pcnFfd29yayhcdTAwMjZhcmVuYS1cdTAwM2VmcmVlX2lycSwgYXJlbmFfZnJlZV9pcnEpO1xua2VybmVsL2JwZi9hcmVuYS5jOjMxMjpcdElOSVRfV09SSyhcdTAwMjZhcmVuYS1cdTAwM2VmcmVlX3dvcmssIGFyZW5hX2ZyZWVfd29ya2VyKTtcbmtlcm5lbC9icGYvYXJlbmEuYzozMTM6XHRicGZfbWFwX2luaXRfZnJvbV9hdHRyKFx1MDAyNmFyZW5hLVx1MDAzZW1hcCwgYXR0cik7XG5rZXJuZWwvYnBmL2FyZW5hLmMtMzE0LVxua2VybmVsL2JwZi9hcmVuYS5jOjMxNTpcdGVyciA9IGJwZl9tYXBfYWxsb2NfcGFnZXMoXHUwMDI2YXJlbmEtXHUwMDNlbWFwLCBOVU1BX05PX05PREUsIDEsIFx1MDAyNmFyZW5hLVx1MDAzZXNjcmF0Y2hfcGFnZSk7XG5rZXJuZWwvYnBmL2FyZW5hLmMtMzE2LVx0aWYgKGVycilcbmtlcm5lbC9icGYvYXJlbmEuYzozMTc6XHRcdGdvdG8gZXJyX2ZyZWVfYXJlbmE7XG5rZXJuZWwvYnBmL2FyZW5hLmMtMzE4LVxua2VybmVsL2JwZi9hcmVuYS5jOjMxOTpcdHJhbmdlX3RyZWVfaW5pdChcdTAwMjZhcmVuYS1cdTAwM2VydCk7XG5rZXJuZWwvYnBmL2FyZW5hLmM6MzIwOlx0ZXJyID0gcmFuZ2VfdHJlZV9zZXQoXHUwMDI2YXJlbmEtXHUwMDNlcnQsIDAsIGF0dHItXHUwMDNlbWF4X2VudHJpZXMpO1xua2VybmVsL2JwZi9hcmVuYS5jLTMyMS1cdGlmIChlcnIpXG5rZXJuZWwvYnBmL2FyZW5hLmMtMzIyLVx0XHRnb3RvIGVycl9mcmVlX3NjcmF0Y2g7XG5rZXJuZWwvYnBmL2FyZW5hLmM6MzIzOlx0bXV0ZXhfaW5pdChcdTAwMjZhcmVuYS1cdTAwM2Vsb2NrKTtcbmtlcm5lbC9icGYvYXJlbmEuYzozMjQ6XHRtdXRleF9pbml0KFx1MDAyNmFyZW5hLVx1MDAzZXphcF9tdXRleCk7XG5rZXJuZWwvYnBmL2FyZW5hLmM6MzI1Olx0cmF3X3Jlc19zcGluX2xvY2tfaW5pdChcdTAwMjZhcmVuYS1cdTAwM2VzcGlubG9jayk7XG5rZXJuZWwvYnBmL2FyZW5hLmM6MzI2Olx0ZXJyID0gcG9wdWxhdGVfcGd0YWJsZV9leGNlcHRfcHRlKGFyZW5hKTtcbmtlcm5lbC9icGYvYXJlbmEuYy0zMjctXHRpZiAoZXJyKVxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy0zMjktXG5rZXJuZWwvYnBmL2FyZW5hLmM6MzMwOlx0cmV0dXJuIFx1MDAyNmFyZW5hLVx1MDAzZW1hcDtcbmtlcm5lbC9icGYvYXJlbmEuYy0zMzEtXG5rZXJuZWwvYnBmL2FyZW5hLmMtMzMyLWVycl9kZXN0cm95X3J0Olxua2VybmVsL2JwZi9hcmVuYS5jOjMzMzpcdHJhbmdlX3RyZWVfZGVzdHJveShcdTAwMjZhcmVuYS1cdTAwM2VydCk7XG5rZXJuZWwvYnBmL2FyZW5hLmMtMzM0LWVycl9mcmVlX3NjcmF0Y2g6XG5rZXJuZWwvYnBmL2FyZW5hLmM6MzM1Olx0X19mcmVlX3BhZ2UoYXJlbmEtXHUwMDNlc2NyYXRjaF9wYWdlKTtcbmtlcm5lbC9icGYvYXJlbmEuYzozMzY6ZXJyX2ZyZWVfYXJlbmE6XG5rZXJuZWwvYnBmL2FyZW5hLmM6MzM3Olx0YnBmX21hcF9hcmVhX2ZyZWUoYXJlbmEpO1xua2VybmVsL2JwZi9hcmVuYS5jLTMzOC1lcnI6XG4tLVxua2VybmVsL2JwZi9hcmVuYS5jPTM0Mz1zdGF0aWMgaW50IGV4aXN0aW5nX3BhZ2VfY2IocHRlX3QgKnB0ZXAsIHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqZGF0YSlcbmtlcm5lbC9icGYvYXJlbmEuYy0zNDQte1xua2VybmVsL2JwZi9hcmVuYS5jOjM0NTpcdHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hID0gZGF0YTtcbmtlcm5lbC9icGYvYXJlbmEuYy0zNDYtXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtMzU2LVx0ICovXG5rZXJuZWwvYnBmL2FyZW5hLmM6MzU3Olx0aWYgKHBhZ2UgPT0gYXJlbmEtXHUwMDNlc2NyYXRjaF9wYWdlKVxua2VybmVsL2JwZi9hcmVuYS5jLTM1OC1cdFx0cmV0dXJuIDA7XG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTM2MC1cdCAqIFdlIGRvIG5vdCB1cGRhdGUgcHRlIGhlcmU6XG5rZXJuZWwvYnBmL2FyZW5hLmM6MzYxOlx0ICogMS4gTm9ib2R5IHNob3VsZCBiZSBhY2Nlc3NpbmcgYnBmX2FyZW5hJiMzOTtzIHJhbmdlIG91dHNpZGUgb2YgYSBrZXJuZWwgYnVnXG5rZXJuZWwvYnBmL2FyZW5hLmMtMzYyLVx0ICogMi4gVExCIGZsdXNoaW5nIGlzIGJhdGNoZWQgb3IgZGVmZXJyZWQuIEV2ZW4gaWYgd2UgY2xlYXIgcHRlLFxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy0zNjktXG5rZXJuZWwvYnBmL2FyZW5hLmM6MzcwOnN0YXRpYyB2b2lkIGFyZW5hX21hcF9mcmVlKHN0cnVjdCBicGZfbWFwICptYXApXG5rZXJuZWwvYnBmL2FyZW5hLmMtMzcxLXtcbmtlcm5lbC9icGYvYXJlbmEuYzozNzI6XHRzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfYXJlbmEsIG1hcCk7XG5rZXJuZWwvYnBmL2FyZW5hLmMtMzczLVxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy0zNzYtXHQgKiBtbWFwKCkgaG9sZHMgdm1fZmlsZSB3aGljaCBob2xkcyBicGZfbWFwIHJlZmNudC5cbmtlcm5lbC9icGYvYXJlbmEuYzozNzc6XHQgKiBtdW5tYXAoKSBtdXN0IGhhdmUgaGFwcGVuZWQgb24gdm1hIGZvbGxvd2VkIGJ5IGFyZW5hX3ZtX2Nsb3NlKClcbmtlcm5lbC9icGYvYXJlbmEuYzozNzg6XHQgKiB3aGljaCB3b3VsZCBjbGVhciBhcmVuYS1cdTAwM2V2bWFfbGlzdC5cbmtlcm5lbC9icGYvYXJlbmEuYy0zNzktXHQgKi9cbmtlcm5lbC9icGYvYXJlbmEuYzozODA6XHRpZiAoV0FSTl9PTl9PTkNFKCFsaXN0X2VtcHR5KFx1MDAyNmFyZW5hLVx1MDAzZXZtYV9saXN0KSkpXG5rZXJuZWwvYnBmL2FyZW5hLmMtMzgxLVx0XHRyZXR1cm47XG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTM4My1cdC8qIEVuc3VyZSBubyBwZW5kaW5nIGRlZmVycmVkIGZyZWVzICovXG5rZXJuZWwvYnBmL2FyZW5hLmM6Mzg0Olx0aXJxX3dvcmtfc3luYyhcdTAwMjZhcmVuYS1cdTAwM2VmcmVlX2lycSk7XG5rZXJuZWwvYnBmL2FyZW5hLmM6Mzg1Olx0Zmx1c2hfd29yayhcdTAwMjZhcmVuYS1cdTAwM2VmcmVlX3dvcmspO1xua2VybmVsL2JwZi9hcmVuYS5jLTM4Ni1cbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtMzkyLVx0ICovXG5rZXJuZWwvYnBmL2FyZW5hLmM6MzkzOlx0YXBwbHlfdG9fZXhpc3RpbmdfcGFnZV9yYW5nZShcdTAwMjZpbml0X21tLCBicGZfYXJlbmFfZ2V0X2tlcm5fdm1fc3RhcnQoYXJlbmEpLFxua2VybmVsL2JwZi9hcmVuYS5jOjM5NDpcdFx0XHRcdCAgICAgU1pfNEcgJiM0MzsgR1VBUkRfU1ogLyAyLCBleGlzdGluZ19wYWdlX2NiLCBhcmVuYSk7XG5rZXJuZWwvYnBmL2FyZW5hLmM6Mzk1Olx0ZnJlZV92bV9hcmVhKGFyZW5hLVx1MDAzZWtlcm5fdm0pO1xua2VybmVsL2JwZi9hcmVuYS5jOjM5NjpcdHJhbmdlX3RyZWVfZGVzdHJveShcdTAwMjZhcmVuYS1cdTAwM2VydCk7XG5rZXJuZWwvYnBmL2FyZW5hLmM6Mzk3Olx0X19mcmVlX3BhZ2UoYXJlbmEtXHUwMDNlc2NyYXRjaF9wYWdlKTtcbmtlcm5lbC9icGYvYXJlbmEuYzozOTg6XHRicGZfbWFwX2FyZWFfZnJlZShhcmVuYSk7XG5rZXJuZWwvYnBmL2FyZW5hLmMtMzk5LX1cbmtlcm5lbC9icGYvYXJlbmEuYy00MDAtXG5rZXJuZWwvYnBmL2FyZW5hLmM6NDAxOnN0YXRpYyB2b2lkICphcmVuYV9tYXBfbG9va3VwX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxua2VybmVsL2JwZi9hcmVuYS5jLTQwMi17XG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTQwNS1cbmtlcm5lbC9icGYvYXJlbmEuYzo0MDY6c3RhdGljIGxvbmcgYXJlbmFfbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSxcbmtlcm5lbC9icGYvYXJlbmEuYy00MDctXHRcdFx0XHQgIHZvaWQgKnZhbHVlLCB1NjQgZmxhZ3MpXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTQxMS1cbmtlcm5lbC9icGYvYXJlbmEuYzo0MTI6c3RhdGljIGludCBhcmVuYV9tYXBfY2hlY2tfYnRmKHN0cnVjdCBicGZfbWFwICptYXAsIGNvbnN0IHN0cnVjdCBidGYgKmJ0Zixcbmtlcm5lbC9icGYvYXJlbmEuYy00MTMtXHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqa2V5X3R5cGUsIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdmFsdWVfdHlwZSlcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtNDE3LVxua2VybmVsL2JwZi9hcmVuYS5jOjQxODpzdGF0aWMgdTY0IGFyZW5hX21hcF9tZW1fdXNhZ2UoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcClcbmtlcm5lbC9icGYvYXJlbmEuYy00MTkte1xua2VybmVsL2JwZi9hcmVuYS5jOjQyMDpcdHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9hcmVuYSwgbWFwKTtcbmtlcm5lbC9icGYvYXJlbmEuYy00MjEtXG5rZXJuZWwvYnBmL2FyZW5hLmM6NDIyOlx0cmV0dXJuICh1NjQpUkVBRF9PTkNFKGFyZW5hLVx1MDAzZW5yX3BhZ2VzKSBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVDtcbmtlcm5lbC9icGYvYXJlbmEuYy00MjMtfVxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYz00MjU9c3RydWN0IHZtYV9saXN0IHtcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtNDMxLVxua2VybmVsL2JwZi9hcmVuYS5jOjQzMjpzdGF0aWMgaW50IHJlbWVtYmVyX3ZtYShzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG5rZXJuZWwvYnBmL2FyZW5hLmMtNDMzLXtcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtNDQyLVx0dm1sLVx1MDAzZXphcF9nZW4gPSAwO1xua2VybmVsL2JwZi9hcmVuYS5jOjQ0MzpcdGxpc3RfYWRkKFx1MDAyNnZtbC1cdTAwM2VoZWFkLCBcdTAwMjZhcmVuYS1cdTAwM2V2bWFfbGlzdCk7XG5rZXJuZWwvYnBmL2FyZW5hLmMtNDQ0LVx0cmV0dXJuIDA7XG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTQ0Ni1cbmtlcm5lbC9icGYvYXJlbmEuYzo0NDc6c3RhdGljIHZvaWQgYXJlbmFfdm1fb3BlbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbmtlcm5lbC9icGYvYXJlbmEuYy00NDgte1xuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy00NTMtXG5rZXJuZWwvYnBmL2FyZW5hLmM6NDU0OnN0YXRpYyBpbnQgYXJlbmFfdm1fbWF5X3NwbGl0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpXG5rZXJuZWwvYnBmL2FyZW5hLmMtNDU1LXtcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtNDU4LVxua2VybmVsL2JwZi9hcmVuYS5jOjQ1OTpzdGF0aWMgaW50IGFyZW5hX3ZtX21yZW1hcChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbmtlcm5lbC9icGYvYXJlbmEuYy00NjAte1xuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy00NjMtXG5rZXJuZWwvYnBmL2FyZW5hLmM6NDY0OnN0YXRpYyB2b2lkIGFyZW5hX3ZtX2Nsb3NlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxua2VybmVsL2JwZi9hcmVuYS5jLTQ2NS17XG5rZXJuZWwvYnBmL2FyZW5hLmMtNDY2LVx0c3RydWN0IGJwZl9tYXAgKm1hcCA9IHZtYS1cdTAwM2V2bV9maWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbmtlcm5lbC9icGYvYXJlbmEuYzo0Njc6XHRzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfYXJlbmEsIG1hcCk7XG5rZXJuZWwvYnBmL2FyZW5hLmMtNDY4LVx0c3RydWN0IHZtYV9saXN0ICp2bWwgPSB2bWEtXHUwMDNldm1fcHJpdmF0ZV9kYXRhO1xuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy00NzEtXHRcdHJldHVybjtcbmtlcm5lbC9icGYvYXJlbmEuYzo0NzI6XHRndWFyZChtdXRleCkoXHUwMDI2YXJlbmEtXHUwMDNlbG9jayk7XG5rZXJuZWwvYnBmL2FyZW5hLmMtNDczLVx0LyogdXBkYXRlIGxpbmsgbGlzdCB1bmRlciBsb2NrICovXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTQ3OC1cbmtlcm5lbC9icGYvYXJlbmEuYzo0Nzk6c3RhdGljIHZtX2ZhdWx0X3QgYXJlbmFfdm1fZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG5rZXJuZWwvYnBmL2FyZW5hLmMtNDgwLXtcbmtlcm5lbC9icGYvYXJlbmEuYy00ODEtXHRzdHJ1Y3QgYnBmX21hcCAqbWFwID0gdm1mLVx1MDAzZXZtYS1cdTAwM2V2bV9maWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbmtlcm5lbC9icGYvYXJlbmEuYzo0ODI6XHRzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfYXJlbmEsIG1hcCk7XG5rZXJuZWwvYnBmL2FyZW5hLmMtNDgzLVx0c3RydWN0IG1lbV9jZ3JvdXAgKm5ld19tZW1jZywgKm9sZF9tZW1jZztcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtNDg4LVxua2VybmVsL2JwZi9hcmVuYS5jOjQ4OTpcdGtiYXNlID0gYnBmX2FyZW5hX2dldF9rZXJuX3ZtX3N0YXJ0KGFyZW5hKTtcbmtlcm5lbC9icGYvYXJlbmEuYy00OTAtXHRrYWRkciA9IGtiYXNlICYjNDM7ICh1MzIpKHZtZi1cdTAwM2VhZGRyZXNzKTtcbmtlcm5lbC9icGYvYXJlbmEuYy00OTEtXG5rZXJuZWwvYnBmL2FyZW5hLmM6NDkyOlx0aWYgKHJhd19yZXNfc3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2YXJlbmEtXHUwMDNlc3BpbmxvY2ssIGZsYWdzKSlcbmtlcm5lbC9icGYvYXJlbmEuYy00OTMtXHRcdC8qXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTUwMS1cdGlmIChwYWdlKSB7XG5rZXJuZWwvYnBmL2FyZW5hLmM6NTAyOlx0XHRpZiAocGFnZSA9PSBhcmVuYS1cdTAwM2VzY3JhdGNoX3BhZ2UpXG5rZXJuZWwvYnBmL2FyZW5hLmMtNTAzLVx0XHRcdC8qIEJQRiB0cmlnZ2VyZWQgc2NyYXRjaCBoZXJlOyBkb24mIzM5O3QgbGF6eS1hbGxvYyBvdmVyIGl0ICovXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTUwOC1cbmtlcm5lbC9icGYvYXJlbmEuYzo1MDk6XHRicGZfbWFwX21lbWNnX2VudGVyKFx1MDAyNmFyZW5hLVx1MDAzZW1hcCwgXHUwMDI2b2xkX21lbWNnLCBcdTAwMjZuZXdfbWVtY2cpO1xua2VybmVsL2JwZi9hcmVuYS5jLTUxMC1cbmtlcm5lbC9icGYvYXJlbmEuYzo1MTE6XHRpZiAoYXJlbmEtXHUwMDNlbWFwLm1hcF9mbGFncyBcdTAwMjYgQlBGX0ZfU0VHVl9PTl9GQVVMVClcbmtlcm5lbC9icGYvYXJlbmEuYy01MTItXHRcdC8qIFVzZXIgc3BhY2UgcmVxdWVzdGVkIHRvIHNlZ2ZhdWx0IHdoZW4gcGFnZSBpcyBub3QgYWxsb2NhdGVkIGJ5IGJwZiBwcm9nICovXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTUxNC1cbmtlcm5lbC9icGYvYXJlbmEuYzo1MTU6XHRyZXQgPSByYW5nZV90cmVlX2NsZWFyKFx1MDAyNmFyZW5hLVx1MDAzZXJ0LCB2bWYtXHUwMDNlcGdvZmYsIDEpO1xua2VybmVsL2JwZi9hcmVuYS5jLTUxNi1cdGlmIChyZXQpXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTUxOC1cbmtlcm5lbC9icGYvYXJlbmEuYzo1MTk6XHRzdHJ1Y3QgYXBwbHlfcmFuZ2VfZGF0YSBkYXRhID0geyAuYXJlbmEgPSBhcmVuYSwgLnBhZ2VzID0gXHUwMDI2cGFnZSwgLmkgPSAwIH07XG5rZXJuZWwvYnBmL2FyZW5hLmM6NTIwOlx0LyogQWNjb3VudCBpbnRvIG1lbWNnIG9mIHRoZSBwcm9jZXNzIHRoYXQgY3JlYXRlZCBicGZfYXJlbmEgKi9cbmtlcm5lbC9icGYvYXJlbmEuYy01MjEtXHRyZXQgPSBicGZfbWFwX2FsbG9jX3BhZ2VzKG1hcCwgTlVNQV9OT19OT0RFLCAxLCBcdTAwMjZwYWdlKTtcbmtlcm5lbC9icGYvYXJlbmEuYy01MjItXHRpZiAocmV0KSB7XG5rZXJuZWwvYnBmL2FyZW5hLmM6NTIzOlx0XHRyYW5nZV90cmVlX3NldChcdTAwMjZhcmVuYS1cdTAwM2VydCwgdm1mLVx1MDAzZXBnb2ZmLCAxKTtcbmtlcm5lbC9icGYvYXJlbmEuYy01MjQtXHRcdGdvdG8gb3V0X3NpZ3NlZ3ZfbWVtY2c7XG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTUyOC1cdGlmIChyZXQpIHtcbmtlcm5lbC9icGYvYXJlbmEuYzo1Mjk6XHRcdHJhbmdlX3RyZWVfc2V0KFx1MDAyNmFyZW5hLVx1MDAzZXJ0LCB2bWYtXHUwMDNlcGdvZmYsIDEpO1xua2VybmVsL2JwZi9hcmVuYS5jLTUzMC1cdFx0ZnJlZV9wYWdlc19ub2xvY2socGFnZSwgMCk7XG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTUzNi1cdHBhZ2VfcmVmX2FkZChwYWdlLCAxKTtcbmtlcm5lbC9icGYvYXJlbmEuYzo1Mzc6XHRyYXdfcmVzX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2YXJlbmEtXHUwMDNlc3BpbmxvY2ssIGZsYWdzKTtcbmtlcm5lbC9icGYvYXJlbmEuYy01MzgtXHR2bWYtXHUwMDNlcGFnZSA9IHBhZ2U7XG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTU0Mi1vdXRfc2lnc2Vndjpcbmtlcm5lbC9icGYvYXJlbmEuYzo1NDM6XHRyYXdfcmVzX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2YXJlbmEtXHUwMDNlc3BpbmxvY2ssIGZsYWdzKTtcbmtlcm5lbC9icGYvYXJlbmEuYy01NDQtXHRyZXR1cm4gVk1fRkFVTFRfU0lHU0VHVjtcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtNTQ2LVxua2VybmVsL2JwZi9hcmVuYS5jOjU0NzpzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGFyZW5hX3ZtX29wcyA9IHtcbmtlcm5lbC9icGYvYXJlbmEuYzo1NDg6XHQub3Blblx0XHQ9IGFyZW5hX3ZtX29wZW4sXG5rZXJuZWwvYnBmL2FyZW5hLmM6NTQ5Olx0Lm1heV9zcGxpdFx0PSBhcmVuYV92bV9tYXlfc3BsaXQsXG5rZXJuZWwvYnBmL2FyZW5hLmM6NTUwOlx0Lm1yZW1hcFx0XHQ9IGFyZW5hX3ZtX21yZW1hcCxcbmtlcm5lbC9icGYvYXJlbmEuYzo1NTE6XHQuY2xvc2VcdFx0PSBhcmVuYV92bV9jbG9zZSxcbmtlcm5lbC9icGYvYXJlbmEuYzo1NTI6XHQuZmF1bHQgICAgICAgICAgPSBhcmVuYV92bV9mYXVsdCxcbmtlcm5lbC9icGYvYXJlbmEuYy01NTMtfTtcbmtlcm5lbC9icGYvYXJlbmEuYy01NTQtXG5rZXJuZWwvYnBmL2FyZW5hLmM6NTU1OnN0YXRpYyB1bnNpZ25lZCBsb25nIGFyZW5hX2dldF91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFkZHIsXG5rZXJuZWwvYnBmL2FyZW5hLmMtNTU2LVx0XHRcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgbGVuLCB1bnNpZ25lZCBsb25nIHBnb2ZmLFxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy01NTktXHRzdHJ1Y3QgYnBmX21hcCAqbWFwID0gZmlscC1cdTAwM2Vwcml2YXRlX2RhdGE7XG5rZXJuZWwvYnBmL2FyZW5hLmM6NTYwOlx0c3RydWN0IGJwZl9hcmVuYSAqYXJlbmEgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX2FyZW5hLCBtYXApO1xua2VybmVsL2JwZi9hcmVuYS5jLTU2MS1cdGxvbmcgcmV0O1xuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy01NjctXG5rZXJuZWwvYnBmL2FyZW5hLmM6NTY4Olx0LyogaWYgdXNlcl92bV9zdGFydCB3YXMgc3BlY2lmaWVkIGF0IGFyZW5hIGNyZWF0aW9uIHRpbWUgKi9cbmtlcm5lbC9icGYvYXJlbmEuYzo1Njk6XHRpZiAoYXJlbmEtXHUwMDNldXNlcl92bV9zdGFydCkge1xua2VybmVsL2JwZi9hcmVuYS5jOjU3MDpcdFx0aWYgKGxlbiBcdTAwM2UgYXJlbmEtXHUwMDNldXNlcl92bV9lbmQgLSBhcmVuYS1cdTAwM2V1c2VyX3ZtX3N0YXJ0KVxua2VybmVsL2JwZi9hcmVuYS5jLTU3MS1cdFx0XHRyZXR1cm4gLUUyQklHO1xua2VybmVsL2JwZi9hcmVuYS5jOjU3MjpcdFx0aWYgKGxlbiAhPSBhcmVuYS1cdTAwM2V1c2VyX3ZtX2VuZCAtIGFyZW5hLVx1MDAzZXVzZXJfdm1fc3RhcnQpXG5rZXJuZWwvYnBmL2FyZW5hLmMtNTczLVx0XHRcdHJldHVybiAtRUlOVkFMO1xua2VybmVsL2JwZi9hcmVuYS5jOjU3NDpcdFx0aWYgKGFkZHIgIT0gYXJlbmEtXHUwMDNldXNlcl92bV9zdGFydClcbmtlcm5lbC9icGYvYXJlbmEuYy01NzUtXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTU4Mi1cdFx0cmV0dXJuIHJldDtcbmtlcm5lbC9icGYvYXJlbmEuYzo1ODM6XHRpZiAoV0FSTl9PTl9PTkNFKGFyZW5hLVx1MDAzZXVzZXJfdm1fc3RhcnQpKVxua2VybmVsL2JwZi9hcmVuYS5jLTU4NC1cdFx0LyogY2hlY2tzIGF0IG1hcCBjcmVhdGlvbiB0aW1lIHNob3VsZCBwcmV2ZW50IHRoaXMgKi9cbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtNTg4LVxua2VybmVsL2JwZi9hcmVuYS5jOjU4OTpzdGF0aWMgaW50IGFyZW5hX21hcF9tbWFwKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxua2VybmVsL2JwZi9hcmVuYS5jLTU5MC17XG5rZXJuZWwvYnBmL2FyZW5hLmM6NTkxOlx0c3RydWN0IGJwZl9hcmVuYSAqYXJlbmEgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX2FyZW5hLCBtYXApO1xua2VybmVsL2JwZi9hcmVuYS5jLTU5Mi1cbmtlcm5lbC9icGYvYXJlbmEuYzo1OTM6XHRndWFyZChtdXRleCkoXHUwMDI2YXJlbmEtXHUwMDNlbG9jayk7XG5rZXJuZWwvYnBmL2FyZW5hLmM6NTk0Olx0aWYgKGFyZW5hLVx1MDAzZXVzZXJfdm1fc3RhcnQgXHUwMDI2XHUwMDI2IGFyZW5hLVx1MDAzZXVzZXJfdm1fc3RhcnQgIT0gdm1hLVx1MDAzZXZtX3N0YXJ0KVxua2VybmVsL2JwZi9hcmVuYS5jLTU5NS1cdFx0Lypcbmtlcm5lbC9icGYvYXJlbmEuYzo1OTY6XHRcdCAqIElmIG1hcF9leHRyYSB3YXMgbm90IHNwZWNpZmllZCBhdCBhcmVuYSBjcmVhdGlvbiB0aW1lIHRoZW5cbmtlcm5lbC9icGYvYXJlbmEuYy01OTctXHRcdCAqIDFzdCB1c2VyIHByb2Nlc3MgY2FuIGRvIG1tYXAoTlVMTCwgLi4uKSB0byBwaWNrIHVzZXJfdm1fc3RhcnRcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtNjA0LVxua2VybmVsL2JwZi9hcmVuYS5jOjYwNTpcdGlmIChhcmVuYS1cdTAwM2V1c2VyX3ZtX2VuZCBcdTAwMjZcdTAwMjYgYXJlbmEtXHUwMDNldXNlcl92bV9lbmQgIT0gdm1hLVx1MDAzZXZtX2VuZClcbmtlcm5lbC9icGYvYXJlbmEuYy02MDYtXHRcdC8qIGFsbCB1c2VyIHByb2Nlc3NlcyBtdXN0IGhhdmUgdGhlIHNhbWUgc2l6ZSBvZiBtbWFwLWVkIHJlZ2lvbiAqL1xuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy02MTItXG5rZXJuZWwvYnBmL2FyZW5hLmM6NjEzOlx0aWYgKHJlbWVtYmVyX3ZtYShhcmVuYSwgdm1hKSlcbmtlcm5lbC9icGYvYXJlbmEuYy02MTQtXHRcdHJldHVybiAtRU5PTUVNO1xua2VybmVsL2JwZi9hcmVuYS5jLTYxNS1cbmtlcm5lbC9icGYvYXJlbmEuYzo2MTY6XHRhcmVuYS1cdTAwM2V1c2VyX3ZtX3N0YXJ0ID0gdm1hLVx1MDAzZXZtX3N0YXJ0O1xua2VybmVsL2JwZi9hcmVuYS5jOjYxNzpcdGFyZW5hLVx1MDAzZXVzZXJfdm1fZW5kID0gdm1hLVx1MDAzZXZtX2VuZDtcbmtlcm5lbC9icGYvYXJlbmEuYy02MTgtXHQvKlxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy02MjAtXHQgKiBjbGVhcnMgVk1fTUFZRVhFQy4gU2V0IFZNX0RPTlRFWFBBTkQgdG8gYXZvaWQgcG90ZW50aWFsIGNoYW5nZVxua2VybmVsL2JwZi9hcmVuYS5jOjYyMTpcdCAqIG9mIHVzZXJfdm1fc3RhcnQuIFNldCBWTV9ET05UQ09QWSB0byBwcmV2ZW50IGFyZW5hIFZNQSBmcm9tXG5rZXJuZWwvYnBmL2FyZW5hLmMtNjIyLVx0ICogYmVpbmcgY29waWVkIGludG8gdGhlIGNoaWxkIHByb2Nlc3Mgb24gZm9yay5cbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtNjI0LVx0dm1fZmxhZ3Nfc2V0KHZtYSwgVk1fRE9OVEVYUEFORCB8IFZNX0RPTlRDT1BZKTtcbmtlcm5lbC9icGYvYXJlbmEuYzo2MjU6XHR2bWEtXHUwMDNldm1fb3BzID0gXHUwMDI2YXJlbmFfdm1fb3BzO1xua2VybmVsL2JwZi9hcmVuYS5jLTYyNi1cdHJldHVybiAwO1xuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy02MjgtXG5rZXJuZWwvYnBmL2FyZW5hLmM6NjI5OnN0YXRpYyBpbnQgYXJlbmFfbWFwX2RpcmVjdF92YWx1ZV9hZGRyKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXAsIHU2NCAqaW1tLCB1MzIgb2ZmKVxua2VybmVsL2JwZi9hcmVuYS5jLTYzMC17XG5rZXJuZWwvYnBmL2FyZW5hLmM6NjMxOlx0c3RydWN0IGJwZl9hcmVuYSAqYXJlbmEgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX2FyZW5hLCBtYXApO1xua2VybmVsL2JwZi9hcmVuYS5jLTYzMi1cbmtlcm5lbC9icGYvYXJlbmEuYzo2MzM6XHRpZiAoKHU2NClvZmYgXHUwMDNlPSBhcmVuYS1cdTAwM2V1c2VyX3ZtX2VuZCAtIGFyZW5hLVx1MDAzZXVzZXJfdm1fc3RhcnQpXG5rZXJuZWwvYnBmL2FyZW5hLmMtNjM0LVx0XHRyZXR1cm4gLUVSQU5HRTtcbmtlcm5lbC9icGYvYXJlbmEuYzo2MzU6XHQqaW1tID0gKHVuc2lnbmVkIGxvbmcpYXJlbmEtXHUwMDNldXNlcl92bV9zdGFydDtcbmtlcm5lbC9icGYvYXJlbmEuYy02MzYtXHRyZXR1cm4gMDtcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtNjM4LVxua2VybmVsL2JwZi9hcmVuYS5jOjYzOTpCVEZfSURfTElTVF9TSU5HTEUoYnBmX2FyZW5hX21hcF9idGZfaWRzLCBzdHJ1Y3QsIGJwZl9hcmVuYSlcbmtlcm5lbC9icGYvYXJlbmEuYzo2NDA6Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIGFyZW5hX21hcF9vcHMgPSB7XG5rZXJuZWwvYnBmL2FyZW5hLmMtNjQxLVx0Lm1hcF9tZXRhX2VxdWFsID0gYnBmX21hcF9tZXRhX2VxdWFsLFxua2VybmVsL2JwZi9hcmVuYS5jOjY0MjpcdC5tYXBfYWxsb2MgPSBhcmVuYV9tYXBfYWxsb2MsXG5rZXJuZWwvYnBmL2FyZW5hLmM6NjQzOlx0Lm1hcF9mcmVlID0gYXJlbmFfbWFwX2ZyZWUsXG5rZXJuZWwvYnBmL2FyZW5hLmM6NjQ0Olx0Lm1hcF9kaXJlY3RfdmFsdWVfYWRkciA9IGFyZW5hX21hcF9kaXJlY3RfdmFsdWVfYWRkcixcbmtlcm5lbC9icGYvYXJlbmEuYzo2NDU6XHQubWFwX21tYXAgPSBhcmVuYV9tYXBfbW1hcCxcbmtlcm5lbC9icGYvYXJlbmEuYzo2NDY6XHQubWFwX2dldF91bm1hcHBlZF9hcmVhID0gYXJlbmFfZ2V0X3VubWFwcGVkX2FyZWEsXG5rZXJuZWwvYnBmL2FyZW5hLmM6NjQ3Olx0Lm1hcF9nZXRfbmV4dF9rZXkgPSBhcmVuYV9tYXBfZ2V0X25leHRfa2V5LFxua2VybmVsL2JwZi9hcmVuYS5jOjY0ODpcdC5tYXBfcHVzaF9lbGVtID0gYXJlbmFfbWFwX3B1c2hfZWxlbSxcbmtlcm5lbC9icGYvYXJlbmEuYzo2NDk6XHQubWFwX3BlZWtfZWxlbSA9IGFyZW5hX21hcF9wZWVrX2VsZW0sXG5rZXJuZWwvYnBmL2FyZW5hLmM6NjUwOlx0Lm1hcF9wb3BfZWxlbSA9IGFyZW5hX21hcF9wb3BfZWxlbSxcbmtlcm5lbC9icGYvYXJlbmEuYzo2NTE6XHQubWFwX2xvb2t1cF9lbGVtID0gYXJlbmFfbWFwX2xvb2t1cF9lbGVtLFxua2VybmVsL2JwZi9hcmVuYS5jOjY1MjpcdC5tYXBfdXBkYXRlX2VsZW0gPSBhcmVuYV9tYXBfdXBkYXRlX2VsZW0sXG5rZXJuZWwvYnBmL2FyZW5hLmM6NjUzOlx0Lm1hcF9kZWxldGVfZWxlbSA9IGFyZW5hX21hcF9kZWxldGVfZWxlbSxcbmtlcm5lbC9icGYvYXJlbmEuYzo2NTQ6XHQubWFwX2NoZWNrX2J0ZiA9IGFyZW5hX21hcF9jaGVja19idGYsXG5rZXJuZWwvYnBmL2FyZW5hLmM6NjU1Olx0Lm1hcF9tZW1fdXNhZ2UgPSBhcmVuYV9tYXBfbWVtX3VzYWdlLFxua2VybmVsL2JwZi9hcmVuYS5jOjY1NjpcdC5tYXBfYnRmX2lkID0gXHUwMDI2YnBmX2FyZW5hX21hcF9idGZfaWRzWzBdLFxua2VybmVsL2JwZi9hcmVuYS5jLTY1Ny19O1xuLS1cbmtlcm5lbC9icGYvYXJlbmEuYz02NTk9c3RhdGljIHU2NCBjbGVhcl9sbzMyKHU2NCB2YWwpXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTY2Ny0gKi9cbmtlcm5lbC9icGYvYXJlbmEuYzo2Njg6c3RhdGljIGxvbmcgYXJlbmFfYWxsb2NfcGFnZXMoc3RydWN0IGJwZl9hcmVuYSAqYXJlbmEsIGxvbmcgdWFkZHIsIGxvbmcgcGFnZV9jbnQsIGludCBub2RlX2lkLFxua2VybmVsL2JwZi9hcmVuYS5jLTY2OS1cdFx0XHQgICAgICBib29sIHNsZWVwYWJsZSlcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtNjcxLVx0LyogdXNlcl92bV9lbmQvc3RhcnQgYXJlIGZpeGVkIGJlZm9yZSBicGYgcHJvZyBydW5zICovXG5rZXJuZWwvYnBmL2FyZW5hLmM6NjcyOlx0bG9uZyBwYWdlX2NudF9tYXggPSAoYXJlbmEtXHUwMDNldXNlcl92bV9lbmQgLSBhcmVuYS1cdTAwM2V1c2VyX3ZtX3N0YXJ0KSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbmtlcm5lbC9icGYvYXJlbmEuYzo2NzM6XHR1NjQga2Vybl92bV9zdGFydCA9IGJwZl9hcmVuYV9nZXRfa2Vybl92bV9zdGFydChhcmVuYSk7XG5rZXJuZWwvYnBmL2FyZW5hLmMtNjc0LVx0c3RydWN0IG1lbV9jZ3JvdXAgKm5ld19tZW1jZywgKm9sZF9tZW1jZztcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtNjkzLVx0XHRcdHJldHVybiAwO1xua2VybmVsL2JwZi9hcmVuYS5jOjY5NDpcdFx0cGdvZmYgPSBjb21wdXRlX3Bnb2ZmKGFyZW5hLCB1YWRkcik7XG5rZXJuZWwvYnBmL2FyZW5hLmMtNjk1LVx0XHRpZiAocGdvZmYgXHUwMDNlIHBhZ2VfY250X21heCAtIHBhZ2VfY250KVxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy02OTktXG5rZXJuZWwvYnBmL2FyZW5hLmM6NzAwOlx0YnBmX21hcF9tZW1jZ19lbnRlcihcdTAwMjZhcmVuYS1cdTAwM2VtYXAsIFx1MDAyNm9sZF9tZW1jZywgXHUwMDI2bmV3X21lbWNnKTtcbmtlcm5lbC9icGYvYXJlbmEuYy03MDEtXHQvKiBDYXAgYWxsb2NhdGlvbiBzaXplIHRvIEtNQUxMT0NfTUFYX0NBQ0hFX1NJWkUgc28ga21hbGxvY19ub2xvY2soKSBjYW4gc3VjY2VlZC4gKi9cbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzA3LVx0fVxua2VybmVsL2JwZi9hcmVuYS5jOjcwODpcdGRhdGEuYXJlbmEgPSBhcmVuYTtcbmtlcm5lbC9icGYvYXJlbmEuYy03MDktXHRkYXRhLnBhZ2VzID0gcGFnZXM7XG5rZXJuZWwvYnBmL2FyZW5hLmMtNzEwLVxua2VybmVsL2JwZi9hcmVuYS5jOjcxMTpcdGlmIChyYXdfcmVzX3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmFyZW5hLVx1MDAzZXNwaW5sb2NrLCBmbGFncykpXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzEyLVx0XHRnb3RvIG91dF9mcmVlX3BhZ2VzO1xuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy03MTQtXHRpZiAodWFkZHIpIHtcbmtlcm5lbC9icGYvYXJlbmEuYzo3MTU6XHRcdHJldCA9IGlzX3JhbmdlX3RyZWVfc2V0KFx1MDAyNmFyZW5hLVx1MDAzZXJ0LCBwZ29mZiwgcGFnZV9jbnQpO1xua2VybmVsL2JwZi9hcmVuYS5jLTcxNi1cdFx0aWYgKHJldClcbmtlcm5lbC9icGYvYXJlbmEuYy03MTctXHRcdFx0Z290byBvdXRfdW5sb2NrX2ZyZWVfcGFnZXM7XG5rZXJuZWwvYnBmL2FyZW5hLmM6NzE4Olx0XHRyZXQgPSByYW5nZV90cmVlX2NsZWFyKFx1MDAyNmFyZW5hLVx1MDAzZXJ0LCBwZ29mZiwgcGFnZV9jbnQpO1xua2VybmVsL2JwZi9hcmVuYS5jLTcxOS1cdH0gZWxzZSB7XG5rZXJuZWwvYnBmL2FyZW5hLmM6NzIwOlx0XHRyZXQgPSBwZ29mZiA9IHJhbmdlX3RyZWVfZmluZChcdTAwMjZhcmVuYS1cdTAwM2VydCwgcGFnZV9jbnQpO1xua2VybmVsL2JwZi9hcmVuYS5jLTcyMS1cdFx0aWYgKHBnb2ZmIFx1MDAzZT0gMClcbmtlcm5lbC9icGYvYXJlbmEuYzo3MjI6XHRcdFx0cmV0ID0gcmFuZ2VfdHJlZV9jbGVhcihcdTAwMjZhcmVuYS1cdTAwM2VydCwgcGdvZmYsIHBhZ2VfY250KTtcbmtlcm5lbC9icGYvYXJlbmEuYy03MjMtXHR9XG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTcyNy1cdHJlbWFpbmluZyA9IHBhZ2VfY250O1xua2VybmVsL2JwZi9hcmVuYS5jOjcyODpcdHVhZGRyMzIgPSAodTMyKShhcmVuYS1cdTAwM2V1c2VyX3ZtX3N0YXJ0ICYjNDM7IHBnb2ZmICogUEFHRV9TSVpFKTtcbmtlcm5lbC9icGYvYXJlbmEuYy03MjktXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTczNS1cbmtlcm5lbC9icGYvYXJlbmEuYzo3MzY6XHRcdHJldCA9IGJwZl9tYXBfYWxsb2NfcGFnZXMoXHUwMDI2YXJlbmEtXHUwMDNlbWFwLCBub2RlX2lkLCB0aGlzX2JhdGNoLCBwYWdlcyk7XG5rZXJuZWwvYnBmL2FyZW5hLmMtNzM3LVx0XHRpZiAocmV0KVxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy03NjMtXHRmbHVzaF92bWFwX2NhY2hlKGtlcm5fdm1fc3RhcnQgJiM0MzsgdWFkZHIzMiwgbWFwcGVkIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUKTtcbmtlcm5lbC9icGYvYXJlbmEuYzo3NjQ6XHRyYXdfcmVzX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2YXJlbmEtXHUwMDNlc3BpbmxvY2ssIGZsYWdzKTtcbmtlcm5lbC9icGYvYXJlbmEuYy03NjUtXHRrZnJlZV9ub2xvY2socGFnZXMpO1xua2VybmVsL2JwZi9hcmVuYS5jLTc2Ni1cdGJwZl9tYXBfbWVtY2dfZXhpdChvbGRfbWVtY2csIG5ld19tZW1jZyk7XG5rZXJuZWwvYnBmL2FyZW5hLmM6NzY3Olx0cmV0dXJuIGNsZWFyX2xvMzIoYXJlbmEtXHUwMDNldXNlcl92bV9zdGFydCkgJiM0MzsgdWFkZHIzMjtcbmtlcm5lbC9icGYvYXJlbmEuYy03Njgtb3V0Olxua2VybmVsL2JwZi9hcmVuYS5jOjc2OTpcdHJhbmdlX3RyZWVfc2V0KFx1MDAyNmFyZW5hLVx1MDAzZXJ0LCBwZ29mZiAmIzQzOyBtYXBwZWQsIHBhZ2VfY250IC0gbWFwcGVkKTtcbmtlcm5lbC9icGYvYXJlbmEuYzo3NzA6XHRyYXdfcmVzX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2YXJlbmEtXHUwMDNlc3BpbmxvY2ssIGZsYWdzKTtcbmtlcm5lbC9icGYvYXJlbmEuYy03NzEtXHRpZiAobWFwcGVkKSB7XG5rZXJuZWwvYnBmL2FyZW5hLmMtNzcyLVx0XHRmbHVzaF92bWFwX2NhY2hlKGtlcm5fdm1fc3RhcnQgJiM0MzsgdWFkZHIzMiwgbWFwcGVkIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUKTtcbmtlcm5lbC9icGYvYXJlbmEuYzo3NzM6XHRcdGFyZW5hX2ZyZWVfcGFnZXMoYXJlbmEsIHVhZGRyMzIsIG1hcHBlZCwgc2xlZXBhYmxlKTtcbmtlcm5lbC9icGYvYXJlbmEuYy03NzQtXHR9XG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTc3Ni1vdXRfdW5sb2NrX2ZyZWVfcGFnZXM6XG5rZXJuZWwvYnBmL2FyZW5hLmM6Nzc3Olx0cmF3X3Jlc19zcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmFyZW5hLVx1MDAzZXNwaW5sb2NrLCBmbGFncyk7XG5rZXJuZWwvYnBmL2FyZW5hLmMtNzc4LW91dF9mcmVlX3BhZ2VzOlxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy03ODgtICovXG5rZXJuZWwvYnBmL2FyZW5hLmM6Nzg5OnN0YXRpYyB2b2lkIHphcF9wYWdlcyhzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSwgbG9uZyB1YWRkciwgbG9uZyBwYWdlX2NudClcbmtlcm5lbC9icGYvYXJlbmEuYy03OTAte1xuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy03OTgtXHQvKlxua2VybmVsL2JwZi9hcmVuYS5jOjc5OTpcdCAqIFRha2luZyBtbWFwX3JlYWRfbG9jaygpIHVuZGVyIGFyZW5hLVx1MDAzZWxvY2sgd291bGQgZGVhZGxvY2sgYWdhaW5zdFxua2VybmVsL2JwZi9hcmVuYS5jOjgwMDpcdCAqIGFyZW5hX3ZtX2Nsb3NlKCksIHdoaWNoIHJ1bnMgd2l0aCBtbWFwX3dyaXRlX2xvY2sgaGVsZCBhbmQgdGhlblxua2VybmVsL2JwZi9hcmVuYS5jOjgwMTpcdCAqIGFjcXVpcmVzIGFyZW5hLVx1MDAzZWxvY2suIERyb3AgYXJlbmEtXHUwMDNlbG9jayBmb3IgbW1hcF9yZWFkX2xvY2soKS5cbmtlcm5lbC9icGYvYXJlbmEuYy04MDItXHQgKlxuLS1cblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAxMToxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzU2MQoJCQkJCQkJb3V0cHV0OiAxNDQKCQkJCQkJCXRob3VnaHRzOiA0NzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIEJQRiBWZXJpZmllciBDaGFuZ2UqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBsb29raW5nIGF0IHRoaXMgY2hhbmdlIGFuZCBJJiMzOTt2ZSBib2lsZWQgaXQgZG93biB0byBhIGZldyBrZXkgcG9pbnRzLiBGaXJzdCwgdGhlIGNvcmUgcmVxdWlyZW1lbnQgaXMgYENPTkZJR19CUEZfU1lTQ0FMTGAg4oCTIHRoYXQmIzM5O3MgdGhlIG1haW4gZHJpdmVyLiBUaGUgYGFyZW5hYCBmdW5jdGlvbmFsaXR5IEkmIzM5O20gaW50ZXJlc3RlZCBpbiwgc3BlY2lmaWNhbGx5IGBhcmVuYS5vYCwgaXMgb25seSBjb21waWxlZCBpZiBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyAqYWxzbyogZW5hYmxlZCBhbG9uZyB3aXRoIHRoZSBzdGFuZGFyZCBgQ09ORklHX01NVWAgYW5kIGBDT05GSUdfNjRCSVRgIGNvbmZpZ3MsIGJ1dCB0aG9zZSBhcmUgZ2VuZXJhbGx5IGEgZ2l2ZW4gb24geDg2XzY0LCB3aGljaCBJJiMzOTttIHdvcmtpbmcgd2l0aC4gU28sIGVzc2VudGlhbGx5LCBgQlBGX1NZU0NBTExgIGlzIHRoZSBjcnVjaWFsIGNvbmZpZ3VyYXRpb24gb3B0aW9uLgoKVGhlIHRlc3Qgc2V0dXAgdXNlcyBib3RoIGBhcmVuYWAgYW5kIGBzdGFja2AgYXRvbWljcywgc28gdGhhdCB0ZWxscyBtZSB0aGUgY2hhbmdlIHdpbGwgaGF2ZSBpbXBsaWNhdGlvbnMgaW4gdGhlc2UgYXJlYXMuIFRoZSB0ZXN0IGZpbGUgaXMgYHZlcmlmaWVyX2FyZW5hLmNgLCBidXQgdGhlIHJlYWwgZm9jdXMgbmVlZHMgdG8gYmUgb24gdGhlIHZlcmlmaWVyIGl0c2VsZi4KCk5vdywgdG8gc29saWRpZnkgYSBmb2NhbCBwb2ludCwgSSBkb3VibGUtY2hlY2tlZCB0aGUgcmVhY2hhYmlsaXR5IG9mIGBjaGVja19hdG9taWNfcm13YC4gSXQmIzM5O3MgZGVmaW5pdGVseSByZWFjaGFibGU7IGl0JiMzOTtzIGNhbGxlZCBieSBgY2hlY2tfYXRvbWljYCwgd2hpY2ggaW4gdHVybiBpcyBjYWxsZWQgYnkgYGRvX2NoZWNrX2luc25gLCB3aGljaCBpcyBjYWxsZWQgYnkgYGRvX2NoZWNrYCwgd2hpY2ggaXMgZmluYWxseSBjYWxsZWQgYnkgYGJwZl9jaGVja2AuIEFuZCB0aGF0JiMzOTtzIGV4YWN0bHkgd2hhdCBJIG5lZWQuIEdpdmVuIHRoZSBpbnN0cnVjdGlvbnMgdG8gcHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIGVudHJ5cG9pbnQgZnVuY3Rpb25zLCBgYnBmX2NoZWNrYCBpcyB0aGUgKnBlcmZlY3QqIHN5bWJvbCB0byBmb2N1cyBvbi4gSXQmIzM5O3MgdGhlIG1haW4gdmVyaWZpZXIgZW50cnkgcG9pbnQuCgpMb29raW5nIGF0IHRoZSBjb2RlIGNoYW5nZSBpdHNlbGY6CgpgYGBjCi0JaWYgKGlzX2FyZW5hX3JlZyhlbnYsIGluc24tJmd0O2RzdF9yZWcpKSB7Ci0JCWVyciA9IHNhdmVfYXV4X3B0cl90eXBlKGVudiwgUFRSX1RPX0FSRU5BLCBmYWxzZSk7Ci0JCWlmIChlcnIpCi0JCQlyZXR1cm4gZXJyOwotCX0KJiM0MzsJZXJyID0gc2F2ZV9hdXhfcHRyX3R5cGUoZW52LCBkc3RfcmVnLSZndDt0eXBlLCBmYWxzZSk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlyZXR1cm4gZXJyOwpgYGAKClRoaXMgaXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlICp3aXRoaW4qIHRoZSB2ZXJpZmllciBsb2dpYy4gSXQgbG9va3MgbGlrZSB0aGUgdHlwZSBpbmZvcm1hdGlvbiBpcyBiZWluZyBoYW5kbGVkIGRpZmZlcmVudGx5LiBJdCYjMzk7cyBjbGVhcmx5IHdvcnRoIGZ1enppbmcgdG8gdW5jb3ZlciBhbnkgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyBpbnRyb2R1Y2VkIGJ5IHRoaXMuCgpTbywgdGhlIGdhbWUgcGxhbiBpczoKCiogICAqKkZvY3VzIHN5bWJvbDoqKiBgYnBmX2NoZWNrYAoqICAgKipFbmFibGUgY29uZmlnOioqIGBCUEZfU1lTQ0FMTGAgKHNpbmNlIGl0IGFwcGVhcnMgdG8gYmUgdGhlIG1vc3QgcmVsZXZhbnQpCgpXaXRoIHRoYXQsIEkmIzM5O2xsIGJlIHVzaW5nIGBzZXQtcmVzdWx0c2AgdG8gcHJvcGVybHkgZGVmaW5lIHRoaXMgZnV6emluZyBhcHByb2FjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMTE6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2NoZWNrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXImIzM5O3MgaGFuZGxpbmcgb2YgYXRvbWljIHJlYWQtbW9kaWZ5LXdyaXRlIChSTVcpIGluc3RydWN0aW9ucyBieSBzYXZpbmcgdGhlIGF1eGlsaWFyeSBwb2ludGVyIHR5cGUgZm9yIGFsbCBkZXN0aW5hdGlvbiByZWdpc3RlcnMsIG5vdCBqdXN0IGFyZW5hIHJlZ2lzdGVycy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIGtlcm5lbCBCUEYgdmVyaWZpZXIgbG9naWMgdGhhdCBhZmZlY3RzIGhvdyBhdG9taWMgb3BlcmF0aW9ucyBhcmUgdmVyaWZpZWQgYW5kIGhhbmRsZWQsIHBhcnRpY3VsYXJseSB3aGVuIG1peGluZyBkaWZmZXJlbnQgcG9pbnRlciB0eXBlcyAobGlrZSBhcmVuYSBhbmQgc3RhY2sgcG9pbnRlcnMpIGluIHRoZSBzYW1lIGluc3RydWN0aW9uLiBUaGlzIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIHRoZSBicGYoKSBzeXNjYWxsIGFuZCBpcyB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9jaGVjayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyJiMzOTtzIGhhbmRsaW5nIG9mIGF0b21pYyByZWFkLW1vZGlmeS13cml0ZSAoUk1XKSBpbnN0cnVjdGlvbnMgYnkgc2F2aW5nIHRoZSBhdXhpbGlhcnkgcG9pbnRlciB0eXBlIGZvciBhbGwgZGVzdGluYXRpb24gcmVnaXN0ZXJzLCBub3QganVzdCBhcmVuYSByZWdpc3RlcnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBrZXJuZWwgQlBGIHZlcmlmaWVyIGxvZ2ljIHRoYXQgYWZmZWN0cyBob3cgYXRvbWljIG9wZXJhdGlvbnMgYXJlIHZlcmlmaWVkIGFuZCBoYW5kbGVkLCBwYXJ0aWN1bGFybHkgd2hlbiBtaXhpbmcgZGlmZmVyZW50IHBvaW50ZXIgdHlwZXMgKGxpa2UgYXJlbmEgYW5kIHN0YWNrIHBvaW50ZXJzKSBpbiB0aGUgc2FtZSBpbnN0cnVjdGlvbi4gVGhpcyBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSB0aGUgYnBmKCkgc3lzY2FsbCBhbmQgaXMgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMTE6MTk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAxMToxOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIEJQRiB2ZXJpZmllciBidWcgd2hlcmUgYHNhdmVfYXV4X3B0cl90eXBlKClgIHdhcyBub3QgY2FsbGVkIGZvciBhbGwgcG9pbnRlciB0eXBlcyBkdXJpbmcgYXRvbWljIHJlYWQtbW9kaWZ5LXdyaXRlIChSTVcpIGluc3RydWN0aW9uIHZlcmlmaWNhdGlvbi4gVGhpcyBvbWlzc2lvbiBhbGxvd2VkIGEgbWFsaWNpb3VzIEJQRiBwcm9ncmFtIHRvIHVzZSB0aGUgc2FtZSBhdG9taWMgaW5zdHJ1Y3Rpb24gd2l0aCBkaWZmZXJlbnQgcG9pbnRlciB0eXBlcyAoZS5nLiwgbWl4aW5nIGBQVFJfVE9fQVJFTkFgIGFuZCBgUFRSX1RPX1NUQUNLYCBpbiBkaWZmZXJlbnQgYnJhbmNoZXMpLiBTdWNoIHZlcmlmaWVyIGJ5cGFzc2VzIHR5cGljYWxseSBsZWFkIHRvIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBvciBtZW1vcnkgY29ycnVwdGlvbiBkdWUgdG8gaW5jb3JyZWN0IEpJVCBjb21waWxhdGlvbiBvciBtaXNzaW5nIHJ1bnRpbWUgY2hlY2tzLiBUaGVzZSB0eXBlcyBvZiBtZW1vcnkgc2FmZXR5IHZpb2xhdGlvbnMgYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYzM3MDFhODFhYTU1ZThmOTgyNDgwODExZjY5NTRkZmIyOWFmMDEwMQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gQXVnIDE2IDExOjE4OjIxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jCmluZGV4IGQxN2YxNGIzNWI3OWYuLjkzNDYzY2FmNWM5YWQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKQEAgLTY3MzksMTEgJiM0Mzs2NzM5LDkgQEAgc3RhdGljIGludCBjaGVja19hdG9taWNfcm13KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAotCWlmIChpc19hcmVuYV9yZWcoZW52LCBpbnNuLSZndDtkc3RfcmVnKSkgewotCQllcnIgPSBzYXZlX2F1eF9wdHJfdHlwZShlbnYsIFBUUl9UT19BUkVOQSwgZmFsc2UpOwotCQlpZiAoZXJyKQotCQkJcmV0dXJuIGVycjsKLQl9CiYjNDM7CWVyciA9IHNhdmVfYXV4X3B0cl90eXBlKGVudiwgZHN0X3JlZy0mZ3Q7dHlwZSwgZmFsc2UpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJcmV0dXJuIGVycjsKIAkvKiBDaGVjayB3aGV0aGVyIHdlIGNhbiB3cml0ZSBpbnRvIHRoZSBzYW1lIG1lbW9yeS4gKi8KIAllcnIgPSBjaGVja19tZW1fYWNjZXNzKGVudiwgZW52LSZndDtpbnNuX2lkeCwgZHN0X3JlZywgYXJnbm9fZnJvbV9yZWcoaW5zbi0mZ3Q7ZHN0X3JlZyksIGluc24tJmd0O29mZiwKIAkJCSAgICAgICBCUEZfU0laRShpbnNuLSZndDtjb2RlKSwgQlBGX1dSSVRFLCAtMSwgdHJ1ZSwgZmFsc2UpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYwppbmRleCBiMjQxYmJjZjU0YThhLi5iMjJiYWIzMzMwMWFiIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYwpAQCAtNjM3LDYgJiM0Mzs2MzcsNDUgQEAgaW50IG5vbl9hcmVuYV9wdHJfYWRkX3RvX2FyZW5hX3B0cih2b2lkICpjdHgpCiAKICNlbmRpZgogCiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfaW5zbiBhZGRyX3NwYWNlX2Nhc3RfaW5zbiA9IHsKJiM0MzsJLmNvZGUgPSAweGJmLAomIzQzOwkuZHN0X3JlZyA9IEJQRl9SRUdfNywKJiM0MzsJLnNyY19yZWcgPSBCUEZfUkVHXzcsCiYjNDM7CS5vZmYgPSAxLAomIzQzOwkuaW1tID0gMSwKJiM0Mzt9OwomIzQzOwomIzQzO1NFQygmIzM0O3NvY2tldCYjMzQ7KQomIzQzO19fZGVzY3JpcHRpb24oJiMzNDthcmVuYSBhbmQgc3RhY2sgYXRvbWljIGF0IHRoZSBzYW1lIGluc3RydWN0aW9uJiMzNDspCiYjNDM7X19mYWlsdXJlIF9fbXNnKCYjMzQ7c2FtZSBpbnNuIGNhbm5vdCBiZSB1c2VkIHdpdGggZGlmZmVyZW50IHBvaW50ZXJzJiMzNDspCiYjNDM7X19hcmNoX3g4Nl82NAomIzQzO19fbG9hZF9pZl9KSVRlZCgpCiYjNDM7X19uYWtlZCB2b2lkIG1peGVkX2FyZW5hX3N0YWNrX2F0b21pYyh2b2lkKQomIzQzO3sKJiM0MzsJYXNtIHZvbGF0aWxlICgmIzM0OwkJCQkJXAomIzQzOwlyMSA9ICVbYXJlbmFdIGxsOwkJCQlcCiYjNDM7CXI2ID0gcjEwOwkJCQkJXAomIzQzOwlyNiAmIzQzOz0gLTg7CQkJCQlcCiYjNDM7CXI5ID0gMDsJCQkJCVwKJiM0MzsJKih1NjQgKikocjYgJiM0MzsgMCkgPSByOTsJCQlcCiYjNDM7CXI3ID0gODE5MjsJCQkJCVwKJiM0MzsJLjhieXRlICVbYWRkcl9zcGFjZV9jYXN0XTsJCQlcCiYjNDM7CWNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTsJCQlcCiYjNDM7CWlmIHcwICE9IDAgZ290byAxZjsJCQkJXAomIzQzOwlyOCA9IHI2OwkJCQkJXAomIzQzOwlnb3RvIDJmOwkJCQkJXAomIzQzOzE6CXI4ID0gcjc7CQkJCQlcCiYjNDM7MjoJcjkgPSAxOwkJCQkJXAomIzQzOwlsb2NrICoodTY0ICopKHI4ICYjNDM7IDApICYjNDM7PSByOTsJCQlcCiYjNDM7CXIwID0gMDsJCQkJCVwKJiM0MzsJZXhpdDsJCQkJCQlcCiYjNDM7JiMzNDsJOgomIzQzOwk6IF9faW1tX2FkZHIoYXJlbmEpLAomIzQzOwkgIF9faW1tX2luc24oYWRkcl9zcGFjZV9jYXN0LCBhZGRyX3NwYWNlX2Nhc3RfaW5zbiksCiYjNDM7CSAgX19pbW0oYnBmX2dldF9wcmFuZG9tX3UzMikKJiM0MzsJOiBfX2Nsb2JiZXJfYWxsKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgX19ub2lubGluZQogdTMyIF9fYXJlbmEgKmNoZWNrX2FyZW5hX2FyZ19ub25nbG9iYWwodTMyIF9fYXJlbmEgKmFyZykKIHsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDExOjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3NDgKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgVmVyaWZpZXIgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIHRoZSBCUEYgdmVyaWZpZXIuIEl0IHNlZW1zIHRoZXkmIzM5O3ZlIG1hZGUgYSB0YXJnZXRlZCBtb2RpZmljYXRpb24gd2l0aGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLCBzcGVjaWZpY2FsbHkgdG8gdGhlIGBjaGVja19hdG9taWNfcm13YCBmdW5jdGlvbi4gVGhlIGtleSBjaGFuZ2UgaXMgYSBzaW1wbGlmaWNhdGlvbiBvZiB0aGUgbG9naWMgc3Vycm91bmRpbmcgYHNhdmVfYXV4X3B0cl90eXBlYC4gQmVmb3JlLCB0aGV5IHdlcmUgb25seSBjYWxsaW5nIGl0IGlmIHRoZSBkZXN0aW5hdGlvbiByZWdpc3RlciAoYGluc24tJmd0O2RzdF9yZWdgKSB3YXMgaWRlbnRpZmllZCBhcyBwb2ludGluZyB0byBhbiBhcmVuYSAoYGlzX2FyZW5hX3JlZ2ApLiBOb3csIHRoZXkgYXJlIGNhbGxpbmcgYHNhdmVfYXV4X3B0cl90eXBlYCBmb3IgZXZlcnkgcG9pbnRlciB0eXBlLCB1c2luZyB0aGUgcmVnaXN0ZXImIzM5O3MgZGVjbGFyZWQgYHR5cGVgLiBFc3NlbnRpYWxseSwgdGhleSYjMzk7dmUgZXhwYW5kZWQgdGhlIGFwcGxpY2FiaWxpdHkgb2YgdGhpcyBmdW5jdGlvbi4KCkl0IG1ha2VzIHNlbnNlLCBnaXZlbiB0aGUgcG90ZW50aWFsIGZvciBwb2ludGVyIHR5cGVzIHRvIGJlIG1peGVkIHVwLiBUaGUgb2xkIGNoZWNrIHdhcyB0b28gcmVzdHJpY3RpdmUuIFRoZSB1cGRhdGVkIGxvZ2ljIGlzIG1vcmUgcm9idXN0LiBUaGF0IHNlZW1zIGxpa2UgYSByZWFzb25hYmxlIGFkanVzdG1lbnQgdG8gZW5zdXJlIHRoYXQgYHNhdmVfYXV4X3B0cl90eXBlYCBhY2N1cmF0ZWx5IHJlZmxlY3RzIHRoZSBwb2ludGVyIHR5cGUgaW4gYWxsIHJlbGV2YW50IGF0b21pYyByZWFkLW1vZGlmeS13cml0ZSBzY2VuYXJpb3MuCgpUbyB2YWxpZGF0ZSB0aGlzIGNoYW5nZSwgYSBuZXcgdGVzdCBjYXNlLCBgbWl4ZWRfYXJlbmFfc3RhY2tfYXRvbWljYCwgaGFzIGJlZW4gaW50cm9kdWNlZC4gTXkgZ3Vlc3MgaXMgaXQmIzM5O3MgZGVzaWduZWQgdG8gc3BlY2lmaWNhbGx5IGNhdGNoIHRoZSBzaXR1YXRpb24gd2hlcmUgc29tZW9uZSBtaWdodCBhdHRlbXB0IHRvIHVzZSB0aGUgc2FtZSBpbnN0cnVjdGlvbiB3aXRoIGEgbWl4IG9mIGFyZW5hIGFuZCBzdGFjayBwb2ludGVycy4gQSBnb29kIHRlc3QgY2FzZSwgZ2l2ZW4gdGhlIHB1cnBvc2Ugb2YgdGhlIHVwZGF0ZS4gVGhlIHBhdGNoIGlzIHByb2JhYmx5IHRyeWluZyB0byBjYXRjaCBzb21lIG9ic2N1cmUgY2FzZSB3aGVyZSB0aGUgY3VycmVudCB2ZXJpZmljYXRpb24gbG9naWMgaXMgaW5zdWZmaWNpZW50LgoKTm93LCBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIGBzYXZlX2F1eF9wdHJfdHlwZWAgdG8gZnVsbHkgZ3Jhc3AgdGhlIHJhbWlmaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UuIEl0JiMzOTtzIHRoZSBjb3JlIGZ1bmN0aW9uIGhlcmUsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgaXQgZG9lcyBhbmQgaG93IHRoZSBuZXcgaW1wbGVtZW50YXRpb24gaW1wYWN0cyB0aGUgdmVyaWZpZXImIzM5O3MgYmVoYXZpb3IuIFRpbWUgdG8gZGVsdmUgaW50byB0aGF0IGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAxMToxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzYXZlX2F1eF9wdHJfdHlwZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NjMzND1zdGF0aWMgaW50IGNoZWNrX21lbV9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGluc25faWR4LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCBhcmdub190IGFyZ25vLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NTc5LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjY1ODA6c3RhdGljIGludCBzYXZlX2F1eF9wdHJfdHlwZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBlbnVtIGJwZl9yZWdfdHlwZSB0eXBlLFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY1ODEtXHRcdFx0ICAgICBib29sIGFsbG93X3RydXN0X21pc21hdGNoKTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NjU4Mz1zdGF0aWMgaW50IGNoZWNrX2xvYWRfbWVtKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjYyMC1cdFx0XHQgICAgICAgc3RyaWN0X2FsaWdubWVudF9vbmNlLCBpc19sZHN4KTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2NjIxOlx0ZXJyID0gZXJyID86IHNhdmVfYXV4X3B0cl90eXBlKGVudiwgc3JjX3JlZ190eXBlLFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY2MjItXHRcdFx0XHQgICAgICAgYWxsb3dfdHJ1c3RfbWlzbWF0Y2gpO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz02NjMwPXN0YXRpYyBpbnQgY2hlY2tfc3RvcmVfcmVnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjY2Mi1cdFx0XHQgICAgICAgc3RyaWN0X2FsaWdubWVudF9vbmNlLCBmYWxzZSk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjY2MzpcdGVyciA9IGVyciA/OiBzYXZlX2F1eF9wdHJfdHlwZShlbnYsIGRzdF9yZWdfdHlwZSwgZmFsc2UpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTY2NjQtXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTY2Njg9c3RhdGljIGludCBjaGVja19hdG9taWNfcm13KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTY3NDEtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6Njc0MjpcdGVyciA9IHNhdmVfYXV4X3B0cl90eXBlKGVudiwgZHN0X3JlZy1cdTAwM2V0eXBlLCBmYWxzZSk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjc0My1cdGlmIChlcnIpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE3ODYwPXN0YXRpYyBib29sIGlzX3B0cl90b19tZW0oZW51bSBicGZfcmVnX3R5cGUgdHlwZSlcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTc4NjQtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTc4NjU6c3RhdGljIGludCBzYXZlX2F1eF9wdHJfdHlwZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBlbnVtIGJwZl9yZWdfdHlwZSB0eXBlLFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3ODY2LVx0XHRcdCAgICAgYm9vbCBhbGxvd190cnVzdF9taXNtYXRjaClcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTgwNzA9c3RhdGljIGludCBkb19jaGVja19pbnNuKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGJvb2wgKmRvX3ByaW50X3N0YXRlKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODExMy1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxODExNDpcdFx0cmV0dXJuIHNhdmVfYXV4X3B0cl90eXBlKGVudiwgZHN0X3JlZ190eXBlLCBmYWxzZSk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTgxMTUtXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDExOjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQxMjIKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBgc2F2ZV9hdXhfcHRyX3R5cGVgKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgc2F2ZV9hdXhfcHRyX3R5cGVgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29yZSBwdXJwb3NlIGFuZCBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIHRvIGFzc2VzcyBpdHMgaW1wbGljYXRpb25zLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCBpdHMgaW50ZW5kZWQgZnVuY3Rpb24uCgpXaGF0IGV4YWN0bHkgaXMgaXQgc3VwcG9zZWQgdG8gc2F2ZT8gSXMgaXQgcmVsYXRlZCB0byBjYWNoaW5nLCBtZXRhZGF0YSBtYW5hZ2VtZW50LCBvciBzb21ldGhpbmcgbW9yZSBmdW5kYW1lbnRhbCB0byB0aGUgZGF0YSBzdHJ1Y3R1cmUgaXQmIzM5O3Mgb3BlcmF0aW5nIG9uPyBJIHNob3VsZCBsb29rIGF0IHdoZXJlIGFuZCBob3cgaXQmIzM5O3MgY2FsbGVkLiBUaGUgY2FsbCBjb250ZXh0IG9mZmVycyB0aGUgYmVzdCBjbHVlIHJlZ2FyZGluZyB0aGUgbmF0dXJlIG9mIHRoZSBkYXRhIHR5cGUgaXQgZGVhbHMgd2l0aC4gQWxzbywgd2hhdCBpcyBpdCYjMzk7cyByZWxhdGlvbnNoaXAgd2l0aCBvdGhlciBtZW1vcnkgbWFuYWdlbWVudCByb3V0aW5lcy4gQXJlIHdlIGxvb2tpbmcgYXQgYSBsb2NhbCBjb3B5LCBvciBhIHBvaW50ZXIgdG8gdGhlIG9yaWdpbmFsIG1lbW9yeSBibG9jaz8KCkkmIzM5O2xsIGNoZWNrIHRoZSBhc3NvY2lhdGVkIGRhdGEgc3RydWN0dXJlcy4gSSBuZWVkIHRvIGRldGVybWluZSB0aGUgcG9pbnRlciBiZWluZyBzYXZlZCBpcyBwYXJ0IG9mIGEgY29tcG91bmQgdHlwZSBhbmQgbmVlZHMgcmVjb25zdHJ1Y3Rpb24uIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgc291cmNlIG9mIHRoZSBkYXRhOiBpcyBpdCBjb21pbmcgZnJvbSBhIGdsb2JhbCBzdGF0ZSwgYSBzdGFjaywgb3IgYSBoZWFwPyBVbmRlcnN0YW5kaW5nIHRoZSBhbGxvY2F0aW9uIHN0cmF0ZWd5IGlzIGtleS4gQXJlIHRoZXJlIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgbWVtb3J5IGxlYWtzIGFzc29jaWF0ZWQgd2l0aCBob3cgdGhpcyBwb2ludGVyIGlzIGhhbmRsZWQ/CgpFc3NlbnRpYWxseSwgSSBuZWVkIHRvIHRyYWNlIGl0cyB1c2FnZSwgaWRlbnRpZnkgaXRzIHJvbGUgd2l0aGluIHRoZSB3aWRlciBmcmFtZXdvcmssIGFuZCBhbnRpY2lwYXRlIGFueSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIG9yIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAxMToxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE3ODY1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE3ODY1Olx0c3RhdGljIGludCBzYXZlX2F1eF9wdHJfdHlwZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBlbnVtIGJwZl9yZWdfdHlwZSB0eXBlLFxuMTc4NjY6XHRcdFx0XHQgICAgIGJvb2wgYWxsb3dfdHJ1c3RfbWlzbWF0Y2gpXG4xNzg2NzpcdHtcbjE3ODY4Olx0XHRlbnVtIGJwZl9yZWdfdHlwZSAqcHJldl90eXBlID0gXHUwMDI2ZW52LVx1MDAzZWluc25fYXV4X2RhdGFbZW52LVx1MDAzZWluc25faWR4XS5wdHJfdHlwZTtcbjE3ODY5Olx0XHRlbnVtIGJwZl9yZWdfdHlwZSBtZXJnZWRfdHlwZTtcbjE3ODcwOlx0XG4xNzg3MTpcdFx0aWYgKCpwcmV2X3R5cGUgPT0gTk9UX0lOSVQpIHtcbjE3ODcyOlx0XHRcdC8qIFNhdyBhIHZhbGlkIGluc25cbjE3ODczOlx0XHRcdCAqIGRzdF9yZWcgPSAqKHUzMiAqKShzcmNfcmVnICYjNDM7IG9mZilcbjE3ODc0Olx0XHRcdCAqIHNhdmUgdHlwZSB0byB2YWxpZGF0ZSBpbnRlcnNlY3RpbmcgcGF0aHNcbjE3ODc1Olx0XHRcdCAqL1xuMTc4NzY6XHRcdFx0KnByZXZfdHlwZSA9IHR5cGU7XG4xNzg3NzpcdFx0fSBlbHNlIGlmIChyZWdfdHlwZV9taXNtYXRjaCh0eXBlLCAqcHJldl90eXBlKSkge1xuMTc4Nzg6XHRcdFx0LyogQWJ1c2VyIHByb2dyYW0gaXMgdHJ5aW5nIHRvIHVzZSB0aGUgc2FtZSBpbnNuXG4xNzg3OTpcdFx0XHQgKiBkc3RfcmVnID0gKih1MzIqKSAoc3JjX3JlZyAmIzQzOyBvZmYpXG4xNzg4MDpcdFx0XHQgKiB3aXRoIGRpZmZlcmVudCBwb2ludGVyIHR5cGVzOlxuMTc4ODE6XHRcdFx0ICogc3JjX3JlZyA9PSBjdHggaW4gb25lIGJyYW5jaCBhbmRcbjE3ODgyOlx0XHRcdCAqIHNyY19yZWcgPT0gc3RhY2t8bWFwIGluIHNvbWUgb3RoZXIgYnJhbmNoLlxuMTc4ODM6XHRcdFx0ICogUmVqZWN0IGl0LlxuMTc4ODQ6XHRcdFx0ICovXG4xNzg4NTpcdFx0XHRpZiAoYWxsb3dfdHJ1c3RfbWlzbWF0Y2ggXHUwMDI2XHUwMDI2XG4xNzg4NjpcdFx0XHQgICAgaXNfcHRyX3RvX21lbV9vcl9idGZfaWQodHlwZSkgXHUwMDI2XHUwMDI2XG4xNzg4NzpcdFx0XHQgICAgaXNfcHRyX3RvX21lbV9vcl9idGZfaWQoKnByZXZfdHlwZSkpIHtcbjE3ODg4Olx0XHRcdFx0LypcbjE3ODg5Olx0XHRcdFx0ICogSGF2ZSB0byBzdXBwb3J0IGEgdXNlIGNhc2Ugd2hlbiBvbmUgcGF0aCB0aHJvdWdoXG4xNzg5MDpcdFx0XHRcdCAqIHRoZSBwcm9ncmFtIHlpZWxkcyBUUlVTVEVEIHBvaW50ZXIgd2hpbGUgYW5vdGhlclxuMTc4OTE6XHRcdFx0XHQgKiBpcyBVTlRSVVNURUQuIEZhbGxiYWNrIHRvIFVOVFJVU1RFRCB0byBnZW5lcmF0ZVxuMTc4OTI6XHRcdFx0XHQgKiBCUEZfUFJPQkVfTUVNL0JQRl9QUk9CRV9NRU1TWC5cbjE3ODkzOlx0XHRcdFx0ICogU2FtZSBiZWhhdmlvciBvZiBNRU1fUkRPTkxZIGZsYWcuXG4xNzg5NDpcdFx0XHRcdCAqL1xuMTc4OTU6XHRcdFx0XHRpZiAoaXNfcHRyX3RvX21lbSh0eXBlKSB8fCBpc19wdHJfdG9fbWVtKCpwcmV2X3R5cGUpKVxuMTc4OTY6XHRcdFx0XHRcdG1lcmdlZF90eXBlID0gUFRSX1RPX01FTTtcbjE3ODk3Olx0XHRcdFx0ZWxzZVxuMTc4OTg6XHRcdFx0XHRcdG1lcmdlZF90eXBlID0gUFRSX1RPX0JURl9JRDtcbjE3ODk5Olx0XHRcdFx0aWYgKCh0eXBlIFx1MDAyNiBQVFJfVU5UUlVTVEVEKSB8fCAoKnByZXZfdHlwZSBcdTAwMjYgUFRSX1VOVFJVU1RFRCkpXG4xNzkwMDpcdFx0XHRcdFx0bWVyZ2VkX3R5cGUgfD0gUFRSX1VOVFJVU1RFRDtcbjE3OTAxOlx0XHRcdFx0aWYgKCh0eXBlIFx1MDAyNiBNRU1fUkRPTkxZKSB8fCAoKnByZXZfdHlwZSBcdTAwMjYgTUVNX1JET05MWSkpXG4xNzkwMjpcdFx0XHRcdFx0bWVyZ2VkX3R5cGUgfD0gTUVNX1JET05MWTtcbjE3OTAzOlx0XHRcdFx0KnByZXZfdHlwZSA9IG1lcmdlZF90eXBlO1xuMTc5MDQ6XHRcdFx0fSBlbHNlIHtcbjE3OTA1Olx0XHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O3NhbWUgaW5zbiBjYW5ub3QgYmUgdXNlZCB3aXRoIGRpZmZlcmVudCBwb2ludGVyc1xcblwmIzM0Oyk7XG4xNzkwNjpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTc5MDc6XHRcdFx0fVxuMTc5MDg6XHRcdH1cbjE3OTA5Olx0XG4xNzkxMDpcdFx0cmV0dXJuIDA7XG4xNzkxMTpcdH1cbjE3OTEyOlx0XG4xNzkxMzpcdGVudW0ge1xuMTc5MTQ6XHRcdFBST0NFU1NfQlBGX0VYSVQgPSAxLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAxMToxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MzU0CgkJCQkJCQlvdXRwdXQ6IDE4NwoJCQkJCQkJdGhvdWdodHM6IDEwNjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgdGhlIEF0b21pYyBSTVcgUG9pbnRlciBUeXBlIEJ1ZyBGaXgqKgoKT2theSwgaGVyZSYjMzk7cyBteSB1bmRlcnN0YW5kaW5nIG9mIHRoaXMgcGF0Y2ggYW5kIHRoZSBhc3NvY2lhdGVkIGltcGxpY2F0aW9ucy4gVGhlIGNvcmUgaXNzdWUgcmV2b2x2ZXMgYXJvdW5kIGhvdyB0aGUgdmVyaWZpZXIgaGFuZGxlcyBhdG9taWMgUk1XIGluc3RydWN0aW9ucyBhbmQgdGhlIHBvaW50ZXIgdHlwZXMgdGhleSBvcGVyYXRlIG9uLiBQcmV2aW91c2x5LCBgc2F2ZV9hdXhfcHRyX3R5cGVgIHdhcyBvbmx5IGNhbGxlZCB3aXRoaW4gYGNoZWNrX2F0b21pY19ybXdgIGlmIHRoZSBkZXN0aW5hdGlvbiByZWdpc3RlciB3YXMgYW4gYXJlbmEgcmVnaXN0ZXIsIHVzaW5nIGBpc19hcmVuYV9yZWdgLiBUaGlzIGNyZWF0ZWQgYSBjcml0aWNhbCBmbGF3LgoKSWYgYHNhdmVfYXV4X3B0cl90eXBlYCAqd2FzbiYjMzk7dCogY2FsbGVkLCB0aGUgdmVyaWZpZXIgd291bGRuJiMzOTt0IHRyYWNrIG9yIGVuZm9yY2UgdGhhdCBhIGNvbnNpc3RlbnQgcG9pbnRlciB0eXBlIHdhcyB1c2VkIGFjcm9zcyBhbGwgYnJhbmNoZXMgb2YgdGhlIGF0b21pYyBSTVcuIFRoaXMgbWVhbnMgdGhlIHByb2dyYW0gY291bGQgcG90ZW50aWFsbHkgdXNlIGBQVFJfVE9fU1RBQ0tgLCBgUFRSX1RPX0FSRU5BYCwgb3IgYFBUUl9UT19NQVBfVkFMVUVgIGluIGRpZmZlcmVudCBicmFuY2hlcyBvZiB0aGUgcHJvZ3JhbS4KClRoZSBjb25zZXF1ZW5jZT8gVGhlIEpJVCBjb3VsZCBnZW5lcmF0ZSBjb2RlIG9wdGltaXplZCBmb3IgYSBzcGVjaWZpYyBwb2ludGVyIHR5cGUg4oCTIHNheSwgYXJlbmEgcG9pbnRlcnMsIHdoaWNoIG1pZ2h0IG5lY2Vzc2l0YXRlIHNwZWNpZmljIGJhc2UgcmVnaXN0ZXJzIG9yIGFkZHJlc3Mgc3BhY2UgY2FzdGluZyDigJMgYnV0LCBhdCBydW50aW1lLCB0aGUgc2FtZSBhdG9taWMgaW5zdHJ1Y3Rpb24gY291bGQgYmUgZXhlY3V0ZWQgd2l0aCBhIGRpZmZlcmVudCBwb2ludGVyIHR5cGUsIGxpa2UgYSBzdGFjayBwb2ludGVyLgoKSWYgdGhlIHZlcmlmaWVyIGRvZXNuJiMzOTt0IGNhdGNoIGl0LCB0aGlzIGNvdWxkIGNhdXNlIG1lbW9yeSBjb3JydXB0aW9uLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciBvdGhlciBpc3N1ZXMuIEZvciBpbnN0YW5jZSwgYW4gYXRvbWljIHdyaXRlIG9uIGFuIGFyZW5hIGFkZHJlc3Mgd2hlbiBzdGFjayBtZW1vcnkgaXMgZXhwZWN0ZWQgY291bGQgbGVhZCB0byBhIHJlYWQgb3Igd3JpdGUgdG8gYW4gaW52YWxpZCBhZGRyZXNzIG9yIHBvdGVudGlhbGx5IG92ZXJ3cml0ZSBzb21ldGhpbmcgaW1wb3J0YW50LiBDb252ZXJzZWx5LCBpZiBpdCB0aGlua3MgaXQmIzM5O3Mgd29ya2luZyB3aXRoIHN0YWNrIG1lbW9yeSB3aGVuIGl0JiMzOTtzIHJlYWxseSBhbiBhcmVuYSBhZGRyZXNzLCB0aGF0JiMzOTtzIGEgcHJvYmxlbSB0b28uCgpUaGUgcXVlc3Rpb24gdGhlbiBiZWNvbWVzOiBkb2VzIHRoaXMgYnVnIHVuaXF1ZWx5IGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IEtNU0FOIHdvdWxkIGRldGVjdD8gTXkgYXNzZXNzbWVudCBpcyBuby4gVGhpcyBpcyBhIGNsYXNzaWMgdmVyaWZpZXIgYnlwYXNzLCB3aGVyZSB0aGUgdmVyaWZpZXIgZmFpbHMgdG8gZW5mb3JjZSBtZW1vcnkgc2FmZXR5IHJ1bGVzLiBUaGlzIHR5cGljYWxseSBtYW5pZmVzdHMgYXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIG9yIG1lbW9yeSBjb3JydXB0aW9uLiBUaGVzZSBwcm9ibGVtcyBhcmUgY2F1Z2h0IGJ5IEtBU0FOLiBXaGlsZSB0aGVyZSYjMzk7cyBhIHRoZW9yZXRpY2FsIHJpc2sgb2YgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSwgYXRvbWljIGluc3RydWN0aW9ucyBsaWtlIGBsb2NrICoodTY0ICopKHI4ICYjNDM7IDApICYjNDM7PSByOWAgbW9kaWZ5IG1lbW9yeSBpbiBwbGFjZS4gVGhleSBkb24mIzM5O3QgY29weSB0aGUgdmFsdWUgb2YgdGhlIG1lbW9yeSB0byBhIHJlZ2lzdGVyIHRoYXQgbWlnaHQgdGhlbiBiZSBsZWFrZWQsIGV4Y2VwdCBtYXliZSBmb3IgYEJQRl9GRVRDSGAgaW5zdHJ1Y3Rpb25zIHdoaWNoIHJldHVybiB0aGUgb2xkIHZhbHVlIGluIGEgcmVnaXN0ZXIuIEtBU0FOIGlzIHN1ZmZpY2llbnQgZm9yIGNhdGNoaW5nIHRoZSByZXN1bHRpbmcgT09CIGFjY2VzcyBpbiBhbnkgY2FzZSwgc28gS01TQU4gaXNuJiMzOTt0IG5lZWRlZCBoZXJlLiBUaGUgYnVnJiMzOTtzIHJvb3QgY2F1c2UgaXMgYSB2ZXJpZmllciBieXBhc3MgYWxsb3dpbmcgdGhlIG1peGluZyBvZiBwb2ludGVyIHR5cGVzLiBUaGUgc3RhbmRhcmQgS0FTQU4gY2hlY2tzIGFyZSBzdWZmaWNpZW50LgoKTG9va2luZyBhdCB0aGUgcGF0Y2ggaXRzZWxmLCB0aGUgZml4IGlzIHN0cmFpZ2h0Zm9yd2FyZC4gVGhleSYjMzk7cmUgcmVwbGFjaW5nIHRoZSBvcmlnaW5hbCBgaWYgKGlzX2FyZW5hX3JlZyhlbnYsIGluc24tJmd0O2RzdF9yZWcpKWAgY29uZGl0aW9uIHdpdGggYSBkaXJlY3QgY2FsbCB0byBgc2F2ZV9hdXhfcHRyX3R5cGVgLCB1c2luZyB0aGUgZGVzdGluYXRpb24gcmVnaXN0ZXImIzM5O3MgdHlwZS4gVGhpcyBlbnN1cmVzIHRoYXQgdGhlIHBvaW50ZXIgdHlwZSBpcyBhbHdheXMgc2F2ZWQsIHJlZ2FyZGxlc3Mgb2YgdGhlIHBvaW50ZXIgdHlwZS4KClRoZSB0ZXN0IGNhc2UgcHJvdmlkZWQgY2xlYXJseSBkZW1vbnN0cmF0ZXMgdGhlIHZlcmlmaWVyIGJ5cGFzczogIGl0IHVzZXMgdGhlIGRlc3RpbmF0aW9uIHJlZ2lzdGVyIGFzIGVpdGhlciBhbiBhcmVuYSBvciBzdGFjayByZWdpc3Rlci4gIEJlY2F1c2UgdGhlIHZlcmlmaWVyIGFsbG93cyB0aGUgcHJvZ3JhbSB0byBtaXggcG9pbnRlciB0eXBlcyBpbiBkaWZmZXJlbnQgYnJhbmNoZXMsIGFuZCBiZWNhdXNlIGBzYXZlX2F1eF9wdHJfdHlwZWAgd2FzICpub3QqIGJlaW5nIGNhbGxlZCBpbiBhbGwgY2FzZXMgYmVmb3JlLCB0aGUgSklUIHdvdWxkIGZhaWwgdG8gY2F0Y2ggdGhlIHBvdGVudGlhbCBtaXNtYXRjaCBhbmQgd291bGQgYWxsb3cgYW4gYXRvbWljIFJNVyBvcGVyYXRpb24gb24gYW4gYXJlbmEgcG9pbnRlciwgcG90ZW50aWFsbHkgd2l0aCBzdGFjayBtZW1vcnkgYmVpbmcgdXNlZC4gIFRoaXMgYnlwYXNzIG1ha2VzIGl0IGEgdmVyaWZpZXIgYnVnIHRoYXQgd2lsbCBnZW5lcmF0ZSBhbiBPT0Igb3IgbWVtb3J5IGNvcnJ1cHRpb24uCgpUaGVyZWZvcmUsIHNpbmNlIHRoaXMgaXMgYSB2ZXJpZmllciBieXBhc3MgYW5kIGNhbiBsZWFkIHRvIHN0YW5kYXJkIG1lbW9yeSBlcnJvcnMgY2F1Z2h0IGJ5IEtBU0FOLCBJJiMzOTtsbCBzZXQgYE5lZWRzS01TQU5gIHRvIGZhbHNlLiBUaGUgaXNzdWUgZG9lc24mIzM5O3QgcmVxdWlyZSBLTVNBTiwgYW5kIEtBU0FOIHdpbGwgYmUgc3VmZmljaWVudCB0byBjYXRjaCB0aGUgcmVzdWx0aW5nIGVycm9ycy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMTE6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBCUEYgdmVyaWZpZXIgYnVnIHdoZXJlIGBzYXZlX2F1eF9wdHJfdHlwZSgpYCB3YXMgbm90IGNhbGxlZCBmb3IgYWxsIHBvaW50ZXIgdHlwZXMgZHVyaW5nIGF0b21pYyByZWFkLW1vZGlmeS13cml0ZSAoUk1XKSBpbnN0cnVjdGlvbiB2ZXJpZmljYXRpb24uIFRoaXMgb21pc3Npb24gYWxsb3dlZCBhIG1hbGljaW91cyBCUEYgcHJvZ3JhbSB0byB1c2UgdGhlIHNhbWUgYXRvbWljIGluc3RydWN0aW9uIHdpdGggZGlmZmVyZW50IHBvaW50ZXIgdHlwZXMgKGUuZy4sIG1peGluZyBgUFRSX1RPX0FSRU5BYCBhbmQgYFBUUl9UT19TVEFDS2AgaW4gZGlmZmVyZW50IGJyYW5jaGVzKS4gU3VjaCB2ZXJpZmllciBieXBhc3NlcyB0eXBpY2FsbHkgbGVhZCB0byBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbWVtb3J5IGNvcnJ1cHRpb24gZHVlIHRvIGluY29ycmVjdCBKSVQgY29tcGlsYXRpb24gb3IgbWlzc2luZyBydW50aW1lIGNoZWNrcy4gVGhlc2UgdHlwZXMgb2YgbWVtb3J5IHNhZmV0eSB2aW9sYXRpb25zIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIEJQRiB2ZXJpZmllciBidWcgd2hlcmUgYHNhdmVfYXV4X3B0cl90eXBlKClgIHdhcyBub3QgY2FsbGVkIGZvciBhbGwgcG9pbnRlciB0eXBlcyBkdXJpbmcgYXRvbWljIHJlYWQtbW9kaWZ5LXdyaXRlIChSTVcpIGluc3RydWN0aW9uIHZlcmlmaWNhdGlvbi4gVGhpcyBvbWlzc2lvbiBhbGxvd2VkIGEgbWFsaWNpb3VzIEJQRiBwcm9ncmFtIHRvIHVzZSB0aGUgc2FtZSBhdG9taWMgaW5zdHJ1Y3Rpb24gd2l0aCBkaWZmZXJlbnQgcG9pbnRlciB0eXBlcyAoZS5nLiwgbWl4aW5nIGBQVFJfVE9fQVJFTkFgIGFuZCBgUFRSX1RPX1NUQUNLYCBpbiBkaWZmZXJlbnQgYnJhbmNoZXMpLiBTdWNoIHZlcmlmaWVyIGJ5cGFzc2VzIHR5cGljYWxseSBsZWFkIHRvIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBvciBtZW1vcnkgY29ycnVwdGlvbiBkdWUgdG8gaW5jb3JyZWN0IEpJVCBjb21waWxhdGlvbiBvciBtaXNzaW5nIHJ1bnRpbWUgY2hlY2tzLiBUaGVzZSB0eXBlcyBvZiBtZW1vcnkgc2FmZXR5IHZpb2xhdGlvbnMgYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTZUMTE6MTg6MjMuMDY1ODgxOTc0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njc3MjIzODIxODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfY2hlY2tcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgQlBGIHZlcmlmaWVyIGJ1ZyB3aGVyZSBgc2F2ZV9hdXhfcHRyX3R5cGUoKWAgd2FzIG5vdCBjYWxsZWQgZm9yIGFsbCBwb2ludGVyIHR5cGVzIGR1cmluZyBhdG9taWMgcmVhZC1tb2RpZnktd3JpdGUgKFJNVykgaW5zdHJ1Y3Rpb24gdmVyaWZpY2F0aW9uLiBUaGlzIG9taXNzaW9uIGFsbG93ZWQgYSBtYWxpY2lvdXMgQlBGIHByb2dyYW0gdG8gdXNlIHRoZSBzYW1lIGF0b21pYyBpbnN0cnVjdGlvbiB3aXRoIGRpZmZlcmVudCBwb2ludGVyIHR5cGVzIChlLmcuLCBtaXhpbmcgYFBUUl9UT19BUkVOQWAgYW5kIGBQVFJfVE9fU1RBQ0tgIGluIGRpZmZlcmVudCBicmFuY2hlcykuIFN1Y2ggdmVyaWZpZXIgYnlwYXNzZXMgdHlwaWNhbGx5IGxlYWQgdG8gb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIG9yIG1lbW9yeSBjb3JydXB0aW9uIGR1ZSB0byBpbmNvcnJlY3QgSklUIGNvbXBpbGF0aW9uIG9yIG1pc3NpbmcgcnVudGltZSBjaGVja3MuIFRoZXNlIHR5cGVzIG9mIG1lbW9yeSBzYWZldHkgdmlvbGF0aW9ucyBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIncyBoYW5kbGluZyBvZiBhdG9taWMgcmVhZC1tb2RpZnktd3JpdGUgKFJNVykgaW5zdHJ1Y3Rpb25zIGJ5IHNhdmluZyB0aGUgYXV4aWxpYXJ5IHBvaW50ZXIgdHlwZSBmb3IgYWxsIGRlc3RpbmF0aW9uIHJlZ2lzdGVycywgbm90IGp1c3QgYXJlbmEgcmVnaXN0ZXJzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUga2VybmVsIEJQRiB2ZXJpZmllciBsb2dpYyB0aGF0IGFmZmVjdHMgaG93IGF0b21pYyBvcGVyYXRpb25zIGFyZSB2ZXJpZmllZCBhbmQgaGFuZGxlZCwgcGFydGljdWxhcmx5IHdoZW4gbWl4aW5nIGRpZmZlcmVudCBwb2ludGVyIHR5cGVzIChsaWtlIGFyZW5hIGFuZCBzdGFjayBwb2ludGVycykgaW4gdGhlIHNhbWUgaW5zdHJ1Y3Rpb24uIFRoaXMgaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgdGhlIGJwZigpIHN5c2NhbGwgYW5kIGlzIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDExOjE4OjIzLjA2NTg4ODQzNFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE3MDUxODUzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGMzNzAxYTgxYWE1NWU4Zjk4MjQ4MDgxMWY2OTU0ZGZiMjlhZjAxMDFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFN1biBBdWcgMTYgMTE6MTg6MjEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jXFxuaW5kZXggZDE3ZjE0YjM1Yjc5Zi4uOTM0NjNjYWY1YzlhZCAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcXG4rKysgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcXG5AQCAtNjczOSwxMSArNjczOSw5IEBAIHN0YXRpYyBpbnQgY2hlY2tfYXRvbWljX3JtdyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbiBcXHRpZiAoZXJyKVxcbiBcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXG4tXFx0aWYgKGlzX2FyZW5hX3JlZyhlbnYsIGluc24tXFx1MDAzZWRzdF9yZWcpKSB7XFxuLVxcdFxcdGVyciA9IHNhdmVfYXV4X3B0cl90eXBlKGVudiwgUFRSX1RPX0FSRU5BLCBmYWxzZSk7XFxuLVxcdFxcdGlmIChlcnIpXFxuLVxcdFxcdFxcdHJldHVybiBlcnI7XFxuLVxcdH1cXG4rXFx0ZXJyID0gc2F2ZV9hdXhfcHRyX3R5cGUoZW52LCBkc3RfcmVnLVxcdTAwM2V0eXBlLCBmYWxzZSk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdHJldHVybiBlcnI7XFxuIFxcdC8qIENoZWNrIHdoZXRoZXIgd2UgY2FuIHdyaXRlIGludG8gdGhlIHNhbWUgbWVtb3J5LiAqL1xcbiBcXHRlcnIgPSBjaGVja19tZW1fYWNjZXNzKGVudiwgZW52LVxcdTAwM2VpbnNuX2lkeCwgZHN0X3JlZywgYXJnbm9fZnJvbV9yZWcoaW5zbi1cXHUwMDNlZHN0X3JlZyksIGluc24tXFx1MDAzZW9mZixcXG4gXFx0XFx0XFx0ICAgICAgIEJQRl9TSVpFKGluc24tXFx1MDAzZWNvZGUpLCBCUEZfV1JJVEUsIC0xLCB0cnVlLCBmYWxzZSk7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmNcXG5pbmRleCBiMjQxYmJjZjU0YThhLi5iMjJiYWIzMzMwMWFiIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmNcXG5AQCAtNjM3LDYgKzYzNyw0NSBAQCBpbnQgbm9uX2FyZW5hX3B0cl9hZGRfdG9fYXJlbmFfcHRyKHZvaWQgKmN0eClcXG4gXFxuICNlbmRpZlxcbiBcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfaW5zbiBhZGRyX3NwYWNlX2Nhc3RfaW5zbiA9IHtcXG4rXFx0LmNvZGUgPSAweGJmLFxcbitcXHQuZHN0X3JlZyA9IEJQRl9SRUdfNyxcXG4rXFx0LnNyY19yZWcgPSBCUEZfUkVHXzcsXFxuK1xcdC5vZmYgPSAxLFxcbitcXHQuaW1tID0gMSxcXG4rfTtcXG4rXFxuK1NFQyhcXFwic29ja2V0XFxcIilcXG4rX19kZXNjcmlwdGlvbihcXFwiYXJlbmEgYW5kIHN0YWNrIGF0b21pYyBhdCB0aGUgc2FtZSBpbnN0cnVjdGlvblxcXCIpXFxuK19fZmFpbHVyZSBfX21zZyhcXFwic2FtZSBpbnNuIGNhbm5vdCBiZSB1c2VkIHdpdGggZGlmZmVyZW50IHBvaW50ZXJzXFxcIilcXG4rX19hcmNoX3g4Nl82NFxcbitfX2xvYWRfaWZfSklUZWQoKVxcbitfX25ha2VkIHZvaWQgbWl4ZWRfYXJlbmFfc3RhY2tfYXRvbWljKHZvaWQpXFxuK3tcXG4rXFx0YXNtIHZvbGF0aWxlIChcXFwiXFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRyMSA9ICVbYXJlbmFdIGxsO1xcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjYgPSByMTA7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRyNiArPSAtODtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHI5ID0gMDtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdCoodTY0ICopKHI2ICsgMCkgPSByOTtcXHRcXHRcXHRcXFxcXFxuK1xcdHI3ID0gODE5MjtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdC44Ynl0ZSAlW2FkZHJfc3BhY2VfY2FzdF07XFx0XFx0XFx0XFxcXFxcbitcXHRjYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07XFx0XFx0XFx0XFxcXFxcbitcXHRpZiB3MCAhPSAwIGdvdG8gMWY7XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRyOCA9IHI2O1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0Z290byAyZjtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuKzE6XFx0cjggPSByNztcXHRcXHRcXHRcXHRcXHRcXFxcXFxuKzI6XFx0cjkgPSAxO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0bG9jayAqKHU2NCAqKShyOCArIDApICs9IHI5O1xcdFxcdFxcdFxcXFxcXG4rXFx0cjAgPSAwO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0ZXhpdDtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcXCJcXHQ6XFxuK1xcdDogX19pbW1fYWRkcihhcmVuYSksXFxuK1xcdCAgX19pbW1faW5zbihhZGRyX3NwYWNlX2Nhc3QsIGFkZHJfc3BhY2VfY2FzdF9pbnNuKSxcXG4rXFx0ICBfX2ltbShicGZfZ2V0X3ByYW5kb21fdTMyKVxcbitcXHQ6IF9fY2xvYmJlcl9hbGwpO1xcbit9XFxuK1xcbiBzdGF0aWMgX19ub2lubGluZVxcbiB1MzIgX19hcmVuYSAqY2hlY2tfYXJlbmFfYXJnX25vbmdsb2JhbCh1MzIgX19hcmVuYSAqYXJnKVxcbiB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDExOjE4OjI0LjIzNzA1NzM3M1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjQxOTgxMTcxMTAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2NoZWNrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllcidzIGhhbmRsaW5nIG9mIGF0b21pYyByZWFkLW1vZGlmeS13cml0ZSAoUk1XKSBpbnN0cnVjdGlvbnMgYnkgc2F2aW5nIHRoZSBhdXhpbGlhcnkgcG9pbnRlciB0eXBlIGZvciBhbGwgZGVzdGluYXRpb24gcmVnaXN0ZXJzLCBub3QganVzdCBhcmVuYSByZWdpc3RlcnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBrZXJuZWwgQlBGIHZlcmlmaWVyIGxvZ2ljIHRoYXQgYWZmZWN0cyBob3cgYXRvbWljIG9wZXJhdGlvbnMgYXJlIHZlcmlmaWVkIGFuZCBoYW5kbGVkLCBwYXJ0aWN1bGFybHkgd2hlbiBtaXhpbmcgZGlmZmVyZW50IHBvaW50ZXIgdHlwZXMgKGxpa2UgYXJlbmEgYW5kIHN0YWNrIHBvaW50ZXJzKSBpbiB0aGUgc2FtZSBpbnN0cnVjdGlvbi4gVGhpcyBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSB0aGUgYnBmKCkgc3lzY2FsbCBhbmQgaXMgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYzM3MDFhODFhYTU1ZThmOTgyNDgwODExZjY5NTRkZmIyOWFmMDEwMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gQXVnIDE2IDExOjE4OjIxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5pbmRleCBkMTdmMTRiMzViNzlmLi45MzQ2M2NhZjVjOWFkIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jXG4rKysgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbkBAIC02NzM5LDExICs2NzM5LDkgQEAgc3RhdGljIGludCBjaGVja19hdG9taWNfcm13KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuLVx0aWYgKGlzX2FyZW5hX3JlZyhlbnYsIGluc24tXHUwMDNlZHN0X3JlZykpIHtcbi1cdFx0ZXJyID0gc2F2ZV9hdXhfcHRyX3R5cGUoZW52LCBQVFJfVE9fQVJFTkEsIGZhbHNlKTtcbi1cdFx0aWYgKGVycilcbi1cdFx0XHRyZXR1cm4gZXJyO1xuLVx0fVxuK1x0ZXJyID0gc2F2ZV9hdXhfcHRyX3R5cGUoZW52LCBkc3RfcmVnLVx1MDAzZXR5cGUsIGZhbHNlKTtcbitcdGlmIChlcnIpXG4rXHRcdHJldHVybiBlcnI7XG4gXHQvKiBDaGVjayB3aGV0aGVyIHdlIGNhbiB3cml0ZSBpbnRvIHRoZSBzYW1lIG1lbW9yeS4gKi9cbiBcdGVyciA9IGNoZWNrX21lbV9hY2Nlc3MoZW52LCBlbnYtXHUwMDNlaW5zbl9pZHgsIGRzdF9yZWcsIGFyZ25vX2Zyb21fcmVnKGluc24tXHUwMDNlZHN0X3JlZyksIGluc24tXHUwMDNlb2ZmLFxuIFx0XHRcdCAgICAgICBCUEZfU0laRShpbnNuLVx1MDAzZWNvZGUpLCBCUEZfV1JJVEUsIC0xLCB0cnVlLCBmYWxzZSk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuY1xuaW5kZXggYjI0MWJiY2Y1NGE4YS4uYjIyYmFiMzMzMDFhYiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuY1xuQEAgLTYzNyw2ICs2MzcsNDUgQEAgaW50IG5vbl9hcmVuYV9wdHJfYWRkX3RvX2FyZW5hX3B0cih2b2lkICpjdHgpXG4gXG4gI2VuZGlmXG4gXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfaW5zbiBhZGRyX3NwYWNlX2Nhc3RfaW5zbiA9IHtcbitcdC5jb2RlID0gMHhiZixcbitcdC5kc3RfcmVnID0gQlBGX1JFR183LFxuK1x0LnNyY19yZWcgPSBCUEZfUkVHXzcsXG4rXHQub2ZmID0gMSxcbitcdC5pbW0gPSAxLFxuK307XG4rXG4rU0VDKFwic29ja2V0XCIpXG4rX19kZXNjcmlwdGlvbihcImFyZW5hIGFuZCBzdGFjayBhdG9taWMgYXQgdGhlIHNhbWUgaW5zdHJ1Y3Rpb25cIilcbitfX2ZhaWx1cmUgX19tc2coXCJzYW1lIGluc24gY2Fubm90IGJlIHVzZWQgd2l0aCBkaWZmZXJlbnQgcG9pbnRlcnNcIilcbitfX2FyY2hfeDg2XzY0XG4rX19sb2FkX2lmX0pJVGVkKClcbitfX25ha2VkIHZvaWQgbWl4ZWRfYXJlbmFfc3RhY2tfYXRvbWljKHZvaWQpXG4re1xuK1x0YXNtIHZvbGF0aWxlIChcIlx0XHRcdFx0XHRcXFxuK1x0cjEgPSAlW2FyZW5hXSBsbDtcdFx0XHRcdFxcXG4rXHRyNiA9IHIxMDtcdFx0XHRcdFx0XFxcbitcdHI2ICs9IC04O1x0XHRcdFx0XHRcXFxuK1x0cjkgPSAwO1x0XHRcdFx0XHRcXFxuK1x0Kih1NjQgKikocjYgKyAwKSA9IHI5O1x0XHRcdFxcXG4rXHRyNyA9IDgxOTI7XHRcdFx0XHRcdFxcXG4rXHQuOGJ5dGUgJVthZGRyX3NwYWNlX2Nhc3RdO1x0XHRcdFxcXG4rXHRjYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07XHRcdFx0XFxcbitcdGlmIHcwICE9IDAgZ290byAxZjtcdFx0XHRcdFxcXG4rXHRyOCA9IHI2O1x0XHRcdFx0XHRcXFxuK1x0Z290byAyZjtcdFx0XHRcdFx0XFxcbisxOlx0cjggPSByNztcdFx0XHRcdFx0XFxcbisyOlx0cjkgPSAxO1x0XHRcdFx0XHRcXFxuK1x0bG9jayAqKHU2NCAqKShyOCArIDApICs9IHI5O1x0XHRcdFxcXG4rXHRyMCA9IDA7XHRcdFx0XHRcdFxcXG4rXHRleGl0O1x0XHRcdFx0XHRcdFxcXG4rXCJcdDpcbitcdDogX19pbW1fYWRkcihhcmVuYSksXG4rXHQgIF9faW1tX2luc24oYWRkcl9zcGFjZV9jYXN0LCBhZGRyX3NwYWNlX2Nhc3RfaW5zbiksXG4rXHQgIF9faW1tKGJwZl9nZXRfcHJhbmRvbV91MzIpXG4rXHQ6IF9fY2xvYmJlcl9hbGwpO1xuK31cbitcbiBzdGF0aWMgX19ub2lubGluZVxuIHUzMiBfX2FyZW5hICpjaGVja19hcmVuYV9hcmdfbm9uZ2xvYmFsKHUzMiBfX2FyZW5hICphcmcpXG4ge1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMTE6MTg6MjQuMjM3MDU4ODg0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTc4MzI5MzA5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBCUEYgVmVyaWZpZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIHRoZSBCUEYgdmVyaWZpZXIsIHNwZWNpZmljYWxseSB3aXRoaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuIFRoZSBjaGFuZ2UgaXMgZm9jdXNlZCBvbiB0aGUgYGNoZWNrX2F0b21pY19ybXdgIGZ1bmN0aW9uLiBJbml0aWFsbHksIGl0IHdhcyBjb25kaXRpb25hbGx5IHNhdmluZyB0aGUgYXV4aWxpYXJ5IHBvaW50ZXIgdHlwZSwgb25seSBpZiB0aGUgZGVzdGluYXRpb24gcmVnaXN0ZXIgKGBpbnNuLVx1MDAzZWRzdF9yZWdgKSB3YXMgYW4gYXJlbmEgcmVnaXN0ZXIuIE5vdywgdGhlIHBhdGNoIHVuY29uZGl0aW9uYWxseSBzYXZlcyB0aGUgdHlwZSB1c2luZyBgZHN0X3JlZy1cdTAwM2V0eXBlYC4gVGhhdCdzIGEgZGVmaW5pdGUgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gaG93IHRoZSB2ZXJpZmllciBvcGVyYXRlcyBvbiBhdG9taWMgUk1XIGluc3RydWN0aW9ucy4gSSBuZWVkIHRvIGJlIHByZWNpc2UgYWJvdXQgdGhhdDogaXQgYWZmZWN0cyB0aGUgcG9pbnRlciAqdHlwZSogdXNlZCBpbiB0aGVzZSBhdG9taWMgb3BlcmF0aW9ucywgd2hpY2ggaXMgY29yZSBmdW5jdGlvbmFsaXR5IGluIHRoaXMgdmVyaWZpZXIuXG5cblRoZSB0ZXN0IGNhc2UgYWRkZWQsIGBtaXhlZF9hcmVuYV9zdGFja19hdG9taWNgLCBzZWVtcyBkZXNpZ25lZCB0byBoaWdobGlnaHQgdGhpcyBjaGFuZ2UuIEl0J3MgYXR0ZW1wdGluZyB0byB1c2UgdGhlIHNhbWUgaW5zdHJ1Y3Rpb24gd2l0aCBkaWZmZXJlbnQgcG9pbnRlciB0eXBlczogYXJlbmEgYW5kIHN0YWNrIHBvaW50ZXJzLiBBIGNsYXNzaWMgY292ZXJhZ2UgdGVzdC5cblxuR2l2ZW4gdGhhdCB0aGlzIHRvdWNoZXMgdGhlIGNvcmUgQlBGIHZlcmlmaWVyLCBhbmQgaW1wYWN0cyBob3cgYXRvbWljIGluc3RydWN0aW9ucyBhcmUgdmFsaWRhdGVkLCB0aGlzIGlzICphYnNvbHV0ZWx5KiBzb21ldGhpbmcgdGhhdCB3YXJyYW50cyBjYXJlZnVsIHNjcnV0aW55LiBXb3J0aHkgb2YgZnV6emluZywgbm8gZG91YnQuIFRoZSBrZXkgZnVuY3Rpb25zIHRvIGludmVzdGlnYXRlIGhlcmUgYXJlIGBzYXZlX2F1eF9wdHJfdHlwZWAgYW5kIGBjaGVja19hdG9taWNfcm13YCB3aXRoaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuIEkgc2hvdWxkIGFsc28gZG91YmxlIGNoZWNrIHRoYXQgYEJQRl9TWVNDQUxMYCBpcyBlbmFibGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzUxLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzA5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMTE6MTg6MzAuMDIwMzU2MjFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUxNjg0NDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY2hlY2tfYXRvbWljX3Jtd1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jPTY2MzA9c3RhdGljIGludCBjaGVja19zdG9yZV9yZWcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY2NjctXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjY2Njg6c3RhdGljIGludCBjaGVja19hdG9taWNfcm13KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY2NjktXFx0XFx0XFx0ICAgIHN0cnVjdCBicGZfaW5zbiAqaW5zbilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz02NzkxPXN0YXRpYyBpbnQgY2hlY2tfYXRvbWljKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02ODAzLVxcdGNhc2UgQlBGX0NNUFhDSEc6XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjY4MDQ6XFx0XFx0cmV0dXJuIGNoZWNrX2F0b21pY19ybXcoZW52LCBpbnNuKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjgwNS1cXHRjYXNlIEJQRl9MT0FEX0FDUTpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMTE6MTg6MzAuMDY1NTI4NTk3WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjkwNjgzNjgxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgdGhlIEF0b21pYyBSTVcgQ2hlY2sqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCBgY2hlY2tfYXRvbWljX3Jtd2AsIGFuZCBpdCdzIGRlZmluZWQgYXMgYSBzdGF0aWMgZnVuY3Rpb24sIHdoaWNoIGlzIGludGVyZXN0aW5nLiBJIGltbWVkaWF0ZWx5IGtub3cgdGhhdCBtZWFucyBpdCBoYXMgaW50ZXJuYWwgbGlua2FnZSB3aXRoaW4gdGhlIGN1cnJlbnQgdHJhbnNsYXRpb24gdW5pdC4gSXQncyBub3QgdmlzaWJsZSBvdXRzaWRlIG9mIHRoZSBmaWxlIGl0J3MgZGVjbGFyZWQgaW4sIHdoaWNoIHN1Z2dlc3RzIGl0J3MgYSBoZWxwZXIgZnVuY3Rpb24gc3BlY2lmaWNhbGx5IGZvciB0aGlzIG1vZHVsZS4gTm93LCBJIHNlZSBpdCdzIGNhbGxlZCBmcm9tIGBjaGVja19hdG9taWNgLiBUaGF0IGdpdmVzIG1lIHRoZSBpbW1lZGlhdGUgY29udGV4dC4gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgYGNoZWNrX2F0b21pY2AgdG8gZnVsbHkgZ3Jhc3Agd2hhdCBgY2hlY2tfYXRvbWljX3Jtd2AgaXMgZG9pbmcgYW5kIGl0cyBwdXJwb3NlIHdpdGhpbiB0aGUgbGFyZ2VyIHNjaGVtZS4gTGV0J3MgZGVsdmUgaW50byB0aGUgbG9naWMgb2YgYGNoZWNrX2F0b21pY2AgYW5kIHNlZSB3aGF0J3MgZ29pbmcgb24uIEknbSBndWVzc2luZyBgY2hlY2tfYXRvbWljX3Jtd2AgaGFuZGxlcyBhIHNwZWNpZmljIHR5cGUgb2YgYXRvbWljIG9wZXJhdGlvbiB3aXRoaW4gdGhhdCBicm9hZGVyIGBjaGVja19hdG9taWNgIGZ1bmN0aW9uLiBJJ2xsIGZvY3VzIG9uIGhvdyB0aGV5IGludGVyYWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjQxLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMTE6MTg6MzIuOTcyMzY3ODc3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NjIzNTc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNoZWNrX2F0b21pY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jPTY2MzA9c3RhdGljIGludCBjaGVja19zdG9yZV9yZWcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY2NjctXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjY2Njg6c3RhdGljIGludCBjaGVja19hdG9taWNfcm13KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY2NjktXFx0XFx0XFx0ICAgIHN0cnVjdCBicGZfaW5zbiAqaW5zbilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NzUyLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2NzUzOnN0YXRpYyBpbnQgY2hlY2tfYXRvbWljX2xvYWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjc1NC1cXHRcXHRcXHQgICAgIHN0cnVjdCBicGZfaW5zbiAqaW5zbilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NzcxLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2NzcyOnN0YXRpYyBpbnQgY2hlY2tfYXRvbWljX3N0b3JlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY3NzMtXFx0XFx0XFx0ICAgICAgc3RydWN0IGJwZl9pbnNuICppbnNuKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY3OTAtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjY3OTE6c3RhdGljIGludCBjaGVja19hdG9taWMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NzkyLXtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02ODAzLVxcdGNhc2UgQlBGX0NNUFhDSEc6XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjY4MDQ6XFx0XFx0cmV0dXJuIGNoZWNrX2F0b21pY19ybXcoZW52LCBpbnNuKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjgwNS1cXHRjYXNlIEJQRl9MT0FEX0FDUTpcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02ODEwLVxcdFxcdH1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjgxMTpcXHRcXHRyZXR1cm4gY2hlY2tfYXRvbWljX2xvYWQoZW52LCBpbnNuKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjgxMi1cXHRjYXNlIEJQRl9TVE9SRV9SRUw6XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjgxNy1cXHRcXHR9XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjY4MTg6XFx0XFx0cmV0dXJuIGNoZWNrX2F0b21pY19zdG9yZShlbnYsIGluc24pO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02ODE5LVxcdGRlZmF1bHQ6XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTgwNzA9c3RhdGljIGludCBkb19jaGVja19pbnNuKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGJvb2wgKmRvX3ByaW50X3N0YXRlKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4MDg3LVxcdFxcdGlmIChCUEZfTU9ERShpbnNuLVxcdTAwM2Vjb2RlKSA9PSBCUEZfQVRPTUlDKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxODA4ODpcXHRcXHRcXHRyZXR1cm4gY2hlY2tfYXRvbWljKGVudiwgaW5zbik7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4MDg5LVxcdFxcdHJldHVybiBjaGVja19zdG9yZV9yZWcoZW52LCBpbnNuLCBmYWxzZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDExOjE4OjMzLjAxNzk5NTUwNFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NzM4Mjc3NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhpcyBjb2RlOlxuXG4qKkZpbmRpbmcgdGhlIFZlcmlmaWVyJ3MgRW50cnkgUG9pbnQqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGUgdmVyaWZpY2F0aW9uIHByb2Nlc3MgKmFjdHVhbGx5KiBiZWdpbnMuIEkgc2VlIGEgZmV3IHN0YXRpYyBmdW5jdGlvbnMgaGVyZSB0aGF0IGxvb2sgcG90ZW50aWFsbHkgaW1wb3J0YW50OiBgY2hlY2tfYXRvbWljYCwgYGRvX2NoZWNrX2luc25gLCBhbmQgdGhlbiBgZG9fY2hlY2tfbWFpbmAgb3IganVzdCBgZG9fY2hlY2tgLiBUaGUgZmFjdCB0aGF0IGBjaGVja19hdG9taWNgIGFuZCBgZG9fY2hlY2tfaW5zbmAgYXJlIHN0YXRpYyBzdWdnZXN0cyB0aGV5IGFyZSBpbnRlcm5hbCBoZWxwZXJzLCBsaWtlbHkgcGFydCBvZiBhIGxhcmdlciBmdW5jdGlvbi4gTXkgZ3V0IHNheXMgdGhhdCBgZG9fY2hlY2tfbWFpbmAgb3IgYGRvX2NoZWNrYCBpcyAqcHJvYmFibHkqIHRoZSB0b3AtbGV2ZWwgZW50cnkgcG9pbnQsIHRoZSBmdW5jdGlvbiB0aGF0IGtpY2tzIG9mZiB0aGUgd2hvbGUgdmVyaWZpY2F0aW9uIHByb2Nlc3MuIFRpbWUgdG8gZGlnIGluIGFuZCBjb25maXJtIHRoYXQgYXNzdW1wdGlvbi4gTGV0J3Mgc2VlIGlmIEkgY2FuIHBpbnBvaW50IHRoYXQgbWFpbiBlbnRyeSBwb2ludC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDYzNywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDExOjE4OjM2LjY5MTg0NDMxNVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTkzOTkyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkb19jaGVja19pbnNuXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTgwMTI9c3RhdGljIGludCBjaGVja19pbmRpcmVjdF9qdW1wKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODA2OS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTgwNzA6c3RhdGljIGludCBkb19jaGVja19pbnNuKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGJvb2wgKmRvX3ByaW50X3N0YXRlKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODA3MS17XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTgxODA9c3RhdGljIGludCBkb19jaGVjayhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4MzI5LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxODMzMDpcXHRcXHRlcnIgPSBkb19jaGVja19pbnNuKGVudiwgXFx1MDAyNmRvX3ByaW50X3N0YXRlKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTgzMzEtXFx0XFx0aWYgKGVycm9yX3JlY292ZXJhYmxlX3dpdGhfbm9zcGVjKGVycikgXFx1MDAyNlxcdTAwMjYgc3RhdGUtXFx1MDAzZXNwZWN1bGF0aXZlKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDExOjE4OjM2LjczNzc4ODg5MloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4NTYyMjE5MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIGNvZGU6XG5cbioqU3RhdGljIEZ1bmN0aW9uIEFuYWx5c2lzKipcblxuT2theSwgc28gYGRvX2NoZWNrYCBpcyBhbm90aGVyIG9uZSBvZiB0aGVzZSBzdGF0aWMgZnVuY3Rpb25zLiBUaGF0J3MgYSBrZXkgZGV0YWlsIHRvIG5vdGUsIGJlY2F1c2UgaXQgbWVhbnMgaXRzIHNjb3BlIGlzIGxpbWl0ZWQgdG8gdGhpcyBjb21waWxhdGlvbiB1bml0LiBUaGlzIGNvbnRleHQgaXMgaW1wb3J0YW50IGJlY2F1c2UgaXQgbmFycm93cyBkb3duIHRoZSBwbGFjZXMgd2hlcmUgSSBuZWVkIHRvIGxvb2sgZm9yIGNhbGxzIG9yIHBvdGVudGlhbCBpbnRlcmFjdGlvbnMuIE5vdywgdGhlIG5leHQgc3RlcCBpbiBteSBtZW50YWwgcHJvY2VzcyBpcyB0byBmaWd1cmUgb3V0IGhvdyB0aGlzIGZ1bmN0aW9uIGZpdHMgaW50byB0aGUgb3ZlcmFsbCBzY2hlbWUuIExldCdzIHNlZS4uLiB3aGF0J3MgaXQgY29ubmVjdGVkIHRvPyBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgYGJwZl9jaGVja2AgZnVuY3Rpb24uIFRoYXQgc2VlbXMgbGlrZSB0aGUgbG9naWNhbCBuZXh0IHN0ZXAgdG8gdW5kZXJzdGFuZCB0aGUgYnJvYWRlciBpbXBsaWNhdGlvbnMgb2YgYGRvX2NoZWNrYC4gSSdsbCBzdGFydCB3aXRoIGEgc2VhcmNoIG9yIGNyb3NzLXJlZmVyZW5jZSBmb3IgYGJwZl9jaGVja2AgYW5kIGFuYWx5emUgaXRzIHJlbGF0aW9uc2hpcCB0byBgZG9fY2hlY2tgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MTcwLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMTE6MTg6MzkuNTk0MDEzOTQ2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTA2NTcwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfY2hlY2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuYz01OD1zdGF0aWMgYm9vbCBicGZfZ2xvYmFsX3BlcmNwdV9tYV9zZXQ7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTU5LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2MDovKiBicGZfY2hlY2soKSBpcyBhIHN0YXRpYyBjb2RlIGFuYWx5emVyIHRoYXQgd2Fsa3MgZUJQRiBwcm9ncmFtXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTYxLSAqIGluc3RydWN0aW9uIGJ5IGluc3RydWN0aW9uIGFuZCB1cGRhdGVzIHJlZ2lzdGVyL3N0YWNrIHN0YXRlLlxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTEyNTMzPXN0YXRpYyBpbnQgcHJvY2Vzc19rZl9hcmdfcHRyX3RvX3JidHJlZV9ub2RlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTI1NDQtICogTFNNIGhvb2tzIGFuZCBpdGVycyAoYm90aCBzbGVlcGFibGUgYW5kIG5vbi1zbGVlcGFibGUpIGFyZSBzYWZlLlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMjU0NTogKiBBbnkgc2xlZXBhYmxlIHByb2dzIGFyZSBhbHNvIHNhZmUgc2luY2UgYnBmX2NoZWNrX2F0dGFjaF90YXJnZXQoKSBlbmZvcmNlXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyNTQ2LSAqIHRoZW0gY2FuIG9ubHkgYmUgYXR0YWNoZWQgdG8gc29tZSBzcGVjaWZpYyBob29rIHBvaW50cy5cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xOTg2Nj1zdGF0aWMgYm9vbCBhdHRhY2hfdXNlc190cmFtcG9saW5lX3JldHZhbChlbnVtIGJwZl9hdHRhY2hfdHlwZSB0eXBlKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5ODc5LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTg4MDppbnQgYnBmX2NoZWNrX2F0dGFjaF90YXJnZXQoc3RydWN0IGJwZl92ZXJpZmllcl9sb2cgKmxvZyxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk4ODEtXFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0yMDMwMz1zdGF0aWMgaW50IGNoZWNrX2F0dGFjaF9idGZfaWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDMzMy1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjAzMzQ6XFx0cmV0ID0gYnBmX2NoZWNrX2F0dGFjaF90YXJnZXQoXFx1MDAyNmVudi1cXHUwMDNlbG9nLCBwcm9nLCB0Z3RfcHJvZywgYnRmX2lkLCBcXHUwMDI2dGd0X2luZm8pO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDMzNS1cXHRpZiAocmV0KVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwNDAyLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMDQwMzppbnQgYnBmX2NoZWNrX2F0dGFjaF9idGZfaWRfbXVsdGkoc3RydWN0IGJ0ZiAqYnRmLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBidGZfaWQsXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwNDA0LVxcdFxcdFxcdFxcdCAgc3RydWN0IGJwZl9hdHRhY2hfdGFyZ2V0X2luZm8gKnRndF9pbmZvKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTIwODM2PXN0YXRpYyBlbnVtIGJwZl9zaWdfa2V5cmluZyBicGZfY2xhc3NpZnlfa2V5cmluZyhzMzIga2V5cmluZ19pZClcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDg1MC0vKlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMDg1MTogKiBWZXJpZnkgdGhlIFBLQ1MjNyBzaWduYXR1cmUgb2YgYSBsb2FkZWQgcHJvZ3JhbS4gQ2FsbGVkIGZyb20gYnBmX2NoZWNrKClcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjA4NTItICogb25jZSB0aGUgcHJvZ3JhbSdzIG1ldGFkYXRhIG1hcHMgaGF2ZSBiZWVuIHJlc29sdmVkIGludG8gdXNlZF9tYXBzLCBzb1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTIwODU5PXN0YXRpYyBpbnQgYnBmX3Byb2dfdmVyaWZ5X3NpZ25hdHVyZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwOTc1LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMDk3NjppbnQgYnBmX2NoZWNrKHN0cnVjdCBicGZfcHJvZyAqKnByb2csIHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cixcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjA5NzctXFx0ICAgICAgc3RydWN0IGJwZl9sb2dfYXR0ciAqYXR0cl9sb2cpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjA5OTAtXFx0LyogJ3N0cnVjdCBicGZfdmVyaWZpZXJfZW52JyBjYW4gYmUgZ2xvYmFsLCBidXQgc2luY2UgaXQncyBub3Qgc21hbGwsXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjIwOTkxOlxcdCAqIGFsbG9jYXRlL2ZyZWUgaXQgZXZlcnkgdGltZSBicGZfY2hlY2soKSBpcyBjYWxsZWRcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjA5OTItXFx0ICovXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjExMDEtXFx0LyogVmFsaWRhdGUgQlRGIGFnYWluc3QgdGhlIGNvbXBsZXRlIHN1YnByb2dyYW0gbGF5b3V0IGFuZCBhcHBseSBDTy1SRS4gKi9cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjExMDI6XFx0cmV0ID0gYnBmX2NoZWNrX2J0Zl9pbmZvKGVudiwgYXR0ciwgdWF0dHIpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMTEwMy1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMTEyMS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjExMjI6XFx0cmV0ID0gYnBmX2NoZWNrX2NmZyhlbnYpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMTEyMy1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMTE6MTg6MzkuNjM5MDg1ODQyWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI1ODQ2Mzc2MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBDb3JlIExvZ2ljOiBUaGUgYGJwZl9jaGVja2AgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBjb2RlLCBhbmQgdGhlIGNlbnRyYWwgZm9jdXMgaGVyZSBzZWVtcyB0byBiZSBgYnBmX2NoZWNrYC4gSXQgbWFrZXMgc2Vuc2U7IGFzIHRoZSBuYW1lIGltcGxpZXMsIGl0J3MgbGlrZWx5IHRoZSBwcmltYXJ5IGdhdGVrZWVwZXIgZm9yIHZlcmlmeWluZyBCUEYgcHJvZ3JhbXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBnbyBkaXJlY3RseSB0byB0aGlzIGZ1bmN0aW9uLiBJdCdzIHRoZSBtb3N0IGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGNvcmUgdmFsaWRhdGlvbiBwcm9jZXNzLiBUaGUgZW50aXJlIGludGVncml0eSBvZiB0aGUgc3lzdGVtIGhpbmdlcyBvbiB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTE3LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMTE6MTg6NDIuMjIzNzI2Njg2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjI3MzQ3NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnQgYnBmX2NoZWNrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTk4NjY9c3RhdGljIGJvb2wgYXR0YWNoX3VzZXNfdHJhbXBvbGluZV9yZXR2YWwoZW51bSBicGZfYXR0YWNoX3R5cGUgdHlwZSlcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTg3OS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk4ODA6aW50IGJwZl9jaGVja19hdHRhY2hfdGFyZ2V0KHN0cnVjdCBicGZfdmVyaWZpZXJfbG9nICpsb2csXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5ODgxLVxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MjAzMDM9c3RhdGljIGludCBjaGVja19hdHRhY2hfYnRmX2lkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjA0MDItXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjIwNDAzOmludCBicGZfY2hlY2tfYXR0YWNoX2J0Zl9pZF9tdWx0aShzdHJ1Y3QgYnRmICpidGYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyIGJ0Zl9pZCxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjA0MDQtXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgYnBmX2F0dGFjaF90YXJnZXRfaW5mbyAqdGd0X2luZm8pXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MjA4NTk9c3RhdGljIGludCBicGZfcHJvZ192ZXJpZnlfc2lnbmF0dXJlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjA5NzUtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjIwOTc2OmludCBicGZfY2hlY2soc3RydWN0IGJwZl9wcm9nICoqcHJvZywgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDk3Ny1cXHQgICAgICBzdHJ1Y3QgYnBmX2xvZ19hdHRyICphdHRyX2xvZylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMTE6MTg6NDIuMjcwMDA1MjIzWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyNjgyNzU3ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgRnV6emluZyBTdHJhdGVneTogSW5pdGlhbCBUaG91Z2h0cyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyB0byBhcHByb2FjaCBmdXp6aW5nIHRoaXMgQlBGIGNvZGUuIFRoZSB0YXNrIGZvY3VzZXMgbWUgb24gYGJwZl9jaGVja2AgLSB0aGF0J3MgdGhlIHByaW1hcnkgZnVuY3Rpb24gaW4gdGhlIHNwb3RsaWdodC4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBjYXN0IGEgd2lkZXIgbmV0LiBBcmUgdGhlcmUgb3RoZXIgZnVuY3Rpb25zIGluIHRoZSB2aWNpbml0eSB0aGF0IG1pZ2h0IGFsc28gYmVuZWZpdCBmcm9tIGZ1enppbmc/IGBicGZfY2hlY2tgIGZlZWxzIHByZXR0eSBnZW5lcmljLCB3aGljaCBjb3VsZCBtYWtlIGl0IGEgbGVzcy10aGFuLWlkZWFsIHRhcmdldCBmb3Igc2tld2luZyB0aGUgdGVzdCBkaXN0cmlidXRpb24uIFRoZSBjb2RlIGNoYW5nZSBJJ20gaW52ZXN0aWdhdGluZyBpcyBzcGVjaWZpY2FsbHkgYXJvdW5kIGBjaGVja19hdG9taWNfcm13YCwgc28gaXMgdGhlcmUgYW5vdGhlciBmdW5jdGlvbiB0aGF0IGludGVyYWN0cyB3aXRoIGl0IGRpcmVjdGx5P1xuXG5QZXJoYXBzIGBicGZfY2hlY2tgIGlzIHRoZSBiZXN0IGNob2ljZSBhZnRlciBhbGwuIFdhaXQsIHRoZSBpbnN0cnVjdGlvbnMuLi4gYWgsIGhlcmUgd2UgZ28uIFRoZSBndWlkYW5jZSBleHBsaWNpdGx5IHRlbGxzIG1lIHRvIGF2b2lkIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zLCBmYXZvcmluZyBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucy4gVGhpcyBtYWtlcyBzZW5zZSBmcm9tIGEgdGVzdGluZyBwZXJzcGVjdGl2ZS5cblxuQWxyaWdodCwgYGJwZl9jaGVja2AgKmlzKiBhbiBBUEkgZW50cnlwb2ludCBmdW5jdGlvbi4gQnV0IGp1c3QgdG8gYmUgdGhvcm91Z2gsIEkgc2hvdWxkIGxvb2sgaW50byB0aGUgc291cmNlIGZpbGUgdG8gc2VlIGlmIHRoZXJlIGlzIGFub3RoZXIgZXhwb3NlZCBmdW5jdGlvbiB0aGF0IG1heSBhbHNvIGJlIGEgZ29vZCB0YXJnZXQuIEknbGwgbmVlZCB0byBjaGVjayBga2VybmVsL2JwZi92ZXJpZmllci5jYCBmb3IgZXhwb3J0ZWQgZnVuY3Rpb25zLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGF2YWlsYWJsZSBvcHRpb25zIGFuZCBlbnN1cmUgSSdtIG1ha2luZyB0aGUgbW9zdCBpbmZvcm1lZCBkZWNpc2lvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NzA5NywiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQxMToxODo0Ni41MzgyODM0M1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA0OTg3MjY1LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMTE6MTg6NDYuNjQzMjc4NTc1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI1ODcwMDE3ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBCUEYgRnVuY3Rpb25hbGl0eSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBkaWcgaW50byBob3cgYGJwZl9jaGVja2AgaXMgYmVpbmcgdXNlZCB3aXRoaW4gdGhlIGtlcm5lbCdzIEJQRiBpbmZyYXN0cnVjdHVyZS4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBnbyBzdHJhaWdodCB0byB0aGUgc291cmNlLiBTcGVjaWZpY2FsbHksIEkgc2hvdWxkIGxvb2sgd2l0aGluIHRoZSBga2VybmVsL2JwZi9gIGRpcmVjdG9yeS4gVGhhdCdzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGh1bnRpbmcgZm9yIHRoZSBkZWZpbml0aW9uIGFuZCBhbnkgc2lnbmlmaWNhbnQgdXNlcyBvZiB0aGF0IGZ1bmN0aW9uLiBJJ20gZXhwZWN0aW5nIHRoaXMgd2lsbCBsaWtlbHkgcmV2ZWFsIGNyaXRpY2FsIHBhcnRzIG9mIHRoZSB2ZXJpZmllciBvciBwZXJoYXBzIHNlY3VyaXR5IGNoZWNrcy4gSSdtIHJlYWxseSBsb29raW5nIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bmN0aW9uJ3MgcHVycG9zZSwgaG93IGl0J3MgY2FsbGVkLCBhbmQgd2hhdCBpdHMgcmV0dXJuIHZhbHVlcyBzaWduaWZ5IGluIHRoZSBjb250ZXh0IG9mIEJQRiBwcm9ncmFtIGV4ZWN1dGlvbiBhbmQgdmFsaWRhdGlvbi4gSG9wZWZ1bGx5LCB0aGUgc2VhcmNoIHJlc3VsdHMgd2lsbCBwb2ludCBtZSB0b3dhcmQga2V5IGFyZWFzIGZvciBkZWVwZXIgaW52ZXN0aWdhdGlvbiwgbGlrZSByZWxhdGVkIGVycm9yIGhhbmRsaW5nIG9yIHNwZWNpZmljIHNlY3VyaXR5IGNvbnN0cmFpbnRzIGl0IGVuZm9yY2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NTk4LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMTE6MTg6NDkuMjMwMjgyNFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAxOTc1NzI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9jaGVja1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2JwZl9pdGVyLmM9NTA0PWludCBicGZfaXRlcl9saW5rX2F0dGFjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIsXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9pdGVyLmMtNTI1LVxcdGlmICghYnBmcHRyX2lzX251bGwodWxpbmZvKSkge1xcbmtlcm5lbC9icGYvYnBmX2l0ZXIuYzo1MjY6XFx0XFx0ZXJyID0gYnBmX2NoZWNrX3VhcmdfdGFpbF96ZXJvKHVsaW5mbywgc2l6ZW9mKGxpbmZvKSxcXG5rZXJuZWwvYnBmL2JwZl9pdGVyLmMtNTI3LVxcdFxcdFxcdFxcdFxcdCAgICAgICBsaW5mb19sZW4pO1xcbi0tXFxua2VybmVsL2JwZi9idGYuYz02ODQ5PWJvb2wgYnRmX2N0eF9hY2Nlc3MoaW50IG9mZiwgaW50IHNpemUsIGVudW0gYnBmX2FjY2Vzc190eXBlIHR5cGUsXFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jLTcwMzAtXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbmtlcm5lbC9icGYvYnRmLmM6NzAzMTpcXHRcXHQvKiBDaGVja2VkIGJ5IGJwZl9jaGVja19hdHRhY2hfdGFyZ2V0ICovXFxua2VybmVsL2JwZi9idGYuYy03MDMyLVxcdFxcdHRuYW1lICs9IHNpemVvZihcXFwiYnRmX3RyYWNlX1xcXCIpIC0gMTtcXG4tLVxcbmtlcm5lbC9icGYvY2ZnLmM9NDUxPXN0YXRpYyBpbnQgdmlzaXRfaW5zbihpbnQgdCwgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4tLVxcbmtlcm5lbC9icGYvY2ZnLmMtNTg2LSAqL1xcbmtlcm5lbC9icGYvY2ZnLmM6NTg3OmludCBicGZfY2hlY2tfY2ZnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxua2VybmVsL2JwZi9jZmcuYy01ODgte1xcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYz0xNzkzPUVYUE9SVF9TWU1CT0woX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfc29ja19vcHMpO1xcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTc5NC1cXG5rZXJuZWwvYnBmL2Nncm91cC5jOjE3OTU6aW50IF9fY2dyb3VwX2JwZl9jaGVja19kZXZfcGVybWlzc2lvbihzaG9ydCBkZXZfdHlwZSwgdTMyIG1ham9yLCB1MzIgbWlub3IsXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xNzk2LVxcdFxcdFxcdFxcdCAgICAgIHNob3J0IGFjY2VzcywgZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlKVxcbi0tXFxua2VybmVsL2JwZi9jaGVja19idGYuYz0zMT1zdGF0aWMgaW50IHByZXBhcmVfYnRmX2Z1bmMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvY2hlY2tfYnRmLmMtNzAtXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5mdW5jczsgaSsrKSB7XFxua2VybmVsL2JwZi9jaGVja19idGYuYzo3MTpcXHRcXHRyZXQgPSBicGZfY2hlY2tfdWFyZ190YWlsX3plcm8odXJlY29yZCwga3JlY19zaXplLCB1cmVjX3NpemUpO1xcbmtlcm5lbC9icGYvY2hlY2tfYnRmLmMtNzItXFx0XFx0aWYgKHJldCkge1xcbi0tXFxua2VybmVsL2JwZi9jaGVja19idGYuYz0yMTM9c3RhdGljIGludCBjaGVja19idGZfbGluZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi9jaGVja19idGYuYy0yNTMtXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5yX2xpbmZvOyBpKyspIHtcXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jOjI1NDpcXHRcXHRlcnIgPSBicGZfY2hlY2tfdWFyZ190YWlsX3plcm8odWxpbmZvLCBleHBlY3RlZF9zaXplLCByZWNfc2l6ZSk7XFxua2VybmVsL2JwZi9jaGVja19idGYuYy0yNTUtXFx0XFx0aWYgKGVycikge1xcbi0tXFxua2VybmVsL2JwZi9jaGVja19idGYuYz0zNDE9c3RhdGljIGludCBjaGVja19jb3JlX3JlbG8oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvY2hlY2tfYnRmLmMtMzc2LVxcdFxcdC8qIGZ1dHVyZSBwcm9vZmluZyB3aGVuIHNpemVvZihicGZfY29yZV9yZWxvKSBjaGFuZ2VzICovXFxua2VybmVsL2JwZi9jaGVja19idGYuYzozNzc6XFx0XFx0ZXJyID0gYnBmX2NoZWNrX3VhcmdfdGFpbF96ZXJvKHVfY29yZV9yZWxvLCBleHBlY3RlZF9zaXplLCByZWNfc2l6ZSk7XFxua2VybmVsL2JwZi9jaGVja19idGYuYy0zNzgtXFx0XFx0aWYgKGVycikge1xcbi0tXFxua2VybmVsL2JwZi9jaGVja19idGYuYz00MTA9aW50IGJwZl9wcmVwYXJlX2J0Zl9pbmZvKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jLTQzNy1cXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jOjQzODppbnQgYnBmX2NoZWNrX2J0Zl9pbmZvKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxua2VybmVsL2JwZi9jaGVja19idGYuYy00MzktXFx0XFx0ICAgICAgIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxcbi0tXFxua2VybmVsL2JwZi9jb3JlLmMtMTYtICogQW5kaSBLbGVlbiAtIEZpeCBhIGZldyBiYWQgYnVncyBhbmQgcmFjZXMuXFxua2VybmVsL2JwZi9jb3JlLmM6MTc6ICogS3JpcyBLYXR0ZXJqb2huIC0gQWRkZWQgbWFueSBhZGRpdGlvbmFsIGNoZWNrcyBpbiBicGZfY2hlY2tfY2xhc3NpYygpXFxua2VybmVsL2JwZi9jb3JlLmMtMTgtICovXFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYz0yNTc0PWJvb2wgYnBmX3Byb2dfbWFwX2NvbXBhdGlibGUoc3RydWN0IGJwZl9tYXAgKm1hcCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpmcClcXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jLTI1ODYtXFxua2VybmVsL2JwZi9jb3JlLmM6MjU4NzpzdGF0aWMgaW50IGJwZl9jaGVja190YWlsX2NhbGwoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpmcClcXG5rZXJuZWwvYnBmL2NvcmUuYy0yNTg4LXtcXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jPTI2NjQ9c3RydWN0IGJwZl9wcm9nICpfX2JwZl9wcm9nX3NlbGVjdF9ydW50aW1lKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqZnAsXFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYy0yNzEwLVxcdCAqL1xcbmtlcm5lbC9icGYvY29yZS5jOjI3MTE6XFx0KmVyciA9IGJwZl9jaGVja190YWlsX2NhbGwoZnApO1xcbmtlcm5lbC9icGYvY29yZS5jLTI3MTItXFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYz0zMzg5PXN0YXRpYyBub2lubGluZSB2b2lkIGJwZl9wcm9nX3JlcG9ydF9tYXlfZ290b192aW9sYXRpb24odm9pZClcXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jLTM0MDQtXFxua2VybmVsL2JwZi9jb3JlLmM6MzQwNTp1NjQgYnBmX2NoZWNrX3RpbWVkX21heV9nb3RvKHN0cnVjdCBicGZfdGltZWRfbWF5X2dvdG8gKnApXFxua2VybmVsL2JwZi9jb3JlLmMtMzQwNi17XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz03MT1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzICogY29uc3QgYnBmX21hcF90eXBlc1tdID0ge1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtOTAtICovXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6OTE6aW50IGJwZl9jaGVja191YXJnX3RhaWxfemVybyhicGZwdHJfdCB1YWRkcixcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy05Mi1cXHRcXHRcXHQgICAgIHNpemVfdCBleHBlY3RlZF9zaXplLFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9MjkxNz1zdGF0aWMgaW50IGJwZl9wcm9nX2xvYWQodW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLCBzdHJ1Y3QgYnBmX2xvZ19hdHRyICphdHRyX2xvZylcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTMxMzItXFx0LyogcnVuIGVCUEYgdmVyaWZpZXIgKi9cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozMTMzOlxcdGVyciA9IGJwZl9jaGVjayhcXHUwMDI2cHJvZywgYXR0ciwgdWF0dHIsIGF0dHJfbG9nKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zMTM0LVxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9MzYzND1zdGF0aWMgaW50IGJwZl90cmFjaW5nX3Byb2dfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTM3NjYtXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6Mzc2NzpcXHRcXHRlcnIgPSBicGZfY2hlY2tfYXR0YWNoX3RhcmdldChOVUxMLCBwcm9nLCB0Z3RfcHJvZywgYnRmX2lkLFxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTM3NjgtXFx0XFx0XFx0XFx0XFx0ICAgICAgXFx1MDAyNnRndF9pbmZvKTtcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTUwOTk9c3RhdGljIGludCBicGZfcHJvZ19nZXRfaW5mb19ieV9mZChzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTUxMTMtXFx0bGVuID0gb2Zmc2V0b2ZlbmQoc3RydWN0IGJwZl9wcm9nX2luZm8sIGF0dGFjaF9idGZfaWQpO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjUxMTQ6XFx0ZXJyID0gYnBmX2NoZWNrX3VhcmdfdGFpbF96ZXJvKFVTRVJfQlBGUFRSKHVpbmZvKSwgbGVuLCBpbmZvX2xlbik7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTExNS1cXHRpZiAoZXJyKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9NTM4OT1zdGF0aWMgaW50IGJwZl9tYXBfZ2V0X2luZm9fYnlfZmQoc3RydWN0IGZpbGUgKmZpbGUsXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01Mzk5LVxcdGxlbiA9IG9mZnNldG9mZW5kKHN0cnVjdCBicGZfbWFwX2luZm8sIGhhc2hfc2l6ZSk7XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NTQwMDpcXHRlcnIgPSBicGZfY2hlY2tfdWFyZ190YWlsX3plcm8oVVNFUl9CUEZQVFIodWluZm8pLCBsZW4sIGluZm9fbGVuKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01NDAxLVxcdGlmIChlcnIpXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz01NDYwPXN0YXRpYyBpbnQgYnBmX2J0Zl9nZXRfaW5mb19ieV9mZChzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU0NjgtXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NTQ2OTpcXHRlcnIgPSBicGZfY2hlY2tfdWFyZ190YWlsX3plcm8oVVNFUl9CUEZQVFIodWluZm8pLCBzaXplb2YoKnVpbmZvKSwgaW5mb19sZW4pO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU0NzAtXFx0aWYgKGVycilcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTU0NzY9c3RhdGljIGludCBicGZfbGlua19nZXRfaW5mb19ieV9mZChzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU0ODYtXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NTQ4NzpcXHRlcnIgPSBicGZfY2hlY2tfdWFyZ190YWlsX3plcm8oVVNFUl9CUEZQVFIodWluZm8pLCBzaXplb2YoaW5mbyksIGluZm9fbGVuKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01NDg4LVxcdGlmIChlcnIpXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz01NTE4PXN0YXRpYyBpbnQgdG9rZW5fZ2V0X2luZm9fYnlfZmQoc3RydWN0IGZpbGUgKmZpbGUsXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01NTI2LVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjU1Mjc6XFx0ZXJyID0gYnBmX2NoZWNrX3VhcmdfdGFpbF96ZXJvKFVTRVJfQlBGUFRSKHVpbmZvKSwgc2l6ZW9mKCp1aW5mbyksIGluZm9fbGVuKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01NTI4LVxcdGlmIChlcnIpXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz02MzAzPXN0YXRpYyBpbnQgX19zeXNfYnBmKGVudW0gYnBmX2NtZCBjbWQsIGJwZnB0cl90IHVhdHRyLCB1bnNpZ25lZCBpbnQgc2l6ZSxcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYzMTEtXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NjMxMjpcXHRlcnIgPSBicGZfY2hlY2tfdWFyZ190YWlsX3plcm8odWF0dHIsIHNpemVvZihhdHRyKSwgc2l6ZSk7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjMxMy1cXHRpZiAoZXJyKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjMyMy1cXHRpZiAoY21kIFxcdTAwMjYgQlBGX0NPTU1PTl9BVFRSUykge1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjYzMjQ6XFx0XFx0ZXJyID0gYnBmX2NoZWNrX3VhcmdfdGFpbF96ZXJvKHVhdHRyX2NvbW1vbixcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02MzI1LVxcdFxcdFxcdFxcdFxcdCAgICAgICBvZmZzZXRvZmVuZChzdHJ1Y3QgYnBmX2NvbW1vbl9hdHRyLCBsb2dfdHJ1ZV9zaXplKSxcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTExMjM9aW50IGJwZl90cmFtcG9saW5lX2xpbmtfY2dyb3VwX3NoaW0oc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTEzMy1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxMTM0OlxcdGVyciA9IGJwZl9jaGVja19hdHRhY2hfdGFyZ2V0KE5VTEwsIHByb2csIE5VTEwsXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTEzNS1cXHRcXHRcXHRcXHQgICAgICBwcm9nLVxcdTAwM2VhdXgtXFx1MDAzZWF0dGFjaF9idGZfaWQsXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz0xNjY5PWludCBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIgKmlkcyxcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE2ODItXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTY4MzpcXHRcXHRlcnIgPSBicGZfY2hlY2tfYXR0YWNoX2J0Zl9pZF9tdWx0aShidGYsIHByb2csIGlkc1tpXSwgXFx1MDAyNnRndF9pbmZvKTtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNjg0LVxcdFxcdGlmIChlcnIpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NTg9c3RhdGljIGJvb2wgYnBmX2dsb2JhbF9wZXJjcHVfbWFfc2V0O1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy01OS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjA6LyogYnBmX2NoZWNrKCkgaXMgYSBzdGF0aWMgY29kZSBhbmFseXplciB0aGF0IHdhbGtzIGVCUEYgcHJvZ3JhbVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02MS0gKiBpbnN0cnVjdGlvbiBieSBpbnN0cnVjdGlvbiBhbmQgdXBkYXRlcyByZWdpc3Rlci9zdGFjayBzdGF0ZS5cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMjUzMz1zdGF0aWMgaW50IHByb2Nlc3Nfa2ZfYXJnX3B0cl90b19yYnRyZWVfbm9kZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyNTQ0LSAqIExTTSBob29rcyBhbmQgaXRlcnMgKGJvdGggc2xlZXBhYmxlIGFuZCBub24tc2xlZXBhYmxlKSBhcmUgc2FmZS5cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTI1NDU6ICogQW55IHNsZWVwYWJsZSBwcm9ncyBhcmUgYWxzbyBzYWZlIHNpbmNlIGJwZl9jaGVja19hdHRhY2hfdGFyZ2V0KCkgZW5mb3JjZVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjU0Ni0gKiB0aGVtIGNhbiBvbmx5IGJlIGF0dGFjaGVkIHRvIHNvbWUgc3BlY2lmaWMgaG9vayBwb2ludHMuXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTk4NjY9c3RhdGljIGJvb2wgYXR0YWNoX3VzZXNfdHJhbXBvbGluZV9yZXR2YWwoZW51bSBicGZfYXR0YWNoX3R5cGUgdHlwZSlcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTg3OS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk4ODA6aW50IGJwZl9jaGVja19hdHRhY2hfdGFyZ2V0KHN0cnVjdCBicGZfdmVyaWZpZXJfbG9nICpsb2csXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5ODgxLVxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MjAzMDM9c3RhdGljIGludCBjaGVja19hdHRhY2hfYnRmX2lkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjAzMzMtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjIwMzM0OlxcdHJldCA9IGJwZl9jaGVja19hdHRhY2hfdGFyZ2V0KFxcdTAwMjZlbnYtXFx1MDAzZWxvZywgcHJvZywgdGd0X3Byb2csIGJ0Zl9pZCwgXFx1MDAyNnRndF9pbmZvKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjAzMzUtXFx0aWYgKHJldClcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDQwMi1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjA0MDM6aW50IGJwZl9jaGVja19hdHRhY2hfYnRmX2lkX211bHRpKHN0cnVjdCBidGYgKmJ0Ziwgc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIgYnRmX2lkLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDQwNC1cXHRcXHRcXHRcXHQgIHN0cnVjdCBicGZfYXR0YWNoX3RhcmdldF9pbmZvICp0Z3RfaW5mbylcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0yMDgzNj1zdGF0aWMgZW51bSBicGZfc2lnX2tleXJpbmcgYnBmX2NsYXNzaWZ5X2tleXJpbmcoczMyIGtleXJpbmdfaWQpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjA4NTAtLypcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjA4NTE6ICogVmVyaWZ5IHRoZSBQS0NTIzcgc2lnbmF0dXJlIG9mIGEgbG9hZGVkIHByb2dyYW0uIENhbGxlZCBmcm9tIGJwZl9jaGVjaygpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwODUyLSAqIG9uY2UgdGhlIHByb2dyYW0ncyBtZXRhZGF0YSBtYXBzIGhhdmUgYmVlbiByZXNvbHZlZCBpbnRvIHVzZWRfbWFwcywgc29cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0yMDg1OT1zdGF0aWMgaW50IGJwZl9wcm9nX3ZlcmlmeV9zaWduYXR1cmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDk3NS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjA5NzY6aW50IGJwZl9jaGVjayhzdHJ1Y3QgYnBmX3Byb2cgKipwcm9nLCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIsXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwOTc3LVxcdCAgICAgIHN0cnVjdCBicGZfbG9nX2F0dHIgKmF0dHJfbG9nKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwOTkwLVxcdC8qICdzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudicgY2FuIGJlIGdsb2JhbCwgYnV0IHNpbmNlIGl0J3Mgbm90IHNtYWxsLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMDk5MTpcXHQgKiBhbGxvY2F0ZS9mcmVlIGl0IGV2ZXJ5IHRpbWUgYnBmX2NoZWNrKCkgaXMgY2FsbGVkXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwOTkyLVxcdCAqL1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIxMTAxLVxcdC8qIFZhbGlkYXRlIEJURiBhZ2FpbnN0IHRoZSBjb21wbGV0ZSBzdWJwcm9ncmFtIGxheW91dCBhbmQgYXBwbHkgQ08tUkUuICovXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjIxMTAyOlxcdHJldCA9IGJwZl9jaGVja19idGZfaW5mbyhlbnYsIGF0dHIsIHVhdHRyKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjExMDMtXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjExMjEtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjIxMTIyOlxcdHJldCA9IGJwZl9jaGVja19jZmcoZW52KTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjExMjMtXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDExOjE4OjQ5LjQzMjI2MjQ2OVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTI2MjY5MzQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBCUEYgVmVyaWZpZXIgRW50cnkgUG9pbnQqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgQlBGIHZlcmlmaWVyIHN0dWZmLiBJIHNlZSB0aGF0IGBicGZfY2hlY2tgIGlzIGNhbGxlZCBmcm9tIGBicGZfcHJvZ19sb2FkYCBpbiBga2VybmVsL2JwZi9zeXNjYWxsLmNgLiBUaGlzIHN0cm9uZ2x5IHN1Z2dlc3RzIHRoYXQgYGJwZl9jaGVja2AgaXMgdGhlIHByaW1hcnkgZW50cnkgcG9pbnQgZm9yIHRoZSB2ZXJpZmllciwgd2hpY2ggbWFrZXMgc2Vuc2UuIEknbSB3b25kZXJpbmcsIHRob3VnaCwgaXMgdGhlcmUgKmFub3RoZXIqIGZ1bmN0aW9uIEkgc2hvdWxkIGJlIGNvbnNpZGVyaW5nPyBgYnBmX3Byb2dfbG9hZGAgaXRzZWxmIGlzIHN0YXRpYywgc28gSSBjYW4gZGlzbWlzcyB0aGF0LiBUaGUgcmVhbCBzeXNjYWxsIGVudHJ5IHBvaW50IGlzIGBzeXNfYnBmYC4gR2l2ZW4gdGhlIGluc3RydWN0aW9ucywgYGJwZl9jaGVja2Agc2VlbXMgbGlrZSB0aGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIGZvY3VzIOKAkyBpdOKAmXMgKnRoZSogdmVyaWZpZXIncyBnYXRld2F5LlxuXG5CdXQgdGhlbiwgSSBwYXVzZS4gYGJwZl9jaGVja2AgaXMgYSBwcmV0dHkgZ2VuZXJpYyBuYW1lLiBUaGUgaW5zdHJ1Y3Rpb25zIGVtcGhhc2l6ZSBhdm9pZGluZyBcImdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zXCIgdG8gcHJldmVudCB0ZXN0IGRpc3RyaWJ1dGlvbiBza2V3aW5nLiBUaGV5IHN1Z2dlc3QgZmF2b3Jpbmcgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzIG92ZXIgaW50ZXJuYWwsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zLiBUaGlzIGdpdmVzIG1lIHBhdXNlLiBJcyBgYnBmX2NoZWNrYCAqdG9vKiBnZW5lcmljP1xuXG5JIHRoaW5rIEkndmUgY29udmluY2VkIG15c2VsZi4gSXQncyB0aGUgdmVyaWZpZXIgZW50cnkgcG9pbnQsIHBlcmlvZC4gSXQncyBub3QgYSBob3QtcGF0aCBmdW5jdGlvbiwgc2luY2UgaXQncyBvbmx5IGNhbGxlZCBkdXJpbmcgcHJvZ3JhbSBsb2FkLiBTbywgaXQncyBhY3R1YWxseSAqaWRlYWwqIGZyb20gdGhlIHBlcnNwZWN0aXZlIG9mIGZvY3VzaW5nIG9uIGEgd2VsbC1kZWZpbmVkIHBvaW50IG9mIGVudHJ5LlxuXG5Ob3csIGxldCdzIHN3aXRjaCBnZWFycyBhIGJpdC4gVGhlIHRlc3QgSSdtIHdvcmtpbmcgd2l0aCB1dGlsaXplcyB0aGUgYGFyZW5hYCBmZWF0dXJlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgYGFyZW5hYCBmZWF0dXJlIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cy4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBjb25maWdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTg3NSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQxMToxODo1NC41NTg1MzQ1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjIyNzQwNywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXJlbmFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQxMToxODo1NC42MDQ3NzI4OTdaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjc4Njc3MTQ1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgaXQ6XG5cbioqRGlnZ2luZyBpbnRvIE1lbW9yeSBBbGxvY2F0aW9uIGZvciBCUEYqKlxuXG5Pa2F5LCBzbyB3ZSd2ZSBnb3QgYSBCUEYtcmVsYXRlZCBtZW1vcnkgaXNzdWUsIGFuZCBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBpdCdzIHN0ZW1taW5nIGZyb20uIE15IGd1dCBmZWVsaW5nLCBiYXNlZCBvbiBwcmV2aW91cyBleHBlcmllbmNlcywgc2F5cyB0aGUgYXJlbmEgYWxsb2NhdG9yIGlzIGEgcHJpbWUgc3VzcGVjdC4gTGV0J3Mgc3RhcnQgYnkgemVyb2luZyBpbiBvbiBga2VybmVsL2JwZi9hcmVuYS5jYCBzcGVjaWZpY2FsbHkuIFRoYXQgZmlsZSdzIHRoZSBoZWFydCBvZiBCUEYncyBtZW1vcnkgbWFuYWdlbWVudC4gSSBzdXNwZWN0IHRoZSBpc3N1ZSBjb3VsZCBiZSByZWxhdGVkIHRvIGFsbG9jYXRpb24gc2l6ZXMsIGZyYWdtZW50YXRpb24sIG9yIHBlcmhhcHMgc29tZSBzdWJ0bGUgcmFjZSBjb25kaXRpb25zIHdpdGggY29uY3VycmVudCBhY2Nlc3MuIEFsdGVybmF0aXZlbHksIHRoZSBpc3N1ZSBjb3VsZCBiZSB3aXRoIHNpbWlsYXIgZmlsZXMgaGFuZGxpbmcgdGhlIHNhbWUgb3BlcmF0aW9ucywgSSB3aWxsIG5lZWQgdG8gZXhwYW5kIHRoZSBzZWFyY2ggaWYgSSBjb21lIHVwIGVtcHR5LiBJJ2xsIHN0YXJ0IGJ5IHJlYWRpbmcgdGhlIGNvZGUsIGZvY3VzaW5nIG9uIHRoZSBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24gcGF0aHMsIGFuZCBzZWUgaWYgYW55dGhpbmcganVtcHMgb3V0IGltbWVkaWF0ZWx5LiBJZiBub3QsIEknbGwgcHJvYmFibHkgbmVlZCB0byBicmVhayBvdXQgc29tZSBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHN0YXJ0IHRyYWNpbmcgbWVtb3J5IG9wZXJhdGlvbnMuIFRoaXMgc2hvdWxkIHBvaW50IG1lIGluIHRoZSByaWdodCBkaXJlY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNTI3LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMTE6MTg6NTcuMzkxNTQ3NTQxWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTQwNDE5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhcmVuYVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDExMjEgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbmtlcm5lbC9icGYvTWFrZWZpbGU9MTk9aWZlcSAoJChDT05GSUdfTU1VKSQoQ09ORklHXzY0QklUKSx5eSlcXG5rZXJuZWwvYnBmL01ha2VmaWxlOjIwOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gYXJlbmEubyByYW5nZV90cmVlLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlLTIxLWVuZGlmXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTYtLypcXG5rZXJuZWwvYnBmL2FyZW5hLmM6MTc6ICogYnBmX2FyZW5hIGlzIGEgc3BhcnNlbHkgcG9wdWxhdGVkIHNoYXJlZCBtZW1vcnkgcmVnaW9uIGJldHdlZW4gYnBmIHByb2dyYW0gYW5kXFxua2VybmVsL2JwZi9hcmVuYS5jLTE4LSAqIHVzZXIgc3BhY2UgcHJvY2Vzcy5cXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy0yMi0gKiBrZXJuX3ZtX3N0YXJ0IGZmZmZjOTAwMDFlNjkwMDAgLy8gcGlja2VkIGJ5IGdldF92bV9hcmVhKClcXG5rZXJuZWwvYnBmL2FyZW5hLmM6MjM6ICogRm9yIHVzZXIgc3BhY2UgYWxsIHBvaW50ZXJzIHdpdGhpbiB0aGUgYXJlbmEgYXJlIG5vcm1hbCA4LWJ5dGUgYWRkcmVzc2VzLlxcbmtlcm5lbC9icGYvYXJlbmEuYy0yNC0gKiBJbiB0aGlzIGV4YW1wbGUgN2Y3ZDI2MjAwMDAwIGlzIHRoZSBhZGRyZXNzIG9mIHRoZSBmaXJzdCBwYWdlIChwZ29mZj0wKS5cXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy0zMC0gKlxcbmtlcm5lbC9icGYvYXJlbmEuYzozMTogKiBCUEYgSklUcyBnZW5lcmF0ZSB0aGUgZm9sbG93aW5nIGNvZGUgdG8gYWNjZXNzIGFyZW5hOlxcbmtlcm5lbC9icGYvYXJlbmEuYy0zMi0gKiAgIG1vdiBlYXgsIGVheCAgLy8gZWF4IGhhcyBsb3dlciAzMi1iaXQgb2YgdXNlciBwb2ludGVyXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtMzktICogaW50byBrZXJuZWwgYW5kIHVzZXIgdm1hLlxcbmtlcm5lbC9icGYvYXJlbmEuYzo0MDogKiBicGYgcHJvZ3JhbSBjYW4gYWxsb2NhdGUgYSBwYWdlIHZpYSBicGZfYXJlbmFfYWxsb2NfcGFnZXMoKSBrZnVuY1xcbmtlcm5lbC9icGYvYXJlbmEuYy00MS0gKiB3aGljaCB3aWxsIGluc2VydCBpdCBpbnRvIGtlcm5lbCB2bV9hcmVhLlxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTQ4LVxcbmtlcm5lbC9icGYvYXJlbmEuYzo0OTpzdGF0aWMgdm9pZCBhcmVuYV9mcmVlX3BhZ2VzKHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hLCBsb25nIHVhZGRyLCBsb25nIHBhZ2VfY250LCBib29sIHNsZWVwYWJsZSk7XFxua2VybmVsL2JwZi9hcmVuYS5jLTUwLVxcbmtlcm5lbC9icGYvYXJlbmEuYzo1MTpzdHJ1Y3QgYnBmX2FyZW5hIHtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNTItXFx0c3RydWN0IGJwZl9tYXAgbWFwO1xcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTU5LVxcdHJxc3BpbmxvY2tfdCBzcGlubG9jaztcXG5rZXJuZWwvYnBmL2FyZW5hLmM6NjA6XFx0LyogbnVtYmVyIG9mIHBhZ2VzIGN1cnJlbnRseSBwb3B1bGF0ZWQgaW4gdGhlIGFyZW5hICovXFxua2VybmVsL2JwZi9hcmVuYS5jLTYxLVxcdHU2NCBucl9wYWdlcztcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy03MS1cXG5rZXJuZWwvYnBmL2FyZW5hLmM6NzI6c3RhdGljIHZvaWQgYXJlbmFfZnJlZV93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmM6NzM6c3RhdGljIHZvaWQgYXJlbmFfZnJlZV9pcnEoc3RydWN0IGlycV93b3JrICppdyk7XFxua2VybmVsL2JwZi9hcmVuYS5jLTc0LVxcbmtlcm5lbC9icGYvYXJlbmEuYzo3NTpzdHJ1Y3QgYXJlbmFfZnJlZV9zcGFuIHtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzYtXFx0c3RydWN0IGxsaXN0X25vZGUgbm9kZTtcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy04MC1cXG5rZXJuZWwvYnBmL2FyZW5hLmM6ODE6dTY0IGJwZl9hcmVuYV9nZXRfa2Vybl92bV9zdGFydChzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSlcXG5rZXJuZWwvYnBmL2FyZW5hLmMtODIte1xcbmtlcm5lbC9icGYvYXJlbmEuYzo4MzpcXHRyZXR1cm4gYXJlbmEgPyAodTY0KSAobG9uZykgYXJlbmEtXFx1MDAzZWtlcm5fdm0tXFx1MDAzZWFkZHIgKyBHVUFSRF9TWiAvIDIgOiAwO1xcbmtlcm5lbC9icGYvYXJlbmEuYy04NC19XFxua2VybmVsL2JwZi9hcmVuYS5jLTg1LVxcbmtlcm5lbC9icGYvYXJlbmEuYzo4Njp1NjQgYnBmX2FyZW5hX2dldF91c2VyX3ZtX3N0YXJ0KHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hKVxcbmtlcm5lbC9icGYvYXJlbmEuYy04Ny17XFxua2VybmVsL2JwZi9hcmVuYS5jOjg4OlxcdHJldHVybiBhcmVuYSA/IGFyZW5hLVxcdTAwM2V1c2VyX3ZtX3N0YXJ0IDogMDtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtODktfVxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTkxLS8qKlxcbmtlcm5lbC9icGYvYXJlbmEuYzo5MjogKiBicGZfYXJlbmFfbWFwX2tlcm5fdm1fc3RhcnQgLSBrZXJuX3ZtX3N0YXJ0IGxvb2t1cCBieSBzdHJ1Y3QgYnBmX21hcCAqXFxua2VybmVsL2JwZi9hcmVuYS5jLTkzLSAqIEBtYXA6IGEgQlBGX01BUF9UWVBFX0FSRU5BIG1hcFxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTk2LSAqL1xcbmtlcm5lbC9icGYvYXJlbmEuYzo5Nzp1NjQgYnBmX2FyZW5hX21hcF9rZXJuX3ZtX3N0YXJ0KHN0cnVjdCBicGZfbWFwICptYXApXFxua2VybmVsL2JwZi9hcmVuYS5jLTk4LXtcXG5rZXJuZWwvYnBmL2FyZW5hLmM6OTk6XFx0cmV0dXJuIGJwZl9hcmVuYV9nZXRfa2Vybl92bV9zdGFydChjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX2FyZW5hLCBtYXApKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTAwLX1cXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy0xMDItLyoqXFxua2VybmVsL2JwZi9hcmVuYS5jOjEwMzogKiBicGZfcHJvZ19hcmVuYSAtIHJldHVybiB0aGUgYnBmX21hcCBvZiB0aGUgYXJlbmEgcmVmZXJlbmNlZCBieSBAcHJvZ1xcbmtlcm5lbC9icGYvYXJlbmEuYy0xMDQtICogQHByb2c6IGEgbG9hZGVkIEJQRiBwcm9ncmFtXFxua2VybmVsL2JwZi9hcmVuYS5jLTEwNS0gKlxcbmtlcm5lbC9icGYvYXJlbmEuYzoxMDY6ICogVGhlIHZlcmlmaWVyIGVuZm9yY2VzIGF0IG1vc3Qgb25lIGFyZW5hIHBlciBwcm9ncmFtIGFuZCBzdG9yZXMgaXQgaW5cXG5rZXJuZWwvYnBmL2FyZW5hLmM6MTA3OiAqIHByb2ctXFx1MDAzZWF1eC1cXHUwMDNlYXJlbmEuIFJldHVybiB0aGF0IGFyZW5hJ3MgdW5kZXJseWluZyBicGZfbWFwLCBvciBOVUxMIGlmXFxua2VybmVsL2JwZi9hcmVuYS5jOjEwODogKiBAcHJvZyBkb2VzIG5vdCByZWZlcmVuY2UgYW4gYXJlbmEuXFxua2VybmVsL2JwZi9hcmVuYS5jLTEwOS0gKi9cXG5rZXJuZWwvYnBmL2FyZW5hLmM6MTEwOnN0cnVjdCBicGZfbWFwICpicGZfcHJvZ19hcmVuYShzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxua2VybmVsL2JwZi9hcmVuYS5jLTExMS17XFxua2VybmVsL2JwZi9hcmVuYS5jOjExMjpcXHRzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSA9IHByb2ctXFx1MDAzZWF1eC1cXHUwMDNlYXJlbmE7XFxua2VybmVsL2JwZi9hcmVuYS5jLTExMy1cXG5rZXJuZWwvYnBmL2FyZW5hLmM6MTE0OlxcdHJldHVybiBhcmVuYSA/IFxcdTAwMjZhcmVuYS1cXHUwMDNlbWFwIDogTlVMTDtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTE1LX1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTE2LVxcbmtlcm5lbC9icGYvYXJlbmEuYzoxMTc6c3RhdGljIGxvbmcgYXJlbmFfbWFwX3BlZWtfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICp2YWx1ZSlcXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTE4LXtcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy0xMjEtXFxua2VybmVsL2JwZi9hcmVuYS5jOjEyMjpzdGF0aWMgbG9uZyBhcmVuYV9tYXBfcHVzaF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKnZhbHVlLCB1NjQgZmxhZ3MpXFxua2VybmVsL2JwZi9hcmVuYS5jLTEyMy17XFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTI2LVxcbmtlcm5lbC9icGYvYXJlbmEuYzoxMjc6c3RhdGljIGxvbmcgYXJlbmFfbWFwX3BvcF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKnZhbHVlKVxcbmtlcm5lbC9icGYvYXJlbmEuYy0xMjgte1xcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTEzMS1cXG5rZXJuZWwvYnBmL2FyZW5hLmM6MTMyOnN0YXRpYyBsb25nIGFyZW5hX21hcF9kZWxldGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICp2YWx1ZSlcXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTMzLXtcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy0xMzYtXFxua2VybmVsL2JwZi9hcmVuYS5jOjEzNzpzdGF0aWMgaW50IGFyZW5hX21hcF9nZXRfbmV4dF9rZXkoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICpuZXh0X2tleSlcXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTM4LXtcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy0xNDEtXFxua2VybmVsL2JwZi9hcmVuYS5jOjE0MjpzdGF0aWMgbG9uZyBjb21wdXRlX3Bnb2ZmKHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hLCBsb25nIHVhZGRyKVxcbmtlcm5lbC9icGYvYXJlbmEuYy0xNDMte1xcbmtlcm5lbC9icGYvYXJlbmEuYzoxNDQ6XFx0cmV0dXJuICh1MzIpKHVhZGRyIC0gKHUzMilhcmVuYS1cXHUwMDNldXNlcl92bV9zdGFydCkgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVDtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTQ1LX1cXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYz0xNDc9c3RydWN0IGFwcGx5X3JhbmdlX2RhdGEge1xcbmtlcm5lbC9icGYvYXJlbmEuYzoxNDg6XFx0c3RydWN0IGJwZl9hcmVuYSAqYXJlbmE7XFxua2VybmVsL2JwZi9hcmVuYS5jLTE0OS1cXHRzdHJ1Y3QgcGFnZSAqKnBhZ2VzO1xcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jPTE1Mz1zdHJ1Y3QgY2xlYXJfcmFuZ2VfZGF0YSB7XFxua2VybmVsL2JwZi9hcmVuYS5jOjE1NDpcXHRzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTU1LVxcdHN0cnVjdCBsbGlzdF9oZWFkICpmcmVlX3BhZ2VzO1xcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jPTE1OD1zdGF0aWMgaW50IGFwcGx5X3JhbmdlX3NldF9jYihwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGFkZHIsIHZvaWQgKmRhdGEpXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTg0LVxcdFxcdFxcdGNvbnRpbnVlO1xcbmtlcm5lbC9icGYvYXJlbmEuYzoxODU6XFx0XFx0aWYgKFdBUk5fT05fT05DRShwdGVfcGFnZShvbGQpICE9IGQtXFx1MDAzZWFyZW5hLVxcdTAwM2VzY3JhdGNoX3BhZ2UpKVxcbmtlcm5lbC9icGYvYXJlbmEuYy0xODYtXFx0XFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy0xOTItXFx0ICogV2l0aG91dCBwdGVwX3RyeV9zZXQoKSB0aGVyZSBpcyBubyBhdG9taWMgaW5zdGFsbGVyLCBidXQgc3VjaCBhcmNoZXNcXG5rZXJuZWwvYnBmL2FyZW5hLmM6MTkzOlxcdCAqIGFsc28gZG8gbm90IHdpcmUgdXAgYnBmX2FyZW5hX2hhbmRsZV9wYWdlX2ZhdWx0KCksIHNvIG5vIHNjcmF0Y2ggcGFnZVxcbmtlcm5lbC9icGYvYXJlbmEuYy0xOTQtXFx0ICogaXMgZXZlciBpbnN0YWxsZWQgYW5kIHRoZSBzbG90IGlzIGFsd2F5cyBub25lIGhlcmUuXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtMjAwLVxcdGQtXFx1MDAzZWkrKztcXG5rZXJuZWwvYnBmL2FyZW5hLmM6MjAxOlxcdFdSSVRFX09OQ0UoZC1cXHUwMDNlYXJlbmEtXFx1MDAzZW5yX3BhZ2VzLCBkLVxcdTAwM2VhcmVuYS1cXHUwMDNlbnJfcGFnZXMgKyAxKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtMjAyLVxcdHJldHVybiAwO1xcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jPTIxMD1zdGF0aWMgaW50IGFwcGx5X3JhbmdlX2NsZWFyX2NiKHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqZGF0YSlcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy0yMjgtXFx0LypcXG5rZXJuZWwvYnBmL2FyZW5hLmM6MjI5OlxcdCAqIFNraXAgdGhlIHBlci1hcmVuYSBzY3JhdGNoIHBhZ2UuIEEga2VybmVsIGZhdWx0IG9uIGFuIHVuYWxsb2NhdGVkIHVhZGRyXFxua2VybmVsL2JwZi9hcmVuYS5jOjIzMDpcXHQgKiBzY3JhdGNoZXMgaXRzIFBURS4gQSBsYXRlciBicGZfYXJlbmFfZnJlZV9wYWdlcygpIG92ZXIgdGhhdCByYW5nZSB3YWxrc1xcbmtlcm5lbC9icGYvYXJlbmEuYy0yMzEtXFx0ICogaGVyZS4gV2l0aG91dCB0aGUgc2tpcCwgc2NyYXRjaF9wYWdlIHdvdWxkIGJlIGZyZWVkLlxcbmtlcm5lbC9icGYvYXJlbmEuYy0yMzItXFx0ICovXFxua2VybmVsL2JwZi9hcmVuYS5jOjIzMzpcXHRpZiAocGFnZSA9PSBkLVxcdTAwM2VhcmVuYS1cXHUwMDNlc2NyYXRjaF9wYWdlKVxcbmtlcm5lbC9icGYvYXJlbmEuYy0yMzQtXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtMjM2LVxcdF9fbGxpc3RfYWRkKFxcdTAwMjZwYWdlLVxcdTAwM2VwY3BfbGxpc3QsIGQtXFx1MDAzZWZyZWVfcGFnZXMpO1xcbmtlcm5lbC9icGYvYXJlbmEuYzoyMzc6XFx0V1JJVEVfT05DRShkLVxcdTAwM2VhcmVuYS1cXHUwMDNlbnJfcGFnZXMsIGQtXFx1MDAzZWFyZW5hLVxcdTAwM2Vucl9wYWdlcyAtIDEpO1xcbmtlcm5lbC9icGYvYXJlbmEuYy0yMzgtXFx0cmV0dXJuIDA7XFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmM9MjQxPXN0YXRpYyBpbnQgYXBwbHlfcmFuZ2Vfc2V0X3NjcmF0Y2hfY2IocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBhZGRyLCB2b2lkICpkYXRhKVxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTI1OC1cXG5rZXJuZWwvYnBmL2FyZW5hLmM6MjU5OnN0YXRpYyBpbnQgcG9wdWxhdGVfcGd0YWJsZV9leGNlcHRfcHRlKHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hKVxcbmtlcm5lbC9icGYvYXJlbmEuYy0yNjAte1xcbmtlcm5lbC9icGYvYXJlbmEuYy0yNjEtXFx0LyogUG9wdWxhdGUgaW50ZXJtZWRpYXRlcyBmb3IgdGhlIHJlY292ZXJ5IHJhbmdlICg0IEdpQiArIHVwcGVyIGhhbGYtZ3VhcmQpLiAqL1xcbmtlcm5lbC9icGYvYXJlbmEuYzoyNjI6XFx0cmV0dXJuIGFwcGx5X3RvX3BhZ2VfcmFuZ2UoXFx1MDAyNmluaXRfbW0sIGJwZl9hcmVuYV9nZXRfa2Vybl92bV9zdGFydChhcmVuYSksXFxua2VybmVsL2JwZi9hcmVuYS5jLTI2My1cXHRcXHRcXHRcXHQgICBTWl80RyArIEdVQVJEX1NaIC8gMiwgYXBwbHlfcmFuZ2Vfc2V0X2NiLCBOVUxMKTtcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy0yNjUtXFxua2VybmVsL2JwZi9hcmVuYS5jOjI2NjpzdGF0aWMgc3RydWN0IGJwZl9tYXAgKmFyZW5hX21hcF9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0cilcXG5rZXJuZWwvYnBmL2FyZW5hLmMtMjY3LXtcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy0yNjktXFx0aW50IG51bWFfbm9kZSA9IGJwZl9tYXBfYXR0cl9udW1hX25vZGUoYXR0cik7XFxua2VybmVsL2JwZi9hcmVuYS5jOjI3MDpcXHRzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtMjcxLVxcdHU2NCB2bV9yYW5nZTtcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy0yNzMtXFxua2VybmVsL2JwZi9hcmVuYS5jOjI3NDpcXHRpZiAoIWJwZl9qaXRfc3VwcG9ydHNfYXJlbmEoKSlcXG5rZXJuZWwvYnBmL2FyZW5hLmMtMjc1LVxcdFxcdHJldHVybiBFUlJfUFRSKC1FT1BOT1RTVVBQKTtcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy0yOTktXFxua2VybmVsL2JwZi9hcmVuYS5jOjMwMDpcXHRhcmVuYSA9IGJwZl9tYXBfYXJlYV9hbGxvYyhzaXplb2YoKmFyZW5hKSwgbnVtYV9ub2RlKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmM6MzAxOlxcdGlmICghYXJlbmEpXFxua2VybmVsL2JwZi9hcmVuYS5jLTMwMi1cXHRcXHRnb3RvIGVycjtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtMzAzLVxcbmtlcm5lbC9icGYvYXJlbmEuYzozMDQ6XFx0YXJlbmEtXFx1MDAzZWtlcm5fdm0gPSBrZXJuX3ZtO1xcbmtlcm5lbC9icGYvYXJlbmEuYzozMDU6XFx0YXJlbmEtXFx1MDAzZXVzZXJfdm1fc3RhcnQgPSBhdHRyLVxcdTAwM2VtYXBfZXh0cmE7XFxua2VybmVsL2JwZi9hcmVuYS5jOjMwNjpcXHRpZiAoYXJlbmEtXFx1MDAzZXVzZXJfdm1fc3RhcnQpXFxua2VybmVsL2JwZi9hcmVuYS5jOjMwNzpcXHRcXHRhcmVuYS1cXHUwMDNldXNlcl92bV9lbmQgPSBhcmVuYS1cXHUwMDNldXNlcl92bV9zdGFydCArIHZtX3JhbmdlO1xcbmtlcm5lbC9icGYvYXJlbmEuYy0zMDgtXFxua2VybmVsL2JwZi9hcmVuYS5jOjMwOTpcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2YXJlbmEtXFx1MDAzZXZtYV9saXN0KTtcXG5rZXJuZWwvYnBmL2FyZW5hLmM6MzEwOlxcdGluaXRfbGxpc3RfaGVhZChcXHUwMDI2YXJlbmEtXFx1MDAzZWZyZWVfc3BhbnMpO1xcbmtlcm5lbC9icGYvYXJlbmEuYzozMTE6XFx0aW5pdF9pcnFfd29yayhcXHUwMDI2YXJlbmEtXFx1MDAzZWZyZWVfaXJxLCBhcmVuYV9mcmVlX2lycSk7XFxua2VybmVsL2JwZi9hcmVuYS5jOjMxMjpcXHRJTklUX1dPUksoXFx1MDAyNmFyZW5hLVxcdTAwM2VmcmVlX3dvcmssIGFyZW5hX2ZyZWVfd29ya2VyKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmM6MzEzOlxcdGJwZl9tYXBfaW5pdF9mcm9tX2F0dHIoXFx1MDAyNmFyZW5hLVxcdTAwM2VtYXAsIGF0dHIpO1xcbmtlcm5lbC9icGYvYXJlbmEuYy0zMTQtXFxua2VybmVsL2JwZi9hcmVuYS5jOjMxNTpcXHRlcnIgPSBicGZfbWFwX2FsbG9jX3BhZ2VzKFxcdTAwMjZhcmVuYS1cXHUwMDNlbWFwLCBOVU1BX05PX05PREUsIDEsIFxcdTAwMjZhcmVuYS1cXHUwMDNlc2NyYXRjaF9wYWdlKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtMzE2LVxcdGlmIChlcnIpXFxua2VybmVsL2JwZi9hcmVuYS5jOjMxNzpcXHRcXHRnb3RvIGVycl9mcmVlX2FyZW5hO1xcbmtlcm5lbC9icGYvYXJlbmEuYy0zMTgtXFxua2VybmVsL2JwZi9hcmVuYS5jOjMxOTpcXHRyYW5nZV90cmVlX2luaXQoXFx1MDAyNmFyZW5hLVxcdTAwM2VydCk7XFxua2VybmVsL2JwZi9hcmVuYS5jOjMyMDpcXHRlcnIgPSByYW5nZV90cmVlX3NldChcXHUwMDI2YXJlbmEtXFx1MDAzZXJ0LCAwLCBhdHRyLVxcdTAwM2VtYXhfZW50cmllcyk7XFxua2VybmVsL2JwZi9hcmVuYS5jLTMyMS1cXHRpZiAoZXJyKVxcbmtlcm5lbC9icGYvYXJlbmEuYy0zMjItXFx0XFx0Z290byBlcnJfZnJlZV9zY3JhdGNoO1xcbmtlcm5lbC9icGYvYXJlbmEuYzozMjM6XFx0bXV0ZXhfaW5pdChcXHUwMDI2YXJlbmEtXFx1MDAzZWxvY2spO1xcbmtlcm5lbC9icGYvYXJlbmEuYzozMjQ6XFx0bXV0ZXhfaW5pdChcXHUwMDI2YXJlbmEtXFx1MDAzZXphcF9tdXRleCk7XFxua2VybmVsL2JwZi9hcmVuYS5jOjMyNTpcXHRyYXdfcmVzX3NwaW5fbG9ja19pbml0KFxcdTAwMjZhcmVuYS1cXHUwMDNlc3BpbmxvY2spO1xcbmtlcm5lbC9icGYvYXJlbmEuYzozMjY6XFx0ZXJyID0gcG9wdWxhdGVfcGd0YWJsZV9leGNlcHRfcHRlKGFyZW5hKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtMzI3LVxcdGlmIChlcnIpXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtMzI5LVxcbmtlcm5lbC9icGYvYXJlbmEuYzozMzA6XFx0cmV0dXJuIFxcdTAwMjZhcmVuYS1cXHUwMDNlbWFwO1xcbmtlcm5lbC9icGYvYXJlbmEuYy0zMzEtXFxua2VybmVsL2JwZi9hcmVuYS5jLTMzMi1lcnJfZGVzdHJveV9ydDpcXG5rZXJuZWwvYnBmL2FyZW5hLmM6MzMzOlxcdHJhbmdlX3RyZWVfZGVzdHJveShcXHUwMDI2YXJlbmEtXFx1MDAzZXJ0KTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtMzM0LWVycl9mcmVlX3NjcmF0Y2g6XFxua2VybmVsL2JwZi9hcmVuYS5jOjMzNTpcXHRfX2ZyZWVfcGFnZShhcmVuYS1cXHUwMDNlc2NyYXRjaF9wYWdlKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmM6MzM2OmVycl9mcmVlX2FyZW5hOlxcbmtlcm5lbC9icGYvYXJlbmEuYzozMzc6XFx0YnBmX21hcF9hcmVhX2ZyZWUoYXJlbmEpO1xcbmtlcm5lbC9icGYvYXJlbmEuYy0zMzgtZXJyOlxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jPTM0Mz1zdGF0aWMgaW50IGV4aXN0aW5nX3BhZ2VfY2IocHRlX3QgKnB0ZXAsIHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqZGF0YSlcXG5rZXJuZWwvYnBmL2FyZW5hLmMtMzQ0LXtcXG5rZXJuZWwvYnBmL2FyZW5hLmM6MzQ1OlxcdHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hID0gZGF0YTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtMzQ2LVxcdHN0cnVjdCBwYWdlICpwYWdlO1xcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTM1Ni1cXHQgKi9cXG5rZXJuZWwvYnBmL2FyZW5hLmM6MzU3OlxcdGlmIChwYWdlID09IGFyZW5hLVxcdTAwM2VzY3JhdGNoX3BhZ2UpXFxua2VybmVsL2JwZi9hcmVuYS5jLTM1OC1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy0zNjAtXFx0ICogV2UgZG8gbm90IHVwZGF0ZSBwdGUgaGVyZTpcXG5rZXJuZWwvYnBmL2FyZW5hLmM6MzYxOlxcdCAqIDEuIE5vYm9keSBzaG91bGQgYmUgYWNjZXNzaW5nIGJwZl9hcmVuYSdzIHJhbmdlIG91dHNpZGUgb2YgYSBrZXJuZWwgYnVnXFxua2VybmVsL2JwZi9hcmVuYS5jLTM2Mi1cXHQgKiAyLiBUTEIgZmx1c2hpbmcgaXMgYmF0Y2hlZCBvciBkZWZlcnJlZC4gRXZlbiBpZiB3ZSBjbGVhciBwdGUsXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtMzY5LVxcbmtlcm5lbC9icGYvYXJlbmEuYzozNzA6c3RhdGljIHZvaWQgYXJlbmFfbWFwX2ZyZWUoc3RydWN0IGJwZl9tYXAgKm1hcClcXG5rZXJuZWwvYnBmL2FyZW5hLmMtMzcxLXtcXG5rZXJuZWwvYnBmL2FyZW5hLmM6MzcyOlxcdHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9hcmVuYSwgbWFwKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtMzczLVxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTM3Ni1cXHQgKiBtbWFwKCkgaG9sZHMgdm1fZmlsZSB3aGljaCBob2xkcyBicGZfbWFwIHJlZmNudC5cXG5rZXJuZWwvYnBmL2FyZW5hLmM6Mzc3OlxcdCAqIG11bm1hcCgpIG11c3QgaGF2ZSBoYXBwZW5lZCBvbiB2bWEgZm9sbG93ZWQgYnkgYXJlbmFfdm1fY2xvc2UoKVxcbmtlcm5lbC9icGYvYXJlbmEuYzozNzg6XFx0ICogd2hpY2ggd291bGQgY2xlYXIgYXJlbmEtXFx1MDAzZXZtYV9saXN0Llxcbmtlcm5lbC9icGYvYXJlbmEuYy0zNzktXFx0ICovXFxua2VybmVsL2JwZi9hcmVuYS5jOjM4MDpcXHRpZiAoV0FSTl9PTl9PTkNFKCFsaXN0X2VtcHR5KFxcdTAwMjZhcmVuYS1cXHUwMDNldm1hX2xpc3QpKSlcXG5rZXJuZWwvYnBmL2FyZW5hLmMtMzgxLVxcdFxcdHJldHVybjtcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy0zODMtXFx0LyogRW5zdXJlIG5vIHBlbmRpbmcgZGVmZXJyZWQgZnJlZXMgKi9cXG5rZXJuZWwvYnBmL2FyZW5hLmM6Mzg0OlxcdGlycV93b3JrX3N5bmMoXFx1MDAyNmFyZW5hLVxcdTAwM2VmcmVlX2lycSk7XFxua2VybmVsL2JwZi9hcmVuYS5jOjM4NTpcXHRmbHVzaF93b3JrKFxcdTAwMjZhcmVuYS1cXHUwMDNlZnJlZV93b3JrKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtMzg2LVxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTM5Mi1cXHQgKi9cXG5rZXJuZWwvYnBmL2FyZW5hLmM6MzkzOlxcdGFwcGx5X3RvX2V4aXN0aW5nX3BhZ2VfcmFuZ2UoXFx1MDAyNmluaXRfbW0sIGJwZl9hcmVuYV9nZXRfa2Vybl92bV9zdGFydChhcmVuYSksXFxua2VybmVsL2JwZi9hcmVuYS5jOjM5NDpcXHRcXHRcXHRcXHQgICAgIFNaXzRHICsgR1VBUkRfU1ogLyAyLCBleGlzdGluZ19wYWdlX2NiLCBhcmVuYSk7XFxua2VybmVsL2JwZi9hcmVuYS5jOjM5NTpcXHRmcmVlX3ZtX2FyZWEoYXJlbmEtXFx1MDAzZWtlcm5fdm0pO1xcbmtlcm5lbC9icGYvYXJlbmEuYzozOTY6XFx0cmFuZ2VfdHJlZV9kZXN0cm95KFxcdTAwMjZhcmVuYS1cXHUwMDNlcnQpO1xcbmtlcm5lbC9icGYvYXJlbmEuYzozOTc6XFx0X19mcmVlX3BhZ2UoYXJlbmEtXFx1MDAzZXNjcmF0Y2hfcGFnZSk7XFxua2VybmVsL2JwZi9hcmVuYS5jOjM5ODpcXHRicGZfbWFwX2FyZWFfZnJlZShhcmVuYSk7XFxua2VybmVsL2JwZi9hcmVuYS5jLTM5OS19XFxua2VybmVsL2JwZi9hcmVuYS5jLTQwMC1cXG5rZXJuZWwvYnBmL2FyZW5hLmM6NDAxOnN0YXRpYyB2b2lkICphcmVuYV9tYXBfbG9va3VwX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxcbmtlcm5lbC9icGYvYXJlbmEuYy00MDIte1xcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTQwNS1cXG5rZXJuZWwvYnBmL2FyZW5hLmM6NDA2OnN0YXRpYyBsb25nIGFyZW5hX21hcF91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksXFxua2VybmVsL2JwZi9hcmVuYS5jLTQwNy1cXHRcXHRcXHRcXHQgIHZvaWQgKnZhbHVlLCB1NjQgZmxhZ3MpXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtNDExLVxcbmtlcm5lbC9icGYvYXJlbmEuYzo0MTI6c3RhdGljIGludCBhcmVuYV9tYXBfY2hlY2tfYnRmKHN0cnVjdCBicGZfbWFwICptYXAsIGNvbnN0IHN0cnVjdCBidGYgKmJ0ZixcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNDEzLVxcdFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKmtleV90eXBlLCBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnZhbHVlX3R5cGUpXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtNDE3LVxcbmtlcm5lbC9icGYvYXJlbmEuYzo0MTg6c3RhdGljIHU2NCBhcmVuYV9tYXBfbWVtX3VzYWdlKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXApXFxua2VybmVsL2JwZi9hcmVuYS5jLTQxOS17XFxua2VybmVsL2JwZi9hcmVuYS5jOjQyMDpcXHRzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfYXJlbmEsIG1hcCk7XFxua2VybmVsL2JwZi9hcmVuYS5jLTQyMS1cXG5rZXJuZWwvYnBmL2FyZW5hLmM6NDIyOlxcdHJldHVybiAodTY0KVJFQURfT05DRShhcmVuYS1cXHUwMDNlbnJfcGFnZXMpIFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQ7XFxua2VybmVsL2JwZi9hcmVuYS5jLTQyMy19XFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmM9NDI1PXN0cnVjdCB2bWFfbGlzdCB7XFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtNDMxLVxcbmtlcm5lbC9icGYvYXJlbmEuYzo0MzI6c3RhdGljIGludCByZW1lbWJlcl92bWEoc3RydWN0IGJwZl9hcmVuYSAqYXJlbmEsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbmtlcm5lbC9icGYvYXJlbmEuYy00MzMte1xcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTQ0Mi1cXHR2bWwtXFx1MDAzZXphcF9nZW4gPSAwO1xcbmtlcm5lbC9icGYvYXJlbmEuYzo0NDM6XFx0bGlzdF9hZGQoXFx1MDAyNnZtbC1cXHUwMDNlaGVhZCwgXFx1MDAyNmFyZW5hLVxcdTAwM2V2bWFfbGlzdCk7XFxua2VybmVsL2JwZi9hcmVuYS5jLTQ0NC1cXHRyZXR1cm4gMDtcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy00NDYtXFxua2VybmVsL2JwZi9hcmVuYS5jOjQ0NzpzdGF0aWMgdm9pZCBhcmVuYV92bV9vcGVuKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbmtlcm5lbC9icGYvYXJlbmEuYy00NDgte1xcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTQ1My1cXG5rZXJuZWwvYnBmL2FyZW5hLmM6NDU0OnN0YXRpYyBpbnQgYXJlbmFfdm1fbWF5X3NwbGl0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpXFxua2VybmVsL2JwZi9hcmVuYS5jLTQ1NS17XFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtNDU4LVxcbmtlcm5lbC9icGYvYXJlbmEuYzo0NTk6c3RhdGljIGludCBhcmVuYV92bV9tcmVtYXAoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxua2VybmVsL2JwZi9hcmVuYS5jLTQ2MC17XFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtNDYzLVxcbmtlcm5lbC9icGYvYXJlbmEuYzo0NjQ6c3RhdGljIHZvaWQgYXJlbmFfdm1fY2xvc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxua2VybmVsL2JwZi9hcmVuYS5jLTQ2NS17XFxua2VybmVsL2JwZi9hcmVuYS5jLTQ2Ni1cXHRzdHJ1Y3QgYnBmX21hcCAqbWFwID0gdm1hLVxcdTAwM2V2bV9maWxlLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxua2VybmVsL2JwZi9hcmVuYS5jOjQ2NzpcXHRzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfYXJlbmEsIG1hcCk7XFxua2VybmVsL2JwZi9hcmVuYS5jLTQ2OC1cXHRzdHJ1Y3Qgdm1hX2xpc3QgKnZtbCA9IHZtYS1cXHUwMDNldm1fcHJpdmF0ZV9kYXRhO1xcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTQ3MS1cXHRcXHRyZXR1cm47XFxua2VybmVsL2JwZi9hcmVuYS5jOjQ3MjpcXHRndWFyZChtdXRleCkoXFx1MDAyNmFyZW5hLVxcdTAwM2Vsb2NrKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNDczLVxcdC8qIHVwZGF0ZSBsaW5rIGxpc3QgdW5kZXIgbG9jayAqL1xcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTQ3OC1cXG5rZXJuZWwvYnBmL2FyZW5hLmM6NDc5OnN0YXRpYyB2bV9mYXVsdF90IGFyZW5hX3ZtX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbmtlcm5lbC9icGYvYXJlbmEuYy00ODAte1xcbmtlcm5lbC9icGYvYXJlbmEuYy00ODEtXFx0c3RydWN0IGJwZl9tYXAgKm1hcCA9IHZtZi1cXHUwMDNldm1hLVxcdTAwM2V2bV9maWxlLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxua2VybmVsL2JwZi9hcmVuYS5jOjQ4MjpcXHRzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfYXJlbmEsIG1hcCk7XFxua2VybmVsL2JwZi9hcmVuYS5jLTQ4My1cXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbmV3X21lbWNnLCAqb2xkX21lbWNnO1xcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTQ4OC1cXG5rZXJuZWwvYnBmL2FyZW5hLmM6NDg5OlxcdGtiYXNlID0gYnBmX2FyZW5hX2dldF9rZXJuX3ZtX3N0YXJ0KGFyZW5hKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNDkwLVxcdGthZGRyID0ga2Jhc2UgKyAodTMyKSh2bWYtXFx1MDAzZWFkZHJlc3MpO1xcbmtlcm5lbC9icGYvYXJlbmEuYy00OTEtXFxua2VybmVsL2JwZi9hcmVuYS5jOjQ5MjpcXHRpZiAocmF3X3Jlc19zcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2YXJlbmEtXFx1MDAzZXNwaW5sb2NrLCBmbGFncykpXFxua2VybmVsL2JwZi9hcmVuYS5jLTQ5My1cXHRcXHQvKlxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTUwMS1cXHRpZiAocGFnZSkge1xcbmtlcm5lbC9icGYvYXJlbmEuYzo1MDI6XFx0XFx0aWYgKHBhZ2UgPT0gYXJlbmEtXFx1MDAzZXNjcmF0Y2hfcGFnZSlcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNTAzLVxcdFxcdFxcdC8qIEJQRiB0cmlnZ2VyZWQgc2NyYXRjaCBoZXJlOyBkb24ndCBsYXp5LWFsbG9jIG92ZXIgaXQgKi9cXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy01MDgtXFxua2VybmVsL2JwZi9hcmVuYS5jOjUwOTpcXHRicGZfbWFwX21lbWNnX2VudGVyKFxcdTAwMjZhcmVuYS1cXHUwMDNlbWFwLCBcXHUwMDI2b2xkX21lbWNnLCBcXHUwMDI2bmV3X21lbWNnKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNTEwLVxcbmtlcm5lbC9icGYvYXJlbmEuYzo1MTE6XFx0aWYgKGFyZW5hLVxcdTAwM2VtYXAubWFwX2ZsYWdzIFxcdTAwMjYgQlBGX0ZfU0VHVl9PTl9GQVVMVClcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNTEyLVxcdFxcdC8qIFVzZXIgc3BhY2UgcmVxdWVzdGVkIHRvIHNlZ2ZhdWx0IHdoZW4gcGFnZSBpcyBub3QgYWxsb2NhdGVkIGJ5IGJwZiBwcm9nICovXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtNTE0LVxcbmtlcm5lbC9icGYvYXJlbmEuYzo1MTU6XFx0cmV0ID0gcmFuZ2VfdHJlZV9jbGVhcihcXHUwMDI2YXJlbmEtXFx1MDAzZXJ0LCB2bWYtXFx1MDAzZXBnb2ZmLCAxKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNTE2LVxcdGlmIChyZXQpXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtNTE4LVxcbmtlcm5lbC9icGYvYXJlbmEuYzo1MTk6XFx0c3RydWN0IGFwcGx5X3JhbmdlX2RhdGEgZGF0YSA9IHsgLmFyZW5hID0gYXJlbmEsIC5wYWdlcyA9IFxcdTAwMjZwYWdlLCAuaSA9IDAgfTtcXG5rZXJuZWwvYnBmL2FyZW5hLmM6NTIwOlxcdC8qIEFjY291bnQgaW50byBtZW1jZyBvZiB0aGUgcHJvY2VzcyB0aGF0IGNyZWF0ZWQgYnBmX2FyZW5hICovXFxua2VybmVsL2JwZi9hcmVuYS5jLTUyMS1cXHRyZXQgPSBicGZfbWFwX2FsbG9jX3BhZ2VzKG1hcCwgTlVNQV9OT19OT0RFLCAxLCBcXHUwMDI2cGFnZSk7XFxua2VybmVsL2JwZi9hcmVuYS5jLTUyMi1cXHRpZiAocmV0KSB7XFxua2VybmVsL2JwZi9hcmVuYS5jOjUyMzpcXHRcXHRyYW5nZV90cmVlX3NldChcXHUwMDI2YXJlbmEtXFx1MDAzZXJ0LCB2bWYtXFx1MDAzZXBnb2ZmLCAxKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNTI0LVxcdFxcdGdvdG8gb3V0X3NpZ3NlZ3ZfbWVtY2c7XFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtNTI4LVxcdGlmIChyZXQpIHtcXG5rZXJuZWwvYnBmL2FyZW5hLmM6NTI5OlxcdFxcdHJhbmdlX3RyZWVfc2V0KFxcdTAwMjZhcmVuYS1cXHUwMDNlcnQsIHZtZi1cXHUwMDNlcGdvZmYsIDEpO1xcbmtlcm5lbC9icGYvYXJlbmEuYy01MzAtXFx0XFx0ZnJlZV9wYWdlc19ub2xvY2socGFnZSwgMCk7XFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtNTM2LVxcdHBhZ2VfcmVmX2FkZChwYWdlLCAxKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmM6NTM3OlxcdHJhd19yZXNfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2YXJlbmEtXFx1MDAzZXNwaW5sb2NrLCBmbGFncyk7XFxua2VybmVsL2JwZi9hcmVuYS5jLTUzOC1cXHR2bWYtXFx1MDAzZXBhZ2UgPSBwYWdlO1xcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTU0Mi1vdXRfc2lnc2VndjpcXG5rZXJuZWwvYnBmL2FyZW5hLmM6NTQzOlxcdHJhd19yZXNfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2YXJlbmEtXFx1MDAzZXNwaW5sb2NrLCBmbGFncyk7XFxua2VybmVsL2JwZi9hcmVuYS5jLTU0NC1cXHRyZXR1cm4gVk1fRkFVTFRfU0lHU0VHVjtcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy01NDYtXFxua2VybmVsL2JwZi9hcmVuYS5jOjU0NzpzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGFyZW5hX3ZtX29wcyA9IHtcXG5rZXJuZWwvYnBmL2FyZW5hLmM6NTQ4OlxcdC5vcGVuXFx0XFx0PSBhcmVuYV92bV9vcGVuLFxcbmtlcm5lbC9icGYvYXJlbmEuYzo1NDk6XFx0Lm1heV9zcGxpdFxcdD0gYXJlbmFfdm1fbWF5X3NwbGl0LFxcbmtlcm5lbC9icGYvYXJlbmEuYzo1NTA6XFx0Lm1yZW1hcFxcdFxcdD0gYXJlbmFfdm1fbXJlbWFwLFxcbmtlcm5lbC9icGYvYXJlbmEuYzo1NTE6XFx0LmNsb3NlXFx0XFx0PSBhcmVuYV92bV9jbG9zZSxcXG5rZXJuZWwvYnBmL2FyZW5hLmM6NTUyOlxcdC5mYXVsdCAgICAgICAgICA9IGFyZW5hX3ZtX2ZhdWx0LFxcbmtlcm5lbC9icGYvYXJlbmEuYy01NTMtfTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNTU0LVxcbmtlcm5lbC9icGYvYXJlbmEuYzo1NTU6c3RhdGljIHVuc2lnbmVkIGxvbmcgYXJlbmFfZ2V0X3VubWFwcGVkX2FyZWEoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNTU2LVxcdFxcdFxcdFxcdFxcdCAgICAgdW5zaWduZWQgbG9uZyBsZW4sIHVuc2lnbmVkIGxvbmcgcGdvZmYsXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtNTU5LVxcdHN0cnVjdCBicGZfbWFwICptYXAgPSBmaWxwLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxua2VybmVsL2JwZi9hcmVuYS5jOjU2MDpcXHRzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfYXJlbmEsIG1hcCk7XFxua2VybmVsL2JwZi9hcmVuYS5jLTU2MS1cXHRsb25nIHJldDtcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy01NjctXFxua2VybmVsL2JwZi9hcmVuYS5jOjU2ODpcXHQvKiBpZiB1c2VyX3ZtX3N0YXJ0IHdhcyBzcGVjaWZpZWQgYXQgYXJlbmEgY3JlYXRpb24gdGltZSAqL1xcbmtlcm5lbC9icGYvYXJlbmEuYzo1Njk6XFx0aWYgKGFyZW5hLVxcdTAwM2V1c2VyX3ZtX3N0YXJ0KSB7XFxua2VybmVsL2JwZi9hcmVuYS5jOjU3MDpcXHRcXHRpZiAobGVuIFxcdTAwM2UgYXJlbmEtXFx1MDAzZXVzZXJfdm1fZW5kIC0gYXJlbmEtXFx1MDAzZXVzZXJfdm1fc3RhcnQpXFxua2VybmVsL2JwZi9hcmVuYS5jLTU3MS1cXHRcXHRcXHRyZXR1cm4gLUUyQklHO1xcbmtlcm5lbC9icGYvYXJlbmEuYzo1NzI6XFx0XFx0aWYgKGxlbiAhPSBhcmVuYS1cXHUwMDNldXNlcl92bV9lbmQgLSBhcmVuYS1cXHUwMDNldXNlcl92bV9zdGFydClcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNTczLVxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbmtlcm5lbC9icGYvYXJlbmEuYzo1NzQ6XFx0XFx0aWYgKGFkZHIgIT0gYXJlbmEtXFx1MDAzZXVzZXJfdm1fc3RhcnQpXFxua2VybmVsL2JwZi9hcmVuYS5jLTU3NS1cXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy01ODItXFx0XFx0cmV0dXJuIHJldDtcXG5rZXJuZWwvYnBmL2FyZW5hLmM6NTgzOlxcdGlmIChXQVJOX09OX09OQ0UoYXJlbmEtXFx1MDAzZXVzZXJfdm1fc3RhcnQpKVxcbmtlcm5lbC9icGYvYXJlbmEuYy01ODQtXFx0XFx0LyogY2hlY2tzIGF0IG1hcCBjcmVhdGlvbiB0aW1lIHNob3VsZCBwcmV2ZW50IHRoaXMgKi9cXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy01ODgtXFxua2VybmVsL2JwZi9hcmVuYS5jOjU4OTpzdGF0aWMgaW50IGFyZW5hX21hcF9tbWFwKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbmtlcm5lbC9icGYvYXJlbmEuYy01OTAte1xcbmtlcm5lbC9icGYvYXJlbmEuYzo1OTE6XFx0c3RydWN0IGJwZl9hcmVuYSAqYXJlbmEgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX2FyZW5hLCBtYXApO1xcbmtlcm5lbC9icGYvYXJlbmEuYy01OTItXFxua2VybmVsL2JwZi9hcmVuYS5jOjU5MzpcXHRndWFyZChtdXRleCkoXFx1MDAyNmFyZW5hLVxcdTAwM2Vsb2NrKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmM6NTk0OlxcdGlmIChhcmVuYS1cXHUwMDNldXNlcl92bV9zdGFydCBcXHUwMDI2XFx1MDAyNiBhcmVuYS1cXHUwMDNldXNlcl92bV9zdGFydCAhPSB2bWEtXFx1MDAzZXZtX3N0YXJ0KVxcbmtlcm5lbC9icGYvYXJlbmEuYy01OTUtXFx0XFx0LypcXG5rZXJuZWwvYnBmL2FyZW5hLmM6NTk2OlxcdFxcdCAqIElmIG1hcF9leHRyYSB3YXMgbm90IHNwZWNpZmllZCBhdCBhcmVuYSBjcmVhdGlvbiB0aW1lIHRoZW5cXG5rZXJuZWwvYnBmL2FyZW5hLmMtNTk3LVxcdFxcdCAqIDFzdCB1c2VyIHByb2Nlc3MgY2FuIGRvIG1tYXAoTlVMTCwgLi4uKSB0byBwaWNrIHVzZXJfdm1fc3RhcnRcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy02MDQtXFxua2VybmVsL2JwZi9hcmVuYS5jOjYwNTpcXHRpZiAoYXJlbmEtXFx1MDAzZXVzZXJfdm1fZW5kIFxcdTAwMjZcXHUwMDI2IGFyZW5hLVxcdTAwM2V1c2VyX3ZtX2VuZCAhPSB2bWEtXFx1MDAzZXZtX2VuZClcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNjA2LVxcdFxcdC8qIGFsbCB1c2VyIHByb2Nlc3NlcyBtdXN0IGhhdmUgdGhlIHNhbWUgc2l6ZSBvZiBtbWFwLWVkIHJlZ2lvbiAqL1xcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTYxMi1cXG5rZXJuZWwvYnBmL2FyZW5hLmM6NjEzOlxcdGlmIChyZW1lbWJlcl92bWEoYXJlbmEsIHZtYSkpXFxua2VybmVsL2JwZi9hcmVuYS5jLTYxNC1cXHRcXHRyZXR1cm4gLUVOT01FTTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNjE1LVxcbmtlcm5lbC9icGYvYXJlbmEuYzo2MTY6XFx0YXJlbmEtXFx1MDAzZXVzZXJfdm1fc3RhcnQgPSB2bWEtXFx1MDAzZXZtX3N0YXJ0O1xcbmtlcm5lbC9icGYvYXJlbmEuYzo2MTc6XFx0YXJlbmEtXFx1MDAzZXVzZXJfdm1fZW5kID0gdm1hLVxcdTAwM2V2bV9lbmQ7XFxua2VybmVsL2JwZi9hcmVuYS5jLTYxOC1cXHQvKlxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTYyMC1cXHQgKiBjbGVhcnMgVk1fTUFZRVhFQy4gU2V0IFZNX0RPTlRFWFBBTkQgdG8gYXZvaWQgcG90ZW50aWFsIGNoYW5nZVxcbmtlcm5lbC9icGYvYXJlbmEuYzo2MjE6XFx0ICogb2YgdXNlcl92bV9zdGFydC4gU2V0IFZNX0RPTlRDT1BZIHRvIHByZXZlbnQgYXJlbmEgVk1BIGZyb21cXG5rZXJuZWwvYnBmL2FyZW5hLmMtNjIyLVxcdCAqIGJlaW5nIGNvcGllZCBpbnRvIHRoZSBjaGlsZCBwcm9jZXNzIG9uIGZvcmsuXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtNjI0LVxcdHZtX2ZsYWdzX3NldCh2bWEsIFZNX0RPTlRFWFBBTkQgfCBWTV9ET05UQ09QWSk7XFxua2VybmVsL2JwZi9hcmVuYS5jOjYyNTpcXHR2bWEtXFx1MDAzZXZtX29wcyA9IFxcdTAwMjZhcmVuYV92bV9vcHM7XFxua2VybmVsL2JwZi9hcmVuYS5jLTYyNi1cXHRyZXR1cm4gMDtcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy02MjgtXFxua2VybmVsL2JwZi9hcmVuYS5jOjYyOTpzdGF0aWMgaW50IGFyZW5hX21hcF9kaXJlY3RfdmFsdWVfYWRkcihjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwLCB1NjQgKmltbSwgdTMyIG9mZilcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNjMwLXtcXG5rZXJuZWwvYnBmL2FyZW5hLmM6NjMxOlxcdHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9hcmVuYSwgbWFwKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNjMyLVxcbmtlcm5lbC9icGYvYXJlbmEuYzo2MzM6XFx0aWYgKCh1NjQpb2ZmIFxcdTAwM2U9IGFyZW5hLVxcdTAwM2V1c2VyX3ZtX2VuZCAtIGFyZW5hLVxcdTAwM2V1c2VyX3ZtX3N0YXJ0KVxcbmtlcm5lbC9icGYvYXJlbmEuYy02MzQtXFx0XFx0cmV0dXJuIC1FUkFOR0U7XFxua2VybmVsL2JwZi9hcmVuYS5jOjYzNTpcXHQqaW1tID0gKHVuc2lnbmVkIGxvbmcpYXJlbmEtXFx1MDAzZXVzZXJfdm1fc3RhcnQ7XFxua2VybmVsL2JwZi9hcmVuYS5jLTYzNi1cXHRyZXR1cm4gMDtcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy02MzgtXFxua2VybmVsL2JwZi9hcmVuYS5jOjYzOTpCVEZfSURfTElTVF9TSU5HTEUoYnBmX2FyZW5hX21hcF9idGZfaWRzLCBzdHJ1Y3QsIGJwZl9hcmVuYSlcXG5rZXJuZWwvYnBmL2FyZW5hLmM6NjQwOmNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBhcmVuYV9tYXBfb3BzID0ge1xcbmtlcm5lbC9icGYvYXJlbmEuYy02NDEtXFx0Lm1hcF9tZXRhX2VxdWFsID0gYnBmX21hcF9tZXRhX2VxdWFsLFxcbmtlcm5lbC9icGYvYXJlbmEuYzo2NDI6XFx0Lm1hcF9hbGxvYyA9IGFyZW5hX21hcF9hbGxvYyxcXG5rZXJuZWwvYnBmL2FyZW5hLmM6NjQzOlxcdC5tYXBfZnJlZSA9IGFyZW5hX21hcF9mcmVlLFxcbmtlcm5lbC9icGYvYXJlbmEuYzo2NDQ6XFx0Lm1hcF9kaXJlY3RfdmFsdWVfYWRkciA9IGFyZW5hX21hcF9kaXJlY3RfdmFsdWVfYWRkcixcXG5rZXJuZWwvYnBmL2FyZW5hLmM6NjQ1OlxcdC5tYXBfbW1hcCA9IGFyZW5hX21hcF9tbWFwLFxcbmtlcm5lbC9icGYvYXJlbmEuYzo2NDY6XFx0Lm1hcF9nZXRfdW5tYXBwZWRfYXJlYSA9IGFyZW5hX2dldF91bm1hcHBlZF9hcmVhLFxcbmtlcm5lbC9icGYvYXJlbmEuYzo2NDc6XFx0Lm1hcF9nZXRfbmV4dF9rZXkgPSBhcmVuYV9tYXBfZ2V0X25leHRfa2V5LFxcbmtlcm5lbC9icGYvYXJlbmEuYzo2NDg6XFx0Lm1hcF9wdXNoX2VsZW0gPSBhcmVuYV9tYXBfcHVzaF9lbGVtLFxcbmtlcm5lbC9icGYvYXJlbmEuYzo2NDk6XFx0Lm1hcF9wZWVrX2VsZW0gPSBhcmVuYV9tYXBfcGVla19lbGVtLFxcbmtlcm5lbC9icGYvYXJlbmEuYzo2NTA6XFx0Lm1hcF9wb3BfZWxlbSA9IGFyZW5hX21hcF9wb3BfZWxlbSxcXG5rZXJuZWwvYnBmL2FyZW5hLmM6NjUxOlxcdC5tYXBfbG9va3VwX2VsZW0gPSBhcmVuYV9tYXBfbG9va3VwX2VsZW0sXFxua2VybmVsL2JwZi9hcmVuYS5jOjY1MjpcXHQubWFwX3VwZGF0ZV9lbGVtID0gYXJlbmFfbWFwX3VwZGF0ZV9lbGVtLFxcbmtlcm5lbC9icGYvYXJlbmEuYzo2NTM6XFx0Lm1hcF9kZWxldGVfZWxlbSA9IGFyZW5hX21hcF9kZWxldGVfZWxlbSxcXG5rZXJuZWwvYnBmL2FyZW5hLmM6NjU0OlxcdC5tYXBfY2hlY2tfYnRmID0gYXJlbmFfbWFwX2NoZWNrX2J0ZixcXG5rZXJuZWwvYnBmL2FyZW5hLmM6NjU1OlxcdC5tYXBfbWVtX3VzYWdlID0gYXJlbmFfbWFwX21lbV91c2FnZSxcXG5rZXJuZWwvYnBmL2FyZW5hLmM6NjU2OlxcdC5tYXBfYnRmX2lkID0gXFx1MDAyNmJwZl9hcmVuYV9tYXBfYnRmX2lkc1swXSxcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNjU3LX07XFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmM9NjU5PXN0YXRpYyB1NjQgY2xlYXJfbG8zMih1NjQgdmFsKVxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTY2Ny0gKi9cXG5rZXJuZWwvYnBmL2FyZW5hLmM6NjY4OnN0YXRpYyBsb25nIGFyZW5hX2FsbG9jX3BhZ2VzKHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hLCBsb25nIHVhZGRyLCBsb25nIHBhZ2VfY250LCBpbnQgbm9kZV9pZCxcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNjY5LVxcdFxcdFxcdCAgICAgIGJvb2wgc2xlZXBhYmxlKVxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTY3MS1cXHQvKiB1c2VyX3ZtX2VuZC9zdGFydCBhcmUgZml4ZWQgYmVmb3JlIGJwZiBwcm9nIHJ1bnMgKi9cXG5rZXJuZWwvYnBmL2FyZW5hLmM6NjcyOlxcdGxvbmcgcGFnZV9jbnRfbWF4ID0gKGFyZW5hLVxcdTAwM2V1c2VyX3ZtX2VuZCAtIGFyZW5hLVxcdTAwM2V1c2VyX3ZtX3N0YXJ0KSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUO1xcbmtlcm5lbC9icGYvYXJlbmEuYzo2NzM6XFx0dTY0IGtlcm5fdm1fc3RhcnQgPSBicGZfYXJlbmFfZ2V0X2tlcm5fdm1fc3RhcnQoYXJlbmEpO1xcbmtlcm5lbC9icGYvYXJlbmEuYy02NzQtXFx0c3RydWN0IG1lbV9jZ3JvdXAgKm5ld19tZW1jZywgKm9sZF9tZW1jZztcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy02OTMtXFx0XFx0XFx0cmV0dXJuIDA7XFxua2VybmVsL2JwZi9hcmVuYS5jOjY5NDpcXHRcXHRwZ29mZiA9IGNvbXB1dGVfcGdvZmYoYXJlbmEsIHVhZGRyKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNjk1LVxcdFxcdGlmIChwZ29mZiBcXHUwMDNlIHBhZ2VfY250X21heCAtIHBhZ2VfY250KVxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTY5OS1cXG5rZXJuZWwvYnBmL2FyZW5hLmM6NzAwOlxcdGJwZl9tYXBfbWVtY2dfZW50ZXIoXFx1MDAyNmFyZW5hLVxcdTAwM2VtYXAsIFxcdTAwMjZvbGRfbWVtY2csIFxcdTAwMjZuZXdfbWVtY2cpO1xcbmtlcm5lbC9icGYvYXJlbmEuYy03MDEtXFx0LyogQ2FwIGFsbG9jYXRpb24gc2l6ZSB0byBLTUFMTE9DX01BWF9DQUNIRV9TSVpFIHNvIGttYWxsb2Nfbm9sb2NrKCkgY2FuIHN1Y2NlZWQuICovXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzA3LVxcdH1cXG5rZXJuZWwvYnBmL2FyZW5hLmM6NzA4OlxcdGRhdGEuYXJlbmEgPSBhcmVuYTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzA5LVxcdGRhdGEucGFnZXMgPSBwYWdlcztcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzEwLVxcbmtlcm5lbC9icGYvYXJlbmEuYzo3MTE6XFx0aWYgKHJhd19yZXNfc3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNmFyZW5hLVxcdTAwM2VzcGlubG9jaywgZmxhZ3MpKVxcbmtlcm5lbC9icGYvYXJlbmEuYy03MTItXFx0XFx0Z290byBvdXRfZnJlZV9wYWdlcztcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy03MTQtXFx0aWYgKHVhZGRyKSB7XFxua2VybmVsL2JwZi9hcmVuYS5jOjcxNTpcXHRcXHRyZXQgPSBpc19yYW5nZV90cmVlX3NldChcXHUwMDI2YXJlbmEtXFx1MDAzZXJ0LCBwZ29mZiwgcGFnZV9jbnQpO1xcbmtlcm5lbC9icGYvYXJlbmEuYy03MTYtXFx0XFx0aWYgKHJldClcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzE3LVxcdFxcdFxcdGdvdG8gb3V0X3VubG9ja19mcmVlX3BhZ2VzO1xcbmtlcm5lbC9icGYvYXJlbmEuYzo3MTg6XFx0XFx0cmV0ID0gcmFuZ2VfdHJlZV9jbGVhcihcXHUwMDI2YXJlbmEtXFx1MDAzZXJ0LCBwZ29mZiwgcGFnZV9jbnQpO1xcbmtlcm5lbC9icGYvYXJlbmEuYy03MTktXFx0fSBlbHNlIHtcXG5rZXJuZWwvYnBmL2FyZW5hLmM6NzIwOlxcdFxcdHJldCA9IHBnb2ZmID0gcmFuZ2VfdHJlZV9maW5kKFxcdTAwMjZhcmVuYS1cXHUwMDNlcnQsIHBhZ2VfY250KTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzIxLVxcdFxcdGlmIChwZ29mZiBcXHUwMDNlPSAwKVxcbmtlcm5lbC9icGYvYXJlbmEuYzo3MjI6XFx0XFx0XFx0cmV0ID0gcmFuZ2VfdHJlZV9jbGVhcihcXHUwMDI2YXJlbmEtXFx1MDAzZXJ0LCBwZ29mZiwgcGFnZV9jbnQpO1xcbmtlcm5lbC9icGYvYXJlbmEuYy03MjMtXFx0fVxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTcyNy1cXHRyZW1haW5pbmcgPSBwYWdlX2NudDtcXG5rZXJuZWwvYnBmL2FyZW5hLmM6NzI4OlxcdHVhZGRyMzIgPSAodTMyKShhcmVuYS1cXHUwMDNldXNlcl92bV9zdGFydCArIHBnb2ZmICogUEFHRV9TSVpFKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzI5LVxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTczNS1cXG5rZXJuZWwvYnBmL2FyZW5hLmM6NzM2OlxcdFxcdHJldCA9IGJwZl9tYXBfYWxsb2NfcGFnZXMoXFx1MDAyNmFyZW5hLVxcdTAwM2VtYXAsIG5vZGVfaWQsIHRoaXNfYmF0Y2gsIHBhZ2VzKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzM3LVxcdFxcdGlmIChyZXQpXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzYzLVxcdGZsdXNoX3ZtYXBfY2FjaGUoa2Vybl92bV9zdGFydCArIHVhZGRyMzIsIG1hcHBlZCBcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZUKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmM6NzY0OlxcdHJhd19yZXNfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2YXJlbmEtXFx1MDAzZXNwaW5sb2NrLCBmbGFncyk7XFxua2VybmVsL2JwZi9hcmVuYS5jLTc2NS1cXHRrZnJlZV9ub2xvY2socGFnZXMpO1xcbmtlcm5lbC9icGYvYXJlbmEuYy03NjYtXFx0YnBmX21hcF9tZW1jZ19leGl0KG9sZF9tZW1jZywgbmV3X21lbWNnKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmM6NzY3OlxcdHJldHVybiBjbGVhcl9sbzMyKGFyZW5hLVxcdTAwM2V1c2VyX3ZtX3N0YXJ0KSArIHVhZGRyMzI7XFxua2VybmVsL2JwZi9hcmVuYS5jLTc2OC1vdXQ6XFxua2VybmVsL2JwZi9hcmVuYS5jOjc2OTpcXHRyYW5nZV90cmVlX3NldChcXHUwMDI2YXJlbmEtXFx1MDAzZXJ0LCBwZ29mZiArIG1hcHBlZCwgcGFnZV9jbnQgLSBtYXBwZWQpO1xcbmtlcm5lbC9icGYvYXJlbmEuYzo3NzA6XFx0cmF3X3Jlc19zcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZhcmVuYS1cXHUwMDNlc3BpbmxvY2ssIGZsYWdzKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzcxLVxcdGlmIChtYXBwZWQpIHtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzcyLVxcdFxcdGZsdXNoX3ZtYXBfY2FjaGUoa2Vybl92bV9zdGFydCArIHVhZGRyMzIsIG1hcHBlZCBcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZUKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmM6NzczOlxcdFxcdGFyZW5hX2ZyZWVfcGFnZXMoYXJlbmEsIHVhZGRyMzIsIG1hcHBlZCwgc2xlZXBhYmxlKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzc0LVxcdH1cXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy03NzYtb3V0X3VubG9ja19mcmVlX3BhZ2VzOlxcbmtlcm5lbC9icGYvYXJlbmEuYzo3Nzc6XFx0cmF3X3Jlc19zcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZhcmVuYS1cXHUwMDNlc3BpbmxvY2ssIGZsYWdzKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzc4LW91dF9mcmVlX3BhZ2VzOlxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTc4OC0gKi9cXG5rZXJuZWwvYnBmL2FyZW5hLmM6Nzg5OnN0YXRpYyB2b2lkIHphcF9wYWdlcyhzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSwgbG9uZyB1YWRkciwgbG9uZyBwYWdlX2NudClcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzkwLXtcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy03OTgtXFx0LypcXG5rZXJuZWwvYnBmL2FyZW5hLmM6Nzk5OlxcdCAqIFRha2luZyBtbWFwX3JlYWRfbG9jaygpIHVuZGVyIGFyZW5hLVxcdTAwM2Vsb2NrIHdvdWxkIGRlYWRsb2NrIGFnYWluc3RcXG5rZXJuZWwvYnBmL2FyZW5hLmM6ODAwOlxcdCAqIGFyZW5hX3ZtX2Nsb3NlKCksIHdoaWNoIHJ1bnMgd2l0aCBtbWFwX3dyaXRlX2xvY2sgaGVsZCBhbmQgdGhlblxcbmtlcm5lbC9icGYvYXJlbmEuYzo4MDE6XFx0ICogYWNxdWlyZXMgYXJlbmEtXFx1MDAzZWxvY2suIERyb3AgYXJlbmEtXFx1MDAzZWxvY2sgZm9yIG1tYXBfcmVhZF9sb2NrKCkuXFxua2VybmVsL2JwZi9hcmVuYS5jLTgwMi1cXHQgKlxcbi0tXFxuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDExOjE4OjU3LjQ0MDk1NzExN1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NzAwNTU3MDI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBCUEYgVmVyaWZpZXIgQ2hhbmdlKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBjaGFuZ2UgYW5kIEkndmUgYm9pbGVkIGl0IGRvd24gdG8gYSBmZXcga2V5IHBvaW50cy4gRmlyc3QsIHRoZSBjb3JlIHJlcXVpcmVtZW50IGlzIGBDT05GSUdfQlBGX1NZU0NBTExgIOKAkyB0aGF0J3MgdGhlIG1haW4gZHJpdmVyLiBUaGUgYGFyZW5hYCBmdW5jdGlvbmFsaXR5IEknbSBpbnRlcmVzdGVkIGluLCBzcGVjaWZpY2FsbHkgYGFyZW5hLm9gLCBpcyBvbmx5IGNvbXBpbGVkIGlmIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzICphbHNvKiBlbmFibGVkIGFsb25nIHdpdGggdGhlIHN0YW5kYXJkIGBDT05GSUdfTU1VYCBhbmQgYENPTkZJR182NEJJVGAgY29uZmlncywgYnV0IHRob3NlIGFyZSBnZW5lcmFsbHkgYSBnaXZlbiBvbiB4ODZfNjQsIHdoaWNoIEknbSB3b3JraW5nIHdpdGguIFNvLCBlc3NlbnRpYWxseSwgYEJQRl9TWVNDQUxMYCBpcyB0aGUgY3J1Y2lhbCBjb25maWd1cmF0aW9uIG9wdGlvbi5cblxuVGhlIHRlc3Qgc2V0dXAgdXNlcyBib3RoIGBhcmVuYWAgYW5kIGBzdGFja2AgYXRvbWljcywgc28gdGhhdCB0ZWxscyBtZSB0aGUgY2hhbmdlIHdpbGwgaGF2ZSBpbXBsaWNhdGlvbnMgaW4gdGhlc2UgYXJlYXMuIFRoZSB0ZXN0IGZpbGUgaXMgYHZlcmlmaWVyX2FyZW5hLmNgLCBidXQgdGhlIHJlYWwgZm9jdXMgbmVlZHMgdG8gYmUgb24gdGhlIHZlcmlmaWVyIGl0c2VsZi5cblxuTm93LCB0byBzb2xpZGlmeSBhIGZvY2FsIHBvaW50LCBJIGRvdWJsZS1jaGVja2VkIHRoZSByZWFjaGFiaWxpdHkgb2YgYGNoZWNrX2F0b21pY19ybXdgLiBJdCdzIGRlZmluaXRlbHkgcmVhY2hhYmxlOyBpdCdzIGNhbGxlZCBieSBgY2hlY2tfYXRvbWljYCwgd2hpY2ggaW4gdHVybiBpcyBjYWxsZWQgYnkgYGRvX2NoZWNrX2luc25gLCB3aGljaCBpcyBjYWxsZWQgYnkgYGRvX2NoZWNrYCwgd2hpY2ggaXMgZmluYWxseSBjYWxsZWQgYnkgYGJwZl9jaGVja2AuIEFuZCB0aGF0J3MgZXhhY3RseSB3aGF0IEkgbmVlZC4gR2l2ZW4gdGhlIGluc3RydWN0aW9ucyB0byBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgZW50cnlwb2ludCBmdW5jdGlvbnMsIGBicGZfY2hlY2tgIGlzIHRoZSAqcGVyZmVjdCogc3ltYm9sIHRvIGZvY3VzIG9uLiBJdCdzIHRoZSBtYWluIHZlcmlmaWVyIGVudHJ5IHBvaW50LlxuXG5Mb29raW5nIGF0IHRoZSBjb2RlIGNoYW5nZSBpdHNlbGY6XG5cbmBgYGNcbi1cdGlmIChpc19hcmVuYV9yZWcoZW52LCBpbnNuLVx1MDAzZWRzdF9yZWcpKSB7XG4tXHRcdGVyciA9IHNhdmVfYXV4X3B0cl90eXBlKGVudiwgUFRSX1RPX0FSRU5BLCBmYWxzZSk7XG4tXHRcdGlmIChlcnIpXG4tXHRcdFx0cmV0dXJuIGVycjtcbi1cdH1cbitcdGVyciA9IHNhdmVfYXV4X3B0cl90eXBlKGVudiwgZHN0X3JlZy1cdTAwM2V0eXBlLCBmYWxzZSk7XG4rXHRpZiAoZXJyKVxuK1x0XHRyZXR1cm4gZXJyO1xuYGBgXG5cblRoaXMgaXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlICp3aXRoaW4qIHRoZSB2ZXJpZmllciBsb2dpYy4gSXQgbG9va3MgbGlrZSB0aGUgdHlwZSBpbmZvcm1hdGlvbiBpcyBiZWluZyBoYW5kbGVkIGRpZmZlcmVudGx5LiBJdCdzIGNsZWFybHkgd29ydGggZnV6emluZyB0byB1bmNvdmVyIGFueSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIGludHJvZHVjZWQgYnkgdGhpcy5cblxuU28sIHRoZSBnYW1lIHBsYW4gaXM6XG5cbiogICAqKkZvY3VzIHN5bWJvbDoqKiBgYnBmX2NoZWNrYFxuKiAgICoqRW5hYmxlIGNvbmZpZzoqKiBgQlBGX1NZU0NBTExgIChzaW5jZSBpdCBhcHBlYXJzIHRvIGJlIHRoZSBtb3N0IHJlbGV2YW50KVxuXG5XaXRoIHRoYXQsIEknbGwgYmUgdXNpbmcgYHNldC1yZXN1bHRzYCB0byBwcm9wZXJseSBkZWZpbmUgdGhpcyBmdXp6aW5nIGFwcHJvYWNoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzU2MSwiT3V0cHV0VG9rZW5zIjoxNDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMTE6MTk6MDYuMTQxNTE3MDM2WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzY3MDg4NjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2NoZWNrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllcidzIGhhbmRsaW5nIG9mIGF0b21pYyByZWFkLW1vZGlmeS13cml0ZSAoUk1XKSBpbnN0cnVjdGlvbnMgYnkgc2F2aW5nIHRoZSBhdXhpbGlhcnkgcG9pbnRlciB0eXBlIGZvciBhbGwgZGVzdGluYXRpb24gcmVnaXN0ZXJzLCBub3QganVzdCBhcmVuYSByZWdpc3RlcnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBrZXJuZWwgQlBGIHZlcmlmaWVyIGxvZ2ljIHRoYXQgYWZmZWN0cyBob3cgYXRvbWljIG9wZXJhdGlvbnMgYXJlIHZlcmlmaWVkIGFuZCBoYW5kbGVkLCBwYXJ0aWN1bGFybHkgd2hlbiBtaXhpbmcgZGlmZmVyZW50IHBvaW50ZXIgdHlwZXMgKGxpa2UgYXJlbmEgYW5kIHN0YWNrIHBvaW50ZXJzKSBpbiB0aGUgc2FtZSBpbnN0cnVjdGlvbi4gVGhpcyBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSB0aGUgYnBmKCkgc3lzY2FsbCBhbmQgaXMgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9jaGVja1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIncyBoYW5kbGluZyBvZiBhdG9taWMgcmVhZC1tb2RpZnktd3JpdGUgKFJNVykgaW5zdHJ1Y3Rpb25zIGJ5IHNhdmluZyB0aGUgYXV4aWxpYXJ5IHBvaW50ZXIgdHlwZSBmb3IgYWxsIGRlc3RpbmF0aW9uIHJlZ2lzdGVycywgbm90IGp1c3QgYXJlbmEgcmVnaXN0ZXJzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUga2VybmVsIEJQRiB2ZXJpZmllciBsb2dpYyB0aGF0IGFmZmVjdHMgaG93IGF0b21pYyBvcGVyYXRpb25zIGFyZSB2ZXJpZmllZCBhbmQgaGFuZGxlZCwgcGFydGljdWxhcmx5IHdoZW4gbWl4aW5nIGRpZmZlcmVudCBwb2ludGVyIHR5cGVzIChsaWtlIGFyZW5hIGFuZCBzdGFjayBwb2ludGVycykgaW4gdGhlIHNhbWUgaW5zdHJ1Y3Rpb24uIFRoaXMgaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgdGhlIGJwZigpIHN5c2NhbGwgYW5kIGlzIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDExOjE5OjA2LjIxODIzMzEwN1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ1NzAwMjA5MzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQxMToxOTowNi4yMTg3MjczNzhaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MjQ1Njk1MjM1MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgQlBGIHZlcmlmaWVyIGJ1ZyB3aGVyZSBgc2F2ZV9hdXhfcHRyX3R5cGUoKWAgd2FzIG5vdCBjYWxsZWQgZm9yIGFsbCBwb2ludGVyIHR5cGVzIGR1cmluZyBhdG9taWMgcmVhZC1tb2RpZnktd3JpdGUgKFJNVykgaW5zdHJ1Y3Rpb24gdmVyaWZpY2F0aW9uLiBUaGlzIG9taXNzaW9uIGFsbG93ZWQgYSBtYWxpY2lvdXMgQlBGIHByb2dyYW0gdG8gdXNlIHRoZSBzYW1lIGF0b21pYyBpbnN0cnVjdGlvbiB3aXRoIGRpZmZlcmVudCBwb2ludGVyIHR5cGVzIChlLmcuLCBtaXhpbmcgYFBUUl9UT19BUkVOQWAgYW5kIGBQVFJfVE9fU1RBQ0tgIGluIGRpZmZlcmVudCBicmFuY2hlcykuIFN1Y2ggdmVyaWZpZXIgYnlwYXNzZXMgdHlwaWNhbGx5IGxlYWQgdG8gb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIG9yIG1lbW9yeSBjb3JydXB0aW9uIGR1ZSB0byBpbmNvcnJlY3QgSklUIGNvbXBpbGF0aW9uIG9yIG1pc3NpbmcgcnVudGltZSBjaGVja3MuIFRoZXNlIHR5cGVzIG9mIG1lbW9yeSBzYWZldHkgdmlvbGF0aW9ucyBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGMzNzAxYTgxYWE1NWU4Zjk4MjQ4MDgxMWY2OTU0ZGZiMjlhZjAxMDFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEF1ZyAxNiAxMToxODoyMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuaW5kZXggZDE3ZjE0YjM1Yjc5Zi4uOTM0NjNjYWY1YzlhZCAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuKysrIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5AQCAtNjczOSwxMSArNjczOSw5IEBAIHN0YXRpYyBpbnQgY2hlY2tfYXRvbWljX3JtdyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbiBcbi1cdGlmIChpc19hcmVuYV9yZWcoZW52LCBpbnNuLVx1MDAzZWRzdF9yZWcpKSB7XG4tXHRcdGVyciA9IHNhdmVfYXV4X3B0cl90eXBlKGVudiwgUFRSX1RPX0FSRU5BLCBmYWxzZSk7XG4tXHRcdGlmIChlcnIpXG4tXHRcdFx0cmV0dXJuIGVycjtcbi1cdH1cbitcdGVyciA9IHNhdmVfYXV4X3B0cl90eXBlKGVudiwgZHN0X3JlZy1cdTAwM2V0eXBlLCBmYWxzZSk7XG4rXHRpZiAoZXJyKVxuK1x0XHRyZXR1cm4gZXJyO1xuIFx0LyogQ2hlY2sgd2hldGhlciB3ZSBjYW4gd3JpdGUgaW50byB0aGUgc2FtZSBtZW1vcnkuICovXG4gXHRlcnIgPSBjaGVja19tZW1fYWNjZXNzKGVudiwgZW52LVx1MDAzZWluc25faWR4LCBkc3RfcmVnLCBhcmdub19mcm9tX3JlZyhpbnNuLVx1MDAzZWRzdF9yZWcpLCBpbnNuLVx1MDAzZW9mZixcbiBcdFx0XHQgICAgICAgQlBGX1NJWkUoaW5zbi1cdTAwM2Vjb2RlKSwgQlBGX1dSSVRFLCAtMSwgdHJ1ZSwgZmFsc2UpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmNcbmluZGV4IGIyNDFiYmNmNTRhOGEuLmIyMmJhYjMzMzAxYWIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmNcbkBAIC02MzcsNiArNjM3LDQ1IEBAIGludCBub25fYXJlbmFfcHRyX2FkZF90b19hcmVuYV9wdHIodm9pZCAqY3R4KVxuIFxuICNlbmRpZlxuIFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2luc24gYWRkcl9zcGFjZV9jYXN0X2luc24gPSB7XG4rXHQuY29kZSA9IDB4YmYsXG4rXHQuZHN0X3JlZyA9IEJQRl9SRUdfNyxcbitcdC5zcmNfcmVnID0gQlBGX1JFR183LFxuK1x0Lm9mZiA9IDEsXG4rXHQuaW1tID0gMSxcbit9O1xuK1xuK1NFQyhcInNvY2tldFwiKVxuK19fZGVzY3JpcHRpb24oXCJhcmVuYSBhbmQgc3RhY2sgYXRvbWljIGF0IHRoZSBzYW1lIGluc3RydWN0aW9uXCIpXG4rX19mYWlsdXJlIF9fbXNnKFwic2FtZSBpbnNuIGNhbm5vdCBiZSB1c2VkIHdpdGggZGlmZmVyZW50IHBvaW50ZXJzXCIpXG4rX19hcmNoX3g4Nl82NFxuK19fbG9hZF9pZl9KSVRlZCgpXG4rX19uYWtlZCB2b2lkIG1peGVkX2FyZW5hX3N0YWNrX2F0b21pYyh2b2lkKVxuK3tcbitcdGFzbSB2b2xhdGlsZSAoXCJcdFx0XHRcdFx0XFxcbitcdHIxID0gJVthcmVuYV0gbGw7XHRcdFx0XHRcXFxuK1x0cjYgPSByMTA7XHRcdFx0XHRcdFxcXG4rXHRyNiArPSAtODtcdFx0XHRcdFx0XFxcbitcdHI5ID0gMDtcdFx0XHRcdFx0XFxcbitcdCoodTY0ICopKHI2ICsgMCkgPSByOTtcdFx0XHRcXFxuK1x0cjcgPSA4MTkyO1x0XHRcdFx0XHRcXFxuK1x0LjhieXRlICVbYWRkcl9zcGFjZV9jYXN0XTtcdFx0XHRcXFxuK1x0Y2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdO1x0XHRcdFxcXG4rXHRpZiB3MCAhPSAwIGdvdG8gMWY7XHRcdFx0XHRcXFxuK1x0cjggPSByNjtcdFx0XHRcdFx0XFxcbitcdGdvdG8gMmY7XHRcdFx0XHRcdFxcXG4rMTpcdHI4ID0gcjc7XHRcdFx0XHRcdFxcXG4rMjpcdHI5ID0gMTtcdFx0XHRcdFx0XFxcbitcdGxvY2sgKih1NjQgKikocjggKyAwKSArPSByOTtcdFx0XHRcXFxuK1x0cjAgPSAwO1x0XHRcdFx0XHRcXFxuK1x0ZXhpdDtcdFx0XHRcdFx0XHRcXFxuK1wiXHQ6XG4rXHQ6IF9faW1tX2FkZHIoYXJlbmEpLFxuK1x0ICBfX2ltbV9pbnNuKGFkZHJfc3BhY2VfY2FzdCwgYWRkcl9zcGFjZV9jYXN0X2luc24pLFxuK1x0ICBfX2ltbShicGZfZ2V0X3ByYW5kb21fdTMyKVxuK1x0OiBfX2Nsb2JiZXJfYWxsKTtcbit9XG4rXG4gc3RhdGljIF9fbm9pbmxpbmVcbiB1MzIgX19hcmVuYSAqY2hlY2tfYXJlbmFfYXJnX25vbmdsb2JhbCh1MzIgX19hcmVuYSAqYXJnKVxuIHtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDExOjE5OjA2LjIxODcyODM2N1oiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODkzMzIzNTg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFZlcmlmaWVyIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgdGhlIEJQRiB2ZXJpZmllci4gSXQgc2VlbXMgdGhleSd2ZSBtYWRlIGEgdGFyZ2V0ZWQgbW9kaWZpY2F0aW9uIHdpdGhpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYCwgc3BlY2lmaWNhbGx5IHRvIHRoZSBgY2hlY2tfYXRvbWljX3Jtd2AgZnVuY3Rpb24uIFRoZSBrZXkgY2hhbmdlIGlzIGEgc2ltcGxpZmljYXRpb24gb2YgdGhlIGxvZ2ljIHN1cnJvdW5kaW5nIGBzYXZlX2F1eF9wdHJfdHlwZWAuIEJlZm9yZSwgdGhleSB3ZXJlIG9ubHkgY2FsbGluZyBpdCBpZiB0aGUgZGVzdGluYXRpb24gcmVnaXN0ZXIgKGBpbnNuLVx1MDAzZWRzdF9yZWdgKSB3YXMgaWRlbnRpZmllZCBhcyBwb2ludGluZyB0byBhbiBhcmVuYSAoYGlzX2FyZW5hX3JlZ2ApLiBOb3csIHRoZXkgYXJlIGNhbGxpbmcgYHNhdmVfYXV4X3B0cl90eXBlYCBmb3IgZXZlcnkgcG9pbnRlciB0eXBlLCB1c2luZyB0aGUgcmVnaXN0ZXIncyBkZWNsYXJlZCBgdHlwZWAuIEVzc2VudGlhbGx5LCB0aGV5J3ZlIGV4cGFuZGVkIHRoZSBhcHBsaWNhYmlsaXR5IG9mIHRoaXMgZnVuY3Rpb24uXG5cbkl0IG1ha2VzIHNlbnNlLCBnaXZlbiB0aGUgcG90ZW50aWFsIGZvciBwb2ludGVyIHR5cGVzIHRvIGJlIG1peGVkIHVwLiBUaGUgb2xkIGNoZWNrIHdhcyB0b28gcmVzdHJpY3RpdmUuIFRoZSB1cGRhdGVkIGxvZ2ljIGlzIG1vcmUgcm9idXN0LiBUaGF0IHNlZW1zIGxpa2UgYSByZWFzb25hYmxlIGFkanVzdG1lbnQgdG8gZW5zdXJlIHRoYXQgYHNhdmVfYXV4X3B0cl90eXBlYCBhY2N1cmF0ZWx5IHJlZmxlY3RzIHRoZSBwb2ludGVyIHR5cGUgaW4gYWxsIHJlbGV2YW50IGF0b21pYyByZWFkLW1vZGlmeS13cml0ZSBzY2VuYXJpb3MuXG5cblRvIHZhbGlkYXRlIHRoaXMgY2hhbmdlLCBhIG5ldyB0ZXN0IGNhc2UsIGBtaXhlZF9hcmVuYV9zdGFja19hdG9taWNgLCBoYXMgYmVlbiBpbnRyb2R1Y2VkLiBNeSBndWVzcyBpcyBpdCdzIGRlc2lnbmVkIHRvIHNwZWNpZmljYWxseSBjYXRjaCB0aGUgc2l0dWF0aW9uIHdoZXJlIHNvbWVvbmUgbWlnaHQgYXR0ZW1wdCB0byB1c2UgdGhlIHNhbWUgaW5zdHJ1Y3Rpb24gd2l0aCBhIG1peCBvZiBhcmVuYSBhbmQgc3RhY2sgcG9pbnRlcnMuIEEgZ29vZCB0ZXN0IGNhc2UsIGdpdmVuIHRoZSBwdXJwb3NlIG9mIHRoZSB1cGRhdGUuIFRoZSBwYXRjaCBpcyBwcm9iYWJseSB0cnlpbmcgdG8gY2F0Y2ggc29tZSBvYnNjdXJlIGNhc2Ugd2hlcmUgdGhlIGN1cnJlbnQgdmVyaWZpY2F0aW9uIGxvZ2ljIGlzIGluc3VmZmljaWVudC5cblxuTm93LCBJJ2xsIG5lZWQgdG8gZGlnIGludG8gYHNhdmVfYXV4X3B0cl90eXBlYCB0byBmdWxseSBncmFzcCB0aGUgcmFtaWZpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZS4gSXQncyB0aGUgY29yZSBmdW5jdGlvbiBoZXJlLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGl0IGRvZXMgYW5kIGhvdyB0aGUgbmV3IGltcGxlbWVudGF0aW9uIGltcGFjdHMgdGhlIHZlcmlmaWVyJ3MgYmVoYXZpb3IuIFRpbWUgdG8gZGVsdmUgaW50byB0aGF0IGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzQ4LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjExLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMTE6MTk6MTEuMTEyMDU0Nzc1WiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjgyNjcyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzYXZlX2F1eF9wdHJfdHlwZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jPTYzMzQ9c3RhdGljIGludCBjaGVja19tZW1fYWNjZXNzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBpbnNuX2lkeCwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgYXJnbm9fdCBhcmdubyxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NTc5LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2NTgwOnN0YXRpYyBpbnQgc2F2ZV9hdXhfcHRyX3R5cGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgZW51bSBicGZfcmVnX3R5cGUgdHlwZSxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjU4MS1cXHRcXHRcXHQgICAgIGJvb2wgYWxsb3dfdHJ1c3RfbWlzbWF0Y2gpO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTY1ODM9c3RhdGljIGludCBjaGVja19sb2FkX21lbShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjYyMC1cXHRcXHRcXHQgICAgICAgc3RyaWN0X2FsaWdubWVudF9vbmNlLCBpc19sZHN4KTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjYyMTpcXHRlcnIgPSBlcnIgPzogc2F2ZV9hdXhfcHRyX3R5cGUoZW52LCBzcmNfcmVnX3R5cGUsXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY2MjItXFx0XFx0XFx0XFx0ICAgICAgIGFsbG93X3RydXN0X21pc21hdGNoKTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz02NjMwPXN0YXRpYyBpbnQgY2hlY2tfc3RvcmVfcmVnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NjYyLVxcdFxcdFxcdCAgICAgICBzdHJpY3RfYWxpZ25tZW50X29uY2UsIGZhbHNlKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjY2MzpcXHRlcnIgPSBlcnIgPzogc2F2ZV9hdXhfcHRyX3R5cGUoZW52LCBkc3RfcmVnX3R5cGUsIGZhbHNlKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjY2NC1cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz02NjY4PXN0YXRpYyBpbnQgY2hlY2tfYXRvbWljX3JtdyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY3NDEtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjY3NDI6XFx0ZXJyID0gc2F2ZV9hdXhfcHRyX3R5cGUoZW52LCBkc3RfcmVnLVxcdTAwM2V0eXBlLCBmYWxzZSk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY3NDMtXFx0aWYgKGVycilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNzg2MD1zdGF0aWMgYm9vbCBpc19wdHJfdG9fbWVtKGVudW0gYnBmX3JlZ190eXBlIHR5cGUpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTc4NjQtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE3ODY1OnN0YXRpYyBpbnQgc2F2ZV9hdXhfcHRyX3R5cGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgZW51bSBicGZfcmVnX3R5cGUgdHlwZSxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTc4NjYtXFx0XFx0XFx0ICAgICBib29sIGFsbG93X3RydXN0X21pc21hdGNoKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE4MDcwPXN0YXRpYyBpbnQgZG9fY2hlY2tfaW5zbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBib29sICpkb19wcmludF9zdGF0ZSlcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODExMy1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTgxMTQ6XFx0XFx0cmV0dXJuIHNhdmVfYXV4X3B0cl90eXBlKGVudiwgZHN0X3JlZ190eXBlLCBmYWxzZSk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4MTE1LVxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMTE6MTk6MTEuMTY0ODg0MzUzWiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1ODUzMDQ4NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIGBzYXZlX2F1eF9wdHJfdHlwZWAqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgc2F2ZV9hdXhfcHRyX3R5cGVgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29yZSBwdXJwb3NlIGFuZCBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIHRvIGFzc2VzcyBpdHMgaW1wbGljYXRpb25zLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCBpdHMgaW50ZW5kZWQgZnVuY3Rpb24uXG5cbldoYXQgZXhhY3RseSBpcyBpdCBzdXBwb3NlZCB0byBzYXZlPyBJcyBpdCByZWxhdGVkIHRvIGNhY2hpbmcsIG1ldGFkYXRhIG1hbmFnZW1lbnQsIG9yIHNvbWV0aGluZyBtb3JlIGZ1bmRhbWVudGFsIHRvIHRoZSBkYXRhIHN0cnVjdHVyZSBpdCdzIG9wZXJhdGluZyBvbj8gSSBzaG91bGQgbG9vayBhdCB3aGVyZSBhbmQgaG93IGl0J3MgY2FsbGVkLiBUaGUgY2FsbCBjb250ZXh0IG9mZmVycyB0aGUgYmVzdCBjbHVlIHJlZ2FyZGluZyB0aGUgbmF0dXJlIG9mIHRoZSBkYXRhIHR5cGUgaXQgZGVhbHMgd2l0aC4gQWxzbywgd2hhdCBpcyBpdCdzIHJlbGF0aW9uc2hpcCB3aXRoIG90aGVyIG1lbW9yeSBtYW5hZ2VtZW50IHJvdXRpbmVzLiBBcmUgd2UgbG9va2luZyBhdCBhIGxvY2FsIGNvcHksIG9yIGEgcG9pbnRlciB0byB0aGUgb3JpZ2luYWwgbWVtb3J5IGJsb2NrP1xuXG5JJ2xsIGNoZWNrIHRoZSBhc3NvY2lhdGVkIGRhdGEgc3RydWN0dXJlcy4gSSBuZWVkIHRvIGRldGVybWluZSB0aGUgcG9pbnRlciBiZWluZyBzYXZlZCBpcyBwYXJ0IG9mIGEgY29tcG91bmQgdHlwZSBhbmQgbmVlZHMgcmVjb25zdHJ1Y3Rpb24uIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBzb3VyY2Ugb2YgdGhlIGRhdGE6IGlzIGl0IGNvbWluZyBmcm9tIGEgZ2xvYmFsIHN0YXRlLCBhIHN0YWNrLCBvciBhIGhlYXA/IFVuZGVyc3RhbmRpbmcgdGhlIGFsbG9jYXRpb24gc3RyYXRlZ3kgaXMga2V5LiBBcmUgdGhlcmUgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBtZW1vcnkgbGVha3MgYXNzb2NpYXRlZCB3aXRoIGhvdyB0aGlzIHBvaW50ZXIgaXMgaGFuZGxlZD9cblxuRXNzZW50aWFsbHksIEkgbmVlZCB0byB0cmFjZSBpdHMgdXNhZ2UsIGlkZW50aWZ5IGl0cyByb2xlIHdpdGhpbiB0aGUgd2lkZXIgZnJhbWV3b3JrLCBhbmQgYW50aWNpcGF0ZSBhbnkgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyBvciBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDEyMiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDExOjE5OjE0Ljc1MDE5MjA3MloiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDk1NjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNzg2NSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTc4NjU6XFx0c3RhdGljIGludCBzYXZlX2F1eF9wdHJfdHlwZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBlbnVtIGJwZl9yZWdfdHlwZSB0eXBlLFxcbjE3ODY2OlxcdFxcdFxcdFxcdCAgICAgYm9vbCBhbGxvd190cnVzdF9taXNtYXRjaClcXG4xNzg2NzpcXHR7XFxuMTc4Njg6XFx0XFx0ZW51bSBicGZfcmVnX3R5cGUgKnByZXZfdHlwZSA9IFxcdTAwMjZlbnYtXFx1MDAzZWluc25fYXV4X2RhdGFbZW52LVxcdTAwM2VpbnNuX2lkeF0ucHRyX3R5cGU7XFxuMTc4Njk6XFx0XFx0ZW51bSBicGZfcmVnX3R5cGUgbWVyZ2VkX3R5cGU7XFxuMTc4NzA6XFx0XFxuMTc4NzE6XFx0XFx0aWYgKCpwcmV2X3R5cGUgPT0gTk9UX0lOSVQpIHtcXG4xNzg3MjpcXHRcXHRcXHQvKiBTYXcgYSB2YWxpZCBpbnNuXFxuMTc4NzM6XFx0XFx0XFx0ICogZHN0X3JlZyA9ICoodTMyICopKHNyY19yZWcgKyBvZmYpXFxuMTc4NzQ6XFx0XFx0XFx0ICogc2F2ZSB0eXBlIHRvIHZhbGlkYXRlIGludGVyc2VjdGluZyBwYXRoc1xcbjE3ODc1OlxcdFxcdFxcdCAqL1xcbjE3ODc2OlxcdFxcdFxcdCpwcmV2X3R5cGUgPSB0eXBlO1xcbjE3ODc3OlxcdFxcdH0gZWxzZSBpZiAocmVnX3R5cGVfbWlzbWF0Y2godHlwZSwgKnByZXZfdHlwZSkpIHtcXG4xNzg3ODpcXHRcXHRcXHQvKiBBYnVzZXIgcHJvZ3JhbSBpcyB0cnlpbmcgdG8gdXNlIHRoZSBzYW1lIGluc25cXG4xNzg3OTpcXHRcXHRcXHQgKiBkc3RfcmVnID0gKih1MzIqKSAoc3JjX3JlZyArIG9mZilcXG4xNzg4MDpcXHRcXHRcXHQgKiB3aXRoIGRpZmZlcmVudCBwb2ludGVyIHR5cGVzOlxcbjE3ODgxOlxcdFxcdFxcdCAqIHNyY19yZWcgPT0gY3R4IGluIG9uZSBicmFuY2ggYW5kXFxuMTc4ODI6XFx0XFx0XFx0ICogc3JjX3JlZyA9PSBzdGFja3xtYXAgaW4gc29tZSBvdGhlciBicmFuY2guXFxuMTc4ODM6XFx0XFx0XFx0ICogUmVqZWN0IGl0LlxcbjE3ODg0OlxcdFxcdFxcdCAqL1xcbjE3ODg1OlxcdFxcdFxcdGlmIChhbGxvd190cnVzdF9taXNtYXRjaCBcXHUwMDI2XFx1MDAyNlxcbjE3ODg2OlxcdFxcdFxcdCAgICBpc19wdHJfdG9fbWVtX29yX2J0Zl9pZCh0eXBlKSBcXHUwMDI2XFx1MDAyNlxcbjE3ODg3OlxcdFxcdFxcdCAgICBpc19wdHJfdG9fbWVtX29yX2J0Zl9pZCgqcHJldl90eXBlKSkge1xcbjE3ODg4OlxcdFxcdFxcdFxcdC8qXFxuMTc4ODk6XFx0XFx0XFx0XFx0ICogSGF2ZSB0byBzdXBwb3J0IGEgdXNlIGNhc2Ugd2hlbiBvbmUgcGF0aCB0aHJvdWdoXFxuMTc4OTA6XFx0XFx0XFx0XFx0ICogdGhlIHByb2dyYW0geWllbGRzIFRSVVNURUQgcG9pbnRlciB3aGlsZSBhbm90aGVyXFxuMTc4OTE6XFx0XFx0XFx0XFx0ICogaXMgVU5UUlVTVEVELiBGYWxsYmFjayB0byBVTlRSVVNURUQgdG8gZ2VuZXJhdGVcXG4xNzg5MjpcXHRcXHRcXHRcXHQgKiBCUEZfUFJPQkVfTUVNL0JQRl9QUk9CRV9NRU1TWC5cXG4xNzg5MzpcXHRcXHRcXHRcXHQgKiBTYW1lIGJlaGF2aW9yIG9mIE1FTV9SRE9OTFkgZmxhZy5cXG4xNzg5NDpcXHRcXHRcXHRcXHQgKi9cXG4xNzg5NTpcXHRcXHRcXHRcXHRpZiAoaXNfcHRyX3RvX21lbSh0eXBlKSB8fCBpc19wdHJfdG9fbWVtKCpwcmV2X3R5cGUpKVxcbjE3ODk2OlxcdFxcdFxcdFxcdFxcdG1lcmdlZF90eXBlID0gUFRSX1RPX01FTTtcXG4xNzg5NzpcXHRcXHRcXHRcXHRlbHNlXFxuMTc4OTg6XFx0XFx0XFx0XFx0XFx0bWVyZ2VkX3R5cGUgPSBQVFJfVE9fQlRGX0lEO1xcbjE3ODk5OlxcdFxcdFxcdFxcdGlmICgodHlwZSBcXHUwMDI2IFBUUl9VTlRSVVNURUQpIHx8ICgqcHJldl90eXBlIFxcdTAwMjYgUFRSX1VOVFJVU1RFRCkpXFxuMTc5MDA6XFx0XFx0XFx0XFx0XFx0bWVyZ2VkX3R5cGUgfD0gUFRSX1VOVFJVU1RFRDtcXG4xNzkwMTpcXHRcXHRcXHRcXHRpZiAoKHR5cGUgXFx1MDAyNiBNRU1fUkRPTkxZKSB8fCAoKnByZXZfdHlwZSBcXHUwMDI2IE1FTV9SRE9OTFkpKVxcbjE3OTAyOlxcdFxcdFxcdFxcdFxcdG1lcmdlZF90eXBlIHw9IE1FTV9SRE9OTFk7XFxuMTc5MDM6XFx0XFx0XFx0XFx0KnByZXZfdHlwZSA9IG1lcmdlZF90eXBlO1xcbjE3OTA0OlxcdFxcdFxcdH0gZWxzZSB7XFxuMTc5MDU6XFx0XFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCJzYW1lIGluc24gY2Fubm90IGJlIHVzZWQgd2l0aCBkaWZmZXJlbnQgcG9pbnRlcnNcXFxcblxcXCIpO1xcbjE3OTA2OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjE3OTA3OlxcdFxcdFxcdH1cXG4xNzkwODpcXHRcXHR9XFxuMTc5MDk6XFx0XFxuMTc5MTA6XFx0XFx0cmV0dXJuIDA7XFxuMTc5MTE6XFx0fVxcbjE3OTEyOlxcdFxcbjE3OTEzOlxcdGVudW0ge1xcbjE3OTE0OlxcdFxcdFBST0NFU1NfQlBGX0VYSVQgPSAxLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQxMToxOToxNC43NTEyOTA2MTJaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTYwMzY5NDEyODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgdGhlIEF0b21pYyBSTVcgUG9pbnRlciBUeXBlIEJ1ZyBGaXgqKlxuXG5Pa2F5LCBoZXJlJ3MgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGlzIHBhdGNoIGFuZCB0aGUgYXNzb2NpYXRlZCBpbXBsaWNhdGlvbnMuIFRoZSBjb3JlIGlzc3VlIHJldm9sdmVzIGFyb3VuZCBob3cgdGhlIHZlcmlmaWVyIGhhbmRsZXMgYXRvbWljIFJNVyBpbnN0cnVjdGlvbnMgYW5kIHRoZSBwb2ludGVyIHR5cGVzIHRoZXkgb3BlcmF0ZSBvbi4gUHJldmlvdXNseSwgYHNhdmVfYXV4X3B0cl90eXBlYCB3YXMgb25seSBjYWxsZWQgd2l0aGluIGBjaGVja19hdG9taWNfcm13YCBpZiB0aGUgZGVzdGluYXRpb24gcmVnaXN0ZXIgd2FzIGFuIGFyZW5hIHJlZ2lzdGVyLCB1c2luZyBgaXNfYXJlbmFfcmVnYC4gVGhpcyBjcmVhdGVkIGEgY3JpdGljYWwgZmxhdy5cblxuSWYgYHNhdmVfYXV4X3B0cl90eXBlYCAqd2Fzbid0KiBjYWxsZWQsIHRoZSB2ZXJpZmllciB3b3VsZG4ndCB0cmFjayBvciBlbmZvcmNlIHRoYXQgYSBjb25zaXN0ZW50IHBvaW50ZXIgdHlwZSB3YXMgdXNlZCBhY3Jvc3MgYWxsIGJyYW5jaGVzIG9mIHRoZSBhdG9taWMgUk1XLiBUaGlzIG1lYW5zIHRoZSBwcm9ncmFtIGNvdWxkIHBvdGVudGlhbGx5IHVzZSBgUFRSX1RPX1NUQUNLYCwgYFBUUl9UT19BUkVOQWAsIG9yIGBQVFJfVE9fTUFQX1ZBTFVFYCBpbiBkaWZmZXJlbnQgYnJhbmNoZXMgb2YgdGhlIHByb2dyYW0uXG5cblRoZSBjb25zZXF1ZW5jZT8gVGhlIEpJVCBjb3VsZCBnZW5lcmF0ZSBjb2RlIG9wdGltaXplZCBmb3IgYSBzcGVjaWZpYyBwb2ludGVyIHR5cGUg4oCTIHNheSwgYXJlbmEgcG9pbnRlcnMsIHdoaWNoIG1pZ2h0IG5lY2Vzc2l0YXRlIHNwZWNpZmljIGJhc2UgcmVnaXN0ZXJzIG9yIGFkZHJlc3Mgc3BhY2UgY2FzdGluZyDigJMgYnV0LCBhdCBydW50aW1lLCB0aGUgc2FtZSBhdG9taWMgaW5zdHJ1Y3Rpb24gY291bGQgYmUgZXhlY3V0ZWQgd2l0aCBhIGRpZmZlcmVudCBwb2ludGVyIHR5cGUsIGxpa2UgYSBzdGFjayBwb2ludGVyLlxuXG5JZiB0aGUgdmVyaWZpZXIgZG9lc24ndCBjYXRjaCBpdCwgdGhpcyBjb3VsZCBjYXVzZSBtZW1vcnkgY29ycnVwdGlvbiwgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgb3Igb3RoZXIgaXNzdWVzLiBGb3IgaW5zdGFuY2UsIGFuIGF0b21pYyB3cml0ZSBvbiBhbiBhcmVuYSBhZGRyZXNzIHdoZW4gc3RhY2sgbWVtb3J5IGlzIGV4cGVjdGVkIGNvdWxkIGxlYWQgdG8gYSByZWFkIG9yIHdyaXRlIHRvIGFuIGludmFsaWQgYWRkcmVzcyBvciBwb3RlbnRpYWxseSBvdmVyd3JpdGUgc29tZXRoaW5nIGltcG9ydGFudC4gQ29udmVyc2VseSwgaWYgaXQgdGhpbmtzIGl0J3Mgd29ya2luZyB3aXRoIHN0YWNrIG1lbW9yeSB3aGVuIGl0J3MgcmVhbGx5IGFuIGFyZW5hIGFkZHJlc3MsIHRoYXQncyBhIHByb2JsZW0gdG9vLlxuXG5UaGUgcXVlc3Rpb24gdGhlbiBiZWNvbWVzOiBkb2VzIHRoaXMgYnVnIHVuaXF1ZWx5IGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IEtNU0FOIHdvdWxkIGRldGVjdD8gTXkgYXNzZXNzbWVudCBpcyBuby4gVGhpcyBpcyBhIGNsYXNzaWMgdmVyaWZpZXIgYnlwYXNzLCB3aGVyZSB0aGUgdmVyaWZpZXIgZmFpbHMgdG8gZW5mb3JjZSBtZW1vcnkgc2FmZXR5IHJ1bGVzLiBUaGlzIHR5cGljYWxseSBtYW5pZmVzdHMgYXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIG9yIG1lbW9yeSBjb3JydXB0aW9uLiBUaGVzZSBwcm9ibGVtcyBhcmUgY2F1Z2h0IGJ5IEtBU0FOLiBXaGlsZSB0aGVyZSdzIGEgdGhlb3JldGljYWwgcmlzayBvZiByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBhdG9taWMgaW5zdHJ1Y3Rpb25zIGxpa2UgYGxvY2sgKih1NjQgKikocjggKyAwKSArPSByOWAgbW9kaWZ5IG1lbW9yeSBpbiBwbGFjZS4gVGhleSBkb24ndCBjb3B5IHRoZSB2YWx1ZSBvZiB0aGUgbWVtb3J5IHRvIGEgcmVnaXN0ZXIgdGhhdCBtaWdodCB0aGVuIGJlIGxlYWtlZCwgZXhjZXB0IG1heWJlIGZvciBgQlBGX0ZFVENIYCBpbnN0cnVjdGlvbnMgd2hpY2ggcmV0dXJuIHRoZSBvbGQgdmFsdWUgaW4gYSByZWdpc3Rlci4gS0FTQU4gaXMgc3VmZmljaWVudCBmb3IgY2F0Y2hpbmcgdGhlIHJlc3VsdGluZyBPT0IgYWNjZXNzIGluIGFueSBjYXNlLCBzbyBLTVNBTiBpc24ndCBuZWVkZWQgaGVyZS4gVGhlIGJ1ZydzIHJvb3QgY2F1c2UgaXMgYSB2ZXJpZmllciBieXBhc3MgYWxsb3dpbmcgdGhlIG1peGluZyBvZiBwb2ludGVyIHR5cGVzLiBUaGUgc3RhbmRhcmQgS0FTQU4gY2hlY2tzIGFyZSBzdWZmaWNpZW50LlxuXG5Mb29raW5nIGF0IHRoZSBwYXRjaCBpdHNlbGYsIHRoZSBmaXggaXMgc3RyYWlnaHRmb3J3YXJkLiBUaGV5J3JlIHJlcGxhY2luZyB0aGUgb3JpZ2luYWwgYGlmIChpc19hcmVuYV9yZWcoZW52LCBpbnNuLVx1MDAzZWRzdF9yZWcpKWAgY29uZGl0aW9uIHdpdGggYSBkaXJlY3QgY2FsbCB0byBgc2F2ZV9hdXhfcHRyX3R5cGVgLCB1c2luZyB0aGUgZGVzdGluYXRpb24gcmVnaXN0ZXIncyB0eXBlLiBUaGlzIGVuc3VyZXMgdGhhdCB0aGUgcG9pbnRlciB0eXBlIGlzIGFsd2F5cyBzYXZlZCwgcmVnYXJkbGVzcyBvZiB0aGUgcG9pbnRlciB0eXBlLlxuXG5UaGUgdGVzdCBjYXNlIHByb3ZpZGVkIGNsZWFybHkgZGVtb25zdHJhdGVzIHRoZSB2ZXJpZmllciBieXBhc3M6ICBpdCB1c2VzIHRoZSBkZXN0aW5hdGlvbiByZWdpc3RlciBhcyBlaXRoZXIgYW4gYXJlbmEgb3Igc3RhY2sgcmVnaXN0ZXIuICBCZWNhdXNlIHRoZSB2ZXJpZmllciBhbGxvd3MgdGhlIHByb2dyYW0gdG8gbWl4IHBvaW50ZXIgdHlwZXMgaW4gZGlmZmVyZW50IGJyYW5jaGVzLCBhbmQgYmVjYXVzZSBgc2F2ZV9hdXhfcHRyX3R5cGVgIHdhcyAqbm90KiBiZWluZyBjYWxsZWQgaW4gYWxsIGNhc2VzIGJlZm9yZSwgdGhlIEpJVCB3b3VsZCBmYWlsIHRvIGNhdGNoIHRoZSBwb3RlbnRpYWwgbWlzbWF0Y2ggYW5kIHdvdWxkIGFsbG93IGFuIGF0b21pYyBSTVcgb3BlcmF0aW9uIG9uIGFuIGFyZW5hIHBvaW50ZXIsIHBvdGVudGlhbGx5IHdpdGggc3RhY2sgbWVtb3J5IGJlaW5nIHVzZWQuICBUaGlzIGJ5cGFzcyBtYWtlcyBpdCBhIHZlcmlmaWVyIGJ1ZyB0aGF0IHdpbGwgZ2VuZXJhdGUgYW4gT09CIG9yIG1lbW9yeSBjb3JydXB0aW9uLlxuXG5UaGVyZWZvcmUsIHNpbmNlIHRoaXMgaXMgYSB2ZXJpZmllciBieXBhc3MgYW5kIGNhbiBsZWFkIHRvIHN0YW5kYXJkIG1lbW9yeSBlcnJvcnMgY2F1Z2h0IGJ5IEtBU0FOLCBJJ2xsIHNldCBgTmVlZHNLTVNBTmAgdG8gZmFsc2UuIFRoZSBpc3N1ZSBkb2Vzbid0IHJlcXVpcmUgS01TQU4sIGFuZCBLQVNBTiB3aWxsIGJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggdGhlIHJlc3VsdGluZyBlcnJvcnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzNTQsIk91dHB1dFRva2VucyI6MTg3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA2OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDExOjE5OjMwLjc4ODIzMzc1MloiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBCUEYgdmVyaWZpZXIgYnVnIHdoZXJlIGBzYXZlX2F1eF9wdHJfdHlwZSgpYCB3YXMgbm90IGNhbGxlZCBmb3IgYWxsIHBvaW50ZXIgdHlwZXMgZHVyaW5nIGF0b21pYyByZWFkLW1vZGlmeS13cml0ZSAoUk1XKSBpbnN0cnVjdGlvbiB2ZXJpZmljYXRpb24uIFRoaXMgb21pc3Npb24gYWxsb3dlZCBhIG1hbGljaW91cyBCUEYgcHJvZ3JhbSB0byB1c2UgdGhlIHNhbWUgYXRvbWljIGluc3RydWN0aW9uIHdpdGggZGlmZmVyZW50IHBvaW50ZXIgdHlwZXMgKGUuZy4sIG1peGluZyBgUFRSX1RPX0FSRU5BYCBhbmQgYFBUUl9UT19TVEFDS2AgaW4gZGlmZmVyZW50IGJyYW5jaGVzKS4gU3VjaCB2ZXJpZmllciBieXBhc3NlcyB0eXBpY2FsbHkgbGVhZCB0byBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbWVtb3J5IGNvcnJ1cHRpb24gZHVlIHRvIGluY29ycmVjdCBKSVQgY29tcGlsYXRpb24gb3IgbWlzc2luZyBydW50aW1lIGNoZWNrcy4gVGhlc2UgdHlwZXMgb2YgbWVtb3J5IHNhZmV0eSB2aW9sYXRpb25zIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBCUEYgdmVyaWZpZXIgYnVnIHdoZXJlIGBzYXZlX2F1eF9wdHJfdHlwZSgpYCB3YXMgbm90IGNhbGxlZCBmb3IgYWxsIHBvaW50ZXIgdHlwZXMgZHVyaW5nIGF0b21pYyByZWFkLW1vZGlmeS13cml0ZSAoUk1XKSBpbnN0cnVjdGlvbiB2ZXJpZmljYXRpb24uIFRoaXMgb21pc3Npb24gYWxsb3dlZCBhIG1hbGljaW91cyBCUEYgcHJvZ3JhbSB0byB1c2UgdGhlIHNhbWUgYXRvbWljIGluc3RydWN0aW9uIHdpdGggZGlmZmVyZW50IHBvaW50ZXIgdHlwZXMgKGUuZy4sIG1peGluZyBgUFRSX1RPX0FSRU5BYCBhbmQgYFBUUl9UT19TVEFDS2AgaW4gZGlmZmVyZW50IGJyYW5jaGVzKS4gU3VjaCB2ZXJpZmllciBieXBhc3NlcyB0eXBpY2FsbHkgbGVhZCB0byBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbWVtb3J5IGNvcnJ1cHRpb24gZHVlIHRvIGluY29ycmVjdCBKSVQgY29tcGlsYXRpb24gb3IgbWlzc2luZyBydW50aW1lIGNoZWNrcy4gVGhlc2UgdHlwZXMgb2YgbWVtb3J5IHNhZmV0eSB2aW9sYXRpb25zIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowwt5bh[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-16 11:15:52 +0000 UTC FinishedAt: 2026-08-16 11:19:31 +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": "c93cbdb13f995f87b5356329b3fe551c80bb482d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "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": "c93cbdb13f995f87b5356329b3fe551c80bb482d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "8fc3091d-16ab-4ef6-aa07-77456a36db91" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "bpf_check" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-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+CgkJCTx0ZD4yMDI2LzA4LzE2IDExOjE4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2NoZWNrJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBCUEYgdmVyaWZpZXIgYnVnIHdoZXJlIGBzYXZlX2F1eF9wdHJfdHlwZSgpYCB3YXMgbm90IGNhbGxlZCBmb3IgYWxsIHBvaW50ZXIgdHlwZXMgZHVyaW5nIGF0b21pYyByZWFkLW1vZGlmeS13cml0ZSAoUk1XKSBpbnN0cnVjdGlvbiB2ZXJpZmljYXRpb24uIFRoaXMgb21pc3Npb24gYWxsb3dlZCBhIG1hbGljaW91cyBCUEYgcHJvZ3JhbSB0byB1c2UgdGhlIHNhbWUgYXRvbWljIGluc3RydWN0aW9uIHdpdGggZGlmZmVyZW50IHBvaW50ZXIgdHlwZXMgKGUuZy4sIG1peGluZyBgUFRSX1RPX0FSRU5BYCBhbmQgYFBUUl9UT19TVEFDS2AgaW4gZGlmZmVyZW50IGJyYW5jaGVzKS4gU3VjaCB2ZXJpZmllciBieXBhc3NlcyB0eXBpY2FsbHkgbGVhZCB0byBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbWVtb3J5IGNvcnJ1cHRpb24gZHVlIHRvIGluY29ycmVjdCBKSVQgY29tcGlsYXRpb24gb3IgbWlzc2luZyBydW50aW1lIGNoZWNrcy4gVGhlc2UgdHlwZXMgb2YgbWVtb3J5IHNhZmV0eSB2aW9sYXRpb25zIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXImIzM5O3MgaGFuZGxpbmcgb2YgYXRvbWljIHJlYWQtbW9kaWZ5LXdyaXRlIChSTVcpIGluc3RydWN0aW9ucyBieSBzYXZpbmcgdGhlIGF1eGlsaWFyeSBwb2ludGVyIHR5cGUgZm9yIGFsbCBkZXN0aW5hdGlvbiByZWdpc3RlcnMsIG5vdCBqdXN0IGFyZW5hIHJlZ2lzdGVycy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIGtlcm5lbCBCUEYgdmVyaWZpZXIgbG9naWMgdGhhdCBhZmZlY3RzIGhvdyBhdG9taWMgb3BlcmF0aW9ucyBhcmUgdmVyaWZpZWQgYW5kIGhhbmRsZWQsIHBhcnRpY3VsYXJseSB3aGVuIG1peGluZyBkaWZmZXJlbnQgcG9pbnRlciB0eXBlcyAobGlrZSBhcmVuYSBhbmQgc3RhY2sgcG9pbnRlcnMpIGluIHRoZSBzYW1lIGluc3RydWN0aW9uLiBUaGlzIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIHRoZSBicGYoKSBzeXNjYWxsIGFuZCBpcyB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDExOjE4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYzM3MDFhODFhYTU1ZThmOTgyNDgwODExZjY5NTRkZmIyOWFmMDEwMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gQXVnIDE2IDExOjE4OjIxIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuaW5kZXggZDE3ZjE0YjM1Yjc5Zi4uOTM0NjNjYWY1YzlhZCAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5AQCAtNjczOSwxMSAmIzQzOzY3MzksOSBAQCBzdGF0aWMgaW50IGNoZWNrX2F0b21pY19ybXcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG4gXG4tXHRpZiAoaXNfYXJlbmFfcmVnKGVudiwgaW5zbi1cdTAwM2Vkc3RfcmVnKSkge1xuLVx0XHRlcnIgPSBzYXZlX2F1eF9wdHJfdHlwZShlbnYsIFBUUl9UT19BUkVOQSwgZmFsc2UpO1xuLVx0XHRpZiAoZXJyKVxuLVx0XHRcdHJldHVybiBlcnI7XG4tXHR9XG4mIzQzO1x0ZXJyID0gc2F2ZV9hdXhfcHRyX3R5cGUoZW52LCBkc3RfcmVnLVx1MDAzZXR5cGUsIGZhbHNlKTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0cmV0dXJuIGVycjtcbiBcdC8qIENoZWNrIHdoZXRoZXIgd2UgY2FuIHdyaXRlIGludG8gdGhlIHNhbWUgbWVtb3J5LiAqL1xuIFx0ZXJyID0gY2hlY2tfbWVtX2FjY2VzcyhlbnYsIGVudi1cdTAwM2VpbnNuX2lkeCwgZHN0X3JlZywgYXJnbm9fZnJvbV9yZWcoaW5zbi1cdTAwM2Vkc3RfcmVnKSwgaW5zbi1cdTAwM2VvZmYsXG4gXHRcdFx0ICAgICAgIEJQRl9TSVpFKGluc24tXHUwMDNlY29kZSksIEJQRl9XUklURSwgLTEsIHRydWUsIGZhbHNlKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jXG5pbmRleCBiMjQxYmJjZjU0YThhLi5iMjJiYWIzMzMwMWFiIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jXG5AQCAtNjM3LDYgJiM0Mzs2MzcsNDUgQEAgaW50IG5vbl9hcmVuYV9wdHJfYWRkX3RvX2FyZW5hX3B0cih2b2lkICpjdHgpXG4gXG4gI2VuZGlmXG4gXG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2luc24gYWRkcl9zcGFjZV9jYXN0X2luc24gPSB7XG4mIzQzO1x0LmNvZGUgPSAweGJmLFxuJiM0MztcdC5kc3RfcmVnID0gQlBGX1JFR183LFxuJiM0MztcdC5zcmNfcmVnID0gQlBGX1JFR183LFxuJiM0MztcdC5vZmYgPSAxLFxuJiM0MztcdC5pbW0gPSAxLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7U0VDKFwmIzM0O3NvY2tldFwmIzM0OylcbiYjNDM7X19kZXNjcmlwdGlvbihcJiMzNDthcmVuYSBhbmQgc3RhY2sgYXRvbWljIGF0IHRoZSBzYW1lIGluc3RydWN0aW9uXCYjMzQ7KVxuJiM0MztfX2ZhaWx1cmUgX19tc2coXCYjMzQ7c2FtZSBpbnNuIGNhbm5vdCBiZSB1c2VkIHdpdGggZGlmZmVyZW50IHBvaW50ZXJzXCYjMzQ7KVxuJiM0MztfX2FyY2hfeDg2XzY0XG4mIzQzO19fbG9hZF9pZl9KSVRlZCgpXG4mIzQzO19fbmFrZWQgdm9pZCBtaXhlZF9hcmVuYV9zdGFja19hdG9taWModm9pZClcbiYjNDM7e1xuJiM0MztcdGFzbSB2b2xhdGlsZSAoXCYjMzQ7XHRcdFx0XHRcdFxcXG4mIzQzO1x0cjEgPSAlW2FyZW5hXSBsbDtcdFx0XHRcdFxcXG4mIzQzO1x0cjYgPSByMTA7XHRcdFx0XHRcdFxcXG4mIzQzO1x0cjYgJiM0Mzs9IC04O1x0XHRcdFx0XHRcXFxuJiM0MztcdHI5ID0gMDtcdFx0XHRcdFx0XFxcbiYjNDM7XHQqKHU2NCAqKShyNiAmIzQzOyAwKSA9IHI5O1x0XHRcdFxcXG4mIzQzO1x0cjcgPSA4MTkyO1x0XHRcdFx0XHRcXFxuJiM0MztcdC44Ynl0ZSAlW2FkZHJfc3BhY2VfY2FzdF07XHRcdFx0XFxcbiYjNDM7XHRjYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07XHRcdFx0XFxcbiYjNDM7XHRpZiB3MCAhPSAwIGdvdG8gMWY7XHRcdFx0XHRcXFxuJiM0MztcdHI4ID0gcjY7XHRcdFx0XHRcdFxcXG4mIzQzO1x0Z290byAyZjtcdFx0XHRcdFx0XFxcbiYjNDM7MTpcdHI4ID0gcjc7XHRcdFx0XHRcdFxcXG4mIzQzOzI6XHRyOSA9IDE7XHRcdFx0XHRcdFxcXG4mIzQzO1x0bG9jayAqKHU2NCAqKShyOCAmIzQzOyAwKSAmIzQzOz0gcjk7XHRcdFx0XFxcbiYjNDM7XHRyMCA9IDA7XHRcdFx0XHRcdFxcXG4mIzQzO1x0ZXhpdDtcdFx0XHRcdFx0XHRcXFxuJiM0MztcJiMzNDtcdDpcbiYjNDM7XHQ6IF9faW1tX2FkZHIoYXJlbmEpLFxuJiM0MztcdCAgX19pbW1faW5zbihhZGRyX3NwYWNlX2Nhc3QsIGFkZHJfc3BhY2VfY2FzdF9pbnNuKSxcbiYjNDM7XHQgIF9faW1tKGJwZl9nZXRfcHJhbmRvbV91MzIpXG4mIzQzO1x0OiBfX2Nsb2JiZXJfYWxsKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgX19ub2lubGluZVxuIHUzMiBfX2FyZW5hICpjaGVja19hcmVuYV9hcmdfbm9uZ2xvYmFsKHUzMiBfX2FyZW5hICphcmcpXG4ge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDExOjE4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9jaGVjayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyJiMzOTtzIGhhbmRsaW5nIG9mIGF0b21pYyByZWFkLW1vZGlmeS13cml0ZSAoUk1XKSBpbnN0cnVjdGlvbnMgYnkgc2F2aW5nIHRoZSBhdXhpbGlhcnkgcG9pbnRlciB0eXBlIGZvciBhbGwgZGVzdGluYXRpb24gcmVnaXN0ZXJzLCBub3QganVzdCBhcmVuYSByZWdpc3RlcnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBrZXJuZWwgQlBGIHZlcmlmaWVyIGxvZ2ljIHRoYXQgYWZmZWN0cyBob3cgYXRvbWljIG9wZXJhdGlvbnMgYXJlIHZlcmlmaWVkIGFuZCBoYW5kbGVkLCBwYXJ0aWN1bGFybHkgd2hlbiBtaXhpbmcgZGlmZmVyZW50IHBvaW50ZXIgdHlwZXMgKGxpa2UgYXJlbmEgYW5kIHN0YWNrIHBvaW50ZXJzKSBpbiB0aGUgc2FtZSBpbnN0cnVjdGlvbi4gVGhpcyBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSB0aGUgYnBmKCkgc3lzY2FsbCBhbmQgaXMgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGMzNzAxYTgxYWE1NWU4Zjk4MjQ4MDgxMWY2OTU0ZGZiMjlhZjAxMDEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIEF1ZyAxNiAxMToxODoyMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuYwppbmRleCBkMTdmMTRiMzViNzlmLi45MzQ2M2NhZjVjOWFkIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi92ZXJpZmllci5jCkBAIC02NzM5LDExICYjNDM7NjczOSw5IEBAIHN0YXRpYyBpbnQgY2hlY2tfYXRvbWljX3JtdyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LAogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKLQlpZiAoaXNfYXJlbmFfcmVnKGVudiwgaW5zbi0mZ3Q7ZHN0X3JlZykpIHsKLQkJZXJyID0gc2F2ZV9hdXhfcHRyX3R5cGUoZW52LCBQVFJfVE9fQVJFTkEsIGZhbHNlKTsKLQkJaWYgKGVycikKLQkJCXJldHVybiBlcnI7Ci0JfQomIzQzOwllcnIgPSBzYXZlX2F1eF9wdHJfdHlwZShlbnYsIGRzdF9yZWctJmd0O3R5cGUsIGZhbHNlKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCXJldHVybiBlcnI7CiAJLyogQ2hlY2sgd2hldGhlciB3ZSBjYW4gd3JpdGUgaW50byB0aGUgc2FtZSBtZW1vcnkuICovCiAJZXJyID0gY2hlY2tfbWVtX2FjY2VzcyhlbnYsIGVudi0mZ3Q7aW5zbl9pZHgsIGRzdF9yZWcsIGFyZ25vX2Zyb21fcmVnKGluc24tJmd0O2RzdF9yZWcpLCBpbnNuLSZndDtvZmYsCiAJCQkgICAgICAgQlBGX1NJWkUoaW5zbi0mZ3Q7Y29kZSksIEJQRl9XUklURSwgLTEsIHRydWUsIGZhbHNlKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMKaW5kZXggYjI0MWJiY2Y1NGE4YS4uYjIyYmFiMzMzMDFhYiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMKQEAgLTYzNyw2ICYjNDM7NjM3LDQ1IEBAIGludCBub25fYXJlbmFfcHRyX2FkZF90b19hcmVuYV9wdHIodm9pZCAqY3R4KQogCiAjZW5kaWYKIAomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2luc24gYWRkcl9zcGFjZV9jYXN0X2luc24gPSB7CiYjNDM7CS5jb2RlID0gMHhiZiwKJiM0MzsJLmRzdF9yZWcgPSBCUEZfUkVHXzcsCiYjNDM7CS5zcmNfcmVnID0gQlBGX1JFR183LAomIzQzOwkub2ZmID0gMSwKJiM0MzsJLmltbSA9IDEsCiYjNDM7fTsKJiM0MzsKJiM0MztTRUMoJiMzNDtzb2NrZXQmIzM0OykKJiM0MztfX2Rlc2NyaXB0aW9uKCYjMzQ7YXJlbmEgYW5kIHN0YWNrIGF0b21pYyBhdCB0aGUgc2FtZSBpbnN0cnVjdGlvbiYjMzQ7KQomIzQzO19fZmFpbHVyZSBfX21zZygmIzM0O3NhbWUgaW5zbiBjYW5ub3QgYmUgdXNlZCB3aXRoIGRpZmZlcmVudCBwb2ludGVycyYjMzQ7KQomIzQzO19fYXJjaF94ODZfNjQKJiM0MztfX2xvYWRfaWZfSklUZWQoKQomIzQzO19fbmFrZWQgdm9pZCBtaXhlZF9hcmVuYV9zdGFja19hdG9taWModm9pZCkKJiM0Mzt7CiYjNDM7CWFzbSB2b2xhdGlsZSAoJiMzNDsJCQkJCVwKJiM0MzsJcjEgPSAlW2FyZW5hXSBsbDsJCQkJXAomIzQzOwlyNiA9IHIxMDsJCQkJCVwKJiM0MzsJcjYgJiM0Mzs9IC04OwkJCQkJXAomIzQzOwlyOSA9IDA7CQkJCQlcCiYjNDM7CSoodTY0ICopKHI2ICYjNDM7IDApID0gcjk7CQkJXAomIzQzOwlyNyA9IDgxOTI7CQkJCQlcCiYjNDM7CS44Ynl0ZSAlW2FkZHJfc3BhY2VfY2FzdF07CQkJXAomIzQzOwljYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07CQkJXAomIzQzOwlpZiB3MCAhPSAwIGdvdG8gMWY7CQkJCVwKJiM0MzsJcjggPSByNjsJCQkJCVwKJiM0MzsJZ290byAyZjsJCQkJCVwKJiM0MzsxOglyOCA9IHI3OwkJCQkJXAomIzQzOzI6CXI5ID0gMTsJCQkJCVwKJiM0MzsJbG9jayAqKHU2NCAqKShyOCAmIzQzOyAwKSAmIzQzOz0gcjk7CQkJXAomIzQzOwlyMCA9IDA7CQkJCQlcCiYjNDM7CWV4aXQ7CQkJCQkJXAomIzQzOyYjMzQ7CToKJiM0MzsJOiBfX2ltbV9hZGRyKGFyZW5hKSwKJiM0MzsJICBfX2ltbV9pbnNuKGFkZHJfc3BhY2VfY2FzdCwgYWRkcl9zcGFjZV9jYXN0X2luc24pLAomIzQzOwkgIF9faW1tKGJwZl9nZXRfcHJhbmRvbV91MzIpCiYjNDM7CTogX19jbG9iYmVyX2FsbCk7CiYjNDM7fQomIzQzOwogc3RhdGljIF9fbm9pbmxpbmUKIHUzMiBfX2FyZW5hICpjaGVja19hcmVuYV9hcmdfbm9uZ2xvYmFsKHUzMiBfX2FyZW5hICphcmcpCiB7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDExOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3NTEKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzMDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgQlBGIFZlcmlmaWVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIHRoZSBCUEYgdmVyaWZpZXIsIHNwZWNpZmljYWxseSB3aXRoaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuIFRoZSBjaGFuZ2UgaXMgZm9jdXNlZCBvbiB0aGUgYGNoZWNrX2F0b21pY19ybXdgIGZ1bmN0aW9uLiBJbml0aWFsbHksIGl0IHdhcyBjb25kaXRpb25hbGx5IHNhdmluZyB0aGUgYXV4aWxpYXJ5IHBvaW50ZXIgdHlwZSwgb25seSBpZiB0aGUgZGVzdGluYXRpb24gcmVnaXN0ZXIgKGBpbnNuLSZndDtkc3RfcmVnYCkgd2FzIGFuIGFyZW5hIHJlZ2lzdGVyLiBOb3csIHRoZSBwYXRjaCB1bmNvbmRpdGlvbmFsbHkgc2F2ZXMgdGhlIHR5cGUgdXNpbmcgYGRzdF9yZWctJmd0O3R5cGVgLiBUaGF0JiMzOTtzIGEgZGVmaW5pdGUgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gaG93IHRoZSB2ZXJpZmllciBvcGVyYXRlcyBvbiBhdG9taWMgUk1XIGluc3RydWN0aW9ucy4gSSBuZWVkIHRvIGJlIHByZWNpc2UgYWJvdXQgdGhhdDogaXQgYWZmZWN0cyB0aGUgcG9pbnRlciAqdHlwZSogdXNlZCBpbiB0aGVzZSBhdG9taWMgb3BlcmF0aW9ucywgd2hpY2ggaXMgY29yZSBmdW5jdGlvbmFsaXR5IGluIHRoaXMgdmVyaWZpZXIuCgpUaGUgdGVzdCBjYXNlIGFkZGVkLCBgbWl4ZWRfYXJlbmFfc3RhY2tfYXRvbWljYCwgc2VlbXMgZGVzaWduZWQgdG8gaGlnaGxpZ2h0IHRoaXMgY2hhbmdlLiBJdCYjMzk7cyBhdHRlbXB0aW5nIHRvIHVzZSB0aGUgc2FtZSBpbnN0cnVjdGlvbiB3aXRoIGRpZmZlcmVudCBwb2ludGVyIHR5cGVzOiBhcmVuYSBhbmQgc3RhY2sgcG9pbnRlcnMuIEEgY2xhc3NpYyBjb3ZlcmFnZSB0ZXN0LgoKR2l2ZW4gdGhhdCB0aGlzIHRvdWNoZXMgdGhlIGNvcmUgQlBGIHZlcmlmaWVyLCBhbmQgaW1wYWN0cyBob3cgYXRvbWljIGluc3RydWN0aW9ucyBhcmUgdmFsaWRhdGVkLCB0aGlzIGlzICphYnNvbHV0ZWx5KiBzb21ldGhpbmcgdGhhdCB3YXJyYW50cyBjYXJlZnVsIHNjcnV0aW55LiBXb3J0aHkgb2YgZnV6emluZywgbm8gZG91YnQuIFRoZSBrZXkgZnVuY3Rpb25zIHRvIGludmVzdGlnYXRlIGhlcmUgYXJlIGBzYXZlX2F1eF9wdHJfdHlwZWAgYW5kIGBjaGVja19hdG9taWNfcm13YCB3aXRoaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuIEkgc2hvdWxkIGFsc28gZG91YmxlIGNoZWNrIHRoYXQgYEJQRl9TWVNDQUxMYCBpcyBlbmFibGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDExOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NoZWNrX2F0b21pY19ybXcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jPTY2MzA9c3RhdGljIGludCBjaGVja19zdG9yZV9yZWcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NjY3LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjY2Njg6c3RhdGljIGludCBjaGVja19hdG9taWNfcm13KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjY2OS1cdFx0XHQgICAgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz02NzkxPXN0YXRpYyBpbnQgY2hlY2tfYXRvbWljKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjgwMy1cdGNhc2UgQlBGX0NNUFhDSEc6XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjgwNDpcdFx0cmV0dXJuIGNoZWNrX2F0b21pY19ybXcoZW52LCBpbnNuKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02ODA1LVx0Y2FzZSBCUEZfTE9BRF9BQ1E6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMTE6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzY0MQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIHRoZSBBdG9taWMgUk1XIENoZWNrKioKCkFscmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCBgY2hlY2tfYXRvbWljX3Jtd2AsIGFuZCBpdCYjMzk7cyBkZWZpbmVkIGFzIGEgc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gSSBpbW1lZGlhdGVseSBrbm93IHRoYXQgbWVhbnMgaXQgaGFzIGludGVybmFsIGxpbmthZ2Ugd2l0aGluIHRoZSBjdXJyZW50IHRyYW5zbGF0aW9uIHVuaXQuIEl0JiMzOTtzIG5vdCB2aXNpYmxlIG91dHNpZGUgb2YgdGhlIGZpbGUgaXQmIzM5O3MgZGVjbGFyZWQgaW4sIHdoaWNoIHN1Z2dlc3RzIGl0JiMzOTtzIGEgaGVscGVyIGZ1bmN0aW9uIHNwZWNpZmljYWxseSBmb3IgdGhpcyBtb2R1bGUuIE5vdywgSSBzZWUgaXQmIzM5O3MgY2FsbGVkIGZyb20gYGNoZWNrX2F0b21pY2AuIFRoYXQgZ2l2ZXMgbWUgdGhlIGltbWVkaWF0ZSBjb250ZXh0LiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgYGNoZWNrX2F0b21pY2AgdG8gZnVsbHkgZ3Jhc3Agd2hhdCBgY2hlY2tfYXRvbWljX3Jtd2AgaXMgZG9pbmcgYW5kIGl0cyBwdXJwb3NlIHdpdGhpbiB0aGUgbGFyZ2VyIHNjaGVtZS4gTGV0JiMzOTtzIGRlbHZlIGludG8gdGhlIGxvZ2ljIG9mIGBjaGVja19hdG9taWNgIGFuZCBzZWUgd2hhdCYjMzk7cyBnb2luZyBvbi4gSSYjMzk7bSBndWVzc2luZyBgY2hlY2tfYXRvbWljX3Jtd2AgaGFuZGxlcyBhIHNwZWNpZmljIHR5cGUgb2YgYXRvbWljIG9wZXJhdGlvbiB3aXRoaW4gdGhhdCBicm9hZGVyIGBjaGVja19hdG9taWNgIGZ1bmN0aW9uLiBJJiMzOTtsbCBmb2N1cyBvbiBob3cgdGhleSBpbnRlcmFjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAxMToxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjaGVja19hdG9taWMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jPTY2MzA9c3RhdGljIGludCBjaGVja19zdG9yZV9yZWcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NjY3LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjY2Njg6c3RhdGljIGludCBjaGVja19hdG9taWNfcm13KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjY2OS1cdFx0XHQgICAgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NzUyLVxua2VybmVsL2JwZi92ZXJpZmllci5jOjY3NTM6c3RhdGljIGludCBjaGVja19hdG9taWNfbG9hZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY3NTQtXHRcdFx0ICAgICBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTY3NzEtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6Njc3MjpzdGF0aWMgaW50IGNoZWNrX2F0b21pY19zdG9yZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY3NzMtXHRcdFx0ICAgICAgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NzkwLVxua2VybmVsL2JwZi92ZXJpZmllci5jOjY3OTE6c3RhdGljIGludCBjaGVja19hdG9taWMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTY3OTIte1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02ODAzLVx0Y2FzZSBCUEZfQ01QWENIRzpcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2ODA0Olx0XHRyZXR1cm4gY2hlY2tfYXRvbWljX3JtdyhlbnYsIGluc24pO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTY4MDUtXHRjYXNlIEJQRl9MT0FEX0FDUTpcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjgxMC1cdFx0fVxua2VybmVsL2JwZi92ZXJpZmllci5jOjY4MTE6XHRcdHJldHVybiBjaGVja19hdG9taWNfbG9hZChlbnYsIGluc24pO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTY4MTItXHRjYXNlIEJQRl9TVE9SRV9SRUw6XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTY4MTctXHRcdH1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2ODE4Olx0XHRyZXR1cm4gY2hlY2tfYXRvbWljX3N0b3JlKGVudiwgaW5zbik7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjgxOS1cdGRlZmF1bHQ6XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE4MDcwPXN0YXRpYyBpbnQgZG9fY2hlY2tfaW5zbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBib29sICpkb19wcmludF9zdGF0ZSlcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTgwODctXHRcdGlmIChCUEZfTU9ERShpbnNuLVx1MDAzZWNvZGUpID09IEJQRl9BVE9NSUMpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTgwODg6XHRcdFx0cmV0dXJuIGNoZWNrX2F0b21pYyhlbnYsIGluc24pO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE4MDg5LVx0XHRyZXR1cm4gY2hlY2tfc3RvcmVfcmVnKGVudiwgaW5zbiwgZmFsc2UpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDExOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ2MzcKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhpcyBjb2RlOgoKKipGaW5kaW5nIHRoZSBWZXJpZmllciYjMzk7cyBFbnRyeSBQb2ludCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIHZlcmlmaWNhdGlvbiBwcm9jZXNzICphY3R1YWxseSogYmVnaW5zLiBJIHNlZSBhIGZldyBzdGF0aWMgZnVuY3Rpb25zIGhlcmUgdGhhdCBsb29rIHBvdGVudGlhbGx5IGltcG9ydGFudDogYGNoZWNrX2F0b21pY2AsIGBkb19jaGVja19pbnNuYCwgYW5kIHRoZW4gYGRvX2NoZWNrX21haW5gIG9yIGp1c3QgYGRvX2NoZWNrYC4gVGhlIGZhY3QgdGhhdCBgY2hlY2tfYXRvbWljYCBhbmQgYGRvX2NoZWNrX2luc25gIGFyZSBzdGF0aWMgc3VnZ2VzdHMgdGhleSBhcmUgaW50ZXJuYWwgaGVscGVycywgbGlrZWx5IHBhcnQgb2YgYSBsYXJnZXIgZnVuY3Rpb24uIE15IGd1dCBzYXlzIHRoYXQgYGRvX2NoZWNrX21haW5gIG9yIGBkb19jaGVja2AgaXMgKnByb2JhYmx5KiB0aGUgdG9wLWxldmVsIGVudHJ5IHBvaW50LCB0aGUgZnVuY3Rpb24gdGhhdCBraWNrcyBvZmYgdGhlIHdob2xlIHZlcmlmaWNhdGlvbiBwcm9jZXNzLiBUaW1lIHRvIGRpZyBpbiBhbmQgY29uZmlybSB0aGF0IGFzc3VtcHRpb24uIExldCYjMzk7cyBzZWUgaWYgSSBjYW4gcGlucG9pbnQgdGhhdCBtYWluIGVudHJ5IHBvaW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDExOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RvX2NoZWNrX2luc24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jPTE4MDEyPXN0YXRpYyBpbnQgY2hlY2tfaW5kaXJlY3RfanVtcChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4MDY5LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjE4MDcwOnN0YXRpYyBpbnQgZG9fY2hlY2tfaW5zbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBib29sICpkb19wcmludF9zdGF0ZSlcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODA3MS17XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE4MTgwPXN0YXRpYyBpbnQgZG9fY2hlY2soc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTgzMjktXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTgzMzA6XHRcdGVyciA9IGRvX2NoZWNrX2luc24oZW52LCBcdTAwMjZkb19wcmludF9zdGF0ZSk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTgzMzEtXHRcdGlmIChlcnJvcl9yZWNvdmVyYWJsZV93aXRoX25vc3BlYyhlcnIpIFx1MDAyNlx1MDAyNiBzdGF0ZS1cdTAwM2VzcGVjdWxhdGl2ZSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDExOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxNzAKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIGNvZGU6CgoqKlN0YXRpYyBGdW5jdGlvbiBBbmFseXNpcyoqCgpPa2F5LCBzbyBgZG9fY2hlY2tgIGlzIGFub3RoZXIgb25lIG9mIHRoZXNlIHN0YXRpYyBmdW5jdGlvbnMuIFRoYXQmIzM5O3MgYSBrZXkgZGV0YWlsIHRvIG5vdGUsIGJlY2F1c2UgaXQgbWVhbnMgaXRzIHNjb3BlIGlzIGxpbWl0ZWQgdG8gdGhpcyBjb21waWxhdGlvbiB1bml0LiBUaGlzIGNvbnRleHQgaXMgaW1wb3J0YW50IGJlY2F1c2UgaXQgbmFycm93cyBkb3duIHRoZSBwbGFjZXMgd2hlcmUgSSBuZWVkIHRvIGxvb2sgZm9yIGNhbGxzIG9yIHBvdGVudGlhbCBpbnRlcmFjdGlvbnMuIE5vdywgdGhlIG5leHQgc3RlcCBpbiBteSBtZW50YWwgcHJvY2VzcyBpcyB0byBmaWd1cmUgb3V0IGhvdyB0aGlzIGZ1bmN0aW9uIGZpdHMgaW50byB0aGUgb3ZlcmFsbCBzY2hlbWUuIExldCYjMzk7cyBzZWUuLi4gd2hhdCYjMzk7cyBpdCBjb25uZWN0ZWQgdG8/IEkgbmVlZCB0byB0cmFjayBkb3duIHRoZSBgYnBmX2NoZWNrYCBmdW5jdGlvbi4gVGhhdCBzZWVtcyBsaWtlIHRoZSBsb2dpY2FsIG5leHQgc3RlcCB0byB1bmRlcnN0YW5kIHRoZSBicm9hZGVyIGltcGxpY2F0aW9ucyBvZiBgZG9fY2hlY2tgLiBJJiMzOTtsbCBzdGFydCB3aXRoIGEgc2VhcmNoIG9yIGNyb3NzLXJlZmVyZW5jZSBmb3IgYGJwZl9jaGVja2AgYW5kIGFuYWx5emUgaXRzIHJlbGF0aW9uc2hpcCB0byBgZG9fY2hlY2tgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAxMToxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfY2hlY2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jPTU4PXN0YXRpYyBib29sIGJwZl9nbG9iYWxfcGVyY3B1X21hX3NldDtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy01OS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2MDovKiBicGZfY2hlY2soKSBpcyBhIHN0YXRpYyBjb2RlIGFuYWx5emVyIHRoYXQgd2Fsa3MgZUJQRiBwcm9ncmFtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjEtICogaW5zdHJ1Y3Rpb24gYnkgaW5zdHJ1Y3Rpb24gYW5kIHVwZGF0ZXMgcmVnaXN0ZXIvc3RhY2sgc3RhdGUuXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTEyNTMzPXN0YXRpYyBpbnQgcHJvY2Vzc19rZl9hcmdfcHRyX3RvX3JidHJlZV9ub2RlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyNTQ0LSAqIExTTSBob29rcyBhbmQgaXRlcnMgKGJvdGggc2xlZXBhYmxlIGFuZCBub24tc2xlZXBhYmxlKSBhcmUgc2FmZS5cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMjU0NTogKiBBbnkgc2xlZXBhYmxlIHByb2dzIGFyZSBhbHNvIHNhZmUgc2luY2UgYnBmX2NoZWNrX2F0dGFjaF90YXJnZXQoKSBlbmZvcmNlXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTI1NDYtICogdGhlbSBjYW4gb25seSBiZSBhdHRhY2hlZCB0byBzb21lIHNwZWNpZmljIGhvb2sgcG9pbnRzLlxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xOTg2Nj1zdGF0aWMgYm9vbCBhdHRhY2hfdXNlc190cmFtcG9saW5lX3JldHZhbChlbnVtIGJwZl9hdHRhY2hfdHlwZSB0eXBlKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTg3OS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTg4MDppbnQgYnBmX2NoZWNrX2F0dGFjaF90YXJnZXQoc3RydWN0IGJwZl92ZXJpZmllcl9sb2cgKmxvZyxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTg4MS1cdFx0XHQgICAgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0yMDMwMz1zdGF0aWMgaW50IGNoZWNrX2F0dGFjaF9idGZfaWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjAzMzMtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjAzMzQ6XHRyZXQgPSBicGZfY2hlY2tfYXR0YWNoX3RhcmdldChcdTAwMjZlbnYtXHUwMDNlbG9nLCBwcm9nLCB0Z3RfcHJvZywgYnRmX2lkLCBcdTAwMjZ0Z3RfaW5mbyk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjAzMzUtXHRpZiAocmV0KVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDQwMi1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMDQwMzppbnQgYnBmX2NoZWNrX2F0dGFjaF9idGZfaWRfbXVsdGkoc3RydWN0IGJ0ZiAqYnRmLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBidGZfaWQsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjA0MDQtXHRcdFx0XHQgIHN0cnVjdCBicGZfYXR0YWNoX3RhcmdldF9pbmZvICp0Z3RfaW5mbylcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MjA4MzY9c3RhdGljIGVudW0gYnBmX3NpZ19rZXlyaW5nIGJwZl9jbGFzc2lmeV9rZXlyaW5nKHMzMiBrZXlyaW5nX2lkKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDg1MC0vKlxua2VybmVsL2JwZi92ZXJpZmllci5jOjIwODUxOiAqIFZlcmlmeSB0aGUgUEtDUyM3IHNpZ25hdHVyZSBvZiBhIGxvYWRlZCBwcm9ncmFtLiBDYWxsZWQgZnJvbSBicGZfY2hlY2soKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwODUyLSAqIG9uY2UgdGhlIHByb2dyYW0mIzM5O3MgbWV0YWRhdGEgbWFwcyBoYXZlIGJlZW4gcmVzb2x2ZWQgaW50byB1c2VkX21hcHMsIHNvXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTIwODU5PXN0YXRpYyBpbnQgYnBmX3Byb2dfdmVyaWZ5X3NpZ25hdHVyZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDk3NS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMDk3NjppbnQgYnBmX2NoZWNrKHN0cnVjdCBicGZfcHJvZyAqKnByb2csIHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cixcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDk3Ny1cdCAgICAgIHN0cnVjdCBicGZfbG9nX2F0dHIgKmF0dHJfbG9nKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDk5MC1cdC8qICYjMzk7c3RydWN0IGJwZl92ZXJpZmllcl9lbnYmIzM5OyBjYW4gYmUgZ2xvYmFsLCBidXQgc2luY2UgaXQmIzM5O3Mgbm90IHNtYWxsLFxua2VybmVsL2JwZi92ZXJpZmllci5jOjIwOTkxOlx0ICogYWxsb2NhdGUvZnJlZSBpdCBldmVyeSB0aW1lIGJwZl9jaGVjaygpIGlzIGNhbGxlZFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwOTkyLVx0ICovXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTIxMTAxLVx0LyogVmFsaWRhdGUgQlRGIGFnYWluc3QgdGhlIGNvbXBsZXRlIHN1YnByb2dyYW0gbGF5b3V0IGFuZCBhcHBseSBDTy1SRS4gKi9cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMTEwMjpcdHJldCA9IGJwZl9jaGVja19idGZfaW5mbyhlbnYsIGF0dHIsIHVhdHRyKTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMTEwMy1cdGlmIChyZXQgXHUwMDNjIDApXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTIxMTIxLVxua2VybmVsL2JwZi92ZXJpZmllci5jOjIxMTIyOlx0cmV0ID0gYnBmX2NoZWNrX2NmZyhlbnYpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTIxMTIzLVx0aWYgKHJldCBcdTAwM2MgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMTE6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjUxNwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBDb3JlIExvZ2ljOiBUaGUgYGJwZl9jaGVja2AgRnVuY3Rpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGNvZGUsIGFuZCB0aGUgY2VudHJhbCBmb2N1cyBoZXJlIHNlZW1zIHRvIGJlIGBicGZfY2hlY2tgLiBJdCBtYWtlcyBzZW5zZTsgYXMgdGhlIG5hbWUgaW1wbGllcywgaXQmIzM5O3MgbGlrZWx5IHRoZSBwcmltYXJ5IGdhdGVrZWVwZXIgZm9yIHZlcmlmeWluZyBCUEYgcHJvZ3JhbXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBnbyBkaXJlY3RseSB0byB0aGlzIGZ1bmN0aW9uLiBJdCYjMzk7cyB0aGUgbW9zdCBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIHRoZSBjb3JlIHZhbGlkYXRpb24gcHJvY2Vzcy4gVGhlIGVudGlyZSBpbnRlZ3JpdHkgb2YgdGhlIHN5c3RlbSBoaW5nZXMgb24gdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMTE6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW50IGJwZl9jaGVjayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTk4NjY9c3RhdGljIGJvb2wgYXR0YWNoX3VzZXNfdHJhbXBvbGluZV9yZXR2YWwoZW51bSBicGZfYXR0YWNoX3R5cGUgdHlwZSlcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk4NzktXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk4ODA6aW50IGJwZl9jaGVja19hdHRhY2hfdGFyZ2V0KHN0cnVjdCBicGZfdmVyaWZpZXJfbG9nICpsb2csXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk4ODEtXHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MjAzMDM9c3RhdGljIGludCBjaGVja19hdHRhY2hfYnRmX2lkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwNDAyLVxua2VybmVsL2JwZi92ZXJpZmllci5jOjIwNDAzOmludCBicGZfY2hlY2tfYXR0YWNoX2J0Zl9pZF9tdWx0aShzdHJ1Y3QgYnRmICpidGYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyIGJ0Zl9pZCxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDQwNC1cdFx0XHRcdCAgc3RydWN0IGJwZl9hdHRhY2hfdGFyZ2V0X2luZm8gKnRndF9pbmZvKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0yMDg1OT1zdGF0aWMgaW50IGJwZl9wcm9nX3ZlcmlmeV9zaWduYXR1cmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjA5NzUtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjA5NzY6aW50IGJwZl9jaGVjayhzdHJ1Y3QgYnBmX3Byb2cgKipwcm9nLCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjA5NzctXHQgICAgICBzdHJ1Y3QgYnBmX2xvZ19hdHRyICphdHRyX2xvZylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMTE6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzA5NwoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDE2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBGdXp6aW5nIFN0cmF0ZWd5OiBJbml0aWFsIFRob3VnaHRzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgdG8gYXBwcm9hY2ggZnV6emluZyB0aGlzIEJQRiBjb2RlLiBUaGUgdGFzayBmb2N1c2VzIG1lIG9uIGBicGZfY2hlY2tgIC0gdGhhdCYjMzk7cyB0aGUgcHJpbWFyeSBmdW5jdGlvbiBpbiB0aGUgc3BvdGxpZ2h0LiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGNhc3QgYSB3aWRlciBuZXQuIEFyZSB0aGVyZSBvdGhlciBmdW5jdGlvbnMgaW4gdGhlIHZpY2luaXR5IHRoYXQgbWlnaHQgYWxzbyBiZW5lZml0IGZyb20gZnV6emluZz8gYGJwZl9jaGVja2AgZmVlbHMgcHJldHR5IGdlbmVyaWMsIHdoaWNoIGNvdWxkIG1ha2UgaXQgYSBsZXNzLXRoYW4taWRlYWwgdGFyZ2V0IGZvciBza2V3aW5nIHRoZSB0ZXN0IGRpc3RyaWJ1dGlvbi4gVGhlIGNvZGUgY2hhbmdlIEkmIzM5O20gaW52ZXN0aWdhdGluZyBpcyBzcGVjaWZpY2FsbHkgYXJvdW5kIGBjaGVja19hdG9taWNfcm13YCwgc28gaXMgdGhlcmUgYW5vdGhlciBmdW5jdGlvbiB0aGF0IGludGVyYWN0cyB3aXRoIGl0IGRpcmVjdGx5PwoKUGVyaGFwcyBgYnBmX2NoZWNrYCBpcyB0aGUgYmVzdCBjaG9pY2UgYWZ0ZXIgYWxsLiBXYWl0LCB0aGUgaW5zdHJ1Y3Rpb25zLi4uIGFoLCBoZXJlIHdlIGdvLiBUaGUgZ3VpZGFuY2UgZXhwbGljaXRseSB0ZWxscyBtZSB0byBhdm9pZCBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucywgZmF2b3Jpbmcgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMuIFRoaXMgbWFrZXMgc2Vuc2UgZnJvbSBhIHRlc3RpbmcgcGVyc3BlY3RpdmUuCgpBbHJpZ2h0LCBgYnBmX2NoZWNrYCAqaXMqIGFuIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9uLiBCdXQganVzdCB0byBiZSB0aG9yb3VnaCwgSSBzaG91bGQgbG9vayBpbnRvIHRoZSBzb3VyY2UgZmlsZSB0byBzZWUgaWYgdGhlcmUgaXMgYW5vdGhlciBleHBvc2VkIGZ1bmN0aW9uIHRoYXQgbWF5IGFsc28gYmUgYSBnb29kIHRhcmdldC4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayBga2VybmVsL2JwZi92ZXJpZmllci5jYCBmb3IgZXhwb3J0ZWQgZnVuY3Rpb25zLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGF2YWlsYWJsZSBvcHRpb25zIGFuZCBlbnN1cmUgSSYjMzk7bSBtYWtpbmcgdGhlIG1vc3QgaW5mb3JtZWQgZGVjaXNpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDExOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDExOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc1OTgKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgQlBGIEZ1bmN0aW9uYWxpdHkqKgoKT2theSwgc28gSSBuZWVkIHRvIGRpZyBpbnRvIGhvdyBgYnBmX2NoZWNrYCBpcyBiZWluZyB1c2VkIHdpdGhpbiB0aGUga2VybmVsJiMzOTtzIEJQRiBpbmZyYXN0cnVjdHVyZS4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBnbyBzdHJhaWdodCB0byB0aGUgc291cmNlLiBTcGVjaWZpY2FsbHksIEkgc2hvdWxkIGxvb2sgd2l0aGluIHRoZSBga2VybmVsL2JwZi9gIGRpcmVjdG9yeS4gVGhhdCYjMzk7cyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBodW50aW5nIGZvciB0aGUgZGVmaW5pdGlvbiBhbmQgYW55IHNpZ25pZmljYW50IHVzZXMgb2YgdGhhdCBmdW5jdGlvbi4gSSYjMzk7bSBleHBlY3RpbmcgdGhpcyB3aWxsIGxpa2VseSByZXZlYWwgY3JpdGljYWwgcGFydHMgb2YgdGhlIHZlcmlmaWVyIG9yIHBlcmhhcHMgc2VjdXJpdHkgY2hlY2tzLiBJJiMzOTttIHJlYWxseSBsb29raW5nIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bmN0aW9uJiMzOTtzIHB1cnBvc2UsIGhvdyBpdCYjMzk7cyBjYWxsZWQsIGFuZCB3aGF0IGl0cyByZXR1cm4gdmFsdWVzIHNpZ25pZnkgaW4gdGhlIGNvbnRleHQgb2YgQlBGIHByb2dyYW0gZXhlY3V0aW9uIGFuZCB2YWxpZGF0aW9uLiBIb3BlZnVsbHksIHRoZSBzZWFyY2ggcmVzdWx0cyB3aWxsIHBvaW50IG1lIHRvd2FyZCBrZXkgYXJlYXMgZm9yIGRlZXBlciBpbnZlc3RpZ2F0aW9uLCBsaWtlIHJlbGF0ZWQgZXJyb3IgaGFuZGxpbmcgb3Igc3BlY2lmaWMgc2VjdXJpdHkgY29uc3RyYWludHMgaXQgZW5mb3JjZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDExOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9jaGVjayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvYnBmX2l0ZXIuYz01MDQ9aW50IGJwZl9pdGVyX2xpbmtfYXR0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cixcbi0tXG5rZXJuZWwvYnBmL2JwZl9pdGVyLmMtNTI1LVx0aWYgKCFicGZwdHJfaXNfbnVsbCh1bGluZm8pKSB7XG5rZXJuZWwvYnBmL2JwZl9pdGVyLmM6NTI2Olx0XHRlcnIgPSBicGZfY2hlY2tfdWFyZ190YWlsX3plcm8odWxpbmZvLCBzaXplb2YobGluZm8pLFxua2VybmVsL2JwZi9icGZfaXRlci5jLTUyNy1cdFx0XHRcdFx0ICAgICAgIGxpbmZvX2xlbik7XG4tLVxua2VybmVsL2JwZi9idGYuYz02ODQ5PWJvb2wgYnRmX2N0eF9hY2Nlc3MoaW50IG9mZiwgaW50IHNpemUsIGVudW0gYnBmX2FjY2Vzc190eXBlIHR5cGUsXG4tLVxua2VybmVsL2JwZi9idGYuYy03MDMwLVx0XHRcdHJldHVybiBmYWxzZTtcbmtlcm5lbC9icGYvYnRmLmM6NzAzMTpcdFx0LyogQ2hlY2tlZCBieSBicGZfY2hlY2tfYXR0YWNoX3RhcmdldCAqL1xua2VybmVsL2JwZi9idGYuYy03MDMyLVx0XHR0bmFtZSAmIzQzOz0gc2l6ZW9mKFwmIzM0O2J0Zl90cmFjZV9cJiMzNDspIC0gMTtcbi0tXG5rZXJuZWwvYnBmL2NmZy5jPTQ1MT1zdGF0aWMgaW50IHZpc2l0X2luc24oaW50IHQsIHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4tLVxua2VybmVsL2JwZi9jZmcuYy01ODYtICovXG5rZXJuZWwvYnBmL2NmZy5jOjU4NzppbnQgYnBmX2NoZWNrX2NmZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxua2VybmVsL2JwZi9jZmcuYy01ODgte1xuLS1cbmtlcm5lbC9icGYvY2dyb3VwLmM9MTc5Mz1FWFBPUlRfU1lNQk9MKF9fY2dyb3VwX2JwZl9ydW5fZmlsdGVyX3NvY2tfb3BzKTtcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTc5NC1cbmtlcm5lbC9icGYvY2dyb3VwLmM6MTc5NTppbnQgX19jZ3JvdXBfYnBmX2NoZWNrX2Rldl9wZXJtaXNzaW9uKHNob3J0IGRldl90eXBlLCB1MzIgbWFqb3IsIHUzMiBtaW5vcixcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTc5Ni1cdFx0XHRcdCAgICAgIHNob3J0IGFjY2VzcywgZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlKVxuLS1cbmtlcm5lbC9icGYvY2hlY2tfYnRmLmM9MzE9c3RhdGljIGludCBwcmVwYXJlX2J0Zl9mdW5jKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi9jaGVja19idGYuYy03MC1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5mdW5jczsgaSYjNDM7JiM0MzspIHtcbmtlcm5lbC9icGYvY2hlY2tfYnRmLmM6NzE6XHRcdHJldCA9IGJwZl9jaGVja191YXJnX3RhaWxfemVybyh1cmVjb3JkLCBrcmVjX3NpemUsIHVyZWNfc2l6ZSk7XG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jLTcyLVx0XHRpZiAocmV0KSB7XG4tLVxua2VybmVsL2JwZi9jaGVja19idGYuYz0yMTM9c3RhdGljIGludCBjaGVja19idGZfbGluZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvY2hlY2tfYnRmLmMtMjUzLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfbGluZm87IGkmIzQzOyYjNDM7KSB7XG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jOjI1NDpcdFx0ZXJyID0gYnBmX2NoZWNrX3VhcmdfdGFpbF96ZXJvKHVsaW5mbywgZXhwZWN0ZWRfc2l6ZSwgcmVjX3NpemUpO1xua2VybmVsL2JwZi9jaGVja19idGYuYy0yNTUtXHRcdGlmIChlcnIpIHtcbi0tXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jPTM0MT1zdGF0aWMgaW50IGNoZWNrX2NvcmVfcmVsbyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvY2hlY2tfYnRmLmMtMzc2LVx0XHQvKiBmdXR1cmUgcHJvb2Zpbmcgd2hlbiBzaXplb2YoYnBmX2NvcmVfcmVsbykgY2hhbmdlcyAqL1xua2VybmVsL2JwZi9jaGVja19idGYuYzozNzc6XHRcdGVyciA9IGJwZl9jaGVja191YXJnX3RhaWxfemVybyh1X2NvcmVfcmVsbywgZXhwZWN0ZWRfc2l6ZSwgcmVjX3NpemUpO1xua2VybmVsL2JwZi9jaGVja19idGYuYy0zNzgtXHRcdGlmIChlcnIpIHtcbi0tXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jPTQxMD1pbnQgYnBmX3ByZXBhcmVfYnRmX2luZm8oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jLTQzNy1cbmtlcm5lbC9icGYvY2hlY2tfYnRmLmM6NDM4OmludCBicGZfY2hlY2tfYnRmX2luZm8oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbmtlcm5lbC9icGYvY2hlY2tfYnRmLmMtNDM5LVx0XHQgICAgICAgY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsXG4tLVxua2VybmVsL2JwZi9jb3JlLmMtMTYtICogQW5kaSBLbGVlbiAtIEZpeCBhIGZldyBiYWQgYnVncyBhbmQgcmFjZXMuXG5rZXJuZWwvYnBmL2NvcmUuYzoxNzogKiBLcmlzIEthdHRlcmpvaG4gLSBBZGRlZCBtYW55IGFkZGl0aW9uYWwgY2hlY2tzIGluIGJwZl9jaGVja19jbGFzc2ljKClcbmtlcm5lbC9icGYvY29yZS5jLTE4LSAqL1xuLS1cbmtlcm5lbC9icGYvY29yZS5jPTI1NzQ9Ym9vbCBicGZfcHJvZ19tYXBfY29tcGF0aWJsZShzdHJ1Y3QgYnBmX21hcCAqbWFwLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKmZwKVxuLS1cbmtlcm5lbC9icGYvY29yZS5jLTI1ODYtXG5rZXJuZWwvYnBmL2NvcmUuYzoyNTg3OnN0YXRpYyBpbnQgYnBmX2NoZWNrX3RhaWxfY2FsbChjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKmZwKVxua2VybmVsL2JwZi9jb3JlLmMtMjU4OC17XG4tLVxua2VybmVsL2JwZi9jb3JlLmM9MjY2ND1zdHJ1Y3QgYnBmX3Byb2cgKl9fYnBmX3Byb2dfc2VsZWN0X3J1bnRpbWUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9wcm9nICpmcCxcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYy0yNzEwLVx0ICovXG5rZXJuZWwvYnBmL2NvcmUuYzoyNzExOlx0KmVyciA9IGJwZl9jaGVja190YWlsX2NhbGwoZnApO1xua2VybmVsL2JwZi9jb3JlLmMtMjcxMi1cbi0tXG5rZXJuZWwvYnBmL2NvcmUuYz0zMzg5PXN0YXRpYyBub2lubGluZSB2b2lkIGJwZl9wcm9nX3JlcG9ydF9tYXlfZ290b192aW9sYXRpb24odm9pZClcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYy0zNDA0LVxua2VybmVsL2JwZi9jb3JlLmM6MzQwNTp1NjQgYnBmX2NoZWNrX3RpbWVkX21heV9nb3RvKHN0cnVjdCBicGZfdGltZWRfbWF5X2dvdG8gKnApXG5rZXJuZWwvYnBmL2NvcmUuYy0zNDA2LXtcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz03MT1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzICogY29uc3QgYnBmX21hcF90eXBlc1tdID0ge1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTkwLSAqL1xua2VybmVsL2JwZi9zeXNjYWxsLmM6OTE6aW50IGJwZl9jaGVja191YXJnX3RhaWxfemVybyhicGZwdHJfdCB1YWRkcixcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTkyLVx0XHRcdCAgICAgc2l6ZV90IGV4cGVjdGVkX3NpemUsXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9MjkxNz1zdGF0aWMgaW50IGJwZl9wcm9nX2xvYWQodW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLCBzdHJ1Y3QgYnBmX2xvZ19hdHRyICphdHRyX2xvZylcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zMTMyLVx0LyogcnVuIGVCUEYgdmVyaWZpZXIgKi9cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjMxMzM6XHRlcnIgPSBicGZfY2hlY2soXHUwMDI2cHJvZywgYXR0ciwgdWF0dHIsIGF0dHJfbG9nKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTMxMzQtXHRpZiAoZXJyIFx1MDAzYyAwKVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTM2MzQ9c3RhdGljIGludCBicGZfdHJhY2luZ19wcm9nX2F0dGFjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtMzc2Ni1cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjM3Njc6XHRcdGVyciA9IGJwZl9jaGVja19hdHRhY2hfdGFyZ2V0KE5VTEwsIHByb2csIHRndF9wcm9nLCBidGZfaWQsXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zNzY4LVx0XHRcdFx0XHQgICAgICBcdTAwMjZ0Z3RfaW5mbyk7XG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9NTA5OT1zdGF0aWMgaW50IGJwZl9wcm9nX2dldF9pbmZvX2J5X2ZkKHN0cnVjdCBmaWxlICpmaWxlLFxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTUxMTMtXHRsZW4gPSBvZmZzZXRvZmVuZChzdHJ1Y3QgYnBmX3Byb2dfaW5mbywgYXR0YWNoX2J0Zl9pZCk7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo1MTE0Olx0ZXJyID0gYnBmX2NoZWNrX3VhcmdfdGFpbF96ZXJvKFVTRVJfQlBGUFRSKHVpbmZvKSwgbGVuLCBpbmZvX2xlbik7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01MTE1LVx0aWYgKGVycilcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz01Mzg5PXN0YXRpYyBpbnQgYnBmX21hcF9nZXRfaW5mb19ieV9mZChzdHJ1Y3QgZmlsZSAqZmlsZSxcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01Mzk5LVx0bGVuID0gb2Zmc2V0b2ZlbmQoc3RydWN0IGJwZl9tYXBfaW5mbywgaGFzaF9zaXplKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjU0MDA6XHRlcnIgPSBicGZfY2hlY2tfdWFyZ190YWlsX3plcm8oVVNFUl9CUEZQVFIodWluZm8pLCBsZW4sIGluZm9fbGVuKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU0MDEtXHRpZiAoZXJyKVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTU0NjA9c3RhdGljIGludCBicGZfYnRmX2dldF9pbmZvX2J5X2ZkKHN0cnVjdCBmaWxlICpmaWxlLFxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU0NjgtXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo1NDY5Olx0ZXJyID0gYnBmX2NoZWNrX3VhcmdfdGFpbF96ZXJvKFVTRVJfQlBGUFRSKHVpbmZvKSwgc2l6ZW9mKCp1aW5mbyksIGluZm9fbGVuKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU0NzAtXHRpZiAoZXJyKVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTU0NzY9c3RhdGljIGludCBicGZfbGlua19nZXRfaW5mb19ieV9mZChzdHJ1Y3QgZmlsZSAqZmlsZSxcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01NDg2LVxua2VybmVsL2JwZi9zeXNjYWxsLmM6NTQ4NzpcdGVyciA9IGJwZl9jaGVja191YXJnX3RhaWxfemVybyhVU0VSX0JQRlBUUih1aW5mbyksIHNpemVvZihpbmZvKSwgaW5mb19sZW4pO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtNTQ4OC1cdGlmIChlcnIpXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmM9NTUxOD1zdGF0aWMgaW50IHRva2VuX2dldF9pbmZvX2J5X2ZkKHN0cnVjdCBmaWxlICpmaWxlLFxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU1MjYtXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo1NTI3Olx0ZXJyID0gYnBmX2NoZWNrX3VhcmdfdGFpbF96ZXJvKFVTRVJfQlBGUFRSKHVpbmZvKSwgc2l6ZW9mKCp1aW5mbyksIGluZm9fbGVuKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU1MjgtXHRpZiAoZXJyKVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jPTYzMDM9c3RhdGljIGludCBfX3N5c19icGYoZW51bSBicGZfY21kIGNtZCwgYnBmcHRyX3QgdWF0dHIsIHVuc2lnbmVkIGludCBzaXplLFxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYzMTEtXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2MzEyOlx0ZXJyID0gYnBmX2NoZWNrX3VhcmdfdGFpbF96ZXJvKHVhdHRyLCBzaXplb2YoYXR0ciksIHNpemUpO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtNjMxMy1cdGlmIChlcnIpXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjMyMy1cdGlmIChjbWQgXHUwMDI2IEJQRl9DT01NT05fQVRUUlMpIHtcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjYzMjQ6XHRcdGVyciA9IGJwZl9jaGVja191YXJnX3RhaWxfemVybyh1YXR0cl9jb21tb24sXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02MzI1LVx0XHRcdFx0XHQgICAgICAgb2Zmc2V0b2ZlbmQoc3RydWN0IGJwZl9jb21tb25fYXR0ciwgbG9nX3RydWVfc2l6ZSksXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9MTEyMz1pbnQgYnBmX3RyYW1wb2xpbmVfbGlua19jZ3JvdXBfc2hpbShzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTEzMy1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjExMzQ6XHRlcnIgPSBicGZfY2hlY2tfYXR0YWNoX3RhcmdldChOVUxMLCBwcm9nLCBOVUxMLFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTEzNS1cdFx0XHRcdCAgICAgIHByb2ctXHUwMDNlYXV4LVx1MDAzZWF0dGFjaF9idGZfaWQsXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmM9MTY2OT1pbnQgYnBmX3RyYW1wb2xpbmVfbXVsdGlfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyICppZHMsXG4tLVxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTY4Mi1cbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jOjE2ODM6XHRcdGVyciA9IGJwZl9jaGVja19hdHRhY2hfYnRmX2lkX211bHRpKGJ0ZiwgcHJvZywgaWRzW2ldLCBcdTAwMjZ0Z3RfaW5mbyk7XG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNjg0LVx0XHRpZiAoZXJyKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz01OD1zdGF0aWMgYm9vbCBicGZfZ2xvYmFsX3BlcmNwdV9tYV9zZXQ7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTktXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjA6LyogYnBmX2NoZWNrKCkgaXMgYSBzdGF0aWMgY29kZSBhbmFseXplciB0aGF0IHdhbGtzIGVCUEYgcHJvZ3JhbVxua2VybmVsL2JwZi92ZXJpZmllci5jLTYxLSAqIGluc3RydWN0aW9uIGJ5IGluc3RydWN0aW9uIGFuZCB1cGRhdGVzIHJlZ2lzdGVyL3N0YWNrIHN0YXRlLlxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMjUzMz1zdGF0aWMgaW50IHByb2Nlc3Nfa2ZfYXJnX3B0cl90b19yYnRyZWVfbm9kZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjU0NC0gKiBMU00gaG9va3MgYW5kIGl0ZXJzIChib3RoIHNsZWVwYWJsZSBhbmQgbm9uLXNsZWVwYWJsZSkgYXJlIHNhZmUuXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTI1NDU6ICogQW55IHNsZWVwYWJsZSBwcm9ncyBhcmUgYWxzbyBzYWZlIHNpbmNlIGJwZl9jaGVja19hdHRhY2hfdGFyZ2V0KCkgZW5mb3JjZVxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyNTQ2LSAqIHRoZW0gY2FuIG9ubHkgYmUgYXR0YWNoZWQgdG8gc29tZSBzcGVjaWZpYyBob29rIHBvaW50cy5cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTk4NjY9c3RhdGljIGJvb2wgYXR0YWNoX3VzZXNfdHJhbXBvbGluZV9yZXR2YWwoZW51bSBicGZfYXR0YWNoX3R5cGUgdHlwZSlcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk4NzktXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk4ODA6aW50IGJwZl9jaGVja19hdHRhY2hfdGFyZ2V0KHN0cnVjdCBicGZfdmVyaWZpZXJfbG9nICpsb2csXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk4ODEtXHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MjAzMDM9c3RhdGljIGludCBjaGVja19hdHRhY2hfYnRmX2lkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwMzMzLVxua2VybmVsL2JwZi92ZXJpZmllci5jOjIwMzM0Olx0cmV0ID0gYnBmX2NoZWNrX2F0dGFjaF90YXJnZXQoXHUwMDI2ZW52LVx1MDAzZWxvZywgcHJvZywgdGd0X3Byb2csIGJ0Zl9pZCwgXHUwMDI2dGd0X2luZm8pO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTIwMzM1LVx0aWYgKHJldClcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjA0MDItXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjA0MDM6aW50IGJwZl9jaGVja19hdHRhY2hfYnRmX2lkX211bHRpKHN0cnVjdCBidGYgKmJ0Ziwgc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIgYnRmX2lkLFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwNDA0LVx0XHRcdFx0ICBzdHJ1Y3QgYnBmX2F0dGFjaF90YXJnZXRfaW5mbyAqdGd0X2luZm8pXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTIwODM2PXN0YXRpYyBlbnVtIGJwZl9zaWdfa2V5cmluZyBicGZfY2xhc3NpZnlfa2V5cmluZyhzMzIga2V5cmluZ19pZClcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjA4NTAtLypcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMDg1MTogKiBWZXJpZnkgdGhlIFBLQ1MjNyBzaWduYXR1cmUgb2YgYSBsb2FkZWQgcHJvZ3JhbS4gQ2FsbGVkIGZyb20gYnBmX2NoZWNrKClcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDg1Mi0gKiBvbmNlIHRoZSBwcm9ncmFtJiMzOTtzIG1ldGFkYXRhIG1hcHMgaGF2ZSBiZWVuIHJlc29sdmVkIGludG8gdXNlZF9tYXBzLCBzb1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0yMDg1OT1zdGF0aWMgaW50IGJwZl9wcm9nX3ZlcmlmeV9zaWduYXR1cmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjA5NzUtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjA5NzY6aW50IGJwZl9jaGVjayhzdHJ1Y3QgYnBmX3Byb2cgKipwcm9nLCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjA5NzctXHQgICAgICBzdHJ1Y3QgYnBmX2xvZ19hdHRyICphdHRyX2xvZylcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjA5OTAtXHQvKiAmIzM5O3N0cnVjdCBicGZfdmVyaWZpZXJfZW52JiMzOTsgY2FuIGJlIGdsb2JhbCwgYnV0IHNpbmNlIGl0JiMzOTtzIG5vdCBzbWFsbCxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMDk5MTpcdCAqIGFsbG9jYXRlL2ZyZWUgaXQgZXZlcnkgdGltZSBicGZfY2hlY2soKSBpcyBjYWxsZWRcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDk5Mi1cdCAqL1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMTEwMS1cdC8qIFZhbGlkYXRlIEJURiBhZ2FpbnN0IHRoZSBjb21wbGV0ZSBzdWJwcm9ncmFtIGxheW91dCBhbmQgYXBwbHkgQ08tUkUuICovXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjExMDI6XHRyZXQgPSBicGZfY2hlY2tfYnRmX2luZm8oZW52LCBhdHRyLCB1YXR0cik7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjExMDMtXHRpZiAocmV0IFx1MDAzYyAwKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMTEyMS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMTEyMjpcdHJldCA9IGJwZl9jaGVja19jZmcoZW52KTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMTEyMy1cdGlmIChyZXQgXHUwMDNjIDApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDExOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExODc1CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMjU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBCUEYgVmVyaWZpZXIgRW50cnkgUG9pbnQqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBCUEYgdmVyaWZpZXIgc3R1ZmYuIEkgc2VlIHRoYXQgYGJwZl9jaGVja2AgaXMgY2FsbGVkIGZyb20gYGJwZl9wcm9nX2xvYWRgIGluIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AuIFRoaXMgc3Ryb25nbHkgc3VnZ2VzdHMgdGhhdCBgYnBmX2NoZWNrYCBpcyB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludCBmb3IgdGhlIHZlcmlmaWVyLCB3aGljaCBtYWtlcyBzZW5zZS4gSSYjMzk7bSB3b25kZXJpbmcsIHRob3VnaCwgaXMgdGhlcmUgKmFub3RoZXIqIGZ1bmN0aW9uIEkgc2hvdWxkIGJlIGNvbnNpZGVyaW5nPyBgYnBmX3Byb2dfbG9hZGAgaXRzZWxmIGlzIHN0YXRpYywgc28gSSBjYW4gZGlzbWlzcyB0aGF0LiBUaGUgcmVhbCBzeXNjYWxsIGVudHJ5IHBvaW50IGlzIGBzeXNfYnBmYC4gR2l2ZW4gdGhlIGluc3RydWN0aW9ucywgYGJwZl9jaGVja2Agc2VlbXMgbGlrZSB0aGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIGZvY3VzIOKAkyBpdOKAmXMgKnRoZSogdmVyaWZpZXImIzM5O3MgZ2F0ZXdheS4KCkJ1dCB0aGVuLCBJIHBhdXNlLiBgYnBmX2NoZWNrYCBpcyBhIHByZXR0eSBnZW5lcmljIG5hbWUuIFRoZSBpbnN0cnVjdGlvbnMgZW1waGFzaXplIGF2b2lkaW5nICYjMzQ7Z2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMmIzM0OyB0byBwcmV2ZW50IHRlc3QgZGlzdHJpYnV0aW9uIHNrZXdpbmcuIFRoZXkgc3VnZ2VzdCBmYXZvcmluZyBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgb3ZlciBpbnRlcm5hbCwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMuIFRoaXMgZ2l2ZXMgbWUgcGF1c2UuIElzIGBicGZfY2hlY2tgICp0b28qIGdlbmVyaWM/CgpJIHRoaW5rIEkmIzM5O3ZlIGNvbnZpbmNlZCBteXNlbGYuIEl0JiMzOTtzIHRoZSB2ZXJpZmllciBlbnRyeSBwb2ludCwgcGVyaW9kLiBJdCYjMzk7cyBub3QgYSBob3QtcGF0aCBmdW5jdGlvbiwgc2luY2UgaXQmIzM5O3Mgb25seSBjYWxsZWQgZHVyaW5nIHByb2dyYW0gbG9hZC4gU28sIGl0JiMzOTtzIGFjdHVhbGx5ICppZGVhbCogZnJvbSB0aGUgcGVyc3BlY3RpdmUgb2YgZm9jdXNpbmcgb24gYSB3ZWxsLWRlZmluZWQgcG9pbnQgb2YgZW50cnkuCgpOb3csIGxldCYjMzk7cyBzd2l0Y2ggZ2VhcnMgYSBiaXQuIFRoZSB0ZXN0IEkmIzM5O20gd29ya2luZyB3aXRoIHV0aWxpemVzIHRoZSBgYXJlbmFgIGZlYXR1cmUuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBgYXJlbmFgIGZlYXR1cmUgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cy4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgY29uZmlncy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMTE6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthcmVuYSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDExOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNTI3CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgaXQ6CgoqKkRpZ2dpbmcgaW50byBNZW1vcnkgQWxsb2NhdGlvbiBmb3IgQlBGKioKCk9rYXksIHNvIHdlJiMzOTt2ZSBnb3QgYSBCUEYtcmVsYXRlZCBtZW1vcnkgaXNzdWUsIGFuZCBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBpdCYjMzk7cyBzdGVtbWluZyBmcm9tLiBNeSBndXQgZmVlbGluZywgYmFzZWQgb24gcHJldmlvdXMgZXhwZXJpZW5jZXMsIHNheXMgdGhlIGFyZW5hIGFsbG9jYXRvciBpcyBhIHByaW1lIHN1c3BlY3QuIExldCYjMzk7cyBzdGFydCBieSB6ZXJvaW5nIGluIG9uIGBrZXJuZWwvYnBmL2FyZW5hLmNgIHNwZWNpZmljYWxseS4gVGhhdCBmaWxlJiMzOTtzIHRoZSBoZWFydCBvZiBCUEYmIzM5O3MgbWVtb3J5IG1hbmFnZW1lbnQuIEkgc3VzcGVjdCB0aGUgaXNzdWUgY291bGQgYmUgcmVsYXRlZCB0byBhbGxvY2F0aW9uIHNpemVzLCBmcmFnbWVudGF0aW9uLCBvciBwZXJoYXBzIHNvbWUgc3VidGxlIHJhY2UgY29uZGl0aW9ucyB3aXRoIGNvbmN1cnJlbnQgYWNjZXNzLiBBbHRlcm5hdGl2ZWx5LCB0aGUgaXNzdWUgY291bGQgYmUgd2l0aCBzaW1pbGFyIGZpbGVzIGhhbmRsaW5nIHRoZSBzYW1lIG9wZXJhdGlvbnMsIEkgd2lsbCBuZWVkIHRvIGV4cGFuZCB0aGUgc2VhcmNoIGlmIEkgY29tZSB1cCBlbXB0eS4gSSYjMzk7bGwgc3RhcnQgYnkgcmVhZGluZyB0aGUgY29kZSwgZm9jdXNpbmcgb24gdGhlIGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbiBwYXRocywgYW5kIHNlZSBpZiBhbnl0aGluZyBqdW1wcyBvdXQgaW1tZWRpYXRlbHkuIElmIG5vdCwgSSYjMzk7bGwgcHJvYmFibHkgbmVlZCB0byBicmVhayBvdXQgc29tZSBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHN0YXJ0IHRyYWNpbmcgbWVtb3J5IG9wZXJhdGlvbnMuIFRoaXMgc2hvdWxkIHBvaW50IG1lIGluIHRoZSByaWdodCBkaXJlY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDExOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FyZW5hJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDExMjEgbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbmtlcm5lbC9icGYvTWFrZWZpbGU9MTk9aWZlcSAoJChDT05GSUdfTU1VKSQoQ09ORklHXzY0QklUKSx5eSlcbmtlcm5lbC9icGYvTWFrZWZpbGU6MjA6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gYXJlbmEubyByYW5nZV90cmVlLm9cbmtlcm5lbC9icGYvTWFrZWZpbGUtMjEtZW5kaWZcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTYtLypcbmtlcm5lbC9icGYvYXJlbmEuYzoxNzogKiBicGZfYXJlbmEgaXMgYSBzcGFyc2VseSBwb3B1bGF0ZWQgc2hhcmVkIG1lbW9yeSByZWdpb24gYmV0d2VlbiBicGYgcHJvZ3JhbSBhbmRcbmtlcm5lbC9icGYvYXJlbmEuYy0xOC0gKiB1c2VyIHNwYWNlIHByb2Nlc3MuXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTIyLSAqIGtlcm5fdm1fc3RhcnQgZmZmZmM5MDAwMWU2OTAwMCAvLyBwaWNrZWQgYnkgZ2V0X3ZtX2FyZWEoKVxua2VybmVsL2JwZi9hcmVuYS5jOjIzOiAqIEZvciB1c2VyIHNwYWNlIGFsbCBwb2ludGVycyB3aXRoaW4gdGhlIGFyZW5hIGFyZSBub3JtYWwgOC1ieXRlIGFkZHJlc3Nlcy5cbmtlcm5lbC9icGYvYXJlbmEuYy0yNC0gKiBJbiB0aGlzIGV4YW1wbGUgN2Y3ZDI2MjAwMDAwIGlzIHRoZSBhZGRyZXNzIG9mIHRoZSBmaXJzdCBwYWdlIChwZ29mZj0wKS5cbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtMzAtICpcbmtlcm5lbC9icGYvYXJlbmEuYzozMTogKiBCUEYgSklUcyBnZW5lcmF0ZSB0aGUgZm9sbG93aW5nIGNvZGUgdG8gYWNjZXNzIGFyZW5hOlxua2VybmVsL2JwZi9hcmVuYS5jLTMyLSAqICAgbW92IGVheCwgZWF4ICAvLyBlYXggaGFzIGxvd2VyIDMyLWJpdCBvZiB1c2VyIHBvaW50ZXJcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtMzktICogaW50byBrZXJuZWwgYW5kIHVzZXIgdm1hLlxua2VybmVsL2JwZi9hcmVuYS5jOjQwOiAqIGJwZiBwcm9ncmFtIGNhbiBhbGxvY2F0ZSBhIHBhZ2UgdmlhIGJwZl9hcmVuYV9hbGxvY19wYWdlcygpIGtmdW5jXG5rZXJuZWwvYnBmL2FyZW5hLmMtNDEtICogd2hpY2ggd2lsbCBpbnNlcnQgaXQgaW50byBrZXJuZWwgdm1fYXJlYS5cbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtNDgtXG5rZXJuZWwvYnBmL2FyZW5hLmM6NDk6c3RhdGljIHZvaWQgYXJlbmFfZnJlZV9wYWdlcyhzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSwgbG9uZyB1YWRkciwgbG9uZyBwYWdlX2NudCwgYm9vbCBzbGVlcGFibGUpO1xua2VybmVsL2JwZi9hcmVuYS5jLTUwLVxua2VybmVsL2JwZi9hcmVuYS5jOjUxOnN0cnVjdCBicGZfYXJlbmEge1xua2VybmVsL2JwZi9hcmVuYS5jLTUyLVx0c3RydWN0IGJwZl9tYXAgbWFwO1xuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy01OS1cdHJxc3BpbmxvY2tfdCBzcGlubG9jaztcbmtlcm5lbC9icGYvYXJlbmEuYzo2MDpcdC8qIG51bWJlciBvZiBwYWdlcyBjdXJyZW50bHkgcG9wdWxhdGVkIGluIHRoZSBhcmVuYSAqL1xua2VybmVsL2JwZi9hcmVuYS5jLTYxLVx0dTY0IG5yX3BhZ2VzO1xuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy03MS1cbmtlcm5lbC9icGYvYXJlbmEuYzo3MjpzdGF0aWMgdm9pZCBhcmVuYV9mcmVlX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xua2VybmVsL2JwZi9hcmVuYS5jOjczOnN0YXRpYyB2b2lkIGFyZW5hX2ZyZWVfaXJxKHN0cnVjdCBpcnFfd29yayAqaXcpO1xua2VybmVsL2JwZi9hcmVuYS5jLTc0LVxua2VybmVsL2JwZi9hcmVuYS5jOjc1OnN0cnVjdCBhcmVuYV9mcmVlX3NwYW4ge1xua2VybmVsL2JwZi9hcmVuYS5jLTc2LVx0c3RydWN0IGxsaXN0X25vZGUgbm9kZTtcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtODAtXG5rZXJuZWwvYnBmL2FyZW5hLmM6ODE6dTY0IGJwZl9hcmVuYV9nZXRfa2Vybl92bV9zdGFydChzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSlcbmtlcm5lbC9icGYvYXJlbmEuYy04Mi17XG5rZXJuZWwvYnBmL2FyZW5hLmM6ODM6XHRyZXR1cm4gYXJlbmEgPyAodTY0KSAobG9uZykgYXJlbmEtXHUwMDNla2Vybl92bS1cdTAwM2VhZGRyICYjNDM7IEdVQVJEX1NaIC8gMiA6IDA7XG5rZXJuZWwvYnBmL2FyZW5hLmMtODQtfVxua2VybmVsL2JwZi9hcmVuYS5jLTg1LVxua2VybmVsL2JwZi9hcmVuYS5jOjg2OnU2NCBicGZfYXJlbmFfZ2V0X3VzZXJfdm1fc3RhcnQoc3RydWN0IGJwZl9hcmVuYSAqYXJlbmEpXG5rZXJuZWwvYnBmL2FyZW5hLmMtODcte1xua2VybmVsL2JwZi9hcmVuYS5jOjg4Olx0cmV0dXJuIGFyZW5hID8gYXJlbmEtXHUwMDNldXNlcl92bV9zdGFydCA6IDA7XG5rZXJuZWwvYnBmL2FyZW5hLmMtODktfVxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy05MS0vKipcbmtlcm5lbC9icGYvYXJlbmEuYzo5MjogKiBicGZfYXJlbmFfbWFwX2tlcm5fdm1fc3RhcnQgLSBrZXJuX3ZtX3N0YXJ0IGxvb2t1cCBieSBzdHJ1Y3QgYnBmX21hcCAqXG5rZXJuZWwvYnBmL2FyZW5hLmMtOTMtICogQG1hcDogYSBCUEZfTUFQX1RZUEVfQVJFTkEgbWFwXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTk2LSAqL1xua2VybmVsL2JwZi9hcmVuYS5jOjk3OnU2NCBicGZfYXJlbmFfbWFwX2tlcm5fdm1fc3RhcnQoc3RydWN0IGJwZl9tYXAgKm1hcClcbmtlcm5lbC9icGYvYXJlbmEuYy05OC17XG5rZXJuZWwvYnBmL2FyZW5hLmM6OTk6XHRyZXR1cm4gYnBmX2FyZW5hX2dldF9rZXJuX3ZtX3N0YXJ0KGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfYXJlbmEsIG1hcCkpO1xua2VybmVsL2JwZi9hcmVuYS5jLTEwMC19XG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTEwMi0vKipcbmtlcm5lbC9icGYvYXJlbmEuYzoxMDM6ICogYnBmX3Byb2dfYXJlbmEgLSByZXR1cm4gdGhlIGJwZl9tYXAgb2YgdGhlIGFyZW5hIHJlZmVyZW5jZWQgYnkgQHByb2dcbmtlcm5lbC9icGYvYXJlbmEuYy0xMDQtICogQHByb2c6IGEgbG9hZGVkIEJQRiBwcm9ncmFtXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTA1LSAqXG5rZXJuZWwvYnBmL2FyZW5hLmM6MTA2OiAqIFRoZSB2ZXJpZmllciBlbmZvcmNlcyBhdCBtb3N0IG9uZSBhcmVuYSBwZXIgcHJvZ3JhbSBhbmQgc3RvcmVzIGl0IGluXG5rZXJuZWwvYnBmL2FyZW5hLmM6MTA3OiAqIHByb2ctXHUwMDNlYXV4LVx1MDAzZWFyZW5hLiBSZXR1cm4gdGhhdCBhcmVuYSYjMzk7cyB1bmRlcmx5aW5nIGJwZl9tYXAsIG9yIE5VTEwgaWZcbmtlcm5lbC9icGYvYXJlbmEuYzoxMDg6ICogQHByb2cgZG9lcyBub3QgcmVmZXJlbmNlIGFuIGFyZW5hLlxua2VybmVsL2JwZi9hcmVuYS5jLTEwOS0gKi9cbmtlcm5lbC9icGYvYXJlbmEuYzoxMTA6c3RydWN0IGJwZl9tYXAgKmJwZl9wcm9nX2FyZW5hKHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbmtlcm5lbC9icGYvYXJlbmEuYy0xMTEte1xua2VybmVsL2JwZi9hcmVuYS5jOjExMjpcdHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hID0gcHJvZy1cdTAwM2VhdXgtXHUwMDNlYXJlbmE7XG5rZXJuZWwvYnBmL2FyZW5hLmMtMTEzLVxua2VybmVsL2JwZi9hcmVuYS5jOjExNDpcdHJldHVybiBhcmVuYSA/IFx1MDAyNmFyZW5hLVx1MDAzZW1hcCA6IE5VTEw7XG5rZXJuZWwvYnBmL2FyZW5hLmMtMTE1LX1cbmtlcm5lbC9icGYvYXJlbmEuYy0xMTYtXG5rZXJuZWwvYnBmL2FyZW5hLmM6MTE3OnN0YXRpYyBsb25nIGFyZW5hX21hcF9wZWVrX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqdmFsdWUpXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTE4LXtcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTIxLVxua2VybmVsL2JwZi9hcmVuYS5jOjEyMjpzdGF0aWMgbG9uZyBhcmVuYV9tYXBfcHVzaF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKnZhbHVlLCB1NjQgZmxhZ3MpXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTIzLXtcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTI2LVxua2VybmVsL2JwZi9hcmVuYS5jOjEyNzpzdGF0aWMgbG9uZyBhcmVuYV9tYXBfcG9wX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqdmFsdWUpXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTI4LXtcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTMxLVxua2VybmVsL2JwZi9hcmVuYS5jOjEzMjpzdGF0aWMgbG9uZyBhcmVuYV9tYXBfZGVsZXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqdmFsdWUpXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTMzLXtcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTM2LVxua2VybmVsL2JwZi9hcmVuYS5jOjEzNzpzdGF0aWMgaW50IGFyZW5hX21hcF9nZXRfbmV4dF9rZXkoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICpuZXh0X2tleSlcbmtlcm5lbC9icGYvYXJlbmEuYy0xMzgte1xuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy0xNDEtXG5rZXJuZWwvYnBmL2FyZW5hLmM6MTQyOnN0YXRpYyBsb25nIGNvbXB1dGVfcGdvZmYoc3RydWN0IGJwZl9hcmVuYSAqYXJlbmEsIGxvbmcgdWFkZHIpXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTQzLXtcbmtlcm5lbC9icGYvYXJlbmEuYzoxNDQ6XHRyZXR1cm4gKHUzMikodWFkZHIgLSAodTMyKWFyZW5hLVx1MDAzZXVzZXJfdm1fc3RhcnQpIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xua2VybmVsL2JwZi9hcmVuYS5jLTE0NS19XG4tLVxua2VybmVsL2JwZi9hcmVuYS5jPTE0Nz1zdHJ1Y3QgYXBwbHlfcmFuZ2VfZGF0YSB7XG5rZXJuZWwvYnBmL2FyZW5hLmM6MTQ4Olx0c3RydWN0IGJwZl9hcmVuYSAqYXJlbmE7XG5rZXJuZWwvYnBmL2FyZW5hLmMtMTQ5LVx0c3RydWN0IHBhZ2UgKipwYWdlcztcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmM9MTUzPXN0cnVjdCBjbGVhcl9yYW5nZV9kYXRhIHtcbmtlcm5lbC9icGYvYXJlbmEuYzoxNTQ6XHRzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYTtcbmtlcm5lbC9icGYvYXJlbmEuYy0xNTUtXHRzdHJ1Y3QgbGxpc3RfaGVhZCAqZnJlZV9wYWdlcztcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmM9MTU4PXN0YXRpYyBpbnQgYXBwbHlfcmFuZ2Vfc2V0X2NiKHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqZGF0YSlcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTg0LVx0XHRcdGNvbnRpbnVlO1xua2VybmVsL2JwZi9hcmVuYS5jOjE4NTpcdFx0aWYgKFdBUk5fT05fT05DRShwdGVfcGFnZShvbGQpICE9IGQtXHUwMDNlYXJlbmEtXHUwMDNlc2NyYXRjaF9wYWdlKSlcbmtlcm5lbC9icGYvYXJlbmEuYy0xODYtXHRcdFx0cmV0dXJuIC1FQlVTWTtcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTkyLVx0ICogV2l0aG91dCBwdGVwX3RyeV9zZXQoKSB0aGVyZSBpcyBubyBhdG9taWMgaW5zdGFsbGVyLCBidXQgc3VjaCBhcmNoZXNcbmtlcm5lbC9icGYvYXJlbmEuYzoxOTM6XHQgKiBhbHNvIGRvIG5vdCB3aXJlIHVwIGJwZl9hcmVuYV9oYW5kbGVfcGFnZV9mYXVsdCgpLCBzbyBubyBzY3JhdGNoIHBhZ2Vcbmtlcm5lbC9icGYvYXJlbmEuYy0xOTQtXHQgKiBpcyBldmVyIGluc3RhbGxlZCBhbmQgdGhlIHNsb3QgaXMgYWx3YXlzIG5vbmUgaGVyZS5cbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtMjAwLVx0ZC1cdTAwM2VpJiM0MzsmIzQzOztcbmtlcm5lbC9icGYvYXJlbmEuYzoyMDE6XHRXUklURV9PTkNFKGQtXHUwMDNlYXJlbmEtXHUwMDNlbnJfcGFnZXMsIGQtXHUwMDNlYXJlbmEtXHUwMDNlbnJfcGFnZXMgJiM0MzsgMSk7XG5rZXJuZWwvYnBmL2FyZW5hLmMtMjAyLVx0cmV0dXJuIDA7XG4tLVxua2VybmVsL2JwZi9hcmVuYS5jPTIxMD1zdGF0aWMgaW50IGFwcGx5X3JhbmdlX2NsZWFyX2NiKHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqZGF0YSlcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtMjI4LVx0Lypcbmtlcm5lbC9icGYvYXJlbmEuYzoyMjk6XHQgKiBTa2lwIHRoZSBwZXItYXJlbmEgc2NyYXRjaCBwYWdlLiBBIGtlcm5lbCBmYXVsdCBvbiBhbiB1bmFsbG9jYXRlZCB1YWRkclxua2VybmVsL2JwZi9hcmVuYS5jOjIzMDpcdCAqIHNjcmF0Y2hlcyBpdHMgUFRFLiBBIGxhdGVyIGJwZl9hcmVuYV9mcmVlX3BhZ2VzKCkgb3ZlciB0aGF0IHJhbmdlIHdhbGtzXG5rZXJuZWwvYnBmL2FyZW5hLmMtMjMxLVx0ICogaGVyZS4gV2l0aG91dCB0aGUgc2tpcCwgc2NyYXRjaF9wYWdlIHdvdWxkIGJlIGZyZWVkLlxua2VybmVsL2JwZi9hcmVuYS5jLTIzMi1cdCAqL1xua2VybmVsL2JwZi9hcmVuYS5jOjIzMzpcdGlmIChwYWdlID09IGQtXHUwMDNlYXJlbmEtXHUwMDNlc2NyYXRjaF9wYWdlKVxua2VybmVsL2JwZi9hcmVuYS5jLTIzNC1cdFx0cmV0dXJuIDA7XG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTIzNi1cdF9fbGxpc3RfYWRkKFx1MDAyNnBhZ2UtXHUwMDNlcGNwX2xsaXN0LCBkLVx1MDAzZWZyZWVfcGFnZXMpO1xua2VybmVsL2JwZi9hcmVuYS5jOjIzNzpcdFdSSVRFX09OQ0UoZC1cdTAwM2VhcmVuYS1cdTAwM2Vucl9wYWdlcywgZC1cdTAwM2VhcmVuYS1cdTAwM2Vucl9wYWdlcyAtIDEpO1xua2VybmVsL2JwZi9hcmVuYS5jLTIzOC1cdHJldHVybiAwO1xuLS1cbmtlcm5lbC9icGYvYXJlbmEuYz0yNDE9c3RhdGljIGludCBhcHBseV9yYW5nZV9zZXRfc2NyYXRjaF9jYihwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGFkZHIsIHZvaWQgKmRhdGEpXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTI1OC1cbmtlcm5lbC9icGYvYXJlbmEuYzoyNTk6c3RhdGljIGludCBwb3B1bGF0ZV9wZ3RhYmxlX2V4Y2VwdF9wdGUoc3RydWN0IGJwZl9hcmVuYSAqYXJlbmEpXG5rZXJuZWwvYnBmL2FyZW5hLmMtMjYwLXtcbmtlcm5lbC9icGYvYXJlbmEuYy0yNjEtXHQvKiBQb3B1bGF0ZSBpbnRlcm1lZGlhdGVzIGZvciB0aGUgcmVjb3ZlcnkgcmFuZ2UgKDQgR2lCICYjNDM7IHVwcGVyIGhhbGYtZ3VhcmQpLiAqL1xua2VybmVsL2JwZi9hcmVuYS5jOjI2MjpcdHJldHVybiBhcHBseV90b19wYWdlX3JhbmdlKFx1MDAyNmluaXRfbW0sIGJwZl9hcmVuYV9nZXRfa2Vybl92bV9zdGFydChhcmVuYSksXG5rZXJuZWwvYnBmL2FyZW5hLmMtMjYzLVx0XHRcdFx0ICAgU1pfNEcgJiM0MzsgR1VBUkRfU1ogLyAyLCBhcHBseV9yYW5nZV9zZXRfY2IsIE5VTEwpO1xuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy0yNjUtXG5rZXJuZWwvYnBmL2FyZW5hLmM6MjY2OnN0YXRpYyBzdHJ1Y3QgYnBmX21hcCAqYXJlbmFfbWFwX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxua2VybmVsL2JwZi9hcmVuYS5jLTI2Ny17XG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTI2OS1cdGludCBudW1hX25vZGUgPSBicGZfbWFwX2F0dHJfbnVtYV9ub2RlKGF0dHIpO1xua2VybmVsL2JwZi9hcmVuYS5jOjI3MDpcdHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hO1xua2VybmVsL2JwZi9hcmVuYS5jLTI3MS1cdHU2NCB2bV9yYW5nZTtcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtMjczLVxua2VybmVsL2JwZi9hcmVuYS5jOjI3NDpcdGlmICghYnBmX2ppdF9zdXBwb3J0c19hcmVuYSgpKVxua2VybmVsL2JwZi9hcmVuYS5jLTI3NS1cdFx0cmV0dXJuIEVSUl9QVFIoLUVPUE5PVFNVUFApO1xuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy0yOTktXG5rZXJuZWwvYnBmL2FyZW5hLmM6MzAwOlx0YXJlbmEgPSBicGZfbWFwX2FyZWFfYWxsb2Moc2l6ZW9mKCphcmVuYSksIG51bWFfbm9kZSk7XG5rZXJuZWwvYnBmL2FyZW5hLmM6MzAxOlx0aWYgKCFhcmVuYSlcbmtlcm5lbC9icGYvYXJlbmEuYy0zMDItXHRcdGdvdG8gZXJyO1xua2VybmVsL2JwZi9hcmVuYS5jLTMwMy1cbmtlcm5lbC9icGYvYXJlbmEuYzozMDQ6XHRhcmVuYS1cdTAwM2VrZXJuX3ZtID0ga2Vybl92bTtcbmtlcm5lbC9icGYvYXJlbmEuYzozMDU6XHRhcmVuYS1cdTAwM2V1c2VyX3ZtX3N0YXJ0ID0gYXR0ci1cdTAwM2VtYXBfZXh0cmE7XG5rZXJuZWwvYnBmL2FyZW5hLmM6MzA2Olx0aWYgKGFyZW5hLVx1MDAzZXVzZXJfdm1fc3RhcnQpXG5rZXJuZWwvYnBmL2FyZW5hLmM6MzA3Olx0XHRhcmVuYS1cdTAwM2V1c2VyX3ZtX2VuZCA9IGFyZW5hLVx1MDAzZXVzZXJfdm1fc3RhcnQgJiM0Mzsgdm1fcmFuZ2U7XG5rZXJuZWwvYnBmL2FyZW5hLmMtMzA4LVxua2VybmVsL2JwZi9hcmVuYS5jOjMwOTpcdElOSVRfTElTVF9IRUFEKFx1MDAyNmFyZW5hLVx1MDAzZXZtYV9saXN0KTtcbmtlcm5lbC9icGYvYXJlbmEuYzozMTA6XHRpbml0X2xsaXN0X2hlYWQoXHUwMDI2YXJlbmEtXHUwMDNlZnJlZV9zcGFucyk7XG5rZXJuZWwvYnBmL2FyZW5hLmM6MzExOlx0aW5pdF9pcnFfd29yayhcdTAwMjZhcmVuYS1cdTAwM2VmcmVlX2lycSwgYXJlbmFfZnJlZV9pcnEpO1xua2VybmVsL2JwZi9hcmVuYS5jOjMxMjpcdElOSVRfV09SSyhcdTAwMjZhcmVuYS1cdTAwM2VmcmVlX3dvcmssIGFyZW5hX2ZyZWVfd29ya2VyKTtcbmtlcm5lbC9icGYvYXJlbmEuYzozMTM6XHRicGZfbWFwX2luaXRfZnJvbV9hdHRyKFx1MDAyNmFyZW5hLVx1MDAzZW1hcCwgYXR0cik7XG5rZXJuZWwvYnBmL2FyZW5hLmMtMzE0LVxua2VybmVsL2JwZi9hcmVuYS5jOjMxNTpcdGVyciA9IGJwZl9tYXBfYWxsb2NfcGFnZXMoXHUwMDI2YXJlbmEtXHUwMDNlbWFwLCBOVU1BX05PX05PREUsIDEsIFx1MDAyNmFyZW5hLVx1MDAzZXNjcmF0Y2hfcGFnZSk7XG5rZXJuZWwvYnBmL2FyZW5hLmMtMzE2LVx0aWYgKGVycilcbmtlcm5lbC9icGYvYXJlbmEuYzozMTc6XHRcdGdvdG8gZXJyX2ZyZWVfYXJlbmE7XG5rZXJuZWwvYnBmL2FyZW5hLmMtMzE4LVxua2VybmVsL2JwZi9hcmVuYS5jOjMxOTpcdHJhbmdlX3RyZWVfaW5pdChcdTAwMjZhcmVuYS1cdTAwM2VydCk7XG5rZXJuZWwvYnBmL2FyZW5hLmM6MzIwOlx0ZXJyID0gcmFuZ2VfdHJlZV9zZXQoXHUwMDI2YXJlbmEtXHUwMDNlcnQsIDAsIGF0dHItXHUwMDNlbWF4X2VudHJpZXMpO1xua2VybmVsL2JwZi9hcmVuYS5jLTMyMS1cdGlmIChlcnIpXG5rZXJuZWwvYnBmL2FyZW5hLmMtMzIyLVx0XHRnb3RvIGVycl9mcmVlX3NjcmF0Y2g7XG5rZXJuZWwvYnBmL2FyZW5hLmM6MzIzOlx0bXV0ZXhfaW5pdChcdTAwMjZhcmVuYS1cdTAwM2Vsb2NrKTtcbmtlcm5lbC9icGYvYXJlbmEuYzozMjQ6XHRtdXRleF9pbml0KFx1MDAyNmFyZW5hLVx1MDAzZXphcF9tdXRleCk7XG5rZXJuZWwvYnBmL2FyZW5hLmM6MzI1Olx0cmF3X3Jlc19zcGluX2xvY2tfaW5pdChcdTAwMjZhcmVuYS1cdTAwM2VzcGlubG9jayk7XG5rZXJuZWwvYnBmL2FyZW5hLmM6MzI2Olx0ZXJyID0gcG9wdWxhdGVfcGd0YWJsZV9leGNlcHRfcHRlKGFyZW5hKTtcbmtlcm5lbC9icGYvYXJlbmEuYy0zMjctXHRpZiAoZXJyKVxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy0zMjktXG5rZXJuZWwvYnBmL2FyZW5hLmM6MzMwOlx0cmV0dXJuIFx1MDAyNmFyZW5hLVx1MDAzZW1hcDtcbmtlcm5lbC9icGYvYXJlbmEuYy0zMzEtXG5rZXJuZWwvYnBmL2FyZW5hLmMtMzMyLWVycl9kZXN0cm95X3J0Olxua2VybmVsL2JwZi9hcmVuYS5jOjMzMzpcdHJhbmdlX3RyZWVfZGVzdHJveShcdTAwMjZhcmVuYS1cdTAwM2VydCk7XG5rZXJuZWwvYnBmL2FyZW5hLmMtMzM0LWVycl9mcmVlX3NjcmF0Y2g6XG5rZXJuZWwvYnBmL2FyZW5hLmM6MzM1Olx0X19mcmVlX3BhZ2UoYXJlbmEtXHUwMDNlc2NyYXRjaF9wYWdlKTtcbmtlcm5lbC9icGYvYXJlbmEuYzozMzY6ZXJyX2ZyZWVfYXJlbmE6XG5rZXJuZWwvYnBmL2FyZW5hLmM6MzM3Olx0YnBmX21hcF9hcmVhX2ZyZWUoYXJlbmEpO1xua2VybmVsL2JwZi9hcmVuYS5jLTMzOC1lcnI6XG4tLVxua2VybmVsL2JwZi9hcmVuYS5jPTM0Mz1zdGF0aWMgaW50IGV4aXN0aW5nX3BhZ2VfY2IocHRlX3QgKnB0ZXAsIHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqZGF0YSlcbmtlcm5lbC9icGYvYXJlbmEuYy0zNDQte1xua2VybmVsL2JwZi9hcmVuYS5jOjM0NTpcdHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hID0gZGF0YTtcbmtlcm5lbC9icGYvYXJlbmEuYy0zNDYtXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtMzU2LVx0ICovXG5rZXJuZWwvYnBmL2FyZW5hLmM6MzU3Olx0aWYgKHBhZ2UgPT0gYXJlbmEtXHUwMDNlc2NyYXRjaF9wYWdlKVxua2VybmVsL2JwZi9hcmVuYS5jLTM1OC1cdFx0cmV0dXJuIDA7XG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTM2MC1cdCAqIFdlIGRvIG5vdCB1cGRhdGUgcHRlIGhlcmU6XG5rZXJuZWwvYnBmL2FyZW5hLmM6MzYxOlx0ICogMS4gTm9ib2R5IHNob3VsZCBiZSBhY2Nlc3NpbmcgYnBmX2FyZW5hJiMzOTtzIHJhbmdlIG91dHNpZGUgb2YgYSBrZXJuZWwgYnVnXG5rZXJuZWwvYnBmL2FyZW5hLmMtMzYyLVx0ICogMi4gVExCIGZsdXNoaW5nIGlzIGJhdGNoZWQgb3IgZGVmZXJyZWQuIEV2ZW4gaWYgd2UgY2xlYXIgcHRlLFxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy0zNjktXG5rZXJuZWwvYnBmL2FyZW5hLmM6MzcwOnN0YXRpYyB2b2lkIGFyZW5hX21hcF9mcmVlKHN0cnVjdCBicGZfbWFwICptYXApXG5rZXJuZWwvYnBmL2FyZW5hLmMtMzcxLXtcbmtlcm5lbC9icGYvYXJlbmEuYzozNzI6XHRzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfYXJlbmEsIG1hcCk7XG5rZXJuZWwvYnBmL2FyZW5hLmMtMzczLVxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy0zNzYtXHQgKiBtbWFwKCkgaG9sZHMgdm1fZmlsZSB3aGljaCBob2xkcyBicGZfbWFwIHJlZmNudC5cbmtlcm5lbC9icGYvYXJlbmEuYzozNzc6XHQgKiBtdW5tYXAoKSBtdXN0IGhhdmUgaGFwcGVuZWQgb24gdm1hIGZvbGxvd2VkIGJ5IGFyZW5hX3ZtX2Nsb3NlKClcbmtlcm5lbC9icGYvYXJlbmEuYzozNzg6XHQgKiB3aGljaCB3b3VsZCBjbGVhciBhcmVuYS1cdTAwM2V2bWFfbGlzdC5cbmtlcm5lbC9icGYvYXJlbmEuYy0zNzktXHQgKi9cbmtlcm5lbC9icGYvYXJlbmEuYzozODA6XHRpZiAoV0FSTl9PTl9PTkNFKCFsaXN0X2VtcHR5KFx1MDAyNmFyZW5hLVx1MDAzZXZtYV9saXN0KSkpXG5rZXJuZWwvYnBmL2FyZW5hLmMtMzgxLVx0XHRyZXR1cm47XG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTM4My1cdC8qIEVuc3VyZSBubyBwZW5kaW5nIGRlZmVycmVkIGZyZWVzICovXG5rZXJuZWwvYnBmL2FyZW5hLmM6Mzg0Olx0aXJxX3dvcmtfc3luYyhcdTAwMjZhcmVuYS1cdTAwM2VmcmVlX2lycSk7XG5rZXJuZWwvYnBmL2FyZW5hLmM6Mzg1Olx0Zmx1c2hfd29yayhcdTAwMjZhcmVuYS1cdTAwM2VmcmVlX3dvcmspO1xua2VybmVsL2JwZi9hcmVuYS5jLTM4Ni1cbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtMzkyLVx0ICovXG5rZXJuZWwvYnBmL2FyZW5hLmM6MzkzOlx0YXBwbHlfdG9fZXhpc3RpbmdfcGFnZV9yYW5nZShcdTAwMjZpbml0X21tLCBicGZfYXJlbmFfZ2V0X2tlcm5fdm1fc3RhcnQoYXJlbmEpLFxua2VybmVsL2JwZi9hcmVuYS5jOjM5NDpcdFx0XHRcdCAgICAgU1pfNEcgJiM0MzsgR1VBUkRfU1ogLyAyLCBleGlzdGluZ19wYWdlX2NiLCBhcmVuYSk7XG5rZXJuZWwvYnBmL2FyZW5hLmM6Mzk1Olx0ZnJlZV92bV9hcmVhKGFyZW5hLVx1MDAzZWtlcm5fdm0pO1xua2VybmVsL2JwZi9hcmVuYS5jOjM5NjpcdHJhbmdlX3RyZWVfZGVzdHJveShcdTAwMjZhcmVuYS1cdTAwM2VydCk7XG5rZXJuZWwvYnBmL2FyZW5hLmM6Mzk3Olx0X19mcmVlX3BhZ2UoYXJlbmEtXHUwMDNlc2NyYXRjaF9wYWdlKTtcbmtlcm5lbC9icGYvYXJlbmEuYzozOTg6XHRicGZfbWFwX2FyZWFfZnJlZShhcmVuYSk7XG5rZXJuZWwvYnBmL2FyZW5hLmMtMzk5LX1cbmtlcm5lbC9icGYvYXJlbmEuYy00MDAtXG5rZXJuZWwvYnBmL2FyZW5hLmM6NDAxOnN0YXRpYyB2b2lkICphcmVuYV9tYXBfbG9va3VwX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxua2VybmVsL2JwZi9hcmVuYS5jLTQwMi17XG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTQwNS1cbmtlcm5lbC9icGYvYXJlbmEuYzo0MDY6c3RhdGljIGxvbmcgYXJlbmFfbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSxcbmtlcm5lbC9icGYvYXJlbmEuYy00MDctXHRcdFx0XHQgIHZvaWQgKnZhbHVlLCB1NjQgZmxhZ3MpXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTQxMS1cbmtlcm5lbC9icGYvYXJlbmEuYzo0MTI6c3RhdGljIGludCBhcmVuYV9tYXBfY2hlY2tfYnRmKHN0cnVjdCBicGZfbWFwICptYXAsIGNvbnN0IHN0cnVjdCBidGYgKmJ0Zixcbmtlcm5lbC9icGYvYXJlbmEuYy00MTMtXHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqa2V5X3R5cGUsIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdmFsdWVfdHlwZSlcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtNDE3LVxua2VybmVsL2JwZi9hcmVuYS5jOjQxODpzdGF0aWMgdTY0IGFyZW5hX21hcF9tZW1fdXNhZ2UoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcClcbmtlcm5lbC9icGYvYXJlbmEuYy00MTkte1xua2VybmVsL2JwZi9hcmVuYS5jOjQyMDpcdHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9hcmVuYSwgbWFwKTtcbmtlcm5lbC9icGYvYXJlbmEuYy00MjEtXG5rZXJuZWwvYnBmL2FyZW5hLmM6NDIyOlx0cmV0dXJuICh1NjQpUkVBRF9PTkNFKGFyZW5hLVx1MDAzZW5yX3BhZ2VzKSBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVDtcbmtlcm5lbC9icGYvYXJlbmEuYy00MjMtfVxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYz00MjU9c3RydWN0IHZtYV9saXN0IHtcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtNDMxLVxua2VybmVsL2JwZi9hcmVuYS5jOjQzMjpzdGF0aWMgaW50IHJlbWVtYmVyX3ZtYShzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG5rZXJuZWwvYnBmL2FyZW5hLmMtNDMzLXtcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtNDQyLVx0dm1sLVx1MDAzZXphcF9nZW4gPSAwO1xua2VybmVsL2JwZi9hcmVuYS5jOjQ0MzpcdGxpc3RfYWRkKFx1MDAyNnZtbC1cdTAwM2VoZWFkLCBcdTAwMjZhcmVuYS1cdTAwM2V2bWFfbGlzdCk7XG5rZXJuZWwvYnBmL2FyZW5hLmMtNDQ0LVx0cmV0dXJuIDA7XG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTQ0Ni1cbmtlcm5lbC9icGYvYXJlbmEuYzo0NDc6c3RhdGljIHZvaWQgYXJlbmFfdm1fb3BlbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbmtlcm5lbC9icGYvYXJlbmEuYy00NDgte1xuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy00NTMtXG5rZXJuZWwvYnBmL2FyZW5hLmM6NDU0OnN0YXRpYyBpbnQgYXJlbmFfdm1fbWF5X3NwbGl0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpXG5rZXJuZWwvYnBmL2FyZW5hLmMtNDU1LXtcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtNDU4LVxua2VybmVsL2JwZi9hcmVuYS5jOjQ1OTpzdGF0aWMgaW50IGFyZW5hX3ZtX21yZW1hcChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbmtlcm5lbC9icGYvYXJlbmEuYy00NjAte1xuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy00NjMtXG5rZXJuZWwvYnBmL2FyZW5hLmM6NDY0OnN0YXRpYyB2b2lkIGFyZW5hX3ZtX2Nsb3NlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxua2VybmVsL2JwZi9hcmVuYS5jLTQ2NS17XG5rZXJuZWwvYnBmL2FyZW5hLmMtNDY2LVx0c3RydWN0IGJwZl9tYXAgKm1hcCA9IHZtYS1cdTAwM2V2bV9maWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbmtlcm5lbC9icGYvYXJlbmEuYzo0Njc6XHRzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfYXJlbmEsIG1hcCk7XG5rZXJuZWwvYnBmL2FyZW5hLmMtNDY4LVx0c3RydWN0IHZtYV9saXN0ICp2bWwgPSB2bWEtXHUwMDNldm1fcHJpdmF0ZV9kYXRhO1xuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy00NzEtXHRcdHJldHVybjtcbmtlcm5lbC9icGYvYXJlbmEuYzo0NzI6XHRndWFyZChtdXRleCkoXHUwMDI2YXJlbmEtXHUwMDNlbG9jayk7XG5rZXJuZWwvYnBmL2FyZW5hLmMtNDczLVx0LyogdXBkYXRlIGxpbmsgbGlzdCB1bmRlciBsb2NrICovXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTQ3OC1cbmtlcm5lbC9icGYvYXJlbmEuYzo0Nzk6c3RhdGljIHZtX2ZhdWx0X3QgYXJlbmFfdm1fZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG5rZXJuZWwvYnBmL2FyZW5hLmMtNDgwLXtcbmtlcm5lbC9icGYvYXJlbmEuYy00ODEtXHRzdHJ1Y3QgYnBmX21hcCAqbWFwID0gdm1mLVx1MDAzZXZtYS1cdTAwM2V2bV9maWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbmtlcm5lbC9icGYvYXJlbmEuYzo0ODI6XHRzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfYXJlbmEsIG1hcCk7XG5rZXJuZWwvYnBmL2FyZW5hLmMtNDgzLVx0c3RydWN0IG1lbV9jZ3JvdXAgKm5ld19tZW1jZywgKm9sZF9tZW1jZztcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtNDg4LVxua2VybmVsL2JwZi9hcmVuYS5jOjQ4OTpcdGtiYXNlID0gYnBmX2FyZW5hX2dldF9rZXJuX3ZtX3N0YXJ0KGFyZW5hKTtcbmtlcm5lbC9icGYvYXJlbmEuYy00OTAtXHRrYWRkciA9IGtiYXNlICYjNDM7ICh1MzIpKHZtZi1cdTAwM2VhZGRyZXNzKTtcbmtlcm5lbC9icGYvYXJlbmEuYy00OTEtXG5rZXJuZWwvYnBmL2FyZW5hLmM6NDkyOlx0aWYgKHJhd19yZXNfc3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2YXJlbmEtXHUwMDNlc3BpbmxvY2ssIGZsYWdzKSlcbmtlcm5lbC9icGYvYXJlbmEuYy00OTMtXHRcdC8qXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTUwMS1cdGlmIChwYWdlKSB7XG5rZXJuZWwvYnBmL2FyZW5hLmM6NTAyOlx0XHRpZiAocGFnZSA9PSBhcmVuYS1cdTAwM2VzY3JhdGNoX3BhZ2UpXG5rZXJuZWwvYnBmL2FyZW5hLmMtNTAzLVx0XHRcdC8qIEJQRiB0cmlnZ2VyZWQgc2NyYXRjaCBoZXJlOyBkb24mIzM5O3QgbGF6eS1hbGxvYyBvdmVyIGl0ICovXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTUwOC1cbmtlcm5lbC9icGYvYXJlbmEuYzo1MDk6XHRicGZfbWFwX21lbWNnX2VudGVyKFx1MDAyNmFyZW5hLVx1MDAzZW1hcCwgXHUwMDI2b2xkX21lbWNnLCBcdTAwMjZuZXdfbWVtY2cpO1xua2VybmVsL2JwZi9hcmVuYS5jLTUxMC1cbmtlcm5lbC9icGYvYXJlbmEuYzo1MTE6XHRpZiAoYXJlbmEtXHUwMDNlbWFwLm1hcF9mbGFncyBcdTAwMjYgQlBGX0ZfU0VHVl9PTl9GQVVMVClcbmtlcm5lbC9icGYvYXJlbmEuYy01MTItXHRcdC8qIFVzZXIgc3BhY2UgcmVxdWVzdGVkIHRvIHNlZ2ZhdWx0IHdoZW4gcGFnZSBpcyBub3QgYWxsb2NhdGVkIGJ5IGJwZiBwcm9nICovXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTUxNC1cbmtlcm5lbC9icGYvYXJlbmEuYzo1MTU6XHRyZXQgPSByYW5nZV90cmVlX2NsZWFyKFx1MDAyNmFyZW5hLVx1MDAzZXJ0LCB2bWYtXHUwMDNlcGdvZmYsIDEpO1xua2VybmVsL2JwZi9hcmVuYS5jLTUxNi1cdGlmIChyZXQpXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTUxOC1cbmtlcm5lbC9icGYvYXJlbmEuYzo1MTk6XHRzdHJ1Y3QgYXBwbHlfcmFuZ2VfZGF0YSBkYXRhID0geyAuYXJlbmEgPSBhcmVuYSwgLnBhZ2VzID0gXHUwMDI2cGFnZSwgLmkgPSAwIH07XG5rZXJuZWwvYnBmL2FyZW5hLmM6NTIwOlx0LyogQWNjb3VudCBpbnRvIG1lbWNnIG9mIHRoZSBwcm9jZXNzIHRoYXQgY3JlYXRlZCBicGZfYXJlbmEgKi9cbmtlcm5lbC9icGYvYXJlbmEuYy01MjEtXHRyZXQgPSBicGZfbWFwX2FsbG9jX3BhZ2VzKG1hcCwgTlVNQV9OT19OT0RFLCAxLCBcdTAwMjZwYWdlKTtcbmtlcm5lbC9icGYvYXJlbmEuYy01MjItXHRpZiAocmV0KSB7XG5rZXJuZWwvYnBmL2FyZW5hLmM6NTIzOlx0XHRyYW5nZV90cmVlX3NldChcdTAwMjZhcmVuYS1cdTAwM2VydCwgdm1mLVx1MDAzZXBnb2ZmLCAxKTtcbmtlcm5lbC9icGYvYXJlbmEuYy01MjQtXHRcdGdvdG8gb3V0X3NpZ3NlZ3ZfbWVtY2c7XG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTUyOC1cdGlmIChyZXQpIHtcbmtlcm5lbC9icGYvYXJlbmEuYzo1Mjk6XHRcdHJhbmdlX3RyZWVfc2V0KFx1MDAyNmFyZW5hLVx1MDAzZXJ0LCB2bWYtXHUwMDNlcGdvZmYsIDEpO1xua2VybmVsL2JwZi9hcmVuYS5jLTUzMC1cdFx0ZnJlZV9wYWdlc19ub2xvY2socGFnZSwgMCk7XG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTUzNi1cdHBhZ2VfcmVmX2FkZChwYWdlLCAxKTtcbmtlcm5lbC9icGYvYXJlbmEuYzo1Mzc6XHRyYXdfcmVzX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2YXJlbmEtXHUwMDNlc3BpbmxvY2ssIGZsYWdzKTtcbmtlcm5lbC9icGYvYXJlbmEuYy01MzgtXHR2bWYtXHUwMDNlcGFnZSA9IHBhZ2U7XG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTU0Mi1vdXRfc2lnc2Vndjpcbmtlcm5lbC9icGYvYXJlbmEuYzo1NDM6XHRyYXdfcmVzX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2YXJlbmEtXHUwMDNlc3BpbmxvY2ssIGZsYWdzKTtcbmtlcm5lbC9icGYvYXJlbmEuYy01NDQtXHRyZXR1cm4gVk1fRkFVTFRfU0lHU0VHVjtcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtNTQ2LVxua2VybmVsL2JwZi9hcmVuYS5jOjU0NzpzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGFyZW5hX3ZtX29wcyA9IHtcbmtlcm5lbC9icGYvYXJlbmEuYzo1NDg6XHQub3Blblx0XHQ9IGFyZW5hX3ZtX29wZW4sXG5rZXJuZWwvYnBmL2FyZW5hLmM6NTQ5Olx0Lm1heV9zcGxpdFx0PSBhcmVuYV92bV9tYXlfc3BsaXQsXG5rZXJuZWwvYnBmL2FyZW5hLmM6NTUwOlx0Lm1yZW1hcFx0XHQ9IGFyZW5hX3ZtX21yZW1hcCxcbmtlcm5lbC9icGYvYXJlbmEuYzo1NTE6XHQuY2xvc2VcdFx0PSBhcmVuYV92bV9jbG9zZSxcbmtlcm5lbC9icGYvYXJlbmEuYzo1NTI6XHQuZmF1bHQgICAgICAgICAgPSBhcmVuYV92bV9mYXVsdCxcbmtlcm5lbC9icGYvYXJlbmEuYy01NTMtfTtcbmtlcm5lbC9icGYvYXJlbmEuYy01NTQtXG5rZXJuZWwvYnBmL2FyZW5hLmM6NTU1OnN0YXRpYyB1bnNpZ25lZCBsb25nIGFyZW5hX2dldF91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFkZHIsXG5rZXJuZWwvYnBmL2FyZW5hLmMtNTU2LVx0XHRcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgbGVuLCB1bnNpZ25lZCBsb25nIHBnb2ZmLFxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy01NTktXHRzdHJ1Y3QgYnBmX21hcCAqbWFwID0gZmlscC1cdTAwM2Vwcml2YXRlX2RhdGE7XG5rZXJuZWwvYnBmL2FyZW5hLmM6NTYwOlx0c3RydWN0IGJwZl9hcmVuYSAqYXJlbmEgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX2FyZW5hLCBtYXApO1xua2VybmVsL2JwZi9hcmVuYS5jLTU2MS1cdGxvbmcgcmV0O1xuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy01NjctXG5rZXJuZWwvYnBmL2FyZW5hLmM6NTY4Olx0LyogaWYgdXNlcl92bV9zdGFydCB3YXMgc3BlY2lmaWVkIGF0IGFyZW5hIGNyZWF0aW9uIHRpbWUgKi9cbmtlcm5lbC9icGYvYXJlbmEuYzo1Njk6XHRpZiAoYXJlbmEtXHUwMDNldXNlcl92bV9zdGFydCkge1xua2VybmVsL2JwZi9hcmVuYS5jOjU3MDpcdFx0aWYgKGxlbiBcdTAwM2UgYXJlbmEtXHUwMDNldXNlcl92bV9lbmQgLSBhcmVuYS1cdTAwM2V1c2VyX3ZtX3N0YXJ0KVxua2VybmVsL2JwZi9hcmVuYS5jLTU3MS1cdFx0XHRyZXR1cm4gLUUyQklHO1xua2VybmVsL2JwZi9hcmVuYS5jOjU3MjpcdFx0aWYgKGxlbiAhPSBhcmVuYS1cdTAwM2V1c2VyX3ZtX2VuZCAtIGFyZW5hLVx1MDAzZXVzZXJfdm1fc3RhcnQpXG5rZXJuZWwvYnBmL2FyZW5hLmMtNTczLVx0XHRcdHJldHVybiAtRUlOVkFMO1xua2VybmVsL2JwZi9hcmVuYS5jOjU3NDpcdFx0aWYgKGFkZHIgIT0gYXJlbmEtXHUwMDNldXNlcl92bV9zdGFydClcbmtlcm5lbC9icGYvYXJlbmEuYy01NzUtXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTU4Mi1cdFx0cmV0dXJuIHJldDtcbmtlcm5lbC9icGYvYXJlbmEuYzo1ODM6XHRpZiAoV0FSTl9PTl9PTkNFKGFyZW5hLVx1MDAzZXVzZXJfdm1fc3RhcnQpKVxua2VybmVsL2JwZi9hcmVuYS5jLTU4NC1cdFx0LyogY2hlY2tzIGF0IG1hcCBjcmVhdGlvbiB0aW1lIHNob3VsZCBwcmV2ZW50IHRoaXMgKi9cbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtNTg4LVxua2VybmVsL2JwZi9hcmVuYS5jOjU4OTpzdGF0aWMgaW50IGFyZW5hX21hcF9tbWFwKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxua2VybmVsL2JwZi9hcmVuYS5jLTU5MC17XG5rZXJuZWwvYnBmL2FyZW5hLmM6NTkxOlx0c3RydWN0IGJwZl9hcmVuYSAqYXJlbmEgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX2FyZW5hLCBtYXApO1xua2VybmVsL2JwZi9hcmVuYS5jLTU5Mi1cbmtlcm5lbC9icGYvYXJlbmEuYzo1OTM6XHRndWFyZChtdXRleCkoXHUwMDI2YXJlbmEtXHUwMDNlbG9jayk7XG5rZXJuZWwvYnBmL2FyZW5hLmM6NTk0Olx0aWYgKGFyZW5hLVx1MDAzZXVzZXJfdm1fc3RhcnQgXHUwMDI2XHUwMDI2IGFyZW5hLVx1MDAzZXVzZXJfdm1fc3RhcnQgIT0gdm1hLVx1MDAzZXZtX3N0YXJ0KVxua2VybmVsL2JwZi9hcmVuYS5jLTU5NS1cdFx0Lypcbmtlcm5lbC9icGYvYXJlbmEuYzo1OTY6XHRcdCAqIElmIG1hcF9leHRyYSB3YXMgbm90IHNwZWNpZmllZCBhdCBhcmVuYSBjcmVhdGlvbiB0aW1lIHRoZW5cbmtlcm5lbC9icGYvYXJlbmEuYy01OTctXHRcdCAqIDFzdCB1c2VyIHByb2Nlc3MgY2FuIGRvIG1tYXAoTlVMTCwgLi4uKSB0byBwaWNrIHVzZXJfdm1fc3RhcnRcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtNjA0LVxua2VybmVsL2JwZi9hcmVuYS5jOjYwNTpcdGlmIChhcmVuYS1cdTAwM2V1c2VyX3ZtX2VuZCBcdTAwMjZcdTAwMjYgYXJlbmEtXHUwMDNldXNlcl92bV9lbmQgIT0gdm1hLVx1MDAzZXZtX2VuZClcbmtlcm5lbC9icGYvYXJlbmEuYy02MDYtXHRcdC8qIGFsbCB1c2VyIHByb2Nlc3NlcyBtdXN0IGhhdmUgdGhlIHNhbWUgc2l6ZSBvZiBtbWFwLWVkIHJlZ2lvbiAqL1xuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy02MTItXG5rZXJuZWwvYnBmL2FyZW5hLmM6NjEzOlx0aWYgKHJlbWVtYmVyX3ZtYShhcmVuYSwgdm1hKSlcbmtlcm5lbC9icGYvYXJlbmEuYy02MTQtXHRcdHJldHVybiAtRU5PTUVNO1xua2VybmVsL2JwZi9hcmVuYS5jLTYxNS1cbmtlcm5lbC9icGYvYXJlbmEuYzo2MTY6XHRhcmVuYS1cdTAwM2V1c2VyX3ZtX3N0YXJ0ID0gdm1hLVx1MDAzZXZtX3N0YXJ0O1xua2VybmVsL2JwZi9hcmVuYS5jOjYxNzpcdGFyZW5hLVx1MDAzZXVzZXJfdm1fZW5kID0gdm1hLVx1MDAzZXZtX2VuZDtcbmtlcm5lbC9icGYvYXJlbmEuYy02MTgtXHQvKlxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy02MjAtXHQgKiBjbGVhcnMgVk1fTUFZRVhFQy4gU2V0IFZNX0RPTlRFWFBBTkQgdG8gYXZvaWQgcG90ZW50aWFsIGNoYW5nZVxua2VybmVsL2JwZi9hcmVuYS5jOjYyMTpcdCAqIG9mIHVzZXJfdm1fc3RhcnQuIFNldCBWTV9ET05UQ09QWSB0byBwcmV2ZW50IGFyZW5hIFZNQSBmcm9tXG5rZXJuZWwvYnBmL2FyZW5hLmMtNjIyLVx0ICogYmVpbmcgY29waWVkIGludG8gdGhlIGNoaWxkIHByb2Nlc3Mgb24gZm9yay5cbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtNjI0LVx0dm1fZmxhZ3Nfc2V0KHZtYSwgVk1fRE9OVEVYUEFORCB8IFZNX0RPTlRDT1BZKTtcbmtlcm5lbC9icGYvYXJlbmEuYzo2MjU6XHR2bWEtXHUwMDNldm1fb3BzID0gXHUwMDI2YXJlbmFfdm1fb3BzO1xua2VybmVsL2JwZi9hcmVuYS5jLTYyNi1cdHJldHVybiAwO1xuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy02MjgtXG5rZXJuZWwvYnBmL2FyZW5hLmM6NjI5OnN0YXRpYyBpbnQgYXJlbmFfbWFwX2RpcmVjdF92YWx1ZV9hZGRyKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXAsIHU2NCAqaW1tLCB1MzIgb2ZmKVxua2VybmVsL2JwZi9hcmVuYS5jLTYzMC17XG5rZXJuZWwvYnBmL2FyZW5hLmM6NjMxOlx0c3RydWN0IGJwZl9hcmVuYSAqYXJlbmEgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX2FyZW5hLCBtYXApO1xua2VybmVsL2JwZi9hcmVuYS5jLTYzMi1cbmtlcm5lbC9icGYvYXJlbmEuYzo2MzM6XHRpZiAoKHU2NClvZmYgXHUwMDNlPSBhcmVuYS1cdTAwM2V1c2VyX3ZtX2VuZCAtIGFyZW5hLVx1MDAzZXVzZXJfdm1fc3RhcnQpXG5rZXJuZWwvYnBmL2FyZW5hLmMtNjM0LVx0XHRyZXR1cm4gLUVSQU5HRTtcbmtlcm5lbC9icGYvYXJlbmEuYzo2MzU6XHQqaW1tID0gKHVuc2lnbmVkIGxvbmcpYXJlbmEtXHUwMDNldXNlcl92bV9zdGFydDtcbmtlcm5lbC9icGYvYXJlbmEuYy02MzYtXHRyZXR1cm4gMDtcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtNjM4LVxua2VybmVsL2JwZi9hcmVuYS5jOjYzOTpCVEZfSURfTElTVF9TSU5HTEUoYnBmX2FyZW5hX21hcF9idGZfaWRzLCBzdHJ1Y3QsIGJwZl9hcmVuYSlcbmtlcm5lbC9icGYvYXJlbmEuYzo2NDA6Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIGFyZW5hX21hcF9vcHMgPSB7XG5rZXJuZWwvYnBmL2FyZW5hLmMtNjQxLVx0Lm1hcF9tZXRhX2VxdWFsID0gYnBmX21hcF9tZXRhX2VxdWFsLFxua2VybmVsL2JwZi9hcmVuYS5jOjY0MjpcdC5tYXBfYWxsb2MgPSBhcmVuYV9tYXBfYWxsb2MsXG5rZXJuZWwvYnBmL2FyZW5hLmM6NjQzOlx0Lm1hcF9mcmVlID0gYXJlbmFfbWFwX2ZyZWUsXG5rZXJuZWwvYnBmL2FyZW5hLmM6NjQ0Olx0Lm1hcF9kaXJlY3RfdmFsdWVfYWRkciA9IGFyZW5hX21hcF9kaXJlY3RfdmFsdWVfYWRkcixcbmtlcm5lbC9icGYvYXJlbmEuYzo2NDU6XHQubWFwX21tYXAgPSBhcmVuYV9tYXBfbW1hcCxcbmtlcm5lbC9icGYvYXJlbmEuYzo2NDY6XHQubWFwX2dldF91bm1hcHBlZF9hcmVhID0gYXJlbmFfZ2V0X3VubWFwcGVkX2FyZWEsXG5rZXJuZWwvYnBmL2FyZW5hLmM6NjQ3Olx0Lm1hcF9nZXRfbmV4dF9rZXkgPSBhcmVuYV9tYXBfZ2V0X25leHRfa2V5LFxua2VybmVsL2JwZi9hcmVuYS5jOjY0ODpcdC5tYXBfcHVzaF9lbGVtID0gYXJlbmFfbWFwX3B1c2hfZWxlbSxcbmtlcm5lbC9icGYvYXJlbmEuYzo2NDk6XHQubWFwX3BlZWtfZWxlbSA9IGFyZW5hX21hcF9wZWVrX2VsZW0sXG5rZXJuZWwvYnBmL2FyZW5hLmM6NjUwOlx0Lm1hcF9wb3BfZWxlbSA9IGFyZW5hX21hcF9wb3BfZWxlbSxcbmtlcm5lbC9icGYvYXJlbmEuYzo2NTE6XHQubWFwX2xvb2t1cF9lbGVtID0gYXJlbmFfbWFwX2xvb2t1cF9lbGVtLFxua2VybmVsL2JwZi9hcmVuYS5jOjY1MjpcdC5tYXBfdXBkYXRlX2VsZW0gPSBhcmVuYV9tYXBfdXBkYXRlX2VsZW0sXG5rZXJuZWwvYnBmL2FyZW5hLmM6NjUzOlx0Lm1hcF9kZWxldGVfZWxlbSA9IGFyZW5hX21hcF9kZWxldGVfZWxlbSxcbmtlcm5lbC9icGYvYXJlbmEuYzo2NTQ6XHQubWFwX2NoZWNrX2J0ZiA9IGFyZW5hX21hcF9jaGVja19idGYsXG5rZXJuZWwvYnBmL2FyZW5hLmM6NjU1Olx0Lm1hcF9tZW1fdXNhZ2UgPSBhcmVuYV9tYXBfbWVtX3VzYWdlLFxua2VybmVsL2JwZi9hcmVuYS5jOjY1NjpcdC5tYXBfYnRmX2lkID0gXHUwMDI2YnBmX2FyZW5hX21hcF9idGZfaWRzWzBdLFxua2VybmVsL2JwZi9hcmVuYS5jLTY1Ny19O1xuLS1cbmtlcm5lbC9icGYvYXJlbmEuYz02NTk9c3RhdGljIHU2NCBjbGVhcl9sbzMyKHU2NCB2YWwpXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTY2Ny0gKi9cbmtlcm5lbC9icGYvYXJlbmEuYzo2Njg6c3RhdGljIGxvbmcgYXJlbmFfYWxsb2NfcGFnZXMoc3RydWN0IGJwZl9hcmVuYSAqYXJlbmEsIGxvbmcgdWFkZHIsIGxvbmcgcGFnZV9jbnQsIGludCBub2RlX2lkLFxua2VybmVsL2JwZi9hcmVuYS5jLTY2OS1cdFx0XHQgICAgICBib29sIHNsZWVwYWJsZSlcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtNjcxLVx0LyogdXNlcl92bV9lbmQvc3RhcnQgYXJlIGZpeGVkIGJlZm9yZSBicGYgcHJvZyBydW5zICovXG5rZXJuZWwvYnBmL2FyZW5hLmM6NjcyOlx0bG9uZyBwYWdlX2NudF9tYXggPSAoYXJlbmEtXHUwMDNldXNlcl92bV9lbmQgLSBhcmVuYS1cdTAwM2V1c2VyX3ZtX3N0YXJ0KSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbmtlcm5lbC9icGYvYXJlbmEuYzo2NzM6XHR1NjQga2Vybl92bV9zdGFydCA9IGJwZl9hcmVuYV9nZXRfa2Vybl92bV9zdGFydChhcmVuYSk7XG5rZXJuZWwvYnBmL2FyZW5hLmMtNjc0LVx0c3RydWN0IG1lbV9jZ3JvdXAgKm5ld19tZW1jZywgKm9sZF9tZW1jZztcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtNjkzLVx0XHRcdHJldHVybiAwO1xua2VybmVsL2JwZi9hcmVuYS5jOjY5NDpcdFx0cGdvZmYgPSBjb21wdXRlX3Bnb2ZmKGFyZW5hLCB1YWRkcik7XG5rZXJuZWwvYnBmL2FyZW5hLmMtNjk1LVx0XHRpZiAocGdvZmYgXHUwMDNlIHBhZ2VfY250X21heCAtIHBhZ2VfY250KVxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy02OTktXG5rZXJuZWwvYnBmL2FyZW5hLmM6NzAwOlx0YnBmX21hcF9tZW1jZ19lbnRlcihcdTAwMjZhcmVuYS1cdTAwM2VtYXAsIFx1MDAyNm9sZF9tZW1jZywgXHUwMDI2bmV3X21lbWNnKTtcbmtlcm5lbC9icGYvYXJlbmEuYy03MDEtXHQvKiBDYXAgYWxsb2NhdGlvbiBzaXplIHRvIEtNQUxMT0NfTUFYX0NBQ0hFX1NJWkUgc28ga21hbGxvY19ub2xvY2soKSBjYW4gc3VjY2VlZC4gKi9cbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzA3LVx0fVxua2VybmVsL2JwZi9hcmVuYS5jOjcwODpcdGRhdGEuYXJlbmEgPSBhcmVuYTtcbmtlcm5lbC9icGYvYXJlbmEuYy03MDktXHRkYXRhLnBhZ2VzID0gcGFnZXM7XG5rZXJuZWwvYnBmL2FyZW5hLmMtNzEwLVxua2VybmVsL2JwZi9hcmVuYS5jOjcxMTpcdGlmIChyYXdfcmVzX3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmFyZW5hLVx1MDAzZXNwaW5sb2NrLCBmbGFncykpXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzEyLVx0XHRnb3RvIG91dF9mcmVlX3BhZ2VzO1xuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy03MTQtXHRpZiAodWFkZHIpIHtcbmtlcm5lbC9icGYvYXJlbmEuYzo3MTU6XHRcdHJldCA9IGlzX3JhbmdlX3RyZWVfc2V0KFx1MDAyNmFyZW5hLVx1MDAzZXJ0LCBwZ29mZiwgcGFnZV9jbnQpO1xua2VybmVsL2JwZi9hcmVuYS5jLTcxNi1cdFx0aWYgKHJldClcbmtlcm5lbC9icGYvYXJlbmEuYy03MTctXHRcdFx0Z290byBvdXRfdW5sb2NrX2ZyZWVfcGFnZXM7XG5rZXJuZWwvYnBmL2FyZW5hLmM6NzE4Olx0XHRyZXQgPSByYW5nZV90cmVlX2NsZWFyKFx1MDAyNmFyZW5hLVx1MDAzZXJ0LCBwZ29mZiwgcGFnZV9jbnQpO1xua2VybmVsL2JwZi9hcmVuYS5jLTcxOS1cdH0gZWxzZSB7XG5rZXJuZWwvYnBmL2FyZW5hLmM6NzIwOlx0XHRyZXQgPSBwZ29mZiA9IHJhbmdlX3RyZWVfZmluZChcdTAwMjZhcmVuYS1cdTAwM2VydCwgcGFnZV9jbnQpO1xua2VybmVsL2JwZi9hcmVuYS5jLTcyMS1cdFx0aWYgKHBnb2ZmIFx1MDAzZT0gMClcbmtlcm5lbC9icGYvYXJlbmEuYzo3MjI6XHRcdFx0cmV0ID0gcmFuZ2VfdHJlZV9jbGVhcihcdTAwMjZhcmVuYS1cdTAwM2VydCwgcGdvZmYsIHBhZ2VfY250KTtcbmtlcm5lbC9icGYvYXJlbmEuYy03MjMtXHR9XG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTcyNy1cdHJlbWFpbmluZyA9IHBhZ2VfY250O1xua2VybmVsL2JwZi9hcmVuYS5jOjcyODpcdHVhZGRyMzIgPSAodTMyKShhcmVuYS1cdTAwM2V1c2VyX3ZtX3N0YXJ0ICYjNDM7IHBnb2ZmICogUEFHRV9TSVpFKTtcbmtlcm5lbC9icGYvYXJlbmEuYy03MjktXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTczNS1cbmtlcm5lbC9icGYvYXJlbmEuYzo3MzY6XHRcdHJldCA9IGJwZl9tYXBfYWxsb2NfcGFnZXMoXHUwMDI2YXJlbmEtXHUwMDNlbWFwLCBub2RlX2lkLCB0aGlzX2JhdGNoLCBwYWdlcyk7XG5rZXJuZWwvYnBmL2FyZW5hLmMtNzM3LVx0XHRpZiAocmV0KVxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy03NjMtXHRmbHVzaF92bWFwX2NhY2hlKGtlcm5fdm1fc3RhcnQgJiM0MzsgdWFkZHIzMiwgbWFwcGVkIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUKTtcbmtlcm5lbC9icGYvYXJlbmEuYzo3NjQ6XHRyYXdfcmVzX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2YXJlbmEtXHUwMDNlc3BpbmxvY2ssIGZsYWdzKTtcbmtlcm5lbC9icGYvYXJlbmEuYy03NjUtXHRrZnJlZV9ub2xvY2socGFnZXMpO1xua2VybmVsL2JwZi9hcmVuYS5jLTc2Ni1cdGJwZl9tYXBfbWVtY2dfZXhpdChvbGRfbWVtY2csIG5ld19tZW1jZyk7XG5rZXJuZWwvYnBmL2FyZW5hLmM6NzY3Olx0cmV0dXJuIGNsZWFyX2xvMzIoYXJlbmEtXHUwMDNldXNlcl92bV9zdGFydCkgJiM0MzsgdWFkZHIzMjtcbmtlcm5lbC9icGYvYXJlbmEuYy03Njgtb3V0Olxua2VybmVsL2JwZi9hcmVuYS5jOjc2OTpcdHJhbmdlX3RyZWVfc2V0KFx1MDAyNmFyZW5hLVx1MDAzZXJ0LCBwZ29mZiAmIzQzOyBtYXBwZWQsIHBhZ2VfY250IC0gbWFwcGVkKTtcbmtlcm5lbC9icGYvYXJlbmEuYzo3NzA6XHRyYXdfcmVzX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2YXJlbmEtXHUwMDNlc3BpbmxvY2ssIGZsYWdzKTtcbmtlcm5lbC9icGYvYXJlbmEuYy03NzEtXHRpZiAobWFwcGVkKSB7XG5rZXJuZWwvYnBmL2FyZW5hLmMtNzcyLVx0XHRmbHVzaF92bWFwX2NhY2hlKGtlcm5fdm1fc3RhcnQgJiM0MzsgdWFkZHIzMiwgbWFwcGVkIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUKTtcbmtlcm5lbC9icGYvYXJlbmEuYzo3NzM6XHRcdGFyZW5hX2ZyZWVfcGFnZXMoYXJlbmEsIHVhZGRyMzIsIG1hcHBlZCwgc2xlZXBhYmxlKTtcbmtlcm5lbC9icGYvYXJlbmEuYy03NzQtXHR9XG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTc3Ni1vdXRfdW5sb2NrX2ZyZWVfcGFnZXM6XG5rZXJuZWwvYnBmL2FyZW5hLmM6Nzc3Olx0cmF3X3Jlc19zcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmFyZW5hLVx1MDAzZXNwaW5sb2NrLCBmbGFncyk7XG5rZXJuZWwvYnBmL2FyZW5hLmMtNzc4LW91dF9mcmVlX3BhZ2VzOlxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy03ODgtICovXG5rZXJuZWwvYnBmL2FyZW5hLmM6Nzg5OnN0YXRpYyB2b2lkIHphcF9wYWdlcyhzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSwgbG9uZyB1YWRkciwgbG9uZyBwYWdlX2NudClcbmtlcm5lbC9icGYvYXJlbmEuYy03OTAte1xuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy03OTgtXHQvKlxua2VybmVsL2JwZi9hcmVuYS5jOjc5OTpcdCAqIFRha2luZyBtbWFwX3JlYWRfbG9jaygpIHVuZGVyIGFyZW5hLVx1MDAzZWxvY2sgd291bGQgZGVhZGxvY2sgYWdhaW5zdFxua2VybmVsL2JwZi9hcmVuYS5jOjgwMDpcdCAqIGFyZW5hX3ZtX2Nsb3NlKCksIHdoaWNoIHJ1bnMgd2l0aCBtbWFwX3dyaXRlX2xvY2sgaGVsZCBhbmQgdGhlblxua2VybmVsL2JwZi9hcmVuYS5jOjgwMTpcdCAqIGFjcXVpcmVzIGFyZW5hLVx1MDAzZWxvY2suIERyb3AgYXJlbmEtXHUwMDNlbG9jayBmb3IgbW1hcF9yZWFkX2xvY2soKS5cbmtlcm5lbC9icGYvYXJlbmEuYy04MDItXHQgKlxuLS1cblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAxMToxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzU2MQoJCQkJCQkJb3V0cHV0OiAxNDQKCQkJCQkJCXRob3VnaHRzOiA0NzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIEJQRiBWZXJpZmllciBDaGFuZ2UqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBsb29raW5nIGF0IHRoaXMgY2hhbmdlIGFuZCBJJiMzOTt2ZSBib2lsZWQgaXQgZG93biB0byBhIGZldyBrZXkgcG9pbnRzLiBGaXJzdCwgdGhlIGNvcmUgcmVxdWlyZW1lbnQgaXMgYENPTkZJR19CUEZfU1lTQ0FMTGAg4oCTIHRoYXQmIzM5O3MgdGhlIG1haW4gZHJpdmVyLiBUaGUgYGFyZW5hYCBmdW5jdGlvbmFsaXR5IEkmIzM5O20gaW50ZXJlc3RlZCBpbiwgc3BlY2lmaWNhbGx5IGBhcmVuYS5vYCwgaXMgb25seSBjb21waWxlZCBpZiBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyAqYWxzbyogZW5hYmxlZCBhbG9uZyB3aXRoIHRoZSBzdGFuZGFyZCBgQ09ORklHX01NVWAgYW5kIGBDT05GSUdfNjRCSVRgIGNvbmZpZ3MsIGJ1dCB0aG9zZSBhcmUgZ2VuZXJhbGx5IGEgZ2l2ZW4gb24geDg2XzY0LCB3aGljaCBJJiMzOTttIHdvcmtpbmcgd2l0aC4gU28sIGVzc2VudGlhbGx5LCBgQlBGX1NZU0NBTExgIGlzIHRoZSBjcnVjaWFsIGNvbmZpZ3VyYXRpb24gb3B0aW9uLgoKVGhlIHRlc3Qgc2V0dXAgdXNlcyBib3RoIGBhcmVuYWAgYW5kIGBzdGFja2AgYXRvbWljcywgc28gdGhhdCB0ZWxscyBtZSB0aGUgY2hhbmdlIHdpbGwgaGF2ZSBpbXBsaWNhdGlvbnMgaW4gdGhlc2UgYXJlYXMuIFRoZSB0ZXN0IGZpbGUgaXMgYHZlcmlmaWVyX2FyZW5hLmNgLCBidXQgdGhlIHJlYWwgZm9jdXMgbmVlZHMgdG8gYmUgb24gdGhlIHZlcmlmaWVyIGl0c2VsZi4KCk5vdywgdG8gc29saWRpZnkgYSBmb2NhbCBwb2ludCwgSSBkb3VibGUtY2hlY2tlZCB0aGUgcmVhY2hhYmlsaXR5IG9mIGBjaGVja19hdG9taWNfcm13YC4gSXQmIzM5O3MgZGVmaW5pdGVseSByZWFjaGFibGU7IGl0JiMzOTtzIGNhbGxlZCBieSBgY2hlY2tfYXRvbWljYCwgd2hpY2ggaW4gdHVybiBpcyBjYWxsZWQgYnkgYGRvX2NoZWNrX2luc25gLCB3aGljaCBpcyBjYWxsZWQgYnkgYGRvX2NoZWNrYCwgd2hpY2ggaXMgZmluYWxseSBjYWxsZWQgYnkgYGJwZl9jaGVja2AuIEFuZCB0aGF0JiMzOTtzIGV4YWN0bHkgd2hhdCBJIG5lZWQuIEdpdmVuIHRoZSBpbnN0cnVjdGlvbnMgdG8gcHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIGVudHJ5cG9pbnQgZnVuY3Rpb25zLCBgYnBmX2NoZWNrYCBpcyB0aGUgKnBlcmZlY3QqIHN5bWJvbCB0byBmb2N1cyBvbi4gSXQmIzM5O3MgdGhlIG1haW4gdmVyaWZpZXIgZW50cnkgcG9pbnQuCgpMb29raW5nIGF0IHRoZSBjb2RlIGNoYW5nZSBpdHNlbGY6CgpgYGBjCi0JaWYgKGlzX2FyZW5hX3JlZyhlbnYsIGluc24tJmd0O2RzdF9yZWcpKSB7Ci0JCWVyciA9IHNhdmVfYXV4X3B0cl90eXBlKGVudiwgUFRSX1RPX0FSRU5BLCBmYWxzZSk7Ci0JCWlmIChlcnIpCi0JCQlyZXR1cm4gZXJyOwotCX0KJiM0MzsJZXJyID0gc2F2ZV9hdXhfcHRyX3R5cGUoZW52LCBkc3RfcmVnLSZndDt0eXBlLCBmYWxzZSk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlyZXR1cm4gZXJyOwpgYGAKClRoaXMgaXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlICp3aXRoaW4qIHRoZSB2ZXJpZmllciBsb2dpYy4gSXQgbG9va3MgbGlrZSB0aGUgdHlwZSBpbmZvcm1hdGlvbiBpcyBiZWluZyBoYW5kbGVkIGRpZmZlcmVudGx5LiBJdCYjMzk7cyBjbGVhcmx5IHdvcnRoIGZ1enppbmcgdG8gdW5jb3ZlciBhbnkgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyBpbnRyb2R1Y2VkIGJ5IHRoaXMuCgpTbywgdGhlIGdhbWUgcGxhbiBpczoKCiogICAqKkZvY3VzIHN5bWJvbDoqKiBgYnBmX2NoZWNrYAoqICAgKipFbmFibGUgY29uZmlnOioqIGBCUEZfU1lTQ0FMTGAgKHNpbmNlIGl0IGFwcGVhcnMgdG8gYmUgdGhlIG1vc3QgcmVsZXZhbnQpCgpXaXRoIHRoYXQsIEkmIzM5O2xsIGJlIHVzaW5nIGBzZXQtcmVzdWx0c2AgdG8gcHJvcGVybHkgZGVmaW5lIHRoaXMgZnV6emluZyBhcHByb2FjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMTE6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2NoZWNrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXImIzM5O3MgaGFuZGxpbmcgb2YgYXRvbWljIHJlYWQtbW9kaWZ5LXdyaXRlIChSTVcpIGluc3RydWN0aW9ucyBieSBzYXZpbmcgdGhlIGF1eGlsaWFyeSBwb2ludGVyIHR5cGUgZm9yIGFsbCBkZXN0aW5hdGlvbiByZWdpc3RlcnMsIG5vdCBqdXN0IGFyZW5hIHJlZ2lzdGVycy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIGtlcm5lbCBCUEYgdmVyaWZpZXIgbG9naWMgdGhhdCBhZmZlY3RzIGhvdyBhdG9taWMgb3BlcmF0aW9ucyBhcmUgdmVyaWZpZWQgYW5kIGhhbmRsZWQsIHBhcnRpY3VsYXJseSB3aGVuIG1peGluZyBkaWZmZXJlbnQgcG9pbnRlciB0eXBlcyAobGlrZSBhcmVuYSBhbmQgc3RhY2sgcG9pbnRlcnMpIGluIHRoZSBzYW1lIGluc3RydWN0aW9uLiBUaGlzIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIHRoZSBicGYoKSBzeXNjYWxsIGFuZCBpcyB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9jaGVjayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyJiMzOTtzIGhhbmRsaW5nIG9mIGF0b21pYyByZWFkLW1vZGlmeS13cml0ZSAoUk1XKSBpbnN0cnVjdGlvbnMgYnkgc2F2aW5nIHRoZSBhdXhpbGlhcnkgcG9pbnRlciB0eXBlIGZvciBhbGwgZGVzdGluYXRpb24gcmVnaXN0ZXJzLCBub3QganVzdCBhcmVuYSByZWdpc3RlcnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBrZXJuZWwgQlBGIHZlcmlmaWVyIGxvZ2ljIHRoYXQgYWZmZWN0cyBob3cgYXRvbWljIG9wZXJhdGlvbnMgYXJlIHZlcmlmaWVkIGFuZCBoYW5kbGVkLCBwYXJ0aWN1bGFybHkgd2hlbiBtaXhpbmcgZGlmZmVyZW50IHBvaW50ZXIgdHlwZXMgKGxpa2UgYXJlbmEgYW5kIHN0YWNrIHBvaW50ZXJzKSBpbiB0aGUgc2FtZSBpbnN0cnVjdGlvbi4gVGhpcyBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSB0aGUgYnBmKCkgc3lzY2FsbCBhbmQgaXMgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMTE6MTk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAxMToxOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIEJQRiB2ZXJpZmllciBidWcgd2hlcmUgYHNhdmVfYXV4X3B0cl90eXBlKClgIHdhcyBub3QgY2FsbGVkIGZvciBhbGwgcG9pbnRlciB0eXBlcyBkdXJpbmcgYXRvbWljIHJlYWQtbW9kaWZ5LXdyaXRlIChSTVcpIGluc3RydWN0aW9uIHZlcmlmaWNhdGlvbi4gVGhpcyBvbWlzc2lvbiBhbGxvd2VkIGEgbWFsaWNpb3VzIEJQRiBwcm9ncmFtIHRvIHVzZSB0aGUgc2FtZSBhdG9taWMgaW5zdHJ1Y3Rpb24gd2l0aCBkaWZmZXJlbnQgcG9pbnRlciB0eXBlcyAoZS5nLiwgbWl4aW5nIGBQVFJfVE9fQVJFTkFgIGFuZCBgUFRSX1RPX1NUQUNLYCBpbiBkaWZmZXJlbnQgYnJhbmNoZXMpLiBTdWNoIHZlcmlmaWVyIGJ5cGFzc2VzIHR5cGljYWxseSBsZWFkIHRvIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBvciBtZW1vcnkgY29ycnVwdGlvbiBkdWUgdG8gaW5jb3JyZWN0IEpJVCBjb21waWxhdGlvbiBvciBtaXNzaW5nIHJ1bnRpbWUgY2hlY2tzLiBUaGVzZSB0eXBlcyBvZiBtZW1vcnkgc2FmZXR5IHZpb2xhdGlvbnMgYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYzM3MDFhODFhYTU1ZThmOTgyNDgwODExZjY5NTRkZmIyOWFmMDEwMQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gQXVnIDE2IDExOjE4OjIxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jCmluZGV4IGQxN2YxNGIzNWI3OWYuLjkzNDYzY2FmNWM5YWQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKQEAgLTY3MzksMTEgJiM0Mzs2NzM5LDkgQEAgc3RhdGljIGludCBjaGVja19hdG9taWNfcm13KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAotCWlmIChpc19hcmVuYV9yZWcoZW52LCBpbnNuLSZndDtkc3RfcmVnKSkgewotCQllcnIgPSBzYXZlX2F1eF9wdHJfdHlwZShlbnYsIFBUUl9UT19BUkVOQSwgZmFsc2UpOwotCQlpZiAoZXJyKQotCQkJcmV0dXJuIGVycjsKLQl9CiYjNDM7CWVyciA9IHNhdmVfYXV4X3B0cl90eXBlKGVudiwgZHN0X3JlZy0mZ3Q7dHlwZSwgZmFsc2UpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJcmV0dXJuIGVycjsKIAkvKiBDaGVjayB3aGV0aGVyIHdlIGNhbiB3cml0ZSBpbnRvIHRoZSBzYW1lIG1lbW9yeS4gKi8KIAllcnIgPSBjaGVja19tZW1fYWNjZXNzKGVudiwgZW52LSZndDtpbnNuX2lkeCwgZHN0X3JlZywgYXJnbm9fZnJvbV9yZWcoaW5zbi0mZ3Q7ZHN0X3JlZyksIGluc24tJmd0O29mZiwKIAkJCSAgICAgICBCUEZfU0laRShpbnNuLSZndDtjb2RlKSwgQlBGX1dSSVRFLCAtMSwgdHJ1ZSwgZmFsc2UpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYwppbmRleCBiMjQxYmJjZjU0YThhLi5iMjJiYWIzMzMwMWFiIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYwpAQCAtNjM3LDYgJiM0Mzs2MzcsNDUgQEAgaW50IG5vbl9hcmVuYV9wdHJfYWRkX3RvX2FyZW5hX3B0cih2b2lkICpjdHgpCiAKICNlbmRpZgogCiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfaW5zbiBhZGRyX3NwYWNlX2Nhc3RfaW5zbiA9IHsKJiM0MzsJLmNvZGUgPSAweGJmLAomIzQzOwkuZHN0X3JlZyA9IEJQRl9SRUdfNywKJiM0MzsJLnNyY19yZWcgPSBCUEZfUkVHXzcsCiYjNDM7CS5vZmYgPSAxLAomIzQzOwkuaW1tID0gMSwKJiM0Mzt9OwomIzQzOwomIzQzO1NFQygmIzM0O3NvY2tldCYjMzQ7KQomIzQzO19fZGVzY3JpcHRpb24oJiMzNDthcmVuYSBhbmQgc3RhY2sgYXRvbWljIGF0IHRoZSBzYW1lIGluc3RydWN0aW9uJiMzNDspCiYjNDM7X19mYWlsdXJlIF9fbXNnKCYjMzQ7c2FtZSBpbnNuIGNhbm5vdCBiZSB1c2VkIHdpdGggZGlmZmVyZW50IHBvaW50ZXJzJiMzNDspCiYjNDM7X19hcmNoX3g4Nl82NAomIzQzO19fbG9hZF9pZl9KSVRlZCgpCiYjNDM7X19uYWtlZCB2b2lkIG1peGVkX2FyZW5hX3N0YWNrX2F0b21pYyh2b2lkKQomIzQzO3sKJiM0MzsJYXNtIHZvbGF0aWxlICgmIzM0OwkJCQkJXAomIzQzOwlyMSA9ICVbYXJlbmFdIGxsOwkJCQlcCiYjNDM7CXI2ID0gcjEwOwkJCQkJXAomIzQzOwlyNiAmIzQzOz0gLTg7CQkJCQlcCiYjNDM7CXI5ID0gMDsJCQkJCVwKJiM0MzsJKih1NjQgKikocjYgJiM0MzsgMCkgPSByOTsJCQlcCiYjNDM7CXI3ID0gODE5MjsJCQkJCVwKJiM0MzsJLjhieXRlICVbYWRkcl9zcGFjZV9jYXN0XTsJCQlcCiYjNDM7CWNhbGwgJVticGZfZ2V0X3ByYW5kb21fdTMyXTsJCQlcCiYjNDM7CWlmIHcwICE9IDAgZ290byAxZjsJCQkJXAomIzQzOwlyOCA9IHI2OwkJCQkJXAomIzQzOwlnb3RvIDJmOwkJCQkJXAomIzQzOzE6CXI4ID0gcjc7CQkJCQlcCiYjNDM7MjoJcjkgPSAxOwkJCQkJXAomIzQzOwlsb2NrICoodTY0ICopKHI4ICYjNDM7IDApICYjNDM7PSByOTsJCQlcCiYjNDM7CXIwID0gMDsJCQkJCVwKJiM0MzsJZXhpdDsJCQkJCQlcCiYjNDM7JiMzNDsJOgomIzQzOwk6IF9faW1tX2FkZHIoYXJlbmEpLAomIzQzOwkgIF9faW1tX2luc24oYWRkcl9zcGFjZV9jYXN0LCBhZGRyX3NwYWNlX2Nhc3RfaW5zbiksCiYjNDM7CSAgX19pbW0oYnBmX2dldF9wcmFuZG9tX3UzMikKJiM0MzsJOiBfX2Nsb2JiZXJfYWxsKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgX19ub2lubGluZQogdTMyIF9fYXJlbmEgKmNoZWNrX2FyZW5hX2FyZ19ub25nbG9iYWwodTMyIF9fYXJlbmEgKmFyZykKIHsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDExOjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3NDgKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgVmVyaWZpZXIgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIHRoZSBCUEYgdmVyaWZpZXIuIEl0IHNlZW1zIHRoZXkmIzM5O3ZlIG1hZGUgYSB0YXJnZXRlZCBtb2RpZmljYXRpb24gd2l0aGluIGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgLCBzcGVjaWZpY2FsbHkgdG8gdGhlIGBjaGVja19hdG9taWNfcm13YCBmdW5jdGlvbi4gVGhlIGtleSBjaGFuZ2UgaXMgYSBzaW1wbGlmaWNhdGlvbiBvZiB0aGUgbG9naWMgc3Vycm91bmRpbmcgYHNhdmVfYXV4X3B0cl90eXBlYC4gQmVmb3JlLCB0aGV5IHdlcmUgb25seSBjYWxsaW5nIGl0IGlmIHRoZSBkZXN0aW5hdGlvbiByZWdpc3RlciAoYGluc24tJmd0O2RzdF9yZWdgKSB3YXMgaWRlbnRpZmllZCBhcyBwb2ludGluZyB0byBhbiBhcmVuYSAoYGlzX2FyZW5hX3JlZ2ApLiBOb3csIHRoZXkgYXJlIGNhbGxpbmcgYHNhdmVfYXV4X3B0cl90eXBlYCBmb3IgZXZlcnkgcG9pbnRlciB0eXBlLCB1c2luZyB0aGUgcmVnaXN0ZXImIzM5O3MgZGVjbGFyZWQgYHR5cGVgLiBFc3NlbnRpYWxseSwgdGhleSYjMzk7dmUgZXhwYW5kZWQgdGhlIGFwcGxpY2FiaWxpdHkgb2YgdGhpcyBmdW5jdGlvbi4KCkl0IG1ha2VzIHNlbnNlLCBnaXZlbiB0aGUgcG90ZW50aWFsIGZvciBwb2ludGVyIHR5cGVzIHRvIGJlIG1peGVkIHVwLiBUaGUgb2xkIGNoZWNrIHdhcyB0b28gcmVzdHJpY3RpdmUuIFRoZSB1cGRhdGVkIGxvZ2ljIGlzIG1vcmUgcm9idXN0LiBUaGF0IHNlZW1zIGxpa2UgYSByZWFzb25hYmxlIGFkanVzdG1lbnQgdG8gZW5zdXJlIHRoYXQgYHNhdmVfYXV4X3B0cl90eXBlYCBhY2N1cmF0ZWx5IHJlZmxlY3RzIHRoZSBwb2ludGVyIHR5cGUgaW4gYWxsIHJlbGV2YW50IGF0b21pYyByZWFkLW1vZGlmeS13cml0ZSBzY2VuYXJpb3MuCgpUbyB2YWxpZGF0ZSB0aGlzIGNoYW5nZSwgYSBuZXcgdGVzdCBjYXNlLCBgbWl4ZWRfYXJlbmFfc3RhY2tfYXRvbWljYCwgaGFzIGJlZW4gaW50cm9kdWNlZC4gTXkgZ3Vlc3MgaXMgaXQmIzM5O3MgZGVzaWduZWQgdG8gc3BlY2lmaWNhbGx5IGNhdGNoIHRoZSBzaXR1YXRpb24gd2hlcmUgc29tZW9uZSBtaWdodCBhdHRlbXB0IHRvIHVzZSB0aGUgc2FtZSBpbnN0cnVjdGlvbiB3aXRoIGEgbWl4IG9mIGFyZW5hIGFuZCBzdGFjayBwb2ludGVycy4gQSBnb29kIHRlc3QgY2FzZSwgZ2l2ZW4gdGhlIHB1cnBvc2Ugb2YgdGhlIHVwZGF0ZS4gVGhlIHBhdGNoIGlzIHByb2JhYmx5IHRyeWluZyB0byBjYXRjaCBzb21lIG9ic2N1cmUgY2FzZSB3aGVyZSB0aGUgY3VycmVudCB2ZXJpZmljYXRpb24gbG9naWMgaXMgaW5zdWZmaWNpZW50LgoKTm93LCBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIGBzYXZlX2F1eF9wdHJfdHlwZWAgdG8gZnVsbHkgZ3Jhc3AgdGhlIHJhbWlmaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UuIEl0JiMzOTtzIHRoZSBjb3JlIGZ1bmN0aW9uIGhlcmUsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgaXQgZG9lcyBhbmQgaG93IHRoZSBuZXcgaW1wbGVtZW50YXRpb24gaW1wYWN0cyB0aGUgdmVyaWZpZXImIzM5O3MgYmVoYXZpb3IuIFRpbWUgdG8gZGVsdmUgaW50byB0aGF0IGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAxMToxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzYXZlX2F1eF9wdHJfdHlwZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NjMzND1zdGF0aWMgaW50IGNoZWNrX21lbV9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGluc25faWR4LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCBhcmdub190IGFyZ25vLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NTc5LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjY1ODA6c3RhdGljIGludCBzYXZlX2F1eF9wdHJfdHlwZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBlbnVtIGJwZl9yZWdfdHlwZSB0eXBlLFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY1ODEtXHRcdFx0ICAgICBib29sIGFsbG93X3RydXN0X21pc21hdGNoKTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NjU4Mz1zdGF0aWMgaW50IGNoZWNrX2xvYWRfbWVtKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjYyMC1cdFx0XHQgICAgICAgc3RyaWN0X2FsaWdubWVudF9vbmNlLCBpc19sZHN4KTtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2NjIxOlx0ZXJyID0gZXJyID86IHNhdmVfYXV4X3B0cl90eXBlKGVudiwgc3JjX3JlZ190eXBlLFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY2MjItXHRcdFx0XHQgICAgICAgYWxsb3dfdHJ1c3RfbWlzbWF0Y2gpO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz02NjMwPXN0YXRpYyBpbnQgY2hlY2tfc3RvcmVfcmVnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjY2Mi1cdFx0XHQgICAgICAgc3RyaWN0X2FsaWdubWVudF9vbmNlLCBmYWxzZSk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjY2MzpcdGVyciA9IGVyciA/OiBzYXZlX2F1eF9wdHJfdHlwZShlbnYsIGRzdF9yZWdfdHlwZSwgZmFsc2UpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTY2NjQtXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTY2Njg9c3RhdGljIGludCBjaGVja19hdG9taWNfcm13KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTY3NDEtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6Njc0MjpcdGVyciA9IHNhdmVfYXV4X3B0cl90eXBlKGVudiwgZHN0X3JlZy1cdTAwM2V0eXBlLCBmYWxzZSk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjc0My1cdGlmIChlcnIpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE3ODYwPXN0YXRpYyBib29sIGlzX3B0cl90b19tZW0oZW51bSBicGZfcmVnX3R5cGUgdHlwZSlcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTc4NjQtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTc4NjU6c3RhdGljIGludCBzYXZlX2F1eF9wdHJfdHlwZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBlbnVtIGJwZl9yZWdfdHlwZSB0eXBlLFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3ODY2LVx0XHRcdCAgICAgYm9vbCBhbGxvd190cnVzdF9taXNtYXRjaClcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTgwNzA9c3RhdGljIGludCBkb19jaGVja19pbnNuKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGJvb2wgKmRvX3ByaW50X3N0YXRlKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODExMy1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxODExNDpcdFx0cmV0dXJuIHNhdmVfYXV4X3B0cl90eXBlKGVudiwgZHN0X3JlZ190eXBlLCBmYWxzZSk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTgxMTUtXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDExOjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQxMjIKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBgc2F2ZV9hdXhfcHRyX3R5cGVgKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgc2F2ZV9hdXhfcHRyX3R5cGVgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29yZSBwdXJwb3NlIGFuZCBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIHRvIGFzc2VzcyBpdHMgaW1wbGljYXRpb25zLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCBpdHMgaW50ZW5kZWQgZnVuY3Rpb24uCgpXaGF0IGV4YWN0bHkgaXMgaXQgc3VwcG9zZWQgdG8gc2F2ZT8gSXMgaXQgcmVsYXRlZCB0byBjYWNoaW5nLCBtZXRhZGF0YSBtYW5hZ2VtZW50LCBvciBzb21ldGhpbmcgbW9yZSBmdW5kYW1lbnRhbCB0byB0aGUgZGF0YSBzdHJ1Y3R1cmUgaXQmIzM5O3Mgb3BlcmF0aW5nIG9uPyBJIHNob3VsZCBsb29rIGF0IHdoZXJlIGFuZCBob3cgaXQmIzM5O3MgY2FsbGVkLiBUaGUgY2FsbCBjb250ZXh0IG9mZmVycyB0aGUgYmVzdCBjbHVlIHJlZ2FyZGluZyB0aGUgbmF0dXJlIG9mIHRoZSBkYXRhIHR5cGUgaXQgZGVhbHMgd2l0aC4gQWxzbywgd2hhdCBpcyBpdCYjMzk7cyByZWxhdGlvbnNoaXAgd2l0aCBvdGhlciBtZW1vcnkgbWFuYWdlbWVudCByb3V0aW5lcy4gQXJlIHdlIGxvb2tpbmcgYXQgYSBsb2NhbCBjb3B5LCBvciBhIHBvaW50ZXIgdG8gdGhlIG9yaWdpbmFsIG1lbW9yeSBibG9jaz8KCkkmIzM5O2xsIGNoZWNrIHRoZSBhc3NvY2lhdGVkIGRhdGEgc3RydWN0dXJlcy4gSSBuZWVkIHRvIGRldGVybWluZSB0aGUgcG9pbnRlciBiZWluZyBzYXZlZCBpcyBwYXJ0IG9mIGEgY29tcG91bmQgdHlwZSBhbmQgbmVlZHMgcmVjb25zdHJ1Y3Rpb24uIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgc291cmNlIG9mIHRoZSBkYXRhOiBpcyBpdCBjb21pbmcgZnJvbSBhIGdsb2JhbCBzdGF0ZSwgYSBzdGFjaywgb3IgYSBoZWFwPyBVbmRlcnN0YW5kaW5nIHRoZSBhbGxvY2F0aW9uIHN0cmF0ZWd5IGlzIGtleS4gQXJlIHRoZXJlIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgbWVtb3J5IGxlYWtzIGFzc29jaWF0ZWQgd2l0aCBob3cgdGhpcyBwb2ludGVyIGlzIGhhbmRsZWQ/CgpFc3NlbnRpYWxseSwgSSBuZWVkIHRvIHRyYWNlIGl0cyB1c2FnZSwgaWRlbnRpZnkgaXRzIHJvbGUgd2l0aGluIHRoZSB3aWRlciBmcmFtZXdvcmssIGFuZCBhbnRpY2lwYXRlIGFueSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIG9yIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAxMToxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvdmVyaWZpZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE3ODY1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE3ODY1Olx0c3RhdGljIGludCBzYXZlX2F1eF9wdHJfdHlwZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBlbnVtIGJwZl9yZWdfdHlwZSB0eXBlLFxuMTc4NjY6XHRcdFx0XHQgICAgIGJvb2wgYWxsb3dfdHJ1c3RfbWlzbWF0Y2gpXG4xNzg2NzpcdHtcbjE3ODY4Olx0XHRlbnVtIGJwZl9yZWdfdHlwZSAqcHJldl90eXBlID0gXHUwMDI2ZW52LVx1MDAzZWluc25fYXV4X2RhdGFbZW52LVx1MDAzZWluc25faWR4XS5wdHJfdHlwZTtcbjE3ODY5Olx0XHRlbnVtIGJwZl9yZWdfdHlwZSBtZXJnZWRfdHlwZTtcbjE3ODcwOlx0XG4xNzg3MTpcdFx0aWYgKCpwcmV2X3R5cGUgPT0gTk9UX0lOSVQpIHtcbjE3ODcyOlx0XHRcdC8qIFNhdyBhIHZhbGlkIGluc25cbjE3ODczOlx0XHRcdCAqIGRzdF9yZWcgPSAqKHUzMiAqKShzcmNfcmVnICYjNDM7IG9mZilcbjE3ODc0Olx0XHRcdCAqIHNhdmUgdHlwZSB0byB2YWxpZGF0ZSBpbnRlcnNlY3RpbmcgcGF0aHNcbjE3ODc1Olx0XHRcdCAqL1xuMTc4NzY6XHRcdFx0KnByZXZfdHlwZSA9IHR5cGU7XG4xNzg3NzpcdFx0fSBlbHNlIGlmIChyZWdfdHlwZV9taXNtYXRjaCh0eXBlLCAqcHJldl90eXBlKSkge1xuMTc4Nzg6XHRcdFx0LyogQWJ1c2VyIHByb2dyYW0gaXMgdHJ5aW5nIHRvIHVzZSB0aGUgc2FtZSBpbnNuXG4xNzg3OTpcdFx0XHQgKiBkc3RfcmVnID0gKih1MzIqKSAoc3JjX3JlZyAmIzQzOyBvZmYpXG4xNzg4MDpcdFx0XHQgKiB3aXRoIGRpZmZlcmVudCBwb2ludGVyIHR5cGVzOlxuMTc4ODE6XHRcdFx0ICogc3JjX3JlZyA9PSBjdHggaW4gb25lIGJyYW5jaCBhbmRcbjE3ODgyOlx0XHRcdCAqIHNyY19yZWcgPT0gc3RhY2t8bWFwIGluIHNvbWUgb3RoZXIgYnJhbmNoLlxuMTc4ODM6XHRcdFx0ICogUmVqZWN0IGl0LlxuMTc4ODQ6XHRcdFx0ICovXG4xNzg4NTpcdFx0XHRpZiAoYWxsb3dfdHJ1c3RfbWlzbWF0Y2ggXHUwMDI2XHUwMDI2XG4xNzg4NjpcdFx0XHQgICAgaXNfcHRyX3RvX21lbV9vcl9idGZfaWQodHlwZSkgXHUwMDI2XHUwMDI2XG4xNzg4NzpcdFx0XHQgICAgaXNfcHRyX3RvX21lbV9vcl9idGZfaWQoKnByZXZfdHlwZSkpIHtcbjE3ODg4Olx0XHRcdFx0LypcbjE3ODg5Olx0XHRcdFx0ICogSGF2ZSB0byBzdXBwb3J0IGEgdXNlIGNhc2Ugd2hlbiBvbmUgcGF0aCB0aHJvdWdoXG4xNzg5MDpcdFx0XHRcdCAqIHRoZSBwcm9ncmFtIHlpZWxkcyBUUlVTVEVEIHBvaW50ZXIgd2hpbGUgYW5vdGhlclxuMTc4OTE6XHRcdFx0XHQgKiBpcyBVTlRSVVNURUQuIEZhbGxiYWNrIHRvIFVOVFJVU1RFRCB0byBnZW5lcmF0ZVxuMTc4OTI6XHRcdFx0XHQgKiBCUEZfUFJPQkVfTUVNL0JQRl9QUk9CRV9NRU1TWC5cbjE3ODkzOlx0XHRcdFx0ICogU2FtZSBiZWhhdmlvciBvZiBNRU1fUkRPTkxZIGZsYWcuXG4xNzg5NDpcdFx0XHRcdCAqL1xuMTc4OTU6XHRcdFx0XHRpZiAoaXNfcHRyX3RvX21lbSh0eXBlKSB8fCBpc19wdHJfdG9fbWVtKCpwcmV2X3R5cGUpKVxuMTc4OTY6XHRcdFx0XHRcdG1lcmdlZF90eXBlID0gUFRSX1RPX01FTTtcbjE3ODk3Olx0XHRcdFx0ZWxzZVxuMTc4OTg6XHRcdFx0XHRcdG1lcmdlZF90eXBlID0gUFRSX1RPX0JURl9JRDtcbjE3ODk5Olx0XHRcdFx0aWYgKCh0eXBlIFx1MDAyNiBQVFJfVU5UUlVTVEVEKSB8fCAoKnByZXZfdHlwZSBcdTAwMjYgUFRSX1VOVFJVU1RFRCkpXG4xNzkwMDpcdFx0XHRcdFx0bWVyZ2VkX3R5cGUgfD0gUFRSX1VOVFJVU1RFRDtcbjE3OTAxOlx0XHRcdFx0aWYgKCh0eXBlIFx1MDAyNiBNRU1fUkRPTkxZKSB8fCAoKnByZXZfdHlwZSBcdTAwMjYgTUVNX1JET05MWSkpXG4xNzkwMjpcdFx0XHRcdFx0bWVyZ2VkX3R5cGUgfD0gTUVNX1JET05MWTtcbjE3OTAzOlx0XHRcdFx0KnByZXZfdHlwZSA9IG1lcmdlZF90eXBlO1xuMTc5MDQ6XHRcdFx0fSBlbHNlIHtcbjE3OTA1Olx0XHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O3NhbWUgaW5zbiBjYW5ub3QgYmUgdXNlZCB3aXRoIGRpZmZlcmVudCBwb2ludGVyc1xcblwmIzM0Oyk7XG4xNzkwNjpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTc5MDc6XHRcdFx0fVxuMTc5MDg6XHRcdH1cbjE3OTA5Olx0XG4xNzkxMDpcdFx0cmV0dXJuIDA7XG4xNzkxMTpcdH1cbjE3OTEyOlx0XG4xNzkxMzpcdGVudW0ge1xuMTc5MTQ6XHRcdFBST0NFU1NfQlBGX0VYSVQgPSAxLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAxMToxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MzU0CgkJCQkJCQlvdXRwdXQ6IDE4NwoJCQkJCQkJdGhvdWdodHM6IDEwNjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgdGhlIEF0b21pYyBSTVcgUG9pbnRlciBUeXBlIEJ1ZyBGaXgqKgoKT2theSwgaGVyZSYjMzk7cyBteSB1bmRlcnN0YW5kaW5nIG9mIHRoaXMgcGF0Y2ggYW5kIHRoZSBhc3NvY2lhdGVkIGltcGxpY2F0aW9ucy4gVGhlIGNvcmUgaXNzdWUgcmV2b2x2ZXMgYXJvdW5kIGhvdyB0aGUgdmVyaWZpZXIgaGFuZGxlcyBhdG9taWMgUk1XIGluc3RydWN0aW9ucyBhbmQgdGhlIHBvaW50ZXIgdHlwZXMgdGhleSBvcGVyYXRlIG9uLiBQcmV2aW91c2x5LCBgc2F2ZV9hdXhfcHRyX3R5cGVgIHdhcyBvbmx5IGNhbGxlZCB3aXRoaW4gYGNoZWNrX2F0b21pY19ybXdgIGlmIHRoZSBkZXN0aW5hdGlvbiByZWdpc3RlciB3YXMgYW4gYXJlbmEgcmVnaXN0ZXIsIHVzaW5nIGBpc19hcmVuYV9yZWdgLiBUaGlzIGNyZWF0ZWQgYSBjcml0aWNhbCBmbGF3LgoKSWYgYHNhdmVfYXV4X3B0cl90eXBlYCAqd2FzbiYjMzk7dCogY2FsbGVkLCB0aGUgdmVyaWZpZXIgd291bGRuJiMzOTt0IHRyYWNrIG9yIGVuZm9yY2UgdGhhdCBhIGNvbnNpc3RlbnQgcG9pbnRlciB0eXBlIHdhcyB1c2VkIGFjcm9zcyBhbGwgYnJhbmNoZXMgb2YgdGhlIGF0b21pYyBSTVcuIFRoaXMgbWVhbnMgdGhlIHByb2dyYW0gY291bGQgcG90ZW50aWFsbHkgdXNlIGBQVFJfVE9fU1RBQ0tgLCBgUFRSX1RPX0FSRU5BYCwgb3IgYFBUUl9UT19NQVBfVkFMVUVgIGluIGRpZmZlcmVudCBicmFuY2hlcyBvZiB0aGUgcHJvZ3JhbS4KClRoZSBjb25zZXF1ZW5jZT8gVGhlIEpJVCBjb3VsZCBnZW5lcmF0ZSBjb2RlIG9wdGltaXplZCBmb3IgYSBzcGVjaWZpYyBwb2ludGVyIHR5cGUg4oCTIHNheSwgYXJlbmEgcG9pbnRlcnMsIHdoaWNoIG1pZ2h0IG5lY2Vzc2l0YXRlIHNwZWNpZmljIGJhc2UgcmVnaXN0ZXJzIG9yIGFkZHJlc3Mgc3BhY2UgY2FzdGluZyDigJMgYnV0LCBhdCBydW50aW1lLCB0aGUgc2FtZSBhdG9taWMgaW5zdHJ1Y3Rpb24gY291bGQgYmUgZXhlY3V0ZWQgd2l0aCBhIGRpZmZlcmVudCBwb2ludGVyIHR5cGUsIGxpa2UgYSBzdGFjayBwb2ludGVyLgoKSWYgdGhlIHZlcmlmaWVyIGRvZXNuJiMzOTt0IGNhdGNoIGl0LCB0aGlzIGNvdWxkIGNhdXNlIG1lbW9yeSBjb3JydXB0aW9uLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciBvdGhlciBpc3N1ZXMuIEZvciBpbnN0YW5jZSwgYW4gYXRvbWljIHdyaXRlIG9uIGFuIGFyZW5hIGFkZHJlc3Mgd2hlbiBzdGFjayBtZW1vcnkgaXMgZXhwZWN0ZWQgY291bGQgbGVhZCB0byBhIHJlYWQgb3Igd3JpdGUgdG8gYW4gaW52YWxpZCBhZGRyZXNzIG9yIHBvdGVudGlhbGx5IG92ZXJ3cml0ZSBzb21ldGhpbmcgaW1wb3J0YW50LiBDb252ZXJzZWx5LCBpZiBpdCB0aGlua3MgaXQmIzM5O3Mgd29ya2luZyB3aXRoIHN0YWNrIG1lbW9yeSB3aGVuIGl0JiMzOTtzIHJlYWxseSBhbiBhcmVuYSBhZGRyZXNzLCB0aGF0JiMzOTtzIGEgcHJvYmxlbSB0b28uCgpUaGUgcXVlc3Rpb24gdGhlbiBiZWNvbWVzOiBkb2VzIHRoaXMgYnVnIHVuaXF1ZWx5IGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IEtNU0FOIHdvdWxkIGRldGVjdD8gTXkgYXNzZXNzbWVudCBpcyBuby4gVGhpcyBpcyBhIGNsYXNzaWMgdmVyaWZpZXIgYnlwYXNzLCB3aGVyZSB0aGUgdmVyaWZpZXIgZmFpbHMgdG8gZW5mb3JjZSBtZW1vcnkgc2FmZXR5IHJ1bGVzLiBUaGlzIHR5cGljYWxseSBtYW5pZmVzdHMgYXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIG9yIG1lbW9yeSBjb3JydXB0aW9uLiBUaGVzZSBwcm9ibGVtcyBhcmUgY2F1Z2h0IGJ5IEtBU0FOLiBXaGlsZSB0aGVyZSYjMzk7cyBhIHRoZW9yZXRpY2FsIHJpc2sgb2YgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSwgYXRvbWljIGluc3RydWN0aW9ucyBsaWtlIGBsb2NrICoodTY0ICopKHI4ICYjNDM7IDApICYjNDM7PSByOWAgbW9kaWZ5IG1lbW9yeSBpbiBwbGFjZS4gVGhleSBkb24mIzM5O3QgY29weSB0aGUgdmFsdWUgb2YgdGhlIG1lbW9yeSB0byBhIHJlZ2lzdGVyIHRoYXQgbWlnaHQgdGhlbiBiZSBsZWFrZWQsIGV4Y2VwdCBtYXliZSBmb3IgYEJQRl9GRVRDSGAgaW5zdHJ1Y3Rpb25zIHdoaWNoIHJldHVybiB0aGUgb2xkIHZhbHVlIGluIGEgcmVnaXN0ZXIuIEtBU0FOIGlzIHN1ZmZpY2llbnQgZm9yIGNhdGNoaW5nIHRoZSByZXN1bHRpbmcgT09CIGFjY2VzcyBpbiBhbnkgY2FzZSwgc28gS01TQU4gaXNuJiMzOTt0IG5lZWRlZCBoZXJlLiBUaGUgYnVnJiMzOTtzIHJvb3QgY2F1c2UgaXMgYSB2ZXJpZmllciBieXBhc3MgYWxsb3dpbmcgdGhlIG1peGluZyBvZiBwb2ludGVyIHR5cGVzLiBUaGUgc3RhbmRhcmQgS0FTQU4gY2hlY2tzIGFyZSBzdWZmaWNpZW50LgoKTG9va2luZyBhdCB0aGUgcGF0Y2ggaXRzZWxmLCB0aGUgZml4IGlzIHN0cmFpZ2h0Zm9yd2FyZC4gVGhleSYjMzk7cmUgcmVwbGFjaW5nIHRoZSBvcmlnaW5hbCBgaWYgKGlzX2FyZW5hX3JlZyhlbnYsIGluc24tJmd0O2RzdF9yZWcpKWAgY29uZGl0aW9uIHdpdGggYSBkaXJlY3QgY2FsbCB0byBgc2F2ZV9hdXhfcHRyX3R5cGVgLCB1c2luZyB0aGUgZGVzdGluYXRpb24gcmVnaXN0ZXImIzM5O3MgdHlwZS4gVGhpcyBlbnN1cmVzIHRoYXQgdGhlIHBvaW50ZXIgdHlwZSBpcyBhbHdheXMgc2F2ZWQsIHJlZ2FyZGxlc3Mgb2YgdGhlIHBvaW50ZXIgdHlwZS4KClRoZSB0ZXN0IGNhc2UgcHJvdmlkZWQgY2xlYXJseSBkZW1vbnN0cmF0ZXMgdGhlIHZlcmlmaWVyIGJ5cGFzczogIGl0IHVzZXMgdGhlIGRlc3RpbmF0aW9uIHJlZ2lzdGVyIGFzIGVpdGhlciBhbiBhcmVuYSBvciBzdGFjayByZWdpc3Rlci4gIEJlY2F1c2UgdGhlIHZlcmlmaWVyIGFsbG93cyB0aGUgcHJvZ3JhbSB0byBtaXggcG9pbnRlciB0eXBlcyBpbiBkaWZmZXJlbnQgYnJhbmNoZXMsIGFuZCBiZWNhdXNlIGBzYXZlX2F1eF9wdHJfdHlwZWAgd2FzICpub3QqIGJlaW5nIGNhbGxlZCBpbiBhbGwgY2FzZXMgYmVmb3JlLCB0aGUgSklUIHdvdWxkIGZhaWwgdG8gY2F0Y2ggdGhlIHBvdGVudGlhbCBtaXNtYXRjaCBhbmQgd291bGQgYWxsb3cgYW4gYXRvbWljIFJNVyBvcGVyYXRpb24gb24gYW4gYXJlbmEgcG9pbnRlciwgcG90ZW50aWFsbHkgd2l0aCBzdGFjayBtZW1vcnkgYmVpbmcgdXNlZC4gIFRoaXMgYnlwYXNzIG1ha2VzIGl0IGEgdmVyaWZpZXIgYnVnIHRoYXQgd2lsbCBnZW5lcmF0ZSBhbiBPT0Igb3IgbWVtb3J5IGNvcnJ1cHRpb24uCgpUaGVyZWZvcmUsIHNpbmNlIHRoaXMgaXMgYSB2ZXJpZmllciBieXBhc3MgYW5kIGNhbiBsZWFkIHRvIHN0YW5kYXJkIG1lbW9yeSBlcnJvcnMgY2F1Z2h0IGJ5IEtBU0FOLCBJJiMzOTtsbCBzZXQgYE5lZWRzS01TQU5gIHRvIGZhbHNlLiBUaGUgaXNzdWUgZG9lc24mIzM5O3QgcmVxdWlyZSBLTVNBTiwgYW5kIEtBU0FOIHdpbGwgYmUgc3VmZmljaWVudCB0byBjYXRjaCB0aGUgcmVzdWx0aW5nIGVycm9ycy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMTE6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBCUEYgdmVyaWZpZXIgYnVnIHdoZXJlIGBzYXZlX2F1eF9wdHJfdHlwZSgpYCB3YXMgbm90IGNhbGxlZCBmb3IgYWxsIHBvaW50ZXIgdHlwZXMgZHVyaW5nIGF0b21pYyByZWFkLW1vZGlmeS13cml0ZSAoUk1XKSBpbnN0cnVjdGlvbiB2ZXJpZmljYXRpb24uIFRoaXMgb21pc3Npb24gYWxsb3dlZCBhIG1hbGljaW91cyBCUEYgcHJvZ3JhbSB0byB1c2UgdGhlIHNhbWUgYXRvbWljIGluc3RydWN0aW9uIHdpdGggZGlmZmVyZW50IHBvaW50ZXIgdHlwZXMgKGUuZy4sIG1peGluZyBgUFRSX1RPX0FSRU5BYCBhbmQgYFBUUl9UT19TVEFDS2AgaW4gZGlmZmVyZW50IGJyYW5jaGVzKS4gU3VjaCB2ZXJpZmllciBieXBhc3NlcyB0eXBpY2FsbHkgbGVhZCB0byBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbWVtb3J5IGNvcnJ1cHRpb24gZHVlIHRvIGluY29ycmVjdCBKSVQgY29tcGlsYXRpb24gb3IgbWlzc2luZyBydW50aW1lIGNoZWNrcy4gVGhlc2UgdHlwZXMgb2YgbWVtb3J5IHNhZmV0eSB2aW9sYXRpb25zIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIEJQRiB2ZXJpZmllciBidWcgd2hlcmUgYHNhdmVfYXV4X3B0cl90eXBlKClgIHdhcyBub3QgY2FsbGVkIGZvciBhbGwgcG9pbnRlciB0eXBlcyBkdXJpbmcgYXRvbWljIHJlYWQtbW9kaWZ5LXdyaXRlIChSTVcpIGluc3RydWN0aW9uIHZlcmlmaWNhdGlvbi4gVGhpcyBvbWlzc2lvbiBhbGxvd2VkIGEgbWFsaWNpb3VzIEJQRiBwcm9ncmFtIHRvIHVzZSB0aGUgc2FtZSBhdG9taWMgaW5zdHJ1Y3Rpb24gd2l0aCBkaWZmZXJlbnQgcG9pbnRlciB0eXBlcyAoZS5nLiwgbWl4aW5nIGBQVFJfVE9fQVJFTkFgIGFuZCBgUFRSX1RPX1NUQUNLYCBpbiBkaWZmZXJlbnQgYnJhbmNoZXMpLiBTdWNoIHZlcmlmaWVyIGJ5cGFzc2VzIHR5cGljYWxseSBsZWFkIHRvIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBvciBtZW1vcnkgY29ycnVwdGlvbiBkdWUgdG8gaW5jb3JyZWN0IEpJVCBjb21waWxhdGlvbiBvciBtaXNzaW5nIHJ1bnRpbWUgY2hlY2tzLiBUaGVzZSB0eXBlcyBvZiBtZW1vcnkgc2FmZXR5IHZpb2xhdGlvbnMgYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTZUMTE6MTg6MjMuMDY1ODgxOTc0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njc3MjIzODIxODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfY2hlY2tcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgQlBGIHZlcmlmaWVyIGJ1ZyB3aGVyZSBgc2F2ZV9hdXhfcHRyX3R5cGUoKWAgd2FzIG5vdCBjYWxsZWQgZm9yIGFsbCBwb2ludGVyIHR5cGVzIGR1cmluZyBhdG9taWMgcmVhZC1tb2RpZnktd3JpdGUgKFJNVykgaW5zdHJ1Y3Rpb24gdmVyaWZpY2F0aW9uLiBUaGlzIG9taXNzaW9uIGFsbG93ZWQgYSBtYWxpY2lvdXMgQlBGIHByb2dyYW0gdG8gdXNlIHRoZSBzYW1lIGF0b21pYyBpbnN0cnVjdGlvbiB3aXRoIGRpZmZlcmVudCBwb2ludGVyIHR5cGVzIChlLmcuLCBtaXhpbmcgYFBUUl9UT19BUkVOQWAgYW5kIGBQVFJfVE9fU1RBQ0tgIGluIGRpZmZlcmVudCBicmFuY2hlcykuIFN1Y2ggdmVyaWZpZXIgYnlwYXNzZXMgdHlwaWNhbGx5IGxlYWQgdG8gb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIG9yIG1lbW9yeSBjb3JydXB0aW9uIGR1ZSB0byBpbmNvcnJlY3QgSklUIGNvbXBpbGF0aW9uIG9yIG1pc3NpbmcgcnVudGltZSBjaGVja3MuIFRoZXNlIHR5cGVzIG9mIG1lbW9yeSBzYWZldHkgdmlvbGF0aW9ucyBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIncyBoYW5kbGluZyBvZiBhdG9taWMgcmVhZC1tb2RpZnktd3JpdGUgKFJNVykgaW5zdHJ1Y3Rpb25zIGJ5IHNhdmluZyB0aGUgYXV4aWxpYXJ5IHBvaW50ZXIgdHlwZSBmb3IgYWxsIGRlc3RpbmF0aW9uIHJlZ2lzdGVycywgbm90IGp1c3QgYXJlbmEgcmVnaXN0ZXJzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUga2VybmVsIEJQRiB2ZXJpZmllciBsb2dpYyB0aGF0IGFmZmVjdHMgaG93IGF0b21pYyBvcGVyYXRpb25zIGFyZSB2ZXJpZmllZCBhbmQgaGFuZGxlZCwgcGFydGljdWxhcmx5IHdoZW4gbWl4aW5nIGRpZmZlcmVudCBwb2ludGVyIHR5cGVzIChsaWtlIGFyZW5hIGFuZCBzdGFjayBwb2ludGVycykgaW4gdGhlIHNhbWUgaW5zdHJ1Y3Rpb24uIFRoaXMgaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgdGhlIGJwZigpIHN5c2NhbGwgYW5kIGlzIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDExOjE4OjIzLjA2NTg4ODQzNFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE3MDUxODUzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGMzNzAxYTgxYWE1NWU4Zjk4MjQ4MDgxMWY2OTU0ZGZiMjlhZjAxMDFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFN1biBBdWcgMTYgMTE6MTg6MjEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jXFxuaW5kZXggZDE3ZjE0YjM1Yjc5Zi4uOTM0NjNjYWY1YzlhZCAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcXG4rKysgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcXG5AQCAtNjczOSwxMSArNjczOSw5IEBAIHN0YXRpYyBpbnQgY2hlY2tfYXRvbWljX3JtdyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbiBcXHRpZiAoZXJyKVxcbiBcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXG4tXFx0aWYgKGlzX2FyZW5hX3JlZyhlbnYsIGluc24tXFx1MDAzZWRzdF9yZWcpKSB7XFxuLVxcdFxcdGVyciA9IHNhdmVfYXV4X3B0cl90eXBlKGVudiwgUFRSX1RPX0FSRU5BLCBmYWxzZSk7XFxuLVxcdFxcdGlmIChlcnIpXFxuLVxcdFxcdFxcdHJldHVybiBlcnI7XFxuLVxcdH1cXG4rXFx0ZXJyID0gc2F2ZV9hdXhfcHRyX3R5cGUoZW52LCBkc3RfcmVnLVxcdTAwM2V0eXBlLCBmYWxzZSk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdHJldHVybiBlcnI7XFxuIFxcdC8qIENoZWNrIHdoZXRoZXIgd2UgY2FuIHdyaXRlIGludG8gdGhlIHNhbWUgbWVtb3J5LiAqL1xcbiBcXHRlcnIgPSBjaGVja19tZW1fYWNjZXNzKGVudiwgZW52LVxcdTAwM2VpbnNuX2lkeCwgZHN0X3JlZywgYXJnbm9fZnJvbV9yZWcoaW5zbi1cXHUwMDNlZHN0X3JlZyksIGluc24tXFx1MDAzZW9mZixcXG4gXFx0XFx0XFx0ICAgICAgIEJQRl9TSVpFKGluc24tXFx1MDAzZWNvZGUpLCBCUEZfV1JJVEUsIC0xLCB0cnVlLCBmYWxzZSk7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmNcXG5pbmRleCBiMjQxYmJjZjU0YThhLi5iMjJiYWIzMzMwMWFiIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmNcXG5AQCAtNjM3LDYgKzYzNyw0NSBAQCBpbnQgbm9uX2FyZW5hX3B0cl9hZGRfdG9fYXJlbmFfcHRyKHZvaWQgKmN0eClcXG4gXFxuICNlbmRpZlxcbiBcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfaW5zbiBhZGRyX3NwYWNlX2Nhc3RfaW5zbiA9IHtcXG4rXFx0LmNvZGUgPSAweGJmLFxcbitcXHQuZHN0X3JlZyA9IEJQRl9SRUdfNyxcXG4rXFx0LnNyY19yZWcgPSBCUEZfUkVHXzcsXFxuK1xcdC5vZmYgPSAxLFxcbitcXHQuaW1tID0gMSxcXG4rfTtcXG4rXFxuK1NFQyhcXFwic29ja2V0XFxcIilcXG4rX19kZXNjcmlwdGlvbihcXFwiYXJlbmEgYW5kIHN0YWNrIGF0b21pYyBhdCB0aGUgc2FtZSBpbnN0cnVjdGlvblxcXCIpXFxuK19fZmFpbHVyZSBfX21zZyhcXFwic2FtZSBpbnNuIGNhbm5vdCBiZSB1c2VkIHdpdGggZGlmZmVyZW50IHBvaW50ZXJzXFxcIilcXG4rX19hcmNoX3g4Nl82NFxcbitfX2xvYWRfaWZfSklUZWQoKVxcbitfX25ha2VkIHZvaWQgbWl4ZWRfYXJlbmFfc3RhY2tfYXRvbWljKHZvaWQpXFxuK3tcXG4rXFx0YXNtIHZvbGF0aWxlIChcXFwiXFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRyMSA9ICVbYXJlbmFdIGxsO1xcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cjYgPSByMTA7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRyNiArPSAtODtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHI5ID0gMDtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdCoodTY0ICopKHI2ICsgMCkgPSByOTtcXHRcXHRcXHRcXFxcXFxuK1xcdHI3ID0gODE5MjtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdC44Ynl0ZSAlW2FkZHJfc3BhY2VfY2FzdF07XFx0XFx0XFx0XFxcXFxcbitcXHRjYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07XFx0XFx0XFx0XFxcXFxcbitcXHRpZiB3MCAhPSAwIGdvdG8gMWY7XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRyOCA9IHI2O1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0Z290byAyZjtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuKzE6XFx0cjggPSByNztcXHRcXHRcXHRcXHRcXHRcXFxcXFxuKzI6XFx0cjkgPSAxO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0bG9jayAqKHU2NCAqKShyOCArIDApICs9IHI5O1xcdFxcdFxcdFxcXFxcXG4rXFx0cjAgPSAwO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0ZXhpdDtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcXCJcXHQ6XFxuK1xcdDogX19pbW1fYWRkcihhcmVuYSksXFxuK1xcdCAgX19pbW1faW5zbihhZGRyX3NwYWNlX2Nhc3QsIGFkZHJfc3BhY2VfY2FzdF9pbnNuKSxcXG4rXFx0ICBfX2ltbShicGZfZ2V0X3ByYW5kb21fdTMyKVxcbitcXHQ6IF9fY2xvYmJlcl9hbGwpO1xcbit9XFxuK1xcbiBzdGF0aWMgX19ub2lubGluZVxcbiB1MzIgX19hcmVuYSAqY2hlY2tfYXJlbmFfYXJnX25vbmdsb2JhbCh1MzIgX19hcmVuYSAqYXJnKVxcbiB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDExOjE4OjI0LjIzNzA1NzM3M1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjQxOTgxMTcxMTAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2NoZWNrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllcidzIGhhbmRsaW5nIG9mIGF0b21pYyByZWFkLW1vZGlmeS13cml0ZSAoUk1XKSBpbnN0cnVjdGlvbnMgYnkgc2F2aW5nIHRoZSBhdXhpbGlhcnkgcG9pbnRlciB0eXBlIGZvciBhbGwgZGVzdGluYXRpb24gcmVnaXN0ZXJzLCBub3QganVzdCBhcmVuYSByZWdpc3RlcnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBrZXJuZWwgQlBGIHZlcmlmaWVyIGxvZ2ljIHRoYXQgYWZmZWN0cyBob3cgYXRvbWljIG9wZXJhdGlvbnMgYXJlIHZlcmlmaWVkIGFuZCBoYW5kbGVkLCBwYXJ0aWN1bGFybHkgd2hlbiBtaXhpbmcgZGlmZmVyZW50IHBvaW50ZXIgdHlwZXMgKGxpa2UgYXJlbmEgYW5kIHN0YWNrIHBvaW50ZXJzKSBpbiB0aGUgc2FtZSBpbnN0cnVjdGlvbi4gVGhpcyBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSB0aGUgYnBmKCkgc3lzY2FsbCBhbmQgaXMgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYzM3MDFhODFhYTU1ZThmOTgyNDgwODExZjY5NTRkZmIyOWFmMDEwMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gQXVnIDE2IDExOjE4OjIxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5pbmRleCBkMTdmMTRiMzViNzlmLi45MzQ2M2NhZjVjOWFkIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jXG4rKysgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbkBAIC02NzM5LDExICs2NzM5LDkgQEAgc3RhdGljIGludCBjaGVja19hdG9taWNfcm13KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuLVx0aWYgKGlzX2FyZW5hX3JlZyhlbnYsIGluc24tXHUwMDNlZHN0X3JlZykpIHtcbi1cdFx0ZXJyID0gc2F2ZV9hdXhfcHRyX3R5cGUoZW52LCBQVFJfVE9fQVJFTkEsIGZhbHNlKTtcbi1cdFx0aWYgKGVycilcbi1cdFx0XHRyZXR1cm4gZXJyO1xuLVx0fVxuK1x0ZXJyID0gc2F2ZV9hdXhfcHRyX3R5cGUoZW52LCBkc3RfcmVnLVx1MDAzZXR5cGUsIGZhbHNlKTtcbitcdGlmIChlcnIpXG4rXHRcdHJldHVybiBlcnI7XG4gXHQvKiBDaGVjayB3aGV0aGVyIHdlIGNhbiB3cml0ZSBpbnRvIHRoZSBzYW1lIG1lbW9yeS4gKi9cbiBcdGVyciA9IGNoZWNrX21lbV9hY2Nlc3MoZW52LCBlbnYtXHUwMDNlaW5zbl9pZHgsIGRzdF9yZWcsIGFyZ25vX2Zyb21fcmVnKGluc24tXHUwMDNlZHN0X3JlZyksIGluc24tXHUwMDNlb2ZmLFxuIFx0XHRcdCAgICAgICBCUEZfU0laRShpbnNuLVx1MDAzZWNvZGUpLCBCUEZfV1JJVEUsIC0xLCB0cnVlLCBmYWxzZSk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuY1xuaW5kZXggYjI0MWJiY2Y1NGE4YS4uYjIyYmFiMzMzMDFhYiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuY1xuQEAgLTYzNyw2ICs2MzcsNDUgQEAgaW50IG5vbl9hcmVuYV9wdHJfYWRkX3RvX2FyZW5hX3B0cih2b2lkICpjdHgpXG4gXG4gI2VuZGlmXG4gXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfaW5zbiBhZGRyX3NwYWNlX2Nhc3RfaW5zbiA9IHtcbitcdC5jb2RlID0gMHhiZixcbitcdC5kc3RfcmVnID0gQlBGX1JFR183LFxuK1x0LnNyY19yZWcgPSBCUEZfUkVHXzcsXG4rXHQub2ZmID0gMSxcbitcdC5pbW0gPSAxLFxuK307XG4rXG4rU0VDKFwic29ja2V0XCIpXG4rX19kZXNjcmlwdGlvbihcImFyZW5hIGFuZCBzdGFjayBhdG9taWMgYXQgdGhlIHNhbWUgaW5zdHJ1Y3Rpb25cIilcbitfX2ZhaWx1cmUgX19tc2coXCJzYW1lIGluc24gY2Fubm90IGJlIHVzZWQgd2l0aCBkaWZmZXJlbnQgcG9pbnRlcnNcIilcbitfX2FyY2hfeDg2XzY0XG4rX19sb2FkX2lmX0pJVGVkKClcbitfX25ha2VkIHZvaWQgbWl4ZWRfYXJlbmFfc3RhY2tfYXRvbWljKHZvaWQpXG4re1xuK1x0YXNtIHZvbGF0aWxlIChcIlx0XHRcdFx0XHRcXFxuK1x0cjEgPSAlW2FyZW5hXSBsbDtcdFx0XHRcdFxcXG4rXHRyNiA9IHIxMDtcdFx0XHRcdFx0XFxcbitcdHI2ICs9IC04O1x0XHRcdFx0XHRcXFxuK1x0cjkgPSAwO1x0XHRcdFx0XHRcXFxuK1x0Kih1NjQgKikocjYgKyAwKSA9IHI5O1x0XHRcdFxcXG4rXHRyNyA9IDgxOTI7XHRcdFx0XHRcdFxcXG4rXHQuOGJ5dGUgJVthZGRyX3NwYWNlX2Nhc3RdO1x0XHRcdFxcXG4rXHRjYWxsICVbYnBmX2dldF9wcmFuZG9tX3UzMl07XHRcdFx0XFxcbitcdGlmIHcwICE9IDAgZ290byAxZjtcdFx0XHRcdFxcXG4rXHRyOCA9IHI2O1x0XHRcdFx0XHRcXFxuK1x0Z290byAyZjtcdFx0XHRcdFx0XFxcbisxOlx0cjggPSByNztcdFx0XHRcdFx0XFxcbisyOlx0cjkgPSAxO1x0XHRcdFx0XHRcXFxuK1x0bG9jayAqKHU2NCAqKShyOCArIDApICs9IHI5O1x0XHRcdFxcXG4rXHRyMCA9IDA7XHRcdFx0XHRcdFxcXG4rXHRleGl0O1x0XHRcdFx0XHRcdFxcXG4rXCJcdDpcbitcdDogX19pbW1fYWRkcihhcmVuYSksXG4rXHQgIF9faW1tX2luc24oYWRkcl9zcGFjZV9jYXN0LCBhZGRyX3NwYWNlX2Nhc3RfaW5zbiksXG4rXHQgIF9faW1tKGJwZl9nZXRfcHJhbmRvbV91MzIpXG4rXHQ6IF9fY2xvYmJlcl9hbGwpO1xuK31cbitcbiBzdGF0aWMgX19ub2lubGluZVxuIHUzMiBfX2FyZW5hICpjaGVja19hcmVuYV9hcmdfbm9uZ2xvYmFsKHUzMiBfX2FyZW5hICphcmcpXG4ge1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMTE6MTg6MjQuMjM3MDU4ODg0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTc4MzI5MzA5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBCUEYgVmVyaWZpZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIHRoZSBCUEYgdmVyaWZpZXIsIHNwZWNpZmljYWxseSB3aXRoaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuIFRoZSBjaGFuZ2UgaXMgZm9jdXNlZCBvbiB0aGUgYGNoZWNrX2F0b21pY19ybXdgIGZ1bmN0aW9uLiBJbml0aWFsbHksIGl0IHdhcyBjb25kaXRpb25hbGx5IHNhdmluZyB0aGUgYXV4aWxpYXJ5IHBvaW50ZXIgdHlwZSwgb25seSBpZiB0aGUgZGVzdGluYXRpb24gcmVnaXN0ZXIgKGBpbnNuLVx1MDAzZWRzdF9yZWdgKSB3YXMgYW4gYXJlbmEgcmVnaXN0ZXIuIE5vdywgdGhlIHBhdGNoIHVuY29uZGl0aW9uYWxseSBzYXZlcyB0aGUgdHlwZSB1c2luZyBgZHN0X3JlZy1cdTAwM2V0eXBlYC4gVGhhdCdzIGEgZGVmaW5pdGUgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gaG93IHRoZSB2ZXJpZmllciBvcGVyYXRlcyBvbiBhdG9taWMgUk1XIGluc3RydWN0aW9ucy4gSSBuZWVkIHRvIGJlIHByZWNpc2UgYWJvdXQgdGhhdDogaXQgYWZmZWN0cyB0aGUgcG9pbnRlciAqdHlwZSogdXNlZCBpbiB0aGVzZSBhdG9taWMgb3BlcmF0aW9ucywgd2hpY2ggaXMgY29yZSBmdW5jdGlvbmFsaXR5IGluIHRoaXMgdmVyaWZpZXIuXG5cblRoZSB0ZXN0IGNhc2UgYWRkZWQsIGBtaXhlZF9hcmVuYV9zdGFja19hdG9taWNgLCBzZWVtcyBkZXNpZ25lZCB0byBoaWdobGlnaHQgdGhpcyBjaGFuZ2UuIEl0J3MgYXR0ZW1wdGluZyB0byB1c2UgdGhlIHNhbWUgaW5zdHJ1Y3Rpb24gd2l0aCBkaWZmZXJlbnQgcG9pbnRlciB0eXBlczogYXJlbmEgYW5kIHN0YWNrIHBvaW50ZXJzLiBBIGNsYXNzaWMgY292ZXJhZ2UgdGVzdC5cblxuR2l2ZW4gdGhhdCB0aGlzIHRvdWNoZXMgdGhlIGNvcmUgQlBGIHZlcmlmaWVyLCBhbmQgaW1wYWN0cyBob3cgYXRvbWljIGluc3RydWN0aW9ucyBhcmUgdmFsaWRhdGVkLCB0aGlzIGlzICphYnNvbHV0ZWx5KiBzb21ldGhpbmcgdGhhdCB3YXJyYW50cyBjYXJlZnVsIHNjcnV0aW55LiBXb3J0aHkgb2YgZnV6emluZywgbm8gZG91YnQuIFRoZSBrZXkgZnVuY3Rpb25zIHRvIGludmVzdGlnYXRlIGhlcmUgYXJlIGBzYXZlX2F1eF9wdHJfdHlwZWAgYW5kIGBjaGVja19hdG9taWNfcm13YCB3aXRoaW4gYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuIEkgc2hvdWxkIGFsc28gZG91YmxlIGNoZWNrIHRoYXQgYEJQRl9TWVNDQUxMYCBpcyBlbmFibGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzUxLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzA5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMTE6MTg6MzAuMDIwMzU2MjFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUxNjg0NDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY2hlY2tfYXRvbWljX3Jtd1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jPTY2MzA9c3RhdGljIGludCBjaGVja19zdG9yZV9yZWcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY2NjctXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjY2Njg6c3RhdGljIGludCBjaGVja19hdG9taWNfcm13KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY2NjktXFx0XFx0XFx0ICAgIHN0cnVjdCBicGZfaW5zbiAqaW5zbilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz02NzkxPXN0YXRpYyBpbnQgY2hlY2tfYXRvbWljKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02ODAzLVxcdGNhc2UgQlBGX0NNUFhDSEc6XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjY4MDQ6XFx0XFx0cmV0dXJuIGNoZWNrX2F0b21pY19ybXcoZW52LCBpbnNuKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjgwNS1cXHRjYXNlIEJQRl9MT0FEX0FDUTpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMTE6MTg6MzAuMDY1NTI4NTk3WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjkwNjgzNjgxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgdGhlIEF0b21pYyBSTVcgQ2hlY2sqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCBgY2hlY2tfYXRvbWljX3Jtd2AsIGFuZCBpdCdzIGRlZmluZWQgYXMgYSBzdGF0aWMgZnVuY3Rpb24sIHdoaWNoIGlzIGludGVyZXN0aW5nLiBJIGltbWVkaWF0ZWx5IGtub3cgdGhhdCBtZWFucyBpdCBoYXMgaW50ZXJuYWwgbGlua2FnZSB3aXRoaW4gdGhlIGN1cnJlbnQgdHJhbnNsYXRpb24gdW5pdC4gSXQncyBub3QgdmlzaWJsZSBvdXRzaWRlIG9mIHRoZSBmaWxlIGl0J3MgZGVjbGFyZWQgaW4sIHdoaWNoIHN1Z2dlc3RzIGl0J3MgYSBoZWxwZXIgZnVuY3Rpb24gc3BlY2lmaWNhbGx5IGZvciB0aGlzIG1vZHVsZS4gTm93LCBJIHNlZSBpdCdzIGNhbGxlZCBmcm9tIGBjaGVja19hdG9taWNgLiBUaGF0IGdpdmVzIG1lIHRoZSBpbW1lZGlhdGUgY29udGV4dC4gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgYGNoZWNrX2F0b21pY2AgdG8gZnVsbHkgZ3Jhc3Agd2hhdCBgY2hlY2tfYXRvbWljX3Jtd2AgaXMgZG9pbmcgYW5kIGl0cyBwdXJwb3NlIHdpdGhpbiB0aGUgbGFyZ2VyIHNjaGVtZS4gTGV0J3MgZGVsdmUgaW50byB0aGUgbG9naWMgb2YgYGNoZWNrX2F0b21pY2AgYW5kIHNlZSB3aGF0J3MgZ29pbmcgb24uIEknbSBndWVzc2luZyBgY2hlY2tfYXRvbWljX3Jtd2AgaGFuZGxlcyBhIHNwZWNpZmljIHR5cGUgb2YgYXRvbWljIG9wZXJhdGlvbiB3aXRoaW4gdGhhdCBicm9hZGVyIGBjaGVja19hdG9taWNgIGZ1bmN0aW9uLiBJJ2xsIGZvY3VzIG9uIGhvdyB0aGV5IGludGVyYWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjQxLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMTE6MTg6MzIuOTcyMzY3ODc3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NjIzNTc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNoZWNrX2F0b21pY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jPTY2MzA9c3RhdGljIGludCBjaGVja19zdG9yZV9yZWcoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY2NjctXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjY2Njg6c3RhdGljIGludCBjaGVja19hdG9taWNfcm13KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY2NjktXFx0XFx0XFx0ICAgIHN0cnVjdCBicGZfaW5zbiAqaW5zbilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NzUyLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2NzUzOnN0YXRpYyBpbnQgY2hlY2tfYXRvbWljX2xvYWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjc1NC1cXHRcXHRcXHQgICAgIHN0cnVjdCBicGZfaW5zbiAqaW5zbilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NzcxLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2NzcyOnN0YXRpYyBpbnQgY2hlY2tfYXRvbWljX3N0b3JlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY3NzMtXFx0XFx0XFx0ICAgICAgc3RydWN0IGJwZl9pbnNuICppbnNuKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY3OTAtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjY3OTE6c3RhdGljIGludCBjaGVja19hdG9taWMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NzkyLXtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02ODAzLVxcdGNhc2UgQlBGX0NNUFhDSEc6XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjY4MDQ6XFx0XFx0cmV0dXJuIGNoZWNrX2F0b21pY19ybXcoZW52LCBpbnNuKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjgwNS1cXHRjYXNlIEJQRl9MT0FEX0FDUTpcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02ODEwLVxcdFxcdH1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjgxMTpcXHRcXHRyZXR1cm4gY2hlY2tfYXRvbWljX2xvYWQoZW52LCBpbnNuKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjgxMi1cXHRjYXNlIEJQRl9TVE9SRV9SRUw6XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjgxNy1cXHRcXHR9XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjY4MTg6XFx0XFx0cmV0dXJuIGNoZWNrX2F0b21pY19zdG9yZShlbnYsIGluc24pO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02ODE5LVxcdGRlZmF1bHQ6XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTgwNzA9c3RhdGljIGludCBkb19jaGVja19pbnNuKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGJvb2wgKmRvX3ByaW50X3N0YXRlKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4MDg3LVxcdFxcdGlmIChCUEZfTU9ERShpbnNuLVxcdTAwM2Vjb2RlKSA9PSBCUEZfQVRPTUlDKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxODA4ODpcXHRcXHRcXHRyZXR1cm4gY2hlY2tfYXRvbWljKGVudiwgaW5zbik7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4MDg5LVxcdFxcdHJldHVybiBjaGVja19zdG9yZV9yZWcoZW52LCBpbnNuLCBmYWxzZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDExOjE4OjMzLjAxNzk5NTUwNFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NzM4Mjc3NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhpcyBjb2RlOlxuXG4qKkZpbmRpbmcgdGhlIFZlcmlmaWVyJ3MgRW50cnkgUG9pbnQqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGUgdmVyaWZpY2F0aW9uIHByb2Nlc3MgKmFjdHVhbGx5KiBiZWdpbnMuIEkgc2VlIGEgZmV3IHN0YXRpYyBmdW5jdGlvbnMgaGVyZSB0aGF0IGxvb2sgcG90ZW50aWFsbHkgaW1wb3J0YW50OiBgY2hlY2tfYXRvbWljYCwgYGRvX2NoZWNrX2luc25gLCBhbmQgdGhlbiBgZG9fY2hlY2tfbWFpbmAgb3IganVzdCBgZG9fY2hlY2tgLiBUaGUgZmFjdCB0aGF0IGBjaGVja19hdG9taWNgIGFuZCBgZG9fY2hlY2tfaW5zbmAgYXJlIHN0YXRpYyBzdWdnZXN0cyB0aGV5IGFyZSBpbnRlcm5hbCBoZWxwZXJzLCBsaWtlbHkgcGFydCBvZiBhIGxhcmdlciBmdW5jdGlvbi4gTXkgZ3V0IHNheXMgdGhhdCBgZG9fY2hlY2tfbWFpbmAgb3IgYGRvX2NoZWNrYCBpcyAqcHJvYmFibHkqIHRoZSB0b3AtbGV2ZWwgZW50cnkgcG9pbnQsIHRoZSBmdW5jdGlvbiB0aGF0IGtpY2tzIG9mZiB0aGUgd2hvbGUgdmVyaWZpY2F0aW9uIHByb2Nlc3MuIFRpbWUgdG8gZGlnIGluIGFuZCBjb25maXJtIHRoYXQgYXNzdW1wdGlvbi4gTGV0J3Mgc2VlIGlmIEkgY2FuIHBpbnBvaW50IHRoYXQgbWFpbiBlbnRyeSBwb2ludC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDYzNywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDExOjE4OjM2LjY5MTg0NDMxNVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTkzOTkyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkb19jaGVja19pbnNuXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTgwMTI9c3RhdGljIGludCBjaGVja19pbmRpcmVjdF9qdW1wKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODA2OS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTgwNzA6c3RhdGljIGludCBkb19jaGVja19pbnNuKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGJvb2wgKmRvX3ByaW50X3N0YXRlKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODA3MS17XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTgxODA9c3RhdGljIGludCBkb19jaGVjayhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4MzI5LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxODMzMDpcXHRcXHRlcnIgPSBkb19jaGVja19pbnNuKGVudiwgXFx1MDAyNmRvX3ByaW50X3N0YXRlKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTgzMzEtXFx0XFx0aWYgKGVycm9yX3JlY292ZXJhYmxlX3dpdGhfbm9zcGVjKGVycikgXFx1MDAyNlxcdTAwMjYgc3RhdGUtXFx1MDAzZXNwZWN1bGF0aXZlKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDExOjE4OjM2LjczNzc4ODg5MloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4NTYyMjE5MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIGNvZGU6XG5cbioqU3RhdGljIEZ1bmN0aW9uIEFuYWx5c2lzKipcblxuT2theSwgc28gYGRvX2NoZWNrYCBpcyBhbm90aGVyIG9uZSBvZiB0aGVzZSBzdGF0aWMgZnVuY3Rpb25zLiBUaGF0J3MgYSBrZXkgZGV0YWlsIHRvIG5vdGUsIGJlY2F1c2UgaXQgbWVhbnMgaXRzIHNjb3BlIGlzIGxpbWl0ZWQgdG8gdGhpcyBjb21waWxhdGlvbiB1bml0LiBUaGlzIGNvbnRleHQgaXMgaW1wb3J0YW50IGJlY2F1c2UgaXQgbmFycm93cyBkb3duIHRoZSBwbGFjZXMgd2hlcmUgSSBuZWVkIHRvIGxvb2sgZm9yIGNhbGxzIG9yIHBvdGVudGlhbCBpbnRlcmFjdGlvbnMuIE5vdywgdGhlIG5leHQgc3RlcCBpbiBteSBtZW50YWwgcHJvY2VzcyBpcyB0byBmaWd1cmUgb3V0IGhvdyB0aGlzIGZ1bmN0aW9uIGZpdHMgaW50byB0aGUgb3ZlcmFsbCBzY2hlbWUuIExldCdzIHNlZS4uLiB3aGF0J3MgaXQgY29ubmVjdGVkIHRvPyBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgYGJwZl9jaGVja2AgZnVuY3Rpb24uIFRoYXQgc2VlbXMgbGlrZSB0aGUgbG9naWNhbCBuZXh0IHN0ZXAgdG8gdW5kZXJzdGFuZCB0aGUgYnJvYWRlciBpbXBsaWNhdGlvbnMgb2YgYGRvX2NoZWNrYC4gSSdsbCBzdGFydCB3aXRoIGEgc2VhcmNoIG9yIGNyb3NzLXJlZmVyZW5jZSBmb3IgYGJwZl9jaGVja2AgYW5kIGFuYWx5emUgaXRzIHJlbGF0aW9uc2hpcCB0byBgZG9fY2hlY2tgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MTcwLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMTE6MTg6MzkuNTk0MDEzOTQ2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTA2NTcwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfY2hlY2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuYz01OD1zdGF0aWMgYm9vbCBicGZfZ2xvYmFsX3BlcmNwdV9tYV9zZXQ7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTU5LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2MDovKiBicGZfY2hlY2soKSBpcyBhIHN0YXRpYyBjb2RlIGFuYWx5emVyIHRoYXQgd2Fsa3MgZUJQRiBwcm9ncmFtXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTYxLSAqIGluc3RydWN0aW9uIGJ5IGluc3RydWN0aW9uIGFuZCB1cGRhdGVzIHJlZ2lzdGVyL3N0YWNrIHN0YXRlLlxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTEyNTMzPXN0YXRpYyBpbnQgcHJvY2Vzc19rZl9hcmdfcHRyX3RvX3JidHJlZV9ub2RlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTI1NDQtICogTFNNIGhvb2tzIGFuZCBpdGVycyAoYm90aCBzbGVlcGFibGUgYW5kIG5vbi1zbGVlcGFibGUpIGFyZSBzYWZlLlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMjU0NTogKiBBbnkgc2xlZXBhYmxlIHByb2dzIGFyZSBhbHNvIHNhZmUgc2luY2UgYnBmX2NoZWNrX2F0dGFjaF90YXJnZXQoKSBlbmZvcmNlXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyNTQ2LSAqIHRoZW0gY2FuIG9ubHkgYmUgYXR0YWNoZWQgdG8gc29tZSBzcGVjaWZpYyBob29rIHBvaW50cy5cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xOTg2Nj1zdGF0aWMgYm9vbCBhdHRhY2hfdXNlc190cmFtcG9saW5lX3JldHZhbChlbnVtIGJwZl9hdHRhY2hfdHlwZSB0eXBlKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5ODc5LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTg4MDppbnQgYnBmX2NoZWNrX2F0dGFjaF90YXJnZXQoc3RydWN0IGJwZl92ZXJpZmllcl9sb2cgKmxvZyxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk4ODEtXFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0yMDMwMz1zdGF0aWMgaW50IGNoZWNrX2F0dGFjaF9idGZfaWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDMzMy1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjAzMzQ6XFx0cmV0ID0gYnBmX2NoZWNrX2F0dGFjaF90YXJnZXQoXFx1MDAyNmVudi1cXHUwMDNlbG9nLCBwcm9nLCB0Z3RfcHJvZywgYnRmX2lkLCBcXHUwMDI2dGd0X2luZm8pO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDMzNS1cXHRpZiAocmV0KVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwNDAyLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMDQwMzppbnQgYnBmX2NoZWNrX2F0dGFjaF9idGZfaWRfbXVsdGkoc3RydWN0IGJ0ZiAqYnRmLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBidGZfaWQsXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwNDA0LVxcdFxcdFxcdFxcdCAgc3RydWN0IGJwZl9hdHRhY2hfdGFyZ2V0X2luZm8gKnRndF9pbmZvKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTIwODM2PXN0YXRpYyBlbnVtIGJwZl9zaWdfa2V5cmluZyBicGZfY2xhc3NpZnlfa2V5cmluZyhzMzIga2V5cmluZ19pZClcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDg1MC0vKlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMDg1MTogKiBWZXJpZnkgdGhlIFBLQ1MjNyBzaWduYXR1cmUgb2YgYSBsb2FkZWQgcHJvZ3JhbS4gQ2FsbGVkIGZyb20gYnBmX2NoZWNrKClcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjA4NTItICogb25jZSB0aGUgcHJvZ3JhbSdzIG1ldGFkYXRhIG1hcHMgaGF2ZSBiZWVuIHJlc29sdmVkIGludG8gdXNlZF9tYXBzLCBzb1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTIwODU5PXN0YXRpYyBpbnQgYnBmX3Byb2dfdmVyaWZ5X3NpZ25hdHVyZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwOTc1LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMDk3NjppbnQgYnBmX2NoZWNrKHN0cnVjdCBicGZfcHJvZyAqKnByb2csIHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cixcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjA5NzctXFx0ICAgICAgc3RydWN0IGJwZl9sb2dfYXR0ciAqYXR0cl9sb2cpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjA5OTAtXFx0LyogJ3N0cnVjdCBicGZfdmVyaWZpZXJfZW52JyBjYW4gYmUgZ2xvYmFsLCBidXQgc2luY2UgaXQncyBub3Qgc21hbGwsXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjIwOTkxOlxcdCAqIGFsbG9jYXRlL2ZyZWUgaXQgZXZlcnkgdGltZSBicGZfY2hlY2soKSBpcyBjYWxsZWRcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjA5OTItXFx0ICovXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjExMDEtXFx0LyogVmFsaWRhdGUgQlRGIGFnYWluc3QgdGhlIGNvbXBsZXRlIHN1YnByb2dyYW0gbGF5b3V0IGFuZCBhcHBseSBDTy1SRS4gKi9cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjExMDI6XFx0cmV0ID0gYnBmX2NoZWNrX2J0Zl9pbmZvKGVudiwgYXR0ciwgdWF0dHIpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMTEwMy1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMTEyMS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjExMjI6XFx0cmV0ID0gYnBmX2NoZWNrX2NmZyhlbnYpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMTEyMy1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMTE6MTg6MzkuNjM5MDg1ODQyWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI1ODQ2Mzc2MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBDb3JlIExvZ2ljOiBUaGUgYGJwZl9jaGVja2AgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBjb2RlLCBhbmQgdGhlIGNlbnRyYWwgZm9jdXMgaGVyZSBzZWVtcyB0byBiZSBgYnBmX2NoZWNrYC4gSXQgbWFrZXMgc2Vuc2U7IGFzIHRoZSBuYW1lIGltcGxpZXMsIGl0J3MgbGlrZWx5IHRoZSBwcmltYXJ5IGdhdGVrZWVwZXIgZm9yIHZlcmlmeWluZyBCUEYgcHJvZ3JhbXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBnbyBkaXJlY3RseSB0byB0aGlzIGZ1bmN0aW9uLiBJdCdzIHRoZSBtb3N0IGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGNvcmUgdmFsaWRhdGlvbiBwcm9jZXNzLiBUaGUgZW50aXJlIGludGVncml0eSBvZiB0aGUgc3lzdGVtIGhpbmdlcyBvbiB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTE3LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMTE6MTg6NDIuMjIzNzI2Njg2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjI3MzQ3NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnQgYnBmX2NoZWNrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTk4NjY9c3RhdGljIGJvb2wgYXR0YWNoX3VzZXNfdHJhbXBvbGluZV9yZXR2YWwoZW51bSBicGZfYXR0YWNoX3R5cGUgdHlwZSlcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTg3OS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk4ODA6aW50IGJwZl9jaGVja19hdHRhY2hfdGFyZ2V0KHN0cnVjdCBicGZfdmVyaWZpZXJfbG9nICpsb2csXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5ODgxLVxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MjAzMDM9c3RhdGljIGludCBjaGVja19hdHRhY2hfYnRmX2lkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjA0MDItXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjIwNDAzOmludCBicGZfY2hlY2tfYXR0YWNoX2J0Zl9pZF9tdWx0aShzdHJ1Y3QgYnRmICpidGYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyIGJ0Zl9pZCxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjA0MDQtXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgYnBmX2F0dGFjaF90YXJnZXRfaW5mbyAqdGd0X2luZm8pXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MjA4NTk9c3RhdGljIGludCBicGZfcHJvZ192ZXJpZnlfc2lnbmF0dXJlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjA5NzUtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjIwOTc2OmludCBicGZfY2hlY2soc3RydWN0IGJwZl9wcm9nICoqcHJvZywgdW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDk3Ny1cXHQgICAgICBzdHJ1Y3QgYnBmX2xvZ19hdHRyICphdHRyX2xvZylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMTE6MTg6NDIuMjcwMDA1MjIzWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyNjgyNzU3ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgRnV6emluZyBTdHJhdGVneTogSW5pdGlhbCBUaG91Z2h0cyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyB0byBhcHByb2FjaCBmdXp6aW5nIHRoaXMgQlBGIGNvZGUuIFRoZSB0YXNrIGZvY3VzZXMgbWUgb24gYGJwZl9jaGVja2AgLSB0aGF0J3MgdGhlIHByaW1hcnkgZnVuY3Rpb24gaW4gdGhlIHNwb3RsaWdodC4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBjYXN0IGEgd2lkZXIgbmV0LiBBcmUgdGhlcmUgb3RoZXIgZnVuY3Rpb25zIGluIHRoZSB2aWNpbml0eSB0aGF0IG1pZ2h0IGFsc28gYmVuZWZpdCBmcm9tIGZ1enppbmc/IGBicGZfY2hlY2tgIGZlZWxzIHByZXR0eSBnZW5lcmljLCB3aGljaCBjb3VsZCBtYWtlIGl0IGEgbGVzcy10aGFuLWlkZWFsIHRhcmdldCBmb3Igc2tld2luZyB0aGUgdGVzdCBkaXN0cmlidXRpb24uIFRoZSBjb2RlIGNoYW5nZSBJJ20gaW52ZXN0aWdhdGluZyBpcyBzcGVjaWZpY2FsbHkgYXJvdW5kIGBjaGVja19hdG9taWNfcm13YCwgc28gaXMgdGhlcmUgYW5vdGhlciBmdW5jdGlvbiB0aGF0IGludGVyYWN0cyB3aXRoIGl0IGRpcmVjdGx5P1xuXG5QZXJoYXBzIGBicGZfY2hlY2tgIGlzIHRoZSBiZXN0IGNob2ljZSBhZnRlciBhbGwuIFdhaXQsIHRoZSBpbnN0cnVjdGlvbnMuLi4gYWgsIGhlcmUgd2UgZ28uIFRoZSBndWlkYW5jZSBleHBsaWNpdGx5IHRlbGxzIG1lIHRvIGF2b2lkIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zLCBmYXZvcmluZyBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucy4gVGhpcyBtYWtlcyBzZW5zZSBmcm9tIGEgdGVzdGluZyBwZXJzcGVjdGl2ZS5cblxuQWxyaWdodCwgYGJwZl9jaGVja2AgKmlzKiBhbiBBUEkgZW50cnlwb2ludCBmdW5jdGlvbi4gQnV0IGp1c3QgdG8gYmUgdGhvcm91Z2gsIEkgc2hvdWxkIGxvb2sgaW50byB0aGUgc291cmNlIGZpbGUgdG8gc2VlIGlmIHRoZXJlIGlzIGFub3RoZXIgZXhwb3NlZCBmdW5jdGlvbiB0aGF0IG1heSBhbHNvIGJlIGEgZ29vZCB0YXJnZXQuIEknbGwgbmVlZCB0byBjaGVjayBga2VybmVsL2JwZi92ZXJpZmllci5jYCBmb3IgZXhwb3J0ZWQgZnVuY3Rpb25zLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGF2YWlsYWJsZSBvcHRpb25zIGFuZCBlbnN1cmUgSSdtIG1ha2luZyB0aGUgbW9zdCBpbmZvcm1lZCBkZWNpc2lvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NzA5NywiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQxMToxODo0Ni41MzgyODM0M1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA0OTg3MjY1LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMTE6MTg6NDYuNjQzMjc4NTc1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI1ODcwMDE3ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBCUEYgRnVuY3Rpb25hbGl0eSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBkaWcgaW50byBob3cgYGJwZl9jaGVja2AgaXMgYmVpbmcgdXNlZCB3aXRoaW4gdGhlIGtlcm5lbCdzIEJQRiBpbmZyYXN0cnVjdHVyZS4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBnbyBzdHJhaWdodCB0byB0aGUgc291cmNlLiBTcGVjaWZpY2FsbHksIEkgc2hvdWxkIGxvb2sgd2l0aGluIHRoZSBga2VybmVsL2JwZi9gIGRpcmVjdG9yeS4gVGhhdCdzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGh1bnRpbmcgZm9yIHRoZSBkZWZpbml0aW9uIGFuZCBhbnkgc2lnbmlmaWNhbnQgdXNlcyBvZiB0aGF0IGZ1bmN0aW9uLiBJJ20gZXhwZWN0aW5nIHRoaXMgd2lsbCBsaWtlbHkgcmV2ZWFsIGNyaXRpY2FsIHBhcnRzIG9mIHRoZSB2ZXJpZmllciBvciBwZXJoYXBzIHNlY3VyaXR5IGNoZWNrcy4gSSdtIHJlYWxseSBsb29raW5nIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bmN0aW9uJ3MgcHVycG9zZSwgaG93IGl0J3MgY2FsbGVkLCBhbmQgd2hhdCBpdHMgcmV0dXJuIHZhbHVlcyBzaWduaWZ5IGluIHRoZSBjb250ZXh0IG9mIEJQRiBwcm9ncmFtIGV4ZWN1dGlvbiBhbmQgdmFsaWRhdGlvbi4gSG9wZWZ1bGx5LCB0aGUgc2VhcmNoIHJlc3VsdHMgd2lsbCBwb2ludCBtZSB0b3dhcmQga2V5IGFyZWFzIGZvciBkZWVwZXIgaW52ZXN0aWdhdGlvbiwgbGlrZSByZWxhdGVkIGVycm9yIGhhbmRsaW5nIG9yIHNwZWNpZmljIHNlY3VyaXR5IGNvbnN0cmFpbnRzIGl0IGVuZm9yY2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NTk4LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMTE6MTg6NDkuMjMwMjgyNFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAxOTc1NzI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9jaGVja1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2JwZl9pdGVyLmM9NTA0PWludCBicGZfaXRlcl9saW5rX2F0dGFjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIsXFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9pdGVyLmMtNTI1LVxcdGlmICghYnBmcHRyX2lzX251bGwodWxpbmZvKSkge1xcbmtlcm5lbC9icGYvYnBmX2l0ZXIuYzo1MjY6XFx0XFx0ZXJyID0gYnBmX2NoZWNrX3VhcmdfdGFpbF96ZXJvKHVsaW5mbywgc2l6ZW9mKGxpbmZvKSxcXG5rZXJuZWwvYnBmL2JwZl9pdGVyLmMtNTI3LVxcdFxcdFxcdFxcdFxcdCAgICAgICBsaW5mb19sZW4pO1xcbi0tXFxua2VybmVsL2JwZi9idGYuYz02ODQ5PWJvb2wgYnRmX2N0eF9hY2Nlc3MoaW50IG9mZiwgaW50IHNpemUsIGVudW0gYnBmX2FjY2Vzc190eXBlIHR5cGUsXFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jLTcwMzAtXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbmtlcm5lbC9icGYvYnRmLmM6NzAzMTpcXHRcXHQvKiBDaGVja2VkIGJ5IGJwZl9jaGVja19hdHRhY2hfdGFyZ2V0ICovXFxua2VybmVsL2JwZi9idGYuYy03MDMyLVxcdFxcdHRuYW1lICs9IHNpemVvZihcXFwiYnRmX3RyYWNlX1xcXCIpIC0gMTtcXG4tLVxcbmtlcm5lbC9icGYvY2ZnLmM9NDUxPXN0YXRpYyBpbnQgdmlzaXRfaW5zbihpbnQgdCwgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcXG4tLVxcbmtlcm5lbC9icGYvY2ZnLmMtNTg2LSAqL1xcbmtlcm5lbC9icGYvY2ZnLmM6NTg3OmludCBicGZfY2hlY2tfY2ZnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxua2VybmVsL2JwZi9jZmcuYy01ODgte1xcbi0tXFxua2VybmVsL2JwZi9jZ3JvdXAuYz0xNzkzPUVYUE9SVF9TWU1CT0woX19jZ3JvdXBfYnBmX3J1bl9maWx0ZXJfc29ja19vcHMpO1xcbmtlcm5lbC9icGYvY2dyb3VwLmMtMTc5NC1cXG5rZXJuZWwvYnBmL2Nncm91cC5jOjE3OTU6aW50IF9fY2dyb3VwX2JwZl9jaGVja19kZXZfcGVybWlzc2lvbihzaG9ydCBkZXZfdHlwZSwgdTMyIG1ham9yLCB1MzIgbWlub3IsXFxua2VybmVsL2JwZi9jZ3JvdXAuYy0xNzk2LVxcdFxcdFxcdFxcdCAgICAgIHNob3J0IGFjY2VzcywgZW51bSBjZ3JvdXBfYnBmX2F0dGFjaF90eXBlIGF0eXBlKVxcbi0tXFxua2VybmVsL2JwZi9jaGVja19idGYuYz0zMT1zdGF0aWMgaW50IHByZXBhcmVfYnRmX2Z1bmMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvY2hlY2tfYnRmLmMtNzAtXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5mdW5jczsgaSsrKSB7XFxua2VybmVsL2JwZi9jaGVja19idGYuYzo3MTpcXHRcXHRyZXQgPSBicGZfY2hlY2tfdWFyZ190YWlsX3plcm8odXJlY29yZCwga3JlY19zaXplLCB1cmVjX3NpemUpO1xcbmtlcm5lbC9icGYvY2hlY2tfYnRmLmMtNzItXFx0XFx0aWYgKHJldCkge1xcbi0tXFxua2VybmVsL2JwZi9jaGVja19idGYuYz0yMTM9c3RhdGljIGludCBjaGVja19idGZfbGluZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi9jaGVja19idGYuYy0yNTMtXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5yX2xpbmZvOyBpKyspIHtcXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jOjI1NDpcXHRcXHRlcnIgPSBicGZfY2hlY2tfdWFyZ190YWlsX3plcm8odWxpbmZvLCBleHBlY3RlZF9zaXplLCByZWNfc2l6ZSk7XFxua2VybmVsL2JwZi9jaGVja19idGYuYy0yNTUtXFx0XFx0aWYgKGVycikge1xcbi0tXFxua2VybmVsL2JwZi9jaGVja19idGYuYz0zNDE9c3RhdGljIGludCBjaGVja19jb3JlX3JlbG8oc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvY2hlY2tfYnRmLmMtMzc2LVxcdFxcdC8qIGZ1dHVyZSBwcm9vZmluZyB3aGVuIHNpemVvZihicGZfY29yZV9yZWxvKSBjaGFuZ2VzICovXFxua2VybmVsL2JwZi9jaGVja19idGYuYzozNzc6XFx0XFx0ZXJyID0gYnBmX2NoZWNrX3VhcmdfdGFpbF96ZXJvKHVfY29yZV9yZWxvLCBleHBlY3RlZF9zaXplLCByZWNfc2l6ZSk7XFxua2VybmVsL2JwZi9jaGVja19idGYuYy0zNzgtXFx0XFx0aWYgKGVycikge1xcbi0tXFxua2VybmVsL2JwZi9jaGVja19idGYuYz00MTA9aW50IGJwZl9wcmVwYXJlX2J0Zl9pbmZvKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jLTQzNy1cXG5rZXJuZWwvYnBmL2NoZWNrX2J0Zi5jOjQzODppbnQgYnBmX2NoZWNrX2J0Zl9pbmZvKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxua2VybmVsL2JwZi9jaGVja19idGYuYy00MzktXFx0XFx0ICAgICAgIGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLFxcbi0tXFxua2VybmVsL2JwZi9jb3JlLmMtMTYtICogQW5kaSBLbGVlbiAtIEZpeCBhIGZldyBiYWQgYnVncyBhbmQgcmFjZXMuXFxua2VybmVsL2JwZi9jb3JlLmM6MTc6ICogS3JpcyBLYXR0ZXJqb2huIC0gQWRkZWQgbWFueSBhZGRpdGlvbmFsIGNoZWNrcyBpbiBicGZfY2hlY2tfY2xhc3NpYygpXFxua2VybmVsL2JwZi9jb3JlLmMtMTgtICovXFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYz0yNTc0PWJvb2wgYnBmX3Byb2dfbWFwX2NvbXBhdGlibGUoc3RydWN0IGJwZl9tYXAgKm1hcCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpmcClcXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jLTI1ODYtXFxua2VybmVsL2JwZi9jb3JlLmM6MjU4NzpzdGF0aWMgaW50IGJwZl9jaGVja190YWlsX2NhbGwoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpmcClcXG5rZXJuZWwvYnBmL2NvcmUuYy0yNTg4LXtcXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jPTI2NjQ9c3RydWN0IGJwZl9wcm9nICpfX2JwZl9wcm9nX3NlbGVjdF9ydW50aW1lKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqZnAsXFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYy0yNzEwLVxcdCAqL1xcbmtlcm5lbC9icGYvY29yZS5jOjI3MTE6XFx0KmVyciA9IGJwZl9jaGVja190YWlsX2NhbGwoZnApO1xcbmtlcm5lbC9icGYvY29yZS5jLTI3MTItXFxuLS1cXG5rZXJuZWwvYnBmL2NvcmUuYz0zMzg5PXN0YXRpYyBub2lubGluZSB2b2lkIGJwZl9wcm9nX3JlcG9ydF9tYXlfZ290b192aW9sYXRpb24odm9pZClcXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jLTM0MDQtXFxua2VybmVsL2JwZi9jb3JlLmM6MzQwNTp1NjQgYnBmX2NoZWNrX3RpbWVkX21heV9nb3RvKHN0cnVjdCBicGZfdGltZWRfbWF5X2dvdG8gKnApXFxua2VybmVsL2JwZi9jb3JlLmMtMzQwNi17XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz03MT1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzICogY29uc3QgYnBmX21hcF90eXBlc1tdID0ge1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtOTAtICovXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6OTE6aW50IGJwZl9jaGVja191YXJnX3RhaWxfemVybyhicGZwdHJfdCB1YWRkcixcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy05Mi1cXHRcXHRcXHQgICAgIHNpemVfdCBleHBlY3RlZF9zaXplLFxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9MjkxNz1zdGF0aWMgaW50IGJwZl9wcm9nX2xvYWQodW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyLCBzdHJ1Y3QgYnBmX2xvZ19hdHRyICphdHRyX2xvZylcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTMxMzItXFx0LyogcnVuIGVCUEYgdmVyaWZpZXIgKi9cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzozMTMzOlxcdGVyciA9IGJwZl9jaGVjayhcXHUwMDI2cHJvZywgYXR0ciwgdWF0dHIsIGF0dHJfbG9nKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0zMTM0LVxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9MzYzND1zdGF0aWMgaW50IGJwZl90cmFjaW5nX3Byb2dfYXR0YWNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZyxcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTM3NjYtXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6Mzc2NzpcXHRcXHRlcnIgPSBicGZfY2hlY2tfYXR0YWNoX3RhcmdldChOVUxMLCBwcm9nLCB0Z3RfcHJvZywgYnRmX2lkLFxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTM3NjgtXFx0XFx0XFx0XFx0XFx0ICAgICAgXFx1MDAyNnRndF9pbmZvKTtcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTUwOTk9c3RhdGljIGludCBicGZfcHJvZ19nZXRfaW5mb19ieV9mZChzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTUxMTMtXFx0bGVuID0gb2Zmc2V0b2ZlbmQoc3RydWN0IGJwZl9wcm9nX2luZm8sIGF0dGFjaF9idGZfaWQpO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjUxMTQ6XFx0ZXJyID0gYnBmX2NoZWNrX3VhcmdfdGFpbF96ZXJvKFVTRVJfQlBGUFRSKHVpbmZvKSwgbGVuLCBpbmZvX2xlbik7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTExNS1cXHRpZiAoZXJyKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9NTM4OT1zdGF0aWMgaW50IGJwZl9tYXBfZ2V0X2luZm9fYnlfZmQoc3RydWN0IGZpbGUgKmZpbGUsXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01Mzk5LVxcdGxlbiA9IG9mZnNldG9mZW5kKHN0cnVjdCBicGZfbWFwX2luZm8sIGhhc2hfc2l6ZSk7XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NTQwMDpcXHRlcnIgPSBicGZfY2hlY2tfdWFyZ190YWlsX3plcm8oVVNFUl9CUEZQVFIodWluZm8pLCBsZW4sIGluZm9fbGVuKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01NDAxLVxcdGlmIChlcnIpXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz01NDYwPXN0YXRpYyBpbnQgYnBmX2J0Zl9nZXRfaW5mb19ieV9mZChzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU0NjgtXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NTQ2OTpcXHRlcnIgPSBicGZfY2hlY2tfdWFyZ190YWlsX3plcm8oVVNFUl9CUEZQVFIodWluZm8pLCBzaXplb2YoKnVpbmZvKSwgaW5mb19sZW4pO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU0NzAtXFx0aWYgKGVycilcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTU0NzY9c3RhdGljIGludCBicGZfbGlua19nZXRfaW5mb19ieV9mZChzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU0ODYtXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NTQ4NzpcXHRlcnIgPSBicGZfY2hlY2tfdWFyZ190YWlsX3plcm8oVVNFUl9CUEZQVFIodWluZm8pLCBzaXplb2YoaW5mbyksIGluZm9fbGVuKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01NDg4LVxcdGlmIChlcnIpXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz01NTE4PXN0YXRpYyBpbnQgdG9rZW5fZ2V0X2luZm9fYnlfZmQoc3RydWN0IGZpbGUgKmZpbGUsXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01NTI2LVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjU1Mjc6XFx0ZXJyID0gYnBmX2NoZWNrX3VhcmdfdGFpbF96ZXJvKFVTRVJfQlBGUFRSKHVpbmZvKSwgc2l6ZW9mKCp1aW5mbyksIGluZm9fbGVuKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01NTI4LVxcdGlmIChlcnIpXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz02MzAzPXN0YXRpYyBpbnQgX19zeXNfYnBmKGVudW0gYnBmX2NtZCBjbWQsIGJwZnB0cl90IHVhdHRyLCB1bnNpZ25lZCBpbnQgc2l6ZSxcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTYzMTEtXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NjMxMjpcXHRlcnIgPSBicGZfY2hlY2tfdWFyZ190YWlsX3plcm8odWF0dHIsIHNpemVvZihhdHRyKSwgc2l6ZSk7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjMxMy1cXHRpZiAoZXJyKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNjMyMy1cXHRpZiAoY21kIFxcdTAwMjYgQlBGX0NPTU1PTl9BVFRSUykge1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjYzMjQ6XFx0XFx0ZXJyID0gYnBmX2NoZWNrX3VhcmdfdGFpbF96ZXJvKHVhdHRyX2NvbW1vbixcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02MzI1LVxcdFxcdFxcdFxcdFxcdCAgICAgICBvZmZzZXRvZmVuZChzdHJ1Y3QgYnBmX2NvbW1vbl9hdHRyLCBsb2dfdHJ1ZV9zaXplKSxcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jPTExMjM9aW50IGJwZl90cmFtcG9saW5lX2xpbmtfY2dyb3VwX3NoaW0oc3RydWN0IGJwZl9wcm9nICpwcm9nLFxcbi0tXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTEzMy1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYzoxMTM0OlxcdGVyciA9IGJwZl9jaGVja19hdHRhY2hfdGFyZ2V0KE5VTEwsIHByb2csIE5VTEwsXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmMtMTEzNS1cXHRcXHRcXHRcXHQgICAgICBwcm9nLVxcdTAwM2VhdXgtXFx1MDAzZWF0dGFjaF9idGZfaWQsXFxuLS1cXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYz0xNjY5PWludCBicGZfdHJhbXBvbGluZV9tdWx0aV9hdHRhY2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIgKmlkcyxcXG4tLVxcbmtlcm5lbC9icGYvdHJhbXBvbGluZS5jLTE2ODItXFxua2VybmVsL2JwZi90cmFtcG9saW5lLmM6MTY4MzpcXHRcXHRlcnIgPSBicGZfY2hlY2tfYXR0YWNoX2J0Zl9pZF9tdWx0aShidGYsIHByb2csIGlkc1tpXSwgXFx1MDAyNnRndF9pbmZvKTtcXG5rZXJuZWwvYnBmL3RyYW1wb2xpbmUuYy0xNjg0LVxcdFxcdGlmIChlcnIpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NTg9c3RhdGljIGJvb2wgYnBmX2dsb2JhbF9wZXJjcHVfbWFfc2V0O1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy01OS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjA6LyogYnBmX2NoZWNrKCkgaXMgYSBzdGF0aWMgY29kZSBhbmFseXplciB0aGF0IHdhbGtzIGVCUEYgcHJvZ3JhbVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02MS0gKiBpbnN0cnVjdGlvbiBieSBpbnN0cnVjdGlvbiBhbmQgdXBkYXRlcyByZWdpc3Rlci9zdGFjayBzdGF0ZS5cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMjUzMz1zdGF0aWMgaW50IHByb2Nlc3Nfa2ZfYXJnX3B0cl90b19yYnRyZWVfbm9kZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEyNTQ0LSAqIExTTSBob29rcyBhbmQgaXRlcnMgKGJvdGggc2xlZXBhYmxlIGFuZCBub24tc2xlZXBhYmxlKSBhcmUgc2FmZS5cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTI1NDU6ICogQW55IHNsZWVwYWJsZSBwcm9ncyBhcmUgYWxzbyBzYWZlIHNpbmNlIGJwZl9jaGVja19hdHRhY2hfdGFyZ2V0KCkgZW5mb3JjZVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMjU0Ni0gKiB0aGVtIGNhbiBvbmx5IGJlIGF0dGFjaGVkIHRvIHNvbWUgc3BlY2lmaWMgaG9vayBwb2ludHMuXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTk4NjY9c3RhdGljIGJvb2wgYXR0YWNoX3VzZXNfdHJhbXBvbGluZV9yZXR2YWwoZW51bSBicGZfYXR0YWNoX3R5cGUgdHlwZSlcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTg3OS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTk4ODA6aW50IGJwZl9jaGVja19hdHRhY2hfdGFyZ2V0KHN0cnVjdCBicGZfdmVyaWZpZXJfbG9nICpsb2csXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5ODgxLVxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MjAzMDM9c3RhdGljIGludCBjaGVja19hdHRhY2hfYnRmX2lkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjAzMzMtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjIwMzM0OlxcdHJldCA9IGJwZl9jaGVja19hdHRhY2hfdGFyZ2V0KFxcdTAwMjZlbnYtXFx1MDAzZWxvZywgcHJvZywgdGd0X3Byb2csIGJ0Zl9pZCwgXFx1MDAyNnRndF9pbmZvKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjAzMzUtXFx0aWYgKHJldClcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDQwMi1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjA0MDM6aW50IGJwZl9jaGVja19hdHRhY2hfYnRmX2lkX211bHRpKHN0cnVjdCBidGYgKmJ0Ziwgc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIgYnRmX2lkLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDQwNC1cXHRcXHRcXHRcXHQgIHN0cnVjdCBicGZfYXR0YWNoX3RhcmdldF9pbmZvICp0Z3RfaW5mbylcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0yMDgzNj1zdGF0aWMgZW51bSBicGZfc2lnX2tleXJpbmcgYnBmX2NsYXNzaWZ5X2tleXJpbmcoczMyIGtleXJpbmdfaWQpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjA4NTAtLypcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjA4NTE6ICogVmVyaWZ5IHRoZSBQS0NTIzcgc2lnbmF0dXJlIG9mIGEgbG9hZGVkIHByb2dyYW0uIENhbGxlZCBmcm9tIGJwZl9jaGVjaygpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwODUyLSAqIG9uY2UgdGhlIHByb2dyYW0ncyBtZXRhZGF0YSBtYXBzIGhhdmUgYmVlbiByZXNvbHZlZCBpbnRvIHVzZWRfbWFwcywgc29cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0yMDg1OT1zdGF0aWMgaW50IGJwZl9wcm9nX3ZlcmlmeV9zaWduYXR1cmUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDk3NS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MjA5NzY6aW50IGJwZl9jaGVjayhzdHJ1Y3QgYnBmX3Byb2cgKipwcm9nLCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIsXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwOTc3LVxcdCAgICAgIHN0cnVjdCBicGZfbG9nX2F0dHIgKmF0dHJfbG9nKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwOTkwLVxcdC8qICdzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudicgY2FuIGJlIGdsb2JhbCwgYnV0IHNpbmNlIGl0J3Mgbm90IHNtYWxsLFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoyMDk5MTpcXHQgKiBhbGxvY2F0ZS9mcmVlIGl0IGV2ZXJ5IHRpbWUgYnBmX2NoZWNrKCkgaXMgY2FsbGVkXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwOTkyLVxcdCAqL1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIxMTAxLVxcdC8qIFZhbGlkYXRlIEJURiBhZ2FpbnN0IHRoZSBjb21wbGV0ZSBzdWJwcm9ncmFtIGxheW91dCBhbmQgYXBwbHkgQ08tUkUuICovXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjIxMTAyOlxcdHJldCA9IGJwZl9jaGVja19idGZfaW5mbyhlbnYsIGF0dHIsIHVhdHRyKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjExMDMtXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjExMjEtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjIxMTIyOlxcdHJldCA9IGJwZl9jaGVja19jZmcoZW52KTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjExMjMtXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDExOjE4OjQ5LjQzMjI2MjQ2OVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTI2MjY5MzQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBCUEYgVmVyaWZpZXIgRW50cnkgUG9pbnQqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgQlBGIHZlcmlmaWVyIHN0dWZmLiBJIHNlZSB0aGF0IGBicGZfY2hlY2tgIGlzIGNhbGxlZCBmcm9tIGBicGZfcHJvZ19sb2FkYCBpbiBga2VybmVsL2JwZi9zeXNjYWxsLmNgLiBUaGlzIHN0cm9uZ2x5IHN1Z2dlc3RzIHRoYXQgYGJwZl9jaGVja2AgaXMgdGhlIHByaW1hcnkgZW50cnkgcG9pbnQgZm9yIHRoZSB2ZXJpZmllciwgd2hpY2ggbWFrZXMgc2Vuc2UuIEknbSB3b25kZXJpbmcsIHRob3VnaCwgaXMgdGhlcmUgKmFub3RoZXIqIGZ1bmN0aW9uIEkgc2hvdWxkIGJlIGNvbnNpZGVyaW5nPyBgYnBmX3Byb2dfbG9hZGAgaXRzZWxmIGlzIHN0YXRpYywgc28gSSBjYW4gZGlzbWlzcyB0aGF0LiBUaGUgcmVhbCBzeXNjYWxsIGVudHJ5IHBvaW50IGlzIGBzeXNfYnBmYC4gR2l2ZW4gdGhlIGluc3RydWN0aW9ucywgYGJwZl9jaGVja2Agc2VlbXMgbGlrZSB0aGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIGZvY3VzIOKAkyBpdOKAmXMgKnRoZSogdmVyaWZpZXIncyBnYXRld2F5LlxuXG5CdXQgdGhlbiwgSSBwYXVzZS4gYGJwZl9jaGVja2AgaXMgYSBwcmV0dHkgZ2VuZXJpYyBuYW1lLiBUaGUgaW5zdHJ1Y3Rpb25zIGVtcGhhc2l6ZSBhdm9pZGluZyBcImdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zXCIgdG8gcHJldmVudCB0ZXN0IGRpc3RyaWJ1dGlvbiBza2V3aW5nLiBUaGV5IHN1Z2dlc3QgZmF2b3Jpbmcgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzIG92ZXIgaW50ZXJuYWwsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zLiBUaGlzIGdpdmVzIG1lIHBhdXNlLiBJcyBgYnBmX2NoZWNrYCAqdG9vKiBnZW5lcmljP1xuXG5JIHRoaW5rIEkndmUgY29udmluY2VkIG15c2VsZi4gSXQncyB0aGUgdmVyaWZpZXIgZW50cnkgcG9pbnQsIHBlcmlvZC4gSXQncyBub3QgYSBob3QtcGF0aCBmdW5jdGlvbiwgc2luY2UgaXQncyBvbmx5IGNhbGxlZCBkdXJpbmcgcHJvZ3JhbSBsb2FkLiBTbywgaXQncyBhY3R1YWxseSAqaWRlYWwqIGZyb20gdGhlIHBlcnNwZWN0aXZlIG9mIGZvY3VzaW5nIG9uIGEgd2VsbC1kZWZpbmVkIHBvaW50IG9mIGVudHJ5LlxuXG5Ob3csIGxldCdzIHN3aXRjaCBnZWFycyBhIGJpdC4gVGhlIHRlc3QgSSdtIHdvcmtpbmcgd2l0aCB1dGlsaXplcyB0aGUgYGFyZW5hYCBmZWF0dXJlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgYGFyZW5hYCBmZWF0dXJlIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cy4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBjb25maWdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTg3NSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQxMToxODo1NC41NTg1MzQ1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjIyNzQwNywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXJlbmFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQxMToxODo1NC42MDQ3NzI4OTdaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjc4Njc3MTQ1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgaXQ6XG5cbioqRGlnZ2luZyBpbnRvIE1lbW9yeSBBbGxvY2F0aW9uIGZvciBCUEYqKlxuXG5Pa2F5LCBzbyB3ZSd2ZSBnb3QgYSBCUEYtcmVsYXRlZCBtZW1vcnkgaXNzdWUsIGFuZCBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBpdCdzIHN0ZW1taW5nIGZyb20uIE15IGd1dCBmZWVsaW5nLCBiYXNlZCBvbiBwcmV2aW91cyBleHBlcmllbmNlcywgc2F5cyB0aGUgYXJlbmEgYWxsb2NhdG9yIGlzIGEgcHJpbWUgc3VzcGVjdC4gTGV0J3Mgc3RhcnQgYnkgemVyb2luZyBpbiBvbiBga2VybmVsL2JwZi9hcmVuYS5jYCBzcGVjaWZpY2FsbHkuIFRoYXQgZmlsZSdzIHRoZSBoZWFydCBvZiBCUEYncyBtZW1vcnkgbWFuYWdlbWVudC4gSSBzdXNwZWN0IHRoZSBpc3N1ZSBjb3VsZCBiZSByZWxhdGVkIHRvIGFsbG9jYXRpb24gc2l6ZXMsIGZyYWdtZW50YXRpb24sIG9yIHBlcmhhcHMgc29tZSBzdWJ0bGUgcmFjZSBjb25kaXRpb25zIHdpdGggY29uY3VycmVudCBhY2Nlc3MuIEFsdGVybmF0aXZlbHksIHRoZSBpc3N1ZSBjb3VsZCBiZSB3aXRoIHNpbWlsYXIgZmlsZXMgaGFuZGxpbmcgdGhlIHNhbWUgb3BlcmF0aW9ucywgSSB3aWxsIG5lZWQgdG8gZXhwYW5kIHRoZSBzZWFyY2ggaWYgSSBjb21lIHVwIGVtcHR5LiBJJ2xsIHN0YXJ0IGJ5IHJlYWRpbmcgdGhlIGNvZGUsIGZvY3VzaW5nIG9uIHRoZSBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24gcGF0aHMsIGFuZCBzZWUgaWYgYW55dGhpbmcganVtcHMgb3V0IGltbWVkaWF0ZWx5LiBJZiBub3QsIEknbGwgcHJvYmFibHkgbmVlZCB0byBicmVhayBvdXQgc29tZSBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHN0YXJ0IHRyYWNpbmcgbWVtb3J5IG9wZXJhdGlvbnMuIFRoaXMgc2hvdWxkIHBvaW50IG1lIGluIHRoZSByaWdodCBkaXJlY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNTI3LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMTE6MTg6NTcuMzkxNTQ3NTQxWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTQwNDE5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhcmVuYVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDExMjEgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbmtlcm5lbC9icGYvTWFrZWZpbGU9MTk9aWZlcSAoJChDT05GSUdfTU1VKSQoQ09ORklHXzY0QklUKSx5eSlcXG5rZXJuZWwvYnBmL01ha2VmaWxlOjIwOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gYXJlbmEubyByYW5nZV90cmVlLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlLTIxLWVuZGlmXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTYtLypcXG5rZXJuZWwvYnBmL2FyZW5hLmM6MTc6ICogYnBmX2FyZW5hIGlzIGEgc3BhcnNlbHkgcG9wdWxhdGVkIHNoYXJlZCBtZW1vcnkgcmVnaW9uIGJldHdlZW4gYnBmIHByb2dyYW0gYW5kXFxua2VybmVsL2JwZi9hcmVuYS5jLTE4LSAqIHVzZXIgc3BhY2UgcHJvY2Vzcy5cXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy0yMi0gKiBrZXJuX3ZtX3N0YXJ0IGZmZmZjOTAwMDFlNjkwMDAgLy8gcGlja2VkIGJ5IGdldF92bV9hcmVhKClcXG5rZXJuZWwvYnBmL2FyZW5hLmM6MjM6ICogRm9yIHVzZXIgc3BhY2UgYWxsIHBvaW50ZXJzIHdpdGhpbiB0aGUgYXJlbmEgYXJlIG5vcm1hbCA4LWJ5dGUgYWRkcmVzc2VzLlxcbmtlcm5lbC9icGYvYXJlbmEuYy0yNC0gKiBJbiB0aGlzIGV4YW1wbGUgN2Y3ZDI2MjAwMDAwIGlzIHRoZSBhZGRyZXNzIG9mIHRoZSBmaXJzdCBwYWdlIChwZ29mZj0wKS5cXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy0zMC0gKlxcbmtlcm5lbC9icGYvYXJlbmEuYzozMTogKiBCUEYgSklUcyBnZW5lcmF0ZSB0aGUgZm9sbG93aW5nIGNvZGUgdG8gYWNjZXNzIGFyZW5hOlxcbmtlcm5lbC9icGYvYXJlbmEuYy0zMi0gKiAgIG1vdiBlYXgsIGVheCAgLy8gZWF4IGhhcyBsb3dlciAzMi1iaXQgb2YgdXNlciBwb2ludGVyXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtMzktICogaW50byBrZXJuZWwgYW5kIHVzZXIgdm1hLlxcbmtlcm5lbC9icGYvYXJlbmEuYzo0MDogKiBicGYgcHJvZ3JhbSBjYW4gYWxsb2NhdGUgYSBwYWdlIHZpYSBicGZfYXJlbmFfYWxsb2NfcGFnZXMoKSBrZnVuY1xcbmtlcm5lbC9icGYvYXJlbmEuYy00MS0gKiB3aGljaCB3aWxsIGluc2VydCBpdCBpbnRvIGtlcm5lbCB2bV9hcmVhLlxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTQ4LVxcbmtlcm5lbC9icGYvYXJlbmEuYzo0OTpzdGF0aWMgdm9pZCBhcmVuYV9mcmVlX3BhZ2VzKHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hLCBsb25nIHVhZGRyLCBsb25nIHBhZ2VfY250LCBib29sIHNsZWVwYWJsZSk7XFxua2VybmVsL2JwZi9hcmVuYS5jLTUwLVxcbmtlcm5lbC9icGYvYXJlbmEuYzo1MTpzdHJ1Y3QgYnBmX2FyZW5hIHtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNTItXFx0c3RydWN0IGJwZl9tYXAgbWFwO1xcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTU5LVxcdHJxc3BpbmxvY2tfdCBzcGlubG9jaztcXG5rZXJuZWwvYnBmL2FyZW5hLmM6NjA6XFx0LyogbnVtYmVyIG9mIHBhZ2VzIGN1cnJlbnRseSBwb3B1bGF0ZWQgaW4gdGhlIGFyZW5hICovXFxua2VybmVsL2JwZi9hcmVuYS5jLTYxLVxcdHU2NCBucl9wYWdlcztcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy03MS1cXG5rZXJuZWwvYnBmL2FyZW5hLmM6NzI6c3RhdGljIHZvaWQgYXJlbmFfZnJlZV93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmM6NzM6c3RhdGljIHZvaWQgYXJlbmFfZnJlZV9pcnEoc3RydWN0IGlycV93b3JrICppdyk7XFxua2VybmVsL2JwZi9hcmVuYS5jLTc0LVxcbmtlcm5lbC9icGYvYXJlbmEuYzo3NTpzdHJ1Y3QgYXJlbmFfZnJlZV9zcGFuIHtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzYtXFx0c3RydWN0IGxsaXN0X25vZGUgbm9kZTtcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy04MC1cXG5rZXJuZWwvYnBmL2FyZW5hLmM6ODE6dTY0IGJwZl9hcmVuYV9nZXRfa2Vybl92bV9zdGFydChzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSlcXG5rZXJuZWwvYnBmL2FyZW5hLmMtODIte1xcbmtlcm5lbC9icGYvYXJlbmEuYzo4MzpcXHRyZXR1cm4gYXJlbmEgPyAodTY0KSAobG9uZykgYXJlbmEtXFx1MDAzZWtlcm5fdm0tXFx1MDAzZWFkZHIgKyBHVUFSRF9TWiAvIDIgOiAwO1xcbmtlcm5lbC9icGYvYXJlbmEuYy04NC19XFxua2VybmVsL2JwZi9hcmVuYS5jLTg1LVxcbmtlcm5lbC9icGYvYXJlbmEuYzo4Njp1NjQgYnBmX2FyZW5hX2dldF91c2VyX3ZtX3N0YXJ0KHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hKVxcbmtlcm5lbC9icGYvYXJlbmEuYy04Ny17XFxua2VybmVsL2JwZi9hcmVuYS5jOjg4OlxcdHJldHVybiBhcmVuYSA/IGFyZW5hLVxcdTAwM2V1c2VyX3ZtX3N0YXJ0IDogMDtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtODktfVxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTkxLS8qKlxcbmtlcm5lbC9icGYvYXJlbmEuYzo5MjogKiBicGZfYXJlbmFfbWFwX2tlcm5fdm1fc3RhcnQgLSBrZXJuX3ZtX3N0YXJ0IGxvb2t1cCBieSBzdHJ1Y3QgYnBmX21hcCAqXFxua2VybmVsL2JwZi9hcmVuYS5jLTkzLSAqIEBtYXA6IGEgQlBGX01BUF9UWVBFX0FSRU5BIG1hcFxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTk2LSAqL1xcbmtlcm5lbC9icGYvYXJlbmEuYzo5Nzp1NjQgYnBmX2FyZW5hX21hcF9rZXJuX3ZtX3N0YXJ0KHN0cnVjdCBicGZfbWFwICptYXApXFxua2VybmVsL2JwZi9hcmVuYS5jLTk4LXtcXG5rZXJuZWwvYnBmL2FyZW5hLmM6OTk6XFx0cmV0dXJuIGJwZl9hcmVuYV9nZXRfa2Vybl92bV9zdGFydChjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX2FyZW5hLCBtYXApKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTAwLX1cXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy0xMDItLyoqXFxua2VybmVsL2JwZi9hcmVuYS5jOjEwMzogKiBicGZfcHJvZ19hcmVuYSAtIHJldHVybiB0aGUgYnBmX21hcCBvZiB0aGUgYXJlbmEgcmVmZXJlbmNlZCBieSBAcHJvZ1xcbmtlcm5lbC9icGYvYXJlbmEuYy0xMDQtICogQHByb2c6IGEgbG9hZGVkIEJQRiBwcm9ncmFtXFxua2VybmVsL2JwZi9hcmVuYS5jLTEwNS0gKlxcbmtlcm5lbC9icGYvYXJlbmEuYzoxMDY6ICogVGhlIHZlcmlmaWVyIGVuZm9yY2VzIGF0IG1vc3Qgb25lIGFyZW5hIHBlciBwcm9ncmFtIGFuZCBzdG9yZXMgaXQgaW5cXG5rZXJuZWwvYnBmL2FyZW5hLmM6MTA3OiAqIHByb2ctXFx1MDAzZWF1eC1cXHUwMDNlYXJlbmEuIFJldHVybiB0aGF0IGFyZW5hJ3MgdW5kZXJseWluZyBicGZfbWFwLCBvciBOVUxMIGlmXFxua2VybmVsL2JwZi9hcmVuYS5jOjEwODogKiBAcHJvZyBkb2VzIG5vdCByZWZlcmVuY2UgYW4gYXJlbmEuXFxua2VybmVsL2JwZi9hcmVuYS5jLTEwOS0gKi9cXG5rZXJuZWwvYnBmL2FyZW5hLmM6MTEwOnN0cnVjdCBicGZfbWFwICpicGZfcHJvZ19hcmVuYShzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxua2VybmVsL2JwZi9hcmVuYS5jLTExMS17XFxua2VybmVsL2JwZi9hcmVuYS5jOjExMjpcXHRzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSA9IHByb2ctXFx1MDAzZWF1eC1cXHUwMDNlYXJlbmE7XFxua2VybmVsL2JwZi9hcmVuYS5jLTExMy1cXG5rZXJuZWwvYnBmL2FyZW5hLmM6MTE0OlxcdHJldHVybiBhcmVuYSA/IFxcdTAwMjZhcmVuYS1cXHUwMDNlbWFwIDogTlVMTDtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTE1LX1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTE2LVxcbmtlcm5lbC9icGYvYXJlbmEuYzoxMTc6c3RhdGljIGxvbmcgYXJlbmFfbWFwX3BlZWtfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICp2YWx1ZSlcXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTE4LXtcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy0xMjEtXFxua2VybmVsL2JwZi9hcmVuYS5jOjEyMjpzdGF0aWMgbG9uZyBhcmVuYV9tYXBfcHVzaF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKnZhbHVlLCB1NjQgZmxhZ3MpXFxua2VybmVsL2JwZi9hcmVuYS5jLTEyMy17XFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTI2LVxcbmtlcm5lbC9icGYvYXJlbmEuYzoxMjc6c3RhdGljIGxvbmcgYXJlbmFfbWFwX3BvcF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKnZhbHVlKVxcbmtlcm5lbC9icGYvYXJlbmEuYy0xMjgte1xcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTEzMS1cXG5rZXJuZWwvYnBmL2FyZW5hLmM6MTMyOnN0YXRpYyBsb25nIGFyZW5hX21hcF9kZWxldGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICp2YWx1ZSlcXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTMzLXtcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy0xMzYtXFxua2VybmVsL2JwZi9hcmVuYS5jOjEzNzpzdGF0aWMgaW50IGFyZW5hX21hcF9nZXRfbmV4dF9rZXkoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICpuZXh0X2tleSlcXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTM4LXtcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy0xNDEtXFxua2VybmVsL2JwZi9hcmVuYS5jOjE0MjpzdGF0aWMgbG9uZyBjb21wdXRlX3Bnb2ZmKHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hLCBsb25nIHVhZGRyKVxcbmtlcm5lbC9icGYvYXJlbmEuYy0xNDMte1xcbmtlcm5lbC9icGYvYXJlbmEuYzoxNDQ6XFx0cmV0dXJuICh1MzIpKHVhZGRyIC0gKHUzMilhcmVuYS1cXHUwMDNldXNlcl92bV9zdGFydCkgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVDtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTQ1LX1cXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYz0xNDc9c3RydWN0IGFwcGx5X3JhbmdlX2RhdGEge1xcbmtlcm5lbC9icGYvYXJlbmEuYzoxNDg6XFx0c3RydWN0IGJwZl9hcmVuYSAqYXJlbmE7XFxua2VybmVsL2JwZi9hcmVuYS5jLTE0OS1cXHRzdHJ1Y3QgcGFnZSAqKnBhZ2VzO1xcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jPTE1Mz1zdHJ1Y3QgY2xlYXJfcmFuZ2VfZGF0YSB7XFxua2VybmVsL2JwZi9hcmVuYS5jOjE1NDpcXHRzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTU1LVxcdHN0cnVjdCBsbGlzdF9oZWFkICpmcmVlX3BhZ2VzO1xcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jPTE1OD1zdGF0aWMgaW50IGFwcGx5X3JhbmdlX3NldF9jYihwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGFkZHIsIHZvaWQgKmRhdGEpXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTg0LVxcdFxcdFxcdGNvbnRpbnVlO1xcbmtlcm5lbC9icGYvYXJlbmEuYzoxODU6XFx0XFx0aWYgKFdBUk5fT05fT05DRShwdGVfcGFnZShvbGQpICE9IGQtXFx1MDAzZWFyZW5hLVxcdTAwM2VzY3JhdGNoX3BhZ2UpKVxcbmtlcm5lbC9icGYvYXJlbmEuYy0xODYtXFx0XFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy0xOTItXFx0ICogV2l0aG91dCBwdGVwX3RyeV9zZXQoKSB0aGVyZSBpcyBubyBhdG9taWMgaW5zdGFsbGVyLCBidXQgc3VjaCBhcmNoZXNcXG5rZXJuZWwvYnBmL2FyZW5hLmM6MTkzOlxcdCAqIGFsc28gZG8gbm90IHdpcmUgdXAgYnBmX2FyZW5hX2hhbmRsZV9wYWdlX2ZhdWx0KCksIHNvIG5vIHNjcmF0Y2ggcGFnZVxcbmtlcm5lbC9icGYvYXJlbmEuYy0xOTQtXFx0ICogaXMgZXZlciBpbnN0YWxsZWQgYW5kIHRoZSBzbG90IGlzIGFsd2F5cyBub25lIGhlcmUuXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtMjAwLVxcdGQtXFx1MDAzZWkrKztcXG5rZXJuZWwvYnBmL2FyZW5hLmM6MjAxOlxcdFdSSVRFX09OQ0UoZC1cXHUwMDNlYXJlbmEtXFx1MDAzZW5yX3BhZ2VzLCBkLVxcdTAwM2VhcmVuYS1cXHUwMDNlbnJfcGFnZXMgKyAxKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtMjAyLVxcdHJldHVybiAwO1xcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jPTIxMD1zdGF0aWMgaW50IGFwcGx5X3JhbmdlX2NsZWFyX2NiKHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqZGF0YSlcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy0yMjgtXFx0LypcXG5rZXJuZWwvYnBmL2FyZW5hLmM6MjI5OlxcdCAqIFNraXAgdGhlIHBlci1hcmVuYSBzY3JhdGNoIHBhZ2UuIEEga2VybmVsIGZhdWx0IG9uIGFuIHVuYWxsb2NhdGVkIHVhZGRyXFxua2VybmVsL2JwZi9hcmVuYS5jOjIzMDpcXHQgKiBzY3JhdGNoZXMgaXRzIFBURS4gQSBsYXRlciBicGZfYXJlbmFfZnJlZV9wYWdlcygpIG92ZXIgdGhhdCByYW5nZSB3YWxrc1xcbmtlcm5lbC9icGYvYXJlbmEuYy0yMzEtXFx0ICogaGVyZS4gV2l0aG91dCB0aGUgc2tpcCwgc2NyYXRjaF9wYWdlIHdvdWxkIGJlIGZyZWVkLlxcbmtlcm5lbC9icGYvYXJlbmEuYy0yMzItXFx0ICovXFxua2VybmVsL2JwZi9hcmVuYS5jOjIzMzpcXHRpZiAocGFnZSA9PSBkLVxcdTAwM2VhcmVuYS1cXHUwMDNlc2NyYXRjaF9wYWdlKVxcbmtlcm5lbC9icGYvYXJlbmEuYy0yMzQtXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtMjM2LVxcdF9fbGxpc3RfYWRkKFxcdTAwMjZwYWdlLVxcdTAwM2VwY3BfbGxpc3QsIGQtXFx1MDAzZWZyZWVfcGFnZXMpO1xcbmtlcm5lbC9icGYvYXJlbmEuYzoyMzc6XFx0V1JJVEVfT05DRShkLVxcdTAwM2VhcmVuYS1cXHUwMDNlbnJfcGFnZXMsIGQtXFx1MDAzZWFyZW5hLVxcdTAwM2Vucl9wYWdlcyAtIDEpO1xcbmtlcm5lbC9icGYvYXJlbmEuYy0yMzgtXFx0cmV0dXJuIDA7XFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmM9MjQxPXN0YXRpYyBpbnQgYXBwbHlfcmFuZ2Vfc2V0X3NjcmF0Y2hfY2IocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBhZGRyLCB2b2lkICpkYXRhKVxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTI1OC1cXG5rZXJuZWwvYnBmL2FyZW5hLmM6MjU5OnN0YXRpYyBpbnQgcG9wdWxhdGVfcGd0YWJsZV9leGNlcHRfcHRlKHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hKVxcbmtlcm5lbC9icGYvYXJlbmEuYy0yNjAte1xcbmtlcm5lbC9icGYvYXJlbmEuYy0yNjEtXFx0LyogUG9wdWxhdGUgaW50ZXJtZWRpYXRlcyBmb3IgdGhlIHJlY292ZXJ5IHJhbmdlICg0IEdpQiArIHVwcGVyIGhhbGYtZ3VhcmQpLiAqL1xcbmtlcm5lbC9icGYvYXJlbmEuYzoyNjI6XFx0cmV0dXJuIGFwcGx5X3RvX3BhZ2VfcmFuZ2UoXFx1MDAyNmluaXRfbW0sIGJwZl9hcmVuYV9nZXRfa2Vybl92bV9zdGFydChhcmVuYSksXFxua2VybmVsL2JwZi9hcmVuYS5jLTI2My1cXHRcXHRcXHRcXHQgICBTWl80RyArIEdVQVJEX1NaIC8gMiwgYXBwbHlfcmFuZ2Vfc2V0X2NiLCBOVUxMKTtcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy0yNjUtXFxua2VybmVsL2JwZi9hcmVuYS5jOjI2NjpzdGF0aWMgc3RydWN0IGJwZl9tYXAgKmFyZW5hX21hcF9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0cilcXG5rZXJuZWwvYnBmL2FyZW5hLmMtMjY3LXtcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy0yNjktXFx0aW50IG51bWFfbm9kZSA9IGJwZl9tYXBfYXR0cl9udW1hX25vZGUoYXR0cik7XFxua2VybmVsL2JwZi9hcmVuYS5jOjI3MDpcXHRzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtMjcxLVxcdHU2NCB2bV9yYW5nZTtcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy0yNzMtXFxua2VybmVsL2JwZi9hcmVuYS5jOjI3NDpcXHRpZiAoIWJwZl9qaXRfc3VwcG9ydHNfYXJlbmEoKSlcXG5rZXJuZWwvYnBmL2FyZW5hLmMtMjc1LVxcdFxcdHJldHVybiBFUlJfUFRSKC1FT1BOT1RTVVBQKTtcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy0yOTktXFxua2VybmVsL2JwZi9hcmVuYS5jOjMwMDpcXHRhcmVuYSA9IGJwZl9tYXBfYXJlYV9hbGxvYyhzaXplb2YoKmFyZW5hKSwgbnVtYV9ub2RlKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmM6MzAxOlxcdGlmICghYXJlbmEpXFxua2VybmVsL2JwZi9hcmVuYS5jLTMwMi1cXHRcXHRnb3RvIGVycjtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtMzAzLVxcbmtlcm5lbC9icGYvYXJlbmEuYzozMDQ6XFx0YXJlbmEtXFx1MDAzZWtlcm5fdm0gPSBrZXJuX3ZtO1xcbmtlcm5lbC9icGYvYXJlbmEuYzozMDU6XFx0YXJlbmEtXFx1MDAzZXVzZXJfdm1fc3RhcnQgPSBhdHRyLVxcdTAwM2VtYXBfZXh0cmE7XFxua2VybmVsL2JwZi9hcmVuYS5jOjMwNjpcXHRpZiAoYXJlbmEtXFx1MDAzZXVzZXJfdm1fc3RhcnQpXFxua2VybmVsL2JwZi9hcmVuYS5jOjMwNzpcXHRcXHRhcmVuYS1cXHUwMDNldXNlcl92bV9lbmQgPSBhcmVuYS1cXHUwMDNldXNlcl92bV9zdGFydCArIHZtX3JhbmdlO1xcbmtlcm5lbC9icGYvYXJlbmEuYy0zMDgtXFxua2VybmVsL2JwZi9hcmVuYS5jOjMwOTpcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2YXJlbmEtXFx1MDAzZXZtYV9saXN0KTtcXG5rZXJuZWwvYnBmL2FyZW5hLmM6MzEwOlxcdGluaXRfbGxpc3RfaGVhZChcXHUwMDI2YXJlbmEtXFx1MDAzZWZyZWVfc3BhbnMpO1xcbmtlcm5lbC9icGYvYXJlbmEuYzozMTE6XFx0aW5pdF9pcnFfd29yayhcXHUwMDI2YXJlbmEtXFx1MDAzZWZyZWVfaXJxLCBhcmVuYV9mcmVlX2lycSk7XFxua2VybmVsL2JwZi9hcmVuYS5jOjMxMjpcXHRJTklUX1dPUksoXFx1MDAyNmFyZW5hLVxcdTAwM2VmcmVlX3dvcmssIGFyZW5hX2ZyZWVfd29ya2VyKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmM6MzEzOlxcdGJwZl9tYXBfaW5pdF9mcm9tX2F0dHIoXFx1MDAyNmFyZW5hLVxcdTAwM2VtYXAsIGF0dHIpO1xcbmtlcm5lbC9icGYvYXJlbmEuYy0zMTQtXFxua2VybmVsL2JwZi9hcmVuYS5jOjMxNTpcXHRlcnIgPSBicGZfbWFwX2FsbG9jX3BhZ2VzKFxcdTAwMjZhcmVuYS1cXHUwMDNlbWFwLCBOVU1BX05PX05PREUsIDEsIFxcdTAwMjZhcmVuYS1cXHUwMDNlc2NyYXRjaF9wYWdlKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtMzE2LVxcdGlmIChlcnIpXFxua2VybmVsL2JwZi9hcmVuYS5jOjMxNzpcXHRcXHRnb3RvIGVycl9mcmVlX2FyZW5hO1xcbmtlcm5lbC9icGYvYXJlbmEuYy0zMTgtXFxua2VybmVsL2JwZi9hcmVuYS5jOjMxOTpcXHRyYW5nZV90cmVlX2luaXQoXFx1MDAyNmFyZW5hLVxcdTAwM2VydCk7XFxua2VybmVsL2JwZi9hcmVuYS5jOjMyMDpcXHRlcnIgPSByYW5nZV90cmVlX3NldChcXHUwMDI2YXJlbmEtXFx1MDAzZXJ0LCAwLCBhdHRyLVxcdTAwM2VtYXhfZW50cmllcyk7XFxua2VybmVsL2JwZi9hcmVuYS5jLTMyMS1cXHRpZiAoZXJyKVxcbmtlcm5lbC9icGYvYXJlbmEuYy0zMjItXFx0XFx0Z290byBlcnJfZnJlZV9zY3JhdGNoO1xcbmtlcm5lbC9icGYvYXJlbmEuYzozMjM6XFx0bXV0ZXhfaW5pdChcXHUwMDI2YXJlbmEtXFx1MDAzZWxvY2spO1xcbmtlcm5lbC9icGYvYXJlbmEuYzozMjQ6XFx0bXV0ZXhfaW5pdChcXHUwMDI2YXJlbmEtXFx1MDAzZXphcF9tdXRleCk7XFxua2VybmVsL2JwZi9hcmVuYS5jOjMyNTpcXHRyYXdfcmVzX3NwaW5fbG9ja19pbml0KFxcdTAwMjZhcmVuYS1cXHUwMDNlc3BpbmxvY2spO1xcbmtlcm5lbC9icGYvYXJlbmEuYzozMjY6XFx0ZXJyID0gcG9wdWxhdGVfcGd0YWJsZV9leGNlcHRfcHRlKGFyZW5hKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtMzI3LVxcdGlmIChlcnIpXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtMzI5LVxcbmtlcm5lbC9icGYvYXJlbmEuYzozMzA6XFx0cmV0dXJuIFxcdTAwMjZhcmVuYS1cXHUwMDNlbWFwO1xcbmtlcm5lbC9icGYvYXJlbmEuYy0zMzEtXFxua2VybmVsL2JwZi9hcmVuYS5jLTMzMi1lcnJfZGVzdHJveV9ydDpcXG5rZXJuZWwvYnBmL2FyZW5hLmM6MzMzOlxcdHJhbmdlX3RyZWVfZGVzdHJveShcXHUwMDI2YXJlbmEtXFx1MDAzZXJ0KTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtMzM0LWVycl9mcmVlX3NjcmF0Y2g6XFxua2VybmVsL2JwZi9hcmVuYS5jOjMzNTpcXHRfX2ZyZWVfcGFnZShhcmVuYS1cXHUwMDNlc2NyYXRjaF9wYWdlKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmM6MzM2OmVycl9mcmVlX2FyZW5hOlxcbmtlcm5lbC9icGYvYXJlbmEuYzozMzc6XFx0YnBmX21hcF9hcmVhX2ZyZWUoYXJlbmEpO1xcbmtlcm5lbC9icGYvYXJlbmEuYy0zMzgtZXJyOlxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jPTM0Mz1zdGF0aWMgaW50IGV4aXN0aW5nX3BhZ2VfY2IocHRlX3QgKnB0ZXAsIHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqZGF0YSlcXG5rZXJuZWwvYnBmL2FyZW5hLmMtMzQ0LXtcXG5rZXJuZWwvYnBmL2FyZW5hLmM6MzQ1OlxcdHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hID0gZGF0YTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtMzQ2LVxcdHN0cnVjdCBwYWdlICpwYWdlO1xcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTM1Ni1cXHQgKi9cXG5rZXJuZWwvYnBmL2FyZW5hLmM6MzU3OlxcdGlmIChwYWdlID09IGFyZW5hLVxcdTAwM2VzY3JhdGNoX3BhZ2UpXFxua2VybmVsL2JwZi9hcmVuYS5jLTM1OC1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy0zNjAtXFx0ICogV2UgZG8gbm90IHVwZGF0ZSBwdGUgaGVyZTpcXG5rZXJuZWwvYnBmL2FyZW5hLmM6MzYxOlxcdCAqIDEuIE5vYm9keSBzaG91bGQgYmUgYWNjZXNzaW5nIGJwZl9hcmVuYSdzIHJhbmdlIG91dHNpZGUgb2YgYSBrZXJuZWwgYnVnXFxua2VybmVsL2JwZi9hcmVuYS5jLTM2Mi1cXHQgKiAyLiBUTEIgZmx1c2hpbmcgaXMgYmF0Y2hlZCBvciBkZWZlcnJlZC4gRXZlbiBpZiB3ZSBjbGVhciBwdGUsXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtMzY5LVxcbmtlcm5lbC9icGYvYXJlbmEuYzozNzA6c3RhdGljIHZvaWQgYXJlbmFfbWFwX2ZyZWUoc3RydWN0IGJwZl9tYXAgKm1hcClcXG5rZXJuZWwvYnBmL2FyZW5hLmMtMzcxLXtcXG5rZXJuZWwvYnBmL2FyZW5hLmM6MzcyOlxcdHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9hcmVuYSwgbWFwKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtMzczLVxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTM3Ni1cXHQgKiBtbWFwKCkgaG9sZHMgdm1fZmlsZSB3aGljaCBob2xkcyBicGZfbWFwIHJlZmNudC5cXG5rZXJuZWwvYnBmL2FyZW5hLmM6Mzc3OlxcdCAqIG11bm1hcCgpIG11c3QgaGF2ZSBoYXBwZW5lZCBvbiB2bWEgZm9sbG93ZWQgYnkgYXJlbmFfdm1fY2xvc2UoKVxcbmtlcm5lbC9icGYvYXJlbmEuYzozNzg6XFx0ICogd2hpY2ggd291bGQgY2xlYXIgYXJlbmEtXFx1MDAzZXZtYV9saXN0Llxcbmtlcm5lbC9icGYvYXJlbmEuYy0zNzktXFx0ICovXFxua2VybmVsL2JwZi9hcmVuYS5jOjM4MDpcXHRpZiAoV0FSTl9PTl9PTkNFKCFsaXN0X2VtcHR5KFxcdTAwMjZhcmVuYS1cXHUwMDNldm1hX2xpc3QpKSlcXG5rZXJuZWwvYnBmL2FyZW5hLmMtMzgxLVxcdFxcdHJldHVybjtcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy0zODMtXFx0LyogRW5zdXJlIG5vIHBlbmRpbmcgZGVmZXJyZWQgZnJlZXMgKi9cXG5rZXJuZWwvYnBmL2FyZW5hLmM6Mzg0OlxcdGlycV93b3JrX3N5bmMoXFx1MDAyNmFyZW5hLVxcdTAwM2VmcmVlX2lycSk7XFxua2VybmVsL2JwZi9hcmVuYS5jOjM4NTpcXHRmbHVzaF93b3JrKFxcdTAwMjZhcmVuYS1cXHUwMDNlZnJlZV93b3JrKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtMzg2LVxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTM5Mi1cXHQgKi9cXG5rZXJuZWwvYnBmL2FyZW5hLmM6MzkzOlxcdGFwcGx5X3RvX2V4aXN0aW5nX3BhZ2VfcmFuZ2UoXFx1MDAyNmluaXRfbW0sIGJwZl9hcmVuYV9nZXRfa2Vybl92bV9zdGFydChhcmVuYSksXFxua2VybmVsL2JwZi9hcmVuYS5jOjM5NDpcXHRcXHRcXHRcXHQgICAgIFNaXzRHICsgR1VBUkRfU1ogLyAyLCBleGlzdGluZ19wYWdlX2NiLCBhcmVuYSk7XFxua2VybmVsL2JwZi9hcmVuYS5jOjM5NTpcXHRmcmVlX3ZtX2FyZWEoYXJlbmEtXFx1MDAzZWtlcm5fdm0pO1xcbmtlcm5lbC9icGYvYXJlbmEuYzozOTY6XFx0cmFuZ2VfdHJlZV9kZXN0cm95KFxcdTAwMjZhcmVuYS1cXHUwMDNlcnQpO1xcbmtlcm5lbC9icGYvYXJlbmEuYzozOTc6XFx0X19mcmVlX3BhZ2UoYXJlbmEtXFx1MDAzZXNjcmF0Y2hfcGFnZSk7XFxua2VybmVsL2JwZi9hcmVuYS5jOjM5ODpcXHRicGZfbWFwX2FyZWFfZnJlZShhcmVuYSk7XFxua2VybmVsL2JwZi9hcmVuYS5jLTM5OS19XFxua2VybmVsL2JwZi9hcmVuYS5jLTQwMC1cXG5rZXJuZWwvYnBmL2FyZW5hLmM6NDAxOnN0YXRpYyB2b2lkICphcmVuYV9tYXBfbG9va3VwX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxcbmtlcm5lbC9icGYvYXJlbmEuYy00MDIte1xcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTQwNS1cXG5rZXJuZWwvYnBmL2FyZW5hLmM6NDA2OnN0YXRpYyBsb25nIGFyZW5hX21hcF91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksXFxua2VybmVsL2JwZi9hcmVuYS5jLTQwNy1cXHRcXHRcXHRcXHQgIHZvaWQgKnZhbHVlLCB1NjQgZmxhZ3MpXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtNDExLVxcbmtlcm5lbC9icGYvYXJlbmEuYzo0MTI6c3RhdGljIGludCBhcmVuYV9tYXBfY2hlY2tfYnRmKHN0cnVjdCBicGZfbWFwICptYXAsIGNvbnN0IHN0cnVjdCBidGYgKmJ0ZixcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNDEzLVxcdFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKmtleV90eXBlLCBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnZhbHVlX3R5cGUpXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtNDE3LVxcbmtlcm5lbC9icGYvYXJlbmEuYzo0MTg6c3RhdGljIHU2NCBhcmVuYV9tYXBfbWVtX3VzYWdlKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXApXFxua2VybmVsL2JwZi9hcmVuYS5jLTQxOS17XFxua2VybmVsL2JwZi9hcmVuYS5jOjQyMDpcXHRzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfYXJlbmEsIG1hcCk7XFxua2VybmVsL2JwZi9hcmVuYS5jLTQyMS1cXG5rZXJuZWwvYnBmL2FyZW5hLmM6NDIyOlxcdHJldHVybiAodTY0KVJFQURfT05DRShhcmVuYS1cXHUwMDNlbnJfcGFnZXMpIFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQ7XFxua2VybmVsL2JwZi9hcmVuYS5jLTQyMy19XFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmM9NDI1PXN0cnVjdCB2bWFfbGlzdCB7XFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtNDMxLVxcbmtlcm5lbC9icGYvYXJlbmEuYzo0MzI6c3RhdGljIGludCByZW1lbWJlcl92bWEoc3RydWN0IGJwZl9hcmVuYSAqYXJlbmEsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbmtlcm5lbC9icGYvYXJlbmEuYy00MzMte1xcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTQ0Mi1cXHR2bWwtXFx1MDAzZXphcF9nZW4gPSAwO1xcbmtlcm5lbC9icGYvYXJlbmEuYzo0NDM6XFx0bGlzdF9hZGQoXFx1MDAyNnZtbC1cXHUwMDNlaGVhZCwgXFx1MDAyNmFyZW5hLVxcdTAwM2V2bWFfbGlzdCk7XFxua2VybmVsL2JwZi9hcmVuYS5jLTQ0NC1cXHRyZXR1cm4gMDtcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy00NDYtXFxua2VybmVsL2JwZi9hcmVuYS5jOjQ0NzpzdGF0aWMgdm9pZCBhcmVuYV92bV9vcGVuKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbmtlcm5lbC9icGYvYXJlbmEuYy00NDgte1xcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTQ1My1cXG5rZXJuZWwvYnBmL2FyZW5hLmM6NDU0OnN0YXRpYyBpbnQgYXJlbmFfdm1fbWF5X3NwbGl0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpXFxua2VybmVsL2JwZi9hcmVuYS5jLTQ1NS17XFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtNDU4LVxcbmtlcm5lbC9icGYvYXJlbmEuYzo0NTk6c3RhdGljIGludCBhcmVuYV92bV9tcmVtYXAoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxua2VybmVsL2JwZi9hcmVuYS5jLTQ2MC17XFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtNDYzLVxcbmtlcm5lbC9icGYvYXJlbmEuYzo0NjQ6c3RhdGljIHZvaWQgYXJlbmFfdm1fY2xvc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxua2VybmVsL2JwZi9hcmVuYS5jLTQ2NS17XFxua2VybmVsL2JwZi9hcmVuYS5jLTQ2Ni1cXHRzdHJ1Y3QgYnBmX21hcCAqbWFwID0gdm1hLVxcdTAwM2V2bV9maWxlLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxua2VybmVsL2JwZi9hcmVuYS5jOjQ2NzpcXHRzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfYXJlbmEsIG1hcCk7XFxua2VybmVsL2JwZi9hcmVuYS5jLTQ2OC1cXHRzdHJ1Y3Qgdm1hX2xpc3QgKnZtbCA9IHZtYS1cXHUwMDNldm1fcHJpdmF0ZV9kYXRhO1xcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTQ3MS1cXHRcXHRyZXR1cm47XFxua2VybmVsL2JwZi9hcmVuYS5jOjQ3MjpcXHRndWFyZChtdXRleCkoXFx1MDAyNmFyZW5hLVxcdTAwM2Vsb2NrKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNDczLVxcdC8qIHVwZGF0ZSBsaW5rIGxpc3QgdW5kZXIgbG9jayAqL1xcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTQ3OC1cXG5rZXJuZWwvYnBmL2FyZW5hLmM6NDc5OnN0YXRpYyB2bV9mYXVsdF90IGFyZW5hX3ZtX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbmtlcm5lbC9icGYvYXJlbmEuYy00ODAte1xcbmtlcm5lbC9icGYvYXJlbmEuYy00ODEtXFx0c3RydWN0IGJwZl9tYXAgKm1hcCA9IHZtZi1cXHUwMDNldm1hLVxcdTAwM2V2bV9maWxlLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxua2VybmVsL2JwZi9hcmVuYS5jOjQ4MjpcXHRzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfYXJlbmEsIG1hcCk7XFxua2VybmVsL2JwZi9hcmVuYS5jLTQ4My1cXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbmV3X21lbWNnLCAqb2xkX21lbWNnO1xcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTQ4OC1cXG5rZXJuZWwvYnBmL2FyZW5hLmM6NDg5OlxcdGtiYXNlID0gYnBmX2FyZW5hX2dldF9rZXJuX3ZtX3N0YXJ0KGFyZW5hKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNDkwLVxcdGthZGRyID0ga2Jhc2UgKyAodTMyKSh2bWYtXFx1MDAzZWFkZHJlc3MpO1xcbmtlcm5lbC9icGYvYXJlbmEuYy00OTEtXFxua2VybmVsL2JwZi9hcmVuYS5jOjQ5MjpcXHRpZiAocmF3X3Jlc19zcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2YXJlbmEtXFx1MDAzZXNwaW5sb2NrLCBmbGFncykpXFxua2VybmVsL2JwZi9hcmVuYS5jLTQ5My1cXHRcXHQvKlxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTUwMS1cXHRpZiAocGFnZSkge1xcbmtlcm5lbC9icGYvYXJlbmEuYzo1MDI6XFx0XFx0aWYgKHBhZ2UgPT0gYXJlbmEtXFx1MDAzZXNjcmF0Y2hfcGFnZSlcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNTAzLVxcdFxcdFxcdC8qIEJQRiB0cmlnZ2VyZWQgc2NyYXRjaCBoZXJlOyBkb24ndCBsYXp5LWFsbG9jIG92ZXIgaXQgKi9cXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy01MDgtXFxua2VybmVsL2JwZi9hcmVuYS5jOjUwOTpcXHRicGZfbWFwX21lbWNnX2VudGVyKFxcdTAwMjZhcmVuYS1cXHUwMDNlbWFwLCBcXHUwMDI2b2xkX21lbWNnLCBcXHUwMDI2bmV3X21lbWNnKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNTEwLVxcbmtlcm5lbC9icGYvYXJlbmEuYzo1MTE6XFx0aWYgKGFyZW5hLVxcdTAwM2VtYXAubWFwX2ZsYWdzIFxcdTAwMjYgQlBGX0ZfU0VHVl9PTl9GQVVMVClcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNTEyLVxcdFxcdC8qIFVzZXIgc3BhY2UgcmVxdWVzdGVkIHRvIHNlZ2ZhdWx0IHdoZW4gcGFnZSBpcyBub3QgYWxsb2NhdGVkIGJ5IGJwZiBwcm9nICovXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtNTE0LVxcbmtlcm5lbC9icGYvYXJlbmEuYzo1MTU6XFx0cmV0ID0gcmFuZ2VfdHJlZV9jbGVhcihcXHUwMDI2YXJlbmEtXFx1MDAzZXJ0LCB2bWYtXFx1MDAzZXBnb2ZmLCAxKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNTE2LVxcdGlmIChyZXQpXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtNTE4LVxcbmtlcm5lbC9icGYvYXJlbmEuYzo1MTk6XFx0c3RydWN0IGFwcGx5X3JhbmdlX2RhdGEgZGF0YSA9IHsgLmFyZW5hID0gYXJlbmEsIC5wYWdlcyA9IFxcdTAwMjZwYWdlLCAuaSA9IDAgfTtcXG5rZXJuZWwvYnBmL2FyZW5hLmM6NTIwOlxcdC8qIEFjY291bnQgaW50byBtZW1jZyBvZiB0aGUgcHJvY2VzcyB0aGF0IGNyZWF0ZWQgYnBmX2FyZW5hICovXFxua2VybmVsL2JwZi9hcmVuYS5jLTUyMS1cXHRyZXQgPSBicGZfbWFwX2FsbG9jX3BhZ2VzKG1hcCwgTlVNQV9OT19OT0RFLCAxLCBcXHUwMDI2cGFnZSk7XFxua2VybmVsL2JwZi9hcmVuYS5jLTUyMi1cXHRpZiAocmV0KSB7XFxua2VybmVsL2JwZi9hcmVuYS5jOjUyMzpcXHRcXHRyYW5nZV90cmVlX3NldChcXHUwMDI2YXJlbmEtXFx1MDAzZXJ0LCB2bWYtXFx1MDAzZXBnb2ZmLCAxKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNTI0LVxcdFxcdGdvdG8gb3V0X3NpZ3NlZ3ZfbWVtY2c7XFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtNTI4LVxcdGlmIChyZXQpIHtcXG5rZXJuZWwvYnBmL2FyZW5hLmM6NTI5OlxcdFxcdHJhbmdlX3RyZWVfc2V0KFxcdTAwMjZhcmVuYS1cXHUwMDNlcnQsIHZtZi1cXHUwMDNlcGdvZmYsIDEpO1xcbmtlcm5lbC9icGYvYXJlbmEuYy01MzAtXFx0XFx0ZnJlZV9wYWdlc19ub2xvY2socGFnZSwgMCk7XFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtNTM2LVxcdHBhZ2VfcmVmX2FkZChwYWdlLCAxKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmM6NTM3OlxcdHJhd19yZXNfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2YXJlbmEtXFx1MDAzZXNwaW5sb2NrLCBmbGFncyk7XFxua2VybmVsL2JwZi9hcmVuYS5jLTUzOC1cXHR2bWYtXFx1MDAzZXBhZ2UgPSBwYWdlO1xcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTU0Mi1vdXRfc2lnc2VndjpcXG5rZXJuZWwvYnBmL2FyZW5hLmM6NTQzOlxcdHJhd19yZXNfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2YXJlbmEtXFx1MDAzZXNwaW5sb2NrLCBmbGFncyk7XFxua2VybmVsL2JwZi9hcmVuYS5jLTU0NC1cXHRyZXR1cm4gVk1fRkFVTFRfU0lHU0VHVjtcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy01NDYtXFxua2VybmVsL2JwZi9hcmVuYS5jOjU0NzpzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGFyZW5hX3ZtX29wcyA9IHtcXG5rZXJuZWwvYnBmL2FyZW5hLmM6NTQ4OlxcdC5vcGVuXFx0XFx0PSBhcmVuYV92bV9vcGVuLFxcbmtlcm5lbC9icGYvYXJlbmEuYzo1NDk6XFx0Lm1heV9zcGxpdFxcdD0gYXJlbmFfdm1fbWF5X3NwbGl0LFxcbmtlcm5lbC9icGYvYXJlbmEuYzo1NTA6XFx0Lm1yZW1hcFxcdFxcdD0gYXJlbmFfdm1fbXJlbWFwLFxcbmtlcm5lbC9icGYvYXJlbmEuYzo1NTE6XFx0LmNsb3NlXFx0XFx0PSBhcmVuYV92bV9jbG9zZSxcXG5rZXJuZWwvYnBmL2FyZW5hLmM6NTUyOlxcdC5mYXVsdCAgICAgICAgICA9IGFyZW5hX3ZtX2ZhdWx0LFxcbmtlcm5lbC9icGYvYXJlbmEuYy01NTMtfTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNTU0LVxcbmtlcm5lbC9icGYvYXJlbmEuYzo1NTU6c3RhdGljIHVuc2lnbmVkIGxvbmcgYXJlbmFfZ2V0X3VubWFwcGVkX2FyZWEoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNTU2LVxcdFxcdFxcdFxcdFxcdCAgICAgdW5zaWduZWQgbG9uZyBsZW4sIHVuc2lnbmVkIGxvbmcgcGdvZmYsXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtNTU5LVxcdHN0cnVjdCBicGZfbWFwICptYXAgPSBmaWxwLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxua2VybmVsL2JwZi9hcmVuYS5jOjU2MDpcXHRzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfYXJlbmEsIG1hcCk7XFxua2VybmVsL2JwZi9hcmVuYS5jLTU2MS1cXHRsb25nIHJldDtcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy01NjctXFxua2VybmVsL2JwZi9hcmVuYS5jOjU2ODpcXHQvKiBpZiB1c2VyX3ZtX3N0YXJ0IHdhcyBzcGVjaWZpZWQgYXQgYXJlbmEgY3JlYXRpb24gdGltZSAqL1xcbmtlcm5lbC9icGYvYXJlbmEuYzo1Njk6XFx0aWYgKGFyZW5hLVxcdTAwM2V1c2VyX3ZtX3N0YXJ0KSB7XFxua2VybmVsL2JwZi9hcmVuYS5jOjU3MDpcXHRcXHRpZiAobGVuIFxcdTAwM2UgYXJlbmEtXFx1MDAzZXVzZXJfdm1fZW5kIC0gYXJlbmEtXFx1MDAzZXVzZXJfdm1fc3RhcnQpXFxua2VybmVsL2JwZi9hcmVuYS5jLTU3MS1cXHRcXHRcXHRyZXR1cm4gLUUyQklHO1xcbmtlcm5lbC9icGYvYXJlbmEuYzo1NzI6XFx0XFx0aWYgKGxlbiAhPSBhcmVuYS1cXHUwMDNldXNlcl92bV9lbmQgLSBhcmVuYS1cXHUwMDNldXNlcl92bV9zdGFydClcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNTczLVxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbmtlcm5lbC9icGYvYXJlbmEuYzo1NzQ6XFx0XFx0aWYgKGFkZHIgIT0gYXJlbmEtXFx1MDAzZXVzZXJfdm1fc3RhcnQpXFxua2VybmVsL2JwZi9hcmVuYS5jLTU3NS1cXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy01ODItXFx0XFx0cmV0dXJuIHJldDtcXG5rZXJuZWwvYnBmL2FyZW5hLmM6NTgzOlxcdGlmIChXQVJOX09OX09OQ0UoYXJlbmEtXFx1MDAzZXVzZXJfdm1fc3RhcnQpKVxcbmtlcm5lbC9icGYvYXJlbmEuYy01ODQtXFx0XFx0LyogY2hlY2tzIGF0IG1hcCBjcmVhdGlvbiB0aW1lIHNob3VsZCBwcmV2ZW50IHRoaXMgKi9cXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy01ODgtXFxua2VybmVsL2JwZi9hcmVuYS5jOjU4OTpzdGF0aWMgaW50IGFyZW5hX21hcF9tbWFwKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbmtlcm5lbC9icGYvYXJlbmEuYy01OTAte1xcbmtlcm5lbC9icGYvYXJlbmEuYzo1OTE6XFx0c3RydWN0IGJwZl9hcmVuYSAqYXJlbmEgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX2FyZW5hLCBtYXApO1xcbmtlcm5lbC9icGYvYXJlbmEuYy01OTItXFxua2VybmVsL2JwZi9hcmVuYS5jOjU5MzpcXHRndWFyZChtdXRleCkoXFx1MDAyNmFyZW5hLVxcdTAwM2Vsb2NrKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmM6NTk0OlxcdGlmIChhcmVuYS1cXHUwMDNldXNlcl92bV9zdGFydCBcXHUwMDI2XFx1MDAyNiBhcmVuYS1cXHUwMDNldXNlcl92bV9zdGFydCAhPSB2bWEtXFx1MDAzZXZtX3N0YXJ0KVxcbmtlcm5lbC9icGYvYXJlbmEuYy01OTUtXFx0XFx0LypcXG5rZXJuZWwvYnBmL2FyZW5hLmM6NTk2OlxcdFxcdCAqIElmIG1hcF9leHRyYSB3YXMgbm90IHNwZWNpZmllZCBhdCBhcmVuYSBjcmVhdGlvbiB0aW1lIHRoZW5cXG5rZXJuZWwvYnBmL2FyZW5hLmMtNTk3LVxcdFxcdCAqIDFzdCB1c2VyIHByb2Nlc3MgY2FuIGRvIG1tYXAoTlVMTCwgLi4uKSB0byBwaWNrIHVzZXJfdm1fc3RhcnRcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy02MDQtXFxua2VybmVsL2JwZi9hcmVuYS5jOjYwNTpcXHRpZiAoYXJlbmEtXFx1MDAzZXVzZXJfdm1fZW5kIFxcdTAwMjZcXHUwMDI2IGFyZW5hLVxcdTAwM2V1c2VyX3ZtX2VuZCAhPSB2bWEtXFx1MDAzZXZtX2VuZClcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNjA2LVxcdFxcdC8qIGFsbCB1c2VyIHByb2Nlc3NlcyBtdXN0IGhhdmUgdGhlIHNhbWUgc2l6ZSBvZiBtbWFwLWVkIHJlZ2lvbiAqL1xcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTYxMi1cXG5rZXJuZWwvYnBmL2FyZW5hLmM6NjEzOlxcdGlmIChyZW1lbWJlcl92bWEoYXJlbmEsIHZtYSkpXFxua2VybmVsL2JwZi9hcmVuYS5jLTYxNC1cXHRcXHRyZXR1cm4gLUVOT01FTTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNjE1LVxcbmtlcm5lbC9icGYvYXJlbmEuYzo2MTY6XFx0YXJlbmEtXFx1MDAzZXVzZXJfdm1fc3RhcnQgPSB2bWEtXFx1MDAzZXZtX3N0YXJ0O1xcbmtlcm5lbC9icGYvYXJlbmEuYzo2MTc6XFx0YXJlbmEtXFx1MDAzZXVzZXJfdm1fZW5kID0gdm1hLVxcdTAwM2V2bV9lbmQ7XFxua2VybmVsL2JwZi9hcmVuYS5jLTYxOC1cXHQvKlxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTYyMC1cXHQgKiBjbGVhcnMgVk1fTUFZRVhFQy4gU2V0IFZNX0RPTlRFWFBBTkQgdG8gYXZvaWQgcG90ZW50aWFsIGNoYW5nZVxcbmtlcm5lbC9icGYvYXJlbmEuYzo2MjE6XFx0ICogb2YgdXNlcl92bV9zdGFydC4gU2V0IFZNX0RPTlRDT1BZIHRvIHByZXZlbnQgYXJlbmEgVk1BIGZyb21cXG5rZXJuZWwvYnBmL2FyZW5hLmMtNjIyLVxcdCAqIGJlaW5nIGNvcGllZCBpbnRvIHRoZSBjaGlsZCBwcm9jZXNzIG9uIGZvcmsuXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtNjI0LVxcdHZtX2ZsYWdzX3NldCh2bWEsIFZNX0RPTlRFWFBBTkQgfCBWTV9ET05UQ09QWSk7XFxua2VybmVsL2JwZi9hcmVuYS5jOjYyNTpcXHR2bWEtXFx1MDAzZXZtX29wcyA9IFxcdTAwMjZhcmVuYV92bV9vcHM7XFxua2VybmVsL2JwZi9hcmVuYS5jLTYyNi1cXHRyZXR1cm4gMDtcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy02MjgtXFxua2VybmVsL2JwZi9hcmVuYS5jOjYyOTpzdGF0aWMgaW50IGFyZW5hX21hcF9kaXJlY3RfdmFsdWVfYWRkcihjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwLCB1NjQgKmltbSwgdTMyIG9mZilcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNjMwLXtcXG5rZXJuZWwvYnBmL2FyZW5hLmM6NjMxOlxcdHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9hcmVuYSwgbWFwKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNjMyLVxcbmtlcm5lbC9icGYvYXJlbmEuYzo2MzM6XFx0aWYgKCh1NjQpb2ZmIFxcdTAwM2U9IGFyZW5hLVxcdTAwM2V1c2VyX3ZtX2VuZCAtIGFyZW5hLVxcdTAwM2V1c2VyX3ZtX3N0YXJ0KVxcbmtlcm5lbC9icGYvYXJlbmEuYy02MzQtXFx0XFx0cmV0dXJuIC1FUkFOR0U7XFxua2VybmVsL2JwZi9hcmVuYS5jOjYzNTpcXHQqaW1tID0gKHVuc2lnbmVkIGxvbmcpYXJlbmEtXFx1MDAzZXVzZXJfdm1fc3RhcnQ7XFxua2VybmVsL2JwZi9hcmVuYS5jLTYzNi1cXHRyZXR1cm4gMDtcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy02MzgtXFxua2VybmVsL2JwZi9hcmVuYS5jOjYzOTpCVEZfSURfTElTVF9TSU5HTEUoYnBmX2FyZW5hX21hcF9idGZfaWRzLCBzdHJ1Y3QsIGJwZl9hcmVuYSlcXG5rZXJuZWwvYnBmL2FyZW5hLmM6NjQwOmNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBhcmVuYV9tYXBfb3BzID0ge1xcbmtlcm5lbC9icGYvYXJlbmEuYy02NDEtXFx0Lm1hcF9tZXRhX2VxdWFsID0gYnBmX21hcF9tZXRhX2VxdWFsLFxcbmtlcm5lbC9icGYvYXJlbmEuYzo2NDI6XFx0Lm1hcF9hbGxvYyA9IGFyZW5hX21hcF9hbGxvYyxcXG5rZXJuZWwvYnBmL2FyZW5hLmM6NjQzOlxcdC5tYXBfZnJlZSA9IGFyZW5hX21hcF9mcmVlLFxcbmtlcm5lbC9icGYvYXJlbmEuYzo2NDQ6XFx0Lm1hcF9kaXJlY3RfdmFsdWVfYWRkciA9IGFyZW5hX21hcF9kaXJlY3RfdmFsdWVfYWRkcixcXG5rZXJuZWwvYnBmL2FyZW5hLmM6NjQ1OlxcdC5tYXBfbW1hcCA9IGFyZW5hX21hcF9tbWFwLFxcbmtlcm5lbC9icGYvYXJlbmEuYzo2NDY6XFx0Lm1hcF9nZXRfdW5tYXBwZWRfYXJlYSA9IGFyZW5hX2dldF91bm1hcHBlZF9hcmVhLFxcbmtlcm5lbC9icGYvYXJlbmEuYzo2NDc6XFx0Lm1hcF9nZXRfbmV4dF9rZXkgPSBhcmVuYV9tYXBfZ2V0X25leHRfa2V5LFxcbmtlcm5lbC9icGYvYXJlbmEuYzo2NDg6XFx0Lm1hcF9wdXNoX2VsZW0gPSBhcmVuYV9tYXBfcHVzaF9lbGVtLFxcbmtlcm5lbC9icGYvYXJlbmEuYzo2NDk6XFx0Lm1hcF9wZWVrX2VsZW0gPSBhcmVuYV9tYXBfcGVla19lbGVtLFxcbmtlcm5lbC9icGYvYXJlbmEuYzo2NTA6XFx0Lm1hcF9wb3BfZWxlbSA9IGFyZW5hX21hcF9wb3BfZWxlbSxcXG5rZXJuZWwvYnBmL2FyZW5hLmM6NjUxOlxcdC5tYXBfbG9va3VwX2VsZW0gPSBhcmVuYV9tYXBfbG9va3VwX2VsZW0sXFxua2VybmVsL2JwZi9hcmVuYS5jOjY1MjpcXHQubWFwX3VwZGF0ZV9lbGVtID0gYXJlbmFfbWFwX3VwZGF0ZV9lbGVtLFxcbmtlcm5lbC9icGYvYXJlbmEuYzo2NTM6XFx0Lm1hcF9kZWxldGVfZWxlbSA9IGFyZW5hX21hcF9kZWxldGVfZWxlbSxcXG5rZXJuZWwvYnBmL2FyZW5hLmM6NjU0OlxcdC5tYXBfY2hlY2tfYnRmID0gYXJlbmFfbWFwX2NoZWNrX2J0ZixcXG5rZXJuZWwvYnBmL2FyZW5hLmM6NjU1OlxcdC5tYXBfbWVtX3VzYWdlID0gYXJlbmFfbWFwX21lbV91c2FnZSxcXG5rZXJuZWwvYnBmL2FyZW5hLmM6NjU2OlxcdC5tYXBfYnRmX2lkID0gXFx1MDAyNmJwZl9hcmVuYV9tYXBfYnRmX2lkc1swXSxcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNjU3LX07XFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmM9NjU5PXN0YXRpYyB1NjQgY2xlYXJfbG8zMih1NjQgdmFsKVxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTY2Ny0gKi9cXG5rZXJuZWwvYnBmL2FyZW5hLmM6NjY4OnN0YXRpYyBsb25nIGFyZW5hX2FsbG9jX3BhZ2VzKHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hLCBsb25nIHVhZGRyLCBsb25nIHBhZ2VfY250LCBpbnQgbm9kZV9pZCxcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNjY5LVxcdFxcdFxcdCAgICAgIGJvb2wgc2xlZXBhYmxlKVxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTY3MS1cXHQvKiB1c2VyX3ZtX2VuZC9zdGFydCBhcmUgZml4ZWQgYmVmb3JlIGJwZiBwcm9nIHJ1bnMgKi9cXG5rZXJuZWwvYnBmL2FyZW5hLmM6NjcyOlxcdGxvbmcgcGFnZV9jbnRfbWF4ID0gKGFyZW5hLVxcdTAwM2V1c2VyX3ZtX2VuZCAtIGFyZW5hLVxcdTAwM2V1c2VyX3ZtX3N0YXJ0KSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUO1xcbmtlcm5lbC9icGYvYXJlbmEuYzo2NzM6XFx0dTY0IGtlcm5fdm1fc3RhcnQgPSBicGZfYXJlbmFfZ2V0X2tlcm5fdm1fc3RhcnQoYXJlbmEpO1xcbmtlcm5lbC9icGYvYXJlbmEuYy02NzQtXFx0c3RydWN0IG1lbV9jZ3JvdXAgKm5ld19tZW1jZywgKm9sZF9tZW1jZztcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy02OTMtXFx0XFx0XFx0cmV0dXJuIDA7XFxua2VybmVsL2JwZi9hcmVuYS5jOjY5NDpcXHRcXHRwZ29mZiA9IGNvbXB1dGVfcGdvZmYoYXJlbmEsIHVhZGRyKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNjk1LVxcdFxcdGlmIChwZ29mZiBcXHUwMDNlIHBhZ2VfY250X21heCAtIHBhZ2VfY250KVxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTY5OS1cXG5rZXJuZWwvYnBmL2FyZW5hLmM6NzAwOlxcdGJwZl9tYXBfbWVtY2dfZW50ZXIoXFx1MDAyNmFyZW5hLVxcdTAwM2VtYXAsIFxcdTAwMjZvbGRfbWVtY2csIFxcdTAwMjZuZXdfbWVtY2cpO1xcbmtlcm5lbC9icGYvYXJlbmEuYy03MDEtXFx0LyogQ2FwIGFsbG9jYXRpb24gc2l6ZSB0byBLTUFMTE9DX01BWF9DQUNIRV9TSVpFIHNvIGttYWxsb2Nfbm9sb2NrKCkgY2FuIHN1Y2NlZWQuICovXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzA3LVxcdH1cXG5rZXJuZWwvYnBmL2FyZW5hLmM6NzA4OlxcdGRhdGEuYXJlbmEgPSBhcmVuYTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzA5LVxcdGRhdGEucGFnZXMgPSBwYWdlcztcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzEwLVxcbmtlcm5lbC9icGYvYXJlbmEuYzo3MTE6XFx0aWYgKHJhd19yZXNfc3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNmFyZW5hLVxcdTAwM2VzcGlubG9jaywgZmxhZ3MpKVxcbmtlcm5lbC9icGYvYXJlbmEuYy03MTItXFx0XFx0Z290byBvdXRfZnJlZV9wYWdlcztcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy03MTQtXFx0aWYgKHVhZGRyKSB7XFxua2VybmVsL2JwZi9hcmVuYS5jOjcxNTpcXHRcXHRyZXQgPSBpc19yYW5nZV90cmVlX3NldChcXHUwMDI2YXJlbmEtXFx1MDAzZXJ0LCBwZ29mZiwgcGFnZV9jbnQpO1xcbmtlcm5lbC9icGYvYXJlbmEuYy03MTYtXFx0XFx0aWYgKHJldClcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzE3LVxcdFxcdFxcdGdvdG8gb3V0X3VubG9ja19mcmVlX3BhZ2VzO1xcbmtlcm5lbC9icGYvYXJlbmEuYzo3MTg6XFx0XFx0cmV0ID0gcmFuZ2VfdHJlZV9jbGVhcihcXHUwMDI2YXJlbmEtXFx1MDAzZXJ0LCBwZ29mZiwgcGFnZV9jbnQpO1xcbmtlcm5lbC9icGYvYXJlbmEuYy03MTktXFx0fSBlbHNlIHtcXG5rZXJuZWwvYnBmL2FyZW5hLmM6NzIwOlxcdFxcdHJldCA9IHBnb2ZmID0gcmFuZ2VfdHJlZV9maW5kKFxcdTAwMjZhcmVuYS1cXHUwMDNlcnQsIHBhZ2VfY250KTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzIxLVxcdFxcdGlmIChwZ29mZiBcXHUwMDNlPSAwKVxcbmtlcm5lbC9icGYvYXJlbmEuYzo3MjI6XFx0XFx0XFx0cmV0ID0gcmFuZ2VfdHJlZV9jbGVhcihcXHUwMDI2YXJlbmEtXFx1MDAzZXJ0LCBwZ29mZiwgcGFnZV9jbnQpO1xcbmtlcm5lbC9icGYvYXJlbmEuYy03MjMtXFx0fVxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTcyNy1cXHRyZW1haW5pbmcgPSBwYWdlX2NudDtcXG5rZXJuZWwvYnBmL2FyZW5hLmM6NzI4OlxcdHVhZGRyMzIgPSAodTMyKShhcmVuYS1cXHUwMDNldXNlcl92bV9zdGFydCArIHBnb2ZmICogUEFHRV9TSVpFKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzI5LVxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTczNS1cXG5rZXJuZWwvYnBmL2FyZW5hLmM6NzM2OlxcdFxcdHJldCA9IGJwZl9tYXBfYWxsb2NfcGFnZXMoXFx1MDAyNmFyZW5hLVxcdTAwM2VtYXAsIG5vZGVfaWQsIHRoaXNfYmF0Y2gsIHBhZ2VzKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzM3LVxcdFxcdGlmIChyZXQpXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzYzLVxcdGZsdXNoX3ZtYXBfY2FjaGUoa2Vybl92bV9zdGFydCArIHVhZGRyMzIsIG1hcHBlZCBcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZUKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmM6NzY0OlxcdHJhd19yZXNfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2YXJlbmEtXFx1MDAzZXNwaW5sb2NrLCBmbGFncyk7XFxua2VybmVsL2JwZi9hcmVuYS5jLTc2NS1cXHRrZnJlZV9ub2xvY2socGFnZXMpO1xcbmtlcm5lbC9icGYvYXJlbmEuYy03NjYtXFx0YnBmX21hcF9tZW1jZ19leGl0KG9sZF9tZW1jZywgbmV3X21lbWNnKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmM6NzY3OlxcdHJldHVybiBjbGVhcl9sbzMyKGFyZW5hLVxcdTAwM2V1c2VyX3ZtX3N0YXJ0KSArIHVhZGRyMzI7XFxua2VybmVsL2JwZi9hcmVuYS5jLTc2OC1vdXQ6XFxua2VybmVsL2JwZi9hcmVuYS5jOjc2OTpcXHRyYW5nZV90cmVlX3NldChcXHUwMDI2YXJlbmEtXFx1MDAzZXJ0LCBwZ29mZiArIG1hcHBlZCwgcGFnZV9jbnQgLSBtYXBwZWQpO1xcbmtlcm5lbC9icGYvYXJlbmEuYzo3NzA6XFx0cmF3X3Jlc19zcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZhcmVuYS1cXHUwMDNlc3BpbmxvY2ssIGZsYWdzKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzcxLVxcdGlmIChtYXBwZWQpIHtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzcyLVxcdFxcdGZsdXNoX3ZtYXBfY2FjaGUoa2Vybl92bV9zdGFydCArIHVhZGRyMzIsIG1hcHBlZCBcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZUKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmM6NzczOlxcdFxcdGFyZW5hX2ZyZWVfcGFnZXMoYXJlbmEsIHVhZGRyMzIsIG1hcHBlZCwgc2xlZXBhYmxlKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzc0LVxcdH1cXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy03NzYtb3V0X3VubG9ja19mcmVlX3BhZ2VzOlxcbmtlcm5lbC9icGYvYXJlbmEuYzo3Nzc6XFx0cmF3X3Jlc19zcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZhcmVuYS1cXHUwMDNlc3BpbmxvY2ssIGZsYWdzKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzc4LW91dF9mcmVlX3BhZ2VzOlxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTc4OC0gKi9cXG5rZXJuZWwvYnBmL2FyZW5hLmM6Nzg5OnN0YXRpYyB2b2lkIHphcF9wYWdlcyhzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSwgbG9uZyB1YWRkciwgbG9uZyBwYWdlX2NudClcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzkwLXtcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy03OTgtXFx0LypcXG5rZXJuZWwvYnBmL2FyZW5hLmM6Nzk5OlxcdCAqIFRha2luZyBtbWFwX3JlYWRfbG9jaygpIHVuZGVyIGFyZW5hLVxcdTAwM2Vsb2NrIHdvdWxkIGRlYWRsb2NrIGFnYWluc3RcXG5rZXJuZWwvYnBmL2FyZW5hLmM6ODAwOlxcdCAqIGFyZW5hX3ZtX2Nsb3NlKCksIHdoaWNoIHJ1bnMgd2l0aCBtbWFwX3dyaXRlX2xvY2sgaGVsZCBhbmQgdGhlblxcbmtlcm5lbC9icGYvYXJlbmEuYzo4MDE6XFx0ICogYWNxdWlyZXMgYXJlbmEtXFx1MDAzZWxvY2suIERyb3AgYXJlbmEtXFx1MDAzZWxvY2sgZm9yIG1tYXBfcmVhZF9sb2NrKCkuXFxua2VybmVsL2JwZi9hcmVuYS5jLTgwMi1cXHQgKlxcbi0tXFxuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDExOjE4OjU3LjQ0MDk1NzExN1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NzAwNTU3MDI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBCUEYgVmVyaWZpZXIgQ2hhbmdlKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBjaGFuZ2UgYW5kIEkndmUgYm9pbGVkIGl0IGRvd24gdG8gYSBmZXcga2V5IHBvaW50cy4gRmlyc3QsIHRoZSBjb3JlIHJlcXVpcmVtZW50IGlzIGBDT05GSUdfQlBGX1NZU0NBTExgIOKAkyB0aGF0J3MgdGhlIG1haW4gZHJpdmVyLiBUaGUgYGFyZW5hYCBmdW5jdGlvbmFsaXR5IEknbSBpbnRlcmVzdGVkIGluLCBzcGVjaWZpY2FsbHkgYGFyZW5hLm9gLCBpcyBvbmx5IGNvbXBpbGVkIGlmIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzICphbHNvKiBlbmFibGVkIGFsb25nIHdpdGggdGhlIHN0YW5kYXJkIGBDT05GSUdfTU1VYCBhbmQgYENPTkZJR182NEJJVGAgY29uZmlncywgYnV0IHRob3NlIGFyZSBnZW5lcmFsbHkgYSBnaXZlbiBvbiB4ODZfNjQsIHdoaWNoIEknbSB3b3JraW5nIHdpdGguIFNvLCBlc3NlbnRpYWxseSwgYEJQRl9TWVNDQUxMYCBpcyB0aGUgY3J1Y2lhbCBjb25maWd1cmF0aW9uIG9wdGlvbi5cblxuVGhlIHRlc3Qgc2V0dXAgdXNlcyBib3RoIGBhcmVuYWAgYW5kIGBzdGFja2AgYXRvbWljcywgc28gdGhhdCB0ZWxscyBtZSB0aGUgY2hhbmdlIHdpbGwgaGF2ZSBpbXBsaWNhdGlvbnMgaW4gdGhlc2UgYXJlYXMuIFRoZSB0ZXN0IGZpbGUgaXMgYHZlcmlmaWVyX2FyZW5hLmNgLCBidXQgdGhlIHJlYWwgZm9jdXMgbmVlZHMgdG8gYmUgb24gdGhlIHZlcmlmaWVyIGl0c2VsZi5cblxuTm93LCB0byBzb2xpZGlmeSBhIGZvY2FsIHBvaW50LCBJIGRvdWJsZS1jaGVja2VkIHRoZSByZWFjaGFiaWxpdHkgb2YgYGNoZWNrX2F0b21pY19ybXdgLiBJdCdzIGRlZmluaXRlbHkgcmVhY2hhYmxlOyBpdCdzIGNhbGxlZCBieSBgY2hlY2tfYXRvbWljYCwgd2hpY2ggaW4gdHVybiBpcyBjYWxsZWQgYnkgYGRvX2NoZWNrX2luc25gLCB3aGljaCBpcyBjYWxsZWQgYnkgYGRvX2NoZWNrYCwgd2hpY2ggaXMgZmluYWxseSBjYWxsZWQgYnkgYGJwZl9jaGVja2AuIEFuZCB0aGF0J3MgZXhhY3RseSB3aGF0IEkgbmVlZC4gR2l2ZW4gdGhlIGluc3RydWN0aW9ucyB0byBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgZW50cnlwb2ludCBmdW5jdGlvbnMsIGBicGZfY2hlY2tgIGlzIHRoZSAqcGVyZmVjdCogc3ltYm9sIHRvIGZvY3VzIG9uLiBJdCdzIHRoZSBtYWluIHZlcmlmaWVyIGVudHJ5IHBvaW50LlxuXG5Mb29raW5nIGF0IHRoZSBjb2RlIGNoYW5nZSBpdHNlbGY6XG5cbmBgYGNcbi1cdGlmIChpc19hcmVuYV9yZWcoZW52LCBpbnNuLVx1MDAzZWRzdF9yZWcpKSB7XG4tXHRcdGVyciA9IHNhdmVfYXV4X3B0cl90eXBlKGVudiwgUFRSX1RPX0FSRU5BLCBmYWxzZSk7XG4tXHRcdGlmIChlcnIpXG4tXHRcdFx0cmV0dXJuIGVycjtcbi1cdH1cbitcdGVyciA9IHNhdmVfYXV4X3B0cl90eXBlKGVudiwgZHN0X3JlZy1cdTAwM2V0eXBlLCBmYWxzZSk7XG4rXHRpZiAoZXJyKVxuK1x0XHRyZXR1cm4gZXJyO1xuYGBgXG5cblRoaXMgaXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlICp3aXRoaW4qIHRoZSB2ZXJpZmllciBsb2dpYy4gSXQgbG9va3MgbGlrZSB0aGUgdHlwZSBpbmZvcm1hdGlvbiBpcyBiZWluZyBoYW5kbGVkIGRpZmZlcmVudGx5LiBJdCdzIGNsZWFybHkgd29ydGggZnV6emluZyB0byB1bmNvdmVyIGFueSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIGludHJvZHVjZWQgYnkgdGhpcy5cblxuU28sIHRoZSBnYW1lIHBsYW4gaXM6XG5cbiogICAqKkZvY3VzIHN5bWJvbDoqKiBgYnBmX2NoZWNrYFxuKiAgICoqRW5hYmxlIGNvbmZpZzoqKiBgQlBGX1NZU0NBTExgIChzaW5jZSBpdCBhcHBlYXJzIHRvIGJlIHRoZSBtb3N0IHJlbGV2YW50KVxuXG5XaXRoIHRoYXQsIEknbGwgYmUgdXNpbmcgYHNldC1yZXN1bHRzYCB0byBwcm9wZXJseSBkZWZpbmUgdGhpcyBmdXp6aW5nIGFwcHJvYWNoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzU2MSwiT3V0cHV0VG9rZW5zIjoxNDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMTE6MTk6MDYuMTQxNTE3MDM2WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzY3MDg4NjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2NoZWNrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllcidzIGhhbmRsaW5nIG9mIGF0b21pYyByZWFkLW1vZGlmeS13cml0ZSAoUk1XKSBpbnN0cnVjdGlvbnMgYnkgc2F2aW5nIHRoZSBhdXhpbGlhcnkgcG9pbnRlciB0eXBlIGZvciBhbGwgZGVzdGluYXRpb24gcmVnaXN0ZXJzLCBub3QganVzdCBhcmVuYSByZWdpc3RlcnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBrZXJuZWwgQlBGIHZlcmlmaWVyIGxvZ2ljIHRoYXQgYWZmZWN0cyBob3cgYXRvbWljIG9wZXJhdGlvbnMgYXJlIHZlcmlmaWVkIGFuZCBoYW5kbGVkLCBwYXJ0aWN1bGFybHkgd2hlbiBtaXhpbmcgZGlmZmVyZW50IHBvaW50ZXIgdHlwZXMgKGxpa2UgYXJlbmEgYW5kIHN0YWNrIHBvaW50ZXJzKSBpbiB0aGUgc2FtZSBpbnN0cnVjdGlvbi4gVGhpcyBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSB0aGUgYnBmKCkgc3lzY2FsbCBhbmQgaXMgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9jaGVja1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIncyBoYW5kbGluZyBvZiBhdG9taWMgcmVhZC1tb2RpZnktd3JpdGUgKFJNVykgaW5zdHJ1Y3Rpb25zIGJ5IHNhdmluZyB0aGUgYXV4aWxpYXJ5IHBvaW50ZXIgdHlwZSBmb3IgYWxsIGRlc3RpbmF0aW9uIHJlZ2lzdGVycywgbm90IGp1c3QgYXJlbmEgcmVnaXN0ZXJzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUga2VybmVsIEJQRiB2ZXJpZmllciBsb2dpYyB0aGF0IGFmZmVjdHMgaG93IGF0b21pYyBvcGVyYXRpb25zIGFyZSB2ZXJpZmllZCBhbmQgaGFuZGxlZCwgcGFydGljdWxhcmx5IHdoZW4gbWl4aW5nIGRpZmZlcmVudCBwb2ludGVyIHR5cGVzIChsaWtlIGFyZW5hIGFuZCBzdGFjayBwb2ludGVycykgaW4gdGhlIHNhbWUgaW5zdHJ1Y3Rpb24uIFRoaXMgaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgdGhlIGJwZigpIHN5c2NhbGwgYW5kIGlzIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDExOjE5OjA2LjIxODIzMzEwN1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ1NzAwMjA5MzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQxMToxOTowNi4yMTg3MjczNzhaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MjQ1Njk1MjM1MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgQlBGIHZlcmlmaWVyIGJ1ZyB3aGVyZSBgc2F2ZV9hdXhfcHRyX3R5cGUoKWAgd2FzIG5vdCBjYWxsZWQgZm9yIGFsbCBwb2ludGVyIHR5cGVzIGR1cmluZyBhdG9taWMgcmVhZC1tb2RpZnktd3JpdGUgKFJNVykgaW5zdHJ1Y3Rpb24gdmVyaWZpY2F0aW9uLiBUaGlzIG9taXNzaW9uIGFsbG93ZWQgYSBtYWxpY2lvdXMgQlBGIHByb2dyYW0gdG8gdXNlIHRoZSBzYW1lIGF0b21pYyBpbnN0cnVjdGlvbiB3aXRoIGRpZmZlcmVudCBwb2ludGVyIHR5cGVzIChlLmcuLCBtaXhpbmcgYFBUUl9UT19BUkVOQWAgYW5kIGBQVFJfVE9fU1RBQ0tgIGluIGRpZmZlcmVudCBicmFuY2hlcykuIFN1Y2ggdmVyaWZpZXIgYnlwYXNzZXMgdHlwaWNhbGx5IGxlYWQgdG8gb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIG9yIG1lbW9yeSBjb3JydXB0aW9uIGR1ZSB0byBpbmNvcnJlY3QgSklUIGNvbXBpbGF0aW9uIG9yIG1pc3NpbmcgcnVudGltZSBjaGVja3MuIFRoZXNlIHR5cGVzIG9mIG1lbW9yeSBzYWZldHkgdmlvbGF0aW9ucyBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGMzNzAxYTgxYWE1NWU4Zjk4MjQ4MDgxMWY2OTU0ZGZiMjlhZjAxMDFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEF1ZyAxNiAxMToxODoyMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuaW5kZXggZDE3ZjE0YjM1Yjc5Zi4uOTM0NjNjYWY1YzlhZCAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuKysrIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5AQCAtNjczOSwxMSArNjczOSw5IEBAIHN0YXRpYyBpbnQgY2hlY2tfYXRvbWljX3JtdyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbiBcbi1cdGlmIChpc19hcmVuYV9yZWcoZW52LCBpbnNuLVx1MDAzZWRzdF9yZWcpKSB7XG4tXHRcdGVyciA9IHNhdmVfYXV4X3B0cl90eXBlKGVudiwgUFRSX1RPX0FSRU5BLCBmYWxzZSk7XG4tXHRcdGlmIChlcnIpXG4tXHRcdFx0cmV0dXJuIGVycjtcbi1cdH1cbitcdGVyciA9IHNhdmVfYXV4X3B0cl90eXBlKGVudiwgZHN0X3JlZy1cdTAwM2V0eXBlLCBmYWxzZSk7XG4rXHRpZiAoZXJyKVxuK1x0XHRyZXR1cm4gZXJyO1xuIFx0LyogQ2hlY2sgd2hldGhlciB3ZSBjYW4gd3JpdGUgaW50byB0aGUgc2FtZSBtZW1vcnkuICovXG4gXHRlcnIgPSBjaGVja19tZW1fYWNjZXNzKGVudiwgZW52LVx1MDAzZWluc25faWR4LCBkc3RfcmVnLCBhcmdub19mcm9tX3JlZyhpbnNuLVx1MDAzZWRzdF9yZWcpLCBpbnNuLVx1MDAzZW9mZixcbiBcdFx0XHQgICAgICAgQlBGX1NJWkUoaW5zbi1cdTAwM2Vjb2RlKSwgQlBGX1dSSVRFLCAtMSwgdHJ1ZSwgZmFsc2UpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmNcbmluZGV4IGIyNDFiYmNmNTRhOGEuLmIyMmJhYjMzMzAxYWIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmNcbkBAIC02MzcsNiArNjM3LDQ1IEBAIGludCBub25fYXJlbmFfcHRyX2FkZF90b19hcmVuYV9wdHIodm9pZCAqY3R4KVxuIFxuICNlbmRpZlxuIFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2luc24gYWRkcl9zcGFjZV9jYXN0X2luc24gPSB7XG4rXHQuY29kZSA9IDB4YmYsXG4rXHQuZHN0X3JlZyA9IEJQRl9SRUdfNyxcbitcdC5zcmNfcmVnID0gQlBGX1JFR183LFxuK1x0Lm9mZiA9IDEsXG4rXHQuaW1tID0gMSxcbit9O1xuK1xuK1NFQyhcInNvY2tldFwiKVxuK19fZGVzY3JpcHRpb24oXCJhcmVuYSBhbmQgc3RhY2sgYXRvbWljIGF0IHRoZSBzYW1lIGluc3RydWN0aW9uXCIpXG4rX19mYWlsdXJlIF9fbXNnKFwic2FtZSBpbnNuIGNhbm5vdCBiZSB1c2VkIHdpdGggZGlmZmVyZW50IHBvaW50ZXJzXCIpXG4rX19hcmNoX3g4Nl82NFxuK19fbG9hZF9pZl9KSVRlZCgpXG4rX19uYWtlZCB2b2lkIG1peGVkX2FyZW5hX3N0YWNrX2F0b21pYyh2b2lkKVxuK3tcbitcdGFzbSB2b2xhdGlsZSAoXCJcdFx0XHRcdFx0XFxcbitcdHIxID0gJVthcmVuYV0gbGw7XHRcdFx0XHRcXFxuK1x0cjYgPSByMTA7XHRcdFx0XHRcdFxcXG4rXHRyNiArPSAtODtcdFx0XHRcdFx0XFxcbitcdHI5ID0gMDtcdFx0XHRcdFx0XFxcbitcdCoodTY0ICopKHI2ICsgMCkgPSByOTtcdFx0XHRcXFxuK1x0cjcgPSA4MTkyO1x0XHRcdFx0XHRcXFxuK1x0LjhieXRlICVbYWRkcl9zcGFjZV9jYXN0XTtcdFx0XHRcXFxuK1x0Y2FsbCAlW2JwZl9nZXRfcHJhbmRvbV91MzJdO1x0XHRcdFxcXG4rXHRpZiB3MCAhPSAwIGdvdG8gMWY7XHRcdFx0XHRcXFxuK1x0cjggPSByNjtcdFx0XHRcdFx0XFxcbitcdGdvdG8gMmY7XHRcdFx0XHRcdFxcXG4rMTpcdHI4ID0gcjc7XHRcdFx0XHRcdFxcXG4rMjpcdHI5ID0gMTtcdFx0XHRcdFx0XFxcbitcdGxvY2sgKih1NjQgKikocjggKyAwKSArPSByOTtcdFx0XHRcXFxuK1x0cjAgPSAwO1x0XHRcdFx0XHRcXFxuK1x0ZXhpdDtcdFx0XHRcdFx0XHRcXFxuK1wiXHQ6XG4rXHQ6IF9faW1tX2FkZHIoYXJlbmEpLFxuK1x0ICBfX2ltbV9pbnNuKGFkZHJfc3BhY2VfY2FzdCwgYWRkcl9zcGFjZV9jYXN0X2luc24pLFxuK1x0ICBfX2ltbShicGZfZ2V0X3ByYW5kb21fdTMyKVxuK1x0OiBfX2Nsb2JiZXJfYWxsKTtcbit9XG4rXG4gc3RhdGljIF9fbm9pbmxpbmVcbiB1MzIgX19hcmVuYSAqY2hlY2tfYXJlbmFfYXJnX25vbmdsb2JhbCh1MzIgX19hcmVuYSAqYXJnKVxuIHtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDExOjE5OjA2LjIxODcyODM2N1oiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODkzMzIzNTg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFZlcmlmaWVyIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgdGhlIEJQRiB2ZXJpZmllci4gSXQgc2VlbXMgdGhleSd2ZSBtYWRlIGEgdGFyZ2V0ZWQgbW9kaWZpY2F0aW9uIHdpdGhpbiBga2VybmVsL2JwZi92ZXJpZmllci5jYCwgc3BlY2lmaWNhbGx5IHRvIHRoZSBgY2hlY2tfYXRvbWljX3Jtd2AgZnVuY3Rpb24uIFRoZSBrZXkgY2hhbmdlIGlzIGEgc2ltcGxpZmljYXRpb24gb2YgdGhlIGxvZ2ljIHN1cnJvdW5kaW5nIGBzYXZlX2F1eF9wdHJfdHlwZWAuIEJlZm9yZSwgdGhleSB3ZXJlIG9ubHkgY2FsbGluZyBpdCBpZiB0aGUgZGVzdGluYXRpb24gcmVnaXN0ZXIgKGBpbnNuLVx1MDAzZWRzdF9yZWdgKSB3YXMgaWRlbnRpZmllZCBhcyBwb2ludGluZyB0byBhbiBhcmVuYSAoYGlzX2FyZW5hX3JlZ2ApLiBOb3csIHRoZXkgYXJlIGNhbGxpbmcgYHNhdmVfYXV4X3B0cl90eXBlYCBmb3IgZXZlcnkgcG9pbnRlciB0eXBlLCB1c2luZyB0aGUgcmVnaXN0ZXIncyBkZWNsYXJlZCBgdHlwZWAuIEVzc2VudGlhbGx5LCB0aGV5J3ZlIGV4cGFuZGVkIHRoZSBhcHBsaWNhYmlsaXR5IG9mIHRoaXMgZnVuY3Rpb24uXG5cbkl0IG1ha2VzIHNlbnNlLCBnaXZlbiB0aGUgcG90ZW50aWFsIGZvciBwb2ludGVyIHR5cGVzIHRvIGJlIG1peGVkIHVwLiBUaGUgb2xkIGNoZWNrIHdhcyB0b28gcmVzdHJpY3RpdmUuIFRoZSB1cGRhdGVkIGxvZ2ljIGlzIG1vcmUgcm9idXN0LiBUaGF0IHNlZW1zIGxpa2UgYSByZWFzb25hYmxlIGFkanVzdG1lbnQgdG8gZW5zdXJlIHRoYXQgYHNhdmVfYXV4X3B0cl90eXBlYCBhY2N1cmF0ZWx5IHJlZmxlY3RzIHRoZSBwb2ludGVyIHR5cGUgaW4gYWxsIHJlbGV2YW50IGF0b21pYyByZWFkLW1vZGlmeS13cml0ZSBzY2VuYXJpb3MuXG5cblRvIHZhbGlkYXRlIHRoaXMgY2hhbmdlLCBhIG5ldyB0ZXN0IGNhc2UsIGBtaXhlZF9hcmVuYV9zdGFja19hdG9taWNgLCBoYXMgYmVlbiBpbnRyb2R1Y2VkLiBNeSBndWVzcyBpcyBpdCdzIGRlc2lnbmVkIHRvIHNwZWNpZmljYWxseSBjYXRjaCB0aGUgc2l0dWF0aW9uIHdoZXJlIHNvbWVvbmUgbWlnaHQgYXR0ZW1wdCB0byB1c2UgdGhlIHNhbWUgaW5zdHJ1Y3Rpb24gd2l0aCBhIG1peCBvZiBhcmVuYSBhbmQgc3RhY2sgcG9pbnRlcnMuIEEgZ29vZCB0ZXN0IGNhc2UsIGdpdmVuIHRoZSBwdXJwb3NlIG9mIHRoZSB1cGRhdGUuIFRoZSBwYXRjaCBpcyBwcm9iYWJseSB0cnlpbmcgdG8gY2F0Y2ggc29tZSBvYnNjdXJlIGNhc2Ugd2hlcmUgdGhlIGN1cnJlbnQgdmVyaWZpY2F0aW9uIGxvZ2ljIGlzIGluc3VmZmljaWVudC5cblxuTm93LCBJJ2xsIG5lZWQgdG8gZGlnIGludG8gYHNhdmVfYXV4X3B0cl90eXBlYCB0byBmdWxseSBncmFzcCB0aGUgcmFtaWZpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZS4gSXQncyB0aGUgY29yZSBmdW5jdGlvbiBoZXJlLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGl0IGRvZXMgYW5kIGhvdyB0aGUgbmV3IGltcGxlbWVudGF0aW9uIGltcGFjdHMgdGhlIHZlcmlmaWVyJ3MgYmVoYXZpb3IuIFRpbWUgdG8gZGVsdmUgaW50byB0aGF0IGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzQ4LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjExLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMTE6MTk6MTEuMTEyMDU0Nzc1WiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjgyNjcyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzYXZlX2F1eF9wdHJfdHlwZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL3ZlcmlmaWVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jPTYzMzQ9c3RhdGljIGludCBjaGVja19tZW1fYWNjZXNzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBpbnNuX2lkeCwgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZywgYXJnbm9fdCBhcmdubyxcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NTc5LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo2NTgwOnN0YXRpYyBpbnQgc2F2ZV9hdXhfcHRyX3R5cGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgZW51bSBicGZfcmVnX3R5cGUgdHlwZSxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjU4MS1cXHRcXHRcXHQgICAgIGJvb2wgYWxsb3dfdHJ1c3RfbWlzbWF0Y2gpO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTY1ODM9c3RhdGljIGludCBjaGVja19sb2FkX21lbShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjYyMC1cXHRcXHRcXHQgICAgICAgc3RyaWN0X2FsaWdubWVudF9vbmNlLCBpc19sZHN4KTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjYyMTpcXHRlcnIgPSBlcnIgPzogc2F2ZV9hdXhfcHRyX3R5cGUoZW52LCBzcmNfcmVnX3R5cGUsXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY2MjItXFx0XFx0XFx0XFx0ICAgICAgIGFsbG93X3RydXN0X21pc21hdGNoKTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz02NjMwPXN0YXRpYyBpbnQgY2hlY2tfc3RvcmVfcmVnKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy02NjYyLVxcdFxcdFxcdCAgICAgICBzdHJpY3RfYWxpZ25tZW50X29uY2UsIGZhbHNlKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NjY2MzpcXHRlcnIgPSBlcnIgPzogc2F2ZV9hdXhfcHRyX3R5cGUoZW52LCBkc3RfcmVnX3R5cGUsIGZhbHNlKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNjY2NC1cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz02NjY4PXN0YXRpYyBpbnQgY2hlY2tfYXRvbWljX3JtdyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY3NDEtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjY3NDI6XFx0ZXJyID0gc2F2ZV9hdXhfcHRyX3R5cGUoZW52LCBkc3RfcmVnLVxcdTAwM2V0eXBlLCBmYWxzZSk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTY3NDMtXFx0aWYgKGVycilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNzg2MD1zdGF0aWMgYm9vbCBpc19wdHJfdG9fbWVtKGVudW0gYnBmX3JlZ190eXBlIHR5cGUpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTc4NjQtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE3ODY1OnN0YXRpYyBpbnQgc2F2ZV9hdXhfcHRyX3R5cGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgZW51bSBicGZfcmVnX3R5cGUgdHlwZSxcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTc4NjYtXFx0XFx0XFx0ICAgICBib29sIGFsbG93X3RydXN0X21pc21hdGNoKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE4MDcwPXN0YXRpYyBpbnQgZG9fY2hlY2tfaW5zbihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBib29sICpkb19wcmludF9zdGF0ZSlcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODExMy1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTgxMTQ6XFx0XFx0cmV0dXJuIHNhdmVfYXV4X3B0cl90eXBlKGVudiwgZHN0X3JlZ190eXBlLCBmYWxzZSk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4MTE1LVxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMTE6MTk6MTEuMTY0ODg0MzUzWiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1ODUzMDQ4NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIGBzYXZlX2F1eF9wdHJfdHlwZWAqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgc2F2ZV9hdXhfcHRyX3R5cGVgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29yZSBwdXJwb3NlIGFuZCBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIHRvIGFzc2VzcyBpdHMgaW1wbGljYXRpb25zLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCBpdHMgaW50ZW5kZWQgZnVuY3Rpb24uXG5cbldoYXQgZXhhY3RseSBpcyBpdCBzdXBwb3NlZCB0byBzYXZlPyBJcyBpdCByZWxhdGVkIHRvIGNhY2hpbmcsIG1ldGFkYXRhIG1hbmFnZW1lbnQsIG9yIHNvbWV0aGluZyBtb3JlIGZ1bmRhbWVudGFsIHRvIHRoZSBkYXRhIHN0cnVjdHVyZSBpdCdzIG9wZXJhdGluZyBvbj8gSSBzaG91bGQgbG9vayBhdCB3aGVyZSBhbmQgaG93IGl0J3MgY2FsbGVkLiBUaGUgY2FsbCBjb250ZXh0IG9mZmVycyB0aGUgYmVzdCBjbHVlIHJlZ2FyZGluZyB0aGUgbmF0dXJlIG9mIHRoZSBkYXRhIHR5cGUgaXQgZGVhbHMgd2l0aC4gQWxzbywgd2hhdCBpcyBpdCdzIHJlbGF0aW9uc2hpcCB3aXRoIG90aGVyIG1lbW9yeSBtYW5hZ2VtZW50IHJvdXRpbmVzLiBBcmUgd2UgbG9va2luZyBhdCBhIGxvY2FsIGNvcHksIG9yIGEgcG9pbnRlciB0byB0aGUgb3JpZ2luYWwgbWVtb3J5IGJsb2NrP1xuXG5JJ2xsIGNoZWNrIHRoZSBhc3NvY2lhdGVkIGRhdGEgc3RydWN0dXJlcy4gSSBuZWVkIHRvIGRldGVybWluZSB0aGUgcG9pbnRlciBiZWluZyBzYXZlZCBpcyBwYXJ0IG9mIGEgY29tcG91bmQgdHlwZSBhbmQgbmVlZHMgcmVjb25zdHJ1Y3Rpb24uIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBzb3VyY2Ugb2YgdGhlIGRhdGE6IGlzIGl0IGNvbWluZyBmcm9tIGEgZ2xvYmFsIHN0YXRlLCBhIHN0YWNrLCBvciBhIGhlYXA/IFVuZGVyc3RhbmRpbmcgdGhlIGFsbG9jYXRpb24gc3RyYXRlZ3kgaXMga2V5LiBBcmUgdGhlcmUgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBtZW1vcnkgbGVha3MgYXNzb2NpYXRlZCB3aXRoIGhvdyB0aGlzIHBvaW50ZXIgaXMgaGFuZGxlZD9cblxuRXNzZW50aWFsbHksIEkgbmVlZCB0byB0cmFjZSBpdHMgdXNhZ2UsIGlkZW50aWZ5IGl0cyByb2xlIHdpdGhpbiB0aGUgd2lkZXIgZnJhbWV3b3JrLCBhbmQgYW50aWNpcGF0ZSBhbnkgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyBvciBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDEyMiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDExOjE5OjE0Ljc1MDE5MjA3MloiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDk1NjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNzg2NSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTc4NjU6XFx0c3RhdGljIGludCBzYXZlX2F1eF9wdHJfdHlwZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBlbnVtIGJwZl9yZWdfdHlwZSB0eXBlLFxcbjE3ODY2OlxcdFxcdFxcdFxcdCAgICAgYm9vbCBhbGxvd190cnVzdF9taXNtYXRjaClcXG4xNzg2NzpcXHR7XFxuMTc4Njg6XFx0XFx0ZW51bSBicGZfcmVnX3R5cGUgKnByZXZfdHlwZSA9IFxcdTAwMjZlbnYtXFx1MDAzZWluc25fYXV4X2RhdGFbZW52LVxcdTAwM2VpbnNuX2lkeF0ucHRyX3R5cGU7XFxuMTc4Njk6XFx0XFx0ZW51bSBicGZfcmVnX3R5cGUgbWVyZ2VkX3R5cGU7XFxuMTc4NzA6XFx0XFxuMTc4NzE6XFx0XFx0aWYgKCpwcmV2X3R5cGUgPT0gTk9UX0lOSVQpIHtcXG4xNzg3MjpcXHRcXHRcXHQvKiBTYXcgYSB2YWxpZCBpbnNuXFxuMTc4NzM6XFx0XFx0XFx0ICogZHN0X3JlZyA9ICoodTMyICopKHNyY19yZWcgKyBvZmYpXFxuMTc4NzQ6XFx0XFx0XFx0ICogc2F2ZSB0eXBlIHRvIHZhbGlkYXRlIGludGVyc2VjdGluZyBwYXRoc1xcbjE3ODc1OlxcdFxcdFxcdCAqL1xcbjE3ODc2OlxcdFxcdFxcdCpwcmV2X3R5cGUgPSB0eXBlO1xcbjE3ODc3OlxcdFxcdH0gZWxzZSBpZiAocmVnX3R5cGVfbWlzbWF0Y2godHlwZSwgKnByZXZfdHlwZSkpIHtcXG4xNzg3ODpcXHRcXHRcXHQvKiBBYnVzZXIgcHJvZ3JhbSBpcyB0cnlpbmcgdG8gdXNlIHRoZSBzYW1lIGluc25cXG4xNzg3OTpcXHRcXHRcXHQgKiBkc3RfcmVnID0gKih1MzIqKSAoc3JjX3JlZyArIG9mZilcXG4xNzg4MDpcXHRcXHRcXHQgKiB3aXRoIGRpZmZlcmVudCBwb2ludGVyIHR5cGVzOlxcbjE3ODgxOlxcdFxcdFxcdCAqIHNyY19yZWcgPT0gY3R4IGluIG9uZSBicmFuY2ggYW5kXFxuMTc4ODI6XFx0XFx0XFx0ICogc3JjX3JlZyA9PSBzdGFja3xtYXAgaW4gc29tZSBvdGhlciBicmFuY2guXFxuMTc4ODM6XFx0XFx0XFx0ICogUmVqZWN0IGl0LlxcbjE3ODg0OlxcdFxcdFxcdCAqL1xcbjE3ODg1OlxcdFxcdFxcdGlmIChhbGxvd190cnVzdF9taXNtYXRjaCBcXHUwMDI2XFx1MDAyNlxcbjE3ODg2OlxcdFxcdFxcdCAgICBpc19wdHJfdG9fbWVtX29yX2J0Zl9pZCh0eXBlKSBcXHUwMDI2XFx1MDAyNlxcbjE3ODg3OlxcdFxcdFxcdCAgICBpc19wdHJfdG9fbWVtX29yX2J0Zl9pZCgqcHJldl90eXBlKSkge1xcbjE3ODg4OlxcdFxcdFxcdFxcdC8qXFxuMTc4ODk6XFx0XFx0XFx0XFx0ICogSGF2ZSB0byBzdXBwb3J0IGEgdXNlIGNhc2Ugd2hlbiBvbmUgcGF0aCB0aHJvdWdoXFxuMTc4OTA6XFx0XFx0XFx0XFx0ICogdGhlIHByb2dyYW0geWllbGRzIFRSVVNURUQgcG9pbnRlciB3aGlsZSBhbm90aGVyXFxuMTc4OTE6XFx0XFx0XFx0XFx0ICogaXMgVU5UUlVTVEVELiBGYWxsYmFjayB0byBVTlRSVVNURUQgdG8gZ2VuZXJhdGVcXG4xNzg5MjpcXHRcXHRcXHRcXHQgKiBCUEZfUFJPQkVfTUVNL0JQRl9QUk9CRV9NRU1TWC5cXG4xNzg5MzpcXHRcXHRcXHRcXHQgKiBTYW1lIGJlaGF2aW9yIG9mIE1FTV9SRE9OTFkgZmxhZy5cXG4xNzg5NDpcXHRcXHRcXHRcXHQgKi9cXG4xNzg5NTpcXHRcXHRcXHRcXHRpZiAoaXNfcHRyX3RvX21lbSh0eXBlKSB8fCBpc19wdHJfdG9fbWVtKCpwcmV2X3R5cGUpKVxcbjE3ODk2OlxcdFxcdFxcdFxcdFxcdG1lcmdlZF90eXBlID0gUFRSX1RPX01FTTtcXG4xNzg5NzpcXHRcXHRcXHRcXHRlbHNlXFxuMTc4OTg6XFx0XFx0XFx0XFx0XFx0bWVyZ2VkX3R5cGUgPSBQVFJfVE9fQlRGX0lEO1xcbjE3ODk5OlxcdFxcdFxcdFxcdGlmICgodHlwZSBcXHUwMDI2IFBUUl9VTlRSVVNURUQpIHx8ICgqcHJldl90eXBlIFxcdTAwMjYgUFRSX1VOVFJVU1RFRCkpXFxuMTc5MDA6XFx0XFx0XFx0XFx0XFx0bWVyZ2VkX3R5cGUgfD0gUFRSX1VOVFJVU1RFRDtcXG4xNzkwMTpcXHRcXHRcXHRcXHRpZiAoKHR5cGUgXFx1MDAyNiBNRU1fUkRPTkxZKSB8fCAoKnByZXZfdHlwZSBcXHUwMDI2IE1FTV9SRE9OTFkpKVxcbjE3OTAyOlxcdFxcdFxcdFxcdFxcdG1lcmdlZF90eXBlIHw9IE1FTV9SRE9OTFk7XFxuMTc5MDM6XFx0XFx0XFx0XFx0KnByZXZfdHlwZSA9IG1lcmdlZF90eXBlO1xcbjE3OTA0OlxcdFxcdFxcdH0gZWxzZSB7XFxuMTc5MDU6XFx0XFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCJzYW1lIGluc24gY2Fubm90IGJlIHVzZWQgd2l0aCBkaWZmZXJlbnQgcG9pbnRlcnNcXFxcblxcXCIpO1xcbjE3OTA2OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjE3OTA3OlxcdFxcdFxcdH1cXG4xNzkwODpcXHRcXHR9XFxuMTc5MDk6XFx0XFxuMTc5MTA6XFx0XFx0cmV0dXJuIDA7XFxuMTc5MTE6XFx0fVxcbjE3OTEyOlxcdFxcbjE3OTEzOlxcdGVudW0ge1xcbjE3OTE0OlxcdFxcdFBST0NFU1NfQlBGX0VYSVQgPSAxLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQxMToxOToxNC43NTEyOTA2MTJaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTYwMzY5NDEyODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgdGhlIEF0b21pYyBSTVcgUG9pbnRlciBUeXBlIEJ1ZyBGaXgqKlxuXG5Pa2F5LCBoZXJlJ3MgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGlzIHBhdGNoIGFuZCB0aGUgYXNzb2NpYXRlZCBpbXBsaWNhdGlvbnMuIFRoZSBjb3JlIGlzc3VlIHJldm9sdmVzIGFyb3VuZCBob3cgdGhlIHZlcmlmaWVyIGhhbmRsZXMgYXRvbWljIFJNVyBpbnN0cnVjdGlvbnMgYW5kIHRoZSBwb2ludGVyIHR5cGVzIHRoZXkgb3BlcmF0ZSBvbi4gUHJldmlvdXNseSwgYHNhdmVfYXV4X3B0cl90eXBlYCB3YXMgb25seSBjYWxsZWQgd2l0aGluIGBjaGVja19hdG9taWNfcm13YCBpZiB0aGUgZGVzdGluYXRpb24gcmVnaXN0ZXIgd2FzIGFuIGFyZW5hIHJlZ2lzdGVyLCB1c2luZyBgaXNfYXJlbmFfcmVnYC4gVGhpcyBjcmVhdGVkIGEgY3JpdGljYWwgZmxhdy5cblxuSWYgYHNhdmVfYXV4X3B0cl90eXBlYCAqd2Fzbid0KiBjYWxsZWQsIHRoZSB2ZXJpZmllciB3b3VsZG4ndCB0cmFjayBvciBlbmZvcmNlIHRoYXQgYSBjb25zaXN0ZW50IHBvaW50ZXIgdHlwZSB3YXMgdXNlZCBhY3Jvc3MgYWxsIGJyYW5jaGVzIG9mIHRoZSBhdG9taWMgUk1XLiBUaGlzIG1lYW5zIHRoZSBwcm9ncmFtIGNvdWxkIHBvdGVudGlhbGx5IHVzZSBgUFRSX1RPX1NUQUNLYCwgYFBUUl9UT19BUkVOQWAsIG9yIGBQVFJfVE9fTUFQX1ZBTFVFYCBpbiBkaWZmZXJlbnQgYnJhbmNoZXMgb2YgdGhlIHByb2dyYW0uXG5cblRoZSBjb25zZXF1ZW5jZT8gVGhlIEpJVCBjb3VsZCBnZW5lcmF0ZSBjb2RlIG9wdGltaXplZCBmb3IgYSBzcGVjaWZpYyBwb2ludGVyIHR5cGUg4oCTIHNheSwgYXJlbmEgcG9pbnRlcnMsIHdoaWNoIG1pZ2h0IG5lY2Vzc2l0YXRlIHNwZWNpZmljIGJhc2UgcmVnaXN0ZXJzIG9yIGFkZHJlc3Mgc3BhY2UgY2FzdGluZyDigJMgYnV0LCBhdCBydW50aW1lLCB0aGUgc2FtZSBhdG9taWMgaW5zdHJ1Y3Rpb24gY291bGQgYmUgZXhlY3V0ZWQgd2l0aCBhIGRpZmZlcmVudCBwb2ludGVyIHR5cGUsIGxpa2UgYSBzdGFjayBwb2ludGVyLlxuXG5JZiB0aGUgdmVyaWZpZXIgZG9lc24ndCBjYXRjaCBpdCwgdGhpcyBjb3VsZCBjYXVzZSBtZW1vcnkgY29ycnVwdGlvbiwgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgb3Igb3RoZXIgaXNzdWVzLiBGb3IgaW5zdGFuY2UsIGFuIGF0b21pYyB3cml0ZSBvbiBhbiBhcmVuYSBhZGRyZXNzIHdoZW4gc3RhY2sgbWVtb3J5IGlzIGV4cGVjdGVkIGNvdWxkIGxlYWQgdG8gYSByZWFkIG9yIHdyaXRlIHRvIGFuIGludmFsaWQgYWRkcmVzcyBvciBwb3RlbnRpYWxseSBvdmVyd3JpdGUgc29tZXRoaW5nIGltcG9ydGFudC4gQ29udmVyc2VseSwgaWYgaXQgdGhpbmtzIGl0J3Mgd29ya2luZyB3aXRoIHN0YWNrIG1lbW9yeSB3aGVuIGl0J3MgcmVhbGx5IGFuIGFyZW5hIGFkZHJlc3MsIHRoYXQncyBhIHByb2JsZW0gdG9vLlxuXG5UaGUgcXVlc3Rpb24gdGhlbiBiZWNvbWVzOiBkb2VzIHRoaXMgYnVnIHVuaXF1ZWx5IGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IEtNU0FOIHdvdWxkIGRldGVjdD8gTXkgYXNzZXNzbWVudCBpcyBuby4gVGhpcyBpcyBhIGNsYXNzaWMgdmVyaWZpZXIgYnlwYXNzLCB3aGVyZSB0aGUgdmVyaWZpZXIgZmFpbHMgdG8gZW5mb3JjZSBtZW1vcnkgc2FmZXR5IHJ1bGVzLiBUaGlzIHR5cGljYWxseSBtYW5pZmVzdHMgYXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIG9yIG1lbW9yeSBjb3JydXB0aW9uLiBUaGVzZSBwcm9ibGVtcyBhcmUgY2F1Z2h0IGJ5IEtBU0FOLiBXaGlsZSB0aGVyZSdzIGEgdGhlb3JldGljYWwgcmlzayBvZiByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBhdG9taWMgaW5zdHJ1Y3Rpb25zIGxpa2UgYGxvY2sgKih1NjQgKikocjggKyAwKSArPSByOWAgbW9kaWZ5IG1lbW9yeSBpbiBwbGFjZS4gVGhleSBkb24ndCBjb3B5IHRoZSB2YWx1ZSBvZiB0aGUgbWVtb3J5IHRvIGEgcmVnaXN0ZXIgdGhhdCBtaWdodCB0aGVuIGJlIGxlYWtlZCwgZXhjZXB0IG1heWJlIGZvciBgQlBGX0ZFVENIYCBpbnN0cnVjdGlvbnMgd2hpY2ggcmV0dXJuIHRoZSBvbGQgdmFsdWUgaW4gYSByZWdpc3Rlci4gS0FTQU4gaXMgc3VmZmljaWVudCBmb3IgY2F0Y2hpbmcgdGhlIHJlc3VsdGluZyBPT0IgYWNjZXNzIGluIGFueSBjYXNlLCBzbyBLTVNBTiBpc24ndCBuZWVkZWQgaGVyZS4gVGhlIGJ1ZydzIHJvb3QgY2F1c2UgaXMgYSB2ZXJpZmllciBieXBhc3MgYWxsb3dpbmcgdGhlIG1peGluZyBvZiBwb2ludGVyIHR5cGVzLiBUaGUgc3RhbmRhcmQgS0FTQU4gY2hlY2tzIGFyZSBzdWZmaWNpZW50LlxuXG5Mb29raW5nIGF0IHRoZSBwYXRjaCBpdHNlbGYsIHRoZSBmaXggaXMgc3RyYWlnaHRmb3J3YXJkLiBUaGV5J3JlIHJlcGxhY2luZyB0aGUgb3JpZ2luYWwgYGlmIChpc19hcmVuYV9yZWcoZW52LCBpbnNuLVx1MDAzZWRzdF9yZWcpKWAgY29uZGl0aW9uIHdpdGggYSBkaXJlY3QgY2FsbCB0byBgc2F2ZV9hdXhfcHRyX3R5cGVgLCB1c2luZyB0aGUgZGVzdGluYXRpb24gcmVnaXN0ZXIncyB0eXBlLiBUaGlzIGVuc3VyZXMgdGhhdCB0aGUgcG9pbnRlciB0eXBlIGlzIGFsd2F5cyBzYXZlZCwgcmVnYXJkbGVzcyBvZiB0aGUgcG9pbnRlciB0eXBlLlxuXG5UaGUgdGVzdCBjYXNlIHByb3ZpZGVkIGNsZWFybHkgZGVtb25zdHJhdGVzIHRoZSB2ZXJpZmllciBieXBhc3M6ICBpdCB1c2VzIHRoZSBkZXN0aW5hdGlvbiByZWdpc3RlciBhcyBlaXRoZXIgYW4gYXJlbmEgb3Igc3RhY2sgcmVnaXN0ZXIuICBCZWNhdXNlIHRoZSB2ZXJpZmllciBhbGxvd3MgdGhlIHByb2dyYW0gdG8gbWl4IHBvaW50ZXIgdHlwZXMgaW4gZGlmZmVyZW50IGJyYW5jaGVzLCBhbmQgYmVjYXVzZSBgc2F2ZV9hdXhfcHRyX3R5cGVgIHdhcyAqbm90KiBiZWluZyBjYWxsZWQgaW4gYWxsIGNhc2VzIGJlZm9yZSwgdGhlIEpJVCB3b3VsZCBmYWlsIHRvIGNhdGNoIHRoZSBwb3RlbnRpYWwgbWlzbWF0Y2ggYW5kIHdvdWxkIGFsbG93IGFuIGF0b21pYyBSTVcgb3BlcmF0aW9uIG9uIGFuIGFyZW5hIHBvaW50ZXIsIHBvdGVudGlhbGx5IHdpdGggc3RhY2sgbWVtb3J5IGJlaW5nIHVzZWQuICBUaGlzIGJ5cGFzcyBtYWtlcyBpdCBhIHZlcmlmaWVyIGJ1ZyB0aGF0IHdpbGwgZ2VuZXJhdGUgYW4gT09CIG9yIG1lbW9yeSBjb3JydXB0aW9uLlxuXG5UaGVyZWZvcmUsIHNpbmNlIHRoaXMgaXMgYSB2ZXJpZmllciBieXBhc3MgYW5kIGNhbiBsZWFkIHRvIHN0YW5kYXJkIG1lbW9yeSBlcnJvcnMgY2F1Z2h0IGJ5IEtBU0FOLCBJJ2xsIHNldCBgTmVlZHNLTVNBTmAgdG8gZmFsc2UuIFRoZSBpc3N1ZSBkb2Vzbid0IHJlcXVpcmUgS01TQU4sIGFuZCBLQVNBTiB3aWxsIGJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggdGhlIHJlc3VsdGluZyBlcnJvcnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzNTQsIk91dHB1dFRva2VucyI6MTg3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA2OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDExOjE5OjMwLjc4ODIzMzc1MloiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBCUEYgdmVyaWZpZXIgYnVnIHdoZXJlIGBzYXZlX2F1eF9wdHJfdHlwZSgpYCB3YXMgbm90IGNhbGxlZCBmb3IgYWxsIHBvaW50ZXIgdHlwZXMgZHVyaW5nIGF0b21pYyByZWFkLW1vZGlmeS13cml0ZSAoUk1XKSBpbnN0cnVjdGlvbiB2ZXJpZmljYXRpb24uIFRoaXMgb21pc3Npb24gYWxsb3dlZCBhIG1hbGljaW91cyBCUEYgcHJvZ3JhbSB0byB1c2UgdGhlIHNhbWUgYXRvbWljIGluc3RydWN0aW9uIHdpdGggZGlmZmVyZW50IHBvaW50ZXIgdHlwZXMgKGUuZy4sIG1peGluZyBgUFRSX1RPX0FSRU5BYCBhbmQgYFBUUl9UT19TVEFDS2AgaW4gZGlmZmVyZW50IGJyYW5jaGVzKS4gU3VjaCB2ZXJpZmllciBieXBhc3NlcyB0eXBpY2FsbHkgbGVhZCB0byBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbWVtb3J5IGNvcnJ1cHRpb24gZHVlIHRvIGluY29ycmVjdCBKSVQgY29tcGlsYXRpb24gb3IgbWlzc2luZyBydW50aW1lIGNoZWNrcy4gVGhlc2UgdHlwZXMgb2YgbWVtb3J5IHNhZmV0eSB2aW9sYXRpb25zIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBCUEYgdmVyaWZpZXIgYnVnIHdoZXJlIGBzYXZlX2F1eF9wdHJfdHlwZSgpYCB3YXMgbm90IGNhbGxlZCBmb3IgYWxsIHBvaW50ZXIgdHlwZXMgZHVyaW5nIGF0b21pYyByZWFkLW1vZGlmeS13cml0ZSAoUk1XKSBpbnN0cnVjdGlvbiB2ZXJpZmljYXRpb24uIFRoaXMgb21pc3Npb24gYWxsb3dlZCBhIG1hbGljaW91cyBCUEYgcHJvZ3JhbSB0byB1c2UgdGhlIHNhbWUgYXRvbWljIGluc3RydWN0aW9uIHdpdGggZGlmZmVyZW50IHBvaW50ZXIgdHlwZXMgKGUuZy4sIG1peGluZyBgUFRSX1RPX0FSRU5BYCBhbmQgYFBUUl9UT19TVEFDS2AgaW4gZGlmZmVyZW50IGJyYW5jaGVzKS4gU3VjaCB2ZXJpZmllciBieXBhc3NlcyB0eXBpY2FsbHkgbGVhZCB0byBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbWVtb3J5IGNvcnJ1cHRpb24gZHVlIHRvIGluY29ycmVjdCBKSVQgY29tcGlsYXRpb24gb3IgbWlzc2luZyBydW50aW1lIGNoZWNrcy4gVGhlc2UgdHlwZXMgb2YgbWVtb3J5IHNhZmV0eSB2aW9sYXRpb25zIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowwt5bh[1] Phase: Succeeded StartedAt: 2026-08-16 11:19:41 +0000 UTC FinishedAt: 2026-08-16 11:19:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwt5bh[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-16 11:19:41 +0000 UTC FinishedAt: 2026-08-16 11:19:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwt5bh[2] Phase: Succeeded StartedAt: 2026-08-16 11:19:41 +0000 UTC FinishedAt: 2026-08-16 15:00:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwt5bh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c93cbdb13f995f87b5356329b3fe551c80bb482d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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"],"focus":["bpf"],"focus_symbols":["bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c93cbdb13f995f87b5356329b3fe551c80bb482d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"8fc3091d-16ab-4ef6-aa07-77456a36db91","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-08-16 11:19:41 +0000 UTC FinishedAt: 2026-08-16 15:00:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"c93cbdb13f995f87b5356329b3fe551c80bb482d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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"],"focus":["bpf"],"focus_symbols":["bpf_check"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"c93cbdb13f995f87b5356329b3fe551c80bb482d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"8fc3091d-16ab-4ef6-aa07-77456a36db91","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-workflowwt5bh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c93cbdb13f995f87b5356329b3fe551c80bb482d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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"],"focus":["bpf"],"focus_symbols":["bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c93cbdb13f995f87b5356329b3fe551c80bb482d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"8fc3091d-16ab-4ef6-aa07-77456a36db91","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-08-16 11:19:41 +0000 UTC FinishedAt: 2026-08-16 11:19:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwt5bh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c93cbdb13f995f87b5356329b3fe551c80bb482d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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"],"focus":["bpf"],"focus_symbols":["bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c93cbdb13f995f87b5356329b3fe551c80bb482d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"8fc3091d-16ab-4ef6-aa07-77456a36db91","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-08-16 11:19:41 +0000 UTC FinishedAt: 2026-08-16 11:19:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"c93cbdb13f995f87b5356329b3fe551c80bb482d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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-workflowwt5bh/series-workflowwt5bh-convert-artifact-3309556959/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwt5bh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c93cbdb13f995f87b5356329b3fe551c80bb482d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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"],"focus":["bpf"],"focus_symbols":["bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c93cbdb13f995f87b5356329b3fe551c80bb482d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"8fc3091d-16ab-4ef6-aa07-77456a36db91","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-08-16 11:19:51 +0000 UTC FinishedAt: 2026-08-16 11:36:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwt5bh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c93cbdb13f995f87b5356329b3fe551c80bb482d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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"],"focus":["bpf"],"focus_symbols":["bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c93cbdb13f995f87b5356329b3fe551c80bb482d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"8fc3091d-16ab-4ef6-aa07-77456a36db91","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-08-16 11:19:51 +0000 UTC FinishedAt: 2026-08-16 11:36:06 +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:*e1f474d8-4e39-4bfc-bde4-36ba62b660c2,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-workflowwt5bh/series-workflowwt5bh-convert-artifact-3309556959/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": "c85dfc03-4876-4466-a277-befcff499703", "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-workflowwt5bh/series-workflowwt5bh-build-action-1381415397/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwt5bh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c93cbdb13f995f87b5356329b3fe551c80bb482d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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"],"focus":["bpf"],"focus_symbols":["bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c93cbdb13f995f87b5356329b3fe551c80bb482d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"8fc3091d-16ab-4ef6-aa07-77456a36db91","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-08-16 11:19:51 +0000 UTC FinishedAt: 2026-08-16 11:35:56 +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:*e1f474d8-4e39-4bfc-bde4-36ba62b660c2,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-workflowwt5bh/series-workflowwt5bh-convert-artifact-3309556959/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": "c85dfc03-4876-4466-a277-befcff499703", "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-workflowwt5bh/series-workflowwt5bh-build-action-1381415397/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwt5bh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c93cbdb13f995f87b5356329b3fe551c80bb482d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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"],"focus":["bpf"],"focus_symbols":["bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c93cbdb13f995f87b5356329b3fe551c80bb482d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"8fc3091d-16ab-4ef6-aa07-77456a36db91","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-08-16 11:36:06 +0000 UTC FinishedAt: 2026-08-16 11:36:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwt5bh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c93cbdb13f995f87b5356329b3fe551c80bb482d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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"],"focus":["bpf"],"focus_symbols":["bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c93cbdb13f995f87b5356329b3fe551c80bb482d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"8fc3091d-16ab-4ef6-aa07-77456a36db91","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-08-16 11:36:06 +0000 UTC FinishedAt: 2026-08-16 11:36:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwt5bh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c93cbdb13f995f87b5356329b3fe551c80bb482d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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"],"focus":["bpf"],"focus_symbols":["bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c93cbdb13f995f87b5356329b3fe551c80bb482d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"8fc3091d-16ab-4ef6-aa07-77456a36db91","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-08-16 11:36:06 +0000 UTC FinishedAt: 2026-08-16 11:36:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwt5bh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c93cbdb13f995f87b5356329b3fe551c80bb482d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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"],"focus":["bpf"],"focus_symbols":["bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c93cbdb13f995f87b5356329b3fe551c80bb482d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"8fc3091d-16ab-4ef6-aa07-77456a36db91","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-08-16 11:36:06 +0000 UTC FinishedAt: 2026-08-16 11:36:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"c93cbdb13f995f87b5356329b3fe551c80bb482d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"8fc3091d-16ab-4ef6-aa07-77456a36db91","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-workflowwt5bh/series-workflowwt5bh-convert-artifact-1028913774/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwt5bh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c93cbdb13f995f87b5356329b3fe551c80bb482d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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"],"focus":["bpf"],"focus_symbols":["bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c93cbdb13f995f87b5356329b3fe551c80bb482d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"8fc3091d-16ab-4ef6-aa07-77456a36db91","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-08-16 11:36:16 +0000 UTC FinishedAt: 2026-08-16 11:38:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwt5bh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c93cbdb13f995f87b5356329b3fe551c80bb482d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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"],"focus":["bpf"],"focus_symbols":["bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c93cbdb13f995f87b5356329b3fe551c80bb482d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"8fc3091d-16ab-4ef6-aa07-77456a36db91","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-08-16 11:36:16 +0000 UTC FinishedAt: 2026-08-16 11:38:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*c85dfc03-4876-4466-a277-befcff499703,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-workflowwt5bh/series-workflowwt5bh-build-action-1381415397/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-workflowwt5bh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c93cbdb13f995f87b5356329b3fe551c80bb482d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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"],"focus":["bpf"],"focus_symbols":["bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c93cbdb13f995f87b5356329b3fe551c80bb482d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"8fc3091d-16ab-4ef6-aa07-77456a36db91","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-08-16 11:38:41 +0000 UTC FinishedAt: 2026-08-16 11:38:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwt5bh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c93cbdb13f995f87b5356329b3fe551c80bb482d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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"],"focus":["bpf"],"focus_symbols":["bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c93cbdb13f995f87b5356329b3fe551c80bb482d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"8fc3091d-16ab-4ef6-aa07-77456a36db91","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-08-16 11:38:41 +0000 UTC FinishedAt: 2026-08-16 11:38:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwt5bh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c93cbdb13f995f87b5356329b3fe551c80bb482d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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"],"focus":["bpf"],"focus_symbols":["bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c93cbdb13f995f87b5356329b3fe551c80bb482d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"8fc3091d-16ab-4ef6-aa07-77456a36db91","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-08-16 11:38:41 +0000 UTC FinishedAt: 2026-08-16 11:55:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwt5bh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c93cbdb13f995f87b5356329b3fe551c80bb482d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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"],"focus":["bpf"],"focus_symbols":["bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c93cbdb13f995f87b5356329b3fe551c80bb482d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"8fc3091d-16ab-4ef6-aa07-77456a36db91","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-08-16 11:38:41 +0000 UTC FinishedAt: 2026-08-16 11:55:09 +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:*e1f474d8-4e39-4bfc-bde4-36ba62b660c2,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-workflowwt5bh/series-workflowwt5bh-convert-artifact-1028913774/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": "c3d8d825-7d30-4c16-86ce-8ed1ad55df6a", "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-workflowwt5bh/series-workflowwt5bh-build-action-863882114/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwt5bh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c93cbdb13f995f87b5356329b3fe551c80bb482d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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"],"focus":["bpf"],"focus_symbols":["bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c93cbdb13f995f87b5356329b3fe551c80bb482d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"8fc3091d-16ab-4ef6-aa07-77456a36db91","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-08-16 11:38:41 +0000 UTC FinishedAt: 2026-08-16 11:54:59 +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:*e1f474d8-4e39-4bfc-bde4-36ba62b660c2,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-workflowwt5bh/series-workflowwt5bh-convert-artifact-1028913774/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": "c3d8d825-7d30-4c16-86ce-8ed1ad55df6a", "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-workflowwt5bh/series-workflowwt5bh-build-action-863882114/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwt5bh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c93cbdb13f995f87b5356329b3fe551c80bb482d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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"],"focus":["bpf"],"focus_symbols":["bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c93cbdb13f995f87b5356329b3fe551c80bb482d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"8fc3091d-16ab-4ef6-aa07-77456a36db91","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-08-16 11:55:09 +0000 UTC FinishedAt: 2026-08-16 11:55:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwt5bh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c93cbdb13f995f87b5356329b3fe551c80bb482d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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"],"focus":["bpf"],"focus_symbols":["bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c93cbdb13f995f87b5356329b3fe551c80bb482d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"8fc3091d-16ab-4ef6-aa07-77456a36db91","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-08-16 11:55:09 +0000 UTC FinishedAt: 2026-08-16 11:55:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwt5bh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c93cbdb13f995f87b5356329b3fe551c80bb482d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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"],"focus":["bpf"],"focus_symbols":["bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c93cbdb13f995f87b5356329b3fe551c80bb482d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"8fc3091d-16ab-4ef6-aa07-77456a36db91","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-08-16 11:55:09 +0000 UTC FinishedAt: 2026-08-16 11:57:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwt5bh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c93cbdb13f995f87b5356329b3fe551c80bb482d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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"],"focus":["bpf"],"focus_symbols":["bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c93cbdb13f995f87b5356329b3fe551c80bb482d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"8fc3091d-16ab-4ef6-aa07-77456a36db91","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-08-16 11:55:09 +0000 UTC FinishedAt: 2026-08-16 11:57:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c3d8d825-7d30-4c16-86ce-8ed1ad55df6a,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-workflowwt5bh/series-workflowwt5bh-build-action-863882114/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-workflowwt5bh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c93cbdb13f995f87b5356329b3fe551c80bb482d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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"],"focus":["bpf"],"focus_symbols":["bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c93cbdb13f995f87b5356329b3fe551c80bb482d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"8fc3091d-16ab-4ef6-aa07-77456a36db91","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-08-16 11:57:10 +0000 UTC FinishedAt: 2026-08-16 15:00:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwt5bh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c93cbdb13f995f87b5356329b3fe551c80bb482d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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"],"focus":["bpf"],"focus_symbols":["bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c93cbdb13f995f87b5356329b3fe551c80bb482d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"8fc3091d-16ab-4ef6-aa07-77456a36db91","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-08-16 11:57:10 +0000 UTC FinishedAt: 2026-08-16 15:00:46 +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"],"focus":["bpf"],"focus_symbols":["bpf_check"],"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:*c85dfc03-4876-4466-a277-befcff499703,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c3d8d825-7d30-4c16-86ce-8ed1ad55df6a,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-workflowwt5bh/series-workflowwt5bh-build-action-1381415397/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-workflowwt5bh/series-workflowwt5bh-build-action-863882114/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowwt5bh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c93cbdb13f995f87b5356329b3fe551c80bb482d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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"],"focus":["bpf"],"focus_symbols":["bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c93cbdb13f995f87b5356329b3fe551c80bb482d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"8fc3091d-16ab-4ef6-aa07-77456a36db91","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-08-16 11:57:10 +0000 UTC FinishedAt: 2026-08-16 11:57:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwt5bh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c93cbdb13f995f87b5356329b3fe551c80bb482d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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"],"focus":["bpf"],"focus_symbols":["bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c93cbdb13f995f87b5356329b3fe551c80bb482d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"8fc3091d-16ab-4ef6-aa07-77456a36db91","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-08-16 11:57:10 +0000 UTC FinishedAt: 2026-08-16 11:57:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["bpf_check"],"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-workflowwt5bh/series-workflowwt5bh-convert-artifact-4046882323/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwt5bh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c93cbdb13f995f87b5356329b3fe551c80bb482d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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"],"focus":["bpf"],"focus_symbols":["bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c93cbdb13f995f87b5356329b3fe551c80bb482d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"8fc3091d-16ab-4ef6-aa07-77456a36db91","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-08-16 11:57:10 +0000 UTC FinishedAt: 2026-08-16 11:57:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwt5bh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c93cbdb13f995f87b5356329b3fe551c80bb482d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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"],"focus":["bpf"],"focus_symbols":["bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c93cbdb13f995f87b5356329b3fe551c80bb482d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"8fc3091d-16ab-4ef6-aa07-77456a36db91","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-08-16 11:57:10 +0000 UTC FinishedAt: 2026-08-16 11:57:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwt5bh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c93cbdb13f995f87b5356329b3fe551c80bb482d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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"],"focus":["bpf"],"focus_symbols":["bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c93cbdb13f995f87b5356329b3fe551c80bb482d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"8fc3091d-16ab-4ef6-aa07-77456a36db91","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-08-16 11:57:10 +0000 UTC FinishedAt: 2026-08-16 11:57:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwt5bh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c93cbdb13f995f87b5356329b3fe551c80bb482d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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"],"focus":["bpf"],"focus_symbols":["bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c93cbdb13f995f87b5356329b3fe551c80bb482d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"8fc3091d-16ab-4ef6-aa07-77456a36db91","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-08-16 11:57:20 +0000 UTC FinishedAt: 2026-08-16 15:00:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwt5bh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c93cbdb13f995f87b5356329b3fe551c80bb482d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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"],"focus":["bpf"],"focus_symbols":["bpf_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c93cbdb13f995f87b5356329b3fe551c80bb482d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"8fc3091d-16ab-4ef6-aa07-77456a36db91","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-08-16 11:57:20 +0000 UTC FinishedAt: 2026-08-16 15:00:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*c85dfc03-4876-4466-a277-befcff499703,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c3d8d825-7d30-4c16-86ce-8ed1ad55df6a,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-workflowwt5bh/series-workflowwt5bh-build-action-1381415397/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-workflowwt5bh/series-workflowwt5bh-build-action-863882114/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-workflowwt5bh/series-workflowwt5bh-convert-artifact-4046882323/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,}